eclair snapshot
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2739e6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+# for all subdirectories
+Makefile.in
+Makefile
+.libs
+.deps
+*.o
+*.lo
+*.la
+*.pc
+.*.swp
+.sw?
+
+# autofoo stuff here
+compile
+configure
+depcomp
+aclocal.m4
+autom4te.cache
+stamp-*
+libtool
+ltmain.sh
+missing
+install-sh
+glib-gettextize
+glib-zip
+gtk-doc.make
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..17814ca
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,40 @@
+Below are just a few of the people who have contributed
+to GLib. Please don't mail these people about problems you
+have with GTK+; see the README file for information about
+filing bugs and submitting patches.
+
+GLib-2.0 Team
+-------------
+Hans Breuer        <hans@breuer.org>
+Matthias Clasen    <mclasen@redhat.com>
+Tor Lillqvist      <tml@iki.fi>
+Tim Janik          <timj@gtk.org>
+Havoc Pennington   <hp@redhat.com> 
+Ron Steinke        <rsteinke@w-link.net>
+Owen Taylor        <otaylor@redhat.com>
+Sebastian Wilhelmi <seppi@seppi.de>
+
+GLib-1.2 Team
+-------------
+Shawn T. Amundson  <amundson@gimp.org>
+Jeff Garzik        <jgarzik@pobox.com>
+Raja R Harinath    <harinath@cs.umn.edu>
+Tim Janik          <timj@gtk.org>
+Elliot Lee         <sopwith@redhat.com>
+Tor Lillqvist      <tml@iki.fi>
+Paolo Molaro       <lupus@debian.org>
+Havoc Pennington   <hp@pobox.com>
+Manish Singh       <yosh@gimp.org>
+Owen Taylor        <otaylor@gtk.org>
+Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+
+The random number generator "Mersenne Twister", which is used by GLib,
+was developed and originally coded by:
+Makoto Matsumoto   <matumoto@math.keio.ac.jp>
+Takuji Nishimura   <nisimura@math.keio.ac.jp>
+
+Original Authors
+----------------
+Peter Mattis       <petm@xcf.berkeley.edu>
+Spencer Kimball    <spencer@xcf.berkeley.edu>
+Josh MacDonald     <jmacd@xcf.berkeley.edu>
diff --git a/Android.mk b/Android.mk
new file mode 100755
index 0000000..456efdd
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,20 @@
+#
+# Copyright (C) 2008 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+ifneq ($(TARGET_SIMULATOR),true)
+ifeq ($(BOARD_HAVE_BLUETOOTH),true)
+  include $(all-subdir-makefiles)
+endif
+endif
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..bf50f20
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,482 @@
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 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 library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    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 Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the 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 a program 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.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  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, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+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 compile 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) 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.
+
+    c) 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.
+
+    d) 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 source code 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 to
+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 Library 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 Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 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
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library 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!
diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2
new file mode 100644
index 0000000..e5b481a
--- /dev/null
+++ b/ChangeLog.pre-1-2
@@ -0,0 +1,2880 @@
+Sun Feb 21 22:11:51 CST 1999  Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.2.0
+
+	* AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* *.[ch]: inserted additional note to look for ChangeLog and
+	  AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999  Dr Mike <drmike@redhat.com>
+
+	* Made specfile generated, tweaked slightly
+	
+Thu Feb 18 08:24:12 1999  Tim Janik  <timj@gtk.org>
+
+	* gmem.c (g_realloc): plugged a memory leak, reported by Koen D'Hondt
+	<ripley@xs4all.nl> on 15 Oct 1998. allocate inital block from realloc.
+
+1999-02-17  Elliot Lee  <sopwith@redhat.com>
+
+	* glib.spec: Do --enable-debug=no for the .rpm's.
+
+Wed Feb 17 17:04:06 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32: Must define HAVE_PTHREAD_GETSPECIFIC_POSIX.
+
+Tue Feb 16 14:08:59 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* NEWS
+	  README
+	  INSTALL
+	  config.h.win32
+	  configure.in
+	  glib.spec
+	  glibconfig.h.win32
+	  docs/glib-config.1: version=1.1.16 
+
+	* Released GLib 1.1.16
+
+1999-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h, glibconfig.h.win32, configure.in: Changed signature of
+	all g_static_mutex_* functions to take a pointer rather than the
+	struct itself. This is not an issue at the moment, because those
+	funcs are really macros, but is it un'G'ish and might fall on our
+	feet in the future.
+
+Mon Feb 15 07:45:54 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in (--enable-debug): default to yes for development trees.
+
+Mon Feb 15 06:18:58 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: return guints instead of gints for g_hash_table_size
+	and g_hash_table_foreach_remove.
+
+Wed Feb 10 12:01:42 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: don't reset G_MODULE_IMPL, so it can be overridden
+	from the command line.
+
+1999-02-10  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h: s/G_LOCK_DECLARE/G_LOCK_DEFINE/ throuhout glib. Added
+	G_LOCK_EXTERN macro to declare a lock externally.
+
+Wed Feb 10 06:20:30 1999  Tim Janik  <timj@gtk.org>
+
+	* gmutex.c (g_static_private_set): invoke destroy notifier when
+	overwriting values, initialize new array fields with NULL.
+	(g_static_private_free_data): do not skip destroy notification for
+	data == NULL.
+
+	* gutils.c (g_direct_equal): compare pointer values directly instead
+	of just their guint values which is a loosing conversion for
+	sizeof(gpointer)==8 systems.
+	(g_get_any_init): restructured code so we don't use endless loops like
+	while (1), which boil down to an ugly alias for goto.
+	strip ,.* from the real name.
+
+February 9, 1999 sopwith@redhat.com
+
+	. glist.c, gnode.c, gslist.c: allocate pools of 128 items instead
+	of 1024 items.
+
+1999-02-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in, acconfig.h: Changed the test for getpwuid_r to
+	exclude those systems (i.e. IRIX), that set ENOSYS after the call.
+	Test, if pthread_getspecific is posix like or something different,
+	as on PCThreads.	
+
+Sun Feb  7 21:56:00 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gmem.c (g_mem_profile): Copy all elements
+	of the allocations[] array, including the last.
+	(Pointed out by "Matthew W. Samsonoff" <mws7323@osfmail.isc.rit.edu>)
+	
+1999-02-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Make the error message in case of a broken thread
+	system a bit more informative.
+
+	* gutils.c (g_get_any_init): Changed the error logic again, now
+	only leaving the memory doubling loop, when success is reached or
+	when the user isn't found or when the buffer is 32k big,
+	additionally now getpwuid will be run, if getpwuid_r didn't work
+	out properly. A warning is issued however.
+
+Thu Feb 04 20:42:24 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32 config.h.win32: Update GLIB_MICRO_VERSION.
+
+1999-02-04  Christopher Blizzard  <blizzard@redhat.com>
+
+	* glib.spec (Packager): Change my email address
+
+Thu Feb  4 01:45:01 PST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* ChangeLog
+	  NEWS
+	  README
+	  configure.in
+	  glib.spec
+	  docs/glib-config.1: version=1.1.15
+
+	* Released GLib 1.1.15
+
+Tue Feb 02 00:08:54 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* gmessages.c (g_log_default_handler): (Win32:) Don't call
+ 	ensure_stdout_valid (which would open an unneeded console window)
+ 	if we're calling a logging function.  Define ensure_stdout_valid
+ 	as an empty macro on Unix.
+
+	* gutils.c (g_get_any_init): (Win32:) Trust HOME first if defined,
+	then try HOMEDRIVE and HOMEPATH.
+
+Mon Feb  1 19:04:28 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_main_iterate): Release the main_loop
+	 lock around calls to prepare() and check() so
+	 that we are not holding the main loop lock
+	 over user code.
+
+1999-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Moved the check for MT safe function variants
+	after the determination of the MT cflags and use them there.
+
+1999-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Fixed typo. Now HPUX 11 thread system detection
+	should work.
+
+	* gutils.c (g_get_any_init): Changed initial bufsize to 64. Should
+	solve some problems out there.
+
+Wed Jan 27 23:21:50 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* INSTALL
+	  NEWS
+	  README
+	  configure.in
+	  glib.spec
+	  docs/glib-config.1: version=1.1.14
+
+	* Released GLib 1.1.14
+
+1999-01-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Simplified configure.in test for posix threads,
+	systems, that provide /usr/include/pthread.h should also have the
+	posix thread library. This is to avoid writing down all the tests
+	twice. New test for thread system on HPUX 11. Info from Matt
+	Nottingham <matt@sar.dera.gov.uk>.
+
+Wed Jan 27 20:39:49 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4: Xsed isn't valid here, don't use it
+
+	* ltmain.sh
+	* ltconfig: better file magic regexp for Linux libs
+
+	* gmodule/Makefile.am: arg, noinst_LTLIBRARIES doesn't make shared
+	libs, revert my previous change to this file
+
+	* docs/texinfo.tex: add it so automake doesn't whine
+
+Wed Jan 27 01:57:19 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in (G_MODULE_HAVE_DLERROR): applied patch from Andrej
+	Borsenkow <borsenkow.msk@sni.de> to also check for dlsym() in system
+	libraries and -ldl, to catch systems that provide dlopen() in libc
+	and dlsym() in libdl. this is at least the case for Reliant UNIX
+	5.44 (labeling itself as SINIX).
+
+Tue Jan 26 13:39:22 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* configure.in: don't use backquotes in warning text
+
+1999-01-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gdate.c (g_date_set_time): Removed the #warning about MT
+	unsafety without localtime_r.
+
+	* configure.in: Moved it here.
+
+Mon Jan 25 10:07:53 1999  Raph Levien  <raph@gimp.org>
+
+	* configure.in: (#define G_THREADS_IMPL...) Changed the #define,
+	adding the G_THREADS_IMPL_ prefix to $g_threads_impl_def because
+	it looked wrong to me and was breaking gimp compile.
+
+Mon Jan 25 15:34:43 1999  Timur Bakeyev <mc@bat.ru>
+
+	* configure.in, gstrfuncs.c: Inverted logic of NO_SYS_SYGLIST_DECL -
+	now it's normal (see 1999-01-19 Josh MacDonald). Also, remove from
+	#include <signal.h> wrapper NO_SYS_SYGLIST - *sys_syglist[] declara-
+	tion hides there.
+
+1999-01-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Do not use the thread libs, when searching for
+	some functions, as this might require glib to always be linked
+	with the thread libs on some platforms.
+
+	* gutils.c (g_get_any_init): Don't set errno to zero and use it
+	only as the error code, if the function returned a value less
+	0. It might happen, that the call succeeds, even though the errno
+	is set during the call (i.e. it first looks for a passwd file,
+	which is not found). Submitted by Michael Natterer
+	<mitschel@cs.tu-berlin.de>. BTW: Sorry for all the mess with that
+	`getpwuid_r' change, but it had to be done once.
+
+Sun Jan 24 10:33:30 1999  Tim Janik  <timj@gtk.org>
+
+	* gutils.c (g_get_any_init): reverted raja's changes, since they leaked
+	a struct passwd contents buffer and for the rest mostly substituted a
+	while loop with a bunch of gotos.
+	restored the getpwuid() code to what we had after my recent clean ups
+	("Sat Jan 23 02:14:28 1999 Tim Janik"), module yosh's recent changes.
+	to feature solaris behaviour of directly returning errno, we don't
+	modify error anymore if it's > 0 and simply reset errno.
+	don't reset g_home_dir for !NATIVE_WIN32 && !NATIVE_WIN32.
+
+1999-01-24  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* gutils.c 
+	(g_get_any_init) [HAVE_GETPWUID_R && HAVE_GETPWUID_R_POSIX]: 
+	Hopefully got the error handling for `getpwuid_r' right.
+	(g_get_any_init) [HAVE_GETPWUID_R && !HAVE_GETPWUID_R_POSIX]:
+	Fix typo (change `pw == NULL' to `pw != NULL').
+	
+Sun Jan 24 00:36:22 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* ghash.c:
+	- Revert previous "fix" (which really just did things a
+	  different way).
+	- (g_hash_table_remove): Don't need to support multiple values
+	  for a single key.
+
+	* tests/hash-test.c:
+	Add test where hash function always returns a single value.
+	Add beginnings of tests for g_hash_table_foreach[_remove] and
+	g_hash_table_remove.
+
+Sat Jan 23 20:40:06 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* gutils.c: removed the #warning about MT without getpwuid_r
+
+	* configure.in: and moved it here
+
+Sat Jan 23 22:45:59 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* ghash.c (g_hash_table_lookup_node, g_hash_table_lookup,
+		   g_hash_table_insert, g_hash_table_remove,
+		   g_hash_table_lookup_extended):
+	  - Fixed bug that overwrote nodes in hash buckets instead of
+	    adding them to the hash bucket node list.
+	    Hash tables now work as advertised.
+
+	(g_hash_table_resize):
+	  - Use g_new0 instead of manual init.
+	  - Space out code a bit for readability.
+
+	(g_hash_nodes_destroy):
+	  - Replaced "if (!hash_node) return;" with
+	    "if (hash_node) {do stuff}".
+	    Testing takes up less code space than explicit call to
+	    'return' before end of function.  (look at gcc -S)
+
+	Updated module header copyright to 1999.
+	New module macro G_HASH_BUCKET for (table,key)->bucket lookups.
+
+	* tests/hash-test.c:
+	- Add two new tests, one with strings as the keys and values, and
+	  one with ints as the keys and values.  Tests indirect (strings)
+	  and direct (ints) hashing.
+	- Cleanup unused junk left over from testglib.c.
+	- Converted a g_print call to g_assert_not_reached.
+	- Updated copyright to 1999.
+
+	* testglib.c, tests/string-test.c:
+	- Init 'tmp_string' var to NULL, silencing uninit-var warning.
+
+1999-01-23  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* gutils.c (g_get_any_init) [HAVE_GETPWUID_R]:
+	Rewrite not to look at `errno' if library call succeeds, since
+	`errno' is not reset to 0.
+	
+Sat Jan 23 16:17:04 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32: Update the magic values for
+	pthread_mutex_t size and initializer bytes to match the
+	latest version of pthreads for Win32.
+
+Sat Jan 23 02:14:28 1999  Tim Janik  <timj@gtk.org>
+
+	* gutils.c (g_get_any_init): cleaned up the errno mess for
+	GETPWUID. we especially don't want to g_error() out here!
+	the warning for G_THREADS_ENABLED and !HAVE_GETPWUID_R isn't
+	gcc related.
+	if !HAVE_PWD_H and !NATIVE_WIN32, g_free the home dir before
+	resetting it to NULL, why are we doing this anyways?
+	reordered code a bit so we always provide defaults (except
+	for g_home_dir).
+
+Thu Jan 21 12:40:11 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* tests/{Makefile.am, string-test.c, strfunc-test.c}:
+	Separate string and strfunc tests, working towards goal of
+	having separate test for each of the GLib modules.
+	Add a couple GString length tests.
+
+Thu Jan 21 09:36:05 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* configure.in:
+	Use AC_PREREQ not AC_REQUIRE for autoconf version test.
+
+1999-01-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_any_init): Changed error handling again, as the
+	error is not always set in errno, it is the return value on some
+	systems. What an evil world.
+
+Thu Jan 21 05:35:20 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* gstrfuncs.c: Include signal.h only when the signal names will be
+	needed.
+
+Wed Jan 20 22:09:59 EST 1999 Mandrake <mandrake@mandrake.net>
+
+	* configure.in / Makefile.am : made some adjustments for automake 1.4
+	and autoconf 2.13 (per suggestions made by  Raja R Harinath
+	<harinath@cs.umn.edu>)
+
+Wed Jan 20 20:33:14 EST 1999 Mandrake <mandrake@mandrake.net>
+
+	* autogen.sh: automake 1.4 and libtool 1.2d notices.
+	(maybe I'll write an actual test for automake 1.4 later)
+
+Wed Jan 20 15:05:25 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* HACKING: new file
+
+	* Makefile.am: since we require automake 1.4 now, ditch the build
+	top-level first and just use SUBDIRS
+
+	* gmodule/Makefile.am: use noinst_LTLIBRARIES instead of overriding
+	the install rule
+
+Wed Jan 20 16:16:01 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* gutils.c (g_get_any_init):
+	Revert previous patch, move error value set line down to proper
+	place.  Caught by Elliot Lee <sopwith@redhat.com>.
+
+Wed Jan 20 20:48:58 GMT 1999  Adam D. Moss  <adam@gimp.org>
+
+	* gutils.c (g_get_any_init): All gtk apps were broken
+	here on my setup.  I changed the error to a warning to at
+	least get things limping.
+
+1999-01-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_any_init): Use getpwuid_r with the right
+	signature, if available.
+
+	* configure.in, acconfig.h: Test for existance of getpwuid_r and
+	its signature.
+
+Tue Jan 19 20:52:43 1999  Tor Lillqvist  <tml@iki.fi>
+	
+	* Makefile.am (EXTRA_DIST): Add new Win32 files.
+
+	* README.win32: Describe the conditional compilation macros.
+
+	* makefile.lcc: Removed.
+
+1999-01-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Moved test for localtime_r and rand_r to a place
+	after the determination of the G_THREAD_LIBS and use them for
+	finding those functions, necessary on systems with a different C
+	library libc_r for threaded progs, like FreeBSD 2.2.x. Info from
+	Timur Bakeyev <mc@bat.ru>.
+
+Tue Jan 19 00:44:24 1999  Josh MacDonald  <jmacd@axis.hip.berkeley.edu>
+
+	* gstrfuncs.c (g_strsignal): The "extern char* sys_siglist"
+	declaration breaks systems with different declarations, like
+	mine (FreeBSD).  So, I added a configuration variable to decide
+	whether the declaration is neccesary.  Change also appears on
+	line 275 of configure.in.
+
+Sun Jan 17 17:13:54 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.13
+
+	* README:
+	  INSTALL:
+	  docs/glib-config: ver=1.1.13
+
+Mon Jan 18 00:02:46 1999  Tim Janik  <timj@gtk.org>
+
+	* NEWS: updates for 1.1.13.
+
+Sun Jan 17 17:15:59 1999  Tim Janik  <timj@gtk.org>
+
+	* gtree.c (g_tree_traverse): removed assertion about rtree->root being
+	NULL, so this function can be applied to unpopulated trees as well, fix
+	provided by Simon Kagedal <sika8225@csd.uu.se>.
+
+Sun Jan 17 11:17:19 1999 Christopher Blizzard  <blizzard@appliedtheory.com>
+
+	* glib.spec: add packager address
+
+Sun Jan 17 11:10:05 1999 Christopher Blizzard  <blizzard@appliedtheory.com>
+
+	* glib.spec: increment version number to 1.1.13
+
+Sun Jan 17 16:14:03 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h (g_error): if !defined (G_LOG_DOMAIN) define G_LOG_DOMAIN as
+	((gchar*) 0) instead of ((void*) 0) to silence egcs C++ mode, reported
+	by Seth Alves <alves@hungry.com>.
+
+Sun Jan 17 14:13:52 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added a define G_HOOK_DEFERRED_DESTROY, to substitute a noop
+	GHookList.hook_destroy function.
+
+	* ghook.c (g_hook_destroy_link): don't really call hook_destroy if it
+	is G_HOOK_DEFERRED_DESTROY. for the case where we invoke hook->destroy()
+	we now clean up the hook completely afterwards, i.e. data, func and
+	destroy are immediately set to NULL and hook_free can't play with that
+	values anymore.
+
+	* gmain.c (g_source_add): set hook_destroy to G_HOOK_DEFERRED_DESTROY,
+	instead of using an ugly _noop() hack, this is to avoid an uneccessary
+	function invocation. set hook_free to g_source_destroy_func, this way
+	we always invoke the destroy notifiers for user_data and source_data
+	after execution of dispatch(). thus, g_source_destroy_func() will always
+	be called within the main_loop lock (this wasn't really assured
+	before), and can release and reaquire the look around destroy notifier
+	invocation.
+
+Sun Jan 17 11:01:40 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32 glibconfig.h.win32: Increment version number here
+ 	also.
+
+Sun Jan 17 05:12:17 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: incremented version number to 1.1.13, bin age 0,
+	interface age 0.
+
+	* glib.h: added hook_destroy member to struct _GHookList.
+
+	* ghook.c (g_hook_destroy_link): if the hook_list defines a hook_destroy
+	function, use that to marshal hook destruction notifiers.
+
+	* gmain.c: removed g_source_free_func and added g_source_destroy_func,
+	which marshalls the user_data and source_data destructors of sources
+	outside of the main_loop lock.
+	removed GIdleData struct since its sole member callback can be passed
+	as source_data directly.
+	added a gboolean return value to all g_source_remove* functions,
+	indicating whether the source could be removed, because these functions
+	don't issue warnings upon unseccessful removals themselves. this way at
+	least the caller gets a chance to warn upon failing removals.
+	(g_main_iterate): set in_check_or_prepare around calls to check() or
+	prepare().
+	(g_main_pending): simply return FALSE if called from within check() or
+	prepare().
+	(g_main_iteration): issue a warning if called from within check() or
+	prepare() and bail out with FALSE.
+	(g_main_run): likewise.
+	(g_source_remove_by_funcs_user_data): new function to remove sources by
+	user data and function table.
+	(g_idle_remove_by_data): new function to really remove idles only, since
+	g_source_remove_by_user_data would remove timeouts or other sources as
+	well.
+
+1999-01-16  Tor Lillqvist  <tml@iki.fi>
+
+	* Merge in current Win32 version:
+
+	* README.win32: More text.
+
+	* config.h.win32 glibconfig.h.win32: Update to match the
+	corresponding generated files on Unix.
+
+	* makefile.msc: Update with new source files, and gthread
+ 	library. Use the compiler flag -MD instead of using -D_DLL and
+	/nodefaultlib:libc msvcrt.lib in the link phase.
+
+	* glib.def: Update to include new functions, drop removed ones.
+
+	* glib.h: Add comments about main loop and polling on Win32. (In
+	general, it's only for the GIMP's use.) Add Win32 IO Channel
+	functions. Remove the obsoleted old IO Channel stuff (which was
+	in #if 0 already).
+
+	* giowin32.c: New file.
+
+	* gmain.c: Include config.h, conditionalize <sys/time.h>
+ 	inclusion.  Add g_poll implementation for Win32 (only for the
+ 	GIMP's needs for now, it's hard or even impossible to be as clean
+ 	and generic as on Unix). Implement g_get_current_time on Win32. If
+ 	threads aren't supported, don't try to wake up main thread's
+ 	loop. On Win32, use a semaphore and not a pipe to wake up the main
+ 	loop.
+
+	* gmessages.c: On Win32, allocate a console window if the standard
+	output handle is invalid before writing to stdout, and reopen stdout
+	to that console window.
+
+	* giochannel.c: Conditionalize unistd.h inclusion. Some indentation
+	cleanup.
+
+	* gstrfuncs.c: Include <signal.h>.
+
+	* gutils.c: On Win32, also check the HOMEDRIVE and HOMEPATH
+	environment variables.
+
+Sun Jan 17 01:06:38 1999 Timur Bakeyev <mc@bat.ru>
+
+	* configure.in: Add support for FreeBSD 2.2.x macro _THREAD_SAFE.
+
+Wed Jan 13 11:27:24 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* glib.h: don't use inline for !__GNUC__ case with g_warning,
+	g_error, and g_message wrappers since some compilers throw
+	away arguments in this case
+
+Tue Jan 12 21:59:14 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.2d (with fixes for irix6 and osf)
+
+	* testglib.c: removed unused cruft
+
+Tue Jan 12 09:57:06 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* gdate.c: #warning isn't portable, check for gcc
+
+1999-01-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+        * gdate.c: Include config.h to get HAVE_LOCALTIME_R macro.
+
+        * configure.in: Moved function check back to the place, they've
+        been before.
+
+1999-01-11  Jeff Garzik  <jgarzik@pobox.com>
+
+	* gstrfuncs.c:
+	Do not use vasprintf.
+
+	* configure.in, glib.h, testglib.c, tests/.cvsignore,
+	  tests/Makefile.am, tests/alloca-test.c:
+	Do not use alloca.
+
+1999-01-11  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Test for localtime_r only after including the
+	right MT enabling CFLAGS (i.e. -D_REENTRANT on most systems).
+
+	* configure.in: Find right thread system on DG/UX. Thanks to Marc
+	J. Fraioli <fraioli@dg-rtp.dg.com> for hint. Finally removed the
+	stuff for -fstack-check, that didnt work anyway.
+
+	* gdate.c (g_date_set_time): Emit warning, if no localtime_r
+	function is available on thread enabled systems. Define ptm only,
+	if really needed, and assert on it.
+
+Sat Jan  9 15:08:44 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* testglib.c:
+	Make all aux functions static.
+
+	* tests/Makefile.am, tests/dirname-test.c, tests/type-test.c:
+	New tests dirname-test and type-test, from testglib.
+
+Sat Jan  9 13:53:00 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* configure.in:
+	Add checks for vasprintf, localtime_r.
+
+	* gdate.c (g_date_set_time):
+	Use localtime if localtime_r is not available.
+
+	* gstrfuncs.c (g_strdup_vprintf):
+	Use glibc vasprintf if possible; it's a bit faster than using
+	GLib routines, and makes output code a bit smaller.
+
+	* acconfig.h:
+	Remove HAVE_VSNPRINTF and HAVE_VPRINTF.  autoheader picks these
+	up automatically and puts them in config.h.in.
+
+Thu Jan  7 15:14:08 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_source_free_func): Call the source-specific
+	free function when the hook is freed not when it
+	is destroyed; this fixes a bug where a timeout destroyed
+	from itself would access already freed data.
+
+1999-01-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_any_init): Here we must replace getpwuid by
+	getpwuid_r, but as I do not know how for now, I just made a FIXME
+	note ;-)
+
+	* gdate.c (g_date_set_time): localtime --> localtime_r to make it
+	thread safe.
+
+	* configure.in: We do not need to check for broken solaris mutex
+	intitializer any longer. Provide a macro to show the used thread
+	implementation. Not nice, but this is needed until thread support
+	is completed here inside glib.
+
+Tue Jan  5 12:23:52 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* configure.in: ditch whitespace before GLIB_SYSDEFS #includes,
+	the # needs to be in column 1
+
+	* gthread/testgthread.c: cleanups
+
+	* tests/node-test.c: #include unistd.h for exit()
+
+1999-01-04  Andrew T. Veliath  <andrewtv@usa.net>
+
+	* glib.h (g_array_insert_val): fix macro to be shorthand of
+	g_array_insert_vals.
+
+Mon Jan  4 15:35:29 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* acglib.m4: some echos interpret \n's and some don't. Deal with
+	accordingly.
+
+Mon Jan  4 20:58:50 1999  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c: eliminated extraneous "register" qualifiers in variable
+	declarations.
+
+	* gmain.c: #undef events and revents which may have been defined in
+ 	sys/poll.h for SVR3,4 compatibility on some AIX systems. fix been
+	provided by Philippe Defert <Philippe.Defert@cern.ch>.
+
+Mon Jan  4 14:38:11 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: adjusted the g_strdup_a, g_strndup_a and g_strconcat3_a macros
+	so their arguments get only evaluated once. changed g_strconcat3_a to
+	have the same semantics as g_strconcat, i.e. if a certain argument is
+ 	NULL, the rest of the parameter list is skipped.
+
+	* tests/alloca-test.c: removed #if/#endif G_HAVE_ALLOCA, we need to be
+ 	able to compile on all systems. added test for g_strconcat() semantics.
+
+	* we need a alloca() replacement for !G_HAVE_ALLOCA rsn!
+
+Mon Jan  4 02:58:13 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+        * Released GLib 1.1.12
+
+        * INSTALL:
+          NEWS:
+          README:
+          configure.in:
+	  glib.spec:
+          docs/glib-config.1: version=1.1.12
+
+	* tests/Makefile.am: fixed so it works properly with
+	  builddir and srcdir.
+
+Sun Jan  3 01:38:14 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* tests/Makefile.am:
+	add array-test.c, tree-test.c
+
+	* tests/array-test.c, tests/tree-test.c:
+	New module, tests array family
+
+	* tests/hash-test.c, tests/list-test.c, tests/slist-test.c,
+	  tests/string-test.c, tests/node-test.c:
+	Clean out cruft left over from testglib.
+
+Sat Jan  2 22:42:25 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* Makefile.am, configure.in, tests/*:
+	Added 'make check' tests, based on testglib code.
+
+Sat Jan  2 19:52:45 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* glib.h, testglib.c:
+	Added g_alloca, g_new_a, g_new0_a macros.
+
+Sat Jan  2 16:45:44 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* testglib.c: Added g_strdup_printf check.
+
+Fri Jan  1 21:58:40 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* glib.h:
+	(g_strdup_a, g_strndup_a): Handle NULL strings like g_strdup.
+	s/g_strconcat_a/g_strconcat3_a/ to reflect fixed number of args
+
+	* testglib.c:
+	Added g_strdup, g_strconcat checks.
+	Added str==NULL checks for alloca string macros.
+	s/g_strconcat_a/g_strconcat3_a/
+
+Fri Jan  1 18:30:41 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* testglib.c: made the alloca tests follow the testglib style
+
+	* Makefile.am: minor cleanups, mostly cosmetic
+
+Fri Jan  1 20:43:19 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* glib.h: added g_strndup_a macro
+
+	* testglib.c:
+	Added tests for new alloca-based string routines.
+	Reformatted a couple strings.
+
+Sat Jan  2 02:20:59 1999  Tim Janik  <timj@gtk.org>
+
+	* ghook.c:
+	(g_hook_list_invoke):
+	(g_hook_list_invoke_check):
+	(g_hook_list_marshal_check):
+	(g_hook_list_marshal): avoid unneccessary extra hook referencing (the
+	explicit hook referencing became unneccessarry with my changes from
+	Mon Dec 21 21:48:29 1998).
+
+	* gmain.c (g_main_iterate): fixed reference counting leaks with
+ 	premature loop aborts.
+
+Fri Jan  1 22:47:44 1999  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_unexp_token): handle G_TOKEN_IDENTIFIER_NULL
+	as G_TOKEN_IDENTIFIER.
+
+Fri Jan  1 17:09:19 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* configure.in, glib.h:
+	Added two new alloca-based function macros, g_strdup_a and
+	g_strconcat_a.	These are stack-based and much faster than
+	their g_malloc-based counterparts.  Kudos to Ulrich Drepper
+	for help on this one.
+
+Wed Dec 30 18:24:57 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+        * Released GLib 1.1.11
+
+        * INSTALL:
+          NEWS:
+          README:
+          configure.in:
+          docs/glib-config.1: version=1.1.11
+
+1998-12-30  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* glib.h (G[U]INT64_FROM_{LE,BE}):
+	Define to G[U]INT64_TO_{LE,BE}, not G[U]INT32_TO_{LE,BE}.
+
+Fri Dec 25 19:56:33 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* acglib.m4
+	* configure.in: provide defaults for POLL sysdefs, simple enums
+	don't work with bitwise logic. Reported by Daniel Skarda
+	<0rfelyus@atrey.karlin.mff.cuni.cz>
+
+Wed Dec 23 00:43:25 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* INSTALL:
+	  NEWS:
+	  README:
+	  configure.in:
+	  docs/glib-config.1: version=1.1.10
+
+Wed Dec 23 04:18:11 1998  George Lebl  <jirka@5z.com>
+
+	* gmain.c: (g_get_current_time) don't cast to timeval since
+	  timeval is for some reason not always a struct of longs, weird
+
+Tue Dec 22 10:32:11 1998  Tim Janik  <timj@gtk.org>
+
+	* ghook.c (g_hook_first_valid): fixed buglet that could cause bogus
+	warnings.
+
+Mon Dec 21 21:48:29 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gmain.c: there was a reference count race for hooks during invocation
+	loops. since all (known) hook loop implementations, do currently start
+	out with g_hook_first_valid() and iterate with g_hook_next_valid(),
+	g_hook_first_valid() will now return a referenced hook, and
+	g_hook_next_valid() will "eat" that, and eventually transfer it to
+	the next hook. <sigh> unfortunately this requires g_hook_next_valid()
+ 	to take the hook_list as additional argument.
+
+	* gmain.c (g_main_iterate): adjusted callers of g_hook_next_valid().
+
+Mon Dec 21 03:48:04 1998  Tim Janik  <timj@gtk.org>
+
+	* gmain.c (g_main_iterate): default initialize source_timeout with -1
+	so we have a sane timeout value if (*prpare) doesn't set it.
+
+Sat Dec 19 16:56:02 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h gmain.c (G_PRIORITY_LOW): Add #defines defining
+	scale of priorities.
+
+Sat Dec 19 16:56:02 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_main_poll): Allocate space for pollfd's
+	_after_ adding poll wake-up-pipe record.
+
+	* gmain.c (g_main_add_poll): Changed name
+	of internal function g_main_add_poll_unlocked()
+	back from the non-sensical g_main_add_unlocking_poll().
+
+Sat Dec 19 06:25:55 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.m4: fixed a minor bug that would let configures bail out
+	if the MODULES argument contained newlines.
+
+	* acglib.m4: new file to be included by configure.in. it holds
+	special GLIB_ autoconfiguration macros, eventually some of the
+	easier ones should be moved into glib.m4, e.g. GLIB_IF_VAR_EQ,
+	GLIB_STR_CONTAINS or GLIB_ADD_TO_VAR.
+
+Sat Dec 19 04:27:17 1998  Tim Janik  <timj@gtk.org>
+
+	* fixed up sys/poll.h and sys/types.h inclusions.
+
+Sat Dec 19 03:10:50 1998  Tim Janik  <timj@gtk.org>
+
+	* fixed up gthread includes, cleaned up glibconfig.h a little bit.
+
+Fri Dec 18 12:51:39 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c: Fix errors in computation of timeout
+	expiration times > 1sec.
+
+1998-12-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in (have_threads): Changed the last pthread_cond_init
+	to pthread_attr_init.
+
+Fri Dec 18 00:03:17 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gmain.c:
+	(g_main_is_running): new function to check whether a main loop has been
+	quitted.
+	(g_main_new): added a gboolean argument to determine whether the loop
+	should be considered initially running or not. however, g_main_run ()
+ 	will still reset the main loops running state to TRUE upon initial
+ 	entrance.
+
+	* gmain.c:
+ 	(g_main_iterate): documented this function's purpose in 5 steps.
+ 	for step 2), flag sources as G_SOURCE_READY even if !dispatch and
+	check G_SOURCE_READY prior to (*prepare), so we don't call (*prepare)
+ 	on them multiple times.
+
+Thu Dec 17 23:43:47 1998  Tim Janik  <timj@gtk.org>
+
+	* gmain.c (g_main_add_poll): reordered arguments, so GPollFD* comes
+	first, <sigh> (sorry Snorfle, i should have let you know in the first
+ 	place).
+	(g_main_dispatch): stack G_HOOK_FLAG_IN_CALL flags. call source's
+	destructor when destroying a source.
+
+1998-12-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* garray.c (g_ptr_array_remove_index): Fixed size in g_memmove,
+	reported by Alexander Larsson <alla@lysator.liu.se>.
+
+	* gmem.c: Fixed bug, that made compile fail for -DENABLE_MEM_PROFILE.
+
+Wed Dec 16 23:04:26 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.9
+
+	* INSTALL:
+	  NEWS:
+	  README:
+	  configure.in:
+	  glib.spec:
+	  docs/glib-config.1: version=1.1.9
+
+Wed Dec 16 22:32:13 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* glib.h:
+	  giounix.c: s/g_main_poll_add/g_main_remove_add/g
+                     s/g_main_poll_remove/g_main_remove_poll/g
+                     s/g_main_poll_add_unlocking/g_main_add_unlocking_poll/g
+          (from Tim Janik)
+
+Wed Dec 16 20:04:10 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in: check for pthread_attr_init in all cases, du4
+	needs this since most of the other functions are just #defines
+
+Thu Dec 17 04:10:49 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h (G_LOCK_DECLARE_*): if !G_THREADS_ENABLED, eat the
+	trailing semicolon with a bogus function declaration, instead
+	of with a bogus variable declarations, so we avoid unused
+	variable warnings.
+
+Wed Dec 16 07:49:16 PST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.8  (CVS tag is GLIB_1_1_8a)
+
+1998-12-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* giounix.c (g_io_channel_unix_get_fd): Fixed small bug.
+
+1998-12-16  Joel Becker  <jlbec@ocala.cs.miami.edu>
+
+	* glib.h, gscanner.c: changed func_data to user_data in
+        g_scanner_scope_symbol_foreach and associated friends, because
+	AIX headers #define func_data.
+
+1998-12-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Fixed stupid bug, that made
+	g_static_mutex_lock(*mutex) not work as expected.
+
+	* docs/glib-config.1: Updated to reflect the existence of gthread.
+
+	* gmain.c (g_main_poll_add_unlocking): Changed
+	g_main_poll_add_unlocked to g_main_poll_add_unlocking to match
+	semantic, (indeed, main_loop must be locked, when calling this
+	function). Removed the unlocking from the end of that function, as
+	that is not right. Made a 'HOLDS' comment above the function.
+
+Wed Dec 16 03:16:58 1998  Tim Janik  <timj@gtk.org>
+
+        * configure.in: version bump to 1.1.8, binary age 0, interface age 0.
+
+	* glib.h: changed g_lock() to G_LOCK(), g_unlock() to G_UNLOCK() and
+	g_trylock() to G_TRYLOCK(), since these are macros that expand to
+	nothing with --disable-threads.
+	changed G_LOCK_DEFINE() to G_LOCK_DECLARE() and introduced
+ 	G_LOCK_DECLARE_STATIC() to achive the results of static G_LOCK_DECLARE().
+	changed semantics of g_thread_supported to g_thread_supported() so it
+	can be used as a function like g_module_supported(). the actuall
+	definition is still a macro that expands into a variable for
+ 	performance reasons though.
+	various indentation and coding style cleanups.
+
+	* configure.in: added --enable-threads that defaults to yes.
+
+	* gmutex.c: changed tests g_thread_supported to g_thread_supported (),
+	changed variable settings of g_thread_supported
+ 	to g_threads_got_initialized.
+
+	garray.c:
+	gcache.c:
+	gdataset.c:
+	gdate.c:
+	ghash.c:
+	glist.c:
+	gmain.c:
+	gnode.c:
+	gslist.c:
+	gstring.c:
+	gtree.c:
+	gutils.c:
+	changed s/g_lock/G_LOCK/, s/g_unlock/G_UNLOCK/,
+ 	s/static G_LOCK_DEFINE/G_LOCK_DECLARE_STATIC/.
+
+Tue Dec 15 23:16:05 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* INSTALL:
+	  NEWS:
+	  README
+	  configure.in:
+	  glib.spec:
+	  docs/glib-config.1: Incremented version
+
+Wed Dec 16 22:29:48 1998  Joel Becker  <jlbec@ocala.cs.miami.edu>
+
+	* configure.in: fixed the AIX thread checking.
+	Just an error on the wildcard.  BTW, -D_THREAD_SAFE
+	is correct for AIX.
+
+Wed Dec 16 02:02:48 1998  Tim Janik  <timj@gtk.org>
+
+	* glib-config.in (lib_glib): fixed library and flag ordering for
+	--libs
+
+Tue Dec 15 17:17:46 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h giounix.c giochannel.c: Use an "inheritance"
+	scheme for IO channel memory allocation.h
+
+1998-12-15  Havoc Pennington  <hp@pobox.com>
+
+	* gdate.c (g_date_prepare_to_parse): Solaris has a broken strftime
+	that produced garbage output for the test date I was using to
+	set up the parser. So use a different date that Solaris seems
+	to like.
+
+1998-12-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Dont complain, if --without-threads or
+	--with-threads=none is supplied; Test for pthread_attr_init
+	instead of pthread_cond_init, if threads seems to be supported by
+	standard glib. (CFLAGS): Use G_THREAD_CFLAGS for compiling of glib
+	as well.
+
+	* glib.h, gmutex.c: Changed private to private_key to avoid
+	problems when compiling with under C++.
+
+1998-12-15  Jeff Garzik  <jgarzik@Pobox.com>
+
+	* configure.in:
+	bugfixes, correctly support --without-threads and friends
+
+	* gthread/testgthread.c: corrected 64-bitness problem
+
+Tue Dec 15 10:40:09 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* gnode.c glist.c gslist.c: Make sure all
+	calls to g_node_validate_allocator are within
+	current_allocator lock, so we have consistency
+	on that point. (Should not really matter,
+	but this way we match the comments)
+
+	* glist.c (g_list_free_1): Removed some lines
+	that should never have been committed. (For
+	debugging)
+
+1998-12-11  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread/gthread-nspr.c, configure.in: Added new default thread
+	implementation on top of the mozilla nspr library.
+
+	* gmem.c, gmessaged.c, gthread/gthread.c, gthread/gthread-*.c:
+	Changed GStaticMutex and GStaticPrivate in gmem.c and gmessages.c
+	into GMutex and GPrivate resp. to make error reporting and use of
+	gmem possible in most (not all, though) gthread functions. Also
+	initialized the modules via new init functions.
+
+	* configure.in: Fixed syntax bug in definition of type
+	GStaticMutex.
+
+	* gthread/testgthread.c: Updated to work with nspr, but see note
+	there for remaining problems.
+
+1998-12-10  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmutex.c, glib.h: Now abort, if a mutex/cond/private is
+	allocated before the thread system is set up.
+
+	* gthread/gthread.c (g_thread_init): Removed g_thread_try_init(),
+	as it is not necessary. Changed the error message. Corrected logic
+	for g_thread_use_default_impl.
+
+	* gmutex.c (g_mutex_init): Keep the thread private data array
+	after calling g_thread_init().
+
+1998-12-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread/testgthread.c (new_thread): Now also working for posix
+	threads; (wait_thread): Now a better implementation, that does not
+	use 100% CPU.
+
+	* Made the thread related code follow GNU coding standard.
+
+	* Made a comment (HOLDS:) above each function, that expects the
+	given locks to be held.
+
+	* Changed try_lock to trylock throughout.
+
+	* glib.c: Eventually removed the #if 0'ed code for old GStaticMutex.
+
+	* glib.c: Corrected g_trylock macro for G_DEBUG_LOCKS.
+
+	* gmain.c (g_main_poll_add_unlocked): first take a new poll record
+	form the poll_free_list.
+
+	* gmem.c, gstrfuncs.c, gutils.c: Made it MT safe.
+
+	* gthraed/*.c: Added copyright headers.
+
+	* gthread/gthread-solaris.c: do not use g_log for errors, as g_log
+	uses these module and endless recursions might happen, just use a
+	plain fprintf(stderr,...).
+
+	* gthread/gthread.c (g_thread_try_init): Call g_mutex_init().
+
+	* gthread/testgthread.c: updated test program.
+
+Tue Dec  8 18:49:56 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* Start at adding thread-safety. (mostly work
+	of Sebastian Wilhelmi <wilhelmi@ira.uka.de>)
+
+	- configure.in now looks for a system thread implementation.
+	Currently support is included for POSIX threads
+	and Solaris threads. The default support is built
+	into a separate library -lgthread.
+
+	- The thread implementation can be modified by passing
+	a vector of functions g_thread_init().
+
+	- The default or supplied functions are used to
+	implement a small set of thread functions for
+	mutexes, condition variables, and thread-private
+	data.
+
+	- GLib now uses these functions to provide thread
+	safety. (In the sense that all global static
+	data is locked... individual structures must still
+	be locked by the caller.)
+
+Sat Dec 12 19:08:59 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in: always define G_HAVE_INLINE if __cplusplus is
+ 	defined, reported by Wan-Teh Chang <wtc@netscape.com>.
+
+Thu Dec 10 21:49:39 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.7
+
+	* INSTALL:
+	  NEWS:
+	  README:
+	  configure.in:
+	  glib.spec:
+	  docs/glib-config.1: Increased version to 1.1.7
+
+Wed Dec  9 22:44:44 EST 1998 Joel Becker <jlbec@ocala.cs.miami.edu>
+
+	* Removed #define of G_COMPILED_WITH_DEBUGGING from glibconfig.h
+	It shouldn't be there, and it was causing a double #define.
+        (config.h defines it also)
+
+Tue Dec  8 12:18:38 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.6
+
+	* NEWS: updated
+
+Mon Dec  7 23:10:41 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* gmain.c: fixes to #undef HAVE_POLL case
+
+1998-12-02  Havoc Pennington  <hp@pobox.com>
+
+	* gdate.c (g_date_set_month): If Julian is valid, we have to
+	update the dmy representation before setting the components
+	of it.
+	(g_date_set_day): Same.
+	(g_date_set_year): Same.
+
+1998-12-02  Havoc Pennington  <hp@pobox.com>
+
+	* testgdate.c, testgdateparser.c: Two new files. This is kind of
+	ugly code, but I want to go ahead and make the tests available.
+	It isn't contaminating any other code. :-) Since one of these
+	is interactive and the other takes a while to run, I've kept
+	them separate from testglib for now.
+	* Makefile.am: Build gdate test programs.
+
+1998-12-02  Havoc Pennington  <hp@pobox.com>
+
+	* gdate.c (g_date_valid): Rely on GDate::dmy and GDate::Julian
+	flags, rather than re-checking the validity of the actual
+	values. This should be the correct behavior, the old way was
+	leftover cruft.
+
+	* glib.h, gdate.c: Changed MDY to DMY throughout.
+
+Sat Nov 28 12:53:47 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am configure.in acconfig.h giochannel.c
+	  glib.h glist.c gmain.c gutils.c:
+
+        - Revised GIOChannel to provide a generic virtual-function
+  	  based interface.
+	- Added unix fd-based GIOChannel's
+	- Added generic main-loop abstraction
+	- Added timeouts and idle functions using main-loop abstraction.
+
+1998-12-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h:
+	* gdate.c: changed `gpointer struct_tm_p' parameter of
+	g_date_to_struct_tm back to `struct tm *tm' and forward declared
+	`struct tm' in glib.h; yes, this is nice, we still need not
+	include time.h.
+
+Tue Dec  1 23:01:44 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* INSTALL:
+          NEWS:
+	  README:
+	  glib.spec:
+	  docs/glib-config.1: Incremented versions to 1.1.6.
+
+Wed Dec  2 02:10:59 1998  Tim Janik  <timj@gtk.org>
+
+	* gdate.c: s/time_t/GTime/ and s/g_print/g_message/
+	include time.h.
+
+	* glib.h: removed #include <time.h>, changed time_t paramter of
+ 	g_date_set_time() to time_t, changed struct tm parameter of
+	g_date_to_struct_tm to `gpointer struct_tm_p'. yes, this is not
+	nice, but including time.h actually breaks a bunch of code.
+
+	* incremented GLib version to 1.1.6.
+
+1998-11-30  Havoc Pennington  <hp@pobox.com>
+
+	* gdate.c: New file, implements calendrical calculations.
+
+	* glib.h: Added declarations for GDate module.
+
+Mon Nov 30 07:12:10 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* ghook.c: added g_hook_list_marshal_check() to eventually destroy
+	hooks after they got marshalled.
+
+Sun Nov 29 17:31:43 EST 1998  Jeff Garzik  <jgarzik@pobox.com>
+
+	* configure.in, Makefile.am, gmodule/Makefile.am:
+	Put -DFOO stuff into Makefile.am INCLUDES.
+
+Sun Nov 29 14:17:09 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in: put debug -DFOO stuff into CPPFLAGS, not CFLAGS,
+	so CFLAGS can be overridden at make time properly
+
+Sat Nov 28 01:23:25 1998  Tim Janik  <timj@gtk.org>
+
+	* ghash.c: implemented incremental freezing facility.
+
+Thu Nov 26 01:36:20 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* ghash.c: reverted the g_hash_table_set_key_freefunc() addition,
+	since it's to specialized and needs to be resolved in a generic
+	fashion.
+
+Tue Nov 24 18:57:59 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* applied glib-tml-981120-0, change log appended below.
+
+	* glibconfig.h.win32: passthrough 64-bit constants unchanged, VC++
+	infers them
+
+Fri Nov 20 22:26:43 1998  Tor Lillqvist  <tml@iki.fi>
+
+        * glib.h: Moved MSC pragmas from glib.h to glibconfig.h.win32.
+        peer_offset field in WIN32 part of GIOChannel removed, need_wakeups
+        added. Added "extern" to __declspec(dllimport).
+
+        * gutils.c: Initialise need_wakeups.
+
+        * glibconfig.h.win32: Pragmas moved here. Define G_GINT64_CONSTANT.
+
+        * gmodule/gmodule.def: Added g_module_build_path.
+
+        * gscanner.c: (g_scanner_cur_value) Move initailisation of v
+        to before its use.
+
+        * glib.def: Added g_(s)list_sort.
+
+        * makefile.msc: A few more comments.
+
+Tue Nov 24 14:05:47 EST 1998	Michael K. Johnson <johnsonm@redhat.com>
+
+	* glib.h: added GFreeFunc and g_hash_table_set_key_freefunc()
+	prototype.
+	* ghash.c: added g_hash_table_set_key_freefunc() implementation.
+	Modified the prototypes of the functions g_hash_node_destroy() and
+	g_hash_nodes_destroy(), and changed the functions that call them
+	to match the new definitions.
+	This changes no external interfaces, and should create no binary
+	or source incompatibilities.  It does add a member to the
+	GHashTable structure.
+
+Tue Nov 24 09:40:00 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: removed the GListAllocator type and its g_*_allocator_*()
+ 	function variants (which weren't working anyways) in favour of a
+ 	generic GAllocator type. new functions:
+	g_allocator_new, g_allocator_free, g_slist_push_allocator,
+	g_slist_pop_allocator, g_list_push_allocator, g_list_pop_allocator,
+	g_node_push_allocator and g_node_pop_allocator.
+
+	* gstring.c: removed bogus slist allocator code.
+	* gtree.c: maintain own list of free tree nodes and don't waste
+	GSLists for that, removed bogus slist allocator code.
+	* glist.c: use GAllocators for node allocation.
+	* gslist.c: use GAllocators for node allocation.
+	* gnode.c: use GAllocators for node allocation.
+
+	* gdataset.c: cleanups wrt automatic initialization.
+
+Mon Nov 23 10:03:58 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* glib.h garray.[ch]: added g_array_insert_vals() to
+	insert elements at an arbitrary index, and
+	g_array_insert_val() macro.
+
+Sun Nov 22 17:07:03 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gslist.c: new function g_slist_copy() to duplicate a list with all its
+	data pointers.
+	* glist.c: new function g_list_copy.
+
+Sat Nov 21 14:57:39 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* INSTALL:
+	  NEWS:
+	  README:
+	  configure.in:
+	  glib.spec: Updated to version 1.1.5
+
+	* Released GLib 1.1.5
+
+Wed Nov 18 1998 Elliot Lee <sopwith@redhat.com>
+
+	* gdataset.c: There was a code path into g_data_set_internal
+	  through a function (g_datalist_id_set_full). Neither function
+	  checked for g_dataset_init having been run, but
+	  g_data_set_internal used the memchunk. I added
+	  a check into g_data_set_internal so it will do the
+	  initialization if needed. (There's probably a better way.)
+
+Mon Nov 16 07:48:06 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h (g_bit_nth_msf): fixed off-by-one error, so we don't waste
+	a loop iteration if (-1) was passed, reported by Andreas Bombe
+ 	<andreas.bombe@munich.netsurf.de>.
+
+Fri Nov 13 15:17:34 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* glist.c gslist.c glib.h: Added g_list_sort() and
+	g_slist_sort() to merge sort GLists and GSLists.
+	Submitted by Sven Over <sven.over@ob.kamp.net>
+	over a year ago!
+
+	* testglib.c: Test the new sort functions.
+
+Wed Nov 11 23:23:22 EST 1998 Jeff Garzik <jgarzik@pobox.com>
+
+	* Makefile.am : INCLUDES is the right way to add to CFLAGS, not
+	DEFS.  Also there are bugs with '+=' in makefiles.
+	Got rid of DEFS line by moving G_LOG_DOMAIN setting into INCLUDES.
+	Removed redundant -I from INCLUDES.
+
+Wed Nov 11 18:11:24 EST 1998 Gregory McLean <gregm@comstar.net>
+
+	* docs/*.sgml : Batch of new documentation that should be easier
+	to maintain and extend. Plus generate whatever sort of doc file
+	you would like. I didn't change the Makefile stuff as I'm not sure
+	what default doc type people want. Oh and this is all DocBook format.
+	Enjoy!
+
+Tue Nov 10 17:12:45 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in: use __extension__ for long long on gcc >= 2.8 and
+	egcs, and provide a G_GINT64_CONSTANT wrapper so -ansi -pedantic
+	compiles clean.
+
+	* glib.h: make the endian x86 asm __const__ so the compiler can do
+	better optimizations. Also remove the cc clobber, these shouldn't
+	be changing condition codes. Ditch some redundant casts. Add an
+	optimization for 64-bit endian conversions in x86. Use constant
+	wrapper for the generic method.
+
+	* testglib.c: use constant wrappers for 64-bit constants
+
+1998-11-04  Phil Schwan  <pschwan@cmu.edu>
+
+	* configure.in: Added 'strncasecmp' to the list of functions to be
+	searched for.
+	* glib.h: Added a prototype for 'g_strncasecmp'
+	* gstrfuncs.c: (g_strncasecmp) new function modeled closely after
+	'g_strcasecmp'
+
+Wed Nov  4 15:06:44 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* config.h.win32 (new file)
+	* glibconfig.h.win32
+	* glib.def
+	* makefile.msc: applied glib-tml-981104, win32 sync
+
+1998-11-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h:
+	* garray.c:
+	(g_array_remove_index): new function for removing an entry from an
+	array while preserving the order
+	(g_array_remove_index_fast): new function for removing an entry
+	from an array. the order might be distorted
+	(g_ptr_array_remove_index_fast, g_ptr_array_remove_fast): new
+	functions; working similiar to the above. (they have the semantic
+	of the old g_ptr_array_remove[_index] functions)
+	(g_ptr_array_remove_index, g_ptr_array_remove): new semantic. now
+	the order of the elements in the array is not changed
+	(g_byte_array_remove_index, g_byte_array_remove_index_fast): new
+	functions; byte_array wrapper for g_array_remove_index[_fast]
+
+Sun Nov  1 23:00:18 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h
+	* configure.in: endian macros defined using the glibconfig.h
+	mechanism now
+
+	* ghook.c: casts for GHookFunc and GHookCheckFunc to avoid warnings
+
+Sat Oct 31 20:14:22 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* applied glib-tml-981101-1 patch from Tor Lillqvist (ChangeLog
+	entry appended below)
+
+	* testglib.c
+	* gstrfuncs.c
+	* glib.h: use G_HAVE_GINT64, since HAVE_GINT64 is gone
+
+	* gmessages.c
+	* gscanner.c: #include <config.h> in here too, for HAVE_UNISTD_H
+
+1998-11-01 Tor Lillqvist <tml@iki.fi>
+
+	* glib.def: Added the new functions.
+
+	* gutils.c:
+	(g_getenv): Better implementation on Win32. No loop necessary.
+	(g_get_any_init): Use P_tmpdir if defined as tmp directory. Don't
+	set home dir always to NULL on Win32.  Don't use tmp directory as
+	last resort home directory, but return NULL if no home
+	directory is known (application must check).
+
+	* makefile.msc: Better touch command, just COPYing a single file
+	sets the timestamp from that file, which isn't what touching should
+	do.
+
+1998-10-31  Raja R Harinath  <harinath@cs.umn.edu>
+
+	Land glib-rrh-19981025-0.patch.
+	* Makefile.am (glibconfig.h): New rule.
+	(stamp-gc-h): New rule.  Generate `glibconfig.h'.
+	* configure.in (AM_CONFIG_HEADER): It is now `config.h'.
+	(HAVE_BROKEN_WCTYPE): On Solaris, look for iswalnum in -lw before
+	concluding "broken wctype".
+	(glibconfig.h): Use AC_OUTPUT_COMMANDS to put generation code into
+	config.status.
+	* glib.h: Remove a lot of tests and defines.  All these have been
+	moved to `configure.in (glibconfig.h)'.
+	* gerror.c: Include <config.h>.
+	* gmem.c: Likewise.
+	* gstrfuncs.c: Likewise.
+	* gutils.c: Likewise.
+
+Sat Oct 31 05:08:26 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: removed old G_ENUM(), G_FLAGS(), G_NV() and G_SV() macros.
+	added macros G_STRUCT_OFFSET(), G_STRUCT_MEMBER_P() and
+ 	G_STRUCT_MEMBER() for handling structure fields through their offsets.
+	(struct _GHookList): added a hook_free function member, that can be used
+	to free additional fields in derived hook structures.
+	g_hook_free(): if hook_list->hook_free != NULL, call this function prior
+	to freeing the hook. (this functionality should have been there in the
+	first place, it just got forgotten as an implementation detail).
+
+Wed Oct 28 00:49:32 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h: G_BREAKPOINT for alpha from Robert Wilhelm
+	<robert@physiol.med.tu-muenchen.de>
+
+Tue Oct 27 07:25:53 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gscanner.c:
+	(g_scanner_sync_file_offset): new function for file input.
+	rewind the filedescriptor to the current buffer position and blow
+ 	the file read ahead buffer. usefull for third party uses of our
+ 	filedescriptor, which hooks onto the current scanning position.
+	(this became neccessary with the implementation of buffered
+	reads).
+	(g_scanner_input_file):
+	(g_scanner_input_text): automatically blow the read ahead buffer.
+	(g_scanner_get_char): blow the read ahead buffer when the end of
+	input is reached, i.e. a '\000' char is read.
+
+Tue Oct 27 00:27:31 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h: get rid of duplicate #g_htonl and friends in the
+	NATIVE_WIN32 part
+
+Mon Oct 26 22:42:01 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glibconfig.h.win32
+	* gutils.c
+	* makefile.msc: win32 patch from Tor Lillqvist (glib-tml-981027-0),
+	fixes some minor win32 buglets
+
+Mon Oct 26 22:12:03 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h: reimplemented the endian stuff, using inline asm
+	for x86. #define g_htonl and friends.
+
+	* testglib.c: new tests for the endian stuff
+
+	* configure.in: care for AIX in gmodule linker flags test (from
+	Joel Becker <jlbec@raleigh.ibm.com>). Check $host_os for linux
+	instead of existance of /usr/include/linux
+
+	* gutils.c: buh-bye evil warning. Thou hast been #ifdef'd out
+	of thine existance!
+
+Tue Oct 27 03:00:50 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: removed dummy structure definitions for struct _GCache,
+ 	_GTree, _GTimer, _GMemChunk, _GListAllocator and _GStringChunk.
+
+	* gutils.c: implement glib's inline functions _after_ all include
+ 	statements have been processed.
+	removed Tor's MAXPATHLEN check since there already was one supplied
+	further down in this file.
+	(LibMain): special cased the #ifdef __LCC__ case for NATIVE_WIN32,
+ 	since lcc maybe used on other platforms as well. why in hell is this
+	stuff required?
+	(g_get_any_init): for windows, if the user name is supplied, use it as
+	realname also.
+	in general, if there is no homedir specified, use the tmpdir that
+	we already figured.
+
+	* gtimer.c (g_timer_elapsed): changed a g_assert() statement to
+ 	g_return_if_fail().
+
+	* applied glib-tml-981020-0.patch for WIN32 portability, added some
+	comments and g_return_if_fail() statements, minor indentation fixes.
+	ChangeLog entry from Tor Lillqvist is appended.
+
+	* glib.h (struct dirent): use lower case structure members.
+
+	* glib.h:
+	* makefile.lcc:
+	* makefile.msc:
+	s/COMPILING_GLIB/GLIB_COMPILATION/
+
+1998-10-20: Tor Lillqvist <tml@iki.fi>
+
+	* README.win32 glib.def gmodule.def
+	* glibconfig.h.win32 gmodule/gmoduleconf.h.win32:
+	New files for the Windows port. The .def files list exported
+	symbols for the Microsoft linker and compatibles.
+
+	* configure.in:
+	Added checks for some platform-dependent headers: pwd.h sys/param.h
+	sys/select.h sys/time.h sys/times.h unistd.h, and the function lstat.
+
+	* gerror.c:
+	Conditionalized inclusion of system-dependent headers. Changes
+	for Windows: no gdb to do a stack trace. Just call abort().
+
+	* glib.h:
+	Changes for Windows:
+
+	Added macros G_DIR_SEPARATOR, G_DIR_SEPARATOR_S for
+	platform-dependent file name syntax elements. Added macros
+	G_SEARCHPATH_SEPARATOR, G_SEARCHPATH_SEPARATOR_S for
+	platform-dependent search path syntax conventions.
+
+	Added pragmas for Microsoft C to make it more pedantic.
+
+	Marked GLib's global variables for export from DLL.
+
+	Added the function g_strescape that escapes backslashes.
+
+	Added functions g_path_is_absolute and g_path_skip_root to
+	handle platform-dependent file name syntax.
+
+	Added the function g_getenv that expands environment variables
+	that contain references to other environment variables, as is
+	typical on Windows NT.
+
+	Added the GIOChannel structure which is used to encapsulate the
+	IPC mechanism used by the GIMP's plug-ins, and possibly other
+	things later. On Unix a GIOChannel encapsulates just a file
+	descriptor. On Windows it contains a file handle from _pipe() and a
+	few other things related to the implementation of gdk_input_add
+	and GIMP plug-in communication. Subject to change.
+
+	Removed duplicate declarations of the version variables.
+
+	For the Microsoft compiler, declare own implementation of
+	ftruncate and the <dirent.h> functions.
+
+	* gmem.c:
+	Define a symbolic name  for the profiling table size.
+
+	* gmessages.c:
+	Conditionalized inclusion of unistd.h. On Windows, output using
+	stdio to stdout.
+
+	* gscanner.c:
+	Conditionalized inclusion of unistd.h. Added changes for
+	Microsoft C. Added CR to the skipped character set. Added small
+	workaround for MSC compiler bug in g_scanner_cur_value.
+
+	* gstrfuncs.c:
+	Added the function g_strescape, which escapes the backslash
+	character. Needed especially when printing Windows filenames.
+
+	* gtimer.c:
+	Conditionalized inclusion of unistd.h and sys/time.h. Added
+	implementations for Windows.
+
+	* gutils.c:
+	Conditionalized inclusion of platform-dependent headers. Use
+	the platform-independent file name syntax macros.
+	Conditionalize code on platform-dependent features. Added the
+	functions g_path_is_absolute g_path_skip_root and g_getenv.
+	Added the GIOChannel-related functions. Added
+	compiler-dependent Unix compatibility functions for Windows.
+
+	* makefile.lcc makefile.msc:
+	New files. Compiler-specific makefiles for LCC-Win32 and
+	Microsoft C. Only Microsoft C is actually supported currently.
+
+	* testglib.c:
+	Added pathname check cases for Windows. Added workaround for
+	bug in the Microsoft runtime library. Improved some tests a bit.
+
+Sun Oct 25 01:24:01 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.4
+
+	* docs/Makefile.am:
+	* docs/.cvsignore
+	* docs/glib-config.1:
+	* docs/glib.texi: Moved docs from gtk and created glib-config.1
+	from gtk-config.1 in gtk
+
+	* configure.in:
+	* Makefile.am:
+	* sanity_check: added in docs directory, change rule 'release'
+	to 'snapshot' and created a new 'release' rule for doing the
+	distribution.  Added in a 'sanity' rule.
+
+	* NEWS:
+	* README:
+	* INSTALL: Updated for the release
+
+Sun Oct 25 07:30:10 1998  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c:
+	(g_scanner_peek_next_char):
+ 	(g_scanner_get_char): no more characters are available if read() returns
+ 	anything less than 1, not only on 0 return.
+
+	* glib.h:
+	* gstrfuncs.c: final API cleanup of string arrays to suit sopwith's
+	argument order requirements.
+ 	(g_strsplit): renamed from g_str_array_split().
+	(g_strjoinv): renamed from g_str_array_joinv(), string array is
+	now passed as last parameter. removed `const' qualifier from string
+	array pointer (again).
+	(g_strjoin): new function from sopwith to concatenate strings with
+	an additional seperator.
+	(g_strfreev): renamed from g_str_array_free.
+
+Sat Oct 24 22:23:04 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* gnode.c: small fix to g_node_children_foreach to make it work right.
+	From Paco Moya <paco@cadnotebk17.eecs.berkeley.edu>
+
+Wed Oct 21 19:22:58 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in (G_MODULE_HAVE_DLERROR): reverted part of the changes
+ 	from Sebastian Wilhelmi (1998-10-20). don't specify a specific loading
+	behaviour (i.e. RTLD_NOW) when we are not sure whether it is supplied.
+	changed the return value from (!f2 && f1) to (!f2 || f1) so we default
+	to not needing an underscore. reverted the extra plugin.c building,
+	because .lo files are not ELF libraries, this can't work. This needs
+	further investigation on Solaris...
+
+Wed Oct 21 17:03:05 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gstrfuncs.c: API cleanups of the new g_str* functions for consistency
+ 	with the existing naming scheme for g_str* functions. grouped the g_str*
+	functions that will return a newly allocated string seperatedly. all of
+	the in_place arguments were skipped, the caller is supposed to pass a
+	g_strdup()ed string if he wants to retrive a new copy. indentation and
+	coding style fixups. added some g_return_if_fail() statements.
+	string array functions are prefixed with g_str_array_.
+	(g_strdelimit): return the modified string like all other g_str*
+ 	functions, that operate in place.
+	(g_strchug): renamed from g_str_chug(), removed in_place argument.
+	(g_strchomp): renamed from g_str_chomp(), removed in_place argument.
+	(g_strstrip): renamed from g_str_strip(), removed in_place argument.
+	(g_str_array_join): renamed from g_strconcatv(), since it actually
+ 	operates on a string array and has totaly different semantics from
+	g_strconcat(). check for separator != NULL, don't segfault if the first
+ 	string is NULL. removed the `const' from the string array that's passed,
+	so users can operate on gchar** string arrays.
+	(g_str_array_split): renamed from g_str_split() because we actually
+ 	produce a string array. reimplemented this function for efficiency.
+	removed macro aliases g_str_joinv and g_str_join.
+
+1998-10-20  Elliot Lee  <sopwith@redhat.com>
+
+	* glib.h, gstrfuncs.c: Move string join/split/free routines from
+ 	libgnome/gnome-string, rename, and add g_str_chug.
+
+1998-10-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: made the check for needed _ in module's func-names
+	work on solaris. (G_MODULE_NEED_USCORE must be set outside
+	AC_CACHE_VAL, dlopen(0,0) refused to work on solaris).
+
+Tue Oct 20 03:32:58 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in
+	* acconfig.h: added test for endianness
+
+	* glib.h: #define endian macros for system and some conversions
+	between byte order
+
+Thu Oct  8 06:47:27 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gdataset.c: removed functions g_dataset_id_set_destroy and
+	g_datalist_id_set_destroy and macros g_dataset_set_destroy and
+	g_datalist_set_destroy.
+	added new functions g_dataset_id_remove_no_notify and
+	g_datalist_id_remove_no_notify plus associated macros
+	g_dataset_remove_no_notify and g_datalist_remove_no_notify, which
+ 	will remove a certain data portion without invocation of its destroy
+ 	notifier, this should only be used in very controled circumstances.
+
+Wed Oct  7 05:31:24 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	removed the #pragma } statement after extern "C" {. use
+ 	(c-set-offset 'inextern-lang 0) to fixup emacs cc-mode indentation.
+
+	* glib.h:
+	* ghook.c: API and code cleanups. changed the G_HOOK_ACTIVE and
+ 	G_HOOK_IN_CALL enum vals to G_HOOK_FLAG_ACTIVE and G_HOOK_FLAG_IN_CALL.
+	changed the G_HOOK_IS_ACTIVE() and G_HOOK_IS_IN_CALL() macros to
+	G_HOOK_ACTIVE() and G_HOOK_IN_CALL().
+	fixed the g_hook_find* functions, so they iterate over non-active
+	hooks as well.
+	(g_hook_first_valid):
+	(g_hook_next_valid): added an extra argument gboolean may_be_in_call,
+	which indicates whether G_HOOK_IN_CALL() hooks are considered valid
+	or not. these two functions are meant as iterators for the hook list
+	invocation, so they need to a) provide functionality to implement
+	may_recurse bahaviour and b) only walk active hooks.
+
+Tue Oct  6 14:29:47 1998  Tim Janik  <timj@gtk.org>
+
+	* gmem.c (g_malloc0): fixed memory offsett when ENABLE_MEM_CHECK is
+	defined and ENABLE_MEM_PROFILE is not (patch from Martin Pool
+ 	<mbp@wistful.humbug.org.au>).
+
+Sat Oct  3 01:18:10 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* ghook.c:
+	(g_hook_list_invoke):
+	(g_hook_list_invoke):
+	(g_hook_list_marshal): properly handle the first valid hook to call,
+	it maybe IN_CALL already.
+	(g_hook_list_marshal): minor name change.
+
+Fri Oct  2 23:21:21 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* ghook.c: renamed GHook.id to GHook.hook_id so we don't get troubles
+	with ObjC which reserves "id" as a keyword (Raja R Harinath
+ 	<harinath@cs.umn.edu>).
+
+Wed Sep 30 10:53:03 1998  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: added ghook.c.
+
+	* glib.h:
+ 	* ghook.c: generic callback maintenance functions.
+
+	* glib.h: define G_GNUC_UNUSED.
+
+Fri Sep 25 00:04:37 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in: version bump to 1.1.4, binary age 0, interface age 0.
+
+	* glib.h (struct _GScanner): dumped peeked_char and text_len in favour
+ 	of *text_end and *buffer for buffered read()s.
+
+	* gscanner.c: changed peeking and retrival of next character so we
+	have buffered reads. fixed minor bug with number parsing error
+	reporting. made some static!!! variables local ones (why did we use
+ 	static temporary variables in the lowlevel tokenization code anyways?).
+
+Mon Sep 21 23:23:10 CDT 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.3
+
+Mon Sep 21 07:43:13 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added g_renew() which works as g_new() for g_realloc().
+
+Mon Sep 21 02:22:12 1998  Tim Janik  <timj@gtk.org>
+
+	* NEWS file update for upcoming release of GLib + GModule
+	version 1.1.3, binary age 0, interface age 0. (GModule uses
+	the same version numbers as GLib.)
+
+	* glib.h: swap the inclusion of of float.h and limits.h to work
+	around a egcs 1.1 oddity on Solaris 2.5.1 (fix provided by
+	Per Abrahamsen  <abraham@dina.kvl.dk>).
+
+	* glib.h:
+	* gscanner.c: renamed the GValue union to GTokenValue, this should
+	not affect source compatibility in most cases.
+
+	* ghash.c: added some g_return_if_fail() statements. make
+ 	g_hash_table_lookup_node() an inline function so we save an extra
+	function invocation on lookups.
+
+Sun Sep 20 18:21:46 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* ltmain.sh: Patch to libtool-1.2b to make --disable-static
+	work.
+
+Sun Sep 20 02:09:44 1998  Josh MacDonald  <jmacd@axis.hip.berkeley.edu>
+
+	* glib.h: New function g_hash_table_foreach_remove is similar to
+ 	g_hash_table_foreach, but the callback's return value indicates
+ 	whether to remove the element (if TRUE) or not (if FALSE).
+	Returns the number of elements deleted.
+
+Fri Sep 18 11:31:50 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h
+	* gstrfuncs.c: added g_memdup implementation
+
+Fri Sep 18 18:46:14 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gdataset.c: make the datalists a safe type (not using a generic
+	gpointer) by expecting a GData* argument in the g_datalist functions.
+	provide g_dataset_foreach() and g_datalist_foreach() functions that
+ 	allow a GDataForeachFunc function to walk the data lists.
+	(g_dataset_destroy_internal): made this function truely reentrant (i.e.
+	can be called from within destroy notifiers as well).
+	the *_foreach functions are _not_ reentrant (unless all the other
+	dataset and datalist functions).
+
+Fri Sep 18 03:41:20 1998  Tim Janik  <timj@gtk.org>
+
+	* gtree.c (g_tree_new): check for key_compare_func != NULL (reported
+	by Michal Kara).
+
+Thu Sep 17 18:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* config.h.in: removed from repository
+
+	* install-sh
+	* missing
+	* mkinstalldirs: updated to latest automake version
+
+Thu Sep 17 06:36:25 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gdataset.c: implemented g_datalist_* along the lines of g_dataset,
+	but operates on an opaque gpointer *datalist; pointer, e.g. for the
+	implementation of GtkObject named data.
+	we cache a certain portion of the already freed data entries now, to
+ 	gain a slight performance improve with data reallocation.
+
+Tue Sep 15 14:57:30 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am glib-config.in l*: Update to libtool-1.2b,
+	change library versioning scheme to drop LT_RELEASE
+	from the -l line, while keeping it in the soname.
+
+Fri Sep 11 02:11:46 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: explicitely include the prototypes for inline functions
+	to cure gcc warnings for -Wmissing-prototypes.
+
+Wed Sep  9 02:52:04 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in: added -posix check for NeXTStep
+
+Tue Sep  8 05:04:06 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: abandon the use of ATEXIT(), we keep the fallback
+	macros for backwards compatibility. people ought to use g_atexit().
+
+	* gutils.c (g_atexit): new function to take over the implementation
+	of ATEXIT. this function is guarranteed to succeed, similar to
+	g_malloc().
+
+Mon Sep  7 20:07:38 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in: comment the -std1 check and save LIBS properly
+
+Mon Sep  7 07:53:21 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in: check for all three inline keywords individually.
+
+	* glib.h: inlining hassle. for compilers that don't allow the `inline'
+ 	keyword, mostly because of strict ANSI C compliance or dumbness, we try
+ 	to fall back to either `__inline__' or `__inline'.
+	we define G_CAN_INLINE, if the compiler seems to be actually *capable*
+ 	to do function inlining, in which case inline function bodys do make
+ 	sense. we also define G_INLINE_FUNC to properly export the function
+ 	prototypes if no inlinig can be performed. we special case most of the
+ 	stuff, so inline functions can have a normal implementation by defining
+ 	G_INLINE_FUNC to extern and G_CAN_INLINE to 1.
+
+	* ltconfig: (compiler PIC flag test): special case linux for non
+	aout systems to honour lcc's position independant code (cases
+	"linux*aout)" and "linux*)" got added). (this needs to go into
+	libtool which does an advanced test, checking for __LCC__).
+
+	* autogen.sh: take $CC=lcc into account by invoking automake with
+	--include-deps so lcc isn't scared by gcc's auto-dependancy
+	generation code. care about $ACLOCAL_FLAGS. optionally feature
+	autoheader.
+
+	* minor fixups in other places to cure some of lcc's warnings.
+
+Sun Sep  6 19:08:53 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* configure.in: added -std1 check for ANSI compliance (from gtk)
+
+Sun Sep  6 12:31:50 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h: provide proper ATEXIT behavior on NeXTStep by !atexit
+
+Sat Sep  5 18:03:36 1998  Tom Tromey  <tromey@cygnus.com>
+
+	* gutils.c (GLIB_INLINE): Define.
+	* glib.h (GLIB_INLINE): New define.
+	(g_bit_nth_msf): Use it.  Also, add prototype.
+	(g_bit_storage): Likewise.
+	(g_bit_storage): Likewise.
+
+Sat Sep  5 04:40:02 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	(g_chunk_new0): use g_mem_chunk_alloc0() to allocate the memchunk,
+	so the correct size of the memchunk is allocated with 0's and not
+	a memory portion of the size of the desired type.
+
+	* gmem.c: new function g_mem_chunk_alloc0() which will initialize
+	a memory area allocated with g_mem_chunk_alloc() with 0's.
+
+Wed Sep  2 19:13:28 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* garray.c glib.h (g_array_[ap/pre]pend_vals): make
+	data argument const.
+
+Wed Aug 26 06:32:40 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gstrfuncs.c: new function g_strnfill() to return a new string
+	of specified length, filled with a specific character.
+
+Tue Sep  1 23:46:31 1998  Josh MacDonald  <jmacd@axis.hip.berkeley.edu>
+
+	* testglib.c (main): Update the array tests.  Reduce the number of
+	iterations for the prepend test from 10000 to 100 since it is
+	O(n^2) and was taking longer than I would like to wait.
+
+	* garray.c: I've worked on the GArray interface, mostly.  It was
+ 	seriously broken before and I hate to do it, but this is going to
+ 	break some code.  It is important to do this now, because more and
+ 	more people are starting to use glib and the interface was both
+ 	broken and inconsistent.  First, rename the _truncate functions of
+ 	both the GArray and GPtrArray classes to _set_size, since this
+ 	function can also be used to extend the arrays.  GArray now
+ 	accepts two more initialization arguments: clear and element_size.
+  	Instead of providing the type to each access function, the array
+ 	now stores the element size.  Clear, if set, causes the library to
+ 	zero element's memory as the array expands.  The major broken-ness
+ 	here was that array->len was in bytes, not elements.  Now, since
+ 	the array knows its element size, array->len is correct and I have
+ 	removed the g_array_length macro.  The only macro which now
+ 	accepts the type as an argument is g_array_index, which casts the
+ 	element to the right type--this interface does not change.  The
+ 	append and prepend functions simply need the types removed.
+  	g_ptr_array_remove_index now returns the removed element.
+
+	* gprimes.c (g_spaced_primes_closest): Move this function out of
+ 	ghash.c and rename it from g_hash_closest_prime.  Fix the primes
+ 	so that they are actually prime (they weren't all -- isn't that
+ 	nice?).
+
+Mon Aug 24 02:08:56 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+ 	* gstring.c:
+	* gstrfuncs.c:
+ 	(g_vsprintf): removed this function which was not publically
+	exported in glib.h. to export it, it should have been named
+ 	differently in the first place, since its semantics differ from
+ 	vsprintf(). apart from that, it was a possible cause for
+	problems since it worked on a previously allocated memory area and
+	was used in a lot places of glib. exporting it would have been a
+	guararant for problems with threaded programs.
+	(g_printf_string_upper_bound): exported this function to return
+	a string size, guarranteed to be big enough to hold the fully
+ 	expanded format+args string. added 'q', 'L' and 'll' flag handling.
+ 	in fact, the newly allocated area is in most cases much bigger than
+ 	required.
+	(g_strdup_vprintf()): new function returning a newly allocated string
+ 	containing the contents of *format and associated args (size is
+	calculated with g_printf_string_upper_bound()).
+	(g_strdup_printf): new function which wraps g_strdup_vprintf().
+
+	* configure.in: check for va_copy() or __va_copy() alternatively.
+	check whether va_lists can be copyied by value.
+
+	* glib.h: provide a definition for G_VA_COPY.
+
+	* glib.h:
+	* gmessages.c:
+ 	(g_logv):
+	(g_vsnprintf):
+	pass va_lists by value, not by reference, since this causes problems
+	on platforms that implement va_list as as arrays. internaly, use
+	G_VA_COPY (new_arg, org_arg); va_end (new_arg); to produce a second
+	va_list variable, if multiple passes are required. changed all
+	callers.
+
+	* glib.h:
+	* gerror.h:
+	renamed g_debug() to g_on_error_query(), cleaned up a bit.
+	renamed g_stack_trace() to g_on_error_stack_trace() since both
+	functions cluttered different namespaces.
+	there is an appropriate comment in glib.h now that explains the
+	unix and gdb specific dependencies of both functions.
+	removed g_attach_process().
+	g_on_error_stack_trace() should probably be handled with caution,
+	i've seem several different linux versions (2.0.x) become unstable
+	after invocation of this function.
+
+1998-08-18: Elliot Lee <sopwith@redhat.com>
+
+	* In gmem.c, add the ability to exclude memory chunks from the
+ 	  memory profiling information.
+
+Tue Aug 18 18:23:09 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h
+	* gstrfuncs.c: added g_strndup
+
+Tue Aug 18 04:40:17 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gmessages.c: new function g_log_set_always_fatal() to set an
+	additional fatal_mask for log levels that are considered to be fatal
+	globally (required by gtk). since this mask is not domain-associated,
+	it is restricted to the log levels, introduced by glib itself.
+
+	* gmem.c:
+	* grel.c:
+	* gtree.c (g_tree_node_check):
+	don't use g_print() calls for informational/debugging output,
+	but log all this stuff through g_log() with G_LOG_LEVEL_INFO.
+	libraries shouldn't use printf(), g_print() or g_printerr() at all.
+
+Tue Aug 18 02:46:44 1998  Tim Janik  <timj@gtk.org>
+
+
+	* glib.h (__STRICT_ANSI__): if __STRICT_ANSI__ is defined, make
+	`inline' a noop, since strict ANSI rules don't permit `inline'.
+
+Mon Aug 17 15:21:42 1998  Tim Janik  <timj@gtk.org>
+
+	* grel.c: made private functions static.
+
+Sun Aug 16 23:23:46 CDT 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* gmodule/Makefile.am: added gmodule-dl.c and gmodule-dld.c to
+	  EXTRA_DIST
+	* glib.spec: version = 1.1.3
+
+Mon Aug 17 01:46:14 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.m4: feature an extra MODULES parameter, so glib-config can
+	be invoked with the "gmodule" argument.
+
+	* glib.h: changed the log level to G_LOG_LEVEL_CRITICAL for all
+ 	g_return*_if_fail statements, and made them issue a message
+	like "assertion `%s' failed".
+
+	* gmessages.c (g_logv): ugh, don't pass log_domain as NULL to
+ 	g_log_find_domain.
+
+Sun Aug 16 20:28:27 1998  Tim Janik  <timj@gtk.org>
+
+        * version bump to 1.1.3, binary age 0, interface age 0.
+
+	* glib.h: be nice to platforms that don't have gint64 and don't
+	issue #warning on every compilation. since glib doesn't require
+	gint64 itself, packages that need gint64 should test for this
+ 	themselves.
+
+	* glib.h:
+	* gutils.c: added a new function g_vsnprintf().
+
+Sun Aug 16 Elliot Lee
+
+	glib.h: #error out if we don't recognize the SIZEOF_VOID_P
+	        #warning if no gint64
+
+Fri Aug 14 16:41:53 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added static inline functions for bit mask tests:
+	g_bit_nth_lsf, g_bit_nth_msf and g_bit_storage.
+
+Fri Aug 13 14:23:37 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gmessages.c:
+	revised the message handling system, which is now based on a new
+ 	mechanism g_log*. most of the assertment macros got adapted to
+	feature the new g_log() call with an additional specification of
+	the log level in a preprocessor macro G_LOG_DOMAIN. if G_LOG_DOMAIN
+	is undefined upon the includion of glib.h, it'll be defined with a
+	value of (NULL) and thus preserves the original bahaviour for
+	warning and error messages. the message handler setting functions
+	for g_warning, g_error and g_message are only provided for backwards
+	compatibility and might get removed somewhen.
+
+	* Makefile.am: feature the G_LOG_DOMAIN macro to set the log domain
+	to "GLib" upon compilation. we currently have to add this definition
+	to the DEFS variable.
+	* testglib.c: we need an ugly #undef G_LOG_DOMAIN at the start
+	of this file currently, since automake doesn't support per target
+	_CFLAGS yet.
+
+	* glib.h: changed some gints to gbooleans, made a few const corrections,
+	removed some superfluous G_STMT_START{}G_STMT_END wrappers, added some
+	in other required places.
+
+	* gnode.c:
+ 	(g_node_prepend):
+	(g_node_insert_before):
+	(g_node_insert):
+	(g_node_append_data):
+	(g_node_prepend_data):
+	(g_node_insert_data_before):
+	(g_node_insert_data):
+	(g_node_append):
+	return (node), so these macros/functions can be usefully chained with
+	g_node_new().
+
+Mon Aug 10 17:56:11 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h: it's GTime now, and it's back!
+
+Mon Aug 10 02:17:19 1998  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: minor hack to cause SUBDIRS (gmodule) to be build
+	last. we do this by making all-recursive-am depend on all-am.
+
+Sun Aug  9 15:56:11 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in: added GModule checks. generate files in gmodule/.
+	* glib-config.in: support library specifications `glib' and `gmodule'.
+	* Makefile.am: feature the gmodule/ subdir.
+
+Wed Aug  5 10:04:29 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.2
+
+Wed Aug 05 01:15:36 1998  George Lebl  <jirka@5z.com>
+
+	* testglib.c: fix 64-bitness in g_prints, sizeof doesn't
+	  seem to return int so I cast it for printing, probably
+	  just cosmetic
+
+Tue Aug  4 19:54:06 PDT 1998 Shawn T. Amundson <amundson@gkt.org>
+
+	* Released GLib 1.1.1
+
+Tue Aug  4 15:17:54 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in: version bump to 1.1.1, binary age 1, interface age 0.
+	* NEWS: updates.
+	* README: updates.
+	* INSTALL: updates and fixes.
+	* COPYING: include the GNU LGPL, rather than shipping an empty file.
+	* AUTHORS: listed original authors here, and added people who made
+	significant improvements to glib.
+
+	* glib.h:
+	* gutils.c: implement g_get_current_dir() which returns a newly
+	allocated string, instead of a g_getcwd() variant that operates
+	on a static buffer.
+	export glib_interface_age and glib_binary_age.
+	as a convenience, macro definitions have been added for
+ 	g_node_insert_data, g_node_insert_data_before, g_node_append_data and
+	g_node_prepend_data.
+
+	* testglib.c: minor cleanups, print current dir.
+
+Mon Aug  3 16:02:26 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gnode.c: change order of gpointer data; field in struct _GNode to
+	be partly binary compatible with GList and GSList.
+
+1998-08-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* garray.c (g_ptr_array_remove_index): bugfix: index check for
+	array has been wrong.
+
+Fri Jul 31 22:17:05 1998  Tim Janik  <timj@gtk.org>
+
+	* testglib.c (g_node_test): added a GNode test.
+
+Fri Jul 31 09:08:16 1998  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: compile gnode.c.
+
+	* glib.h:
+	* gnode.c: added implementation of n-way trees.
+
+	* gtree.c (g_tree_traverse): added a warning to the switch() statement
+	which says that G_LEVEL_ORDER is not implemented.
+
+Mon Jul 27 00:17:30 CDT 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.1.0
+
+Mon Jul 27 01:02:27 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: #if 0'ed out the GTime definition, until it is definitively
+ 	needed. #if 0'ed out the g_getcwd() version, because it is the wrong
+ 	implementation.
+
+Sat Jul 25 16:09:00 1998  Mark Crichton <crichton@expert.cc.purdue.edu>
+
+	* glib.h: gtime changed to g_time.  gtime is used in
+	/usr/include/time.h in NetBSD, causing multiple headaches.
+	If this isn't the right way of fixing it.... ;)
+
+Thu Jul 23 00:29:14 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gscanner.c: new functions to make a scanner scope sensitive wrt
+ 	symbol lookups.
+	g_scanner_scope_foreach_symbol, g_scanner_scope_lookup_symbol,
+	g_scanner_scope_remove_symbol, g_scanner_scope_add_symbol and
+	g_scanner_set_scope.
+	g_scanner_add_symbol, g_scanner_remove_symbol and
+ 	g_scanner_foreach_symbol are now aliases for scope 0.
+
+Mon Jul 20 23:05:34 1998  George Lebl  <jirka@5z.com>
+
+	* glib.h: typo fixed for alphas for gint64
+
+Tue Jul 14 09:05:18 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gutils.c: new fuction g_dirname() which returns a newlly
+	allocated string.
+
+Fri Jul 10 06:33:43 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gutils.h: added a bunch of utility/wrapper functions:
+	g_basename(), g_getcwd(), g_get_user_name(), g_get_real_name(),
+	g_get_home_dir(), g_get_tmp_dir(), g_get_prgname() and g_set_prgname().
+
+	* gutils.c: removed all g_str* functions.
+	* gstrfuncs.c: moved the bunch g_str* functions from gutils.c in this
+	place. this file shall never include <unistd.h> to avoid clashes for
+	some of the g_str* functions on some OSes.
+
+Fri Jul 10 00:29:03 EEST 1998 Lauri Alanko <nether@gimp.org>
+
+	* glib.h:
+	* ghash.c: Renamed g_hash_table_lookup_full to
+	g_hash_table_lookup_extended to conform with naming conventions.
+
+Tue Jul  7 03:18:58 EEST 1998 Lauri Alanko <nether@gimp.org>
+
+	* glib.h:
+	* ghash.c: Generic cleanup, added a function:
+	(g_hash_table_lookup_full): Return whether the lookup succeeded,
+	and also retrieve the key and value. This allows one to
+	distinguish between failed lookup and finding a NULL, and also
+	allows one to free a key in the hash.
+
+Mon Jul  6 10:12:05 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* ltconfig: fix for properly detecting shared lib support on
+	SunPro cc (taken from libtool 1.2.a)
+
+Sat Jul  4 13:38:52 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h: added g_array_length
+
+Tue Jun 30 11:58:25 1998  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+	account. react on valid/invalid string pairs.
+
+Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+	ours. ;)
+
+Fri Jun 19 03:11:02 1998  Tim Janik  <timj@gtk.org>
+
+	* gdataset.c: removed g_dataset_try_key, g_dataset_force_id and
+ 	g_dataset_retrive_key in favour of GQuarks.
+	a GQuark is an numeric id wich is associated with a certain string.
+	(g_quark_try_string): try to get the quark associated with this string,
+ 	if the lookup failed return 0.
+	(g_quark_from_string): get the associated quark for a string, if there
+ 	isn't currently a GQuark associated with this string, then allocate a
+ 	new quark and return that.
+	(g_quark_from_static_string): like the above function, but the string
+ 	isn't strdup()ed to save memory.
+	(g_quark_to_string): get the string that is associated with a certain
+	GQuark.
+
+	* gdataset.c (g_dataset_id_set_data_full): invoke the destroy function
+	_after_ the new data has been setup.
+
+Thu Jun 18 02:35:21 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* glib.h: Changed messages for g_return_[val]_if_fail to
+	be somewhat more clear: assertion "blah" failed.
+
+1998-06-18  Federico Mena Quintero  <federico@nuclecu.unam.mx>
+
+	* testglib.c (main): Use GINT_TO_POINTER casts to remove compiler
+	warnings.
+
+	* grel.c: #include <string.h>
+
+Fri Jun 12 15:39:06 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h (GScanner): cleanups of the structure fields (binary
+	incompatible).
+
+Fri Jun 12 00:39:28 1998  Josh MacDonald  <jmacd@icw.EECS.Berkeley.EDU>
+
+	* glib.h: add new hash and equal functions g_int_*.  complement
+	g_direct_hash with g_direct_equal.
+
+	* grel.c: new file, GRelations implement tuples of N-N mappings.
+	A comment in glib.h briefly describes the interface.
+
+	* ghash.c: new function, g_hash_table_size
+
+	* glib.h: new typedefs, gsize, gssize, gtime.
+
+	* garray.c: new functions implementing a simplified GArray.  This
+	GPtrArray is an array of gpointers and has functions to add and
+	remove elements, much like java.lang.Vector.
+
+	* garray.c: new functions for the single-byte special case of
+	GArray.  The functions g_byte_array* operate on arrays of bytes.
+	Internally, a GArray is used.
+
+	* testglib.c: tests for g_ptr_array, g_byte_array, and g_relation...
+
+1998-06-11  Federico Mena Quintero  <federico@nuclecu.unam.mx>
+
+	* gdataset.c: #include <string.h>
+
+Thu Jun 11 04:15:31 1998  Tim Janik  <timj@gtk.org>
+
+        * glib.h:
+        * gdataset.c: new function g_dataset_retrive_key. adjusted prealloc
+        sizes, to take up less space on initial allocation.
+
+1998-06-10  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* acinclude.m4: New file.  Contains `libtool.m4' from libtool-1.2,
+	the version from which glib's libtool forked.  Needed for people
+	who use post-1.2 alphas of libtool.
+	* configure.in (enable_mem_check, enable_mem_profile): Replace
+	`echo -n' with AC_MSG_CHECKING.
+	(fd_set): Explain test for `fd_set' better.
+
+Wed Jun 10 19:29:51 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* Makefile.am glib.m4 configure.in:
+
+	Moved out from GTK+; added AM_PATH_GLIB macro.
+
+Wed Jun 10 12:56:07 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* glib.h: renamed g_const_pointer => gconstpointer
+
+Tue Jun  9 17:47:33 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* glib.h: Remove #error - HP/UX.
+
+Sat May 23 19:00:01 1998  Owen Taylor  <otaylor@gtk.org>
+  [ Combination of:
+     gtk-rrh-980412-0.patch (Raja R Harinath <harinath@cs.umn.edu>)
+     gtk-jbuhler-980516-0 (Jeremy Buhler <jbuhler@cs.washington.edu>) ]
+
+	* glib.h ghash.c gstring.c gdataset.c gutils.c:
+	- Added new typedef g_const_pointer; expunged all incorrect
+	  uses of 'const gpointer'.
+	- Fixed up warnings that that created,
+	- Changed GHashFunc and GCompareFunc to take g_const_pointer
+	  arguments. (Necessary, but will cause warnings in existing
+	  code until fixed)
+	- Added other new const in harmless positions.
+
+Mon Jun  8 01:06:47 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added enum-helper macros for code generation.
+	added G_BREAKPOINT().
+
+Sat Jun  6 14:09:22 PDT 1998 Manish Singh <yosh@gimp.org>
+
+	* gmem.c: commented out MEM_PROFILE and MEM_CHECK, causing weird
+	problems
+
+Wed Jun  3 06:19:42 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h (g_chunk_new0): convenience macro, for allocating small chunks
+	like g_chunk_new() with additional 0 initialization.
+
+Mon Jun  1 04:43:27 1998  Tim Janik  <timj@gtk.org>
+
+	* ghash.c (g_hash_table_insert): wrote a comment describing why
+	a hash node's key should not also get replaced when overriding
+ 	previous entries.
+
+Tue May 26 18:30:06 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h (g_string_sized_new): new function to controll the preallocated
+	size of a GString.
+
+	* glib.h (g_strreversed): new function to reverse a string.
+
+Mon May 18 22:14:39 1998  Owen Taylor  <otaylor@gtk.org>
+(Yasuhiro SHIRASAKI <joke@awa.tohoku.ac.jp> : gtk-joke-980517-0.patch)
+
+	* gutils.c: Restored a missing prototype for g_vsprintf.
+
+Wed May 20 05:02:26 1998  Tim Janik  <timj@gtk.org>
+
+        * glib.h: conditionally define NULL, FALSE and TRUE.
+        (g_mem_chunk_create): new convenience macro as a short hand for
+        g_mem_chunk_new().
+        (g_chunk_free): new convenience macro to be consistent with g_chunk_new.
+
+Tue, 19 May 1998 09:00:02 +0200  Paolo Molaro <lupus@debian.org>
+
+	* gcompletion.c: generic functions for com<TAB>pletion...
+
+Sun May 17 10:48:27 1998  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_unexp_token): provide usefull default
+ 	specifications for identifier_spec and symbol_spec.
+
+	* glib.h: new functions g_slist_nth_data and g_list_nth_data to return
+ 	the data of the nth element in the list.
+
+Fri May 15 22:31:49 1998  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_unexp_token): removed spurious va_end(args)
+ 	that for some reason didn't produce a compiler warning on my machine
+ 	(is va_end defined to nothing for i386?).
+
+Fri May 15 12:32:08 1998  rodo  <doulik@karlin.mff.cuni.cz>
+
+	* gscanner.c: replaced some snprintf with g_snprintf
+
+Fri May 15 00:56:59 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: further support for gcc function attributes: G_GNUC_FORMAT,
+	G_GNUC_NORETURN and G_GNUC_CONST.
+
+	* gscanner.c (g_scanner_stat_mode): changed stat() to lstat().
+	(g_scanner_msg_handler): "\n" at end of line!
+	(g_scanner_foreach_symbol): new function to iterate over the symbol
+ 	table (GScanner does value-wrapping).
+
+Thu May 14 04:14:12 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h: typedef gint gboolean;
+	this is needed to provide portability with big-endian platforms (e.g.
+	try sizeof(bool) for c++ on big-endians - it's 4).
+	this is also needed to maintain some_union.d_gint==some_union.d_gboolean.
+ 	plus, gint to gboolean casts and vice versa need to be possible without
+ 	loss.
+
+Tue May 12 19:22:58 1998  Owen Taylor  <otaylor@gtk.org>
+
+ 	* glib/glib.h: Added macros G[U]INT_TO_POINTER() and
+	GPOINTER_TO_[U]INT for storing small integers integers
+	inside pointers.
+
+	* glib/testglib.c: Print sizeof() results
+	as g_print("%ld", (glong)sizeof(foo)), to deal with
+	size_t being long on Alpha's.
+
+Tue May 12 16:54:15 1998  Owen Taylor  <otaylor@gtk.org>
+	(James A <jamesa@demon.net> : gtk-jamesa-980511-4.patch)
+
+	* glib.h gstring.c gmessages.c: Added some missing
+	const to arguments.
+
+	* gutils.c (g_strsignal.c): Added missing return statements.
+
+Mon May 11 21:11:54 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* gutils.c gmessages.c: Moved g_error, g_warning, g_message and
+	g_print from gutils.c to new file gmessages.c, to avoid having to
+	include <unistd.h> in gutils.c which was causing problems for the
+	g_strsignal implementation on FreeBSD boxes.
+
+Mon May 11 09:53:43 1998  Tim Janik  <timj@gtk.org>
+
+	* configure.in: preserve automake CFLAGS.
+
+	* Makefile.am: fully rename the created library to libglib-1.1.la.
+	this means we need to change certain portions of the Makefile.am on
+	major/minor version bumps.
+
+	* ltmain.sh: the -release option is not required anymore.
+
+        * glib.h: provide G_GNUC_FUNCTION and G_GNUC_PRETTY_FUNCTION to
+	avoid conditionals. unconditionally define NULL, TRUE, FALSE, MAX,
+	MIN, ABS and CLAMP, these macros might be screwed from other headers.
+
+Mon May 11 01:44:10 1998  Tim Janik  <timj@gtk.org>
+
+	* gdataset.c: new file, gdatasets implement the object data
+	mechanism from GtkObject. a generic data pointer is associated with
+	a certain location and a key id.
+
+Sat May  9 20:08:12 1998  Owen Taylor  <otaylor@gtk.org>
+
+        * glib/gmem.c: Experimentally restore GMemChunk
+        to its primeval state - where mem areas are
+        freed incrementally instead of searching the tree
+        every time a mem area is completely empty. Also,
+        always keep one mem chunk around. (Reduced calls
+        to malloc() a lot, but doesn't really improve
+        performance significiantly)
+
+Thu May  7 08:17:28 1998  Tim Janik  <timj@gtk.org>
+
+	* glib.h (G_GNUC_PRINTF):
+	(G_GNUC_SCANF): macros to facilitate the printf/scanf format argument
+	checking of gcc.
+
+	* gstring.c: const corrections, string!=NULL checks at function entry.
+	(g_string_down): new function for tolower(3) conversion.
+	(g_string_up): new function for toupper(3) conversion.
+
+	* gutils.c: const corrections.
+	(g_strdown): g_string_down() counterpart.
+	(g_strup): g_string_up() counterpart.
+
+	* gscanner.c (g_scanner_unexp_token):
+ 	(g_scanner_error):
+	(g_scanner_warn): new functions to let a scanner put out warnings
+ 	or errors, especially to react on unexpected tokens.
+
+	* gslist.c:
+ 	(g_slist_index): find out about about the position of a
+	certain data pointer.
+ 	(g_slist_position): find out about about the position of a
+	certain node.
+
+	* glist.c:
+ 	(g_list_index): find out about about the position of a
+	certain data pointer.
+
+Thu May  7 05:14:19 1998  Tim Janik  <timj@gtk.org>
+
+	* ltmain.sh: added a new commandline flag -postfix similar to -release,
+	but will immediately change the library name.
+
+	* Makefile.am: specify -postfix and -version-info
+
+	* configure.in: version bump to 1.1.0. added GLIB_INTERFACE_AGE and
+	GLIB_BINARY_AGE. calculate LT_* variables for libtool.
+
+Fri May  1 16:36:08 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* gutils.c: (g_strcasecmp). Check for isupper before
+	taking tolower, and account for macroized tolower.
+
+	* gutils.c (g_error): Check for recursion.
+
+1998-04-27  Elliot Lee  <sopwith@cuc.ml.org>
+
+	* glist.c (g_list_position): New function to find the position of
+	a link in a list - should be the inverse of g_list_nth(), but
+	haven't tested it so poof.
+
+Thu Apr 30 21:41:30 1998  Owen Taylor  <otaylor@gtk.org>
+
+	* gstring.c : Check arguments more carefully,
+	(gtk-draco-980423-1.patch; ramsey@rhrk.uni-kl.de)
+
+Tue Apr  7 19:36:48 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* gutils.c (g_direct_compare): Removed, because that's what
+	a NULL comparison function means. And it wasn't 64 bit safe.
+
+Mon Apr  6 18:43:25 1998  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_get_token_ll): fixed a bug that caused floats
+	of the format ".xxx" to be parsed as "xxx".
+
+Fri Apr  3 20:36:35 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* gutils.c (g_parse_debug_string): Make debug string
+	parsine case-insensitive
+
+Fri Apr  3 17:03:18 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* gstring.c: corrected possible overrun when inserting into
+	GStrings (thanks Elrond)
+
+Fri Apr  3 18:05:45 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* testglib.c: Removed literal german from strings
+	to appease SGI compiler.
+
+Thu Mar 26 20:47:21 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* configure.in glib glibconfig.h.in: Add test for atexit/on_exit -
+	use on_exit if atexit not found in definition of ATEXIT.
+
+Wed Mar 25 15:23:37 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* Makefile.am: Switched glibconfig.h rule from HEADERS
+	to DATA, so that it is not added to DISTFILES
+
+Wed Mar 18 22:27:08 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* garray.c: g_rarray_truncate length done correctly
+
+Sun Mar 15 07:13:34 1998  Tim Janik  <timj@gimp.org>
+
+	* gutils.c: changed *_handler variables to be named glib_*_handler,
+	so you can easily access them from gdb.
+
+Sat Mar 14 17:47:43 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* Makefile.am: Don't refer to current directory as $(top_builddir)
+	to avoid confusing non-gmakes
+
+Sat Mar 14 01:37:35 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* Makefile.am (configincludedir): Moved glibconfig.h to
+          $(pkglibdir)/include
+
+Tue Mar 10 02:03:12 1998  Tim Janik  <timj@gimp.org>
+
+	* gscanner.c (g_scanner_destroy_symbol_table_entry): new function to
+	free symbol table entries upon destruction
+ 	(gtk-gronlund-980309-0.patch.gz).
+
+Mon Mar  9 15:02:21 1998  Tim Janik  <timj@gimp.org>
+
+	* glib.h: changed *_length functions to return guint.
+	changed *_nth functions to take guint as argument.
+
+	* glist.c: adapted g_list_length and g_list_length.
+
+	* gslist.c: adapted g_slist_length and g_slist_length.
+
+Mon Mar  2 17:51:18 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* glib.h gutils.c : changed g_strcasecmp
+	  to take gchar* not guchar*
+
+	* testglib.c: Remove trailing ; after functions
+
+Sun Mar  1 19:04:40 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* glib.h gstring.c: Added g_string_insert[_c]()
+	  and g_string_erase().
+
+	  From: Stefan Wille  <1wille@vsys1.informatik.uni-hamburg.de>
+
+Mon Feb 16 23:05:06 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* glist.c (g_list_insert_sorted): Changed function
+	  so elements are always inserted, even if they compare
+	  equal with another.
+
+Thu Feb 12 22:48:11 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* gstring.c glib.h: removed deprecated g_string_equal
+	  and g_string_hash.
+
+Tue Feb 10 13:04:36 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* configure.in: Add check to see if the C library's
+	  iswalnum can actually be used. (Not true for
+	  Linux libc-5.4.38)
+
+Sat Feb  7 11:48:09 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* gstring.c gutils.c: added some additional consts in
+	  appropriate places to remove a warning
+
+Sat Feb  7 11:15:54 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* gutils.c: include <ctype.h> for tolower()
+
+Fri Jan 30 23:57:17 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* added and autoconfigured in a new utility function
+	g_strcasecmp
+
+Wed Jan 28 23:53:27 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glist.c
+	* gslist.c
+	* testglib.c: the sort functions compared backwards. Fixed
+	* glib.h: list iterator macros now check for NULL pointers
+
+Tue Jan 27 09:46:57 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* gstring.c: g_string_prepend and g_string_prepend_c had
+	interchanged src and dest parameters for g_memmove. Fixed.
+
+Tue Jan 27 01:38:52 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* gslist.c: fixed a really, really lame error. g_slist_insert
+	didn't hook the data in! Reworked the routine to reflect the
+	functionality of g_list
+
+Wed Jan 21 01:13:25 1998  Tim Janik  <timj@psynet.net>
+
+	* Applied patch from (Raja R Harinath <harinath@cs.umn.edu>)
+	  to add function g_snprintf.
+        * configure.in (AC_CHECK_FUNCS): Check for vsnprintf.
+        * glib.h: Add prototype for g_snprintf.
+        * glibconfig.h.in: Add HAVE_VSNPRINTF.
+        * gutils.c (g_snprintf): new function.
+
+Sat Jan 17 23:52:40 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* gstring.{c,h} gscanner.c:
+	   renamed g_string_equal => g_str_equal
+	   renamed g_string_hash => g_str_hash
+	  And const corrected. Old functions left in for now.
+
+Fri Jan  9 20:03:46 1998  Tim Janik  <timj@psynet.net>
+
+	* gutils.c (g_strerror): changed message for EAGAIN from
+	"no more processes" to "try again" since EAGAIN is used with
+	functions else than fork().
+
+	* gscanner.c (g_scanner_get_token_ll): use strtol() instead of
+	strtoul() to avoid conflicts with solaris.
+
+	* merged the glib portions from Jan 2 to Jan 7 out of gtk+/ChangeLog
+ 	into this file.
+
+Wed Jan  7 02:14:30 PST 1998 Manish Singh <yosh@gimp.org>
+
+	* glib.h:
+	* glist.c:
+	* gslist.c:
+	* testglib.c: Added g_[s]list_insert_sorted function
+	and appropriate tests in testglib
+
+Sat Jan  3 20:23:25 1998  Owen Taylor  <owt1@cornell.edu>
+
+	* glib.h: Changed guint32 -> guint for bitfields.
+	(Bitfields must be int or unsigned int?)
+
+Fri Jan  2 23:52 PST 1998 Jay Painter <jpaint@serv.net>
+
+	* glib_pre1.h:
+	* glib_pre2.h:
+	* glib.h: reverted glibconfig.h and glib.h files back to the
+	way they were before my ugly hack.
+
+	* gscanner.c: removed inlines from clist and gscanner
+
+Tue Dec 23 02:49:51 1997  Tim Janik  <timj@psynet.net>
+
+	* gscanner.c: new file for GScanner: Flexible lexical scanner for
+ 	general purpose.
+	* glib_pre2.h: added GScanner includes. added g_strconcat and g_strtod.
+	gutils.c (g_strconcat): new function for string concatenation of NULL
+ 	terminated parameter list.
+	(g_strtod): new function to perform best string to double conversion
+	with or without consideration of the current locale.
+
+Mon Dec 15 19:33:58 1997  Tim Janik  <timj@psynet.net>
+
+	* glist.c: minor optimizations:
+ 	(g_list_append): `if' optimized for common code path, commented out
+ 	unneccessary `assert', saved one variable assignment.
+	(g_list_prepend): saved two (conditioned) variable assignment.
+	(g_list_insert): saved one  (conditioned) variable assignment,
+	saved one variable assignment.
+	(g_list_remove): `if' optimized for common code path, saved two
+	variable assignments by using `g_list_free_1' (which is even
+ 	faster) instead of `g_list_free'.
+	(g_list_reverse): saved allocation of one variable, saved one
+	variable assignment.
+
+Wed Dec 10 23:27:20 1997  Tim Janik  <timj@psynet.net>
+
+	* glib_pre1.h:
+	* glib_pre2.h:
+	* glib.h: this file now gets concatenated by makeglib_h from
+	glib_pre1.h and glib_pre2.h to merge in glibconfig.h wich got
+	created by configure (done by Jay Painter).
+
+	* glib_pre2.h: the g_assert*() and g_return_*_fail() macros
+	are wrapped by G_STMT_START and G_STMT_END now, to avoid conflicts
+	when used within if (...) g_macro(); else ... conditionals.
+
+Tue Dec 17 13:14:07 1996  Peter Mattis  <pmattis@charnley.HIP.Berkeley.EDU>
+
+	* glib.h: Changed 'g_return_if_fail' and 'g_return_val_if_fail' to
+	not call 'g_string' but to simply stringify the
+	expression. Calling 'g_string' causes the expression to be
+	expanded which is undesired.
+
+Sun Dec  1 01:30:48 1996  Peter Mattis  <pmattis@charnley.HIP.Berkeley.EDU>
+
+	* Started ChangeLog
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
new file mode 100644
index 0000000..5eb3071
--- /dev/null
+++ b/ChangeLog.pre-2-0
@@ -0,0 +1,7225 @@
+Fri Mar  8 10:58:28 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* ======== Released 2.0.0 ========
+
+Fri Mar  8 10:20:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* NEWS: Final updates for 2.0.0
+
+	* glib/gstrfuncs.c: Convert the results of strerror()
+	and strsignal() to UTF-8.
+
+	* glib/gconvert.c glib/gdir.c glib/giochannel.c glib/giounix.c
+	glib/giowin32.c: Use g_strerror(), not strerror().
+
+Fri Mar  8 00:15:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* README.in: Updates.
+
+	* README.in: Add warnings about current encoding problems with .po
+	files and error logging functions.
+
+	* configure.in: Check for bind_textdomain_codeset().
+
+	* glib/gutils.c (_glib_gettext): Call 
+	bind_textdomain_codeset, if present.
+
+	* INSTALL.in: Some updates.
+
+	* AUTHORS: Updates.
+
+	* Makefile.am (EXTRA_DIST): Remove TODO.xml from EXTRA_DIST.
+
+	* docs/Makefile.am (EXTRA_DIST): Remove Changes-2.0.txt
+	from EXTRA_DIST.
+
+2002-03-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Fixed recognition of dce. Do not use -lc_r on
+	OpenBSD and FreeBSD. Instead use -pthread. Move scheduling
+	parameter check to after the case..esac block for finding the
+	right thread libs. (#73686)
+
+Tue Mar  5 19:41:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* GTK+-2.0.0 rc1
+
+2002-03-05  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmain.c (g_source_set_priority): Finish docs.  
+	(#67064)
+
+Tue Mar  5 00:38:54 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gutils.c (g_get_any_init): Where we have
+	getpwuid[_r], use that in preference to $HOME, and
+	only check $HOME as a fallback if getpwuid fails.
+	(#2311)
+
+Sun Mar  3 21:09:24 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Default to --disable-gtk-doc, to avoid
+	Jade setup hassles.
+
+	* autogen.sh: Add --enable-gtk-doc.
+
+	* configure.in: Default to --disable-static to go
+	along with Pango, GTK+ where we need to do that for
+	bin-compat reasons.
+
+	* Makefile.am: Add a slightly modified distcheck rule
+	that passes --enable-gtk-doc to the configure inside.
+	(So that 'make dist' succeeds inside.)
+
+	* configure.in *.pc.in **/Makefile.am m4macros/glib-2.0.m4
+	tests/makefile.mingw.in: Switch everything over to
+	glib-2.0.
+
+Sun Mar  3 02:30:05 2002  Tim Janik  <timj@gtk.org>
+
+	* glib/gscanner.h (_GScannerConfig): added padding.
+
+	* glib/ghook.h (struct _GHook): add two padding pointers.
+
+Thu Feb 28 11:13:49 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gshell.c (g_shell_unquote): Fix memory leak.
+	(#72990, Paolo Maggi)
+
+2002-02-28  Sven Neumann  <sven@gimp.org>
+
+	* m4macros/glib-2.0.m4: nicer output of configure --help.
+
+2002-02-27  Daniel Elstner  <daniel.elstner@gmx.net>
+
+	* glib/gdate.c (g_date_strftime): Remove the shortcut
+	for UTF-8 locales to ensure consistent behaviour.  Fix
+	handling of the strftime return value, and avoid looping
+	if strftime is buggy and constantly returns 0.  Always
+	return 0 if the output buffer was to small. (#72544)
+
+Tue Feb 26 21:44:01 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* config.status config.guess: Remove these files
+	from CVS so we more-or-less current versions from
+	automake --add-missing. (Reported by Finlay Dobbie,
+	#60342)
+
+2002-02-26  Matthias Clasen  <maclas@gmx.de>
+
+	* docs/debugging.txt, gobject/glib-genmarshal.c,
+	gobject/glib-genmarshal.1, gobject/Makefile.am, gobject/gtype.c:
+	Remove references to gruntime. This includes renaming the test
+	program testgruntime to testgobject and the debug envvar
+	GRUNTIME_DEBUG to GOBJECT_DEBUG.  (#50877)
+
+Tue Feb 26 14:56:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-2.0.pc.in: Reorder @INTL_LIBS@ and @ICONV_LIBS@ in case
+	-lintl depends on -licon. (Miroslaw Dobrzanski-Neumann #72708)
+
+Mon Feb 25 23:01:53 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in acconfig.h config.h.win32.in
+	glib/gconvert.c: Check for iconv_* in -liconv
+	as well as libiconv_* in -liconv since AIX ships
+	the system iconv in a separate library.
+	Patch from Miroslaw Dobrzanski-Neumann (#72569)	
+
+Mon Feb 25 22:46:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gdebug.h: Fix trailing , in enumeration
+	Miroslaw Dobrzanski-Neumann (#72574)
+	
+Mon Feb 25 21:58:01 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/guniprop.c (g_unichar_toupper/lower): Account
+	for some characters having now uppercase/lowercase
+	equivalents in code, docs. (#65416)
+
+Mon Feb 25 16:31:09 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gshell.c (tokenize_command_line): Fix quoting
+	of \' sequence (#72548, Christian Rose)
+
+2002-02-24  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Edits.
+
+	* config.h.win32.in: Add (as undefined) HAVE_UNSETENV,
+	_FILE_OFFSET_BITS and _LARGE_FILES, just for completeness.
+
+	* glibconfig.h.win32.in: Add the gcc-2.95.x undef of
+	G_HAVE_ISO_VARARGS.
+
+Sat Feb 23 21:36:51 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: 1.3.15, binary, interface age 0.
+
+	* NEWS: Updated.
+
+Sat Feb 23 14:54:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.h (struct _GIOChannel): Add a little bit
+	of padding.
+	
+	* glib/gmain.h (struct _GSource): Add a little bit of padding.
+
+2002-02-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+	support for GLib. Currently only the fatal_warnings debug option exists. 
+
+	* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+	for parsing G_MESSAGES_PREFIXED.
+	(_g_debug_init): New one-shot function for parsing G_DEBUG.
+	(g_log_write_prefix): Use g_log_msg_prefix_init().
+	(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+	* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
+Wed Feb 20 22:35:42 2002  Owen Taylor  <otaylor@redhat.com>
+
+	Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+
+	* glib/giounix.c (g_io_channel_new_file): Fix trailing comma
+	in enum.
+
+	* configure.in: Check for unsetenv.
+
+	* test/uri-test.c: Fall back to trying putenv(VARNAME) if
+	unsetenv isn't present.
+
+2002-02-20  Daniel Elstner  <daniel.elstner@gmx.net>
+
+	* glib/gstring.[ch] (g_string_erase): Use gssize instead of
+	gsize as type of the pos and len arguments. (#71964)
+
+2002-02-20  Simos Xenitellis  <simos@hellug.gr>
+
+	* configure.in: Added el to ALL_LINGUAS (Greek language).
+
+2002-02-19  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c: Include <config.h> first here, too. Use
+	g_io_channel_read_chars() instead of (deprecated)
+	g_io_channel_read(). Set encoding to NULL for the channels used
+	for the pipes from the child.
+
+	* glib/giowin32.c (buffer_read): Do return G_IO_STATUS_EOF when
+	EOF has been reached. Otherwise, with the above change to
+	gspawn-win32.c, spawn-test hangs.
+
+Mon Feb 18 20:18:23 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/libcharset/Makefile.am (EXTRA_DIST): Remove
+	charset.alias from EXTRA_DIST; we don't want the
+	charset.alias from the make distcheck machine
+	on the target system!. (#70974, reported by
+	Ryan Lovett)
+
+Mon Feb 18 12:40:36 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Turn off ISO varargs support for gcc-2.95
+	since it causes problems with ANSI and we we have GNUC
+	varargs. (#70024, reported by Morten Welinder, fix from
+	James Henstridge)
+
+Sun Feb 17 11:37:06 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* 1.3.14
+
+	* glib/glibintl.h: Error out of config.h wasn't included
+	rather than including it, since config.h must be the 
+	first thing included.
+
+	* glib/gconvert.c glib/gmarkup.c glib/gshell.c glib/gspawn.c
+	glib/gunibreak.c glib/gunidecomp.c glib/guniprop.c: 
+	Include config.h as the first thing. (#71704, Morten
+	Welinder)
+
+Fri Feb 15 11:41:42 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: 1.3.14, binary age 0, interface age 0.
+
+Fri Feb 15 10:41:51 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* NEWS: Updated.
+
+	* configure.in: Require autoconf-2.52, run AC_SYS_LARGEFILE.
+	(#71410, Sven Neumann)
+
+	* glib/giounix.c glib/giowin32.c glib/giochannel.[ch]:
+	Change offset type for g_io_channel_seek[_position] to
+	gint64.
+
+2002-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* tests/thread-test.c: Do not assume, that after
+	g_usleep(G_USEC_PER_SEC) the newly started thread began
+	running. Spotted by Miroslaw Dobrzanski-Neumann
+	<mne@mosaic-ag.com>. Make the test_g_static_rw_lock_thread threads
+	wait a random time. Make the test_g_static_rw_lock test run 5
+	seconds, not 1.
+
+2002-02-14  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gmessages.c (g_logv): Use the #if branch with
+	G_BREAKPOINT() also on Win32. Remove the separate __asm int 3 for
+	MSVC, G_BREAKPOINT() does exactly that.
+
+2002-02-14  James Henstridge  <james@daa.com.au>
+
+	* m4macros/glib-gettext.m4: add third argument to the AC_DEFINE
+	calls, so users of the macro don't need to add entries to
+	acconfig.h in their package.
+
+2002-02-13  Havoc Pennington  <hp@redhat.com>
+
+	* glib/gmain.c (g_main_context_check): never dispatch sources of
+	mixed priority, because while iterating over the dispatch array a
+	new source with more priority may be added, while a source with
+	less priority remains in the dispatch array
+
+2002-02-11  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gmessages.h: Use "if (expr) { } else" as I meant to in the
+	first place. The other form can trigger warnings in some compilers
+	that suspect a ";" after "if (expr)" is an error.
+
+2002-02-11  Manish Singh  <yosh@gimp.org>
+
+	* glib/gmessages.h: need statement terminators for the if clauses for
+	the preceding change.
+
+2002-02-11  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gmessages.h: Use "if (expr) else" rather than
+	"if (!(expr))" so the parentheses don't disable the gcc
+	warnings about = vs. ==.
+
+2002-02-11  jacob berkman  <jacob@ximian.com>
+
+	* glib/gmarkup.h (g_markup_error_quark): match the signature in
+	the implementation
+
+2002-02-10  Hans Breuer  <hans@breuer.org>
+
+	* glib/gfileutils.c : no sym links on win32, no lstat in msvcrt
+
+	* tests/makefile.msc.in : added uri-test
+
+2002-02-09  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gmarkup.c: (xml_isspace): New.
+	(skip_spaces): g_unichar_isspace -> xml_isspace
+	* glib/gstrfuncs.c: (g_ascii_strtod): isspace -> g_ascii_isspace
+	isxdigit -> g_ascii_isxdigit, isdigit -> g_ascii_isdigit
+
+2002-02-09  Matthias Clasen  <matthias@local>
+
+	* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
+
+	* glib/gmarkup.c (g_markup_parse_context_parse): Support 
+	' and " as attribute value delimiters.  (#70677)
+
+2002-02-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Make --disable-threads work again. (#71034)
+
+Fri Feb  8 23:52:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/gvaluetransform.c: Register transformations for
+	gint64, guint64. (#70780, patch from Andy Wingo)
+
+	* configure.in: Handle missing G_GINT64_FORMAT, 
+	G_GUINT64_FORMAT ... harder to require GNU libc than GCC.
+
+	* NEWS: Some cleanups that I had setting around.
+
+2002-02-08  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gconvert.h: Make hostname parameter const char *.
+	* glib/gconvert.c: (g_unescape_uri_string): Added a new
+	"ASCII must not be escaped" feature, and some missing error
+	checking.
+	(is_escalphanum): New.
+	(is_escalpha): New.
+	(hostname_validate): New.
+	(g_filename_from_uri): Don't allow hostnames to include
+	escaped ASCII, validate hostnames with the new
+	hostname_validate.
+	(g_filename_to_uri): Validate hostnames with the new
+	hostname_validate.
+
+	* tests/uri-test.c: Updated tests to reflect the hostname
+	validation changes above.
+
+	* glib/gdate.c: (g_date_fill_parse_tokens): Remove the
+	<ctype.h> include and do isdigit -> g_ascii_isdigit.
+
+Fri Feb  8 12:32:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/hash-test.c (second_hash_test): Fix access to
+	freed memory in test case (Miroslaw Dobrzanski-Neumann).
+	Re-enable and debug some commented out code.
+
+2002-02-08  Michael Natterer  <mitch@gimp.org>
+
+	* glib/gdir.c: g_dir_open: added g_return_val_if_fail() to prevent
+	us from calling opendir(NULL) (which simply crashes).
+
+2002-02-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gfileutils.c (g_file_test): Extended documentation.
+
+2002-02-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gfileutils.c (g_file_test): Do not follow symbolic links
+	for G_FILE_TEST_SYMLINK. Also fixed the correct "OR"-behaviour for
+	G_FILE_TEST_IS_EXECUTABLE and G_FILE_TEST_EXISTS. (#60048)
+
+2002-02-07  Changwoo Ryu  <cwryu@debian.org>
+
+	* configure.in (ALL_LINGUAS): Added "ko".
+
+Wed Feb  6 14:44:18 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_main_context_prepare): Handle 
+	NULL entries (already dispatched) in pending_dispatches array 
+	(pointed out by Manish Singh)
+
+Tue Feb  5 17:13:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_main_context_prepare): Unref pending
+	dispatches when discarding them.
+
+2002-02-04  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gthread.c (g_thread_create_full): Delay allocation until
+	after all g_return_val_if_fail ().
+
+	* glib/gthread.h: Make depth member guint for cosmetic reasons.
+
+	* glib/gthread.c: (g_static_rec_mutex_unlock_full): depth should
+	be unsigned. All that spotted by Jörgen Viksell
+	<jorgen.viksell@telia.com>
+
+2002-02-02  Manish Singh  <yosh@gimp.org>
+
+	* glib/gmain.c
+	* glib/gtree.c: remove references to deprecated functions in docs
+	and warning message.
+
+2002-01-31  jacob berkman  <jacob@ximian.com>
+
+	* glib-gettextize.in:
+	* m4macros/glib-gettext.m4 (AM_GLIB_GNU_GETTEXT): remove
+	references to po2tbl
+
+2002-01-29  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gmarkup.c (g_markup_parse_context_parse): Change the
+	order in which some error conditions are checked to improve
+	error messages. (#69646)
+
+Tue Jan 29 15:04:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* 1.3.13
+
+	* tests/shell-test.c: Workaround for MSVC bugs.	(#61064)
+
+Tue Jan 29 14:06:22 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* NEWS: Update to include last change. 
+
+2002-01-21  Jeffrey Stedfast  <fejj@ximian.com>
+
+	* glib/gconvert.c (open_converter): Rewritten to cache iconv
+	conversion descriptors. On at least some Unix systems like
+	Solaris, iconv_open() must dlopen the necessary charset modules in
+	order to setup the descriptor. This can take a major toll on
+	performace if you are constantly opening and closing conversion
+	descriptors for the same charset conversions over and over.
+	(g_convert_with_fallback): Use close_converter() rather than
+	g_iconv_close() since open_converter() now caches iconv
+	descriptors.
+
+Tue Jan 29 11:18:44 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* NEWS: Updated.
+
+	* configure.in: Micro == 13, binary age, interface age 0.
+	[ binary breakage was return type of g_signal_connect_object(),
+	probably could have used binary age == 0, but a little safer not to.]
+
+	* configure.in: Remove configure warning.
+
+2002-01-28  Havoc Pennington  <hp@pobox.com>
+
+	* glib/gmarkup.c (add_attribute): NULL-terminate
+	context->attr_values so g_strfreev() is safe. 
+	Would previously crash if parsing was ended prior 
+	to ending the start tag.
+	(g_markup_parse_context_parse): add a couple assertions
+
+2002-01-28  Havoc Pennington  <hp@redhat.com>
+
+	* glib/gmacros.h: get rid of warning here
+
+Mon Jan 28 17:56:10 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmacros.h: Only use __FUNCTION__, __PRETTY_FUNCTION__ for
+	G_GNUC_FUNCTION, G_GNUC_PRETTY_FUNCTION, G_STRLOC when __GNUC__ <
+	3, since in 3.0.3 the semantics of these functions were changed in
+	an incompatible way. (#69097)
+
+2002-01-28  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: Some documentation fixes/elaborations
+	I really should have gotten in a long time ago
+
+2002-01-24  Sven Neumann  <sven@gimp.org>
+
+	* glib/gutf8.c (g_utf8_to_utf16): removed an empty line in the
+	inline documentation that confused gtk-doc.
+
+2002-01-23  Laszlo Peter  <laca@ireland.sun.com>
+
+	* glib/gmessages.c (g_printf_string_upper_bound): return 1 more
+	for the trailing '\0' when using vsnprintf. (#69474)
+
+2002-01-23  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gconvert.c: (strdup_len): Not used on Windows, don't even
+	compile it then.
+
+	(acceptable): Improve comments for the _acceptable_ table: put
+	each ASCII char above the hex number for it.
+
+	(g_escape_file_uri): On Windows, turn backslashes in the file name
+	into plain ("forward") slashes.
+
+	(g_filename_from_uri): On Windows, don't return the hostname
+	"localhost", because we can not be 100% sure it will be recognized
+	in all cases anyway, so simpler to turn it into a null
+	hostname. 
+
+	Change slashes in the filename into backslashes, as that is the
+	more canonical separator.
+
+	Recognize drive letters (either followed by a colon or a vertical
+	bar, as used by some browsers), and if the filename part starts
+	with a such, don't include any (back)slash.
+
+	Don't drop any extra leading slash in the filename on Unix.
+
+	(g_filename_to_uri): On Windows, if the hostname is "localhost",
+	don't use it, for consistency with g_filename_from_uri().
+	
+	* tests/uri-test.c: Change accordingly, so that all tests pass on
+	Windows. Unix, too, I hope, though I couldn't check that now.
+
+	(main): Unset the G_BROKEN_FILENAMES environment variable on Unix,
+	as some tests require that filenames are in UTF-8. Is unsetenv()
+	portable?
+
+	These changes should fix bugs #59387, #59652, #59657 and #59658.
+	
+2002-01-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Get the right multithread option for GCC 3.0 and
+	later on AIX. (#67583)
+
+2002-01-21  Jeffrey Stedfast  <fejj@ximian.com>
+
+	* glib/gconvert.c (g_convert_with_fallback): If g_convert fails,
+	set bytes_written to 0 and close the iconv descriptor that was
+	opened a few lines above. On a successful return, calculate
+	bytes_written to be outp - dest instead of outp - str.
+
+2002-01-16  Sven Neumann  <sven@gimp.org>
+
+	* acinclude.m4
+	* m4macros/glib-gettext.m4: removed the --disable-nls option. You
+	can't disable Native Language Support since we rely on it.
+
+	* configure.in: nicer --help output.
+
+Tue Jan  8 11:33:28 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* docs/Makefile.am (EXTRA_DIST): Add text files to EXTRA_DIST.
+	(#68239, Matthias Clasen)
+
+2002-01-07  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* configure.in (ALL_LINGUAS): Added pl.
+
+2002-01-05  Hans Breuer  <hans@breuer.org>
+
+	* glibconfig.h.win32.in 
+	  msvc_recommended_pragmas.h (new file) : moved warning to
+	error pragmas to their own file to not force 'good practice'
+	programming in downstream libs and apps. Instead the new header
+	will be used by -FImsvc_recommended_pragmas.h in gnome/cvs
+	makefile.msc
+	* */makefile.msc.in : use -FImsvc_recommended_pragmas.h
+
+	* makefile.am : add msvc_recommended_pragmas.h to EXTRA_DIST
+
+2001-12-31  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_get_any_init): (Win32) Use longer buffer for
+	user name.
+
+Sat Dec 29 15:07:21 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gspawn.c (script_execute): Copy trailing NULL
+	into new ARGV array. (#67673)
+
+2001-12-28  Sven Neumann  <sven@gimp.org>
+
+	* glib/gmessages.c: only include printf_string_upper_bound() if
+	HAVE_C99_VSNPRINTF is not defined.
+
+2001-12-27  Duarte Loreto <happyguy_pt@hotmail.com>
+
+        * configure.in: Added portuguese to ALL_LINGUAS
+
+Sat Dec 22 12:08:56 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: 1.3.12, binary, interface age 0.
+
+	* NEWS: Updated.
+
+2001-12-21  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Add (undefined) HAVE_C99_VSNPRINTF.
+
+	* glibconfig.h.win32.in: Add definition of G_HAVE_GROWING_STACK.
+
+	* tests/Makefile.am: Rename the progs_LDADD, thread_LDADD and
+	module_LDADD Make macros to progs_ldadd, thread_ldadd and
+	module_ldadd. Newer automakes reserve macros named *_LDADD for
+	the use as LDADDs for targets it knows.
+
+	* glib/giowin32.c: (struct _GIOWin32Watch): 'callback' wasn't used
+	here, either.
+
+2001-12-21  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gfileutils.c (g_file_get_contents): Remove FIXME. (#67063)
+
+2001-12-19  Mark McLoughlin  <mark@skynet.ie>
+
+	* glib/gscanner.c: (g_scanner_unexp_token): fix segfaults.
+
+2001-12-20  Michael Meeks  <michael@ximian.com>
+
+	* glib/giounix.c (struct _GIOUnixWatch): kill 'callback'
+
+Wed Dec 19 23:09:07 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gconvert.c (g_iconv_open): SGML doc fix.
+
+Tue Dec 18 21:11:10 2001  Tim Janik  <timj@gtk.org>
+
+	* configure.in: add configure check to determine G_HAVE_GROWING_STACK.
+
+2001-12-16  Havoc Pennington  <hp@pobox.com>
+
+	* glib/gfileutils.c (get_contents_regfile): use g_try_malloc and
+	return error on not-enough-memory
+	(get_contents_stdio): ditto
+
+2001-12-17  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gspawn.c, glib/gspawn-win32.c: Use <envar>, not <envvar>.
+
+2001-12-15  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gshell.c, glib/gspawn.c, glib/gspawn-win32.c, glib/gerror.c,
+	glib/gfileutils.c, glib/ghash.c, glib/gmain.c, glib/gasyncqueue.c,
+	glib/gtree.c: Minor markup fixes.
+
+2001-12-14  Havoc Pennington  <hp@pobox.com>
+
+	* glib/gshell.c (g_shell_parse_argv): note on how to free returned
+	vector
+
+2001-12-08  Havoc Pennington  <hp@pobox.com>
+
+	* glib/gspawn.c (fork_exec_with_pipes): include argv[0] in error
+	message about failure to exec
+
+2001-12-13  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gconvert.c, glib/giochannel.c, glib/gmain.c,
+	glib/gwin32.c: Revert mistaken change: it is UNIX, not Unix.
+
+Thu Dec 13 05:37:51 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gbsearcharray.[hc]: API revamp to shorten GValueArray
+	structure.
+
+2001-12-12  Matthias Clasen  <matthiasc@poet.de>
+
+	This fixes #60543:
+
+	* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
+
+	* tests/strfunc-test.c: Add some tests for g_snprintf().
+
+2001-12-12  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gconvert.c, glib/grand.c, glib/ghash.c,
+	glib/gthreadpool.c, glib/gtree.c: Documentation fixes.
+
+Mon Dec 10 14:08:39 2001  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+	* glib/libcharset/config.charset (os):
+	add ISO8859-3 for Solaris. (#66174)
+	
+2001-12-10  Sven Neumann  <sven@gimp.org>
+
+	* gobject/gvalue.c (g_value_register_transform_func): perform an exact
+	match on the two types instead of using transform_func_lookup().
+
+2001-12-09  Christopher Blizzard  <blizzard@redhat.com>
+
+	* glib/gmessages.h: Add pragma that will prevent warnings when you
+	are not using -std=99 and newer gcc compilers.  Patch from Red
+	Hat's gtk+ 1.2 rpm.
+
+2001-12-06  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gmacros.h: Do the same for "pure".
+
+2001-12-06  Matthias Clasen  <matthiasc@poet.de>
+
+	The following patch corrects some function attributes. (#61780)
+
+	* glib/ghash.h (g_int_equal, g_int_hash): These are not const.
+
+	* glib/glibintl.h (_glib_gettext): Add G_GNUC_FORMAT(1).
+
+	* glib/gmacros.h: Use reserved symbols in function attribute macros.
+
+2001-12-06  Matthias Clasen  <matthiasc@poet.de>
+
+	The following patch avoids manual printf()-format parsing 
+	if a C99-conforming vsnprintf() is available. (#55106)
+
+	* acinclude.m4 (AC_FUNC_VSNPRINTF_C99): New macro to test for a
+	C99 conforming vsnprintf.
+
+	* configure.in: Use AC_FUNC_VSNPRINTF_C99. 
+
+	* glib/gmessages.c (g_printf_string_upper_bound): Use C99 vsnprintf().
+	
+2001-12-05  Sven Neumann  <sven@gimp.org>
+
+	* glib/gtree.c (g_tree_foreach): mention the fact that the tree is
+	traversed in sorted order.
+
+2001-12-03  Manish Singh  <yosh@gimp.org>
+
+	* tests/module-test.c: g_module_symbol takes a gpointer *, not just
+	a gpointer
+
+	* tests/libmoduletestplugin_a.c: here too
+
+2001-11-29  Havoc Pennington  <hp@redhat.com>
+
+	* glib/gtree.c (g_tree_foreach):
+	* glib/ghash.c (g_hash_table_foreach): 
+
+	Add notes about how you shouldn't modify these data structures as
+	you iterate over them.
+	
+Thu Nov 29 11:16:03 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* HACKING: Update (#65721, Dave Neary)
+
+2001-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gdate.c: Fixed wrong order in conversion.
+
+Wed Nov 28 18:34:22 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.[ch]: Rename (private) GSource.id and 
+	id parameter to g_main_context_find_source_by_id()
+	to avoid problems with Objective C where 'id' is 
+	a keyword. (#65616)
+
+2001-11-28  Daniel Elstner  <daniel.elstner@gmx.net>
+
+	* glib/gutf8.c (utf8_skip_data): In order to avoid infinite loops
+	on invalid UTF-8 strings, change the skip count for 0xfe and 0xff
+	from 0 to 1.
+
+2001-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Always call GLIB_SIZEOF(..., system_thread). Fixes
+	#65624.
+
+2001-11-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Add GLIB_SIZEOF_SIZE_T here, too.
+
+2001-11-27  Dan Winship  <danw@ximian.com>
+
+	* configure.in (G_MODULE_LDFLAGS): Set this from libtool rather
+	than hardcoding values for certain platforms.
+
+	* glib/libcharset/config.charset: Add a rule for NetBSD.
+
+	* glib/libcharset/localcharset.c (_g_locale_get_charset_aliases):
+	If LIBCHARSET_ALIAS_DIR is set, look for charset.aliases there.
+
+	* tests/Makefile.am (TESTS_ENVIRONMENT): set LIBCHARSET_ALIAS_DIR
+	so we don't depend on charset.aliases having been installed
+
+2001-11-26  Matthias Clasen  <matthiasc@poet.de>
+	
+	* glib/gnode.c (g_node_traverse): Implement G_LEVEL_ORDER correctly.
+
+	* tests/node-test.c: Add a testcase for G_LEVEL_ORDER implementation.
+
+	* glib/gtree.h: Mark g_tree_traverse() as deprecated. (#65343)
+	
+	* glib/gtree.c (g_tree_traverse): Explain the deprecation in 
+	some detail.
+
+Mon Nov 26 09:42:24 2001  Tim Janik  <timj@gtk.org>
+
+	* configure.in: provide GLIB_SIZEOF_SIZE_T.
+
+2001-11-26  Jesus Bravo Alvarez  <jba@pobox.com>
+
+	* configure.in: Added gl (Galician) to ALL_LINGUAS
+
+2001-11-23  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : added -Zm400 to DEPCFLAGS to avoid :
+	gunidecomp.h(5846) : fatal error C1076: compiler limit : 
+	internal heap limit reached; use /Zm to specify a higher limit
+
+	* glibconfig.h.win32.in : added recommended pragma list for
+	msvc again. They are an invaluable help of letting the
+	compiler catch bugs.
+
+Thu Nov 22 13:56:55 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Version 1.3.11
+
+Thu Nov 22 13:14:18 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in (GLIB_MICRO_VERSION): Version 11, 
+	interface, binary age 0.
+
+	* NEWS: Updated.
+
+ 	* tests/Makefile.am (libmoduletestplugin_[ab]_la_LDFLAGS): 
+ 	Add dummy -rpath argument. On some (but not all) platforms,
+ 	libtool will only build a convenience library without this.
+ 	(#63486, Dan Winship)
+ 
+	* Makefile.am (EXTRA_DIST): Add README.in, INSTALL.in - 
+	autoconf-2.5x checks for 'make dist' in the tarball
+	when you make distcheck.
+
+	* glib/Makefile.am (EXTRA_DIST): Distribute 
+	makefile.msc/mingw.in, glib.rc.in.
+
+	* tests/patterntest.c: Include string.h.
+
+	* glib/gpattern.c (g_utf8_reverse): doc parsing fix.
+
+Thu Nov 22 02:50:18 2001  Tim Janik  <timj@gtk.org>
+
+	* NEWS: merged with gobject/NEWS.
+
+2001-11-21  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/makefile.mingw.in (DEFINES): Set G_LOG_DOMAIN as in
+	Makefile.am.
+
+Tue Nov 20 20:54:25 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gunidecomp.[ch] glib/gen-unicode-tables.pl: Patch
+	from Andrew Taylor to optimize the decomposition table
+	to eliminate relocations and save space. (#64982)
+
+2001-11-18  Hans Breuer  <hans@breuer.org>
+
+	* glib/glib.def : 
+	* glib/makefile.msc.in : remove g_log_domain_glib usage/export
+
+	* tests/makefile.msc.in : add iochannel-test
+
+Sat Nov 17 17:21:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am glib/*.c glib/gmessages.h: Get
+	rid of g_log_domain_glib variable in favor of just
+	using a string constant.
+
+Sat Nov 17 14:10:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gbsearcharray.h: Include gtypes.h not gobject/gtype.h
+
+	* glib/glib-object.h gobject/*.h: Prevent headers from
+	being included directly except when compiling GObject.
+
+	* gobject/gvaluecollector.h: Include glib-object.h so that
+	this file can be included directly, since we don't
+	include it _from_ glib-object.h.
+
+	* gobject/gtype.c: Remove struct _GValue hack since we 
+	now include glib/gvaluecollector.h which simply pulls in
+	glib-object.h.
+
+2001-11-15  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/giochannel.c: Documentation fixes.
+ 
+2001-11-15  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* configure.in: Added "ja" to ALL_LINGUAS.
+
+2001-11-15  Michael Meeks  <michael@ximian.com>
+
+	* glib/giounix.c (g_io_channel_unix_new): set the fd
+	before using it.
+
+2001-11-15  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/makefile.{mingw,msc}.in (TESTS): Add back mainloop-test
+	here, too.
+
+	* tests/Makefile.am: Remove leftover comment that claimed
+	mainloop-test is removed.
+
+2001-11-14  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gpattern.c: add UTF-8 support.
+
+	* tests/patterntest.c: add UTF-8 and equality tests.
+
+Wed Nov 14 07:34:24 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/galloca.h (g_newa): provide g_newa(ctype, count) on top of
+	g_alloca() like we provide g_new() on top of g_malloc().
+
+Tue Nov 13 21:25:35 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/{gen-unicode-tables.pl,gunibreak.c,gunibreak.h,
+	gunichartables.h, gunicomp.h, gunidecomp.[ch], 
+	guniprop.c}: Patch from Andrew Taylor to improve
+	tables and reduce relocations by using indices 
+	rather than pointers. (#64433)
+	
+	* tests/unicode-normalize.c (main): Fix for changes
+	to g_strsplit().
+
+2001-11-12  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gstrfuncs.c: (g_strsplit): Fix max_tokens == 1 case to
+	match documentation.
+	* tests/strfunc-test.c: (main): Add tests.
+
+	* tests/.cvsignore: Recently-added test.
+
+Mon Nov 12 03:01:28 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gscanner.c (g_scanner_eof): G_TOKEN_ERROR is also an end
+	of stream condition.
+
+2001-11-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glib-zip.in (DEVZIP): Also share/glib-2.0.
+
+2001-11-09  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c (g_win32_getlocale): Add a couple of languages
+	that have LANG_* codes in newest headers, just for completeness.
+
+2001-11-08  Wang Jian  <lark@linux.net.cn>
+
+	* configure.in(ALL_LINGUAS): Added zh_CN for Simplified Chinese.
+
+2001-11-08  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c: Don't define LANG_AZERI etc in case those aren't
+	defined in the headers (MSVC 5.0).
+	(g_win32_getlocale): Instead, surround uses of those with
+	#ifdef. Those MSVC 5.0 users that want to build a GLib that
+	recognizes those languages should download the Platform SDK and
+	use the headers from it.
+
+2001-11-07  Peter Williams  <peterw@ximian.com>
+
+	* glib/gdir.c (g_dir_read_name): Return NULL when done reading.
+
+2001-11-06  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/Makefile.am (gspawn_win32_helper_LDFLAGS): Use -mwindows.
+
+2001-11-05  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Minor edits.
+
+	* glib-zip.in: Build separate runtime and developer packages.
+
+	* glib/libcharset/config.charset (os): Don't need to match mingw
+	after all, the charset.alias file isn't even used on Win32... (see
+	localcharset.c).
+
+	* glib/makefile.mingw.in: Add gdir.
+
+	* glib/glib.def: Add g_dir_* entry points.
+
+Sun Nov  4 20:45:21 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in (CFLAGS): Add check for dirent.h
+
+	* glib/glib.h glib/Makefile.am: Add gdir.
+
+	* glib/gdir.c (g_dir_close): Couple of small tweaks
+	now that it is actually compiling...
+
+Sun Nov  4 20:29:31 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gdir.[ch]: Indentation fixes, some rewriting of docs to
+	conform to gtk-doc standard.
+
+	* glib/gdir.[ch] (g_dir_close): Remove the boolean 
+	return value. What would you do if closing failed?
+	What would the user do if you printed a warning
+	message "closing directory %s failed"?
+
+2001-11-04  Hans Breuer  <hans@breuer.org>
+
+	* glib/gdir.[hc] : (new files) simplified wrapper around dirent 
+	functions to improve portability of downstream libs/apps
+	* glib/makefile.msc.in : use them
+	* glib/glib.def : export them
+	* config.h.win32.in : needing HAVE_DIRENT_H defined
+
+2001-11-04  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/Makefile.am: On Win32, create separate .exp file for
+	module-test.o and link with that. Otherwise the GNU linker doesn't
+	export the g_clash_func.
+
+2001-11-03  Hans Breuer  <hans@breuer.org>
+
+	* glib/giowin32.c : static correctness
+
+	* glib/gwin32.c : some more #if defined (SUBLANG_* ...
+	(g_win32_get_package_installation_subdirectory) use g_build_filename
+	instead of duplicating its logic
+
+	* glib/glib.def : removed duplicates, added mising, removed
+	compat cruft
+
+Fri Nov  2 19:54:16 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gbacktrace.h (G_BREAKPOINT): remove public signal.h include.
+
+Thu Nov  1 21:48:43 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/mainloop-test.c (recurser_idle): Recurse
+	with may_block = FALSE, so we don't get into
+	the pathology where the recurser_idle recurses
+	for 10 iterations, and the only thing that is
+	running is the recurser idle, which adds
+	another recursion for each of those 10 iterations
+	and....
+
+	* tests/mainloop-test.c (create_crawler): Fix race
+	condition where a crawler source could be destroyed
+	before it was added to the crawler array.
+
+	* test/Makefile.am: Add mainloop-test back.
+	
+2001-11-01  Marius Andreiana  <mandreiana@yahoo.com>
+
+	* configure.in: Added ro (Romanian) to ALL_LINGUAS
+
+2001-10-31  Havoc Pennington  <hp@redhat.com>
+
+	* glib/gmain.c (g_main_loop_run): fix to the locking so we don't
+	hang
+
+2001-10-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Make --with-threads=none mean, that we want thread
+	support, but no default thread implementation. This also was the
+	original intention, but disapeared around 1998... So it doesn't
+	seem to be the most requested feature, but we went far to make it
+	possible in the code, so I resurrected this feature.
+
+	* INSTALL.in: Describe the --enable-gc-friendly, --disable-threads
+	and --with-threads options of configure.
+
+	* glib/gmain.c (g_main_context_acquire, g_main_context_release,
+	g_main_context_wait): Use the right conditional (G_THREADS_ENABLED
+	instead of G_THREAD_ENABLED). Also remove wrong
+	return-statement. Unfortunately mainloop-test still does fail. Many
+	thanks to Andrea Fazekas <fazek@ludens.elte.hu> for spotting
+	this. (#63455)
+
+2001-10-31  Matthias Clasen  <matthiasc@poet.de>
+
+	* gobject/gsourceclosure.c (g_source_set_closure): Fix documentation.
+
+2001-10-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib-zip.in: New file, used to build distribution packages for
+	Windows.
+
+	* configure.in: Expand it.
+
+	* Makefile.am: Distribute it.
+
+	* config.h.win32.in: Update to match currently produced config.h
+
+2001-10-29  Daniel Egger  <degger@fhm.edu>
+
+	* glib/gbacktrace.h: Fix non-Intel/-Alpha version of the 
+	G_BREAKPOINT macro to include <signal.h> and use SIGTRAP.
+
+	* glib/gmessages.c: Conditionalise definition of args2
+	depending on the definition of HAVE_VSNPRINTF to avoid 
+	compiler warning.
+
+	* gobject/testgruntime.c
+	* tests/patterntest.c: Include <string.h> to avoid warnings.
+
+Mon Oct 29 11:29:37 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-2.0.m4: Don't try to use PKG_CONFIG
+	when we didn't find it. (#62944, Eric Lemings)
+
+	* m4macros/glib-2.0.m4: Fix problem with spaces around =
+	sign in assignment. (#63209, Arkadiusz Miskiewicz)
+
+Mon Oct 29 10:59:36 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Check for path to Perl, add gobject/glib-mkenums 
+	to AC_OUTPUT. (#63093, Dan Winship)
+
+Mon Oct 29 10:55:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/libcharset/Makefile.am (EXTRA_DIST): Dist
+	ref-add.sin, ref-del.sin. (#63092, Dan Winship)
+
+2001-10-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gmain.c (g_main_loop_quit): Conditionalize thread related
+	calls. (#63091)
+
+2001-10-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add missing g_pattern_match_simple and
+	g_pattern_spec_equal.
+
+	* glib/gwin32.c (g_win32_get_package_installation_subdirectory):
+	Set separator correctly.
+
+	* glib/libcharset/config.charset (os): Match also mingw*.
+
+	* tests/testglib.c (main): (Wibn32): Print the lib/locale
+	subdirectory, as that is what actually gets used.
+
+Wed Oct 24 11:10:54 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Version 1.3.10, interface age, binary age = 0.
+
+	* NEWS: Updates
+
+2001-10-26  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Don't default to win32 thread implementation on
+	Cygwin. The gthread-win32 implementation really is for Win32 with
+	MS runtime only. Let configure find pthreads when configuring for
+	Cygwin.
+
+	* README.win32: Updates.
+
+	* glib/glib.def: Update.
+
+	* tests/makefile.mingw.in
+	* tests/makefile.msc.in: Remove mainloop-test here, too.  Add ../*
+	to PATH before running tests to find DLLs. Separate the
+	interactive tests, don't run them in the check target.
+
+	* */makefile.msc.in: Include make.msc from GLib's build directory.
+
+Thu Oct 25 12:01:41 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/Makefile.am: Temporarily remove mainloop-test, since it
+	prevents distcheck.
+
+2001-10-24  Alex Larsson  <alexl@redhat.com>
+
+	* docs/reference/glib/glib-sections.txt:
+	Add g_strtod & co.
+
+	* docs/reference/glib/tmpl/string_utils.sgml:
+	Add docs for G_ASCII_DTOSTR_BUF_SIZE.
+
+	* glib/gstrfuncs.[ch]:
+	Added g_ascii_strtod, g_ascii_dtostr and g_ascii_formatd.
+
+	* tests/Makefile.am:
+	* tests/strtod-test.c:
+	Add tests for g_ascii_strtod & co.
+
+2001-10-23  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Typo: GLIB_MICRO_VERSION and
+	GLIB_MINOR_VERSION were swapped.
+
+	* glib/gutils.h: Remove G_HARDCODED_PATH_WRAPPER, Owen didn't like
+ 	it.
+	
+	* glib/gutils.c: Instead, expand it on Win32 as
+ 	_glib_get_locale_dir(), and #define GLIB_LOCALE_DIR as a call to
+ 	it.
+
+2001-10-23  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Typo.
+
+	* glibconfig.h.win32.in: Minor update to correspond to what
+	configure now generates.
+
+	* glib/Makefile.am: (Win32): If we have built the MSVC import
+	library, install it. Install the gcc import library. Also support
+	uninstall.
+
+	* glib/gutils.h: Add macros G_WIN32_DLLMAIN_FOR_DLL_NAME and
+	G_HARDCODED_PATH_WRAPPER. These are used to avoid hardcoding path
+	names into Windows DLLs.
+
+	* glib/gutils.c: Use them for GLIB_LOCALE_DIR.
+
+	* glib/gwin32.c (get_package_directory_from_module): Plug a small
+	memory leak. Minor code reordering.
+	(g_win32_get_package_installation_subdirectory):  Allow empty subdir.
+
+2001-10-19  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Fix test for lib.exe. Can't set ms_librarian
+	before calling AC_CHECK_PROG, as it doesn't actually check
+	anything if the result variable has been preset...
+
+2001-10-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gutils.c (g_set_prgname, g_get_prgname): Use another LOCK
+	for g_prgname to avoid deadlocking. (#62606)
+
+2001-10-19  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Check also ac_cv_sizeof___int64 when requiring a
+	64-bit type.
+
+2001-10-17  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+	* glib/gconvert.c (g_iconv_open):
+	Fix a typo: to_codeset => from_codeset.
+	(#58195, #55152)
+
+Fri Oct 12 18:24:02 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gpattern.[hc]: make struct _GPatternSpec and GMatchType
+	private.
+	(g_pattern_equal): new function to return equality of two patterns
+	(required because GPatternSpec is private now).
+	(g_pattern_spec_new): fix bug wrg wildcard counting which produced
+	incorrect pattern specs (discovered by Matthias Clasen).
+	optimized code so we just keep one compiled pattern string now.
+	correctly canonicalize patterns. reduce string walks, optimize
+	decision about MATCH_ALL vs. MATCH_ALL_TAIL.
+	(g_pattern_match_string): call just g_pattern_match() with NULL
+	reversed string.
+	(g_pattern_match): allow NULL reversed strings now, reverse_dup
+	strings on demand.
+
+	* tests/patterntest.c (test_compilation): added an extended testcase
+	for pattern matching from Matthias Clasen <matthiasc@poet.de>.
+
+2001-10-11  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* configure.in (ac_cv_sizeof_long_long): Avoid '==' and '-a' in
+	'test's.
+
+Wed Oct 10 20:07:36 2001  Joshua N Pritikin  <vishnu@pobox.com>
+
+	* glib/gmessages.c glib/gtypes.h: Remove G_HAVE_GINT64
+	conditionalization.
+
+Wed Oct 10 17:34:15 2001  Joshua N Pritikin  <vishnu@pobox.com>
+
+	* configure.in: Un-conditionalize and require a 64-bit integer
+	type.
+
+2001-10-04  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* configure.in: Avoid 'test -a'.
+
+2001-10-05  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gwin32.c: Documentation update.
+
+2001-10-04  Havoc Pennington  <hp@redhat.com>
+
+	* glib/libcharset/Makefile.am (EXTRA_DIST): add config.charset
+
+2001-10-03  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (Win32) (DllMain): New function (DLL entry point)
+	to tuck away actual DLL name.
+	(GLIB_LOCALE_DIR) Use actual DLL name, instead of assuming one
+	naming convention for DLLs.
+
+	* glib/glib.def: g_string_append_printf.
+
+2001-10-02  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gstrfuncs.c, glib/giochannel.c: documentation update.
+
+	* glib/gqueue.c: add documentation.
+
+2001-10-02  Sven Neumann  <sven@gimp.org>
+
+	* glib/gstring.h (g_string_sprintfa): let the compatibility definition
+	point to the new name g_string_append_printf().
+
+2001-10-01  Alex Larsson  <alexl@redhat.com>
+
+	* glib/gconvert.[ch]:
+	Convert G_CONVERT_ERROR_NOT_ABSOLUTE_FILE_URI and
+	G_CONVERT_ERROR_INVALID_URI to G_CONVERT_ERROR_BAD_URI.
+
+	* tests/uri-test.c:
+	Update tests
+
+Mon Oct  1 16:01:24 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstring.[ch] glib/grel.c: Rename g_string_printfa()
+	to g_string_append_printf(). (#61041, Havoc Pennington.)
+
+2001-10-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c: Documentation cleanups. (#61487)
+
+2001-10-01  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gscanner.h (GScannerMsgFunc): make third argument
+	a gboolean.
+	(g_scanner_add_symbol, g_scanner_remove_symbol, 
+	g_scanner_foreach_symbol): mark these 
+	G_DISABLE_DEPRECATED. (#61469)
+
+	* glib/gscanner.c (g_scanner_msg_handler): make third 
+	argument gboolean. (#61468)
+
+2001-10-01  Sven Neumann  <sven@gimp.org>
+
+	* glib/gconvert.c
+	* glib/gspawn-win32.c
+	* glib/gspawn.c: some minor documentation fixes.
+
+2001-09-29  Alexander Larsson  <alla@lysator.liu.se>
+
+	* configure.in:
+	Add build/win32/dirent/Makefile to the list of makefiles
+
+2001-09-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c
+	* glib/gwin32.h
+	* glib/glib.def: Remove own implementation of dirent
+	functions. Instead, gcc (mingw) users should go ahead and use the
+	<dirent.h> included with the mingw gcc, and the dirent functions
+	included in libmingw32, while MSVC users can use the same (public
+	domain) code, extracted from mingw-runtime sources and placed in
+	build/win32/dirent.[ch].
+
+	* glib/gwin32.c (get_package_directory_from_module,
+	g_win32_get_package_installation_directory): Use static lock to
+	protect static hash table.
+
+Sat Sep 29 02:33:14 2001  George Lebl <jirka@5z.com>
+
+	* tests/testglib.c (main): cast the string size to gulong and use %lu
+	  for printing to avoid 64bit issues
+
+	* glib/gstrfuncs.[ch] (g_ascii_strncasecmp): Change the 'n' argument 
+	  to gsize instead guint.
+
+Fri Sep 28 19:41:32 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/libcharset/* configure.in: Fix macros from libcharset
+	to work with autoconf-2.5x. (From Laszlo Peter.)
+
+2001-09-27  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gstring.c: Fix inline docs for g_string_prepend_unichar.
+
+2001-09-29  Abel Cheung  <maddog@linux.org.hk>
+
+	* configure.in: Add quotes around test values. This fixes a minor
+	  annoying warning if platform is not win32.
+
+2001-09-27  Manish Singh  <yosh@gimp.org>
+
+	* glib/grand.c (g_rand_new): fix typo (#if->#ifdef) so it compiles
+	again.
+
+2001-09-24  Bruno Haible  <haible@clisp.cons.org>
+
+	* glib/gwin32.c (g_win32_getlocale): When the sublangid is
+	SUBLANG_DEFAULT, return the locale of the language's main country,
+	not a country-neutral locale. E.g. "en_US" instead of "en". Add
+	handling of LANG_SORBIAN. Fix typo for SUBLANG_CHINESE_SIMPLIFIED
+	(China == CN, CH == Switzerland). Ignore empty environment
+	variable values.
+
+2001-09-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/makefile.{mingw,msc}.in: Add localcharset.o. Just copy the
+	source file from libcharset and compile in this directory.
+
+	* glib/giochannel.c: Mark rest of g_set_error strings for
+	translation, too.
+
+	* glib/giowin32.c: Add some debugging output functions, call them
+	when debugging.
+	(create_events, g_io_win32_msg_write): Free message fetched with
+	g_win32_error_message ().
+	(g_io_win32_check): Indentation fixes.
+	(g_io_win32_fd_read,g_io_win32_sock_read): Don't always return
+	G_IO_STATUS_NORMAL. Do return G_IO_STATUS_EOF if we got 0 bytes,
+	like on Unix. This helps making the test programs run
+	successfully.
+
+	* glib/gmain.c (g_poll): Return the code ifdeffed out with
+	TEST_WITHOUT_THIS. Can't remember why it was ifdeffed out. Things
+	seem to work as previously with the code in place. Especially
+	spawn-test didn't work with the code ifdeffed out (Bug#61067).
+
+	* glib/grand.c (g_rand_new): Don't try to use /dev/urandom unless
+	on Unix.
+
+	* glib/gspawn-win32-helper.c (WinMain): Remove Sleep(10000)
+	accidentally left in.
+
+Thu Sep 27 14:26:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_ascii_strup/down): Use gssize to
+	match the header. (Reported by Elliot Lee.)
+
+Wed Sep 26 22:34:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+	Fixes for #58195, based on some ideas from Hidetosh Tajima.
+
+	* aclibcharset.m4 glib/libcharset: Add Bruno Haible's
+	portable-current charset detection code from libiconv.
+
+	* glib/gutf8.c (g_utf8_get_charset_internal): Rewrite
+	to use _g_locale_charset().
+
+	* glib/gutf8.c (_g_charset_get_aliases): Private functions
+	to get aliases from libcharset for a particular canonical
+	name.
+
+	* glib/gconvert.c: If loading a charset fails, try 
+	aliases to look for fallbacks.
+	
+2001-09-26  Matthias Clasen  <matthiasc@poet.de>
+
+	* gmem.c (g_mem_is_system_malloc): Return !vtable_set.
+
+2001-09-26  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Retract my change earlier today. Don't preset
+	autoconf variables in a try to match both mingw and MSVC. Instead,
+	he who packages a prebuilt GLib developer distribution for Win32
+	runs configure twice: once for mingw, once for MSVC, and then uses
+	diff -D on the glibconfig.h files to generate a suitably ifdeffed
+	glibconfig.h for distribution that suits both compilers. (Ditto
+	for config.h, although that file wouldn't be distributed in a
+	developer package, but in a source package for Win32 users who
+	want to build GLib but can't use configure.)
+
+	* glibconfig.h.win32.in
+	* config.h.win32.in: Generated by using diff -D as described above.
+
+	* tests/makefile.mingw.in (.c.exe): Correct name of gthread (import)
+	library.
+
+Wed Sep 26 15:33:37 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am po/Makefile.in.in: Fix distclean to 
+	remove some extra files. #60993, Ben Gertzfield
+
+Wed Sep 26 14:37:52 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gen-unicode-tables.pl glib/guniprop.c 
+	  glib/{gunibreak,gunichartables,gunidecomp}.h:
+	Patch from Andrew Taylor to make much of the unicode
+	table data const so that it can be made read-only
+	and shared.
+
+Wed Sep 26 12:41:05 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_strdup_vprintf): Copy if 
+	!g_mem_is_system_malloc, not the other way around.
+	(Found by James Antill.)
+
+Wed Sep 26 11:00:31 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_strnfill): Use memset; might be 
+	faster if someone used this for a biiig string.
+	(Suggestion from Jakub Jelinek)
+
+2001-09-26  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: (Win32:) Move the Win32 check closer to the start,
+	after the BeOS checks. Preset some autoconf variables so that
+	configure won't find those few headers and functions that gcc
+	(mingw) pretends to implement (even if the actual C library
+	doesn't), but MSVC doesn't. This because I want the same config.h
+	and glibconfig.h to be usable both from gcc and MSVC (as they use
+	the same C library). Some other minor hackery for this purpose.
+
+	* glibconfig.h.win32.in
+	* config.h.win32.in: Use versions generated by configure (and
+	hand-edited slightly).
+
+2001-09-25  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gtree.h: Use gboolean for return value of GTraverseFunc.
+
+Tue Sep 25 11:34:22 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Version 1.3.9 (binary, interface == 0)
+
+	* glib/gstrfuncs.c (g_ascii_strdown): Change g_ascii_strup/strdown
+	to take a 'len' argument to match g_utf8_strup/strdown. This
+	hopefully will also make it more obvious that they duplicate
+	the string rather than acting like g_strup/strdown.
+	(Suggestion from Matthias Clasen, #59550)
+
+2001-09-25  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: More Win32 automake macros. For .def files:
+	GLIB_DEF, GMODULE_DEF, GOBJECT_DEF and GTHREAD_DEF. For .exp
+	files: TESTGMODULE_EXP (for programs that need to export symbols,
+	just testgmodule here). A new conditional, MS_LIB_AVAILABLE to
+	test whether the Microsoft librarian ("ar") is available to build
+	MS import libraries.
+ 
+	* glib/Makefile.am
+	* gmodule/Makefile.am: Use above. New rule to build MS import
+	library.
+
+	* glib/makefile.msc.in
+	* tests/makefile.msc.in
+	* tests/makefile.mingw.in: Use same DLL and import library names as
+	libtool.
+
+2001-09-24  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gutf8.c, glib/gunibreak.c, glib/gunicollate.c,
+	glib/gunidecomp.c, glib/guniprop.c: Inline doc consistency fixes.
+
+2001-09-24  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* configure.in: Added "sk" to ALL_LINGUAS.
+
+2001-09-22  Hans Breuer  <hans@breuer.org>
+
+	* glib/giowin32.c : simply setting is_readable and is_writeable
+	to TRUE does make Gimp plug-ins work again. Still no API known
+	to request this info on Win32 (see #57690)
+
+2001-09-21  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc : added rule for glibconfig.h
+
+	* glib/giowin32.c (g_io_channel_new_file) : always open
+	in binary mode (fix for #57695)
+
+	* glib/glib.def : updated externals
+
+	* glib/gwin32.c : re-added LANG_* and SUBLANG_* definitions,
+	which are missing from the msvc 5.0 win32 sdk
+
+	* glib/makefile.msc.in : added gbsearcharry
+
+Thu Sep 20 20:33:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Rename g_mem_vtable_is_set() to g_mem_is_system_malloc().
+
+2001-09-20  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_path_is_absolute): (Win32:) Accept also forward
+	slashes. (But still don't accept them in the other functions
+	here. This is a thorny issue. Windows in fact does treat / like \
+	on input (at least as local directory separators, dunno about
+	server/share separators). But GLib only has the one
+	G_DIR_SEPARATOR value, that apps should scan for, and use when
+	building pathnames. To properly fix this would require totally
+	abstracting pathnames, and don't having any path name scanning and
+	building in applications at all. Fat chance.)
+	(GLIB_LOCALE_DIR): Redefine only on "pure" Win32, not Cygwin. Use
+	subdirectory "share\locale", as on Unix.
+
+	* glib/gwin32.c: Don't need to define those langiage and
+	sublanguage constants here, current mingw (w32api) headers have
+	them.
+
+	* glib/glib.def: Add a few missing entry points.
+
+	* tests/testglib.c (main): Use same name for DLL as libtool does.
+	Use G_DIR_SEPARATOR in g_path_get_basename tests.
+
+Wed Sep 19 16:35:22 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_main_context_find_source_by[_funcs]_user_data): 
+	Fix handling of user data when locating sources. 
+	(#60414, Katsuhiro Okuno)
+
+Wed Sep 19 14:17:31 2001  Owen Taylor  <otaylor@redhat.com>
+
+	Patch from Matthias Clasen (#59806)
+
+	* configure.in: Check for vasprintf().
+
+	* glib/gmem.[ch]: Add g_mem_vtable_is_set() to be used
+	for efficiency hacks to avoid extra copies when not
+	needed.
+
+	* glib/gstrfuncs.c: Use vasprintf() to implement
+	g_strdup_printf() when available.
+
+	* glib/gmessages.c (g_logv): Avoid using 
+	printf_string_upper_bound() when we have have vsnprintf.
+
+	* glib/gmessages.c (printf_string_upper_bound): Don't
+	segfault when warning about positional parameters.
+
+Wzed Sep 19 14:05:27 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/{gcache.c,gmem.c,grel.c,gstring.c,gtimer.c,gtree}:
+	Patch from Darin Adler to remove GReal* structures in
+	favor of simple opaque typedefs in cases where there
+	were no non-private members. (#59693)
+
+Wed Sep 19 13:03:38 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_read/write_chars): Handle NUL
+	bytes_written, bytes_read. (Suggested by Joshua N Pritikin, #59550)
+
+Wed Sep 19 12:49:11 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gutils.c (g_get_any_init): Handle failure of
+	sysconf and pick a fixed size buffer. (Happens on Cygwin
+	#60242)
+
+Wed Sep 19 11:23:41 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Error out if gettext support is not found. (#59386)
+
+2001-09-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gthread.h (GThreadFunctions): Add thread_equal function to
+	allow for platform defined function to compare two threads.
+
+	* glib/gthread.c: Use g_thread_functions_for_glib_use.thread_equal
+	when non-NULL instead of ==.
+	
+Wed Sep 19 10:44:25 2001  Tim Janik  <timj@gtk.org>
+
+	* Released 1.3.8.
+
+Tue Sep 18 22:57:33 2001  Tim Janik  <timj@gtk.org>
+
+	* configure.in (GLIB_MICRO_VERSION): up version number to 1.3.8,
+	interface age 0, binary age 0.
+
+	* NEWS: updates.
+
+Tue Sep 18 18:23:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+	Fixes for compilation on Solaris (#59026, Frank Belew)
+
+	* glib/gqsort.c (g_qsort_with_data): Use g_alloca().
+
+	* glib/giochannel.c (g_io_channel_read_to_end): Fix use
+	of ternary on left-hand-side.
+
+	* configure.in: Handle the ac_cv_working_alloca_h variable
+	set by autoconf-2.5x.
+
+Tue Sep 11 18:50:44 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4 acinclude.m4: Remove commented
+	out sections for clarity.
+
+Tue Sep 18 18:19:33 2001  Tim Janik  <timj@gtk.org>
+
+	* tests/testglib.c: add simple test for g_path_get_basename().
+
+	* glib/gfileutils.c (g_file_open_tmp): 
+	* glib/gstrfuncs.c (g_strerror): scratch erroneous usages
+	of "illegal".
+
+2001-09-18  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gmain.c
+	* glib/giowin32.c: Mark the _funcs tables for export.
+
+	* glib/glib.def: Add here, too.
+
+	* glib/gwin32.c (get_package_directory_from_module): No reason to
+	check for the module being in a bin or lib directory only when
+	module_name is non-NULL.
+
+	* glib/gwin32.c (g_win32_get_package_installation_directory):
+	Check first in HKEY_CURRENT_USER, then in HKEY_LOCAL_MACHINE.
+
+2001-09-17  Darin Adler  <darin@bentspoon.com>
+
+	* tests/strfunc-test.c: (main): Change so that it works
+	on platforms where isalpha is a macro only, without the
+	corresponding function that the C standard requires.
+	Also eliminate the multiple lists of ctype functions.
+
+	* tests/.cvsignore: Ignore the new test.
+
+2001-09-17  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Add variable for LT_CURRENT minus LT_AGE (the
+	suffix used by libtool on Win32 for DLLs). Set variables for the
+	compiled resource files on Windows. Handle the native Win32
+	threads gmodule.
+
+	* glib/Makefile.am
+	* gmodule/Makefile.am
+	* gobject/Makefile.am: (Win32) Add hacks to link in the object
+	file produced from the resource file. Use the lt-compile-resource
+	script from the build module. The non-hack way would be to teach
+	libtool, autoconf and automake about .rc files (which are a kind
+	of source code, after all, that gets compiled to object
+	files). But then there would be problems with those who don't have
+	bleeding edge auto* and libtool.
+
+	* glib/glib.def
+	* gobject/gobject.def: Updates.
+
+	* glib/glib.rc.in
+	* gmodule/gmodule.rc.in
+	* gobject/gobject.rc.in
+	* gthread/gthread.rc.in: Update InternalName and OriginalFilename to
+	match libtool's naming convention for DLLs.
+
+	* glib/gutils.c: Ditto when constructing the DLL name in the
+	definition for GLIB_LOCALE_DIR.
+
+	* glib/makefile.mingw.in
+	* gmodule/makefile.mingw.in
+	* gobject/makefile.mingw.in
+	* gthread/makefile.mingw.in: Update import library names.
+	
+Fri Sep 14 20:34:27 2001  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/gconvert.c (g_filename_from_uri): Replace `is contains'
+	by `contains' in two error messages. (#60395)
+
+2001-09-10  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.h glib/giochannel.c: Added a length argument
+	to g_io_channel_[set,get]_line_term(), allowing embeded nulls
+	and binary safe line termination strings
+
+	* glib/giochannel.c: Got rid of a compile warning in
+	g_io_channel_write_chars()
+
+Mon Sep 10 17:13:36 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gmessages.h: got rid of g_set_error_handler(),
+	g_set_warning_handler(), g_set_message_handler().
+
+Mon Sep 10 11:42:58 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gutf8.c glib/gstring.c glib/gfileutils.c glib/gmain.c: 
+	Doc fixes.
+
+Sat Sep  8 17:14:51 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gfileutils.[ch]: Add g_build_path(), 
+	g_build_filename(), to create separated paths, 
+	suppressing duplicate separators, from varargs
+	lists.
+
+	* tests/strfunc-test.c: Add tests for g_build_path(),
+	g_build_filename().
+
+Sat Sep  8 14:11:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am (libglib_1_3_la_SOURCES): Add
+	gbsearcharray.[ch].
+
+	* glib/glib-object.h: Remove include of gbsearcharray. 
+
+Mon Sep  3 23:29:51 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Version 1.3.7
+
+	* Makefile.am (EXTRA_DIST): Distribute po/po2tbl.sed.in
+
+	* Makefile.am: Remove references to glib.rc[.in]
+
+	* NEWS: Various additions.
+
+2001-09-04  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Update. Don't mention pthreads.
+
+	* build-dll: Remove, moved to the build module.
+
+	* glibconfig.h.win32.in: Don't mention pthreds here, either.
+
+	* glib/gstrfuncs.c: Mark the correct variable for export from DLL.
+
+	* glib/giowin32.c (g_io_win32_msg_create_watch): Owen forgot to
+	rename the win32_watch_funcs variable here, too.
+
+	* */makefile.mingw.in: Don't use version number in import library
+	name. Use whole version number in DLL name. Use build-dll from the
+	build module.
+
+Tue Sep  4 01:50:24 2001  Tim Janik  <timj@gtk.org>
+
+	* NEWS: updates for 1.3.7 release.
+
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.h: Add closure_marshal/closure_callback
+	fields to GSourceFuncs for use by g_source_set_closure().
+
+	* glib/gmain.c glib/giounix.c glib/giowin32.c 
+	  glib/gmain.h: Export the SourceFuncs vtables so GObject
+	can use them to figure out closure callbacks/marshallers
+	for the default source types.
+
+Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_strchomp): Replace some uses
+	of isspace() with g_ascii_isspace().
+
+	* glib/gutf8.c glib/gunicode.h glib/gstrfuncs.[ch]: Add
+	extra indirections to g_utf8_skip and g_ascii_table to
+	avoid great whopping copy relocs.
+
+Sun Sep  2 11:10:42 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gen-unicode-tables.pl glib/gunicomp.h
+	glib/gunichartables.h glib/giounix.c: Fix some variables that 
+	should have been static.
+
+2001-08-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gthread.h, glib/gthread.c: Add 'want_to_read' to
+	GStaticRWLock to avoid calling g_cond_broadcast, when no one is
+	waiting.
+
+	* glib/gmain.c (g_main_context_add_poll_unlocked): Don't free
+	cached_poll_array, when adding new poll's. This is taken care for
+	in g_main_context_iterate.
+
+2001-08-30  Tor Lillqvist  <tml@iki.fi>
+
+	After being away for about five months, I'm back working on
+	this...  For now, still using same build setup for Win32. Probably
+	will change to not including version numbers in the import library
+	names, though. (But the DLL names would still include them,
+	possibly even also the micro version number.) That would be more
+	Unix-like. Also, will have to check out newest mingw tool versions
+	to see if the build-dll script now can be retired.
+	
+	* makefile.mingw
+	* makefile.msc: New files, no need to generate from .in as
+	they don't contain references to automake variables.
+	
+	* makefile.mingw.in
+	* makefile.msc.in: Removed.
+	
+	* glib.rc.in: Remove
+	* glib/glib.rc.in: Moved here.
+	
+	* Makefile.am
+	* glib/Makefile.am: Corresponding changes.
+
+	* glib/glib.def: Fix typo, add new entries.
+
+	* glib/gspawn-win32-helper.c: More debugging. Doesn't work
+	currently (or then it never has on Win2k, which I now use?)
+
+	* glib/gstrfuncs.c
+	* glib/gstrfuncs.h: Mark g_ascii_table for export/import on Win32.
+
+	* */makefile.mingw.in: Reflect new location of glib library.
+	
+2001-08-30  Michael Natterer  <mitch@gimp.org>
+
+	* glib/giochannel.h: (struct GIOChannel): "gboolean foo : 1"
+	results in TRUE being -1 once assigned, use "guint foo : 1"
+	instead.
+
+2001-08-27  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gconvert.h:
+	* glib/gconvert.c: (g_filename_from_uri):
+	Updated name of error from G_CONVERT_ERROR_NOT_LOCAL_FILE to
+	G_CONVERT_ERROR_NOT_ABSOLUTE_FILE_URI.
+	
+	* tests/.cvsignore:
+	* tests/uri-test.c:
+	Added a lot more test for the new URI functions, including a
+	number that seem to indicate some minor bugs.
+
+2001-08-26  Alex Larsson  <alexl@redhat.com>
+
+	* glib/gconvert.[ch] (g_filename_from_uri,
+	g_filename_to_uri): New functions to convert
+	between local pahtnames and file: uris.
+
+	* tests/Makefile.am:
+	* tests/uri-test.c:
+	Tests for the new functions.
+
+2001-08-25  Alexander Larsson  <alla@lysator.liu.se>
+
+	* glib/gstrfuncs.[ch]:
+	* docs/reference/glib/glib-overrides.txt:
+	* docs/reference/glib/glib-sections.txt:
+	* docs/reference/glib/tmpl/string_utils.sgml:
+	Implement and document g_ascii_isxxx.
+
+	* tests/strfunc-test.c:
+	Add tests for g_ascii_isxxx
+	
+	* glib/guniprop.c (g_unichar_ispunct):
+	include symbols, not just punctuation.
+	(g_unichar_isspace): Vertical tab is not
+	considered whitespace.
+	
+	* tests/shell-test.c:
+	Output errors on stderr
+
+2001-08-24  Alexander Larsson  <alla@lysator.liu.se>
+
+	* glib/gconvert.[ch] (g_convert_with_iconv):
+	New function, doing the same as g_convert but taking
+	a GIConv argument. The old g_convert is just
+	a call to this with a newly opened GIConv.
+
+2001-08-24  Darin Adler  <darin@bentspoon.com>
+
+	* tests/shell-test.c: (check_string_result): Fix bad indenting.
+	I figured I should fix this since I just pointed Alex here to
+	look at this as an example.
+
+2001-08-24  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: Matthias Clasen's fix for
+	the buffer corruption bug by setting outbuf _after_
+	the call to g_string_set_size()
+
+	* glib/giochannel.c: kept the buffers from perpetually
+	growing by subtracting 1 from allocated_len in the calculation
+	of available space to account for the null at the end of the
+	buffer
+
+	* glib/giochannel.c: fixed g_io_channel_write_chars()
+	to not write more than space_in_buf bytes for the UTF-8 case
+
+Fri Aug 24 11:15:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c docs/Changes-2.0.txt: Patch from Darin
+	Adler to restore Glib-1.2 handling of empty strings,
+	and to fix off-by-one with @max_tokens. (#57663).
+	Doc improvements.
+
+	* tests/strfunc-test.c: Change tests to correspond to
+	new behavior of g_strsplit().
+
+Thu Aug 23 11:09:58 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/ghash.c (g_hash_table_foreach_remove_or_steal): 
+	Patch from Josh Pritikin to fix reversed key and value destroy 
+	functions. (#59433)
+
+	* glib/giochannel.h (struct _GIOChannel): Mark structure
+	/*< private >*/
+
+Thu Aug 23 16:14:17 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gmacros.h (G_GNUC_NO_INSTRUMENT): new macro.
+
+2001-08-21  Abel Cheung  <maddog@linux.org.hk>
+
+	* configure.in: Added "zh_TW" to ALL_LINGUAS.
+
+2001-08-20  Sven Neumann  <sven@gimp.org>
+
+	* Makefile.am: added po to SUBDIRS
+
+Sun Aug 19 21:32:39 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/ghash.c: Eliminate use of floating point when 
+	determining if the hash table needs to be resized,
+	and also factor out the test from g_hash_table_resize()
+	to save function calls for the common case.
+	(#59124)
+
+	* glib/gmain.c (g_main_context_query): Document the
+	return value.
+
+2001-08-19  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gshell.c: (g_shell_quote): Added missing \ character.
+
+	* tests/shell-test.c: (check_string_result), (test_shell_unquote),
+	(main): Added tests for g_shell_quote and g_shell_unquote.
+
+2001-08-19  Fatih Demir <kabalak@gtranslator.org>
+
+	* configure.in: Added "ta" to the languages list.
+
+2001-08-19  Havoc Pennington  <hp@pobox.com>
+
+	* glib/gshell.c (g_shell_unquote): add comment about shell quoting
+	rules to the docs.
+
+2001-08-16  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giounix.c: fixed an error in setting close_on_unref
+	in g_io_channel_new_file ()
+
+2001-08-16  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c glib/glib.def glib/giochannel.h: Added
+	new functions g_io_channel_[set,get]_close_on_unref ()
+
+	* glib/giochannel.c: glib/giochannel.h: Documentation fixes
+
+	* glib/giochannel.c: Fixed g_io_channel_write_chars ()
+	so that bytes_written is always set to an appropriate
+	value when it returns
+
+	* glib/giounix.c: changed g_io_channel_get_flags () to
+	set the is_readable and is_writeable flags cached
+	by the channel
+
+Wed Aug 15 11:09:56 2001  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: let the generated .pc files depend on config.status,
+	so they get correctly remade.
+
+Sun Aug 12 21:05:13 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gmessages.h: fix g_return_if_fail, g_assert and friends to
+	have a body for G_DISABLE_CHECKS and G_DISABLE_ASSERT.
+	fixes #58873.
+
+2001-08-12  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: safer handling of errno, fixed
+	a bug in an assert
+
+Sun Aug 12 10:09:00 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/iochannel-test.c (main): Find test case for
+	srcdir != builddir, miscellaneous cleanups.
+
+	* tests/Makefile.am (EXTRA_DIST): Distribute casefold.txt,
+	casemap.txt iochannel-test-infile.
+
+	* glib-2.0-uninstalled.pc.in: Fix for move of glib files
+	into subdir. (Pointed out by Steve Baker)
+
+Sat Aug  4 01:04:08 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gscanner.c (g_scanner_unexp_token): fix INT and FLOAT warnings
+	for invalid token values.
+
+2001-08-10  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: Fixed a "sense of comparison" bug,
+	added an assert to check when g_io_channels_read_chars ()
+	is looping endlessly due to encoded_read_buf being corrupted.
+
+2001-08-06  Sven Neumann  <sven@gimp.org>
+
+	* glib/gutils.[ch]: added new function g_nullify_pointer().
+	
+2001-08-05  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c glib/giochannel.c glib/glib.def
+	docs/reference/glib/glib-sections.txt: Added new functions
+	g_io_channel_[read,write]_unichar ()
+
+	* glib/giochannel.h: Finally remembered to remove the
+	old error message G_IO_CHANNEL_ERROR_PCHAR_FLUSH
+
+	* glib/giochannel.c: Some fixes to g_io_channel_fill_buffer ()
+	and g_io_channel_write_chars ()
+
+2001-08-05  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: Replaced the local use_buf variable with a macro
+	in most places. This allows us to check some things without worrying
+	whether we have allocated the read buffers yet, and allows us to allocate
+	the buffers later in some cases.
+
+	* glib/giochannel.c: Introduced a MAX_CHAR_SIZE macro, which is
+	supposed to be greater than or equal to the length in bytes
+	of the longest character in any encoding. This is necessary
+	to get the minimum buffer size for successful writing.
+
+	* glib/giochannel.c: Fixed g_io_channel_set_encoding () so
+	that it just prints a warning if partial_write_buf isn't
+	empty instead of failing.
+
+	* glib/giochannel.c: Fixed several functions so they can accept
+	NULL parameters for pointers to return values.
+
+	* glib/giochannel.c: Altered the error handling for
+	g_io_channel_read_chars () to only return an error if
+	it doesn't have any buffered data.
+
+	* glib/giochannel.c: Rewrote g_io_channel_write_chars ()
+	to fix the error handling and remove duplicate sections
+	of code.
+
+	* glib/giounix.c: Fixed g_io_channel_new_file () to
+	call fstat () to set the is_seekable flag, in case someone
+	uses it on a FIFO.
+
+Sun Aug  5 08:25:30 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmacros.h: Include stddef.h so that we use
+	the system's definition of NULL. (#54730)
+
+2001-08-04  Alexander Larsson   <alexl@redhat.com>
+        
+	* win32-fixup.pl: 
+	Hacky script to fix up your .msc.in files on windows. 
+	Dunno if this is a good solution yet.
+	
+	* build/win32/module.defs:
+	Back down libiconv version to 1.3, since that is what tor distributes.
+	
+	* glib/glib.def:
+	Update
+
+	* gobject/makefile.msc.in:
+	build gobject-query.exe and gmarshal.strings, add libiconv dependency to linklines.
+
+	* gobject/marshal-genstrings.pl:
+	New file. perl script to generate gmarshal.strings.
+	
+2001-08-03  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: Fixed g_io_channel_seek_position()
+	so that G_SEEK_CUR can be used with UTF-8 encoding
+
+	* glib/giochannel.c: Changed test to decide whether
+	use_buf is encoded_read_buf or read_buf from
+	"if (channel->do_encode)" to "if (channel->encoding)" to
+	fix bug 58472
+
+	* tests/iochannel-test.c: Fixed so it doesn't output
+	double newlines
+
+        * glib/giochannel.c: Fixed g_io_channel_fill_buffer()
+	so that encoded_read_buf is created for UTF-8 encoding
+
+2001-08-03  Darin Adler  <darin@bentspoon.com>
+
+	* tests/strfunc-test.c: (strv_check), (main):
+	Improve strfunc test to test the split function in a way that
+	demonstrates its idiosyncrasies.
+	* tests/.cvsignore:
+
+2001-08-03  Sven Neumann  <sven@gimp.org>
+
+	* configure.in: beautified configure help output.
+	
+	* glib/gtree.c: changed help for g_tree_insert(); it was misleading.
+
+Fri Aug  3 10:20:10 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/guniprop.c (g_unichar_xdigit_value): Fix computation
+	(Fix from Cesar Rincon)
+
+2001-08-01  Christopher James Lahey  <clahey@ximian.com>
+
+	* glib/gutf8.c (g_utf8_find_prev_char): Made g_utf8_find_prev_char
+	able to return the first character of a string.
+
+2001-07-31  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.h: Committed this file, which is where
+	the changes in my previous changelog entry happened,
+	not giochannel.c
+
+2001-07-31  Sven Neumann  <sven@gimp.org>
+
+	* glib/gmem.c: declare gboolean vtable_set static.
+
+2001-07-30  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c docs/reference/glib/glib-sections.txt
+	tests/iochannel-test.c: removed G_IO_CHANNEL_*_LINE_TERM macros
+
+	* glib/giochannel.c put /*<public>*/ and /*<private>*/ tags in
+	the GIOChannel structure
+
+
+2001-07-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: #undef inline before testing whether it works to
+	avoid false positives. Patch from Garry R. Osgood
+	<grosgood@rcn.com>. Fixes bug #58272.
+
+	* gmodule/gmodule.c (parse_libtool_archive): build the library
+	name ourselfs ... so we can load the library specified and not
+	mangle any name not beggining in 'lib'. Patch from Michael Meeks
+	<michael@ximian.com>. Fixes bug #58226.
+
+2001-07-29  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: Matthias Classen's patch to give
+	g_io_channel_flush() the correct sense when testing
+	whether the buffer is empty
+	* glib/giounix.c: Matthias Classen's patch to set
+	the mode of a file created with g_io_channel_new_file()
+
+Sun Jul 29 16:08:17 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gscanner.[hc]: removed deprecated g_scanner_stat_mode().
+
+	* glib/gscanner.c (g_scanner_msg_handler): by default, print scanner
+	errors and warnings to stderr.
+
+2001-07-27  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gtypes.h: Use G_GNUC_EXTENSION instead of
+	__extension__. Patch from Pavel Roskin <proski@gnu.org>.
+
+2001-07-26  Darin Adler  <darin@bentspoon.com>
+
+	* configure.in:
+	* m4macros/glib-2.0.m4:
+	Update location of pkgconfig from sourceforge.net to new
+	location at freedeskop.org.
+
+2001-07-26  Michael Natterer  <mitch@convergence.de>
+
+	* gobject/glib-genmarshal.c: added a "release_check" to the
+	OutArgument structure, which, if present, gets integrated in the
+	marshaller code and protects us from stuff like
+	g_object_unref(NULL) on marshaller return values.
+
+2001-07-23  Padraig O'Briain  <Padraig.Obriain@sun.com>
+
+	* gobject/gobjectnotifyqueue.c: fix unconditional check of
+	first GParamSpec in g_object_notify_queue_thaw(); prevent
+	property notification being lost
+
+2001-07-23  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: fixed g_io_channel_seek_position() so that
+	G_SEEK_CUR works for UTF-8 channel encoding, and unallocated
+	converters are not flushed after the seek; fixed
+	g_io_channel_get_buffer_condition() so that G_IO_IN is only
+	set if the read buffer contains at least one full character
+
+2001-07-23  Sven Neumann  <sven@gimp.org>
+
+	* Makefile.am: removed glib.def from EXTRA_DIST ...
+	* glib/Makefile.am: ... and added it here.
+
+2001-07-22  Hans Breuer  <hans@breuer.org>
+
+	* glib/giochannel.c (g_io_channel_get_buffer_condition) : make
+	the code actually have an effect (Use |= to set bits). Not
+	absolutely sure if is the right one.
+
+	* glib/giowin32.c (g_io_win32_<check|prepare>) : don't modify
+	watch->condition but restored the previous behaviour.
+	Now gio-test as well as The Gimp work again ...
+	
+2001-07-21  Hans Breuer  <hans@breuer.org>
+
+	* glib/giowin32.c (g_io_channel_new_file) : set the
+	corresponding p(ermission)mode of the file when creating,
+	otherwise a wronly file couldn't be overwritten (at least
+	not on Win9x).
+
+2001-07-21  Hans Breuer  <hans@breuer.org>
+
+	* glib/giowin32.c : intial implementation of new API functions.
+	Not sure if it behaves as intended ...
+
+	* glib.def : removed, glib/glib.def is the file used since moved
+	* glib/glib.def : updated
+
+	* tests/makefile.msc : added iochannel-test
+
+Fri Jul 20 19:19:10 (UTC) 2001  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/giochannel.c: API changes, fixes to
+	error handling, some internal restructuring
+	* glib/giochannel.h: API changes, documentation for
+	elements in GIOChannel structure
+	* glib/giounix.c: Matched API changes, implemented
+	backend to set is_readable, is_writeable, is_seekable
+	flags, added a test to catch large values of count
+	for which the behavior of write() is undefined
+	* glib/giowin32.c: Changed to match new prototypes for
+	io_close() and io_seek(), removed references to
+	G_IO_STATUS_INTR, set is_seekable flag in channel
+	creation functions
+	* glib.def: Renamed g_channel_error_quark() and
+	g_channel_error_from_errno() to g_io_channel_error_quark() and
+	g_io_channel_error_from_errno(); added new functions
+	g_io_channel_get_buffered() and g_io_channel_set_buffered()
+	* docs/reference/glib/glib-sections.txt: Modified iochannel
+	section to reflect new functions and API changes
+	* tests/iochannel-test.c: Fixed to work with API changes
+	* tests/iochannel-test-infile: New file; input file
+	for iochannel-test
+	* tests/unicode-collate.c tests/unicode-normalize.c:
+	Changed G_IO_FILE_MODE_READ to "r" to match API change
+
+Fri Jul 20 19:16:24 (UTC) 2001  Ron Steinke  <rsteinke@w-link.net>
+
+	* gobject/glib-genmarshal.c: modified to create header files
+	using G_[BEGIN,END]_DECLS instead of #ifdef __cplusplus ...
+
+Fri Jul 20 14:11:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gutf8.c glib/gunidecomp.c: s/size_t/gsize/ to match
+	prototypes.
+
+Thu Jul 19 16:05:21 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gcompletion.c (g_completion_complete): Fix memory
+	leak and dubious list manipulation. (Found by 
+	Ron Koerner, #53408)
+
+	* glib/gfileutils.c (get_contents_stdio): Call fclose()
+	on FILE * on error. (#57057)
+
+2001-07-20  Hans Breuer  <hans@breuer.org>
+
+	* glib/glib/giowin32.c : make it compile again
+
+	* glib/glib.def : updated exports
+
+	* glib/makefile.msc.in :
+	* glib/makefile.mingw.in : 
+	* tests/makefile.msc.in : reflect glib move
+
+	* tests/mainloop-test.c : #include <io.h> for _pipe()
+
+	* tests/gio-test.c : casts for strict compiler settings
+
+	* makefile.msc.in : new master makefile reflecting the glib
+	move. The '.in' isn't really needed anymore, because there
+	is no version number in it
+
+2001-07-19  Darin Adler  <darin@bentspoon.com>
+
+	* glib/gstrfuncs.c: (g_ascii_strdown), (g_ascii_strup): Add
+	missing const.
+	(g_strsplit): Add g_return_val_if_fail for case of empty
+	delimiter, which can result in an infinite loop otherwise.
+	* glib/gstrfuncs.h: Add missing const.
+	* tests/.cvsignore: Ignore a generated file.
+	
+	* tests/array-test.c:
+	* tests/dirname-test.c:
+	* tests/hash-test.c:
+	* tests/list-test.c:
+	* tests/node-test.c:
+	* tests/relation-test.c:
+	* tests/shell-test.c:
+	* tests/slist-test.c:
+	* tests/spawn-test.c:
+	* tests/strfunc-test.c:
+	* tests/string-test.c:
+	* tests/testglib.c:
+	* tests/tree-test.c:
+	* tests/type-test.c:
+	Add an #undef G_DISABLE_ASSERT so all tests will assert even if
+	asserts are disabled inside glib itself.
+
+Fri Jul 13 19:20:06 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstring.c (g_string_insert/append/prepend_unichar):
+	Add functions to insert a unichar as UTF-8, since this
+	is reasonably common.
+
+	* glib/gutf8.c glib/gunicode.h (g_utf8_get_char_validated):
+	New function exposing iterating through possibly invalid/incomplete
+	UTF-8 to unicode to the outside world.
+
+	* glib/gutf8.c (g_utf8_get_char_extended): Fix max_len argument
+	to be gssize, not gsize.
+
+2001-07-17  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* configure.in: Added "nn" to ALL_LINGUAS.
+	
+2001-07-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gmain.c: Add some assertions. Simplify and fix
+	g_main_context_release(). Fix some locking bugs in
+	g_main_loop_run().
+
+2001-07-12  Mark Murnane  <Mark.Murnane@sun.com>
+
+	* glib/gmessages.c: Changed prototype of printf_string_upper_bound
+	to return gsize.  Now matches the actual function body.
+
+	* glib/gstrfuncs.c (g_strrstr_len): Changed type of parameter #2 
+	from gint to gssize.  Now matches the prototype in gstrfuncs.h.
+	
+2001-07-11  Darin Adler  <darin@bentspoon.com>
+
+	* .cvsignore: Add some generated files.
+
+	* glib/gmain.c: (g_main_context_iterate): Comment out cruft
+	after #endif to avoid gcc warning.
+	* gmodule/gmodule.c: (g_module_set_error_unduped): Remove
+	const from type to avoid gcc warning.
+	* gobject/gsignal.c: (g_signal_emitv): ifdef variable used
+	only if G_ENABLE_DEBUG to avoid gcc warning.
+	* gobject/gtype.c: (type_iface_vtable_init_Wm),
+	(type_iface_vtable_finalize_Wm): ifdef call needed only
+	if !G_DISABLE_ASSERT to avoid gcc warning.
+	* tests/testglib.c: (main): ifdef call needed only if
+	!G_DISABLE_ASSERT to avoid gcc warning. Maybe later we
+	should make the test to #undef G_DISABLE_ASSERT.
+	* tests/unicode-collate.c: Add include of <string.h> to
+	avoid gcc warning.
+
+Wed Jul 11 11:13:50 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gunicomp.h
+	(Reported by Sven Neumann).
+
+	* glib/guniprop.c (g_utf8_str/updown) glib/gunicollate.c
+	(g_utf8_collate_key): Fix shadowing problems reported by
+	many (D. Adler, S. Neumann, M. Murmane, L. Peter)
+
+Fri Jul  6 00:02:41 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/gmessages.c (printf_string_upper_bound): fix negative exponent
+	handling (numbers<0).
+	
+	* glib/gutils.h (g_bit_storage): take a gulong as argument.
+	same for g_bit_nth_lsf() and g_bit_nth_msf() as mask.
+
+2001-07-08  Martin Baulig  <baulig@suse.de>
+
+	* tests/unicode-normalize.c, tests/unicode-collate.c:
+	Reflect latest g_io_channel_new_file() API changes, use
+	G_IO_FILE_MODE_READ instead of "r".
+
+Fri Jul  6 22:34:32 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gunicode.h glib/gunidecomp.c glib/guniprop.c 
+	  glib/gunicollate.c: Add length arguments to
+	g_utf8_{strup,strdown,casefold,collate_key}.
+
+	* glib/gdate.c: Fix for above.
+
+2001-07-06  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* configure.in: added Basque (eu) to ALL_LINGUAS
+
+Mon Jul  2 19:48:52  2001 Andrew Lanoix <alanoix@umich.edu>
+
+	*giowin32.c: g_source_remove()ing an socket iochannel closes
+	the socket when it should not. Patch by Peter Zelezny 
+	<zed@linux.com>
+
+	*giowin32.c: Fix a few typos
+	
+Mon Jul  2 16:03:21 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_get_buffer_condition): Fix.
+
+	* glib/giunix.c: Fix prepare/check/dispatch for watches.
+
+	* tests/unicode-normalize.c: #include <string.h>
+
+Sat Jun 30 23:14:32 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/glist.[hc]: added g_list_insert_before().
+
+	* glib/gslist.c (g_slist_insert_before): provide an implementation,
+	prototype was already present...
+
+Sun Jul  1 20:16:25 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/guniprop.c (g_unichar_totitle): Use G_N_ELEMENTS
+	rather than a custom macro.
+
+	* glib/gen-unicode-tables.pl: Adapt to changes in table
+	formats for Unicode 3.1
+
+	* glib/gunicode.h glib/guniprop.c glib/gunichartables.h
+	  glib/gen-unicode-tables.pl: Add case conversion functions
+        g_utf8_casefold, g_utf8_strup, g_utf8_strdown.
+
+	* tests/unicode-caseconv.c tests/gen-casefold-txt.pl
+	  tests/gen-casemap-txt.pl tests/casefold.txt 
+	  tests/casemap.txt: Test cases for case conversion.
+
+	* glib/gunicode.h glib/gunidecomp.[ch] glib/gunicomp.h
+	  glib/gen-unicode-tables.pl: Add function to do Unicode
+        normalization g_utf8_normalize().
+
+	* tests/unicode-normalize.c: Test program for case conversion.
+
+	* glib/gunicode.h glib/gunicollate.c: Add collation functions
+	g_utf8_collate, g_utf8_collate_key.
+
+	* test/unicode-collate.c: Test program for collation.
+
+	* glib/gdate.c (g_date_fill_parse_tokens): Fix uninitialized
+	variable.
+
+	* glib/gdate.c (g_date_strftime) docs/Changes-2.0.txt:
+	Make work with UTF-8 even if the locale isn't UTF-8 based.
+	Still somewhat of broken, if the format string contains 
+	characters not representable in the current locale, will warn
+	and not work.
+	
+	* glib/gdate.c: Use UTF-8 normalization and casefolding.
+
+Sat Jun 30 16:03:16 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giowin32.c glib/giounix.c glib/gmain.[ch]:
+	Rename GSourceFuncs::destroy to GSourceFuncs::finalize.
+	(#56858)
+
+Sat Jun 30 15:49:10 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.[ch]: (Mostly patch from Sebastian Wilhemi)
+	Make some changes to the way that GMainContext works:
+
+	 - a GMainContext is no longer associated with a single
+	   thread, but any thread can acquire ownership 
+	   of thread and iterate.
+
+	 - There is a facility g_main_context_wait() for
+	   non-owner-threads to wait either for ownership
+	   or for a condition to be broadcast.
+
+	 - For efficiency, GMainLoop just piggybacks of
+	   of the loops mutex / condition instead of
+	   having a separate mutex/condition for each
+	   GMainLoop.
+
+	* glib/gthread.[ch]: Remove hacks to store the thread's
+	GMainContext in the GThread structures, since we
+	no longer have the GMainContext <=> GThread correspondence.
+	
+        * glib/gmain.[ch]: Make g_main_context_wakeup() public
+	so someone could completely duplicate GMainLoop 
+	with the public API.
+
+	* tests/mainloop-test: Fix up to the new API. Decidedly
+	doesn't work at the moment, but that may be the IO
+	channel changes, or preexisting locking problems.
+
+Sat Jun 30 13:18:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c glib/gstring.h: Try compiling
+	before committing, why don't you? Simple fixes
+	for my stupid typos. 
+
+Sat Jun 30 12:49:26 2001  Owen Taylor  <otaylor@redhat.com>
+
+        Patch from Darin Adler (#54166)
+	
+	* glib/gstrfuncs.[ch]: Add ascii-only, locale-insensitive
+	g_ascii_to[lower/upper], g_ascii_str[down/up],
+	g_ascii_is[upper/lower] and deprecate the locale-affected
+	versions which break for UTF-8, etc. Make
+	g_ascii_strup/strdown duplicating,
+	not in-place for consistency with UTF-8 functions.
+
+	* glib/gstring.[ch]: Add ascii-only, locale-insensitive
+	g_string_ascii_[down/up], and deprecate the locale-affected
+	versions which break for UTF-8, etc.
+
+	* glib/gutils.c glib/gwin32.c test/testglib.c: Use
+	the g_ascii_* functions where appropriate.
+
+Fri Jun 29 13:36:39 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstring.[ch] (g_string_set_size): Add function to 
+	allow setting the length of a string greater than the 
+	current length (for buffering usage)
+
+	* glib/gstring.[ch]: Expose string->allocated_len, since
+	that is	useful when using GString simply as a buffer. 
+	(Renamed from string->alloc)
+
+	* glib/giochannel.[ch] glib/giounix.c glib/giowin32.c:
+	Major patch from Hidetoshi Tajima and Ron Steinke
+	reworking GIOChannel to have:
+
+	 - Buffering
+	 - Sane and useful error reporting
+	 - Streaming encoding conversion with iconv
+	 - Convenience functions to read by lines or 
+	   an entire file.
+
+	Also fix remaining 64 bit cleanliness issues.
+
+	* tests/iochannel-test.c tests/Makefile.am: Test case
+	for IO channel streaming conversion. Still needs 
+	some fixing up.
+
+Thu Jun 28 16:57:44 2001  Tim Janik  <timj@gtk.org>
+
+	* configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+	interface age 0, binary age 0.
+
+2001-06-27  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* glib/gmarkup.c: Fix a typo.
+	
+2001-06-27  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am, configure.in: Removed glib-config-2.0, as we have
+	pkg-config now.
+
+	* glib/Makefile.am: Added -I$(top_srcdir) for builddir != srcdir.
+
+	* Makefile.am: Removed gen-unicode-tables.pl from EXTRA_DIST.
+
+Tue Jun 26 11:43:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in Makefile.am *.[ch] glib/*.[ch] glib/Makefile.am:
+	Move glib library into a subdirectory, make all GLib include
+	files include as <glib/glist.h>
+
+	* tests/testglib.c tests/testgdate.c tests/testgdateparser.c
+	  tests/timeloop.c tests/timeloop-basic.c: Move all tests into
+	the tests/ subdirectory.
+
+Sat Jun 23 17:34:38 2001  Tim Janik  <timj@gtk.org>
+
+	* gmessages.c (g_logv): use G_BREAKPOINT() instead of raise(5).
+
+Wed Jun 20 12:00:54 2001  Owen Taylor  <otaylor@redhat.com>
+
+        Changes for 64-bit cleanliness, loosely based on patch 
+	from Mark Murnane.
+	
+	* gconvert.c (g_convert/g_convert_with_fallback): Remove
+	workarounds for since-fixed GNU libc bugs. Minor
+	doc fix.
+
+	* gconvert.[ch]: Change gint to gsize/gssize as
+	appropriate.
+
+	* gconvert.c (g_locale/filename_to/from_utf8): Fix incorrect
+	computation of bytes_read / bytes_written.
+
+	* gfileutils.[ch] (g_file_get_contents): Make length
+	out parameter 'gsize *len'.
+
+	* ghook.c (g_hook_compare_ids): Don't compare a
+	and b as 'a - b'.
+
+	* gmacros.h (GSIZE_TO_POINTER): Add GPOINTER_TO_SIZE,
+	GSIZE_TO_POINTER.
+
+	* gmain.c (g_timeout_prepare): Rewrite to avoid
+	overflows. (Fixes bug when system clock skews
+	backwards more than 24 days.)
+
+	* gmarkup.[ch]: Make lengths passed to callbacks
+	gsize, length for g_markup_parse-context_parse(),
+	g_markup_escape_text() gssize.
+
+	* gmessages.[ch] (g_printf_string_upper_bound): Change
+	return value to gsize.
+
+	* gmessages.c (printf_string_upper_bound): Remove
+	a ridiculous use of 'inline' on a 300 line function.
+
+	* gstring.[ch]: Represent size of string as a gsize,
+	not gint. Make parameters to functions take gsize,
+	or gssize where -1 is allowed.
+
+	* gstring.c (g_string_erase): Make
+	g_string_erase (string, pos, -1) a synonym for
+	g_string_truncate for consistency with other G*
+	APIs.
+
+	* gstrfuncs.[ch]: Make all functions taking a string
+	length, take a gsize, or gssize if -1 is allowed.
+	(g_strstr_len, g_strrstr_len). Also fix some boundary
+	conditions in g_str[r]str[_len].
+
+	* gutf8.c tests/unicode-encoding.c: Make parameters that 
+	are byte lengths gsize, gssize as appropriate. Make 
+	character offsets, other counts, glong.
+
+	* gasyncqueue.c gcompletion.c
+          timeloop.c timeloop-basic.c gutils.c gspawn.c.
+	Small 64 bit cleanliness fixups.
+
+	* glist.c (g_list_sort2, g_list_sort_real): Fix functions
+	that should have been static.
+
+	* gdate.c (g_date_fill_parse_tokens): Fix extra
+	declaration that was shadowing another.
+
+	* tests/module-test.c: Include string.h
+
+Mon Jun 18 15:43:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gutf8.c (g_get_charset): Make argument
+	G_CONST_RETURN char **.
+
+2001-06-22  Andrew Lanoix <alanoix@umich.edu>
+	
+	*giowin32.c: Debug and partial rewrite of async socket code
+	on windows, which fixes major MT issues. Some test code kindly 
+	provided by wroberts1@home.com.
+	
+Thu Jun 14 14:09:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+	wasn't replaced with g_stpcpy in the original 
+	stpcpy-for-efficiency patch.
+
+2001-06-11  Havoc Pennington  <hp@redhat.com>
+
+	* NEWS: updated
+
+	* configure.in (GLIB_MICRO_VERSION): increment version to 1.3.6
+
+2001-06-08  Alex Larsson  <alexl@redhat.com>
+
+	* gstrfuncs.[ch]:
+	Added new functions g_strstr_len, g_strrstr and g_strrstr_len
+	
+	* tests/strfunc-test.c:
+	Add some tests for the new functions.
+	
+	* gunicode.h:
+	* gutf8.c:
+	Add length argument to g_utf8_strchr and g_utf8_strrchr.
+	
+2001-06-08  Havoc Pennington  <hp@redhat.com>
+
+	* gspawn.c: support G_SPAWN_FILE_AND_ARGV_ZERO specifying that 
+	the vector passed in to g_spawn_* contains a filename to 
+	execute in argv[0] then the actual argv begins at argv + 1.
+	Kind of a lame hack, but this isn't something you commonly want
+	to do, and avoids adding more function arguments.
+
+2001-06-08  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* configure.in: Added Azeri (az) to ALL_LINGUAS
+
+2001-06-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* docs/Makefile.am, configure.in: Remove docs/glib-config.1.in.
+
+	* gthread-2.0-uninstalled.pc.in (Cflags): Add @G_THREAD_CFLAGS@.
+
+2001-06-07  Havoc Pennington  <hp@redhat.com>
+
+	* m4macros/glib-2.0.m4: subst GLIB_GENMARSHAL, GOBJECT_QUERY, 
+	GLIB_MKENUMS variables
+
+	* gmodule-2.0.pc.in: add gmodule_supported variable
+
+	* glib-2.0.pc.in: add glib_genmarshal, gobject_query,
+	glib_mkenums variables	
+
+	* configure.in: put G_MODULE_SUPPORTED value into 
+	.pc files
+
+	* autogen.sh: support AUTOGEN_SUBDIR_MODE
+
+	* Makefile.am: add -uninstalled.pc.in to EXTRA_DIST
+
+2001-06-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Look for nanosleep function. 
+
+	* gtimer.c: Use nanosleep for g_usleep, when found.
+
+	* gtimer.c, gtimer.h: Add g_time_val_add function. Closes #54271.
+
+	* gasyncqueue.c: Documentation updates.
+
+	* gthreadpool.c: Use g_time_val_add now that we have it.
+
+2001-06-01  Jon Trowbridge  <trow@gnu.org>
+
+       * gdate.c (g_date_update_julian): Changed to take a const
+       argument, and then to cast out const.
+       (g_date_update_dmy): Changed to take a const argument, and then
+       cast out const.
+       (g_date_get_weekday): Changed argument to be const.
+       (g_date_get_month): Changed argument to be const.
+       (g_date_get_year): Changed argument to be const.
+       (g_date_get_day): Changed argument to be const.
+       (g_date_get_julian): Changed argument to be const.
+       (g_date_get_day_of_year): Changed argument to be const.
+       (g_date_get_monday_week_of_year): Changed argument to be const.
+       (g_date_get_sunday_week_of_year): Changed argument to be const.
+       (g_date_compare): Changed arguments to be const.
+       (g_date_to_struct_tm): Changed GDate argument to be const.
+       (g_date_strftime): Changed GDate argument to be const.
+       (g_date_clamp): Added.  The equivalent of the CLAMP macro for
+       GDates.
+       (g_date_order): Added.  Ensure that the first GDate argument
+       preceeds the second, swapping them if necessary.
+       (g_date_days_between): Added.  Computes the (signed) number of days
+       between two dates.
+
+Mon Jun  4 16:02:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+	check if it is lower/upper before converting to upper/lower
+	[ not required by ISO... ] (#55682, Jon Trowbridge)
+
+Mon Jun  4 15:59:15 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gunicode.h: Make a bit more standalone by adding include
+	of gerror.h. #54543.
+	
+	* gunicode.h: Change size_t to g_size. (Ugh)
+
+2001-05-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* grand.h (g_random_boolean, g_rand_boolean): Fix to stupid bug in
+	g_random_boolean, also both functions now return 1 or 0 instead of
+	1<<15 or 0.
+
+	* tests/rand-test.c: Extended testcases.
+
+	* configure.in: Remove G_HAVE_ISO_CXX_VARARGS and
+	G_HAVE_ISO_C_VARARGS and define G_HAVE_ISO_VARARGS directly
+	guarded by #if(n)def __cplusplus.
+
+2001-05-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-2.0.pc.in: Add @G_THREAD_CFLAGS@ to Cflags.
+
+Tue May 29 18:17:11 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* autogen.sh (have_libtool): Fix GNU sedism
+
+2001-05-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* tests/Makefile.am, tests/qsort-test.c: Add test case for the
+	g_qsort_with_data func. It works. This fixes bug #52605.
+
+	* tests/Makefile.am, tests/cxx-test.C: Now that we check for a C++
+	compiler in configure.in anyway, I added a test, that the GLib
+	headers can be inclued into a C++ program. This fixes bug #52605.
+
+	* configure.in: Don't bail out, if no C++ compiler is
+	found. Define G_HAVE_ISO_VARARGS only if appropriate.
+
+	* gmessages.h: Thus we can revert the previous patch.
+
+2001-05-29  James Henstridge  <james@daa.com.au>
+
+	* gmessages.h: "#ifdef G_HAVE_ISO_VARARGS" will always succeed
+	even when we don't have ISO vararg support.  Changed to
+	"#if G_HAVE_ISO_VARARGS".
+
+Mon May 28 11:40:34 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Check for __VARARGS__ separately for C and C++.
+
+2001-05-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Fix typo.
+
+Sun May 27 05:09:18 2001  Tim Janik  <timj@gtk.org>
+
+	* gmain.c (g_main_context_prepare): unlock context when bailing
+	out with a warning.
+	(g_main_context_check): same here.
+
+	* gmain.c (g_main_context_check): before returning due to
+	changed pollfds, unlock context.
+	
+Thu May 24 21:24:16 CEST 2001 Paolo Molaro <lupus@ximian.com>
+
+	* gmarkup.c: back out change by mitch@convergence.de and apply patch in
+	bug id #52067 that fixes the same problem in a more complete manner.
+	This fixes also a segfault for a malformed XML file and adds a new
+	test case.
+
+2001-05-24  Hans Breuer  <hans@breuer.org>
+
+	* grel.c : reflect renaming of g_string_sprintfa to g_string_printfa
+
+	* makefile.msc.in : create an additional static lib to be used from
+	(at least) glib-genmarshal
+
+2001-05-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* garray.c (g_array_remove_index_fast): Tiny speed improvement
+	suggested by noon@users.sourceforge.net.
+
+2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* config.h.win32.in: Removed POSIX_*. Defined G_THREAD_SOURCE to
+	"gthread-win32.c".
+
+	* glibconfig.h.win32.in: Define G_HAVE_ISO_VARARGS for gcc, don't
+	know about MSC. Define G_THREADS_IMPL_WIN32 instead of
+	G_THREADS_IMPL_POSIX and define the right static mutex macros and
+	types.
+
+	* glib.def: g_thread_create renamed to g_thread_create_full.
+
+	* gthread.c: memcpy is not necessary here. We can simply use
+	struct assignment.
+
+	* gmessages.c: Fix compilation error on win32. Added
+	GFileDescriptor, wich is gint on Unix and FILE* on win32.
+
+2001-05-21  Andrew Lanoix <alanoix@umich.edu>
+
+	*giowin32.c: G_IO_WIN32_WINDOWS_MESSAGES channels
+	not handled correctly in g_io_win32_check()
+
+Sun May 20 10:47:47 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Fix some problems in writing out varargs
+	tests in configure.in
+
+Fri May 18 10:52:23 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in gmessages.h: Use compile checks for ISO C99 and GNU
+	extension varargs macros syntax and store result in glibconfig.h
+	(G_HAVE_ISO_VARARGS, G_HAVE_GNUC_VARARGS) rather than relying
+	on checking predefined macros.
+
+2001-05-18  Michael Natterer  <mitch@convergence.de>
+
+	* gmarkup.c: don't g_strdup()/g_free() all parsed attributes and
+	their values twice but simply copy the string pointers from the
+	GMarkupAttribute struct to the string arrays before passing them
+	to start_element().
+
+2001-05-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c, gthread.h: Renamed g_thread_create to
+	g_thread_create_full and added macro g_thread_create, which omits
+	'stack_size', 'bound' and 'priority' parameters. Also removed
+	'bound' from GThread struct.
+
+	* gthreadpool.h, gthreadpool.c: Adapted GThreadPool to the above
+	changes. GThreadPool lost the 'priority' and 'bound'
+	members. g_thread_pool_new the 'stack_size', 'bound' and
+	'priority' parameters.
+
+	* tests/mainloop-test.c, tests/thread-test.c,
+	tests/threadpool-test.c: Adapted to the above changes.
+
+	* gmem.c (g_mem_profile): Fixed mutex deadlock.
+
+2001-05-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* makefile.mingw.in: Add gpattern.o to objects.
+
+	* glib.def: Export g_thread_exit as well.
+
+	* Makefile.am: Fix BUILT_EXTRA_DIST exporting.
+
+Sun May 13 10:31:17 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am gobject/Makefile.am gmodule/Makefile.am:
+	Add inter-library dependencies.
+
+	* acinclude.m4: Remove libtool macros.
+
+	* autogen.sh: Require libtool-1.4, automake-1.4p1.
+
+2001-05-15  Havoc Pennington  <hp@redhat.com>
+
+	* configure.in (AC_OUTPUT): m4macros/Makefile
+
+	* m4macros/Makefile.am, m4macros/glib-2.0.m4,
+	m4macros/glib-gettext.m4:
+	m4 files moved here on server, Makefile.am added
+	 
+	This is so you can aclocal -I m4macros while avoiding acinclude.m4
+
+	* Makefile.am: add m4macros subdir, remove references to glib-2.0.m4
+
+2001-05-14  Havoc Pennington  <hp@redhat.com>
+
+	* gutf8.c (g_utf8_get_char): fix docs; they said we validated 
+	the UTF-8, but we can't possibly detect partial chars since
+	there's no length arg here, so trying to use this function 
+	on invalid UTF-8 is a bad idea.
+
+Thu May 10 23:21:30 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gmessages.c (g_log_write_prefix): Avoid using stdio
+	to be as robust as possible in out-of-memory.
+
+	* gmessages.c (g_log_default_handler): Remove some dead
+	code.
+
+	* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
+
+Fri May 11 18:25:23 2001  Tim Janik  <timj@gtk.org>
+
+	* gdataset.c:
+	(g_dataset_foreach):
+	(g_datalist_foreach): make these safe against removal of the
+	current element.
+
+2001-05-10  Havoc Pennington  <hp@pobox.com>
+
+	* gmessages.c (g_log_write_prefix): change env variable to
+	G_MESSAGES_PREFIXED, suggested by Tim
+
+Thu May 10 15:19:01 2001  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_key_hash): use g_str_hash() algorithm
+	to generate hashes.
+
+	* gmem.c (standard_calloc): free() doesn't return a value
+	(Mark Murnane).
+
+2001-04-26  Havoc Pennington  <hp@redhat.com>
+
+	* configure.in: Get rid of --enable-msg-prefix
+
+	* gmessages.c: make whether to prefix the messages with
+	appname/pid a runtime setting, not a compile-time setting.  Change
+	default to include prefix for debug/warning/error type messages.
+
+2001-05-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c, gthread.h: Renamed 'value' and 'arg' to 'data' and
+	'thread_func' to 'func' to make it more consistent with the rest
+	of GLib.
+
+	* gthreadpool.c, gthreadpool.h: Moved 'stack_size' from the public
+	members of GThreadPool to the private ones. Renamed 'thread_func'
+	to 'func' as above. Moved up 'user_data' in g_thead_pool_new
+	argument list and in GThreadPool struct.
+	
+Tue May  8 15:33:31 2001  Tim Janik  <timj@gtk.org>
+
+	* gcompletion.h: removed #include <unistd.h> sneaked in by
+	sopwith in november.
+
+2001-05-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmain.c, gthread.c, gthread.h: Moved func and arg members from
+	GRealThread to GThread, such that they can be accessed by the
+	user.
+
+	* gthread.c, gthread.h: Due to popular demand (Tim being the
+	populus here ;-) threads now have a 'return value', which is
+	returned by g_thread_join and is either the return of the topmost
+	thread function or the value given to g_thread_exit.
+	
+	* gthreadpool.c, tests/mainloop-test.c, tests/thread-test.c:
+	Adapted to the above change.
+
+2001-01-06  Hans Breuer  <hans@breuer.org>
+
+	* glib.def : don't try to export g_strcpy, it is g_stpcpy;
+	updated and added some tweaking for functions which got 
+	renamed recently, to avoid the update hassle if it can 
+	simply be done compatible. Should vanish if there is a 
+	stable version for win32.
+
+Fri May  4 11:49:18 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Released 1.3.5
+
+	* NEWS: Updated
+
+	* configure.in (GLIB_MICRO_VERSION): Up version to 1.3.5,
+	interface/binary age 0.
+
+2001-05-04  Sven Neumann  <sven@convergence.de>
+
+	* ghash.c: fixed a typo in a comment.
+
+	* gtree.[ch]: added new functions g_tree_new_full(), g_tree_replace(), 
+	g_tree_steal() and g_tree_foreach() to adapt GTree to the GHashTable
+	API. Moved comments into the C file.
+
+	* docs/reference/glib/glib-sections.txt
+	* docs/reference/glib/tmpl/glib-unused.sgml
+	* docs/reference/glib/tmpl/hash_tables.sgml
+	* docs/reference/glib/tmpl/linked_lists_double.sgml
+	* docs/reference/glib/tmpl/linked_lists_single.sgml
+	* docs/reference/glib/tmpl/macros_misc.sgml
+	* docs/reference/glib/tmpl/trees-binary.sgml: updated documentation
+	
+Thu May  3 06:38:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* g[s]list.c (g_[s]list_foreach) docs/Changes-2.0.txt: Make
+	foreach() safe against removal of the _current_ element. While
+	this could break some code, the new behavior is consistent with
+	the rest of GLib/GTK+ and probably is what people expect in most
+	cases. (Suggested by Paul Kuykendall, #50071)
+
+Wed May  2 11:10:22 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gutf8.c (g_utf8_to_ucs4_fast): Fix read past end of the string.
+	(#50404, fix from Jonas Borgström)
+	
+Sun Apr 29 00:37:34 2001  Tim Janik  <timj@gtk.org>
+
+	* ghook.[hc]: made hook ids a gulong.
+
+2001-04-20  Dan Winship  <danw@ximian.com>
+
+	* configure.in: Add a check for the Darwin dynamic linker. Use
+	AC_TRY_LINK when checking for "nonposix getpwuid_r" so it notices
+	"no getpwuid_r" correctly.
+
+	* testglib.c (main): Make template[] bigger to prevent an overrun.
+	Remove an unused variable. Initialize error to NULL.
+
+	* tests/gio-test.c (main): Add a cast to prevent a warning when
+	size_t is a long.
+
+	* tests/type-test.c (main): Add an #ifdef to prevent a warning
+	when G_HAVE_GINT64 is defined and G_GINT64_FORMAT isn't.
+
+2001-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* ghash.c, ghash.h: Remove definition of g_hash_table_freeze and
+	g_hash_table_thaw. Instead added G_DISABLE_DEPRECATED-guarded
+	macros to ghash.h to go along the lines of the standard.
+
+	* gscanner.c, gscanner.h: Dito for g_scanner_freeze_symbol_table
+	and g_scanner_thaw_symbol_table.
+
+	* gutils.c, gutils.h: Dito for g_dirname. g_basename is still
+	defined in gutils.c, but declared ing gutils.h only
+	G_DISABLE_DEPRECATED-guarded.
+	
+	* configure.in: Removed bashism in test for the pkg-config
+	version.
+
+	* configure.in: Rewrote test for multithread flag. Now uses
+	localtime_r, which hopefully has a consistent prototype across
+	different platforms. Also it uses a clever double EGREP trick
+	instead of compiling, which could give false positives. Thanks to
+	Dan Winship <danw@ximian.com> for the hint.
+
+Wed Apr 18 17:35:38 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gutils.c (_glib_gettext): Add missing static pointed
+	out by Michael Meeks.
+
+Wed Apr 18 09:37:07 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* MAINTAINERS: Removed. Keeping README, README.cvs-commits
+	HACKING, and AUTHORS up to date is plenty without extra
+	random files that someone thought a module should have.
+	(Actually, I believe this was used for debbugs in the past.)
+
+Tue Apr 17 11:47:07 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Released 1.3.4
+
+	* NEWS: Updated
+
+Tue Apr 17 10:43:36 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gstrfuncs.c: Define _GNU_SOURCE for stpcpy
+
+	* tests/mainloop-test.c (main): Wait for all threads
+	to start before beginning tests.
+
+2001-04-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthreadpool.c (g_thread_pool_thread_proxy): Until now every
+	thread pool always had at least one tread waiting to avoid
+	switching overhead in case a new task would be added soon after
+	one finished. This however means a big waste of threads, if many
+	mostly inactive thread pools are involved. Now such a waiting
+	thread will only wait for half a second (This value is of course
+	very randomly picked) and go to the global threadpool afterwards.
+
+Mon Apr 16 12:04:52 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Remove warnings about conflicts with the
+	stable version.
+
+	* glib-2.0.m4: Fix some of the error text to be halfway
+	up to date.
+
+	* README.in INSTALL.in: Add these to generate README, INSTAL
+	(as in the stable branch). Update.
+
+	* HACKING: Update.
+
+2001-04-16  Havoc Pennington  <hp@redhat.com>
+
+	* gqsort.c: docs
+
+	* gfileutils.c: docs
+
+	* gwin32.c: docs fixes
+
+	* gconvert.c: docs
+
+	* guniprop.c: docs
+
+	* gutf8.c: docs
+
+2001-04-16  Havoc Pennington  <hp@redhat.com>
+
+	* glib-2.0.m4: put AC_PATH_PROG(pkg-config) before "Checking for
+	glib" so the output looks right	
+
+2001-03-23  Havoc Pennington  <hp@redhat.com>
+
+	* gutils.c (g_parse_debug_string): make GDebugKeys argument 
+	const
+
+2001-04-14  Hans Breuer  <hans@breuer.org>
+
+	* glib.def : 
+	* makefile.msc.in : updated
+
+	* gpattern.c : include "gutils.h" to resolve the inline hassle
+
+2001-04-11  Alexander Larsson  <alexl@redhat.com>
+
+	* glib-2.0.m4: Pass pkg-config options
+	before the other args so it works even if
+	POSIXLY_CORRECT is set.
+
+Mon Apr  9 18:57:44 2001  Tim Janik  <timj@gtk.org>
+
+	* configure.in: increment version to 1.3.4 (binary 0, interface 0).
+
+2001-04-05  Christian Rose  <menthos@menthos.com>
+
+	* configure.in: Added sv to ALL_LINGUAS.
+
+Wed Apr  4 09:18:55 2001  Tim Janik  <timj@gtk.org>
+
+	* Released GLib-1.3.3.
+
+Tue Apr  3 20:22:59 2001  Tim Janik  <timj@gtk.org>
+
+	* NEWS: updates.
+
+	* NEWS.pre-1-3: take over old news.
+
+Tue Apr  3 12:38:16 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-config-2.0.in: Exit with an error message that you
+	should use pkg-config instead.
+
+	* configure.in (PACKAGE): Require pkg-config.
+
+	* tests/Makefile.am (EXTRA_DIST): Add utf8.txt.
+
+	* configure.in (GLIB_MICRO_VERSION): Up MICRO to 3,
+	leave interface/binary at 0.
+
+Tue Apr  3 13:46:22 2001  Tim Janik  <timj@gtk.org>
+
+	* glist.[hc]: added g_list_nth_prev() which walks ->prev instead
+	of ->next.
+
+	* gpattern.[hc]: added shell-style pattern matching code from beast,
+	derived from the gtk_pattern_*() code, but with a couple of bug fixes
+	and a number of optimizations.
+
+2001-04-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthreadpool.c: Added documentation.
+
+	* gthreadpool.c: The global thread pool now also is seperated for
+	bound and unbound threads. Only threads with standard stack size
+	go to the global pool. g_thread_pool_new now protects the global
+	setup of inform_mutex etc. with a lock. Fixed some typos. Unlock
+	the queue after g_thread_pool_wakeup_and_stop_all in the proxy.
+
+2001-04-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmain.c: Use the new GRealThread member "context" instead of a
+	GStaticPrivate to store the thread specific main loop context.
+
+	* gthread.c: Added "context" member to GRealThread and updated
+	g_thread_create, g_thread_self and g_thread_cleanup accordingly.
+	
+	* gthread.c, gthread.h: Removed the functions
+	g_static_private_(get|set)_for_thread and adapted
+	g_static_private_(get|set) and g_static_private_free
+	accordingly. This fixes Bug #51435.
+	
+2001-03-30  Sven Neumann  <sven@gimp.org>
+
+	* ghash.[ch]
+	* docs/reference/glib/tmpl/hash_tables.sgml: added new functions
+	g_hash_table_new_full, g_hash_table_replace, g_hash_table_steal and
+	g_hash_table_foreach_steal. Moved most docs out of the template
+	file into the C file. Please proofread the new documentation.
+
+2001-03-29  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Updates.
+	* tests/makefile.mingw.in
+	* tests/makefile.msc.in: Add module-test rules.
+
+Mon Mar 26 14:14:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (INCLUDES): -DG_DISABLE_DEPRECATED
+
+	* gmain.h timeloop.c: Surround the cruftiest stuff with
+	#ifndef G_DISABLE_DEPRECATED.
+
+	* gcompat.h gdate.h: Move compat defines back to 
+	gdate.h, surround with #ifndef G_DISABLE_DEPRECATED. 
+	Remove gcompat.h.
+
+Mon Mar 26 13:34:50 2001  Owen Taylor  <otaylor@redhat.com>
+
+	[ Patch from DindinX  <David.Odin@bigfoot.com>, added docs ]
+ 
+	* gstrfuncs.c, gstrfuncs.h: Add g_stpcpy () for platform that
+	don't have stpcpy ().
+	* gstrfuncs.c (g_strjoin, g_strjoinv, g_strconcat): 
+	use g_stpcpy () so these functions run much faster.
+	* config.h.win32.in, glib.def: add reference to g_stpcpy ()
+	* configure.in: Add a test for the stpcpy () function.
+ 
+2001-03-20  Havoc Pennington  <hp@redhat.com>
+
+	* gutf8.c (g_utf8_strlen): rewrite, based on bug #52328 from
+	Anders
+
+2001-03-19  Havoc Pennington  <hp@redhat.com>
+
+	* gutf8.c (g_unichar_validate): added this function
+
+2001-03-18  Tor Lillqvist  <tml@iki.fi>
+
+	* gspawn-win32.c (SETUP_DEBUG): Add braces to silence gcc -Wall.
+
+	* gspawn-win32-helper.c (write_no_error): Remove unused function.
+
+	* tests/makefile.mingw.in (module-test.exe): Add rules for
+	building module-test.
+
+Wed Mar 14 18:46:54 2001  Tim Janik  <timj@gtk.org>
+
+	* gscanner.[hc]: removed archaic gpointer derived_data; relict and
+	added a GData member instead.
+	
+	* glist.[hc]: added g_list_remove_all().
+
+	* gslist.[hc]: added g_slist_remove_all().
+
+Sat Mar 17 19:54:51 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* timeloop.c: Reorder headers to make FreeBSD happy. 
+
+2001-03-13  Tor Lillqvist  <tml@iki.fi>
+
+	From Edward M. Lee  <tailbert@yahoo.com>:
+
+	* gdate.c (g_date_set_parse): add support for dates that in the
+	form "Wed Mar 14 2001". Running testgdate on cygwin requires this.
+
+Fri Mar  9 18:01:43 2001  Tim Janik  <timj@gtk.org>
+
+	* gscanner.[hc]: made config arg to g_scanner_new() const.
+
+2001-03-12  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/Makefile.am (libmoduletestplugin_b_la_LIBADD,
+	libmoduletestplugin_b_la_LIBADD): Link with the libgmodule la only
+	on Win32.
+
+2001-03-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Define G_PLATFORM_WIN32 here, too.
+
+	* tests/Makefile.am: Use the _LIBADD dependency on libglib only on
+	Win32.
+
+2001-03-09  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Update with some information about using configure
+	and libtool.
+
+2001-03-09  Hans Breuer  <hans@breuer.org>
+
+	* gobject/gobject.def : updated
+
+2001-03-08  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def
+	* gobject/gobject.def
+	* gobject/makefile.mingw.in: Update.
+
+2001-03-08  Sven Neumann  <sven@gimp.org>
+
+	* gtree.[ch]: 
+	* docs/reference/glib/tmpl/trees-binary.sgml: added new function 
+	g_tree_lookup_extended().
+
+Thu Mar  8 16:23:34 2001  Tim Janik  <timj@gtk.org>
+
+	* ghook.[hc]: destruction cleanup. there's one
+	->finalize_hook member in the hooklist now that gets
+	called when a hook should be destroyed, that's it.
+	that function is guarranteed to be called only when
+	all ref_counts to the hook vanished, thus also when
+	the hook is not in call.
+
+2001-03-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in (FLAG_DOES_NOT_WORK): Fix typo and thus bug #51862.
+
+Wed Mar  7 09:32:06 2001  Tim Janik  <timj@gtk.org>
+
+	* glib-object.h: add gvaluearray.h.
+
+	* gstring.[hc]: fixup naming of g_string_sprint*.
+	
+	* gtypes.h: fixed GCompareDataFunc naming.
+
+2001-03-07  Christian Meyer  <chrisime@gnome.org>
+
+	* configure.in: Added de (German) to ALL_LINGUAS.
+
+2001-03-02  Christophe Merlet  <redfox@eikonex.org>
+
+	* configure.in: Added fr (French) to ALL_LINGUAS.
+
+2001-03-01  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c (g_path_is_absolute): (Win32) Remove test for initial
+	double backslash (UNC path), this will of course be matched by the
+	test for an initial G_DIR_SEPARATOR right up front. Silly me.
+	(g_find_program_in_path): Implement on Win32. Append the
+	executable file name suffixes from PATHEXT in turn while looking
+	for the program.
+	(g_find_program_in_path): If the program we are looking for is a
+	relative path in a subdirectory, don't do any path search.
+	(g_get_any_init): (Win32) Also look for the USERPROFILE env var
+	indicating the home directory equivalent.
+	(g_find_program_in_path): (Win32): Use MAXPATHLEN, not PATH_MAX
+	which isn't defined with MSVC.
+
+	* testglib.c (main): Test g_find_program_in_path() on Win32 by
+	looking for more.com and regedit.
+
+	* glib.def: Add g_find_program_in_path.
+
+2001-02-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthreadpool.c (g_thread_pool_thread_proxy): Make
+	max_unused_threads work for -1 as well.
+
+2001-02-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.h (struct _GThread): Change the order to match the order
+	in g_thread_create().
+
+	* gthread.c (g_static_rec_mutex_lock_full): Also do the right
+	thing (behave like 'depth' calls to g_static_rec_mutex_lock) for a
+	mutex, that is already locked.
+
+Thu Feb 22 10:31:36 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_source_remove_poll): Add missing implementation
+	of g_source_remove_poll. (Pointed out by Stefan Westerfeld)
+
+2001-02-21  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c (g_find_program_in_path): Implement on Win32.
+
+	Cygwin support contributed by Stefan Ondrejicka
+	<ondrej@idata.sk>. Hopefully I got it all in while simultaneously
+	adding support for auto*/libtool for mingw.
+
+	* Makefile.am: Changes for auto* support on Cygwin and Win32. Do
+	still distribute the hand-written makefiles and *.win32.in files,
+	though. Use GIO, GSPAWN and PLATFORMDEP macros set by configure.
+	Use -no-undefined. Pass -export-symbols glib.def to libtool.
+	
+	* configure.in: Define G_PLATFORM_WIN32 on both pure Win32 (mingw)
+	and Cygwin. Add AC_CYGWIN, AC_EXEEXT and AC_LIBTOOL_WIN32_DLL
+	calls for Cygwin and mingw support.  Check for %I64u guint64
+	format (in MS C library). Set G_MODULE_IMPL on mingw and
+	Cygwin. Use ac_object and ac_exeext.  Set GIO, GSPAWN, PLATFORMDEP
+	and G_LIBS_EXTRA. Compile timeloop only on Unix. Define OS_WIN32
+	automake conditional on Win32.
+	
+	* glib.h: Include gwin32.h also on Cygwin.
+
+	* gfileutils.c (get_contents_posix): Use O_BINARY (defined as 0 on
+	Unix) for Cygwin's sake.
+
+	* gtimer.c (GETTIME): Reduce #ifdefs, use a macro GETTIME().
+
+	* gconvert.c
+	* gthread.c
+	* gutf8.c
+	* gutils.c: For code needed both on Cygwin and native Win32,
+	test for G_PLATFORM_WIN32.
+
+	* gmarkup.h: Use G_BEGIN_DECLS and G_END_DECLS.
+	
+	* gtypes.h: Refine GLIB_VAR definition. Also check for DLL_EXPORT
+	in case compiling a static library on Win32 or Cygwin.
+
+	* gwin32.c: No <direct.h> on Cygwin. No need for ftruncate() or
+	dirent emulation on Cygwin.
+	(get_package_directory_from_module) Convert return value from
+	GetModuleFileName() to POSIX path on Cygwin.
+
+	* tests/Makefile.am (progs_LDADD): Link with libglib, libgthread
+	and libgmodule as appropriate. Use -no-undefined.
+
+	* gbacktrace.c: Move #ifdefs around a bit on Win32.
+
+2001-02-21  Tor Lillqvist  <tml@iki.fi>
+
+	* gshell.c (unquote_string_inplace): Make static.
+
+	* gthread.h: Include gtypes.h to be sure to get GLIB_VAR
+	definition, remove definition from here.
+
+	* gunicode.h: Remove duplicate GLIB_VAR definition from here, too.
+
+	* gutils.c: (Win32) Use USERPROFILE as home dir if present. On
+	Win2k, HOMEDRIVE and HOMEPATH aren't reliable.
+	
+	* Makefile.am (INCLUDES): Add -DGLIB_COMPILATION.
+
+	* makefile.mingw.in: Remove install target, Windows isn't Unix.
+	(DEFINES): Add -DDLL_EXPORT.
+
+	* testgdate.c
+	* testgdateparser.c
+	* testglib.c: Undefine GLIB_COMPILATION.
+
+	* testglib.c: Make some vars static. Add Cygwin path tests.
+
+	* glib.def: Updates.
+
+	* .cvsignore
+	* */.cvsignore: Ignore also .obj, .dll, .lib and .exe files.
+
+2001-02-19  Hans Breuer <hans@breuer.org>
+
+	* glib/glib.def, gobject/gobject.def : added nissing symbols
+
+	* gobject/makefile.msc : updated
+
+	* glib/gmessages.c : call the "debug interrupt" before exiting the
+	program, if build with msvc as debug version. Which gives the opportunity
+	to see the callstack, etc.
+
+	* glib/gthread.c : thread->pid is only defined #ifdef
+	G_THREAD_USE_PID_SURROGATE
+
+Mon Feb 19 07:32:38 2001  Tim Janik  <timj@gtk.org>
+
+	* glib-config-2.0.in (lib_glib): my name is glib-config-2.0!
+	don't exit with errorcode!=0 for --help or -h.
+	
+	* Makefile.am:
+	* configure.in: build glib-config-2.0.
+
+2001-02-17  Havoc Pennington  <hp@pobox.com>
+
+	* gthread.c: include string.h
+
+        Applied patch from Soeren Sandmann:
+	
+	* testglib.c: const fixes
+
+	* gwin32.h: format cleanups
+
+	* gutils.c (g_atexit): constify a variable
+	(g_find_program_in_path): constification
+	(g_basename): G_CONST_RETURN
+	(g_path_skip_root): G_CONST_RETURN
+	(g_getenv): G_CONST_RETURN
+	(g_get_user_name): G_CONST_RETURN
+	(g_get_real_name): G_CONST_RETURN
+	(g_get_home_dir): G_CONST_RETURN
+	(g_get_tmp_dir): G_CONST_RETURN
+	(g_get_prgname): G_CONST_RETURN
+	(_glib_gettext): G_CONST_RETURN
+
+	* gunicode.h: formatting cleanups
+
+	* gstrfuncs.c (g_strerror): G_CONST_RETURN
+	(g_strsignal): G_CONST_RETURN
+
+	* gspawn.c (g_execute): const on variables
+
+	* gmessages.c (printf_string_upper_bound): fix const on a variable
+
+	* gmem.c (g_mem_chunk_new): make the "name" arg const
+	(struct _GRealMemChunk): make the "name" field const
+
+	* gfileutils.c (g_file_open_tmp): store const return in a const
+	gchar* variable
+
+	* gdataset.c (g_quark_to_string): G_CONST_RETURN
+
+Sat Feb 17 07:26:33 2001  Tim Janik  <timj@gtk.org>
+
+	* configure.in (G_MODULE_HAVE_DLERROR): add check for broken RTLD_GLOBAL
+	(on OSF1 V5.0).
+
+2001-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* acconfig.h, configure.in: Reverted the changes necessary to
+	enlarge the system thread for G_THREAD_USE_PID_SURROGATE.
+
+	* gthread.c: Now implement G_THREAD_USE_PID_SURROGATE in gthread.c
+	instead of gthread/gthread-posix.c. While the latter has the
+	advantage, that it is conceptually cleaner, it makes
+	g_thread_self_posix_impl _very_ slow and that hurts
+	GStaticRecMutex and other things. So the new version is less
+	clean, but faster.
+
+2001-02-09  Havoc Pennington  <hp@redhat.com>
+
+	* gconvert.c (g_convert): don't overwrite errors
+
+	* gerror.c (g_set_error): improve warning message if an error is
+	overwritten	
+	(g_propagate_error): ditto
+
+2001-02-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c, gthread.h: Added functions g_static_rec_mutex_init,
+	g_static_rec_mutex_free, g_static_private_init,
+	g_static_private_free, g_static_rw_lock_init to allow the usage of
+	all those types dynamically. (g_static_rw_lock_free already
+	existed). Aditionally freed static_private indeces are reused
+	now. Untill now the array would just grow if you would use more
+	and more static_private. That required adding a slist of all
+	running threads, which could potentially be of good use later. It
+	is not exported however. Renamed a LOCK and small indentation
+	fixes.
+
+	* tests/thread-test.c: Test the new static_private index freing
+	and reusing feature.
+	
+Mon Feb 12 15:01:09 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in (gtk_doc_min_version): Add check for gtk-doc version.
+
+2001-02-10  Tor Lillqvist  <tml@iki.fi>
+
+	* gtypes.h
+	* gutils.h: Move GLIB_VAR definition from gutils.h to gtypes.h
+
+	* glib.def
+	* gmem.h: Mark glib_mem_profiler_table for export.
+
+	* gwin32.c (get_package_directory_from_module): Don't store
+	address of local variable in hashtable.
+
+2001-02-08  Fatih Demir	<kabalak@kabalak.net>
+
+	* configure.in: Added "tr" to ALL_LINGUAS.
+
+2001-02-04  Tor Lillqvist  <tml@iki.fi>
+
+	* gwin32.c (g_win32_getlocale): Use "nn" for Nynorsk, as nn.po
+	files are appearing now. If the sublanguage starts with '@', don't
+	use a '_' separator. South Africa is 'ZA', not 'SA'.
+
+Sun Feb  4 07:38:32 2001  Tim Janik  <timj@gtk.org>
+
+	* docs/debugging.txt: s/glib_trap_/g_trap_/. add comments on
+	g_trap_instance_signals, g_trace_instance_signals and
+	GRUNTIME_DEBUG.
+
+	* gmem.c: s/glib_trap_/g_trap_/.
+	
+2001-02-04  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/Makefile.am (thread_LDADD): Change order of libs,
+	put progs_LDADD last. Needed for cygwin, says jbdoll@kepri.re.kr.
+
+2001-02-02  Tor Lillqvist  <tml@iki.fi>
+
+	* giochannel.h
+	* giowin32.c
+	* gmain.c: Stylistic cleanups. Use G_STRLOC in g_warning() calls.
+
+	* glib.def: Add missing functions.
+
+2001-02-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c, gthread.h: Added g_static_mutex_init to allow
+	initialization of a GStaticMutex, that can not be initialized with
+	G_STATIC_MUTEX_INIT, for example in allocated structures.
+
+Wed Jan 31 13:46:58 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* acinclude.m4 glib-gettext.m4: Fix problem with --disable-nls.
+
+2001-01-31  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Corresponding change as below to
+	GStaticMutex.
+
+2001-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c, gthread.h: Added g_static_mutex_free to allow using
+	GStaticMutexes with limited lifetime without leaking.
+	
+	* configure.in: GStaticMutex doesn't have to provide extra space
+	for debugging information for G_ERRORCHECK_MUTEXES, as then the
+	non-default implementation (runtime_mutex) is used anyway.
+
+	* gthread.h (g_cond_wait): Added debug information for
+	g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
+
+2001-01-29  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Use the same GMutex structure as the
+	configure-generated glibconfig.h does.
+
+	* gstrfuncs.c (g_strsignal): Declare strsignal() on Cygwin, too,
+	says jbdoll@kepri.re.kr.
+
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c: Broadcast the condition, if there are waiting
+	readers, as all might read at the same time. Only signal the
+	writer thread, if there are no more readers.
+
+2001-01-25  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in
+	* */makefile.mingw.in: Protect the rule to rebuild makefile.mingw
+	if makefile.mingw.in has changed with a check if said .in file
+	exists. (This rule is mainly a convenience for yours truly.)
+
+	* giowin32.c: Socket support rewritten. It was utterly broken, and
+	untested in fact. We still do use a thread for each socket being
+	watched, but instead of blocking in recv() (which of course was
+	plain stupid for sockets being listen()ed on in a server-type
+	application), we block in select(). The read method for sockets
+	calls recv(). It is now possible for the application to call
+	accept(), recv() or send() in the callback, just like on
+	Unix. Tested with code kindly provided by Andrew Lanoix.
+
+	Rename g_io_channel_win32_new_stream_socket() to
+	g_io_channel_win32_new_socket() as it isn't restricted to stream
+	sockets.
+	
+	* gmain.c (g_poll): Related changes in the Win32 version of
+	g_poll(). When polling for messages, always do a PeekMessage()
+	first. We used to miss messages if several were posted between
+	calls to g_poll().
+
+	* giochannel.h: Improve Win32-related comments.
+
+	* gutf8.c: (Win32) Include <stdio.h> for sprintf.
+
+	* tests/gio-test.c: (Win32) Add tests for polling for Windows
+	messages.
+
+	* tests/makefile.mingw.in: Remove superfluous compilation command
+	line.
+
+2001-01-23  Alex Larsson  <alexl@redhat.com>
+
+	* gmain.c (g_source_callback_unref): Free the callback
+	(g_source_set_callback): Initialize the callback refcount
+
+2001-01-20  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c (g_get_codeset): (Win32) Even if g_get_codeset() is
+	currently commented out from gutils.h, fix it to return the same
+	CP%d value as g_get_charset().
+
+2001-01-19  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* gconvert.c: Fix typo.
+	* gfileutils.c: Same here.
+	* configure.in: Added no to ALL_LINGUAS
+	
+2001-01-17  Tor Lillqvist  <tml@iki.fi>
+
+	* gwin32.c (g_win32_getlocale, g_win32_error_message): Add doc
+	comments.
+	(g_win32_get_package_installation_directory): Add one parameter,
+	the name of a DLL in the package. Add possibility to use that to
+	deduce the installation directory if not entered into the
+	Registry. Make the return value dynamically allocated.
+	(g_win32_get_package_installation_subdirectory): New convenience
+	function.
+
+	* gutils.c (GLIB_LOCALE_DIR)
+	* gwin32.h: Adapt accordingly.
+
+	* testglib.c (main): Adapt tests accordingly.
+
+Tue Jan 16 23:20:38 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gutils.c glibintl.h: Optimize for size rather than speed by
+	making _() always call _glib_gettext() instead of conditionally
+	calling gettext() or _glib_gettext_init. glib only uses translated
+	strings in slow error handling code anyways.
+
+	* glibintl.h: g'ify types.
+
+	* Makefile.am: include glibintl.h in _SOURCES
+
+2001-01-17  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Define ENABLE_NLS and GETTEXT_PACKAGE.
+
+	* makefile.mingw.in
+	* makefile.msc.in: Use the GNU intl library.
+
+	* gwin32.c (g_win32_get_package_installation_directory): New
+	function. To be used by various GLib-using packages to get their
+	installation directory, which should be stored in the Registry by
+	some installer.
+
+	* gwin32.h: Declare it.
+
+	* testglib.c (main): Test it.
+
+	* gutils.c: On Win32, define GLIB_LOCALE_DIR using
+	g_win32_get_package_installation_directory().
+
+	* glib.def: Update.
+
+Mon Jan 15 21:39:06 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-2.0.pc.in (Libs) glib-config-2.0.in: Add @INTLLIBS@.
+
+Mon Jan 15 21:12:49 2001  Owen Taylor  <otaylor@redhat.com>
+
+        * configure.in acconfig.h glibintl.h gutils.c
+	po/{Makefile.in.in,POTFILES.in,po2tbl.in}: Add gettext
+	support.
+
+	* glib-gettext.m4 acinclude.m4: Clean up the GTK+ gettext macros
+	some more and put them in this file, though they also need
+	to be included in acinclude.m4 due to the brokeness of
+	aclocal.
+
+	* gspawn.c gspawn-win32.c gutf8.c gconvert.c gfileutils.c
+	gshell.c: Remove dummy _() #defines, include glibintl.m4.
+
+2001-01-09  Tor Lillqvist  <tml@iki.fi>
+
+	* giowin32.c: Rework the changes needed to pass mainloop-test. Now
+	we don't need to call TerminateThread() after all, which is a
+	relief, as the docs have a BIG RED WARNING SIGN about using that
+	API. Instead, when closing a fd channel that has a reader thread
+	running, just mark it as non-running and additionally mark the fd
+	as ripe for closing. When the reader thread hopefully eventually
+	gets something (and EOF or some actual data), it will note that it
+	shouldn't be running, break out of the loop, and close the fd.
+
+	The socket channel closing code should probably be changed
+	similarily, but that will have to wait until I have a test case.
+	
+	(g_pipe_readable_msg, g_io_channel_win32_new_pipe,
+	g_io_channel_win32_new_pipe_with_wakeups,
+	g_io_channel_win32_pipe_request_wakeups,
+	g_io_channel_win32_pipe_readable): Remove these, have been
+	obsolete for some time.
+	
+	* gutils.c (g_basename, g_dirname): Don't warn about deprecation
+	on Win32. Code written for GLib 1.2 doesn't have much choice but
+	to use GLib >= 1.3 on Win32.
+
+	* glib.def: Update.
+
+2001-01-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmem.c: Made g_profile_mutex a GMutex* instead of
+	G_LOCK_DEFINE_STATIC to avoid deadlock for thread implementations
+	without native static mutexes. Contruct g_profile_mutex in
+	g_mem_init().
+
+2001-01-06  Tor Lillqvist  <tml@iki.fi>
+
+	* gconvert.c (g_locale_to_utf8, g_locale_from_utf8): Get len using
+	strlen() if arg is negative in the Win32 code, too.
+
+	* giowin32.c: Changes necessary to be able to run
+	mainloop-test. We can't close the fd that our (internal) reader
+	thread is sitting doing a blocking read() from. We must terminate
+	the thread first. Keep track of thread handle, and close it when
+	thread is dying. Start reader thread with the lower-level
+	CreateThread() instead of _beginthreadex() from the C runtime, in
+	order to be able to use TerminateThread(). Hopefuly this isn't
+	harmful.
+
+	* glib.def: Update.
+
+	* tests/makefile.{mingw,msc}.in (TESTS): Add mainloop-test and
+	unicode-encoding.
+
+	* tests/mainloop-test.c: Portability: <unistd.h>, need <fcntl.h>
+	on Win32.
+
+	* tests/unicode-encoding.c (process): Add missing "line" argument
+	to fail(). On Win32, convert UTF-16LE, as libiconv'c ivonf always
+	converts to UTF-16BE if we ask for unspecific UTF-16.
+	(main) Handle also '\r'.
+
+Fri Jan  5 11:25:42 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in (PACKAGE): move $enable_debug down below
+	checks for GCC to avoid setting CFLAGS prematurely,
+	change checks to avoid adding -g twice.
+
+	* gutf8.c (g_ucs4_to_utf8): Support len < 0 to mean
+	0 termination.
+
+	* gutf8.c (g_utf8_to_ucs4): Terminate result with 0.
+
+	* tests/mainloop-test.c (main): Fix uses of 
+	g_main_loop_destroy().
+
+	* tests/unicode-encoding.c tests/Makefile.am tests/utf8.txt:
+	Tests for unicode-conversion code.
+
+	* gconvert.c (g_convert, g_convert_with_fallback): work around
+	a couple of GNU libc bugs.
+
+	* gconvert.[ch] (g_{locale,filename}_{to,from}_utf8): Standardize
+	arguments to match g_convert(). Document.
+
+	* gunicode.[ch]: 
+	  - Implement conversion functions to and from UTF-16
+	  - Standardize unicode conversion functions on prototype like
+	    g_convert.
+	  - Add a lot of error checking to unicode conversion functions.
+
+	* gunicode.[ch] (g_utf8_to_ucs4_fast): Add fast, non-checking
+	variant of g_utf8_to_ucs4.
+
+	* gutf8.c (g_utf8_validate): 
+	 - add g_return_if_fail (str != NULL).
+	 - add checks for overlong strings, non-valid Unicode characters (>= 110000)
+	   and single surrogates.
+
+2001-01-05  Tor Lillqvist  <tml@iki.fi>
+
+	* testglib.c (main): Add test for g_path_skip_root().
+
+	* gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
+	forward slashes in the template.
+
+	* gutils.c (g_path_skip_root): On Win32, skip the \\server\share
+	part of UNC paths. On all platforms, skip several initial
+	slashes. Add a few comments.
+	(g_get_any_init): On Win32, in case HOME is Unix-style with
+	(forward) slashes (some other applications apparently set it up
+	this way, convert to backslashed form.
+
+	* configure.in (glib_os): Remove stray 'v'. Add case for mingw,
+	although using configure for mingw surely doesn't work yet.
+
+	* glib.def: Update.
+
+2001-01-02  Havoc Pennington  <hp@redhat.com>
+
+	* configure.in: remove glib-config-2.0
+
+	* Makefile.am: remove glib-config-2.0
+
+2001-01-03  Havoc Pennington  <hp@pobox.com>
+
+	* tests/Makefile.am (INCLUDES): -I$(top_srcdir)/gmodule, 
+	fix from Michael Meeks
+
+	* Makefile.am (INCLUDES): DISABLE was spelled wrong
+
+Wed Jan  3 14:10:49 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.[ch]: Switch GMainLoop to be ref/unref, use to
+	make dropping reference to running loop safe.
+
+Wed Dec 13 20:41:49 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_source_unref_internal): Unref callback->cb_data
+	if it was still set when the source is freed. (Usually, this
+	will be done by g_source_destroy.)
+
+2001-01-02  Dan Winship  <danw@helixcode.com>
+
+	* garray.h (g_array_append_val, g_array_prepend_val,
+	g_array_insert_val): Use parentheses around an argument to make
+	these cause an error if you pass a non-lvalue for the value,
+	rather than silently doing the wrong thing.
+
+2000-12-29  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Add GLIB_SIZEOF_VOID_P and GLIB_SIZEOF_LONG.
+
+	* glib.def: Update.
+
+	* {.,*}/makefile.{mingw,msc}.in: Add -DG_ENABLE_DEBUG.
+	
+Fri Dec 29 14:53:18 2000  Tim Janik  <timj@gtk.org>
+
+	* configure.in: we can't grow _cv_ variables by using a backticked
+	expr that refers back to the variable (glib_cv_sizeof_system_thread for
+	G_THREAD_USE_PID_SURROGATE), that'd keep the variable growing every time
+	it's evaluated. quantum states, anyone?)
+
+Thu Dec 28 10:21:46 2000  Tim Janik  <timj@gtk.org>
+
+	* gmem.[hc]: got rid of outdated dmalloc support. provide g_try_malloc()
+	and g_try_realloc() which _may_ fail and return NULL.
+	nuked g_mem_check(), provided GMemVTable for memory function
+	virtualization, alterable at program startup with g_mem_set_vtable().
+	provided glib_mem_profiler_table and g_mem_profile() to support limited
+	profiling information out of the box (uses mprotect() for free()ed areas
+	on linux).
+	provide globally visible G_MEM_ALIGN.
+	buncha cleanups.
+
+	* docs/macros.txt: file to get a clue about the various configuration
+	macros.
+
+	* docs/debugging.txt: explain debugging traps.
+
+	* configure.in: got rid of --enable-mem-check and --enable-mem-profile,
+	define GLIB_SIZEOF_VOID_P and GLIB_SIZEOF_LONG. check malloc prototypes
+	and define SANE_MALLOC_PROTOS is we can use them.
+	<boy, is this file a mess>
+
+	* gutils.c, gscanner.c: fix up compatibility warnings, use g_message().
+
+2000-12-27  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Update.
+
+2000-12-25  Tor Lillqvist  <tml@iki.fi>
+
+	* gmessages.c: (Win32) Use a MessageBox for fatal
+	messages. Collect eror message into a buffer, and display that.
+
+	* glib.def: Update.
+
+	* glibconfig.h.win32.in: Update. Remove unused wchar and wctype
+	macros, add G_MODULE_SUFFIX.
+
+2000-12-24  Ali Abdin  <aliabdin@aucegypt.edu>
+
+	* Makefile.am, gcompat.h, glib.h: New gcompat.h header file
+ 	  as recommended by Havoc.
+
+	* gdate.c, gdate.h, testgdate.c,
+	  docs/reference/glib/glib-sections.txt,
+	  docs/reference/glib/tmpl/date.sgml, tests/date-test.c: Rename some
+	  of the gdate functions to use the '_get' in their name. Patch
+	  reviewed by Havoc.
+		
+2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Determine the suffix of the shared librarries for
+	this system. This is done analogous to
+	ltconfig.sh. G_MODULE_SUFFIX in glibconfig.h is set to either
+	"sl", "dll", or (most often) "so".
+
+	* tests/Makefile.am, tests/module-test.c,
+	tests/libmoduletestplugin_a.c, tests/libmoduletestplugin_b.c:
+	Added new testcase for gmodule. This is mostly copied from
+	gmodule/testgmodule.c, but unlike that is is quiet. (Why BTW are
+	some tests that verbose, not to say loquacious...)
+
+2000-12-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* grand.c: Updated G_RAND_DOUBLE_TRANSFORM to be more
+	accurate. Redid g_rand_double() such that it returns 52 bits after
+	the point instead of 32 as before. That OTOH requires calling
+	g_rand_int() twice. Overhauled g_rand_int_range(), which is easier
+	now thanks to the new precision of g_rand_double(). Thanks to
+	Sverre Johansen <sj@ifi.uio.no> for the hint.
+
+	* grand.h: Added g_rand_boolean() and g_random_boolean()
+	macros. While they could be omitted due to extreme simplicity,
+	they make intention clearer in code and are therefore good to have.
+
+	* grand.c, grand.h: Renamed all 'min' and 'max' parameters to'
+	begin' and 'end' resp. to avoid making people think, that 'max' is
+	included in the interval. 'end' now isn't, whereas 'begin'
+	is. That's similar to the use in the STL.
+
+	* gslist.c, glist.c: Ok, I'm a moron. When I originally
+	implemented ENABLE_GC_FRIENDLY, I forgot to include config.h into
+	the affected files. Now that Alex did that for those two,
+	inevitable typos surfaced, which are now fixed.
+	
+	* garray.c, ghash.c, gqueue.c, gtree.c: Include config.h as well,
+	as ENABLE_GC_FRIENDLY should be known.
+
+2000-12-19  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.in:
+	Added --disable-mem-pools option.
+
+	* glist.c:
+	* gslist.c:
+	* gnode.c:
+	* gmem.c:
+	Disable free list and memory chunks if DISABLE_MEM_POOLS is defined.
+
+2000-12-17  Tor Lillqvist  <tml@iki.fi>
+
+	* gutf8.c (g_utf8_get_charset_internal): (Win32) Use GetACP to get
+	the current ANSI codepage.
+
+	* gunicode.h: Add comment that the static string g_get_charset
+	sets the parameter to point to should be copied in case the
+	charset might be changed later in the program.
+
+2000-12-14  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{mingw,msc}.in: No need to -DGSPAWN_HELPER when
+	compiling gspawn-win32-helper any longer.
+
+	* giowin32.c (g_io_win32_dispatch): Warn if no callback. Call
+	callback correctly.
+	(g_io_win32_create_watch): Fix typo.
+	(g_io_win32_fd_create_watch): Ditto.
+	(g_io_channel_unix_new): If it is a file descriptor (i.e., a Unix
+	fd lookalike provided by the C library), call
+	g_io_channel_win32_new_fd(). If it is a socket (from WinSock),
+	call g_io_cahnnel_win32_new_stream_socket(). Hopefully sockets and
+	fds don't overlap. TODO: Implement also datagram sockets.
+	(g_io_channel_win32_poll): Call g_main_context_get_poll_func().
+
+	* gcompletion.h: Include <unistd.h> only on Unix. Is this
+	inclusion really needed here? OTOH, do include <stddef.h>, for
+	size_t.
+
+	* gmessages.c: (Win32) Don't define a function called "write" that
+	might clash with the prototype from <io.h>, use a #define.
+
+	* glib.def: Update.
+
+	* gmain.c (g_source_add_poll): Don't return a value from void
+	function.
+	(g_main_context_get_poll_func): Compile also for non-Win32, as
+	presumably was intended. The result var is a GPollFunc, not a
+	GPollFunc*. Return the result!
+
+2000-12-13  Havoc Pennington  <hp@redhat.com>
+
+	* gconvert.c (open_converter): make static
+
+	* gutf8.c (g_utf8_validate): Simplify logic a bit, maybe 
+	speeding it up - now we just return FALSE if we had to bail out
+	for any reason before getting to the end of the string, as defined 
+	by a nul byte if len was -1, defined by the len otherwise. This 
+	also fixes a bug where nul bytes were not treated as invalid 
+	when the length was specified.
+
+2000-12-12  Havoc Pennington  <hp@pobox.com>
+
+	* gmain.c (g_main_context_destroy): don't try to use thread stuff
+	unless G_THREADS_ENABLED
+	(g_main_context_query): ditto
+	(g_main_context_check): ditto
+	(g_main_loop_quit): ditto
+
+Tue Dec 12 18:58:22 2000  Tim Janik  <timj@gtk.org>
+
+	* ghash.c (g_hash_table_remove): return whether a value
+	got removed.
+
+Tue Dec 12 15:18:10 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.[ch]: Revert unauthorized changes.
+
+2000-12-12  Elliot Lee  <sopwith@redhat.com>
+
+	* gmain.c, gmain.h (g_main_context_new, g_main_context_destroy):
+	GMainContext useful in implementing some additional styles of
+	main loop usage.  To do this, however, Joe Hacker needs to be able
+	to create/destroy GMainContext's at will. This is just an export
+	of existing functionality, rather than any new functionality.
+
+	They are listed in the "Low level functions for implementing custom
+	main loops" section of the header file, to avoid confusing people.
+
+Sun Dec 10 10:47:11 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_source_destroy_internal): Remove pollfds
+	from the context here, not when actually freeing the
+	source.
+
+	* gmain.c (g_source_unref_internal): Free source list
+	and source, call source->source_funcs->destroy().
+
+	* giochannel.c: Unreference io_channel properly.
+
+Thu Dec  7 15:22:30 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/mainloop-test.c (recurser_start): Add a bunch
+	of unrefs.
+
+	* gmain.c (g_source_attach): Reference the source
+	when adding (pointed out by Elliot)
+
+2000-12-08  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* acglib.m4 (GLIB_AC_DIVERT_BEFORE_HELP): 
+	Rename from GLIB_DIVERT_BEFORE_HELP.  
+	Update to track autoconf 2.49b.
+	* configure.in: Reflect above change.
+	(AC_EGREP_HEADER): Rename from really obselete AC_HEADER_EGREP.
+	(debug_default): Replace "if test `expr ...`" with "case". 
+
+	* tests/Makefile.am (TESTS): Rearrange into other variables, and
+	include run-markup-tests.sh.
+	(TESTS_ENVIRONMENT): New.  Pass $srcdir to tests.
+	(noinst_PROGRAMS): Rename to ...
+	(check_PROGRAMS): ... this.  'automake' ensures that these are
+	built before running the tests.
+	* tests/run-markup-tests.sh: Support $srcdir != $builddir.
+
+2000-12-08  Havoc Pennington  <hp@pobox.com>
+
+	* tests/Makefile.am (TESTS): move markup-test to noinst_PROGRAMS;
+	it isn't a proper test, the proper test would be 
+	run-markup-tests.sh, but that can't go in tests, so we need 
+	a manual make check rule. Didn't do that yet.
+
+2000-12-07  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* gmain.h: Don't put anything after an #endif.
+	* gmain.c: Likewise.
+
+2000-12-06  Havoc Pennington  <hp@pobox.com>
+
+	* tests/strfunc-test.c (main): add g_strdupv test
+
+	* gstrfuncs.c (g_strdupv): Add a function to copy 
+	an array of strings
+
+Tue Dec  5 12:23:04 2000  Owen Taylor  <otaylor@redhat.com>
+
+        * gmain.[hc]: Major change in API for creating sources
+	to handle multiple main loops (GMainContext *). 
+
+	GSources are now exposed as GSource * and implemented
+	with structure derivation.
+
+	* giochannel.[ch]: Changed vtable for GIOChannel to correspond
+	to the new mainloop API, add g_io_channel_create_watch().
+	 
+	* gtypes.h: Move GTimeVal here.
+
+	* gthread.h: Remove gmain.h include to avoid circularity.
+	
+        * giounix.c: Update for new GMain API.
+	 
+	* giowin32.c: Update for new GMain API. (No check for
+	proper compilation or working.)
+
+	* timeloop.c timeloop-basic.c: A benchmarking program for
+	the main loop comparing the main loop against a 
+	hand-written (timeloop-basic.c) variant. 
+
+	* tests/mainloop-test.c: New torture test of mainloop.
+	
+	* docs/Changes-2.0.txt: Started. Added text about
+	changes to GMain.
+
+	* gmain.c (g_main_add_poll_unlocked): Initial fd->revents
+	to zero. (#8482, Benjamin Kahn)
+
+2000-12-01  Tor Lillqvist  <tml@iki.fi>
+
+	* {.,*}/makefile.msc.in: Include make.msc from GLib's build subdir.
+
+	* makefile.{mingw,msc}.in (glib_OBJECTS): Add gunibreak.
+
+	* glib.def: Update correspondingly.
+
+2000-11-21  Havoc Pennington  <hp@pobox.com>
+
+	* gmacros.h: Provide G_CONST_RETURN which is 'const' by default,
+	and nothing when G_DISABLE_CONST_RETURNS is defined.
+
+2000-11-29  Havoc Pennington  <hp@redhat.com>
+
+	* gunidecomp.c (COMBINING_CLASS): 
+	s/UNICODE_LAST_CHAR/G_UNICODE_LAST_CHAR/
+
+	* gunichartables.h: Update for data in Unicode 3.0.1
+
+	* gunidecomp.h: Ditto
+	
+	* gunicode.h (GUnicodeBreakType): Enum for line break properties
+	(g_unichar_break_type): Get the break property for a char
+	
+	* gunibreak.h: Autogenerated line break property tables
+
+	* gunibreak.c (g_unichar_break_type): added 
+	
+	* Makefile.am (EXTRA_DIST): dist gen-unicode-tables.pl
+
+	* Makefile.am (libglib_1_3_la_SOURCES): Add gunibreak.h, gunibreak.c
+	
+	* gen-unicode-tables.pl: Include the script to update the unicode
+	char tables
+
+2000-11-28  Elliot Lee  <sopwith@redhat.com>
+
+	* gmarkup.c: Fix warnings.
+
+	* guniprop.c, gunidecomp.c: Make warnings go away by using
+	GPOINTER_TO_INT() instead of (int).
+
+	* gcompletion.[ch]: Add g_completion_set_compare(),
+	to allow (for example) using case-insensitive completion.
+
+2000-11-28  Tor Lillqvist  <tml@iki.fi>
+
+	Patches by Hans Breuer:
+	
+	* gspawn-win32.c: Move the code for gspawn-win32-helper to its own
+	file.
+
+	* makefile.{mingw,msc}.in: Change accordingly.
+
+	* gspawn-win32-helper.c: New file.
+
+	* Makefile.am (EXTRA_DIST): Add it.
+
+	* gmarkup.c (find_current_text_end): Fix assertion not to check an
+	uninitialised variable.
+
+2000-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c: Set the thread data before locking the mutex, because
+	the locking call might use g_thread_self ().
+
+	* gthread.h: Do only show the location of the locking/unlocking
+	for -DG_ERRORCHECK_MUTEXES and not the name of the mutex. Add the
+	errorcheck capability for g_cond_wait and g_cond_timed_wait as
+	well.	
+
+2000-11-27  Havoc Pennington  <hp@redhat.com>
+
+	* gthread.h: Add void in empty function arg list
+
+2000-11-22  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{mingw,msc}.in: Add gqsort.
+
+	* glib.def: Update.
+
+2000-11-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Add a surrogate for thread priorities using PID
+	niceness for systems with no thread priorities and different PIDs
+	for threads of the same process (most notably: Linux). Define
+	G_THREAD_USE_PID_SURROGATE in that case, as used by
+	gthread-posix.c. Also make the system thread bigger by
+	sizeof (long) to contain the thread's PID.
+
+	* gfileutils.c: Include stdlib.h for mkstemp prototype.
+
+	* gthread.c: Add priority range checks to the affected functions.
+
+	* gthreadpool.c: Remove unused variable.
+
+Mon Nov 20 18:55:17 2000  Jonathan Blandford  <jrb@redhat.com>
+
+	* gtree.[hc]: Patch from David Benson <daveb@idealab.com> to add
+	user_data support to gtree functions.
+
+Mon Nov 13 18:35:52 2000  Jonathan Blandford  <jrb@redhat.com>
+
+	* gtypes.h (GCompareFuncData): new func type to let you use user
+	data when comparing nodes.
+
+	* gslist.c (g_list_sort_with_data): new function to sort with
+	user_data. 
+
+	* glist.c (g_list_sort_with_data): new function to sort with
+	user_data. 
+
+	* garray.[ch]: Added convenience functions to sort arrays.
+
+2000-11-16  Havoc Pennington  <hp@redhat.com>
+
+	* guniprop.c (g_unichar_isspace): Use a switch here, maybe helps 
+	the compiler optimize things. Also, ' ' is a SPACE_SEPARATOR,
+	so don't special case it.
+
+2000-11-17  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add g_trash_stack entry points.
+
+Fri Nov 17 15:43:00 2000  Owen Taylor  <otaylor@redhat.com>
+
+        * Released 1.3.2
+	
+	* NEWS: Update.
+
+	* tests/Makefile.am (dist-hook): Add code to distribute
+	markup test files.
+
+2000-11-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Check for the sched.h header and include it on
+	gthread/gthread-posix.c if available.
+
+	* configure.in: Add -D_POSIX4_DRAFT_SOURCE to
+	GTHREAD_COMPILE_IMPL_DEFINES. Also add -D_POSIX4A_DRAFT10_SOURCE
+	to G_THREAD_CFLAGS. Really deploy GTHREAD_COMPILE_IMPL_DEFINES,
+	when searching for thread libs. Look for sched_* functions in
+	-lrte as well. All of that is necessary on DG/UX.
+
+	* configure.in: Use AC_TRY_COMPILE instead of AC_EGREP_HEADERS in
+	various places to make it work more reliable, to make it accept
+	macros instead of functions etc.
+
+	* configure.in: Replace some NULL's for checks with 0 to make it
+	work without stdio.h everywhere.
+
+	* configure.in, gutils.c: changed the test for getpwuid_r to first
+	test for a posix version and then for a non-posix version. No code
+	change in gutils.c. Again this change deals better with getpwuid_r
+	being a macro and not a function. Most of the above with kind help
+	from Tethys <tet@isengard.europe.dg.com>. This fixes Bug #13403.
+	
+2000-11-14  Tor Lillqvist  <tml@iki.fi>
+
+	* gwin32.h: Make #endif comment match #ifdef.
+
+Mon Nov 13 14:00:20 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Up version to 1.3.2
+
+	* gconvert.h (enum GConvertError): Remove trailing ,
+
+	* gfileutils.c (g_file_open_tmp): Fix comment to 
+	properly describe return value.
+
+2000-11-13  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Add USE_LIBICONV.
+
+	* gconvert.c: Check G_OS_WIN32 only after including glib.h. 
+
+	* glib.def: Update.
+
+2000-11-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c (g_static_rec_mutex_*): Made recursive mutexes also
+	work when the thread system is not (yet) initialized.
+
+Sun Nov 12 18:34:32 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gconvert.[ch]: Create wrapper functions for iconv()
+	so that we can transparently use the native iconv, 
+	libiconv, or (in the future) a mini-iconv included
+	with glib.
+
+	* glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+	* INSTALL: Added note about libiconv.
+
+	* configure.in: Add checks for libiconv from pango. If
+	EILSEQ is not defined in errno.h add define for it into
+	glibconfig.h so g_iconv can use it. (Note, recompiling
+	from a system without EILSEQ to a system with EILSEQ
+	will break binary compatibility)
+
+2000-11-12  Robert Brady  <robert@suse.co.uk>
+
+	* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+
+	* gconvert.c, gconvert.h: Add g_filename_{to,from}_utf8 and
+	g_locale_{to.from}_utf8.  The locale_ variant honours 
+	nl_langinfo(CODESET), the filename_ variant uses UTF-8 unless
+	asked otherwise.
+
+	(g_convert): Add G_CONVERT_ERROR_PARTIAL_INPUT error, if bytesread
+	!= length and no bytesread pointer passed.
+
+Sun Nov 12 15:29:53 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gfileutils.[ch]: template is a reserved word in
+	C++ s/template/tmpl/. 
+
+2000-11-11  Havoc Pennington  <hp@pobox.com>
+
+	* gmarkup.c (g_markup_parse_context_parse): Handle a long stream
+	of bytes containing no UTF-8 character starts
+
+2000-11-11  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add missing entry points.
+
+	* gfileutils.c (g_mkstemp): Improve chance to generate unique
+	names with less effort a bit.
+
+	* gfileutils.h: Add g_file_open_tmp() declaration.
+
+	* testglib.c: Include <io.h> on Win32.
+
+	* makefile.mingw.in: Correct the way to invoke sub-makes.
+
+Sun Nov  5 13:20:54 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-object.h: Add gtypemodule.h
+
+2000-11-11  Tor Lillqvist  <tml@iki.fi>
+
+	* gfileutils.c (g_file_open_tmp): New function, suggested by Havoc
+	earlier this month.
+	(g_mkstemp): Use only one case for letters in temp file name, as
+	this will be used on systems with case-insensitive file systems.
+
+	* testglib.c (main): Test g_mkstemp() and g_file_open_tmp().
+
+2000-11-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthreadpool.c: Don't take other threads with other priorities
+	into account as changing the priority is highly
+	unportable. (Actually using it at all already is unportable, but
+	even sometimes where that works, changing priority is not
+	possible).
+
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* gmarkup.h: rename G_MARKUP_FOO to
+	G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG
+
+	* gmarkup.c: don't start doc comments with "Returns"
+	
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* gmarkup.c: inline docs
+	(unescape_text): properly check strtoul for failure.
+	
+	* gerror.c (g_propagate_error): Free the src error if the dest
+	location is NULL - I'm pretty sure that's what this function was 
+	supposed to do.
+
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* gutils.c (g_find_program_in_path): cleanup docs, sync param 
+	names to those in the header
+
+	* gfileutils.c (g_mkstemp): clean up docs
+
+	* gshell.h: sync param names with param names in .c file
+
+	* gfileutils.h (enum GFileTest): remove trailing comma from last
+	member, confuses gtk-doc
+
+	* gmarkup.h: s/GMarkupErrorType/GMarkupError/g; to follow
+	convention
+
+2000-11-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gasyncqueue.c: Added documentation for asyncronous queues.
+
+	* gspawn.c: Include sys/select.h (some platforms need it for
+	select). 
+
+	* gspawn.c: Changed unportable __FUNCTION__ to the verbatim
+	function name.
+
+2000-10-31  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c
+	* gutils.h
+	* gfileutils.c
+	* gfileutils.h: Actually, g_mkstemp() is better suited in gfileutils.
+
+2000-10-30  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Check for mkstemp.
+
+	* gutils.c (g_mkstemp): New function. If HAVE_MKSTEMP, just call
+	it, otherwise use code lifted from glibc.
+
+	* gutils.h: Declare it.
+
+	* glib.def: Here, too. Plus two missing functions.
+
+2000-10-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gcache.h, gcache.c, ghash.h, ghash.c, grel.c, grel.h, gtypes.h:
+	Introduced new function type GEqualFunc to return TRUE for equal
+	params. This is now used instead of GCompareFunc (which should
+	work akin to strcmp) here. This kind of fixes Bug #14412. Note
+	that technically GCompareFunc and GEqualFunc are still the same
+	types, as gint == gboolean.
+
+	* ghash.h, gutils.c: g_int_equal and g_direct_equal now return
+	gboolean to be really become GEqualFunc.
+
+	* gscanner.c, testglib.c, tests/hash-test.c: Some tiny changes to
+	follow the above change.
+
+2000-10-27  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{mingw,msc}.in (glib_OBJECTS): Add gmarkup.
+
+	* glib.def: Add missing functions.
+
+	* tests/makefile.{mingw,msc}.in (TESTS): Add markup-test.
+
+2000-10-24  Havoc Pennington  <hp@pobox.com>
+
+	* gmarkup.h, gmarkup.c: New module to parse a simple
+	markup language
+	
+	* Makefile.am: add gmarkup.h, gmarkup.c
+
+	* tests/Makefile.am: add markup-test
+
+	* gstring.h (g_string_new_len): new function to create a string
+	with a length
+	(g_string_new): avoid a gratuitous realloc
+
+2000-10-26  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{mingw,msc}.in: Cosmetics.
+
+2000-10-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gstrfuncs.c (g_strsplit): When the string is ended by a
+	delimiter, return an extra empty string just like for a delimiter
+	at the start of the string. This makes the function behave more
+	consistent and also fixes Bug #15026.
+
+Tue Oct 24 22:09:14 2000  Tim Janik  <timj@gtk.org>
+
+	* glib-object.h: added newly added gobject/ headers.
+
+	* gmesage.c: print g_message() output to stderr instead of stdout.
+
+2000-10-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Use one = instead of two, which is plainly wrong.
+
+2000-10-19  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.msc.in: Pass -DGSPAWN_HELPER when building it. Link
+	with user32.lib.
+
+	* gspawn-win32.c
+	* gfileutils.c: Make them compile with picky MSVC.
+
+	* gwin32.h: New file. Move Win32-only stuff that isn't related to
+	GIOChannels here from giochannel.h.
+
+	* Makefile.am: Add it here.
+
+	* giochannel.h: Move stuff to gwin32.h.
+
+	* glib.h: On Win32, include gwin32.h.
+
+Mon Sep 11 10:03:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h convert.c (g_convert_with_fallback): Change
+	ERROR_OTHER to ERROR_FAILED, add some dummy marking with _().
+
+	* docs/reference/glib/glib-sections.txt
+	docs/reference/glib/glib-docs.sgml Update for g_convert,
+	g_unicode_validate.
+
+2000-10-16  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Remove alloca stuff from here. galloca.h
+	takes care of it, correctly.
+
+	* giowin32.c (reader_thread): Some more debugging output.
+	(g_io_channel_win32_poll): Remove unused vars.
+
+	* gfileutils.c: Changes for Win32, with no unistd.h and no
+	S_ISLNK().
+
+	* gspawn-win32.c: Implementation of the g_spwan_* functions for
+	Win32. Due to the general non-Unixness of Win32, much of the
+	functionality that is relatively clean to implement on Unix, is
+	hard to do on Win32. We must use a separate helper program to
+	change directory, close extra file descriptors, redirect the std
+	ones, as needed, and only then start the child process. No child
+	process pid can be returned, unfortunately. Or if we used
+	CreateProcess directly, it probably could. (Now we use the spawnv*
+	functions from msvcrt.)
+
+	* Makefile.am (EXTRA_DIST): Add gspawn-win32.c
+
+	* glib.def: Add new entry points.
+
+	* glib.def
+	* giowin32.c: Remove g_io_channel_win32_wait_for_condition(),
+	g_io_channel_win32_poll() subsumes it.
+
+	* gbacktrace.h: G_BREAKPOINT for MSVC (on the ix86).
+
+	* gwin32.c (g_win32_getlocale): Use "sp" for
+	LANG_CROATIAN+SUBLANG_SERBIAN_LATIN.
+
+	* makefile.{mingw,msc}.in (glib_OBJECTS): Add new files.
+	Add gspawn-win32-helper.exe rule.
+
+	* tests/makefile.{mingw,msc}.in (TESTS): Add shell-test and
+	spawn-test.
+
+	* tests/spawn-test.c: (run_tests): On Win32, don't try to run
+	/bin/sh, but ipconfig (no special significance in choosing that,
+	just a program that outputs something to stdout).
+
+2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>
+
+	Remove need for acconfig.h, and misc. cleanups.
+	* acglib.m4 (GLIB_SIZEOF): Add 'autoheader' comment to
+	AC_DEFINE_UNQUOTED.
+	(GLIB_BYTE_CONTENTS): Likewise.
+
+	* configure.in: Add 'autoheader' comments to all AC_DEFINE(...)
+	and AC_DEFINE_UNQUOTED(...) lines.
+	Replace AC_MSG_CHECKING/AC_CACHE_VAL with AC_CACHE_CHECK.
+	(AM_PROG_LIBTOOL): Move after AC_PROG_CC.
+	
+	* acconfig.h: Empty out.
+
+	* Makefile.am (BUILT_EXTRA_DIST): New variable.  List 'dist'able
+	files that are created in the builddir.
+	(dist-hook): Handle those files.
+	(libglib_1_3_la_SOURCES): Remove @ALLOCA@.  @ALLOCA@ should only
+	be used in an _LDADD or _LIBADD, since it expands (if necessary)
+	to 'alloca.o'.
+
+	* tests/Makefile.am (BUILT_EXTRA_DIST): New variable.
+	(dist-hook): Handle $(BUILT_EXTRA_DIST).
+	
+2000-10-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* grand.c: Added inline documentation. 
+
+	* gtypes.h, gnode.h, gutils.h: Readded GFreeFunc,
+	g_node_insert_after and g_find_program_in_path resp., which
+	mysteriously disappeared during the glib.h dissection.
+
+2000-10-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glibconfig.h.win32.in: Adapted accordingly to header separation
+	and GLIB_HAVE_ALLOCA_H renaming.
+
+	* Makefile.am: Added the new headers to glibinclude_HEADERS.
+
+	* glib.h: Forgot to include gerror.h.
+
+	* glib.h, galloca.h, garray.h, gasyncqueue.h, gbacktrace.h,
+	gcache.h, gcompletion.h, gconvert.h, gdataset.h, gdate.h, ghash.h,
+	ghook.h, giochannel.h, glist.h , gmacros.h, gmain.h, gmem.h,
+	gmessages.h, gnode.h, gprimes.h, gquark.h, gqueue.h, grand.h,
+	grel.h, gscanner.h, gslist.h, gstrfuncs.h, gstring.h, gthread.h,
+	gthreadpool.h, gtimer.h, gtree.h, gtypes.h, gutils.h: Split glib.h
+	into many header files mostly according to the resp. *.c-files.
+	
+	* gmacros.h: Added G_BEGIN_DECLS and G_END_DECLS to mean: 'in case
+	of C++: extern "C" { ... }' analogous to glibc __BEGIN_DECLS and
+	__END_DECLS.
+
+	* configure.in, gerror.h, gfileutils.h, gshell.h, gspawn.h,
+	gunicode.h, : Changed guard-macro names to something more
+	consistent.
+
+	* configure.in, *.h: Use G_BEGIN_DECLS and G_END_DECLS.
+
+	* configure.in: Defined GLIB_HAVE_ALLOCA_H instead of including
+	alloca.h in glibconfig.h, GLIB_HAVE_ALLOCA_H is used in glib.h.
+
+	* configure.in: Removed cruft from old threading code.
+
+2000-10-09  Raja R Harinath  <harinath@cs.umn.edu>
+
+	Work with beta autoconf 2.50.
+	* configure.in (GLIB_MAJOR_VERSION): Use GLIB_DIVERT_BEFORE_HELP
+	instead of AC_DIVERT_PUSH(),AC_DIVERT_POP.
+	(AC_CHECK_HEADERS): Remove redundant AC_DEFINE(HAVE_...).
+	(REALLOC_0_WORKS): Move AC_DEFINE outside AC_CACHE_VAL.
+	(dlopen): Quote nested AC_CHECK_... calls.
+
+	* acglib.m4 (GLIB_TR_SH, GLIB_TR_CPP): Utility macros copied from
+	beta autoconf 2.50.
+	(GLIB_DIVERT_BEFORE_HELP): New macro that works both with autoconf
+	2.13 and beta autoconf 2.50.
+	(GLIB_SIZEOF, GLIB_BYTECONTENTS): Use GLIB_TR_*.
+
+	* Makefile.am (CONFIGURE_DEPENDENCIES): Use this to specify
+	that 'configure' depends on acglib.m4.
+
+2000-10-09  Havoc Pennington  <hp@redhat.com>
+
+	* Makefile.am, tests/Makefile.am: Add new files.
+
+	* tests/spawn-test.c, tests/shell-test.c: new tests for
+	the shell/spawn stuff
+
+	* gutils.c (g_find_program_in_path): convert a relative
+	program name into an absolute pathname to an existing 
+	executable
+
+	* gspawn.h, gspawn.c: New fork/exec API
+
+	* gshell.h, gshell.c: Shell-related utilities, at the moment
+	simply routines to parse argv and quote/unquote strings
+
+	* guniprop.c (g_unichar_isspace): Return TRUE for the 
+	ASCII space characters isspace() returns TRUE for.
+
+	* gfileutils.c (g_file_get_contents): Convenience function 
+	to slurp entire file into a string and return it. Partially
+	written by Joel Becker.
+	(g_file_test): file test function
+
+2000-10-06  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.msc.in: Revamp to be like makefile.mingw.in, make
+	the MSVC build actually work again.
+
+	* gmodule/makefile.msc.in
+	* gobject/makefile.msc.in
+	* gthread/makefile.msc.in: New files, like their mingw counterparts.
+
+	* gmodule/Makefile.am
+	* gobject/Makefile.am
+	* gthread/Makefile.am: Make and distribute them.
+
+	* */makefile.mingw.in: Allow override of GLib version number from
+	the build/win32/module.defs file.
+
+	* glib.def: Add new entry point.
+
+	* tests/gio-test.c (main): Fix the Win32-only code to use current
+	API, g_io_channel_win32_make_pollfd() and g_io_channel_win32_poll().
+
+	Fixes from Hans Breuer:
+
+	* glib.h (struct DIR): Keep the last readdir result cached inside
+	the DIR struct, to enable several DIRs being open simultaneously.
+
+	* gwin32.c (g_win32_readdir): Use the above instead of static.
+
+	* giowin32.c (g_io_channel_win32_make_pollfd): Insert cast to keep
+	MSVC happy.
+
+2000-10-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h: Changed alloca stuff a bit: when we have a working
+	alloca.h, we're not messing with alloca any further. Should fix a
+	bug reported by Bernd Demian <wega@csc-dd.de>.
+
+2000-09-29  Jonathan Blandford  <jrb@redhat.com>
+
+	* gnode.c (g_node_insert_after): Added function to keep symmetry
+	with g_node_insert_before. 
+
+2000-09-29  Martin Baulig  <baulig@suse.de>
+
+	Several minor ANSI C fixes.
+
+	Added missing casts:
+	* gdate.c (g_date_fill_parse_tokens): `s = (guchar *) str'.
+	* gmain.c (g_idle_dispatch): `func = (GSourceFunc) source_data'.
+	(g_idle_add_full): `(gpointer) function' in call to g_source_add().
+	* gstrfuncs.c (g_strdown): `s = (guchar *) string' and
+	`return (gchar *) string'.
+	(g_strup): Likewise.
+	(g_strchug): `start = (guchar*) string' in 1st for() argument;
+	`strlen ((gchar *) start)' in call to g_memmove().
+	* gstring.c (g_string_down): `s = (guchar *) string->str'.
+	(g_string_up): Likewise.
+	* gthreadpool.c (stop_this_thread_marker):
+	`(gpointer) &g_thread_pool_new'.
+	* gunidecomp.h (decomp_table[]): Cast all the strings to
+	`unsigned char *'.
+
+	Put text following #endif into comments:
+	* gmain.c: here.
+
+2000-09-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in, glib.h: Added errorcheck mutexes. These are
+	activated through the preprocessor symbol
+	G_ERRORCHECK_MUTEXES. Need to add an extra word to StaticMutex in
+	order to achieve this. g_(static_)mutex_* functions instrument the
+	mutex operations with mutex name and location, when compiled with
+	-DG_ERRORCHECK_MUTEXES. g_thread_init activates the errorcheck
+	mutexes, when compiled with -DG_ERRORCHECK_MUTEXES.
+
+2000-09-28  Havoc Pennington  <hp@pobox.com>
+
+	* glib.h (GThreadPriority): fix indentation
+	(GConvertError): generic error is conventionally called
+	_FAILED rather than _OTHER, at least at the moment, 
+	according to GError docs in docs/reference.
+
+	* gconvert.c: s/_OTHER/_FAILED/
+
+2000-09-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Adjusted the test for an unimplemented
+	 getpwuid_r. Info from Michael Pruett. This is just a forward
+	 merge from glib-1-2.
+
+	* configure.in: Moved determination of G_THREAD_FLAGS before
+	G_THREAD_LIBS. Check for UnixWare systems and set the right cflags
+	and libs there (it needs -Kthread for the native compiler and
+	-pthread for gcc). Thanks to Boyd Lynn Gerber <gerberb@zenez.com>
+	for the info.
+
+	* configure.in: Fail immediately, when no thread library is found,
+	instead of continuing searching for rt libs etc. Changed almost
+	all occurances of $enable_threads to $have_threads, as that's,
+	what we want.
+
+	* tests/threadpool-test.c: Define vars inside the guard to avoid
+	warnings.
+
+	* configure.in, tests/type-test.c: Some platforms support 64 bit
+	'long long', but you can not printf or scanf them. In that case,
+	don't define G_G{UINT|INT}64_FORMAT. Changed the type-test program
+	to reflect that.
+
+	* gutils.c (g_get_current_dir): max_len can't be initialized
+	statically as it might call a function. So do it at first call.
+
+Tue Sep 26 2000 Elliot Lee <sopwith@redhat.com>
+
+	* glib.h: Add G_GNUC_PURE macro (but don't use it anywhere).
+
+Mon Sep 25 2000 Elliot Lee <sopwith@redhat.com>
+
+	* garray.c, glib.h, gmem.c: Add a few missing G_GNUC_CONST's.
+
+2000-09-21  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: Add gconvert.o. Use libiconv.
+
+	* config.h.win32.in: Define HAVE_GETCWD.
+
+	* glib.def: Add new entry points.
+
+2000-09-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: The last released automake (1.4) still requires
+	AM_PROG_LIBTOOL instead of AC_PROG_LIBTOOL, so use that for the
+	time being.
+
+2000-09-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* acconfig.h, configure.in, gutils.c: Test for the existence of
+	getcwd, and use it only when found.
+
+	* glib.h: Only use the gcc-variable-macro-argument-extension for
+	gcc >= 2.4. Both patches from Jonas Oberg <jonas@gnu.org>.
+
+Mon Sep 18 10:58:21 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gutf8.c: Implement g_ucs4_to_utf8 which was in
+	the header file but not implemented.
+
+Sun Sep 17 2000 Elliot Lee <sopwith@redhat.com>
+
+	* glib.h configure.in: Define g_alloca() as an
+	alloca-that-works-anywhere.
+
+	* gconvert.c: Fix warnings which could have caused problems on
+	64-bit platforms.
+
+Sun Sep 10 12:37:40 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h gconvert.c (g_convert): Havoc Pennington's implementation 
+	of convenient character set conversion using iconv, with
+	the addition of GError. We probably need a fallback that
+	just does conversions between, say UTF-8,16,32 and ISO-8859-1
+	for targets without iconv at all.
+
+	Also add g_convert_with_fallback() to take care of conversions 
+	where we accept some loss going to the target encoding.
+
+2000-09-10  Havoc Pennington  <hp@redhat.com>
+
+	* gutf8.c (g_utf8_validate): Add this function.
+
+Sat Sep  9 18:50:42 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gstrfuncs.c (g_strescape): Add a missing g_return_if_fail().
+
+Mon Aug 21 03:57:46 2000  Tim Janik  <timj@gtk.org>
+
+	* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
+	implement BREAKPOINT() as raise (5 /* SIGTRAP */);
+
+	* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
+	to turn on compilation of inline function implementations provided
+	in header files with extern linkage.
+	wrap inline function implementations into ifdef __G_UTILS_C__, so we
+	really only compile them for gutils.c and not also into arbitrary user
+	code that wants to make use of G_IMPLEMENT_INLINES.
+	adjusted comment apropriately.
+
+	* gutils.c: to turn on compilation of inline functions, provide
+	#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
+
+2000-09-06  Havoc Pennington  <hp@redhat.com>
+
+	* gerror.c: docs
+
+	* docs/reference/glib/tmpl/error_reporting.sgml: docs
+
+Wed Sep  6 10:28:34 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* guniprop.c gunicode.h gutf8.c: Some inline docs fixes.
+
+2000-09-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h, gtimer.c, tests/thread-test.c:
+	s/G_MICROSEC/G_USEC_PER_SEC/
+
+	* glib.h: Removed G_G{U}{SHORT|INT|LONG}_FORMAT from glib.h, as
+	they are really superfluous.
+
+Tue Sep  5 20:16:27 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in docs/Makefile.am: Add gtk-doc checks
+	for newly added docs/reference/ subdir.
+
+2000-09-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread.c (g_thread_error_quark): Don't use a G_LOCK, as it
+	isn't necessary.
+
+2000-09-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gstring.c (g_string_free): Use g_return_val_if_fail instead of
+	g_return_if_fail, as the function now is supposed to return
+	something.
+
+	* gerror.c, gerror.h (g_propagte_error): Added function
+	g_propagte_error to hand over local errors to the calling
+	function.
+
+	* glib.h: Include gerror.h before it is used for some g_thread_*
+	functions.
+
+	* gthread.c, gthreadpool.c, glib.h: Enable error reporting for
+	thread creation, namely for g_thread_create, g_thread_pool_new,
+	g_thread_pool_push and g_thread_pool_set_max_threads.
+
+	* tests/thread-test.c, tests/threadpool-test.c: Adapted
+	accordingly.
+
+2000-08-31  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h
+	* glib.def
+	* giowin32.c (g_io_channel_win32_make_pollfd): New function, to
+	make a GPollFD from a GIOChannel. Creates the events and starts
+	the reader thread if necessary.
+
+	* glib.h
+	* giowin32.c (g_io_channel_win32_poll): No use for separate
+	condition parameter.
+
+	* gmain.c (g_get_current_time): (Win32): Simplify, use
+	GetSystemTimeAsFileTime().
+
+2000-08-27  Tor Lillqvist  <tml@iki.fi>
+
+	* giowin32.c (g_io_channel_win32_poll): New function, otherwise
+	like g_io_channel_win32_wait_for_condition(), but accept several
+	GPollFDs.
+	(g_io_channel_win32_wait_for_condition): Call
+	g_io_channel_win32_poll().
+
+	* glib.h: Declare g_io_channel_win32_poll().
+
+	* gwin32.c (g_win32_error_message): Don't believe return value
+	from FormatMessage.
+
+2000-08-25 Elliot Lee <sopwith@redhat.com>
+
+	* glib.h, gunicode.h, gmodule/gmodule.h:
+	Mark the following functions G_GNUC_CONST (to allow optimization)
+	because their results are a function of only their parameters: 
+	g_int_hash, g_int_equal, g_direct_hash, g_direct_equal,
+	g_quark_to_string, g_date_is_leap_year, g_date_days_in_month,
+	g_date_monday_weeks_in_year, g_date_sunday_weeks_in_year,
+	g_spaced_primes_closest, g_unichar_is*, g_unichar_to*,
+	g_unichar_*digit_value, g_unichar_type
+
+2000-08-21 Elliot Lee <sopwith@redhat.com>
+
+	* gobject/Makefile.am, gobject/gobject-query.c,
+	gobject/gparamspecs.c: Fix inclusion of config.h
+
+Mon Aug 21 14:46:23 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gio-test.c: Fix a couple of trivial bugs that
+	were causing warnings.
+
+Mon Aug 21 14:39:36 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h: Use C99 varargs macros where possible 
+	(check __STDC_VERSION__), otherwise, on gcc, use an alternate 
+	form of gcc varargs which is more likely
+	to be supported going forward. (Based on some code
+	from Raja Harinath)
+
+2000-08-17  Darin Adler  <darin@eazel.com>
+
+	* glib.h:
+	* garray.c: (g_array_free), (g_ptr_array_free),
+	(g_byte_array_free): Return the data left behind.
+	* gstring.c: (g_string_free): Return the data left behind.
+
+	Changed the free calls that leave data behind so they
+	return a pointer to the left-behind data, NULL if told not
+	to leave anything behind. This makes these calls easier
+	to use correctly, without any incompatible API change for
+	callers that don't know about the return value. Of course,
+	it would be even clearer if the free calls weren't dual-purpose
+	in the first place.
+
+2000-08-12  Tor Lillqvist  <tml@iki.fi>
+
+	* giowin32.c: Some indentation and spacing fixes. Add some more
+	logging.
+	(g_io_win32_add_watch): New function, with common code from
+	g_io_win32_fd_add_watch and g_io_win32_sock_add_watch. Don't start
+	more than one reader thread for a GIOChannel. We should obviously
+	have just one reader thread reading a file descriptor or socket.
+
+2000-08-10  Havoc Pennington  <hp@redhat.com>
+
+	* gthread-2.0.pc.in (Cflags): don't duplicate glib Cflags
+
+	* gmodule-2.0.pc.in (Cflags): don't duplicate glib Cflags
+
+	* gobject-2.0.pc.in (Cflags): don't duplicate Cflags from glib
+	itself
+
+2000-08-10  Havoc Pennington  <hp@redhat.com>
+
+	* glib-2.0.pc.in (Cflags): Look in glib-2.0/include for
+	glibconfig.h
+
+2000-08-07  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/gio-test.c (shutdown_source): New function, that calls
+	g_source_remove(). Check return value of g_source_remove(), and
+	decrement running subprocess counter only if g_source_remove()
+	actually did remove the source.
+
+	(recv_message): Call shutdown_source() on EOF condition. Return
+	FALSE on G_IO_HUP and G_IO_ERR condition. Fix printf format typo.
+
+Sun Aug  6 20:06:02 2000  Tim Janik  <timj@gtk.org>
+
+	* gmessages.c (g_log_domain_check_free): keep *last updated while
+	running through the domain list, so we don't screw up the removal,
+	patch provided by Gady Kozma <gadykozma@hotmail.com>.
+
+Sun Aug  6 20:03:41 2000  Tim Janik  <timj@gtk.org>
+
+	* gmessages.c (g_log_remove_handler): keep *last updated while running
+	through the handler list, so we don't screw up the removal.
+
+Sun Jul 30 16:54:13 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gunicode.h: Fix stray character
+
+	* gutf8.c (g_unichar_to_utf8): Allow outbuf to be NULL, in
+	which case we just compute the length.
+
+2000-07-31  Havoc Pennington  <hp@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): forgot to add .pc.in to EXTRA_DIST
+
+2000-07-31  Havoc Pennington  <hp@redhat.com>
+
+	* glib-2.0.pc.in, gobject-2.0.pc.in, gmodule-2.0.pc.in,
+	gobject-2.0.pc.in: pkg-config data files	 
+
+	* Makefile.am: Install/dist the .pc files
+
+	* configure.in: Output the .pc files
+
+2000-07-31  Tor Lillqvist  <tml@iki.fi>
+
+	* giowin32.c (buffer_read): The code didn't compile (must
+	have been sleepy when committing). "return" instead of "break"
+
+	(g_io_win32_fd_add_watch): Cannot check if the file descriptor is
+	readable by calling ReadFile to read zero bytes. ReadFile blocks
+	on NT even if trying to read nothing at all. So, don't check if
+	file descriptor is readable; assume this function isn't called
+	otherwise.
+
+Sun Jul 30 10:44:16 2000  Tim Janik  <timj@gtk.org>
+
+	* gmain.c (g_get_current_time): fix tor's recent changes which
+	got rid of a required variable in the non-windows path.
+
+2000-07-30  Tor Lillqvist  <tml@iki.fi>
+
+	Finally, a new and improved IO Channel and condition watch
+	implementation for Win32. Based on code provided by Craig Setera.
+
+	When watching file descriptors, for which there is no select()
+	like functionality on Win32 that would work on all Win32 platforms
+	for all types of file descriptors (including anonymous pipes), we
+	start a new thread that blocks while trying to read from the file
+	descriptor. When the read returns, a Win32 Event is signalled that
+	the polling routine eventually notices. Meanwhile, the data being
+	read is stored in a circular buffer, from where the IO channel's
+	read() method picks it up.
+
+	If the buffer fills up the reading thread has to wait for space
+	becoming available. For this another Win32 Event is used. The IO
+	Channel's read() method signals this when it has read some data
+	out of the buffer.
+
+	The separate reader thread(s), and the circular buffer(s) with
+	associated events mean lots of possibilities for fun parallelism
+	errors. But it seems to work OK, i.e. GIMP runs.
+
+	* gmain.c: Small changes to the Win32 polling function.
+	(g_main_win32_get_poll_func): New function. Perhaps it would be a
+	good idea to provide this on all platforms.
+
+	* giowin32.c: The bulk of the new implementation.
+	(g_io_channel_win32_wait_for_condition): New function. To be used
+	where on Unix one does a select() on the channel's fd, like
+	libgimp's gimp_extension_process(). Could be provided on all
+	platforms.
+
+	* glib.h: Update documentation for IO Channels on Win32. Remove
+	the declarations for the as of now obsolete old functions related
+	to IO Channels for pipes with "wakeup" messages.
+
+	* glib.def: Some new functions.
+
+	* tests/gio-test.c: New file, to test GIOChannel and main loop.
+
+	* tests/Makefile.am
+	* tests/makefile.mingw.in: Add it.
+
+	(Later the same night:)
+
+	* giowin32.c: Compile in the debugging code all the time, but only
+	output debug messages if told so. Add (unadvertised) function to
+	turn on/off debug messages for a channel.
+
+	(buffer_read): Don't loop. It is expected behaviour to return a
+	short read occasionally, for instance when reading from
+	pipes. It's the calling code that should loop if it *knows* how
+	much the writer has written.
+
+	* tests/gio-test.c: Correct the program's name in the output.
+	(recv_message): Loop calling g_io_channel_read() (in a new
+	function read_all()) until we have all the bytes we want (that we
+	know the writer has written/will write).
+
+Thu Jul 27 05:15:11 2000  Tim Janik  <timj@gtk.org>
+
+	* gstrfuncs.c (g_strlcpy, g_strlcat): completed tor's fix
+	to cover both #ifdef branches.
+
+2000-07-26  Tor Lillqvist  <tml@iki.fi>
+
+	* gstrfuncs.c (g_strlcpy, g_strlcat): Return 0 on error, not NULL.
+
+	* glib.def: Add g_strlcpy, g_strlcat.
+
+	* glibconfig.h.win32.in: Add gsize and gssize.
+
+Wed Jul 26 12:59:31 2000  Tim Janik  <timj@gtk.org>
+
+	* *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that
+	updates the license headers to the GNU Lesser General Public License,
+	as well as updating the copyright year to 2000.
+
+Wed Jul 26 05:47:48 2000  Tim Janik  <timj@gtk.org>
+
+	* configure.in:
+	* testglib.c:
+	* gstrfuncs.c:
+	* glib.h: added g_strlcat() and g_strlcpy() wrappers, supplied by
+	David Wheeler <dwheeler@ida.org>:
+
+	* glib.h, gstrfuncs.c: added g_strlcpy and g_strlcat to support
+	  safe manipulation of fixed-length string buffers.
+	  These functions were originally developed by Todd Miller to simplify
+	  development of security-related programs, and
+	  are available on many (but not all) Unix-like systems,
+	  including OpenBSD, FreeBSD, and Solaris.  See
+	  ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3
+	  and http://www.openbsd.org/security.html.
+	  If there's a strlcpy/strlcat on the system, it's called, otherwise
+	  an implementation is provided.
+
+	* testglib.c: Added tests for g_strlcpy, g_strlcat.
+
+Wed Jul 26 05:03:24 2000  Tim Janik  <timj@gtk.org>
+
+	* acglib.m4 (GLIB_SIZEOF): include <stdlib.h> and <stddef.h> if
+	STDC_HEADERS is defined.
+
+	* glib.h:
+	* glibconfig.h: define gsize and gssize in terms of GLIB_SIZEOF_SIZE_T
+
+	* glib.h (g_return_if_reached): applied darin's fix for copy'n
+	paste error in the macro implementation.
+
+Wed Jul 26 00:46:03 2000  Tim Janik  <timj@gtk.org>
+
+	* glib.h: applied patch from Darin Adler <darin@eazel.com> which
+	supplies g_return_if_reached(), g_return_val_if_reached() and
+	g_critical().
+
+2000-07-22  Tor Lillqvist  <tml@iki.fi>
+
+	* build-dll: Fix resource handling, the resource file got left out
+	from the DLL after all... Remove the WIN32APIHEADERS, not needed
+	with current windres.
+
+	* glib.def: Add new functions.
+
+2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c, glib.h: Mark the functions g_basename and g_dirname
+	deprecated. They will issue an warning once, when compiled with
+	G_ENABLE_DEBUG, but continue to work as before. Instead the
+	functions g_path_get_basename and g_path_get_dirname should be
+	used, which BOTH return newly allocated memory, that has to freed
+	by g_free. The new g_path_get_basename now strips trailing slashes
+	from the path. This fixes #5097. For discussion see
+	http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+	* gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+	functions instead of the old ones.
+
+	* ghash.c, gscanner.c, glib.h: Mark the functions
+	g_hash_table_freeze, g_hash_table_thaw and thus
+	g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
+	deprecated. They will issue an warning once, when compiled with
+	G_ENABLE_DEBUG. This fixes Bug #3883. For discussion see
+	http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+2000-07-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in, glib.h: glibconfig.h and glib.h now include files
+	outside of the extern "C" block. Makes some C++ compiler
+	happy. Reported by Denis Vakatov <vakatov@peony.nlm.nih.gov>.
+
+Sat Jul 15 23:49:03 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib.texi: Remove incomplete start of info file -
+	real docs are in RDP.	
+
+Sat Jul 15 22:44:22 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Add build/Makefile and 
+	build/win32/Makefile to AC_OUTPUT() so things build
+	again.
+
+Sat Jul 15 09:11:46 2000  Tim Janik  <timj@gtk.org>
+
+	* gstrfuncs.c (g_strncasecmp): fixed an off by 0 error (yeah,
+	the function went off when the while (n--) loop failed due to
+	n==0 ;), reported by Jean-Louis HAMEL <jlhamel@club-internet.fr>.
+
+2000-07-15  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (SUBDIRS): Include the "build" module in GLib, too,
+	to make it more self-contained. If your CVS client doesn't
+	automatically get it, do a cvs get build in glib.
+
+	* */makefile.mingw.in: Include make.mingw from build in the glib
+	source directory.
+
+Fri Jul 14 16:26:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Release 1.3.1
+
+Fri Jul 14 12:22:49 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in Makefile.am glib-config.m4 glib.m4: Move
+	glib-config to glib-config-2.0 move glib.m4 to
+	glib-2.0.m4
+
+	* Makefile.am gobject/Makefile.am gmodule/Makefile.am
+	gthread/Makefile.am tests/Makefile.am: Change 
+	library names to libglib-1.3.la, etc, so that we
+	can distinguish glib-1.2 and glib-2.0 on the linkline.
+
+	* Makefile.am gobject/Makefile.am gmodule/Makefile.am:
+	Move include files into /usr/include/glib-2.0.
+
+Thu Jul  6 18:54:49 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* docs/Makefile.am (EXTRA_DIST): Remove info files
+	from the build.
+
+2000-07-14  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add g_error functions.
+
+	* makefile.mingw.in: Add gbacktrace.o.
+
+	* gbacktrace.c: No need to include <process.h>.
+
+2000-07-12  Havoc Pennington  <hp@redhat.com>
+
+	* glib.h: #include <gerror.h>
+
+	* Makefile.am (include_HEADERS): Add gerror.h
+	(libglib_la_SOURCES): Add gbacktrace.c
+
+	* gbacktrace.c: Move g_on_error_query() in here (moved on the 
+	server, so history is preserved)
+
+	* gerror.h: GError interface
+
+	* gerror.c: GError implementation replaces stuff that's now in 
+	gbacktrace.c
+
+Sun Jul  9 21:20:45 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gunicode.h: Include stddef.h instead of stdlib.h
+
+2000-07-08  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h (GLIB_VAR): Rename the GUTILS_C_VAR macro to GLIB_VAR.
+
+	* gunicode.h: Mark the g_utf8_skip array with GLIB_VAR.
+
+	* glib.def: Add two missing entry points.
+
+Thu Jul  6 15:35:28 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Release 1.3.1
+
+	* Makefile.am (EXTRA_DIST): Dist fixes.
+
+	* configure.in: Moderate the warnings just a little bit.
+
+2000-07-05  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Update.
+
+Mon Jul  3 17:58:02 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gutf8.c (g_utf8_get_charset_internal): Fix up
+	to correspond to configure.in checks.
+
+Mon Jul  3 17:18:19 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h: Comment g_get_codeset() out of the header file
+	temporarily. (Very similar to g_get_charset(), need
+	to resolve the two.)
+
+2000-07-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add new entry points.
+
+	* makefile.{mingw,msc}.in: Add the new Unicode object files.
+
+Thu Jun 29 15:57:28 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* NEWS: updated
+
+	* Makefile.am: added snapcheck target to go along with snapshot
+
+	* gstring.c glib.h (g_string_hash): Add g_string_hash to 
+	go along with g_string_equal.
+
+Tue Jun 27 12:40:23 EDT 2000  David A. Wheeler <dwheeler@dwheeler.com>
+
+	* glib.h: Added g_string_equal for comparing GStrings;
+	changed g_str_equal so it returns gboolean (instead of gint).
+
+	* gstring.c: Modified GString implementation to support embedded
+	ASCII NUL ('\0') characters, and implemented g_string_equal.
+
+	* testglib.c tests/string-test.c: Added tests for g_string_equal
+	and tests for proper handling of embedded ASCII NUL characters.
+
+Wed Jun 28 22:52:00 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (libglib_la_SOURCES): Fix
+	gunichartable.h => gunichartables.h. (From Eric Limings)
+
+Fri Jun 23 17:20:26 2000  Tim Janik  <timj@gtk.org>
+
+	* glib.h: define gstring in terms of gchar*. this typedef reflects
+	the type name of the primitive G_TYPE_STRING in the gobject module.
+
+Wed Jun 21 12:09:03 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gunicode.h gutf8.c guniprop.c gunidecomp.[ch] gunichartables.h
+	Makefile.am glib.h: Initial pass at adding unicode support
+	functions. A few things still need to be implemented, a bit
+	of cleanup needs to be done, tests need to be added, and 
+	the docs need to be finished, but this should allow replacing
+	most or all use of libunicode.
+
+2000-06-06  Tor Lillqvist  <tml@iki.fi>
+
+	* giowin32.c (g_io_channel_win32_pipe_readable): If we are
+	watching the same pipe for different conditions (with different
+	callbacks), check them all. Only call the callback for G_IO_IN
+	from here. (This bug popped up when a watch for G_IO_ERR|G_IO_HUP
+	was added to gimplib.)
+
+2000-05-30  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c (g_locale_get_codeset): Implement on Win32.
+
+	* glib.def: Add g_get_codeset.
+
+	* tests/Makefile.am (EXTRA_DIST): makefile.cygwin* has been
+	renamed to makefile.mingw*.
+
+Tue May 30 16:01:32 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h gutils.c: Move the g_locale_get_codeset() up in the 
+	header file to correspond to to comments about memory
+	management. Rename to g_get_codeset() to avoid 
+	polluting the g_locale_* namespace, which probably
+	would have g_locale_get_codeset (GLocale *locale).
+	Add a doc comment.
+
+Mon May 29 14:10:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gutils.c (g_locale_get_codeset): Add function to get the 
+	codeset name for the current locale.
+
+	* configure.in acconfig.h: Add check for nl_langinfo(CODESET);
+
+Fri May 19 11:39:29 2000  Tim Janik  <timj@gtk.org>
+
+	* gutils.c (g_snprintf):
+	(g_vsnprintf): added argument assertments.
+
+	* gstring.c (g_string_assign): added argument assertments.
+	(g_string_truncate): make len a guint.
+
+Fri May 19 09:00:44 2000  Tim Janik  <timj@gtk.org>
+
+	* gmem.c (g_free): fixed SIZEOF_LONG==4 assumption with
+	ENABLE_MEM_CHECK, from Art Haas <ahaas@neosoft.com>.
+
+	* gslist.c (g_slist_reverse): shut up compiler.
+
+	* gscanner.c (g_scanner_get_token_ll): removed inline assignment.
+
+	* garray.c: remove index>=0 checks for unsigned indices.
+
+	* gmain.c (g_idle_prepare): timeout assignment fix.
+
+	* gtree.c (g_tree_node_rotate_right): shut up compiler.
+
+2000-05-13  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in
+	* tests/makefile.mingw.in
+	* build-dll: Rename makefile.cygwin(.in) to
+	makefile.mingw(.in), which better describes what it is. Move the
+	build of gmodule, gthread and gobject DLLs to makefiles in those
+	directories. Move resource file handling and build number bump to
+	build-dll, where it sits much cleaner.
+
+	* README.win32
+	* Makefile.am (EXTRA_DIST): Update accordingly.
+
+	* glib.h: Add G_PI, G_PI_2, G_PI_4, G_E, G_LN2, G_LN10 and
+	G_SQRT2. M_PI etc aren't necessarily in <math.h> in strict ISO C
+	implementations.
+
+	* glib.def: Add g_strcanon.
+
+	* gtree.c (g_tree_node_rotate_left): Remove unused variables.
+
+	* gwin32.c (g_win32_opendir): Remove unneeded statement.
+
+Thu May  4 02:04:46 2000  Tim Janik  <timj@gtk.org>
+
+	* configure.in (STRIP_DUMMY): some Make 3.79 $(strip ) versions are
+	broken and require an empty arg, give it to them.
+
+Fri Apr 28 23:54:35 2000  Tim Janik  <timj@gtk.org>
+
+	* setup things for a new sub-library libgobject:
+
+	* Makefile.am (SUBDIRS): added gobject
+
+	* glib-config.in: feature -lgobject.
+
+	* configure.in (AC_OUTPUT): generate gobject/Makefile.
+
+	* glib.m4 (AM_PATH_GLIB): feature gobject module.
+
+	* glib.spec.in: added %{prefix}/lib/libgobject-1.3.so.*
+
+Fri Apr 28 21:41:49 2000  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added G_STRLOC macro.
+	G_STRUCT_OFFSET(): signedness corrections.
+	(G_CSET_DIGITS): list 0-9.
+	* gscanner.c (g_scanner_config_template): use G_CSET_DIGITS.
+
+	* glib.h: 
+	* gstrfuncs.c:
+	(g_strdown):
+	(g_strup):
+	(g_strreverse): return the modified string instead of void, so
+	calls to these functions can be nested.
+	(g_strcanon): new function, canonicalizes string according to
+	a given character set.
+
+Fri Apr 28 19:45:16 2000  Tim Janik  <timj@gtk.org>
+
+	* gasyncqueue.c (g_async_queue_unref): get rid of an unused variable.
+
+Wed May 10 19:52:44 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.m4: Print found version when test succeeds.
+
+2000-05-04  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.cygwin.in
+	* tests/makefile.cygwin.in: Include the common makefile snippet
+	from ../build/win32.
+
+	Maybe CVSROOT/modules should be changed so that the 'build' module
+	is included within the glib module (and gtk+, and gimp, and maybe
+	others later), in the same way as the 'macros' module is included
+	in lots of GNOME CVS modules?
+
+2000-05-02  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add new functions.
+
+	* makefile.{cygwin,msc}.in (glib_OBJECTS): Add new object files.
+
+	* tests/makefile.{cygwin,msc}.in: Add thread pool-test.
+
+2000-04-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gasyncqueue.c: New File implementing an asynchronous queue to be
+	used for asynchronous inter-thread communication.
+
+	* gthreadpool.c: New File implementing a thread pool to be used
+	for distributing work among several threads. 
+
+	* glib.h: Added the type and function declarations for these two
+	types.
+
+	* tests/threadpool-test.c: New File implementing a test for the
+	thread pool. This also checks the asynchronous queue underlying
+	the thread pool.
+
+	* tests/Makefile.am: Changed accordingly.
+
+2000-04-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Look for both pthread_create and pthread_join in
+	the thread library. Some systems define one of them, but not both
+	in libc. Arghh. Now we really start a thread and join it later and
+	check, whether the thread to actually ran.
+
+	* glib.h, gcache.c, gtree.c: Changed the 'value' parameter of
+	g_cache_remove from gpointer to gconstpointer. Dito for the 'key'
+	parameter of g_tree_lookup and g_tree_remove and the 'data'
+	parameter of g_tree_search. This function now takes a function of
+	type GCompareFunc instead of GSearchFunc. This fixes Bug
+	#8267. Thanks to Juan Toledo <toledo@users.sourceforge.net> for
+	pointing that out.
+
+	* glib.h: Removed declaration of GSearchFunc.
+
+	* gmem.c: s/GSearchFunc/GCompareFunc/.
+
+2000-04-19  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Update entry point list.
+
+2000-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h (G_TRYLOCK): Made the debugging G_TRYLOCK call also work
+	for compilers with funny G_STMT_(START|END) macros.
+
+	* tests/thread-test.c: Implemented a check for that.
+
+	* gutils.c (g_getenv): Changed the win32 part of this function to
+	be thread safe and to make the returned environment string
+	persistent to match the UN*X behavior. This is again a response to
+	Bug #8983.
+
+	* glib.h (G_LOCK_NAME): Removed parentheses around the lock name,
+	as that seems to cause problems for some compilers and really
+	isn't necessary.
+
+Wed Apr 19 08:32:32 2000  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_new): make sure that
+	scanner->config->cset_skip_characters is "" instead of NULL, so we
+	don't segfault further on.
+
+2000-04-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h, glist.h, gslist.h: Changed the 'data' parameters from
+	gpointer to gconstpointer for the functions
+	g_(list|slist)_(remove|find|find_custom|index), as they do not
+	change this parameter. This fixes bug #4836.
+
+	* glib.h: Changed comment for g_getenv to reflect, that the
+	returned memory must not be freed. Fixes bug #8983.
+
+2000-04-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in, acconfig.h: Add configure test for garbage
+	collector friendliness for GLib. If enabled, ENABLE_GC_FRIENDLY
+	will be defined.
+
+	* garray.c, ghash.c, glist.c, gmain.c, gmem.c, gnode.c, gqueue.c,
+	gslist.c, gtree.c: If ENABLE_GC_FRIENDLY is defined, NULLify all
+	memory released by the user, but cached by GLib. This lets a
+	garbage collector have a more correct view of the actually used
+	memory.
+
+	* garray.c, glib.h: Added g_(array|ptr_array|byte_array)_sized_new
+	functions, that reserve a certain amount of memeory for the array
+	at creation time to avoid reallocation. Fixes bug #6707 from
+	Charles Kerr <ckerr@osserver1.nssl.noaa.gov>.
+
+	* glib.h, gqueue.c, tests/queue-test.c (main): Renamed
+	g_queue_create to g_queue_new in conformance to all other GLib
+	data types.
+
+2000-04-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* grand.c (g_rand_new): Fixed bug. Thanks to Marko Kreen
+	<marko@l-t.ee> for reporting that.
+
+2000-03-26  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Tell about using the mingw-based gcc, which is
+	much easier than modifying the cygwin gcc to product mingw code
+	for the msvcrt runtime.
+
+	* makefile.cygwin.in (WIN32APIHEADERS): Kludge to make it work
+	with a "pure" mingw gcc, too.
+
+2000-03-24  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* garray.c: Made GArray behave correctly. Now zero_terminated
+	really means, that the element array->data[array->len] exists and
+	is zeroed, and clear means that any unassigned elements obtained
+	through g_array_set_size (the only way to get unassigned elements
+	AFAICT) are zeroed. Added some macros to make the code more
+	obvoius. Also made GPtrArray zero elements after
+	g_ptr_array_set_size. This is done in a portbale way (assignment
+	of NULL instead of just memsetting it to zero), though that might
+	be more portability than we actually want.
+
+	* Makefile.am, gthread/Makefile.am, gmodule/Makefile.am,
+	tests/Makefile.am: Added various win32 related *.in files to
+	EXTRA_DIST to let 'make distcheck' procude all the corresponding
+	files, which it silently fails to do currently.
+
+2000-03-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: After finding the right thread library (containing
+	e.g. pthread_create) we now search for the right realtime library
+	(containing e.g. sched_get_priority_max). Makes the output of the
+	thread related libraries correct. 
+
+	* gtimer.c (g_usleep): The current implementation of g_usleep
+	(simply calling select) doesn't work reliable for multi-threaded
+	programs on some platforms (bad omen for the main loop....), so I
+	changed the implementation for thread-using programs to wait for a
+	GCond for the specified amount of time (NB: sleep and usleep are
+	not MT-safe in general, because they often use signals).
+
+Wed Mar 22 16:49:57 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gmem.c (g_mem_chunk_area_compare): Fix indentation.
+
+2000-03-22 Elliot Lee <sopwith@redhat.com>
+
+	* gmem.c (g_mem_chunk_area_compare): Fix 64-bitness bug in
+	comparing two pointers more than 4G apart.
+
+2000-03-22  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c: Move Win32-only includes after inclusion of glib.h, so
+	that G_OS_WIN32 is defined.
+
+	* glibconfig.h.win32.in: Add GSystemThread.
+
+2000-03-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_current_dir): Ok, Marcus Brinkmann
+	<Marcus.Brinkmann@ruhr-uni-bochum.de> convinced me, that 128 KB
+	path length might not be enough for the HURD. So I changed the
+	loop to at least avoid an integer overflow, which could happen at
+	beyond 2GB size ;-)
+
+	* configure.in: Test for sched_yield as the native yield function
+	first. Corrected typo g_thread_sleep -> g_usleep. Corrected
+	message for the pthread_create test. Negative Priorities are
+	allowed (and used on Solaris), so consider
+	sched_get_priority_min failed only if it returns -1, not <0. Check
+	for sched_get_priority_min also in -lrt, if not found in -lpthread
+	alone and add -lrt to G_THREAD_LIBS then. Remove special case
+	handling of priorities for older solaris versions and posix
+	threads. Thanks to Wan-Teh Chang <wtc@netscape.com> for suggesting
+	some of those changes.
+
+	* config.guess, config.sub, ltconfig, ltmain.sh:
+	Upgrade to libtool 1.3.4.
+
+2000-03-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h, configure.in, gutils.h: always define G_GNUC_EXTENSION,
+	even when not needed by GLib. That's actually also the way, the
+	GLib reference manual describes that macro. Therefore I had to
+	remove the lonesome #include <glibconfig.h> in gutils.c, which
+	doesn't seem to be needed there however. This change should make
+	Ben Gertzfield <che@debian.org> happy.
+
+	* gutils.c: Furthermore two warnings in gutils.c were voided,
+	which crept in due to my last change.
+
+	* gutils.c (g_get_current_dir): Allocate only up to 128KB for a
+	pathname. While this is an arbitrary value just like 2048, it
+	seems to be enough (after all, even 4GB is an arbitrary value).
+
+2000-03-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmain.c (g_main_poll): Warn in case of an error during the call
+	to poll(2). Closes Bug#7564 as reported by David Helder
+	<dhelder@umich.edu>.
+
+	* gutils.c (g_get_current_dir): Make g_get_current_dir work on
+	systems with unlimited pathname length like the HURD (It worked
+	there before, but only for pathes shorter than 2048). Closes
+	Bug#4525 as reported by Marcus Brinkmann
+	<Marcus.Brinkmann@ruhr-uni-bochum.de>.
+
+2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* giounix.c (g_io_unix_write, g_io_unix_read): Interpret EINTR as
+	G_IO_ERROR_AGAIN.
+
+2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Added the missing POSIX_NO_YIELD and
+	POSIX_NO_PRIORITIES warning messages.
+
+	* configure.in: Use AC_TRY_RUN instead of AC_TRY_LINK, to test for
+	real thread support. On solaris pthread_create can be linked to
+	even in -lc, but it doesn't work then.
+
+	* configure.in: Don't use priorities for threads, when the
+	minimal/maximal priorities couldn't be determined at configure
+	time.
+
+	* configure.in, gthread.c: Always define GSystemThread in
+	glibconfig.h to represent a system thread.
+
+	* configure.in: Do not use native recursive threads, when
+	possibe. We use some features, that they do not expose (namely the
+	depth counter).
+
+	* glib.h, gthread.c: Redefined GStaticRecMutex. The functions are
+	now implemented in a different way, which should be way
+	faster. Alsothere are now functions g_static_rec_mutex_unlock_full
+	and g_static_rec_mutex_lock_full to leave/enter a recursive mutex
+	completly.
+
+	* gthread.c (g_thread_self): Do not test the system_thread to be
+	non-zero to speed things up.
+
+	* gthread.c (g_mutex_init): Therefore set the system_thread of the
+	main thread here.
+
+	* tests/thread-test.c: Rerun all tests once again, but this time
+	we fool the system into thinking, that the available thread system
+	is not native, but userprovided.
+
+2000-03-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gqueue.c (g_queue_push_tail_link, g_queue_push_head_link): We
+	want the next and prev pointer of the inserted link to be NULL.
+
+2000-03-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Another small change to the pthread_.. search
+	pattern. Should work *now* for AIX.
+
+2000-03-04  Tor Lillqvist  <tml@iki.fi>
+
+	* gwin32.c (g_win32_error_message): New function that returns the
+	message string for a Win32 error code.
+
+	* glib.h: Declare it.
+
+	* glib.def: Export it, plus g_node_copy.
+
+2000-03-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Make the search for pthread_attr_... prototypes
+	find names at the start of a line also, like it is on AIX. Thanks
+	to Valdis Kletnieks <Valdis.Kletnieks@vt.edu> for the info.
+
+Wed Mar  1 10:39:39 2000  Tim Janik  <timj@gtk.org>
+
+	* gslist.c (g_slist_reverse): minor optimization.
+
+	* testglib.c (g_node_test): added a couple of tests for
+	g_node_copy().
+
+	* glib.h:
+	* gnode.c (g_node_copy): new function to copy subtrees,
+	supplied by dbsears@ix.netcom.com.
+	changed iterator to walk the children list backwards, so
+	we get down from O(n^2) to O(n).
+
+	* gnode.c (g_node_first_sibling): applied patch from
+	dbsears@ix.netcom.com to optimize access if node->parent
+	is present.
+
+	* gutils.c (g_get_any_init): backed out HAVE_PW_GECOS check around
+	assignment of g_real_name, sicne HAVE_PW_GECOS is never defined and
+	thus breaks the original code.
+
+	* merged changes from 1.2.7.
+
+Fri Jan 28 11:37:41 2000  Owen Taylor  <otaylor@redhat.com>
+
+	Bug #4156 - Changes vaguely modelled after Scott Gifford's patch
+
+	* gtimer.c (g_timer_elapsed): Never report negative times -
+	clip times to 0.
+
+	* gmain.c (g_timeout_prepare): Guard against unexpected
+	clock shifts by never setting a timeout of more than
+	data->interval msecs.
+
+2000-02-27  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add new functions.
+
+2000-02-23  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Add a missing step to the setup instructions for
+	gcc-2.95.2. Thanks to Arnaud Charlet.
+
+	* glib.def: Add missing entry point.
+
+2000-02-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Changed GCC version test to also accept major
+	versions > 2. Thanks to Ben Gertzfield <che@debian.org> for
+	pointing this out.
+
+Thu Feb 17 12:53:44 2000  Tim Janik  <timj@gtk.org>
+
+	* gstring.c: changed g_str_hash() to a 31 bit version based on
+	a submission by Karl Nelson and hand optimized ad absurdum by
+	various people ;)
+
+	* gstring.c: applied patch from havoc for new gstring functions,
+	added some more sanity checks, coding style fixups.
+
+2000-02-13  Havoc Pennington  <hp@pobox.com>
+
+	* tests/string-test.c (main): Add tests for the new GString 
+	features
+
+	* testglib.c (main): Add tests for the new GString features
+
+	* gstring.c (g_string_insert_len): New function; insert 
+	a given length of string at a given position. 
+	(g_string_append): reimplement in terms of g_string_insert_len
+	(g_string_append_len): new function
+	(g_string_insert_c): accept -1 for "pos" arg to mean "append"
+	(g_string_append_c): reimplement in terms of g_string_insert_c
+	(g_string_prepend): reimplement in terms of g_string_insert_len
+	(g_string_prepend_len): new function
+	(g_string_prepend_c): reimplement in terms of g_string_insert_c
+	(g_string_insert): reimplement in terms of g_string_insert_len
+
+	* glib.h: Declare g_string_insert_len, g_string_append_len,
+	g_string_prepend_len
+
+Sun Feb 13 08:16:47 2000  Tim Janik  <timj@gtk.org>
+
+	* configure.in: wtf??? someone destroyed the configure.in, reverting to
+	an older version from Feb 4 which apears to still work.
+
+2000-02-07  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule.rc.in gthread.rc.in: Move to corresponding subdirectories.
+
+	* Makefile.am
+	* gmodule/Makefile.am
+	* gthread/Makefile.am: Change accordingly.
+
+	* makefile.cygwin: Corresponding changes, some cleanup.
+
+2000-02-05  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.rc.in gmodule.rc.in gthread.rc.in: New files, for putting
+	version info in the DLLs on Win32.
+
+	* Makefile.am: Generate corresponding *.rc files and distribute
+	them.
+
+	* makefile.cygwin.in: Add rules to automatically bump a "build
+	number" in the version info in the rc files each time the DLL is
+	built. But do this only for the person who releases binaries. If
+	others build the DLLs, the build number is set to zero.
+
+Fri Feb  4 19:36:05 2000  Tim Janik  <timj@gtk.org>
+
+	* glib.h: 
+	* gdataset.c: return stolen data from g_datalist_id_remove_no_notify()
+	and g_dataset_id_remove_no_notify() to avoid second lookup for common
+	use.
+
+2000-02-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h
+	* gstrfuncs.c (g_filename_to_utf8, g_filename_from_utf8): New
+	functions for conversion between UTF-8 and the encoding expected
+	by C runtime functions like open() and stat(), and returned by
+	readdir().
+
+	Implement them on Win32 where we use the system "ANSI" codepage,
+	which might be single-byte or double-byte. On Unix, just skip the
+	issue for now and provide dummy implementations that return a copy
+	of the argument.
+
+	* README.win32
+	* build-dll
+	* glib.def: Minor updates.
+
+Wed Jan 26 05:24:38 2000  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gmain.c: s/current_time/dispatch_time/ for the dispatch() handlers.
+	refetch the current time after invocation of poll() to cover up for
+	the time spent in that function call.
+
+Fri Jan 21 10:18:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib.h (G_N_ELEMENTS): Added G_N_ELEMENTS macro to determine
+	the number of elements in an array.
+
+Sun Jan  9 13:28:36 2000  Tim Janik  <timj@gtk.org>
+
+	* gstrfuncs.c (g_strtod): correctly fetch the current locale,
+	fix from owen.
+
+1999-12-16  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule/gmodule-win32.c: Use FormatMessage to translate system
+	error codes into textual messages.
+
+1999-11-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h (G_TRYLOCK): This of course should return TRUE in a
+	program with a thread-disabled GLib.
+
+1999-11-18  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: g_strjoin was missing.
+
+1999-11-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* acconfig.h, config.h.win32.in, configure.in: Renamed
+	GLIB_SIZEOF_PTHREAD_T to GLIB_SIZEOF_SYSTEM_THREAD to reflect
+	changed meaning.
+
+	* configure.in: Cope with systems, that have a pthread_t type,
+	that is not a pointer. Hint from Karl Nelson
+	<kenelson@ece.ucdavis.edu>. Define GLIB_SIZEOF_SYSTEM_THREAD to 4
+	for Solaris. Cope with systems, that have no default mutex
+	initialize, like obviously most DCE systems.
+
+	* glib.h, gthread.c: Changed the prototype of thread_create and
+	thread_self to return the system thread into provided memory
+	instead of a return value. This is necessary, as HPUX has a
+	pthread_t, that is bigger than the biggest integral type there.
+
+	* gthread.c: system_thread is no longer a pointer, but an memory
+	area of size GLIB_SIZEOF_SYSTEM_THREAD. Changed the
+	zeroinitialization and the tests for zeroness accordingly.
+
+1999-11-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Create docs/glib-config.1 from
+	docs/glib-config.1.in. Makes 'make distcheck' happy (and me too).
+
+	* glib-config.1: Removed from CVS, as it is a generated file.
+
+1999-11-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Make the test for getpwuid_r work on newer AIX
+	versions, too. Still works on Solaris and Linux. Patch from Craig
+	Rodrigues <rodrigc@mediaone.net>.
+
+1999-11-08  Tor Lillqvist  <tml@iki.fi>
+
+	* gwin32.c (g_win32_getlocale): Look at env vars LC_ALL, LC_CTYPE
+	and LANG first. Some refinements to the sublanguage logic.
+
+1999-11-04  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{cygwin,msc}.in: Add gwin32 object. Add rule to make .i
+	(preprocessed source) files.
+
+1999-11-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h
+	* glib.def: Rename Win32-only functions from gwin_* to g_win32_*
+	to match the GLib naming conventions.
+
+	* gutils.c
+	* gwin32.c
+	* testglib.c
+	* Makefile.am: Move the Win32-only functions to the new
+	file gwin32.c
+
+1999-10-31  Tor Lillqvist  <tml@iki.fi>
+
+	* gutils.c (gwin_getlocale): New Win32-specific function, returns
+	a Unixish current locale string (en, zh_TW etc).
+
+	* glib.h: Declare it.
+
+	* glib.def: Export it.
+
+	* testglib.c: Test it.
+
+	* gmessages.c (Win32: ensure_stdout_valid): Some improvements,
+	make sure we don't call AllocConsole several times, which I think
+	has happened.
+
+Sun Oct 31 18:55:01 1999  ape@spacetec.no  (Asbjorn Pettersen)
+
+	* gcache.c (g_cache_remove): Test if node is NULL.
+	If not tested, GIMP's script-fu will crash. 
+
+Sun Oct 17 18:11:40 1999  Tim Janik  <timj@gtk.org>
+
+	* gdataset.c (g_data_set_internal): remove g_dataset_global_lock around
+	destroy() notification here as well.
+
+1999-10-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gdataset.c (g_datalist_clear_i): Avoid Freezing, when g_datalist
+	is called recursivly. Reported by Ola Andersson <rand@ling.umu.se>.
+
+Tue Oct 12 14:17:12 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: removed useless g_string(x) macro that cluttered the namespace
+	and was just a poor wrapper around the cpp '#' symbol, use #x if you
+	need to work around this.
+	added new macro G_STRINGIFY(arg) that will convert arg to a string,
+	no matter whether it contains macros or not.
+
+1999-10-12  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Define the new GLIB_SIZEOF_* constants here,
+	too.
+
+	* glib.h: Small Win32 comments improvement.
+
+Tue Oct 12 12:16:12 1999  Tim Janik  <timj@gtk.org>
+
+	* gmessages.c (g_printf_string_upper_bound): completly new
+	implementation for printf string upper bounds calculation.
+	we handle all glibc 2.1 format specifiers now, except for positional
+	parameters (%nn$...) and wide char strings, plus some obscure upper
+	case variants of the standard conversions. this fixes a lot of
+	bugs in the old code, i.e.
+	- NULL format strings
+	- floats with exponents >+24
+	- %G
+	- precision specifications in general
+	- negative field widths
+	- %p for SIZEOF_VOID_P > 4 platforms
+	we now issue warnigns in places where the old code would have
+	caused buffer overruns anyways. warnings are suppressed when invoked
+	from glogv(), to avoid infinite recursions if someone passes a log
+	message that comes with really obscure format specifications.
+
+Tue Oct 12 11:49:00 1999  Tim Janik  <timj@gtk.org>
+
+	* gstrfuncs.c: nuked old g_printf_string_upper_bound() version.
+
+Tue Oct 12 03:34:40 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added GFloatIEEE754 and GDoubleIEEE754 unions to access sign,
+	mantissa and exponent of IEEE floats and doubles (required by the new
+	version of g_printf_string_upper_bound). the unions are endian specific,
+	we handle G_LITTLE_ENDIAN and G_BIG_ENDIAN as of currently. ieee floats
+	and doubles are supported (used for storage) by at least intel, ppc and
+	sparc, reference:
+	http://twister.ou.edu/workshop.docs/common-tools/numerical_comp_guide/ncg_math.doc.html
+
+Mon Oct 11 18:01:49 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: added additional checks to figure sizes of size_t,
+	ptrdiff_t and intmax_t (required by g_printf_string_upper_bound).
+
+Wed Oct  6 12:44:23 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* configure.in: blah. use G_WITH_CYGWIN instead of G_HAVE_CYGWIN
+
+1999-10-05  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h: (Win32) Drop the mapping of POSIX function names to the
+	underscored versions, it's unnecessary after all. With MSVC we get
+	them from oldnames.lib, with gcc-2.95 and mingw32 from
+	-lmoldname-msvc. Add comment about what headers to include for
+	prototypes.
+
+	* glibconfig.h.win32.in: Don't define WIN32 and NATIVE_WIN32.
+
+	* gerror.c (g_on_error_query): (Win32) Slightly increased verbosity.
+
+	* build-dll: Don't strip.
+
+	* tests/string-test.c tests/dirname-test.c: Use G_OS_WIN32.
+
+	* glib.def: Add g_thread_use_default_impl.
+
+Sun Oct  3 19:46:55 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* configure.in: use G_HAVE_CYGWIN instead of G_OS_FEATURE_CYGWIN
+
+Sun Oct  3 19:25:42 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* acconfig.h
+	* configure.in
+	* glibconfig.h.win32: G_OS_FOO #defines. I *think* I got the cygwin
+	and beos stuff right, but I haven't tested it. The respective
+	porters should fix any screwups
+
+	* glib.h
+	* gerror.c
+	* gmain.c
+	* gmessages.c
+	* gscanner.c
+	* gthread.c
+	* gtimer.c
+	* gutils.c
+	* testglib.c: use G_OS stuff
+
+Wed Sep 22 01:53:18 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h (NULL): define NULL as (0L) if __cplusplus is defined, to
+	avoid "ANSI C++ forbids implicit conversion from `void *' in argument
+	passing" errors upon NULL usage in C++ programs (gcc-2.95 is on crack
+	for erroring out on this, instead of just issueing a warning).
+
+	* glib.h (g_trash_stack_pop): use uncasted NULL again.
+
+Fri Sep 17 10:24:45 1999  Tim Janik  <timj@gtk.org>
+
+	* gmem.c (g_mem_chunk_compute_size) (g_mem_chunk_new): applied
+	patch from Soeren Sandmann <sandmann@daimi.au.dk>, to force mem
+	chunk's area sizes to be a multitiple of atom_size, and to
+	eliminate the MAX_MEM_AREA restriction of 65536 bytes. we also
+	catch cases where users pass an area size < atom size with a
+	return_if_fail statement now (which is ok, because previously this
+	lead to memory corruption anyways).
+
+Thu Sep 16 13:19:54 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h (g_trash_stack_pop): add explicit (GTrashStack*) cast for NULL
+	pointer to cure ANSI C++ error.
+
+Mon Sep 13 23:25:59 1999  Tim Janik  <timj@gtk.org>
+
+	* gmessages.c (g_logv): in case we have to abort the program,
+	debugging is enabled and we are not called recursively, try
+	to abort with raise (SIGTRAP) first, so developers may ignore
+	certain failure conditions during debugging stage.
+
+Thu Aug 26 15:09:36 1999  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am:
+	* gmodule/Makefile.am:
+	* gthread/Makefile.am: added --export-dynamic so we can load dynmic
+	modules, (required, according to the libtool 1.3.3 docu).
+
+1999-07-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* grand.c (g_rand_new): Use /dev/urandom, as it doesn't block,
+	which /dev/random might do. Do not XOR the time, when getting the
+	seed form /dev/urandom, as this is good itself. Prevent the
+	initial seed from being zero, which causes the PRNG to produce
+	only zeros. Hints from Colin Plumb <colin@pgp.com>.
+
+1999-08-17  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h (g_trash_stack_push): Add a cast.
+
+	* gslist.c
+	* glist.c: Make the inline functions static inline, and add
+	separate extern wrappers. Not all compilers produce callable entry
+	points for inline functions, even if gcc does.
+
+Sun Aug 15 02:47:14 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h (g_trash_stack_pop): eliminate memset() call, since string.h
+	has not neccessarily been included prior to glib.h.
+
+Mon Aug  2 21:03:10 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: added --enable-msg-prefix option.
+
+	* gmessages.c (g_log_default_handler): feature "prg_name (pid:%u): "
+	if --enable-msg-prefix was selected (use "(process:%u): " if
+	g_get_prgname () returns NULL, along the lines of g_on_error_query).
+
+1999-08-03  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h
+	* gstrfuncs.c
+	* tests/strfunc-test.c: Rename g_strccpy to g_strcompress and
+	g_strecpy to g_strescape per Tim Janik's suggestion. Dropped the
+	destination parameter, always g_malloc a new string.  Fix bug in
+	g_strcompress, octal digits were gobbled up without limit, should
+	use max three.
+
+	Sources that use g_strescape must have ifdefs to be compilable
+	both with GLib 1.2 and 1.3.
+
+Sat Jul 31 17:52:03 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* glib.h
+	* gstrfuncs.c: the #define for g_strescape interfered with the
+	compilation of the function, so just remove the function and
+	note that it's deprecated in the header
+
+1999-08-01  Tor Lillqvist  <tml@iki.fi>
+
+	* gstrfuncs.c (g_strccpy, g_strecpy): New functions.
+
+	* glib.h: Declare and document them. Define the deprecated
+	g_strescape as a macro that calls g_strecpy.
+
+	* tests/strfunc-test.c (main): Test them.
+
+	* makefile.{cygwin,msc}.in
+	* tests/makefile.{cygwin,msc}.in: Remove gstack and its test
+	program.
+
+	* glib.def: Additions and removals.
+
+	* README.win32: Improve gcc build instructions.
+
+	* build-dll: Also build import library for MSVC.
+
+Sat Jul 24 20:11:35 1999  Tim Janik  <timj@gtk.org>
+
+	* merged GLib 1.3.0 with glib-1.2.3 from Fri Jul 16 22:18:36.
+	* incorporated proposed cleanups from gtk-devel-list.
+
+	* bumped version number to GLib-1.3.1
+
+	* glib.h:
+	* gqueue.c:
+	* gstring.c:
+	* glist.c:
+	removed string tokenisation (we got g_strsplit() and g_strjoin()
+	already) and readline functions.
+	s/g_list_delete/g_list_delete_link.
+	implemented g_slist_delete_link.
+	removed notion of g_ATEXIT() macro in glib.h, this is an *internal*
+	macro, g_atexit() is provided for public consumption.
+	added GTrashStack inline utility functions.
+	reimplement double eneded queues.
+	removed GStack implementation, people can use a queue or a (singly)
+	linked list for this task.
+	deprecated g_strescape(), we need the SunOS variants here.
+
+	* gdate.c: added DEBUG_MSG() macro to wrap old messages.
+
+	* *.*: CVS merges.
+
+	* upgrade to libtool 1.3.3.
+
+1999-07-21  Tor Lillqvist  <tml@iki.fi>
+
+	Win32: With the latest gcc (2.95, pre-release), we can have binary
+ 	compatibility with MSVC by using the switch -fnative-struct. No
+ 	longer build DLLs with .gcc in the name when using gcc.
+
+	* README.win32: Renew gcc build instructions.
+
+	* build-dll: Comments change, handle also .a files.
+
+	* makefile.cygwin.in
+	* tests/makefile.cygwin.in: Remove .gcc from DLL name.
+
+1999-07-13  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Correct URL for mingw runtime sources.
+
+	* build-dll: Combine commands with &&.
+
+	* glib.h: Map also rmdir() and hypot() for MSVCRT library.
+
+	* makefile.cygwin.in
+	* tests/makefile.cygwin.in: New DLL naming style. GCC-compiled DLLs are
+ 	now called *.gcc.dll, to avoid binary incompatibilities with
+ 	MSVC-compiled versions.
+
+	* makefile.msc.in: Cosmetics.
+
+1999-07-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Test for pthread_join rather than for
+	pthread_create to determine the right thread-lib. Makes it work on
+	mips-sgi-irix6.5. Hitn from to Jari Vuoksenranta
+	<javu@piano.ux.phys.jyu.fi>.
+
+1999-07-02  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Note about need to fix another bug in the mingw32
+ 	headers.
+
+	* makefile.msc.in: Debugging turned on via an nmake variable,
+	no need to edit the makefile.
+
+1999-07-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in, acconfig.h, gutils.c: Added a g_memmove
+	replacement for platforms without memmove, where bcopy can't
+	handle overlapping copies and the corresponding checks, which is
+	taken form the PERL Configure routine.
+
+	* glib.h: Updated the commentary about g_memmove to be right and
+	more GLib-like.
+
+	* configure.in: Removed test for rand_r, as it isn't used anymore.
+
+1999-06-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h, grand.c: Finally removed the g_random_normal and
+	g_rand_normal functions.
+
+1999-06-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.def: Add missing export of g_strncasecmp.
+
+1999-06-21  Jose Mercado  <jmercado@mit.edu>
+
+	* glib.spec.in: Changed version number (1.1->1.3) in files section
+	to allow rpm to build packages again.
+
+1999-06-21  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Update the pthreads snapshot version we want.
+	Advice how to hand-expand the makefile.*.in files.
+
+	* config.h.win32.in: Define values needed by Sebastian Wilhelmi's
+	new thread stuff.
+
+	* glib.def: Add new functions.
+
+	* glibconfig.h.win32.in: Update the pthreads snapshot version.
+	Fix typo.
+
+	* gthread.c: Include config.h, guard inclusion of unistd.h.  When
+ 	using gcc on Win32, g_thread_functions_for_glib_use must be marked
+ 	for export here, too.
+
+	* gtimer.c: Implement g_usleep on native Win32 using Sleep (which
+	only has millisecond granularity, though).
+
+	* makefile.cygwin.in
+	* makefile.msc.in: Update pthreads snapshot version. File
+	name changes. Remove testgthread.
+
+	* tests/makefile.cygwin.in
+	* tests/makefile.msc.in: Add thread-test. Link with gthread lib.
+
+1999-06-18  Jeff Garzik  <jgarzik@pobox.com>
+
+	* tests/Makefile.am:  Re-order tests in alpha order.
+
+1999-06-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Changed test for pthread_attr_setstacksize from
+	AC_TRY_COMPILE to AC_TRY_LINK.
+
+1999-06-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in, acglib.m4, acconfig.h, glib.h, gthread.c:
+	Completed the thread support in GLib. Thread creation,
+	prioritizing threads, yielding, joining threads as well as
+	reader/writer locks and recursive mutexes are now in place. Please
+	test heavily on your platform. It is so far tested on
+	Linux/i386/pthreads, Solaris/Sparc/pthreads and
+	Solaris/Sparc/solaristhreads.
+
+	* gtimer.c, glib.h: Implement g_usleep (gulong microseconds) for
+	thread safe sleeping. (sleep() is not MT-safe at all!)
+
+	* gutils.c: Avoid compiler warning.
+
+	* tests/Makefile.am, tests/thread-test.c: New program to test some
+	aspects of the thread implementation.
+
+	* gthread.c, Makefile.am: Renamed from gmutex.c to reflect the
+	change of content.
+
+	* configure.in: Purged all appearances of nspr. 
+
+Wed Jun  2 11:42:46 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* config.guess
+	* config.status
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.3.2 (BeOS changes merged)
+
+1999-05-29  Tor Lillqvist  <tml@iki.fi>
+
+	* gstrfuncs.c (g_strescape): Backslashify also '"' characters.
+
+	* glib.h: Document g_strescape.
+
+1999-05-12  Tor Lillqvist  <tml@iki.fi>
+
+	* glib.h (Win32): Map fileno to _fileno for mingw32. Map fstat to
+ 	_fstat.
+
+	* README.win32: Advice also to remove -lmoldname in the
+ 	patch to the egcs-1.1.2 spec file.
+
+Wed May 12 00:23:55 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* gmodule/Makefile.am: Another small fix.
+
+1999-05-08  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am tests/Makefile.am: Correct rules for making the
+	win32-related files that are made from corresponding .in files.
+	Is there a cleaner way than explicitly writing rules that invoke
+	config.status?
+
+Fri Jul 16 22:18:36 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.3.3
+
+1999-06-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gdate.c, gstrfuncs.c, gstring.c: Fixed the use of the
+	is..... and to..... macros, which take unsigned chars, not chars!
+	Thanks to Morten Welinder <terra@diku.dk> for pointing this out.
+
+Thu Jun  3 16:30:31 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* gerror.c (g_on_error_query): check isatty() before querying so
+	we don't loop endlessly
+
+Sat May 29 11:16:29 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* config.guess
+	* config.status
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.3.2
+
+1999-05-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmain.c: provide a poll prototype for SunOS, as they do not do
+	it self. Hint from Christian Parg <cparg@fs-design.de>.
+
+Tue May 25 12:23:07 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gstrfuncs.c (g_strchug): Use g_memmove() not memmove().
+	(Reported by Charles Levert <charles@comm.polymtl.ca>)
+
+Mon May 10 22:03:52 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.2.3
+
+1999-05-08  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am tests/Makefile.am: Correct rules for making the
+	win32-related files that are made from corresponding .in files.
+	Is there a cleaner way than explicitly writing rules that invoke
+	config.status?
+
+Sat May  1 10:18:01 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* config.guess
+	* config.status
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.3
+
+1999-04-30  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Don't distribute glibconfig.h.win32.in, but
+	glibconfig.h.win32. Generate it when making a dist. Also generate
+	makefile.msc and config.h.win32 from corresponding .in files when
+	making dist.
+
+	* configure.in: Also substitute @GLIB_INTERFACE_AGE@ and
+	@GLIB_BINARY_AGE@ (needed in config.h.win32).
+
+	* glibconfig.h.win32.in: Use static mutex structure and initial
+	value corresponding to the 1999-04-07 snapshot of pthreads-win32.
+
+	* tests/Makefile.am: Distribute makefile.msc. Generate it when
+	making dist.
+
+	* tests/makefile.msc.in: New file.
+
+	* tests/node-test.c: Include <stdlib.h> for exit().
+
+Thu Apr 29 02:16:36 1999  Tim Janik  <timj@gtk.org>
+
+	* gstrfuncs.c: minor code cleanups.
+
+Tue Apr 27 13:11:29 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_main_poll): Mask out ERR HUP and NVAL from
+	the events field so we don't give IRIX fits.
+
+Tue Apr 20 08:42:22 1999  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_unexp_token): behave conservative with
+	G_TOKEN_IDENTIFIER_NULL and always assume scanner->value.v_string
+	to be "null" in that case.
+
+1999-04-20  Havoc Pennington  <hp@pobox.com>
+
+	* gutils.c (g_vsnprintf):  When using the vsnprintf()
+	implementation, '\0'-terminate the resulting string
+	and return its length rather than -1.
+
+Mon Apr 19 13:42:21 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_main_iterate): Added missing
+	#ifdef G_THREADS_ENABLED. (I never liked G_THREADS_ENABLED in
+	the first place!)
+
+1999-04-18  Havoc Pennington  <hp@pobox.com>
+
+	* gutils.c (g_snprintf): When using the vsnprintf()
+	implementation, '\0'-terminate the resulting string
+	and return its length rather than -1.
+
+Fri Apr 16 06:52:07 1999  Tim Janik  <timj@gtk.org>
+
+	* gscanner.c (g_scanner_unexp_token): feature G_TOKEN_EOF as a valid
+	expected token as well, so we get "- expected end of file" instead of
+	"- expected (unknown) token <0>".
+
+Tue Apr 13 16:16:14 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.2.2
+
+1999-04-12  Elliot Lee  <sopwith@mh69.mh.cuc.edu>
+
+	* g_strchug(): s/strcpy/memmove/
+
+1999-04-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Adjusted the test for an unimplemented
+	getpwuid_r. Info from Michael Pruett <mikep@ugcs.caltech.edu>.
+
+Sun Apr 11 15:07:34 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: bumped versin number to GLib 1.2.2, interface 2,
+	binary 2.
+
+	* NEWS: updates.
+
+Sun Apr 11 14:37:06 1999  Tim Janik  <timj@gtk.org>
+
+	* gstrfuncs.c (g_strcasecmp): always check for s1, s2 != NULL.
+
+Sat Apr 10 19:30:50 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: removed braces around inline strings for the G_GNUC_FUNCTION
+	and G_GNUC_PRETTY_FUNCTION macros, so the macros can be used for
+	compile time string concatenation.
+
+Thu Apr  8 19:53:19 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* gmain.c (g_main_iterate): Check for two threads
+	calling g_main_iterate at once.
+
+	* gmain.c: If the set of poll file descriptors changes
+	during a call to poll(), abort that call, and start
+	a new poll. My test program still segfaults
+	obscurely on glibc 2.0 (in read()!!!), but now it works on
+	glibc 2.1, so I'll blame something else for the other segfault.
+
+1999-03-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Fixed slight bug, that made configure hang on some
+	systems. Please do not merge this into 1.3 branch. It's taken care
+	of differently there. Info from J. Rhett Aultman
+	<cuplan@alley.gator.net>
+
+Wed Mar 24 21:23:47 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.2.1
+
+	* README:
+	  INSTALL: 
+	  NEWS: 
+	  sanity_check: updated
+
+	* glibconfig.h.win32.in:
+	  Makefile.am:
+ 	  docs/glib-config.1.in:
+	  docs/Makefile.am: Added files used to generate new files.
+
+	* glibconfig.h.win32:
+	  docs/glib-config.1: Removed, now generated.
+
+	* configure.in: Added to output now-generated files.
+
+Tue Mar 23 13:43:39 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* giounix.c: add user_data param to check and prepare functions
+
+Mon Mar 22 03:54:43 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h:
+	* gmain.c: add user_data to the GSource ->check and ->prepare
+	functions, so it can be used to e.g. pass a GPollFd.
+	(g_main_poll): only add poll records with an events mask != 0 to the
+	fd_array. don't even bother calling poll_func() if fds=timeout=0.
+	added debugging printouts around poll_func() invocation that can be
+	enabled with #define G_MAIN_POLL_DEBUG.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* config.guess
+	* config.sub
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.2f
+
+	* autogen.sh: libtool is not required to autogen glib
+
+	* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+	needed)
+
+1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmem.c: Fixed another stupid fault of mine: Did
+	s/g_static_/g_private_/g
+
+Wed Mar 17 03:17:42 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in bumped versin number to GLib 1.2.1, interface 1,
+	binary 1.
+
+	* NEWS: updates.
+
+	* glib.h: added GLIB_CHECK_VERSION() macro similar to
+	GTK_CHECK_VERSION().
+
+Sun Mar 14 17:50:35 1999  Tim Janik  <timj@gtk.org>
+
+	* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+	to g_return_if_fail().
+	(g_mem_profile): 
+	(g_mem_chunk_print): 
+	(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+	messages.
+
+	* gtimer.c (g_timer_*):	changed a bunch of g_assert() statements
+	to g_return_if_fail().
+	* grel.c (g_*): changed a bunch of g_assert() statements to
+	g_return_if_fail() and added some extra ones to check relation != NULL.
+
+1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Also accept _Pctime_r instead of ctime_r, while
+	seraching for the right `_REENTRANT' flag. This is for Digital
+	UNIX 4.0d. Thanks to Sascha Brawer <sb@adasys.ch>.
+
+Tue Mar  9 23:25:50 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: check for working realloc (NULL,).
+	* gmem.c (g_realloc): use malloc() for initial allocation on systems
+	where realloc(NULL,) will not work (this is the case on SunOS, reported
+	by Tom Geiger).
+
+Mon Mar  8 07:42:08 1999  Tim Janik  <timj@gtk.org>
+
+	* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+	flag around the call to g_hook_free() to avoid spurious
+	warnings (happens during destruction phase).
+
+1999-03-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+	from config.h.win32 to glibconfig.h.win32
+
+	* acconfig.h, configure.in, config.h.win32: Added test for DCE
+	versions of mutex_trylock and cond_timedwait. The win32 versions
+	are posix, aren't they?
+
+1999-03-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+	Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_any_init): Fixed yet another bloody
+	implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+	<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+	test better than that, but have no idea, how to do that easily.
+
+Sun Feb 21 22:11:51 CST 1999  Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.2.0
+
+	* AUTHORS: updated
+
+Wed Feb 24 00:08:42 CST 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* *.[ch]: inserted additional note to look for ChangeLog and
+	  AUTHORS file for a log of modifications.
+
+Sun Feb 21 14:01:00 1999  Dr Mike <drmike@redhat.com>
+
+	* Made specfile generated, tweaked slightly
+
+Sat May  8 06:00:17 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* configure.in
+	  gmodule/Makefile.am
+	  gthread/Makefile.am: Better testing reveals better
+	  methods.  Fixes for BeOS.
+
+Sat May  8 01:52:29 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* configure.in
+	  gerror.c
+	  gmain.c
+	  gstrfuncs.c
+	  gutils.c
+	  ltconfig
+	  ltmain.sh
+	  gmodule/Makefile.am
+	  gmodule/gmodule.c
+	  gmodule/gmoduleconf.h.in
+	  gmodule/gmodule-beos.c
+	  gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
+1999-05-06  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+ 	config.h.win32.in tests/makefile.msc.in tests/makefile.cygwin.in:
+ 	New files, used to generate corresponding non-.in files when
+ 	making a dist. This is just so the version numbers will be kept in
+ 	synch automatically.
+
+	* configure.in: Also substitute @GLIB_MAJOR_VERSION@,
+ 	@GLIB_MINOR_VERSION@, and @GLIB_INTERFACE_AGE@.
+
+	* Makefile.am tests/Makefile.am: Also distribute makefile.cygwin.
+
+	* gerror.c (g_on_error_query): On Win32, put up a MessageBox and
+ 	then exit.
+
+	* glib.def: Add a couple of functions.
+
+Sat May  1 10:26:20 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* config.guess
+	* config.status
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.3
+
+1999-04-25  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: More editing.
+	* build-dll: Use gcc, not ld to link.
+	* glib.h: On native Win32 use _unlink().
+	* gscanner.c: Use corrent NATIVE_WIN32 feature test macro,
+	not _MSC_VER.
+	* gstring.c: Include <io.h> on Win32 for _read prototype.
+	* gutils.c: Remove old IO channel code (was in #if 0).
+	* makefile.cygwin: Don't need to link with kernel32 and msvcrt
+	explicitly, they are included anyway.
+
+1999-04-24  Tor Lillqvist  <tml@iki.fi>
+
+	Support added for building using a GNU toolchain on Win32,
+	i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
+
+	* README.win32: Updated.
+	* build-dll makefile.cygwin tests/makefile.cygwin: New files.
+	* glib.h glib.def glibconfig.h.win32: Slight updates. 
+	* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
+	* gmain.c gutils.c testglib.c tests/string-test.c: Test for
+	NATIVE_WIN32, not _MSC_VER.
+	* gmutex.c: Must declare g_thread_functions_for_glib_use as
+	exported (using the GUTILS_C_VAR macro).
+	* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
+	* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
+	* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
+	value of g_thread_functions_for_glib_use (?).
+	* makefile.msc tests/makefile.msc: Cosmetics.
+
+Fri Apr 23 14:29:25 BST 1999  Tony Gale <gale@gtk.org>
+
+	* glib.h: Fix typo in g_string_ncasecmp macro (by me).
+	  Add b_string_strncasecmp macro.
+
+1999-04-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_any_init): use sysconf (_SC_GETPW_R_SIZE_MAX) as
+	the new initinal bufsize for getpwuid_r on systems, that support
+	this. Hint from Holger Duerer <H.Duerer@zait.uni-bremen.de>.
+
+Sat Apr 17 20:55:13 BST 1999  Tony Gale <gale@gtk.org>
+
+	* glib.h, gstring.c: Add new g_string functions for reading
+	  from file/socket descriptors, and tokenising strings.
+
+	  Added various g_string macros.
+
+Tue Apr 13 23:28:32 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Mention the tests directory.
+
+	* glib.def: Add the functions from grand.c.
+
+	* glibconfig.h.win32: Add unsigned max values, and the format
+ 	strings.
+
+	* makefile.msc: Add grand.
+
+	* tests/{date-test,node-test}.c: Include <stdlib.h> for exit().
+
+	* tests/makefile.msc: New file.
+
+1999-04-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib.h: Moved struct declaration up. Style fixes.
+
+	* grand.c: Style fixes. Only try to open /dev/random once.
+
+	* tests/rand-test.c (main): New tests; Slight bug fix. 
+
+1999-04-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* grand.c, tests/rand-test.c: New files to implement the Mersenne
+	Twister Pseudo Random Number Generator.
+
+	* glib.h, AUTHORS, Makefile.am, tests/Makefile.am: Changed
+	accordingly.
+
+Thu Apr  8 21:12:30 CDT 1999 Shawn T. Amundson <amundson@gtk.org>
+
+	* Released GLib 1.3.0
+
+1999-03-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Added a check for the right format to printf and
+	scanf long longs. It is %qi instead of %lli on FreeBSD for
+	whatever reason.
+
+1999-03-28  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* Makefile.am (glibconfig.h): Make sure `glibconfig.h' exists
+	after the rule is fired.
+	(install-exec-local): Install glibconfig.h only if the contents
+	are different from the currently installed glibconfig.h.
+
+1999-03-26  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* Makefile.am (configexecincludedir): Rename from 
+	configincludedir so that glibconfig.h will be installed 
+	as part of `make install-exec'. 
+
+Thu Mar 25 22:45:47 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32: Update version numbers.
+
+	* glibconfig.h.win32: Update version numbers and pthreads-win32-
+ 	related magic values.
+
+	* README.win32: Some improvements.
+
+	* makefile.msc: Add gqueue and gstack. Correct version number.
+
+Fri Mar 19 16:29:50 PST 1999 Manish Singh <yosh@gimp.org>
+
+	* acinclude.m4
+	* config.guess
+	* config.sub
+	* ltconfig
+	* ltmain.sh: upgrade to libtool 1.2f
+
+	* autogen.sh: libtool is not required to autogen glib
+
+	* acconfig.h: remove WITH_SYMBOL_UNDERSCORE (not explictly
+	needed)
+
+1999-03-18  Jeff Garzik  <jgarzik@pobox.com>
+
+	* glib.def: Add new g_list, g_stack, g_queue functions.
+
+1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: added new AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
+	to hold various defines to get the right thread implementation on
+	different platforms. Also look in -ldce for pthread_create. Should
+	make it work on HP-UX 10.x. Information from "D. Emilio Grimaldo
+	Tunon" <emilio_tunon@nl.compuware.com>.
+
+1999-03-17  Jeff Garzik  <jgarzik@pobox.com>
+
+	* gstack.c, gqueue.c:
+	Add copyright, clean up code a bit.
+
+1999-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Added missing values for G_MAXU(SHORT|INT|LONG) on
+	platforms with only /usr/include/values.h.
+
+	* acconfig.h: Removed unnecessary macros.
+
+	* glibconfig.h.win32, config.h.win32: Moved G_THREADS_IMPL_POSIX
+	from config.h.win32 to glibconfig.h.win32. Taken from glib 1.2
+	branch.
+
+	* configure.in: Also accept _Pctime_r instead of ctime_r, while
+	seraching for the right `_REENTRANT' flag. This is for Digital
+	UNIX 4.0d. Taken from glib 1.2 branch.
+
+Wed Mar 17 03:14:56 1999  Tim Janik  <timj@gtk.org>
+
+	* glib.h: added GLIB_CHECK_VERSION() macro similar to
+	GTK_CHECK_VERSION().
+
+Wed Mar 17 01:46:28 1999  Tim Janik  <timj@gtk.org>
+
+	* merges from glib-1-2:
+
+Sun Mar 14 17:50:35 1999  Tim Janik  <timj@gtk.org>
+
+	* gmem.c (g_mem_chunk_*): changed a bunch of g_assert() statements
+	to g_return_if_fail().
+	(g_mem_profile):
+	(g_mem_chunk_print):
+	(g_mem_chunk_info): removed some extraneous "\n"s at the end of the log
+	messages.
+
+	* gtimer.c (g_timer_*): changed a bunch of g_assert() statements
+	to g_return_if_fail().
+	* grel.c (g_*): changed a bunch of g_assert() statements to
+	g_return_if_fail() and added some extra ones to check relation != NULL.
+
+Tue Mar  9 23:25:50 1999  Tim Janik  <timj@gtk.org>
+
+	* configure.in: check for working realloc (NULL,).
+	* gmem.c (g_realloc): use malloc() for initial allocation on systems
+	where realloc(NULL,) will not work (this is the case on SunOS, reported
+	by Tom Geiger).
+
+Mon Mar  8 07:42:08 1999  Tim Janik  <timj@gtk.org>
+
+	* ghook.c (g_hook_unref): when !hook_list->is_setup, wrap the
+	flag around the call to g_hook_free() to avoid spurious
+	warnings (happens during destruction phase).
+
+1999-03-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmem.c: Fixed a stupid cut'n'paste error of mine. Thanks to
+	Friedrich Dominicus <Friedrich.Dominicus@inka.de>
+
+1999-03-16  Timur Bakeyev  <mc@bat.ru>
+
+	* configure.in: Fix problem with pthread_create in libc, as running
+	"gcc test.c -l " is not legal.
+
+1999-03-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* tests/type-test.c: Added a test for the
+	G_(U)?INT(16|32|64)_FORMAT and G_(MIN|MAX|MAXU)(SHORT|INT|LONG)
+	macros.
+
+	* configure.in: Removed G_(U)?INT8_FORMAT again, as it can't be
+	used for scanf.
+
+	* configure.in: Added the macros G_MAXU(SHORT|INT|LONG). I do not
+	know how to handle these on platforms with /usr/include/values.h,
+	but without /usr/include/limits.h. Please someone add this.
+
+
+1999-03-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Added the macros G_(U)?INT(8|16|32|64)_FORMAT to
+	use for printf and (much more important) scanf format strings for
+	the corresponding GLib types. 
+
+	* glib.h Added G_(U)?(SHORT|INT|LONG)_FORMAT for consistency. It
+	however makes no sense to also provide G_(FLOAT|DOUBLE)_FORMAT, as
+	they are different for printf (f for both) and scanf (f for float,
+	lf for double). Defining G_INT_FORMAT makes sense however, as we
+	might want to define gint to something different than int someday
+	in the future. Idea from Sascha Brawer <sb@adasys.ch>.
+
+1999-03-14  Jeff Garzik  <jgarzik@pobox.com>
+
+	* gdate.c:
+	Commented out debugging output.
+
+	* tests/Makefile.am, tests/date-test.c:
+	Added test of the GDate module, based closely on testgdate.c.
+
+	* tests/Makefile.am:
+	Bugfix - compile tests with @GLIB_DEBUG_FLAGS@.
+
+1999-03-14  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* configure.in (glibconfig.h): Remove widechar tests and defines.
+	(fd_set): Change the grep for `fd_mask' to search for `fd_set'.
+	* gerror.c (fd_mask): Remove conditional typedef.  It is not used
+	elsewhere in the file.
+	* gmain.c (fd_mask): Likewise.
+
+1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Test for posix threads first, then for dce threads.
+
+1999-03-11  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Revamped the thread configure stuff. Now dce
+	threads (old posix draft) are recogniced. This is necessary,
+	because dce threads are in fact working quite differently from
+	posix threads. Also changed the conditions for checking for MT
+	safe functions a bit, because G_THREADS_IMPL_NONE still have to
+	compile thread safe. NOTE: Please do not commit my change to
+	glib-1-2/{acconfig.h,configure.in,config.h.win32} from 1999-03-03,
+	as the current change will take care of that too.
+
+Tue Mar  9 14:37:32 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* Makefile.am, glib.h, gstack.c, gqueue.c,
+	  tests/Makefile.am, tests/queue-test.c, tests/stack-test.c:
+	Added stack, queue ADTs and related tests.
+
+	* glib.h, glist.c:
+	New g_list_delete() function.
+
+Sat Mar  6 11:03:08 1999  Asbjorn Pettersen  <ape@lrdpf.spacetec.no>
+
+	* gutils.c (g_get_any_init): add OS/2 changes.
+	change '\\' in HOME to '/'.
+
+1999-03-03  Josh MacDonald  <jmacd@spin.dsl.pacbell.net>
+
+	* glib.def: g_spaced_primes_closest was omitted here, so I
+	couldn't build Xdelta on Windows.
+
+1999-03-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gutils.c (g_get_any_init): Fixed yet another bloody
+	implementation of getpwuid_r on AIX. Thanks to Olaf Dietsche
+	<olaf.dietsche+list.gtk@netcologne.de>. I would like a configure
+	test better than that, but have no idea, how to do that easily.
+
+Sat Feb 27 01:18:47 1999  Tim Janik  <timj@gtk.org>
+
+	* ChangeLog: moved old ChangeLog to ChangeLog.pre-1-2, and started
+	new one.
+
+	* configure.in: set glib version to 1.3.0.
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
new file mode 100644
index 0000000..b2074b9
--- /dev/null
+++ b/ChangeLog.pre-2-10
@@ -0,0 +1,1368 @@
+2006-03-23  Matthias Clasen <mclasen@redhat.com> 
+
+	Retroactively branch for 2.10 before the last commit.
+
+	* glib/gtimer.c: Change to "Since 2.12".
+
+2006-03-23  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* configure.in: Check for timegm.
+	
+	* glib/gtimer.h:
+	* glib/gtimer.c:
+	* glib/glib.symbols:
+	* docs/reference/glib/glib-sections.txt: Added g_time_val_to_iso8601
+	and g_time_val_from_iso8601, to convert a GTimeVal to and from an
+	ISO 8601 encoded date.
+
+	* tests/testglib.c: Added test cases for g_time_val_to_iso8601()
+	and g_time_val_from_iso8601() functions.
+
+2006-03-20  Vladimer Sichinava  <vlsichinava@gmail.com>
+
+        * configure.in: Added "ka" (Georgian) to ALL_LINGUAS
+
+2006-03-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmem.c (profiler_log): use standard_calloc to allocate
+	the profile_data.  (#335209, Chris Wilson)
+
+	* glib/gmain.c (g_main_context_unref): Avoid a deadlock.
+	(#335207, Chris Wilson)
+
+	Minor optimizations (#335216, Chris Wilson):
+	
+	* glib/gasyncqueue.c (g_async_queue_pop_intern_unlocked): Use
+	g_queue_peek_tail_link instead of g_queue_peek_tail.  
+
+	* glib/glist.c: 
+	* glib/gslist.c: Avoid some memset calls. 
+
+2006-03-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* MAINTAINERS: Add this, at the request of the GNOME sysadmin team.
+
+2006-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (g_option_context_parse): Only set the prgname
+	if it hasn't been set before.  (#334611, Chong Kai Xiong)
+
+2006-03-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_parse_debug_string): Don't read past the
+	end of the string.  (#334471, Morten Welinder)
+
+	* tests/testglib.c (test_g_parse_debug_string): Add testss
+	for g_parse_debug_string.
+
+	* glib/goption.c (parse_short_option): Don't create the
+	option_name twice.  (#334519, Chris Wilson)
+
+2006-03-13  Anders Carlsson  <andersca@luminoth.local>
+
+	* configure.in: Revert fix for #322476, it breaks module loading
+	since libtool on darwin makes shared modules use .so and shared
+	libraries use .dylib. The fix breaks shared module loading everywhere
+	in GTK+.
+
+2006-03-02  Marcus Brinkmann  <mb@g10code.de>
+
+	Implement watches for GIOChannels for write file descriptors on
+	Win32 (#333098).
+	
+	* glib/giowin32.c (GIOWin32Channel): Add a new direction field.
+	(read_thread): Initialize direction.
+	(write_thread): New function.
+	(buffer_write): New function.
+	(g_io_win32_prepare): Handle the G_IO_WIN32_FILE_DESC case for the
+	write direction.
+	(g_io_win32_fd_write): Call buffer_write() if there is a writer
+	thread.
+	(g_io_win32_fd_close): Set space_avail_event for writer threads.
+	(g_io_win32_fd_create_watch): Create the writer thread if
+	condition is G_IO_OUT.
+	(g_io_channel_win32_make_pollfd): Likewise here.
+
+2006-03-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.am: Add ChangeLog.pre-2.8 to EXTRA_DIST.
+
+2006-03-08  Tor Lillqvist  <tml@novell.com>
+
+	* glibconfig.h.win32.in: Add G_GUINT64_CONSTANT.
+
+2006-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* ===  Released 2.10.1 ===
+
+	* NEWS: Updates.
+
+	* glib/gutf8.c (_g_charset_get_aliases): Match the prototype
+	in gconvert.c to fix build problems in NetBSD.  (#333651,
+	Julio M. Merino Vidal)
+
+2006-03-06  Anders Carlsson  <andersca@imendio.com>
+
+	* configure.in:
+	Make .dylib the shared library suffix on darwin.
+	(#322476, Vladimir Panov)
+	
+2006-03-06  Anders Carlsson  <andersca@imendio.com>
+
+	* configure.in:
+	Skip checking thread flags on Darwin. Fix suggested by Manish Singh.
+	(#314794, Gregor Riepl)
+	
+2006-03-01  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_listenv): Separate implementation on Win32: Use
+	the wide character API on NT-based Windows. Return UTF-8 strings.
+
+	* glib/glib.symbols: Don't mark g_listenv as PRIVATE, as that
+	meant it wasn't present in the import library. PRIVATE is used
+	only for the backwards-compatibility DLL ABI stability hacks.
+
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.10.0 ===
+
+	* README.in: Mention the slice allocator and GInitiallyUnowned.
+
+	* NEWS: Updates
+
+	* configure.in: Bump version to 2.10.0
+
+	* tests/utf8-pointer.c: Add tests for g_utf8_strlen().
+
+	* glib/gutf8.c: Fix boundary cases in g_utf8_strlen().
+	(#332435)
+
+2006-02-23  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* tests/completion-test.c: (main): Plug leaks reported by
+	valgrind.
+	* tests/convert-test.c: (test_iconv_state), (test_one_half):
+	Same.
+	* tests/patterntest.c: (test_compilation): Same
+	* tests/shell-test.c: (do_argv_test): Same.
+	* tests/unicode-caseconv.c: (main): Same.
+	* tests/uri-test.c: (run_to_uri_tests): Same.
+	Closes bug #332093.
+
+2006-02-19  Martyn Russell  <martyn@imendio.com>
+	
+	* tests/asyncqueue-test.c: 
+	* tests/list-test.c: 
+	* tests/slist-test.c: Updated to test _sort, _sort_with_data,
+	_insert_sorted and _insert_sorted_with_data API. 
+
+2006-02-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/gobject/Makefile.am: Add paramspec-test
+
+	* tests/gobject/paramspec-test.c: Some GParamSpec tests. 
+
+	* tests/gobject/gvalue-test.c: Add more tests.
+
+2006-02-17  Kang Jeong-Hee  <keizie@gmail.com>
+
+	* glib/gutf8.c (g_utf8_find_prev_char): Correct documentation typo.
+
+2006-02-15  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gthreadpool.c: Fix deadlock when signalling the thread
+	which freed a thread pool (#331110, Chris Wilson).
+
+Tue Feb 14 17:00:43 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: only define _XOPEN_SOURCE to 600 to get at 
+	posix_memalign() in case we actually are going to use it, because
+	we detected a compliant implementation (#328997).
+
+	* configure.in (enable_included_printf): don't include malloc.h when
+	testing for posix_memalign() funcitonality, since this may break the 
+	test on some systems (#328997).
+
+2006-02-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c: Improve docs.
+
+2006-02-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.6 ===
+
+	* NEWS: Updates
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+	* docs/reference/glib/tmpl/relations.sgml (g_relation_insert): Specify
+	the type of varargs arguments. (bug #317679)
+
+2006-01-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* autogen.sh: Touch README and INSTALL here to pacify 
+	automake.  (#329124, Kjartan Maraas, Tim Janik)
+	
+Tue Jan 31 16:45:03 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gdataset.c: carry out all dtalist pointer accesses atomically,
+	some missing cases where pointed out by Sebastian Wilhelmi.
+
+Tue Jan 31 12:33:48 2006  Tim Janik  <timj@imendio.com>
+
+	* configure.in: generate build/win32/vs8/Makefile, to fix build breakage.
+
+2006-01-30  David Schleef  <ds@schleef.org>
+
+	* glib/grand.c: Update URL
+
+2006-01-29  Sven Herzberg  <herzi@gnome-de.org>
+
+	* docs/reference/gobject/tmpl/param_value_types.sgml: tell how to
+	create container classes which are as flexible as a GValue is
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.9.5 ===
+
+	* glib/glib.symbols: Add g_mem_gc_friendly as an exported
+	variable.
+
+	* NEWS: Updates
+
+2006-01-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmem.c (g_mem_init_nomessage): Fix C99isms.  (#328705, 
+	Kazuki Iwamoto)
+
+Wed Jan 25 19:16:57 2006  Tim Janik  <timj@imendio.com>
+
+	* fixed buglets reported by Jens Granseuer in #328254.
+
+	* configure.in: free the memory allocated in posix_memalign() tests.
+
+	* glib/gslice.c: spelling fixes.
+
+Wed Jan 25 16:39:18 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: honour g_mem_gc_friendly settings when freeing
+	slices, make sure g_mem_gc_friendly is properly initialized.
+
+	* gmem.[hc]: ensure g_mem_gc_friendly is initialized from G_DEBUG upon
+	the first allocation. applied some branching optimizations.
+
+	* docs/macros.txt: reflected --enable-gc-friendly change and
+	described ENABLE_GC_FRIENDLY_DEFAULT as well as G_DEBUG=gc-friendly.
+
+	* configure.in: changed --enable-gc-friendly=yes to define
+	ENABLE_GC_FRIENDLY_DEFAULT.
+
+	* glib/garray.c: changed ENABLE_GC_FRIENDLY macro #ifdef-s to
+	if (G_UNLIKELY (g_mem_gc_friendly)).
+
+	* glib/gtree.c:
+	* glib/ghash.c: removed ENABLE_GC_FRIENDLY code which is now taken
+	care of by g_slice_free1().
+
+	* tests/slice-test.c: fixed leaks, reported by Kjartan Maraas.
+
+Tue Jan 24 17:49:36 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: only use posix_memalign() if it's known to work,
+	revert to memalign() otherwise.
+
+	* configure.in: check for broken posix_memalign() implementations
+	to fix #328254.
+
+2006-01-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/unicode-encoding.c: Use UTF-16LE as target encoding
+	on all little-endian systems.  (#143380, Marc Moorcroft)
+
+2006-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Change the shared libary extension for hpux-ia64
+	to so.  (#328253, The Written Word)
+
+Mon Jan 23 17:30:33 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gutils.c (_g_getenv_nomalloc): wiped out all the wonderfull
+	G_OS_WIN32 code i wrote ;-[) after tml told me windows has getenv()
+	as well.
+
+Mon Jan 23 16:46:20 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c (slice_config_init): initialize GSlice config from
+	G_SLICE environment variable. we support G_SLICE=always-malloc
+	currently, which forces all g_slice_*() allocations to use the system
+	malloc instead.
+
+	* glib/gutils.c: 
+	g_parse_debug_string(): added a note about not using g_malloc() here.
+	_g_getenv_nomalloc(): getenv() variant that doesn't use g_malloc or 
+	g_slice. contains only guesswork in the WIN32 branch.
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* Bump version
+	
+	* === Released 2.9.4 ===
+
+	* NEWS: Updates
+
+2006-01-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_get_groups): Correct a g_new0()
+	call.  (#327421, Morten Welinder)
+
+2006-01-17  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gthreadpool.c: To avoid deadlocks get rid of the settings
+	G_LOCK. Use the unused_thread_queue lock instead. Change
+	g_thread_pool_thread_proxy such that threads only wait on
+	non-exlusive pools for at most a 1/2 second. Do not reorder tasks
+	due to superfluous tasks. Global tasks wait at most for
+	max-idle-time milliseconds. Make sure, that no task is woken up
+	twice for the same event via a wakeup_serial. This fixes #324228.
+
+	* tests/threadpool-test.c: Adapt test accordingly. Do not pass
+	invalid NULL into the thread pools. This as well fixes #327290.
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.9.3 ===
+
+	* NEWS: Updates
+
+	* glib/gthread.h (g_static_mutex_get_mutex_impl_shortcut): 
+	Rework the strict aliasing fix to not break C++, pointed
+	out by Murray Cumming.
+	
+	* glib/gasyncqueue.c (g_async_queue_push_sorted_unlocked):
+	Signal waiting threads, problem noticed by Christian Kellner.
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix bug 326747, Alberto Ruiz:
+	
+	* glib/gconvert.c (make_valid_utf8): Change this function to
+	replace unknown characters by the Unicode replacement character
+	instead of '?', and don't append "(invalid encoding)".
+	(g_filename_display_name, g_filename_display_basename): Document
+	how to determine if the filename was in an invalid encoding.
+
+2006-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtree.c: Replace the simple recursive implementation
+	by a nonrecursive, threaded implementation by Maurizio 
+	Monge.  (#169285)
+
+2006-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/asyncqueue-test.c (main): Fix the
+	assert to not always trigger.  (#326558, 
+	Daichi Kawahata)
+
+2006-01-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/convert-test.c: Don't test items_read and
+	items_written in error cases where it is not set.
+
+	* tests/asyncqueue-test.c: Set error to NULL.
+
+2006-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtree.c: Break some long lines.
+
+	* tests/tree-test.c: Add more tests.
+
+	* glib/gslice.c: Include config.h first, pointed out
+	by Bogdan Nicula.
+
+2005-12-20  Sven Herzberg  <herzi@gnome-de.org>
+
+	* docs/reference/gobject/tmpl/gtype.sgml: explain that
+	G_TYPE_INSTANCE_GET_CLASS() does behave different during
+	initialization
+
+2006-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslice.c: Only define _XOPEN_SOURCE if we know
+	that we have posix_memalign().  (#323937, Bogdan Nicula)
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.9.2 ===
+
+2006-01-05  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : added gslice.obj
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+	* glib/gmain.c: Clarify the documentation of source ids
+	a bit.  (#325874, Dan Williams)
+
+	* configure.in: Fix another strict aliasing problem.
+
+	* glib/gthreadpool.c: Avoid use of varargs macro.  (#325864,
+	Kazuki IWAMOTO)
+
+2006-01-04  Manish Singh  <yosh@gimp.org>
+
+	* glib/glib.symbols
+	* glib/gstdio.h: don't macroized g_access, g_chdir, and g_unlink
+	either, since they have the same issue as g_rmdir. (Related to
+	bug #325249)
+
+Wed Jan  4 13:33:25 2006  Tim Janik  <timj@gtk.org>
+
+	* glib/gslice.c (magazine_cache_pop_magazine): don't reverse chunk 
+	order when creating magazines, so we hand out chunks with ascending
+	adresses.
+
+2006-01-04  Abel Cheung  <maddog@linuxhall.org>
+
+	* configure.in: Added "ml" "zh_HK" to ALL_LINGUAS.
+
+2006-01-03  Martyn Russell  <martyn@imendio.com>
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/glib.symbols:
+	* glib/gthreadpool.[ch]:
+	- Added new API g_thread_pool_get_idle_time() and
+	g_thread_pool_set_idle_time(). (#324228).
+	
+	* tests/threadpool-test.c: 
+	- Updated test case to do thread pool sorting, thread pool with
+	no sorting and a thread pool with idle thread timeouts.
+	
+2006-01-03  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/gmain.h: Add new functions here, too.
+
+	* glib/glib.symbols: Add new functions.
+
+2005-12-20  Michael Meeks  <michael.meeks@novell.com>
+
+	* glib/gmain.c (g_main_context_is_owner): new method
+	to determine if the current thread is the owner of the
+	context.
+
+2006-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: 
+	* glib/gstdio.h: 
+	* glib/gstdio.c (g_rmdir): Don't provide g_rmdir() as a macro
+	expanding to rmdir, since rmdir is not declared in a portable
+	system header we can include in gstdio.h.  (#325249, Jani Monoses)
+
+2006-01-01  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gspawn-win32.c (g_spawn_sync_utf8): Set the GIOChannels for
+	stdout and stderr to unbuffered. Otherwise the giochannel layer
+	will try to read from them regardless whether the
+	g_io_channel_win32_poll() call here has indicated
+	readability or not. (#325310)
+
+2005-12-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (glib_check_version): Fix a copy-and-paste error
+	in the docs.  (#325273, Declan Naughton)
+
+2005-12-27  Manish Singh  <yosh@gimp.org>
+
+	* tests/run-collate-tests.sh: use LC_ALL instead of LC_COLLATE, to
+	make sure we really override things.
+
+2005-12-27  Matthias Clasen  <mclasen@redhat.com>
+	
+	Fix #316221, Michal Benes, Stanislav Brabec;
+
+	* configure.in: Fix a strict aliasing problem in 
+	g_static_mutex_get_mutex(). 
+	* glib/gthread.h: ...and in 
+	g_static_mutex_get_mutex_impl_shortcut().
+
+	* glib/gdatasetprivate.h: Add a cast to silence compiler
+	warnings.  (#321978, Andrew Paprocki)
+
+	Partial fix for bug #323937, Bogdan Nicula.
+
+	* configure.in: Check for malloc.h
+	* glib/gslice.c: Don't include malloc.h unconditionally.
+
+2005-12-27  Manish Singh  <yosh@gimp.org>
+
+	* tests/run-collate-tests.sh: export LC_COLLATE so it takes.
+	(#324950, Dan Yefimov)
+
+2005-12-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslice.c: On Win32, include process.h  (#325015, Kazuki
+	Iwamoto)
+
+2005-12-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* AUTHORS: Update my email
+
+	* tests/slice-test.c: Fix C99isms.  (#324950, Dan Yefimov)
+
+2005-12-21  Matthias Clasen  <mclasen@redhat.com>
+	
+	* README.in: Add some notes on when 'make check' may fail.
+
+2005-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: 
+	* glib/gthreadpool.h: 
+	* glib/gthreadpool.c (g_thread_pool_set_sort_function): New function
+	to sort tasks pushed into a threadpool.  (#324479, Martyn Russell)
+
+	* tests/threadpool-test.c: Test this.
+
+Tue Dec 20 18:14:14 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.[hc]: added mem_error() and mem_assert() to test and 
+	handle 	errors without depending on gmessage.c which might not be
+	setup when the error occours.
+	removed G_SLICE_CONFIG_ALWAYS_FREE config option, fixed the code so
+	always freeing can be achieved by adjusting the working set time to
+	0 with G_SLICE_CONFIG_WORKING_SET_MSECS.
+	added G_SLICE_CONFIG_COLOR_INCREMENT to test different color increments
+	(mainly 0 and 1). reduced the minimum block size to 128 bytes, to
+	minimize wastage if small amounts of differently sized structrues are
+	allocated, this does come at a performance cost of roughly 5% though.
+	fixed up block alignment calculation, so it works for varying
+	block sizes. only use strerror() not g_strerror() since the latter
+	depends on working GQuark and GSlice.
+	mem_error(): implemented in terms of fprintf and vfprintf.
+
+	* tests/slice-color.c: new program to test cache colorization effects.
+
+	* tests/slice-test.c: trade G_SLICE_CONFIG_ALWAYS_FREE for 0 duration
+	G_SLICE_CONFIG_WORKING_SET_MSECS.
+
+2005-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (parse_short_option): Set an error in all
+	failure cases.  (#324332, Tim-Philipp Müller) 
+
+2005-12-17  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gatomic.c: Fix memory barrier position in g_atomic_int_get
+	and g_atomic_pointer_get. Add g_atomic_int_set and
+	g_atomic_pointer_set implementations for the !DEFINE_WITH_MUTEXES &&
+	G_ATOMIC_OP_MEMORY_BARRIER_NEEDED case, as well as defining them
+	as functions (additionally to the macros in the header) for the 
+	!G_ATOMIC_OP_MEMORY_BARRIER_NEEDED case.
+
+2005-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	*  glib/gmem.c (g_allocator_new): Don't return a pointer to
+	a const struct, since apps expect to be able to modify it. 
+	(#324179, J. Ali Harlow)
+
+Tue Dec 13 10:13:32 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gatomic.h: added g_atomic_pointer_set() and g_atomic_int_set()
+	for systems where the initialization of atomic variables requires a
+	write memory barrier.
+
+2005-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.9.1 ===
+
+2005-12-09  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/glist.h: 
+	* glib/gslist.h:
+	Use G_GNUC_WARN_UNUSED_RESULT on list functions that return
+	the whole list.
+
+2005-12-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2005-12-07  Martyn Russell  <martyn@imendio.com>
+
+	* glib/gasyncqueue.c:
+	- Call g_queue_insert_sorted() instead of duplicating the code.
+	- Call g_queue_sort() instead of duplicating the code.
+	- Invert sort function results to make sure the same sort function
+	gives the same results across glist, gslist, gqueue and
+	gasyncqueue.
+
+	* tests/asyncqueue-test.c:
+	- Updated the sort function to reflect the example in the
+	documentation for gasyncqueue.c.
+
+2005-12-07  Martyn Russell  <martyn@imendio.com>
+
+	* docs/reference/glib/glib-sections.txt:
+	* docs/reference/glib/tmpl/linked_lists_double.sgml:
+	* docs/reference/glib/tmpl/linked_lists_single.sgml:
+	* glib/glist.[ch]: 
+	* glib/gslist.[ch]: 
+	- Added g_list_insert_sorted_with_data () and
+	g_slist_insert_sorted_with_data ().
+	- Removed the extra check in g_list_sort() and g_slist_sort() for
+	GCompareDataFunc vs. GCompareFunc.
+ 	
+2005-12-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib-gettextize.in: Look up prefix at run-time on Win32,
+	assuming the standard directory structure with glib-gettextize in
+	$prefix/bin.
+
+2005-12-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmem.h: Exempt GTK+ from the mem chunk deprecation, since
+	we need GTK+ 2.8 to compile against GLib 2.10.
+
+2005-12-05  Manish Singh  <yosh@gimp.org>
+
+	* tests/run-collate-test.sh: set LC_COLLATE, not LANG, to be sure
+	to override any user settings.
+
+2005-12-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Revert an accidential commit
+
+2005-12-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutf8.c: Documentation updates.  (#323291, Morten Welinder)
+
+	* tests/Makefile.am (TESTS_ENVIRONMENT): 
+	* tests/gobject/Makefile.am (TESTS_ENVIRONMENT): Set
+	MALLOC_CHECK_ and MALLOC_PERTURB_
+
+	* tests/run-collate-tests.sh: Run the collation tests explicitly 
+	in en_US locale. (#320463)
+
+	* glib/gmem.h: Really deprecate GMemChunk.
+
+	* glib/gdate.c: 
+	* glib/gutils.c: 
+	* glib/gtree.c: 
+	* glib/gstring.c: 
+	* glib/giochannel.c: 
+	* glib/gstrfuncs.c: Add versioned deprecation docs. 
+
+2005-12-05  Martyn Russell  <martyn@imendio.com>
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/gasyncqueue.[ch]:
+	- Added support for sorting async queues by with _push_sorted(),
+	_push_sorted_unlocked(), _sort() and _sort_unlocked() (#323047).
+	
+	* tests/Makefile.am:
+	* tests/asyncqueue-test.c:
+	- Added test case for gasyncqueue.c
+
+Mon Dec  5 15:53:20 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: implement chain walking for arbitrary ->next pointer
+	offsets in g_slice_free_chain_with_offset() based on a patch by behdad
+	in bug 323178. moved time consuming logic from g_slice_free() out of
+	the inner loop, so g_slice_free_chain_with_offset() provides a real
+	performance benefit over g_slice_free1() now.
+	
+	* glib/gslice.h: renamed g_slice_free_chain() to
+	g_slice_free_chain_with_offset(). implemented g_slice_free_chain() as
+	a type-safe macro as suggested in bug 323178.
+	simplified the macro implementation of g_slice_free() and implemented
+	it in a type safe manner for all compliers as suggested by Morten
+	Welinder <mortenw@gnome.org>.
+
+	* glib/gmain.c:
+	* glib/glist.c:
+	* glib/gslist.c:
+	* glib/glib.symbols: s/g_slice_free_chain/g_slice_free_chain_with_offset/
+
+2005-12-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gasyncqueue.c: Add some docs.
+
+	* tests/libmoduletestplugin_a.c: Fix compiler warnings.
+
+	* glib/gatomic.c: In the ia64 implementation, use
+	__sync builtin without _si or _di suffix.  (#321229,
+	Stanislav Brabec, patch by Andreas Schwab)
+
+2005-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gslice.h: Remove comma at the end of enum.
+
+2005-12-04  Matthias Clasen  <mclasen@redhat.com>
+
+	Handle multiple user names with the same UID better.
+	(#319535, Laszlo Peter)
+	
+	* glib/gutils.c (g_get_any_init_do): When determining user
+	data, first look up $LOGNAME. If the UID doesn't match
+	getuid(), fall back to the current behaviour of looking
+	up the user data based on getuid().
+
+2005-12-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmacros.h (G_GNUC_WARN_UNUSED_RESULT): Add a macro
+	to make gcc warn if a function result is ignored.  (#145466,
+	Arjan van de Ven, Alex Larsson)
+
+	* glib/gmem.h: Add the new attribute to g_realloc and 
+	g_try_realloc.
+
+2005-12-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: 
+	* glib/gcache.h: Deprecate g_cache_value_foreach. (#322956,
+	Nicolas Caniart)
+
+	* glib/gmappedfile.c: Make mapping of empty files
+	work.  (#321530)
+	
+	* glib/gfileutils.c: Don't fork a new process just to 
+	fix the permissions of the created temp file.  (#321318,
+	Alexis S. L. Carvalho)
+
+2005-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* README.in: Add a note about Solaris threads.
+
+	* glib/gspawn.c:
+	* configure.in: Remove support for Solaris threads. 
+	(#136971, Sebastian Wilhelmi, patch by Andrew Paprocki)
+
+2005-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Define G_GUINT64_CONSTANT in analogy to
+	G_GINT64_CONSTANT.  (#322568, Andrew Paprocki)
+
+2005-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslice.c: Win32 portability fixes and C99ism removal,
+	pointed out by Kazuki Iwamoto.  (#323052)
+	
+2005-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gatomic.c (g_atomic_int_add): Add a missing volatile for
+	the IA64 implementation.
+
+Fri Dec  2 16:18:09 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: some naming and type size fixups.
+
+Fri Dec  2 13:08:58 2005  Tim Janik  <timj@gtk.org>
+
+	* glib/gslice.h (g_slice_free): reworked GCC-specific type-safe macro
+	variant into something less verbose, but digestible for gcc-3.4.
+
+Fri Dec  2 10:55:07 2005  Tim Janik  <timj@imendio.com>
+
+	* tests/slice-test.c: extended to perform the benchmarking on the old
+	memchunk code if 'O' is selected.
+
+	* tests/memchunks.c: new file which contains the old GLib mem chunks
+	implementation with prefix old_mem_chunk_.
+
+	* tests/Makefile.am: added memchunks.c
+
+Fri Dec  2 00:16:59 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: improved gettimeofday() timer resolution by maintaining
+	acceptable load distribution of the syscall.
+	(allocator_get_magazine_threshold): reduce minimum/single-thread magazine
+	sizes to approximately page_size/2.5 to avoid excessive startup allocations.
+
+2005-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/gobject/ifacecheck.c (test_iface_base_init): Don't
+	double-free base interface members.
+
+	* tests/Makefile.am: Remove duplicate variable.
+
+Thu Dec  1 17:32:46 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.[hc]: new slice allocator implementation.
+
+	* tests/slice-test.c: added random slice allocation test.
+
+	* glib/gthread.[hc]: removed newly added private thread mem API.
+
+	* glib/gthreadinit.h:
+	* glib/gmessages.c:
+	* glib/gthread.c:
+	* glib/gmem.c: divided glib threading initialisation into three phases,
+	initialisation where private keys and messaging are not available (only
+	needed by gmem.c), initialisation without messaging but private keys
+	available (gslice.c, gmessage.c), and full fledged initialisers that
+	server the rest of glib. initialisation functions got renamed to reflect
+	the limitations of their corresponding phases.
+
+	* glib/gmem.c: removed memchunk code, defer allocations to 
+	g_slice_* instead.
+
+	* glib/gmem.[hc]: removed g_slice_* skeletons.
+
+	* glib/glib.symbols: added g_slice_* symbols.
+
+	* configure.in: check for availability of posix_memalign(3), memalign(3)
+	and valloc(3). 
+
+	* glib/Makefile.am: added gslice.[hc].
+
+2005-12-01  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c (g_stat): In the Win32 implementation, strip
+	trailing slash(es) for non-root folders. stat() fails if non-root
+	folders are specified with trailing slashes. It's too much hassle
+	to demand that callers strip such slashes themselves, especially
+	as it is easy to get it wrong and strip the slash of a root
+	folder.
+	(g_rename): On NT-based Windows, use MoveFileEx() with
+	MOVEFILE_REPLACE_EXISTING to better match Unix behaviour.
+
+2005-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix G_STMT_START / G_STMT_END on Solaris.  (#321972,
+	Andrew Paprocki)
+	
+	* configure.in: Check whether do { } while (0) works.
+
+	* glib/gmacros.h: Use do { } while (0) for G_STMT_START / 
+	G_STMT_END if it works.
+	
+2005-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gthread.c (g_static_rw_lock_wait, g_static_rw_lock_signal): 
+	* glib/gnode.c (g_node_depth_traverse_level): 
+	* glib/gmem.c (g_allocator_new): 
+	* glib/ghash.c (g_hash_table_unref, g_hash_table_destroy) 
+	(g_hash_table_foreach_remove_or_steal): Silence compiler
+	warnings.
+
+2005-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gunicollate.c (g_utf8_collate_key_for_filename): 
+	Don't read beyond len.  (#322520, Christian Persch)
+
+Wed Nov 23 17:34:01 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gdataset.c: access datalist flags via atomic pointer access
+	functions, instead of acquiring the dataset lock. this is faster and
+	also matches the atomic pointer readouts in gdatalistprivate.h and
+	direct pointer modifications required by gobject.c.
+
+Wed Nov 23 13:35:31 2005  Tim Janik  <timj@gtk.org>
+
+	* glib/gdataset.c: streamlined initialization code somewhat,
+	removed GData node cache.
+
+2005-11-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/ghash.c (g_hash_table_ref): 
+	(g_hash_table_unref): Mark these as new API.
+
+	Avoid double locking in g_intern_string (#322133,
+	Benedikt Meurer)
+
+	* glib/gdataset.c (g_quark_from_string_internal): New 
+	internal function which factors out common parts of 
+	g_quark_from[_static]_string.
+	(g_quark_from_string, g_quark_from_static_string):
+	Use g_quark_from_string_internal.
+	(g_intern_string, g_intern_static_string): Use
+	g_quark_from_string_internal, and only take the
+	lock once.
+	(g_quark_new): Don't store the strings shifted by -1
+	in the g_quarks array.
+	(g_quark_to_string): Adapt to the previous change.
+
+Tue Nov 22 14:04:26 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/ghash.h: 
+	* glib/ghash.c: 
+	g_hash_table_new_full(): create hash tables with a ref count of 1.
+	g_hash_table_ref(): atomically ref_count+=1
+	g_hash_table_unref(): atomically ref_count-=1, destroys hash table
+	when refcount reaches 0.
+	g_hash_table_destroy(): just destroy keys and values, unref by 1.
+	g_hash_table_insert(): 
+	g_hash_table_replace(): assert ref_count>0.
+
+	* glib/gatomic.h: 
+	* glib/gatomic.c: added 'volatile' qualifier to all atomic pointer and
+	integer pointers.
+
+2005-11-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c (g_unichar_get_mirror_char): Remove unused
+	variables. (#321984, Andrew Paprocki)
+
+2005-11-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.0 ===
+
+	* glib/glib.symbols: Updates
+
+	* glib/gutf8.c (g_utf8_offset_to_pointer): Add some performance
+	hints to the docs. (Paolo Borelli)
+	
+	* NEWS: Updates
+
+	* glib/gthread.c (g_thread_foreach): Mark as new api.
+
+	* README.in: Updates.
+
+	* glib/glib.symbols: 
+	* glib/gdate.h: 
+	* glib/gdate.c (g_date_set_time_t): 
+	(g_date_set_time_val): Add functions to set a date from
+	a time_t and from a GTimeVal.
+	(g_date_set_time): Deprecate.  (#314067, Roger Leigh)
+	
+	* tests/Makefile.am:
+	* tests/utf8-pointer.c: Unit tests for g_utf8_pointer_to_offset
+	and g_utf8_offset_to_pointer.
+
+	* glib/gutf8.c (g_utf8_pointer_to_offset) 
+	(g_utf8_offset_to_pointer): Handle negative offsets, and use
+	"stutter stepping" for going backwards. (#320638, Larry
+	Ewing)
+
+	* glib/gbacktrace.c:
+	* glib/gdate.c:
+	* glib/gthread.c: const correctness fixes, found
+	by Arjan van de Ven and gcc.
+	
+2005-11-16  Behdad Esfahbod  <behdad@gnome.org>
+
+	* docs/reference/glib/tmpl/unicode.sgml: Correct typo on mentioning
+	@G_UNICODE_BREAK_UNKNOWN that should be #G_UNICODE_BREAK_UNKNOWN.
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c: Use bit hacks instead when checking a general
+	category value against multiple values.
+
+	* glib/gutf8.c: Change ISO10646 to Unicode in docs.
+
+2005-11-10  Simos Xenitellis  <simos@gnome.org>
+
+	* configure.in: Added tt (Tatar) to ALL_LINGUAS.
+
+2005-11-05  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c (g_io_win32_set_flags): Don't call g_warning().
+	(#320688) Instead set error and return failure.
+
+2005-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.c (g_main_dispatch): Don't call cb_funcs->unref
+	while holding the context lock.  (#320886, Andy Wingo)
+
+2005-11-07  Billy Biggs <vektor@dumbterm.net>
+
+	* tests/refcount/Makefile.am: Add a missing reference to libglib
+	in the LDADD for this test.
+
+2005-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmem.c (g_allocator_new): We need to set n_preallocs to a
+	nonzero value, otherwise GTK+ 2.8 breaks when compiled against
+	GLib 2.9.  (#320755, Luca Ferretti)
+
+2005-11-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/Makefile.am: Apply a patch from Behdad Esfahbod to 
+	use a faster lookup table for g_unichar_get_mirror_char().
+	* glib/gmirroringtable.h: The new table.
+	* glib/gunichartables.h: Remove bidi_mirroring_table.
+	* glib/gen-unicode-tables.pl: Don't generate the mirroring
+	table.
+	* glib/glib-mirroring-tab/*: Sources for the program
+	which generated gmirroringtable.h.
+
+	* glib/glist.c: Avoid some code duplication.
+
+	* glib/gscanner.h: Include gdataset.h.  (#320322)
+
+	* glib/gdebug.h: add new GDebugFlag for fatal_criticals
+	* glib/gmessages.c: (_g_debug_init): handle G_DEBUG=fatal_criticals,
+	to help find critical warnings in applications.  (#320017,
+	Vincent Untz)
+
+2005-11-02  Tor Lillqvist  <tml@novell.com>
+
+	* glib/glib.symbols: Remove large amount of trailing whitespace
+	from one line. Remove #ifdef G_UNDEFINED from around
+	g_hash_table_new and g_hash_table_new_full symbols, what was the
+	purpose of that? Add the g_slice functions.
+
+Tue Nov  1 16:24:20 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gmem.[hc]: prepared deprecation of GMemChunk and GAllocator.
+	added g_slice_*() API to allocate and cache small bits of memory.
+	an actuall allocator implementation for g_slice_*() is still pending.
+
+	* glib/gthread.[hc]: changes from a patch by Matthias Clasen.
+	changed GRealThread list to use in-structure *next; fields instead
+	of GSList, in order for thread iteration to not depenend on g_slice_*()
+	indirectly.
+	_g_thread_mem_private_get():
+	_g_thread_mem_private_set(): added accessors for private memory,
+	needed because the ordinary GPrivate implementation relies on GArray
+	and GSList and therefore indirectly on working g_slice_*() allocations.
+
+	* glib/gthread.[hc]:
+	g_thread_foreach(): new public API function to loop over all existing threads.
+
+	* glib/gdataset.c:
+	* glib/gstring.c:
+	* glib/gcache.c:
+	* glib/garray.c: 
+	* glib/gqueue.c:
+	* glib/gslist.c:
+	* glib/glist.c:
+	* glib/ghash.c:
+	* glib/gtree.c:
+	* glib/ghook.c:
+	* glib/gmain.c:
+	* glib/gnode.c:
+	removed GAllocator and free list usages and accompanying locks.
+	use g_slice_*() API to allocate and cache small bits of memory.
+
+	* glib/ghook.h: removed GMemChunk field from public API.
+
+	* glib/gslist.h:
+	* glib/glist.h: deprecate allocator API, provide _free1() for consistency.
+
+	* glib/gnode.h: deprecate allocator API.
+
+	* glib/gmain.c: reordered GPollRec fields so g_slice_free_chain() can
+	be used for poll rec lists.
+
+	* glib/grel.c: removed mem chunk usage, and allocated tuples via g_slice_*().
+	g_relation_destroy(): free all tuples from the all_tuples hash table,
+	this effectively maintains the life time track keeping of tuples.
+	g_relation_delete_tuple(): free tuples which are removed from the
+	all_tuples hash table. this fixes a temporary leak that was present
+	in the memchunk code until the destruction of the relation.
+
+2005-10-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/convert-test.c: Add some tests for conversions between
+	UTF-8, UCS-4 and UTF-16.
+
+	* glib/gutf8.c (g_utf8_to_ucs4, g_utf8_to_utf16): Fix handling
+	of len == -1, noticed by Morten Welinder.
+
+2005-10-27  Erdal Ronahi  <erdal.ronahi@gmail.com>
+
+	* configure.in: Added ku (Kurdish) to ALL_LINGUAS
+
+2005-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutf8.c (g_ucs4_to_utf8): Don't set items_read twice
+	in the error case, and add some documentation.  (#319806, Morten
+	Welinder)
+
+2005-10-19  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: Use AC_CHECK_FUNCS for _NSGetEnviron, to get the
+	config.h symbol automatically. Fixes bug #313731.
+
+2005-10-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c (g_win32_get_package_installation_directory):
+	Return a g_strdup()ed copy of the value stored in the hash table,
+	so that it can be g_free()d without leaving a dangling pointer in
+	the hash table. (#319232)
+
+2005-10-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gunicollate.c (g_utf8_collate_key_for_filename): Handle
+	all-zero sequences correctly.  (#317930, Sebastien Bacher)
+
+2005-10-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (g_markup_escape_text): Doc addition
+
+	* Makefile.am: Add Collation tests.
+
+	* tests/collate/*: Inputs and expected outputs for collation tests.
+
+	* tests/run-collate-tests.sh: Script to run collation tests.
+
+	* tests/unicode-collate.c (main): Rework slightly to make
+	it usable in unit tests. Also test g_utf8_collate_key_for_filename().
+
+2005-10-01  Behdad Esfahbod  <behdad@gnome.org>
+
+	* docs/reference/glib/tmpl/unicode.sgml:
+	* glib/gen-unicode-tables.pl:
+	* glib/gunibreak.h:
+	* glib/gunichartables.h:
+	* glib/gunicode.h:
+	* tests/casefold.txt:
+	* tests/casemap.txt: Updated to Unicode 4.1.  There are five new
+	GUnicodeBreakType types.  That may break some applications, like
+	Pango <= 1.10.
+
+2005-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c (g_ascii_strtoull): Add details to the 
+	docs.  (#314393, Matthew F. Barnes)
+
+	* glib/glib.symbols:
+	* glib/gprintf.h: Remove g_snprintf() and g_vsnprintf(), since
+	they are already declared in glib.h. This doesn't break documented
+	use of gprintf.h, but should probably be pointed out in the 
+	release notes for 2.10. (#314232, Behdad Esfahbod)
+
+Tue Sep 20 13:16:04 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gpattern.c (g_pattern_ph_match): applied significant recursion
+	complexity optimization, based on a patch from Matthias Clasen.
+
+	* tests/patterntest.c: more tests, mostly from matthias.
+
+2005-09-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gqueue.c (g_queue_insert_sorted): Correct the docs.
+	(#316703, Mark Drago)
+
+Mon Sep 19 17:23:23 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/gpattern.c: applied a patch from matthias which checks on the
+	upper bound of GPatternSpec length to optimize matches.
+	cosmetic fixups.
+
+	* tests/patterntest.c: added more match cases.
+
+2005-09-16  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstrfuncs.c (g_ascii_strcasecmp, g_ascii_strncasecmp): Add
+	warning to doc comment that these functions should not be used on
+	encodings like CP932.
+
+2005-09-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/keyfile-test.c: Add a test for grup names of length 1.
+
+	* glib/gkeyfile.c (g_key_file_line_is_group): Accept group names
+	of length 1.  (#316309)
+	
+2005-09-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (g_markup_escape_text): Clarify docs.
+
+2005-09-11  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* tests/refcount/Makefile.am (INCLUDES): Link the the refcount
+	tests to the system thread library $(G_THREAD_LIBS). Fixes #313744
+	and #314217.
+
+2005-09-11  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* glib/gmain.c: (g_child_watch_prepare), (g_child_watch_check),
+	(child_watch_helper_thread): Remove some dead code. Closes
+	bug #315278.
+
+2005-09-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib/Makefile.am: Create also a console version of the
+	gspawn-win32-helper program, gspawn-win32-helper-console.exe.
+	It's otherwise identical to gspawn-win32-helper.exe, except marked
+	as a console application (linked without the -mwindows option).
+	
+	* glib/gspawn-win32.c (do_spawn_directly, do_spawn_with_pipes):
+	Drop the dont_wait parameter. Its truth value correlated 100% with
+	the NULLness of the exit_status parameter anyway, so it's enough
+	to check whether exit_status is NULL. Invert the sense of the
+	dont_return_handle parameter and rename it to do_return_handle, to
+	make the code easier to read by avoiding double negations.
+
+	(g_spawn_sync_utf8, g_spawn_async_with_pipes_utf8): Modify calls
+	to do_spawn_with_pipes() accordingly.
+
+	(do_spawn_with_pipes): If we have a console, use the console
+	version of the helper program, otherwise use the GUI one. This
+	avoids extra console windows opening up in some situations. (In
+	case a console application uses the GUI gspawn-win32-helper.exe to
+	spawn another console application we would get a separate console
+	for the spawned console application).
+
+	* glib-zip.in: Distribute also gspawn-win32-helper-console.exe.
+
+2005-09-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmappedfile.c (g_mapped_file_new): Report an error
+	if the file is too large.  (#315275, Kjartan Maraas)
+
+	* glib/gkeyfile.c (g_key_file_load_from_fd): The return value
+	of read() is signed.  (#315273, Kjartan Maraas)
+	
+2005-08-31  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.h: Wrapping atexit() is a bad idea on Windows, where
+	the EXE and each DLL have their own atexit function chains.
+
+	#define g_atexit as atexit instead. This means it has a
+	better chance of doing what the caller wants. For instance,
+	gtkhtml calls g_atexit() registering a function in gtkhtml
+	itself. This caused a crash when g_atexit() was implemented as a
+	function in the GLib DLL. The gtkhtml DLL was already unloaded by
+	the time the GLib DLL got unloaded.
+
+	* glib/gutils.c: #undef the #define mentioned above, to also get a
+	real g_atexit() into the DLL for backward compatibility. Document
+	the Windows behaviour of g_atexit(), and document the varying ways
+	atexit() can behave in the context of dynamically loaded modules
+	on Unix.
+
+2005-08-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: 
+	* glib/gquark.h: 
+	* glib/gdataset.c: Add string interning functions.
+
+2005-08-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/giochannel.c: Unify some near-duplicate strings. (#314654,
+	Clytie Siddall)
+	
+2005-08-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version to 2.9.0
+
+2005-08-25  Tor Lillqvist  <tml@novell.com>
+
+	Make also the g_spawn*() functions take parameters in the GLib
+	file name encoding, i.e. UTF-8, on Windows. Has no impact on Unix
+	API or ABI. Like the other GLib API that was earlier changed to
+	use UTF-8 on Windows, the names of the functions that take UTF-8
+	have _utf8 suffixes added by using preprocessor macros in the
+	header file. The old names are kept for functions with the old
+	behaviour, taking parameters in the system codepage, for DLL ABI
+	stability.
+	
+	* glib/gspawn.h: On Win32 add the suffix _utf8 to the names of the
+	g_spawn*() functions.
+	
+	* glib/gspawn-win32.c: Use wide-char API on NT-based
+	Windows. Convert parameters from UTF-8 to wide chars (NT) or
+	system codepage (Win9x) and call the C library _wspawn*() or
+	spawn*() functions respectvely. Add DLL ABI stability versions
+	that take parameters in the system codepage.
+
+	* glib/gspawn-win32-helper.c: On NT-based Windows use the
+	wide-char versions of argv and envp, and use wide-char API to
+	change directory and spawn the program to run. Remove the verbose
+	debugging output, it was too complex to modify for the wide-char
+	features. (Just add temporary debugging printouts if needed, no
+	need to have them permanently in the source.)
+
+	* glib/gspawn.c: Corresponding documentation updates.
+
+	* glib/glib.symbols: Corresponding changes: Mark the ABI stability
+	symbols as PRIVATE, add the new _utf8-suffixed ones.
+
+2005-08-24  Stepan Kasal  <kasal@ucw.cz>
+
+	* glib/gtypes.h (G_MININT64): Cast the constant to gint64; it is
+	guint64 otherwise and that can produce warnings about comparison
+	between signed and unsigned.
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c: Fix the crt_externs.h include.
+
+2005-08-23  Stepan Kasal  <kasal@ucw.cz>
+
+	* NEWS: Fix spelling of my first name.
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* Bump version
+
+	* === Released 2.8.1 ===
+
+	* NEWS: Updates
+
+2005-08-20  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : link with ws2_32.lib
+
+2005-08-18  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Check for <sys/wait.h>
+
+	* glib/gbacktrace.c: Include <sys/wait.h> on if HAVE_SYS_WAIT_H.
+
+2005-08-18  Ross Burton  <ross@burtonini.com>
+
+	* glib/gstring.c:
+	Optimise single-character insertions.
+	
+	* glib/gutf8.c:
+	Note copied code.
+	
+	* tests/string-test.c:
+	Add tests for new optimisation, and fix a leak.
+
+2005-08-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Check for crt_externs.h and _NSGetEnviron.
+
+	* glib/gutils.c: On Darwin, include crt-externs.h and
+	define environ using _NSGetEnviron().  (#313731)
+
+2005-08-16  Stepan Kasal  <kasal@ucw.cz>
+
+	* glib/gutils.c (g_get_any_init): Move the body of the big if...
+	(g_get_any_init_do): ... to this new function.
+	(g_get_any_init): Declare as inline.
+	(g_get_any_init_locked): New inline function, does the locking.
+	Make use of these two throughout the code.
+
+2005-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbacktrace.c (g_on_error_stack_trace): Wait for
+	the child process and then simply return. This makes 
+	The "S" option work as documented in g_on_error_query().
+	(#313125, Matthew F. Barnes)
+
+	* glib/gunicode.h: Update the link to Unicode category
+	values.  (#313369, Behnam Esfahbod)
+
+	* glib/gqueue.c (g_queue_find_custom): Clarify docs
+	a little.  (#311727, Tristan van Berkom)
+
+	* glib/abicheck.sh, gobject/abicheck.sh: Make the 
+	check work on ia64 too, where some symbols ended up 
+	in yet another section.
+
diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12
new file mode 100644
index 0000000..b88cdd2
--- /dev/null
+++ b/ChangeLog.pre-2-12
@@ -0,0 +1,738 @@
+2006-08-22  Matthias Clasen <mclasen@redhat.com>
+
+	* Branch for 2.12
+
+2006-08-20  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gnulib/vasnprintf.c (vasnprintf): Fix crash when printing
+	large 64-bit values on Win32 using the %I64x format. (#351034,
+	Neil Piercy)
+
+Wed Aug 16 13:59:07 2006  Tim Janik  <timj@gtk.org>
+
+	* tests/gobject/Makefile.am:
+	* tests/gobject/singleton.c: added test program which demonstrates
+	and checks singleton construction.
+
+2006-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_get_groups):
+	* glib/gmain.c (g_source_is_destroyed): Add Since tags.
+	* glib/gkeyfile.c (g_key_file_get_double_list): Fix
+	Since tag.  (#351583, Brian Cameron)
+
+	* configure.in: Bump version
+
+	* === Released 2.12.2 ===
+
+	* NEWS: Updates
+
+2006-08-08  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_remove_group)
+	(g_bookmark_file_set_app_info): Plug a couple of leaks
+	when removing data from a bookmark.
+
+2006-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c (find_file_in_data_dirs): Correct the
+	grammar of an error message.  (#349792, Jakub Friedl)
+
+	* glib/gkeyfile.c (g_key_file_to_data): Don't insert unnecessary
+	newlines in keyfiles.  (#349825, Chris Wilson)
+
+	* glib/guniprop.c (g_unichar_toupper, g_unichar_tolower) 
+	(real_toupper, real_tolower): If a character can't be converted,
+	don't replace it with a NUL byte, but leave it unchanged.  
+	(#348491, Nikolai Weibull)
+
+	* tests/unicode-caseconv.c: Adapt to this change. 
+
+	* tests/unicode-caseconv.c (main): Add a comment to point out
+	a quirk in the test data that we are working around here.
+
+2006-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c (g_unichar_isxdigit): Make it only accept those
+	characters that we accept i g_unichar_xdigit_value(), i.e. don't
+	accept non-decimal digits. (#347842, Nikolai Weibull)
+
+2006-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gunidecomp.c (_g_utf8_normalize_wc): Update to reflect Unicode
+	PR #29 (#348694, Nikolai Weibull)
+
+	* tests/unicode-normalize.c (encode), (test_form): Make output more
+	useful, reporting the unexpected output of the test.
+
+2006-07-24  Tor Lillqvist  <tml@novell.com>
+
+	* tests/slice-test.c: Use g_get_current_time() insted of
+	gettimeofday().
+
+2006-07-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.12.1 ===
+
+	* glib/gconvert.c: Fix the prototype of _g_charset_get_aliases.
+	(#346494, Thomas Klausner)
+
+	* NEWS: Updates
+
+2006-07-21  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gmirroringtable.h: Updated to Unicode Character Database 5.0.0.
+
+2006-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/guniprop.c (real_toupper, real_tolower): Small optimization.
+	(#348011, Nikolai Weibull)
+
+2006-07-19  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gunibreak.h:
+	* glib/gunichartables.h:
+	* glib/gunicomp.h:
+	* glib/gunidecomp.h:
+	Update to final Unicode Character Database 5.0.0. (#336281)
+
+2006-07-06  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gutils.c (g_parse_debug_string): When matching debug flag keys, 
+	ignore case and accept any of comma, colon, semicolon, space, and tab
+	as separators.  Also, match dash with underscore.
+
+2006-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbase64.c: Fix typos in the docs.  (#346660, Mark
+	Drago)
+
+2006-07-03  Runa Bhattacharjee <runabh@gmail.com>
+
+	* configure.in: Added Bengali India (bn_IN) in ALL_LINGUAS.
+
+2006-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.12.0 ===
+
+2006-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+	* configure.in: Set version to 2.12.0
+
+2006-06-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtimer.c (mktime_utc): Fix an off-by-2 error
+	in the leap year calculation.  (#344905, Dan Winship)
+
+	* tests/testglib.c (main): Change the test data for
+	the g_time_val_from_iso8601 tests to expose an off-by-2
+	error in the leap year calculation.
+
+	* configure.in: Bump version
+
+	* === Released 2.11.4 ===
+
+	* NEWS: Updates
+
+2006-06-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/file-test.c (test_mkstemp): Add tests.
+
+	* glib/gfileutils.c (g_mkstemp): Allow the XXXXXX to occur
+	inside the template, not just at the end.  
+
+2006-06-14  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/gkeyfile.c (g_key_file_to_data): Separate groups by
+	an empty line  (#344868, Christian Persch)
+
+2006-06-14  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_listenv): Add Windows notes to doc comment.
+
+2006-06-12  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* glib/gbookmarkfile.h:
+	* glib/gbookmarkfile.c (g_bookmark_file_remove_item): Return
+	a boolean instead of void.
+
+	* tests/bookmarkfile-test.c (test_modify): Add a test case
+	for g_bookmark_file_remove_item().
+
+2006-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* Bump version
+
+	* === Released 2.11.3 ===
+
+	* NEWS: Updates
+
+2006-06-09  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_remove_application): Use
+	an empty string to pass the test in set_app_info.
+
+	(g_bookmark_file_move_item): Remove the old item from the
+	look up table; return success in case of empty target.
+
+2006-06-08  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gunicollate.c (msc_strxfrm_wrapper): Workaround for bug in
+	strxfrm() in Microsoft's newer C runtimes. (#343919, Kazuki
+	Iwamoto)
+
+2006-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.11.2 ===
+
+	* configure.in: Set interface age to 0.
+
+	* NEWS: Updates
+
+	* glib/gmain.c: Fix some doc formatting issues.
+
+	* glib/gstrfuncs.c: Revert accidental commit.
+
+	* glib/gmain.c (get_dispatch): Don't leak the
+	dispatch struct.  (#321886)
+
+	* tests/strtod-test.c: Add some tests involving
+	leading whitespace.
+
+	* glib/gstrfuncs.c (g_ascii_formatd): Skip leading 
+	whitespace.  (#343899, Øystein Johansen)
+
+2006-06-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.h: 
+	* glib/gmain.c: Add three new functions, 
+	g_main_current_source, g_source_set_funcs and 
+	g_source_is_destroyed, that will be necessary to 
+	solve thread-safety issues with idles in GTK+.  
+	(#321886, Chris Wilson)
+
+2006-06-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_write_chars): Avoid
+	running in an assertion with small writes.  (#343566, Chris
+	Wilson)
+
+	* tests/iochannel-test.c: Add a testcase for small writes.
+
+	* glib/glib.symbols: 
+	* glib/ghash.h: 
+	* glib/ghash.c: Add g_hash_table_{remove,steal}_all to
+	remove all nodes from a hash table.  (#168538, Matt Barnes)
+
+2006-06-01  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gkeyfile.c (g_key_file_to_data),
+	(g_key_file_parse_value_as_comment),
+	(g_key_file_parse_comment_as_value):
+	* glib/gscanner.c (g_scanner_get_token_ll): Cleanup. Use return
+	value of g_string_free(...). (#343548, Chris Wilson)
+
+2006-05-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (g_markup_parse_context_parse): 
+	Don't use g_str_has_{prefix,suffix} here.
+
+2006-05-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.h: Add a GMarkupParseFlags flag for
+	treating CDATA as text. 
+
+	* glib/gmarkup.c (g_markup_parse_context_parse): 
+	Implement it here.
+
+2006-05-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/markups/expected-*: Output that test-markup
+	is expected to produce when run on the valid gmarkup 
+	examples.
+
+	* tests/markup-test.c: Only dump the results of the
+	first, unchunked parse, to compare it against the expected
+	output. 
+
+	* tests/run-markup-tests.sh: For valid examples, compare
+	the output of test-markup against the corresponding
+	expected-<n> file.
+	
+2006-05-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Don't compile timeloop on Minix. 
+	(Leonard den Ottolander)
+
+2006-05-22  Sebastian Wilhelmi  <wilhelmi@google.com>
+
+	* glib/gthread.c (g_thread_init_glib): Run _g_atomic_thread_init
+	as the first of the full fledged initializers to allow the later
+	to potentially use atomic ints (which they currently do
+	not). (#342563, Peter Kjellerstedt)
+
+2006-05-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/Makefile.am: 
+	* tests/strtoll-test.c: Add tests for g_ascii_strtoll()
+	and g_ascii_strtoull().
+
+	* glib/glib.symbols:
+	* glib/gstrfuncs.h: 
+	* glib/gstrfuncs.c (g_ascii_strtoll): New function to
+	parse signed 64bit integers like strtoll does.  
+
+	* glib/goption.c (parse_int64): Use g_ascii_strtoll(),
+	since strtoll() is C99 and not available on some
+	systems.  (#341826, Kazuki Iwamoto)
+
+2006-05-15  Matthias Clasen  <mclasen@redhat.com>
+	
+	* configure.in: Bump version
+
+	* === Released 2.11.1 ===
+
+	* NEWS: Updates
+
+2006-05-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/grel.c: Fix several cases of deref-before-NULL-check.
+	(#341191, Pascal Terjan)
+
+	* glib/glib.symbols: 
+	* glib/goption.h: 
+	* glib/goption.c: Allow optional summary and description
+	texts before and after the option descriptions, and add
+	a way to translate them.  (#336120, Behdad Esfahbod)
+
+2006-05-12  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c (g_io_win32_sock_set_flags): Implement
+	setting/clearing G_IO_FLAG_NONBLOCK for channels attached to
+	sockets. (#341192)
+	(g_io_win32_unimpl_set_flags): set_flags method for the
+	unimplemented case.
+	
+2006-05-11  Bastien Nocera  <hadess@hadess.net>
+
+	* glib/goption.c: (parse_int64), (parse_arg), (free_changes_list):
+	* glib/goption.h:
+	* tests/option-test.c: (arg_test6), (main): add an int64 type for
+	GOption (G_OPTION_ARG_INT64) (#341237)
+
+2006-05-10  Sebastian Wilhelmi  <wilhelmi@google.com>
+
+	* glib/gthread.h, gthread/gthread-impl.c: Make the magic and
+	location arguments to the error-checking-mutex functions const and
+	do not write to them, as we might not own them. Clean up the
+	error-checking-mutex code quite a bit. (#335198, Chris Wilson)
+
+	* glib/gthread.c: Use g_atomic_pointer_set instead of old
+	homegrown version now that we have it. (#335198, Chris Wilson)
+
+	* gthread/gthread-posix.c, gthread/gthread-win32.c: Prevent
+	calling into g_cond_wait resp. g_mutex_lock/unlock directly to
+	avoid recursions into the errorcheking mutex code (and out of
+	principle anyway). (#335198, Chris Wilson)
+
+	* tests/errorcheck-mutex-test.c: Adapt to GLib coding standards.
+
+2006-05-09  Sebastian Wilhelmi  <wilhelmi@google.com>
+
+	* glib/gthreadinit.h: Renamed to glib/gthreadprivate.h and moved
+	system thread identifier comparision and assignment macros from
+	glib/gthread.c to glib/gthreadprivate.h.
+
+	* glib/Makefile.am, glib/gatomic.c, glib/gconvert.c, glib/gmain.c,
+	glib/gmem.c, glib/gmessages.c, glib/grand.c, glib/gslice.c,
+	glib/gthread.c, glib/gutils.c, gthread/gthread-impl.c: Use
+	glib/gthreadprivate.h instead of glib/gthreadinit.h.
+
+	* gthread/gthread-impl.c: Use GSystemThread instead of GThread for
+	owner determination. (#311043, jylefort@FreeBSD.org)
+
+	* tests/Makefile.am, tests/errorcheck-mutex-test: New test program
+	to test for all checked violations.
+
+	* glib/gprintf.c, glib/gspawn-win32.c, glib/gutf8.c,
+	gthread/gthread-impl.c, gthread/gthread-posix.c,
+	gthread/gthread-win32.c: Use canonical include form for internal
+	headers. config.h is always there.
+
+	* Remove obsolete gthread/gthread-solaris.c.
+
+2006-05-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/convert-test.c (test_one_half): Use encoding names which 
+	may work better on Solaris.  (#340434, Alessandro Vesely)
+
+	* tests/keyfile-test.c (test_number): Add some tests for
+	invalid floating point numbers.
+
+	* glib/gkeyfile.c (g_key_file_parse_value_as_double): Return
+	an error for the empty string.  (#339105, Morten Welinder)
+
+	* glib/gscanner.c (g_scanner_config_template): Make const,
+	noticed by Kjartan Maraas.
+
+2006-05-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_set_string_list)
+	(g_key_file_set_locale_string_list): Fix invalid memory
+	reads.  (#340816, Nick Treleaven)
+
+2006-05-04  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gbase64.c: (g_base64_decode_step):
+	Fix OOB write (#340538)
+
+2006-05-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/base64-test.c: Add some more tests.
+
+	* glib/gbase64.c (g_base64_decode_step): Avoid writing
+	beyond the guaranteed lenght of the output buffer, if
+	there is padding.
+
+	* tests/base64-test.c (test_incremental): Use malloced memory
+	instead of stack-allocated, so that MALLOC_CHECK_=2 catches
+	the OOB write...
+
+	* glib/gbookmarkfile.c (g_bookmark_file_load_from_data): Remove
+	an overzealous return_if_fail check that causes make check to 
+	fail.
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+	
+	* === Released 2.11.0 ===
+
+	* NEWS: Updates
+
+	* tests/casemap.txt: 
+	* tests/casefold.txt: Regenerate from Unicode 5.0 data. 
+
+	* glib/guniprop.c: Make interval_compare static.
+
+Tue May  2 15:00:00 2006  Tim Janik  <timj@gtk.org>
+
+	* tests/gobject/deftype.c: added test code from Behdad Esfahbod, 
+	see #337128.
+
+Tue May  2 14:18:25 2006  Tim Janik  <timj@gtk.org>
+
+	* glib/goption.c (g_option_context_parse): fixed leak in short
+	option parsing. rewrote parts of the code to be more concise to
+	enhance readability. fixed exaggerated uses of strlen.
+
+2006-04-28  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c: #include <stdlib.h>
+
+2006-04-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Add g_unichar_iswide_cjk.
+	* glib/guniprop.c: Add a "Since: 2.12".
+
+	* NEWS: Updates
+
+2006-04-27  Behdad Esfahbod  <behdad@gnome.org>
+
+	* docs/reference/glib/glib-sections.txt,
+	* glib/gunicode.h glib/guniprop.c: Implement g_unichar_iswide_cjk().
+	(#105626)
+
+2006-04-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_set_description) 
+	(g_bookmark_file_set_title, g_bookmark_file_set_icon): 
+	Remove some special-casing of empty string which led to 
+	dangling pointers.  (#339337, Morten Welinder)
+	(expand_exec_line): Don't use printf() needlessly, handle
+	trailing '%' gracefully.  (#339338, Morten Welinder)
+	(is_element_full): Silence the compiler.
+	(g_bookmark_file_dump, bookmark_metadata_dump): 
+	(bookmark_app_info_dump): Escape strings before dumping 
+	them in xml.  (#339340, Morten Welinder)
+
+2006-04-27  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gunibreak.h, glib/gunichartables.h: Regenerated using
+	Unicode Character Database 5.0 beta.
+
+2006-04-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/grand.c (g_rand_new): Don't repeat a failed fclose()
+	call, since that invokes undefined behaviour.  (Coverity)
+
+2006-04-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c (is_element_full): Avoid a possible
+	NULL dereference (found by Coverity), also avoid some 
+	pointless strdups.
+
+	* tests/keyfile-test.c (test_comments): Add a test for
+	the previous change.
+
+	* glib/gkeyfile.c (g_key_file_lookup_group_node): Remove
+	redundant code.
+	(g_key_file_get_group_comment): Don't dereference before
+	checking for NULL.  (#338572, Coverity, Pascal Terjan)
+
+2006-04-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdataset.c: Add some missing Since: 2.8 tags.
+
+2006-04-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gatomic.c: Adapt to the changed prototype of
+	InterlockedCompareExchange() in newer SDKs. Use
+	InterlockedCompareExchangePointer() when applicable. (#155884,
+	John Ehresman)
+
+2006-04-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.h:
+	* glib/glib.symbols:
+	* glib/gkeyfile.c: Add api to get and set doubles and 
+	lists of doubles.  (#164719, Maurizio Monge, Dom Lachowicz)
+
+	* tests/keyfile-test.c: Add tests for new api.
+
+	* glib/gkeyfile.c (g_key_file_add_group): Accept duplicate
+	groups.  (#157877, Sebastien Bacher)
+
+	* tests/keyfile-test.c: Add tests for duplicate key and
+	duplicate group handling.
+
+2006-04-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gcompletion.c (g_completion_complete_utf8): Make passing
+	NULL for new_prefix work as documented.  (#338845, Yevgen Muntyan)
+
+	* tests/completion-test.c: Test that passing NULL for 
+	new_prefix in g_completion_complete_utf8 works.
+
+2006-04-17  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* configure.in: Remove obsolete entry for no_NO.
+	* po/no.po: And the translation.
+
+2006-04-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdate.c (g_date_fill_parse_tokens): Avoid an array
+	overrun.  (Coverity, fix by Pascal Terjan)
+
+2006-04-12  Bastien Nocera  <hadess@hadess.net>
+
+	reviewed by: Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gconvert.c: add more details about which RFC is concerned
+	when using g_filename_to_uri (#337553)
+
+2006-04-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (parse_arg): Add an assert to make it
+	clear when value can be NULL.
+
+2006-04-07  Martyn Russell  <martyn@imendio.com>
+
+	* tests/threadpool-test.c: (test_thread_stop_unused): Removed an
+	assertion which can fail and is not a critical test.
+
+2006-04-07  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : added gbase64.obj and derive the static libs
+	name from auto* variables
+	* glib/makefile.msc.in : link user32.lib for MessageBox()
+
+2006-04-07  Martyn Russell  <martyn@imendio.com>
+
+	* glib/gasyncqueue.[ch]: Added private API
+	_g_async_queue_get_mutex so that g_thread_pool_free() can use the
+	async queue mutex. 
+	
+	* glib/gthreadpool.c: Make sure
+	g_thread_pool_stop_unused_threads() actually stops unused threads
+	and global limits (like max idle time and max unused threads) can
+	be set without creating a thread pool first. Fixed #335215 (patch
+	from Chris Wilson).  
+	
+	* tests/threadpool-test.c: Added two new tests, tests setting
+	global limits before creating a thread pool. The second test
+	makes sure unused threads are actually stopped when using the
+	g_thread_pool_stop_unused_threads(). 
+
+2006-04-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gnulib/vasnprintf.c (vasnprintf): Make
+	long long printing work if snprintf is not 
+	available.  (#332841, Michael McDonald)
+
+2006-04-05  Behdad Esfahbod  <behdad@gnome.org>
+
+	* tests/option-test.c: Check the return value of g_get_prgname for
+	NULL before passing to strcmp.
+
+	* tests/slice-test.c: Report the correct name in Usage summary.
+
+2006-04-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/run-collate-tests.sh: Fix up shell script.
+
+	* tests/option-test.c (arg_test5): Skip the test if
+	setting the locale fails.
+	(empty_test1): Reset prgname before the test.
+
+	* tests/Makefile.am: Arrange for run-bookmark-test.sh
+	to be run by make check.
+
+	* tests/utf8-pointer.c: 
+	* tests/tree-test.c: Silence warnings.
+
+2006-04-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/gbase64.[hc]: Add G_GNUC_MALLOC where
+	appropriate, use glib types.
+
+2006-04-04  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/Makefile.am:
+	* glib/gbase64.[ch]:
+	* glib/glib.symbols:
+	Add base64 encode/decode functions
+	
+	* glib/glib.h:
+	Include gbase64.h
+	
+	* tests/Makefile.am:
+	* tests/base64-test.c:
+	Tests for base64 functions
+
+2006-04-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdate.c: Move short_month_names and long_month_names
+	to bss.
+
+	* glib/gspawn-win32.c (g_spawn_error_quark):
+	* glib/gspawn.c (g_spawn_error_quark):
+	* glib/gshell.c (g_shell_error_quark):
+	* glib/gmarkup.c (g_markup_error_quark):
+	* glib/goption.c (g_option_error_quark):
+	* glib/gkeyfile.c (g_key_file_error_quark):
+	* glib/giochannel.c (g_io_channel_error_quark):
+	* glib/gfileutils.c (g_file_error_quark):
+	* glib/gconvert.c (g_convert_error_quark):
+	* glib/gbookmarkfile.c (g_bookmark_file_error_quark):
+	* glib/gthread.c (g_thread_error_quark): No point in making
+	the error path fast by caching quarks.
+
+	* glib/gbookmarkfile.c: Make the parser struct const.
+
+2006-04-04  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gbookmarkfile.c: Fix accidentally broken build.
+
+2006-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c: Don't include sys/time.h  (#337027,
+	 Kazuki IWAMOTO)
+
+2006-03-31  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c (g_remove): Revert change below. It wasn't a good
+	idea after all, says the original bug reporter. See bug for
+	discussion.
+
+2006-03-30  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c (g_remove): [Win32] call rmdir() only if remove()
+	fails with errno set to ENOENT, to leave errno set to EACCESS if
+	that is the problem. (#334799, Yevgen Muntyan)
+
+2006-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_get_app_info): Sync
+	the parameter names with the .h files, otherwise gtk-doc
+	misbehaves.
+
+2006-03-27  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* tests/.cvsignore: Add bookmarkfile-test to the ignored files.
+
+2006-03-27  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* tests/Makefile.am:
+	* tests/bookmarkfile-test.c:
+	* tests/run-bookmark-test.sh:
+	* tests/bookmarks/*.xbel: Add test suite for GBookmarkFile.
+
+2006-03-27  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* docs/reference/glib/glib-docs.sgml:
+	* docs/reference/glib/glib-sections.txt:
+	* docs/reference/glib/tmpl/bookmarkfile.sgml: Add documentation for
+	GBookmarkFile to GLib's reference guide.
+
+2006-03-27  Emmanuele Bassi  <ebassi@cvs.gnome.org>
+
+	* glib/glib.h:
+	* glib/gbookmarkfile.h
+	* glib/gbookmarkfile.c: Add GBookmarkFile, a parser for files
+	containing bookmarks stored using the Desktop Bookmark
+	specification. Fixes bug #327662.
+
+	* glib/glib.symbols:
+	* glib/Makefile.am:
+	* glib/makefile.msc.in:
+	* glib/makefile.mingw.in: Build glue for GBookmarkFile.
+
+2006-03-27  Dom Lachowicz  <cinamod@hotmail.com>
+
+	* tests/option-test.c: Copy-and-paste error slipped into test5. Enable
+	test5, as per Matthias' comments in bug 329548#c11.
+
+	Change a gboolean to an int. Fixes bug #329789.
+
+	* configure.in: Bump version number to 2.11.0
+	
+2006-03-27  Matthias Clasen  <mclasen@redhat.com>
+
+	Add support for floating point numbers to goption.
+	(#329548, Behdad Esfahbod, patch by Antoine Dopffer and 
+	 Dom Lachowicz)
+
+	* glib/goption.h:
+	* glib/goption.c: Support double arguments.
+
+	* tests/option-test.c: Test double arguments.`
+
+2006-03-26  Matthias Clasen  <mclasen@redhat.com>
+
+        * glib/goption.c (g_option_context_new): Improve the description
+        of parameter_string in the docs.  (#336085, Claudio Saavedra)
+
+2006-03-24  Martyn Russell  <martyn@imendio.com>
+
+	* glib/gthreadpool.c: Updated the documentation to explain that
+	when the maximum threads is > 1 the sort functionality is not 100%
+	accurate due to the ramdom nature of the scheduler choosing which
+	threads to execute. Fixes bug #334943.
+
+	* tests/threadpool-test.c: Disabled the debugging by default and
+	fixed the sort test to set the maximum threads to 1 to guarantee
+	the thread entry function is called in order. 
+
+2006-03-23  Matthias Clasen  <mclasen@redhat.com> 
+
+	=== Branch for 2.10 ===
diff --git a/ChangeLog.pre-2-14 b/ChangeLog.pre-2-14
new file mode 100644
index 0000000..3a94a19
--- /dev/null
+++ b/ChangeLog.pre-2-14
@@ -0,0 +1,1963 @@
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	=== Branch for 2.14 ===
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gspawn.c (g_spawn_async_with_pipes): Slightly improve
+	the wording of the docs.  (#492677, Areg Beketovski)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/pcre/Makefile.am: Add an include to fix builddir != srcdir
+	builds.  (#494602, Yevgen Muntyan)
+
+2007-11-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib/update-pcre/notdll.patch: Not needed, just use -DPCRE_STATIC.
+
+	* glib/update-pcre/Makefile.am: Drop notdll.patch.
+
+	* glib/update-pcre/Makefile.am-1
+	* glib/update-pcre/update.sh
+	* glib/pcre/Makefile.am
+	* glib/Makefile.am: Use -DPCRE_STATIC.
+
+	* tests/gio-test.c
+	* tests/mainloop-test.c
+	* tests/spawn-test.c: #define pipe(fds) _pipe(fds, 4096,
+	_O_BINARY) on Windows
+
+	* tests/regex-test.c (test_expand): Don't print NULL with %s.
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.14.3 ===
+
+	* NEWS: Updates
+
+2007-11-06  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/pcre/*: Update the internal copy of PCRE to 7.4
+
+2007-10-22  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (_glib_gettext): Plug small one-time leak on
+	Windows. (#488068, Daniel Atallah)
+
+2007-10-21  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gdate.c (g_date_strftime):
+	* glib/gmain.c (g_main_context_check):
+	* glib/gregex.c (g_match_info_fetch_all), (g_regex_split_full):
+	* glib/gthread.c (g_once_init_enter_impl), (g_once_init_leave):
+	* glib/gthread.h:
+	* glib/gutf8.c (g_utf16_to_utf8), (g_utf16_to_ucs4):
+	* tests/errorcheck-mutex-test.c (lock_locked_mutex),
+	(trylock_locked_mutex), (unlock_unlocked_mutex),
+	(free_locked_mutex), (wait_on_unlocked_mutex),
+	(wait_on_otherwise_locked_mutex), (timed_wait_on_unlocked_mutex),
+	(timed_wait_on_otherwise_locked_mutex):
+	Fix warnings from sparse. (#487491, Kjartan Maraas)
+
+2007-10-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.2 ===
+
+	* NEWS: Updates
+
+	* configure.in: Check for sys/resource.h
+
+	* glib/gspawn.c: Improve the fdwalk implementation on Linux
+	to only walk over actually open file descriptors. (#469231, 
+	Lennart Poettering)
+
+2007-10-13  Sven Herzberg  <herzi@gnome-de.org>
+
+	Reviewed by Tim Janik.
+
+	Created marshallers that don't throw gcc warnings when compiling with
+	-WUnused (fixes #359165).
+
+	* gobject/glib-genmarshal.c: decorate return_value and invocation_hint
+	with G_GNUC_UNUSED
+
+2007-10-04  Tor Lillqvist  <tml@novell.com>
+
+	* glibconfig.h.win32.in: Always define G_CAN_INLINE. Even MSVC6 is
+	capable of inlining. (#483337, Steve Lhomme)
+
+2007-09-19  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/ghook.c (g_hook_free): Check for NULL finalizer. (#476849, Areg
+	Beketovski)
+
+2007-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.14.1 ===
+
+2007-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h (GUserDirectory): Fix doc formatting.
+	* glib/gmain.c (g_main_depth): Fix doc formatting.
+
+2007-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Replace -pthread by -lpthread for 
+	Freebsd, too.  (#475619, Roy Marples)
+
+2007-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: When compiling against system pcre, 
+	add a private dependency to the pc file. This should
+	fix static builds with system pcre.  (#475923)
+
+	* glib-2.0.pc.in: Add a Requires.private line
+
+2007-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2007-09-14 15:07:28  Tim Janik  <timj@gtk.org>
+
+	* glib/gutf8.c (g_utf8_strreverse): applied fix for bug #476840.
+
+	* tests/utf8-pointer.c (test_misc): added test for g_utf8_strreverse().
+
+2007-09-11  Marco Barisione <marco@barisione.org>
+
+	* glib/Makefile.am:
+	* configure.in: propagate the pcre flags to libglib and not to all
+	parts of glib. (#475854, dmacks@netspace.org)
+
+	* configure.in: fix a typo in the previous commit. (#475854, comment
+	#4)
+
+2007-09-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Define G_ATOMIC_ARM.
+
+	* glib/gatomic.c: Add Arm implementation of atomic
+	operations.  (#457601, Jussi Laako)
+
+2007-09-10  Marco Barisione <marco@barisione.org>
+
+	* glib/gregex.c: define PCRE_ERROR_NULLWSLIMIT if it's not defined by
+	PCRE, has PCRE 7.3 removed this definition. (#475474)
+	* configure.in: bump PCRE requirement to version 7.2.
+	* glib/gregex.c: use pcre_get_stringnumber() in
+	get_matched_substring_number() if G_REGEX_DUPNAMES was not set.
+	(#444765, Yevgen Muntyan)
+	* glib/gregex.c: change the type of ref_count from guint to gint, so
+	we can remove some ugly casts.
+
+2007-09-05  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gregex.c: Fix header inclusion. (#473879, Peter Kjellerstedt)
+
+Wed Aug 29 12:08:40 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gthread.h (g_once_init_enter): fixed compiler warning about
+	loosing volatile qualifier, bug #457641.
+
+2007-08-24  Michael Natterer  <mitch@imendio.com>
+
+	* glib/gslice.[ch]: make g_slice_copy() take a gconstpointer
+	instead of a gpointer.
+
+2007-08-22  Cody Russell  <bratsche@gnome.org>
+
+	* glib/gprintf.c: Document all printf functions to use
+	"bytes" terminology rather than "characters". (#469051)
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c: Document that g_unichar_get_script() is
+	equivalent to pango_script_for_unichar().
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gmappedfile.c:
+	* glib/gregex.c:
+	* glib/gstdio.c:
+	Fix typos (#468694).
+
+2007-08-14  Cody Russell  <bratsche@gnome.org>
+
+	* gobject/gsignal.c: g_type_default_interface_ref() was not
+	ensuring working g_signal_list_ids.  Added checks for
+	!G_TYPE_IS_INTERFACE (itype).
+	(#465625, by some guy who calls himself Yeti)
+
+Tue Aug 14 02:06:10 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gthread.c (g_once_init_enter_impl): prevent race covered
+	by g_once_init_enter(), by checking for previous initializations
+	before entering initialisation branch.
+
+	* tests/onceinit.c: added multi-thread/multi-initializer stress test
+	using unoptimized g_once_init_enter_impl().
+
+Mon Aug 13 14:30:15 2007  Tim Janik  <timj@imendio.com>
+
+	* tests/onceinit.c (main): fixed array size typo.
+
+Mon Aug 13 14:21:44 2007  Tim Janik  <timj@imendio.com>
+
+	* tests/onceinit.c: test g_once_init_*() before and after
+	g_thread_init() and test concurrency resolution.
+
+Mon Aug 13 14:18:22 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gthread.c (g_thread_create_full): prevent linking a freed
+	GThread	structure into global thread list in error cases.
+
+2007-08-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (append_escaped_text): Handle restricted
+	characters by converting them to numeric character 
+	entities.  (#464145, Andreas Monitzer)
+
+	* tests/markup-escape-test.c: Add tests for restricted
+	characters and numeric character entities. 
+
+2007-08-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/Makefile.am:
+	* glib/abicheck.sh: Make it work regardless of --enable-debug
+
+2007-08-08  Tristan Van Berkom <tvb@gnome.org>
+
+	* docs/reference/gobject/tmpl/gparamspec.sgml: Fixed minor typo in docs.
+
+2007-08-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* MAINTAINERS: Update for new format regulations
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.14.0 ===
+
+	* NEWS: Updates
+
+	* configure.in: Bump version to 2.14.0
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gregex.c: Revert the J handling change,
+	since it doesn't work.
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gregex.c: Fix a C99ism.  (#462549, Kazuki IWAMOTO)
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gregex.c: Handle J changes in the pattern
+	correctly.  (#444765, Yevgen Muntyan)
+
+2007-08-03  Pramod Raghavendra  <pramodleo@yahoo.co.uk>
+
+	* configure.in: Added kn to ALL_LINGUAS
+
+2007-08-01  Tor Lillqvist  <tml@novell.com>
+
+	* glib/update-pcre/notdll.patch: Update so it applies again.
+
+	* glib/pcre/pcre.h: Corresponding change.
+
+	* glib/gutils.c (get_special_folder): Drop leftover use of a
+	union.
+
+	* glibconfig.h.win32.in: Update to match what configure produces.
+
+2007-07-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pcre/*: Update the internal PCRE to 7.2
+
+2007-07-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pltcheck.sh: Fix some glitches
+
+	* glib/gregex.c: Remove debug spew
+
+2007-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gunidecomp.c:
+	* glib/gregex.c:
+	* glib/gstring.c: Various doc cleanups.
+
+2007-07-20  Alexander Larsson  <alexl@redhat.com>
+
+        * configure.in:
+	Add goffset type (64bit file size)
+	Add G_MAXSSIZE and G_MINSSIZE
+
+2007-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Fix the build.
+
+2007-07-19  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib.symbols:
+	* glib/gunicode.h:
+	* glib/gunicodeprivate.h:
+	* glib/gunidecomp.c (g_unichar_combining_class):
+	* glib/guniprop.c (has_more_above):
+	Make g_unichar_combining_class() public. (#453998)
+
+Fri Jul 13 01:01:46 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gthread.[hc]: more atomic ops pointer cast fixes. this time it'll
+	work with atomic op macros *and* atomic op functions.
+
+Fri Jul 13 00:50:40 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gthread.[hc]: fixed missing pointer casts when using atomic ops.
+
+2007-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.7 ===
+
+	* NEWS: Updates
+
+Thu Jul 12 17:31:08 2007  Tim Janik  <timj@imendio.com>
+
+	* tests/slice-concurrent.c: beautified output somewhat. fixed long
+	sleeps by reducing sleep accumulating and using randomized re-scheduling
+	(which works on UP and SMP). increased possible blocksizes.
+
+Thu Jul 12 17:26:05 2007  Tim Janik  <timj@imendio.com>
+
+	* tests/slice-concurrent.c: added GSLice test from Stefan Westerfeld,
+	bug #433314.
+
+Thu Jul 12 15:46:40 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: migrate per-thread magazine caches from single-thread
+	scenario to first thread using GSlice after g_thread_init(); based on
+	a patch by Tor Lillqvist, fixes #331853.
+	removed warning about g_thread_init() being called after other glib
+	functions (in particular g_slice* calls), because GSlice can cope
+	with this now and the rest of glib is believed to cope as well.
+
+	* tests/slice-threadinit.c: new test program which tests GSlice working
+	across g_thread_init() calls.
+
+2007-07-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pltcheck.sh: Add g_once_init_enter to the whitelist of
+	symbols allowed to have a local PLT entry, to fix 'make check'.
+
+Tue Jul 10 12:24:35 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gthread.[hc]: implemented g_once_init_enter(),
+	g_once_init_enter_impl() and g_once_init_leave(), based on a patch by
+	Antoine Tremblay, fixes #65041.
+	adapted exported inline function mechanism from gutils.[hc] for inlining
+	g_once_init_enter_impl() in gthread.[hc].
+
+2007-07-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2007-07-09  Loïc Minier  <lool@dooz.org>
+
+	* tests/refcount/closures.c: (main): Output newlines after thousand
+	iterations of the inner-loop of the closures test; this helps having
+	smaller lines and continuously outputting new lines.  (#447048).
+
+2007-07-09  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/gfileutils.c (write_to_temp_file): save errno to prevent it
+	being clobbered by call to g_filename_display_name().  Bug #453796.
+
+2007-07-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-gettext.m4: Fix a small problem with
+	msgfmt -c detection.  (#341988, Laszlo Peter)
+
+2007-07-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (g_markup_parse_context_end_parse): Handle
+	all states.  (#454473)
+
+2007-07-06  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c (g_io_win32_check): When WSAEnumNetworkEvents()
+	signals FD_CONNECT that means that the connection attempt
+	finished, either successfully or failed. Test explicitly whether
+	the connnection succeeded and set either G_IO_OUT if it did,
+	G_IO_ERR|G_IO_HUP if it failed.
+
+	Make sure we never set both G_IO_OUT and G_IO_HUP simultaneously
+	because in Unix poll(2) POLLOUT and POLLHUP are mutually
+	exclusive.
+
+	Ignore whether the caller wants to watch G_IO_HUP or not. Always
+	select for FD_CLOSE because Unix poll(2) also ignores whether
+	POLLHUP in set the requested events bitmask or not.
+
+Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.6 ===
+
+	* NEWS: Updates
+
+Mon Jun 25 16:43:13 2007  Tim Janik  <timj@gtk.org>
+
+	* glib/ghash.c: g_hash_table_find(), g_hash_table_foreach():
+	document performance caveats for linear order searches.
+
+2007-06-22  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+	* glib/gstring.c: Use memcpy in g_string_append_vprintf (#57693).
+
+2007-06-18  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+	* glib/gstring.c: Restore old behaviour of 
+	g_string_append_vprintf: g_vasprintf seems to be faster
+	than g_printf_string_upper_bound (#57693).
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_home_dir): Add some motivation.
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.5 ===
+
+	* NEWS: Updates
+
+2007-06-18  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gmain.h:
+	* glib/gmain.c:
+	* glib/glib.symbols: Add g_timeout_add_seconds_full() variant
+	to g_timeout_add_seconds(), accepting a destroy notification
+	function and a priority. (#448819)
+
+2007-06-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils (g_get_current_dir): Prevent segfaults on
+	long paths.  (#447935, Robby Griffin)
+
+2007-06-17  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gdataset.c (g_quark_from_string),
+	(g_quark_from_static_string): Accept NULL and return GQuark
+	value of zero. (#446859)
+
+2007-06-16  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+	* glib/gstring.c: Correctly use g_printf_string_upper_bound
+	in g_string_append_vprintf. Fixes #447933.
+
+2007-06-15  Sebastian Wilhelmi  <wilhelmi@google.com>
+
+	* docs/reference/glib/tmpl/threads.sgml: Extended the comments on
+	those functions, that are NOOPs, before g_thread_init() has been
+	called. (#447583)
+
+	* glib/gthread.c (g_static_mutex_free): Clarified comment to
+	remind myself, that calling g_static_mutex_free() before
+	g_thread_init() is safe.
+
+2007-06-15  Cody Russell  <bratsche@gnome.org>
+
+	* docs/reference/gobject/tmpl/gboxed.sgml:
+	* docs/reference/gobject/gobject-sections.txt:
+	* glib/gregex.c:
+	* gobject/gboxed.[ch]:
+	* gobject/gobject.symbols: Added GRegex boxed type.
+	(#445065, Carlos Garnacho)
+
+2007-06-15  Sebastian Wilhelmi  <wilhelmi@google.com>
+
+	* glib/gregex.c: Replaced & by &amp; in <programlisting> to make
+	gtk-doc happy.
+
+2007-06-14  Ryan Lortie  <desrt@desrt.ca>
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/glib/symbols:
+	* glib/gstring.[ch] (g_string_printf_internal): Improve
+	performance by removing the use of an intermediate g_malloc'd
+	buffer.  Rename to g_string_append_vprintf, document, and expose
+	along with g_string_vprintf as new public API (#57693).
+
+2007-06-15  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+	* build, tests/string-test.c, glib/glib.symbols, 
+	glib/gstring.c, glib/gstring.h: Introduce g_string_overwrite(_len)?
+	for overwriting parts of strings (#368686, Samuel Cormier-Iijima)
+
+2007-06-14  Cody Russell  <bratsche@gnome.org>
+
+	* gobject/gtype.c (g_type_class_add_private): Check for 0-sized
+	private data. (#443869)
+
+2007-06-14  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/gmain.c (g_timeout_add_seconds): Fix doc typos.  (#447534,
+	Vincent Untz)
+
+2007-06-13  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/pltcheck.sh: Whitelist g_atomic_{int,pointer}_[gs]et() as
+	we don't alias them intentionally. (#354522)
+
+2007-06-13  Sven Neumann  <sven@gimp.org>
+
+	* glib/gslice.[ch] added g_slice_copy() and g_slice_dup() (#442029).
+
+	* glib/glib.symbols: updated.
+
+2007-06-12  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gunicode.h: Add more G_GNUC_CONST and G_GNUC_PURE.
+
+2007-06-11  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gutils.c (maybe_expire_user_special_dirs),
+	(g_get_user_special_dir): Remove the cache expiration logic: it
+	makes g_get_user_special_dir() not thread-safe. Document the fact
+	that on some platform the value might be changed by the user and
+	that GLib won't be able to reflect the change.
+
+2007-06-11  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c (g_win32_get_package_installation_directory)
+	(g_win32_get_package_installation_subdirectory): Update doc
+	comments. Mention that it is not recommeded to use the Registry
+	features.
+
+2007-06-06  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c: Add definitions for more CSIDL_* constants in
+	case missing from headers. Use CSIDL_PERSONAL instead of
+	CSIDL_MYDOCUMENTS as CSIDL_MYDOCUMENTS seems to be a new thing
+	that doesn't work in XP SP2 even.
+
+2007-06-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_user_special_dir): Fall back to
+	$HOME/Desktop for the DESKTOP directory, like 
+	xdg_user_dir_lookup() does.
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.4 ===
+
+	* NEWS: Updates
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_is_key_name):
+	(g_key_file_is_group_name): Don't assume the string is
+	valid UTF-8, since it may be user data.  (#444161, Ben Combee)
+
+2007-06-05  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gutf8.c: Add not to g_utf8_get_char_validated() about
+	nul-terminated strings.
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_user_special_dir): Don't deadlock
+	when running with threads.  (#444121, Christian Persch)
+
+2007-06-05  Vincent Untz  <vuntz@gnome.org>
+
+	* glib/goption.c: (g_option_context_get_help): don't replace the usage
+	line with the description for optional parameters, but append the
+	description. (#444130)
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+	
+	* === Released 2.13.3 ===
+
+	* NEWS: Updates
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+	
+	Add support for a number of special directories, as 
+	defined by the xdg-user-dirs specification.  (#432651,
+	Bastien Nocera, Emmanuele Bassi, Michael Natterer)
+
+	* glib/glib.symbols:
+	* glib/gutils.[hc]: Add the GUserDirectory enum and
+	g_get_user_special_dir(), with implementations based
+	on the xdg-user-dirs spec and on native interfaces
+	for Win32 and Carbon.
+	
+	* configure.in: Add Carbon checks.
+
+	* tests/tetsglib.c: Test g_get_user_special_dir().
+	
+2007-06-03  Yevgen Muntyan  <muntyan@tamu.edu>
+
+	* glib/gregex.c: fixed g_regex_fetch_named* for cases when (?J)
+	is used inside a pattern (#442265, comment #12).
+	* tests/regex-test.c: Test it.
+
+2007-06-03  Matthias Clasen <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2007-06-03  Yevgen Muntyan  <muntyan@tamu.edu>
+
+	Some API additions and changes (#442265).
+
+	* glib/gregex.c:
+	* glib/gregex.h: new functions: g_regex_ref(), g_regex_unref() which
+	replaces g_regex_free(); g_match_info_get_regex(), g_match_info_get_string();
+	g_regex_check_replacement().
+	Made g_match_info_expand_references() accept NULL; changed GRegexEvalCallback
+	to take only arguments which are likely to be actualy used.
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/glib.symbols: Added new functions.
+
+	* tests/regex-test.c: Test them.
+
+	* docs/reference/glib/tmpl/gregex.sgml: Updated GRegexEvalCallback docs.
+
+2007-05-31  Matthias Clasen <mclasen@redhat.com>
+
+	* README.win32: Fix a typo.  (#423708, Olivier Delhomme)
+
+2007-05-30  Dan Winship  <danw@novell.com>
+
+	* glib/gkeyfile.h: add defines for desktop file handling. #339225,
+	original patch from Vincent Untz.
+
+2007-05-29  Cody Russell  <bratsche@gnome.org>
+
+	* configure.in: Fix a sed script that doesn't correctly detect
+	i586-mingw32-gcc-3.4 compiler, and was causing -Wno-pointer-sign
+	errors when building with that compiler. (#440896, Yevgen Muntyan)
+
+2007-05-29  Marco Barisione <marco@barisione.org>
+
+	* glib/gregex.c: Fix g_regex_fetch_named() and
+	g_regex_fetch_named_pos() when G_REGEX_DUPNAMES is used  (#434358,
+	Yevgen Muntyan and #419376, Marco Barisione, patch by Yevgen Muntyan)
+
+2007-05-25  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c (g_unichar_iswide), (g_unichar_iswide_cjk):
+	Update to Markus Kuhn's updated wcwidth for Unicode 5.0.
+
+2007-05-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.2 ===
+
+	* README.in:
+	* NEWS: Updates
+
+2007-05-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Try again to move the compiler-dependency
+	of G_GNUC_INTERNAL to runtime.
+
+2007-05-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Don't let PERL_PATH be ''.  (#356769, Joseph Sacco)
+
+2007-05-17  Michael Natterer  <mitch@imendio.com>
+
+	* configure.in: hotfix: revert last change to fix the build on OS X.
+
+2007-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (g_option_context_set_translate_func): Fix
+	a doc typo.  (#439232, Vincent Untz)
+
+2007-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Move the compiler-dependency in the G_GNUC_INTERNAL
+	definition from configure-time to runtime (of the compiler).
+	(#438869, Damien Carbery)
+
+	* glib/gdebug.h:
+	* glib/gmessages.h:
+	* glib/gunicodeprivate.h:
+	* glib/gthreadprivate.h: Move G_GNUC_INTERNAL before function
+	declarations to fix compilation with sun studio.  (#438873,
+	Damien Carbery)
+
+2007-05-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslice.h:
+	* glib/gslice.c:
+	* glib/glib.symbols: Make g_slice_debug_tree_statistics() 
+	debug-only functionality again.
+
+2007-05-14  Christian Persch  <chpe@gnome.org>
+
+	* docs/reference/glib/tmpl/string_utils.sgml: Improve g_strerror and
+	g_strsignal docs. Bug #438293.
+
+2007-05-13  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.h: Drop the pipe() macro. Defining macros outside of
+	its namespace that look like POSIX functions is not GLib's
+	business in my opinion. This means pipe()-using code that has
+	relied on this definition will need changing to call _pipe() on
+	Windows, and make the decision itself on what size pipe buffer to
+	use, and whether to use text or binary mode, and whether the pipe
+	handles should be inheritable or not.
+
+	* glib/gspawn-win32.c (make_pipe): Use _pipe() instead of pipe().
+
+2007-05-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c: Allow G_OPTION_ARG_CALLBACK for 
+	G_OPTION_REMAINING.  (#437297, Dave Benson)
+
+	* tests/option-test.c: Add a test for this.
+
+2007-05-04  Dan Winship  <danw@novell.com>
+
+	* glib/gkeyfile.c (g_key_file_get_boolean)
+	(g_key_file_get_boolean_list, g_key_file_get_integer)
+	(g_key_file_get_integer_list, g_key_file_get_double)
+	(g_key_file_get_double_list): Document the error return values
+	rather than calling them undefined. #435885.
+
+2007-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib.symbols:
+	* glib/gunicode.h:
+	* glib/guniprop.c (g_unichar_ismark):
+	Add g_unichar_ismark(). Patch from Yevgen Muntyan. Fixes #339991.
+
+2007-05-03  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.1 ===
+
+2007-05-02  Matthias Clasen <mclasen@redhat.com>
+
+	* tests/threadpool-test.c:  Stop unused threads before
+	the last test, to make the test terminate reliably.
+
+	* NEWS: Updates
+
+2007-05-02  Marco Barisione <marco@barisione.org>
+
+	* glib/gregex.c: Made more clear that the string passed to the match
+	functions cannot be freed before using g_match_info_fetch() and
+	similar functions, and fixed a typo.
+
+2007-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/gregex.[hc]: Add g_regex_get_max_backref() and
+	g_regex_get_capture_count().  (#419371, Marco Barisione)
+	
+2007-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/gregex.[hc]: Split GRegex into GRegex and GMatchInfo.
+	(#419368, Marco Barisione)
+
+	* tests/regex-test.c: Adapt.
+
+2007-04-30  Chris Wilson  <chris@chris-wilson.co.uk>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_get_app_info):
+	Include the gshell.h header file (to define g_shell_[un]quote)
+	and correct the order of the arguments to g_propagate_error(), as
+	spotted by gcc.
+
+2007-04-29  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gbookmarkfile.c:
+	(g_bookmark_file_set_app_info): Quote the passed command line...
+	
+	(g_bookmark_file_get_app_info): ... and unquote it when giving it
+	back. (#432274)
+
+2007-04-27  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c: small coding style cleanups.
+
+2007-04-27  Chris Wilson  <chris@chris-wilson.co.uk>
+
+	* glib/gregex.h: Remove trailing comma at end of enumerator list.
+
+2007-04-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c (g_mkdir): Document that the mode argument is
+	ignored on Windows
+	(g_stat): Document that st_mode is mostly useless on Windows.
+
+2007-04-25  Paolo Borelli  <pborelli@katamail.com>
+
+	* glib/gstrfuncs.c (g_strsplit): small cleanup. (#433387)
+
+2007-04-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/goption.h:
+	* glib/goption.c (g_option_context_get_help): New function to
+	get the formatted help string.  (#336089, Dom Lachowicz)
+
+2007-04-24  Michael Natterer  <mitch@imendio.com>
+
+	* tests/gobject/paramspec-test.c: test all GParamSpecString
+	validations with static and allocated strings.
+
+2007-04-19  William Jon McCann  <mccann@jhu.edu>
+
+	* glib/gkeyfile.[ch]: (find_file_in_data_dirs),
+	(g_key_file_load_from_dirs), (g_key_file_load_from_data_dirs):
+	Add g_key_file_load_from_dirs for looking through a search
+	path for a key-file. (#355334)
+
+2007-04-15  Tor Lillqvist  <tml@novell.com>
+
+	* build: Include the build module using the svn:externals
+	mechanism.
+
+	* Makefile.am
+	* configure: Add the references to build back.
+
+2007-04-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gspawn.c (g_spawn_async): Fix a doc typo.  (#427285, 
+	Jochen Baier)
+
+2007-04-11  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/ghash.[ch]: Add g_hash_table_get_keys() and
+	g_hash_table_get_values(), API to retrieve the keys
+	and values inside an hash table in list form. (#413133)
+
+	* glib/glib.symbols: Update symbols.
+
+	* tests/hash-test.c: Exercise newly added functions.
+
+2007-04-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Use CFLAGS/LDFLAGS in addition to 
+	PCRE_CFLAGS/PCRE_LIBS when checking system PCRE.  (#421607, 
+	Paul Jarc)
+
+2007-03-27  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gdate.h: Remove old comment and forward declaration of
+	struct tm: gdate.h includes time.h now.
+
+2007-03-23  Matthias Clasen  <mclasen@redhat.com> 
+
+	* tests/gobject/Makefile.am: Handle $RANDOM missing.  (#356843,
+	Paul Jarc)
+
+2007-03-22  Matthias Clasen  <mclasen@redhat.com> 
+
+	* glib/guniprop.c: Fix corner-cases of upper/lowercase conversion.
+	(#418217, Denis Jacquerye)
+
+2007-03-22  Chris Wilson  <chris@chris-wilson.co.uk>
+
+	* glib/gkeyfile.c: Track whether the last key=value pair in a group
+	is a blank line and during to_data() only insert a new blank line
+	betweens group in its absence. This allows the beautification of the
+	GKeyFile and prevents newlines being inserted indefinitely. (#420686)
+
+	* tests/keyfile-test.c (test_reload_idempotency): Test that after a 
+	single beautification pass, g_key_file_to_data() does not alter its
+	input data.
+
+2007-03-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pcre/Makefile.am: Make builddir != srcdir work.  (#419900)
+
+2007-03-19  Paolo Borelli  <pborelli@katamail.com>
+
+	* glib/gutf8.c (fast_validate_len): remove unneeded checks.
+
+2007-03-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gregex.c: Cosmetic fixes
+
+2007-03-17  Marco Barisione <marco@barisione.org>
+
+	* glib/update-pcre/table-reduction.patch:
+	* glib/update-pcre/make_utt.py:
+	* glib/update-pcre/utt.patch: Add forgotten files
+
+	* glib/update-pcre/update.sh: Call python directly instead of relying
+	on shebang. Also copy the changes from glib/pcre/makefile.msc to this
+	file
+
+2007-03-17  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in glib/pcre/makefile.msc 
+	  glib/update-pcre/update.sh : define PCRE_STATIC to reflect the 
+	inclusion of pcre as LIB, not stand-alone DLL. Also set NEWLINE=-1
+	to match any newline by default, use of ../../build/win32/make.msc
+
+	* glib/gregex.h : minimal includes of <glib/*.H> instead of <glib.h>
+
+	* glib/gnulib/makefile.msc : make use of ../../build/win32/make.msc
+
+	* tests/regex-test.c(verbose): don't pass a string containing '%' 
+	as first parameter to g_print ()
+	(test_match) : for the unexpected case output pattern and string
+	escaped
+
+	* tests/child-test.c tests/slice-color.c : fix c99ism
+	* tests/slice-test.c : fix c99ism and gccism
+	* tests/mapping-test.c tests/base-64-tests.c : don't 
+	#include <unistd.h> unconditionally
+	* tests/option-test.c : use G_GINT64_CONSTANT() instead of direct LL
+
+	* tests/makefile.msc.in : more tests build
+
+2007-03-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gsequence.[hc]:
+	* glib/glib.symbols:
+	* tests/sequence-test.c: Move the consistency
+	checks to the test.
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.13.0 ===
+
+	* NEWS: Updates
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/glib.symbols:
+	* glib/gsequence.h: Add the test function to the header,
+	since it is exported.
+
+	* glib/gbase64.c (g_base64_decode): Warn if the input
+	is too short.  (#418862, Halton Huo)
+
+Fri Mar 16 11:24:51 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/gscanner.[hc]: reverted premature commit which broke
+	GScanner ABI and API, #415323.
+
+2007-03-16  Chris Wilson  <chris@chris-wilson.co.uk>
+
+	* glib/gkeyfile.c: Convert to GSlice and check for redundant
+	clears. (#418637)
+
+2007-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gscanner.[hc]: Revert recent changes that break
+	existing users of GScanner.
+
+2007-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gscanner.c (g_scanner_get_token_ll): Fix a typo
+	in the last commit.  (#415323, Richard Hult)
+
+2007-03-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gnulib/Makefile.am (INCLUDES): Add -I$(top_srcdir)/glib so
+	that gregex.h finds <glib.h>.
+
+	* glib/update-pcre/Makefille.am-1: Add -DGLIB_COMPILATION so that
+	we don't think g_ascii_table is dllimport.
+
+	* glib/pcre/Makefile.am: Corresponding change.
+
+	* glib/update-pcre/notdll.patch: New file. Drop
+	dllimport/dllexport magic for the pcre symbols.
+
+	* glib/update-pcre/Makefile.am: Dist it.
+
+	* glib/update-pcre/update.sh: Apply notdll.patch.
+
+	* glib/pcre/pcre.h: Corresponding change.
+
+2007-03-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gtypes.h: Add comment to avoid misleading people with the
+	large number of digits in G_PI etc. (#404338)
+
+2007-03-15  Tor Lillqvist  <tml@novell.com>
+
+	* config.h.win32.in: Update to match what configure produces.
+
+2007-03-15  Marco Barisione <marco@barisione.org>
+
+	Add GRegex for regular expression matching.  (#50075)
+
+	* configure.in: Handle GRegex compilation.
+
+	* glib/gregex.c:
+	* glib/gregex.h: Code for GRegex.
+
+	* glib/Makefile.am:
+	* glib/makefile.msc.in: Updated makefiles.
+
+	* glib/pcre/*: Internal copy of PCRE.
+
+	* glib/update-pcre/*: Stuff to automatically update the internal PCRE
+	to a newer version.
+
+	* tests/regex-test.c:
+	* tests/Makefile.am:
+	* tests/makefile.msc.in: Add tests for GRegex.
+
+2007-03-15  Chris Wilson  <chris@chris-wilson.co.uk>
+
+	* glib/gmain.c (g_main_dispatch): Replace a
+	g_slist_prepend/g_slist_remove pair with an on-stack link
+	and open coding. (#416094)
+
+2007-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix two glitches in the Unicode case conversion
+	functions (#418217,  Denis Jacquerye)
+
+	* glib/guniprop.c (g_unichar_toupper): Handle zero entries
+	in special_case_table correctly.
+	(g_unichar_totitle): Fall back to g_unichar_toupper.
+
+2007-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gscanner.[hc]: Some optimizations, use a lookup
+	table for character classes, pre-allocate GStrings with
+	reasonable sizes.  (#415323, Charlie Brej)
+
+2007-03-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_get_double): Fix a 
+	small typo.  (#417847, Bobby Jack)
+
+2007-03-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c (g_strtoll): Return negative values.
+	(#416062)
+
+	* tests/strtoll-test.c: Add more testcases.
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstring.c (g_str_equal): Clarify docs.  (#364026, 
+	Bastian Nocera)
+
+2007-03-06  Matthew Barnes  <mbarnes@redhat.com>
+
+	* glib/gqueue.h:
+	* glib/gqueue.c: Add G_QUEUE_INIT, g_queue_init(), and
+	g_queue_clear() to better support statically allocated
+	queues.  (#413244)
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_parse_value_as_boolean):
+	Remove a NULL check that didn't do any good.  (#360904,
+	Paolo Borelli)
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (g_markup_parse_context_parse): Report
+	more accurate position for invalid UTF-8.  (#350802,
+	Simon Budig)
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbase64.c: Add NULL checks to the base64 
+	functions that take pointers.  (#399611, Martyn Russell)
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	Work with Solaris gettext (#341988, Laszlo Peter)
+
+	* m4macros/glib-gettext.m4: Make GLIB_WITH_NLS define
+	MSGFMT_OPTS if msgfmt supports -c.
+
+	* po/Makefile.in.in: Use MSGFMT_OPTS when calling
+	msgfmt.
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/Makefile.am: Apply a patch by Loïc Minier
+	to fix building with -Wl,-z,defs.  (#149144)
+
+2007-03-03  Thierry Randrianiriana  <randrianiriana@gmail.com>
+
+	* po/mg.po: Added Malagasy translation.
+	* configure.in: Added Malagasy 'mg' to ALL_LINGUAS
+
+2007-03-01  Ihar Hrachyshka <iharh@gnome.org>
+	* configure.in: Added be@latin to ALL_LINGUAS.
+
+2007-02-17  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gdate.c (win32_strftime_helper): New Win32-only
+	function. Use the wide character Win32 API to do the work of
+	strftime(): GetThreadLocale(), GetLocaleInfoW(), GetDateFormatW()
+	and GetTimeFormatW().
+	(g_date_strftime): On Windows use win32_strftime_helper()
+	instead of strftime() to avoid codepage issues with strftime().
+	Unfortunately using wcsftime() would not help either. (#404832)
+
+2007-02-16  Soren Sandmann <sandmann@redhat.com>
+
+	* tests/sequence-test.c: For move, test moving between two
+	sequences. Add test for swap.
+
+	* glib/gsequence.c: Replace splay tree with a treap.
+	(check_node): Add checks for the treap invariants.
+
+2007-02-10  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : added gsequence.obj
+
+Fri Feb  9 17:46:18 2007  Søren Sandmann  <sandmann@redhat.com>
+
+	* glib/gsequence.c (g_sequence_get_end_iter): Remove assertion.
+	* glib/gsequence.c (is_end): Return TRUE if the iter doesn't have
+	a parent.
+	* glib/gsequence.c: Fix grammar of comment.
+	* glib/gsequence.c (node_update_fields): Use a temporary variable
+	for the n_nodes.
+
+2007-02-07  Soren Sandmann <sandmann@daimi.au.dk>
+
+	* tests/sequence-test.c (compare_items): Force an arbitrary order
+	on otherwise identical items.
+
+	* glib/gsequence.c: Add comment discussing splay trees vs. other trees.
+	* glib/gsequence.c (is_end): Add fast path for the common case
+	when the node is not actually the end node.
+
+2007-02-05  Soren Sandmann <sandmann@daimi.au.dk>
+
+	* glib/gsequence.c (g_sequence_sort_iter): Don't prohibit access
+	until after the g_sequence_move_range() call.  Bug 404759,
+	Christian Persch.
+
+       * tests/sequence-test.c: Formatting fix.
+
+2007-02-03  Soren Sandmann <sandmann@daimi.au.dk>
+
+	* glib/gsequence.c (struct _GSequence): Add a new 'real_sequence'
+	field.
+	(g_sequence_new): Initialize real_sequence to the sequence
+	(g_sequence_sort_iter): Set real_sequence of the temporary
+	sequence to the real sequence.
+	(g_sequence_sort_changed_iter): Same
+	(g_sequence_insert_sorted_iter): Same
+	(g_sequence_search_iter): Same
+	(g_sequence_iter_get_sequence): Return real_sequence
+
+	* tests/sequence-test.c (compare_iters): Insert assertions that
+	the iters point to the sequence being manipulated.
+
+2007-02-03  Soren Sandmann <sandmann@daimi.au.dk>
+
+	* glib/gsequence.[ch]: New files implementing GSequence, a list
+	implemented using a binary tree.
+	* glib/glib.h, glib/glib.symbols: Update for GSequence.
+	* docs/reference: Add documentation for GSequence
+	* tests: Add sequence-test.c, a thorough test of all of
+	the GSequence API.
+
+2007-01-30  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/gslice.h:
+	* glib/gslice.c: Don't make ABI depend on G_ENABLE_DEBUG,
+	just add an empty g_slice_debug_tree_statistics () implementation
+	in the !G_ENABLE_DEBUG case.
+
+2007-01-26  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Define G_GNUC_INTERNAL for Sun Studio
+	as __hidden.  (#342981, Brian Cameron)
+
+	* glib/gconvert.c:
+	* glib/gutf8.c: Move G_GNUC_INTERNAL uses to the right
+	spot.
+
+2007-01-26  Matthias Clasen <mclasen@redhat.com>
+
+	* gmem.c:
+	* gslice.c:
+	* gmessages.c:
+	* gutils.c: Make some structs which are used only once
+	non-static.
+
+2007-01-24  Benjamin Otte <otte@gnome.org>
+
+	* glib/gprintf.c (g_sprintf): Clarify the documentation
+	regarding overflows (wording by Jan Schmidt)
+
+2007-01-23  Roozbeh Pournader  <roozbeh@farsiweb.info>
+
+	* README: Remove mention of no-longer-existing PATCH
+	keyword in bugzilla. (#396899)
+
+2007-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutf8.c (g_utf8_get_char_validated): Clarify
+	the behaviour is max_len is zero.  (#400044,
+	Benjamin Dauvergne)
+
+2007-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (print_help): Use bitwise &
+	when operating on flags.  (#399971, Jon Oberheide)
+
+2007-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	Some file list updates (#398069, Owen Taylor)
+
+	* docs/Changes-2.0.txt
+	* docs/reference/README.cvs-commits
+	* glib.spec.in: Remove obsolete files
+
+	* tests/Makefile.am:
+	* glib/libcharset/Makefile.am:
+	* gobject/Makefile.am:
+	* Makefile.am: Add some missing files to EXTRA_DIST
+
+	* tests/timeloop-basic.c: Make it build
+	* HACKING: Small updates
+
+2007-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdate.c (g_date_set_time): Fix a typo.  (#398203,
+	Owen Taylor)
+
+2007-01-17  Tor Lillqvist  <tml@novell.com>
+
+	* config.h.win32.in
+	* glib/galloca.h
+	* glib/gbacktrace.h
+	* glib/gwin32.c
+	* glibconfig.h.win32.in
+	* README.win32: More minor tweaks for Digital Mars
+	compiler. (#346808, Serhat Sevki Dincer)
+
+2007-01-17  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: DLLs are always installed in "bin" with current
+	libtool, drop unnecessary logic to check where they are. Include
+	also the COPYING file.
+
+2007-01-17  Tor Lillqvist  <tml@novell.com>
+
+	* glib/galloca.h: Use <malloc.h> also with Digital Mars compiler
+	on Win32. (#346808, Serhat Sevki Dincer)
+
+2007-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gthread.h:
+	* glib/gthread.c:
+	* glib/glib.symbols: Revert an accidental ABI break by
+	moving gettime out of the GThreadFunctions struct and making
+	it a separate variable.  (#397139, Joe Marcus Clarke)
+
+	* gthread/*.c: Adapt.
+
+2007-01-16  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gthread.c (gettime): GetSystemTimeAsFileTime() returns 100s
+	of nanoseconds since 1601, so offset to Unix epoch (1970) and
+	multiply by 100 to get nanoseconds which is what we want.
+
+2007-01-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.h (struct _GPollFD): Fix mistake in my last commit.
+
+2005-01-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/giochannel.c:
+	* glib/gbookmarkfile.c: Remove redundant NULL-checks.
+	(#369668, Morten Welinder)
+
+2005-01-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gthread.c:
+	* gthread/gthread-posix.c: Correct the gettime calculations
+	once more.  (#395203, Chris Wilson)
+
+2007-01-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.h (struct _GPollFD): Prepare for potential Win64
+	build: Use gint64 for the fd field on Win64, as we want to be able
+	to store a HANDLE in it. (#395422) (Other changes will surely also
+	be necessary when building on Win64, at least in giowin32.c.)
+
+2007-01-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c (g_win32_getlocale): Simplify greatly. Instead of
+	hardcoding a large switch statement, just ask Windows for the
+	ISO639 and ISO3166 codes. Tack on @Latn or @Cyrl for those
+	languages which can alternatively be written in Latin or
+	Cyrillic. Fixes #395419.
+
+2007-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Rework the handling of invalid
+	keys/groups again. We are back to being liberal about
+	what we accept, and only reject things that would lead
+	to non-rereadable keyfiles.
+
+	* tests/keyfile-test.c: Adapt tests.
+
+2007-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_home_dir): Clarify docs.  (#394687,
+	Marc Brockschmidt)
+
+2007-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gthread.c: Include windows.h and fix
+	include order. (#394258, Kazuki Iwamoto)
+
+2007-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Make G_GNUC_INTERNAL a no-op for
+	gcc 2.95.    (#329031, David Schleef, Marc Brockschmidt)
+
+2007-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* gthread/gthread-posix.c:
+	* glib/gtimer.c:
+	* glib/gthread.c: Fix errors in the recently moved
+	time calculations.  (#395203, Chris Wilson)
+
+2007-01-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Actually link gthread against librt.
+	(#394641, Marco Pesenti Gritti)
+
+2007-01-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_is_key_name): Grr, allow '*' in keys,
+	too.  (#394262)
+
+2007-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gutils.h: Use a more optimized g_bit_storage() when gcc is
+	available.  (#371670, Daniel Elstner)
+
+2007-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gthread/gthread-posix.c (g_thread_impl_init): Don't
+	use _SC_MONOTONIC_CLOCK unless USE_CLOCK_GETTIME is
+	defined.  (#394150)
+
+2007-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Don't link glib against libpthread.  (#393812)
+
+	* configure.in: Link gthread against librt, not glib itself.
+
+	* glib/gthread.h:
+	* glib/gthread.c: Add a new thread function, gettime.
+
+	* glib/gtimer.c: Use gettime instead of directly working with
+	the various system interfaces.
+
+	* gthread/gthread-impl.c:
+	* gthread/gthread-posix.c:
+	* gthread/gthread-win32.c: Implement gettime.
+
+2007-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-2.0.m4: Use PKG_PROG_PKG_CONFIG.  (#392636,
+	Yevgen Muntyan)
+
+2007-01-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: Handle GIOChannels for file descriptors
+	connected to the console separately. This would typically be the
+	fd 0, 1, or 2 (if not redirected) in a console application. For
+	such fds we don't need a separate thread, as console HANDLEs are
+	waitable objects. (#359202, Michiel de Hoon)
+
+2007-01-04  Behdad Esfahbod  <behdad@gnome.org>
+
+	* tests/bit-test.c (builtin_bit_nth_lsf1), (builtin_bit_nth_lsf2),
+	(builtin_bit_nth_msf): Fix tests on x86_64.
+
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/goption.c (_g_unichar_get_width), (_g_utf8_strwidth),
+	(calculate_max_length), (print_entry), (print_help): Take zerowidth
+	and double-width chars into consideration when computing width of a
+	string.  Also fix another bug in width computation. (#346955)
+
+	* glib/guniprop.c (g_unichar_iszerowidth): Fix typo.  It was not
+	working correctly.
+
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib.symbols:
+	* glib/gunicode.h:
+	* glib/guniprop.c: Add g_unichar_iszerowidth(). (#347645)
+
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gutils.h: Fix bug in g_bit_nth_lsf (#371631) and use
+	__builtin_clzl for g_bit_storage if available (#371670).
+
+	* tests/Makefile.am:
+	* tests/bit-test.c: New test, to test g_bit_* operations against
+	naive and builtin implementations.
+
+2007-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+	* configure.in: Avoid more warnings from running libtool --config.
+	(#391364)
+
+2007-01-03  Michael Natterer  <mitch@imendio.com>
+
+	* removed all .cvsignore files. SVN doesn't need them.
+
+2007-01-02  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gbookmarkfile.c (expand_exec_line): Add support for
+	expanding the desktop entry spec variables %U (list of URIs)
+	and %F (list of filenames), so that using the command line
+	from the Exec and TryExec key of a desktop entry file works
+	as intended.
+
+2007-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Avoid warnings from running libtool --config.
+	(#391364, Loïc Minier)
+
+2007-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbookmarkfile.c (g_bookmark_file_get_app_info):
+	Return an error if the uri is bad. (#391370, Maciej Piechotka)
+
+2007-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Guard g_slice_debug_tree_statistics
+	by G_ENABLE_DEBUG.  (#390940, Kazuki Iwamoto)
+
+2007-01-02  Michael Natterer  <mitch@imendio.com>
+
+	* configure.in
+	* Makefile.am: remove references to build/ until a proper decision
+	has been made what to do with it.
+
+2007-01-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-gettextize.in: Silence autoconf warnings about
+	datarootdir.  (#391367, Loïc Minier)
+
+2006-12-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslice.c: Fix some C99isms.  (#390913, Kazuki Iwamoto)
+
+Fri Dec 29 13:28:07 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: turned detection of too late g_thread_init() calls
+	into a warning. this is a temporary work-around for some head-room
+	to fix affected programs, memory corruption still occours regardless.
+
+2006-12-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/gobject/Makefile.am:
+	* tests/gobject/dynamictype.c: New test for dynamic type
+	registration macros.
+
+Thu Dec 28 21:14:45 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.c: removed pthread-dependant debugging bits, the code
+	was already converted to GMutex. this obsoletes Tor's recent fixups.
+
+2006-12-28  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.h (G_WIN32_DLLMAIN_FOR_DLL_NAME)
+	* glib/gutils.c (get_windows_directory_root): : Use only the wide
+	character API here, too.
+
+	* glib/gslice.c: Make it compile on Win32 without pthreads: Use a
+	Win32 critical section instead.
+
+	* glib/gmessages.c (g_logv): On Win32, if we get a fatal error
+	message while being debugged we break into the debugger with
+	G_BREAKPOINT(). Don't call abort() if the user is foolhardy enough
+	to continue after the breakpoint. The user presumably knows what
+	he is doing and deserves what he gets. (#376645, Andreas Köhler)
+
+Thu Dec 28 12:50:31 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/gslice.h, glib/gslice.c: implemented static debugging
+	hash-tree to validate slice adresses and sizes with G_SLICE=debug-blocks.
+	use abort() to exit in mem_error() to allow catching of these in gdb.
+	abort programs with a descriptive error message if g_thread_init() is
+	called after GSlice was in use. previously this just silently corrupted
+	the magazines.
+
+	* glib/ghash.c (struct _GHashNode): reordered fields to keep 8-byte
+	pointer alignment on 64bit systems and request smaller slice sizes
+	on 32bit systems.
+
+	* tests/slice-test.c: support '~' option flag to introduce slice
+	allocation/release corruption with a significant probability. this
+	allowes testing of G_SLICE=debug-blocks.
+
+2006-12-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.[hc]:
+	* glib/gfileutils.c:
+	* glib/giochannel.c:
+	* glib/goption.c:
+	* glib/gspawn.c:
+	* glib/gunicollate.c:
+	* glib/gutils.c:
+	* tests/timeloop-basic.c:
+	Consistently use gsize rather than size_t.  (#333310,
+	Morten Welinder)
+
+2006-12-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Use AC_CACHE_CHECK for the nl_langinfo
+	check.  (#304517, Lőrinczy Zsigmond)
+
+2006-12-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.h
+	* glib/gwin32.c (get_package_directory_from_module)
+	(g_win32_get_package_installation_directory)
+	(g_win32_get_package_installation_subdirectory): Add const to
+	gchar* arguments. (#384523, Yevgen Muntyan)
+
+2006-12-27  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: cache the value of the hash function
+	in the GHashNode.  this speeds up resizing the hash
+	table and it also allows a slight optimisation on
+	lookups.  (#388332)
+
+2006-12-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gunicollate.c (g_utf8_collate_key): Don't modify
+	the current locale.  (#389300)
+
+2006-12-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutf8.c: Add hints for locale-dependent interfaces.
+	* glib/gconvert.c: Add hints for locale-dependent interfaces.
+
+	* glib/gconvert.c (g_get_filename_charsets): Improve
+	formatting of docs.
+
+2006-12-26  Behdad Esfahbod  <behdad@gnome.org>
+
+	* configure.in: Use libtool to determine shared library suffix.
+	(#357245)
+
+2006-12-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/run-collate-tests.sh:
+	* tests/unicode-collate.c: Silently skip tests if
+	we can't set LC_COLLATE to en_US.  (#336438)
+
+2006-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_is_key_name): Accept
+	'/', '+' and '.' in key names, since gnome-vfs uses
+	mime types as keys in some cache.
+
+	* tests/keyfile-test.c: Tests for the above.
+
+2006-12-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Fix the broken poll test.  (#387260,
+	Christian Persch)
+
+	* glib/gmain.c (child_watch_helper_thread): Readd a
+	return which was removed as dead code a while ago.
+	icc may consider it dead, but gcc doesn't like non-void
+	functions without a return...  (#354707)
+
+	* tests/Makefile.am: Try a different fix for bug 346373.
+
+2006-12-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix bug 161288:
+
+	* configure.in: Check for wcslen.
+
+	* glib/gnulib/vasnprintf.c: Handle wcslen missing.
+
+2006-12-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Accept '@' in locale names.
+
+	* glib/gkeyfile.c: Tighten up the check for allowed
+	key and group names.  (#343191, Tommi Komulainen)
+
+	* tests/keyfile-test.c: Test handling of key and group names.
+
+	* tests/Makefile.am: Don't use $RANDOM if the shell doesn't
+	have it.  (#346373, Thomas Klausner)
+
+2006-12-17  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gstring.c: Improve docs about string functions taking a
+	length.  (#378727)
+
+2006-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c:
+	* glib/gutf8.c (_g_charset_get_aliases): Put the G_GNUC_INTERNAL
+	where gcc doesn't complain about it.
+
+	* glib/ghash.c: Make ref_count an int to avoid compiler
+	warnings.
+
+	* configure.in: Use AC_LANG_SOURCE for the clock test.
+
+	* glib/gthreadpool.h:
+	* glib/gthreadpool.c (g_thread_pool_free): Don't use "wait"
+	as parameter name.  (#379207, Christian Biere)
+
+	* glib/gspawn.c: Refer to g_child_watch_add() in addition
+	to waitpid().
+
+	* glib/gstrfuncs.c (g_strndup, g_strnfill): Move docs
+	inline, and improve wording.  (#372598, Behdad Esfahbod)
+
+	* glib/gspawn.c: Add some pointers to the gdk_spawn_
+	variants.  (#338134, Federico Mena Quintero)
+
+	* configure.in: Make montonic clock test work again. Does
+	AC_COMPILE_IFELSE not get confdefs ? Also, move the clock
+	tests below the thread checks to fix #364663.
+
+	* tests/run-markup-tests.sh: Don't use diff -u  (#380801,
+	Marek Rouchal)
+
+	* glib/gspawn.c: Fix the recent fdwalk()-related changes
+	to not break mapping-test.  (#286838, Marco Barisione)
+
+	* glib/gstring.c (g_string_chunk_new): Don't shadow size.
+	(#386760, Kazuki IWAMOTO)
+
+2006-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstring.c: Move more documentation inline.
+
+	* configure.in: Use AC_COMPILE_IFELSE for the monotonic
+	clock test.  (#362918, Han-Wen Nienhuys, Jeremy Lainé)
+
+	* glib/gstring.c: Move documentation inline.
+
+2006-12-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/giochannel.h: Make ref_count a gint to avoid
+	compiler warnings.  (#321977, Andrew Paprocki)
+
+	* configure.in: On Solaris, set CFLAGS and LDFLAGS that
+	work both with Sun cc and gcc.  (#315061, Lazlo Peter)
+
+	* glib/gspawn.c: Undefine READ_OK to fix the build on
+	old versions of Darwin.  (#327800)
+
+	* glib/glib.symbols:
+	* glib/gstring.[hc] (g_string_chunk_clear): Add a function
+	for clearing a GStringChunk. (#364608, Matt Barnes)
+
+	* glib/guniprop.c (interval_compare): Avoid a compiler
+	warning.
+
+	* glib/gspawn.c (do_exec): Call set_cloexec() with
+	the right parameters.  (#386252, Guillaume Desmottes)
+
+2006-12-15  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix #357585, Padraig O'Briain.
+
+	* configure.in: Check for fdwalk.
+
+	* glib/gspawn.c (do_exec): Use fdwalk() to close all
+	file descriptors.
+
+	* glib/gspawn.c (fdwalk): Fallback implementation of
+	fdwalk.
+
+2006-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c (open_converter): Don't use alloca
+	and avoid allocating memory for small keys that are
+	already cached.  (#172406, Morten Welinder)
+
+	* glib/gmain.c (g_child_watch_add_full): Improve the docs.
+	(#345569, Tim-Philipp Müller)
+
+	* glib/gkeyfile.c (g_key_file_add_group): If the group
+	is already there, make it current.  (#385910, Joe Halliwell)
+
+	* tests/keyfile-test.c: Add a test for duplicate groups/keys.
+
+2006-12-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-gettext.m4: Require AC_CANONICAL_HOST in
+	GLIB_WITH_NLS.  (#385132, Laszlo Peter)
+
+2006-12-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Add a check for broken poll on Mac OS X.
+
+	* glib/gmain.c: Use poll emulation on OS X.  (#302672, Toby Peterson,
+	patch by Dave Vasilevsky)
+
+2006-12-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gatomic.c: Don't use local numeric labels in
+	inline assembler on AIX.  (#316434, Hans Rosenfeld)
+
+	* glib/gunicode.h (g_utf8_next_char): Cast to const char *,
+	not char *.  (#138153, Nikolai Weibull)
+
+Wed Nov 22 16:09:13 2006  Tim Janik  <timj@gtk.org>
+
+	* glib/gmacros.h: added G_GNUC_MAY_ALIAS, suggested by Mathias
+	Hasselmann in bug #335341, fixes bug #335853.
+
+2006-11-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-gettext.m4: Apply a patch from James
+	Henstridge for compatibility with automake 2.60 (#343825)
+
+2006-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+	* sanity_check: Replace bash-specific == with sh-understood =.
+	Fixes bug #373864.
+
+2006-11-05  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : glib/ version not the gobject/
+	one I accidentially commited. Fixes bug #371074.
+
+2006-11-05  Tor Lillqvist  <tml@novell.com>
+
+	* makefile.mingw
+	* gmodule/makefile.mingw.in
+	* glib/makefile.mingw.in
+	* gobject/makefile.mingw.in
+	* gthread/makefile.mingw.in
+	* tests/makefile.mingw.in: Remove from CVS. Haven't been
+	maintained or distributed for long.
+
+2006-10-26  Pascal Terjan  <pterjan@linuxfr.org>
+
+	* glib/libcharset/localcharset.c: Fix small leak on failed
+	realloc in _g_locale_get_charset_aliases (#338582)
+
+2006-10-16  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gnulib/Makefile.am: Add $(GLIB_DEBUG_FLAGS).  (#362543,
+	Peter Kjellerstedt)
+
+2006-10-15  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* tests/Makefile.am: Compile errorcheck-mutex-test with thread
+	libraries explicitly. (#74748, Javier Villavicencio)
+
+2006-10-08  Matthias Clasen  <mclasen@redhat.com>
+
+	Add a way to obtain Unicode script information.  (#348348,
+	Marco Barisione)
+
+	* glib/glib.symbols:
+	* glib/gunicode.h: Add GUnicodeScript enumeration and
+	g_unichar_get_script.
+
+	* glib/guniprop.c: Implement g_unichar_get_script.
+
+	* glib/gscripttable.h: Generated private header containing
+	script tables.
+
+	* glib/gen-script-table.pl: Script to generate gscripttable.h.
+
+	* glib/Makefile.am: Update
+
+2006-10-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/run-markup-tests.sh: Small portability fix.  (#347944,
+	Dan McMahill)
+
+2006-10-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c (get_package_directory_from_module)
+	(g_win32_get_package_installation_directory): g_strdup the keys
+	that we are passed before adding them to the hash tables, to guard
+	against the caller freeing them. (#355955, Andreas Köhler)
+
+2006-10-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtimer.c: Fix a typo.  (#359190)
+
+2006-10-02  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/Makefile.am:
+	* gobject/Makefile.am:
+	Include pltcheck.sh in EXTRA_DIST, and remove redefinition of TESTS.
+	(#358966)
+
+2006-10-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtimer.c (g_usleep): Use nsleep to implement
+	g_usleep on AIX.  (#321974, Andrew Paprocki)
+
+	* configure.in: Check for nsleep
+
+	* glib/gmain.c: Fix typos in doc comments.
+	(#358421, Tom Tromey)
+
+2006-09-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pltcheck.sh: A script to check PLT entries.
+	* glib/Makefile.am (TESTS): Run pltcheck.sh
+
+	* glib/*: Fix includes to correct some issues with
+	PLT entries.  (#354522, Behdad Esfahbod)
+
+2006-09-17  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in gobject/makefile.msc.in : better filtering
+	of G_GNUC_* stuff when generating .def files. Now also works with
+	newer (less tolerant) linkers, e.g. from vc2500e
+
+2006-09-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbacktrace.c: Assume string.h is available.
+	(#354523, Behdad Esfahbod)
+
+	* configure.in: Bump version to 2.13.0
+
+	* glib/glib.symbols:
+	* glib/gmain.[hc]: Add functions to create approximate
+	timeouts.  (#353942, Arjan van de Ven)
+
+	* glib/gstdio.c (g_rename): Initialize save_errno.
+	(#355206, Mike Edenfield)
+
+2006-09-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gerror.c: Allocate GErrors using the slice allocator.
+	(#354054, Matt Barnes)
+
+2006-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtimer.c: Forgotten HAVE_CLOCK_GETTIME.
+
+2006-09-02  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_get_any_init_do): Correct C99ism (mixed
+	declarations and code) in Win32 ifdef branch. (#353903, Mike
+	Edenfield)
+
+2006-09-01  Abel Cheung  <abel@oaka.org>
+
+	* configure.in: Added 'dz' 'hy' to ALL_LINGUAS.
+
+2006-09-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Check for CLOCK_MONOTONIC.
+
+	* glib/gtimer.c: Only use clock_gettime if we
+	have a monotonic clock.
+
+2006-08-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Add missing includes to a few test
+	programs.  (#353580, Chris Wilson)
+
+2006-08-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c (g_markup_vprintf_escaped): Don't call
+	va_end on caller-provided va_args.  (#353584, Chris Wilson)
+
+2006-08-29  Tor Lillqvist  <tml@novell.com>
+
+	Remove support for Windows 9x/ME, as will be done also in Pango
+	and GTK+. GTK+ hasn't worked on Win9x since 2.6 or 2.8 anyway, so
+	it's pretty pointless to keep the Win9x code in here either. If
+	somebody is interested, the code can always be found in older GLib
+	versions, and in CVS.
+
+	* glib/gdir.c
+	* glib/gfileutils.c
+	* glib/gspawn-win32-helper.c
+	* glib/gspawn-win32.c
+	* glib/gstdio.c
+	* glib/gutils.c
+	* glib/gwin32.c
+	* glib/gwin32.h: Remove the G_WIN32_IS_NT_BASED() and
+	G_WIN32_HAVE_WIDECHAR_API() tests and their false (Win9x)
+	branches, and any variables or static functions used only by the
+	Win9x branches.
+
+	* glib/gwin32.c (g_win32_windows_version_init): Call g_error() if
+	run on Win9x.
+
+2006-08-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Fix pthread compiler flag detection.
+
+	* glib/gtimer.c: Use Posix monotonic clocks instead of
+	gettimeofday when available.  (#336114, William Jon McCann)
+
+2006-08-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h:
+	* glib/gscanner.c: Fix some typos.  (#351741, Kjartan Maraas)
+
+2006-08-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Fix the pthread compiler flag detection.
+
+	* glib/gunicode.h:
+	* glib/gutf8.c (_g_utf8_make_valid): Rename make_valid_utf8
+	from gconvert.c, move it to gutf8.c, and export it privately.
+
+	* glib/gconvert.c (g_filename_display_name): Adjust callers.
+
+	* glib/gkeyfile.c: Use _g_utf8_make_valid() in a number of
+	places to ensure error messages are valid UTF-8.  (#351853,
+	Simon Budig)
+
+2006-08-22  Matthias Clasen <mclasen@redhat.com>
+
+	* Branch for 2.12
diff --git a/ChangeLog.pre-2-16 b/ChangeLog.pre-2-16
new file mode 100644
index 0000000..310bb59
--- /dev/null
+++ b/ChangeLog.pre-2-16
@@ -0,0 +1,1794 @@
+2008-03-12  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Bug 316221 - G_LOCK warns about breaking strict-aliasing rules
+
+	* configure.in:
+	* glib/gthread.h: Prevent the compiler from warning about breaking
+	strict-aliasing rules when using gcc 4.3 and G_LOCK on C sources.
+
+2008-03-12  Tor Lillqvist  <tml@novell.com>
+
+	Bug 520914 - win_iconv doesn't support UCS-2
+	
+	* glib/win_iconv.c: Make UCS-2 just an alias for
+	UTF-16. Technically this is wrong of course, but shouldn't matter
+	an awful lot in practice.
+
+2008-03-11  Murray Cumming  <murrayc@murrayc.com>
+
+	Bug 521591 – g_markup_parse_context_parse() creates GError message that 
+	is invalid UTF8.
+
+	* glib/gmarkup.c (set_error): Make sure that the GError::message is 
+	valid UTF-8 even if it is complaining about invalid UTF-8 in the 
+	markup text, using _g_utf8_make_valid().
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.16.1 ===
+
+	* configure.in: Bump version
+
+	* NEWS: Updates
+
+	* glib/pcre/*: Update the internal copy of PCRE to 7.6, this time
+	for real.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+	* NEWS: Updates
+
+	* configure.in: Bump version to 2.16.0
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslist.c: Fix a doc typo
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/giochannel.c (g_io_channle_set_encoding): Fix confusing
+	error message.  (#521028, Peter Kjellerstedt)
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/testglib.c: Still set the udddocs and uddpubshare 
+	variables for the verbose case.
+
+2008-03-07  Alexander Larsson  <alexl@redhat.com>
+
+        * configure.in:
+	Look for struct statfs.f_fstypename
+
+2008-03-07  Tor Lillqvist  <tml@novell.com>
+
+	* README.win32: Updates.
+
+2008-03-05  Tor Lillqvist  <tml@novell.com>
+
+	* glib/glib.symbols: Remove g_uri_get_scheme.
+
+2008-03-04  Alexander Larsson  <alexl@redhat.com>
+
+        * glib/gurifuncs.c:
+	Remove deprecated symbols we kept for one release.
+
+2008-03-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h: Add a version of G_INLINE_FUNC for
+	__GNUC__ && __GNUC_STDC_INLINE__, patch by Jakub Jelinek
+
+2008-03-03  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gspawn-win32.c (read_helper_report): Must set the GError
+	also in the unexpected EOF case.
+	(do_spawn_with_pipes): Must protect also new_argv[0].
+
+2008-03-01  Benjamin Otte  <otte@gnome.org>
+
+	* glib/glist.c:
+	fix last commit.
+
+2008-02-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslist.c: 
+	* glib/glist.c: Move docs inline, and improve the 
+	g_[s]list_delete_link docs.  (#519352, Owen Taylor)
+
+2008-02-29  Tor Lillqvist  <tml@novell.com>
+
+	* glib/win_iconv.c (name_to_codepage): Add some GNU libiconv
+	compatibility: Recognize "" and "char" as aliases for the current
+	locale's charset. (We use the system ANSI codepage as returned by
+	GetACP().) Recognize "wchar_t" as an alias for UTF-16LE.
+
+2008-02-27  Matthew Barnes  <mbarnes@redhat.com>
+
+	* glib/gchecksum.[ch] (g_checksum_update),
+	(g_compute_checksum_for_string): Make 'length' parameter
+	signed to accomodate passing negative lengths. (#510855)
+
+2008-02-26  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c (g_poll): Further patch by Vlad Grecescu: Drop the
+	code path that called WaitMessage(), as WaitMessage() doesn't
+	offer any chance for APCs to run. Instead just use the code path
+	with MsgWaitForMultipleObjectsEx() even for the
+	wait-only-for-messages case. (#517484)
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.15.6 ===
+
+	* NEWS: Updates
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestfuncs.c: Add Since: markers to docs.  (#518556, 
+	Jerry Yu)
+
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/glib.symbols:
+        * glib/gurifuncs.[ch]:
+        Rename g_uri_get_scheme to g_uri_parse_scheme.
+	Keep g_uri_get_scheme() symbol for this
+	unstable release to avoid breaking to many apps.
+
+2008-02-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (_glib_get_installation_directory): New internal function.
+
+	* glib/gspawn-win32.c: When spawning the helper process, use an
+	explicit full path. (#518292)
+
+	* glib/gspawn-win32.c
+	* glib/gspawn-win32-helper.c: Fix race condition when using the
+	helper process. This seems to fix #510664.
+
+	When the helper process writes the handle of the actual started
+	user process to the parent process, it must be duplicated in the
+	parent process with DuplicateHandle() so that it is a valid handle
+	in that process. However, if the helper process has happened to
+	exit before the DuplicateHandle() call, the duplication will
+	fail. Thus we must synchronise the helper process's exit. Use
+	another pipe for this.
+
+	Take care not to inherit the writing end of this pipe to the
+	helper process. Also, in the helper process, take care not to
+	inherit either of the pipes used for communication with the parent
+	process to the started user process.
+
+2008-02-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c (g_poll) [Win32]: Use alertable wait functions so
+	that I/O completion routines or user-mode Asynchronous Procedure
+	Calls can be run. (#517484, Vlad Grecescu)
+
+2008-02-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c
+	(g_win32_get_package_installation_directory_of_module): New
+	function. Supersedes g_win32_get_package_installation_directory()
+	and g_win32_get_package_installation_directory().
+
+	It makes more sense to have the function for this functionality
+	take a HMODULE as parameter instead of DLL name. The typical use
+	scenario has been to have a DllMain() function that retrieves the
+	full pathname for the DLL in question, and saves just the basename
+	of that. Then later code passes that saved dll basename to
+	g_win32_get_package_installation_directory(), which retrieves the
+	corresponding DLL handle, and then retrieves its full
+	pathname. (Which DLlMain() already had.) It is less convoluted to
+	have a DllMain() that just saves the DLL handle, and then when
+	needed call this function to get the corresponding installation
+	folder.
+
+	(get_package_directory_from_module): Use
+	g_win32_get_package_installation_directory_of_module().
+
+	(g_win32_get_package_installation_directory)
+	(g_win32_get_package_installation_subdirectory): Mention these
+	functions will be deprecated and recommend using
+	g_win32_get_package_installation_directory_of_module() instead.
+	
+	* glib/gwin32.h: Declare
+	g_win32_get_package_installation_directory_of_module().
+
+	* glib/glib.symbols: Add it.
+
+	* glib/gutils.h: Mention G_WIN32_DLLMAIN_FOR_DLL_NAME() will be
+	deprecated in the future.
+
+	* glib/gutils.c: Drop use of G_WIN32_DLLMAIN_FOR_DLL_NAME(). Use a
+	minimal DllMain() instead that just saves the DLL handle.
+	(g_win32_get_system_data_dirs_for_module, _glib_get_locale_dir)
+	(get_module_share_dir): Use
+	g_win32_get_package_installation_directory_of_module().
+
+2008-02-23  Matthias Clasen  <mclasen@redhat.com> 
+
+	* NEWS: Updates
+
+2008-02-23  Matthias Clasen  <mclasen@redhat.com> 
+
+	* glib/gkeyfile.c (g_key_file_get_string_list): Return
+	NULL when the key is not found.  (#513171, Дилян Палаузов)
+
+2008-02-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/testglib.c: Don't test user directories for being
+	non-null.  (#517084, Yevgen Muntyan)
+
+2008-02-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gasyncqueue.c:
+	* glib/gtestutils.c: Documentation fixes
+
+2008-02-21  Tor Lillqvist  <tml@novell.com>
+	
+	* glib/gutf8.c (g_get_charset)
+	* glib/gconvert.c (g_locale_from_utf8): Clarify character set
+	issues on Windows.
+
+2008-02-20  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gtestutils.c (g_test_trap_fork) [Win32]: Change the
+	g_error() to g_message() to avoid stopping on warnings. At least
+	now testglib runs to completion and the old tests in it get
+	exercised even if the newfangled ones don't.
+	(g_test_trap_assertions) [Win32]: Bypass on Windows.
+
+2008-02-17  Marco Barisione  <marco@barisione.org>
+
+	* glib/gregex.c: (translate_compile_error), (g_regex_new): Avoid some
+	useless casts from const gchar * to gchar *.  (#516597, patch by
+	Yevgen Muntyan)
+
+2008-02-17  Marco Barisione  <marco@barisione.org>
+
+	* glib/gregex.c: (match_info_new), (g_match_info_next): Don't return
+	duplicate matches when matching empty strings.  (#515944)
+	* tests/regex-test.c: Add tests.
+
+2008-02-17  Hans Breuer  <hans@breuer.org>
+
+	* glib/gutils.c : define CSIDL_MYPICTURES if not available
+	* gthread/gthread-win32.c : use G_STRFUNC instead of compiler 
+	specific __FUNCTION__
+
+2008-02-13  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c: Doc change: Deprecate passing anything but NULL
+	for the "package" parameter to
+	g_win32_get_package_installation_directory() and
+	g_win32_get_package_installation_subdirectory().
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.15.5 ===
+
+	* NEWS: Updates
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gtestutils.h: Make the g_test_add macro work with 
+	gcc 4.3
+
+	* tests/gobject/paramspec-test.c: Adapt to recent changes in 
+	GParamGType initialization.
+
+2008-02-10  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Fix a typo in the docs.
+
+2008-02-09  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Check for getmntent_r.
+
+2008-02-09  Matthias Clasen <mclasen@redhat.com>
+
+	* Makefile.decl: /bin/ksh can't handle a for-loop with no 
+	arguments, so add a "." for when $(SUBDIRS) is empty.
+
+	* glib/tests/option-context.c:
+	* glib/tests/testing.c:
+	* gthread/gthread-posix.c:
+	* tets/testingbase64.c:
+	* glib/gtester.c: 
+	* glib/gsequence.c: Portability fixes.  (#515154)
+
+2008-02-07  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Unfortunately the mingw implementations of
+	C99-style snprintf and vsnprintf don't seem to be quite good
+	enough, at least not in mingw-runtime-3.14. I don't know exactly
+	what the problem is, but it is related to floating point
+	formatting and decimal point vs. comma, and the symptoms show up
+	in some dialogs in GIMP, presumably also elsewhere. The simple
+	tests in AC_FUNC_VSNPRINTF_C99 and AC_FUNC_SNPRINTF_C99 aren't
+	rigorous enough to notice, though. So preset
+	ac_cv_func_vsnprintf_c99 and ac_cv_func_snprintf_c99 to "no".
+
+2008-02-07 12:58:54  Tim Janik  <timj@imendio.com>
+
+	* Makefile.am: fixed build order to build gobject after gmodule gthread
+	so gobject tests can be threaded.
+
+2008-02-07  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/gmessages.h (g_error): add for(;;); after the g_log call so
+	that GCC stops issuing false warnings about reachability  Bug #514920
+
+2008-02-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pcre/*: Update the internal copy of PCRE to 7.6
+
+2008-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/pltcheck.sh: Skip g_bit_*().  Inline functions may end up with
+	a local plt if the compiler doesn't support what we want.  Bug #514702
+
+2008-02-06  Murray Cumming  <murrayc@murrayc.com>
+
+	* glib/gconvert.c:
+	* glib/pcre/pcre_internal.h: Fixed some minor typos in documentation.
+
+2008-02-06  Christian Persch  <chpe@gnome.org>
+
+	* gio/gdesktopappinfo.c: (ensure_dir):
+	* gio/glocalfile.c: (g_local_file_query_filesystem_info),
+	(g_local_file_read), (g_local_file_delete), (g_local_file_trash),
+	(g_local_file_move):
+	* gio/glocalfileinfo.c: (set_xattr), (_g_local_file_info_get),
+	(_g_local_file_info_get_from_fd), (set_unix_mode),
+	(set_unix_uid_gid), (set_symlink), (set_mtime_atime):
+	* gio/glocalfileinputstream.c: (g_local_file_input_stream_read),
+	(g_local_file_input_stream_skip),
+	(g_local_file_input_stream_close),
+	(g_local_file_input_stream_seek):
+	* gio/glocalfileoutputstream.c: (g_local_file_output_stream_write),
+	(g_local_file_output_stream_close),
+	(g_local_file_output_stream_seek),
+	(g_local_file_output_stream_truncate), (copy_file_data),
+	(handle_overwrite_open):
+	* gio/gunixinputstream.c: (g_unix_input_stream_read),
+	(g_unix_input_stream_close), (read_async_cb), (close_async_cb):
+	* gio/gunixoutputstream.c: (g_unix_output_stream_write),
+	(g_unix_output_stream_close), (write_async_cb), (close_async_cb): Save
+	errno before calling other funcs that potentially alter it. Bug
+	#514766.
+
+2008-02-05 18:42:42  Tim Janik  <timj@imendio.com>
+
+	* configure.in: generate gobject/tests/Makefile.
+
+2008-02-05  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: Include the gio import library and gio-2.0.pc in
+	the developer zipfile.
+
+2008-02-02  Jonathon Jongsma  <jjongsma@gnome.org>
+
+	* gio/gbufferedoutputstream.c:
+	* gio/gbufferedoutputstream.h: modify the new_sized() constructor to take a
+	gsize param instead of guint to match the GBufferedInputStream constructor.
+
+2008-02-03  Hans Breuer  <hans@breuer.org>
+
+	* **/makefile.msc.in : update
+
+2008-02-03  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* configure.in: Check for gmtime_r. Missing part of bug #511807.
+
+2008-02-01  Yannig Marchegay  <yannig@marchegay.org>
+
+	* configure.in: Add oc since oc.po is back.
+
+2008-01-31  Michael Natterer  <mitch@imendio.com>
+
+	* glib/gmem.c: use %G_GSIZE_FORMAT instead of %lu since sizes have
+	changed from gulong to gsize in this file.
+
+2008-01-30  Johan Dahlin  <johan@gnome.org>
+
+	* configure.in: Remove oc since oc.po is gone.
+
+2008-01-30  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* glib/gchecksum.c:
+	* glib/gtestutils.c:
+	* glib/gutils.c:
+
+	Fixed gtk-doc warnings by updating the documentation of
+	various functions.
+
+2008-01-29 14:58:31  Tim Janik  <timj@imendio.com>
+
+	* glib/gmem.[hc]: changed size argument type from gulong to gsize as
+	discussed on gtk-devel-list:
+	  http://mail.gnome.org/archives/gtk-devel-list/2007-March/msg00062.html
+	this should be ABI compatible on all platforms except win64 for which
+	no ABI binding port exists yet.
+
+2008-01-29  Sebastian Wilhelmi  <wilhelmi@google.com>
+
+	* tests/threadpool-test.c (test_thread_pools): Grab
+	thread_counter_pools LOCK when increasing
+	leftover_task_counter. Fixes race in test. (#512624, Simon Murray)
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+	* NEWS: Updates
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Check for gmtime_r.  
+	* glib/gtimer.c: Use gmtime_r when available.  (#511807,
+	Sebastian Dröge)
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gnode.[hc]: Move docs inline.  (#316260, Philippe Blain)
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutf8.c (g_utf8_strreverse): Document limitations
+	of this function.  (#487909, Peter Moulder)
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (group_list_has_visible_entries):
+	Removed unused variable is_main_group.  (#512381,
+	Wouter Bolsterlee)
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmacros.h: Deprecate G_GNUC_(PRETTY)_FUNCTION. Bug #409360.
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-gettext.m4: Remove AC_CANONICAL_HOST from
+	GLIB_WITH_NLS again.  (#385132)
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Fix the pcre Unicode test to work with
+	LDFLAGS=-Wl,--as-needed.  (#484261, Mark Lee)
+
+2008-01-27  Murray Cumming  <murrayc@murrayc.com>
+
+	* gio/gfile.c: (g_file_replace_contents),
+	(g_file_replace_contents_finish): Document that the new_etags output 
+	gchar* should be freed.
+
+2008-01-25  Loïc Minier  <lool@dooz.org>
+
+	* glib/goption.c: (group_has_visible_entries),
+	(group_list_has_visible_entires), (g_option_context_get_help): Pass
+	context down the implementation to check for the main_group.
+	Bug #510292.
+	* glib/tests/option-context.c:
+	Don't set G_OPTION_FLAG_IN_MAIN in main_entries
+	(group_captions): only create group when actually adding it to the
+	context; add an exit(0) to make sure the test succeeds.
+
+2008-01-23  Jens Granseuer  <jensgr@gmx.net>
+
+	* glib/gtestutils.c: (g_test_trap_fork):
+	* glib/tests/testing.c: (test_assertions): Only declare variables at
+	the beginning of a code block. Bug #511654.
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.15.3 ===
+
+2008-01-21  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: Add the gio DLL to the runtime zipfile.
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+	* NEWS: Updates
+
+2008-01-20  Murray Cumming  <murrayc@murrayc.com>
+
+	* glib/gchecksum.c: (g_checksum_update): Accept -1 for the data 
+	length if the data is a null-terminated string. Bug #510855.
+
+2008-01-21  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.in:
+	Only check for sys/inotify.h (see gio/ChangeLog) 
+
+2008-01-18 16:51:23  Tim Janik  <timj@imendio.com>
+
+	* glib/gutils.h: don't define __GNUC_PREREQ which is not in the glib
+	namespace. for gcc, define G_INLINE_FUNC to "static inline" as with
+	all other C compilers, because newer GCC versions incompatibly
+	changed "extern inline" semantics.
+
+2008-01-18  Murray Cumming  <murrayc@murrayc.com>
+
+	* glib/gfileutils.c:
+	* glib/gsequence.c:
+	* glib/gstring.c: Fixed some minor typos in the documentation.
+
+2008-01-16  Dan Winship  <danw@gnome.org>
+
+	* glib/gchecksum.c (md5_sum_update): Fix another bug (which
+	doesn't affect the results, but may cause it to read bad memory).
+
+2008-01-15  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gurifuncs.c:
+	Clarify docs for g_uri_unescape_string() (#508773)
+
+2008-01-14  Dan Winship  <danw@gnome.org>
+
+	* m4macros/glib-2.0.m4: Support gio in AM_PATH_GLIB_2_0 (#509465)
+
+2008-01-15  Dan Winship  <danw@gnome.org>
+
+	* glib/gchecksum.c (md5_sum_update): fix this; the previous code
+	gave the wrong md5sum when called in certain ways with buffers
+	larger than 64 bytes.
+	(g_checksum_update): remove the unnecessary "length > 1"
+	restriction
+
+	* tests/checksum-test.c: Rewrite this to be much more exhaustive
+	(and in particular to test the md5_sum_update bugfix).
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.15.2 ===
+
+	* NEWS: Updates
+
+2008-01-14  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gurifuncs.c:
+	Clarify docs for g_uri_escape_string (#508773)
+
+2008-01-12  Andre Klapper  <a9016009@gmx.de>
+
+	* configure.in: ALL_LINGUAS: remove line breaks from previous 
+	commit to get damned-lies stats correct again. Add Sinhala (si).
+
+2008-01-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Fix a docs typo
+
+2008-01-11 12:55:19  Tim Janik  <timj@imendio.com>
+
+	* tests/testingbase64.c: added g_base64_encode()/g_base64_decode()
+	test case by Asbjoern Pettersen. fixed up coding style.
+
+2008-01-11 09:00:28  Tim Janik  <timj@imendio.com>
+
+	* glib/Makefile.am (install-exec-hook): use mv/sed/rm on a temporary
+	file instead of "sed -i" which is not portable enough.
+
+2008-01-08  Alexander Larsson  <alexl@redhat.com>
+
+	* tests/cxx-test.C:
+	Add gio/gio.h include to check for c++ problems.
+
+2008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.15.1 ===
+
+2008-01-07  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.in:
+	Add gio/test/Makefile to AC_CONFIG_FILES
+
+2008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gregex.c: Add a translator comment (#503051, 
+	Pedro de Medeiros)
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h: Cope with gcc 4.3 changed 'extern inline'
+	semantics.  (#315437, patch by Loïc Minier)
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gspawn.c (fdwalk): Don't set open_max to
+	RLIM_INFINITY.  (#495589, Tommi Komulainen)
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* README.in, INSTALL.in: Document new dependencies.
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio-2.0.pc.in, gio-2.0-uninstalled.pc.in: Require glib-2.0
+	(#507628)
+
+2008-01-04  Mathias Hasselmann  <mathias@openismus.com>
+
+	Resolve 64 bit-shift bug in g_markup_collect_attributes.
+	Spotted by Lieven van der Heide.
+
+	* glib/gmarkup.c: Use G_GUINT64_CONSTANT in bit-shift.
+
+2008-01-02  Alvaro Lopez Ortega  <alvaro@sun.com>
+
+	* gio/gunixmount.c (g_unix_mount_unmount, g_unix_mount_eject):
+	These void functions were trying to return a value. It was causing
+	the compilation to fail.
+
+2008-01-02  Alvaro Lopez Ortega  <alvaro@sun.com>
+
+	* glib/ghash.c (g_hash_table_replace, g_hash_table_insert): These
+	functions prototype defines its output as void, and therefore they
+	should not return any value. This patch fixes a compilation error:
+	the "return" clauses were incompatible with the functions prototype.
+
+2007-12-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gslice.c: Remove C99 comments
+
+2007-12-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.h:
+	* glib/glib.symbols: Mark assertion functions as G_GNUC_NORETURN.
+	(#506461, Sebastian Dröge)
+
+2007-12-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Include sys/time.h.  (#505258)
+
+2007-12-22  Mathias Hasselmann  <mathias@openismus.com>
+
+	Do not show empty groups in --help output. Initial patch from Yevgen
+	Muntyan. (#504142)
+
+	* glib/goption.c: Do not show empty groups in --help output.
+	* glib/tests/Makefile.am: Add option-context.c
+	* glib/tests/option-context.c: Test skipping of empty groups.
+
+2007-12-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Remove wrong documentation about start group
+	handling.  (#476856, Areg Beketovski)
+
+2007-12-21 18:02:30  Tim Janik  <timj@imendio.com>
+
+	* glib/Makefile.am: use "sed -i.bak <CMD> <FILE> && rm -f <FILE>.bak"
+	syntax for install-exec-hook, which seems to be the only "sed -i"
+	variant that is portable across linux and MacOS.
+
+2007-12-21  Matthias Clasen  <mclasne@redhat.com>
+
+	* glib/gtestutils.h: Bring up to GLib coding standards: remove
+	C99 comments, trailing commas in enumerations and extra ; after
+	G_BEGIN/END_DECLS. Among other things, this makes xulrunner build
+	against GLib 2.15.
+
+	* glib/gtester.c: More of the same
+
+2007-12-09  Hans Breuer  <hans@breuer.org>
+
+	* tests/gio-ls.c : adapt to recent api changes
+	* tests/testglib.c : variable declaration at the beginning of a block
+	
+	(Lieven van der Heide, #503602)
+	* win32-fixup.pl : process *.rc.in as well; substitute 
+	LT_CURRENT_MINUS_AGE
+	* glib/makefile.msc.in : alphabetic sorting of OBJECTS
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.15.0 ===
+
+	* NEWS: Updates
+
+	* glib/Makefile.am: Fix make dist
+
+2007-12-20 16:34:04  Tim Janik  <timj@imendio.com>
+
+	* glib/gtester-report: commented class definitions. moved HTML character
+	escaping out of javascript. fixed string->bool conversions. added performance
+	results to test case "Details" window.
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gchecksum.[hc] (g_checksum_new): Return NULL when 
+	the checksum_type is unknown.  (#501853)
+
+2007-12-20  Christian Persch  <chpe@gnome.org>
+
+	* glib/gchecksum.c (g_checksum_new): Use g_slice_new0, to fix
+	"conditional jump or move depends on uninitialised value(s)" error
+	from valgrind. Bug #504527.
+
+2007-12-20 15:17:04  Tim Janik  <timj@imendio.com>
+
+	* Makefile.decl: generate HTML reports for test-report perf-report full-report.
+
+2007-12-20 15:03:51  Tim Janik  <timj@imendio.com>
+
+	* glib/gtester-report: new python script that generates an HTML
+	unit test report from the XML files generated by gtester.
+
+	* glib/Makefile.am: install gtester-report in $bindir and configure
+	it upon installation (version number and python shebang).
+
+2007-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Add g_async_queue_new_full
+
+2007-12-19 20:30:18  Tim Janik  <timj@imendio.com>
+
+	* glib/gtestutils.c: capture g_log() messages and send to gtester.
+	also, send assertion messages to gtester.
+
+	* glib/gtester.c: add error messages to output log file.
+	force child poll loop to abort if waitpid() signaled child exit,
+	eventhough the child's report file descriptor wasn't closed.
+
+2007-12-19  Christian Persch  <chpe@gnome.org>
+
+	* glib/gchecksum.c: (g_checksum_type_get_length),
+	(g_checksum_get_digest):
+	* glib/gchecksum.h:
+	* glib/glib.symbols:
+	* tests/checksum-test.c: (test_checksum): Add
+	g_checksum_type_get_length, and change g_checksum_get_digest to use a
+	provided buffer instead of returning allocated memory. Bug #501853.
+
+2007-12-19  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gtimer.c (g_time_val_from_iso8601): Fix the date validation
+	check. (#503029)
+
+	* tests/testglib.c (various_string_tests): Add an invalid date
+	for testing the above fix.
+
+2007-12-19  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gfileutils.[ch]:
+	* glib/glib.symbols:
+	Rename g_format_file_size_for_display to g_format_size_for_display.
+
+2007-12-18  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/gasyncqueue.c: (g_async_queue_new), (g_async_queue_new_full),
+	  (g_async_queue_unref):
+	* glib/gasyncqueue.h: add g_async_queue_new_full() which takes a
+	  GDestroyNotify function to free any remaining queue items when the
+	  queue is destroyed after the final atomic unref (#367550).
+
+2007-12-18 13:45:23  Tim Janik  <timj@imendio.com>
+
+	* glib/gtestutils.[hc]: added g_test_trap_assert_stdout_unmatched() and
+	g_test_trap_assert_stderr_unmatched(), based on a suggestion by Mathias
+	Hasselmann. reworked g_test_trap_assertions() to use flags to encode
+	assertion semantics, fixes #504227.
+
+2007-12-16  Mathias Hasselmann  <mathias@openismus.com>
+
+	* glib/gutils.c:
+	Allow NULL strings in g_parse_debug_string. (#503862, Matthew Barnes)
+
+2007-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/ghash.[hc]: Add hash table iterators.  (#500507,
+	Jean-Yves Lefort)
+
+	* tests/hash-test.c: Test iterators. 
+
+2007-12-13  Mathias Hasselmann  <mathias@openismus.com>
+
+	Give exmples in error message unsupported case-changing escape
+	sequences. (503222)
+
+	* glib/gregex.c: Add examples to error message for PCRE-ERR37.
+
+2007-12-13  Bastien Nocera  <hadess@hadess.net>
+
+	* glib/gtimer.c: (g_time_val_from_iso8601):
+	Don't try to parse dates that start with anything but a
+	digit, a plus or a minus sign, as those can't be valid
+	ISO8601 dates (Closes: #503029)
+
+2007-12-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_clear): Free group_hash.
+	(#503420, Christian Persch)
+
+2007-12-12 16:06:11  Tim Janik  <timj@imendio.com>
+
+	* tests/testglib.c: split up tests and reworked code to use
+	the new test framework.
+
+	* tests/Makefile.am: added testglib to TEST_PROGS.
+
+2007-12-11 Rahul Bhalerao <b.rahul.pm@gmail.com>
+
+	* configure.in: Added entry for Marathi Translations
+
+2007-12-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.h: Include gurifuncs.h
+
+2007-12-10  Benjamin Otte  <otte@gnome.org>
+
+	* glib/garray.h: use an intermediate cast to void * in g_array_index()
+	to not trigger cast alignment warnings, fixes #502927.
+
+2007-12-10 15:08:59  Tim Janik  <timj@imendio.com>
+
+	* let g_warn_if_fail replace g_assert as discussed here:
+	  http://mail.gnome.org/archives/gtk-devel-list/2007-October/msg00089.html
+
+	* fix bug #502498: Test framework assertion failures should follow
+	gcc error format.
+
+	* gmessages.h, gmessages.c: deprecated g_assert_warning() which is
+	unused now. removed g_assert*() definitions whcih are provided by 
+	gtestutils.h now. added g_warn_if_reached() and g_warn_if_fail()  
+	which are recommended as g_assert/g_assert_not_reached replacements
+	for non-test programs.
+	added g_warn_message() to implement g_warn_*() macros.
+	use emacs-next-error friendly formatting for file:line: for warnings.
+
+	* gtestutils.h, gtestutils.c: use emacs-next-error friendly formatting.
+	implement g_assert_not_reached() with g_assertion_message() and
+	g_assert() in terms of g_assertion_message_expr() so we'll be able to
+	provide assertion messages in test logs.
+
+	* gkeyfile.c, gbookmarkfile.c: changed g_assert*() to g_warn_if_fail()
+	or g_return_if_fail() where suitable.
+
+	* gio/: changed g_assert to g_warn_if_fail.
+
+2007-12-10 13:02:08  Tim Janik  <timj@imendio.com>
+
+	* glib/gtestutils.c (g_assertion_message_cmpnum): applied patch by Tommi
+	Komulainen to fix int64 printouts, fixes #502511.
+
+2007-12-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.h:
+	* glib/gstrfuncs.c (g_dpgettext): Change prototype to take 
+	msgctxtid + offset instead of two strings, to avoid duplication
+	of string constants if the compiler/linker don't perform constant
+	suffix merging.  (#502590, Christian Persch)
+
+	* glib/gi18n.h:
+	* glib/gi18n-lib.h: Adapt the definitions of C_() and Q_().
+
+2007-12-09  Hans Breuer  <hans@breuer.org>
+
+	* tests/gio-ls.c : (new file) a test program emulating some of 'ls'
+	* tests/makefile.msc.in : build it (currently on win32)
+
+	* **/makefile.msc glib/makefile.msc.in : removed -GD to compile
+	with msvc9 (vs2008) with less complains
+	
+	* glibconfig.h.win32.in : #define G_HAVE_ISO_VARARGS 1 for
+	msv8 (vs2005) and above
+	
+	* glib/gfileutils.c : s/stricmp/_stricmp/
+	* msvc_recommended_pragmas.h : work around Microsoft's premature 
+	attempt to deprecate the C-Library
+
+	* tests/makefile.msc.in : added checksum-test
+
+2007-12-08  Christian Persch  <chpe@gnome.org>
+
+	* gio/glocalfileinfo.c: (get_thumbnail_attributes): Add forgotten
+	#ifdef G_OS_WIN32 to fix the build on linux.
+
+2007-12-08  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : build gchecksum.obj
+
+2007-12-06  Mathias Hasselmann  <mathias@openismus.com>
+
+	* glib/ghash.c: Call destroy notify when destroying
+	the hash table in g_hash_table_unref.
+
+2007-12-06 13:29:00  Tim Janik  <timj@imendio.com>
+
+	* glib/gtester.c (child_report_cb): detect non-blocking fd EOF
+	by read()==0 following poll(), needed on MacOS.
+
+2007-12-06  Mathias Hasselmann  <mathias@openismus.com>
+
+	* glib/gunidecomp.c: Mention g_utf8_normalize()
+	returns NULL on invalid string. (#501997)
+
+2007-12-06  Mathias Hasselmann  <mathias@openismus.com>
+
+	* glib/gerror.c: Improve wording for g_propagate_error docs.
+
+2007-12-06 09:27:42  Tim Janik  <timj@imendio.com>
+
+	* tests/scannerapi.c: added new scanner test from #501654, by
+	Patrick Hulin with various modifications.
+	reworked coding style, adapted to new testing framework, fixed
+	token parser test and use a forked sub process to test
+	g_scanner_error() output messages.
+
+2007-12-05 17:58:18  Tim Janik  <timj@imendio.com>
+
+	* glib/gtester.c: added -m=thorough support to gtester.
+
+2007-12-05 17:21:05  Tim Janik  <timj@imendio.com>
+
+	* glib/glib/gtestutils.c: print out random seed for verbose tests,
+	also adapted test result reporting slightly in verbose mode to allow
+	custom debugging output. support "thorough" as test mode alis for "slow".
+
+	* glib/glib/gtestutils.h: added g_test_thorough().
+
+	* glib/glib/gtester.c: print out the last random seed when tests fail.
+	added result attribute to test case status logging to easily spot
+	failing tests in log files. disabled debugging output when skipping tests.
+
+2007-12-05 11:43:22  Tim Janik  <timj@imendio.com>
+
+	* glib/gtestutils.[hc]: added g_test_add_data_func() to pass data
+	into tests. allow data arguments for fixture tests.
+
+	* glib/gtestutils.c: fixed fatal log flag setup, so tests really abort
+	upon criticals/warnings/errors.
+
+	* glib/tests/testing.c: test test_data arguments.
+
+	* glib/gtester.c: some prototype fixups.
+
+2007-12-05  Tor Lillqvist  <tml@novell.com>
+
+	* glib/win_iconv.c: Add "shift-jis" as an alternative spelling of
+	"shift_jis".
+
+2007-12-05  Ryan Lortie  <desrt@desrt.ca>
+
+	* autogen.sh: for the benefit of git users, checkout build/ if it is
+	missing
+	* .gitignore: but after that, ignore it.
+
+2007-12-05  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: ungtk-docify some comments for internal functions
+
+2007-12-04  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* gio/glocalfileinfo.c: Replace the copy-and-paste MD5 digest
+	generation with GChecksum.
+
+2007-12-04  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gchecksum.[ch]: Add GChecksum, a generic wrapper around
+	various hashing algorithms. At the moment, the MD5, SHA-1 and
+	SHA-256 algorithms are supported. (#443648)
+
+	* glib/glib.h:
+	* glib/Makefile.am:
+	* glib/glib.symbols: Build glue for GChecksum
+
+	* tests/Makefile.am
+	* tests/checksum-test.c: Add test suite for GChecksum.
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: no code changes; add comments to document the internal
+	functions.
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: no code changes; reorder functions to remove the need
+	for forward declarations.
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c (g_hash_table_lookup_node,
+	g_hash_table_lookup_extended, g_hash_table_insert_internal,
+	g_hash_node_new): improve clarity in some functions
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: rename 'node' to 'node_ptr' where appropriate
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: convert G_HASH_TABLE_RESIZE() macro to inline function
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/glib.symbols (glib_gettext): remove stray (duplicate) entry
+	from file to fix the build
+
+2007-12-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gnulib/Makefile.am: Fix EXTRA_DIST automake warnings. (#501107)
+
+2007-12-03  Hans Breuer  <hans@breuer.org>
+
+	* glib/glib.symbols : added glib_gettext (in use by gio)
+	* makefile.msc : also try building gio
+	
+	* glib/gmarkup.c : use G_GUINT64_CONSTANT() to avoid 
+	'bad suffix on number'
+	* glib/gtestutils.c : declare cariable at the beginning of the block,
+	include <io.h> for G_OS_WIN32
+	* makefile.msc.in : add gurifuncs and gtestutils
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: create a common function for the many places where all
+	nodes in the table are removed (remove_all, steal_all, destroy, unref,
+	etc...)
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* tests/hash-test.c (second_hash_test): fix memory leak, add a few
+	extra sanity tests.
+
+2007-12-03  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/gkeyfile.c: Don't call g_get_language_names() per-key.
+	(#500638, Michael Meeks)
+
+2007-12-03  Marco Barisione <marco@barisione.org>
+
+	* glib/gregex.c:
+	* glib/gregex.h: Add new error codes for when compilation fails and
+	make compilation error translatable. (#482313, Morten Welinder)
+
+2007-12-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Add a hash table to speed up group lookups,
+	which GKeyFile does quite a lot.  
+
+2007-12-03  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.in:
+	Add xattr checks for OSX style API (#500506)
+
+2007-12-03  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c: merge more common code into functions.  Vastly
+	simplify loop logic in g_hash_table_foreach_remove_or_steal().
+
+2007-12-01  Behdad Esfahbod  <behdad@gnome.org>
+
+	* Makefile.am: Don't descend into build/. (#500875)
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.h:
+	* glib/gmarkup.c: 
+	* glib/gerror.c: Add Since: tags to new API, other doc improvements.
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gurifuncs.c: Some doc cleanups
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Fix up some doc comments, avoid C99 comments
+
+	* glib/gconvert.c: De-doc-commentify static functions to
+	shut up gtk-doc.
+
+	* glib/gutils.c: Fix the glib_gettext doc comment.
+
+2007-11-28  Tor Lillqvist  <tml@novell.com>
+
+	* config.h.win32.in: Update to match what configure produces.
+
+2007-11-28  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gstring.c (g_string_append_uri_escaped):
+	Move this function before g_string_append_c so that
+	we avoid the plt call due to the undefinf of g_string_append_c
+
+2007-11-28  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* gio/Makefile.am: Remove makegioalias.pl from the marshal files
+	and avoid it being cleaned up when running make clean.
+
+2007-11-28  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/glib.symbols:
+	Add in the new symbols
+	
+	* glib/gurifuncs.c:
+	Use the aliases framework
+	
+	* glib/glibintl.h:
+	* glib/gutils.c:
+	Make the alias stuff work now that glib_gettext
+	is exported to libgio. 
+
+2007-11-27  Ryan Lortie  <desrt@desrt.ca>
+
+	* glib/ghash.c (g_hash_table_insert, g_hash_table_replace,
+	g_hash_table_insert_internal): insert/replace were identical except
+	for a single line.  Replace both with a common function.
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/Makefile.am:
+	* gio/gurifuncs.[ch]:
+	* glib/Makefile.am:
+	* glib/gstring.[ch]:
+	* glib/gurifuncs.[ch]:
+	Moved gurifuncs from gio to glib
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.[ch]:
+	* glib/gfileutils.[ch]:
+	Move g_format_file_size_for_display from gio to glib
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.in:
+	Allow configuration of gio-module-dir
+	
+	* gio-2.0.pc.in:
+	Export giomodules location as giomodule variable
+
+2007-11-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/markup-collect.c: Add some tests for invalid booleans
+
+2007-11-26  Ryan Lortie  <desrt@desrt.ca>
+ 
+ 	Add new function g_markup_collect_attributes (bug #496847).
+ 
+ 	* glib/glib.symbols: add g_markup_collect_attributes
+ 
+ 	* docs/reference/glib/glib-sections.txt: 
+ 	* glib/gmarkup.h:
+ 	* glib/gmarkup.c: add g_markup_collect_attributes and new enumerated
+ 	type GMarkupCollectType.  Add new error code
+ 	G_MARKUP_ERROR_MISSING_ATTRIBUTE that is thrown by the attribute
+ 	collector.
+
+2007-11-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/win_iconv.c: Some improvements, being upstreamed.
+	(must_use_null_useddefaultchar): New function, checks for those
+	codepages for which one must pass a NULL lpUsedDefaultChar pointer
+	to WideCharToMultiByte().
+	(kernel_wctomb): Use it.
+	(kernel_wctomb): Return with E2BIG immediately if bufsize is zero.
+
+2007-11-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (_glib_get_locale_dir) [Win32]: Use either
+	lib/locale or share/locale depending on which one is in
+	GLIB_LOCALE_DIR. When the configury recognizes GNU gettext (based
+	on the _nl_msg_cat_cntr variable, eek), share/locale gets used.
+
+	* glib-zip.in: Likewise, look for message catalogs either in
+	lib/locale or share/locale.
+
+2007-11-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gfileattribute.c: Fix up a doc comment.
+
+2007-11-26  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* configure.in:
+	* gio-2.0-uninstalled.pc.in:
+	* gio-2.0.pc.in: 
+	* gio-unix-2.0-uninstalled.pc.in:
+	* gio-unix-2.0.pc.in:
+	* gio/
+	* docs/reference/gio
+	Merged gio-standalone into glib.
+	
+	* glib/glibintl.h:
+	* glib/gutils.c:
+	Export glib_gettext so that gio can use it
+	Add P_ (using same domain for now)
+	Add I_ as g_intern_static_string
+
+2007-11-26  Tor Lillqvist  <tml@novell.com>
+
+	* glib/win_iconv.c: ISO8859-1 is CP28591, not CP1252.
+
+2007-11-26  Tor Lillqvist  <tml@novell.com>
+
+	Implement #491549: On Windows, always use the native API for
+	character set conversions instead of GNU libiconv. Almost all
+	codesets supported by GNU libiconv exist as Windows codepages.
+	One missing feature is the "C99" and "JAVA" pseudo codesets, but I
+	doubt that is worth worrying about.
+	
+	* glib/win_iconv.c: New file. iconv() implementation for
+	Windows. Placed in the public domain by Yukihiro Nakadaira
+	<yukihiro.nakadaira@gmail.com>. From
+	http://yukihiro.nakadaira.googlepages.com/win_iconv.zip, his
+	2007-11-17 version.
+
+	* glib/gconvert.c: Include win_iconv.c on Windows.
+
+	* glib/Makefile.am: Add win_iconv.c to EXTRA_DIST.
+	
+	* configure.in: Bypass iconv checks on Windows. 
+
+2007-11-25  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gtestutils.c: Add conditionals for non-Unix. Just g_error()
+	unless G_OS_UNIX for now.
+
+2007-11-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Require gtk-doc 1.8.
+
+	* glib/gasyncqueue.c:
+	* glib/gdate.c:
+	* glib/gfileutils.c:
+	* glib/gmain.c:
+	* glib/gmarkup.c:
+	* glib/gregex.c:
+	* glib/gtestutils.c:
+	* glib/gutils.c: Use gtk-doc abbreviations for 
+	examples in doc comments.
+
+2007-11-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* */Makefile.am: Replace INCLUDES by AM_CPPFLAGS, other
+	cleanups.
+
+2007-11-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/base64-test.c: Fix a memory overrun.
+
+2007-11-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c: Remove leftover ENABLE_NLS #ifdefs.
+
+2007-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbase64.c (g_base64_encode): Don't refuse to encode
+	a single byte.  (Milan Crha)
+
+	* tests/base64-test.c: Test encoding short strings.
+
+2007-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gi18n-lib.h: 
+	* glib/gi18n.h: Define a two-argument macro C_() for marking
+	translatable strings with context and implement C_() and Q_()
+	using g_dpgettext().  (#142676, Morten Welinder)
+
+	* glib/glib.symbols:
+	* glib/gstrfuncs.[hc]: Implement g_dpgettext().
+
+2007-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c: Use g_print to print out --help text in 
+	locale encoding.  (#469551, Takao Fujiwara)
+
+2007-11-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Set length out param in list-returning functions
+	to 0 when returning NULL.  (#498728, Christian Persch)
+
+2007-11-21 21:06:47  Tim Janik  <timj@imendio.com>
+
+	* Makefile.decl: initialize automake variables EXTRA_DIST and
+	TEST_PROGS for unconditional appending via += in other makefiles.
+	define recursive test targets: test, test-report, perf-report,
+	full-report, as described here:
+	http://mail.gnome.org/archives/gtk-devel-list/2007-November/msg00000.html
+
+	* Makefile.am:
+	* build/win32/vs8/Makefile.am, build/win32/dirent/Makefile.am:
+	* build/win32/Makefile.am, build/Makefile.am:
+	* docs/Makefile.am, docs/reference/Makefile.am:
+	* docs/reference/glib/Makefile.am, docs/reference/gobject/Makefile.am:
+	* gmodule/Makefile.am, tests/Makefile.am:
+	* tests/refcount/Makefile.am, tests/gobject/Makefile.am:
+	* glib/update-pcre/Makefile.am, glib/libcharset/Makefile.am:
+	* glib/tests/Makefile.am, glib/pcre/Makefile.am:
+	* glib/gnulib/Makefile.am, gobject/Makefile.am, m4macros/Makefile.am:
+	* gthread/Makefile.am, glib/Makefile.am:
+	include $(top_srcdir)/Makefile.decl, adapted EXTRA_DIST assignments.
+
+	* glib/tests/Makefile.am: removed example testing rules.
+
+	* glib/tests/testing.c: conditionalized performance and slow tests.
+
+	* glib/gtestutils.h:
+	* glib/gtestutils.c: work around g_test_config_vars not changing its
+	exported value after value assignments, aparently due to symbol aliases.
+
+	* glib/gtester.c: fixed off-by-one error which produced junk in logs.
+
+	* configure.in: check for python >= 2.4 and provide $PYTHON for scripts.
+
+Tue Nov 20 15:59:55 2007 +0100 Tim Janik
+
+	Renamed gtestframework to gtestutils.
+
+	* glib/glib.h:
+	* glib/Makefile.am: added gtestutils.h to public includes.
+
+	* glib/gtestutils.c: include gtestutils.h.
+
+	* glib/gtestutils.h:
+	* glib/glib.symbols:
+	* glib/tests/testing.c: renamed gtestframework to gtestutils.
+
+	* glib/gtestframework.h: renamed to gtestutils.h.
+
+	* glib/gtestframework.c: renamed to gtestutils.c.
+
+Tue Nov 20 15:29:34 2007 +0100 Tim Janik
+
+	glib/gtestframework.c: g_test_init(): make warnings and criticals fatal for all test programs.
+
+Wed Nov 14 20:35:05 2007 +0100 Tim Janik
+
+	gtestframework.c: added test API documentation by Sven Herzberg and Tim Janik.
+
+Wed Nov 14 19:10:28 2007 +0100 Tim Janik
+
+	gtestframework.[hc]: implemented g_test_queue_destroy() and g_test_queue_unref().
+
+Fri Nov 9 12:28:52 2007 +0100 Tim Janik
+
+	Added g_test_bug() and related API.
+
+	* gtester.c: handle G_TEST_LOG_MESSAGE and test test message API.
+
+	* gtestframework.h, gtestframework.c: added test message API and convenience
+	API to send test messages about bug URLs.
+
+Fri Nov 9 11:35:11 2007 +0100 Tim Janik
+
+	Added API to access test framework configuration.
+
+	* gtestframework.h, gtestframework.c: export testing configuration to test
+	programs with g_test_quick(), g_test_perf(), g_test_verbose(), g_test_quiet().
+
+Thu Nov 8 17:55:09 2007 +0100 Tim Janik
+
+	gtester: implemented logic to handle failing tests, self tests, and validate XML reports.
+
+	* gtester.c: terminate when tests failed. keep XML valid when test cases fail.
+	restart test binaries when tests fail, resuming after the last processed test.
+	support --gtester-selftest to run gtester itself as test program.
+	support --test-arg=<arg> to pass args along to test programs. added
+	main_selftest() which does a simplistic fixture test. fail if exit
+	code of test programs is not 0.
+
+	* gtestframework.h: added G_TEST_LOG_SKIP_CASE test log message type.
+
+	* gtestframework.c: support --GTestSkipCount=<n> to skip a number of tests.
+
+	* tests/Makefile.am: added test-report: for demonstration purposes.
+	added gtester-xmllint-check: and hooked it up into check:, this rule calls
+	gtester as test program, running it's selftest, and then uses xmllint to
+	validate the generate XML test log file.
+
+Thu Nov 8 14:51:37 2007 +0100 Tim Janik
+
+	gtester: implemented XML logging.
+
+	* glib/gtester.c: log test messages to XML output file. beautified normal test
+	result output.
+
+	* glib/gtestframework.c: fixed GTimer leak.
+
+	* glib/tests/Makefile.am: start gtester with --verbose.
+
+Thu Nov 8 12:33:31 2007 +0100 Tim Janik
+
+	tests/Makefile.am: execute test programs with gtester, add test: to check:
+
+Thu Nov 8 12:18:51 2007 +0100 Tim Janik
+
+	Fixed PLT symbol exports for gtestframework.h.
+
+	* glib/glib.symbols: added all exported gtestframework.h symbols.
+
+	* glib/gtestframework.c: include galias.h, galiasdef.c, define __G_TESTFRAMEWORK_C__.
+
+Thu Nov 8 11:31:12 2007 +0100 Tim Janik
+
+	glib/gtester.c: fixed debugging flag.
+
+Wed Nov 7 17:56:26 2007 +0100 Tim Janik
+
+	fixed bogus unistd.h include.
+
+Wed Nov 7 17:53:30 2007 +0100 Tim Janik
+
+	Implemented test log IPC.
+
+	* gtester.c: read and decode log messages from test binary child processes.
+	fixed GIOChannel and child watch handling to process all messages and avoid
+	hangs. pass --verbose and --quiet on to children, default to --quiet.
+
+	* gtestframework.h: export g_test_log_type_name().
+
+	* gtestframework.c: send test log to --GTestLogFD=<fd> if given, removed
+	bogus -o-option.
+
+Tue Nov 6 20:07:44 2007 +0100 Tim Janik
+
+	gtester.c: support test case listing through gtester.
+
+Tue Nov 6 20:01:06 2007 +0100 Tim Janik
+
+	gtestframework.c: fixed testpath matches for automatic root suite.
+
+Tue Nov 6 19:50:33 2007 +0100 Tim Janik
+
+	gtester.c: adapted to become a rudimentary test binary launcher.
+
+	* gtester.c: increased read buffer size to match common unix pipe buffer size.
+	added argument parsing and usage. changed io handling to capture and replicate
+	stdout. fixed io handlers to be cleaned up when the child process exits (catch
+	G_IO_ERR | G_IO_HUP). we now use pending/iteration instead of a main loop
+	structure, to keep running until the child process exits and all io has been
+	processed. launch the test binaries given on the command line. don't quit when
+	a child couldn't be launched but --keep-going was specified.
+
+Tue Nov 6 17:11:37 2007 +0100 Tim Janik
+
+	Integrated gtester program into build process.
+
+	* Makefile.am: build and install gtester binary.
+
+	* gtester.c: fixed up coding style and removed hard wired test coded.
+
+Tue Nov 6 16:12:32 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Small -Wall fix
+
+Tue Nov 6 16:05:06 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Implemented nonblocking reading properly now
+
+Mon Nov 5 13:53:23 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Quit the application when the output is parsed completely, not just the process finished
+
+Mon Nov 5 12:00:16 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Read the output of the child process
+
+Mon Nov 5 11:50:59 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Use g_spawn_async_with_pipes()
+
+Mon Nov 5 11:50:08 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Spawn a process async and quit gtester after the child process exited
+
+Mon Nov 5 11:30:45 2007 +0100 Sven Herzberg
+
+	glib/gtester.c:Added a first revision of gtester
+
+Tue Nov 6 16:47:06 2007 +0100 Tim Janik
+
+	Implemented test log serialization.
+
+	* glib/gtestframework.h: added g_test_log*() API.
+
+	* glib/gtestframework.c: implement test log serialization.
+
+Tue Nov 6 14:24:54 2007 +0100 Tim Janik
+
+	Implemented test logging basics.
+
+	* glib/gtestframework.c: added --debug-log and --verbose, implemented
+	test information logging.
+
+	* testing.c: test g_test_maximized_result() and g_test_minimized_result().
+
+Tue Nov 6 11:52:14 2007 +0100 Tim Janik
+
+	Implemented g_test_timer*().
+
+	* gtestframework.c: implemented g_test_timer*().
+
+	* tests/testing.c: added a g_test_timer*() test.
+
+Mon Nov 5 18:28:24 2007 +0100 Tim Janik
+
+	Implemented support for testpaths.
+
+	* gtestframework.c: implemented g_test_add_vtable() and g_test_add_func().
+
+	* tests/testing.c: use g_test_add() and g_test_add_func() to majorly simplify main().
+
+Mon Nov 5 15:56:42 2007 +0100 Tim Janik
+
+	testing.c: added tests for the g_test_rand*() API.
+
+Mon Nov 5 15:55:38 2007 +0100 Tim Janik
+
+	Implemented g_test_rand*().
+
+	* gtestframework.h: fixed g_assert_cmp*() to evaluate arguments only once.
+	added g_assert_cmpuint(). completed g_test_rand*() to cover bits, ints,
+	doubles and ranges.
+
+	* gtestframework.c: fixed "--seed" option and implemented g_test_rand*().
+
+Mon Nov 5 15:51:43 2007 +0100 Tim Janik
+
+	testing.c: added tests for g_assert_cmphex() and forked test traps.
+
+Mon Nov 5 15:10:18 2007 +0100 Tim Janik
+
+	Implemented g_test_trap_fork() API.
+
+	* gtestframework.h: added g_assert_cmphex(). reworked g_test_trap*() API.
+
+	* gtestframework.c: implemented g_test_trap_fork() API.
+
+Thu Nov 1 15:05:07 2007 +0100 Tim Janik
+
+	* glib/gtestframework.c:
+
+	that match a given test path.
+	(g_test_run_suite): run suite only if it matches the existing test paths.
+
+	* glib/tests/testing.c: minor rename.
+
+Thu Nov 1 13:45:55 2007 +0100 Tim Janik
+
+	GTest framework started.
+
+	* glib/gtestframework.h: testing framework API as proposed on gtk-devel-list.
+	includes elaborate assertions, performance report functions, test traps,
+	test timer, test random numbers, teardoiwn garbage collection functions
+	and general test case / test suite management APIs.
+
+	* glib/gtestframework.c: first test framework implementation. already covers
+	some test suite management APIs and assertion message implementations.
+
+	* glib/tests/testing.c: test program for the testing framework.
+
+	* glib/tests/Makefile.am: complie testing.c as test. run all tests as part of
+	make test:.
+
+Wed Oct 31 15:42:48 2007 +0100 Tim Janik
+
+	glib/Makefile.am: build tests/ subdir after building libglib.
+
+Tue Oct 30 16:17:32 2007 +0100 Tim Janik
+
+	Fixed up internal 'g_test*' names.
+
+	* refcount/signals.c:
+	* refcount/objects.c:
+	* refcount/objects2.c:
+	* refcount/closures.c:
+	* refcount/properties.c:
+	* refcount/properties2.c: changed namespace prefix from g_test_* to my_test_*
+	to not clash with newly introduced g_test* API in glib.
+
+Tue Oct 30 14:41:26 2007 +0100 Tim Janik
+
+	Added gtestframework.[hc] and glib/tests/.
+
+2007-11-20  Sven Neumann  <sven@gimp.org>
+
+	* glib/gerror.c (g_error_add_prefix): use g_strconcat() instead of
+	g_strjoin() to concatenate two strings.
+
+2007-11-19  Marco Barisione  <marco@barisione.org>
+
+	* glib/gregex.c: When the compilation of a pattern fails in the error
+	message use the character offset and not the byte offset.
+
+	* glib/gregex.c: Pass an unsigned long instead of an int to
+	pcre_fullinfo() to avoid problems on 64-bit systems (#498113, Kouhei
+	Sutou)
+
+2007-11-19 10:30:33  Tim Janik  <timj@imendio.com>
+
+	* configure.in: updated version number to 2.15.0 for development.
+
+2007-11-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbase64.c: Documentation improvements.  (#496518,
+	Stefan Schulze Frielinghaus)
+
+2007-11-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Check whether assembler supports numerical local
+	labels.  
+
+	* glib/gatomic.c: Fix powerpc implementation of atomic ops for 
+	platforms where the assembler doesn't support numerical local
+	labels.  (#445362)
+
+2007-11-15  Ryan Lortie  <desrt@desrt.ca>
+
+	* docs/reference/glib/tmpl/markup.sgml:
+	* glib/gmarkup.h:
+	* glib/gmarkup.c: new flag G_MARKUP_PREFIX_ERROR_POSITION to cause the
+	parser to prepend location information (ie: "Error on line %d, char
+	%d:") to errors generated by the GMarkupParser callbacks.
+
+	Closes #496046.
+
+2007-11-15  Ryan Lortie  <desrt@desrt.ca>
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/glib.symbols:
+	* glib/gerror.h:
+	* glib/gerror.c: new functions g_prefix_error and
+	g_propagate_prefixed_error.
+
+2007-11-13  Cody Russell  <bratsche@gnome.org>
+
+	* docs/reference/gobject/gobject-docs.sgml:
+	* docs/reference/gobject/tut_gsignal.xml:
+	* docs/reference/gobject/tut_gtype.xml:
+	* docs/reference/gobject/tut_intro.xml:
+	* docs/reference/gobject/tut_tools.xml:
+	* docs/reference/gobject/tut_howto.xml:
+	* docs/reference/gobject/tut_gobject.xml: Documentation fixes.
+	Recommend macro type names such as NAUTILUS_TYPE_WINDOW (not
+	NAUTILUS_WINDOW_TYPE).  Fixed text which erroneously stated that 
+	superclass initializers don't run when an object is 
+	instantiated.  Fixed numerous spelling mistakes.  Minor grammar 
+	edits. (#490637, Adam Dingle)
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Coding style cleanups and doc 
+	improvements.  (#491979, #491982, Areg Beketovski)
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/giochannel.c: Coding style cleanups and doc 
+	improvements.  (#491975, Areg Beketovski)
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gmain.c (g_main_context_iteration): Improve the
+	docs.  (#491974, Areg Beketovski)
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gdate.c: Coding style fixes.
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Add AM_PROG_CC_C_O.
+
+	* Makefile.am: Remove the install-exec-local hook and use
+	configexecincludedir_DATA instead, in an attempt to avoid
+	automake 1.9 <> 1.10 incompatibilities.
+
+	* glib/Makefile.am: Rename MIRRORING_TAB_SOURCES, since
+	automake 1.10 complains.
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gspawn.c (g_spawn_sync): Improve the docs.  (#491968,
+	Areg Beketovski)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gmain.c (g_main_context_release): 
+	(g_main_context_acquire):
+	(g_main_context_new): Fix the doc wording.  (#491957, 
+	#491965, #491966, Areg Beketovski)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gutils.c (g_set_application_name): Add a missing
+	since tag.  (#464259, Mark Doliner)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/goption.c (g_option_context_new): Improve the docs.
+	(#436293, Vincent Untz)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gmain.c (g_main_loop_quit): Expand the docs 
+	a bit.  (#317775, Søren Sandmann)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+	
+	* autogen.sh: Accept automake 1.10, too
+
+	* mkinstalldirs: Temporarily add this script, to fix building
+	from svn.
+
+	* Makefile.am: Use MKDIRS_P instead of mkinstalldirs, add
+	ChangeLog.pre-2-14 and mkinstalldirs to EXTRA_DIST.
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gmarkup.h: Include gslist.h. Pointed out by Michael Natterer.
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gconvert.c (g_convert_with_iconv): Try harder to reset
+	shift state with AIX iconv().  (#467537)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in:
+	* m4macros/glib-2.0.m4: Require pkg-config 0.16 in configure
+	and in AM_PATH_GLIB_2_0 to be consistent with the use of
+	PKG_PROG_PKG_CONFIG which was introduced in 0.16.  (#418778,
+	Loïc Minier)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c (g_parse_long_long): Don't leave
+	out parameters uninitialized.  (#490061, Benjamin Otte)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gmain.c (g_main_context_unref): Don't leak the
+	condvar.  (#479724, Areg Beketovski)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/gmarkup.[hc] (g_markup_parse_context_get_element_stack): 
+	New function, to get the stack of open elements.  (#452887,
+	Ryan Lortie)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gkeyfile.[hc]: Make some functions that take
+	a GError return boolean instead of void.  (#375651, Matt Barnes)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+	
+	* autogen.sh: Use automake 1.9
+
+	* acinclude.m4:
+	* configure.in: Move some inter-*.m4 includes from
+	configure.in to acinclude.m4 to avoid warnings when
+	using automake 1.9.  (#449937)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	=== Branch for 2.14 ===
diff --git a/ChangeLog.pre-2-18 b/ChangeLog.pre-2-18
new file mode 100644
index 0000000..e07ae27
--- /dev/null
+++ b/ChangeLog.pre-2-18
@@ -0,0 +1,1738 @@
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version 
+
+	* === Released 2.18.1 ===
+
+	* NEWS: Updates
+
+2008-09-16  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gtimer.c (g_time_val_to_iso8601): time_t is 64 bits in all
+	the newer Microsoft C libraries, not just 64-bit ones. So to avoid
+	crash if compiled with newer MSVSes, use a separate time_t
+	variable in all cases on Windows.
+
+	* glib/gbacktrace.h: Define G_BREAKPOINT() also for 64-bit MSVC,
+	using the __debugbreak() intrinsic.
+
+2008-09-15  Behdad Esfahbod  <behdad@gnome.org>
+
+	* configure.in: Fix description of module shared library suffix.
+
+2008-09-15  Tor Lillqvist  <tml@novell.com>
+
+	* config.h.win32.in: Update to match what the configure script
+	produces. Just for uniformity, only commented out parts affected.
+
+2008-09-13  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.h
+	* glib/gwin32.h: Deprecate G_WIN32_DLLMAIN_FOR_DLL_NAME(),
+	g_win32_get_package_installation_directory() and
+	g_win32_get_package_installation_subdirectory() as their
+	documentation has warned for a while. Sorry that I forgot to do
+	this before 2.18.0.
+
+	* glib/gwin32.c (g_win32_get_package_installation_directory):
+	Print a warning if a non-NULL package parameter is passed to this
+	function, as that is deprecated usage, as the documentation says.
+
+2008-09-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 548321 – <string.h> is not included in gi18n-lib.h
+
+	* glib/gi18n.h:
+	* glib/gi18n-lib.h: Include string.h, since strlen is used in 
+	the macros. Pointed out by Ignacio Casal Quinteiro
+
+2008-09-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 551731 – g_date_set_time[_t] docs should mention what timezone
+
+	* glib/gdate.c (g_date_set_time, g_date_set_time_t): Documentation
+	improvements proposed by Owen Taylor.
+
+2008-09-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 551410 – gtestutils.c: using printf without prototype
+
+	* glib/gtestutils.c: Include stdio.h. Pointed out by Kazuki Iwamoto.
+
+2008-09-09  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 551228 – G_STRFUNC on recent Sun compiler should be expanded to
+	__func__ rather than '???'
+
+	* glib/gmacros.h: Don't use glibconfig.h defines in gmacros.h,
+	as the comment up top says. Instead look at __STDC_VERSION__.
+	Problem reported by Lin Ma.
+
+2008-09-09  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 523463 – Core dump in gmain.c:2482:IA__g_main_context_check()
+
+	* glib/gmain.c (g_main_context_check): Be robust against setting
+	event fields on the fly, as e.g. happens in linc. Tracked down
+	by Paul Smith, fix proposed by Owen Taylor.
+
+2008-09-08  Christian Dywan  <christian@imendio.com>
+
+	Bug 550433 – g_test_init doesn't recognize --help
+
+	* glib/gtestutils.c (parse_args): Add detailed --help output
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.18.0 ===
+
+2008-09-02  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 549771 – improved .gitignore for glib
+
+	* docs/reference/.gitignore:
+	* docs/reference/gio/.gitignore:
+	* docs/reference/gobject/tmpl/.gitignore:
+	* gio/.gitignore:
+	* gio/tests/.gitignore:
+	* glib/.gitignore:
+	* glib/libcharset/.gitignore:
+	* glib/tests/.gitignore:
+	* gmodule/.gitignore:
+	* gobject/.gitignore:
+	* gobject/tests/.gitignore:
+	* po/.gitignore:
+	* tests/.gitignore: new files
+	* .gitignore: remove 'build' (since it's part of glib now), add more
+	useful things.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+	* configure.in: Bump version to 2.18.0
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 550104 – trivial documentation fix for g_get_home_dir
+
+	* glib/gutils.c (g_get_home_dir): Fix up the docs.
+
+2008-09-02  Michael Natterer  <mitch@imendio.com>
+
+	* glib/gchecksum.c (g_checksum_reset): add
+	g_return_if_fail (checksum != NULL)
+
+2008-09-01  Paolo Borelli  <pborelli@katamail.com>
+
+	Bug 550040 - Move GString, rand and printf tests to the unit test
+	framework
+
+	* tests/printf-test.c:
+	* tests/rand-test.c:
+	* tests/string-test.c:
+	Removed
+
+	* glib/tests/printf.c:
+	* glib/tests/rand.c:
+	* glib/tests/string.c:
+	Added
+
+	* tests/Makefile.am:
+	* glib/tests/Makefile.am:
+	Updated for the above
+
+2008-08-31  Emmanuele Bassi  <ebassi@gnome.org>
+
+	Bug 550096 – GBookmarkFile parser is not forward compatible
+
+	* glib/gbookmarkfile.c:
+	(parse_bookmark_element), (parse_application_element),
+	(parse_mime_type_element), (parse_icon_element): Relax the
+	attributes checking of the GBookmarkFile parser for the
+	attributes that the desktop bookmark file specification
+	defines and controls. This allows adding new attributes to
+	the existing elements in newer versions without breaking the
+	parser in older ones.
+
+2008-08-28  Ryan Lortie  <desrt@desrt.ca>
+
+	Fixup for test case in previous commit.
+
+	* glib/tests/strfuncs.c: don't fail if we can't open the test data.
+	This happens if $(builddir) != $(srcdir) (like when doing 'make
+	distcheck').  Quick workaround for now until #549783 can be fixed.
+
+2008-08-28  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 548612 – g_strstr_len() should use memmem when available
+
+	* glib/gstrfuncs.c (g_strstr_len): fix off-by-one memory access error
+	* glib/tests/strfuncs.c (test_bounds): add some new test cases that
+	would catch problems like this
+	* glib/tests/4096-random-bytes: test data for the previous
+	* glib/tests/Makefile.am: add previous to EXTRA_DIST
+	
+2008-08-28  Ryan Lortie  <desrt@desrt.ca>
+
+	[REVERT] Bug 548612 – g_strstr_len() should use memmem when available
+
+	* configure.in:
+	* glib/gstrfuncs.c (g_strstr_len): revert use of memmem (see bug)
+
+2008-08-28  Matthias Clasen  <mclsaen@redhat.com>
+
+	* configure.in: Change libselinux detection to not link libglib
+	against it.
+
+2008-08-28  Michael Natterer  <mitch@imendio.com>
+
+	* glib/gstrfuncs.c (g_parse_long_long): make "endptr" const since
+	it's always a pointer into the const string passed. Remove some
+	casting to (gchar*) in this function.
+
+	(g_ascii_strtoull)
+	(g_ascii_strtoll): cast "endptr" to (const gchar**) here when
+	passing it to above function.
+
+2008-08-28  Bastien Nocera  <hadess@hadess.net>
+
+	Bug 548612 – g_strstr_len() should use memmem when available
+
+	* glib/tests/strfuncs.c (test_strstr):
+	* tests/string-test.c (main): Patch by Paolo Borelli
+	<pborelli@katamail.com> to move the tests to the right place,
+	and add more tests
+
+	* glib/gstrfuncs.c (g_strstr_len): Fix problem with memmem ignoring
+	nul-terminators in strings, and using the haystack_len instead
+
+2008-08-28  Bastien Nocera  <hadess@hadess.net>
+
+	Bug 548612 – g_strstr_len() should use memmem when available
+
+	* configure.in: detect whether memmem is available in the C library
+	* glib/gstrfuncs.c (g_strstr_len): use memmem for g_strstr_len() if
+	available in it's available, as it could be optimised by the C library
+	* tests/string-test.c (main): Add a few tests for g_strstr_len()
+
+2008-08-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: Stylistic changes. Plug an unlikely memory leak
+	that occurred in create_thread() if closing the thread handle
+	failed. Add more error messages to g_io_win32_free() that are
+	printed only when debugging. Plug handle leak, a socket channel's
+	event was never closed.
+
+2008-08-27  Tor Lillqvist  <tml@novell.com>
+
+	* config.h.win32.in: Should not define HAVE_DIRENT_H when
+	compiling with MSVC, as the only file which checks HAVE_DIRENT_H
+	is gdir.c, and that includes the dirent.h and wdirent.c from
+	build/win32/dirent explicitly anyway when being compiled with
+	MSVC.
+
+2008-08-22  Björn Lindqvist  <bjourne@gmail.com>
+
+	Bug 523939 – Example program for GValue
+
+	* gobject/gvalue.c: Add code example that demonstrates GValue's
+	features.
+
+2008-08-21  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: Minor comment improvements. Improve run-time
+	warning messages. Drop some #if 0 code. Don't bother compiling the
+	binary compatibility g_io_channel_win32_new_stream_socket()
+	function that has not been mentioned in any header since 2.0 on
+	Win64.
+
+	* glib/glib.symbols: Mark it, too, private, and don't export it on
+	Win64.
+
+2008-08-21  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c: Rework the g_poll() implementation on Windows to
+	match poll() semantics more closely. This makes the test program
+	in bug #468910 behave better and doesn't seem to break anything
+	else.
+
+	If polling several GPollFDs, i.e. messages and/or waitable
+	handles, first check if one or several of them are in the
+	signalled state right away, with timeout zero. Return indication
+	for all that are in that case. To check if several handles are
+	signalled, we have to call the WaitForMultipleObjectsEx() function
+	repeatedly, each time removing the handle it indicated was
+	signalled last time, until WAIT_TIMEOUT is returned.
+
+	If not, then poll with timeout and indicate only the single one
+	that the Win32 wait function tells us as before.
+
+	Remove unnecessary ifdefs, as we always have G_MAIN_POLL_DEBUG
+	defined on Windows.
+
+	Initialise g_main_poll_debug in g_main_context_new() so we have it
+	before testing it in one case.
+
+	Don't put several copies of a handle in the array of handles to
+	wait for. The documentation says this is not allowed, although it
+	did seem to work fine in practise. But do as the documentation
+	says anyway.
+
+2008-08-20  Tor Lillqvist  <tml@novell.com>
+
+	Bug 500246 - Bug fixes for giowin32
+
+	* glib/giowin32.c (read_thread) (write_thread): Change the nbytes
+	variables to signed.
+	(g_io_channel_win32_make_pollfd): Fix an obvious error in the file
+	descriptor case leftover after the patch from bug #333098 on
+	2006-03-02. Thanks to Marcus Brinkmann.
+
+2008-08-20  Tor Lillqvist  <tml@novell.com>
+
+	Bug 324234 - Using g_io_add_watch_full() to wait for connect() to
+	return on a non-blocking socket returns prematurely
+
+	Bug 548278 - Async GETs connections are always terminated
+	unexpectedly on Windows
+
+	* glib/giowin32.c: Add one more state variable to the
+	GIOWin32Channel struct, ever_writable. Initialise it to FALSE, set
+	to TRUE when the WSAEventSelect() indicates FD_WRITE, and never
+	reset to FALSE.
+
+	Don't do the WSASetEvent() in g_io_win32_prepare() unless
+	ever_writable is TRUE. Don't automatically indicate G_IO_OUT in
+	g_io_win32_check() unless ever_writable is TRUE.
+
+	This fixes the behaviour of the test case program in bug #548278,
+	and the "Testcase for the spurious OUT event bug" in bug
+	#324234. It also doesn't seem to break anything. Not that there is
+	any exhaustive test suite...
+
+	Add a comment with a list of bugs that are related to the code in
+	this file.
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+2008-08-17  Sven Neumann  <sven@gimp.org>
+
+	* NEWS: mention GWinHttpVfs.
+
+2008-08-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-08-15 12:41:26  Tim Janik  <timj@imendio.com>
+
+	* glib/gtestutils.c: changed assertion messages, so older emacsen
+	can also detect failing source file and line, fixes:
+	Bug 502498 – Test framework assertion failures should follow gcc error format
+
+2008-08-14  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 547832 – gtk+-2.12.11 fails to build - AC_PROG_MMAP too strict,
+	and unnecessary
+
+	* configure.in: Be a little bit more forgiving when checking
+	for mmap. Patch by Peter O'Gorman
+
+2008-08-13  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 547337 – G_DISABLE_DEPRECATED breaks tests build
+
+	* tests/testglib.c: Protect deprecated API by ifdefs.
+	Patch by Kalle Vahlman
+
+2008-08-13  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 547637 – unconditional #include of sys/statfs.h in configure
+	impedes detection of statfs things if non-existant
+
+	* configure.in: Protect the statfs.h include by guards.
+
+2008-08-12  Federico Mena Quintero  <federico@novell.com>
+
+	* glib/gi18n-lib.h: In the #error about having to define
+	GETTEXT_PACKAGE, add a hint about a possibly-missing config.h.
+
+2008-08-11  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 547200 – g_utf8_find_next_char() issues
+
+	* glib/gutf8.c: Improve wording about @end arguments in str funcs.
+
+2008-08-10  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gutf8.c: Fix docs to use "nul-terminated" consistently.
+
+2008-08-08  Ryan Lortie  <desrt@desrt.ca>
+
+	Fix 'fail' markup test cases to -not- be valid XML 1.1.
+
+	* tests/markups/fail-32.gmarkup: change &#x10; to &#x0; since the
+	former is no longer a failure.
+
+2008-08-08  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 546876 - Modify GMarkup parser to accept &#x1; .. &#x1f;
+
+	* glib/gmarkup.c: previously the parser only accepted character
+	references for \t \n and \r (as per XML 1.0); now it accepts all
+	of &#x1; .. &#x1f;.
+
+2008-08-07  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Output comment clarifying GPid semantics to
+	glibconfig.h.
+
+	* glibconfig.h.win32.in: Ditto here.
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 546329 – API docs for g_utf8_normalize() are incorrect
+
+	* glib/gunidecomp.c: Remove inaccurate information about
+	g_utf8_collate() from g_utf8_normalize() docs.
+	Pointed out by Sven Neumann.
+
+2008-08-04  Tor Lillqvist  <tml@novell.com>
+
+	* glibconfig.h.win32.in: Make the union _GSystemThread::data array
+	8 bytes on Win64. Not that it matters as the union contains a
+	pointer also anyway, but for equivalence with the configure-
+	generated glibconfig.h
+
+2008-08-04  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c (g_get_current_time): MSDN says: "Do not cast a
+	pointer to a FILETIME structure to either a LARGE_INTEGER* or
+	__int64* value because it can cause alignment faults on 64-bit
+	Windows." So don't do that then. Indeed the code did work randomly
+	on Win64 when compiled with optimisation.
+
+2008-08-04  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c
+	* glib/gmain.c
+	* glib/gspawn-win32.c
+	* glib/gspawn-win32-helper.c: Change gssize casts introduced on
+	2008-07-28 to gintptr casts now that we have that. gssize is as
+	such the same as gintptr on both 32- and 64-bit Windows, but the
+	gintptr name indicates that it is used to hold pointers, i.e. also
+	HANDLEs.
+
+	* tests/testglib.c: Avoid warning on Win64 by using gintptr cast
+	instead if long cast.
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.17.5 ===
+
+	* NEWS: Updates
+
+2008-08-02  Tor Lillqvist  <tml@novell.com>
+
+	* glibconfig.h.win32.in: Add gintptr and guintptr typedefs here,
+	too, appropriately ifdeffed for 32/64 bit, gcc/MSVC. Add 64-bit
+	versions of GPOINTER_TO_INT(), GPOINTER_TO_UINT() and vice versa,
+	too.
+	
+2008-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+	
+2008-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 545798 – "Since: 2.18" mark is missing in g_set_error_literal
+	documentation
+
+	* glib/gerror.c (g_set_error_literal): Add a Since: marker.
+	Pointed out by Kouhei Sutou
+
+2008-07-30  Tor Lillqvist  <tml@novell.com>
+
+	Bug 545485 - Implicit declaration of utime()
+
+	* glib/gstdio.c: Include <utime.h> on POSIX.
+
+2008-07-28  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Output to glibconfig.h typedefs for gintptr as the
+	signed integer type that can hold a pointer, and guintptr as the
+	corresponding unsigned type. These types are portable equivalents
+	to intptr_t and uintptr_t which are not available in all
+	compilers.
+
+	For all current platforms, they will presumably end up as the same
+	types as gssize and gsize, but in theory size_t can be smaller
+	than intptr_t. Also, the intended use case for gintptr and
+	guintptr is different from that of gssize and gsize. As the name
+	indicates, gintptr is for when one wants an integer type that can
+	hold a pointer, and gsize is for when one wants an integer type
+	that can hold the value of the sizeof operator.
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 544465 – gmarkup makes it hard to use pre-rolled parsers
+
+	* glib/glib.symbols:
+	* glib/gmarkup.[hc]: Add g_markup_context_get_user_data.
+	Patch by Ryan Lortie
+
+2008-07-28  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: Message catalogs should always get installed into
+	share/locale nowadays, don't bother with the convoluted logic
+	checking if they are in lib/locale instead. Put the correct helper
+	programs in the zipfile.
+
+2008-07-28  Tor Lillqvist  <tml@novell.com>
+
+	Fix problems on 64-bit Windows. Avoid warnings, some of which
+	indicated actual problems, some which were just annoyances. 
+
+	Where casts to an integer type are needed for pointers, use
+	gssize. Technically intptr_t would be the more proper type, but we
+	still want to be compilable with MSVS6 and 7 which don't have
+	intptr_t. MSVS8 and 9 do have intptr_t, but in <crtdefs.h>, not
+	<stdint.h>.
+
+	Use %p to print out handles. Use gssize casts when assigning
+	GPollFD::fd fields.
+
+	Use G_GSIZE_FORMAT when printing size_t values.
+	
+	* configure.in: Define automake conditional G_OS_WIN32_X64 which
+	is true on Win64.
+
+	* glib/giochannel.h: Use slightly different prototype for
+	g_io_channel_win32_new_messages() on Win64 with gsize instead of
+	guint.
+
+	* glib/giowin32.c
+	* glib/gmain.c
+	* glib/gspawn-win32.c
+	* tests/testglib.c: Generic changes as described above.
+
+	* glib/gmain.h: Don't bother mentioning GIMP in comment.
+
+	* glib/grel.c (tuple_hash_2): Use all bits of pointer.
+
+	* glib/gspawn-win32.c
+	* glib/gspawn-win32-helper.c: Use gssize types in the
+	communication between parent and helper process, so that we can
+	pass process handles, which are pointers, also on Win64.
+
+	* glib/gtimer.c (g_time_val_to_iso8601): time_t is 64 bits on
+	Win64 so we can't pass the address of a GTimeVal::tv_sec which is
+	a long directly to gmtime(). On the other hand, changing
+	GTimeVal::tv_sec to be a gint64 on Win64 is not really feasible
+	either, as that would then require changes in much code that uses
+	GTimeVals.
+
+	* glib/gspawn-win32.c
+	* glib/Makefile.am: Call the helper programs
+	gspawn-win64-helper.exe and gspawn-win64-helper-console.exe on
+	Win64, to avoid potential risk of running a 32-bit version of the
+	helper.
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/glib.symbols
+	* glib/gconvert.c
+	* glib/gdir.c
+	* glib/gfileutils.c
+	* glib/giowin32.c
+	* glib/gspawn-win32.c
+	* glib/gutils.c
+	* glib/gwin32.c: Bypass the Windows "ABI compatibility" symbols on
+	_WIN64. As there hasn't been any widely deployed 64-bit Windows
+	builds of the really old GLib (pre-2.8.1) versions those refer to,
+	there is no need to have the "ABI compatibility" versions in the
+	DLL.
+
+	* glib/makegalias.pl: Handle #ifndef _WIN64: Just output it, too.
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Set LIB_EXE_MACHINE_FLAG to either X86 or X64 on
+	Windows. AC_SUBST it.
+
+	* glib/Makefile.am (glib-2.0.lib): Pass appropriate -machine flag
+	to lib.exe.
+
+2008-07-25 15:47:08  Tim Janik  <timj@imendio.com>
+
+	* glib/tests/testing.c (test_random_conversions): added new sample
+	test to prepare for extended range random tests.
+
+2008-07-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gdir.c: Include <stdio.h> for FILENAME_MAX on newer mingw
+	installations.
+
+2008-07-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gslice.c (smc_notify_free): Use G_GSIZE_FORMAT instead of
+	the C99 "zu".
+
+2008-07-24  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Must output the GLIB_USING_SYSTEM_PRINTF to
+	glibconfig.h using the same two phase code as for the other
+	defines in it. Can't check enable_included_printf directly in the
+	shell code that is the first argument to AC_CONFIG_COMMANDS().
+
+	Preset glib_cv_stack_grows=no on Windows to help
+	cross-compilation.
+
+	* configure.in: Enhancements for 64-bit Windows: 
+
+	Handle also size_t being larger than long. It is long long
+	a.k.a. __int64 on the LLP64 Win64.
+
+	Set glib_void_p and glib_long correctly. Their assignments were
+	crossed. It hasn't mattered on LP64 platforms like all (?) 64-bit
+	UNIXes, but on the LLP Win64 it was wrong.
+
+	* glibconfig.h.win32.in: Check also _WIN64.
+
+2008-07-24  Tor Lillqvist  <tml@novell.com>
+
+	* glibconfig.h.win32.in: Patch for 64-bit Windows from Richard
+	Hult.
+
+2008-07-23  Matthias Clasen  <mclasen@redhat.com>
+
+	544088 – option_test_LDADD is left in tests/Makefile.am
+
+	* tests/Makefile.am: Remove leftovers. 
+	Noticed by Hiroyuki Ikezoe
+
+2008-07-22  Mathias Hasselmann  <mathias@openismus.com>
+
+	Set LANG variable for group caption tests to get reproducable results.
+
+	* glib/tests/option-context.c (group_captions()):
+	  Set LANG variable to C in the forked process to get reproducable.
+	  Don't silence the forked process in --verbose mode to support
+	  debugging.
+
+2008-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Fix detection of struct statfs fields.
+
+2008-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2008-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.4 ===
+
+	* configure.in: Bump version
+
+	* NEWS: Updates
+
+2008-07-21  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gtimer.c (g_time_val_to_iso8601): Use the right format
+	string to get leading zeros when converting to ISO 8601. (Sven
+	Herzberg)
+
+2008-07-21  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gbookmarkfile.c:
+	(bookmark_app_info_new): Do not set the timestamp value
+	using time(), as it will be overwritten anyway. (#535223,
+	Michael Meeks)
+
+	(parse_application_element),
+	(bookmark_app_info_dump): Support the "modified" attribute,
+	which takes an ISO-formatted string instead of a Unix time
+	stamp, to keep the number of g_strdup_printf() calls to a
+	minimum.
+
+	* glib/gtimer.c:
+	(g_time_val_to_iso8601): Do not use strftime(): we know
+	the format and contents of the ISO 8601 date format we
+	use.
+
+	* tests/bookmarks/valid-03.xbel: Add a test file for the
+	modified attribute.
+
+2008-07-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tests/Makefile.am:
+	* glib/tests/array-test.c: Move array tests here.
+
+	* tests/Makefile.am:
+	* tests/array-test.c: Removed.
+
+2008-07-20  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c (g_io_win32_prepare): Patch from Yu Kuan that
+	makes watched sockets behave much better. See gtk-devel-list
+	archives from May for the (unfortunately rather meager)
+	discussion. This patch fixes the presented simple test program,
+	which reasonably could be expected to work.
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 536996 – Missing noop i18n macro equivalent to C_
+
+	* glib/glib.symbols:
+	* glib/gstrfuncs.[hc]: Add g_dpgettext2() which is a 
+	variant of g_dpgettext() taking context and id as separate
+	arguments.
+
+	* glib/gi18n-lib.h:
+	* glib/gi18n.h: Add an NC_() macro that is to C_() as N_()
+	is to _().
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/Makefile.am:
+	* tests/keyfile-test.c:
+	* tests/option-test.c: Remove
+	* glib/tests/option-context.c: Add all GOptionContext tests here.
+	* glib/tests/keyfile.c: Add all GKeyFile tests here.
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 334234 – "printf" format error
+
+	* glib/gslice.c (mem_error): Avoid a warning when printing a pid_t.
+	Pointed out by Morten Welinder. 
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 406120 – g_ascii_strtod
+
+	* glib/gstrfuncs.c (g_ascii_strtod): Document that this
+	function does accept localized infinities and nans. Reported
+	by Morten Welinder.
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 482413 - get_contents_stdio -- overflow and memory corruption
+
+	* glib/gfileutils.c (get_contents_stdio): Detect overflow and
+	error out. Reported by Morten Welinder. 
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 542332 – small fix for error message in GMarkup
+	
+	* glib/gmarkup.c: Improve an error message. 
+	Patch by Ryan Lortie
+
+2008-07-14  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 428048 – 2 of 51 tests fail on Solaris
+
+	* tests/iochannel-test.c: Ignore the error if iconv doesn't
+	support EUC-JP.
+
+2008-07-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/option-test.c: Print error messages when something fails.
+
+2008-07-14  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 467707 – test_iconv_state() in tests/convert-test.c fails on AIX 5.3
+
+	* tests/convert-test.c (test_iconv_state): Skip this test if
+	CP1255 is not supported.  
+
+2008-07-10  Ryan Lortie  <desrt@desrt.ca>
+
+ 	* docs/reference/glib/glib-sections.txt:
+ 	* glib/glib.symbols:
+ 	* glib/gmarkup.c:
+ 	* glib/gmarkup.h: add functions g_markup_parse_context_{push,pop} in
+ 	order to provide some small hooks on which to build easy-to-use
+ 	subparsers.
+ 
+ 	* glib/tests/Makefile: add new test
+ 	* glib/tests/markup-subparser.c: new test for subparsers
+ 
+ 	Fixes bug #337518.
+
+2008-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528317 – GRegex does not allow recursion limit
+
+	* glib/pcre/Makefile.am: Set a sane default recursion limit
+	of 8192 instead of 1000000. 
+	Patch by Mart Raudsepp.
+
+2008-07-04  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 541507 – Ambiguous description of assigned characters in the Glib
+	Unicode Manipulation reference
+
+	* glib/guniprop.c
+	(g_unichar_isgraph): Return true for PrivateUse too.
+	(g_unichar_isprint): Return true for PrivateUse too.
+	(g_unichar_isdefined): Return false for Surrogate.
+
+2008-07-04  Michael Natterer  <mitch@imendio.com>
+
+	Bug 541208 – Functions to easily install and use signals without
+	class struct slot
+
+	* tests/gobject/override.c: added tests for the new gsignal
+	overriding and chaining APIs.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Better endianness fix. From Tomas Mraz.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-07-02  Colin Walters  <walters@redhat.com>
+
+	* gio/gcontenttype.c: Use UNLOCK to unlock, not LOCK.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Add a check for structfs.f_bavail
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.c (g_get_current_time): Add a g_return_val_if_fail
+	check in both versions. Proposed by Patrik Olsson in bug 540545.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Workaround AC_C_BIGENDIAN breakage in autoconf 2.61.
+	Add a _cv_ to some variable names, since autoconf wants it.
+
+2008-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pcre/pcre_compile.c: Apply fix for CVE-2008-2371 to
+	fix a heap-based buffer overflow.
+
+2008-06-29  Björn Lindqvist  <bjourne@gmail.com>
+
+	Bug 539626 – Update docstrings for g_object_freeze_notify and
+	g_object_thaw_notify
+
+	* gobject/gobject.c: Explain how the freeze count works.
+
+2008-06-26  Cody Russell  <bratsche@gnome.org>
+
+	* configure.in: Add #define GLIB_USING_SYSTEM_PRINTF
+	to glibconfig.h, which specifies if GLib is using
+	the system printf functions for g_print*().
+	(#539999, by Tim-Philipp Müller)
+
+2008-06-24  Paolo Borelli  <pborelli@katamail.com>
+
+	Bug 539770 - migrate gstrfunc unit tests to gtest
+
+	* tests/strfunc-test.c:
+	* tests/testglib.c:
+	* tests/strtoll-test.c:
+	* tests/strtod-test.c:
+	* tests/string-test.c:
+	* tests/Makefile.am:
+	Removed old tests.
+
+	* glib/tests/fileutils.c:
+	* glib/tests/strfuncs.c:
+	* glib/tests/Makefile.am:
+	Added all the old tests migrated to the new unit test framework
+	and add new unit tests for some of the functions.
+
+2008-06-23  Kristian Rietveld  <kris@imendio.com>
+
+	* gobject/glib-mkenums.in: introduce an ENUMPREFIX substitution.
+
+	* gio/gioenumtypes.h.template: use @ENUMPREFIX@ instead of
+	hard coding "G" as prefix.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* glib/gurifuncs.c:
+	  Fix markup in comment.
+
+2008-06-21  Johan Dahlin  <jdahlin@async.com.br>
+
+    * *.[ch]: Include "config.h" instead of <config.h>
+    Command used:
+    find -name \*.[ch]|xargs perl -p -i -e 's/^#include <config.h>/#include "config.h"/g'
+    Rubberstamped by Mitch
+
+2008-06-20  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Bug 316221 - G_LOCK warns about breaking strict-aliasing rules
+
+	* configure.in:
+	* glib/gthread.h: Revert previous patch as it doesn't improve the
+	situation and results in other warnings.
+
+2008-06-16  Christian Persch  <chpe@gnome.org>
+
+	Bug 539123 – annotate g_d[n]gettext with G_GNUC_FORMAT
+
+	* glib/gstrfuncs.h:
+	* glib/glib.symbols: Annotate some functions with G_GNUC_FORMAT. 
+
+2008-06-19  Tor Lillqvist  <tml@novell.com>
+
+	Bug 539074 - Cannot get exit status with g_spawn_command_line_sync()
+
+	* glib/gspawn-win32-helper.c (main): Write also the exit status of
+	the spawned process to the error report pipe. Patch by Hiroyuki
+	Ikezoe.
+
+2008-06-19  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 535949 – annotate g_strip_context and g_dpgettext with
+	G_GNUC_FORMAT
+
+	* glib/gstrfuncs.h:
+	* glib/glib.symbols: Annotate some functions with G_GNUC_FORMAT.
+	Patch by Christian Persch
+
+2008-06-19  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 539067 – The document g_io_channel_win32_new_fd() says that "Your
+	code should call only g_io_channel_read()." but gio_channel_read() is
+	deprecated
+
+	* glib/giochannel.h: Fix a reference in a comment
+	Patch by Hiroyuki Ikezoe 
+
+2008-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 537635 – Corrections and improvements to
+	g_time_val_from_iso8601()/g_time_val_to_iso8601()
+
+	* glib/gtimer.c (g_time_val_from_iso8601): set tv_usec to 0 rather 
+	than 1 when a fraction of a second is not specified
+	(g_time_val_from_iso8601): calculate a fraction of a second
+	correctly even in case it does not happen to consist of exactly 
+	six digits; do not allow random data after the ISO 8601 string,
+	only whitespace
+	(make g_time_val_to_iso8601): support fractions of a second
+	Patch by Peter Kjellerstedt
+
+	* tests/testglib.c: Update to match
+
+2008-06-16  Christian Persch  <chpe@gnome.org>
+
+	* glib/gbookmarkfile.c
+	* glib/gconvert.c
+	* glib/gfileutils.c
+	* glib/giochannel.c
+	* glib/giounix.c
+	* glib/giowin32.c
+	* glib/gkeyfile.c
+	* glib/gregex.c
+	* glib/gshell.c
+	* glib/gspawn-win32.c
+	* glib/gutf8.c: Use g_set_error_literal where appropriate. Patch from 
+	bug #535947.
+
+2008-06-16  Christian Persch  <chpe@gnome.org>
+
+	* docs/reference/glib/glib-sections.txt:
+	* glib/gerror.c:
+	* glib/gerror.h:
+	* glib/glib.symbols: Add g_set_error_literal. Bug #535947.
+
+2008-06-16  Michael Natterer  <mitch@imendio.com>
+
+	* glib/goption.c (dgettext_swapped): changed return value to
+	const gchar* to fix warning.
+
+2008-06-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Move docs around
+
+	* glib/gchecksum.h: Add docs.
+
+2008-06-13  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 538119 – glib's mainloop leaks a pipe to sub-processes
+
+	* glib/gmain.c (g_main_context_init_pipe): Don't leak the
+	pipes to child processes. Patch by Thiago Macieira.
+
+2008-06-13  Hans Breuer  <hans@breuer.org>
+
+	* glib/gstrfuncs.c : to get the default translation target on
+	win32 use g_win32_get_locale() instead of setlocale(LS_MESSAGES,NULL)
+	Fixes bug #538044
+
+	* glib/makefile.msc.in gio/makefile.msc : updated
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+	
+	* === Released 2.17.2 ===
+
+	* configure.in: Fix LINGUAS conversion
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.17.1 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Documentation fixups
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glist.c: Tiny doc fix
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 503071 – Application direction changes to right to left even if
+	theres no translation
+
+	* glib/gi18n-lib.h:
+	* glib/glib.symbols:
+	* glib/gstrfuncs.h:
+	* glib/gstrfuncs.c:
+	Add new functions g_dgettext() and g_dngettext().
+
+	* glib/gutils.c (glib_gettext):
+	* glib/gfileutils.c (g_format_size_for_display):
+	* glib/goption.c (dgettext_swapped):
+	Use the new functions.
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 502511 – g_assert_cmphex prints invalid message
+
+	* glib/gtestutils.c (g_assertion_message_cmpnum): Actually print
+	hex numbers in hex. 
+	Pointed out by Tor Lillqvist
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 338162 – [PATCH] Use po/LINGUAS
+
+	* po/LINGUAS: New file
+	* po/Makefile.in.in: Dist LINGUAS
+	* configure.in: Use po/LINUAS
+	Patch by Thomas Andersen
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 314453 – Nautilus crashes in Solaris when browsing the attached
+	file
+
+	* glib/gunicollate.c (g_utf8_collate_key): Handle strfxrm returning
+	-1 a little better. Problem pointed out by Takao Fujiwara
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 529321 – make check fails in glib/pcre
+
+	* glib/pcre/Makefile.am: include Makefile.decl to fix 'make check'.
+	Patch by Hiroyuki Ikezoe
+
+2008-06-11  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: g_win32_error_message() works fine for the
+	Winsock WSA* error codes, too, so drop the winsock_error_message()
+	function.
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 455215 – g_get_user_special_dir: no reference about
+	G_USER_DIRECTORY_DOWNLOAD fallback to $HOME/Desktop if 
+	xdg-user-dirs is not in use
+
+	* glib/gutils.c (g_get_user_special_dir): Improve the docs.
+	Proposed by Luca Ferretti
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 498732 – g_key_file_to_data cannot fail
+
+	* glib/gkeyfile.c (g_key_file_to_data): Improve the docs.
+	Proposed by Christian Persch
+
+2008-06-11  Ross Burton  <ross@burtonini.com>
+
+	Bug 511367 - add g_file_make_directory_with_parents.
+	
+	* gio/gfile.c:
+	* gio/gfile.h:
+	* gio/gio.symbols: Add g_file_make_directory_with_parents.
+	
+2008-06-11  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Bug 531900 – Use __builtin_offsetof for G_STRUCT_OFFSET if building
+	with gcc 4.0 or newer
+
+	* glib/gmacros.h: Use __builtin_offsetof for G_STRUCT_OFFSET if
+	building with gcc 4.0 or newer.
+
+2008-06-11  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c
+	* glib/gspawn.c: Clarify what a "child pid" is in the doc
+	comments.
+
+2008-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 536158 – also bump GHashTable version when a node is removed via
+	g_hash_table_iter_remove()/g_hash_table_iter_steal()
+
+	* glib/ghash.c (iter_remove_or_steal): Bump the hash table 
+	version. Patch by Jean-Yves Lefort
+
+2008-06-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c (g_access): Define X_OK if necessary (MSVC).
+
+2008-06-02  Yevgen Muntyan  <muntyan@tamu.edu>
+
+	Bug 531403 – g_utf8_collate broken on Mac.
+
+	* glib/gunicollate.c:  (g_utf8_collate): use UCCompareTextDefault;
+        (collate_key_to_string), (carbon_collate_key_with_collator),
+        (carbon_collate_key), (carbon_collate_key_for_filename): new
+        functions using Carbon API to get collate key for g_utf8_collate_key()
+        and g_utf8_collate_key_for_filename();
+        (g_utf8_collate_key), (g_utf8_collate_key_for_filename): use those.
+
+2008-05-30  Michael Natterer  <mitch@imendio.com>
+
+	Bug 535628 - test/patterntest.c still includes gpattern.h
+	directly.
+
+	* tests/patterntest.c: don't include "glib/gpattern.h" directly.
+	Patch from Hiroyuki Ikezoe.
+
+2008-05-30  Tor Lillqvist  <tml@novell.com>
+
+	Bug 535625 - alias.h:2648: error: 'utime' undeclared here (not in
+	a function)
+
+	* glib/glib.symbols: Move g_utime inside #if !defined(G_OS_UNIX)
+	|| defined(G_STDIO_NO_WRAP_ON_UNIX).
+
+2008-05-30  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c (g_access) [Win32]: Mask out X_OK to avoid problem
+	on Vista. X_OK was just ignored by access() in earlier Microsoft C
+	libraries. (Which is fine as executability has little meaning on
+	Windows.) The one on Vista returns an error if X_OK is passed.
+
+2008-05-29  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.h
+	* glib/gstdio.c: Add g_utime(). No need to include <sys/utime.h>
+	in gstdio.h, just use a forward struct declaration.
+
+	* glib/glib.symbols: Add it.
+
+2008-05-29  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gnulib/printf-args.c (printf_fetchargs): wint_t is short on
+	Windows, and gcc warns: "wint_t is promoted to int when passed
+	through ... (so you should pass int not wint_t to va_arg)." And
+	indeed g_print("%C", L'a') crashes. So do as gcc says then.
+
+2008-05-28  Michael Natterer  <mitch@imendio.com>
+
+	* configure.in: add G_DISABLE_SINGLE_INCLUDES to CPPFLAGS
+	globally.
+
+	* glib/tests/option-context.c
+	* glib/tests/testing.c
+	* tests/testingbase64.c: don't include <glib/gtestutils.h>
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.17.0 ===
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* README.in: Add a note about G_DISABLE_SINGLE_HEADERS.
+
+	* NEWS: Updates
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/casemap.txt:
+	* tests/casefold.txt: Update for Unicode 5.1
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* Revert the patch for bug 527214 and related changes. GTimer
+	is supposed to work without threads.
+
+2008-05-27  simon.zheng  <simon.zheng@sun.com>
+
+	* configure.in: Fix #533369. Check whether memeber statvfs.f_basetype 
+        available or not.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pcre/*: Update to PCRE 7.7
+
+2008-05-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gchecksum.c: Add Since: tag to g_checksum_reset
+
+	* glib/glib.symbols: Add g_checksum_reset
+
+2008-05-25  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 534137 – Typo in g_spawn_async_with_pipes doc
+
+	* glib/gspawn.c: Fix a typo in the docs, pointed out by Ted Percival.
+
+2008-05-25  Tor Lillqvist  <tml@novell.com>
+
+	Bug 534319 - GLib's .pc files could use Libs.private
+
+	* glib-2.0-uninstalled.pc.in
+	* glib-2.0.pc.in
+	* gmodule-2.0-uninstalled.pc.in
+	* gmodule-2.0.pc.in
+	* gmodule-export-2.0.pc.in
+	* gmodule-no-export-2.0.pc.in: Move ICONV_LIBS and G_MODULE_LIBS
+	to Libs.private.
+
+2008-05-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c (g_file_open_tmp): Small documention addition.
+
+2008-05-22 10:49:37  Tim Janik  <timj@imendio.com>
+
+	* glib/gmacros.h: implement G_STMT_START and G_STMT_END with
+	do{}while(0), which is believed to be widely portable, fixes:
+	Bug 519026 - G_STMT_START/G_STMT_END test a non-existent preprocessor symbol
+
+2008-05-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 501651 – Update glib/libcharset
+
+	* configure.in:
+	* glib/libcharset/Makefile.am:
+	* glib/libcharset/README:
+	* glib/libcharset/codeset.m4:
+	* glib/libcharset/config.charset:
+	* glib/libcharset/glibc21.m4:
+	* glib/libcharset/libcharset-glib.patch:
+	* glib/libcharset/libcharset.h:
+	* glib/libcharset/localcharset.c (_g_locale_get_charset_aliases),
+	(_g_locale_charset_raw):
+	* glib/libcharset/localcharset.h:
+	* glib/libcharset/make-patch.sh:
+	* glib/libcharset/ref-add.sin:
+	* glib/libcharset/ref-del.sin:
+	* glib/libcharset/update.sh:
+	Update libcharset to the one shipped with libiconv-0.12.
+
+2008-05-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 459905 – Bug in wcwidth data
+	Bug 534085 – g_unichar_iswide_cjk() has a totally wrong table
+	* glib/guniprop.c (g_unichar_iswide), (g_unichar_iswide_cjk):
+	Regenrate wide and wide_cjk tables from Unicode 5.1.0 data directly.
+	Not using Markus Kuhn's tables anymore.
+
+2008-05-20 14:31:18  Tim Janik  <timj@imendio.com>
+
+	* reverted recent unapproved changes by Yair Hershkovitz, regarding:
+	Bug 503071 – Application direction changes to right to left even if theres no translation.
+
+2008-05-20  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Don't need memory barriers when using a non-gcc
+	compiler on Windows either.
+
+2008-05-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gdir.c: Include the dirent.h and wdirent.c from
+	../build/win32/dirent directly here when compiling with MSVC and
+	without HAVE_DIRENT_H.
+
+2008-05-19  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc : added gi18n.c
+
+2008-05-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/Makefile.am: #define HELPER_CONSOLE in
+	gspawn-win32-helper-console.c
+
+	* glib/gspawn-win32-helper.c: Compile a main() instead of
+	WinMain() if HELPER_CONSOLE is defined. MSVC insists on a console
+	application having a main().
+
+2008-05-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 527214 – g_timer_elapsed() returns random values.
+
+	* glib/gtimer.c (g_timer_new()):
+	Print warning if g_thread_init() has not been called yet. 
+	Patch by Mathias Hasselmann
+
+2008-05-12  Jeffrey Stedfast  <fejj@novell.com>
+
+	* glib/gchecksum.c (g_checksum_reset): New function to reset the
+	state of a GChecksum.
+	(g_checksum_new): Call g_checksum_reset() instead of duplicating
+	code.
+
+2008-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528667 – Typos in testing module documentation
+
+	* glib/gtestutils.c: Fix typos in the documentation.
+
+2008-05-17  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: Make debugging printout more compact and add
+	more information to it. No changes to actual functionality.
+
+	* glib/gmain.c: Improve debugging printouts. When
+	G_MAIN_POLL_DEBUG is defined, we check for an environment variable
+	of the same name to decide whether to print out debugging
+	information or not. G_MAIN_POLL_DEBUG is always defined on Windows
+	as there is more often a need to debug this stuff there. On Unix
+	the definition has to be uncommented (or done on the compile
+	command line).
+
+2008-05-17  Tor Lillqvist  <tml@novell.com>
+
+	* build: Don't include the "build" module with svn:externals any
+	longer. Instead add the still relevant directories and files from
+	it for real here in GLib.
+
+2008-05-17  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* glib/glib.symbols:
+	* glib/gi18n.h: Added g_disable_setlocale().
+
+	* glib/gi18n.c: Added g_disable_setlocale() API to disable setting
+	the locale in g_i18n_init(). Dont disable translations if textdomain
+	was not set before calling g_i18n_init(). Dont disable translations if
+	the locale is "C".
+
+2008-05-16  Tor Lillqvist  <tml@novell.com>
+
+	* config.h.win32.in: Update to match the configure-produced one.
+
+2008-05-14  Michael Natterer  <mitch@imendio.com>
+
+	* glib/gatomic.c: #include "config.h" before using G_ATOMIC_ARM.
+
+2008-05-13  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* glib/gi18n.c: #include <locale.h> to fix the build.
+
+2008-05-12  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* glib/gi18n.c (g_i18n_init): Coding convention fix. Space between
+	a function name and its opening parenthesis.
+
+2008-05-12  Tor Lillqvist  <tml@novell.com>
+
+	* glib/glib.symbols: Add g_i18n_init.
+
+2008-05-12  Tor Lillqvist  <tml@novell.com>
+
+	Bug 530457 - G_USER_DIRECTORY_DOWNLOAD folder improperly mapped
+
+	* glib/gutils.c (load_user_special_dirs): When running on Vista or
+	later, use SHGetKnownFolderPath() to get the FOLDERID_Downloads
+	folder for G_USER_DIRECTORY_DOWNLOAD, and FOLDERID_Public for
+	G_USER_DIRECTORY_PUBLIC_SHARE.
+
+2008-05-11  Yair Hershkovitz  <yairhr@gmail.com>
+
+	Bug 503071 - Application direction changes to right to left even if
+	theres no translation. 
+
+	* glib/gi18n.c: g_i18n_init() for initializing the glib i18n,
+	checking if a translation is available for the calling app. wrappers for
+	gettext, dgettext and dpgettext to check first if the application
+	should be translated.
+
+	* glib/gi18n.h: symbol declaration for gettext wrappers.
+
+	* glib/gi18n-lib.h: include gi18n.h instead of libintl.h.
+
+	* glib/gstrfuncs.c: moved g_dpgettext() to glib/gi18n.c.
+
+	* glib/gutils.c: use g_dgettext() instead of dgettext().
+
+	* glib/glibintl.h: include gi18n.h.
+
+	* glib.symbols: added gettext wrappers.
+
+	* glib/Makefile.am: added gi18n.c.
+
+2008-05-05  Michael Natterer  <mitch@imendio.com>
+
+	* glib/glib.h: #define __GLIB_H_INSIDE__ around including
+	everything.
+
+	* glib/*.h: check for that define instead of __G_LIB_H__ if
+	G_DISABLE_SINGLE_INCLUDES is defined.
+
+	* glib/gdatasetprivate.h: #include <glib.h> instead of
+	<glib/gdataset.h>
+
+2008-05-02 13:24:13  Tim Janik  <timj@imendio.com>
+
+	* glib/gmain.c: renamed GMainDispatch.dispatching_sources to be more
+	descriptive and distinguishable within the source file.
+
+2008-04-21  Tor Lillqvist  <tml@novell.com>
+
+	Bug 528752 - Win32 build and SSL not working
+
+	This bug report against libsoup points out an issue with the use
+	of bitfields in the GIOChannel struct that should really be taken
+	care of here in GLib.
+
+	* configure.in: Add Autoconf variable GLIB_EXTRA_CFLAGS which will
+	contain the -mms-bitfields flag on Windows.
+	
+	* glib-2.0.pc.in: Add it to Cflags.
+
+2008-04-21  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in
+	* */Makefile.am: More work on enabling static building on
+	Windows. When building statically: Also define
+	GOBJECT_STATIC_COMPILATION in glibconfig.h so that also the
+	variables in gparamspecs.h get declared without any
+	dllimport/dllexport decorations. Don't install .def files which
+	obviously have no meaning for static libraries. Don't create MS
+	import libraries. Don't do any resource object files.
+
+2008-04-18 17:40:58  Tim Janik  <timj@imendio.com>
+
+	* tests/testglib.c: fixed gstdio.h include.
+
+	* tests/Makefile.am: properly list testglib.c SOURCES.
+
+2008-04-17  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/gchecksum.c:
+	(sha_byte_reverse): Use the macro GLib provides for byte-swapping
+	as it can be optimized.
+	
+	(g_checksum_update): Fix a compiler warning.
+
+2008-04-15  Mukund Sivaraman  <muks@mukund.org>
+
+	* gio/gfile.c: Fixed typos in gtk-doc comments.
+
+2008-04-10  Mathias Hasselmann  <mathias@openismus.com>
+
+	Bug 519137 – g_slice_dup macro needs cast for 64-bit platform
+
+	* glib/gslice.h (g_slice_copy): Apply type casts needed
+	  for proper compilation on 64-bit platforms.
+
+2008-04-09  Federico Mena Quintero  <federico@novell.com>
+
+	* glib/gbookmarkfile.c (bookmark_metadata_free): Don't leak
+	the apps_by_name hash table if the applications list is empty.
+
+2008-04-08  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gunicode.h: Add ISO 15924 code comments for new scripts.
+
+2008-04-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 491554 – Update to Unicode 5.1.0
+
+	* glib/gunichartables.h:
+	* glib/gunicode.h:
+	* glib/gunibreak.h:
+	* glib/gmirroringtable.h:
+	* glib/gscripttable.h:
+	* glib/gen-script-table.pl: Update to Unicode 5.1.0. Patch by
+	Behdad Esfahbod
+
+2008-04-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 526619 – make test-report crash
+
+	* glib/gtester.c: Allocate enough space for argv. Patch by
+	 Hiroyuki Ikezoe
+
+2008-04-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.c: Make the fix for bug 448943 work.
+
+2008-04-04  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Make sure we don't build both shared and static at
+	the same time on Windows. Put a #define for
+	GLIB_STATIC_COMPILATION into glibconfig.h in the static case, so
+	that the use of variables from libglib gets the GLIB_VAR macro in
+	gtypes.h automatically correct. This means that a shared and
+	static build of GLib can't be installed in the same prefix on
+	Windows, which sucks a bit. But with variables in the GLib API,
+	there isn't much we can do otherwise. The alternative would be to
+	force the developer who compiles against a statically built GLib
+	to use -DGLIB_STATIC_COMPILATION.
+
+	* glibconfig.h.win32.in: Define GLIB_STATIC_COMPILATION here also,
+	if needed.
+
+2008-04-03  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Don't enforce shared library build only on
+	Windows. It might well make sense to build static libraries in
+	some use cases.
+
+	* glib/gutils.c: Don't compile the DllMain if building libglib
+	statically. Also in that case don't return NULL from
+	_glib_get_installation_directory(), but return the installation
+	directory of the program's .exe file.
+
+2008-04-03  Tor Lillqvist  <tml@novell.com>
+
+	Bug 525972 - UCS-4 not in the new win_iconv implementation
+
+	* glib/win_iconv.c: Add UCS-4. Also add spelling of UCS-2 without
+	the hyphen.
+
+2008-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 448943 – g_timeout_add_seconds() problems
+
+	* glib/gmain.c (g_timeout_set_expiration): Prevent expiration
+	time going negative. Reported by Cody Russell, analyzed by
+	Olivier Crete, patch by Sjoerd Simons.
+
+2008-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 525674 – A typo in gmarkup.c
+
+	* glib/gmarkup.c (g_markup_parse_context_get_element_stack): Fix
+	the docs, reported by Hiroyuki Ikezoe
+
+2008-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 525732 – Error in documentation for g_list_first
+
+	* glib/glist.c (g_list_first): Fix the docs, reported by 
+	Salvatore Iovene
+
+2008-04-02  Tor Lillqvist  <tml@novell.com>
+
+	Bug 524314 - g_convert() on Win32 implicitly converts full width
+	alphanumerics into half width
+	
+	* glib/win_iconv.c: Update from Yukihiro Nakadaira. Use
+	WC_NO_BEST_FIT_CHARS flag for WideCharToMultiByte() unless the
+	//translit flag was suffixed to the codeset name.
+
+	* glib/gconvert.c: Include win_iconv.c earlier so that its
+	definition of WINVER before it includes <windows.h> is used.
+
+2008-03-31  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c (g_poll): Improve fix for #525192 below: Use
+	SleepEx() so that the sleep is alertable. Thanks to John
+	Ehresman.
+
+2008-03-31  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c
+	(g_win32_get_package_installation_directory_of_module): Fix Cygwin
+	breakage. Patch by Lieven van der Heide.
+
+2008-03-31 10:39:17  Tim Janik  <timj@imendio.com>
+
+	* glib/gutils.h: reapply inlining fix from r6333 to fix:
+	Bug 522292 – Gives warnings in glib/gutils.h with GCC in C99 mode
+	and again:
+	Bug 315437 – extern inline -> static inline
+
+2008-03-31  Tor Lillqvist  <tml@novell.com>
+
+	Bug 525192 - 100% CPU if run main loop with no IO sources
+
+	* glib/gmain.c (g_poll) [Win32]: Patch by Neil Roberts.
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtester.c: Don't use ARG_MAX.  (#522335, patch by 
+	Samuel Thibault, adapted by Sebastian Dröge)
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmacros.h: Add macros wrapping the gcc alloc_size 
+	function attribute.  (#523019, Rodrigo Moya)
+
+	* glib/gmem.h: 
+	* glib/gslice.h:
+	* glib/gstrfuncs.h: Use the new attribute where appropriate.
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glibintl.h:
+	* glib/gstrfuncs.c:
+	* glib/gutils.c: Simple fixes to help building GLib on 
+	embedded systems without NLS.  (#524350, Peter Kjellerstedt)
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/ghash.c: Fix the build with -DG_DISABLE_ASSERT.
+	(#525060, Arfrever Frehtes Taifersar Arahesis)
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/gthread.h: Replace occurrances of G_GNUC_PRETTY_FUNCTION
+	by G_STRFUNC.  (#524344, Peter Kjellerstedt)
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtestutils.c: Fix a doc typo. (#524742, Hiroyuki Ikezoe)
+
+2008-03-22  Claudio Saavedra  <csaavedra@gnome.org>
+
+	Bug 523877 – gbookmarkfile: avoid using g_string_append_printf() and
+	other optimizations
+
+	* glib/gbookmarkfile.c: (bookmark_metadata_dump),
+	(bookmark_item_dump), (g_bookmark_file_dump), (expand_exec_line):
+	Replace all calls to g_string_append_printf with g_strconcat () or
+	g_string_append () where appropriate, to reduce the file creation time.
+	Also, use g_string_sized_new () with an appropriate buffer size instead
+	of g_string_new (NULL), to reduce time spent in memory reallocation.
+	(#523877, Claudio Saavedra, Emmanuele Bassi)
+
+2008-03-22  Emmanuele Bassi  <ebassi@gnome.org>
+
+	Bug 518160 - replace two g_strdup_printf calls in GBookmarkFile
+
+	* glib/gbookmarkfile.c (is_element_full): Compare the fragments
+	instead of building two strings; this avoids two g_strdup_printf()
+	per namespaced element enountered. (#518160, Felix Riemann)
+
+2008-03-20  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.in:
+	Final fixes for struct statfs.f_fstypename checks (OpenBSD). (#521045)
+	Patch from ephraim_owns@hotmail.com
+
+2008-03-19  Tor Lillqvist  <tml@novell.com>
+
+	Bug 523298 - win_iconv can't convert from UTF-8 to GB18030 (or vice versa)
+
+	* glib/win_iconv.c: Fixes for code page 54936 (GB18030)
+	(mbtowc_flags): New function. Check if a code page is one of those
+	for which the dwFlags parameter to MultiByteToWideChar() must be
+	zero. Return 0 or MB_ERR_INVALID_CHARS.
+	(mbcs_mblen): New function for multi-byte (more than two bytes for
+	some characters) code pages. Only handles 54936 for now.
+	(make_csconv): Use it for 54936.
+	(kernel_mbtowc): Use mbtowc_flags().
+
+2008-03-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Bug 522292 - Gives warnings in glib/gutils.h with GCC in C99 mode
+
+	* glib/gutils.h: Use "__attribute__ ((__gnu_inline__))" for inlining
+	if either __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE__ are defined. In
+	gcc version prior to 4.3 no correct C99-inline was implemented which
+	has semantic differences to GNU inline.
+
+2008-03-16  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Don't bother defining Autoconf variables for
+	glib.def, gmodule.def, gobject.def and gthread.def when this can
+	be handled easily in */Makefile.am which are the only files that
+	use them. Remove also TESTGMODULE_EXP which isn't used at all.
+
+	* glib/Makefile.am: Corrsponding change.
+	
+2008-03-14  Michael Natterer  <mitch@imendio.com>
+
+	* glib/*.h: make it possible to disable single-file includes by
+	defining G_DISABLE_SINGLE_INCLUDES when building against GLib.
+	Approved by Tim Janik.
+
+	* glib/glib.h: include <glib/gslice.h>.
+
+	* glib/gi18n.h
+	* glib/gi18n-lib.h
+	* glib/gprintf.h: include <glib.h> so the above works when these
+	files are included without including <glib.h> first.
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+        * configure.in:
+	Add required includes for f_fstypename member check.
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+        * configure.in:
+	Added checks for FEN (Solaris  File Event Notification)
+
+2008-03-13  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: Add lib/gio-2.0.lib and lib/gio-2.0.def.
+
+2008-03-12  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Expand gio/win32/Makefile.
+
+2008-03-12  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version to 2.17.0
+
+	* ChangeLog.pre-2-16: rotate ChangeLog
+	
+	* === branch for 2.16 ===
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
new file mode 100644
index 0000000..f91ac7e
--- /dev/null
+++ b/ChangeLog.pre-2-2
@@ -0,0 +1,1502 @@
+Fri Dec 20 10:45:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.2.0 ===
+
+	* INSTALL.in: --enable-included-printf, not --enable-trio.
+	(Matthias Clasen)
+
+Fri Dec 20 09:52:15 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* INSTALL.in: Document --enable-trio, --disable-mempools,
+	--enable-debug. Include docs on cross compilation.
+
+	* NEWS: Update.
+
+	* configure.in: Version 2.2.0, interface age 0.
+
+Fri Dec 20 09:37:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gthread/gthread-impl.c (g_thread_init): Call g_main_thread_init()
+	after setting g_threads_got_initialized. (#101624, 
+	Alceste Scalas, Sebastian Wilhelmi)
+
+Wed Dec 18 16:19:08 2002  Manish Singh  <yosh@gimp.org>
+
+	* glib/gtypes.h: new endian asm for ia64 and x86_64, general
+	reorg and clean up. New implementation of GUINT16_SWAP_LE_BE_CONSTANT()
+	that should optimize better. (#101318)
+
+2002-12-17  Tor Lillqvist  <tml@iki.fi>
+
+	Improvement based on suggestion by Thorsten Maerz:
+
+	* glib/giowin32.c (struct _GIOWin32Channel): Don't need thread_handle.
+
+	(create_thread): We can close thread handle right away, it isn't
+	used for anything.
+
+	(read_thread, select_thread): Thus, don't close it here.
+
+	Fix #57690, partial fix for #57689:
+	
+	* glib/giowin32.c (g_io_win32_set_flags): Don't set the GError,
+	instead call g_warning().
+
+	(g_io_win32_fd_get_flags_internal): New function, sets the
+	is_readable, is_writeable and is_seekable flags based on the
+	actual access modes of the underlying Win32 HANDLE, by trying
+	Win32 ReadFile() and WriteFile() of zero bytes, and
+	PeekNamedPipe(). Should work for disk files and pipes. For devices
+	(consoles) unfortunately not.
+
+	(g_io_win32_fd_get_flags): Don't set the
+	G_IO_FLAG_IS_{READ,WRITE}ABLE flags, g_io_channel_get_flags()
+	already does. Call g_io_win32_fd_get_flags_internal() to set the
+	is_* flags.
+
+	(g_io_win32_msg_get_flags, g_io_win32_sock_get_flags): Splice the
+	generic g_io_win32_get_flags() into these specific functions, as
+	they need to do different things. Not implemented yet, though.
+
+	(g_io_channel_win32_new_fd_internal): New function, to avoid
+	duplicate fstat() calls. Most code from g_io_channel_win32_new_fd() 
+	moved here. Call g_io_win32_fd_get_flags_internal() to set the
+	is_* flags.
+
+	(g_io_channel_win32_new_fd, g_io_channel_unix_new): Call
+	g_io_channel_win32_new_fd_internal().
+
+	(g_io_win32_no_seek): Remove. Don't set is_seekable for those
+	channel types.
+
+Mon Dec 16 17:31:50 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.1.5 ===
+
+	* configure.in: Version 2.1.5, interface age 2.
+
+	* NEWS: Updated.
+
+Mon Dec 16 14:58:33 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Add a hack to mostly deal with
+	problems in support of -pthread and -lpthread;
+	pass -lpthread (for linux) or -Wc,-pthread (for
+	other platforms) to libtool when linking libgthread. 
+	(#100697)
+
+2002-12-16  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c (do_spawn): Fix potential heap
+	corruption. Sometimes called g_free() on string literal.
+
+Sun Dec 15 19:51:58 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: AC_SUBST() DATADIRNAME, not 
+	DATADIR.
+
+Sun Dec 15 19:22:58 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: Restore a missing AC_SUBST()
+	for DATADIRNAME. (Found by Kjartan Maraas)
+
+Sun Dec 15 11:24:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: Actually set INTLLIBS
+	when needed. (Reported by Tor Lillqvist)
+
+2002-12-15  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_rand_init.
+
+	* config.h.win32.in: Slight update to match what is currently
+	produced by configure.
+
+Sat Dec 14 21:24:04 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gutils.c (g_get_any_init): HP-UX 10 xshares the
+	same non-posix getpwuid_r signature as AIX. 
+	(#100756, Kai Poitschke)
+
+Sat Dec 14 21:10:57 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gthread.h: Mark the contents of the strucures
+	in this file /*< private >*/
+
+	* glib/gthread.[ch]: Rename the 'write' field of the
+	structure to 'have_writer' to avoid any possible
+	conflict with system headers. (#90549, Morten Welinder)
+
+Sat Dec 14 20:11:41 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/libcharset/{localcharset.[ch] libcharset-glib.patch}
+	glib/gutf8.c: Break _g_locale_charset() into two pieces 
+	- a fast "raw" piece, and a slow "unalias pieces". 
+	Always call the "raw" piece, and call the unalias bit
+	if it changes. Use a per-thread cache. (#79529)
+
+2002-12-15  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Set TRIO_LIBS when building with trio.
+
+	* glib-2.0.pc.in (Libs): Add @TRIO_LIBS@.
+
+	* glib/trio/Makefile.am (libtrio_la_LIBADD): Use @TRIO_LIBS@.
+
+	* glib/trio/glibtrio.h: New file, redefining all trio symbols to
+	fall into the _G/_g_ private glib namespace.
+
+	* glib/trio/Makefile.am (libtrio_la_SOURCES): Add glibtrio.h
+
+	* glib/trio/trionan.c: 
+	* glib/trio/triostr.c: 
+	* glib/trio/trio.c: Include glibtrio.h
+
+	* glib/gprintfint.h: 
+	* glib/trio/trionan.c: 
+	* glib/trio/triostr.c: 
+	* glib/trio/trio.c: Include glibtrio.h
+
+Fri Dec 13 17:10:21 2002  Manish Singh  <yosh@gimp.org>
+
+	* glib/gscanner.c (g_scanner_unexp_token): Fix typo. Missing '%'
+	in my last commit.
+
+Thu Dec 12 23:08:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+	Fixes from Johannes Stezenbach
+
+	* configure.in: When adding extra libraries to $LIBS for
+	tests, always put them at the front, since that's how
+	they'll be used in the actual Makefiles.
+
+	* configure.in: Add a couple of missing ','s in AC_LINK_IFELSE()
+
+	* m4macros/glib-gettext.m4: Remove a stray setting of $LIBS.
+
+Thu Dec 12 20:46:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Allow not setting glib_cv_long_long_format
+	when cross-compiling since we assume other things that
+	will cause us to pull in Trio anyways.
+
+	* configure.in: long_long_format is always ll for trio.
+	
+	* configure.in: Error out if --disable-trio is specified
+	but the C library doesn't have the necessary features.
+
+2002-12-13  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/trio/Makefile.am (libtrio_la_LIBADD): Add -lm for pow().
+
+	* tests/string-test.c: Add a test for positional parameters in
+	g_snprintf().
+
+Thu Dec 12 14:58:55 2002  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: pull in trio if host printf doesn't have a known
+	way of printing 64-bit ints.
+
+	* glib/gmacros.h: remove extra whitespace at the end
+
+	* glib/gscanner.c (g_scanner_unexp_token): use G_GUINT64_FORMAT
+	instead of hardcoding "%llu"
+
+	* tests/testglib.c: remove obsolete conditionals using G_HAVE_GINT64,
+	we always have it now.
+
+	* tests/type-test.c: same as above, and for G_G[U]INT64_FORMAT as
+	well.
+
+Thu Dec 12 13:52:58 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: AC_PREREQ(2.53) here; convinces
+	Debian's wrappers to use the right autoconf for atk, etc.
+	(Reported by Jody Goldberg)
+
+2002-12-11  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gtimer.c (g_timer_elapsed): Fix off-by-one error. (#100853)
+
+	* glib/gfileutils.c (g_file_test): Bypass extra test for root on
+	Win32.
+
+	* glib/glib.def: Add g_{get,set}_application_name.
+
+Wed Dec 11 17:53:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.1.4 ===
+
+	* NEWS: Updates.
+
+Wed Dec 11 17:49:15 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: Unset 
+	ac_cv_func_bind_textdomain_codeset before calling
+	AC_CHECK_FUNCS(bind_textdomain_codeset) again.
+
+	* configure.in: Remove duplicate call to
+	AC_CHECK_FUNCS(bind_textdomain_codeset)
+
+2002-12-11  Pauli Virtanen <pauli.virtanen@hut.fi>
+
+	* configure.in: Added "fi" to ALL_LINGUAS.
+
+Wed Dec 11 17:00:20 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* acglib.m4 (ac_compile): Add GLIB_ASSERT_SET() as
+	a helper for adding "must be set when cross-compiling"
+	errors.
+
+	* configure.in: For all cached variables without defaults,
+	error out if they aren't set.
+
+Wed Dec 11 15:52:01 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Also assume AC_LINK_IFELSE() is
+	OK when cross-compiling for the libs checks, and for
+	the sched_get_priority_min() check.
+
+	* configure.in: Add cached value glib_cv_use_pid_surrogate.
+	
+Wed Dec 11 15:10:25 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Factor out repeated thread test into
+	a m4_define(); when cross-compiling, assume that 
+	AC_LINK_IFELSE() is good enough for thinking that
+	-pthread[s] is OK. (More of #58786)
+
+	* m4macros/glib-gettext.m4: Fix typo. (Manish Singh)
+
+Wed Dec 11 14:28:50 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Version 2.1.4, interface age 1.
+
+	* m4macros/glib-gettext.m4: Major rewrite; remove leftovers
+	from building intl/, prefer libintl if both libc and libintl 
+	have dgettext and libintl also has bind_textdomain_codeset().
+	(#70627)
+
+	* configure.in acinclude.m4: Use an include to avoid having 
+	to duplicate the gettext macros between glib-gettext.m4
+	and acinclude.m4.
+
+	* m4macros/glib-gettext.m4: Do some tricks so that configure.in 
+	can use macros under hidden names, but aclocal will still 
+	find them when installed.
+
+	* m4macros/glib-gettext.m4: Add AM_GLIB_DEFINE_LOCALEDIR
+	to encapsulate install location of catalog files.
+
+	* m4macros/glib-gettext.m4 (AM_GLIB_DEFINE_LOCALEDIR):
+	Fix bug where if --prefix wasn't set on the configure line,
+	GLib would look for translations in NONE/share/locale.
+
+Wed Dec 11 11:11:44 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/grand.c: Include string.h, supress a warning.
+
+2002-12-10  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/grand.c (g_rand_int_range): Improve generation of
+	pseudo-random integers. (#99720, Morten Welinder <terra@diku.dk>)
+
+	* README.in, docs/reference/glib/running.sgml,
+	docs/reference/glib/tmpl/random_numbers.sgml,
+	docs/reference/glib/changes.sgml: Added notes about the new
+	algorithm.
+
+2002-12-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: use 0 instead of $defattr, as it isn't defined
+	anymore on platforms using -pthread and linux, where this is used,
+	only uses 0 anyway and not "pthread_attr_default".
+
+Sun Dec  8 23:36:12 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gfileutils.c (g_file_test): Guard against
+	the POSIX allowed behavior where access (file, X_OK)
+	succeeds for uid==0 when no executable bits are set.
+
+	* glib/gfileutils.c (g_file_test): Add doc notes
+	about the possibility of race conditions, and the
+	fact that EXISTS and IS_EXECUTABLE give results
+	for the real uid not the effective user ID.
+	(#81854, Morten Welinder.)
+
+Fri Dec  6 14:34:42 2002  Owen Taylor  <otaylor@redhat.com>
+
+	Avoid literal UTF-8. (Allow it to build with 
+	IRIX cc, #72757, Tomas Ogren)
+
+	* tests/patterntest.c (main): Convert literal 
+	iso-8859-1 high bit characters in tests to
+	string escapes.
+
+	* glib/gunichartable.h glib/gen-unicode-tables.pl:
+	Use hex \xMN escapes rather than literal UTF-8
+	for casefold tables.
+
+	* configure.in: AC_PREREQ(2.53). needed for recent
+	GLIB_SIZEOF() changes.
+
+Fri Dec  6 12:40:00 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/libcharset/Makefile.am (EXTRA_DIST): Don't
+	distribute ref-add/del.sed., fixing problem with
+	srcdir != destdir. (#99813, Phuc LeHong)
+
+Fri Dec  6 12:31:30 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* configure.in: chmod 0755 scripts in AC_OUTPUT(), since 
+ 	install -c won't necessarily do that. (#74376, Martin
+	Gansser, Joshua Weage)
+ 
+Thu Dec  5 16:05:55 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Use AC_LINK_IFELSE(), not AC_TRY_RUN()
+	for va_copy(), __va_copy() checks.
+
+	* configure.in: When there is a reasonable default,
+	provide that in the 3rd argument of AC_TRY_RUN(),
+	instead of just leaving the 3rd argument empty.
+
+2002-12-05  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strncasecmp): Break long deprecation
+	info into two paragraphs.
+
+Thu Dec  5 15:43:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Fix multiple problems with the programs
+	in the argument of AC_TRY_RUN() having preprocessor
+	defines not in the first column.
+
+Thu Dec  5 15:24:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+	Start of fixes for cross-compilation. Based on
+	patches from Dimi Shahbaz, Dan Kegel, Johannes Stezenbach,
+	Amy Lin. (#58786)
+
+	* configure.in: Don't run the Digital-Unix 4 -std1 check
+	when cross_compiling.
+
+	* configure.in: Use AC_TRY_COMPILE() rather than 
+	AC_TRY_RUN() for inline checks. (Daniel Egger)
+
+	* configure.in: use AC_CHECK_SIZEOF rather than
+	GLIB_SIZEOF for size_t. Remove unused checks for
+	size of ptrdiff_t/intmax_t.
+
+	* acglib.m4: Resync GLIB_SIZEOF of to the current
+	AC_CHECK_SIZEOF, which handles cross-compilation.
+
+	* acglib.m4: Remove no longer needed GLIB_SYSDEFS(),
+	add GLIB_CHECK_VALUE() as a wrapper around the
+	amazing _AC_COMPUTE_INT() autoconf 2.5x internal.
+
+	* configure.in: Redo the POLL* value checks in a
+	cross-compilation friendly way.
+
+Thu Dec  5 15:28:37 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gtimer.c: Include glibconfig.h early so
+	that we include <windows.h> when needed.
+
+	* glib/gstrfuncs.c: Fix typo.
+
+Tue Dec  3 21:10:28 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Add 3rd argument to remaining AC_DEFINES(),
+	so we can get rid of acconfig.h. (#76334, Daniel Egger)
+
+	* acconfig.h: Removed.
+
+Tue Dec  3 20:22:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/*.c: Patch from Sven Neumann to make the
+	include order consistent. (#71704)
+
+2002-12-03  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Check that strlcpy behaves as per the OpenBSD 
+	man page before wrapping it.  (#53933)
+
+2002-12-03  Frederic Crozat  <fcrozat@mandrakesoft.com>
+
+	* glib/gunicollate.c: (g_utf8_collate_key):
+	Fix typo from previous commit
+
+Tue Dec  3 01:05:00 2002  James M. Cape  <jcape@ignore-your.tv>
+
+	* glib/gunicollate.c (g_utf8_collate, g_utf8_collate_key):
+	Check for NULL before doing anything.
+
+Mon Dec  2 16:34:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.1.3 ===
+
+	* NEWS: Updated.
+
+	[ Unmerged change from stable from May 16 ]
+
+	* autogen.sh: Remove check for GNU gettext, since it
+	was causing problems for Solaris CVS builds.
+	(#81885, Hidetoshi Tajima.)
+
+Tue Nov 26 09:51:43 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_strchomp): Avoid non-ANSI pointer
+	comparison. (#54344, Morten Welinder)
+
+	* tests/strfunc-test.c (main): Add tests for strchomp().
+
+2002-11-30  Ole Laursen  <olau@hardworking.dk>
+
+	* configure.in: Added "da" to ALL_LINGUAS.
+
+2002-11-29  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_ascii_strtoull): It is a 2.2 addition.
+
+	* glib/gtimer.c (g_time_val_add): Adjust to changed parameter names.
+
+	* glib/gutils.c (g_get_application_name): Mark as 2.2. addition.
+
+	* glib/gstrfuncs.c (g_ascii_strtoull): Mark as 2.0.7 addition. 
+
+2002-11-28  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c:
+	* glib/gtree.c: 
+	* glib/gstring.c: 
+	* glib/gstrfuncs.c: 
+	* glib/giochannel.c: Move some docs inline, and add deprecation
+	information. To see the list of affected functions, grep for
+	"Deprecated:". 
+
+	* configure.in: Fix the definitions around printf: either we use
+	system printf in which case HAVE_VASPRINTF, HAVE_C99_VSNPRINTF and
+	HAVE_UNIX98_PRINTF have already been determined by earlier tests,
+	or we use the included printf, in which case we know that these
+	three can be defined as 1.  (#99826)
+
+	* glib/gutf8.c (g_utf8_strreverse): 
+	* glib/gstrfuncs.c (g_str_has_suffix): 
+	(g_str_has_prefix): 
+	* glib/gprintf.c (g_printf): 
+	(g_fprintf): 
+	(g_sprintf): 
+	(g_vprintf): 
+	(g_vfprintf): 
+	(g_vsprintf): 
+	* glib/gmarkup.c (g_markup_parse_context_get_element): 
+	Mark as 2.2 API additions.
+
+	* configure.in: Fix the gtk-doc version check.
+
+2002-11-27  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmessages.h: Use G_LIKELY without surrounding parentheses 
+	in g_assert() and g_return_[val]_if_fail() so that we always trigger
+	the gcc warning about "assignment used as truth value".
+
+	* glib/gmacros.h: Always put parentheses in G_LIKELY and G_UNLIKELY.
+
+2002-11-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmessages.h: Only use G_LIKELY in g_assert() and 
+	g_return_[val]_if_fail() if it is actually doing something.
+
+2002-11-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/grand.c, gthread/gthread-impl.c, tests/rand-test.c: 
+	Changed the seeding algorithm. Old behaviour can be achived by
+	setting envvar G_RANDOM_VERSION to "2.0". (#99262)
+
+	* docs/reference/glib/glib-docs.sgml,
+	docs/reference/glib/Makefile.am: Renamed
+	docs/reference/glib/changes-2.0.sgml to
+	docs/reference/glib/changes.sgml and added section for changes
+	from 2.0 to 2.2 (Also corrected 1.0 to 1.2).
+
+	* README.in, docs/reference/glib/running.sgml,
+	docs/reference/glib/tmpl/random_numbers.sgml,
+	docs/reference/glib/changes.sgml: Added notes about the new
+	seeding algorithm.
+
+	* configure.in: Make CPPFLAGS, not CFLAGS, include
+	G_THREAD_CFLAGS. CFLAGS is used while linking too and thus GLib
+	programs would link to the threads library on some platforms. Also
+	fixed a bug manifesting through this change. (#77981)
+
+2002-11-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmacros.h: Fix the non-gcc-3.x definitions of G_LIKELY 
+	and G_UNLIKELY.  (Reported by Dan Mills)
+
+2002-11-25  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gfileutils.c (g_build_path): 
+	(g_build_filename): Document that the varargs must be 
+	NULL-terminated. (#99510)
+
+	* glib/gmessages.h (g_assert): 
+	(g_return_if_fail): 
+	(g_return_val_if_fail): Remove the (no longer effective) empty
+	if-branch.
+
+	* glib/gmacros.h: Change the definition of G_LIKELY, so that
+	g_return_if_fail() and friends still trigger a gcc warning if
+	the expr is an assignment. 
+
+2002-11-23  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Generate docs/reference/*/version.xml.
+
+	* glib/gdir.h: Add Copyright notice.
+
+2002-11-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Fixed typo: PTHREAD_PRIO_MIN ->
+	PTHREAD_PRIO_MAX. (Laurent Vivier, #99293)
+
+Fri Nov 22 09:39:09 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmacros.h: Remove broken G_HIDDEN_SYMBOL
+	definition which wasn't supposed to be committed
+	at all.
+
+Thu Nov 21 16:19:21 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/ghash.c: Patch from Morten Welinder to 
+	make ghash.c properly obey DISABLE_MEM_POOLS. (#96600)
+
+Thu Nov 21 14:09:44 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmacros.h: Add G_GNUC_DEPRECATED. (Tom Tromey,
+	#87969)
+
+2002-11-21  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Update to match what is currently produced by
+	autotools.
+
+	* configure.in: Remove superfluous spaces on two shell variable
+	assignment lines. Don't define HAVE_GOOD_PRINTF as 0 if we don't
+	have a good printf, it is tested with #ifdef.
+
+	* glib/glib.def: Add new functions.
+
+	* glib/Makefile.am: If !HAVE_GOOD_PRINTF, add libtrio.la to LIBADD
+	and DEPENDENCIES.
+
+	* glib/glib.rc.in
+	* gmodule/gmodule.rc.in
+	* gobject/gobject.rc.in
+	* gthread/gthread.rc.in
+	* {glib,gmodule,gobject,gthread}/makefile.{mingw,msc}.in:
+	Hardcode 2.0 in the names, as that is what Makefile.am does.
+
+2002-11-21  Matthias Clasen  <maclas@gmx.de>
+
+	Include a printf implementation supporting C99 snprintf and SUS
+	positional parameters:  (#79488)
+	
+	* glib/gstrfuncs.c:
+	* glib/gspawn-win32.c:
+	* glib/gscanner.c:
+	* glib/gconvert.c: 
+	* glib/gbacktrace.c: Use _g_printf wrappers. 
+
+	* glib/gutils.c (g_vsnprintf): Simplify, since we can assume C99
+	snprintf semantics now.
+
+	* glib/gmessages.c (printf_string_upper_bound): No longer needed,
+	since we can assume C99 snprintf semantics now.
+	(g_logv): Simplify.
+	
+	* acinclude.m4 (AC_FUNC_PRINTF_UNIX98): New macro to check wether
+	printf supports SUS positional parameters.
+
+	* configure.in: New option --enable-included-printf to force
+	compilation of trio; otherwise trio is compiled if the system
+	printf misses either C99 snprintf semantics of SUS positional 
+	parameters.
+
+	* glib/Makefile.am (SUBDIRS): Conditionally compile trio.
+	(libglib_2_0_la_SOURCES): Add gprintf.c and gprintfint.h.
+	(glibsubinclude_HEADERS): Add gprintf.h.
+
+	* glib/gprintfint.h: New private wrapping either system printf
+	or trio printf variants in _g_printf wrappers for use inside glib.
+
+	* glib/gprintf.h: New public header declaring g_printf variants.
+	* glib/gprintf.c: Corresponding implementations.
+
+	* glib/trio/*: New directory, containing the trio-1.9 sources. 
+
+2002-11-20  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmessages.h (g_return_if_fail): 
+	(g_return_val_if_fail): Use G_LIKELY.  (#69022)
+
+	* glib/gmacros.h (G_LIKELY): 
+	(G_UNLIKELY): New macros for hinting the compiler about the
+	expected result of expressions. For gcc 3.x, define these
+	using __builtin_expect.  (#69022)
+
+Tue Nov 19 14:38:18 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_ascii_strtoull): Fix 
+	strtull/strtoull type in docs (#99012, Morten
+	Welinder.) Add copyright information for code
+	taken from GNU libc.
+
+2002-11-18  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c (do_spawn_with_pipes): Do handle
+	G_SPAWN_DO_NOT_REAP_CHILD after all, similarily as on Unix. If the
+	flag is not set, don't call DuplicateHandle() on the handle
+	returned by the helper process, and set the "child pid" returned
+	to the called to zero. Close the handle to the helper process in
+	all cases.
+
+	* glib/gspawn.c (g_spawn_async_with_pipes): Document Windows
+	behaviour of G_SPAWN_DO_NOT_REAP_CHILD.
+
+2002-11-18  Tor Lillqvist  <tml@iki.fi>
+
+	[Win32] Fix the asynchronous g_spawn* to return the process handle
+	of the started program properly. (Note: not the process id. The
+	spawn*() functions in the C runtime return the created process's
+	handle. There doesn't seem to be any way to get the process id of
+	a child process if you have the handle. But then, the process
+	handle usually is more useful anyway.)
+
+	* glib/gspawn-win32-helper.c (WinMain): If the spawning of the
+	child process succeeded, and if asynchronous spawn (P_NOWAIT),
+	write the result handle up to the parent process, waiting to read
+	it in do_spawn_with_pipes().
+
+	* glib/gspawn-win32.c (do_spawn): Use return value from spawning
+	the helper. If it is -1 the helper wasn't found or couldn't be run
+	for some reason. Otherwise it is the helper's process handle.
+
+	(g_spawn_async_with_pipes): Pass the child_pid parameter on to
+	do_spawn_with_pipes().
+
+	(do_spawn_with_pipes): Take also a child_pid parameter. If
+	do_spawn() returned -1, fail immediately. Otherwise make the
+	handle passed to us by the helper process into a handle valid in
+	this process by calling DuplicateHandle().
+
+2002-11-17  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c (g_spawn_async_with_pipes): Ignore the
+	G_SPAWN_DO_NOT_REAP_CHILD flag, can't be meaninfully implemented
+	on Windows, at least not now. Always pass dont_wait as TRUE to
+	do_spawn_with_pipes(). The semantics of the dont_wait parameter is
+	very different from the semantics of the intermediate_child
+	parameter to fork_exec_with_pipes() in the Unix version. This
+	fixes a serious bug, g_spawn_async() in fact behaved
+	synchronously.
+
+	(do_spawn_with_pipes, do_spawn): Rename from
+	fork_exec_with_pipes() and do_exec(), those names were from the
+	Unix bersion, and misleading.
+
+	(close_and_invalidate): Don't try to close invalid fds.
+
+	* glib/gspawn.c (g_spawn_async_with_pipes): Add warning about
+	Windows behaviour. There is no fork(), so the child_setup()
+	function is in fact called in the parent.
+	
+	* glib/gspawn-win32-helper.c (WinMain): Insert spaces in argv
+	debugging output.
+
+	* tests/spawn-test-win32-gui.c: New file. Test program to be
+	linked as a GUI application. Behaves differently depending on how
+	invoked (by spawn-test).
+
+	* tests/spawn-test.c (run_tests): On Win32, run the
+	spawn-test-win32-gui program, too, in several ways, synchronously
+	and asynchronously.
+
+	* tests/Makefile.am: Corresponding change.
+
+Fri Nov  8 19:44:20 2002  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* docs/reference/glib/tmpl/arrays.sgml:
+	* docs/reference/glib/tmpl/arrays_byte.sgml:
+	* docs/reference/glib/tmpl/arrays_pointer.sgml:
+	* docs/reference/glib/tmpl/date.sgml:
+	* docs/reference/glib/tmpl/linked_lists_double.sgml:
+	* docs/reference/glib/tmpl/linked_lists_single.sgml:
+	* docs/reference/glib/tmpl/main.sgml:
+	* docs/reference/glib/tmpl/queue.sgml:
+	* docs/reference/glib/tmpl/random_numbers.sgml:
+	* docs/reference/glib/tmpl/relations.sgml:
+	* docs/reference/glib/tmpl/scanner.sgml:
+	* docs/reference/gobject/tmpl/gtype.sgml:
+	* docs/reference/gobject/tmpl/value_arrays.sgml glib/garray.h:
+	* glib/gdate.h glib/giochannel.h glib/glist.h glib/gmain.c:
+	* glib/gmain.h glib/gqueue.c glib/gqueue.h glib/grand.c glib/grand.h:
+	* glib/grel.h glib/gslist.h glib/gtimer.h gobject/gvaluearray.h:
+
+	Trivial s/foo/foo_/ fixes to make <glib.h> includable with
+	-Wshadow without warnings (#91680)
+
+Thu Nov  7 19:32:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gutils.[ch] (g_set/get_application_name): 
+	Patch from Havoc Pennington to add functions for 
+	setting and getting a human readable application
+	name.
+
+	* configure.in: Up to version 2.1.3, since we'll
+	need to depend on last addition for GTK+.
+
+2002-11-06  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_main_thread_init.
+
+2002-11-06  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_str_has_suffix): 
+	(g_str_has_prefix): Minor doc markup fix.
+
+Mon Nov  4 10:45:48 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Add -DG_DISABLE_CAST_CHECKS for 
+	everything but --enable-debug.
+
+	* configure.in: Require pkg-config 0.14. (#97553)
+
+Mon Nov  4 14:41:48 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* glib/gbsearcharray.c: Include config.h
+ 	so DISABLE_MEMPOOLS actually has an effect.
+ 	(#96437, Morten Welinder)
+ 
+ 	* tests/uri-test.c: Include <config.h>
+
+2002-11-03  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* configure.in: Added Belarusian to ALL_LINGUAS
+
+2002-11-02  Daniel Elstner  <daniel.elstner@gmx.net>
+
+	* glib/giochannel.c (g_io_channel_write_chars): Fix left_len
+	calculation in the from UTF-8 to UTF-8 case: left_len should
+	be the number of bytes left in the input buffer rather than
+	channel->write_buf. (#96373)
+
+2002-10-27  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in (G_MODULE_LDFLAGS): Don't set on Win32, only causes
+	trouble.
+	
+	* glib/gmain.c (g_poll): Fix for bug reported by Herman Bloggs
+	(http://mail.gnome.org/archives/gtk-devel-list/2002-October/msg00101.html)
+	and others. We waited for events only for GPollFDs whose events
+	field had G_IO_IN set. We need to wait also for events for
+	GPollFDs that have just G_IO_OUT set. Non-blocking sockets in the
+	process of being connect()ed are one such case. Also silence a
+	couple of gcc warnings.
+
+Fri Oct 18 13:41:30 2002  Manish Singh  <yosh@gimp.org>
+
+	* glib/giochannel.c (g_io_channel_read_line_backend): avoid
+	creating negative values out of unsigned values using MAX,
+	check to see if the result would be positive before doing
+	the calculation.
+
+Tue Oct 15 15:28:47 2002  Manish Singh  <yosh@gimp.org>
+
+	* tests/iochannel-test.c: use gsize instead of int where appropriate
+        (64-bit cleanliness fix). Removed leftover line_term cruft.
+
+Tue Oct 15 15:07:45 2002  Manish Singh  <yosh@gimp.org>
+
+	* gmodule/Makefile.am gobject/Makefile.am gthread/Makefile.am:
+	add -DG_DISABLED_DEPRECATED
+
+	* tests/gio-test.c tests/mainloop-test.c tests/string-test.c
+	tests/testglib.c test/tree-test.c tests/unicode-collate.c
+	tests/unicode-normalize.c: Deprecation cleanup
+
+Mon Oct 14 15:51:05 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gdate.c (g_date_fill_parse_tokens): Fix a memory
+	leak. (#94550, Sebastian Rittau)
+
+Mon Oct 14 15:36:11 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gcompletion.[ch] (g_completion_complete): Make
+	prefix argument const. (#91662, Gustavo Carneiro) 
+
+Mon Oct 14 15:32:14 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* tests/mainloop-test.c (adder_response): Fix a minor memory
+ 	leak.
+ 
+Sat Oct 12 21:30:41 2002  Tim Janik  <timj@gtk.org>
+
+	* merged up from glib-2-0:
+
+        * glib/gstrfuncs.c (g_ascii_strtod): fix comment.
+        (g_ascii_strtoull): new function, acting like strtoull(3) in the C
+        locale.
+
+        * glib/gscanner.[hc]: fix 32bit issues with integer parsing and
+        support storing 64bit values in GTokenValue by
+        using g_ascii_strtoull().
+
+Sat Oct 12 12:34:22 2002  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* glib/gtree.c (g_tree_search), glib/gspawn.c
+	(g_spawn_async_with_pipes): 
+
+	Documentation fixes: #71778, Owen Taylor; #85095, Bill Janssen,
+	Owen Taylor. 
+
+Thu Oct 10 23:27:02 2002  Tim Janik  <timj@gtk.org>
+
+        * glib/gscanner.c (g_scanner_msg_handler): if input_name is NULL,
+        print out "<memory>" instead of completely skipping input specification
+        and thusly loosing error line information.
+
+Sun Sep 29 12:15:44 2002  Manish Singh  <yosh@gimp.org>
+
+	* tests/mainloop-test.c: use gsize instead of int where appropriate
+	(64-bit cleanliness fix)
+
+2002-09-29  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Instead of forcing -fnative-struct into CFLAGS
+	when using gcc for Win32, check for gcc version 3.x which uses
+	-mms-bitfields instead. Also check if either of these switches is
+	actually available at all, and warn if not. Thanks to Soren
+	Andersen for the inspiration.
+
+	* HACKING: Say we require autoconf 2.52 as that is what
+	configure.in does.
+
+2002-09-23  Arvind Samptur <arvind.samptur@wipro.com>
+	* glib/gspawn.c (fork_exec_with_pipes) : when the child fails
+	we need to reap it to avoid a zombie. This would
+	happen in case of g_spawn_sync. Fixes #92658
+
+2002-09-20  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gscanner.c (g_scanner_msg_handler): Don't print
+	scanner->input_name when it is NULL.  (#93752)
+
+2002-09-06  Havoc Pennington  <hp@redhat.com>
+
+	* autogen.sh: automake 1.4
+
+2002-09-01  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* docs/reference/glib/tmpl/datalist.sgml, glib/gmain.c:
+
+	Documentation fixes: (#75255, Martin Schulze; #76104, Daryll Strauss)
+
+2002-08-26  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in (G_LIBS_EXTRA): Don't link with -lwsock32 on
+	Cygwin (#91696, Masahiro Sakai).
+
+Tue Aug 20 16:01:03 2002  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+	* glib/gconvert.c (strdup_len): validate 'len' argument properly
+	for the case that input string is not null-terminated. (#91222)
+
+2002-08-10  Gustavo Noronha Silva  <kov@debian.org>
+
+	* configure.in: added pt_BR to ALL_LINGUAS
+
+2002-08-07  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmarkup.c (g_markup_parse_context_get_element): 
+	Use g_return_val_if_fail, no g_return_if_fail.
+
+2002-08-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gthread.c: Set the normal PID surrogate priority according
+	to getpid() to avoid errors for niced processes. (#86116)
+
+	* gthread/gthread-impl.c, gthread/gthread-posix.c,
+	gthread/gthread-solaris.c: Do the same for the posix/dce
+	implementation. Solaris still needs to set priority of the main
+	thread, because all unbound threads will schedule according to
+	that value and it defaults to 0 (the minimal value). 
+
+	* glib/gmain.c: Factor out g_main_context_init_pipe from
+	g_main_context_new to initialize the wakeup pipe of a
+	context. Call that function from g_main_context_new if threads are
+	initialized and for all contexts when threads are initialized
+	in g_main_thread_init. (#86872) 
+
+	* gthread/gthread-impl.c: Call g_main_thread_init. (#86872) 
+
+Thu Jul 25 14:23:15 2002  Owen Taylor  <otaylor@redhat.com>
+
+ 	* glib/gfileutils.c: Clarify the behavior of g_build_path()
+ 	for empty elements and for leading and trailing copies
+ 	of the separator in the docs.
+ 
+ 	* glib/gfileutils.c: Fix problems with leading elements
+ 	consisting only of "/" characters. (#85928, Guillaume Chazarain)
+ 
+ 	* tests/strfunc-test.c (main): Add more test cases
+ 	for g_build_filename().
+ 
+2002-07-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gunicode.h: 
+	* glib/gutf8.c (g_utf8_strreverse): New function to revert
+	a utf8 string.
+	* glib/gpattern.c (g_utf8_reverse): Gone, replaced by 
+	g_utf8_strreverse.  (#87725)
+
+Thu Jul 25 20:57:20 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_read_line): Fix 
+	docs for @str_return to conform to the main docs
+	and the implementation as to whether the terminator
+	is included. (#87964, Jacob Berkman)
+
+Thu Jul 25 19:52:41 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/guniprop.c (real_tolower): Handle the 
+	end of the string properly when max_len is set.
+	(#88545, Morten Welinder.) Rename the next_t
+	variable to next_type to make cc-mode happy.
+
+	* glib/gconvert.c (g_iconv_open): Fix missing
+	label from previous commit.
+
+Thu Jul 25 19:41:03 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_get_flags): Fix 
+	incorrect return value in g_return_val_if_fail 
+	(#85545, David L. Cooper II)
+
+Thu Jul 25 19:12:43 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_set_encoding): Clarify
+	that only one of the conditions listed in the docs
+	need to be true, not all of them. (#87176,
+	Sebastian Rittau)
+
+	* glib/giochannel.c (g_io_channel_read_line): Fix 
+	description of the return value. (#87754, Manuel Clos)
+
+Thu Jul 25 19:02:53 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_timeout_add): Remove reference
+	in the docs to @notify parameter. (#87768,
+	Manuel Clos)
+
+Thu Jul 25 17:57:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gconvert.c (g_iconv_open): Document the
+	(GIConv)-1 return value on failure. (#87559, 
+	Jarek Dukat)
+
+	* glib/gconvert.c (g_iconv_open): Fix potential
+	problems with the assumption that (GIConv)(iconv_t)-1
+	is the same as (GIConv)-1.
+	
+2002-07-15  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmarkup.h: 
+	* glib/gmarkup.c (g_markup_parse_context_get_element): New
+	function to get the currently open element.  (#70448)
+
+2002-07-04  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* tests/*.c: Added #undef G_DISABLE_ASSERT and #undef G_LOG_DOMAIN
+	throughout the files, which didn't already have them. (#87312)
+
+2002-07-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+        * configure.in: Made the thread flags determination tests first
+	check for the canonical form -pthread[s], then for other
+	possibilities. Also recognize some more platforms. Modeled after
+	patch from Miroslaw Dobrzanski-Neumann <mne@mosaic-ag.com>
+	(#77981).
+	
+	* configure.in: Fixed bugs in posix thread priority
+	resolution. Also added AIX priorities. Fix from
+	Laurent Vivier <Laurent.Vivier@bull.net>. (#82599)
+	
+	* gthread/gthread-solaris.c: Use thr_min_stack() instead of
+	sysconf (_SC_THREAD_STACK_MIN). if stack_size is 0 on entry to
+	g_thread_create_solaris_impl, also pass 0 to thr_create. Otherwise
+	the stack might be to small for any nontrivial thread. Discovered
+	on intel-solaris by Rajkumar Sivasamy <rajkumar.siva@wipro.com>.
+
+2002-07-03  Anders Carlsson  <andersca@gnu.org>
+
+	* configure.in: Add a forgotten trailing ` in the 
+	GLIB_BINARY_AGE expression. Also fixup LT_CURRENT.
+
+2002-07-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* configure.in: Set binary age to 0 to make it compile.
+
+	* configure.in: Improve checks for dce/posix threads to also do
+	the right thing, if the thread functions are not declared in
+	pthread.h. Idea from Miroslaw Dobrzanski-Neumann
+	<mne@mosaic-ag.com> in #77981.
+
+2002-07-01  Anders Carlsson  <andersca@gnu.org>
+
+	* configure.in: Up version to 2.1.0.
+
+2002-07-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/garray.h: Add parenthesis to protect macro
+	argument. Spotted by Sam Couter <sam@topic.com.au>. (#86826)
+
+2002-06-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gmessages.h (g_assert, g_assert_not_reached,
+	g_return_if_fail, g_return_val_if_fail): In case of
+	G_DISABLE_ASSERT replace "G_STMT_START{ }G_STMT_END" with
+	"G_STMT_START{ (void)0; }G_STMT_END", because the former chokes
+	gcc prior to 3.0. (#86664)
+
+2002-06-26  Yanko Kaneti <yaneti@declera.com>
+
+	* configure.in: (ALL_LINGUAS) Added Bulgarian (bg).
+
+Thu Jun 13 16:12:04 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (struct _GTimeoutSource): Make 
+	interval unsigned to match g_timeout_source_new().
+	(#82624, Tim Janik.)
+
+	* glib/gmain.c (g_timeout_prepare): Add some
+	extra gymnastics to avoid signed/unisgned integer
+	overflows.
+
+Thu Jun 13 15:57:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* INSTALL.in: Add a note about the deficiency
+	of Tru64 iconv. (#81699, Manuel Op de Coul)
+
+Tue Jun 11 17:03:39 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/patterntest.c (test_compilation)
+	* glib/gmem.c (profiler_try_realloc): A couple
+	of 64-bit printf format fix from George Lebl.
+	(#82817)
+
+	* glib/gconvert.c (open_converter): Fix gsize/gint
+	mixup for g_iconv() arguments. (#83270,
+	David L. Cooper II)
+
+2002-06-03  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gwin32.c (g_win32_get_package_installation_directory):
+	Replace homegrown "hash" entity by standard ISO entity "num".
+
+2002-05-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmain.c: Remove references to nonexisting functions 
+	g_source_set_callback_closure(), g_source_poll(), g_source_add()
+	from docs.
+
+	* glib/gdir.c (g_dir_open): Typo fix in docs.
+
+	* glib/gasyncqueue.c (g_async_queue_lock):
+	(g_async_queue_unref_and_unlock): Fix markup to avoid erroneous 
+	<link>s in docs.
+
+	* glib/gwin32.c: Escape #'s leading to erroneous <link>s in docs.
+
+	* glib/gtree.c: Replace some occurances of Gtree by GTree in docs.
+
+	* glib/gstring.c (g_string_insert_unichar): Typo fix in docs.
+
+2002-05-23  Havoc Pennington  <hp@redhat.com>
+
+	* glib/gspawn.c (fork_exec_with_pipes): on success, close the
+	pipes from the child. Fix from Tim.
+
+2002-05-22  jacob berkman  <jacob@ximian.com>
+
+	* m4macros/glib-gettext.m4 (AM_GLIB_WITH_NLS): fix tyop
+
+Wed May 22 15:40:47 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* README.in: Remove notes about now-fixed-bugs.
+
+	* m4macros/glib-gettext.m4 acinclude.m4: Get rid
+	of AC_MSG_NOTICE() usage, since some broken systems
+	(Hi Debian!) might not be using autoconf-2.5x for
+	downstream packages even though we require it for
+	glib itself.
+
+	* INSTALL.in: Add a note about installing extra
+	converters for Solaris.
+
+	* glib/gutils.h (g_bit_nth_msf): Fix termination
+	condition. (#82582, Paolo Molaro)
+ 
+Tue May 21 15:51:17 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: $with_libiconv, not $with_iconv.
+
+Mon May 20 18:02:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Move iconv tests before gettext
+	checks. (#81999)
+
+	* m4macros/glib-gettext.m4 acinclude.m4: If we can't
+	link to gettext, try adding in -liconv. (#80076,
+	Boyd Lynn Gerber)
+
+	* m4macros/glib-gettext.m4 acinclude.m4: Suppress
+	warnings about xgettext not being GNU gettext when
+	libintl wasn't found at all. 
+	(#79016, Andrew P. Lentvorski, Jr.)
+	 
+2002-05-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmarkup.c (g_markup_parse_context_parse): Added
+	proper support for CDATA sections.
+
+2002-05-20  jacob berkman  <jacob@ximian.com>
+
+	* glib/gdir.c: include sys/types.h before dirent.h to build on
+	darwin (fixes #72859)
+
+Mon May 20 15:35:59 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* glib/gfileutils.c (get_contents_regfile): Fix double
+ 	close of file descriptor on error. (#82139, Wayne Schuller)
+ 
+ 	* glib/gspawn.c (close_and_invalidate): Don't close
+ 	fd's that have already been closed. (Fix from Michael
+ 	Meeks, #81959)
+ 
+ 	* glib/giochannel.c (g_io_channel_close): If not flushing,
+ 	dump the contents of the write buffers, so we won't try
+ 	to write them to an invalid fd later. (Patch from Ron Steinke,
+ 	fixing #78290, Andreas Persenius.)
+ 
+2002-05-18  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/markups/fail-36.gmarkup: 
+	* tests/markups/fail-35.gmarkup: 
+	* tests/markups/valid-8.gmarkup: 
+	* tests/markups/valid-7.gmarkup: 
+	* tests/markups/valid-6.gmarkup: 
+	* tests/markups/valid-5.gmarkup: New testcases.
+
+	* tests/markup-test.c (passthrough_handler): 
+	(text_handler): Don't ignore the text_len parameter.
+
+	* glib/gmarkup.c (find_current_text_end): Don't hang on embedded
+	nuls.  (#81977)
+	(g_markup_parse_context_parse): Fix passthrough handling to
+	correctly skip processing instructions, comments, doctype
+	declarations and CDATA marked sections.  (#81977)
+
+Sat May 18 00:21:51 2002  Tim Janik  <timj@gtk.org>
+
+	[merged from stable]
+
+        * glib/gscanner.c (g_scanner_unexp_token): fix missing cases for
+        expected_token.
+
+2002-05-17  Tor Lillqvist  <tml@iki.fi>
+
+	* config.h.win32.in: Match new additions in a configure-produced
+	config.h.
+
+	* glibconfig.h.win32.in: gssize and gsize as in a
+	configure-produced glibconfig.h.
+
+	* glib/glib.def: Add new functions.
+
+Thu May 16 12:24:00 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* acinclude.m4 m4macros/glib-gettext.m4: Incorporate 
+ 	AM_LC_MESSAGES, AM_PATH_PROG_WITH_TEST as AM_GLIB_* to avoid 
+ 	dependencies on gettext m4 files. (#81885, Hidetoshi Tajima.)
+	
+2002-05-14  Alex Larsson <alexl@redhat.com>
+	
+	* glib/gstrfuncs.c: 
+	* glib/gstrfuncs.h:
+	New functions g_str_has_suffix and g_str_has_prefix.
+	
+	* tests/string-test.c: (main):
+	Test the new functions.
+
+Mon May 13 23:20:00 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* autogen.sh (have_gettext): Add a check for GNU gettext.
+	(Pointed out by Dan Winship in #59386.)
+
+Mon May 13 11:55:33 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in acglib.m4: If sizeof(int) == sizeof(long)
+	run compilation tests to determine which way gsize should
+	be defined. (#74413, reported by Miroslaw Dobrzanski-Neumann)
+
+Mon May 13 11:42:23 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+        * glib/libcharset/*: Update from libcharset CVS.
+ 	Includes additional encodings for Solaris (#80396,
+	Qingjiang Yuan)
+ 
+ 	* configure.in: Add getc_unlocked to CHECK_FUNCS().
+ 
+ 	* glib/gmessages.c (strdup_convert): If
+ 	g_convert_with_fallback() fails, print the error
+ 	message to stderr the first time, then return
+ 	the original string. (#78197)
+ 
+2002-05-10  Naba Kumar  <kh_naba@users.sourceforge.net>
+
+	* configure.in: Added "hi" to ALL_LINGUAS.
+
+2002-05-08  Michael Natterer  <mitch@gimp.org>
+
+	* configure.in: fixed yesterdays fix for cross compiling: simply
+	check the variable "cross_compiling" which gets set by autoconf.
+
+2002-05-07  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmarkup.c (unescape_text): Report unfinished entity
+	references as errors rather than running into an assert.  (#80441)
+
+2002-05-07  Michael Natterer  <mitch@gimp.org>
+
+	* configure.in: added a new conditional CROSS_COMPILING which
+	indicates ($build != $host). If it is set, look for
+	glib-genmarshal in PATH. Error out if it was not found.
+
+Tue May  7 11:24:22 2002  Owen Taylor  <otaylor@redhat.com>
+
+	Fixes for #79347, Ron Arts.
+
+	* glib/gqsort.c (g_qsort_with_data): Handle 0 elements,
+	don't g_return_if_fail().
+
+	* tests/qsort-test.c (main): Add a 0 element test.
+
+	* glib/garray.c (g_[ptr_]array_sort_with[_data]): 
+	Remove invalid assertions that array->pdata != NULL ..
+	it's NULL for 0 elements which is a valid case.
+
+Mon May  6 16:00:41 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gbacktrace.h: Exclude OSF from alpha definition
+	of G_BREAKPOINT(), since the assembler apparently
+	doesn't support bpt. (#77852, Gareth Pierce) [from stable]
+
+Mon May  6 11:48:08 2002  Owen Taylor  <otaylor@redhat.com>
+
+	[ merged from stable ]
+ 
+ 	* Makefile.am (EXTRA_DIST): Add ChangeLog.pre-2-0 (#78641)
+ 
+ 	* m4macros/glib-2.0.m4: save CFLAGS/LIBS properly when
+ 	compiling "what went wrong" test case. (#79330)
+ 
+ 	* m4macros/glib-2.0.m4: Remove reference to editing
+ 	pkg-config script. (From Jim Gettys)
+ 
+ 	* configure.in: (Look for dyld interfaces before dlopen()
+ 	since OS X can have both. Patch from Jacob Berkman, 
+ 	#80438)
+	
+2002-05-01  jacob berkman  <jacob@ximian.com>
+
+	* configure.in: fix typo on 64-bit printf formatting string
+	configure message (fixes #80389)
+
+2002-04-29  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* configure.in: Added Vietnamese (vi) to ALL_LINGUAS
+
+2002-04-19  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn.c (g_spawn_command_line_sync): Add Windows-specific
+	note to the gtk-doc comment.
+
+	* glib/gspawn-win32.c: Remove the copy-pasted gtk-doc comment
+	blocks. It's enough to have them in gspawn.c.
+
+2002-04-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread/gthread-impl.c (g_thread_init): Fixed typo. (#78985)
+
+2002-04-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gthreadpool.c (g_thread_pool_thread_proxy): Unlock the pool
+	for all threads leaving it. (#78348)
+
+2002-04-11  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/patterntest.c: Remove manual UTF-8 -> Latin1 conversion for
+	stuff fed to g_print.
+
+2002-04-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* tests/gio-test.c, tests/markup-test.c: Use gsize instead of
+	gint. From Miroslaw Dobrzanski-Neumann
+	<mne@mosaic-ag.com>. (#77982)
+	
+2002-04-08  Stanislav Brabec  <utx@penguin.cz> 
+
+        * cs.po: Added Czech (cs) to ALL_LINGUAS.
+
+2002-03-31  Hasbullah Bin Pit <sebol@ikhlas.com>
+
+	* configure.in: Added Malay (ms)to ALL_LINGUAS.
+
+2002-03-29  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_convert_init.
+
+Thu Mar 28 18:25:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* Released 2.0.1
+
+	* configure.in: Version 2.0.1, interface, binary age 1.
+
+Thu Mar 28 18:22:53 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* README: Remove warning about g_print, etc, encoding.
+
+	* NEWS: Updates.
+
+	* glib/gmessages.c (g_log_default_handler): Use %lu
+	(plus a cast) when printing out pid_t arguments.
+	(#76770, Morten Welinder)
+
+	* glib/gstrfuncs.c (g_strdup_vprintf): Check the
+	result of vasprintf(), return NULL on failure.
+	(#76802, Akira Tagoh)
+
+	* tests/testglib.c (TEST): Supress a warning with
+	some GCC versions. 
+
+Thu Mar 28 20:31:51 2002  Tim Janik  <timj@gtk.org>
+
+	* glib/gmessages.c:
+	(g_print): 
+	(g_printerr): convert prtinf() strings to local charset
+	when writing them to stdout or stderr.
+
+Wed Mar 27 18:42:22 2002  Tim Janik  <timj@gtk.org>
+
+	* gmessages.[hc]:
+	major cleanups. introduced _g_log_fallback_handler() to handle
+	recursive messages which really doesn't call any GLib functions.
+	this allowes the default handler to use normal GLib functions and
+	also fixes user supplied log level handlers.
+	fixed locking issues, based on a patch from Sebastian Willhelmi,
+	attached to #74356. translate log messages from UTF-8, based
+	on the same patch. save fatal and recursion flags across flag
+	loop. use new integer format code from above patch.
+	move GLib functions out of locked mutex state to avoid deadlocks.
+	move the level prefix and filedescriptor logic into mklevel_prefix().
+	move _g_debug_init() into a place where we can figure and handle
+	recursion.
+
+Mon Mar 25 18:13:06 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gtypes.h (GUINT*_SWAP_LE_BE_X86): Remove __const__
+	qualifier from __asm__ statements... GCC since at least
+	2.96 has assumed no side effects automaticaly, and gcc-3.1
+	will warn about this usage. (#73308, Cody Russell)
+
+Fri Mar 22 17:59:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmem.c (g_mem_chunk_reset): Fix problem where
+	if g_mem_chunk_reset() is called on an alloc-only
+	memchunk, then a useles GTree was created.
+
+Wed Mar 20 18:20:21 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gconvert.c (open_converter): Try to work around segfaults
+	on Solaris if NULL is passed for outbuf... supposedly gchar
+	*outbuf = NULL... &outbuf works. (#74336, Lauri Alanko)
+
+Wed Mar 20 11:17:32 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gfileutils.c (get_contents_regfile): Close the
+	file descriptor. (#75507, Matthias Clasen)
+
+Wed Mar 20 11:00:59 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Use $PKG_CONFIG, not pkg-config.
+	(LEE Sau Dan, #75572)
+
+2002-03-20  Sven Neumann  <sven@gimp.org>
+
+	* glib/ghash.c (g_hash_table_resize): avoid repeated call of 
+	g_spaced_primes_closest() by moving it out of the CLAMP macro 
+	(spotted by Salmaso Raffaele).
+
+2002-03-17  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Add MSVC-specific text by Hans Breuer.
+
+2002-03-16  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c: Some debugging output formatting changes. The
+	following changes fix a problem with buffered GIOChannels, noticed
+	with the help of Owen's test program, thanks! (#59969)
+	(g_io_win32_prepare): Return value that takes the buffer condition
+	into account, like g_io_unix_prepare() does.
+	(g_io_win32_check): Ditto, like g_io_unix_check().
+	(g_io_win32_dispatch): Ditto, like g_io_unix_dispatch().
+
+Thu Mar 14 17:37:45 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_channel_write_chars): Fix some
+	gsize/gint mismatches. (#74422, Miroslaw Dobrzanski-Neumann)
+
+2002-03-14  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gmessages.c: Fixed threading issues brought up by
+	#74577. Make g_log_find_domain, g_log_domain_new,
+	g_log_domain_check_free and g_log_domain_get_handler require being
+	called with g_messages_lock held and remove all internal locking
+	in them. Then added proper locking to g_log_set_handler,
+	g_log_remove_handler and g_logv. Problem spotted by Miroslaw
+	Dobrzanski-Neumann <mne@mosaic-ag.com>. (#74577)
+
+2002-03-13  Erwann Chenede  <erwann.chenede@sun.com>
+        * glib/gconvert.c 
+	  glib/gen-unicode-tables.pl
+	  glib/gunidecomp.h : fixed cast/type problems to 
+	  avoid warnings (with forte compiler) (#73898)
+	
+2002-03-12  Alexander Larsson  <alla@lysator.liu.se>
+
+	* glib/gconvert.c:
+	Cache getenv("G_BROKEN_FILENAMES") in have_broken_filenames() and
+	use instead. Add g_convert_init() that calls have_broken_filenames()
+
+	* gthread/gthread-impl.c:
+	Have g_thread_init call g_convert_init.
+
+2002-03-11  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strtod): 
+	(g_ascii_strtod): 
+	(g_ascii_dtostr): 
+	(g_ascii_formatd): Doc formatting fixes.
+
diff --git a/ChangeLog.pre-2-20 b/ChangeLog.pre-2-20
new file mode 100644
index 0000000..4ca68de
--- /dev/null
+++ b/ChangeLog.pre-2-20
@@ -0,0 +1,914 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-29  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 577137 – g_logv() will crash if given format args and multiple
+	log levels
+
+	* glib/gmessages.c (g_logv): Copy a va_list when using it
+	multiple times. Reported by Wim Lewis.
+
+2009-03-16  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 575555 – Use fsync() when replacing files to avoid data loss on crash
+
+	* configure.in:
+	Look for fsync().
+
+	* glib/gfileutils.c:
+	(write_to_temp_file):
+	fsync temp file if destination file exists
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+	* configure.in: Bump version to 2.20.0
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2009-03-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbase64.c: Avoid integer overflows in the base64
+	functions. Fixes CVE-2008-4316
+
+2009-03-11  Stef Walter  <stef@memberwebs.com>
+
+	* glib/gchecksum.c: Document and guarantee hex digests will
+	be returned in lower case. Fixes bug #574019
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2009-03-01  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 572508 – gmarkup speedup ...
+
+	* glib/gmarkup.c: Various optimizations: do less allocations by
+	keeping a pool of GStrings, do in-place unescaping, avoid redundant
+	utf-8 validation. Patch by Michael Meeks
+
+	* tests/markups/fail-36.gmarkup: Adapt
+
+2009-03-01  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/gthread.c: Fix docs.
+
+2009-03-01  Matthias Clasen <mclasen@redhat.com>
+
+	* tests/slice-threadinit.c: Change one magazine size from 77 to 81
+	to make distcheck work on x86-64.
+
+2009-02-27  Tor Lillqvist  <tml@novell.com>
+
+	Bug 167569 - g_string_append_printf crashes on win32 when used
+	with a NULL argument
+
+	* glib/gnulib/vasnprintf.c (vasnprintf): Add workaround for buggy
+	programs. Patch by Owen.
+
+2009-02-23  Paolo Borelli  <pborelli@katamail.com>
+
+	* glib/gutf8.c (_g_utf8_make_valid):
+	sanity check the input paramter. 
+
+2009-02-23  Tor Lillqvist  <tml@novell.com>
+
+	Bug 570501 - g_win32_get_system_data_dirs uses invalid conversion
+	of function pointer to object pointer
+
+	* glib/gutils.c (g_win32_get_system_data_dirs_for_module): Change
+	the type of the function's parameter to be explicitly a function
+	pointer.
+
+	* glib/gutils.h (_g_win32_get_system_data_dirs): Modify
+	declaration and the only caller, the inline
+	_g_win32_get_system_data_dirs(), accordingly. Add comments
+	pointing out these are internal GLib functions.
+
+2009-02-22  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 572151 – “it's” and “its” confused in docs and comments
+
+	* Fix "it's" vs "its" confusion throughout the source. Patch
+	by Will Thompson.
+
+2009-02-22  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 572464 – Doc for g_file_get_contents
+
+	* glib/gfileutils.c (g_file_get_contents): Improve docs. Pointed
+	out by Øystein Johansen.
+
+2009-02-22  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 572672 – glib/gthread.c: argument is different type
+
+	* glib/gthread.c (g_once_init_leave): Add a necessary cast back.
+	Pointed out by Kazuki Iwamoto.
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix strict aliasing warnings and viiolations to make GLib and
+	GLib users buildable with gcc 4.4. Patch by Jakub Jelinek.
+
+	* glib/gatomic.[hc]: Add G_GNUC_MAY_ALIAS to pointer arguments,
+	fix macro versions to only operate on objects of the same size.
+
+	* glib/gdataset.c:
+	* glib/gthread.[hc]:
+	* glib/gdatasetprivate.h: Remove unnecessary casts in 
+	g_atomic_pointer_get calls.
+	
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2009-02-13  Mathias Hasselmann  <hasselmm@gnome.org>
+
+	Add note about g_utf8_offset_to_pointer() not checking string
+	boundaries.
+
+	* glib/gutf8.c (g_utf8_offset_to_pointer()): See summary.
+
+2999-02-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 523742 – Use noinst for non-installable libraries
+
+	* tests/Makefile.am: use noninst_LTLIBRARIES for noninstalled 
+	libraries.Patch by Björn Lindqvist
+
+2009-02-06  Murray Cumming  <murrayc@murrayc.com>
+
+	* gio/gfilterinputstream.c:
+	* gio/gfilteroutputstream.c: Correct the grammar in some property 
+	documentation.
+	* gio/gdatainputstream.c:
+	* glib/gregex.c: Correct the spelling of 
+	occurrence in documentation.
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-01-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2009-01-31  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 569105 – g_time_val_to_iso8601() assumes time_t==long
+
+	* glib/gtimer.c (g_time_val_to_iso8601): Pass a time_t* to gmtime().
+	Pointed out by Matthias Drochner.
+
+2009-01-27  Christian Persch  <chpe@gnome.org>
+
+	* configure.in:
+	* docs/reference/glib/glib-sections.txt:
+	* docs/reference/macros_misc.sgml:
+	* docs/reference/glib/tmpl/types.sgml: Add
+	G_GOFFSET_FORMAT and friends. Bug #563141.
+
+2009-01-23  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/glib/Makefile.am:
+	  Add SCAN_OPTIONS=--ignore-decorators="GLIB_VAR" to Makefile.am to fix
+	  on problem with the doc build.
+
+2009-01-21  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.c (g_win32_locale_filename_from_utf8): Drop the code
+	in the else branch of #if GLIB_CHECK_VERSION (2, 19, 0). Drop
+	unused variables.
+
+2009-01-20  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 568294 – A wrong reference in the description of 
+	g_bookmark_file_add_application()
+
+	* glib/gbookmarkfile.c (g_bookmark_file_add_application):
+	Fix a typo in the docs. Pointed out by Takeshi Aihana
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c (g_strdup_printf): Fix a doc typo.
+
+2009-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2009-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 512779 – --disable-regex breaks compilation
+	
+	* configure.in: Define an ENABLE_REGEX macro
+
+	* gobject/gboxed.c: Don't refer to g_regex_ref if ENABLE_REGEX
+	is not defined.
+
+2009-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gbsearcharray.h: Quell some compiler warnings.
+
+2009-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/pcre: Update to PCRE 7.8
+
+2009-01-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 567977 – textdomain() macro should not return NULL when 
+	ENABLE_NLS is not set
+
+	* glib/glibintl.h: If !ENABLE_NLS, make textomain() macro 
+	return "messages" in case of a NULL argument. Patch by
+	Peter Kjellerstedt.
+
+2009-01-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 567838 – G_STRUCT_OFFSETOF fails to compile under icc 9.1
+
+	* glib/gmacros.h (G_STRUCT_OFFSETOF): Use offsetof instead of 
+	__builtin_offsetof, for icc's sake. Proposed by Hrvoje Niksic.
+
+2009-01-13  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 564728 Add function to decode base64 encoded data in place
+
+	* glib/glib.symbols:
+	* glib/gbase64.[hc] (g_base64_decode_inplace): New convenience
+	API to decode in place, overwriting the input string. Patch by
+	Sebastian Dröge.
+
+2009-01-12  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/gtestutils.c (g_strcmp0): Be more explicit about the NULL
+	handling in the docs.
+
+2009-01-12  Tor Lillqvist  <tml@novell.com>
+
+	* glib/goption.c (parse_arg): Guard against a mis-written
+	GOptionArgFunc that has returned FALSE but not set the GError.
+
+2009-01-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 566573 – g_match_info_fetch_pos docs
+
+	* glib/gregex.c: Mention that positions are in bytes. 
+	Proposed by Christian Persch.
+
+2009-01-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 566569 – gregex docs clarification
+
+	* glib/gregex.c: Copy the warning about @string to all
+	relevant docs. Proposed by Christian Persch
+
+2009-01-09  Tor Lillqvist  <tml@iki.fi>
+
+	Bug 567138 - get_package_directory_from_module() does not free its
+	lock when failing
+
+	* glib/gwin32.c (get_package_directory_from_module): Obvious fix.
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+	* NEWS: Updates
+
+2009-01-05  Dan Winship  <danw@gnome.org>
+
+	* glib/tests/.gitignore: update
+
+	* tests/.gitignore: update, sort
+
+	* tests/gobject/.gitignore: add
+
+2009-01-05  Tor Lillqvist  <tml@iki.fi>
+
+	Bug 566348 - g_file_open_tmp uses the wrong g_mkstemp on win32
+
+	* glib/gfileutils.c: Move the binary compatibility versions of
+	g_file_test(), g_file_get_contents(), g_mkstemp() and
+	g_file_open_tmp() last in the file. Remove the restriction that
+	the XXXXXX is last in the template in the binary compatibility
+	version of g_mkstemp(). Thanks to Morten Welinder and Jody
+	Goldberg.
+
+2009-01-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2009-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gregex.c: Add an example to the g_regex_replace_eval() docs.
+
+2009-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c: Move docs inline, adding references to g_free()
+	where appropriate.
+
+2009-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 564210 – SUN Studio 12 has supported visibility attribute
+
+	* configure.in: Use visibility attribute for new enough sun cc.
+	Patch by Chris Wang
+
+2008-12-30  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 565905 – There is no named g_context_group_set_translation_domain()
+	in GOption command line parser
+
+	* glib/goption.c: Fix a wrong reference in the docs, reported by
+	Takeshi Aihana.
+
+2008-12-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gspawn.c:
+	* glib/gthread.c:
+	* glib/goption.c:
+	* glib/gmain.c:
+	* glib/gkeyfile.c:
+	* glib/gfileutils.c:
+	* glib/gdate.c:
+	* glib/garray.c:
+	* glib/gbookmarkfile.c:
+	* glib/gbacktrace.c: Fix some compiler warnings.
+
+2008-12-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/glib.symbols: Add g_thread_get_initialized here,
+	too. Surround g_test_config_vars with ifdef INCLUDE_VARIABLES.
+
+2008-12-18  Mike Kestner <mkestner@novell.com>
+
+	Bug 560676 - function access for g_threads_supported
+
+	* glib/gthreads.c (g_thread_get_initialized): new accessor for
+	g_threads_supported macro.
+	* glib/gthreads.h: add g_thread_get_initialized
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.19.3 ===
+
+2008-12-13  Matthias Clasen <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-12-12  Dan Winship  <danw@gnome.org>
+
+	* glib/pltcheck.sh: make this work on x86_64
+
+2008-12-12  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/guniprop.c: Improve g_unichar_iswide_cjk() docs.
+
+2008-12-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 508021 – Add support for the CRIS and CRISv32 architectures
+
+	* configure.in: 
+	* glib/gatomic.c: Add an implementation for the CRIS and CRISv32 
+	architectures, by Peter Kjellerstedt
+
+2008-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Some more documentation additions.
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+	* NEWS: Updates
+
+2008-11-28  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 562639 – g_parse_debug_flags() parsing "help"
+
+	* glib/gutils.c (g_parse_debug_string): Print available keys if
+	string is "help".
+
+2008-11-28  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 562638 – GDebugKey key member should be const
+
+	* glib/gutils.h: Change GDebugKey key member from gchar * to
+	const gchar *.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 547264 – Missing "no flags" flag
+
+	* glib/gregex.c: Mention 0 as value for 'no flags' in some places..
+	Pointed out by Bastien Nocera
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 562544 – g_key_file_get_string and g_key_file_get_value
+	documentation does not explain the difference
+
+	* glib/gkeyfile.c (g_key_file_get_string): Explain the difference
+	to g_key_file_get_value(). Pointed out by Mart Raudsepp.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Refer to @locale parameters as locale identifier
+	in docs.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 557603 – carbon check output misplaced
+
+	* configure.in: Call AC_PROG_CPP early to avoid it messing up
+	carbon check output. Fix proposed by Christian Persch
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 559110 – Do not include libintl.h after glibintl.h
+
+	* glib/glibintl.h: Define bind_textdomain_codeset in the DISABLE_NLS
+	branch. Patch by Peter Kjellerstedt.
+
+	* glib/gutil.c: Don't include libintl.h directly.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 562378 – callback return value not respected for callback option
+	with no arg
+
+	* glib/goption.c (parse_long_option): Return the parse_arg return
+	value even for no-arg callbacks. Patch by Christian Persch
+
+	* glib/tests/option-context.c: Add a test for a callback which
+	returns FALSE.
+
+2008-11-23  Christian Persch  <chpe@gnome.org>
+
+	Bug 559413 – g_option_group_set_error_hook docs buglet
+
+	* glib/goption.c: Doc fix.
+
+2008-11-23  Christian Persch  <chpe@gnome.org>
+
+	Bug 560568 – gkeyfile docs buglet
+
+	* glib/gkeyfile.c: Clarify the docs.
+
+2008-11-23  Christian Persch  <chpe@gnome.org>
+
+	Bug 560569 – gkeyfile doesn't use the set list_separator in some cases
+
+	* glib/gkeyfile.c: (g_key_file_get_locale_string_list),
+	(g_key_file_set_locale_string_list), (g_key_file_set_integer_list),
+	(g_key_file_set_double_list): Use the key file's list separator character,
+	not the default one.
+
+	* glib/tests/keyfile.c: (test_lists), (test_reload_idempotency): Test
+	this.
+
+2008-11-21  Christophe Fergeau <teuf@gnome.org>
+
+	Bug 561212 – GFileReadMoreCallback API doc refers to non-existant function
+
+	* gio/giotypes.h: fix name of function referred to in
+	GFileReadMoreCallback API documentation
+
+2008-11-21  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump gtk-doc dependency to 1.11 for
+	nicer index-generation.
+
+2008-11-14  Matthias Clasen <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2008-11-04  Christian Dywan  <christian@imendio.com>
+
+	Bug 558672 – NULL key lookup using g_hash_table_lookup_extended()
+
+	* glib/ghash.c:
+	Clarify g_hash_table_lookup_extended
+
+2008-11-02  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Expand also build/win32/vs9/Makefile.
+
+2008-10-31  Christian Dywan  <christian@imendio.com>
+
+	Bug 558513 – g_warn_if_fail FIXME in gtestutils
+
+	* glib/gtestutils.c (g_test_log_send):
+	Turn g_assert into g_warn_if_fail as advised
+
+2008-10-31  Grahame Bowland  <grahame@angrygoats.net>
+
+	Bug 558185 – 'parent' variable in g_local_file_get_child_for_display_name() 
+	hits g_object_unref(NULL) assertion
+
+	* gio/glocalfile.c: 
+	- remove unused variable. Patch by Matt Johnston <matt@ucc.asn.au>
+
+2008-10-29 16:11:14  Tim Janik  <timj@gtk.org>
+
+	* glib/gmacros.h: added G_PASTE() and G_STATIC_ASSERT(), based on
+	patches by Christian Persch and Christian Dywan. Fixes:
+	Bug 558381 - Add support for compile time assertions
+
+2008-10-27  Joseph Pingenot  <gnomesvn@digitasaru.net>
+
+	* glib/ghash.c: changed "#GHashTableIterator" to "#GHashTableIter"
+	in the documentation-comments above g_hash_table_foreach_remove()
+	and g_hash_table_foreach_steal() to correctly name and link to
+	GHashTableIter.  This affects the GNOME documentation website
+	as well, so further steps are likely necessary beyond this subproject..
+
+2008-10-23 Matthias Clasen <mclasen@redhat.com>
+
+	Bug 557210 – g_compute_checksum_for_* asserts with less than 2 bytes
+
+	* glib/gchecksum.c (g_compute_checksum_for_data): Accept 
+	lengths < 2. Patch by Tommi Komulainen
+
+	* tests/checksum-test.c: Add a test for this
+
+2008-10-23 Matthias Clasen <mclasen@redhat.com>
+
+	Bug 556921 – gpoll.h breaks hal compilation
+
+	* glib/gpoll.h: Include gtypes.h. Pointed out by Anis Elleuch
+
+2008-10-20 Christian Persch <chpe@gnome.org>
+
+	Bug 557087 – mem leak in g_content_types_get_registered
+		
+	* gio/gcontenttype.c: Plug a mem leak.
+
+2008-10-19  Michael Natterer  <mitch@imendio.com>
+
+	Bug 556186 – gpoll.h breaks gmain.h inclusion
+
+	* glib/gpoll.h: different fix: disallow direct inclusion
+	unconditionally again but make an exception if included from
+	gmain.h to maintain compatibility.
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version to 2.19.1
+
+	* === Released 2.19.0 ===
+
+	* NEWS: Updates
+
+2008-10-14  Christian Persch <chpe@gnome.org>
+
+	Bug 556186 – gpoll.h breaks gmain.h inclusion
+
+	* glib/gpoll.h: Only disallow direct inclusion when
+	G_DISABLE_SINGLE_INCLUDES is defined.
+
+2008-10-13  Sven Herzberg  <sven@imendio.com>
+
+	Bug 556101 – static mutex yields warnings with g++
+	Reviewed by Tim Janik
+
+	* configure.in: added an intermediate cast to gpointer
+
+2008-10-13  Christian Persch <chpe@gnome.org>
+
+	Bug 555311 – format not a string literal and no format arguments
+
+	* glib/gmarkup.c:
+	* glib/gshell.c: Use literal errors where appropriate.
+
+2008-10-10  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 551355 – [PATCH] Make glib build with libtool 2.2
+
+	* autogen.sh: Accept libtool 2.2.   We are moving towards having
+	it working.
+
+2008-10-10  Behdad Esfahbod  <behdad@gnome.org>
+
+	* configure.in: With libtool 2.x, regenerate libtool early.
+	Based on bug 552107, patch by Patryk Zawadzki
+
+2008-10-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 554557 – Patch to fix gcc warnings about missing format 
+	specifiers
+
+	* glib/gmarkup.c:
+	* glib/gshell.c:
+	* glib/grel.c: Fix gcc warnings. Patch by Kjartan Maraas
+
+2008-10-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 552861 – glib-2.0.m4 calls system(3) without storing its result
+
+	* m4macros/glib-2.0.m4: Cosmetic change to make -Werror happy.
+	Patch by Andreas Köhler
+
+2008-10-08  Christian Persch  <chpe@gnome.org>
+
+	Bug 555313 – GFileAttribute boxed type get_type function should
+	use usual get_type pattern
+
+	* gio/gfileattribute.c (g_file_attribute_info_list_get_type): Use
+	g_once_init_enter/leave.
+
+2008-10-08  Christian Persch  <chpe@gnome.org>
+
+	Bug 555314 – mem leak in gmarkup
+
+	* glib/gmarkup.c: (g_markup_parse_context_parse): Plug a mem leak.
+
+2008-10-08  Tor Lillqvist  <tml@novell.com>
+
+	Bug 554790 - g_convert() misbehaves with winiconv versions
+
+	* glib/win_iconv.c (kernel_mbtowc): If converting from ASCII,
+	explicitly check for and reject 8bit chars. MultiByteToWideChar()
+	doesn't, at least not on XP.
+
+2008-10-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtypes.h: Properly include gmacros.h
+
+2008-10-06  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 555309 – giochannel breaks on error
+	Patch from Christian Persch
+
+	* glib/giounix.c (g_io_unix_read), (g_io_unix_write),
+	(g_io_unix_seek), (g_io_unix_close), (g_io_unix_set_flags):
+	Don't shadow err.  Oops!
+
+2008-10-06  Christophe Fergeau  <teuf@gnome.org>
+
+	Bug 555224 – Improve g_format_size_for_display doc
+	
+	* glib/gfileutils.c: change g_format_size_for_display API doc to
+	explicitly say that the returned string has to be freed. Change
+	spelling of "newly allocated" to "newly-allocated" in g_file_read_link
+	API doc to be more consistent with what is done in that file.
+
+2008-10-01  David Zeuthen  <davidz@redhat.com>
+
+	* README.in: Add "Notes about glib 2.20" section detailing the
+	ramifications of the patch from bug #528670.
+
+2008-09-30  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 554092 – glib doesn't return G_FILE_ERROR_NOENT et al on OS X
+
+	* glib/giounix.c (g_io_unix_read), (g_io_unix_write),
+	(g_io_unix_seek), (g_io_unix_close), (g_io_unix_set_flags),
+	(g_io_unix_get_flags), (g_io_channel_new_file):
+	Like mclasen says: "well, thats the way errno works...,
+	save it or loose it".  Save errno.
+
+2008-09-30  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.decl
+	* glib/tests/Makefile.am: Bypass gtester related stuff on Windows.
+
+2008-09-30  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gprintf.c
+	* glib/gnulib/vasnprintf.c: Don't define _GNU_SOURCE on Windows,
+	as _GNU_SOURCE has unintended side effects when compiling against
+	newest mingw headers.
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	Bug 553447 – g_assert_no_error()
+
+	* glib/gtestutils.h (g_assert_no_error, g_assert_error): Macros to
+	assert that a GError is not set, or else is set to a particular
+	error.
+
+	* glib/gtestutils.c (g_assertion_message_error): utility for
+	those macros
+
+	* glib/tests/keyfile.c:
+	* tests/asyncqueue-test.c:
+	* tests/bookmarkfile-test.c:
+	* tests/convert-test.c:
+	* tests/file-test.c: Use g_assert_error/g_assert_no_error
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	* glib/gthreadpool.c (wakeup_thread_marker): make this a "const
+	gpointer" rather than a gconstpointer to avoid warnings later
+
+	* glib/pcre/pcre_ucp_searchfuncs.c:
+	* glib/pcre/pcre_valid_utf8.c: #include "config.h"
+
+	* glib/tests/printf.c (test_d): fool gcc into not warning about
+	some printf format strings that we know are dubious
+
+2008-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 553857 – gbacktrace.h requires signal.h
+
+	* glib/gbacktrace.h: Include signal.h for raise(). 
+	Pointed out by Sebastien Bacher
+
+2008-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 553724 – python interpretter path not patched in correctly
+
+	* glib/Makefile.am: Fix the sed magic to replace python.
+
+2008-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.c: Add some more docs.
+
+	* glib/giochannel.c: Move more docs inline, and improve them
+	on the way.
+
+2008-09-25  Tor Lillqvist  <tml@novell.com>
+
+	Bug 553820 - gpoll.c: undeclared identifier
+
+	* glib/gmain.c
+	* glib/gpoll.c: Make the g_poll() function non-static also on
+	Windows. Prefix an underscore to the g_main_poll_debug variable
+	and make it non-static in gmain.c so that it can be used in
+	gpoll.c. Add back missing variable declaration.
+
+2008-09-25  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gspawn-win32.c (do_spawn_with_pipes) (do_spawn_directly):
+	Just ignore the child_setup function, never call it. The is no
+	situation in which it could be useful on Windows. Do print a
+	warning, like before.
+
+	* glib/gspawn.c (g_spawn_async_with_pipes): Corresponding change
+	in documentation.
+
+2008-09-24  Sven Herzberg  <sven@imendio.com>
+
+	Be a little more explcit in the docs. Includes Owen's requested
+	changes.
+
+	* glib/gmain.c: improved documentation for g_source_attach() and
+	g_source_destroy()
+
+2008-09-23  Michael Natterer  <mitch@imendio.com>
+
+	* glib/glib.h: #include <glib/gpoll.h>
+
+	* glib/gpoll.h: #error out if gpoll.h is included directly.
+
+	* glib/gpoll.c: remove trailing whitespace.
+
+2008-09-23  Dan Winship  <danw@gnome.org>
+
+	* glib/gpoll.[ch] (g_poll): Move this out of gmain.c and make it part
+	of the public API. (Part of Bug 505361 - gunixinputstream.c assumes
+	poll() available.)
+
+2008-09-23  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c (poll_rest) [Win32]: Fix embarrassing bug: I was
+	passing an incorrect third parameter to memmove(), had forgotten
+	to multiply by the size of the table entry. Just use a for loop
+	instead, clearer. Odd I didn't notice when testing this code.
+
+2008-09-19  Hans Petter Jansson  <hpj@novell.com>
+
+	Rewrite most of GHashTable to use open addressing with quadratic
+	probing instead of chaining. This has the potential to reduce memory
+	fragmentation significantly, while being slightly faster due to
+	better locality and no need to call alloc/free functions for nodes.
+	Benchmarks suggest it also uses less memory overall.
+
+	* glib/ghash.c (prime_mod): Table of suitable primes for
+	initial-probe distribution.
+	(g_hash_table_set_shift): New function.
+	(g_hash_table_find_closest_shift): New function.
+	(g_hash_table_set_shift_from_size): New function.
+	(g_hash_table_lookup_node_for_insertion): New function.
+	(g_hash_table_lookup_node): Rewritten to return node index instead of
+	pointer, use quadratic probe on flat table, and not return insertion
+	data. The latter saves some computation for read-only lookups.
+	(g_hash_table_remove_node): Rewrite to take a pointer directly to the
+	node structure to remove, and clear that. Remove unlinking code.
+	(g_hash_table_remove_all_nodes): Rewrite to not clear nodes
+	individually, but en masse using memset () after potentially calling
+	notify functions.
+	(iter_remove_or_steal): Use new data structure and algorithm. Vastly
+	simplified - now just a call to g_hash_table_remove_node ().
+	(g_hash_table_resize): New resize code, re-indexing with new prime
+	and cleaning up tombstones.
+	(g_hash_table_maybe_resize): Table may hold 8 buckets minimum, no less
+	than 1/4 load excluding tombstones, and no more than 15/16 load
+	including tombstones. These numbers are the results of a lot of
+	benchmarking with multiple complex applications, and should not be
+	changed lightly.
+	(g_hash_table_iter_next)
+	(g_hash_table_lookup)
+	(g_hash_table_lookup_extended)
+	(g_hash_table_insert_internal)
+	(g_hash_table_remove_internal)
+	(g_hash_table_foreach_remove_or_steal)
+	(g_hash_table_foreach)
+	(g_hash_table_find)
+	(g_hash_table_get_keys)
+	(g_hash_table_get_values): Use new data structure and algorithm,
+	fairly trivial changes.
+
+2008-09-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: Look for man pages in share/man.
+
+	* glib/gutils.c (_glib_get_dll_directory)
+	* glib/gspawn-win32.c (do_spawn_with_pipes): Be a bit less
+	restrictive, look for the helper programs in the same folder where
+	the GLib DLL is, not necessarily in a "bin" subfolder of the top
+	GLib installation folder.
+
+2008-09-18  Matthias Clasen <mclasen@redhat.com>
+
+	* configure.in: Bump version to 2.19.0
+
+	* ChangeLog.pre-2-18: rotate ChangeLog
+	
+	* === branch for 2.18 ===
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
new file mode 100644
index 0000000..73ae096
--- /dev/null
+++ b/ChangeLog.pre-2-4
@@ -0,0 +1,2042 @@
+Tue Mar 16 11:50:56 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.4.0 ===
+
+	* configure.in: Version 2.4.0, interface age 0.
+
+	* README.in: Updates
+
+	* NEWS: Updates
+
+Sun Mar 14 13:56:48 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmessages.c (escape_string): Handle invalid
+	UTF-8. (#131218, patch from Matthias Clasen)
+
+Sun Mar 14 13:23:36 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gspawn.c: Use fork1() not fork for 
+	G_THREADS_IMPL_SOLARIS. (#136971, Sebastian Wilhelmi)
+
+Sun Mar 14 12:58:30 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c: if _POLL_EMUL_H is defined, undefine
+	HAVE_POLL to prefer our own poll() emulation to the
+	lame OS/X one. (#136956, Manish Singh)
+
+Sat Mar 13 23:30:53 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmacros.h (G_STMT_START): Add __extension__
+	to G_STMT_START to quite gcc -pedantic. (#131899,
+	Olivier Biot)
+
+Sat Mar 13 23:18:45 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/env-test.c (main): Remove critical log handler;
+	we can't trigger g_return_if_fails() in our test suite
+	even silently, because the user could have compiled
+	with --disable-debug. #if 0 the tests for
+	g_setenv/g_unsetenv with a "foo=bar" variable name.
+	(#136709, reported by Frédéric L. W. Meunier)
+
+Sat Mar 13 23:10:35 2004  Owen Taylor  <otaylor@redhat.com>
+
+	Some warning fixes for the Sun compiler (Reported by 
+	David L. Cooper II, #136401)
+
+	* glib/giochannel.c (g_io_channel_read): Return
+	G_IO_ERROR_NONE, not G_IO_STATUS_NORMAL, since hte
+	function returns a GIOError.
+
+	* glib/guniprop.c: Fix some guchar/gchar confusion
+	with special_case_table.
+
+Fri Mar 12 15:30:58 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gbacktrace.h: ia32's G_BREAKPOINT() implementation works on
+	amd64 too. Enable it.
+
+Fri Mar 12 15:21:22 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gatomic.c: Non-optimizing compile fails for two asm
+	statements on PowerPC. Use generic implementaton for those
+	cases. Spotted by Christof Petig <christof@petig-baender.de>,
+	fix by Sebastian Wilhelmi. Bug #137006 has a possible alternate
+	solution, but we'll be conservative for now.
+
+Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmain.c (g_main_depth): Remove an extra semicolon.
+	Spotted by Kjartan Maraas.
+
+2004-03-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c
+	* glib/gspawn-win32-helper.c: Implement
+	G_SPAWN_FILE_AND_ARGV_ZERO. (#136792, Bruce Hochstetler)
+
+	* tests/spawn-test.c
+	* tests/spawn-test-win32-gui.c: Test it.
+
+Tue Mar  9 09:16:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.6 ===
+
+	* configure.in: Version 2.3.6, interface age 1.
+
+	* NEWS: Updates
+
+2004-03-09  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* tests/child-test.c: Do not run the g_child_watch_* test
+	multi-threaded, as that doesn't work on linux prior 2.6. Fixes
+	#136539.
+
+2004-03-08 Alastair McKinstry <mckinstry@computer.org>
+
+	* configure.in: Added "ga" (Irish) to ALL_LINGUAS.
+
+2004-03-07  Danilo Šegan  <dsegan@gmx.net>
+
+	* configure.in: Added "sr@ije" to ALL_LINGUAS.
+
+2003-03-07  Hans Breuer  <hans@breuer.org>
+
+	* glib/gspawn-win32.c : (GPid)shortcut_spawn_retval which
+	doesn't improve the implementation at all, it just make it 
+	compile with msvc ...
+
+	* glib/makefile.msc.in : build gatomic.c (now really:)
+	
+2004-03-06  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Update.
+
+	* configure.in
+	* Makefile.am
+	* */Makefile.am: Drop the hand-written makefile.mingw(.in)
+	files. They haven't been maintained in a long time. As several
+	people have managed to build GLib for Win32 using the
+	autoconfiscation mechanism, there is no real reason to even try to
+	maintain the hand-written mingw makefiles.
+
+2004-03-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/gatomic.c: Fix infinite recursion for
+	G_MEMORY_BARRIER_NEEDED and DEFINE_WITH_MUTEXES by using a GMutex
+	instead of G_DEFINE_LOCK. The mutex is allocated by the new
+	function _g_atomic_thread_init. Fixes #136284.
+
+	* glib/gthreadinit.h, glib/gthread.c: Declare and call
+	_g_atomic_thread_init during thread system initialization.
+ 
+2004-03-05  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_main_depth. (#136221, Cedric Gustin)
+
+2004-03-04  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* configure.in: Added "pa" (Punjabi) to ALL_LINGUAS.
+
+2004-03-04  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gmain.c: Use the atomic integer operations for GMainContext
+	and GMainLoop reference counting.
+
+	* glib/gmain.c: Hold the main_context_list lock, when iterating
+	the list. Only call g_main_context_wakeup for positive reference
+	count.
+
+2004-03-03  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Update to match a configure-generated
+	glibconfig.h. Specifically: Remove G_{MIN,MAX,MAXU}INT64
+	definitions (now in gtypes.h). Remove g_once and
+	g_static_mutex_get_mutex_impl_shortcut definitions (now in
+	gthread.h).
+
+	* tests/child-test.c: Use a macro GPID_FORMAT for the format to
+	print GPid in (%p on Win32, %d on Unix). Maybe configure.in should
+	place that in glibconfig.h?
+
+	Print verbose error message if CreateProcess() fails.
+
+	Don't close the child handle until in the child watch callback.
+
+	Don't try to run /bin/true on Win32. Run ipconfig instead (just to
+	pick a program that should exist on all Window boxes).
+
+2004-03-02  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gatomic.c: Fixed missing definition for ppc code. Fix by
+	Mark McLoughlin <mark@skynet.ie>.
+
+Mon Mar  1 16:49:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.5 ===
+
+	* configure.in: Version 2.3.5, interface ago 0.
+
+	* NEWS: Some further updates.
+
+Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (check_for_child_exited): Don't
+	call waitpid() on a source that has already exited.
+
+	* glib/gmain.c (g_child_watch_check): Return TRUE
+	only if the child actually exited.
+
+Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Patch from J. Ali Harlow
+
+	* configure.in: Use void * not HANDLE for GPid on win32.
+
+	* glib/gspawn.[ch] glib/gspawn-win32.[ch] glib/glib.def: 
+	Add g_spawn_close_pid().
+	
+	* glib/gspawn.[ch]: Make g_spawn functions take
+	GPid * instead if int * (GPid == int on unix, will
+	produce compile warnings until fixed on Win32.)
+
+	* tests/child-test.c: Make the test a little more
+	inappropriately verbose.
+
+        * glib/gmain.c: Add some documentation warnings about
+	not closing @pid while the source is active.
+
+Mon Mar  1 20:32:06 2004  Tim Janik  <timj@gtk.org>
+
+	* autogen.sh:
+	- exit with $? instead of 1 in case of failure
+	- exit with $? if ./configure failed
+	  (that's so autogen.sh && make lines work)
+	- removed --enable-gtk-doc option
+	- added $AUTOGEN_CONFIGURE_ARGS
+
+Mon Mar  1 09:17:32 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_main_depth): Clarify doc comment.
+
+2004-03-01  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gatomic.c: Define g_atomic_(int|pointer)_get only for
+	G_ATOMIC_OP_MEMORY_BARRIER_NEEDED. Spotted by Hans Breuer.
+
+Sun Feb 29 21:42:47 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c: Fix leftover references to 
+	g_main_context_depth() in docs.
+
+Sun Feb 29 21:34:34 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.[ch]: Add g_main_depth() (Request from
+	Tim Janik and Stefan Westerfeld)
+
+Mon Mar  1 00:26:11 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Update for 2.3.4
+
+2003-02-29  Hans Breuer  <hans@breuer.org>
+
+	* glib/gatomic.c : added win32 api based implementation
+	for G_PLATFORM_WIN32, !__GNUC__
+
+	* glb/glib.def : change to g_atomi_* no _fallback
+
+2004-02-29  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* configure.in, glib/gatomic.c, glib/gatomic.h: Moved the
+	assembler functions from gatomic.h to gatomic.c, which makes for
+	better maintainability. Also use gint instead of gint32 to be able
+	to use reference counting for ABI-fixed structures with
+	gint/guint.
+
+	* glib/gthread.h: Adapted accordingly.
+
+	* tests/atomic-test.c: Updated to test for G_MAXINT and G_MININT.
+
+2003-02-28  Hans Breuer  <hans@breuer.org>
+
+	* glib/glib.def : updated externals, including those
+	from bug #135386
+
+	* glib/makefile.msc.in : build gatomic.c
+
+	* glibconfig.h.win32.in : removed duplicate definition
+	of G_MAXSIZE, typedef void* GPid instead of int
+
+	* tests/child-test.c  glib/gmain.c : 
+	applied patch from J. Ali Harlow <ali@juiblex.co.uk> to fix 
+	g_child_watch implementation on win32, bug #50296
+
+Fri Feb 27 22:13:22 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gqueue.c: Trivial doc changes.
+
+Fri Feb 27 21:58:20 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/ghash.c (g_hash_table_find): Add "Since: 2.4"
+
+2004-02-27  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gasyncqueue.c, glib/gasyncqueue.h: Use
+	g_atomic_int_(inc|dec_and_test) for reference
+	counting. g_async_queue_unref_and_unlock and
+	g_async_queue_ref_locked is deprecated, but still there to
+	preserve ABI.
+
+	* glib/gasyncqueue.c, glib/gasyncqueue.h: Reading access to
+	ref_count only with g_atomic_int_get().
+
+Fri Feb 27 02:00:34 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* acglib.m4: quote AC_DEFUN macro names so automake
+	1.8 won't whine at us.  (#134882)
+
+Fri Feb 27 01:44:41 2004  Matthias Clasen <maclas@gmx.de>
+
+	* glib/gdate.c: Translate from locale era to AD in 
+	g_date_set_parse().  (#133400, Theppitak Karoonboonyanan)
+
+Fri Feb 27 00:46:29 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strerror): Don't modify errno.  (#116617, 
+	Balazs Scheidler)
+
+2004-02-26  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gatomic.h: Fix the !G_THREADS_ENABLED case.
+
+	* tests/child-test.c (main): Only run, if threads are enabled.
+
+	* glib/gatomic.h: empty G_ATOMIC_MEMORY_BARRIER() definition for
+	!G_THREADS_ENABLED
+
+	* glib/gthread.h: Define g_once and
+	g_static_mutex_get_mutex_impl_shortcut in terms of
+	G_MEMORY_BARRIER, if defined and if we can inline.
+
+	* configure.in: Remove double checked locking feature check.
+
+	* configure.in, config.h.win32.in, glib/gthread.c: Removed the PID
+	niceness surrogate for thread priorities as requested by Tim. It
+	does more harm than good.
+
+	* glib/gatomic.c, glib/gatomic.h: New files to implement atomic
+	operations for different platforms. Fixes bug #63621.
+
+	* glib/glib.h: Include gatomic.h.
+
+	* configure.in: Add test for assembler routines for atomic operations.
+
+	* glib/Makefile.am: Add gatomic.c, gatomic.h.
+
+	* tests/Makefile.am, tests/atomic-test.c: Unit test for atomic
+	operations.
+
+2003-02-26  Hans Breuer  <hans@breuer.org>
+
+	* glib/glib.def : added g_hash_table_find and a
+	bunch of g_queue_*
+
+	* glib/gmain.c : make it compile on win32, 
+	child_wake_up_pipe replaced by semaphore like it is done
+	for the other wake_up_pipe
+
+	* config.h.win32.in : added HAVE_INT64_AND_I64
+	* glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
+	and typedef for GPid
+
+	* test/env-test.c : don't let the local log function
+	collide in namespace with standard C
+
+2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* configure.in, glib/gthread.c: For the PID thread priorities
+	surrogate use gettid instead of getpid. This also works with nptl
+	(on linux-2.6), as well as with linuxthreads (on linux-2.4).
+
+2004-02-24  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/grand.c: Add Since: 2.4, where due
+
+Tue Feb 24 14:09:21 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.3 ===
+
+	* configure.in: Version 2.3.3, interface age 0.
+
+Mon Feb 23 22:24:00 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Start of 2.3.3 section.
+
+Sun Feb 22 02:32:14 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Set the gmodule suffix to 'a' for aix and 
+	use the aix gmodule implementation.  (#85930, Laurent Vivier)
+
+Sun Feb 22 00:47:04 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gnode.c (g_node_copy_deep): New function to deep-copy a 
+	GNode and its children.  (#93464, James M. Cape)
+
+Sat Feb 21 15:42:39 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* glib/gqueue.c: Some documentation fixes.
+
+Sat Feb 21 13:45:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* glib/gqueue.[ch]: Extend GQueue API to match the GList
+	API. (#78414).
+
+	* tests/queue-test.c: Update test suite to cover the new API.
+
+Fri Feb 20 03:02:05 2004  Tim Janik  <timj@gtk.org>
+
+	* glib/ghash.[hc]: applied patch from #131937 with slight
+	renames. provides g_hash_table_find().
+
+Fri Feb 20 02:39:03 2004  Tim Janik  <timj@gtk.org>
+
+	* applied patch from David Schleef <ds@schleef.org> which implements
+	a G_MODULE_BIND_LOCAL flag to g_module_open() to disable global
+	symbol registration.
+
+Thu Feb 19 18:40:01 2004  Tim Janik  <timj@gtk.org>
+
+	* glib/gstring.[hc]: for G_CAN_INLINE environments, inline
+	g_string_append_c() for efficiency. (vaguely based on #118707).
+
+Wed Feb 18 23:57:42 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmain.c: Include signal.h for SIGCHLD.  (#134622, Damien
+	Carbery)
+
+2004-02-18  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gasyncqueue.c: Lazy creation of GCond. Only
+	signal GCond, if threads are waiting.
+
+	* glib/gmain.c (g_main_context_new): Set context->wake_up_pipe
+	only for G_THREADS_ENABLED.
+
+Sat Feb 14 11:05:26 2004  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: Remove unnecessary STRIP_* definitions, and GNU
+	make check. Really fixes #134102.
+
+Sat Feb 14 02:11:08 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Make the check for GNU make work when MAKE is a 
+	full path.  (#134102, Julio M. Merino Vidal)
+
+Sat Feb 14 02:08:03 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Suppress xsltproc and xmlcatalog checks
+	if enable_man=no.  (#134091, Julio M. Merino Vidal)
+
+Sat Feb 14 01:21:34 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmain.h: 
+	* glib/gmain.c (g_child_watch_source_new): 
+	* glib/gmain.c (g_child_watch_add): 
+	* glib/gmain.c (g_child_watch_add_full): Wrap waitpid() as a
+	GSource. This is a partial implementation of the "Unix signal 
+	source".  (#50296, Jonathan R. Blandford)
+
+	* configure.in: Add the necessary configury to typedef GPid
+	appropriately.
+
+	* tests/Makefile.am:
+	* tests/child-test.c: Test child_watch sources.
+
+Sat Feb  7 15:02:01 2004  Manish Singh  <yosh@gimp.org>
+
+	* tests/type-test.c: Fix broken test for gsize formats.
+
+2004-02-05  Robert Sedak  <robert.sedak@sk.htnet.hr>
+
+        * configure.in: Added "hr" (Croatian) to ALL_LINGUAS.
+
+Wed Feb  4 17:58:51 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gcompletion.h: Add prototype for g_completion_complete_utf8().
+
+	* tests/completion-test.c: #include <string.h>
+
+2004-02-05  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_completion_complete_utf8.
+
+Thu Feb  5 01:19:12 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/file-test.c (test_mkstemp): Weaken an g_assert() to a 
+	g_warning(), since apparently nothing in Posix forces mkstemp()
+	to reject templates without any X's.  (#133397)
+
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gcompletion.c (g_completion_complete_utf8): New function which
+	works like g_completion_complete(), but strips a trailing incomplete
+	UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+	* tests/completion-test.c (main): Some GCompletion tests.
+
+	* tests/Makefile.am: Add completion-test.
+
+2004-02-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_strsplit_set.
+
+Sat Jan 31 03:13:56 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/garray.c (g_byte_array_remove_range): Don't return FALSE
+	from a pointer function.  (#131472, Morten Welinder)
+
+2004-01-30  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gunicomp.h:
+	* glib/gunidecomp.c:
+	* glib/gen-unicode-tables.pl: Size compose_table correctly. (#123421,
+        Simon Josefsson)
+
+	* glib/gen-unicode-tables.pl: Get rid of some new warnings from perl
+	5.8.1.
+
+Tue Jan 27 18:45:47 2004  Manish Singh  <yosh@gimp.org>
+
+	* m4macros/glib-2.0.m4
+	* m4macros/glib-gettext.m4: quote AC_DEFUN macro names so automake
+	1.8 won't whine at us.
+
+Wed Jan 28 01:39:21 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.h: 
+	* glib/gstrfuncs.c (g_strsplit_set): New function, a cross 
+	between g_strsplit() and strtok().  (#88329, Soeren Sandmann)
+
+	* tests/strfunc-test.c (main): Add g_strsplit_set() tests.
+	
+Fri Jan 23 22:49:52 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c (g_get_any_init): Sigh, protect against
+	pw->pw_gecos being "" as well.  (#132317, Kaj-Michael Lang)
+	
+2004-01-23  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add new functions.
+
+	* glib/grand.c: Don't include <unistd.h> unless
+	HAVE_UNISTD_H. Include <process.h> on G_OS_WIN32.
+	(g_rand_new): Use getppid() only on G_OS_UNIX.
+
+Thu Jan 22 15:16:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.2 ===
+
+Thu Jan 22 13:55:44 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gtimer.c: Add g_timer_continue().
+	(#98536, Tim-Philipp Müller)
+
+	* configure.in: Version 2.3.2, interface age 0.
+
+	* NEWS: tweak, finish.
+
+Thu Jan 22 20:50:55 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c (g_get_any_init): Protect against
+	pw->pw_gecos being NULL.
+
+Thu Jan 22 00:41:34 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c (g_get_any_init): Don't treat the Win32
+	user name like a gecos field, and when extracting a real
+	name from a gecos field, replace '&' by the capitalized
+	user name (a traditional passwd feature).  
+	(#118973, reported by Soeren Boll Overgaard)
+
+Tue Jan 20 22:31:22 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Start of 2.3.2 section.
+
+Fri Jan 16 21:45:56 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstring.c (g_string_ascii_up): Forgot to fix this one.
+
+Thu Jan 15 22:35:04 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstring.c (g_string_up): 
+	* glib/gstring.c (g_string_down): 
+	* glib/gstring.c (g_string_ascii_down): Move initialization of
+	variables after g_return_val_if_fail.  (#131564, Olivier Poncet)
+
+Sun Jan 11 16:13:20 2004  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: Add G_MAXSIZE, define in terms of G_MAXUfoo.
+
+	* tests/type-test.c: Add test for G_MAXSIZE.
+
+	* glibconfig.h.win32.in: Cleanup, add some missing bits.
+
+Sun Jan 11 16:05:35 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/giounix.c: #define _POSIX_SOURCE for SSIZE_MAX. Fixes #128853.
+
+Sat Jan 10 00:11:12 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gutils.h (g_bit_nth_lsf,g_bit_nth_msf): 64-bit cleanliness
+	fixes.
+
+	* docs/reference/glib/tmpl/misc_utils.sgml: update to reflect the
+	above take gulongs now. My docs suck, someone should revisit it.
+
+Fri Dec 19 11:49:21 2003  George Lebl <jirka@5z.com>
+
+        * glib/grand.c
+          glib/grand.h (g_rand_new) (g_rand_new_with_seed)
+          (g_rand_new_with_seed_array) (g_rand_set_seed_array):  Add
+          the init_by_array functionality from the reference implementation
+          of the mersenne twister (mt19937ar.c) and change the naming
+          to fit with the rest of the grand API.  New functions are
+          g_rand_new_with_seed_array, g_rand_set_seed_array.  This is only
+          reliable/tested for the 2.2 version of the seeding as that's what
+          the reference implementation uses.  Also modify g_rand_new to
+          get 4 longs from /dev/urandom since that will always be available
+          anyway and we get more entropy and if /dev/urandom is unavailable
+          use also 4 longs for seeding using secs, usecs, getpid and getppid.
+          For version 2.0 use only a simple seed again but be more careful
+          about seeding with secs/usecs in this case.
+
+        * glib/grand.c
+          glib/grand.h (g_rand_copy):  Add g_rand_copy function to copy the
+          current state of the random number generator.
+
+        * glib/grand.c (g_rand_new):  Add testing for EINTR when reading
+          from /dev/urandom
+
+        * tests/rand-test.c: add testing of the array seeding stuff against
+          the reference implementation, plus add statistical sanity check
+          to see that the values outputted are truly kind of random.  And
+          check that g_rand_copy truly copies the state by checking a few
+          terms.
+
+Tue Jan  6 15:38:30 2004  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* glib/gutils.h: Check defined (__OPTIMIZE__) not
+ 	__OPTIMIZE__. (Zack Rusin)
+ 
+2003-12-30  Murray Cumming  <murrayc@usa.net>
+  
+  	* gobject/glib-mkenums.in: Added a lowercase_name option, to be used
+  	next to the enum declaration, where the flag option is already used,
+  	when it is not possible to guess where to put the underscores in the
+  	_get_type() function name, for instance for GNOMEVFSURIHide.
+
+Fri Dec 26 02:03:58 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/garray.[hc] (g_ptr_array_foreach): New function to
+	call a function for each element of a GPtrArray.  (#114790)
+
+	* tests/array-test.c (main): Add a test for g_ptr_array_foreach().
+
+Sun Dec 21 22:57:58 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* m4macros/glib-gettext.m4: Quote macro names to support 
+	reading the file multiple times.  (#125537)
+
+Sun Dec 21 22:42:42 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmem.c (g_mem_chunk_destroy): Fix the locking of the
+	mem_chunks list.  (#127096, Balazs Scheidler)
+
+2003-12-14  Hans Breuer  <hans@breuer.org>
+
+	* glib/gfileutils.c : make g_file_test(,G_FILE_TEST_IS_EXECUTABLE)
+	return something useful on win32, too. 
+
+2003-12-13  Hans Breuer  <hans@breuer.org>
+
+	* glib/gconvert.c : get_filename_charset() needs to
+	return false for filenames not encoded in utf-8, 
+	which is always true on win32
+
+	* glibconfig.h.win32.in : (u)int64 modifier isn't the
+	gcc 'll' but always the msvcrt one 'I64'
+
+	* glib/glib.def : updated
+
+Thu Dec 11 10:31:21 2003  Manish Singh  <yosh@gimp.org>
+
+	* glib/gmacros.h: change #elif with no expression to #else in
+	G_STRFUNC definition. Thanks to Damien Carbery, fixes #129101.
+
+Mon Dec  8 12:02:40 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.1 ===
+
+	* NEWS: Further updates for 2.3.1.
+
+Fri Dec  5 12:09:13 2003  Manish Singh  <yosh@gimp.org>
+
+	* glib/gunidecomp.c (_g_utf8_normalize_wc): fix gint/gsize confusion.
+
+2003-12-04  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gunidecomp.c: Add hangul composition and decomposition to
+	unicode normalization. (#100456)
+
+	* tests/unicode-normalize.c: Test hangul.
+
+Tue Dec  2 02:29:41 2003  Matthias Clasen  <maclas@gmx.de>
+
+	Fix for #103710, Mark Jones:
+	
+	* glib/gtypes.h (G_MAXINT64): Define G_{MIN,MAX,MAXU}INT{8,16,32,64}.
+	* configure.in: Don't put G_{MIN,MAX,MAXU}INT64 in glibconfig.h.
+
+Thu Nov 27 17:04:08 2003  Tim Janik  <timj@gtk.org>
+
+	* glib/gstrfuncs.c (g_strconcat): handle NULL arguments
+	gracefully.
+
+	* glib/gmacros.h: defined G_STRFUNC, which (pretty) prints the
+	current function (since G_STRLOC and G_GNUC_*FUNCTION became
+	unusable with gcc-3.0).
+
+Wed Nov 26 16:45:16 2003  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+	* glib/gstrfuncs.c: Fixed a bad pointer comparison in
+	g_ascii_strtod that came up in fa_IR locale (#126640, Behdad
+	Esfahbod).
+
+	* tests/strtod-test.c: Fixed the tests to catch the above.
+
+Sat Nov 22 14:16:51.15 2003  Andrew Lanoix  <alanoix@umich.edu>
+
+	* glib/giowin32.c: Bind inter-thread comminication 
+		sockets to INADDR_LOOPBACK instead of INADDR_ANY.
+
+Thu Nov 20 15:09:40 2003  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: Added G_GSIZE_FORMAT and friends
+
+	* tests/printf-test.c
+	* tests/testglib.c
+	* tests/type-test.c: Add tests for the above.
+
+Mon Nov 17 17:28:10 2003  Manish Singh  <yosh@gimp.org>
+
+	* tests/thread-test.c (test_g_thread_once): Use GUINT_TO_POINTER
+	for g_thread_create data.
+
+Sat Nov 15 23:00:57 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/guniprop.c (g_utf8_casefold): Add a NULL check
+	to be consistent with the other g_utf8_ functions.  (#121618,
+	Tim-Philipp Müller)
+
+2003-11-15  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/makefile.msc.in: Fix for MSVC build: Skip strtod-test, use
+	correct glib libraries, with 2.0 in the names. (#126906, John
+	Ehresman)
+
+Sat Nov 15 00:46:14 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Don't blindly set glib_cv_long_long_format to
+	"ll" when using the included printf. As long as the native 
+	printf supports 64bit printing, use the native format.  
+	(#119525, Tor Lillqvist)
+
+Fri Nov 14 00:28:46 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gi18n.h:
+	* glib/gi18n-lib.h: Also define bind_textdomain_codeset() in
+	the #ifndef ENABLE_NLS case.
+
+Wed Nov 12 15:06:27 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* configure.in: Version 2.3.1, interface age 0.
+
+	* NEWS: Update for 2.3.1.
+
+2003-11-07  Mark McLoughlin  <mark@skynet.ie>
+
+	* glib/gconvert.c: (get_filename_charset): re-work to
+	retain a copy of the cached charset rather than the
+	actual return value from g_get_charset (which may
+	change). Also, re-initialize the cache if it does
+	change.	See bug #126454.
+
+Thu Nov  6 00:04:46 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gconvert.c (get_filename_charset): Replacement for
+	have_broken_filenames() which consults the environment variable
+	G_FILENAME_ENCODINGS in addition to G_BROKEN_FILENAMES.
+	* glib/gconvert.c (g_filename_from_utf8): 
+	* glib/gconvert.c (g_filename_to_utf8): 
+	* glib/gconvert.c (_g_convert_thread_init): Use
+	get_filename_charset() instead of have_broken_filenames().
+
+Wed Nov  5 22:05:19 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gi18n-lib.h: 
+	* glib/gi18n.h: New headers defining common gettext-support
+	macros.
+
+	* glib/Makefile.am (glibsubinclude_HEADERS): Add gi18n.h
+	and gi18n-lib.h.
+
+	* glib/gstrfuncs.h: 
+	* glib/gstrfuncs.c (g_strip_context): Auxiliary function for
+	the implementation of Q_().
+
+2003-11-05  Morten Welinder  <terra@gnome.org>
+
+	* glib/garray.c (g_ptr_array_remove_range): Make it compile.
+	(#119337, self.)
+
+	* glib/gstring.c (g_string_insert_len): Handle the case where the
+	to-be-inserted string is a substring of the target string.
+	(g_string_assign): Handle "s = s;".
+	(#114260, self.)
+
+Sun Nov  2 01:47:31 2003  Matthias Clasen  <maclas@gmx.de>
+
+	Fix 64bit printing for MSVC builds (#119292, Hans Breuer):
+	
+	* configure.in (HAVE_INT64_AND_I64): Define for MSVC to 
+	include support for printing __int64 with format %I64 in 
+	the gnulib printf wrappers. 
+	* glib/gnulib/printf-args.h (enum arg_type): Add TYPE_INT64 
+	and TYPE_UINT64.
+	* glib/gnulib/printf-args.h (struct argument): Add a_int64 and 
+	a_uint64 members.
+	* glib/gnulib/printf-args.c (printf_fetchargs): Support
+	TYPE_INT64 and TYPE_UINT64.
+	* glib/gnulib/printf-parse.c (printf_parse): Parse I64 format
+	modifier and map formats to TYPE_INT64.
+	* glib/gnulib/vasnprintf.c (vasnprintf): Print TYPE_INT64 with
+	format modifier I64.
+	* glib/gnulib/README: Document the __int64 support.
+	
+Sat Nov  1 08:45:38 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_main_context_iterate): Set the
+	return value from the result of g_main_context_check()
+	(after we poll) rather than g_main_context_prepare.
+	(#121675, Padraig O'Briain)
+
+Fri Oct 31 00:13:53 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Remove the semicolon from the definition of
+	g_once(), so that GPOINTER_TO_INT (g_once (...)) works.
+
+Tue Oct 28 23:38:30 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/printf-test.c: Change the %e tests to not check for
+	actual string equality, but rather equality under g_ascii_strtod(),
+	since the number of leading digits in the exponent seems to 
+	be not exactly prescribed by SUS.
+
+Fri Oct 24 17:09:04 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.0 ===
+
+	* NEWS: Small update.
+
+2003-10-24  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Force shared library (DLL) only on Windows.
+	(I don't think that is controversial?) Remove unnecessary
+	AC_LIBTOOL_WIN32_DLL. Don't use -D_REENTRANT on
+	Win32, it is not used by mingw or MSVC headers.
+
+	* config.h.win32.in
+	* glibconfig.h.win32.in: Match what configure produces.
+	
+	* glib/gconvert.c
+	* glib/gutils.c: Mark a couple of functions and variables that
+	aren't public as static.
+
+	* glib/gnulib/g-gnulib.h: Undef HAVE_SNPRINTF before (re)defining
+	it potentially differently, to silence compiler.
+
+	* glib/glib.def: Add some missing entries.
+	
+	* tests/gobject/Makefile.am (LDADD): Reorder, put libgobject after
+	libtestgobject.
+
+	* tests/gobject/ifaceproperties.c (main): NULL-terminate arg list
+	to g_object_set() and _get().
+
+Thu Oct 23 12:38:24 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/Makefile.am (dist-hook): Remove 
+	and extra backslash.
+
+	* tests/gobject/Makefile.am (EXTRA_DIST): Add 
+	testmarshal.list.
+
+	* glib/Makefile.am (libglib_2_0_la_SOURCES): Add
+	missing gunicode-private.h.
+
+	* tests/testglib.c (main): Fix a warning.
+
+	* tests/gobject/ifaceinherit.c: Remove check that
+	wasn't supposed to work (adding an interface already
+	added to the derived class to the base class), 
+	fix a bug.
+
+Wed Oct 22 23:41:03 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Update for 2.3.0.
+
+Tue Oct 14 17:44:38 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/ifaceproperties.c: Test for interface
+	properties and GParamSpecOverride.
+
+Wed Oct  8 23:40:26 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmarkup.c (g_markup_printf_escaped): 
+	(g_markup_vprintf_escaped): Document as 2.4 additions.
+	(unescape_text): Implement newline and whitespace normalization
+	according to the XML specification.  (#123919)
+	(g_markup_escape_text): Document whitespace (non)handling.
+
+2003-10-05  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Make the various printf feature test macros
+	reflect the system printf, even when using the included printf.
+	In particular, don't force HAVE_C99_SNPRINTF, since g-gnulib.h 
+	needs that test result.  (#122973)
+
+	* glib/gprintf.c (g_vasprintf): Don't rely on HAVE_VASPRINTF,
+	directly check for _g_vasprintf.
+
+	* glib/gprintfint.h (_g_vasprintf): Only define _g_vasprintf()
+	if vasprintf() is available.
+
+	* glib/gnulib/printf.c (_g_gnulib_vfprintf): Don't write
+	trailing nul to the file. (#122973)
+
+	* acinclude.m4 (AC_FUNC_VSNPRINTF_C99): Make the test 
+	detect non-C99-compliance of AIX 5.1 and Solaris 
+	vsnprintf().  (#122496)
+
+Thu Oct  2 01:15:46 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/ifacecheck.c: Test case for
+	g_type_add_interface_check().
+
+	* tests/gobject/ifaceinit.c: Add #undef G_DISABLE_ASSERT.
+
+Thu Oct  2 01:11:39 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/ifaceinherit.c: Remove some tests that
+	were testing things that weren't supposed to work; add
+	a test for adding an interface first to the child class,
+	then to the parent class.
+
+Thu Oct  2 00:02:55 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/Makefile.am test/gobject/ifaceinherit.c:
+	Tests of interface inheritance and overriding.
+
+2003-09-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c (do_spawn): Call protect_argv() in
+	do_spawn() instead of in do_spawn_with_pipes() so that we can use
+	the original argv[0] as the program file name parameter to
+	spawnv() in the shortcut (doing without helper process)
+	code. Fixes problem if GIMP 1.3 was installed in a path with
+	spaces in the name.
+
+Tue Sep 30 15:31:16 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* glib/guniprop.c (has_more_above): make the argument const to
+	get rid of warning
+
+	* glib/garray.c (g_byte_array_remove_range): insert cast to get
+	rid of warning
+
+2003-09-29  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/testglib.c (main): Use hardcoded name for DLL, as there is
+	no reliable way to determine it at compile or run time anyway. 
+
+2003-09-29  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/guniprop.c (g_unichar_get_mirror_char): Add "Since: 2.4" 
+	to docs.
+
+Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am:
+	Dummy dynamic type module for testing type plugin code
+	and dynamic types.
+
+	* test/gobject/defaultiface.c: Test of 
+	g_type_default_interface_ref() and friends.
+
+2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt>
+
+    * configure.in: Added lt to ALL_LINGUAS.
+
+2003-09-25  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Remove g_bsearch_array_* entries that don't exist
+	any longer. (ABI change?)
+
+Thu Sep 25 15:01:37 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/Makefile.am (SUBDIRS): Add gobject/.
+
+Fri Sep 12 16:26:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/gobject/ configure.in: New directory, framework 
+	for automated GObject tests.
+
+	* tests/gobject/override.c: Move testoverride.c
+	here, automate.
+
+	* tests/gobject/ifaceinit.c: Move testifaceinit.c here.
+
+	* tests/gobject/accumulator.c: Test signal accumulators,
+	including g_signal_accumulator_true_handled.
+
+2003-09-12  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gen-unicode-tables.pl: Take a directory where to look for the
+	unicode files on the command line instead of 7 individual files.
+
+2003-09-12  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gen-unicode-tables.pl:
+	* glib/gunichartables.h:
+	* glib/gunicode.h:
+	* glib/guniprop.c: Add g_unichar_get_mirror_char. (#114749)
+
+Thu Sep 11 20:11:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmarkup.c: Add g_markup_printf_escaped(), 
+	g_markup_vprintf_escaped().
+
+	* tests/markup-escape-test.c (main): Test for
+	g_markup_escape_text(), g_markup_printf_escaped().
+
+2003-09-10  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gunicodeprivate.h:
+	* glib/gunicollate.c:
+	* glib/gunidecomp.c:
+	* glib/guniprop.c:
+	* tests/casemap.txt:
+	* tests/gen-casemap-txt.pl: Unicode 4.0 special casing. (#114681)
+
+	* glib/gunicodeprivate.h: Use a private header instead of extern
+	function declarations (_g_utf8_normalize_wc,
+	_g_unichar_combining_class).
+
+Mon Sep  8 00:31:10 2003  Stefan Westerfeld  <stefan@space.twc.de>
+
+        * glib/gbsearcharray.h: inserted casts for C++.
+
+2003-08-28  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/patterntest.c (verbose): Fix a C99ism.  (#120821, Thomas 
+	Klausner)
+
+2003-08-25  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c (read_thread): Avoid UNLOCKing the critical
+	section twice, which might cause a hang. (#120653)
+
+	* glib/giowin32.c (g_io_channel_unix_new): Warn if fd is both a
+	valid file descriptor and socket.
+
+Mon Aug 25 12:34:36 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmessages.c: Escape control characters in g_logv() output.
+	(#108287, Christian Biere)
+
+Mon Aug 25 12:17:20 2003  Owen Taylor  <otaylor@redhat.com>
+
+ 	* glib/gmain.c (g_main_context_unref_and_unlock): 
+ 	When DISABLE_MEM_POOLS is set, loop through and free
+ 	the poll records explicitely, since g_mem_chunk_destroy()
+ 	won't do it. (#118121, Morten Welinder)
+ 
+2003-08-22  Samúel Jón Gunnarsson  <sammi@techattack.nu>
+
+	* is.po: Added "is" to ALL_LINGUAS.
+	
+2003-08-19  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gmessages.c (g_logv): [Win32] Make the fatal error message
+	box easier to notice with MB_SETFOREGROUND. Also use MB_ICONERROR
+	to get a nice stop-sign icon.
+
+Tue Aug 19 09:42:06 2003  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* m4macros/glib-gettext.m4: Add $INTLLIBS to $LIBS
+ 	temporarily, not -lintl. (Problem with fix for 
+ 	#119171, pointed out by James Henstridge)
+ 
+Tue Aug 19 03:55:29 2003  Tim Janik  <timj@gtk.org>
+
+	* glib/gbsearcharray.h: license change, no restrictions are made
+	in the new license at all, the implmentation is simply provided
+	"as is" to allow copy-pasting the code into any third-party app.
+	naturally, the implementation is self-contained within the header
+	file to allow this.
+	default to non-shrinking behaviour, allow users to request shrinking
+	via G_BSEARCH_ARRAY_AUTO_SHRINK.
+	creation, deletion functions are now named g_bsearch_array_create()
+	and g_bsearch_array_free(). 
+	fixed const in prototypes, removed cruft.
+	(g_bsearch_array_insert): take only three arguments, do nothing if the
+	node to insert is already there.
+	(g_bsearch_array_replace): insert or replace if the node is already
+	there.
+	(g_bsearch_array_remove): remove nodes by index, the index of a node
+	can be found via g_bsearch_array_get_index().
+	removed other g_bsearch_array_remove*() variants.
+	(g_bsearch_array_lookup): minor optimizations.
+	(g_bsearch_array_lookup_sibling): return nodes on mismatches.
+
+	* glib/gbsearcharray.c: removed.
+
+2003-08-16  Tor Lillqvist  <tml@iki.fi>
+
+	Fix #117925 (Dov Grobgeld):
+
+	* glib/gutils.c (g_find_program_in_path, g_basename,
+	g_path_get_basename, g_path_is_absolute, g_path_skip_root,
+	g_path_get_dirname, g_get_any_init): On Win32, look also for
+	slashes ('/') as pathname separators.
+
+	* glib/gfileutils.c (g_file_open_tmp): Ditto. If the template
+	contains a pathname separator, include the actual one in the error
+	message, instead of always the canonical one.
+
+	(g_build_filename): Separate implementation on Win32 that looks
+	for either slash or backslash. Document Unix/Windows differences.
+
+	* tests/testglib.c
+	* tests/strfunc-test.c: Test above functionality on Win32.
+
+2003-08-15  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gmain.c (g_poll): [Win32] Don't exceed handle array
+	bounds. Warn if there would be too many handles to wait
+	for. (WaitForMultipleObjects() has a relatively low limit of 64
+	handles. The Win32 IO channel code should be fixed not to need to
+	wait for one handle per file or socket being watched. Later.)
+
+2003-08-13  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/Makefile.am
+	* gmodule/Makefile.am
+	* gobject/Makefile.am
+	* gthread/Makefile.am: Use srcdir also in references to the .def
+	files. (#118885, Jeff Bonggren)
+
+2003-08-12  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gconvert.c (g_locale_from_utf8): Drop the Win32-specific
+	implementation. It used WideCharToMultiByte(), which is broken as
+	it stores unconvertable characters as fallback characters
+	(question marks) in the destination string without being able to
+	tell how much of the conversion succeeded. Using g_convert() like
+	on Unix is better and simpler. (#117872)
+
+	(g_locale_to_utf8): No need for the Win32-specific implementation
+	here, either.
+
+	(have_broken_filenames): Define as TRUE on Win32.
+
+	(g_filename_to_utf8, g_filename_from_utf8): Drop Win32 ifdefs. As
+	have_broken_filenames() now is defined TRUE on Win32, works as
+	before.
+	
+2003-08-11  Matthias Clasen  <maclas@gmx.de>
+
+	* acinclude.m4: Copy newer versions of JH_CHECK_XML_CATALOG and
+	JH_PATH_XML_CATALOG from gtk-doc to enable configuring without
+	xmlcatalog in PATH.  (#119115) 
+
+2003-08-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_getenv): Don't use a cache of variable name to
+	value mappings on Win32, as that breaks g_setenv() and
+	g_unsetenv(). Only call ExpandEnvironmentStrings() if necessary,
+	and in that case return a quarkified string. It is still
+	questionable how necessary expanding embedded environment variable
+	references is. Possibly the whole Win32-specific g_getenv()
+	implementation could be removed. (#119520)
+
+2003-08-08  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_once_impl.
+
+	* glib/gutils.c (g_setenv): Fix syntax error in the !HAVE_SETENV
+	case.
+
+2003-08-08  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/env-test.c (main): Remove a test for getenv() behaviour
+	which isn't specified by SUS and doesn't work on Solaris.
+
+2003-08-07  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/env-test.c: Add tests for '=' in names and values.
+
+	* glib/gutils.c (g_setenv, g_unsetenv): Check that the variable
+	name doesn't contain '='. Add a declaration for environ.  (#119338)
+
+	* acinclude.m4: Tighten the snprintf() test to check behaviour on
+	zero-size buffers.  (#106091) 
+
+	* tests/patterntest.c: Specify test strings in UTF-8, remove all
+	charset conversion. Replace the NOISY define by a cmdline arg
+	--noisy.   (#115757) 
+
+Thu Aug  7 15:01:09 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: Set $LIBS to include
+	-lintl when checking for dcgettext and 
+	_nl_msg_cat_cntr. (Tim Mooney, #119171)
+
+Thu Aug  7 14:15:44 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_idle_source_new): Make the default priority
+	for idle sources G_PRIORITY_DEFAULT_IDLE as anybody would
+	expect and document that. (#114461, reported by Andy Wingo)
+
+2003-08-06  Noah Levitt  <nlevitt@columbia.edu>
+
+	* tests/casemap.txt:
+	* tests/gen-casemap-txt.pl: Add test for special case not at inital
+	position in the string, the bug just fixed. (#118957)
+
+2003-08-05  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/guniprop.c: Get rid of "len" parameter to output_special_case
+	and output_marks, and make them work more like g_unichar_to_utf8,
+	fixing a bug in the process. (#118957)
+
+2003-08-05  Hans Breuer  <hans@breuer.org>
+
+	* glib/gnulib/makefile.msc : (new file) for msvc build
+
+	* glib/gnulib/vasnprintf.c : use glib/galloc.h
+
+	* glib/gnulib/printf.h : #include <stdio.h> for FILE*
+
+	* glib/makefile.msc.in : replace trio with gnulib
+
+	* glib/glib.def : updated externals
+
+	* glib/guniprop.c : fix for guniprop.c(582) : error C2082: 
+	redefinition of formal parameter 'len'
+
+2003-08-04  Noah Levitt  <nlevitt@columbia.edu>
+
+	* tests/unicode-normalize.c: We do handle > BMP now, so test it.
+
+2003-07-31  Noah Levitt  <nlevitt@columbia.edu>
+
+	* tests/file-test.c: s/g_read_link/g_file_read_link/ (#118727)
+
+2003-07-31  Noah Levitt  <nlevitt@columbia.edu>
+
+	* tests/unicode-encoding.c: Return nonzero exit status if the test
+	fails. (#118729) 
+
+2003-07-31  Noah Levitt  <nlevitt@columbia.edu>
+
+	* tests/utf8.txt: Change instances of U+10ffff to U+10fffd, since that
+	is the last valid unicode character. Add check that U+10ffff is
+	NOTUNICODE. (#118730)
+
+2003-07-30  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gen-unicode-tables.pl:
+	* glib/gunibreak.c:
+	* glib/gunibreak.h:
+	* glib/gunichartables.h:
+	* glib/gunicode.h:
+	* glib/gunicomp.h:
+	* glib/gunidecomp.c:
+	* glib/gunidecomp.h:
+	* glib/guniprop.c:
+	* tests/casefold.txt:
+	* tests/casemap.txt:
+	* tests/gen-casefold-txt.pl:
+	* tests/gen-casemap-txt.pl: Update Unicode data to 4.0. (#107974)
+
+2003-07-31  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32.c: When possible, manage without the helper
+	process. (Part of the enhancements outlined in #98737.) Speeds up
+	GIMP 1.3's first-time-run plug-in query phase a lot.
+
+	Plug a file descriptor (and thus Win32 handle) leak: close the
+	read end of the child error report pipe after use.
+
+2003-07-30  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c (g_unsetenv): Use same argument name as in header,
+	to pacify gtk-doc. 
+	(g_getenv): Move docs inline, add comment about lifespan of return
+	value. 
+
+	* glib-2.0.pc.in (Libs): Remove forgotten @TRIO_LIBS@.  (#118616,
+	Noah Levitt) 
+
+	* glib/gfileutils.[hc]: Rename g_read_link() to g_file_read_link()
+	to better match the remaining file utilities in the g_file_
+	namespace and to better separate it from readlink(). This is
+	hopefully no problem as the function is just 2 days old.
+
+2003-07-29  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gqsort.[hc] (g_qsort_with_data): 
+	* glib/gconvert.[hc] (g_filename_to_uri, g_filename_from_uri): 
+	* glib/gfileutils.[hc] (g_mkstemp, g_file_open_tmp): Use gchar,
+	gint, gsize instead of char, int, size_t in the interface for
+	consistency.  (#118567) 
+
+	Replace trio printf() by gnulib vasnprintf():  (#101874)
+	
+	* configure.in: Define HAVE_LONG_LONG_FORMAT if system printf
+	understands %llu; rename enable_trio to enable_included_printf;
+	add misc. tests needed for gnulib vasnprintf(); define
+	G_GINT{16,32,64}_MODIFIER in glibconfig.h.
+
+	* acinclude.m4: Misc tests needed for gnulib vasnprintf():
+	AC_FUNC_SNPRINTF_C99, bh_C_SIGNED, jm_AC_TYPE_LONG_LONG, 
+	gt_TYPE_LONGDOUBLE, gt_TYPE_WCHAR_T, gt_TYPE_WINT_T,
+	gt_AC_TYPE_INTMAX_T, jm_AC_HEADER_STDINT_H,  
+	jm_AC_HEADER_INTTYPES_H. 
+
+	* glib/Makefile.am: Replace TRIO_SUBDIR by PRINTF_SUBDIR and
+	trio_libtrio_la by printf_la.  
+
+	* glib/gprintfint.h: Include gnulib/printf.h and use _g_gnulib_
+	functions instead of _g_trio_ functions. 
+
+	* glib/trio/*: Removed
+
+	* glib/gnulib/*: vasnprintf() implementation from gnulib, patched
+	to live in the _g_gnulib namespace, use g_malloc instead of
+	malloc, and support long long printing even if system printf
+	doesn't. For more details, see glib/gnulib/README.
+	
+	* tests/printf-test.c: Add tests for 64 bit printing.
+
+2003-07-28  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gfileutils.h: 
+	* glib/gfileutils.c: New function g_read_link(). (#72545)
+
+	* configure.in: Check for setenv, unsetenv, readlink and symlink.
+
+	* tests/file-test.c (test_readlink): Test for g_read_link() (only
+	on systems supporting symbolic links).
+
+	* tests/env-test.c: New test for g_{get,set,unset}env().
+
+	* tests/Makefile.am (test_programs): Add env-test.
+
+	* glib/gutils.h: 
+	* glib/gutils.c: New functions g_setenv() and g_unsetenv().  (#100763)
+
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/printf-test.c: New test, tests printf behaviour. This was
+	already mentioned in Makefile.am by accident.
+
+	* tests/file-test.c: New test, currently contains mkstemp tests
+	copied from testglib.c. 
+
+	* tests/Makefile.am (test_programs): Add file-test.
+
+	* glib/gprintf.c: Fix all g_return_val_if_fail () checks to return
+	-1 on error to match the behaviour of the stdio printf() family.
+
+	* glib/garray.h: 
+	* glib/garray.c (g_{,byte,pointer}_remove_range): New functions to
+	remove a range of elements from an array.  (#94879, Nalin Dahyabhai)
+
+	* glib/gmessages.c (g_logv): Remove the 1024 char limit in the
+	common (non-recursive) case.
+
+2003-07-25  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gwin32.c: 
+	* glib/gutf8.c: 
+	* glib/gunicollate.c: 
+	* glib/gtree.c: 
+	* glib/gspawn.c: 
+	* glib/gmain.c: 
+	* glib/giochannel.c: 
+	* glib/gfileutils.c: 
+	* glib/gerror.c: 
+	* glib/gconvert.c: 
+	* glib/gasyncqueue.c: 
+	* glib/gmem.c: Remove some explicit Docbook markup which is no
+	longer necessary since gtk-doc does the right thing.
+
+	* glib/gutf8.c (g_utf8_get_char_validated): Work around gtk-doc stupidity.
+
+2003-07-20  Hans Breuer  <hans@breuer.org>
+
+	* glib/trio/makefile.msc : (new file) for msvc build
+
+	* glib/glib.def : removed some duplicated entries
+
+	* glib/gscanner.c : add same workaround for MSVC(5.0)
+	which does not allow to cast an uint64 to float.
+	Same as in gvaluetransform.c
+	Also move #include <io.h> behind inclusion of "glib.h"
+	which defines the needed G_OS_WIN32
+
+	* glib/makefile.msc.in : added gprintf.obj, trio\trio.lib
+	as well as shell32.lib
+
+	* tests/spawn-test.c : include <io.h> on win32
+
+2003-07-12  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gprintf.c: Doc additions.
+
+2003-07-10  Joel Brich <joel.brich@laposte.net>
+
+	* configure.in: Added "eo" to ALL_LINGUAS.
+
+Wed Jul  9 16:27:26 2003  Manish Singh  <yosh@gimp.org>
+
+	* glib/gmain.c (g_main_context_unref_and_unlock): check if
+	context->poll_chunk is set before trying to destroy it. For example,
+	this can happen if no sources are added to a context before it is
+	freed.
+
+2003-07-09  Morten Welinder  <terra@gnome.org>
+
+	* glib/gprintf.c (g_vasprintf): Avoid var declaration after
+	statement.
+
+2003-07-09  Matthias Clasen  <maclas@gmx.de>
+
+	Support for one-time initialization functions.  (#69668, Sebastian
+	Wilhelmi) 
+
+	* configure.in: Check whether double checked locking is safe,
+	define g_once() in glibconfig.h accordingly.
+	* glib/gthread.h: Add GOnce, GOnceStatus, G_ONCE_INIT and g_once_impl.
+	* glib/gthread.c (g_once_impl): Fallback implementation using a
+	mutex if double checked locking is unsafe.
+	* tests/thread-test.c: Add tests for g_once().
+
+2003-07-02  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strfreev): Move docs inline, document behavior 
+	for NULL. (#116439, Steve Chaplin)
+
+2003-06-25  Abigail Brady  <morwen@evilmagic.org>
+ 
+ 	* glib/gconvert.c (g_convert_with_fallback): Use C99 style \uxxxx
+ 	and \Uxxxxyyyy escapes instead for fallback instead of perl-style
+ 	\X{xxxx} ones, fixing bug #114284.
+
+2003-06-25  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c (g_io_channel_unix_new): Pass real &optval and
+	&optlen to getsockopt() instead of NULL. Don't remember why I
+	thought that NULL could be used (as we don't actually use the
+	returned value for anything), the Platform SDK documentation
+	doesn't imply so.
+
+2003-06-19  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c (g_path_get_basename): Move the documentation
+	inline and add details.  (#108505)
+
+2003-06-18  Matthias Clasen  <maclas@gmx.de>
+
+	* acinclude.m4 (JH_PATH_XML_CATALOG, JH_CHECK_XML_CATALOG): New
+	macros to check for XML catalog contents and path, borrowed from
+	gtk-doc. 
+
+	* configure.in: New option --enable-man to enable regeneration of
+	man pages from Docbook, if the necessary tools are found.
+
+2003-06-17  Matthias Clasen  <maclas@gmx.de>
+
+	* acinclude.m4 (JH_PATH_XML_CATALOG, JH_CHECK_XML_CATALOG): New
+	macros to check for XML catalog contents and path, borrowed from
+	gtk-doc. 
+	
+	* configure.in: New option --enable-man to enable regeneration of
+	man pages from Docbook, if the necessary tools are found.
+
+2003-06-15  Tor Lillqvist  <tml@iki.fi>
+
+	* glib-zip.in (DLLDIR): Test where the DLLs actually are.
+
+	* README.win32: Point to FSF's binary Win32 distributions of
+	libiconv and gettext-runtime.
+
+2003-06-11  Tor Lillqvist  <tml@iki.fi>
+
+	* glib-zip.in (DEVZIP): libtool 1.5 installs DLLs in the bin
+	subdirectory, so get them from there.
+
+	* glib/gwin32.c (g_win32_getlocale): Use "sr@Latn" and "sr" in the
+	same way as the po files for Serbian in Latin and Cyrillic script.
+
+2003-06-11  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* configure.in: Remove false &. Spotted by Albert Chin
+	<gtk-devel-list@thewrittenword.com>.
+
+2003-06-08  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c: Fix indentation and spacing. Use
+	INADDR_LOOPBACK instead of inet_addr("127.0.0.1") and
+	gethostbyaddr().
+
+Sat Jun  6 16:18:10 2003  Andrew Lanoix  <alanoix@umich.edu>
+
+	* glib/giowin32.c: Resolved thread deadlocks in socket 
+	ichannel code to support Add-Cancel-Add watch functionality 
+	on windows. Also cleaned up socket error handling to not 
+	segfault and do the right thing.
+	
+Fri Jun  6 10:24:23 2003  Hidetoshi Tajima  <hidetoshi.tajima@sun.com>
+
+	* m4macros/glib-gettext.m4: Test for Solaris native gettext 
+	in libc, seeing if it supports GNU catalog format (#85217).
+	
+Thu Jun  5 23:40:31 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c: When dispatching a source that is
+	!CAN_RECURSE, temporarily remove any file descriptors
+	that that source has registered from the main loop, to keep
+	recursive main loops from busy-waiting if input
+	becomes available on one of those file descriptors.
+	(#112222, Christian Krause)
+
+	* glib/gmain.c (g_source_set_priority): Properly
+	remove the source from the context's source list
+	and reinsert it sorted, rather than simply setting
+	source->next/prev to NULL! (#114274)
+
+2003-06-06  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstring.c (g_string_append_printf_internal): Use
+	g_vasprintf() and g_string_append_len(), thus enabling embedded
+	nuls in the result of g_string_printf().  (#92492, Owen Taylor)
+
+	* tests/string-test.c: Add a test for embedded nuls in the
+	result of g_string_printf().
+
+	* glib/gprintf.[ch]: Synchronize argument names with headers and docs.
+	(g_vasprintf): An implementation of vasprintf(), code was lifted
+	from g_strdup_vprintf().  (#112365)
+
+	* glib/gstrfuncs.c (g_strdup_vprintf): Just use g_vasprintf().
+
+2003-06-05  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giochannel.h
+	* glib/gmain.h: Remove bogus (Win32-only) declaration of
+	g_main_poll_win32_msg_add(). No such function exists.
+
+	* glib/gmain.c (g_poll) [Win32]: Use g_win32_error_message() for
+	better warning messages.
+
+2003-06-04  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gunidecomp.h (combine): Fix typo (#114375). Also, make the
+	function static.
+
+2003-06-03  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* configure.in: Test for pthread_setschedparam. If not existant,
+	disable priorities. (#104718)
+
+Mon Jun  2 14:18:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+	Patch from Jeffrey Stedfast <fejj@ximian.com> (#104825)
+ 
+ 	* glib/gspawn.c (read_data): Don't read() into '&buf', while this
+ 	is technically okay - it is clearer as just 'buf'.
+ 	(write_all): New helper function that handles write() interrupts.
+ 	(write_err_and_exit): Use write_all() instead of write().
+ 	(fork_exec_with_pipes): Same here.
+	
+Sun Jun  1 09:42:36 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_error_get_from_g_error): Put 
+	the g_return_val_if_fail() in the right place.
+
+Fri May 31 1:17:45 2003  Ray Strode  <halfline@hawaii.rr.com>
+
+	* glib/giochannel.c (g_io_channel_error_from_errno):
+	Fix typo: should be G_IO_ERROR_UNKNOWN not
+	G_ERROR_ERROR_UNKNOWN
+
+Fri May 30 19:23:47 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gstrfuncs.c (g_ascii_strncasecmp)
+	* glib/gstrfuncs.c (g_ascii_strcasecmp): Use TOLOWER()
+	macro instead of g_ascii_tolower() (#107138)
+
+Fri May 30 19:09:25 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: Backport better handling
+	of ALL_LINGUAS from gettext.m4. (#103808, Andras Salamon)
+
+Fri May 30 18:46:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: expand $exec_prefix as
+	well as $prefix. (#107290, reported by Morten Welinder,
+	patch from Raja Harinath)
+
+Fri May 30 17:24:23 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-gettextize.in: Quote $srcdir to handle $srcdir
+	with spaces (#107850, Evan Martin)
+
+Fri May 30 16:48:26 2003  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* glib/giochannel.c (g_io_channel_error_from_errno):
+ 	Silently return G_IO_CHANNEL_ERROR_FAILED for EINTR,
+ 	since close() can return EINTR. (#11842, Balazs Scheidler)
+ 
+Fri May 30 15:51:43 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/giochannel.c (g_io_error_get_from_g_error): 
+	Do a g_return_val_if_fail() on err == NULL to be a
+	bit more robuts on buggy IO channel implementations.
+	(#113396, Dan Winship)
+
+Tue May 27 19:56:35 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmacros.h: __PRETTY_FUNCTION__ was made a non-token
+	before gcc-3.0.0 for C++. (Fix from Martin Kretzschmar,
+	#113797)
+
+2003-05-28  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/patterntest.c: Remain silent when sucessful. 
+
+	* tests/Makefile.am: Add patterntest to make check.  (113143)
+
+2003-05-27  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strdup): Use memcpy instead of
+	strcpy. (#106988, Christian Biere)
+
+2003-05-27  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strdup): Use memcpy instead of
+	strcpy. (#106988, Christian Biere)
+
+2003-05-23  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gutf8.c: Fix typo in UNICODE_VALID (related to #107427).
+
+2003-05-23  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/guniprop.c: Remove stale comment.
+
+2003-05-22  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/guniprop.c: Update g_unichar_iswide to Unicode 4.0 (#113404).
+
+2003-05-21  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/guniprop.c: Fix obscure typo in case conversion routine
+	(#113469).
+
+Tue May 20 14:14:55 2003  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: wrap 64-bit MIN/MAX limit constants in
+	G_GINT64_CONSTANT. Fixes bug #108699.
+
+2003-05-19  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gunibreak.c: Fix cut-and-pasto: g_unichar_break_type should
+	return G_UNICODE_BREAK_UNKNOWN if the character is greater than
+	G_UNICODE_LAST_CHAR.
+
+2003-05-19  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/glist.c: Remove unused function g_list_sort2 (bug #113203).
+
+2003-05-19  Noah Levitt  <nlevitt@columbia.edu>
+
+	* glib/gunidecomp.c: Fix off-by-one error in
+	g_unicode_canonical_ordering (bug #113260).
+
+2003-05-19 Arafat Medini <lumina@silverpen.de>
+
+	* ar.po: Added ar to ALL_LINGUAS
+
+2003-05-17  Telsa Gwynne  <hobbit@aloss.ukuu.org.uk>
+
+	* configure.in: Added cy to ALL_LINGUAS
+
+2003-05-05  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_ascii_dtostr): 
+	(g_ascii_formatd): 
+	(g_ascii_strtod): Some doc fixes.  (#111805)
+
+2003-05-05  Christian Rose  <menthos@menthos.com>
+
+	* configure.in: Added sr and sr@Latn to ALL_LINGUAS.
+
+Thu Apr 24 19:12:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* autogen.sh (have_libtool): Accept libtool-1.5. (#111483)
+
+2003-04-09  Matthias Clasen  <maclas@gmx.de>
+
+	* INSTALL: 
+	* INSTALL.in: Remove list of configuration flags, since these 
+	are already documented in docs/reference/glib/building.sgml.
+
+2003-04-08  Matthias Clasen  <maclas@gmx.de>
+
+	* INSTALL: Move Cross-compliation information to reference manual.
+
+Mon Apr  7 13:40:28 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c (g_main_loop_run): When waiting for
+	the main loop to be freed up, wait on either
+	!loop->is_running or got_ownership, not both.
+	(Caused gtk_dialog_run() not to work in other
+	threads, reported by Jean-Yves Lefort)
+
+2003-04-07  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutf8.c (g_utf8_strlen): Warn if p == NULL && max != 0.
+	(#110087) 
+
+2003-04-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add g_string_chunk_insert_len.
+
+2003-04-01  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstring.[hc] (g_string_chunk_insert_len): New function, to
+	insert possible non-nul-terminated byte sequences into a string
+	chunk.  (#96279)
+	(g_string_chunk_insert): Implement in terms of
+	g_string_chunk_insert_len() now.
+
+2003-03-30  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstring.c (g_string_new): Optimize the common cases 
+	(init == NULL or init == "") a bit.
+	* glib/gmarkup.c, glib/gmessages.c, glib/gscanner.c,
+	glib/gshell.c, glib/gspawn-win32-helper.c, glib/gspawn-win32.c,
+	glib/gspawn.c, gobject/gvaluetransform.c: replace uses of 
+	g_string_new ("") by g_string_new (NULL).  (#106973, Morten Welinder)
+
+	* glib/gutf8.c (UNICODE_VALID): Update to Unicode 3.1 and optimize
+	a bit.  (#107427, Noah Lewitt)
+
+	* glib/libcharset/config.charset: Add cp1251 support for Solaris.
+	(#104738, Hidetoshi Tajima)
+
+	* glib/gconvert.c (UnsafeCharacterSet): Get rid of
+	UNSAFE_DOS_PATH.
+	(acceptable): Align with RFC2396.  (#59653)
+
+	* tests/uri-test.c: Adjust to the changes above.
+
+2003-03-26  Christian Rose  <menthos@menthos.com>
+
+	* configure.in: Added "yi" to ALL_LINGUAS.
+
+2003-03-19  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/giochannel.c (g_io_channel_read_to_end): Fix docs.
+
+2003-03-19  Anders Carlsson  <andersca@codefactory.se>
+
+	* configure.in: Bump version to 2.3.0
+
+2003-03-14  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gthread.c: Do not define function g_thread_init_glib, if
+	not G_THREADS_ENABLED. It's not called bu g_thread_init() then,
+	but calls other, in that case undefined functions.
+
+2003-03-06  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmain.c (g_main_context_find_source_by_id): 
+	(g_main_context_find_source_by_funcs_user_data): Fix FALSE/NULL
+	confusion.  (#107646, Morten Welinder)
+
+2003-03-01  James Henstridge  <james@daa.com.au>
+
+	* autogen.sh: require automake 1.7.  Add calls to libtoolize and
+	gtkdocize.  Clean up some of the error messages.
+
+	* configure.in: move version declaration to the top of the file
+	(before AC_INIT), using M4 macros.
+	GLIB_AC_DIVERT_BEFORE_HELP() calls no longer necessary, due to use
+	of M4 macro expansion in help messages instead.
+	Convert AC_ARG_WITH/AC_ARG_ENABLE calls to use AC_HELP_STRING to
+	format help strings.  Use quadrigraphs to get square brackets to
+	show correctly.
+	Replace gtk-doc checks with a call to GTK_DOC_CHECK() macro.
+	Use AC_CONFIG_COMMANDS([glibconfig.h], ...) to output
+	glibconfig.h, so that "./config.status glibconfig.h" works.
+	Add an extra AC_CONFIG_FILES call listing other files we want
+	generated by config.status protected by an "if false" block.  This
+	way automake generates the rules needed to rebuild the files for
+	us.
+	Add quotes in various places.
+
+	* docs/reference/*/Makefile.am: convert to use the common
+	gtk-doc.make file.  This localises the complexity to a single
+	makefile fragment maintained with gtk-doc itself.
+
+	* */Makefile.am: remove unneeded rules to build win32 files with
+	config.status.  Automake now does this for us.
+	Replace instances of @FOO@ with $(FOO) where appropriate -- this
+	allows automake to do a better job checking the makefile.
+	Add some files to DISTCLEANFILES where appropriate
+
+	* Makefile.am: use the DISTCHECK_CONFIGURE_FLAGS variable to
+	ensure that --enable-gtk-doc is passed to configure during a
+	distcheck.  Remove the custom distcheck, since the standard one
+	will now do.
+
+	* gobject/Makefile.am: switch to BUILT_SOURCES, since that now
+	works.
+
+2003-02-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strdup_vprintf): Use g_strndup, not
+	g_strdup, since we know the length in advance.
+
+	* glib/gunidecomp.c (g_unicode_canonical_decomposition): Use
+	g_malloc instead of directly using malloc.
+
+2003-02-25  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add a couple of missing entries, thanks to Cedric
+	Gustin. Thread initialization function changes according to
+	Sebastian Wilhelmi's changes below (2003-02-14).
+
+2003-02-24  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gdir.c (g_dir_read_name): Clarify documentation.
+
+2003-02-18  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* configure.in: Make glib_thread_test not unnecessarily convert
+	between int and void*. (#106278). Let main return int.
+
+	* configure.in: Add an argument to specify the default thread
+	attribute to glib_thread_test. Disappeared somewhere between 2.0
+	and 2.2.
+
+2003-02-14  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	Fixes for #101264 and #99372:
+
+	* glib/gconvert.h, glib/gmain.c, glib/gmem.c, glib/gmessages.c,
+	glib/grand.c: Include gthreadinit.h and rename the thread
+	initialization functions a bit and let them start with _, so that
+	later we can stop exporting them.
+	
+	* glib/gmem.c, glib/gmessages.c: Move the g_private_new() calls to
+	new functions. They have to be called after setting
+	g_threads_got_initialized to TRUE (see #101264).
+
+	* glib/gthread.c: Include gthreadinit.h. Renamed g_mutex_init() to
+	g_thread_init_glib(). Call the thread initialization functions
+	(which are not allowed to call g_private_new), then set
+	g_threads_got_initialized to TRUE, then call the other thread
+	initialization functions (which must not call anything but
+	g_private_new()).
+	
+	* glib/gthreadinit.h: New private header to cleanly declare all
+	thread initialization functions.
+
+	* gthread/gthread-impl.c: Include gthreadinit.h. In
+	g_thread_init() just call g_thread_init_glib(), which in turn calls the
+	other functions (see #99372).
+ 	
+	* glib/Makefile.am: Added gthreadinit.h.
+
+2003-02-12  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* configure.in: Make GLib recognize Tru64Unix thread system. (#103020)
+
+2003-02-11  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (EXTRA_DIST): Include ChangeLog.pre-2-2.
+
+	* glib-zip.in: Include also the gtk-doc/html documentation in the
+	developer package.
+
+	* README.win32: Updates.
+
+2003-02-11  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* AUTHORS: Changed my e-mail address.
+	* glib/grand.c: Removed my e-mail address.
+
+2003-02-10  Mohammad DAMT  <mdamt@bisnisweb.com>
+
+	* po/id.po: Added Indonesian translation
+	* configure.in: Added "id" to ALL_LINGUAS
+
+2003-02-06  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmessages.h: 
+	* glib/gmem.h: 
+	* glib/ghash.h: 
+	* glib/gasyncqueue.h: 
+	* glib/garray.h: 
+	* glib/ghook.h: 
+	* glib/gtypes.h: Fix a bunch of typos in header comments.
+	(#102422, Morten Welinder)
+
+2003-02-04  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c (g_io_channel_unix_new): Fix typo: Should be
+	SOCKET_ERROR, not SO_ERROR. Noticed by Daniel Kaufmann.
+	
+	Merge from stable branch: 
+
+	Fix for bug #104014, reported by Alex Shaduri:
+	
+	* glib/gspawn-win32.c (protect_argv): New function. Add
+	double-quotes around argv elements that need it, and escape
+	embedded double-quotes with backslash.
+	(do_spawn_with_pipes) Call protect_argv().
+
+	* glib/gspawn-win32-helper.c (WinMain): Call protect_argv().
+
+	* glib/gspawn.c (g_spawn_async_with_pipes): Document argument
+	vector vs. command line details on Win32.
+	(g_spawn_command_line_sync): Improve documentation about
+	backslashes in the command line on Windows.
+
+Thu Jan 30 16:45:13 2003  Owen Taylor  <otaylor@redhat.com>
+
+        * Makefile.am: Remove references to glib.spec.
+        (#102231)
+
+        * configure.in: Don't generate glib.spec.
+
+Tue Jan 28 16:08:56 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* m4macros/glib-gettext.m4: If msgfmt isn't found,
+	unset gt_cv_have_gettext. (#102552, Tim Mooney)
+
+Tue Jan 28 15:18:24 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* autogen.sh (have_automake): Fix version in complaint
+	message about automake. (#104366, Rich Burridge)
+
+2003-01-22  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* configure.in: Added Bengali (bn) to ALL_LINGUAS
+
+2003-01-21  Christian Rose  <menthos@menthos.com>
+
+	* configure.in: Added "mn" to ALL_LINGUAS.
+
+2003-01-20  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* configure.in: Added Farsi (fa), Italian (it), Latvian (lv),
+	Macedonian (mk) to ALL_LINGUAS
+
+2003-01-16  Daniel Yacob <locales@geez.org>
+
+	* configure.in: added am to ALL_LINGUAS
+	
+2003-01-12  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add some missing entries. Thanks to Kenichi SUTO.
+
+2003-01-05  Tor Lillqvist  <tml@iki.fi>
+
+	* README.win32: Updates.
+
+	* configure.in: Don't use -lm in TRIO_LIBS on Windows, with no
+	libm. (Mingw has a dummy libm.a, but the .pc file should be
+	useable by MSVC users, too.)
+
+2003-01-25  Ron Steinke  <rsteinke@w-link.net>
+
+	(Ancient, binary compatible fixes found sitting in my tree)
+
+	* Added early checks for count == 0 and buf == NULL in g_io_channel_read()
+
+	* Better error message for EFAULT in  g_io_channel_error_from_errno()
+
+2003-01-04  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (BUILT_EXTRA_DIST): Don't distribute glib-zip.
+
+	* {glib,gmodule,gobject,gthread}/Makefile.am:
+	[Win32] Install also the .def files, to help users generate
+	import libraries for other compilers. Uninstall, too.
+
+	* glib-zip.in: Include .def files from above.
+
+	* glib/giowin32.c (g_io_win32_fd_get_flags_internal): Don't claim
+	broken pipes are unreadable. (Well, they are, but read() handles
+	it, and treats it like EOF.)
+
+Thu Jan  2 16:19:15 2003  Manish Singh  <yosh@gimp.org>
+
+	* configure.in: use AC_COMPILE_IFELSE instead of AC_TRY_COMPILE for
+	tests for inline keywords. Fixes #101976.
+
+2003-01-02  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.h: Correct the comment telling what headers have
+	the declarations of some POSIXish functions.
+
+	* glib/giowin32.c (g_io_win32_fd_get_flags_internal): Fix braino:
+	The checks for readability/writeability were backwards.
+
+2003-01-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gmessages.c (ensure_stderr_valid): New function, parallel
+	to ensure_stdout_valid(). #defined as empty on Unix. Move the
+	alloc_console_called static flag inside these two functions.
+	(ensure_stdout_valid, ensure_stderr_valid): Check the C stdout and
+	stderr streams for validity, instead of what GetStdHandle() returns.
+	(mklevel_prefix): Do use either stderr or stdout on Windows,
+	too. Otherwise g_warning() messages (that are just warnings, by
+	definition) will get mixed with proper stdout output. Noticed in
+	GIMP's gimpconfig-dump.
+	(strdup_convert, mklevel_prefix, g_printerr): Call
+	ensure_stderr_valid() before trying to use stderr.
+	(g_logv): [Win32] Convert message to current codepage before
+	display with MessageBox().
+
+2002-12-28  Tõivo Leedjärv  <toivo@linux.ee>
+
+	* configure.in: Added et to ALL_LINGUAS.
+
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
new file mode 100644
index 0000000..41a9f78
--- /dev/null
+++ b/ChangeLog.pre-2-6
@@ -0,0 +1,1683 @@
+2004-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.6.0 ===
+	
+2004-12-15  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gconvert.c: (g_filename_display_basename):
+	Fix spelling
+	Add g_return_val_if_fail.
+	
+	* glib/glib.symbols:
+	Add g_filename_display_basename
+
+2004-12-15  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/gconvert.[ch]:
+	Add g_filename_display_basename.
+
+2004-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* README.in: Updates
+
+	* NEWS: Updates.
+
+	* configure.in: Set version to 2.6.0
+
+2004-12-13  Tor Lillqvist  <tml@iki.fi>
+
+	* NEWS: Update.
+
+	* glib/glib.symbols
+	* glib/gstdio.[ch]: Add g_rmdir().
+
+2004-12-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2004-12-12  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.symbols
+	* glib/gconvert.[ch]: Implement Windows DLL ABI stability also for
+	g_filename_{to,from}_uri().
+
+2004-12-11  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gstdio.c (g_rename, g_unlink, g_remove): Add doc comments
+	about Windows restrictions on renaming and removing.
+
+	(g_remove): Mimic POSIX remove() on Windows: Try also to rmdir if
+	removal as a file fails. Document this.
+
+	* glib/gstdio.h: Clarify comment about file name encoding on
+	Windows.
+
+	* glib/gspawn-win32.c: Fix #157255. Also some refactoring of this
+	still very ugly source file.
+
+2004-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (print_help): Don't print help options
+	if the options of a specific group have been 
+	requested.  (#160645, Glynn Foster)
+
+2004-12-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_language_names): Update the returned
+	value after locale changes.  (#160271, Christian Persch)
+	(_g_utils_thread_init): Initialize the language name cache
+	before going threaded.
+
+	* glib/gthread.c (g_thread_init_glib): Call _g_utils_thread_init().
+
+	* glib/gthreadinit.h: Add _g_utils_thread_init().
+
+2004-12-06  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c (g_io_win32_finalize): Fix a write to freed
+	memory: Unlock the channel's mutex before unrefing the channel.
+
+2004-12-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Remove a no longer needed hack for 
+	libtool < 1.5.2.  (#100697, Owen Taylor, Sebastian Wilhelmi)
+
+2004-12-05  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.symbols
+	* glib/gwin32.[hc]: Implement DLL ABI stability also for
+	g_win32_get_package_installation_directory()) and
+	g_win32_get_package_installation_subdirectory().
+
+	* glib/Makefile.am (install-libtool-import-lib): Remove the DLL
+	binary compatibilty entries from the import library. They aren't
+	used by newly compiled code, so no need to have them in the import
+	library. (The "PRIVATE" keyword in the .def file is supposed to do
+	this, but not implemented in the GNU linker yet.)
+
+2004-12-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gqueue.c (g_queue_link_index): Return -1 if queue is 
+	NULL.  (#159530, Philippe Blain)
+
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version.
+
+	* === Released 2.5.7 ===
+	
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Protect the the various push/pop allocator
+	functions by #ifndef DISABLE_MEM_POOLS.  (#160215, Frederic Crozat)
+
+	* glib/makegalias.pl: Support #ifndef'ed sections.
+
+	* glib/gutils.c (g_get_system_config_dirs): Don't forget to 
+	initialize g_system_config_dirs.  (#160213, Frederic Crozat)
+
+Wed Dec  1 17:04:37 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gstring.h (g_string_append_c_inline): actually enable (and
+	fix up the length test).
+
+2004-11-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/Makefile.am (glib.def): gcc -E complains "linker input file
+	unused because linking not done" if told to preprocess the
+	glib.symbols file. Use '-' and redirection to pass it as standard
+	input instead.
+
+2004-11-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+2004-11-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gspawn-win32-helper.c (WinMain): Also check errno to detect
+	true errors from spawn*(). (#157258, reported by Bruce Hochstetler)
+
+2004-11-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmacros.h (G_GNUC_MALLOC): Define empty for gcc 2.95.
+
+	* glib/gmarkup.c (unescape_text_state_after_charref_hash): 
+	Avoid a strndup() here, noticed by Morten Welinder.
+
+2004-11-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c: Remove leftover noinline attributes.
+	(is_name_start_char, is_name_char): Avoid possible reads
+	beyond the end of g_ascii_table.
+
+	* glib/Makefile.am: Use the perl found by configure.  (#149826,
+	Morten Welinder)
+
+Sun Nov 28 13:13:56 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/abicheck.sh: filter G_GNUC before PRIVATE so $ is still true.
+
+	* tests/utf8-validate.c: cast pointer math to gint for error print
+	message.
+
+Sun Nov 28 12:07:29 2004  Manish Singh  <yosh@gimp.org>
+
+	* tests/utf8-validate.c: minor comment fix.
+
+2004-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.h:
+	* glib/gkeyfile.h:
+	* glib/gmem.h: 
+	* glib/gstrfuncs.h:
+	* glib/gunicode.h:
+	* glib/gutils.h: Mark functions with G_GNUC_MALLOC when appropriate.
+
+	* glib/glib.symbols: Add G_GNUC_MALLOC annotations.
+
+	* glib/gmacros.h (G_GNUC_MALLOC): Add a macro for 
+	__attribute__((__malloc__)).  (#61780)
+
+2004-11-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.[hc]
+	* glib/glib.symbols: [Win32] Make also g_get_user_name() and
+	g_get_real() name return UTF-8. As for the similar changes to fix
+	#101792, for DLL ABI stability we use preprocessor defines to get
+	the new UTF-8 versions, and keep the old names for versions
+	returning strings in the system codepage.
+
+	Fix g_get_tmp_dir() and g_get_home_dir() to actually return UTF-8
+	as was intended in the fix for bug #101792. (#159664, noticed by
+	Robert Ögren)
+
+2004-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c: Optimizations; don't scan the entire text
+	in find_current_text_end(), split unescape_text() into multiple
+	functions.  (#159001, Havoc Pennington)
+
+2004-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gspawn.c (g_spawn_async_with_pipes): Update the @flags
+	documentation with references to GChildWatch and 
+	g_spawn_close_pid().  (#136255, noted by Owen Taylor)
+
+2004-11-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_parse_value_as_string): 
+	Don't access invalid memory address if p wasn't 
+	increased.  (#159557, Frederic Crozat)
+
+2004-11-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/strtod-test.c (main): Add a testcase for the previous fix.
+
+	* glib/gstrfuncs.c (g_ascii_strtod): Make it work again for floats
+	starting with a decimal point, like .75  (#156421, Hans Breuer)
+
+Thu Nov 25 14:02:43 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/abicheck.sh: filter out G_GNUC stuff when doing the compare.
+
+	* glib/gmessages.c (g_assert_warning): call abort() at the end, so
+	gcc doesn't warn.
+
+2004-11-25  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* configure.in: Add «nb» to ALL_LINGUAS.
+
+2004-11-24  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c (g_win32_error_message,
+	get_package_directory_from_module,
+	g_win32_get_package_installation_directory,
+	g_win32_get_package_installation_subdirectory): Use wide character
+	API when available. Document that string parameters and return
+	values are in UTF-8.
+
+2004-11-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutf8.c: Replace g_utf8_validate() with an
+	optimized version, and clarify the docs a bit.  (#159131,
+	Owen Taylor)
+
+	* tests/Makefile.am (test_programs): Add utf8-validate.
+
+	* tests/utf8-validate.c: Unit tests for g_utf8_validate().
+
+2004-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.h: Don't mark g_option_error_quark() as const,
+	to be consistent with all the other error_quark functions. 
+	(technically they are const, but since these are called only
+	in error paths, giving the compiler better optimization 
+	opportunities doesn't matter much)
+
+2004-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix a problem with the PLT reduction changes which caused the
+	internal aliases to lose all attributes.
+	
+	* glib/glib.symbols: Add attribute annotations.
+	* glib/makegalias.pl: Keep attribute annotations, but strip PRIVATE.
+	* glib/Makefile.am (glib.def): Strip attribute annotations, but keep 
+	PRIVATE.
+
+2004-11-21  Hans Breuer  <hans@breuer.org>
+
+	* **/makefile.msc : updated
+
+2004-11-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-2.0.m4 (AM_PATH_GLIB_2_0): Support gmodule-no-export.
+
+	* Makefile.am (EXTRA_DIST): 
+	* configure.in (AC_CONFIG_FILES): Add gmodule-no-export-2.0.pc.in 
+
+	* gmodule-no-export-2.0.pc.in: Add a variants of gmodule-2.0.pc.in
+	which doesn't add -Wl,--export-dynamic, since Pango or GTK+ don't
+	need it.  (#125627, Owen Taylor)
+
+2004-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Define S_ISREG() on windows, since it
+	is not present there.  (#158469, Kazuki IWAMOTO)
+
+2004-11-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_load_from_fd): Use S_ISREG(), since
+	S_IFMT and S_IFREG are apprarently missing on some systems (they 
+	are SUS, but not Posix).  (#158263)
+
+2004-11-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version.
+
+	* === Released 2.5.6 ===
+	
+2004-11-11  J. Ali Harlow  <ali@juiblex.co.uk>
+
+	* gobject/Makefile.am:
+	* glib/Makefile.am (gtk.def): Use embedded tab rather than '\t'
+	escape sequence. (#157951)
+
+2004-11-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gconvert.c (g_get_filename_charsets): Fix typo in doc
+	comment.
+
+2004-11-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Updates
+
+Mon Nov  8 10:45:50 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gasyncqueue.c
+	* glib/ghook.c
+	* glib/giochannel.c: g_return_if_fail -> g_return_val_if_fail
+
+	* glib/gmain.c: Ditto, plus also make g_main_context_ref() actually
+	return the passed in pointer.
+
+2004-11-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gnode.h (enum GTraverseFlags): Add G_TRAVERSE_LEAVES
+	and G_TRAVERSE_NON_LEAVES as alternative names for 
+	G_TRAVERSE_LEAFS and G_TRAVERSE_NON_LEAFS, which are
+	grammatically brutal.  (#138853, Morten Welinder)
+	
+	* glib/gasyncqueue.[hc]:
+	* glib/ghook.[hc]: 
+	* glib/gmain.[hc]:
+	* glib/giochannel.[hc]: Make g_io_channel_ref(), 
+	g_main_context_ref(), g_hook_ref(), g_async_queue_ref()
+	return the passed in pointer. (#151663, Manish Singh)
+
+	* glib/gmain.c: Initialize child_watch_count to 1, so 
+	that we don't miss the very first child if it exits 
+	before we set up the child watch. In that case we had 
+	previously source->count == child_watch_count == 0, 
+	causing g_child_watch_check() to skip the waitpid() 
+	call.  (#154827, Gustavo Carneiro)
+
+	* glib/gmain.c (g_child_watch_source_init_single) 
+	(g_child_watch_source_init_multi_threaded): Use sigaction()
+	instead of signal().  (#136867, Jonas Jonsson, patch by
+	Archana Shah)
+
+2004-11-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_any_init): Work around an bug
+	in Mac OS < 10.3.  (#156446, Dave MacLachlan)
+
+2004-11-06  Tor Lillqvist  <tml@iki.fi>
+
+	* glibconfig.h.win32.in: Cosmetics: move the G_GNUC_INTERNAL
+	define to the same place where it is in a configure-generated
+	glibconfig.h
+
+2004-11-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/strtod-test.c: Portability fixes and extra sanity
+	checks.  (#157453, Morten Welinder)
+
+2004-11-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c (g_ascii_strtod): Handle numbers like
+	1e1, nan, -infinity. Also try harder to preserve errno.  
+	(#156421, Morten Welinder)
+
+	* tests/strtod-test.c: Add testcases.
+
+2004-11-04  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/goption.h (enum GOptionFlags): Add G_OPTION_FLAG_REVERSE,
+	to reverse the sense of a G_OPTION_ARG_NONE (boolean) option.
+
+	* glib/goption.c (parse_arg): Obey the above flag.
+
+	* glib/gconvert.c (g_filename_display_name): Document that the
+	result is guaranteed to be non-NULL.
+
+	* glib/gfileutils.c (get_contents_stdio, get_contents_regfile,
+	get_contents_posix, get_contents_win32, g_file_open_tmp,
+	g_file_read_link): Use g_filename_display_name() for error
+	messages.
+	(g_mkstemp): Document that the template should be in the GLib file
+	name encoding.
+	(g_file_open_tmp): Ditto. Also document that the actual name
+	returned is also in the GLib file name encoding.
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c (g_filename_display_name): New function 
+	to convert a filename to a UTF-8 string for display 
+	purposes.  (requested by Alex Larsson)
+	
+	* glib/gconvert.c (g_get_filename_charsets): New function 
+	to return the encodings which are tried when converting a 
+	filename to UTF-8. (#151465, François Gagné)
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.5.5 ===
+
+	* NEWS: Updates
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Add new functions.
+
+	* glib/gconvert.c: Fix doc comment for 
+	g_get_filename_charsets().
+
+	* glib/gconvert.c (g_filename_display_name): New function to
+	convert a filename to a UTF-8 string for display purposes.
+	(g_get_filename_charsets): New function to return the 
+	encodings which are tried when converting a filename to 
+	UTF-8.
+
+	* glib/goption.c (g_option_context_parse): Document that
+	this function may not return.
+
+2004-11-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h: Make gtkdoc-scan happy by removing spaces
+	between gchar and *.
+
+2004-11-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gstdio.c (g_lstat): Implement correctly also on Unix
+	systems without lstat(). (#157038, Morten Welinder)
+
+2004-11-01  Ray Strode <rstrode@redhat.com>
+
+	* glib/gkeyfile.c:
+	(g_key_file_get_locale_string): don't return an
+	error if we come across a value with invalid utf8 or
+	if we don't find a translated string. Just fallback
+	to the untranslated string (Mark McLoughlin, bug
+	#156790).
+	
+	* glib/gkeyfile.c:
+	(g_key_file_init), (g_key_file_clear): track the
+	actual start GKeyFileGroup rather than just its name
+	(g_key_file_parse_group): allow add_group() to
+	update the start group.
+	(g_key_file_remove_group_node): update the start
+	group if it gets removed (Mark McLoughlin, bug
+	#156790).
+
+	* glib/gkeyfile.c:
+	(g_key_file_parse_string_as_value): Don't escape
+	tabs and spaces in the middle of key values.
+
+2004-11-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c:
+	* glib/gdebug.h
+	* glib/gutils.c
+	* gobject/gtype.c
+	* gthread/gthread-posix.c
+	* tests/timeloop-closure.c
+	* tests/timeloop.c: Fix sparse warnings.  (#157014, Kjartan Maraas)
+
+2004-11-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c: Documentation updates.
+
+	Handle conflicts between options in different groups. (#156808)
+	
+	* glib/goption.c (g_option_context_parse): When a long option does not
+	match exactly, try to parse it as --group-option.
+	(g_option_context_add_group): Warn if a group name conflict occurs.
+
+	* glib/goption.c (print_help): Print out the effective options, ie 
+	don't print shadowed short options, and for long options print
+	--group-option instead of --option if appropriate.
+
+2004-10-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gwin32.c: Add bits of markup to g_win32_get_windows_version()
+	docs.
+
+2004-10-31  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c: Document g_win32_get_windows_version().
+
+	* glib/gstdio.[ch]: Add g_lstat().
+
+2004-10-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c: Doc additions.
+
+	* glib/goption.c (parse_arg): Convert filenames to UTF-8 on
+	Windows.
+
+2004-10-29  Hans Breuer  <hans@breuer.org>
+
+	* glibconfig.h */makefile.msc.in : updated [and finally fixed my
+	script to produce ready to go de-in(ed) files, w/o autotools]
+
+	* */*.rc.in : updated copyrights to 2004
+
+	* glib/gutils.c : some CSIDL_* defines lacking from older SDK;
+	use the same fallback mecahnism as on *NIX where ever applicable
+
+2004-10-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/option-test.c: Add tests for the handling of
+	non-option arguments, "--" and G_OPTION_REMAINING.
+
+	* glib/goption.[hc]: #define G_OPTION_REMAINING, which is
+	a special long option name, which can be used for an option
+	in the main group which collects the non-option arguments.
+	It must be of type G_OPTION_ARG_STRING_ARRAY or 
+	G_OPTION_ARG_FILENAME_ARRAY. If the main group doesn't contain
+	an option whose name is G_OPTION_REMAINING, the non-option
+	arguments are left behind in argv as before.
+
+	* glib/goption.c: Add documentation.
+
+2004-10-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmessages.h: Mark g_assert_warning as G_GNUC_NORETURN,
+	to avoid compiler warnings.  (#156767, Owen Taylor)
+
+2004-10-29  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gstdio.c: Include also <direct.h> for mkdir() prototype
+	with MSVC. [156727, Kazuki IWAMOTO]
+
+	* glib/giochannel.h (g_io_channel_new_file): Redefine also
+	g_io_channel_new_file to the UTF-8 version on Win32. [156725,
+	Kazuki IWAMOTO)
+
+2004-10-28  Ray Strode  <rstrode@redhat.com>
+
+	* glib/gkeyfile.c
+	(find_file_in_data_dirs): clean up a leak (#156652,
+	Morten Welinder)
+	(g_key_file_load_from_fd): propagate fstat() error
+	conditions and retry read on EAGAIN (#156647, Morten
+	Welinder).  Return error if file is NOT regular, not if
+	it is regular (bug introduced from last commited bug
+	fix). 
+	(g_key_file_load_from_data_dirs): allocate enough space
+	for the terminating NULL.
+
+2004-10-28  Ray Strode  <rstrode@redhat.com>
+
+	* glib/gkeyfile.c: Don't use S_ISREG macro (#156728,
+	Kazuki IWAMOTO)
+
+2004-10-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstdio.c: Include galias.h before glib.h (#156697,
+	Christophe Fergeau)
+
+	* glib/gkeyfile.c: Add a missing "Since: 2.6" comment.
+
+2004-10-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gstdio.c: Include glib.h early to get G_OS_WIN32. Include
+	errno.h for errno.
+
+	* glib/gkeyfile.c: Include gstdio.h and use g_open().
+
+2004-10-27  Ray Strode  <rstrode@redhat.com>
+
+	* glib/gkeyfile.c:
+	 (g_key_file_load_from_fd), 
+	 (g_key_file_load_from_file): 
+	 Move file is regular check to load_from_file to use
+	 fstat() instead of race prone g_file_test().  Don't
+	 clear/init until needed. Change error messages to be
+	 more consistent.
+	 (g_key_file_load_from_data),
+	 (g_key_file_load_from_data_dirs),
+	 (g_key_file_parse_data),
+	 (g_key_file_get_value),
+	 (g_key_file_get_string),
+	 (g_key_file_set_string),
+	 (g_key_file_get_string_list),
+	 (g_key_file_set_string_list),
+	 (g_key_file_set_locale_string),
+	 (g_key_file_get_locale_string),
+	 (g_key_file_set_locale_string_list),
+	 (g_key_file_get_boolean),
+	 (g_key_file_set_boolean),
+	 (g_key_file_get_boolean_list),
+	 (g_key_file_set_boolean_list),
+	 (g_key_file_get_integer),
+	 (g_key_file_get_integer_list),
+	 (g_key_file_set_integer_list),
+	 (g_key_file_remove_key):
+	 Add more g_return_*if_fail checks for public functions.
+
+2004-10-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version.
+
+	* === Released 2.5.4 ===
+
+2004-10-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/abicheck.sh: Strip Win32 specific defs file syntax.
+
+	* NEWS: Updates. 
+
+2004-10-27  Matthias Clasen  <mclasen@redhat.com>
+
+	Introduce the idea of a filename encoding, which is 
+	*literally* the filename encoding on Unix. On Windows, 
+	use the Unicode name converted to UTF-8. (#101792,
+	Tor Lillqvist, Owen Taylor)
+	
+	* glib/gdir.[hc]: 
+	* glib/gconvert.[hc]: 
+	* glib/gfileutils.[hc]: 
+	* glib/gutils.[hc]: 
+	* glib/giowin32.c: On Windows, keep old ABI versions 
+	of GLib pathname api for DLL ABI stability. Use different 
+	names for the new-style UTF-8 versions. Hide this through 
+	a #define.
+
+	* glib/gstdio.[hc]: New files containing wrappers for
+	POSIX pathname api.
+
+	* glib/glib.symbols: Add new symbols.
+
+	* glib/makegalias.pl: Drop Win32 specific .def syntax,
+	include gstdio.h
+
+2004-10-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Fix includes. (#156500, #156499, 
+	Kazuki IWAMOTO)
+
+	* glib/Makefile.am (galias.h): Fix srcdir != builddir 
+	builds.  (#156447, Thomas Fitzsimmons)
+
+2004-10-26  Gora Mohanty  <gmohanty@cvs.gnome.org>
+
+	* configure.in: Added 'or' to ALL_LINGUAS.
+
+2004-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Include galias.h.
+	
+	* glib/gkeyfile.c (g_key_file_parse_value_as_comment): 
+	Don't compare strings and chars.
+
+	* glib/glib.symbols: Add new symbols.
+
+	* glib/gkeyfile.c (g_key_file_new): Fix docs.
+
+	* glib/gkeyfile.h: Use the same parameter names as in
+	the implementation and the docs.
+
+	* glib/gwin32.c (g_win32_get_windows_version): Make this
+	function thread-safe in the GLib style.
+	* glib/gthreadinit.h: 
+	* glib/gwin32.c (_g_win32_thread_init): New function to
+	initialize the version.
+	* glib/gthread.c (g_thread_init_glib): Call 
+	_g_win32_thread_init() from here.
+
+2004-10-26  Ray Strode  <rstrode@redhat.com>
+
+	* glib/gkeyfile.c: Add Matthias to "Written by" lines
+	 (GKeyFileGroup): add field to hold comments about groups
+	 (g_key_file_load_from_fd): return TRUE on success and
+	 FALSE on failure.  Don't close fd's opened by other
+	 parent function.  
+	 (g_key_file_load_from_file): run FILE_IS_REGULAR test
+	 before trying to open file, to save an fd from being
+	 leaked (would probably be better to use fstat()). Close
+	 fd when done with it. Return TRUE on success and FALSE
+	 on failure.
+	 (g_key_file_load_from_data): Return TRUE on success and
+	 FALSE on failure.
+	 (g_key_file_load_from_data_dirs): remove superfluous
+	 const modifier.  Return TRUE on success and FALSE on
+	 failure.  Stop trying to load files when one succeeds.
+	 (g_key_file_parse_key_value_pair): don't validate input
+	 for UTF-8 until users uses a getter that does
+	 validation.  Don't leak copy of start_group_name.
+	 (g_key_file_to_data): serialize new comment field for
+	 groups.
+	 (g_key_file_get_keys): Remove convenience code to let
+	 NULL group mean start group.  Get rid of unneeded NULL
+	 check before g_strdup.
+	 (g_key_file_get_groups): Reverse groups list before
+	 sending to user because it is maintained in backward
+	 order internally. 
+	 (g_key_file_get_value),
+	 (g_key_file_set_value): add g_return checks at top of
+	 public functions.
+	 (g_key_file_get_string), 
+	 (g_key_file_get_string_list): validate key value is UTF-8.
+	 (g_key_file_[sg]et_*comment): new functions for
+	 setting/getting comments
+	 (g_key_file_remove_comment): new function to remove
+	 comment block
+	 (g_key_file_remove_key_value_pair_node): new function to
+	 pull a key-value pair out of the list and free it.
+	 (g_key_file_remove_group_node): call
+	 g_key_file_remove_key_value_pair_node instead of 
+	 freeing the list immediately to get better statistics
+	 for approximate_size.
+	 (g_key_file_remove_group): use lookup_group_node instead
+	 of lookup_group to prevent a g_list_find call.
+	 (g_key_file_add_key): report group also when unable to
+	 find key.
+	 (g_key_file_lookup_group_node): new function to make
+	 getting the group node from a group name easier.
+	 (g_key_file_lookup_group): use lookup_group_node under
+	 the hood.
+	 (g_key_file_lookup_key_value_pair_node): new function to
+	 make getting the key-value pair from a group and key
+	 name eaiser.
+	 (g_key_file_parse_comment_as_value): new function to add '#' to the
+	 beginning of every line.
+	 (g_key_file_parse_value_as_comment): new function that
+	 attempts to be the inverse of comment as value.
+
+2004-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c: 
+	* glib/gkeyfile.c: Don't include ctype.h needlessly.  (#156424,
+	Morten Welinder)
+
+	* tests/strtod-test.c (test_string): Improve error reporting.
+
+Mon Oct 25 15:05:18 2004  Manish Singh  <yosh@gimp.org>
+
+	* autogen.sh: rm autom4te.cache, since it might interfere with
+	differing autoconf versions.
+
+	* tests/child-test.c: use GINT_TO_POINTER for g_child_watch_add
+	user data.
+
+	* glib/gfileutils.c: G_IS_DIR_SEPARATOR is defined in gutils.h now,
+	don't redefine it here.
+
+2004-10-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_remove_group_node): Don't
+	destroy the lookup map if it is NULL.
+
+2004-10-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gasyncqueue.c, glib/gatomic.c, glib/gdate.c, 
+	glib/giochannel.c, glib/gmain.c, glib/gspawn.c, 
+	glib/libcharset/localcharset.c: Apply a patch to fix
+	sparse warnings. (#154696, Kjartan Maraas)
+
+	* glib/gnulib/g-gnulib.h: Undef libc functions before defining
+	them, since they may also be macros.  (#155177, Andrea Campi)
+
+	* glib/gkeyfile.h: 
+	* glib/gkeyfile.c: Add a parser for desktop entries and
+	similar files with a .ini-like syntax.  (#139974, Ray Strode)
+
+	* glib/glib.h: Include gkeyfile.h
+
+	* glib/Makefile.am (libglib_2_0_la_SOURCES): Add gkeyfile.c
+	(glibsubinclude_HEADERS): Add gkeyfile.h
+
+	* glib/gutils.c (_g_compute_locale_variants): Make this 
+	non-static and use it in gkeyfile.c
+
+2004-10-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/uri-test.c (run_uri_list_tests): Add some
+	uri list tests.c.
+
+	* glib/gconvert.h:
+	* glib/gconvert.c (g_uri_list_extract_uris): New function to
+	split a text/uri-list data into individual uris and strip comments.
+
+2004-10-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (get_change): Don't return the wrong 
+	change.  (#155856, Lucas Rocha)
+
+2004-10-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h (G_IS_DIR_SEPARATOR): 
+	* glib/gutils.c: Make public.  (#155589, Tim-Philipp Müller) 
+
+2004-10-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.c (g_child_watch_add_full): 
+	* glib/gmain.c (g_child_watch_add): Document that GLib supports only
+	a single callback per pid. (#154828, Gustavo Carneiro)
+
+2004-10-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c: Fix some C99isms.  (#154676, Kjartan Maraas)
+
+2004-10-05  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/goption.c: (g_option_context_parse):
+	Add check for if argc is 0.
+	
+	* tests/option-test.c: (empty_test3), (main):
+	Add test case.
+	
+2004-10-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Update
+
+2004-10-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmem.c (g_mem_set_vtable): Only set vtable_set if the
+	vtable is set.  (#154352, Philippe Blain)
+
+2004-10-03  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/goption.c: (parse_arg):
+	Set arg_data on filenames. (Discovered by Mats-Ola Persson).
+	
+	* tests/option-test.c: (arg_test3), (ignore_test3), (main):
+	Add test for filename args.
+	
+2004-10-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/goption.c (g_option_context_parse): Use
+	g_path_get_basename() instead of strrchr(), so that either slash
+	is accepted on Windows.
+
+2004-09-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c: Convert filenames to UTF-8 before 
+	putting them in GErrors.  (#154078, Morten Welinder)
+
+2004-09-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Add g_assert_warning.
+
+	* glib/gmessages.h:
+	* glib/gmessages.c (g_assert_warning): Treat g_assert 
+	in the same way as g_return_if_fail and move the string 
+	constants into a helper function, which also takes 
+	care of removing the "IA__" prefix from internal aliases.
+
+	* glib/gmessages.h: Move the declaration of 
+	g_return_if_fail_warning() out of the ifdefs, so that
+	building with G_DISABLE_ASSERT works.
+
+2004-09-27  Murray Cumming  <murrayc@murrayc.com>
+
+	* glib/goptions.[h|c], glib/glib.symbols: Rename 
+	g_context_option_error_quark() to g_option_error_quark(), because that 
+	is consistent with normal naming conventions, and what bindings expect.
+
+.2004-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix #153649, Hidetaka Iwai:
+	
+	* glib/goption.c (parse_long_option): Don't forget to set parsed
+	to TRUE when parsing a long ARG_NONE option. 
+	(free_changes_list): Fix the memory management for string
+	and filename arrays.
+
+2004-09-22  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gmessages.c: [Win32] Don't ever open a console
+	window. (Which we used to do if standard output or standard error
+	are invalid, as they are for GUI applications.) These console
+	windows that open up unexpectedly have caused endless amounts of
+	confusion among end-users. (#141102, #151175)
+
+	Don't output the process id on Windows. Only output the program
+	name. If not set with g_set_prgname(), fetch the application
+	executable's name and use that.
+
+Mon Sep 20 00:35:14 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutf8.c (g_utf16_to_utf8): Add a note explaining how to
+	convert UTF-16 byte stream of ambiguous endianness.  (#152954,
+	Linus Walleij)
+
+Mon Sep 20 00:17:37 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/option-test.c (error_test3_post_parse): 
+	* tests/option-test.c (error_test2_post_parse): 
+	* tests/option-test.c (error_test1_post_parse): Don't call 
+	g_set_error () with a NULL format.  (#153103, Robert Ögren) 
+
+Mon Sep 20 00:13:48 2004  Matthias Clasen  <maclas@gmx.de>
+
+	Make GOption remove long options completely. (#153113, Robert Ögren)
+
+	* glib/goption.c (parse_long_option): Fix a wrong index.
+
+	* tests/option-test.c (ignore_test3): Test handling of unknown
+	options some more.
+
+Sun Sep 19 23:56:15 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/goption.c (g_option_context_parse): Call error_func
+	on error, not post_parse_func again.  (#153107, Robert Ögren)
+
+Sun Sep 19 23:52:35 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmessages.c (mklevel_prefix): 
+	* glib/gmessages.c (g_logv): Fix the types of some variables
+	to be GLogLevelFlags instead of guint.  (#153042, Philippe Blain)
+
+2004-09-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* Version bump
+
+	* === Released 2.5.3 ===
+
+2004-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: More updates.
+
+Thu Sep 16 18:42:46 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/abicheck.sh: don't hardcode lengths for cut, instead split on
+	the third field.
+
+Thu Sep 16 18:15:32 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gstrfuncs.c (g_strncasecmp): Make it take a guint for number
+	of characters, instead of a gsize. Technically this is incorrect,
+	but this makes it match the prototype, and this is a deprecated
+	function anyway.
+
+2004-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/Makefile.am (EXTRA_DIST): Add abicheck.sh
+
+Thu Sep 16 02:03:15 2004  Matthias Clasen  <maclas@gmx.de>
+
+	Implement the same PLT reduction technique used in GTK+:
+	
+	* glib/glib.symbols: Master list of symbols
+
+	* glib/makegalias.pl: Perl script which creates galias.h
+
+	* glib/abicheck.sh: Compares actual exports against glib.symbols 
+
+	* glib/glib.def: Removed. This file is now generated from
+	glib.symbols
+	
+	* glib/Makefile.am: Add rules to generate galias.h and glib.def,
+	and add abicheck.sh to TESTS. Don't export _-prefixed symbols.
+	
+	* configure.in: Add --disable-visibility to suppress the 
+	use of ELF visibility attributes.
+
+	* glib/*.c: Include galias.h
+
+2004-09-15  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c (g_win32_error_message): Convert message to
+	UTF-8. Technically this breaks API, but the actual use cases in
+	gdk/win32 have assumed it is UTF-8 anyway. Fix
+	documentation. (#152618, Kazuki Iwamoto)
+
+	* glib/gwin32.h: Don't define ftruncate as a macro. Was never a
+	good idea, and it clashes with newest mingw headers, which have a
+	ftruncate implementation as an inline function. Thanks to Dominik R.
+
+	* glib/gwin32.c (g_win32_ftruncate): Simplify implementation, just
+	call _chsize() in the C library.
+
+2004-09-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Update.
+
+2004-09-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmessages.c (g_return_if_fail_warning): Strip the
+	prefix "IA__" from function names, since that is what
+	GTK+ uses for the PLT-reduction aliases. 
+
+Thu Sep  9 13:52:26 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmessages.c (g_return_if_fail_warning): 
+	Include implementation of g_return_if_fail_internal().
+
+Thu Sep  9 10:37:41 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmessages.h (g_return_[val_]if_fail): Use
+	a helper function to reduce code size; omit FILE/LINE
+	when we have __PRETTY_FUNCTION__.
+
+2004-09-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_get_home_dir): Remove a misleading comment.
+
+Thu Sep  9 00:10:40 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.h: 
+	* glib/gstrfuncs.c (g_strv_length): Add a function to 
+	calculate the length of a NULL-terminated string 
+	array.  (#150455, Tim-Philipp Müller)
+
+	* tests/strfunc-test.c (main): Add a test for g_strv_length().
+
+2004-09-08  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (guess_category_value): On Win32, as last resort
+	call g_win32_getlocale() to get the current thread locale. There
+	usually aren't any POSIXish LANG or LC_* environment variables
+	present on Windows machines.
+
+	* glib/glib.def: Add g_get_language_names.
+
+2004-09-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h: 
+	* glib/gutils.c (g_get_language_names): Add a function to
+	return a list of applicable locale names.  (#95587, 
+	Hidetoshi Tajima)
+	(guess_category_value, compute_locale_variants):
+	(explode_locale, unalias_lang, read_aliases): Helper 
+	functions for g_get_language_names()
+
+	* tests/testglib.c (main): Show the results of 
+	g_get_language_names()
+
+Sun Sep  5 01:46:11 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib.def: 
+	* glib/gmessages.h: 
+	* glib/gmessages.c (g_log_set_default_handler): New
+	function to install an alternate default log 
+	handler.  (#66387, Darin Adler)
+
+2004-09-03  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Update.
+
+Wed Sep  1 20:22:39 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gdate.h:
+	* glib/gdate.c (g_date_get_iso8601_week_of_year): Add
+	a function to calculate the ISO 8601 week number of 
+	a date.  (#92579, Niklas Lundell)
+
+2004-09-01  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/goption.c: (g_option_context_parse):
+	Set program name before calling the pre-parse hooks.
+	
+2004-09-01  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/goption.c: (g_option_context_free), (print_help),
+	(g_option_context_parse):
+	Handle option contexts without a main group.
+	
+	* tests/option-test.c: (empty_test2), (main):
+	Add test case for that.
+	
+2004-08-30  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/goption.c: (g_option_context_parse):
+	Set prgname to <unknown> if argc and argv are NULL.
+	
+	* tests/option-test.c: (empty_test1), (main):
+	Add test case for that.
+	
+Sun Aug 29 23:58:38 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/ghash.c (g_hash_table_lookup): Point to 
+	g_hash_table_lookup_extended() for differentiation between
+	not-found and value-is-NULL.  (#150960, Morten Welinder)
+
+2004-08-27  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix #151193, Stepan Kasal:
+	
+	* glib/gfileutils.c (g_file_error_from_errno): 
+	* glib/gfileutils.h (enum GFileError): Add G_FILE_ERROR_NOSYS.
+
+Fri Aug 27 00:45:41 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/goption.c (g_option_context_parse): Set the program name
+	from argv[0], noticed by Masatake YAMATO.
+
+2004-08-26  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/testglib.c (main): Test the new XDG basedir functions.
+
+2004-08-25  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c (g_win32_get_windows_version): New
+	function. Returns the Windows version code like GetVersion(),
+	except that one can pretend to be running on Win9x by setting the
+	G_WIN32_PRETEND_WIN9X environment variable. This is mainly for
+	debugging purposed.
+
+	* glib/gwin32.h: Declare it. Define macros G_WIN32_WINDOWS_IS_NT_BASED 
+	and G_WIN32_HAVE_WIDECHAR_API to test Windows features at run-time.
+
+2004-08-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Post-release version bump.
+
+	* === Released 2.5.2 ===
+
+Wed Aug 25 00:25:08 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Update for 2.5.2
+
+2004-08-25  Tor Lillqvist  <tml@iki.fi>
+
+	Win32 equivalences of the XDG folders
+	
+	* glib/gutils.c (get_special_folder): New function, calls
+	SHGetSpecialFolderLocation() to get path to places like the My
+	Documents folder.
+	(g_get_any_init): Use CSIDL_PROFILE as HOME if not
+	overridden by env vars.
+	(g_get_user_data_dir): Use CSIDL_PERSONAL.
+	(g_get_user_config_dir): Use CSIDL_APPDATA.
+	(g_get_user_cache_dir): Use CSIDL_INTERNET_CACHE. Debatable...
+	(g_get_system_data_dirs): Use CSIDL_COMMON_APPDATA and
+	CSIDL_COMMON_DOCUMENTS.
+	(g_get_system_config_dirs): Use CSIDL_COMMON_APPDATA.
+
+	* configure.in: Add -lole32 to G_LIBS_EXTRA for mingw.
+
+	* glib/glib.def: Add the new functions.
+
+Mon Aug 23 16:16:35 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/goption.c (g_option_group_add_entries): remove unused
+	variable.
+
+Mon Aug 23 01:35:18 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.c (g_get_user_cache_dir): 
+	* glib/gutils.c (g_get_user_config_dir): 
+	* glib/gutils.c (g_get_user_data_dir): Don't call g_get_home_dir()
+	while holding the g_utils_global lock, simply use g_home_dir. 
+	(#150695, Jody Goldberg)
+
+2004-08-21  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c (g_io_win32_finalize): Tell select_thread to
+	break out of its loop. Prevents a thread leak. (#147392, Peter
+	Zelezny)
+
+	* glib/gunicollate.c (g_utf8_collate_key): Guard against bogus
+	return value from strxfrm(). For instance Microsoft's strxfrm()
+	returns INT_MAX on errors. (#141124)
+
+2004-08-19  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gunicollate.c (g_utf8_collate, g_utf8_collate_key): Correct
+	source and destination charset parameter order in g_convert()
+	call. (#150394, possibly also #141124)
+
+2004-08-20  Jon K Hellan  <hellan@acm.org>
+
+	* glib/goption.h: Remove trailing commas.
+
+2004-08-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Check for all four values of the
+	visibility attribute; gcc 2.96 seems to miss 
+	"default".  (#150379, Vincent Noel)
+
+2004-08-16  Christian Rose  <menthos@menthos.com>
+
+	* configure.in: Added "bs" to ALL_LINGUAS.
+
+2004-08-11  Ray Strode  <rstrode@redhat.com>
+
+	* docs/reference/glib/glib-sections.txt: 
+	* glib/gutils.[ch] (g_get_user_data_dir),
+	(g_get_user_config_dir), (g_get_user_cache_dir),
+	(g_get_system_data_dirs), (g_get_system_config_dirs): 
+	Add new XDG basedir API (bug 139973).
+
+2004-08-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmacros.h: Remove G_GNUC_INTERNAL from here.
+	* configure.in: Check whether the visibility attribute
+	works and define G_HAVE_GNUC_VISIBILITY and 
+	G_GNUC_INTERNAL in glibconfig.h correspondingly.
+
+Mon Aug  9 17:37:56 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmacros.h (G_GNUC_INTERNAL): Define empty if gcc is too old.
+
+2004-08-06  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in glib/glib.def : updated
+
+	* glib/gutils.c : avoid 'inconsitent dll linkage' by not
+	defining extern char** environ with msvc
+
+2004-08-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-gettext.m4: Require ngettext.  (#123847,
+	Danilo Segan)
+
+Thu Aug  5 20:53:00 2004  Ray Strode  <rstrode@redhat.com>
+
+	* glib/gutils.h (g_get_codeset): strdup result so caller
+	doesn't free internally managed memory.
+
+2004-08-04  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.def: Add glib_check_version.
+
+	* config.h.win32.in: Update to match what configure produces. Add
+	the G_ATOMIC_*. Define G_ATOMIC_I486 when compiling with gcc. Move
+	HAVE_INT64_AND_I64 to where the configure script puts it. Add
+	HAVE_INTTYPES_H_WITH_UINTMAX. Define intmax_t as __int64 for MSVC.
+
+Tue Aug  3 16:19:44 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/goption.c: Mark user visible strings for translation.
+
+Tue Aug  3 15:50:55 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/goption.[hc]: Pedantically use g types throughout.
+
+Tue Aug  3 14:58:20 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gutils.h: 
+	* glib/gutils.c (glib_check_version): New function to
+	check the version of GLib at runtime.  (#149175, Michael Natterer)
+
+2004-08-03  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/goption.h:
+	* glib/gtypes.h:
+	Move GTranslateFunc to gtypes.h
+	
+2004-08-02  Anders Carlsson  <andersca@gnome.org>
+
+	* glib/Makefile.am:
+	* glib/glib.h:
+	* glib/goption.c:
+	* glib/goption.h:
+	* tests/.cvsignore:
+	* tests/Makefile.am:
+	* tests/option-test.c: 
+	Add GOption.
+
+2004-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmacros.h: Add a G_GNUC_INTERNAL macro to mark function
+	declarations as internal and avoid PLT indirections for 
+	them.  (#145465, Arjan van de Ven)
+
+	* glib/gunicodeprivate.h: 
+	* glib/gthreadinit.h: 
+	* glib/gmessages.h: 
+	* glib/gdebug.h: 
+	* glib/gconvert.c: Use G_GNUC_INTERNAL for _g_charset_get_aliases(),
+	_g_debug_init(), _g_log_fallback_handler(), _g_mem_thread_init(),
+	_g_messages_thread_init(), _g_convert_thread_init(), 
+	_g_rand_thread_init(), _g_main_thread_init(), _g_atomic_thread_init(),
+	_g_mem_thread_private_init(), _g_messages_thread_private_init(),
+	_g_utf8_normalize_wc() and _g_unichar_combining_class().
+
+	* glib/gatomic.c: Include gthreadinit.h here to see the declaration
+	for _g_atomic_thread_init().
+
+Sun Aug  1 13:19:18 2004  Manish Singh  <yosh@gimp.org>
+
+	* tests/uri-test.c: move newline printing from run_from_uri_tests()
+	to run_roundtrip_tests().
+
+2004-08-01 Matthias Clasen  <mclasen@redhat.com>
+
+	* Post-release version bump
+
+        * === Released 2.5.1 ===
+
+Sat Jul 31 23:17:05 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Updates.
+
+Sat Jul 31 20:33:07 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/shell-test.c: Include a test involving consecutive
+	backslashes followed by a non-escaped doublequote.
+	
+	* glib/gshell.c (tokenize_command_line): Count consecutive
+	backslashes mod 2 to detect escaped doubleqotes.  (#127306)
+
+2004-07-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c (g_unescape_uri_string): Don't validate
+	for UTF-8 here.  (#148420, Robert Ögren)
+
+	* tests/uri-test.c (run_roundtrip_tests): Add tests for 
+	roundtrip compatibility. Going from filename to uri and 
+	back should always give you the same filename back. 
+
+2004-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/markups/valid-{9,10,11}.gmarkup: 
+	* tests/markups/fail-{37,38,39}.gmarkup: Tests for handling
+	of whitespace inside tags.
+
+	* glib/gmarkup.c (enum GMarkupParseState): Add 
+	STATE_AFTER_ATTRIBUTE_NAME and STATE_AFTER_CLOSE_TAG_NAME.
+	(g_markup_parse_context_parse): Accept whitespace between
+	attribute names, '=' and attribute values and between
+	close tag name and '>'. (#148646, Hiroyuki Ikezoe)
+
+Tue Jul 27 02:01:31 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gstrfuncs.c (g_strsplit_set): s/g_strsplit/g_strsplit_set/
+	as well.
+
+Sat Jul 24 17:50:07 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* glib/gstrfuncs.c (g_strsplit_set):
+	s/g_strtokenize/g_strsplit_set/ in docs.
+
+Fri Jul 23 10:37:50 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/type-test.c (main): Actually test G_MAXSIZE with
+	a gsize variable.
+
+2004-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix #132858, Sven Neumann, patch by James Henstridge:
+	
+	* glib-gettextize.in: modify so that mkinstalldirs will 
+	get installed into auxdir.
+
+	* Makefile.am (gettext_SCRIPTS): install mkinstalldirs.
+
+2004-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix #147651, reported by Oliver Guntermann:
+
+	* glib/gprintfint.h (_g_vasprintf): Don't wrap vasprintf(),
+	_g_gnulib_vasprintf() in a macro, since they behave 
+	differently wrt. to memory allocation.
+
+	* glib/gprintf.c (g_vasprintf): Instead, differentiate 
+	here between the three cases: system vasprintf(), 
+	_g_gnulib_vasprintf(), no vasprintf().  
+
+2004-07-20  Crispin Flowerday  <gnome@flowerday.cx>
+
+	* NEWS: Fix a typo in my name
+
+Tue Jul 20 04:31:40 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* configure.in: Bump version number
+
+Sun Jul 18 19:40:30 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* === Released 2.5.0 ===
+
+	* Makefile.am (BUILT_EXTRA_DIST): move gtk-doc.make here.
+
+Sun Jul 18 01:40:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* NEWS: Updates for 2.5.0
+
+Mon Jul 12 00:02:40 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gi18n-lib.h: Remove the ENABLE_NLS check here as well.
+
+2004-07-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdir.c (g_dir_open): Convert filename to UTF-8 
+	before using it in the error message.  (#146054, Federico
+	Mena Quintero)
+
+Thu Jul  8 00:54:32 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gi18n.h: Remove the ENABLE_NLS check, since GLib can't
+	be built without anyway.  (#135899, Murray Cumming)
+
+Mon Jul  5 18:50:27 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmessages.h (g_debug): Complete the g_log() 
+	family.  (#135730, Sven Herzberg)
+
+Mon Jul  5 18:42:30 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gnulib/Makefile.am (INCLUDES): Add top_srcdir to 
+	make srcdir != . work.  (#145166, Kaz Sasayama)
+
+Sun Jul  4 01:52:18 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* configure.in: Use a small test library instead of
+	libpthread.so for testing RTLD_GLOBAL brokenness.  (#139567,
+	Julio M. Merino Vidal)
+	
+2004-07-02  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/gatomic.c: Rename __asm to __asm__ and __volatile to
+	__volatile__ to make the file consistent. Spotted by Benoit
+	Carpentier <gtkool_2kx@yahoo.fr>.
+
+2004-07-01  John Ehresman  <jpe@wingide.com>
+
+	* glib/giowin32.c (g_io_channel_win32_init, g_io_win32_free)
+	Initialize reset_send & reset_recv fields and don't close
+	sockets unless they were created.  (#145153)
+
+Fri Jun 11 22:56:46 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gscanner.c (g_scanner_get_token_ll): Ignore a 
+	missing newline at EOF for single line comments.  
+	(#83674, Sven Neumann)
+
+Thu Jun 10 23:38:02 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/printf-test.c (TEST): Actually set any_failed on 
+	failure.  (#143552, Philippe Blain)
+
+2004-06-09  Federico Mena Quintero  <federico@ximian.com>
+
+	* tests/uri-test.c (to_uri_tests): Fix expected results (ha ha)
+	for URIs that *should* have been invalid, or viceversa.
+	(from_uri_tests): Likewise.
+
+2004-06-07  Federico Mena Quintero  <federico@ximian.com>
+
+	Fixes #140532.
+
+	* glib/gconvert.c (is_asciialphanum): Renamed from
+	is_escalphanum(); ensures that this is an ASCII character.
+	(is_asciiescalpha): Renamed from is_escalpha().
+	(hostname_validate): Use the two functions above.
+	(g_filename_to_uri): Don't convert the filename to UTF-8.
+	(g_filename_from_uri): Don't convert the filename from UTF-8.
+
+Mon Jun  7 22:25:24 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* tests/run-markup-tests.sh: Default to silence, but support
+	a -v argument to get the old output back. 
+
+2004-06-06  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_get_any_init): Check home for being
+	NULL. (#143812, Ivan Wong)
+
+Sun Jun  6 15:23:00 2004  Pawan Chitrakr  <pawan@nplinu.org>
+
+	* configure.in: Added "ne" (Nepali) in ALL_LINGUAS
+
+Fri Jun  4 19:26:47 2004  Manish Singh  <yosh@gimp.org>
+
+        * glib/galloca.h: cpp #directives should always have the "#" in the
+        first column of the the line. Do that for "#pragma alloca". Fixes
+        bug #143744.
+
+Wed Jun  2 00:57:16 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gtypes.h: Use higher precision for the mathematical
+	constants.  (#141941, Morten Welinder)
+
+Tue Jun  1 22:01:40 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gmarkup.c (advance_char): Fix an off-by-one error 
+	in g_markup_parse_context_parse().  (#142794, Morten Welinder)
+
+Sun May 16 23:23:29 2004  Matthias Clasen  <maclas@gmx.de>
+
+        Merged from 2.4:
+	
+	* glib/gcompletion.c (g_completion_add_items):
+	(g_completion_remove_items): Remove unnecessary 
+	checks.  (#142559, Morten Welinder)
+
+2004-05-15  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_get_any_init): [Win32] Only believe HOME if it
+	is an absolute path and exists. (#138618)
+
+2004-05-14  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gnulib/vasnprintf.c (vasnprintf): Handle empty digit string
+	for precision correctly. (#142400)
+
+	For backward compatibility with the Trio implementation, make "ll"
+	format modifer work on Win32, too. Change into "I64" before
+	passing to the system printf. (#142433)
+
+	* tests/printf-test.c (main): Add tests for the above.
+
+2004-05-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Merge from 2.4:
+	
+	* glib/gmain.c (block_source, unblock_source): Make these 
+	static.  (#142230, Morten Welinder)
+
+2004-05-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/giowin32.c (g_win32_print_gioflags): Remove two duplicated
+	lines. Thanks to Benoît Carpentier.
+
+Sun May  9 02:04:14 2004  Matthias Clasen  <maclas@gmx.de>
+
+	Merge from 2.4:
+	
+	* glib/guniprop.c (g_utf8_casefold): Avoid an unnecessary
+	memleak.  (#141998, Nikolai Weibull)
+
+Sat May  8 23:02:26 2004  Matthias Clasen  <maclas@gmx.de>
+
+	Merge from 2.4:
+	
+	* glib/gutils.h: Remove vestigial g_get_codeset().
+	* glib/gutils.c (g_get_codeset): Call g_get_charset().
+	(#137703, Owen Taylor)
+
+2004-05-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version number to 2.5.0.
+
+Wed May  5 23:35:44 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/gconvert.c (g_filename_from_uri): Quote the file
+	scheme to mark it as untranslatable. String change.  
+	(#133144, Danilo Segan)
+
+2004-05-03  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* configure.in: Added Walloon (wa) to ALL_LINGUAS
+
+Sun May  2 03:51:59 2004  Manish Singh  <yosh@gimp.org>
+
+	* glib/gtypes.h: check for __pentium4__ when deciding whether to
+	use bswap for GUINT32_SWAP_LE_BE_IA32(). Fixes bug #141620.
+
+2004-05-01  Hans Breuer  <hans@breuer.org>
+
+	* glib/gnulib/Makefile.am : added makefile.msc to EXTRA_DIST
+	fixes #141563, Steve Lhomme
+
+2004-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.4.1 ===
+
+	* configure.in: Version 2.4.1, interface age 1. 
+
+	* NEWS: Updates
+	
+2004-04-25  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c (g_win32_get_package_installation_subdirectory):
+	Plug memory leak. (#140770, John Ehresman)
+
+2004-04-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/libcharset/localcharset.c (_g_locale_get_charset_aliases): 
+	Reinstate LIBCHARSET_ALIAS_DIR support which got lost at some
+	point.  (#139134, Piotr Klaban)
+
+	* glib/gconvert.c (open_converter): Don't call g_strerror() here, 
+	since it can lead to infinite recursion.  (#139133, Piotr Klaban)
+
+2004-04-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/testglib.c (main): Trivial warning fix.  (#140345)
+
+	* tests/queue-test.c (main): Add some tests for off-by-one errors.
+
+	* glib/gqueue.c (g_queue_pop_nth_link): Fix an off-by-one 
+	error.  (#139703, Philippe Blain)
+
+	* tests/testglib.c (main): Add testcases for g_message() involving
+	non-printable and unsafe characters.
+
+	* glib/gmessages.c (escape_string): Don't assume that
+	string->str remains unchanged over g_string_insert() 
+	calls.  (#139030, Christophe Saout)
+
+	* glib/gstrfuncs.c (g_ascii_strtod): Fix problems when a 
+	locale-specific decimal separator directly follows a 
+	number.  (#138424, Nickolay V. Shmyrev)
+
+	* tests/strtod-test.c (main): Add some more testcases.
+
+	* glib/gmain.c (g_main_context_query): Only set time_is_current to 
+	FALSE if context->timeout is not zero.  (#137795, Christian Krause)
+
+2004-04-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/printf-test.c (main): Comment out a nonessential testcase
+	which fails on HP-UX.  (#136283, Jonas Jonsson)
+
+2004-04-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/patterntest.c (main): Add tests for the empty pattern.
+
+	* glib/gpattern.c (g_pattern_spec_new): Don't read and write out 
+	of bounds when the pattern is empty.  (#140032, Stanislav Brabec,
+	Stefan Fent)
+
+2004-04-10  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gwin32.c (g_win32_getlocale): Add new language and
+	sublanguage codes, from GNU gettext. (#137958)
+	
+	* glib/giowin32.c
+	* glib/gmain.c
+	* glib/gstrfuncs.c
+	* glib/gthread.c: Decorating variable definitions with
+	__declspec(dllexport) causes problems on Cygwin build, and isn't
+	really needed for a native Win32 build with mingw or MSVC, so
+	remove. (#138402, Roger Leigh)
+
+	* glib/libcharset/localcharset.c: Use Win32-specific code also on
+	Cygwin.
+	* tests/uri-test.c: Don't assume that local filenames are in UTF-8
+	on Cygwin, either. (#138412, Roger Leigh)
+
+2004-04-08  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+        * configure.in: Added "gu" (Gujarati) to ALL_LINGUAS.
+
+2004-04-03  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Remove AC_CYGWIN, obsolete. Don't let pthreads be
+	found on Cygwin, they don't work. (#138401, Roger Leigh)
+
+2004-03-31  Tor Lillqvist  <tml@iki.fi>
+
+	* tests/spawn-test-win32-gui.c: Minor Cygwin fix. (#138405, Roger
+	Leigh)
+
+	* tests/unicode-encoding.c (process): Use UTF-16LE explicitly also
+	on Cygwin. (#138423, Roger Leigh)
+
+2004-03-30  Adam Weinberger  <adamw@gnome.org>
+
+	* configure.in: Added en_CA to ALL_LINGUAS.
+
+2004-03-21  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+	cases where a drive letter is present. For 'a:' or 'a:foo', return
+	'a:.'. This is mostly just for consistency with the behaviour
+	without a drive letter. But very important is to for 'a:\foo' or
+	'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+	instead of backslashes.) (#137316)
+
+	* tests/dirname-test.c (main): More complete testing on Win32. If
+	a test fails, include expected and actual result in error message.
+
+Fri Mar 19 15:21:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gmain.c: Fix the accidental revert of the
+	fixes from #112222 that happened when the GChildWatch
+	code was added. (Caught by Christian Persch)
+
+Fri Mar 19 11:07:06 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* tests/atomic-test.c (main): Make computation
+	of "biggest_pointer" vaguely more portable.
+	(#137498, Jonas Jonsson)
+
+2004-03-16  Tor Lillqvist  <tml@iki.fi>
+
+	* configure.in: Define HAVE_INT64_AND_I64 also in the mingw (gcc
+	on Win32) case, where the 64-bit type is called long long, but the
+	system printf/scanf format modifier for 64-bit integers is still I64.
+
+2004-03-16  Gareth Owen  <gowen72@yahoo.com>
+
+	* configure.in: Added en_GB to ALL_LINGUAS
+
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
new file mode 100644
index 0000000..999078c
--- /dev/null
+++ b/ChangeLog.pre-2-8
@@ -0,0 +1,1483 @@
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.8.0 ===
+
+	* NEWS: Updates
+
+2005-08-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gobject/genums.c: (g_flags_get_first_value): Special-case flag
+	  value of 0. Instead of returning the first random GFlagsValue
+	  we come across, return the GFlagsValue for 0 if it exists or
+	  NULL if it does not exist. Never return the GFlagsValue for 0
+	  if the requested flags value is nonzero.
+
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version to 2.8.0
+
+2005-08-11  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_get_any_init): Use "localhost" as fallback for
+	g_get_host_name(), not "unknown".
+
+2005-08-10  Stepan Kasal  <kasal@ucw.cz>
+
+	Fix typos: Invokation --> Invocation (in various places)
+
+2005-08-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c (g_build_path_va, g_build_pathname_va):
+	Take a va_list*, not a va_list, to avoid compiler warnings
+	about uninitialized variables.
+
+2005-08-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/gobject/Makefile.am (test_programs): Add it here.
+
+	* tests/gobject/gvalue-test.c: Beginning of a test suite
+	for GValue.
+
+	* NEWS: Updates
+
+2005-08-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (_g_compute_locale_variants): Initialize
+	variables to not make gcc nervous.
+
+2005-08-08  Manish Singh  <yosh@gimp.org>
+
+	* glib/abicheck.sh: remove stray -V option to grep so it actually
+	works.
+
+2005-08-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/convert-test.c: Enable the endianness test.
+
+	* glib/gconvert.c: Make the caching of iconv descriptors
+	optional.
+
+	* configure.in: Add an --enable-iconv-cache option, and
+	default to disabling iconv caching on new enough glibc.
+	Somebody with access to Solaris systems will need to test
+	if opening/closing of iconv descriptors is enough of
+	a performance problem to warrant the caching on that 
+	platform. Note that the caching is causing correctness
+	problems in some corner cases, thus turning it off
+	is desirable unless it has severe performance implications.
+
+	* tests/convert-test.c: Add a test for 
+	endianness handling.
+
+2005-08-08  Sunil Mohan Adapa  <sunil@atc.tcs.co.in>
+
+	* configure.in: Added "te" to ALL_LINGUAS.
+
+2005-08-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/Makefile.am: Add convert-test here.
+
+	* tests/convert-test.c: Add the beginning of a testsuite
+	for g_convert() and friends. 
+
+2005-08-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Include glib_on_error_halt.
+	
+	* glib/abicheck.sh: Also check exported variables.
+
+2005-08-05  Manish Singh  <yosh@gimp.org>
+
+	* tests/refcount/closures.c: remove unused n_threads variable.
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.7.7 ===
+
+	* NEWS: Updates
+
+2005-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols:
+	* glib/gatomic.[hc]: Always export g_atomic_int_get and
+	g_atomic_pointer_get as functions, even if we have macros,
+	to avoid changing the ABI depending on configuration.
+	
+	* glib/gatomic.c: Fix the s390 implementations of 
+	g_atomic_pointer_compare_and_exchange.
+
+2005-08-04  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.h: Move the G_BEGIN_DECLS/G_END_DECLS pair outside
+	the #if/#else/#endif block. Otherwise we had G_BEGIN_DECLS without
+	matching G_END_DECLS on Unix, and G_END_DECLS without matching
+	G_BEGIN_DECLS on Win32.
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.7.6 ===
+
+	* NEWS: Updates
+
+2005-08-03  Ross Burton  <ross@burtonini.com>
+
+	* docs/reference/glib/tmpl/windows.sgml:
+	Add a long description, pointing people at Cygwin for a complete
+	Unix library.
+
+	* glib/gutils.c:
+	Document return value of g_get_host_name().
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gatomic.c: Add native atomic operations
+	for s390.
+
+	* configure.in: ... and use them on s390.
+
+2005-08-03  Ross Burton  <ross@burtonini.com>
+
+	* glib/gstdio.c:
+	Fix DocBook tag typo. (#311966)
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstdio.h: Add G_BEGIN_DECLS/G_END_DECLS.  (#312424)
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c (g_convert_with_iconv): Don't go in an
+	infinite loop if the input text ends in an incomplete multibyte
+	character.  (#312402, Sebastien Bacher)
+
+	* Bump version
+
+	* === Released 2.7.5 ===
+
+	* NEWS: Updates
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c (g_convert_with_iconv, g_convert_with_fallback):
+	Cleanup converter state after the conversion. Document streaming
+	conversion pitfalls.  (#311337)
+
+2005-08-02  Tor Lillqvist  <tml@novell.com>
+
+	* tests/refcount/objects.c 
+	* tests/refcount/properties.c 
+	* tests/refcount/signals.c: Use g_usleep() instead of sleep() for
+	portability.
+
+Mon Aug  1 23:33:47 2005  Tim Janik  <timj@imendio.com>
+
+	* tests/refcount/closures.c: test high contention on closure
+	reference counts to trigger and catch non-atomic updates.
+
+	* tests/refcount/objects.c:
+	* tests/refcount/objects2.c: 
+	* tests/refcount/properties.c: 
+	* tests/refcount/properties2.c: 
+	* tests/refcount/signals.c:
+	fixed up test and threading fundamentals. variables accessed from all 
+	threads need to be volatile. context switches are enforced by using
+	g_thread_yield(), not g_usleep(1) which may result in busy waits on 
+	some platforms. for testcode, always consider all warnings and
+	critical messages fatal. issue the currently running program on
+	stdout. improved progress indicators.
+
+	* tests/refcount/properties.c:
+	* tests/refcount/objects.c:
+	don't overdo the number of testing threads to keep the testing machine
+	usable, 2 threads can produce as much contention as 20 if executing the
+	same code.
+
+	* tests/refcount/signals.c: only start 1 thread per object. GObject 
+	doesn't provide mutually exclusive object access, but only mutually
+	exclusive reference count modification.
+
+	* tests/Makefile.am: added closures test.
+
+2005-08-01  Tor Lillqvist  <tml@novell.com>
+
+	* tests/uri-test.c: Make it pass on Win32.
+	(from_uri_tests[]): Take into consideration that on Win32 we don't
+	return "localhost" hostnames.
+	(safe_strcmp_filename): New function that considers slash and
+	backslash equal on Win32.
+	(safe_strcmp_hostname): New function that considers "localhost"
+	equal NULL on Win32.
+	(run_roundtrip_tests): Use safe_strcmp_filename() and
+	safe_strcmp_hostname().
+
+Sun Jul 31 01:50:20 2005  Tim Janik  <timj@gtk.org>
+
+	* glib/gdataset.c:
+	moved G_DATALIST_*_POINTER() macros here, because proper use requires
+	the global g_dataset_global mutex to be acquired.
+	g_datalist_id_get_data():
+	g_datalist_unset_flags():
+	g_datalist_set_flags(): properly acquire and release dataset mutex.
+
+	* glib/gdatasetprivate.h: implement G_DATALIST_GET_FLAGS() via atomic
+	pointer access to account for memory barriers. moved all other macros.
+
+2005-07-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c: Include glibintl.h, not gi18n.h, noticed
+	by Dan Winship.
+
+	* configure.in: Try -mt as compiler flag for threads, needed
+	for the HP C compiler on HP-UX.  (#163051, Paul Cornett)
+
+	* glib/ghash.c (g_hash_table_foreach): Fix a typo in the 
+	docs.  (#311569, Ross Burton)
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version 
+
+	* === Released 2.7.4 ===
+
+	* NEWS: Updates
+
+2005-07-20  Manish Singh  <yosh@gimp.org>
+
+	* tests/refcount/signals.c: use G_CALLBACK for signal connections.
+
+2005-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gthreadpool.c (g_thread_pool_free): Don't get
+	stuck in here if immediate is TRUE.  (#310954, 
+	Hong Jen Yee)
+
+	* tests/threadpool-test.c (main): Test immediate == TRUE.
+
+2005-07-20  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.h (g_win32_get_system_data_dirs): Make this an
+	inline function. Define it only if G_CAN_INLINE and not
+	C++. (#173098)
+
+2005-07-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstring.c (g_string_chunk_insert_len): Avoid
+	an unnecessary strlen if len is -1.  (#169692, 
+	Benoit Dejean)
+
+	* glib/gatomic.c (g_atomic_pointer_compare_and_exchange): 
+	Fix g_atomic_pointer_compare_and_exchange on sparc64.
+	(#167572, Gert Doering)
+
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.7.3 ===
+	
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/Makefile.am (SUBDIRS): Add tests/refcount
+
+	* configure.in: Add tests/refcount
+
+	* tests/refcount/properties.c: Test property changes
+	from multiple threads.
+
+	* tests/refcount/signals.c: Test signal emission from
+	multiple threads.
+
+	* tests/refcount/objects.c: Test refcounting from 
+	multiple threads.
+
+	* tests/refcount/objects2.c: 
+	* tests/refcount/properties2.c: Tests to measure the 
+	overhead of threadsafe refcounting.
+	
+	* glib/giochannel.c (g_io_channel_ref, g_io_channel_unref): 
+	Use atomic operations to make refcounting
+	threadsafe.  (#166020, Wim Taymans)
+
+	* NEWS: Updates
+
+2005-07-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/spawn-test.c: 
+	* tests/uri-test.c: 
+	* tests/thread-test.c: 
+	* tests/queue-test.c: 
+	* tests/mainloop-test.c: 
+	* tests/iochannel-test.c: 
+	* tests/gio-test.c: 
+	* tests/child-test.c: Make the tests silent on success.
+
+2005-07-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c (g_mkdir_with_parents): Fix a 
+	typo.  (#310243, Richard Laager)
+
+	* glib/goption.c (g_option_group_add_entries): Warn if a
+	short name is not acceptable.
+
+2005-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.h (G_OPTION_FLAG_NOALIAS): 
+	* glib/goption.c: Add and implement a new flag
+	to turn off the automatic <groupname>- prefixing
+	for conflict resolution of long option names. (#171840,
+	Adam McLaurin)
+	
+	All optional callback arguments  (#308886, Pawel
+	Sliwowski)
+
+	* glib/goption.h (G_OPTION_FLAG_OPTIONAL_ARG): 
+	* glib/goption.c: Add and implement a new flag
+	to indicate that a callback *optionally* takes another
+	argument.
+
+	* tests/option-test.c: Add tests for optional arguments.
+
+2005-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gthread.c (g_static_rec_mutex_lock_full): Don't lock
+	if depth is zero.  (#310148, Wim Taymans)
+
+2005-07-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_listenv): Ignore anomalous environment
+	entries which are not of the form variable=value.  (#309859,
+	Morten Welinder)
+
+2005-07-09  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: Totally rewritten socket channel
+	implementation. See discussion in bug #147392.
+
+	* configure.in: Don't use autoconf variables for the resource
+	object files on Win32 any longer. Instead handle that in the
+	Makefile.am files. Check for windres.
+
+	* glibconfig.h.win32.in: Minor tuning to match the
+	configure-produced glibconfig.h closely.
+
+	* glib/Makefile.am: Don't use the scripts in build/win32 to
+	compile glib.rc into a resource object file. (This means we lose
+	the build number increment magic, but I doubt it was that useful
+	anyway.) Instead use windres directly. To pass the normal .o file
+	produced by windres through libtool, which wants .lo files, pass
+	it directly to the linker using a -Wl option.
+
+	* glib/glib.rc.in: Thus replace BUILDNUMBER with 0.
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+	
+	* === Released 2.7.2 ===
+
+	* NEWS: Updates
+
+2005-07-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Make the size_t size detection work on AIX. 
+	(#309725)
+
+2005-07-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Require a newer gtk-doc.
+
+2005-07-01  Hans Breuer  <hans@breuer.org>
+
+	* glib/gmessages.c : include <process.h> for getpid()
+	* glib/gmappedfile.c : include <io.h> for close() etc.
+	* glib/makefile.msc.in : add 	gmappedfile.obj
+
+2005-07-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_get_key_comment): 
+	(g_key_file_get_top_comment): Don't reverse the order of multiline 
+	comments.
+	(g_key_file_get_group_comment): Actually get the group comment.
+
+	* tests/keyfile-test.c (test_comments): Test that comments are
+	handled properly.  (#309263, Mikael Magnusson)
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.7.1 ===
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstring.c (g_str_hash): Fix portability issues.  
+	(#307064, Morten Welinder)
+
+	Apply a patch which may make GLib work on BeOS again.  
+	(#309157, Kian Duffy)
+
+	* glib/gmain.c: Update the BeOS includes.
+
+	* glib/gstdio.c: 
+	* glib/gutils.c (g_find_program_in_path): 
+	* glib/gbacktrace.c (g_on_error_stack_trace): Use the UNIX
+	implementation on BeOS, as well.
+
+	* configure.in: Don't put glib 1.0 into G_MODULE_LIBS, even
+	on BeOS.
+
+	* NEWS: Updates
+
+2005-06-26  Tor Lillqvist  <tml@novell.com>
+
+	* glib/Makefile.am: libtool installs/uninstalls the import
+	library, no need to do it ourselves. Do still install/uninstall
+	the .def file, though.
+
+	* glib/gmappedfile.c: Add Win32 implementation.
+	(g_mapped_file_free): Don't mention writable shared mappings in
+	the doc comment. Free the GMappedFile struct.
+
+	* tests/mapping-test.c (main): No kill() or SIGUSR1 on Win32, use
+	a flag file instead to stop the child. Use g_usleep() instead of
+	sleep().
+
+2005-06-24  Matthias Clasen  <mclasen@redhat.com>
+
+	Add an mmap() wrapper called GMappedFile. (#148218,
+	David Schleef, Behdad Esfahbod)
+	
+	* glib/gmappedfile.[hc]: New files.
+
+	* configure.in: Check for mmap.
+	
+	* glib/Makefile.am: Add new files.
+	
+	* glib/glib.symbols: Add new functions.
+
+	* glib/glib.h: Include gmappedfile.h
+
+	* tests/mapping-test.c: Tests for GMappedFile.
+
+	* tests/Makefile.am: Add new file.
+
+	* Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Add --enable-man.
+
+2005-06-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/Makefile.am (install-libtool-import-lib): Current GNU tools
+	do understand the PRIVATE keyword.
+
+	* glib/gfileutils.c (g_mkdir_with_parents): Return error with
+	EINVAL also for empty pathnames.
+	(g_build_pathname_va): Fix typo.
+
+Thu Jun 23 15:52:08 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/gfileutils.c: g_build_filename_va is only use in the G_OS_WIN32
+	case, so compile it conditionally.
+
+2005-06-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/keyfile-test.c (test_group_remove): Don't leak
+	memory here.
+
+	* glib/gkeyfile.c (g_key_file_load_from_data_dirs): Don't
+	leak output_path.  (#308546, Kjartan Maraas)
+
+	* glib/glib.symbols: 
+	* glib/gfileutils.h: 
+	* glib/gfileutils.c (g_build_pathv, g_build_filenamev): 
+	Variants of g_build_path() and g_build_filename()
+	which take a string array instead of varargs.  
+	(#149092, Todd A. Fisher)
+
+	* tests/strfunc-test.c: Add tests for g_build_pathv() 
+	and g_build_filenamev().
+
+2005-06-22  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gfileutils.c
+	* glib/gfileutils.h
+	* glib/glib.symbols
+	* tests/testglib.c: Rename g_makepath() to g_mkdir_with_parents().
+
+2005-06-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (parse_short_option, parse_long_option): 
+	Pass the option name also in the NO_ARG case.  (#308602,
+	Masatake YAMATO)
+	(parse_arg): Properly store changes for arrays.  (#308528,
+	Roger Leigh)
+
+2005-06-22  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gfileutils.c (g_makepath): New function. Creates a
+	directory including intermediate parent directories as
+	needed. (#60509)
+
+	* glib/gfileutils.h: Declare it.
+
+	* glib/gutils.c (g_get_host_name): New function. Returns the
+	machine's name, or one of its names. Document that it is
+	best-effort only, and not guaranteed to be unique or anything.
+	(g_get_any_init): Get the host name here. On Unix use
+	gethostname(), on Windows use GetComputerName(). (#5200)
+
+	* glib/gutils.h: Declare it.
+
+	* glib/glib.symbols: Add new functions.
+
+	* tests/testglib.c: Test g_makepath() and g_get_host_name().
+	
+2005-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.h: 
+	* glib/goption.c: Add G_OPTION_FLAG_NO_ARG and
+	G_OPTION_FLAG_FILENAME to allow greater control of
+	G_OPTION_ARG_CALLBACK options. (#302632, Dan Winship)
+
+	* tests/option-test.c: test callback args
+
+2005-06-14  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* configure.in: Added 'th' (Thai) to ALL_LINGUAS.
+
+2005-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+	* === Released 2.7.0 ===
+
+	* NEWS: Updates
+
+2005-06-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_parse_value_as_integer): Better
+	error checking. (#306389, Morten Welinder)
+
+	* glib/goption.c (parse_int): Set errno to 0 before calling
+	strtol.  (#306388, Morten Welinder)
+
+2005-06-09  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.h
+	* glib/gstdio.c
+	* glib/glib.symbols: Add a chdir() wrapper, too.
+
+	* glib/glib.symbols: Add g_win32_locale_filename_from_utf8().
+
+	* glib/gwin32.c (g_win32_locale_filename_from_utf8): Clarify doc
+	comment.
+
+2005-06-08  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (get_windows_directory_root): New helper function
+	on Win32, returns the root of the drive (or possibly share) where
+	the Windows directory is. (In the case of Terminal Server sessions
+	the Windows directory is a per-user folder.)
+	(g_get_any_init): Use get_windows_directory_root() as last resort
+	for both temp directory and home directory. g_get_home_dir() now
+	never returns NULL on Win32. Don't look at HOMEDRIVE and
+	HOMEPATH. HOME, USERPROFILE, CSIDL_PROFILE and Windows directory
+	drive root should be enough.
+
+2005-06-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: 
+	* glib/gunicode.h: 
+	* glib/gunicollate.c (g_utf8_collate_key_for_filename): 
+	New function to calculate collation keys which are more
+	suitable for sorting filenames.  (#172690, Ole Laursen)
+
+Fri May 27 17:18:00 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/goption.c (parse_short_option): initialize option_name
+	before using it.
+
+2005-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (parse_short_option, parse_long_option):
+	Return an error if an option is missing its argument.  (#305576,
+	Björn Lindqvist)
+
+	* tests/option-test.c (missing_arg_test): Add a testcase.
+
+Wed May 25 15:33:51 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/goption.c (print_help): rest_description should be const.
+
+2005-05-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gunidecomp.c (combine_hangul): Don't eat Hangul 
+	when normalizing.  (#301742, reported by Christian Biere,
+	patch by Noah Levitt)
+
+2005-05-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (print_help): If the remaining argument
+	has an arg_description, display the synopsis as
+	PROGNAME [OPTION...] REST  (#305346, Noah Levitt)
+
+2005-05-20  Federico Mena Quintero  <federico@ximian.com>
+
+	Merged from glib-2-6:
+
+	* glib/gspawn.c (g_spawn_command_line_sync): Clarify the meaning
+	of exit_status(); it's not the return code from the child, but
+	rather the waitpid() status.
+
+2005-05-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gunidecomp.c: Correct the end of the Hangul 
+	Syllables range, from 0xd7af to 0xd7a3, in several
+	places.  (#301984, Changwoo Ryu)
+
+2005-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/tree-test.c (main): Check the return values of
+	g_tree_remove().
+
+	* glib/gtree.c (g_tree_remove, g_tree_steal): Return
+	a boolean indicating wether the key was found.  (#302545,
+	Matthew F. Barnes)
+
+2005-05-06  Brian Cameron  <brian.cameron@sun.com>
+
+	* configure.in, gmodule-no-export-2.0-uninstalled.pc.in,
+	  Makefile.am:  Added gmodule-no-export-2.0-uninstalled.pc.in
+	  to allow building of other libraries like pango when 
+	  glib is uninstalled.
+
+2005-05-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/option-test.c: Add a testcase.
+	
+	* glib/goption.c (g_option_context_parse): Treat '-'
+	on its own as a non-option argument.  (#168008, Tim Musson,
+	Thomas Leonard and others)
+
+2005-05-05  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/gdataset.[ch] glib/gdatasetprivate.h: Add 
+	g_datalist_set/unset_flags(), g_datalist_get_flags() functions
+	to squeeze some bits into a GDataSet... this is needed for
+	efficient implementation of toggle references in GObject.
+
+	* tests/gobject/references.c tests/gobject/Makefile.am:
+	Add a test case for weak and toggle references.
+
+	* glib/gfileutils.[ch]: Rename g_file_replace() back
+	to g_file_set_contents().
+
+	* glib/glib.symbols: Update.
+
+2005-05-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstring.c (g_str_equal, g_str_hash): Move docs
+	inline.
+
+2005-05-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/ghash.h: Rename some parameters to make gtk-doc
+	happy.
+
+	* glib/gutils.c: 
+	* glib/gwin32.c: 
+	* glib/gstdio.c: Fix some typos, mark new API as "Since 2.8".
+
+2005-04-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtree.c: Clarify some docs. (#302062, Matthew F. Barnes)
+
+2005-04-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gstrfuncs.c (g_strcompress): Warn and don't crash
+	when meeting a trailing \\.  (#301373, Benjamin Otte)
+
+2005-04-27  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gconvert.c (open_converter, g_convert_with_iconv): Don't
+	call g_set_error() unless the GError pointer is non-NULL. This
+	avoids infinite recursion problems in certain rare situations on
+	Windows, when g_locale_from_utf8() is called from
+	_glib_get_locale_dir() after the change below. It's the
+	_glib_gettext() calls to translate error messages that are
+	parameters to g_set_error() that cause the recursion, not
+	g_set_error() itself.
+
+	* glib/gwin32.c (g_win32_locale_filename_from_utf8): New
+	function. Converts a filename to the system codepage, and if a
+	straight conversion isn't possible (because the filename contains
+	characters not in the system codepage), try looking up the
+	filename (which should refer to an existing file for this to
+	succeed) with short (8.3) pathname components.
+
+	* glib/gutils.c (_glib_get_locale_dir): No need to cache the
+	result, this function is normally called only once. Return the
+	path to the locale directory in system codepage, not UTF-8. The
+	path is passed to bindtextdomain(), which doesn't use UTF-8 file
+	names. Use g_win32_locale_filename_from_utf8(). (#301772)
+
+	Don't do run-time lookup of message catalog directory on
+	Cygwin. Cygwin is supposed to look and feel like Unix, and on Unix
+	we use paths fixed at configure time.
+
+2005-04-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.h: Minor comment improvement.
+
+2005-04-18  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gfileutils.c: No <sys/wait.h> on Win32. Definition of
+	save_errno was missing in one place.
+
+Sat Apr 16 20:15:44 2005  Soeren Sandmann  <sandmann@redhat.com>
+
+	* glib/gfileutils.c (g_file_replace): Save the errno in various
+	places
+
+	* glib/gfileutils.c (set_umask_permissions): Fork a child and do
+	chmod() to the umask() permissions there.
+
+2005-04-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmessages.h (g_debug): Use G_LOG_LEVEL_DEBUG in
+	both definitions.  (#300071, Tommi Komulainen)
+
+2005-04-09  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c: Include <process.h> on Win32 for getpid(). (#173094)
+
+2005-04-08  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.h
+	* glib/gstdio.c
+	* glib/glib.symbols (g_access, g_chmod, g_creat): Wrap also
+	access(), chmod() and creat(). (#169623, #171285)
+
+2005-04-08  Tor Lillqvist  <tml@novell.com>
+
+	Improve g_get_system_data_dirs() on Windows. A library that calls
+	g_get_system_data_dirs() might be installed in a different
+	top-level prefix than GLib or the application being run.
+
+	* glib/gutils.h (g_win32_get_system_data_dirs): New static
+	function defined in this header. Calls
+	g_win32_get_system_data_dirs_for_module() passing the address of
+	itself as parameter. g_get_system_data_dirs() is #defined as this
+	function.
+
+	* glib/gutils.c (g_win32_get_system_data_dirs_for_module): New
+	function. If the address parameter is non-NULL, the corresponding
+	module's installation location is used for one of the returned
+	path names, in addition to the COMMON_APPDATA, COMMON_DOCUMENTS,
+	glib top-level and application top-level folders.
+	(g_get_system_data_dirs): Now just for backward compatibility on
+	Win32. Just call g_win32_get_system_data_dirs_for_module(NULL).
+
+	* glib/glib.symbols: Add g_win32_get_system_data_dirs_for_module.
+
+	* glib/gutils.c (read_aliases): Not used on Windows.
+	(unalias_lang): Don't do anything on Windows, there is no
+	/usr/share/locale/locale.alias file..
+	
+Thu Apr  7 22:51:15 2005  <yosh@gimp.org>
+
+	* glib/gutils.c (g_get_system_data_dirs): Declare glib_top_share_dir
+	and exe_top_share_dir only in G_OS_WIN32.
+
+2005-04-08  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_get_system_data_dirs): After investigating more
+	closely the actual use cases of this function, I understand better
+	what it needs to do on Windows. In addition to the Windows
+	COMMON_APPDATA and COMMON_DOCUMENTS folders, also return the
+	"share" subfolders of GLib's installation location and the
+	application .exe's installation location, hoping that either
+	matches what the function's caller is looking for.
+
+	* glib/gutils.h (G_WIN32_DLLMAIN_FOR_DLL_NAME): Use wide char API
+	if available, and store dll name in UTF-8.
+
+2005-04-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c (get_contents_stdio): Avoid memory 
+	leaks in borderline cases.  (#172612, Morten Welinder)
+
+2005-04-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c: Clarify docs in some places. (#172404, 
+	Morten Welinder)
+
+2005-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h: Undef G_CAN_INLINE if G_IMPLEMENT_INLINES is 
+	defined. This was the pre-2.6 behaviour, and without it,
+	G_IMPLEMENT_INLINES cannot be used in multiple .c files
+	at all.  (#165852, Dave Benson)
+
+2005-04-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmain.c (g_child_watch_source_new): Add a note regarding
+	waitpid(-1).
+	(g_child_watch_source_init_multi_threaded): 
+	(g_child_watch_source_init_single): Don't use SA_RESTART,
+	since it causes problems on at least one platform. (#168352)
+
+2005-03-30  Steve Murphy  <murf@e-tools.com>
+
+	* configure.in: Added "rw" to ALL_LINGUAS.
+
+2005-03-30  Sven Neumann  <sven@gimp.org>
+
+	* glib/gfileutils.c (get_contents_stdio): handle the unlikely case
+	that no bytes are read from the file and allocate an empty string.
+
+2005-03-30  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c (g_io_win32_fd_get_flags_internal): Always claim
+	file descriptors open to devices are readable, since we can't
+	know. fstat() doesn't give any useful information. (#145326)
+
+2005-03-29  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gmain.c (g_poll): [Win32] If the event fired, assign
+	f->revents=f->events. We can't know whether the upper layer using
+	the event actually is readable, writeable or what, so say that all
+	the conditions hold. Remove the ResetEvent() call that has been
+	ifdeffed out anyway for a long time. Remove an "#ifdef 1" and
+	#endif pair of lines, that code is not optional.
+	(g_get_current_time): [Win32] Use GetSystemTimeAsFileTime()
+	instead of time() and GetTickCount(). Much simpler.
+
+2005-03-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/date-test.c: 
+	* tests/testgdate.c: Add tests for 
+	g_date_get_iso8601_week_of_year().
+
+	* glib/gdate.c (g_date_get_iso8601_week_of_year): 
+	Fix the calculation.  (#169858, Jon-Kare Hellan)
+
+2005-03-27  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in: Apparently AC_LIBTOOL_WIN32_DLL isn't deprecated
+	after all, and in fact necessary with HEAD libtool.
+
+2005-03-23  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_getenv): [Win32] Fix corner case bug when
+	environment variable value is exactly one character.
+
+2005-03-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Add g_try_malloc0
+
+	* glib/gmem.h: Add g_try_new, g_try_new0, g_try_renew and
+	g_try_malloc0.  (#169611, Stefan Kost)
+
+	* glib/gmem.c: Implement g_try_malloc0.
+
+2005-03-20  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gspawn-win32.c (do_spawn_with_pipes): Close the process
+	handle if the caller doesn't want it also in the case without a
+	helper process.
+	(g_spawn_sync): Don't ask for a child pid which we don't need.
+
+	* glib/gtimer.c: On Win32, use GetSystemTimeAsFileTime() instead
+	of GetTickCount(). (#159507)
+
+	* glib/gmessages.c (g_log_default_handler)
+	* glib/gutils.c (g_get_prgname): Move the Win32 code that asks the
+	program name from the system to g_get_prgname(). Do output the pid
+	also on Win32 (useful in case there are several instances of the
+	same program running).
+
+	* tests/testglib.c (main): Print more detailled output from the
+	timer tests. Don't print home directory twice. Test
+	g_win32_error_message().
+
+	* tests/spawn-test.c (run_tests): On Win32, run netstat instead of
+	ipconfig. On Windows XP collecting output from ipconfig doesn't
+	seem to work for some reason.
+
+2005-03-18  Hans Breuer  <hans@breuer.org>
+
+	* glib/makefile.msc.in : handle galiasdef.c (although completely 
+	useless for msvc build)
+
+	* glib/gbacktrace.c glib/gmessage.c : need at least _WIN_VER 0x0401
+	for IsDebuggerPresent()
+
+2005-03-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c: Update the documentation, reflecting the
+	fact that the special case for !group_name --> start_group
+	got removed.  (#170566, Tim-Philipp Müller)
+
+2005-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (g_option_context_set_main_group): Warn 
+	if there already is a main group.  (#170445, Jeff Franks)
+
+Sun Mar 13 22:01:17 2005  Manish Singh  <yosh@gimp.org>
+
+	* tests/array-test.c: delete a bunch of dead code.
+
+Sun Mar 13 21:28:47 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/gdataset.c: remove spurious IA prefix from g_quark_try_string.
+
+2005-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gatomic.c:
+	* glib/gcache.c: Small fixes to the previous commit.
+
+2005-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	Make PLT-reduction work with gcc4, and don't include
+	everything in galias.h:
+	
+	* glib/glib.symbols: Group symbols by header and source file.
+	* glib/makegalias.pl: Protect definitions by the same 
+	preprocessor symbols used to guard the headers. Move
+	the alias declarations to a separate file which is 
+	produced when calling makegalias.pl -def
+	* glib/Makefile.am (galiasdef.c): Add a rule to generate this
+	file.
+	* glib/*.c: Include galias.h after the other GLib headers,
+	include galiasdef.c at the bottom.
+
+	* glib/glib.symbols: Add g_listenv and g_file_replace.
+
+Fri Mar 11 23:51:12 2005  Soeren Sandmann  <sandmann@redhat.com>
+
+	* glib/gfileutils.c (write_to_temp_file): Don't try and generate
+	a dotfile from the name -- it doesn't work with absolute
+	paths. Also make documentation indicate that symlinks will be
+	overwritten. Both pointed out by Alexis S. L. Carvalho.
+
+2005-03-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* m4macros/glib-gettext.m4: Avoid stupid compiler complaints
+	about precision loss.
+
+2005-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdate.c: Remove a lot of pointless g_return_if_fail()
+	checks.  (#169859, Morten Welinder)
+
+2005-03-10  Sven Neumann  <sven@gimp.org>
+
+	* tests/file-test.c: include <gstdio.h>.
+
+2005-03-10  Sven Neumann  <sven@gimp.org>
+
+	* glib/gfileutils.c (get_contents_stdio): delay memory allocation
+	until after the first read. Saves a bunch of reallocs. Also
+	increased the buffer size to 4096 bytes. (bug #165954)
+
+	* tests/file-test.c (test_get_contents): added a (very basic) test
+	for g_file_get_contents().
+
+Wed Mar  9 19:06:45 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/glib.symbols: Add g_file_replace.
+
+2005-03-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Bump version
+
+2005-03-09  Sven Neumann  <sven@gimp.org>
+
+	* glib/gfileutils.c (g_file_replace): avoid unnecessary filename
+	conversions.
+
+2005-03-09  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gutils.c (g_get_user_data_dir, g_get_user_config_dir,
+	g_get_user_cache_dir, g_get_system_data_dirs,
+	g_get_system_config_dirs): [Win32] Don't leak return value from
+	get_special_folder(). (#169348, Daniel Atallah) Guard against
+	g_home_dir being NULL, use g_tmp_dir/g_user_name in that case.
+
+Tue Mar  8 15:46:54 2005  Søren Sandmann  <sandmann@redhat.com>
+
+	* glib/gfileutils.c (g_file_replace): New API. A function to
+	atomically create a file.
+
+2005-03-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: Add the new attributes here too.
+
+	* glib/gmacros.h: Define G_GNUC_NULL_TERMINATED.
+	(#164706, Marc Meissner)
+
+	* glib/gstrfuncs.h: 
+	* glib/gfileutils.h: Use G_GNUC_NULL_TERMINATED where
+	appropriate.
+
+	* glib/goption.c (parse_int): Fix an error message.  
+	(#168751, Hazael Maldonado Torres)
+
+2005-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdebug.h: Small cleanup (use G_BEGIN/END_DECLS).
+	(#168474, Fabricio Barros Cabral)
+
+2005-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_find_program_in_path): Mark the last
+	paragraph of the docs as Windows-specific.  (#169433)
+
+2005-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gmarkup.c: Add G_GNUC_PRINTF attribute
+	to set_error.
+	(g_markup_parse_context_end_parse): Fix an
+	error message, noticed by Tim Janik.
+
+2005-02-24  Tor Lillqvist  <tml@novell.com>
+
+	* glib/Makefile.am (BUILT_EXTRA_DIST): Don't distribute
+	glib.def. (#167496, J. Ali Harlow)
+
+	* glib/gfileutils.c (get_contents_win32): Use g_fopen(). (#168341,
+	Daniel Atallah)
+
+2005-02-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Don't forget to set G_THREAD_LIBS_FOR_GTHREAD 
+	on non-linux platforms.  (#168177, Michael Banck)
+
+	* tests/keyfile-test.c (test_locale_string): Set LANGUAGE 
+	instead of LC_ALL to shield against LANGUAGE being set in 
+	the environment.  (#168311, Suren A. Chilingaryan)
+
+Tue Feb 22 22:03:38 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/gstdio.h: On G_OS_UNIX, simple #define g_open and co. as
+	aliases for their respective C library functions, instead of
+	using the function wrappers. This avoids library users having to
+	care about matching large file support with whatever glib has been
+	built with. Fixes bug #167942.
+
+	* glib/gstdio.c
+	* glib/abicheck.sh
+	* glib/glib.symbols
+	* glib/makegalias.pl: Logic to make the gstdio wrappers still
+	available for compatibility, but not used in new code.
+
+Tue Feb 22 18:33:07 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/gtimer.c (g_usleep): Simplify the loop for the fix below.
+
+2005-02-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gqueue.c (g_queue_new): Use a memchunk for
+	sizeof(GQueue)-sized chunks.  (#167984, Fabrício Barros Cabral)
+
+	* glib/gtimer.c (g_usleep): Fix usage of 
+	nanosleep().  (#163039, Bastien Nocera)
+
+2005-02-16  Adi Attar  <aattar@cvs.gnome.org>
+
+	* configure.in: Added "xh" to ALL_LINGUAS.
+
+2005-02-11  Tor Lillqvist  <tml@novell.com>
+
+	* glib/giowin32.c: Include winsock2.h before windows.h, to avoid
+	compilation errors with MSVC. (#167105)
+
+2005-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (print_help): Take main group options into
+	account when calculating column size.  (#166921)
+	(g_option_context_parse): Accept -? as documented.  (#166977)
+
+2005-02-09  Matthias Clasen  <mclasen@redhat.com>
+	* glib/gkeyfile.c (find_file_in_data_dirs): Don't leak path
+	here.  (#166801, Kjartan Maraas)
+
+2005-02-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_parse_value_as_string): Don't
+	write out of bounds.
+
+	* glib/goption.c (g_option_context_parse): Fix a 
+	one-too-short memory allocation.  (#166609, Nicolas Laurent)
+
+	* tests/Makefile.am (TESTS_ENVIRONMENT): Add tests with
+	MALLOC_CHECK_.
+
+	* tests/option-test.c: Add a test for unkown short options.
+
+2005-02-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib.symbols: 
+	* glib/gutils.h: 
+	* glib/gutils.c (g_listenv): New function to list all 
+	environment variables.  (#166327, Hans Petter Jansson)
+
+2005-02-07  Tor Lillqvist  <tml@novell.com>
+
+	* glib-zip.in: Add gmodule-no-export-2.0.pc.
+
+Sun Feb  6 21:59:09 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/abicheck.sh: feed the contents of config.h and glibconfig.h
+	into the preprocessor, since glib.symbols could need #defines
+	from them.
+
+Sun Feb  6 12:09:55 2005  Manish Singh  <yosh@gimp.org>
+
+	* glib/gatomic.c: Don't use matching constraints for asm mem
+	parameters. This makes the code match with current glibc, and
+	quiets some warnings with gcc 3.4.
+
+2005-02-05  Tor Lillqvist  <tml@novell.com>
+
+	* configure.in (G_LIBS_EXTRA)
+	* glib/giowin32.c: I think we can include <winsock2.h> and link
+	with -lws2_32. Only Windows 95 originally didn't have Winsock 2,
+	and it's available as an update for it. Not that we use any actual
+	Winsock 2 -only features, but still, simpler to link directly with
+	ws2_32.dll instead of going through wsock32.dll.
+
+	* glib/gfileutils.c (g_file_get_contents): In the Win32 ABI
+	stability version, call g_file_get_contents_utf8(), not
+	itself. (#166386, Bill Skaggs)
+
+2005-02-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Remove the --enable-ansi option  (#160469)
+
+	* configure.in: Define a HAVE_GNUC_VISIBILITY automake
+	conditional.
+
+	* glib/Makefile.am (TESTS): Only check the abi if
+	the compiler supports visibility, otherwise we
+	know there will be (harmless) extra symbols.  
+	(#166181, Ed Avis)
+
+2005-02-02  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gwin32.h: Remove unnecessary MSVC-only typedef for
+	pid_t. (#165910) GLib does not pretend to be a POSIX emulation
+	library.
+
+	* glib/gstdio.c: In the Win32 part of all functions, handle
+	invalid UTF-8 more robustly. Don't pass the resulting NULL
+	wide-char or codepage strings on to C library functions, but bail
+	out early. (#166084)
+
+	* glib/gfileutils.c: Don't use potentially incorrect errno in
+	several places. (#165951)
+	(g_mkstemp): Set errno appropriately.
+
+2005-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c: Move doc comments inline.
+
+	* glib/ghash.h: Adjust some argument names.
+
+	* configure.in: Give meaningful names to g_memmove() 
+	arguments.
+
+2005-02-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/keyfile-test.c (test_key_remove): Add test case for
+	key removal.
+
+	* glib/gkeyfile.c (g_key_file_remove_key): Actually remove 
+	the key from the list of pairs.  (#165980, David Hoover)
+
+	* glib/gkeyfile.c: Doc clarifications.  (#165907, Vincent Untz)
+
+	* tests/keyfile-test.c (test_group_remove): Add test case for
+	group removal.
+
+	* glib/gkeyfile.c (g_key_file_remove_group): Don't segfault
+	if the group doesn't exist.  (#165887, Mathias Hasselmann)
+
+2005-01-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/keyfile-test.c: Some more unit tests.
+
+2005-01-28  Christian Rose  <menthos@menthos.com>
+
+	* configure.in: Added "tl" to ALL_LINGUAS.
+
+2005-01-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/run-markup-tests.sh: Let $srcdir default to .
+
+	* tests/markups/fail-40.gmarkup: Add a test with a long entity
+	name.
+
+	* glib/gmarkup.c (unescape_text_state_inside_entity_name): Don't
+	copy the entity name into a short buffer of fixed length. Instead,
+	compare it in place with strncmp(), and do a full strdup() in the
+	error path.  (#165100, Simon Budig)
+
+2005-01-22  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gdate.c (g_date_set_time): Don't g_assert that localtime()
+	returns non-NULL. It does return NULL at least on Win32 if you
+	pass it a negative time_t, which although wrong, shouldn't cause
+	an application to abort. Instead return 2000-01-01 as a default
+	date. Print a warning unless G_DISABLE_CHECKS. (#164622)
+
+2005-01-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_parse_value_as_integer): Don't
+	interpret leading zeros as octal. The specification requires
+	%f parsing, and %f doesn't allow octal.  
+
+	* tests/keyfile-test.c: Add some more tests.
+
+	* glib/gkeyfile.c (g_key_file_get_keys): Return keys in
+	the order found in the file, rather than the opposite.
+	(g_key_file_parse_value_as_string): Fix error reporting.
+
+2005-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gkeyfile.c (g_key_file_parse_data): Accept \r\n as 
+	line end.  (#163030, Bastian Nocera)
+	(g_key_file_load_from_data): Make -1 work as a size.
+	
+	* tests/keyfile-test.c: Some unit tests for the keyfile
+	parser.  
+
+	* tests/Makefile.am (test_programs): Add keyfile-test.
+
+2005-01-19  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gbacktrace.c (g_on_error_stack_trace): On Win32 call
+	G_BREAKPOINT() if being debugged.
+
+	* glib/gmessages.c (g_logv): For fatal messages on Win32, use
+	G_BREAKPOINT() also without G_ENABLE_DEBUG, but only if being
+	debugged. Suggestion by Ulf Lamping.
+
+2005-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gqsort.c: Don't include alloca.h. It is not needed,
+	and does not exist on win32.  (#164468, Kazuki IWAMOTO)
+
+	* glib/gkeyfile.c (g_key_file_get_boolean_list): Fix a
+	sparse warning.  (#164467, Kjartan Maraas)
+
+2005-01-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gconvert.c (g_get_filename_charsets): Don't crash
+	if G_FILENAME_ENCODING is empty.  (#164330, Pawel Sakowski)
+
+2005-01-15  Tor Lillqvist  <tlillqvist@novell.com>
+
+	* configure.in: sh portability fix. Use "test" and not [.
+	(#163144, Robert Ögren)
+
+2005-01-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gqsort.c: Sync to glibc.  (#133994, Morten Welinder, 
+	patch by Kjartan Maraas)
+
+2005-01-11  Owen Taylor <otaylor@redhat.com>
+
+	* configure.in: Add gmodule-export-2.0.pc to AC_CONFIG_FILES.
+
+	* glib/Makefile.am gobject/Makefile.am gthread/Makefile.am:
+	Use grep | head -n 1 instead of grep -m 1 which doesn't work
+	with slightly older versions of GNU grep in 
+	install-libtool-import-lib rule.
+
+2005-01-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gdir.c (g_dir_open): Typo fix.
+
+2005-01-10  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): Add missing ChangeLog.pre*
+
+2005-01-09  Hans Breuer  <hans@breuer.org>
+
+	* glib/gfileutils.c : make it compile with mvc6 default sdk,
+	(#define INVALID_FILE_ATTRIBUTES, FILE_ATTRIBUTE_DEVICE)
+
+2005-01-09  Tor Lillqvist  <tlillqvist@novell.com>
+
+	* glib/gwin32.c: Include also wchar.h for wcslen on
+	Cygwin.
+	(g_win32_error_message): Fix cast. (#163133, Roger Leigh)
+
+	* glib/gfileutils.c: Include <io.h> on Windows for
+	prototypes. (#163390, Kazuki Iwamoto)
+
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* NEWS: Typo fixes.
+
+	* configure.in: Bump version
+
+	* === Released 2.6.1 ===
+
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: 
+	* Makefile.am: Generate and distribute gmodule-export-2.0.pc,
+	which is currently just a copy of gmodule-2.0.pc, but makes
+	it explicit that it adds --export-dynamic.
+	
+	* gmodule-export-2.0.pc.in: Copy of gmodule-2.0.pc.in.
+
+2005-01-06  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/Makefile.am
+	* gobject/Makefile.am: glib.def and gobject.def are generated, not
+	in $(srcdir). (#163143, J. Ali Harlow)
+
+	* configure.in
+	* glib/Makefile.am
+	* gobject/Makefile.am: Win32 cross-compilation fixes. (#163144,
+	J. Ali Harlow)
+
+2005-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.h: Simplify the inlining magic to make it
+	work at Oh zero.  (#162990, Kalpesh Shah) 
+
+2005-01-04  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/guniprop.c (get_locale_type): Use g_win32_getlocale()
+	instead of setlocale() on Windows. setlocale() returns strings
+	like "Turkish_Turkey".
+
+2005-01-04  Matthias Clasen  <mclasen@redhat.com>
+
+	Fix the inlining magic.  (#157536, Jens Hatlak, and
+	#149907, Morten Welinder)
+	
+	* configure.in: Define G_CAN_INLINE in glibconfig.h
+
+	* glib/gutils.h: Streamline the inlining magic a bit,
+	don't use extern when implementing the non-inlined 
+	version.
+
+2005-01-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_find_program_in_path): Don't return
+	directories.  (#160738, Tommi Komulainen)
+
+	* glib/gfileutils.c (g_file_get_contents): Clarify the 
+	documentation.  (#162251, Mariano Suárez-Alvarez)
+
+2005-01-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gutils.c (g_setenv, g_unsetenv): Clarify the 
+	docs.  (#162747, Crispin Flowerday)
+
+2005-01-01  J. Ali Harlow  <ali@juiblex.co.uk>
+
+	* configure.in: Don't use AC_TRY_RUN to test for long long format
+	when using the MSVCRT.DLL runtime since we know the answer anyway
+	and it causes some mild inconvience when cross compiling.
+
+	* README.win32: Add a reference to the cross compiling section
+	of the reference manual.
+
+	* docs/reference/glib/cross.sgml: MinGW uses MSVCRT.DLL which
+	requires %I64i instead of %lli. (#161306)
+
+2005-01-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c: Make the g_getenv() ABI backward compatibility
+	wrapper more robust.
+
+2005-01-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/glib.symbols
+	* glib/gutils.h
+	* glib/gutils.c: Make also g_getenv(), g_setenv(), g_unsetenv()
+	and g_find_program_in_path() take and return UTF-8 strings on
+	Win32. Implement DLL ABI backward compatility for them, too. Move
+	all the DLL ABI stability wrappers to the end of the file. Use
+	wide character API when available in inner_find_program_in_path().
+
+	* glib/gfileutils.c: With the UTF-8ness of g_getenv() above, just
+	use g_getenv() to get PATHEXT. (Yeah, it's probably overdoing it
+	to consider somebody actually having anything else than ASCII
+	in PATHEXT, but...)
+
+2004-12-31  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gfileutils.c (g_file_test): Rewrite the Win32 version to
+	use GetFileAttributes() instead of stat(). stat() is unreliable
+	for corner cases like '\\server\share' or '.\'. Part of fixing
+	#161797. When testing for executability, in addition to the fixed
+	set of executable file name extensions also check the PATHEXT
+	environment variable.
+
+2004-12-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_get_current_dir): In the Win32 version, use
+	GetCurrentDirectory() directly for simpler buffer length
+	management. I don't trust getcwd() getting it right all the time.
+
+2004-12-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gfileutils.c (g_file_test): Typo fix.
+
+2004-12-30  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gutils.c (g_path_skip_root): Require UNC paths to start
+	with exactly two slashes.
+	(g_get_current_dir): Use wide character API when available.
+	(g_path_get_dirname): Handle UNC paths better. Part of fix for
+	#161797.
+
+2004-12-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* configure.in: Add an OS_LINUX conditional.
+
+	* glib/Makefile.am (TESTS): Only check the ABI on 
+	linux, since the shell script is not portable, and libtool
+	deficiencies may distort the ABI on other platforms.  (#161741)
+
+2004-12-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (print_entry): Don't show
+	the special G_OPTION_REMAINING entry.  (#161934,
+	Matthew F. Barnes)
+
+2004-12-20  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/gconvert.c (g_locale_to_utf8, g_filename_to_uri): Improve
+	docs.
+
+2004-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/option-test.c: Add some tests for '--' 
+	stripping.
+
+	* glib/goption.c (g_option_context_parse): Don't
+	strip '--' if it would be needed by a second option
+	parser.  (#161701)
+
+	* glib/gunicollate.c (g_utf8_collate): Make docs 
+	more accurate.  (#161683, Marcin Krzyzanowski)
+
+2004-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/goption.c (g_option_context_parse): Call
+	post-parse hooks also if argv is NULL.  (#161668,
+	Marcin Krzyzanowski)
+
diff --git a/HACKING b/HACKING
new file mode 100644
index 0000000..e7e2fc5
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,34 @@
+If you want to hack on the GLib project, you'll need to have the
+following packages installed:
+
+	- GNU autoconf 2.54
+	- GNU automake 1.7
+	- GNU libtool 1.4
+        - GNU gettext 0.10.40
+        - gtk-doc
+
+These should be available by ftp from ftp.gnu.org or any of the
+fine GNU mirrors.  Beta software can be found at alpha.gnu.org.
+
+To compile a CVS version of glib on your system, you will need to take
+several steps to setup the tree for compilation.  You can do all these
+steps at once by running:
+
+        cvsroot/glib# ./autogen.sh
+ 
+Basically this does the following for you:
+
+  	cvsroot/glib# aclocal; automake; autoconf
+
+        The above commands create the "configure" script.  Now you
+	can run the configure script in cvsroot/glib to create all
+	the Makefiles.
+
+Before running autogen.sh or configure, make sure you have libtool
+in your path.
+
+Note that autogen.sh runs configure for you.  If you wish to pass
+options like --prefix=/usr to configure you can give those options
+to autogen.sh and they will be passed on to configure.
+
+For information about submitting patches see the README file.
diff --git a/INSTALL.in b/INSTALL.in
new file mode 100644
index 0000000..03c0398
--- /dev/null
+++ b/INSTALL.in
@@ -0,0 +1,122 @@
+Simple install procedure
+========================
+
+  % gzip -cd glib-@GLIB_VERSION@.tar.gz | tar xvf -  # unpack the sources
+  % cd glib-@GLIB_VERSION@                           # change to the toplevel directory
+  % ./configure                             # run the `configure' script
+  % make                                    # build GLIB
+
+  [ Become root if necessary ]
+  % rm -rf /install-prefix/include/glib.h /install-prefix/include/gmodule.h
+  % make install                            # install GLIB
+
+Requirements
+============
+
+GLib-2.0 requires pkg-config, which is tool for tracking the
+compilation flags needed for libraries. (For each library, a small .pc
+text file is installed in a standard location that contains the
+compilation flags needed for that library along with version number
+information.) Information about pkg-config can be found at:
+
+  http://www.freedesktop.org/software/pkgconfig/
+
+GNU make (http://www.gnu.org/software/make) is also recommended.
+
+In order to implement conversions between character sets,
+GLib requires an implementation of the standard iconv() routine.
+Most modern systems will have a suitable implementation, however
+many older systems lack an iconv() implementation. On such systems,
+you must install the libiconv library. This can be found at:
+
+ http://www.gnu.org/software/libiconv/
+
+If your system has an iconv implementation but you want to use
+libiconv instead, you can pass the --with-libiconv option to
+configure. This forces libiconv to be used.
+
+Note that if you have libiconv installed in your default include
+search path (for instance, in /usr/local/), but don't enable
+it, you will get an error while compiling GLib because the
+iconv.h that libiconv installs hides the system iconv.
+
+If you are using the native iconv implementation on Solaris
+instead of libiconv, you'll need to make sure that you have
+the converters between locale encodings and UTF-8 installed.
+At a minimum you'll need the SUNWuiu8 package. You probably
+should also install the SUNWciu8, SUNWhiu8, SUNWjiu8, and
+SUNWkiu8 packages.
+
+The native iconv on Compaq Tru64 doesn't contain support for
+UTF-8, so you'll need to use GNU libiconv instead. (When
+using GNU libiconv for GLib, you'll need to use GNU libiconv
+for GNU gettext as well.) This probably applies to related
+operating systems as well.
+
+Finally, for message catalog handling, GLib requires an implementation
+of gettext(). If your system doesn't provide this functionality,
+you should use the libintl library from the GNU gettext package,
+available from:
+
+ http://www.gnu.org/software/gettext/
+
+
+Support for extended attributes and SELinux in GIO requires
+libattr and libselinux.
+
+Some of the mimetype-related functionality in GIO requires the
+update-mime-database and update-desktop-database utilities, which
+are part of shared-mime-info and desktop-file-utils, respectively.
+
+
+The Nitty-Gritty
+================
+
+Complete information about installing GLib can be found
+in the file:
+
+ docs/reference/glib/html/glib-building.html
+
+Or online at:
+
+ http://developer.gnome.org/doc/API/2.0/glib/glib-building.html
+
+
+Installation directories
+========================
+
+The location of the installed files is determined by the --prefix
+and --exec-prefix options given to configure. There are also more
+detailed flags to control individual directories. However, the
+use of these flags is not tested.
+
+One particular detail to note, is that the architecture-dependent
+include file glibconfig.h is installed in:
+
+  $exec_prefix/lib/glib/include/
+
+if you have a version in $prefix/include, this is out of date
+and should be deleted.
+
+.pc files for the various libraries are installed in
+$exec_prefix/lib/pkgconfig to provide information when compiling
+other packages that depend on GLib. If you set PKG_CONFIG_PATH
+so that it points to this directory, then you can get the
+correct include flags and library flags for compiling a GLib
+application with:
+
+ pkg-config --cflags glib-2.0
+ pkg-config --libs glib-2.0
+
+
+Cross-compiling GLib
+====================
+
+Information about cross-compilation of GLib can be found
+in the file:
+
+ docs/reference/glib/html/glib-cross-compiling.html
+
+Or online at:
+
+ http://library.gnome.org/devel/glib/stable/glib-cross-compiling.html
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..0bb46dc
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,12 @@
+Matthias Clasen
+E-mail: mclasen@redhat.com
+Userid: matthiasc
+
+Tim Janik
+E-mail: timj@gtk.org
+Userid: timj
+
+Note that a lot of people are contributing to GLib, and some parts of it 
+are technically maintained by others. The email addresses listed above are 
+meant as contacts for administrative questions such as cvs accounts. Other 
+questions are best directed to the mailing list gtk-devel-list@gnome.org.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..8973778
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,148 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+AUTOMAKE_OPTIONS = 1.7
+
+SUBDIRS = . m4macros glib gmodule gthread gobject gio tests po docs
+DIST_SUBDIRS = $(SUBDIRS) build
+
+bin_SCRIPTS = glib-gettextize
+
+AM_CPPFLAGS = 					\
+	-DG_LOG_DOMAIN=g_log_domain_glib 	\
+	@GLIB_DEBUG_FLAGS@ 			\
+	-DG_DISABLE_DEPRECATED 			\
+	-DGLIB_COMPILATION
+
+EXTRA_DIST += 			\
+	ChangeLog.pre-2-20	\
+	ChangeLog.pre-2-18	\
+	ChangeLog.pre-2-16	\
+	ChangeLog.pre-2-14	\
+	ChangeLog.pre-2-12	\
+	ChangeLog.pre-2-10	\
+	ChangeLog.pre-2-8	\
+	ChangeLog.pre-2-6	\
+	ChangeLog.pre-2-4	\
+	ChangeLog.pre-2-2	\
+	ChangeLog.pre-2-0	\
+	ChangeLog.pre-1-2	\
+	glib-zip.in		\
+	NEWS.pre-1-3		\
+	acglib.m4		\
+	sanity_check		\
+	README.commits		\
+	README.in		\
+	INSTALL.in		\
+	README.win32		\
+	HACKING			\
+	MAINTAINERS		\
+	autogen.sh		\
+	Makefile.decl		\
+	mkinstalldirs		\
+	makefile.msc		\
+	glibconfig.h.win32.in	\
+	msvc_recommended_pragmas.h \
+	config.h.win32.in	\
+        po/po2tbl.sed.in        \
+	glib-2.0.pc.in 		\
+	gobject-2.0.pc.in 	\
+	gmodule-2.0.pc.in	\
+	gmodule-export-2.0.pc.in	\
+	gmodule-no-export-2.0.pc.in	\
+	gthread-2.0.pc.in	\
+	gio-2.0.pc.in		\
+	gio-unix-2.0.pc.in	\
+	glib-2.0-uninstalled.pc.in 	\
+	gobject-2.0-uninstalled.pc.in 	\
+	gmodule-2.0-uninstalled.pc.in	\
+	gthread-2.0-uninstalled.pc.in	\
+	gmodule-no-export-2.0-uninstalled.pc.in \
+	gio-2.0-uninstalled.pc.in		\
+	gio-unix-2.0-uninstalled.pc.in
+
+
+# These may be in the builddir too
+BUILT_EXTRA_DIST = 		\
+	README			\
+	INSTALL			\
+	ChangeLog		\
+	glibconfig.h.win32	\
+	config.h.win32		\
+	gtk-doc.make
+
+configexecincludedir = $(libdir)/glib-2.0/include
+configexecinclude_DATA = glibconfig.h
+
+uninstall-local:
+	rm -f $(DESTDIR)$(configexecincludedir)/glibconfig.h
+
+CONFIGURE_DEPENDENCIES = acglib.m4
+
+BUILT_SOURCES = stamp-gc-h #note: not glibconfig.h
+glibconfig.h: stamp-gc-h
+	@if test -f glibconfig.h; then :; \
+	else rm -f stamp-gc-h; $(MAKE) stamp-gc-h; fi
+stamp-gc-h: config.status
+	cd $(top_builddir) && $(SHELL) ./config.status glibconfig.h
+	echo timestamp > stamp-gc-h
+
+ChangeLog:
+	@echo Creating $@
+	@if test -d "$(srcdir)/.git"; then \
+	  (GIT_DIR=$(top_srcdir)/.git ./missing --run git log GLIB_2_20_0^^.. --stat) | fmt --split-only > $@.tmp \
+	  && mv -f $@.tmp $@ \
+	  || ($(RM) $@.tmp; \
+	      echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
+	      (test -f $@ || echo git-log is required to generate this file >> $@)); \
+	else \
+	  test -f $@ || \
+	  (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
+	  echo A git checkout and git-log is required to generate this file >> $@); \
+	fi
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = glib-2.0.pc gobject-2.0.pc gmodule-2.0.pc gmodule-export-2.0.pc gmodule-no-export-2.0.pc gthread-2.0.pc gio-2.0.pc gio-unix-2.0.pc
+
+$(pkgconfig_DATA): config.status
+
+# install mkinstalldirs for glib-gettextize's benefit
+gettextdir = $(datadir)/glib-2.0/gettext
+gettext_SCRIPTS = mkinstalldirs
+
+# build documentation when doing distcheck
+DISTCHECK_CONFIGURE_FLAGS = --enable-debug --enable-gtk-doc --enable-man
+
+DISTCLEANFILES = glibconfig-sysdefs.h glibconfig.h stamp-gc-h config.lt
+
+distclean-local:
+	if test $(srcdir) = .; then :; else \
+	    rm -f $(BUILT_EXTRA_DIST); \
+	fi
+
+.PHONY: files release sanity snapshot ChangeLog
+
+files:
+	@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
+	  echo $$p; \
+	done
+
+release:
+	rm -rf .deps */.deps
+	cd docs && make glib.html
+	$(MAKE) distcheck
+
+sanity:
+	./sanity_check $(VERSION)
+
+snapshot:
+	$(MAKE) dist distdir=$(PACKAGE)-snap`date +"%Y%m%d"`
+
+snapcheck:
+	$(MAKE) distcheck distdir=$(PACKAGE)-snap`date +"%Y%m%d"`
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)'; \
+	for f in $$files; do \
+	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
+	  rm -f $(distdir)/$$f && cp $$d/$$f $(distdir) || exit 1; done
diff --git a/Makefile.decl b/Makefile.decl
new file mode 100644
index 0000000..cbc0da1
--- /dev/null
+++ b/Makefile.decl
@@ -0,0 +1,61 @@
+# GLIB - Library of useful C routines
+
+#GTESTER = gtester 			# for non-GLIB packages
+GTESTER = $(top_builddir)/glib/gtester			# for the GLIB package
+GTESTER_REPORT = $(top_builddir)/glib/gtester-report	# for the GLIB package
+
+# initialize variables for unconditional += appending
+EXTRA_DIST =
+TEST_PROGS =
+
+### testing rules
+
+# test: run all tests in cwd and subdirs
+test:	${TEST_PROGS}
+if OS_UNIX
+	@test -z "${TEST_PROGS}" || ${GTESTER} --verbose ${TEST_PROGS}
+	@ for subdir in $(SUBDIRS) . ; do \
+	    test "$$subdir" = "." -o "$$subdir" = "po" || \
+	    ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
+	  done
+endif
+
+# test-report: run tests in subdirs and generate report
+# perf-report: run tests in subdirs with -m perf and generate report
+# full-report: like test-report: with -m perf and -m slow
+test-report perf-report full-report:	${TEST_PROGS}
+	@test -z "${TEST_PROGS}" || { \
+	  case $@ in \
+	  test-report) test_options="-k";; \
+	  perf-report) test_options="-k -m=perf";; \
+	  full-report) test_options="-k -m=perf -m=slow";; \
+	  esac ; \
+	  if test -z "$$GTESTER_LOGDIR" ; then	\
+	    ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
+	  elif test -n "${TEST_PROGS}" ; then \
+	    ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
+	  fi ; \
+	}
+	@ ignore_logdir=true ; \
+	  if test -z "$$GTESTER_LOGDIR" ; then \
+	    GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
+	    ignore_logdir=false ; \
+	  fi ; \
+	  for subdir in $(SUBDIRS) . ; do \
+	    test "$$subdir" = "." -o "$$subdir" = "po" || \
+	    ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
+	  done ; \
+	  $$ignore_logdir || { \
+	    echo '<?xml version="1.0"?>' > $@.xml ; \
+	    echo '<report-collection>'  >> $@.xml ; \
+	    for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
+	      sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
+	    done ; \
+	    echo >> $@.xml ; \
+	    echo '</report-collection>' >> $@.xml ; \
+	    rm -rf "$$GTESTER_LOGDIR"/ ; \
+	    ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
+	  }
+.PHONY: test test-report perf-report full-report
+# run make test as part of make check
+check-local: test
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..d66cfa6
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,3045 @@
+Overview of Changes from GLib 2.20.2 to GLib 2.20.3
+===================================================
+
+* Bug fixes:
+ 578769 implement GWinHttpFileInputStream::close_fn
+ 580347 off-by-1 bug in GWinHttpFile
+ 579558 Application employing gvfs crashes with only libgvfs...
+ 581879 GFileMonitor crash: emit_cb not handling monitor disposal...
+ 583324 locking problem in g_main_context_iterate
+
+* Updated translations:
+ Valencian-Catalan
+
+
+Overview of Changes from GLib 2.20.1 to GLib 2.20.2
+===================================================
+
+* Bug fixes:
+ 579862 requesting xattr::foo ends up calling getxattr(...
+ 573246 g_desktop_app_info_dup() can access NULL pointer
+
+* Updated translations:
+ Catalan
+ Czech
+ Pashto
+
+
+Overview of Changes from GLib 2.20.0 to GLib 2.20.1
+===================================================
+
+* Bug fixes:
+ 575555 Use fsync() when replacing files to avoid data loss on
+ 575708 runaway inotify madness
+ 575270 GVolumeMonitor::mount-pre-unmount not being emitted
+ 577128 glib make check Failed to execute child process...
+ 573673 Always show "backup" directories
+ 578369 g_time_val_from_iso8601() parses timezones incorrectly
+ 578002 Fix a small typo in GFile docs
+ 578017 G_DEFINE_TYPE_EXTENDED docs
+
+* Updated translations:
+ Arabic
+ Assamese
+ Basque
+ Bularian
+ Brazilian Portuguese
+ British English
+ Catalan
+ Danish
+ French
+ Galician
+ German
+ Greek
+ Hungarian
+ Italian
+ Japanese
+ Kannada
+ Lithuanian
+ Malayalam
+ Norwegian bokmål
+ Oriya
+ Polish
+ Punjabi
+ Russian
+ Simplified Chinese
+ Slovenian
+ Spanish
+ Swedish
+ Tamil
+
+
+Overview of Changes from GLib 2.19.9 to GLib 2.20.0
+===================================================
+
+* Base64 support: Avoid integer overflows. CVE-2008-4316
+
+* Bugs fixed:
+ 574019 GChecksum: document and guarantee hex characters in lower case
+ 573454 Unable copy/move files to directories symlinked to gvfs share
+ 561172 gnome-open fails on local URIs with anchors
+ 573970 crash in gunixvolumemonitor:update_mounts when unmounting
+ 573843 g_get_current_dir returns non-absolute path
+
+* Updated translations:
+ Assamese (as)
+ Bengali (bn_IN)
+ Czech (cs)
+ Hindi (hi)
+ Italian (it)
+ Japanese (ja)
+ Lithuanian (lt)
+ Malayalam (ml)
+ Marathi (mr)
+ Oriya (or)
+ Polish (pl)
+ Romanian (ro)
+ Telugu (te)
+
+
+Overview of Changes from GLib 2.19.8 to GLib 2.19.9
+===================================================
+
+* GMarkup:
+ - Considerable speedup
+
+* GIO
+ - Add G_FILE_CREATE_REPLACE_DESTINATION flag to allow replacing
+   the destination of a copying operation as if it did not exit before.
+ - Be more careful when classifying files as desktop files
+ - Support desktop file key X-GIO-NoFuse which disables the use
+   of fuse pathnames for %u and %U arguments
+
+* Bugs fixed:
+ 572672 glib/gthread.c: argument is different type
+ 572464 Doc for g_file_get_contents
+ 572151 “it's” and “its” confused in docs and comments
+ 570501 g_win32_get_system_data_dirs uses invalid conversion...
+ 167569 g_string_append_printf crashes on win32 when used...
+ 572508 gmarkup speedup
+ 560564 Replacing a symlink with its linked file truncates... 
+ 549298 impossible to copy files with p (pipe) flag
+ 543183 Clarify docs for g_file_has_prefix
+ 540461 g_memory_output_stream_get_data_size() doesn't behave...
+ 573462 GEmblemedIcon leak
+ 573421 Clarify message format in GMountOperation
+ 573658 Deadlock in giomodule.c
+ 556706 Inconsistent help arguments -h, -?
+ 573527 Wrong shell to run config.status in Makefile.in.in
+ 573128 A couple of typos in GObject documentation
+
+* Updated translations:
+ Catalan (ca)
+ British English (en_GB)
+ Spanish (es)
+ Basque (eu)
+ Finnish (fi)
+ French (fr)
+ Gujarati (gu)
+ Hebrew (he)
+ Hungarian (hu)
+ Korean (ko)
+ Maithili (mai)
+ Norwegian bokmål (nb)
+ Dutch (nl)
+ Portugese (pt)
+ Swedish (sv)
+ Thai (th)
+ Traditional Chinese (zh_HK)
+ Traditional Chinese (zh_TW)
+
+
+Overview of Changes from GLib 2.19.7 to GLib 2.19.8
+===================================================
+
+* GIO: Fix missing exports of new API
+
+* Fix strict aliasing warnings and violations to make Glib work
+  with gcc 4.4
+
+
+Overview of Changes from GLib 2.19.6 to GLib 2.19.7
+===================================================
+
+* GIO
+ - GFile gained an attribute for the actual file size in bytes
+ - GMountOperation gained an "aborted' signal that allows to abort
+   a mount operation from the backend side
+
+* Bugs fixed:
+ 523742 Use noinst for non-installable libraries
+ 566747 URIs opened with firefox %u load as local files
+ 541225 Can't compile gio on AIX duplicate case value in gioerror.c
+ 571598 GAsyncResult with NULL gobject
+ 505042 add file attribute for actually used file size in bytes
+
+* Updates translations:
+ Basque (eu)
+ Gujarati (gu)
+ Italian (it)
+ Japanese (ja)
+ Norwegian bokmål (nb)
+ Dutch (nl)
+ Portugese (pt)
+ Thai (th)
+ Vietnamese (vi)
+
+
+Overview of Changes from GLib 2.19.5 to GLib 2.19.6
+===================================================
+
+* New format macro to print goffset data: G_OFFSET_FORMAT
+
+* GIO: 
+ - Add a GFilter{Input,Output}Stream::close-base-stream properties which
+   determine whether the base stream will be closed when the filter stream
+   is finalized.
+ - g_data_input_stream_read_line and ..._read_until have asynchronous
+   variants now.
+
+* Bugs fixed:
+ 568294 A wrong reference in the description of g_bookmark_file_...
+ 563141 RFE: define G_OFFSET_FORMAT
+ 569105 g_time_val_to_iso8601() assumes time_t==long
+ 568394 dropping the last reference to a stream filter closes...
+ 568741 g_buffered_input_stream_fill_async doesn't work
+ 568723 g_buffered_input_stream_fill_async doesn't take count == -1
+ 568575 _async functions for GDataInputStream
+
+* Updated translations:
+ Bulgarian (bg)
+ Finnish (fi)
+ Hungarian (hu)
+ Oriya (or)
+ Swedish (sv)
+ Traditional Chinese (zh_HK)
+ Traditional Chinese (zy_TW)
+
+
+Overview of Changes from GLib 2.19.4 to GLib 2.19.5
+===================================================
+
+* Update included PCRE to 7.8
+
+* g_base64_decode_inplace: New function to do base64 decoding in place
+
+* Bugs fixed:
+ 567138 get_package_directory_from_module() does not free ...
+ 566569 gregex docs clarification
+ 566573 g_match_info_fetch_pos docs
+ 564728 Add function to decode base64 encoded data in place
+ 567838 G_STRUCT_OFFSETOF fails to compile under icc 9.1
+ 567977 textdomain() macro should not return NULL ...
+ 512779 --disable-regex breaks compilation
+ 566770 error code 0 for Too many open files is useless
+ 565484 g_content_type_guess passes non-UTF8 text to XDG ...
+
+* Updated translations:
+ Catalan (ca)
+ Spanish (es)
+ Italian (it)
+ Swedish (sv)
+
+ 
+Overview of Changes from GLib 2.19.3 to GLib 2.19.4
+===================================================
+
+* GIO:
+  - Use O_NOATIME when sniffing mimetypes
+  - Add a convenience method to check if a GSimpleAsyncResult
+    is valid
+
+* Bugs fixed:
+ 560676 function access for g_threads_supported
+ 565905 There is no g_context_group_set_translation_domain
+ 564210 SUN Studio 12 has supported visibility attribute
+ 565136 GObject's "notify" signal parameters are wrong in gtk-doc
+ 565831 error in interface creation sample
+ 566348 g_file_open_tmp uses the wrong g_mkstemp on win32
+ 566064 Add NOATIME flag to query_info_flags
+ 566170 g_async_result_verify_source_object
+
+* Updated translations:
+ Spanish (es)
+ Norwegian bokmål (nb)
+ Brazilian Portugese (pt_BR)
+ Simplified Chinese (zh_CN)
+
+
+Overview of Changes from GLib 2.19.1 to GLib 2.19.3
+===================================================
+
+* Bugs fixed:
+ 508021 Add support for the CRIS and CRISv32 architectures
+ 526320 should not list mounts that the user doesn't have permission to use
+ 558458 Cannot build gio tests on Solaris using SUN cc
+ 555465 GUnix{Input,Output}Stream lacks fd/close_fd_at_close property
+ 558298 Hide ecryptfs mounts
+ 515777 incorrect date&time on copy
+ 562452 Ensure we return G_IO_ERROR_CANCELLED if cancelling
+        g_simple_async_result_run_in_thread
+ 473150 g_type_module_use inconsistently increases the use
+        counter in case of error
+ 563150 G_GU?INT*_MODIFIER/FORMAT docs
+ 563156 Document printing and scanning gunichar values
+
+* Updated translations:
+ Hebrew (he)
+ Italian (it)
+ 
+
+Overview of Changes from GLib 2.19.0 to GLib 2.19.1
+===================================================
+
+* GIO: 
+  - g_icon_to_string, g_icon_new_for_string: GIcon serialization support
+  - G_FILE_ATTRIBUTE_PREVIEW_ICON: new file attribute for preview images
+  - g_app_info_get_commandline: new function to get the full commandline
+  - g_mount_shadow, g_mount_unshadow, g_mount_is_shadowed: New functions 
+    to 'shadow' mounts (i.e. hide them from the UI when they already
+    have a different representation, like a bookmark) 
+
+* Bugs fixed:
+ 556186 gpoll.h breaks gmain.h inclusion
+ 557087 mem leak in g_content_types_get_registered
+ 556921 gpoll.h breaks hal compilation
+ 557210 g_compute_checksum_for_* asserts with less than 2 bytes
+ 558381 Add support for compile time assertions
+ 558185 'parent' variable in g_local_file_get_child_for_display_name()
+        hits g_object_unref(NULL) assertion
+ 558513 g_warn_if_fail FIXME in gtestutils
+ 558672 NULL key lookup using g_hash_table_lookup_extended() 
+ 555740 gicon serialization
+ 557182 preview functionality
+ 528320 Incorrect icons displayed for files with custom mimetype icons
+ 556910 Memory leak: sub
+ 557592 Missing include in gwinhttpfile.c
+ 556415 Crash on Windows 2000 in g_winhttp_vfs_init()
+ 555935 Clarify the mechanism of overwriting properties
+ 552776 ac_cv_func_posix_getgrgid_r not mentioned
+ 559448 GObject Reference Manual (typo)
+ 561212 GFileReadMoreCallback API doc refers to non-existant function
+ 560569 gkeyfile doesn't use the set list_separator in some cases
+ 560568 gkeyfile docs buglet
+ 559413 g_option_group_set_error_hook docs buglet
+ 562378 callback return value not respected for callback option
+        with no arg
+ 559110 Do not include libintl.h after glibintl.h
+ 557603 carbon check output misplaced
+ 562544 g_key_file_get_string and g_key_file_get_value
+        documentation does not explain the difference
+ 547264 Missing "no flags" flag
+ 562638 GDebugKey key member should be const
+ 562639 g_parse_debug_flags() parsing "help"
+ 562549 g_byte_array_free should tell how free data
+ 559452 GObject Reference Manual (typo)
+ 559462 GObject Reference Manual (typo)
+ 559517 GObject Reference Manual (typo)
+ 562538 GObject interface tutorial shouldn't finalise with
+        "Please forget everything"
+ 561352 Leak of icon description
+ 561375 Leaks mountpoint description
+ 561807 inotify_sub.c: dup_dirname() fails to remove trailing '/'
+ 562393 g_buffered_input_stream_read_byte broken if data available
+ 541715 win32 : patch for warnings and signature problems in recent code
+ 547481 g_data_input_stream_read_line behaves not as stated in the docs
+ 548163 Nautilus displays wrong error message for too long file names
+ 559633 gtk_image_new_from_gicon does not always work for .desktop files
+ 555486 – No way to recover command line from GAppInfo
+
+* Translation updates:
+ Spanish (es)
+ Ukrainian (uk)
+
+
+Overview of Changes from GLib 2.18.1 to GLib 2.19.0
+===================================================
+
+* Rewrite GHashTable to use open addressing with quadratic probing instead 
+  of chaining. This has the potential to reduce memory fragmentation 
+  significantly, while being slightly faster due to better locality and 
+  no need to call alloc/free functions for nodes. Benchmarks suggest it 
+  also uses less memory overall.
+
+* Make g_poll available as public api
+
+* New macros g_assert_error and g_assert_no_error to assert 
+  that a GError is set or unset
+
+* g_cancellable_make_pollfd: New method to make a GPollFD for a cancellable
+
+* g_app_info_can_delete, g_app_info_delete, g_app_info_reset_type_associations:
+  New functions to clean up app infos and content types
+
+* When launching applications, always pass fuse file:// uris when possible,
+  and let gio convert such uris back to gio uris.
+
+* Bugs fixed:
+ 505361 gunixinputstream.c assumes poll() available
+ 509446 portable blocking gio cancellation
+ 553820 gpoll.c: undeclared identifier
+ 553724 python interpretter path not patched in correctly
+ 553857 gbacktrace.h requires signal.h
+ 553447 g_assert_no_error()
+ 554092 glib doesn't return G_FILE_ERROR_NOENT et al on OS X
+ 528670 Always pass file:/// uri's in GAppLaunchContext
+ 555224 Improve g_format_size_for_display doc
+ 555309 giochannel breaks on error
+ 554790 g_convert() misbehaves with winiconv versions
+ 555314 mem leak in gmarkup
+ 555313 GFileAttribute boxed type get_type function should...
+ 552861 glib-2.0.m4 calls system(3) without storing its result
+ 554557 Patch to fix gcc warnings about missing format specifiers
+ 552107 Small libtool fixes
+ 551355 Make glib build with libtool 2.2
+ 555311 format not a string literal and no format arguments
+ 556101 static mutex yields warnings with g++
+ 556186 gpoll.h breaks gmain.h inclusion
+ 526456 Open addressing in GHashTable
+ 553426 cancellable clarifications
+ 545350 GAppInfo deletion
+ 545351 Reset associations for content type
+ 552168 volume's mount not mounted after g_volume_mount_finish
+ 554970 segfault when update-desktop-database is not available...
+ 554745 GFileAttributeInfoList should be boxed
+ 555121 Improved build-time handling of gio module-dir
+ 555711 Wrong fallback order of mimetype icons
+ 555331 Deprecate adoption of mounts
+ 556335 make check fails in abicheck.sh
+ 556334 Warning when building without selinux support
+ 556422 g_file_enumerator_next_file: unclear...
+
+* Updated translations:
+ Arabic (ar)
+ Danish (da)
+ Polish (pl)
+ Brazilian Portugese (pt_BR)
+ Romanian (ro)
+ Russian (ru)
+
+
+Overview of Changes from GLib 2.18.0 to GLib 2.18.1
+===================================================
+
+* Bugs fixed:
+ 550433 g_test_init doesn't recognize --help
+ 523463 Core dump in gmain.c:2482:IA__g_main_context_check
+ 551228 G_STRFUNC on recent Sun compiler should be expanded...
+ 551410 gtestutils.c: using printf without prototype
+ 551731 g_date_set_time[_t] docs should mention what timezone
+ 548321 <string.h> is not included in gi18n-lib.h
+ 551149 xdgmime mem leak
+ 550647 synchronous pipe I/O when reading mount reply
+ 551887 Docs for g_desktop_app_info_new_from_filename aren't...
+ 551681 g_content_type_guess() too naive with filenames
+ 552352 g_app_info_launch doesn't work if "Path" key...
+ 551408 gmodule.def generated to builddir...
+ 552359 g_file_info_get_icon should return GThemedIcon, and...
+
+* Updated translations:
+ Arabic (ar)
+ Bengali India (bn_IN)
+ British English (en_GB)
+ Hindi (hi)
+ Croatian (hr)
+ Korean (ko)
+ Oriya (or)
+ Turkish (tr)
+ Telugu (te)
+
+
+Overview of Changes from GLib 2.17.7 to GLib 2.18.0
+===================================================
+
+* Win32:
+  - rework the g_poll() implementation to match poll() semantics more closely
+
+* Bugs fixed:
+ 324234 Using g_io_add_watch_full() to wait for connect() to return...
+ 548278 Async GETs connections are always terminated unexpectedly...
+ 500246 Bug fixes for giowin32
+ 523939 Example program for GValue
+ 550096 GBookmarkFile parser is not forward compatible
+ 550040 Move GString, rand and printf tests to the unit test framework
+ 550104 trivial documentation fix for g_get_home_dir
+ 548988 g_file_replace fails on Windows when the target file exists
+ 550059 Wrong docs for g_emblemed_icon_add_emblem
+ 548800 Missing a g_object_get_type function
+ 550056 Missing documentation for g_emblemed_icon_get_emblems
+
+* Updated translations:
+ Bulgarian (bg)
+ Czech (cs)
+ German (de)
+ Estonian (et)
+ Basque (eu)
+ French (fr)
+ Hebrew (he)
+ Hungarian (hu)
+ Italian (it)
+ Japanese (ja)
+ Lithuanian (lt)
+ Maithili (mai)
+ Dutch (nl)
+ Swedish (sv)
+ Thai (th)
+ Ukrainian (uk)
+ Vietnamese (vi)
+
+
+Overview of Changes from GLib 2.17.6 to GLib 2.17.7
+===================================================
+
+* More fixes for 64-bit Windows
+
+* GIO
+ - Add a vfs implementation for HTTP and HTTPS URIs on Windows
+
+* Bugs fixed:
+ 546329 API docs for g_utf8_normalize() are incorrect
+ 546876 Modify GMarkup parser to accept &#x1; .. &#x1f;
+ 547200 g_utf8_find_next_char() issues
+ 547637 unconditional #include of sys/statfs.h in configure
+ 547337 G_DISABLE_DEPRECATED breaks tests build
+ 547832 gtk+-2.12.11 fails to build - AC_PROG_MMAP too strict
+ 502498 Test framework assertion failures should follow gcc
+ 546371 Improve docs re g_file_monitor
+ 546483 GThemedIcon:use-default-fallbacks is not readable without...
+ 546132 GFileIcon is bindings-unfriendly
+ 542156 zfs mount in home directory shown on nautilus desktop 
+ 535124 umask 002 not being applied for new directories...
+ 547080 g_file_copy leaks expected errors
+ 546582 Callbacks from GFileMonitor present a GFile...
+ 547262 Missing link in the docs
+
+* Updated translations:
+ Arabic (ar)
+ Catalan (ca)
+ Spanish (es)
+ Basque (eu)
+ Finnish (fi)
+ Galician (gl)
+ Hebrew (he)
+ Marathi (mr)
+ Norwegian bokmål (nb)
+ Portugese (pt)
+ Brazilian Portugese (pt_BR)
+ Swedish (sv)
+ Thai (th)
+
+
+Overview of Changes from GLib 2.17.4 to GLib 2.17.6
+===================================================
+
+* Fix problems on 64-bit Windows
+
+* g_markup_context_get_user_data: New function to access
+  the user_data outside of callbacks
+
+* GIO
+ - g_mount_guess_content_type_sync: synchronous version of
+   g_mount_guess_content_type
+ - GEmblem: A GIcon implementation that adds emblem-related
+   metadata to icons
+ - GEmblemedIcon: A GIcon implementation that can add emblems
+   to icons
+
+* Bugs fixed:
+ 544088 option_test_LDADD is left in tests/Makefile.am
+ 544465 gmarkup makes it hard to use pre-rolled parsers
+ 545485 Implicit declaration of utime()
+ 545798 "Since: 2.18" mark is missing in g_set_error_literal...
+ 544140 fam-helper 64-bit issue
+ 529694 SELinux context setting support
+ 545157 wrong/no list of "open with" applications for .cc...
+ 545203 gfile.c: argument is different type
+ 545457 gdmsetup crashed with SIGSEGV in g_unix_mount_guess...
+ 544177 Fix trivial cut and paste error in documentation
+ 545395 Language tweak for g_value_set_string* docs
+ 541036 Gnumeric crashes when trying to open Desktop...
+ 546079 leak in xdgmime
+ 545395 Language tweak for g_value_set_string* docs
+ 546017 Don't copy attributes when copying a symlink
+
+* Updated translations:
+ Arabic (ar)
+ Estonian (et)
+ Galician (gl)
+ Italian (it)
+ Japanese (ja)
+ Korean (ko)
+ Norwegian bokmål (nb)
+ Pashto (ps)
+ Portugese (pt)
+
+
+Overview of Changes from GLib 2.17.3 to GLib 2.17.4
+===================================================
+
+* GIO:
+ - New API to handle content types: g_mount_guess_content_type,
+   g_content_type_guess_for_tree.
+ - Export the eject-button signal on the volume monitor class
+ - New API to enable out-of-process volume monitors: 
+   g_volume_get_activation_root
+
+* GObject:
+ - New API to handle signals without slots in the class structure:
+   g_signal_new_class_handler, g_signal_override_class_handler   
+
+* Internationalization:
+ - Add an NC_ macro that is a no-op equivalent of C_
+
+* GMarkup:
+ - Add two new functions g_markup_parse_context_push,
+   g_markup_parse_context_pop to support "subparsers"
+
+* Bugs fixed:
+ 541208 Functions to easily install and use signals without...
+ 541507 Ambiguous description of assigned characters in the...
+ 543040 async reading on dummy file will crash on GIO_USE_VFS=local
+ 543560 enable gio-FEN back-end warnings on Solaris will crash...
+ 528317 GRegex does not allow recursion limit
+ 337518 GMarkup: Subparser support
+ 541794 drive-eject-button signal
+ 541793 activation root for volumes
+ 467707 test_iconv_state() in tests/convert-test.c fails on AIX 5.3
+ 428048 2 of 51 tests fail on Solaris
+ 542332 small fix for error message in GMarkup
+ 482413 get_contents_stdio -- overflow and memory corruption
+ 406120 g_ascii_strtod
+ 334234 "printf" format error
+ 536996 Missing noop i18n macro equivalent to C_
+ 540616 mem leak in filechooser button
+ 539229 gobject-query calls itself query
+ 521589 [RFC] gobject documentation should mention Vala
+ 543168 Description of G_SLICE=debug-blocks discourages its use
+ 543220 Case collision on gio-extension-points.html
+ 530759 update the gobject tutorial to the XXI century
+ 535223 gbookmark file inefficiency ...
+ 543504 crash in Epiphany Web Browser: Opening local file
+
+* Updated translation:
+ German (de)
+ Estonian (et)
+ Pashto (ps)
+ Albanian (sq)
+ Thai (th)
+ Traditional Chinese (zh_HK)
+ Traditional Chinese (zh_TW)
+
+
+Overview of Changes from GLib 2.17.1 to GLib 2.17.3
+===================================================
+
+* PCRE
+ - fix for CVE-2008-2371 
+
+* Bugs fixed:
+ 538119 glib's mainloop leaks a pipe to sub-processes
+ 537635 Corrections and improvements to g_time_val_{to,from}_iso8601
+ 539067 The document g_io_channel_win32_new_fd() says...
+ 535949 annotate g_strip_context and g_dpgettext with G_GNUC_FORMAT
+ 539123 annotate g_d[n]gettext with G_GNUC_FORMAT
+ 539074 Cannot get exit status with g_spawn_command_line_sync
+ 316221 G_LOCK warns about breaking strict-aliasing rules
+ 539770 migrate gstrfunc unit tests to gtest
+ 539626 Update docstrings for g_object_freeze_notify and g_object_thaw_notify
+ 538044 unconditional use of LC_MESSAGES
+ 540545 Monotonic time and timer offset
+ 535947 want g_set_error_literal
+ 539999 glibconfig.h: add GLIB_USING_SYSTEM_PRINTF 
+ 536252 GFileEnumerator should allow access to the containing GFile
+ 538362 Get Win32 icons back in the file chooser
+ 540802 g_list_prepend doesn't concat lists
+ 540423 unrecoverable error after g_seekable_truncate
+ 538836 make check failure on PPC and ALPHA: pltcheck.sh on g_atomic_pointer_get
+ 539090 g_content_type_from_mime_type() should unalias
+ 540331 g_file_append_to () documentation: can return NULL
+ 534639 add g_desktop_app_info_new_from_keyfile
+ 536733 gio build failure on Irix
+ 536160 Add g_file_monitor()
+ 538127 FileChooser broken on win32
+ 531476 /live-g-file/test_traverse_structure test fails on Mac HFS+
+ 538564 gio should have gio-types.h
+ 540047 glib-genmarshal.c: '#include <io.h>' is too before
+
+Updated translations:
+ Korean (ko)
+ Occitan (oc)
+
+
+Overview of Changes from GLib 2.17.0 to GLib 2.17.1
+===================================================
+
+* New function: g_utime(), a gstdio wrapper for utime()
+
+* New functions: g_dgettext() and g_dngettext(), wrappers
+  for corresponding gettext functions with added functionaliy
+
+* Support the latest version of the shared-mime spec, including
+  icons for mime types 
+
+* New function: g_themed_icon_prepend_name()
+
+* Bugs fixed: 
+ 535418 Please document which glib version defines goffset
+ 528715 Misprint in the description of the interface g_type_class_add_private
+ 528714 Misprint in the description of the interface g_param_spec_flags
+ 537260 Doc bug in G_TYPE_INSTANCE_GET_CLASS()
+ 530527 Misprint in the description of the interface 
+        g_cclosure_marshal_VOID__FLAGS
+ 530526 Misprint in the description of the fields 'class_init' and 
+        'class_finalize' of the structure GTypeInfo
+ 528719 Improvement to the documentation of the "g_object_connect" interface
+ 528172 gtk_signal_handlers_unblock_* functions return value
+        amount of matched signals, not amount of actually unblocked
+ 528717 Misprint in the description of the parameter 'type_id' for 
+        the interface g_type_register_fundamental
+ 528716 Misprint in the description of the parameter 'iface_data' for 
+        the callback types GInterfaceInitFunc and GInterfaceFinalizeFunc 
+ 537555 GObject instantiation not thread safe
+ 537546 'desktop' shortcut in file chooser looks like a generic folder
+ 537392 Additional colon in xattr name
+ 536641 Filesystem querying in gio does not list AFS and autofs file systems
+ 528600 g_dummy_file_get_parent("scheme://example.com/")
+ 503071 Application direction changes to right to left even if theres no 
+        translation
+ 502511 g_assert_cmphex prints invalid message
+ 338162 Use po/LINGUAS
+ 314453 Nautilus crashes in Solaris when browsing the attached file
+ 529321 make check fails in glib/pcre
+ 455215 g_get_user_special_dir: no reference about G_USER_DIRECTORY_DOWNLOAD 
+        fallback to $HOME/Desktop if xdg-user-dirs is not in use
+ 498732 g_key_file_to_data cannot fail
+ 511367 add g_file_make_directory_with_parents
+ 531900 Use __builtin_offsetof for G_STRUCT_OFFSET if building with 
+        gcc 4.0 or newer
+ 536158 also bump GHashTable version when a node is removed via
+        g_hash_table_iter_remove()/g_hash_table_iter_steal()
+ 531403 g_utf8_collate broken on Mac
+ 535628 test/patterntest.c still includes gpattern.h directly
+ 535625 alias.h:2648: error: 'utime' undeclared here (not in a function)
+
+* Translation updates:
+ Arabic (ar)
+ German (de)
+ Italian (it)
+ Norwegian bokmål (nb)
+ Thai (th)
+
+
+Overview of Changes from GLib 2.16.x to GLib 2.17.0
+===================================================
+
+* Update to Unicode 5.1
+
+* Update included libcharset to the one shipped with libiconv 0.12
+
+* Update included PCRE to 7.7
+
+* Enforce that only toplevel headers are directly included.
+  This is turned on by default for GObject and GIO. To turn
+  it on for GLib, define G_DISABLE_SINGLE_INCLUDES.
+
+* Fix library version of GIO.  GLib 2.16 shipped with libgio-2.0.so.0.0.0
+
+* On Solaris, use FEN for file monitoring in GIO
+
+* Use the GIO_EXTRA_MODULES environment variable to find
+  additional GIO modules 
+
+* G_GNUC_ALLOC_SIZE: New macro that wraps the gcc alloc_size
+  function attribute
+
+* g_checksum_reset: New function to reset the state of a GChecksum 
+
+* g_unix_mount_monitor_set_rate_limit: New function to limit the 
+  rate at which events are reported
+
+* g_file_query_file_type: New utility function to query the type of
+  a file
+
+* g_memory_output_stream_get_data_size: New function to obtain the
+  size of the written data.
+
+* Bugs fixed:
+ 522292 Gives warnings in glib/gutils.h with GCC in C99 mode
+ 523298 win_iconv can't convert from UTF-8 to GB18030 (or vice versa)
+ 518160 replace two g_strdup_printf calls in GBookmarkFile
+ 523877 gbookmarkfile: avoid using g_string_append_printf() and
+        other optimizations 
+ 525192 100% CPU if run main loop with no IO sources
+ 315437 extern inline -> static inline
+ 524314 g_convert() on Win32 implicitly converts full width
+        alphanumerics into half width
+ 525732 Error in documentation for g_list_first
+ 525674 A typo in gmarkup.c
+ 448943 g_timeout_add_seconds() problems
+ 525972 UCS-4 not in the new win_iconv implementation
+ 526619 make test-report crash
+ 491554 Update to Unicode 5.1.0
+ 519137 g_slice_dup macro needs cast for 64-bit platform
+ 528752 Win32 build and SSL not working
+ 530457 G_USER_DIRECTORY_DOWNLOAD folder improperly mapped
+ 528667 Typos in testing module documentation
+ 459905 Bug in wcwidth data
+ 534085 g_unichar_iswide_cjk() has a totally wrong table
+ 501651 Update glib/libcharset
+ 519026 G_STMT_START/G_STMT_END test a non-existent preprocessor symbol
+ 534319 GLib's .pc files could use Libs.private
+ 534137 Typo in g_spawn_async_with_pipes doc
+ 517419 gio win32 directory monitor
+ 526796 Wrong order of arguments in g_file_copy's fallback
+ 530196 _g_local_file_has_trash_dir() doesn't handle st_dev == 0
+ 532965 Should not return filesystem::free for certain file systems
+ 525553 fix typo and nitpicking in GArray documentation
+ 526572 Missing * in declaration of parent_class in Object
+        Destruction section of GObject Reference Manual
+ 528648 Extra >s in Object Construction section
+ 535021 g_param_spec_internal documentation should
+        describe purpose of nick and blurb
+ 521513 Firefox crash when using file picker
+ 528433 gdesktopappinfo snafu ...
+ 533369 API g_file_info_get_attribute_string () unables to get "...
+ 521045 glib f_fstypename miscellany
+ 521672 compile error
+ 521946 control rate limit on GUnixMountMonitor
+ 522335 Fails to build: glib/gtester.c:276: error: 'ARG_MAX' unde...
+ 523015 Implement sliding window based upload operation
+ 523019 Use new GCC 4 feature
+ 523338 list nfs4 as a nfs mount type
+ 524350 Make glib build without NLS again
+ 524579 g_file_copy reports wrong total on progress callback for ...
+ 524742 A typo in gtestutils.c.
+ 524950 Minor documentation typos.
+ 525866 the user directory should not be considered as a mount to...
+ 526320 should not list mounts that the user doesn't have permiss...
+ 527132 nautilus crash when making ftp connection
+ 532852 CRITICAL **: totem_pl_parser_parse_with_base: assertion `...
+ 534759 Build failure in gio
+ 534764 Typo in error produced by g_file_make_directory
+ 521851 Redudant tests in gunixmounts.c
+ 524344 glib/gthread.h still use G_GNUC_PRETTY_FUNCTION
+ 525060 glib fails to build with -DG_DISABLE_ASSERT in CPPFLAGS o...
+ 534177 Invalid description of the interface g_cclosure_marshal_S...
+ 520715 Add GFile method g_file_query_file_type
+ 523039 nautilus can't access to trash/computer/network if gvfs i...
+ 
+* Updated translations:
+ Arabic (ar)
+ Bulgarian (bg)
+ Catalan (ca) 
+ Czech (cs)
+ Greek (el)
+ Candian English (en_CA)
+ British English (en_GB)
+ Spanish (es)
+ Estonian (et)
+ Basque (eu)
+ Galician (gl)
+ Hebrew (he)
+ Hungarian (hu)
+ Japanese (ja)
+ Lithuanian (lt)
+ Norwegian bokmål (nb)
+ Dutch (nl)
+ Occitan (oc)
+ Portugese (pt)
+ Russian (ru)
+ Slovak (sk)
+ Albanian (sq)
+ Swedish (sv)
+ Turkish (tr)
+ Vietnamese (vi)
+
+
+Overview of Changes from GLib 2.16.0 to GLib 2.16.1
+===================================================
+
+* Fix a crash in g_themed_icon_new
+
+* Update the included PCRE to 7.6
+
+
+Overview of Changes from GLib 2.15.6 to GLib 2.16.0
+===================================================
+
+* Fix the definition of G_INLINE_FUNC to work with gcc 4.3.0
+
+* GIO:
+ - Add missing GMountMountFlags argument to g_unix_volume_mount
+ - Fix the adopt_orphan_mount vfunc to take a volume monitor 
+   reference
+ - Add properties to GThemedIcon for bindings sake
+
+* Bugs fixed:
+ 520484 gvfsd-trash crashed with SIGSEGV in g_path_is_absolute()
+ 510855 g_checksum_update(): Take -1 for length.
+ 517676 g_themed_icon_new*() do more than call g_object_new().
+ 518816 should handle rmdir returning EEXIST correctly
+ 519352 g_[s]list_delete_link() docs
+ 519489 Fixes for sparse warnings in gio
+ 520169 add monitor argument to vfunc for GVolumeMonitor
+ 520700 Add type check in g_file_query_exists
+ 521145 FILE_READ_ONLY_VOLUME not present on Mingw32
+ 518720 No MIME type for empty files
+ 521013 in documentation, goffset doesn't say "Since 2.x"
+ 521028 Missleading error messages from g_io_channel_set_encoding()
+ 517484 GMainLoop could set the thread "Alertable" for APCs to be... 
+
+* Updated translations:
+ Assamese (as)
+ Bengali India (bn_IN)
+ Czech (cs)
+ German (de)
+ Spanish (es)
+ Estonian (et)
+ Finnish (fi)
+ French (fr)
+ Gujarati (gu)
+ Italian (it)
+ Lithuanian (lt)
+ Malayalam (ml)
+ Marathi (mr)
+ Norwegian bokmål (nb)
+ Romanian (ro)
+ Russian (ru)
+ Slovak (sk)
+ Ukrainian (uk)
+
+ 
+Overview of Changes from GLib 2.15.5 to GLib 2.15.6
+===================================================
+
+* GIO:
+ - New file attributes: trash::item-count, filesystem::use-preview
+ - Rename g_file_contains_file to g_file_has_prefix
+ - g_file_query_filesystem_info grew async variants
+ - g_themed_icon_append_name: new convenience function
+ - g_content_type_get_icon is implemented now
+ - Only show mounts in /media and ~
+ - g_file_contains_file has been renamed to g_file_has_prefix
+
+* Win32:
+ - g_win32_get_package_installation_directory_of_module: new function
+   which supersedes g_win32_get_package_installation_directory
+ - Use alertable wait functions so that I/O completion routines or 
+   user-mode Asynchronous Procedure Calls can be run
+ - Fix race conditions in g_spawn implementation on win32
+
+* Other:
+ - g_uri_get_scheme has been renamed go g_uri_parse_scheme
+
+* Updated translations:
+ Arabic (ar)
+ Belarusian Latin (be@latin)
+ Catalan (ca) 
+ British English (en_GB)
+ Finnish (fi)
+ Galician (gl)
+ Hebrew (he)
+ Italian (it)
+ Kannada (kn)
+ Norwegian bokmål (nb)
+ Dutch (nl)
+ Brazilian Portugese (pt_BR)
+ Vietnamese (vi)
+
+
+Overview of Changes from GLib 2.15.4 to GLib 2.15.5
+===================================================
+
+* Update the included PCRE to 7.6
+
+* GIO:
+ - g_volume_should_automount: new function to determine if a volume
+   should be mounted automatically
+ - g_file_query_default_handler: new convenience function to get
+   the default handler for a file
+ - g_app_info_launch_default_for_uri new convenience function to
+   launch the default handler for a URI
+ - Use mimeapps.list and defaults.list as discussed on xdg list
+   recently
+ - g_app_info_get_default_for_uri_scheme has a real implementation
+   now (gvfs provides a GConf-based implementation)
+ - There is the beginning of a test suite
+ - standard::description:  new file attribute
+ - GMountMountFlags flags argument added to mount calls
+
+* GObject:
+ - class initialization is now threadsafe
+
+* Updated translations:
+  Arabic (ar)
+  Catalan (ca)
+  Spanish (es)
+  Basque (eu)
+  Italian (it)
+  Japanese (ja)
+  Kannada (kn)
+  Korean (ko)
+  Macedonian (mk)
+  Occitan (oc)
+  Portugese (pt)
+  Brazilian Portugese (pt_BR)
+  Swedish (sv)
+  Thai (th)
+
+
+Overview of Changes from GLib 2.15.3 to GLib 2.15.4
+===================================================
+
+* G_GNUC_PRETTY_FUNCTION has been deprecated
+
+* GIO:
+ - g_file_copy has an async variant now
+ - Drives and volumes now have API to get identifiers
+   like Hal UDIs or UUIDs.
+ - There is now a registration API to let modules register
+   extensions they provide, such as volume monitor implementations
+
+* Bugs fixed:
+  511807 g_time_val_to_iso8601() uses MT-unsafe gmtime() function
+  316260 [patch] Doc patches for gnode (2.8.1)
+  385132 solaris gettext support fix
+  484261 ./configure check for system PCRE unicode support fails w...
+  510292 GOption main help not shown
+  511580 Implement g_file_copy_async
+  511654 Compile errors due to C99 constructs
+  487909 g_utf8_strreverse and combining marks
+  512381 unused variable 'is_main_group' 
+
+* Updated translations:
+  Arabic (ar)
+  Belarusian (be)
+  Czech (cz)
+  Spanish (es)
+  French (fr)
+  Galician (gl)
+  Portugese (pt)
+  Russian (ru)
+  Swedish (sv)
+  Thai (th)
+
+
+Overview of Changes from GLib 2.15.2 to GLib 2.15.3
+===================================================
+
+* GChecksum:
+ - g_checksum_update can accept nul-terminated strings
+ - The MD5 implementation works correctly on buffers 
+   that are longer than 64 bytes
+
+* GIO:
+ - Don't include a copy of the inotify headers, rely on system headers
+ - g_file_find_enclosing_mount has an async variant now
+ - Reduntant seek API on file streams has been removed
+
+* Bugs fixed:
+  508602 gmemory{in|out}putstream.c: unknown pointer size
+  508771 There is no g_file_test/exists() for GFile
+  508773 g_uri_escape_string() documentation unclear.
+  509465 AM_PATH_GLIB_2_0 doesn't support gio
+  509626 async functions: Document allowed NULL callback?
+  509990 GSeekable documentation unclear
+  510448 No inotify support on ARM or SH5
+  510855 g_checksum_update(): Take -1 for length. 
+
+* Updated translations:
+  Basque (eu)
+  Marathi (mr)
+  Swedish (sv)
+  Ukrainian (uk)
+
+
+Overview of Changes from GLib 2.15.1 to GLib 2.15.2
+===================================================
+
+* GIO:
+ - Mount operation API change: unhandled methods get reported via 
+   the reply, rather than by the signal emission return value
+ - File monitor API change: Add a GError argument to g_file_monitor_file
+ - g_unix_mount_guess_should_display(): new function
+
+* Bugs fixed:
+  508224 [PATCH] FAM backend crashes due to double free
+  508074 GAsyncResult documentation suggests g_freeing it.
+  508108 GFile documentation slightly unclear.
+  508309 rpc_pipefs mount points should be hidden
+  508378 GFileInfo documentation implies that it changes attribute...
+  508719 g_file_get_relative_path fails if parent is root
+  508773 g_uri_escape_string() documentation unclear.
+
+* Updated translations:
+  Arabic (ar)
+  Spanish (es)
+  Hebrew (he)
+  Italian (it)
+  Korean (ko)
+  Turkish (tr)
+
+
+Overview of Changes from GLib 2.15.0 to GLib 2.15.1
+===================================================
+
+ * Portability fixes:
+ - Assertion functions are marked as noreturn again
+ - Handling of inline functions has been fixed to work with gcc 4.3
+ - C99 comments have been removed from headers
+ - The nonportable sed -i option is no longer used
+
+ * GIO:
+  - Clarified the semantics of g_app_info_get_all()
+  - API for memory input and output streams has been changed a bit
+  - GDirectoryMonitor has been removed; GFileMonitor can monitor
+    files and directories now
+
+ * Bugs fixed:
+   504829 Invalid environment passed to g_spawn_async in g_desktop_...
+   505258 crash in Users and Groups: Adding a user
+   505815 g_content_types_get_registered should not g_free keys
+   491218 g_timer_new() doesn't initialize timer->end
+   315437 extern inline -> static inline
+   476856 Inconsistency between standard and implementation of the ...
+   480122 g_module_open fails to open modules with ".la" extension
+   495589 gspawn.c failing to set FD_CLOEXEC
+   500273 doesn't build with --disable-visibility
+   504142 Do not show empty groups in --help output
+   504879 giofam incorrectly linked
+   505042 add file attribute for actually used file size in bytes
+   505058 xattr namespace docs
+   505674 Misprint in the definition of the macro G_CCLOSURE_SWAP_DATA
+   505730 Fails to build on OSX 10.4: _NSGetEnviron not declared
+   505887 older darwin lacks lchown
+   506374 gmemoryinputstream api
+   506461 Conversion of g_assert_not_reached() and friends into fun...
+   503051 Small bug in glib interface
+   506395 Updates to GIO documentation
+   507628 Missing .pc entry for gio linking against glib
+   505195 [patch] typo in g_try_new0 docs 
+   507822 g{file,directory}monitor changes signal problem
+   506377 gmemoryoutputstream write implementation
+   507835 bug in gunixinputstream 
+
+ * Updated translations:
+   Arabic (ar)
+   Belarusian Latin (be@latin)
+   Spanish (es)
+   Basque (eu)
+   Irish (ga)
+   Hebrew (he)
+   Occitan (oc)
+   Vietnamese (vi)
+
+
+Overview of Changes from GLib 2.14.x to GLib 2.15.0
+===================================================
+
+Major new features:
+
+ * GIO: a VFS API, designed to replace GnomeVFS. The GIO implementation 
+   in GLib has support for local filesystems. The new, separate gvfs 
+   module contains various backend implementations (cifs, ftp, sftp,
+   http, ...)
+
+ * GChecksum: provides various hash algorithms, such as MD5, SHA-1
+   and SHA-256
+ 
+ * GTest: a test framework 
+ 
+Smaller additions:
+
+ * GHash:
+ - GHash has iterators, as an alternative to g_hash_table_foreach
+
+ * GMarkup: 
+ - g_markup_parse_context_get_element_stack: New function to
+   get the stack of open elements
+ - G_MARKUP_PREFIX_ERROR_POSITION: New flag to improve error
+   reporting
+ - g_markup_collect_attributes: Convenience function for handling
+   attributes
+
+* GKeyFile: 
+ - Functions that take a GError now return a boolean to indicate 
+   success, instead of void
+ - Various performance improvements
+
+* GAsyncQueue:
+ - g_async_queue_new_full: new function that allows to specify
+   a free function for leftover elements
+ 
+* GError:
+ - g_prefix_error and g_propagate_prefixed_error: New functions
+   to ease error propagation
+
+* Internationalization:
+ - C_: A new 2-argument variant of the Q_() macro 
+ - Use native character set conversion API on Windows
+
+* GLib builds with automake 1.10
+
+* Bugs fixed:
+ 455725 specific combination of g_utf8_strlen and g_pattern_match...
+ 467537 g_convert_with_iconv() not resetting iconv() state correc...
+ 497033 Commandline option parser should warn about missing optio...
+ 504527 gchecksum: Conditional jump or move depends on uninitiali...
+ 445362 Non-numeric local labels in gatomic.c are causing linker ...
+ 482313 gregex: no way to tell why compilation failed
+ 317775 main loops continues to run after g_main_loop_quit() has ...
+ 418778 Insufficient pkg-config version requirement
+ 436293 g_option_context_new() doc should mention that the string...
+ 466557 glib-mkenums shifts ARGV[0] to undefined
+ 468882 GKeyFile doesn't accept "True" as a true boolean value
+ 469551 application --help messages are garbaged on none UTF-8 lo...
+ 479724 Memory leak upon calling "g_main_loop_run" in the seconda...
+ 490061 outptrs uninitialized after g_parse_long_long
+ 490637 gobject documentation patch
+ 495294 glib-genmarshal prints warnings but returns 0
+ 496046 option to prefix location of errors for GMarkup
+ 498113 tests/regex-test fails on 64bit environment
+ 500506 Fails to build on OSX 10.4
+ 500638 gkeyfile speedup ...
+ 500875 Make check fails as there is no "test" target for "build"...
+ 502511 g_assert_cmphex prints invalid message
+ 502927 g_array_index triggers cast aligment warning
+ 503029 g_time_val_from_iso8601 parse non-ISO8601 dates
+ 503222 Need context to translate
+ 503420 gkeyfile leaks a hash table
+ 503470 Fix build when builddir != srcdir
+ 504227 Inverse variant for g_test_trap_assert_stdout, g_test_tra...
+ 71704 	file include order
+ 491957 Misprint in the specification of the interface "g_main_co...
+ 491959 Misprint in description of the structure "GThreadPool"
+ 491965 Mistype in the specification of the function "g_hook_list...
+ 491966 Misprint in the specification of the interface "g_main_co...
+ 491968 The documentation does not mention the restriction for th...
+ 491970 The documentation for the interface "g_date_clamp" is inc...
+ 491974 The documentation of the interface "g_main_context_iterat...
+ 491975 The documentation for the interfaces "g_io_channel_read_u...
+ 491979 Misprint in the description of the interfaces g_key_file_...
+ 491982 Misprint in the description of the interface "g_key_file_...
+ 501107 EXTRA_DIST automake warnings
+ 501997 g_utf8_normalize() returns NULL on invalid string
+ 502590 C_/g_dpgettext efficiency
+ 464259 g_set_application_name() docs should say "Since 2.2"
+ 496518 gbase64.c API doc clarification
+ 498728 g_key_file_get_*_list should set length to 0 when returni...
+ 500361 Improve docs for g_array_free() and g_ptr_array_free()
+ 501853 g_checksum_get_digest docs
+ 503862 Allow NULL strings in g_parse_debug_string()
+ 142676 Q_
+ 367550 Add g_async_queue_new_full() with GDestroyNotify function
+ 375651 Minor enhancements to GKeyFile API
+ 443648 MD5 digest support
+ 449937 Upgrade auto* sources to be clean under automake1.9
+ 452887 gmarkup context "get element" function is useless when ca...
+ 491549 [PATCH] Eliminate libiconv dependency on Windows
+ 500507 GHashTableIter API 
+
+* Translation updates
+ Belarusian Latin (be@latin)
+ Czech (cs)
+ German (de)
+ Spanish (es)
+ Esperanto (et)
+ French (fr)
+ Korean (ko)
+ Marathi (mr)
+ Norwegian bokmål (nb)
+ Brazilian Portugese (pt_BR)
+ Slovenian (sl)
+ Swedish (sv)
+
+
+Overview of Changes from GLib 2.14.2 to GLib 2.14.3
+===================================================
+
+* Update PCRE to 7.4
+
+* Bugs fixed:
+ 487491 Fix some warnings from sparse
+ 488068 Small (one-time) memory leak in glib_gettext initialization
+ 493688 TYPE macro "_get_type ()" is documented wrong
+
+* Updated translations:
+ Arabic (ar)
+ Belarusian Latin (be@latin)
+ Estonian (et)
+ Irish (ga)
+ Slovenian (sl)
+
+ 
+Overview of Changes from GLib 2.14.1 to GLib 2.14.2
+===================================================
+
+* Bugs fixed:
+ 476849 Invocation of the interface "g_hook_free" fails in certai...
+ 359165 marshallers can throw warnings with -Wunused
+ 477957 more discussion on g_value_set_object vs. g_value_take_ob...
+ 478459 G_DEFINE_DYNAMIC_TYPE_EXTENDED doesn't work with G_IMPLEM...
+ 483337 inline is disabled for MSVC when compiling C code
+ 478349 Broken link to gettext website
+ 469231 g_spawn optimization for setting all open fds to CLOEXEC 
+
+* Updated translations:
+Arabic (ar)
+Galician (gl)
+Hebrew (he)
+Korean (ko)
+
+
+Overview of Changes from GLib 2.14.0 to GLib 2.14.1
+===================================================
+
+* Bugs fixed:
+ 476840 Invocation of the interface "g_utf8_strreverse" crashes f...
+ 444765 Fix FIXME in gregex.c when new pcre is out
+ 464145 g_markup_escape_text Produces Invalid XML
+ 465625 g_type_default_interface_ref() does not ensure working g_...
+ 466768 Clearify that comments can be put anywhere in a Key-file.
+ 474229 The GError documentation should give convention for the G...
+ 474899 G_BREAKPOINT() docs inaccurate
+ 475854 Overuse of -lpcre when using system pcre
+ 473879 Incorrect includes in gregex.c
+ 468694 Typoes in documentation
+ 469051 g_snprintf () talks about characters where it probably me...
+ 457601 Missing arch specific atomic implementation
+ 475923 Missing pcre flags when static-linking against glib
+ 475619 glibthread-2.0.la does not list -lpthread
+
+* Updated translations:
+ Bulgarian (bg)
+ Catalan (ca)
+ Danish (da)
+ German (de)
+ Canadian English (en_CA)
+ British English (en_GB)
+ Spanish (es)
+ Estonian (et)
+ Finnish (fi)
+ French (fr)
+ Gujarati (gu)
+ Hungarian (hu)
+ Italian (it)
+ Georgian (ka)
+ Kannada (kn)
+ Lithuanian (lt)
+ Makedonian (mk)
+ Norwegian (nb)
+ Dutch (nl)
+ Polish (pl)
+ Portugese (pt)
+ Brazilian Portugese (pt_BR)
+ Romanian (ro)
+ Russian (ru)
+ Albanian (sq)
+ Serbian (sr, sr@Latn)
+ Swedish (sv)
+ Tamil (ta)
+ Thai (th)
+ Ukrainian (uk)
+ Vietnamese (vi)
+
+
+Overview of Changes from GLib 2.13.7 to GLib 2.14.0
+===================================================
+
+* Last-minute API additions:
+ - Make g_unichar_combining_class public
+ - Add goffset type, add G_MAXSSIZE and G_MINSSIZE
+
+* Update PCRE to 7.2
+
+* Bugs fixed:
+ 453998 Make _g_unichar_combining_class() public
+ 462549 gregex.c: variable is declared at middle of block
+ 417068 g_file_test doc inconsistency
+
+* Updated translations:
+ Assamese (as)
+ Basque (eu)
+ Kannada (kn)
+ Malayalam (ml)
+ Dutch (nl)
+ Polish (pl)
+ Brazilian Portugese (pt_BR)
+ Turkish (tr)
+
+
+Overview of Changes from GLib 2.13.6 to GLib 2.13.7
+===================================================
+
+* The memory corruption warning from the slice allocator that
+  occurred when threads were initialized after the slice allocator
+  has been removed, as the slice allocator now works fine
+  in this scenario.
+
+* New functions g_once_init_enter() and g_once_init_leave() make
+  it easier to write threadsafe one-time initialization functions 
+ 
+* Bugs fixed:
+ 454473 Simple XML Subset Parser terminates on invalid XML
+ 445813 g_module_open error, add file name
+ 453796 errno gets clobbered by g_filename_display_name
+ 341988 don't use "-c" with msgfmt in Makefile.in.in
+ 447048 Please produce slightly more output during long tests
+ 454785 GModule documentation lists same block of code twice.
+ 454786 GModule documentation lists same paragraph twice.
+ 383155 small docs quirks in gobject/closure API documentation
+ 65041  _get_type() functions aren't thread safe
+
+* Updated translations
+ Assamese (as)
+ Spanish (es)
+ Gujarati (gu)
+ Japanese (ja)
+ Korean (ko)
+ Macedonian (mk)
+
+
+Overview of Changes from GLib 2.13.5 to GLib 2.13.6
+===================================================
+
+* Reintroduce a GType typedef whose removal in 2.13.5
+  caused trouble for C++ bindings
+
+* Bugs fixed:
+ 450216 docs not explicit enough about g_free()
+ 451459 g_type_register_static_simple calls g_type_register_static
+
+* Updated translations
+ Norwegian bokmål (nb)
+ Sinhala (si)
+
+
+Overview of Changes from GLib 2.13.4 to GLib 2.13.5
+===================================================
+
+* xdg-user-dirs support: 
+ - the Desktop directory is guaranteed to be defined
+ - user-dirs.dirs is no longer reloaded on changes
+
+* Slice allocator: 
+ - new api to duplicate slices
+
+* Regular expression support:
+ - GRegex is a boxed type now
+
+* Bugs fixed:
+ 44793 make check failing in trunk
+ 354522 Small problem with PLT hiding 6 symbols
+ 363986 glib 2.12.4 does not compile with SGI IDO cc
+ 443869 g_type_class_add_private doesn't warn when adding 0-sized...
+ 446859 Legitimately return 0 for g_quark_from_string(NULL)
+ 447534 Small typo in g_timeout_add_seconds() doc
+ 447583 GStaticRWLock
+ 447935 g_get_current_dir SIGSEGV on long path
+ 448260 CLAMP has surprising result if low > high
+ 57693 	g_string_vprintf()
+ 442029 add g_slice_dup()
+ 445065 Add GRegex boxed type
+ 448819 Add full version of g_timeout_add_seconds()
+
+* Updated translations: 
+ Swedish (sv)
+ Oriya (or)
+ Hebrew (he)
+ Spanish (es)
+ Estonian (et)
+
+ 
+Overview of Changes from GLib 2.13.3 to GLib 2.13.4
+===================================================
+
+* Bugs fixed:
+ 444121 g_get_user_special_dir deadlocks
+ 444161 invalid UTF8 in key name shows up as valgrind error in g_...
+ 444130 g_option_context_get_help() is broken when there's a desc...
+
+
+Overview of Changes from GLib 2.13.2 to GLib 2.13.3
+===================================================
+
+* GKeyFile:
+ - Added defines for easier handling of desktop files
+
+* Unicode support:
+ - Update g_unichar_iswide_cjk for Unicode 5.0
+
+* Regular expression support:
+ - GRegex structs can now be ref-counted
+ - Some new functions for dealing with incremental 
+   replacement have been added
+ - The GRegexEvalCallback signature has been changed
+
+* g_get_user_special_dir() has been added to support
+  xdg-user-dirs
+
+* Bugs fixed:
+ 419376 Functions using named subpatterns behave inconsistently w...
+ 434358 g_regex_fetch_named() and g_regex_fetch_named_pos() are b...
+ 423708 typo in the README.win32 file see patch below
+ 339225 Add new defines for easier handling of .desktop files 
+ 442265 API additions/changes for GRegex
+ 432651 Add a glib-ish xdg_user_dir_lookup
+
+* Updated translations:
+ Estonian (et)
+ Norwegian bokmål (nb)
+
+
+Overview of Changes from GLib 2.13.1 to GLib 2.13.2
+===================================================
+
+* Unicode support:
+ - Add g_unichar_ismark()
+
+* GOption:
+ - Allow to use callbacks for remaining args
+
+* Updated translations:
+  Belarusian Latin (be@latin)
+  British English (en_GB)
+  Galician (gl)
+  Norwegian bokmål (nb)
+  Oriya (or)
+  Spanish (es)
+  Thai (th)
+
+
+Overview of Changes from GLib 2.13.0 to GLib 2.13.1
+===================================================
+
+* GRegex:
+ - Portability fixes
+ - Split into immutable GRegex and GMatchInfo
+ - Add g_regex_get_max_backref() and g_regex_get_capture_count()
+   to obtain information about the compiled regex
+
+* GKeyFile:
+ - Fix roundtrip problems
+ - Add g_key_file_load_from_dirs()
+
+* Unicode support:
+ - Fix corner cases in case conversion routines
+
+* GOption:
+  - Add a function to get the formatted help string
+
+* GHash:
+ - Add new functions g_hash_table_get_keys() and
+   g_hash_table_get_values() to retrieve the keys and
+   values in list form
+
+* Updated transations:
+  Simplified Chinese (zh_CN)
+  Arabic (ar)
+
+
+Overview of Changes from GLib 2.12 to GLib 2.13.0
+=================================================
+
+* Add GSequence, a list that is implemented using
+  a balanced binary tree.
+
+* Add GRegex, an implementation of Perl regular expressions,
+  based on PCRE.
+ 
+* Use Posix monotonic clocks instead of gettimeofday()
+  for GTimer when available.
+
+* Support static initialization of GQeues with G_QUEUE_INIT,
+  g_queue_init() and g_queue_clear().
+
+* Add g_string_chunk_clear() for clearing a 
+  GStringChunk.
+
+* Add g_unichar_get_script() to obtain Unicode
+  script information.
+
+* Add g_unichar_iszerowidth() to obtain information
+  about zero-width characters.
+
+* Add G_GNUC_MAY_ALIAS which wraps the gcc may_alias 
+  type attribute.
+
+* G_GNUC_INTERNAL has a working definition for the
+  Sun Studio compiler. This requires the macro to
+  be positioned before the function declaration.
+
+* The slice allocator can produce detailed debugging
+  information with G_SLICE=debug-blocks.
+
+* Modules support G_DEBUG flags resident-modules and
+  bind-now-modules.
+
+* Add G_DEFINE_DYNAMIC_TYPE() to make it easier
+  to define types in modules.
+
+* Bug fixes: too many to list them in detail here.
+
+* New and updated translations (be,bg,bn,ca,cs,de,
+  en_CA,en_GB,et,fa,fr,he,hu,it,ja,ku,lt,mg,mk,ml,
+  nb,ne,nn,pt,pt_BR,ro,sr,sr@Latn,sv,ta,uk,vi,zh_CN,
+  zh_HK,zh_TW)
+
+
+Overview of Changes from GLib 2.12.1 to GLib 2.12.2
+===================================================
+
+* Unicode updates:
+ - Normalization is following Unicode TR #29
+ - g_unichar_isxdigit() only accept characters
+   for which g_unichar_xdigit_value() returns a value
+ - g_unichar_toupper and g_unichar_tolower leave
+   unconvertable characters in place instead of
+   replacing them by NUL
+
+* Bugs fixed
+ 348491 g_utf8_strup() and g_utf8_strdown() returns 
+        string with NUL bytes
+ 349825	GKeyFile always inserts a newline before a group
+ 347842	g_unichar_isxdigit() is too general about what 
+        it considers a digit
+ 348694	g_utf8_normalize() hasn't been updated to PR #29
+ 348785	Hint about G_DEBUG in Message Logging docs
+ 349792	Wrong english string (UI)
+ 349952	gparamspecs.c uses gcc feature
+
+* Translation updates (ca,cs,de,dz,es,eu,fi,gu,ko,
+  nl,pl,tr,uk,zh_HK,zh_TW)
+
+
+Overview of Changes from GLib 2.12.0 to GLib 2.12.1
+===================================================
+
+* Update to final Unicode Character Database 5.0.0
+
+* Bugs fixed:
+ 346660 issues with base64 api documentation / g_base64_decode_cl...
+ 348136 Coverity reports allocation of wrong size CID #2839
+ 336281 Update to UCD 5.0
+ 346197 g_date_strftime %F option doesnt work for win32
+ 348011 Small optimization to real_toupper()
+ 246494 prototype mismatch in glib/gconvert.c
+
+* New and updated translations (bg,bn_IN,ca,dz,eu,fi,
+  fr,he,it,ja,mk,or,pt)
+
+
+Overview of Changes from GLib 2.11.4 to GLib 2.12
+=================================================
+
+* Bugs fixed:
+ 344905 leap-year bug in g_time_val_from_iso8601 w/o HAVE_TIMEGM
+
+* Updated translations (cy,nb,nl)
+
+
+Overview of Changes from GLib 2.11.3 to GLib 2.11.4
+===================================================
+
+* GBookmarkFile:
+ - g_bookmark_file_remove_item returns a boolean
+ 
+* g_mkstemp accepts the XXXXXX in the middle of
+  the template
+ 
+* Bugs fixed:
+ 344868 g_key_file_to_data should separate groups 
+
+* Updated translations (de,es,fr,gu,hi,ko,th)
+
+
+Overview of Changes from GLib 2.11.2 to GLib 2.11.3
+===================================================
+
+* GBookmarkFile:
+  - g_bookmark_file_move_item: Return TRUE in case of
+    an empty target
+
+* Bugs fixed: 
+ 343919 gunicollate.c: strxfrm bug on VC8
+
+* Updated translations (fi)
+
+Overview of Changes from GLib 2.11.1 to GLib 2.11.2
+===================================================
+
+* Add g_ascii_stroll to parse signed 64bit integers
+
+* GMarkup: add a flag to treat CDATA as text
+
+* GHashTable: add functions to remove all entries
+
+* GMainLoop: add functions to find the currently
+  running source, and determine if it is destroyed
+
+* Bug fixes:
+ 342563  g_atomic_thread_init() needs to be called before 
+         other _g_*_thread_init() functions
+ 343548  Potential use after free in callers of g_string_free() 
+ 168538  Wish: Clearing contents of GHashTables
+ 321886  GTK+ cannot be reliably used in multi-threaded 
+         applications
+ 341826  goption.c: 'strtoll' is C99's function
+ 343899  g_ascii_formatd dosn't work as expected for all 
+         format strings
+ 317793  Make GEnumValue strings const
+ 337129  Compile warnings in G_IMPLEMENT_INTERFACE
+ 303622  What is G_TYPE_CHAR?
+
+* Updated translations (bg,dz,eu,gl,ja,ko,nl,th,vi)
+ 
+
+Overview of Changes from GLib 2.11.0 to GLib 2.11.1
+===================================================
+
+* GOption  
+  - Support 64-bit integers 
+  - Allow optional text before and after the options
+    in help output
+
+* Bug fixes:
+ 340538 gbase64-test writes OOB 
+ 340816 GKeyFile set_string_list invalid memory reads 
+ 339105 g_key_file_parse_value_as_double
+ 340434 convert-test.c fails (function test_one_half)
+ 311043 Memory leaks (and potential infinite loops) 
+        when using G_ERRORCHECK_MUTEXES
+ 335198 Error checking mutexes are fubar  
+ 341237 Add a G_OPTION_ARG_INT64
+ 341192 g_io_channel_set_flags not implemented on win32
+ 336120 Allow adding description before/after GOption 
+        --help output body
+ 341191 misplaced check in g_relation_delete
+ 340530 mismatched calloc / g_free in win32 threads
+
+* Updated translation (es)
+
+Overview of Changes from GLib 2.10.x to GLib 2.11.0
+===================================================
+
+* GBookmarkFile: a parser for files containing bookmarks
+  stored using the Desktop Bookmark specification.
+
+* Base64 encoding support
+	
+* Unicode 5.0 support
+
+* GOption supports floating point numbers 
+
+* GKeyFile supports floating point numbers
+
+* Bug fixes:
+ 155884 gatomic.c should be based on new SDK
+ 157877 update-desktop-database doesn't handle duplicate entries
+ 164719 keyfile parser doesn't support floats
+ 327662 Import BookmarkFile from libegg
+ 329548 Add G_OPTION_ARG_DOUBLE
+ 329789 option-test.c type confusion
+ 332841 Segmentation Fault when %llu is passed to vasnprintf and 
+        HAVE_SNPRINTF is not defined
+ 333879 gthread/gthread-win32.c: IsDebuggerPresent needs '#define 
+        _WIN32_WINDOWS 0x0401'
+ 333916 g_timer_elapsed docs should mention that microseconds 
+        may be NULL
+ 334440 dlerror() portability issue causes crash on (old) a.out 
+        NetBSD platform
+ 334646 goption + error out params
+ 334799 g_remove() must check return value of remove()
+ 334943 make check FAIL: threadpool-test
+ 335215 Some breakages with GThreadPool
+ 336085 g_option_context_new parameter lacks better explanation
+ 336677 Documentation for g_object_ref_sink() is incorrect
+ 337027 gbookmarkfile.c: sys/time.h include error
+ 337553 Wrong escaping of URIs
+ 338572 Dereferencing NULL value in g_key_file_get_group_comment
+ 338845 g_completion_complete_utf8 crashes when NULL is passed to it
+ 339337 g_bookmark_file_set_description
+ 339338 gbookmarkfile.c, function expand_exec_line
+ 339340 gbookmarkfile.c, function bookmark_app_info_dump
+
+* Translation updates (bg,en_GB,et,gl,gu,he,hi,ka,nb,nl,nn,
+                       or,pt_BR,ro,tr,vi,zh_CN)
+
+
+Overview of Changes from GLib 2.10.0 to GLib 2.10.1
+===================================================
+
+* Bugs fixed:
+ 314794 Broken pthread detection on Darwin [Gregor Riepl]
+ 322476 Missing check for .dylib [Vladimir Panov]
+ 333651 Inconsistent _g_charset_get_aliases prototype [Julio 
+        M. Merino Vidal]
+ 333761 GInitiallyUnowned breaks application code [Sven Herzberg]
+
+* Win32 changes:
+ - Fix g_listenv() implementation.
+ - Allow up to 100 GPrivate structs
+
+* Translation updates (fr,hu,lt,pl,sv)
+
+
+Overview of Changes from GLib 2.9.6 to GLib 2.10.0
+==================================================
+
+* Bugs fixed:
+ 328997 64bit pointer trunction in glib slab-allocator
+        [Pascal Hofstee]
+ 331110 g_cond_broadcast(inform_cond) without holding 
+        inform_mutex [Chris Wilson, Sebastian Wilhelmi]
+ 332093 Fix some leaks in the tests [Kjartan Maraas]
+ 332435 g_utf8_strlen returns wrong value if a maximum 
+        number of bytes to check is specified 
+        [Matthias Clasen]
+ 331367 gslice requires more POSIX-like semantics for 
+        GPrivate destructors [Tor Lillqvist]
+
+* Documentation improvements [Matthias, Kang Jeong-Hee,
+  Tor Lillqvist, Stefan Kost]
+
+* Translation updates (el,eu,ka,uk)
+
+Overview of Changes from GLib 2.9.5 to GLib 2.9.6
+=================================================
+
+* Bugs fixed: 
+ 329124 distclean removes README [Kjartan Maraas, Tim Janik]
+ 317679 GRelation field type not documented [Behdad Esfahbod]
+ 329123 Typo in GTime docs [Kjartan Maraas]
+
+* Documentation improvements [Sven Herzberg, David
+  Schleef, Kjartan Maraas, Behdad Esfahbod]
+
+* Translation updates (cs,cy,it,ko,pt,sq,sr,sr@Latn,ru
+
+Overview of Changes from GLib 2.9.4 to GLib 2.9.5
+=================================================
+
+* Memory management: 
+  Runtime debugging support: The slice allocator
+  can be turned off by setting G_SLICE=always-malloc
+  in the environment. Zeroing of freed memory can
+  now be turned on at runtime by setting
+  G_DEBUG=gc-friendly in the environment. [Tim Janik]
+
+* Bugs fixed:
+ 328253 HP-UX/IA-64 uses ".so" as default shared library 
+        extension [Albert Chin]
+ 143380 unicode-encoding test fails converting to UTF-16 
+        with libiconv [Marc Moorcroft]
+ 328254 Build breakage (GSlice) [Jens Ganseuer]
+ 328705 C99ism in glib/gmem.c [Kazuki Iwamoto]
+
+* Translation updates (da,et,zh_CN)
+
+Overview of Changes from GLib 2.9.3 to GLib 2.9.4
+=================================================
+
+* Type system:
+  Fix a problem with g_object_compat_control() which 
+  can lead to segfaults in GTK+ applications on 64bit 
+  platforms. 
+
+* Thread suppport: 
+  Unused threads now fall back to the global pool after 
+  500 milliseconds, where they wait for another 
+  max-idle-time milliseconds. [Sebastian Wilhelmi]
+
+* Fix a memory allocation problem in GKeyFile. [Morten 
+  Welinder]
+
+
+Overview of Changes from GLib 2.9.2 to GLib 2.9.3
+=================================================
+
+* GTree:
+ - Replace the simple recursive implementation by
+   a nonrecursive, threaded one  [Maurizio Monge]
+
+* Change g_filename_display_name and
+  g_filename_display_basename to use the Unicode
+  replacement character U+FFFD instead of a question
+  mark, and don't append "(invalid encoding)"  [Matthias]
+
+* Documentation improvements [Sven Herzberg, Federico
+  Mena Quintero, Stefan Kost]
+
+* Bugs fixed:
+ 323937 gslice.c in glib 2.9.1 doesn't build on Mac OS X 
+        [Bogdan Nicula]
+ 326558 Some test failures on IRIX 6.5 [Daichi Kawahata]
+ 169285 "threaded" tree implementation for GTree 
+        [Maurizio Monge]
+ 326747 g_filename_display_basename adds (invalid encoding) 
+        [Alberto Ruiz]
+
+Other contributors: Christian Kellner, Murray Cumming
+
+New and updated translations (bg,ca,de,es,et,gu,ja,nl,th,vi)
+
+
+Overview of Changes from GLib 2.9.1 to GLib 2.9.2
+=================================================
+
+* Memory management:
+ - Add tests for cache colorization [Tim Janik]
+ - Minimize space consumption if small amounts of differently
+   sized slices are allocated, at a small performance cost.  [Tim]
+
+* Thread support:
+ - Add g_atomic_pointer_set() and g_atomic_int_set() [Tim Janik,
+   Sebastian Wilhelmi]
+ - Add g_thread_pool_set_sort_function() to allow sorting the 
+   tasks of a threadpool.  [Martyn Russell]
+ - Add g_thread_pool_set_idle_time() to allow unused threads
+   to exit after a certain time.  [Martyn]
+
+* Type system:
+ - introduce a new type GInitiallyUnowned, which has an initial
+   floating reference. [Tim]
+ - Add support for GType parameters. [Matthias]
+
+* Main loop:
+ - Add g_main_context_is_owner() to determine if the current
+   thread is the owner of the context.  [Michael Meeks]
+
+* Provide g_access(), g_chdir(), g_unlink(), g_rmdir() as 
+  wrapper functions instead of macros.  [Manish Singh]
+
+* Documentation improvements [Tim, Matthias, Federico Mena Quintero,
+  Stefan Kasal, Dan Williams]
+
+* New and updated translations (en_CA,fi,fr,gl,ml,nb,no,zh_HK,zh_TW)
+
+* Bugs fixed:
+ 324179 g_allocator_new() returns pointer to const dummy which Gtk+ 2.8 
+        tries to modify [J. Ali Harlow]
+ 324332 g_option_context_parse() returns false without setting error 
+        [Tim-Philipp Müller]
+ 324950 GLIB 2.9.1 testcase errors [Dan Yefimov]
+ 325015 gslice.c: process.h is needed on Windows [Kazuki Iwamoto]
+ 321978 G_DATALIST_GET_FLAGS() macro is not casting datalist to 
+        gpointer [Andrew Paprocki]
+ 316221 G_LOCK warns about breaking strict-aliasing [Michal Benes, 
+        Stanislav Brabec]
+ 325273 Error in documentation for glib_check_version () [Declan Naughton]
+ 325310 g_spawn_sync hangs when catching both stdout and 
+        stderr [Tor Lillqvist]
+ 325249 gcc warning when using g_rmdir from <glib/gstdio.h> [Jani Monoses]
+ 325864 glib/gthreadpool.c:"#define debug(...)" is C99 [Kazuki Iwamoto]
+ 325874 Should say somewhere that source IDs are > 0 [Dan Williams]
+ 325438 a typo (compatability) [Stefan Kasal]
+ 323937 gslice.c in glib 2.9.1 doesn't build on Mac OS X [Bogdan Nicula]
+
+
+Overview of Changes from GLib 2.9.0 to GLib 2.9.1
+=================================================
+
+* Memory management
+ - The slice allocator is implemented [Tim Janik]
+ - g_slice_free_chain() has been renamed to 
+   g_slice_free_chain_with_offset()  [Tim, Behdad Esfahbod]
+ - Mem chunks are deprecated [Matthias Clasen]
+
+* Data structures
+ - Hash tables are refcounted, and have a boxed type [Tim]
+
+* Thread support
+ - Support for Solaris threads has been removed 
+   [Sebastian Wilhelmi, Andrew Paprocki]
+ - g_async_queue_sort(), g_async_queue_push_sorted() have 
+   been added to allow GAsyncQueue to be used as a priority 
+   queue, together with the corresponding _unlocked 
+   variants  [Martyn Russell]
+
+* GObject:
+ - The concept of a floating initial reference has been
+   moved from GtkObject to GObject [Tim]
+
+* Win32 changes:
+ - Make g_rename() replace existing files [Tor Lillqvist]
+
+* Misc new API:
+ - G_GUINT64_CONSTANT macro to define guint64 
+   constants [Andrew Paprocki]
+ - G_GNUC_WARN_UNUSED_RESULT macro to instruct the 
+   compiler to emit a warning if the value returned
+   by a function is ignored. [Arjan van de Ven, Alex Larsson]
+ - GList and GSList now have sort functions which take an
+   extra user data argument [Martyn Russell]
+ - g_param_spec_ref_sink() has been added for consistency [Tim]
+
+* $LOGNAME is respected when determining user data. [Laszlo Peter]
+
+* Other changes and bug fixes [Tim, Matthias, Behdad, 
+  Christian Persch, Benedikt Meurer, Andrew Paprocki, 
+  Kazuki Iwamoto, Alexis S. L. Carvalho, Stanislav Brabec,
+  Andreas Schwab, Kalle Vahlman]
+
+* Documentation
+ - Deprecation warnings carry version information [Matthias]
+ - The slice allocator has been documented [Matthias, Tim]
+ - Other improvements [Morten Welinder]
+
+Overview of Changes from GLib 2.8.x to GLib 2.9.0
+=================================================
+* Unicode support:
+ - The Unicode tables have been updated to Unicode 4.1, 
+   adding several new values to the GUnicodeBreakType 
+   enumeration. This breaks Pango <= 1.10 
+   [Behdad Esfahbod]
+ - The various Unicode character predicate functions 
+   (g_unichar_isalpha, g_unichar_isdigit,...) have
+   been optimized
+   [Behdad]
+ - g_utf8_pointer_to_offset, g_utf8_offset_to_pointer:
+   These functions handle negative offsets now, and
+   going backwards in g_utf8_offset_to_pointer uses
+   "stutter stepping".
+   [Larry Ewing, Matthias Clasen]
+
+* Memory management:
+ - Mem chunks are no longer used internally in GLib and
+   GObject. GMemChunk will be deprecated in GLib 2.10
+ - All APIs based on GAllocator (g_list_push/pop_allocator,
+   and similar push/pop_allocator functions for other
+   data structures) have been deprecated, since they
+   never worked as intended.
+ - The g_slice_* functions have been added as a 
+   new API for fast allocation of small memory blocks. 
+   The implementation in GLib 2.9.0 is just a simple 
+   wrapper around malloc. GLib 2.10 will have an
+   efficient and scalable implementation. 
+   [Tim Janik, Matthias]
+
+* Pattern matching:
+ - g_pattern_match has been optimized to avoid
+   unnecessary recursion.
+   [Tim, Matthias]
+
+* g_intern_string, g_intern_static_string: 
+ - New functions to intern strings. These are now used 
+   by GObject to avoid duplicating static strings 
+   [Matthias]
+
+* g_thread_foreach: 
+ - New function to iterate over all GThreads 
+   [Tim, Matthias]
+
+* g_date_set_time_t, g_date_set_time_val:
+ - New functions to set a GDate from a time_t or
+   GTimeVal value. g_date_set_time has been deprecated 
+   in favor of these.
+   [Roger Leigh]
+
+* g_snprintf and g_vsnprintf:
+ - These functions are no longer declared in gprintf.h, 
+   since they are in glib.h
+   [Matthias]
+
+Overview of Changes from GLib 2.8.0 to GLib 2.8.1
+=================================================
+* Optimize single-character insertions in GString [Ross Burton]
+* Fix build problems on OS X
+* Fix build problems on Win32 [Tor Lillqvist, Hans Breuer]
+* Other bug fixes [Matthew F. Barnes, Stepan Kasal] 
+* Documentation improvements [Tristan van Berkom, Behnam
+  Esfahbod, Gustavo Carneiro, Stepan Kasal, Matthias]
+* New and updated translations (ca,cy,ko,ro,uk)
+
+Overview of Changes from GLib 2.7.7 to GLib 2.8.0
+=================================================
+* Make g_value_transform() handle enum values
+  correctly on ppc64.  [Michael Lorenz]
+  (Third-party code accessing enumeration values 
+  in GValues should also be changed to access 
+  v_long, not v_int, in order to work on bigendian 
+  64bit machines.)
+* Make g_flags_get_first_value() handle a value
+  of 0 meaningfully. [Tim-Philipp Müller] 
+
+Overview of Changes from GLib 2.7.6 to GLib 2.7.7
+=================================================
+* Make atomic operations on s390 work [Matthias]
+* Fix C++ guards in gstdio.h [Tor Lillqvist]
+
+Overview of Changes from GLib 2.7.5 to GLib 2.7.6
+=================================================
+* Add native implementations of atomic operations 
+  on s390 [Matthias]
+* Make atomic reference counting of closures
+  work on s390 [Matthias]
+* Avoid an infinite loop in g_convert_with_iconv().
+  [Sebastian Bacher]
+* Documentation improvements [Ross Burton]
+
+Overview of Changes from GLib 2.7.4 to GLib 2.7.5
+=================================================
+* Thread-related changes
+ - Fix build issues on HP-UX [Paul Cornett]
+ - Threadsafe access to flags stored in datasets [Tim Janik]
+ - Fix several issues with atomic refcounting for 
+   closures, objects and paramspecs [Tim]
+ - Improve tests for atomic refcounting changes [Tim]
+* Fix handling of stateful encodings in g_convert_* [Matthias]
+* Fix translation of GOption help output [Dan Winship]
+* Catch format errors in translations. This may cause 
+  "make check" to fail when using older versions
+  of gettext [Matthias]
+* Win32 bug fixes [Tor Lillqvist]
+* Documentation improvements [Ross Burton, Jochen Baier, 
+  Matthias, Tim]
+* New and updated translations (de,fi,gu,pl,pt,tr,zh_TW)
+
+Overview of Changes from GLib 2.7.3 to GLib 2.7.4
+=================================================
+* Fix g_atomic_pointer_compare_and_exchange 
+  on Sparc64 [Gert Doering]
+* Fix a hang in g_thread_pool_free. [Hong Jen Yee]
+* Win32 bug fixes [Tor Lillquist]
+* Other bug fixes [Benoit Dejean, Manish Singh]
+* Documentation improvements [Bryan Silverthorn,
+  Callum McKenzie] 
+* New and updated translations (de,lt,sq,zh_CN)
+
+Overview of Changes from GLib 2.7.2 to GLib 2.7.3
+=================================================
+* GOption
+ - Allow callbacks with optional arguments [Pawel Sliwowski]
+ - Allow to turn off the automatic long option name
+   disambiguation  [Adam McLaurin]
+ - Only allow printable ASCII as short option names [Matthias]
+* Win32
+ - Build fixes [Tor Lillqvist]
+ - Rewrite iochannel socket implementation [Tor]
+* GObject
+ - Threadsafety improvements; in particular, refcounting
+   of objects is done atomically now. [Wim Taymans, Tim Janik]
+* Bug fixes [Morten Welinder, Matthias, Wim Taymans]
+* Documentation improvements [Richard Laager, Matthias]
+* New and improved translations (bf,cs,hu,nb,nl,no)
+
+Overview of Changes from GLib 2.7.1 to GLib 2.7.2
+=================================================
+* Win32 build fixes [Hans Breuer]
+* Bug fixes [Mikael Magnusson]
+* Documentation improvements [Matthias Clasen]
+* New and updated translations (en_CA,es,et,ja,sr,sr@Latn,zh_TW)
+
+Overview of Changes from GLib 2.7.0 to GLib 2.7.1
+=================================================
+* GOption 
+ - Allow callback arguments without parameters [Dan Winship]
+* GMappedFile: an mmap wrapper [David Schleef, Behdad Esfahbod]
+* Misc new functions:
+ - g_get_host_name [Tor Lillqvist]
+ - g_mkdir_with_parents [Tor]
+ - g_build_pathv, g_build_filenamev [Todd A. Fisher, 
+   Matthias Clasen]
+* Bug fixes [Roger Leigh, Masatake YAMATO, Kjartan Maraas,
+  Manish Singh, Tor, Murray Cumming, Kian Duffy, Morten Welinder]
+* Documentation improvements [Hong Gang XU, Dan Winship, Matthias]
+* New and updated translations (bg,cs,da,en_CA,es,et,nb,nl,no,
+  sk,th,zh_TW)
+
+Overview of Changes from GLib 2.6.x to GLib 2.7.0
+=================================================
+* GKeyFile
+ - Add unit tests [Matthias Clasen, Suren A. Chilingaryan]
+ - Accept \r\n as line end [Bastian Nocera]
+ - Don't interpret leading zeros as octal numbers. [Matthias]
+ - Make key and group removal work [David Hoover, Matthias Hasselmann]
+* GOption
+ - Improve formatting of --help output [Matthias, Noah Levitt]
+ - Accept -? [Matthias]
+ - Warn about duplicate main groups [Jeff Franks]
+ - Treat '-' as non-option argument [Tim Musson, Thomas Leonard]
+ - Report missing arguments as errors [Björn Lindqvist]
+ - Add a boxed type for GDate [Tim-Philipp Müller]
+* GTree
+ - g_tree_remove() and g_tree_steal() return status information [Matthew F. Barnes]
+* Stdio wrappers
+ - Work regardless of large file support [Manish Singh]
+ - Add g_access(), g_chmod(), g_creat(), g_chdir [Tor Lillqvist]
+* GObject
+ - Implement "toggle references" to help language bindings [Owen Taylor]
+ - Allow to mark names, nicks and blurbs of pspecs as static [Ben Maurer, Matthias]
+ - Make pspec lookup a bit faster [Morten Welinder]
+* Add g_listenv() to list all set environment variables [Hans Petter Jansson]
+* Add g_file_set_contents() to atomically write a file.  [Søren Sandmann,
+  Sven Neumann, Manish, Alexis S. L. Carvalho]
+* Add g_try_malloc(), g_try_new(), g_try_new0() and g_try_renew() [Stefan Kost]
+* Add g_utf8_collate_key_for_filename() to sort filenames taking
+  extensions and numeric suffixes into account.  [Ole Laursen, Alex Larsson]
+* Add G_GNUC_NULL_TERMINATED to mark varargs function with 
+  NULL-terminated argument lists. [Marc Meissner]
+* Win32 changes
+ - Improved debugability [Ulf Lamping, Hans Breuer]
+ - Make filename handling more robust [Tor, Billy Skaggs]
+ - Improve g_get_system_data_dirs() [Tor]
+ - Use more precise timers [Tor]
+ - Build fixes [Kazuki Iwamoto, Hans, Tor, Robert Ögren]
+* Other bug fixes [Roger Leigh, Owen, Matthias, Morten, Kjartan Maraas, 
+  Pawel Sakowski, Tor, Simon Budig, Ed Avis, Manish, Nicolas Laurent, 
+  Bastien, Fabrício Barros Cabral, Michael Banck, Daniel Atallah, 
+  J. Ali Harlow, Tim Janik, Hazael Maldonado Torres, Sven, Jon-Kare Hellan,
+  Dave Benson, Tommi Komulainen, Benjamin Otte, Brian Cameron, Changwoo Ryu, 
+  Christian Biere, Noah, Benoît Carpentier]
+* Documentation improvements [Vincent Untz, Matthias, Tim-Philipp Müller,
+  Morten, Matthew, Federico Mena Quintero, Sebastian Bacher, Oliver Sessink, 
+  Stefan, Jared Lash, Tor, Owen, Daniel Vaillard, Mathieu Lacage]
+* New and updated translations (ca,cs,da,el,en_CA,en_GB,es,et,eu,fa,fr,gl,
+  hu,id,it,lt,mn,ne,nl,pl,pt,pt_BR,ro,rw,sk,sq,sr,sr@Latn,tl,uk,xh,zh_CN)
+
+Overview of Changes from GLib 2.6.0 to GLib 2.6.1
+=================================================
+* GOption
+ - Make gtk_init(NULL, NULL) work again [Marcin Krzyzanowski]
+ - Improve handling of -- [Matthias Clasen]
+ - Don't show G_OPTION_REMAINING in --help output [Matthew F. Barnes]
+* g_find_program_in_path() doesn't return directories [Tommi Komulainen]
+* Add gmodule-export-2.0.pc [Matthias]
+* Win32 changes
+ - Improve hangling of UNC paths [Tor Lillqvist]
+ - g_getenv(), g_setenv(), g_unsetenv(), g_find_program_in_path()
+   take and return UTF-8 now [Tor] 
+ - Make g_file_test() work more reliably, and use PATHEXT
+   when check for executables [Tor]
+ - Build and cross-compilation fixes [J. Ali Harlow]
+* Other bug fixes [Jens Hatlak, Morten Welinder, 
+  Tor, Kalpesh Shah, Adrian Bunk]
+* Documentation improvements [Marcin Krzyzanowski, Tor, Crispin
+  Flowerday, Mariano Suárez-Alvarez, Christian Biere, Danny Milo,
+  Vincent Untz, Bastien Nocera]
+* New and updated translations (cy,de,nl,ru,sq,sv)
+
+Overview of Changes from GLib 2.4.x to GLib 2.6.0
+=================================================
+
+* Major new APIs
+  - GOption, a commandline option parser
+  - GKeyFile, a parser/editor for the .ini like files 
+  - Functions to support the XDG basedir specification
+  - Wrappers for common POSIX pathname functions to handle filename
+    encodings consistently. On Windows, these use UTF-8.
+
+* Miscellaneous new functions
+  - g_filename_display_name() converts filenames in displayable UTF-8 strings
+  - g_uri_list_extract_uris() splits uri lists
+  - g_date_get_iso8601_week_of_year() gets ISO 8601 week numbers
+  - g_log_set_default_handler() installs an alternate default log handler
+  - g_get_language_names() obtains a list of applicable locale names
+  - g_strv_length() calculates the length of NULL-terminated string arrays
+  - g_win32_get_windows_version() determines the Windows version 
+  - G_GNUC_INTERNAL marks functions as non-exported
+  - glib_check_version() checks the GLib version at runtime
+  - g_debug() completes the family of logging functions
+
+* Performance improvements
+  - Optimize g_utf8_validate()
+  - Optimize g_markup_parse_context_parse()
+  - Reduce signal connection complexity from O(n) to O(1) 
+  - Get rid of many PLT entries for internally used exported symbols
+  - Reduce code size by removing literal strings from g_return_if_fail()
+
+* Other changes
+  - On Windows, GLib functions that take file name arguments now require
+    those to be in UTF-8. Functions that return file names return UTF-8.
+  - Use higher precision for mathematical constants
+  - Don't convert to/from UTF-8 in g_filename_to_uri/g_filename_from_uri
+  - Support ll as printf format modifier for long long on all platforms
+  - Clean up the ABI and enforce the list of exported symbols
+  - Add a .pc file for using gmodule in libraries
+  - Require ngettext
+
+Overview of Changes from GLib 2.5.7 to GLib 2.6.0
+=================================================
+* GOption: Don't list help options if group-specific
+  options have been requested [Glynn Foster]
+* Make g_get_language_names() track locale changes [Christian Persch]
+* Win32 bug fixes [Tor Lillqvist]
+* Bug fixes [Philippe Blain, Owen Taylor, Sebastian Wilhelmi]
+* New and updated translations (da,es,ja,lt,zh_CN)
+Bugs fixed: 159530,100697,160271,160645,157255
+
+Overview of Changes from GLib 2.5.6 to GLib 2.5.7
+=================================================
+* Optimize g_utf8_validate() [Owen Taylor, Matthias Clasen]
+* Optimize g_markup_parse_context_parse() [Havoc Pennington, 
+  Morten Welinder]
+* Reduce signal connection complexity from O(n) to O(1) 
+  [Sven Neumann]
+* Add a .pc file for using gmodule in libraries [Owen]
+* Add G_GNUC_MALLOC to mark functions returning newly 
+  allocated memory  [Matthias]
+* Win32 bug fixes [Hans Breuer, Tor Lillqvist, Robert Ögren,
+  Bruce Hochstetler]
+* Bug fixes [Kazuki IWAMOTO, Matthias, Manish Singh, Morten,
+  Frederic Crozat, Tor]
+* Documentation improvements [Matthias, Tor, Owen]
+* New and updated translations (cs,da,de,en_CA,en_GB,es,nb,nl,sq,zh_CN)
+
+Overview of Changes from GLib 2.5.5 to GLib 2.5.6
+=================================================
+* GOption
+  - Add G_OPTION_FLAG_REVERSE to allow options 
+    which unset a  boolean variable [Tor Lillqvist]
+* GChildWatch
+  - Use sigaction instead of signal [Jonas Jonnson, 
+  Archana Shah]
+  - Make the very first SIGCHLD work [Gustavo Carneiro]
+* Bug fixes [Morten Welinder, Tor, David MacLachlan,
+  Manish Singh, J. Ali Harlow]
+* Documentation improvements [Matthias Clasen, Tor]
+* Updated translations (da,ja,tr,zh_CN)
+
+Overview of Changes from GLib 2.5.4 to GLib 2.5.5
+=================================================
+* GKeyFile
+  - Cleanups, add more error checking [Ray Strode]
+  - Fall back to the untranslated string when getting 
+    locale strings [Mark McLoughlin]
+* GOption
+  - Document GOption [Matthias Clasen]
+  - Better support for rest arguments [Owen Taylor, Matthias]
+  - Handle conflicts between groups [Matthias]
+* Add g_lstat() to the stdio wrappers [Tor Lillqvist]
+* Add g_filename_display_name() to convert filenames
+  in displayable UTF-8 strings  [Alex Larsson, Matthias]
+* Win32 bug fixes [Kazuki IWAMOTO, Hans Breuer, Tor]
+* Bug fixes [Christophe Fergeau, Morten Welinder, 
+  Owen, Kjartan Maraas, Mark]
+* Documentation improvements [Matthias, Tor]
+
+Overview of Changes from GLib 2.5.3 to GLib 2.5.4
+=================================================
+Add GKeyFile, a parser/editor for the .ini like files used in various
+   freedesktop.org specifications. [Ray Strode]
+Make the handling of filename encodings consistent across all
+   GLib functions, introduce wrappers for common POSIX 
+   functions which accept the same filename encoding. [Tor Lillqvist, 
+   Owen Taylor]
+GOption
+ - Rename g_context_option_error_quark() to a more language-binding
+   friendly name [Murray Cumming]
+ - Accept backslashes in filenames on Win32 [Tor Lillqvist]
+* Strip the internal aliasing prefix IA__ from function names in 
+  assertions [Matthias Clasen]
+* Add a function to split uri lists. [Matthias]
+* Win32 bug fixes 
+ - Don't open console windows [Tor]
+* Other bug fixes [Philippe Blain, Robert Ögren, Hidetaka Iwai, Matthias,
+ Morten Welinder, Mats-Ola Persson, Tor, Nickolay V. Shmyrev, Kjartan Maraas,
+  Anders Carlsson, Tim-Philipp Müller, Lucas Rocha, Andrea Campi, Manish
+  Singh, Thomas Fitzsimmons, Kazuki IWAMOTO]
+* Documentation improvements [Matthias, Linus Walleij, Nickolay, Philippe, 
+ Adam Hooper, Gustavo Carneiro]
+* New and updated translations (cs,en_CA,en_GB,ja,nb,nl,or,sr,sr@Latn,sq)
+
+Overview of Changes from GLib 2.5.2 to GLib 2.5.3
+=================================================
+* GOption
+ - set the program name from argv[0] [Masatake YAMATO] 
+ - make contexts work without a main group [Anders Carlsson]
+* Performance 
+ - Get rid of many PLT entries for internally used exported symbols,
+   and clean up the ABI at the same time and make make check check the
+   list of exported symbols.  [Matthias Clasen]
+* Add API to get ISO 8601 week numbers [Niklas Lundell]
+* Add API to install an alternate default log handler [Darin Adler]
+* Add API to obtain a list of applicable locale names [Hidetoshi Tajima]
+* Reduce code size bloat by removing literal strings from
+ the g_return_if_fail() macros [Owen Taylor]
+* Add g_strv_length [Tim-Philipp Müller]
+* Win32 changes
+ - Add API to determine the Windows version [Tor Lillqvist]
+* Other bug fixes [Stepan Kasal, Anders, Tor, Kazuki Iwamoto,
+  Manish Singh]
+* Documentation improvements [Morten Welinder, Matthias]
+* New and updated translations (es,nn,ro)
+
+Overview of Changes from GLib 2.5.1 to GLib 2.5.2
+=================================================
+* Add G_GNUC_INTERNAL macro [Arjan van de Ven]
+* Add GOption, a commandline option parser [Anders Carlsson]
+* Add glib_check_version [Michael Natterer]
+* Add XDG basedir API [Ray Strode]
+* Require ngettext [Danilo Segan]
+* Bug fixes [Manish Singh, Ray Strode, Vincent Noel, 
+  Jon-Kare Hellan, Jody Goldberg]
+* Win32 bug fixes [Tor Lillqvist, Hans Breuer, Peter Zelezny]
+* Documentation improvements [Matthias Clasen, Vincent Untz, Christian Persch]
+* New and updated translations (bs,eu,fi,gu,ne,pa)
+
+Overview of Changes from GLib 2.5.0 to GLib 2.5.1
+=================================================
+
+* Bug fixes [Oliver Guntermann, Sven Neumann, James 
+  Henstridge, Hiroyuki Ikezoe, Matthias Clasen, Robert 
+  Ögren, Tommi Komulainen]
+* Documentation improvements [Soeren Sandmann, 
+  Christophe Fergeau, Danek Duvall]
+* New and updated translations (eu,hi)
+  
+Overview of Changes from GLib 2.4.1 to GLib 2.5.0
+=================================================
+
+* New functions g_debug [Sven Herzberg]
+* Use higher precision for mathematical constants [Morten 
+ Welinder]
+* Don't convert to/from UTF-8 in g_filename_{to,from}_uri 
+ [Federico Mena Quintero]
+* Win32
+ - Handle empty digit string in printf() functions 
+   correctly [Tor Lillqvist]
+ - Support ll as format modifier for long long [Tor]
+ - Be more careful about HOME [Tor, Ivan Wong]
+ - Bug fixes [John Ehresman]
+* Miscellaneous bug and portability fixes [Danilo Segan, 
+ Owen Taylor, Nikolai Weibull, Benoît Carpentier, Morten 
+ Welinder, Manish Singh, Sven Neumann, Julio M. Merino Vidal,
+ Kaz Sasayama, Murray Cumming, Federico, Mariano Suarez-Alvarez]
+* Documentation updates [Matthias Clasen, Crispin Flowerday,
+ Tommi Komulainen, Federico Mena Quintero, Ed Griffiths]
+* New and updated translations (ja,ne,no,wa)
+ 
+Overview of Changes from GLib 2.4.0 to GLib 2.4.1
+=================================================
+
+* Win32 bug fixes [Tor Lillqvist, Roger Leigh, John Ehresman]
+* Miscellaneous bug and portability fixes [Owen Taylor,
+  Matthias Clasen, Jonas Jonsson, Christian Krause,
+  Nickolay V. Shmyrev, Christophe Saout, Philippe Blain,
+  Piotr Klaban]
+* Documentation updates [Matthias]
+* New and updated translations (ca,cs,cy,el,en_CA,en_GB,es,eu,fi,
+  fr,gu,he,id,nl,pt,pl,ru,sr,sr@ije,sr@Latn,sv,uk)
+
+Overview of Changes from GLib 2.3.6 to GLib 2.4.0
+=================================================
+
+* Handle invalid-UTF-8 in g_log() properly [Matthias Clasen]
+* Win32 bug fixes [Tor Lillqvist, Bruce Hochstetler]
+* Miscellaneous bug and portability fixes [Olivier Biot, David L. Cooper II, 
+  Kjartan Maraas, Frédéric L. W. Meunier, Christof Petig, Manish Singh, 
+  Sebastian Wilhelmi]
+* Documentation updates [Owen]
+* Updated translations (hr,ro)
+
+Overview of Changes from GLib 2.3.5 to GLib 2.3.6
+=================================================
+
+* GAtomic bug fixes [Sebastian Wilhelmi, Mark McLoughlin]
+* GMain threading fixes and improvements [Sebastian]
+* Win32 [Tor Lillqvist]
+ - restore some symbols extraneously exported from gobject to maintain ABI compatibility
+ - Misc build improvements and fixes [Tor, Cedric Gustin, Hans Breuer]
+* Documentation updates [Sebastian, Takeshi AIHANA, Matthias, Sven Herzberg]
+* New and updated translations (be,es,fi,ga,pa,sr@ije,zh_CN)
+
+Overview of Changes from GLib 2.3.3 to GLib 2.3.5
+=================================================
+
+* Make glib-mkenums parse initializers with macros. [Matthias Clasen, muppet]
+* Respect locale era in g_date_set_parse(). [Theppitak Karoonboonyanan] 
+* Add atomic operations and use it for the async queue and
+  gonce implementation. [Sebastian Wilhelmi]
+* Documentation improvements [Sebastian, Matthias, Sven Herzberg]
+* Add g_main_depth() for finding the recursion depth of the main
+  loop [Owen Taylor, Tim Janik, Stefan Westerfeld]
+* Add g_spawn_close_pid(), needed on win32 [J. Ali]
+* Win32 fixes. [Hans Breuer, J. Ali Harlow]
+* Misc bugfixes [Sebastian, Matthias, Balazs Scheidler, Owen]
+* Updated translations (cy,et,ga,sq)
+
+Overview of Changes from GLib 2.3.2 to GLib 2.3.3
+=================================================
+
+* Add a native AIX gmodule implementation. [Laurent Vivier]
+* Add g_node_copy_deep().  [James M. Cape, Matthias Clasen]
+* Extend GQueue API to match the GList API. [Soeren Sandmann]
+* Add g_hash_table_find().  [Tim Janik]
+* Add a G_MODULE_BIND_LOCAL flag. [David Schleef]
+* Inline g_string_append_c() when possible. [Owen Taylor, Tim]
+* Wrap waitpid() as a GSource. [Jonathan R. Blandford]
+* Add g_completion_complete_utf8(). [Theppitak Karoonboonyanan, 
+  Matthias]
+* Add g_strsplit_set(). [Soeren]
+* Documentation improvements. [Vincent Untz, Sebastian Wilhelmi, 
+  Soeren, Matthias]
+* Win32 build fixes. [Tor Lillqvist]
+* Misc bugfixes [Manish Singh, Noah Levitt, Simon Josefsson, 
+  Morten Welinder, Damien Carbery, Julio M. Merino Vidal, Sebastian, 
+  Matthias]
+* Updated translations (nn,cs,it,ko,sq,ms,az,hr,uk,sr,sr@Latn,sq,ta)
+
+Overview of Changes from GLib 2.3.1 to GLib 2.3.2
+=================================================
+
+* Add G_MAXSIZE. [Manish Singh]
+* Add g_rand_new_with_seed_array(), g_rand_set_seed_array(),
+  implementing the init-by-array functionality of the 
+  original mersenne twister. Add g_rand_copy(). Improve seeding. 
+  [George Lebl]
+* Add a lowercase_name option to glib-mkenums. [Murray Cumming]
+* Add g_ptr_array_foreach(). [Matthias Clasen]
+* Add g_timer_continue(). [Tim-Philipp Müller]
+* Fix a threadsafety issue in mem chunks. [Matthias, Balazs Scheidler]
+* Fix g_filename_{to,from}_utf8() on Win32 and improve 
+  g_file_test() there too [Hans Breuer] 
+* Add a boxed type for NULL-terminated string arrays.  [Matthias]
+* Add G_DEFINE_TYPE() plus variants to ease the constuction
+  of GObject boilerplate code.  [Tim Janik]
+* Support & in password GECOS field [Matthias, Soeren Boll Overgaard]
+* Documentation improvements [Matthias, Manish]
+* Win32 build fixes [Hans]
+* Misc bug fixes [Damien Carbery, Matthias, Manish, Olivier Poncet, 
+  Zack Rusin]
+* Updated translations (ar,de,fa,ga,mn,nn,no,sq)
+
+Overview of Changes from GLib 2.3.0 to GLib-2.3.1
+=================================================
+
+* Add glib/gi18n.h and glib/gi18n-lib.h for common
+  gettext support, including a Q_() macro for translation
+  with context [Matthias Clasen]
+* Add a more flexible G_FILENAME_ENCODING variable
+  as a replacement for G_BROKEN_FILENAMES [Matthias]
+* Fix the return value g_main_context_iterate() for
+  newly ready sources [Padraig O'Briain]
+* Handle Hangul composition for normalization [Noah Levitt]
+* Add G_{MIN,MAX,MAXU}INT{8,16,32}. [Mark Jones, Matthias]
+* Add G_GSIZE_FORMAT/G_SSIZE_FORMAT [Manish Singh]
+* Add G_STRFUNC as a portable wrapper for __func__ [Tim Janik]
+* Documentation improvements [Matthias]
+* GObject [Tim Janik]
+ - Support '-' in g_signal_connect()/disconnect() names
+   like 'swapped-signal'.
+ - Add g_type_class_peek_static() and use to optimize
+   g_object_new() for static types [Tim]
+ - Allow setting construct-only properties from within
+   init() implementations
+ - Enforce readability/writeability in g_object_set/get()
+* Fix bug with g_ascii_strtod and multi-byte separator.
+  [Behdad Esfahbod, Roozbeh Pournader]  
+* Misc bug fixes [Matthias, John Ehresman, Andrew Lanoix,
+  Tor Lillqvist, Mark McLoughlin, Tim-Philipp Müller, Manish, 
+  Morten Welinder]
+* Updated translations (ca,cs,da,es,fr,ja,nn,no,pt,ru)
+
+Overview of Changes from GLib 2.2.x to GLib-2.3.0
+=================================================
+
+* Replace Trio printf by gnulib vasnprintf [Matthias Clasen]
+* Update Unicode data to Unicode 4.0 [Noah Levitt]
+* Support XML-safe formatted output with 
+  g_markup_[v]printf_escaped [Owen Taylor]
+* Add g_file_read_link to read symbolic links [Matthias]
+* Add g_unichar_get_mirror_char to obtain the 
+  mirrored variant of a character [Noah]
+* Support for one-time initialization functions. 
+  [Sebastian Wilhelmi]
+* Miscellaneous API additions: g_vasprintf
+  g_string_chunk_insert_len, g_setenv, g_unsetenv [Matthias]
+* Docs improvements [Matthias]
+* Add support instance-private data on classed types
+  [Mark McLoughlin, Tim Janik, Owen]
+* Optimize signal emissions [Soeren Sandmann, Tim]
+* Support a "default vtable" per interface [Tim]
+* Add support for properties on interfaces [Owen, Tim]
+* Miscellaneous API additions: g_value_take_string(),
+  g_value_take_param(), g_value_take_object(), 
+  g_value_take_boxed(). [Matthias]
+* Win32 build fixes [Tor Lillqvist]
+
+Overview of Changes from GLib 2.1.5 to GLib-2.2.0
+=================================================
+
+* Fix a problem with g_thread_init() on 64-bit problems
+  [Alceste Scalas, Sebastian Wilhelmi]
+* Add assembly implementations of byteswap macros
+  for ia64 and x86_64. [Manish Singh]
+* IOChannel fixes for Win32 [Tor Lillqvist, Thorsten Maerz]
+* Updated translations (bg,ca,es,da,fi,lv,ru,sk)
+
+Overview of Changes from GLib 2.1.4 to GLib-2.1.5
+=================================================
+
+* Win32 bug fixes [Tor Lillqvist]
+* Various post-rewrite fixes for glib-gettext.m4 [Owen Taylor,
+  Jody Goldberg, Kjartan Maraas, Johannes Stezenbach]
+* Ensure we have a GUINT64_FORMAT by pulling in Trio
+  if necessary [Manish Singh]
+* Further Trio build fixes [Matthias Clasen, Owen]
+* Hack around gcc, libtool issues with -pthread [Owen]
+* Docs improvements [Matthias]
+* Bug and portability fixes 
+* Updated and new translations (bg,de,fi,fr,sq,fr)
+
+Other contributors: Kai Poitschke, Morten Welinder
+
+Overview of Changes from GLib 2.1.3 to GLib-2.1.4
+=================================================
+
+* autoconf changes to make it possible to cross compile
+  GLib. [Owen Taylor, Dan Kegel, Amy Lin, Dimi Shahbaz, 
+  Johannes Stezenbach]
+* Use libintl when it has bind_textdomain_codeset() and
+  GLib doesn't. [Owen]
+* Improve generation of pseudo-random integers [Morten Welinder, 
+  Sebastian Wilhelmi]
+* Avoid literal UTF-8 in favor of octal escapes [Owen, Tomas Ogren]
+* Cleanup include order [Sven Neumann]
+* autoconf cleanups and bug fixes [Daniel, Matthias Clasen, Owen]
+* Doc fixes and additions [Matthias]
+
+Other contributors: James M. Cape, Frederic Crozat, Martin Gansser,
+  Phuc LeHong, Manish Singh, Joshua Weage, Morten Welinder
+
+Overview of Changes from GLib 2.0.x to GLib-2.1.x
+=================================================
+
+* Add copy of the Trio library to build and use for printf() when 
+  system printf isn't good enough. Add g_printf()/etc. [Matthias Clasen]
+* Add g_str_has_suffix()/g_str_has_prefix() [Alex Larsson]
+* Add g_markup_parse_context_get_element() [Matthias]
+* Add g_utf8_strreverse [Matthias]
+* Add g_ascii_strtoull() [Tim Janik]
+* Support scanning of 64-bit values with GScanner [Tim]
+* Add g_set/get_application_name() [Havoc Pennington]
+* Add G_LIKELY()/G_UNLIKELY() macros for hinting branch probabilities. 
+  Use for g_return_if_fail(). [Matthias Clasen]
+* Add G_GNUC_DEPRECATED macro [Tom Tromey]
+* Improve the seeding algorithm of GRandom to avoid problems
+  with certain pathological seeds. Support G_RANDOM_VERSION=2.0
+  environment variable. [Sebastian Wilhelmi]
+* Improve thread configure checks, use -pthread where applicable
+  [Sebastian]
+* Improve handlng of thread priorities [Sebastian]
+* Fix up parameter names that might shadow functions from
+  system headers [Soeren Sandmann]
+* Clean up usage of deprecated functions [Manish Singh]
+* Docs fixes and improvements. In particular, include "Since" information.
+  [Matthias, Soeren, Martin Schulze, Daryll Strauss, Bill Janssen, 
+  Owen Taylor, Morten Welinder]. 
+
+Overview of Changes in GLib 2.0.7
+=================================
+
+* Fix C++ warnings in gtype.h [Dom Lachowicz]
+* Fix g_type_fundamental_next() [Tim Janik]
+* Fix various missing includes of config.h [Morten Welinder]
+* Handle main loop initialization before g_thread_init [Sebastian Wilhelmi]
+* Various 64-bit fixes [Manish Singh]
+* Fix GPoll on Win32 [Tor Lillqvist, Herman Bloggs]
+* Fix bug with buffering on UTF-8 IOChannels [Daniel Elstner]
+* Misc bug and build fixes [Soren Andersen, Gustavo Carneiro, Tor,
+     Tim, Havoc Pennington,  Matthias Clasen, Sebastian Rittau,
+     Masahiro Sakai, Arvind Samptur, HideToshi Tajima, Owen Taylor]
+* Updated and new translations (be,cs,de,*fa,it,lv,pt_BR,tr)
+
+Overview of Changes in GLib 2.0.6
+=================================
+
+* Fix problem with interface prerequisites [Jon Trowbridge, Dave Camp]
+* Clean up debug spew from GObject [Anders Carlsson]
+* Compiler warning fixes [David L. Cooper II]
+* Fix some problems with g_build_path() [Guillaume Chazarain, Owen Taylor]
+* Fixes for --disable-debug [Sebastian Wilhelmi]
+* Threading fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, 
+  Rajkumar Sivasamy, Laurent Vivier]
+* Documentation fixes [Jacob Berkman, Manuel Clos, Jared Dukat, 
+  Sebastian Rittau, Linus Welleij]
+* Misc bug fixes [Anders Carlsson, Sam Couter, Morten Welinder, Owen]
+* Updated translations (bg,ko,vi)
+
+Overview of Changes in GLib 2.0.5
+=================================
+
+* Fix problem with interface prerequisites [Jon Trowbridge, Dave Camp]
+* Clean up debug spew from GObject [Anders Carlsson]
+* Compiler warning fixes [David L. Cooper II]
+* Fix some problems with g_build_path() [Guillaume Chazarain, Owen Taylor]
+* Fixes for --disable-debug [Sebastian Wilhelmi]
+* Threading fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, 
+  Rajkumar Sivasamy, Laurent Vivier]
+* Documentation fixes [Jacob Berkman, Manuel Clos, Jared Dukat, 
+  Sebastian Rittau, Linus Welleij]
+* Misc bug fixes [Anders Carlsson, Sam Couter, Morten Welinder, Owen]
+* Updated translations (bg,ko,vi)
+
+Overview of Changes in GLib 2.0.4
+=================================
+
+* Fix some 64-bit problems. (George Lebl, David L. Cooper II)
+* Add note about Tru64 iconv to INSTALL. (Manuel Op de Coul)
+* Fix problem with timouts > MAXINT. (Tim Janik, Owen Taylor)
+* Updated translations (ca,es,fr,ja,gl,ms,nl,pl,pt,ru)
+
+Overview of Changes in GLib 2.0.3
+=================================
+
+* Handle sorting 0-length arrays (Ron Arts)
+* Threading fixes (Sebastian Wilhelmi)
+* Portability fixes (Miroslaw Dobrzanski-Neumann, Jacob Berkman, Gareth Pierce, 
+  Sebastian, Qingjiang Yuan)
+* Various fixes for glib-2.0.m4. (Jim Gettys, others.)
+* Locate right glib-genmarshal when cross-compiling. (Mitch Natterer)
+* Win32 fixes (Tor Lillqvist)
+* Try to fix g_get_charset() related segfaults. (Owen)
+* Fixes for gettext detection. (Dan Winship, HideToshi Tajima, Boyd Lynn Gerber,
+  Andrew P. Lentvorski, Jr.)
+* Fix g_scanner_unexp_token() (Tim Janik, Sven Neumann)
+* g_markup fixes. (Matthias Clasen.)
+* Bug fixes and cleanups (Daniel Elstner, Matthias, Laszlo Peter, Morten Welinder,
+  Wayne Schuller)
+
+Overview of Changes in GLib 2.0.1
+=================================
+
+* Portability fixes for Sun's Forte compiler [Erwann Chenede]
+* Performance improvements for GObject parameter lookup, 
+  g_filename_to/from_utf8() [Alex Larsson]
+* Actually check interface prerequisites [Matthias Clasen,
+  Miroslaw Dobrzanski-Neumann]
+* Fix problem with glib-mkenums taking huge amounts of stack. [Owen Taylor]
+* Fix g_signal_handlers_disconnect_by_func() for C++ [Damien Sandras]
+* Fixes for g_log() and threading.
+  [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, Tim Janik]
+* Make g_print(), g_printerr(), g_warning(), etc, convert from
+  UTF-8 to the encoding of the locale [Sebastian Wilhelmi, Tim]
+* Fixes for GIOChannel on windows. [Tor Lillqvist]
+* Fix gsize/gint mismatches in giochannel.c [Miroslaw Dobrzanski-Neumann]
+* Fix file descriptor leak in g_file_get_contents() [Matthias]
+* Workaround iconv() problems on older Solaris [Lauri Alanko]
+* Fix warnings with gcc-3.1 about asm const [Cody Russel]
+* Minor bug fixes.
+
+Other contributors: Hans Breuer, LEE Sau Dan, Sven Neumann, Salmaso Raffaele,
+  Akira Tagoh, Morten Welinder
+
+
+Overview of Changes in GLib 2.0.0
+=================================
+
+* Thread portability fixes [Sebastian Wilhelmi]
+* Documentation updates [Owen Taylor]
+* Make g_strerror(), g_strsignal() properly return UTF-8,
+  call bind_text_domain_codeset() so that error strings
+  are in UTF-8 as well. [Owen, Tor Lillqvist]
+
+Overview of Changes in GLib 2.0.0 rc1:
+======================================
+
+* Win32 fixes [Tor Lillqvist]
+* Portability fixes [Finlay Dobbie, Miroslaw Dobrzanski-Neumann]
+* Fix up g_date_strftime [Daniel Elstner]
+* Add some structure padding [Tim Janik]
+* Make g_get_homedir() prefer the users home directory to $HOME
+
+Other contributors: Matthias Clasen, Paolo Maggi, Christian Rose
+
+Overview of Changes in GLib 1.3.15:
+===================================
+
+* Speed up marshalers by using private access to GValue 
+  [Anders Carlsson, Tim Janik]
+* Reduce GValue to 2 elements [Tim]
+* Add G_DEBUG environment variable, G_DEBUG=fatal_warnings [Matthias Clasen]
+* Fixes for AIX compilation [Miroslaw Dobrzanski-Neumann]
+* Add padding to various structures [Owen Taylor, Tim]
+* Win32 fixes [Tor Lillqvist]
+
+Other contributors: James Henstridge, Ryan Lovett, Morten Welinder,
+  Daniel Elstner
+
+Overview of Changes in GLib 1.3.14:
+===================================
+
+* Register value transformations for gint64, guint64 [Andy Wingo]
+* Build with large-file support [Sven Neumann, Owen Taylor]
+* Fix handling of hostnames in URI's [Darin Adler]
+* Main loop bug fixes [Havoc Pennington, Owen]
+* Doc fixes and improvements [Manish Singh, Tim Janik]
+* Support ' as attribute delimiters in GMarkup [Matthias Clasen]
+* Win32 fixes [Hans Breuer, Tor Lillqvist]
+* Threading bug and build fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann]
+* Miscellaneous bug fixes
+
+Other contributors: Matthias Clasen, James Henstridge, Mitch Natterer, 
+  Morten Welinder.
+
+Overview of Changes in GLib 1.3.13:
+===================================
+
+* Fix g_filename_to/from_uri for Win32 [Tor Lillqvist, Darin Adler]
+* Miscellaneous win32 fixes [Tor, Hans Breuer]
+* Fix thread options for gcc on AIX [Jerome Zago, Sebastian Wilhelmi]
+* Documentation improvements [Ron Steinke, Matthias, Sebastian]
+* Cache iconv converters as used by g_convert() [Jeffrey Stedfast]
+* Bug fixes [Sven Neumann, Owen Taylor, Matthias Clasen, Jeffrey,
+  Laszlo Peter, Havoc Pennington, Tim Janik]
+
+Overview of Changes in GLib 1.3.12:
+===================================
+
+* Implement closure chaining, fixing up API (Tim Janik)
+* Closure chaining test case (James Henstridge)
+* Make GType long not int where both are equal width (Tim)
+* Win32 fixes and improvements (Hans Breuer, Tor Lillqvist)
+* Fixes for NetBSD. (Dan Winship)
+* Use snprintf() for g_printf_string_upper_bound() where possible. (Matthias Clasen)
+* Save space for GBSearchArray (Tim Janik)
+* Documentation improvements. (Matthias, Sven Neumann, Havoc Pennington)
+
+Other contributors: Darin Adler, Chris Blizzard, Anders Carlson, Daniel Elstner, Michael Meeks, 
+  Mark McLoughlin, Dave Neary, Manish Singh, Owen Taylor, HideToshi Tajima, 
+  Sebastian Wilhelmi.
+
+
+Overview of Changes in GLib 1.3.11:
+===================================
+
+* Win32 fixes [Hans Breuer, Tor Lillqvist]
+* Documentation improvements [Matthias Clasen]
+* Portable directory handling API [Hans]
+* Threading fixes [Sebastian Wilhelmi, Havoc Pennington]
+* Fix excess relocations in Unicode tables [Andrew Taylor]
+* Fix gpattern for UTF-8 [Matthias Clasen]
+* Support overriding class closures [Tim Janik]
+* Support for derivation from G_TYPE_POINTER [Owen Taylor]
+* Hide pointers to type information inside GType to reduce locking
+  [Alex Larsson, Tim]
+* Adds check for direct inclusion of gobject/*.h [Owen]
+* GObject API cleanups [Tim]
+
+Other contributors: Darin Adler, Jacob Berkman, Daniel Egger, Eric Lemings, 
+  Michael Meeks, Mark McLoughlin, Arkadiusz Miskiewicz, Dan Winship
+
+
+Overview of Changes in GLib 1.3.10:
+===================================
+
+* Many Win32 fixes and improvements [Tor Lillqvist]
+* Documentation improvements [Matthias Clasen]
+* g_string_printfa() renamed to g_string_append_printf()
+* Use libcharset from libiconv to implement charset detection
+  more portably. [Owen Taylor, Hidetoshi Tajima]
+* Add 64 bit type support to GObject [Joshua Pritikin, Mathieu Lacage, Owen]
+* Make support for 64 bit integers a requirement [Joshua]
+* GPattern improvements [Tim Janik, Matthias]
+* Locale independent g_ascii_strtod / g_ascii_dtostr [Alex Larsson]
+* Many bug fixes and minor tweaks.
+
+Other Contributors: Darin Adler, Jakub Jelinek, James Antill, Andrew Taylor,
+  Ben Gertzfield, Elliot Lee, Manish Singh, Abel Cheung, Laszlo Peter,
+  Sven Neumann, George Lebl, Raja Harinath, Sebastian Wilhelmi,
+  Jacob Berkman
+
+
+Overview of Changes in GLib 1.3.9:
+==================================
+
+* Fixes for comparison of threads [Sebastian Wilhelmi]
+* Use vasprintf() when possible for g_strdup_printf [Matthias Clasen]
+* Win32 fixes [Tor Lillqvist, Hans Breuer]
+* Add a len argument to g_ascii_strup/strdown
+* Bug, portability fixes, cleanups.
+
+Other Contributors: Darin Adler, Katsuhiro Okuno, Joshua N. Pritikin
+
+
+Overview of Changes in GLib 1.3.8:
+==================================
+
+* Documentation updates [Owen]
+* Made GType interfaces overridable in derived types
+* Many win32 fixes [Tor Lillqvist]
+* Miscellaneous cleanups and fixes
+
+Other contributors:
+  Darin Adler, Matthias Clasen, Ron Steinke, Hans Breuer, Alex Larsson
+
+
+Overview of Changes in GLib 1.3.7:
+==================================
+
+* Integrate GClosure support into the main loop [Owen Taylor]
+* More GSignal convenience functions (macros) [Sven Neumann, Tim Janik]
+* Introduced weak references for GObject [James Henstridge, Sven, Tim] 
+* Minor hash table optimizations
+* Main loop and threading improvements [Sebastian Wilhelmi]
+* Added g_ascii_* functions to be used for locale insensitive UTF-8
+  compliant code instead of old string functions  [Darin Adler, Alex Larsson]
+* Add functions for Unicode case-conversion, normalization, and 
+  collation [Owen]* GString improvements [Owen]
+* Reworked the GIOChannel code [Hidetoshi Tajima, Ron Steinke]
+* Removed glib-config-2.0 in favour of pkgconfig [Sebastian]
+* Make code 64bit clean [Mark Murnane]
+* More G_CONST_RETURN fixes
+* Many improvements to the win32 code [Tor Lillqvist, Hans Breuer]
+* Miscellaneous bug and API fixes
+
+Other contributors:
+  Michael Natterer, Christopher James Lahey, Padraig O'Briain,
+  Matthias Clasen, Josh Pritikin, Steve Baker, Cesar Rincon, Garry R. Osgood,
+  Michael Meeks, Laszlo Peter,  Martin Baulig, Kjartan Maraas, Andrew Lanoix,
+  Peter Williams
+
+
+Overview of Changes in GLib 1.3.6:
+==================================
+
+* Threads have a "return value" from g_thread_join
+* Removed ability to adjust thread stack size
+* Prefix warnings with progname/PID by default, change toggle for this to 
+  be an env variable G_MESSAGES_PREFIXED not a compile-time option
+* GMarkup speedups
+* GDate const, convenience fixups
+* Include test cases that headers are compilable by C++ compiler
+* Add ability to spawn processes with argv[0] != executable path.
+* g_strstr_len, g_strrstr, g_strrstr_len
+* Add length argument to g_utf8_strchr and g_utf8_strrchr.
+* Misc bug fixes
+
+
+Overview of Changes in GLib 1.3.5:
+==================================
+
+* Added an installed glib-mkenums Perl program for parsing enumeration
+  declarations from header files.
+* Mark some additional deprecated functions.
+* Bug and Portability fixes
+
+
+Overview of Changes in GLib 1.3.4:
+==================================
+
+* Efficiency improvements for GThreadPool
+* A few bug fixes
+* Build fixes
+* Documentation improvements
+
+
+Overview of Changes in GLib 1.3.3:
+==================================
+
+GLib:
+
+* More user_data support in various functions.
+* Main loop API revamps to support per-thread main loops.
+* Unicode handling improvements.
+* Implemented debugging traps.
+* G_CONST_RETURN specification all over the place.
+* Various new small utility functions.
+* Random number generator precision improvements.
+* New configure option --disable-mem-pools.
+* Many Win32 improvements.
+* Added g_try_malloc() friends varinats.
+* Many documentation improvements.
+* Many threading improvements, support for dynamic allocation
+  of static mutexes.
+* GHookLIst API cleanups.
+* Improved format support of GDate parser.
+* String function speed improvements with new g_stpcpy().
+* Hashtable API additions.
+* New GPatternSpec for shell-style pattern matching (from GtkPatternSpec).
+* Optimizations, cleanups, bug fixes.
+
+GObject:
+
+* Added many convenience functions.
+* GClosure and GParamSpec use float/sink ref-counting scheme now.
+* Reworked property change notification.
+* Binary searchable array cleanups, so it's widely usable now.
+* Added static content keeping for some GValue types.
+* Support for statically scoped signal parameters.
+* Extinguished property trailer args in set/get interface.
+* Added support for abstract types.
+* G_CONST_RETURN specification all over the place.
+* Split parameter exchange functionality into value transforms
+  and parameter conversions.
+* Added signal emission hooks and signal accumulators.
+* Added interface prerequisites to support is_a (interface, object)
+  relations.
+* Implemented GValueArray.
+* New types, boxed: G_TYPE_VALUE, G_TYPE_CLOSURE, G_TYPE_GSTRING
+  GParamSpecs: G_TYPE_PARAM_PARAM, G_TYPE_PARAM_POINTER, G_TYPE_PARAM_CLOSURE,
+  G_TYPE_VALUE_ARRAY, G_TYPE_PARAM_UNICHAR, G_TYPE_PARAM_VALUE_ARRAY.
+* Varrags value collection improvements.
+* Implemented debugging traps.
+* Made things thread-safe.
+* Many documentation improvements.
+* Many cleanups, optimizations and bug fixes.
+
+
+Overview of Changes in GLib 1.3.2:
+==================================
+
+GLib:
+
+* Win32 build improvements  [Tor]
+* Improvements to error reporting  
+  (g_critical(), g_return_if_reached()) [Darin]
+* Add g_strlcpy/g_strlcat  [David Wheeler]
+* New IO channel implementation for Win32  [Tor] 
+* Make g_array_free, g_string_free return pointer to memory requested
+  not to be freed.  [Darin]
+* Added GError based error reporting for thread functions.  [Sebastian]
+* Moved reference docs into GLib distribution. [Owen]
+* Added g_convert() for doing convenient character set conversions based
+  on iconv. (GLib now requires libiconv or a native iconv.) [Havoc/Owen]
+* Various Unicode handling additions (g_ucs4_to_utf8, g_utf8_validate(),
+  g_{locale,filename}_{to,from}_utf8)  [Robert/Havoc/Owen]
+* Portability fixes for threading.  [Sebastian]
+* Added convenient functions for launching new processes (g_spawn_*),
+  and shell quoting/unquoting functions.  [Havoc]
+* Split glib.h into many headers.  [Sebastian]
+* Added a simple callback-based parser for XML-like files (GMarkup).  [Havoc]
+* Fixed confusions between comparison functions that return <0, 0, >0
+  and equaility functions that return FALSE,TRUE.  [Sebastian]
+* Added safe/portable temporary file manipulation functions.  [Tor]
+* autoconf improvements.  [Raja]
+* Many documentation improvements.
+* Bug fixes.
+
+GObject:
+
+* Added boxed and pointer types.  [Tim/Jonathan]
+* Added callback abstraction (GClosure)  [Tim]
+* Added signal system (GSignal)  [Tim]
+* Make GTypePlugin an interface  [Tim]
+* Added GTypeModule - a simple GTypePlugin instantiation  [Owen]
+* Bug fixes.
+
+
+What's new in GLib 1.3.1:
+=========================
+
+* New GObject library added including object system based on
+  the GTK+ object system. 
+* Functions for getting the properties of Unicode characters, 
+  computing the canonical decomposition and ordering combining
+  characters aand manipulating UTF-8 string manipulation based
+  on libunicode.
+* GString now properly handles embedded nuls.
+* Multiple fixes from the 1.2.x branch.
+* Upgrade to libtool 1.3.3
+* Full thread support (thread creation and destruction).
+* BeOS port, BeOS dynamic modules.
+* Many improvements to the Windows ports.
+* Improvements to the OS/2 port, OS/2 module support.
+* Double ended queue implementation.
+* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
+* New configure option --enable-msg-prefix to prefix messages, warnings
+  et ceteri with the program name and the process id.
+* New thread-safe random number generator Mersenne Twister.
+* g_strcompress() added, g_strescape() had a slight API change, and
+  more tightly defined semantics.
+* the g_string(x) macro has been removed, #x may be used instead.
+                                
+* bugs fixed:
diff --git a/NEWS.pre-1-3 b/NEWS.pre-1-3
new file mode 100644
index 0000000..1aa4f4e
--- /dev/null
+++ b/NEWS.pre-1-3
@@ -0,0 +1,211 @@
+Overview of Changes in GLib 1.2.1:
+
+* g_realloc() fix for SunOS (please report further problems).
+* Continued the never ending fix vendetta regarding getpwuid(),
+  this time AIX has been the culprit.
+* Upgrade to libtool 1.2f
+* Miscellaneous other buglets fixed.
+
+What's new in GLib 1.2.0 (since GLib 1.0.x):
+
+* GLib is distributed seperatedly from Gtk+
+* Win32 Portability
+* Threading support
+* GModule mechanism (implemented in an extra library) which wraps dynamic
+  object code loading facilities in a portable manner
+* GIOChannel structure to encapsulate the IPC mechanism
+* GQuarks and datasets
+* GRelations for n-way mapping of certain data
+* An n-way tree implementation
+* GDate functionality for calendar date manipulations
+* GAllocator type and associated functions
+* Added generic callback maintenance functions (ghook)
+* Generic functions for TAB completions
+* Endian defines (G_*_ENDIAN)
+* g_log() mechanism for logging of messages at different log levels
+* Generic main-loop mechanism
+* New glib-config helper script
+* Many more API extensions
+
+Overview of Changes in GLib 1.1.16:
+
+* Allocate smaller pools of memory for glists, gslists, gnodes
+* Bug Fixes
+
+Overview of Changes in GLib 1.1.15:
+
+* HPUX 11 thread system detection should now work
+* Release the main loop lock around calls to prepare() and
+  check() so it is not held over user code
+* A few Win32 fixups
+
+Overview of Changes in GLib 1.1.14:
+
+* Check for dlsym() in system libraries and -dl
+* FreeBSD portability fixes
+* Random bug fixes and autoconf/automake changes
+
+Overview of Changes in GLib 1.1.13:
+
+* Removed alloca() based function and macro variants again.
+* Improved thread related configure tests.
+* GSource destruction fixups.
+* Fixed up idle function removal based on user_data pointer.
+* Advanced Win32 portability.
+* Enforced GSource's check(), prepare() and dispatch() constrains,
+  loop recursions may only happen from dispatch(), and check() as well
+  as prepare() are called while the main_loop lock is being held.
+* GLib development now requires GNU autoconf 2.13, GNU automake 1.4
+  and GNU libtool 1.2d.
+* Lots of random portability and bug fixes.
+
+Overview of Changes in GLib 1.1.12:
+
+* Added alloca functions/macros: g_strdup_a, g_strconcat3_a, g_alloca,
+  g_new_a, g_new0_a
+* New tests structure.  Type 'make check' on your system to run them.
+* Avoid unnecessary extra hook referencing in g_hook_list_marshal
+
+Overview of Changes in GLib 1.1.11:
+
+* provide defaults for POLL sysdefs
+* g_main_is_running: new function to check whether a main loop has been quitted
+* a few other enhancement/fixes
+
+Overview of Changes in GLib 1.1.9:
+
+* Check for pthread_attr_init in all cases, Digital Unix 4 requires this
+* For G_LOCK_DECLARE_*, if !G_THREADS_ENABLED, eat trailing semicolon better
+* Changed g_main_poll_(add|remove) to g_main_(add|remove)_poll
+
+Overview of Changes in GLib 1.1.8:
+
+* Added threading support
+  - The ability to specify a set of functions to be used for
+    locking at runtime.
+  - Default implementations of locking functions for pthreads,
+    Solaris threads, and (experimentally) NSPR.
+  - All static variables should now properly locked.
+  - Enhancements to the generic main-loop mechanism to be thread-safe.
+    (It is used for the main-loop in GTK+ as of GTK+-1.1.8)
+* Portability fixes.
+
+Overview of Changes in GLib 1.1.7:
+
+* Removed multiple define from glibconfig.h
+
+Overview of Changes in GLib 1.1.6:
+
+* New GDate functionality for calendar date manipulations (g_date_*)
+* New GAllocator type and associated functions
+* New functions g_slist_copy and g_list_copy to duplicate a list with all
+  its data pointers.
+* New function g_array_insert_vals and new macro g_array_insert_val to
+  insert elements at an arbitrary index
+* GAllocators used for glist, gslist, gnode node allocations
+* Incremental freezing in ghash
+* New function g_hook_list_marshal_check to eventually destroy hooks after
+  they got marshalled
+* Revised GIOChannel to provide generic virtual-function based interface
+* Added generic main-loop abstraction
+* Removed GListAllocator type and its g_*_allocator_*() function variants
+* Bug fixes
+
+Overview of Changes in GLib 1.1.5:
+
+* Win32 portability
+* GIOChannel structure to encapsulate the IPC mechanism 
+* Reimplemented endian stuff, using inline asm for x86
+* New functions:
+  - g_strescape: escapes backslashes
+  - g_path_is_absolute and g_path_skip_root
+  - g_getenv: expands environment variables that contain references 
+    to other environment variables
+  - g_scanner_sync_file_offset: rewind the filedescriptor to the current
+    buffer position and blow the file read ahead buffer
+  - g_array_remove_index: remove an entry, preserving the order
+  - g_array_remove_index_fast: remove an entry, order might be distorted
+  - g_ptr_array_remove: remove an entry, preserving the order 
+  - g_ptr_array_remove_fast: remove an entry, order might be distorted
+  - g_byte_array_remove_index: wrapper for g_array_remove_index
+  - g_byte_array_remove_index_fast: wrapper for g_array_remove_index_fast
+  - g_strncasecmp: modeled closely after g_strcasecmp
+  - g_list_sort, g_slist_sort: to merge sort GLists and GSLists
+* New macros:
+  - G_DIR_SEPARATOR, G_DIR_SEPARATOR_S: platform-dependant file name
+    syntax elements
+  - G_SEARCHPATH_SEPARATOR, G_SEARCHPATH_SEPARATOR_S: platform-dependant
+    search path syntax conventions
+  - G_STRUCT_OFFSET, G_STRUCT_MEMBER_P, G_STRUCT_MEMBER: for handling
+    structure fields through their offsets
+* Removed G_ENUM, G_FLAGS, G_NV, and G_SV macros
+* Bug fixes
+
+Overview of Changes in GLib 1.1.4:
+
+* Added generic callback maintenance functions (ghook)
+* New endian defines (G_*_ENDIAN)
+* New string join/split/free routines 
+* Fixes
+
+Overview of Changes in GLib 1.1.3:
+
+* New GModule mechanism (implemented in an extra library) which wraps dynamic
+  object code loading facilities in a portable manner.
+* glib-config features extra "glib" (old behaviour remains) and "gmodule"
+  (add libgmodule.so to the --libs output) arguments now. this can also
+  be specified as fourth argument to the AM_PATH_GLIB() macro.
+* Overhaul of the `inline' autoconfiguration stuff, so inlining should be
+  sufficiently supported on all systems that allow inlining now.
+* New g_log() mechanism for logging of messages at different log levels,
+  associated with certain log domains (define -DG_LOG_DOMAIN for your library).
+* New inline functions for bit masks tests.
+* GNode macros (and functions) now return the newly allocated node.
+* New macro G_VA_COPY() to work around va_list copying oddities on some
+  platforms. the non-static g_vsprintf() function vanished in favour of
+  a publically exported g_strdup_vprintf().
+  People that used the former g_vsprintf() would definitely want to read the
+  associated ChangeLog entries (grep for printf).
+* New utility functions:
+  g_strndup(), g_on_error_query(), g_on_error_stack_trace(), g_strdup_printf(),
+  g_strdup_vprintf(), g_printf_string_upper_bound(), g_spaced_primes_closest(),
+  g_strnfill(), g_memdup(). 
+* Overhaul of the array implementations, this contains some source incompatible
+  changes. Again, the ChangeLog is much more informative (grep for garray.c).
+* The internals of the g_dataset mechanism are now exported through the
+  new g_datalist_* API (this is also the underlying implementation for the
+  keyed data of GtkObjects).
+* New function g_atexit(), use of the ATEXIT() macro is discouraged.
+* Better configure checks for ansi compliance.
+* Libtool update to version 1.2b.
+* Lotsa bug fixes and cleanups as always ;)
+
+Overview of Changes in GLib 1.1.2:
+
+* Fixed packaging mistake which occured in 1.1.1
+* fix 64-bitness in g_prints in glibtest
+
+What is new in GLib 1.1.1:
+
+* An n-way tree implementation is provided now, based on the GNode structure.
+* Bugfix for pointer arrays.
+
+What is new in GLib 1.1.0:
+
+* GLib is distributed seperatedly from Gtk+ now and uses a sophisticated
+  shared library versioning scheme to deal with interface and binary
+  incompatibilities.
+* There is a glib-config helper script installed now.
+* Fixups all over the place.
+* gboolean is now a gint, not a gchar anymore.
+* API extensions for GList and GSList.
+* New g_str*() functions for simple string handling.
+* GScanner extensions for scope, warning and error handling.
+* Minor performance improvements for GMemChunks.
+* Implementations of GQuarks and datasets (similar to GtkObjects data
+  mechansim, but works for generic memory locations).
+* More convenience macros for GNU C function arguments.
+* Const correction all over the place, including a new pointer type
+  gconstpointer.
+* Generic functions for TAB completions.
+* GRelations for n-way mapping of certain data.
diff --git a/README.commits b/README.commits
new file mode 100644
index 0000000..5345964
--- /dev/null
+++ b/README.commits
@@ -0,0 +1,72 @@
+GLib is part of the GNOME git repository. At the current time, any
+person with write access to the GNOME repository, can make changes to
+GLib. This is a good thing, in that it encourages many people to work
+on GLib, and progress can be made quickly. However, GLib is a fairly
+large and complicated package that many other things depend on, so to
+avoid unnecessary breakage, and to take advantage of the knowledge
+about GLib that has been built up over the years, we'd like to ask
+people committing to GLib to follow a few rules:
+
+0) Ask first. If your changes are major, or could possibly break existing
+   code, you should always ask. If your change is minor and you've
+   been working on GLib for a while it probably isn't necessary
+   to ask. But when in doubt, ask. Even if your change is correct,
+   somebody may know a better way to do things.
+
+   If you are making changes to GLib, you should be subscribed
+   to gtk-devel-list@gnome.org. (Subscription address:
+   gtk-devel-list-request@gnome.org.) This is a good place to ask
+   about intended changes.
+
+   #gtk+ on GIMPNet (irc.gimp.org, irc.us.gimp.org, irc.eu.gimp.org, ...)
+   is also a good place to find GTK+ developers to discuss changes with,
+   however, email to gtk-devel-list is the most certain and preferred
+   method.
+
+1) Ask _first_.
+
+2) With git, we no longer maintain a ChangeLog file, but you are expected
+   to produce a meaningful commit message. Changes without a sufficient
+   commit message will be reverted. See below for the expected format
+   of commit messages.
+
+Notes:
+
+* When developing larger features or complicated bug fixes, it is
+  advisable to work in a branch in your own cloned GLib repository.
+  You may even consider making your repository publically available
+  so that others can easily test and review your changes.
+
+* The expected format for git commit messages is as follows:
+
+=== begin example commit ===
+Short explanation of the commit
+
+Longer explanation explaining exactly what's changed, whether any
+external or private interfaces changed, what bugs were fixed (with bug
+tracker reference if applicable) and so forth. Be concise but not too brief.
+=== end example commit ===
+
+  - Always add a brief description of the commit to the _first_ line of
+    the commit and terminate by two newlines (it will work without the
+    second newline, but that is not nice for the interfaces).
+
+  - First line (the brief description) must only be one sentence and
+    should start with a capital letter unless it starts with a lowercase
+    symbol or identifier. Don't use a trailing period either. Don't exceed
+    72 characters.
+
+  - The main description (the body) is normal prose and should use normal
+    punctuation and capital letters where appropriate. Normally, for patches
+    sent to a mailing list it's copied from there.
+
+  - When committing code on behalf of others use the --author option, e.g.
+    git commit -a --author "Joe Coder <joe@coder.org>" and --signoff.
+
+
+Owen Taylor
+13 Aug 1998
+17 Apr 2001
+
+Matthias Clasen
+31 Mar 2009
diff --git a/README.in b/README.in
new file mode 100644
index 0000000..9ea2090
--- /dev/null
+++ b/README.in
@@ -0,0 +1,199 @@
+General Information
+===================
+
+This is GLib version @GLIB_VERSION@. GLib is the low-level core
+library that forms the basis for projects such as GTK+ and GNOME. It
+provides data structure handling for C, portability wrappers, and
+interfaces for such runtime functionality as an event loop, threads,
+dynamic loading, and an object system.
+
+The official ftp site is:
+  ftp://ftp.gtk.org/pub/glib
+
+The official web site is:
+  http://www.gtk.org/
+
+Information about mailing lists can be found at
+  http://www.gtk.org/mailinglists.html
+
+To subscribe: mail -s subscribe gtk-list-request@gnome.org < /dev/null
+(Send mail to gtk-list-request@gnome.org with the subject "subscribe")
+
+Installation
+============
+
+See the file 'INSTALL'
+
+Notes about GLib 2.20
+=====================
+
+^ The functions for launching applications (e.g. g_app_info_launch() +
+  friends) now passes a FUSE file:// URI if possible (requires gvfs
+  with the FUSE daemon to be running and operational). With gvfs 2.26,
+  FUSE file:// URIs will be mapped back to gio URIs in the GFile
+  constructors. The intent of this change is to better integrate
+  POSIX-only applications, see bug #528670 for the rationale.  The
+  only user-visible change is when an application needs to examine an
+  URI passed to it (e.g. as a positional parameter). Instead of
+  looking at the given URI, the application will now need to look at
+  the result of g_file_get_uri() after having constructed a GFile
+  object with the given URI.
+
+Notes about GLib 2.18
+=====================
+
+* The recommended way of using GLib has always been to only include the
+  toplevel headers glib.h, glib-object.h and gio.h. GLib enforces this by
+  generating an error when individual headers are directly included.
+  To help with the transition, the enforcement is not turned on by
+  default for GLib headers (it is turned on for GObject and GIO).
+  To turn it on, define the preprocessor symbol G_DISABLE_SINGLE_INCLUDES.
+
+Notes about GLib 2.16
+=====================
+
+* GLib now includes GIO, which adds optional dependencies against libattr
+  and libselinux for extended attribute and SELinux support. Use
+  --disable-xattr and --disable-selinux to build without these.
+
+Notes about GLib 2.10
+=====================
+
+* The functions g_snprintf() and g_vsnprintf() have been removed from
+  the gprintf.h header, since they are already declared in glib.h. This
+  doesn't break documented use of gprintf.h, but people have been known
+  to include gprintf.h without including glib.h.
+
+* The Unicode support has been updated to Unicode 4.1. This adds several
+  new members to the GUnicodeBreakType enumeration.
+
+* The support for Solaris threads has been retired. Solaris has provided
+  POSIX threads for long enough now to have them available on every
+  Solaris platform.
+
+* 'make check' has been changed to validate translations by calling
+  msgfmt with the -c option. As a result, it may fail on systems with
+  older gettext implementations (GNU gettext < 0.14.1, or Solaris gettext).
+  'make check' will also fail on systems where the C compiler does not
+  support ELF visibility attributes.
+
+* The GMemChunk API has been deprecated in favour of a new 'slice
+  allocator'. See the g_slice documentation for more details.
+
+* A new type, GInitiallyUnowned, has been introduced, which is
+  intended to serve as a common implementation of the 'floating reference'
+  concept that is e.g. used by GtkObject. Note that changing the
+  inheritance hierarchy of a type can cause problems for language
+  bindings and other code which needs to work closely with the type
+  system. Therefore, switching to GInitiallyUnowned should be done
+  carefully. g_object_compat_control() has been added to GLib 2.8.5
+  to help with the transition.
+
+Notes about GLib 2.6.0
+======================
+
+* GLib 2.6 introduces the concept of 'GLib filename encoding', which is the
+  on-disk encoding on Unix, but UTF-8 on Windows. All GLib functions
+  returning or accepting pathnames have been changed to expect
+  filenames in this encoding, and the common POSIX functions dealing
+  with pathnames have been wrapped. These wrappers are declared in the
+  header <glib/gstdio.h> which must be included explicitly; it is not
+  included through <glib.h>.
+
+  On current (NT-based) Windows versions, where the on-disk file names
+  are Unicode, these wrappers use the wide-character API in the C
+  library. Thus applications can handle file names containing any
+  Unicode characters through GLib's own API and its POSIX wrappers,
+  not just file names restricted to characters in the system codepage.
+
+  To keep binary compatibility with applications compiled against
+  older versions of GLib, the Windows DLL still provides entry points
+  with the old semantics using the old names, and applications
+  compiled against GLib 2.6 will actually use new names for the
+  functions. This is transparent to the programmer.
+
+  When compiling against GLib 2.6, applications intended to be
+  portable to Windows must take the UTF-8 file name encoding into
+  consideration, and use the gstdio wrappers to access files whose
+  names have been constructed from strings returned from GLib.
+
+* Likewise, g_get_user_name() and g_get_real_name() have been changed
+  to return UTF-8 on Windows, while keeping the old semantics for
+  applications compiled against older versions of GLib.
+
+* The GLib uses an '_' prefix to indicate private symbols that
+  must not be used by applications. On some platforms, symbols beginning
+  with prefixes such as _g will be exported from the library, on others not.
+  In no case can applications use these private symbols. In addition to that,
+  GLib+ 2.6 makes several symbols private which were not in any installed
+  header files and were never intended to be exported.
+
+* To reduce code size and improve efficiency, GLib, when compiled
+  with the GNU toolchain, has separate internal and external entry
+  points for exported functions. The internal names, which begin with
+  IA__, may be seen when debugging a GLib program.
+
+* On Windows, GLib no longer opens a console window when printing
+  warning messages if stdout or stderr are invalid, as they are in
+  "Windows subsystem" (GUI) applications. Simply redirect stdout or
+  stderr if you need to see them.
+
+* The child watch functionality tends to reveal a bug in many
+  thread implementations (in particular the older LinuxThreads
+  implementation on Linux) where it's not possible to call waitpid()
+  for a child created in a different thread. For this reason, for
+  maximum portability, you should structure your code to fork all
+  child processes that you want to wait for from the main thread.
+
+* A problem was recently discovered with g_signal_connect_object();
+  it doesn't actually disconnect the signal handler once the object being
+  connected to dies, just disables it. See the API docs for the function
+  for further details and the correct workaround that will continue to
+  work with future versions of GLib.
+
+How to report bugs
+==================
+
+Bugs should be reported to the GNOME bug tracking system.
+(http://bugzilla.gnome.org, product glib.) You will need
+to create an account for yourself.
+
+In the bug report please include:
+
+* Information about your system. For instance:
+
+   - What operating system and version
+   - For Linux, what version of the C library
+
+  And anything else you think is relevant.
+
+* How to reproduce the bug.
+
+  If you can reproduce it with one of the test programs that are built
+  in the tests/ subdirectory, that will be most convenient.  Otherwise,
+  please include a short test program that exhibits the behavior.
+  As a last resort, you can also provide a pointer to a larger piece
+  of software that can be downloaded.
+
+* If the bug was a crash, the exact text that was printed out
+  when the crash occured.
+
+* Further information such as stack traces may be useful, but
+  is not necessary.
+
+Patches
+=======
+
+Patches should also be submitted to bugzilla.gnome.org. If the
+patch fixes an existing bug, add the patch as an attachment
+to that bug report.
+
+Otherwise, enter a new bug report that describes the patch,
+and attach the patch to that bug report.
+
+Bug reports containing patches should include the PATCH keyword
+in their keyword fields. If the patch adds to or changes the GLib
+programming interface, the API keyword should also be included.
+
+Patches should be in unified diff form. (The -u option to GNU
+diff.)
diff --git a/README.win32 b/README.win32
new file mode 100644
index 0000000..8491997
--- /dev/null
+++ b/README.win32
@@ -0,0 +1,335 @@
+Tor Lillqvist <tml@iki.fi>
+Hans Breuer <hans@breuer.org>
+
+The general parts, and the section about gcc and autoconfiscated build
+are by Tor Lillqvist. The sections about MSVC build is by Hans Breuer.
+
+General
+=======
+
+For prebuilt binaries (DLLs and EXEs) and developer packages (headers,
+import libraries) of GLib, Pango, GTK+ etc for Windows, go to
+http://www.gtk.org/download-windows.html . They are for "native"
+Windows meaning they use the Win32 API and Microsoft C runtime library
+only. No POSIX (Unix) emulation layer like Cygwin in involved.
+
+To build GLib on Win32, you can use either gcc ("mingw") or the
+Microsoft compiler and tools. For the latter, MSVC6 and later have
+been used successfully. Also the Digital Mars C/C++ compiler have been
+used. 
+
+People have also successfully cross-compiled GLib for Win32 from Linux
+using the cross-mingw packages.
+
+Note that to just *use* GLib on Windows, there is no need to build it
+yourself.
+
+On Windows setting up a correct build environment can be quite a task,
+especially if you are used to just type "./configure; make" on Linux,
+and expect things to work as smoothly on Windows.
+
+The following preprocessor macros are to be used for conditional
+compilation related to Win32 in GLib-using code:
+
+- G_OS_WIN32 is defined when compiling for native Win32, without
+  any POSIX emulation, other than to the extent provided by the
+  bundled Microsoft C library (msvcr*.dll).
+
+- G_WITH_CYGWIN is defined if compiling for the Cygwin
+  environment. Note that G_OS_WIN32 is *not* defined in that case, as
+  Cygwin is supposed to behave like Unix. G_OS_UNIX *is* defined by a GLib
+  for Cygwin.
+
+- G_PLATFORM_WIN32 is defined when either G_OS_WIN32 or G_WITH_CYGWIN
+  is defined.
+
+These macros are defined in glibconfig.h, and are thus available in
+all source files that include <glib.h>.
+
+Additionally, there are the compiler-specific macros:
+- __GNUC__ is defined when using gcc
+- _MSC_VER is defined when using the Microsoft compiler
+- __DMC__ is defined when using the Digital Mars C/C++ compiler
+
+G_OS_WIN32 implies using the Microsoft C runtime, normally
+msvcrt.dll. GLib is not known to work with the older crtdll.dll
+runtime, or the static Microsoft C runtime libraries libc.lib and
+libcmt.lib. It apparently does work with the debugging version of
+msvcrt.dll, msvcrtd.dll. If compiled with Microsoft compilers newer
+than MSVC6, it also works with their compiler-specific runtimes, like
+msvcr70.dll or msvcr80.dll. Please note that it's non totally clear if
+you would be allowed by the license to distrubute a GLib linked to
+msvcr70.dll or msvcr80.dll, as those are not part of the operating
+system, but of the MSVC product. msvcrt.dll is part of Windows.
+
+Building software that use GLib or GTK+
+=======================================
+
+Building software that just *uses* GLib or GTK+ also require to have
+the right compiler set up the right way. If you intend to use gcc,
+follow the relevant instructions below in that case, too.
+
+Tor uses gcc with the -mms-bitfields flag which means that in order to
+use the prebuilt DLLs (especially of GTK+), if you compile your code
+with gcc, you *must* also use that flag. This flag means that the
+struct layout rules are identical to those used by MSVC. This is
+essential if the same DLLs are to be usable both from gcc- and
+MSVC-compiled code. Such compatibility is desirable.
+
+When using the prebuilt GLib DLLs that use msvcrt.dll from code that
+uses other C runtimes like for example msvcr70.dll, one should note
+that one cannot use such GLib API that take or returns file
+descriptors. On Windows, a file descriptor (the small integer as
+returned by open() and handled by related functions, and included in
+the FILE struct) is an index into a table local to the C runtime
+DLL. A file descriptor in one C runtime DLL does not have the same
+meaning in another C runtime DLL.
+
+Building GLib
+=============
+
+Again, first decide whether you really want to do this.
+
+Before building GLib you must also have a GNU gettext-runtime
+developer package. Get prebuilt binaries of gettext-runtime from
+http://www.gtk.org/download-windows.html .
+
+Autoconfiscated build (with gcc)
+================================
+
+Tor uses gcc 3.4.5 and the rest of the mingw utilities, including MSYS
+from www.mingw.org. Somewhat earlier or later versions of gcc
+presumably also work fine.
+
+Using Cygwin's gcc with the -mno-cygwin switch is not recommended. In
+theory it should work, but Tor hasn't tested that lately. It can
+easily lead to confusing situations where one mixes headers for Cygwin
+from /usr/include with the headers for native software one really
+should use. Ditto for libraries.
+
+If you want to use mingw's gcc, install gcc, win32api, binutils and
+MSYS from www.mingw.org.
+
+Tor invokes configure using:
+
+CC='gcc -mtune=pentium3 -mthreads' CPPFLAGS='-I/opt/gnu/include' \
+	LDFLAGS='-L/opt/gnu/lib -Wl,--enable-auto-image-base' CFLAGS=-O2 \
+	./configure --disable-gtk-doc --prefix=$TARGET
+
+The /opt/gnu mentioned contains the header files for GNU and (import)
+libraries for GNU libintl. The build scripts used to produce the
+prebuilt binaries are included in the "dev" packages.
+
+Please note that the ./configure mechanism should not blindly be used
+to build a GLib to be distributed to other developers because it
+produces a compiler-dependent glibconfig.h. For instance, the typedef
+for gint64 is long long with gcc, but __int64 with MSVC.
+
+Except for this and a few other minor issues, there shouldn't be any
+reason to distribute separate GLib headers and DLLs for gcc and MSVC6
+users, as the compilers generate code that uses the same C runtime
+library.
+
+The DLL generated by either compiler is binary compatible with the
+other one. Thus one either has to manually edit glibconfig.h
+afterwards, or use the supplied glibconfig.h.win32 which has been
+produced by running configure twice, once using gcc and once using
+MSVC, and merging the resulting files with diff -D.
+
+For MSVC7 and later (Visual C++ .NET 2003, Visual C++ 2005, Visual C++
+2008 etc) it is preferred to use specific builds of GLib DLLs that use
+the same C runtime as the code that uses GLib. Such DLLs should be
+named differently than the ones that use msvcrt.dll.
+
+For GLib, the DLL is called libglib-2.0-0.dll, and the import
+libraries libglib-2.0.dll.a and glib-2.0.lib. Note that the "2.0" is
+part of the "basename" of the library, it is not something that
+libtool has added. The -0 suffix is added by libtool and is the value
+of "LT_CURRENT - LT_AGE". The 0 is *not* part of the version number of
+GLib, although, for GLib 2.x.0, it happens to be the same. The
+LT_CURRENT - LT_AGE value will on purpose be kept as zero as long as
+binary compatibility is maintained. For the gory details, see
+configure.in and libtool documentation.
+
+Cross-compiling
+===============
+
+It is possible to build GLib using a cross compiler. See
+docs/reference/glib/html/glib-cross-compiling.html (part of the GLib
+reference manual) for more information.
+
+Building with MSVC
+==================
+
+If you are building from a SVN snapshot, you will not have any
+makefile.msc files. You should copy the corresponding makefile.msc.in
+file to that name, and replace any @...@ strings with the correct
+value.
+
+This is done automatically when an official GLib source distribution
+package is built, so if you get GLib from a source distribution
+package, there should be makefile.msc files ready to use (after some
+editing).
+
+The hand-written makefile.msc files, and the stuff in the "build"
+subdirectory, produce DLLs and import libraries that match what the
+so-called autoconfiscated build produces.
+
+All the MSVC makefiles are for the command line build with nmake.  If
+you want to use the VC-UI you can simply create wrapper .dsp makefiles
+(read the VC docs how to do so).
+
+Some modules may require Perl to auto-generate files. The goal (at
+least Hans's) is to not require any more tools.
+
+Build with:
+
+nmake -f makefile.msc
+  or
+nmake -f makefile.msc DEBUG=1
+
+[
+ The former will create 'release' versions of the DLLs. If you
+ plan to distribute you DLLs please use this command. The latter 
+ will create DLLs with debug information _and_ link them with
+ msvcrtd.dll instead of msvcrt.dll. 
+ Beware: There are known problems with mixing DLLs in one 
+ application, which are build against different runtimes. 
+ Especially the index-to-file mapping used by 'unix-style' file
+ operation - _open() _pipe() etc. - breaks sometimes in strange 
+ ways (for example the Gimp plug-in communication).
+]
+
+Required libraries (not build from svn)
+------------------
+  libintl (gnu-intl),
+
+are available pre-built from the website mentioned above.
+
+Versioning
+----------
+Instead of the Unix and auto* way of tracking versions and resolving
+dependencies (configure; make; make install) involving autoconf,
+automake, libtool and friends the MSVC build uses a different
+approach.
+
+The core of it's versioning is the file build/win32/module.defs.
+It contains entries of the form MODULE_VER, e.g.:
+
+	GLIB_VER = 2.0
+	LIBICONV_VER = 1.3
+
+and the placement of these modules defined as MODULE, e.g.:
+
+	GLIB = $(TOP)/glib
+	LIBICONV = $(TOP)/libiconv-$(LIBICONV_VER)
+
+whereas TOP is defined as the relative path from the respective
+module directory to your top build directory. Every makefile.msc
+needs to define TOP before including the common make file part
+make.msc, which than includes module.defs, like:
+
+TOP = ../..
+!INCLUDE $(TOP)/glib/build/win32/make.msc
+
+(Taken from gtk+/gdk/makefile.msc)
+
+With this provision it is possible to create almost placement
+independent makefiles without requiring to 'install' the libraries and
+headers into a common place (as it is done on Unix, and as Tor does
+when producing his zipfiles with prebuilt GLib, GTK+ etc).
+
+Special Files
+-------------
+	config.h.win32.in : @XXX_MAJOR_VERSION@ needs to be replaced by
+the current version/build number. The resulting file is to be saved
+as 'config.h.win32'. This should be automatically done if a package
+gets build on the Unix platform.
+
+	makefile.msc.in : @XXX_MAJOR_VERSION@ to be replaced. Save as
+makefile.msc.
+
+	<module>.def : every function which should be used from the outside of
+a dll needs to be marked for 'export'. It is common that one needs to change 
+these files after some api changes occured. If there are variables to be
+exported another mechanism is needed, like :
+
+	#ifdef G_OS_WIN32
+	#  ifdef GDK_COMPILATION
+	#    define GDKVAR __declspec(dllexport)
+	#  else
+	#    define GDKVAR extern __declspec(dllimport)
+	#  endif
+	#else
+	#  define GDKVAR extern
+	#endif
+
+
+
+Directory Structure
+-------------------
+all modules should be build in a common directory tree otherwise you 
+need to adapt the file 'module.defs'. They are listed here in increasing
+dependencies order.
+
+<common rootdir without spaces>
+  |
+  +- glib
+  |   |
+  |   +- build          : [this module lives in the SVN root dir]
+  |   |   +- win32
+  |   |       .\module.defs : defines (relative) locations of the headers
+  |   |                       and libs and version numbers to be include 
+  |   |                       in dll names
+  |   |       .\make.msc    : include by almost every 'makefile.msc'
+  |   |
+  |   | .\README.WIN32  : more information how to build
+  |   | .\glibconfig.h.win32.in : similar to config.h.win32.in
+  |   | .\makefile.msc  : master makefile, sub dir makefiles should work 
+  |   |
+  |   +- glib
+  |   +- gmodule
+  |   +- gthread        : does _not_ depend on pthread anymore
+  |   +- gobject
+  |
+  +- pango
+  |   +- pango          : 'native' build does not require extra libs and
+  |   |                 includes the minimal required text renderer
+  |   |                 (there is also a currently slightly broken FreeType2 
+  |   |                 based implementation for win32)
+  |   +- modules (not yet build)
+  |
+  +- atk
+  |   +- atk
+  |       .\makefile.msc : build here
+  |
+  +- gtk+
+  |   | .\config.h.win32 : for all the below
+  |   |
+  |   +- gdk-pixbuf
+  |   |   .\gdk_pixbuf.rc.in : version resource for the DLLs. Needs
+  |   |                 to be converted (filled with version info)
+  |   |                 as described above.
+  |   |
+  |   +- gdk
+  |   |   | .\makefile.msc : some auto-generation is needed to build in the
+  |   |   |             in the subdirectory 
+  |   |   +- win32
+  |   |
+  |   +- gtk
+
+  |
+  +- gimp
+  |   .\makefile.msc    : master makefile to build The Gimp. The makefiles
+  |                     from the sub dirs should work stand alone, but than
+  |                     the user needs to know the build order
+
+  |
+  +- dia                : additionally depends on libart_lgpl (in SVN)
+      |                 and libxml2 ( see http://www.xmlsoft.org/ )
+      +- lib
+      +- app
+      +- objects
+      +- plug-ins
+          +- python
+
diff --git a/acglib.m4 b/acglib.m4
new file mode 100644
index 0000000..530c0af
--- /dev/null
+++ b/acglib.m4
@@ -0,0 +1,131 @@
+## Portability defines that help interoperate with classic and modern autoconfs
+ifdef([AC_TR_SH],[
+define([GLIB_TR_SH],[AC_TR_SH([$1])])
+define([GLIB_TR_CPP],[AC_TR_CPP([$1])])
+], [
+define([GLIB_TR_SH],
+       [patsubst(translit([[$1]], [*+], [pp]), [[^a-zA-Z0-9_]], [_])])
+define([GLIB_TR_CPP],
+       [patsubst(translit([[$1]],
+  	                  [*abcdefghijklmnopqrstuvwxyz],
+ 			  [PABCDEFGHIJKLMNOPQRSTUVWXYZ]),
+		 [[^A-Z0-9_]], [_])])
+])
+
+# GLIB_AC_DIVERT_BEFORE_HELP(STUFF)
+# ---------------------------------
+# Put STUFF early enough so that they are available for $ac_help expansion.
+# Handle both classic (<= v2.13) and modern autoconf
+AC_DEFUN([GLIB_AC_DIVERT_BEFORE_HELP],
+[ifdef([m4_divert_text], [m4_divert_text([NOTICE],[$1])],
+       [ifdef([AC_DIVERT], [AC_DIVERT([NOTICE],[$1])],
+              [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
+$1
+AC_DIVERT_POP()])])])
+
+dnl GLIB_IF_VAR_EQ (ENV_VAR, VALUE [, EQUALS_ACTION] [, ELSE_ACTION])
+AC_DEFUN([GLIB_IF_VAR_EQ],[
+        case "$[$1]" in
+        "[$2]"[)]
+                [$3]
+                ;;
+        *[)]
+                [$4]
+                ;;
+        esac
+])
+dnl GLIB_STR_CONTAINS (SRC_STRING, SUB_STRING [, CONTAINS_ACTION] [, ELSE_ACTION])
+AC_DEFUN([GLIB_STR_CONTAINS],[
+        case "[$1]" in
+        *"[$2]"*[)]
+                [$3]
+                ;;
+        *[)]
+                [$4]
+                ;;
+        esac
+])
+dnl GLIB_ADD_TO_VAR (ENV_VARIABLE, CHECK_STRING, ADD_STRING)
+AC_DEFUN([GLIB_ADD_TO_VAR],[
+        GLIB_STR_CONTAINS($[$1], [$2], [$1]="$[$1]", [$1]="$[$1] [$3]")
+])
+
+# GLIB_SIZEOF (INCLUDES, TYPE, ALIAS)
+# ---------------------------------------------------------------
+# The definition here is based of that of AC_CHECK_SIZEOF
+AC_DEFUN([GLIB_SIZEOF],
+[AS_LITERAL_IF([$3], [],
+               [AC_FATAL([$0: requires literal arguments])])dnl
+AC_CACHE_CHECK([size of $2], AS_TR_SH([glib_cv_sizeof_$3]),
+[ # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  _AC_COMPUTE_INT([(long) (sizeof ($2))],
+                  [AS_TR_SH([glib_cv_sizeof_$3])],
+                  [AC_INCLUDES_DEFAULT([$1])],
+                  [AC_MSG_ERROR([cannot compute sizeof ($2), 77])])
+])dnl
+AC_DEFINE_UNQUOTED(GLIB_TR_CPP(glib_sizeof_$3), $AS_TR_SH([glib_cv_sizeof_$3]),
+                   [The size of $3, as computed by sizeof.])
+])# GLIB_SIZEOF
+
+dnl GLIB_BYTE_CONTENTS (INCLUDES, TYPE, ALIAS, N_BYTES, INITIALIZER)
+AC_DEFUN([GLIB_BYTE_CONTENTS],
+[pushdef([glib_ByteContents], GLIB_TR_SH([glib_cv_byte_contents_$3]))dnl
+AC_CACHE_CHECK([byte contents of $5], glib_ByteContents,
+[AC_TRY_RUN([#include <stdio.h>
+$1
+main()
+{
+  static $2 tv = $5;
+  char *p = (char*) &tv;
+  int i;
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  for (i = 0; i < $4; i++)
+    fprintf(f, "%s%d", i?",":"", *(p++));
+  fprintf(f, "\n");
+  exit(0);
+}], 
+   [glib_ByteContents=`cat conftestval`  dnl''
+], 
+   [glib_ByteContents=no],
+   [glib_ByteContents=no])])
+AC_DEFINE_UNQUOTED(GLIB_TR_CPP(glib_byte_contents_$3), [$[]glib_ByteContents],
+	[Byte contents of $3])
+popdef([glib_ByteContents])dnl
+])
+
+# GLIB_CHECK_VALUE(SYMBOL, INCLUDES, ACTION-IF-FAIL)
+# ---------------------------------------------------------------
+AC_DEFUN([GLIB_CHECK_VALUE],
+[AC_CACHE_CHECK([value of $1], AS_TR_SH([glib_cv_value_$1]),
+  [_AC_COMPUTE_INT([$1], AS_TR_SH([glib_cv_value_$1]), [$2], [$3])])
+])dnl
+
+# GLIB_CHECK_COMPILE_WARNINGS(PROGRAM, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------
+# Try to compile PROGRAM, check for warnings
+m4_define([GLIB_CHECK_COMPILE_WARNINGS],
+[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
+rm -f conftest.$ac_objext
+glib_ac_compile_save="$ac_compile"
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext'
+AS_IF([_AC_EVAL_STDERR($ac_compile) &&
+         AC_TRY_COMMAND([(if test -s conftest.err; then false ; else true; fi)])],
+      [$2],
+      [echo "$as_me: failed program was:" >&AS_MESSAGE_LOG_FD
+cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+m4_ifvaln([$3],[$3])dnl])dnl
+ac_compile="$glib_ac_compile_save"
+rm -f conftest.$ac_objext conftest.err m4_ifval([$1], [conftest.$ac_ext])[]dnl
+])# GLIB_CHECK_COMPILE_WARNINGS
+
+# GLIB_ASSERT_SET(VARIABLE)
+# -------------------------
+AC_DEFUN([GLIB_ASSERT_SET],
+[if test "x${$1+set}" != "xset" ; then
+  AC_MSG_ERROR($1 [must be set in cache file when cross-compiling.])
+fi
+])dnl
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..cac7f21
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,452 @@
+dnl @synopsis AC_FUNC_VSNPRINTF_C99
+dnl
+dnl Check whether there is a vsnprintf() function with C99 semantics installed.
+dnl
+AC_DEFUN([AC_FUNC_VSNPRINTF_C99],
+[AC_CACHE_CHECK(for C99 vsnprintf,
+  ac_cv_func_vsnprintf_c99,
+[AC_TRY_RUN(
+[#include <stdio.h>
+#include <stdarg.h>
+
+int
+doit(char * s, ...)
+{
+  char buffer[32];
+  va_list args;
+  int r;
+
+  va_start(args, s);
+  r = vsnprintf(buffer, 5, s, args);
+  va_end(args);
+
+  if (r != 7)
+    exit(1);
+
+  /* AIX 5.1 and Solaris seems to have a half-baked vsnprintf()
+     implementation. The above will return 7 but if you replace
+     the size of the buffer with 0, it borks! */
+  va_start(args, s);
+  r = vsnprintf(buffer, 0, s, args);
+  va_end(args);
+
+  if (r != 7)
+    exit(1);
+
+  exit(0);
+}
+
+int
+main(void)
+{
+  doit("1234567");
+  exit(1);
+}], ac_cv_func_vsnprintf_c99=yes, ac_cv_func_vsnprintf_c99=no, ac_cv_func_vsnprintf_c99=no)])
+dnl Note that the default is to be pessimistic in the case of cross compilation.
+dnl If you know that the target has a C99 vsnprintf(), you can get around this
+dnl by setting ac_func_vsnprintf_c99 to yes, as described in the Autoconf manual.
+if test $ac_cv_func_vsnprintf_c99 = yes; then
+  AC_DEFINE(HAVE_C99_VSNPRINTF, 1,
+            [Define if you have a version of the vsnprintf function
+             with semantics as specified by the ISO C99 standard.])
+fi
+])# AC_FUNC_VSNPRINTF_C99
+
+
+dnl @synopsis AC_FUNC_SNPRINTF_C99
+dnl
+dnl Check whether there is a snprintf() function with C99 semantics installed.
+dnl
+AC_DEFUN([AC_FUNC_SNPRINTF_C99],
+[AC_CACHE_CHECK(for C99 snprintf,
+  ac_cv_func_snprintf_c99,
+[AC_TRY_RUN(
+[#include <stdio.h>
+#include <stdarg.h>
+
+int
+doit()
+{
+  char buffer[32];
+  va_list args;
+  int r;
+
+  r = snprintf(buffer, 5, "1234567");
+
+  if (r != 7)
+    exit(1);
+
+  r = snprintf(buffer, 0, "1234567");
+
+  if (r != 7)
+    exit(1);
+
+  r = snprintf(NULL, 0, "1234567");
+
+  if (r != 7)
+    exit(1);
+
+  exit(0);
+}
+
+int
+main(void)
+{
+  doit();
+  exit(1);
+}], ac_cv_func_snprintf_c99=yes, ac_cv_func_snprintf_c99=no, ac_cv_func_snprintf_c99=no)])
+dnl Note that the default is to be pessimistic in the case of cross compilation.
+dnl If you know that the target has a C99 snprintf(), you can get around this
+dnl by setting ac_func_snprintf_c99 to yes, as described in the Autoconf manual.
+if test $ac_cv_func_snprintf_c99 = yes; then
+  AC_DEFINE(HAVE_C99_SNPRINTF, 1,
+            [Define if you have a version of the snprintf function
+             with semantics as specified by the ISO C99 standard.])
+fi
+])# AC_FUNC_SNPRINTF_C99
+
+
+dnl @synopsis AC_FUNC_PRINTF_UNIX98
+dnl
+dnl Check whether the printf() family supports Unix98 %n$ positional parameters 
+dnl
+AC_DEFUN([AC_FUNC_PRINTF_UNIX98],
+[AC_CACHE_CHECK(whether printf supports positional parameters,
+  ac_cv_func_printf_unix98,
+[AC_TRY_RUN(
+[#include <stdio.h>
+
+int
+main (void)
+{
+  char buffer[128];
+
+  sprintf (buffer, "%2\$d %3\$d %1\$d", 1, 2, 3);
+  if (strcmp ("2 3 1", buffer) == 0)
+    exit (0);
+  exit (1);
+}], ac_cv_func_printf_unix98=yes, ac_cv_func_printf_unix98=no, ac_cv_func_printf_unix98=no)])
+dnl Note that the default is to be pessimistic in the case of cross compilation.
+dnl If you know that the target printf() supports positional parameters, you can get around 
+dnl this by setting ac_func_printf_unix98 to yes, as described in the Autoconf manual.
+if test $ac_cv_func_printf_unix98 = yes; then
+  AC_DEFINE(HAVE_UNIX98_PRINTF, 1,
+            [Define if your printf function family supports positional parameters
+             as specified by Unix98.])
+fi
+])# AC_FUNC_PRINTF_UNIX98
+
+# Checks the location of the XML Catalog
+# Usage:
+#   JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
+AC_DEFUN([JH_PATH_XML_CATALOG],
+[
+  # check for the presence of the XML catalog
+  AC_ARG_WITH([xml-catalog],
+              AC_HELP_STRING([--with-xml-catalog=CATALOG],
+                             [path to xml catalog to use]),,
+              [with_xml_catalog=/etc/xml/catalog])
+  jh_found_xmlcatalog=true
+  XML_CATALOG_FILE="$with_xml_catalog"
+  AC_SUBST([XML_CATALOG_FILE])
+  AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
+  if test -f "$XML_CATALOG_FILE"; then
+    AC_MSG_RESULT([found])
+  else
+    jh_found_xmlcatalog=false
+    AC_MSG_RESULT([not found])
+  fi
+
+  # check for the xmlcatalog program
+  AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
+  if test "x$XMLCATALOG" = xno; then
+    jh_found_xmlcatalog=false
+  fi
+
+  if $jh_found_xmlcatalog; then
+    ifelse([$1],,[:],[$1])
+  else
+    ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
+  fi
+])
+
+# Checks if a particular URI appears in the XML catalog
+# Usage:
+#   JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+AC_DEFUN([JH_CHECK_XML_CATALOG],
+[
+  AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+  AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+  if $jh_found_xmlcatalog && \
+     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
+    AC_MSG_RESULT([found])
+    ifelse([$3],,,[$3
+])dnl
+  else
+    AC_MSG_RESULT([not found])
+    ifelse([$4],,
+       [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
+       [$4])
+  fi
+])
+
+
+# signed.m4 serial 1 (gettext-0.10.40)
+dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([bh_C_SIGNED],
+[
+  AC_CACHE_CHECK([for signed], bh_cv_c_signed,
+   [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
+  if test $bh_cv_c_signed = no; then
+    AC_DEFINE(signed, ,
+              [Define to empty if the C compiler doesn't support this keyword.])
+  fi
+])
+
+
+# longlong.m4 serial 4
+dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG if 'long long' works.
+
+AC_DEFUN([jm_AC_TYPE_LONG_LONG],
+[
+  AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
+  [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
+    [long long llmax = (long long) -1;
+     return ll << i | ll >> i | llmax / ll | llmax % ll;],
+    ac_cv_type_long_long=yes,
+    ac_cv_type_long_long=no)])
+  if test $ac_cv_type_long_long = yes; then
+    AC_DEFINE(HAVE_LONG_LONG, 1,
+      [Define if you have the 'long long' type.])
+  fi
+])
+
+
+# longdouble.m4 serial 1 (gettext-0.11.6)
+dnl Copyright (C) 2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether the compiler supports the 'long double' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_LONGDOUBLE],
+[
+  AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+    [if test "$GCC" = yes; then
+       gt_cv_c_long_double=yes
+     else
+       AC_TRY_COMPILE([
+         /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
+         long double foo = 0.0;
+         /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+         int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+         ], ,
+         gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+     fi])
+  if test $gt_cv_c_long_double = yes; then
+    AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+  fi
+])
+
+
+
+# wchar_t.m4 serial 1 (gettext-0.11.6)
+dnl Copyright (C) 2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
+    [AC_TRY_COMPILE([#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
+  fi
+])
+
+
+# wint_t.m4 serial 1
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
+    [AC_TRY_COMPILE([#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
+  fi
+])
+
+
+# intmax_t.m4 serial 1
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define intmax_t to 'long' or 'long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([jm_AC_TYPE_INTMAX_T],
+[
+  dnl For simplicity, we assume that a header file defines 'intmax_t' if and
+  dnl only if it defines 'uintmax_t'.
+  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+  if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
+    AC_REQUIRE([jm_AC_TYPE_LONG_LONG])
+    test $ac_cv_type_long_long = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+    AC_DEFINE_UNQUOTED(intmax_t, $ac_type,
+     [Define to long or long long if <inttypes.h> and <stdint.h> don't define.])
+  else
+    AC_DEFINE(HAVE_INTMAX_T, 1,
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
+
+dnl An alternative would be to explicitly test for 'intmax_t'.
+
+AC_DEFUN([gt_AC_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+    [AC_TRY_COMPILE([
+#include <stddef.h> 
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE(HAVE_INTMAX_T, 1,
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  else
+    AC_REQUIRE([jm_AC_TYPE_LONG_LONG])
+    test $ac_cv_type_long_long = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+    AC_DEFINE_UNQUOTED(intmax_t, $ac_type,
+     [Define to long or long long if <stdint.h> and <inttypes.h> don't define.])
+  fi
+])
+
+
+# stdint_h.m4 serial 3 (gettext-0.11.6)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([jm_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <stdint.h>],
+    [uintmax_t i = (uintmax_t) -1;],
+    jm_ac_cv_header_stdint_h=yes,
+    jm_ac_cv_header_stdint_h=no)])
+  if test $jm_ac_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
+
+
+# inttypes_h.m4 serial 5 (gettext-0.11.6)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <inttypes.h>],
+    [uintmax_t i = (uintmax_t) -1;],
+    jm_ac_cv_header_inttypes_h=yes,
+    jm_ac_cv_header_inttypes_h=no)])
+  if test $jm_ac_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
+
+
+m4_include(acglib.m4)dnl
+m4_include(glib/libcharset/codeset.m4)dnl
+m4_include(glib/libcharset/glibc21.m4)dnl
+m4_include(m4macros/glib-gettext.m4)dnl
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..3e9e847
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+ORIGDIR=`pwd`
+cd $srcdir
+PROJECT=GLib
+TEST_TYPE=-f
+FILE=glib/glib.h
+
+DIE=0
+
+have_libtool=false
+if libtoolize --version < /dev/null > /dev/null 2>&1 ; then
+	libtool_version=`libtoolize --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
+	case $libtool_version in
+	    1.4*|1.5*|2.2*)
+		have_libtool=true
+		;;
+	esac
+fi
+if $have_libtool ; then : ; else
+	echo
+	echo "You must have libtool 1.4 installed to compile $PROJECT."
+	echo "Install the appropriate package for your distribution,"
+	echo "or get the source tarball at http://ftp.gnu.org/gnu/libtool/"
+	DIE=1
+fi
+
+(gtkdocize --version) < /dev/null > /dev/null 2>&1 || {
+	echo
+	echo "You must have gtk-doc installed to compile $PROJECT."
+	echo "Install the appropriate package for your distribution,"
+	echo "or get the source tarball at ftp://ftp.gnome.org/pub/GNOME/sources/gtk-doc/"
+	DIE=1
+}
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+	echo
+	echo "You must have autoconf installed to compile $PROJECT."
+	echo "Install the appropriate package for your distribution,"
+	echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
+	DIE=1
+}
+
+if automake-1.10 --version < /dev/null > /dev/null 2>&1 ; then
+    AUTOMAKE=automake-1.10
+    ACLOCAL=aclocal-1.10
+else if automake-1.9 --version < /dev/null > /dev/null 2>&1 ; then
+    AUTOMAKE=automake-1.9
+    ACLOCAL=aclocal-1.9
+else 
+	echo
+	echo "You must have automake 1.9.x or 1.10.x installed to compile $PROJECT."
+	echo "Install the appropriate package for your distribution,"
+	echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
+	DIE=1
+fi
+fi
+
+if test "$DIE" -eq 1; then
+	exit 1
+fi
+
+test $TEST_TYPE $FILE || {
+	echo "You must run this script in the top-level $PROJECT directory"
+	exit 1
+}
+
+if test -z "$AUTOGEN_SUBDIR_MODE"; then
+        if test -z "$*"; then
+                echo "I am going to run ./configure with no arguments - if you wish "
+                echo "to pass any to it, please specify them on the $0 command line."
+        fi
+fi
+
+rm -rf autom4te.cache
+
+# README and INSTALL are required by automake, but may be deleted by clean
+# up rules. to get automake to work, simply touch these here, they will be
+# regenerated from their corresponding *.in files by ./configure anyway.
+touch README INSTALL
+
+if [ ! -d build ]; then
+  if [ -x "`which svn`" ]; then
+    echo
+    echo "=============================================================="
+    echo "  your checkout doesn't contain build/."
+    echo "      fetching it from http://svn.gnome.org/svn/build/trunk/"
+    echo "=============================================================="
+    echo
+
+    svn checkout http://svn.gnome.org/svn/build/trunk/ build
+  else
+    echo
+    echo 'warning: build/ directory is missing and no "svn" to fetch it!'
+    echo
+  fi
+fi
+
+$ACLOCAL $ACLOCAL_FLAGS || exit $?
+
+libtoolize --force || exit $?
+gtkdocize || exit $?
+
+autoheader || exit $?
+
+$AUTOMAKE --add-missing || exit $?
+autoconf || exit $?
+cd $ORIGDIR || exit $?
+
+if test -z "$AUTOGEN_SUBDIR_MODE"; then
+        $srcdir/configure --enable-maintainer-mode $AUTOGEN_CONFIGURE_ARGS "$@" || exit $?
+
+        echo 
+        echo "Now type 'make' to compile $PROJECT."
+fi
diff --git a/build/ChangeLog b/build/ChangeLog
new file mode 100644
index 0000000..bbe0569
--- /dev/null
+++ b/build/ChangeLog
@@ -0,0 +1,591 @@
+2009-01-13  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/README
+	* win32/vs9/README: New files. Mention this VS solution and
+	projects are experimental and that https://code.launchpad.net/oah
+	might be a better choice.
+
+	* win32/vs8/Makefile.am
+	* win32/vs9/Makefile.am (EXTRA_DIST): Add the READMEs and two
+	missing vcproj files.
+
+2008-11-02  Tor Lillqvist  <tml@novell.com>
+
+	* win32/Makefile.am (SUBDIRS): Add vs9.
+
+2008-11-02  Tor Lillqvist  <tml@novell.com>
+
+	Bug 558153 - Patch for .def files generation
+
+	* win32/{vs8,vs9}/*.vcproj: Add &quot; around paths, making it
+	possible to compile in a directory containing spaces. .def files
+	generation is done for every configuration not only the "Debug"
+	ones.
+
+	Patch by Guillaume Duhamel.
+
+2008-09-16  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs9: New folder. Project files for use with MSVS9. Based
+	on the MSVS8 project files is win32/vs8. Four configurations:
+	Debug|Win32, Release|Win32, Debug|x64 and Release|x64. DLL names
+	simplified to of the style glib-2-vs9.dll.
+
+2008-09-15  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/*.vcproj: Update to match the Makefile.am files. Drop
+	G*_EXPORTS from PreprocessorDefinitions, nothing looks for such
+	macros. Add G_DISABLE_DEPRECATED.
+
+	Don't use Detect64BitPortabilityProblems as those warnings are
+	misleading. They don't take into consideration ifdefs in
+	glibconfig.h and elsewhere for _WIN64.
+
+	Add PCRE_STATIC for glib to avoid exporting the pcre
+	functions. Add DLL_EXPORT to glib to export also the GLIB_VAR
+	variables that aren't mentioned in glib.symbols. Add G_LOG_DOMAIN
+	for gobject.
+
+	Drop the "win32" part from under "dependencies" so that the same
+	project files can be used also for 64-bit compilation by just
+	having a different "dependencies" folder containing 64-bit
+	packages instead. At least, I hope it will work out some way like
+	that. MSVS project files really are a pain to maintain.  Much
+	information is typically copied for four different configurations
+	"Debug|Win32", "Release|Win32", "Debug|x64" and "Release|x64"
+	instead of having common stuff listed just once and only different
+	parametrisations. Or am I missing something?
+	
+	Make the "Release" configuration work, too. Use correct character
+	set for the gspawn-win32-helper programs. Use correct subsystem
+	for the non-console one.
+
+2008-08-27  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/*.vcproj: Add "win32" directory level to the
+	references to the dependencies folder (which each actual user of
+	the project file probably needs to edit anyway depending on their
+	directory structure). Add missing files, remove nonexistent files.
+
+	* win32/vs8/glib.vcproj: Don't needlessly copy localcharset.c, but
+	compile it where it is in libcharset. Drop dirent as gdir.c
+	includes dirent.h and wdirent.c directly. Handle also
+	G_GNUC_FORMAT in the custom build step for glib.symbols.
+
+2008-08-02  Tor Lillqvist  <tml@novell.com>
+
+	Bug 545954 - 64-bit issue in dirent
+
+	* win32/dirent/dirent.h: Use __int64 for the dd_handle on 64-bit
+	Windows. (Would use intptr_t, but that is not available before
+	MSVS8, and we want to keep this compilable also with MSVS6 and 7,
+	I think.) Thanks to Richard Hult.
+
+2008-05-19  Tor Lillqvist  <tml@novell.com>
+
+	* win32/dirent/dirent.c: Include dirent.h with doublequotes so
+	that it is searched from this same folder first.
+
+2008-05-19  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/gspawn-win32-helper.vcproj
+	* win32/vs8/gspawn-win32-helper-console.vcproj: New files. Build
+	these two executables.
+
+	* win32/vs8/*.vcproj: Compile as C and not C++.
+
+	* win32/vs8/glib-genmarshal.vcproj: Use MBS and not Unicode. (What
+	this setting really means is just that we don't define the UNICODE
+	and _UNICODE macros when compiling; it has no effect on what APIs
+	the code might use.) Use the same IntermediateDirectory as the
+	other projects.
+
+	* win32/vs8/glib.sln: Add the gspawn-win32-helper and gspawn-win32-helper projects.
+
+2008-05-17  Tor Lillqvist  <tml@novell.com>
+
+	* "build" is no longer include into GLib through
+	svn:externals. The relevant directories and files have been svn
+	add'ed to GLib (trunk) instead.
+
+2008-05-16  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/glib.vcproj: Add gi18n.c.
+
+	* win32/vs8/gio.vcproj: Add gwin32directorymonitor.c.
+
+	* win32/vs8/glib-genmarshal.vcproj: Put also glib-genmarshal.exe
+	in the "bin" folder.
+
+2008-04-23  Tor Lillqvist  <tml@novell.com>
+
+	Bug 529391 - Update of vs8 build files for Glib 2.16
+
+	* win32/vs8/*: Update from Danel Atallah.
+
+2008-03-12  Tor Lillqvist  <tml@novell.com>
+
+	* MAINTAINERS: Add.
+
+	* win32/make.mingw: Remove this since long unused and obsolete
+	file from SVN.
+
+	* win32/make.msc: Don't mention it here either then.
+
+2007-04-15  Tor Lillqvist  <tml@novell.com>
+
+	* .cvsignore
+	* win32/.cvsignore
+	* win32/dirent/.cvsignore
+	* win32/vs8/.cvsignore: Remove.
+
+2006-10-14  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/gmodule.vcproj
+	* win32/vs8/gobject.vcproj
+	* win32/vs8/gthread.vcproj: Updates by Mike Edenfield. (#354124)
+
+2006-09-02  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/glib.vcproj: Update from Mike Edenfield.
+
+2006-02-08  Tor Lillqvist  <tml@novell.com>
+
+	* win32/vs8/glib-genmarshal.vcproj: New file: Visual Studio
+	project file for glib-genmarshal.exe, by Sergey Scobich.
+
+	* win32/vs8/Makefile.am
+	* win32/vs8/glib.sln: Add it.
+
+2006-01-31  Tor Lillqvist  <tml@novell.com>
+
+	* win32/Makefile.am (EXTRA_DIST): Drop the obsolete shell scripts
+	and make.mingw.
+
+	* win32/vs8/*: Visual Studio 2005 project files for GLib
+	contributed by Sergey Scobich. (#328691)
+
+	* win32/Makefile.am (SUBDIRS): Add vs8.
+
+	* win32/make.msc (LINKDEBUG): Use /nodefaultlib:msvcrt.lib when
+	debugging. (#329325, Timo Linna)
+
+2005-09-01  Tor Lillqvist  <tml@novell.com>
+
+	* win32/cl-wrapper.c: Again spent some hours hacking on this. Now
+	the compilation phase of building libglib autoconfiscated using
+	CC=cl-wrapper seems to work. But problems in the linking phase,
+	for instance -Wl,--whole-archive isn't implemented, and I don't
+	think link.exe even has a such feature to include all of a
+	library. Argh. To implement -Wl,--whole-archive, would need to
+	extract the library contents into a temp directory and link with
+	all the resulting object files. Sigh.
+
+2005-07-09  Tor Lillqvist  <tml@novell.com>
+
+	* README: When using auto*/libtool/gcc to build GLib, Pango and
+	GTK+, the scripts to compile resource files in build/win32 are no
+	longer used. Still here in case somebody wants to have a look,
+	though.
+	
+2005-02-06  Hans Breuer  <hans@breuer.org>
+
+	* win32/make.msc win32/module.defs : updated to include Cairo,
+	gnome-canvas, gnome-print(ui), libart, pangoft2, libxml2, libxslt
+
+2004-12-29  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/cl-wrapper.c: More hacking. Implement -idirafter
+	correctly, amending the INCLUDE environment variable. Ignore
+	-lm. Error if multiple -o options. Copy input libs called foo.a to
+	foo.temp.lib so that link knows what they are. Remove dead
+	code. Link with same default libraries as mingw's gcc. Use
+	indirect command line file if command line is too long.
+
+2004-12-12  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/cl-wrapper.c: Hack more on this. Using MSVC is necessary
+	if one wants to use tools like Purify or BoundsChecker.
+
+2004-08-11  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/dirent/dirent.[ch]: Update from mingw-runtime-3.3.
+	Implements both normal and wide-char versions.
+
+	* win32/dirent/wdirent.c: New file.
+
+	* win32/dirent/Makefile.am (EXTRA_DIST): Add wdirent.c.
+
+2004-05-01  Hans Breuer  <hans@breuer.org>
+
+	* win32/make.msc : -DG_ENABLE_DEBUG=1 for debug builds
+	(#141335, John Ehresman)
+
+2004-03-05  Federico Mena Quintero  <federico@ximian.com>
+
+	Fix #136082, patch by Morten Welinder.
+
+	* win32/cl-wrapper.c: #include <config.h>
+	* win32/dirent/dirent.c: Likewise.
+
+2004-01-24  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/compile-resource
+	* win32/lt-compile-resource: Use /bin/sh instead of /bin/bash, as
+	MSYS doesn't come with any /bin/bash. When compiling with
+	--enable-static and --disable-shared flag, libtool creates *.lo
+	files as scripts, but the *.o files are in "." and not in
+	".libs". Thanks to Fridrich Strba.
+
+2003-11-15  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/dirent/makefile.msc: Improve. (#126913, John Ehresman)
+
+2003-08-08  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/cl-wrapper.c: Fix bug in environment variable
+	handling. Support --version flag. Prefix double quotes in -I and
+	-D parameters with backslash.
+
+2003-06-06  Tor Lillqvist  <tml@iki.fi>
+
+	* win32(compile-resource (resfile): Support a WINDRES environment
+	variable. (#112387, J. Ali Harlow)
+
+2002-09-28  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Add libxml2 CFLAGS and LIBS
+	(suggestion by Steffen Macke).
+
+2002-09-17  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/compile-resource: Return failure (implicitly, as the
+	return status of the last command executed) if m4 or windres
+	fails. Thanks to charlet@act-europe.fr (#93373).
+
+2002-09-13  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/lt-compile-resource: Argh. With some libtool versions, or
+	when the moon is in a certain phase, libtool creates the actual
+	object files as .lo files. Otherwise .lo files are small scripts
+	(which is what lt-compile-resource has always thought until now).
+	Add an ugly hack that tries to determine which kind of .lo files are
+	used, and act correspondingly.
+
+2002-09-10  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs: Remove GTK_VER which was misleading and
+	unused. Ditto for GTKGLAREA_VER. Add comment about taking this
+	stuff with a very big grain of salt.
+
+2002-03-27  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs
+	* win32/make.msc
+	* win32/make.mingw: Try to make up-to-date with GLib 2.0, ATK 1.0,
+	Pango 1.0 and GTK+ 2.0. This stuff is starting to feel more and
+	more quaint, though. Remove the FriBiDi references, Pango uses its
+	own mini-fribidi version. Use the names GTK2_CFLAGS and _LIBS also in
+	make.mingw, not GTKCURRENT_*.
+
+2001-12-05  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw (LIBICONV_LIBS): Fix typo: pkg-config --libs,
+	not --cflags. Thanks to Victor Secarin.
+
+	* win32/build-dll: Don't call dirname blindly on $0 which might be
+	a Windows-style (drive letter, backslashes) pathname. Thanks to
+	Victor Secarin. Remove mention of Platform SDK, it doesn't
+	include the linker any longer.
+
+2001-10-31  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw (TIFF_LIBS): We can use same import library for
+	non-LZW and LZW-enabled versions. Just let the user decide which
+	DLL to use.
+
+2001-10-30  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Use pkg-config for more stuff. The
+	corresponding .pc files are included in the new packages on
+	www.gimp.org/win32/new-downloads.html. 
+
+	* win32/dirent/dirent-zip: New file, script to package a developer
+	package of dirent.h and dirent.lib.
+
+	* win32/dirent/Makefile.am (EXTRA_DIST): Add it.
+
+2001-10-24  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Also try to include module.defs from the build
+	subdirectory of GLib.
+
+	* win32/make.msc: When DEBUG, use -Zi, otherwise -Zi. Always use
+	/machine:ix86.
+
+2001-10-23  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/cl-wrapper.c: Various changes. I don't actually use this
+	to build with libtool and MSVC, only to run configure for MSVC. At
+	least for now.
+
+	* win32/make.mingw: Use pkg-config to get CFLAGS and LIBS for GLib
+	and GTK.
+
+	* win32/make.msc: Use GDK and GTK import library names now
+	produced in gtk-1-3-win32-production.
+
+2001-10-10  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs (PNG): Use libpng 1.2.0.
+
+	* win32/lt-compile-resource: Mkdir .libs if not there already.
+
+2001-09-30  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/build-dll: Comment clarification.
+
+	* win32/Makefile.am: Add dirent subdirectory.
+
+	* win32/dirent/*: New files. The (public domain) dirent
+	implementation from the mingw runtime, for MSVC users.
+
+	* win32/make.msc (DIRENT_CFLAGS,DIRENT_LIBS): Point to
+	build/win32/dirent in the GLib sources. Hmm.
+	(CC): Remove duplicate $(OPTIMIZE), already in CFLAGS.
+	
+2001-09-28  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw
+	* win32/make.msc: Separate the compiler program names into
+	an Make macro of its own (CCOMPILER and CXXCOMPILER).
+
+	* win32/cl-wrapper.c: New file. A program that accepts Unix-like C
+	compiler command line arguments, and runs the Microsoft C compiler
+	(cl) after transforming the arguments to cl's syntax. This program
+	can be used when using the auto*/configure mechanism to build
+	software with MSVC.
+
+2001-09-25  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs: Do define GLIB_VER after all. (Do use it in
+	(import) library names, like it is on Unix.)
+
+	* win32/make.mingw
+	* win32/make.msc: Some comments added. Use GLIB_VER in GLib
+	(import) library names.
+
+2001-09-17  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/build-dll: Invocation changed. We now expect a version
+	info like libtool's -version-info parameter. The intention is to
+	produce the same name DLL as libtool would, i.e. use "current -
+	age" as the DLL name suffix.
+
+	* win32/compile-resource: New file, containing the part of
+	build-dll that compiles the resource file, if available.
+
+	* win32/lt-compile-resource: New file, invokes compile-resource,
+	placing the resulting .o file in the .libs subdirectory, and
+	handcrafts a "libtool object" for it.
+
+	* win32/Makefile.am: Distribute new files.
+
+	* win32/make.mingw: Add COMPILE_RESOURCE.
+
+Tue Sep  4 01:46:15 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* win32/Makefile.am (EXTRA_DIST): Add build-dll, on
+	the assumption it isn't going to get distributed otherwise.
+
+2001-09-01  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/build-dll: Move here from GLib. Use gcc -shared instead of
+	the multiple pass gcc+dlltool method. Don't include the version
+	number in the import library names.
+
+	* win32/make.mingw
+	* win32/make.msc: Correspondingly, remove the version number parts
+	from (some) import library names. (Just a start, more to follow.)
+
+	* win32/module.defs: In fact, no need to know the versions at all
+	for stuff that doesn't include it as part of the directory name.
+	
+2001-01-06  Hans Breuer  <hans@breuer.org>
+
+	* win32/module.defs : renamed GTKCURRENT to GTK2 and some
+	version number updates
+
+	* win32/make.msc : added GTK2_CFLAGS and GTK2_LIBS, now used
+	by CVS HEAD Gimp. Minor updates,
+
+2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* win32/make.mingw: Redid CFLAGS.
+
+	* win32/make.mingw (CXX): Removed PTHREAD defs. Added -O2 -Wall to
+	compile flags.
+
+2001-01-06  Hans Breuer  <hans@breuer.org>
+
+	* win32/make.msc win32/module.defs : added ATK,
+	adapted Pango version
+
+2001-03-19  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs (GLIB_GENMARSHAL): Add macro for glib-genmarshal.
+
+2001-02-17  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.{mingw,msc} (INTL_LIBS): Call the import library just
+	libintl, not gnu-intl, for consistency with Unix conventions. (The
+	DLL is still called gnu-intl.dll, using such a generic name as
+	just "intl.dll" would be asking for trouble.)
+
+2001-01-28  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs
+	* win32/make.mingw
+	* win32/make.msc : Use libiconv 1.5.1. Use libiconv's import
+	library as built by its Makefile.msvc, without any version
+	number. Use the same convention for the GNU-style import library.
+
+2000-12-27  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.{mingw,msc} (TIFF_LIBS): Provide separate TIFF_LZW
+	and TIFF_NOLZW.
+
+2000-12-21  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/*: Add version number for FreeType2. We need the FT2
+	library built as a DLL, and append the vesion number to its name,
+	too.
+
+2000-12-20  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs (FRIBIDI_VER): Use FriBidi 0.1.15.
+
+2000-12-14  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.msc: Split C runtime flag (-MD or -MDd) to a separate
+	macro.
+
+2000-11-15  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs (PANGO_VER): Update Pango version to 0.13.
+
+2000-10-22  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.msc (PANGO_LIBS): Include version in Pango lib names.
+
+2000-10-07  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.msc: Improve to be more useable.
+
+2000-09-12  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.{mingw,msc}: Add PTHREAD_LIBS and PTHREAD_CFLAGS.
+
+2000-08-24  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs: Add separate version number for gdk-pixbuf.
+
+	* win32/make.mingw: Add C++ defs.
+
+2000-08-20  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/*: Remove FREETYPE2_20000624, not needed any
+	longer by gimp-freetype.
+
+	* win32/make.mingw: Add rule to produce assembler source.
+
+	* win32/make.msc: Fix syntax error. Add CFLAGS.
+
+2000-08-05  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs
+	* win32/make.{mingw,msc}: Rename the FreeType2 snapshot from 2000-06-24
+	(used by gimp-freetype). Use the name "FreeType2" for the current
+	FreeType2.
+	
+2000-07-30  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs
+	* win32/make.mingw
+	* win32/make.msc: Rename XML to LIBXML. Use version 0.14 of
+	it. Add LIBXML_CFLAGS and _LIBS. Add GTKCURRENT referring the
+	current CVS GTK+ (nonworking on Win32).
+	
+2000-07-25  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw (PANGO_LIBS): Typo.
+
+2000-07-21  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/*: Reorder stuff to be in alphabetical order of package
+	names. Add GtkGLArea. Add path to OpenGL headers.
+
+2000-07-18  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs (FRIBIDI_VER)
+	* win32/make.{mingw,msc} (FRIBIDI_LIBS): Use correct version
+	of FriBidi.
+
+2000-07-15  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw
+	* win32/make.msc
+	* win32/module.defs: Add Pango.
+
+2000-07-10  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/module.defs: 
+	* win32/make.msc: New files. Factor out common stuff to module.defs.
+	make.msc is for nmake and MSVC. Thanks to Hans Breuer.
+
+	* win32/Makefile.am: Add them to EXTRA_DIST.
+
+	* win32/make.mingw: Move part to module.defs. Ugly hack to find
+	module.defs.
+
+2000-07-02  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Addd FriBidi and libiconv. Add USRDIR for
+	headers and libs that are "installed".
+
+2000-06-07  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Clarify where this stuff should be located.
+
+	* Makefile.am
+	* win32/Makefile.am: New files. Only set SUBDIRS and EXTRA_DIST.
+
+2000-05-29  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Add gmodule directory to GLib includes. Use
+	freetype2 directory called just that.
+
+2000-05-13  Tor Lillqvist  <tml@iki.fi>
+
+	* README: Remove the original README text.
+
+	* win32/make.mingw: Define macros for CFLAGS and LIBS of GLib,
+	GTk+, intl, freetype2, zlib, libjpeg, libtiff and GIMP. Remove the
+	WIN32APIHEADERS, that is now taken care of in glib/build-dll.
+
+2000-05-05  Tor Lillqvist  <tml@iki.fi>
+
+	* win32/make.mingw: Add GIMP_VER. Add path to GIMP and freetype2
+	sources.
+
+2000-05-04  Tor Lillqvist  <tml@iki.fi>
+
+	* ChangeLog: Start ChangeLog.
+
+	* README: Change purpose of this directory.
+
+	* win32/make.mingw: New file.
+
+	* build.inf
+	* cvs.py
+	* write.py: Remove.
diff --git a/build/Makefile.am b/build/Makefile.am
new file mode 100644
index 0000000..8a834e7
--- /dev/null
+++ b/build/Makefile.am
@@ -0,0 +1,7 @@
+SUBDIRS = \
+	win32
+
+EXTRA_DIST = \
+	README \
+	ChangeLog
+
diff --git a/build/README b/build/README
new file mode 100644
index 0000000..8b95fd5
--- /dev/null
+++ b/build/README
@@ -0,0 +1,2 @@
+Now this directory is private to GLib. Only the files relevant to GLib
+are left. See the separate "build" module in GNOME SVN for history.
diff --git a/build/win32/Makefile.am b/build/win32/Makefile.am
new file mode 100644
index 0000000..c722a7f
--- /dev/null
+++ b/build/win32/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = \
+	dirent \
+	vs8 \
+	vs9
+
+EXTRA_DIST = \
+	make.msc \
+	module.defs
diff --git a/build/win32/dirent/Makefile.am b/build/win32/dirent/Makefile.am
new file mode 100644
index 0000000..87b5216
--- /dev/null
+++ b/build/win32/dirent/Makefile.am
@@ -0,0 +1,9 @@
+EXTRA_DIST = \
+	README \
+	dirent.c \
+	dirent.h \
+	wdirent.c \
+	makefile.msc \
+	dirent-zip
+
+
diff --git a/build/win32/dirent/README b/build/win32/dirent/README
new file mode 100644
index 0000000..e31ac1f
--- /dev/null
+++ b/build/win32/dirent/README
@@ -0,0 +1,2 @@
+This is dirent from mingw-runtime-3.3, separated for MSVC user's
+benefit.
diff --git a/build/win32/dirent/dirent-zip b/build/win32/dirent/dirent-zip
new file mode 100644
index 0000000..7301987
--- /dev/null
+++ b/build/win32/dirent/dirent-zip
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Build developer package for the dirent library.
+
+ZIP=/tmp/dirent.zip
+
+mkdir -p dist/include dist/lib
+cp dirent.h dist/include
+cp dirent.lib dist/lib
+
+(cd dist
+rm $ZIP
+zip $ZIP -@ <<EOF
+include/dirent.h
+lib/dirent.lib
+EOF
+)
+
+rm -rf dist
diff --git a/build/win32/dirent/dirent.c b/build/win32/dirent/dirent.c
new file mode 100644
index 0000000..26b6cb1
--- /dev/null
+++ b/build/win32/dirent/dirent.c
@@ -0,0 +1,341 @@
+/*

+ * dirent.c

+ * This file has no copyright assigned and is placed in the Public Domain.

+ * This file is a part of the mingw-runtime package.

+ * No warranty is given; refer to the file DISCLAIMER within the package.

+ *

+ * Derived from DIRLIB.C by Matt J. Weinstein

+ * This note appears in the DIRLIB.H

+ * DIRLIB.H by M. J. Weinstein   Released to public domain 1-Jan-89

+ *

+ * Updated by Jeremy Bettis <jeremy@hksys.com>

+ * Significantly revised and rewinddir, seekdir and telldir added by Colin

+ * Peters <colin@fu.is.saga-u.ac.jp>

+ *	

+ */

+

+#include <stdlib.h>

+#include <errno.h>

+#include <string.h>

+#include <io.h>

+#include <direct.h>

+

+#include "dirent.h"

+

+#define WIN32_LEAN_AND_MEAN

+#include <windows.h> /* for GetFileAttributes */

+

+#include <tchar.h>

+

+#ifdef _UNICODE

+#define _tdirent	_wdirent

+#define _TDIR 		_WDIR

+#define _topendir	_wopendir

+#define _tclosedir	_wclosedir

+#define _treaddir	_wreaddir

+#define _trewinddir	_wrewinddir

+#define _ttelldir	_wtelldir

+#define _tseekdir	_wseekdir

+#else

+#define _tdirent	dirent

+#define _TDIR 		DIR

+#define _topendir	opendir

+#define _tclosedir	closedir

+#define _treaddir	readdir

+#define _trewinddir	rewinddir

+#define _ttelldir	telldir

+#define _tseekdir	seekdir

+#endif

+

+#define SUFFIX	_T("*")

+#define	SLASH	_T("\\")

+

+

+/*

+ * opendir

+ *

+ * Returns a pointer to a DIR structure appropriately filled in to begin

+ * searching a directory.

+ */

+_TDIR *

+_topendir (const _TCHAR *szPath)

+{

+  _TDIR *nd;

+  unsigned int rc;

+  _TCHAR szFullPath[MAX_PATH];

+	

+  errno = 0;

+

+  if (!szPath)

+    {

+      errno = EFAULT;

+      return (_TDIR *) 0;

+    }

+

+  if (szPath[0] == _T('\0'))

+    {

+      errno = ENOTDIR;

+      return (_TDIR *) 0;

+    }

+

+  /* Attempt to determine if the given path really is a directory. */

+  rc = GetFileAttributes (szPath);

+  if (rc == (unsigned int)-1)

+    {

+      /* call GetLastError for more error info */

+      errno = ENOENT;

+      return (_TDIR *) 0;

+    }

+  if (!(rc & FILE_ATTRIBUTE_DIRECTORY))

+    {

+      /* Error, entry exists but not a directory. */

+      errno = ENOTDIR;

+      return (_TDIR *) 0;

+    }

+

+  /* Make an absolute pathname.  */

+  _tfullpath (szFullPath, szPath, MAX_PATH);

+

+  /* Allocate enough space to store DIR structure and the complete

+   * directory path given. */

+  nd = (_TDIR *) malloc (sizeof (_TDIR) + (_tcslen(szFullPath) + _tcslen (SLASH) +

+			 _tcslen(SUFFIX) + 1) * sizeof(_TCHAR));

+

+  if (!nd)

+    {

+      /* Error, out of memory. */

+      errno = ENOMEM;

+      return (_TDIR *) 0;

+    }

+

+  /* Create the search expression. */

+  _tcscpy (nd->dd_name, szFullPath);

+

+  /* Add on a slash if the path does not end with one. */

+  if (nd->dd_name[0] != _T('\0') &&

+      nd->dd_name[_tcslen (nd->dd_name) - 1] != _T('/') &&

+      nd->dd_name[_tcslen (nd->dd_name) - 1] != _T('\\'))

+    {

+      _tcscat (nd->dd_name, SLASH);

+    }

+

+  /* Add on the search pattern */

+  _tcscat (nd->dd_name, SUFFIX);

+

+  /* Initialize handle to -1 so that a premature closedir doesn't try

+   * to call _findclose on it. */

+  nd->dd_handle = -1;

+

+  /* Initialize the status. */

+  nd->dd_stat = 0;

+

+  /* Initialize the dirent structure. ino and reclen are invalid under

+   * Win32, and name simply points at the appropriate part of the

+   * findfirst_t structure. */

+  nd->dd_dir.d_ino = 0;

+  nd->dd_dir.d_reclen = 0;

+  nd->dd_dir.d_namlen = 0;

+  memset (nd->dd_dir.d_name, 0, FILENAME_MAX);

+

+  return nd;

+}

+

+

+/*

+ * readdir

+ *

+ * Return a pointer to a dirent structure filled with the information on the

+ * next entry in the directory.

+ */

+struct _tdirent *

+_treaddir (_TDIR * dirp)

+{

+  errno = 0;

+

+  /* Check for valid DIR struct. */

+  if (!dirp)

+    {

+      errno = EFAULT;

+      return (struct _tdirent *) 0;

+    }

+

+  if (dirp->dd_stat < 0)

+    {

+      /* We have already returned all files in the directory

+       * (or the structure has an invalid dd_stat). */

+      return (struct _tdirent *) 0;

+    }

+  else if (dirp->dd_stat == 0)

+    {

+      /* We haven't started the search yet. */

+      /* Start the search */

+      dirp->dd_handle = _tfindfirst (dirp->dd_name, &(dirp->dd_dta));

+

+  	  if (dirp->dd_handle == -1)

+	{

+	  /* Whoops! Seems there are no files in that

+	   * directory. */

+	  dirp->dd_stat = -1;

+	}

+      else

+	{

+	  dirp->dd_stat = 1;

+	}

+    }

+  else

+    {

+      /* Get the next search entry. */

+      if (_tfindnext (dirp->dd_handle, &(dirp->dd_dta)))

+	{

+	  /* We are off the end or otherwise error.	

+	     _findnext sets errno to ENOENT if no more file

+	     Undo this. */

+	  DWORD winerr = GetLastError();

+	  if (winerr == ERROR_NO_MORE_FILES)

+	    errno = 0;	

+	  _findclose (dirp->dd_handle);

+	  dirp->dd_handle = -1;

+	  dirp->dd_stat = -1;

+	}

+      else

+	{

+	  /* Update the status to indicate the correct

+	   * number. */

+	  dirp->dd_stat++;

+	}

+    }

+

+  if (dirp->dd_stat > 0)

+    {

+      /* Successfully got an entry. Everything about the file is

+       * already appropriately filled in except the length of the

+       * file name. */

+      dirp->dd_dir.d_namlen = _tcslen (dirp->dd_dta.name);

+      _tcscpy (dirp->dd_dir.d_name, dirp->dd_dta.name);

+      return &dirp->dd_dir;

+    }

+

+  return (struct _tdirent *) 0;

+}

+

+

+/*

+ * closedir

+ *

+ * Frees up resources allocated by opendir.

+ */

+int

+_tclosedir (_TDIR * dirp)

+{

+  int rc;

+

+  errno = 0;

+  rc = 0;

+

+  if (!dirp)

+    {

+      errno = EFAULT;

+      return -1;

+    }

+

+  if (dirp->dd_handle != -1)

+    {

+      rc = _findclose (dirp->dd_handle);

+    }

+

+  /* Delete the dir structure. */

+  free (dirp);

+

+  return rc;

+}

+

+/*

+ * rewinddir

+ *

+ * Return to the beginning of the directory "stream". We simply call findclose

+ * and then reset things like an opendir.

+ */

+void

+_trewinddir (_TDIR * dirp)

+{

+  errno = 0;

+

+  if (!dirp)

+    {

+      errno = EFAULT;

+      return;

+    }

+

+  if (dirp->dd_handle != -1)

+    {

+      _findclose (dirp->dd_handle);

+    }

+

+  dirp->dd_handle = -1;

+  dirp->dd_stat = 0;

+}

+

+/*

+ * telldir

+ *

+ * Returns the "position" in the "directory stream" which can be used with

+ * seekdir to go back to an old entry. We simply return the value in stat.

+ */

+long

+_ttelldir (_TDIR * dirp)

+{

+  errno = 0;

+

+  if (!dirp)

+    {

+      errno = EFAULT;

+      return -1;

+    }

+  return dirp->dd_stat;

+}

+

+/*

+ * seekdir

+ *

+ * Seek to an entry previously returned by telldir. We rewind the directory

+ * and call readdir repeatedly until either dd_stat is the position number

+ * or -1 (off the end). This is not perfect, in that the directory may

+ * have changed while we weren't looking. But that is probably the case with

+ * any such system.

+ */

+void

+_tseekdir (_TDIR * dirp, long lPos)

+{

+  errno = 0;

+

+  if (!dirp)

+    {

+      errno = EFAULT;

+      return;

+    }

+

+  if (lPos < -1)

+    {

+      /* Seeking to an invalid position. */

+      errno = EINVAL;

+      return;

+    }

+  else if (lPos == -1)

+    {

+      /* Seek past end. */

+      if (dirp->dd_handle != -1)

+	{

+	  _findclose (dirp->dd_handle);

+	}

+      dirp->dd_handle = -1;

+      dirp->dd_stat = -1;

+    }

+  else

+    {

+      /* Rewind and read forward to the appropriate index. */

+      _trewinddir (dirp);

+

+      while ((dirp->dd_stat < lPos) && _treaddir (dirp))

+	;

+    }

+}

diff --git a/build/win32/dirent/dirent.h b/build/win32/dirent/dirent.h
new file mode 100644
index 0000000..237665b
--- /dev/null
+++ b/build/win32/dirent/dirent.h
@@ -0,0 +1,127 @@
+/*

+ * DIRENT.H (formerly DIRLIB.H)

+ * This file has no copyright assigned and is placed in the Public Domain.

+ * This file is a part of the mingw-runtime package.

+ * No warranty is given; refer to the file DISCLAIMER within the package.

+ *

+ */

+#ifndef _DIRENT_H_

+#define _DIRENT_H_

+

+#include <stdio.h>

+#include <io.h>

+

+#ifndef RC_INVOKED

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+struct dirent

+{

+	long		d_ino;		/* Always zero. */

+	unsigned short	d_reclen;	/* Always zero. */

+	unsigned short	d_namlen;	/* Length of name in d_name. */

+	char		d_name[FILENAME_MAX]; /* File name. */

+};

+

+#ifdef _WIN64

+#define INTPTR __int64

+#else

+#define INTPTR long

+#endif

+

+/*

+ * This is an internal data structure. Good programmers will not use it

+ * except as an argument to one of the functions below.

+ * dd_stat field is now int (was short in older versions).

+ */

+typedef struct

+{

+	/* disk transfer area for this dir */

+	struct _finddata_t	dd_dta;

+

+	/* dirent struct to return from dir (NOTE: this makes this thread

+	 * safe as long as only one thread uses a particular DIR struct at

+	 * a time) */

+	struct dirent		dd_dir;

+

+	/* _findnext handle */

+	INTPTR			dd_handle;

+

+	/*

+         * Status of search:

+	 *   0 = not started yet (next entry to read is first entry)

+	 *  -1 = off the end

+	 *   positive = 0 based index of next entry

+	 */

+	int			dd_stat;

+

+	/* given path for dir with search pattern (struct is extended) */

+	char			dd_name[1];

+} DIR;

+

+DIR* __cdecl opendir (const char*);

+struct dirent* __cdecl readdir (DIR*);

+int __cdecl closedir (DIR*);

+void __cdecl rewinddir (DIR*);

+long __cdecl telldir (DIR*);

+void __cdecl seekdir (DIR*, long);

+

+

+/* wide char versions */

+

+struct _wdirent

+{

+	long		d_ino;		/* Always zero. */

+	unsigned short	d_reclen;	/* Always zero. */

+	unsigned short	d_namlen;	/* Length of name in d_name. */

+	wchar_t		d_name[FILENAME_MAX]; /* File name. */

+};

+

+/*

+ * This is an internal data structure. Good programmers will not use it

+ * except as an argument to one of the functions below.

+ */

+typedef struct

+{

+	/* disk transfer area for this dir */

+	struct _wfinddata_t	dd_dta;

+

+	/* dirent struct to return from dir (NOTE: this makes this thread

+	 * safe as long as only one thread uses a particular DIR struct at

+	 * a time) */

+	struct _wdirent		dd_dir;

+

+	/* _findnext handle */

+	INTPTR			dd_handle;

+

+	/*

+         * Status of search:

+	 *   0 = not started yet (next entry to read is first entry)

+	 *  -1 = off the end

+	 *   positive = 0 based index of next entry

+	 */

+	int			dd_stat;

+

+	/* given path for dir with search pattern (struct is extended) */

+	wchar_t			dd_name[1];

+} _WDIR;

+

+

+

+_WDIR* __cdecl _wopendir (const wchar_t*);

+struct _wdirent*  __cdecl _wreaddir (_WDIR*);

+int __cdecl _wclosedir (_WDIR*);

+void __cdecl _wrewinddir (_WDIR*);

+long __cdecl _wtelldir (_WDIR*);

+void __cdecl _wseekdir (_WDIR*, long);

+

+

+#ifdef	__cplusplus

+}

+#endif

+

+#endif	/* Not RC_INVOKED */

+

+#endif	/* Not _DIRENT_H_ */

diff --git a/build/win32/dirent/makefile.msc b/build/win32/dirent/makefile.msc
new file mode 100644
index 0000000..00f2e34
--- /dev/null
+++ b/build/win32/dirent/makefile.msc
@@ -0,0 +1,16 @@
+TOP = ..\..\..\..
+
+!INCLUDE $(TOP)\glib\build\win32\make.msc
+
+dirent_OBJECTS = dirent.obj wdirent.obj
+
+INCLUDES = -I.
+
+all : dirent.lib
+
+dirent.lib : $(dirent_OBJECTS)
+	lib /out:dirent.lib /nodefaultlib $(dirent_OBJECTS)
+
+clean::
+	del /f $(dirent_OBJECTS)
+	del /f dirent.lib
diff --git a/build/win32/dirent/wdirent.c b/build/win32/dirent/wdirent.c
new file mode 100644
index 0000000..098d854
--- /dev/null
+++ b/build/win32/dirent/wdirent.c
@@ -0,0 +1,3 @@
+#define _UNICODE 1

+#define UNICODE 1

+#include "dirent.c"

diff --git a/build/win32/make.msc b/build/win32/make.msc
new file mode 100644
index 0000000..91835a9
--- /dev/null
+++ b/build/win32/make.msc
@@ -0,0 +1,181 @@
+# Note that this file is hardly maintained, hardly usable without
+# manual editing, and not really part of a recommended way to build
+# GLib and related software with Microsoft's compilers. Only a few
+# persons use a build setup that involves this file.
+
+# Common makefile definitions for building GLib, GTk+, and various
+# software that use these libraries with msvc on Win32
+
+# Debug builds shoud link with msvcrtd release build with msvcrt.
+!IFNDEF DEBUG
+# Full optimization:
+OPTIMIZE = -Ox
+CRUNTIME = -MD
+# Line number debug info only
+DEBUGINFO = -Zd
+LINKDEBUG =
+!ELSE
+# Debugging:
+OPTIMIZE = 
+CRUNTIME = -MDd
+DEBUGINFO = -Zi -DG_ENABLE_DEBUG=1
+LINKDEBUG = /debug /nodefaultlib:msvcrt.lib
+!ENDIF
+
+LDFLAGS = /link /machine:ix86 $(LINKDEBUG)
+
+!IFNDEF TOP
+TOP = ..
+!ENDIF
+
+# paths and version numbers
+!INCLUDE module.defs
+
+################
+# CFLAGS and LIBS for the packages in module.defs.
+# In alphabetical order.
+
+# Note that these CFLAGS and LIBS refer to stuff in "source"
+# directories. This is for historical reasons, and only useable if you
+# have the GLib, Pango, etc sources. If you use the prebuilt developer
+# packages, you should fix these to instead refer to the place where
+# you unzipped the developer packages. Easiest of all, run pkg-config
+# --cflags gtk+-2.0 (for instance), and paste its output as the
+# definition of GTK2_CFLAGS. Etc.
+
+ATK_CFLAGS = -I $(ATK)
+ATK_LIBS = $(ATK)\atk\atk-$(ATK_VER).lib
+
+CAIRO_CFLAGS = -I $(CAIRO)\cairo\src -I $(CAIRO)\libpixman\src -I $(CAIRO) $(FONTCONFIG_CFLAGS) $(FREETYPE2_CFLAGS)
+CAIRO_LIBS = $(CAIRO)\cairo\src\libcairo-$(CAIRO_VER).lib
+
+DIRENT_CFLAGS = -I $(GLIB)\build\win32\dirent
+DIRENT_LIBS = $(GLIB)\build\win32\dirent\dirent.lib
+
+# Don't know if Freetype2, FriBiDi and some others actually can be
+# built with MSVC, but one can produce an import library even if the
+# DLL was built with gcc.
+
+FREETYPE2_CFLAGS = -I $(FREETYPE2)\include
+FREETYPE2_LIBS = $(FREETYPE2)\obj\freetype-$(FREETYPE2_VER).lib
+
+GDK_PIXBUF_CFLAGS = -I $(GDK_PIXBUF)
+GDK_PIXBUF_LIBS = $(GTK2)\gdk-pixbuf\gdk_pixbuf-$(GDK_PIXBUF_VER).lib
+
+GIMP_CFLAGS = -I $(GIMP)
+GIMP_PLUGIN_LIBS = $(GIMP)\libgimp\gimp-$(GIMP_VER).lib $(GIMP)\libgimp\gimpui-$(GIMP_VER).lib
+
+# overide definition to use it as callable path
+GLIB = $(TOP)\glib
+
+GLIB_CFLAGS = -I $(GLIB) -I $(GLIB)\glib -I $(GLIB)\gmodule $(INTL_CFLAGS)
+GLIB_LIBS = $(GLIB)\glib\glib-$(GLIB_VER).lib $(GLIB)\gmodule\gmodule-$(GLIB_VER).lib $(GLIB)\gobject\gobject-$(GLIB_VER).lib
+GTHREAD_LIBS = $(GLIB)\gthread\gthread-$(GLIB_VER).lib
+
+GNOMECANVAS_CFLAGS = -I $(GNOMECANVAS)
+GNOMECANVAS_LIBS = $(GNOMECANVAS)\libgnomecanvas\libgnomecanvas-$(GNOMECANVAS_VER).lib
+
+GNOMEPRINT_CFLAGS = -I $(GNOMEPRINT)
+GNOMEPRINT_LIBS = $(GNOMEPRINT)\libgnomeprint\gnome-print-$(GNOMEPRINT_VER).lib
+
+GNOMEPRINTUI_CFLAGS = -I $(GNOMEPRINTUI)
+GNOMEPRINTUI_LIBS = $(GNOMEPRINTUI)\libgnomeprintui\gnome-printui-$(GNOMEPRINTUI_VER).lib
+
+GTK_CFLAGS = -I$(GTK)\gdk -I$(GTK)\gdk -I$(GTK) 
+GTK_LIBS = $(GTK)\gtk\gtk.lib $(GTK)\gdk\gdk.lib 
+
+GTK2_CFLAGS = $(GLIB_CFLAGS) $(ATK_CFLAGS) -I$(GTK2)\gdk -I$(GTK2)\gdk -I$(GTK2) -I$(PANGO) -I$(ATK)
+GTK2_LIBS = $(GTK2)\gtk\gtk-win32-$(GTK2_VER).lib $(GTK2)\gdk\gdk-win32-$(GTK2_VER).lib $(GTK2)\gdk-pixbuf\gdk_pixbuf-$(GTK2_VER).lib $(PANGO_LIBS)
+
+GTKGLAREA_CFLAGS = -I $(GTKGLAREA)
+GTKGLAREA_CFLAGS = -I $(GTKGLAREA)
+GTKGLAREA_LIBS = $(GTKGLAREA)\gtkgl\gtkgl-$(GTKGLAREA_VER).lib
+
+LIBART_CFLAGS = -I$(LIBART)\.. -FIlibart_lgpl/art_config.h
+LIBART_LIBS = $(LIBART)\libart.lib
+
+INTL_CFLAGS = -I $(INTL)
+INTL_LIBS = $(INTL)\intl.lib 
+
+LIBICONV_CFLAGS = -I $(LIBICONV)\include
+LIBICONV_LIBS = $(LIBICONV)\lib\iconv.lib
+
+LIBXML_CFLAGS = -I $(LIBXML)
+LIBXML_LIBS = $(LIBXML)\xml-$(LIBXML_VER).lib
+
+LIBXML2_CFLAGS = $(LIBICONV_CFLAGS) -I $(LIBXML2)\include
+LIBXML2_LIBS = $(LIBXML2)\libxml2.lib
+
+LIBXSLT_CFLAGS = -I $(LIBXSLT)
+LIBXSLT_LIBS = $(LIBXSLT)\libxslt\libxslt.lib
+
+JPEG_CFLAGS = -I $(JPEG)
+JPEG_LIBS = $(JPEG)\libjpeg.lib
+
+OPENGL_CFLAGS = # None needed, headers bundled with the compiler
+OPENGL_LIBS = opengl32.lib lglu32.lib
+
+PANGO_CFLAGS = -I $(PANGO)
+PANGO_LIBS = $(PANGO)\pango\pango-$(PANGO_VER).lib
+PANGOWIN32_LIBS = $(PANGO_LIBS) $(PANGO)\pango\pangowin32-$(PANGO_VER).lib
+PANGOFT2_LIBS = $(PANGO_LIBS) $(PANGO)\pango\pangoft2-$(PANGO_VER).lib
+
+PNG_CFLAGS = -I $(PNG) $(ZLIB_CFLAGS)
+PNG_LIBS = $(PNG)\png.lib $(ZLIB_LIBS)
+
+RSVG_CFLAGS = -I $(RSVG)\..
+RSVG_LIBS = $(RSVG)\librsvg-$(RSVG_VER).lib
+
+SVG_CFLAGS = -I $(SVG)\src
+SVG_LIBS = $(SVG)\src\libsvg-$(SVG_VER).lib
+
+TIFF_CFLAGS = -I $(TIFF)\libtiff
+# Use single import library for both libtiff DLL versions (with or
+# without LZW code). The user selects which DLL to use.
+TIFF_NOLZW_LIBS = $(TIFF)\libtiff\tiff.lib $(JPEG_LIBS) $(ZLIB_LIBS) user32.lib
+TIFF_LZW_LIBS = $(TIFF_NOLZW_LIBS)
+TIFF_LIBS = $(TIFF_NOLZW_LIBS)
+
+ZLIB_CFLAGS = -I $(ZLIB)
+ZLIB_LIBS = $(ZLIB)\zlib.lib
+
+################
+# Compiler to use.
+
+CCOMPILER = cl
+CC = $(CCOMPILER) -G5 -GF $(CRUNTIME) -W3 -nologo
+
+################
+# The including makefile should define INCLUDES, DEFINES and
+# DEPCFLAGS.  INCLUDES are the includes related to the module being
+# built.  DEFINES similarly. DEPCFLAGS should be set to a set of
+# GLIB_CFLAGS, GTK_CFLAGS etc corresponding to what other modules we
+# depend on.
+
+CFLAGS = $(OPTIMIZE) $(DEBUGINFO) $(INCLUDES) $(DEFINES) $(DEPCFLAGS)
+
+.c.i :
+	$(CC) $(CFLAGS) -E $< >$@
+
+# The default target should be "all"
+
+default: all
+
+clean::
+	-del *.obj
+	-del *.res
+	-del *.i
+	-del *.exe
+	-del *.dll
+	-del *.lib
+	-del *.err
+	-del *.map
+	-del *.sym
+	-del *.exp
+	-del *.lk1
+	-del *.mk1
+	-del *.pdb
+	-del *.ilk
+
+# Needed by hacker rule to make makefile.msc from makefile.msc.in:
+SED = e:\cygwin\bin\sed
diff --git a/build/win32/module.defs b/build/win32/module.defs
new file mode 100644
index 0000000..dfebcdd
--- /dev/null
+++ b/build/win32/module.defs
@@ -0,0 +1,113 @@
+# Note that this file is hardly maintained, hardly usable without
+# manual editing, and not really part of a recommended way to build
+# GLib and related software with Microsoft's compilers. Only a few
+# persons use a build setup that involves this file.
+
+# This file is included by makefiles for both GNU Make (for gcc
+# (mingw) builds, and NMAKE (for MSVC builds).
+
+MODULE_DEFS_INCLUDED=1
+
+################
+# The version macros define what versions of libraries to use.
+
+# The version numbers are defined unconditionally. If you want to
+# produce a newer version of one of these libraries, the new number
+# should be defined in the specific project makefile _after_ including
+# this file (or make.{mingw,msc}). These version numbers are used in
+# the names of some import libraries. 
+
+# Please note that there are two (or three) ways to build the GLib
+# (and GTK+ etc) libraries on Win32: Either using the same
+# auto*/configure mechanism to generate makefiles as on Unix, and
+# libtool to handle DLL creation. This currently only works for gcc,
+# and even then it is hellish to set up to work 100% correctly. For
+# people using that, this file is totally irrelevant.
+
+# Or, use hand-written makefiles, either for MSVC (these are called
+# makefile.msc and maintained by Hans Breuer), or for gcc
+# (makefile.mingw, by Tor Lillqvist). Only for GLib are the
+# makefile.mingw files believed to be up-to-date, for other modules
+# they have been left to rot after Tor started using the
+# autoconfiscated way of building.
+
+# The stuff here uses the same name for (import) libraries as on Unix,
+# as libtool uses those, and the semi-official developer packages are
+# built using libtool.
+
+ATK_VER = 1.0
+CAIRO_VER = 0.3
+FREETYPE2_VER = 2.0
+GIMP_VER = 1.2
+GDK_PIXBUF_VER = 2.0
+GLIB_VER = 2.0
+GTKGLAREA_VER = 1.2.2
+GTK2_VER = 2.0
+LIBGLADE_VER = 0.14
+LIBICONV_VER = 1.7
+LIBXML_VER = 1.8.7
+LIBXML2_VER = 2.4.2
+PANGO_VER = 1.0
+POPT_VER = 1.4
+SVG_VER = 0.1
+RSVG_VER = 2.4
+
+################
+# Locations of various source directories. TOP is defined in make.{mingw,msc}
+
+# First stuff that is in the GNOME CVS repository.
+# In alphabetical order.
+
+ATK = $(TOP)/atk
+CAIRO = $(TOP)\cairo
+GIMP = $(TOP)/gimp
+GLIB = $(TOP)/glib
+GNOMECANVAS = $(TOP)\libgnomecanvas
+GNOMECANVAS_VER = 2.9
+
+# GTK+ 1.3.0, gtk-1-3-win32-production branch. Rename directory
+# to gtk+p after initial checkout from CVS.
+GTK = $(TOP)/gtk+p
+# GTK+ 2.0
+GTK2 = $(TOP)/gtk+
+GNOMEPRINT = $(TOP)\libgnomeprint
+GNOMEPRINT_VER = 2.8
+GDK_PIXBUF = $(GTK)
+LIBGLADE = $(TOP)/libglade
+LIBXML = $(TOP)/libxml-$(LIBXML_VER)
+PANGO = $(TOP)/pango
+
+GNOMEPRINTUI = $(TOP)\libgnomeprintui
+GNOMEPRINTUI_VER = 2.2
+
+# Aux programs
+GLIB_GENMARSHAL = $(GLIB)/gobject/glib-genmarshal
+
+# Stuff from other places.
+
+# Note this was is specific to what tml happened to have on his disk
+# at some time in history. To really be able to recompile something
+# that uses for instance libjpeg, you should download a suitable
+# binary "developer" distribution of it, unpack it into some location,
+# and edit this file correspondingly. You should not take the versions
+# mentioned here too literally, use the latest version you can find,
+# or the ones the current GTK+ 2.0 for Windows uses.
+
+FREETYPE2 = $(TOP)/freetype2
+GTKEXTRA = $(TOP)/gtk+extra
+GTKGLAREA = $(TOP)/gtkglarea
+INTL = $(TOP)/gettext-0.10.40/intl
+JPEG = $(TOP)/jpeg-6b
+LIBART = $(TOP)/libart_lgpl
+LIBICONV = $(TOP)/libiconv-$(LIBICONV_VER)
+LIBXSLT = $(TOP)/libxslt
+PNG = $(TOP)/libpng-1.2.0
+RSVG = $(TOP)\librsvg
+SVG = $(TOP)\libsvg
+TIFF = $(TOP)/tiff-v3.4
+ZLIB = $(TOP)/zlib-1.1.3
+
+# Headers from Microsoft's PlatformSDK (that aren't present in
+# mingw) are needed by a just a few packages when compiling with gcc.
+# This is just where tml has it installed.
+PLATFORMSDK = i:/src/psdk
diff --git a/build/win32/vs8/Makefile.am b/build/win32/vs8/Makefile.am
new file mode 100644
index 0000000..69cd83f
--- /dev/null
+++ b/build/win32/vs8/Makefile.am
@@ -0,0 +1,11 @@
+EXTRA_DIST = \
+	README \
+	gio.vcproj \
+	glib-genmarshal.vcproj \
+	glib.sln \
+	glib.vcproj \
+	gmodule.vcproj \
+	gobject.vcproj \
+	gspawn-win32-helper-console.vcproj \
+	gspawn-win32-helper.vcproj \
+	gthread.vcproj
diff --git a/build/win32/vs8/README b/build/win32/vs8/README
new file mode 100644
index 0000000..4576aae
--- /dev/null
+++ b/build/win32/vs8/README
@@ -0,0 +1,4 @@
+Note that this is mostly experimental and not really maintained. It
+seems that the OAH project at https://code.launchpad.net/oah might be
+a better choice if you want to start building GLib (and more of the
+GTK+ stack) with Visual Studio.
diff --git a/build/win32/vs8/gio.vcproj b/build/win32/vs8/gio.vcproj
new file mode 100644
index 0000000..13902ac
--- /dev/null
+++ b/build/win32/vs8/gio.vcproj
@@ -0,0 +1,486 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="gio"
+	ProjectGUID="{F3D1583C-5613-4809-BD98-7CC1C1276F92}"
+	RootNamespace="gio"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gio,../../..,../../../glib,../../../gmodule,../../../../dependencies/proxy-libintl-20080418/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;G_LOG_DOMAIN=\&quot;GLib-GIO\&quot;;G_DISABLE_DEPRECATED;GIO_COMPILATION;GIO_MODULE_DIR=\&quot;gio/modules\&quot;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib shlwapi.lib"
+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../../dependencies/proxy-libintl-20080418/lib"
+				ModuleDefinitionFile="../../../gio/gio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gio,../../..,../../../glib,../../../gmodule,../../../../dependencies/proxy-libintl-20080418/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;G_LOG_DOMAIN=\&quot;GLib-GIO\&quot;;G_DISABLE_DEPRECATED;GIO_COMPILATION;GIO_MODULE_DIR=\&quot;gio/modules\&quot;"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib shlwapi.lib"
+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../../dependencies/proxy-libintl-20080418/lib"
+				ModuleDefinitionFile="../../../gio/gio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\gio\gappinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gasynchelper.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gasyncresult.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gbufferedinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gbufferedoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gcancellable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gcontenttype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdatainputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdataoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdrive.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdummyfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gemblem.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gemblemedicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileattribute.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileenumerator.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilenamecompleter.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilterinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilteroutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\ginputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gio-marshal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioaliasdef.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioenumtypes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioerror.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\giomodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioscheduler.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gloadableicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocaldirectorymonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileenumerator.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfilemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalvfs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmemoryinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmemoryoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmount.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmountoperation.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gnativevolumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\goutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gpollfilemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gseekable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gsimpleasyncresult.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gthemedicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gunionvolumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gvfs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gvolume.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gvolumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gwin32appinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gwin32mount.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gwin32volumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwin32directorymonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpvfs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpfileinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpfileoutputstream.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\gio\gio.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gio.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gio.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gio.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gio.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gio.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gio.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gio.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gio.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gio.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs8/glib-genmarshal.vcproj b/build/win32/vs8/glib-genmarshal.vcproj
new file mode 100644
index 0000000..06cb398
--- /dev/null
+++ b/build/win32/vs8/glib-genmarshal.vcproj
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="windows-1251"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="8,00"

+	Name="glib-genmarshal"

+	ProjectGUID="{BD12E835-5C52-4E5D-8234-1C579F33E27A}"

+	RootNamespace="glibgenmarshal"

+	Keyword="Win32Proj"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib"

+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="1"

+			CharacterSet="1"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib"

+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\gobject\glib-genmarshal.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs8/glib.sln b/build/win32/vs8/glib.sln
new file mode 100644
index 0000000..544560e
--- /dev/null
+++ b/build/win32/vs8/glib.sln
@@ -0,0 +1,84 @@
+Microsoft Visual Studio Solution File, Format Version 9.00

+# Visual Studio 2005

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib", "glib.vcproj", "{12BCA020-EABF-429E-876A-A476BC9C10C0}"

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gmodule", "gmodule.vcproj", "{4214047C-F5C1-40B3-8369-5DCED8C32770}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gobject", "gobject.vcproj", "{F172EFFC-E30F-4593-809E-DB2024B1E753}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gthread", "gthread.vcproj", "{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-genmarshal", "glib-genmarshal.vcproj", "{BD12E835-5C52-4E5D-8234-1C579F33E27A}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gio", "gio.vcproj", "{F3D1583C-5613-4809-BD98-7CC1C1276F92}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+		{F172EFFC-E30F-4593-809E-DB2024B1E753} = {F172EFFC-E30F-4593-809E-DB2024B1E753}

+		{4214047C-F5C1-40B3-8369-5DCED8C32770} = {4214047C-F5C1-40B3-8369-5DCED8C32770}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gspawn-win32-helper", "gspawn-win32-helper.vcproj", "{289240E7-E167-47CE-A20C-58D852E520BA}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gspawn-win32-helper-console", "gspawn-win32-helper-console.vcproj", "{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Win32 = Debug|Win32

+		Release|Win32 = Release|Win32

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Win32.ActiveCfg = Debug|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Win32.Build.0 = Debug|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Win32.ActiveCfg = Release|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Win32.Build.0 = Release|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Win32.ActiveCfg = Debug|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Win32.Build.0 = Debug|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Win32.ActiveCfg = Release|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Win32.Build.0 = Release|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Win32.ActiveCfg = Debug|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Win32.Build.0 = Debug|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Win32.ActiveCfg = Release|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Win32.Build.0 = Release|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Win32.ActiveCfg = Debug|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Win32.Build.0 = Debug|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Win32.ActiveCfg = Release|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Win32.Build.0 = Release|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Win32.ActiveCfg = Debug|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Win32.Build.0 = Debug|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Win32.ActiveCfg = Release|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Win32.Build.0 = Release|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Debug|Win32.ActiveCfg = Debug|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Debug|Win32.Build.0 = Debug|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Release|Win32.ActiveCfg = Release|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Release|Win32.Build.0 = Release|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Debug|Win32.ActiveCfg = Debug|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Debug|Win32.Build.0 = Debug|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Release|Win32.ActiveCfg = Release|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Release|Win32.Build.0 = Release|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Debug|Win32.ActiveCfg = Debug|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Debug|Win32.Build.0 = Debug|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Release|Win32.ActiveCfg = Release|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Release|Win32.Build.0 = Release|Win32

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/build/win32/vs8/glib.vcproj b/build/win32/vs8/glib.vcproj
new file mode 100644
index 0000000..00d6eff
--- /dev/null
+++ b/build/win32/vs8/glib.vcproj
@@ -0,0 +1,605 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="glib"
+	ProjectGUID="{12BCA020-EABF-429E-876A-A476BC9C10C0}"
+	RootNamespace="glib"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\config.h goto DONE_CONFIG_H&#x0D;&#x0A;copy ..\..\..\config.h.win32 ..\..\..\config.h&#x0D;&#x0A;:DONE_CONFIG_H&#x0D;&#x0A;if exist ..\..\..\glibconfig.h goto DONE_GLIBCONFIG_H&#x0D;&#x0A;copy ..\..\..\glibconfig.h.win32 ..\..\..\glibconfig.h&#x0D;&#x0A;:DONE_GLIBCONFIG_H&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/proxy-libintl-20080418/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;GLIB_COMPILATION;DLL_EXPORT;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib\&quot;;G_ENABLE_DEBUG;G_DISABLE_DEPRECATED;PCRE_STATIC;LINK_SIZE=2;MAX_NAME_SIZE=32;MAX_NAME_COUNT=10000;NEWLINE=-1;POSIX_MALLOC_THRESHOLD=10;MATCH_LIMIT=10000000;MATCH_LIMIT_RECURSION=10000000"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib"
+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../../dependencies/proxy-libintl-20080418/lib"
+				ModuleDefinitionFile="../../../glib/glib.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\config.h goto GLIB_CONFIG&#x0D;&#x0A;copy ..\..\..\config.h.win32 ..\..\..\config.h&#x0D;&#x0A;:GLIB_CONFIG&#x0D;&#x0A;if exist ..\..\..\glibconfig.h\ goto END&#x0D;&#x0A;copy ..\..\..\glibconfig.h.win32 ..\..\..\glibconfig.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/proxy-libintl-20080418/include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GLIB_COMPILATION;DLL_EXPORT;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib\&quot;;G_DISABLE_DEPRECATED;PCRE_STATIC;LINK_SIZE=2;MAX_NAME_SIZE=32;MAX_NAME_COUNT=10000;NEWLINE=-1;POSIX_MALLOC_THRESHOLD=10;MATCH_LIMIT=10000000;MATCH_LIMIT_RECURSION=10000000"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib"
+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../../dependencies/proxy-libintl-20080418/lib"
+				ModuleDefinitionFile="../../../glib/glib.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\glib\garray.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gasyncqueue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gatomic.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gbacktrace.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gbase64.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gbookmarkfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gcache.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gchecksum.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gcompletion.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gconvert.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gdataset.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gdate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gdir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gerror.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gfileutils.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\ghash.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\ghook.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\giochannel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\giowin32.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gkeyfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\glist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmain.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmappedfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmarkup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmem.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmessages.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gnode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\goption.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gpattern.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gprimes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gprintf.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gqsort.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gqueue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\grand.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gregex.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\grel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gscanner.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gsequence.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gshell.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gslice.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gslist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gspawn-win32.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gstdio.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gstrfuncs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gstring.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gtestutils.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gthread.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gthreadpool.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gtimer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gtree.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gunibreak.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gunicollate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gunidecomp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\guniprop.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gurifuncs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gutf8.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gutils.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gwin32.c"
+				>
+			</File>
+			<Filter
+				Name="libcharset"
+				>
+				<File
+					RelativePath="..\..\..\glib\libcharset\localcharset.c"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions="LIBDIR=&quot;/irrelevant/lib&quot;"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions="LIBDIR=&quot;/irrelevant/lib&quot;"
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="gnulib"
+				>
+				<File
+					RelativePath="..\..\..\glib\gnulib\asnprintf.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\printf-args.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\printf-parse.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\printf.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\vasnprintf.c"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="pcre"
+				>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_chartables.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_compile.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_config.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_dfa_exec.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_exec.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_fullinfo.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_get.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_globals.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_info.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_maketables.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_newline.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_ord2utf8.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_refcount.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_study.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_tables.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_try_flipped.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_ucp_searchfuncs.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_valid_utf8.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_version.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_xclass.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\glib\glib.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\glib.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\glib.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating glib.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/glib.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF -DG_GNUC_FORMAT=;G_GNUC_FORMAT &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/glib.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/glib.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating glib.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/glib.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF -DG_GNUC_FORMAT=;G_GNUC_FORMAT &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/glib.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/glib.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs8/gmodule.vcproj b/build/win32/vs8/gmodule.vcproj
new file mode 100644
index 0000000..b6e0e8c
--- /dev/null
+++ b/build/win32/vs8/gmodule.vcproj
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="windows-1251"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="8,00"

+	Name="gmodule"

+	ProjectGUID="{4214047C-F5C1-40B3-8369-5DCED8C32770}"

+	RootNamespace="gmodule"

+	Keyword="Win32Proj"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="2"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+				CommandLine="if exist ..\..\..\gmodule\gmoduleconf.h goto END&#x0D;&#x0A;copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h&#x0D;&#x0A;:END&#x0D;&#x0A;"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../../glib;../../.."

+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GModule\&quot;;G_DISABLE_DEPRECATED"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"

+				LinkIncremental="2"

+				ModuleDefinitionFile="../../../gmodule/gmodule.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="2"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+				CommandLine="if exist ..\..\..\gmodule\gmoduleconf.h goto END&#x0D;&#x0A;copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h&#x0D;&#x0A;:END&#x0D;&#x0A;"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../../glib;../../.."

+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GModule\&quot;;G_DISABLE_DEPRECATED"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"

+				LinkIncremental="1"

+				ModuleDefinitionFile="../../../gmodule/gmodule.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\gmodule\gmodule.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+			<File

+				RelativePath="..\..\..\gmodule\gmodule.def"

+				>

+			</File>

+			<File

+				RelativePath="..\..\..\gmodule\gmodule.rc"

+				>

+			</File>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs8/gobject.vcproj b/build/win32/vs8/gobject.vcproj
new file mode 100644
index 0000000..21c6079
--- /dev/null
+++ b/build/win32/vs8/gobject.vcproj
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="gobject"
+	ProjectGUID="{F172EFFC-E30F-4593-809E-DB2024B1E753}"
+	RootNamespace="gobject"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../..,../../../glib"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;GOBJECT_COMPILATION;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib-GObject\&quot;;G_DISABLE_DEPRECATED"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"
+				LinkIncremental="2"
+				ModuleDefinitionFile="../../../gobject/gobject.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="../../..,../../../glib"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GOBJECT_COMPILATION;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib-GObject\&quot;;G_DISABLE_DEPRECATED"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"
+				LinkIncremental="1"
+				ModuleDefinitionFile="../../../gobject/gobject.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\gobject\gboxed.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gclosure.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\genums.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gparam.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gparamspecs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gsignal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gsourceclosure.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gtype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gtypemodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gtypeplugin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvalue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvaluearray.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvaluetransform.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvaluetypes.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\gobject\gobject.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gobject.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gobject.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gobject.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gobject.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gobject.def&quot;"
+						Outputs="$(InputDir)/gobject.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gobject.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gobject.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gobject.def&quot;"
+						Outputs="$(InputDir)/gobject.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs8/gspawn-win32-helper-console.vcproj b/build/win32/vs8/gspawn-win32-helper-console.vcproj
new file mode 100644
index 0000000..5bf95af
--- /dev/null
+++ b/build/win32/vs8/gspawn-win32-helper-console.vcproj
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="8,00"

+	Name="gspawn-win32-helper-console"

+	ProjectGUID="{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}"

+	RootNamespace="gspawnwin32helperconsole"

+	Keyword="Win32Proj"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/proxy-libintl-20080418/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/proxy-libintl-20080418/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\glib\gspawn-win32-helper-console.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs8/gspawn-win32-helper.vcproj b/build/win32/vs8/gspawn-win32-helper.vcproj
new file mode 100644
index 0000000..6e34dbc
--- /dev/null
+++ b/build/win32/vs8/gspawn-win32-helper.vcproj
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="8,00"

+	Name="gspawn-win32-helper"

+	ProjectGUID="{289240E7-E167-47CE-A20C-58D852E520BA}"

+	RootNamespace="gspawnwin32helper"

+	Keyword="Win32Proj"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/proxy-libintl-20080418/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/proxy-libintl-20080418/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\glib\gspawn-win32-helper.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs8/gthread.vcproj b/build/win32/vs8/gthread.vcproj
new file mode 100644
index 0000000..db73a4f
--- /dev/null
+++ b/build/win32/vs8/gthread.vcproj
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="windows-1251"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="8,00"

+	Name="gthread"

+	ProjectGUID="{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"

+	RootNamespace="gthread"

+	Keyword="Win32Proj"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="2"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..,../../../glib"

+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GThread\&quot;;G_DISABLE_DEPRECATED"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"

+				LinkIncremental="2"

+				ModuleDefinitionFile="../../../gthread/gthread.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)\bin"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\obj"

+			ConfigurationType="2"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..,../../../glib"

+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GThread\&quot;;G_DISABLE_DEPRECATED"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\lib$(ProjectName)-2.0-0-vs8.dll"

+				LinkIncremental="1"

+				ModuleDefinitionFile="../../../gthread/gthread.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0-vs8.lib"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\gthread\gthread-impl.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+			<File

+				RelativePath="..\..\..\gthread\gthread.def"

+				>

+			</File>

+			<File

+				RelativePath="..\..\..\gthread\gthread.rc"

+				>

+			</File>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs9/Makefile.am b/build/win32/vs9/Makefile.am
new file mode 100644
index 0000000..a2ffdb6
--- /dev/null
+++ b/build/win32/vs9/Makefile.am
@@ -0,0 +1,12 @@
+EXTRA_DIST = \
+	README \
+	gio.vcproj \
+	glib-genmarshal.vcproj \
+	glib.sln \
+	glib.vcproj \
+	gmodule.vcproj \
+	gobject.vcproj \
+	gspawn-win32-helper-console.vcproj \
+	gspawn-win32-helper.vcproj \
+	gthread.vcproj \
+	install.vcproj
diff --git a/build/win32/vs9/README b/build/win32/vs9/README
new file mode 100644
index 0000000..4576aae
--- /dev/null
+++ b/build/win32/vs9/README
@@ -0,0 +1,4 @@
+Note that this is mostly experimental and not really maintained. It
+seems that the OAH project at https://code.launchpad.net/oah might be
+a better choice if you want to start building GLib (and more of the
+GTK+ stack) with Visual Studio.
diff --git a/build/win32/vs9/gio.vcproj b/build/win32/vs9/gio.vcproj
new file mode 100644
index 0000000..e3e1eaf
--- /dev/null
+++ b/build/win32/vs9/gio.vcproj
@@ -0,0 +1,672 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="gio"
+	ProjectGUID="{F3D1583C-5613-4809-BD98-7CC1C1276F92}"
+	RootNamespace="gio"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gio,../../..,../../../glib,../../../gmodule,../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;G_LOG_DOMAIN=\&quot;GLib-GIO\&quot;;G_DISABLE_DEPRECATED;GIO_COMPILATION;GIO_MODULE_DIR=\&quot;gio/modules\&quot;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib shlwapi.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../gio/gio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gio,../../..,../../../glib,../../../gmodule,../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;G_LOG_DOMAIN=\&quot;GLib-GIO\&quot;;G_DISABLE_DEPRECATED;GIO_COMPILATION;GIO_MODULE_DIR=\&quot;gio/modules\&quot;"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib shlwapi.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../gio/gio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gio,../../..,../../../glib,../../../gmodule,../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;G_LOG_DOMAIN=\&quot;GLib-GIO\&quot;;G_DISABLE_DEPRECATED;GIO_COMPILATION;GIO_MODULE_DIR=\&quot;gio/modules\&quot;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib shlwapi.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../gio/gio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gio,../../..,../../../glib,../../../gmodule,../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;G_LOG_DOMAIN=\&quot;GLib-GIO\&quot;;G_DISABLE_DEPRECATED;GIO_COMPILATION;GIO_MODULE_DIR=\&quot;gio/modules\&quot;"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib shlwapi.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../gio/gio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\gio\gappinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gasynchelper.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gasyncresult.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gbufferedinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gbufferedoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gcancellable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gcontenttype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdatainputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdataoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdrive.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gdummyfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gemblem.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gemblemedicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileattribute.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileenumerator.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilenamecompleter.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfileoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilterinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gfilteroutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\ginputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gio-marshal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioaliasdef.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioenumtypes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioerror.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\giomodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gioscheduler.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gloadableicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocaldirectorymonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileenumerator.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfilemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalfileoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\glocalvfs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmemoryinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmemoryoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmount.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gmountoperation.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gnativevolumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\goutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gpollfilemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gseekable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gsimpleasyncresult.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gthemedicon.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gunionvolumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gvfs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gvolume.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gvolumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gwin32appinfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwin32directorymonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gwin32mount.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gwin32volumemonitor.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpfileinputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpfileoutputstream.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\win32\gwinhttpvfs.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\gio\gio.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gio\gio.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gio.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gio.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gio.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gio.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gio.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gio.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gio.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gio.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gio.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gio.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gio.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gio.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gio.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gio.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gio.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gio.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs9/glib-genmarshal.vcproj b/build/win32/vs9/glib-genmarshal.vcproj
new file mode 100644
index 0000000..48fe33b
--- /dev/null
+++ b/build/win32/vs9/glib-genmarshal.vcproj
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="windows-1251"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="9,00"

+	Name="glib-genmarshal"

+	ProjectGUID="{BD12E835-5C52-4E5D-8234-1C579F33E27A}"

+	RootNamespace="glibgenmarshal"

+	Keyword="Win32Proj"

+	TargetFrameworkVersion="131072"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+		<Platform

+			Name="x64"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib"

+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="1"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib"

+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib"

+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="1"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib"

+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\gobject\glib-genmarshal.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs9/glib.sln b/build/win32/vs9/glib.sln
new file mode 100644
index 0000000..73056ad
--- /dev/null
+++ b/build/win32/vs9/glib.sln
@@ -0,0 +1,151 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib", "glib.vcproj", "{12BCA020-EABF-429E-876A-A476BC9C10C0}"

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gmodule", "gmodule.vcproj", "{4214047C-F5C1-40B3-8369-5DCED8C32770}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gobject", "gobject.vcproj", "{F172EFFC-E30F-4593-809E-DB2024B1E753}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gthread", "gthread.vcproj", "{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glib-genmarshal", "glib-genmarshal.vcproj", "{BD12E835-5C52-4E5D-8234-1C579F33E27A}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gio", "gio.vcproj", "{F3D1583C-5613-4809-BD98-7CC1C1276F92}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+		{4214047C-F5C1-40B3-8369-5DCED8C32770} = {4214047C-F5C1-40B3-8369-5DCED8C32770}

+		{F172EFFC-E30F-4593-809E-DB2024B1E753} = {F172EFFC-E30F-4593-809E-DB2024B1E753}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gspawn-win32-helper", "gspawn-win32-helper.vcproj", "{289240E7-E167-47CE-A20C-58D852E520BA}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gspawn-win32-helper-console", "gspawn-win32-helper-console.vcproj", "{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testglib", "testglib.vcproj", "{64E09909-5599-40C0-B808-27F55F7B823C}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+	EndProjectSection

+EndProject

+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "install", "install.vcproj", "{2093D218-190E-4194-9421-3BA7CBF33B10}"

+	ProjectSection(ProjectDependencies) = postProject

+		{12BCA020-EABF-429E-876A-A476BC9C10C0} = {12BCA020-EABF-429E-876A-A476BC9C10C0}

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A} = {BD12E835-5C52-4E5D-8234-1C579F33E27A}

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92} = {F3D1583C-5613-4809-BD98-7CC1C1276F92}

+		{4214047C-F5C1-40B3-8369-5DCED8C32770} = {4214047C-F5C1-40B3-8369-5DCED8C32770}

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074} = {E40E8A7E-7CAE-4659-9B8B-BC38898E3074}

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C} = {C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}

+		{289240E7-E167-47CE-A20C-58D852E520BA} = {289240E7-E167-47CE-A20C-58D852E520BA}

+		{F172EFFC-E30F-4593-809E-DB2024B1E753} = {F172EFFC-E30F-4593-809E-DB2024B1E753}

+	EndProjectSection

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Win32 = Debug|Win32

+		Debug|x64 = Debug|x64

+		Release|Win32 = Release|Win32

+		Release|x64 = Release|x64

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Win32.ActiveCfg = Debug|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|Win32.Build.0 = Debug|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|x64.ActiveCfg = Debug|x64

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Debug|x64.Build.0 = Debug|x64

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Win32.ActiveCfg = Release|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|Win32.Build.0 = Release|Win32

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|x64.ActiveCfg = Release|x64

+		{12BCA020-EABF-429E-876A-A476BC9C10C0}.Release|x64.Build.0 = Release|x64

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Win32.ActiveCfg = Debug|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|Win32.Build.0 = Debug|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|x64.ActiveCfg = Debug|x64

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Debug|x64.Build.0 = Debug|x64

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Win32.ActiveCfg = Release|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|Win32.Build.0 = Release|Win32

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|x64.ActiveCfg = Release|x64

+		{4214047C-F5C1-40B3-8369-5DCED8C32770}.Release|x64.Build.0 = Release|x64

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Win32.ActiveCfg = Debug|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|Win32.Build.0 = Debug|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|x64.ActiveCfg = Debug|x64

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Debug|x64.Build.0 = Debug|x64

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Win32.ActiveCfg = Release|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|Win32.Build.0 = Release|Win32

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|x64.ActiveCfg = Release|x64

+		{F172EFFC-E30F-4593-809E-DB2024B1E753}.Release|x64.Build.0 = Release|x64

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Win32.ActiveCfg = Debug|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|Win32.Build.0 = Debug|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|x64.ActiveCfg = Debug|x64

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Debug|x64.Build.0 = Debug|x64

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Win32.ActiveCfg = Release|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|Win32.Build.0 = Release|Win32

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|x64.ActiveCfg = Release|x64

+		{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}.Release|x64.Build.0 = Release|x64

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Win32.ActiveCfg = Debug|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|Win32.Build.0 = Debug|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|x64.ActiveCfg = Debug|x64

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Debug|x64.Build.0 = Debug|x64

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Win32.ActiveCfg = Release|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|Win32.Build.0 = Release|Win32

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|x64.ActiveCfg = Release|x64

+		{BD12E835-5C52-4E5D-8234-1C579F33E27A}.Release|x64.Build.0 = Release|x64

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Debug|Win32.ActiveCfg = Debug|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Debug|Win32.Build.0 = Debug|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Debug|x64.ActiveCfg = Debug|x64

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Debug|x64.Build.0 = Debug|x64

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Release|Win32.ActiveCfg = Release|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Release|Win32.Build.0 = Release|Win32

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Release|x64.ActiveCfg = Release|x64

+		{F3D1583C-5613-4809-BD98-7CC1C1276F92}.Release|x64.Build.0 = Release|x64

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Debug|Win32.ActiveCfg = Debug|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Debug|Win32.Build.0 = Debug|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Debug|x64.ActiveCfg = Debug|x64

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Debug|x64.Build.0 = Debug|x64

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Release|Win32.ActiveCfg = Release|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Release|Win32.Build.0 = Release|Win32

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Release|x64.ActiveCfg = Release|x64

+		{289240E7-E167-47CE-A20C-58D852E520BA}.Release|x64.Build.0 = Release|x64

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Debug|Win32.ActiveCfg = Debug|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Debug|Win32.Build.0 = Debug|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Debug|x64.ActiveCfg = Debug|x64

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Debug|x64.Build.0 = Debug|x64

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Release|Win32.ActiveCfg = Release|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Release|Win32.Build.0 = Release|Win32

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Release|x64.ActiveCfg = Release|x64

+		{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}.Release|x64.Build.0 = Release|x64

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Debug|Win32.ActiveCfg = Debug|Win32

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Debug|Win32.Build.0 = Debug|Win32

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Debug|x64.ActiveCfg = Debug|x64

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Debug|x64.Build.0 = Debug|x64

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Release|Win32.ActiveCfg = Release|Win32

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Release|Win32.Build.0 = Release|Win32

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Release|x64.ActiveCfg = Release|x64

+		{64E09909-5599-40C0-B808-27F55F7B823C}.Release|x64.Build.0 = Release|x64

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Debug|Win32.ActiveCfg = Debug|Win32

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Debug|Win32.Build.0 = Debug|Win32

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Debug|x64.ActiveCfg = Debug|x64

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Debug|x64.Build.0 = Debug|x64

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Release|Win32.ActiveCfg = Release|Win32

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Release|Win32.Build.0 = Release|Win32

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Release|x64.ActiveCfg = Release|x64

+		{2093D218-190E-4194-9421-3BA7CBF33B10}.Release|x64.Build.0 = Release|x64

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/build/win32/vs9/glib.vcproj b/build/win32/vs9/glib.vcproj
new file mode 100644
index 0000000..db3ceff
--- /dev/null
+++ b/build/win32/vs9/glib.vcproj
@@ -0,0 +1,809 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="glib"
+	ProjectGUID="{12BCA020-EABF-429E-876A-A476BC9C10C0}"
+	RootNamespace="glib"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\config.h goto DONE_CONFIG_H&#x0D;&#x0A;copy ..\..\..\config.h.win32 ..\..\..\config.h&#x0D;&#x0A;:DONE_CONFIG_H&#x0D;&#x0A;if exist ..\..\..\glibconfig.h goto DONE_GLIBCONFIG_H&#x0D;&#x0A;copy ..\..\..\glibconfig.h.win32 ..\..\..\glibconfig.h&#x0D;&#x0A;:DONE_GLIBCONFIG_H&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;GLIB_COMPILATION;DLL_EXPORT;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib\&quot;;G_ENABLE_DEBUG;G_DISABLE_DEPRECATED;PCRE_STATIC;LINK_SIZE=2;MAX_NAME_SIZE=32;MAX_NAME_COUNT=10000;NEWLINE=-1;POSIX_MALLOC_THRESHOLD=10;MATCH_LIMIT=10000000;MATCH_LIMIT_RECURSION=10000000"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../glib/glib.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\config.h goto DONE_CONFIG_H&#x0D;&#x0A;copy ..\..\..\config.h.win32 ..\..\..\config.h&#x0D;&#x0A;:DONE_CONFIG_H&#x0D;&#x0A;if exist ..\..\..\glibconfig.h goto DONE_GLIBCONFIG_H&#x0D;&#x0A;copy ..\..\..\glibconfig.h.win32 ..\..\..\glibconfig.h&#x0D;&#x0A;:DONE_GLIBCONFIG_H&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;GLIB_COMPILATION;DLL_EXPORT;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib\&quot;;G_ENABLE_DEBUG;G_DISABLE_DEPRECATED;PCRE_STATIC;LINK_SIZE=2;MAX_NAME_SIZE=32;MAX_NAME_COUNT=10000;NEWLINE=-1;POSIX_MALLOC_THRESHOLD=10;MATCH_LIMIT=10000000;MATCH_LIMIT_RECURSION=10000000"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../glib/glib.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\config.h goto GLIB_CONFIG&#x0D;&#x0A;copy ..\..\..\config.h.win32 ..\..\..\config.h&#x0D;&#x0A;:GLIB_CONFIG&#x0D;&#x0A;if exist ..\..\..\glibconfig.h\ goto END&#x0D;&#x0A;copy ..\..\..\glibconfig.h.win32 ..\..\..\glibconfig.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GLIB_COMPILATION;DLL_EXPORT;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib\&quot;;G_DISABLE_DEPRECATED;PCRE_STATIC;LINK_SIZE=2;MAX_NAME_SIZE=32;MAX_NAME_COUNT=10000;NEWLINE=-1;POSIX_MALLOC_THRESHOLD=10;MATCH_LIMIT=10000000;MATCH_LIMIT_RECURSION=10000000"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../glib/glib.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\config.h goto GLIB_CONFIG&#x0D;&#x0A;copy ..\..\..\config.h.win32 ..\..\..\config.h&#x0D;&#x0A;:GLIB_CONFIG&#x0D;&#x0A;if exist ..\..\..\glibconfig.h\ goto END&#x0D;&#x0A;copy ..\..\..\glibconfig.h.win32 ..\..\..\glibconfig.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GLIB_COMPILATION;DLL_EXPORT;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib\&quot;;G_DISABLE_DEPRECATED;PCRE_STATIC;LINK_SIZE=2;MAX_NAME_SIZE=32;MAX_NAME_COUNT=10000;NEWLINE=-1;POSIX_MALLOC_THRESHOLD=10;MATCH_LIMIT=10000000;MATCH_LIMIT_RECURSION=10000000"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="intl.lib Ws2_32.lib"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/lib"
+				ModuleDefinitionFile="../../../glib/glib.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\glib\garray.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gasyncqueue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gatomic.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gbacktrace.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gbase64.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gbookmarkfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gcache.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gchecksum.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gcompletion.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gconvert.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gdataset.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gdate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gdir.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gerror.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gfileutils.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\ghash.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\ghook.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\giochannel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\giowin32.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gkeyfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\glist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmain.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmappedfile.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmarkup.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmem.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gmessages.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gnode.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\goption.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gpattern.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gprimes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gprintf.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gqsort.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gqueue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\grand.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gregex.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\grel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gscanner.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gsequence.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gshell.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gslice.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gslist.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gspawn-win32.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gstdio.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gstrfuncs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gstring.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gtestutils.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gthread.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gthreadpool.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gtimer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gtree.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gunibreak.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gunicollate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gunidecomp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\guniprop.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gurifuncs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gutf8.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gutils.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\gwin32.c"
+				>
+			</File>
+			<Filter
+				Name="libcharset"
+				>
+				<File
+					RelativePath="..\..\..\glib\libcharset\localcharset.c"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions="LIBDIR=&quot;/irrelevant/lib&quot;"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions="LIBDIR=&quot;/irrelevant/lib&quot;"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions="LIBDIR=&quot;/irrelevant/lib&quot;"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|x64"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							PreprocessorDefinitions="LIBDIR=&quot;/irrelevant/lib&quot;"
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="gnulib"
+				>
+				<File
+					RelativePath="..\..\..\glib\gnulib\asnprintf.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\printf-args.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\printf-parse.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\printf.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\gnulib\vasnprintf.c"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="pcre"
+				>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_chartables.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_compile.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_config.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_dfa_exec.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_exec.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_fullinfo.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_get.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_globals.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_info.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_maketables.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_newline.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_ord2utf8.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_refcount.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_study.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_tables.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_try_flipped.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_ucp_searchfuncs.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_valid_utf8.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_version.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\glib\pcre\pcre_xclass.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\glib\glib.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\glib.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\glib\glib.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating glib.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/glib.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF -DG_GNUC_FORMAT=;G_GNUC_FORMAT &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/glib.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/glib.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating glib.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/glib.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF -DG_GNUC_FORMAT=;G_GNUC_FORMAT &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/glib.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/glib.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating glib.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/glib.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF -DG_GNUC_FORMAT=;G_GNUC_FORMAT &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/glib.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/glib.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating glib.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/glib.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF -DG_GNUC_FORMAT=;G_GNUC_FORMAT &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/glib.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/glib.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs9/gmodule.vcproj b/build/win32/vs9/gmodule.vcproj
new file mode 100644
index 0000000..d513f1c
--- /dev/null
+++ b/build/win32/vs9/gmodule.vcproj
@@ -0,0 +1,425 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="gmodule"
+	ProjectGUID="{4214047C-F5C1-40B3-8369-5DCED8C32770}"
+	RootNamespace="gmodule"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\gmodule\gmoduleconf.h goto END&#x0D;&#x0A;copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../glib;../../.."
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GModule\&quot;;G_DISABLE_DEPRECATED"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				ModuleDefinitionFile="../../../gmodule/gmodule.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\gmodule\gmoduleconf.h goto END&#x0D;&#x0A;copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../glib;../../.."
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GModule\&quot;;G_DISABLE_DEPRECATED"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				ModuleDefinitionFile="../../../gmodule/gmodule.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\gmodule\gmoduleconf.h goto END&#x0D;&#x0A;copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../glib;../../.."
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GModule\&quot;;G_DISABLE_DEPRECATED"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				ModuleDefinitionFile="../../../gmodule/gmodule.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\..\gmodule\gmoduleconf.h goto END&#x0D;&#x0A;copy ..\..\..\gmodule\gmoduleconf.h.win32 ..\..\..\gmodule\gmoduleconf.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../glib;../../.."
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GModule\&quot;;G_DISABLE_DEPRECATED"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				CompileAs="1"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				ModuleDefinitionFile="../../../gmodule/gmodule.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\gmodule\gmodule.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\gmodule\gmodule.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gmodule\gmodule.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gmodule\gmodule.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gmodule.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gmodule.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gmodule.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gmodule.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gmodule.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gmodule.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gmodule.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gmodule.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gmodule.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gmodule.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gmodule.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gmodule.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gmodule.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gmodule.def&quot; &amp;&amp; cl /EP -DG_OS_WIN32 &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gmodule.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gmodule.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs9/gobject.vcproj b/build/win32/vs9/gobject.vcproj
new file mode 100644
index 0000000..16ad723
--- /dev/null
+++ b/build/win32/vs9/gobject.vcproj
@@ -0,0 +1,477 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="gobject"
+	ProjectGUID="{F172EFFC-E30F-4593-809E-DB2024B1E753}"
+	RootNamespace="gobject"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../..,../../../glib"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;GOBJECT_COMPILATION;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib-GObject\&quot;;G_DISABLE_DEPRECATED"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				ModuleDefinitionFile="../../../gobject/gobject.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="../../..,../../../glib"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GOBJECT_COMPILATION;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib-GObject\&quot;;G_DISABLE_DEPRECATED"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				ModuleDefinitionFile="../../../gobject/gobject.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../..,../../../glib"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;GOBJECT_COMPILATION;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib-GObject\&quot;;G_DISABLE_DEPRECATED"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="2"
+				ModuleDefinitionFile="../../../gobject/gobject.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TargetEnvironment="3"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				WholeProgramOptimization="false"
+				AdditionalIncludeDirectories="../../..,../../../glib"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GOBJECT_COMPILATION;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;Glib-GObject\&quot;;G_DISABLE_DEPRECATED"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				ForcedIncludeFiles="msvc_recommended_pragmas.h"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"
+				LinkIncremental="1"
+				ModuleDefinitionFile="../../../gobject/gobject.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				LinkTimeCodeGeneration="0"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\gobject\gboxed.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gclosure.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\genums.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gobject.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gparam.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gparamspecs.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gsignal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gsourceclosure.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gtype.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gtypemodule.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gtypeplugin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvalue.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvaluearray.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvaluetransform.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gvaluetypes.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\gobject\gobject.def"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gobject.rc"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\gobject\gobject.symbols"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gobject.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gobject.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gobject.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gobject.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gobject.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gobject.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gobject.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gobject.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gobject.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gobject.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gobject.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gobject.def"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|x64"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+						Description="Generating gobject.def"
+						CommandLine="echo EXPORTS &gt; &quot;$(InputDir)/gobject.def&quot; &amp;&amp; cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES -DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= -DG_GNUC_PRINTF=;G_GNUC_PRINTF &quot;$(InputPath)&quot; &gt;&gt; &quot;$(InputDir)/gobject.def&quot;&#x0D;&#x0A;"
+						Outputs="$(InputDir)/gobject.def"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/build/win32/vs9/gspawn-win32-helper-console.vcproj b/build/win32/vs9/gspawn-win32-helper-console.vcproj
new file mode 100644
index 0000000..4800108
--- /dev/null
+++ b/build/win32/vs9/gspawn-win32-helper-console.vcproj
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="9,00"

+	Name="gspawn-win32-helper-console"

+	ProjectGUID="{E40E8A7E-7CAE-4659-9B8B-BC38898E3074}"

+	RootNamespace="gspawnwin32helperconsole"

+	Keyword="Win32Proj"

+	TargetFrameworkVersion="131072"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+		<Platform

+			Name="x64"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\gspawn-win64-helper-console.exe"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\gspawn-win64-helper-console.exe"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\glib\gspawn-win32-helper-console.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs9/gspawn-win32-helper.vcproj b/build/win32/vs9/gspawn-win32-helper.vcproj
new file mode 100644
index 0000000..65c9add
--- /dev/null
+++ b/build/win32/vs9/gspawn-win32-helper.vcproj
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="9,00"

+	Name="gspawn-win32-helper"

+	ProjectGUID="{289240E7-E167-47CE-A20C-58D852E520BA}"

+	RootNamespace="gspawnwin32helper"

+	Keyword="Win32Proj"

+	TargetFrameworkVersion="131072"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+		<Platform

+			Name="x64"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\gspawn-win64-helper.exe"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\gspawn-win64-helper.exe"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\glib\gspawn-win32-helper.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs9/gthread.vcproj b/build/win32/vs9/gthread.vcproj
new file mode 100644
index 0000000..4da7edd
--- /dev/null
+++ b/build/win32/vs9/gthread.vcproj
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="windows-1251"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="9,00"

+	Name="gthread"

+	ProjectGUID="{C8AFB8C3-FFFD-460F-BC13-9AC25D7B117C}"

+	RootNamespace="gthread"

+	Keyword="Win32Proj"

+	TargetFrameworkVersion="131072"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+		<Platform

+			Name="x64"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="2"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..,../../../glib"

+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GThread\&quot;;G_DISABLE_DEPRECATED"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"

+				LinkIncremental="2"

+				ModuleDefinitionFile="../../../gthread/gthread.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="2"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..,../../../glib"

+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GThread\&quot;;G_DISABLE_DEPRECATED"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"

+				LinkIncremental="1"

+				ModuleDefinitionFile="../../../gthread/gthread.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="2"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..,../../../glib"

+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GThread\&quot;;G_DISABLE_DEPRECATED"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"

+				LinkIncremental="2"

+				ModuleDefinitionFile="../../../gthread/gthread.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="2"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..,../../../glib"

+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;HAVE_CONFIG_H;G_LOG_DOMAIN=\&quot;GThread\&quot;;G_DISABLE_DEPRECATED"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				OutputFile="$(OutDir)\$(ProjectName)-2-vs9.dll"

+				LinkIncremental="1"

+				ModuleDefinitionFile="../../../gthread/gthread.def"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				ImportLibrary="$(TargetDir)$(ProjectName)-2.0.lib"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\gthread\gthread-impl.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+			<File

+				RelativePath="..\..\..\gthread\gthread.def"

+				>

+			</File>

+			<File

+				RelativePath="..\..\..\gthread\gthread.rc"

+				>

+			</File>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs9/install.vcproj b/build/win32/vs9/install.vcproj
new file mode 100644
index 0000000..a54ff34
--- /dev/null
+++ b/build/win32/vs9/install.vcproj
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="9,00"

+	Name="install"

+	ProjectGUID="{2093D218-190E-4194-9421-3BA7CBF33B10}"

+	RootNamespace="install"

+	Keyword="Win32Proj"

+	TargetFrameworkVersion="131072"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+		<Platform

+			Name="x64"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="..\..\..\..\dependencies\$(PlatformName)\vs9"

+			IntermediateDirectory="$(ConfigurationName)"

+			ConfigurationType="10"

+			CharacterSet="2"

+			DeleteExtensionsOnClean=""

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+				CommandLine="mkdir $(OutDir)\bin&#x0D;&#x0A;copy $(SolutionDir)$(ConfigurationName)\*-2-vs9.dll $(OutDir)\bin&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glib.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\gmodule\gmodule.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\glib-object.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\galloca.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\garray.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gasyncqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gatomic.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbacktrace.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbase64.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbookmarkfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcache.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gchecksum.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcompletion.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gconvert.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdataset.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdate.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdir.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gerror.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gfileutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghash.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghook.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n-lib.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\giochannel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gkeyfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmacros.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmain.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmappedfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmarkup.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmem.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmessages.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gnode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\goption.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gpattern.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprimes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprintf.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqsort.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gquark.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grand.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gregex.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gscanner.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gsequence.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gshell.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslice.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gspawn.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstdio.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstrfuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstring.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtestutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthread.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthreadpool.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtimer.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtree.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtypes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gunicode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gurifuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gwin32.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gboxed.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\genums.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gmarshal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobject.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobjectnotifyqueue.c $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparam.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparamspecs.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsignal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsourceclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtype.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypemodule.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypeplugin.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvalue.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluearray.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluecollector.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluetypes.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gappinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcancellable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcontenttype.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdatainputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdataoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdrive.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblem.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfile.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileattribute.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileenumerator.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilenamecompleter.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilterinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilteroutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\ginputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gio.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenums.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenumtypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioerror.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giomodule.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioscheduler.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giotypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gloadableicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmount.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmountoperation.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gnativevolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\goutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gseekable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gsimpleasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gthemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvfs.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolume.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;copy ..\..\..\glibconfig.h $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;rem&#x0D;&#x0A;copy $(SolutionDir)$(ConfigurationName)\*-2.0.lib $(OutDir)\lib&#x0D;&#x0A;"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="..\..\..\..\dependencies\$(PlatformName)\vs9"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="10"

+			CharacterSet="2"

+			DeleteExtensionsOnClean=""

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+				CommandLine="mkdir $(OutDir)\bin&#x0D;&#x0A;copy $(SolutionDir)$(ConfigurationName)\*-2-vs9.dll $(OutDir)\bin&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glib.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\gmodule\gmodule.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\glib-object.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\galloca.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\garray.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gasyncqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gatomic.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbacktrace.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbase64.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbookmarkfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcache.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gchecksum.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcompletion.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gconvert.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdataset.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdate.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdir.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gerror.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gfileutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghash.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghook.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n-lib.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\giochannel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gkeyfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmacros.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmain.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmappedfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmarkup.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmem.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmessages.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gnode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\goption.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gpattern.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprimes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprintf.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqsort.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gquark.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grand.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gregex.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gscanner.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gsequence.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gshell.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslice.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gspawn.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstdio.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstrfuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstring.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtestutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthread.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthreadpool.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtimer.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtree.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtypes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gunicode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gurifuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gwin32.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gboxed.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\genums.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gmarshal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobject.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobjectnotifyqueue.c $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparam.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparamspecs.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsignal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsourceclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtype.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypemodule.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypeplugin.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvalue.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluearray.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluecollector.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluetypes.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gappinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcancellable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcontenttype.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdatainputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdataoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdrive.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblem.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfile.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileattribute.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileenumerator.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilenamecompleter.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilterinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilteroutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\ginputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gio.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenums.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenumtypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioerror.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giomodule.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioscheduler.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giotypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gloadableicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmount.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmountoperation.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gnativevolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\goutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gseekable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gsimpleasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gthemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvfs.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolume.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;copy ..\..\..\glibconfig.h $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;rem&#x0D;&#x0A;copy $(SolutionDir)$(PlatformName)\$(ConfigurationName)\*-2.0.lib $(OutDir)\lib&#x0D;&#x0A;"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="..\..\..\..\dependencies\$(PlatformName)\vs9"

+			IntermediateDirectory="$(ConfigurationName)"

+			ConfigurationType="10"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			DeleteExtensionsOnClean=""

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+				CommandLine="mkdir $(OutDir)\bin&#x0D;&#x0A;copy $(SolutionDir)$(ConfigurationName)\*-2-vs9.dll $(OutDir)\bin&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glib.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\gmodule\gmodule.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\glib-object.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\galloca.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\garray.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gasyncqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gatomic.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbacktrace.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbase64.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbookmarkfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcache.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gchecksum.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcompletion.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gconvert.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdataset.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdate.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdir.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gerror.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gfileutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghash.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghook.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n-lib.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\giochannel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gkeyfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmacros.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmain.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmappedfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmarkup.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmem.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmessages.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gnode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\goption.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gpattern.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprimes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprintf.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqsort.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gquark.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grand.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gregex.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gscanner.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gsequence.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gshell.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslice.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gspawn.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstdio.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstrfuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstring.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtestutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthread.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthreadpool.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtimer.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtree.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtypes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gunicode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gurifuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gwin32.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gboxed.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\genums.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gmarshal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobject.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobjectnotifyqueue.c $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparam.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparamspecs.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsignal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsourceclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtype.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypemodule.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypeplugin.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvalue.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluearray.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluecollector.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluetypes.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gappinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcancellable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcontenttype.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdatainputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdataoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdrive.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblem.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfile.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileattribute.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileenumerator.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilenamecompleter.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilterinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilteroutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\ginputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gio.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenums.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenumtypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioerror.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giomodule.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioscheduler.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giotypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gloadableicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmount.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmountoperation.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gnativevolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\goutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gseekable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gsimpleasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gthemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvfs.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolume.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;copy ..\..\..\glibconfig.h $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;rem&#x0D;&#x0A;copy $(SolutionDir)$(ConfigurationName)\*-2.0.lib $(OutDir)\lib&#x0D;&#x0A;"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ATK_EXPORTS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|x64"

+			OutputDirectory="..\..\..\..\dependencies\$(PlatformName)\vs9"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="10"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			DeleteExtensionsOnClean=""

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+				CommandLine="mkdir $(OutDir)\bin&#x0D;&#x0A;copy $(SolutionDir)$(ConfigurationName)\*-2-vs9.dll $(OutDir)\bin&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glib.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\gmodule\gmodule.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\glib-object.h $(OutDir)\include\glib-2.0&#x0D;&#x0A;copy ..\..\..\glib\galloca.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\garray.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gasyncqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gatomic.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbacktrace.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbase64.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gbookmarkfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcache.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gchecksum.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gcompletion.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gconvert.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdataset.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdate.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gdir.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gerror.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gfileutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghash.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\ghook.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n-lib.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gi18n.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\giochannel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gkeyfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\glist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmacros.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmain.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmappedfile.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmarkup.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmem.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gmessages.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gnode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\goption.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gpattern.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprimes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gprintf.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqsort.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gquark.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gqueue.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grand.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gregex.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\grel.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gscanner.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gsequence.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gshell.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslice.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gslist.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gspawn.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstdio.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstrfuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gstring.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtestutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthread.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gthreadpool.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtimer.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtree.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gtypes.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gunicode.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gurifuncs.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gutils.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;copy ..\..\..\glib\gwin32.h $(OutDir)\include\glib-2.0\glib&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gboxed.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\genums.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gmarshal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobject.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gobjectnotifyqueue.c $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparam.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gparamspecs.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsignal.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gsourceclosure.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtype.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypemodule.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gtypeplugin.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvalue.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluearray.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluecollector.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;copy ..\..\..\gobject\gvaluetypes.h $(OutDir)\include\glib-2.0\gobject&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gappinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gbufferedoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcancellable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gcontenttype.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdatainputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdataoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gdrive.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblem.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gemblemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfile.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileattribute.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileenumerator.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinfo.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilenamecompleter.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfileoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilterinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gfilteroutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\ginputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gio.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenums.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioenumtypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioerror.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giomodule.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gioscheduler.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\giotypes.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gloadableicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryinputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmemoryoutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmount.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gmountoperation.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gnativevolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\goutputstream.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gseekable.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gsimpleasyncresult.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gthemedicon.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvfs.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolume.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;copy ..\..\..\gio\gvolumemonitor.h $(OutDir)\include\glib-2.0\gio&#x0D;&#x0A;rem&#x0D;&#x0A;mkdir $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;copy ..\..\..\glibconfig.h $(OutDir)\lib\glib-2.0\include&#x0D;&#x0A;rem&#x0D;&#x0A;copy $(SolutionDir)$(PlatformName)\$(ConfigurationName)\*-2.0.lib $(OutDir)\lib&#x0D;&#x0A;"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;ATK_EXPORTS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="2"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/build/win32/vs9/testglib.vcproj b/build/win32/vs9/testglib.vcproj
new file mode 100644
index 0000000..ff40c32
--- /dev/null
+++ b/build/win32/vs9/testglib.vcproj
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<VisualStudioProject

+	ProjectType="Visual C++"

+	Version="9,00"

+	Name="testglib"

+	ProjectGUID="{64E09909-5599-40C0-B808-27F55F7B823C}"

+	RootNamespace="testglib"

+	Keyword="Win32Proj"

+	TargetFrameworkVersion="131072"

+	>

+	<Platforms>

+		<Platform

+			Name="Win32"

+		/>

+		<Platform

+			Name="x64"

+		/>

+	</Platforms>

+	<ToolFiles>

+	</ToolFiles>

+	<Configurations>

+		<Configuration

+			Name="Debug|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="4"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|Win32"

+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"

+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="1"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Debug|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				Optimization="0"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				MinimalRebuild="true"

+				BasicRuntimeChecks="3"

+				RuntimeLibrary="3"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="2"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+		<Configuration

+			Name="Release|x64"

+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"

+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"

+			ConfigurationType="1"

+			CharacterSet="2"

+			WholeProgramOptimization="1"

+			>

+			<Tool

+				Name="VCPreBuildEventTool"

+			/>

+			<Tool

+				Name="VCCustomBuildTool"

+			/>

+			<Tool

+				Name="VCXMLDataGeneratorTool"

+			/>

+			<Tool

+				Name="VCWebServiceProxyGeneratorTool"

+			/>

+			<Tool

+				Name="VCMIDLTool"

+				TargetEnvironment="3"

+			/>

+			<Tool

+				Name="VCCLCompilerTool"

+				AdditionalIncludeDirectories="../../..;../../../glib;../../../../dependencies/$(PlatformName)/proxy-libintl-20080916/include"

+				PreprocessorDefinitions="_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"

+				RuntimeLibrary="2"

+				UsePrecompiledHeader="0"

+				WarningLevel="3"

+				DebugInformationFormat="3"

+				CompileAs="1"

+				ForcedIncludeFiles="msvc_recommended_pragmas.h"

+			/>

+			<Tool

+				Name="VCManagedResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCResourceCompilerTool"

+			/>

+			<Tool

+				Name="VCPreLinkEventTool"

+			/>

+			<Tool

+				Name="VCLinkerTool"

+				LinkIncremental="1"

+				GenerateDebugInformation="true"

+				SubSystem="1"

+				OptimizeReferences="2"

+				EnableCOMDATFolding="2"

+				RandomizedBaseAddress="1"

+				DataExecutionPrevention="0"

+				TargetMachine="17"

+			/>

+			<Tool

+				Name="VCALinkTool"

+			/>

+			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

+				Name="VCXDCMakeTool"

+			/>

+			<Tool

+				Name="VCBscMakeTool"

+			/>

+			<Tool

+				Name="VCFxCopTool"

+			/>

+			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

+				Name="VCPostBuildEventTool"

+			/>

+		</Configuration>

+	</Configurations>

+	<References>

+	</References>

+	<Files>

+		<Filter

+			Name="Source Files"

+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"

+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

+			>

+			<File

+				RelativePath="..\..\..\tests\testglib.c"

+				>

+			</File>

+		</Filter>

+		<Filter

+			Name="Header Files"

+			Filter="h;hpp;hxx;hm;inl;inc;xsd"

+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

+			>

+		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"

+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

+			>

+		</Filter>

+	</Files>

+	<Globals>

+	</Globals>

+</VisualStudioProject>

diff --git a/config.h.win32.in b/config.h.win32.in
new file mode 100644
index 0000000..7eff542
--- /dev/null
+++ b/config.h.win32.in
@@ -0,0 +1,742 @@
+/* config.h.win32.in Merged from two versions generated by configure for gcc and MSVC.  */
+/* config.h.  Generated by configure.  */
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* define if asm blocks can use numeric local labels */
+/* #undef ASM_NUMERIC_LABELS */
+
+/* poll doesn't work on devices */
+#define BROKEN_POLL 1
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+/* #undef CRAY_STACKSEG_END */
+
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
+
+/* Whether to disable memory pools */
+/* #undef DISABLE_MEM_POOLS */
+
+/* Whether to enable GC friendliness by default */
+/* #undef ENABLE_GC_FRIENDLY_DEFAULT */
+
+/* always defined to indicate that i18n is enabled */
+#define ENABLE_NLS 1
+
+/* Define the gettext package to be used */
+#define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
+
+/* Define to the GLIB binary age */
+#define GLIB_BINARY_AGE @GLIB_BINARY_AGE@
+
+/* Byte contents of gmutex */
+/* #undef GLIB_BYTE_CONTENTS_GMUTEX */
+
+/* Define to the GLIB interface age */
+#define GLIB_INTERFACE_AGE @GLIB_INTERFACE_AGE@
+
+/* Define the location where the catalogs will be installed */
+#define GLIB_LOCALE_DIR "NONE/share/locale"
+
+/* Define to the GLIB major version */
+#define GLIB_MAJOR_VERSION @GLIB_MAJOR_VERSION@
+
+/* Define to the GLIB micro version */
+#define GLIB_MICRO_VERSION @GLIB_MICRO_VERSION@
+
+/* Define to the GLIB minor version */
+#define GLIB_MINOR_VERSION @GLIB_MINOR_VERSION@
+
+/* The size of gmutex, as computed by sizeof. */
+/* #undef GLIB_SIZEOF_GMUTEX */
+
+/* The size of system_thread, as computed by sizeof. */
+#define GLIB_SIZEOF_SYSTEM_THREAD 4
+
+/* alpha atomic implementation */
+/* #undef G_ATOMIC_ALPHA */
+
+/* arm atomic implementation */
+/* #undef G_ATOMIC_ARM */
+
+/* i486 atomic implementation */
+#ifndef _MSC_VER
+#define G_ATOMIC_I486 1
+#endif /* _MSC_VER */
+
+/* ia64 atomic implementation */
+/* #undef G_ATOMIC_IA64 */
+
+/* powerpc atomic implementation */
+/* #undef G_ATOMIC_POWERPC */
+
+/* s390 atomic implementation */
+/* #undef G_ATOMIC_S390 */
+
+/* sparcv9 atomic implementation */
+/* #undef G_ATOMIC_SPARCV9 */
+
+/* x86_64 atomic implementation */
+/* #undef G_ATOMIC_X86_64 */
+
+/* Have inline keyword */
+#ifndef _MSC_VER
+#define G_HAVE_INLINE 1
+#else /* _MSC_VER */
+/* #undef G_HAVE_INLINE */
+#endif /* _MSC_VER */
+
+/* Have __inline keyword */
+#define G_HAVE___INLINE 1
+
+/* Have __inline__ keyword */
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define G_HAVE___INLINE__ 1
+#else /* _MSC_VER or __DMC__ */
+/* #undef G_HAVE___INLINE__ */
+#endif /* _MSC_VER or __DMC__ */
+
+/* Source file containing theread implementation */
+#define G_THREAD_SOURCE "gthread-win32.c"
+
+/* A 'va_copy' style function */
+#ifndef _MSC_VER
+#define G_VA_COPY va_copy
+#else /* _MSC_VER */
+/* #undef G_VA_COPY */
+#endif /* _MSC_VER */
+
+/* 'va_lists' cannot be copies as values */
+/* #undef G_VA_COPY_AS_ARRAY */
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+/* #undef HAVE_ALLOCA_H */
+
+/* Define to 1 if you have the `atexit' function. */
+#define HAVE_ATEXIT 1
+
+/* Define to 1 if you have the <attr/xattr.h> header file. */
+/* #undef HAVE_ATTR_XATTR_H */
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#define HAVE_BIND_TEXTDOMAIN_CODESET 1
+
+/* Define if you have a version of the snprintf function with semantics as
+   specified by the ISO C99 standard. */
+/* #undef HAVE_C99_SNPRINTF */
+
+/* Define if you have a version of the vsnprintf function with semantics as
+   specified by the ISO C99 standard. */
+/* #undef HAVE_C99_VSNPRINTF */
+
+/* define to 1 if Carbon is available */
+/* #undef HAVE_CARBON */
+
+/* Define to 1 if you have the `chown' function. */
+/* #undef HAVE_CHOWN */
+
+/* Define to 1 if you have the `clock_gettime' function. */
+/* #undef HAVE_CLOCK_GETTIME */
+
+/* Have nl_langinfo (CODESET) */
+/* #undef HAVE_CODESET */
+
+/* Define to 1 if you have the <crt_externs.h> header file. */
+/* #undef HAVE_CRT_EXTERNS_H */
+
+/* Define to 1 if you have the `dcgettext' function. */
+#define HAVE_DCGETTEXT 1
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#ifndef _MSC_VER
+#define HAVE_DIRENT_H 1
+#else
+/* #undef HAVE_DIRENT_H */
+#endif
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H */
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+/* #undef HAVE_DOPRNT */
+
+/* define for working do while(0) macros */
+#define HAVE_DOWHILE_MACROS 1
+
+/* Define to 1 if you have the `endmntent' function. */
+/* #undef HAVE_ENDMNTENT */
+
+/* Define if we have FAM */
+/* #undef HAVE_FAM */
+
+/* Define to 1 if you have the <fam.h> header file. */
+/* #undef HAVE_FAM_H */
+
+/* Define if we have FAMNoExists in fam */
+/* #undef HAVE_FAM_NO_EXISTS */
+
+/* Define to 1 if you have the `fchmod' function. */
+/* #undef HAVE_FCHMOD */
+
+/* Define to 1 if you have the `fchown' function. */
+/* #undef HAVE_FCHOWN */
+
+/* Define to 1 if you have the `fdwalk' function. */
+/* #undef HAVE_FDWALK */
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the <fstab.h> header file. */
+/* #undef HAVE_FSTAB_H */
+
+/* Define to 1 if you have the `getcwd' function. */
+#define HAVE_GETCWD 1
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+/* #undef HAVE_GETC_UNLOCKED */
+
+/* Define to 1 if you have the `getgrgid' function. */
+/* #undef HAVE_GETGRGID */
+
+/* Define to 1 if you have the `getmntent_r' function. */
+/* #undef HAVE_GETMNTENT_R */
+
+/* Define to 1 if you have the `getmntinfo' function. */
+/* #undef HAVE_GETMNTINFO */
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef HAVE_GETPWUID */
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#define HAVE_GETTEXT 1
+
+/* Define to 1 if you have the `gmtime_r' function. */
+/* #undef HAVE_GMTIME_R */
+
+/* define to use system printf */
+/* #undef HAVE_GOOD_PRINTF */
+
+/* Define to 1 if you have the <grp.h> header file. */
+/* #undef HAVE_GRP_H */
+
+/* Define to 1 if you have the `hasmntopt' function. */
+/* #undef HAVE_HASMNTOPT */
+
+/* define to support printing 64-bit integers with format I64 */
+#define HAVE_INT64_AND_I64 1
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#ifndef _MSC_VER
+#define HAVE_INTMAX_T 1
+#else /* _MSC_VER */
+/* #undef HAVE_INTMAX_T */
+#endif /* _MSC_VER */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#ifndef _MSC_VER
+#define HAVE_INTTYPES_H 1
+#else /* _MSC_VER */
+/* #undef HAVE_INTTYPES_H */
+#endif /* _MSC_VER */
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#ifndef _MSC_VER
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+#else /* _MSC_VER */
+/* #undef HAVE_INTTYPES_H_WITH_UINTMAX */
+#endif /* _MSC_VER */
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+/* #undef HAVE_LANGINFO_CODESET */
+
+/* Define to 1 if you have the `lchown' function. */
+/* #undef HAVE_LCHOWN */
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+/* #undef HAVE_LC_MESSAGES */
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the `link' function. */
+/* #undef HAVE_LINK */
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if you have the `localtime_r' function. */
+/* #undef HAVE_LOCALTIME_R */
+
+/* Define if you have the 'long double' type. */
+#define HAVE_LONG_DOUBLE 1
+
+/* Define if you have the 'long long' type. */
+#ifndef _MSC_VER
+#define HAVE_LONG_LONG 1
+#else /* _MSC_VER */
+/* #undef HAVE_LONG_LONG */
+#endif /* _MSC_VER */
+
+/* define if system printf can print long long */
+#define HAVE_LONG_LONG_FORMAT 1
+
+/* Define to 1 if you have the `lstat' function. */
+/* #undef HAVE_LSTAT */
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H 1
+
+/* Define to 1 if you have the `memalign' function. */
+/* #undef HAVE_MEMALIGN */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' system call. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the <mntent.h> header file. */
+/* #undef HAVE_MNTENT_H */
+
+/* Have a monotonic clock */
+/* #undef HAVE_MONOTONIC_CLOCK */
+
+/* Define to 1 if you have the `nanosleep' function. */
+/* #undef HAVE_NANOSLEEP */
+
+/* Have non-POSIX function getgrgid_r */
+/* #undef HAVE_NONPOSIX_GETGRGID_R */
+
+/* Have non-POSIX function getpwuid_r */
+/* #undef HAVE_NONPOSIX_GETPWUID_R */
+
+/* Define to 1 if you have the `nsleep' function. */
+/* #undef HAVE_NSLEEP */
+
+/* Define to 1 if you have the `on_exit' function. */
+/* #undef HAVE_ON_EXIT */
+
+/* Define to 1 if you have the `poll' function. */
+/* #undef HAVE_POLL */
+
+/* Have POSIX function getgrgid_r */
+/* #undef HAVE_POSIX_GETGRGID_R */
+
+/* Have POSIX function getpwuid_r */
+/* #undef HAVE_POSIX_GETPWUID_R */
+
+/* Define to 1 if you have the `posix_memalign' function. */
+/* #undef HAVE_POSIX_MEMALIGN */
+
+/* Have function pthread_attr_setstacksize */
+/* #undef HAVE_PTHREAD_ATTR_SETSTACKSIZE */
+
+/* Define to 1 if the system has the type `ptrdiff_t'. */
+#define HAVE_PTRDIFF_T 1
+
+/* Define to 1 if you have the <pwd.h> header file. */
+/* #undef HAVE_PWD_H */
+
+/* Define to 1 if you have the `readlink' function. */
+/* #undef HAVE_READLINK */
+
+/* Define to 1 if you have the <sched.h> header file. */
+/* #undef HAVE_SCHED_H */
+
+/* Define to 1 if libselinux is available */
+/* #undef HAVE_SELINUX */
+
+/* Define to 1 if you have the <selinux/selinux.h> header file. */
+/* #undef HAVE_SELINUX_SELINUX_H */
+
+/* Define to 1 if you have the `setenv' function. */
+/* #undef HAVE_SETENV */
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the `setmntent' function. */
+/* #undef HAVE_SETMNTENT */
+
+/* Define to 1 if you have the `snprintf' function. */
+#ifndef _MSC_VER
+#define HAVE_SNPRINTF 1
+#ifdef __DMC__
+#define snprintf _snprintf
+#endif
+#else /* _MSC_VER */
+/* #undef HAVE_SNPRINTF */
+#endif /* _MSC_VER */
+
+/* Define to 1 if you have the `statfs' function. */
+/* #undef HAVE_STATFS */
+
+/* Define to 1 if you have the `statvfs' function. */
+/* #undef HAVE_STATVFS */
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#ifndef _MSC_VER
+#define HAVE_STDINT_H 1
+#else /* _MSC_VER */
+/* #undef HAVE_STDINT_H */
+#endif /* _MSC_VER */
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and 
+   declares uintmax_t. */
+#ifndef _MSC_VER
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+#else /* _MSC_VER */
+/* #undef HAVE_STDINT_H_WITH_UINTMAX */
+#endif /* _MSC_VER */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `stpcpy' function. */
+/* #undef HAVE_STPCPY */
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define HAVE_STRCASECMP 1
+#else /* _MSC_VER or __DMC__ */
+/* #undef HAVE_STRCASECMP */
+#endif /* _MSC_VER or __DMC__ */
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define HAVE_STRINGS_H 1
+#else /* _MSC_VER or __DMC__ */
+/* #undef HAVE_STRINGS_H */
+#endif /* _MSC_VER or __DMC__ */
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Have functions strlcpy and strlcat */
+/* #undef HAVE_STRLCPY */
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define HAVE_STRNCASECMP 1
+#else /* _MSC_VER or __DMC__ */
+/* #undef HAVE_STRNCASECMP */
+#endif /* _MSC_VER or __DMC__ */
+
+/* Define to 1 if you have the `strsignal' function. */
+/* #undef HAVE_STRSIGNAL */
+
+/* Define to 1 if `f_bavail' is member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_BAVAIL */
+
+/* Define to 1 if `f_fstypename' is member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FSTYPENAME */
+
+/* Define to 1 if `f_basetype' is member of `struct statvfs'. */
+/* #undef HAVE_STRUCT_STATVFS_F_BASETYPE */
+
+/* Define to 1 if `st_atimensec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_ATIMENSEC */
+
+/* Define to 1 if `st_atim.tv_nsec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC */
+
+/* Define to 1 if `st_blksize' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_BLKSIZE */
+
+/* Define to 1 if `st_blocks' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_BLOCKS */
+
+/* Define to 1 if `st_ctimensec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_CTIMENSEC */
+
+/* Define to 1 if `st_ctim.tv_nsec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC */
+
+/* Define to 1 if `st_mtimensec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_MTIMENSEC */
+
+/* Define to 1 if `st_mtim.tv_nsec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef HAVE_SYMLINK */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+/* #undef HAVE_SYS_INOTIFY_H */
+
+/* Define to 1 if you have the <sys/mntctl.h> header file. */
+/* #undef HAVE_SYS_MNTCTL_H */
+
+/* Define to 1 if you have the <sys/mnttab.h> header file. */
+/* #undef HAVE_SYS_MNTTAB_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+/* #undef HAVE_SYS_MOUNT_H */
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define HAVE_SYS_PARAM_H 1
+#else /* _MSC_VER or __DMC__ */
+/* #undef HAVE_SYS_PARAM_H */
+#endif /* _MSC_VER or __DMC__ */
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+/* #undef HAVE_SYS_POLL_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef HAVE_SYS_RESOURCE_H */
+
+/* found fd_set in sys/select.h */
+/* #undef HAVE_SYS_SELECT_H */
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+/* #undef HAVE_SYS_STATFS_H */
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+/* #undef HAVE_SYS_STATVFS_H */
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+/* #undef HAVE_SYS_TIMES_H */
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#ifndef _MSC_VER
+#define HAVE_SYS_TIME_H 1
+#else /* _MSC_VER */
+/* #undef HAVE_SYS_TIME_H */
+#endif /* _MSC_VER */
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/vfstab.h> header file. */
+/* #undef HAVE_SYS_VFSTAB_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+/* #undef HAVE_SYS_VFS_H */
+
+/* Define to 1 if you have the <sys/vmount.h> header file. */
+/* #undef HAVE_SYS_VMOUNT_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+/* #undef HAVE_SYS_WAIT_H */
+
+/* Define to 1 if you have the <sys/xattr.h> header file. */
+/* #undef HAVE_SYS_XATTR_H */
+
+/* Define to 1 if you have the `timegm' function. */
+/* #undef HAVE_TIMEGM */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#ifndef _MSC_VER
+#define HAVE_UNISTD_H 1
+#else /* _MSC_VER */
+/* #undef HAVE_UNISTD_H */
+#endif /* _MSC_VER */
+
+/* Define if your printf function family supports positional parameters as
+   specified by Unix98. */
+/* #undef HAVE_UNIX98_PRINTF */
+
+/* Define to 1 if you have the `unsetenv' function. */
+/* #undef HAVE_UNSETENV */
+
+/* Define to 1 if you have the `utimes' function. */
+/* #undef HAVE_UTIMES */
+
+/* Define to 1 if you have the `valloc' function. */
+/* #undef HAVE_VALLOC */
+
+/* Define to 1 if you have the <values.h> header file. */
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define HAVE_VALUES_H 1
+#else /* _MSC_VER or __DMC__ */
+/* #undef HAVE_VALUES_H */
+#endif /* _MSC_VER or __DMC__ */
+
+/* Define to 1 if you have the `vasprintf' function. */
+#define HAVE_VASPRINTF 1
+
+/* Define to 1 if you have the `vprintf' function. */
+#define HAVE_VPRINTF 1
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#ifndef _MSC_VER
+#define HAVE_VSNPRINTF 1
+#ifdef __DMC__
+#define vsnprintf _vsnprintf
+#endif
+#else /* _MSC_VER */
+/* #undef HAVE_VSNPRINTF */
+#endif /* _MSC_VER */
+
+/* Define if you have the 'wchar_t' type. */
+#define HAVE_WCHAR_T 1
+
+/* Define to 1 if you have the `wcslen' function. */
+#define HAVE_WCSLEN 1
+
+/* Define if you have the 'wint_t' type. */
+#define HAVE_WINT_T 1
+
+/* Have a working bcopy */
+/* #undef HAVE_WORKING_BCOPY */
+
+/* Define to 1 if xattr is available */
+/* #undef HAVE_XATTR */
+
+/* Define to 1 if xattr API uses XATTR_NOFOLLOW */
+/* #undef HAVE_XATTR_NOFOLLOW */
+
+/* Define to 1 if you have the `_NSGetEnviron' function. */
+/* #undef HAVE__NSGETENVIRON */
+
+/* Do we cache iconv descriptors */
+#define NEED_ICONV_CACHE 1
+
+/* didn't find fd_set */
+#define NO_FD_SET 1
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* global 'sys_errlist' not found */
+#define NO_SYS_ERRLIST 1
+
+/* global 'sys_siglist' not found */
+#define NO_SYS_SIGLIST 1
+
+/* global 'sys_siglist' not declared */
+#define NO_SYS_SIGLIST_DECL 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=glib"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "glib"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "glib @GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.@GLIB_MICRO_VERSION@"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "glib"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.@GLIB_MICRO_VERSION@"
+
+/* Maximum POSIX RT priority */
+/* #undef POSIX_MAX_PRIORITY */
+
+/* define if posix_memalign() can allocate any size */
+/* #undef POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS */
+
+/* Minimum POSIX RT priority */
+/* #undef POSIX_MIN_PRIORITY */
+
+/* The POSIX RT yield function */
+/* #undef POSIX_YIELD_FUNC */
+
+/* whether realloc (NULL,) works */
+#define REALLOC_0_WORKS 1
+
+/* Define if you have correct malloc prototypes */
+#ifndef _MSC_VER
+#define SANE_MALLOC_PROTOS 1
+#else /* _MSC_VER */
+/* #undef SANE_MALLOC_PROTOS */
+#endif /* _MSC_VER */
+
+/* The size of `char', as computed by sizeof. */
+#define SIZEOF_CHAR 1
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 4
+
+/* The size of `long long', as computed by sizeof. */
+#ifndef _MSC_VER
+#define SIZEOF_LONG_LONG 8
+#else /* _MSC_VER */
+#define SIZEOF_LONG_LONG 0
+#endif /* _MSC_VER */
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* The size of `size_t', as computed by sizeof. */
+#define SIZEOF_SIZE_T 4
+
+/* The size of `void *', as computed by sizeof. */
+#define SIZEOF_VOID_P 4
+
+/* The size of `__int64', as computed by sizeof. */
+#define SIZEOF___INT64 8
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+/* #undef STACK_DIRECTION */
+
+/* Number of arguments to statfs() */
+/* #undef STATFS_ARGS */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Using GNU libiconv */
+/* #undef USE_LIBICONV_GNU */
+
+/* Using a native implementation of iconv in a separate library */
+#define USE_LIBICONV_NATIVE 1
+
+/* using the system-supplied PCRE library */
+/* #undef USE_SYSTEM_PCRE */
+
+/* Define to 1 if your processor stores words with the most significant byte
+   first (like Motorola and SPARC, unlike Intel and VAX). */
+/* #undef WORDS_BIGENDIAN */
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to long or long long if <inttypes.h> and <stdint.h> don't define. */
+/* #undef intmax_t */
+
+/* Define to empty if the C compiler doesn't support this keyword. */
+/* #undef signed */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..b2ced79
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,3404 @@
+# Process this file with autoconf to produce a configure script.
+# require autoconf 2.54
+AC_PREREQ(2.54)
+
+dnl ***********************************
+dnl *** include special GLib macros ***
+dnl ***********************************
+
+m4_define(glib_configure_in)
+
+#
+# The following version number definitions apply to GLib, GModule, GObject,
+# GThread and GIO as a whole, so if changes occurred in any of them, they are
+# all treated with the same interface and binary age.
+#
+# Making releases:
+#   glib_micro_version += 1;
+#   glib_interface_age += 1;
+#   glib_binary_age += 1;
+# if any functions have been added, set glib_interface_age to 0.
+# if backwards compatibility has been broken,
+# set glib_binary_age _and_ glib_interface_age to 0.
+#
+m4_define([glib_major_version], [2])
+m4_define([glib_minor_version], [20])
+m4_define([glib_micro_version], [3])
+m4_define([glib_interface_age], [3])
+m4_define([glib_binary_age],
+          [m4_eval(100 * glib_minor_version + glib_micro_version)])
+m4_define([glib_version],
+          [glib_major_version.glib_minor_version.glib_micro_version])
+
+# libtool version related macros
+m4_define([glib_lt_release], [glib_major_version.glib_minor_version])
+m4_define([glib_lt_current],
+          [m4_eval(100 * glib_minor_version + glib_micro_version - glib_interface_age)])
+m4_define([glib_lt_revision], [glib_interface_age])
+m4_define([glib_lt_age], [m4_eval(glib_binary_age - glib_interface_age)])
+m4_define([glib_lt_current_minus_age],
+          [m4_eval(glib_lt_current - glib_lt_age)])
+
+# if the minor version number is odd, then we want debugging.  Otherwise
+# we only want minimal debugging support.
+m4_define([glib_debug_default],
+          [m4_if(m4_eval(glib_minor_version % 2), [1], [yes], [minimum])])dnl
+
+
+AC_INIT(glib, [glib_version],
+        [http://bugzilla.gnome.org/enter_bug.cgi?product=glib])
+
+AC_CONFIG_SRCDIR([glib/glib.h])
+
+# Save this value here, since automake will set cflags later
+cflags_set=${CFLAGS+set}
+
+AM_INIT_AUTOMAKE([no-define])
+
+# Specify a configuration file
+AM_CONFIG_HEADER([config.h])
+
+
+GLIB_MAJOR_VERSION=glib_major_version
+GLIB_MINOR_VERSION=glib_minor_version
+GLIB_MICRO_VERSION=glib_micro_version
+GLIB_INTERFACE_AGE=glib_interface_age
+GLIB_BINARY_AGE=glib_binary_age
+GLIB_VERSION=glib_version
+
+AC_SUBST(GLIB_MAJOR_VERSION)
+AC_SUBST(GLIB_MINOR_VERSION)
+AC_SUBST(GLIB_MICRO_VERSION)
+AC_SUBST(GLIB_VERSION)
+AC_SUBST(GLIB_INTERFACE_AGE)
+AC_SUBST(GLIB_BINARY_AGE)
+
+AC_DEFINE(GLIB_MAJOR_VERSION, [glib_major_version],
+	  [Define to the GLIB major version])
+AC_DEFINE(GLIB_MINOR_VERSION, [glib_minor_version],
+	  [Define to the GLIB minor version])
+AC_DEFINE(GLIB_MICRO_VERSION, [glib_micro_version],
+	  [Define to the GLIB micro version])
+AC_DEFINE(GLIB_INTERFACE_AGE, [glib_interface_age],
+	  [Define to the GLIB interface age])
+AC_DEFINE(GLIB_BINARY_AGE, [glib_binary_age],
+	  [Define to the GLIB binary age])
+
+# libtool versioning
+LT_RELEASE=glib_lt_release
+LT_CURRENT=glib_lt_current
+LT_REVISION=glib_lt_revision
+LT_AGE=glib_lt_age
+LT_CURRENT_MINUS_AGE=glib_lt_current_minus_age
+AC_SUBST(LT_RELEASE)
+AC_SUBST(LT_CURRENT)
+AC_SUBST(LT_REVISION)
+AC_SUBST(LT_AGE)
+AC_SUBST(LT_CURRENT_MINUS_AGE)
+
+dnl Initialize maintainer mode
+AM_MAINTAINER_MODE
+
+AC_CANONICAL_HOST
+
+AC_MSG_CHECKING([for the BeOS])
+case $host in
+  *-*-beos*)
+    glib_native_beos="yes"
+    ;;
+  *)
+    glib_native_beos="no"
+    ;;
+esac
+AC_MSG_RESULT([$glib_native_beos])
+
+dnl
+
+AC_MSG_CHECKING([for Win32])
+LIB_EXE_MACHINE_FLAG=X86
+case "$host" in
+  *-*-mingw*)
+    glib_native_win32=yes
+    glib_pid_type='void *'
+    glib_cv_stack_grows=no
+    # Unfortunately the mingw implementations of C99-style snprintf and vsnprintf
+    # don't seem to be quite good enough, at least not in mingw-runtime-3.14.
+    # (Sorry, I don't know exactly what is the problem, but it is related to
+    # floating point formatting and decimal point vs. comma.)
+    # The simple tests in AC_FUNC_VSNPRINTF_C99 and AC_FUNC_SNPRINTF_C99 aren't
+    # rigorous enough to notice, though.
+    # So preset the autoconf cache variables.
+    ac_cv_func_vsnprintf_c99=no
+    ac_cv_func_snprintf_c99=no
+    case "$host" in
+    x86_64-*-*)
+      LIB_EXE_MACHINE_FLAG=X64
+      ;;
+    esac
+    ;;
+  *)
+    glib_native_win32=no
+    glib_pid_type=int
+    ;;
+esac
+case $host in
+  *-*-linux*)
+    glib_os_linux=yes
+    ;;
+esac
+
+AC_MSG_RESULT([$glib_native_win32])
+
+AC_SUBST(LIB_EXE_MACHINE_FLAG)
+
+glib_have_carbon=no
+AC_MSG_CHECKING([for Mac OS X Carbon support])
+AC_TRY_CPP([
+#include <Carbon/Carbon.h>
+#include <CoreServices/CoreServices.h>
+], glib_have_carbon=yes)
+
+AC_MSG_RESULT([$glib_have_carbon])
+
+AM_CONDITIONAL(OS_WIN32, [test "$glib_native_win32" = "yes"])
+AM_CONDITIONAL(OS_WIN32_X64, [test "$LIB_EXE_MACHINE_FLAG" = "X64"])
+AM_CONDITIONAL(OS_UNIX, [test "$glib_native_win32" != "yes"])
+AM_CONDITIONAL(OS_LINUX, [test "$glib_os_linux" = "yes"])
+AM_CONDITIONAL(OS_CARBON, [test "$glib_have_carbon" = "yes"])
+
+if test "$glib_native_win32" = "yes"; then
+  AC_CHECK_TOOL(WINDRES, windres, no)
+  if test "$WINDRES" = no; then
+    AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
+  fi
+  AC_CHECK_TOOL(NM, nm, no)
+  if test "$NM" = no; then
+    AC_MSG_ERROR([*** Could not find an implementation of nm in your PATH.])
+  fi
+  AC_CHECK_TOOL(RANLIB, ranlib, :)
+  AC_CHECK_PROG(ms_librarian, [lib.exe], [yes], [no])
+fi
+AM_CONDITIONAL(MS_LIB_AVAILABLE, [test x$ms_librarian = xyes])
+
+if test "$glib_native_win32" != yes; then
+    # libtool option to control which symbols are exported
+    # right now, symbols starting with _ are not exported
+    LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^g.*"'
+else
+    # We currently use .def files on Windows
+    LIBTOOL_EXPORT_OPTIONS=
+fi
+AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
+
+if test "x$glib_have_carbon" = "xyes"; then
+  AC_DEFINE(HAVE_CARBON, 1, [define to 1 if Carbon is available])
+  LDFLAGS="$LDFLAGS -framework Carbon"
+fi
+
+
+dnl declare --enable-* args and collect ac_help strings
+AC_ARG_ENABLE(debug,
+              AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
+                             [turn on debugging @<:@default=glib_debug_default@:>@]),,
+              enable_debug=glib_debug_default)
+
+AC_ARG_ENABLE(gc_friendly,
+              [AC_HELP_STRING([--enable-gc-friendly],
+                              [turn on garbage collector friendliness [default=no]])],,
+              [enable_gc_friendly=no])
+AC_ARG_ENABLE(mem_pools,
+              [AC_HELP_STRING([--disable-mem-pools],
+			      [disable all glib memory pools])],,
+	      [disable_mem_pools=no])
+AC_ARG_ENABLE(threads,
+              [AC_HELP_STRING([--enable-threads],
+                              [turn on basic thread support [default=yes]
+([=no] will override --with-threads)])],,
+              [enable_threads=yes])
+AC_ARG_ENABLE(rebuilds,
+              [AC_HELP_STRING([--disable-rebuilds],
+                              [disable all source autogeneration rules])],,
+              [enable_rebuilds=yes])
+AC_ARG_ENABLE(visibility,
+              [AC_HELP_STRING([--disable-visibility],
+                              [don't use ELF visibility attributes])],,
+              [enable_visibility=yes])
+
+if test "x$enable_threads" != "xyes"; then
+  enable_threads=no
+fi
+
+AC_MSG_CHECKING([whether to enable garbage collector friendliness])
+if test "x$enable_gc_friendly" = "xyes"; then
+  AC_DEFINE(ENABLE_GC_FRIENDLY_DEFAULT, 1, [Whether to enable GC friendliness by default])
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+
+AC_MSG_CHECKING([whether to disable memory pools])
+if test "x$disable_mem_pools" = "xno"; then
+  AC_MSG_RESULT([no])
+else
+  AC_DEFINE(DISABLE_MEM_POOLS, [1], [Whether to disable memory pools])
+  AC_SUBST(DISABLE_MEM_POOLS)
+  AC_MSG_RESULT([yes])
+fi
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_CPP
+
+dnl Check for a working C++ compiler, but do not bail out, if none is found.
+AC_CHECK_PROGS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], [gcc])
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
+AM_CONDITIONAL(HAVE_CXX, [test "$CXX" != ""])
+AC_LANG_RESTORE
+
+AM_PROG_CC_STDC
+AM_PROG_CC_C_O
+AC_PROG_INSTALL
+
+AC_SYS_LARGEFILE
+
+#
+# Find pkg-config
+#
+AC_PATH_PROG(PKG_CONFIG, [pkg-config], [no])
+if test x$PKG_CONFIG = xno ; then
+  AC_MSG_ERROR([*** pkg-config not found. See http://www.freedesktop.org/software/pkgconfig/])
+fi
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.16 ; then
+  :
+else
+  AC_MSG_ERROR([*** pkg-config too old; version 0.16 or better required.])
+fi
+
+if test "x$enable_debug" = "xyes"; then
+  if test x$cflags_set != xset ; then
+      case " $CFLAGS " in
+      *[[\ \	]]-g[[\ \	]]*) ;;
+      *) CFLAGS="$CFLAGS -g" ;;
+      esac
+  fi
+	
+  GLIB_DEBUG_FLAGS="-DG_ENABLE_DEBUG"
+else
+  GLIB_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
+
+  if test "x$enable_debug" = "xno"; then
+    GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS"
+  fi
+fi
+
+if test "x$enable_visibility" = "xno"; then
+  GLIB_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DDISABLE_VISIBILITY"
+fi
+
+# Ensure MSVC-compatible struct packing convention is used when
+# compiling for Win32 with gcc.
+# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
+# gcc2 uses "-fnative-struct".
+if test x"$glib_native_win32" = xyes; then
+  if test x"$GCC" = xyes; then
+    msnative_struct=''
+    AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
+    if test -z "$ac_cv_prog_CC"; then
+      our_gcc="$CC"
+    else
+      our_gcc="$ac_cv_prog_CC"
+    fi
+    case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
+      2.)
+	if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
+	  msnative_struct='-fnative-struct'
+	fi
+	;;
+      *)
+	if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
+	  msnative_struct='-mms-bitfields'
+	fi
+	;;
+    esac
+    if test x"$msnative_struct" = x ; then
+      AC_MSG_RESULT([no way])
+      AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
+    else
+      CFLAGS="$CFLAGS $msnative_struct"
+      AC_MSG_RESULT([${msnative_struct}])
+    fi
+  fi
+fi
+GLIB_EXTRA_CFLAGS="${msnative_struct}"
+AC_SUBST(GLIB_EXTRA_CFLAGS)
+
+AC_EXEEXT
+
+# define a MAINT-like variable REBUILD which is set if Perl
+# and awk are found, so autogenerated sources can be rebuilt
+AC_PROG_AWK
+AC_CHECK_PROGS(PERL, [perl5 perl])
+# We would like indent, but don't require it.
+AC_CHECK_PROG(INDENT, indent, indent)
+REBUILD=\#
+if test "x$enable_rebuilds" = "xyes" && \
+     test -n "$PERL" && \
+     $PERL -e 'exit !($] >= 5.002)' > /dev/null 2>&1 && \
+     test -n "$AWK" ; then
+  REBUILD=
+fi
+AC_SUBST(REBUILD)
+
+# Need full path to Perl for glib-mkenums
+#
+if test "x$PERL" != x ; then
+  AC_PATH_PROG(PERL_PATH, [$PERL])
+fi
+if test "x$PERL_PATH" = x ; then
+  PERL_PATH="/usr/bin/env perl"
+fi
+AC_SUBST(PERL_PATH)
+
+# Need suitable python path for greport
+AM_PATH_PYTHON(2.4,,PYTHON="/usr/bin/env python2.4")
+
+
+dnl ***********************
+dnl *** Tests for iconv ***
+dnl ***********************
+dnl
+dnl We do this before the gettext checks, to avoid distortion
+
+dnl On Windows we use a native implementation
+
+if test x"$glib_native_win32" = xyes; then
+  with_libiconv=native
+else
+  AC_ARG_WITH(libiconv,
+	      [AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
+			      [use the libiconv library])],,
+	      [with_libiconv=maybe])
+
+  found_iconv=no
+  case $with_libiconv in
+    maybe)
+      # Check in the C library first
+      AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
+      # Check if we have GNU libiconv
+      if test $found_iconv = "no"; then
+	AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
+      fi
+      # Check if we have a iconv in -liconv, possibly from vendor
+      if test $found_iconv = "no"; then
+	AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
+      fi
+      ;;
+    no)
+      AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
+      ;;
+    gnu|yes)
+      AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
+      ;;
+    native)
+      AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
+      ;;
+  esac
+
+  if test "x$found_iconv" = "xno" ; then
+     AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
+  fi
+fi
+
+gl_GLIBC21
+AC_ARG_ENABLE(iconv-cache, 
+              [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@],
+                              [cache iconv descriptors [default=auto]])],,
+              [enable_iconv_cache=auto])
+
+AC_MSG_CHECKING([Whether to cache iconv descriptors])
+case $enable_iconv_cache in
+  auto)
+    if test $ac_cv_gnu_library_2_1 = yes; then
+      enable_iconv_cache=no
+    else 
+      enable_iconv_cache=yes
+    fi
+  ;;
+  yes|no) 
+  ;;
+  *) AC_MSG_ERROR([Value given to --enable-iconv-cache must be one of yes, no or auto])
+  ;;
+esac
+
+if test $enable_iconv_cache = yes; then
+   AC_DEFINE(NEED_ICONV_CACHE,1,[Do we cache iconv descriptors])
+fi
+
+AC_MSG_RESULT($enable_iconv_cache)
+
+
+dnl
+dnl gettext support
+dnl
+
+ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`"
+AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS'])
+GLIB_GNU_GETTEXT
+
+if test "$gt_cv_have_gettext" != "yes" ; then
+  AC_MSG_ERROR([
+*** You must have either have gettext support in your C library, or use the 
+*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
+])
+fi
+
+LIBS="$INTLLIBS $LIBS"
+
+GETTEXT_PACKAGE=glib20
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], 
+  [Define the gettext package to be used])
+
+GLIB_DEFINE_LOCALEDIR(GLIB_LOCALE_DIR)
+
+dnl
+dnl Now we are done with gettext checks, figure out ICONV_LIBS
+dnl
+
+if test x"$glib_native_win32" != xyes; then
+  if test x$with_libiconv != xno ; then
+    case " $INTLLIBS " in
+    *[[\ \	]]-liconv[[\ \	]]*) ;;
+    *) ICONV_LIBS="-liconv" ;;
+    esac
+  fi
+fi
+AC_SUBST(ICONV_LIBS)
+
+case $with_libiconv in
+  gnu)
+    AC_DEFINE(USE_LIBICONV_GNU, 1, [Using GNU libiconv])
+    ;;
+  native)
+    AC_DEFINE(USE_LIBICONV_NATIVE, 1, [Using a native implementation of iconv in a separate library])
+    ;;
+esac
+
+dnl Initialize libtool
+AM_DISABLE_STATIC
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+dnl when using libtool 2.x create libtool early, because it's used in configure
+m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
+
+
+if test "x$GCC" = "xyes"; then
+  case " $CFLAGS " in
+  *[[\ \	]]-Wall[[\ \	]]*) ;;
+  *) CFLAGS="$CFLAGS -Wall" ;;
+  esac
+fi
+
+CPPFLAGS="$CPPFLAGS -DG_DISABLE_SINGLE_INCLUDES"
+
+if test "$glib_native_win32" = "yes"; then
+  if test x$enable_static = xyes -a x$enable_shared = xyes; then
+    AC_MSG_ERROR([Can not build both shared and static at the same time on Windows.])
+  fi
+  if test x$enable_static = xyes; then
+    glib_win32_static_compilation=yes
+    GLIB_WIN32_STATIC_COMPILATION_DEFINE="#define GLIB_STATIC_COMPILATION 1
+#define GOBJECT_STATIC_COMPILATION 1"
+    AC_SUBST(GLIB_WIN32_STATIC_COMPILATION_DEFINE)
+  fi
+fi
+AM_CONDITIONAL(OS_WIN32_AND_DLL_COMPILATION, [test x$glib_native_win32 = xyes -a x$glib_win32_static_compilation != xyes])
+
+dnl
+dnl DU4 native cc currently needs -std1 for ANSI mode (instead of K&R)
+dnl
+if test $cross_compiling != yes ; then
+    AC_MSG_CHECKING([for extra flags to get ANSI library prototypes])
+    glib_save_LIBS=$LIBS
+    LIBS="$LIBS -lm"
+    AC_TRY_RUN([#include <math.h>
+		 int main (void) { return (log(1) != log(1.)); }],
+	 AC_MSG_RESULT(none needed),
+	 glib_save_CFLAGS=$CFLAGS
+	 CFLAGS="$CFLAGS -std1"
+	 AC_TRY_RUN([#include <math.h>
+		     int main (void) { return (log(1) != log(1.)); }],
+	     AC_MSG_RESULT(-std1),
+	     AC_MSG_RESULT()
+	     CFLAGS=$glib_save_CFLAGS
+	     AC_MSG_WARN(
+		    [No ANSI prototypes found in library. (-std1 didn't work.)])
+	 )
+    )
+    LIBS=$glib_save_LIBS
+fi
+
+dnl NeXTStep cc seems to need this
+AC_MSG_CHECKING([for extra flags for POSIX compliance])
+AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
+  AC_MSG_RESULT(none needed),
+  glib_save_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -posix"
+  AC_TRY_COMPILE([#include <dirent.h>], [DIR *dir;],
+    AC_MSG_RESULT(-posix),
+    AC_MSG_RESULT()
+    CFLAGS=$glib_save_CFLAGS
+    AC_MSG_WARN([Could not determine POSIX flag. (-posix didn't work.)])))
+
+# Checks for header files.
+AC_HEADER_STDC
+
+# Checks for library functions.
+AC_FUNC_VPRINTF
+AC_FUNC_ALLOCA
+AC_CHECK_FUNCS(mmap)
+AC_CHECK_FUNCS(posix_memalign)
+AC_CHECK_FUNCS(memalign)
+AC_CHECK_FUNCS(valloc)
+AC_CHECK_FUNCS(fsync)
+
+AC_CHECK_FUNCS(atexit on_exit)
+
+AC_CHECK_FUNCS(timegm gmtime_r)
+
+AC_CHECK_SIZEOF(char)
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(void *)
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(__int64)
+
+if test x$ac_cv_sizeof_long = x8 || test x$ac_cv_sizeof_long_long = x8 || test x$ac_cv_sizeof___int64 = x8 ; then
+  :
+else
+  AC_MSG_ERROR([
+*** GLib requires a 64 bit type. You might want to consider
+*** using the GNU C compiler.
+])
+fi
+
+if test x$glib_native_win32 != xyes && test x$ac_cv_sizeof_long_long = x8; then
+	# long long is a 64 bit integer.
+	AC_MSG_CHECKING(for format to printf and scanf a guint64)
+	AC_CACHE_VAL(glib_cv_long_long_format,[
+		for format in ll q I64; do
+		  AC_TRY_RUN([#include <stdio.h>  
+			int main()
+			{
+			  long long b, a = -0x3AFAFAFAFAFAFAFALL;
+			  char buffer[1000];
+			  sprintf (buffer, "%${format}u", a);
+  			  sscanf (buffer, "%${format}u", &b);
+			  exit (b!=a);
+			}
+			],
+			[glib_cv_long_long_format=${format}
+			break],
+			[],[:])
+		done])
+	if test -n "$glib_cv_long_long_format"; then
+	  AC_MSG_RESULT(%${glib_cv_long_long_format}u)
+	  AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
+	  if test x"$glib_cv_long_long_format" = xI64; then
+	    AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
+	  fi
+        else
+	  AC_MSG_RESULT(none)
+        fi
+elif test x$ac_cv_sizeof___int64 = x8; then
+	# __int64 is a 64 bit integer.
+	AC_MSG_CHECKING(for format to printf and scanf a guint64)
+	# We know this is MSVCRT.DLL, and what the formats are
+	glib_cv_long_long_format=I64
+	AC_MSG_RESULT(%${glib_cv_long_long_format}u)
+        AC_DEFINE(HAVE_LONG_LONG_FORMAT,1,[define if system printf can print long long])
+	AC_DEFINE(HAVE_INT64_AND_I64,1,[define to support printing 64-bit integers with format I64])
+fi
+
+dnl long doubles were not used, and a portability problem
+dnl AC_C_LONG_DOUBLE
+AC_C_CONST
+
+dnl ok, here we try to check whether the systems prototypes for
+dnl malloc and friends actually match the prototypes provided
+dnl by gmem.h (keep in sync). i currently only know how to check
+dnl this reliably with gcc (-Werror), improvements for other
+dnl compilers are apprechiated.
+SANE_MALLOC_PROTOS=no
+AC_MSG_CHECKING([if malloc() and friends prototypes are gmem.h compatible])
+glib_save_CFLAGS=$CFLAGS
+if test "x$GCC" = "xyes"; then
+  CFLAGS="$CFLAGS -Werror"
+  AC_TRY_COMPILE([#include <stdlib.h>], [
+    void* (*my_calloc_p)  (size_t, size_t) = calloc;
+    void* (*my_malloc_p)  (size_t)         = malloc;
+    void  (*my_free_p)    (void*)          = free;
+    void* (*my_realloc_p) (void*, size_t)  = realloc;
+    my_calloc_p = 0;
+    my_malloc_p = 0;
+    my_free_p = 0;
+    my_realloc_p = 0;
+  ],
+    AC_DEFINE(SANE_MALLOC_PROTOS, 1, 
+      [Define if you have correct malloc prototypes])
+    SANE_MALLOC_PROTOS=yes)
+fi
+AC_MSG_RESULT($SANE_MALLOC_PROTOS)
+CFLAGS=$glib_save_CFLAGS
+
+dnl
+dnl check in which direction the stack grows
+dnl
+AC_CACHE_CHECK([for growing stack pointer],glib_cv_stack_grows,[
+        AC_TRY_RUN([
+	volatile int *a = 0, *b = 0;
+	void foo (void);
+	int main () { volatile int y = 7; a = &y; foo (); return b > a; }
+	void foo (void) { volatile int x = 5; b = &x; }
+       	],
+	glib_cv_stack_grows=no
+        ,
+	glib_cv_stack_grows=yes
+        ,)
+])
+
+dnl AC_C_INLINE is useless to us since it bails out too early, we need to
+dnl truely know which ones of `inline', `__inline' and `__inline__' are
+dnl actually supported.
+AC_CACHE_CHECK([for __inline],glib_cv_has__inline,[
+        AC_COMPILE_IFELSE([
+	__inline int foo () { return 0; }
+	int main () { return foo (); }
+       	],
+	glib_cv_has__inline=yes
+        ,
+	glib_cv_has__inline=no
+        ,)
+])
+case x$glib_cv_has__inline in
+xyes) AC_DEFINE(G_HAVE___INLINE,1,[Have __inline keyword])
+esac
+AC_CACHE_CHECK([for __inline__],glib_cv_has__inline__,[
+        AC_COMPILE_IFELSE([
+	__inline__ int foo () { return 0; }
+	int main () { return foo (); }
+       	],
+	glib_cv_has__inline__=yes
+        ,
+	glib_cv_has__inline__=no
+        ,)
+])
+case x$glib_cv_has__inline__ in
+xyes) AC_DEFINE(G_HAVE___INLINE__,1,[Have __inline__ keyword])
+esac
+AC_CACHE_CHECK([for inline], glib_cv_hasinline,[
+        AC_COMPILE_IFELSE([
+	#undef inline
+	inline int foo () { return 0; }
+	int main () { return foo (); }
+       	],
+	glib_cv_hasinline=yes
+        ,
+	glib_cv_hasinline=no
+        ,)
+])
+case x$glib_cv_hasinline in
+xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
+esac
+
+# if we can use inline functions in headers
+AC_MSG_CHECKING(if inline functions in headers work)
+AC_LINK_IFELSE([
+#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
+#  undef inline
+#  define inline __inline__
+#elif !defined (G_HAVE_INLINE)
+#  undef inline
+#  if defined (G_HAVE___INLINE__)
+#    define inline __inline__
+#  elif defined (G_HAVE___INLINE)
+#    define inline __inline
+#  endif
+#endif
+
+int glib_test_func2 (int);
+
+static inline int
+glib_test_func1 (void) {
+  return glib_test_func2 (1);
+}
+
+int
+main (void) {
+  int i = 1;
+}],[g_can_inline=yes],[g_can_inline=no])
+AC_MSG_RESULT($g_can_inline)
+
+dnl *** check for working do while(0) macros ***
+AC_CACHE_CHECK([for working do while(0) macros], g_cv_support_dowhile_macros, [
+	AC_TRY_COMPILE([],[
+	#define STMT_START do
+	#define STMT_END while(0)
+	#define STMT_TEST STMT_START { i = 0; } STMT_END
+	int main(void) { int i = 1; STMT_TEST; return i; }],
+	[g_cv_support_dowhile_macros=yes],
+	[g_cv_support_dowhile_macros=no],
+	[g_cv_support_dowhile_macros=yes])
+])
+if test x$g_cv_support_dowhile_macros = xyes; then
+  AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
+fi
+
+# check for flavours of varargs macros
+AC_MSG_CHECKING(for ISO C99 varargs macros in C)
+AC_TRY_COMPILE([],[
+int a(int p1, int p2, int p3);
+#define call_a(...) a(1,__VA_ARGS__)
+call_a(2,3);
+],g_have_iso_c_varargs=yes,g_have_iso_c_varargs=no)
+AC_MSG_RESULT($g_have_iso_c_varargs)
+
+AC_MSG_CHECKING(for ISO C99 varargs macros in C++)
+if test "$CXX" = ""; then
+dnl No C++ compiler
+  g_have_iso_cxx_varargs=no
+else
+  AC_LANG_CPLUSPLUS
+  AC_TRY_COMPILE([],[
+int a(int p1, int p2, int p3);
+#define call_a(...) a(1,__VA_ARGS__)
+call_a(2,3);
+],g_have_iso_cxx_varargs=yes,g_have_iso_cxx_varargs=no)
+  AC_LANG_C
+fi
+AC_MSG_RESULT($g_have_iso_cxx_varargs)
+
+AC_MSG_CHECKING(for GNUC varargs macros)
+AC_TRY_COMPILE([],[
+int a(int p1, int p2, int p3);
+#define call_a(params...) a(1,params)
+call_a(2,3);
+],g_have_gnuc_varargs=yes,g_have_gnuc_varargs=no)
+AC_MSG_RESULT($g_have_gnuc_varargs)
+
+# check for GNUC visibility support
+AC_MSG_CHECKING(for GNUC visibility attribute)
+GLIB_CHECK_COMPILE_WARNINGS([
+void
+__attribute__ ((visibility ("hidden")))
+     f_hidden (void)
+{
+}
+void
+__attribute__ ((visibility ("internal")))
+     f_internal (void)
+{
+}
+void
+__attribute__ ((visibility ("protected")))
+     f_protected (void)
+{
+}
+void
+__attribute__ ((visibility ("default")))
+     f_default (void)
+{
+}
+int main (int argc, char **argv)
+{
+	f_hidden();
+	f_internal();
+	f_protected();
+	f_default();
+	return 0;
+}
+],g_have_gnuc_visibility=yes,g_have_gnuc_visibility=no)
+AC_MSG_RESULT($g_have_gnuc_visibility)
+AM_CONDITIONAL(HAVE_GNUC_VISIBILITY, [test x$g_have_gnuc_visibility = xyes])
+
+AC_MSG_CHECKING([whether using Sun Studio C compiler])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if defined(__SUNPRO_C) || (__SUNPRO_C >= 0x550)
+#else
+# include "error: this is not Sun Studio."
+#endif
+]], [[]])], [ g_have_sunstudio_visibility=yes ], [ g_have_sunstudio_visibility=no ])
+AC_MSG_RESULT($g_have_sunstudio_visibility)
+AM_CONDITIONAL(HAVE_SUNSTUDIO_VISIBILITY, [test x$g_have_sunstudio_visibility = xyes])
+
+# check for bytesex stuff
+AC_C_BIGENDIAN
+if test x$ac_cv_c_bigendian = xuniversal ; then
+AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __BIG_ENDIAN
+#else
+#error Not a big endian. 
+#endif],
+    ac_cv_c_bigendian=yes
+    ,AC_TRY_COMPILE([#include <endian.h>], [#if __BYTE_ORDER == __LITTLE_ENDIAN
+#else
+#error Not a little endian. 
+#endif],
+    ac_cv_c_bigendian=no
+    ,AC_MSG_WARN([Could not determine endianness.])))
+fi
+
+
+# check for header files
+AC_CHECK_HEADERS([dirent.h float.h limits.h pwd.h grp.h sys/param.h sys/poll.h sys/resource.h])
+AC_CHECK_HEADERS([sys/time.h sys/times.h sys/wait.h unistd.h values.h])
+AC_CHECK_HEADERS([sys/select.h sys/types.h stdint.h sched.h malloc.h])
+AC_CHECK_HEADERS([sys/vfs.h sys/mount.h sys/vmount.h sys/statfs.h sys/statvfs.h])
+AC_CHECK_HEADERS([mntent.h sys/mnttab.h sys/vfstab.h sys/mntctl.h sys/sysctl.h fstab.h])
+
+# check for structure fields
+AC_CHECK_MEMBERS([struct stat.st_mtimensec, struct stat.st_mtim.tv_nsec, struct stat.st_atimensec, struct stat.st_atim.tv_nsec, struct stat.st_ctimensec, struct stat.st_ctim.tv_nsec])
+AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct statfs.f_fstypename, struct statfs.f_bavail],,, [#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#ifdef HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif])
+# struct statvfs.f_basetype is available on Solaris but not for Linux. 
+AC_CHECK_MEMBERS([struct statvfs.f_basetype],,, [#include <sys/statvfs.h>])
+
+# Checks for libcharset
+AM_LANGINFO_CODESET
+gl_GLIBC21
+AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
+AC_CHECK_FUNCS(setlocale)
+
+# check additional type sizes
+AC_CHECK_SIZEOF(size_t)
+
+dnl Try to figure out whether gsize, gssize should be long or int
+AC_MSG_CHECKING([for the appropriate definition for size_t])
+
+case $ac_cv_sizeof_size_t in
+  $ac_cv_sizeof_short) 
+      glib_size_type=short
+      ;;
+  $ac_cv_sizeof_int) 
+      glib_size_type=int
+      ;;
+  $ac_cv_sizeof_long) 
+      glib_size_type=long
+      ;;
+  $ac_cv_sizeof_long_long)
+      glib_size_type='long long'
+      ;;
+  $ac_cv_sizeof__int64)
+      glib_size_type='__int64'
+      ;;
+  *)  AC_MSG_ERROR([No type matching size_t in size])
+      ;;
+esac
+
+dnl If int/long are the same size, we see which one produces
+dnl warnings when used in the location as size_t. (This matters
+dnl on AIX with xlc)
+dnl
+if test $ac_cv_sizeof_size_t = $ac_cv_sizeof_int &&
+   test $ac_cv_sizeof_size_t = $ac_cv_sizeof_long ; then
+  GLIB_CHECK_COMPILE_WARNINGS([
+#if defined(_AIX) && !defined(__GNUC__)
+#pragma options langlvl=stdc89
+#endif
+#include <stddef.h> 
+int main ()
+{
+  size_t s = 1;
+  unsigned int *size_int = &s;
+  return (int)*size_int;
+}
+    ],glib_size_type=int,
+      [GLIB_CHECK_COMPILE_WARNINGS([
+#if defined(_AIX) && !defined(__GNUC__)
+#pragma options langlvl=stdc89
+#endif
+#include <stddef.h> 
+int main ()
+{
+   size_t s = 1;
+   unsigned long *size_long = &s;
+   return (int)*size_long;
+}
+        ],glib_size_type=long)])
+fi
+
+AC_MSG_RESULT(unsigned $glib_size_type)
+
+# Check for some functions
+AC_CHECK_FUNCS(lstat strerror strsignal memmove vsnprintf stpcpy strcasecmp strncasecmp poll getcwd vasprintf setenv unsetenv getc_unlocked readlink symlink fdwalk)
+AC_CHECK_FUNCS(chown lchown fchmod fchown link statvfs statfs utimes getgrgid getpwuid)
+AC_CHECK_FUNCS(getmntent_r setmntent endmntent hasmntopt getmntinfo)
+# Check for high-resolution sleep functions
+AC_CHECK_FUNCS(nanosleep nsleep)
+
+AC_CHECK_HEADERS(crt_externs.h)
+AC_CHECK_FUNCS(_NSGetEnviron)
+
+AC_FUNC_VSNPRINTF_C99
+AC_FUNC_PRINTF_UNIX98
+
+dnl
+dnl if statfs() takes 2 arguments (Posix) or 4 (Solaris)
+dnl
+if test "$ac_cv_func_statfs" = yes ; then
+  AC_MSG_CHECKING([number of arguments to statfs()])
+  AC_TRY_COMPILE([#include <unistd.h>
+  #ifdef HAVE_SYS_PARAM_H
+  #include <sys/param.h>
+  #endif
+  #ifdef HAVE_SYS_VFS_H
+  #include <sys/vfs.h>
+  #endif
+  #ifdef HAVE_SYS_MOUNT_H
+  #include <sys/mount.h>
+  #endif
+  #ifdef HAVE_SYS_STATFS_H
+  #include <sys/statfs.h>
+  #endif], [struct statfs st;
+  statfs(NULL, &st);],[
+    AC_MSG_RESULT([2])
+    AC_DEFINE(STATFS_ARGS, 2, [Number of arguments to statfs()])],[
+    AC_TRY_COMPILE([#include <unistd.h>
+  #ifdef HAVE_SYS_PARAM_H
+  #include <sys/param.h>
+  #endif
+  #ifdef HAVE_SYS_VFS_H
+  #include <sys/vfs.h>
+  #endif
+  #ifdef HAVE_SYS_MOUNT_H
+  #include <sys/mount.h>
+  #endif
+  #ifdef HAVE_SYS_STATFS_H
+  #include <sys/statfs.h>
+  #endif], [struct statfs st;
+  statfs(NULL, &st, sizeof (st), 0);],[
+      AC_MSG_RESULT([4])
+      AC_DEFINE(STATFS_ARGS, 4, [Number of arguments to statfs()])],[
+      AC_MSG_RESULT(unknown)
+      AC_MSG_ERROR([unable to determine number of arguments to statfs()])])])
+fi
+
+#
+# Check whether to use an included printf
+#
+
+AC_ARG_ENABLE(included-printf,
+              [AC_HELP_STRING([--enable-included-printf],
+                              [use included printf [default=auto]])],
+              enable_included_printf="$enableval")
+
+need_included_printf=no
+if test "x$enable_included_printf" = "xyes" ; then
+  need_included_printf=yes
+fi
+if test "$ac_cv_func_vsnprintf_c99" != "yes" ; then
+  need_included_printf=yes
+fi
+if test "$ac_cv_func_printf_unix98" != "yes" ; then
+  need_included_printf=yes
+fi
+if test "x$ac_cv_sizeof_long_long" = "x8" &&
+   test -z "$glib_cv_long_long_format" ; then
+  need_included_printf=yes
+fi
+
+if test "x$enable_included_printf" = "xno" && 
+   test "x$need_included_printf" = "xyes" ; then
+  AC_MSG_ERROR([
+*** Your C library's printf doesn't appear to have the features that
+*** GLib needs, but you specified --enable-included-printf=no.])
+fi
+
+enable_included_printf=$need_included_printf
+
+AM_CONDITIONAL(HAVE_GOOD_PRINTF, test "$enable_included_printf" != "yes")
+if test "$enable_included_printf" != "yes" ; then 
+  AC_DEFINE(HAVE_GOOD_PRINTF,1,[define to use system printf])
+else
+  if test -z "$glib_cv_long_long_format" ; then
+    glib_cv_long_long_format="ll"
+  fi
+  AC_DEFINE(HAVE_VASPRINTF,1)
+fi
+
+# Checks needed for gnulib vasnprintf
+bh_C_SIGNED
+jm_AC_TYPE_LONG_LONG
+gt_TYPE_LONGDOUBLE
+gt_TYPE_WCHAR_T
+gt_TYPE_WINT_T
+AC_TYPE_SIZE_T
+AC_CHECK_TYPES(ptrdiff_t)
+jm_AC_TYPE_INTMAX_T
+AC_CHECK_FUNCS([snprintf wcslen])
+AC_FUNC_SNPRINTF_C99
+
+# Check if bcopy can be used for overlapping copies, if memmove isn't found.
+# The check is borrowed from the PERL Configure script.
+if test "$ac_cv_func_memmove" != "yes"; then
+  AC_CACHE_CHECK(whether bcopy can handle overlapping copies,
+    glib_cv_working_bcopy,[AC_TRY_RUN([
+      int main() {
+        char buf[128], abc[128], *b;
+        int len, off, align;
+        bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
+        for (align = 7; align >= 0; align--) {
+          for (len = 36; len; len--) {
+            b = buf+align; bcopy(abc, b, len);
+            for (off = 1; off <= len; off++) {
+              bcopy(b, b+off, len); bcopy(b+off, b, len);
+                if (bcmp(b, abc, len)) return(1);
+            }
+          }
+        }
+        return(0);
+      }],glib_cv_working_bcopy=yes,glib_cv_working_bcopy=no)])
+
+  GLIB_ASSERT_SET(glib_cv_working_bcopy)
+  if test "$glib_cv_working_bcopy" = "yes"; then
+    AC_DEFINE(HAVE_WORKING_BCOPY,1,[Have a working bcopy])
+  fi
+fi
+
+# Check for sys_errlist
+AC_MSG_CHECKING(for sys_errlist)
+AC_TRY_LINK(, [
+extern char *sys_errlist[];
+extern int sys_nerr;
+sys_errlist[sys_nerr-1][0] = 0;
+], glib_ok=yes, glib_ok=no)
+AC_MSG_RESULT($glib_ok)
+if test "$glib_ok" = "no"; then
+    AC_DEFINE(NO_SYS_ERRLIST,1,[global 'sys_errlist' not found])
+fi
+
+# Check for sys_siglist
+AC_MSG_CHECKING(for sys_siglist)
+AC_TRY_LINK(, [
+extern char *sys_siglist[];
+exit (sys_siglist[0]);
+], glib_ok=yes, glib_ok=no)
+AC_MSG_RESULT($glib_ok)
+if test "$glib_ok" = "no"; then
+    AC_DEFINE(NO_SYS_SIGLIST,1,[global 'sys_siglist' not found])
+fi
+
+# Check for sys_siglist decl (see Tue Jan 19 00:44:24 1999 in changelog)
+AC_MSG_CHECKING(for sys_siglist declaration)
+AC_TRY_COMPILE([#include <signal.h>], [
+strlen (sys_siglist[0]);
+], glib_ok=yes, glib_ok=no)
+AC_MSG_RESULT($glib_ok)
+if test "$glib_ok" = "no"; then
+    AC_DEFINE(NO_SYS_SIGLIST_DECL,1,[global 'sys_siglist' not declared])
+fi
+
+# Check if <sys/select.h> needs to be included for fd_set
+AC_MSG_CHECKING([for fd_set])
+AC_TRY_COMPILE([#include <sys/types.h>],
+        [fd_set readMask, writeMask;], gtk_ok=yes, gtk_ok=no)
+if test "$gtk_ok" = "yes"; then
+    AC_MSG_RESULT([yes, found in sys/types.h])
+else
+    AC_EGREP_HEADER(fd_set, sys/select.h, gtk_ok=yes)
+    if test "$gtk_ok" = "yes"; then
+	# *** FIXME: give it a different name
+        AC_DEFINE(HAVE_SYS_SELECT_H,1,[found fd_set in sys/select.h])
+        AC_MSG_RESULT([yes, found in sys/select.h])
+    else
+	AC_DEFINE(NO_FD_SET,1,[didn't find fd_set])
+	AC_MSG_RESULT(no)
+    fi
+fi
+
+dnl *** check for sane realloc() ***
+AC_CACHE_CHECK([whether realloc (NULL,) will work],glib_cv_sane_realloc,[
+        AC_TRY_RUN([#include <stdlib.h>
+        int main() {
+          return realloc (0, sizeof (int)) == 0;
+        }],
+        [glib_cv_sane_realloc=yes],
+        [glib_cv_sane_realloc=no],
+	[glib_cv_sane_realloc=yes])
+])
+if test x$glib_cv_sane_realloc = xyes; then
+  AC_DEFINE(REALLOC_0_WORKS,1,[whether realloc (NULL,) works])
+fi
+
+dnl Check for nl_langinfo and CODESET
+AC_CACHE_CHECK([for nl_langinfo (CODESET)],glib_cv_langinfo_codeset,[
+        AC_TRY_COMPILE([#include <langinfo.h>],
+                [char *codeset = nl_langinfo (CODESET);],
+                [glib_cv_langinfo_codeset=yes],
+                [glib_cv_langinfo_codeset=no])])
+if test x$glib_cv_langinfo_codeset = xyes; then
+  AC_DEFINE(HAVE_CODESET,1,[Have nl_langinfo (CODESET)])
+fi
+
+dnl ****************************************
+dnl *** posix_memalign                   ***
+dnl ****************************************
+AC_MSG_CHECKING(for a compliant posix_memalign() implementation)
+AC_CACHE_VAL(glib_cv_compliant_posix_memalign,[
+    glib_cv_compliant_posix_memalign=0
+    if test "$ac_cv_func_posix_memalign" = "yes" ; then
+	AC_TRY_RUN([
+                #define _XOPEN_SOURCE 600
+                #include <stdlib.h> /* posix_memalign() should be defined here */
+                /* some systems break if #include <malloc.h> used */
+		static void test_memalign (size_t boundary, size_t size) {
+		    void *mem = 0;
+		    if (posix_memalign (&mem, boundary, size) != 0 || !mem)
+			exit (1);
+                    else
+                      free (mem);
+		}
+		int main() {
+		    test_memalign (  128,   128 - 2 * sizeof (void*));
+		    test_memalign (  256,   256 - 2 * sizeof (void*));
+		    test_memalign (  512,   512 - 2 * sizeof (void*));
+		    test_memalign ( 1024,  1024 - 2 * sizeof (void*));
+		    test_memalign ( 2048,  2048 - 2 * sizeof (void*));
+		    test_memalign ( 4096,  4096 - 2 * sizeof (void*));
+		    test_memalign ( 8192,  8192 - 2 * sizeof (void*));
+		    test_memalign (16384, 16384 - 2 * sizeof (void*));
+		    test_memalign (32768, 32768 - 2 * sizeof (void*));
+		    exit (0); /* success */
+		}
+		],
+	    [glib_cv_compliant_posix_memalign=1], [], [:])
+      :
+    fi
+    ])
+if test "$glib_cv_compliant_posix_memalign" = "1"; then
+    AC_MSG_RESULT(yes)
+    AC_DEFINE(POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS, 1, [define if posix_memalign() can allocate any size])
+else
+    AC_MSG_RESULT(no)
+fi
+
+
+dnl ****************************************
+dnl *** strlcpy/strlcat                  ***
+dnl ****************************************
+# Check for strlcpy
+AC_CACHE_CHECK([for OpenBSD strlcpy/strlcat],glib_cv_have_strlcpy,[
+AC_TRY_RUN([#include <stdlib.h>
+#include <string.h>
+int main() {
+  char p[10];
+  (void) strlcpy (p, "hi", 10);
+  if (strlcat (p, "bye", 0) != 3) 
+    return 1;
+  return 0;
+}], glib_cv_have_strlcpy=yes, 
+    glib_cv_have_strlcpy=no,
+    glib_cv_have_strlcpy=no)])
+if test "$glib_cv_have_strlcpy" = "yes"; then
+    AC_DEFINE(HAVE_STRLCPY,1,[Have functions strlcpy and strlcat])
+fi
+  
+
+dnl **********************
+dnl *** va_copy checks ***
+dnl **********************
+dnl we currently check for all three va_copy possibilities, so we get
+dnl all results in config.log for bug reports.
+AC_CACHE_CHECK([for an implementation of va_copy()],glib_cv_va_copy,[
+	AC_LINK_IFELSE([#include <stdarg.h>
+#include <stdlib.h>
+	void f (int i, ...) {
+	va_list args1, args2;
+	va_start (args1, i);
+	va_copy (args2, args1);
+	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
+	  exit (1);
+	va_end (args1); va_end (args2);
+	}
+	int main() {
+	  f (0, 42);
+	  return 0;
+	}],
+	[glib_cv_va_copy=yes],
+	[glib_cv_va_copy=no])
+])
+AC_CACHE_CHECK([for an implementation of __va_copy()],glib_cv___va_copy,[
+	AC_LINK_IFELSE([#include <stdarg.h>
+#include <stdlib.h>
+	void f (int i, ...) {
+	va_list args1, args2;
+	va_start (args1, i);
+	__va_copy (args2, args1);
+	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
+	  exit (1);
+	va_end (args1); va_end (args2);
+	}
+	int main() {
+	  f (0, 42);
+	  return 0;
+	}],
+	[glib_cv___va_copy=yes],
+	[glib_cv___va_copy=no])
+])
+
+if test "x$glib_cv_va_copy" = "xyes"; then
+  g_va_copy_func=va_copy
+else if test "x$glib_cv___va_copy" = "xyes"; then
+  g_va_copy_func=__va_copy
+fi
+fi
+
+if test -n "$g_va_copy_func"; then
+  AC_DEFINE_UNQUOTED(G_VA_COPY,$g_va_copy_func,[A 'va_copy' style function])
+fi
+
+AC_CACHE_CHECK([whether va_lists can be copied by value],glib_cv_va_val_copy,[
+	AC_TRY_RUN([#include <stdarg.h>
+#include <stdlib.h> 
+	void f (int i, ...) {
+	va_list args1, args2;
+	va_start (args1, i);
+	args2 = args1;
+	if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
+	  exit (1);
+	va_end (args1); va_end (args2);
+	}
+	int main() {
+	  f (0, 42);
+	  return 0;
+	}],
+	[glib_cv_va_val_copy=yes],
+	[glib_cv_va_val_copy=no],
+	[glib_cv_va_val_copy=yes])
+])
+
+if test "x$glib_cv_va_val_copy" = "xno"; then
+  AC_DEFINE(G_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
+fi
+
+dnl ***********************
+dnl *** g_module checks ***
+dnl ***********************
+G_MODULE_LIBS=
+G_MODULE_LIBS_EXTRA=
+G_MODULE_PLUGIN_LIBS=
+if test x"$glib_native_win32" = xyes; then
+  dnl No use for this on Win32
+  G_MODULE_LDFLAGS=
+else
+  export SED
+  G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+fi
+dnl G_MODULE_IMPL= don't reset, so cmd-line can override
+G_MODULE_NEED_USCORE=0
+G_MODULE_BROKEN_RTLD_GLOBAL=0
+G_MODULE_HAVE_DLERROR=0
+dnl *** force native WIN32 shared lib loader 
+if test -z "$G_MODULE_IMPL"; then
+  case "$host" in
+  *-*-mingw*|*-*-cygwin*) G_MODULE_IMPL=G_MODULE_IMPL_WIN32 ;;
+  esac
+fi
+dnl *** force native AIX library loader
+dnl *** dlopen() filepath must be of the form /path/libname.a(libname.so)
+if test -z "$G_MODULE_IMPL"; then
+  case "$host" in
+  *-*-aix*) G_MODULE_IMPL=G_MODULE_IMPL_AR ;;
+  esac
+fi
+dnl *** dlopen() and dlsym() in system libraries
+if test -z "$G_MODULE_IMPL"; then
+	AC_CHECK_FUNC(dlopen,
+		      [AC_CHECK_FUNC(dlsym,
+			             [G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
+		      [])
+fi
+dnl *** load_image (BeOS)
+if test -z "$G_MODULE_IMPL" && test "x$glib_native_beos" = "xyes"; then
+  AC_CHECK_LIB(root, load_image,
+      [G_MODULE_LIBS="-lbe -lroot -lglib-2.0 "
+      G_MODULE_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
+      G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
+      G_MODULE_IMPL=G_MODULE_IMPL_BEOS],
+      [])
+fi   
+dnl *** NSLinkModule (dyld) in system libraries (Darwin)
+if test -z "$G_MODULE_IMPL"; then
+ 	AC_CHECK_FUNC(NSLinkModule,
+		      [G_MODULE_IMPL=G_MODULE_IMPL_DYLD
+		       G_MODULE_NEED_USCORE=1],
+		      [])
+fi
+dnl *** dlopen() and dlsym() in libdl
+if test -z "$G_MODULE_IMPL"; then
+	AC_CHECK_LIB(dl, dlopen,
+		     [AC_CHECK_LIB(dl, dlsym,
+			           [G_MODULE_LIBS=-ldl
+		                   G_MODULE_IMPL=G_MODULE_IMPL_DL],[])],
+		     [])
+fi
+dnl *** shl_load() in libdld (HP-UX)
+if test -z "$G_MODULE_IMPL"; then
+	AC_CHECK_LIB(dld, shl_load,
+		[G_MODULE_LIBS=-ldld
+		G_MODULE_IMPL=G_MODULE_IMPL_DLD],
+		[])
+fi
+dnl *** additional checks for G_MODULE_IMPL_DL
+if test "$G_MODULE_IMPL" = "G_MODULE_IMPL_DL"; then
+	LIBS_orig="$LIBS"
+	LDFLAGS_orig="$LDFLAGS"
+	LIBS="$G_MODULE_LIBS $LIBS"
+	LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
+dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
+	echo "void glib_plugin_test(void) { }" > plugin.c
+	${SHELL} ./libtool --mode=compile ${CC} -shared \
+		-export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
+	AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
+		glib_cv_rtldglobal_broken,[
+		AC_TRY_RUN([
+#include <dlfcn.h>
+#ifndef RTLD_GLOBAL
+#  define RTLD_GLOBAL 0
+#endif
+#ifndef RTLD_LAZY
+#  define RTLD_LAZY 0
+#endif
+int glib_plugin_test;
+int main () {
+    void *handle, *global, *local;
+    global = &glib_plugin_test;
+    handle = dlopen ("./.libs/plugin.o", RTLD_GLOBAL | RTLD_LAZY);
+    if (!handle) return 0;
+    local = dlsym (handle, "glib_plugin_test");
+    return global == local;
+}                       ],
+			[glib_cv_rtldglobal_broken=no],
+			[glib_cv_rtldglobal_broken=yes],
+			[glib_cv_rtldglobal_broken=no])
+		rm -f plugin.c plugin.o plugin.lo .libs/plugin.o
+		rmdir .libs 2>/dev/null
+	])
+	if test "x$glib_cv_rtldglobal_broken" = "xyes"; then
+  		G_MODULE_BROKEN_RTLD_GLOBAL=1
+	else
+  		G_MODULE_BROKEN_RTLD_GLOBAL=0
+	fi
+dnl *** check whether we need preceeding underscores
+	AC_CACHE_CHECK([for preceeding underscore in symbols],
+		glib_cv_uscore,[
+		AC_TRY_RUN([#include <dlfcn.h>
+                int glib_underscore_test (void) { return 42; }
+		int main() {
+		  void *f1 = (void*)0, *f2 = (void*)0, *handle;
+		  handle = dlopen ((void*)0, 0);
+		  if (handle) {
+		    f1 = dlsym (handle, "glib_underscore_test");
+		    f2 = dlsym (handle, "_glib_underscore_test");
+		  } return (!f2 || f1);
+		}],
+			[glib_cv_uscore=yes],
+			[glib_cv_uscore=no],
+			[])
+		rm -f plugin.c plugin.$ac_objext plugin.lo
+	])
+        GLIB_ASSERT_SET(glib_cv_uscore)
+	if test "x$glib_cv_uscore" = "xyes"; then
+  		G_MODULE_NEED_USCORE=1
+	else
+  		G_MODULE_NEED_USCORE=0
+	fi
+
+	LDFLAGS="$LDFLAGS_orig"
+dnl *** check for having dlerror()
+	AC_CHECK_FUNC(dlerror,
+		[G_MODULE_HAVE_DLERROR=1],
+		[G_MODULE_HAVE_DLERROR=0])
+	LIBS="$LIBS_orig"
+fi
+dnl *** done, have we got an implementation?
+if test -z "$G_MODULE_IMPL"; then
+	G_MODULE_IMPL=0
+        G_MODULE_SUPPORTED=false
+else
+        G_MODULE_SUPPORTED=true
+fi
+
+AC_MSG_CHECKING(for the suffix of module shared libraries)
+export SED
+shrext_cmds=`./libtool --config | grep '^shrext_cmds='`
+eval $shrext_cmds
+module=yes eval std_shrext=$shrext_cmds
+# chop the initial dot
+glib_gmodule_suffix=`echo $std_shrext | sed 's/^\.//'`
+AC_MSG_RESULT(.$glib_gmodule_suffix)
+# any reason it may fail?
+if test "x$glib_gmodule_suffix" = x; then
+	AC_MSG_ERROR(Cannot determine shared library suffix from libtool)
+fi
+ 
+AC_SUBST(G_MODULE_SUPPORTED)
+AC_SUBST(G_MODULE_IMPL)
+AC_SUBST(G_MODULE_LIBS)
+AC_SUBST(G_MODULE_LIBS_EXTRA)
+AC_SUBST(G_MODULE_PLUGIN_LIBS)
+AC_SUBST(G_MODULE_LDFLAGS)
+AC_SUBST(G_MODULE_HAVE_DLERROR)
+AC_SUBST(G_MODULE_BROKEN_RTLD_GLOBAL)
+AC_SUBST(G_MODULE_NEED_USCORE)
+AC_SUBST(GLIB_DEBUG_FLAGS)
+
+dnl **********************
+dnl *** g_spawn checks ***
+dnl **********************
+
+AC_MSG_CHECKING(for gspawn implementation)
+case "$host" in
+  *-*-mingw*)
+    GSPAWN=gspawn-win32.lo
+    ;;
+  *)
+    GSPAWN=gspawn.lo
+    ;;    
+esac
+AC_MSG_RESULT($GSPAWN)
+AC_SUBST(GSPAWN)
+
+dnl *************************
+dnl *** GIOChannel checks ***
+dnl *************************
+
+AC_MSG_CHECKING(for GIOChannel implementation)
+case "$host" in
+  *-*-mingw*)
+    GIO=giowin32.lo
+    ;;
+  *)
+    GIO=giounix.lo
+    ;;    
+esac
+AC_MSG_RESULT($GIO)
+AC_SUBST(GIO)
+
+dnl *********************************
+dnl *** Directory for GIO modules ***
+dnl *********************************
+
+AC_ARG_WITH(gio-module-dir,
+           [AC_HELP_STRING([--with-gio-module-dir=PATH],
+                           [Load gio modules from this directory [LIBDIR/gio/modules]])],
+           [],
+	   [with_gio_module_dir='${libdir}/gio/modules'])
+GIO_MODULE_DIR=$with_gio_module_dir
+AC_SUBST(GIO_MODULE_DIR)
+
+dnl **********************************
+dnl *** Check for libselinux (GIO) ***
+dnl **********************************
+AC_ARG_ENABLE(selinux, [  --disable-selinux       build without selinux support])
+msg_selinux=no
+SELINUX_LIBS=
+if test "x$enable_selinux" != "xno"; then
+
+ AC_CHECK_LIB(selinux, is_selinux_enabled,
+   [AC_CHECK_HEADERS(selinux/selinux.h,
+     [AC_CHECK_LIB(selinux, lgetfilecon_raw, 
+       [AC_DEFINE(HAVE_SELINUX, 1, [Define to 1 if libselinux is available])
+        SELINUX_LIBS="-lselinux"
+        msg_selinux=yes])
+     ])
+   ])
+fi
+AC_SUBST(SELINUX_LIBS)
+
+dnl *****************************
+dnl ** Check for inotify (GIO) **
+dnl *****************************
+inotify_support=no
+AC_CHECK_HEADERS([sys/inotify.h],
+[
+	inotify_support=yes
+])
+
+AM_CONDITIONAL(HAVE_INOTIFY, [test "$inotify_support" = "yes"])
+
+dnl *********************************
+dnl ** Check for Solaris FEN (GIO) **
+dnl *********************************
+fen_support=no
+AC_COMPILE_IFELSE([ 
+#include <port.h> 
+#ifndef PORT_SOURCE_FILE 
+#error "Please upgrade to Nevada 72 or above to suppoert FEN" 
+#endif 
+int main() { return 0; } ],
+[
+	fen_support=yes
+],)
+
+AM_CONDITIONAL(HAVE_FEN, [test "$fen_support" = "yes"])
+
+dnl ****************************
+dnl *** Checks for FAM (GIO) ***
+dnl ****************************
+
+should_disable_fam=no
+
+AC_ARG_ENABLE(fam, [  --disable-fam          build without enabling fam for file system monitoring],
+                         [
+                                if test "x$enable_fam" = "xno"; then
+                                        should_disable_fam=yes
+                                        echo "Not building FAM support"
+                                fi
+                         ]
+                         )
+fam_support=no
+FAM_LIBS=
+if test "x$should_disable_fam" = "xno"; then
+AC_CHECK_LIB(fam, FAMOpen,
+  [AC_CHECK_HEADERS(fam.h,
+    [AC_DEFINE(HAVE_FAM, [], [Define if we have FAM])
+     AC_CHECK_LIB(fam, FAMNoExists,
+     		  AC_DEFINE(HAVE_FAM_NO_EXISTS, [], [Define if we have FAMNoExists in fam]))
+     FAM_LIBS="-lfam"]
+     fam_support=yes,
+    AC_MSG_WARN(*** FAM support will not be built (header files not found) ***))],
+  AC_MSG_WARN(*** FAM support will not be built (FAM library not found) ***))
+AC_SUBST(FAM_LIBS)
+fi
+AM_CONDITIONAL(HAVE_FAM, [test "$fam_support" = "yes"])
+
+
+dnl *****************************
+dnl *** Check for xattr (GIO) ***
+dnl *****************************
+AC_ARG_ENABLE(xattr, [  --disable-xattr           build without xattr support])
+msg_xattr=no
+XATTR_LIBS=
+if test "x$enable_xattr" != "xno"; then
+
+dnl either glibc or libattr can provide xattr support
+
+dnl for both of them, we check for getxattr being in
+dnl the library and a valid xattr header.
+
+dnl try glibc
+ AC_CHECK_LIB(c, getxattr,
+   [AC_CHECK_HEADERS(sys/xattr.h,
+     [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
+      msg_xattr=yes])
+   ])
+
+  if test "x$msg_xattr" != "xyes"; then
+dnl   failure. try libattr
+   AC_CHECK_LIB(attr, getxattr,
+      [AC_CHECK_HEADERS(attr/xattr.h,
+       [AC_DEFINE(HAVE_XATTR, 1, [Define to 1 if xattr is available])
+        XATTR_LIBS="-lattr"
+        msg_xattr=yes])
+      ])
+  fi
+
+  if test "x$msg_xattr" = "xyes"; then
+    AC_MSG_CHECKING([for XATTR_NOFOLLOW])
+    AC_TRY_COMPILE([
+      #include <stdio.h>
+      #ifdef HAVE_SYS_TYPES_H
+      #include <sys/types.h>
+      #endif
+      #ifdef HAVE_SYS_XATTR_H
+      #include <sys/xattr.h>
+      #elif HAVE_ATTR_XATTR_H
+      #include <attr/xattr.h>
+      #endif
+    ],
+    [ssize_t len = getxattr("", "", NULL, 0, 0, XATTR_NOFOLLOW);],
+    [
+      AC_DEFINE([HAVE_XATTR_NOFOLLOW], [1], [Define to 1 if xattr API uses XATTR_NOFOLLOW])
+      AC_MSG_RESULT([yes])
+    ],
+    [AC_MSG_RESULT([no])]
+    )
+  fi
+
+fi
+AC_SUBST(XATTR_LIBS)
+
+dnl ****************************************
+dnl *** platform dependent source checks ***
+dnl ****************************************
+
+AC_MSG_CHECKING(for platform-dependent source)
+case "$host" in
+  *-*-cygwin*|*-*-mingw*)
+    PLATFORMDEP=gwin32.lo
+    ;;
+  *)
+    PLATFORMDEP=
+    ;;    
+esac
+AC_MSG_RESULT($PLATFORMDEP)
+AC_SUBST(PLATFORMDEP)
+
+AC_MSG_CHECKING([whether to compile timeloop])
+case "$host" in
+  *-*-cygwin*|*-*-mingw*|*-*-minix)
+    enable_timeloop=no
+    ;;
+  *)
+    enable_timeloop=yes
+    ;;    
+esac
+AC_MSG_RESULT($enable_timeloop)
+AM_CONDITIONAL(ENABLE_TIMELOOP, test x$enable_timeloop = xyes)
+
+AC_MSG_CHECKING([if building for some Win32 platform])
+case "$host" in
+  *-*-mingw*|*-*-cygwin*)
+    platform_win32=yes
+    ;;
+  *)
+    platform_win32=no
+    ;;
+esac
+AC_MSG_RESULT($platform_win32)
+AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
+
+dnl ***********************
+dnl *** g_thread checks ***
+dnl ***********************
+
+AC_ARG_WITH(threads,
+           [AC_HELP_STRING([--with-threads=@<:@none/posix/dce/win32@:>@],
+                           [specify a thread implementation to use])],
+           [if test "x$with_threads" = x; then
+		want_threads=yes
+	    else
+		want_threads=$with_threads
+	    fi],
+	   [want_threads=yes])
+if test "x$enable_threads" = "xno"; then
+        want_threads=no
+fi
+
+dnl error and warning message
+dnl *************************
+
+THREAD_NO_IMPLEMENTATION="You do not have any known thread system on your
+                computer. GLib will not have a default thread implementation."
+
+FLAG_DOES_NOT_WORK="I can't find the MACRO to enable thread safety on your
+                platform (normally it's "_REENTRANT"). I'll not use any flag on
+                compilation now, but then your programs might not work.
+                Please provide information on how it is done on your system."
+
+LIBS_NOT_FOUND_1="I can't find the libraries for the thread implementation
+		"
+
+LIBS_NOT_FOUND_2=". Please choose another thread implementation or
+		provide information on your thread implementation.
+		You can also run 'configure --disable-threads' 
+		to compile without thread support."
+
+FUNC_NO_GETPWUID_R="the 'g_get_(user_name|real_name|home_dir|tmp_dir)'
+		functions will not be MT-safe during their first call because
+		there is no working 'getpwuid_r' on your system."
+
+FUNC_NO_LOCALTIME_R="the 'g_date_set_time' function will not be MT-safe
+		because there is no 'localtime_r' on your system."
+
+POSIX_NO_YIELD="I can not find a yield functions for your platform. A rather
+		crude surrogate will be used. If you happen to know a 
+		yield function for your system, please inform the GLib 
+		developers."
+
+POSIX_NO_PRIORITIES="I can not find the minimal and maximal priorities for 
+		threads on your system. Thus threads can only have the default 
+		priority. If you happen to know these main/max
+		priorities, please inform the GLib developers."
+
+AIX_COMPILE_INFO="AIX's C compiler needs to be called by a different name, when
+		linking threaded applications. As GLib cannot do that 
+		automatically, you will get an linkg error everytime you are 
+		not using the right compiler. In that case you have to relink 
+		with the right compiler. Ususally just '_r' is appended 
+		to the compiler name."
+
+dnl determination of thread implementation
+dnl ***************************************
+
+# have_threads=no   means no thread support
+# have_threads=none means no default thread implementation
+
+have_threads=no
+if test "x$want_threads" = xyes || test "x$want_threads" = xposix \
+				|| test "x$want_threads" = xdce; then
+	# -D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE is for DG/UX
+	# -U_OSF_SOURCE is for Digital UNIX 4.0d
+	GTHREAD_COMPILE_IMPL_DEFINES="-D_POSIX4_DRAFT_SOURCE -D_POSIX4A_DRAFT10_SOURCE -U_OSF_SOURCE"
+	glib_save_CPPFLAGS="$CPPFLAGS"
+	CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
+        if test "x$have_threads" = xno; then
+                AC_TRY_COMPILE([#include <pthread.h>],
+			[pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
+			have_threads=posix)
+        fi
+        if test "x$have_threads" = xno; then
+                AC_TRY_COMPILE([#include <pthread.h>],
+			[pthread_mutex_t m; 
+                         pthread_mutex_init (&m, pthread_mutexattr_default);],
+			have_threads=dce)
+        fi
+	# Tru64Unix requires -pthread to find pthread.h. See #103020
+	CPPFLAGS="$CPPFLAGS -pthread"
+	if test "x$have_threads" = xno; then
+	AC_TRY_COMPILE([#include <pthread.h>],
+		       [pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;],
+		       have_threads=posix)
+        fi
+	CPPFLAGS="$glib_save_CPPFLAGS"
+fi
+if test "x$want_threads" = xyes || test "x$want_threads" = xwin32; then
+       	case $host in
+               	*-*-mingw*)
+		have_threads=win32
+		;;
+	esac
+fi
+if test "x$want_threads" = xnone; then
+	have_threads=none
+fi
+
+AC_MSG_CHECKING(for thread implementation)
+
+if test "x$have_threads" = xno && test "x$want_threads" != xno; then
+	AC_MSG_RESULT(none available)
+        AC_MSG_WARN($THREAD_NO_IMPLEMENTATION)
+else
+	AC_MSG_RESULT($have_threads)
+fi
+
+
+dnl determination of G_THREAD_CFLAGS
+dnl ********************************
+
+G_THREAD_LIBS=
+G_THREAD_LIBS_EXTRA=
+G_THREAD_CFLAGS=
+
+dnl
+dnl Test program for basic POSIX threads functionality
+dnl
+m4_define([glib_thread_test],[
+#include <pthread.h> 
+int check_me = 0;
+void* func(void* data) {check_me = 42; return &check_me;}
+int main()
+ { pthread_t t; 
+   void *ret;
+   pthread_create (&t, $1, func, 0);
+   pthread_join (t, &ret);
+   return (check_me != 42 || ret != &check_me);
+}])
+
+dnl
+dnl Test program for sched_get_priority_min()
+dnl
+m4_define([glib_sched_priority_test],[
+#include <sched.h>
+#include <errno.h>
+int main() {
+    errno = 0;
+    return sched_get_priority_min(SCHED_OTHER)==-1
+ 	   && errno != 0;
+}])
+
+if test x"$have_threads" != xno; then
+
+  if test x"$have_threads" = xposix; then
+    # First we test for posix, whether -pthread or -pthreads do the trick as 
+    # both CPPFLAG and LIBS. 
+    # One of them does for most gcc versions and some other platforms/compilers
+    # too and could be considered as the canonical way to go. 
+    case $host in
+      *-*-cygwin*|*-*-darwin*)
+         # skip cygwin and darwin -pthread or -pthreads test
+         ;;
+      *-solaris*)
+        # These compiler/linker flags work with both Sun Studio and gcc
+	# Sun Studio expands -mt to -D_REENTRANT and -lthread
+	# gcc expands -pthreads to -D_REENTRANT -D_PTHREADS -lpthread
+        G_THREAD_CFLAGS="-D_REENTRANT -D_PTHREADS"
+        G_THREAD_LIBS="-lpthread -lthread"
+        ;;
+      *)
+        for flag in pthread pthreads mt; do
+          glib_save_CFLAGS="$CFLAGS"
+          CFLAGS="$CFLAGS -$flag"
+          AC_TRY_RUN(glib_thread_test(0),
+                     glib_flag_works=yes,
+                     glib_flag_works=no,
+                     [AC_LINK_IFELSE(glib_thread_test(0),
+                                     glib_flag_works=yes,
+                                     glib_flag_works=no)])
+          CFLAGS="$glib_save_CFLAGS"
+          if test $glib_flag_works = yes ; then
+             G_THREAD_CFLAGS=-$flag
+	     G_THREAD_LIBS=-$flag
+	     break;
+          fi
+        done
+         ;;
+    esac 
+  fi
+
+  if test x"$G_THREAD_CFLAGS" = x; then
+
+    # The canonical -pthread[s] does not work. Try something different.
+
+    case $host in
+	*-aix*)
+		if test x"$GCC" = xyes; then
+			# GCC 3.0 and above needs -pthread. 
+			# Should be coverd by the case above.
+			# GCC 2.x and below needs -mthreads
+			G_THREAD_CFLAGS="-mthreads"		
+			G_THREAD_LIBS=$G_THREAD_CFLAGS
+		else 
+			# We are probably using the aix compiler. Normaly a 
+			# program would have to be compiled with the _r variant
+			# of the corresponding compiler, but we as GLib cannot 
+			# do that: but the good news is that for compiling the
+			# only difference is the added -D_THREAD_SAFE compile 
+			# option. This is according to the "C for AIX User's 
+			# Guide".
+			G_THREAD_CFLAGS="-D_THREAD_SAFE"
+		fi
+		;;
+	*-dg-dgux*)  # DG/UX
+		G_THREAD_CFLAGS="-D_REENTRANT -D_POSIX4A_DRAFT10_SOURCE"
+		;;
+	*-osf*)
+		# So we are using dce threads. posix threads are already 
+		# catched above.
+		G_THREAD_CFLAGS="-threads"
+		G_THREAD_LIBS=$G_THREAD_CFLAGS
+		;;
+	*-sysv5uw7*) # UnixWare 7 
+		# We are not using gcc with -pthread. Catched above.
+		G_THREAD_CFLAGS="-Kthread"
+		G_THREAD_LIBS=$G_THREAD_CFLAGS
+		;;
+	*-mingw*)
+		# No flag needed when using MSVCRT.DLL
+		G_THREAD_CFLAGS=""
+		;;
+	*)
+		G_THREAD_CFLAGS="-D_REENTRANT" # good default guess otherwise
+		;;
+    esac
+ 
+  fi
+
+    # if we are not finding the localtime_r function, then we probably are
+    # not using the proper multithread flag
+
+    glib_save_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
+
+    # First we test, whether localtime_r is declared in time.h
+    # directly. Then we test whether a macro localtime_r exists, in
+    # which case localtime_r in the test program is replaced and thus
+    # if we still find localtime_r in the output, it is not defined as 
+    # a macro.
+
+    AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h>], ,
+      [AC_EGREP_CPP([[^a-zA-Z1-9_]localtime_r[^a-zA-Z1-9_]], [#include <time.h> 
+							   localtime_r(a,b)],
+      		   AC_MSG_WARN($FLAG_DOES_NOT_WORK))])
+
+    CPPFLAGS="$glib_save_CPPFLAGS"
+
+    AC_MSG_CHECKING(thread related cflags)
+    AC_MSG_RESULT($G_THREAD_CFLAGS)
+    CPPFLAGS="$CPPFLAGS $G_THREAD_CFLAGS"
+fi
+
+dnl determination of G_THREAD_LIBS
+dnl ******************************
+
+mutex_has_default=no
+case $have_threads in
+        posix|dce)
+	  glib_save_CPPFLAGS="$CPPFLAGS"
+	  CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
+          if test x"$G_THREAD_LIBS" = x; then
+            case $host in
+              *-aix*)
+                # We are not using gcc (would have set G_THREAD_LIBS) and thus 
+                # probably using the aix compiler.
+		AC_MSG_WARN($AIX_COMPILE_INFO)
+                ;;
+              *)
+                G_THREAD_LIBS=error
+	        glib_save_LIBS="$LIBS"
+	        for thread_lib in "" pthread pthread32 pthreads thread dce; do
+			if test x"$thread_lib" = x; then
+				add_thread_lib=""
+				IN=""
+			else
+				add_thread_lib="-l$thread_lib"
+				IN=" in -l$thread_lib"
+			fi
+			if test x"$have_threads" = xposix; then
+				defattr=0
+			else
+				defattr=pthread_attr_default
+			fi
+			
+			LIBS="$add_thread_lib $glib_save_LIBS"
+			
+			AC_MSG_CHECKING(for pthread_create/pthread_join$IN)
+			AC_TRY_RUN(glib_thread_test($defattr),
+                                   glib_result=yes,
+                                   glib_result=no,
+                                   [AC_LINK_IFELSE(glib_thread_test($defattr),
+                                                   glib_result=yes,
+                                                   glib_result=no)])
+                        AC_MSG_RESULT($glib_result)
+			
+                        if test "$glib_result" = "yes" ; then
+			  G_THREAD_LIBS="$add_thread_lib"
+                          break
+                        fi
+		done
+		if test "x$G_THREAD_LIBS" = xerror; then
+		  AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
+		fi 
+		LIBS="$glib_save_LIBS"
+                ;;
+            esac
+          fi
+
+          glib_save_LIBS="$LIBS"
+	  for thread_lib in "" rt rte; do
+	    if test x"$thread_lib" = x; then
+	      add_thread_lib=""
+	      IN=""
+	    else
+	      add_thread_lib="-l$thread_lib"
+	      IN=" in -l$thread_lib"
+	    fi
+	    LIBS="$add_thread_lib $glib_save_LIBS"
+	    
+            AC_MSG_CHECKING(for sched_get_priority_min$IN)
+	    AC_TRY_RUN(glib_sched_priority_test,
+                       glib_result=yes,
+                       glib_result=no,
+                       [AC_LINK_IFELSE(glib_sched_priority_test,
+                                       glib_result=yes,
+                                       glib_result=no)])
+	    AC_MSG_RESULT($glib_result)
+
+	    if test "$glib_result" = "yes" ; then	    
+ 	       G_THREAD_LIBS="$G_THREAD_LIBS $add_thread_lib"
+	       posix_priority_min="sched_get_priority_min(SCHED_OTHER)"
+	       posix_priority_max="sched_get_priority_max(SCHED_OTHER)"
+	       break
+            fi
+	  done
+	  LIBS="$glib_save_LIBS"
+          mutex_has_default=yes
+          mutex_default_type='pthread_mutex_t'
+          mutex_default_init='PTHREAD_MUTEX_INITIALIZER'
+          mutex_header_file='pthread.h'
+	  if test "x$have_threads" = "xposix"; then
+	    g_threads_impl="POSIX"
+	  else
+	    g_threads_impl="DCE"
+	    have_threads="posix"
+	  fi
+	  AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES)
+          CPPFLAGS="$glib_save_CPPFLAGS"
+          ;;
+	win32)
+	   g_threads_impl="WIN32"
+	   ;;
+        none|no)
+	   g_threads_impl="NONE"
+           ;;
+        *)
+	   g_threads_impl="NONE"
+           G_THREAD_LIBS=error
+           ;;
+esac
+
+if test "x$G_THREAD_LIBS" = xerror; then
+        AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
+fi
+
+case $host in
+  *-*-beos*)
+    G_THREAD_LIBS="-lbe -lroot -lglib-2.0 "
+    G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
+    ;;
+  *)
+    ;;
+esac
+
+AC_MSG_CHECKING(thread related libraries)
+AC_MSG_RESULT($G_THREAD_LIBS)
+
+dnl check for mt safe function variants and some posix functions
+dnl ************************************************************
+
+if test x"$have_threads" != xno; then
+	glib_save_LIBS="$LIBS"
+	# we are not doing the following for now, as this might require glib 
+	# to always be linked with the thread libs on some platforms. 
+	# LIBS="$LIBS $G_THREAD_LIBS"
+	AC_CHECK_FUNCS(localtime_r gmtime_r)
+	if test "$ac_cv_header_pwd_h" = "yes"; then
+	 	AC_CACHE_CHECK([for posix getpwuid_r],
+			ac_cv_func_posix_getpwuid_r,
+			[AC_TRY_RUN([
+#include <errno.h>
+#include <pwd.h>
+int main () { 
+    char buffer[10000];
+    struct passwd pwd, *pwptr = &pwd;
+    int error;
+    errno = 0;
+    error = getpwuid_r (0, &pwd, buffer, 
+                        sizeof (buffer), &pwptr);
+   return (error < 0 && errno == ENOSYS) 
+	   || error == ENOSYS; 
+}                               ],
+				[ac_cv_func_posix_getpwuid_r=yes],
+				[ac_cv_func_posix_getpwuid_r=no])])
+		GLIB_ASSERT_SET(ac_cv_func_posix_getpwuid_r)
+		if test "$ac_cv_func_posix_getpwuid_r" = yes; then
+			AC_DEFINE(HAVE_POSIX_GETPWUID_R,1,
+				[Have POSIX function getpwuid_r])
+		else
+	 		AC_CACHE_CHECK([for nonposix getpwuid_r],
+				ac_cv_func_nonposix_getpwuid_r,
+				[AC_TRY_LINK([#include <pwd.h>],
+                                	[char buffer[10000];
+                                	struct passwd pwd;
+                                	getpwuid_r (0, &pwd, buffer, 
+                                        		sizeof (buffer));],
+					[ac_cv_func_nonposix_getpwuid_r=yes],
+					[ac_cv_func_nonposix_getpwuid_r=no])])
+			GLIB_ASSERT_SET(ac_cv_func_nonposix_getpwuid_r)
+			if test "$ac_cv_func_nonposix_getpwuid_r" = yes; then
+				AC_DEFINE(HAVE_NONPOSIX_GETPWUID_R,1,
+					[Have non-POSIX function getpwuid_r])
+			fi
+		fi
+	fi
+	if test "$ac_cv_header_grp_h" = "yes"; then
+	   	AC_CACHE_CHECK([for posix getgrgid_r],
+			ac_cv_func_posix_getgrgid_r,
+			[AC_TRY_RUN([
+#include <errno.h>
+#include <grp.h>
+int main () { 
+    char buffer[10000];
+    struct group grp, *grpptr = &grp;
+    int error;
+    errno = 0;
+    error = getgrgid_r (0, &grp, buffer, 
+                        sizeof (buffer), &grpptr);
+   return (error < 0 && errno == ENOSYS) 
+	   || error == ENOSYS; 
+}                              ],
+			       [ac_cv_func_posix_getgrgid_r=yes],
+			       [ac_cv_func_posix_getgrgid_r=no])])
+		GLIB_ASSERT_SET(ac_cv_func_posix_getgrgid_r)
+		if test "$ac_cv_func_posix_getgrgid_r" = yes; then
+		   	AC_DEFINE(HAVE_POSIX_GETGRGID_R,1,
+				[Have POSIX function getgrgid_r])
+		else
+			AC_CACHE_CHECK([for nonposix getgrgid_r],
+				ac_cv_func_nonposix_getgrgid_r,
+				[AC_TRY_LINK([#include <grp.h>],
+                               		[char buffer[10000];
+					struct group grp;	
+					getgrgid_r (0, &grp, buffer, 
+                                       	sizeof (buffer));],
+				[ac_cv_func_nonposix_getgrgid_r=yes],
+				[ac_cv_func_nonposix_getgrgid_r=no])])
+			GLIB_ASSERT_SET(ac_cv_func_nonposix_getgrgid_r)
+			if test "$ac_cv_func_nonposix_getgrgid_r" = yes; then
+			   	AC_DEFINE(HAVE_NONPOSIX_GETGRGID_R,1,
+					[Have non-POSIX function getgrgid_r])
+			fi
+		fi
+	fi
+	LIBS="$G_THREAD_LIBS $LIBS"
+	if test x"$have_threads" = xposix; then
+		glib_save_CPPFLAGS="$CPPFLAGS"
+		CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
+		dnl we might grow sizeof(pthread_t) later on, so use a dummy name here
+		GLIB_SIZEOF([#include <pthread.h>], pthread_t, system_thread)
+		# This is not AC_CHECK_FUNC to also work with function
+		# name mangling in header files.
+		AC_MSG_CHECKING(for pthread_attr_setstacksize)
+		AC_TRY_LINK([#include <pthread.h>],
+			[pthread_attr_t t; pthread_attr_setstacksize(&t,0)],
+			[AC_MSG_RESULT(yes)
+			AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE,1,
+				  [Have function pthread_attr_setstacksize])],
+			[AC_MSG_RESULT(no)])
+		AC_MSG_CHECKING(for minimal/maximal thread priority)
+		if test x"$posix_priority_min" = x; then
+			AC_EGREP_CPP(PX_PRIO_MIN,[#include <pthread.h>
+				PX_PRIO_MIN],,[
+				posix_priority_min=PX_PRIO_MIN
+				posix_priority_max=PX_PRIO_MAX])
+		fi
+		if test x"$posix_priority_min" = x; then
+			# AIX
+			AC_EGREP_CPP(PTHREAD_PRIO_MIN,[#include <pthread.h>
+				PTHREAD_PRIO_MIN],,[
+				posix_priority_min=PTHREAD_PRIO_MIN
+				posix_priority_max=PTHREAD_PRIO_MAX])
+		fi
+		if test x"$posix_priority_min" = x; then
+			AC_EGREP_CPP(PRI_OTHER_MIN,[#include <pthread.h>
+				PRI_OTHER_MIN],,[
+				posix_priority_min=PRI_OTHER_MIN	
+				posix_priority_max=PRI_OTHER_MAX])
+		fi
+		if test x"$posix_priority_min" = x; then
+			AC_MSG_RESULT(none found)
+			AC_MSG_WARN($POSIX_NO_PRIORITIES)
+	                posix_priority_min=-1
+			posix_priority_max=-1
+		else
+			AC_MSG_RESULT($posix_priority_min/$posix_priority_max)
+			AC_MSG_CHECKING(for pthread_setschedparam)
+			AC_TRY_LINK([#include <pthread.h>],
+		          [pthread_t t; pthread_setschedparam(t, 0, NULL)],
+			  [AC_MSG_RESULT(yes)
+			AC_DEFINE_UNQUOTED(POSIX_MIN_PRIORITY,$posix_priority_min,[Minimum POSIX RT priority])
+			   AC_DEFINE_UNQUOTED(POSIX_MAX_PRIORITY,$posix_priority_max,[Maximum POSIX RT priority])],
+                          [AC_MSG_RESULT(no)
+                           AC_MSG_WARN($POSIX_NO_PRIORITIES)])
+		fi
+		posix_yield_func=none
+		AC_MSG_CHECKING(for posix yield function)
+		for yield_func in sched_yield pthread_yield_np pthread_yield \
+							thr_yield; do
+			AC_TRY_LINK([#include <pthread.h>],
+				[$yield_func()],
+				[posix_yield_func="$yield_func"
+				break])
+		done		
+		if test x"$posix_yield_func" = xnone; then
+			AC_MSG_RESULT(none found)
+			AC_MSG_WARN($POSIX_NO_YIELD)
+	                posix_yield_func="g_usleep(1000)"
+		else
+			AC_MSG_RESULT($posix_yield_func)
+			posix_yield_func="$posix_yield_func()"
+		fi
+		AC_DEFINE_UNQUOTED(POSIX_YIELD_FUNC,$posix_yield_func,[The POSIX RT yield function])
+		CPPFLAGS="$glib_save_CPPFLAGS"
+           
+	elif test x"$have_threads" = xwin32; then
+		# It's a pointer to a private struct
+		GLIB_SIZEOF(,struct _GThreadData *, system_thread)
+	fi
+
+	LIBS="$glib_save_LIBS"
+
+	# now spit out all the warnings.
+	if test "$ac_cv_func_posix_getpwuid_r" != "yes" && 
+	   test "$ac_cv_func_nonposix_getpwuid_r" != "yes"; then
+		AC_MSG_WARN($FUNC_NO_GETPWUID_R)
+	fi
+	if test "$ac_cv_func_localtime_r" != "yes"; then
+		AC_MSG_WARN($FUNC_NO_LOCALTIME_R)
+	fi
+fi	
+
+if test x"$glib_cv_sizeof_system_thread" = x; then
+   # use a pointer as a fallback.
+   GLIB_SIZEOF(,void *, system_thread)
+fi
+
+#
+# Hack to deal with:
+# 
+#  a) GCC < 3.3 for Linux doesn't include -lpthread when
+#     building shared libraries with linux.
+#  b) FreeBSD doesn't do this either.
+#
+case $host in
+  *-*-freebsd*|*-*-linux*)
+    G_THREAD_LIBS_FOR_GTHREAD="`echo $G_THREAD_LIBS | sed s/-pthread/-lpthread/`"
+    ;;
+  *) 	 
+    G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS" 	 
+    ;;
+esac
+
+AC_DEFINE_UNQUOTED(G_THREAD_SOURCE,"gthread-$have_threads.c",
+		   [Source file containing theread implementation])
+AC_SUBST(G_THREAD_CFLAGS)
+AC_SUBST(G_THREAD_LIBS)
+AC_SUBST(G_THREAD_LIBS_FOR_GTHREAD)
+AC_SUBST(G_THREAD_LIBS_EXTRA)
+
+dnl **********************************************
+dnl *** GDefaultMutex setup and initialization ***
+dnl **********************************************
+dnl
+dnl if mutex_has_default = yes, we also got
+dnl mutex_default_type, mutex_default_init and mutex_header_file
+if test $mutex_has_default = yes ; then
+	glib_save_CPPFLAGS="$CPPFLAGS"
+	glib_save_LIBS="$LIBS"
+	LIBS="$G_THREAD_LIBS $LIBS"
+	CPPFLAGS="$CPPFLAGS $GTHREAD_COMPILE_IMPL_DEFINES"
+	GLIB_SIZEOF([#include <$mutex_header_file>],
+                    $mutex_default_type,
+                    gmutex)
+	GLIB_BYTE_CONTENTS([#include <$mutex_header_file>],
+			   $mutex_default_type,
+			   gmutex,
+			   $glib_cv_sizeof_gmutex,
+			   $mutex_default_init)
+	if test x"$glib_cv_byte_contents_gmutex" = xno; then
+		mutex_has_default=no
+	fi
+	CPPFLAGS="$glib_save_CPPFLAGS"
+	LIBS="$glib_save_LIBS"
+fi
+
+AC_CHECK_FUNCS(clock_gettime, [], [
+  AC_CHECK_LIB(rt, clock_gettime, [
+    AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
+    G_THREAD_LIBS="$G_THREAD_LIBS -lrt"
+    G_THREAD_LIBS_FOR_GTHREAD="$G_THREAD_LIBS_FOR_GTHREAD -lrt"
+  ])
+])
+
+AC_CACHE_CHECK(for monotonic clocks,
+    glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#include <time.h>
+#include <unistd.h>
+int main() {
+#if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC))
+        #error No monotonic clock
+#endif
+	return 0;
+}
+]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no))
+if test "$glib_cv_monotonic_clock" = "yes"; then
+  AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock])
+fi
+
+
+dnl ********************************
+dnl *** g_atomic_* tests for gcc ***
+dnl ********************************
+
+AC_MSG_CHECKING([whether to use assembler code for atomic operations])
+
+if test x"$GCC" = xyes; then
+  case $host_cpu in
+    i386)
+      AC_MSG_RESULT([none])
+      glib_memory_barrier_needed=no
+      ;;
+    i?86)
+      AC_MSG_RESULT([i486])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_I486, 1,
+		   	 [i486 atomic implementation])
+      glib_memory_barrier_needed=no
+      ;;
+    sparc*)
+      SPARCV9_WARNING="Try to rerun configure with CFLAGS='-mcpu=v9',
+		when you are using a sparc with v9 instruction set (most
+		sparcs nowadays). This will make the code for atomic
+		operations much faster.	The resulting code will not run
+		on very old sparcs though."
+
+      AC_LINK_IFELSE([[
+        main () 
+        {
+	  int tmp1, tmp2, tmp3;
+          __asm__ __volatile__("casx [%2], %0, %1" 
+	                       : "=&r" (tmp1), "=&r" (tmp2) : "r" (&tmp3));
+        }]],
+	AC_MSG_RESULT([sparcv9])
+        AC_DEFINE_UNQUOTED(G_ATOMIC_SPARCV9, 1,
+		   	   [sparcv9 atomic implementation]),
+	AC_MSG_RESULT([no])
+        AC_MSG_WARN([[$SPARCV9_WARNING]]))
+      glib_memory_barrier_needed=yes
+      ;;
+    alpha*)
+      AC_MSG_RESULT([alpha])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_ALPHA, 1,
+		   	 [alpha atomic implementation])
+      glib_memory_barrier_needed=yes
+      ;;
+    x86_64)
+      AC_MSG_RESULT([x86_64])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_X86_64, 1,
+		   	 [x86_64 atomic implementation])
+      glib_memory_barrier_needed=no
+     ;;
+    powerpc*)
+      AC_MSG_RESULT([powerpc])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_POWERPC, 1,
+		   	 [powerpc atomic implementation])
+      glib_memory_barrier_needed=yes
+      AC_MSG_CHECKING([whether asm supports numbered local labels])
+      AC_TRY_COMPILE(
+		,[ 
+			__asm__ __volatile__ ("1:       nop\n"
+					      "         bne-    1b")
+		],[
+			AC_DEFINE_UNQUOTED(ASM_NUMERIC_LABELS, 1, [define if asm blocks can use numeric local labels])
+			AC_MSG_RESULT([yes])
+		],[
+			AC_MSG_RESULT([no])
+		])
+      ;;	
+    ia64)
+      AC_MSG_RESULT([ia64])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_IA64, 1,
+		   	 [ia64 atomic implementation])
+      glib_memory_barrier_needed=yes
+      ;;	
+    s390|s390x)
+      AC_MSG_RESULT([s390])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_S390, 1,
+		   	 [s390 atomic implementation])
+      glib_memory_barrier_needed=no
+      ;;	
+    arm*)
+      AC_MSG_RESULT([arm])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_ARM, 1,
+                         [arm atomic implementation])
+      glib_memory_barrier_needed=no
+      ;;
+    crisv32*|etraxfs*)
+      AC_MSG_RESULT([crisv32])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_CRISV32, 1,
+		   	 [crisv32 atomic implementation])
+      glib_memory_barrier_needed=no
+      ;;
+    cris*|etrax*)
+      AC_MSG_RESULT([cris])
+      AC_DEFINE_UNQUOTED(G_ATOMIC_CRIS, 1,
+			 [cris atomic implementation])
+      glib_memory_barrier_needed=no
+      ;;
+    *)
+      AC_MSG_RESULT([none])
+      glib_memory_barrier_needed=yes
+      ;;
+  esac
+else
+  if test $glib_native_win32 = yes; then
+    # For Windows but not using gcc. No barriers needed then either.
+    glib_memory_barrier_needed=no
+  fi
+fi
+
+dnl ****************************************
+dnl *** GLib POLL* compatibility defines ***
+dnl ****************************************
+
+glib_poll_includes=["
+#include <sys/types.h>
+#include <sys/poll.h>
+"]
+
+if test $ac_cv_header_sys_types_h = yes &&
+   test $ac_cv_header_sys_poll_h = yes ; then
+  glib_failed=false
+  GLIB_CHECK_VALUE(POLLIN, $glib_poll_includes, glib_failed=true)
+  GLIB_CHECK_VALUE(POLLOUT, $glib_poll_includes, glib_failed=true)
+  GLIB_CHECK_VALUE(POLLPRI, $glib_poll_includes, glib_failed=true)
+  GLIB_CHECK_VALUE(POLLERR, $glib_poll_includes, glib_failed=true)
+  GLIB_CHECK_VALUE(POLLHUP, $glib_poll_includes, glib_failed=true)
+  GLIB_CHECK_VALUE(POLLNVAL, $glib_poll_includes, glib_failed=true)
+  if $glib_failed ; then
+    AC_MSG_ERROR([Could not determine values for POLL* constants])
+  fi
+else
+  glib_cv_value_POLLIN=1
+  glib_cv_value_POLLOUT=4
+  glib_cv_value_POLLPRI=2
+  glib_cv_value_POLLERR=8
+  glib_cv_value_POLLHUP=16
+  glib_cv_value_POLLNVAL=32
+fi
+
+AC_MSG_CHECKING([for broken poll])
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
+	#include <stdlib.h>
+	#include <fcntl.h>
+	#include <poll.h>
+	#ifdef HAVE_SYS_POLL_H
+	#include <sys/poll.h>
+	#endif
+	int main(void) {
+	  struct pollfd fds[1];
+	  int fd;
+	  fd = open("/dev/null", 1);
+	  fds[0].fd = fd;
+	  fds[0].events = POLLIN;
+	  fds[0].revents = 0;
+	  if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) {
+		exit(1);  /* Does not work for devices -- fail */
+	  }
+	  exit(0);
+	}]])],
+  [broken_poll=no],
+  [broken_poll=yes
+   AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])],
+  [broken_poll="no (cross compiling)"])
+AC_MSG_RESULT($broken_poll)
+
+dnl *********************
+dnl *** GRegex checks ***
+dnl *********************
+PCRE_REQUIRED_VERSION=7.2
+
+# Check if we should compile GRegex
+AC_ARG_ENABLE(regex, AC_HELP_STRING([--disable-regex],
+              [disable the compilation of GRegex]),
+[case "${enableval}" in
+  yes) enable_regex=true ;;
+  no)  enable_regex=false ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-regex) ;;
+esac],
+[enable_regex=true])
+
+AM_CONDITIONAL(ENABLE_REGEX, $enable_regex)
+
+if test x$enable_regex = xtrue; then
+  AC_DEFINE(ENABLE_REGEX, [], [include GRegex])
+  # Check if we should use the internal or the system-supplied pcre
+  AC_ARG_WITH(pcre,
+             [AC_HELP_STRING([--with-pcre=@<:@internal/system@:>@],
+                             [specify whether to use the internal or the
+                              system-supplied PCRE library])])
+
+  AM_CONDITIONAL(USE_SYSTEM_PCRE, [test "x$with_pcre" = xsystem])
+
+  if test "x$with_pcre" = xsystem; then
+    PKG_CHECK_MODULES(PCRE,
+                      libpcre >= $PCRE_REQUIRED_VERSION)
+    AC_CACHE_CHECK([for Unicode support in PCRE],glib_cv_pcre_has_unicode,[
+                   glib_save_CFLAGS="$CFLAGS"
+                   glib_save_LIBS="$LIBS"
+                   CFLAGS="$CFLAGS $PCRE_CFLAGS" LIBS="$PCRE_LIBS"
+                   AC_TRY_RUN([#include <pcre.h>
+                               int main () {
+                                 int support;
+                                 pcre_config (PCRE_CONFIG_UTF8, &support);
+                                 if (!support)
+                                   return 1;
+                                 pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support);
+                                 if (!support)
+                                   return 1;
+                                 return 0;
+                               }],
+                   glib_cv_pcre_has_unicode=yes,
+                   glib_cv_pcre_has_unicode=no,
+                   glib_cv_pcre_has_unicode=yes)
+                   CFLAGS="$glib_save_CFLAGS"
+                   LIBS="$glib_save_LIBS"
+	])
+    if test "$glib_cv_pcre_has_unicode" = "no"; then
+      AC_MSG_ERROR([*** The system-supplied PCRE does not support Unicode properties or UTF-8.])
+    fi
+    AC_SUBST(PCRE_CFLAGS)
+    AC_SUBST(PCRE_LIBS)
+    AC_DEFINE(USE_SYSTEM_PCRE, [], [using the system-supplied PCRE library])
+    PCRE_REQUIRES=libpcre
+    AC_SUBST(PCRE_REQUIRES)
+  else
+    # If using gcc 4 pass -Wno-pointer-sign when compiling the internal PCRE
+    if test x"$GCC" = xyes; then
+      AC_MSG_CHECKING([whether compiler understands -Wno-pointer-sign])
+      save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -Wno-pointer-sign"
+      AC_TRY_COMPILE([],[],[PCRE_WARN_CFLAGS="$PCRE_WARN_CFLAGS -Wno-pointer-sign"
+			    AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
+      CFLAGS="$save_CFLAGS"
+    fi
+  fi
+  AC_SUBST(PCRE_WARN_CFLAGS)
+else
+  AM_CONDITIONAL(USE_SYSTEM_PCRE, false])
+fi
+
+dnl **********************
+dnl *** Win32 API libs ***
+dnl **********************
+
+case $host in
+  *-*-cygwin*)
+	G_LIBS_EXTRA="-luser32 -lkernel32"
+    ;;
+  *-*-mingw*)
+	G_LIBS_EXTRA="-lws2_32 -lole32"
+    ;;
+  *)
+	G_LIBS_EXTRA=""
+    ;;
+esac
+AC_SUBST(G_LIBS_EXTRA)
+
+dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
+dnl since we need it for g_iconv()
+
+AC_MSG_CHECKING([for EILSEQ])
+AC_TRY_COMPILE([
+#include <errno.h>
+],
+[
+int error = EILSEQ;
+], have_eilseq=yes, have_eilseq=no);
+AC_MSG_RESULT($have_eilseq)
+
+dnl ******************************************************************
+dnl *** Look for glib-genmarshal in PATH if we are cross-compiling ***
+dnl ******************************************************************
+
+AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
+
+if test $cross_compiling = yes; then
+  AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal, no)
+  if test x$GLIB_GENMARSHAL = xno; then
+    AC_MSG_ERROR(Could not find a glib-genmarshal in your PATH)
+  fi
+fi
+
+dnl **************************
+dnl *** Checks for gtk-doc ***
+dnl **************************
+
+GTK_DOC_CHECK([1.11])
+
+AC_ARG_ENABLE(man,
+              [AC_HELP_STRING([--enable-man],
+                              [regenerate man pages from Docbook [default=no]])],enable_man=yes,
+              enable_man=no)
+
+if test "${enable_man}" != no; then
+dnl
+dnl Check for xsltproc
+dnl
+AC_PATH_PROG([XSLTPROC], [xsltproc])
+  if test -z "$XSLTPROC"; then
+    enable_man=no
+  fi
+
+  dnl check for DocBook DTD and stylesheets in the local catalog.
+  JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
+     [DocBook XML DTD V4.1.2],,enable_man=no)
+  JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+     [DocBook XSL Stylesheets],,enable_man=no)
+fi
+
+AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
+
+dnl ******************************
+dnl *** output the whole stuff ***
+dnl ******************************
+
+dnl this section will only be run if config.status is invoked with no
+dnl arguments, or with "glibconfig.h" as an argument.
+AC_CONFIG_COMMANDS([glibconfig.h],
+[
+	outfile=glibconfig.h-tmp
+	cat > $outfile <<\_______EOF
+/* glibconfig.h
+ *
+ * This is a generated file.  Please modify 'configure.in'
+ */
+
+#ifndef __G_LIBCONFIG_H__
+#define __G_LIBCONFIG_H__
+
+#include <glib/gmacros.h>
+
+_______EOF
+
+	if test x$glib_limits_h = xyes; then
+	  echo '#include <limits.h>' >> $outfile
+	fi
+	if test x$glib_float_h = xyes; then
+	  echo '#include <float.h>' >> $outfile
+	fi
+	if test x$glib_values_h = xyes; then
+	  echo '#include <values.h>' >> $outfile
+	fi
+	if test "$glib_header_alloca_h" = "yes"; then
+	  echo '#define GLIB_HAVE_ALLOCA_H' >> $outfile
+	fi
+	if test x$glib_sys_poll_h = xyes; then
+	  echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
+	fi
+	if test x$glib_included_printf != xyes; then
+          echo "
+/* Specifies that GLib's g_print*() functions wrap the
+ * system printf functions.  This is useful to know, for example,
+ * when using glibc's register_printf_function().
+ */" >> $outfile
+	  echo '#define GLIB_USING_SYSTEM_PRINTF' >> $outfile
+	fi
+
+	cat >> $outfile <<_______EOF
+
+G_BEGIN_DECLS
+
+#define G_MINFLOAT	$glib_mf
+#define G_MAXFLOAT	$glib_Mf
+#define G_MINDOUBLE	$glib_md
+#define G_MAXDOUBLE	$glib_Md
+#define G_MINSHORT	$glib_ms
+#define G_MAXSHORT	$glib_Ms
+#define G_MAXUSHORT	$glib_Mus
+#define G_MININT	$glib_mi
+#define G_MAXINT	$glib_Mi
+#define G_MAXUINT	$glib_Mui
+#define G_MINLONG	$glib_ml
+#define G_MAXLONG	$glib_Ml
+#define G_MAXULONG	$glib_Mul
+
+_______EOF
+
+
+	### this should always be true in a modern C/C++ compiler
+	cat >>$outfile <<_______EOF
+typedef signed char gint8;
+typedef unsigned char guint8;
+_______EOF
+
+
+	if test -n "$gint16"; then
+	  cat >>$outfile <<_______EOF
+typedef signed $gint16 gint16;
+typedef unsigned $gint16 guint16;
+#define G_GINT16_MODIFIER $gint16_modifier
+#define G_GINT16_FORMAT $gint16_format
+#define G_GUINT16_FORMAT $guint16_format
+_______EOF
+	fi
+
+
+	if test -n "$gint32"; then
+	  cat >>$outfile <<_______EOF
+typedef signed $gint32 gint32;
+typedef unsigned $gint32 guint32;
+#define G_GINT32_MODIFIER $gint32_modifier
+#define G_GINT32_FORMAT $gint32_format
+#define G_GUINT32_FORMAT $guint32_format
+_______EOF
+	fi
+
+	cat >>$outfile <<_______EOF
+#define G_HAVE_GINT64 1          /* deprecated, always true */
+
+${glib_extension}typedef signed $gint64 gint64;
+${glib_extension}typedef unsigned $gint64 guint64;
+
+#define G_GINT64_CONSTANT(val)	$gint64_constant
+#define G_GUINT64_CONSTANT(val)	$guint64_constant
+_______EOF
+
+	if test x$gint64_format != x ; then
+	  cat >>$outfile <<_______EOF
+#define G_GINT64_MODIFIER $gint64_modifier
+#define G_GINT64_FORMAT $gint64_format
+#define G_GUINT64_FORMAT $guint64_format
+_______EOF
+        else
+	  cat >>$outfile <<_______EOF
+#undef G_GINT64_MODIFIER
+#undef G_GINT64_FORMAT
+#undef G_GUINT64_FORMAT
+_______EOF
+        fi           
+
+        cat >>$outfile <<_______EOF
+
+#define GLIB_SIZEOF_VOID_P $glib_void_p
+#define GLIB_SIZEOF_LONG   $glib_long
+#define GLIB_SIZEOF_SIZE_T $glib_size_t
+
+_______EOF
+
+        cat >>$outfile <<_______EOF
+typedef signed $glib_size_type_define gssize;
+typedef unsigned $glib_size_type_define gsize;
+#define G_GSIZE_MODIFIER $gsize_modifier
+#define G_GSSIZE_FORMAT $gssize_format
+#define G_GSIZE_FORMAT $gsize_format
+
+#define G_MAXSIZE	G_MAXU$glib_msize_type
+#define G_MINSSIZE	G_MIN$glib_msize_type
+#define G_MAXSSIZE	G_MAX$glib_msize_type
+
+typedef gint64 goffset;
+#define G_MINOFFSET	G_MININT64
+#define G_MAXOFFSET	G_MAXINT64
+
+#define G_GOFFSET_MODIFIER      G_GINT64_MODIFIER
+#define G_GOFFSET_FORMAT        G_GINT64_FORMAT
+#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
+
+_______EOF
+
+	if test -z "$glib_unknown_void_p"; then
+	  cat >>$outfile <<_______EOF
+
+#define GPOINTER_TO_INT(p)	((gint)  ${glib_gpi_cast} (p))
+#define GPOINTER_TO_UINT(p)	((guint) ${glib_gpui_cast} (p))
+
+#define GINT_TO_POINTER(i)	((gpointer) ${glib_gpi_cast} (i))
+#define GUINT_TO_POINTER(u)	((gpointer) ${glib_gpui_cast} (u))
+
+typedef signed $glib_intptr_type_define gintptr;
+typedef unsigned $glib_intptr_type_define guintptr;
+_______EOF
+	else
+	  echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
+	fi
+
+
+
+	cat >>$outfile <<_______EOF
+$glib_atexit
+$glib_memmove
+$glib_defines
+$glib_os
+$glib_static_compilation
+
+$glib_vacopy
+
+#ifdef	__cplusplus
+#define	G_HAVE_INLINE	1
+#else	/* !__cplusplus */
+$glib_inline
+#endif	/* !__cplusplus */
+
+#ifdef	__cplusplus
+#define G_CAN_INLINE	1
+_______EOF
+
+	if test x$g_can_inline = xyes ; then
+		cat >>$outfile <<_______EOF
+#else	/* !__cplusplus */
+#define G_CAN_INLINE	1
+_______EOF
+	fi
+
+	cat >>$outfile <<_______EOF
+#endif
+
+_______EOF
+
+	if test x$g_have_iso_c_varargs = xyes ; then
+		cat >>$outfile <<_______EOF
+#ifndef __cplusplus
+# define G_HAVE_ISO_VARARGS 1
+#endif
+_______EOF
+	fi
+	if test x$g_have_iso_cxx_varargs = xyes ; then
+		cat >>$outfile <<_______EOF
+#ifdef __cplusplus
+# define G_HAVE_ISO_VARARGS 1
+#endif
+_______EOF
+	fi
+	if test x$g_have_gnuc_varargs = xyes ; then
+		cat >>$outfile <<_______EOF
+
+/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
+ * is passed ISO vararg support is turned off, and there is no work
+ * around to turn it on, so we unconditionally turn it off.
+ */
+#if __GNUC__ == 2 && __GNUC_MINOR__ == 95
+#  undef G_HAVE_ISO_VARARGS
+#endif
+
+#define G_HAVE_GNUC_VARARGS 1
+_______EOF
+	fi
+
+	case x$g_stack_grows in
+	xyes) echo "#define G_HAVE_GROWING_STACK 1" >>$outfile ;;
+	*)    echo "#define G_HAVE_GROWING_STACK 0" >>$outfile ;;
+	esac
+
+
+	echo >>$outfile
+	if test x$g_have_eilseq = xno; then
+		cat >>$outfile <<_______EOF
+#ifndef EILSEQ
+/* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
+ * The correspondence between this and the corresponding definition
+ * in libiconv is essential.
+ */
+#  define EILSEQ ENOENT
+#endif
+_______EOF
+
+	fi
+
+	if test x$g_have_gnuc_visibility = xyes; then
+		cat >>$outfile <<_______EOF
+#define G_HAVE_GNUC_VISIBILITY 1
+_______EOF
+	fi
+		cat >>$outfile <<_______EOF
+#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+#define G_GNUC_INTERNAL __hidden
+#elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
+#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
+#else
+#define G_GNUC_INTERNAL
+#endif 
+_______EOF
+
+
+	echo >>$outfile
+	if test x$g_mutex_has_default = xyes; then
+		cat >>$outfile <<_______EOF
+$g_enable_threads_def G_THREADS_ENABLED
+#define G_THREADS_IMPL_$g_threads_impl_def
+typedef struct _GStaticMutex GStaticMutex;
+struct _GStaticMutex
+{
+  struct _GMutex *runtime_mutex;
+  union {
+    char   pad[[$g_mutex_sizeof]];
+    double dummy_double;
+    void  *dummy_pointer;
+    long   dummy_long;
+  } static_mutex;
+};
+#define	G_STATIC_MUTEX_INIT	{ NULL, { { $g_mutex_contents} } }
+#define	g_static_mutex_get_mutex(mutex) \\
+  (g_thread_use_default_impl ? ((GMutex*)(gpointer) ((mutex)->static_mutex.pad)) : \\
+   g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
+_______EOF
+	else
+		cat >>$outfile <<_______EOF
+$g_enable_threads_def G_THREADS_ENABLED
+#define G_THREADS_IMPL_$g_threads_impl_def
+typedef struct _GMutex* GStaticMutex;
+#define G_STATIC_MUTEX_INIT NULL
+#define g_static_mutex_get_mutex(mutex) \\
+  (g_static_mutex_get_mutex_impl_shortcut (mutex))
+_______EOF
+	fi
+
+	cat >>$outfile <<_______EOF
+/* This represents a system thread as used by the implementation. An
+ * alien implementaion, as loaded by g_thread_init can only count on
+ * "sizeof (gpointer)" bytes to store their info. We however need more
+ * for some of our native implementations. */
+typedef union _GSystemThread GSystemThread;
+union _GSystemThread
+{
+  char   data[[$g_system_thread_sizeof]];
+  double dummy_double;
+  void  *dummy_pointer;
+  long   dummy_long;
+};
+_______EOF
+	if test x"$g_memory_barrier_needed" != xno; then
+	  echo >>$outfile
+	  echo "#define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1" >>$outfile
+	fi
+
+	echo >>$outfile
+	g_bit_sizes="16 32 64"
+	for bits in $g_bit_sizes; do
+	  cat >>$outfile <<_______EOF
+#define GINT${bits}_TO_${g_bs_native}(val)	((gint${bits}) (val))
+#define GUINT${bits}_TO_${g_bs_native}(val)	((guint${bits}) (val))
+#define GINT${bits}_TO_${g_bs_alien}(val)	((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
+#define GUINT${bits}_TO_${g_bs_alien}(val)	(GUINT${bits}_SWAP_LE_BE (val))
+_______EOF
+	done
+
+	cat >>$outfile <<_______EOF
+#define GLONG_TO_LE(val)	((glong) GINT${glongbits}_TO_LE (val))
+#define GULONG_TO_LE(val)	((gulong) GUINT${glongbits}_TO_LE (val))
+#define GLONG_TO_BE(val)	((glong) GINT${glongbits}_TO_BE (val))
+#define GULONG_TO_BE(val)	((gulong) GUINT${glongbits}_TO_BE (val))
+#define GINT_TO_LE(val)		((gint) GINT${gintbits}_TO_LE (val))
+#define GUINT_TO_LE(val)	((guint) GUINT${gintbits}_TO_LE (val))
+#define GINT_TO_BE(val)		((gint) GINT${gintbits}_TO_BE (val))
+#define GUINT_TO_BE(val)	((guint) GUINT${gintbits}_TO_BE (val))
+#define G_BYTE_ORDER $g_byte_order
+
+#define GLIB_SYSDEF_POLLIN =$g_pollin
+#define GLIB_SYSDEF_POLLOUT =$g_pollout
+#define GLIB_SYSDEF_POLLPRI =$g_pollpri
+#define GLIB_SYSDEF_POLLHUP =$g_pollhup
+#define GLIB_SYSDEF_POLLERR =$g_pollerr
+#define GLIB_SYSDEF_POLLNVAL =$g_pollnval
+
+#define G_MODULE_SUFFIX "$g_module_suffix"
+
+/* A GPid is an abstraction for a process "handle". It is *not* an
+ * abstraction for a process identifier in general. GPid is used in
+ * GLib only for descendant processes spawned with the g_spawn*
+ * functions. On POSIX there is no "process handle" concept as such,
+ * but on Windows a GPid is a handle to a process, a kind of pointer,
+ * not a process identifier.
+ */
+typedef $g_pid_type GPid;
+
+G_END_DECLS
+
+#endif /* GLIBCONFIG_H */
+_______EOF
+
+
+	if cmp -s $outfile glibconfig.h; then
+	  AC_MSG_NOTICE([glibconfig.h is unchanged])
+	  rm -f $outfile
+	else
+	  mv $outfile glibconfig.h
+	fi
+],[
+
+# Note that if two cases are the same, case goes with the first one.
+# Note also that this is inside an AC_OUTPUT_COMMAND.  We do not depend
+# on variable expansion in case labels.  Look at the generated config.status
+# for a hint.
+
+if test "x${ac_cv_working_alloca_h+set}" = xset ; then
+  glib_header_alloca_h="$ac_cv_working_alloca_h"
+else
+  glib_header_alloca_h="$ac_cv_header_alloca_h"
+fi
+
+case xyes in
+x$ac_cv_header_float_h)
+  glib_float_h=yes
+  glib_mf=FLT_MIN glib_Mf=FLT_MAX
+  glib_md=DBL_MIN glib_Md=DBL_MAX
+  ;;
+x$ac_cv_header_values_h)
+  glib_values_h=yes
+  glib_mf=MINFLOAT  glib_Mf=MAXFLOAT
+  glib_md=MINDOUBLE glib_Md=MAXDOUBLE
+  ;;
+esac
+
+case xyes in
+x$ac_cv_header_limits_h)
+  glib_limits_h=yes
+  glib_ms=SHRT_MIN glib_Ms=SHRT_MAX glib_Mus=USHRT_MAX
+  glib_mi=INT_MIN  glib_Mi=INT_MAX  glib_Mui=UINT_MAX
+  glib_ml=LONG_MIN glib_Ml=LONG_MAX glib_Mul=ULONG_MAX
+  ;;
+x$ac_cv_header_values_h)
+  glib_values_h=yes
+  glib_ms=MINSHORT glib_Ms=MAXSHORT glib_Mus="(((gushort)G_MAXSHORT)*2+1)"
+  glib_mi=MININT   glib_Mi=MAXINT   glib_Mui="(((guint)G_MAXINT)*2+1)"
+  glib_ml=MINLONG  glib_Ml=MAXLONG  glib_Mul="(((gulong)G_MAXLONG)*2+1)"
+  ;;
+esac
+
+if test x$ac_cv_header_sys_poll_h = xyes ; then
+  glib_sys_poll_h=yes
+fi
+
+if test x$enable_included_printf = xyes ; then
+  glib_included_printf=yes
+fi
+
+case 2 in
+$ac_cv_sizeof_short)		
+  gint16=short
+  gint16_modifier='"h"'
+  gint16_format='"hi"'
+  guint16_format='"hu"'
+  ;;
+$ac_cv_sizeof_int)		
+  gint16=int
+  gint16_modifier='""'
+  gint16_format='"i"'
+  guint16_format='"u"'
+  ;;
+esac
+case 4 in
+$ac_cv_sizeof_short)		
+  gint32=short
+  gint32_modifier='"h"'
+  gint32_format='"hi"'
+  guint32_format='"hu"'
+  ;;
+$ac_cv_sizeof_int)		
+  gint32=int
+  gint32_modifier='""'
+  gint32_format='"i"'
+  guint32_format='"u"'
+  ;;
+$ac_cv_sizeof_long)		
+  gint32=long
+  gint32_modifier='"l"'
+  gint32_format='"li"'
+  guint32_format='"lu"'
+  ;;
+esac
+case 8 in
+$ac_cv_sizeof_int)
+  gint64=int
+  gint64_modifier='""'
+  gint64_format='"i"'
+  guint64_format='"u"'
+  glib_extension=
+  gint64_constant='(val)'
+  guint64_constant='(val)'
+  ;;
+$ac_cv_sizeof_long)
+  gint64=long
+  gint64_modifier='"l"'
+  gint64_format='"li"'
+  guint64_format='"lu"'
+  glib_extension=
+  gint64_constant='(val##L)'
+  guint64_constant='(val##UL)'
+  ;;
+$ac_cv_sizeof_long_long)
+  gint64='long long'
+  if test -n "$glib_cv_long_long_format"; then
+    gint64_modifier='"'$glib_cv_long_long_format'"'
+    gint64_format='"'$glib_cv_long_long_format'i"'
+    guint64_format='"'$glib_cv_long_long_format'u"'
+  fi
+  glib_extension='G_GNUC_EXTENSION '
+  gint64_constant='(G_GNUC_EXTENSION (val##LL))'
+  guint64_constant='(G_GNUC_EXTENSION (val##ULL))'
+  ;;
+$ac_cv_sizeof___int64)
+  gint64='__int64'
+  if test -n "$glib_cv_long_long_format"; then
+    gint64_modifier='"'$glib_cv_long_long_format'"'
+    gint64_format='"'$glib_cv_long_long_format'i"'
+    guint64_format='"'$glib_cv_long_long_format'u"'
+  fi
+  glib_extension=
+  gint64_constant='(val##i64)'
+  guint64_constant='(val##ui64)'
+  ;;
+esac
+glib_size_t=$ac_cv_sizeof_size_t
+glib_size_type_define="$glib_size_type"
+glib_void_p=$ac_cv_sizeof_void_p
+glib_long=$ac_cv_sizeof_long
+
+case "$glib_size_type" in
+short)
+  gsize_modifier='"h"'
+  gsize_format='"hu"'
+  gssize_format='"hi"'
+  glib_msize_type='SHRT'
+  ;;
+int)
+  gsize_modifier='""'
+  gsize_format='"u"'
+  gssize_format='"i"'
+  glib_msize_type='INT'
+  ;;
+long)
+  gsize_modifier='"l"'
+  gsize_format='"lu"'
+  gssize_format='"li"'
+  glib_msize_type='LONG'
+  ;;
+"long long"|__int64)
+  gsize_modifier='"I64"'
+  gsize_format='"I64u"'
+  gssize_format='"I64i"'
+  glib_msize_type='INT64'
+  ;;
+esac
+
+gintbits=`expr $ac_cv_sizeof_int \* 8`
+glongbits=`expr $ac_cv_sizeof_long \* 8`
+
+case $ac_cv_sizeof_void_p in
+$ac_cv_sizeof_int)
+  glib_intptr_type_define=int
+  glib_gpi_cast=''
+  glib_gpui_cast=''
+  ;;
+$ac_cv_sizeof_long)
+  glib_intptr_type_define=long
+  glib_gpi_cast='(glong)'
+  glib_gpui_cast='(gulong)'
+  ;;
+$ac_cv_sizeof_long_long)
+  glib_intptr_type_define='long long'
+  glib_gpi_cast='(gint64)'
+  glib_gpui_cast='(guint64)'
+  ;;
+$ac_cv_sizeof___int64)
+  glib_intptr_type_define=__int64
+  glib_gpi_cast='(gint64)'
+  glib_gpui_cast='(guint64)'
+  ;;
+*)
+  glib_unknown_void_p=yes
+  ;;
+esac
+
+
+case xyes in
+x$ac_cv_func_atexit)
+  glib_atexit="
+#ifdef NeXT /* @#%@! NeXTStep */
+# define g_ATEXIT(proc)	(!atexit (proc))
+#else
+# define g_ATEXIT(proc)	(atexit (proc))
+#endif"
+  ;;
+x$ac_cv_func_on_exit)
+  glib_atexit="
+#define g_ATEXIT(proc)	(on_exit ((void (*)(int, void*))(proc), NULL))"
+  ;;
+esac
+
+case xyes in
+x$ac_cv_func_memmove)
+  glib_memmove='
+#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END'
+  ;;
+x$glib_cv_working_bcopy)
+  glib_memmove="
+/* memmove isn't available, but bcopy can copy overlapping memory regions */
+#define g_memmove(d,s,n) G_STMT_START { bcopy ((s), (d), (n)); } G_STMT_END"
+  ;;
+*)  
+  glib_memmove="
+/* memmove isn't found and bcopy can't copy overlapping memory regions, 
+ * so we have to roll our own copy routine. */
+void g_memmove (void* dest, const void * src, unsigned long len);"
+  ;;
+esac
+
+glib_defines="
+#define GLIB_MAJOR_VERSION $GLIB_MAJOR_VERSION
+#define GLIB_MINOR_VERSION $GLIB_MINOR_VERSION
+#define GLIB_MICRO_VERSION $GLIB_MICRO_VERSION
+"
+
+case xyes in
+x$glib_cv_va_copy)	glib_vacopy='#define G_VA_COPY	va_copy' ;;
+x$glib_cv___va_copy)	glib_vacopy='#define G_VA_COPY	__va_copy' ;;
+*)			glib_vacopy=''
+esac
+
+if test x$glib_cv_va_val_copy = xno; then
+  glib_vacopy="\$glib_vacopy
+#define G_VA_COPY_AS_ARRAY 1"
+fi
+
+if test x$glib_cv_hasinline = xyes; then
+    glib_inline='#define G_HAVE_INLINE 1'
+fi
+if test x$glib_cv_has__inline = xyes; then
+    glib_inline="\$glib_inline
+#define G_HAVE___INLINE 1"
+fi
+if test x$glib_cv_has__inline__ = xyes; then
+    glib_inline="\$glib_inline
+#define G_HAVE___INLINE__ 1"
+fi
+
+g_have_gnuc_varargs=$g_have_gnuc_varargs
+g_have_iso_c_varargs=$g_have_iso_c_varargs
+g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
+
+g_can_inline=$g_can_inline
+g_have_gnuc_visibility=$g_have_gnuc_visibility
+g_have_sunstudio_visibility=$g_have_sunstudio_visibility
+
+if test x$ac_cv_c_bigendian = xyes; then
+  g_byte_order=G_BIG_ENDIAN
+  g_bs_native=BE
+  g_bs_alien=LE
+else
+  g_byte_order=G_LITTLE_ENDIAN
+  g_bs_native=LE
+  g_bs_alien=BE
+fi
+
+g_pollin=$glib_cv_value_POLLIN
+g_pollout=$glib_cv_value_POLLOUT
+g_pollpri=$glib_cv_value_POLLPRI
+g_pollhup=$glib_cv_value_POLLHUP
+g_pollerr=$glib_cv_value_POLLERR
+g_pollnval=$glib_cv_value_POLLNVAL
+
+g_stack_grows=$glib_cv_stack_grows
+
+g_have_eilseq=$have_eilseq
+
+case x$have_threads in
+xno)	g_enable_threads_def="#undef";;
+*)	g_enable_threads_def="#define";;
+esac
+
+g_threads_impl_def=$g_threads_impl
+
+g_mutex_has_default="$mutex_has_default"
+g_mutex_sizeof="$glib_cv_sizeof_gmutex"
+g_system_thread_sizeof="$glib_cv_sizeof_system_thread"
+g_mutex_contents="$glib_cv_byte_contents_gmutex"
+
+g_memory_barrier_needed="$glib_memory_barrier_needed"
+
+g_module_suffix="$glib_gmodule_suffix"
+
+g_pid_type="$glib_pid_type"
+case $host in
+  *-*-beos*)
+    glib_os="#define G_OS_BEOS"
+    ;;
+  *-*-cygwin*)
+    glib_os="#define G_OS_UNIX
+#define G_PLATFORM_WIN32
+#define G_WITH_CYGWIN"
+    ;;
+  *-*-mingw*)
+    glib_os="#define G_OS_WIN32
+#define G_PLATFORM_WIN32"
+    ;;
+  *)
+    glib_os="#define G_OS_UNIX"
+    ;;
+esac
+glib_static_compilation=""
+if test x$glib_win32_static_compilation = xyes; then
+  glib_static_compilation="#define GLIB_STATIC_COMPILATION 1
+#define GOBJECT_STATIC_COMPILATION 1"
+fi
+])
+
+AC_CONFIG_FILES([
+glib-2.0.pc
+glib-2.0-uninstalled.pc
+gmodule-2.0.pc
+gmodule-export-2.0.pc
+gmodule-no-export-2.0.pc
+gmodule-2.0-uninstalled.pc
+gmodule-no-export-2.0-uninstalled.pc
+gthread-2.0.pc
+gthread-2.0-uninstalled.pc
+gobject-2.0.pc
+gobject-2.0-uninstalled.pc
+gio-2.0.pc
+gio-unix-2.0.pc
+gio-2.0-uninstalled.pc
+gio-unix-2.0-uninstalled.pc
+glib-zip
+glib-gettextize
+Makefile
+build/Makefile
+build/win32/Makefile
+build/win32/dirent/Makefile
+build/win32/vs8/Makefile
+build/win32/vs9/Makefile
+glib/Makefile
+glib/libcharset/Makefile
+glib/gnulib/Makefile
+glib/pcre/Makefile
+glib/update-pcre/Makefile
+glib/tests/Makefile
+gmodule/Makefile
+gmodule/gmoduleconf.h
+gobject/Makefile
+gobject/glib-mkenums
+gobject/tests/Makefile
+gthread/Makefile
+gio/Makefile
+gio/xdgmime/Makefile
+gio/inotify/Makefile
+gio/fen/Makefile
+gio/fam/Makefile
+gio/win32/Makefile
+gio/tests/Makefile
+po/Makefile.in
+docs/Makefile
+docs/reference/Makefile
+docs/reference/glib/Makefile
+docs/reference/glib/version.xml
+docs/reference/gobject/Makefile
+docs/reference/gobject/version.xml
+docs/reference/gio/Makefile
+docs/reference/gio/version.xml
+tests/Makefile
+tests/gobject/Makefile
+tests/refcount/Makefile
+m4macros/Makefile
+])
+
+AC_CONFIG_COMMANDS([chmod-scripts],
+[chmod 0755 glib-zip
+chmod 0755 glib-gettextize
+chmod 0755 gobject/glib-mkenums])
+
+# we want to invoke this macro solely so that the config.status script
+# and automake generated makefiles know about these generated files.
+# They are only needed to distcheck the package
+if false; then
+  AC_CONFIG_FILES([
+    INSTALL
+    README
+    config.h.win32
+    glibconfig.h.win32
+    glib/makefile.msc
+    glib/glib.rc
+    gmodule/makefile.msc
+    gmodule/gmodule.rc
+    gobject/makefile.msc
+    gobject/gobject.rc
+    gthread/makefile.msc
+    gthread/gthread.rc
+    tests/makefile.msc
+  ])
+fi
+
+AC_OUTPUT
diff --git a/debian/README.debian b/debian/README.debian
new file mode 100644
index 0000000..571f84d
--- /dev/null
+++ b/debian/README.debian
@@ -0,0 +1,30 @@
+glib CVS snapshots for Debian
+-----------------------------
+
+This is GLib version 1.1.   GLib, is a library which includes support
+routines for C such as lists, trees, hashes, memory allocation, and
+many other things.
+
+Versions of GLib prior to 1.1.0 are distributed with GTK+ versions 1.1.0
+and earlier.
+
+This is a snapshot of GLib from the main CVS archive, built into a
+Debian package. This package is not guaranteed to work, as it was
+built automatically. You're on your own, mister or missus!
+
+The GIMP Tool Kit (gtk) is a set of widgets to help you program
+programs for the X Windowing System easily and powerfully.
+
+gtk is the moving force behind The GNU Image Manipulation Program (The
+GIMP) -- the number one freely-available image editing and creation
+program available. 
+
+gtk is rapidly under development, and the source tree has officially
+been separated from The GIMP now, as other teams of programmers
+are beginning to write software using its great widget set -- like
+GNOME, a desktop interface for X, and gzilla, a freely available
+web browser for X.
+
+Ben Gertzfield <che@debian.org>, Tue, 17 Nov 1998 00:06:12 -0800
+
+
diff --git a/debian/build b/debian/build
new file mode 100755
index 0000000..1bd8a50
--- /dev/null
+++ b/debian/build
@@ -0,0 +1,62 @@
+#!/usr/bin/perl -w
+
+				# Adjust debian/changelog and build a new
+				# Debian package of a CVS archive.
+
+				# Written 17 November 1998 by Ben Gertzfield
+				# <che@debian.org>
+
+				# This work is released under the GNU
+				# General Public License, version 2 or
+				# later.
+
+use strict;
+use diagnostics;
+use File::Copy;
+
+my $maintainer = 'Ben Gertzfield <che@debian.org>';
+
+my @date = localtime;
+
+my $datestr = sprintf("%d%.2d%.2d", $date[5] + 1900, $date[4] + 1, $date[3]);
+my $revision = '01';
+
+open (CHANGELOG, 'debian/changelog') or die "Couldn't open debian/changelog: $!\n";
+
+$_ = <CHANGELOG>;
+chomp;
+
+close CHANGELOG;
+
+my ($package, $last_date, $last_revision) = /^(.*?) \((.*?)\.(.*)?\)/;
+
+if ($last_date eq $datestr) {
+  $revision = sprintf("%.2d", $last_revision + 1);
+}
+
+my $new_version = "$datestr.$revision";
+
+copy('debian/changelog', 'debian/changelog.old') or die "Couldn't copy debian/changelog to debian/changelog.old: $!\n";
+
+open(NEWCHANGELOG, ">debian/changelog") or die "Couldn't open debian/changelog for writing: $!\n";
+
+print NEWCHANGELOG "$package ($new_version) unstable; urgency=low\n\n  * CVS snapshot build at " . scalar localtime() . "\n\n -- $maintainer  " . `date -R` . "\n";
+
+open(OLDCHANGELOG, "debian/changelog.old") or die "Couldn't open debian/changelog.old: $!\n";
+
+while (<OLDCHANGELOG>) {
+  print NEWCHANGELOG;
+}
+
+close OLDCHANGELOG;
+close NEWCHANGELOG;
+
+unlink('debian/changelog.old') or die "Couldn't unlink debian/changelog.old: $!\n";
+
+open(NEWVERSION, '>debian/version') or die "Couldn't open debian/version for writing: $!\n";
+print NEWVERSION "$new_version\n";
+close NEWVERSION;
+
+system('dpkg-buildpackage -b -rfakeroot -us -uc');
+unlink 'debian/version' or die "Couldn't unlink debian/version: $!\n";
+
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..6b5e22d
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,10 @@
+glib-cvs (19981116.01) unstable; urgency=low
+
+  * Testing the CVS build scripts 
+
+ -- Ben Gertzfield <che@debian.org>  Tue, 17 Nov 1998 00:07:26 -0800
+
+Local variables:
+mode: debian-changelog
+add-log-mailing-address: "che@debian.org"
+End:
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..8185a50
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,53 @@
+Source: glib-cvs
+Priority: extra
+Section: libs
+Maintainer: Ben Gertzfield <che@debian.org>
+Standards-Version: 2.4.0.0
+
+Package: libglib-cvs-1.1
+Architecture: any
+Section: libs
+Depends: ${shlibs:Depends}
+Suggests: libgtk-cvs-1.1
+Conflicts: libglib1.1
+Description: CVS build of the GLib library of C routines
+ **THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
+   BUILD OF THE GLIB LIBRARIES! BEWARE! IT MAY NOT WORK!**
+ . 
+ GLib is a library containing many useful C routines for things such
+ as trees, hashes, and lists. GLib was previously distributed with
+ the GTK+ toolkit, but has been split off as of the developers' version
+ 1.1.0.
+
+Package: libglib-cvs-dev
+Architecture: any
+Section: devel
+Conflicts: libgtk-dev, libglib-dev
+Provides: libglib-dev
+Replaces: libglib-dev
+Depends: libglib-cvs-1.1 (=${Source-Version})
+Suggests: libgtk-cvs-dev, libgtk-cvs-1.1-doc
+Description: CVS header files and static libraries for the GLib library
+ **THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
+   BUILD OF THE GLIB LIBRARIES! BEWARE! IT MAY NOT WORK!**
+ .
+ This package contains the header files and static libraries for the
+ GLib C library.
+ .
+ Install this package if you wish to develop your own X programs using
+ the GTK+ widget toolkit, or wish to develop plug-ins for The GIMP.
+
+Package: libglib-cvs-dbg
+Architecture: any
+Section: devel
+Conflicts: libgtk-dev, libglib-dbg
+Depends: libglib-cvs-1.1 (=${Source-Version}), libglib-cvs-dev (=${Source-Version})
+Description: CVS debugging static libraries for the GLib library
+ **THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
+   BUILD OF THE GLIB LIBRARIES! BEWARE! IT MAY NOT WORK!**
+ .
+ This package contains the debugging static libraries for the GLib C
+ library.
+ .
+ The debugging libraries are installed as /usr/lib/libglib_g.a -- link
+ specifically with them if you want to debug.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..27fab20
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,8 @@
+This package was debianized by Ben Gertzfield <che@debian.org>
+on Tue, 17 Nov 1998 00:16:10 -0800
+
+It was downloaded from the CVS archives at cvs.gimp.org.
+
+It may be redistributed under the terms of the GNU LGPL, Version 2 or
+later, found on Debian systems in the file /usr/doc/copyright/LGPL.
+
diff --git a/debian/libglib-cvs-dev.files b/debian/libglib-cvs-dev.files
new file mode 100644
index 0000000..4d95cfe
--- /dev/null
+++ b/debian/libglib-cvs-dev.files
@@ -0,0 +1,9 @@
+usr/lib/libglib.so
+usr/lib/libglib.a
+usr/lib/libgmodule.so
+usr/lib/libgmodule.a
+usr/include/glib.h
+usr/include/gmodule.h
+usr/bin/glib-config
+usr/lib/glib/
+usr/share/aclocal/glib.m4
diff --git a/debian/postinst b/debian/postinst
new file mode 100644
index 0000000..0cd5f28
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -e
+
+ldconfig
+
+#DEBHELPER#
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..7f06abb
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,126 @@
+#!/usr/bin/make -f
+
+# debian/rules file for CVS glib1.1 Debian package
+# based on glib+ debian/rules file
+# written April 1998 by Ben Gertzfield <che@debian.org>
+
+build: build-stamp
+build-stamp:
+	dh_testdir
+	./autogen.sh --prefix=/usr
+	$(MAKE)
+	touch build-stamp
+
+build-dbg: build-dbg-stamp
+build-dbg-stamp:
+	dh_testdir
+	./configure --prefix=/usr --enable-debug=yes
+	$(MAKE)
+	touch build-dbg-stamp
+
+clean:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp build-dbg-stamp install-stamp install-dbg-stamp
+	# Add here commands to clean up after the build process.
+	-$(MAKE) clean
+	-$(MAKE) distclean
+	find . -name '*.o' -o -name '_libs' -o -name '*.lo' -o -name '*.a' -o -name '.deps' | xargs rm -rf
+	dh_clean
+
+clean-dbg:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp build-dbg-stamp install-stamp install-dbg-stamp
+	# Add here commands to clean up after the build process.
+	-$(MAKE) clean
+	-$(MAKE) distclean
+	find . -name '*.o' -o -name '_libs' -o -name '*.lo' -o -name '*.a' -o -name '.deps' | xargs rm -rf
+	dh_clean -k
+
+install: install-stamp
+install-stamp: build
+	dh_testdir
+	dh_testroot
+	dh_clean
+	$(MAKE) prefix=`pwd`/debian/tmp/usr install
+	touch install-stamp
+
+install-dbg: install-dbg-stamp
+install-dbg-stamp: build-dbg
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	$(MAKE) prefix=`pwd`/debian/libglib-cvs-dbg/usr install
+	touch install-dbg-stamp
+
+# Build architecture-independent files here.
+binary-indep: 
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install libglib-cvs-dev libglib-cvs-1.1 libglib-cvs-dbg
+
+libglib-cvs-1.1: build
+	dh_testdir -plibglib-cvs-1.1 
+	dh_testroot -plibglib-cvs-1.1
+	dh_installdirs -plibglib-cvs-1.1
+	# Add here commands to install the files into debian/tmp
+	rm -rf debian/tmp/usr/bin debian/tmp/usr/include debian/tmp/usr/info debian/tmp/usr/lib/glib debian/tmp/usr/share debian/tmp/usr/man debian/tmp/usr/lib/*.la
+	dh_installdocs -plibglib-cvs-1.1
+	dh_installchangelogs -plibglib-cvs-1.1
+	dh_strip -plibglib-cvs-1.1
+	dh_compress -plibglib-cvs-1.1
+	dh_fixperms -plibglib-cvs-1.1
+	dh_installdeb -plibglib-cvs-1.1
+	dh_shlibdeps -plibglib-cvs-1.1
+	dh_gencontrol -plibglib-cvs-1.1
+	dh_makeshlibs -plibglib-cvs-1.1 -V 'libglib-cvs-1.1 (='`cat debian/version`')'
+	dh_md5sums -plibglib-cvs-1.1
+	dh_builddeb -plibglib-cvs-1.1
+
+libglib-cvs-dev: build
+	dh_testdir -plibglib-cvs-dev
+	dh_testroot -plibglib-cvs-dev
+	dh_clean -plibglib-cvs-dev -k
+	dh_installdirs -plibglib-cvs-dev
+	# Add here commands to install the files into debian/tmp
+	dh_movefiles -plibglib-cvs-dev
+	cp glib-config debian/tmp/usr/bin
+	dh_installdocs -plibglib-cvs-dev 
+	dh_undocumented -plibglib-cvs-dev glib-config.1
+	dh_installchangelogs -plibglib-cvs-dev
+	dh_strip -plibglib-cvs-dev
+	dh_compress -plibglib-cvs-dev
+	dh_fixperms -plibglib-cvs-dev
+	dh_installdeb -plibglib-cvs-dev
+	dh_shlibdeps -plibglib-cvs-dev
+	dh_gencontrol -plibglib-cvs-dev
+	dh_md5sums -plibglib-cvs-dev
+	dh_builddeb -plibglib-cvs-dev
+
+libglib-cvs-dbg: clean-dbg install-dbg
+	dh_testdir -plibglib-cvs-dbg
+	dh_testroot -plibglib-cvs-dbg
+	dh_installdirs -plibglib-cvs-dbg
+	# Add here commands to install the files into debian/libglib-cvs-dbg
+	rm -rf debian/libglib-cvs-dbg/usr/bin debian/libglib-cvs-dbg/usr/include debian/libglib-cvs-dbg/usr/info debian/libglib-cvs-dbg/usr/lib/glib debian/libglib-cvs-dbg/usr/man debian/libglib-cvs-dbg/usr/share debian/libglib-cvs-dbg/usr/lib/*.{la,so*}
+	for file in `find debian/libglib-cvs-dbg/usr/lib -name '*.a'` ; do \
+	  mv $$file debian/libglib-cvs-dbg/usr/lib/`basename $$file .a`_g.a; \
+        done
+	dh_installdocs -plibglib-cvs-dbg
+	dh_installchangelogs -plibglib-cvs-dbg
+	dh_compress -plibglib-cvs-dbg
+	dh_fixperms -plibglib-cvs-dbg
+	dh_installdeb -plibglib-cvs-dbg
+	dh_shlibdeps -plibglib-cvs-dbg
+	dh_gencontrol -plibglib-cvs-dbg
+	dh_makeshlibs -plibglib-cvs-dbg -V
+	dh_md5sums -plibglib-cvs-dbg
+	dh_builddeb -plibglib-cvs-dbg
+
+source diff:                                                                  
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..2349f44
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,11 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+SUBDIRS = reference
+
+EXTRA_DIST += debugging.txt macros.txt
+
+files:
+	@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
+	  echo $$p; \
+	done
diff --git a/docs/debugging.txt b/docs/debugging.txt
new file mode 100644
index 0000000..8ab2028
--- /dev/null
+++ b/docs/debugging.txt
@@ -0,0 +1,41 @@
+
+Traps (G_BREAKPOINT) and traces for the debuging
+================================================
+
+Some code portions contain trap variables that can be set during
+debugging time if G_ENABLE_DEBUG has been defined upon compilation
+(use the --enable-debug=yes option to configure for this, macros.txt
+covers more details).
+Such traps lead to immediate code halts to examine the current
+program state and backtrace.
+Currently, the following trap variables exist:
+
+static volatile gulong g_trap_free_size;
+static volatile gulong g_trap_realloc_size;
+static volatile gulong g_trap_malloc_size;
+	If set to a size > 0, g_free(), g_realloc() and g_malloc()
+	respectively, will be intercepted if the size matches the
+	size of the corresponding memory block to free/reallocate/allocate.
+	This will only work with g_mem_set_vtable (glib_mem_profiler_table)
+	upon startup though, because memory profiling is required to match
+	on the memory block sizes.
+static volatile GObject *g_trap_object_ref;
+	If set to a valid object pointer, ref/unref will be intercepted
+	with G_BREAKPOINT ();
+static volatile gpointer *g_trap_instance_signals;
+static volatile gpointer *g_trace_instance_signals;
+       If set to a valid instance pointer, debugging messages
+       will be spewed about emissions of signals on this instance.
+       For g_trap_instance_signals matches, the emissions will
+       also be intercepted with G_BREAKPOINT ();
+
+Environment variables for debugging
+===================================
+When G_ENABLE_DEBUG was defined upon compilation, the GObject library 
+supports an environment variable GOBJECT_DEBUG that can be set to a
+combination of the flags passed in to g_type_init() (currently
+"objects" and "signals") to trigger debugging messages about
+object bookkeeping and signal emissions during runtime.
+
+
+2000/02/04	Tim Janik
diff --git a/docs/macros.txt b/docs/macros.txt
new file mode 100644
index 0000000..8b42029
--- /dev/null
+++ b/docs/macros.txt
@@ -0,0 +1,81 @@
+
+
+GLib's configure options and corresponding macros
+=================================================
+
+--enable-debug=no
+	-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS
+--enable-debug=minimum	[default for stable branches]
+	none
+--enable-debug=yes	[default for development branches]
+	-DG_ENABLE_DEBUG -g
+--enable-gc-friendly=yes
+	#define ENABLE_GC_FRIENDLY_DEFAULT 1
+--disable-mem-pools=yes
+	#define DISABLE_MEM_POOLS 1
+
+Besides these, there are some local feature specific options, but my main
+focus here is to concentrate on macros that affect overall GLib behaviour
+and/or third party code.
+
+
+Notes on GLib's internal and global macros
+==========================================
+
+
+ENABLE_GC_FRIENDLY_DEFAULT
+	Newly allocated memory that isn't directly initialized, as well
+	as memory being freed should be reset to 0. The point here is to
+	allow memory checkers and similar programs that use bohem GC alike
+	algorithms to produce more accurate results.
+	This can also be accomplished by setting the environment variable
+	G_DEBUG=gc-friendly.
+DISABLE_MEM_POOLS
+	Many small chunks of memory are often allocated via collective pools
+	in GLib and are cached after release to speed up reallocations.
+	For sparse memory systems this behaviour is often inferior, so
+	memory pools can be disabled to avoid excessive caching and force
+	atomic maintenance of chunks through the g_malloc/g_free.
+	Code currently affected by this macro:
+	- GList, GSList, GNode allocations
+	- GMemChunks become basically non-effective
+	- GSignal disables all caching (potentially very slow)
+	- GType doesn't honour the GTypeInfo n_preallocs field anymore
+	- the GBSearchArray flag G_BSEARCH_ALIGN_POWER2 becomes non-functional
+G_DISABLE_ASSERT
+	The g_assert() and g_assert_not_reached() become non-functional
+	with this define. The motivation is to speed up end-user apps by
+	avoiding expensive checks.
+	This macro can affect third-party code. --enable-debug=no will only
+	disable the assertion macros for GLib itself, but third-party code
+	that passes -DG_DISABLE_ASSERT to the compiler upon its own build
+	will end up with the non-functional variants after including glib.h
+	as well.
+	NOTE: Code inside the assertion macros should not have side effects
+	that affect the operation of the program.
+G_DISABLE_CHECKS
+	This macro is similar to G_DISABLE_ASSERT, it affects third-party
+	code as mentioned above and the NOTE about G_DISABLE_ASSERT applies
+	too. The macros that become non-functional here are
+	g_return_if_fail(), g_return_val_if_fail(), g_return_if_reached() and
+	g_return_val_if_reached().
+	Additionally the glib_mem_profiler_table and g_mem_profile() from
+	gmem.h become non-functional if this macro is supplied.
+	This macro also switches off certain checks in the GSignal code.
+G_ENABLE_DEBUG
+	Quite a bit of additional debugging code is compiled into GLib for this
+	macro, and since it is a globally visible define, third-party code may
+	be affected by it similar to G_DISABLE_ASSERT.
+	The additional code executed/compiled for this macro currently involve:
+	- extra validity checks for GDate
+	- memory profiling traps in gmem.c (consult debugging.txt for details)
+	- BREAKPOINT abortion for fatal log levels in gmessage.c instead of
+	  plain abort() to allow debuggers trapping and overriding them
+	- added verbosity of gscanner.c to catch deprecated code paths
+	- added verbosity of gutils.c to catch deprecated code paths
+	- object ref/unref traps (consult debugging.txt) and object bookkeeping
+	  in gobject.c
+	- extra validity checks in gsignal.c
+
+
+2000/12/28	Tim Janik
diff --git a/docs/reference/.gitignore b/docs/reference/.gitignore
new file mode 100644
index 0000000..45c18bb
--- /dev/null
+++ b/docs/reference/.gitignore
@@ -0,0 +1,15 @@
+*-decl-list.txt
+*-decl.txt
+*-unused.txt
+*-undocumented.txt
+*-undeclared.txt
+*.args
+*.hierarchy
+*.interfaces
+*.prerequisites
+*.signals
+*.stamp
+html
+xml
+*.bak
+version.xml
diff --git a/docs/reference/AUTHORS b/docs/reference/AUTHORS
new file mode 100644
index 0000000..64f46b7
--- /dev/null
+++ b/docs/reference/AUTHORS
@@ -0,0 +1,7 @@
+Damon Chaplin <damon@karuna.freeserve.co.uk> and others.
+
+See:
+
+ http://www.gtk.org/rdp/status.html
+
+for a complete list.
diff --git a/docs/reference/COPYING b/docs/reference/COPYING
new file mode 100644
index 0000000..df952d3
--- /dev/null
+++ b/docs/reference/COPYING
@@ -0,0 +1,30 @@
+This work may be reproduced and distributed in whole or in part, in
+any medium, physical or electronic, so as long as this copyright
+notice remains intact and unchanged on all copies.  Commercial
+redistribution is permitted and encouraged, but you may not
+redistribute, in whole or in part, under terms more restrictive than
+those under which you received it. If you redistribute a modified or
+translated version of this work, you must also make the source code to
+the modified or translated version available in electronic form
+without charge.  However, mere aggregation as part of a larger work
+shall not count as a modification for this purpose.
+
+All code examples in this work are placed into the public domain,
+and may be used, modified and redistributed without restriction.
+
+BECAUSE THIS WORK IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE WORK, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE WORK "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.  SHOULD THE WORK PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY REPAIR OR CORRECTION.
+
+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 WORK 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
+WORK, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog
new file mode 100644
index 0000000..9295bc8
--- /dev/null
+++ b/docs/reference/ChangeLog
@@ -0,0 +1,4152 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 573128 – A couple of typos in GObject documentation
+
+	* gobject/tut_gobject.xml: Fix some typos. Reported by Dimitri Vorbiev
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-06  Stefan Kost  <ensonic@users.sf.net>
+
+	* gio/gio-docs.xml:
+	* glib/glib-docs.sgml:
+	* gobject/gobject-docs.sgml:
+	  Add online urls for library.gnome.org. This allows other docs to do
+          gtkdoc-rebase --online --html-dir=html
+          before publishing docs and have working xrefs.
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt:
+	* glib/tmpl/base64.sgml: Mention g_base64_decode_inplace
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+2009-01-02  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/string_utils.sgml: Move most function docs inline.
+
+2009-01-01  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 565831 – error in interface creation sample
+
+	* gobject/tut_howto.xml: Fix an example. Pointed out by
+	Jens Georg.
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.3 ===
+
+2008-12-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add new functions
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 563156 – Document printing and scanning gunichar values
+
+	* glib/tmpl/unicode.sgml: Document printing and scanning gunichar
+	values.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 563150 – G_GU?INT*_MODIFIER/FORMAT docs
+
+	* glib/tmpl/glib-unused.sgml:
+	* glib/tmpl/macros_misc.sgml:
+	* glib/tmpl/types.sgml:
+	Update docs to mention scanning as well as printing.
+	Cross reference these from their respective types.
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+2008-12-01  Alexander Larsson  <alexl@redhat.com>
+
+        Reviewed by NOBODY (OOPS!).
+
+        * gio/gio-sections.txt:
+
+2008-11-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/running.sgml: Mention all and help special options in
+	debug envvars.
+
+2008-11-30  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 562538 – GObject interface tutorial shouldn't finalise with
+	"Please forget everything"
+
+	* gobject/tut_gtype.xml: Remove the questionable closing sentence
+	and all references to private functions. Pointed out by Christian
+	Dywan.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 559452 – GObject Reference Manual (typo)
+	Bug 559462 – GObject Reference Manual (typo)
+	Bug 559517 – GObject Reference Manual (typo)
+
+	* gobject/tut_howto.xml:
+	* gobject/tut_gsignal.xml: 
+	* gobject/tut_gobject.xml: Fix typos, found by Andrew Feren.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add g_app_info_get_commandline
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/keyfile.sgml: Explain locale identifiers in
+	more detail
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 562549 – g_byte_array_free should tell how free data
+
+	* glib/tmpl/arrays_byte.sgml: Improve docs, proposed by
+	Guillaume Desmottes
+
+2008-11-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/Makefile.am:
+	* gobject/Makefile.am:
+	* gio/Makefile.am: Use a new gtk-doc feature to generate
+	much nicer indices.
+
+2008-11-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add G_STATIC_ASSERT and friends
+
+2008-11-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add G_FILE_ATTRIBUTE_PREVIEW_ICON
+
+2008-11-10  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 559448 – GObject Reference Manual (typo)
+
+	* gobject/tut_gobject.xml: Fix typo.
+
+2008-11-03 Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 552776 – ac_cv_func_posix_getgrgid_r not mentioned
+
+	* glib/cross.sgml: Mention ac_cv_func_posix_getgrgid_r.
+
+2008-10-29 16:04:38  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/macros_misc.sgml: Clarified/added docs for
+	G_STRINGIFY, G_PASTE and G_STATIC_ASSERT, based on
+	patches from Christian Persch and  Christian Dywan.
+
+2008-10-21  Alexander Larsson  <alexl@redhat.com>
+
+        * gio/gio-sections.txt:
+	Update with new symbolse
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.0 ===
+
+	* gio/gio-sections.txt: Add new api
+
+	* gobject/gobject-docs.sgml: 
+	* gio/gio-docs.xml: Add new indexes
+
+2008-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/Makefile.am: Don't specify multiple directories in
+	DOC_SOURCE_DIR. It doesn't work.
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	* glib/tmpl/testing.sgml: Fix lots of typos, document
+	g_assert_error() and g_assert_no_error()
+
+2008-09-26`  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/iochannel.sgml: Move more docs inline
+
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.1 ===
+
+2008-09-15  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 552359 – g_file_info_get_icon should return GThemedIcon, and
+	g_themed_icon_get_names shold be documented ?
+
+	* gio/gio-sections.txt: Add g_themed_icon_get_names. 
+
+2008-09-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/modules.sgml: Reinstate docs that somehow got lost.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.0 ===
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-sections.txt: Add g_object_get_type
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 550056 – Missing documentation for g_emblemed_icon_get_emblems
+
+	* gio/gio-sections.txt: Add some missing GEmblem functions.
+	Noticed by Cosmio Cecchi
+
+2008-08-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/i18n.sgml: Add hint about intltool to NC_() docs.
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+2008-08-16  Matthias Clasen  <mclasen@redhat.com>
+	
+	* gio/gio-sections.txt: Fix a typo
+
+2008-08-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/tmpl/threads.sgml: Add an exception: g_mem_set_vtable() may
+	be called before g_thread_init().
+
+2008-08-15  Tor Lillqvist  <tml@novell.com>
+
+	* glib/tmpl/threads.sgml: Warn about the consequences of not
+	calling g_thread_init() first, if it will be called at all. Advice
+	calling it if using random GLib-based libraries.
+
+2008-08-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 547262 – Missing link in the docs
+
+	* glib/tmpl/gregex.sgml: Fix a reference.
+	Pointed out by Bastien Nocera
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio.types:
+	* gio/gio-docs.xml:
+	* gio/gio-sections.txt: Add Gemblem
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.5 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-docs.sgml: Add a 2.18 index
+
+2008-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add some more GEmblemedIcon things.
+
+	* glib/tmpl/testing.sgml: Fix a typo. Noticed by Marek Kasik.
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_markup_context_get_user_data
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt:
+	* gio/gio-docs.xml: Add GEmblemedIcon 
+
+2008-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.4 ===
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-sections.txt: Add new signal api.
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt:
+	* glib/tmpl/i18n.sgml: Add new gettext stuff
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 530759 – update the gobject tutorial to the XXI century
+
+	* gobject/*: Some updates to the tutorial. Patch by Emmanuele
+	Bassi.
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add g_content_type_guess_for_tree
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 543220 – Case collision on gio-extension-points.html
+
+	Reported by Ryan Schmidt
+	* gio/overview.xml: Rename id to avoid filename conflict.
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 543168 – Description of G_SLICE=debug-blocks discourages its use
+
+	* glib/running.sgml: Improve docs of G_SLICE=debug-blocks.
+	Patch by Alessandro Vesely.
+
+2008-07-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add new GMount functions
+
+2008-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 521589 – [RFC] gobject documentation should mention Vala
+
+	* gobject/tut_tools.xml: Add a reference to Vala.
+	Patch by Marc-Andre Lureau.
+
+2008-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Move g_strcmp0 to a more appropriate
+	place in the docs.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add g_desktop_app_info_new_from_keyfile
+	and g_file_monitor
+
+2008-07-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio.types: Add missing types. Pointed out by David Zeuthen.
+
+2008-06-24  Michael Natterer  <mitch@imendio.com>
+
+	* glib/Makefile.am
+	* gobject/Makefile.am: don't comment out the include of
+	Makefile.decl just because there are no tests. It needs to be
+	included in each Makefile.am or make check will fail.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* glib/Makefile.am:
+	* gobject/Makefile.am:
+	  Unify the Makefiles. In glib only scan glib folders.
+
+2008-06-16  Ross Burton  <ross@burtonini.com>
+
+	* gio/gio-sections.txt:
+	Add g_file_enumerator_get_container.
+
+2008-06-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_MAY_ALIAS
+
+	* glib/tmpl/testing.sgml: Move docs around, and add more
+
+	* glib/tmpl/unicode.sgml: Document break types
+
+	* glib/tmpl/hash_tables.sgml: Add docs for GHashTableIter
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.17.2 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.1 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add some new symbols
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/running.sgml: Remove mention of G_WIN32_PRETEND_WIN9X
+
+2008-06-12  Ross Burton  <ross@burtonini.com>
+
+	* gio/gio-sections.txt:
+	Add g_file_make_directory_with_parents.
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Testing documentation fixups
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/gtester.xml:
+	* glib/gtester.1:
+	* glib/gtester-report.xml:
+	* glib/gtester-report.1:
+	* glib/glib-docs.sgml:
+	* glib/Makefile.am: Add gtester, gtester-report man pages
+
+2008-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib-sections.txt: Add g_dgettext() and g_dngettext().
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 535418 – Please document which glib version defines goffset
+
+	* glib/tmpl/types.sgml: Add a Since tag for goffset
+	Proposed by Holger Berndt
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528715 – Misprint in the description of the interface
+	g_type_class_add_private
+
+	* glib/tmpl/macros_misc.sgml:
+	* gobject/tmpl/gclosure.sgml:
+	* gobject/tmpl/gtype.sgml: Fix typos
+	Noticed by Areg Beketovski
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528714 – Misprint in the description of the interface 
+	g_param_spec_flags
+
+	* gobject/tmpl/param_value_types.sgml: Fix a typo.
+	Pointed out by Areg Beketovski
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 537260 – Doc bug in G_TYPE_INSTANCE_GET_CLASS()
+
+	* gobject/tmpl/gtype.sgml: Fix unclear parameter descriptions.
+	Pointed out by Behdad Esfahbod
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 530527 – Misprint in the description of the interface
+	g_cclosure_marshal_VOID__FLAGS
+
+	* gobject/tmpl/gclosure.sgml: Fix a duplication.
+	Noticed by Areg Beketovski
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 530526 – Misprint in the description of the fields 'class_init' 
+	and 'class_finalize' of the structure GTypeInfo
+
+	* gobject/tmpl/gtype.sgml: Improve GTypeInfo docs
+	Proposed by Areg Beketovski
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528719 – Improvement to the documentation of the
+	"g_object_connect" interface
+
+	* gobject/tmpl/objects.sgml: Improve the documentation of
+	g_object_connect. Proposed by Areg Bketovski
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528172 – gtk_signal_handlers_unblock_* functions return value
+	amount of matched signals, not amount of actually unblocked.
+
+	* gobject/tmpl/signals.sgml: Fix documentation of return value
+	of functions that operate on matched signal handlers.
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528717 – Misprint in the description of the parameter 
+	'type_id' for the interface g_type_register_fundamental
+
+	* gobject/tmpl/gtype.sgml: Remove references to GTypeFundamentals
+	Pointed out by Areg Beketovski
+
+2008-06-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528716 – Misprint in the description of the parameter 
+	'iface_data' for the callback types GInterfaceInitFunc and 
+	GInterfaceFinalizeFunc
+
+	* gobject/tmpl/gtype.sgml: Fix description of parameters
+	for GInterface{Init/Finalize}Func.
+	Pointed out by Areg Beketovski
+
+2008-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gparamspec.sgml: Document G_PARAM_STATIC_NICK
+
+2008-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add g_themed_icon_prepend_name
+
+2008-06-10 14:06:34  Tim Janik  <timj@imendio.com>
+
+	* gobject/tmpl/gtype.sgml: fixed documentation regarding type checking
+	macros that do and do not issue warnings.
+
+2008-05-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-docs.sgml:
+	* gio/gio-docs.sgml: Add indexes of 2.18 additions
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.0 ===
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/compiling.sgml: Document G_DISABLE_SINGLE_INCLUDES
+
+2008-05-27  Michael Natterer  <mitch@gimp.org>
+
+	* glib/tmpl/gurifuncs.sgml
+	* glib/tmpl/testing.sgml: new files.
+
+	* glib/tmpl/unicode.sgml
+	* glib/tmpl/macros_misc.sgml
+	* glib/tmpl/checksum.sgml: regenerated.
+
+	* Updated lots of svn:ignore all over the place.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+	
+	Bug 535021 – g_param_spec_internal documentation should 
+	describe purpose of nick and blurb
+
+	* gobject/tmpl/gparamspec.sgml: Explain nicks and blurbs
+	some more.
+
+2008-05-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-docs.sgml: Add 2.18 index
+
+	* glib/glib-sections.txt: Add g_checksum_reset
+
+2008-05-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gclosure.sgml: Fix docs for
+	g_cclosure_marshal_STRING__OBJECT_POINTER. (#534177, Areg Beketovski)
+
+2008-05-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 527214 – g_timer_elapsed() returns random values.
+
+	* docs/reference/glib/tmpl/timers.sgml:
+	Add notes regarding gthreads dependency. 
+	Patch by Mathias Hasselmann
+
+2008-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Add new api
+
+2008-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 528648 – Extra >s in Object Construction section...
+
+	* gobject/tut_howto.xml: Fix a formatting glitch
+
+2008-05-14  Tor Lillqvist  <tml@novell.com>
+
+	* glib/tmpl/spawn.sgml: Don't mention fork()/exec() in the short
+	description. fork()/exec() is an implementation detail on Unix.
+
+2008-04-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/unicode.sgml: Updates for Unicode 5.1
+
+2008-04-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 526572 – Missing * in declaration of parent_class in Object
+	Destruction section of GObject Reference Manual
+
+	* gobject/tut_howto.xml: Add missing *.
+
+2008-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 525553 – fix typo and nitpicking in GArray documentation
+
+	* glib/tmpl/arrays.sgml: Correct an index in an example,
+	pointed out by Paul Bolle
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+	
+	* gio/gio-sections.txt: Add g_file_query_file_type.
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt:
+	* glib/tmpl/macros-misc.sgml: Document G_GNUC_ALLOC_SIZE
+	macros
+
+2008-03-28  A. Walton  <awalton@svn.gnome.org>
+
+	* gio/overview.xml:
+	Document GIO_EXTRA_MODULES, fixes a small typo.
+
+2008-03-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/overview.xml: Document GVS_DISABLE_FUSE.
+
+2008-03-12  Benjamin Otte  <otte@gnome.org>
+
+	* gio/gio-sections.txt:
+	g_file_contains_file() doesn't exist anymore
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.16.1 ===
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/linked_lists_double.sgml:
+	* glib/tmpl/linked_lists_single.sgml: Remove docs that have
+	been inlined.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/types.sgml: Add a Since marker for goffset (#521013,
+	Charles Kerr)
+
+2008-02-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/linked_lists_double.sgml: Move docs inline
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.6 ===
+
+2008-02-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Updates
+
+2008-02-21  Tor Lillqvist  <tml@novell.com>
+
+	* glib/running.sgml: Clarify character set issues on Windows.
+
+2008-02-13  Ryan Lortie  <desrt@desrt.ca>
+
+        * gio/gio-sections.txt: add G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT
+
+2008-02-12  Matthias Clasen <mclasen@redhat.com>
+
+	* gio/migration.xml: Add a note about mime monitoring
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.15.5 ===
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* gio/gio-docs.xml:
+	* gio/gio-sections.txt:
+	* gio/overview.xml: Documentation additions
+
+2008-02-10  Philip Withnall  <pwithnall@svn.gnome.org>
+
+	* glib/tmpl/modules.sgml: Improve the documentation for
+	the G_MODULE_EXPORT macro. (#514470)
+
+2008-02-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/i18n.sgml: Improve the documentation for the
+	N_() macro.  (#514053, Tommi Vainikainen)
+
+2008-01-29  Christian Persch  <chpe@gnome.org>
+
+	* glib/tmpl/macros_misc.sgml: G_GNUC_[PRETTY_]FUNCTION are
+	deprecated since 2.16, not 2.14.
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/trees-nary.sgml: Move docs inline
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_(PRETTY)_FUNCTION
+	as deprecated.
+
+2008-01-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/migration.xml: Some more
+
+2008-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/migration.xml: Add something on trash handling
+	and some very sketchy information on gnome_vfs_xfer
+
+2008-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/overview.xml: Document environment
+	variables used by GIO.
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+2008-01-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Additions
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.2 ===
+
+2008-01-11  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/*: Hook up gtestutils docs.
+	
+2008-01-08  Alexander Larsson  <alexl@redhat.com>
+
+        * gio/gio-docs.xml:
+        * gio/migrating.xml:
+	Remove GDirectoryMonitor refernces
+
+008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.1 ===
+
+2008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt:
+	* gio/gio-sections.txt: Update to api changes
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/building.sgml: Document new dependencies and 
+	configure options.
+
+2007-12-31  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gio/migrating.xml: Fixed invalid XML entity
+
+2007-12-31  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* glib/tmpl/macros_misc.sgml: Fixed typo
+
+2007-12-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/Makefile.am:
+	* gio/gio-sections.txt: Updates
+
+2007-12-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/spawn.sgml: Add a warning about allowed functions
+	between fork() and exec().
+
+2007-12-24  Benjamin Otte  <otte@gnome.org>
+
+	* glib/tmpl/timers.sgml: Add a warning about g_thread_init
+	invalidating timers. (#491218)
+
+2007-12-24  Mathias Hasselmann  <mathias@openismus.com>
+
+	Fix typo in g_try_new0 docs (#505195, Felix Riemann).
+
+	* docs/reference/glib/tmpl/memory.sgml: Reference
+	n_structs, instead of non-existant n_counts argument.
+
+2007-12-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gtypemodule.sgml: Fix a typo
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.0 ===
+
+2007-12-19  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/migrating.xml:
+	* gio/overview.xml:
+	Some minor fixes and additions.
+	
+2007-12-17  Matthias Clasen <mclasen@redhat.com>
+
+	* gio: Flesh out the overview and migration docs.
+
+2007-12-17  Matthias Clasen <mclasen@redhat.com>
+
+	* gio/migration.xml: Stub of a migration chapter
+	* gio/overview.xml: Stub of an overview
+	* gio/gvfs-overview.{odg,png}: Overview diagram taken
+	from Alex Guadec slides.
+
+	* gio/Makefile.am:
+	* gio/gio-docs.xml: Include these
+
+2007-12-17  Matthias Clasen <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Updates
+
+2007-12-14  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/hash_tables.sgml:
+	* glib/glib-sections.txt: Add hash iterator functions
+
+2007-12-10  Matthias Clasen <mclasen@redhat.com>
+
+	* gio/gio-sections.txt:
+	* gio/gio-docs.xml:
+	* gio/gio.types: Add gdesktopappinfo
+
+2007-12-10  Bastien Nocera  <hadess@hadess.net>
+
+	* glib/tmpl/keyfile.sgml: Mention the difference
+	in handling booleans between GKeyFile and .INI files
+	(Closes: #468882)
+
+2007-12-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/Makefile.am:
+	Remove more internal headers.
+	
+	* gio/gio-sections.txt:
+	Update for changes
+
+2007-12-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/Makefile.am: Ignore gioalias.h
+	* gio/gio-sections.txt: Updates
+
+2007-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/date.sgml: Fix tiny grammar typo.
+
+2007-12-04  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/glib-sections.txt: Add GChecksum public API.
+
+	* glib/tmpl/checksum.sgml:
+	* glib/glib-docs.sgml: Add the checksums API page.
+
+2007-11-29  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 500361 – Improve docs for g_array_free() and g_ptr_array_free()
+
+	* glib/tmpl/arrays.sgml:
+	* glib/tmpl/arrays_pointer.sgml:
+	Document how to free the return value.
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: More cleanup
+
+	* gio/gio.types: Remove internal types
+
+2007-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Remove nonexisting functions
+
+2007-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt: Some additions
+
+2007-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/gio-sections.txt:
+	* gio/gio-docs.xml:
+	* gio/gio.types: Update for api changes
+
+2007-11-26  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* gio/Makefile.am:
+	* gio/gio-docs.xml:
+	* gio/gio-sections.txt:
+	* gio/gio.types:
+	* gio/version.xml.in:
+	Add gio docs
+
+2007-11-23  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/i18n.sgml:
+	* glib/glib-sections.txt: Add g_dpgettext(), C_()
+
+2007-11-18  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Update the example to demonstrate
+	error handling.  (#497033, Matti Katila)
+
+2007-11-09  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/patterns.sgml: Add a warning about strlen vs
+	g_utf8_strlen.  (#455725, Michael Rasmussen)
+
+	* glib/tmpl/date.sgml: Add a footnote explaining leap years.
+	(#491982, Areg Beketovski)
+
+	* glib/tmpl/date.sgml: Improve g_date_clamp docs.  (#491970,
+	Areg Beketovski)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/memory.sgml
+	* glib/tmpl/hooks.sgml: Cleanups and fixes
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/tmpl/thread_pools.sgml: Fix the GThreadPool docs. 
+	(#491959, Areg Beketovski)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_markup_parse_context_get_element_stack
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* glib/building.sgml: Fix a typo
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.14.3 ===
+
+2007-11-05  Mathias Hasselmann  <mathias@openismus.com>
+
+	* docs/reference/gobject/tut_gtype.xml: Use correct naming conventions
+	when explaining maman_bar_get_type(). (#493688) Mention G_DEFINE_TYPE.
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gparamspec.sgml: Small update  (#477704, Ross Burton)
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.2 ===
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/param_value_types.sgml: Add some discussion on 
+	g_value_set_object() vs g_value_take_object().  (#477957, Davyd
+	Madeley)
+
+2007-09-19  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/building.sgml: Fix gettext URL. (#478349, kraai ftbfs.org)
+
+2007-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.1 ===
+
+2007-09-16  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/Makefile.am: Remove reference to trio
+
+2007-09-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/error_reporting.sgml: Add an example.  (#474229,
+	Rob Bradford)
+
+2007-09-09  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/warnings.sgml: Improve G_BREAKPOINT docs. (#474899)
+
+2007-09-05  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/glib-unused.sgml:
+	* glib/tmpl/macros_misc.sgml:
+	* glib/tmpl/main.sgml:
+	* gobject/tmpl/gparamspec.sgml:
+
+Tue Aug 28 19:04:12 2007  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/memory_slices.sgml: clarified alignment
+	expectations for g_slice_alloc().
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/unicode.sgml: Document that GUnicodeScript is
+	interchangeable with PangoScript.
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/spawn.sgml:
+	Fix typos (#468694).
+
+2007-08-15  Mikael Hallendal  <micke@imendio.com>
+
+	* glib/tmpl/keyfile.sgml: Clearify that only comments can precede
+	groups in Key-files. (#466768)
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.0 ===
+
+2007-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Additions
+
+2007-07-21  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/tmpl/fileutils.sgml: Fix an inaccuracy in the
+	G_FILE_TEST_IS_REGULAR docs, pointed out by
+	Vincent Untz.  (#417068)
+
+2007-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/limits.sgml:
+	* glib/tmpl/types.sgml:
+	* glib/glib-sections.txt: Add new functions
+
+2007-07-19  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib-sections.txt:
+
+2007-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.7 ===
+
+Thu Jul 12 18:28:47 2007  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/gtype.sgml: fixed g_type_name() docs to forbid passing in
+	invalid type IDs.
+
+Thu Jul 12 15:45:27 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/tmpl/threads.sgml: document major caveat of g_private_set/g_private_get,
+	i.e. not retaining private data across g_thread_init.
+
+Tue Jul 10 13:11:55 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/tmpl/types.sgml: corrected descriptions of gsize and gssize.
+
+Tue Jul 10 13:04:03 2007  Tim Janik  <timj@imendio.com>
+
+	* minor docu build fixes.
+
+Tue Jul 10 12:31:04 2007  Tim Janik  <timj@imendio.com>
+
+	* glib/tmpl/threads.sgml: document g_once_init_enter and g_once_init_leave.
+
+2007-07-09  Matthias Clasen <mclasen@redhat.com>
+
+	* tmpl/modules.sgml: Remove duplicate paragraph.
+	(#45786, Ruben Vermeersch)
+
+	* tmpl/modules.sgml: Remove duplicate code from
+	an example. (#454785, Ruben Vermeersch)
+
+Mon Jul  9 10:23:53 2007  Tim Janik  <timj@imendio.com>
+
+	* gobject/tmpl/gclosure.sgml: GClosure docu fixes from Guillaume
+	Cottenceau, #383155.
+
+Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.6 ===
+
+Wed Jun 27 11:43:01 2007  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/gtype.sgml (initializers): typo fix, #451459.
+
+2007-06-23  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/tmpl/memory.sgml: Add a clarification about pairing the
+	memory allocation and free functions, and not mix system's
+	malloc/free with the corresponding GLib ones. (#450216, Hubert
+	Figuiere)
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.5 ===
+
+2007-06-18  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/glib-sections.txt: Add g_timeout_add_seconds_full().
+
+2007-06-17  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/quarks.sgml:
+
+2007-06-16  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/tmpl/macros.sgml: Document the undefined behaviour of
+	CLAMP() if low > high. (#448260)
+
+2007-06-13  Sven Neumann  <sven@gimp.org>
+
+	* glib/glib-sections.txt
+	* glib/tmpl/memory_slices.sgml: document g_slice_copy() and
+	g_slice_dup().
+
+2007-06-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/warnings.sgml: Add some verbiage about
+	intended use cases for the g_return macros, inspired
+	by a bugzilla comment by Havoc Pennington.
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.4 ===
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.13.3 ===
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt:
+	* glib/tmpl/misc_utils.sgml: Add g_get_special_user_dir()
+	and GUserDirectory.
+
+2007-05-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/i18n.sgml: Add some hints about
+	xgettext invokation.
+
+2007-05-30  Dan Winship  <danw@novell.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/keyfile.sgml: add G_KEY_FILE_DESKTOP_* macros
+
+2007-05-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Fix a typo
+
+2007-05-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.2 ===
+
+2007-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/messages.sgml: Fix a typo (#436547,
+	Guillaume Desmottes)
+
+2007-05-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/running.sgml: Document g_slice_debug_tree_statistics
+	as debug-only functionality.
+
+2007-05-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Document new G_OPTION_ARG_REMAINING
+	functionality.
+
+2007-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib-sections.txt:
+	* glib/tmpl/messages.sgml:
+	Add g_unichar_ismark().
+
+2007-05-03  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.13.1 ===
+
+2007-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add new regex functions
+
+2007-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/gregex.sgml: Update for the GRegex/GMatchInfo
+	split.
+
+2007-04-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_option_context_get_help.
+
+2007-04-11  Emmanuele Bassi  <ebassi@gnome.org>
+
+	* glib/glib-sections.txt: Add new hash functions.
+
+2007-04-02  Ryan Lortie  <desrt@desrt.ca>
+
+	* gobject/tmpl/objects.sgml: Document ->constructed().
+
+2007-03-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/thread_pools.sgml:
+	* glib/tmpl/strings.sgml:
+	* glib/tmpl/string_chunks.sgml:
+	* glib/tmpl/spawn.sgml:
+	* glib/tmpl/patterns.sgml:
+	* glib/tmpl/modules.sgml:
+	* glib/tmpl/memory_slices.sgml:
+	* glib/tmpl/memory.sgml:
+	* glib/tmpl/gregex.sgml: Trivial cleanups
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.0 ===
+
+Fri Mar 16 16:04:42 2007  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/scanner.sgml: some fixups, mention that changing scanner 
+	config during the parsing phase is supported behavior.
+
+2007-03-15  Marco Barisione <marco@barisione.org>
+
+	Add GRegex for regular expression matching.  (#50075)
+
+	* glib/Makefile.am:
+	* glib/glib-docs.sgml:
+	* glib/glib-sections.txt:
+	* glib/tmpl/glib-unused.sgml:
+	* glib/regex-syntax.sgml:
+	* glib/tmpl/gregex-unused.sgml:
+	* glib/tmpl/gregex.sgml: Add GRegex.
+
+	* glib/building.sgml: Document build options for GRegex.
+
+2007-03-14  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/tmpl/gparamspec.sgml:
+	  Readd docs for G_PARAM_STATIC_NICK and add docs for new
+	  G_PARAM_STATIC_STRINGS (fixes #418021).
+
+2007-03-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: Document G_ERRORCHECK_MUTEXES. (#412145)
+
+	* glib/tmpl/trees-nary.sgml: Fix a typo in the docs for
+	g_node_first_child().  (#409395, Vincent Untz)
+
+2007-02-11  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/tut_gobject.xml:
+	* gobject/tut_gsignal.xml:
+	* gobject/tut_gtype.xml:
+	* gobject/tut_howto.xml:
+	* gobject/tut_intro.xml:
+	* gobject/tut_tools.xml:
+	Format XML to be more editable. Describe Interfaces better. Add a
+	footnote at first occurance of 'maman_'.
+
+2007-02-08  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/tut_gobject.xml:
+	* gobject/tut_gsignal.xml:
+	* gobject/tut_gtype.xml:
+	* gobject/tut_howto.xml:
+	* gobject/tut_tools.xml:
+	Unify spelling of GObject and GType. Improve some wording. Update the
+	usage of private data. Make tables use row-spans and add id's to them.
+
+2007-01-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gsignal.sgml: Correct a typo.
+	(#401994, Mariano Suarez-Alvarez)
+
+2007-01-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_INTERNAL
+	support for Sun Studio.
+
+2007-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Document 
+	g_object_class_override_property as 2.4 addition (#399940, 
+	Ian Turner)
+
+2007-01-17  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/tmpl/macros_misc.sgml: Put back G_GNUC_HAVE_VISIBILITY
+	doc that was removed accidentally.
+
+2007-01-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gparamspec.sgml; Document G_PARAM_STATIC_NICK.
+	(#396564, Vincent Untz)
+
+2007-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/keyfile.sgml: Small clarifications.
+
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/glib-sections.txt: Add g_unichar_iszerowidth.
+
+	* glib/tmpl/glib-unused.sgml:
+	* glib/tmpl/keyfile.sgml:
+	* glib/tmpl/macros_misc.sgml:
+	* glib/tmpl/messages.sgml:
+	* glib/tmpl/unicode.sgml:
+	Template changes.
+
+2007-01-02  Matthias Clasen  <mclasen@redhat.com>
+	
+	* glib/running.sgml: Remove C99ism from example.
+
+2006-12-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: Fix whitespace.  (#391116)
+	
+2006-12-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gtype.sgml: Updates
+
+	* gobject/tmpl/gtypemodule.sgml: Document dynamic type
+	registration macros.
+
+	* gobject/gobject-docs.sgml: Add "Since 2.14" index
+	* gobject/gobject-sections.txt: Add dynamic type macros
+
+2006-12-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Clarify a detail about
+	g_object_set_data_full.  (#343750, Christian Neumair)
+
+Wed Dec 27 15:56:53 2006  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/memory_slices.sgml: 
+	* glib/running.sgml: document G_SLICE=debug-blocks.
+
+2006-12-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/running.sgml:
+	* glib/tmpl/option.sgml:
+	* glib/tmpl/date.sgml: Add hints for locale-dependent functions.
+
+2006-12-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/keyfile.sgml: Small clarification (#369908,
+	Tapani Pälli)
+
+2006-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/spawn.sgml: Refer to g_child_watch_add() in addition
+	to waitpid().
+
+	* gobject/tmpl/objects.sgml: Expand GObject::notify
+	documentation.  (#381722, Nickolay V. Shmyrev)
+
+	* gobject/tmpl/gparamspec.sgml: Add canonical-parameter-name id.
+
+2006-12-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-docs.sgml: Add a "Since 2.14" section.
+
+	* glib/glib-sections.txt: Add g_string_chunk_clear.
+	
+2006-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/*.xml: s/Gnome/GNOME/g (#352156, Guillaume Desmottes)
+
+	* glib/tmpl/keyfile.sgml: Clarify the behaviour
+	wrt. to duplicate keys and groups.
+
+2006-12-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/modules.sgml: Point out that valid symbols may be NULL.
+
+2006-10-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/unicode.sgml: Document GUnicodeType.
+
+2006-10-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_unichar_get_script() and
+	GUnicodeScript.
+
+	* glib/tmpl/unicode.sgml: Document GUnicodeScript
+
+	* gobject/tmpl/enumerations_flags.sgml: Add a hint about
+	the requirement that enum and flags values must be static.
+
+2006-10-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Improve example.  (#367625, Ross Burton) 
+
+Mon Sep 11 14:57:46 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/running.sgml: documented G_DEBUG flags resident-modules
+	and bind-now-modules, patch by Christian Persch on bug #345099.
+
+2006-09-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add new functions
+
+2006-08-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/compiling.sgml: Add a note about G_DISABLE_DEPRECATED.
+	(#353172, Matt Barnes)
+
+Wed Aug 16 13:55:39 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/tmpl/trash_stack.sgml: added notes about complexity.
+
+2006-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.2 ===
+
+2006-08-10  Josh Parsons  <josh.parsons@stonebow.otago.ac.nz>
+
+	* gobject/tmpl/gtype.sgml:
+	* glib/tmpl/threads.sgml: Style and grammar fixes.
+
+2006-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/messages.sgml: Add some hints
+	about making warnings fatal.  (#348785, Matt
+	Barnes)
+
+2006-07-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.1 ===
+
+2006-07-20  Tor Lillqvist  <tml@novell.com>
+
+	* glib/tmpl/date.sgml: Improve doc for
+	g_date_strftime(). (#346197)
+
+2006-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/base64.sgml: Remove bogus reference
+	to nonexisting function.  (#346660, Mark Drago)
+	
+2006-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.0 ===
+
+2006-06-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.4 ===
+
+2006-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.3 ===
+
+2006-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.2 ===
+
+2006-06-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add new hash table functions.
+	Add new g_source functions.
+
+Wed May 31 11:35:48 2006  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/gtype.sgml (Note): amend G_TYPE_CHAR according to #303622.
+
+2006-05-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/markup.sgml: Document G_MARKUP_TREAT_CDATA_AS_TEXT.
+
+2006-05-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_ascii_strtoll
+
+2006-05-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.1 ===
+
+2006-05-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Document new api.
+
+2006-05-11  Bastien Nocera  <hadess@hadess.net>
+
+	* glib/tmpl/option.sgml: add documentation for G_OPTION_ARG_INT64
+
+2006-05-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gtype.sgml: Updates
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.11.0 ===
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gtypemodule.sgml: Document a little
+	pitfall with the last unref for an object.
+
+2006-04-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/unicode.sgml: Mention that GLib 2.12 will
+	support UCD 5.0.
+
+2006-04-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-sections.txt:
+	* gobject/tmpl/objects.sgml: 
+	* gobject/tmpl/gtype.sgml: Additions
+
+	* glib/glib-docs.sgml:
+	* gobject/gobject-docs.sgml: Add 2.12 indices.
+
+	* gobject/tmpl/gtype.sgml: Document g_type_register_static_simple
+
+2006-04-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Add some missing Since: 2.8 tags
+
+2006-04-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add new keyfile api
+
+2006-04-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tut_gobject.xml: Say that ref/unref are thread-safe now.  
+	(#322883, Christophe Fergeau)
+	
+2006-04-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/signals.sgml: Document class_offset 0.
+	and that class_closure may be NULL.
+
+2006-04-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt:
+	* glib/glib-docs.sgml: Add Base64 section
+
+2006-04-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Add some verbiage to 
+	g_object_ref_sink_docs.  (#336677)
+
+2006-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Update the floating docs wrt
+	to GInitiallyUnowned.
+
+	* gobject/tmpl/param_value_types.sgml: 
+	* gobject/tmpl/objects.sgml: 
+	* gobject/tmpl/gtype.sgml: Additions
+
+	* glib/tmpl/messages.sgml: Cleanup
+
+	* glib/tmpl/memory_slices.sgml: Adapt to a parameter name change
+
+	* glib/tmpl/linked_lists_double.sgml: Document g_list_free1
+
+2006-03-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Document floating point arguments
+
+Fri Mar 24 15:22:04 2006  Tim Janik  <timj@imendio.com>
+
+	* glib/tmpl/atomic_operations.sgml: some wording fixups.
+
+2006-03-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/types.sgml: Document G_HAVE_GINT64 as deprecated.
+	(#335294, Richard Laager)
+
+2006-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Hint that @error should
+	be set in error cases.  (#334646, Christian Persch)
+
+2006-03-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/templ/timers.sgml: Mention that the second
+	parameter of g_timer_elapsed can be NULL (#333916,
+	Christian Neumair)
+
+2006-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* ===  Released 2.10.1 ===
+
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.10.0 ===
+
+2006-02-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/tmpl/gtype.sgml:
+	  add @since: for _add_private, _GET_PRIVATE
+	* gobject/tut_gobject.xml:
+	  fix example to use ->priv and not ->private
+	* gobject/tut_howto.xml:
+	  fix g_type_class_add_private example
+
+2006-02-14  Tor Lillqvist  <tml@novell.com>
+
+	* glib/tmpl/iochannels.sgml: Document some Windows-specific issues.
+
+	* glib/glib-sections.txt: Move three Windows-specific functions
+	that now are documented from being Private to the correct section.
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.6 ===
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/date.sgml: Fix a typo (#329123, Kjartan Maraas)
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.5 ===
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/memory.sgml: Document g_mem_gc_friendly.
+
+2006-01-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tut_tools.xml: Mention g_trap_object_ref
+
+	* glib/running.sgml: Add g_trap variables to the index.
+	Mention conditional breakpoints as an alternative.
+
+Wed Jan 25 17:32:22 2006  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/memory_slices.sgml: link to G_DEBUG/G_SLICE where appropriate.
+
+Wed Jan 25 17:12:47 2006  Tim Janik  <timj@gtk.org>
+
+	* glib/running.sgml: documented G_SLICE=always-malloc and
+	G_DEBUG=gc-friendly. added anchors for each env var.
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.9.4 ===
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/scanner.sgml: Add a note explaining peculiarities
+	of peek_token wrt to scope changes.  (#307922)
+	
+2006-01-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/memory.sgml: Add a note about casting the results
+	of g_new() and g_new0().
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.3 ===
+
+2006-01-12  Federico Mena Quintero  <federico@ximian.com>
+
+	* glib/file-name-encodings.sxd: Replaced with the correct file.
+
+	* glib/file-name-encodings.png: Huh?  This was a 6-byte file.
+	Replaced it with the correct one.
+
+2006-01-07  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/tut_gtype.xml:
+	  fix internal link, little XXX cleanup
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.2 ===
+
+2006-01-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add new API 
+
+2006-01-02  Stepan Kasal  <kasal@ucw.cz>
+
+	* glib/glib-docs.sgml (glib-Windows-Compatability-Functions): Rename
+	(glib-Windows-Compatibility-Functions): , ie. s/Compata/Compati/
+	* glib/glib-sections.txt: s/Compata/Compati/
+
+2005-12-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-sections.txt:
+	* gobject/tmpl/param_value_types.sgml: Document GType 
+	paramspecs
+
+2005-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: add g_thread_pool_set_sort_function.
+	
+2005-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/*.sgml: Update versioned deprecation
+
+	* gobject/tmpl/gboxed.sgml: Document G_TYPE_HASH_TABLE.
+
+	* glib/glib-sections.txt: Add g_list_free1
+
+	* glib/glib-overrides.txt: Remove G_THREADS_IMPL_SOLARIS
+
+2005-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/atomic_operations.sgml: Document new atomic
+	operations.
+
+2005-12-14  Federico Mena Quintero  <federico@ximian.com>
+
+	* glib/building.sgml: Clarify exactly what happens when you use --enable-gc-friendly.
+
+Mon Dec 12 15:31:41 2005  Tim Janik  <timj@imendio.com>
+
+	* gobject/tmpl/objects.sgml: corrected floating reference documentation.
+
+2005-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.1 ===
+
+2005-12-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gparamspec.sgml: 
+	* gobject/tmpl/gtype.sgml: Document n_preallocs as
+	ignored.
+
+2005-12-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Updates
+	
+	* glib/tmpl/memory_slices.sgml: Fix a small formatting
+	problem.
+
+	* glib/tmpl/trees-nary.sgml: 
+	* glib/tmpl/linked_lists_single.sgml: 
+	* glib/tmpl/linked_lists_double.sgml: 
+	* glib/tmpl/caches.sgml: 
+	* glib/tmpl/strings.sgml: 
+	* glib/tmpl/scanner.sgml: 
+	* glib/tmpl/main.sgml: Add versioned deprecation.
+
+Mon Dec  5 15:53:37 2005  Tim Janik  <timj@imendio.com>
+
+	* glib/tmpl/memory_slices.sgml: updates to new g_slice API
+	and minor fixes.
+
+2005-12-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/generic_values.sgml: 
+	* glib/tmpl/trees-nary.sgml: 
+	* glib/tmpl/linked_lists_double.sgml: 
+	* glib/tmpl/linked_lists_single.sgml: 
+	* glib/tmpl/memory_chunks.sgml: 
+	* glib/tmpl/allocators.sgml: 
+	* glib/tmpl/macros_misc.sgml: Updates 
+
+	* glib/Makefile.am: Ignore gmirroringtable.h
+
+2005-12-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_WARN_UNUSED_RESULT.
+
+2005-12-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/caches.sgml: Document g_cache_value_foreach
+	as deprecated; document g_cache_key_foreach more thorougly
+
+	* glib/glib-sections.txt:
+	* glib/tmpl/linked_lists_single.sgml: Add g_slist_free1.
+
+	* glib/tmpl/memory_chunks.sgml: Document GMemChunk
+	as deprecated.
+
+	* glib/glib-docs.sgml: 
+	* glib/glib-sections.txt: 
+	* glib/tmpl/memory_slices.sgml: Document the slice
+	allocator.
+
+2005-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/building.sgml: 
+	* glib/tmpl/threads.sgml: 
+	* glib/glib-sections.txt: Remove G_THREADS_IMPL_SOLARIS
+
+	* glib/tmpl/types.sgml: Document G_GUINT64_CONSTANT.
+
+2005-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-sections.txt: 
+	* gobject/tmpl/gboxed.sgml: Add g_object_ref_sink,
+	g_object_is_floating, g_param_spec_ref_sink, 
+	G_TYPE_HASH_TABLE
+
+2005-11-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_hash_table_ref
+	and g_hash_table_unref
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.0 ===
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/date.sgml: 
+	* glib/glib-sections.txt: Add g_date_set_time_t,
+	g_date_set_time_val and g_thread_foreach
+
+2005-11-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: Improve GOnce docs.
+	(#320950, Christophe Fergeau)
+
+2005-11-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/running.sgml: Document fatal_criticals.
+
+2005-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-sections.txt: 
+	* gobject/tmpl/generic_values.sgml: Document g_value_set_instance(),
+	(#319885, Milosz Derezynski)
+
+2005-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/unicode.sgml: Add a footnote about surrogate 
+	pairs.  (#317683, Behdad Esfahbod)
+
+2005-10-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/compiling.sgml: Document gmodule-no-export-2.0
+
+2005-10-01  Davyd Madeley  <davyd@fugro-fsi.com.au>
+
+	* glib/tmpl/string_utils.sgml: Minor documentation improvements for
+	  g_strchug, g_strchomp and g_strstrip. Brought forward from glib-2-8.
+
+2005-08-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/quarks.sgml: 
+	* glib/glib-sections.txt: Add string interning functions.
+
+2005-08-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/arrays.sgml: 
+	* glib/tmpl/arrays_pointer.sgml: 
+	* glib/tmpl/arrays_byte.sgml: Enhance sort() documentation.
+	(#314839, Behdad Esfahbod)
+
+2005-08-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-docs.sgml:
+	* gobject/gobject-docs.sgml: Add indices for new
+	symbols in 2.10
+
+	Improvements pointed out by Behdad Esfahbod (#314460):
+	
+	* glib/tmpl/strings.sgml: Fix up some character/byte
+	sloppyness.
+
+	* glib/tmpl/iochannels.sgml: Don't mention deprecated
+	functions in the introduction.
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.1 ===
+
+2005-08-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/date.sgml: Point out time_t vs GTime pitfalls.
+
+2005-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-gettexttize.xml:
+	* gobject/glib-genmarshal.xml:
+	* gobject/glib-mkenums.xml: Fix some trivial
+	formatting problems.  (#313099, Stepan Kasal)
+
+	* glib/tmpl/modules.sgml: Document that file_name can
+	be NULL.  (#313143, Gustavo Carneiro)
+
+	* glib/tmpl/linked_lists_single.sgml: 
+	* glib/tmpl/linked_lists_double.sgml: Clarify docs
+	a little.  (#311727, Tristan van Berkom)
+
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.0 ===
+
+2005-08-10  Stepan Kasal  <kasal@ucw.cz>
+
+	Fix typos: Invokation --> Invocation (in various places)
+
+	* glib/tmpl/error_reporting.sgml: Fix a typo.
+	* gobject/tut_howto.xml: Several typos and stylistic changes.
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gparamspec.sgml: 
+	* glib/tmpl/types.sgml: 
+	* glib/tmpl/option.sgml: Small fixes.
+
+	* gobject/tmpl/generic_values.sgml: Small fixes
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.7 ===
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.6 ===
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.5 ===
+
+Sat Jul 30 23:40:35 2005  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/datalist.sgml:
+	* glib/tmpl/datalset.sgml: document non-thread-safety for 
+	_foreach() functions.
+
+2005-07-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/arrays.sgml: One more improvement.
+
+2005-07-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/arrays.sgml: Add some details.  (#311310,
+	Jochen Baier)
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.4 ===
+
+2005-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros_misc.sgml: Add some discouraging
+	comments to the G_INLINE_FUNC macros.  (#310836,
+	Callum McKenzie)
+
+2005-07-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/byte_order.sgml: Add docs for #307047,
+	Bryan Silverthorn.
+
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.3 ===
+	
+2005-07-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-overrides.txt: Add G_VA_COPY
+
+	* glib/tmpl/option.sgml: Document that short names must
+	be printable ASCII characters != '-'.
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.7.2 ===
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-docs.sgml: 
+	* glib/glib-docs.sgml: Add the "new in 2.8" index.
+
+2005-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Add an example
+	for using a custom constructor.
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.1 ===
+
+2005-06-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: 
+	* glib/tmpl/option.sgml: 
+	* glib/tmpl/fileutils.sgml: 
+	* glib/tmpl/iochannels.sgml: 
+	* glib/tmpl/hooks.sgml: 
+	* glib/tmpl/misc_utils.sgml: 
+	* glib/tmpl/date.sgml: 
+	* glib/glib-sections.txt: Updates
+
+2005-06-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add GMappedFile functions.
+
+2005-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml (GOptionFlags): document
+ 	G_OPTION_FLAG_NO_ARG and G_OPTION_FLAG_FILENAME  (Dan Winship)
+
+2005-06-16  Mathieu Lacage <mathieu@gnome.org>
+
+	* gobject/tut_gtype.xml: fix typo reported by Hong Gang XU.
+	
+2005-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.0 ===
+
+2005-06-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_chdir
+
+	* glib/tmpl/threads.sgml: Document that stack size
+	will be ignored if the underlying thread implementation
+	doesn't support stack sizes.
+
+2005-06-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_utf8_collate_key_for_filename.
+
+2005-05-25  Mathieu Lacage <mathieu@gnome.org>
+
+	* gobject/tut_*.xml: fix lots of typos, 
+	some of which were reported by Leonardo Boshell.
+
+2005-05-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: Point out exceptions to the
+	general GLib data structure locking rules.
+
+2005-05-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: Add a paragraph about thread
+	safety of GLib data structures.
+
+	* glib/compiling.sgml: Update an example from 1.3 to 2.x
+
+2005-05-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/glib-genmarshal.1: 
+	* gobject/glib-genmarshal.xml: Mention 64bit integer
+	types.
+
+2005-05-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/markup.sgml: Fix sloppy language, pointed out by
+	Daniel Vaillard.
+
+2005-05-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/value_collection.sgml: 
+	* gobject/tmpl/gboxed.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: 
+	* gobject/tmpl/objects.sgml: Add long descriptions.
+
+2005-05-05  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am glib/glib-sections.txt gobject/gobject-sections.txt:
+	Update
+
+	* gobject/tmpl/objects.sgml: Document toggle-references.
+
+2005-05-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/hash_tables.sgml: Move some docs inline.
+
+	* glib/tmpl/windows.sgml: 
+	* gobject/tmpl/signals.sgml: 
+	* gobject/tmpl/generic_values.sgml: 
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/value_arrays.sgml: 
+	* gobject/tmpl/param_value_types.sgml: 
+	* gobject/tmpl/gtypemodule.sgml:
+	* gobject/tmpl/enumerations_flags.sgml: Small additions.
+
+2005-05-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/completions.sgml: Document
+	strncmp_func.
+
+	glib/glib-sections.txt: Add new API.
+
+2005-04-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gboxed.sgml: 
+	* gobject/gobject-sections.txt: Add G_TYPE_DATE.
+
+2005-04-23  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/tut_gtype.xml:
+	* gobject/tut_howto.xml:
+	all interface examples use 'interface' instead of 'class'
+
+2005-04-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/Makefile.am:
+	* gobject/gobject-docs.sgml:
+	* gobject/tut_gobject.xml:
+	* gobject/tut_gsignal.xml:
+	* gobject/tut_gtype.xml:
+	* gobject/tut_howto.xml:
+	* gobject/tut_intro.xml:
+	* gobject/tut_tools.xml:
+	merged in docs form the gobject tutorial
+
+2005-03-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/arrays_pointer.sgml: Clarify the docs for
+	g_ptr_array_free and g_ptr_array_remove_range.  (#170148, 
+	#170149, Jared Lash)
+
+2005-03-29  Tor Lillqvist  <tml@novell.com>
+
+	* glib/tmpl/spawn.sgml: Add Win32 warnings regarding the child
+	setup function.
+
+2005-03-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/memory.sgml: Document g_try_new, g_try_new0 
+	and g_try_renew, g_try_malloc0.
+
+2005-03-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gparamspec.sgml: Document G_PARAM_SPEC_STATIC_
+	flags.
+
+2005-03-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_NULL_TERMINATED.
+
+2005-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gtype.sgml:
+	* gobject/tmpl/param_value_types.sgml:
+	* gobject/tmpl/gparamspec.sgml: Apply patches by
+	Stefan Kost to document naming restrictions. (#167614)
+
+2005-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Fix a typo.  (#166985)
+
+2005-02-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_listenv.
+
+2005-02-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/linked_lists_double.sgml: 
+	* glib/tmpl/linked_lists_single.sgml: Add a note 
+	regarding inefficiency of repeated appends. (#166271,
+	Olivier Sessink)
+
+2005-02-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/quarks.sgml: Add a warning against
+	using g_quark_from_static_string() in dynamically
+	loaded modules. 
+
+2005-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/misc_utils.sgml: 
+	* glib/tmpl/hash_tables.sgml: Move some doc 
+	comments inline.
+
+2005-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/enumerations_flags.sgml: Fix an
+	example.  (#164269, Sebastien Bacher)
+	
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.1 ===
+
+2005-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/keyfile.sgml: Add hint about group name 
+	case sensitivity.  (#163029, Bastien Nocera)
+
+2005-01-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/signals.sgml: Small addition. (#145158,
+	Mariano Su??rez-Alvarez)
+
+2004-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/signals.sgml: Fix a typo.  (#161713,
+	Vincent Untz)
+
+2004-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/misc_utils.sgml: Clarify g_get_prgname docs.  
+	(#161480, Danny Milo)
+
+2004-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/version.sgml: Improve wording.  (#161484,
+	Christian Biere)
+
+	* === Released 2.6.0 ===
+	
+2004-12-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_rmdir
+
+2004-12-15  Alexander Larsson  <alexl@redhat.com>
+
+	* glib/glib-sections.txt:
+	Add g_filename_display_basename
+
+2004-12-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/generic_values.sgml: Document some return
+	values.  (#161345, Stefan Kost)
+
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.7 ===
+	
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/building.sgml: 
+	* glib/tmpl/linked_lists_single.sgml: 
+	* glib/tmpl/linked_lists_double.sgml: 
+	* glib/tmpl/trees-nary.sgml: Add some warnings regarding
+	--disable-mem-pools.
+
+2004-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/iochannels.sgml: Fix a typo.  (#160162, Tom Copeland)
+
+2004-11-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/building.sgml: Document --enable-man and --disable-visibility.
+
+2004-11-28  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/tmpl/misc_utils.sgml: Document encoding of g_get_user_name(),
+	g_get_real_name(), g_get_tmp_dir() and g_get_current_dir().
+
+2004-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_MALLOC.
+
+	* glib/glib-sections.txt: Add G_GNUC_MALLOC
+
+2004-11-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.6 ===
+	
+2004-11-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/trees-nary.sgml: Document G_TRAVERSE_LEAVES and
+	G_TRAVERSE_NON_LEAVES
+
+	* glib/tmpl/hooks.sgml: 
+	* glib/tmpl/iochannels.sgml: Updates
+
+2004-11-04  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/tmpl/windows.sgml: Improve G_WIN32_HAVE_WIDECHAR_API
+	documentation.
+
+	* glib/tmpl/option.sgml: Document G_OPTION_FLAG_REVERSE.
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.5 ===
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_get_filename_charsets and
+	g_filename_display_name.
+
+2004-11-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Updates
+
+2004-10-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/windows.sgml: Document G_WIN32_IS_NT_BASED,
+	G_WIN32_HAVE_WIDECHAR_API.
+
+	* glib/glib-sections.txt: Add g_lstat
+
+	* glib/running.sgml: Document G_WIN32_PRETEND_WIN9X.
+
+2004-10-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/option.sgml: Add an example.
+
+	* glib/glib-sections.txt: Add G_OPTION_REMAINING
+
+	* glib/tmpl/option.sgml: Add docs.
+
+2004-10-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/keyfile.sgml: Add some introductory notes.
+
+2004-10-27 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.4 ===
+
+2004-10-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/fileutils.sgml: Add some intro.
+
+2004-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-docs.sgml: Add an index for 2.6 additions.
+
+	* gobject/gobject-sections.txt: Additions.
+
+	* gobject/Makefile.am (IGNORE_HFILES): Add gobjectalias.h
+
+	* glib/tmpl/main.sgml: Document GChildWatchFunc
+
+	* glib/tmpl/keyfile.sgml: New template.
+
+	* glib/glib-sections.txt: Additions.
+
+	* glib/tmpl/macros_misc.sgml: Document some more of
+	the macros.
+
+2004-10-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-docs.sgml:  Add GKeyFile section, add
+	index for 2.6 additions.
+
+2004-10-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/gtype.sgml (GTypeInterfaceCheckData):
+	Rename first parameter.
+
+	* glib/glib-sections.txt: Add GKeyFile section.
+
+2004-10-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/macros.sgml: 
+	* glib/glib-sections.txt: Document G_IS_DIR_SEPARATOR. 
+
+2004-10-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/objects.sgml: Improve the docs for
+	g_object_get_property().  (#153424, Stefan Kost)
+
+2004-10-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/tmpl/signals.sgml: Improve docs for 
+	g_signal_add_emission_hook.  (#154299, Nickolay V. Shmyrev)
+
+2004-09-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/messages.sgml: Correct the docs for the default log
+	handler wrt to which messages go to stderr. (#153041, Philippe Blain)
+
+Sun Sep 19 23:15:17 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/patterns.sgml: Point to g_utf8_strreverse() for
+	reversing UTF-8 strings.  (#153091, Adam Hooper)
+
+2004-09-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.3 ===
+
+2004-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/Makefile.am: Ignore galias.h
+
+	* glib/glib-sections.txt: Updates.
+
+2004-09-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/misc_utils.sgml: Add a hint about $HOME to the
+	docs of g_get_home_dir().
+
+Thu Sep  9 00:11:19 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_strv_length().
+
+2004-09-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: Add g_get_language_names().
+
+Mon Sep  6 01:56:13 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/messages.sgml: Remove excess markup and fix a markup
+	error.
+
+Sun Sep  5 01:44:23 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/messages.sgml: Document g_log_set_default_handler().
+
+Wed Sep  1 20:27:59 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_date_get_iso8601_week_of_year.
+
+Sun Aug 29 23:50:45 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/fileutils.sgml: Fix a typo.  (#151109, Stepan Kasal)
+
+2004-08-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/fileutils.sgml: Add G_FILE_ERROR_NOSYS.
+
+2004-08-25 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.2 ===
+
+2004-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/warnings.sgml: Add an example for
+	g_on_error_query() usage.  (#148716, Christian Persch)
+
+2004-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/threads.sgml: Document the necessity to call
+	g_thread_init() when using threads 
+	(even non-gthreads).  (#149490, Vincent Untz)
+
+
+Tue Aug  3 16:43:22 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add a section for GOption.
+	* glib/glib-docs.sgml: Include GOption section.
+	* glib/tmpl/option.sgml: New template.
+
+Tue Aug  3 15:34:16 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add a separate section for
+	version information.
+	* glib/glib-docs.sgml: Include version section.
+	* glib/tmpl/version.sgml: New template.
+
+2004-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/glib-sections.txt: 
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_INTERNAL.
+
+2004-08-01 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.1 ===
+
+2004-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/misc_utils.sgml: Clarify docs for 
+	g_get_real_name().  (#143552, Danek Duvall)
+
+Fri Jul 23 10:38:24 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/limits.sgml: Fix docs for G_MAXSIZE.  (#148262, 
+	Christophe Fergeau)
+
+Sun Jul 18 18:03:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* === Released 2.5.0 ===
+
+2004-07-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/arrays.sgml: Improve g_array_free() docs.  (#146875,
+	Ed Griffiths)
+
+Tue Jul  6 00:54:38 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: 
+	* gobject/tmpl/gtypemodule.sgml: Add g_type_module_register_enum()
+	and g_type_module_register_flags().
+
+Mon Jul  5 18:49:56 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/messages.sgml: 
+	* glib/glib-sections.txt: Add g_debug.
+
+2004-06-15  Federico Mena Quintero  <federico@ximian.com>
+
+	* glib/tmpl/conversions.sgml: New section on file name encodings.
+
+	* glib/file-name-encodings.sxd: New diagram of how file name
+	encodings work.
+
+	* glib/file-name-encodings.png: Same as above, for inclusion in
+	the generated docs.
+
+	* glib/Makefile.am (HTML_IMAGES): Add file-name-encodings.png.
+	(EXTRA_DIST): Add the new images.
+
+	* glib/running.sgml: Add ids to the corresponding paragraphs that
+	describe G_FILENAME_ENCODING and G_BROKEN_FILENAMES, to be able to
+	reference them from elsewhere.
+
+Thu Jun 10 21:29:55 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/modules.sgml: Add an example for GModule
+	usage.  (#144127, Tommi Komulainen)
+
+Sun Jun  6 23:20:42 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: Fix the docs for G_DEFINE_TYPE()
+	and friends.  (#143800, Crispin Flowerday)
+
+2004-05-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject/gobject-docs.sgml: 
+	* glib/glib-docs.sgml: Add multiple indices.
+
+2004-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.4.1 ===
+
+2004-04-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/running.sgml: Document LIBCHARSET_ALIAS_DIR.
+
+2004-04-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib/tmpl/types.sgml: Correct the description of the
+	gfloat and gdouble ranges.
+
+Tue Mar 16 12:06:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.4.0 ===
+	
+Sun Mar 14 11:00:41 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/tmpl/signals.sgml: Document the fact that
+	g_signal_connect_object() does *not* remove the signal
+	when the object is disconnected currently and describe
+	a workaround to prevent memory leaks.
+
+Tue Mar  9 09:16:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.6 ===
+
+Mon Mar  8 08:32:36 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/main.sgml: Reference g_source_set_callback(),
+	not g_source_attach(). (Takeshi AIHANA)
+
+2004-02-29  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/glib-overrides.txt, glib/glib-sections.txt,
+	glib/tmpl/atomic_operations.sgml: Updated according to code changes.
+
+Sun Feb 29 02:35:00 2004  Sven Herzberg  <herzi@gnome-de.org>
+
+	* glib/tmpl/limits.sgml: exchange non-existing G_MAX_DOUBLE for
+	G_MAXDOUBLE (fixes #135723)
+
+Fri Feb 27 22:10:25 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/modules.sgml: Reformat a bit.
+
+Fri Feb 27 22:05:23 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/limits.sgml: Document G_MAXSIZE.
+
+2004-02-26  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/tmpl/threads.sgml: Updated to reflect removal of the PID
+	niceness surrogate for thread priorities.
+
+	* glib/glib-overrides.txt, glib/glib-sections.txt,
+	glib/glib-docs.sgml, glib/tmpl/atomic_operations.sgml: Add docs
+	for atomic operations.
+
+Tue Feb 24 14:09:21 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.3 ===
+
+	* glib/glib-sections.txt: Updates.
+
+Sun Feb 22 00:59:11 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/trees-nary.sgml: Document GCopyFunc.
+
+Sun Feb 22 00:54:17 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add GCopyFunc and g_node_copy_deep.
+
+2004-02-18  Sebastian Wilhelmi  <seppi@seppi.de>
+
+	* glib/glib-sections.txt: Add the new g_rand_* functions
+
+Sat Feb 14 01:25:23 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add GPid, GChildWatchFunc,
+	g_child_watch_source_new, g_child_watch_add,
+	g_child_watch_add_full.
+
+Fri Feb 13 23:16:25 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/macros_misc.sgml: Fix a typo. 
+
+Sat Feb  7 01:02:06 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/numerical.sgml: Fix some external links.
+
+Thu Feb  5 00:54:43 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_completion_complete_utf8.
+
+Fri Jan 30 23:25:58 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/iochannels.sgml: 
+	* glib/tmpl/main.sgml: Remove references to deprecated GTK+ and
+	GDK functions.  (#130756, Vincent Untz)
+	
+Wed Jan 28 01:39:59 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_strsplit_set. (Soeren Sandmann)
+
+Thu Jan 22 14:51:19 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib-sections.txt glib/tmpl/timers.sgml: Document
+	g_timer_continue. (Tim-Philipp M??ller)
+
+Sun Jan 11 01:25:44 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: Improve docs for G_DEFINE_TYPE_* macros.
+
+Sun Jan 11 01:25:29 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Add G_DEFINE_TYPE_EXTENDED.
+
+Sat Jan 10 02:18:32 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: Document the new GType boilerplate macros
+	with an example.
+
+Sat Jan 10 01:36:01 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: Document g_type_class_peek_static.
+
+Sat Jan 10 01:23:58 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Add g_type_class_peek_static,
+	G_DEFINE_TYPE, G_DEFINE_TYPE_WITH_CODE, G_DEFINE_ABSTRACT_TYPE,
+	G_DEFINE_ABSTRACT_TYPE_WITH_CODE, G_IMPLEMENT_INTERFACE.
+
+
+Sat Jan 10 01:23:01 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/objects.sgml: Update docs of g_object_connect.
+
+Fri Jan  9 23:40:23 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gboxed.sgml: 
+	* gobject/gobject-sections.txt: Add G_TYPE_STRV and GStrv.
+
+Fri Dec 26 02:04:49 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_ptr_array_foreach().
+
+Sun Dec 21 01:01:34 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/misc_utils.sgml: Document the encoding of 
+	g_get_real_name().
+
+Fri Dec 19 21:40:00 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/signals.sgml: Rewording.
+
+Tue Dec  2 02:31:15 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/limits.sgml:
+	* glib/glib-sections.txt: Add G_{MIN,MAX,MAXU}INT{8,16,32}.
+
+Thu Nov  6 01:42:36 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add an i18n section.
+	* glib/glib-docs.sgml: Include the corresponding entity.
+	* glib/tmpl/i18n.sgml: Template for i18n section.
+
+Thu Nov  6 00:56:04 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/running.sgml: Document G_FILENAME_ENCODING.
+
+Sat Oct 25 01:07:45 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gparamspec.sgml: 
+	* gobject/tmpl/objects.sgml: Additions.
+
+Thu Oct 23 14:27:54 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/Makefile.am: Add a dist-hook so that the
+	man pages get distributed.
+
+	* glib/Makefile.am: Add a dist-hook so that the
+	man pages get distributed.
+
+	* glib/Makefile.am (content_files): Add cross.sgml.
+
+	* gobject/Makefile.am (INCLUDES): Add $(top_srcdir)/glib,
+	and (for gobject.cI) $(srcdir)
+
+Tue Oct 21 23:29:54 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtypemodule.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: 
+	* gobject/tmpl/gtype.sgml: Additions.
+
+Tue Oct 21 23:09:15 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gparamspec.sgml: 
+	* gobject/tmpl/param_value_types.sgml:
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/signals.sgml: Add "Since 2.4" markers where
+	appropriate.
+
+Tue Oct 14 17:45:33 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/gobject-sections.txt gobject/tmpl/objects.sgml
+	gobject/tmpl/param_value_types.sgml gobject/tmpl/gparamspec.sgml:
+	Document interface properties and GParamSpecOverride.
+
+Mon Oct 20 22:05:37 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/objects.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: 
+	* gobject/tmpl/gtypeplugin.sgml: Additions.
+
+Mon Oct 20 22:04:45 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Add GObjectConstructParam.
+
+Mon Oct 20 20:38:06 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject.i: Removed...
+	* gobject/gobject.cI: ...and readded.
+	* gobject/gobject.types: Change to the standard file 
+	extension for included hunks of C code.
+
+Mon Oct 20 20:34:33 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am (INCLUDES): Add $(top_builddir)/glib
+	as an include dir again, this time for real.  
+
+Mon Oct 20 01:12:46 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/param_value_types.sgml: 
+	* gobject/tmpl/value_arrays.sgml: Additions.
+
+	* gobject/tmpl/gboxed.sgml: 
+	* gobject/gobject-sections.txt: Remove prematurely added
+	GStrv documentation.
+
+Sun Oct 19 22:18:28 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am (INCLUDES): Add $(top_builddir)/glib
+	as an include dir.  (#124934, Mariano Su??rez-Alvarez)
+
+Sun Oct 19 00:33:28 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/generic_values.sgml: 
+	* gobject/tmpl/objects.sgml: 
+	* gobject/tmpl/signals.sgml: Additions.
+
+Sat Oct 18 01:30:47 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gboxed.sgml: 
+	* gobject/tmpl/gtypeplugin.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: Additions.
+
+Sat Oct 18 00:04:22 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject.types: List GObject here, since the
+	documentation misses the notify signal otherwise. Needs
+	a little bit of a hack to work around a gtkdoc-scangobj
+	limitation, see the comment in gobject/gobject.i.
+
+	* gobject/gobject.i: New file, containing a trivial 
+	g_object_get_type() function.
+	
+Fri Oct 17 00:23:51 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am (GTKDOC_LIBS): 
+	(INCLUDES): Add the necessary stuff to compile gobject-scan.
+
+	* gobject/gobject.types: Add g_type_module_get_type() and
+	g_type_plugin_get_type().
+
+Thu Oct 16 01:02:04 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gparamspec.sgml: Additions, document 
+	GParamSpecPool.
+
+Wed Oct 15 00:56:30 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gclosure.sgml: Improvements from Owen's feedback. 
+
+Tue Oct 14 02:35:45 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Move the g_cclosure_marshal_*
+	functions to a non-private subsection, since these functions
+	are not private.
+
+Tue Oct 14 02:35:16 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gclosure.sgml: Fill in.
+
+Sun Oct  5 23:23:53 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/glib-sections.txt: 
+	* gobject/gobject-sections.txt: Fix includes.
+
+	* gobject/tmpl/value_collection.sgml: Add docs found in the 
+	header.
+
+Thu Oct  2 01:22:46 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/gobject-sections.txt gobject/tmpl/gtype.sgml: 
+	Add g_type_add/remove_interface_check()
+
+2003-09-30  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gparamspec.sgml: 
+	* gobject/tmpl/signals.sgml: Additions.
+
+	* glib/glib-sections.txt: Add g_unichar_get_mirror_char and
+	g_static_mutex_get_mutex_impl_shortcut.
+
+Mon Sep 29 10:55:23 2003  Owen Taylor  <otaylor@redhat.com>
+
+	*  gobject/gobject-sections.txt gobject/tmpl/gtype.sgml:
+	Docs for g_type_default_interface_ref(), etc.
+
+Fri Sep 12 16:29:29 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/tmpl/signals.sgml: Add docs for
+	g_signal_accumulator_true_handled.
+
+2003-09-12  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Add new g_value_take_x() functions.
+
+	* gobject/tmpl/param_value_types.sgml: Document new g_value_take_x()
+	functions.  (#100948)
+
+2003-08-05  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Add note about in-place editing to g_strdelimit() doc.
+	(#118875, Thomas Vander Stichele)
+
+2003-07-30  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/misc_utils.sgml: Move g_getenv() docs inline.
+
+	* glib/tmpl/string_utils.sgml: Small fixes.
+
+	* glib/glib-docs.sgml: Add paragraph about multi-threading policy.
+
+	* glib/glib-sections.txt: Rename g_read_link to g_file_read_link.
+
+2003-07-29  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GINT{16,32,64}_MODIFIER, add note about scanning.
+
+	* glib/glib-sections.txt: Add G_GINT{16,32,64}_MODIFIER.
+
+2003-07-28  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_setenv(), g_unsetenv() and g_read_link().  (#100763, #72545)
+
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/arrays.sgml: 
+	* glib/tmpl/arrays_byte.sgml: 
+	* glib/tmpl/arrays_pointer.sgml: 
+	* glib/glib-sections.txt: Add g_{,byte,pointer}_array_remove_range.  (#94879, Nalin Dahyabhai)
+
+	* glib/tmpl/messages.sgml: Remove the note about the message length restriction.
+
+2003-07-24  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/messages.sgml: Mention the restriction on message length.  (#118043, Martyn Russell)
+
+2003-07-18  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/arrays_pointer.sgml: Add a note about double indirection in 
+	g_ptr_array_sort[_with_data]().  (#113697, Owen Taylor)
+
+2003-07-12  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Add a paragraph about string precision, add links to it.
+	Remove markup which is now handled better by gtk-doc.
+
+2003-07-09  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/threads.sgml: Document GOnce, GOnceStatus, G_ONCE_INIT, g_once and g_once_impl.
+
+	* glib/glib-sections.txt: Add GOnce, GOnceStatus, G_ONCE_INIT, g_once and g_once_impl.
+
+2003-07-02  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Move g_strfreev() docs inline.
+
+2003-06-19  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/misc_utils.sgml: Move g_path_get_basename() docs inline.
+
+2003-06-18  Matthias Clasen  <maclas@gmx.de>
+
+o	* glib/glib-sections.txt: Add g_thread_init_glib to silence gtk-doc.
+
+	* gobject/Makefile.am: Add rule to regenerate man pages from 
+	Docbook.
+	(man_MANS): Add glib-mkenums.1, glib-genmarshal.1 and gobject-query.1.
+	(content_files): Add glib-mkenums.xml, glib-genmarshal.xml and 
+	gobject-query.xml.
+
+	* gobject/glib-mkenums.xml: 
+	* gobject/glib-genmarshal.xml: 
+	* gobject/gobject-query.xml: New refentries.
+
+	* gobject/glib-mkenums.1: 
+	* gobject/glib-genmarshal.1: 
+	* gobject/gobject-query.1: Man pages generated from the .xml
+	sources.
+
+	* gobject/gobject-docs.sgml: Include glib-mkenums.xml, 
+	glib-genmarshal.xml and gobject-query.xml.
+	
+2003-06-17  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/Makefile.am: Add rule to regenerate man pages from 
+	Docbook.
+	(man_MANS): Add glib-gettextize.1.
+	(content_files): Add glib-gettextize.xml.
+
+	* glib/glib-gettextize.xml: New refentry.
+
+	* glib/glib-gettextize.1: Man page generated from the .xml source.
+
+	* glib/glib-docs.sgml: Include glib-gettextize.xml.
+
+2003-06-17  Matthias Clasen  <mc2@YAST_ASK>
+
+	* gobject/gobject-docs.sgml: 
+	* glib/glib-docs.sgml: Add an autogenerated index.
+
+2003-06-17  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/macros_misc.sgml: Document G_GNUC_DEPRECATED.
+
+2003-06-11  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/objects.sgml: A small addition.
+
+Sun Jun  8 12:28:39 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/error_reporting.sgml: XML fix.
+
+	* glib/glib-sections.txt: Updated.
+
+2003-06-06  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/limits.sgml: Correct the documentation for
+	G_MINFLOAT and G_MINDOUBLE.  (#114513, Christophe Fergeau)
+
+	* glib/glib-sections.txt: Add g_vasprintf().
+
+	* glib/tmpl/string_utils.sgml: Add a hint about g_vasprintf() to
+	the g_strdup_printf() docs.
+
+2003-05-28  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Document that g_strdup() and
+	g_strndup() accept NULL.  (#106987, Christian Biere)
+
+2003-05-12  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/cross.sgml: Fix a duplicate id left by copy-and-paste.
+	(#112785, Owen Taylor)
+
+2003-04-18  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/signals.sgml: Correct the documentation
+	GSignalEmissionHook (#110906) and some cleanups.
+
+2003-04-11  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gparamspec.sgml: Fix a few typos.
+
+2003-04-09  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-docs.sgml: Move dependencies to building.sgml.
+
+	* glib/building.sgml: Move stuff from INSTALL here.
+
+2003-04-08  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/cross.sgml: New file; cross-compilation information.
+	* glib/glib-docs.sgml: Include cross.sgml.
+
+2003-04-07  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/enumerations_flags.sgml: Additions.
+
+2003-04-01  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/error_reporting.sgml: 
+	* glib/tmpl/random_numbers.sgml: 
+	* glib/tmpl/arrays_pointer.sgml: 
+	* glib/tmpl/arrays.sgml: Fix formatting of examples.
+
+2003-04-01  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_string_chunk_insert_len.
+
+2003-03-28  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/param_value_types.sgml: Additions.
+
+2003-03-25  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/objects.sgml: Additions.
+
+2003-03-24  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/objects.sgml: Additions.
+
+Mon Mar 10 11:33:10 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/tmpl/gtype.sgml gobject/gobject-sections.txt: 
+	Document private instance data.
+
+2003-02-11  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Fix an off-by-one error in the
+	g_strescape() docs.  (#105431, Phillip Vandry)
+
+2003-02-07  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtypemodule.sgml: 
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/gclosure.sgml: 
+	* gobject/tmpl/param_value_types.sgml: 
+	* gobject/tmpl/gparamspec.sgml: 
+	* gobject/tmpl/objects.sgml: 
+	* gobject/tmpl/signals.sgml: Move all docs out-of-line. Boy, what
+	a waste of time.
+
+2003-01-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/strings.sgml: Document the return value of g_string_free().
+
+2003-01-15  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: Fix the description of
+	G_TYPE_FUNDAMENTAL.  (#103119, Josh Parsons)
+
+2003-01-01  Tor Lillqvist  <tml@iki.fi>
+
+	* glib/tmpl/messages.sgml: Remove comment that only stdout would
+	be used on Windows, no longer true.
+
+2002-12-15  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/param_value_types.sgml: Move some docs inline.
+
+2002-12-15  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/Makefile.am (IGNORE_HFILES): Add gprintfint.h and trio.
+
+2002-12-13  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/Makefile.am (MKDB_OPTIONS): Add --ignore-files=trio to
+	avoid gtk-doc warnings about doxygen comments.
+
+Tue Dec 10 11:55:28 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/timers.sgml: Improve docs for return value
+	and @microseconds out parameter. (Reported by
+	Dennis Haney, #100841)
+
+2002-12-10  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/generic_values.sgml: 
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: Add docs.
+
+2002-12-09  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: Add docs.
+
+	* gobject/tmpl/gtype.sgml:
+	* gobject/tmpl/gtypeplugin.sgml:
+	* gobject/tmpl/gtypemodule.sgml:
+	* gobject/gobject-sections.txt: Add GTypeClass, GTypePluginClass
+	and GTypeModuleClass.
+
+	* gobject/tmpl/gboxed.sgml:
+	* gobject/tmpl/enumerations_flags.sgml: 
+	* gobject/tmpl/gclosure.sgml: 
+	* gobject/tmpl/param_value_types.sgml: Add docs.
+
+2002-12-06  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gparamspec.sgml: Typo fix.
+
+2002-12-05  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/strings.sgml: 
+	* glib/tmpl/scanner.sgml: 
+	* glib/tmpl/main.sgml: 
+	* glib/tmpl/macros_misc.sgml: 
+	* glib/tmpl/hash_tables.sgml: Add Since and Deprecation info
+	for symbols documented in the templates.
+
+2002-12-04  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gtype.sgml: Add docs.
+
+2002-12-02  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/signals.sgml: Add docs.
+
+2002-12-01  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Mark g_signal_handlers_destroy as
+	private.
+
+	* gobject/tmpl/signals.sgml: Move some docs inline.
+
+2002-11-29  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/main.sgml: Write something about GSourceDummyMarshal.
+
+	* glib/tmpl/date.sgml: 
+	* glib/tmpl/string_utils.sgml: Remove redundant docs.
+
+	* glib/glib-sections.txt: Add g_ascii_strtoull and 
+	g_get_application_name.
+
+2002-11-28  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/strings.sgml: 
+	* glib/tmpl/string_utils.sgml: 
+	* glib/tmpl/misc_utils.sgml: Move some docs inline.
+
+2002-11-23  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/tmpl/gclosure.sgml: 
+	* gobject/tmpl/signals.sgml: 
+	* gobject/tmpl/gparamspec.sgml: 
+	* gobject/tmpl/value_collection.sgml: 
+	* gobject/tmpl/generic_values.sgml: 
+	* gobject/tmpl/param_value_types.sgml: 
+	* gobject/tmpl/gboxed.sgml: 
+	* gobject/tmpl/enumerations_flags.sgml: 
+	* gobject/tmpl/objects.sgml: 
+	* gobject/tmpl/gtypemodule.sgml: 
+	* gobject/tmpl/gtypeplugin.sgml: Add missing short descriptions, 
+	standardize them to start with a capital and end without a period. 
+
+	* glib/tmpl/arrays.sgml: 
+	* glib/tmpl/memory_chunks.sgml: 
+	* glib/tmpl/macros.sgml: Remove periods from titles in examples.
+
+	* glib/building.sgml: Explain --enable-include-printf.
+
+	* glib/Makefile.am (extra_files): 
+	* gobject/Makefile.am (extra_files): Add version.xml.in.
+
+	* glib/Makefile.am (content_files): 
+	* gobject/Makefile.am (content_files): Add version.xml.
+
+	* glib/version.xml.in: 
+	* gobject/version.xml.in: New files to let configure dump the version in.
+
+	* glib/glib-docs.sgml:
+	* gobject/gobject-docs.sgml: Add version information.
+
+
+Thu Nov 21 15:52:04 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/iochannels.sgml: Add helpful comments about
+	the encoding of a new iochannel. (Amaury Jacquot,
+	#96444)
+
+2002-11-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Add note on including gprintf.h,
+	move some docs inline.
+
+	* glib/glib-sections.txt: Add g_printf, g_vprintf, g_fprintf,
+	g_vfprintf, g_sprintf, g_vsprintf.
+
+2002-11-20  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/macros_misc.sgml: Document G_LIKELY, G_UNLIKELY.
+
+	* glib/glib-sections.txt: Add G_LIKELY, G_UNLIKELY.
+
+2002-10-20  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am (SCANOBJ_FILES): 
+	* glib/Makefile.am (SCANOBJ_FILES): Add $(DOC_MODULE).prerequisites.
+
+2002-10-15  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: Add g_type_interface_prerequisites.
+
+2002-10-14  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am (dist-hook): 
+	* glib/Makefile.am (dist-hook): Dist the xml/*.xml, not
+	sgml/*.sgml.  (#95678, Owen Taylor)
+
+2002-10-14  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am (SCANOBJ_FILES): 
+	* glib/Makefile.am (SCANOBJ_FILES): Add $(DOC_MODULE).interfaces.
+
+2002-09-16  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/messages.sgml: Replace G_LOG_FLAG_RECURSIVE by 
+	G_LOG_FLAG_RECURSION throughout.  (#93390)
+ 
+2002-08-12  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/glib-sections.txt: Add g_markup_parse_context_get_element
+	and g_utf8_strreverse.
+
+Thu Jul 25 18:58:29 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* glib/tmpl/threads.sgml: Fix reference to non-existing
+ 	@priority parameter. (#88500, Linux Walleij)
+ 
+2002-06-03  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-docs.sgml: 
+	* glib/glib-docs.sgml: 
+	* glib/tmpl/macros.sgml: 
+	* glib/tmpl/string_utils.sgml: Replace homegrown "nbsp", "hash"
+	and "percent" entities by standard ISO entities "nbsp", "num" and
+	"percnt". 
+
+2002-05-30  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: 
+	* glib/tmpl/threads.sgml: Small formatting fixes.
+
+2002-05-26  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/conversions.sgml: Add GIConv.
+
+	* glib/tmpl/main.sgml: Fix references to nonexisting functions
+	g_main_loop_destroy(), g_source_add(), g_source_connect().
+	
+
+	* glib/glib-sections.txt: Add GIConv, g_str_has_prefix, g_str_has_suffix.
+
+	* glib/tmpl/linked_lists_single.sgml: 
+	* glib/tmpl/linked_lists_double.sgml: GListAllocator doesn't exist.
+
+	* glib/glib-docs.sgml: Declare hash entity.
+
+	* glib/tmpl/macros.sgml: Escape # in #ifdef to suppress erroneous links.
+
+2002-05-25  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/Makefile.am, gobject/gobject-docs.sgml, gobject/tmpl/*:
+	* glib/Makefile.am, glib/glib-docs.sgml, glib/tmpl/*: Produce XML,
+	not SGML.
+
+2002-05-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/markup.sgml: Updates.
+
+Sat May 18 00:44:35 2002  Tim Janik  <timj@gtk.org>
+
+	[merged from stable]
+
+	* glib/tmpl/scanner.sgml: fix documentation for g_scanner_unexp_token().
+
+2002-05-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml: Clarify recursion issues with
+	GMutex. (#78171)
+
+2002-04-24  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject/gobject-sections.txt: 
+	* gobject/tmpl/gtype.sgml: Updates.
+
+2002-04-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/strings.sgml: Fix the description of g_string_assign. (#78728)
+
+2002-04-18  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/error_reporting.sgml:
+	* glib/tmpl/threads.sgml:
+	* glib/tmpl/arrays_pointer.sgml:
+	* glib/tmpl/arrays_byte.sgml:
+	* glib/tmpl/memory_chunks.sgml: s/<!>/<!-- -->/g throughout the
+	documentation to bring the produced Docbook closer to XML.
+
+2002-03-25  Sven Neumann  <sven@gimp.org>
+
+	* glib/tmpl/scanner.sgml: Fixed documentation about unused struct 
+	fields and added a note about proper g_scanner_unexp_token() usage.
+
+2002-03-11  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/tmpl/string_utils.sgml: Add a note about g_strreverse() and 
+	UTF-8.
+
+2002-02-21  Matthias Clasen  <maclas@gmx.de>
+
+	* glib/Makefile.am (IGNORE_HFILES): Add gdebug.h.
+
+	* glib/running.sgml: Document the G_DEBUG environment variable.
+
+	* glib/tmpl/threads.sgml: Replace g_thread_wait() by
+	g_thread_join() in two places.
+
+2002-02-20  Sven Neumann  <sven@gimp.org>
+
+	* gobject/gobject-sections.txt
+	* gobject/tmpl/generic_values.sgml
+	* gobject/tmpl/param_value_types.sgml: updated for GValue changes.
+
+Tue Feb 19 17:45:43 2002  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/generic_values.sgml: added GValue documentation.
+
+Thu Feb  7 12:07:06 2002  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/generic_values.sgml: document value transformation.
+
+Mon Feb  4 17:55:39 2002  Tim Janik  <timj@gtk.org>
+	
+	* gobject/tmpl/closures.sgml: doc common functions like ref/
+	sink/unref/invalidate.
+
+	* gobject/tmpl/objects.sgml: document g_object_watch_closure() and
+	qdata functions.
+
+Tue Jan 29 12:00:59 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/gobject-sections.txt: Updated.
+
+	* glib/running.sgml glib/changes-2.0.sgml: SGML fixes.
+
+2002-01-28  Ron Steinke  <rsteinke@w-link.net>
+
+	* glib/iochannel.sgml: Changed #IOChannelError to
+	#GIOChannelError in one place
+
+2002-01-16  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/building.sgml, glib/compiling.sgml, 
+	glib/running.sgml, glib/resources.sgml, 
+	glib/changes-2.0.sgml: New files.
+
+	* glib/Makefile.am (content_files): Add new files.
+
+	* glib/glib-docs.sgml: Add an Overview chapter.
+
+2002-01-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml: Name the right function.
+
+2001-12-23  Matthias Clasen  <matthias@poet.de>
+
+	* glib/tmpl/main.sgml, glib/tmpl/string_utils.sgml,
+	glib/tmpl/strings.sgml: Replace references to deprecated
+	functions.
+
+2001-12-21  Matthias Clasen  <matthias@poet.de>
+
+	* glib/glib-sections.txt: Move g_get_charset() to the
+	Charset conversion section. (#65630)
+ 
+Wed Dec 19 23:07:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/messages.sgml glib/tmpl/string_utils.sgml: 
+	SGML fixes.
+
+	* gobject/gobject-sections.txt glib/glib-sectoins.txt: Small updates.
+
+2001-12-15  Matthias Clasen  <matthias@poet.de>
+
+	* glib/tmpl/caches.sgml: GCs are cached by GTK, not by GDK.
+
+2001-12-14  Matthias Clasen  <matthias@poet.de>
+
+	* glib/tmpl/memory.sgml: Typo fixes.
+
+2001-12-13  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/completion.sgml, glib/tmpl/date.sgml,
+	glib/tmpl/fileutils.sgml, glib/tmpl/iochannels.sgml,
+	glib/tmpl/macros.sgml, glib/tmpl/memory.sgml,
+	glib/tmpl/misc_utils.sgml, glib/tmpl/warnings.sgml,
+	glib/tmpl/windows.sgml: Revert mistaken change: it is UNIX, not Unix.
+
+	* glib/tmpl/memory_chunks.sgml,
+	glib/tmpl/date.sgml, glib/tmpl/threads.sgml,
+	glib/tmpl/gtype.sgml: Trivial markup fixes.
+
+2001-12-12  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/string_utils.sgml: Correct docs for g_[v]snprintf.
+
+2001-12-12  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/allocators.sgml, glib/tmpl/arrays.sgml, 
+	glib/tmpl/arrays_byte.sgml, glib/tmpl/arrays_pointer.sgml,
+	glib/tmpl/caches.sgml, glib/tmpl/completion.sgml, 
+	glib/tmpl/conversions.sgml,
+	glib/tmpl/datalist.sgml, glib/tmpl/date.sgml, 
+	glib/tmpl/error_reporting.sgml, glib/tmpl/fileutils.sgml,
+	glib/tmpl/hash_tables.sgml,
+	glib/tmpl/hooks.sgml, glib/tmpl/macros.sgml,
+	glib/tmpl/macros_misc.sgml, glib/tmpl/main.sgml, glib/tmpl/markup.sgml,
+	glib/tmpl/memory.sgml, glib/tmpl/memory_chunks.sgml, 
+	glib/tmpl/messages.sgml, glib/tmpl/misc_utils.sgml,
+	glib/tmpl/modules.sgml, glib/tmpl/numerical.sgml, 
+	glib/tmpl/patterns.sgml, glib/tmpl/queue.sgml, 
+	glib/tmpl/shell.sgml, glib/tmpl/spawn.sgml,
+	glib/tmpl/string_utils.sgml, glib/tmpl/thread_pools.sgml,
+	glib/tmpl/threads.sgml, glib/tmpl/timers.sgml, 
+	glib/tmpl/trees-binary.sgml, glib/tmpl/trees-nary.sgml,
+	glib/tmpl/type_conversion.sgml, glib/tmpl/unicode.sgml,
+	glib/tmpl/warnings.sgml, glib/tmpl/windows.sgml:	
+	Improve markup of examples, general consistency improvements.
+
+2001-12-06  Havoc Pennington  <hp@redhat.com>
+
+	* glib/tmpl/messages.sgml: improve g_log_set_handler docs
+
+Wed Nov 28 18:50:19 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib-sections.txt: Update.
+
+2001-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/date.sgml: Fix g_usleep docs.
+
+2001-11-26  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/trees-binary.sgml: Document G_LEVEL_ORDER better.
+
+2001-11-22  Matthias Clasen  <matthiasc@poet.de>
+
+	Fixes for #61284:
+
+	* glib/tmpl/windows.sgml: Document G_WIN32_DLLMAIN_FOR_DLL_NAME.
+
+	* glib/tmpl/fileutils.sgml: Document GDir.
+
+	* glib/tmpl/limits.sgml: Document G_MININT64, G_MAXINT64, G_MAXUINT64.	
+
+Thu Nov 22 12:56:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/gobject-sections.txt: Update.
+
+	* glib/tmpl/{spawn.sgml,patterns.sgml}: SGML fixes.
+
+	* glib/glib-sections.txt: Updated.
+
+	* glib/Makefile.am (IGNORE_HFILES): Don't scan
+	headers in build/
+
+Sat Nov 17 17:24:19 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib-sections.txt: Remove g_log_domain_glib
+
+2001-11-15  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/iochannels.sgml: Document GIOFlags, fix typos.
+
+	* glib/tmpl/conversions.sgml, glib/tmpl/unicode.sgml,
+	glib/tmpl/spawn.sgml, glib/tmpl/fileutils.sgml,
+	glib/tmpl/shell.sgml, glib/tmpl/windows.sgml: Add
+	some missing short and long descriptions.
+
+2001-11-14  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/Makefile.am (MKDB_OPTIONS): Add --sgml-mode.
+
+	* glib/tmpl/patterns.sgml: Document UTF-8 support.
+
+Wed Nov 14 03:19:49 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/param_value_types.sgml: more docs.
+
+Tue Nov 13 21:31:58 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/param_value_types.sgml: list parameter and
+	value types.
+
+	* gobject/tmpl/gparamspec.sgml: more docs for g_param_spec*()
+	functions.
+	
+	* gobject/*: section cleanups.
+
+Tue Nov 13 19:49:16 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/gparamspec.sgml: param spec updates.
+
+2001-11-12  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/markup.sgml: Remove excess listitem from long 
+	description.
+ 
+2001-11-11  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/unicode.sgml: Document GNormalizeMode enum.
+
+	* glib/tmpl/spawn.sgml: Document GSpawnFlags flags.
+
+	* glib/tmpl/error_reporting.sgml: Document GError struct.
+
+	* glib/tmpl/main.sgml: Document GMainContext, GSource and 
+	GSourceCallbackFuncs structs.
+
+2001-10-31  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/messages.sgml, glib/tmpl/unicode.sgml:
+	Document g_log_domain_glib, gunichar, gunichar2, GUnicodeType,
+	GUnicodeBreakType.
+
+Fri Oct 26 11:42:50 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* */Makefile.am: Remove $(srcdir)/html before building
+	HTML to prevent stale files. Dist all files in html/
+
+2001-10-25  Havoc Pennington  <hp@pobox.com>
+
+	* glib/tmpl/string_utils.sgml: docs on why the deprecated
+	functions are deprecated.
+
+2001-10-15  Sven Neumann  <sven@gimp.org>
+
+	* glib/tmpl/random_numbers.sgml: fixed typo.
+
+Sat Oct 13 06:58:23 2001  Tim Janik  <timj@gtk.org>
+
+	* glib/tmpl/patterns.sgml: amended documentation.
+
+2001-10-11  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/patterns.sgml, glib/tmpl/shell.sgml: Updates.
+
+2001-10-05  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/hooks.sgml: Document G_HOOK_FLAG_USER_SHIFT.
+
+	* glib/tmpl/trash_stacks.sgml: Document trash stacks.
+
+	* glib/tmpl/async_queues.sgml, glib/tmpl/caches.sgml, 
+	glib/tmpl/completion.sgml, glib/tmpl/patterns.sgml, 
+	glib/tmpl/numerical.sgml, glib/tmpl/random_numbers.sgml, 
+	glib/tmpl/relations.sgml, glib/tmpl/modules.sgml: Update.
+
+2001-10-05  Matthias Clasen  <matthiasc@poet.de>
+	
+	* glib/tmpl/conversions.sgml: Update.
+
+	* glib/tmpl/patterns.sgml: Update.
+
+2001-10-05  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/hooks.sgml, glib/tmpl/spawn.sgml,
+	glib/tmpl/macros_misc.sgml: Update. 
+
+	* glib/tmpl/linked_lists_double.sgml, glib/tmpl/trees-binary.sgml,
+	glib/glib-sections.txt: Document GCompareDataFunc.
+
+2001-10-02  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/iochannel.sgml, glib/tmpl/macros_misc.sgml,
+	glib/tmpl/queue.sgml: update docs.
+
+	* glib/tmpl/modules.sgml, glib/tmpl/threads.sgml: Remove 
+	references to glib-config.
+
+2001-10-01  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/iochannels.sgml, glib/tmpl/shell.sgml,
+	glib/tmpl/spawn.sgml, glib/tmpl/memory.sgml,
+	glib/tmpl/macros.sgml, glib/tmpl/completion.sgml,
+	glib/tmpl/main.sgml, glib/tmpl/messages.sgml,
+	glib/tmpl/misc_utils.sgml, glib/tmpl/threads.sgml,
+	glib/tmpl/trees-nary.sgml, glib/tmpl/string_utils.sgml:
+	More markup fixes and completions.
+
+Mon Oct  1 15:59:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/strings.sgml docs/glib-sections.txt: Rename
+	g_string_printfa(). to g_string_append_printf().
+
+2001-10-01  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/glib-sections.txt: Move all *_error_quark()
+	functions to the 'Private' sections. (#61472)
+
+2001-10-01  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/macros.sgml (G_CONST_RETURN): document
+	allowed uses for 'out' parameters.
+
+2001-10-01  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/caches.sgml, glib/tmpl/datalist.sgml,
+	glib/tmpl/hash_tables.sgml, glib/tmpl/messages.sgml,
+	glib/tmpl/misc_utils.sgml: consistently refer to GTK+.
+
+	* glib/tmpl/error_reporting.sgml, glib/tmpl/fileutils.sgml,
+	glib/tmpl/windows.sgml, glib/tmpl/modules.sgml,
+	glib/tmpl/linked_lists_single.sgml, glib/tmpl/trees-nary.sgml,
+	glib/tmpl/trees-binary.sgml, glib/tmpl/timers.sgml: Markup fixes.
+
+2001-09-30  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/arrays.sgml,glib/tmpl/arrays_byte.sgml
+	glib/tmpl/arrays_pointer.sgml, glib/tmpl/caches.sgml, 
+	glib/tmpl/datalist.sgml, glib/tmpl/date.sgml, 
+	glib/tmpl/datasets.sgml, glib/tmpl/type_conversion.sgml,
+	glib/tmpl/memory.sgml, glib/tmpl/hash_tables.sgml:
+	Markup fixes and a few additions.
+
+2001-09-27  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/macros.sgml, glib/tmpl/macros_misc.sgml, 
+	glib/tmpl/scanner.sgml: Additions and markup fixes.
+
+2001-09-27  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib/tmpl/warnings.sgml, glib/tmpl/linked_lists_double.sgml,
+	glib/tmpl/completion.sgml, glib/tmpl/strings.sgml: Documented
+	some functions, markup fixes.
+	* glib/tmpl/patterns.sgml: New file.
+	* glib/glib-docs.sgml: Add entity for patterns.sgml.
+	
+2001-09-26  Matthias Clasen <matthiasc@poet.de>
+
+	* glib/glib-sections.txt: Add g_mem_is_system_malloc.
+
+2001-09-25  Matthias Clasen <matthiasc@poet.de>
+
+	* glib/glib-sections.txt: Add a missing SECTION 
+	endtag. (#61126)
+
+2001-09-17  Darin Adler  <darin@bentspoon.com>
+
+	* glib/tmpl/string_utils.sgml: Fix a typo and change
+	documentation for g_ascii_isdigit and g_ascii_isxdigit
+	to reflect the fact that the standard isdigit and
+	isxdigit are already locale-independent.
+
+Wed Sep  5 05:24:07 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/gboxed.sgml: documented some functions.
+
+	* gobject/tmpl/objects.sgml: some fixups.
+
+Mon Sep 10 11:37:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib-sections.txt: Update.
+
+Sat Sep  8 14:13:44 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am (IGNORE_HFILES): Add 
+	gbsearcharray.h.
+
+	* gobject/Makefile.am (IGNORE_HFILES): Remove
+	gbsearcharray.h.
+
+2001-08-15  Ron Stenike  <rsteinke@w-link.net>
+
+	* docs/reference/glib/glib-sections.txt: Added
+	declarations for g_io_channel_[set,get]_close_on_unref
+
+Sun Aug 12 10:03:42 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* */Makefile.am: Set GPATH to fix srcdir != builddir  
+	problems with GNU make.
+
+Sun Aug 12 02:24:36 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/value_arrays.sgml: document value arrays.
+
+2001-08-06  Sven Neumann  <sven@gimp.org>
+
+	* docs/reference/gobject/gobject-sections.txt
+	* docs/reference/gobject/tmpl/objects.sgml: added documentation for
+	g_object_[add|remove]_weak_pointer().
+
+2001-07-19  Darin Adler  <darin@bentspoon.com>
+
+	reviewed by: <delete if not using a buddy>
+
+	* glib/tmpl/string_utils.sgml:
+
+2001-06-03  Matthias Clasen  <matthiasc@poet.de>
+ 
+ 	* glib/tmpl/caches.sgml, glib/tmpl/main.sgml, 
+ 	gobject/gobject-docs.sgml, gobject/tmpl/generic_values.sgml,
+ 	gobject/tmpl/gtypemodule.sgml, gobject/tmpl/signals.sgml,
+ 	gobject/tmpl/types.sgml: fix some typos.
+ 
+Thu Jun 28 17:43:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/tmpl/memory.sgml glib/tmpl/macros_misc.sgml: Add
+	notes about inclusion of string.h to docs on g_memmove,
+	G_VA_COPY. (#54411)
+
+Tue Jun 26 12:28:20 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am: Fix problem with glibconfig.h
+
+2001-06-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml (example): Corrected.
+
+2001-06-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt, glib/tmpl/date.sgml: Add g_time_val_add.
+
+	* glib/tmpl/threads.sgml: Updated. 
+
+2001-05-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/arrays.sgml, glib/tmpl/arrays_pointers.sgml,
+	glib/tmpl/arrays_byte.sgml: Corrected documentation for the
+	..._sized_new functions. Discovered by noon@users.sourceforge.net.
+
+2001-05-19  Havoc Pennington  <hp@pobox.com>
+
+	* glib/Makefile.am (IGNORE_HFILES): add glibintl.h
+
+	* glib/tmpl/*.sgml: fix various missing docs
+
+2001-05-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-overrides.txt, glib/glib-sections.txt,
+	glib/tmpl/thread_pools.sgml, glib/tmpl/threads.sgml: Updated.
+
+2001-05-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/thread_pools.sgml, glib/tmpl/thread_pools.sgml:
+	Updates after some renaming took place.
+
+2001-05-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml, glib/glib-overrides.txt: Updated.
+
+	* glib/tmpl/threads.sgml: Clarification for g_mutex_trylock.
+
+2001-04-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/hash_tables.sgml, glib/tmpl/misc_utils.sgml,
+	glib/tmpl/scanner.sgml: Changes due to deprecation update.
+
+Mon Apr 16 12:18:26 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* {glib,gobject}/Makefile.am (tmpl-build.stamp): More tweaks
+	from GTK+. Reenable $(HTML_IMAGES) with shell portability fixes.
+
+Wed Apr  4 00:56:00 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/Makefile.am: disabled "for i in $(HTML_IMAGES) ;"
+	dist-hook because $(HTML_IMAGES) is empty.
+
+Tue Apr  3 11:51:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* {glib,gobject}/Makefile.am (sgml-build.stamp): Add
+	explicit path to tmpl files in dependencies.
+
+	* glib/glib.types gobject/gobject.types: empty files
+	to keep generic makefiles happy.
+
+2001-04-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt: Removed
+	g_static_private_(get|set)_for_thread.
+
+	* glib/tmpl/threads.sgml: Updated.
+
+	* glib/tmpl/thread_pools.sgml: Added GThreadPool documentation.
+
+Mon Mar 26 14:20:36 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am (SCAN_OPTIONS): Add --deprecated-guards
+
+Sat Mar 17 17:51:17 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/Makefile.am glib/Makefile.am: A couple
+	of small fixes.
+
+2001-03-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml: Spelling corrections.
+
+Wed Mar  7 15:02:17 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/Makefile.am: Revert Tim's last commit to
+	get rid of 7+ unnecessary / broken changes. Add
+	back the useful part. Also fix problem with grep,
+	add dependency on template files.
+
+	* gobject/gobject-sections.txt: Remove double 
+	value_types names which was screwing up builds.
+
+	* glib/Makefile.am: Propagate changes from 
+	gobject/Makefile.am
+
+2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml: Fixed stupid typo.
+
+2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml: Completed.
+
+Wed Mar  7 09:33:27 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/Makefile.am: shuffled rules to avoid excessive
+	rebuilds.
+
+	* gobject/gobject-sections.txt: updates.
+
+	* gobject/tmpl/*: bunch of updates, added another patch
+	from Eric Lemings <eric.b.lemings@lmco.com>.
+
+2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt, glib/tmpl/messages.sgml: Removed
+	g_log_domain_gmodule.
+
+2001-02-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml: Big update. Almost ready.
+
+	* glib/tmpl/async_queues.sgml: Typo.
+
+	* glib/glib-sections.txt: Added g_static_rec_mutex_init,
+	g_static_rec_mutex_free, g_static_rw_lock_init,
+	g_static_private_init and g_static_private_free.
+
+	* glib/glib-overrides.txt: Added g_thread_yield and g_thread_exit.
+
+Fri Feb 16 06:52:20 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/types.sgml: incorporated huge docu patch from Eric
+	Lemings <eric.b.lemings@lmco.com> with a bunch of editing on my part.
+
+Mon Feb 12 12:42:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* {glib,gobject}/Makefile.am: The ultimate gtk-doc makefile.
+
+2001-02-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/threads.sgml, glib/glib-sections.txt: Added
+	documentation for g_static_mutex_init().
+
+Wed Jan 31 07:14:22 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/Makefile.am: adapt to work with new CVS gtk-doc, leaving the old
+	rules in place caused bogus recursions. main changes:
+	- add to conditionalized section:
+	  all-local:
+	        $(MAKE) scan
+	        $(MAKE) templates
+	        $(MAKE) sgml
+	        $(MAKE) html.stamp
+	  html.stamp: sgml.stamp $(EXTRA_SGML_FILES)
+	        $(MAKE) html
+	  DOC_STAMPS= html.stamp sgml.stamp
+	- change:
+	  maintainer-clean-local: clean
+	  -     cd $(srcdir) && rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+	  +     cd $(srcdir) && rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt $(DOC_STAMPS)
+
+	* glib/Makefile.am (maintainer-clean-local): dito.
+
+Wed Jan 31 06:21:32 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/types.sgml: applied docu patch from Eric Lemings
+	<eric.b.lemings@lmco.com>, did some more editing.
+
+2001-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt, glib/tmpl/threads.sgml: Added
+	g_static_mutex_free().
+
+Tue Jan  9 03:10:38 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/types.sgml: added some function documentations.
+
+	* gobject/gobject-sections.txt: buncha fixups.
+
+Fri Jan  5 15:47:10 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib-sections.txt glib/tmpl/* glib/Makefile.am: Updated.
+
+2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt: Added G_MODULE_SUFFIX.
+
+	* glib/tmpl/modules.sgml: Updated.
+
+2000-12-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt: Added g_rand_boolean and
+	g_random_boolean macros.
+
+	* glib/tmpl/random_numbers.sgml: Updated.
+	
+Tue Dec  5 15:41:23 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/Makefile.am glib/mainloop-states*: add images
+
+	* glib/glib-sections.txt: Updated
+
+	* glib/tmpl/main.sgml: More documentation, move function
+	docs to .c file.
+
+Mon Nov 13 00:18:55 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* glib/glib-sections.sgml: Move conversion functions
+	into GConv section.
+	
+	* gobject/gobject-docs.sgml: Fix some malformed sgml.
+
+Sun Nov  5 13:24:50 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/Makefile.am gobject/gobject-sections.sgml: Updates
+	* gobject/tmpl/g{boxed,type{plugin,module}}.sgml: added
+
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* glib/tmpl/markup.sgml: Write docs
+
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* glib/glib-sections.txt: remove parens from section name,
+	confuses gtk-doc
+
+	* glib/glib-docs.sgml: Add the new files here, doh.
+
+	* glib/tmpl/shell.sgml: add gshell.[hc] docs
+
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* glib/tmpl/error_reporting.sgml: fixes
+
+2000-11-05  Havoc Pennington  <hp@pobox.com>
+
+	* glib/tmpl/spawn.sgml, glib/tmpl/markup.sgml,
+	glib/tmpl/fileutils.sgml: Added
+	
+	* glib/Makefile.am: Add new files
+
+	* glib/glib-sections.txt: Add stuff from -unused
+
+Fri Nov  3 07:33:15 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject/gobject-docs.sgml: added &gobject-closures; section.
+
+	* gobject/Makefile.am (tmpl_sources): add tmpl/clsoures.sgml
+
+	* gobject/gobject-sections.txt: added Closure section.
+	
+	* gobject/tmpl/closures.sgml: new file with template description
+	for GClosure functions.
+
+2000-11-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/glib-unused.sgml: Remove superfluous GSearchFunc.
+
+	* glib/tmpl/async_queues.sgml, glib/glib-sections.txt: Added
+	documentation for asynchronous queues.
+
+2000-10-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/linked_lists_single.sgml: This time the right fix.
+
+	* glib/tmpl/scanner.sgml, glib/tmpl/strings.sgml: Changed
+	parameter names.
+
+	* glib/tmpl/string_utils.sgml: Corrected the documentation of
+	g_strescape and added those of g_strcompress.
+
+2000-10-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/limits.sgml: Added documentation for
+	G_MAXU(INT|SHORT|LONG).
+
+	* glib/tmpl/macros_misc.sgml: Added documentation for
+	G_G(U)INT(16|32|64)_FORMAT.
+
+	* glib/tmpl/types.sgml: Mention G_MAXU(INT|SHORT|LONG) in
+	documentation for gu(int|short|long).
+
+	* glib/glib-sections.txt, glib/tmpl/linked_lists_double.sgml,
+	glib/tmpl/caches.sgml: Move GCompareFunc to GList and introduce
+	and document GEqualFunc in GHashTable.
+
+	* glib/tmpl/caches.sgml, glib/tmpl/hash_tables.sgml,
+	glib/tmpl/relations.sgml : Changed to reflect the changed API
+	(GCompareFunc -> GEqualFunc).
+
+	* glib/tmpl/linked_lists_single.sgml, glib/tmpl/threads.sgml: Typo
+	fixes.
+	
+Mon Oct 30 11:13:12 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject/tmpl/signals.sgml: start at general description.
+
+	* gobject/gobject-docs.sgml: added introduction.
+
+Mon Oct 30 06:01:43 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject/gobject-sections.txt: opened up a new section on signals.
+
+2000-10-27  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/tmpl/misc_utils.sgml: Removed the win32 limitation.
+
+	* glib/glib-sections.txt, glib/tmpl/hash_tables.sgml,
+	glib/tmpl/macros_misc.sgml, glib/tmpl/misc_utils.sgml,
+	glib/tmpl/scanner.sgml: Document the recently deprecated functions
+	as such.
+
+2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>
+
+	'make distcheck' fixes.
+	* glib/Makefile.am (EXTRA_DIST): Add $(DOC_MODULE)-decl.txt.
+	(html): Run 'gtkdoc-fixxref' in $(srcdir).
+	(dist-check-gtkdoc): Add missing quote.
+	(dist-hook): Copy in dependency order, so that none of the
+	makerules are fired in a tarball build.
+
+	* gobject/Makefile.am: Likewise.
+
+2000-10-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib/glib-sections.txt: Added misc items.
+
+	* glib/tmpl/random_numbers.sgml: Documentation for the random
+	number generator.
+
+2000-10-09  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* gobject/Makefile.am (DOC_SOURCE_DIR): Don't set to 
+	$top_srcdir)/gobject.
+	* glib/Makefile.am (DOC_SOURCE_DIR): Don't set to $(top_srcdir),
+
+2000-09-29  Jonathan Blandford  <jrb@redhat.com>
+
+	* glib/tmpl/trees-nary.sgml: Add g_node_insert_after().
+
+Thu Sep  7 12:35:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Some further makefile improvement.
+	 
+	* Restore all the docs that mysteriously vanished earlier.
+
+Wed Sep  6 10:59:45 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/Makefile.am glib/Makefile.am: Improve 
+	separation of generic non-generic parts and dependencies. 
+
+Tue Sep  5 20:03:25 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Moved into glib source tree, updated glib-sections.txt
+	and Makefile.am for glib-1.3.x.
+
+2000-07-01  Damon Chaplin  <damon@helixcode.com>
+
+	* tmpl/string_utils.sgml: updated g_strndup.
+
+2000-06-11  Damon Chaplin  <damon@helixcode.com>
+
+	* tmpl/messages.sgml: updated a bit more.
+
+2000-06-11  Damon Chaplin  <damon@helixcode.com>
+
+	* tmpl/messages.sgml: updated a few bits about log handlers & flags.
+
+2000-04-16  Damon Chaplin  <damon@helixcode.com>
+
+	* tmpl/linked_lists_single.sgml: 
+	* tmpl/linked_lists_double.sgml: 
+	* tmpl/trees-nary.sgml: updated.
+
+	* tmpl/modules.sgml: described g_module_build_path().
+
+	* tmpl/date.sgml: made short description lower case and end in a '.'.
+
+	* glib-sections.txt: rearranged GDate section.
+
+	* tmpl/arrays.sgml: 
+	* tmpl/arrays_byte.sgml: 
+	* tmpl/arrays_pointer.sgml: updated.
+
+2000-02-21  Damon Chaplin  <damon@helixcode.com>
+
+	* tmpl/main.sgml: updated the g_source_remove_by_XXX() descriptions
+	to note that only the first source found is removed.
+
+2000-01-25  Damon Chaplin  <damon@karuna.freeserve.co.uk>
+
+	* tmpl/misc_utils.sgml: g_bit_nth_lsf/msf docs from 
+	Nils Rennebarth <nils@ipe.uni-stuttgart.de>, and updates for
+	GVoidFunc & GFreeFunc.
+
+1999-12-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* glib-sections.txt, tmpl/threads.sgml: Removed
+	G_THREADS_IMPL_NSPR. Shouldn't be used anyway.
+
+	* glib-overrides.txt: New file, that makes most of the thread
+	related macros look like functions.
+
+	* Makefile.am: Added glib-overrides.txt to EXTRA_DIST.
+
+	* tmpl/threads.sgml: Minor updates.
+	
+Tue Aug 17 08:42:17 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* tmpl/datasets.sgml: Added missing </para>
+	* tmpl/timers.sgml: Added missing </para>
+	* tmpl/misc_utils.sgml: Added missing </para>
+	* tmpl/linked_lists_double.sgml: Added missing </para>
+	* tmpl/linked_lists_single.sgml: Added missing </para>
+	* tmpl/threads.sgml: Removed extra <para>s.
+	* tmpl/main.sgml: Added missing </para>
+
+Wed Aug 18 23:38:52 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* README: Added some simple build instructions.
+
+Wed Aug 18 23:11:28 1999  Owen Taylor  <otaylor@redhat.com>
+
+	* Import into CVS of glib-reference-1.1.3
+	  Filled in some basic contents for AUTHORS
+	  README, and README.cvs  
+
diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am
new file mode 100644
index 0000000..63cf90d
--- /dev/null
+++ b/docs/reference/Makefile.am
@@ -0,0 +1,3 @@
+include $(top_srcdir)/Makefile.decl
+
+SUBDIRS = glib gobject gio
diff --git a/docs/reference/NEWS b/docs/reference/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/reference/NEWS
diff --git a/docs/reference/README b/docs/reference/README
new file mode 100644
index 0000000..8950281
--- /dev/null
+++ b/docs/reference/README
@@ -0,0 +1,63 @@
+This package contains the reference documentation
+for GLib. For more information about Glib,
+see:
+
+ http://www.gtk.org
+
+For information about contributing to the
+GLib/GTK+ reference documentation project, see:
+
+ http://www.gtk.org/rdp/
+
+The GLib reference documentation is freely redistributable,
+see the file COPYING for details.
+
+
+REQUIREMENTS
+============
+
+To build the documentation, you must have the gtk-doc
+package installed. To rebuild the template files,
+you must have the current version of the GLib
+header files installed.
+
+
+BUILD
+=====
+
+First, run configure to generate the makefiles for this
+module. There is one option specific to this package
+
+  --with-html-dir=DIR   top of installed HTML documentation tree
+
+
+The Makefiles for this module define three targets:
+
+ templates:
+  
+  Scan the headers and merge the results with the current 
+  template files
+
+ sgml:
+
+  Generate SGML files using the DocBook DTD from
+  the template files
+
+ html:
+
+  Generate HTML from the SGML files.
+
+To build the documentation, do:
+
+ make sgml
+ make html
+
+You should only run the 'make templates' step if you
+need to regenerate the templates for a more recent
+version of the GLib sources.
+
+
+INSTALLATION
+============
+
+ make install
diff --git a/docs/reference/gio/.gitignore b/docs/reference/gio/.gitignore
new file mode 100644
index 0000000..abbf4ff
--- /dev/null
+++ b/docs/reference/gio/.gitignore
@@ -0,0 +1,2 @@
+gio-overrides.txt
+tmpl
diff --git a/docs/reference/gio/Makefile.am b/docs/reference/gio/Makefile.am
new file mode 100644
index 0000000..43e003f
--- /dev/null
+++ b/docs/reference/gio/Makefile.am
@@ -0,0 +1,110 @@
+include $(top_srcdir)/Makefile.decl
+NULL = 
+
+# The name of the module.
+DOC_MODULE=gio
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=gio-docs.xml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="G_DISABLE_DEPRECATED"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=$(top_srcdir)/gio
+
+HFILE_GLOB=$(top_srcdir)/gio/*.h
+CFILE_GLOB=$(top_srcdir)/gio/*.c
+
+# Headers to ignore
+IGNORE_HFILES=				\
+	fam-helper.h			\
+	gasynchelper.h			\
+	gcontenttypeprivate.h		\
+	gdummyfile.h			\
+	gfamdirectorymonitor.h		\
+	gfamfilemonitor.h		\
+	gfileattribute-priv.h		\
+	ginotifydirectorymonitor.h	\
+	ginotifyfilemonitor.h		\
+	gio-marshal.h			\
+	gio.h				\
+	gioalias.h			\
+	gioalias.h			\
+	gioenumtypes.h			\
+	giomodule-priv.h		\
+	glocaldirectorymonitor.h	\
+	glocalfile.h			\
+	glocalfileenumerator.h		\
+	glocalfileinfo.h		\
+	glocalfileinputstream.h		\
+	glocalfilemonitor.h		\
+	glocalfileoutputstream.h	\
+	glocalvfs.h			\
+	gnativevolumemonitor.h		\
+	gpollfilemonitor.h		\
+	gunionvolumemonitor.h		\
+	gunixdrive.h			\
+	gunixvolume.h			\
+	gvolumeprivate.h		\
+	gwin32appinfo.h			\
+	inotify-diag.h			\
+	inotify-helper.h		\
+	inotify-kernel.h		\
+	inotify-missing.h		\
+	inotify-path.h			\
+	inotify-sub.h			\
+	local_inotify.h			\
+	local_inotify_syscalls.h	\
+	xdgmime.h			\
+	xdgmimealias.h		   	\
+	xdgmimecache.h		   	\
+	xdgmimeglob.h		   	\
+	xdgmimeint.h		   	\
+	xdgmimemagic.h		   	\
+	xdgmimeparent.h		   	\
+	$(NULL)
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES = \
+	-I$(srcdir) 			\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gobject		\
+	-I$(top_builddir) 		\
+	-I$(top_builddir)/glib 		\
+	-I$(top_builddir)/gobject	\
+	$(GLIB_DEBUG_FLAGS)
+
+GTKDOC_LIBS = \
+	$(top_builddir)/glib/libglib-2.0.la		\
+	$(top_builddir)/gobject/libgobject-2.0.la	\
+	$(top_builddir)/gmodule/libgmodule-2.0.la	\
+	$(top_builddir)/gio/libgio-2.0.la		\
+	$(NULL)
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS = --output-format=xml --sgml-mode --name-space=g
+
+# Images to copy into HTML directory
+HTML_IMAGES =			\
+	gvfs-overview.png
+
+content_files = 		\
+	version.xml		\
+	overview.xml		\
+	migrating.xml
+
+expand_content_files =		\
+	overview.xml		\
+	migrating.xml
+
+extra_files = 			\
+	version.xml.in		\
+	gvfs-overview.odg
+
+include $(top_srcdir)/gtk-doc.make
+
+EXTRA_DIST +=				\
+	version.xml.in
diff --git a/docs/reference/gio/gio-docs.xml b/docs/reference/gio/gio-docs.xml
new file mode 100644
index 0000000..46af7fe
--- /dev/null
+++ b/docs/reference/gio/gio-docs.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY version SYSTEM "version.xml">
+]>
+<book lang="en" id="gio" xmlns:xi="http://www.w3.org/2003/XInclude">
+<title>GIO Reference Manual</title>
+  <bookinfo>
+    <title>GIO Reference Manual</title>
+    <releaseinfo>
+      for GIO &version;
+      The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://library.gnome.org/devel/gio/unstable/">http://library.gnome.org/devel/gio/unstable/</ulink>.
+    </releaseinfo>
+  </bookinfo>
+
+  <xi:include href="xml/overview.xml"/>
+
+  <part>
+  <title>API Reference</title>
+    <chapter id="file_ops">
+    	<title>File Operations</title>
+    	<xi:include href="xml/gfile.xml"/>
+        <xi:include href="xml/gfileattribute.xml"/>
+    	<xi:include href="xml/gfileinfo.xml"/>
+	<xi:include href="xml/gfileenumerator.xml"/>
+	<xi:include href="xml/gmountoperation.xml"/>
+	<xi:include href="xml/gioerror.xml"/>
+    </chapter>
+    <chapter id="file_mon">
+    	<title>File System Monitoring</title>
+        <xi:include href="xml/gfilemonitor.xml"/>
+    </chapter>
+    <chapter id="async">
+        <title>Asynchronous I/O</title>
+	<xi:include href="xml/gcancellable.xml"/>
+	<xi:include href="xml/gasyncresult.xml"/>
+        <xi:include href="xml/gioscheduler.xml"/>
+	<xi:include href="xml/gsimpleasyncresult.xml"/>
+    </chapter>
+    
+    <chapter id="streaming">
+        <title>Streaming I/O</title>
+	<xi:include href="xml/gseekable.xml"/>
+
+        <xi:include href="xml/ginputstream.xml"/>        
+        <xi:include href="xml/goutputstream.xml"/>
+
+        <xi:include href="xml/gfileinputstream.xml"/>
+        <xi:include href="xml/gfileoutputstream.xml"/>
+
+        <xi:include href="xml/gfilterinputstream.xml"/>        
+        <xi:include href="xml/gfilteroutputstream.xml"/>
+	
+        <xi:include href="xml/gmemoryinputstream.xml"/>        
+        <xi:include href="xml/gmemoryoutputstream.xml"/>
+        
+        <xi:include href="xml/gbufferedinputstream.xml"/>
+        <xi:include href="xml/gbufferedoutputstream.xml"/>
+	
+        <xi:include href="xml/gdatainputstream.xml"/>
+        <xi:include href="xml/gdataoutputstream.xml"/>
+        
+        <xi:include href="xml/gunixinputstream.xml"/>
+        <xi:include href="xml/gunixoutputstream.xml"/>
+
+    </chapter>
+
+    <chapter id="types">
+        <title>File types and applications</title>
+        <xi:include href="xml/gcontenttype.xml"/>
+	<xi:include href="xml/gappinfo.xml"/>
+	<xi:include href="xml/gdesktopappinfo.xml"/>
+    </chapter>
+    
+    <chapter id="volume_mon">
+    	<title>Volumes and Drives</title>
+        <xi:include href="xml/gvolumemonitor.xml"/>
+	<xi:include href="xml/gvolume.xml"/>
+        <xi:include href="xml/gmount.xml"/>
+	<xi:include href="xml/gdrive.xml"/>
+	<xi:include href="xml/gunixmounts.xml"/>
+    </chapter>
+    <chapter id="icons">
+    	<title>Icons</title>
+    	<xi:include href="xml/gicon.xml"/>
+    	<xi:include href="xml/gfileicon.xml"/>
+    	<xi:include href="xml/gloadableicon.xml"/>
+    	<xi:include href="xml/gthemedicon.xml"/>
+    	<xi:include href="xml/gemblemedicon.xml"/>
+    	<xi:include href="xml/gemblem.xml"/>
+    </chapter>
+    <chapter id="utils">   
+    	<title>Utilities</title>
+        <xi:include href="xml/gfilenamecompleter.xml"/>
+    </chapter>
+    <chapter id="extending">
+    	<title>Extending GIO</title>
+        <xi:include href="xml/gvfs.xml"/>
+	<xi:include href="xml/giomodule.xml"/>
+	<xi:include href="xml/extensionpoints.xml"/>
+    </chapter>
+  </part>
+
+  <xi:include href="xml/migrating.xml"/>
+
+  <chapter id="gio-hierarchy">
+    <title>Object Hierarchy</title>
+      <xi:include href="xml/tree_index.sgml"/>
+  </chapter>
+  
+  <index>
+    <title id="index-all">Index</title>
+  </index>
+  <index role="2.18">
+    <title>Index of new symbols in 2.18</title>
+  </index>
+  <index role="2.20">
+    <title>Index of new symbols in 2.20</title>
+  </index>
+</book>
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
new file mode 100644
index 0000000..391dfaf
--- /dev/null
+++ b/docs/reference/gio/gio-sections.txt
@@ -0,0 +1,1313 @@
+<SECTION>
+<FILE>gvfs</FILE>
+<TITLE>GVfs</TITLE>
+GVfs
+G_VFS_EXTENSION_POINT_NAME
+g_vfs_get_file_for_path
+g_vfs_get_file_for_uri
+g_vfs_parse_name
+g_vfs_get_default
+g_vfs_get_local
+g_vfs_is_active
+g_vfs_get_supported_uri_schemes
+<SUBSECTION Standard>
+GVfsClass
+G_VFS
+G_IS_VFS
+G_TYPE_VFS
+G_VFS_CLASS
+G_IS_VFS_CLASS
+G_VFS_GET_CLASS
+<SUBSECTION Private>
+g_vfs_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gfile</FILE>
+<TITLE>GFile</TITLE>
+GFile
+GFileIface
+GFileQueryInfoFlags
+GFileCreateFlags
+GFileCopyFlags
+GFileMonitorFlags
+GFilesystemPreviewType
+GFileProgressCallback
+GFileReadMoreCallback
+g_file_new_for_path
+g_file_new_for_uri
+g_file_new_for_commandline_arg
+g_file_parse_name
+g_file_dup
+g_file_hash
+g_file_equal
+g_file_get_basename
+g_file_get_path
+g_file_get_uri
+g_file_get_parse_name
+g_file_get_parent
+g_file_get_child
+g_file_get_child_for_display_name
+g_file_has_prefix
+g_file_get_relative_path
+g_file_resolve_relative_path
+g_file_is_native
+g_file_has_uri_scheme
+g_file_get_uri_scheme
+g_file_read
+g_file_read_async
+g_file_read_finish
+g_file_append_to
+g_file_create
+g_file_replace
+g_file_append_to_async
+g_file_append_to_finish
+g_file_create_async
+g_file_create_finish
+g_file_replace_async
+g_file_replace_finish
+g_file_query_info
+g_file_query_info_async
+g_file_query_info_finish
+g_file_query_exists
+g_file_query_file_type
+g_file_query_filesystem_info
+g_file_query_filesystem_info_async
+g_file_query_filesystem_info_finish
+g_file_query_default_handler
+g_file_find_enclosing_mount
+g_file_find_enclosing_mount_async
+g_file_find_enclosing_mount_finish
+g_file_enumerate_children
+g_file_enumerate_children_async
+g_file_enumerate_children_finish
+g_file_set_display_name
+g_file_set_display_name_async
+g_file_set_display_name_finish
+g_file_delete
+g_file_trash
+g_file_copy
+g_file_copy_async
+g_file_copy_finish
+g_file_move
+g_file_make_directory
+g_file_make_directory_with_parents
+g_file_make_symbolic_link
+g_file_query_settable_attributes
+g_file_query_writable_namespaces
+g_file_set_attribute
+g_file_set_attributes_from_info
+g_file_set_attributes_async
+g_file_set_attributes_finish
+g_file_set_attribute_string
+g_file_set_attribute_byte_string
+g_file_set_attribute_uint32
+g_file_set_attribute_int32
+g_file_set_attribute_uint64
+g_file_set_attribute_int64
+g_file_mount_mountable
+g_file_mount_mountable_finish
+g_file_unmount_mountable
+g_file_unmount_mountable_finish
+g_file_eject_mountable
+g_file_eject_mountable_finish
+g_file_mount_enclosing_volume
+g_file_mount_enclosing_volume_finish
+g_file_monitor_directory
+g_file_monitor_file
+g_file_monitor
+g_file_load_contents
+g_file_load_contents_async
+g_file_load_contents_finish
+g_file_load_partial_contents_async
+g_file_load_partial_contents_finish
+g_file_replace_contents
+g_file_replace_contents_async
+g_file_replace_contents_finish
+g_file_copy_attributes
+<SUBSECTION Standard>
+G_FILE
+G_IS_FILE
+G_TYPE_FILE
+G_FILE_GET_IFACE
+<SUBSECTION Private>
+g_file_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gfileenumerator</FILE>
+<TITLE>GFileEnumerator</TITLE>
+GFileEnumerator
+g_file_enumerator_next_file
+g_file_enumerator_close
+g_file_enumerator_next_files_async
+g_file_enumerator_next_files_finish
+g_file_enumerator_close_async
+g_file_enumerator_close_finish
+g_file_enumerator_is_closed
+g_file_enumerator_has_pending
+g_file_enumerator_set_pending
+g_file_enumerator_get_container
+<SUBSECTION Standard>
+GFileEnumeratorClass
+G_FILE_ENUMERATOR
+G_IS_FILE_ENUMERATOR
+G_TYPE_FILE_ENUMERATOR
+G_FILE_ENUMERATOR_CLASS
+G_IS_FILE_ENUMERATOR_CLASS
+G_FILE_ENUMERATOR_GET_CLASS
+<SUBSECTION Private>
+g_file_enumerator_get_type
+GFileEnumeratorPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gfileinfo</FILE>
+<TITLE>GFileInfo</TITLE>
+GFileAttributeMatcher
+GFileType
+GFileInfo
+G_FILE_ATTRIBUTE_STANDARD_TYPE
+G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN
+G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP
+G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK
+G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL
+G_FILE_ATTRIBUTE_STANDARD_NAME
+G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME
+G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME
+G_FILE_ATTRIBUTE_STANDARD_COPY_NAME
+G_FILE_ATTRIBUTE_STANDARD_ICON
+G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE
+G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE
+G_FILE_ATTRIBUTE_STANDARD_SIZE
+G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET
+G_FILE_ATTRIBUTE_STANDARD_TARGET_URI
+G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER
+G_FILE_ATTRIBUTE_ETAG_VALUE
+G_FILE_ATTRIBUTE_ID_FILE
+G_FILE_ATTRIBUTE_ID_FILESYSTEM
+G_FILE_ATTRIBUTE_ACCESS_CAN_READ
+G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE
+G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE
+G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE
+G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH
+G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME
+G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT
+G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT
+G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT
+G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE
+G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI
+G_FILE_ATTRIBUTE_TIME_MODIFIED
+G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC
+G_FILE_ATTRIBUTE_TIME_ACCESS
+G_FILE_ATTRIBUTE_TIME_ACCESS_USEC
+G_FILE_ATTRIBUTE_TIME_CHANGED
+G_FILE_ATTRIBUTE_TIME_CHANGED_USEC
+G_FILE_ATTRIBUTE_TIME_CREATED
+G_FILE_ATTRIBUTE_TIME_CREATED_USEC
+G_FILE_ATTRIBUTE_UNIX_DEVICE
+G_FILE_ATTRIBUTE_UNIX_INODE
+G_FILE_ATTRIBUTE_UNIX_MODE
+G_FILE_ATTRIBUTE_UNIX_NLINK
+G_FILE_ATTRIBUTE_UNIX_UID
+G_FILE_ATTRIBUTE_UNIX_GID
+G_FILE_ATTRIBUTE_UNIX_RDEV
+G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE
+G_FILE_ATTRIBUTE_UNIX_BLOCKS
+G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT
+G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE
+G_FILE_ATTRIBUTE_DOS_IS_SYSTEM
+G_FILE_ATTRIBUTE_OWNER_USER
+G_FILE_ATTRIBUTE_OWNER_USER_REAL
+G_FILE_ATTRIBUTE_OWNER_GROUP
+G_FILE_ATTRIBUTE_THUMBNAIL_PATH
+G_FILE_ATTRIBUTE_THUMBNAILING_FAILED
+G_FILE_ATTRIBUTE_PREVIEW_ICON
+G_FILE_ATTRIBUTE_FILESYSTEM_SIZE
+G_FILE_ATTRIBUTE_FILESYSTEM_FREE
+G_FILE_ATTRIBUTE_FILESYSTEM_TYPE
+G_FILE_ATTRIBUTE_FILESYSTEM_READONLY
+G_FILE_ATTRIBUTE_GVFS_BACKEND
+G_FILE_ATTRIBUTE_SELINUX_CONTEXT
+G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT
+G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW
+G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION
+g_file_info_new
+g_file_info_dup
+g_file_info_copy_into
+g_file_info_has_attribute
+g_file_info_list_attributes
+g_file_info_get_attribute_type
+g_file_info_remove_attribute
+g_file_info_get_attribute_as_string
+g_file_info_get_attribute_data
+g_file_info_get_attribute_status
+g_file_info_get_attribute_string
+g_file_info_get_attribute_byte_string
+g_file_info_get_attribute_boolean
+g_file_info_get_attribute_uint32
+g_file_info_get_attribute_int32
+g_file_info_get_attribute_uint64
+g_file_info_get_attribute_int64
+g_file_info_get_attribute_object
+g_file_info_set_attribute
+g_file_info_set_attribute_string
+g_file_info_set_attribute_byte_string
+g_file_info_set_attribute_boolean
+g_file_info_set_attribute_uint32
+g_file_info_set_attribute_int32
+g_file_info_set_attribute_uint64
+g_file_info_set_attribute_int64
+g_file_info_set_attribute_object
+g_file_info_clear_status
+g_file_info_get_file_type
+g_file_info_get_is_hidden
+g_file_info_get_is_backup
+g_file_info_get_is_symlink
+g_file_info_get_name
+g_file_info_get_display_name
+g_file_info_get_edit_name
+g_file_info_get_icon
+g_file_info_get_content_type
+g_file_info_get_size
+g_file_info_get_modification_time
+g_file_info_get_symlink_target
+g_file_info_get_etag
+g_file_info_get_sort_order
+g_file_info_set_attribute_mask
+g_file_info_unset_attribute_mask
+g_file_info_set_file_type
+g_file_info_set_is_hidden
+g_file_info_set_is_symlink
+g_file_info_set_name
+g_file_info_set_display_name
+g_file_info_set_edit_name
+g_file_info_set_icon
+g_file_info_set_content_type
+g_file_info_set_size
+g_file_info_set_modification_time
+g_file_info_set_symlink_target
+g_file_info_set_sort_order
+g_file_attribute_matcher_new
+g_file_attribute_matcher_ref
+g_file_attribute_matcher_unref
+g_file_attribute_matcher_matches
+g_file_attribute_matcher_matches_only
+g_file_attribute_matcher_enumerate_namespace
+g_file_attribute_matcher_enumerate_next
+<SUBSECTION Standard>
+GFileInfoClass
+G_FILE_INFO
+G_IS_FILE_INFO
+G_TYPE_FILE_INFO
+G_FILE_INFO_CLASS
+G_IS_FILE_INFO_CLASS
+G_FILE_INFO_GET_CLASS
+<SUBSECTION Private>
+g_file_info_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gfileattribute</FILE>
+<TITLE>GFileAttribute</TITLE>
+GFileAttributeType
+GFileAttributeInfoFlags
+GFileAttributeStatus
+GFileAttributeInfo
+GFileAttributeInfoList
+g_file_attribute_info_list_new
+g_file_attribute_info_list_ref
+g_file_attribute_info_list_unref
+g_file_attribute_info_list_dup
+g_file_attribute_info_list_lookup
+g_file_attribute_info_list_add
+<SUBSECTION Private>
+g_file_attribute_info_list_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gfilemonitor</FILE>
+<TITLE>GFileMonitor</TITLE>
+GFileMonitorEvent
+GFileMonitor
+g_file_monitor_cancel
+g_file_monitor_is_cancelled
+g_file_monitor_set_rate_limit
+g_file_monitor_emit_event
+<SUBSECTION Standard>
+GFileMonitorClass
+G_FILE_MONITOR
+G_IS_FILE_MONITOR
+G_TYPE_FILE_MONITOR
+G_FILE_MONITOR_CLASS
+G_IS_FILE_MONITOR_CLASS
+G_FILE_MONITOR_GET_CLASS
+<SUBSECTION Private>
+g_file_monitor_get_type
+GFileMonitorPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gicon</FILE>
+<TITLE>GIcon</TITLE>
+GIcon
+GIconIface
+g_icon_hash
+g_icon_equal
+g_icon_to_string
+g_icon_new_for_string
+<SUBSECTION Standard>
+G_ICON
+G_IS_ICON
+G_TYPE_ICON
+G_ICON_GET_IFACE
+<SUBSECTION Private>
+g_icon_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gthemedicon</FILE>
+<TITLE>GThemedIcon</TITLE>
+GThemedIcon
+g_themed_icon_new
+g_themed_icon_new_from_names
+g_themed_icon_new_with_default_fallbacks
+g_themed_icon_prepend_name
+g_themed_icon_append_name
+g_themed_icon_get_names
+<SUBSECTION Standard>
+GThemedIconClass
+G_THEMED_ICON
+G_IS_THEMED_ICON
+G_TYPE_THEMED_ICON
+G_THEMED_ICON_CLASS
+G_IS_THEMED_ICON_CLASS
+G_THEMED_ICON_GET_CLASS
+<SUBSECTION Private>
+g_themed_icon_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gloadableicon</FILE>
+<TITLE>GLoadableIcon</TITLE>
+GLoadableIcon
+GLoadableIconIface
+g_loadable_icon_load
+g_loadable_icon_load_async
+g_loadable_icon_load_finish
+<SUBSECTION Standard>
+G_LOADABLE_ICON
+G_IS_LOADABLE_ICON
+G_TYPE_LOADABLE_ICON
+G_LOADABLE_ICON_GET_IFACE
+<SUBSECTION Private>
+g_loadable_icon_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gfileicon</FILE>
+<TITLE>GFileIcon</TITLE>
+GFileIcon
+g_file_icon_new
+g_file_icon_get_file
+<SUBSECTION Standard>
+GFileIconClass
+G_FILE_ICON
+G_IS_FILE_ICON
+G_TYPE_FILE_ICON
+G_FILE_ICON_CLASS
+G_IS_FILE_ICON_CLASS
+G_FILE_ICON_GET_CLASS
+<SUBSECTION Private>
+g_file_icon_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gemblemedicon</FILE>
+<TITLE>GEmblemedIcon</TITLE>
+GEmblemedIcon
+g_emblemed_icon_new
+g_emblemed_icon_get_icon
+g_emblemed_icon_get_emblems
+g_emblemed_icon_add_emblem
+<SUBSECTION Standard>
+GEmblemedIconClass
+G_EMBLEMED_ICON
+G_EMBLEMED_ICON_CLASS
+G_EMBLEMED_ICON_GET_CLASS
+G_IS_EMBLEMED_ICON
+G_IS_EMBLEMED_ICON_CLASS
+G_TYPE_EMBLEMED_ICON
+
+<SUBSECTION Private>
+g_emblemed_icon_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gemblem</FILE>
+<TITLE>GEmblem</TITLE>
+GEmblem
+GEmblemOrigin
+g_emblem_new
+g_emblem_new_with_origin
+g_emblem_get_icon
+g_emblem_get_origin
+<SUBSECTION Private>
+g_emblem_get_type
+G_EMBLEM
+G_EMBLEM_CLASS
+G_EMBLEM_GET_CLASS
+G_IS_EMBLEM
+G_IS_EMBLEM_CLASS
+G_TYPE_EMBLEM
+</SECTION>
+
+<SECTION>
+<FILE>ginputstream</FILE>
+<TITLE>GInputStream</TITLE>
+GInputStream
+g_input_stream_read
+g_input_stream_read_all
+g_input_stream_skip
+g_input_stream_close
+g_input_stream_read_async
+g_input_stream_read_finish
+g_input_stream_skip_async
+g_input_stream_skip_finish
+g_input_stream_close_async
+g_input_stream_close_finish
+g_input_stream_is_closed
+g_input_stream_has_pending
+g_input_stream_set_pending
+g_input_stream_clear_pending
+<SUBSECTION Standard>
+GInputStreamClass
+G_INPUT_STREAM
+G_IS_INPUT_STREAM
+G_TYPE_INPUT_STREAM
+G_INPUT_STREAM_CLASS
+G_IS_INPUT_STREAM_CLASS
+G_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_input_stream_get_type
+GInputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gfileinputstream</FILE>
+<TITLE>GFileInputStream</TITLE>
+GFileInputStream
+g_file_input_stream_query_info
+g_file_input_stream_query_info_async
+g_file_input_stream_query_info_finish
+<SUBSECTION Standard>
+GFileInputStreamClass
+G_FILE_INPUT_STREAM
+G_IS_FILE_INPUT_STREAM
+G_TYPE_FILE_INPUT_STREAM
+G_FILE_INPUT_STREAM_CLASS
+G_IS_FILE_INPUT_STREAM_CLASS
+G_FILE_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_file_input_stream_get_type
+GFileInputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gfilterinputstream</FILE>
+<TITLE>GFilterInputStream</TITLE>
+GFilterInputStream
+g_filter_input_stream_get_base_stream
+g_filter_input_stream_get_close_base_stream
+g_filter_input_stream_set_close_base_stream
+<SUBSECTION Standard>
+GFilterInputStreamClass
+G_FILTER_INPUT_STREAM
+G_IS_FILTER_INPUT_STREAM
+G_TYPE_FILTER_INPUT_STREAM
+G_FILTER_INPUT_STREAM_CLASS
+G_IS_FILTER_INPUT_STREAM_CLASS
+G_FILTER_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_filter_input_stream_get_type
+GFilterInputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gunixinputstream</FILE>
+<TITLE>GUnixInputStream</TITLE>
+GUnixInputStream
+g_unix_input_stream_new
+g_unix_input_stream_set_close_fd
+g_unix_input_stream_get_close_fd
+g_unix_input_stream_get_fd
+<SUBSECTION Standard>
+GUnixInputStreamClass
+G_UNIX_INPUT_STREAM
+G_IS_UNIX_INPUT_STREAM
+G_TYPE_UNIX_INPUT_STREAM
+G_UNIX_INPUT_STREAM_CLASS
+G_IS_UNIX_INPUT_STREAM_CLASS
+G_UNIX_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_unix_input_stream_get_type
+GUnixInputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gmemoryinputstream</FILE>
+<TITLE>GMemoryInputStream</TITLE>
+GMemoryInputStream
+g_memory_input_stream_new
+g_memory_input_stream_new_from_data
+g_memory_input_stream_add_data
+<SUBSECTION Standard>
+GMemoryInputStreamClass
+G_MEMORY_INPUT_STREAM
+G_IS_MEMORY_INPUT_STREAM
+G_TYPE_MEMORY_INPUT_STREAM
+G_MEMORY_INPUT_STREAM_CLASS
+G_IS_MEMORY_INPUT_STREAM_CLASS
+G_MEMORY_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+GMemoryInputStreamPrivate
+g_memory_input_stream_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gdatainputstream</FILE>
+<TITLE>GDataInputStream</TITLE>
+GDataInputStream
+GDataStreamByteOrder
+GDataStreamNewlineType
+g_data_input_stream_new
+g_data_input_stream_set_byte_order
+g_data_input_stream_get_byte_order
+g_data_input_stream_set_newline_type
+g_data_input_stream_get_newline_type
+g_data_input_stream_read_byte
+g_data_input_stream_read_int16
+g_data_input_stream_read_uint16
+g_data_input_stream_read_int32
+g_data_input_stream_read_uint32
+g_data_input_stream_read_int64
+g_data_input_stream_read_uint64
+g_data_input_stream_read_line
+g_data_input_stream_read_line_async
+g_data_input_stream_read_line_finish
+g_data_input_stream_read_until
+g_data_input_stream_read_until_async
+g_data_input_stream_read_until_finish
+<SUBSECTION Standard>
+GDataInputStreamClass
+G_DATA_INPUT_STREAM
+G_IS_DATA_INPUT_STREAM
+G_TYPE_DATA_INPUT_STREAM
+G_DATA_INPUT_STREAM_CLASS
+G_IS_DATA_INPUT_STREAM_CLASS
+G_DATA_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_data_input_stream_get_type
+GDataInputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gbufferedinputstream</FILE>
+<TITLE>GBufferedInputStream</TITLE>
+GBufferedInputStream
+g_buffered_input_stream_new
+g_buffered_input_stream_new_sized
+g_buffered_input_stream_get_buffer_size
+g_buffered_input_stream_set_buffer_size
+g_buffered_input_stream_get_available
+g_buffered_input_stream_peek_buffer
+g_buffered_input_stream_peek
+g_buffered_input_stream_fill
+g_buffered_input_stream_fill_async
+g_buffered_input_stream_fill_finish
+g_buffered_input_stream_read_byte
+<SUBSECTION Standard>
+GBufferedInputStreamClass
+G_BUFFERED_INPUT_STREAM
+G_IS_BUFFERED_INPUT_STREAM
+G_TYPE_BUFFERED_INPUT_STREAM
+G_BUFFERED_INPUT_STREAM_CLASS
+G_IS_BUFFERED_INPUT_STREAM_CLASS
+G_BUFFERED_INPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_buffered_input_stream_get_type
+GBufferedInputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>goutputstream</FILE>
+<TITLE>GOutputStream</TITLE>
+GOutputStreamSpliceFlags
+GOutputStream
+g_output_stream_write
+g_output_stream_write_all
+g_output_stream_splice
+g_output_stream_flush
+g_output_stream_close
+g_output_stream_write_async
+g_output_stream_write_finish
+g_output_stream_splice_async
+g_output_stream_splice_finish
+g_output_stream_flush_async
+g_output_stream_flush_finish
+g_output_stream_close_async
+g_output_stream_close_finish
+g_output_stream_is_closed
+g_output_stream_has_pending
+g_output_stream_set_pending
+g_output_stream_clear_pending
+<SUBSECTION Standard>
+GOutputStreamClass
+G_OUTPUT_STREAM
+G_IS_OUTPUT_STREAM
+G_TYPE_OUTPUT_STREAM
+G_OUTPUT_STREAM_CLASS
+G_IS_OUTPUT_STREAM_CLASS
+G_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_output_stream_get_type
+GOutputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gfileoutputstream</FILE>
+<TITLE>GFileOutputStream</TITLE>
+GFileOutputStream
+g_file_output_stream_query_info
+g_file_output_stream_query_info_async
+g_file_output_stream_query_info_finish
+g_file_output_stream_get_etag
+<SUBSECTION Standard>
+GFileOutputStreamClass
+G_FILE_OUTPUT_STREAM
+G_IS_FILE_OUTPUT_STREAM
+G_TYPE_FILE_OUTPUT_STREAM
+G_FILE_OUTPUT_STREAM_CLASS
+G_IS_FILE_OUTPUT_STREAM_CLASS
+G_FILE_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_file_output_stream_get_type
+GFileOutputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gfilteroutputstream</FILE>
+<TITLE>GFilterOutputStream</TITLE>
+GFilterOutputStream
+g_filter_output_stream_get_base_stream
+g_filter_output_stream_get_close_base_stream
+g_filter_output_stream_set_close_base_stream
+<SUBSECTION Standard>
+GFilterOutputStreamClass
+G_FILTER_OUTPUT_STREAM
+G_IS_FILTER_OUTPUT_STREAM
+G_TYPE_FILTER_OUTPUT_STREAM
+G_FILTER_OUTPUT_STREAM_CLASS
+G_IS_FILTER_OUTPUT_STREAM_CLASS
+G_FILTER_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_filter_output_stream_get_type
+GFilterOutputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gbufferedoutputstream</FILE>
+<TITLE>GBufferedOutputStream</TITLE>
+GBufferedOutputStream
+g_buffered_output_stream_new
+g_buffered_output_stream_new_sized
+g_buffered_output_stream_get_buffer_size
+g_buffered_output_stream_set_buffer_size
+g_buffered_output_stream_get_auto_grow
+g_buffered_output_stream_set_auto_grow
+<SUBSECTION Standard>
+GBufferedOutputStreamClass
+G_BUFFERED_OUTPUT_STREAM
+G_IS_BUFFERED_OUTPUT_STREAM
+G_TYPE_BUFFERED_OUTPUT_STREAM
+G_BUFFERED_OUTPUT_STREAM_CLASS
+G_IS_BUFFERED_OUTPUT_STREAM_CLASS
+G_BUFFERED_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_buffered_output_stream_get_type
+GBufferedOutputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gmemoryoutputstream</FILE>
+<TITLE>GMemoryOutputStream</TITLE>
+GReallocFunc
+GMemoryOutputStream
+g_memory_output_stream_new
+g_memory_output_stream_get_data
+g_memory_output_stream_get_size
+g_memory_output_stream_get_data_size
+<SUBSECTION Standard>
+GMemoryOutputStreamClass
+G_MEMORY_OUTPUT_STREAM
+G_IS_MEMORY_OUTPUT_STREAM
+G_TYPE_MEMORY_OUTPUT_STREAM
+G_MEMORY_OUTPUT_STREAM_CLASS
+G_IS_MEMORY_OUTPUT_STREAM_CLASS
+G_MEMORY_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_memory_output_stream_get_type
+GMemoryOutputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gdataoutputstream</FILE>
+<TITLE>GDataOutputStream</TITLE>
+GDataOutputStream
+g_data_output_stream_new
+g_data_output_stream_set_byte_order
+g_data_output_stream_get_byte_order
+g_data_output_stream_put_byte
+g_data_output_stream_put_int16
+g_data_output_stream_put_uint16
+g_data_output_stream_put_int32
+g_data_output_stream_put_uint32
+g_data_output_stream_put_int64
+g_data_output_stream_put_uint64
+g_data_output_stream_put_string
+<SUBSECTION Standard>
+GDataOutputStreamClass
+G_DATA_OUTPUT_STREAM
+G_IS_DATA_OUTPUT_STREAM
+G_TYPE_DATA_OUTPUT_STREAM
+G_DATA_OUTPUT_STREAM_CLASS
+G_IS_DATA_OUTPUT_STREAM_CLASS
+G_DATA_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_data_output_stream_get_type
+GDataOutputStreamPrivate
+
+</SECTION>
+
+<SECTION>
+<FILE>gunixoutputstream</FILE>
+<TITLE>GUnixOutputStream</TITLE>
+GUnixOutputStream
+g_unix_output_stream_new
+g_unix_output_stream_set_close_fd
+g_unix_output_stream_get_close_fd
+g_unix_output_stream_get_fd
+<SUBSECTION Standard>
+GUnixOutputStreamClass
+G_UNIX_OUTPUT_STREAM
+G_IS_UNIX_OUTPUT_STREAM
+G_TYPE_UNIX_OUTPUT_STREAM
+G_UNIX_OUTPUT_STREAM_CLASS
+G_IS_UNIX_OUTPUT_STREAM_CLASS
+G_UNIX_OUTPUT_STREAM_GET_CLASS
+<SUBSECTION Private>
+g_unix_output_stream_get_type
+GUnixOutputStreamPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gseekable</FILE>
+<TITLE>GSeekable</TITLE>
+GSeekable
+GSeekableIface
+g_seekable_tell
+g_seekable_can_seek
+g_seekable_seek
+g_seekable_can_truncate
+g_seekable_truncate
+<SUBSECTION Standard>
+G_SEEKABLE
+G_IS_SEEKABLE
+G_TYPE_SEEKABLE
+G_SEEKABLE_GET_IFACE
+<SUBSECTION Private>
+g_seekable_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gvolumemonitor</FILE>
+<TITLE>GVolumeMonitor</TITLE>
+GVolumeMonitor
+G_VOLUME_MONITOR_EXTENSION_POINT_NAME
+g_volume_monitor_get
+g_volume_monitor_get_connected_drives
+g_volume_monitor_get_volumes
+g_volume_monitor_get_mounts
+g_volume_monitor_adopt_orphan_mount
+g_volume_monitor_get_mount_for_uuid
+g_volume_monitor_get_volume_for_uuid
+<SUBSECTION Standard>
+GVolumeMonitorClass
+G_VOLUME_MONITOR
+G_IS_VOLUME_MONITOR
+G_TYPE_VOLUME_MONITOR
+G_VOLUME_MONITOR_CLASS
+G_IS_VOLUME_MONITOR_CLASS
+G_VOLUME_MONITOR_GET_CLASS
+<SUBSECTION Private>
+g_volume_monitor_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gmount</FILE>
+<TITLE>GMount</TITLE>
+GMount
+GMountIface
+g_mount_get_name
+g_mount_get_uuid
+g_mount_get_icon
+g_mount_get_drive
+g_mount_get_root
+g_mount_get_volume
+g_mount_can_unmount
+GMountMountFlags
+GMountUnmountFlags
+g_mount_unmount
+g_mount_unmount_finish
+g_mount_remount
+g_mount_remount_finish
+g_mount_can_eject
+g_mount_eject
+g_mount_eject_finish
+g_mount_guess_content_type
+g_mount_guess_content_type_finish
+g_mount_guess_content_type_sync
+g_mount_is_shadowed
+g_mount_shadow
+g_mount_unshadow
+<SUBSECTION Standard>
+G_IS_MOUNT
+G_MOUNT
+G_MOUNT_GET_IFACE
+G_TYPE_MOUNT
+<SUBSECTION Private>
+g_mount_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gvolume</FILE>
+<TITLE>GVolume</TITLE>
+GVolume
+GVolumeIface
+g_volume_get_name
+g_volume_get_uuid
+g_volume_get_icon
+g_volume_get_drive
+g_volume_get_mount
+g_volume_can_mount
+g_volume_should_automount
+g_volume_get_activation_root
+g_volume_mount
+g_volume_mount_finish
+g_volume_can_eject
+g_volume_eject
+g_volume_eject_finish
+G_VOLUME_IDENTIFIER_KIND_HAL_UDI
+G_VOLUME_IDENTIFIER_KIND_LABEL
+G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT
+G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE
+G_VOLUME_IDENTIFIER_KIND_UUID
+g_volume_enumerate_identifiers
+g_volume_get_identifier
+<SUBSECTION Standard>
+G_VOLUME
+G_IS_VOLUME
+G_TYPE_VOLUME
+G_VOLUME_GET_IFACE
+<SUBSECTION Private>
+g_volume_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gdrive</FILE>
+<TITLE>GDrive</TITLE>
+GDrive
+GDriveIface
+g_drive_get_name
+g_drive_get_icon
+g_drive_has_volumes
+g_drive_get_volumes
+g_drive_can_eject
+g_drive_can_poll_for_media
+g_drive_poll_for_media
+g_drive_poll_for_media_finish
+g_drive_has_media
+g_drive_is_media_check_automatic
+g_drive_is_media_removable
+g_drive_eject
+g_drive_eject_finish
+g_drive_enumerate_identifiers
+g_drive_get_identifier
+<SUBSECTION Standard>
+G_DRIVE
+G_IS_DRIVE
+G_TYPE_DRIVE
+G_DRIVE_GET_IFACE
+<SUBSECTION Private>
+g_drive_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gcancellable</FILE>
+<TITLE>GCancellable</TITLE>
+GCancellable
+g_cancellable_new
+g_cancellable_is_cancelled
+g_cancellable_set_error_if_cancelled
+g_cancellable_get_fd
+g_cancellable_make_pollfd
+g_cancellable_get_current
+g_cancellable_pop_current
+g_cancellable_push_current
+g_cancellable_reset
+g_cancellable_cancel
+<SUBSECTION Standard>
+GCancellableClass
+G_CANCELLABLE
+G_IS_CANCELLABLE
+G_TYPE_CANCELLABLE
+G_CANCELLABLE_CLASS
+G_IS_CANCELLABLE_CLASS
+G_CANCELLABLE_GET_CLASS
+<SUBSECTION Private>
+g_cancellable_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gasyncresult</FILE>
+<TITLE>GAsyncResult</TITLE>
+GAsyncResult
+GAsyncResultIface
+GAsyncReadyCallback
+g_async_result_get_user_data
+g_async_result_get_source_object
+<SUBSECTION Standard>
+G_ASYNC_RESULT
+G_IS_ASYNC_RESULT
+G_TYPE_ASYNC_RESULT
+G_ASYNC_RESULT_GET_IFACE
+<SUBSECTION Private>
+g_async_result_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsimpleasyncresult</FILE>
+<TITLE>GSimpleAsyncResult</TITLE>
+GSimpleAsyncResult
+GSimpleAsyncThreadFunc
+g_simple_async_result_new
+g_simple_async_result_new_error
+g_simple_async_result_new_from_error
+g_simple_async_result_set_op_res_gpointer
+g_simple_async_result_get_op_res_gpointer
+g_simple_async_result_set_op_res_gssize
+g_simple_async_result_get_op_res_gssize
+g_simple_async_result_set_op_res_gboolean
+g_simple_async_result_get_op_res_gboolean
+g_simple_async_result_get_source_tag
+g_simple_async_result_is_valid
+g_simple_async_result_set_handle_cancellation
+g_simple_async_result_complete
+g_simple_async_result_complete_in_idle
+g_simple_async_result_run_in_thread
+g_simple_async_result_set_from_error
+g_simple_async_result_propagate_error
+g_simple_async_result_set_error
+g_simple_async_result_set_error_va
+g_simple_async_report_error_in_idle
+g_simple_async_report_gerror_in_idle
+<SUBSECTION Standard>
+GSimpleAsyncResultClass
+G_SIMPLE_ASYNC_RESULT
+G_IS_SIMPLE_ASYNC_RESULT
+G_TYPE_SIMPLE_ASYNC_RESULT
+G_SIMPLE_ASYNC_RESULT_CLASS
+G_IS_SIMPLE_ASYNC_RESULT_CLASS
+G_SIMPLE_ASYNC_RESULT_GET_CLASS
+<SUBSECTION Private>
+g_simple_async_result_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gioscheduler</FILE>
+<TITLE>GIOScheduler</TITLE>
+GIOSchedulerJob
+GIOSchedulerJobFunc
+g_io_scheduler_push_job
+g_io_scheduler_cancel_all_jobs
+g_io_scheduler_job_send_to_mainloop
+g_io_scheduler_job_send_to_mainloop_async
+</SECTION>
+
+<SECTION>
+<FILE>gioerror</FILE>
+<TITLE>GIOError</TITLE>
+G_IO_ERROR
+GIOErrorEnum
+g_io_error_from_errno
+<SUBSECTION Private>
+g_io_error_quark
+</SECTION>
+
+<SECTION>
+<FILE>gcontenttype</FILE>
+<TITLE>GContentType</TITLE>
+g_content_type_equals
+g_content_type_is_a
+g_content_type_is_unknown
+g_content_type_get_description
+g_content_type_get_mime_type
+g_content_type_get_icon
+g_content_type_can_be_executable
+g_content_type_from_mime_type
+g_content_type_guess
+g_content_type_guess_for_tree
+g_content_types_get_registered
+</SECTION>
+
+<SECTION>
+<FILE>gappinfo</FILE>
+<TITLE>GAppInfo</TITLE>
+GAppInfoCreateFlags
+GAppInfo
+GAppInfoIface
+GAppLaunchContext
+g_app_info_create_from_commandline
+g_app_info_dup
+g_app_info_equal
+g_app_info_get_id
+g_app_info_get_name
+g_app_info_get_description
+g_app_info_get_executable
+g_app_info_get_commandline
+g_app_info_get_icon
+g_app_info_launch
+g_app_info_supports_files
+g_app_info_supports_uris
+g_app_info_launch_uris
+g_app_info_should_show
+g_app_info_can_delete
+g_app_info_delete
+g_app_info_reset_type_associations
+g_app_info_set_as_default_for_type
+g_app_info_set_as_default_for_extension
+g_app_info_add_supports_type
+g_app_info_can_remove_supports_type
+g_app_info_remove_supports_type
+g_app_info_get_all
+g_app_info_get_all_for_type
+g_app_info_get_default_for_type
+g_app_info_get_default_for_uri_scheme
+g_app_info_launch_default_for_uri
+g_app_launch_context_get_display
+g_app_launch_context_get_startup_notify_id
+g_app_launch_context_launch_failed
+g_app_launch_context_new
+<SUBSECTION Standard>
+GAppLaunchContextClass
+G_APP_INFO
+G_IS_APP_INFO
+G_TYPE_APP_INFO
+G_APP_INFO_GET_IFACE
+G_APP_LAUNCH_CONTEXT
+G_APP_LAUNCH_CONTEXT_CLASS
+G_APP_LAUNCH_CONTEXT_GET_CLASS
+G_IS_APP_LAUNCH_CONTEXT
+G_IS_APP_LAUNCH_CONTEXT_CLASS
+G_TYPE_APP_LAUNCH_CONTEXT
+<SUBSECTION Private>
+g_app_info_get_type
+g_app_launch_context_get_type
+GAppLaunchContextPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gmountoperation</FILE>
+<TITLE>GMountOperation</TITLE>
+GAskPasswordFlags
+GPasswordSave
+GMountOperation
+GMountOperationResult
+g_mount_operation_new
+g_mount_operation_get_username
+g_mount_operation_set_username
+g_mount_operation_get_password
+g_mount_operation_set_password
+g_mount_operation_get_anonymous
+g_mount_operation_set_anonymous
+g_mount_operation_get_domain
+g_mount_operation_set_domain
+g_mount_operation_get_password_save
+g_mount_operation_set_password_save
+g_mount_operation_get_choice
+g_mount_operation_set_choice
+g_mount_operation_reply
+<SUBSECTION Standard>
+GMountOperationClass
+G_MOUNT_OPERATION
+G_IS_MOUNT_OPERATION
+G_TYPE_MOUNT_OPERATION
+G_MOUNT_OPERATION_CLASS
+G_IS_MOUNT_OPERATION_CLASS
+G_MOUNT_OPERATION_GET_CLASS
+<SUBSECTION Private>
+g_mount_operation_get_type
+GMountOperationPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gfilenamecompleter</FILE>
+<TITLE>GFilenameCompleter</TITLE>
+GFilenameCompleter
+g_filename_completer_new
+g_filename_completer_get_completion_suffix
+g_filename_completer_get_completions
+g_filename_completer_set_dirs_only
+<SUBSECTION Standard>
+GFilenameCompleterClass
+G_FILENAME_COMPLETER
+G_IS_FILENAME_COMPLETER
+G_TYPE_FILENAME_COMPLETER
+G_FILENAME_COMPLETER_CLASS
+G_IS_FILENAME_COMPLETER_CLASS
+G_FILENAME_COMPLETER_GET_CLASS
+<SUBSECTION Private>
+g_filename_completer_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gunixmounts</FILE>
+<TITLE>Unix Mounts</TITLE>
+GUnixMount
+GUnixMountPoint
+GUnixMountEntry
+GUnixMountMonitor
+g_unix_mount_free
+g_unix_mount_compare
+g_unix_mount_get_mount_path
+g_unix_mount_get_device_path
+g_unix_mount_get_fs_type
+g_unix_mount_is_readonly
+g_unix_mount_is_system_internal
+g_unix_mount_guess_icon
+g_unix_mount_guess_name
+g_unix_mount_guess_can_eject
+g_unix_mount_guess_should_display
+g_unix_mount_point_free
+g_unix_mount_point_compare
+g_unix_mount_point_get_mount_path
+g_unix_mount_point_get_device_path
+g_unix_mount_point_get_fs_type
+g_unix_mount_point_is_readonly
+g_unix_mount_point_is_user_mountable
+g_unix_mount_point_is_loopback
+g_unix_mount_point_guess_icon
+g_unix_mount_point_guess_name
+g_unix_mount_point_guess_can_eject
+g_unix_mount_points_get
+g_unix_mounts_get
+g_unix_mount_at
+g_unix_mounts_changed_since
+g_unix_mount_points_changed_since
+g_unix_mount_monitor_new
+g_unix_mount_monitor_set_rate_limit
+g_unix_is_mount_path_system_internal
+<SUBSECTION Standard>
+GUnixMountClass
+GUnixMountMonitorClass
+G_UNIX_MOUNT_MONITOR
+G_IS_UNIX_MOUNT_MONITOR
+G_TYPE_UNIX_MOUNT_MONITOR
+G_UNIX_MOUNT_MONITOR_CLASS
+G_IS_UNIX_MOUNT_MONITOR_CLASS
+G_IS_UNIX_MOUNT
+G_IS_UNIX_MOUNT_CLASS
+G_UNIX_MOUNT
+G_UNIX_MOUNT_CLASS
+G_TYPE_UNIX_MOUNT
+<SUBSECTION Private>
+g_unix_mount_monitor_get_type
+G_IS_UNIX_VOLUME_MONITOR
+G_IS_UNIX_VOLUME_MONITOR_CLASS
+G_TYPE_UNIX_VOLUME_MONITOR
+G_UNIX_VOLUME_MONITOR
+G_UNIX_VOLUME_MONITOR_CLASS
+GUnixVolume
+GUnixVolumeMonitor
+GUnixVolumeMonitorClass
+</SECTION>
+
+<SECTION>
+<FILE>gdesktopappinfo</FILE>
+<TITLE>Desktop file based GAppInfo</TITLE>
+GDesktopAppInfo
+g_desktop_app_info_new_from_filename
+g_desktop_app_info_new_from_keyfile
+g_desktop_app_info_new
+g_desktop_app_info_get_is_hidden
+g_desktop_app_info_set_desktop_env
+GDesktopAppInfoLookup
+G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME
+g_desktop_app_info_lookup_get_default_for_uri_scheme
+<SUBSECTION Standard>
+GDesktopAppInfoClass
+G_TYPE_DESKTOP_APP_INFO
+G_DESKTOP_APP_INFO
+G_DESKTOP_APP_INFO_CLASS
+G_IS_DESKTOP_APP_INFO
+G_IS_DESKTOP_APP_INFO_CLASS
+G_DESKTOP_APP_INFO_GET_CLASS
+GDesktopAppInfoLookupIface
+G_DESKTOP_APP_INFO_LOOKUP
+G_TYPE_DESKTOP_APP_INFO_LOOKUP
+G_DESKTOP_APP_INFO_LOOKUP_GET_IFACE
+G_IS_DESKTOP_APP_INFO_LOOKUP
+<SUBSECTION Private>
+g_desktop_app_info_get_type
+g_desktop_app_info_lookup_get_type
+</SECTION>
+
+<SECTION>
+<FILE>giomodule</FILE>
+<TITLE>GIOModule</TITLE>
+GIOModule
+g_io_module_new
+g_io_modules_load_all_in_directory
+g_io_module_load
+g_io_module_unload
+<SUBSECTION Standard>
+GIOModuleClass
+G_IO_MODULE
+G_IO_IS_MODULE
+G_IO_TYPE_MODULE
+G_IO_MODULE_CLASS
+G_IO_IS_MODULE_CLASS
+G_IO_MODULE_GET_CLASS
+<SUBSECTION Private>
+g_io_module_get_type
+</SECTION>
+
+<SECTION>
+<FILE>extensionpoints</FILE>
+<TITLE>Extension Points</TITLE>
+GIOExtension
+GIOExtensionPoint
+g_io_extension_get_name
+g_io_extension_get_priority
+g_io_extension_get_type
+g_io_extension_point_get_extension_by_name
+g_io_extension_point_get_extensions
+g_io_extension_point_get_required_type
+g_io_extension_point_implement
+g_io_extension_point_lookup
+g_io_extension_point_register
+g_io_extension_point_set_required_type
+g_io_extension_ref_class
+</SECTION>
+
+
diff --git a/docs/reference/gio/gio.types b/docs/reference/gio/gio.types
new file mode 100644
index 0000000..c73282a
--- /dev/null
+++ b/docs/reference/gio/gio.types
@@ -0,0 +1,64 @@
+g_app_info_create_flags_get_type
+g_app_info_get_type
+g_app_launch_context_get_type
+g_ask_password_flags_get_type
+g_async_result_get_type
+g_buffered_input_stream_get_type
+g_buffered_output_stream_get_type
+g_cancellable_get_type
+g_data_input_stream_get_type
+g_data_output_stream_get_type
+g_data_stream_byte_order_get_type
+g_data_stream_newline_type_get_type
+g_desktop_app_info_get_type
+g_desktop_app_info_lookup_get_type
+g_drive_get_type
+g_emblemed_icon_get_type
+g_emblem_get_type
+g_file_attribute_info_flags_get_type
+g_file_attribute_status_get_type
+g_file_attribute_type_get_type
+g_file_copy_flags_get_type
+g_file_create_flags_get_type
+g_file_enumerator_get_type
+g_file_get_type
+g_file_icon_get_type
+g_file_info_get_type
+g_file_input_stream_get_type
+g_file_monitor_event_get_type
+g_file_monitor_flags_get_type
+g_file_monitor_get_type
+g_filename_completer_get_type
+g_file_output_stream_get_type
+g_file_query_info_flags_get_type
+g_filesystem_preview_type_get_type
+g_file_type_get_type
+g_filter_input_stream_get_type
+g_filter_output_stream_get_type
+g_icon_get_type
+g_input_stream_get_type
+g_io_error_enum_get_type
+g_io_module_get_type
+g_loadable_icon_get_type
+g_local_directory_monitor_get_type
+g_local_file_monitor_get_type
+g_memory_input_stream_get_type
+g_memory_output_stream_get_type
+g_mount_get_type
+g_mount_mount_flags_get_type
+g_mount_operation_get_type
+g_mount_operation_result_get_type
+g_mount_unmount_flags_get_type
+g_native_volume_monitor_get_type
+g_output_stream_get_type
+g_output_stream_splice_flags_get_type
+g_password_save_get_type
+g_seekable_get_type
+g_simple_async_result_get_type
+g_themed_icon_get_type
+g_unix_input_stream_get_type
+g_unix_mount_monitor_get_type
+g_unix_output_stream_get_type
+g_vfs_get_type
+g_volume_get_type
+g_volume_monitor_get_type
diff --git a/docs/reference/gio/gvfs-overview.odg b/docs/reference/gio/gvfs-overview.odg
new file mode 100644
index 0000000..c279348
--- /dev/null
+++ b/docs/reference/gio/gvfs-overview.odg
Binary files differ
diff --git a/docs/reference/gio/gvfs-overview.png b/docs/reference/gio/gvfs-overview.png
new file mode 100644
index 0000000..c93099f
--- /dev/null
+++ b/docs/reference/gio/gvfs-overview.png
Binary files differ
diff --git a/docs/reference/gio/migrating.xml b/docs/reference/gio/migrating.xml
new file mode 100644
index 0000000..89191d3
--- /dev/null
+++ b/docs/reference/gio/migrating.xml
@@ -0,0 +1,162 @@
+<part id="migrating">
+  <title>Migrating to GIO</title>
+
+  <chapter>
+    <title>Migrating from POSIX to GIO</title>
+  
+    <table id="posix-vs-gio">
+      <title>Comparison of POSIX and GIO concepts</title>
+      <tgroup cols="2">
+        <thead>
+          <row><entry>POSIX</entry><entry>GIO</entry></row>
+        </thead>
+        <tbody>
+          <row><entry>char *path</entry><entry>GFile *file</entry></row>
+          <row><entry>struct stat *buf</entry><entry>GFileInfo *info</entry></row>
+          <row><entry>struct statvfs *buf</entry><entry>GFileInfo *info</entry></row>
+          <row><entry morerows="1">int fd</entry><entry>GInputStream *in</entry></row>
+          <row><entry>GOutputStream *out</entry></row>
+          <row><entry>DIR *</entry><entry>GFileEnumerator *enum</entry></row>
+          <row><entry>fstab entry</entry><entry>GUnixMountPoint *mount_point</entry></row>
+          <row><entry>mtab entry</entry><entry>GUnixMountEntry *mount_entry</entry></row>
+        </tbody>
+      </tgroup>
+    </table>  
+
+  </chapter>
+
+  <chapter>
+    <title>Migrating from GnomeVFS to GIO</title>
+
+    <table id="gnome-vfs-vs-gio">
+      <title>Comparison of GnomeVFS and GIO concepts</title>
+      <tgroup cols="2">
+        <thead>
+          <row><entry>GnomeVFS</entry><entry>GIO</entry></row>
+        </thead>
+        <tbody>
+          <row><entry>GnomeVFSURI</entry><entry>GFile</entry></row>
+          <row><entry>GnomeVFSFileInfo</entry><entry>GFileInfo</entry></row>
+          <row><entry>GnomeVFSResult</entry><entry>GError, with G_IO_ERROR values</entry></row>
+          <row><entry>GnomeVFSHandle &amp; GnomeVFSAsyncHandle</entry><entry>GInputStream or GOutputStream</entry></row>
+          <row><entry>GnomeVFSDirectoryHandle</entry><entry>GFileEnumerator</entry></row>
+          <row><entry>mime type</entry><entry>content type</entry></row>
+          <row><entry>GnomeVFSMonitor</entry><entry>GFileMonitor</entry></row>
+          <row><entry>GnomeVFSVolumeMonitor</entry><entry>GVolumeMonitor</entry></row>
+          <row><entry>GnomeVFSVolume</entry><entry>GMount</entry></row>
+          <row><entry>GnomeVFSDrive</entry><entry>GVolume</entry></row>
+          <row><entry>-</entry><entry>GDrive</entry></row>
+          <row><entry>GnomeVFSContext</entry><entry>GCancellable</entry></row>
+          <row><entry>gnome_vfs_async_cancel</entry><entry>g_cancellable_cancel</entry></row>
+        </tbody>
+      </tgroup>
+    </table>
+
+    <section>
+      <title>Trash handling</title>
+
+      <para>
+        The handling of trashed files has been changed in GIO, compared
+        to gnome-vfs. gnome-vfs has a home-grown trash implementation that 
+        predates the freedesktop.org <ulink url="http://www.freedesktop.org/wiki/Specifications/trash-spec">Desktop Trash Can</ulink> specification
+        that is implemented in GIO. The location for storing trashed files 
+        has changed from <filename>$HOME/.Trash</filename> to 
+        <filename>$HOME/.local/share/Trash</filename> (or more correctly
+        <filename>$XDG_DATA_HOME/Trash</filename>), which means that 
+        there is a need for migrating files that have been trashed by 
+        gnome-vfs to the new location.
+      </para>
+      <para>
+        In gnome-vfs, the <filename>trash://</filename> scheme offering a 
+        merged view of all trash directories was implemented in nautilus,
+        and trash-handling applications had to find and monitor all trash 
+        directories themselves. With GIO, the <filename>trash://</filename>
+        implementation has been moved to gvfs and applications can simply
+        monitor that location:
+      </para>
+<informalexample><programlisting>
+static void
+file_changed (GFileMonitor      *file_monitor,
+              GFile             *child,
+              GFile             *other_file,
+              GFileMonitorEvent  event_type,
+              gpointer           user_data)
+{
+  switch (event_type)
+  {
+  case G_FILE_MONITOR_EVENT_DELETED:
+    g_print ("'%s' removed from trash\n", g_file_get_basename (child));
+    break;
+  case G_FILE_MONITOR_EVENT_CREATED:
+    g_print ("'%s' added to trash\n", g_file_get_basename (child));
+    break;
+  default: ;
+  }
+}
+
+static void
+start_monitoring_trash (void)
+{
+  GFile *file;
+  GFileMonitor *monitor;
+
+  file = g_file_new_for_uri ("trash://");
+  monitor = g_file_monitor_directory (file, 0, NULL, NULL);
+  g_object_unref (file);
+
+  g_signal_connect (monitor, "changed", G_CALLBACK (file_changed), NULL);
+
+  /* ... */
+
+}       
+</programlisting></informalexample> 
+      <para>
+        GIO exposes some useful metadata about trashed files. There are
+        trash::orig-path and trash::deletion-date attributes. The 
+        standard::icon attribute of the <filename>trash://</filename> 
+        itself provides a suitable icon for displaying the trash can on 
+        the desktop. If you are using this icon, make sure to monitor
+        this attribute for changes, since the icon may be updated to
+        reflect that state of the trash can.
+      </para>
+      <para>
+	Moving a file to the trash is much simpler with GIO. Instead of
+        using gnome_vfs_find_directory() with %GNOME_VFS_DIRECTORY_KIND_TRASH 
+        to find out where to move the trashed file, just use the g_file_trash()
+        function.
+      </para>
+    </section>
+
+    <section>
+      <title>Operations on multiple files</title>
+
+      <para>
+        gnome-vfs has the dreaded gnome_vfs_xfer_uri_list() function which
+        has tons of options and offers the equivalent of cp, mv, ln, mkdir
+        and rm at the same time. 
+      </para>
+      <para>
+        GIO offers a much simpler I/O scheduler functionality instead, that
+        lets you schedule a function to be called in a separate thread, or
+        if threads are not available, as an idle in the mainloop.
+        See g_io_scheduler_push_job(). 
+      </para>
+
+    </section>
+
+    <section>
+      <title>Mime monitoring</title>
+
+      <para>
+        gnome-vfs offered a way to monitor the association between mime types
+        and default handlers for changes, with the #GnomeVFSMIMEMonitor object.
+        GIO does not offer a replacement for this functionality at this time,
+        since we have not found a compelling use case where 
+        #GnomeVFSMIMEMonitor was used. If you think you have such a use
+        case, please report it at 
+        <ulink url="http://bugzilla.gnome.org">bugzilla.gnome.org</ulink>.
+      </para>
+    </section>
+  </chapter>
+
+</part>
diff --git a/docs/reference/gio/overview.xml b/docs/reference/gio/overview.xml
new file mode 100644
index 0000000..a55c463
--- /dev/null
+++ b/docs/reference/gio/overview.xml
@@ -0,0 +1,324 @@
+<part>
+  <title>GIO Overview</title>
+
+  <chapter> 
+    <title>Introduction</title>
+
+  <para>
+    GIO is striving to provide a modern, easy-to-use VFS API that sits
+    at the right level in the library stack. The goal is to overcome the
+    shortcomings of GnomeVFS and provide an API that is so good that
+    developers prefer it over raw POSIX calls. Among other things
+    that means using GObject. It also means not cloning the POSIX 
+    API, but providing higher-level, document-centric interfaces.
+  </para>
+
+  <para>
+    The abstract file system model of GIO consists of a number of
+    interfaces and base classes for I/O and files:
+    <variablelist>
+       <varlistentry>
+         <term>GFile</term>
+         <listitem><para>reference to a file</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GFileInfo</term>
+         <listitem><para>information about a file or filesystem</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GFileEnumerator</term>
+         <listitem><para>list files in directories</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GDrive</term>
+         <listitem><para>represents a drive</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GVolume</term>
+         <listitem><para>represents a file system in an abstract way</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GMount</term>
+         <listitem><para>represents a mounted file system</para></listitem>
+       </varlistentry>
+    </variablelist>
+    Then there is a number of stream classes, similar to the input and
+    output stream hierarchies that can be found in frameworks like Java:
+    <variablelist>
+       <varlistentry>
+         <term>GInputStream</term>
+         <listitem><para>read data</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GOutputStream</term>
+         <listitem><para>write data</para></listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>GSeekable</term>
+         <listitem><para>interface optionally implemented by streams to support seeking</para></listitem>
+       </varlistentry>
+    </variablelist>
+    There are interfaces related to applications and the types
+    of files they handle:
+    <variablelist>
+       <varlistentry>
+          <term>GAppInfo</term>
+          <listitem><para>information about an installed application</para></listitem>
+       </varlistentry>
+       <varlistentry>
+          <term>GIcon</term>
+          <listitem><para>abstract type for file and application icons</para></listitem>
+       </varlistentry>
+    </variablelist>
+    Beyond these, GIO provides facilities for file monitoring,
+    asynchronous I/O and filename completion. In addition to the 
+    interfaces, GIO provides implementations for the local case. 
+    Implementations for various network file systems are provided 
+    by the GVFS package as loadable modules.
+  </para>
+
+  <para>
+    Other design choices which consciously break with the GnomeVFS
+    design are to move backends out-of-process, which minimizes the
+    dependency bloat and makes the whole system more robust. The backends
+    are not included in GIO, but in the separate GVFS package. The GVFS 
+    package also contains the GVFS daemon, which spawn further mount 
+    daemons for each individual connection.
+  </para>
+
+  <figure id="gvfs-overview">
+    <title>GIO in the GTK+ library stack</title>
+    <graphic fileref="gvfs-overview.png" format="PNG"></graphic>
+  </figure>
+
+  <para>
+    The GIO model of I/O is stateful: if an application establishes e.g. 
+    a SFTP connection to a server, it becomes available to all applications 
+    in the session; the user does not have to enter his password over 
+    and over again.
+  </para>
+  <para>
+    One of the big advantages of putting the VFS in the GLib layer 
+    is that GTK+ can directly use it, e.g. in the filechooser.
+  </para>
+  </chapter>
+
+  <chapter>
+    <title>Compiling GIO applications</title>
+
+    <para>
+      GIO comes with a <filename>gio-2.0.pc</filename> file that you
+      should use together with <literal>pkg-config</literal> to obtain
+      the necessary information about header files and libraries. See
+      the <literal>pkg-config</literal> man page or the GLib documentation 
+      for more information on how to use <literal>pkg-config</literal> 
+      to compile your application.
+    </para>
+
+    <para>
+      If you are using GIO on UNIX-like systems, you may want to use
+      UNIX-specific GIO interfaces such as #GUnixInputStream, 
+      #GUnixOutputStream, #GUnixMount or #GDesktopAppInfo. 
+      To do so, use the <filename>gio-unix-2.0.pc</filename> file 
+      instead of <filename>gio-2.0.pc</filename>
+    </para>
+  </chapter>
+
+  <chapter>
+    <title>Running GIO applications</title>
+
+    <para>
+      GIO inspects a few of environment variables in addition to the
+      ones used by GLib.
+    </para>
+
+    <formalpara>
+      <title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title>
+
+      <para>
+        GIO uses these environment variables to locate MIME information. 
+        For more information, see the <ulink url="http://freedesktop.org/Standards/shared-mime-info-spec">Shared MIME-info Database</ulink>
+        and the <ulink url="http://freedesktop.org/Standards/basedir-spec">Base Directory Specification</ulink>.
+      </para>
+    </formalpara>
+
+    <formalpara>
+      <title><envar>GVFS_DISABLE_FUSE</envar></title>
+
+      <para>
+        This variable can be set to keep #Gvfs from starting the fuse backend,
+        which may be unwanted or unnecessary in certain situations.
+      </para>
+    </formalpara>
+
+    <para>
+      The following environment variables are only useful for debugging
+      GIO itself or modules that it loads. They should not be set in a
+      production environment.
+    </para>
+    <formalpara>
+      <title><envar>GIO_USE_VFS</envar></title>
+
+      <para>
+        This environment variable can be set to the name of a #GVfs 
+        implementation to override the default for debugging purposes.
+        The #GVfs implementation for local files that is included in GIO 
+        has the name "local", the implementation in the gvfs module has 
+        the name "gvfs". 
+      </para>
+    </formalpara>
+
+    <formalpara>
+      <title><envar>GIO_USE_VOLUME_MONITOR</envar></title>
+        
+      <para>
+        This variable can be set to the name of a #GVolumeMonitor 
+        implementation to override the default for debugging purposes.
+        The #GVolumeMonitor implementation for local files that is included
+        in GIO has the name "unix", the hal-based implementation in the
+        gvfs module has the name "hal".
+      </para>
+    </formalpara>
+
+    <formalpara>
+      <title><envar>GIO_USE_URI_ASSOCIATION</envar></title>
+
+      <para>
+        This variable can be set to the name of a #GDesktopAppInfoLookup
+        implementation to override the default for debugging purposes.
+        GIO does not include a #GDesktopAppInfoLookup implementation,
+        the GConf-based implementation in the gvfs module has the name
+        "gconf".  
+      </para>
+    </formalpara>
+
+    <formalpara>
+      <title><envar>GVFS_INOTIFY_DIAG</envar></title>
+
+      <para>
+        When this environment variable is set and GIO has been built
+        with inotify support, a dump of diagnostic inotify information 
+        will be written every 20 seconds to a file named
+        <filename>/tmp/gvfsdid.<replaceable>pid</replaceable></filename>.
+      </para>
+    </formalpara>
+
+    <formalpara>
+      <title><envar>GIO_EXTRA_MODULES</envar></title>
+
+      <para>
+	When this environment variable is set to a path, or a set of 
+	paths separated by a colon, GIO will attempt to load
+	modules from within the path.
+      </para>
+    </formalpara>
+
+  </chapter>
+
+  <chapter id="extending-gio">
+    <title>Extending GIO</title>
+
+    <para>
+      A lot of the functionality that is accessible through GIO
+      is implemented in loadable modules, and modules provide a convenient
+      way to extend GIO. In addition to the #GIOModule API which supports 
+      writing such modules, GIO has a mechanism to define extension points,
+      and register implementations thereof, see #GIOExtensionPoint.
+    </para>
+    <para>
+      The following extension points are currently defined by GIO:
+    </para>
+
+    <formalpara>
+       <title>G_VFS_EXTENSION_POINT_NAME</title>
+
+       <para>
+          Allows to override the functionality of the #GVfs class.
+          Implementations of this extension point must be derived from #GVfs.
+          GIO uses the implementation with the highest priority that is active,
+          see g_vfs_is_active().
+       </para>
+       <para>
+          GIO implements this extension point for local files, gvfs contains
+          an implementation that supports all the backends in gvfs.
+       </para>
+   </formalpara>
+
+   <formalpara>
+      <title>G_VOLUME_MONITOR_EXTENSION_POINT_NAME</title>
+
+      <para>
+         Allows to add more volume monitors.
+         Implementations of this extension point must be derived from
+         #GVolumeMonitor. GIO uses all registered extensions.
+      </para>
+      <para>
+        gvfs contains an implementation that works together with the #GVfs
+        implementation in gvfs.
+      </para>
+   </formalpara>
+
+   <formalpara>
+      <title>G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME</title>
+
+      <para>
+         Allows to override the 'native' volume monitor.
+         Implementations of this extension point must be derived from
+         #GNativeVolumeMonitor. GIO uses the implementation with
+         the highest priority that is supported, as determined by the
+         is_supported() vfunc in #GVolumeMonitorClass.
+      </para>
+      <para>
+         GIO implements this extension point for local mounts, 
+         gvfs contains a hal-based implementation. 
+      </para>
+   </formalpara>
+
+   <formalpara>
+      <title>G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME</title>
+
+      <para>
+        Allows to override the file monitor implementation for 
+        local files. Implementations of this extension point must 
+        be derived from #GLocalFileMonitor. GIO uses the implementation 
+        with the highest priority that is supported, as determined by the
+        is_supported() vfunc in #GLocalFileMonitorClass.
+      </para>
+      <para>
+        GIO uses this extension point internally, to switch between
+        its fam-based and inotify-based file monitoring implementations.
+      </para>
+   </formalpara>
+
+   <formalpara>
+      <title>G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME</title>
+
+      <para>
+        Allows to override the directory monitor implementation for 
+        local files. Implementations of this extension point must be 
+        derived from #GLocalDirectoryMonitor. GIO uses the implementation
+        with the highest priority that is supported, as determined by the
+        is_supported() vfunc in #GLocalDirectoryMonitorClass.
+      </para>
+      <para>
+        GIO uses this extension point internally, to switch between
+        its fam-based and inotify-based directory monitoring implementations.
+      </para>
+   </formalpara>
+
+   <formalpara>
+      <title>G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME</title>
+
+      <para>
+        Unix-only. Allows to provide a way to associate default handlers
+        with URI schemes. Implementations of this extension point must 
+        implement the #GDesktopAppInfoLookup interface. GIO uses the 
+        implementation with the highest priority.
+      </para>
+      <para>
+        gvfs contains a GConf-based implementation that uses the 
+        same GConf keys as gnome-vfs.
+      </para>
+   </formalpara>
+  </chapter>
+</part>
diff --git a/docs/reference/gio/version.xml.in b/docs/reference/gio/version.xml.in
new file mode 100644
index 0000000..d78bda9
--- /dev/null
+++ b/docs/reference/gio/version.xml.in
@@ -0,0 +1 @@
+@VERSION@
diff --git a/docs/reference/glib/Makefile.am b/docs/reference/glib/Makefile.am
new file mode 100644
index 0000000..c7b9feb
--- /dev/null
+++ b/docs/reference/glib/Makefile.am
@@ -0,0 +1,104 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+AUTOMAKE_OPTIONS = 1.6
+
+# The name of the module.
+DOC_MODULE=glib
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=glib-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=../../..
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="G_DISABLE_DEPRECATED" --ignore-decorators="GLIB_VAR"
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=g
+
+# Used for dependencies
+HFILE_GLOB=$(top_srcdir)/glib/*.h $(top_srcdir)/gmodule/*.h
+CFILE_GLOB=$(top_srcdir)/glib/*.c $(top_srcdir)/gmodule/*.c
+
+# Headers to ignore
+IGNORE_HFILES=			\
+	build			\
+	gobject 		\
+	gio			\
+	config.h 		\
+	gdatasetprivate.h	\
+	glibintl.h		\
+	gbsearcharray.h		\
+	gmoduleconf.h		\
+	gunibreak.h		\
+	gunicomp.h		\
+	gunidecomp.h		\
+	gunichartables.h	\
+	glibconfig-sysdefs.h	\
+	gdebug.h		\
+	gprintfint.h		\
+	galias.h		\
+	gmirroringtable.h	\
+	gscripttable.h		\
+	glib-mirroring-tab	\
+	gnulib			\
+	pcre			\
+	update-pcre
+
+# Images to copy into HTML directory
+HTML_IMAGES =  				\
+	file-name-encodings.png		\
+	mainloop-states.gif
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE)
+content_files =				\
+	cross.sgml			\
+	running.sgml			\
+	building.sgml			\
+	changes.sgml			\
+	compiling.sgml			\
+	resources.sgml			\
+	regex-syntax.sgml		\
+	version.xml			\
+	glib-gettextize.xml		\
+	gtester.xml			\
+	gtester-report.xml
+
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS=
+
+# include common portion ...
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+EXTRA_DIST +=				\
+	file-name-encodings.png		\
+	file-name-encodings.sxd		\
+	mainloop-states.fig		\
+	mainloop-states.png		\
+	mainloop-states.eps		\
+	version.xml.in
+
+########################################################################
+
+man_MANS =		  	\
+	glib-gettextize.1 	\
+	gtester.1		\
+	gtester-report.1
+if ENABLE_MAN
+
+%.1 : %.xml 
+	@XSLTPROC@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+
+endif
+
+BUILT_EXTRA_DIST = $(man_MANS)
+
+dist-hook-local: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)';				\
+	for f in $$files; do					\
+	  if test -f $$f; then d=.; else d=$(srcdir); fi;	\
+	  cp $$d/$$f $(distdir) || exit 1; done
+
diff --git a/docs/reference/glib/building.sgml b/docs/reference/glib/building.sgml
new file mode 100644
index 0000000..0274f3d
--- /dev/null
+++ b/docs/reference/glib/building.sgml
@@ -0,0 +1,560 @@
+<refentry id="glib-building" revision="16 Jan 2002">
+<refmeta>
+<refentrytitle>Compiling the GLib package</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>GLib Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Compiling the GLib Package</refname>
+<refpurpose>
+How to compile GLib itself
+</refpurpose>
+  </refnamediv>
+
+    <refsect1 id="building">
+      <title>Building the Library on UNIX</title>
+      <para>
+        On UNIX, GLib uses the standard GNU build system,
+        using <application>autoconf</application> for package
+        configuration and resolving portability issues,
+        <application>automake</application> for building makefiles
+        that comply with the GNU Coding Standards, and
+        <application>libtool</application> for building shared
+        libraries on multiple platforms.  The normal sequence for
+        compiling and installing the GLib library is thus:
+
+        <literallayout>
+          <userinput>./configure</userinput>
+          <userinput>make</userinput>
+          <userinput>make install</userinput>
+        </literallayout>
+      </para>
+
+      <para>
+        The standard options provided by <application>GNU
+        autoconf</application> may be passed to the
+        <command>configure</command> script.  Please see the
+        <application>autoconf</application> documentation or run
+        <command>./configure --help</command> for information about
+        the standard options.
+      </para>
+      <para>
+        The GTK+ documentation contains 
+        <ulink url="../gtk/gtk-building.html">further details</ulink> 
+	about the build process and ways to influence it. 
+      </para>
+    </refsect1>
+    <refsect1 id="dependencies">
+      <title>Dependencies</title>
+      <para>
+        Before you can compile the GLib library, you need to have
+        various other tools and libraries installed on your
+        system. The two tools needed during the build process (as
+        differentiated from the tools used in when creating GLib
+        mentioned above such as <application>autoconf</application>)
+        are <command>pkg-config</command> and GNU make.
+      </para>
+      <itemizedlist>
+        <listitem>
+   	  <para>
+	    <ulink
+	    url="http://www.freedesktop.org/software/pkgconfig/">pkg-config</ulink>
+	    is a tool for tracking the compilation flags needed for
+	    libraries that are used by the GLib library. (For each
+	    library, a small <literal>.pc</literal> text file is 
+            installed in a standard location that contains the compilation 
+            flags needed for that library along with version number 
+            information.)  The version of <command>pkg-config</command> 
+            needed to build GLib is mirrored in the 
+	    <filename>dependencies</filename> directory
+	    on the <ulink url="ftp://ftp.gtk.org/pub/gtk/v2.2/">GTK+ FTP
+	    site.</ulink>
+	  </para>
+        </listitem>
+        <listitem>
+	  <para>
+	    The GTK+ makefiles will mostly work with different versions
+	    of <command>make</command>, however, there tends to be
+	    a few incompatibilities, so the GTK+ team recommends
+	    installing <ulink url="http://www.gnu.org/software/make">GNU
+	    make</ulink> if you don't already have it on your system
+	    and using it. (It may be called <command>gmake</command>
+	    rather than <command>make</command>.)
+	  </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        GLib depends on a number of other libraries.
+      </para>
+      <itemizedlist>
+        <listitem>
+	  <para>
+	  The <ulink url="http://www.gnu.org/software/libiconv/">GNU
+	  libiconv library</ulink> is needed to build GLib if your
+	  system doesn't have the <function>iconv()</function>
+	  function for doing conversion between character
+	  encodings. Most modern systems should have
+	  <function>iconv()</function>, however many older systems lack 
+	  an <function>iconv()</function> implementation. On such systems, 
+	  you must install the libiconv library. This can be found at:
+	  <ulink url="http://www.gnu.org/software/libiconv">http://www.gnu.org/software/libiconv</ulink>.	  
+	</para>
+        <para>
+	  If your system has an <function>iconv()</function> implementation but
+	  you want to use libiconv instead, you can pass the
+	  --with-libiconv option to configure. This forces
+	  libiconv to be used.  
+	</para>
+        <para>
+	  Note that if you have libiconv installed in your default include
+	  search path (for instance, in <filename>/usr/local/</filename>), but
+	  don't enable it, you will get an error while compiling GLib because
+	  the <filename>iconv.h</filename> that libiconv installs hides the
+	  system iconv. 
+	</para>
+	<para>
+	  If you are using the native iconv implementation on Solaris
+	  instead of libiconv, you'll need to make sure that you have 
+	  the converters between locale encodings and UTF-8 installed.
+	  At a minimum you'll need the SUNWuiu8 package. You probably
+	  should also install the SUNWciu8, SUNWhiu8, SUNWjiu8, and
+	  SUNWkiu8 packages.
+	</para>
+	<para>
+	  The native iconv on Compaq Tru64 doesn't contain support for
+	  UTF-8, so you'll need to use GNU libiconv instead. (When
+	  using GNU libiconv for GLib, you'll need to use GNU libiconv
+	  for GNU gettext as well.) This probably applies to related
+	  operating systems as well.
+	</para>
+      </listitem>
+      <listitem>
+	<para>
+	  The libintl library from the <ulink
+	  url="http://www.gnu.org/software/gettext">GNU gettext
+	  package</ulink> is needed if your system doesn't have the
+	  <function>gettext()</function> functionality for handling
+	  message translation databases.
+	</para>
+      </listitem>
+      <listitem>
+	<para>
+	  A thread implementation is needed, unless you want to compile GLib
+	  without thread support, which is not recommended. The thread support
+	  in GLib can be based upon several native thread implementations,
+	  e.g. POSIX threads, DCE threads or Solaris threads. 
+	</para>
+      </listitem>
+      <listitem>
+	<para>
+	  GRegex uses the <ulink url="http://www.pcre.org/">PCRE library</ulink>
+	  for regular expression matching. The default is to use the internal
+	  version of PCRE that is patched to use GLib for memory management
+	  and Unicode handling. If you prefer to use the system-supplied PCRE
+	  library  you can pass the --with-pcre=system option to configure,
+	  but it is not recommended.
+	</para>
+      </listitem>
+      <listitem>
+        <para>
+          The optional extended attribute support in GIO requires the 
+          getxattr() family of functions that may be provided by glibc or 
+          by the standalone libattr library. To build GLib without extended 
+          attribute support, use the <option>--disable-xattr</option> 
+          configure option.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          The optional SELinux support in GIO requires libselinux. To build 
+          GLib without SELinux support, use the 
+          <option>--disable-selinux</option> configure option.
+        </para>
+      </listitem>
+    </itemizedlist>
+
+    </refsect1>
+    <refsect1 id="extra-configuration-options">
+      <title>Extra Configuration Options</title>
+
+      <para>
+        In addition to the normal options, the
+        <command>configure</command> script in the GLib
+        library supports these additional arguments:
+
+        <cmdsynopsis>
+          <command>configure</command>
+          <group>
+            <arg>--enable-debug=[no|minimum|yes]</arg>
+          </group>
+          <group>
+            <arg>--disable-gc-friendly</arg>
+            <arg>--enable-gc-friendly</arg>
+          </group>
+          <group>
+            <arg>--disable-mem-pools</arg>
+            <arg>--enable-mem-pools</arg>
+          </group>
+          <group>
+            <arg>--disable-threads</arg>
+            <arg>--enable-threads</arg>
+          </group>
+          <group>
+            <arg>--with-threads=[none|posix|dce|win32]</arg>
+          </group>
+          <group>
+            <arg>--disable-regex</arg>
+            <arg>--enable-regex</arg>
+          </group>
+          <group>
+            <arg>--with-pcre=[internal|system]</arg>
+          </group>
+	  <group>
+             <arg>--disable-included-printf</arg>
+             <arg>--enable-included-printf</arg>
+          </group>
+	  <group>
+             <arg>--disable-visibility</arg>
+             <arg>--enable-visibility</arg>
+          </group>
+          <group>
+            <arg>--disable-gtk-doc</arg>
+            <arg>--enable-gtk-doc</arg>
+          </group>
+          <group>
+            <arg>--disable-man</arg>
+            <arg>--enable-man</arg>
+          </group>
+          <group>
+            <arg>--disable-xattr</arg>
+            <arg>--enable-xattr</arg>
+          </group>
+          <group>
+            <arg>--disable-selinux</arg>
+            <arg>--enable-selinux</arg>
+          </group>
+        </cmdsynopsis>
+      </para>
+
+      <formalpara>
+        <title><systemitem>--enable-debug</systemitem></title>
+
+        <para>
+         Turns on various amounts of debugging support. Setting this to 'no'
+         disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and
+         all cast checks between different object types. Setting it to 'minimum'         disables only cast checks. Setting it to 'yes' enables
+         <link linkend="GLIB-Debug-Options">runtime debugging</link>.
+         The default is 'minimum'.
+         Note that 'no' is fast, but dangerous as it tends to destabilize
+         even mostly bug-free software by changing the effect of many bugs
+         from simple warnings into fatal crashes. Thus
+         <option>--enable-debug=no</option> should <emphasis>not</emphasis>
+         be used for stable releases of GLib.
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-gc-friendly</systemitem> and
+          <systemitem>--enable-gc-friendly</systemitem></title>
+
+        <para>
+	  By default, and with <systemitem>--disable-gc-friendly</systemitem>
+	  as well, Glib does not clear the memory for certain objects before they
+	  are freed.  For example, Glib may decide to recycle GList nodes by
+	  putting them in a free list.  However, memory profiling and debugging tools like <ulink
+	  url="http://www.valgrind.org">Valgrind</ulink> work better if an
+	  application does not keep dangling pointers to freed memory (even
+	  though these pointers are no longer dereferenced), or invalid pointers inside
+	  uninitialized memory.   The
+	  <systemitem>--enable-gc-friendly</systemitem> option makes Glib clear
+	  memory in these situations:
+        </para>
+      </formalpara>
+
+      <itemizedlist>
+        <listitem>
+	  <para>
+	    When shrinking a GArray, Glib will clear the memory no longer
+	    available in the array:  shrink an array from 10 bytes to 7, and
+	    the last 3 bytes will be cleared.  This includes removals of single and multiple elements.
+	  </para>
+        </listitem>
+        <listitem>
+	  <para>
+	  </para>
+        </listitem>
+        <listitem>
+	  <para>
+	    When growing a GArray, Glib will clear the new chunk of memory.  
+	    Grow an array from 7 bytes to 10 bytes, and the last 3 bytes will be cleared.
+	  </para>
+        </listitem>
+        <listitem>
+	  <para>
+	    The above applies to GPtrArray as well.
+	  </para>
+        </listitem>
+        <listitem>
+	  <para>
+	    When freeing a node from a GHashTable, Glib will first clear
+	    the node, which used to have pointers to the key and the value 
+	    stored at that node.
+	  </para>
+        </listitem>
+        <listitem>
+	  <para>
+	    When destroying or removing a GTree node, Glib will clear the node,
+	    which used to have pointers to the node's value, and the left and right subnodes.
+	  </para>
+        </listitem>
+      </itemizedlist>
+
+      <para>
+        Since clearing the memory has a cost,
+        <systemitem>--disable-gc-friendly</systemitem> is the default.
+      </para>
+
+      <formalpara>
+        <title><systemitem>--disable-mem-pools</systemitem> and
+          <systemitem>--enable-mem-pools</systemitem></title>
+
+      <para>
+        Many small chunks of memory are often allocated via collective pools
+        in GLib and are cached after release to speed up reallocations.
+        For sparse memory systems this behaviour is often inferior, so
+        memory pools can be disabled to avoid excessive caching and force
+        atomic maintenance of chunks through the <function>g_malloc()</function>
+        and <function>g_free()</function> functions. Code currently affected by 
+        this:
+        <itemizedlist>
+        <listitem>
+        <para>
+         <structname>GList</structname>, <structname>GSList</structname>,
+         <structname>GNode</structname>, <structname>GHash</structname> 
+         allocations. The functions g_list_push_allocator(), 
+         g_list_pop_allocator(), g_slist_push_allocator(), 
+         g_slist_pop_allocator(), g_node_push_allocator() and 
+         g_node_pop_allocator() are not available
+        </para>
+        </listitem>
+        <listitem>
+        <para>
+        <structname>GMemChunk</structname>s become basically non-effective
+        </para>
+        </listitem>
+        <listitem>
+        <para>
+         <structname>GSignal</structname> disables all caching (potentially 
+         very slow)
+        </para>
+        </listitem>
+        <listitem>
+        <para>
+         <structname>GType</structname> doesn't honour the 
+         <structname>GTypeInfo</structname> 
+         <structfield>n_preallocs</structfield> field anymore
+        </para>
+        </listitem>
+        <listitem>
+        <para>
+         the <structname>GBSearchArray</structname> flag 
+         <literal>G_BSEARCH_ALIGN_POWER2</literal> becomes non-functional
+        </para>
+        </listitem>
+        </itemizedlist>
+      </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-threads</systemitem> and
+          <systemitem>--enable-threads</systemitem></title>
+
+        <para>
+           Do not compile GLib to be multi thread safe. GLib
+           will be slightly faster then. This is however not
+           recommended, as many programs rely on GLib being
+           multi thread safe.
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--with-threads</systemitem></title>
+
+        <para>
+          Specify a thread implementation to use.
+          <itemizedlist>
+              <listitem><para>
+                'posix' and 'dce' can be used interchangeable
+                to mean the different versions of Posix
+                threads. configure tries to find out, which
+                one is installed.
+              </para></listitem>
+
+              <listitem><para>
+                'none' means that GLib will be thread safe,
+                but does not have a default thread
+                implementation. This has to be supplied to
+                <function>g_thread_init()</function> by the programmer.
+              </para></listitem>
+        </itemizedlist>
+
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-regex</systemitem> and
+          <systemitem>--enable-regex</systemitem></title>
+
+        <para>
+           Do not compile GLib with regular expression support.
+           GLib will be smaller because it will not need the
+           PCRE library. This is however not recommended, as
+           programs may need GRegex.
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--with-pcre</systemitem></title>
+
+        <para>
+          Specify whether to use the internal or the system-supplied
+          PCRE library.
+          <itemizedlist>
+            <listitem><para>
+              'internal' means that GRegex will be compiled to use
+              the internal PCRE library.
+            </para></listitem>
+
+            <listitem><para>
+              'system' means that GRegex will be compiled to use
+              the system-supplied PCRE library.
+            </para></listitem>
+          </itemizedlist>
+          Using the internal PCRE is the preferred solution:
+          <itemizedlist>
+            <listitem>
+              <para>
+                System-supplied PCRE has a separated copy of the big tables
+                used for Unicode handling.
+              </para>
+            </listitem>
+            <listitem>
+              <para>
+                Some systems have PCRE libraries compiled without some needed
+                features, such as UTF-8 and Unicode support.
+              </para>
+            </listitem>
+            <listitem>
+              <para>
+                PCRE uses some global variables for memory management and
+                other features. In the rare case of a program using both
+                GRegex and PCRE (maybe indirectly through a library),
+                this variables could lead to problems when they are modified.
+              </para>
+            </listitem>
+          </itemizedlist>
+        </para>
+      </formalpara>
+
+      <formalpara>
+         <title><systemitem>--disable-included-printf</systemitem> and
+           <systemitem>--enable-included-printf</systemitem></title>
+
+        <para>
+          By default the <command>configure</command> script will try
+          to auto-detect whether the C library provides a suitable set
+	  of <function>printf()</function> functions. In detail, 
+	  <command>configure</command> checks that the semantics of
+          <function>snprintf()</function> are as specified by C99 and
+	  that positional parameters as specified in the Single Unix
+	  Specification are supported. If this not the case, GLib will
+	  include an implementation of the <function>printf()</function> 
+          family.
+          These options can be used to explicitly control whether
+          an implementation fo the <function>printf()</function> family
+          should be included or not.
+        </para>
+      </formalpara>
+
+      <formalpara>
+         <title><systemitem>--disable-visibility</systemitem> and
+           <systemitem>--enable-visibility</systemitem></title>
+
+        <para>
+          By default, GLib uses ELF visibility attributes to optimize
+          PLT table entries if the compiler supports ELF visibility
+          attributes. A side-effect of the way in which this is currently
+          implemented is that any  header change forces a full 
+          recompilation, and missing includes may go unnoticed. 
+          Therefore, it makes sense to turn this feature off while
+          doing GLib development, even if the compiler supports ELF
+          visibility attributes. The <option>--disable-visibility</option> 
+          option allows to do that.
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-gtk-doc</systemitem> and
+          <systemitem>--enable-gtk-doc</systemitem></title>
+
+        <para>
+          By default the <command>configure</command> script will try
+          to auto-detect whether the
+          <application>gtk-doc</application> package is installed.  If
+          it is, then it will use it to extract and build the
+          documentation for the GLib library.  These options
+          can be used to explicitly control whether
+          <application>gtk-doc</application> should be
+          used or not.  If it is not used, the distributed,
+          pre-generated HTML files will be installed instead of
+          building them on your machine.
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-man</systemitem> and
+          <systemitem>--enable-man</systemitem></title>
+
+        <para>
+          By default the <command>configure</command> script will try
+          to auto-detect whether <application>xsltproc</application> 
+          and the necessary Docbook stylesheets are installed.  If
+          they are, then it will use them to rebuild the included
+          man pages from the XML sources.  These options can be used 
+          to explicitly control whether man pages should be rebuilt
+          used or not. The distribution includes pre-generated man 
+          pages.
+        </para>
+      </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-xattr</systemitem> and
+          <systemitem>--enable-xattr</systemitem></title>
+
+        <para>
+          By default the <command>configure</command> script will try
+          to auto-detect whether the getxattr() family of functions
+          is available. If it is, then extended attribute support
+          will be included in GIO. These options can be used to
+          explicitly control whether extended attribute support 
+          should be included or not. getxattr() and friends can
+          be provided by glibc or by the standalone libattr library.
+        </para>
+     </formalpara>
+
+      <formalpara>
+        <title><systemitem>--disable-selinux</systemitem> and
+          <systemitem>--enable-selinux</systemitem></title>
+
+        <para>
+          By default the <command>configure</command> script will
+          auto-detect if libselinux is available and include
+          SELinux support in GIO if it is. These options can be
+          used to explicitly control whether SELinxu support should
+	  be included.
+        </para>
+     </formalpara>
+   </refsect1>
+
+</refentry>
diff --git a/docs/reference/glib/changes.sgml b/docs/reference/glib/changes.sgml
new file mode 100644
index 0000000..1dbb74a
--- /dev/null
+++ b/docs/reference/glib/changes.sgml
@@ -0,0 +1,178 @@
+<refentry id="glib-changes" revision="17 Jan 2002">
+<refmeta>
+<refentrytitle>Changes to GLib</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>Changes to GLib</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Changes to GLib</refname>
+<refpurpose>
+Incompatible changes made between successing versions of GLib
+</refpurpose>
+</refnamediv>
+
+
+<refsect1>
+<title>Incompatible changes from 2.0 to 2.2</title>
+
+<itemizedlist>
+
+<listitem>
+<para>
+GLib changed the seeding algorithm for the pseudo-random number
+generator Mersenne Twister, as used by <structname>GRand</structname>
+and <structname>GRandom</structname>. This was necessary, because some
+seeds would yield very bad pseudo-random streams. Also the
+pseudo-random integers generated by
+<function>g_rand*_int_range()</function> will have a
+slightly better equal distribution with the new version of GLib.
+</para>
+
+<para>
+Further information can be found at the website of the Mersenne
+Twister random number generator at <ulink
+url="http://www.math.keio.ac.jp/~matumoto/emt.html">http://www.math.keio.ac.jp/~matumoto/emt.html</ulink>.
+</para> 
+
+<para>
+The original seeding and generation algorithms, as found in GLib
+2.0.x, can be used instead of the new ones by setting the environment
+variable <envar>G_RANDOM_VERSION</envar> to the value of '2.0'. Use
+the GLib-2.0 algorithms only if you have sequences of numbers generated
+with Glib-2.0 that you need to reproduce exactly.  
+</para> 
+
+</listitem>
+
+</itemizedlist>
+
+</refsect1>
+
+<refsect1>
+<title>Incompatible changes from 1.2 to 2.0</title>
+
+<para>
+The <ulink url="http://developer.gnome.org/dotplan/porting/">GNOME 2.0
+porting guide</ulink> on <ulink
+url="http://developer.gnome.org">http://developer.gnome.org</ulink>
+has some more detailed discussion of porting from 1.2 to 2.0.
+See the section on GLib.
+</para>
+
+<itemizedlist>
+
+<listitem>
+<para>
+The event loop functionality <structname>GMain</structname> has extensively 
+been revised to support multiple separate main loops in separate threads. 
+All sources (timeouts, idle functions, etc.) are associated with a 
+<structname>GMainContext</structname>.
+</para>
+
+<para>
+Compatibility functions exist so that most application code dealing with
+the main loop will continue to work. However, code that creates new custom 
+types of sources will require modification.
+</para>
+
+<para>
+The main changes here are:
+
+  <itemizedlist>
+
+  <listitem>
+  <para>
+   Sources are now exposed as <type>GSource *</type>, rather than simply as 
+   numeric ids.
+  </para>
+  </listitem>
+  
+  <listitem>
+  <para>
+   New types of sources are created by structure "derivation" from 
+   <structname>GSource</structname>, so the <literal>source_data</literal> 
+   parameter to the <structname>GSource</structname> virtual functions has been
+   replaced with a <type>GSource *</type>.
+  </para>
+  </listitem>
+  
+  <listitem>
+  <para>
+   Sources are first created, then later added to a specific 
+   <structname>GMainContext</structname>. 
+  </para>
+  </listitem>
+  
+  <listitem>
+  <para>
+   Dispatching has been modified so both the callback and data are passed
+   in to the <function>dispatch()</function> virtual function.
+  </para>
+  </listitem>
+
+  </itemizedlist>
+  To go along with this change, the vtable for 
+  <structname>GIOChannel</structname> has changed and
+  <function>add_watch()</function> has been replaced by 
+  <function>create_watch()</function>.
+</para>
+</listitem>
+
+<listitem>
+<para>
+<function>g_list_foreach()</function> and 
+<function>g_slist_foreach()</function> have been changed so they
+are now safe against removal of the current item, not the next item.
+</para>
+
+<para>
+It's not recommended to mutate the list in the callback to these
+functions in any case.
+</para>
+</listitem>
+
+<listitem>
+<para>
+<structname>GDate</structname> now works in UTF-8, not in the current locale. 
+If you want to use it with the encoding of the locale, you need to convert 
+strings using <function>g_locale_to_utf8()</function> first.
+</para>
+</listitem>
+
+<listitem>
+<para>
+<function>g_strsplit()</function> has been fixed to:
+
+  <itemizedlist>
+  <listitem>
+  <para>
+   include trailing empty tokens, rather than stripping them
+  </para>
+  </listitem>
+  <listitem>
+  <para>
+   split into a maximum of <literal>max_tokens</literal> tokens, rather 
+   than <literal>max_tokens + 1</literal>
+  </para>
+  </listitem>
+  </itemizedlist>
+
+  Code depending on either of these bugs will need to be fixed.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Deprecated functions that got removed:
+<function>g_set_error_handler()</function>, 
+<function>g_set_warning_handler()</function>,
+<function>g_set_message_handler()</function>, use 
+<function>g_log_set_handler()</function> instead.
+</para>
+</listitem>
+</itemizedlist>
+
+</refsect1>
+
+</refentry>
diff --git a/docs/reference/glib/compiling.sgml b/docs/reference/glib/compiling.sgml
new file mode 100644
index 0000000..f446206
--- /dev/null
+++ b/docs/reference/glib/compiling.sgml
@@ -0,0 +1,84 @@
+<refentry id="glib-compiling" revision="17 Jan 2002">
+<refmeta>
+<refentrytitle>Compiling GLib Applications</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>GLib Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Compiling GLib Applications</refname>
+<refpurpose>
+How to compile your GLib application
+</refpurpose>
+</refnamediv>
+
+<refsect1>
+<title>Compiling GLib Applications on UNIX</title>
+
+<para>
+To compile a GLib application, you need to tell the compiler where to 
+find the GLib header files and libraries. This is done with the
+<application>pkg-config</application> utility.
+</para>
+<para>
+The following interactive shell session demonstrates how
+<application>pkg-config</application> is used (the actual output on
+your system may be different):
+<programlisting>
+$ pkg-config --cflags glib-2.0
+ -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include 
+$ pkg-config --libs glib-2.0
+ -L/usr/lib -lm -lglib-2.0  
+</programlisting>
+</para>
+<para>
+If your application uses threads or <structname>GObject</structname>
+features, it must be compiled and linked with the options returned by the 
+following <application>pkg-config</application> invocations: 
+<programlisting>
+$ pkg-config --cflags --libs gthread-2.0
+$ pkg-config --cflags --libs gobject-2.0
+</programlisting>
+</para>
+<para>
+If your application uses modules, it must be compiled and linked with the options 
+returned by one of the following <application>pkg-config</application> invocations: 
+<programlisting>
+$ pkg-config --cflags --libs gmodule-no-export-2.0 
+$ pkg-config --cflags --libs gmodule-2.0 
+</programlisting>
+The difference between the two is that gmodule-2.0 adds <option>--export-dynamic</option> 
+to the linker flags, which is often not needed.
+</para>
+<para>
+The simplest way to compile a program is to use the "backticks"
+feature of the shell. If you enclose a command in backticks
+(<emphasis>not single quotes</emphasis>), then its output will be
+substituted into the command line before execution. So to compile 
+a GLib Hello, World, you would type the following:
+<programlisting>
+$ cc `pkg-config --cflags --libs glib-2.0` hello.c -o hello
+</programlisting>
+</para>
+
+<para>
+If you want to make sure that your program doesn't use any deprecated
+functions, you can define the preprocessor symbol G_DISABLE_DEPRECATED
+by using the command line option <literal>-DG_DISABLE_DEPRECATED=1</literal>.
+</para>
+
+<para>
+The recommended way of using GLib has always been to only include the 
+toplevel headers <filename>glib.h</filename>, 
+<filename>glib-object.h</filename>, <filename>gio.h</filename>.
+Starting with 2.17, GLib enforces this by generating an error
+when individual headers are directly included. To help with the 
+transition, the enforcement is not turned on by default for GLib 
+headers (it <emphasis>is</emphasis> turned on for GObject and GIO).
+To turn it on, define the preprocessor symbol G_DISABLE_SINGLE_INCLUDES
+by using the command line option <literal>-DG_DISABLE_SINGLE_INCLUDES</literal>.
+</para>
+
+</refsect1>
+
+</refentry>
diff --git a/docs/reference/glib/cross.sgml b/docs/reference/glib/cross.sgml
new file mode 100644
index 0000000..383f32f
--- /dev/null
+++ b/docs/reference/glib/cross.sgml
@@ -0,0 +1,195 @@
+<refentry id="glib-cross-compiling" revision="8 Apr 2003">
+<refmeta>
+<refentrytitle>Cross-compiling the GLib package</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>GLib Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Cross-compiling the GLib Package</refname>
+<refpurpose>
+How to cross-compile GLib
+</refpurpose>
+</refnamediv>
+
+    <refsect1 id="cross">
+      <title>Building the Library for a different architecture</title>
+      <para>
+        Cross-compilation is the process of compiling a program or
+        library on a different architecture or operating system then
+        it will be run upon. GLib is slightly more difficult to 
+        cross-compile than many packages because much of GLib is
+        about hiding differences between different systems. 
+      </para>
+      <para>
+        These notes cover things specific to cross-compiling GLib;
+        for general information about cross-compilation, see the
+        <application>autoconf</application> info pages.
+      </para>
+      <para>
+        GLib tries to detect as much information as possible about
+        the target system by compiling and linking programs without
+        actually running anything; however, some information GLib
+        needs is not available this way. This information needs
+        to be provided to the configure script via a "cache file"
+        or by setting the cache variables in your environment.
+      </para>
+      <para>
+        As an example of using a cache file, to cross compile for
+        the "MingW32" Win32 runtine environment on a Linux system,
+        create a file 'win32.cache' with the following contents:
+      </para>
+      <programlisting> 
+glib_cv_long_long_format=I64
+glib_cv_stack_grows=no
+      </programlisting>
+      <para>
+        Then execute the following commands:
+      </para>
+      <programlisting>
+PATH=/path/to/mingw32-compiler/bin:$PATH
+chmod a-w win32.cache   # prevent configure from changing it
+./configure --cache-file=win32.cache --host=mingw32
+      </programlisting>
+      <para>
+        The complete list of cache file variables follows. Most
+         of these won't need to be set in most cases.
+      </para>
+    </refsect1>
+    <refsect1 id="cache-file-variables">
+      <title>Cache file variables</title>
+      <formalpara>
+        <title>glib_cv_long_long_format=[ll/q/I64]</title>
+        
+        <para>
+           Format used by <function>printf()</function> and 
+           <function>scanf()</function> for 64 bit integers. "ll" is 
+           the C99 standard, and what is used by the 'trio' library
+           that GLib builds if your <function>printf()</function> is 
+           insufficiently capable.
+           Doesn't need to be set if you are compiling using trio.
+        </para>
+      </formalpara>
+      <formalpara>
+        <title>glib_cv_stack_grows=[yes/no]</title>
+
+        <para>
+           Whether the stack grows up or down. Most places will want "no",
+           A few architectures, such as PA-RISC need "yes".
+        </para>
+      </formalpara>
+      <formalpara>
+        <title>glib_cv_working_bcopy=[yes/no]</title>
+
+        <para>
+           Whether your <function>bcopy()</function> can handle overlapping 
+           copies. Only needs to be set if you don't have 
+           <function>memmove()</function>. (Very unlikely)
+	</para>
+      </formalpara>
+      <formalpara>
+         <title>glib_cv_sane_realloc=[yes/np]</title>
+
+         <para>  
+            Whether your <function>realloc()</function> conforms to ANSI C 
+            and can handle <literal>NULL</literal> as the first argument. 
+            Defaults to "yes" and probably doesn't need to be set.
+	</para>
+      </formalpara>
+      <formalpara>
+         <title>glib_cv_have_strlcpy=[yes/no]</title>
+
+         <para>
+            Whether you have <function>strlcpy()</function> that matches 
+            OpenBSD. Defaults to "no", which is safe, since GLib uses a 
+            built-in version in that case.
+	</para>
+      </formalpara>
+      <formalpara>
+         <title>glib_cv_va_val_copy=[yes/no]</title>
+   
+         <para>
+            Whether <type>va_list</type> can be copied as a pointer. If set 
+            to "no", then <function>memcopy()</function> will be used. Only 
+            matters if you don't have <function>va_copy()</function> or 
+            <function>__va_copy()</function>. (So, doesn't matter for GCC.) 
+            Defaults to "yes" which is slightly more common than "no".
+	</para>
+      </formalpara>
+      <formalpara>
+         <title>glib_cv_rtldglobal_broken=[yes/no]</title>
+ 
+         <para>
+            Whether you have a bug found in OSF/1 v5.0. Defaults to "no".
+         </para>
+      </formalpara>
+      <formalpara>
+         <title>glib_cv_uscore=[yes/no]</title>
+
+         <para>
+            Whether an underscore needs to be prepended to symbols when
+            looking them up via <function>dlsym()</function>. Only needs to 
+            be set if your system uses
+	    <function>dlopen()</function>/<function>dlsym()</function>.
+	 </para>
+      </formalpara>
+      <formalpara>
+         <title>ac_cv_func_posix_getpwuid_r=[yes/no]</title>
+
+         <para>
+            Whether you have a getpwuid_r function (in your C library,
+	    not your thread library) that conforms to the POSIX spec.
+            (Takes a 'struct passwd **' as the final argument)
+         </para>
+      </formalpara>
+      <formalpara>
+         <title>ac_cv_func_nonposix_getpwuid_r=[yes/no]</title>
+ 
+         <para>
+            Whether you have some variant of <function>getpwuid_r()</function>
+            that doesn't conform to to the POSIX spec, but GLib might be able
+            to use (or might segfault.) Only needs to be set if 
+	    <literal>ac_cv_func_posix_getpwuid_r</literal> is not set. It's 
+            safest to set this to "no".
+         </para>
+      </formalpara>
+      <formalpara>
+         <title>ac_cv_func_posix_getgrgid_r=[yes/no]</title>
+ 
+         <para>
+            Whether you have a getgrgid_r function that conforms to
+            the POSIX spec.
+         </para>
+      </formalpara>
+      <formalpara>
+         <title>glib_cv_use_pid_surrogate=[yes/no]</title>
+
+         <para>
+            Whether to use a <function>setpriority()</function> on the PID of 
+            the thread as a method for setting the priority of threads. This 
+            only needs to be set when using POSIX threads.
+         </para>
+      </formalpara>
+      <formalpara>
+         <title>ac_cv_func_printf_unix98=[yes/no]</title>
+
+         <para>
+           Whether your <function>printf()</function> family supports Unix98 
+           style <literal>%N$</literal> positional parameters. Defaults to
+	"no".
+         </para>
+      </formalpara>
+      <formalpara>
+         <title>ac_cv_func_vsnprintf_c99=[yes/no]</title>
+
+         <para>
+            Whether you have a <function>vsnprintf()</function> with C99 
+            semantics. (C99 semantics means returning the number of bytes 
+            that would have been written had the output buffer had enough 
+            space.) Defaults to "no".
+         </para>
+      </formalpara>
+
+    </refsect1>    
+
+</refentry>
diff --git a/docs/reference/glib/file-name-encodings.png b/docs/reference/glib/file-name-encodings.png
new file mode 100644
index 0000000..7adbcea
--- /dev/null
+++ b/docs/reference/glib/file-name-encodings.png
Binary files differ
diff --git a/docs/reference/glib/file-name-encodings.sxd b/docs/reference/glib/file-name-encodings.sxd
new file mode 100644
index 0000000..46750dc
--- /dev/null
+++ b/docs/reference/glib/file-name-encodings.sxd
Binary files differ
diff --git a/docs/reference/glib/glib-docs.sgml b/docs/reference/glib/glib-docs.sgml
new file mode 100644
index 0000000..cef6e8c
--- /dev/null
+++ b/docs/reference/glib/glib-docs.sgml
@@ -0,0 +1,246 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY glib-Basic-Types SYSTEM "xml/types.xml">
+<!ENTITY glib-Limits-of-Basic-Types SYSTEM "xml/limits.xml">
+<!ENTITY glib-Standard-Macros SYSTEM "xml/macros.xml">
+<!ENTITY glib-Type-Conversion-Macros SYSTEM "xml/type_conversion.xml">
+<!ENTITY glib-Byte-Order-Macros SYSTEM "xml/byte_order.xml">
+<!ENTITY glib-Numerical-Definitions SYSTEM "xml/numerical.xml">
+<!ENTITY glib-Miscellaneous-Macros SYSTEM "xml/macros_misc.xml">
+<!ENTITY glib-Atomic-Operations SYSTEM "xml/atomic_operations.xml">
+<!ENTITY glib-Memory-Allocation SYSTEM "xml/memory.xml">
+<!ENTITY glib-Error-Reporting SYSTEM "xml/error_reporting.xml">
+<!ENTITY glib-Warnings-and-Assertions SYSTEM "xml/warnings.xml">
+<!ENTITY glib-Message-Logging SYSTEM "xml/messages.xml">
+<!ENTITY glib-Pattern-Matching SYSTEM "xml/patterns.xml">
+<!ENTITY glib-Timers SYSTEM "xml/timers.xml">
+<!ENTITY glib-String-Utility-Functions SYSTEM "xml/string_utils.xml">
+<!ENTITY glib-Character-Set-Conversion SYSTEM "xml/conversions.xml">
+<!ENTITY glib-Unicode-Manipulation SYSTEM "xml/unicode.xml">
+<!ENTITY glib-Random-Numbers SYSTEM "xml/random_numbers.xml">
+<!ENTITY glib-Miscellaneous-Utility-Functions SYSTEM "xml/misc_utils.xml">
+<!ENTITY glib-Date-and-Time-Functions SYSTEM "xml/date.xml">
+<!ENTITY glib-The-Main-Event-Loop SYSTEM "xml/main.xml">
+<!ENTITY glib-Threads SYSTEM "xml/threads.xml">
+<!ENTITY glib-Thread-Pools SYSTEM "xml/thread_pools.xml">
+<!ENTITY glib-Async-Queues SYSTEM "xml/async_queues.xml">
+<!ENTITY glib-IO-Channels SYSTEM "xml/iochannels.xml">
+<!ENTITY glib-Hook-Functions SYSTEM "xml/hooks.xml">
+<!ENTITY glib-Lexical-Scanner SYSTEM "xml/scanner.xml">
+<!ENTITY glib-Dynamic-Loading-of-Modules SYSTEM "xml/modules.xml">
+<!ENTITY glib-Automatic-String-Completion SYSTEM "xml/completion.xml">
+<!ENTITY glib-Windows-Compatibility-Functions SYSTEM "xml/windows.xml">
+<!ENTITY glib-Memory-Chunks SYSTEM "xml/memory_chunks.xml">
+<!ENTITY glib-Memory-Slices SYSTEM "xml/memory_slices.xml">
+<!ENTITY glib-Doubly-Linked-Lists SYSTEM "xml/linked_lists_double.xml">
+<!ENTITY glib-Singly-Linked-Lists SYSTEM "xml/linked_lists_single.xml">
+<!ENTITY glib-Double-ended-Queues SYSTEM "xml/queue.xml">
+<!ENTITY glib-Sequences SYSTEM "xml/sequence.xml">
+<!ENTITY glib-Trash-Stacks SYSTEM "xml/trash_stack.xml">
+<!ENTITY glib-Hash-Tables SYSTEM "xml/hash_tables.xml">
+<!ENTITY glib-Strings SYSTEM "xml/strings.xml">
+<!ENTITY glib-String-Chunks SYSTEM "xml/string_chunks.xml">
+<!ENTITY glib-Arrays SYSTEM "xml/arrays.xml">
+<!ENTITY glib-Pointer-Arrays SYSTEM "xml/arrays_pointer.xml">
+<!ENTITY glib-Byte-Arrays SYSTEM "xml/arrays_byte.xml">
+<!ENTITY glib-Balanced-Binary-Trees SYSTEM "xml/trees-binary.xml">
+<!ENTITY glib-N-ary-Trees SYSTEM "xml/trees-nary.xml">
+<!ENTITY glib-Quarks SYSTEM "xml/quarks.xml">
+<!ENTITY glib-Keyed-Data-Lists SYSTEM "xml/datalist.xml">
+<!ENTITY glib-Datasets SYSTEM "xml/datasets.xml">
+<!ENTITY glib-Relations-and-Tuples SYSTEM "xml/relations.xml">
+<!ENTITY glib-Caches SYSTEM "xml/caches.xml">
+<!ENTITY glib-Memory-Allocators SYSTEM "xml/allocators.xml">
+<!ENTITY glib-Spawn SYSTEM "xml/spawn.xml">
+<!ENTITY glib-Fileutils SYSTEM "xml/fileutils.xml">
+<!ENTITY glib-Shell SYSTEM "xml/shell.xml">
+<!ENTITY glib-Option SYSTEM "xml/option.xml">
+<!ENTITY glib-Markup SYSTEM "xml/markup.xml">
+<!ENTITY glib-Keyfile SYSTEM "xml/keyfile.xml">
+<!ENTITY glib-Bookmarkfile SYSTEM "xml/bookmarkfile.xml">
+<!ENTITY glib-Base64 SYSTEM "xml/base64.xml">
+<!ENTITY glib-Checksum SYSTEM "xml/checksum.xml">
+<!ENTITY glib-i18n SYSTEM "xml/i18n.xml">
+<!ENTITY glib-Regex SYSTEM "xml/gregex.xml">
+<!ENTITY glib-Version SYSTEM "xml/version.xml">
+<!ENTITY glib-Uri SYSTEM "xml/gurifuncs.xml">
+<!ENTITY glib-Testing SYSTEM "xml/testing.xml">
+
+<!ENTITY glib-Compiling SYSTEM "compiling.sgml">
+<!ENTITY glib-Building SYSTEM "building.sgml">
+<!ENTITY glib-Cross SYSTEM "cross.sgml">
+<!ENTITY glib-Running SYSTEM "running.sgml">
+<!ENTITY glib-Resources SYSTEM "resources.sgml">
+<!ENTITY glib-Changes SYSTEM "changes.sgml">
+<!ENTITY glib-RegexSyntax SYSTEM "regex-syntax.sgml">
+
+<!ENTITY glib-gettextize SYSTEM "glib-gettextize.xml">
+<!ENTITY gtester SYSTEM "gtester.xml">
+<!ENTITY gtester-report SYSTEM "gtester-report.xml">
+
+<!ENTITY version SYSTEM "version.xml">
+]>
+<book id="index">
+  <bookinfo>
+    <title>GLib Reference Manual</title>
+    <releaseinfo>
+      for GLib &version;
+      The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://library.gnome.org/devel/glib/unstable/">http://library.gnome.org/devel/glib/unstable/</ulink>.
+    </releaseinfo>
+  </bookinfo>
+
+  <chapter id="glib">
+    <title>GLib Overview</title>
+    <para>
+GLib is a general-purpose utility library, which provides many useful data 
+types, macros, type conversions, string utilities, file utilities, a main 
+loop abstraction, and so on. It works on many UNIX-like platforms, Windows,
+OS/2 and BeOS. GLib is released under the GNU Library General Public License 
+(GNU LGPL). 
+    </para>
+    <para>
+The general policy of GLib is that all functions are invisibly threadsafe with the 
+exception of data structure manipulation functions, where, if you have two threads
+manipulating the <emphasis>same</emphasis> data structure, they must use a lock to
+synchronize their operation.
+    </para>
+
+    &glib-Building;
+    &glib-Cross;
+    &glib-Compiling;
+    &glib-Running;
+    &glib-Changes;
+    &glib-RegexSyntax;
+    &glib-Resources;
+ 
+  </chapter> 
+
+  <chapter id="glib-fundamentals">
+    <title>GLib Fundamentals</title>
+    &glib-Version;
+    &glib-Basic-Types;
+    &glib-Limits-of-Basic-Types;
+    &glib-Standard-Macros;
+    &glib-Type-Conversion-Macros;
+    &glib-Byte-Order-Macros;
+    &glib-Numerical-Definitions;
+    &glib-Miscellaneous-Macros;
+    &glib-Atomic-Operations;
+  </chapter>
+
+  <chapter id="glib-core">
+    <title>GLib Core Application Support</title>
+    &glib-The-Main-Event-Loop;
+    &glib-Threads;
+    &glib-Thread-Pools;
+    &glib-Async-Queues;
+    &glib-Dynamic-Loading-of-Modules;
+    &glib-Memory-Allocation;
+    &glib-IO-Channels;
+    &glib-Error-Reporting;
+    &glib-Warnings-and-Assertions;
+    &glib-Message-Logging;
+  </chapter>
+
+  <chapter id="glib-utilities">
+    <title>GLib Utilities</title>
+    &glib-String-Utility-Functions;
+    &glib-Character-Set-Conversion;
+    &glib-Unicode-Manipulation;
+    &glib-Base64;
+    &glib-Checksum;
+    &glib-i18n;
+    &glib-Date-and-Time-Functions;
+    &glib-Random-Numbers;   
+    &glib-Hook-Functions;
+    &glib-Miscellaneous-Utility-Functions;
+    &glib-Lexical-Scanner;
+    &glib-Automatic-String-Completion;
+    &glib-Timers;
+    &glib-Spawn;
+    &glib-Fileutils;
+    &glib-Uri;
+    &glib-Shell;
+    &glib-Option;
+    &glib-Pattern-Matching;
+    &glib-Regex;
+    &glib-Markup;
+    &glib-Keyfile;
+    &glib-Bookmarkfile;
+    &glib-Testing;
+    &glib-Windows-Compatibility-Functions;
+  </chapter>
+
+  <chapter id="glib-data-types">
+    <title>GLib Data Types</title>
+    &glib-Memory-Slices;
+    &glib-Memory-Chunks;
+    &glib-Doubly-Linked-Lists;
+    &glib-Singly-Linked-Lists;
+    &glib-Double-ended-Queues;
+    &glib-Sequences;
+    &glib-Trash-Stacks;
+    &glib-Hash-Tables;
+    &glib-Strings;
+    &glib-String-Chunks;
+    &glib-Arrays;
+    &glib-Pointer-Arrays;
+    &glib-Byte-Arrays;
+    &glib-Balanced-Binary-Trees;
+    &glib-N-ary-Trees;
+    &glib-Quarks;
+    &glib-Keyed-Data-Lists;
+    &glib-Datasets;
+    &glib-Relations-and-Tuples;
+    &glib-Caches;
+    &glib-Memory-Allocators;
+  </chapter>
+
+  <chapter id="tools">
+    <title>GLib Tools</title>
+
+    &glib-gettextize;
+    &gtester;
+    &gtester-report;
+  </chapter>
+
+  <index>
+    <title>Index</title>
+  </index>
+  <index role="deprecated">
+    <title>Index of deprecated symbols</title>
+  </index>
+  <index role="2.2">
+    <title>Index of new symbols in 2.2</title>
+  </index>
+  <index role="2.4">
+    <title>Index of new symbols in 2.4</title>
+  </index>  
+  <index role="2.6">
+    <title>Index of new symbols in 2.6</title>
+  </index>  
+  <index role="2.8">
+    <title>Index of new symbols in 2.8</title>
+  </index>  
+  <index role="2.10">
+    <title>Index of new symbols in 2.10</title>
+  </index>  
+  <index role="2.12">
+    <title>Index of new symbols in 2.12</title>
+  </index>  
+  <index role="2.14">
+    <title>Index of new symbols in 2.14</title>
+  </index>  
+  <index role="2.16">
+    <title>Index of new symbols in 2.16</title>
+  </index>  
+  <index role="2.18">
+    <title>Index of new symbols in 2.18</title>
+  </index>  
+  <index role="2.20">
+    <title>Index of new symbols in 2.20</title>
+  </index>  
+
+</book>
diff --git a/docs/reference/glib/glib-gettextize.1 b/docs/reference/glib/glib-gettextize.1
new file mode 100644
index 0000000..f8bfb9e
--- /dev/null
+++ b/docs/reference/glib/glib-gettextize.1
@@ -0,0 +1,51 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.0).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "GLIB\-GETTEXTIZE" "1" "08/15/2005" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+glib\-gettextize \- gettext internationalization utility
+.SH "SYNOPSIS"
+.HP 16
+\fBglib\-gettextize\fR [option...] [directory]
+.SH "DESCRIPTION"
+.PP
+\fBglib\-gettextize\fR 
+helps to prepare a source package for being internationalized through 
+gettext. It is a variant of the 
+\fBgettextize\fR 
+that ships with 
+gettext.
+.PP
+\fBglib\-gettextize\fR 
+differs from 
+\fBgettextize\fR 
+in that it doesn't create an 
+\fIintl/\fR 
+subdirectory and doesn't modify 
+\fIpo/ChangeLog\fR 
+(note that newer versions of 
+\fBgettextize\fR 
+behave like this when called with the 
+\fB\-\-no\-changelog\fR 
+option).
+.SS "Options"
+.TP
+\fB\-\-help\fR
+print help and exit
+.TP
+\fB\-\-version\fR
+print version information and exit
+.TP
+\fB\-c\fR, \fB\-\-copy\fR
+copy files instead of making symlinks
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+force writing of new files even if old ones exist
+.SH "SEE ALSO"
+.PP
+ \fBgettextize\fR(1)
diff --git a/docs/reference/glib/glib-gettextize.xml b/docs/reference/glib/glib-gettextize.xml
new file mode 100644
index 0000000..c92dc57
--- /dev/null
+++ b/docs/reference/glib/glib-gettextize.xml
@@ -0,0 +1,76 @@
+<refentry id="glib-gettextize">
+
+<refmeta>
+<refentrytitle>glib-gettextize</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>glib-gettextize</refname>
+<refpurpose>gettext internationalization utility</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>glib-gettextize</command>
+<arg choice="opt" rep="repeat">option</arg>
+<arg choice="opt">directory</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>glib-gettextize</command> helps to prepare a source package for being
+internationalized through <application>gettext</application>. 
+It is a variant of the <command>gettextize</command> that ships with
+<application>gettext</application>. 
+</para>
+
+<para><command>glib-gettextize</command> differs
+from <command>gettextize</command> in that it doesn't create an
+<filename>intl/</filename> subdirectory and doesn't modify
+<filename>po/ChangeLog</filename> (note that newer versions of 
+<command>gettextize</command> behave like this when called with the
+<option>--no-changelog</option> option).
+</para>
+<refsect2><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>--help</option></term>
+<listitem><para>
+print help and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--version</option></term>
+<listitem><para>
+print version information and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-c</option>, <option>--copy</option></term>
+<listitem><para>
+copy files instead of making symlinks
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-f</option>, <option>--force</option></term>
+<listitem><para>
+force writing of new files even if old ones exist
+</para></listitem>
+</varlistentry>
+</variablelist>
+</refsect2>
+</refsect1>
+
+<refsect1><title>See also</title>
+<para>
+<command>gettextize</command>(1)
+</para>
+</refsect1>
+</refentry>
+
+
diff --git a/docs/reference/glib/glib-overrides.txt b/docs/reference/glib/glib-overrides.txt
new file mode 100644
index 0000000..7dd58e8
--- /dev/null
+++ b/docs/reference/glib/glib-overrides.txt
@@ -0,0 +1,307 @@
+# This file makes most of the thread related macros look like
+# functions, which they really were, if possible easy.
+
+# default thread implementation
+
+<MACRO>
+<NAME>G_THREADS_IMPL_POSIX</NAME>
+#define G_THREADS_IMPL_POSIX
+</MACRO>
+
+<MACRO>
+<NAME>G_THREADS_IMPL_NONE</NAME>
+#define G_THREADS_IMPL_NONE
+</MACRO>
+
+# threads supported?
+
+<FUNCTION>
+<NAME>g_thread_supported</NAME>
+<RETURNS>gboolean</RETURNS>
+</FUNCTION>
+
+# GMutex
+
+<FUNCTION>
+<NAME>g_mutex_new</NAME>
+<RETURNS>GMutex *</RETURNS>
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_mutex_lock</NAME>
+<RETURNS>void</RETURNS>
+GMutex *mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_mutex_trylock</NAME>
+<RETURNS>gboolean</RETURNS>
+GMutex *mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_mutex_unlock</NAME>
+<RETURNS>void</RETURNS>
+GMutex *mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_mutex_free</NAME>
+<RETURNS>void</RETURNS>
+GMutex *mutex
+</FUNCTION>
+
+# GStaticMutex
+
+<STRUCT>
+<NAME>GStaticMutex</NAME>
+</STRUCT>
+
+<MACRO>
+<NAME>G_STATIC_MUTEX_INIT</NAME>
+#define G_STATIC_MUTEX_INIT
+</MACRO>
+
+<FUNCTION>
+<NAME>g_static_mutex_lock</NAME>
+<RETURNS>void</RETURNS>
+GStaticMutex* mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_static_mutex_trylock</NAME>
+<RETURNS>gboolean</RETURNS>
+GStaticMutex* mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_static_mutex_unlock</NAME>
+<RETURNS>void</RETURNS>
+GStaticMutex* mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_static_mutex_get_mutex</NAME>
+<RETURNS>GMutex *</RETURNS>
+GStaticMutex* mutex
+</FUNCTION>
+
+# GThread
+
+<FUNCTION>
+<NAME>g_thread_yield</NAME>
+<RETURNS>void</RETURNS>
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_thread_create</NAME>
+<RETURNS>GThread *</RETURNS>
+GThreadFunc func
+gpointer data,
+gboolean joinable,
+GError **error
+</FUNCTION>
+
+# G_LOCK_* macros
+
+<MACRO>
+<NAME>G_LOCK_DEFINE</NAME>
+#define G_LOCK_DEFINE(name)    
+</MACRO>
+
+<MACRO>
+<NAME>G_LOCK_DEFINE_STATIC</NAME>
+#define G_LOCK_DEFINE_STATIC(name)
+</MACRO>
+
+<MACRO>
+<NAME>G_LOCK_EXTERN</NAME>
+#define G_LOCK_EXTERN(name)    
+</MACRO>
+
+<MACRO>
+<NAME>G_LOCK</NAME>
+#define G_LOCK(name)
+</MACRO>
+
+<MACRO>
+<NAME>G_UNLOCK</NAME>
+#define G_UNLOCK(name)
+</MACRO>
+
+<MACRO>
+<NAME>G_TRYLOCK</NAME>
+#define G_TRYLOCK(name)
+</MACRO>
+
+# GCond
+
+<FUNCTION>
+<NAME>g_cond_new</NAME>
+<RETURNS>GCond*</RETURNS>
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_cond_signal</NAME>
+<RETURNS>void</RETURNS>
+GCond *cond
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_cond_broadcast</NAME>
+<RETURNS>void</RETURNS>
+GCond *cond
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_cond_wait</NAME>
+<RETURNS>void</RETURNS>
+GCond *cond, GMutex *mutex
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_cond_timed_wait</NAME>
+<RETURNS>gboolean</RETURNS>
+GCond *cond, GMutex *mutex, GTimeVal *abs_time
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_cond_free</NAME>
+<RETURNS>void</RETURNS>
+GCond *cond
+</FUNCTION>
+
+# GPrivate
+
+<FUNCTION>
+<NAME>g_private_new</NAME>
+<RETURNS>GPrivate*</RETURNS>
+GDestroyNotify destructor
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_private_get</NAME>
+<RETURNS>gpointer</RETURNS>
+GPrivate *private_key
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_private_set</NAME>
+<RETURNS>void</RETURNS>
+GPrivate *private_key, gpointer data
+</FUNCTION>
+
+# GStaticPrivate
+
+<MACRO>
+<NAME>G_STATIC_PRIVATE_INIT</NAME>
+#define G_STATIC_PRIVATE_INIT 
+</MACRO>
+
+# Definitions for different operating systems
+
+<MACRO>
+<NAME>G_OS_UNIX</NAME>
+#define G_OS_UNIX
+</MACRO>
+
+<MACRO>
+<NAME>G_OS_WIN32</NAME>
+#define G_OS_WIN32
+</MACRO>
+
+<MACRO>
+<NAME>G_OS_BEOS</NAME>
+#define G_OS_BEOS
+</MACRO>
+
+# g_ascii_isxxx
+
+<FUNCTION>
+<NAME>g_ascii_isalnum</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isalpha</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_iscntrl</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isdigit</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isgraph</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_islower</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isprint</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_ispunct</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isspace</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isupper</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_ascii_isxdigit</NAME>
+<RETURNS>gboolean</RETURNS>
+gchar c
+</FUNCTION>
+
+# g_atomic
+
+<FUNCTION>
+<NAME>g_atomic_int_inc</NAME>
+<RETURNS>void</RETURNS>
+gint *atomic
+</FUNCTION>
+
+<FUNCTION>
+<NAME>g_atomic_int_dec_and_test</NAME>
+<RETURNS>gboolean</RETURNS>
+gint *atomic
+</FUNCTION>
+
+<STRUCT>
+<NAME>GIConv</NAME>
+</STRUCT>
+
+<MACRO>
+<NAME>G_VA_COPY</NAME>
+#define G_VA_COPY(ap1,ap2)    
+</MACRO>
diff --git a/docs/reference/glib/glib-sections.txt b/docs/reference/glib/glib-sections.txt
new file mode 100644
index 0000000..6df70cb
--- /dev/null
+++ b/docs/reference/glib/glib-sections.txt
@@ -0,0 +1,2655 @@
+<INCLUDE>glib.h</INCLUDE>
+
+<SECTION>
+<TITLE>Basic Types</TITLE>
+<FILE>types</FILE>
+gboolean
+gpointer
+gconstpointer
+gchar
+guchar
+
+<SUBSECTION>
+gint
+guint
+gshort
+gushort
+glong
+gulong
+
+<SUBSECTION>
+gint8
+guint8
+gint16
+guint16
+gint32
+guint32
+
+<SUBSECTION>
+G_HAVE_GINT64
+gint64
+guint64
+G_GINT64_CONSTANT
+G_GUINT64_CONSTANT
+
+<SUBSECTION>
+gfloat
+gdouble
+
+<SUBSECTION>
+gsize
+gssize
+goffset
+G_GOFFSET_CONSTANT
+
+<SUBSECTION Private>
+GLIB_SIZEOF_VOID_P
+GLIB_SIZEOF_LONG
+GLIB_SIZEOF_SIZE_T
+</SECTION>
+
+<SECTION>
+<TITLE>Limits of Basic Types</TITLE>
+<FILE>limits</FILE>
+G_MININT
+G_MAXINT
+G_MAXUINT
+
+<SUBSECTION>
+G_MINSHORT
+G_MAXSHORT
+G_MAXUSHORT
+
+<SUBSECTION>
+G_MINLONG
+G_MAXLONG
+G_MAXULONG
+
+<SUBSECTION>
+G_MININT8
+G_MAXINT8
+G_MAXUINT8
+
+<SUBSECTION>
+G_MININT16
+G_MAXINT16
+G_MAXUINT16
+
+<SUBSECTION>
+G_MININT32
+G_MAXINT32
+G_MAXUINT32
+
+<SUBSECTION>
+G_MININT64
+G_MAXINT64
+G_MAXUINT64
+
+<SUBSECTION>
+G_MAXSIZE
+G_MINSSIZE
+G_MAXSSIZE
+
+<SUBSECTION>
+G_MINOFFSET
+G_MAXOFFSET
+
+<SUBSECTION>
+G_MINFLOAT
+G_MAXFLOAT
+
+<SUBSECTION>
+G_MINDOUBLE
+G_MAXDOUBLE
+</SECTION>
+
+<SECTION>
+<TITLE>Version Information</TITLE>
+<FILE>version</FILE>
+glib_major_version
+glib_minor_version
+glib_micro_version
+glib_binary_age
+glib_interface_age
+glib_check_version
+
+<SUBSECTION>
+GLIB_MAJOR_VERSION
+GLIB_MINOR_VERSION
+GLIB_MICRO_VERSION
+GLIB_CHECK_VERSION
+</SECTION>
+
+<SECTION>
+<TITLE>Standard Macros</TITLE>
+<FILE>macros</FILE>
+<SUBSECTION>
+G_OS_WIN32
+G_OS_BEOS
+G_OS_UNIX
+
+<SUBSECTION>
+G_DIR_SEPARATOR
+G_DIR_SEPARATOR_S
+G_IS_DIR_SEPARATOR
+G_SEARCHPATH_SEPARATOR
+G_SEARCHPATH_SEPARATOR_S
+
+<SUBSECTION>
+TRUE
+FALSE
+
+<SUBSECTION>
+NULL
+
+<SUBSECTION>
+MIN
+MAX
+
+<SUBSECTION>
+ABS
+CLAMP
+
+<SUBSECTION>
+G_STRUCT_MEMBER
+G_STRUCT_MEMBER_P
+G_STRUCT_OFFSET
+
+<SUBSECTION>
+G_MEM_ALIGN
+
+<SUBSECTION>
+G_CONST_RETURN
+
+</SECTION>
+
+<SECTION>
+<TITLE>Type Conversion Macros</TITLE>
+<FILE>type_conversion</FILE>
+GINT_TO_POINTER
+GPOINTER_TO_INT
+
+<SUBSECTION>
+GUINT_TO_POINTER
+GPOINTER_TO_UINT
+GSIZE_TO_POINTER
+GPOINTER_TO_SIZE
+</SECTION>
+
+<SECTION>
+<TITLE>Byte Order Macros</TITLE>
+<FILE>byte_order</FILE>
+G_BYTE_ORDER
+G_LITTLE_ENDIAN
+G_BIG_ENDIAN
+G_PDP_ENDIAN
+
+<SUBSECTION>
+g_htonl
+g_htons
+g_ntohl
+g_ntohs
+
+<SUBSECTION>
+GINT_FROM_BE
+GINT_FROM_LE
+GINT_TO_BE
+GINT_TO_LE
+
+<SUBSECTION>
+GUINT_FROM_BE
+GUINT_FROM_LE
+GUINT_TO_BE
+GUINT_TO_LE
+
+<SUBSECTION>
+GLONG_FROM_BE
+GLONG_FROM_LE
+GLONG_TO_BE
+GLONG_TO_LE
+
+<SUBSECTION>
+GULONG_FROM_BE
+GULONG_FROM_LE
+GULONG_TO_BE
+GULONG_TO_LE
+
+<SUBSECTION>
+GINT16_FROM_BE
+GINT16_FROM_LE
+GINT16_TO_BE
+GINT16_TO_LE
+
+<SUBSECTION>
+GUINT16_FROM_BE
+GUINT16_FROM_LE
+GUINT16_TO_BE
+GUINT16_TO_LE
+
+<SUBSECTION>
+GINT32_FROM_BE
+GINT32_FROM_LE
+GINT32_TO_BE
+GINT32_TO_LE
+
+<SUBSECTION>
+GUINT32_FROM_BE
+GUINT32_FROM_LE
+GUINT32_TO_BE
+GUINT32_TO_LE
+
+<SUBSECTION>
+GINT64_FROM_BE
+GINT64_FROM_LE
+GINT64_TO_BE
+GINT64_TO_LE
+
+<SUBSECTION>
+GUINT64_FROM_BE
+GUINT64_FROM_LE
+GUINT64_TO_BE
+GUINT64_TO_LE
+
+<SUBSECTION>
+GUINT16_SWAP_BE_PDP
+GUINT16_SWAP_LE_BE
+GUINT16_SWAP_LE_PDP
+
+<SUBSECTION>
+GUINT32_SWAP_BE_PDP
+GUINT32_SWAP_LE_BE
+GUINT32_SWAP_LE_PDP
+
+<SUBSECTION>
+GUINT64_SWAP_LE_BE
+
+<SUBSECTION Private>
+GUINT16_SWAP_LE_BE_CONSTANT
+GUINT32_SWAP_LE_BE_CONSTANT
+GUINT64_SWAP_LE_BE_CONSTANT
+GUINT16_SWAP_LE_BE_IA32
+GUINT32_SWAP_LE_BE_IA32
+GUINT64_SWAP_LE_BE_IA32
+GUINT16_SWAP_LE_BE_IA64
+GUINT32_SWAP_LE_BE_IA64
+GUINT64_SWAP_LE_BE_IA64
+GUINT32_SWAP_LE_BE_X86_64
+GUINT64_SWAP_LE_BE_X86_64
+
+</SECTION>
+
+<SECTION>
+<TITLE>Numerical Definitions</TITLE>
+<FILE>numerical</FILE>
+G_IEEE754_FLOAT_BIAS
+G_IEEE754_DOUBLE_BIAS
+GFloatIEEE754
+GDoubleIEEE754
+
+<SUBSECTION>
+<SUBSECTION>
+G_E
+G_LN2
+G_LN10
+G_PI
+G_PI_2
+G_PI_4
+G_SQRT2
+G_LOG_2_BASE_10
+</SECTION>
+
+<SECTION>
+<TITLE>Miscellaneous Macros</TITLE>
+<FILE>macros_misc</FILE>
+G_INLINE_FUNC
+
+<SUBSECTION>
+G_STMT_START
+G_STMT_END
+
+<SUBSECTION>
+G_BEGIN_DECLS
+G_END_DECLS
+
+<SUBSECTION>
+G_N_ELEMENTS
+
+<SUBSECTION>
+G_VA_COPY
+
+<SUBSECTION>
+G_STRINGIFY
+G_PASTE
+G_PASTE_ARGS
+G_STATIC_ASSERT
+
+<SUBSECTION>
+G_GNUC_EXTENSION
+G_GNUC_CONST
+G_GNUC_PURE
+G_GNUC_MALLOC
+G_GNUC_ALLOC_SIZE
+G_GNUC_ALLOC_SIZE2
+G_GNUC_DEPRECATED
+G_GNUC_NORETURN
+G_GNUC_UNUSED
+G_GNUC_PRINTF
+G_GNUC_SCANF
+G_GNUC_FORMAT
+G_GNUC_NULL_TERMINATED
+G_GNUC_WARN_UNUSED_RESULT
+G_GNUC_FUNCTION
+G_GNUC_PRETTY_FUNCTION
+G_GNUC_NO_INSTRUMENT
+G_HAVE_GNUC_VISIBILITY
+G_GNUC_INTERNAL
+G_GNUC_MAY_ALIAS
+
+<SUBSECTION>
+G_LIKELY
+G_UNLIKELY
+
+<SUBSECTION>
+G_STRLOC
+G_STRFUNC
+
+<SUBSECTION>
+G_GINT16_MODIFIER
+G_GINT16_FORMAT
+G_GUINT16_FORMAT
+G_GINT32_MODIFIER
+G_GINT32_FORMAT
+G_GUINT32_FORMAT
+G_GINT64_MODIFIER
+G_GINT64_FORMAT
+G_GUINT64_FORMAT
+G_GSIZE_MODIFIER
+G_GSIZE_FORMAT
+G_GSSIZE_FORMAT
+G_GOFFSET_MODIFIER
+G_GOFFSET_FORMAT
+
+<SUBSECTION Private>
+GLIB_VAR
+G_STRINGIFY_ARG
+G_HAVE_INLINE
+G_CAN_INLINE
+inline
+G_HAVE___INLINE
+G_HAVE___INLINE__
+G_HAVE_GNUC_VARARGS
+G_HAVE_ISO_VARARGS
+G_HAVE_GROWING_STACK
+</SECTION>
+
+<SECTION>
+<TITLE>Error Reporting</TITLE>
+<FILE>error_reporting</FILE>
+GError
+g_error_new
+g_error_new_literal
+g_error_free
+g_error_copy
+g_error_matches
+g_set_error
+g_set_error_literal
+g_propagate_error
+g_clear_error
+g_prefix_error
+g_propagate_prefixed_error
+</SECTION>
+
+<SECTION>
+<TITLE>The Main Event Loop</TITLE>
+<FILE>main</FILE>
+GMainLoop
+g_main_loop_new
+g_main_loop_ref
+g_main_loop_unref
+g_main_loop_run
+g_main_loop_quit
+g_main_loop_is_running
+g_main_loop_get_context
+g_main_new
+g_main_destroy
+g_main_run
+g_main_quit
+g_main_is_running
+
+<SUBSECTION>
+G_PRIORITY_HIGH
+G_PRIORITY_DEFAULT
+G_PRIORITY_HIGH_IDLE
+G_PRIORITY_DEFAULT_IDLE
+G_PRIORITY_LOW
+
+<SUBSECTION>
+GMainContext
+g_main_context_new
+g_main_context_ref
+g_main_context_unref
+g_main_context_default
+g_main_context_iteration
+g_main_iteration
+g_main_context_pending
+g_main_pending
+g_main_context_find_source_by_id
+g_main_context_find_source_by_user_data
+g_main_context_find_source_by_funcs_user_data
+g_main_context_wakeup
+g_main_context_acquire
+g_main_context_release
+g_main_context_is_owner
+g_main_context_wait
+g_main_context_prepare
+g_main_context_query
+g_main_context_check
+g_main_context_dispatch
+g_main_context_set_poll_func
+g_main_context_get_poll_func
+GPollFunc
+g_main_context_add_poll
+g_main_context_remove_poll
+g_main_depth
+g_main_current_source
+g_main_set_poll_func
+
+<SUBSECTION>
+g_timeout_source_new
+g_timeout_source_new_seconds
+g_timeout_add
+g_timeout_add_full
+g_timeout_add_seconds
+g_timeout_add_seconds_full
+
+<SUBSECTION>
+g_idle_source_new
+g_idle_add
+g_idle_add_full
+g_idle_remove_by_data
+
+<SUBSECTION>
+GPid
+GChildWatchFunc
+g_child_watch_source_new
+g_child_watch_add
+g_child_watch_add_full
+
+<SUBSECTION>
+GPollFD
+g_poll
+
+<SUBSECTION>
+GSource
+GSourceDummyMarshal
+GSourceFuncs
+GSourceCallbackFuncs
+g_source_new
+g_source_ref
+g_source_unref
+g_source_set_funcs
+g_source_attach
+g_source_destroy
+g_source_is_destroyed
+g_source_set_priority
+g_source_get_priority
+g_source_set_can_recurse
+g_source_get_can_recurse
+g_source_get_id
+g_source_get_context
+g_source_set_callback
+GSourceFunc
+g_source_set_callback_indirect
+g_source_add_poll
+g_source_remove_poll
+g_source_get_current_time
+g_source_remove
+g_source_remove_by_funcs_user_data
+g_source_remove_by_user_data
+
+<SUBSECTION Private>
+GLIB_HAVE_SYS_POLL_H
+GLIB_HAVE_ALLOCA_H
+alloca
+GLIB_SYSDEF_POLLERR
+GLIB_SYSDEF_POLLHUP
+GLIB_SYSDEF_POLLIN
+GLIB_SYSDEF_POLLNVAL
+GLIB_SYSDEF_POLLOUT
+GLIB_SYSDEF_POLLPRI
+G_WIN32_MSG_HANDLE
+g_idle_funcs
+g_timeout_funcs
+g_child_watch_funcs
+</SECTION>
+
+<SECTION>
+<TITLE>Threads</TITLE>
+<FILE>threads</FILE>
+<SUBSECTION>
+G_THREADS_ENABLED
+G_THREADS_IMPL_POSIX
+G_THREADS_IMPL_NONE
+
+<SUBSECTION>
+G_THREAD_ERROR
+GThreadError
+
+<SUBSECTION>
+GThreadFunctions
+g_thread_init
+g_thread_supported
+g_thread_get_initialized
+
+<SUBSECTION>
+GThreadFunc
+GThreadPriority
+GThread
+g_thread_create
+g_thread_create_full
+g_thread_self
+g_thread_join
+g_thread_set_priority
+g_thread_yield
+g_thread_exit
+g_thread_foreach
+
+<SUBSECTION>
+GMutex
+g_mutex_new
+g_mutex_lock
+g_mutex_trylock
+g_mutex_unlock
+g_mutex_free
+
+<SUBSECTION>
+GStaticMutex
+G_STATIC_MUTEX_INIT
+g_static_mutex_init
+g_static_mutex_lock
+g_static_mutex_trylock
+g_static_mutex_unlock
+g_static_mutex_get_mutex
+g_static_mutex_free
+
+<SUBSECTION>
+G_LOCK_DEFINE
+G_LOCK_DEFINE_STATIC
+G_LOCK_EXTERN
+G_LOCK
+G_TRYLOCK
+G_UNLOCK
+
+<SUBSECTION>
+GStaticRecMutex
+G_STATIC_REC_MUTEX_INIT
+g_static_rec_mutex_init
+g_static_rec_mutex_lock
+g_static_rec_mutex_trylock
+g_static_rec_mutex_unlock
+g_static_rec_mutex_lock_full
+g_static_rec_mutex_unlock_full
+g_static_rec_mutex_free
+
+<SUBSECTION>
+GStaticRWLock
+G_STATIC_RW_LOCK_INIT
+g_static_rw_lock_init
+g_static_rw_lock_reader_lock
+g_static_rw_lock_reader_trylock
+g_static_rw_lock_reader_unlock
+g_static_rw_lock_writer_lock
+g_static_rw_lock_writer_trylock
+g_static_rw_lock_writer_unlock
+g_static_rw_lock_free
+
+<SUBSECTION>
+GCond
+g_cond_new
+g_cond_signal
+g_cond_broadcast
+g_cond_wait
+g_cond_timed_wait
+g_cond_free
+
+<SUBSECTION>
+GPrivate
+g_private_new
+g_private_get
+g_private_set
+
+<SUBSECTION>
+GStaticPrivate
+G_STATIC_PRIVATE_INIT
+g_static_private_init
+g_static_private_get
+g_static_private_set
+g_static_private_free
+
+<SUBSECTION>
+GOnce
+GOnceStatus
+G_ONCE_INIT
+g_once
+g_once_init_enter
+g_once_init_leave
+
+<SUBSECTION Private>
+G_THREAD_ECF
+G_THREAD_CF
+G_THREAD_UF
+g_static_mutex_get_mutex_impl
+g_static_mutex_get_mutex_impl_shortcut
+G_MUTEX_DEBUG_MAGIC
+g_thread_init_with_errorcheck_mutexes
+G_LOCK_NAME
+glib_dummy_decl
+GSystemThread
+g_thread_use_default_impl
+g_threads_got_initialized
+g_thread_functions_for_glib_use
+g_thread_init_glib
+g_thread_error_quark
+g_once_impl
+g_once_init_enter_impl
+atexit
+g_system_thread_assign
+g_system_thread_equal
+g_system_thread_equal_simple
+</SECTION>
+
+<SECTION>
+<TITLE>Thread Pools</TITLE>
+<FILE>thread_pools</FILE>
+GThreadPool
+g_thread_pool_new
+g_thread_pool_push
+g_thread_pool_set_max_threads
+g_thread_pool_get_max_threads
+g_thread_pool_get_num_threads
+g_thread_pool_unprocessed
+g_thread_pool_free
+g_thread_pool_set_max_unused_threads
+g_thread_pool_get_max_unused_threads
+g_thread_pool_get_num_unused_threads
+g_thread_pool_stop_unused_threads
+g_thread_pool_set_sort_function
+g_thread_pool_set_max_idle_time
+g_thread_pool_get_max_idle_time
+</SECTION>
+
+<SECTION>
+<TITLE>Asynchronous Queues</TITLE>
+<FILE>async_queues</FILE>
+GAsyncQueue
+g_async_queue_new
+g_async_queue_new_full
+g_async_queue_ref
+g_async_queue_unref
+g_async_queue_push
+g_async_queue_push_sorted
+g_async_queue_pop
+g_async_queue_try_pop
+g_async_queue_timed_pop
+g_async_queue_length
+g_async_queue_sort
+
+<SUBSECTION>
+g_async_queue_lock
+g_async_queue_unlock
+g_async_queue_ref_unlocked
+g_async_queue_unref_and_unlock
+g_async_queue_push_unlocked
+g_async_queue_push_sorted_unlocked
+g_async_queue_pop_unlocked
+g_async_queue_try_pop_unlocked
+g_async_queue_timed_pop_unlocked
+g_async_queue_length_unlocked
+g_async_queue_sort_unlocked
+</SECTION>
+
+<SECTION>
+<TITLE>Atomic Operations</TITLE>
+<FILE>atomic_operations</FILE>g
+g_atomic_int_get
+g_atomic_int_set
+g_atomic_int_add
+g_atomic_int_exchange_and_add
+g_atomic_int_compare_and_exchange
+g_atomic_pointer_get
+g_atomic_pointer_set
+g_atomic_pointer_compare_and_exchange
+g_atomic_int_inc
+g_atomic_int_dec_and_test
+</SECTION>
+
+<SECTION>
+<TITLE>IO Channels</TITLE>
+<FILE>iochannels</FILE>
+GIOChannel
+
+<SUBSECTION>
+g_io_channel_unix_new
+g_io_channel_unix_get_fd
+g_io_channel_win32_new_fd
+g_io_channel_win32_new_socket
+g_io_channel_win32_new_messages
+
+<SUBSECTION>
+g_io_channel_init
+
+<SUBSECTION>
+g_io_channel_new_file
+g_io_channel_read_chars
+g_io_channel_read_unichar
+g_io_channel_read_line
+g_io_channel_read_line_string
+g_io_channel_read_to_end
+g_io_channel_write_chars
+g_io_channel_write_unichar
+g_io_channel_flush
+g_io_channel_seek_position
+GSeekType
+g_io_channel_shutdown
+
+<SUBSECTION>
+GIOStatus
+GIOChannelError
+G_IO_CHANNEL_ERROR
+g_io_channel_error_from_errno
+
+<SUBSECTION>
+g_io_channel_ref
+g_io_channel_unref
+
+<SUBSECTION>
+g_io_create_watch
+g_io_add_watch
+g_io_add_watch_full
+GIOCondition
+GIOFunc
+
+<SUBSECTION>
+GIOFuncs
+
+<SUBSECTION>
+g_io_channel_get_buffer_size
+g_io_channel_set_buffer_size
+g_io_channel_get_buffer_condition
+g_io_channel_get_flags
+g_io_channel_set_flags
+GIOFlags
+g_io_channel_get_line_term
+g_io_channel_set_line_term
+g_io_channel_get_buffered
+g_io_channel_set_buffered
+g_io_channel_get_encoding
+g_io_channel_set_encoding
+g_io_channel_get_close_on_unref
+g_io_channel_set_close_on_unref
+
+<SUBSECTION Private>
+g_io_channel_win32_poll
+g_io_channel_win32_make_pollfd
+g_io_channel_win32_get_fd
+ 
+<SUBSECTION>
+g_io_channel_read
+GIOError
+g_io_channel_write
+g_io_channel_seek
+g_io_channel_close
+
+<SUBSECTION Private>
+g_io_channel_error_quark
+g_io_watch_funcs
+</SECTION>
+
+<SECTION>
+<TITLE>Memory Allocation</TITLE>
+<FILE>memory</FILE>
+g_new
+g_new0
+g_renew
+g_try_new
+g_try_new0
+g_try_renew
+
+<SUBSECTION>
+g_malloc
+g_malloc0
+g_realloc
+g_try_malloc
+g_try_malloc0
+g_try_realloc
+
+<SUBSECTION>
+g_free
+g_mem_gc_friendly
+
+<SUBSECTION>
+g_alloca
+g_newa
+
+<SUBSECTION>
+g_memmove
+g_memdup
+
+<SUBSECTION>
+GMemVTable
+g_mem_set_vtable
+g_mem_is_system_malloc
+
+<SUBSECTION>
+glib_mem_profiler_table
+g_mem_profile
+</SECTION>
+
+<SECTION>
+<TITLE>Warnings and Assertions</TITLE>
+<FILE>warnings</FILE>
+g_print
+g_set_print_handler
+GPrintFunc
+
+<SUBSECTION>
+g_printerr
+g_set_printerr_handler
+
+<SUBSECTION>
+g_return_if_fail
+g_return_val_if_fail
+g_return_if_reached
+g_return_val_if_reached
+g_warn_if_fail
+g_warn_if_reached
+
+<SUBSECTION>
+g_on_error_query
+g_on_error_stack_trace
+
+<SUBSECTION>
+G_BREAKPOINT
+
+<SUBSECTION Private>
+g_return_if_fail_warning
+g_assert_warning
+g_warn_message
+</SECTION>
+
+<SECTION>
+<TITLE>Glob-style pattern matching</TITLE>
+<FILE>patterns</FILE>
+GPatternSpec
+g_pattern_spec_new
+g_pattern_spec_free
+g_pattern_spec_equal
+g_pattern_match
+g_pattern_match_string
+g_pattern_match_simple
+</SECTION>
+
+<SECTION>
+<TITLE>Perl-compatible regular expressions</TITLE>
+<FILE>gregex</FILE>
+GRegexError
+G_REGEX_ERROR
+GRegexCompileFlags
+GRegexMatchFlags
+GRegex
+GRegexEvalCallback
+g_regex_new
+g_regex_ref
+g_regex_unref
+g_regex_get_pattern
+g_regex_get_max_backref
+g_regex_get_capture_count
+g_regex_get_string_number
+g_regex_escape_string
+g_regex_match_simple
+g_regex_match
+g_regex_match_full
+g_regex_match_all
+g_regex_match_all_full
+g_regex_split_simple
+g_regex_split
+g_regex_split_full
+g_regex_replace
+g_regex_replace_literal
+g_regex_replace_eval
+g_regex_check_replacement
+GMatchInfo
+g_match_info_get_regex
+g_match_info_get_string
+g_match_info_free
+g_match_info_matches
+g_match_info_next
+g_match_info_get_match_count
+g_match_info_is_partial_match
+g_match_info_expand_references
+g_match_info_fetch
+g_match_info_fetch_pos
+g_match_info_fetch_named
+g_match_info_fetch_named_pos
+g_match_info_fetch_all
+<SUBSECTION Private>
+g_regex_error_quark
+</SECTION>
+
+<SECTION>
+<TITLE>Message Logging</TITLE>
+<FILE>messages</FILE>
+G_LOG_DOMAIN
+G_LOG_FATAL_MASK
+G_LOG_LEVEL_USER_SHIFT
+GLogFunc
+GLogLevelFlags
+
+<SUBSECTION>
+g_log
+g_logv
+g_message
+g_warning
+g_critical
+g_error
+g_debug
+
+<SUBSECTION>
+g_log_set_handler
+g_log_remove_handler
+g_log_set_always_fatal
+g_log_set_fatal_mask
+g_log_default_handler
+g_log_set_default_handler
+</SECTION>
+
+<SECTION>
+<TITLE>Timers</TITLE>
+<FILE>timers</FILE>
+GTimer
+g_timer_new
+g_timer_start
+g_timer_stop
+g_timer_continue
+g_timer_elapsed
+g_timer_reset
+g_timer_destroy
+</SECTION>
+
+<SECTION>
+<TITLE>Spawning Processes</TITLE>
+<FILE>spawn</FILE>
+GSpawnError
+G_SPAWN_ERROR
+GSpawnFlags
+GSpawnChildSetupFunc
+g_spawn_async_with_pipes
+g_spawn_async
+g_spawn_sync
+g_spawn_command_line_async
+g_spawn_command_line_sync
+g_spawn_close_pid
+<SUBSECTION Private>
+g_spawn_error_quark
+</SECTION>
+
+<SECTION>
+<TITLE>Simple XML Subset Parser</TITLE>
+<FILE>markup</FILE>
+GMarkupError
+G_MARKUP_ERROR
+GMarkupParseFlags
+GMarkupParseContext
+GMarkupParser
+g_markup_escape_text
+g_markup_printf_escaped
+g_markup_vprintf_escaped
+g_markup_parse_context_end_parse
+g_markup_parse_context_free
+g_markup_parse_context_get_position
+g_markup_parse_context_get_element
+g_markup_parse_context_get_element_stack
+g_markup_parse_context_get_user_data
+g_markup_parse_context_new
+g_markup_parse_context_parse
+g_markup_parse_context_push
+g_markup_parse_context_pop
+<SUBSECTION>
+GMarkupCollectType
+g_markup_collect_attributes
+<SUBSECTION Private>
+g_markup_error_quark
+</SECTION>
+
+
+<SECTION>
+<TITLE>Shell-related Utilities</TITLE>
+<FILE>shell</FILE>
+GShellError
+G_SHELL_ERROR
+g_shell_parse_argv
+g_shell_quote
+g_shell_unquote
+<SUBSECTION Private>
+g_shell_error_quark
+</SECTION>
+
+
+<SECTION>
+<TITLE>Commandline option parser</TITLE>
+<FILE>option</FILE>
+GOptionError
+G_OPTION_ERROR
+GOptionArgFunc
+GOptionContext
+g_option_context_new
+g_option_context_set_summary
+g_option_context_get_summary
+g_option_context_set_description
+g_option_context_get_description
+GTranslateFunc
+g_option_context_set_translate_func
+g_option_context_set_translation_domain
+g_option_context_free
+g_option_context_parse
+g_option_context_set_help_enabled
+g_option_context_get_help_enabled
+g_option_context_set_ignore_unknown_options
+g_option_context_get_ignore_unknown_options
+g_option_context_get_help
+GOptionArg
+GOptionFlags
+G_OPTION_REMAINING
+GOptionEntry
+g_option_context_add_main_entries
+GOptionGroup
+g_option_context_add_group
+g_option_context_set_main_group
+g_option_context_get_main_group
+g_option_group_new
+g_option_group_free
+g_option_group_add_entries
+GOptionParseFunc
+g_option_group_set_parse_hooks
+GOptionErrorFunc
+g_option_group_set_error_hook
+g_option_group_set_translate_func
+g_option_group_set_translation_domain
+<SUBSECTION Private>
+g_option_error_quark
+</SECTION>
+
+
+<SECTION>
+<TITLE>File Utilities</TITLE>
+<FILE>fileutils</FILE>
+<INCLUDE>glib.h,glib/gstdio.h</INCLUDE>
+GFileError
+G_FILE_ERROR
+GFileTest
+g_file_error_from_errno
+g_file_get_contents
+g_file_set_contents
+g_file_test
+g_mkstemp
+g_file_open_tmp
+g_file_read_link
+g_mkdir_with_parents
+
+<SUBSECTION>
+GDir
+g_dir_open
+g_dir_read_name
+g_dir_rewind
+g_dir_close
+
+<SUBSECTION>
+GMappedFile
+g_mapped_file_new
+g_mapped_file_free
+g_mapped_file_get_length
+g_mapped_file_get_contents
+
+<SUBSECTION>
+g_open
+g_rename
+g_mkdir
+g_stat
+g_lstat
+g_unlink
+g_remove
+g_rmdir
+g_fopen
+g_freopen
+g_chmod
+g_access
+g_creat
+g_chdir
+g_utime
+
+<SUBSECTION Private>
+g_file_error_quark
+</SECTION>
+
+
+<SECTION>
+<TITLE>String Utility Functions</TITLE>
+<FILE>string_utils</FILE>
+<INCLUDE>glib.h,glib/gprintf.h</INCLUDE>
+g_strdup
+g_strndup
+g_strdupv
+g_strnfill
+g_stpcpy
+g_strstr_len
+g_strrstr
+g_strrstr_len
+g_str_has_prefix
+g_str_has_suffix
+g_strcmp0
+
+<SUBSECTION>
+g_strlcpy
+g_strlcat
+
+<SUBSECTION>
+g_strdup_printf
+g_strdup_vprintf
+g_printf
+g_vprintf
+g_fprintf
+g_vfprintf
+g_sprintf
+g_vsprintf
+g_snprintf
+g_vsnprintf
+g_vasprintf
+g_printf_string_upper_bound
+
+<SUBSECTION>
+g_ascii_isalnum
+g_ascii_isalpha
+g_ascii_iscntrl
+g_ascii_isdigit
+g_ascii_isgraph
+g_ascii_islower
+g_ascii_isprint
+g_ascii_ispunct
+g_ascii_isspace
+g_ascii_isupper
+g_ascii_isxdigit
+
+<SUBSECTION>
+g_ascii_digit_value
+g_ascii_xdigit_value
+
+<SUBSECTION>
+g_ascii_strcasecmp
+g_ascii_strncasecmp
+
+<SUBSECTION>
+g_ascii_strup
+g_ascii_strdown
+
+<SUBSECTION>
+g_ascii_tolower
+g_ascii_toupper
+
+<SUBSECTION>
+g_string_ascii_up
+g_string_ascii_down
+
+<SUBSECTION>
+g_strup
+g_strdown
+
+<SUBSECTION>
+g_strcasecmp
+g_strncasecmp
+
+<SUBSECTION>
+g_strreverse
+
+<SUBSECTION>
+g_ascii_strtoll
+g_ascii_strtoull
+G_ASCII_DTOSTR_BUF_SIZE
+g_ascii_strtod
+g_ascii_dtostr
+g_ascii_formatd
+g_strtod
+
+<SUBSECTION>
+g_strchug
+g_strchomp
+g_strstrip
+
+<SUBSECTION>
+g_strdelimit
+G_STR_DELIMITERS
+g_strescape
+g_strcompress
+g_strcanon
+g_strsplit
+g_strsplit_set
+g_strfreev
+g_strconcat
+g_strjoin
+g_strjoinv
+g_strv_length
+
+<SUBSECTION>
+g_strerror
+g_strsignal
+
+<SUBSECTION Private>
+GAsciiType
+</SECTION>
+
+<SECTION>
+<TITLE>Date and Time Functions</TITLE>
+<FILE>date</FILE>
+G_USEC_PER_SEC
+GTimeVal
+g_get_current_time
+g_usleep
+g_time_val_add
+g_time_val_from_iso8601
+g_time_val_to_iso8601
+
+<SUBSECTION>
+GDate
+GTime
+GDateDMY
+GDateDay
+GDateMonth
+GDateYear
+GDateWeekday
+
+<SUBSECTION>
+G_DATE_BAD_DAY
+G_DATE_BAD_JULIAN
+G_DATE_BAD_YEAR
+
+<SUBSECTION>
+g_date_new
+g_date_new_dmy
+g_date_new_julian
+g_date_clear
+g_date_free
+
+<SUBSECTION>
+g_date_set_day
+g_date_set_month
+g_date_set_year
+g_date_set_dmy
+g_date_set_julian
+g_date_set_time
+g_date_set_time_t
+g_date_set_time_val
+g_date_set_parse
+
+<SUBSECTION>
+g_date_add_days
+g_date_subtract_days
+g_date_add_months
+g_date_subtract_months
+g_date_add_years
+g_date_subtract_years
+g_date_days_between
+g_date_compare
+g_date_clamp
+g_date_order
+
+<SUBSECTION>
+g_date_get_day
+g_date_get_month
+g_date_get_year
+g_date_get_julian
+g_date_get_weekday
+g_date_get_day_of_year
+
+<SUBSECTION>
+g_date_get_days_in_month
+g_date_is_first_of_month
+g_date_is_last_of_month
+g_date_is_leap_year
+g_date_get_monday_week_of_year
+g_date_get_monday_weeks_in_year
+g_date_get_sunday_week_of_year
+g_date_get_sunday_weeks_in_year
+g_date_get_iso8601_week_of_year
+
+<SUBSECTION>
+g_date_strftime
+g_date_to_struct_tm
+
+<SUBSECTION>
+g_date_valid
+g_date_valid_day
+g_date_valid_month
+g_date_valid_year
+g_date_valid_dmy
+g_date_valid_julian
+g_date_valid_weekday
+
+<SUBSECTION Private>
+g_date_weekday
+g_date_month
+g_date_year
+g_date_day
+g_date_julian
+g_date_day_of_year
+g_date_monday_week_of_year
+g_date_sunday_week_of_year
+g_date_days_in_month
+g_date_monday_weeks_in_year
+g_date_sunday_weeks_in_year
+tm
+</SECTION>
+
+<SECTION>
+<TITLE>Hook Functions</TITLE>
+<FILE>hooks</FILE>
+GHookList
+GHookFinalizeFunc
+GHook
+GHookFunc
+GHookCheckFunc
+
+<SUBSECTION>
+g_hook_list_init
+g_hook_list_invoke
+g_hook_list_invoke_check
+g_hook_list_marshal
+GHookMarshaller
+g_hook_list_marshal_check
+GHookCheckMarshaller
+g_hook_list_clear
+
+<SUBSECTION>
+g_hook_alloc
+g_hook_append
+g_hook_prepend
+g_hook_insert_before
+g_hook_insert_sorted
+GHookCompareFunc
+g_hook_compare_ids
+
+<SUBSECTION>
+g_hook_get
+g_hook_find
+GHookFindFunc
+g_hook_find_data
+g_hook_find_func
+g_hook_find_func_data
+
+<SUBSECTION>
+g_hook_first_valid
+g_hook_next_valid
+
+GHookFlagMask
+G_HOOK_FLAGS
+G_HOOK_FLAG_USER_SHIFT
+
+<SUBSECTION>
+G_HOOK
+G_HOOK_IS_VALID
+G_HOOK_ACTIVE
+G_HOOK_IN_CALL
+G_HOOK_IS_UNLINKED
+
+<SUBSECTION>
+g_hook_ref
+g_hook_unref
+
+g_hook_free
+g_hook_destroy
+g_hook_destroy_link
+</SECTION>
+
+<SECTION>
+<TITLE>Miscellaneous Utility Functions</TITLE>
+<FILE>misc_utils</FILE>
+g_get_application_name
+g_set_application_name
+g_get_prgname
+g_set_prgname
+g_getenv
+g_setenv
+g_unsetenv
+g_listenv
+g_get_user_name
+g_get_real_name
+g_get_user_cache_dir
+g_get_user_data_dir
+g_get_user_config_dir
+GUserDirectory
+g_get_user_special_dir
+g_get_system_data_dirs
+g_get_system_config_dirs
+
+<SUBSECTION>
+g_get_host_name
+g_get_home_dir
+g_get_tmp_dir
+g_get_current_dir
+g_basename
+g_dirname
+g_path_is_absolute
+g_path_skip_root
+g_path_get_basename
+g_path_get_dirname
+g_build_filename
+g_build_filenamev
+g_build_path
+g_build_pathv
+g_format_size_for_display
+
+<SUBSECTION>
+g_find_program_in_path
+
+<SUBSECTION>
+g_bit_nth_lsf
+g_bit_nth_msf
+g_bit_storage
+
+<SUBSECTION>
+g_spaced_primes_closest
+
+<SUBSECTION>
+g_atexit
+
+<SUBSECTION>
+g_parse_debug_string
+GDebugKey
+
+<SUBSECTION>
+GVoidFunc
+GFreeFunc
+
+<SUBSECTION>
+g_qsort_with_data
+
+<SUBSECTION>
+g_nullify_pointer
+
+<SUBSECTION Private>
+G_NATIVE_ATEXIT
+g_ATEXIT
+g_win32_get_system_data_dirs_for_module
+ATEXIT
+
+</SECTION>
+
+<SECTION>
+<TITLE>Lexical Scanner</TITLE>
+<FILE>scanner</FILE>
+GScanner
+GScannerConfig
+g_scanner_new
+g_scanner_destroy
+
+<SUBSECTION>
+g_scanner_input_file
+g_scanner_sync_file_offset
+g_scanner_input_text
+g_scanner_peek_next_token
+g_scanner_get_next_token
+g_scanner_eof
+
+<SUBSECTION>
+g_scanner_cur_line
+g_scanner_cur_position
+g_scanner_cur_token
+g_scanner_cur_value
+
+<SUBSECTION>
+g_scanner_set_scope
+g_scanner_scope_add_symbol
+g_scanner_scope_foreach_symbol
+g_scanner_scope_lookup_symbol
+g_scanner_scope_remove_symbol
+g_scanner_add_symbol
+g_scanner_remove_symbol
+g_scanner_foreach_symbol
+
+<SUBSECTION>
+g_scanner_freeze_symbol_table
+g_scanner_thaw_symbol_table
+g_scanner_lookup_symbol
+
+<SUBSECTION>
+g_scanner_warn
+g_scanner_error
+g_scanner_unexp_token
+GScannerMsgFunc
+
+<SUBSECTION>
+G_CSET_a_2_z
+G_CSET_A_2_Z
+G_CSET_DIGITS
+G_CSET_LATINC
+G_CSET_LATINS
+GTokenType
+GTokenValue
+GErrorType
+
+</SECTION>
+
+<SECTION>
+<TITLE>Key-value file parser</TITLE>
+<FILE>keyfile</FILE>
+GKeyFile
+G_KEY_FILE_ERROR
+GKeyFileError
+GKeyFileFlags
+
+<SUBSECTION>
+g_key_file_new
+g_key_file_free
+g_key_file_set_list_separator
+g_key_file_load_from_file
+g_key_file_load_from_data
+g_key_file_load_from_data_dirs
+g_key_file_load_from_dirs
+g_key_file_to_data
+g_key_file_get_start_group
+g_key_file_get_groups
+g_key_file_get_keys
+g_key_file_has_group
+g_key_file_has_key
+
+<SUBSECTION>
+g_key_file_get_value
+g_key_file_get_string
+g_key_file_get_locale_string
+g_key_file_get_boolean
+g_key_file_get_integer
+g_key_file_get_double
+g_key_file_get_string_list
+g_key_file_get_locale_string_list
+g_key_file_get_boolean_list
+g_key_file_get_integer_list
+g_key_file_get_double_list
+g_key_file_get_comment
+
+<SUBSECTION>
+g_key_file_set_value
+g_key_file_set_string
+g_key_file_set_locale_string
+g_key_file_set_boolean
+g_key_file_set_integer
+g_key_file_set_double
+g_key_file_set_string_list
+g_key_file_set_locale_string_list
+g_key_file_set_boolean_list
+g_key_file_set_integer_list
+g_key_file_set_double_list
+g_key_file_set_comment
+g_key_file_remove_group
+g_key_file_remove_key
+g_key_file_remove_comment
+
+<SUBSECTION>
+G_KEY_FILE_DESKTOP_GROUP
+G_KEY_FILE_DESKTOP_KEY_TYPE
+G_KEY_FILE_DESKTOP_KEY_VERSION
+G_KEY_FILE_DESKTOP_KEY_NAME
+G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME
+G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY
+G_KEY_FILE_DESKTOP_KEY_COMMENT
+G_KEY_FILE_DESKTOP_KEY_ICON
+G_KEY_FILE_DESKTOP_KEY_HIDDEN
+G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN
+G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN
+G_KEY_FILE_DESKTOP_KEY_TRY_EXEC
+G_KEY_FILE_DESKTOP_KEY_EXEC
+G_KEY_FILE_DESKTOP_KEY_PATH
+G_KEY_FILE_DESKTOP_KEY_TERMINAL
+G_KEY_FILE_DESKTOP_KEY_MIME_TYPE
+G_KEY_FILE_DESKTOP_KEY_CATEGORIES
+G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY
+G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS
+G_KEY_FILE_DESKTOP_KEY_URL
+G_KEY_FILE_DESKTOP_TYPE_APPLICATION
+G_KEY_FILE_DESKTOP_TYPE_LINK
+G_KEY_FILE_DESKTOP_TYPE_DIRECTORY
+
+<SUBSECTION Private>
+g_key_file_error_quark
+</SECTION>
+
+<SECTION>
+<TITLE>Bookmark file parser</TITLE>
+<FILE>bookmarkfile</FILE>
+GBookmarkFile
+G_BOOKMARK_FILE_ERROR
+GBookmarkFileError
+g_bookmark_file_new
+g_bookmark_file_free
+g_bookmark_file_load_from_file
+g_bookmark_file_load_from_data
+g_bookmark_file_load_from_data_dirs
+g_bookmark_file_to_data
+g_bookmark_file_to_file
+g_bookmark_file_has_item
+g_bookmark_file_has_group
+g_bookmark_file_has_application
+g_bookmark_file_get_size
+g_bookmark_file_get_uris G_GNUC_MALLOC
+
+<SUBSECTION>
+g_bookmark_file_get_title
+g_bookmark_file_get_description
+g_bookmark_file_get_mime_type
+g_bookmark_file_get_is_private
+g_bookmark_file_get_icon
+g_bookmark_file_get_added
+g_bookmark_file_get_modified
+g_bookmark_file_get_visited
+g_bookmark_file_get_groups
+g_bookmark_file_get_applications
+g_bookmark_file_get_app_info
+
+<SUBSECTION>
+g_bookmark_file_set_title
+g_bookmark_file_set_description
+g_bookmark_file_set_mime_type
+g_bookmark_file_set_is_private
+g_bookmark_file_set_icon
+g_bookmark_file_set_added
+g_bookmark_file_set_groups
+g_bookmark_file_set_modified
+g_bookmark_file_set_visited
+g_bookmark_file_set_app_info
+g_bookmark_file_add_group
+g_bookmark_file_add_application
+g_bookmark_file_remove_group
+g_bookmark_file_remove_application
+g_bookmark_file_remove_item
+g_bookmark_file_move_item
+
+<SUBSECTION Private>
+g_bookmark_file_error_quark
+</SECTION>
+
+<SECTION>
+<TITLE>Dynamic Loading of Modules</TITLE>
+<FILE>modules</FILE>
+<INCLUDE>gmodule.h</INCLUDE>
+GModule
+g_module_supported
+g_module_build_path
+g_module_open
+GModuleFlags
+g_module_symbol
+g_module_name
+g_module_make_resident
+g_module_close
+g_module_error
+<SUBSECTION>
+GModuleCheckInit
+GModuleUnload
+G_MODULE_SUFFIX
+G_MODULE_EXPORT
+G_MODULE_IMPORT
+</SECTION>
+
+<SECTION>
+<TITLE>Automatic String Completion</TITLE>
+<FILE>completion</FILE>
+GCompletion
+g_completion_new
+GCompletionFunc
+g_completion_add_items
+g_completion_remove_items
+g_completion_clear_items
+g_completion_complete
+g_completion_complete_utf8
+g_completion_set_compare
+GCompletionStrncmpFunc
+g_completion_free
+</SECTION>
+
+<SECTION>
+<TITLE>Windows Compatibility Functions</TITLE>
+<FILE>windows</FILE>
+MAXPATHLEN
+
+g_win32_error_message
+g_win32_getlocale
+g_win32_get_package_installation_directory
+g_win32_get_package_installation_directory_of_module
+g_win32_get_package_installation_subdirectory
+g_win32_get_windows_version
+g_win32_locale_filename_from_utf8
+G_WIN32_DLLMAIN_FOR_DLL_NAME
+G_WIN32_HAVE_WIDECHAR_API
+G_WIN32_IS_NT_BASED
+
+<SUBSECTION Private>
+g_win32_ftruncate
+
+</SECTION>
+
+# Data Structures
+
+<SECTION>
+<TITLE>Memory Chunks</TITLE>
+<FILE>memory_chunks</FILE>
+GMemChunk
+G_ALLOC_AND_FREE
+G_ALLOC_ONLY
+
+<SUBSECTION>
+g_mem_chunk_new
+g_mem_chunk_alloc
+g_mem_chunk_alloc0
+g_mem_chunk_free
+g_mem_chunk_destroy
+
+<SUBSECTION>
+g_mem_chunk_create
+g_chunk_new
+g_chunk_new0
+g_chunk_free
+
+<SUBSECTION>
+g_mem_chunk_reset
+g_mem_chunk_clean
+g_blow_chunks
+
+<SUBSECTION>
+g_mem_chunk_info
+g_mem_chunk_print
+
+</SECTION>
+
+<SECTION>
+<TITLE>Memory Slices</TITLE>
+<FILE>memory_slices</FILE>
+g_slice_alloc
+g_slice_alloc0
+g_slice_copy
+g_slice_free1
+g_slice_free_chain_with_offset
+
+<SUBSECTION>
+g_slice_new
+g_slice_new0
+g_slice_dup
+g_slice_free
+g_slice_free_chain
+
+<SUBSECTION Private>
+GSliceConfig
+g_slice_set_config
+g_slice_get_config
+g_slice_get_config_state
+</SECTION>
+
+<SECTION>
+<TITLE>Doubly-Linked Lists</TITLE>
+<FILE>linked_lists_double</FILE>
+GList
+
+<SUBSECTION>
+g_list_append
+g_list_prepend
+g_list_insert
+g_list_insert_before
+g_list_insert_sorted
+g_list_remove
+g_list_remove_link
+g_list_delete_link
+g_list_remove_all
+g_list_free
+
+<SUBSECTION>
+g_list_alloc
+g_list_free_1
+g_list_free1
+
+<SUBSECTION>
+g_list_length
+g_list_copy
+g_list_reverse
+g_list_sort
+GCompareFunc
+g_list_insert_sorted_with_data
+g_list_sort_with_data
+GCompareDataFunc
+g_list_concat
+g_list_foreach
+GFunc
+
+<SUBSECTION>
+g_list_first
+g_list_last
+g_list_previous
+g_list_next
+g_list_nth
+g_list_nth_data
+g_list_nth_prev
+
+<SUBSECTION>
+g_list_find
+g_list_find_custom
+g_list_position
+g_list_index
+
+<SUBSECTION>
+g_list_push_allocator
+g_list_pop_allocator
+</SECTION>
+
+<SECTION>
+<TITLE>Singly-Linked Lists</TITLE>
+<FILE>linked_lists_single</FILE>
+GSList
+
+<SUBSECTION>
+g_slist_alloc
+g_slist_append
+g_slist_prepend
+g_slist_insert
+g_slist_insert_before
+g_slist_insert_sorted
+g_slist_remove
+g_slist_remove_link
+g_slist_delete_link
+g_slist_remove_all
+g_slist_free
+g_slist_free_1
+g_slist_free1
+
+<SUBSECTION>
+g_slist_length
+g_slist_copy
+g_slist_reverse
+g_slist_insert_sorted_with_data
+g_slist_sort
+g_slist_sort_with_data
+g_slist_concat
+g_slist_foreach
+
+<SUBSECTION>
+g_slist_last
+g_slist_next
+g_slist_nth
+g_slist_nth_data
+
+<SUBSECTION>
+g_slist_find
+g_slist_find_custom
+g_slist_position
+g_slist_index
+
+<SUBSECTION>
+g_slist_push_allocator
+g_slist_pop_allocator
+</SECTION>
+
+<SECTION>
+<TITLE>Double-ended Queues</TITLE>
+<FILE>queue</FILE>
+
+GQueue
+g_queue_new
+g_queue_free
+G_QUEUE_INIT
+g_queue_init
+g_queue_clear
+g_queue_is_empty
+g_queue_get_length
+g_queue_reverse
+g_queue_copy
+g_queue_foreach
+g_queue_find
+g_queue_find_custom
+g_queue_sort
+g_queue_push_head
+g_queue_push_tail
+g_queue_push_nth
+g_queue_pop_head
+g_queue_pop_tail
+g_queue_pop_nth
+g_queue_peek_head
+g_queue_peek_tail
+g_queue_peek_nth
+g_queue_index
+g_queue_remove
+g_queue_remove_all
+g_queue_insert_before
+g_queue_insert_after
+g_queue_insert_sorted
+g_queue_push_head_link
+g_queue_push_tail_link
+g_queue_push_nth_link
+g_queue_pop_head_link
+g_queue_pop_tail_link
+g_queue_pop_nth_link
+g_queue_peek_head_link
+g_queue_peek_tail_link
+g_queue_peek_nth_link
+g_queue_link_index
+g_queue_unlink
+g_queue_delete_link
+</SECTION>
+
+<SECTION>
+<TITLE>Sequences</TITLE>
+<FILE>sequence</FILE>
+
+GSequence
+GSequenceIter
+GSequenceIterCompareFunc
+
+<SUBSECTION>
+g_sequence_new
+g_sequence_free
+g_sequence_get_length
+g_sequence_foreach
+g_sequence_foreach_range
+g_sequence_sort
+g_sequence_sort_iter
+
+<SUBSECTION>
+g_sequence_get_begin_iter
+g_sequence_get_end_iter
+g_sequence_get_iter_at_pos
+g_sequence_append
+g_sequence_prepend
+g_sequence_insert_before
+g_sequence_move
+g_sequence_swap
+g_sequence_insert_sorted
+g_sequence_insert_sorted_iter
+g_sequence_sort_changed
+g_sequence_sort_changed_iter
+g_sequence_remove
+g_sequence_remove_range
+g_sequence_move_range
+g_sequence_search
+g_sequence_search_iter
+
+<SUBSECTION>
+g_sequence_get
+g_sequence_set
+
+<SUBSECTION>
+g_sequence_iter_is_begin
+g_sequence_iter_is_end
+g_sequence_iter_next
+g_sequence_iter_prev
+g_sequence_iter_get_position
+g_sequence_iter_move
+g_sequence_iter_get_sequence
+
+<SUBSECTION>
+g_sequence_iter_compare
+g_sequence_range_get_midpoint
+</SECTION>
+
+<SECTION>
+<TITLE>Trash Stacks</TITLE>
+<FILE>trash_stack</FILE>
+GTrashStack
+
+g_trash_stack_push
+g_trash_stack_pop
+g_trash_stack_peek
+g_trash_stack_height
+</SECTION>
+
+<SECTION>
+<TITLE>Hash Tables</TITLE>
+<FILE>hash_tables</FILE>
+GHashTable
+g_hash_table_new
+g_hash_table_new_full
+GHashFunc
+GEqualFunc
+g_hash_table_insert
+g_hash_table_replace
+g_hash_table_size
+g_hash_table_lookup
+g_hash_table_lookup_extended
+g_hash_table_foreach
+g_hash_table_find
+GHFunc
+g_hash_table_remove
+g_hash_table_steal
+g_hash_table_foreach_remove
+g_hash_table_foreach_steal
+g_hash_table_remove_all
+g_hash_table_steal_all
+g_hash_table_get_keys
+g_hash_table_get_values
+GHRFunc
+g_hash_table_freeze
+g_hash_table_thaw
+g_hash_table_destroy
+g_hash_table_ref
+g_hash_table_unref
+GHashTableIter
+g_hash_table_iter_init
+g_hash_table_iter_next
+g_hash_table_iter_get_hash_table
+g_hash_table_iter_remove
+g_hash_table_iter_steal
+
+<SUBSECTION>
+g_direct_equal
+g_direct_hash
+g_int_equal
+g_int_hash
+g_str_equal
+g_str_hash
+
+</SECTION>
+
+<SECTION>
+<TITLE>Strings</TITLE>
+<FILE>strings</FILE>
+GString
+g_string_new
+g_string_new_len
+g_string_sized_new
+g_string_assign
+g_string_sprintf
+g_string_sprintfa
+g_string_vprintf
+g_string_append_vprintf
+g_string_printf
+g_string_append_printf
+g_string_append
+g_string_append_c
+g_string_append_unichar
+g_string_append_len
+g_string_append_uri_escaped
+g_string_prepend
+g_string_prepend_c
+g_string_prepend_unichar
+g_string_prepend_len
+g_string_insert
+g_string_insert_c
+g_string_insert_unichar
+g_string_insert_len
+g_string_overwrite
+g_string_overwrite_len
+g_string_erase
+g_string_truncate
+g_string_set_size
+g_string_free
+
+<SUBSECTION>
+g_string_up
+g_string_down
+
+<SUBSECTION>
+g_string_hash
+g_string_equal
+
+</SECTION>
+
+<SECTION>
+<TITLE>String Chunks</TITLE>
+<FILE>string_chunks</FILE>
+GStringChunk
+g_string_chunk_new
+g_string_chunk_insert
+g_string_chunk_insert_const
+g_string_chunk_insert_len
+g_string_chunk_clear
+g_string_chunk_free
+
+</SECTION>
+
+<SECTION>
+<TITLE>Arrays</TITLE>
+<FILE>arrays</FILE>
+GArray
+g_array_new
+g_array_sized_new
+g_array_append_val
+g_array_append_vals
+g_array_prepend_val
+g_array_prepend_vals
+g_array_insert_val
+g_array_insert_vals
+g_array_remove_index
+g_array_remove_index_fast
+g_array_remove_range
+g_array_sort
+g_array_sort_with_data
+g_array_index
+g_array_set_size
+g_array_free
+</SECTION>
+
+<SECTION>
+<TITLE>Pointer Arrays</TITLE>
+<FILE>arrays_pointer</FILE>
+GPtrArray
+g_ptr_array_new
+g_ptr_array_sized_new
+g_ptr_array_add
+g_ptr_array_remove
+g_ptr_array_remove_index
+g_ptr_array_remove_fast
+g_ptr_array_remove_index_fast
+g_ptr_array_remove_range
+g_ptr_array_sort
+g_ptr_array_sort_with_data
+g_ptr_array_set_size
+g_ptr_array_index
+g_ptr_array_free
+g_ptr_array_foreach
+
+</SECTION>
+
+<SECTION>
+<TITLE>Byte Arrays</TITLE>
+<FILE>arrays_byte</FILE>
+GByteArray
+g_byte_array_new
+g_byte_array_sized_new
+g_byte_array_append
+g_byte_array_prepend
+g_byte_array_remove_index
+g_byte_array_remove_index_fast
+g_byte_array_remove_range
+g_byte_array_sort
+g_byte_array_sort_with_data
+g_byte_array_set_size
+g_byte_array_free
+
+</SECTION>
+
+<SECTION>
+<TITLE>Balanced Binary Trees</TITLE>
+<FILE>trees-binary</FILE>
+GTree
+g_tree_new
+g_tree_new_with_data
+g_tree_new_full
+g_tree_insert
+g_tree_replace
+g_tree_nnodes
+g_tree_height
+g_tree_lookup
+g_tree_lookup_extended
+g_tree_foreach
+g_tree_traverse
+GTraverseFunc
+GTraverseType
+g_tree_search
+g_tree_remove
+g_tree_steal
+g_tree_destroy
+</SECTION>
+
+<SECTION>
+<TITLE>N-ary Trees</TITLE>
+<FILE>trees-nary</FILE>
+GNode
+g_node_new
+g_node_copy
+GCopyFunc
+g_node_copy_deep
+
+<SUBSECTION>
+g_node_insert
+g_node_insert_before
+g_node_insert_after
+g_node_append
+g_node_prepend
+
+<SUBSECTION>
+g_node_insert_data
+g_node_insert_data_before
+g_node_append_data
+g_node_prepend_data
+
+<SUBSECTION>
+g_node_reverse_children
+g_node_traverse
+GTraverseFlags
+GNodeTraverseFunc
+g_node_children_foreach
+GNodeForeachFunc
+
+<SUBSECTION>
+g_node_get_root
+g_node_find
+g_node_find_child
+g_node_child_index
+g_node_child_position
+g_node_first_child
+g_node_last_child
+g_node_nth_child
+g_node_first_sibling
+g_node_next_sibling
+g_node_prev_sibling
+g_node_last_sibling
+
+<SUBSECTION>
+G_NODE_IS_LEAF
+G_NODE_IS_ROOT
+g_node_depth
+g_node_n_nodes
+g_node_n_children
+g_node_is_ancestor
+g_node_max_height
+
+<SUBSECTION>
+g_node_unlink
+g_node_destroy
+
+<SUBSECTION>
+g_node_push_allocator
+g_node_pop_allocator
+</SECTION>
+
+
+<SECTION>
+<TITLE>Quarks</TITLE>
+<FILE>quarks</FILE>
+GQuark
+g_quark_from_string
+g_quark_from_static_string
+g_quark_to_string
+g_quark_try_string
+g_intern_string
+g_intern_static_string
+</SECTION>
+
+<SECTION>
+<TITLE>Keyed Data Lists</TITLE>
+<FILE>datalist</FILE>
+GData
+g_datalist_init
+
+<SUBSECTION>
+g_datalist_id_set_data
+g_datalist_id_set_data_full
+g_datalist_id_get_data
+g_datalist_id_remove_data
+g_datalist_id_remove_no_notify
+
+<SUBSECTION>
+g_datalist_set_data
+g_datalist_set_data_full
+g_datalist_get_data
+g_datalist_remove_data
+g_datalist_remove_no_notify
+
+<SUBSECTION>
+g_datalist_foreach
+g_datalist_clear
+g_datalist_set_flags
+g_datalist_unset_flags
+g_datalist_get_flags
+G_DATALIST_FLAGS_MASK
+</SECTION>
+
+
+<SECTION>
+<TITLE>Datasets</TITLE>
+<FILE>datasets</FILE>
+g_dataset_id_set_data
+g_dataset_id_set_data_full
+GDestroyNotify
+g_dataset_id_get_data
+g_dataset_id_remove_data
+g_dataset_id_remove_no_notify
+
+<SUBSECTION>
+g_dataset_set_data
+g_dataset_set_data_full
+g_dataset_get_data
+g_dataset_remove_data
+g_dataset_remove_no_notify
+
+<SUBSECTION>
+g_dataset_foreach
+GDataForeachFunc
+g_dataset_destroy
+
+</SECTION>
+
+<SECTION>
+<TITLE>Relations and Tuples</TITLE>
+<FILE>relations</FILE>
+GRelation
+g_relation_new
+g_relation_index
+g_relation_insert
+g_relation_exists
+g_relation_count
+g_relation_select
+g_relation_delete
+g_relation_destroy
+
+<SUBSECTION>
+g_relation_print
+
+<SUBSECTION>
+GTuples
+g_tuples_destroy
+g_tuples_index
+</SECTION>
+
+<SECTION>
+<TITLE>Caches</TITLE>
+<FILE>caches</FILE>
+GCache
+g_cache_new
+g_cache_insert
+g_cache_remove
+g_cache_destroy
+
+<SUBSECTION>
+g_cache_key_foreach
+g_cache_value_foreach
+
+<SUBSECTION>
+GCacheDestroyFunc
+GCacheDupFunc
+GCacheNewFunc
+</SECTION>
+
+<SECTION>
+<TITLE>Memory Allocators</TITLE>
+<FILE>allocators</FILE>
+GAllocator
+g_allocator_new
+g_allocator_free
+
+<SUBSECTION Private>
+G_ALLOCATOR_LIST
+G_ALLOCATOR_NODE
+G_ALLOCATOR_SLIST
+</SECTION>
+
+<SECTION>
+<TITLE>Random Numbers</TITLE>
+<FILE>random_numbers</FILE>
+GRand
+g_rand_new_with_seed
+g_rand_new_with_seed_array
+g_rand_new
+g_rand_copy
+g_rand_free
+g_rand_set_seed
+g_rand_set_seed_array
+g_rand_boolean
+g_rand_int
+g_rand_int_range
+g_rand_double
+g_rand_double_range
+g_random_set_seed
+g_random_boolean
+g_random_int
+g_random_int_range
+g_random_double
+g_random_double_range
+</SECTION>
+
+<SECTION>
+<TITLE>Character Set Conversion</TITLE>
+<FILE>conversions</FILE>
+g_convert
+g_convert_with_fallback
+GIConv
+g_convert_with_iconv
+G_CONVERT_ERROR
+g_iconv_open
+g_iconv
+g_iconv_close
+g_locale_to_utf8
+g_filename_to_utf8
+g_filename_from_utf8
+g_filename_from_uri
+g_filename_to_uri
+g_get_filename_charsets
+g_filename_display_name
+g_filename_display_basename
+g_uri_list_extract_uris
+g_locale_from_utf8
+GConvertError
+
+<SUBSECTION>
+g_get_charset
+
+<SUBSECTION Private>
+g_convert_error_quark
+</SECTION>
+
+<SECTION>
+<TITLE>Unicode Manipulation</TITLE>
+<FILE>unicode</FILE>
+gunichar
+gunichar2
+
+<SUBSECTION>
+g_unichar_validate
+g_unichar_isalnum
+g_unichar_isalpha
+g_unichar_iscntrl
+g_unichar_isdefined
+g_unichar_isdigit
+g_unichar_isgraph
+g_unichar_islower
+g_unichar_ismark
+g_unichar_isprint
+g_unichar_ispunct
+g_unichar_isspace
+g_unichar_istitle
+g_unichar_isupper
+g_unichar_isxdigit
+g_unichar_iswide
+g_unichar_iswide_cjk
+g_unichar_iszerowidth
+g_unichar_toupper
+g_unichar_tolower
+g_unichar_totitle
+g_unichar_digit_value
+g_unichar_xdigit_value
+GUnicodeType
+g_unichar_type
+GUnicodeBreakType
+g_unichar_break_type
+g_unichar_combining_class
+g_unicode_canonical_ordering
+g_unicode_canonical_decomposition
+g_unichar_get_mirror_char
+GUnicodeScript
+g_unichar_get_script
+
+<SUBSECTION>
+g_utf8_next_char
+g_utf8_get_char
+g_utf8_get_char_validated
+g_utf8_offset_to_pointer
+g_utf8_pointer_to_offset
+g_utf8_prev_char
+g_utf8_find_next_char
+g_utf8_find_prev_char
+g_utf8_strlen
+g_utf8_strncpy
+g_utf8_strchr
+g_utf8_strrchr
+g_utf8_strreverse
+g_utf8_validate
+
+<SUBSECTION>
+g_utf8_strup
+g_utf8_strdown
+g_utf8_casefold
+g_utf8_normalize
+GNormalizeMode
+g_utf8_collate
+g_utf8_collate_key
+g_utf8_collate_key_for_filename
+
+<SUBSECTION>
+g_utf8_to_utf16
+g_utf8_to_ucs4
+g_utf8_to_ucs4_fast
+g_utf16_to_ucs4
+g_utf16_to_utf8
+g_ucs4_to_utf16
+g_ucs4_to_utf8
+g_unichar_to_utf8
+</SECTION>
+
+<SECTION>
+<TITLE>I18N</TITLE>
+<FILE>i18n</FILE>
+<INCLUDE>glib.h,glib/gi18n.h</INCLUDE>
+Q_
+C_
+N_
+NC_
+g_dgettext
+g_dngettext
+g_dpgettext
+g_dpgettext2
+g_strip_context
+<SUBSECTION>
+g_get_language_names
+</SECTION>
+
+<SECTION>
+<TITLE>Base64 Encoding</TITLE>
+<FILE>base64</FILE>
+g_base64_encode_step
+g_base64_encode_close
+g_base64_encode
+g_base64_decode_step
+g_base64_decode
+g_base64_decode_inplace
+</SECTION>
+
+<SECTION>
+<TITLE>URI Functions</TITLE>
+<FILE>gurifuncs</FILE>
+G_URI_RESERVED_CHARS_ALLOWED_IN_PATH
+G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT
+G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO
+G_URI_RESERVED_CHARS_GENERIC_DELIMITERS
+G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS
+g_uri_parse_scheme
+g_uri_escape_string
+g_uri_unescape_string
+g_uri_unescape_segment
+</SECTION>
+
+<SECTION>
+<TITLE>Data Checksums</TITLE>
+<FILE>checksum</FILE>
+GChecksumType
+g_checksum_type_get_length
+GChecksum
+g_checksum_new
+g_checksum_copy
+g_checksum_free
+g_checksum_reset
+g_checksum_update
+g_checksum_get_string
+g_checksum_get_digest
+<SUBSECTION>
+g_compute_checksum_for_data
+g_compute_checksum_for_string
+</SECTION>
+
+<SECTION>
+<TITLE>Testing</TITLE>
+<FILE>testing</FILE>
+g_test_minimized_result
+g_test_maximized_result
+g_test_init
+g_test_quick
+g_test_slow
+g_test_thorough
+g_test_perf
+g_test_verbose
+g_test_quiet
+g_test_run
+g_test_add_func
+g_test_add_data_func
+g_test_add
+
+g_test_message
+g_test_bug_base
+g_test_bug
+
+g_test_timer_start
+g_test_timer_elapsed
+g_test_timer_last
+
+g_test_queue_free
+g_test_queue_destroy
+g_test_queue_unref
+
+GTestTrapFlags
+g_test_trap_fork
+g_test_trap_has_passed
+g_test_trap_reached_timeout
+g_test_trap_assert_passed
+g_test_trap_assert_failed
+g_test_trap_assert_stdout
+g_test_trap_assert_stdout_unmatched
+g_test_trap_assert_stderr
+g_test_trap_assert_stderr_unmatched
+
+g_test_rand_bit
+g_test_rand_int
+g_test_rand_int_range
+g_test_rand_double
+g_test_rand_double_range
+
+g_assert
+g_assert_not_reached
+g_assert_cmpstr
+g_assert_cmpint
+g_assert_cmpuint
+g_assert_cmphex
+g_assert_cmpfloat
+g_assert_no_error
+g_assert_error
+
+GTestCase
+GTestSuite
+g_test_create_case
+g_test_create_suite
+g_test_get_root
+g_test_suite_add
+g_test_suite_add_suite
+g_test_run_suite
+
+<SUBSECTION Private>
+g_test_trap_assertions
+g_assertion_message
+g_assertion_message_expr
+g_assertion_message_cmpstr
+g_assertion_message_cmpnum
+g_assertion_message_error
+
+g_test_add_vtable
+GTestConfig
+g_test_config_vars
+GTestLogType
+GTestLogMsg
+GTestLogBuffer
+
+g_test_log_type_name
+g_test_log_buffer_new
+g_test_log_buffer_free
+g_test_log_buffer_push
+g_test_log_buffer_pop
+g_test_log_msg_free
+</SECTION>
diff --git a/docs/reference/glib/glib.types b/docs/reference/glib/glib.types
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/reference/glib/glib.types
diff --git a/docs/reference/glib/gtester-report.1 b/docs/reference/glib/gtester-report.1
new file mode 100644
index 0000000..49b8484
--- /dev/null
+++ b/docs/reference/glib/gtester-report.1
@@ -0,0 +1,44 @@
+'\" t
+.\"     Title: gtester-report
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.74.2 <http://docbook.sf.net/>
+.\"      Date: 03/13/2009
+.\"    Manual: [FIXME: manual]
+.\"    Source: [FIXME: source]
+.\"  Language: English
+.\"
+.TH "GTESTER\-REPORT" "1" "03/13/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gtester-report \- test report formatting utility
+.SH "SYNOPSIS"
+.HP \w'\fBgtester\-report\fR\ 'u
+\fBgtester\-report\fR [option...] [gtester\-log]
+.SH "DESCRIPTION"
+.PP
+\fBgtester\-report\fR
+is a script which converts the XML output generated by gtester into HTML\&.
+.SS "Options"
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+print help and exit
+.RE
+.PP
+\fB\-v\fR, \fB\-\-version\fR
+.RS 4
+print version information and exit
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgtester\fR(1)
diff --git a/docs/reference/glib/gtester-report.xml b/docs/reference/glib/gtester-report.xml
new file mode 100644
index 0000000..614341d
--- /dev/null
+++ b/docs/reference/glib/gtester-report.xml
@@ -0,0 +1,54 @@
+<refentry id="gtester-report">
+
+<refmeta>
+<refentrytitle>gtester-report</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>gtester-report</refname>
+<refpurpose>test report formatting utility</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>gtester-report</command>
+<arg choice="opt" rep="repeat">option</arg>
+<arg>gtester-log</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>gtester-report</command> is a script which converts
+the XML output generated by gtester into HTML.
+</para>
+
+<refsect2><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>-h</option>, <option>--help</option></term>
+<listitem><para>
+print help and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-v</option>, <option>--version</option></term>
+<listitem><para>
+print version information and exit
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</refsect2>
+</refsect1>
+
+<refsect1><title>See also</title>
+<para>
+<command>gtester</command>(1)
+</para>
+</refsect1>
+</refentry>
+
+
diff --git a/docs/reference/glib/gtester.1 b/docs/reference/glib/gtester.1
new file mode 100644
index 0000000..50c1022
--- /dev/null
+++ b/docs/reference/glib/gtester.1
@@ -0,0 +1,101 @@
+'\" t
+.\"     Title: gtester
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.74.2 <http://docbook.sf.net/>
+.\"      Date: 03/13/2009
+.\"    Manual: [FIXME: manual]
+.\"    Source: [FIXME: source]
+.\"  Language: English
+.\"
+.TH "GTESTER" "1" "03/13/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gtester \- test running utility
+.SH "SYNOPSIS"
+.HP \w'\fBgtester\fR\ 'u
+\fBgtester\fR [option...] [testprogram]
+.SH "DESCRIPTION"
+.PP
+\fBgtester\fR
+is a utility to run unit tests that have been written using the GLib test framework\&.
+.PP
+When called with the
+\fB\-o\fR
+option,
+\fBgtester\fR
+writes an XML report of the test results, which can be converted into HTML using the
+\fBgtester\-report\fR
+utility\&.
+.SS "Options"
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+print help and exit
+.RE
+.PP
+\fB\-v\fR, \fB\-\-version\fR
+.RS 4
+print version information and exit
+.RE
+.PP
+\fB\-\-g\-fatal\-warnings\fR
+.RS 4
+make warnings fatal
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-going\fR
+.RS 4
+continue running after tests failed
+.RE
+.PP
+\fB\-l\fR
+.RS 4
+list paths of available test cases
+.RE
+.PP
+\fB\-m=\fR\fB\fIMODE\fR\fR
+.RS 4
+run test cases in
+\fIMODE\fR, which can be perf, slow, thorough or quick\&. The default mode is quick\&.
+.RE
+.PP
+\fB\-p=\fR\fB\fITESTPATH\fR\fR
+.RS 4
+only run test cases matching
+\fITESTPATH\fR
+.RE
+.PP
+\fB\-\-seed=\fR\fB\fISEEDSTRING\fR\fR
+.RS 4
+run all test cases with random number seed
+\fISEEDSTRING\fR
+.RE
+.PP
+\fB\-o=\fR\fB\fILOGFILE\fR\fR
+.RS 4
+write the test log to
+\fILOGFILE\fR
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+suppress per test binary output
+.RE
+.PP
+\fB\-\-verbose\fR
+.RS 4
+report success per testcase
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgtester\-report\fR(1)
diff --git a/docs/reference/glib/gtester.xml b/docs/reference/glib/gtester.xml
new file mode 100644
index 0000000..840dbea
--- /dev/null
+++ b/docs/reference/glib/gtester.xml
@@ -0,0 +1,120 @@
+<refentry id="gtester">
+
+<refmeta>
+<refentrytitle>gtester</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>gtester</refname>
+<refpurpose>test running utility</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>gtester</command>
+<arg choice="opt" rep="repeat">option</arg>
+<arg>testprogram</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>gtester</command> is a utility to run unit tests that have
+been written using the GLib test framework.
+</para>
+<para>
+When called with the <option>-o</option> option, <command>gtester</command>
+writes an XML report of the test results, which can be converted
+into HTML using the <command>gtester-report</command> utility.
+</para>
+
+<refsect2><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>-h</option>, <option>--help</option></term>
+<listitem><para>
+print help and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-v</option>, <option>--version</option></term>
+<listitem><para>
+print version information and exit
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--g-fatal-warnings</option></term>
+<listitem><para>
+make warnings fatal
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-k</option>, <option>--keep-going</option></term>
+<listitem><para>
+continue running after tests failed
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-l</option></term>
+<listitem><para>
+list paths of available test cases
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-m=<replaceable>MODE</replaceable></option></term>
+<listitem><para>
+run test cases in <replaceable>MODE</replaceable>, which can be perf, slow, thorough or quick. The default mode is quick.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-p=<replaceable>TESTPATH</replaceable></option></term>
+<listitem><para>
+only run test cases matching <replaceable>TESTPATH</replaceable>
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--seed=<replaceable>SEEDSTRING</replaceable></option></term>
+<listitem><para>
+run all test cases with random number seed <replaceable>SEEDSTRING</replaceable>
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-o=<replaceable>LOGFILE</replaceable></option></term>
+<listitem><para>
+write the test log to <replaceable>LOGFILE</replaceable>
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-q</option>, <option>--quiet</option></term>
+<listitem><para>
+suppress per test binary output
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--verbose</option></term>
+<listitem><para>
+report success per testcase
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</refsect2>
+</refsect1>
+
+<refsect1><title>See also</title>
+<para>
+<command>gtester-report</command>(1)
+</para>
+</refsect1>
+</refentry>
diff --git a/docs/reference/glib/mainloop-states.eps b/docs/reference/glib/mainloop-states.eps
new file mode 100644
index 0000000..b3d159b
--- /dev/null
+++ b/docs/reference/glib/mainloop-states.eps
@@ -0,0 +1,306 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: mainloop-stages.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 3c
+%%CreationDate: Wed Nov 29 12:23:52 2000
+%%For: otaylor@fresnel.labs.redhat.com (Owen Taylor)
+%%BoundingBox: 0 0 503 291
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 291 moveto 0 0 lineto 503 0 lineto 503 291 lineto closepath clip newpath
+-106.0 402.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+%%Page: 1 1
+10 setmiterlimit
+ 0.06000 0.06000 sc
+%
+% Fig objects follow
+%
+/Times-Roman ff 270.00 scf sf
+9300 6225 m
+gs 1 -1 sc (Initial[n+1]) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Times-Roman ff 270.00 scf sf
+9300 6540 m
+gs 1 -1 sc (\(Recursion\)) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+15.000 slw
+ [60] 0 sd
+n 1905 6000 m 1800 6000 1800 6420 105 arcto 4 {pop} repeat
+  1800 6525 3120 6525 105 arcto 4 {pop} repeat
+  3225 6525 3225 6105 105 arcto 4 {pop} repeat
+  3225 6000 1905 6000 105 arcto 4 {pop} repeat
+ cp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+gs  clippath
+3865 5498 m 3806 5431 l 3688 5535 l 3808 5490 l 3747 5602 l cp
+3184 5976 m 3243 6043 l 3361 5939 l 3242 5985 l 3302 5872 l cp
+eoclip
+n 3225 6000 m
+ 3825 5475 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 3302 5872 m 3242 5985 l 3361 5939 l 3302 5872 l  cp gs 0.00 setgray ef gr  col0 s
+% arrowhead
+n 3747 5602 m 3808 5490 l 3688 5535 l 3747 5602 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+n 4980 5775 m 4875 5775 4875 6270 105 arcto 4 {pop} repeat
+  4875 6375 6870 6375 105 arcto 4 {pop} repeat
+  6975 6375 6975 5880 105 arcto 4 {pop} repeat
+  6975 5775 4980 5775 105 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+gs  clippath
+8457 5969 m 8515 5900 l 8394 5799 l 8458 5911 l 8337 5868 l cp
+8042 5505 m 7984 5574 l 8105 5675 l 8042 5564 l 8162 5606 l cp
+eoclip
+n 8025 5550 m
+ 8475 5925 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 8162 5606 m 8042 5564 l 8105 5675 l 8162 5606 l  cp gs 0.00 setgray ef gr  col0 s
+% arrowhead
+n 8337 5868 m 8458 5911 l 8394 5799 l 8337 5868 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+ [60] 0 sd
+n 8580 5850 m 8475 5850 8475 6570 105 arcto 4 {pop} repeat
+  8475 6675 10020 6675 105 arcto 4 {pop} repeat
+  10125 6675 10125 5955 105 arcto 4 {pop} repeat
+  10125 5850 8580 5850 105 arcto 4 {pop} repeat
+ cp gs col0 s gr  [] 0 sd
+% Polyline
+n 7155 3825 m 7050 3825 7050 4320 105 arcto 4 {pop} repeat
+  7050 4425 9045 4425 105 arcto 4 {pop} repeat
+  9150 4425 9150 3930 105 arcto 4 {pop} repeat
+  9150 3825 7155 3825 105 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+n 5055 2100 m 4950 2100 4950 2595 105 arcto 4 {pop} repeat
+  4950 2700 6945 2700 105 arcto 4 {pop} repeat
+  7050 2700 7050 2205 105 arcto 4 {pop} repeat
+  7050 2100 5055 2100 105 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+n 2730 3900 m 2625 3900 2625 4395 105 arcto 4 {pop} repeat
+  2625 4500 4620 4500 105 arcto 4 {pop} repeat
+  4725 4500 4725 4005 105 arcto 4 {pop} repeat
+  4725 3900 2730 3900 105 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 8580 1875 m 8475 1875 8475 2295 105 arcto 4 {pop} repeat
+  8475 2400 9645 2400 105 arcto 4 {pop} repeat
+  9750 2400 9750 1980 105 arcto 4 {pop} repeat
+  9750 1875 8580 1875 105 arcto 4 {pop} repeat
+ cp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+gs  clippath
+8518 2419 m 8451 2358 l 8345 2474 l 8460 2416 l 8412 2534 l cp
+8003 2848 m 8070 2909 l 8176 2793 l 8062 2852 l 8109 2733 l cp
+eoclip
+n 8047 2868 m
+ 8475 2400 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 8109 2733 m 8062 2852 l 8176 2793 l 8109 2733 l  cp gs 0.00 setgray ef gr  col0 s
+% arrowhead
+n 8412 2534 m 8460 2416 l 8345 2474 l 8412 2534 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3340 4475 m 3252 4494 l 3286 4648 l 3305 4522 l 3374 4629 l cp
+eoclip
+n 4875 6075 m 4874 6075 l 4872 6074 l 4868 6073 l 4861 6072 l 4852 6070 l
+ 4839 6067 l 4824 6064 l 4805 6059 l 4783 6054 l 4759 6048 l
+ 4731 6041 l 4701 6033 l 4669 6025 l 4635 6015 l 4600 6004 l
+ 4563 5993 l 4526 5981 l 4487 5967 l 4448 5953 l 4408 5937 l
+ 4367 5920 l 4326 5901 l 4284 5881 l 4241 5859 l 4198 5835 l
+ 4154 5809 l 4109 5781 l 4063 5749 l 4016 5715 l 3968 5678 l
+ 3920 5638 l 3872 5595 l 3825 5550 l 3780 5503 l 3737 5455 l
+ 3697 5407 l 3660 5359 l 3626 5312 l 3594 5266 l 3566 5221 l
+ 3540 5177 l 3516 5134 l 3494 5091 l 3474 5049 l 3455 5008 l
+ 3438 4967 l 3422 4927 l 3408 4888 l 3394 4849 l 3382 4812 l
+ 3371 4775 l 3360 4740 l 3350 4706 l 3342 4674 l 3334 4644 l
+ 3327 4616 l 3321 4592 l 3316 4570 l 3311 4551 l 3308 4536 l
+ 3305 4523 l 3303 4514 l
+ 3300 4500 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3374 4629 m 3305 4522 l 3286 4648 l 3374 4629 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6943 6114 m 6978 6197 l 7123 6135 l 6995 6141 l 7087 6052 l cp
+eoclip
+n 8475 4500 m 8475 4501 l 8475 4503 l 8475 4508 l 8475 4515 l 8474 4525 l
+ 8474 4538 l 8473 4553 l 8472 4573 l 8470 4594 l 8468 4619 l
+ 8465 4646 l 8462 4675 l 8457 4706 l 8452 4739 l 8445 4773 l
+ 8437 4808 l 8427 4845 l 8416 4882 l 8403 4921 l 8388 4961 l
+ 8370 5002 l 8350 5045 l 8326 5090 l 8299 5137 l 8268 5186 l
+ 8232 5237 l 8192 5290 l 8148 5345 l 8100 5400 l 8057 5445 l
+ 8013 5490 l 7968 5533 l 7923 5573 l 7878 5612 l 7833 5649 l
+ 7789 5684 l 7745 5717 l 7701 5749 l 7658 5779 l 7615 5807 l
+ 7573 5834 l 7531 5861 l 7489 5886 l 7447 5910 l 7407 5933 l
+ 7366 5955 l 7327 5977 l 7288 5997 l 7250 6017 l 7214 6035 l
+ 7180 6052 l 7147 6068 l 7117 6083 l 7090 6096 l 7065 6108 l
+ 7043 6118 l 7025 6127 l 7010 6134 l 6998 6140 l 6989 6144 l
+
+ 6975 6150 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 7087 6052 m 6995 6141 l 7123 6135 l 7087 6052 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+8433 3848 m 8521 3831 l 8493 3676 l 8471 3803 l 8404 3693 l cp
+eoclip
+n 7050 2400 m 7051 2400 l 7054 2401 l 7058 2401 l 7066 2403 l 7076 2404 l
+ 7090 2407 l 7107 2410 l 7127 2414 l 7150 2418 l 7177 2424 l
+ 7206 2430 l 7238 2437 l 7271 2445 l 7306 2454 l 7343 2463 l
+ 7381 2474 l 7419 2486 l 7458 2499 l 7498 2513 l 7538 2528 l
+ 7579 2545 l 7621 2564 l 7663 2585 l 7706 2608 l 7750 2634 l
+ 7795 2662 l 7841 2694 l 7887 2728 l 7933 2766 l 7980 2807 l
+ 8025 2850 l 8068 2895 l 8109 2942 l 8147 2988 l 8181 3034 l
+ 8213 3080 l 8241 3125 l 8267 3169 l 8290 3212 l 8311 3254 l
+ 8330 3296 l 8347 3337 l 8362 3377 l 8376 3417 l 8389 3456 l
+ 8401 3494 l 8412 3532 l 8421 3569 l 8430 3604 l 8438 3637 l
+ 8445 3669 l 8451 3698 l 8457 3725 l 8461 3748 l 8465 3768 l
+ 8468 3785 l 8471 3799 l 8472 3809 l
+ 8475 3825 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 8404 3693 m 8471 3803 l 8493 3676 l 8404 3693 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4970 2442 m 4959 2353 l 4803 2372 l 4928 2403 l 4814 2461 l cp
+eoclip
+n 3375 3900 m 3375 3899 l 3376 3897 l 3377 3892 l 3378 3886 l 3380 3876 l
+ 3383 3863 l 3386 3848 l 3391 3828 l 3396 3806 l 3402 3781 l
+ 3409 3753 l 3417 3722 l 3425 3689 l 3435 3655 l 3446 3619 l
+ 3457 3581 l 3469 3543 l 3483 3504 l 3497 3464 l 3513 3423 l
+ 3530 3383 l 3549 3341 l 3569 3299 l 3591 3257 l 3615 3214 l
+ 3641 3170 l 3669 3125 l 3701 3080 l 3735 3034 l 3772 2988 l
+ 3812 2941 l 3855 2895 l 3900 2850 l 3950 2804 l 4001 2762 l
+ 4052 2723 l 4102 2687 l 4152 2655 l 4201 2625 l 4248 2599 l
+ 4295 2576 l 4340 2555 l 4385 2536 l 4429 2519 l 4472 2504 l
+ 4515 2490 l 4557 2477 l 4598 2466 l 4638 2456 l 4677 2447 l
+ 4715 2439 l 4751 2432 l 4784 2426 l 4815 2420 l 4843 2415 l
+ 4868 2411 l 4890 2408 l 4908 2406 l 4922 2404 l 4933 2402 l
+
+ 4950 2400 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4814 2461 m 4928 2403 l 4803 2372 l 4814 2461 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 360.00 scf sf
+5925 6225 m
+gs 1 -1 sc (Initial[n]) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Times-Roman ff 360.00 scf sf
+8100 4275 m
+gs 1 -1 sc (Dispatching) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Times-Roman ff 360.00 scf sf
+3675 4350 m
+gs 1 -1 sc (Prepared) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Times-Roman ff 360.00 scf sf
+5925 2550 m
+gs 1 -1 sc (Polling) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Times-Roman ff 270.00 scf sf
+4050 3300 m
+gs 1 -1 sc (query\(\)) col0 sh gr
+/Times-Roman ff 270.00 scf sf
+7800 3225 m
+gs 1 -1 sc (check\(\)) dup sw pop neg 0 rm  col0 sh gr
+/Times-Roman ff 270.00 scf sf
+2475 6375 m
+gs 1 -1 sc (Working) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Times-Roman ff 270.00 scf sf
+3900 5400 m
+gs 1 -1 sc (prepare\(\)) col0 sh gr
+/Times-Roman ff 270.00 scf sf
+8025 5325 m
+gs 1 -1 sc (dispatch\(\)) dup sw pop neg 0 rm  col0 sh gr
+/Times-Roman ff 270.00 scf sf
+9150 2250 m
+gs 1 -1 sc (Working) dup sw pop 2 div neg 0 rm  col0 sh gr
+$F2psEnd
+rs
diff --git a/docs/reference/glib/mainloop-states.fig b/docs/reference/glib/mainloop-states.fig
new file mode 100644
index 0000000..6acbedb
--- /dev/null
+++ b/docs/reference/glib/mainloop-states.fig
@@ -0,0 +1,65 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 8625 6000 9975 6600
+4 1 0 50 0 0 18 0.0000 4 240 1290 9300 6225 Initial[n+1]\001
+4 1 0 50 0 0 18 0.0000 4 255 1335 9300 6540 (Recursion)\001
+-6
+2 4 1 2 0 7 50 0 -1 4.000 0 0 7 0 0 5
+	 3225 6525 3225 6000 1800 6000 1800 6525 3225 6525
+2 1 1 2 0 7 50 0 -1 4.000 0 0 -1 1 1 2
+	1 1 2.00 90.00 120.00
+	1 1 2.00 90.00 120.00
+	 3225 6000 3825 5475
+2 4 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 6975 6375 6975 5775 4875 5775 4875 6375 6975 6375
+2 1 1 2 0 7 50 0 -1 4.000 0 0 -1 1 1 2
+	1 1 2.00 90.00 120.00
+	1 1 2.00 90.00 120.00
+	 8025 5550 8475 5925
+2 4 1 2 0 7 50 0 -1 4.000 0 0 7 0 0 5
+	 10125 6675 10125 5850 8475 5850 8475 6675 10125 6675
+2 4 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 9150 4425 9150 3825 7050 3825 7050 4425 9150 4425
+2 4 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 7050 2700 7050 2100 4950 2100 4950 2700 7050 2700
+2 4 0 2 0 7 50 0 -1 0.000 0 0 7 0 0 5
+	 4725 4500 4725 3900 2625 3900 2625 4500 4725 4500
+2 4 1 2 0 7 50 0 -1 4.000 0 0 7 0 0 5
+	 9750 2400 9750 1875 8475 1875 8475 2400 9750 2400
+2 1 1 2 0 7 50 0 -1 4.000 0 0 -1 1 1 2
+	1 1 2.00 90.00 120.00
+	1 1 2.00 90.00 120.00
+	 8047 2868 8475 2400
+3 2 0 2 0 7 50 0 -1 0.000 0 1 0 3
+	1 1 2.00 90.00 120.00
+	 4875 6075 3825 5550 3300 4500
+	 0.000 -1.000 0.000
+3 2 0 2 0 7 50 0 -1 0.000 0 1 0 3
+	1 1 2.00 90.00 120.00
+	 8475 4500 8100 5400 6975 6150
+	 0.000 -1.000 0.000
+3 2 0 2 0 7 50 0 -1 0.000 0 1 0 3
+	1 1 2.00 90.00 120.00
+	 7050 2400 8025 2850 8475 3825
+	 0.000 -1.000 0.000
+3 2 0 2 0 7 50 0 -1 0.000 0 1 0 3
+	1 1 2.00 90.00 120.00
+	 3375 3900 3900 2850 4950 2400
+	 0.000 -1.000 0.000
+4 1 0 50 0 0 24 0.0000 4 315 1290 5925 6225 Initial[n]\001
+4 1 0 50 0 0 24 0.0000 4 330 1770 8100 4275 Dispatching\001
+4 1 0 50 0 0 24 0.0000 4 330 1320 3675 4350 Prepared\001
+4 1 0 50 0 0 24 0.0000 4 330 1050 5925 2550 Polling\001
+4 0 0 50 0 0 18 0.0000 4 255 825 4050 3300 query()\001
+4 2 0 50 0 0 18 0.0000 4 255 855 7800 3225 check()\001
+4 1 0 50 0 0 18 0.0000 4 255 990 2475 6375 Working\001
+4 0 0 50 0 0 18 0.0000 4 255 1050 3900 5400 prepare()\001
+4 2 0 50 0 0 18 0.0000 4 255 1140 8025 5325 dispatch()\001
+4 1 0 50 0 0 18 0.0000 4 255 990 9150 2250 Working\001
diff --git a/docs/reference/glib/mainloop-states.gif b/docs/reference/glib/mainloop-states.gif
new file mode 100644
index 0000000..0ba1a89
--- /dev/null
+++ b/docs/reference/glib/mainloop-states.gif
Binary files differ
diff --git a/docs/reference/glib/mainloop-states.png b/docs/reference/glib/mainloop-states.png
new file mode 100644
index 0000000..4e9fc9d
--- /dev/null
+++ b/docs/reference/glib/mainloop-states.png
Binary files differ
diff --git a/docs/reference/glib/regex-syntax.sgml b/docs/reference/glib/regex-syntax.sgml
new file mode 100644
index 0000000..1b9e523
--- /dev/null
+++ b/docs/reference/glib/regex-syntax.sgml
@@ -0,0 +1,2704 @@
+<refentry id="glib-regex-syntax" revision="11 Jul 2006">
+<refmeta>
+<refentrytitle>Regular expression syntax</refentrytitle>
+</refmeta>
+
+<!--
+Based on the man page for pcrepattern.
+
+Remember to sync this document with the file docs/pcrepattern.3 in the
+pcre package when upgrading to a newer version of pcre.
+
+In sync with PCRE 7.0
+-->
+
+<refnamediv>
+<refname>Regular expression syntax</refname>
+<refpurpose>
+Syntax and semantics of the regular expressions supported by GRegex
+</refpurpose>
+</refnamediv>
+
+<refsect1>
+<title>GRegex regular expression details</title>
+<para>
+A regular expression is a pattern that is matched against a
+string from left to right. Most characters stand for themselves in a
+pattern, and match the corresponding characters in the string. As a
+trivial example, the pattern
+</para>
+
+<programlisting>
+The quick brown fox
+</programlisting>
+
+<para>
+matches a portion of a string that is identical to itself. When
+caseless matching is specified (the <varname>G_REGEX_CASELESS</varname> flag), letters are
+matched independently of case.
+</para>
+
+<para>
+The power of regular expressions comes from the ability to include
+alternatives and repetitions in the pattern. These are encoded in the
+pattern by the use of metacharacters, which do not stand for themselves
+but instead are interpreted in some special way.
+</para>
+
+<para>
+There are two different sets of metacharacters: those that are recognized
+anywhere in the pattern except within square brackets, and those
+that are recognized in square brackets. Outside square brackets, the
+metacharacters are as follows:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Metacharacters outside square brackets</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Character</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\</entry>
+    <entry>general escape character with several uses</entry>
+  </row>
+  <row>
+    <entry>^</entry>
+    <entry>assert start of string (or line, in multiline mode)</entry>
+  </row>
+  <row>
+    <entry>$</entry>
+    <entry>assert end of string (or line, in multiline mode)</entry>
+  </row>
+  <row>
+    <entry>.</entry>
+    <entry>match any character except newline (by default)</entry>
+  </row>
+  <row>
+    <entry>[</entry>
+    <entry>start character class definition</entry>
+  </row>
+  <row>
+    <entry>|</entry>
+    <entry>start of alternative branch</entry>
+  </row>
+  <row>
+    <entry>(</entry>
+    <entry>start subpattern</entry>
+  </row>
+  <row>
+    <entry>)</entry>
+    <entry>end subpattern</entry>
+  </row>
+  <row>
+    <entry>?</entry>
+    <entry>extends the meaning of (, or 0/1 quantifier, or quantifier minimizer</entry>
+  </row>
+  <row>
+    <entry>*</entry>
+    <entry>0 or more quantifier</entry>
+  </row>
+  <row>
+    <entry>+</entry>
+    <entry>1 or more quantifier, also "possessive quantifier"</entry>
+  </row>
+  <row>
+    <entry>{</entry>
+    <entry>start min/max quantifier</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+Part of a pattern that is in square brackets is called a "character
+class". In a character class the only metacharacters are:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Metacharacters inside square brackets</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Character</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\</entry>
+    <entry>general escape character</entry>
+  </row>
+  <row>
+    <entry>^</entry>
+    <entry>negate the class, but only if the first character</entry>
+  </row>
+  <row>
+    <entry>-</entry>
+    <entry>indicates character range</entry>
+  </row>
+  <row>
+    <entry>[</entry>
+    <entry>POSIX character class (only if followed by POSIX syntax)</entry>
+  </row>
+  <row>
+    <entry>]</entry>
+    <entry>terminates the character class</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+</refsect1>
+
+<refsect1>
+<title>Backslash</title>
+<para>
+The backslash character has several uses. Firstly, if it is followed by
+a non-alphanumeric character, it takes away any special meaning that
+character may have. This use of backslash as an escape character
+applies both inside and outside character classes.
+</para>
+
+<para>
+For example, if you want to match a * character, you write \* in the
+pattern. This escaping action applies whether or not the following
+character would otherwise be interpreted as a metacharacter, so it is
+always safe to precede a non-alphanumeric with backslash to specify
+that it stands for itself. In particular, if you want to match a
+backslash, you write \\.
+</para>
+
+<para>
+If a pattern is compiled with the <varname>G_REGEX_EXTENDED</varname>
+option, whitespace in the pattern (other than in a character class) and
+characters between a # outside a character class and the next newline
+are ignored.
+An escaping backslash can be used to include a whitespace or # character
+as part of the pattern.
+</para>
+
+<para>
+If you want to remove the special meaning from a sequence of characters,
+you can do so by putting them between \Q and \E.
+The \Q...\E sequence is recognized both inside and outside character
+classes.
+</para>
+
+<refsect2>
+<title>Non-printing characters</title>
+<para>
+A second use of backslash provides a way of encoding non-printing
+characters in patterns in a visible manner. There is no restriction on the
+appearance of non-printing characters, apart from the binary zero that
+terminates a pattern, but when a pattern is being prepared by text
+editing, it is usually easier to use one of the following escape
+sequences than the binary character it represents:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Non-printing characters</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Escape</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\a</entry>
+    <entry>alarm, that is, the BEL character (hex 07)</entry>
+  </row>
+  <row>
+    <entry>\cx</entry>
+    <entry>"control-x", where x is any character</entry>
+  </row>
+  <row>
+    <entry>\e</entry>
+    <entry>escape (hex 1B)</entry>
+  </row>
+  <row>
+    <entry>\f</entry>
+    <entry>formfeed (hex 0C)</entry>
+  </row>
+  <row>
+    <entry>\n</entry>
+    <entry>newline (hex 0A)</entry>
+  </row>
+  <row>
+    <entry>\r</entry>
+    <entry>carriage return (hex 0D)</entry>
+  </row>
+  <row>
+    <entry>\t</entry>
+    <entry>tab (hex 09)</entry>
+  </row>
+  <row>
+    <entry>\ddd</entry>
+    <entry>character with octal code ddd, or backreference</entry>
+  </row>
+  <row>
+    <entry>\xhh</entry>
+    <entry>character with hex code hh</entry>
+  </row>
+  <row>
+    <entry>\x{hhh..}</entry>
+    <entry>character with hex code hhh..</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+The precise effect of \cx is as follows: if x is a lower case letter,
+it is converted to upper case. Then bit 6 of the character (hex 40) is
+inverted. Thus \cz becomes hex 1A, but \c{ becomes hex 3B, while \c;
+becomes hex 7B.
+</para>
+
+<para>
+After \x, from zero to two hexadecimal digits are read (letters can be
+in upper or lower case). Any number of hexadecimal digits may appear
+between \x{ and }, but the value of the character code
+must be less than 2**31 (that is, the maximum hexadecimal value is
+7FFFFFFF). If characters other than hexadecimal digits appear between
+\x{ and }, or if there is no terminating }, this form of escape is not
+recognized. Instead, the initial \x will be interpreted as a basic hexadecimal
+escape, with no following digits, giving a character whose
+value is zero.
+</para>
+
+<para>
+Characters whose value is less than 256 can be defined by either of the
+two syntaxes for \x. There is no difference
+in the way they are handled. For example, \xdc is exactly the same as
+\x{dc}.
+</para>
+
+<para>
+After \0 up to two further octal digits are read. If there are fewer
+than two digits, just those that are present are used.
+Thus the sequence \0\x\07 specifies two binary zeros followed by a BEL
+character (code value 7). Make sure you supply two digits after the
+initial zero if the pattern character that follows is itself an octal
+digit.
+</para>
+
+<para>
+The handling of a backslash followed by a digit other than 0 is complicated.
+Outside a character class, GRegex reads it and any following digits as a
+decimal number. If the number is less than 10, or if there
+have been at least that many previous capturing left parentheses in the
+expression, the entire sequence is taken as a back reference. A
+description of how this works is given later, following the discussion
+of parenthesized subpatterns.
+</para>
+
+<para>
+Inside a character class, or if the decimal number is greater than 9
+and there have not been that many capturing subpatterns, GRegex re-reads
+up to three octal digits following the backslash, and uses them to generate
+a data character. Any subsequent digits stand for themselves. For example:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Non-printing characters</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Escape</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\040</entry>
+    <entry>is another way of writing a space</entry>
+  </row>
+  <row>
+    <entry>\40</entry>
+    <entry>is the same, provided there are fewer than 40 previous capturing subpatterns</entry>
+  </row>
+  <row>
+    <entry>\7</entry>
+    <entry>is always a back reference</entry>
+  </row>
+  <row>
+    <entry>\11</entry>
+    <entry>might be a back reference, or another way of writing a tab</entry>
+  </row>
+  <row>
+    <entry>\011</entry>
+    <entry>is always a tab</entry>
+  </row>
+  <row>
+    <entry>\0113</entry>
+    <entry>is a tab followed by the character "3"</entry>
+  </row>
+  <row>
+    <entry>\113</entry>
+    <entry>might be a back reference, otherwise the character with octal code 113</entry>
+  </row>
+  <row>
+    <entry>\377</entry>
+    <entry>might be a back reference, otherwise the byte consisting entirely of 1 bits</entry>
+  </row>
+  <row>
+    <entry>\81</entry>
+    <entry>is either a back reference, or a binary zero followed by the two characters "8" and "1"</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+Note that octal values of 100 or greater must not be introduced by a
+leading zero, because no more than three octal digits are ever read.
+</para>
+
+<para>
+All the sequences that define a single character can be used both inside
+and outside character classes. In addition, inside a character class, the
+sequence \b is interpreted as the backspace character (hex 08), and the
+sequences \R and \X are interpreted as the characters "R" and "X", respectively.
+Outside a character class, these sequences have different meanings (see below).
+</para>
+</refsect2>
+
+<refsect2>
+<title>Absolute and relative back references</title>
+<para>
+The sequence \g followed by a positive or negative number, optionally enclosed
+in braces, is an absolute or relative back reference. Back references are
+discussed later, following the discussion of parenthesized subpatterns.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Generic character types</title>
+
+<para>
+Another use of backslash is for specifying generic character types.
+The following are always recognized:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Generic characters</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Escape</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\d</entry>
+    <entry>any decimal digit</entry>
+  </row>
+  <row>
+    <entry>\D</entry>
+    <entry>any character that is not a decimal digit</entry>
+  </row>
+  <row>
+    <entry>\s</entry>
+    <entry>any whitespace character</entry>
+  </row>
+  <row>
+    <entry>\S</entry>
+    <entry>any character that is not a whitespace character</entry>
+  </row>
+  <row>
+    <entry>\w</entry>
+    <entry>any "word" character</entry>
+  </row>
+  <row>
+    <entry>\W</entry>
+    <entry>any "non-word" character</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+Each pair of escape sequences partitions the complete set of characters
+into two disjoint sets. Any given character matches one, and only one,
+of each pair.
+</para>
+
+<para>
+These character type sequences can appear both inside and outside character
+classes. They each match one character of the appropriate type.
+If the current matching point is at the end of the passed string, all
+of them fail, since there is no character to match.
+</para>
+
+<para>
+For compatibility with Perl, \s does not match the VT character (code
+11). This makes it different from the the POSIX "space" class. The \s
+characters are HT (9), LF (10), FF (12), CR (13), and space (32).
+</para>
+
+<para>
+A "word" character is an underscore or any character less than 256 that
+is a letter or digit.</para>
+
+<para>
+Characters with values greater than 128 never match \d,
+\s, or \w, and always match \D, \S, and \W.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Newline sequences</title>
+<para>Outside a character class, the escape sequence \R matches any Unicode
+newline sequence.
+This particular group matches either the two-character sequence CR followed by
+LF, or one of the single characters LF (linefeed, U+000A), VT (vertical tab,
+U+000B), FF (formfeed, U+000C), CR (carriage return, U+000D), NEL (next
+line, U+0085), LS (line separator, U+2028), or PS (paragraph separator, U+2029).
+The two-character sequence is treated as a single unit that
+cannot be split. Inside a character class, \R matches the letter "R".</para>
+</refsect2>
+
+<refsect2>
+<title>Unicode character properties</title>
+<para>
+To support generic character types there are three additional escape
+sequences, they are:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Generic character types</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Escape</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\p{xx}</entry>
+    <entry>a character with the xx property</entry>
+  </row>
+  <row>
+    <entry>\P{xx}</entry>
+    <entry>a character without the xx property</entry>
+  </row>
+  <row>
+    <entry>\X</entry>
+    <entry>an extended Unicode sequence</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+The property names represented by xx above are limited to the Unicode
+script names, the general category properties, and "Any", which matches
+any character (including newline). Other properties such as "InMusicalSymbols"
+are not currently supported. Note that \P{Any} does not match any characters,
+so always causes a match failure.
+</para>
+
+<para>
+Sets of Unicode characters are defined as belonging to certain scripts. A
+character from one of these sets can be matched using a script name. For
+example, \p{Greek} or \P{Han}.
+</para>
+
+<para>
+Those that are not part of an identified script are lumped together as
+"Common". The current list of scripts is:
+</para>
+
+<itemizedlist>
+<listitem><para>Arabic</para></listitem>
+<listitem><para>Armenian</para></listitem>
+<listitem><para>Balinese</para></listitem>
+<listitem><para>Bengali</para></listitem>
+<listitem><para>Bopomofo</para></listitem>
+<listitem><para>Braille</para></listitem>
+<listitem><para>Buginese</para></listitem>
+<listitem><para>Buhid</para></listitem>
+<listitem><para>Canadian_Aboriginal</para></listitem>
+<listitem><para>Cherokee</para></listitem>
+<listitem><para>Common</para></listitem>
+<listitem><para>Coptic</para></listitem>
+<listitem><para>Cuneiform</para></listitem>
+<listitem><para>Cypriot</para></listitem>
+<listitem><para>Cyrillic</para></listitem>
+<listitem><para>Deseret</para></listitem>
+<listitem><para>Devanagari</para></listitem>
+<listitem><para>Ethiopic</para></listitem>
+<listitem><para>Georgian</para></listitem>
+<listitem><para>Glagolitic</para></listitem>
+<listitem><para>Gothic</para></listitem>
+<listitem><para>Greek</para></listitem>
+<listitem><para>Gujarati</para></listitem>
+<listitem><para>Gurmukhi</para></listitem>
+<listitem><para>Han</para></listitem>
+<listitem><para>Hangul</para></listitem>
+<listitem><para>Hanunoo</para></listitem>
+<listitem><para>Hebrew</para></listitem>
+<listitem><para>Hiragana</para></listitem>
+<listitem><para>Inherited</para></listitem>
+<listitem><para>Kannada</para></listitem>
+<listitem><para>Katakana</para></listitem>
+<listitem><para>Kharoshthi</para></listitem>
+<listitem><para>Khmer</para></listitem>
+<listitem><para>Lao</para></listitem>
+<listitem><para>Latin</para></listitem>
+<listitem><para>Limbu</para></listitem>
+<listitem><para>Linear_B</para></listitem>
+<listitem><para>Malayalam</para></listitem>
+<listitem><para>Mongolian</para></listitem>
+<listitem><para>Myanmar</para></listitem>
+<listitem><para>New_Tai_Lue</para></listitem>
+<listitem><para>Nko</para></listitem>
+<listitem><para>Ogham</para></listitem>
+<listitem><para>Old_Italic</para></listitem>
+<listitem><para>Old_Persian</para></listitem>
+<listitem><para>Oriya</para></listitem>
+<listitem><para>Osmanya</para></listitem>
+<listitem><para>Phags_Pa</para></listitem>
+<listitem><para>Phoenician</para></listitem>
+<listitem><para>Runic</para></listitem>
+<listitem><para>Shavian</para></listitem>
+<listitem><para>Sinhala</para></listitem>
+<listitem><para>Syloti_Nagri</para></listitem>
+<listitem><para>Syriac</para></listitem>
+<listitem><para>Tagalog</para></listitem>
+<listitem><para>Tagbanwa</para></listitem>
+<listitem><para>Tai_Le</para></listitem>
+<listitem><para>Tamil</para></listitem>
+<listitem><para>Telugu</para></listitem>
+<listitem><para>Thaana</para></listitem>
+<listitem><para>Thai</para></listitem>
+<listitem><para>Tibetan</para></listitem>
+<listitem><para>Tifinagh</para></listitem>
+<listitem><para>Ugaritic</para></listitem>
+<listitem><para>Yi</para></listitem>
+</itemizedlist>
+
+<para>
+Each character has exactly one general category property, specified by a
+two-letter abbreviation. For compatibility with Perl, negation can be specified
+by including a circumflex between the opening brace and the property name. For
+example, \p{^Lu} is the same as \P{Lu}.
+</para>
+
+<para>
+If only one letter is specified with \p or \P, it includes all the general
+category properties that start with that letter. In this case, in the absence
+of negation, the curly brackets in the escape sequence are optional; these two
+examples have the same effect:
+</para>
+
+<programlisting>
+\p{L}
+\pL
+</programlisting>
+
+<para>
+The following general category property codes are supported:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Property codes</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Code</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>C</entry>
+    <entry>Other</entry>
+  </row>
+  <row>
+    <entry>Cc</entry>
+    <entry>Control</entry>
+  </row>
+  <row>
+    <entry>Cf</entry>
+    <entry>Format</entry>
+  </row>
+  <row>
+    <entry>Cn</entry>
+    <entry>Unassigned</entry>
+  </row>
+  <row>
+    <entry>Co</entry>
+    <entry>Private use</entry>
+  </row>
+  <row>
+    <entry>Cs</entry>
+    <entry>Surrogate</entry>
+  </row>
+  <row>
+    <entry>L</entry>
+    <entry>Letter</entry>
+  </row>
+  <row>
+    <entry>Ll</entry>
+    <entry>Lower case letter</entry>
+  </row>
+  <row>
+    <entry>Lm</entry>
+    <entry>Modifier letter</entry>
+  </row>
+  <row>
+    <entry>Lo</entry>
+    <entry>Other letter</entry>
+  </row>
+  <row>
+    <entry>Lt</entry>
+    <entry>Title case letter</entry>
+  </row>
+  <row>
+    <entry>Lu</entry>
+    <entry>Upper case letter</entry>
+  </row>
+  <row>
+    <entry>M</entry>
+    <entry>Mark</entry>
+  </row>
+  <row>
+    <entry>Mc</entry>
+    <entry>Spacing mark</entry>
+  </row>
+  <row>
+    <entry>Me</entry>
+    <entry>Enclosing mark</entry>
+  </row>
+  <row>
+    <entry>Mn</entry>
+    <entry>Non-spacing mark</entry>
+  </row>
+  <row>
+    <entry>N</entry>
+    <entry>Number</entry>
+  </row>
+  <row>
+    <entry>Nd</entry>
+    <entry>Decimal number</entry>
+  </row>
+  <row>
+    <entry>Nl</entry>
+    <entry>Letter number</entry>
+  </row>
+  <row>
+    <entry>No</entry>
+    <entry>Other number</entry>
+  </row>
+  <row>
+    <entry>P</entry>
+    <entry>Punctuation</entry>
+  </row>
+  <row>
+    <entry>Pc</entry>
+    <entry>Connector punctuation</entry>
+  </row>
+  <row>
+    <entry>Pd</entry>
+    <entry>Dash punctuation</entry>
+  </row>
+  <row>
+    <entry>Pe</entry>
+    <entry>Close punctuation</entry>
+  </row>
+  <row>
+    <entry>Pf</entry>
+    <entry>Final punctuation</entry>
+  </row>
+  <row>
+    <entry>Pi</entry>
+    <entry>Initial punctuation</entry>
+  </row>
+  <row>
+    <entry>Po</entry>
+    <entry>Other punctuation</entry>
+  </row>
+  <row>
+    <entry>Ps</entry>
+    <entry>Open punctuation</entry>
+  </row>
+  <row>
+    <entry>S</entry>
+    <entry>Symbol</entry>
+  </row>
+  <row>
+    <entry>Sc</entry>
+    <entry>Currency symbol</entry>
+  </row>
+  <row>
+    <entry>Sk</entry>
+    <entry>Modifier symbol</entry>
+  </row>
+  <row>
+    <entry>Sm</entry>
+    <entry>Mathematical symbol</entry>
+  </row>
+  <row>
+    <entry>So</entry>
+    <entry>Other symbol</entry>
+  </row>
+  <row>
+    <entry>Z</entry>
+    <entry>Separator</entry>
+  </row>
+  <row>
+    <entry>Zl</entry>
+    <entry>Line separator</entry>
+  </row>
+  <row>
+    <entry>Zp</entry>
+    <entry>Paragraph separator</entry>
+  </row>
+  <row>
+    <entry>Zs</entry>
+    <entry>Space separator</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+The special property L&amp; is also supported: it matches a character that has
+the Lu, Ll, or Lt property, in other words, a letter that is not classified as
+a modifier or "other".
+</para>
+
+<para>
+The long synonyms for these properties that Perl supports (such as \ep{Letter})
+are not supported by GRegex, nor is it permitted to prefix any of these
+properties with "Is".
+</para>
+
+<para>
+No character that is in the Unicode table has the Cn (unassigned) property.
+Instead, this property is assumed for any code point that is not in the
+Unicode table.
+</para>
+
+<para>
+Specifying caseless matching does not affect these escape sequences.
+For example, \p{Lu} always matches only upper case letters.
+</para>
+
+<para>
+The \X escape matches any number of Unicode characters that form an
+extended Unicode sequence. \X is equivalent to
+</para>
+
+<programlisting>
+(?&gt;\PM\pM*)
+</programlisting>
+
+<para>
+That is, it matches a character without the "mark" property, followed
+by zero or more characters with the "mark" property, and treats the
+sequence as an atomic group (see below). Characters with the "mark"
+property are typically accents that affect the preceding character.
+</para>
+
+<para>
+Matching characters by Unicode property is not fast, because GRegex has
+to search a structure that contains data for over fifteen thousand
+characters. That is why the traditional escape sequences such as \d and
+\w do not use Unicode properties.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Simple assertions</title>
+<para>
+The final use of backslash is for certain simple assertions. An
+assertion specifies a condition that has to be met at a particular point in
+a match, without consuming any characters from the string. The
+use of subpatterns for more complicated assertions is described below.
+The backslashed assertions are:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Simple assertions</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Escape</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>\b</entry>
+    <entry>matches at a word boundary</entry>
+  </row>
+  <row>
+    <entry>\B</entry>
+    <entry>matches when not at a word boundary</entry>
+  </row>
+  <row>
+    <entry>\A</entry>
+    <entry>matches at the start of the string</entry>
+  </row>
+  <row>
+    <entry>\Z</entry>
+    <entry>matches at the end of the string or before a newline at the end of the string</entry>
+  </row>
+  <row>
+    <entry>\z</entry>
+    <entry>matches only at the end of the string</entry>
+  </row>
+  <row>
+    <entry>\G</entry>
+    <entry>matches at first matching position in the string</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+These assertions may not appear in character classes (but note that \b
+has a different meaning, namely the backspace character, inside a
+character class).
+</para>
+
+<para>
+A word boundary is a position in the string where the current
+character and the previous character do not both match \w or \W (i.e.
+one matches \w and the other matches \W), or the start or end of the
+string if the first or last character matches \w, respectively.
+</para>
+
+<para>
+The \A, \Z, and \z assertions differ from the traditional circumflex
+and dollar (described in the next section) in that they only ever match
+at the very start and end of the string, whatever options are
+set. Thus, they are independent of multiline mode. These three assertions
+are not affected by the <varname>G_REGEX_MATCH_NOTBOL</varname> or <varname>G_REGEX_MATCH_NOTEOL</varname> options,
+which affect only the behaviour of the circumflex and dollar metacharacters.
+However, if the start_position argument of a matching function is non-zero,
+indicating that matching is to start at a point other than the beginning of
+the string, \A can never match. The difference between \Z and \z is
+that \Z matches before a newline at the end of the string as well at the
+very end, whereas \z matches only at the end.
+</para>
+
+<para>
+The \G assertion is true only when the current matching position is at
+the start point of the match, as specified by the start_position argument
+to the matching functions. It differs from \A when the value of startoffset is
+non-zero.
+</para>
+
+<para>
+Note, however, that the interpretation of \G, as the start of the
+current match, is subtly different from Perl’s, which defines it as the
+end of the previous match. In Perl, these can be different when the
+previously matched string was empty.
+</para>
+
+<para>
+If all the alternatives of a pattern begin with \G, the expression is
+anchored to the starting match position, and the "anchored" flag is set
+in the compiled regular expression.
+</para>
+</refsect2>
+</refsect1>
+
+<refsect1>
+<title>Circumflex and dollar</title>
+<para>
+Outside a character class, in the default matching mode, the circumflex
+character is an assertion that is true only if the current matching
+point is at the start of the string. If the start_position argument to
+the matching functions is non-zero, circumflex can never match if the
+<varname>G_REGEX_MULTILINE</varname> option is unset. Inside a character class, circumflex
+has an entirely different meaning (see below).
+</para>
+
+<para>
+Circumflex need not be the first character of the pattern if a number
+of alternatives are involved, but it should be the first thing in each
+alternative in which it appears if the pattern is ever to match that
+branch. If all possible alternatives start with a circumflex, that is,
+if the pattern is constrained to match only at the start of the string,
+it is said to be an "anchored" pattern. (There are also other
+constructs that can cause a pattern to be anchored.)
+</para>
+
+<para>
+A dollar character is an assertion that is true only if the current
+matching point is at the end of the string, or immediately
+before a newline at the end of the string (by default). Dollar need not
+be the last character of the pattern if a number of alternatives are
+involved, but it should be the last item in any branch in which it
+appears. Dollar has no special meaning in a character class.
+</para>
+
+<para>
+The meaning of dollar can be changed so that it matches only at the
+very end of the string, by setting the <varname>G_REGEX_DOLLAR_ENDONLY</varname> option at
+compile time. This does not affect the \Z assertion.
+</para>
+
+<para>
+The meanings of the circumflex and dollar characters are changed if the
+<varname>G_REGEX_MULTILINE</varname> option is set. When this is the case,
+a circumflex matches immediately after internal newlines as well as at the
+start of the string. It does not match after a newline that ends the string.
+A dollar matches before any newlines in the string, as well as at the very
+end, when <varname>G_REGEX_MULTILINE</varname> is set. When newline is
+specified as the two-character sequence CRLF, isolated CR and LF characters
+do not indicate newlines.
+</para>
+
+<para>
+For example, the pattern /^abc$/ matches the string "def\nabc" (where
+\n represents a newline) in multiline mode, but not otherwise. Consequently,
+patterns that are anchored in single line mode because all branches start with
+^ are not anchored in multiline mode, and a match for circumflex is possible
+when the <varname>start_position</varname> argument of a matching function
+is non-zero. The <varname>G_REGEX_DOLLAR_ENDONLY</varname> option is ignored
+if <varname>G_REGEX_MULTILINE</varname> is set.
+</para>
+
+<para>
+Note that the sequences \A, \Z, and \z can be used to match the start and
+end of the string in both modes, and if all branches of a pattern start with
+\A it is always anchored, whether or not <varname>G_REGEX_MULTILINE</varname>
+is set.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Full stop (period, dot)</title>
+<para>
+Outside a character class, a dot in the pattern matches any one character
+in the string, including a non-printing character, but not (by
+default) newline. In UTF-8 a character might be more than one byte long.
+</para>
+
+<para>
+When a line ending is defined as a single character, dot never matches that
+character; when the two-character sequence CRLF is used, dot does not match CR
+if it is immediately followed by LF, but otherwise it matches all characters
+(including isolated CRs and LFs). When any Unicode line endings are being
+recognized, dot does not match CR or LF or any of the other line ending
+characters.
+</para>
+
+<para>
+If the <varname>G_REGEX_DOTALL</varname> flag is set, dots match newlines
+as well. The handling of dot is entirely independent of the handling of circumflex
+and dollar, the only relationship being that they both involve newline
+characters. Dot has no special meaning in a character class.
+</para>
+
+<para>
+The behaviour of dot with regard to newlines can be changed. If the
+<varname>G_REGEX_DOTALL</varname> option is set, a dot matches any one
+character, without exception. If newline is defined as the two-character
+sequence CRLF, it takes two dots to match it.
+</para>
+
+<para>
+The handling of dot is entirely independent of the handling of circumflex and
+dollar, the only relationship being that they both involve newlines. Dot has no
+special meaning in a character class.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Matching a single byte</title>
+<para>
+Outside a character class, the escape sequence \C matches any one byte,
+both in and out of UTF-8 mode. Unlike a dot, it always matches any line
+ending characters.
+The feature is provided in Perl in order to match individual bytes in
+UTF-8 mode. Because it breaks up UTF-8 characters into individual
+bytes, what remains in the string may be a malformed UTF-8 string. For
+this reason, the \C escape sequence is best avoided.
+</para>
+
+<para>
+GRegex does not allow \C to appear in lookbehind assertions (described
+below), because in UTF-8 mode this would make it impossible to calculate
+the length of the lookbehind.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Square brackets and character classes</title>
+<para>
+An opening square bracket introduces a character class, terminated by a
+closing square bracket. A closing square bracket on its own is not special. If a closing square bracket is required as a member of the class,
+it should be the first data character in the class (after an initial
+circumflex, if present) or escaped with a backslash.
+</para>
+
+<para>
+A character class matches a single character in the string.  A matched character
+must be in the set of characters defined by the class, unless the first
+character in the class definition is a circumflex, in which case the
+string character must not be in the set defined by the class. If a
+circumflex is actually required as a member of the class, ensure it is
+not the first character, or escape it with a backslash.
+</para>
+
+<para>
+For example, the character class [aeiou] matches any lower case vowel,
+while [^aeiou] matches any character that is not a lower case vowel.
+Note that a circumflex is just a convenient notation for specifying the
+characters that are in the class by enumerating those that are not. A
+class that starts with a circumflex is not an assertion: it still consumes
+a character from the string, and therefore it fails if the current pointer
+is at the end of the string.
+</para>
+
+<para>
+In UTF-8 mode, characters with values greater than 255 can be included
+in a class as a literal string of bytes, or by using the \x{ escaping
+mechanism.
+</para>
+
+<para>
+When caseless matching is set, any letters in a class represent both
+their upper case and lower case versions, so for example, a caseless
+[aeiou] matches "A" as well as "a", and a caseless [^aeiou] does not
+match "A", whereas a caseful version would.
+</para>
+
+<para>
+Characters that might indicate line breaks are never treated
+in any special way when matching character classes, whatever line-ending
+sequence is in use, and whatever setting of the <varname>G_REGEX_DOTALL</varname>
+and <varname>G_REGEX_MULTILINE</varname> options is used. A class such as [^a]
+always matches one of these characters.
+</para>
+
+<para>
+The minus (hyphen) character can be used to specify a range of characters in
+a character class. For example, [d-m] matches any letter
+between d and m, inclusive. If a minus character is required in a
+class, it must be escaped with a backslash or appear in a position
+where it cannot be interpreted as indicating a range, typically as the
+first or last character in the class.
+</para>
+
+<para>
+It is not possible to have the literal character "]" as the end character
+of a range. A pattern such as [W-]46] is interpreted as a class of
+two characters ("W" and "-") followed by a literal string "46]", so it
+would match "W46]" or "-46]". However, if the "]" is escaped with a
+backslash it is interpreted as the end of range, so [W-\]46] is interpreted
+as a class containing a range followed by two other characters.
+The octal or hexadecimal representation of "]" can also be used to end
+a range.
+</para>
+
+<para>
+Ranges operate in the collating sequence of character values. They can
+also be used for characters specified numerically, for example
+[\000-\037]. In UTF-8 mode, ranges can include characters whose values
+are greater than 255, for example [\x{100}-\x{2ff}].
+</para>
+
+<para>
+The character types \d, \D, \p, \P, \s, \S, \w, and \W may also appear
+in a character class, and add the characters that they match to the
+class. For example, [\dABCDEF] matches any hexadecimal digit. A
+circumflex can conveniently be used with the upper case character types to
+specify a more restricted set of characters than the matching lower
+case type. For example, the class [^\W_] matches any letter or digit,
+but not underscore.
+</para>
+
+<para>
+The only metacharacters that are recognized in character classes are
+backslash, hyphen (only where it can be interpreted as specifying a
+range), circumflex (only at the start), opening square bracket (only
+when it can be interpreted as introducing a POSIX class name - see the
+next section), and the terminating closing square bracket. However,
+escaping other non-alphanumeric characters does no harm.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Posix character classes</title>
+<para>
+GRegex supports the POSIX notation for character classes. This uses names
+enclosed by [: and :] within the enclosing square brackets. For example,
+</para>
+
+<programlisting>
+[01[:alpha:]%]
+</programlisting>
+
+<para>
+matches "0", "1", any alphabetic character, or "%". The supported class
+names are
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Posix classes</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Name</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>alnum</entry>
+    <entry>letters and digits</entry>
+  </row>
+  <row>
+    <entry>alpha</entry>
+    <entry>letters</entry>
+  </row>
+  <row>
+    <entry>ascii</entry>
+    <entry>character codes 0 - 127</entry>
+  </row>
+  <row>
+    <entry>blank</entry>
+    <entry>space or tab only</entry>
+  </row>
+  <row>
+    <entry>cntrl</entry>
+    <entry>control characters</entry>
+  </row>
+  <row>
+    <entry>digit</entry>
+    <entry>decimal digits (same as \d)</entry>
+  </row>
+  <row>
+    <entry>graph</entry>
+    <entry>printing characters, excluding space</entry>
+  </row>
+  <row>
+    <entry>lower</entry>
+    <entry>lower case letters</entry>
+  </row>
+  <row>
+    <entry>print</entry>
+    <entry>printing characters, including space</entry>
+  </row>
+  <row>
+    <entry>punct</entry>
+    <entry>printing characters, excluding letters and digits</entry>
+  </row>
+  <row>
+    <entry>space</entry>
+    <entry>white space (not quite the same as \s)</entry>
+  </row>
+  <row>
+    <entry>upper</entry>
+    <entry>upper case letters</entry>
+  </row>
+  <row>
+    <entry>word</entry>
+    <entry>"word" characters (same as \w)</entry>
+  </row>
+  <row>
+    <entry>xdigit</entry>
+    <entry>hexadecimal digits</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13),
+and space (32). Notice that this list includes the VT character (code
+11). This makes "space" different to \s, which does not include VT (for
+Perl compatibility).
+</para>
+
+<para>
+The name "word" is a Perl extension, and "blank" is a GNU extension.
+Another Perl extension is negation, which is indicated by a ^ character
+after the colon. For example,
+</para>
+
+<programlisting>
+[12[:^digit:]]
+</programlisting>
+
+<para>
+matches "1", "2", or any non-digit. GRegex also recognize the
+POSIX syntax [.ch.] and [=ch=] where "ch" is a "collating element", but
+these are not supported, and an error is given if they are encountered.
+</para>
+
+<para>
+In UTF-8 mode, characters with values greater than 128 do not match any
+of the POSIX character classes.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Vertical bar</title>
+<para>
+Vertical bar characters are used to separate alternative patterns. For
+example, the pattern
+</para>
+
+<programlisting>
+ gilbert|sullivan
+</programlisting>
+
+<para>
+matches either "gilbert" or "sullivan". Any number of alternatives may
+appear, and an empty alternative is permitted (matching the empty
+string). The matching process tries each alternative in turn, from
+left to right, and the first one that succeeds is used. If the alternatives are within a subpattern (defined below), "succeeds" means matching the rest of the main pattern as well as the alternative in the subpattern.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Internal option setting</title>
+<para>
+The settings of the <varname>G_REGEX_CASELESS</varname>, <varname>G_REGEX_MULTILINE</varname>, <varname>G_REGEX_MULTILINE</varname>,
+and <varname>G_REGEX_EXTENDED</varname> options can be changed from within the pattern by a
+sequence of Perl-style option letters enclosed between "(?" and ")". The
+option letters are
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Option settings</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Option</entry>
+    <entry>Flag</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>i</entry>
+    <entry><varname>G_REGEX_CASELESS</varname></entry>
+  </row>
+  <row>
+    <entry>m</entry>
+    <entry><varname>G_REGEX_MULTILINE</varname></entry>
+  </row>
+  <row>
+    <entry>s</entry>
+    <entry><varname>G_REGEX_DOTALL</varname></entry>
+  </row>
+  <row>
+    <entry>x</entry>
+    <entry><varname>G_REGEX_EXTENDED</varname></entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+For example, (?im) sets caseless, multiline matching. It is also
+possible to unset these options by preceding the letter with a hyphen, and a
+combined setting and unsetting such as (?im-sx), which sets <varname>G_REGEX_CASELESS</varname>
+and <varname>G_REGEX_MULTILINE</varname> while unsetting <varname>G_REGEX_DOTALL</varname> and <varname>G_REGEX_EXTENDED</varname>,
+is also permitted. If a letter appears both before and after the
+hyphen, the option is unset.
+</para>
+
+<para>
+When an option change occurs at top level (that is, not inside subpattern
+parentheses), the change applies to the remainder of the pattern
+that follows.
+</para>
+
+<para>
+An option change within a subpattern (see below for a description of subpatterns)
+affects only that part of the current pattern that follows it, so
+</para>
+
+<programlisting>
+(a(?i)b)c
+</programlisting>
+
+<para>
+matches abc and aBc and no other strings (assuming <varname>G_REGEX_CASELESS</varname> is not
+used). By this means, options can be made to have different settings
+in different parts of the pattern. Any changes made in one alternative
+do carry on into subsequent branches within the same subpattern. For
+example,
+</para>
+
+<programlisting>
+(a(?i)b|c)
+</programlisting>
+
+<para>
+matches "ab", "aB", "c", and "C", even though when matching "C" the
+first branch is abandoned before the option setting. This is because
+the effects of option settings happen at compile time. There would be
+some very weird behaviour otherwise.
+</para>
+
+<para>
+The options <varname>G_REGEX_UNGREEDY</varname> and
+<varname>G_REGEX_EXTRA</varname> and <varname>G_REGEX_DUPNAMES</varname>
+can be changed in the same way as the Perl-compatible options by using
+the characters U, X and J respectively.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Subpatterns</title>
+<para>
+Subpatterns are delimited by parentheses (round brackets), which can be
+nested. Turning part of a pattern into a subpattern does two things:
+</para>
+
+<itemizedlist>
+<listitem><para>
+It localizes a set of alternatives. For example, the pattern
+cat(aract|erpillar|) matches one of the words "cat", "cataract", or
+"caterpillar". Without the parentheses, it would match "cataract",
+"erpillar" or an empty string.
+</para></listitem>
+<listitem><para>
+It sets up the subpattern as a capturing subpattern. This means
+that, when the whole pattern matches, that portion of the
+string that matched the subpattern can be obtained using <function>g_regex_fetch()</function>.
+Opening parentheses are counted from left to right (starting from 1, as
+subpattern 0 is the whole matched string) to obtain numbers for the
+capturing subpatterns.
+</para></listitem>
+</itemizedlist>
+
+<para>
+For example, if the string "the red king" is matched against the pattern
+</para>
+
+<programlisting>
+the ((red|white) (king|queen))
+</programlisting>
+
+<para>
+the captured substrings are "red king", "red", and "king", and are numbered 1, 2, and 3, respectively.
+</para>
+
+<para>
+The fact that plain parentheses fulfil two functions is not always
+helpful. There are often times when a grouping subpattern is required
+without a capturing requirement. If an opening parenthesis is followed
+by a question mark and a colon, the subpattern does not do any capturing,
+and is not counted when computing the number of any subsequent
+capturing subpatterns. For example, if the string "the white queen" is
+matched against the pattern
+</para>
+
+<programlisting>
+the ((?:red|white) (king|queen))
+</programlisting>
+
+<para>
+the captured substrings are "white queen" and "queen", and are numbered
+1 and 2. The maximum number of capturing subpatterns is 65535.
+</para>
+
+<para>
+As a convenient shorthand, if any option settings are required at the
+start of a non-capturing subpattern, the option letters may appear
+between the "?" and the ":". Thus the two patterns
+</para>
+
+<programlisting>
+(?i:saturday|sunday)
+(?:(?i)saturday|sunday)
+</programlisting>
+
+<para>
+match exactly the same set of strings. Because alternative branches are
+tried from left to right, and options are not reset until the end of
+the subpattern is reached, an option setting in one branch does affect
+subsequent branches, so the above patterns match "SUNDAY" as well as
+"Saturday".
+</para>
+</refsect1>
+
+<refsect1>
+<title>Named subpatterns</title>
+<para>
+Identifying capturing parentheses by number is simple, but it can be
+very hard to keep track of the numbers in complicated regular expressions.
+Furthermore, if an expression is modified, the numbers may
+change. To help with this difficulty, GRegex supports the naming of
+subpatterns.  A subpattern can be named in one of three ways: (?&lt;name&gt;...) or
+(?'name'...) as in Perl, or (?P&lt;name&gt;...) as in Python.
+References to capturing parentheses from other
+parts of the pattern, such as backreferences, recursion, and conditions,
+can be made by name as well as by number.
+</para>
+
+<para>
+Names consist of up to 32 alphanumeric characters and underscores. Named
+capturing parentheses are still allocated numbers as well as names, exactly as
+if the names were not present.
+By default, a name must be unique within a pattern, but it is possible to relax
+this constraint by setting the <varname>G_REGEX_DUPNAMES</varname> option at
+compile time. This can be useful for patterns where only one instance of the
+named parentheses can match. Suppose you want to match the name of a weekday,
+either as a 3-letter abbreviation or as the full name, and in both cases you
+want to extract the abbreviation. This pattern (ignoring the line breaks) does
+the job:
+</para>
+
+<programlisting>
+(?&lt;DN&gt;Mon|Fri|Sun)(?:day)?|
+(?&lt;DN&gt;Tue)(?:sday)?|
+(?&lt;DN&gt;Wed)(?:nesday)?|
+(?&lt;DN&gt;Thu)(?:rsday)?|
+(?&lt;DN&gt;Sat)(?:urday)?
+</programlisting>
+
+<para>
+There are five capturing substrings, but only one is ever set after a match.
+The function for extracting the data by name returns the substring
+for the first (and in this example, the only) subpattern of that name that
+matched. This saves searching to find which numbered subpattern it was. If you
+make a reference to a non-unique named subpattern from elsewhere in the
+pattern, the one that corresponds to the lowest number is used.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Repetition</title>
+<para>
+Repetition is specified by quantifiers, which can follow any of the
+following items:
+</para>
+
+<itemizedlist>
+<listitem><para>a literal data character</para></listitem>
+<listitem><para>the dot metacharacter</para></listitem>
+<listitem><para>the \C escape sequence</para></listitem>
+<listitem><para>the \X escape sequence (in UTF-8 mode)</para></listitem>
+<listitem><para>the \R escape sequence</para></listitem>
+<listitem><para>an escape such as \d that matches a single character</para></listitem>
+<listitem><para>a character class</para></listitem>
+<listitem><para>a back reference (see next section)</para></listitem>
+<listitem><para>a parenthesized subpattern (unless it is an assertion)</para></listitem>
+</itemizedlist>
+
+<para>
+The general repetition quantifier specifies a minimum and maximum number
+of permitted matches, by giving the two numbers in curly brackets
+(braces), separated by a comma. The numbers must be less than 65536,
+and the first must be less than or equal to the second. For example:
+</para>
+
+<programlisting>
+z{2,4}
+</programlisting>
+
+<para>
+matches "zz", "zzz", or "zzzz". A closing brace on its own is not a
+special character. If the second number is omitted, but the comma is
+present, there is no upper limit; if the second number and the comma
+are both omitted, the quantifier specifies an exact number of required
+matches. Thus
+</para>
+
+<programlisting>
+[aeiou]{3,}
+</programlisting>
+
+<para>
+matches at least 3 successive vowels, but may match many more, while
+</para>
+
+<programlisting>
+\d{8}
+</programlisting>
+
+<para>
+matches exactly 8 digits. An opening curly bracket that appears in a
+position where a quantifier is not allowed, or one that does not match
+the syntax of a quantifier, is taken as a literal character. For example,
+{,6} is not a quantifier, but a literal string of four characters.
+</para>
+
+<para>
+In UTF-8 mode, quantifiers apply to UTF-8 characters rather than to
+individual bytes. Thus, for example, \x{100}{2} matches two UTF-8
+characters, each of which is represented by a two-byte sequence. Similarly,
+\X{3} matches three Unicode extended sequences, each of which may be
+several bytes long (and they may be of different lengths).
+</para>
+
+<para>
+The quantifier {0} is permitted, causing the expression to behave as if
+the previous item and the quantifier were not present.
+</para>
+
+<para>
+For convenience, the three most common quantifiers have single-character
+abbreviations:
+</para>
+
+<table frame="all" colsep="1" rowsep="1">
+<title>Abbreviations for quantifiers</title>
+<tgroup cols="2">
+<colspec colnum="1" align="center"/>
+<thead>
+  <row>
+    <entry>Abbreviation</entry>
+    <entry>Meaning</entry>
+  </row>
+</thead>
+<tbody>
+  <row>
+    <entry>*</entry>
+    <entry>is equivalent to {0,}</entry>
+  </row>
+  <row>
+    <entry>+</entry>
+    <entry>is equivalent to {1,}</entry>
+  </row>
+  <row>
+    <entry>?</entry>
+    <entry>is equivalent to {0,1}</entry>
+  </row>
+</tbody>
+</tgroup>
+</table>
+
+<para>
+It is possible to construct infinite loops by following a subpattern
+that can match no characters with a quantifier that has no upper limit,
+for example:
+</para>
+
+<programlisting>
+(a?)*
+</programlisting>
+
+<para>
+Because there are cases where this can be useful, such patterns are
+accepted, but if any repetition of the subpattern does in fact match
+no characters, the loop is forcibly broken.
+</para>
+
+<para>
+By default, the quantifiers are "greedy", that is, they match as much
+as possible (up to the maximum number of permitted times), without
+causing the rest of the pattern to fail. The classic example of where
+this gives problems is in trying to match comments in C programs. These
+appear between /* and */ and within the comment, individual * and /
+characters may appear. An attempt to match C comments by applying the
+pattern
+</para>
+
+<programlisting>
+/\*.*\*/
+</programlisting>
+
+<para>
+to the string
+</para>
+
+<programlisting>
+/* first comment */  not comment  /* second comment */
+</programlisting>
+
+<para>
+fails, because it matches the entire string owing to the greediness of
+the .* item.
+</para>
+
+<para>
+However, if a quantifier is followed by a question mark, it ceases to
+be greedy, and instead matches the minimum number of times possible, so
+the pattern
+</para>
+
+<programlisting>
+/\*.*?\*/
+</programlisting>
+
+<para>
+does the right thing with the C comments. The meaning of the various
+quantifiers is not otherwise changed, just the preferred number of
+matches. Do not confuse this use of question mark with its use as a
+quantifier in its own right. Because it has two uses, it can sometimes
+appear doubled, as in
+</para>
+
+<programlisting>
+\d??\d
+</programlisting>
+
+<para>
+which matches one digit by preference, but can match two if that is the
+only way the rest of the pattern matches.
+</para>
+
+<para>
+If the <varname>G_REGEX_UNGREEDY</varname> flag is set, the quantifiers are not greedy
+by default, but individual ones can be made greedy by following them with
+a question mark. In other words, it inverts the default behaviour.
+</para>
+
+<para>
+When a parenthesized subpattern is quantified with a minimum repeat
+count that is greater than 1 or with a limited maximum, more memory is
+required for the compiled pattern, in proportion to the size of the
+minimum or maximum.
+</para>
+
+<para>
+If a pattern starts with .* or .{0,} and the <varname>G_REGEX_DOTALL</varname> flag
+is set, thus allowing the dot to match newlines, the
+pattern is implicitly anchored, because whatever follows will be tried
+against every character position in the string, so there is no
+point in retrying the overall match at any position after the first.
+GRegex normally treats such a pattern as though it were preceded by \A.
+</para>
+
+<para>
+In cases where it is known that the string contains no newlines, it
+is worth setting <varname>G_REGEX_DOTALL</varname> in order to obtain this optimization,
+or alternatively using ^ to indicate anchoring explicitly.
+</para>
+
+<para>
+However, there is one situation where the optimization cannot be used.
+When .* is inside capturing parentheses that are the subject of a
+backreference elsewhere in the pattern, a match at the start may fail
+where a later one succeeds. Consider, for example:
+</para>
+
+<programlisting>
+(.*)abc\1
+</programlisting>
+
+<para>
+If the string is "xyz123abc123" the match point is the fourth character.
+For this reason, such a pattern is not implicitly anchored.
+</para>
+
+<para>
+When a capturing subpattern is repeated, the value captured is the
+substring that matched the final iteration. For example, after
+</para>
+
+<programlisting>
+(tweedle[dume]{3}\s*)+
+</programlisting>
+
+<para>
+has matched "tweedledum tweedledee" the value of the captured substring
+is "tweedledee". However, if there are nested capturing subpatterns,
+the corresponding captured values may have been set in previous iterations.
+For example, after
+</para>
+
+<programlisting>
+/(a|(b))+/
+</programlisting>
+
+<para>
+matches "aba" the value of the second captured substring is "b".
+</para>
+</refsect1>
+
+<refsect1>
+<title>Atomic grouping and possessive quantifiers</title>
+<para>
+With both maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
+repetition, failure of what follows normally causes the repeated
+item to be re-evaluated to see if a different number
+of repeats allows the rest of the pattern to match. Sometimes it
+is useful to prevent this, either to change the nature of the
+match, or to cause it fail earlier than it otherwise might, when the
+author of the pattern knows there is no point in carrying on.
+</para>
+
+<para>
+Consider, for example, the pattern \d+foo when applied to the string
+</para>
+
+<programlisting>
+123456bar
+</programlisting>
+
+<para>
+After matching all 6 digits and then failing to match "foo", the normal
+action of the matcher is to try again with only 5 digits matching the
+\d+ item, and then with 4, and so on, before ultimately failing.
+"Atomic grouping" (a term taken from Jeffrey Friedl’s book) provides
+the means for specifying that once a subpattern has matched, it is not
+to be re-evaluated in this way.
+</para>
+
+<para>
+If we use atomic grouping for the previous example, the matcher
+give up immediately on failing to match "foo" the first time. The notation
+is a kind of special parenthesis, starting with (?&gt; as in this
+example:
+</para>
+
+<programlisting>
+(?>\d+)foo
+</programlisting>
+
+<para>
+This kind of parenthesis "locks up" the part of the pattern it contains
+once it has matched, and a failure further into the pattern is
+prevented from backtracking into it. Backtracking past it to previous
+items, however, works as normal.
+</para>
+
+<para>
+An alternative description is that a subpattern of this type matches
+the string of characters that an identical standalone pattern would
+match, if anchored at the current point in the string.
+</para>
+
+<para>
+Atomic grouping subpatterns are not capturing subpatterns. Simple cases
+such as the above example can be thought of as a maximizing repeat that
+must swallow everything it can. So, while both \d+ and \d+? are prepared
+to adjust the number of digits they match in order to make the
+rest of the pattern match, (?>\d+) can only match an entire sequence of
+digits.
+</para>
+
+<para>
+Atomic groups in general can of course contain arbitrarily complicated
+subpatterns, and can be nested. However, when the subpattern for an
+atomic group is just a single repeated item, as in the example above, a
+simpler notation, called a "possessive quantifier" can be used. This
+consists of an additional + character following a quantifier. Using
+this notation, the previous example can be rewritten as
+</para>
+
+<programlisting>
+\d++foo
+</programlisting>
+
+<para>
+Possessive quantifiers are always greedy; the setting of the
+<varname>G_REGEX_UNGREEDY</varname> option is ignored. They are a convenient notation for the
+simpler forms of atomic group. However, there is no difference in the
+meaning of a possessive quantifier and the equivalent
+atomic group, though there may be a performance difference;
+possessive quantifiers should be slightly faster.
+</para>
+
+<para>
+The possessive quantifier syntax is an extension to the Perl syntax.
+It was invented by Jeffrey Friedl in the first edition of his book and
+then implemented by Mike McCloskey in Sun's Java package.
+It ultimately found its way into Perl at release 5.10.
+</para>
+
+<para>
+GRegex has an optimization that automatically "possessifies" certain simple
+pattern constructs. For example, the sequence A+B is treated as A++B because
+there is no point in backtracking into a sequence of A's when B must follow.
+</para>
+
+<para>
+When a pattern contains an unlimited repeat inside a subpattern that
+can itself be repeated an unlimited number of times, the use of an
+atomic group is the only way to avoid some failing matches taking a
+very long time indeed. The pattern
+</para>
+ 
+<programlisting>
+(\D+|&lt;\d+&gt;)*[!?]
+</programlisting>
+
+<para>
+matches an unlimited number of substrings that either consist of non-
+digits, or digits enclosed in &lt;&gt;, followed by either ! or ?. When it
+matches, it runs quickly. However, if it is applied to
+</para>
+
+<programlisting>
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+</programlisting>
+
+<para>
+it takes a long time before reporting failure. This is because the
+string can be divided between the internal \D+ repeat and the external
+* repeat in a large number of ways, and all have to be tried. (The
+example uses [!?] rather than a single character at the end, because
+GRegex has an optimization that allows for fast failure
+when a single character is used. It remember the last single character
+that is required for a match, and fail early if it is not present
+in the string.) If the pattern is changed so that it uses an atomic
+group, like this:
+</para>
+
+<programlisting>
+((?>\D+)|&lt;\d+&gt;)*[!?]
+</programlisting>
+
+<para>
+sequences of non-digits cannot be broken, and failure happens quickly.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Back references</title>
+<para>
+Outside a character class, a backslash followed by a digit greater than
+0 (and possibly further digits) is a back reference to a capturing subpattern
+earlier (that is, to its left) in the pattern, provided there have been that
+many previous capturing left parentheses.
+</para>
+
+<para>
+However, if the decimal number following the backslash is less than 10,
+it is always taken as a back reference, and causes an error only if
+there are not that many capturing left parentheses in the entire pattern.
+In other words, the parentheses that are referenced need not be
+to the left of the reference for numbers less than 10. A "forward back
+reference" of this type can make sense when a repetition is involved and
+the subpattern to the right has participated in an earlier iteration.
+</para>
+
+<para>
+It is not possible to have a numerical "forward back reference" to subpattern
+whose number is 10 or more using this syntax because a sequence such as \e50 is
+interpreted as a character defined in octal. See the subsection entitled
+"Non-printing characters" above for further details of the handling of digits
+following a backslash. There is no such problem when named parentheses are used.
+A back reference to any subpattern is possible using named parentheses (see below).
+</para>
+
+<para>
+Another way of avoiding the ambiguity inherent in the use of digits following a
+backslash is to use the \g escape sequence (introduced in Perl 5.10.)
+This escape must be followed by a positive or a negative number,
+optionally enclosed in braces.
+</para>
+
+<para>
+A positive number specifies an absolute reference without the ambiguity that is
+present in the older syntax. It is also useful when literal digits follow the
+reference. A negative number is a relative reference. Consider "(abc(def)ghi)\g{-1}",
+the sequence \g{-1} is a reference to the most recently started capturing
+subpattern before \g, that is, is it equivalent to \2. Similarly, \g{-2}
+would be equivalent to \1. The use of relative references can be helpful in
+long patterns, and also in patterns that are created by joining together
+fragments that contain references within themselves.
+</para>
+
+<para>
+A back reference matches whatever actually matched the capturing subpattern
+in the current string, rather than anything matching
+the subpattern itself (see "Subpatterns as subroutines" below for a way
+of doing that). So the pattern
+</para>
+
+<programlisting>
+(sens|respons)e and \1ibility
+</programlisting>
+
+<para>
+matches "sense and sensibility" and "response and responsibility", but
+not "sense and responsibility". If caseful matching is in force at the
+time of the back reference, the case of letters is relevant. For example,
+</para>
+
+<programlisting>
+((?i)rah)\s+\1
+</programlisting>
+
+<para>
+matches "rah rah" and "RAH RAH", but not "RAH rah", even though the
+original capturing subpattern is matched caselessly.
+</para>
+
+<para>
+Back references to named subpatterns use the Perl syntax \k&lt;name&gt; or \k'name'
+or the Python syntax (?P=name). We could rewrite the above example in either of
+the following ways:
+</para>
+
+<programlisting>
+(?&lt;p1&gt;(?i)rah)\s+\k&lt;p1&gt;
+(?P&lt;p1&gt;(?i)rah)\s+(?P=p1)
+</programlisting>
+
+<para>
+A subpattern that is referenced by name may appear in the pattern before or
+after the reference.
+</para>
+
+<para>
+There may be more than one back reference to the same subpattern. If a
+subpattern has not actually been used in a particular match, any back
+references to it always fail. For example, the pattern
+</para>
+
+<programlisting>
+(a|(bc))\2
+</programlisting>
+
+<para>
+always fails if it starts to match "a" rather than "bc". Because there
+may be many capturing parentheses in a pattern, all digits following
+the backslash are taken as part of a potential back reference number.
+If the pattern continues with a digit character, some delimiter must be
+used to terminate the back reference. If the <varname>G_REGEX_EXTENDED</varname> flag is
+set, this can be whitespace. Otherwise an empty comment (see "Comments" below) can be used.
+</para>
+
+<para>
+A back reference that occurs inside the parentheses to which it refers
+fails when the subpattern is first used, so, for example, (a\1) never
+matches. However, such references can be useful inside repeated subpatterns.
+For example, the pattern
+</para>
+
+<programlisting>
+(a|b\1)+
+</programlisting>
+
+<para>
+matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration
+of the subpattern, the back reference matches the character
+string corresponding to the previous iteration. In order for this to
+work, the pattern must be such that the first iteration does not need
+to match the back reference. This can be done using alternation, as in
+the example above, or by a quantifier with a minimum of zero.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Assertions</title>
+<para>
+An assertion is a test on the characters following or preceding the
+current matching point that does not actually consume any characters.
+The simple assertions coded as \b, \B, \A, \G, \Z, \z, ^ and $ are
+described above.
+</para>
+
+<para>
+More complicated assertions are coded as subpatterns. There are two
+kinds: those that look ahead of the current position in the
+string, and those that look behind it. An assertion subpattern is
+matched in the normal way, except that it does not cause the current
+matching position to be changed.
+</para>
+
+<para>
+Assertion subpatterns are not capturing subpatterns, and may not be
+repeated, because it makes no sense to assert the same thing several
+times. If any kind of assertion contains capturing subpatterns within
+it, these are counted for the purposes of numbering the capturing
+subpatterns in the whole pattern. However, substring capturing is carried
+out only for positive assertions, because it does not make sense for
+negative assertions.
+</para>
+
+<refsect2>
+<title>Lookahead assertions</title>
+<para>
+Lookahead assertions start with (?= for positive assertions and (?! for
+negative assertions. For example,
+</para>
+
+<programlisting>
+\w+(?=;)
+</programlisting>
+
+<para>
+matches a word followed by a semicolon, but does not include the semicolon
+in the match, and
+</para>
+
+<programlisting>
+foo(?!bar)
+</programlisting>
+
+<para>
+matches any occurrence of "foo" that is not followed by "bar". Note
+that the apparently similar pattern
+</para>
+
+<programlisting>
+(?!foo)bar
+</programlisting>
+
+<para>
+does not find an occurrence of "bar" that is preceded by something
+other than "foo"; it finds any occurrence of "bar" whatsoever, because
+the assertion (?!foo) is always true when the next three characters are
+"bar". A lookbehind assertion is needed to achieve the other effect.
+</para>
+
+<para>
+If you want to force a matching failure at some point in a pattern, the
+most convenient way to do it is with (?!) because an empty string
+always matches, so an assertion that requires there not to be an empty
+string must always fail.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Lookbehind assertions</title>
+<para>
+Lookbehind assertions start with (?&lt;= for positive assertions and (?&lt;!
+for negative assertions. For example,
+</para>
+
+<programlisting>
+(?&lt;!foo)bar
+</programlisting>
+
+<para>
+does find an occurrence of "bar" that is not preceded by "foo". The
+contents of a lookbehind assertion are restricted such that all the
+strings it matches must have a fixed length. However, if there are
+several top-level alternatives, they do not all have to have the same
+fixed length. Thus
+</para>
+
+<programlisting>
+(?&lt;=bullock|donkey)
+</programlisting>
+
+<para>
+is permitted, but
+</para>
+
+<programlisting>
+(?&lt;!dogs?|cats?)
+</programlisting>
+
+<para>
+causes an error at compile time. Branches that match different length
+strings are permitted only at the top level of a lookbehind assertion.
+An assertion such as
+</para>
+
+<programlisting>
+(?&lt;=ab(c|de))
+</programlisting>
+
+<para>
+is not permitted, because its single top-level branch can match two
+different lengths, but it is acceptable if rewritten to use two top-
+level branches:
+</para>
+
+<programlisting>
+(?&lt;=abc|abde)
+</programlisting>
+
+<para>
+The implementation of lookbehind assertions is, for each alternative,
+to temporarily move the current position back by the fixed length and
+then try to match. If there are insufficient characters before the
+current position, the assertion fails.
+</para>
+
+<para>
+GRegex does not allow the \C escape (which matches a single byte in UTF-8
+mode) to appear in lookbehind assertions, because it makes it impossible
+to calculate the length of the lookbehind. The \X and \R escapes, which can
+match different numbers of bytes, are also not permitted.
+</para>
+
+<para>
+Possessive quantifiers can be used in conjunction with lookbehind assertions to
+specify efficient matching at the end of the subject string. Consider a simple
+pattern such as
+</para>
+
+<programlisting>
+abcd$
+</programlisting>
+
+<para>
+when applied to a long string that does not match. Because matching
+proceeds from left to right, GRegex will look for each "a" in the string
+and then see if what follows matches the rest of the pattern. If the
+pattern is specified as
+</para>
+
+<programlisting>
+^.*abcd$
+</programlisting>
+
+<para>
+the initial .* matches the entire string at first, but when this fails
+(because there is no following "a"), it backtracks to match all but the
+last character, then all but the last two characters, and so on. Once
+again the search for "a" covers the entire string, from right to left,
+so we are no better off. However, if the pattern is written as
+</para>
+
+<programlisting>
+^.*+(?&lt;=abcd)
+</programlisting>
+
+<para>
+there can be no backtracking for the .*+ item; it can match only the
+entire string. The subsequent lookbehind assertion does a single test
+on the last four characters. If it fails, the match fails immediately.
+For long strings, this approach makes a significant difference to the
+processing time.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Using multiple assertions</title>
+<para>
+Several assertions (of any sort) may occur in succession. For example,
+</para>
+
+<programlisting>
+(?&lt;=\d{3})(?&lt;!999)foo
+</programlisting>
+
+<para>
+matches "foo" preceded by three digits that are not "999". Notice that
+each of the assertions is applied independently at the same point in
+the string. First there is a check that the previous three
+characters are all digits, and then there is a check that the same
+three characters are not "999". This pattern does not match "foo" preceded
+by six characters, the first of which are digits and the last
+three of which are not "999". For example, it doesn’t match "123abcfoo".
+A pattern to do that is
+</para>
+
+<programlisting>
+(?&lt;=\d{3}...)(?&lt;!999)foo
+</programlisting>
+
+<para>
+This time the first assertion looks at the preceding six characters,
+checking that the first three are digits, and then the second assertion
+checks that the preceding three characters are not "999".
+</para>
+
+<para>
+Assertions can be nested in any combination. For example,
+</para>
+
+<programlisting>
+(?&lt;=(?&lt;!foo)bar)baz
+</programlisting>
+
+<para>
+matches an occurrence of "baz" that is preceded by "bar" which in turn
+is not preceded by "foo", while
+</para>
+
+<programlisting>
+(?&lt;=\d{3}(?!999)...)foo
+</programlisting>
+
+<para>
+is another pattern that matches "foo" preceded by three digits and any
+three characters that are not "999".
+</para>
+</refsect2>
+</refsect1>
+
+<refsect1>
+<title>Conditional subpatterns</title>
+<para>
+It is possible to cause the matching process to obey a subpattern
+conditionally or to choose between two alternative subpatterns, depending
+on the result of an assertion, or whether a previous capturing subpattern
+matched or not. The two possible forms of conditional subpattern are
+</para>
+
+<programlisting>
+(?(condition)yes-pattern)
+(?(condition)yes-pattern|no-pattern)
+</programlisting>
+
+<para>
+If the condition is satisfied, the yes-pattern is used; otherwise the
+no-pattern (if present) is used. If there are more than two alternatives
+in the subpattern, a compile-time error occurs.
+</para>
+
+<para>
+There are four kinds of condition: references to subpatterns, references to
+recursion, a pseudo-condition called DEFINE, and assertions.
+</para>
+
+<refsect2>
+<title>Checking for a used subpattern by number</title>
+<para>
+If the text between the parentheses consists of a sequence of digits, the
+condition is true if the capturing subpattern of that number has previously
+matched.
+</para>
+
+<para>
+Consider the following pattern, which contains non-significant white space
+to make it more readable (assume the <varname>G_REGEX_EXTENDED</varname>)
+and to divide it into three parts for ease of discussion:
+</para>
+
+<programlisting>
+( \( )?    [^()]+    (?(1) \) )
+</programlisting>
+
+<para>
+The first part matches an optional opening parenthesis, and if that
+character is present, sets it as the first captured substring. The second
+part matches one or more characters that are not parentheses. The
+third part is a conditional subpattern that tests whether the first set
+of parentheses matched or not. If they did, that is, if string started
+with an opening parenthesis, the condition is true, and so the yes-pattern
+is executed and a closing parenthesis is required. Otherwise,
+since no-pattern is not present, the subpattern matches nothing. In
+other words, this pattern matches a sequence of non-parentheses,
+optionally enclosed in parentheses.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Checking for a used subpattern by name</title>
+<para>
+Perl uses the syntax (?(&lt;name&gt;)...) or (?('name')...) to test for a used
+subpattern by name, the Python syntax (?(name)...) is also recognized. However,
+there is a possible ambiguity with this syntax, because subpattern names may
+consist entirely of digits. GRegex looks first for a named subpattern; if it
+cannot find one and the name consists entirely of digits, GRegex looks for a
+subpattern of that number, which must be greater than zero. Using subpattern
+names that consist entirely of digits is not recommended.
+</para>
+
+<para>
+Rewriting the above example to use a named subpattern gives this:
+</para>
+
+<programlisting>
+(?&lt;OPEN&gt; \( )?    [^()]+    (?(&lt;OPEN&gt;) \) )
+</programlisting>
+</refsect2>
+
+<refsect2>
+<title>Checking for pattern recursion</title>
+<para>
+If the condition is the string (R), and there is no subpattern with the name R,
+the condition is true if a recursive call to the whole pattern or any
+subpattern has been made. If digits or a name preceded by ampersand follow the
+letter R, for example:
+</para>
+
+<programlisting>
+(?(R3)...)
+(?(R&amp;name)...)
+</programlisting>
+
+<para>
+the condition is true if the most recent recursion is into the subpattern whose
+number or name is given. This condition does not check the entire recursion
+stack.
+</para>
+
+<para>
+At "top level", all these recursion test conditions are false. Recursive
+patterns are described below.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Defining subpatterns for use by reference only</title>
+<para>
+If the condition is the string (DEFINE), and there is no subpattern with the
+name DEFINE, the condition is always false. In this case, there may be only one
+alternative in the subpattern. It is always skipped if control reaches this
+point in the pattern; the idea of DEFINE is that it can be used to define
+"subroutines" that can be referenced from elsewhere. (The use of "subroutines"
+is described below.) For example, a pattern to match an IPv4 address could be
+written like this (ignore whitespace and line breaks):
+</para>
+
+<programlisting>
+(?(DEFINE) (?&lt;byte&gt; 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )
+\b (?&amp;byte) (\.(?&amp;byte)){3} \b
+</programlisting>
+
+<para>
+The first part of the pattern is a DEFINE group inside which a another group
+named "byte" is defined. This matches an individual component of an IPv4
+address (a number less than 256). When matching takes place, this part of the
+pattern is skipped because DEFINE acts like a false condition.
+</para>
+
+<para>
+The rest of the pattern uses references to the named group to match the four
+dot-separated components of an IPv4 address, insisting on a word boundary at
+each end.
+</para>
+</refsect2>
+
+<refsect2>
+<title>Assertion conditions</title>
+<para>
+If the condition is not in any of the above formats, it must be an
+assertion. This may be a positive or negative lookahead or lookbehind
+assertion. Consider this pattern, again containing non-significant
+white space, and with the two alternatives on the second line:
+</para>
+
+<programlisting>
+(?(?=[^a-z]*[a-z])
+\d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )
+</programlisting>
+
+<para>
+The condition is a positive lookahead assertion that matches an
+optional sequence of non-letters followed by a letter. In other words,
+it tests for the presence of at least one letter in the string. If a
+letter is found, the string is matched against the first alternative;
+otherwise it is matched against the second. This pattern matches
+strings in one of the two forms dd-aaa-dd or dd-dd-dd, where aaa are
+letters and dd are digits.
+</para>
+</refsect2>
+</refsect1>
+
+<refsect1>
+<title>Comments</title>
+<para>
+The sequence (?# marks the start of a comment that continues up to the
+next closing parenthesis. Nested parentheses are not permitted. The
+characters that make up a comment play no part in the pattern matching
+at all.
+</para>
+
+<para>
+If the <varname>G_REGEX_EXTENDED</varname> option is set, an unescaped #
+character outside a character class introduces a comment that continues to
+immediately after the next newline in the pattern.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Recursive patterns</title>
+<para>
+Consider the problem of matching a string in parentheses, allowing for
+unlimited nested parentheses. Without the use of recursion, the best
+that can be done is to use a pattern that matches up to some fixed
+depth of nesting. It is not possible to handle an arbitrary nesting
+depth.
+</para>
+
+<para>
+For some time, Perl has provided a facility that allows regular expressions to
+recurse (amongst other things). It does this by interpolating Perl code in the
+expression at run time, and the code can refer to the expression itself. A Perl
+pattern using code interpolation to solve the parentheses problem can be
+created like this:
+</para>
+
+<programlisting>
+$re = qr{\( (?: (?&gt;[^()]+) | (?p{$re}) )* \)}x;
+</programlisting>
+
+<para>
+The (?p{...}) item interpolates Perl code at run time, and in this case refers
+recursively to the pattern in which it appears.
+</para>
+
+<para>
+Obviously, GRegex cannot support the interpolation of Perl code. Instead, it
+supports special syntax for recursion of the entire pattern, and also for
+individual subpattern recursion. This kind of recursion was introduced into
+Perl at release 5.10.
+</para>
+
+<para>
+A special item that consists of (? followed by a number greater than zero and a
+closing parenthesis is a recursive call of the subpattern of the given number,
+provided that it occurs inside that subpattern. (If not, it is a "subroutine"
+call, which is described in the next section.) The special item (?R) or (?0) is
+a recursive call of the entire regular expression.
+</para>
+
+<para>
+In GRegex (like Python, but unlike Perl), a recursive subpattern call is always
+treated as an atomic group. That is, once it has matched some of the subject
+string, it is never re-entered, even if it contains untried alternatives and
+there is a subsequent matching failure.
+</para>
+
+<para>
+This pattern solves the nested parentheses problem (assume the
+<varname>G_REGEX_EXTENDED</varname> option is set so that white space is
+ignored):
+</para>
+
+<programlisting>
+\( ( (?&gt;[^()]+) | (?R) )* \)
+</programlisting>
+
+<para>
+First it matches an opening parenthesis. Then it matches any number of
+substrings which can either be a sequence of non-parentheses, or a
+recursive match of the pattern itself (that is, a correctly parenthesized
+substring). Finally there is a closing parenthesis.
+</para>
+
+<para>
+If this were part of a larger pattern, you would not want to recurse
+the entire pattern, so instead you could use this:
+</para>
+
+<programlisting>
+( \( ( (?&gt;[^()]+) | (?1) )* \) )
+</programlisting>
+
+<para>
+We have put the pattern into parentheses, and caused the recursion to
+refer to them instead of the whole pattern. In a larger pattern, keeping
+track of parenthesis numbers can be tricky. It may be more convenient to
+use named parentheses instead.
+The Perl syntax for this is (?&amp;name); GRegex also supports the(?P>name)
+syntac. We could rewrite the above example as follows:
+</para>
+
+<programlisting>
+(?&lt;pn&gt; \( ( (?&gt;[^()]+) | (?&amp;pn) )* \) )
+</programlisting>
+
+<para>
+If there is more than one subpattern with the same name, the earliest one is
+used. This particular example pattern contains nested unlimited repeats, and so
+the use of atomic grouping for matching strings of non-parentheses is important
+when applying the pattern to strings that do not match.
+For example, when this pattern is applied to
+</para>
+
+<programlisting>
+(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
+</programlisting>
+
+<para>
+it yields "no match" quickly. However, if atomic grouping is not used,
+the match runs for a very long time indeed because there are so many
+different ways the + and * repeats can carve up the string, and all
+have to be tested before failure can be reported.
+</para>
+
+<para>
+At the end of a match, the values set for any capturing subpatterns are
+those from the outermost level of the recursion at which the subpattern
+value is set.
+
+<!-- Callouts are not supported by GRegex
+If you want to obtain intermediate values, a callout
+function can be used (see below and the pcrecallout documentation). -->
+
+If the pattern above is matched against
+</para>
+
+<programlisting>
+(ab(cd)ef)
+</programlisting>
+
+<para>
+the value for the capturing parentheses is "ef", which is the last
+value taken on at the top level. If additional parentheses are added,
+giving
+</para>
+
+<programlisting>
+\( ( ( (?&gt;[^()]+) | (?R) )* ) \)
+   ^                        ^
+   ^                        ^
+</programlisting>
+
+<para>
+the string they capture is "ab(cd)ef", the contents of the top level
+parentheses.
+</para>
+
+<para>
+Do not confuse the (?R) item with the condition (R), which tests for
+recursion. Consider this pattern, which matches text in angle brackets,
+allowing for arbitrary nesting. Only digits are allowed in nested
+brackets (that is, when recursing), whereas any characters are permitted
+at the outer level.
+</para>
+
+<programlisting>
+&lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;
+</programlisting>
+
+<para>
+In this pattern, (?(R) is the start of a conditional subpattern, with
+two different alternatives for the recursive and non-recursive cases.
+The (?R) item is the actual recursive call.
+</para>
+</refsect1>
+
+<refsect1>
+<title>Subpatterns as subroutines</title>
+<para>
+If the syntax for a recursive subpattern reference (either by number or
+by name) is used outside the parentheses to which it refers, it operates
+like a subroutine in a programming language. The "called" subpattern may
+be defined before or after the reference. An earlier example pointed out
+that the pattern
+</para>
+
+<programlisting>
+(sens|respons)e and \1ibility
+</programlisting>
+
+<para>
+matches "sense and sensibility" and "response and responsibility", but
+not "sense and responsibility". If instead the pattern
+</para>
+
+<programlisting>
+(sens|respons)e and (?1)ibility
+</programlisting>
+
+<para>
+is used, it does match "sense and responsibility" as well as the other
+two strings. Another example is given in the discussion of DEFINE above.
+</para>
+
+<para>
+Like recursive subpatterns, a "subroutine" call is always treated as an atomic
+group. That is, once it has matched some of the string, it is never
+re-entered, even if it contains untried alternatives and there is a subsequent
+matching failure.
+</para>
+
+<para>
+When a subpattern is used as a subroutine, processing options such as
+case-independence are fixed when the subpattern is defined. They cannot be
+changed for different calls. For example, consider this pattern:
+</para>
+
+<programlisting>
+(abc)(?i:(?1))
+</programlisting>
+
+<para>
+It matches "abcabc". It does not match "abcABC" because the change of
+processing option does not affect the called subpattern.
+</para>
+</refsect1>
+
+<!-- Callouts are not supported by GRegex
+<refsect1>
+<title>Callouts</title>
+<para>
+Perl has a feature whereby using the sequence (?{...}) causes arbitrary
+Perl code to be obeyed in the middle of matching a regular expression.
+This makes it possible, amongst other things, to extract different substrings that match the same pair of parentheses when there is a repetition.
+</para>
+
+<para>
+PCRE provides a similar feature, but of course it cannot obey arbitrary
+Perl code. The feature is called "callout". The caller of PCRE provides
+an external function by putting its entry point in the global variable
+pcre_callout. By default, this variable contains NULL, which disables
+all calling out.
+</para>
+
+<para>
+Within a regular expression, (?C) indicates the points at which the
+external function is to be called. If you want to identify different
+callout points, you can put a number less than 256 after the letter C.
+The default value is zero. For example, this pattern has two callout
+points:
+</para>
+
+<programlisting>
+(?C1)abc(?C2)def
+</programlisting>
+
+<para>
+If the PCRE_AUTO_CALLOUT flag is passed to pcre_compile(), callouts are
+automatically installed before each item in the pattern. They are all
+numbered 255.
+</para>
+
+<para>
+During matching, when PCRE reaches a callout point (and pcre_callout is
+set), the external function is called. It is provided with the number
+of the callout, the position in the pattern, and, optionally, one item
+of data originally supplied by the caller of pcre_exec(). The callout
+function may cause matching to proceed, to backtrack, or to fail altogether. A complete description of the interface to the callout function
+is given in the pcrecallout documentation.
+</para>
+</refsect1>
+-->
+
+<refsect1>
+<title>Copyright</title>
+<para>
+This document was copied and adapted from the PCRE documentation,
+specifically from the man page for pcrepattern.
+The original copyright note is:
+</para>
+
+<programlisting>
+Copyright (c) 1997-2006 University of Cambridge.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * 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 Cambridge nor the name of Google
+      Inc. nor the names of their contributors may be used to endorse or
+      promote products derived from this software without specific prior
+      written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER OR 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.
+</programlisting>
+</refsect1>
+
+</refentry>
diff --git a/docs/reference/glib/resources.sgml b/docs/reference/glib/resources.sgml
new file mode 100644
index 0000000..8d29eda
--- /dev/null
+++ b/docs/reference/glib/resources.sgml
@@ -0,0 +1,111 @@
+<refentry id="glib-resources" revision="17 Jan 2002">
+<refmeta>
+<refentrytitle>Mailing lists and bug reports</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>Mailing lists and bug reports</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Mailing lists and bug reports</refname>
+<refpurpose>
+Getting help with GLib
+</refpurpose>
+</refnamediv>
+
+<refsect1>
+<title>Filing a bug report or feature request</title>
+
+<para>
+If you encounter a bug, misfeature, or missing feature in GLib, please
+file a bug report on 
+<ulink url="http://bugzilla.gnome.org">http://bugzilla.gnome.org</ulink>. 
+We'd also appreciate reports of incomplete or misleading information in 
+the GLib documentation; file those against the "docs" component of the "glib"
+product in Bugzilla.
+</para>
+
+<para>
+Don't hesitate to file a bug report, even if you think we may know
+about it already, or aren't sure of the details. Just give us as much
+information as you have, and if it's already fixed or has already been
+discussed, we'll add a note to that effect in the report.
+</para>
+
+<para>
+The bug tracker should definitely be used for feature requests, it's
+not only for bugs. We track all GLib development in Bugzilla, so it's
+the way to be sure the GLib developers won't forget about an issue.
+</para>
+
+</refsect1>
+
+<refsect1>
+<title>Submitting Patches</title>
+
+<para>
+If you develop a bugfix or enhancement for GLib, please file that in
+Bugzilla as well. Bugzilla allows you to attach files; please attach a
+patch generated by the <command>diff</command> utility, using the 
+<option>-u</option> option to make the patch more readable. All patches 
+must be offered under the terms of the GNU LGPL license, so be sure you 
+are authorized to give us the patch under those terms.
+</para>
+
+<para>
+If you want to discuss your patch before or after developing it, mail 
+<ulink url="mailto:gtk-devel-list@gnome.org">gtk-devel-list@gnome.org</ulink>. 
+But be sure to file the Bugzilla report as well; if the patch is only on the 
+list and not in Bugzilla, it's likely to slip through the cracks.
+</para>
+
+</refsect1>
+
+<refsect1>
+<title>Mailing lists</title>
+
+<para>
+There are several mailing lists dedicated to GTK+ and related
+libraries. Discussion of GLib generally takes place on these lists.
+You can subscribe or view the archives of these lists on 
+<ulink url="http://mail.gnome.org">http://mail.gnome.org</ulink>.
+</para>
+
+<para>
+<variablelist>
+
+<varlistentry>
+<term><ulink url="mailto:gtk-list@gnome.org">gtk-list@gnome.org</ulink></term>
+<listitem><para>
+gtk-list covers general GTK+ (and GLib) topics; questions about using GLib 
+in programs, GLib from a user standpoint, announcements of GLib-related projects
+would all be on-topic. The bulk of the traffic consists of GTK+ programming 
+questions.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><ulink url="mailto:gtk-devel-list@gnome.org">gtk-devel-list@gnome.org</ulink></term>
+<listitem><para>
+gtk-devel-list is for discussion of work on GTK+ (and GLib) itself, it is 
+<emphasis>not</emphasis> for asking questions about how to use GTK+ (or GLib) 
+in applications. gtk-devel-list is appropriate for discussion of patches, 
+bugs, proposed features, and so on.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><ulink url="mailto:gtk-doc-list@gnome.org">gtk-doc-list@gnome.org</ulink></term>
+<listitem><para>
+gtk-doc-list is for discussion of the <application>gtk-doc</application> 
+documentation system (used to document GTK+ and Glib), and for work on the GTK+
+(and GLib) documentation.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+</refsect1>
+
+
+</refentry>
diff --git a/docs/reference/glib/running.sgml b/docs/reference/glib/running.sgml
new file mode 100644
index 0000000..bb17dc7
--- /dev/null
+++ b/docs/reference/glib/running.sgml
@@ -0,0 +1,287 @@
+<refentry id="glib-running" revision="17 Jan 2002">
+<refmeta>
+<refentrytitle>Running GLib Applications</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>GLib Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Running GLib Applications</refname>
+<refpurpose>
+How to run and debug your GLib application
+</refpurpose>
+</refnamediv>
+
+<refsect1>
+<title>Running and debugging GLib Applications</title>
+
+<refsect2>
+<title>Environment variables</title>
+
+<para> 
+GLib inspects a few of environment variables in addition to standard
+variables like <envar>LANG</envar>, <envar>PATH</envar> or <envar>HOME</envar>. 
+</para>
+
+<formalpara id="G_FILENAME_ENCODING">
+  <title><envar>G_FILENAME_ENCODING</envar></title>
+
+  <para>
+    This environment variable can be set to a comma-separated list of character
+    set names. GLib assumes that filenames are encoded in the first character 
+    set from that list rather than in UTF-8. The special token "@locale" can be
+    used to specify the character set for the current locale.
+  </para>
+</formalpara>
+
+<formalpara id="G_BROKEN_FILENAMES">
+  <title><envar>G_BROKEN_FILENAMES</envar></title>
+
+  <para>
+    If this environment variable is set, GLib assumes that filenames are in 
+    the locale encoding rather than in UTF-8. G_FILENAME_ENCODING takes
+    priority over G_BROKEN_FILENAMES. 
+  </para>
+</formalpara>
+
+<formalpara id="G_MESSAGES_PREFIXED">
+  <title><envar>G_MESSAGES_PREFIXED</envar></title>
+
+  <para>
+    A list of log levels for which messages should be prefixed by the 
+    program name and PID of the application. The default is to prefix
+    everything except <literal>G_LOG_LEVEL_MESSAGE</literal> and <literal>G_LOG_LEVEL_INFO</literal>. 
+  </para>
+</formalpara>
+
+<formalpara id="G_DEBUG">
+  <title><envar>G_DEBUG</envar></title>
+  <para>
+    If GLib has been configured with <option>--enable-debug=yes</option>,
+    this variable can be set to a list of debug options, which cause GLib
+    to print out different types of debugging information.
+    <variablelist>
+      <varlistentry>
+        <term>fatal_warnings</term>
+        <listitem><para>Causes GLib to abort the program at the first call
+           to <link linkend="g-warning">g_warning</link>() or
+	   <link linkend="g-critical">g_critical</link>(). This option is 
+           special in that it doesn't require GLib to be configured with 
+           debugging support.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>fatal_criticals</term>
+        <listitem><para>Causes GLib to abort the program at the first call
+           to <link linkend="g-critical">g_critical</link>(). This option is 
+           special in that it doesn't require GLib to be configured with 
+           debugging support.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>gc-friendly</term>
+	<listitem>
+		<para>
+		  Newly allocated memory that isn't directly initialized, as well
+		  as memory being freed will be reset to 0. The point here is to
+		  allow memory checkers and similar programs that use bohem GC alike
+		  algorithms to produce more accurate results.
+		  This option is special in that it doesn't require GLib to be
+		  configured with debugging support.
+		</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>resident-modules</term>
+	<listitem>
+	  <para>
+	    All modules loaded by GModule will be made resident. This can be useful
+	    for tracking memory leaks in modules which are later unloaded; but it can
+	    also hide bugs where code is accessed after the module would have normally
+	    been unloaded.
+	    This option is special in that it doesn't require GLib to be
+ 	    configured with debugging support.
+	  </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>bind-now-modules</term>
+	<listitem>
+	  <para>
+	    All modules loaded by GModule will bind their symbols at load time, even
+	    when the code uses %G_MODULE_BIND_LAZY.
+	    This option is special in that it doesn't require GLib to be
+ 	    configured with debugging support.
+	  </para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+    The special value all can be used to turn on all debug options. 
+    The special value help can be used to print all available options.  
+  </para>
+</formalpara>
+
+<formalpara id="G_SLICE">
+	<title><envar>G_SLICE</envar></title>
+	<para>
+	  This environment variable allows reconfiguration of the GSlice
+	  memory allocator.
+	  <variablelist>
+	    <varlistentry>
+	      <term>always-malloc</term>
+	      <listitem>
+		<para>
+		  This will cause all slices allocated through g_slice_alloc() and
+		  released by g_slice_free1() to be actually allocated via direct
+		  calls to g_malloc() and g_free().
+		  This is most useful for memory checkers and similar programs that
+		  use Bohem GC alike algorithms to produce more accurate results.
+		  It can also be in conjunction with debugging features of the system's
+		  malloc implementation such as glibc's MALLOC_CHECK_=2 to debug
+		  erroneous slice allocation code, allthough <literal>debug-blocks</literal>
+		  usually is a better suited debugging tool.
+		</para>
+	      </listitem>
+	    </varlistentry>
+	    <varlistentry>
+	      <term>debug-blocks</term>
+	      <listitem>
+		<para>
+		  Using this option (present since GLib-2.13) engages extra code
+		  which performs sanity checks on the released memory slices.
+		  Invalid slice adresses or slice sizes will be reported and lead to
+		  a program halt.
+		  This option is for debugging scenarios.
+		  In particular, client packages sporting their own test suite should
+		  <emphasis>always enable this option when running tests</emphasis>.
+		  Global slice validation is ensured by storing size and address information
+		  for each allocated chunk, and maintaining a global hash table of that data.
+		  That way, multi-thread scalability is given up, and memory consumption is
+		  increased. However, the resulting code usually performs acceptably well,
+		  possibly better than with comparable memory checking carried out using
+		  external tools. An example of a memory corruption scenario that cannot be
+		  reproduced with <literal>G_SLICE=always-malloc</literal>, but will be caught
+		  by <literal>G_SLICE=debug-blocks</literal> is as follows:
+		  <programlisting>
+		    void *slist = g_slist_alloc(); /* void* gives up type-safety */
+		    g_list_free (slist);           /* corruption: sizeof (GSList) != sizeof (GList) */
+		  </programlisting>
+		</para>
+	      </listitem>
+	    </varlistentry>
+	  </variablelist>
+          The special value all can be used to turn on all options. 
+          The special value help can be used to print all available options.  
+	</para>
+</formalpara>
+
+<formalpara id="G_RANDOM_VERSION">
+  <title><envar>G_RANDOM_VERSION</envar></title>
+
+  <para>
+    If this environment variable is set to '2.0', the outdated
+    pseudo-random number seeding and generation algorithms from
+    GLib-2.0 are used instead of the new better ones. Use the GLib-2.0
+    algorithms only if you have sequences of numbers generated with
+    Glib-2.0 that you need to reproduce exactly.  
+  </para>
+</formalpara> 
+
+<formalpara id="LIBCHARSET_ALIAS_DIR">
+  <title><envar>LIBCHARSET_ALIAS_DIR</envar></title>
+
+  <para>
+    Allows to specify a nonstandard location for the 
+    <filename>charset.aliases</filename> file that is used by the
+    character set conversion routines. The default location is the 
+    <replaceable>libdir</replaceable> specified at compilation time.
+  </para>
+</formalpara> 
+
+</refsect2>
+
+<refsect2 id="setlocale">
+<title>Locale</title>
+
+<para>
+A number of interfaces in GLib depend on the current locale in which
+an application is running. Therefore, most GLib-using applications should
+call <function>setlocale (LC_ALL, "")</function> to set up the current 
+locale.
+</para>
+
+<para>
+On Windows, in a C program there are several locale concepts
+that not necessarily are synchronized. On one hand, there is the
+system default ANSI code-page, which determines what encoding is used
+for file names handled by the C library's functions and the Win32
+API. (We are talking about the "narrow" functions here that take
+character pointers, not the "wide" ones.)
+</para>
+
+<para>
+On the other hand, there is the C library's current locale. The
+character set (code-page) used by that is not necessarily the same as
+the system default ANSI code-page. Strings in this character set are
+returned by functions like <function>strftime()</function>.
+</para>
+
+</refsect2>
+
+<refsect2>
+<title>Traps and traces</title>
+
+<para>
+<indexterm><primary>g_trap_free_size</primary></indexterm>
+<indexterm><primary>g_trap_realloc_size</primary></indexterm>
+<indexterm><primary>g_trap_malloc_size</primary></indexterm>
+Some code portions contain trap variables that can be set during debugging 
+time if GLib has been configured with <option>--enable-debug=yes</option>. 
+Such traps lead to immediate code halts to examine the current program state 
+and backtrace.
+</para>
+
+<para>
+Currently, the following trap variables exist:
+<programlisting>
+static volatile gulong g_trap_free_size;
+static volatile gulong g_trap_realloc_size;
+static volatile gulong g_trap_malloc_size;
+</programlisting>
+If set to a size > 0, <link linkend="g-free">g_free</link>(), 
+<link linkend="g-realloc">g_realloc</link>() and 
+<link linkend="g-malloc">g_malloc</link>() will be intercepted if the size 
+matches the size of the corresponding memory block. This will only work with 
+<literal>g_mem_set_vtable (glib_mem_profiler_table)</literal> upon startup 
+though, because memory profiling is required to match on the memory block sizes.
+</para>
+<para>
+Note that many modern debuggers support conditional breakpoints, which achieve
+pretty much the same. E.g. in gdb, you can do
+<programlisting>
+break g_malloc
+condition 1 n_bytes == 20
+</programlisting>
+to break only on g_malloc() calls where the size of the allocated memory block
+is 20. 
+</para>
+</refsect2>
+
+<refsect2>
+<title>Memory statistics</title>
+
+<para>
+g_mem_profile() will output a summary g_malloc() memory usage, if memory
+profiling has been enabled by calling 
+<literal>g_mem_set_vtable (glib_mem_profiler_table)</literal> upon startup.
+</para>
+
+<para>
+If GLib has been configured with <option>--enable-debug=yes</option>,
+then g_slice_debug_tree_statistics() can be called in a debugger to 
+output details about the memory usage of the slice allocator.
+</para>
+
+</refsect2>
+</refsect1>
+</refentry>
diff --git a/docs/reference/glib/tmpl/allocators.sgml b/docs/reference/glib/tmpl/allocators.sgml
new file mode 100644
index 0000000..c93136f
--- /dev/null
+++ b/docs/reference/glib/tmpl/allocators.sgml
@@ -0,0 +1,57 @@
+<!-- ##### SECTION Title ##### -->
+Memory Allocators
+
+<!-- ##### SECTION Short_Description ##### -->
+deprecated way to allocate chunks of memory for GList, GSList and GNode
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+</para>
+<para>
+Prior to 2.10, #GAllocator was used as an efficient way to allocate 
+small pieces of memory for use with the #GList, #GSList and #GNode data 
+structures. Since 2.10, it has been completely replaced by the 
+<link linkend="glib-Memory-Slices">slice allocator</link> and deprecated.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GAllocator ##### -->
+<para>
+The <structname>GAllocator</structname> struct contains private data. and 
+should only be accessed using the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_allocator_new ##### -->
+<para>
+Creates a new #GAllocator.
+</para>
+
+@name: the name of the #GAllocator. This name is used to set the name of the
+#GMemChunk used by the #GAllocator, and is only used for debugging.
+@n_preallocs: the number of elements in each block of memory allocated.
+Larger blocks mean less calls to g_malloc(), but some memory may be wasted.
+(GLib uses 128 elements per block by default.) The value must be between 1
+and 65535.
+@Returns: a new #GAllocator.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice allocator</link>
+instead
+
+
+<!-- ##### FUNCTION g_allocator_free ##### -->
+<para>
+Frees all of the memory allocated by the #GAllocator.
+</para>
+
+@allocator: a #GAllocator.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice allocator</link>
+instead
+
+
diff --git a/docs/reference/glib/tmpl/arrays.sgml b/docs/reference/glib/tmpl/arrays.sgml
new file mode 100644
index 0000000..34c5497
--- /dev/null
+++ b/docs/reference/glib/tmpl/arrays.sgml
@@ -0,0 +1,310 @@
+<!-- ##### SECTION Title ##### -->
+Arrays
+
+<!-- ##### SECTION Short_Description ##### -->
+arrays of arbitrary elements which grow automatically as elements are added
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Arrays are similar to standard C arrays, except that they grow automatically
+as elements are added.
+</para>
+<para>
+Array elements can be of any size (though all elements of one array are the
+same size), and the array can be automatically cleared to '0's and
+zero-terminated.
+</para>
+<para>
+To create a new array use g_array_new().
+</para>
+<para>
+To add elements to an array, use g_array_append_val(), g_array_append_vals(),
+g_array_prepend_val(), and g_array_prepend_vals().
+</para>
+<para>
+To access an element of an array, use g_array_index().
+</para>
+<para>
+To set the size of an array, use g_array_set_size().
+</para>
+<para>
+To free an array, use g_array_free().
+</para>
+<example>
+<title>Using a <structname>GArray</structname> to store <type>gint</type> values</title>
+<programlisting>
+  GArray *garray;
+  gint i;
+
+  /* We create a new array to store gint values.
+     We don't want it zero-terminated or cleared to 0's. */
+  garray = g_array_new (FALSE, FALSE, sizeof (gint));
+  for (i = 0; i &lt; 10000; i++)
+    g_array_append_val (garray, i);
+
+  for (i = 0; i &lt; 10000; i++)
+    if (g_array_index (garray, gint, i) != i)
+      g_print ("ERROR: got &percnt;d instead of &percnt;d\n",
+               g_array_index (garray, gint, i), i);
+
+  g_array_free (garray, TRUE);
+</programlisting></example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GArray ##### -->
+<para>
+Contains the public fields of an <link linkend="glib-arrays">Array</link>.
+</para>
+
+@data: a pointer to the element data. The data may be moved as elements are
+added to the #GArray.
+@len: the number of elements in the #GArray.
+
+<!-- ##### FUNCTION g_array_new ##### -->
+<para>
+Creates a new #GArray.
+</para>
+
+@zero_terminated: %TRUE if the array should have an extra element at the end
+which is set to 0.
+@clear_: %TRUE if #GArray elements should be automatically cleared to 0
+when they are allocated.
+@element_size: the size of each element in bytes.
+@Returns: the new #GArray.
+
+
+<!-- ##### FUNCTION g_array_sized_new ##### -->
+<para>
+Creates a new #GArray with @reserved_size elements
+preallocated. This avoids frequent reallocation, if you are going to
+add many elements to the array. Note however that the size of the
+array is still 0.
+</para>
+
+@zero_terminated: %TRUE if the array should have an extra element at the end with all bits cleared.
+@clear_: %TRUE if all bits in the array should be cleared to 0 on allocation.
+@element_size: size of each element in the array.
+@reserved_size: number of elements preallocated.
+@Returns: the new #GArray.
+
+
+<!-- ##### MACRO g_array_append_val ##### -->
+<para>
+Adds the value on to the end of the array.
+The array will grow in size automatically if necessary.
+</para>
+<note>
+<para>
+g_array_append_val() is a macro which uses a reference to the value
+parameter @v. This means that you cannot use it with literal values
+such as "27". You must use variables.
+</para>
+</note>
+
+@a: a #GArray.
+@v: the value to append to the #GArray.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_append_vals ##### -->
+<para>
+Adds @len elements onto the end of the array.
+</para>
+
+@array: a #GArray.
+@data: a pointer to the elements to append to the end of the array.
+@len: the number of elements to append.
+@Returns: the #GArray.
+
+
+<!-- ##### MACRO g_array_prepend_val ##### -->
+<para>
+Adds the value on to the start of the array.
+The array will grow in size automatically if necessary.
+</para>
+<para>
+This operation is slower than g_array_append_val() since the existing elements
+in the array have to be moved to make space for the new element.
+</para>
+<note>
+<para>
+g_array_prepend_val() is a macro which uses a reference to the value
+parameter @v. This means that you cannot use it with literal values
+such as "27". You must use variables.
+</para>
+</note>
+
+@a: a #GArray.
+@v: the value to prepend to the #GArray.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_prepend_vals ##### -->
+<para>
+Adds @len elements onto the start of the array.
+</para>
+<para>
+This operation is slower than g_array_append_vals() since the existing elements
+in the array have to be moved to make space for the new elements.
+</para>
+
+@array: a #GArray.
+@data: a pointer to the elements to prepend to the start of the array.
+@len: the number of elements to prepend.
+@Returns: the #GArray.
+
+
+<!-- ##### MACRO g_array_insert_val ##### -->
+<para>
+Inserts an element into an array at the given index.
+</para>
+<note>
+<para>
+g_array_insert_val() is a macro which uses a reference to the value
+parameter @v. This means that you cannot use it with literal values
+such as "27". You must use variables.
+</para>
+</note>
+
+@a: a #GArray.
+@i: the index to place the element at.
+@v: the value to insert into the array.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_insert_vals ##### -->
+<para>
+Inserts @len elements into a #GArray at the given index.
+</para>
+
+@array: a #GArray.
+@index_: the index to place the elements at.
+@data: a pointer to the elements to insert.
+@len: the number of elements to insert.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_remove_index ##### -->
+<para>
+Removes the element at the given index from a #GArray.
+The following elements are moved down one place.
+</para>
+
+@array: a #GArray.
+@index_: the index of the element to remove.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_remove_index_fast ##### -->
+<para>
+Removes the element at the given index from a #GArray.
+The last element in the array is used to fill in the space, so this function
+does not preserve the order of the #GArray. But it is faster than
+g_array_remove_index().
+</para>
+
+@array: a @GArray.
+@index_: the index of the element to remove.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_remove_range ##### -->
+<para>
+Removes the given number of elements starting at the given index from a
+#GArray.  The following elements are moved to close the gap.
+</para>
+
+@array: a @GArray.
+@index_: the index of the first element to remove.
+@length: the number of elements to remove.
+@Returns: the #GArray.
+@Since: 2.4
+
+
+<!-- ##### FUNCTION g_array_sort ##### -->
+<para>
+Sorts a #GArray using @compare_func which should be a qsort()-style comparison
+function (returns less than zero for first arg is less than second arg, 
+zero for equal, greater zero if first arg is greater than second arg).
+</para>
+<para>
+If two array elements compare equal, their order in the sorted array is
+undefined.
+</para>
+
+@array: a #GArray.
+@compare_func: comparison function.
+
+
+<!-- ##### FUNCTION g_array_sort_with_data ##### -->
+<para>
+Like g_array_sort(), but the comparison function receives an extra user data
+argument.
+</para>
+
+@array: a #GArray.
+@compare_func: comparison function.
+@user_data: data to pass to @compare_func.
+
+
+<!-- ##### MACRO g_array_index ##### -->
+<para>
+Returns the element of a #GArray at the given index.
+The return value is cast to the given type.
+
+<example>
+<title>Getting a pointer to an element in a <structname>GArray</structname></title>
+<programlisting>
+  EDayViewEvent *event;
+
+  /* This gets a pointer to the 4th element in the array of EDayViewEvent
+     structs. */
+  event = &amp;g_array_index (events, EDayViewEvent, 3);
+</programlisting>
+</example>
+</para>
+
+@a: a #GArray.
+@t: the type of the elements.
+@i: the index of the element to return.
+@Returns: the element of the #GArray at the index given by @i.
+
+
+<!-- ##### FUNCTION g_array_set_size ##### -->
+<para>
+Sets the size of the array, expanding it if necessary.
+If the array was created with @clear_ set to %TRUE, the new elements are set to 0.
+</para>
+
+@array: a #GArray.
+@length: the new size of the #GArray.
+@Returns: the #GArray.
+
+
+<!-- ##### FUNCTION g_array_free ##### -->
+<para>
+Frees the memory allocated for the #GArray.
+If @free_segment is %TRUE it frees the memory block holding the elements
+as well. Pass %FALSE if you want to free the #GArray wrapper but preserve
+the underlying array for use elsewhere.
+</para>
+<note>
+<para>
+If array elements contain dynamically-allocated memory, they should be freed
+separately.
+</para>
+</note>
+
+@array: a #GArray.
+@free_segment: if %TRUE the actual element data is freed as well.
+@Returns: the element data if @free_segment is %FALSE, otherwise %NULL.
+	The element data should be freed using g_free().
+
+
diff --git a/docs/reference/glib/tmpl/arrays_byte.sgml b/docs/reference/glib/tmpl/arrays_byte.sgml
new file mode 100644
index 0000000..eb3c400
--- /dev/null
+++ b/docs/reference/glib/tmpl/arrays_byte.sgml
@@ -0,0 +1,192 @@
+<!-- ##### SECTION Title ##### -->
+Byte Arrays
+
+<!-- ##### SECTION Short_Description ##### -->
+arrays of bytes, which grow automatically as elements are added
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#GByteArray is based on #GArray, to provide arrays of bytes which grow
+automatically as elements are added.
+</para>
+<para>
+To create a new #GByteArray use g_byte_array_new().
+</para>
+<para>
+To add elements to a #GByteArray, use g_byte_array_append(), and
+g_byte_array_prepend().
+</para>
+<para>
+To set the size of a #GByteArray, use g_byte_array_set_size().
+</para>
+<para>
+To free a #GByteArray, use g_byte_array_free().
+</para>
+
+<example>
+<title>Using a <structname>GByteArray</structname></title>
+<programlisting>
+  GByteArray *gbarray;
+  gint i;
+
+  gbarray = g_byte_array_new (<!-- -->);
+  for (i = 0; i &lt; 10000; i++)
+    g_byte_array_append (gbarray, (guint8*) "abcd", 4);
+
+  for (i = 0; i &lt; 10000; i++)
+    {
+      g_assert (gbarray->data[4*i] == 'a');
+      g_assert (gbarray->data[4*i+1] == 'b');
+      g_assert (gbarray->data[4*i+2] == 'c');
+      g_assert (gbarray->data[4*i+3] == 'd');
+    }
+
+  g_byte_array_free (gbarray, TRUE);
+</programlisting></example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GByteArray ##### -->
+<para>
+The <structname>GByteArray</structname> struct allows access to the public fields of a <structname>GByteArray</structname>.
+</para>
+
+@data: a pointer to the element data. The data may be moved as elements are
+added to the #GByteArray.
+@len: the number of elements in the #GByteArray.
+
+<!-- ##### FUNCTION g_byte_array_new ##### -->
+<para>
+Creates a new #GByteArray.
+</para>
+
+@Returns: the new #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_sized_new ##### -->
+<para>
+Creates a new #GByteArray with @reserved_size bytes preallocated. This
+avoids frequent reallocation, if you are going to add many bytes to
+the array. Note however that the size of the array is still 0.
+</para>
+
+@reserved_size: number of bytes preallocated.
+@Returns: the new #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_append ##### -->
+<para>
+Adds the given bytes to the end of the #GByteArray.
+The array will grow in size automatically if necessary.
+</para>
+
+@array: a #GByteArray.
+@data: the byte data to be added.
+@len: the number of bytes to add.
+@Returns: the #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_prepend ##### -->
+<para>
+Adds the given data to the start of the #GByteArray.
+The array will grow in size automatically if necessary.
+</para>
+
+@array: a #GByteArray.
+@data: the byte data to be added.
+@len: the number of bytes to add.
+@Returns: the #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_remove_index ##### -->
+<para>
+Removes the byte at the given index from a #GByteArray.
+The following bytes are moved down one place.
+</para>
+
+@array: a #GByteArray.
+@index_: the index of the byte to remove.
+@Returns: the #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_remove_index_fast ##### -->
+<para>
+Removes the byte at the given index from a #GByteArray.
+The last element in the array is used to fill in the space, so this function
+does not preserve the order of the #GByteArray. But it is faster than
+g_byte_array_remove_index().
+</para>
+
+@array: a #GByteArray.
+@index_: the index of the byte to remove.
+@Returns: the #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_remove_range ##### -->
+<para>
+Removes the given number of bytes starting at the given index from a
+#GByteArray.  The following elements are moved to close the gap.
+</para>
+
+@array: a @GByteArray.
+@index_: the index of the first byte to remove.
+@length: the number of bytes to remove.
+@Returns: the #GByteArray.
+@Since: 2.4
+
+
+<!-- ##### FUNCTION g_byte_array_sort ##### -->
+<para>
+Sorts a byte array, using @compare_func which should be a qsort()-style
+comparison function (returns less than zero for first arg is less than second 
+arg, zero for equal, greater than zero if first arg is greater than second 
+arg).
+</para>
+<para>
+If two array elements compare equal, their order in the sorted array is
+undefined.
+</para>
+
+@array: a #GByteArray.
+@compare_func: comparison function.
+
+
+<!-- ##### FUNCTION g_byte_array_sort_with_data ##### -->
+<para>
+Like g_byte_array_sort(), but the comparison function takes an extra user data
+argument.
+</para>
+
+@array: a #GByteArray.
+@compare_func: comparison function.
+@user_data: data to pass to @compare_func.
+
+
+<!-- ##### FUNCTION g_byte_array_set_size ##### -->
+<para>
+Sets the size of the #GByteArray, expanding it if necessary.
+</para>
+
+@array: a #GByteArray.
+@length: the new size of the #GByteArray.
+@Returns: the #GByteArray.
+
+
+<!-- ##### FUNCTION g_byte_array_free ##### -->
+<para>
+Frees the memory allocated by the #GByteArray.
+If @free_segment is %TRUE it frees the actual byte data.
+</para>
+
+@array: a #GByteArray.
+@free_segment: if %TRUE the actual byte data is freed as well.
+@Returns: the element data if @free_segment is %FALSE, otherwise %NULL.
+        The element data should be freed using g_free().
+
+
diff --git a/docs/reference/glib/tmpl/arrays_pointer.sgml b/docs/reference/glib/tmpl/arrays_pointer.sgml
new file mode 100644
index 0000000..15c5792
--- /dev/null
+++ b/docs/reference/glib/tmpl/arrays_pointer.sgml
@@ -0,0 +1,257 @@
+<!-- ##### SECTION Title ##### -->
+Pointer Arrays
+
+<!-- ##### SECTION Short_Description ##### -->
+arrays of pointers to any type of data, which grow automatically as new
+elements are added
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Pointer Arrays are similar to Arrays but are used only for storing pointers.
+</para>
+<note>
+<para>
+If you remove elements from the array, elements at the end of the array
+are moved into the space previously occupied by the removed element.
+This means that you should not rely on the index of particular elements
+remaining the same. You should also be careful when deleting elements while
+iterating over the array.
+</para>
+</note>
+<para>
+To create a pointer array, use g_ptr_array_new().
+</para>
+<para>
+To add elements to a pointer array, use g_ptr_array_add().
+</para>
+<para>
+To remove elements from a pointer array, use g_ptr_array_remove(),
+g_ptr_array_remove_index() or g_ptr_array_remove_index_fast().
+</para>
+<para>
+To access an element of a pointer array, use g_ptr_array_index().
+</para>
+<para>
+To set the size of a pointer array, use g_ptr_array_set_size().
+</para>
+<para>
+To free a pointer array, use g_ptr_array_free().
+</para>
+<example>
+<title>Using a <structname>GPtrArray</structname></title>
+<programlisting>
+  GPtrArray *gparray;
+  gchar *string1 = "one", *string2 = "two", *string3 = "three";
+
+  gparray = g_ptr_array_new (<!-- -->);
+  g_ptr_array_add (gparray, (gpointer) string1);
+  g_ptr_array_add (gparray, (gpointer) string2);
+  g_ptr_array_add (gparray, (gpointer) string3);
+
+  if (g_ptr_array_index (gparray, 0) != (gpointer) string1)
+    g_print ("ERROR: got &percnt;p instead of &percnt;p\n",
+             g_ptr_array_index (gparray, 0), string1);
+
+  g_ptr_array_free (gparray, TRUE);
+</programlisting></example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GPtrArray ##### -->
+<para>
+Contains the public fields of a pointer array.
+</para>
+
+@pdata: points to the array of pointers, which may be moved when the array grows.
+@len: number of pointers in the array.
+
+<!-- ##### FUNCTION g_ptr_array_new ##### -->
+<para>
+Creates a new #GPtrArray.
+</para>
+
+@Returns: the new #GPtrArray.
+
+
+<!-- ##### FUNCTION g_ptr_array_sized_new ##### -->
+<para>
+Creates a new #GPtrArray with @reserved_size pointers
+preallocated. This avoids frequent reallocation, if you are going to
+add many pointers to the array. Note however that the size of the
+array is still 0.
+</para>
+
+@reserved_size: number of pointers preallocated.
+@Returns: the new #GPtrArray.
+
+
+<!-- ##### FUNCTION g_ptr_array_add ##### -->
+<para>
+Adds a pointer to the end of the pointer array.
+The array will grow in size automatically if necessary.
+</para>
+
+@array: a #GPtrArray.
+@data: the pointer to add.
+
+
+<!-- ##### FUNCTION g_ptr_array_remove ##### -->
+<para>
+Removes the first occurrence of the given pointer from the pointer array.
+The following elements are moved down one place.
+</para>
+<para>
+It returns %TRUE if the pointer was removed, or %FALSE if the pointer
+was not found.
+</para>
+
+@array: a #GPtrArray.
+@data: the pointer to remove.
+@Returns: %TRUE if the pointer is removed. %FALSE if the pointer is not found
+in the array.
+
+
+<!-- ##### FUNCTION g_ptr_array_remove_index ##### -->
+<para>
+Removes the pointer at the given index from the pointer array.
+The following elements are moved down one place.
+</para>
+
+@array: a #GPtrArray.
+@index_: the index of the pointer to remove.
+@Returns: the pointer which was removed.
+
+
+<!-- ##### FUNCTION g_ptr_array_remove_fast ##### -->
+<para>
+Removes the first occurrence of the given pointer from the pointer array.
+The last element in the array is used to fill in the space, so this function
+does not preserve the order of the array. But it is faster than
+g_ptr_array_remove().
+</para>
+<para>
+It returns %TRUE if the pointer was removed, or %FALSE if the pointer
+was not found.
+</para>
+
+@array: a #GPtrArray.
+@data: the pointer to remove.
+@Returns: %TRUE if the pointer was found in the array.
+
+
+<!-- ##### FUNCTION g_ptr_array_remove_index_fast ##### -->
+<para>
+Removes the pointer at the given index from the pointer array.
+The last element in the array is used to fill in the space, so this function
+does not preserve the order of the array. But it is faster than
+g_ptr_array_remove_index().
+</para>
+
+@array: a #GPtrArray.
+@index_: the index of the pointer to remove.
+@Returns: the pointer which was removed.
+
+
+<!-- ##### FUNCTION g_ptr_array_remove_range ##### -->
+<para>
+Removes the given number of pointers starting at the given index from a
+#GPtrArray.  The following elements are moved to close the gap.
+</para>
+
+@array: a @GPtrArray.
+@index_: the index of the first pointer to remove.
+@length: the number of pointers to remove.
+@Since: 2.4
+
+
+<!-- ##### FUNCTION g_ptr_array_sort ##### -->
+<para>
+Sorts the array, using @compare_func which should be a qsort()-style comparison
+function (returns less than zero for first arg is less than second arg, 
+zero for equal, greater than zero if irst arg is greater than second arg).
+</para>
+<para>
+If two array elements compare equal, their order in the sorted array is
+undefined.
+</para>
+<note><para>
+The comparison function for g_ptr_array_sort() doesn't take the pointers 
+from the array as arguments, it takes pointers to the pointers in the array.
+</para></note>
+
+@array: a #GPtrArray.
+@compare_func: comparison function.
+
+
+<!-- ##### FUNCTION g_ptr_array_sort_with_data ##### -->
+<para>
+Like g_ptr_array_sort(), but the comparison function has an extra user data 
+argument.
+</para>
+<note><para>
+The comparison function for g_ptr_array_sort_with_data() doesn't take the 
+pointers from the array as arguments, it takes pointers to the pointers in 
+the array.
+</para></note>
+
+@array: a #GPtrArray.
+@compare_func: comparison function.
+@user_data: data to pass to @compare_func.
+
+
+<!-- ##### FUNCTION g_ptr_array_set_size ##### -->
+<para>
+Sets the size of the array, expanding it if necessary.
+New elements are set to %NULL.
+</para>
+
+@array: a #GPtrArray.
+@length: the new length of the pointer array.
+
+
+<!-- ##### MACRO g_ptr_array_index ##### -->
+<para>
+Returns the pointer at the given index of the pointer array.
+</para>
+
+@array: a #GPtrArray.
+@index_: the index of the pointer to return.
+@Returns: the pointer at the given index.
+
+
+<!-- ##### FUNCTION g_ptr_array_free ##### -->
+<para>
+Frees the memory allocated for the #GPtrArray.
+If @free_segment is %TRUE it frees the memory block holding the elements
+as well. Pass %FALSE if you want to free the #GPtrArray wrapper but preserve
+the underlying array for use elsewhere.
+</para>
+<note>
+<para>
+If array contents point to dynamically-allocated memory, they should be freed
+separately.
+</para>
+</note>
+
+@array: a #GPtrArray.
+@free_seg: if %TRUE the actual pointer array is freed as well.
+@Returns: the pointer array if @free_seg is %FALSE, otherwise %NULL.
+	The pointer array should be freed using g_free().
+
+
+<!-- ##### FUNCTION g_ptr_array_foreach ##### -->
+<para>
+
+</para>
+
+@array: 
+@func: 
+@user_data: 
+
+
diff --git a/docs/reference/glib/tmpl/async_queues.sgml b/docs/reference/glib/tmpl/async_queues.sgml
new file mode 100644
index 0000000..79dbec8
--- /dev/null
+++ b/docs/reference/glib/tmpl/async_queues.sgml
@@ -0,0 +1,242 @@
+<!-- ##### SECTION Title ##### -->
+Asynchronous Queues
+
+<!-- ##### SECTION Short_Description ##### -->
+asynchronous communication between threads
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Often you need to communicate between different threads. In general
+it's safer not to do this by shared memory, but by explicit message
+passing. These messages only make sense asynchronously for
+multi-threaded applications though, as a synchronous operation could as
+well be done in the same thread.
+</para>
+
+<para>
+Asynchronous queues are an exception from most other GLib data
+structures, as they can be used simultaneously from multiple threads
+without explicit locking and they bring their own builtin reference
+counting. This is because the nature of an asynchronous queue is that
+it will always be used by at least 2 concurrent threads.
+</para>
+
+<para>
+For using an asynchronous queue you first have to create one with
+g_async_queue_new(). A newly-created queue will get the reference
+count 1. Whenever another thread is creating a new reference of (that
+is, pointer to) the queue, it has to increase the reference count
+(using g_async_queue_ref()). Also, before removing this reference, the
+reference count has to be decreased (using
+g_async_queue_unref()). After that the queue might no longer exist so
+you must not access it after that point.
+</para>
+
+<para>
+A thread, which wants to send a message to that queue simply calls
+g_async_queue_push() to push the message to the queue.
+</para>
+
+<para>
+A thread, which is expecting messages from an asynchronous queue
+simply calls g_async_queue_pop() for that queue. If no message is
+available in the queue at that point, the thread is now put to sleep
+until a message arrives. The message will be removed from the queue
+and returned. The functions g_async_queue_try_pop() and
+g_async_queue_timed_pop() can be used to only check for the presence
+of messages or to only wait a certain time for messages respectively.
+</para>
+
+<para>
+For almost every function there exist two variants, one that locks the
+queue and one that doesn't. That way you can hold the queue lock
+(acquire it with g_async_queue_lock() and release it with
+g_async_queue_unlock()) over multiple queue accessing
+instructions. This can be necessary to ensure the integrity of the
+queue, but should only be used when really necessary, as it can make
+your life harder if used unwisely. Normally you should only use the
+locking function variants (those without the suffix _unlocked)
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GAsyncQueue ##### -->
+<para>
+The #GAsyncQueue struct is an opaque data structure, which represents
+an asynchronous queue. It should only be accessed through the
+<function>g_async_queue_*</function> functions.
+</para>
+
+
+<!-- ##### FUNCTION g_async_queue_new ##### -->
+
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_new_full ##### -->
+<para>
+
+</para>
+
+@item_free_func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_ref ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_unref ##### -->
+
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_async_queue_push ##### -->
+
+
+@queue: 
+@data: 
+
+
+<!-- ##### FUNCTION g_async_queue_push_sorted ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_async_queue_pop ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_try_pop ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_timed_pop ##### -->
+
+
+@queue: 
+@end_time: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_length ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_sort ##### -->
+<para>
+
+</para>
+
+@queue: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_async_queue_lock ##### -->
+
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_async_queue_unlock ##### -->
+
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_async_queue_ref_unlocked ##### -->
+
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_async_queue_unref_and_unlock ##### -->
+
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_async_queue_push_unlocked ##### -->
+
+
+@queue: 
+@data: 
+
+
+<!-- ##### FUNCTION g_async_queue_push_sorted_unlocked ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_async_queue_pop_unlocked ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_try_pop_unlocked ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_timed_pop_unlocked ##### -->
+
+
+@queue: 
+@end_time: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_length_unlocked ##### -->
+
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_async_queue_sort_unlocked ##### -->
+<para>
+
+</para>
+
+@queue: 
+@func: 
+@user_data: 
+
+
diff --git a/docs/reference/glib/tmpl/atomic_operations.sgml b/docs/reference/glib/tmpl/atomic_operations.sgml
new file mode 100644
index 0000000..13ca69a
--- /dev/null
+++ b/docs/reference/glib/tmpl/atomic_operations.sgml
@@ -0,0 +1,191 @@
+<!-- ##### SECTION Title ##### -->
+Atomic Operations
+
+<!-- ##### SECTION Short_Description ##### -->
+basic atomic integer and pointer operations
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The following functions can be used to atomically access integers and
+pointers. They are implemented as inline assembler function on most
+platforms and use slower fall-backs otherwise. Using them can sometimes
+save you from using a performance-expensive #GMutex to protect the
+integer or pointer.  
+</para>
+
+<para>
+The most important usage is reference counting. Using
+g_atomic_int_inc() and g_atomic_int_dec_and_test() makes reference
+counting a very fast operation.
+</para>
+
+<note>
+<para>
+You must not directly read integers or pointers concurrently accessed
+by multiple threads, but use the atomic accessor functions instead.
+That is, always use g_atomic_int_get() and g_atomic_pointer_get() for
+read outs.
+They provide the neccessary synchonization mechanisms like memory
+barriers to access memory locations concurrently.
+</para> 
+</note>
+
+<note>
+<para>
+If you are using those functions for anything apart from simple
+reference counting, you should really be aware of the implications of
+doing that. There are literally thousands of ways to shoot yourself in
+the foot. So if in doubt, use a #GMutex. If you don't know, what
+memory barriers are, do not use anything but g_atomic_int_inc() and
+g_atomic_int_dec_and_test().
+</para> 
+</note>
+
+<note>
+<para>
+It is not safe to set an integer or pointer just by assigning to it,
+when it is concurrently accessed by other threads with the following
+functions. Use g_atomic_int_compare_and_exchange() or
+g_atomic_pointer_compare_and_exchange() respectively.
+</para> 
+</note>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+ 
+<varlistentry>
+<term>#GMutex</term>
+<listitem><para>GLib mutual exclusions.</para></listitem>
+</varlistentry>
+ 
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_atomic_int_get ##### -->
+<para>
+Reads the value of the integer pointed to by @atomic. Also acts as
+a memory barrier.
+</para>
+
+@Returns: the value of *@atomic
+@Since: 2.4
+<!-- # Unused Parameters # -->
+@atomic: a pointer to an integer
+
+
+<!-- ##### FUNCTION g_atomic_int_set ##### -->
+<para>
+Sets the value of the integer pointed to by @atomic. 
+Also acts as a memory barrier.
+</para>
+
+@Since: 2.10
+<!-- # Unused Parameters # -->
+@atomic: a pointer to an integer
+@newval: the new value
+
+
+<!-- ##### FUNCTION g_atomic_int_add ##### -->
+<para>
+Atomically adds @val to the integer pointed to by @atomic.
+Also acts as a memory barrier.
+</para>
+
+@Since: 2.4
+<!-- # Unused Parameters # -->
+@atomic: a pointer to an integer.
+@val: the value to add to *@atomic.
+
+
+<!-- ##### FUNCTION g_atomic_int_exchange_and_add ##### -->
+<para>
+Atomically adds @val to the integer pointed to by @atomic. It returns
+the value of *@atomic just before the addition took place.
+Also acts as a memory barrier.
+</para>
+
+@Returns: the value of *@atomic before the addition.
+@Since: 2.4
+<!-- # Unused Parameters # -->
+@atomic: a pointer to an integer.
+@val: the value to add to *@atomic.
+
+
+<!-- ##### FUNCTION g_atomic_int_compare_and_exchange ##### -->
+<para>
+Compares @oldval with the integer pointed to by @atomic and
+if they are equal, atomically exchanges *@atomic with @newval.
+Also acts as a memory barrier.
+</para>
+
+@Returns: %TRUE, if *@atomic was equal @oldval. %FALSE otherwise.
+@Since: 2.4
+<!-- # Unused Parameters # -->
+@atomic: a pointer to an integer.
+@oldval: the assumed old value of *@atomic.
+@newval: the new value of *@atomic.
+
+
+<!-- ##### FUNCTION g_atomic_pointer_get ##### -->
+<para>
+Reads the value of the pointer pointed to by @atomic. Also acts as
+a memory barrier.
+</para>
+
+@Returns: the value to add to *@atomic.
+@Since: 2.4
+<!-- # Unused Parameters # -->
+@atomic: a pointer to a #gpointer.
+
+
+<!-- ##### FUNCTION g_atomic_pointer_set ##### -->
+<para>
+Sets the value of the pointer pointed to by @atomic. 
+Also acts as a memory barrier.
+</para>
+
+@Since: 2.10
+<!-- # Unused Parameters # -->
+@atomic: a pointer to a #gpointer
+@newval: the new value
+
+
+<!-- ##### FUNCTION g_atomic_pointer_compare_and_exchange ##### -->
+<para>
+Compares @oldval with the pointer pointed to by @atomic and
+if they are equal, atomically exchanges *@atomic with @newval. 
+Also acts as a memory barrier.
+</para>
+
+@Returns: %TRUE, if *@atomic was equal @oldval. %FALSE otherwise.
+@Since: 2.4
+<!-- # Unused Parameters # -->
+@atomic: a pointer to a #gpointer.
+@oldval: the assumed old value of *@atomic.
+@newval: the new value of *@atomic.
+
+
+<!-- ##### FUNCTION g_atomic_int_inc ##### -->
+<para>
+Atomically increments the integer pointed to by @atomic by 1.
+</para>
+
+@atomic: a pointer to an integer.
+@Since: 2.4
+
+
+<!-- ##### FUNCTION g_atomic_int_dec_and_test ##### -->
+<para>
+Atomically decrements the integer pointed to by @atomic by 1.
+</para>
+
+@atomic: a pointer to an integer.
+@Returns: %TRUE, if the integer pointed to by @atomic is 0 after
+decrementing it.
+@Since: 2.4
+
+
diff --git a/docs/reference/glib/tmpl/base64.sgml b/docs/reference/glib/tmpl/base64.sgml
new file mode 100644
index 0000000..dbec7a0
--- /dev/null
+++ b/docs/reference/glib/tmpl/base64.sgml
@@ -0,0 +1,105 @@
+<!-- ##### SECTION Title ##### -->
+Base64 Encoding
+
+<!-- ##### SECTION Short_Description ##### -->
+encodes and decodes data in Base64 format
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Base64 is an encoding that allows to encode a sequence of arbitrary
+bytes as a sequence of printable ASCII characters. For the definition
+of Base64, see <ulink url="http://www.ietf.org/rfc/rfc1421.txt">RFC 
+1421</ulink> or <ulink url="http://www.ietf.org/rfc/rfc2045.txt">RFC
+2045</ulink>. Base64 is most commonly used as a MIME transfer encoding
+for email.
+</para>
+
+<para>
+GLib supports incremental encoding using g_base64_encode_step() and
+g_base64_encode_close(). Incremental decoding can be done with
+g_base64_decode_step(). To encode or decode data in one go, use 
+g_base64_encode() or g_base64_decode(). To avoid memory allocation when
+decoding, you can use g_base64_decode_inplace().
+</para>
+
+<para>
+Support for Base64 encoding has been added in GLib 2.12.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_base64_encode_step ##### -->
+<para>
+
+</para>
+
+@in: 
+@len: 
+@break_lines: 
+@out: 
+@state: 
+@save: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_base64_encode_close ##### -->
+<para>
+
+</para>
+
+@break_lines: 
+@out: 
+@state: 
+@save: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_base64_encode ##### -->
+<para>
+
+</para>
+
+@data: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_base64_decode_step ##### -->
+<para>
+
+</para>
+
+@in: 
+@len: 
+@out: 
+@state: 
+@save: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_base64_decode ##### -->
+<para>
+
+</para>
+
+@text: 
+@out_len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_base64_decode_inplace ##### -->
+<para>
+
+</para>
+
+@text: 
+@out_len: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/bookmarkfile.sgml b/docs/reference/glib/tmpl/bookmarkfile.sgml
new file mode 100644
index 0000000..5542b98
--- /dev/null
+++ b/docs/reference/glib/tmpl/bookmarkfile.sgml
@@ -0,0 +1,552 @@
+<!-- ##### SECTION Title ##### -->
+Bookmark file parser
+
+<!-- ##### SECTION Short_Description ##### -->
+parses files containing bookmarks
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#GBookmarkFile lets you parse, edit or create files containing bookmarks
+to URI, along with some meta-data about the resource pointed by the URI like
+its MIME type, the application that is registering the bookmark and the
+icon that should be used to represent the bookmark. The data is stored using
+the
+<ulink url="http://www.gnome.org/~ebassi/bookmark-spec">Desktop Bookmark
+Specification</ulink>.
+</para>
+
+<para>
+The syntax of the bookmark files is described in detail inside the Desktop
+Bookmark Specification, here is a quick summary: bookmark files use a sub-class
+of the
+<ulink url="">XML Bookmark Exchange Language</ulink> specification, consisting
+of valid UTF-8 encoded XML, under the <literal>xbel</literal> root element;
+each bookmark is stored inside a <literal>bookmark</literal> element, using
+its URI: no relative paths can be used inside a bookmark file. The bookmark
+may have a user defined title and description, to be used instead of the URI.
+Under the <literal>metadata</literal> element, with its <literal>owner</literal>
+attribute set to <literal>http://freedesktop.org</literal>, is stored the
+meta-data about a resource pointed by its URI. The meta-data consists of
+the resource's MIME type; the applications that have registered a bookmark;
+the groups to which a bookmark belongs to; a visibility flag, used to set
+the bookmark as "private" to the applications and groups that has it
+registered; the URI and MIME type of an icon, to be used when displaying the
+bookmark inside a GUI.
+</para>
+
+<informalexample><programlisting>
+<![CDATA[
+<?xml version="1.0"?>
+<!DOCTYPE xbel PUBLIC 
+  "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+  "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks">
+  <bookmark href="file:///home/ebassi/bookmark-spec/bookmark-spec.xml">
+    <title>Desktop Bookmarks Spec</title>
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type>text/xml</mime:mime-type>
+	<bookmark:applications>
+          <bookmark:application name="GEdit" count="2" exec="gedit %u" timestamp="1115726763"/>
+          <bookmark:application name="GViM" count="7" exec="gvim %f" timestamp="1115726812"/>
+	</bookmark:applications>
+	<bookmark:groups>
+	  <bookmark:group>Editors</bookmark:group>
+	</bookmark:groups>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
+]]>
+</programlisting></informalexample>
+
+<para>
+A bookmark file might contain more than one bookmark; each bookmark is accessed
+through its URI.
+</para>
+
+<para>
+The important caveat of bookmark files is that when you add a new bookmark you
+must also add the application that is registering it, using
+g_bookmark_file_add_application() or g_bookmark_file_set_app_info(). If a
+bookmark has no applications then it won't be dumped when creating the
+on disk representation, using g_bookmark_file_to_data() or
+g_bookmark_file_to_file().
+</para>
+
+<para>
+The #GBookmarkFile parser was added in GLib 2.12.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GBookmarkFile ##### -->
+<para>
+The <structname>GBookmarkFile</structname> struct contains only private data
+and should not be used directly.
+</para>
+
+
+<!-- ##### MACRO G_BOOKMARK_FILE_ERROR ##### -->
+<para>
+Error domain for bookmark file parsing. Errors in this domain will be
+from the #GBookmarkFileError enumeration. See #GError for informations
+on error domains.
+</para>
+
+
+
+<!-- ##### ENUM GBookmarkFileError ##### -->
+<para>
+Error codes returned by bookmark file parsing.
+</para>
+
+@G_BOOKMARK_FILE_ERROR_INVALID_URI: URI was ill-formed
+@G_BOOKMARK_FILE_ERROR_INVALID_VALUE: a requested field was not found
+@G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: a requested application did not
+register a bookmark
+@G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: a requested URI was not found
+@G_BOOKMARK_FILE_ERROR_READ: document was ill formed
+@G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: the text being parsed was in an
+unknown encoding
+@G_BOOKMARK_FILE_ERROR_WRITE: an error occurred while writing
+@G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: requested file was not found
+
+<!-- ##### FUNCTION g_bookmark_file_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_free ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_load_from_file ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@filename: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_load_from_data ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@data: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_load_from_data_dirs ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@file: 
+@full_path: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_to_data ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_to_file ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@filename: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_has_item ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_has_group ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@group: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_has_application ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@name: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_size ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_uris ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_title ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_description ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_mime_type ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_is_private ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_icon ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@href: 
+@mime_type: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_added ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_modified ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_visited ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_groups ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_applications ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_get_app_info ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@name: 
+@exec: 
+@count: 
+@stamp: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_title ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@title: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_description ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@description: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_mime_type ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@mime_type: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_is_private ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@is_private: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_icon ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@href: 
+@mime_type: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_added ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@added: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_groups ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@groups: 
+@length: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_modified ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@modified: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_visited ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@visited: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_set_app_info ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@name: 
+@exec: 
+@count: 
+@stamp: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_add_group ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@group: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_add_application ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@name: 
+@exec: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_remove_group ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@group: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_remove_application ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@name: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_remove_item ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@uri: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bookmark_file_move_item ##### -->
+<para>
+
+</para>
+
+@bookmark: 
+@old_uri: 
+@new_uri: 
+@error: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/byte_order.sgml b/docs/reference/glib/tmpl/byte_order.sgml
new file mode 100644
index 0000000..47a7225
--- /dev/null
+++ b/docs/reference/glib/tmpl/byte_order.sgml
@@ -0,0 +1,553 @@
+<!-- ##### SECTION Title ##### -->
+Byte Order Macros
+
+<!-- ##### SECTION Short_Description ##### -->
+a portable way to convert between different byte orders
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These macros provide a portable way to determine the host byte order
+and to convert values between different byte orders. 
+</para>
+<para>
+The byte order is the order in which bytes are stored to create larger
+data types such as the #gint and #glong values.
+The host byte order is the byte order used on the current machine.
+</para>
+<para>
+Some processors store the most significant bytes (i.e. the bytes that
+hold the largest part of the value) first. These are known as big-endian
+processors. 
+</para>
+<para>
+Other processors (notably the x86 family) store the most significant byte
+last. These are known as little-endian processors.
+</para>
+<para>
+Finally, to complicate matters, some other processors store the bytes in
+a rather curious order known as PDP-endian. For a 4-byte word, the 3rd
+most significant byte is stored first, then the 4th, then the 1st and finally
+the 2nd.
+</para>
+<para>
+Obviously there is a problem when these different processors communicate
+with each other, for example over networks or by using binary file formats.
+This is where these macros come in.
+They are typically used to convert values into a byte order
+which has been agreed on for use when communicating between different
+processors. The Internet uses what is known as 'network byte order'
+as the standard byte order (which is in fact the big-endian byte order).
+</para>
+<para>
+Note that the byte order conversion macros may evaluate their arguments 
+multiple times, thus you should not use them with arguments which have
+side-effects.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_BYTE_ORDER ##### -->
+<para>
+The host byte order.
+This can be either #G_LITTLE_ENDIAN or #G_BIG_ENDIAN (support for
+#G_PDP_ENDIAN may be added in future.)
+</para>
+
+
+
+<!-- ##### MACRO G_LITTLE_ENDIAN ##### -->
+<para>
+Specifies one of the possible types of byte order.
+See #G_BYTE_ORDER.
+</para>
+
+
+
+<!-- ##### MACRO G_BIG_ENDIAN ##### -->
+<para>
+Specifies one of the possible types of byte order.
+See #G_BYTE_ORDER.
+</para>
+
+
+
+<!-- ##### MACRO G_PDP_ENDIAN ##### -->
+<para>
+Specifies one of the possible types of byte order (currently unused).
+See #G_BYTE_ORDER.
+</para>
+
+
+
+<!-- ##### MACRO g_htonl ##### -->
+<para>
+Converts a 32-bit integer value from host to network byte order.
+</para>
+
+@val: a 32-bit integer value in host byte order.
+@Returns: @val converted to network byte order.
+
+
+<!-- ##### MACRO g_htons ##### -->
+<para>
+Converts a 16-bit integer value from host to network byte order.
+</para>
+
+@val: a 16-bit integer value in host byte order.
+@Returns: @val converted to network byte order.
+
+
+<!-- ##### MACRO g_ntohl ##### -->
+<para>
+Converts a 32-bit integer value from network to host byte order.
+</para>
+
+@val: a 32-bit integer value in network byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO g_ntohs ##### -->
+<para>
+Converts a 16-bit integer value from network to host byte order.
+</para>
+
+@val: a 16-bit integer value in network byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT_FROM_BE ##### -->
+<para>
+Converts a #gint value from big-endian to host byte order.
+</para>
+
+@val: a #gint value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT_FROM_LE ##### -->
+<para>
+Converts a #gint value from little-endian to host byte order.
+</para>
+
+@val: a #gint value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT_TO_BE ##### -->
+<para>
+Converts a #gint value from host byte order to big-endian.
+</para>
+
+@val: a #gint value in host byte order.
+@Returns: @val converted to big-endian byte order.
+
+
+<!-- ##### MACRO GINT_TO_LE ##### -->
+<para>
+Converts a #gint value from host byte order to little-endian.
+</para>
+
+@val: a #gint value in host byte order.
+@Returns: @val converted to little-endian byte order.
+
+
+<!-- ##### MACRO GUINT_FROM_BE ##### -->
+<para>
+Converts a #guint value from big-endian to host byte order.
+</para>
+
+@val: a #guint value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT_FROM_LE ##### -->
+<para>
+Converts a #guint value from little-endian to host byte order.
+</para>
+
+@val: a #guint value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT_TO_BE ##### -->
+<para>
+Converts a #guint value from host byte order to big-endian.
+</para>
+
+@val: a #guint value in host byte order.
+@Returns: @val converted to big-endian byte order.
+
+
+<!-- ##### MACRO GUINT_TO_LE ##### -->
+<para>
+Converts a #guint value from host byte order to little-endian.
+</para>
+
+@val: a #guint value in host byte order.
+@Returns: @val converted to little-endian byte order.
+
+
+<!-- ##### MACRO GLONG_FROM_BE ##### -->
+<para>
+Converts a #glong value from big-endian to the host byte order.
+</para>
+
+@val: a #glong value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GLONG_FROM_LE ##### -->
+<para>
+Converts a #glong value from little-endian to host byte order.
+</para>
+
+@val: a #glong value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GLONG_TO_BE ##### -->
+<para>
+Converts a #glong value from host byte order to big-endian.
+</para>
+
+@val: a #glong value in host byte order.
+@Returns: @val converted to big-endian byte order.
+
+
+<!-- ##### MACRO GLONG_TO_LE ##### -->
+<para>
+Converts a #glong value from host byte order to little-endian.
+</para>
+
+@val: a #glong value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GULONG_FROM_BE ##### -->
+<para>
+Converts a #gulong value from big-endian to host byte order.
+</para>
+
+@val: a #gulong value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GULONG_FROM_LE ##### -->
+<para>
+Converts a #gulong value from little-endian to host byte order.
+</para>
+
+@val: a #gulong value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GULONG_TO_BE ##### -->
+<para>
+Converts a #gulong value from host byte order to big-endian.
+</para>
+
+@val: a #gulong value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GULONG_TO_LE ##### -->
+<para>
+Converts a #gulong value from host byte order to little-endian.
+</para>
+
+@val: a #gulong value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GINT16_FROM_BE ##### -->
+<para>
+Converts a #gint16 value from big-endian to host byte order.
+</para>
+
+@val: a #gint16 value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT16_FROM_LE ##### -->
+<para>
+Converts a #gint16 value from little-endian to host byte order.
+</para>
+
+@val: a #gint16 value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT16_TO_BE ##### -->
+<para>
+Converts a #gint16 value from host byte order to big-endian.
+</para>
+
+@val: a #gint16 value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GINT16_TO_LE ##### -->
+<para>
+Converts a #gint16 value from host byte order to little-endian.
+</para>
+
+@val: a #gint16 value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GUINT16_FROM_BE ##### -->
+<para>
+Converts a #guint16 value from big-endian to host byte order.
+</para>
+
+@val: a #guint16 value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT16_FROM_LE ##### -->
+<para>
+Converts a #guint16 value from little-endian to host byte order.
+</para>
+
+@val: a #guint16 value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT16_TO_BE ##### -->
+<para>
+Converts a #guint16 value from host byte order to big-endian.
+</para>
+
+@val: a #guint16 value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GUINT16_TO_LE ##### -->
+<para>
+Converts a #guint16 value from host byte order to little-endian.
+</para>
+
+@val: a #guint16 value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GINT32_FROM_BE ##### -->
+<para>
+Converts a #gint32 value from big-endian to host byte order.
+</para>
+
+@val: a #gint32 value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT32_FROM_LE ##### -->
+<para>
+Converts a #gint32 value from little-endian to host byte order.
+</para>
+
+@val: a #gint32 value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT32_TO_BE ##### -->
+<para>
+Converts a #gint32 value from host byte order to big-endian.
+</para>
+
+@val: a #gint32 value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GINT32_TO_LE ##### -->
+<para>
+Converts a #gint32 value from host byte order to little-endian.
+</para>
+
+@val: a #gint32 value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GUINT32_FROM_BE ##### -->
+<para>
+Converts a #guint32 value from big-endian to host byte order.
+</para>
+
+@val: a #guint32 value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT32_FROM_LE ##### -->
+<para>
+Converts a #guint32 value from little-endian to host byte order.
+</para>
+
+@val: a #guint32 value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT32_TO_BE ##### -->
+<para>
+Converts a #guint32 value from host byte order to big-endian.
+</para>
+
+@val: a #guint32 value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GUINT32_TO_LE ##### -->
+<para>
+Converts a #guint32 value from host byte order to little-endian.
+</para>
+
+@val: a #guint32 value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GINT64_FROM_BE ##### -->
+<para>
+Converts a #gint64 value from big-endian to host byte order.
+</para>
+
+@val: a #gint64 value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT64_FROM_LE ##### -->
+<para>
+Converts a #gint64 value from little-endian to host byte order.
+</para>
+
+@val: a #gint64 value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GINT64_TO_BE ##### -->
+<para>
+Converts a #gint64 value from host byte order to big-endian.
+</para>
+
+@val: a #gint64 value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GINT64_TO_LE ##### -->
+<para>
+Converts a #gint64 value from host byte order to little-endian.
+</para>
+
+@val: a #gint64 value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GUINT64_FROM_BE ##### -->
+<para>
+Converts a #guint64 value from big-endian to host byte order.
+</para>
+
+@val: a #guint64 value in big-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT64_FROM_LE ##### -->
+<para>
+Converts a #guint64 value from little-endian to host byte order.
+</para>
+
+@val: a #guint64 value in little-endian byte order.
+@Returns: @val converted to host byte order.
+
+
+<!-- ##### MACRO GUINT64_TO_BE ##### -->
+<para>
+Converts a #guint64 value from host byte order to big-endian.
+</para>
+
+@val: a #guint64 value in host byte order.
+@Returns: @val converted to big-endian.
+
+
+<!-- ##### MACRO GUINT64_TO_LE ##### -->
+<para>
+Converts a #guint64 value from host byte order to little-endian.
+</para>
+
+@val: a #guint64 value in host byte order.
+@Returns: @val converted to little-endian.
+
+
+<!-- ##### MACRO GUINT16_SWAP_BE_PDP ##### -->
+<para>
+Converts a #guint16 value between big-endian and pdp-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint16 value in big-endian or pdp-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
+<!-- ##### MACRO GUINT16_SWAP_LE_BE ##### -->
+<para>
+Converts a #guint16 value between little-endian and big-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint16 value in little-endian or big-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
+<!-- ##### MACRO GUINT16_SWAP_LE_PDP ##### -->
+<para>
+Converts a #guint16 value between little-endian and pdp-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint16 value in little-endian or pdp-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
+<!-- ##### MACRO GUINT32_SWAP_BE_PDP ##### -->
+<para>
+Converts a #guint32 value between big-endian and pdp-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint32 value in big-endian or pdp-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
+<!-- ##### MACRO GUINT32_SWAP_LE_BE ##### -->
+<para>
+Converts a #guint32 value between little-endian and big-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint32 value in little-endian or big-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
+<!-- ##### MACRO GUINT32_SWAP_LE_PDP ##### -->
+<para>
+Converts a #guint32 value between little-endian and pdp-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint32 value in little-endian or pdp-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
+<!-- ##### MACRO GUINT64_SWAP_LE_BE ##### -->
+<para>
+Converts a #guint64 value between little-endian and big-endian byte order.
+The conversion is symmetric so it can be used both ways.
+</para>
+
+@val: a #guint64 value in little-endian or big-endian byte order.
+@Returns: @val converted to the opposite byte order.
+
+
diff --git a/docs/reference/glib/tmpl/caches.sgml b/docs/reference/glib/tmpl/caches.sgml
new file mode 100644
index 0000000..1636234
--- /dev/null
+++ b/docs/reference/glib/tmpl/caches.sgml
@@ -0,0 +1,162 @@
+<!-- ##### SECTION Title ##### -->
+Caches
+
+<!-- ##### SECTION Short_Description ##### -->
+caches allow sharing of complex data structures to save resources
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+A #GCache allows sharing of complex data structures, in order to save
+system resources.
+</para>
+<para>
+GTK+ uses caches for #GtkStyles and #GdkGCs. These consume a lot of
+resources, so a #GCache is used to see if a #GtkStyle or #GdkGC with the
+required properties already exists. If it does, then the existing
+object is used instead of creating a new one.
+</para>
+<para>
+#GCache uses keys and values.
+A #GCache key describes the properties of a particular resource.
+A #GCache value is the actual resource.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GCache ##### -->
+<para>
+The #GCache struct is an opaque data structure containing information about
+a #GCache. It should only be accessed via the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_cache_new ##### -->
+<para>
+Creates a new #GCache.
+</para>
+
+@value_new_func: a function to create a new object given a key.
+This is called by g_cache_insert() if an object with the given key
+does not already exist.
+@value_destroy_func: a function to destroy an object. It is
+called by g_cache_remove() when the object is no longer needed (i.e. its
+reference count drops to 0).
+@key_dup_func: a function to copy a key. It is called by
+g_cache_insert() if the key does not already exist in the #GCache.
+@key_destroy_func: a function to destroy a key. It is
+called by g_cache_remove() when the object is no longer needed (i.e. its
+reference count drops to 0).
+@hash_key_func: a function to create a hash value from a key.
+@hash_value_func: a function to create a hash value from a value.
+@key_equal_func: a function to compare two keys. It should return %TRUE if
+the two keys are equivalent.
+@Returns: a new #GCache.
+
+
+<!-- ##### FUNCTION g_cache_insert ##### -->
+<para>
+Gets the value corresponding to the given key, creating it if necessary.
+It first checks if the value already exists in the #GCache, by using
+the @key_equal_func function passed to g_cache_new().
+If it does already exist it is returned, and its reference count is increased
+by one.
+If the value does not currently exist, if is created by calling the
+@value_new_func. The key is duplicated by calling
+@key_dup_func and the duplicated key and value are inserted
+into the #GCache.
+</para>
+
+@cache: a #GCache.
+@key: a key describing a #GCache object.
+@Returns: a pointer to a #GCache value.
+
+
+<!-- ##### FUNCTION g_cache_remove ##### -->
+<para>
+Decreases the reference count of the given value.
+If it drops to 0 then the value and its corresponding key are destroyed,
+using the @value_destroy_func and @key_destroy_func passed to g_cache_new().
+</para>
+
+@cache: a #GCache.
+@value: the value to remove.
+
+
+<!-- ##### FUNCTION g_cache_destroy ##### -->
+<para>
+Frees the memory allocated for the #GCache.
+</para>
+<para>
+Note that it does not destroy the keys and values which were contained in the
+#GCache.
+</para>
+
+@cache: a #GCache.
+
+
+<!-- ##### FUNCTION g_cache_key_foreach ##### -->
+<para>
+Calls the given function for each of the keys in the #GCache.
+</para>
+<note><para>@func is passed three parameters, the value and key of a
+cache entry and the @user_data. The order of value and key is different
+from the order in which g_hash_table_foreach() passes key-value pairs
+to its callback function !
+</para></note>
+
+@cache: a #GCache.
+@func: the function to call with each #GCache key.
+@user_data: user data to pass to the function.
+
+
+<!-- ##### FUNCTION g_cache_value_foreach ##### -->
+<para>
+Calls the given function for each of the values in the #GCache.
+</para>
+
+@cache: a #GCache.
+@func: the function to call with each #GCache value.
+@user_data: user data to pass to the function.
+@Deprecated: 2.10: The reason is that it passes pointers to internal data 
+structures to @func; use g_cache_key_foreach() instead
+
+
+<!-- ##### USER_FUNCTION GCacheDestroyFunc ##### -->
+<para>
+Specifies the type of the @value_destroy_func and @key_destroy_func functions
+passed to g_cache_new().
+The functions are passed a pointer to the #GCache key or #GCache value and
+should free any memory and other resources associated with it.
+</para>
+
+@value: the #GCache value to destroy.
+
+
+<!-- ##### USER_FUNCTION GCacheDupFunc ##### -->
+<para>
+Specifies the type of the @key_dup_func function passed to g_cache_new().
+The function is passed a key (<emphasis>not</emphasis> a value as the prototype implies) and
+should return a duplicate of the key.
+</para>
+
+@value: the #GCache key to destroy (<emphasis>not</emphasis> a #GCache value as it seems).
+@Returns: a copy of the #GCache key.
+
+
+<!-- ##### USER_FUNCTION GCacheNewFunc ##### -->
+<para>
+Specifies the type of the @value_new_func function passed to g_cache_new().
+It is passed a #GCache key and should create the value corresponding to the
+key.
+</para>
+
+@key: a #GCache key.
+@Returns: a new #GCache value corresponding to the key.
+
+
diff --git a/docs/reference/glib/tmpl/checksum.sgml b/docs/reference/glib/tmpl/checksum.sgml
new file mode 100644
index 0000000..81abfe9
--- /dev/null
+++ b/docs/reference/glib/tmpl/checksum.sgml
@@ -0,0 +1,145 @@
+<!-- ##### SECTION Title ##### -->
+Data Checksums
+
+<!-- ##### SECTION Short_Description ##### -->
+Computes the checksum for data
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+GLib provides a generic API for computing checksums (or "digests") for a
+sequence of arbitrary bytes, using various hashing algorithms like MD5,
+SHA-1 and SHA-256. Checksums are commonly used in various environments and
+specifications.
+</para>
+
+<para>
+GLib supports incremental checksums using the GChecksum data structure, by
+calling g_checksum_update() as long as there's data available and then using
+g_checksum_get_string() or g_checksum_get_digest() to compute the checksum
+and return it either as a string in hexadecimal form, or as a raw sequence
+of bytes. To compute the checksum for binary blobs and NUL-terminated strings
+in one go, use the convenience functions g_compute_checksum_for_data() and
+g_compute_checksum_for_string(), respectively.
+</para>
+
+<para>
+Support for checksums has been added in GLib 2.16
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GChecksumType ##### -->
+<para>
+
+</para>
+
+@G_CHECKSUM_MD5: 
+@G_CHECKSUM_SHA1: 
+@G_CHECKSUM_SHA256: 
+
+<!-- ##### FUNCTION g_checksum_type_get_length ##### -->
+<para>
+
+</para>
+
+@checksum_type: 
+@Returns: 
+
+
+<!-- ##### STRUCT GChecksum ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION g_checksum_new ##### -->
+<para>
+
+</para>
+
+@checksum_type: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_checksum_copy ##### -->
+<para>
+
+</para>
+
+@checksum: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_checksum_free ##### -->
+<para>
+
+</para>
+
+@checksum: 
+
+
+<!-- ##### FUNCTION g_checksum_reset ##### -->
+<para>
+
+</para>
+
+@checksum: 
+
+
+<!-- ##### FUNCTION g_checksum_update ##### -->
+<para>
+
+</para>
+
+@checksum: 
+@data: 
+@length: 
+
+
+<!-- ##### FUNCTION g_checksum_get_string ##### -->
+<para>
+
+</para>
+
+@checksum: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_checksum_get_digest ##### -->
+<para>
+
+</para>
+
+@checksum: 
+@buffer: 
+@digest_len: 
+
+
+<!-- ##### FUNCTION g_compute_checksum_for_data ##### -->
+<para>
+
+</para>
+
+@checksum_type: 
+@data: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_compute_checksum_for_string ##### -->
+<para>
+
+</para>
+
+@checksum_type: 
+@str: 
+@length: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/completion.sgml b/docs/reference/glib/tmpl/completion.sgml
new file mode 100644
index 0000000..efa26fa
--- /dev/null
+++ b/docs/reference/glib/tmpl/completion.sgml
@@ -0,0 +1,158 @@
+<!-- ##### SECTION Title ##### -->
+Automatic String Completion
+
+<!-- ##### SECTION Short_Description ##### -->
+support for automatic completion using a group of target strings
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#GCompletion provides support for automatic completion of a string using
+any group of target strings. It is typically used for file name completion
+as is common in many UNIX shells.
+</para>
+<para>
+A #GCompletion is created using g_completion_new().
+Target items are added and removed with
+g_completion_add_items(), g_completion_remove_items() and
+g_completion_clear_items().
+A completion attempt is requested with g_completion_complete() or 
+g_completion_complete_utf8().
+When no longer needed, the #GCompletion is freed with g_completion_free().
+</para>
+<para>
+Items in the completion can be simple strings (e.g. filenames),
+or pointers to arbitrary data structures. If data structures are used
+you must provide a #GCompletionFunc in g_completion_new(),
+which retrieves the item's string from the data structure.
+You can change the way in which strings are compared by setting
+a different #GCompletionStrncmpFunc in g_completion_set_compare().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GCompletion ##### -->
+<para>
+The data structure used for automatic completion.
+</para>
+
+@items: list of target items (strings or data structures).
+@func: function which is called to get the string associated with a target 
+  item. It is %NULL if the target items are strings.
+@prefix: the last prefix passed to g_completion_complete() or 
+  g_completion_complete_utf8().
+@cache: the list of items which begin with @prefix.
+@strncmp_func: The function to use when comparing strings. 
+  Use g_completion_set_compare() to modify this function.
+
+<!-- ##### FUNCTION g_completion_new ##### -->
+<para>
+Creates a new #GCompletion.
+</para>
+
+@func: the function to be called to return the string representing an item
+in the #GCompletion, or %NULL if strings are going to be used as the
+#GCompletion items.
+@Returns: the new #GCompletion.
+
+
+<!-- ##### USER_FUNCTION GCompletionFunc ##### -->
+<para>
+Specifies the type of the function passed to g_completion_new().
+It should return the string corresponding to the given target item.
+This is used when you use data structures as #GCompletion items.
+</para>
+
+@Param1: the completion item.
+@Returns: the string corresponding to the item.
+
+
+<!-- ##### FUNCTION g_completion_add_items ##### -->
+<para>
+Adds items to the #GCompletion.
+</para>
+
+@cmp: the #GCompletion.
+@items: the list of items to add.
+
+
+<!-- ##### FUNCTION g_completion_remove_items ##### -->
+<para>
+Removes items from a #GCompletion.
+</para>
+
+@cmp: the #GCompletion.
+@items: the items to remove.
+
+
+<!-- ##### FUNCTION g_completion_clear_items ##### -->
+<para>
+Removes all items from the #GCompletion.
+</para>
+
+@cmp: the #GCompletion.
+
+
+<!-- ##### FUNCTION g_completion_complete ##### -->
+<para>
+Attempts to complete the string @prefix using the #GCompletion target items.
+</para>
+
+@cmp: the #GCompletion.
+@prefix: the prefix string, typically typed by the user, which is compared
+with each of the items.
+@new_prefix: if non-%NULL, returns the longest prefix which is common to all
+items that matched @prefix, or %NULL if no items matched @prefix.
+This string should be freed when no longer needed.
+@Returns: the list of items whose strings begin with @prefix. This should
+not be changed.
+
+
+<!-- ##### FUNCTION g_completion_complete_utf8 ##### -->
+<para>
+
+</para>
+
+@cmp: 
+@prefix: 
+@new_prefix: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_completion_set_compare ##### -->
+<para>
+Sets the function to use for string comparisons. The default
+string comparison function is strncmp().
+</para>
+
+@cmp: a #GCompletion.
+@strncmp_func: the string comparison function.
+
+
+<!-- ##### USER_FUNCTION GCompletionStrncmpFunc ##### -->
+<para>
+Specifies the type of the function passed to g_completion_set_compare().
+This is used when you use strings as #GCompletion items.
+</para>
+
+@s1: string to compare with @s2.
+@s2: string to compare with @s1.
+@n: maximal number of bytes to compare.
+@Returns: an integer less than, equal to, or greater than zero if the 
+first @n bytes of @s1 is found, respectively, to be less than, to match, 
+or to be greater than the first @n bytes of @s2.
+
+
+<!-- ##### FUNCTION g_completion_free ##### -->
+<para>
+Frees all memory used by the #GCompletion.
+</para>
+
+@cmp: the #GCompletion.
+
+
diff --git a/docs/reference/glib/tmpl/conversions.sgml b/docs/reference/glib/tmpl/conversions.sgml
new file mode 100644
index 0000000..60cf500
--- /dev/null
+++ b/docs/reference/glib/tmpl/conversions.sgml
@@ -0,0 +1,400 @@
+<!-- ##### SECTION Title ##### -->
+Character Set Conversion
+
+<!-- ##### SECTION Short_Description ##### -->
+convert strings between different character sets using iconv()
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+    <refsect2 id="file-name-encodings">
+      <title>File Name Encodings</title>
+
+      <para>
+	Historically, Unix has not had a defined encoding for file
+	names:  a file name is valid as long as it does not have path
+	separators in it ("/").  However, displaying file names may
+	require conversion:  from the character set in which they were
+	created, to the character set in which the application
+	operates.  Consider the Spanish file name
+	"<filename>Presentaci&oacute;n.sxi</filename>".  If the
+	application which created it uses ISO-8859-1 for its encoding,
+	then the actual file name on disk would look like this:
+      </para>
+
+      <programlisting id="filename-iso8859-1">
+Character:  P  r  e  s  e  n  t  a  c  i  &oacute;  n  .  s  x  i
+Hex code:   50 72 65 73 65 6e 74 61 63 69 f3 6e 2e 73 78 69
+      </programlisting>
+
+      <para>
+	However, if the application use UTF-8, the actual file name on
+	disk would look like this:
+      </para>
+
+      <programlisting id="filename-utf-8">
+Character:  P  r  e  s  e  n  t  a  c  i  &oacute;     n  .  s  x  i
+Hex code:   50 72 65 73 65 6e 74 61 63 69 c3 b3 6e 2e 73 78 69
+      </programlisting>
+
+      <para>
+	Glib uses UTF-8 for its strings, and GUI toolkits like GTK+
+	that use Glib do the same thing.  If you get a file name from
+	the file system, for example, from
+	<function>readdir(3)</function> or from <link
+	linkend="g_dir_read_name"><function>g_dir_read_name()</function></link>,
+	and you wish to display the file name to the user, you
+	<emphasis>will</emphasis> need to convert it into UTF-8.  The
+	opposite case is when the user types the name of a file he
+	wishes to save:  the toolkit will give you that string in
+	UTF-8 encoding, and you will need to convert it to the
+	character set used for file names before you can create the
+	file with <function>open(2)</function> or
+	<function>fopen(3)</function>.
+      </para>
+
+      <para>
+	By default, Glib assumes that file names on disk are in UTF-8
+	encoding.  This is a valid assumption for file systems which
+	were created relatively recently:  most applications use UTF-8
+	encoding for their strings, and that is also what they use for
+	the file names they create.  However, older file systems may
+	still contain file names created in "older" encodings, such as
+	ISO-8859-1.  In this case, for compatibility reasons, you may
+	want to instruct Glib to use that particular encoding for file
+	names rather than UTF-8.  You can do this by specifying the
+	encoding for file names in the <link
+	linkend="G_FILENAME_ENCODING"><envar>G_FILENAME_ENCODING</envar></link>
+	environment variable.  For example, if your installation uses
+	ISO-8859-1 for file names, you can put this in your
+	<filename>~/.profile</filename>:
+      </para>
+
+      <programlisting>
+export G_FILENAME_ENCODING=ISO-8859-1
+      </programlisting>
+
+      <para>
+	Glib provides the functions <link
+	linkend="g_filename_to_utf8"><function>g_filename_to_utf8()</function></link>
+	and <link
+	linkend="g_filename_from_utf8"><function>g_filename_from_utf8()</function></link>
+	to perform the necessary conversions.  These functions convert
+	file names from the encoding specified in
+	<envar>G_FILENAME_ENCODING</envar> to UTF-8 and vice-versa.
+	<xref linkend="file-name-encodings-diagram"/> illustrates how
+	these functions are used to convert between UTF-8 and the
+	encoding for file names in the file system.
+      </para>
+
+      <figure id="file-name-encodings-diagram">
+	<title>Conversion between File Name Encodings</title>
+	<graphic fileref="file-name-encodings.png" format="PNG"/>
+      </figure>
+
+      <refsect3 id="file-name-encodings-checklist">
+	<title>Checklist for Application Writers</title>
+
+	<para>
+	  This section is a practical summary of the detailed
+	  description above.  You can use this as a checklist of
+	  things to do to make sure your applications process file
+	  name encodings correctly.
+	</para>
+
+	<orderedlist>
+	  <listitem>
+	    <para>
+	      If you get a file name from the file system from a
+	      function such as <function>readdir(3)</function> or
+	      <function>gtk_file_chooser_get_filename()</function>,
+	      you do not need to do any conversion to pass that
+	      file name to functions like <function>open(2)</function>,
+	      <function>rename(2)</function>, or
+	      <function>fopen(3)</function> &mdash; those are "raw"
+	      file names which the file system understands.
+	    </para>
+	  </listitem>
+
+	  <listitem>
+	    <para>
+	      If you need to display a file name, convert it to UTF-8
+	      first by using <link
+	      linkend="g_filename_to_utf8"><function>g_filename_to_utf8()</function></link>.
+	      If conversion fails, display a string like
+	      "<literal>Unknown file name</literal>".  <emphasis>Do
+	      not</emphasis> convert this string back into the
+	      encoding used for file names if you wish to pass it to
+	      the file system; use the original file name instead.
+	      For example, the document window of a word processor
+	      could display "Unknown file name" in its title bar but
+	      still let the user save the file, as it would keep the
+	      raw file name internally.  This can happen if the user
+	      has not set the <envar>G_FILENAME_ENCODING</envar>
+	      environment variable even though he has files whose
+	      names are not encoded in UTF-8.
+	    </para>
+	  </listitem>
+
+	  <listitem>
+	    <para>
+	      If your user interface lets the user type a file name
+	      for saving or renaming, convert it to the encoding used
+	      for file names in the file system by using <link
+	      linkend="g_filename_from_utf8"><function>g_filename_from_utf8()</function></link>.
+	      Pass the converted file name to functions like
+	      <function>fopen(3)</function>.  If conversion fails, ask
+	      the user to enter a different file name.  This can
+	      happen if the user types Japanese characters when
+	      <envar>G_FILENAME_ENCODING</envar> is set to
+	      <literal>ISO-8859-1</literal>, for example.
+	    </para>
+	  </listitem>
+	</orderedlist>
+      </refsect3>
+    </refsect2>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_convert ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@to_codeset: 
+@from_codeset: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_convert_with_fallback ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@to_codeset: 
+@from_codeset: 
+@fallback: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### STRUCT GIConv ##### -->
+<para>
+The <structname>GIConv</structname> struct wraps an
+<function>iconv()</function> conversion descriptor. It contains private data
+and should only be accessed using the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_convert_with_iconv ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@converter: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### MACRO G_CONVERT_ERROR ##### -->
+<para>
+Error domain for character set conversions. Errors in this domain will
+be from the #GConvertError enumeration. See #GError for information on 
+error domains.
+</para>
+
+
+
+<!-- ##### FUNCTION g_iconv_open ##### -->
+<para>
+
+</para>
+
+@to_codeset: 
+@from_codeset: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_iconv ##### -->
+<para>
+
+</para>
+
+@converter: 
+@inbuf: 
+@inbytes_left: 
+@outbuf: 
+@outbytes_left: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_iconv_close ##### -->
+<para>
+
+</para>
+
+@converter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_locale_to_utf8 ##### -->
+<para>
+
+</para>
+
+@opsysstring: 
+@len: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_filename_to_utf8 ##### -->
+<para>
+
+</para>
+
+@opsysstring: 
+@len: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_filename_from_utf8 ##### -->
+<para>
+
+</para>
+
+@utf8string: 
+@len: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_filename_from_uri ##### -->
+<para>
+
+</para>
+
+@uri: 
+@hostname: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_filename_to_uri ##### -->
+<para>
+
+</para>
+
+@filename: 
+@hostname: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_filename_charsets ##### -->
+<para>
+
+</para>
+
+@charsets: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_filename_display_name ##### -->
+<para>
+
+</para>
+
+@filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_filename_display_basename ##### -->
+<para>
+
+</para>
+
+@filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_uri_list_extract_uris ##### -->
+<para>
+
+</para>
+
+@uri_list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_locale_from_utf8 ##### -->
+<para>
+
+</para>
+
+@utf8string: 
+@len: 
+@bytes_read: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### ENUM GConvertError ##### -->
+<para>
+Error codes returned by character set conversion routines.
+</para>
+
+@G_CONVERT_ERROR_NO_CONVERSION: Conversion between the requested character sets
+is not supported.
+@G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input.
+@G_CONVERT_ERROR_FAILED: Conversion failed for some reason.
+@G_CONVERT_ERROR_PARTIAL_INPUT: Partial character sequence at end of input.
+@G_CONVERT_ERROR_BAD_URI: URI is invalid.
+@G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: Pathname is not an absolute path.
+
+<!-- ##### FUNCTION g_get_charset ##### -->
+<para>
+
+</para>
+
+@charset: 
+@Returns: 
+
+
+<!--
+Local variables:
+mode: sgml
+sgml-parent-document: ("../glib-docs.sgml" "book" "refentry")
+End:
+-->
+
+
diff --git a/docs/reference/glib/tmpl/datalist.sgml b/docs/reference/glib/tmpl/datalist.sgml
new file mode 100644
index 0000000..c2cf490
--- /dev/null
+++ b/docs/reference/glib/tmpl/datalist.sgml
@@ -0,0 +1,244 @@
+<!-- ##### SECTION Title ##### -->
+Keyed Data Lists
+
+<!-- ##### SECTION Short_Description ##### -->
+lists of data elements which are accessible by a string or GQuark identifier
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Keyed data lists provide lists of arbitrary data elements which can be accessed
+either with a string or with a #GQuark corresponding to the
+string.
+</para>
+<para>
+The #GQuark methods are quicker, since the strings have to be converted to
+#GQuarks anyway.
+</para>
+<para>
+Data lists are used for associating arbitrary data with
+#GObjects, using g_object_set_data() and related functions.
+</para>
+
+<para>
+To create a datalist, use g_datalist_init().
+</para>
+<para>
+To add data elements to a datalist use g_datalist_id_set_data(),
+g_datalist_id_set_data_full(), g_datalist_set_data()
+and g_datalist_set_data_full().
+</para>
+<para>
+To get data elements from a datalist use g_datalist_id_get_data() and
+g_datalist_get_data().
+</para>
+<para>
+To iterate over all data elements in a datalist use g_datalist_foreach() (not thread-safe).
+</para>
+<para>
+To remove data elements from a datalist use g_datalist_id_remove_data() and
+g_datalist_remove_data().
+</para>
+<para>
+To remove all data elements from a datalist, use g_datalist_clear().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GData ##### -->
+<para>
+The #GData struct is an opaque data structure to represent a
+<link linkend="glib-Keyed-Data-Lists">Keyed Data List</link>.
+It should only be accessed via the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_datalist_init ##### -->
+<para>
+Resets the datalist to %NULL.
+It does not free any memory or call any destroy functions.
+</para>
+
+@datalist: a pointer to a pointer to a datalist.
+
+
+<!-- ##### MACRO g_datalist_id_set_data ##### -->
+<para>
+Sets the data corresponding to the given #GQuark id.
+Any previous data with the same key is removed, and its
+destroy function is called.
+</para>
+
+@dl: a datalist.
+@q: the #GQuark to identify the data element.
+@d: the data element, or %NULL to remove any previous element
+corresponding to @q.
+
+
+<!-- ##### FUNCTION g_datalist_id_set_data_full ##### -->
+<para>
+Sets the data corresponding to the given #GQuark id, and the function to
+be called when the element is removed from the datalist.
+Any previous data with the same key is removed, and its
+destroy function is called.
+</para>
+
+@datalist: a datalist.
+@key_id: the #GQuark to identify the data element.
+@data: the data element or %NULL to remove any previous element
+corresponding to @key_id.
+@destroy_func: the function to call when the data element is removed. This
+function will be called with the data element and can be used to free any
+memory allocated for it. If @data is %NULL, then @destroy_func must
+also be %NULL.
+
+
+<!-- ##### FUNCTION g_datalist_id_get_data ##### -->
+<para>
+Retrieves the data element corresponding to @key_id. 
+</para>
+
+@datalist: a datalist.
+@key_id: the #GQuark identifying a data element.
+@Returns: the data element, or %NULL if it is not found.
+
+
+<!-- ##### MACRO g_datalist_id_remove_data ##### -->
+<para>
+Removes an element, using its #GQuark identifier.
+</para>
+
+@dl: a datalist.
+@q: the #GQuark identifying the data element.
+
+
+<!-- ##### FUNCTION g_datalist_id_remove_no_notify ##### -->
+<para>
+Removes an element, without calling its destroy notification function.
+</para>
+
+@datalist: a datalist.
+@key_id: the #GQuark identifying a data element.
+@Returns: the data previously stored at @key_id, or %NULL if none.
+
+
+<!-- ##### MACRO g_datalist_set_data ##### -->
+<para>
+Sets the data element corresponding to the given string identifier.
+</para>
+
+@dl: a datalist.
+@k: the string to identify the data element.
+@d: the data element, or %NULL to remove any previous element
+corresponding to @k.
+
+
+<!-- ##### MACRO g_datalist_set_data_full ##### -->
+<para>
+Sets the data element corresponding to the given string identifier, and the
+function to be called when the data element is removed.
+</para>
+
+@dl: a datalist.
+@k: the string to identify the data element.
+@d: the data element, or %NULL to remove any previous element corresponding to
+@k.
+@f: the function to call when the data element is removed. This
+function will be called with the data element and can be used to free any
+memory allocated for it. If @d is %NULL, then @f must also be %NULL.
+
+
+<!-- ##### MACRO g_datalist_get_data ##### -->
+<para>
+Gets a data element, using its string identifer.
+This is slower than g_datalist_id_get_data() because the string is first
+converted to a #GQuark.
+</para>
+
+@dl: a datalist.
+@k: the string identifying a data element.
+@Returns: the data element, or %NULL if it is not found.
+
+
+<!-- ##### MACRO g_datalist_remove_data ##### -->
+<para>
+Removes an element using its string identifier.
+The data element's destroy function is called if it has been set.
+</para>
+
+@dl: a datalist.
+@k: the string identifying the data element.
+
+
+<!-- ##### MACRO g_datalist_remove_no_notify ##### -->
+<para>
+Removes an element, without calling its destroy notifier.
+</para>
+
+@dl: a datalist.
+@k: the string identifying the data element.
+
+
+<!-- ##### FUNCTION g_datalist_foreach ##### -->
+<para>
+Calls the given function for each data element of the datalist.
+The function is called with each data element's #GQuark id and data,
+together with the given @user_data parameter.
+Note that this function is NOT thread-safe. So unless @datalist
+can be protected from any modifications during invocation of this
+function, it should not be called.
+</para>
+
+@datalist: a datalist.
+@func: the function to call for each data element.
+@user_data: user data to pass to the function.
+
+
+<!-- ##### FUNCTION g_datalist_clear ##### -->
+<para>
+Frees all the data elements of the datalist.
+The data elements' destroy functions are called if they have been set.
+</para>
+
+@datalist: a datalist.
+
+
+<!-- ##### FUNCTION g_datalist_set_flags ##### -->
+<para>
+
+</para>
+
+@datalist: 
+@flags: 
+
+
+<!-- ##### FUNCTION g_datalist_unset_flags ##### -->
+<para>
+
+</para>
+
+@datalist: 
+@flags: 
+
+
+<!-- ##### FUNCTION g_datalist_get_flags ##### -->
+<para>
+
+</para>
+
+@datalist: 
+@Returns: 
+
+
+<!-- ##### MACRO G_DATALIST_FLAGS_MASK ##### -->
+<para>
+
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/datasets.sgml b/docs/reference/glib/tmpl/datasets.sgml
new file mode 100644
index 0000000..dabde37
--- /dev/null
+++ b/docs/reference/glib/tmpl/datasets.sgml
@@ -0,0 +1,212 @@
+<!-- ##### SECTION Title ##### -->
+Datasets
+
+<!-- ##### SECTION Short_Description ##### -->
+associate groups of data elements with particular memory locations
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Datasets associate groups of data elements with particular memory locations.
+These are useful if you need to associate data with a structure returned
+from an external library. Since you cannot modify the structure, you use
+its location in memory as the key into a dataset, where you can associate
+any number of data elements with it.
+</para>
+<para>
+There are two forms of most of the dataset functions.
+The first form uses strings to identify the data elements associated with
+a location. The second form uses #GQuark identifiers, which are created
+with a call to g_quark_from_string() or g_quark_from_static_string().
+The second form is quicker, since it does not require looking up the string
+in the hash table of #GQuark identifiers.
+</para>
+<para>
+There is no function to create a dataset. It is automatically created as
+soon as you add elements to it.
+</para>
+<para>
+To add data elements to a dataset use g_dataset_id_set_data(),
+g_dataset_id_set_data_full(), g_dataset_set_data()
+and g_dataset_set_data_full().
+</para>
+<para>
+To get data elements from a dataset use g_dataset_id_get_data() and
+g_dataset_get_data().
+</para>
+<para>
+To iterate over all data elements in a dataset use g_dataset_foreach() (not thread-safe).
+</para>
+<para>
+To remove data elements from a dataset use g_dataset_id_remove_data() and
+g_dataset_remove_data().
+</para>
+<para>
+To destroy a dataset, use g_dataset_destroy().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO g_dataset_id_set_data ##### -->
+<para>
+Sets the data element associated with the given #GQuark id.
+Any previous data with the same key is removed, and its destroy function
+is called.
+</para>
+
+@l: the location identifying the dataset.
+@k: the #GQuark id to identify the data element.
+@d: the data element.
+
+
+<!-- ##### FUNCTION g_dataset_id_set_data_full ##### -->
+<para>
+Sets the data element associated with the given #GQuark id, and also the
+function to call when the data element is destroyed.
+Any previous data with the same key is removed, and its
+destroy function is called.
+</para>
+
+@dataset_location: the location identifying the dataset.
+@key_id: the #GQuark id to identify the data element.
+@data: the data element.
+@destroy_func: the function to call when the data element is removed. This
+function will be called with the data element and can be used to free any
+memory allocated for it.
+
+
+<!-- ##### USER_FUNCTION GDestroyNotify ##### -->
+<para>
+Specifies the type of function which is called when a data element is
+destroyed. It is passed the pointer to the data element and should free
+any memory and resources allocated for it.
+</para>
+
+@data: the data element.
+
+
+<!-- ##### FUNCTION g_dataset_id_get_data ##### -->
+<para>
+Gets the data element corresponding to a #GQuark.
+</para>
+
+@dataset_location: the location identifying the dataset.
+@key_id: the #GQuark id to identify the data element.
+@Returns: the data element corresponding to the #GQuark, or %NULL if it is
+not found.
+
+
+<!-- ##### MACRO g_dataset_id_remove_data ##### -->
+<para>
+Removes a data element from a dataset.
+The data element's destroy function is called if it has been set.
+</para>
+
+@l: the location identifying the dataset.
+@k: the #GQuark id identifying the data element.
+
+
+<!-- ##### FUNCTION g_dataset_id_remove_no_notify ##### -->
+<para>
+Removes an element, without calling its destroy notification function.
+</para>
+
+@dataset_location: the location identifying the dataset.
+@key_id: the #GQuark ID identifying the data element.
+@Returns: the data previously stored at @key_id, or %NULL if none.
+
+
+<!-- ##### MACRO g_dataset_set_data ##### -->
+<para>
+Sets the data corresponding to the given string identifier.
+</para>
+
+@l: the location identifying the dataset.
+@k: the string to identify the data element.
+@d: the data element.
+
+
+<!-- ##### MACRO g_dataset_set_data_full ##### -->
+<para>
+Sets the data corresponding to the given string identifier, and the function
+to call when the data element is destroyed.
+</para>
+
+@l: the location identifying the dataset.
+@k: the string to identify the data element.
+@d: the data element.
+@f: the function to call when the data element is removed. This
+function will be called with the data element and can be used to free any
+memory allocated for it.
+
+
+<!-- ##### MACRO g_dataset_get_data ##### -->
+<para>
+Gets the data element corresponding to a string.
+</para>
+
+@l: the location identifying the dataset.
+@k: the string identifying the data element.
+@Returns: the data element corresponding to the string, or %NULL if it is not
+found.
+
+
+<!-- ##### MACRO g_dataset_remove_data ##### -->
+<para>
+Removes a data element corresponding to a string.
+Its destroy function is called if it has been set.
+</para>
+
+@l: the location identifying the dataset.
+@k: the string identifying the data element.
+
+
+<!-- ##### MACRO g_dataset_remove_no_notify ##### -->
+<para>
+Removes an element, without calling its destroy notifier.
+</para>
+
+@l: the location identifying the dataset.
+@k: the string identifying the data element.
+
+
+<!-- ##### FUNCTION g_dataset_foreach ##### -->
+<para>
+Calls the given function for each data element which is associated with the
+given location.
+Note that this function is NOT thread-safe. So unless @datalist
+can be protected from any modifications during invocation of this
+function, it should not be called.
+</para>
+
+@dataset_location: the location identifying the dataset.
+@func: the function to call for each data element.
+@user_data: user data to pass to the function.
+
+
+<!-- ##### USER_FUNCTION GDataForeachFunc ##### -->
+<para>
+Specifies the type of function passed to g_dataset_foreach().
+It is called with each #GQuark id and associated data element,
+together with the @user_data parameter supplied to g_dataset_foreach().
+</para>
+
+@key_id: the #GQuark id to identifying the data element.
+@data: the data element.
+@user_data: user data passed to g_dataset_foreach().
+
+
+<!-- ##### FUNCTION g_dataset_destroy ##### -->
+<para>
+Destroys the dataset, freeing all memory allocated, and calling any
+destroy functions set for data elements.
+</para>
+
+@dataset_location: the location identifying the dataset.
+
+
diff --git a/docs/reference/glib/tmpl/date.sgml b/docs/reference/glib/tmpl/date.sgml
new file mode 100644
index 0000000..5d2610b
--- /dev/null
+++ b/docs/reference/glib/tmpl/date.sgml
@@ -0,0 +1,797 @@
+<!-- ##### SECTION Title ##### -->
+Date and Time Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+calendrical calculations and miscellaneous time stuff
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GDate data structure represents a day between January 1, Year 1,
+and sometime a few thousand years in the future (right now it will go
+to the year 65535 or so, but g_date_set_parse() only parses up to the
+year 8000 or so - just count on "a few thousand"). #GDate is meant to
+represent everyday dates, not astronomical dates or historical dates
+or ISO timestamps or the like. It extrapolates the current Gregorian
+calendar forward and backward in time; there is no attempt to change
+the calendar to match time periods or locations. #GDate does not store
+time information; it represents a <emphasis>day</emphasis>.
+</para>
+
+<para>
+The #GDate implementation has several nice features; it is only a
+64-bit struct, so storing large numbers of dates is very efficient. It
+can keep both a Julian and day-month-year representation of the date,
+since some calculations are much easier with one representation or the
+other. A Julian representation is simply a count of days since some
+fixed day in the past; for #GDate the fixed day is January 1, 1 AD.
+("Julian" dates in the #GDate API aren't really Julian dates in the
+technical sense; technically, Julian dates count from the start of the
+Julian period, Jan 1, 4713 BC).
+</para>
+
+<para>
+#GDate is simple to use. First you need a "blank" date; you can get a
+dynamically allocated date from g_date_new(), or you can declare an
+automatic variable or array and initialize it to a sane state by
+calling g_date_clear(). A cleared date is sane; it's safe to call
+g_date_set_dmy() and the other mutator functions to initialize the
+value of a cleared date. However, a cleared date is initially
+<emphasis>invalid</emphasis>, meaning that it doesn't represent a day
+that exists. It is undefined to call any of the date calculation
+routines on an invalid date. If you obtain a date from a user or other
+unpredictable source, you should check its validity with the
+g_date_valid() predicate. g_date_valid() is also used to check for
+errors with g_date_set_parse() and other functions that can
+fail. Dates can be invalidated by calling g_date_clear() again.
+</para>
+
+<para>
+<emphasis>It is very important to use the API to access the #GDate
+struct.</emphasis> Often only the day-month-year or only the Julian
+representation is valid. Sometimes neither is valid. Use the API.
+</para>
+
+<para>
+GLib doesn't contain any time-manipulation functions; however, there
+is a #GTime typedef and a #GTimeVal struct which represents a more 
+precise time (with microseconds). You can request the current time as 
+a #GTimeVal with g_get_current_time().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_USEC_PER_SEC ##### -->
+<para>
+Number of microseconds in one second (1 million). This macro is provided for
+code readability.
+</para>
+
+
+
+<!-- ##### STRUCT GTimeVal ##### -->
+<para>
+Represents a precise time, with seconds and microseconds. 
+Similar to the <structname>struct timeval</structname> returned by 
+the <function>gettimeofday()</function> UNIX call.
+</para>
+
+@tv_sec: seconds
+@tv_usec: microseconds
+
+<!-- ##### FUNCTION g_get_current_time ##### -->
+<para>
+</para>
+
+@result: 
+
+
+<!-- ##### FUNCTION g_usleep ##### -->
+<para>
+Pauses the current thread for the given number of microseconds. There
+are 1 million microseconds per second (represented by the
+#G_USEC_PER_SEC macro). g_usleep() may have limited precision,
+depending on hardware and operating system; don't rely on the exact
+length of the sleep.
+</para>
+
+@microseconds: number of microseconds to pause
+
+
+<!-- ##### FUNCTION g_time_val_add ##### -->
+<para>
+
+</para>
+
+@time_: 
+@microseconds: 
+
+
+<!-- ##### FUNCTION g_time_val_from_iso8601 ##### -->
+<para>
+
+</para>
+
+@iso_date: 
+@time_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_time_val_to_iso8601 ##### -->
+<para>
+
+</para>
+
+@time_: 
+@Returns: 
+
+
+<!-- ##### STRUCT GDate ##### -->
+<para>
+Represents a day between January 1, Year 1 and a few thousand years in
+the future. None of its members should be accessed directly. If the
+<structname>GDate</structname> is obtained from g_date_new(), it will
+be safe to mutate but invalid and thus not safe for calendrical computations.
+If it's declared on the stack, it will contain garbage so must be
+initialized with g_date_clear(). g_date_clear() makes the date invalid
+but sane. An invalid date doesn't represent a day, it's "empty." A
+date becomes valid after you set it to a Julian day or you set a day,
+month, and year.
+</para>
+
+@julian_days: the Julian representation of the date
+@julian: this bit is set if @julian_days is valid
+@dmy: this is set if @day, @month and @year are valid
+@day: the day of the day-month-year representation of the date, as 
+  a number between 1 and 31
+@month: the day of the day-month-year representation of the date, as 
+  a number between 1 and 12
+@year: the day of the day-month-year representation of the date
+
+<!-- ##### TYPEDEF GTime ##### -->
+<para>
+Simply a replacement for <type>time_t</type>. It has been deprected
+since it is <emphasis>not</emphasis> equivalent to <type>time_t</type> 
+on 64-bit platforms with a 64-bit <type>time_t</type>. 
+Unrelated to #GTimer.
+</para>
+
+
+<para>
+Note that <type>GTime</type> is defined to always be a 32bit integer,
+unlike <type>time_t</type> which may be 64bit on some systems. 
+Therefore, <type>GTime</type> will overflow in the year 2038, and
+you cannot use the address of a <type>GTime</type> variable as argument 
+to the UNIX time() function. Instead, do the following:
+<informalexample>
+<programlisting>
+time_t ttime;
+GTime gtime;
+
+time (&amp;ttime);
+gtime = (GTime)ttime;
+</programlisting>
+</informalexample>
+</para>
+
+
+<!-- ##### ENUM GDateDMY ##### -->
+<para>
+This enumeration isn't used in the API, but may be useful if you need
+to mark a number as a day, month, or year.
+</para>
+
+@G_DATE_DAY: a day
+@G_DATE_MONTH: a month
+@G_DATE_YEAR: a year
+
+<!-- ##### TYPEDEF GDateDay ##### -->
+<para>
+Integer representing a day of the month; between 1 and
+31. #G_DATE_BAD_DAY represents an invalid day of the month.
+</para>
+
+
+<!-- ##### ENUM GDateMonth ##### -->
+<para>
+Enumeration representing a month; values are #G_DATE_JANUARY,
+#G_DATE_FEBRUARY, etc. #G_DATE_BAD_MONTH is the invalid value.
+</para>
+
+@G_DATE_BAD_MONTH: invalid value
+@G_DATE_JANUARY: January
+@G_DATE_FEBRUARY: February
+@G_DATE_MARCH: March
+@G_DATE_APRIL: April
+@G_DATE_MAY: May
+@G_DATE_JUNE: June
+@G_DATE_JULY: July
+@G_DATE_AUGUST: August
+@G_DATE_SEPTEMBER: September
+@G_DATE_OCTOBER: October
+@G_DATE_NOVEMBER: November
+@G_DATE_DECEMBER: December
+
+<!-- ##### TYPEDEF GDateYear ##### -->
+<para>
+Integer representing a year; #G_DATE_BAD_YEAR is the invalid
+value. The year must be 1 or higher; negative (BC) years are not
+allowed. The year is represented with four digits.
+</para>
+
+
+<!-- ##### ENUM GDateWeekday ##### -->
+<para>
+Enumeration representing a day of the week; #G_DATE_MONDAY,
+#G_DATE_TUESDAY, etc. #G_DATE_BAD_WEEKDAY is an invalid weekday.
+</para>
+
+@G_DATE_BAD_WEEKDAY: invalid value
+@G_DATE_MONDAY: Monday
+@G_DATE_TUESDAY: Tuesday
+@G_DATE_WEDNESDAY: Wednesday
+@G_DATE_THURSDAY: Thursday
+@G_DATE_FRIDAY: Friday
+@G_DATE_SATURDAY: Saturday
+@G_DATE_SUNDAY: Sunday
+
+<!-- ##### MACRO G_DATE_BAD_DAY ##### -->
+<para>
+Represents an invalid #GDateDay.
+</para>
+
+
+
+<!-- ##### MACRO G_DATE_BAD_JULIAN ##### -->
+<para>
+Represents an invalid Julian day number.
+</para>
+
+
+
+<!-- ##### MACRO G_DATE_BAD_YEAR ##### -->
+<para>
+Represents an invalid year.
+</para>
+
+
+
+<!-- ##### FUNCTION g_date_new ##### -->
+<para>
+Allocates a #GDate and initializes it to a sane state. The new date will
+be cleared (as if you'd called g_date_clear()) but invalid (it won't
+represent an existing day). Free the return value with g_date_free().
+</para>
+
+@Returns: a newly-allocated #GDate
+
+
+<!-- ##### FUNCTION g_date_new_dmy ##### -->
+<para>
+Like g_date_new(), but also sets the value of the date. Assuming the
+day-month-year triplet you pass in represents an existing day, the
+returned date will be valid.
+</para>
+
+@day: day of the month
+@month: month of the year
+@year: year
+@Returns: a newly-allocated #GDate initialized with @day, @month, and @year
+
+
+<!-- ##### FUNCTION g_date_new_julian ##### -->
+<para>
+Like g_date_new(), but also sets the value of the date. Assuming the
+Julian day number you pass in is valid (greater than 0, less than an
+unreasonably large number), the returned date will be valid.
+</para>
+
+@julian_day: days since January 1, Year 1
+@Returns: a newly-allocated #GDate initialized with @julian_day
+
+
+<!-- ##### FUNCTION g_date_clear ##### -->
+<para>
+Initializes one or more #GDate structs to a sane but invalid
+state. The cleared dates will not represent an existing date, but will
+not contain garbage. Useful to init a date declared on the stack.
+Validity can be tested with g_date_valid().
+</para>
+
+@date: pointer to one or more dates to clear
+@n_dates: number of dates to clear
+
+
+<!-- ##### FUNCTION g_date_free ##### -->
+<para>
+Frees a #GDate returned from g_date_new().
+</para>
+
+@date: a #GDate
+
+
+<!-- ##### FUNCTION g_date_set_day ##### -->
+<para>
+Sets the day of the month for a #GDate. If the resulting day-month-year
+triplet is invalid, the date will be invalid.
+</para>
+
+@date: a #GDate
+@day: day to set
+
+
+<!-- ##### FUNCTION g_date_set_month ##### -->
+<para>
+Sets the month of the year for a #GDate.  If the resulting
+day-month-year triplet is invalid, the date will be invalid.
+</para>
+
+@date: a #GDate
+@month: month to set
+
+
+<!-- ##### FUNCTION g_date_set_year ##### -->
+<para>
+Sets the year for a #GDate. If the resulting day-month-year triplet is
+invalid, the date will be invalid.
+</para>
+
+@date: a #GDate
+@year: year to set
+
+
+<!-- ##### FUNCTION g_date_set_dmy ##### -->
+<para>
+Sets the value of a #GDate from a day, month, and year. The day-month-year 
+triplet must be valid; if you aren't sure it is, call g_date_valid_dmy() to
+check before you set it.
+</para>
+
+@date: a #GDate
+@day: day
+@month: month
+@y: year
+
+
+<!-- ##### FUNCTION g_date_set_julian ##### -->
+<para>
+Sets the value of a #GDate from a Julian day number.
+</para>
+
+@date: a #GDate
+@julian_date: Julian day number (days since January 1, Year 1)
+
+
+<!-- ##### FUNCTION g_date_set_time ##### -->
+<para>
+
+</para>
+
+@date: 
+@time_: 
+
+
+<!-- ##### FUNCTION g_date_set_time_t ##### -->
+<para>
+
+</para>
+
+@date: 
+@timet: 
+
+
+<!-- ##### FUNCTION g_date_set_time_val ##### -->
+<para>
+
+</para>
+
+@date: 
+@timeval: 
+
+
+<!-- ##### FUNCTION g_date_set_parse ##### -->
+<para>
+Parses a user-inputted string @str, and try to figure out what date it
+represents, taking the <link linkend="setlocale">current locale</link> 
+into account. If the string is successfully parsed, the date will be 
+valid after the call. Otherwise, it will be invalid. You should check 
+using g_date_valid() to see whether the parsing succeeded.
+</para>
+
+<para>
+This function is not appropriate for file formats and the like; it
+isn't very precise, and its exact behavior varies with the
+locale. It's intended to be a heuristic routine that guesses what the
+user means by a given string (and it does work pretty well in that
+capacity).
+</para>
+
+@date: a #GDate to fill in
+@str: string to parse
+
+
+<!-- ##### FUNCTION g_date_add_days ##### -->
+<para>
+Increments a date some number of days. To move forward by weeks, add
+weeks*7 days. The date must be valid.
+</para>
+
+@date: a #GDate to increment
+@n_days: number of days to move the date forward
+
+
+<!-- ##### FUNCTION g_date_subtract_days ##### -->
+<para>
+Moves a date some number of days into the past. To move by weeks, just
+move by weeks*7 days. The date must be valid.
+</para>
+
+@date: a #GDate to decrement
+@n_days: number of days to move
+
+
+<!-- ##### FUNCTION g_date_add_months ##### -->
+<para>
+Increments a date by some number of months. If the day of the month is
+greater than 28, this routine may change the day of the month (because
+the destination month may not have the current day in it). The date
+must be valid.
+</para>
+
+@date: a #GDate to increment
+@n_months: number of months to move forward
+
+
+<!-- ##### FUNCTION g_date_subtract_months ##### -->
+<para>
+Moves a date some number of months into the past. If the current day of
+the month doesn't exist in the destination month, the day of the month
+may change. The date must be valid.
+</para>
+
+@date: a #GDate to decrement
+@n_months: number of months to move
+
+
+<!-- ##### FUNCTION g_date_add_years ##### -->
+<para>
+Increments a date by some number of years. If the date is February 29,
+and the destination year is not a leap year, the date will be changed
+to February 28. The date must be valid.
+</para>
+
+@date: a #GDate to increment
+@n_years: number of years to move forward
+
+
+<!-- ##### FUNCTION g_date_subtract_years ##### -->
+<para>
+Moves a date some number of years into the past. If the current day
+doesn't exist in the destination year (i.e. it's February 29 and you
+move to a non-leap-year) then the day is changed to February 29. The date
+must be valid.
+</para>
+
+@date: a #GDate to decrement
+@n_years: number of years to move
+
+
+<!-- ##### FUNCTION g_date_days_between ##### -->
+<para>
+Computes the number of days between two dates.
+If @date2 is prior to @date1, the returned value is negative.
+Both dates must be valid.
+</para>
+
+@date1: the first date
+@date2: the second date
+@Returns: the number of days between @date1 and @date2
+
+
+<!-- ##### FUNCTION g_date_compare ##### -->
+<para>
+qsort()-style comparsion function for dates. Both
+dates must be valid.
+</para>
+
+@lhs: first date to compare
+@rhs: second date to compare
+@Returns: 0 for equal, less than zero if @lhs is less than @rhs,
+    greater than zero if @lhs is greater than @rhs
+
+
+<!-- ##### FUNCTION g_date_clamp ##### -->
+<para>
+If @date is prior to @min_date, sets @date equal to @min_date.
+If @date falls after @max_date, sets @date equal to @max_date.
+Otherwise, @date is unchanged.
+Either of @min_date and @max_date may be %NULL.  All non-%NULL dates
+must be valid.
+</para>
+
+@date: a #GDate to clamp
+@min_date: minimum accepted value for @date
+@max_date: maximum accepted value for @date
+
+
+<!-- ##### FUNCTION g_date_order ##### -->
+<para>
+Checks if @date1 is less than or equal to @date2,
+and swap the values if this is not the case.
+</para>
+
+@date1: the first date
+@date2: the second date
+
+
+<!-- ##### FUNCTION g_date_get_day ##### -->
+<para>
+Returns the day of the month. The date must be valid.
+</para>
+
+@date: a #GDate to extract the day of the month from
+@Returns: day of the month
+
+
+<!-- ##### FUNCTION g_date_get_month ##### -->
+<para>
+Returns the month of the year. The date must be valid.
+</para>
+
+@date: a #GDate to get the month from
+@Returns: month of the year as a #GDateMonth
+
+
+<!-- ##### FUNCTION g_date_get_year ##### -->
+<para>
+Returns the year of a #GDate. The date must be valid.
+</para>
+
+@date: a #GDate
+@Returns: year in which the date falls
+
+
+<!-- ##### FUNCTION g_date_get_julian ##### -->
+<para>
+Returns the Julian day or "serial number" of the #GDate. The
+Julian day is simply the number of days since January 1, Year 1; i.e.,
+January 1, Year 1 is Julian day 1; January 2, Year 1 is Julian day 2,
+etc. The date must be valid.
+</para>
+
+@date: a #GDate to extract the Julian day from
+@Returns: Julian day
+
+
+<!-- ##### FUNCTION g_date_get_weekday ##### -->
+<para>
+Returns the day of the week for a #GDate. The date must be valid.
+</para>
+
+@date: a #GDate.
+@Returns: day of the week as a #GDateWeekday.
+
+
+<!-- ##### FUNCTION g_date_get_day_of_year ##### -->
+<para>
+Returns the day of the year, where Jan 1 is the first day of the
+year. The date must be valid.
+</para>
+
+@date: a #GDate to extract day of year from
+@Returns: day of the year
+
+
+<!-- ##### FUNCTION g_date_get_days_in_month ##### -->
+<para>
+Returns the number of days in a month, taking leap years into account.
+</para>
+
+@month: month
+@year: year
+@Returns: number of days in @month during the @year
+
+
+<!-- ##### FUNCTION g_date_is_first_of_month ##### -->
+<para>
+Returns %TRUE if the date is on the first of a month. The date must be valid.
+</para>
+
+@date: a #GDate to check
+@Returns: %TRUE if the date is the first of the month
+
+
+<!-- ##### FUNCTION g_date_is_last_of_month ##### -->
+<para>
+Returns %TRUE if the date is the last day of the month. The date must be valid.
+</para>
+
+@date: a #GDate to check
+@Returns: %TRUE if the date is the last day of the month
+
+
+<!-- ##### FUNCTION g_date_is_leap_year ##### -->
+<para>
+Returns %TRUE if the year is a leap year.<footnote><para>
+For the purposes of this function, leap year is every year divisible by
+4 unless that year is divisible by 100. If it is divisible by 100 it would 
+be a leap year only if that year is also divisible by 400.</para></footnote>
+</para>
+
+@year: year to check
+@Returns: %TRUE if the year is a leap year
+
+
+<!-- ##### FUNCTION g_date_get_monday_week_of_year ##### -->
+<para>
+Returns the week of the year, where weeks are understood to start on
+Monday. If the date is before the first Monday of the year, return
+0. The date must be valid.
+</para>
+
+@date: a #GDate
+@Returns: week of the year
+
+
+<!-- ##### FUNCTION g_date_get_monday_weeks_in_year ##### -->
+<para>
+Returns the number of weeks in the year, where weeks are taken to start
+on Monday. Will be 52 or 53. The date must be valid. (Years always have 52
+7-day periods, plus 1 or 2 extra days depending on whether it's a leap
+year. This function is basically telling you how many Mondays are in
+the year, i.e. there are 53 Mondays if one of the extra days happens
+to be a Monday.)
+</para>
+
+@year: a year
+@Returns: number of Mondays in the year
+
+
+<!-- ##### FUNCTION g_date_get_sunday_week_of_year ##### -->
+<para>
+Returns the week of the year during which this date falls, if weeks 
+are understood to being on Sunday. The date must be valid. Can return 0 if 
+the day is before the first Sunday of the year.
+</para>
+
+@date: a #GDate
+@Returns: week number
+
+
+<!-- ##### FUNCTION g_date_get_sunday_weeks_in_year ##### -->
+<para>
+Returns the number of weeks in the year, where weeks are taken to start
+on Sunday. Will be 52 or 53. The date must be valid. (Years always have 52
+7-day periods, plus 1 or 2 extra days depending on whether it's a leap
+year. This function is basically telling you how many Sundays are in
+the year, i.e. there are 53 Sundays if one of the extra days happens
+to be a Sunday.)
+</para>
+
+@year: year to count weeks in
+@Returns: number of weeks
+
+
+<!-- ##### FUNCTION g_date_get_iso8601_week_of_year ##### -->
+<para>
+
+</para>
+
+@date: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_date_strftime ##### -->
+<para>
+Generates a printed representation of the date, in a 
+<link linkend="setlocale">locale</link>-specific way. Works just like 
+the platform's C library strftime() function, but only accepts date-related 
+formats; time-related formats give undefined results. Date must be valid. 
+Unlike strftime() (which uses the locale encoding), works on a UTF-8 format 
+string and stores a UTF-8 result.
+</para>
+
+<para>
+This function does not provide any conversion specifiers in addition
+to those implemented by the platform's C library. For example, don't
+expect that using g_date_strftime() would make the %F provided by the C99 
+strftime() work on Windows where the C library only complies to C89.
+</para>
+
+@s: destination buffer
+@slen: buffer size
+@format: format string
+@date: valid #GDate
+@Returns: number of characters written to the buffer, or 0 the buffer was too small
+
+
+<!-- ##### FUNCTION g_date_to_struct_tm ##### -->
+<para>
+Fills in the date-related bits of a <structname>struct tm</structname>
+using the @date value. Initializes the non-date parts with something
+sane but meaningless.
+</para>
+
+@date: a #GDate to set the <structname>struct tm</structname> from.
+@tm: <structname>struct tm</structname> to fill.
+
+
+<!-- ##### FUNCTION g_date_valid ##### -->
+<para>
+Returns %TRUE if the #GDate represents an existing day. The date must not
+contain garbage; it should have been initialized with g_date_clear()
+if it wasn't allocated by one of the g_date_new() variants.
+</para>
+
+@date: a #GDate to check
+@Returns: Whether the date is valid
+
+
+<!-- ##### FUNCTION g_date_valid_day ##### -->
+<para>
+Returns %TRUE if the day of the month is valid (a day is valid if it's
+between 1 and 31 inclusive).
+</para>
+
+@day: day to check
+@Returns: %TRUE if the day is valid
+
+
+<!-- ##### FUNCTION g_date_valid_month ##### -->
+<para>
+Returns %TRUE if the month value is valid. The 12 #GDateMonth
+enumeration values are the only valid months.
+</para>
+
+@month: month
+@Returns: %TRUE if the month is valid
+
+
+<!-- ##### FUNCTION g_date_valid_year ##### -->
+<para>
+Returns %TRUE if the year is valid. Any year greater than 0 is valid,
+though there is a 16-bit limit to what #GDate will understand.
+</para>
+
+@year: year
+@Returns: %TRUE if the year is valid
+
+
+<!-- ##### FUNCTION g_date_valid_dmy ##### -->
+<para>
+Returns %TRUE if the day-month-year triplet forms a valid, existing day
+in the range of days #GDate understands (Year 1 or later, no more than
+a few thousand years in the future).
+</para>
+
+@day: day
+@month: month
+@year: year
+@Returns: %TRUE if the date is a valid one
+
+
+<!-- ##### FUNCTION g_date_valid_julian ##### -->
+<para>
+Returns %TRUE if the Julian day is valid. Anything greater than zero 
+is basically a valid Julian, though there is a 32-bit limit.
+</para>
+
+@julian_date: Julian day to check
+@Returns: %TRUE if the Julian day is valid
+
+
+<!-- ##### FUNCTION g_date_valid_weekday ##### -->
+<para>
+Returns %TRUE if the weekday is valid. The seven #GDateWeekday enumeration
+values are the only valid weekdays.
+</para>
+
+@weekday: weekday
+@Returns: %TRUE if the weekday is valid
+
+
diff --git a/docs/reference/glib/tmpl/error_reporting.sgml b/docs/reference/glib/tmpl/error_reporting.sgml
new file mode 100644
index 0000000..156f707
--- /dev/null
+++ b/docs/reference/glib/tmpl/error_reporting.sgml
@@ -0,0 +1,511 @@
+<!-- ##### SECTION Title ##### -->
+Error Reporting
+
+<!-- ##### SECTION Short_Description ##### -->
+a system for reporting errors
+
+<!-- ##### SECTION Long_Description ##### -->
+
+<para>
+GLib provides a standard method of reporting errors from a called function to
+the calling code. (This is the same problem solved by exceptions in other
+languages.) It's important to understand that this method is both a
+<emphasis>data type</emphasis> (the #GError object) and a <emphasis>set of
+rules.</emphasis> If you use #GError incorrectly, then your code will not
+properly interoperate with other code that uses #GError, and users of your API
+will probably get confused.
+</para>
+
+<para>
+First and foremost: <emphasis>#GError should only be used to report
+recoverable runtime errors, never to report programming errors.</emphasis> If
+the programmer has screwed up, then you should use g_warning(),
+g_return_if_fail(), g_assert(), g_error(), or some similar facility.
+(Incidentally, remember that the g_error() function should
+<emphasis>only</emphasis> be used for programming errors, it should not be used
+to print any error reportable via #GError.)
+</para>
+
+<para>
+Examples of recoverable runtime errors are "file not found" or "failed to parse
+input." Examples of programming errors are "NULL passed to strcmp()" or
+"attempted to free the same pointer twice." These two kinds of errors are
+fundamentally different: runtime errors should be handled or reported to the
+user, programming errors should be eliminated by fixing the bug in the program.
+This is why most functions in GLib and GTK+ do not use the #GError facility.
+</para>
+
+<para>
+Functions that can fail take a return location for a #GError as their last argument. 
+For example:
+<informalexample><programlisting>
+gboolean g_file_get_contents (const gchar *filename, 
+	                      gchar      **contents,
+                              gsize       *length,
+                              GError     **error);
+</programlisting></informalexample>
+If you pass a non-%NULL value for the <literal>error</literal> argument, it should 
+point to a location where an error can be placed. For example:
+<informalexample><programlisting>
+gchar *contents;
+GError *err = NULL;
+g_file_get_contents ("foo.txt", &amp;contents, NULL, &amp;err);
+g_assert ((contents == NULL &amp;&amp; err != NULL) || (contents != NULL &amp;&amp; err == NULL));
+if (err != NULL)
+  {
+    /* Report error to user, and free error */
+    g_assert (contents == NULL);
+    fprintf (stderr, "Unable to read file: &percnt;s\n", err->message);
+    g_error_free (err);
+  } 
+else
+  {
+    /* Use file contents */
+    g_assert (contents != NULL);
+  }
+</programlisting></informalexample>
+Note that <literal>err != NULL</literal> in this example is a
+<emphasis>reliable</emphasis> indicator of whether
+g_file_get_contents() failed. Additionally, g_file_get_contents() returns
+a boolean which indicates whether it was successful.
+</para>
+
+<para>
+Because g_file_get_contents() returns %FALSE on failure, if you are only
+interested in whether it failed and don't need to display an error message, you
+can pass %NULL for the <literal>error</literal> argument:
+<informalexample><programlisting>
+if (g_file_get_contents ("foo.txt", &amp;contents, NULL, NULL)) /* ignore errors */
+  /* no error occurred */ ;
+else
+  /* error */ ;
+</programlisting></informalexample>
+</para>
+
+<para>
+The #GError object contains three fields: <literal>domain</literal> indicates
+the module the error-reporting function is located in, <literal>code</literal>
+indicates the specific error that occurred, and <literal>message</literal> is a
+user-readable error message with as many details as possible. Several functions
+are provided to deal with an error received from a called function:
+g_error_matches() returns %TRUE if the error matches a given domain and code,
+g_propagate_error() copies an error into an error location (so the calling
+function will receive it), and g_clear_error() clears an error location by
+freeing the error and resetting the location to %NULL. To display an error to the
+user, simply display <literal>error-&gt;message</literal>, perhaps along with
+additional context known only to the calling function (the file being opened, or
+whatever -- though in the g_file_get_contents() case,
+<literal>error-&gt;message</literal> already contains a filename).
+</para>
+
+<para>
+When implementing a function that can report errors, the basic tool is
+g_set_error(). Typically, if a fatal error occurs you want to g_set_error(),
+then return immediately. g_set_error() does nothing if the error location passed
+to it is %NULL. Here's an example:
+<informalexample><programlisting>
+gint
+foo_open_file (GError **error)
+{
+  gint fd;
+
+  fd = open ("file.txt", O_RDONLY);
+
+  if (fd &lt; 0)
+    {
+      g_set_error (error,
+                   FOO_ERROR,                 /* error domain */
+                   FOO_ERROR_BLAH,            /* error code */
+                   "Failed to open file: &percnt;s", /* error message format string */
+                   g_strerror (errno));
+      return -1;
+    }
+  else
+    return fd;
+}
+</programlisting></informalexample>
+</para>
+
+<para>
+Things are somewhat more complicated if you yourself call another function that
+can report a #GError. If the sub-function indicates fatal errors in some way
+other than reporting a #GError, such as by returning %TRUE on success, you can
+simply do the following:
+<informalexample><programlisting>
+gboolean
+my_function_that_can_fail (GError **err)
+{
+  g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+  if (!sub_function_that_can_fail (err))
+    {
+       /* assert that error was set by the sub-function */
+       g_assert (err == NULL || *err != NULL);  
+       return FALSE;
+    }
+
+  /* otherwise continue, no error occurred */
+  g_assert (err == NULL || *err == NULL);
+}
+</programlisting></informalexample>
+</para>
+
+<para>
+If the sub-function does not indicate errors other than by reporting a #GError, 
+you need to create a temporary #GError since the passed-in one may be %NULL.
+g_propagate_error() is intended for use in this case.
+<informalexample><programlisting>
+gboolean
+my_function_that_can_fail (GError **err)
+{
+  GError *tmp_error;
+
+  g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+  tmp_error = NULL;
+  sub_function_that_can_fail (&amp;tmp_error);
+
+  if (tmp_error != NULL)
+    {
+       /* store tmp_error in err, if err != NULL,
+        * otherwise call g_error_free(<!-- -->) on tmp_error 
+        */
+       g_propagate_error (err, tmp_error);
+       return FALSE;
+    }
+
+  /* otherwise continue, no error occurred */
+}
+</programlisting></informalexample>
+</para>
+
+<para>
+Error pileups are always a bug. For example, this code is incorrect:
+<informalexample><programlisting>
+gboolean
+my_function_that_can_fail (GError **err)
+{
+  GError *tmp_error;
+
+  g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+  tmp_error = NULL;
+  sub_function_that_can_fail (&amp;tmp_error);
+  other_function_that_can_fail (&amp;tmp_error);
+
+  if (tmp_error != NULL)
+    {
+       g_propagate_error (err, tmp_error);
+       return FALSE;
+    }
+}
+</programlisting></informalexample>
+<literal>tmp_error</literal> should be checked immediately after
+<function>sub_function_that_can_fail()</function>, and either cleared or propagated upward.  The rule
+is: <emphasis>after each error, you must either handle the error, or return it to the
+calling function</emphasis>.  Note that passing %NULL for the error location is the
+equivalent of handling an error by always doing nothing about it. So the
+following code is fine, assuming errors in <function>sub_function_that_can_fail()</function> are not
+fatal to <function>my_function_that_can_fail()</function>:
+<informalexample><programlisting>
+gboolean
+my_function_that_can_fail (GError **err)
+{
+  GError *tmp_error;
+
+  g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+  sub_function_that_can_fail (NULL); /* ignore errors */
+
+  tmp_error = NULL;
+  other_function_that_can_fail (&amp;tmp_error);
+
+  if (tmp_error != NULL)
+    {
+       g_propagate_error (err, tmp_error);
+       return FALSE;
+    }
+}
+</programlisting></informalexample>
+</para>
+
+<para>
+Note that passing %NULL for the error location <emphasis>ignores</emphasis>
+errors; it's equivalent to <literal>try { sub_function_that_can_fail (); } catch
+(...) {}</literal> in C++. It does <emphasis>not</emphasis> mean to leave errors
+unhandled; it means to handle them by doing nothing.
+</para>
+
+<para>
+Error domains and codes are conventionally named as follows:
+<itemizedlist>
+<listitem>
+<para>
+The error domain is called 
+<literal>&lt;NAMESPACE&gt;_&lt;MODULE&gt;_ERROR</literal>, for example
+%G_SPAWN_ERROR or %G_THREAD_ERROR:
+<informalexample><programlisting>
+#define G_SPAWN_ERROR g_spawn_error_quark (<!-- -->)
+
+GQuark
+g_spawn_error_quark (void)
+{
+  return g_quark_from_static_string ("g-spawn-error-quark");
+}
+</programlisting></informalexample>
+</para>
+</listitem>
+<listitem>
+<para>
+The error codes are in an enumeration called 
+<literal>&lt;Namespace&gt;&lt;Module&gt;Error</literal>; for example,
+#GThreadError or #GSpawnError.
+</para>
+</listitem>
+<listitem>
+<para>
+Members of the error code enumeration are called <literal>&lt;NAMESPACE&gt;_&lt;MODULE&gt;_ERROR_&lt;CODE&gt;</literal>, for example %G_SPAWN_ERROR_FORK or %G_THREAD_ERROR_AGAIN. 
+</para>
+</listitem>
+<listitem>
+<para>
+If there's a "generic" or "unknown" error code for unrecoverable errors it
+doesn't make sense to distinguish with specific codes, it should be called 
+<literal>&lt;NAMESPACE&gt;_&lt;MODULE&gt;_ERROR_FAILED</literal>, for 
+example %G_SPAWN_ERROR_FAILED or %G_THREAD_ERROR_FAILED.
+</para>
+</listitem>
+</itemizedlist>
+</para>
+
+<para>
+Summary of rules for use of #GError:
+      <itemizedlist>
+	<listitem>
+	  <para>
+           Do not report programming errors via #GError.
+	  </para>
+	</listitem>
+
+      <listitem>
+        <para>
+          The last argument of a function that returns an error should be a
+          location where a #GError can be placed (i.e. "#GError** error").  If
+          #GError is used with varargs, the #GError** should be the last
+          argument before the "...".
+        </para>
+      </listitem>
+
+      <listitem>
+        <para>
+          The caller may pass %NULL for the #GError** if they are not interested
+          in details of the exact error that occurred.
+        </para>
+      </listitem>
+
+	<listitem>
+	  <para>
+           If %NULL is passed for the #GError** argument, then errors should 
+           not be returned to the caller, but your function should still 
+           abort and return if an error occurs. That is, control flow should
+           not be affected by whether the caller wants to get a #GError.
+	  </para>
+	</listitem>
+
+      <listitem>
+        <para>
+          If a #GError is reported, then your function by definition  
+          <emphasis>had a fatal failure and did not complete whatever it was supposed
+            to do</emphasis>. If the failure was not fatal, then you handled it
+          and you should not report it. If it was fatal, then you must report it 
+          and discontinue whatever you were doing immediately.
+        </para>
+      </listitem>
+
+	<listitem>
+	  <para>
+          A #GError* must be initialized to %NULL before passing its address to
+          a function that can report errors.
+	  </para>
+	</listitem>
+
+	<listitem>
+	  <para>
+          "Piling up" errors is always a bug. That is, if you assign a new
+          #GError to a #GError* that is non-%NULL, thus overwriting the previous
+          error, it indicates that you should have aborted the operation instead
+          of continuing. If you were able to continue, you should have cleared
+          the previous error with g_clear_error(). g_set_error() will complain
+          if you pile up errors.
+	  </para>
+	</listitem>
+
+
+	<listitem>
+	  <para>
+          By convention, if you return a boolean value indicating success 
+          then %TRUE means success and %FALSE means failure. If %FALSE is returned,
+          the error <emphasis>must</emphasis> be set to a non-%NULL value. 
+        </para>
+	</listitem>
+
+
+	<listitem>
+	  <para>
+          A %NULL return value is also frequently used to mean that an error
+          occurred.  You should make clear in your documentation whether %NULL is
+          a valid return value in non-error cases; if %NULL is a valid value,
+          then users must check whether an error was returned to see if the
+          function succeeded.
+	  </para>
+	</listitem>
+
+	<listitem>
+	  <para>
+          When implementing a function that can report errors, you may want to
+          add a check at the top of your function that the error return location
+          is either %NULL or contains a %NULL error
+          (e.g. <literal>g_return_if_fail (error == NULL || *error ==
+          NULL);</literal>).
+	  </para>
+	</listitem>
+
+
+</itemizedlist>
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GError ##### -->
+<para>
+The <structname>GError</structname> structure contains 
+information about an error that has occurred.
+</para>
+
+@domain: error domain, e.g. #G_FILE_ERROR.
+@code: error code, e.g. %G_FILE_ERROR_NOENT.
+@message: human-readable informative error message.
+
+<!-- ##### FUNCTION g_error_new ##### -->
+<para>
+
+</para>
+
+@domain: 
+@code: 
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_error_new_literal ##### -->
+<para>
+
+</para>
+
+@domain: 
+@code: 
+@message: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_error_free ##### -->
+<para>
+
+</para>
+
+@error: 
+
+
+<!-- ##### FUNCTION g_error_copy ##### -->
+<para>
+
+</para>
+
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_error_matches ##### -->
+<para>
+
+</para>
+
+@error: 
+@domain: 
+@code: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_set_error ##### -->
+<para>
+
+</para>
+
+@err: 
+@domain: 
+@code: 
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_set_error_literal ##### -->
+<para>
+
+</para>
+
+@err: 
+@domain: 
+@code: 
+@message: 
+
+
+<!-- ##### FUNCTION g_propagate_error ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+
+
+<!-- ##### FUNCTION g_clear_error ##### -->
+<para>
+
+</para>
+
+@err: <!--
+Local variables:
+mode: sgml
+sgml-parent-document: ("../glib-docs.sgml" "book" "refsect2" "")
+End:
+-->
+
+
+<!-- ##### FUNCTION g_prefix_error ##### -->
+<para>
+
+</para>
+
+@err: 
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_propagate_prefixed_error ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+@format: 
+@Varargs: 
+
+
diff --git a/docs/reference/glib/tmpl/fileutils.sgml b/docs/reference/glib/tmpl/fileutils.sgml
new file mode 100644
index 0000000..0b9ef6c
--- /dev/null
+++ b/docs/reference/glib/tmpl/fileutils.sgml
@@ -0,0 +1,470 @@
+<!-- ##### SECTION Title ##### -->
+File Utilities
+
+<!-- ##### SECTION Short_Description ##### -->
+various file-related functions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+There is a group of functions which wrap the common POSIX functions 
+dealing with filenames (g_open(), g_rename(), g_mkdir(), g_stat(), 
+g_unlink(), g_remove(), g_fopen(), g_freopen()). The point of these 
+wrappers is to make it possible to handle file names with any Unicode 
+characters in them on Windows without having to use ifdefs and the 
+wide character API in the application code.
+</para>
+<para>
+The pathname argument should be in the GLib file name encoding. On
+POSIX this is the actual on-disk encoding which might correspond to
+the locale settings of the process (or the 
+<envar>G_FILENAME_ENCODING</envar> environment variable), or not.
+</para>
+<para>
+On Windows the GLib file name encoding is UTF-8. Note that the
+Microsoft C library does not use UTF-8, but has separate APIs for
+current system code page and wide characters (UTF-16). The GLib
+wrappers call the wide character API if present (on modern Windows
+systems), otherwise convert to/from the system code page.
+</para>
+
+<para>
+Another group of functions allows to open and read directories
+in the GLib file name encoding. These are g_dir_open(), 
+g_dir_read_name(), g_dir_rewind(), g_dir_close().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GFileError ##### -->
+<para>
+Values corresponding to <literal>errno</literal> codes returned from file operations
+on UNIX. Unlike <literal>errno</literal> codes, #GFileError values are available on 
+all systems, even Windows. The exact meaning of each code depends on what
+sort of file operation you were performing; the UNIX documentation
+gives more details. The following error code descriptions come 
+from the GNU C Library manual, and are under the copyright
+of that manual.
+</para>
+
+<para>
+It's not very portable to make detailed assumptions about exactly
+which errors will be returned from a given operation. Some errors
+don't occur on some systems, etc., sometimes there are subtle
+differences in when a system will report a given error, etc.
+</para>
+
+@G_FILE_ERROR_EXIST: Operation not permitted; only the owner of the
+     file (or other resource) or processes with special privileges can
+     perform the operation.
+@G_FILE_ERROR_ISDIR: File is a directory; you cannot open a directory
+     for writing, or create or remove hard links to it.
+@G_FILE_ERROR_ACCES: Permission denied; the file permissions do not
+     allow the attempted operation.
+@G_FILE_ERROR_NAMETOOLONG: Filename too long.
+@G_FILE_ERROR_NOENT: No such file or directory.  This is a "file
+     doesn't exist" error for ordinary files that are referenced in
+     contexts where they are expected to already exist.
+@G_FILE_ERROR_NOTDIR: A file that isn't a directory was specified when
+     a directory is required.
+@G_FILE_ERROR_NXIO: No such device or address.  The system tried to
+     use the device represented by a file you specified, and it
+     couldn't find the device.  This can mean that the device file was
+     installed incorrectly, or that the physical device is missing or
+     not correctly attached to the computer.
+@G_FILE_ERROR_NODEV: This file is of a type that doesn't support
+     mapping.
+@G_FILE_ERROR_ROFS: The directory containing the new link can't be
+          modified because it's on a read-only file system.
+@G_FILE_ERROR_TXTBSY: Text file busy.
+@G_FILE_ERROR_FAULT: You passed in a pointer to bad memory.
+  (GLib won't reliably return this, don't pass in pointers to bad
+  memory.)
+@G_FILE_ERROR_LOOP: Too many levels of symbolic links were encountered
+  in looking up a file name.  This often indicates a cycle of symbolic
+  links.
+@G_FILE_ERROR_NOSPC: No space left on device; write operation on a
+  file failed because the disk is full.
+@G_FILE_ERROR_NOMEM: No memory available.  The system cannot allocate
+     more virtual memory because its capacity is full.
+@G_FILE_ERROR_MFILE: The current process has too many files open and
+     can't open any more.  Duplicate descriptors do count toward this
+     limit.
+@G_FILE_ERROR_NFILE: There are too many distinct file openings in the
+     entire system.
+@G_FILE_ERROR_BADF: Bad file descriptor; for example, I/O on a
+     descriptor that has been closed or reading from a descriptor open
+     only for writing (or vice versa).
+@G_FILE_ERROR_INVAL: Invalid argument.  This is used to indicate
+     various kinds of problems with passing the wrong argument to a
+     library function.
+@G_FILE_ERROR_PIPE: Broken pipe; there is no process reading from the
+     other end of a pipe.  Every library function that returns this
+     error code also generates a `SIGPIPE' signal; this signal
+     terminates the program if not handled or blocked.  Thus, your
+     program will never actually see this code unless it has handled or
+     blocked `SIGPIPE'.
+@G_FILE_ERROR_AGAIN: Resource temporarily unavailable; the call might
+     work if you try again later.
+@G_FILE_ERROR_INTR: Interrupted function call; an asynchronous signal
+     occurred and prevented completion of the call.  When this
+     happens, you should try the call again.
+@G_FILE_ERROR_IO: Input/output error; usually used for physical read
+    or write errors. i.e. the disk or other physical device hardware
+    is returning errors.
+@G_FILE_ERROR_PERM: Operation not permitted; only the owner of the
+     file (or other resource) or processes with special privileges can
+     perform the operation.
+@G_FILE_ERROR_NOSYS: Function not implemented; this indicates that the
+    system is missing some functionality.
+@G_FILE_ERROR_FAILED: Does not correspond to a UNIX error code; this
+  is the standard "failed for unspecified reason" error code present in 
+  all #GError error code enumerations. Returned if no specific
+  code applies.
+
+<!-- ##### MACRO G_FILE_ERROR ##### -->
+<para>
+Error domain for file operations. Errors in this domain will
+be from the #GFileError enumeration. See #GError for information on 
+error domains.
+</para>
+
+
+
+<!-- ##### ENUM GFileTest ##### -->
+<para>
+A test to perform on a file using g_file_test().
+</para>
+
+@G_FILE_TEST_IS_REGULAR: %TRUE if the file is a regular file (not a directory).
+    Note that this test will also return %TRUE if the tested file is a symlink
+    to a regular file.
+@G_FILE_TEST_IS_SYMLINK: %TRUE if the file is a symlink.
+@G_FILE_TEST_IS_DIR: %TRUE if the file is a directory.
+@G_FILE_TEST_IS_EXECUTABLE: %TRUE if the file is executable.
+@G_FILE_TEST_EXISTS: %TRUE if the file exists. 
+    It may or may not be a regular file.
+
+<!-- ##### FUNCTION g_file_error_from_errno ##### -->
+<para>
+
+</para>
+
+@err_no: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_file_get_contents ##### -->
+<para>
+
+</para>
+
+@filename: 
+@contents: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_file_set_contents ##### -->
+<para>
+
+</para>
+
+@filename: 
+@contents: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_file_test ##### -->
+<para>
+
+</para>
+
+@filename: 
+@test: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_mkstemp ##### -->
+<para>
+
+</para>
+
+@tmpl: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_file_open_tmp ##### -->
+<para>
+
+</para>
+
+@tmpl: 
+@name_used: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_file_read_link ##### -->
+<para>
+
+</para>
+
+@filename: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_mkdir_with_parents ##### -->
+<para>
+
+</para>
+
+@pathname: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### STRUCT GDir ##### -->
+<para>
+An opaque structure representing an opened directory.
+</para>
+
+
+<!-- ##### FUNCTION g_dir_open ##### -->
+<para>
+
+</para>
+
+@path: 
+@flags: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_dir_read_name ##### -->
+<para>
+
+</para>
+
+@dir: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_dir_rewind ##### -->
+<para>
+
+</para>
+
+@dir: 
+
+
+<!-- ##### FUNCTION g_dir_close ##### -->
+<para>
+
+</para>
+
+@dir: 
+
+
+<!-- ##### STRUCT GMappedFile ##### -->
+<para>
+The #GMappedFile represents a file mapping created with
+g_mapped_file_new(). It has only private members and should
+not be accessed directly.
+</para>
+
+
+<!-- ##### FUNCTION g_mapped_file_new ##### -->
+<para>
+
+</para>
+
+@filename: 
+@writable: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_mapped_file_free ##### -->
+<para>
+
+</para>
+
+@file: 
+
+
+<!-- ##### FUNCTION g_mapped_file_get_length ##### -->
+<para>
+
+</para>
+
+@file: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_mapped_file_get_contents ##### -->
+<para>
+
+</para>
+
+@file: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_open ##### -->
+<para>
+
+</para>
+
+@filename: 
+@flags: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rename ##### -->
+<para>
+
+</para>
+
+@oldfilename: 
+@newfilename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_mkdir ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_stat ##### -->
+<para>
+
+</para>
+
+@filename: 
+@buf: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_lstat ##### -->
+<para>
+
+</para>
+
+@filename: 
+@buf: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unlink ##### -->
+<para>
+
+</para>
+
+@filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_remove ##### -->
+<para>
+
+</para>
+
+@filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rmdir ##### -->
+<para>
+
+</para>
+
+@filename: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_fopen ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_freopen ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mode: 
+@stream: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_chmod ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_access ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_creat ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_chdir ##### -->
+<para>
+
+</para>
+
+@path: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utime ##### -->
+<para>
+
+</para>
+
+@filename: 
+@utb: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/glib-unused.sgml b/docs/reference/glib/tmpl/glib-unused.sgml
new file mode 100644
index 0000000..ca73e16
--- /dev/null
+++ b/docs/reference/glib/tmpl/glib-unused.sgml
@@ -0,0 +1,970 @@
+<!-- ##### SECTION ./tmpl/desktop_entry.sgml:Long_Description ##### -->
+<para>
+The "GDesktopEntry" parser is intended to parse files written to
+the <ulink
+url="http://www.freedesktop.org/Standards/desktop-entry-spec">Desktop
+Entry Specification</ulink>.  It supports deserialization of
+desktop entries from files and in-memory data.  Desktop entries
+are used for a variety of things including menus, application
+MIME type registration, and launchers.
+</para>
+
+<para>
+To load an existing desktop entry from a data directory (as
+returned by g_get_user_data_dir() and g_get_system_data_dirs())
+use g_desktop_entry_new_from_data_dirs().  To load an existing
+desktop entry from an arbitrary location on the file system use
+g_desktop_entry_new_from_file().  If the desktop entry is already
+in memory use g_desktop_entry_new_from_data().  Once the desktop 
+entry is loaded its keys can be queried using the g_desktop_entry_get 
+family of functions.
+</para>
+
+<para>
+To create a new desktop entry first call g_desktop_entry_new().
+Then, call the g_desktop_entry_set family of functions.  Next,
+call g_desktop_entry_to_data() to output the desktop entry to 
+a byte array, which can be written to disk or sent over a
+network.  Finally, call g_desktop_entry_free() to deallocate the
+#GDesktopEntry object returned by g_desktop_entry_new().
+</para>
+
+
+<!-- ##### SECTION ./tmpl/desktop_entry.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/desktop_entry.sgml:Short_Description ##### -->
+serializes and deserializes a desktop entry.
+
+
+<!-- ##### SECTION ./tmpl/desktop_entry.sgml:Title ##### -->
+Desktop Entry Parser
+
+
+<!-- ##### SECTION ./tmpl/glib-unused.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/testutils.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/testutils.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/testutils.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/testutils.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/testutils.sgml:Title ##### -->
+Testing
+
+
+<!-- ##### ENUM GChannelError ##### -->
+<para>
+
+</para>
+
+@G_CHANNEL_ERROR_ACCES: 
+@G_CHANNEL_ERROR_BADF: 
+@G_CHANNEL_ERROR_DEADLK: 
+@G_CHANNEL_ERROR_FAULT: 
+@G_CHANNEL_ERROR_INVAL: 
+@G_CHANNEL_ERROR_IO: 
+@G_CHANNEL_ERROR_ISDIR: 
+@G_CHANNEL_ERROR_MFILE: 
+@G_CHANNEL_ERROR_NOLCK: 
+@G_CHANNEL_ERROR_NOSPC: 
+@G_CHANNEL_ERROR_PERM: 
+@G_CHANNEL_ERROR_PIPE: 
+@G_CHANNEL_ERROR_SPIPE: 
+@G_CHANNEL_ERROR_ENCODE_RW: 
+@G_CHANNEL_ERROR_FAILED: 
+
+<!-- ##### ENUM GChannelStatus ##### -->
+<para>
+
+</para>
+
+@G_CHANNEL_STATUS_NORMAL: 
+@G_CHANNEL_STATUS_EOF: 
+@G_CHANNEL_STATUS_PARTIAL_CHARS: 
+@G_CHANNEL_STATUS_AGAIN: 
+@G_CHANNEL_STATUS_INTR: 
+@G_CHANNEL_STATUS_ERROR: 
+@G_CHANNEL_STATUS_BAD_INPUT: 
+
+<!-- ##### USER_FUNCTION GCompareFuncData ##### -->
+<para>
+
+</para>
+
+@a: 
+@b: 
+@user_data: 
+@Returns: 
+
+<!-- ##### USER_FUNCTION GCompletionStrcmpFunc ##### -->
+<para>
+
+</para>
+
+@s1: 
+@s2: 
+@Returns: 
+
+<!-- ##### STRUCT GDesktopEntry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM GDesktopEntryError ##### -->
+<para>
+Error codes returned by desktop entry parsing.
+</para>
+
+@G_DESKTOP_ENTRY_ERROR_UNKNOWN_ENCODING: text being parsed is not UTF-8 and
+cannot be guessed.
+@G_DESKTOP_ENTRY_ERROR_BAD_START_GROUP: desktop entry does not start with a
+legal start group.
+@G_DESKTOP_ENTRY_ERROR_PARSE: desktop entry is empty or contains invalid
+data.
+@G_DESKTOP_ENTRY_ERROR_NOT_FOUND: valid desktop entry could not be found.
+@G_DESKTOP_ENTRY_ERROR_KEY_NOT_FOUND: desktop entry does not have requested
+key.
+@G_DESKTOP_ENTRY_ERROR_GROUP_NOT_FOUND: desktop entry does not have requested
+group
+@G_DESKTOP_ENTRY_ERROR_INVALID_VALUE: desktop entry contains key which has
+value that cannot be validated.
+
+<!-- ##### ENUM GDesktopEntryFlags ##### -->
+<para>
+#GDesktopEntry supports a few flags for tweaking performance during
+deserialization.  #G_DESKTOP_ENTRY_DISCARD_COMMENTS and 
+#G_DESKTOP_ENTRY_DISCARD_TRANSLATIONS will reduce memory footprint,
+and #G_DESKTOP_ENTRY_GENERATE_LOOKUP_MAP will increase key lookup speed.
+</para>
+
+@G_DESKTOP_ENTRY_NONE: use parser defaults
+@G_DESKTOP_ENTRY_DISCARD_COMMENTS:  Discard all lines that are blank
+or start with "#".
+@G_DESKTOP_ENTRY_DISCARD_TRANSLATIONS: Only retain translations that
+are returned by g_get_language_names().
+@G_DESKTOP_ENTRY_GENERATE_LOOKUP_MAP: Generate a lookup map for key names to make lookups constant time at the cost of more memory.
+
+<!-- ##### USER_FUNCTION GErrorFunc ##### -->
+<para>
+Specifies the type of function passed to g_set_error_handler().
+</para>
+
+@str: the error message.
+
+<!-- ##### USER_FUNCTION GHookFreeFunc ##### -->
+<para>
+
+</para>
+
+@hook_list: 
+@hook: 
+
+<!-- ##### ENUM GIOFileMode ##### -->
+<para>
+
+</para>
+
+@G_IO_FILE_MODE_READ: 
+@G_IO_FILE_MODE_WRITE: 
+@G_IO_FILE_MODE_APPEND: 
+@G_IO_FILE_MODE_READ_WRITE: 
+@G_IO_FILE_MODE_READ_WRITE_TRUNCATE: 
+@G_IO_FILE_MODE_READ_WRITE_APPEND: 
+
+<!-- ##### ENUM GMatchType ##### -->
+<para>
+Enumeration representing different kinds of patterns. This is only used
+internally for optimizing the match algorithm.
+</para>
+
+@G_MATCH_ALL: a general pattern.
+@G_MATCH_ALL_TAIL: a general pattern which contains a fixed part matching
+the end of the string.
+@G_MATCH_HEAD: a pattern matching every string with a certain prefix.
+@G_MATCH_TAIL: a pattern matching every string with a certain suffix.
+@G_MATCH_EXACT: a pattern matching exactly one string.
+@G_MATCH_LAST: 
+
+<!-- ##### USER_FUNCTION GWarningFunc ##### -->
+<para>
+Specifies the type of function passed to g_set_warning_handler().
+</para>
+
+@str: the warning message.
+
+<!-- ##### MACRO G_CHANNEL_ERROR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO G_DESKTOP_ENTRY_ERROR ##### -->
+<para>
+Error domain for desktop entry parsing. Errors in this domain will
+be from the #GDesktopEntryError enumeration. See #GError for information on 
+error domains.
+</para>
+
+
+<!-- ##### MACRO G_HOOK_DEFERRED_DESTROY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO G_IO_CHANNEL_DEFAULT_LINE_TERM ##### -->
+<para>
+One of %G_IO_CHANNEL_UNIX_LINE_TERM, %G_IO_CHANNEL_DOS_LINE_TERM,
+or %G_IO_CHANNEL_MACINTOSH_LINE_TERM (unimplemented)
+depending on the system type.
+</para>
+
+
+<!-- ##### MACRO G_IO_CHANNEL_DOS_LINE_TERM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO G_IO_CHANNEL_ENCODE_RAW ##### -->
+<para>
+Encoding for nonbuffered IO. With this encoding, data must be
+read using g_io_channel_read_chars(); the other functions will
+not work.
+</para>
+
+
+<!-- ##### MACRO G_IO_CHANNEL_MACINTOSH_LINE_TERM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO G_IO_CHANNEL_UNIX_LINE_TERM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NAME_MAX ##### -->
+<para>
+Provided for UNIX emulation on Windows; equivalent to UNIX macro 
+%NAME_MAX, which is the maximum length of a single path component.
+i.e. just the <filename>foo</filename> in <filename>/usr/bin/foo</filename>.
+</para>
+
+
+<!-- ##### MACRO _ ##### -->
+<para>
+Marks a string for translation, gets replaced with the translated string
+at runtime.
+</para>
+
+@String: the string to be translated
+@Since: 2.4
+
+<!-- ##### MACRO access ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO close ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION closedir ##### -->
+<para>
+Provided for UNIX emulation on Windows; see documentation for <function>closedir()</function>
+in any UNIX manual.
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### MACRO fdopen ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ftruncate ##### -->
+<para>
+Provided for UNIX emulation on Windows; see documentation for ftruncate()
+in any UNIX manual.
+</para>
+
+@fd: 
+@size: 
+
+<!-- ##### FUNCTION g_channel_error_from_errno ##### -->
+<para>
+
+</para>
+
+@en: 
+@Returns: 
+
+<!-- ##### FUNCTION g_channel_error_quark ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION g_convert_error_quark ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_escape_strings ##### -->
+<para>
+
+</para>
+
+@entry: 
+@should_escape: 
+
+<!-- ##### FUNCTION g_desktop_entry_free ##### -->
+<para>
+
+</para>
+
+@entry: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_boolean ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_boolean_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_groups ##### -->
+<para>
+
+</para>
+
+@entry: 
+@length: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_integer ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_integer_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_keys ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_locale_string ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@locale: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_locale_string_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@locale: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_start_group ##### -->
+<para>
+
+</para>
+
+@entry: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_string ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_get_string_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_has_group ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_has_key ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_new ##### -->
+<para>
+
+</para>
+
+@flags: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_new_from_data ##### -->
+<para>
+
+</para>
+
+@data: 
+@length: 
+@legal_start_groups: 
+@flags: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_new_from_data_dirs ##### -->
+<para>
+
+</para>
+
+@file: 
+@full_path: 
+@legal_start_groups: 
+@flags: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_new_from_file ##### -->
+<para>
+
+</para>
+
+@file: 
+@legal_start_groups: 
+@flags: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_desktop_entry_remove_group ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_remove_key ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_boolean ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@boolean: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_boolean_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_integer ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@integer: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_integer_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_locale_string ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@locale: 
+@string: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_locale_string_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@locale: 
+@list: 
+@length: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_string ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@string: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_set_string_list ##### -->
+<para>
+
+</para>
+
+@entry: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+@error: 
+
+<!-- ##### FUNCTION g_desktop_entry_to_data ##### -->
+<para>
+
+</para>
+
+@entry: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_file_replace ##### -->
+<para>
+
+</para>
+
+@filename: 
+@contents: 
+@length: 
+@error: 
+@Returns: 
+
+<!-- ##### FUNCTION g_format_file_size_for_display ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+<!-- ##### FUNCTION g_io_channel_error_quark ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### VARIABLE g_log_domain_glib ##### -->
+<para>
+The log domain used for messages logged by GLib itself.
+</para>
+
+
+<!-- ##### FUNCTION g_main_add_poll ##### -->
+<para>
+Adds a file descriptor to be polled.
+This is usually combined with g_source_add() to add an event source.
+The event source's check function will typically test the revents
+field in the #GPollFD struct and return TRUE if events need to be processed.
+</para>
+
+@fd: a #GPollFD, which is a file descriptor together with a bitwise
+combination of #GIOCondition flags determining which events to poll for.
+@priority: the priority of the poll, which should be the same as the priority
+used for g_source_add() to ensure that the file descriptor is polled whenever
+the results may be needed.
+See #G_PRIORITY_DEFAULT, #G_PRIORITY_DEFAULT_IDLE, #G_PRIORITY_HIGH,
+#G_PRIORITY_HIGH_IDLE, and #G_PRIORITY_LOW.
+
+<!-- ##### FUNCTION g_main_context_get ##### -->
+<para>
+
+</para>
+
+@thread: 
+@Returns: 
+
+<!-- ##### FUNCTION g_main_loop_destroy ##### -->
+<para>
+
+</para>
+
+@loop: 
+
+<!-- ##### FUNCTION g_main_remove_poll ##### -->
+<para>
+Removes a file descriptor from the list being polled.
+</para>
+
+@fd: the #GPollFD to remove.
+
+<!-- ##### FUNCTION g_main_win32_get_poll_func ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION g_mem_check ##### -->
+<para>
+Checks if the given memory has already been freed. If it has it outputs
+a warning message.
+To use this function you must configure glib with the flag
+'--enable-mem-check=yes' before compiling.
+</para>
+
+@mem: the memory to check.
+
+<!-- ##### FUNCTION g_regex_error_quark ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION g_regex_free ##### -->
+<para>
+
+</para>
+
+@regex: 
+
+<!-- ##### FUNCTION g_scanner_stat_mode ##### -->
+<para>
+Gets the file attributes.
+This is the <structfield>st_mode</structfield> field from the
+<structname>stat</structname> structure. See the <function>stat()</function>
+documentation.
+</para>
+
+@filename: the file name.
+@Returns: the file attributes.
+
+<!-- ##### FUNCTION g_set_error_handler ##### -->
+<para>
+Sets the function to be called to handle error messages.
+This function is deprecated in favour of the new logging facilities.
+</para>
+
+@func: the function to be called to handle error messages.
+@Returns: the old error handler.
+
+<!-- ##### FUNCTION g_set_message_handler ##### -->
+<para>
+Sets the function to be called to handle messages.
+This function is deprecated in favour of the new logging facilities.
+</para>
+
+@func: the function to be called to handle normal messages.
+@Returns: the old message handler.
+
+<!-- ##### FUNCTION g_set_warning_handler ##### -->
+<para>
+Sets the function to be called to handle warning messages.
+This function is deprecated in favour of the new logging facilities.
+</para>
+
+@func: the function to be called to handle warning messages.
+@Returns: the old warning handler.
+
+<!-- ##### FUNCTION g_source_add ##### -->
+<para>
+</para>
+
+@priority: 
+@can_recurse: 
+@funcs: 
+@source_data: 
+@user_data: 
+@notify: 
+@Returns: 
+@source: 
+@context: 
+
+<!-- ##### FUNCTION g_source_connect ##### -->
+<para>
+
+</para>
+
+@source: 
+@func: 
+@data: 
+@notify: 
+
+<!-- ##### FUNCTION g_source_connect_indirect ##### -->
+<para>
+
+</para>
+
+@source: 
+@callback_data: 
+@callback_funcs: 
+
+<!-- ##### FUNCTION g_source_remove_by_source_data ##### -->
+<para>
+Removes the first event source found with the given source data.
+</para>
+<para>
+Event sources are sorted with the highest priority first. Sources with equal
+priority are stored in the order in which they were added.
+</para>
+
+@source_data: the source data, which contains information specific to the
+type of source.
+@Returns: TRUE if an event source was found and removed.
+
+<!-- ##### FUNCTION g_static_private_get_for_thread ##### -->
+<para>
+
+</para>
+
+@private_key: 
+@thread: 
+@Returns: 
+
+<!-- ##### FUNCTION g_static_private_set_for_thread ##### -->
+<para>
+
+</para>
+
+@private_key: 
+@thread: 
+@data: 
+@notify: 
+
+<!-- ##### MACRO g_string ##### -->
+<para>
+Turns the argument into a string literal by using the '#' stringizing operator.
+</para>
+
+@x: text to convert to a literal string.
+
+<!-- ##### FUNCTION g_warn_message ##### -->
+<para>
+
+</para>
+
+@domain: 
+@file: 
+@line: 
+@func: 
+@warnexpr: 
+
+<!-- ##### MACRO getcwd ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO getpid ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO lseek ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO open ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION opendir ##### -->
+<para>
+Provided for UNIX emulation on Windows; see documentation for <function>opendir()</function>
+in any UNIX manual.
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### MACRO pclose ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO pipe ##### -->
+<para>
+Provided for UNIX emulation on Windows; see documentation for pipe()
+in any UNIX manual.
+</para>
+
+@phandles: file descriptors, the first one for reading, the second one for writing.
+
+<!-- ##### MACRO popen ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO read ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO readdir ##### -->
+<para>
+Provided for UNIX emulation on Windows; see documentation for <function>readdir()</function>
+in any UNIX manual.
+</para>
+
+
+<!-- ##### FUNCTION rewinddir ##### -->
+<para>
+Provided for UNIX emulation on Windows; see documentation for <function>rewinddir()</function>
+in any UNIX manual.
+</para>
+
+@Param1: 
+
+<!-- ##### MACRO write ##### -->
+<para>
+
+</para>
+
+
diff --git a/docs/reference/glib/tmpl/gregex.sgml b/docs/reference/glib/tmpl/gregex.sgml
new file mode 100644
index 0000000..c1469b3
--- /dev/null
+++ b/docs/reference/glib/tmpl/gregex.sgml
@@ -0,0 +1,631 @@
+<!-- ##### SECTION Title ##### -->
+Perl-compatible regular expressions
+
+<!-- ##### SECTION Short_Description ##### -->
+matches strings against regular expressions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The <function>g_regex_*()</function> functions implement regular
+expression pattern matching using syntax and semantics similar to
+Perl regular expression.
+</para>
+<para>
+Some functions accept a <parameter>start_position</parameter> argument,
+setting it differs from just passing over a shortened string and setting
+#G_REGEX_MATCH_NOTBOL in the case of a pattern that begins with any kind
+of lookbehind assertion.
+For example, consider the pattern "\Biss\B" which finds occurrences of "iss"
+in the middle of words. ("\B" matches only if the current position in the
+subject is not a word boundary.) When applied to the string "Mississipi"
+from the fourth byte, namely "issipi", it does not match, because "\B" is
+always false at the start of the subject, which is deemed to be a word
+boundary. However, if the entire string is passed , but with
+<parameter>start_position</parameter> set to 4, it finds the second
+occurrence of "iss" because it is able to look behind the starting point
+to discover that it is preceded by a letter.
+</para>
+<para>
+Note that, unless you set the #G_REGEX_RAW flag, all the strings passed
+to these functions must be encoded in UTF-8. The lengths and the positions
+inside the strings are in bytes and not in characters, so, for instance,
+"\xc3\xa0" (i.e. "&agrave;") is two bytes long but it is treated as a single
+character. If you set #G_REGEX_RAW the strings can be non-valid UTF-8
+strings and a byte is treated as a character, so "\xc3\xa0" is two bytes
+and two characters long.
+</para>
+<para>
+When matching a pattern, "\n" matches only against a "\n" character in the
+string, and "\r" matches only a "\r" character. To match any newline sequence
+use "\R". This particular group matches either the two-character sequence
+CR + LF ("\r\n"), or one of the single characters LF (linefeed, U+000A, "\n"), VT
+(vertical tab, U+000B, "\v"), FF (formfeed, U+000C, "\f"), CR (carriage return,
+U+000D, "\r"), NEL (next line, U+0085), LS (line separator, U+2028), or PS
+(paragraph separator, U+2029).
+</para>
+<para>
+The behaviour of the dot, circumflex, and dollar metacharacters are affected by
+newline characters, the default is to recognize any newline character (the same
+characters recognized by "\R"). This can be changed with #G_REGEX_NEWLINE_CR,
+#G_REGEX_NEWLINE_LF and #G_REGEX_NEWLINE_CRLF compile options,
+and with #G_REGEX_MATCH_NEWLINE_ANY, #G_REGEX_MATCH_NEWLINE_CR,
+#G_REGEX_MATCH_NEWLINE_LF and #G_REGEX_MATCH_NEWLINE_CRLF match options.
+These settings are also relevant when compiling a pattern if
+#G_REGEX_EXTENDED is set, and an unescaped "#" outside a character class is
+encountered. This indicates a comment that lasts until after the next
+newline.
+</para>
+<para>
+Creating and manipulating the same #GRegex structure from different
+threads is not a problem as #GRegex does not modify its internal
+state between creation and destruction, on the other hand #GMatchInfo is
+not threadsafe.
+</para>
+<para>
+The regular expressions low level functionalities are obtained through
+the excellent <ulink url="http://www.pcre.org/">PCRE</ulink> library
+written by Philip Hazel.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GRegexError ##### -->
+<para>
+Error codes returned by regular expressions functions.
+</para>
+
+@G_REGEX_ERROR_COMPILE: Compilation of the regular expression failed.
+@G_REGEX_ERROR_OPTIMIZE: Optimization of the regular expression failed.
+@G_REGEX_ERROR_REPLACE: Replacement failed due to an ill-formed replacement string.
+@G_REGEX_ERROR_MATCH: The match process failed.
+@G_REGEX_ERROR_INTERNAL: Internal error of the regular expression engine. Since 2.16
+@G_REGEX_ERROR_STRAY_BACKSLASH: "\\" at end of pattern. Since 2.16
+@G_REGEX_ERROR_MISSING_CONTROL_CHAR: "\\c" at end of pattern. Since 2.16
+@G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: Unrecognized character follows "\\". Since 2.16
+@G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: Numbers out of order in "{}" quantifier. Since 2.16
+@G_REGEX_ERROR_QUANTIFIER_TOO_BIG: Number too big in "{}" quantifier. Since 2.16
+@G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: Missing terminating "]" for character class. Since 2.16
+@G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: Invalid escape sequence in character class. Since 2.16
+@G_REGEX_ERROR_RANGE_OUT_OF_ORDER: Range out of order in character class. Since 2.16
+@G_REGEX_ERROR_NOTHING_TO_REPEAT: Nothing to repeat. Since 2.16
+@G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: Unrecognized character after "(?", "(?&lt;" or "(?P". Since 2.16
+@G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: POSIX named classes are supported only within a class. Since 2.16
+@G_REGEX_ERROR_UNMATCHED_PARENTHESIS: Missing terminating ")" or ")" without opening "(". Since 2.16
+@G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: Reference to non-existent subpattern. Since 2.16
+@G_REGEX_ERROR_UNTERMINATED_COMMENT: Missing terminating ")" after comment. Since 2.16
+@G_REGEX_ERROR_EXPRESSION_TOO_LARGE: Regular expression too large. Since 2.16
+@G_REGEX_ERROR_MEMORY_ERROR: Failed to get memory. Since 2.16
+@G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: Lookbehind assertion is not fixed length. Since 2.16
+@G_REGEX_ERROR_MALFORMED_CONDITION: Malformed number or name after "(?(". Since 2.16
+@G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: Conditional group contains more than two branches. Since 2.16
+@G_REGEX_ERROR_ASSERTION_EXPECTED: Assertion expected after "(?(". Since 2.16
+@G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: Unknown POSIX class name. Since 2.16
+@G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: POSIX collating elements are not supported. Since 2.16
+@G_REGEX_ERROR_HEX_CODE_TOO_LARGE: Character value in "\\x{...}" sequence is too large. Since 2.16
+@G_REGEX_ERROR_INVALID_CONDITION: Invalid condition "(?(0)". Since 2.16
+@G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: \\C not allowed in lookbehind assertion. Since 2.16
+@G_REGEX_ERROR_INFINITE_LOOP: Recursive call could loop indefinitely. Since 2.16
+@G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: Missing terminator in subpattern name. Since 2.16
+@G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: Two named subpatterns have the same name. Since 2.16
+@G_REGEX_ERROR_MALFORMED_PROPERTY: Malformed "\\P" or "\\p" sequence. Since 2.16
+@G_REGEX_ERROR_UNKNOWN_PROPERTY: Unknown property name after "\\P" or "\\p". Since 2.16
+@G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: Subpattern name is too long (maximum 32 characters). Since 2.16
+@G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: Too many named subpatterns (maximum 10,000). Since 2.16
+@G_REGEX_ERROR_INVALID_OCTAL_VALUE: Octal value is greater than "\\377". Since 2.16
+@G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: "DEFINE" group contains more than one branch. Since 2.16
+@G_REGEX_ERROR_DEFINE_REPETION: Repeating a "DEFINE" group is not allowed. Since 2.16
+@G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: Inconsistent newline options. Since 2.16
+@G_REGEX_ERROR_MISSING_BACK_REFERENCE: "\\g" is not followed by a braced name or an
+optionally braced non-zero number. Since 2.16
+@Since: 2.14
+
+<!-- ##### MACRO G_REGEX_ERROR ##### -->
+<para>
+Error domain for regular expressions. Errors in this domain will be from the #GRegexError enumeration. See #GError for information on error domains.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### ENUM GRegexCompileFlags ##### -->
+<para>
+Flags specifying compile-time options.
+</para>
+
+@G_REGEX_CASELESS: Letters in the pattern match both upper and lower case
+letters. It be changed within a pattern by a "(?i)" option setting.
+@G_REGEX_MULTILINE: By default, GRegex treats the strings as consisting
+of a single line of characters (even if it actually contains newlines).
+The "start of line" metacharacter ("^") matches only at the start of the
+string, while the "end of line" metacharacter ("$") matches only at the
+end of the string, or before a terminating newline (unless
+#G_REGEX_DOLLAR_ENDONLY is set). When #G_REGEX_MULTILINE is set,
+the "start of line" and "end of line" constructs match immediately following
+or immediately before any newline in the string, respectively, as well
+as at the very start and end. This can be changed within a pattern by a
+"(?m)" option setting.
+@G_REGEX_DOTALL: A dot metacharater (".") in the pattern matches all
+characters, including newlines. Without it, newlines are excluded. This
+option can be changed within a pattern by a ("?s") option setting.
+@G_REGEX_EXTENDED: Whitespace data characters in the pattern are
+totally ignored except when escaped or inside a character class.
+Whitespace does not include the VT character (code 11). In addition,
+characters between an unescaped "#" outside a character class and
+the next newline character, inclusive, are also ignored. This can be
+changed within a pattern by a "(?x)" option setting.
+@G_REGEX_ANCHORED: The pattern is forced to be "anchored", that is,
+it is constrained to match only at the first matching point in the string
+that is being searched. This effect can also be achieved by appropriate
+constructs in the pattern itself such as the "^" metacharater.
+@G_REGEX_DOLLAR_ENDONLY: A dollar metacharacter ("$") in the pattern
+matches only at the end of the string. Without this option, a dollar also
+matches immediately before the final character if it is a newline (but
+not before any other newlines). This option is ignored if
+#G_REGEX_MULTILINE is set.
+@G_REGEX_UNGREEDY: Inverts the "greediness" of the
+quantifiers so that they are not greedy by default, but become greedy
+if followed by "?". It can also be set by a "(?U)" option setting within
+the pattern.
+@G_REGEX_RAW: Usually strings must be valid UTF-8 strings, using this
+flag they are considered as a raw sequence of bytes.
+@G_REGEX_NO_AUTO_CAPTURE: Disables the use of numbered capturing
+parentheses in the pattern. Any opening parenthesis that is not followed
+by "?" behaves as if it were followed by "?:" but named parentheses can
+still be used for capturing (and they acquire numbers in the usual way).
+@G_REGEX_OPTIMIZE: Optimize the regular expression. If the pattern will
+be used many times, then it may be worth the effort to optimize it to
+improve the speed of matches.
+@G_REGEX_DUPNAMES: Names used to identify capturing subpatterns need not
+be unique. This can be helpful for certain types of pattern when it is known
+that only one instance of the named subpattern can ever be matched.
+@G_REGEX_NEWLINE_CR: Usually any newline character is recognized, if this
+option is set, the only recognized newline character is '\r'.
+@G_REGEX_NEWLINE_LF: Usually any newline character is recognized, if this
+option is set, the only recognized newline character is '\n'.
+@G_REGEX_NEWLINE_CRLF: Usually any newline character is recognized, if this
+option is set, the only recognized newline character sequence is '\r\n'.
+@Since: 2.14
+
+<!-- ##### ENUM GRegexMatchFlags ##### -->
+<para>
+Flags specifying match-time options.
+</para>
+
+@G_REGEX_MATCH_ANCHORED: The pattern is forced to be "anchored", that is,
+it is constrained to match only at the first matching point in the string
+that is being searched. This effect can also be achieved by appropriate
+constructs in the pattern itself such as the "^" metacharater.
+@G_REGEX_MATCH_NOTBOL: Specifies that first character of the string is
+not the beginning of a line, so the circumflex metacharacter should not
+match before it. Setting this without G_REGEX_MULTILINE (at compile time)
+causes circumflex never to match. This option affects only the behaviour of
+the circumflex metacharacter, it does not affect "\A".
+@G_REGEX_MATCH_NOTEOL: Specifies that the end of the subject string is
+not the end of a line, so the dollar metacharacter should not match it nor
+(except in multiline mode) a newline immediately before it. Setting this
+without G_REGEX_MULTILINE (at compile time) causes dollar never to match.
+This option affects only the behaviour of the dollar metacharacter, it does
+not affect "\Z" or "\z".
+@G_REGEX_MATCH_NOTEMPTY: An empty string is not considered to be a valid
+match if this option is set. If there are alternatives in the pattern, they
+are tried. If all the alternatives match the empty string, the entire match
+fails. For example, if the pattern "a?b?" is applied to a string not beginning
+with "a" or "b", it matches the empty string at the start of the string.
+With this flag set, this match is not valid, so GRegex searches further
+into the string for occurrences of "a" or "b".
+@G_REGEX_MATCH_PARTIAL: Turns on the partial matching feature, for more
+documentation on partial matching see g_match_info_is_partial_match().
+@G_REGEX_MATCH_NEWLINE_CR: Overrides the newline definition set when creating
+a new #GRegex, setting the '\r' character as line terminator.
+@G_REGEX_MATCH_NEWLINE_LF: Overrides the newline definition set when creating
+a new #GRegex, setting the '\n' character as line terminator.
+@G_REGEX_MATCH_NEWLINE_CRLF: Overrides the newline definition set when creating
+a new #GRegex, setting the '\r\n' characters as line terminator.
+@G_REGEX_MATCH_NEWLINE_ANY: Overrides the newline definition set when creating
+a new #GRegex, any newline character or character sequence is recognized.
+@Since: 2.14
+
+<!-- ##### STRUCT GRegex ##### -->
+<para>
+A GRegex is the "compiled" form of a regular expression pattern. This
+structure is opaque and its fields cannot be accessed directly.
+</para>
+
+@Since: 2.14
+
+<!-- ##### USER_FUNCTION GRegexEvalCallback ##### -->
+<para>
+Specifies the type of the function passed to g_regex_replace_eval().
+It is called for each occurance of the pattern in the string passed
+to g_regex_replace_eval(), and it should append the replacement to
+@result.
+</para>
+
+@match_info: the #GMatchInfo generated by the match. 
+Use g_match_info_get_regex() and g_match_info_get_string() if you 
+need the #GRegex or the matched string.
+@result: a #GString containing the new string
+@user_data: user data passed to g_regex_replace_eval()
+@Returns: %FALSE to continue the replacement process, %TRUE to stop it
+@Since: 2.14
+
+
+<!-- ##### FUNCTION g_regex_new ##### -->
+<para>
+
+</para>
+
+@pattern: 
+@compile_options: 
+@match_options: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_ref ##### -->
+<para>
+
+</para>
+
+@regex: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_unref ##### -->
+<para>
+
+</para>
+
+@regex: 
+
+
+<!-- ##### FUNCTION g_regex_get_pattern ##### -->
+<para>
+
+</para>
+
+@regex: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_get_max_backref ##### -->
+<para>
+
+</para>
+
+@regex: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_get_capture_count ##### -->
+<para>
+
+</para>
+
+@regex: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_get_string_number ##### -->
+<para>
+
+</para>
+
+@regex: 
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_escape_string ##### -->
+<para>
+
+</para>
+
+@string: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_match_simple ##### -->
+<para>
+
+</para>
+
+@pattern: 
+@string: 
+@compile_options: 
+@match_options: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_match ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@match_options: 
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_match_full ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@string_len: 
+@start_position: 
+@match_options: 
+@match_info: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_match_all ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@match_options: 
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_match_all_full ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@string_len: 
+@start_position: 
+@match_options: 
+@match_info: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_split_simple ##### -->
+<para>
+
+</para>
+
+@pattern: 
+@string: 
+@compile_options: 
+@match_options: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_split ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@match_options: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_split_full ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@string_len: 
+@start_position: 
+@match_options: 
+@max_tokens: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_replace ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@string_len: 
+@start_position: 
+@replacement: 
+@match_options: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_replace_literal ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@string_len: 
+@start_position: 
+@replacement: 
+@match_options: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_replace_eval ##### -->
+<para>
+
+</para>
+
+@regex: 
+@string: 
+@string_len: 
+@start_position: 
+@match_options: 
+@eval: 
+@user_data: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_regex_check_replacement ##### -->
+<para>
+
+</para>
+
+@replacement: 
+@has_references: 
+@error: 
+@Returns: 
+
+
+<!-- ##### STRUCT GMatchInfo ##### -->
+<para>
+#GMatchInfo is used to retrieve information about the regular expression match
+which created it.
+This structure is opaque and its fields cannot be accessed directly.
+</para>
+
+@Since: 2.14
+
+<!-- ##### FUNCTION g_match_info_get_regex ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_get_string ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_free ##### -->
+<para>
+
+</para>
+
+@match_info: 
+
+
+<!-- ##### FUNCTION g_match_info_matches ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_next ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_get_match_count ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_is_partial_match ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_expand_references ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@string_to_expand: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_fetch ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@match_num: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_fetch_pos ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@match_num: 
+@start_pos: 
+@end_pos: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_fetch_named ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_fetch_named_pos ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@name: 
+@start_pos: 
+@end_pos: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_match_info_fetch_all ##### -->
+<para>
+
+</para>
+
+@match_info: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/gurifuncs.sgml b/docs/reference/glib/tmpl/gurifuncs.sgml
new file mode 100644
index 0000000..8e95d60
--- /dev/null
+++ b/docs/reference/glib/tmpl/gurifuncs.sgml
@@ -0,0 +1,95 @@
+<!-- ##### SECTION Title ##### -->
+URI Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_URI_RESERVED_CHARS_ALLOWED_IN_PATH ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION g_uri_parse_scheme ##### -->
+<para>
+
+</para>
+
+@uri: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_uri_escape_string ##### -->
+<para>
+
+</para>
+
+@unescaped: 
+@reserved_chars_allowed: 
+@allow_utf8: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_uri_unescape_string ##### -->
+<para>
+
+</para>
+
+@escaped_string: 
+@illegal_characters: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_uri_unescape_segment ##### -->
+<para>
+
+</para>
+
+@escaped_string: 
+@escaped_string_end: 
+@illegal_characters: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/hash_tables.sgml b/docs/reference/glib/tmpl/hash_tables.sgml
new file mode 100644
index 0000000..40ece8d
--- /dev/null
+++ b/docs/reference/glib/tmpl/hash_tables.sgml
@@ -0,0 +1,451 @@
+<!-- ##### SECTION Title ##### -->
+Hash Tables
+
+<!-- ##### SECTION Short_Description ##### -->
+associations between keys and values so that given a key the value
+can be found quickly
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+A #GHashTable provides associations between keys and values which
+is optimized so that given a key, the associated value can be found
+very quickly.
+</para>
+<para>
+Note that neither keys nor values are copied when inserted into the
+#GHashTable, so they must exist for the lifetime of the #GHashTable.
+This means that the use of static strings is OK, but temporary
+strings (i.e. those created in buffers and those returned by GTK+ widgets)
+should be copied with g_strdup() before being inserted.
+</para>
+<para>
+If keys or values are dynamically allocated, you must be careful to ensure
+that they are freed when they are removed from the #GHashTable, and also
+when they are overwritten by new insertions into the #GHashTable.
+It is also not advisable to mix static strings and dynamically-allocated
+strings in a #GHashTable, because it then becomes difficult to determine
+whether the string should be freed.
+</para>
+<para>
+To create a #GHashTable, use g_hash_table_new().
+</para>
+<para>
+To insert a key and value into a #GHashTable, use g_hash_table_insert().
+</para>
+<para>
+To lookup a value corresponding to a given key, use g_hash_table_lookup()
+and g_hash_table_lookup_extended().
+</para>
+<para>
+To remove a key and value, use g_hash_table_remove().
+</para>
+<para>
+To call a function for each key and value pair use g_hash_table_foreach()
+or use a iterator to iterate over the key/value pairs in the hash table, see
+#GHashTableIter.
+</para>
+<para>
+To destroy a #GHashTable use g_hash_table_destroy().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GHashTable ##### -->
+<para>
+The <structname>GHashTable</structname> struct is an opaque data structure to represent a
+<link linkend="glib-Hash-Tables">Hash Table</link>.
+It should only be accessed via the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_hash_table_new ##### -->
+<para>
+
+</para>
+
+@hash_func: 
+@key_equal_func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_new_full ##### -->
+<para>
+
+</para>
+
+@hash_func: 
+@key_equal_func: 
+@key_destroy_func: 
+@value_destroy_func: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GHashFunc ##### -->
+<para>
+Specifies the type of the hash function which is passed to
+g_hash_table_new() when a #GHashTable is created.
+</para>
+<para>
+The function is passed a key and should return a #guint hash value.
+The functions g_direct_hash(), g_int_hash() and g_str_hash() provide
+hash functions which can be used when the key is a #gpointer, #gint, and 
+#gchar* respectively.
+</para>
+<para>
+<!-- FIXME: Need more here. -->
+The hash values should be evenly distributed over a fairly large range?
+The modulus is taken with the hash table size (a prime number)
+to find the 'bucket' to place each key into.
+The function should also be very fast, since it is called for each key
+lookup.
+</para>
+
+@key: a key.
+@Returns: the hash value corresponding to the key.
+
+
+<!-- ##### USER_FUNCTION GEqualFunc ##### -->
+<para>
+Specifies the type of a function used to test two values for
+equality. The function should return %TRUE if both values are equal and
+%FALSE otherwise.
+</para>
+
+@a: a value.
+@b: a value to compare with.
+@Returns: %TRUE if @a = @b; %FALSE otherwise.
+
+
+<!-- ##### FUNCTION g_hash_table_insert ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_hash_table_replace ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_hash_table_size ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_lookup ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_lookup_extended ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@lookup_key: 
+@orig_key: 
+@value: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_foreach ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_hash_table_find ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@predicate: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GHFunc ##### -->
+<para>
+Specifies the type of the function passed to g_hash_table_foreach().
+It is called with each key/value pair, together with the @user_data parameter
+which is passed to g_hash_table_foreach().
+</para>
+
+@key: a key.
+@value: the value corresponding to the key.
+@user_data: user data passed to g_hash_table_foreach().
+
+
+<!-- ##### FUNCTION g_hash_table_remove ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_steal ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_foreach_remove ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_foreach_steal ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_remove_all ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+
+
+<!-- ##### FUNCTION g_hash_table_steal_all ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+
+
+<!-- ##### FUNCTION g_hash_table_get_keys ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_get_values ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GHRFunc ##### -->
+<para>
+Specifies the type of the function passed to g_hash_table_foreach_remove().
+It is called with each key/value pair, together with the @user_data parameter
+passed to g_hash_table_foreach_remove().
+It should return %TRUE if the key/value pair should be removed from the
+#GHashTable.
+</para>
+
+@key: a key.
+@value: the value associated with the key.
+@user_data: user data passed to g_hash_table_remove().
+@Returns: %TRUE if the key/value pair should be removed from the #GHashTable.
+
+
+<!-- ##### MACRO g_hash_table_freeze ##### -->
+<para>
+This function is deprecated and will be removed in the next major
+ release of GLib. It does nothing.
+</para>
+
+@hash_table: a #GHashTable
+
+
+<!-- ##### MACRO g_hash_table_thaw ##### -->
+<para>
+This function is deprecated and will be removed in the next major
+ release of GLib. It does nothing.
+</para>
+
+@hash_table: a #GHashTable
+
+
+<!-- ##### FUNCTION g_hash_table_destroy ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+
+
+<!-- ##### FUNCTION g_hash_table_ref ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_unref ##### -->
+<para>
+
+</para>
+
+@hash_table: 
+
+
+<!-- ##### STRUCT GHashTableIter ##### -->
+<para>
+A GHashTableIter structure represents an iterator that can be
+used to iterate over the elements of a #GHashTable. GHashTableIter
+structures are typically allocated on the stack and then initialized
+with g_hash_table_iter_init().
+</para>
+
+
+<!-- ##### FUNCTION g_hash_table_iter_init ##### -->
+<para>
+
+</para>
+
+@iter: 
+@hash_table: 
+
+
+<!-- ##### FUNCTION g_hash_table_iter_next ##### -->
+<para>
+
+</para>
+
+@iter: 
+@key: 
+@value: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_iter_get_hash_table ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_hash_table_iter_remove ##### -->
+<para>
+
+</para>
+
+@iter: 
+
+
+<!-- ##### FUNCTION g_hash_table_iter_steal ##### -->
+<para>
+
+</para>
+
+@iter: 
+
+
+<!-- ##### FUNCTION g_direct_equal ##### -->
+<para>
+
+</para>
+
+@v1: 
+@v2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_direct_hash ##### -->
+<para>
+
+</para>
+
+@v: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_int_equal ##### -->
+<para>
+
+</para>
+
+@v1: 
+@v2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_int_hash ##### -->
+<para>
+
+</para>
+
+@v: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_str_equal ##### -->
+<para>
+</para>
+
+@v1: 
+@v2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_str_hash ##### -->
+<para>
+</para>
+
+@v: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/hooks.sgml b/docs/reference/glib/tmpl/hooks.sgml
new file mode 100644
index 0000000..f02dbf6
--- /dev/null
+++ b/docs/reference/glib/tmpl/hooks.sgml
@@ -0,0 +1,467 @@
+<!-- ##### SECTION Title ##### -->
+Hook Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+support for manipulating lists of hook functions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GHookList, #GHook and their related functions provide support for
+lists of hook functions. Functions can be added and removed from the lists,
+and the list of hook functions can be invoked.
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GHookList ##### -->
+<para>
+The <structname>GHookList</structname> struct represents a 
+list of hook functions.
+</para>
+
+@seq_id: the next free #GHook id
+@hook_size: the size of the #GHookList elements, in bytes
+@is_setup: 1 if the #GHookList has been initialized
+@hooks: the first #GHook element in the list
+@dummy3: unused
+@finalize_hook: the function to call to finalize a #GHook element. The
+default behaviour is to call the hooks <function>destroy</function> function
+@dummy: unused
+
+<!-- ##### USER_FUNCTION GHookFinalizeFunc ##### -->
+<para>
+Defines the type of function to be called when a hook in a 
+list of hooks gets finalized.
+</para>
+
+@hook_list: a #GHookList
+@hook: the hook in @hook_list that gets finalized
+
+
+<!-- ##### STRUCT GHook ##### -->
+<para>
+The <structname>GHook</structname> struct represents a single hook 
+function in a #GHookList.
+</para>
+
+@data: data which is passed to func when this hook is invoked
+@next: pointer to the next hook in the list
+@prev: pointer to the previous hook in the list
+@ref_count: the reference count of this hook
+@hook_id: the id of this hook, which is unique within its list
+@flags: flags which are set for this hook. See #GHookFlagMask for
+    predefined flags
+@func: the function to call when this hook is invoked. The possible 
+signatures for this function are #GHookFunc and #GHookCheckFunc
+@destroy: the default <function>finalize_hook</function> function of a 
+#GHookList calls this member of the hook that is being finalized
+
+<!-- ##### USER_FUNCTION GHookFunc ##### -->
+<para>
+Defines the type of a hook function that can be invoked
+by g_hook_list_invoke().
+</para>
+
+@data: the data field of the #GHook is passed to the hook function here
+
+
+<!-- ##### USER_FUNCTION GHookCheckFunc ##### -->
+<para>
+Defines the type of a hook function that can be invoked
+by g_hook_list_invoke_check().
+</para>
+
+@data: the data field of the #GHook is passed to the hook function here
+@Returns: %FALSE if the #GHook should be destroyed
+
+
+<!-- ##### FUNCTION g_hook_list_init ##### -->
+<para>
+Initializes a #GHookList.
+This must be called before the #GHookList is used.
+</para>
+
+@hook_list: a #GHookList
+@hook_size: the size of each element in the #GHookList, typically
+    <literal>sizeof (GHook)</literal>
+
+
+<!-- ##### FUNCTION g_hook_list_invoke ##### -->
+<para>
+Calls all of the #GHook functions in a #GHookList.
+</para>
+
+@hook_list: a #GHookList
+@may_recurse: %TRUE if functions which are already running (e.g. in another
+    thread) can be called. If set to %FALSE, these are skipped
+
+
+<!-- ##### FUNCTION g_hook_list_invoke_check ##### -->
+<para>
+Calls all of the #GHook functions in a #GHookList.
+Any function which returns %FALSE is removed from the #GHookList.
+</para>
+
+@hook_list: a #GHookList
+@may_recurse: %TRUE if functions which are already running (e.g. in another
+thread) can be called. If set to %FALSE, these are skipped
+
+
+<!-- ##### FUNCTION g_hook_list_marshal ##### -->
+<para>
+Calls a function on each valid #GHook. 
+</para>
+
+@hook_list: a #GHookList
+@may_recurse: %TRUE if hooks which are currently running (e.g. in another
+    thread) are considered valid. If set to %FALSE, these are skipped
+@marshaller: the function to call for each #GHook
+@marshal_data: data to pass to @marshaller
+
+
+<!-- ##### USER_FUNCTION GHookMarshaller ##### -->
+<para>
+Defines the type of function used by g_hook_list_marshal().
+</para>
+
+@hook: a #GHook
+@marshal_data: user data
+
+
+<!-- ##### FUNCTION g_hook_list_marshal_check ##### -->
+<para>
+Calls a function on each valid #GHook and destroys it if the 
+function returns %FALSE.
+</para>
+
+@hook_list: a #GHookList
+@may_recurse: %TRUE if hooks which are currently running (e.g. in another
+    thread) are considered valid. If set to %FALSE, these are skipped
+@marshaller: the function to call for each #GHook
+@marshal_data: data to pass to @marshaller
+
+
+<!-- ##### USER_FUNCTION GHookCheckMarshaller ##### -->
+<para>
+Defines the type of function used by g_hook_list_marshal_check().
+</para>
+
+@hook: a #GHook
+@marshal_data: user data
+@Returns: %FALSE if @hook should be destroyed
+
+
+<!-- ##### FUNCTION g_hook_list_clear ##### -->
+<para>
+Removes all the #GHook elements from a #GHookList.
+</para>
+
+@hook_list: a #GHookList
+
+
+<!-- ##### FUNCTION g_hook_alloc ##### -->
+<para>
+Allocates space for a #GHook and initializes it.
+</para>
+
+@hook_list: a #GHookList
+@Returns: a new #GHook
+
+
+<!-- ##### MACRO g_hook_append ##### -->
+<para>
+Appends a #GHook onto the end of a #GHookList.
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to add to the end of @hook_list
+
+
+<!-- ##### FUNCTION g_hook_prepend ##### -->
+<para>
+Prepends a #GHook on the start of a #GHookList.
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to add to the start of @hook_list
+
+
+<!-- ##### FUNCTION g_hook_insert_before ##### -->
+<para>
+Inserts a #GHook into a #GHookList, before a given #GHook.
+</para>
+
+@hook_list: a #GHookList
+@sibling: the #GHook to insert the new #GHook before
+@hook: the #GHook to insert
+
+
+<!-- ##### FUNCTION g_hook_insert_sorted ##### -->
+<para>
+Inserts a #GHook into a #GHookList, sorted by the given function.
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to insert
+@func: the comparison function used to sort the #GHook elements
+
+
+<!-- ##### USER_FUNCTION GHookCompareFunc ##### -->
+<para>
+Defines the type of function used to compare #GHook elements in
+g_hook_insert_sorted().
+</para>
+
+@new_hook: the #GHook being inserted
+@sibling: the #GHook to compare with @new_hook
+@Returns: a value &lt;= 0 if @new_hook should be before @sibling
+
+
+<!-- ##### FUNCTION g_hook_compare_ids ##### -->
+<para>
+Compares the ids of two #GHook elements, returning a negative value
+if the second id is greater than the first.
+</para>
+
+@new_hook: a #GHook
+@sibling: a #GHook to compare with @new_hook
+@Returns: a value &lt;= 0 if the id of @sibling is >= the id of @new_hook
+
+
+<!-- ##### FUNCTION g_hook_get ##### -->
+<para>
+Returns the #GHook with the given id, or %NULL if it is not found.
+</para>
+
+@hook_list: a #GHookList
+@hook_id: a hook id
+@Returns: the #GHook with the given id, or %NULL if it is not found
+
+
+<!-- ##### FUNCTION g_hook_find ##### -->
+<para>
+Finds a #GHook in a #GHookList using the given function to test for a match.
+</para>
+
+@hook_list: a #GHookList
+@need_valids: %TRUE if #GHook elements which have been destroyed should be
+    skipped
+@func: the function to call for each #GHook, which should return %TRUE when
+    the #GHook has been found
+@data: the data to pass to @func
+@Returns: the found #GHook or %NULL if no matching #GHook is found
+
+
+<!-- ##### USER_FUNCTION GHookFindFunc ##### -->
+<para>
+Defines the type of the function passed to g_hook_find().
+</para>
+
+@hook: a #GHook
+@data: user data passed to g_hook_find_func()
+@Returns: %TRUE if the required #GHook has been found
+
+
+<!-- ##### FUNCTION g_hook_find_data ##### -->
+<para>
+Finds a #GHook in a #GHookList with the given data.
+</para>
+
+@hook_list: a #GHookList
+@need_valids: %TRUE if #GHook elements which have been destroyed should be
+    skipped
+@data: the data to find
+@Returns: the #GHook with the given @data or %NULL if no matching
+    #GHook is found
+
+
+<!-- ##### FUNCTION g_hook_find_func ##### -->
+<para>
+Finds a #GHook in a #GHookList with the given function.
+</para>
+
+@hook_list: a #GHookList
+@need_valids: %TRUE if #GHook elements which have been destroyed should be
+    skipped
+@func: the function to find
+@Returns: the #GHook with the given @func or %NULL if no matching
+    #GHook is found
+
+
+<!-- ##### FUNCTION g_hook_find_func_data ##### -->
+<para>
+Finds a #GHook in a #GHookList with the given function and data.
+</para>
+
+@hook_list: a #GHookList
+@need_valids: %TRUE if #GHook elements which have been destroyed should be
+    skipped
+@func: the function to find
+@data: the data to find
+@Returns: the #GHook with the given @func and @data or %NULL if no matching
+    #GHook is found
+
+
+<!-- ##### FUNCTION g_hook_first_valid ##### -->
+<para>
+Returns the first #GHook in a #GHookList which has not been destroyed.
+The reference count for the #GHook is incremented, so you must call
+g_hook_unref() to restore it when no longer needed. (Or call
+g_hook_next_valid() if you are stepping through the #GHookList.)
+</para>
+
+@hook_list: a #GHookList
+@may_be_in_call: %TRUE if hooks which are currently running (e.g. in another
+    thread) are considered valid. If set to %FALSE, these are skipped
+@Returns: the first valid #GHook, or %NULL if none are valid
+
+
+<!-- ##### FUNCTION g_hook_next_valid ##### -->
+<para>
+Returns the next #GHook in a #GHookList which has not been destroyed.
+The reference count for the #GHook is incremented, so you must call
+g_hook_unref() to restore it when no longer needed. (Or continue to call
+g_hook_next_valid() until %NULL is returned.)
+
+</para>
+
+@hook_list: a #GHookList
+@hook: the current #GHook
+@may_be_in_call: %TRUE if hooks which are currently running (e.g. in another
+    thread) are considered valid. If set to %FALSE, these are skipped
+@Returns: the next valid #GHook, or %NULL if none are valid
+
+
+<!-- ##### ENUM GHookFlagMask ##### -->
+<para>
+Flags used internally in the #GHook implementation.
+</para>
+
+@G_HOOK_FLAG_ACTIVE: set if the hook has not been destroyed
+@G_HOOK_FLAG_IN_CALL: set if the hook is currently being run
+@G_HOOK_FLAG_MASK: A mask covering all bits reserved for
+  hook flags; see #G_HOOK_FLAGS_USER_SHIFT
+
+<!-- ##### MACRO G_HOOK_FLAGS ##### -->
+<para>
+Returns the flags of a hook.
+</para>
+
+@hook: a #GHook
+
+
+<!-- ##### MACRO G_HOOK_FLAG_USER_SHIFT ##### -->
+<para>
+The position of the first bit which is not reserved for internal
+use be the #GHook implementation, i.e. 
+<literal>1 &lt;&lt; G_HOOK_FLAG_USER_SHIFT</literal> is the first bit
+which can be used for application-defined flags.
+</para>
+
+
+
+<!-- ##### MACRO G_HOOK ##### -->
+<para>
+Casts a pointer to a <literal>GHook*</literal>.
+</para>
+
+@hook: a pointer
+
+
+<!-- ##### MACRO G_HOOK_IS_VALID ##### -->
+<para>
+Returns %TRUE if the #GHook is valid, i.e. it is in a #GHookList, it is active
+and it has not been destroyed.
+</para>
+
+@hook: a #GHook
+@Returns: %TRUE if the #GHook is valid
+
+
+<!-- ##### MACRO G_HOOK_ACTIVE ##### -->
+<para>
+Returns %TRUE if the #GHook is active, which is normally %TRUE until the #GHook
+is destroyed.
+</para>
+
+@hook: a #GHook
+@Returns: %TRUE if the #GHook is active
+
+
+<!-- ##### MACRO G_HOOK_IN_CALL ##### -->
+<para>
+Returns %TRUE if the #GHook function is currently executing.
+</para>
+
+@hook: a #GHook
+@Returns: %TRUE if the #GHook function is currently executing
+
+
+<!-- ##### MACRO G_HOOK_IS_UNLINKED ##### -->
+<para>
+Returns %TRUE if the #GHook is not in a #GHookList.
+
+</para>
+
+@hook: a #GHook
+@Returns: %TRUE if the #GHook is not in a #GHookList
+
+
+<!-- ##### FUNCTION g_hook_ref ##### -->
+<para>
+Increments the reference count for a #GHook.
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to increment the reference count of
+@Returns: the @hook that was passed in (since 2.6)
+
+
+<!-- ##### FUNCTION g_hook_unref ##### -->
+<para>
+Decrements the reference count of a #GHook.
+If the reference count falls to 0, the #GHook is removed from the #GHookList
+and g_hook_free() is called to free it.
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to unref
+
+
+<!-- ##### FUNCTION g_hook_free ##### -->
+<para>
+Calls the #GHookList @finalize_hook function if it exists, and frees the memory
+allocated for the #GHook.
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to free
+
+
+<!-- ##### FUNCTION g_hook_destroy ##### -->
+<para>
+Destroys a #GHook, given its ID.
+</para>
+
+@hook_list: a #GHookList
+@hook_id: a hook ID
+@Returns: %TRUE if the #GHook was found in the #GHookList and destroyed
+
+
+<!-- ##### FUNCTION g_hook_destroy_link ##### -->
+<para>
+Removes one #GHook from a #GHookList, marking it inactive and calling
+g_hook_unref() on it. 
+</para>
+
+@hook_list: a #GHookList
+@hook: the #GHook to remove
+
+
diff --git a/docs/reference/glib/tmpl/i18n.sgml b/docs/reference/glib/tmpl/i18n.sgml
new file mode 100644
index 0000000..8afc7ae
--- /dev/null
+++ b/docs/reference/glib/tmpl/i18n.sgml
@@ -0,0 +1,214 @@
+<!-- ##### SECTION Title ##### -->
+Internationalization
+
+<!-- ##### SECTION Short_Description ##### -->
+gettext support macros
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+GLib doesn't force any particular localization method upon its users.
+But since GLib itself is localized using the gettext() mechanism, it seems
+natural to offer the de-facto standard gettext() support macros in an 
+easy-to-use form.
+</para>
+<para>
+In order to use these macros in an application, you must include 
+<filename>glib/gi18n.h</filename>. For use in a library, must include
+<filename>glib/gi18n-lib.h</filename> <emphasis>after</emphasis> defining
+the GETTEXT_PACKAGE macro suitably for your library:
+<informalexample><programlisting>
+&num;define GETTEXT_PACKAGE "gtk20"
+&num;include &lt;glib/gi18n-lib.h&gt;
+</programlisting></informalexample>
+The gettext manual covers details of how to set up message extraction
+with xgettext.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+The gettext manual.
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO Q_ ##### -->
+<para>
+Like _(), but handles context in message ids. This has the advantage that 
+the string can be adorned with a prefix to guarantee uniqueness and provide 
+context to the translator. 
+</para>
+<para>
+One use case given in the gettext manual is GUI translation, where one could 
+e.g. disambiguate two "Open" menu entries as "File|Open" and "Printer|Open". 
+Another use case is the string "Russian" which may have to be translated
+differently depending on whether it's the name of a character set or a 
+language. This could be solved by using "charset|Russian" and 
+"language|Russian".
+</para>
+<para>
+See the C_() macro for a different way to mark up translatable strings
+with context.
+</para>
+<note><para>
+If you are using the Q_() macro, you need to make sure that you 
+pass <option>--keyword=Q_</option> to xgettext when extracting messages.
+If you are using GNU gettext >= 0.15, you can also use
+<option>--keyword=Q_:1g</option> to let xgettext split the context
+string off into a msgctxt line in the po file.
+</para></note>
+
+@String: the string to be translated, with a '|'-separated prefix which 
+  must not be translated
+@Returns: the translated message
+@Since: 2.4
+
+
+<!-- ##### MACRO C_ ##### -->
+<para>
+Uses gettext to get the translation for @msgid. @msgctxt is 
+used as a context. This is mainly useful for short strings which 
+may need different translations, depending on the context in which 
+they are used.
+<informalexample><programlisting>
+label1 = C_("Navigation", "Back");
+label2 = C_("Body part", "Back");
+</programlisting></informalexample> 
+</para>
+
+<note><para>
+If you are using the C_() macro, you need to make sure that you 
+pass <option>--keyword=C_:1c,2</option> to xgettext when extracting 
+messages. Note that this only works with GNU gettext >= 0.15. 
+</para></note>
+
+@Context: a message context, must be a string literal
+@String: a message id, must be a string literal
+@Returns: the translated message
+@Since: 2.16
+
+
+<!-- ##### MACRO N_ ##### -->
+<para>
+Only marks a string for translation.
+This is useful in situations where the translated strings can't
+be directly used, e.g. in string array initializers. 
+To get the translated string, call gettext() at runtime.
+</para>
+<informalexample><programlisting>
+     {
+       static const char *messages[] = {
+         N_("some very meaningful message"),
+         N_("and another one")
+       };
+       const char *string;
+       ...
+       string
+         = index &gt; 1 ? _("a default message") : gettext (messages[index]);
+<!-- -->     
+       fputs (string);
+       ...
+     }
+</programlisting></informalexample>
+
+@String: the string to be translated
+@Since: 2.4
+
+
+<!-- ##### MACRO NC_ ##### -->
+<para>
+Only marks a string for translation, with context.
+This is useful in situations where the translated strings can't
+be directly used, e.g. in string array initializers. 
+To get the translated string, you should call g_dpgettext2() at runtime.
+</para>
+|[
+     {
+       static const char *messages[] = {
+         NC_("some context", "some very meaningful message"),
+         NC_("some context", "and another one")
+       };
+       const char *string;
+       ...
+       string
+         = index &gt; 1 ? g_dpgettext2 (NULL, "some context", "a default message") : g_dpgettext2 (NULL, "some context", messages[index]);
+<!-- -->     
+       fputs (string);
+       ...
+     }
+]|
+
+<note><para>
+If you are using the NC_() macro, you need to make sure that you
+pass <option>--keyword=NC_:1c,2</option> to xgettext when extracting
+messages. Note that this only works with GNU gettext >= 0.15.
+Intltool has support for the NC_() macro since version 0.40.1.
+</para></note>
+
+@Context: a message context, must be a string literal
+@String: a message id, must be a string literal
+@Since: 2.18
+
+
+<!-- ##### FUNCTION g_dgettext ##### -->
+<para>
+
+</para>
+
+@domain: 
+@msgid: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_dngettext ##### -->
+<para>
+
+</para>
+
+@domain: 
+@msgid: 
+@msgid_plural: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_dpgettext ##### -->
+<para>
+
+</para>
+
+@domain: 
+@msgctxtid: 
+@msgidoffset: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_dpgettext2 ##### -->
+<para>
+
+</para>
+
+@domain: 
+@context: 
+@msgid: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strip_context ##### -->
+<para>
+
+</para>
+
+@msgid: 
+@msgval: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_language_names ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/iochannels.sgml b/docs/reference/glib/tmpl/iochannels.sgml
new file mode 100644
index 0000000..4d53802
--- /dev/null
+++ b/docs/reference/glib/tmpl/iochannels.sgml
@@ -0,0 +1,666 @@
+<!-- ##### SECTION Title ##### -->
+IO Channels
+
+<!-- ##### SECTION Short_Description ##### -->
+portable support for using files, pipes and sockets
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GIOChannel data type aims to provide a portable method for using file
+descriptors, pipes, and sockets, and integrating them into the
+<link linkend="glib-The-Main-Event-Loop">main event loop</link>.
+Currently full support is available on UNIX platforms, support for
+Windows is only partially complete.
+</para>
+<para>
+To create a new #GIOChannel on UNIX systems use g_io_channel_unix_new().
+This works for plain file descriptors, pipes and sockets.
+Alternatively, a channel can be created for a file in a system independent
+manner using g_io_channel_new_file().
+</para>
+<para>
+Once a #GIOChannel has been created, it can be used in a generic manner
+with the functions g_io_channel_read_chars(), g_io_channel_write_chars(),
+g_io_channel_seek_position(), and g_io_channel_shutdown().
+</para>
+<para>
+To add a #GIOChannel to the 
+<link linkend="glib-The-Main-Event-Loop">main event loop</link>
+use g_io_add_watch() or g_io_add_watch_full(). Here you specify which events
+you are interested in on the #GIOChannel, and provide a function to be
+called whenever these events occur.
+</para>
+<para>
+#GIOChannel instances are created with an initial reference count of 1.
+g_io_channel_ref() and g_io_channel_unref() can be used to increment or
+decrement the reference count respectively. When the reference count falls
+to 0, the #GIOChannel is freed. (Though it isn't closed automatically,
+unless it was created using g_io_channel_new_from_file().)
+Using g_io_add_watch() or g_io_add_watch_full() increments a channel's
+reference count.
+</para>
+<para>
+The new functions g_io_channel_read_chars(), g_io_channel_read_line(),
+g_io_channel_read_line_string(), g_io_channel_read_to_end(),
+g_io_channel_write_chars(), g_io_channel_seek_position(),
+and g_io_channel_flush() should not be mixed with the
+deprecated functions g_io_channel_read(), g_io_channel_write(),
+and g_io_channel_seek() on the same channel.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+
+<varlistentry>
+<term>gtk_input_add_full(), gtk_input_remove(), gdk_input_add(),
+gdk_input_add_full(), gdk_input_remove()</term>
+<listitem><para>
+Convenience functions for creating #GIOChannel instances and adding them to the
+<link linkend="glib-The-Main-Event-Loop">main event loop</link>.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GIOChannel ##### -->
+<para>
+A data structure representing an IO Channel. The fields should be considered
+private and should only be accessed with the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_io_channel_unix_new ##### -->
+<para>
+Creates a new #GIOChannel given a file descriptor.
+On UNIX systems this works for plain files, pipes, and sockets.
+</para>
+<para>
+The returned #GIOChannel has a reference count of 1.
+</para>
+<para>
+The default encoding for #GIOChannel is UTF-8. If your application
+is reading output from a command using via pipe, you may need to
+set the encoding to the encoding of the current locale (see
+g_get_charset()) with the g_io_channel_set_encoding() function.
+</para>
+<para>
+If you want to read raw binary data without interpretation, then
+call the g_io_channel_set_encoding() function with %NULL for the
+encoding argument.
+</para>
+<para>
+This function is available in GLib on Windows, too, but you should
+avoid using it on Windows. The domain of file descriptors and sockets
+overlap. There is no way for GLib to know which one you mean in case
+the argument you pass to this function happens to be both a valid file
+descriptor and socket. If that happens a warning is issued, and GLib
+assumes that it is the file descriptor you mean.
+</para>
+
+@fd: a file descriptor.
+@Returns: a new #GIOChannel.
+
+
+<!-- ##### FUNCTION g_io_channel_unix_get_fd ##### -->
+<para>
+Returns the file descriptor of the #GIOChannel.
+</para>
+<para>
+On Windows this function returns the file descriptor or socket of the #GIOChannel.
+</para>
+
+@channel: a #GIOChannel, created with g_io_channel_unix_new().
+@Returns: the file descriptor of the #GIOChannel.
+
+
+<!-- ##### FUNCTION g_io_channel_win32_new_fd ##### -->
+<para>
+Creates a new #GIOChannel given a file descriptor on Windows. 
+This works for file descriptors from the C runtime.
+</para>
+<para>
+This function works for file descriptors as returned by the open(),
+creat(), pipe() and fileno() calls in the Microsoft C runtime. In
+order to meaningfully use this function your code should use the same
+C runtime as GLib uses, which is msvcrt.dll. Note that in current
+Microsoft compilers it is near impossible to convince it to build code
+that would use msvcrt.dll. The last Microsoft compiler version that
+supported using msvcrt.dll as the C runtime was version 6. The GNU
+compiler and toolchain for Windows, also known as Mingw, fully
+supports msvcrt.dll.
+</para>
+<para>
+If you have created a #GIOChannel for a file descriptor and started
+watching (polling) it, you shouldn't call read() on the file
+descriptor. This is because adding polling for a file descriptor is
+implemented in GLib on Windows by starting a thread that sits blocked
+in a read() from the file descriptor most of the time. All reads from
+the file descriptor should be done by this internal GLib thread. Your
+code should call only g_io_channel_read().
+</para>
+<para>
+This function is available only in GLib on Windows.
+</para>
+
+@fd: a C library file descriptor.
+@Returns: a new #GIOChannel.
+
+
+<!-- ##### FUNCTION g_io_channel_win32_new_socket ##### -->
+<para>
+Creates a new #GIOChannel given a socket on Windows.
+</para>
+<para>
+This function works for sockets created by Winsock. 
+It's available only in GLib on Windows.
+</para>
+<para>
+Polling a #GSource created to watch a channel for a socket 
+puts the socket in non-blocking mode. This is a side-effect 
+of the implementation and unavoidable.
+</para>
+
+@socket: a Winsock socket
+@Returns: a new #GIOChannel
+
+
+<!-- ##### FUNCTION g_io_channel_win32_new_messages ##### -->
+<para>
+Creates a new #GIOChannel given a window handle on Windows.
+</para>
+<para>
+This function creates a #GIOChannel that can be used to poll for
+Windows messages for the window in question.
+</para>
+
+@hwnd: a window handle.
+@Returns: a new #GIOChannel.
+
+
+<!-- ##### FUNCTION g_io_channel_init ##### -->
+<para>
+
+</para>
+
+@channel: 
+
+
+<!-- ##### FUNCTION g_io_channel_new_file ##### -->
+<para>
+</para>
+
+@filename: 
+@mode: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_read_chars ##### -->
+<para>
+
+</para>
+
+@channel: 
+@buf: 
+@count: 
+@bytes_read: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_read_unichar ##### -->
+<para>
+
+</para>
+
+@channel: 
+@thechar: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_read_line ##### -->
+<para>
+
+</para>
+
+@channel: 
+@str_return: 
+@length: 
+@terminator_pos: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_read_line_string ##### -->
+<para>
+
+</para>
+
+@channel: 
+@buffer: 
+@terminator_pos: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_read_to_end ##### -->
+<para>
+
+</para>
+
+@channel: 
+@str_return: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_write_chars ##### -->
+<para>
+
+</para>
+
+@channel: 
+@buf: 
+@count: 
+@bytes_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_write_unichar ##### -->
+<para>
+
+</para>
+
+@channel: 
+@thechar: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_flush ##### -->
+<para>
+
+</para>
+
+@channel: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_seek_position ##### -->
+<para>
+
+</para>
+
+@channel: 
+@offset: 
+@type: 
+@error: 
+@Returns: 
+
+
+<!-- ##### ENUM GSeekType ##### -->
+<para>
+An enumeration specifying the base position for a g_io_channel_seek_position()
+operation.
+</para>
+
+@G_SEEK_CUR: the current position in the file.
+@G_SEEK_SET: the start of the file.
+@G_SEEK_END: the end of the file.
+
+<!-- ##### FUNCTION g_io_channel_shutdown ##### -->
+<para>
+
+</para>
+
+@channel: 
+@flush: 
+@err: 
+@Returns: 
+
+
+<!-- ##### ENUM GIOStatus ##### -->
+<para>
+Stati returned by most of the #GIOFuncs functions. 
+</para>
+
+@G_IO_STATUS_ERROR: An error occurred.
+@G_IO_STATUS_NORMAL: Success.
+@G_IO_STATUS_EOF: End of file.
+@G_IO_STATUS_AGAIN: Resource temporarily unavailable.
+
+<!-- ##### ENUM GIOChannelError ##### -->
+<para>
+Error codes returned by #GIOChannel operations.
+</para>
+
+@G_IO_CHANNEL_ERROR_FBIG: File too large.
+@G_IO_CHANNEL_ERROR_INVAL: Invalid argument.
+@G_IO_CHANNEL_ERROR_IO: IO error.
+@G_IO_CHANNEL_ERROR_ISDIR: File is a directory.
+@G_IO_CHANNEL_ERROR_NOSPC: No space left on device.
+@G_IO_CHANNEL_ERROR_NXIO: No such device or address.
+@G_IO_CHANNEL_ERROR_OVERFLOW: Value too large for defined datatype.
+@G_IO_CHANNEL_ERROR_PIPE: Broken pipe.
+@G_IO_CHANNEL_ERROR_FAILED: Some other error.
+
+<!-- ##### MACRO G_IO_CHANNEL_ERROR ##### -->
+<para>
+Error domain for #GIOChannel operations. Errors in this domain will
+be from the #GIOChannelError enumeration. See #GError for information on
+error domains.
+</para>
+
+
+
+<!-- ##### FUNCTION g_io_channel_error_from_errno ##### -->
+<para>
+
+</para>
+
+@en: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_ref ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_unref ##### -->
+<para>
+
+</para>
+
+@channel: 
+
+
+<!-- ##### FUNCTION g_io_create_watch ##### -->
+<para>
+
+</para>
+
+@channel: 
+@condition: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_add_watch ##### -->
+<para>
+
+</para>
+
+@channel: 
+@condition: 
+@func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_add_watch_full ##### -->
+<para>
+
+</para>
+
+@channel: 
+@priority: 
+@condition: 
+@func: 
+@user_data: 
+@notify: 
+@Returns: 
+
+
+<!-- ##### ENUM GIOCondition ##### -->
+<para>
+A bitwise combination representing a condition to watch for on 
+an event source.
+</para>
+
+@G_IO_IN: There is data to read.
+@G_IO_OUT: Data can be written (without blocking).
+@G_IO_PRI: There is urgent data to read.
+@G_IO_ERR: Error condition.
+@G_IO_HUP: Hung up (the connection has been broken, usually for pipes 
+           and sockets).
+@G_IO_NVAL: Invalid request. The file descriptor is not open.
+
+<!-- ##### USER_FUNCTION GIOFunc ##### -->
+<para>
+Specifies the type of function passed to g_io_add_watch() or
+g_io_add_watch_full(), which is called when the requested 
+condition on a #GIOChannel is satisfied.
+</para>
+
+@source: the #GIOChannel event source
+@condition: the condition which has been satisfied
+@data: user data set in g_io_add_watch() or g_io_add_watch_full()
+@Returns: the function should return %FALSE if the event source 
+  should be removed
+
+
+<!-- ##### STRUCT GIOFuncs ##### -->
+<para>
+A table of functions used to handle different types of #GIOChannel 
+in a generic way.
+</para>
+
+@io_read: 
+@io_write: 
+@io_seek: 
+@io_close: 
+@io_create_watch: 
+@io_free: 
+@io_set_flags: 
+@io_get_flags: 
+
+<!-- ##### FUNCTION g_io_channel_get_buffer_size ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_set_buffer_size ##### -->
+<para>
+
+</para>
+
+@channel: 
+@size: 
+
+
+<!-- ##### FUNCTION g_io_channel_get_buffer_condition ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_get_flags ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_set_flags ##### -->
+<para>
+
+</para>
+
+@channel: 
+@flags: 
+@error: 
+@Returns: 
+
+
+<!-- ##### ENUM GIOFlags ##### -->
+<para>
+Specifies properties of a #GIOChannel. Some of the flags can only
+be read with g_io_channel_get_flags(), but not changed with
+g_io_channel_set_flags(). 
+</para>
+
+@G_IO_FLAG_APPEND: turns on append mode, corresponds to %O_APPEND 
+  (see the documentation of the UNIX open() syscall).
+@G_IO_FLAG_NONBLOCK: turns on nonblocking mode, corresponds to 
+  %O_NONBLOCK/%O_NDELAY (see the documentation of the UNIX open() 
+  syscall).
+@G_IO_FLAG_IS_READABLE: indicates that the io channel is readable. 
+  This flag can not be changed.
+@G_IO_FLAG_IS_WRITEABLE: indicates that the io channel is writable. 
+  This flag can not be changed.
+@G_IO_FLAG_IS_SEEKABLE: indicates that the io channel is seekable, 
+  i.e. that g_io_channel_seek_position() can be used on it. 
+  This flag can not be changed.
+@G_IO_FLAG_MASK: 
+@G_IO_FLAG_GET_MASK: 
+@G_IO_FLAG_SET_MASK: 
+
+<!-- ##### FUNCTION g_io_channel_get_line_term ##### -->
+<para>
+
+</para>
+
+@channel: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_set_line_term ##### -->
+<para>
+
+</para>
+
+@channel: 
+@line_term: 
+@length: 
+
+
+<!-- ##### FUNCTION g_io_channel_get_buffered ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_set_buffered ##### -->
+<para>
+
+</para>
+
+@channel: 
+@buffered: 
+
+
+<!-- ##### FUNCTION g_io_channel_get_encoding ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_set_encoding ##### -->
+<para>
+
+</para>
+
+@channel: 
+@encoding: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_get_close_on_unref ##### -->
+<para>
+
+</para>
+
+@channel: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_set_close_on_unref ##### -->
+<para>
+
+</para>
+
+@channel: 
+@do_close: 
+
+
+<!-- ##### FUNCTION g_io_channel_read ##### -->
+<para>
+</para>
+
+@channel: 
+@buf: 
+@count: 
+@bytes_read: 
+@Returns: 
+
+
+<!-- ##### ENUM GIOError ##### -->
+<para>
+#GIOError is only used by the deprecated functions g_io_channel_read(),
+g_io_channel_write(), and g_io_channel_seek().
+</para>
+
+@G_IO_ERROR_NONE: no error
+@G_IO_ERROR_AGAIN: an EAGAIN error occurred
+@G_IO_ERROR_INVAL: an EINVAL error occurred
+@G_IO_ERROR_UNKNOWN: another error occurred
+
+<!-- ##### FUNCTION g_io_channel_write ##### -->
+<para>
+</para>
+
+@channel: 
+@buf: 
+@count: 
+@bytes_written: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_seek ##### -->
+<para>
+</para>
+
+@channel: 
+@offset: 
+@type.
+@type: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_io_channel_close ##### -->
+<para>
+</para>
+
+@channel: 
+
+
diff --git a/docs/reference/glib/tmpl/keyfile.sgml b/docs/reference/glib/tmpl/keyfile.sgml
new file mode 100644
index 0000000..18ce443
--- /dev/null
+++ b/docs/reference/glib/tmpl/keyfile.sgml
@@ -0,0 +1,889 @@
+<!-- ##### SECTION Title ##### -->
+Key-value file parser
+
+<!-- ##### SECTION Short_Description ##### -->
+parses <filename>.ini</filename>-like config files
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#GKeyFile lets you parse, edit or create files containing groups of
+key-value pairs, which we call <firstterm>key files</firstterm> for 
+lack of a better name. Several freedesktop.org specifications use
+key files now, e.g the 
+<ulink url="http://freedesktop.org/Standards/desktop-entry-spec">Desktop
+Entry Specification</ulink> and the
+<ulink url="http://freedesktop.org/Standards/icon-theme-spec">Icon
+Theme Specification</ulink>. 
+</para>
+
+<para>
+The syntax of key files is described in detail in the 
+<ulink url="http://freedesktop.org/Standards/desktop-entry-spec">Desktop
+Entry Specification</ulink>, here is a quick summary: Key files
+consists of groups of key-value pairs, interspersed with comments.
+</para>
+
+<informalexample><programlisting>
+# this is just an example
+# there can be comments before the first group
+
+[First Group]
+
+Name=Key File Example\tthis value shows\nescaping
+
+# localized strings are stored in multiple key-value pairs
+Welcome=Hello
+Welcome[de]=Hallo
+Welcome[fr_FR]=Bonjour
+Welcome[it]=Ciao
+Welcome[be@latin]=Hello
+
+[Another Group]
+
+Numbers=2;20;-200;0
+
+Booleans=true;false;true;true
+
+</programlisting></informalexample>
+
+<para>
+Lines beginning with a '#' and blank lines are considered comments.
+</para>
+
+<para>
+Groups are started by a header line containing the group name enclosed
+in '[' and ']', and ended implicitly by the start of the next group or
+the end of the file. Each key-value pair must be contained in a group.
+</para>
+
+<para>
+Key-value pairs generally have the form <literal>key=value</literal>, 
+with the exception of localized strings, which have the form 
+<literal>key[locale]=value</literal>, with a locale identifier of the form
+<literal>lang_COUNTRY@MODIFIER</literal> where <literal>COUNTRY</literal> and 
+<literal>MODIFIER</literal> are optional. Space before and after the 
+'=' character are ignored. Newline, tab, carriage return and backslash 
+characters in value are escaped as \n, \t, \r, and \\, respectively. 
+To preserve leading spaces in values, these can also be escaped as \s.
+</para>
+
+<para>
+Key files can store strings (possibly with localized variants), integers,
+booleans and lists of these. Lists are separated by a separator character,
+typically ';' or ','. To use the list separator character in a value in
+a list, it has to be escaped by prefixing it with a backslash.
+</para>
+
+<para>
+This syntax is obviously inspired by the <filename>.ini</filename> 
+files commonly met on Windows, but there are some important differences:
+<itemizedlist>
+<listitem><para>
+<filename>.ini</filename> files use the ';' character to begin comments,
+ key files use the '#' character.
+</para></listitem>
+<listitem><para>
+Key files do not allow for ungrouped keys meaning only comments can precede the first group.
+</para></listitem>
+<listitem><para>
+Key files are always encoded in UTF-8.
+</para></listitem>
+<listitem><para>
+Key and Group names are case-sensitive, for example a group called
+<literal>[GROUP]</literal> is a different group from <literal>[group]</literal>.
+</para></listitem>
+<listitem><para>
+<filename>.ini</filename> files don't have a strongly typed boolean entry type, they only
+have <literal>GetProfileInt</literal>. In <structname>GKeyFile</structname> only
+<literal>true</literal> and <literal>false</literal> (in lower case) are allowed.
+</para></listitem>
+</itemizedlist>
+</para>
+
+<para>
+Note that in contrast to the
+<ulink url="http://freedesktop.org/Standards/desktop-entry-spec">Desktop
+Entry Specification</ulink>, groups in key files may contain the same
+key multiple times; the last entry wins. Key files may also contain
+multiple groups with the same name; they are merged together.
+Another difference is that keys and group names in key files are not
+restricted to ASCII characters.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GKeyFile ##### -->
+<para>
+The <structname>GKeyFile</structname> struct contains only private fields
+and should not be used directly.
+</para>
+
+
+<!-- ##### MACRO G_KEY_FILE_ERROR ##### -->
+<para>
+Error domain for key file parsing. Errors in this domain will
+be from the #GKeyFileError enumeration. See #GError for information on 
+error domains.
+</para>
+
+
+
+<!-- ##### ENUM GKeyFileError ##### -->
+<para>
+Error codes returned by key file parsing.
+</para>
+
+@G_KEY_FILE_ERROR_UNKNOWN_ENCODING: the text being parsed was in an unknown encoding
+@G_KEY_FILE_ERROR_PARSE: document was ill-formed
+@G_KEY_FILE_ERROR_NOT_FOUND: the file was not found
+@G_KEY_FILE_ERROR_KEY_NOT_FOUND: a requested key was not found
+@G_KEY_FILE_ERROR_GROUP_NOT_FOUND: a requested group was not found
+@G_KEY_FILE_ERROR_INVALID_VALUE: a value could not be parsed
+
+<!-- ##### ENUM GKeyFileFlags ##### -->
+<para>
+Flags which influence the parsing.
+</para>
+
+@G_KEY_FILE_NONE: No flags, default behaviour
+@G_KEY_FILE_KEEP_COMMENTS: Use this flag if you plan to write the (possibly modified)
+  contents of the key file back to a file; otherwise all comments will be lost when
+  the key file is written back.
+@G_KEY_FILE_KEEP_TRANSLATIONS: Use this flag if you plan to write the (possibly modified)
+  contents of the key file back to a file; otherwise only the translations for the current
+  language will be written back.
+
+<!-- ##### FUNCTION g_key_file_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_free ##### -->
+<para>
+
+</para>
+
+@key_file: 
+
+
+<!-- ##### FUNCTION g_key_file_set_list_separator ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@separator: 
+
+
+<!-- ##### FUNCTION g_key_file_load_from_file ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@file: 
+@flags: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_load_from_data ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@data: 
+@length: 
+@flags: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_load_from_data_dirs ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@file: 
+@full_path: 
+@flags: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_load_from_dirs ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@file: 
+@search_dirs: 
+@full_path: 
+@flags: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_to_data ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_start_group ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_groups ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_keys ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_has_group ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_has_key ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_value ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_string ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_locale_string ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@locale: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_boolean ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_integer ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_double ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_string_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_locale_string_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@locale: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_boolean_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_integer_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_double_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@length: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_get_comment ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_set_value ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_key_file_set_string ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@string: 
+
+
+<!-- ##### FUNCTION g_key_file_set_locale_string ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@locale: 
+@string: 
+
+
+<!-- ##### FUNCTION g_key_file_set_boolean ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_key_file_set_integer ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_key_file_set_double ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_key_file_set_string_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+
+
+<!-- ##### FUNCTION g_key_file_set_locale_string_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@locale: 
+@list: 
+@length: 
+
+
+<!-- ##### FUNCTION g_key_file_set_boolean_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+
+
+<!-- ##### FUNCTION g_key_file_set_integer_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+
+
+<!-- ##### FUNCTION g_key_file_set_double_list ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@list: 
+@length: 
+
+
+<!-- ##### FUNCTION g_key_file_set_comment ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@comment: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_remove_group ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_remove_key ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_key_file_remove_comment ##### -->
+<para>
+
+</para>
+
+@key_file: 
+@group_name: 
+@key: 
+@error: 
+@Returns: 
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_GROUP ##### -->
+<para>
+The name of the main group of a desktop entry file, as defined in the
+<ulink url="http://freedesktop.org/Standards/desktop-entry-spec">Desktop
+Entry Specification</ulink>. Consult the specification for more
+details about the meanings of the keys below.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_TYPE ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a string giving the type of the desktop entry. Usually
+<link linkend="G-KEY-FILE-DESKTOP-TYPE-APPLICATION:CAPS"><literal>G_KEY_FILE_DESKTOP_TYPE_APPLICATION</literal></link>,
+<link linkend="G-KEY-FILE-DESKTOP-TYPE-LINK:CAPS"><literal>G_KEY_FILE_DESKTOP_TYPE_LINK</literal></link>, or
+<link linkend="G-KEY-FILE-DESKTOP-TYPE-DIRECTORY:CAPS"><literal>G_KEY_FILE_DESKTOP_TYPE_DIRECTORY</literal></link>.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_VERSION ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a string giving the version of the Desktop
+Entry Specification used for the desktop entry file.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_NAME ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a localized string giving the specific name of the
+desktop entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a localized string giving the generic name of the
+desktop entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a boolean stating whether the desktop entry should be
+shown in menus.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_COMMENT ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a localized string giving the tooltip for the desktop
+entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_ICON ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a localized string giving the name of the icon to be
+displayed for the desktop entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_HIDDEN ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a boolean stating whether the desktop entry has been
+deleted by the user.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a list of strings identifying the environments that
+should display the desktop entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a list of strings identifying the environments that
+should not display the desktop entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_TRY_EXEC ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a string giving the file name of a binary on disk
+used to determine if the program is actually installed. It is only
+valid for desktop entries with the <literal>Application</literal>
+type.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_EXEC ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a string giving the command line to execute. It is only
+valid for desktop entries with the <literal>Application</literal>
+type.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_PATH ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a string containing the working directory to run the
+program in. It is only valid for desktop entries with the
+<literal>Application</literal> type.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_TERMINAL ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a boolean stating whether the program should be
+run in a terminal window. It is only valid for desktop entries with
+the <literal>Application</literal> type.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_MIME_TYPE ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a list of strings giving the MIME types supported
+by this desktop entry.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_CATEGORIES ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a list of strings giving the categories in which the
+desktop entry should be shown in a menu.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a boolean stating whether the application supports
+the <ulink
+url="http://www.freedesktop.org/Standards/startup-notification-spec">Startup
+Notification Protocol Specification</ulink>.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is string identifying the WM class or name hint of a
+window that the application will create, which can be used to emulate
+Startup Notification with older applications.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_KEY_URL ##### -->
+<para>
+A key under <link
+linkend="G-KEY-FILE-DESKTOP-GROUP:CAPS"><literal>G_KEY_FILE_DESKTOP_GROUP</literal></link>
+whose value is a string giving the URL to access. It is only valid
+for desktop entries with the <literal>Link</literal> type.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_TYPE_APPLICATION ##### -->
+<para>
+The value of the <link
+linkend="G-KEY-FILE-DESKTOP-KEY-TYPE:CAPS"><literal>G_KEY_FILE_DESKTOP_KEY_TYPE</literal></link>
+key for desktop entries representing applications.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_TYPE_LINK ##### -->
+<para>
+The value of the <link
+linkend="G-KEY-FILE-DESKTOP-KEY-TYPE:CAPS"><literal>G_KEY_FILE_DESKTOP_KEY_TYPE</literal></link>
+key for desktop entries representing links to documents.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_KEY_FILE_DESKTOP_TYPE_DIRECTORY ##### -->
+<para>
+The value of the <link
+linkend="G-KEY-FILE-DESKTOP-KEY-TYPE:CAPS"><literal>G_KEY_FILE_DESKTOP_KEY_TYPE</literal></link>
+key for desktop entries representing directories.
+</para>
+
+@Since: 2.14
+
+
diff --git a/docs/reference/glib/tmpl/limits.sgml b/docs/reference/glib/tmpl/limits.sgml
new file mode 100644
index 0000000..c0fe16c
--- /dev/null
+++ b/docs/reference/glib/tmpl/limits.sgml
@@ -0,0 +1,250 @@
+<!-- ##### SECTION Title ##### -->
+Limits of Basic Types
+
+<!-- ##### SECTION Short_Description ##### -->
+portable method of determining the limits of the standard types
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These macros provide a portable method to determine the limits of some of
+the standard integer and floating point types.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_MININT ##### -->
+<para>
+The minimum value which can be held in a #gint.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXINT ##### -->
+<para>
+The maximum value which can be held in a #gint.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXUINT ##### -->
+<para>
+The maximum value which can be held in a #guint.
+</para>
+
+
+
+<!-- ##### MACRO G_MINSHORT ##### -->
+<para>
+The minimum value which can be held in a #gshort.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXSHORT ##### -->
+<para>
+The maximum value which can be held in a #gshort.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXUSHORT ##### -->
+<para>
+The maximum value which can be held in a #gushort.
+</para>
+
+
+
+<!-- ##### MACRO G_MINLONG ##### -->
+<para>
+The minimum value which can be held in a #glong.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXLONG ##### -->
+<para>
+The maximum value which can be held in a #glong.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXULONG ##### -->
+<para>
+The maximum value which can be held in a #gulong.
+</para>
+
+
+
+<!-- ##### MACRO G_MININT8 ##### -->
+<para>
+The minimum value which can be held in a #gint8.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MAXINT8 ##### -->
+<para>
+The maximum value which can be held in a #gint8.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MAXUINT8 ##### -->
+<para>
+The maximum value which can be held in a #guint8.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MININT16 ##### -->
+<para>
+The minimum value which can be held in a #gint16.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MAXINT16 ##### -->
+<para>
+The maximum value which can be held in a #gint16.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MAXUINT16 ##### -->
+<para>
+The maximum value which can be held in a #guint16.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MININT32 ##### -->
+<para>
+The minimum value which can be held in a #gint32.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MAXINT32 ##### -->
+<para>
+The maximum value which can be held in a #gint32.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MAXUINT32 ##### -->
+<para>
+The maximum value which can be held in a #guint32.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MININT64 ##### -->
+<para>
+The minimum value which can be held in a #gint64.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXINT64 ##### -->
+<para>
+The maximum value which can be held in a #gint64.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXUINT64 ##### -->
+<para>
+The maximum value which can be held in a #guint64.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXSIZE ##### -->
+<para>
+The maximum value which can be held in a #gsize.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_MINSSIZE ##### -->
+<para>
+The minimum value which can be held in a #gssize.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_MAXSSIZE ##### -->
+<para>
+The maximum value which can be held in a #gssize.
+</para>
+
+@Since: 2.14
+
+
+<!-- ##### MACRO G_MINOFFSET ##### -->
+<para>
+The minimum value which can be held in a #goffset.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXOFFSET ##### -->
+<para>
+The maximum value which can be held in a #goffset.
+</para>
+
+
+
+<!-- ##### MACRO G_MINFLOAT ##### -->
+<para>
+The minimum positive value which can be held in a #gfloat.
+</para>
+<para>
+If you are interested in the smallest value which can be held in a #gfloat,
+use -G_MAX_FLOAT.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXFLOAT ##### -->
+<para>
+The maximum value which can be held in a #gfloat.
+</para>
+
+
+
+<!-- ##### MACRO G_MINDOUBLE ##### -->
+<para>
+The minimum positive value which can be held in a #gdouble.
+</para>
+<para>
+If you are interested in the smallest value which can be held in a #gdouble,
+use -G_MAXDOUBLE.
+</para>
+
+
+
+<!-- ##### MACRO G_MAXDOUBLE ##### -->
+<para>
+The maximum value which can be held in a #gdouble.
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/linked_lists_double.sgml b/docs/reference/glib/tmpl/linked_lists_double.sgml
new file mode 100644
index 0000000..ac1dade
--- /dev/null
+++ b/docs/reference/glib/tmpl/linked_lists_double.sgml
@@ -0,0 +1,467 @@
+<!-- ##### SECTION Title ##### -->
+Doubly-Linked Lists
+
+<!-- ##### SECTION Short_Description ##### -->
+linked lists containing integer values or pointers to data, with the ability
+to iterate over the list in both directions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GList structure and its associated functions provide a standard
+doubly-linked list data structure.
+</para>
+<para>
+Each element in the list contains a piece of data, together with pointers
+which link to the previous and next elements in the list.
+Using these pointers it is possible to move through the list in both
+directions (unlike the
+<link linkend="glib-Singly-Linked-lists">Singly-Linked Lists</link>
+which only allows movement through the list in the forward direction).
+</para>
+<para>
+The data contained in each element can be either integer values, by using one
+of the
+<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
+or simply pointers to any type of data.
+</para>
+<para>
+List elements are allocated from the <link linkend="glib-Memory-Slices">slice
+allocator</link>, which is more efficient than allocating elements 
+individually.
+</para>
+<para>
+Note that most of the #GList functions expect to be passed a pointer to
+the first element in the list. The functions which insert elements return
+the new start of the list, which may have changed.
+</para>
+<para>
+There is no function to create a #GList. %NULL is considered to be the empty
+list so you simply set a #GList* to %NULL.
+</para>
+<para>
+To add elements, use g_list_append(), g_list_prepend(), g_list_insert()
+and g_list_insert_sorted().
+</para>
+<para>
+To remove elements, use g_list_remove().
+</para>
+<para>
+To find elements in the list use g_list_first(), g_list_last(), g_list_next(),
+g_list_previous(), g_list_nth(), g_list_nth_data(), g_list_find() and
+g_list_find_custom().
+</para>
+<para>
+To find the index of an element use g_list_position() and g_list_index().
+</para>
+<para>
+To call a function for each element in the list use g_list_foreach().
+</para>
+<para>
+To free the entire list, use g_list_free().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GList ##### -->
+<para>
+The #GList struct is used for each element in a doubly-linked list.
+</para>
+
+@data: holds the element's data, which can be a pointer to any kind of data, 
+  or any integer value using the
+  <link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>.
+@next: contains the link to the next element in the list.
+@prev: contains the link to the previous element in the list.
+
+<!-- ##### FUNCTION g_list_append ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_prepend ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_insert ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@position: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_insert_before ##### -->
+<para>
+
+</para>
+
+@list: 
+@sibling: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_insert_sorted ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_remove ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_remove_link ##### -->
+<para>
+
+</para>
+
+@list: 
+@llink: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_delete_link ##### -->
+<para>
+
+</para>
+
+@list: 
+@link_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_remove_all ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_free ##### -->
+<para>
+
+</para>
+
+@list: 
+
+
+<!-- ##### FUNCTION g_list_alloc ##### -->
+<para>
+Allocates space for one #GList element.
+It is called by g_list_append(), g_list_prepend(), g_list_insert() and
+g_list_insert_sorted() and so is rarely used on its own.
+</para>
+
+@Returns: a pointer to the newly-allocated #GList element.
+
+
+<!-- ##### FUNCTION g_list_free_1 ##### -->
+<para>
+
+</para>
+
+@list: 
+
+
+<!-- ##### MACRO g_list_free1 ##### -->
+<para>
+Another name for g_list_free_1().
+</para>
+
+
+
+<!-- ##### FUNCTION g_list_length ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_copy ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_reverse ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_sort ##### -->
+<para>
+
+</para>
+
+@list: 
+@compare_func: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GCompareFunc ##### -->
+<para>
+Specifies the type of a comparison function used to compare two
+values.  The function should return a negative integer if the first
+value comes before the second, 0 if they are equal, or a positive
+integer if the first value comes after the second.
+</para>
+
+@a: a value.
+@b: a value to compare with.
+@Returns: negative value if @a &lt; @b; zero if @a = @b; positive value
+if @a > @b.
+
+
+<!-- ##### FUNCTION g_list_insert_sorted_with_data ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_sort_with_data ##### -->
+<para>
+
+</para>
+
+@list: 
+@compare_func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GCompareDataFunc ##### -->
+<para>
+Specifies the type of a comparison function used to compare two
+values.  The function should return a negative integer if the first
+value comes before the second, 0 if they are equal, or a positive
+integer if the first value comes after the second.
+</para>
+
+@a: a value.
+@b: a value to compare with.
+@user_data: user data to pass to comparison function.
+@Returns: negative value if @a &lt; @b; zero if @a = @b; positive value
+if @a > @b.
+
+
+<!-- ##### FUNCTION g_list_concat ##### -->
+<para>
+
+</para>
+
+@list1: 
+@list2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_foreach ##### -->
+<para>
+
+</para>
+
+@list: 
+@func: 
+@user_data: 
+
+
+<!-- ##### USER_FUNCTION GFunc ##### -->
+<para>
+Specifies the type of functions passed to g_list_foreach() and
+g_slist_foreach().
+</para>
+
+@data: the element's data.
+@user_data: user data passed to g_list_foreach() or g_slist_foreach().
+
+
+<!-- ##### FUNCTION g_list_first ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_last ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### MACRO g_list_previous ##### -->
+<para>
+A convenience macro to gets the previous element in a #GList.
+</para>
+
+@list: an element in a #GList.
+@Returns: the previous element, or %NULL if there are no previous elements.
+
+
+<!-- ##### MACRO g_list_next ##### -->
+<para>
+A convenience macro to gets the next element in a #GList.
+</para>
+
+@list: an element in a #GList.
+@Returns: the next element, or %NULL if there are no more elements.
+
+
+<!-- ##### FUNCTION g_list_nth ##### -->
+<para>
+
+</para>
+
+@list: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_nth_data ##### -->
+<para>
+
+</para>
+
+@list: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_nth_prev ##### -->
+<para>
+
+</para>
+
+@list: 
+@n: 
+@Returns: 
+
+
+
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION g_list_find ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_find_custom ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_position ##### -->
+<para>
+
+</para>
+
+@list: 
+@llink: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_index ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_list_push_allocator ##### -->
+<para>
+Sets the allocator to use to allocate #GList elements.
+Use g_list_pop_allocator() to restore the previous allocator.
+</para>
+<para>
+Note that this function is not available if GLib has been compiled
+with <option>--disable-mem-pools</option>
+</para>
+
+@allocator: the #GAllocator to use when allocating #GList elements.
+@Deprecated: 2.10: It does nothing, since #GList has been
+converted to the <link linkend="glib-Memory-Slices">slice allocator</link>
+
+
+<!-- ##### FUNCTION g_list_pop_allocator ##### -->
+<para>
+Restores the previous #GAllocator, used when allocating #GList elements.
+</para>
+<para>
+Note that this function is not available if GLib has been compiled
+with <option>--disable-mem-pools</option>
+</para>
+
+@Deprecated: 2.10: It does nothing, since #GList has been
+converted to the <link linkend="glib-Memory-Slices">slice allocator</link>
+
+
diff --git a/docs/reference/glib/tmpl/linked_lists_single.sgml b/docs/reference/glib/tmpl/linked_lists_single.sgml
new file mode 100644
index 0000000..8dd3436
--- /dev/null
+++ b/docs/reference/glib/tmpl/linked_lists_single.sgml
@@ -0,0 +1,394 @@
+<!-- ##### SECTION Title ##### -->
+Singly-Linked Lists
+
+<!-- ##### SECTION Short_Description ##### -->
+linked lists containing integer values or pointers to data, limited to
+iterating over the list in one direction
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GSList structure and its associated functions provide a standard
+singly-linked list data structure.
+</para>
+<para>
+Each element in the list contains a piece of data, together with a pointer
+which links to the next element in the list.
+Using this pointer it is possible to move through the list in one
+direction only (unlike the
+<link linkend="glib-Doubly-Linked-lists">Doubly-Linked Lists</link>
+which allow movement in both directions).
+</para>
+<para>
+The data contained in each element can be either integer values, by using one
+of the
+<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
+or simply pointers to any type of data.
+</para>
+<para>
+List elements are allocated from the <link linkend="glib-Memory-Slices">slice
+allocator</link>, which is more efficient than allocating elements 
+individually.
+</para>
+<para>
+Note that most of the #GSList functions expect to be passed a pointer to
+the first element in the list. The functions which insert elements return
+the new start of the list, which may have changed.
+</para>
+<para>
+There is no function to create a #GSList. %NULL is considered to be the empty
+list so you simply set a #GSList* to %NULL.
+</para>
+<para>
+To add elements, use g_slist_append(), g_slist_prepend(), g_slist_insert()
+and g_slist_insert_sorted().
+</para>
+<para>
+To remove elements, use g_slist_remove().
+</para>
+<para>
+To find elements in the list use g_slist_last(), g_slist_next(),
+g_slist_nth(), g_slist_nth_data(), g_slist_find() and
+g_slist_find_custom().
+</para>
+<para>
+To find the index of an element use g_slist_position() and g_slist_index().
+</para>
+<para>
+To call a function for each element in the list use g_slist_foreach().
+</para>
+<para>
+To free the entire list, use g_slist_free().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GSList ##### -->
+<para>
+The #GSList struct is used for each element in the singly-linked list.
+</para>
+
+@data: holds the element's data, which can be a pointer to any kind of data, 
+  or any integer value using the 
+  <link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>.
+@next: contains the link to the next element in the list.
+
+<!-- ##### FUNCTION g_slist_alloc ##### -->
+<para>
+Allocates space for one #GSList element.
+It is called by the g_slist_append(), g_slist_prepend(), g_slist_insert() and
+g_slist_insert_sorted() functions and so is rarely used on its own.
+</para>
+
+@Returns: a pointer to the newly-allocated #GSList element.
+
+
+<!-- ##### FUNCTION g_slist_append ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_prepend ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_insert ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@position: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_insert_before ##### -->
+<para>
+
+</para>
+
+@slist: 
+@sibling: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_insert_sorted ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_remove ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_remove_link ##### -->
+<para>
+
+</para>
+
+@list: 
+@link_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_delete_link ##### -->
+<para>
+
+</para>
+
+@list: 
+@link_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_remove_all ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_free ##### -->
+<para>
+
+</para>
+
+@list: 
+
+
+<!-- ##### FUNCTION g_slist_free_1 ##### -->
+<para>
+
+</para>
+
+@list: 
+
+
+<!-- ##### MACRO g_slist_free1 ##### -->
+<para>
+A macro which does the same as g_slist_free_1().
+</para>
+
+@Since: 2.10
+
+
+<!-- ##### FUNCTION g_slist_length ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_copy ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_reverse ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_insert_sorted_with_data ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_sort ##### -->
+<para>
+
+</para>
+
+@list: 
+@compare_func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_sort_with_data ##### -->
+<para>
+
+</para>
+
+@list: 
+@compare_func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_concat ##### -->
+<para>
+
+</para>
+
+@list1: 
+@list2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_foreach ##### -->
+<para>
+
+</para>
+
+@list: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_slist_last ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### MACRO g_slist_next ##### -->
+<para>
+A convenience macro to gets the next element in a #GSList.
+</para>
+
+@slist: an element in a #GSList.
+@Returns: the next element, or %NULL if there are no more elements.
+
+
+<!-- ##### FUNCTION g_slist_nth ##### -->
+<para>
+
+</para>
+
+@list: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_nth_data ##### -->
+<para>
+
+</para>
+
+@list: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_find ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_find_custom ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_position ##### -->
+<para>
+
+</para>
+
+@list: 
+@llink: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_index ##### -->
+<para>
+
+</para>
+
+@list: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_slist_push_allocator ##### -->
+<para>
+Sets the allocator to use to allocate #GSList elements.
+Use g_slist_pop_allocator() to restore the previous allocator.
+</para>
+<para>
+Note that this function is not available if GLib has been compiled
+with <option>--disable-mem-pools</option>
+</para>
+
+@dummy: the #GAllocator to use when allocating #GSList elements.
+@Deprecated: 2.10: It does nothing, since #GSList has been
+converted to the <link linkend="glib-Memory-Slices">slice allocator</link>
+
+
+<!-- ##### FUNCTION g_slist_pop_allocator ##### -->
+<para>
+Restores the previous #GAllocator, used when allocating #GSList elements.
+</para>
+<para>
+Note that this function is not available if GLib has been compiled
+with <option>--disable-mem-pools</option>
+</para>
+
+@Deprecated: 2.10: It does nothing, since #GSList has been
+converted to the <link linkend="glib-Memory-Slices">slice allocator</link>
+
+
diff --git a/docs/reference/glib/tmpl/macros.sgml b/docs/reference/glib/tmpl/macros.sgml
new file mode 100644
index 0000000..efa2779
--- /dev/null
+++ b/docs/reference/glib/tmpl/macros.sgml
@@ -0,0 +1,228 @@
+<!-- ##### SECTION Title ##### -->
+Standard Macros
+
+<!-- ##### SECTION Short_Description ##### -->
+commonly-used macros.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These macros provide a few commonly-used features.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_OS_WIN32 ##### -->
+<para>
+This macro is defined only on Windows. So you can bracket
+Windows-specific code in "&num;ifdef G_OS_WIN32".
+</para>
+
+
+
+<!-- ##### MACRO G_OS_BEOS ##### -->
+<para>
+This macro is defined only on BeOS. So you can bracket
+BeOS-specific code in "&num;ifdef G_OS_BEOS".
+</para>
+
+
+
+<!-- ##### MACRO G_OS_UNIX ##### -->
+<para>
+This macro is defined only on UNIX. So you can bracket
+UNIX-specific code in "&num;ifdef G_OS_UNIX".
+</para>
+
+
+
+<!-- ##### MACRO G_DIR_SEPARATOR ##### -->
+<para>
+The directory separator character.
+This is '/' on UNIX machines and '\' under Windows.
+</para>
+
+
+
+<!-- ##### MACRO G_DIR_SEPARATOR_S ##### -->
+<para>
+The directory separator as a string.
+This is "/" on UNIX machines and "\" under Windows.
+</para>
+
+
+
+<!-- ##### MACRO G_IS_DIR_SEPARATOR ##### -->
+<para>
+Checks whether a character is a directory 
+separator. It returns %TRUE for '/' on UNIX
+machines and for '\' or '/' under Windows.
+</para>
+
+@c: a character
+@Since: 2.6
+
+
+<!-- ##### MACRO G_SEARCHPATH_SEPARATOR ##### -->
+<para>
+The search path separator character.
+This is ':' on UNIX machines and ';' under Windows.
+</para>
+
+
+
+<!-- ##### MACRO G_SEARCHPATH_SEPARATOR_S ##### -->
+<para>
+The search path separator as a string.
+This is ":" on UNIX machines and ";" under Windows.
+</para>
+
+
+
+<!-- ##### MACRO TRUE ##### -->
+<para>
+Defines the %TRUE value for the #gboolean type.
+</para>
+
+
+
+<!-- ##### MACRO FALSE ##### -->
+<para>
+Defines the %FALSE value for the #gboolean type.
+</para>
+
+
+
+<!-- ##### MACRO NULL ##### -->
+<para>
+Defines the standard %NULL pointer.
+</para>
+
+
+
+<!-- ##### MACRO MIN ##### -->
+<para>
+Calculates the minimum of @a and @b.
+</para>
+
+@a: a numeric value.
+@b: a numeric value.
+@Returns: the minimum of @a and @b.
+
+
+<!-- ##### MACRO MAX ##### -->
+<para>
+Calculates the maximum of @a and @b.
+</para>
+
+@a: a numeric value.
+@b: a numeric value.
+@Returns: the maximum of @a and @b.
+
+
+<!-- ##### MACRO ABS ##### -->
+<para>
+Calculates the absolute value of @a.
+The absolute value is simply the number with any negative sign taken away.
+</para>
+<para>
+For example,
+<itemizedlist>
+<listitem><para>
+ABS(-10) is 10.
+</para></listitem>
+<listitem><para>
+ABS(10) is also 10.
+</para></listitem>
+</itemizedlist>
+</para>
+
+@a: a numeric value.
+@Returns: the absolute value of @a.
+
+
+<!-- ##### MACRO CLAMP ##### -->
+<para>
+Ensures that @x is between the limits set by @low and @high. If @low is
+greater than @high the result is undefined.
+</para>
+<para>
+For example,
+<itemizedlist>
+<listitem><para>
+CLAMP(5, 10, 15) is 10.
+</para></listitem>
+<listitem><para>
+CLAMP(15, 5, 10) is 10.
+</para></listitem>
+<listitem><para>
+CLAMP(20, 15, 25) is 20.
+</para></listitem>
+</itemizedlist>
+</para>
+
+@x: the value to clamp.
+@low: the minimum value allowed.
+@high: the maximum value allowed.
+@Returns: the value of @x clamped to the range between @low and @high.
+
+
+<!-- ##### MACRO G_STRUCT_MEMBER ##### -->
+<para>
+Returns a member of a structure at a given offset, using the given type.
+</para>
+
+@member_type: the type of the struct field.
+@struct_p: a pointer to a struct.
+@struct_offset: the offset of the field from the start of the struct, in bytes.
+@Returns: the struct member.
+
+
+<!-- ##### MACRO G_STRUCT_MEMBER_P ##### -->
+<para>
+Returns an untyped pointer to a given offset of a struct.
+</para>
+
+@struct_p: a pointer to a struct.
+@struct_offset: the offset from the start of the struct, in bytes.
+@Returns: an untyped pointer to @struct_p plus @struct_offset bytes.
+
+
+<!-- ##### MACRO G_STRUCT_OFFSET ##### -->
+<para>
+Returns the offset, in bytes, of a member of a struct.
+</para>
+
+@struct_type: a structure type, e.g. <structname>GtkWidget</structname>.
+@member: a field in the structure, e.g. <structfield>window</structfield>.
+@Returns: the offset of @member from the start of @struct_type.
+
+
+<!-- ##### MACRO G_MEM_ALIGN ##### -->
+<para>
+Indicates the number of bytes to which memory will be aligned on the
+current platform.
+</para>
+
+
+
+<!-- ##### MACRO G_CONST_RETURN ##### -->
+<para>
+If %G_DISABLE_CONST_RETURNS is defined, this macro expands to nothing.
+By default, the macro expands to <literal>const</literal>. The macro 
+should be used in place of <literal>const</literal> for functions that 
+return a value that should not be modified. The purpose of this macro is 
+to allow us to turn on <literal>const</literal> for returned constant 
+strings by default, while allowing programmers who find that annoying to 
+turn it off. This macro should only be used for return values and for
+<emphasis>out</emphasis> parameters, it doesn't make sense for 
+<emphasis>in</emphasis> parameters. 
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/macros_misc.sgml b/docs/reference/glib/tmpl/macros_misc.sgml
new file mode 100644
index 0000000..fa3c6ec
--- /dev/null
+++ b/docs/reference/glib/tmpl/macros_misc.sgml
@@ -0,0 +1,629 @@
+<!-- ##### SECTION Title ##### -->
+Miscellaneous Macros
+
+<!-- ##### SECTION Short_Description ##### -->
+specialized macros which are not used often
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These macros provide more specialized features which are not needed so often
+by application programmers.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_INLINE_FUNC ##### -->
+<para>
+This macro is used to export function prototypes so they can be linked
+with an external version when no inlining is performed. The file which
+implements the functions should define %G_IMPLEMENTS_INLINES
+before including the headers which contain %G_INLINE_FUNC declarations.
+Since inlining is very compiler-dependent using these macros correctly
+is very difficult. Their use is strongly discouraged.
+</para>
+<para>
+This macro is often mistaken for a replacement for the inline keyword;
+inline is already declared in a portable manner in the glib headers
+and can be used normally.
+</para>
+
+
+
+<!-- ##### MACRO G_STMT_START ##### -->
+<para>
+Used within multi-statement macros so that they can be used in places where
+only one statement is expected by the compiler.
+</para>
+
+
+
+<!-- ##### MACRO G_STMT_END ##### -->
+<para>
+Used within multi-statement macros so that they can be used in places where
+only one statement is expected by the compiler.
+</para>
+
+
+
+<!-- ##### MACRO G_BEGIN_DECLS ##### -->
+<para>
+Used (along with #G_END_DECLS) to bracket header files. If the
+compiler in use is a C++ compiler, adds <literal>extern "C"</literal> 
+around the header.
+</para>
+
+
+
+<!-- ##### MACRO G_END_DECLS ##### -->
+<para>
+Used (along with #G_BEGIN_DECLS) to bracket header files. If the
+compiler in use is a C++ compiler, adds <literal>extern "C"</literal> 
+around the header.
+</para>
+
+
+
+<!-- ##### MACRO G_N_ELEMENTS ##### -->
+<para>
+Determines the number of elements in an array. The array must be
+declared so the compiler knows its size at compile-time; this 
+macro will not work on an array allocated on the heap, only static
+arrays or arrays on the stack.
+</para>
+
+@arr: the array
+
+
+<!-- ##### MACRO G_VA_COPY ##### -->
+<para>
+Portable way to copy <type>va_list</type> variables.
+</para>
+<para>
+In order to use this function, you must include <filename>string.h</filename> 
+yourself, because this macro may use <function>memmove()</function> and GLib 
+does not include <function>string.h</function> for you.
+</para>
+
+@ap1: the <type>va_list</type> variable to place a copy of @ap2 in.
+@ap2: a <type>va_list</type>.
+
+
+<!-- ##### MACRO G_STRINGIFY ##### -->
+<para>
+Accepts a macro or a string and converts it into a string after
+preprocessor argument expansion.
+</para>
+
+@macro_or_string: a macro or a string.
+
+
+<!-- ##### MACRO G_PASTE ##### -->
+<para>
+Yields a new preprocessor pasted identifier 'identifier1identifier2'
+from its expanded arguments 'identifier1' and 'identifier2'.
+</para>
+
+@identifier1: an identifier
+@identifier2: an identifier
+@Since: 2.20
+
+
+<!-- ##### MACRO G_PASTE_ARGS ##### -->
+<para>
+
+</para>
+
+@identifier1: 
+@identifier2: 
+
+
+<!-- ##### MACRO G_STATIC_ASSERT ##### -->
+<para>
+The G_STATIC_ASSERT macro lets the programmer check a condition at compile time,
+the condition needs to be compile time computable.
+The macro can be used in any place where a <literal>typedef</literal> is valid.
+The macro should only be used once per source code line.
+</para>
+
+@expr: a constant expression.
+@Since: 2.20
+
+
+<!-- ##### MACRO G_GNUC_EXTENSION ##### -->
+<para>
+Expands to <literal>__extension__</literal> when <command>gcc</command> is 
+used as the compiler.
+This simply tells <command>gcc</command> not to warn about the following non-standard code
+when compiling with the <option>-pedantic</option> option.
+</para>
+
+
+
+<!-- ##### MACRO G_GNUC_CONST ##### -->
+<para>
+Expands to the GNU C <literal>const</literal> function attribute if the compiler is 
+<command>gcc</command>. Declaring a function as const enables better optimization of calls 
+to the function. A const function doesn't examine any values except its parameters, and has no 
+effects except its return value. See the GNU C documentation for details. 
+</para>
+<note><para>
+A function that has pointer arguments and examines the data pointed to 
+must <emphasis>not</emphasis> be declared const. Likewise, a function that 
+calls a non-const function usually must not be const. It doesn't make sense 
+for a const function to return void.
+</para></note>
+
+
+
+<!-- ##### MACRO G_GNUC_PURE ##### -->
+<para>
+Expands to the GNU C <literal>pure</literal> function attribute if the compiler is 
+<command>gcc</command>. Declaring a function as pure enables better optimization of 
+calls to the function. A pure function has no effects except its return value and the 
+return value depends only on the parameters and/or global variables.
+See the GNU C documentation for details. 
+</para>
+
+
+
+<!-- ##### MACRO G_GNUC_MALLOC ##### -->
+<para>
+Expands to the GNU C <literal>malloc</literal> function attribute if the 
+compiler is <command>gcc</command>. Declaring a function as malloc enables 
+better optimization of the function. A function can have the malloc attribute 
+if it returns a pointer which is guaranteed to not alias with any other pointer
+when the function returns (in practice, this means newly allocated memory).  
+See the GNU C documentation for details. 
+</para>
+
+@Since: 2.6
+
+
+<!-- ##### MACRO G_GNUC_ALLOC_SIZE ##### -->
+<para>
+Expands to the GNU C <literal>alloc_size</literal> function attribute if the 
+compiler is a new enough <command>gcc</command>. This attribute tells the
+compiler that the function returns a pointer to memory of a size that is
+specified by the @x<!-- -->th function parameter.
+See the GNU C documentation for details. 
+</para>
+
+@x: the index of the argument specifying the allocation size
+@Since: 2.18
+
+
+<!-- ##### MACRO G_GNUC_ALLOC_SIZE2 ##### -->
+<para>
+Expands to the GNU C <literal>alloc_size</literal> function attribute if the 
+compiler is a new enough <command>gcc</command>. This attribute tells the
+compiler that the function returns a pointer to memory of a size that is
+specified by the product of two function parameters.
+See the GNU C documentation for details. 
+</para>
+
+@x: the index of the argument specifying one factor of the allocation size
+@y: the index of the argument specifying the second factor of the allocation size
+@Since: 2.18
+
+
+<!-- ##### MACRO G_GNUC_DEPRECATED ##### -->
+<para>
+Expands to the GNU C <literal>deprecated</literal> attribute if the compiler 
+is <command>gcc</command>.
+It can be used to mark typedefs, variables and functions as deprecated. 
+When called with the <option>-Wdeprecated</option> option, the compiler will 
+generate warnings when deprecated interfaces are used.
+See the GNU C documentation for details. 
+</para>
+
+@Since: 2.2
+
+
+<!-- ##### MACRO G_GNUC_NORETURN ##### -->
+<para>
+Expands to the GNU C <literal>noreturn</literal> function attribute if the 
+compiler is <command>gcc</command>. It is used for declaring functions which never return.
+It enables optimization of the function, and avoids possible compiler
+warnings. See the GNU C documentation for details. 
+</para>
+
+
+
+<!-- ##### MACRO G_GNUC_UNUSED ##### -->
+<para>
+Expands to the GNU C <literal>unused</literal> function attribute if the compiler is 
+<command>gcc</command>. It is used for declaring functions which may never be used.
+It avoids possible compiler warnings. See the GNU C documentation for details. 
+</para>
+
+
+
+<!-- ##### MACRO G_GNUC_PRINTF ##### -->
+<para>
+Expands to the GNU C <literal>format</literal> function attribute if the compiler is 
+<command>gcc</command>. This is used for declaring functions which take a variable number of
+arguments, with the same syntax as <function>printf()</function>.
+It allows the compiler to type-check the arguments passed to the function.
+See the GNU C documentation for details. 
+</para>
+<informalexample><programlisting>
+gint g_snprintf (gchar  *string,
+                 gulong       n,
+                 gchar const *format,
+                 ...) G_GNUC_PRINTF (3, 4);
+</programlisting></informalexample>
+
+@format_idx: the index of the argument corresponding to the format string.
+(The arguments are numbered from 1).
+@arg_idx: the index of the first of the format arguments.
+
+
+<!-- ##### MACRO G_GNUC_SCANF ##### -->
+<para>
+Expands to the GNU C <literal>format</literal> function attribute if the compiler is <command>gcc</command>.
+This is used for declaring functions which take a variable number of
+arguments, with the same syntax as <function>scanf()</function>.
+It allows the compiler to type-check the arguments passed to the function.
+See the GNU C documentation for details. 
+</para>
+
+@format_idx: the index of the argument corresponding to the format string.
+(The arguments are numbered from 1).
+@arg_idx: the index of the first of the format arguments.
+
+
+<!-- ##### MACRO G_GNUC_FORMAT ##### -->
+<para>
+Expands to the GNU C <literal>format_arg</literal> function attribute if the compiler is <command>gcc</command>.
+This function attribute specifies that a function takes a format
+string for a <function>printf()</function>, <function>scanf()</function>, 
+<function>strftime()</function> or <function>strfmon()</function> style
+function and modifies it, so that the result can be passed to a 
+<function>printf()</function>, <function>scanf()</function>, 
+<function>strftime()</function> or <function>strfmon()</function> style 
+function (with the remaining arguments to the format function the same as 
+they would have been for the unmodified string). 
+See the GNU C documentation for details. 
+</para>
+<informalexample><programlisting>
+gchar *g_dgettext (gchar *domain_name, gchar *msgid) G_GNUC_FORMAT (2);
+</programlisting></informalexample>
+
+@arg_idx: the index of the argument.
+
+
+<!-- ##### MACRO G_GNUC_NULL_TERMINATED ##### -->
+<para>
+Expands to the GNU C <literal>sentinel</literal> function attribute if the 
+compiler is <command>gcc</command>, or "" if it isn't. This function attribute
+only applies to variadic functions and instructs the compiler to check that 
+the argument list is terminated with an explicit %NULL.
+See the GNU C documentation for details. 
+</para>
+
+Since: 2.8
+
+
+
+<!-- ##### MACRO G_GNUC_WARN_UNUSED_RESULT ##### -->
+<para>
+Expands to the GNU C <literal>warn_unused_result</literal> function attribute 
+if the compiler is <command>gcc</command>, or "" if it isn't. This function 
+attribute makes the compiler emit a warning if the result of a function call
+is ignored. See the GNU C documentation for details. 
+</para>
+
+@Since: 2.10
+
+
+<!-- ##### MACRO G_GNUC_FUNCTION ##### -->
+<para>
+Expands to "" on all modern compilers, and to <literal>__FUNCTION__</literal>
+on <command>gcc</command> version 2.x. Don't use it.
+</para>
+
+@Deprecated: 2.16
+
+
+<!-- ##### MACRO G_GNUC_PRETTY_FUNCTION ##### -->
+<para>
+Expands to "" on all modern compilers, and to 
+<literal>__PRETTY_FUNCTION__</literal> on <command>gcc</command> version 2.x. 
+Don't use it.
+</para>
+
+@Deprecated: 2.16
+
+
+<!-- ##### MACRO G_GNUC_NO_INSTRUMENT ##### -->
+<para>
+Expands to the GNU C <literal>no_instrument_function</literal> function 
+attribute if the compiler is <command>gcc</command>. Functions with this 
+attribute will not be 
+instrumented for profiling, when the compiler is called with the
+<option>-finstrument-functions</option> option.
+See the GNU C documentation for details. 
+</para>
+
+
+
+<!-- ##### MACRO G_HAVE_GNUC_VISIBILITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO G_GNUC_INTERNAL ##### -->
+<para>
+This attribute can be used for marking library functions as being used 
+internally to the library only, which may allow the compiler to handle
+function calls more efficiently. 
+Note that static functions do not need to be marked as internal in this way. 
+See the GNU C documentation for details. 
+</para>
+<para>
+When using a compiler that supports the GNU C hidden visibility attribute, 
+this macro expands to <literal>__attribute__((visibility("hidden")))</literal>.
+When using the Sun Studio compiler, it expands to <literal>__hidden</literal>.
+</para>
+<para>
+Note that for portability, the attribute should be placed before the
+function declaration. While GCC allows the macro after the declaration, 
+Sun Studio does not.
+</para>
+<informalexample><programlisting>
+G_GNUC_INTERNAL
+void _g_log_fallback_handler (const gchar    *log_domain,
+                              GLogLevelFlags  log_level,
+                              const gchar    *message,
+                              gpointer        unused_data);
+</programlisting></informalexample>
+
+Since: 2.6
+
+
+
+<!-- ##### MACRO G_GNUC_MAY_ALIAS ##### -->
+<para>
+Expands to the GNU C <literal>may_alias</literal> type attribute 
+if the compiler is <command>gcc</command>. Types with this attribute 
+will not be subjected to type-based alias analysis, but are assumed
+to alias with any other type, just like char.
+See the GNU C documentation for details. 
+</para>
+
+Since: 2.14
+
+
+
+<!-- ##### FUNCTION G_LIKELY ##### -->
+<para>
+Hints the compiler that the expression is likely to evaluate to a true
+value. The compiler may use this information for optimizations.
+</para>
+<informalexample><programlisting>
+if (G_LIKELY (random () != 1))
+  g_print ("not one");
+</programlisting></informalexample>
+
+@Returns: the value of @expr
+@Since: 2.2
+<!-- # Unused Parameters # -->
+@expr: the expression
+
+
+<!-- ##### MACRO G_UNLIKELY ##### -->
+<para>
+Hints the compiler that the expression is unlikely to evaluate to a true
+value. The compiler may use this information for optimizations.
+</para>
+<informalexample><programlisting>
+if (G_UNLIKELY (random () == 1))
+  g_print ("a random one");
+</programlisting></informalexample>
+
+@expr: the expression
+@Returns: the value of @expr
+@Since: 2.2
+
+
+<!-- ##### MACRO G_STRLOC ##### -->
+<para>
+Expands to a string identifying the current code position. 
+</para>
+
+
+
+<!-- ##### MACRO G_STRFUNC ##### -->
+<para>
+Expands to a string identifying the current function. 
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_GINT16_MODIFIER ##### -->
+<para>
+The platform dependent length modifier for conversion specifiers for scanning
+and printing values of type #gint16 or #guint16. It is a string literal, 
+but doesn't include the percent-sign, such that you can add precision and 
+length modifiers between percent-sign and conversion specifier and append a 
+conversion specifier.
+</para>
+
+<para>
+The following example prints "0x7b";
+<informalexample>
+<programlisting>
+gint16 value = 123;
+g_print ("%#" G_GINT16_MODIFIER "x", value);
+</programlisting>
+</informalexample>
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_GINT16_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #gint16. It is a string literal, but doesn't
+include the percent-sign, such that you can add precision and length
+modifiers between percent-sign and conversion specifier.
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+gint16 in;
+gint32 out;
+sscanf ("42", "%" G_GINT16_FORMAT, &amp;in)
+out = in * 1000;
+g_print ("%" G_GINT32_FORMAT, out);
+</programlisting>
+</informalexample>
+</para>
+
+
+
+<!-- ##### MACRO G_GUINT16_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #guint16. See also #G_GINT16_FORMAT.
+</para>
+
+
+
+<!-- ##### MACRO G_GINT32_MODIFIER ##### -->
+<para>
+The platform dependent length modifier for conversion specifiers for scanning
+and printing values of type #gint32 or #guint32. It is a string literal, 
+See also #G_GINT16_MODIFIER.
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_GINT32_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #gint32. See also #G_GINT16_FORMAT.
+</para>
+
+
+
+<!-- ##### MACRO G_GUINT32_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #guint32. See also #G_GINT16_FORMAT.
+</para>
+
+
+
+<!-- ##### MACRO G_GINT64_MODIFIER ##### -->
+<para>
+The platform dependent length modifier for conversion specifiers for scanning
+and printing values of type #gint64 or #guint64. It is a string literal.
+</para>
+
+<note>
+<para>
+Some platforms do not support printing 64 bit integers,
+even though the types are supported. On such platforms #G_GINT64_MODIFIER
+is not defined.
+</para>
+</note>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO G_GINT64_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #gint64. See also #G_GINT16_FORMAT.
+</para>
+
+<note>
+<para>
+Some platforms do not support scanning and printing 64 bit integers,
+even though the types are supported. On such platforms #G_GINT64_FORMAT
+is not defined. Note that scanf() may not support 64 bit integers, even
+if #G_GINT64_FORMAT is defined. Due to its weak error handling, scanf() is not 
+recommended for parsing anyway; consider using g_strtoull() instead.
+</para>
+</note>
+
+
+
+<!-- ##### MACRO G_GUINT64_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #guint64. See also #G_GINT16_FORMAT.
+</para>
+
+<note>
+<para>
+Some platforms do not support scanning and printing 64 bit integers,
+even though the types are supported. On such platforms #G_GUINT64_FORMAT
+is not defined.  Note that scanf() may not support 64 bit integers, even
+if #G_GINT64_FORMAT is defined. Due to its weak error handling, scanf() is not 
+recommended for parsing anyway; consider using g_strtoull() instead.
+</para>
+</note>
+
+
+
+<!-- ##### MACRO G_GSIZE_MODIFIER ##### -->
+<para>
+The platform dependent length modifier for conversion specifiers for scanning
+and printing values of type #gsize or #gssize. It is a string literal, 
+</para>
+
+@Since: 2.6
+
+
+<!-- ##### MACRO G_GSIZE_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #gsize. See also #G_GINT16_FORMAT.
+</para>
+
+@Since: 2.6
+
+
+<!-- ##### MACRO G_GSSIZE_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #gssize. See also #G_GINT16_FORMAT.
+</para>
+
+@Since: 2.6
+
+
+<!-- ##### MACRO G_GOFFSET_MODIFIER ##### -->
+<para>
+The platform dependent length modifier for conversion specifiers for scanning
+and printing values of type #goffset. It is a string literal. See also
+#G_GINT64_MODIFIER.
+</para>
+
+@Since: 2.20
+
+
+<!-- ##### MACRO G_GOFFSET_FORMAT ##### -->
+<para>
+This is the platform dependent conversion specifier for scanning and
+printing values of type #goffset. See also #G_GINT64_FORMAT.
+</para>
+
+Since: 2.20
+
+
+
diff --git a/docs/reference/glib/tmpl/main.sgml b/docs/reference/glib/tmpl/main.sgml
new file mode 100644
index 0000000..9f7de38
--- /dev/null
+++ b/docs/reference/glib/tmpl/main.sgml
@@ -0,0 +1,1030 @@
+<!-- ##### SECTION Title ##### -->
+The Main Event Loop
+
+<!-- ##### SECTION Short_Description ##### -->
+manages all available sources of events
+
+<!-- ##### SECTION Long_Description ##### -->
+  <para>
+    The main event loop manages all the available sources of events for
+    GLib and GTK+ applications. These events can come from any number of
+    different types of sources such as file descriptors (plain files,
+    pipes or sockets) and timeouts.  New types of event sources can also
+    be added using g_source_attach().
+  </para>
+  <para>
+    To allow multiple independent sets of sources to be handled in
+    different threads, each source is associated with a #GMainContext.
+    A #GMainContext can only be running in a single thread, but
+    sources can be added to it and removed from it from other threads.
+  </para>
+  <para>
+    Each event source is assigned a priority.  The default priority,
+    #G_PRIORITY_DEFAULT, is 0.  Values less than 0 denote higher
+    priorities.  Values greater than 0 denote lower priorities.  Events
+    from high priority sources are always processed before events from
+    lower priority sources.
+  </para>
+  <para>
+    Idle functions can also be added, and assigned a priority. These will
+    be run whenever no events with a higher priority are ready to be
+    processed.
+  </para>
+  <para>
+    The #GMainLoop data type represents a main event loop.  A #GMainLoop
+    is created with g_main_loop_new(). After adding the initial event sources,
+    g_main_loop_run() is called. This continuously checks for new events from
+    each of the event sources and dispatches them.  Finally, the
+    processing of an event from one of the sources leads to a call to
+    g_main_loop_quit() to exit the main loop, and g_main_loop_run() returns.
+  </para>
+  <para>
+    It is possible to create new instances of #GMainLoop recursively.
+    This is often used in GTK+ applications when showing modal dialog
+    boxes. Note that event sources are associated with a particular
+    #GMainContext, and will be checked and dispatched for all main
+    loops associated with that #GMainContext.
+  </para>
+  <para>
+    GTK+ contains wrappers of some of these functions, e.g. gtk_main(),
+    gtk_main_quit() and gtk_events_pending(). 
+  </para>
+  <refsect2>
+    <title>Creating new sources types</title>
+    <para>
+      One of the unusual features of the GTK+ main loop functionality
+      is that new types of event source can be created and used in
+      addition to the builtin type of event source. A new event source
+      type is used for handling GDK events. A new source type is
+      created by <firstterm>deriving</firstterm> from the #GSource
+      structure. The derived type of source is represented by a
+      structure that has the #GSource structure as a first element,
+      and other elements specific to the new source type. To create
+      an instance of the new source type, call g_source_new() passing
+      in the size of the derived structure and a table of functions.
+      These #GSourceFuncs determine the behavior of the new source
+      types.
+    </para>
+    <para>
+      New source types basically interact with the main context
+      in two ways. Their prepare function in #GSourceFuncs can set
+      a timeout to determine the maximum amount of time that the
+      main loop will sleep before checking the source again.  In
+      addition, or as well, the source can add file descriptors to
+      the set that the main context checks using g_source_add_poll().
+    </para>
+  </refsect2>
+  <refsect2>
+    <title>Customizing the main loop iteration</title>
+    <para>
+      Single iterations of a #GMainContext can be run with
+      g_main_context_iteration(). In some cases, more detailed control
+      of exactly how the details of the main loop work is desired,
+      for instance, when integrating the #GMainLoop with an external
+      main loop. In such cases, you can call the component functions
+      of g_main_context_iteration() directly. These functions
+      are g_main_context_prepare(), g_main_context_query(),
+      g_main_context_check() and g_main_context_dispatch().
+    </para>
+    <para>
+      The operation of these functions can best be seen in terms
+      of a state diagram, as shown in <xref linkend="mainloop-states"/>.
+    </para>
+    <figure id="mainloop-states">
+      <title>States of a Main Context</title>
+      <graphic fileref="mainloop-states.gif" format="GIF"></graphic>
+    </figure>
+  </refsect2>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GMainLoop ##### -->
+<para>
+The <structname>GMainLoop</structname> struct is an opaque data type 
+representing the main event loop of a GLib or GTK+ application.
+</para>
+
+
+<!-- ##### FUNCTION g_main_loop_new ##### -->
+<para>
+
+</para>
+
+@context: 
+@is_running: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_loop_ref ##### -->
+<para>
+
+</para>
+
+@loop: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_loop_unref ##### -->
+<para>
+
+</para>
+
+@loop: 
+
+
+<!-- ##### FUNCTION g_main_loop_run ##### -->
+<para>
+
+</para>
+
+@loop: 
+
+
+<!-- ##### FUNCTION g_main_loop_quit ##### -->
+<para>
+
+</para>
+
+@loop: 
+
+
+<!-- ##### FUNCTION g_main_loop_is_running ##### -->
+<para>
+
+</para>
+
+@loop: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_loop_get_context ##### -->
+<para>
+
+</para>
+
+@loop: 
+@Returns: 
+
+
+<!-- ##### MACRO g_main_new ##### -->
+<para>
+Creates a new #GMainLoop for the default main loop. 
+</para>
+
+@is_running: set to %TRUE to indicate that the loop is running. This is not
+very important since calling g_main_run() will set this to %TRUE anyway.
+@Returns: a new #GMainLoop.
+@Deprecated: 2.2: Use g_main_loop_new() instead.
+
+
+<!-- ##### MACRO g_main_destroy ##### -->
+<para>
+Frees the memory allocated for the #GMainLoop. 
+</para>
+
+@loop: a #GMainLoop.
+@Deprecated: 2.2: Use g_main_loop_unref() instead.
+
+
+<!-- ##### MACRO g_main_run ##### -->
+<para>
+Runs a main loop until it stops running. 
+</para>
+
+@loop: a #GMainLoop.
+@Deprecated: 2.2: Use g_main_loop_run() instead.
+
+
+<!-- ##### MACRO g_main_quit ##### -->
+<para>
+Stops the #GMainLoop. If g_main_run() was called to run the #GMainLoop,
+it will now return. 
+</para>
+
+@loop: a #GMainLoop.
+@Deprecated: 2.2: Use g_main_loop_quit() instead.
+
+
+<!-- ##### MACRO g_main_is_running ##### -->
+<para>
+Checks if the main loop is running. 
+</para>
+
+@loop: a #GMainLoop.
+@Returns: %TRUE if the main loop is running.
+@Deprecated: 2.2: USe g_main_loop_is_running() instead.
+
+
+<!-- ##### MACRO G_PRIORITY_HIGH ##### -->
+<para>
+Use this for high priority event sources.
+It is not used within GLib or GTK+.
+</para>
+
+
+
+<!-- ##### MACRO G_PRIORITY_DEFAULT ##### -->
+<para>
+Use this for default priority event sources.
+In GLib this priority is used when adding timeout functions with
+g_timeout_add().
+In GDK this priority is used for events from the X server.
+</para>
+
+
+
+<!-- ##### MACRO G_PRIORITY_HIGH_IDLE ##### -->
+<para>
+Use this for high priority idle functions.
+GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations, and
+#G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is done to
+ensure that any pending resizes are processed before any pending redraws,
+so that widgets are not redrawn twice unnecessarily.)
+</para>
+
+
+
+<!-- ##### MACRO G_PRIORITY_DEFAULT_IDLE ##### -->
+<para>
+Use this for default priority idle functions.
+In GLib this priority is used when adding idle functions with g_idle_add().
+</para>
+
+
+
+<!-- ##### MACRO G_PRIORITY_LOW ##### -->
+<para>
+Use this for very low priority background tasks.
+It is not used within GLib or GTK+.
+</para>
+
+
+
+<!-- ##### STRUCT GMainContext ##### -->
+<para>
+The <structname>GMainContext</structname> struct is an opaque data type 
+representing a set of sources to be handled in a main loop. 
+</para>
+
+
+<!-- ##### FUNCTION g_main_context_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_ref ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_unref ##### -->
+<para>
+
+</para>
+
+@context: 
+
+
+<!-- ##### FUNCTION g_main_context_default ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_iteration ##### -->
+<para>
+
+</para>
+
+@context: 
+@may_block: 
+@Returns: 
+
+
+<!-- ##### MACRO g_main_iteration ##### -->
+<para>
+Runs a single iteration for the default #GMainContext.
+</para>
+
+@may_block: set to %TRUE if it should block (i.e. wait) until an event source
+becomes ready. It will return after an event source has been processed.
+If set to %FALSE it will return immediately if no event source is ready to be
+processed.
+@Returns: %TRUE if more events are pending.
+@Deprecated: 2.2: Use g_main_context_iteration() instead.
+
+
+<!-- ##### FUNCTION g_main_context_pending ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### MACRO g_main_pending ##### -->
+<para>
+Checks if any events are pending for the default #GMainContext
+(i.e. ready to be processed).  
+</para>
+
+@Returns: %TRUE if any events are pending.
+@Deprecated: 2.2: Use g_main_context_pending() instead.
+
+
+<!-- ##### FUNCTION g_main_context_find_source_by_id ##### -->
+<para>
+
+</para>
+
+@context: 
+@source_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_find_source_by_user_data ##### -->
+<para>
+
+</para>
+
+@context: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_find_source_by_funcs_user_data ##### -->
+<para>
+
+</para>
+
+@context: 
+@funcs: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_wakeup ##### -->
+<para>
+
+</para>
+
+@context: 
+
+
+<!-- ##### FUNCTION g_main_context_acquire ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_release ##### -->
+<para>
+
+</para>
+
+@context: 
+
+
+<!-- ##### FUNCTION g_main_context_is_owner ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_wait ##### -->
+<para>
+
+</para>
+
+@context: 
+@cond: 
+@mutex: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_prepare ##### -->
+<para>
+
+</para>
+
+@context: 
+@priority: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_query ##### -->
+<para>
+
+</para>
+
+@context: 
+@max_priority: 
+@timeout_: 
+@fds: 
+@n_fds: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_check ##### -->
+<para>
+
+</para>
+
+@context: 
+@max_priority: 
+@fds: 
+@n_fds: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_context_dispatch ##### -->
+<para>
+
+</para>
+
+@context: 
+
+
+<!-- ##### FUNCTION g_main_context_set_poll_func ##### -->
+<para>
+
+</para>
+
+@context: 
+@func: 
+
+
+<!-- ##### FUNCTION g_main_context_get_poll_func ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GPollFunc ##### -->
+<para>
+Specifies the type of function passed to g_main_context_set_poll_func().
+The semantics of the function should match those of the
+<function>poll()</function> system call.
+</para>
+
+@ufds: an array of #GPollFD elements.
+@nfsd: the number of elements in @ufds.
+@timeout_: the maximum time to wait for an event of the file descriptors.
+          A negative value indicates an infinite timeout.
+@Returns: the number of #GPollFD elements which have events or errors reported,
+or -1 if an error occurred.
+
+
+<!-- ##### FUNCTION g_main_context_add_poll ##### -->
+<para>
+
+</para>
+
+@context: 
+@fd: 
+@priority: 
+
+
+<!-- ##### FUNCTION g_main_context_remove_poll ##### -->
+<para>
+
+</para>
+
+@context: 
+@fd: 
+
+
+<!-- ##### FUNCTION g_main_depth ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_main_current_source ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### MACRO g_main_set_poll_func ##### -->
+<para>
+Sets the function to use for the handle polling of file descriptors
+for the default main context. 
+</para>
+
+@func: the function to call to poll all file descriptors.
+@Deprecated: 2.2: Use g_main_context_set_poll_func() instead.
+
+
+<!-- ##### FUNCTION g_timeout_source_new ##### -->
+<para>
+
+</para>
+
+@interval: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_timeout_source_new_seconds ##### -->
+<para>
+
+</para>
+
+@interval: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_timeout_add ##### -->
+<para>
+</para>
+
+@interval: 
+@function: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_timeout_add_full ##### -->
+<para>
+</para>
+
+@priority: 
+@interval: 
+@function: 
+@data: 
+@notify: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_timeout_add_seconds ##### -->
+<para>
+
+</para>
+
+@interval: 
+@function: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_timeout_add_seconds_full ##### -->
+<para>
+
+</para>
+
+@priority: 
+@interval: 
+@function: 
+@data: 
+@notify: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_idle_source_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_idle_add ##### -->
+<para>
+</para>
+
+@function: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_idle_add_full ##### -->
+<para>
+</para>
+
+@priority: 
+@function: 
+@data: 
+@notify: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_idle_remove_by_data ##### -->
+<para>
+</para>
+
+@data: 
+@Returns: 
+
+
+<!-- ##### TYPEDEF GPid ##### -->
+<para>
+A type which is used to hold a process identification. 
+On Unix, processes are identified by a process id (an 
+integer), while Windows uses process handles (which are 
+pointers).
+</para>
+
+
+<!-- ##### USER_FUNCTION GChildWatchFunc ##### -->
+<para>
+The type of functions to be called when a child exists.
+</para>
+
+@pid: the process id of the child process
+@status: Status information about the child process,
+  see waitpid(2) for more information about this field
+@data: user data passed to g_child_watch_add()
+
+
+<!-- ##### FUNCTION g_child_watch_source_new ##### -->
+<para>
+
+</para>
+
+@pid: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_child_watch_add ##### -->
+<para>
+
+</para>
+
+@pid: 
+@function: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_child_watch_add_full ##### -->
+<para>
+
+</para>
+
+@priority: 
+@pid: 
+@function: 
+@data: 
+@notify: 
+@Returns: 
+
+
+<!-- ##### STRUCT GPollFD ##### -->
+<para>
+
+<informaltable pgwide="1" frame="none" role="struct">
+<tgroup cols="2"><colspec colwidth="2*"/><colspec colwidth="8*"/>
+<tbody>
+
+<row>
+<entry>#gint fd;</entry>
+<entry>the file descriptor to poll (or a <type>HANDLE</type> on Win32 platforms).</entry>
+</row>
+
+<row>
+<entry>#gushort events;</entry>
+<entry>a bitwise combination of flags from #GIOCondition, specifying which
+events should be polled for. Typically for reading from a file descriptor
+you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and for writing you would use
+%G_IO_OUT | %G_IO_ERR.
+</entry>
+</row>
+
+<row>
+<entry>#gushort revents;</entry>
+<entry>a bitwise combination of flags from #GIOCondition, returned from the
+<function>poll()</function> function to indicate which events occurred.
+</entry>
+</row>
+</tbody></tgroup></informaltable>
+
+</para>
+
+@fd: 
+@fd: 
+@events: 
+@revents: 
+
+<!-- ##### FUNCTION g_poll ##### -->
+<para>
+
+</para>
+
+@fds: 
+@nfds: 
+@timeout: 
+@Returns: 
+
+
+<!-- ##### STRUCT GSource ##### -->
+<para>
+The <structname>GSource</structname> struct is an opaque data type representing
+an event source.
+</para>
+
+
+<!-- ##### USER_FUNCTION GSourceDummyMarshal ##### -->
+<para>
+This is just a placeholder for #GClosureMarshal, which cannot be used here
+for dependency reasons.
+</para>
+
+
+
+<!-- ##### STRUCT GSourceFuncs ##### -->
+<para>
+The #GSourceFuncs struct contains a table of functions used to handle
+event sources in a generic manner.
+</para>
+<para>
+For idle sources, the prepare and check functions always return %TRUE to
+indicate that the source is always ready to be processed.
+The prepare function also returns a timeout value of 0 to ensure that the
+poll() call doesn't block (since that would be time 
+wasted which could have been spent running the idle function).
+</para>
+<para>
+For timeout sources, the prepare and check functions both return %TRUE if the
+timeout interval has expired. The prepare function also returns a timeout 
+value to ensure that the poll() call doesn't block too 
+long and miss the next timeout.
+</para>
+<para>
+For file descriptor sources, the prepare function typically returns %FALSE,
+since it must wait until poll() has been called before 
+it knows whether any events need to be processed. It sets the returned 
+timeout to -1 to indicate that it doesn't mind how long the 
+poll() call blocks.
+In the check function, it tests the results of the poll()
+call to see if the required condition has been met, and returns %TRUE if so.
+</para>
+
+@prepare: Called before all the file descriptors are polled.
+If the source can determine that it is ready here (without waiting for the
+results of the poll() call) it should return %TRUE.
+It can also return a @timeout_ value which should be the maximum timeout
+(in milliseconds) which should be passed to the poll() call.
+The actual timeout used will be -1 if all sources returned -1, or it will
+be the minimum of all the @timeout_ values returned which were >= 0.
+@check: Called after all the file descriptors are polled.
+The source should return %TRUE if it is ready to be dispatched.
+Note that some time may have passed since the previous prepare function was
+called, so the source should be checked again here.
+@dispatch: Called to dispatch the event source, after it has returned %TRUE in
+either its @prepare or its @check function. The @dispatch function is
+passed in a callback function and data. The callback function may be
+%NULL if the source was never connected to a callback using
+g_source_set_callback(). The @dispatch function should call the
+callback function with @user_data and whatever additional parameters are
+needed for this type of event source.
+@finalize: Called when the source is finalized.
+@closure_callback: 
+@closure_marshal: 
+
+<!-- ##### STRUCT GSourceCallbackFuncs ##### -->
+<para>
+The <structname>GSourceCallbackFuncs</structname> struct contains
+functions for managing callback objects. 
+</para>
+
+@ref: Called when a reference is added to the callback object.
+@unref: Called when a reference to the callback object is dropped.
+@get: Called to extract the callback function and data from the callback object.
+
+<!-- ##### FUNCTION g_source_new ##### -->
+<para>
+
+</para>
+
+@source_funcs: 
+@struct_size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_ref ##### -->
+<para>
+
+</para>
+
+@source: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_unref ##### -->
+<para>
+
+</para>
+
+@source: 
+
+
+<!-- ##### FUNCTION g_source_set_funcs ##### -->
+<para>
+
+</para>
+
+@source: 
+@funcs: 
+
+
+<!-- ##### FUNCTION g_source_attach ##### -->
+<para>
+
+</para>
+
+@source: 
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_destroy ##### -->
+<para>
+
+</para>
+
+@source: 
+
+
+<!-- ##### FUNCTION g_source_is_destroyed ##### -->
+<para>
+
+</para>
+
+@source: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_set_priority ##### -->
+<para>
+
+</para>
+
+@source: 
+@priority: 
+
+
+<!-- ##### FUNCTION g_source_get_priority ##### -->
+<para>
+
+</para>
+
+@source: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_set_can_recurse ##### -->
+<para>
+
+</para>
+
+@source: 
+@can_recurse: 
+
+
+<!-- ##### FUNCTION g_source_get_can_recurse ##### -->
+<para>
+
+</para>
+
+@source: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_get_id ##### -->
+<para>
+
+</para>
+
+@source: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_get_context ##### -->
+<para>
+
+</para>
+
+@source: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_set_callback ##### -->
+<para>
+
+</para>
+
+@source: 
+@func: 
+@data: 
+@notify: 
+
+
+<!-- ##### USER_FUNCTION GSourceFunc ##### -->
+<para>
+Specifies the type of function passed to g_timeout_add(), g_timeout_add_full(),
+g_idle_add(), and g_idle_add_full().
+</para>
+
+@data: data passed to the function, set when the source was created with one
+of the above functions.
+@Returns: it should return %FALSE if the source should be removed.
+
+
+<!-- ##### FUNCTION g_source_set_callback_indirect ##### -->
+<para>
+
+</para>
+
+@source: 
+@callback_data: 
+@callback_funcs: 
+
+
+<!-- ##### FUNCTION g_source_add_poll ##### -->
+<para>
+
+</para>
+
+@source: 
+@fd: 
+
+
+<!-- ##### FUNCTION g_source_remove_poll ##### -->
+<para>
+
+</para>
+
+@source: 
+@fd: 
+
+
+<!-- ##### FUNCTION g_source_get_current_time ##### -->
+<para>
+
+</para>
+
+@source: 
+@timeval: 
+
+
+<!-- ##### FUNCTION g_source_remove ##### -->
+<para>
+</para>
+
+@tag: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_remove_by_funcs_user_data ##### -->
+<para>
+</para>
+
+@funcs: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_source_remove_by_user_data ##### -->
+<para>
+</para>
+
+@user_data: 
+@Returns: 
+
+<!--
+Local variables:
+mode: sgml
+sgml-parent-document: ("../glib-docs.sgml" "book" "refsect2" "")
+End:
+-->
+
+
diff --git a/docs/reference/glib/tmpl/markup.sgml b/docs/reference/glib/tmpl/markup.sgml
new file mode 100644
index 0000000..365f5cd
--- /dev/null
+++ b/docs/reference/glib/tmpl/markup.sgml
@@ -0,0 +1,324 @@
+<!-- ##### SECTION Title ##### -->
+Simple XML Subset Parser
+
+<!-- ##### SECTION Short_Description ##### -->
+parses a subset of XML
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The "GMarkup" parser is intended to parse a simple markup format
+that's a subset of XML. This is a small, efficient, easy-to-use
+parser. It should not be used if you expect to interoperate with other 
+applications generating full-scale XML. However, it's very useful for
+application data files, config files, etc. where you know your
+application will be the only one writing the file. Full-scale XML
+parsers should be able to parse the subset used by GMarkup, so you can
+easily migrate to full-scale XML at a later time if the need arises.
+</para>
+
+<para>
+GMarkup is not guaranteed to signal an error on all invalid XML; the
+parser may accept documents that an XML parser would not. However, XML 
+documents which are not well-formed<footnote id="wellformed">Being wellformed
+is a weaker condition than being valid. See the 
+<ulink url="http://www.w3.org/TR/REC-xml/">XML specification</ulink> for 
+definitions of these terms.</footnote> are not considered valid GMarkup 
+documents. 
+</para>
+
+<para>
+Simplifications to XML include:
+<itemizedlist>
+<listitem>
+<para>
+Only UTF-8 encoding is allowed.
+</para>
+</listitem>
+<listitem>
+<para>
+No user-defined entities.
+</para>
+</listitem>
+<listitem>
+<para>
+Processing instructions, comments and the doctype declaration are "passed 
+through" but are not interpreted in any way.
+</para>
+</listitem>
+<listitem>
+<para>
+No DTD or validation.
+</para>
+</listitem>
+</itemizedlist>
+</para>
+
+<para>
+The markup format does support:
+<itemizedlist>
+<listitem>
+<para>
+Elements
+</para>
+</listitem>
+<listitem>
+<para>
+Attributes
+</para>
+</listitem>
+<listitem>
+<para>
+5 standard entities: <literal>&amp;amp; &amp;lt; &amp;gt; &amp;quot; &amp;apos;</literal>
+</para>
+</listitem>
+<listitem>
+<para>
+Character references
+</para>
+</listitem>
+<listitem>
+<para>
+Sections marked as CDATA
+</para>
+</listitem>
+</itemizedlist>
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GMarkupError ##### -->
+<para>
+Error codes returned by markup parsing.
+</para>
+
+@G_MARKUP_ERROR_BAD_UTF8: text being parsed was not valid UTF-8
+@G_MARKUP_ERROR_EMPTY: document contained nothing, or only whitespace
+@G_MARKUP_ERROR_PARSE: document was ill-formed
+@G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser functions; element wasn't known
+@G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser functions; attribute wasn't known
+@G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser functions; content was invalid
+@G_MARKUP_ERROR_MISSING_ATTRIBUTE: error should be set by #GMarkupParser functions; a required attribute was missing
+
+<!-- ##### MACRO G_MARKUP_ERROR ##### -->
+<para>
+Error domain for markup parsing. Errors in this domain will
+be from the #GMarkupError enumeration. See #GError for information on 
+error domains.
+</para>
+
+
+
+<!-- ##### ENUM GMarkupParseFlags ##### -->
+<para>
+Flags that affect the behaviour of the parser. 
+</para>
+
+@G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use.
+@G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked
+  sections are not passed literally to the @passthrough function of
+  the parser. Instead, the content of the section (without the 
+  <literal>&lt;![CDATA[</literal> and <literal>]]&gt;</literal>) is
+  passed to the @text function. This flag was added in GLib 2.12.
+@G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup
+  itself have line/column information prefixed to them to let the
+  caller know the location of the error.  When this flag is set the
+  location information is also prefixed to errors generated by the
+  #GMarkupParser implementation functions.
+
+<!-- ##### STRUCT GMarkupParseContext ##### -->
+<para>
+A parse context is used to parse a stream of bytes that you expect to
+contain marked-up text. See g_markup_parse_context_new(),
+#GMarkupParser, and so on for more details.
+</para>
+
+
+<!-- ##### STRUCT GMarkupParser ##### -->
+<para>
+Any of the fields in #GMarkupParser can be %NULL, in which case they
+will be ignored. Except for the @error function, any of these
+callbacks can set an error; in particular the
+%G_MARKUP_ERROR_UNKNOWN_ELEMENT, %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
+and %G_MARKUP_ERROR_INVALID_CONTENT errors are intended to be set 
+from these callbacks. If you set an error from a callback,
+g_markup_parse_context_parse() will report that error back to its caller.
+</para>
+
+@start_element: Callback to invoke when the opening tag of an element
+    is seen.
+@end_element: Callback to invoke when the closing tag of an element is seen.
+    Note that this is also called for empty tags like 
+    <literal>&lt;empty/&gt;</literal>.
+@text: Callback to invoke when some text is seen (text is always
+    inside an element). Note that the text of an element may be spread
+    over multiple calls of this function. If the %G_MARKUP_TREAT_CDATA_AS_TEXT
+    flag is set, this function is also called for the content of CDATA marked 
+    sections.
+@passthrough: Callback to invoke for comments, processing instructions 
+    and doctype declarations; if you're re-writing the parsed document, 
+    write the passthrough text back out in the same position. If the
+    %G_MARKUP_TREAT_CDATA_AS_TEXT flag is not set, this function is also 
+    called for CDATA marked sections.
+@error: Callback to invoke when an error occurs.
+
+<!-- ##### FUNCTION g_markup_escape_text ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_printf_escaped ##### -->
+<para>
+
+</para>
+
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_vprintf_escaped ##### -->
+<para>
+
+</para>
+
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_end_parse ##### -->
+<para>
+
+</para>
+
+@context: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_free ##### -->
+<para>
+
+</para>
+
+@context: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_get_position ##### -->
+<para>
+
+</para>
+
+@context: 
+@line_number: 
+@char_number: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_get_element ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_get_element_stack ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_get_user_data ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_new ##### -->
+<para>
+
+</para>
+
+@parser: 
+@flags: 
+@user_data: 
+@user_data_dnotify: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_parse ##### -->
+<para>
+
+</para>
+
+@context: 
+@text: 
+@text_len: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_push ##### -->
+<para>
+
+</para>
+
+@context: 
+@parser: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_markup_parse_context_pop ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### ENUM GMarkupCollectType ##### -->
+<para>
+
+</para>
+
+@G_MARKUP_COLLECT_INVALID: 
+@G_MARKUP_COLLECT_STRING: 
+@G_MARKUP_COLLECT_STRDUP: 
+@G_MARKUP_COLLECT_BOOLEAN: 
+@G_MARKUP_COLLECT_TRISTATE: 
+@G_MARKUP_COLLECT_OPTIONAL: 
+
+<!-- ##### FUNCTION g_markup_collect_attributes ##### -->
+<para>
+
+</para>
+
+@element_name: 
+@attribute_names: 
+@attribute_values: 
+@error: 
+@first_type: 
+@first_attr: 
+@Varargs: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/memory.sgml b/docs/reference/glib/tmpl/memory.sgml
new file mode 100644
index 0000000..90df4f8
--- /dev/null
+++ b/docs/reference/glib/tmpl/memory.sgml
@@ -0,0 +1,345 @@
+<!-- ##### SECTION Title ##### -->
+Memory Allocation
+
+<!-- ##### SECTION Short_Description ##### -->
+general memory-handling
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These functions provide support for allocating and freeing memory.
+</para>
+
+<note>
+<para>
+If any call to allocate memory fails, the application is terminated.
+This also means that there is no need to check if the call succeeded.
+</para>
+</note>
+
+<note>
+<para>
+It's important to match g_malloc() with g_free(), plain malloc() with free(),
+and (if you're using C++) new with delete and new[] with delete[]. Otherwise
+bad things can happen, since these allocators may use different memory
+pools (and new/delete call constructors and destructors). See also
+g_mem_set_vtable().
+</para>
+</note>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO g_new ##### -->
+<para>
+Allocates @n_structs elements of type @struct_type.
+The returned pointer is cast to a pointer to the given type.
+If @n_structs is 0 it returns %NULL.
+</para>
+<para>
+Since the returned pointer is already casted to the right type,
+it is normally unnecessary to cast it explicitly, and doing
+so might hide memory allocation errors.
+</para>
+
+@struct_type: the type of the elements to allocate
+@n_structs: the number of elements to allocate
+@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
+
+
+<!-- ##### MACRO g_new0 ##### -->
+<para>
+Allocates @n_structs elements of type @struct_type, initialized to 0's.
+The returned pointer is cast to a pointer to the given type.
+If @n_structs is 0 it returns %NULL.
+</para>
+<para>
+Since the returned pointer is already casted to the right type,
+it is normally unnecessary to cast it explicitly, and doing
+so might hide memory allocation errors.
+</para>
+
+@struct_type: the type of the elements to allocate.
+@n_structs: the number of elements to allocate.
+@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.
+
+
+<!-- ##### MACRO g_renew ##### -->
+<para>
+Reallocates the memory pointed to by @mem, so that it now has space for
+@n_structs elements of type @struct_type. It returns the new address of 
+the memory, which may have been moved.
+</para>
+
+@struct_type: the type of the elements to allocate
+@mem: the currently allocated memory
+@n_structs: the number of elements to allocate
+@Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type
+
+
+<!-- ##### MACRO g_try_new ##### -->
+<para>
+Attempts to allocate @n_structs elements of type @struct_type, and returns 
+%NULL on failure. Contrast with g_new(), which aborts the program on failure.
+The returned pointer is cast to a pointer to the given type. 
+If @n_structs is 0 it returns %NULL.
+</para>
+
+@struct_type: the type of the elements to allocate
+@n_structs: the number of elements to allocate
+@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
+@Since: 2.8
+
+
+<!-- ##### MACRO g_try_new0 ##### -->
+<para>
+Attempts to allocate @n_structs elements of type @struct_type, initialized 
+to 0's, and returns %NULL on failure. Contrast with g_new0(), which aborts 
+the program on failure.
+The returned pointer is cast to a pointer to the given type.
+The function returns %NULL when @n_structs is 0.
+</para>
+
+@struct_type: the type of the elements to allocate
+@n_structs: the number of elements to allocate
+@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
+@Since: 2.8
+
+
+<!-- ##### MACRO g_try_renew ##### -->
+<para>
+Attempts to reallocate the memory pointed to by @mem, so that it now has 
+space for @n_structs elements of type @struct_type, and returns %NULL on 
+failure. Contrast with g_renew(), which aborts the program on failure.
+It returns the new address of the memory, which may have been moved.
+</para>
+
+@struct_type: the type of the elements to allocate
+@mem: the currently allocated memory
+@n_structs: the number of elements to allocate
+@Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type
+@Since: 2.8
+
+
+<!-- ##### FUNCTION g_malloc ##### -->
+<para>
+Allocates @n_bytes bytes of memory.
+If @n_bytes is 0 it returns %NULL.
+</para>
+
+@n_bytes: the number of bytes to allocate
+@Returns: a pointer to the allocated memory
+
+
+<!-- ##### FUNCTION g_malloc0 ##### -->
+<para>
+Allocates @n_bytes bytes of memory, initialized to 0's.
+If @n_bytes is 0 it returns %NULL.
+</para>
+
+@n_bytes: the number of bytes to allocate
+@Returns: a pointer to the allocated memory
+
+
+<!-- ##### FUNCTION g_realloc ##### -->
+<para>
+Reallocates the memory pointed to by @mem, so that it now has space for
+@n_bytes bytes of memory. It returns the new address of the memory, which may
+have been moved. @mem may be %NULL, in which case it's considered to 
+have zero-length. @n_bytes may be 0, in which case %NULL will be returned
+and @mem will be freed unless it is %NULL.
+</para>
+
+@mem: the memory to reallocate
+@n_bytes: new size of the memory in bytes
+@Returns: the new address of the allocated memory
+
+
+<!-- ##### FUNCTION g_try_malloc ##### -->
+<para>
+Attempts to allocate @n_bytes, and returns %NULL on failure. 
+Contrast with g_malloc(), which aborts the program on failure.
+</para>
+
+@n_bytes: number of bytes to allocate.
+@Returns: the allocated memory, or %NULL.
+
+
+<!-- ##### FUNCTION g_try_malloc0 ##### -->
+<para>
+Attempts to allocate @n_bytes, initialized to 0's, and returns %NULL on 
+failure. Contrast with g_malloc0(), which aborts the program on failure.
+</para>
+
+@n_bytes: number of bytes to allocate
+@Returns: the allocated memory, or %NULL
+@Since: 2.8
+
+
+<!-- ##### FUNCTION g_try_realloc ##### -->
+<para>
+Attempts to realloc @mem to a new size, @n_bytes, and returns %NULL
+on failure. Contrast with g_realloc(), which aborts the program
+on failure. If @mem is %NULL, behaves the same as g_try_malloc().
+</para>
+
+@mem: previously-allocated memory, or %NULL.
+@n_bytes: number of bytes to allocate.
+@Returns: the allocated memory, or %NULL.
+
+
+<!-- ##### FUNCTION g_free ##### -->
+<para>
+Frees the memory pointed to by @mem.
+If @mem is %NULL it simply returns.
+</para>
+
+@mem: the memory to free
+
+
+<!-- ##### VARIABLE g_mem_gc_friendly ##### -->
+<para>
+This variable is %TRUE if the <envar>G_DEBUG</envar> environment variable
+includes the key <link linkend="G_DEBUG">gc-friendly</link>.  
+</para>
+
+
+<!-- ##### MACRO g_alloca ##### -->
+<para>
+Allocates @size bytes on the stack; these bytes will be freed when the current
+stack frame is cleaned up. This macro essentially just wraps the alloca() 
+function present on most UNIX variants. 
+Thus it provides the same advantages and pitfalls as alloca():
+<variablelist>
+  <varlistentry><term></term><listitem><para>
+    + alloca() is very fast, as on most systems it's implemented by just adjusting
+    the stack pointer register.
+  </para></listitem></varlistentry>
+  <varlistentry><term></term><listitem><para>
+    + It doesn't cause any memory fragmentation, within its scope, separate alloca()
+    blocks just build up and are released together at function end.
+  </para></listitem></varlistentry>
+  <varlistentry><term></term><listitem><para>
+    - Allocation sizes have to fit into the current stack frame. For instance in a
+      threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes,
+      so be sparse with alloca() uses.
+  </para></listitem></varlistentry>
+  <varlistentry><term></term><listitem><para>
+    - Allocation failure due to insufficient stack space is not indicated with a %NULL
+      return like e.g. with malloc(). Instead, most systems probably handle it the same
+      way as out of stack space situations from infinite function recursion, i.e.
+      with a segmentation fault.
+  </para></listitem></varlistentry>
+  <varlistentry><term></term><listitem><para>
+    - Special care has to be taken when mixing alloca() with GNU C variable sized arrays.
+      Stack space allocated with alloca() in the same scope as a variable sized array
+      will be freed together with the variable sized array upon exit of that scope, and
+      not upon exit of the enclosing function scope.
+  </para></listitem></varlistentry>
+</variablelist>
+
+</para>
+
+@size:    number of bytes to allocate.
+@Returns: space for @size bytes, allocated on the stack
+
+
+<!-- ##### MACRO g_newa ##### -->
+<para>
+Wraps g_alloca() in a more typesafe manner.
+</para>
+
+@struct_type: Type of memory chunks to be allocated
+@n_structs:   Number of chunks to be allocated
+@Returns:     Pointer to stack space for @n_structs chunks of type @struct_type
+
+
+<!-- ##### MACRO g_memmove ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+@len: 
+
+
+<!-- ##### FUNCTION g_memdup ##### -->
+<para>
+Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
+from @mem. If @mem is %NULL it returns %NULL.
+</para>
+
+@mem: the memory to copy.
+@byte_size: the number of bytes to copy.
+@Returns: a pointer to the newly-allocated copy of the memory, or %NULL if @mem
+is %NULL.
+
+
+<!-- ##### STRUCT GMemVTable ##### -->
+<para>
+A set of functions used to perform memory allocation. The same #GMemVTable must
+be used for all allocations in the same program; a call to g_mem_set_vtable(),
+if it exists, should be prior to any use of GLib.
+</para>
+
+@malloc: function to use for allocating memory.
+@realloc: function to use for reallocating memory.
+@free: function to use to free memory.
+@calloc: function to use for allocating zero-filled memory.
+@try_malloc: function to use for allocating memory without a default error handler.
+@try_realloc: function to use for reallocating memory without a default error handler.
+
+<!-- ##### FUNCTION g_mem_set_vtable ##### -->
+<para>
+Sets the #GMemVTable to use for memory allocation. You can use this to provide
+custom memory allocation routines. <emphasis>This function must be called 
+before using any other GLib functions.</emphasis> The @vtable only needs to 
+provide malloc(), realloc(), and free() functions; GLib can provide default 
+implementations of the others. The malloc() and realloc() implementations 
+should return %NULL on failure, GLib will handle error-checking for you. 
+@vtable is copied, so need not persist after this function has been called.
+</para>
+
+@vtable: table of memory allocation routines.
+
+
+<!-- ##### FUNCTION g_mem_is_system_malloc ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### VARIABLE glib_mem_profiler_table ##### -->
+<para>
+A #GMemVTable containing profiling variants of the memory
+allocation functions. Use them together with g_mem_profile()
+in order to get information about the memory allocation pattern
+of your program.
+</para>
+
+
+<!-- ##### FUNCTION g_mem_profile ##### -->
+<para>
+Outputs a summary of memory usage.
+</para>
+<para>
+It outputs the frequency of allocations of different sizes,
+the total number of bytes which have been allocated,
+the total number of bytes which have been freed,
+and the difference between the previous two values, i.e. the number of bytes
+still in use.
+</para>
+<para>
+Note that this function will not output anything unless you have
+previously installed the #glib_mem_profiler_table with g_mem_set_vtable().
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/memory_chunks.sgml b/docs/reference/glib/tmpl/memory_chunks.sgml
new file mode 100644
index 0000000..6eb62e5
--- /dev/null
+++ b/docs/reference/glib/tmpl/memory_chunks.sgml
@@ -0,0 +1,331 @@
+<!-- ##### SECTION Title ##### -->
+Memory Chunks
+
+<!-- ##### SECTION Short_Description ##### -->
+deprecated way to allocate groups of equal-sized chunks of memory
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Memory chunks provide an space-efficient way to allocate equal-sized 
+pieces of memory, called atoms. However, due to the administrative 
+overhead (in particular for #G_ALLOC_AND_FREE, and when used from multiple 
+threads), they are in practise often slower than direct use of g_malloc().
+Therefore, memory chunks have been deprecated in favor of the 
+<link linkend="glib-Memory-Slices">slice allocator</link>,
+which has been added in 2.10. All internal uses of memory chunks in
+GLib have been converted to the <literal>g_slice</literal> API.
+</para>
+<para>
+There are two types of memory chunks, #G_ALLOC_ONLY, and #G_ALLOC_AND_FREE.
+<itemizedlist>
+<listitem><para>
+#G_ALLOC_ONLY chunks only allow allocation of atoms. The atoms can never
+be freed individually. The memory chunk can only be free in its entirety.
+</para></listitem>
+<listitem><para>
+#G_ALLOC_AND_FREE chunks do allow atoms to be freed individually.
+The disadvantage of this is that the memory chunk has to keep track of which
+atoms have been freed. This results in more memory being used and a slight
+degradation in performance.
+</para></listitem>
+
+</itemizedlist>
+</para>
+<para>
+To create a memory chunk use g_mem_chunk_new() or the convenience macro
+g_mem_chunk_create().
+</para>
+<para>
+To allocate a new atom use g_mem_chunk_alloc(), g_mem_chunk_alloc0(),
+or the convenience macros g_chunk_new() or g_chunk_new0(). 
+</para>
+<para>
+To free an atom use g_mem_chunk_free(), or the convenience macro
+g_chunk_free(). (Atoms can only be freed if the memory chunk is created
+with the type set to #G_ALLOC_AND_FREE.)
+</para>
+<para>
+To free any blocks of memory which are no longer being used, use
+g_mem_chunk_clean(). To clean all memory chunks, use g_blow_chunks().
+</para>
+<para>
+To reset the memory chunk, freeing all of the atoms, use g_mem_chunk_reset().
+</para>
+<para>
+To destroy a memory chunk, use g_mem_chunk_destroy().
+</para>
+<para>
+To help debug memory chunks, use g_mem_chunk_info() and g_mem_chunk_print().
+</para>
+
+<example>
+<title>Using a <structname>GMemChunk</structname></title>
+<programlisting>
+  GMemChunk *mem_chunk;
+  gchar *mem[10000];
+  gint i;
+
+  /* Create a GMemChunk with atoms 50 bytes long, and memory blocks holding
+     100 bytes. Note that this means that only 2 atoms fit into each memory
+     block and so isn't very efficient. */
+  mem_chunk = g_mem_chunk_new ("test mem chunk", 50, 100, G_ALLOC_AND_FREE);
+
+  /* Now allocate 10000 atoms. */
+  for (i = 0; i &lt; 10000; i++)
+    {
+      mem[i] = g_chunk_new (gchar, mem_chunk);
+
+      /* Fill in the atom memory with some junk. */
+      for (j = 0; j &lt; 50; j++)
+	mem[i][j] = i * j;
+    }
+
+  /* Now free all of the atoms. Note that since we are going to destroy the
+     GMemChunk, this wouldn't normally be used. */
+  for (i = 0; i &lt; 10000; i++)
+    {
+      g_mem_chunk_free (mem_chunk, mem[i]);
+    }
+
+  /* We are finished with the GMemChunk, so we destroy it. */
+  g_mem_chunk_destroy (mem_chunk);
+</programlisting></example>
+
+<example>
+<title>Using a <structname>GMemChunk</structname> with data structures</title>
+<programlisting>
+  GMemChunk *array_mem_chunk;
+  GRealArray *array;
+
+  /* Create a GMemChunk to hold GRealArray structures, using the
+     g_mem_chunk_create(<!-- -->) convenience macro. We want 1024 atoms in each
+     memory block, and we want to be able to free individual atoms. */
+  array_mem_chunk = g_mem_chunk_create (GRealArray, 1024, G_ALLOC_AND_FREE);
+
+  /* Allocate one atom, using the g_chunk_new(<!-- -->) convenience macro. */
+  array = g_chunk_new (GRealArray, array_mem_chunk);
+
+  /* We can now use array just like a normal pointer to a structure. */
+  array->data            = NULL;
+  array->len             = 0;
+  array->alloc           = 0;
+  array->zero_terminated = (zero_terminated ? 1 : 0);
+  array->clear           = (clear ? 1 : 0);
+  array->elt_size        = elt_size;
+
+  /* We can free the element, so it can be reused. */
+  g_chunk_free (array, array_mem_chunk);
+
+  /* We destroy the GMemChunk when we are finished with it. */
+  g_mem_chunk_destroy (array_mem_chunk);
+</programlisting></example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GMemChunk ##### -->
+<para>
+The #GMemChunk struct is an opaque data structure representing a memory
+chunk. It should be accessed only through the use of the following functions.
+</para>
+
+
+<!-- ##### MACRO G_ALLOC_AND_FREE ##### -->
+<para>
+Specifies the type of a #GMemChunk.
+Used in g_mem_chunk_new() and g_mem_chunk_create() to specify that atoms
+will be freed individually.
+</para>
+
+
+
+<!-- ##### MACRO G_ALLOC_ONLY ##### -->
+<para>
+Specifies the type of a #GMemChunk.
+Used in g_mem_chunk_new() and g_mem_chunk_create() to specify that atoms
+will never be freed individually.
+</para>
+
+
+
+<!-- ##### FUNCTION g_mem_chunk_new ##### -->
+<para>
+Creates a new #GMemChunk.
+</para>
+
+@name: a string to identify the #GMemChunk. It is not copied so it
+should be valid for the lifetime of the #GMemChunk. It is only used in
+g_mem_chunk_print(), which is used for debugging.
+@atom_size: the size, in bytes, of each element in the #GMemChunk.
+@area_size: the size, in bytes, of each block of memory allocated to contain
+the atoms.
+@type: the type of the #GMemChunk.
+#G_ALLOC_AND_FREE is used if the atoms will be freed individually.
+#G_ALLOC_ONLY should be used if atoms will never be freed individually.
+#G_ALLOC_ONLY is quicker, since it does not need to track free atoms,
+but it obviously wastes memory if you no longer need many of the atoms.
+@Returns: the new #GMemChunk.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice allocator</link>
+  instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_alloc ##### -->
+<para>
+Allocates an atom of memory from a #GMemChunk.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@Returns: a pointer to the allocated atom.
+@Deprecated: 2.10: Use g_slice_alloc() instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_alloc0 ##### -->
+<para>
+Allocates an atom of memory from a #GMemChunk, setting the memory to 0.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@Returns: a pointer to the allocated atom.
+@Deprecated: 2.10:  Use g_slice_alloc0() instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_free ##### -->
+<para>
+Frees an atom in a #GMemChunk.
+This should only be called if the #GMemChunk was created with
+#G_ALLOC_AND_FREE. Otherwise it will simply return.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@mem: a pointer to the atom to free.
+@Deprecated: 2.10: Use g_slice_free1() instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_destroy ##### -->
+<para>
+Frees all of the memory allocated for a #GMemChunk.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
+<!-- ##### MACRO g_mem_chunk_create ##### -->
+<para>
+A convenience macro for creating a new #GMemChunk.
+It calls g_mem_chunk_new(), using the given type to create the #GMemChunk
+name. The atom size is determined using <function>sizeof()</function>, and the
+area size is calculated by multiplying the @pre_alloc parameter with
+the atom size.
+</para>
+
+@type: the type of the atoms, typically a structure name.
+@pre_alloc: the number of atoms to store in each block of memory.
+@alloc_type: the type of the #GMemChunk.
+#G_ALLOC_AND_FREE is used if the atoms will be freed individually.
+#G_ALLOC_ONLY should be used if atoms will never be freed individually.
+#G_ALLOC_ONLY is quicker, since it does not need to track free atoms,
+but it obviously wastes memory if you no longer need many of the atoms.
+@Returns: the new #GMemChunk.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
+<!-- ##### MACRO g_chunk_new ##### -->
+<para>
+A convenience macro to allocate an atom of memory from a #GMemChunk.
+It calls g_mem_chunk_alloc() and casts the returned atom to a pointer to
+the given type, avoiding a type cast in the source code.
+</para>
+
+@type: the type of the #GMemChunk atoms, typically a structure name.
+@chunk: a #GMemChunk.
+@Returns: a pointer to the allocated atom, cast to a pointer to @type.
+@Deprecated: 2.10: Use g_slice_new() instead
+
+
+<!-- ##### MACRO g_chunk_new0 ##### -->
+<para>
+A convenience macro to allocate an atom of memory from a #GMemChunk.
+It calls g_mem_chunk_alloc0() and casts the returned atom to a pointer to
+the given type, avoiding a type cast in the source code.
+</para>
+
+@type: the type of the #GMemChunk atoms, typically a structure name.
+@chunk: a #GMemChunk.
+@Returns: a pointer to the allocated atom, cast to a pointer to @type.
+@Deprecated: 2.10: Use g_slice_new0() instead
+
+
+<!-- ##### MACRO g_chunk_free ##### -->
+<para>
+A convenience macro to free an atom of memory from a #GMemChunk.
+It simply switches the arguments and calls g_mem_chunk_free()
+It is included simply to complement the other convenience macros, g_chunk_new()
+and g_chunk_new0().
+</para>
+
+@mem: a pointer to the atom to be freed.
+@mem_chunk: a #GMemChunk.
+@Deprecated: 2.10: Use g_slice_free() instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_reset ##### -->
+<para>
+Resets a GMemChunk to its initial state.
+It frees all of the currently allocated blocks of memory.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_clean ##### -->
+<para>
+Frees any blocks in a #GMemChunk which are no longer being used.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
+<!-- ##### FUNCTION g_blow_chunks ##### -->
+<para>
+Calls g_mem_chunk_clean() on all #GMemChunk objects.
+</para>
+
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_info ##### -->
+<para>
+Outputs debugging information for all #GMemChunk objects currently in use.
+It outputs the number of #GMemChunk objects currently allocated,
+and calls g_mem_chunk_print() to output information on each one.
+</para>
+
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
+<!-- ##### FUNCTION g_mem_chunk_print ##### -->
+<para>
+Outputs debugging information for a #GMemChunk.
+It outputs the name of the #GMemChunk (set with g_mem_chunk_new()),
+the number of bytes used, and the number of blocks of memory allocated.
+</para>
+
+@mem_chunk: a #GMemChunk.
+@Deprecated: 2.10: Use the <link linkend="glib-Memory-Slices">slice 
+  allocator</link> instead
+
+
diff --git a/docs/reference/glib/tmpl/memory_slices.sgml b/docs/reference/glib/tmpl/memory_slices.sgml
new file mode 100644
index 0000000..2538fa1
--- /dev/null
+++ b/docs/reference/glib/tmpl/memory_slices.sgml
@@ -0,0 +1,253 @@
+<!-- ##### SECTION Title ##### -->
+Memory Slices
+
+<!-- ##### SECTION Short_Description ##### -->
+efficient way to allocate groups of equal-sized chunks of memory
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Memory slices provide a space-efficient and multi-processing scalable
+way to allocate equal-sized pieces of memory, just like the original
+#GMemChunks (from GLib &lt;= 2.8), while avoiding their excessive
+memory-waste, scalability and performance problems.
+</para>
+
+<para>
+To achieve these goals, the slice allocator uses a sophisticated, 
+layered design that has been inspired by Bonwick's slab allocator
+<footnote><para>
+<ulink url="http://citeseer.ist.psu.edu/bonwick94slab.html">[Bonwick94]</ulink> Jeff Bonwick, The slab allocator: An object-caching kernel
+memory allocator. USENIX 1994, and  
+<ulink url="http://citeseer.ist.psu.edu/bonwick01magazines.html">[Bonwick01]</ulink> Bonwick and Jonathan Adams, Magazines and vmem: Extending the
+slab allocator to many cpu's and arbitrary resources. USENIX 2001
+</para></footnote>.
+It uses posix_memalign() to optimize allocations of many equally-sized 
+chunks, and has per-thread free lists (the so-called magazine layer) 
+to quickly satisfy allocation requests of already known structure sizes. 
+This is accompanied by extra caching logic to keep freed memory around 
+for some time before returning it to the system. Memory that is unused 
+due to alignment constraints is used for cache colorization (random 
+distribution of chunk addresses) to improve CPU cache utilization. The 
+caching layer of the slice allocator adapts itself to high lock contention 
+to improve scalability.
+</para>
+
+<para>
+The slice allocator can allocate blocks as small as two pointers, and
+unlike malloc(), it does not reserve extra space per block. For large block 
+sizes, g_slice_new() and g_slice_alloc() will automatically delegate to the
+system malloc() implementation. For newly written code it is recommended
+to use the new <literal>g_slice</literal> API instead of g_malloc() and 
+friends, as long as objects are not resized during their lifetime and the 
+object size used at allocation time is still available when freeing.
+</para>
+
+<example>
+<title>Using the slice allocator</title>
+<programlisting>
+  gchar *mem[10000];
+  gint i;
+
+  /* Allocate 10000 blocks. */
+  for (i = 0; i &lt; 10000; i++)
+    {
+      mem[i] = g_slice_alloc (50);
+
+      /* Fill in the memory with some junk. */
+      for (j = 0; j &lt; 50; j++)
+	mem[i][j] = i * j;
+    }
+
+  /* Now free all of the blocks. */
+  for (i = 0; i &lt; 10000; i++)
+    {
+      g_slice_free1 (50, mem[i]);
+    }
+</programlisting></example>
+
+<example>
+<title>Using the slice allocator with data structures</title>
+<programlisting>
+  GRealArray *array;
+
+  /* Allocate one block, using the g_slice_new(<!-- -->) macro. */
+  array = g_slice_new (GRealArray);
+
+  /* We can now use array just like a normal pointer to a structure. */
+  array->data            = NULL;
+  array->len             = 0;
+  array->alloc           = 0;
+  array->zero_terminated = (zero_terminated ? 1 : 0);
+  array->clear           = (clear ? 1 : 0);
+  array->elt_size        = elt_size;
+
+  /* We can free the block, so it can be reused. */
+  g_slice_free (GRealArray, array);
+</programlisting></example>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_slice_alloc ##### -->
+<para>
+Allocates a block of memory from the slice allocator.
+The block adress handed out can be expected to be aligned
+to at least <literal>1 * sizeof (void*)</literal>,
+though in general slices are 2 * sizeof (void*) bytes aligned,
+if a malloc() fallback implementation is used instead,
+the alignment may be reduced in a libc dependent fashion.
+Note that the underlying slice allocation mechanism can
+be changed with the <link linkend="G_SLICE">G_SLICE=always-malloc</link>
+environment variable.
+</para>
+
+@block_size: the number of bytes to allocate
+@Returns: a pointer to the allocated memory block
+@Since: 2.10
+
+
+<!-- ##### FUNCTION g_slice_alloc0 ##### -->
+<para>
+Allocates a block of memory via g_slice_alloc()
+and initialize the returned memory to 0.
+Note that the underlying slice allocation mechanism can
+be changed with the <link linkend="G_SLICE">G_SLICE=always-malloc</link>
+environment variable.
+</para>
+
+@block_size: the number of bytes to allocate
+@Returns: a pointer to the allocated block
+@Since: 2.10
+
+
+<!-- ##### FUNCTION g_slice_copy ##### -->
+<para>
+Allocates a block of memory from the slice allocator and copies
+@block_size bytes into it from @mem_block.
+</para>
+
+@block_size: the number of bytes to allocate
+@mem_block: the memory to copy
+@Returns: a pointer to the allocated memory block
+@Since: 2.14
+
+
+<!-- ##### FUNCTION g_slice_free1 ##### -->
+<para>
+Frees a block of memory. The memory must have been allocated via
+g_slice_alloc() or g_slice_alloc0()
+and the @block_size has to match the size specified upon allocation.
+Note that the exact release behaviour can be changed with the
+<link linkend="G_DEBUG">G_DEBUG=gc-friendly</link> environment variable,
+also see <link linkend="G_SLICE">G_SLICE</link> for related debugging options.
+</para>
+
+@block_size: the size of the block
+@mem_block: a pointer to the block to free
+@Since: 2.10
+
+
+<!-- ##### FUNCTION g_slice_free_chain_with_offset ##### -->
+<para>
+Frees a linked list of memory blocks of structure type @type.
+The memory blocks must be equal-sized, allocated via
+g_slice_alloc() or g_slice_alloc0()
+and linked together by a @next pointer (similar to #GSList). The offset 
+of the @next field in each block is passed as third argument.
+Note that the exact release behaviour can be changed with the
+<link linkend="G_DEBUG">G_DEBUG=gc-friendly</link> environment variable,
+also see <link linkend="G_SLICE">G_SLICE</link> for related debugging options.
+</para>
+
+@block_size: the size of the blocks
+@mem_chain:  a pointer to the first block of the chain
+@next_offset: the offset of the @next field in the blocks
+@Since: 2.10
+
+
+<!-- ##### MACRO g_slice_new ##### -->
+<para>
+A convenience macro to allocate a block of memory from the slice allocator.
+It calls g_slice_alloc() with <literal>sizeof (@type)</literal> and casts 
+the returned pointer to a pointer of the given type, avoiding a type cast 
+in the source code.
+Note that the underlying slice allocation mechanism can
+be changed with the <link linkend="G_SLICE">G_SLICE=always-malloc</link>
+environment variable.
+</para>
+
+@type: the type to allocate, typically a structure name
+@Returns: a pointer to the allocated block, cast to a pointer to @type.
+@Since: 2.10
+
+
+<!-- ##### MACRO g_slice_new0 ##### -->
+<para>
+A convenience macro to allocate a block of memory from the slice allocator
+and set the memory to 0. It calls g_slice_alloc0() with 
+<literal>sizeof (@type)</literal> and casts the returned pointer to a pointer 
+of the given type, avoiding a type cast in the source code.
+Note that the underlying slice allocation mechanism can
+be changed with the <link linkend="G_SLICE">G_SLICE=always-malloc</link>
+environment variable.
+</para>
+
+@type: the type to allocate, typically a structure name
+@Returns: a pointer to the allocated block, cast to a pointer to @type.
+@Since: 2.10
+
+
+<!-- ##### MACRO g_slice_dup ##### -->
+<para>
+A convenience macro to duplicate a block of memory using the slice allocator.
+It calls g_slice_copy() with <literal>sizeof (@type)</literal> and casts 
+the returned pointer to a pointer of the given type, avoiding a type cast 
+in the source code.
+Note that the underlying slice allocation mechanism can
+be changed with the <link linkend="G_SLICE">G_SLICE=always-malloc</link>
+environment variable.
+</para>
+
+@type: the type to duplicate, typically a structure name
+@mem: the memory to copy into the allocated block
+@Returns: a pointer to the allocated block, cast to a pointer to @type.
+@Since: 2.14
+
+
+<!-- ##### MACRO g_slice_free ##### -->
+<para>
+A convenience macro to free a block of memory that has been allocated
+from the slice allocator. It calls g_slice_free1() using 
+<literal>sizeof (type)</literal> as the block size.
+Note that the exact release behaviour can be changed with the
+<link linkend="G_DEBUG">G_DEBUG=gc-friendly</link> environment variable,
+also see <link linkend="G_SLICE">G_SLICE</link> for related debugging options.
+</para>
+
+@type: the type of the block to free, typically a structure name
+@mem: a pointer to the block to free
+@Since: 2.10
+
+
+<!-- ##### MACRO g_slice_free_chain ##### -->
+<para>
+Frees a linked list of memory blocks of structure type @type.
+The memory blocks must be equal-sized, allocated via
+g_slice_alloc() or g_slice_alloc0() and linked together by a 
+@next pointer (similar to #GSList). The name of the
+@next field in @type is passed as third argument.
+Note that the exact release behaviour can be changed with the
+<link linkend="G_DEBUG">G_DEBUG=gc-friendly</link> environment variable,
+also see <link linkend="G_SLICE">G_SLICE</link> for related debugging options.
+</para>
+
+@type:        the type of the @mem_chain blocks
+@mem_chain:   a pointer to the first block of the chain
+@next:        the field name of the next pointer in @type
+@Since: 2.10
+
+
diff --git a/docs/reference/glib/tmpl/messages.sgml b/docs/reference/glib/tmpl/messages.sgml
new file mode 100644
index 0000000..0915f55
--- /dev/null
+++ b/docs/reference/glib/tmpl/messages.sgml
@@ -0,0 +1,297 @@
+<!-- ##### SECTION Title ##### -->
+Message Logging
+
+<!-- ##### SECTION Short_Description ##### -->
+versatile support for logging messages with different levels of importance
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These functions provide support for logging error messages or messages 
+used for debugging. 
+</para>
+
+<para>
+There are several built-in levels of messages, defined in #GLogLevelFlags.
+These can be extended with user-defined levels.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_LOG_DOMAIN ##### -->
+<para>
+Defines the log domain.
+For applications, this is typically left as the default %NULL (or "") domain.
+Libraries should define this so that any messages which they log can
+be differentiated from messages from other libraries and application code.
+But be careful not to define it in any public header files.
+</para>
+<para>
+For example, GTK+ uses this in its Makefile.am:
+</para>
+<informalexample><programlisting>
+INCLUDES = -DG_LOG_DOMAIN=\"Gtk\"
+</programlisting></informalexample>
+
+
+
+<!-- ##### MACRO G_LOG_FATAL_MASK ##### -->
+<para>
+GLib log levels that are considered fatal by default.
+</para>
+
+
+
+<!-- ##### MACRO G_LOG_LEVEL_USER_SHIFT ##### -->
+<para>
+Log level shift offset for user defined log levels (0-7 are used by GLib).
+</para>
+
+
+
+<!-- ##### USER_FUNCTION GLogFunc ##### -->
+<para>
+Specifies the prototype of log handler functions.
+</para>
+
+@log_domain: the log domain of the message.
+@log_level: the log level of the message (including the fatal and recursion
+flags).
+@message: the message to process.
+@user_data: user data, set in g_log_set_handler().
+
+
+<!-- ##### ENUM GLogLevelFlags ##### -->
+<para>
+Flags specifying the level of log messages. It is possible to change
+how GLib treats messages of the various levels using g_log_set_handler()
+and g_log_set_fatal_mask().
+</para>
+
+@G_LOG_FLAG_RECURSION: internal flag
+@G_LOG_FLAG_FATAL: internal flag
+@G_LOG_LEVEL_ERROR: log level for errors, see g_error(). 
+  This level is also used for messages produced by g_assert().
+@G_LOG_LEVEL_CRITICAL: log level for critical messages, see g_critical().
+  This level is also used for messages produced by g_return_if_fail() and 
+  g_return_val_if_fail().
+@G_LOG_LEVEL_WARNING: log level for warnings, see g_warning()
+@G_LOG_LEVEL_MESSAGE: log level for messages, see g_message()
+@G_LOG_LEVEL_INFO: log level for informational messages
+@G_LOG_LEVEL_DEBUG: log level for debug messages, see g_debug()
+@G_LOG_LEVEL_MASK: a mask including all log levels.
+
+<!-- ##### FUNCTION g_log ##### -->
+<para>
+Logs an error or debugging message.
+If the log level has been set as fatal, the abort()
+function is called to terminate the program.
+</para>
+
+@log_domain: the log domain, usually #G_LOG_DOMAIN.
+@log_level: the log level, either from #GLogLevelFlags or a user-defined level.
+@format: the message format. See the printf()
+documentation.
+@Varargs: the parameters to insert into the format string.
+
+
+<!-- ##### FUNCTION g_logv ##### -->
+<para>
+Logs an error or debugging message.
+If the log level has been set as fatal, the abort()
+function is called to terminate the program.
+</para>
+
+@log_domain: the log domain.
+@log_level: the log level.
+@format: the message format. See the printf()
+documentation.
+@args: the parameters to insert into the format string.
+
+
+<!-- ##### MACRO g_message ##### -->
+<para>
+A convenience function/macro to log a normal message.
+</para>
+
+@...: format string, followed by parameters to insert into the format string (as with printf())
+
+
+<!-- ##### MACRO g_warning ##### -->
+<para>
+A convenience function/macro to log a warning message.
+</para>
+
+<para>
+You can make warnings fatal at runtime by setting the %G_DEBUG environment
+variable (see <ulink url="glib-running.html">Running GLib Applications</ulink>).
+</para>
+
+@...: format string, followed by parameters to insert into the format string (as with printf())
+
+
+<!-- ##### MACRO g_critical ##### -->
+<para>
+Logs a "critical warning" (#G_LOG_LEVEL_CRITICAL). It's more or less
+application-defined what constitutes a critical vs. a regular
+warning. You could call g_log_set_always_fatal() to make critical
+warnings exit the program, then use g_critical() for fatal errors, for
+example.
+</para>
+
+<para>
+You can also make critical warnings fatal at runtime by setting
+the %G_DEBUG environment variable (see
+<ulink url="glib-running.html">Running GLib Applications</ulink>).
+</para>
+
+@...: format string, followed by parameters to insert into the format string (as with printf())
+
+
+<!-- ##### MACRO g_error ##### -->
+<para>
+A convenience function/macro to log an error message.
+Error messages are always fatal, resulting in a call to
+abort() to terminate the application.
+This function will result in a core dump; don't use it for errors you
+expect. Using this function indicates a bug in your program, i.e. an
+assertion failure.
+</para>
+
+@...: format string, followed by parameters to insert into the format string (as with printf())
+
+
+<!-- ##### MACRO g_debug ##### -->
+<para>
+A convenience function/macro to log a debug message.
+</para>
+
+@...: format string, followed by parameters to insert into the format string (as with printf())
+@Since: 2.6
+
+
+<!-- ##### FUNCTION g_log_set_handler ##### -->
+<para>
+Sets the log handler for a domain and a set of log levels.
+To handle fatal and recursive messages the @log_levels parameter
+must be combined with the #G_LOG_FLAG_FATAL and #G_LOG_FLAG_RECURSION 
+bit flags.
+</para>
+<para>
+Note that since the #G_LOG_LEVEL_ERROR log level is always fatal, if 
+you want to set a handler for this log level you must combine it with 
+#G_LOG_FLAG_FATAL.
+</para>
+
+<example>
+<title>Adding a log handler for all warning messages in the default 
+(application) domain</title>
+<programlisting>
+  g_log_set_handler (NULL, G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL
+                     | G_LOG_FLAG_RECURSION, my_log_handler, NULL);
+</programlisting>
+</example>
+
+<example>
+<title>Adding a log handler for all critical messages from GTK+</title>
+<programlisting>
+  g_log_set_handler ("Gtk", G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL
+                     | G_LOG_FLAG_RECURSION, my_log_handler, NULL);
+</programlisting>
+</example>
+
+<example>
+<title>Adding a log handler for <emphasis>all</emphasis> messages from 
+GLib</title>
+<programlisting>
+  g_log_set_handler ("GLib", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL
+                     | G_LOG_FLAG_RECURSION, my_log_handler, NULL);
+</programlisting>
+</example>
+
+@log_domain: the log domain, or %NULL for the default "" application domain.
+@log_levels: the log levels to apply the log handler for. To handle fatal
+and recursive messages as well, combine the log levels with the
+#G_LOG_FLAG_FATAL and #G_LOG_FLAG_RECURSION bit flags.
+@log_func: the log handler function.
+@user_data: data passed to the log handler.
+@Returns: the id of the new handler.
+
+
+<!-- ##### FUNCTION g_log_remove_handler ##### -->
+<para>
+Removes the log handler.
+</para>
+
+@log_domain: the log domain.
+@handler_id: the id of the handler, which was returned in g_log_set_handler().
+
+
+<!-- ##### FUNCTION g_log_set_always_fatal ##### -->
+<para>
+Sets the message levels which are always fatal, in any log domain.
+When a message with any of these levels is logged the program terminates.
+You can only set the levels defined by GLib to be fatal.
+%G_LOG_LEVEL_ERROR is always fatal.
+</para>
+
+<para>
+You can also make some message levels
+fatal at runtime by setting the %G_DEBUG environment variable (see
+<ulink url="glib-running.html">Running GLib Applications</ulink>).
+</para>
+
+@fatal_mask: the mask containing bits set for each level of error which is
+to be fatal.
+@Returns: the old fatal mask.
+
+
+<!-- ##### FUNCTION g_log_set_fatal_mask ##### -->
+<para>
+Sets the log levels which are fatal in the given domain.
+%G_LOG_LEVEL_ERROR is always fatal.
+</para>
+
+@log_domain: the log domain.
+@fatal_mask: the new fatal mask.
+@Returns: the old fatal mask for the log domain.
+
+
+<!-- ##### FUNCTION g_log_default_handler ##### -->
+<para>
+The default log handler set up by GLib; g_log_set_default_handler() 
+allows to install an alternate default log handler.
+This is used if no log handler has been set for the particular log domain
+and log level combination. It outputs the message to stderr or stdout
+and if the log level is fatal it calls abort().
+</para>
+<para>
+stderr is used for levels %G_LOG_LEVEL_ERROR, %G_LOG_LEVEL_CRITICAL,
+%G_LOG_LEVEL_WARNING and %G_LOG_LEVEL_MESSAGE. stdout is used for the rest.
+</para>
+
+@log_domain: the log domain of the message.
+@log_level: the level of the message.
+@message: the message.
+@unused_data: data passed from g_log() which is unused.
+
+
+<!-- ##### FUNCTION g_log_set_default_handler ##### -->
+<para>
+Installs a default log handler which is used if no 
+log handler has been set for the particular log domain
+and log level combination. By default, GLib uses 
+g_log_default_handler() as default log handler.
+</para>
+
+@log_func: the log handler function.
+@user_data: data passed to the log handler.
+@Returns: the previous default log handler
+@Since: 2.6
+
+
diff --git a/docs/reference/glib/tmpl/misc_utils.sgml b/docs/reference/glib/tmpl/misc_utils.sgml
new file mode 100644
index 0000000..8038d8c
--- /dev/null
+++ b/docs/reference/glib/tmpl/misc_utils.sgml
@@ -0,0 +1,432 @@
+<!-- ##### SECTION Title ##### -->
+Miscellaneous Utility Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+a selection of portable utility functions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These are portable utility functions.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_get_application_name ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_set_application_name ##### -->
+<para>
+
+</para>
+
+@application_name: 
+
+
+<!-- ##### FUNCTION g_get_prgname ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_set_prgname ##### -->
+<para>
+
+</para>
+
+@prgname: 
+
+
+<!-- ##### FUNCTION g_getenv ##### -->
+<para>
+
+</para>
+
+@variable: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_setenv ##### -->
+<para>
+
+</para>
+
+@variable: 
+@value: 
+@overwrite: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unsetenv ##### -->
+<para>
+
+</para>
+
+@variable: 
+
+
+<!-- ##### FUNCTION g_listenv ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_user_name ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_real_name ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_user_cache_dir ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_user_data_dir ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_user_config_dir ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### ENUM GUserDirectory ##### -->
+<para>
+
+</para>
+
+@G_USER_DIRECTORY_DESKTOP: 
+@G_USER_DIRECTORY_DOCUMENTS: 
+@G_USER_DIRECTORY_DOWNLOAD: 
+@G_USER_DIRECTORY_MUSIC: 
+@G_USER_DIRECTORY_PICTURES: 
+@G_USER_DIRECTORY_PUBLIC_SHARE: 
+@G_USER_DIRECTORY_TEMPLATES: 
+@G_USER_DIRECTORY_VIDEOS: 
+@G_USER_N_DIRECTORIES: 
+
+<!-- ##### FUNCTION g_get_user_special_dir ##### -->
+<para>
+
+</para>
+
+@directory: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_system_data_dirs ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_system_config_dirs ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_host_name ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_home_dir ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_tmp_dir ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_get_current_dir ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_basename ##### -->
+
+
+@file_name: 
+@Returns: 
+
+
+<!-- ##### MACRO g_dirname ##### -->
+<para>
+This function is deprecated and will be removed in the next major
+release of GLib. Use g_path_get_dirname() instead.
+</para>
+
+<para>
+Gets the directory components of a file name.
+If the file name has no directory components "." is returned.
+The returned string should be freed when no longer needed.
+</para>
+
+@Returns: the directory components of the file.
+
+
+<!-- ##### FUNCTION g_path_is_absolute ##### -->
+<para>
+
+</para>
+
+@file_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_path_skip_root ##### -->
+<para>
+
+</para>
+
+@file_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_path_get_basename ##### -->
+<para>
+
+</para>
+
+@file_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_path_get_dirname ##### -->
+<para>
+
+</para>
+
+@file_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_build_filename ##### -->
+<para>
+
+</para>
+
+@first_element: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_build_filenamev ##### -->
+<para>
+
+</para>
+
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_build_path ##### -->
+<para>
+
+</para>
+
+@separator: 
+@first_element: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_build_pathv ##### -->
+<para>
+
+</para>
+
+@separator: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_format_size_for_display ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_find_program_in_path ##### -->
+<para>
+
+</para>
+
+@program: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_bit_nth_lsf ##### -->
+<para>
+Find the position of the first bit set in @mask, searching from (but not
+including) @nth_bit upwards. Bits are numbered from 0 (least significant)
+to sizeof(#gulong) * 8 - 1 (31 or 63, usually). To start searching from the
+0th bit, set @nth_bit to -1.
+</para>
+
+@mask: a #gulong containing flags.
+@nth_bit: the index of the bit to start the search from.
+@Returns: the index of the first bit set which is higher than @nth_bit.
+
+
+<!-- ##### FUNCTION g_bit_nth_msf ##### -->
+<para>
+Find the position of the first bit set in @mask, searching from (but not
+including) @nth_bit downwards. Bits are numbered from 0 (least significant)
+to sizeof(#gulong) * 8 - 1 (31 or 63, usually). To start searching from the
+last bit, set @nth_bit to -1 or GLIB_SIZEOF_LONG * 8.
+</para>
+
+@mask: a #gulong containing flags.
+@nth_bit: the index of the bit to start the search from.
+@Returns: the index of the first bit set which is lower than @nth_bit.
+
+
+<!-- ##### FUNCTION g_bit_storage ##### -->
+<para>
+Gets the number of bits used to hold @number,
+e.g. if @number is 4, 3 bits are needed.
+</para>
+
+@number: a guint.
+@Returns: the number of bits used to hold @number.
+
+
+<!-- ##### FUNCTION g_spaced_primes_closest ##### -->
+<para>
+Gets the smallest prime number from a built-in array of primes which
+is larger than @num. This is used within GLib to calculate the optimum
+size of a #GHashTable.
+</para>
+<para>
+The built-in array of primes ranges from 11 to 13845163 such that
+each prime is approximately 1.5-2 times the previous prime.
+</para>
+
+@num: a #guint.
+@Returns: the smallest prime number from a built-in array of primes which is
+larger than @num.
+
+
+<!-- ##### FUNCTION g_atexit ##### -->
+<para>
+
+</para>
+
+@func: 
+
+
+<!-- ##### FUNCTION g_parse_debug_string ##### -->
+<para>
+
+</para>
+
+@string: 
+@keys: 
+@nkeys: 
+@Returns: 
+
+
+<!-- ##### STRUCT GDebugKey ##### -->
+<para>
+Associates a string with a bit flag.
+Used in g_parse_debug_string().
+</para>
+
+@key: the string
+@value: the flag
+
+<!-- ##### USER_FUNCTION GVoidFunc ##### -->
+<para>
+Declares a type of function which takes no arguments and has no return value.
+It is used to specify the type function passed to g_atexit().
+</para>
+
+
+
+<!-- ##### USER_FUNCTION GFreeFunc ##### -->
+<para>
+Declares a type of function which takes an arbitrary data pointer argument
+and has no return value. It is not currently used in GLib or GTK+.
+</para>
+
+@data: a data pointer.
+
+
+<!-- ##### FUNCTION g_qsort_with_data ##### -->
+<para>
+
+</para>
+
+@pbase: 
+@total_elems: 
+@size: 
+@compare_func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_nullify_pointer ##### -->
+<para>
+
+</para>
+
+@nullify_location: 
+
+
diff --git a/docs/reference/glib/tmpl/modules.sgml b/docs/reference/glib/tmpl/modules.sgml
new file mode 100644
index 0000000..c47df35
--- /dev/null
+++ b/docs/reference/glib/tmpl/modules.sgml
@@ -0,0 +1,284 @@
+<!-- ##### SECTION Title ##### -->
+Dynamic Loading of Modules
+
+<!-- ##### SECTION Short_Description ##### -->
+portable method for dynamically loading 'plug-ins'
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These functions provide a portable way to dynamically load object files
+(commonly known as 'plug-ins').
+The current implementation supports all systems that provide
+an implementation of dlopen() (e.g. Linux/Sun), as well as HP-UX via its
+shl_load() mechanism, and Windows platforms via DLLs.
+</para>
+
+<para>
+A program which wants to use these functions must be linked to the
+libraries output by the command <command>pkg-config --libs gmodule-2.0</command>.
+</para>
+
+<para>
+To use them you must first determine whether dynamic loading
+is supported on the platform by calling g_module_supported().
+If it is, you can open a module with g_module_open(),
+find the module's symbols (e.g. function names) with g_module_symbol(),
+and later close the module with g_module_close().
+g_module_name() will return the file name of a currently opened module.
+</para>
+<para>
+If any of the above functions fail, the error status can be found with
+g_module_error().
+</para>
+<para>
+The #GModule implementation features reference counting for opened modules,
+and supports hook functions within a module which are called when the
+module is loaded and unloaded (see #GModuleCheckInit and #GModuleUnload).
+</para>
+<para>
+If your module introduces static data to common subsystems in the running
+program, e.g. through calling <literal>g_quark_from_static_string ("my-module-stuff")</literal>,
+it must ensure that it is never unloaded, by calling g_module_make_resident().
+</para>
+
+<para>
+<example>
+<title>Calling a function defined in a <structname>GModule</structname></title>
+<programlisting>
+/* the function signature for 'say_hello' */
+typedef void (* SayHelloFunc) (const char *message);
+
+gboolean
+just_say_hello (const char *filename, GError **error)
+{
+  SayHelloFunc  say_hello;
+  GModule      *module;
+
+  module = g_module_open (filename, G_MODULE_BIND_LAZY);
+  if (!module)
+    {
+      g_set_error (error, FOO_ERROR, FOO_ERROR_BLAH,
+		   "&percnt;s", g_module_error (<!-- -->));
+      return FALSE;
+    }
+
+  if (!g_module_symbol (module, "say_hello", (gpointer *)&amp;say_hello))
+    {
+      g_set_error (error, SAY_ERROR, SAY_ERROR_OPEN,
+		   "&percnt;s: &percnt;s", filename, g_module_error (<!-- -->));
+      if (!g_module_close (module))
+	g_warning ("&percnt;s: &percnt;s", filename, g_module_error (<!-- -->));
+      return FALSE;
+    }
+
+  if (say_hello == NULL)
+    {
+      g_set_error (error, SAY_ERROR, SAY_ERROR_OPEN, "symbol say_hello is NULL");
+      if (!g_module_close (module))
+	g_warning ("&percnt;s: &percnt;s", filename, g_module_error (<!-- -->));
+      return FALSE;
+    }
+
+  /* call our function in the module */
+  say_hello ("Hello world!");
+
+  if (!g_module_close (module))
+    g_warning ("&percnt;s: &percnt;s", filename, g_module_error (<!-- -->));
+
+  return TRUE;
+}
+</programlisting>
+</example>
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GModule ##### -->
+<para>
+The #GModule struct is an opaque data structure to represent a
+<link linkend="glib-Dynamic-Loading-of-Modules">Dynamically-Loaded Module</link>.
+It should only be accessed via the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_module_supported ##### -->
+<para>
+Checks if modules are supported on the current platform.
+</para>
+
+@Returns: %TRUE if modules are supported.
+
+
+<!-- ##### FUNCTION g_module_build_path ##### -->
+<para>
+A portable way to build the filename of a module. The platform-specific
+prefix and suffix are added to the filename, if needed, and the result is
+added to the directory, using the correct separator character.
+</para>
+<para>
+The directory should specify the directory where the module can be found.
+It can be %NULL or an empty string to indicate that the module is in a standard
+platform-specific directory, though this is not recommended since the
+wrong module may be found.
+</para>
+<para>
+For example, calling g_module_build_path() on a Linux system with a @directory
+of <filename>/lib</filename> and a @module_name of "mylibrary" will return 
+<filename>/lib/libmylibrary.so</filename>. On a Windows system, using 
+<filename>\Windows</filename> as the directory it will return
+<filename>\Windows\mylibrary.dll</filename>.
+</para>
+
+@directory: the directory where the module is. This can be %NULL or the empty
+string to indicate that the standard platform-specific directories will be 
+used, though that is not recommended.
+@module_name: the name of the module.
+@Returns: the complete path of the module, including the standard library
+prefix and suffix. This should be freed when no longer needed.
+
+
+<!-- ##### FUNCTION g_module_open ##### -->
+<para>
+Opens a module. If the module has already been opened, its reference
+count is incremented. 
+</para>
+
+<para>
+First of all g_module_open() tries to open @file_name as a module. If
+that fails and @file_name has the ".la"-suffix (and is a libtool archive) 
+it tries to open the corresponding module. If that fails and it doesn't 
+have the proper module suffix for the platform (#G_MODULE_SUFFIX), this 
+suffix will be appended and the corresponding module will be opended. If 
+that fails and @file_name doesn't have the ".la"-suffix, this suffix is 
+appended and g_module_open() tries to open the corresponding module. If 
+eventually that fails as well, %NULL is returned.
+</para>
+
+@file_name: the name of the file containing the module, or %NULL to obtain
+  a #GModule representing the main program itself.
+@flags: the flags used for opening the module. This can be the logical
+OR of any of the #GModuleFlags.
+@Returns: a #GModule on success, or %NULL on failure.
+
+
+<!-- ##### ENUM GModuleFlags ##### -->
+<para>
+Flags passed to g_module_open(). Note that these flags are
+not supported on all platforms.
+</para>
+
+@G_MODULE_BIND_LAZY: specifies that symbols are only resolved when needed.
+  The default action is to bind all symbols when the module is loaded.
+@G_MODULE_BIND_LOCAL: specifies that symbols in the module should
+  not be added to the global name space.  The default action on most
+  platforms is to place symbols in the module in the global name space,
+  which may cause conflicts with existing symbols.
+@G_MODULE_BIND_MASK: mask for all flags.
+
+<!-- ##### FUNCTION g_module_symbol ##### -->
+<para>
+Gets a symbol pointer from a module, such as one exported by #G_MODULE_EXPORT.
+</para>
+<para>
+Note that a valid symbol can be %NULL.
+</para>
+
+@module: a #GModule.
+@symbol_name: the name of the symbol to find.
+@symbol: returns the pointer to the symbol value.
+@Returns: %TRUE on success.
+
+
+<!-- ##### FUNCTION g_module_name ##### -->
+<para>
+Gets the filename from a #GModule.
+</para>
+
+@module: a #GModule.
+@Returns: the filename of the module, or "main" if the module is the main
+program itself.
+
+
+<!-- ##### FUNCTION g_module_make_resident ##### -->
+<para>
+Ensures that a module will never be unloaded.
+Any future g_module_close() calls on the module will be ignored.
+</para>
+
+@module: a #GModule to make permanently resident.
+
+
+<!-- ##### FUNCTION g_module_close ##### -->
+<para>
+Closes a module.
+</para>
+
+@module: a #GModule to close.
+@Returns: %TRUE on success.
+
+
+<!-- ##### FUNCTION g_module_error ##### -->
+<para>
+Gets a string describing the last module error.
+</para>
+
+@Returns: a string describing the last module error.
+
+
+<!-- ##### USER_FUNCTION GModuleCheckInit ##### -->
+<para>
+Specifies the type of the module initialization function.
+<indexterm zone="g-module-check-init"><primary>g_module_check_init</primary></indexterm>
+If a module contains a function named g_module_check_init() it is called
+automatically when the module is loaded. It is passed the #GModule structure
+and should return %NULL on success or a string describing the initialization
+error.
+</para>
+
+@module: the #GModule corresponding to the module which has just been loaded.
+@Returns: %NULL on success, or a string describing the initialization error.
+
+
+<!-- ##### USER_FUNCTION GModuleUnload ##### -->
+<para>
+<indexterm zone="g-module-unload"><primary>g_module_unload</primary></indexterm>
+Specifies the type of the module function called when it is unloaded.
+If a module contains a function named g_module_unload() it is called
+automatically when the module is unloaded.
+It is passed the #GModule structure.
+</para>
+
+@module: the #GModule about to be unloaded.
+
+
+<!-- ##### MACRO G_MODULE_SUFFIX ##### -->
+<para>
+Expands to the proper shared library suffix for the current platform
+without the leading dot. For the most Unices and Linux this is "so",
+for some HP-UX versions this is "sl" and for Windows this is "dll".
+</para>
+
+
+
+<!-- ##### MACRO G_MODULE_EXPORT ##### -->
+<para>
+Used to declare functions exported by modules. This is a no-op on Linux and
+Unices, but when compiling for Windows, it marks a symbol to be exported from
+the library or executable being built.
+</para>
+
+
+
+<!-- ##### MACRO G_MODULE_IMPORT ##### -->
+<para>
+Used to declare functions imported from modules.
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/numerical.sgml b/docs/reference/glib/tmpl/numerical.sgml
new file mode 100644
index 0000000..271cf90
--- /dev/null
+++ b/docs/reference/glib/tmpl/numerical.sgml
@@ -0,0 +1,122 @@
+<!-- ##### SECTION Title ##### -->
+Numerical Definitions
+
+<!-- ##### SECTION Short_Description ##### -->
+mathematical constants, and floating point decomposition
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+GLib offers mathematical constants such as #G_PI for the value of pi;
+many platforms have these in the C library, but some don't, the GLib
+versions always exist.
+</para>
+
+<para>
+The #GFloatIEEE754 and #GDoubleIEEE754 unions are used to access the
+	sign, mantissa and exponent of IEEE floats and doubles. These
+	unions are defined as appropriate for a given platform. 
+ IEEE floats and doubles are supported (used for
+	storage) by at least Intel, PPC and Sparc, for reference: <ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_IEEE754_FLOAT_BIAS ##### -->
+<para>
+See <ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+
+
+<!-- ##### MACRO G_IEEE754_DOUBLE_BIAS ##### -->
+<para>
+See <ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+
+
+<!-- ##### UNION GFloatIEEE754 ##### -->
+<para>
+The #GFloatIEEE754 and #GDoubleIEEE754 unions are used to access the
+	sign, mantissa and exponent of IEEE floats and doubles. These
+	unions are defined as appropriate for a given platform. 
+ IEEE floats and doubles are supported (used for
+	storage) by at least Intel, PPC and Sparc, for reference: 
+<ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+
+<!-- ##### UNION GDoubleIEEE754 ##### -->
+<para>
+The #GFloatIEEE754 and #GDoubleIEEE754 unions are used to access the
+	sign, mantissa and exponent of IEEE floats and doubles. These
+	unions are defined as appropriate for a given platform. 
+ IEEE floats and doubles are supported (used for
+	storage) by at least Intel, PPC and Sparc, for reference: 
+<ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+
+<!-- ##### MACRO G_E ##### -->
+<para>
+The base of natural logarithms.
+</para>
+
+
+
+<!-- ##### MACRO G_LN2 ##### -->
+<para>
+The natural logarithm of 2.
+</para>
+
+
+
+<!-- ##### MACRO G_LN10 ##### -->
+<para>
+The natural logarithm of 10.
+</para>
+
+
+
+<!-- ##### MACRO G_PI ##### -->
+<para>
+The value of pi (ratio of circle's circumference to its diameter).
+</para>
+
+
+
+<!-- ##### MACRO G_PI_2 ##### -->
+<para>
+Pi divided by 2.
+</para>
+
+
+
+<!-- ##### MACRO G_PI_4 ##### -->
+<para>
+Pi divided by 4.
+</para>
+
+
+
+<!-- ##### MACRO G_SQRT2 ##### -->
+<para>
+The square root of two.
+</para>
+
+
+
+<!-- ##### MACRO G_LOG_2_BASE_10 ##### -->
+<para>
+Used for fooling around with float formats, see 
+<ulink url="http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html">http://cch.loria.fr/documentation/IEEE754/numerical_comp_guide/ncg_math.doc.html</ulink>
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/option.sgml b/docs/reference/glib/tmpl/option.sgml
new file mode 100644
index 0000000..30757bc
--- /dev/null
+++ b/docs/reference/glib/tmpl/option.sgml
@@ -0,0 +1,603 @@
+<!-- ##### SECTION Title ##### -->
+Commandline option parser
+
+<!-- ##### SECTION Short_Description ##### -->
+parses commandline options
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The GOption commandline parser is intended to be a simpler replacement for the
+popt library. It supports short and long commandline options, as shown in the 
+following example:
+</para>
+
+<para>
+<literal>testtreemodel -r 1 --max-size 20 --rand --display=:1.0 -vb -- file1 file2</literal>
+</para>
+
+<para>
+The example demonstrates a number of features of the GOption commandline parser
+<itemizedlist>
+<listitem><para>
+  Options can be single letters, prefixed by a single dash. Multiple
+  short options can be grouped behind a single dash.
+</para></listitem>
+<listitem><para>
+  Long options are prefixed by two consecutive dashes.
+</para></listitem>
+<listitem><para>
+  Options can have an extra argument, which can be a number, a string or a 
+  filename. For long options, the extra argument can be appended with an 
+  equals sign after the option name.
+</para></listitem>
+<listitem><para>
+  Non-option arguments are returned to the application as rest arguments.
+</para></listitem>
+<listitem><para>
+  An argument consisting solely of two dashes turns off further parsing, 
+  any remaining arguments (even those starting with a dash) are returned 
+  to the application as rest arguments.
+</para></listitem>
+</itemizedlist>
+</para>
+
+<para>
+Another important feature of GOption is that it can automatically generate 
+nicely formatted help output. Unless it is explicitly turned off with 
+g_option_context_set_help_enabled(), GOption will recognize the 
+<option>--help</option>, <option>-?</option>, <option>--help-all</option>
+and <option>--help-</option><replaceable>groupname</replaceable> options 
+(where <replaceable>groupname</replaceable> is the name of a #GOptionGroup) 
+and write a text similar to the one shown in the following example to stdout.
+</para>
+
+<informalexample><screen>
+Usage:
+  testtreemodel [OPTION...] - test tree model performance
+
+Help Options:
+  -?, --help               Show help options
+  --help-all               Show all help options
+  --help-gtk               Show GTK+ Options
+
+Application Options:
+  -r, --repeats=N          Average over N repetitions
+  -m, --max-size=M         Test up to 2^M items
+  --display=DISPLAY        X display to use
+  -v, --verbose            Be verbose
+  -b, --beep               Beep when done   
+  --rand                   Randomize the data
+</screen></informalexample>
+
+<para>
+GOption groups options in #GOptionGroup<!-- -->s, which makes it easy to
+incorporate options from multiple sources. The intended use for this is
+to let applications collect option groups from the libraries it uses,
+add them to their #GOptionContext, and parse all options by a single call
+to g_option_context_parse(). See gtk_get_option_group() for an example.
+</para>
+
+<para>
+If an option is declared to be of type string or filename, GOption takes
+care of converting it to the right encoding; strings are returned in UTF-8,
+filenames are returned in the GLib filename encoding. Note that this only
+works if setlocale() has been called before g_option_context_parse().
+</para>
+
+<para>
+Here is a complete example of setting up GOption to parse the example
+commandline above and produce the example help output.
+</para>
+<informalexample><programlisting>
+static gint repeats = 2;
+static gint max_size = 8;
+static gboolean verbose = FALSE;
+static gboolean beep = FALSE;
+static gboolean rand = FALSE;
+
+static GOptionEntry entries[] = 
+{
+  { "repeats", 'r', 0, G_OPTION_ARG_INT, &amp;repeats, "Average over N repetitions", "N" },
+  { "max-size", 'm', 0, G_OPTION_ARG_INT, &amp;max_size, "Test up to 2^M items", "M" },
+  { "verbose", 'v', 0, G_OPTION_ARG_NONE, &amp;verbose, "Be verbose", NULL },
+  { "beep", 'b', 0, G_OPTION_ARG_NONE, &amp;beep, "Beep when done", NULL },
+  { "rand", 0, 0, G_OPTION_ARG_NONE, &amp;rand, "Randomize the data", NULL },
+  { NULL }
+};
+
+int 
+main (int argc, char *argv[])
+{
+  GError *error = NULL;
+  GOptionContext *context;
+
+  context = g_option_context_new ("- test tree model performance");
+  g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
+  g_option_context_add_group (context, gtk_get_option_group (TRUE));
+  if (!g_option_context_parse (context, &amp;argc, &amp;argv, &amp;error))
+    {
+      g_print ("option parsing failed: %s\n", error->message);
+      exit (1);
+    }
+
+  /* ... */
+
+}
+</programlisting></informalexample>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GOptionError ##### -->
+<para>
+Error codes returned by option parsing.
+</para>
+
+@G_OPTION_ERROR_UNKNOWN_OPTION: An option was not known to the parser.
+  This error will only be reported, if the parser hasn't been instructed
+  to ignore unknown options, see g_option_context_set_ignore_unknown_options().
+@G_OPTION_ERROR_BAD_VALUE: A value couldn't be parsed.
+@G_OPTION_ERROR_FAILED: A #GOptionArgFunc callback failed.
+
+<!-- ##### MACRO G_OPTION_ERROR ##### -->
+<para>
+Error domain for option parsing. Errors in this domain will
+be from the #GOptionError enumeration. See #GError for information on 
+error domains.
+</para>
+
+
+
+<!-- ##### USER_FUNCTION GOptionArgFunc ##### -->
+<para>
+The type of function to be passed as callback for %G_OPTION_ARG_CALLBACK
+options.
+</para>
+
+@option_name: The name of the option being parsed. This will be either a 
+  single dash followed by a single letter (for a short name) or two dashes
+  followed by a long option name.
+@value: The value to be parsed.
+@data: User data added to the #GOptionGroup containing the option when it
+  was created with g_option_group_new()
+@error: A return location for errors. The error code %G_OPTION_ERROR_FAILED
+  is intended to be used for errors in #GOptionArgFunc callbacks.
+@Returns: %TRUE if the option was successfully parsed, %FALSE if an error 
+  occurred, in which case @error should be set with g_set_error()
+
+
+<!-- ##### STRUCT GOptionContext ##### -->
+<para>
+A <structname>GOptionContext</structname> struct defines which options
+are accepted by the commandline option parser. The struct has only private 
+fields and should not be directly accessed.
+</para>
+
+
+<!-- ##### FUNCTION g_option_context_new ##### -->
+<para>
+
+</para>
+
+@parameter_string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_context_set_summary ##### -->
+<para>
+
+</para>
+
+@context: 
+@summary: 
+
+
+<!-- ##### FUNCTION g_option_context_get_summary ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_context_set_description ##### -->
+<para>
+
+</para>
+
+@context: 
+@description: 
+
+
+<!-- ##### FUNCTION g_option_context_get_description ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GTranslateFunc ##### -->
+<para>
+The type of functions which are used to translate user-visible
+strings, for <option>--help</option> output.
+</para>
+
+@str: the untranslated string
+@data: user data specified when installing the function, e.g.
+  in g_option_group_set_translate_func()
+@Returns: a translation of the string for the current locale.
+  The returned string is owned by GLib and must not be freed.
+
+
+<!-- ##### FUNCTION g_option_context_set_translate_func ##### -->
+<para>
+
+</para>
+
+@context: 
+@func: 
+@data: 
+@destroy_notify: 
+
+
+<!-- ##### FUNCTION g_option_context_set_translation_domain ##### -->
+<para>
+
+</para>
+
+@context: 
+@domain: 
+
+
+<!-- ##### FUNCTION g_option_context_free ##### -->
+<para>
+
+</para>
+
+@context: 
+
+
+<!-- ##### FUNCTION g_option_context_parse ##### -->
+<para>
+
+</para>
+
+@context: 
+@argc: 
+@argv: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_context_set_help_enabled ##### -->
+<para>
+
+</para>
+
+@context: 
+@help_enabled: 
+
+
+<!-- ##### FUNCTION g_option_context_get_help_enabled ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_context_set_ignore_unknown_options ##### -->
+<para>
+
+</para>
+
+@context: 
+@ignore_unknown: 
+
+
+<!-- ##### FUNCTION g_option_context_get_ignore_unknown_options ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_context_get_help ##### -->
+<para>
+
+</para>
+
+@context: 
+@main_help: 
+@group: 
+@Returns: 
+
+
+<!-- ##### ENUM GOptionArg ##### -->
+<para>
+The #GOptionArg enum values determine which type of extra argument the
+options expect to find. If an option expects an extra argument, it
+can be specified in several ways; with a short option:
+<option>-x arg</option>, with a long option: <option>--name arg</option>
+or combined in a single argument: <option>--name=arg</option>.
+</para>
+
+@G_OPTION_ARG_NONE: No extra argument. This is useful for simple flags.
+@G_OPTION_ARG_STRING: The option takes a string argument.
+@G_OPTION_ARG_INT: The option takes an integer argument.
+@G_OPTION_ARG_CALLBACK: The option provides a callback to parse the
+  extra argument.
+@G_OPTION_ARG_FILENAME: The option takes a filename as argument.
+@G_OPTION_ARG_STRING_ARRAY: The option takes a string argument, multiple
+  uses of the option are collected into an array of strings.
+@G_OPTION_ARG_FILENAME_ARRAY: The option takes a filename as argument, 
+  multiple uses of the option are collected into an array of strings.
+@G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument
+  can be formatted either for the user's locale or for the "C" locale. Since 2.12
+@G_OPTION_ARG_INT64: The option takes a 64-bit integer. Like %G_OPTION_ARG_INT
+  but for larger numbers. The number can be in decimal base, or in hexadecimal
+  (when prefixed with <literal>0x</literal>, for example, <literal>0xffffffff</literal>).
+  Since 2.12
+
+<!-- ##### ENUM GOptionFlags ##### -->
+<para>
+Flags which modify individual options.
+</para>
+
+@G_OPTION_FLAG_HIDDEN: The option doesn't appear in <option>--help</option>
+   output.
+@G_OPTION_FLAG_IN_MAIN: The option appears in the main section of the
+   <option>--help</option> output, even if it is defined in a group.
+@G_OPTION_FLAG_REVERSE: For options of the %G_OPTION_ARG_NONE kind, this flag
+   indicates that the sense of the option is reversed.
+@G_OPTION_FLAG_NO_ARG: For options of the %G_OPTION_ARG_CALLBACK kind,
+   this flag indicates that the callback does not take any argument
+   (like a %G_OPTION_ARG_NONE option). Since 2.8
+@G_OPTION_FLAG_FILENAME: For options of the %G_OPTION_ARG_CALLBACK
+   kind, this flag indicates that the argument should be passed to the
+   callback in the GLib filename encoding rather than UTF-8. Since 2.8
+@G_OPTION_FLAG_OPTIONAL_ARG: For options of the %G_OPTION_ARG_CALLBACK 
+   kind, this flag indicates that the argument supply is optional. If no argument
+   is given then data of %GOptionParseFunc will be set to NULL. Since 2.8
+@G_OPTION_FLAG_NOALIAS: This flag turns off the automatic conflict resolution
+   which prefixes long option names with <literal>groupname-</literal> if 
+   there is a conflict. This option should only be used in situations where
+   aliasing is necessary to model some legacy commandline interface. It is
+   not safe to use this option, unless all option groups are under your 
+   direct control. Since 2.8.
+
+<!-- ##### MACRO G_OPTION_REMAINING ##### -->
+<para>
+If a long option in the main group has this name, it is not treated as a 
+regular option. Instead it collects all non-option arguments which would
+otherwise be left in <literal>argv</literal>. The option must be of type
+%G_OPTION_ARG_CALLBACK, %G_OPTION_ARG_STRING_ARRAY
+or %G_OPTION_ARG_FILENAME_ARRAY.
+</para>
+
+<para>
+Using #G_OPTION_REMAINING instead of simply scanning <literal>argv</literal>
+for leftover arguments has the advantage that GOption takes care of 
+necessary encoding conversions for strings or filenames.
+</para>
+
+@Since: 2.6
+
+
+<!-- ##### STRUCT GOptionEntry ##### -->
+<para>
+A <structname>GOptionEntry</structname> defines a single option.
+To have an effect, they must be added to a #GOptionGroup with
+g_option_context_add_main_entries() or g_option_group_add_entries().
+</para>
+
+@long_name: The long name of an option can be used to specify it
+  in a commandline as --<replaceable>long_name</replaceable>. Every
+  option must have a long name. To resolve conflicts if multiple
+  option groups contain the same long name, it is also possible to
+  specify the option as 
+  --<replaceable>groupname</replaceable>-<replaceable>long_name</replaceable>.
+@short_name: If an option has a short name, it can be specified
+  -<replaceable>short_name</replaceable> in a commandline. @short_name must be 
+  a printable ASCII character different from '-', or zero if the option has no
+  short name.
+@flags: Flags from #GOptionFlags.
+@arg: The type of the option, as a #GOptionArg.
+@arg_data:  If the @arg type is %G_OPTION_ARG_CALLBACK, then @arg_data must 
+ point to a #GOptionArgFunc callback function, which will be called to handle 
+ the extra argument. Otherwise, @arg_data is a pointer to a location to store 
+ the value, the required type of the location depends on the @arg type:
+  <variablelist>
+    <varlistentry>
+      <term>%G_OPTION_ARG_NONE</term>
+      <listitem><para>%gboolean</para></listitem>
+    </varlistentry>
+    <varlistentry>
+      <term>%G_OPTION_ARG_STRING</term>
+      <listitem><para>%gchar*</para></listitem>
+    </varlistentry>
+    <varlistentry>
+      <term>%G_OPTION_ARG_INT</term>
+      <listitem><para>%gint</para></listitem>
+    </varlistentry>
+    <varlistentry>
+      <term>%G_OPTION_ARG_FILENAME</term>
+      <listitem><para>%gchar*</para></listitem>
+    </varlistentry>
+    <varlistentry>
+      <term>%G_OPTION_ARG_STRING_ARRAY</term>
+      <listitem><para>%gchar**</para></listitem>
+    </varlistentry>
+    <varlistentry>
+      <term>%G_OPTION_ARG_FILENAME_ARRAY</term>
+      <listitem><para>%gchar**</para></listitem>
+    </varlistentry>
+    <varlistentry>
+      <term>%G_OPTION_ARG_DOUBLE</term>
+      <listitem><para>%gdouble</para></listitem>
+    </varlistentry>
+  </variablelist>
+@description: the description for the option in <option>--help</option>
+  output. The @description is translated using the @translate_func of the
+  group, see g_option_group_set_translation_domain().
+@arg_description: The placeholder to use for the extra argument parsed
+  by the option in <option>--help</option>
+  output. The @arg_description is translated using the @translate_func of the
+  group, see g_option_group_set_translation_domain().
+
+<!-- ##### FUNCTION g_option_context_add_main_entries ##### -->
+<para>
+
+</para>
+
+@context: 
+@entries: 
+@translation_domain: 
+
+
+<!-- ##### STRUCT GOptionGroup ##### -->
+<para>
+A <structname>GOptionGroup</structname> struct defines the options in a single
+group. The struct has only private fields and should not be directly accessed. 
+</para>
+<para>
+All options in a group share the same translation function. Libaries which
+need to parse commandline options are expected to provide a function for
+getting a <structname>GOptionGroup</structname> holding their options, which 
+the application can then add to its #GOptionContext.
+</para>
+
+
+<!-- ##### FUNCTION g_option_context_add_group ##### -->
+<para>
+
+</para>
+
+@context: 
+@group: 
+
+
+<!-- ##### FUNCTION g_option_context_set_main_group ##### -->
+<para>
+
+</para>
+
+@context: 
+@group: 
+
+
+<!-- ##### FUNCTION g_option_context_get_main_group ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_group_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@description: 
+@help_description: 
+@user_data: 
+@destroy: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_option_group_free ##### -->
+<para>
+
+</para>
+
+@group: 
+
+
+<!-- ##### FUNCTION g_option_group_add_entries ##### -->
+<para>
+
+</para>
+
+@group: 
+@entries: 
+
+
+<!-- ##### USER_FUNCTION GOptionParseFunc ##### -->
+<para>
+The type of function that can be called before and after parsing. 
+</para>
+
+@context: The active #GOptionContext
+@group: The group to which the function belongs
+@data: User data added to the #GOptionGroup containing the option when it
+  was created with g_option_group_new()
+@error: A return location for error details
+@Returns: %TRUE if the function completed successfully, %FALSE if an error 
+  occurred, in which case @error should be set with g_set_error()
+
+
+<!-- ##### FUNCTION g_option_group_set_parse_hooks ##### -->
+<para>
+
+</para>
+
+@group: 
+@pre_parse_func: 
+@post_parse_func: 
+
+
+<!-- ##### USER_FUNCTION GOptionErrorFunc ##### -->
+<para>
+The type of function to be used as callback when a parse error occurs.
+</para>
+
+@context: The active #GOptionContext
+@group: The group to which the function belongs
+@data: User data added to the #GOptionGroup containing the option when it
+  was created with g_option_group_new()
+@error: The #GError containing details about the parse error
+
+
+<!-- ##### FUNCTION g_option_group_set_error_hook ##### -->
+<para>
+
+</para>
+
+@group: 
+@error_func: 
+
+
+<!-- ##### FUNCTION g_option_group_set_translate_func ##### -->
+<para>
+
+</para>
+
+@group: 
+@func: 
+@data: 
+@destroy_notify: 
+
+
+<!-- ##### FUNCTION g_option_group_set_translation_domain ##### -->
+<para>
+
+</para>
+
+@group: 
+@domain: 
+
+
diff --git a/docs/reference/glib/tmpl/patterns.sgml b/docs/reference/glib/tmpl/patterns.sgml
new file mode 100644
index 0000000..8e776c5
--- /dev/null
+++ b/docs/reference/glib/tmpl/patterns.sgml
@@ -0,0 +1,124 @@
+<!-- ##### SECTION Title ##### -->
+Glob-style pattern matching
+
+<!-- ##### SECTION Short_Description ##### -->
+matches strings against patterns containing '*' (wildcard) and '?' (joker)
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The <function>g_pattern_match*</function> functions match a string 
+against a pattern containing '*' and '?' wildcards with similar semantics 
+as the standard glob() function: '*' matches an arbitrary, possibly empty, 
+string, '?' matches an arbitrary character.
+</para>
+<para>
+Note that in contrast to glob(), the '/' character <emphasis>can</emphasis> 
+be matched by the wildcards, there are no '[...]' character ranges and '*' 
+and '?' can <emphasis>not</emphasis> be escaped to include them literally 
+in a pattern. 
+</para>
+<para>
+When multiple strings must be matched against the same pattern, it is 
+better to compile the pattern to a #GPatternSpec using g_pattern_spec_new() 
+and use g_pattern_match_string() instead of g_pattern_match_simple(). This 
+avoids the overhead of repeated pattern compilation.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GPatternSpec ##### -->
+<para>
+A <structname>GPatternSpec</structname> is the 'compiled' form of a pattern.
+This structure is opaque and its fields cannot be accessed directly.
+</para>
+
+
+<!-- ##### FUNCTION g_pattern_spec_new ##### -->
+<para>
+Compiles a pattern to a #GPatternSpec.
+</para>
+
+@pattern: a zero-terminated UTF-8 encoded string
+@Returns: a newly-allocated #GPatternSpec
+
+
+<!-- ##### FUNCTION g_pattern_spec_free ##### -->
+<para>
+Frees the memory allocated for the #GPatternSpec.
+</para>
+
+@pspec: a #GPatternSpec
+
+
+<!-- ##### FUNCTION g_pattern_spec_equal ##### -->
+<para>
+Compares two compiled pattern specs and returns whether they
+will match the same set of strings.
+</para>
+
+@pspec1: a #GPatternSpec
+@pspec2: another #GPatternSpec
+@Returns: Whether the compiled patterns are equal
+
+
+<!-- ##### FUNCTION g_pattern_match ##### -->
+<para>
+Matches a string against a compiled pattern. Passing the correct length of 
+the string given is mandatory. The reversed string can be omitted by passing 
+%NULL, this is more efficient if the reversed version of the string to be 
+matched is not at hand, as g_pattern_match() will only construct it if the 
+compiled pattern requires reverse matches.
+</para>
+<para>
+Note that, if the user code will (possibly) match a string against a 
+multitude of patterns containing wildcards, chances are high that some 
+patterns will require a reversed string. In this case, it's more efficient 
+to provide the reversed string to avoid multiple constructions thereof in 
+the various calls to g_pattern_match().
+</para>
+<para>
+Note also that the reverse of a UTF-8 encoded string can in general 
+<emphasis>not</emphasis> be obtained by g_strreverse(). This works only 
+if the string doesn't contain any multibyte characters. GLib offers the 
+g_utf8_strreverse() function to reverse UTF-8 encoded strings.
+</para>
+
+@pspec: a #GPatternSpec
+@string_length: the length of @string (in bytes, i.e. strlen(), 
+     <emphasis>not</emphasis> g_utf8_strlen())
+@string: the UTF-8 encoded string to match
+@string_reversed: the reverse of @string or %NULL
+@Returns: %TRUE if @string matches @pspec
+
+
+<!-- ##### FUNCTION g_pattern_match_string ##### -->
+<para>
+Matches a string against a compiled pattern. If the string is to be 
+matched against more than one pattern, consider using g_pattern_match() 
+instead while supplying the reversed string.
+</para>
+
+@pspec: a #GPatternSpec
+@string: the UTF-8 encoded string to match
+@Returns: %TRUE if @string matches @pspec
+
+
+<!-- ##### FUNCTION g_pattern_match_simple ##### -->
+<para>
+Matches a string against a pattern given as a string.
+If this function is to be called in a loop, it's more efficient to compile
+the pattern once with g_pattern_spec_new() and call g_pattern_match_string()
+repeatedly.
+</para>
+
+@pattern: the UTF-8 encoded pattern
+@string: the UTF-8 encoded string to match
+@Returns: %TRUE if @string matches @pspec
+
+
diff --git a/docs/reference/glib/tmpl/quarks.sgml b/docs/reference/glib/tmpl/quarks.sgml
new file mode 100644
index 0000000..8e928a8
--- /dev/null
+++ b/docs/reference/glib/tmpl/quarks.sgml
@@ -0,0 +1,124 @@
+<!-- ##### SECTION Title ##### -->
+Quarks
+
+<!-- ##### SECTION Short_Description ##### -->
+a 2-way association between a string and a unique integer identifier
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Quarks are associations between strings and integer identifiers.
+Given either the string or the #GQuark identifier it is possible to
+retrieve the other.
+</para>
+<para>
+Quarks are used for both
+<link linkend="glib-datasets">Datasets</link> and
+<link linkend="glib-keyed-data-lists">Keyed Data Lists</link>.
+</para>
+<para>
+To create a new quark from a string, use g_quark_from_string() or
+g_quark_from_static_string().
+</para>
+<para>
+To find the string corresponding to a given #GQuark, use g_quark_to_string().
+</para>
+<para>
+To find the #GQuark corresponding to a given string, use g_quark_try_string().
+</para>
+<para>
+Another use for the string pool maintained for the quark functions is string
+interning, using g_intern_string() or g_intern_static_string(). An interned string 
+is a canonical representation for a string. One important advantage of interned strings 
+is that they can be compared for equality by a simple pointer comparision, rather than 
+using strcmp(). 
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### TYPEDEF GQuark ##### -->
+<para>
+A GQuark is a non-zero integer which uniquely identifies a particular string.
+A GQuark value of zero is associated to %NULL.
+</para>
+
+
+<!-- ##### FUNCTION g_quark_from_string ##### -->
+<para>
+Gets the #GQuark identifying the given string.
+If the string does not currently have an associated #GQuark, a new
+#GQuark is created, using a copy of the string.
+</para>
+
+@string: a string.
+@Returns: the #GQuark identifying the string, or 0 if @string is %NULL.
+
+
+<!-- ##### FUNCTION g_quark_from_static_string ##### -->
+<para>
+Gets the #GQuark identifying the given (static) string.
+If the string does not currently have an associated #GQuark, a new
+#GQuark is created, linked to the given string.
+</para>
+<para>
+Note that this function is identical to g_quark_from_string() except
+that if a new #GQuark is created the string itself is used rather than
+a copy. This saves memory, but can only be used if the string will
+<emphasis>always</emphasis> exist. It can be used with statically
+allocated strings in the main program, but not with statically 
+allocated memory in dynamically loaded modules, if you expect to
+ever unload the module again (e.g. do not use this function in
+GTK+ theme engines).
+</para>
+
+@string: a string.
+@Returns: the #GQuark identifying the string, or 0 if @string is %NULL.
+
+
+<!-- ##### FUNCTION g_quark_to_string ##### -->
+<para>
+Gets the string associated with the given #GQuark.
+</para>
+
+@quark: a #GQuark.
+@Returns: the string associated with the #GQuark.
+
+
+<!-- ##### FUNCTION g_quark_try_string ##### -->
+<para>
+Gets the #GQuark associated with the given string, or 0 if string is
+%NULL or it has no associated #GQuark.
+</para>
+<para>
+If you want the GQuark to be created if it doesn't already exist, use
+g_quark_from_string() or g_quark_from_static_string().
+</para>
+
+@string: a string.
+@Returns: the #GQuark associated with the string, or 0 if @string is
+%NULL or there is no #GQuark associated with it.
+
+
+<!-- ##### FUNCTION g_intern_string ##### -->
+<para>
+
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_intern_static_string ##### -->
+<para>
+
+</para>
+
+@string: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/queue.sgml b/docs/reference/glib/tmpl/queue.sgml
new file mode 100644
index 0000000..fbc2667
--- /dev/null
+++ b/docs/reference/glib/tmpl/queue.sgml
@@ -0,0 +1,432 @@
+<!-- ##### SECTION Title ##### -->
+Double-ended Queues
+
+<!-- ##### SECTION Short_Description ##### -->
+double-ended queue data structure
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GQueue structure and its associated functions provide a standard
+queue data structure. Internally, #GQueue uses the same data structure as 
+#GList to store elements.  
+</para>
+<para>
+The data contained in each element can be either integer values, by using one
+of the
+<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
+or simply pointers to any type of data.
+</para>
+<para>
+To create a new #GQueue, use g_queue_new().
+</para>
+<para>
+To initialize a statically-allocated #GQueue, use #G_QUEUE_INIT or
+g_queue_init().
+</para>
+<para>
+To add elements, use g_queue_push_head(), g_queue_push_head_link(), 
+g_queue_push_tail() and g_queue_push_tail_link().
+</para>
+<para>
+To remove elements, use g_queue_pop_head() and g_queue_pop_tail().
+</para>
+<para>
+To free the entire queue, use g_queue_free().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GQueue ##### -->
+<para>
+Contains the public fields of a <link linkend="glib-queues">Queue</link>.
+</para>
+
+@head: a pointer to the first element of the queue.
+@tail: a pointer to the last element of the queue.
+@length: the number of elements in the queue.
+
+<!-- ##### FUNCTION g_queue_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_free ##### -->
+<para>
+
+</para>
+
+@queue: 
+
+
+<!-- ##### MACRO G_QUEUE_INIT ##### -->
+<para>
+A statically-allocated #GQueue must be initialized with this macro before it
+can be used.  This macro can be used to initialize a variable, but it cannot
+be assigned to a variable.  In that case you have to use g_queue_init().
+</para>
+
+<informalexample>
+<programlisting>
+GQueue my_queue = G_QUEUE_INIT;
+</programlisting>
+</informalexample>
+
+@Since: 2.14
+
+
+<!-- ##### FUNCTION g_queue_init ##### -->
+<para>
+
+</para>
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_queue_clear ##### -->
+<para>
+
+</para>
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_queue_is_empty ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_get_length ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_reverse ##### -->
+<para>
+
+</para>
+
+@queue: 
+
+
+<!-- ##### FUNCTION g_queue_copy ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_foreach ##### -->
+<para>
+
+</para>
+
+@queue: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_queue_find ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_find_custom ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_sort ##### -->
+<para>
+
+</para>
+
+@queue: 
+@compare_func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_queue_push_head ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+
+
+<!-- ##### FUNCTION g_queue_push_tail ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+
+
+<!-- ##### FUNCTION g_queue_push_nth ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@n: 
+
+
+<!-- ##### FUNCTION g_queue_pop_head ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_pop_tail ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_pop_nth ##### -->
+<para>
+
+</para>
+
+@queue: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_peek_head ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_peek_tail ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_peek_nth ##### -->
+<para>
+
+</para>
+
+@queue: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_index ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_remove ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+
+
+<!-- ##### FUNCTION g_queue_remove_all ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+
+
+<!-- ##### FUNCTION g_queue_insert_before ##### -->
+<para>
+
+</para>
+
+@queue: 
+@sibling: 
+@data: 
+
+
+<!-- ##### FUNCTION g_queue_insert_after ##### -->
+<para>
+
+</para>
+
+@queue: 
+@sibling: 
+@data: 
+
+
+<!-- ##### FUNCTION g_queue_insert_sorted ##### -->
+<para>
+
+</para>
+
+@queue: 
+@data: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_queue_push_head_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@link_: 
+
+
+<!-- ##### FUNCTION g_queue_push_tail_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@link_: 
+
+
+<!-- ##### FUNCTION g_queue_push_nth_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@n: 
+@link_: 
+
+
+<!-- ##### FUNCTION g_queue_pop_head_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_pop_tail_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_pop_nth_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_peek_head_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_peek_tail_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_peek_nth_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_link_index ##### -->
+<para>
+
+</para>
+
+@queue: 
+@link_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_queue_unlink ##### -->
+<para>
+
+</para>
+
+@queue: 
+@link_: 
+
+
+<!-- ##### FUNCTION g_queue_delete_link ##### -->
+<para>
+
+</para>
+
+@queue: 
+@link_: 
+
+
diff --git a/docs/reference/glib/tmpl/random_numbers.sgml b/docs/reference/glib/tmpl/random_numbers.sgml
new file mode 100644
index 0000000..d26ace5
--- /dev/null
+++ b/docs/reference/glib/tmpl/random_numbers.sgml
@@ -0,0 +1,206 @@
+<!-- ##### SECTION Title ##### -->
+Random Numbers
+
+<!-- ##### SECTION Short_Description ##### -->
+pseudo-random number generator
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The following functions allow you to use a portable, fast and good
+pseudo-random number generator (PRNG). It uses the Mersenne Twister
+PRNG, which was originally developed by Makoto Matsumoto and Takuji
+Nishimura. Further information can be found at <ulink
+url="http://www.math.keio.ac.jp/~matumoto/emt.html"
+>www.math.keio.ac.jp/~matumoto/emt.html</ulink>.
+</para>
+
+<para>
+If you just need a random number, you simply call the 
+<function>g_random_*</function> functions, which will create a globally 
+used #GRand and use the according <function>g_rand_*</function> functions 
+internally. Whenever you need a stream of reproducible random numbers, you 
+better create a #GRand yourself and use the <function>g_rand_*</function> 
+functions directly, which will also be slightly faster. Initializing a #GRand 
+with a certain seed will produce exactly the same series of random numbers 
+on all platforms. This can thus be used as a seed for e.g. games.
+</para>
+
+<para>
+The <function>g_rand*_range</function> functions will return high quality
+equally distributed random numbers, whereas for example the
+<literal>(g_random_int()&percnt;max)</literal> approach often doesn't
+yield equally distributed numbers.
+</para>
+
+<para>
+GLib changed the seeding algorithm for the pseudo-random number
+generator Mersenne Twister, as used by <structname>GRand</structname>
+and <structname>GRandom</structname>. This was necessary, because some
+seeds would yield very bad pseudo-random streams.  Also the
+pseudo-random integers generated by
+<function>g_rand*_int_range()</function> will have a
+slightly better equal distribution with the new version of GLib.
+</para>
+
+<para>
+The original seeding and generation algorithms, as found in GLib 2.0.x,
+can be used instead of the new ones by setting the environment variable
+<envar>G_RANDOM_VERSION</envar> to the value of '2.0'. Use the
+GLib-2.0 algorithms only if you have sequences of numbers generated
+with Glib-2.0 that you need to reproduce exactly.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GRand ##### -->
+<para>
+The #GRand struct is an opaque data structure. It should only be
+accessed through the <function>g_rand_*</function> functions.
+</para>
+
+
+<!-- ##### FUNCTION g_rand_new_with_seed ##### -->
+
+
+@seed: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_new_with_seed_array ##### -->
+<para>
+
+</para>
+
+@seed: 
+@seed_length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_new ##### -->
+
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_copy ##### -->
+<para>
+
+</para>
+
+@rand_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_free ##### -->
+
+
+@rand_: 
+
+
+<!-- ##### FUNCTION g_rand_set_seed ##### -->
+
+
+@rand_: 
+@seed: 
+
+
+<!-- ##### FUNCTION g_rand_set_seed_array ##### -->
+<para>
+
+</para>
+
+@rand_: 
+@seed: 
+@seed_length: 
+
+
+<!-- ##### MACRO g_rand_boolean ##### -->
+<para>
+Returns a random #gboolean from @rand_. This corresponds to a unbiased
+coin toss.
+</para>
+
+@rand_: a #GRand.
+@Returns: a random #gboolean.
+
+
+<!-- ##### FUNCTION g_rand_int ##### -->
+
+
+@rand_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_int_range ##### -->
+
+
+@rand_: 
+@begin: 
+@end: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_double ##### -->
+
+
+@rand_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_rand_double_range ##### -->
+
+
+@rand_: 
+@begin: 
+@end: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_random_set_seed ##### -->
+
+
+@seed: 
+
+
+<!-- ##### MACRO g_random_boolean ##### -->
+<para>
+Returns a random #gboolean. This corresponds to a unbiased coin toss.
+</para>
+
+@Returns: a random #gboolean.
+
+
+<!-- ##### FUNCTION g_random_int ##### -->
+
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_random_int_range ##### -->
+
+
+@begin: 
+@end: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_random_double ##### -->
+
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_random_double_range ##### -->
+
+
+@begin: 
+@end: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/relations.sgml b/docs/reference/glib/tmpl/relations.sgml
new file mode 100644
index 0000000..33f279f
--- /dev/null
+++ b/docs/reference/glib/tmpl/relations.sgml
@@ -0,0 +1,204 @@
+<!-- ##### SECTION Title ##### -->
+Relations and Tuples
+
+<!-- ##### SECTION Short_Description ##### -->
+tables of data which can be indexed on any number of fields
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+A #GRelation is a table of data which can be indexed on any number of fields,
+rather like simple database tables. A #GRelation contains a number of
+records, called tuples. Each record contains a number of fields.
+Records are not ordered, so it is not possible to find the record at a
+particular index.
+</para>
+<para>
+Note that #GRelation tables are currently limited to 2 fields.
+</para>
+<para>
+To create a GRelation, use g_relation_new().
+</para>
+<para>
+To specify which fields should be indexed, use g_relation_index().
+Note that this must be called before any tuples are added to the #GRelation.
+</para>
+<para>
+To add records to a #GRelation use g_relation_insert().
+</para>
+<para>
+To determine if a given record appears in a #GRelation, use
+g_relation_exists(). Note that fields are compared directly, so pointers
+must point to the exact same position (i.e. different copies of the same
+string will not match.)
+</para>
+<para>
+To count the number of records which have a particular value in a given
+field, use g_relation_count().
+</para>
+<para>
+To get all the records which have a particular value in a given field,
+use g_relation_select(). To access fields of the resulting records,
+use g_tuples_index(). To free the resulting records use g_tuples_destroy().
+</para>
+<para>
+To delete all records which have a particular value in a given field,
+use g_relation_delete().
+</para>
+<para>
+To destroy the #GRelation, use g_relation_destroy().
+</para>
+<para>
+To help debug #GRelation objects, use g_relation_print().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GRelation ##### -->
+<para>
+The #GRelation struct is an opaque data structure to represent a
+<link linkend="glib-Relations-and-Tuples">Relation</link>.
+It should only be accessed via the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_relation_new ##### -->
+<para>
+Creates a new #GRelation with the given number of fields.
+Note that currently the number of fields must be 2.
+</para>
+
+@fields: the number of fields.
+@Returns: a new #GRelation.
+
+
+<!-- ##### FUNCTION g_relation_index ##### -->
+<para>
+Creates an index on the given field.
+Note that this must be called before any records are added to the #GRelation.
+</para>
+
+@relation: a #GRelation.
+@field: the field to index, counting from 0.
+@hash_func: a function to produce a hash value from the field data.
+@key_equal_func: a function to compare two values of the given field.
+
+
+<!-- ##### FUNCTION g_relation_insert ##### -->
+<para>
+Inserts a record into a #GRelation.
+</para>
+
+@relation: a #GRelation.
+@Varargs: the fields of the record to add. These must match the number of
+fields in the #GRelation, and of type #gpointer or #gconstpointer.
+
+
+<!-- ##### FUNCTION g_relation_exists ##### -->
+<para>
+Returns %TRUE if a record with the given values exists in a #GRelation.
+Note that the values are compared directly, so that, for example, two
+copies of the same string will not match.
+</para>
+
+@relation: a #GRelation.
+@Varargs: the fields of the record to compare. The number must match the
+number of fields in the #GRelation.
+@Returns: %TRUE if a record matches.
+
+
+<!-- ##### FUNCTION g_relation_count ##### -->
+<para>
+Returns the number of tuples in a #GRelation that have the given value
+in the given field.
+</para>
+
+@relation: a #GRelation.
+@key: the value to compare with.
+@field: the field of each record to match.
+@Returns: the number of matches.
+
+
+<!-- ##### FUNCTION g_relation_select ##### -->
+<para>
+Returns all of the tuples which have the given key in the given field.
+Use g_tuples_index() to access the returned records.
+The returned records should be freed with g_tuples_destroy().
+</para>
+
+@relation: a #GRelation.
+@key: the value to compare with.
+@field: the field of each record to match.
+@Returns: the records (tuples) that matched.
+
+
+<!-- ##### FUNCTION g_relation_delete ##### -->
+<para>
+Deletes any records from a #GRelation that have the given key value in
+the given field.
+</para>
+
+@relation: a #GRelation.
+@key: the value to compare with.
+@field: the field of each record to match.
+@Returns: the number of records deleted.
+
+
+<!-- ##### FUNCTION g_relation_destroy ##### -->
+<para>
+Destroys the #GRelation, freeing all memory allocated.
+However, it does not free memory allocated for the
+tuple data, so you should free that first if appropriate.
+</para>
+
+@relation: a #GRelation.
+
+
+<!-- ##### FUNCTION g_relation_print ##### -->
+<para>
+Outputs information about all records in a #GRelation, as well as the indexes.
+It is for debugging.
+</para>
+
+@relation: a #GRelation.
+
+
+<!-- ##### STRUCT GTuples ##### -->
+<para>
+The #GTuples struct is used to return records (or tuples) from the
+#GRelation by g_relation_select().
+It only contains one public member - the number of records that matched.
+To access the matched records, you must use g_tuples_index().
+</para>
+
+@len: the number of records that matched.
+
+<!-- ##### FUNCTION g_tuples_destroy ##### -->
+<para>
+Frees the records which were returned by g_relation_select().
+This should always be called after g_relation_select() when you are
+finished with the records.
+The records are not removed from the #GRelation.
+</para>
+
+@tuples: the tuple data to free.
+
+
+<!-- ##### FUNCTION g_tuples_index ##### -->
+<para>
+Gets a field from the records returned by g_relation_select().
+It returns the given field of the record at the given index.
+The returned value should not be changed.
+</para>
+
+@tuples: the tuple data, returned by g_relation_select().
+@index_: the index of the record.
+@field: the field to return.
+@Returns: the field of the record.
+
+
diff --git a/docs/reference/glib/tmpl/scanner.sgml b/docs/reference/glib/tmpl/scanner.sgml
new file mode 100644
index 0000000..dc9da80
--- /dev/null
+++ b/docs/reference/glib/tmpl/scanner.sgml
@@ -0,0 +1,604 @@
+<!-- ##### SECTION Title ##### -->
+Lexical Scanner
+
+<!-- ##### SECTION Short_Description ##### -->
+a general purpose lexical scanner
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GScanner and its associated functions provide a general purpose
+lexical scanner.
+</para>
+
+<!--
+FIXME: really needs an example and more detail, but I don't completely
+understand it myself. Look at gtkrc.c for some code using the scanner.
+-->
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GScanner ##### -->
+<para>
+The data structure representing a lexical scanner.
+</para>
+<para>
+You should set <structfield>input_name</structfield> after creating 
+the scanner, since it is used by the default message handler when 
+displaying warnings and errors. If you are scanning a file, the file 
+name would be a good choice.
+</para>
+<para>
+The <structfield>user_data</structfield> and
+<structfield>max_parse_errors</structfield> fields are not used.
+If you need to associate extra data with the scanner you can place them here.
+</para>
+<para>
+If you want to use your own message handler you can set the
+<structfield>msg_handler</structfield> field. The type of the message
+handler function is declared by #GScannerMsgFunc.
+</para>
+
+@user_data: 
+@max_parse_errors: 
+@parse_errors: 
+@input_name: 
+@qdata: 
+@config: 
+@token:       token parsed by the last g_scanner_get_next_token()
+@value:       value of the last token from g_scanner_get_next_token()
+@line:        line number of the last token from g_scanner_get_next_token()
+@position:    char number of the last token from g_scanner_get_next_token()
+@next_token:    token parsed by the last g_scanner_peek_next_token()
+@next_value:    value of the last token from g_scanner_peek_next_token()
+@next_line:     line number of the last token from g_scanner_peek_next_token()
+@next_position: char number of the last token from g_scanner_peek_next_token()
+@symbol_table: 
+@input_fd: 
+@text: 
+@text_end: 
+@buffer: 
+@scope_id: 
+@msg_handler: function to handle GScanner message output
+
+<!-- ##### STRUCT GScannerConfig ##### -->
+<para>
+Specifies the #GScanner parser configuration. Most settings can be changed during
+the parsing phase and will affect the lexical parsing of the next unpeeked token.
+</para>
+<para>
+<structfield>cset_skip_characters</structfield> specifies which characters
+should be skipped by the scanner (the default is the whitespace characters:
+space, tab, carriage-return and line-feed).
+</para>
+<para>
+<structfield>cset_identifier_first</structfield> specifies the characters
+which can start identifiers (the default is #G_CSET_a_2_z, "_", and 
+#G_CSET_A_2_Z).
+</para>
+<para>
+<structfield>cset_identifier_nth</structfield> specifies the characters
+which can be used in identifiers, after the first character (the default 
+is #G_CSET_a_2_z, "_0123456789", #G_CSET_A_2_Z, #G_CSET_LATINS,
+#G_CSET_LATINC).
+</para>
+<para>
+<structfield>cpair_comment_single</structfield> specifies the characters
+at the start and end of single-line comments. The default is "#\n" which
+means that single-line comments start with a '#' and continue until a '\n'
+(end of line).
+</para>
+<para>
+<structfield>case_sensitive</structfield> specifies if symbols are
+case sensitive (the default is %FALSE).
+</para>
+<para>
+<structfield>skip_comment_multi</structfield> specifies if multi-line
+comments are skipped and not returned as tokens (the default is %TRUE).
+</para>
+<para>
+<structfield>skip_comment_single</structfield> specifies if single-line
+comments are skipped and not returned as tokens (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_comment_multi</structfield> specifies if multi-line
+comments are recognized (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_identifier</structfield> specifies if identifiers
+are recognized (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_identifier_1char</structfield> specifies if single-character
+identifiers are recognized (the default is %FALSE).
+</para>
+<para>
+<structfield>scan_identifier_NULL</structfield> specifies if 
+<literal>NULL</literal> is reported as #G_TOKEN_IDENTIFIER_NULL.
+(the default is %FALSE).
+</para>
+<para>
+<structfield>scan_symbols</structfield> specifies if symbols are
+recognized (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_binary</structfield> specifies if binary numbers
+are recognized (the default is %FALSE).
+</para>
+<para>
+<structfield>scan_octal</structfield> specifies if octal numbers
+are recognized (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_float</structfield> specifies if floating point numbers
+are recognized (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_hex</structfield> specifies if hexadecimal numbers
+are recognized (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_hex_dollar</structfield> specifies if '$' is recognized
+as a prefix for hexadecimal numbers (the default is %FALSE).
+</para>
+<para>
+<structfield>scan_string_sq</structfield> specifies if strings can be
+enclosed in single quotes (the default is %TRUE).
+</para>
+<para>
+<structfield>scan_string_dq</structfield> specifies if strings can be
+enclosed in double quotes (the default is %TRUE).
+</para>
+<para>
+<structfield>numbers_2_int</structfield> specifies if binary, octal and
+hexadecimal numbers are reported as #G_TOKEN_INT (the default is %TRUE).
+</para>
+<para>
+<structfield>int_2_float</structfield> specifies if all numbers are 
+reported as #G_TOKEN_FLOAT (the default is %FALSE).
+</para>
+<para>
+<structfield>identifier_2_string</structfield> specifies if identifiers
+are reported as strings (the default is %FALSE).
+</para>
+<para>
+<structfield>char_2_token</structfield> specifies if characters
+are reported by setting <literal>token = ch</literal> or as #G_TOKEN_CHAR 
+(the default is %TRUE).
+</para>
+<para>
+<structfield>symbol_2_token</structfield> specifies if symbols 
+are reported by setting <literal>token = v_symbol</literal> or as
+#G_TOKEN_SYMBOL (the default is %FALSE).
+</para>
+<para>
+<structfield>scope_0_fallback</structfield> specifies if a symbol 
+is searched for in the default scope in addition to the current scope
+(the default is %FALSE).
+</para>
+
+@cset_skip_characters: 
+@cset_identifier_first: 
+@cset_identifier_nth: 
+@cpair_comment_single: 
+@case_sensitive: 
+@skip_comment_multi: 
+@skip_comment_single: 
+@scan_comment_multi: 
+@scan_identifier: 
+@scan_identifier_1char: 
+@scan_identifier_NULL: 
+@scan_symbols: 
+@scan_binary: 
+@scan_octal: 
+@scan_float: 
+@scan_hex: 
+@scan_hex_dollar: 
+@scan_string_sq: 
+@scan_string_dq: 
+@numbers_2_int: 
+@int_2_float: 
+@identifier_2_string: 
+@char_2_token: 
+@symbol_2_token: 
+@scope_0_fallback: 
+@store_int64: 
+@padding_dummy: 
+
+<!-- ##### FUNCTION g_scanner_new ##### -->
+<para>
+Creates a new #GScanner.
+The @config_templ structure specifies the initial settings of the scanner,
+which are copied into the #GScanner <structfield>config</structfield> field.
+If you pass %NULL then the default settings are used.
+</para>
+
+@config_templ: the initial scanner settings.
+@Returns: the new #GScanner.
+
+
+<!-- ##### FUNCTION g_scanner_destroy ##### -->
+<para>
+Frees all memory used by the #GScanner.
+</para>
+
+@scanner: a #GScanner.
+
+
+<!-- ##### FUNCTION g_scanner_input_file ##### -->
+<para>
+Prepares to scan a file.
+</para>
+
+@scanner: a #GScanner.
+@input_fd: a file descriptor.
+
+
+<!-- ##### FUNCTION g_scanner_sync_file_offset ##### -->
+<para>
+Rewinds the filedescriptor to the current buffer position and blows 
+the file read ahead buffer. This is useful for third party uses of
+the scanners filedescriptor, which hooks onto the current scanning 
+position.
+</para>
+
+@scanner: a #GScanner.
+
+
+<!-- ##### FUNCTION g_scanner_input_text ##### -->
+<para>
+Prepares to scan a text buffer.
+</para>
+
+@scanner: a #GScanner.
+@text: the text buffer to scan.
+@text_len: the length of the text buffer.
+
+
+<!-- ##### FUNCTION g_scanner_peek_next_token ##### -->
+<para>
+Parses the next token, without removing it from the input stream.
+The token data is placed in the
+<structfield>next_token</structfield>,
+<structfield>next_value</structfield>,
+<structfield>next_line</structfield>, and
+<structfield>next_position</structfield> fields of the #GScanner structure.
+</para>
+<para>
+Note that, while the token is not removed from the input stream (i.e.
+the next call to g_scanner_get_next_token() will return the same token),
+it will not be reevaluated. This can lead to surprising results when
+changing scope or the scanner configuration after peeking the next token.
+Getting the next token after switching the scope or configuration will
+return whatever was peeked before, regardless of any symbols that may
+have been added or removed in the new scope. 
+</para>
+
+@scanner: a #GScanner.
+@Returns: the type of the token.
+
+
+<!-- ##### FUNCTION g_scanner_get_next_token ##### -->
+<para>
+Parses the next token just like g_scanner_peek_next_token() and also
+removes it from the input stream.
+The token data is placed in the
+<structfield>token</structfield>,
+<structfield>value</structfield>,
+<structfield>line</structfield>, and
+<structfield>position</structfield> fields of the #GScanner structure.
+</para>
+
+@scanner: a #GScanner.
+@Returns: the type of the token.
+
+
+<!-- ##### FUNCTION g_scanner_eof ##### -->
+<para>
+Returns %TRUE if the scanner has reached the end of the file or text buffer.
+</para>
+
+@scanner: a #GScanner.
+@Returns: %TRUE if the scanner has reached the end of the file or text buffer.
+
+
+<!-- ##### FUNCTION g_scanner_cur_line ##### -->
+<para>
+Returns the current line in the input stream (counting from 1).
+This is the line of the last token parsed via g_scanner_get_next_token().
+</para>
+
+@scanner: a #GScanner.
+@Returns: the current line.
+
+
+<!-- ##### FUNCTION g_scanner_cur_position ##### -->
+<para>
+Returns the current position in the current line (counting from 0).
+This is the position of the last token parsed via g_scanner_get_next_token().
+</para>
+
+@scanner: a #GScanner.
+@Returns: the current position on the line.
+
+
+<!-- ##### FUNCTION g_scanner_cur_token ##### -->
+<para>
+Gets the current token type.
+This is simply the <structfield>token</structfield> field in the #GScanner
+structure.
+</para>
+
+@scanner: a #GScanner.
+@Returns: the current token type.
+
+
+<!-- ##### FUNCTION g_scanner_cur_value ##### -->
+<para>
+Gets the current token value.
+This is simply the <structfield>value</structfield> field in the #GScanner
+structure.
+</para>
+
+@scanner: a #GScanner.
+@Returns: the current token value.
+
+
+<!-- ##### FUNCTION g_scanner_set_scope ##### -->
+<para>
+Sets the current scope.
+</para>
+
+@scanner: a #GScanner.
+@scope_id: the new scope id.
+@Returns: the old scope id.
+
+
+<!-- ##### FUNCTION g_scanner_scope_add_symbol ##### -->
+<para>
+Adds a symbol to the given scope.
+</para>
+
+@scanner: a #GScanner.
+@scope_id: the scope id.
+@symbol: the symbol to add.
+@value: the value of the symbol.
+
+
+<!-- ##### FUNCTION g_scanner_scope_foreach_symbol ##### -->
+<para>
+Calls the given function for each of the symbol/value pairs in the 
+given scope of the #GScanner. The function is passed the symbol and 
+value of each pair, and the given @user_data parameter.
+</para>
+
+@scanner: a #GScanner.
+@scope_id: the scope id.
+@func: the function to call for each symbol/value pair.
+@user_data: user data to pass to the function.
+
+
+<!-- ##### FUNCTION g_scanner_scope_lookup_symbol ##### -->
+<para>
+Looks up a symbol in a scope and return its value. If the
+symbol is not bound in the scope, %NULL is returned.
+</para>
+
+@scanner: a #GScanner.
+@scope_id: the scope id.
+@symbol: the symbol to look up.
+@Returns: the value of @symbol in the given scope, or %NULL
+if @symbol is not bound in the given scope.
+
+
+<!-- ##### FUNCTION g_scanner_scope_remove_symbol ##### -->
+<para>
+Removes a symbol from a scope.
+</para>
+
+@scanner: a #GScanner.
+@scope_id: the scope id.
+@symbol: the symbol to remove.
+
+
+<!-- ##### MACRO g_scanner_add_symbol ##### -->
+<para>
+Adds a symbol to the default scope.
+</para>
+
+@scanner: a #GScanner.
+@symbol: the symbol to add.
+@value: the value of the symbol.
+@Deprecated: 2.2: Use g_scanner_scope_add_symbol() instead.
+
+
+<!-- ##### MACRO g_scanner_remove_symbol ##### -->
+<para>
+Removes a symbol from the default scope.
+</para>
+
+@scanner: a #GScanner.
+@symbol: the symbol to remove.
+@Deprecated: 2.2: Use g_scanner_scope_remove_symbol() instead.
+
+
+<!-- ##### MACRO g_scanner_foreach_symbol ##### -->
+<para>
+Calls a function for each symbol in the default scope.
+</para>
+
+@scanner: a #GScanner.
+@func: the function to call with each symbol.
+@data: data to pass to the function.
+@Deprecated: 2.2: Use g_scanner_scope_foreach_symbol() instead.
+
+
+<!-- ##### MACRO g_scanner_freeze_symbol_table ##### -->
+<para>
+There is no reason to use this macro, since it does nothing.
+</para>
+
+@scanner: a #GScanner.
+@Deprecated: 2.2: This macro does nothing.
+
+
+<!-- ##### MACRO g_scanner_thaw_symbol_table ##### -->
+<para>
+There is no reason to use this macro, since it does nothing.
+</para>
+
+@scanner: a #GScanner.
+@Deprecated: 2.2: This macro does nothing.
+
+
+<!-- ##### FUNCTION g_scanner_lookup_symbol ##### -->
+<para>
+Looks up a symbol in the current scope and return its value. If the
+symbol is not bound in the current scope, %NULL is returned.
+</para>
+
+@scanner: a #GScanner.
+@symbol: the symbol to look up.
+@Returns: the value of @symbol in the current scope, or %NULL
+if @symbol is not bound in the current scope.
+
+
+<!-- ##### FUNCTION g_scanner_warn ##### -->
+<para>
+Outputs a warning message, via the #GScanner message handler.
+</para>
+
+@scanner: a #GScanner.
+@format: the message format. See the <function>printf()</function>
+documentation.
+@Varargs: the parameters to insert into the format string.
+
+
+<!-- ##### FUNCTION g_scanner_error ##### -->
+<para>
+Outputs an error message, via the #GScanner message handler.
+</para>
+
+@scanner: a #GScanner.
+@format: the message format. See the <function>printf()</function>
+documentation.
+@Varargs: the parameters to insert into the format string.
+
+
+<!-- ##### FUNCTION g_scanner_unexp_token ##### -->
+<para>
+Outputs a message through the scanner's msg_handler, resulting from an
+unexpected token in the input stream.
+Note that you should not call g_scanner_peek_next_token() followed by
+g_scanner_unexp_token() without an intermediate call to
+g_scanner_get_next_token(), as g_scanner_unexp_token() evaluates the
+scanner's current token (not the peeked token) to construct part
+of the message.
+</para>
+
+@scanner: a #GScanner.
+@expected_token: the expected token.
+@identifier_spec: a string describing how the scanner's user refers to
+                  identifiers (%NULL defaults to "identifier").
+                  This is used if @expected_token is #G_TOKEN_IDENTIFIER
+                  or #G_TOKEN_IDENTIFIER_NULL.
+@symbol_spec: a string describing how the scanner's user refers to
+              symbols (%NULL defaults to "symbol").
+              This is used if @expected_token is #G_TOKEN_SYMBOL or
+              any token value greater than #G_TOKEN_LAST.
+@symbol_name: the name of the symbol, if the scanner's current token
+              is a symbol.
+@message: a message string to output at the end of the warning/error, or %NULL.
+@is_error: if %TRUE it is output as an error. If %FALSE it is output as a
+           warning.
+
+
+<!-- ##### USER_FUNCTION GScannerMsgFunc ##### -->
+<para>
+Specifies the type of the message handler function.
+</para>
+
+@scanner: a #GScanner.
+@message: the message.
+@error: %TRUE if the message signals an error, %FALSE if it 
+  signals a warning.
+
+
+<!-- ##### MACRO G_CSET_a_2_z ##### -->
+<para>
+The set of lowercase ASCII alphabet characters.
+Used for specifying valid identifier characters in #GScannerConfig.
+</para>
+
+
+
+<!-- ##### MACRO G_CSET_A_2_Z ##### -->
+<para>
+The set of uppercase ASCII alphabet characters.
+Used for specifying valid identifier characters in #GScannerConfig.
+</para>
+
+
+
+<!-- ##### MACRO G_CSET_DIGITS ##### -->
+<para>
+The set of digits.
+Used for specifying valid identifier characters in #GScannerConfig.
+</para>
+
+
+
+<!-- ##### MACRO G_CSET_LATINC ##### -->
+<para>
+The set of uppercase ISO 8859-1 alphabet characters which are 
+not ASCII characters. 
+Used for specifying valid identifier characters in #GScannerConfig.
+</para>
+
+
+
+<!-- ##### MACRO G_CSET_LATINS ##### -->
+<para>
+The set of lowercase ISO 8859-1 alphabet characters which are 
+not ASCII characters. 
+Used for specifying valid identifier characters in #GScannerConfig.
+</para>
+
+
+
+<!-- ##### ENUM GTokenType ##### -->
+<para>
+The possible types of token returned from each g_scanner_get_next_token() call.
+</para>
+
+@G_TOKEN_EOF: the end of the file.
+@G_TOKEN_LEFT_PAREN: a '(' character.
+@G_TOKEN_LEFT_CURLY: a '{' character.
+@G_TOKEN_RIGHT_CURLY: a '}' character.
+
+<!-- ##### UNION GTokenValue ##### -->
+<para>
+A union holding the value of the token.
+</para>
+
+
+<!-- ##### ENUM GErrorType ##### -->
+<para>
+The possible errors, used in the <structfield>v_error</structfield> field
+of #GTokenValue, when the token is a #G_TOKEN_ERROR.
+</para>
+
+@G_ERR_UNKNOWN: unknown error.
+@G_ERR_UNEXP_EOF: unexpected end of file.
+@G_ERR_UNEXP_EOF_IN_STRING: unterminated string constant.
+@G_ERR_UNEXP_EOF_IN_COMMENT: unterminated comment.
+@G_ERR_NON_DIGIT_IN_CONST: non-digit character in a number.
+@G_ERR_DIGIT_RADIX: digit beyond radix in a number.
+@G_ERR_FLOAT_RADIX: non-decimal floating point number.
+@G_ERR_FLOAT_MALFORMED: malformed floating point number.
+
diff --git a/docs/reference/glib/tmpl/sequence.sgml b/docs/reference/glib/tmpl/sequence.sgml
new file mode 100644
index 0000000..3f50076
--- /dev/null
+++ b/docs/reference/glib/tmpl/sequence.sgml
@@ -0,0 +1,432 @@
+<!-- ##### SECTION Title ##### -->
+Sequences
+
+<!-- ##### SECTION Short_Description ##### -->
+scalable lists
+
+<!-- ##### SECTION Long_Description ##### -->
+
+<para>
+The #GSequence data structure has the API of a list, but is
+implemented internally with a balanced binary tree. This means that it
+is possible to maintain a sorted list of n elements in time O(n log
+n). The data contained in each element can be either integer values, by
+using of the 
+<link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>,
+or simply pointers to any type of data.
+</para>
+
+<para>
+A #GSequence is accessed through <firstterm>iterators</firstterm>,
+represented by a #GSequenceIter. An iterator represents a position
+between two elements of the sequence. For example, the
+<firstterm>begin</firstterm> iterator represents the gap immediately
+before the first element of the sequence, and the
+<firstterm>end</firstterm> iterator represents the gap immediately
+after the last element. In an empty sequence, the begin and end
+iterators are the same.
+</para>
+
+<para>
+Some methods on #GSequence operate on ranges of items. For example
+g_sequence_foreach_range() will call a user-specified function on each
+element with the given range. The range is delimited by the gaps
+represented by the passed-in iterators, so if you pass in the begin
+and end iterators, the range in question is the entire sequence.
+</para>
+
+
+<para>
+The function g_sequence_get() is used with an iterator to access the
+element immediately following the gap that the iterator
+represents. The iterator is said to <firstterm>point</firstterm> to
+that element.
+</para>
+
+<para>
+Iterators are stable across most operations on a #GSequence. For
+example an iterator pointing to some element of a sequence will
+continue to point to that element even after the sequence is
+sorted. Even moving an element to another sequence using for example
+g_sequence_move_range() will not invalidate the iterators pointing to
+it. The only operation that will invalidate an iterator is when the
+element it points to is removed from any sequence.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GSequence ##### -->
+<para>
+The <structname>GSequence</structname> struct is an opaque data type
+representing a <link linkend="glib-Sequences">Sequence</link> data type.
+</para>
+
+
+<!-- ##### TYPEDEF GSequenceIter ##### -->
+<para>
+The <structname>GSequenceIter</structname> struct is an opaque data
+type representing an iterator pointing into a #GSequence.
+</para>
+
+
+<!-- ##### USER_FUNCTION GSequenceIterCompareFunc ##### -->
+<para>
+A #GSequenceIterCompareFunc is a function used to compare
+iterators. It must return zero if the iterators compare equal, a
+negative value if @a comes before @b, and a positive value if @b comes
+before @a.
+</para>
+
+@a: a #GSequenceIter
+@b: a #GSequenceIter
+@data: user data
+@Returns: zero if the iterators are equal, a negative value if @a
+comes before @b, and a positive value if @b comes before @a.
+
+
+<!-- ##### FUNCTION g_sequence_new ##### -->
+<para>
+
+</para>
+
+@data_destroy: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_free ##### -->
+<para>
+
+</para>
+
+@seq: 
+
+
+<!-- ##### FUNCTION g_sequence_get_length ##### -->
+<para>
+
+</para>
+
+@seq: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_foreach ##### -->
+<para>
+
+</para>
+
+@seq: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_sequence_foreach_range ##### -->
+<para>
+
+</para>
+
+@begin: 
+@end: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_sequence_sort ##### -->
+<para>
+
+</para>
+
+@seq: 
+@cmp_func: 
+@cmp_data: 
+
+
+<!-- ##### FUNCTION g_sequence_sort_iter ##### -->
+<para>
+
+</para>
+
+@seq: 
+@cmp_func: 
+@cmp_data: 
+
+
+<!-- ##### FUNCTION g_sequence_get_begin_iter ##### -->
+<para>
+
+</para>
+
+@seq: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_get_end_iter ##### -->
+<para>
+
+</para>
+
+@seq: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_get_iter_at_pos ##### -->
+<para>
+
+</para>
+
+@seq: 
+@pos: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_append ##### -->
+<para>
+
+</para>
+
+@seq: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_prepend ##### -->
+<para>
+
+</para>
+
+@seq: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_insert_before ##### -->
+<para>
+
+</para>
+
+@iter: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_move ##### -->
+<para>
+
+</para>
+
+@src: 
+@dest: 
+
+
+<!-- ##### FUNCTION g_sequence_swap ##### -->
+<para>
+
+</para>
+
+@a: 
+@b: 
+
+
+<!-- ##### FUNCTION g_sequence_insert_sorted ##### -->
+<para>
+
+</para>
+
+@seq: 
+@data: 
+@cmp_func: 
+@cmp_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_insert_sorted_iter ##### -->
+<para>
+
+</para>
+
+@seq: 
+@data: 
+@iter_cmp: 
+@cmp_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_sort_changed ##### -->
+<para>
+
+</para>
+
+@iter: 
+@cmp_func: 
+@cmp_data: 
+
+
+<!-- ##### FUNCTION g_sequence_sort_changed_iter ##### -->
+<para>
+
+</para>
+
+@iter: 
+@iter_cmp: 
+@cmp_data: 
+
+
+<!-- ##### FUNCTION g_sequence_remove ##### -->
+<para>
+
+</para>
+
+@iter: 
+
+
+<!-- ##### FUNCTION g_sequence_remove_range ##### -->
+<para>
+
+</para>
+
+@begin: 
+@end: 
+
+
+<!-- ##### FUNCTION g_sequence_move_range ##### -->
+<para>
+
+</para>
+
+@dest: 
+@begin: 
+@end: 
+
+
+<!-- ##### FUNCTION g_sequence_search ##### -->
+<para>
+
+</para>
+
+@seq: 
+@data: 
+@cmp_func: 
+@cmp_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_search_iter ##### -->
+<para>
+
+</para>
+
+@seq: 
+@data: 
+@iter_cmp: 
+@cmp_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_get ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_set ##### -->
+<para>
+
+</para>
+
+@iter: 
+@data: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_is_begin ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_is_end ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_next ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_prev ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_get_position ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_move ##### -->
+<para>
+
+</para>
+
+@iter: 
+@delta: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_get_sequence ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_iter_compare ##### -->
+<para>
+
+</para>
+
+@a: 
+@b: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sequence_range_get_midpoint ##### -->
+<para>
+
+</para>
+
+@begin: 
+@end: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/shell.sgml b/docs/reference/glib/tmpl/shell.sgml
new file mode 100644
index 0000000..a1c7979
--- /dev/null
+++ b/docs/reference/glib/tmpl/shell.sgml
@@ -0,0 +1,68 @@
+<!-- ##### SECTION Title ##### -->
+Shell-related Utilities
+
+<!-- ##### SECTION Short_Description ##### -->
+shell-like commandline handling
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GShellError ##### -->
+<para>
+Error codes returned by shell functions.
+</para>
+
+@G_SHELL_ERROR_BAD_QUOTING: Mismatched or otherwise mangled quoting.
+@G_SHELL_ERROR_EMPTY_STRING: String to be parsed was empty.
+@G_SHELL_ERROR_FAILED: Some other error.
+
+<!-- ##### MACRO G_SHELL_ERROR ##### -->
+<para>
+Error domain for shell functions. Errors in this domain will
+be from the #GShellError enumeration. See #GError for information on
+error domains.
+</para>
+
+
+
+<!-- ##### FUNCTION g_shell_parse_argv ##### -->
+<para>
+
+</para>
+
+@command_line: 
+@argcp: 
+@argvp: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_shell_quote ##### -->
+<para>
+
+</para>
+
+@unquoted_string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_shell_unquote ##### -->
+<para>
+
+</para>
+
+@quoted_string: 
+@error: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/spawn.sgml b/docs/reference/glib/tmpl/spawn.sgml
new file mode 100644
index 0000000..c0f8d25
--- /dev/null
+++ b/docs/reference/glib/tmpl/spawn.sgml
@@ -0,0 +1,195 @@
+<!-- ##### SECTION Title ##### -->
+Spawning Processes
+
+<!-- ##### SECTION Short_Description ##### -->
+process launching
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM GSpawnError ##### -->
+<para>
+Error codes returned by spawning processes.
+</para>
+
+@G_SPAWN_ERROR_FORK: Fork failed due to lack of memory.
+@G_SPAWN_ERROR_READ: Read or select on pipes failed.
+@G_SPAWN_ERROR_CHDIR: Changing to working directory failed.
+@G_SPAWN_ERROR_ACCES: execv() returned %EACCES.
+@G_SPAWN_ERROR_PERM: execv() returned %EPERM.
+@G_SPAWN_ERROR_2BIG: execv() returned %E2BIG.
+@G_SPAWN_ERROR_NOEXEC: execv() returned %ENOEXEC.
+@G_SPAWN_ERROR_NAMETOOLONG: execv() returned %ENAMETOOLONG.
+@G_SPAWN_ERROR_NOENT: execv() returned %ENOENT.
+@G_SPAWN_ERROR_NOMEM: execv() returned %ENOMEM.
+@G_SPAWN_ERROR_NOTDIR: execv() returned %ENOTDIR.
+@G_SPAWN_ERROR_LOOP: execv() returned %ELOOP.
+@G_SPAWN_ERROR_TXTBUSY: execv() returned %ETXTBUSY.
+@G_SPAWN_ERROR_IO: execv() returned %EIO.
+@G_SPAWN_ERROR_NFILE: execv() returned %ENFILE.
+@G_SPAWN_ERROR_MFILE: execv() returned %EMFILE.
+@G_SPAWN_ERROR_INVAL: execv() returned %EINVAL.
+@G_SPAWN_ERROR_ISDIR: execv() returned %EISDIR.
+@G_SPAWN_ERROR_LIBBAD: execv() returned %ELIBBAD.
+@G_SPAWN_ERROR_FAILED: Some other fatal failure, <literal>error-&gt;message</literal> should explain.
+
+<!-- ##### MACRO G_SPAWN_ERROR ##### -->
+<para>
+Error domain for spawning processes. Errors in this domain will
+be from the #GSpawnError enumeration. See #GError for information on
+error domains.
+</para>
+
+
+
+<!-- ##### ENUM GSpawnFlags ##### -->
+<para>
+Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes().
+</para>
+
+@G_SPAWN_LEAVE_DESCRIPTORS_OPEN: the parent's open file descriptors will be 
+ inherited by the child; otherwise all descriptors except stdin/stdout/stderr 
+ will be closed before calling exec() in the child.
+@G_SPAWN_DO_NOT_REAP_CHILD: the child will not be automatically reaped; you 
+  must use g_child_watch_add() yourself (or call waitpid() 
+  or handle <literal>SIGCHLD</literal> yourself), or the child will become a zombie.
+@G_SPAWN_SEARCH_PATH: <literal>argv[0]</literal> need not be an absolute path, 
+  it will be looked for in the user's <envar>PATH</envar>.
+@G_SPAWN_STDOUT_TO_DEV_NULL: the child's standard output will be discarded, 
+  instead of going to the same location as the parent's standard output.
+@G_SPAWN_STDERR_TO_DEV_NULL: the child's standard error will be discarded.
+@G_SPAWN_CHILD_INHERITS_STDIN: the child will inherit the parent's standard 
+  input (by default, the child's standard input is attached to 
+  <filename>/dev/null</filename>).
+@G_SPAWN_FILE_AND_ARGV_ZERO: the first element of <literal>argv</literal> is 
+  the file to execute, while the remaining elements are the actual argument 
+  vector to pass to the file. Normally g_spawn_async_with_pipes() uses 
+  <literal>argv[0]</literal> as the file to execute, and passes all of 
+  <literal>argv</literal> to the child.
+
+<!-- ##### USER_FUNCTION GSpawnChildSetupFunc ##### -->
+<para>
+Specifies the type of the setup function passed to g_spawn_async(),
+g_spawn_sync() and g_spawn_async_with_pipes(). On POSIX platforms it
+is called in the child after GLib has performed all the setup it plans
+to perform but before calling exec(). On POSIX actions taken in this 
+function will thus only affect the child, not the parent.
+</para>
+
+<para>
+Note that POSIX allows only async-signal-safe functions (see signal(7)) 
+to be called in the child between fork() and exec(), which drastically 
+limits the usefulness of child setup functions.  
+</para>
+
+<para>
+Also note that modifying the environment from the child setup function
+may not have the intended effect, since it will get overridden by
+a non-%NULL @env argument to the <literal>g_spawn...</literal> functions.
+</para>
+
+<para>
+On Windows the function is called in the parent. Its usefulness on
+Windows is thus questionable. In many cases executing the child setup
+function in the parent can have ill effects, and you should be very
+careful when porting software to Windows that uses child setup
+functions.
+</para>
+
+@user_data: user data to pass to the function.
+
+
+<!-- ##### FUNCTION g_spawn_async_with_pipes ##### -->
+<para>
+
+</para>
+
+@working_directory: 
+@argv: 
+@envp: 
+@flags: 
+@child_setup: 
+@user_data: 
+@child_pid: 
+@standard_input: 
+@standard_output: 
+@standard_error: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_spawn_async ##### -->
+<para>
+
+</para>
+
+@working_directory: 
+@argv: 
+@envp: 
+@flags: 
+@child_setup: 
+@user_data: 
+@child_pid: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_spawn_sync ##### -->
+<para>
+
+</para>
+
+@working_directory: 
+@argv: 
+@envp: 
+@flags: 
+@child_setup: 
+@user_data: 
+@standard_output: 
+@standard_error: 
+@exit_status: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_spawn_command_line_async ##### -->
+<para>
+
+</para>
+
+@command_line: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_spawn_command_line_sync ##### -->
+<para>
+
+</para>
+
+@command_line: 
+@standard_output: 
+@standard_error: 
+@exit_status: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_spawn_close_pid ##### -->
+<para>
+
+</para>
+
+@pid: 
+
+
diff --git a/docs/reference/glib/tmpl/string_chunks.sgml b/docs/reference/glib/tmpl/string_chunks.sgml
new file mode 100644
index 0000000..12b3a53
--- /dev/null
+++ b/docs/reference/glib/tmpl/string_chunks.sgml
@@ -0,0 +1,108 @@
+<!-- ##### SECTION Title ##### -->
+String Chunks
+
+<!-- ##### SECTION Short_Description ##### -->
+efficient storage of groups of strings
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+String chunks are used to store groups of strings.
+Memory is allocated in blocks, and as strings are added to the #GStringChunk
+they are copied into the next free position in a block. When a block is
+full a new block is allocated.
+</para>
+<para>
+When storing a large number of strings, string chunks are more efficient
+than using g_strdup() since fewer calls to malloc() are needed, and less 
+memory is wasted in memory allocation overheads.
+</para>
+<para>
+By adding strings with g_string_chunk_insert_const() it is also possible
+to remove duplicates.
+</para>
+<para>
+To create a new #GStringChunk use g_string_chunk_new().
+</para>
+<para>
+To add strings to a #GStringChunk use g_string_chunk_insert().
+</para>
+<para>
+To add strings to a #GStringChunk, but without duplicating strings which are
+already in the #GStringChunk, use g_string_chunk_insert_const().
+</para>
+<para>
+To free the entire #GStringChunk use g_string_chunk_free().
+It is not possible to free individual strings.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GStringChunk ##### -->
+<para>
+An opaque data structure representing String Chunks.
+It should only be accessed by using the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_string_chunk_new ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_chunk_insert ##### -->
+<para>
+
+</para>
+
+@chunk: 
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_chunk_insert_const ##### -->
+<para>
+
+</para>
+
+@chunk: 
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_chunk_insert_len ##### -->
+<para>
+
+</para>
+
+@chunk: 
+@string: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_chunk_clear ##### -->
+<para>
+
+</para>
+
+@chunk: 
+
+
+<!-- ##### FUNCTION g_string_chunk_free ##### -->
+<para>
+
+</para>
+
+@chunk: 
+
+
diff --git a/docs/reference/glib/tmpl/string_utils.sgml b/docs/reference/glib/tmpl/string_utils.sgml
new file mode 100644
index 0000000..faaec7d
--- /dev/null
+++ b/docs/reference/glib/tmpl/string_utils.sgml
@@ -0,0 +1,900 @@
+<!-- ##### SECTION Title ##### -->
+String Utility Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+various string-related functions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a number of utility functions for creating,
+duplicating, and manipulating strings.
+</para>
+<para>
+Note that the functions g_printf(), g_fprintf(), g_sprintf(), g_snprintf(),
+g_vprintf(), g_vfprintf(), g_vsprintf() and g_vsnprintf() are declared in 
+the header <filename>gprintf.h</filename> which is <emphasis>not</emphasis>
+included in <filename>glib.h</filename> (otherwise using 
+<filename>glib.h</filename> would drag in <filename>stdio.h</filename>), so
+you'll have to explicitly include <literal>&lt;glib/gprintf.h&gt;</literal> 
+in order to use the GLib printf() functions. 
+</para>
+<para id="string-precision">
+While you may use the printf() functions to format UTF-8 strings, notice that
+the precision of a <literal>&percnt;Ns</literal> parameter is interpreted as the
+number of <emphasis>bytes</emphasis>, not <emphasis>characters</emphasis> to print.
+On top of that, the GNU libc implementation of the printf() functions has the "feature"
+that it checks that the string given for the <literal>&percnt;Ns</literal> parameter
+consists of a whole number of characters in the current encoding. So, unless you
+are sure you are always going to be in an UTF-8 locale or your know your text is restricted 
+to ASCII, avoid using <literal>&percnt;Ns</literal>.
+If your intention is to format strings for a certain number of columns, then 
+<literal>&percnt;Ns</literal> is not a correct solution anyway, since it fails to take 
+wide characters (see g_unichar_iswide()) into account.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_strdup ##### -->
+<para>
+
+</para>
+
+@str: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strndup ##### -->
+<para>
+
+</para>
+
+@str: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strdupv ##### -->
+<para>
+</para>
+
+@str_array: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strnfill ##### -->
+<para>
+
+</para>
+
+@length: 
+@fill_char: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_stpcpy ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strstr_len ##### -->
+<para>
+
+</para>
+
+@haystack: 
+@haystack_len: 
+@needle: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strrstr ##### -->
+<para>
+
+</para>
+
+@haystack: 
+@needle: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strrstr_len ##### -->
+<para>
+
+</para>
+
+@haystack: 
+@haystack_len: 
+@needle: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_str_has_prefix ##### -->
+<para>
+
+</para>
+
+@str: 
+@prefix: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_str_has_suffix ##### -->
+<para>
+
+</para>
+
+@str: 
+@suffix: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strcmp0 ##### -->
+<para>
+
+</para>
+
+@str1: 
+@str2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strlcpy ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+@dest_size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strlcat ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+@dest_size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strdup_printf ##### -->
+<para>
+</para>
+
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strdup_vprintf ##### -->
+<para>
+
+</para>
+
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_printf ##### -->
+<para>
+
+</para>
+
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_vprintf ##### -->
+<para>
+
+</para>
+
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_fprintf ##### -->
+<para>
+
+</para>
+
+@file: 
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_vfprintf ##### -->
+<para>
+
+</para>
+
+@file: 
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_sprintf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_vsprintf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_snprintf ##### -->
+<para>
+</para>
+
+@string: 
+@n: 
+@format: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_vsnprintf ##### -->
+<para>
+</para>
+
+@string: 
+@n: 
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_vasprintf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@args: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_printf_string_upper_bound ##### -->
+<para>
+Calculates the maximum space needed to store the output of the sprintf() 
+function.
+</para>
+
+@format: the format string. See the printf() documentation.
+@args: the parameters to be inserted into the format string.
+@Returns: the maximum space needed to store the formatted string.
+
+
+<!-- ##### FUNCTION g_ascii_isalnum ##### -->
+<para>
+Determines whether a character is alphanumeric.
+</para>
+<para>
+Unlike the standard C library isalnum() function, this only
+recognizes standard ASCII letters and ignores the locale, returning
+%FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII alphanumeric character
+
+
+<!-- ##### FUNCTION g_ascii_isalpha ##### -->
+<para>
+Determines whether a character is alphabetic (i.e. a letter).
+</para>
+<para>
+Unlike the standard C library isalpha() function, this only
+recognizes standard ASCII letters and ignores the locale, returning
+%FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII alphabetic character
+
+
+<!-- ##### FUNCTION g_ascii_iscntrl ##### -->
+<para>
+Determines whether a character is a control character.
+</para>
+<para>
+Unlike the standard C library iscntrl() function, this only
+recognizes standard ASCII control characters and ignores the locale,
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII control character.
+
+
+<!-- ##### FUNCTION g_ascii_isdigit ##### -->
+<para>
+Determines whether a character is digit (0-9).
+</para>
+<para>
+Unlike the standard C library isdigit() function,
+this takes a <type>char</type>, not an <type>int</type>, so don't call it
+on %EOF but no need to cast to #guchar before passing a possibly
+non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII digit.
+
+
+<!-- ##### FUNCTION g_ascii_isgraph ##### -->
+<para>
+Determines whether a character is a printing character and not a space.
+</para>
+<para>
+Unlike the standard C library isgraph() function, 
+this only recognizes standard ASCII characters and ignores the locale, 
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII printing character other than space.
+
+
+<!-- ##### FUNCTION g_ascii_islower ##### -->
+<para>
+Determines whether a character is an ASCII lower case letter.
+</para>
+<para>
+Unlike the standard C library islower() function, 
+this only recognizes standard ASCII letters and ignores the locale,
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to worry about casting to #guchar 
+before passing a possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII lower case letter
+
+
+<!-- ##### FUNCTION g_ascii_isprint ##### -->
+<para>
+Determines whether a character is a printing character.
+</para>
+<para>
+Unlike the standard C library isprint() function, 
+this only recognizes standard ASCII characters and ignores the locale, 
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII printing character.
+
+
+<!-- ##### FUNCTION g_ascii_ispunct ##### -->
+<para>
+Determines whether a character is a punctuation character.
+</para>
+<para>
+Unlike the standard C library ispunct() function, 
+this only recognizes standard ASCII letters and ignores the locale, 
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII punctuation character.
+
+
+<!-- ##### FUNCTION g_ascii_isspace ##### -->
+<para>
+Determines whether a character is a white-space character.
+</para>
+<para>
+Unlike the standard C library isspace() function, 
+this only recognizes standard ASCII white-space and ignores the locale, 
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to cast to #guchar before passing a 
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII white-space character
+
+
+<!-- ##### FUNCTION g_ascii_isupper ##### -->
+<para>
+Determines whether a character is an ASCII upper case letter.
+</para>
+<para>
+Unlike the standard C library isupper() function, 
+this only recognizes standard ASCII letters and ignores the locale, 
+returning %FALSE for all non-ASCII characters. Also unlike the standard
+library function, this takes a <type>char</type>, not an <type>int</type>, 
+so don't call it on %EOF but no need to worry about casting to #guchar 
+before passing a possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII upper case letter
+
+
+<!-- ##### FUNCTION g_ascii_isxdigit ##### -->
+<para>
+Determines whether a character is a hexadecimal-digit character.
+</para>
+<para>
+Unlike the standard C library isxdigit() function,
+this takes a <type>char</type>, not an <type>int</type>, so
+don't call it on %EOF but no need to cast to #guchar before passing a
+possibly non-ASCII character in.
+</para>
+
+@c: any character
+@Returns: %TRUE if @c is an ASCII hexadecimal-digit character.
+
+
+<!-- ##### FUNCTION g_ascii_digit_value ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_xdigit_value ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_strcasecmp ##### -->
+<para>
+
+</para>
+
+@s1: 
+@s2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_strncasecmp ##### -->
+<para>
+
+</para>
+
+@s1: 
+@s2: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_strup ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_strdown ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_tolower ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_toupper ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_ascii_up ##### -->
+<para>
+
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_ascii_down ##### -->
+<para>
+
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strup ##### -->
+<para>
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strdown ##### -->
+<para>
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strcasecmp ##### -->
+<para>
+</para>
+
+@s1: 
+@s2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strncasecmp ##### -->
+<para>
+</para>
+
+@s1: 
+@s2: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strreverse ##### -->
+<para>
+
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_strtoll ##### -->
+<para>
+
+</para>
+
+@nptr: 
+@endptr: 
+@base: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_strtoull ##### -->
+<para>
+
+</para>
+
+@nptr: 
+@endptr: 
+@base: 
+@Returns: 
+
+
+<!-- ##### MACRO G_ASCII_DTOSTR_BUF_SIZE ##### -->
+<para>
+A good size for a buffer to be passed into g_ascii_dtostr().
+It is guaranteed to be enough for all output of that function on systems with
+ 64bit IEEE-compatible doubles.
+</para>
+<para>
+The typical usage would be something like:
+<informalexample><programlisting>
+  char buf[G_ASCII_DTOSTR_BUF_SIZE];
+
+  fprintf (out, "value=&percnt;s\n", g_ascii_dtostr (buf, sizeof (buf), value));
+</programlisting></informalexample>
+</para>
+
+
+
+<!-- ##### FUNCTION g_ascii_strtod ##### -->
+<para>
+
+</para>
+
+@nptr: 
+@endptr: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_dtostr ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@buf_len: 
+@d: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ascii_formatd ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@buf_len: 
+@format: 
+@d: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strtod ##### -->
+<para>
+
+</para>
+
+@nptr: 
+@endptr: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strchug ##### -->
+<para>
+Removes leading whitespace from a string, by moving the rest of the
+characters forward.
+</para>
+<para>
+This function doesn't allocate or reallocate any memory; it modifies @string
+in place. The pointer to @string is returned to allow the nesting of functions.
+</para>
+<para>
+Also see g_strchomp() and g_strstrip().
+</para>
+
+@string: a string to remove the leading whitespace from.
+@Returns: @string.
+
+
+<!-- ##### FUNCTION g_strchomp ##### -->
+<para>
+Removes trailing whitespace from a string.
+</para>
+<para>
+This function doesn't allocate or reallocate any memory; it modifies @string in
+place. The pointer to @string is returned to allow the nesting of functions.
+</para>
+<para>
+Also see g_strchug() and g_strstrip().
+</para>
+
+@string: a string to remove the trailing whitespace from.
+@Returns: @string.
+
+
+<!-- ##### MACRO g_strstrip ##### -->
+<para>
+Removes leading and trailing whitespace from a string. See g_strchomp() and
+g_strchug().
+</para>
+
+@string: a string to remove the leading and trailing whitespace from.
+
+
+<!-- ##### FUNCTION g_strdelimit ##### -->
+<para>
+Converts any delimiter characters in @string to @new_delimiter.
+Any characters in @string which are found in @delimiters are changed
+to the @new_delimiter character. Modifies @string in place, and returns 
+@string itself, not a copy. The return value is to allow nesting such as
+<literal>g_ascii_strup (g_strdelimit (str, "abc", '?'))</literal>.
+</para>
+
+@string: the string to convert.
+@delimiters: a string containing the current delimiters, or %NULL to use the
+standard delimiters defined in #G_STR_DELIMITERS.
+@new_delimiter: the new delimiter character.
+@Returns: @string.
+
+
+<!-- ##### MACRO G_STR_DELIMITERS ##### -->
+<para>
+The standard delimiters, used in g_strdelimit().
+</para>
+
+
+
+<!-- ##### FUNCTION g_strescape ##### -->
+<para>
+Escapes the special characters '\b', '\f', '\n', '\r', '\t', '\' and
+'&quot;' in the string @source by inserting a '\' before
+them. Additionally all characters in the range 0x01-0x1F (everything
+below SPACE) and in the range 0x7F-0xFF (all non-ASCII chars) are
+replaced with a '\' followed by their octal representation. Characters
+supplied in @exceptions are not escaped.
+</para>
+
+<para>
+g_strcompress() does the reverse conversion.
+</para>
+
+@source: a string to escape.
+@exceptions: a string of characters not to escape in @source.
+@Returns: a newly-allocated copy of @source with certain
+characters escaped. See above.
+
+
+<!-- ##### FUNCTION g_strcompress ##### -->
+<para>
+Replaces all escaped characters with their one byte equivalent. It
+does the reverse conversion of g_strescape(). 
+</para>
+
+@source: a string to compress.
+@Returns: a newly-allocated copy of @source with all escaped 
+character compressed.
+
+
+<!-- ##### FUNCTION g_strcanon ##### -->
+<para>
+For each character in @string, if the character is not in @valid_chars,
+replaces the character with @substitutor. Modifies @string in place, 
+and return @string itself, not a copy. The return value is to allow
+nesting such as <literal>g_ascii_strup (g_strcanon (str, "abc", '?'))</literal>.
+</para>
+
+@string: a nul-terminated array of bytes.
+@valid_chars: bytes permitted in @string.
+@substitutor: replacement character for disallowed bytes.
+@Returns: @string.
+
+
+<!-- ##### FUNCTION g_strsplit ##### -->
+<para>
+</para>
+
+@string: 
+@delimiter: 
+@max_tokens: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strsplit_set ##### -->
+<para>
+
+</para>
+
+@string: 
+@delimiters: 
+@max_tokens: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strfreev ##### -->
+<para>
+
+</para>
+
+@str_array: 
+
+
+<!-- ##### FUNCTION g_strconcat ##### -->
+<para>
+
+</para>
+
+@string1: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strjoin ##### -->
+<para>
+
+</para>
+
+@separator: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strjoinv ##### -->
+<para>
+
+</para>
+
+@separator: 
+@str_array: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strv_length ##### -->
+<para>
+
+</para>
+
+@str_array: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strerror ##### -->
+<para>
+
+</para>
+
+@errnum: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_strsignal ##### -->
+<para>
+
+</para>
+
+@signum: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/strings.sgml b/docs/reference/glib/tmpl/strings.sgml
new file mode 100644
index 0000000..58a1307
--- /dev/null
+++ b/docs/reference/glib/tmpl/strings.sgml
@@ -0,0 +1,365 @@
+<!-- ##### SECTION Title ##### -->
+Strings
+
+<!-- ##### SECTION Short_Description ##### -->
+text buffers which grow automatically as text is added
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+A #GString is similar to a standard C string, except that it grows 
+automatically as text is appended or inserted. Also, it stores the 
+length of the string, so can be used for binary data with embedded 
+nul bytes.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GString ##### -->
+<para>
+The #GString struct contains the public fields of a #GString.
+</para>
+
+@str: points to the character data. It may move as text is added.
+  The <structfield>str</structfield> field is nul-terminated and so 
+  can be used as an ordinary C string.
+@len: contains the length of the string, not including the 
+  terminating nul byte.
+@allocated_len: the number of bytes that can be stored in the
+  string before it needs to be reallocated. May be larger than @len.
+
+<!-- ##### FUNCTION g_string_new ##### -->
+<para>
+
+</para>
+
+@init: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_new_len ##### -->
+<para>
+
+</para>
+
+@init: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_sized_new ##### -->
+<para>
+
+</para>
+
+@dfl_size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_assign ##### -->
+<para>
+
+</para>
+
+@string: 
+@rval: 
+@Returns: 
+
+
+<!-- ##### MACRO g_string_sprintf ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO g_string_sprintfa ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION g_string_vprintf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@args: 
+
+
+<!-- ##### FUNCTION g_string_append_vprintf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@args: 
+
+
+<!-- ##### FUNCTION g_string_printf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_string_append_printf ##### -->
+<para>
+
+</para>
+
+@string: 
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_string_append ##### -->
+<para>
+
+</para>
+
+@string: 
+@val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_append_c ##### -->
+<para>
+
+</para>
+
+@string: 
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_append_unichar ##### -->
+<para>
+
+</para>
+
+@string: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_append_len ##### -->
+<para>
+
+</para>
+
+@string: 
+@val: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_append_uri_escaped ##### -->
+<para>
+
+</para>
+
+@string: 
+@unescaped: 
+@reserved_chars_allowed: 
+@allow_utf8: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_prepend ##### -->
+<para>
+
+</para>
+
+@string: 
+@val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_prepend_c ##### -->
+<para>
+
+</para>
+
+@string: 
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_prepend_unichar ##### -->
+<para>
+
+</para>
+
+@string: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_prepend_len ##### -->
+<para>
+
+</para>
+
+@string: 
+@val: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_insert ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_insert_c ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_insert_unichar ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_insert_len ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@val: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_overwrite ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@val: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_overwrite_len ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@val: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_erase ##### -->
+<para>
+
+</para>
+
+@string: 
+@pos: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_truncate ##### -->
+<para>
+
+</para>
+
+@string: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_set_size ##### -->
+<para>
+
+</para>
+
+@string: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_free ##### -->
+<para>
+
+</para>
+
+@string: 
+@free_segment: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_up ##### -->
+<para>
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_down ##### -->
+<para>
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_hash ##### -->
+<para>
+
+</para>
+
+@str: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_string_equal ##### -->
+<para>
+
+</para>
+
+@v: 
+@v2: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/testing.sgml b/docs/reference/glib/tmpl/testing.sgml
new file mode 100644
index 0000000..e5ec5ab
--- /dev/null
+++ b/docs/reference/glib/tmpl/testing.sgml
@@ -0,0 +1,625 @@
+<!-- ##### SECTION Title ##### -->
+Testing
+
+<!-- ##### SECTION Short_Description ##### -->
+a test framework
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+GLib provides a framework for writing and maintaining unit tests
+in parallel to the code they are testing. The API is designed according 
+to established concepts found in the other test frameworks (JUnit, NUnit, 
+RUnit), which in turn is based on smalltalk unit testing concepts.
+<variablelist>
+  <varlistentry>
+    <term>Test case</term>
+    <listitem><para>
+      Tests (test methods) are grouped together with their 
+      fixture into test cases.
+    </para></listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>Fixture</term>
+    <listitem><para>
+      A test fixture consists of fixture data and setup and teardown methods 
+      to establish the environment for the test functions. We use fresh 
+      fixtures, i.e. fixtures are newly set up and torn down around each test 
+      invocation to avoid dependencies between tests.
+    </para></listitem>
+  </varlistentry>
+  <varlistentry>
+    <term>Test suite</term>
+    <listitem><para>
+      Test cases can be grouped into test suites, to allow subsets of the 
+      available tests to be run. Test suites can be grouped into other test 
+      suites as well.
+    </para></listitem>
+  </varlistentry>
+</variablelist>
+The API is designed to handle creation and registration of test suites and
+test cases implicitly. A simple call like
+<informalexample><programlisting>
+  g_test_add_func ("/misc/assertions", test_assertions);
+</programlisting></informalexample>
+creates a test suite called "misc" with a single test case named "assertions",
+which consists of running the test_assertions function.
+</para>
+<para>
+In addition to the traditional g_assert(), the test framework provides
+an extended set of assertions for string and numerical comparisons:
+g_assert_cmpfloat(), g_assert_cmpint(), g_assert_cmpuint(), g_assert_cmphex(),
+g_assert_cmpstr(). The advantage of these variants over plain g_assert()
+is that the assertion messages can be more elaborate, and include the
+values of the compared entities.
+</para>
+<para>
+GLib ships with two utilities called gtester and gtester-report to 
+facilitate running tests and producing nicely formatted test reports. 
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<link linkend="gtester">gtester</link>,
+<link linkend="gtester-report">gtester-report</link>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_test_minimized_result ##### -->
+<para>
+
+</para>
+
+@minimized_quantity: 
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_test_maximized_result ##### -->
+<para>
+
+</para>
+
+@maximized_quantity: 
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_test_init ##### -->
+<para>
+
+</para>
+
+@argc: 
+@argv: 
+@Varargs: 
+
+
+<!-- ##### MACRO g_test_quick ##### -->
+<para>
+Returns %TRUE if tests are run in quick mode.
+</para>
+
+
+
+<!-- ##### MACRO g_test_slow ##### -->
+<para>
+Returns %TRUE if tests are run in slow mode.
+</para>
+
+
+
+<!-- ##### MACRO g_test_thorough ##### -->
+<para>
+Returns %TRUE if tests are run in thorough mode.
+</para>
+
+
+
+<!-- ##### MACRO g_test_perf ##### -->
+<para>
+Returns %TRUE if tests are run in performance mode.
+</para>
+
+
+
+<!-- ##### MACRO g_test_verbose ##### -->
+<para>
+Returns %TRUE if tests are run in verbose mode.
+</para>
+
+
+
+<!-- ##### MACRO g_test_quiet ##### -->
+<para>
+Returns %TRUE if tests are run in quiet mode.
+</para>
+
+
+
+<!-- ##### FUNCTION g_test_run ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_add_func ##### -->
+<para>
+
+</para>
+
+@testpath: 
+@test_func: 
+
+
+<!-- ##### FUNCTION g_test_add_data_func ##### -->
+<para>
+
+</para>
+
+@testpath: 
+@test_data: 
+@test_func: 
+
+
+<!-- ##### MACRO g_test_add ##### -->
+<para>
+
+</para>
+
+@testpath: 
+@Fixture: 
+@tdata: 
+@fsetup: 
+@ftest: 
+@fteardown: 
+
+
+<!-- ##### FUNCTION g_test_message ##### -->
+<para>
+
+</para>
+
+@format: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION g_test_bug_base ##### -->
+<para>
+
+</para>
+
+@uri_pattern: 
+
+
+<!-- ##### FUNCTION g_test_bug ##### -->
+<para>
+
+</para>
+
+@bug_uri_snippet: 
+
+
+<!-- ##### FUNCTION g_test_timer_start ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION g_test_timer_elapsed ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_timer_last ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_queue_free ##### -->
+<para>
+
+</para>
+
+@gfree_pointer: 
+
+
+<!-- ##### FUNCTION g_test_queue_destroy ##### -->
+<para>
+
+</para>
+
+@destroy_func: 
+@destroy_data: 
+
+
+<!-- ##### MACRO g_test_queue_unref ##### -->
+<para>
+Enqueue an object to be released with g_object_unref() during
+the next teardown phase. This is equivalent to calling g_test_queue_destroy()
+with a destroy callback of g_object_unref().
+</para>
+
+@gobject: the object to unref
+@Since: 2.16
+
+
+<!-- ##### ENUM GTestTrapFlags ##### -->
+<para>
+Test traps are guards around forked tests. These flags
+determine what traps to set.
+</para>
+
+@G_TEST_TRAP_SILENCE_STDOUT: Redirect stdout of the test child to 
+    <filename>/dev/null</filename> so it cannot be observed on the 
+    console during test runs. The actual output is still captured 
+    though to allow later tests with g_test_trap_assert_stdout().
+@G_TEST_TRAP_SILENCE_STDERR: Redirect stderr of the test child to 
+    <filename>/dev/null</filename> so it cannot be observed on the 
+    console during test runs. The actual output is still captured 
+    though to allow later tests with g_test_trap_assert_stderr().
+@G_TEST_TRAP_INHERIT_STDIN: If this flag is given, stdin of the forked 
+    child process is shared with stdin of its parent process. It is 
+    redirected to <filename>/dev/null</filename> otherwise.
+
+<!-- ##### FUNCTION g_test_trap_fork ##### -->
+<para>
+
+</para>
+
+@usec_timeout: 
+@test_trap_flags: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_trap_has_passed ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_trap_reached_timeout ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### MACRO g_test_trap_assert_passed ##### -->
+<para>
+Assert that the last forked test passed. See g_test_trap_fork().
+</para>
+
+@Since: 2.16
+
+
+<!-- ##### MACRO g_test_trap_assert_failed ##### -->
+<para>
+Assert that the last forked test failed. See g_test_trap_fork().
+</para>
+
+@Since: 2.16
+
+
+<!-- ##### MACRO g_test_trap_assert_stdout ##### -->
+<para>
+Assert that the stdout output of the last forked test matches @soutpattern. 
+See g_test_trap_fork().
+</para>
+
+@soutpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
+@Since: 2.16
+
+
+<!-- ##### MACRO g_test_trap_assert_stdout_unmatched ##### -->
+<para>
+Assert that the stdout output of the last forked test does not match 
+@soutpattern.  See g_test_trap_fork().
+</para>
+
+@soutpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
+@Since: 2.16
+
+
+<!-- ##### MACRO g_test_trap_assert_stderr ##### -->
+<para>
+Assert that the stderr output of the last forked test matches @serrpattern. 
+See g_test_trap_fork().
+</para>
+
+@serrpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
+@Since: 2.16
+
+
+<!-- ##### MACRO g_test_trap_assert_stderr_unmatched ##### -->
+<para>
+Assert that the stderr output of the last forked test does not match 
+@serrpattern.  See g_test_trap_fork().
+</para>
+
+@serrpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
+@Since: 2.16
+
+
+<!-- ##### MACRO g_test_rand_bit ##### -->
+<para>
+Get a reproducible random bit (0 or 1),
+see g_test_rand_int() for details on test case random numbers.
+</para>
+
+@Since: 2.16
+
+
+<!-- ##### FUNCTION g_test_rand_int ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_rand_int_range ##### -->
+<para>
+
+</para>
+
+@begin: 
+@end: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_rand_double ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_rand_double_range ##### -->
+<para>
+
+</para>
+
+@range_start: 
+@range_end: 
+@Returns: 
+
+
+<!-- ##### MACRO g_assert ##### -->
+<para>
+Debugging macro to terminate the application if the assertion fails.
+If the assertion fails (i.e. the expression is not true), an error message
+is logged and the application is terminated.
+</para>
+<para>
+The macro can be turned off in final releases of code by defining
+#G_DISABLE_ASSERT when compiling the application.
+</para>
+
+@expr: the expression to check.
+
+
+<!-- ##### MACRO g_assert_not_reached ##### -->
+<para>
+Debugging macro to terminate the application if it is ever reached.
+If it is reached, an error message is logged and the application is terminated.
+</para>
+<para>
+The macro can be turned off in final releases of code by defining
+#G_DISABLE_ASSERT when compiling the application.
+</para>
+
+
+
+<!-- ##### MACRO g_assert_cmpstr ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if a string comparison fails.
+The strings are compared using g_strcmp0().
+</para>
+<para>
+The effect of <literal>g_assert_cmpstr (s1, op, s2)</literal> is the same
+as <literal>g_assert (g_strcmp0 (s1, s2) op 0)</literal>. The advantage of this macro
+is that it can produce a message that includes the actual values of @s1
+and @s2.
+</para>
+<informalexample><programlisting>
+  g_assert_cmpstr (mystring, ==, "fubar");
+</programlisting></informalexample>
+
+@s1: a string (may be %NULL)
+@cmp: The comparison operator to use. One of ==, !=, &lt;, &gt;, &lt;=, &gt;=.
+@s2: another string (may be %NULL)
+@Since: 2.16
+
+
+<!-- ##### MACRO g_assert_cmpint ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if an integer comparison fails.
+</para>
+<para>
+The effect of <literal>g_assert_cmpint (n1, op, n2)</literal> is the same
+as <literal>g_assert (n1 op n2)</literal>. The advantage of this macro
+is that it can produce a message that includes the actual values of @n1
+and @n2.
+</para>
+
+@n1: an integer
+@cmp: The comparison operator to use. One of ==, !=, &lt;, &gt;, &lt;=, &gt;=.
+@n2: another integer
+@Since: 2.16
+
+
+<!-- ##### MACRO g_assert_cmpuint ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if an unsigned integer comparison fails.
+</para>
+<para>
+The effect of <literal>g_assert_cmpuint (n1, op, n2)</literal> is the same
+as <literal>g_assert (n1 op n2)</literal>. The advantage of this macro
+is that it can produce a message that includes the actual values of @n1
+and @n2.
+</para>
+
+@n1: an unsigned integer
+@cmp: The comparison operator to use. One of ==, !=, &lt;, &gt;, &lt;=, &gt;=.
+@n2: another unsigned integer
+@Since: 2.16
+
+
+<!-- ##### MACRO g_assert_cmphex ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if an unsigned integer comparison fails. This is a variant of
+g_assert_cmpuint() that displays the numbers in hexadecimal notation
+in the message.
+</para>
+
+@n1: an unsigned integer
+@cmp: The comparison operator to use. One of ==, !=, &lt;, &gt;, &lt;=, &gt;=.
+@n2: another unsigned integer
+@Since: 2.16
+
+
+<!-- ##### MACRO g_assert_cmpfloat ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if a floating point number comparison fails.
+</para>
+<para>
+The effect of <literal>g_assert_cmpfloat (n1, op, n2)</literal> is the same
+as <literal>g_assert (n1 op n2)</literal>. The advantage of this function
+is that it can produce a message that includes the actual values of @n1
+and @n2.
+</para>
+
+@n1: an floating point number
+@cmp: The comparison operator to use. One of ==, !=, &lt;, &gt;, &lt;=, &gt;=.
+@n2: another floating point number
+@Since: 2.16
+
+
+<!-- ##### MACRO g_assert_no_error ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if a method has returned a #GError.
+</para>
+<para>
+The effect of <literal>g_assert_no_error (err)</literal> is the same
+as <literal>g_assert (err == NULL)</literal>. The advantage of this macro
+is that it can produce a message that includes the error message and code.
+</para>
+
+@err: a #GError, possibly %NULL
+@Since: 2.20
+
+
+<!-- ##### MACRO g_assert_error ##### -->
+<para>
+Debugging macro to terminate the application with a warning message 
+if a method has not returned the correct #GError.
+</para>
+<para>
+The effect of <literal>g_assert_error (err, dom, c)</literal> is the same
+as <literal>g_assert (err != NULL &amp;&amp; err->domain == dom &amp;&amp; err->code == c)</literal>.
+The advantage of this macro is that it can produce a message that
+includes the incorrect error message and code.
+</para>
+<para>
+This can only be used to test for a specific error. If you want to
+test that @err is set, but don't care what it's set to, just use
+<literal>g_assert (err != NULL)</literal>
+</para>
+
+@err: a #GError, possibly %NULL
+@dom: the expected error domain (a #GQuark)
+@c: the expected error code
+@Since: 2.20
+
+
+<!-- ##### TYPEDEF GTestCase ##### -->
+<para>
+An opaque structure representing a test case.
+</para>
+
+
+<!-- ##### TYPEDEF GTestSuite ##### -->
+<para>
+An opaque structure representing a test suite.
+</para>
+
+
+<!-- ##### FUNCTION g_test_create_case ##### -->
+<para>
+
+</para>
+
+@test_name: 
+@data_size: 
+@test_data: 
+@data_setup: 
+@data_test: 
+@data_teardown: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_create_suite ##### -->
+<para>
+
+</para>
+
+@suite_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_get_root ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_test_suite_add ##### -->
+<para>
+
+</para>
+
+@suite: 
+@test_case: 
+
+
+<!-- ##### FUNCTION g_test_suite_add_suite ##### -->
+<para>
+
+</para>
+
+@suite: 
+@nestedsuite: 
+
+
+<!-- ##### FUNCTION g_test_run_suite ##### -->
+<para>
+
+</para>
+
+@suite: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/thread_pools.sgml b/docs/reference/glib/tmpl/thread_pools.sgml
new file mode 100644
index 0000000..df6baed
--- /dev/null
+++ b/docs/reference/glib/tmpl/thread_pools.sgml
@@ -0,0 +1,202 @@
+<!-- ##### SECTION Title ##### -->
+Thread Pools
+
+<!-- ##### SECTION Short_Description ##### -->
+pools of threads to execute work concurrently
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Sometimes you wish to asynchronously fork out the execution of work and
+continue working in your own thread. If that will happen often, the
+overhead of starting and destroying a thread each time might be too
+high. In such cases reusing already started threads seems like a good
+idea. And it indeed is, but implementing this can be tedious and
+error-prone.
+</para>
+
+<para>
+Therefore GLib provides thread pools for your convenience. An added
+advantage is, that the threads can be shared between the different
+subsystems of your program, when they are using GLib.
+</para>
+
+<para>
+To create a new thread pool, you use g_thread_pool_new(). It is
+destroyed by g_thread_pool_free().
+</para>
+
+<para>
+If you want to execute a certain task within a thread pool, you call
+g_thread_pool_push().
+</para>
+
+<para>
+To get the current number of running threads you call
+g_thread_pool_get_num_threads(). To get the number of still
+unprocessed tasks you call g_thread_pool_unprocessed(). To control the
+maximal number of threads for a thread pool, you use
+g_thread_pool_get_max_threads() and g_thread_pool_set_max_threads().
+</para>
+
+<para>
+Finally you can control the number of unused threads, that are kept
+alive by GLib for future use. The current number can be fetched with
+g_thread_pool_get_num_unused_threads(). The maximal number can be
+controlled by g_thread_pool_get_max_unused_threads() and
+g_thread_pool_set_max_unused_threads(). All currently unused threads
+can be stopped by calling g_thread_pool_stop_unused_threads().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+
+<varlistentry>
+<term>#GThread</term>
+<listitem><para>GLib thread system.</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GThreadPool ##### -->
+<para>
+The #GThreadPool struct represents a thread pool. It has three public
+read-only members, but the underlying struct is bigger, so you must not 
+copy this struct.
+</para>
+
+@func: the function to execute in the threads of this pool
+@user_data: the user data for the threads of this pool
+@exclusive: are all threads exclusive to this pool
+
+<!-- ##### FUNCTION g_thread_pool_new ##### -->
+<para>
+
+</para>
+
+@func: 
+@user_data: 
+@max_threads: 
+@exclusive: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_thread_pool_push ##### -->
+<para>
+
+</para>
+
+@pool: 
+@data: 
+@error: 
+
+
+<!-- ##### FUNCTION g_thread_pool_set_max_threads ##### -->
+<para>
+
+</para>
+
+@pool: 
+@max_threads: 
+@error: 
+
+
+<!-- ##### FUNCTION g_thread_pool_get_max_threads ##### -->
+<para>
+
+</para>
+
+@pool: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_thread_pool_get_num_threads ##### -->
+<para>
+
+</para>
+
+@pool: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_thread_pool_unprocessed ##### -->
+<para>
+
+</para>
+
+@pool: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_thread_pool_free ##### -->
+<para>
+
+</para>
+
+@pool: 
+@immediate: 
+@wait_: 
+
+
+<!-- ##### FUNCTION g_thread_pool_set_max_unused_threads ##### -->
+<para>
+
+</para>
+
+@max_threads: 
+
+
+<!-- ##### FUNCTION g_thread_pool_get_max_unused_threads ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_thread_pool_get_num_unused_threads ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_thread_pool_stop_unused_threads ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION g_thread_pool_set_sort_function ##### -->
+<para>
+
+</para>
+
+@pool: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_thread_pool_set_max_idle_time ##### -->
+<para>
+
+</para>
+
+@interval: 
+
+
+<!-- ##### FUNCTION g_thread_pool_get_max_idle_time ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/threads.sgml b/docs/reference/glib/tmpl/threads.sgml
new file mode 100644
index 0000000..3ee9d61
--- /dev/null
+++ b/docs/reference/glib/tmpl/threads.sgml
@@ -0,0 +1,1798 @@
+<!-- ##### SECTION Title ##### -->
+Threads
+
+<!-- ##### SECTION Short_Description ##### -->
+
+thread abstraction; including threads, different mutexes, conditions
+and thread private data
+
+<!-- ##### SECTION Long_Description ##### -->
+
+<para>
+Threads act almost like processes, but unlike processes all threads of
+one process share the same memory. This is good, as it provides easy
+communication between the involved threads via this shared memory, and
+it is bad, because strange things (so called "Heisenbugs") might
+happen if the program is not carefully designed. In particular, due to
+the concurrent nature of threads, no assumptions on the order of
+execution of code running in different threads can be made, unless
+order is explicitly forced by the programmer through synchronization
+primitives.
+</para>
+
+<para>
+The aim of the thread related functions in GLib is to provide a
+portable means for writing multi-threaded software. There are
+primitives for mutexes to protect the access to portions of memory
+(#GMutex, #GStaticMutex, #G_LOCK_DEFINE, #GStaticRecMutex and
+#GStaticRWLock). There are primitives for condition variables to allow
+synchronization of threads (#GCond).  There are primitives
+for thread-private data - data that every thread has a private instance of
+(#GPrivate, #GStaticPrivate). Last but definitely not least there are
+primitives to portably create and manage threads (#GThread).
+</para>
+
+<para>
+You must call g_thread_init() before executing any other GLib
+functions (except g_mem_set_vtable()) in a GLib program if
+g_thread_init() will be called at all. This is a requirement even if
+no threads are in fact ever created by the process. It is enough that
+g_thread_init() is called. If other GLib functions have been called
+before that, the behaviour of the program is undefined. An exception
+is g_mem_set_vtable() which may be called before g_thread_init().
+
+Failing this requirement can lead to hangs or crashes, apparently more
+easily on Windows than on Linux, for example.
+
+Please note that if you call functions in some GLib-using library, in
+particular those above the GTK+ stack, that library might well call
+g_thread_init() itself, or call some other library that calls
+g_thread_init(). Thus, if you use some GLib-based library that is
+above the GTK+ stack, it is safest to call g_thread_init() in your
+application's main() before calling any GLib functions or functions in
+GLib-using libraries.
+
+After calling g_thread_init(), GLib is completely
+thread safe (all global data is automatically locked), but individual
+data structure instances are not automatically locked for performance
+reasons. So, for example you must coordinate accesses to the same
+#GHashTable from multiple threads.  The two notable exceptions from
+this rule are #GMainLoop and #GAsyncQueue,
+which <emphasis>are</emphasis> threadsafe and needs no further
+application-level locking to be accessed from multiple threads.
+</para>
+
+<para>
+To help debugging problems in multithreaded applications, GLib supports
+error-checking mutexes that will give you helpful error messages on
+common problems. To use error-checking mutexes, define the symbol 
+#G_ERRORCHECK_MUTEXES when compiling the application.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+
+<varlistentry>
+<term>#GThreadPool</term>
+<listitem><para>Thread pools.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>#GAsyncQueue</term>
+<listitem><para>Send asynchronous messages between threads.</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO G_THREADS_ENABLED ##### -->
+
+<para>
+This macro is defined if GLib was compiled with thread support. This
+does not necessarily mean that there is a thread implementation
+available, but it does mean that the infrastructure is in place and
+that once you provide a thread implementation to g_thread_init(), GLib
+will be multi-thread safe. If #G_THREADS_ENABLED is not defined, then
+Glib is not, and cannot be, multi-thread safe.
+</para>
+
+
+
+<!-- ##### MACRO G_THREADS_IMPL_POSIX ##### -->
+
+<para>
+This macro is defined if POSIX style threads are used.
+</para>
+
+
+
+<!-- ##### MACRO G_THREADS_IMPL_NONE ##### -->
+
+<para>
+This macro is defined if no thread implementation is used. You can,
+however, provide one to g_thread_init() to make GLib multi-thread safe.
+</para>
+
+
+
+<!-- ##### MACRO G_THREAD_ERROR ##### -->
+<para>
+The error domain of the GLib thread subsystem.
+</para>
+
+
+
+<!-- ##### ENUM GThreadError ##### -->
+<para>
+Possible errors of thread related functions.
+</para>
+
+@G_THREAD_ERROR_AGAIN: a thread couldn't be created due to resource
+shortage. Try again later.
+
+<!-- ##### STRUCT GThreadFunctions ##### -->
+
+<para>
+This function table is used by g_thread_init() to initialize the
+thread system. The functions in the table are directly used by their
+g_* prepended counterparts (described in this document).  For example,
+if you call g_mutex_new() then mutex_new() from the table provided to
+g_thread_init() will be called.
+</para>
+
+<note>
+<para>
+Do not use this struct unless you know what you are doing.
+</para>
+</note>
+
+@mutex_new: 
+@mutex_lock: 
+@mutex_trylock: 
+@mutex_unlock: 
+@mutex_free: 
+@cond_new: 
+@cond_signal: 
+@cond_broadcast: 
+@cond_wait: 
+@cond_timed_wait: 
+@cond_free: 
+@private_new: 
+@private_get: 
+@private_set: 
+@thread_create: 
+@thread_yield: 
+@thread_join: 
+@thread_exit: 
+@thread_set_priority: 
+@thread_self: 
+@thread_equal: 
+
+<!-- ##### FUNCTION g_thread_init ##### -->
+
+<para>
+If you use GLib from more than one thread, you must initialize
+the thread system by calling g_thread_init(). Most of the time you 
+will only have to call <literal>g_thread_init (NULL)</literal>. 
+</para>
+
+<note><para>
+Do not call g_thread_init() with a non-%NULL parameter unless you
+really know what you are doing.
+</para></note>
+
+<note><para>
+g_thread_init() must not be called directly or indirectly as a
+callback from GLib. Also no mutexes may be currently locked while
+calling g_thread_init().
+</para></note>
+
+<note><para>
+g_thread_init() changes the way in which #GTimer measures elapsed time.
+As a consequence, timers that are running while g_thread_init() is called
+may report unreliable times.
+</para></note>
+
+<para>
+g_thread_init() might only be called once. On the second call
+it will abort with an error. If you want to make sure that the thread
+system is initialized, you can do this:
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+if (!g_thread_supported (<!-- -->)) g_thread_init (NULL);
+</programlisting>
+</informalexample>
+</para>
+
+<para>
+After that line, either the thread system is initialized or, if no
+thread system is available in GLib (i.e. either #G_THREADS_ENABLED is
+not defined or #G_THREADS_IMPL_NONE is defined), the program will
+abort.
+</para>
+
+<para>
+If no thread system is available and @vtable is %NULL or if not all
+elements of @vtable are non-%NULL, then g_thread_init() will abort.
+</para>
+
+<note>
+<para>
+To use g_thread_init() in your program, you have to link with the
+libraries that the command <command>pkg-config --libs gthread-2.0</command> 
+outputs. This is not the case for all the other thread related functions of
+GLib. Those can be used without having to link with the thread libraries.
+</para>
+</note>
+
+@vtable: a function table of type #GThreadFunctions, that provides the
+entry points to the thread system to be used.
+
+
+<!-- ##### FUNCTION g_thread_supported ##### -->
+<para>
+This function returns %TRUE if the thread system is initialized, and
+%FALSE if it is not.
+</para>
+
+<note>
+<para>
+This function is actually a macro. Apart from taking the address of it
+you can however use it as if it was a function.
+</para>
+</note>
+
+@Returns: %TRUE, if the thread system is initialized.
+
+
+<!-- ##### FUNCTION g_thread_get_initialized ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GThreadFunc ##### -->
+<para>
+Specifies the type of the @func functions passed to
+g_thread_create() or g_thread_create_full().
+</para>
+
+@data: data passed to the thread.
+@Returns: the return value of the thread, which will be returned by
+g_thread_join().
+
+
+<!-- ##### ENUM GThreadPriority ##### -->
+<para>
+Specifies the priority of a thread. 
+</para>
+
+<note>
+<para>
+It is not guaranteed that threads with different priorities really
+behave accordingly. On some systems (e.g. Linux) there are no thread
+priorities. On other systems (e.g. Solaris) there doesn't seem to be
+different scheduling for different priorities. All in all try to avoid
+being dependent on priorities.
+</para>
+</note>
+
+@G_THREAD_PRIORITY_LOW: a priority lower than normal
+@G_THREAD_PRIORITY_NORMAL: the default priority
+@G_THREAD_PRIORITY_HIGH: a priority higher than normal
+@G_THREAD_PRIORITY_URGENT: the highest priority
+
+<!-- ##### STRUCT GThread ##### -->
+<para>
+The #GThread struct represents a running thread. It has three public
+read-only members, but the underlying struct is bigger, so you must
+not copy this struct.
+</para>
+
+<note>
+<para>
+Resources for a joinable thread are not fully released until
+g_thread_join() is called for that thread.
+</para>
+</note>
+
+
+<!-- ##### FUNCTION g_thread_create ##### -->
+<para>
+This function creates a new thread with the default priority.
+</para>
+
+<para>
+If @joinable is %TRUE, you can wait for this threads termination
+calling g_thread_join(). Otherwise the thread will just disappear when
+it terminates. 
+</para>
+
+<para>
+The new thread executes the function @func with the argument
+@data. If the thread was created successfully, it is returned.
+</para>
+
+<para>
+@error can be %NULL to ignore errors, or non-%NULL to report errors. The
+error is set, if and only if the function returns %NULL.
+</para>
+
+@func: a function to execute in the new thread.
+@data: an argument to supply to the new thread.
+@joinable: should this thread be joinable?
+@error: return location for error.
+@Returns: the new #GThread on success.
+
+
+<!-- ##### FUNCTION g_thread_create_full ##### -->
+<para>
+This function creates a new thread with the priority @priority. If the
+underlying thread implementation supports it, the thread gets a stack
+size of @stack_size or the default value for the current platform, if
+@stack_size is 0.
+</para>
+
+<para>
+If @joinable is %TRUE, you can wait for this threads termination
+calling g_thread_join(). Otherwise the thread will just disappear when
+it terminates. If @bound is %TRUE, this thread will be scheduled in
+the system scope, otherwise the implementation is free to do
+scheduling in the process scope. The first variant is more expensive
+resource-wise, but generally faster. On some systems (e.g. Linux) all
+threads are bound.
+</para>
+
+<para>
+The new thread executes the function @func with the argument
+@data. If the thread was created successfully, it is returned.
+</para>
+
+<para>
+@error can be %NULL to ignore errors, or non-%NULL to report errors. The
+error is set, if and only if the function returns %NULL.
+</para>
+
+<note>
+<para>
+It is not guaranteed that threads with different priorities really
+behave accordingly. On some systems (e.g. Linux) there are no thread
+priorities. On other systems (e.g. Solaris) there doesn't seem to be
+different scheduling for different priorities. All in all try to avoid
+being dependent on priorities. Use %G_THREAD_PRIORITY_NORMAL here as a
+default.
+</para>
+</note>
+
+<note>
+<para>
+Only use g_thread_create_full() if you really can't use
+g_thread_create() instead. g_thread_create() does not take
+@stack_size, @bound, and @priority as arguments, as they should only
+be used in cases in which it is unavoidable.
+</para>
+</note>
+
+@func: a function to execute in the new thread.
+@data: an argument to supply to the new thread.
+@stack_size: a stack size for the new thread.
+@joinable: should this thread be joinable?
+@bound: should this thread be bound to a system thread?
+@priority: a priority for the thread.
+@error: return location for error.
+@Returns: the new #GThread on success.
+
+
+<!-- ##### FUNCTION g_thread_self ##### -->
+<para>
+This functions returns the #GThread corresponding to the calling thread.
+</para>
+
+@Returns: the current thread.
+
+
+<!-- ##### FUNCTION g_thread_join ##### -->
+<para>
+Waits until @thread finishes, i.e. the function @func, as given
+to g_thread_create(), returns or g_thread_exit() is called by
+@thread. All resources of @thread including the #GThread struct are
+released. @thread must have been created with @joinable=%TRUE in
+g_thread_create(). The value returned by @func or given to
+g_thread_exit() by @thread is returned by this function.
+</para>
+
+@thread: a #GThread to be waited for.
+@Returns: the return value of the thread.
+
+
+<!-- ##### FUNCTION g_thread_set_priority ##### -->
+<para>
+Changes the priority of @thread to @priority.
+</para>
+
+<note>
+<para>
+It is not guaranteed that threads with different priorities really
+behave accordingly. On some systems (e.g. Linux) there are no thread
+priorities. On other systems (e.g. Solaris) there doesn't seem to be
+different scheduling for different priorities. All in all try to avoid
+being dependent on priorities.
+</para>
+</note>
+
+@thread: a #GThread.
+@priority: a new priority for @thread.
+
+
+<!-- ##### FUNCTION g_thread_yield ##### -->
+<para>
+Gives way to other threads waiting to be scheduled. 
+</para>
+
+<para>
+This function is often used as a method to make busy wait less
+evil. But in most cases you will encounter, there are better methods
+to do that. So in general you shouldn't use this function.
+</para>
+
+
+
+<!-- ##### FUNCTION g_thread_exit ##### -->
+<para>
+Exits the current thread. If another thread is waiting for that thread
+using g_thread_join() and the current thread is joinable, the waiting
+thread will be woken up and get @retval as the return value of
+g_thread_join(). If the current thread is not joinable, @retval is
+ignored. Calling
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+g_thread_exit (retval);
+</programlisting>
+</informalexample>
+</para>
+
+<para>
+is equivalent to calling 
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+return retval;
+</programlisting>
+</informalexample>
+</para>
+
+<para>
+in the function @func, as given to g_thread_create().
+</para>
+
+<note>
+<para>
+Never call g_thread_exit() from within a thread of a #GThreadPool, as
+that will mess up the bookkeeping and lead to funny and unwanted results.
+</para>
+</note>
+
+@retval: the return value of this thread.
+
+
+<!-- ##### FUNCTION g_thread_foreach ##### -->
+<para>
+
+</para>
+
+@thread_func: 
+@user_data: 
+
+
+<!-- ##### STRUCT GMutex ##### -->
+
+<para>
+The #GMutex struct is an opaque data structure to represent a mutex
+(mutual exclusion). It can be used to protect data against shared
+access. Take for example the following function:
+
+<example>
+<title>A function which will not work in a threaded environment</title>
+<programlisting>
+  int give_me_next_number (<!-- -->)
+  {
+    static int current_number = 0;
+
+    /* now do a very complicated calculation to calculate the new number,
+       this might for example be a random number generator */
+    current_number = calc_next_number (current_number); 
+    return current_number;
+  }
+</programlisting>
+</example>
+</para>
+
+<para>
+It is easy to see that this won't work in a multi-threaded
+application. There current_number must be protected against shared
+access. A first naive implementation would be:
+</para>
+
+<para>
+<example>
+<title>The wrong way to write a thread-safe function</title>
+<programlisting>
+  int give_me_next_number (<!-- -->)
+  {
+    static int current_number = 0;
+    int ret_val;
+    static GMutex * mutex = NULL;
+
+    if (!mutex)
+      mutex = g_mutex_new (<!-- -->);
+    g_mutex_lock (mutex);
+    ret_val = current_number = calc_next_number (current_number); 
+    g_mutex_unlock (mutex);
+    return ret_val;
+  }
+</programlisting>
+</example>
+</para>
+
+<para>
+This looks like it would work, but there is a race condition while
+constructing the mutex and this code cannot work reliable. Please do
+not use such constructs in your own programs! One working solution is:
+</para>
+
+<para>
+<example>
+<title>A correct thread-safe function</title>
+<programlisting>
+  static GMutex *give_me_next_number_mutex = NULL;
+
+  /* this function must be called before any call to give_me_next_number (<!-- -->)
+     it must be called exactly once. */
+  void init_give_me_next_number (<!-- -->) 
+  {
+    g_assert (give_me_next_number_mutex == NULL);
+    give_me_next_number_mutex = g_mutex_new (<!-- -->);
+  }
+
+  int give_me_next_number (<!-- -->)
+  {
+    static int current_number = 0;
+    int ret_val;
+
+    g_mutex_lock (give_me_next_number_mutex);
+    ret_val = current_number = calc_next_number (current_number); 
+    g_mutex_unlock (give_me_next_number_mutex);
+    return ret_val;
+  }
+</programlisting>
+</example>
+</para>
+
+<para>
+#GStaticMutex provides a simpler and safer way of doing this.
+</para>
+
+<para>
+If you want to use a mutex, and your code should also work without
+calling g_thread_init() first, then you can not use a #GMutex, as
+g_mutex_new() requires that the thread system be initialized. Use a
+#GStaticMutex instead.
+</para>
+
+<para>
+A #GMutex should only be accessed via the following functions.
+</para>
+
+<note>
+<para>
+All of the <function>g_mutex_*</function> functions are actually macros. 
+Apart from taking their addresses, you can however use them as if they 
+were functions.
+</para>
+</note>
+
+
+<!-- ##### FUNCTION g_mutex_new ##### -->
+
+<para>
+Creates a new #GMutex. 
+</para>
+
+<note>
+<para>
+This function will abort if g_thread_init() has not been called yet.
+</para>
+</note>
+
+@Returns: a new #GMutex.
+
+
+<!-- ##### FUNCTION g_mutex_lock ##### -->
+
+<para>
+Locks @mutex. If @mutex is already locked by another thread, the
+current thread will block until @mutex is unlocked by the other
+thread.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been
+called, and, in that case, will do nothing.
+</para>
+
+<note>
+<para>
+#GMutex is neither guaranteed to be recursive nor to be non-recursive,
+i.e. a thread could deadlock while calling g_mutex_lock(), if it
+already has locked @mutex. Use #GStaticRecMutex, if you need recursive
+mutexes.
+</para>
+</note>
+
+@mutex: a #GMutex.
+
+
+<!-- ##### FUNCTION g_mutex_trylock ##### -->
+
+<para>
+Tries to lock @mutex. If @mutex is already locked by another
+thread, it immediately returns %FALSE. Otherwise it locks @mutex
+and returns %TRUE.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been
+called, and, in that case, will immediately return %TRUE.
+</para>
+
+<note>
+<para>
+#GMutex is neither guaranteed to be recursive nor to be non-recursive,
+i.e. the return value of g_mutex_trylock() could be both %FALSE or
+%TRUE, if the current thread already has locked @mutex. Use
+#GStaticRecMutex, if you need recursive mutexes.
+</para>
+</note>
+
+@mutex: a #GMutex.
+@Returns: %TRUE, if @mutex could be locked.
+
+
+<!-- ##### FUNCTION g_mutex_unlock ##### -->
+
+<para>
+Unlocks @mutex. If another thread is blocked in a g_mutex_lock() call
+for @mutex, it will be woken and can lock @mutex itself.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been
+called, and, in that case, will do nothing.
+</para>
+
+@mutex: a #GMutex.
+
+
+<!-- ##### FUNCTION g_mutex_free ##### -->
+
+<para>
+Destroys @mutex.
+</para>
+
+@mutex: a #GMutex.
+
+
+<!-- ##### STRUCT GStaticMutex ##### -->
+
+<para>
+A #GStaticMutex works like a #GMutex, but it has one significant
+advantage. It doesn't need to be created at run-time like a #GMutex,
+but can be defined at compile-time. Here is a shorter, easier and
+safer version of our <function>give_me_next_number()</function> example:
+</para>
+
+<para>
+<example>
+<title>Using <structname>GStaticMutex</structname> to simplify thread-safe programming</title>
+<programlisting>
+  int give_me_next_number (<!-- -->)
+  {
+    static int current_number = 0;
+    int ret_val;
+    static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
+
+    g_static_mutex_lock (&amp;mutex);
+    ret_val = current_number = calc_next_number (current_number); 
+    g_static_mutex_unlock (&amp;mutex);
+    return ret_val;
+  }
+</programlisting>
+</example>
+</para>
+
+<para>
+Sometimes you would like to dynamically create a mutex. If you don't
+want to require prior calling to g_thread_init(), because your code
+should also be usable in non-threaded programs, you are not able to
+use g_mutex_new() and thus #GMutex, as that requires a prior call to
+g_thread_init(). In theses cases you can also use a #GStaticMutex. It
+must be initialized with g_static_mutex_init() before using it and
+freed with with g_static_mutex_free() when not needed anymore to free
+up any allocated resources.
+</para>
+
+<para>
+Even though #GStaticMutex is not opaque, it should only be used with
+the following functions, as it is defined differently on different
+platforms.
+</para>
+
+<para>
+All of the <function>g_static_mutex_*</function> functions apart from
+<function>g_static_mutex_get_mutex</function> can also be used even if
+g_thread_init() has not yet been called. Then they do nothing, apart
+from <function>g_static_mutex_trylock</function>, which does nothing
+but returning %TRUE.
+</para>
+
+<note>
+<para>
+All of the <function>g_static_mutex_*</function> functions are actually 
+macros. Apart from taking their addresses, you can however use them 
+as if they were functions.
+</para>
+</note>
+
+
+<!-- ##### MACRO G_STATIC_MUTEX_INIT ##### -->
+
+<para>
+A #GStaticMutex must be initialized with this macro, before it can be
+used. This macro can used be to initialize a variable, but it cannot
+be assigned to a variable. In that case you have to use
+g_static_mutex_init().
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+GStaticMutex my_mutex = G_STATIC_MUTEX_INIT;
+</programlisting>
+</informalexample>
+</para>
+
+
+
+<!-- ##### FUNCTION g_static_mutex_init ##### -->
+<para>
+Initializes @mutex. Alternatively you can initialize it with
+#G_STATIC_MUTEX_INIT.
+</para>
+
+@mutex: a #GStaticMutex to be initialized.
+
+
+<!-- ##### FUNCTION g_static_mutex_lock ##### -->
+<para>
+Works like g_mutex_lock(), but for a #GStaticMutex.
+</para>
+
+@mutex: a #GStaticMutex.
+
+
+<!-- ##### FUNCTION g_static_mutex_trylock ##### -->
+
+<para>
+Works like g_mutex_trylock(), but for a #GStaticMutex.
+</para>
+
+@mutex: a #GStaticMutex.
+@Returns: %TRUE, if the #GStaticMutex could be locked.
+
+
+<!-- ##### FUNCTION g_static_mutex_unlock ##### -->
+
+<para>
+Works like g_mutex_unlock(), but for a #GStaticMutex.
+</para>
+
+@mutex: a #GStaticMutex.
+
+
+<!-- ##### FUNCTION g_static_mutex_get_mutex ##### -->
+
+<para>
+For some operations (like g_cond_wait()) you must have a #GMutex
+instead of a #GStaticMutex. This function will return the
+corresponding #GMutex for @mutex.
+</para>
+
+@mutex: a #GStaticMutex.
+@Returns: the #GMutex corresponding to @mutex.
+
+
+<!-- ##### FUNCTION g_static_mutex_free ##### -->
+<para>
+Releases all resources allocated to @mutex. 
+</para>
+
+<para>
+You don't have to call this functions for a #GStaticMutex with an
+unbounded lifetime, i.e. objects declared 'static', but if you have a
+#GStaticMutex as a member of a structure and the structure is freed,
+you should also free the #GStaticMutex.
+</para>
+
+@mutex: a #GStaticMutex to be freed.
+
+
+<!-- ##### MACRO G_LOCK_DEFINE ##### -->
+
+<para>
+The %G_LOCK_* macros provide a convenient interface to #GStaticMutex
+with the advantage that they will expand to nothing in programs
+compiled against a thread-disabled GLib, saving code and memory
+there. #G_LOCK_DEFINE defines a lock. It can appear anywhere variable
+definitions may appear in programs, i.e. in the first block of a
+function or outside of functions. The @name parameter will be mangled
+to get the name of the #GStaticMutex. This means that you can use
+names of existing variables as the parameter - e.g. the name of the
+variable you intent to protect with the lock. Look at our
+<function>give_me_next_number()</function> example using the %G_LOCK_* macros:
+</para>
+
+<para>
+<example>
+<title>Using the %G_LOCK_* convenience macros</title>
+<programlisting>
+G_LOCK_DEFINE (current_number);
+
+int give_me_next_number (<!-- -->)
+  {
+    static int current_number = 0;
+    int ret_val;
+
+    G_LOCK (current_number);
+    ret_val = current_number = calc_next_number (current_number); 
+    G_UNLOCK (current_number);
+    return ret_val;
+  }
+</programlisting>
+</example>
+</para>
+
+@name: the name of the lock.
+
+
+<!-- ##### MACRO G_LOCK_DEFINE_STATIC ##### -->
+
+<para>
+This works like #G_LOCK_DEFINE, but it creates a static object.
+</para>
+
+@name: the name of the lock.
+
+
+<!-- ##### MACRO G_LOCK_EXTERN ##### -->
+
+<para>
+This declares a lock, that is defined with #G_LOCK_DEFINE in another module.
+</para>
+
+@name: the name of the lock.
+
+
+<!-- ##### MACRO G_LOCK ##### -->
+
+<para>
+Works like g_mutex_lock(), but for a lock defined with #G_LOCK_DEFINE.
+</para>
+
+@name: the name of the lock.
+
+
+<!-- ##### MACRO G_TRYLOCK ##### -->
+
+<para>
+Works like g_mutex_trylock(), but for a lock defined with #G_LOCK_DEFINE.
+</para>
+
+@name: the name of the lock.
+@Returns: %TRUE, if the lock could be locked.
+
+
+<!-- ##### MACRO G_UNLOCK ##### -->
+
+<para>
+Works like g_mutex_unlock(), but for a lock defined with #G_LOCK_DEFINE.
+</para>
+
+@name: the name of the lock.
+
+
+<!-- ##### STRUCT GStaticRecMutex ##### -->
+<para>
+A #GStaticRecMutex works like a #GStaticMutex, but it can be locked
+multiple times by one thread. If you enter it n times, you have to
+unlock it n times again to let other threads lock it. An exception is
+the function g_static_rec_mutex_unlock_full(): that allows you to
+unlock a #GStaticRecMutex completely returning the depth, (i.e. the
+number of times this mutex was locked). The depth can later be used to
+restore the state of the #GStaticRecMutex by calling
+g_static_rec_mutex_lock_full().
+</para>
+
+<para>
+Even though #GStaticRecMutex is not opaque, it should only be used with
+the following functions.
+</para>
+
+<para>
+All of the <function>g_static_rec_mutex_*</function> functions can be
+used even if g_thread_init() has not been called. Then they do
+nothing, apart from <function>g_static_rec_mutex_trylock</function>,
+which does nothing but returning %TRUE.
+</para>
+
+
+<!-- ##### MACRO G_STATIC_REC_MUTEX_INIT ##### -->
+<para>
+A #GStaticRecMutex must be initialized with this macro before it can
+be used. This macro can used be to initialize a variable, but it
+cannot be assigned to a variable. In that case you have to use
+g_static_rec_mutex_init().
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+GStaticRecMutex my_mutex = G_STATIC_REC_MUTEX_INIT;
+</programlisting>
+</informalexample>
+</para>
+
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_init ##### -->
+<para>
+A #GStaticRecMutex must be initialized with this function before it
+can be used. Alternatively you can initialize it with
+#G_STATIC_REC_MUTEX_INIT.
+</para>
+
+@mutex: a #GStaticRecMutex to be initialized.
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_lock ##### -->
+<para>
+Locks @mutex. If @mutex is already locked by another thread, the
+current thread will block until @mutex is unlocked by the other
+thread. If @mutex is already locked by the calling thread, this
+functions increases the depth of @mutex and returns immediately.
+</para>
+
+@mutex: a #GStaticRecMutex to lock.
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_trylock ##### -->
+<para>
+Tries to lock @mutex. If @mutex is already locked by another thread,
+it immediately returns %FALSE. Otherwise it locks @mutex and returns
+%TRUE. If @mutex is already locked by the calling thread, this
+functions increases the depth of @mutex and immediately returns %TRUE.
+</para>
+
+@mutex: a #GStaticRecMutex to lock.
+@Returns: %TRUE, if @mutex could be locked.
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_unlock ##### -->
+<para>
+Unlocks @mutex. Another thread will be allowed to lock @mutex only
+when it has been unlocked as many times as it had been locked
+before. If @mutex is completely unlocked and another thread is blocked
+in a g_static_rec_mutex_lock() call for @mutex, it will be woken and
+can lock @mutex itself.
+</para>
+
+@mutex: a #GStaticRecMutex to unlock.
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_lock_full ##### -->
+<para>
+Works like calling g_static_rec_mutex_lock() for @mutex @depth times.
+</para>
+
+@mutex: a #GStaticRecMutex to lock.
+@depth: number of times this mutex has to be unlocked to be completely unlocked.
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_unlock_full ##### -->
+<para>
+Completely unlocks @mutex. If another thread is blocked in a
+g_static_rec_mutex_lock() call for @mutex, it will be woken and can
+lock @mutex itself. This function returns the number of times that
+@mutex has been locked by the current thread. To restore the state
+before the call to g_static_rec_mutex_unlock_full() you can call
+g_static_rec_mutex_lock_full() with the depth returned by this
+function.
+</para>
+
+@mutex: a #GStaticRecMutex to completely unlock.
+@Returns: number of times @mutex has been locked by the current thread.
+
+
+<!-- ##### FUNCTION g_static_rec_mutex_free ##### -->
+<para>
+Releases all resources allocated to a #GStaticRecMutex.
+</para>
+
+<para>
+You don't have to call this functions for a #GStaticRecMutex with an
+unbounded lifetime, i.e. objects declared 'static', but if you have a
+#GStaticRecMutex as a member of a structure and the structure is
+freed, you should also free the #GStaticRecMutex.
+</para>
+
+@mutex: a #GStaticRecMutex to be freed.
+
+
+<!-- ##### STRUCT GStaticRWLock ##### -->
+<para>
+The #GStaticRWLock struct represents a read-write lock. A read-write
+lock can be used for protecting data that some portions of code only
+read from, while others also write. In such situations it is
+desirable that several readers can read at once, whereas of course
+only one writer may write at a time. Take a look at the following
+example:
+
+<example>
+<title>An array with access functions</title>
+<programlisting>
+  GStaticRWLock rwlock = G_STATIC_RW_LOCK_INIT;
+
+  GPtrArray *array;
+
+  gpointer my_array_get (guint index)
+  {
+    gpointer retval = NULL;
+
+    if (!array)
+      return NULL;
+
+    g_static_rw_lock_reader_lock (&amp;rwlock);
+
+    if (index &lt; array->len)
+      retval = g_ptr_array_index (array, index);
+
+    g_static_rw_lock_reader_unlock (&amp;rwlock);
+
+    return retval;
+  }
+
+  void my_array_set (guint index, gpointer data)
+  {
+    g_static_rw_lock_writer_lock (&amp;rwlock);
+
+    if (!array)
+      array = g_ptr_array_new (<!-- -->);
+
+    if (index >= array->len)
+      g_ptr_array_set_size (array, index+1);
+
+    g_ptr_array_index (array, index) = data; 
+
+    g_static_rw_lock_writer_unlock (&amp;rwlock);
+  }
+</programlisting>
+</example>
+</para>
+
+<para>
+This example shows an array which can be accessed by many readers
+(the <function>my_array_get()</function> function) simultaneously, 
+whereas the writers (the <function>my_array_set()</function> function) 
+will only be allowed once at a time and only if no readers currently access 
+the array. This is because of the potentially dangerous resizing of the 
+array. Using these functions is fully multi-thread safe now. 
+</para>
+
+<para>
+Most of the time, writers should have precedence over readers. That
+means, for this implementation, that as soon as a writer wants to lock
+the data, no other reader is allowed to lock the data, whereas, of
+course, the readers that already have locked the data are allowed to
+finish their operation. As soon as the last reader unlocks the data,
+the writer will lock it.
+</para>
+
+<para>
+Even though #GStaticRWLock is not opaque, it should only be used with
+the following functions.
+</para>
+
+<para>
+All of the <function>g_static_rw_lock_*</function> functions can be 
+used even if g_thread_init() has not been called. Then they do
+nothing, apart from <function>g_static_rw_lock_*_trylock</function>,
+which does nothing but returning %TRUE.
+</para>
+
+<note>
+<para>
+A read-write lock has a higher overhead than a mutex. For example, both
+g_static_rw_lock_reader_lock() and g_static_rw_lock_reader_unlock()
+have to lock and unlock a #GStaticMutex, so it takes at least twice the
+time to lock and unlock a #GStaticRWLock that it does to lock and unlock a
+#GStaticMutex. So only data structures that are accessed by multiple
+readers, and which keep the lock for a considerable time justify a
+#GStaticRWLock. The above example most probably would fare better with
+a #GStaticMutex.
+</para>
+</note>
+
+
+<!-- ##### MACRO G_STATIC_RW_LOCK_INIT ##### -->
+<para>
+A #GStaticRWLock must be initialized with this macro before it can
+be used. This macro can used be to initialize a variable, but it
+cannot be assigned to a variable. In that case you have to use
+g_static_rw_lock_init().
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+GStaticRWLock my_lock = G_STATIC_RW_LOCK_INIT;
+</programlisting>
+</informalexample>
+</para>
+
+
+
+<!-- ##### FUNCTION g_static_rw_lock_init ##### -->
+<para>
+A #GStaticRWLock must be initialized with this function before it can
+be used. Alternatively you can initialize it with
+#G_STATIC_RW_LOCK_INIT.
+</para>
+
+@lock: a #GStaticRWLock to be initialized.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_reader_lock ##### -->
+<para>
+Locks @lock for reading. There may be unlimited concurrent locks for
+reading of a #GStaticRWLock at the same time.  If @lock is already
+locked for writing by another thread or if another thread is already
+waiting to lock @lock for writing, this function will block until
+@lock is unlocked by the other writing thread and no other writing
+threads want to lock @lock. This lock has to be unlocked by
+g_static_rw_lock_reader_unlock().
+</para>
+
+<para>
+#GStaticRWLock is not recursive. It might seem to be possible to
+recursively lock for reading, but that can result in a deadlock, due
+to writer preference.
+</para>
+
+@lock: a #GStaticRWLock to lock for reading.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_reader_trylock ##### -->
+<para>
+Tries to lock @lock for reading. If @lock is already locked for
+writing by another thread or if another thread is already waiting to
+lock @lock for writing, immediately returns %FALSE. Otherwise locks
+@lock for reading and returns %TRUE. This lock has to be unlocked by
+g_static_rw_lock_reader_unlock().
+</para>
+
+@lock: a #GStaticRWLock to lock for reading.
+@Returns: %TRUE, if @lock could be locked for reading.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_reader_unlock ##### -->
+<para>
+Unlocks @lock. If a thread waits to lock @lock for writing and all
+locks for reading have been unlocked, the waiting thread is woken up
+and can lock @lock for writing.
+</para>
+
+@lock: a #GStaticRWLock to unlock after reading.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_writer_lock ##### -->
+<para>
+Locks @lock for writing. If @lock is already locked for writing or
+reading by other threads, this function will block until @lock is
+completely unlocked and then lock @lock for writing. While this
+functions waits to lock @lock, no other thread can lock @lock for
+reading. When @lock is locked for writing, no other thread can lock
+@lock (neither for reading nor writing). This lock has to be unlocked
+by g_static_rw_lock_writer_unlock().
+</para>
+
+@lock: a #GStaticRWLock to lock for writing.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_writer_trylock ##### -->
+<para>
+Tries to lock @lock for writing. If @lock is already locked (for
+either reading or writing) by another thread, it immediately returns
+%FALSE. Otherwise it locks @lock for writing and returns %TRUE. This
+lock has to be unlocked by g_static_rw_lock_writer_unlock().
+</para>
+
+@lock: a #GStaticRWLock to lock for writing.
+@Returns: %TRUE, if @lock could be locked for writing.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_writer_unlock ##### -->
+<para>
+Unlocks @lock. If a thread is waiting to lock @lock for writing and
+all locks for reading have been unlocked, the waiting thread is woken
+up and can lock @lock for writing. If no thread is waiting to lock
+@lock for writing, and some thread or threads are waiting to lock @lock
+for reading, the waiting threads are woken up and can lock @lock for
+reading.
+</para>
+
+@lock: a #GStaticRWLock to unlock after writing.
+
+
+<!-- ##### FUNCTION g_static_rw_lock_free ##### -->
+<para>
+Releases all resources allocated to @lock. 
+</para>
+
+<para>
+You don't have to call this functions for a #GStaticRWLock with an
+unbounded lifetime, i.e. objects declared 'static', but if you have a
+#GStaticRWLock as a member of a structure, and the structure is freed,
+you should also free the #GStaticRWLock.
+</para>
+
+@lock: a #GStaticRWLock to be freed.
+
+
+<!-- ##### STRUCT GCond ##### -->
+
+<para>
+The #GCond struct is an opaque data structure that represents a
+condition. Threads can block on a #GCond if they find a certain
+condition to be false. If other threads change the state of this
+condition they signal the #GCond, and that causes the waiting threads
+to be woken up.
+</para>
+
+<para>
+<example>
+<title>Using GCond to block a thread until a condition is satisfied</title>
+<programlisting>
+GCond* data_cond = NULL;   /* Must be initialized somewhere */
+GMutex* data_mutex = NULL; /* Must be initialized somewhere */
+gpointer current_data = NULL;
+
+void push_data (gpointer data)
+{
+  g_mutex_lock (data_mutex);
+  current_data = data;
+  g_cond_signal (data_cond);
+  g_mutex_unlock (data_mutex);
+}
+
+gpointer pop_data (<!-- -->)
+{
+  gpointer data;
+
+  g_mutex_lock (data_mutex);
+  while (!current_data)
+      g_cond_wait (data_cond, data_mutex);
+  data = current_data;
+  current_data = NULL;
+  g_mutex_unlock (data_mutex);
+  return data;
+}
+</programlisting>
+</example>
+</para>
+
+<para>
+Whenever a thread calls <function>pop_data()</function> now, it will 
+wait until current_data is non-%NULL, i.e. until some other thread 
+has called <function>push_data()</function>.
+</para>
+
+<note>
+<para>
+It is important to use the g_cond_wait() and g_cond_timed_wait()
+functions only inside a loop which checks for the condition to be
+true.  It is not guaranteed that the waiting thread will find the
+condition fulfilled after it wakes up, even if the signaling thread
+left the condition in that state: another thread may have altered the
+condition before the waiting thread got the chance to be woken up,
+even if the condition itself is protected by a #GMutex, like above.
+</para>
+</note>
+
+<para>
+A #GCond should only be accessed via the following functions.
+</para>
+
+<note>
+<para>
+All of the <function>g_cond_*</function> functions are actually macros. 
+Apart from taking their addresses, you can however use them as if they 
+were functions.
+</para>
+</note>
+
+
+<!-- ##### FUNCTION g_cond_new ##### -->
+
+<para>
+Creates a new #GCond. This function will abort, if g_thread_init()
+has not been called yet.
+</para>
+
+@Returns: a new #GCond.
+
+
+<!-- ##### FUNCTION g_cond_signal ##### -->
+<para>
+If threads are waiting for @cond, exactly one of them is woken up. It
+is good practice to hold the same lock as the waiting thread while
+calling this function, though not required.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been called,
+and, in that case, will do nothing.
+</para>
+
+@cond: a #GCond.
+
+
+<!-- ##### FUNCTION g_cond_broadcast ##### -->
+
+<para>
+If threads are waiting for @cond, all of them are woken up. It is good
+practice to lock the same mutex as the waiting threads, while calling
+this function, though not required.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been called,
+and, in that case, will do nothing.
+</para>
+
+@cond: a #GCond.
+
+
+<!-- ##### FUNCTION g_cond_wait ##### -->
+
+<para>
+Waits until this thread is woken up on @cond. The @mutex is unlocked
+before falling asleep and locked again before resuming.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been
+called, and, in that case, will immediately return.
+</para>
+
+@cond: a #GCond.
+@mutex: a #GMutex, that is currently locked.
+
+
+<!-- ##### FUNCTION g_cond_timed_wait ##### -->
+
+<para>
+Waits until this thread is woken up on @cond, but not longer than
+until the time specified by @abs_time. The @mutex is
+unlocked before falling asleep and locked again before resuming.
+</para>
+
+<para>
+If @abs_time is %NULL, g_cond_timed_wait() acts like g_cond_wait().
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been
+called, and, in that case, will immediately return %TRUE.
+</para>
+
+<para>
+To easily calculate @abs_time a combination of g_get_current_time()
+and g_time_val_add() can be used.
+</para>
+
+@cond: a #GCond.
+@mutex: a #GMutex that is currently locked.
+@abs_time: a #GTimeVal, determining the final time.
+@Returns: %TRUE if @cond was signalled, or %FALSE on timeout.
+
+
+<!-- ##### FUNCTION g_cond_free ##### -->
+
+<para>
+Destroys the #GCond.
+</para>
+
+@cond: a #GCond.
+
+
+<!-- ##### STRUCT GPrivate ##### -->
+<para>
+The #GPrivate struct is an opaque data structure to represent a thread
+private data key. Threads can thereby obtain and set a pointer which
+is private to the current thread. 
+Take our <function>give_me_next_number()</function> example from above.  
+Suppose we don't want <literal>current_number</literal> to be shared
+between the threads, but instead to be private to each thread. This can be
+done as follows:
+
+<example>
+<title>Using GPrivate for per-thread data</title>
+<programlisting>
+  GPrivate* current_number_key = NULL; /* Must be initialized somewhere */
+                                       /* with g_private_new (g_free); */
+
+  int give_me_next_number (<!-- -->)
+  {
+    int *current_number = g_private_get (current_number_key);
+
+    if (!current_number)
+    {
+      current_number = g_new (int, 1);
+      *current_number = 0;
+      g_private_set (current_number_key, current_number);
+    }
+    *current_number = calc_next_number (*current_number); 
+    return *current_number;
+  }
+</programlisting>
+</example>
+</para>
+
+<para>
+Here the pointer belonging to the key <literal>current_number_key</literal> 
+is read. If it is %NULL, it has not been set yet. Then get memory for an 
+integer value, assign this memory to the pointer and write the pointer
+back. Now we have an integer value that is private to the current thread.
+</para>
+
+<para>
+The #GPrivate struct should only be accessed via the following functions.
+</para>
+
+<note>
+<para>
+All of the <function>g_private_*</function> functions are actually macros. 
+Apart from taking their addresses, you can however use them as if they were 
+functions.
+</para>
+</note>
+
+
+<!-- ##### FUNCTION g_private_new ##### -->
+
+<para>
+Creates a new #GPrivate. If @destructor is non-%NULL, it is a pointer
+to a destructor function. Whenever a thread ends and the corresponding
+pointer keyed to this instance of #GPrivate is non-%NULL, the
+destructor is called with this pointer as the argument.
+</para>
+
+<note>
+<para>
+@destructor is used quite differently from @notify in
+g_static_private_set().
+</para>
+</note>
+
+<note>
+<para>
+A #GPrivate can not be freed. Reuse it instead, if you can, to avoid
+shortage, or use #GStaticPrivate.
+</para>
+</note>
+
+<note>
+<para>
+This function will abort if g_thread_init() has not been called yet.
+</para>
+</note>
+
+@destructor: a function to destroy the data keyed to #GPrivate when a
+thread ends.
+@Returns: a new #GPrivate.
+
+
+<!-- ##### FUNCTION g_private_get ##### -->
+
+<para>
+Returns the pointer keyed to @private_key for the current thread.
+If g_private_set() hasn't been called for the
+current @private_key and thread yet, this pointer will be %NULL.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been called, and,
+in that case, will return the value of @private_key casted to #gpointer.
+Note however, that private data set <emphasis>before</emphasis> g_thread_init() will
+<emphasis>not</emphasis> be retained <emphasis>after</emphasis> the call. Instead, %NULL
+will be returned in all threads directly after g_thread_init(), regardless of
+any g_private_set() calls issued before threading system intialization.
+</para>
+
+@private_key: a #GPrivate.
+@Returns: the corresponding pointer.
+
+
+<!-- ##### FUNCTION g_private_set ##### -->
+
+<para>
+Sets the pointer keyed to @private_key for the current thread.
+</para>
+
+<para>
+This function can be used even if g_thread_init() has not yet been
+called, and, in that case, will set @private_key to @data casted to #GPrivate*.
+See g_private_get() for resulting caveats.
+</para>
+
+@private_key: a #GPrivate.
+@data: the new pointer.
+
+
+<!-- ##### STRUCT GStaticPrivate ##### -->
+
+<para>
+A #GStaticPrivate works almost like a #GPrivate, but it has one
+significant advantage. It doesn't need to be created at run-time like
+a #GPrivate, but can be defined at compile-time. This is similar to
+the difference between #GMutex and #GStaticMutex. Now look at our
+<function>give_me_next_number()</function> example with #GStaticPrivate:
+</para>
+
+<para>
+<example>
+<title>Using GStaticPrivate for per-thread data</title>
+<programlisting>
+  int give_me_next_number (<!-- -->)
+  {
+    static GStaticPrivate current_number_key = G_STATIC_PRIVATE_INIT;
+    int *current_number = g_static_private_get (&amp;current_number_key);
+
+    if (!current_number)
+    {
+      current_number = g_new (int,1);
+      *current_number = 0;
+      g_static_private_set (&amp;current_number_key, current_number, g_free);
+    }
+    *current_number = calc_next_number (*current_number); 
+    return *current_number;
+  }
+</programlisting>
+</example>
+</para>
+
+
+<!-- ##### MACRO G_STATIC_PRIVATE_INIT ##### -->
+<para>
+Every #GStaticPrivate must be initialized with this macro, before it can
+be used.
+</para>
+
+<para>
+<informalexample>
+<programlisting>
+GStaticPrivate my_private = G_STATIC_PRIVATE_INIT;
+</programlisting>
+</informalexample>
+</para>
+
+
+
+<!-- ##### FUNCTION g_static_private_init ##### -->
+<para>
+Initializes @private_key. Alternatively you can initialize it with
+#G_STATIC_PRIVATE_INIT.
+</para>
+
+@private_key: a #GStaticPrivate to be initialized.
+
+
+<!-- ##### FUNCTION g_static_private_get ##### -->
+<para>
+Works like g_private_get() only for a #GStaticPrivate.
+</para>
+
+<para>
+This function works even if g_thread_init() has not yet been called.
+</para>
+
+@private_key: a #GStaticPrivate.
+@Returns: the corresponding pointer.
+
+
+<!-- ##### FUNCTION g_static_private_set ##### -->
+<para>
+Sets the pointer keyed to @private_key for the current thread and the
+function @notify to be called with that pointer (%NULL or non-%NULL),
+whenever the pointer is set again or whenever the current thread ends.
+</para>
+
+<para>
+This function works even if g_thread_init() has not yet been
+called. If g_thread_init() is called later, the @data keyed to
+@private_key will be inherited only by the main thread, i.e. the one that
+called g_thread_init().
+</para>
+
+<note>
+<para>
+@notify is used quite differently from @destructor in
+g_private_new().
+</para>
+</note>
+
+@private_key: a #GStaticPrivate.
+@data: the new pointer.
+@notify: a function to be called with the pointer whenever the
+current thread ends or sets this pointer again.
+
+
+<!-- ##### FUNCTION g_static_private_free ##### -->
+<para>
+Releases all resources allocated to @private_key. 
+</para>
+
+<para>
+You don't have to call this functions for a #GStaticPrivate with an
+unbounded lifetime, i.e. objects declared 'static', but if you have a
+#GStaticPrivate as a member of a structure and the structure is freed,
+you should also free the #GStaticPrivate.
+</para>
+
+@private_key: a #GStaticPrivate to be freed.
+
+
+<!-- ##### STRUCT GOnce ##### -->
+<para>
+A <structname>GOnce</structname> struct controls a one-time initialization 
+function. Any one-time initialization function must have its own unique 
+<structname>GOnce</structname> struct.
+</para>
+
+@status: the status of the #GOnce
+@retval: the value returned by the call to the function, if @status
+  is %G_ONCE_STATUS_READY
+@Since: 2.4
+
+<!-- ##### ENUM GOnceStatus ##### -->
+<para>
+The possible statuses of a one-time initialization function controlled by a #GOnce struct.
+</para>
+
+@G_ONCE_STATUS_NOTCALLED: the function has not been called yet.
+@G_ONCE_STATUS_PROGRESS: the function call is currently in progress.
+@G_ONCE_STATUS_READY: the function has been called.
+@Since: 2.4
+
+<!-- ##### MACRO G_ONCE_INIT ##### -->
+<para>
+A #GOnce must be initialized with this macro before it can be used. 
+</para>
+<para>
+<informalexample>
+<programlisting>
+GOnce my_once = G_ONCE_INIT;
+</programlisting>
+</informalexample>
+</para>
+
+@Since: 2.4
+
+
+<!-- ##### MACRO g_once ##### -->
+<para>
+The first call to this routine by a process with a given #GOnce struct calls 
+@func with the given argument. Thereafter, subsequent calls to g_once()  with 
+the same #GOnce struct do not call @func again, but return the stored result 
+of the first call. On return from g_once(), the status of @once will be 
+%G_ONCE_STATUS_READY.
+</para>
+<para>
+For example, a mutex or a thread-specific data key must be created exactly 
+once. In a threaded environment, calling g_once() ensures that the 
+initialization is serialized across multiple threads.
+</para>
+<note><para>
+Calling g_once() recursively on the same #GOnce struct in @func will lead 
+to a deadlock.
+</para></note>
+<para>
+<informalexample>
+<programlisting>
+gpointer 
+get_debug_flags ()
+{
+  static GOnce my_once = G_ONCE_INIT;
+  
+  g_once (&amp;my_once, parse_debug_flags, NULL);
+
+  return my_once.retval;
+}
+</programlisting>
+</informalexample>
+</para>
+
+@once: a #GOnce structure
+@func: the #GThreadFunc function associated to @once. This function is
+       called only once, regardless of the number of times it and its 
+       associated #GOnce struct are passed to g_once() .
+@arg:  data to be passed to @func
+@Since: 2.4
+
+
+<!-- ##### FUNCTION g_once_init_enter ##### -->
+<para>
+Function to be called when starting a critical initialization section.
+The argument @value_location must point to a static 0-initialized variable
+that will be set to a value other than 0 at the end of the initialization 
+section.
+In combination with g_once_init_leave() and the unique address @value_location,
+it can be ensured that an initialization section will be executed only once
+during a program's life time, and that concurrent threads are blocked until
+initialization completed. To be used in constructs like this:
+</para>
+
+<para>
+<informalexample><programlisting>
+static gsize initialization_value = 0;
+if (g_once_init_enter (&amp;initialization_value))              /* section start */
+  {
+    gsize setup_value = 42; /* initialization code here */
+    g_once_init_leave (&amp;initialization_value, setup_value); /* section end */
+  }
+/* use initialization_value here */
+</programlisting></informalexample>
+</para>
+
+@value_location: location of a static initializable variable containing 0.
+@Returns: %TRUE if the initialization section should be entered, %FALSE and blocks otherwise
+@Since: 2.14
+
+
+<!-- ##### FUNCTION g_once_init_leave ##### -->
+<para>
+Counterpart to g_once_init_enter(). Expects a location of a static 
+0-initialized initialization variable, and an initialization value other 
+than 0. Sets the variable to the initialization value, and releases 
+concurrent threads blocking in g_once_init_enter() on this initialization 
+variable.
+</para>
+
+@value_location: location of a static initializable variable containing 0.
+@initialization_value: new non-0 value for *@value_location.
+@Since: 2.14
+
+
diff --git a/docs/reference/glib/tmpl/timers.sgml b/docs/reference/glib/tmpl/timers.sgml
new file mode 100644
index 0000000..8e3cfa8
--- /dev/null
+++ b/docs/reference/glib/tmpl/timers.sgml
@@ -0,0 +1,110 @@
+<!-- ##### SECTION Title ##### -->
+Timers
+
+<!-- ##### SECTION Short_Description ##### -->
+keep track of elapsed time
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#GTimer records a start time, and counts microseconds elapsed since that time.
+This is done somewhat differently on different platforms, and can be tricky to
+get exactly right, so #GTimer provides a portable/convenient interface.
+</para>
+<note><para>
+#GTimer uses a higher-quality clock when thread support is available. 
+Therefore, calling g_thread_init() while timers are running may lead to
+unreliable results. It is best to call g_thread_init() before starting
+any timers, if you are using threads at all.
+</para></note>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GTimer ##### -->
+<para>
+Opaque datatype that records a start time. 
+</para>
+
+
+<!-- ##### FUNCTION g_timer_new ##### -->
+<para>
+Creates a new timer, and starts timing (i.e. g_timer_start() is implicitly
+called for you).
+</para>
+
+@Returns: a new #GTimer.
+
+
+<!-- ##### FUNCTION g_timer_start ##### -->
+<para>
+Marks a start time, so that future calls to g_timer_elapsed() will report the
+time since g_timer_start() was called. g_timer_new() automatically marks the
+start time, so no need to call g_timer_start() immediately after creating the
+timer.
+</para>
+
+@timer: a #GTimer.
+
+
+<!-- ##### FUNCTION g_timer_stop ##### -->
+<para>
+Marks an end time, so calls to g_timer_elapsed() will return the difference
+between this end time and the start time.
+</para>
+
+@timer: a #GTimer.
+
+
+<!-- ##### FUNCTION g_timer_continue ##### -->
+<para>
+Resumes a timer that has previously been stopped with g_timer_stop().
+g_timer_stop() must be called before using this function.
+</para>
+
+@timer: a #GTimer.
+@Since: 2.4
+
+
+<!-- ##### FUNCTION g_timer_elapsed ##### -->
+<para>
+If @timer has been started but not stopped, obtains the time since the timer was
+started. If @timer has been stopped, obtains the elapsed time between the time
+it was started and the time it was stopped. The return value is the number of
+seconds elapsed, including any fractional part. The @microseconds
+out parameter is essentially useless.
+<warning><para>Calling initialization functions, in particular g_thread_init(),
+while a timer is running will cause invalid return values from this function.
+</para></warning>
+</para>
+
+@timer: a #GTimer.
+@microseconds: return location for the fractional part of seconds elapsed, 
+  in microseconds (that is, the total number of microseconds elapsed, modulo 
+   1000000), or %NULL
+@Returns: seconds elapsed as a floating point value, including 
+  any fractional part.
+
+
+<!-- ##### FUNCTION g_timer_reset ##### -->
+<para>
+This function is useless; it's fine to call g_timer_start() on an
+already-started timer to reset the start time, so g_timer_reset() serves no
+purpose.
+</para>
+
+@timer: a #GTimer.
+
+
+<!-- ##### FUNCTION g_timer_destroy ##### -->
+<para>
+Destroys a timer, freeing associated resources.
+</para>
+
+@timer: a #GTimer to destroy.
+
+
diff --git a/docs/reference/glib/tmpl/trash_stack.sgml b/docs/reference/glib/tmpl/trash_stack.sgml
new file mode 100644
index 0000000..ead22b8
--- /dev/null
+++ b/docs/reference/glib/tmpl/trash_stack.sgml
@@ -0,0 +1,74 @@
+<!-- ##### SECTION Title ##### -->
+Trash Stacks
+
+<!-- ##### SECTION Short_Description ##### -->
+maintain a stack of unused allocated memory chunks
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+A #GTrashStack is an efficient way to keep a stack of unused allocated
+memory chunks. Each memory chunk is required to be large enough to hold
+a #gpointer. This allows the stack to be maintained without any space
+overhead, since the stack pointers can be stored inside the memory chunks.
+</para>
+<para>
+There is no function to create a #GTrashStack. A %NULL #GTrashStack* 
+is a perfectly valid empty stack.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GTrashStack ##### -->
+<para>
+Each piece of memory that is pushed onto the stack
+is cast to a <structname>GTrashStack*</structname>.
+</para>
+
+@next: pointer to the previous element of the stack,
+gets stored in the first <literal>sizeof (gpointer)</literal>
+bytes of the element.
+
+<!-- ##### FUNCTION g_trash_stack_push ##### -->
+<para>
+Pushes a piece of memory onto a #GTrashStack.
+</para>
+
+@stack_p: a pointer to a #GTrashStack.
+@data_p: the piece of memory to push on the stack.
+
+
+<!-- ##### FUNCTION g_trash_stack_pop ##### -->
+<para>
+Pops a piece of memory off a #GTrashStack.
+</para>
+
+@stack_p: a pointer to a #GTrashStack.
+@Returns: the element at the top of the stack.
+
+
+<!-- ##### FUNCTION g_trash_stack_peek ##### -->
+<para>
+Returns the element at the top of a #GTrashStack which may be %NULL.
+</para>
+
+@stack_p: a pointer to a #GTrashStack.
+@Returns: the element at the top of the stack.
+
+
+<!-- ##### FUNCTION g_trash_stack_height ##### -->
+<para>
+Returns the height of a #GTrashStack.
+Note that execution of this function is of O(N) complexity
+where N denotes the number of items on the stack.
+</para>
+
+@stack_p: a pointer to a #GTrashStack.
+@Returns: the height of the stack.
+
+
diff --git a/docs/reference/glib/tmpl/trees-binary.sgml b/docs/reference/glib/tmpl/trees-binary.sgml
new file mode 100644
index 0000000..11cea1f
--- /dev/null
+++ b/docs/reference/glib/tmpl/trees-binary.sgml
@@ -0,0 +1,233 @@
+<!-- ##### SECTION Title ##### -->
+Balanced Binary Trees
+
+<!-- ##### SECTION Short_Description ##### -->
+a sorted collection of key/value pairs optimized for searching
+and traversing in order
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GTree structure and its associated functions provide a sorted collection
+of key/value pairs optimized for searching and traversing in order.
+</para>
+<para>
+To create a new #GTree use g_tree_new().
+</para>
+<para>
+To insert a key/value pair into a #GTree use g_tree_insert().
+</para>
+<para>
+To lookup the value corresponding to a given key, use g_tree_lookup() and
+g_tree_lookup_extended().
+</para>
+<para>
+To find out the number of nodes in a #GTree, use g_tree_nnodes().
+To get the height of a #GTree, use g_tree_height().
+</para>
+<para>
+To traverse a #GTree, calling a function for each node visited in the
+traversal, use g_tree_foreach().
+</para>
+<para>
+To remove a key/value pair use g_tree_remove().
+</para>
+<para>
+To destroy a #GTree, use g_tree_destroy().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GTree ##### -->
+<para>
+The <structname>GTree</structname> struct is an opaque data structure representing a
+<link linkend="glib-Balanced-Binary-Trees">Balanced Binary Tree</link>.
+It should be accessed only by using the following functions.
+</para>
+
+
+<!-- ##### FUNCTION g_tree_new ##### -->
+<para>
+
+</para>
+
+@key_compare_func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_new_with_data ##### -->
+<para>
+
+</para>
+
+@key_compare_func: 
+@key_compare_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_new_full ##### -->
+<para>
+
+</para>
+
+@key_compare_func: 
+@key_compare_data: 
+@key_destroy_func: 
+@value_destroy_func: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_insert ##### -->
+<para>
+
+</para>
+
+@tree: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_tree_replace ##### -->
+<para>
+
+</para>
+
+@tree: 
+@key: 
+@value: 
+
+
+<!-- ##### FUNCTION g_tree_nnodes ##### -->
+<para>
+
+</para>
+
+@tree: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_height ##### -->
+<para>
+
+</para>
+
+@tree: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_lookup ##### -->
+<para>
+
+</para>
+
+@tree: 
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_lookup_extended ##### -->
+
+
+@tree: 
+@lookup_key: 
+@orig_key: 
+@value: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_foreach ##### -->
+<para>
+
+</para>
+
+@tree: 
+@func: 
+@user_data: 
+
+
+<!-- ##### FUNCTION g_tree_traverse ##### -->
+<para>
+
+</para>
+
+@tree: 
+@traverse_func: 
+@traverse_type: 
+@user_data: 
+
+
+<!-- ##### USER_FUNCTION GTraverseFunc ##### -->
+<para>
+Specifies the type of function passed to g_tree_traverse().
+It is passed the key and value of each node, together with
+the @user_data parameter passed to g_tree_traverse().
+If the function returns %TRUE, the traversal is stopped.
+</para>
+
+@key: a key of a #GTree node.
+@value: the value corresponding to the key.
+@data: user data passed to g_tree_traverse().
+@Returns: %TRUE to stop the traversal.
+
+
+<!-- ##### ENUM GTraverseType ##### -->
+<para>
+Specifies the type of traveral performed by g_tree_traverse(),
+g_node_traverse() and g_node_find().
+</para>
+
+@G_IN_ORDER: vists a node's left child first, then the node itself, then its
+  right child. This is the one to use if you want the output sorted according
+  to the compare function.
+@G_PRE_ORDER: visits a node, then its children.
+@G_POST_ORDER: visits the node's children, then the node itself.
+@G_LEVEL_ORDER: is not implemented for
+  <link linkend="glib-Balanced-Binary-Trees">Balanced Binary Trees</link>.
+  For <link linkend="glib-N-ary-Trees">N-ary Trees</link>, it vists the root
+  node first, then its children, then its grandchildren, and so on. Note that
+  this is less efficient than the other orders.
+
+<!-- ##### FUNCTION g_tree_search ##### -->
+<para>
+
+</para>
+
+@tree: 
+@search_func: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_remove ##### -->
+<para>
+
+</para>
+
+@tree: 
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_steal ##### -->
+<para>
+
+</para>
+
+@tree: 
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_tree_destroy ##### -->
+<para>
+
+</para>
+
+@tree: 
+
+
diff --git a/docs/reference/glib/tmpl/trees-nary.sgml b/docs/reference/glib/tmpl/trees-nary.sgml
new file mode 100644
index 0000000..0c570d0
--- /dev/null
+++ b/docs/reference/glib/tmpl/trees-nary.sgml
@@ -0,0 +1,501 @@
+<!-- ##### SECTION Title ##### -->
+N-ary Trees
+
+<!-- ##### SECTION Short_Description ##### -->
+trees of data with any number of branches
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The #GNode struct and its associated functions provide a N-ary tree data
+structure, where nodes in the tree can contain arbitrary data.
+</para>
+<para>
+To create a new tree use g_node_new().
+</para>
+<para>
+To insert a node into a tree use g_node_insert(), g_node_insert_before(),
+g_node_append() and g_node_prepend().
+</para>
+<para>
+To create a new node and insert it into a tree use g_node_insert_data(), 
+g_node_insert_data_before(), g_node_append_data() and g_node_prepend_data().
+</para>
+<para>
+To reverse the children of a node use g_node_reverse_children().
+</para>
+<para>
+To find a node use g_node_get_root(), g_node_find(), g_node_find_child(),
+g_node_child_index(), g_node_child_position(), 
+g_node_first_child(), g_node_last_child(),
+g_node_nth_child(), g_node_first_sibling(), g_node_prev_sibling(),
+g_node_next_sibling() or g_node_last_sibling().
+</para>
+<para>
+To get information about a node or tree use G_NODE_IS_LEAF(),
+G_NODE_IS_ROOT(), g_node_depth(), g_node_n_nodes(), g_node_n_children(),
+g_node_is_ancestor() or g_node_max_height().
+</para>
+<para>
+To traverse a tree, calling a function for each node visited in the
+traversal, use g_node_traverse() or g_node_children_foreach().
+</para>
+<para>
+To remove a node or subtree from a tree use g_node_unlink() or
+g_node_destroy().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT GNode ##### -->
+<para>
+The <structname>GNode</structname> struct represents one node in a
+<link linkend="glib-N-ary-Trees">N-ary Tree</link>.
+fields 
+</para>
+
+@data: contains the actual data of the node.
+@next: points to the node's next sibling (a sibling is another 
+  <structname>GNode</structname> with the same parent).
+@prev: points to the node's previous sibling.
+@parent: points to the parent of the <structname>GNode</structname>,
+  or is %NULL if the <structname>GNode</structname> is the root of the tree.
+@children: The <structfield>children</structfield> field points to the first 
+  child of the <structname>GNode</structname>. The other children are accessed 
+  by using the <structfield>next</structfield> pointer of each child.
+
+<!-- ##### FUNCTION g_node_new ##### -->
+<para>
+
+</para>
+
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_copy ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION GCopyFunc ##### -->
+<para>
+
+</para>
+
+@src: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_copy_deep ##### -->
+<para>
+
+</para>
+
+@node: 
+@copy_func: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_insert ##### -->
+<para>
+
+</para>
+
+@parent: 
+@position: 
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_insert_before ##### -->
+<para>
+
+</para>
+
+@parent: 
+@sibling: 
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_insert_after ##### -->
+<para>
+
+</para>
+
+@parent: 
+@sibling: 
+@node: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_append ##### -->
+<para>
+
+</para>
+
+@parent: 
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_prepend ##### -->
+<para>
+
+</para>
+
+@parent: 
+@node: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_insert_data ##### -->
+<para>
+
+</para>
+
+@parent: 
+@position: 
+@data: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_insert_data_before ##### -->
+<para>
+
+</para>
+
+@parent: 
+@sibling: 
+@data: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_append_data ##### -->
+<para>
+
+</para>
+
+@parent: 
+@data: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_prepend_data ##### -->
+<para>
+
+</para>
+
+@parent: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_reverse_children ##### -->
+<para>
+
+</para>
+
+@node: 
+
+
+<!-- ##### FUNCTION g_node_traverse ##### -->
+<para>
+
+</para>
+
+@root: 
+@order: 
+@flags: 
+@max_depth: 
+@func: 
+@data: 
+
+
+<!-- ##### ENUM GTraverseFlags ##### -->
+<para>
+Specifies which nodes are visited during several of the tree functions,
+including g_node_traverse() and g_node_find().
+</para>
+
+@G_TRAVERSE_LEAVES: only leaf nodes should be visited. This name has been
+  introduced in 2.6, for older version use %G_TRAVERSE_LEAFS.
+@G_TRAVERSE_NON_LEAVES: only non-leaf nodes should be visited. This name 
+  has been introduced in 2.6, for older version use %G_TRAVERSE_NON_LEAFS.
+@G_TRAVERSE_ALL: all nodes should be visited.
+@G_TRAVERSE_MASK: a mask of all traverse flags.
+@G_TRAVERSE_LEAFS: identical to %G_TRAVERSE_LEAVES.
+@G_TRAVERSE_NON_LEAFS: identical to %G_TRAVERSE_NON_LEAVES.
+
+<!-- ##### USER_FUNCTION GNodeTraverseFunc ##### -->
+<para>
+Specifies the type of function passed to g_node_traverse().
+The function is called with each of the nodes visited, together with the
+user data passed to g_node_traverse().
+If the function returns %TRUE, then the traversal is stopped.
+</para>
+
+@node: a #GNode.
+@data: user data passed to g_node_traverse().
+@Returns: %TRUE to stop the traversal.
+
+
+<!-- ##### FUNCTION g_node_children_foreach ##### -->
+<para>
+
+</para>
+
+@node: 
+@flags: 
+@func: 
+@data: 
+
+
+<!-- ##### USER_FUNCTION GNodeForeachFunc ##### -->
+<para>
+Specifies the type of function passed to g_node_children_foreach().
+The function is called with each child node, together with the user data
+passed to g_node_children_foreach().
+</para>
+
+@node: a #GNode.
+@data: user data passed to g_node_children_foreach().
+
+
+<!-- ##### FUNCTION g_node_get_root ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_find ##### -->
+<para>
+
+</para>
+
+@root: 
+@order: 
+@flags: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_find_child ##### -->
+<para>
+
+</para>
+
+@node: 
+@flags: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_child_index ##### -->
+<para>
+
+</para>
+
+@node: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_child_position ##### -->
+<para>
+
+</para>
+
+@node: 
+@child: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_first_child ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_last_child ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_nth_child ##### -->
+<para>
+
+</para>
+
+@node: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_first_sibling ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_next_sibling ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### MACRO g_node_prev_sibling ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_last_sibling ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### MACRO G_NODE_IS_LEAF ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### MACRO G_NODE_IS_ROOT ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_depth ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_n_nodes ##### -->
+<para>
+
+</para>
+
+@root: 
+@flags: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_n_children ##### -->
+<para>
+
+</para>
+
+@node: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_is_ancestor ##### -->
+<para>
+
+</para>
+
+@node: 
+@descendant: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_max_height ##### -->
+<para>
+
+</para>
+
+@root: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_node_unlink ##### -->
+<para>
+
+</para>
+
+@node: 
+
+
+<!-- ##### FUNCTION g_node_destroy ##### -->
+<para>
+
+</para>
+
+@root: 
+
+
+<!-- ##### FUNCTION g_node_push_allocator ##### -->
+<para>
+Sets the allocator to use to allocate #GNode elements.
+Use g_node_pop_allocator() to restore the previous allocator.
+</para>
+<para>
+Note that this function is not available if GLib has been compiled
+with <option>--disable-mem-pools</option>
+</para>
+
+@dummy: the #GAllocator to use when allocating #GNode elements.
+@Deprecated: 2.10: It does nothing, since #GNode has been converted 
+  to the <link linkend="glib-Memory-Slices">slice allocator</link>
+
+
+<!-- ##### FUNCTION g_node_pop_allocator ##### -->
+<para>
+Restores the previous #GAllocator, used when allocating #GNode elements.
+</para>
+<para>
+Note that this function is not available if GLib has been compiled
+with <option>--disable-mem-pools</option>
+</para>
+
+@Deprecated: 2.10: It does nothing, since #GNode has been converted 
+  to the <link linkend="glib-Memory-Slices">slice allocator</link>
+
+
diff --git a/docs/reference/glib/tmpl/type_conversion.sgml b/docs/reference/glib/tmpl/type_conversion.sgml
new file mode 100644
index 0000000..0d1d94b
--- /dev/null
+++ b/docs/reference/glib/tmpl/type_conversion.sgml
@@ -0,0 +1,122 @@
+<!-- ##### SECTION Title ##### -->
+Type Conversion Macros
+
+<!-- ##### SECTION Short_Description ##### -->
+portably storing integers in pointer variables
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Many times GLib, GTK+, and other libraries allow you to pass "user
+data" to a callback, in the form of a void pointer. From time to time
+you want to pass an integer instead of a pointer. You could allocate
+an integer, with something like:
+<informalexample><programlisting>
+ int *ip = g_new (int, 1);
+ *ip = 42;
+</programlisting></informalexample>
+But this is inconvenient, and it's annoying to have to free the 
+memory at some later time.
+</para>
+<para>
+Pointers are always at least 32 bits in size (on all platforms GLib
+intends to support). Thus you can store at least 32-bit integer values
+in a pointer value. Naively, you might try this, but it's incorrect:
+<informalexample><programlisting>
+ gpointer p;
+ int i;
+ p = (void*) 42;
+ i = (int) p;
+</programlisting></informalexample>
+Again, that example was <emphasis>not</emphasis> correct, don't copy it. 
+The problem is that on some systems you need to do this:
+<informalexample><programlisting>
+ gpointer p;
+ int i;
+ p = (void*) (long) 42;
+ i = (int) (long) p;
+</programlisting></informalexample>
+So GPOINTER_TO_INT(), GINT_TO_POINTER(), etc. do the right thing
+on the current platform.
+</para>
+<para>
+<warning>
+<para>
+YOU MAY NOT STORE POINTERS IN INTEGERS. THIS IS NOT PORTABLE IN ANY
+WAY SHAPE OR FORM. These macros <emphasis>ONLY</emphasis> allow
+storing integers in pointers, and only preserve 32 bits of the
+integer; values outside the range of a 32-bit integer will be mangled.
+</para>
+</warning>
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO GINT_TO_POINTER ##### -->
+<para>
+Stuffs an integer into a pointer type.
+</para>
+<para>
+Remember, YOU MAY NOT STORE POINTERS IN INTEGERS. THIS IS NOT PORTABLE
+IN ANY WAY SHAPE OR FORM. These macros <emphasis>ONLY</emphasis> allow
+storing integers in pointers, and only preserve 32 bits of the
+integer; values outside the range of a 32-bit integer will be mangled.
+</para>
+
+@i: integer to stuff into a pointer.
+
+
+<!-- ##### MACRO GPOINTER_TO_INT ##### -->
+<para>
+Extracts an integer from a pointer. The integer must have
+been stored in the pointer with GINT_TO_POINTER().
+</para>
+<para>
+Remember, YOU MAY NOT STORE POINTERS IN INTEGERS. THIS IS NOT PORTABLE
+IN ANY WAY SHAPE OR FORM. These macros <emphasis>ONLY</emphasis> allow
+storing integers in pointers, and only preserve 32 bits of the
+integer; values outside the range of a 32-bit integer will be mangled.
+</para>
+
+@p: pointer containing an integer.
+
+
+<!-- ##### MACRO GUINT_TO_POINTER ##### -->
+<para>
+Stuffs an unsigned integer into a pointer type.
+</para>
+
+@u: unsigned integer to stuff into the pointer.
+
+
+<!-- ##### MACRO GPOINTER_TO_UINT ##### -->
+<para>
+Extracts an unsigned integer from a pointer. The integer must have
+been stored in the pointer with GUINT_TO_POINTER().
+</para>
+
+@p: pointer to extract an unsigned integer from.
+
+
+<!-- ##### MACRO GSIZE_TO_POINTER ##### -->
+<para>
+Stuffs a #gsize into a pointer type.
+</para>
+
+@s: #gsize to stuff into the pointer.
+
+
+<!-- ##### MACRO GPOINTER_TO_SIZE ##### -->
+<para>
+Extracts a #gsize from a pointer. The #gsize must have
+been stored in the pointer with GSIZE_TO_POINTER().
+</para>
+
+@p: pointer to extract a #gsize from.
+
+
diff --git a/docs/reference/glib/tmpl/types.sgml b/docs/reference/glib/tmpl/types.sgml
new file mode 100644
index 0000000..5209110
--- /dev/null
+++ b/docs/reference/glib/tmpl/types.sgml
@@ -0,0 +1,286 @@
+<!-- ##### SECTION Title ##### -->
+Basic Types
+
+<!-- ##### SECTION Short_Description ##### -->
+standard GLib types, defined for ease-of-use and portability
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+GLib defines a number of commonly used types, which can be divided into
+4 groups:
+
+<itemizedlist>
+<listitem><para>
+New types which are not part of standard C - #gboolean, #gsize, #gssize.
+</para></listitem>
+
+<listitem><para>
+Integer types which are guaranteed to be the same size across all platforms -
+#gint8, #guint8, #gint16, #guint16, #gint32, #guint32, #gint64, #guint64.
+</para></listitem>
+
+<listitem><para>
+Types which are easier to use than their standard C counterparts -
+#gpointer, #gconstpointer, #guchar, #guint, #gushort, #gulong.
+</para></listitem>
+
+<listitem><para>
+Types which correspond exactly to standard C types, but are included
+for completeness - #gchar, #gint, #gshort, #glong, #gfloat, #gdouble.
+</para></listitem>
+</itemizedlist>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### TYPEDEF gboolean ##### -->
+<para>
+A standard <type>boolean</type> type.
+Variables of this type should only contain the value %TRUE or %FALSE.
+</para>
+
+
+<!-- ##### TYPEDEF gpointer ##### -->
+<para>
+An untyped pointer.
+#gpointer looks better and is easier to use than <type>void*</type>.
+</para>
+
+
+<!-- ##### TYPEDEF gconstpointer ##### -->
+<para>
+An untyped pointer to constant data.
+The data pointed to should not be changed.
+</para>
+<para>
+This is typically used in function prototypes to indicate that the
+data pointed to will not be altered by the function.
+</para>
+
+
+<!-- ##### TYPEDEF gchar ##### -->
+<para>
+Corresponds to the standard C <type>char</type> type.
+</para>
+
+
+<!-- ##### TYPEDEF guchar ##### -->
+<para>
+Corresponds to the standard C <type>unsigned char</type> type.
+</para>
+
+
+<!-- ##### TYPEDEF gint ##### -->
+<para>
+Corresponds to the standard C <type>int</type> type.
+Values of this type can range from #G_MININT to #G_MAXINT.
+</para>
+
+
+<!-- ##### TYPEDEF guint ##### -->
+<para>
+Corresponds to the standard C <type>unsigned int</type> type.
+Values of this type can range from 0 to #G_MAXUINT.
+</para>
+
+
+<!-- ##### TYPEDEF gshort ##### -->
+<para>
+Corresponds to the standard C <type>short</type> type.
+Values of this type can range from #G_MINSHORT to #G_MAXSHORT.
+</para>
+
+
+<!-- ##### TYPEDEF gushort ##### -->
+<para>
+Corresponds to the standard C <type>unsigned short</type> type.
+Values of this type can range from 0 to #G_MAXUSHORT.
+</para>
+
+
+<!-- ##### TYPEDEF glong ##### -->
+<para>
+Corresponds to the standard C <type>long</type> type.
+Values of this type can range from #G_MINLONG to #G_MAXLONG.
+</para>
+
+
+<!-- ##### TYPEDEF gulong ##### -->
+<para>
+Corresponds to the standard C <type>unsigned long</type> type.
+Values of this type can range from 0 to #G_MAXULONG.
+</para>
+
+
+<!-- ##### TYPEDEF gint8 ##### -->
+<para>
+A signed integer guaranteed to be 8 bits on all platforms.
+Values of this type can range from -128 to 127.
+</para>
+
+
+<!-- ##### TYPEDEF guint8 ##### -->
+<para>
+An unsigned integer guaranteed to be 8 bits on all platforms.
+Values of this type can range from 0 to 255.
+</para>
+
+
+<!-- ##### TYPEDEF gint16 ##### -->
+<para>
+A signed integer guaranteed to be 16 bits on all platforms.
+Values of this type can range from -32,768 to 32,767.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GINT16_MODIFIER and/or %G_GINT16_FORMAT.
+</para>
+
+
+<!-- ##### TYPEDEF guint16 ##### -->
+<para>
+An unsigned integer guaranteed to be 16 bits on all platforms.
+Values of this type can range from 0 to 65,535.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GINT16_MODIFIER and/or %G_GUINT16_FORMAT.
+</para>
+
+
+<!-- ##### TYPEDEF gint32 ##### -->
+<para>
+A signed integer guaranteed to be 32 bits on all platforms.
+Values of this type can range from -2,147,483,648 to 2,147,483,647.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GINT32_MODIFIER and/or %G_GINT32_FORMAT.
+</para>
+
+
+<!-- ##### TYPEDEF guint32 ##### -->
+<para>
+An unsigned integer guaranteed to be 32 bits on all platforms.
+Values of this type can range from 0 to 4,294,967,295.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GINT32_MODIFIER and/or %G_GUINT32_FORMAT.
+</para>
+
+
+<!-- ##### MACRO G_HAVE_GINT64 ##### -->
+<para>
+This macro is defined if 64-bit signed and unsigned integers are available
+on the platform. 
+</para>
+
+@Deprecated: GLib requires 64-bit integer support since version 2.0, therefore
+%G_HAVE_GINT64 is <emphasis>always</emphasis> defined.
+
+
+<!-- ##### TYPEDEF gint64 ##### -->
+<para>
+A signed integer guaranteed to be 64 bits on all platforms.
+Values of this type can range from -9,223,372,036,854,775,808 to
+9,223,372,036,854,775,807.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GINT64_MODIFIER and/or %G_GINT64_FORMAT.
+</para>
+
+
+<!-- ##### TYPEDEF guint64 ##### -->
+<para>
+An unsigned integer guaranteed to be 64 bits on all platforms.
+Values of this type can range from 0 to 18,446,744,073,709,551,615.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GINT64_MODIFIER and/or %G_GUINT64_FORMAT.
+</para>
+
+
+<!-- ##### MACRO G_GINT64_CONSTANT ##### -->
+<para>
+This macro is used to insert 64-bit integer literals into the source code.
+</para>
+
+@val: a literal integer value, e.g. 0x1d636b02300a7aa7.
+
+
+<!-- ##### MACRO G_GUINT64_CONSTANT ##### -->
+<para>
+This macro is used to insert 64-bit unsigned integer literals into the 
+source code.
+</para>
+
+@val: a literal integer value, e.g. 0x1d636b02300a7aa7U.
+@Since: 2.10
+
+
+<!-- ##### TYPEDEF gfloat ##### -->
+<para>
+Corresponds to the standard C <type>float</type> type.
+Values of this type can range from -#G_MAXFLOAT to #G_MAXFLOAT.
+</para>
+
+
+<!-- ##### TYPEDEF gdouble ##### -->
+<para>
+Corresponds to the standard C <type>double</type> type.
+Values of this type can range from -#G_MAXDOUBLE to #G_MAXDOUBLE.
+</para>
+
+
+<!-- ##### TYPEDEF gsize ##### -->
+<para>
+An unsigned integer type of the result of the sizeof operator, corresponding
+to the size_t type defined in C99. This type is wide enough to hold the numeric
+value of a pointer, so it is usually 32bit wide on a 32bit platform and
+64bit wide on a 64bit platform.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GSIZE_MODIFIER and/or %G_GSIZE_FORMAT.
+</para>
+
+
+<!-- ##### TYPEDEF gssize ##### -->
+<para>
+A signed variant of gsize, corresponding to the ssize_t defined on most platforms.
+</para>
+<para>
+To print or scan values of this type, use
+%G_GSIZE_MODIFIER and/or %G_GSSIZE_FORMAT.
+</para>
+
+
+<!-- ##### TYPEDEF goffset ##### -->
+<para>
+A signed integer type that is used for file offsets, corresponding to the 
+C99 type off64_t.
+</para>
+
+Since: 2.14
+
+
+<!-- ##### MACRO G_GOFFSET_CONSTANT ##### -->
+<para>
+This macro is used to insert #goffset 64-bit integer literals into the source code.
+See also #G_GINT64_CONSTANT.
+</para>
+
+@val: a literal integer value, e.g. 0x1d636b02300a7aa7.
+Since: 2.20
+
+
diff --git a/docs/reference/glib/tmpl/unicode.sgml b/docs/reference/glib/tmpl/unicode.sgml
new file mode 100644
index 0000000..02c11b2
--- /dev/null
+++ b/docs/reference/glib/tmpl/unicode.sgml
@@ -0,0 +1,886 @@
+<!-- ##### SECTION Title ##### -->
+Unicode Manipulation
+
+<!-- ##### SECTION Short_Description ##### -->
+functions operating on Unicode characters and UTF-8 strings
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes a number of functions for dealing with
+Unicode characters and strings.  There are analogues of the
+traditional <filename>ctype.h</filename> character classification
+and case conversion functions, UTF-8 analogues of some string utility 
+functions, functions to perform normalization, case conversion and
+collation on UTF-8 strings and finally functions to convert between
+the UTF-8, UTF-16 and UCS-4 encodings of Unicode.
+</para>
+
+<para>
+The implementations of the Unicode functions in GLib are based
+on the Unicode Character Data tables, which are available from
+<ulink url="http://www.unicode.org/">www.unicode.org</ulink>.
+GLib 2.8 supports Unicode 4.0, GLib 2.10 supports Unicode 4.1,
+GLib 2.12 supports Unicode 5.0, GLib 2.16.3 supports Unicode 5.1.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+
+<varlistentry>
+<term>g_locale_to_utf8(), g_locale_from_utf8()</term>
+<listitem><para>
+Convenience functions for converting between UTF-8 and the locale encoding. 
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### TYPEDEF gunichar ##### -->
+<para>
+A type which can hold any UTF-32 or UCS-4 character code, also known
+as a Unicode code point.
+</para>
+<para>
+To print/scan values of this type to/from text you need to convert
+to/from UTF-8, using g_utf32_to_utf8()/g_utf8_to_utf32().
+</para>
+<para>
+To print/scan values of this type as integer, use
+%G_GINT32_MODIFIER and/or %G_GUINT32_FORMAT.
+</para>
+<para>
+The notation to express a Unicode code point in running text is as a
+hexadecimal number with four to six digits and uppercase letters, prefixed
+by the string "U+".  Leading zeros are omitted, unless the code point would
+have fewer than four hexadecimal digits.
+For example, "U+0041 LATIN CAPITAL LETTER A".
+To print a code point in the U+-notation, use the format string
+"U+%04"G_GINT32_FORMAT"X".
+To scan, use the format string "U+%06"G_GINT32_FORMAT"X".
+<informalexample>
+<programlisting>
+gunichar c;
+sscanf ("U+0041", "U+%06"G_GINT32_FORMAT"X", &amp;c)
+g_print ("Read U+%04"G_GINT32_FORMAT"X", c);
+</programlisting>
+</informalexample>
+</para>
+
+
+<!-- ##### TYPEDEF gunichar2 ##### -->
+<para>
+A type which can hold any UTF-16 code 
+point<footnote id="utf16_surrogate_pairs">UTF-16 also has so called 
+<firstterm>surrogate pairs</firstterm> to encode characters beyond the 
+BMP as pairs of 16bit numbers. Surrogate pairs cannot be stored in a 
+single gunichar2 field, but all GLib functions accepting gunichar2 arrays 
+will correctly interpret surrogate pairs.</footnote>.
+</para>
+<para>
+To print/scan values of this type to/from text you need to convert
+to/from UTF-8, using g_utf16_to_utf8()/g_utf8_to_utf16().
+</para>
+<para>
+To print/scan values of this type as integer, use
+%G_GINT16_MODIFIER and/or %G_GUINT16_FORMAT.
+</para>
+
+
+<!-- ##### FUNCTION g_unichar_validate ##### -->
+<para>
+
+</para>
+
+@ch: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isalnum ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isalpha ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_iscntrl ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isdefined ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isdigit ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isgraph ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_islower ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_ismark ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isprint ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_ispunct ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isspace ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_istitle ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isupper ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_isxdigit ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_iswide ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_iswide_cjk ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_iszerowidth ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_toupper ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_tolower ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_totitle ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_digit_value ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_xdigit_value ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### ENUM GUnicodeType ##### -->
+<para>
+These are the possible character classifications from the 
+Unicode specification.
+See <ulink url="http://www.unicode.org/Public/UNIDATA/UnicodeData.html"
+>http://www.unicode.org/Public/UNIDATA/UnicodeData.html</ulink>.
+</para>
+
+@G_UNICODE_CONTROL: General category "Other, Control" (Cc)
+@G_UNICODE_FORMAT: General category "Other, Format" (Cf)
+@G_UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn)
+@G_UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co)
+@G_UNICODE_SURROGATE: General category "Other, Surrogate" (Cs)
+@G_UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll)
+@G_UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm)
+@G_UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo)
+@G_UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt)
+@G_UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu)
+@G_UNICODE_COMBINING_MARK: General category "Mark, Spacing Combining" (Mc)
+@G_UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me)
+@G_UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn)
+@G_UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd)
+@G_UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl)
+@G_UNICODE_OTHER_NUMBER: General category "Number, Other" (No)
+@G_UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc)
+@G_UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd)
+@G_UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe)
+@G_UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf)
+@G_UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi)
+@G_UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po)
+@G_UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps)
+@G_UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc)
+@G_UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk)
+@G_UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm)
+@G_UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So)
+@G_UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl)
+@G_UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp)
+@G_UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs)
+
+<!-- ##### FUNCTION g_unichar_type ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### ENUM GUnicodeBreakType ##### -->
+<para>
+These are the possible line break classifications.
+The five Hangul types were added in Unicode 4.1, so, has been
+introduced in GLib 2.10.  Note that new types may be added in the future.
+Applications should be ready to handle unknown values.
+They may be regarded as %G_UNICODE_BREAK_UNKNOWN.
+See <ulink url="http://www.unicode.org/unicode/reports/tr14/"
+>http://www.unicode.org/unicode/reports/tr14/</ulink>.
+</para>
+
+@G_UNICODE_BREAK_MANDATORY: Mandatory Break (BK)
+@G_UNICODE_BREAK_CARRIAGE_RETURN: Carriage Return (CR)
+@G_UNICODE_BREAK_LINE_FEED: Line Feed (LF)
+@G_UNICODE_BREAK_COMBINING_MARK: Attached Characters and Combining Marks (CM)
+@G_UNICODE_BREAK_SURROGATE: Surrogates (SG)
+@G_UNICODE_BREAK_ZERO_WIDTH_SPACE: Zero Width Space (ZW)
+@G_UNICODE_BREAK_INSEPARABLE: Inseparable (IN)
+@G_UNICODE_BREAK_NON_BREAKING_GLUE: Non-breaking ("Glue") (GL)
+@G_UNICODE_BREAK_CONTINGENT: Contingent Break Opportunity (CB)
+@G_UNICODE_BREAK_SPACE: Space (SP)
+@G_UNICODE_BREAK_AFTER: Break Opportunity After (BA)
+@G_UNICODE_BREAK_BEFORE: Break Opportunity Before (BB)
+@G_UNICODE_BREAK_BEFORE_AND_AFTER: Break Opportunity Before and After (B2)
+@G_UNICODE_BREAK_HYPHEN: Hyphen (HY)
+@G_UNICODE_BREAK_NON_STARTER: Nonstarter (NS)
+@G_UNICODE_BREAK_OPEN_PUNCTUATION: Opening Punctuation (OP)
+@G_UNICODE_BREAK_CLOSE_PUNCTUATION: Closing Punctuation (CL)
+@G_UNICODE_BREAK_QUOTATION: Ambiguous Quotation (QU)
+@G_UNICODE_BREAK_EXCLAMATION: Exclamation/Interrogation (EX)
+@G_UNICODE_BREAK_IDEOGRAPHIC: Ideographic (ID)
+@G_UNICODE_BREAK_NUMERIC: Numeric (NU)
+@G_UNICODE_BREAK_INFIX_SEPARATOR: Infix Separator (Numeric) (IS)
+@G_UNICODE_BREAK_SYMBOL: Symbols Allowing Break After (SY)
+@G_UNICODE_BREAK_ALPHABETIC: Ordinary Alphabetic and Symbol Characters (AL)
+@G_UNICODE_BREAK_PREFIX: Prefix (Numeric) (PR)
+@G_UNICODE_BREAK_POSTFIX: Postfix (Numeric) (PO)
+@G_UNICODE_BREAK_COMPLEX_CONTEXT: Complex Content Dependent (South East Asian) (SA)
+@G_UNICODE_BREAK_AMBIGUOUS: Ambiguous (Alphabetic or Ideographic) (AI)
+@G_UNICODE_BREAK_UNKNOWN: Unknown (XX)
+@G_UNICODE_BREAK_NEXT_LINE: Next Line (NL)
+@G_UNICODE_BREAK_WORD_JOINER: Word Joiner (WJ)
+@G_UNICODE_BREAK_HANGUL_L_JAMO: Hangul L Jamo (JL)
+@G_UNICODE_BREAK_HANGUL_V_JAMO: Hangul V Jamo (JV)
+@G_UNICODE_BREAK_HANGUL_T_JAMO: Hangul T Jamo (JT)
+@G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: Hangul LV Syllable (H2)
+@G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: Hangul LVT Syllable (H3)
+
+<!-- ##### FUNCTION g_unichar_break_type ##### -->
+<para>
+
+</para>
+
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_combining_class ##### -->
+<para>
+
+</para>
+
+@uc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unicode_canonical_ordering ##### -->
+<para>
+
+</para>
+
+@string: 
+@len: 
+
+
+<!-- ##### FUNCTION g_unicode_canonical_decomposition ##### -->
+<para>
+
+</para>
+
+@ch: 
+@result_len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_get_mirror_char ##### -->
+<para>
+
+</para>
+
+@ch: 
+@mirrored_ch: 
+@Returns: 
+
+
+<!-- ##### ENUM GUnicodeScript ##### -->
+<para>
+The #GUnicodeScript enumeration identifies different writing
+systems. The values correspond to the names as defined in the
+Unicode standard. The enumeration has been added in GLib 2.14,
+and is interchangeable with #PangoScript.
+Note that new types may be added in the future. Applications 
+should be ready to handle unknown values.
+See <ulink
+url="http://www.unicode.org/reports/tr24/">Unicode Standard Annex
+#24: Script names</ulink>.
+</para>
+
+@G_UNICODE_SCRIPT_INVALID_CODE: a value never returned from g_unichar_get_script()
+@G_UNICODE_SCRIPT_COMMON:     a character used by multiple different scripts
+@G_UNICODE_SCRIPT_INHERITED:  a mark glyph that takes its script from the
+                              base glyph to which it is attached
+@G_UNICODE_SCRIPT_ARABIC:     Arabic
+@G_UNICODE_SCRIPT_ARMENIAN:   Armenian
+@G_UNICODE_SCRIPT_BENGALI:    Bengali
+@G_UNICODE_SCRIPT_BOPOMOFO:   Bopomofo
+@G_UNICODE_SCRIPT_CHEROKEE:   Cherokee
+@G_UNICODE_SCRIPT_COPTIC:     Coptic
+@G_UNICODE_SCRIPT_CYRILLIC:   Cyrillic
+@G_UNICODE_SCRIPT_DESERET:    Deseret
+@G_UNICODE_SCRIPT_DEVANAGARI: Devanagari
+@G_UNICODE_SCRIPT_ETHIOPIC:   Ethiopic
+@G_UNICODE_SCRIPT_GEORGIAN:   Georgian
+@G_UNICODE_SCRIPT_GOTHIC:     Gothic
+@G_UNICODE_SCRIPT_GREEK:      Greek
+@G_UNICODE_SCRIPT_GUJARATI:   Gujarati
+@G_UNICODE_SCRIPT_GURMUKHI:   Gurmukhi
+@G_UNICODE_SCRIPT_HAN:        Han
+@G_UNICODE_SCRIPT_HANGUL:     Hangul
+@G_UNICODE_SCRIPT_HEBREW:     Hebrew
+@G_UNICODE_SCRIPT_HIRAGANA:   Hiragana
+@G_UNICODE_SCRIPT_KANNADA:    Kannada
+@G_UNICODE_SCRIPT_KATAKANA:   Katakana
+@G_UNICODE_SCRIPT_KHMER:      Khmer
+@G_UNICODE_SCRIPT_LAO:        Lao
+@G_UNICODE_SCRIPT_LATIN:      Latin
+@G_UNICODE_SCRIPT_MALAYALAM:  Malayalam
+@G_UNICODE_SCRIPT_MONGOLIAN:  Mongolian
+@G_UNICODE_SCRIPT_MYANMAR:    Myanmar
+@G_UNICODE_SCRIPT_OGHAM:      Ogham
+@G_UNICODE_SCRIPT_OLD_ITALIC: Old Italic
+@G_UNICODE_SCRIPT_ORIYA:      Oriya
+@G_UNICODE_SCRIPT_RUNIC:      Runic
+@G_UNICODE_SCRIPT_SINHALA:    Sinhala
+@G_UNICODE_SCRIPT_SYRIAC:     Syriac
+@G_UNICODE_SCRIPT_TAMIL:      Tamil
+@G_UNICODE_SCRIPT_TELUGU:     Telugu
+@G_UNICODE_SCRIPT_THAANA:     Thaana
+@G_UNICODE_SCRIPT_THAI:       Thai
+@G_UNICODE_SCRIPT_TIBETAN:    Tibetan
+@G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL: 
+                              Canadian Aboriginal
+@G_UNICODE_SCRIPT_YI:         Yi
+@G_UNICODE_SCRIPT_TAGALOG:    Tagalog
+@G_UNICODE_SCRIPT_HANUNOO:    Hanunoo
+@G_UNICODE_SCRIPT_BUHID:      Buhid
+@G_UNICODE_SCRIPT_TAGBANWA:   Tagbanwa
+@G_UNICODE_SCRIPT_BRAILLE:    Braille
+@G_UNICODE_SCRIPT_CYPRIOT:    Cypriot
+@G_UNICODE_SCRIPT_LIMBU:      Limbu
+@G_UNICODE_SCRIPT_OSMANYA:    Osmanya
+@G_UNICODE_SCRIPT_SHAVIAN:    Shavian
+@G_UNICODE_SCRIPT_LINEAR_B:   Linear B
+@G_UNICODE_SCRIPT_TAI_LE:     Tai Le
+@G_UNICODE_SCRIPT_UGARITIC:   Ugaritic
+@G_UNICODE_SCRIPT_NEW_TAI_LUE: New Tai Lue
+@G_UNICODE_SCRIPT_BUGINESE:   Buginese
+@G_UNICODE_SCRIPT_GLAGOLITIC: Glagolitic
+@G_UNICODE_SCRIPT_TIFINAGH:   Tifinagh
+@G_UNICODE_SCRIPT_SYLOTI_NAGRI: Syloti Nagri
+@G_UNICODE_SCRIPT_OLD_PERSIAN: Old Persian
+@G_UNICODE_SCRIPT_KHAROSHTHI: Kharoshthi
+@G_UNICODE_SCRIPT_UNKNOWN:    an unassigned code point
+@G_UNICODE_SCRIPT_BALINESE:   Balinese
+@G_UNICODE_SCRIPT_CUNEIFORM:  Cuneiform
+@G_UNICODE_SCRIPT_PHOENICIAN: Phoenician
+@G_UNICODE_SCRIPT_PHAGS_PA:   Phags-pa
+@G_UNICODE_SCRIPT_NKO:        N'Ko
+@G_UNICODE_SCRIPT_KAYAH_LI:   Kayah Li. Since 2.16.3
+@G_UNICODE_SCRIPT_LEPCHA:     Lepcha. Since 2.16.3
+@G_UNICODE_SCRIPT_REJANG:     Rejang. Since 2.16.3
+@G_UNICODE_SCRIPT_SUNDANESE:  Sundanese. Since 2.16.3
+@G_UNICODE_SCRIPT_SAURASHTRA: Saurashtra. Since 2.16.3
+@G_UNICODE_SCRIPT_CHAM:       Cham. Since 2.16.3
+@G_UNICODE_SCRIPT_OL_CHIKI:   Ol Chiki. Since 2.16.3
+@G_UNICODE_SCRIPT_VAI:        Vai. Since 2.16.3
+@G_UNICODE_SCRIPT_CARIAN:     Carian. Since 2.16.3
+@G_UNICODE_SCRIPT_LYCIAN:     Lycian. Since 2.16.3
+@G_UNICODE_SCRIPT_LYDIAN:     Lydian. Since 2.16.3
+
+<!-- ##### FUNCTION g_unichar_get_script ##### -->
+<para>
+
+</para>
+
+@ch: 
+@Returns: 
+
+
+<!-- ##### MACRO g_utf8_next_char ##### -->
+<para>
+Skips to the next character in a UTF-8 string. The string must be
+valid; this macro is as fast as possible, and has no error-checking.
+You would use this macro to iterate over a string character by
+character. The macro returns the start of the next UTF-8 character.
+Before using this macro, use g_utf8_validate() to validate strings
+that may contain invalid UTF-8.
+</para>
+
+@p: Pointer to the start of a valid UTF-8 character.
+
+
+<!-- ##### FUNCTION g_utf8_get_char ##### -->
+<para>
+
+</para>
+
+@p: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_get_char_validated ##### -->
+<para>
+
+</para>
+
+@p: 
+@max_len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_offset_to_pointer ##### -->
+<para>
+
+</para>
+
+@str: 
+@offset: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_pointer_to_offset ##### -->
+<para>
+
+</para>
+
+@str: 
+@pos: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_prev_char ##### -->
+<para>
+
+</para>
+
+@p: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_find_next_char ##### -->
+<para>
+
+</para>
+
+@p: 
+@end: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_find_prev_char ##### -->
+<para>
+
+</para>
+
+@str: 
+@p: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strlen ##### -->
+<para>
+
+</para>
+
+@p: 
+@max: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strncpy ##### -->
+<para>
+
+</para>
+
+@dest: 
+@src: 
+@n: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strchr ##### -->
+<para>
+
+</para>
+
+@p: 
+@len: 
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strrchr ##### -->
+<para>
+
+</para>
+
+@p: 
+@len: 
+@c: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strreverse ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_validate ##### -->
+<para>
+
+</para>
+
+@str: 
+@max_len: 
+@end: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strup ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_strdown ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_casefold ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_normalize ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@mode: 
+@Returns: 
+
+
+<!-- ##### ENUM GNormalizeMode ##### -->
+<para>
+Defines how a Unicode string is transformed in a canonical 
+form, standardizing such issues as whether a character with an accent is 
+represented as a base character and combining accent or as a single precomposed
+character. Unicode strings should generally be normalized before comparing them.
+</para>
+
+@G_NORMALIZE_DEFAULT: standardize differences that do not affect the
+  text content, such as the above-mentioned accent representation.
+@G_NORMALIZE_NFD: another name for %G_NORMALIZE_DEFAULT.
+@G_NORMALIZE_DEFAULT_COMPOSE: like %G_NORMALIZE_DEFAULT, but with composed
+  forms rather than a maximally decomposed form.
+@G_NORMALIZE_NFC: another name for %G_NORMALIZE_DEFAULT_COMPOSE.
+@G_NORMALIZE_ALL: beyond %G_NORMALIZE_DEFAULT also standardize the 
+  "compatibility" characters in Unicode, such as SUPERSCRIPT THREE to the 
+  standard forms (in this case DIGIT THREE). Formatting information may be 
+  lost but for most text operations such characters should be considered the 
+  same.
+@G_NORMALIZE_NFKD: another name for %G_NORMALIZE_ALL.
+@G_NORMALIZE_ALL_COMPOSE: like %G_NORMALIZE_ALL, but with composed
+  forms rather than a maximally decomposed form.
+@G_NORMALIZE_NFKC: another name for %G_NORMALIZE_ALL_COMPOSE.
+
+<!-- ##### FUNCTION g_utf8_collate ##### -->
+<para>
+
+</para>
+
+@str1: 
+@str2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_collate_key ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_collate_key_for_filename ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_to_utf16 ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_read: 
+@items_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_to_ucs4 ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_read: 
+@items_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf8_to_ucs4_fast ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_written: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf16_to_ucs4 ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_read: 
+@items_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_utf16_to_utf8 ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_read: 
+@items_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ucs4_to_utf16 ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_read: 
+@items_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_ucs4_to_utf8 ##### -->
+<para>
+
+</para>
+
+@str: 
+@len: 
+@items_read: 
+@items_written: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_unichar_to_utf8 ##### -->
+<para>
+
+</para>
+
+@c: 
+@outbuf: 
+@Returns: 
+
+
diff --git a/docs/reference/glib/tmpl/version.sgml b/docs/reference/glib/tmpl/version.sgml
new file mode 100644
index 0000000..f46c1e1
--- /dev/null
+++ b/docs/reference/glib/tmpl/version.sgml
@@ -0,0 +1,139 @@
+<!-- ##### SECTION Title ##### -->
+Version Information
+
+<!-- ##### SECTION Short_Description ##### -->
+Variables and functions to check the GLib version
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+GLib provides version information, primarily useful in configure checks
+for builds that have a configure script. Applications will not
+typically use the features described here.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### VARIABLE glib_major_version ##### -->
+<para>
+The major version number of the GLib library. 
+(e.g. in GLib version 1.2.5 this is 1.)
+</para>
+
+<para>
+This variable is in the library, so represents the
+GLib library you have linked against. Contrast with the
+#GLIB_MAJOR_VERSION macro, which represents the major version of the
+GLib headers you have included.
+</para>
+
+
+<!-- ##### VARIABLE glib_minor_version ##### -->
+<para>
+The minor version number of the GLib library.
+(e.g. in GLib version 1.2.5 this is 2.)
+</para>
+
+<para>
+This variable is in the library, so represents the
+GLib library you have linked against. Contrast with the
+#GLIB_MINOR_VERSION macro, which represents the minor version of the
+GLib headers you have included.
+</para>
+
+
+<!-- ##### VARIABLE glib_micro_version ##### -->
+<para>
+The micro version number of the GLib library.
+(e.g. in GLib version 1.2.5 this is 5.)
+</para>
+
+<para>
+This variable is in the library, so represents the GLib library you
+have linked against. Contrast with the #GLIB_MICRO_VERSION macro, which
+represents the micro version of the GLib headers you have included.
+</para>
+
+
+<!-- ##### VARIABLE glib_binary_age ##### -->
+<para>
+This is the binary age passed to <application>libtool</application>. If 
+<application>libtool</application> means nothing to you, don't worry 
+about it. ;-)
+</para>
+
+
+<!-- ##### VARIABLE glib_interface_age ##### -->
+<para>
+This is the interface age passed to <application>libtool</application>. If 
+<application>libtool</application> means nothing to you, don't worry 
+about it. ;-)
+</para>
+
+
+<!-- ##### FUNCTION glib_check_version ##### -->
+<para>
+
+</para>
+
+@required_major: 
+@required_minor: 
+@required_micro: 
+@Returns: 
+
+
+<!-- ##### MACRO GLIB_MAJOR_VERSION ##### -->
+<para>
+The major version number of the GLib library.
+Like #glib_major_version, but from the headers used at
+application compile time, rather than from the library linked against
+at application run time.
+</para>
+
+
+
+<!-- ##### MACRO GLIB_MINOR_VERSION ##### -->
+<para>
+The minor version number of the GLib library.
+Like #gtk_minor_version, but from the headers used at
+application compile time, rather than from the library linked against
+at application run time.
+</para>
+
+
+
+<!-- ##### MACRO GLIB_MICRO_VERSION ##### -->
+<para>
+The micro version number of the GLib library.
+Like #gtk_micro_version, but from the headers used at
+application compile time, rather than from the library linked against
+at application run time.
+</para>
+
+
+
+<!-- ##### MACRO GLIB_CHECK_VERSION ##### -->
+<para>
+Checks the version of the GLib library.
+Returns %TRUE if the version of the GLib header files is the same 
+as or newer than the passed-in version.
+
+<example>
+<title>Checking the version of the GLib library</title>
+<programlisting>
+  if (!GLIB_CHECK_VERSION (1, 2, 0))
+    g_error ("GLib version 1.2.0 or above is needed");
+</programlisting>
+</example>
+</para>
+
+@major: the major version number.
+@minor: the minor version number.
+@micro: the micro version number.
+
+
diff --git a/docs/reference/glib/tmpl/warnings.sgml b/docs/reference/glib/tmpl/warnings.sgml
new file mode 100644
index 0000000..cc46878
--- /dev/null
+++ b/docs/reference/glib/tmpl/warnings.sgml
@@ -0,0 +1,233 @@
+<!-- ##### SECTION Title ##### -->
+Message Output and Debugging Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+functions to output messages and help debug applications
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These functions provide support for outputting messages.
+</para>
+<para>
+The <function>g_return</function> family of macros (g_return_if_fail(), 
+g_return_val_if_fail(), g_return_if_reached(), g_return_val_if_reached())
+should only be used for programming errors, a typical use case is
+checking for invalid parameters at the beginning of a public function.
+They should not be used if you just mean "if (error) return", they
+should only be used if you mean "if (bug in program) return".
+The program behavior is generally considered undefined after one of these 
+checks fails. They are not intended for normal control flow, only to
+give a perhaps-helpful warning before giving up. 
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION g_print ##### -->
+<para>
+Outputs a formatted message via the print handler.
+The default print handler simply outputs the message to stdout.
+</para>
+<para>
+g_print() should not be used from within libraries for debugging messages,
+since it may be redirected by applications to special purpose message
+windows or even files.
+Instead, libraries should use g_log(), or the convenience functions
+g_message(), g_warning() and g_error().
+</para>
+
+@format: the message format. See the printf() documentation.
+@Varargs: the parameters to insert into the format string.
+
+
+<!-- ##### FUNCTION g_set_print_handler ##### -->
+<para>
+Sets the print handler.
+Any messages passed to g_print() will be output via the new handler.
+The default handler simply outputs the message to stdout.
+By providing your own handler you can redirect the output, to a GTK+
+widget or a log file for example.
+</para>
+
+@func: the new print handler.
+@Returns: the old print handler.
+
+
+<!-- ##### USER_FUNCTION GPrintFunc ##### -->
+<para>
+Specifies the type of the print handler functions.
+These are called with the complete formatted string to output.
+</para>
+
+@string: the message to be output.
+
+
+<!-- ##### FUNCTION g_printerr ##### -->
+<para>
+Outputs a formatted message via the error message handler.
+The default handler simply outputs the message to stderr.
+</para>
+<para>
+g_printerr() should not be used from within libraries. Instead g_log() should
+be used, or the convenience functions g_message(), g_warning() and g_error().
+</para>
+
+@format: the message format. See the printf() documentation.
+@Varargs: the parameters to insert into the format string.
+
+
+<!-- ##### FUNCTION g_set_printerr_handler ##### -->
+<para>
+Sets the handler for printing error messages.
+Any messages passed to g_printerr() will be output via the new handler.
+The default handler simply outputs the message to stderr.
+By providing your own handler you can redirect the output, to a GTK+
+widget or a log file for example.
+</para>
+
+@func: the new error message handler.
+@Returns: the old error message handler.
+
+
+<!-- ##### MACRO g_return_if_fail ##### -->
+<para>
+Returns from the current function if the expression is not true.
+If the expression evaluates to %FALSE, a critical message is logged and
+the function returns. This can only be used in functions which do not return
+a value.
+</para>
+
+@expr: the expression to check.
+
+
+<!-- ##### MACRO g_return_val_if_fail ##### -->
+<para>
+Returns from the current function, returning the value @val, if the expression
+is not true.
+If the expression evaluates to %FALSE, a critical message is logged and
+@val is returned.
+</para>
+
+@expr: the expression to check.
+@val: the value to return from the current function if the expression is not
+true.
+
+
+<!-- ##### MACRO g_return_if_reached ##### -->
+<para>
+Logs a critical message and returns from the current function. 
+This can only be used in functions which do not return a value.
+</para>
+
+
+
+<!-- ##### MACRO g_return_val_if_reached ##### -->
+<para>
+Logs a critical message and returns @val. 
+</para>
+
+@val: the value to return from the current function.
+
+
+<!-- ##### MACRO g_warn_if_fail ##### -->
+<para>
+Logs a warning if the expression is not true.
+</para>
+
+@expr: the expression to check
+@Since: 2.16
+
+
+<!-- ##### MACRO g_warn_if_reached ##### -->
+<para>
+Logs a critical warning.
+</para>
+
+@Since: 2.16
+
+
+<!-- ##### FUNCTION g_on_error_query ##### -->
+<para>
+Prompts the user with <computeroutput>[E]xit, [H]alt, show [S]tack trace or [P]roceed</computeroutput>.
+This function is intended to be used for debugging use only. The following
+example shows how it can be used together with the g_log() functions.
+</para>
+<informalexample><programlisting>
+&num;include &lt;glib.h&gt;
+
+static void 
+log_handler (const gchar   *log_domain,
+	     GLogLevelFlags log_level,
+	     const gchar   *message,
+	     gpointer       user_data)
+{
+  g_log_default_handler (log_domain, log_level, message, user_data);
+
+  g_on_error_query (MY_PROGRAM_NAME);
+}
+
+int main (int argc, char *argv[])
+{
+  g_log_set_handler (MY_LOG_DOMAIN,
+		     G_LOG_LEVEL_WARNING | 
+                     G_LOG_LEVEL_ERROR | 
+                     G_LOG_LEVEL_CRITICAL,
+		     log_handler,
+		     NULL);
+
+ /* ... */  
+</programlisting></informalexample>
+<para>
+If [E]xit is selected, the application terminates with a call to
+<function>_exit(0)</function>.
+</para>
+<para>
+If [H]alt is selected, the application enters an infinite loop.
+The infinite loop can only be stopped by killing the application,
+or by setting #glib_on_error_halt to %FALSE (possibly via a debugger).
+</para>
+<para>
+If [S]tack trace is selected, g_on_error_stack_trace() is called. This
+invokes <command>gdb</command>, which attaches to the current process and shows a stack trace.
+The prompt is then shown again.
+</para>
+<para>
+If [P]roceed is selected, the function returns.
+</para>
+<para>
+This function may cause different actions on non-UNIX platforms.
+</para>
+
+@prg_name: the program name, needed by <command>gdb</command> for the [S]tack trace option.
+If @prg_name is %NULL, g_get_prgname() is called to get the program name
+(which will work correctly if gdk_init() or gtk_init() has been called).
+
+
+<!-- ##### FUNCTION g_on_error_stack_trace ##### -->
+<para>
+Invokes <command>gdb</command>, which attaches to the current process and shows a stack trace.
+Called by g_on_error_query() when the [S]tack trace option is selected.
+</para>
+<para>
+This function may cause different actions on non-UNIX platforms.
+</para>
+
+@prg_name: the program name, needed by <command>gdb</command> for the [S]tack trace option.
+If @prg_name is %NULL, g_get_prgname() is called to get the program name
+(which will work correctly if gdk_init() or gtk_init() has been called).
+
+
+<!-- ##### MACRO G_BREAKPOINT ##### -->
+<para>
+Inserts a breakpoint instruction into the code.  On x86 and alpha systems
+this is implemented as a soft interrupt and on other architectures it raises
+a %SIGTRAP signal.
+</para>
+
+
+
diff --git a/docs/reference/glib/tmpl/windows.sgml b/docs/reference/glib/tmpl/windows.sgml
new file mode 100644
index 0000000..2a5a9611
--- /dev/null
+++ b/docs/reference/glib/tmpl/windows.sgml
@@ -0,0 +1,137 @@
+<!-- ##### SECTION Title ##### -->
+Windows Compatibility Functions
+
+<!-- ##### SECTION Short_Description ##### -->
+UNIX emulation on Windows
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+These functions provide some level of UNIX emulation on the Windows platform.
+If your application really needs the POSIX APIs, we suggest you try the Cygwin
+project.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO MAXPATHLEN ##### -->
+<para>
+Provided for UNIX emulation on Windows; equivalent to UNIX 
+macro %MAXPATHLEN, which is the maximum length of a filename
+(including full path).
+</para>
+
+
+
+<!-- ##### FUNCTION g_win32_error_message ##### -->
+<para>
+
+</para>
+
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_win32_getlocale ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_win32_get_package_installation_directory ##### -->
+<para>
+
+</para>
+
+@package: 
+@dll_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_win32_get_package_installation_directory_of_module ##### -->
+<para>
+
+</para>
+
+@hmodule: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_win32_get_package_installation_subdirectory ##### -->
+<para>
+
+</para>
+
+@package: 
+@dll_name: 
+@subdir: 
+@Returns: 
+
+
+<!-- ##### FUNCTION g_win32_get_windows_version ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION g_win32_locale_filename_from_utf8 ##### -->
+<para>
+
+</para>
+
+@utf8filename: 
+@Returns: 
+
+
+<!-- ##### MACRO G_WIN32_DLLMAIN_FOR_DLL_NAME ##### -->
+<para>
+On Windows, this macro defines a DllMain() function that stores the actual 
+DLL name that the code being compiled will be included in.
+</para>
+<para>
+On non-Windows platforms, expands to nothing.
+</para>
+
+@static: empty or "static".
+@dll_name: the name of the (pointer to the) char array where the DLL name 
+   will be stored. If this is used, you must also include 
+   <filename>windows.h</filename>. If you need a more complex DLL entry 
+   point function, you cannot use this.
+
+
+<!-- ##### MACRO G_WIN32_HAVE_WIDECHAR_API ##### -->
+<para>
+On Windows, this macro defines an expression which evaluates to %TRUE
+if the code is running on a version of Windows where the wide
+character versions of the Win32 API functions, and the wide chaacter
+versions of the C library functions work. (They are always present in
+the DLLs, but don't work on Windows 9x and Me.)
+</para>
+<para>
+On non-Windows platforms, it is not defined.
+</para>
+
+@Since: 2.6
+
+
+<!-- ##### MACRO G_WIN32_IS_NT_BASED ##### -->
+<para>
+On Windows, this macro defines an expression which evaluates to %TRUE 
+if the code is running on an NT-based Windows operating system.
+</para>
+<para>
+On non-Windows platforms, it is not defined.
+</para>
+
+@Since: 2.6
+
+
diff --git a/docs/reference/glib/version.xml.in b/docs/reference/glib/version.xml.in
new file mode 100644
index 0000000..af9b9c4
--- /dev/null
+++ b/docs/reference/glib/version.xml.in
@@ -0,0 +1 @@
+@GLIB_VERSION@
diff --git a/docs/reference/gobject/Makefile.am b/docs/reference/gobject/Makefile.am
new file mode 100644
index 0000000..0c88234
--- /dev/null
+++ b/docs/reference/gobject/Makefile.am
@@ -0,0 +1,85 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+AUTOMAKE_OPTIONS = 1.6
+
+# The name of the module.
+DOC_MODULE=gobject
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=gobject-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=../../../gobject
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="G_DISABLE_DEPRECATED" \
+	--ignore-decorators=G_GNUC_INTERNAL
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=g
+
+# Used for dependencies
+HFILE_GLOB=$(top_srcdir)/gobject/*.h
+CFILE_GLOB=$(top_srcdir)/gobject/*.c
+
+# Headers to ignore
+IGNORE_HFILES=gobjectalias.h
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES = \
+	-I$(srcdir) 			\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_builddir) 		\
+	-I$(top_builddir)/glib 		\
+	$(GLIB_DEBUG_FLAGS)
+GTKDOC_LIBS = \
+	$(top_builddir)/glib/libglib-2.0.la	\
+	$(top_builddir)/gobject/libgobject-2.0.la
+
+# Images to copy into HTML directory
+HTML_IMAGES =  \
+	$(srcdir)/images/glue.png
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE)
+content_files = version.xml 		\
+		glib-mkenums.xml 	\
+		glib-genmarshal.xml	\
+		gobject-query.xml \
+		tut_gobject.xml \
+		tut_gsignal.xml \
+		tut_gtype.xml \
+		tut_howto.xml \
+		tut_intro.xml \
+		tut_tools.xml
+
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS=--extra-dir=$(srcdir)/../glib/html
+
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+EXTRA_DIST += 		\
+	gobject.cI	\
+	version.xml.in
+
+########################################################################
+
+man_MANS = glib-mkenums.1 glib-genmarshal.1 gobject-query.1
+
+if ENABLE_MAN
+
+%.1 : %.xml 
+	@XSLTPROC@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+
+endif
+
+BUILT_EXTRA_DIST = $(man_MANS)
+
+dist-hook-local: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)';				\
+	for f in $$files; do					\
+	  if test -f $$f; then d=.; else d=$(srcdir); fi;	\
+	  cp $$d/$$f $(distdir) || exit 1; done
diff --git a/docs/reference/gobject/glib-genmarshal.1 b/docs/reference/gobject/glib-genmarshal.1
new file mode 100644
index 0000000..cef295d
--- /dev/null
+++ b/docs/reference/gobject/glib-genmarshal.1
@@ -0,0 +1,307 @@
+'\" t
+.\"     Title: glib-genmarshal
+.\"    Author: [see the "Author" section]
+.\" Generator: DocBook XSL Stylesheets v1.74.2 <http://docbook.sf.net/>
+.\"      Date: 03/13/2009
+.\"    Manual: [FIXME: manual]
+.\"    Source: [FIXME: source]
+.\"  Language: English
+.\"
+.TH "GLIB\-GENMARSHAL" "1" "03/13/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+glib-genmarshal \- C code marshaller generation utility for GLib closures
+.SH "SYNOPSIS"
+.HP \w'\fBglib\-genmarshal\fR\ 'u
+\fBglib\-genmarshal\fR [options...] [files...]
+.SH "DESCRIPTION"
+.PP
+\fBglib\-genmarshal\fR
+is a small utility that generates C code marshallers for callback functions of the GClosure mechanism in the GObject sublibrary of GLib\&. The marshaller functions have a standard signature, they get passed in the invoking closure, an array of value structures holding the callback function parameters and a value structure for the return value of the callback\&. The marshaller is then responsible to call the respective C code function of the closure with all the parameters on the stack and to collect its return value\&.
+.SH "INVOCATION"
+.PP
+\fBglib\-genmarshal\fR
+takes a list of marshallers to generate as input\&. The marshaller list is either read from standard input or from files passed as additional arguments on the command line\&.
+.SS "Options"
+.PP
+\fB\-\-header\fR
+.RS 4
+Generate header file contents of the marshallers\&.
+.RE
+.PP
+\fB\-\-body\fR
+.RS 4
+Generate C code file contents of the marshallers\&.
+.RE
+.PP
+\fB\-\-prefix=string\fR, \fB\-\-prefix string\fR
+.RS 4
+Specify marshaller prefix\&. The default prefix is
+`g_cclosure_marshal\'\&.
+.RE
+.PP
+\fB\-\-skip\-source\fR
+.RS 4
+Skip source location remarks in generated comments\&.
+.RE
+.PP
+\fB\-\-nostdinc\fR
+.RS 4
+Do not use the standard marshallers of the GObject library, and skip
+gmarshal\&.h
+include directive in generated header files\&.
+.RE
+.PP
+\fB\-\-g\-fatal\-warnings\fR
+.RS 4
+Make warnings fatal, that is, exit immediately once a warning occurs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Print brief help and exit\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-version\fR
+.RS 4
+Print version and exit\&.
+.RE
+.SS "Marshaller list format"
+.PP
+The marshaller lists are processed line by line, a line can contain a comment in the form of
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# this is a comment
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+or a marshaller specification of the form
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIRTYPE\fR:\fIPTYPE\fR
+\fIRTYPE\fR:\fIPTYPE\fR,\fIPTYPE\fR
+\fIRTYPE\fR:\fIPTYPE\fR,\fIPTYPE\fR,\fIPTYPE\fR
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+(up to 16
+\fIPTYPE\fRs may be present)\&.
+.PP
+The
+\fIRTYPE\fR
+part specifies the callback\'s return type and the
+\fIPTYPE\fRs right to the colon specify the callback\'s parameter list, except for the first and the last arguments which are always pointers\&.
+.SS "Parameter types"
+.PP
+Currently, the following types are supported:
+.PP
+\fIVOID\fR
+.RS 4
+indicates no return type, or no extra parameters\&. If
+\fIVOID\fR
+is used as the parameter list, no additional parameters may be present\&.
+.RE
+.PP
+\fIBOOLEAN\fR
+.RS 4
+for boolean types (gboolean)
+.RE
+.PP
+\fICHAR\fR
+.RS 4
+for signed char types (gchar)
+.RE
+.PP
+\fIUCHAR\fR
+.RS 4
+for unsigned char types (guchar)
+.RE
+.PP
+\fIINT\fR
+.RS 4
+for signed integer types (gint)
+.RE
+.PP
+\fIUINT\fR
+.RS 4
+for unsigned integer types (guint)
+.RE
+.PP
+\fILONG\fR
+.RS 4
+for signed long integer types (glong)
+.RE
+.PP
+\fIULONG\fR
+.RS 4
+for unsigned long integer types (gulong)
+.RE
+.PP
+\fIINT64\fR
+.RS 4
+for signed 64bit integer types (gint64)
+.RE
+.PP
+\fIUINT64\fR
+.RS 4
+for unsigned 64bit integer types (guint64)
+.RE
+.PP
+\fIENUM\fR
+.RS 4
+for enumeration types (gint)
+.RE
+.PP
+\fIFLAGS\fR
+.RS 4
+for flag enumeration types (guint)
+.RE
+.PP
+\fIFLOAT\fR
+.RS 4
+for single\-precision float types (gfloat)
+.RE
+.PP
+\fIDOUBLE\fR
+.RS 4
+for double\-precision float types (gdouble)
+.RE
+.PP
+\fISTRING\fR
+.RS 4
+for string types (gchar*)
+.RE
+.PP
+\fIBOXED\fR
+.RS 4
+for boxed (anonymous but reference counted) types (GBoxed*)
+.RE
+.PP
+\fIPARAM\fR
+.RS 4
+for GParamSpec or derived types (GParamSpec*)
+.RE
+.PP
+\fIPOINTER\fR
+.RS 4
+for anonymous pointer types (gpointer)
+.RE
+.PP
+\fIOBJECT\fR
+.RS 4
+for GObject or derived types (GObject*)
+.RE
+.PP
+\fINONE\fR
+.RS 4
+deprecated alias for
+\fIVOID\fR
+.RE
+.PP
+\fIBOOL\fR
+.RS 4
+deprecated alias for
+\fIBOOLEAN\fR
+.RE
+.SH "EXAMPLE"
+.PP
+To generate marshallers for the following callback functions:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+void   foo (gpointer data1,
+            gpointer data2);
+void   bar (gpointer data1,
+            gint     param1,
+            gpointer data2);
+gfloat baz (gpointer data1,
+            gboolean param1,
+            guchar   param2,
+            gpointer data2);
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The marshaller list has to look like this:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+VOID:VOID
+VOID:INT
+FLOAT:BOOLEAN,UCHAR
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The generated marshallers have the arguments encoded in their function name\&. For this particular list, they are
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+g_cclosure_marshal_VOID__VOID(),
+g_cclosure_marshal_VOID__INT(), 
+g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR()\&.
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+They can be used directly for GClosures or be passed in as the GSignalCMarshaller c_marshaller; argument upon creation of signals:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+GClosure *cc_foo, *cc_bar, *cc_baz;
+
+cc_foo = g_cclosure_new (NULL, foo, NULL);
+g_closure_set_marshal (cc_foo, g_cclosure_marshal_VOID__VOID);
+cc_bar = g_cclosure_new (NULL, bar, NULL);
+g_closure_set_marshal (cc_bar, g_cclosure_marshal_VOID__INT);
+cc_baz = g_cclosure_new (NULL, baz, NULL);
+g_closure_set_marshal (cc_baz, g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR);
+.fi
+.if n \{\
+.RE
+.\}
+.SH "SEE ALSO"
+.PP
+
+\fBglib\-mkenums\fR(1)
+.SH "BUGS"
+.PP
+None known yet\&.
+.SH "AUTHOR"
+.PP
+\fBglib\-genmarshal\fR
+has been written by Tim Janik
+timj@gtk\&.org\&.
+.PP
+This manual page was provided by Tim Janik
+timj@gtk\&.org\&.
diff --git a/docs/reference/gobject/glib-genmarshal.xml b/docs/reference/gobject/glib-genmarshal.xml
new file mode 100644
index 0000000..3bce42b
--- /dev/null
+++ b/docs/reference/gobject/glib-genmarshal.xml
@@ -0,0 +1,347 @@
+<refentry id="glib-genmarshal">
+
+<refmeta>
+<refentrytitle>glib-genmarshal</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>glib-genmarshal</refname>
+<refpurpose>C code marshaller generation utility for GLib closures</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>glib-genmarshal</command>
+<arg choice="opt" rep="repeat">options</arg>
+<arg choice="opt" rep="repeat">files</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>glib-genmarshal</command> is a small utility that generates C code 
+marshallers for callback functions of the GClosure mechanism in the GObject 
+sublibrary of GLib. The marshaller functions have a standard signature, 
+they get passed in the invoking closure, an array of value structures holding
+the callback function parameters and a value structure for the return value 
+of the callback. The marshaller is then responsible to call the respective C 
+code function of the closure with all the parameters on the stack and to 
+collect its return value.
+</para>
+</refsect1>
+
+<refsect1><title>Invocation</title>
+<para><command>glib-genmarshal</command> takes a list of marshallers to generate as 
+input. The marshaller list is either read from standard input or from files
+passed as additional arguments on the command line.
+</para>
+
+<refsect2><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>--header</option></term>
+<listitem><para>
+Generate header file contents of the marshallers.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--body</option></term>
+<listitem><para>
+Generate C code file contents of the marshallers.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--prefix=string</option>, <option>--prefix string</option></term>
+<listitem><para>
+Specify marshaller prefix. The default prefix is <literal>`g_cclosure_marshal'</literal>.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--skip-source</option></term>
+<listitem><para>
+Skip source location remarks in generated comments.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--nostdinc</option></term>
+<listitem><para>
+Do not use the standard marshallers of the GObject library, and skip 
+<filename>gmarshal.h</filename> include directive in generated header files.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--g-fatal-warnings</option></term>
+<listitem><para>
+Make warnings fatal, that is, exit immediately once a warning occurs.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-h</option>, <option>--help</option></term>
+<listitem><para>
+Print brief help and exit.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-v</option>, <option>--version</option></term>
+<listitem><para>
+Print version and exit.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</refsect2>
+
+<refsect2><title>Marshaller list format</title>
+<para>
+The marshaller lists are processed line by line, a line can contain a
+comment in the form of
+<programlisting>
+# this is a comment
+</programlisting>
+or a marshaller specification of the form
+<programlisting>
+<replaceable>RTYPE</replaceable>:<replaceable>PTYPE</replaceable>
+<replaceable>RTYPE</replaceable>:<replaceable>PTYPE</replaceable>,<replaceable>PTYPE</replaceable>
+<replaceable>RTYPE</replaceable>:<replaceable>PTYPE</replaceable>,<replaceable>PTYPE</replaceable>,<replaceable>PTYPE</replaceable>
+</programlisting>
+(up to 16 <replaceable>PTYPE</replaceable>s may be present).
+</para>
+<para>
+The <replaceable>RTYPE</replaceable> part specifies the callback's return 
+type and the <replaceable>PTYPE</replaceable>s right to the colon specify 
+the callback's parameter list, except for the first and the last arguments 
+which are always pointers.
+</para>
+</refsect2>
+<refsect2><title>Parameter types</title>
+<para>
+Currently, the following types are supported:
+<variablelist>
+<varlistentry>
+<term><replaceable>VOID</replaceable></term>
+<listitem><para>
+indicates no return type, or no extra parameters. 
+If <replaceable>VOID</replaceable> is used as the parameter list, no 
+additional parameters may be present.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>BOOLEAN</replaceable></term>
+<listitem><para>
+for boolean types (gboolean)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>CHAR</replaceable></term>
+<listitem><para>
+for signed char types (gchar)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>UCHAR</replaceable></term>
+<listitem><para>
+for unsigned char types (guchar)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>INT</replaceable></term>
+<listitem><para>
+for signed integer types (gint)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>UINT</replaceable></term>
+<listitem><para>
+for unsigned integer types (guint)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>LONG</replaceable></term>
+<listitem><para>
+for signed long integer types (glong)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>ULONG</replaceable></term>
+<listitem><para>
+for unsigned long integer types (gulong)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>INT64</replaceable></term>
+<listitem><para>
+for signed 64bit integer types (gint64)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>UINT64</replaceable></term>
+<listitem><para>
+for unsigned 64bit integer types (guint64)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>ENUM</replaceable></term>
+<listitem><para>
+for enumeration types (gint)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>FLAGS</replaceable></term>
+<listitem><para>
+for flag enumeration types (guint)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>FLOAT</replaceable></term>
+<listitem><para>
+for single-precision float types (gfloat)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>DOUBLE</replaceable></term>
+<listitem><para>
+for double-precision float types (gdouble)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>STRING</replaceable></term>
+<listitem><para>
+for string types (gchar*)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>BOXED</replaceable></term>
+<listitem><para>
+for boxed (anonymous but reference counted) types (GBoxed*)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>PARAM</replaceable></term>
+<listitem><para>
+for GParamSpec or derived types (GParamSpec*)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>POINTER</replaceable></term>
+<listitem><para>
+for anonymous pointer types (gpointer)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>OBJECT</replaceable></term>
+<listitem><para>
+for GObject or derived types (GObject*)
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>NONE</replaceable></term>
+<listitem><para>
+deprecated alias for <replaceable>VOID</replaceable>
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><replaceable>BOOL</replaceable></term>
+<listitem><para>
+deprecated alias for <replaceable>BOOLEAN</replaceable>
+</para></listitem>
+</varlistentry>
+</variablelist>
+</para>
+</refsect2>
+</refsect1>
+<refsect1><title>Example</title>
+<para>
+To generate marshallers for the following callback functions:
+</para>
+<programlisting>
+void   foo (gpointer data1,
+            gpointer data2);
+void   bar (gpointer data1,
+            gint     param1,
+            gpointer data2);
+gfloat baz (gpointer data1,
+            gboolean param1,
+            guchar   param2,
+            gpointer data2);
+</programlisting>
+<para>
+The marshaller list has to look like this:
+</para>
+<programlisting>
+VOID:VOID
+VOID:INT
+FLOAT:BOOLEAN,UCHAR
+</programlisting>
+<para>
+The generated marshallers have the arguments encoded in their function name. 
+For this particular list, they are
+</para>
+<programlisting>
+g_cclosure_marshal_VOID__VOID(),
+g_cclosure_marshal_VOID__INT(), 
+g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR().
+</programlisting>
+<para>
+They can be used directly for GClosures or be passed in as the 
+GSignalCMarshaller c_marshaller; argument upon creation of signals:
+</para>
+<programlisting>
+GClosure *cc_foo, *cc_bar, *cc_baz;
+
+cc_foo = g_cclosure_new (NULL, foo, NULL);
+g_closure_set_marshal (cc_foo, g_cclosure_marshal_VOID__VOID);
+cc_bar = g_cclosure_new (NULL, bar, NULL);
+g_closure_set_marshal (cc_bar, g_cclosure_marshal_VOID__INT);
+cc_baz = g_cclosure_new (NULL, baz, NULL);
+g_closure_set_marshal (cc_baz, g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR);
+</programlisting>
+</refsect1>
+<refsect1><title>See also</title>
+<para>
+<command>glib-mkenums</command>(1)
+</para>
+</refsect1>
+<refsect1><title>Bugs</title>
+<para>
+None known yet.
+</para>
+</refsect1>
+<refsect1><title>Author</title>
+<para><command>glib-genmarshal</command> has been written by Tim Janik 
+<email>timj@gtk.org</email>.
+</para>
+<para>
+This manual page was provided by Tim Janik <email>timj@gtk.org</email>.
+</para>
+</refsect1>
+</refentry>
+
+
diff --git a/docs/reference/gobject/glib-mkenums.1 b/docs/reference/gobject/glib-mkenums.1
new file mode 100644
index 0000000..8a5f23d
--- /dev/null
+++ b/docs/reference/gobject/glib-mkenums.1
@@ -0,0 +1,229 @@
+'\" t
+.\"     Title: glib-mkenums
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.74.2 <http://docbook.sf.net/>
+.\"      Date: 03/13/2009
+.\"    Manual: [FIXME: manual]
+.\"    Source: [FIXME: source]
+.\"  Language: English
+.\"
+.TH "GLIB\-MKENUMS" "1" "03/13/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+glib-mkenums \- C language enum description generation utility
+.SH "SYNOPSIS"
+.HP \w'\fBglib\-mkenums\fR\ 'u
+\fBglib\-mkenums\fR [options...] [files...]
+.SH "DESCRIPTION"
+.PP
+\fBglib\-mkenums\fR
+is a small perl\-script utility that parses C code to extract enum definitions and produces enum descriptions based on text templates specified by the user\&. Most frequently this script is used to produce C code that contains enum values as strings so programs can provide value name strings for introspection\&.
+.SH "INVOCATION"
+.PP
+\fBglib\-mkenums\fR
+takes a list of valid C code files as input\&. The options specified control the text that is output, certain substitutions are performed on the text templates for keywords enclosed in @ characters\&.
+.SS "Options"
+.PP
+\fB\-\-fhead\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+prior to processing input files\&.
+.RE
+.PP
+\fB\-\-fprod\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+everytime a new input file is being processed\&.
+.RE
+.PP
+\fB\-\-ftail\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+after all input files have been processed\&.
+.RE
+.PP
+\fB\-\-eprod\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+everytime an enum is encountered in the input files\&.
+.RE
+.PP
+\fB\-\-vhead\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+before iterating over the set of values of an enum\&.
+.RE
+.PP
+\fB\-\-vprod\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+for every value of an enum\&.
+.RE
+.PP
+\fB\-\-vtail\fR \fItext\fR
+.RS 4
+Put out
+\fItext\fR
+after iterating over all values of an enum\&.
+.RE
+.PP
+\fB\-\-comments\fR \fItext\fR
+.RS 4
+Template for auto\-generated comments, the default (for C code generations) is
+"/* @comment@ */"\&.
+.RE
+.PP
+\fB\-\-template\fR \fIfile\fR
+.RS 4
+Read templates from the given file\&. The templates are enclosed in specially\-formatted C comments
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+/*** BEGIN section ***/
+/*** END section ***/
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+where section may be
+file\-header,
+file\-production,
+file\-tail,
+enumeration\-production,
+value\-header,
+value\-production,
+value\-tail
+or
+comment\&.
+.RE
+.PP
+\fB\-\-help\fR
+.RS 4
+Print brief help and exit\&.
+.RE
+.PP
+\fB\-\-version\fR
+.RS 4
+Print version and exit\&.
+.RE
+.SS "Production text substitutions"
+.PP
+Certain keywords enclosed in @ characters will be substituted in the emitted text\&. For the substitution examples of the keywords below, the following example enum definition is assumed:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+typedef enum
+{
+  PREFIX_THE_XVALUE    = 1 << 3,
+  PREFIX_ANOTHER_VALUE = 1 << 4
+} PrefixTheXEnum;
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+@EnumName@
+.RS 4
+The name of the enum currently being processed, enum names are assumed to be properly namespaced and to use mixed capitalization to separate words (e\&.g\&. PrefixTheXEnum)\&.
+.RE
+.PP
+@enum_name@
+.RS 4
+The enum name with words lowercase and word\-separated by underscores (e\&.g\&. prefix_the_xenum)\&.
+.RE
+.PP
+@ENUMNAME@
+.RS 4
+The enum name with words uppercase and word\-separated by underscores (e\&.g\&. PREFIX_THE_XENUM)\&.
+.RE
+.PP
+@ENUMSHORT@
+.RS 4
+The enum name with words uppercase and word\-separated by underscores, prefix stripped (e\&.g\&. THE_XENUM)\&.
+.RE
+.PP
+@VALUENAME@
+.RS 4
+The enum value name currently being processed with words uppercase and word\-separated by underscores, this is the assumed literal notation of enum values in the C sources (e\&.g\&. PREFIX_THE_XVALUE)\&.
+.RE
+.PP
+@valuenick@
+.RS 4
+A nick name for the enum value currently being processed, this is usually generated by stripping common prefix words of all the enum values of the current enum, the words are lowercase and underscores are substituted by a minus (e\&.g\&. the\-xvalue)\&.
+.RE
+.PP
+@type@
+.RS 4
+This is substituted either by "enum" or "flags", depending on whether the enum value definitions contained bit\-shift operators or not (e\&.g\&. flags)\&.
+.RE
+.PP
+@Type@
+.RS 4
+The same as
+@type@
+with the first letter capitalized (e\&.g\&. Flags)\&.
+.RE
+.PP
+@TYPE@
+.RS 4
+The same as
+@type@
+with all letters uppercased (e\&.g\&. FLAGS)\&.
+.RE
+.PP
+@filename@
+.RS 4
+The name of the input file currently being processed (e\&.g\&. foo\&.h)\&.
+.RE
+.SS "Trigraph extensions"
+.PP
+Some C comments are treated specially in the parsed enum definitions, such comments start out with the trigraph sequence
+/*<
+and end with the trigraph sequence
+>*/\&. Per enum definition, the options "skip" and "flags" can be specified, to indicate this enum definition to be skipped, or for it to be treated as a flags definition, or to specify the common prefix to be stripped from all values to generate value nicknames, respectively\&. The "lowercase_name" option can be used to specify the word separation used in the *_get_type() function\&. For instance, /*< lowercase_name=gnome_vfs_uri_hide_options >*/\&.
+.PP
+Per value definition, the options "skip" and "nick" are supported\&. The former causes the value to be skipped, and the latter can be used to specify the otherwise auto\-generated nickname\&. Examples:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+typedef enum /*< skip >*/
+{
+  PREFIX_FOO
+} PrefixThisEnumWillBeSkipped;
+typedef enum /*< flags,prefix=PREFIX >*/
+{
+  PREFIX_THE_ZEROTH_VALUE,	/*< skip >*/
+  PREFIX_THE_FIRST_VALUE,
+  PREFIX_THE_SECOND_VALUE,
+  PREFIX_THE_THIRD_VALUE,	/*< nick=the\-last\-value >*/
+} PrefixTheFlagsEnum;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.SH "SEE ALSO"
+.PP
+\fBglib\-genmarshal\fR(1)
diff --git a/docs/reference/gobject/glib-mkenums.xml b/docs/reference/gobject/glib-mkenums.xml
new file mode 100644
index 0000000..40bf59c
--- /dev/null
+++ b/docs/reference/gobject/glib-mkenums.xml
@@ -0,0 +1,272 @@
+<refentry id="glib-mkenums">
+
+<refmeta>
+<refentrytitle>glib-mkenums</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>glib-mkenums</refname>
+<refpurpose>C language enum description generation utility</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>glib-mkenums</command>
+<arg choice="opt" rep="repeat">options</arg>
+<arg choice="opt" rep="repeat">files</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para><command>glib-mkenums</command> is a small perl-script utility that parses C
+code to extract enum definitions and produces enum descriptions based on text
+templates specified by the user. Most frequently this script is used to 
+produce C code that contains enum values as strings so programs can provide 
+value name strings for introspection.
+</para>
+</refsect1>
+
+<refsect1><title>Invocation</title>
+<para><command>glib-mkenums</command> takes a list of valid C code files as
+input. The options specified control the text that is output, certain 
+substitutions are performed on the text templates for keywords enclosed 
+in @ characters.
+</para>
+
+<refsect2><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>--fhead</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> prior to processing input files.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--fprod</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> everytime a new input file 
+is being processed.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--ftail</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> after all input files have been 
+processed.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--eprod</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> everytime an enum is encountered 
+in the input files.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--vhead</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> before iterating over the set of 
+values of an enum.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--vprod</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> for every value of an enum.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--vtail</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Put out <replaceable>text</replaceable> after iterating over all values 
+of an enum.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--comments</option> <replaceable>text</replaceable></term>
+<listitem><para>
+Template for auto-generated comments, the default (for C code generations) is
+<literal>"/* @comment@ */"</literal>.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--template</option> <replaceable>file</replaceable></term>
+<listitem><para>
+Read templates from the given file. The templates are enclosed in
+specially-formatted C comments
+<programlisting>
+/*** BEGIN section ***/
+/*** END section ***/
+</programlisting>
+where section may be <literal>file-header</literal>, 
+<literal>file-production</literal>, <literal>file-tail</literal>,
+<literal>enumeration-production</literal>, <literal>value-header</literal>, 
+<literal>value-production</literal>, <literal>value-tail</literal> or
+<literal>comment</literal>.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--help</option></term>
+<listitem><para>
+Print brief help and exit.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>--version</option></term>
+<listitem><para>
+Print version and exit.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</refsect2>
+
+<refsect2><title>Production text substitutions</title>
+<para>
+Certain keywords enclosed in @ characters will be substituted in the 
+emitted text. For the substitution examples of the keywords below, 
+the following example enum definition is assumed:
+<programlisting>
+typedef enum
+{
+  PREFIX_THE_XVALUE    = 1 &lt;&lt; 3,
+  PREFIX_ANOTHER_VALUE = 1 &lt;&lt; 4
+} PrefixTheXEnum;
+</programlisting>
+<variablelist>
+<varlistentry>
+<term>@EnumName@</term>
+<listitem><para>
+The name of the enum currently being processed, enum names are assumed to be
+properly namespaced and to use mixed capitalization to separate
+words (e.g. PrefixTheXEnum).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@enum_name@</term>
+<listitem><para>
+The enum name with words lowercase and word-separated by underscores 
+(e.g. prefix_the_xenum).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@ENUMNAME@</term>
+<listitem><para>
+The enum name with words uppercase and word-separated by underscores 
+(e.g. PREFIX_THE_XENUM).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@ENUMSHORT@</term>
+<listitem><para>
+The enum name with words uppercase and word-separated by underscores, 
+prefix stripped (e.g. THE_XENUM).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@VALUENAME@</term>
+<listitem><para>
+The enum value name currently being processed with words uppercase and 
+word-separated by underscores,
+this is the assumed literal notation of enum values in the C sources 
+(e.g. PREFIX_THE_XVALUE).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@valuenick@</term>
+<listitem><para>
+A nick name for the enum value currently being processed, this is usually 
+generated by stripping common prefix words of all the enum values of the 
+current enum, the words are lowercase and underscores are substituted by a 
+minus (e.g. the-xvalue).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@type@</term>
+<listitem><para>
+This is substituted either by "enum" or "flags", depending on whether the 
+enum value definitions contained bit-shift operators or not (e.g. flags).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@Type@</term>
+<listitem><para>
+The same as <literal>@type@</literal> with the first letter capitalized (e.g. Flags).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@TYPE@</term>
+<listitem><para>
+The same as <literal>@type@</literal> with all letters uppercased (e.g. FLAGS).
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>@filename@</term>
+<listitem><para>
+The name of the input file currently being processed (e.g. foo.h).
+</para></listitem>
+</varlistentry>
+</variablelist>
+</para>
+</refsect2>
+<refsect2><title>Trigraph extensions</title>
+<para>
+Some C comments are treated specially in the parsed enum definitions, 
+such comments start out with the trigraph sequence <literal>/*&lt;</literal> 
+and end with the trigraph sequence <literal>&gt;*/</literal>.
+Per enum definition, the options "skip" and "flags" can be specified, to 
+indicate this enum definition to be skipped, or for it to be treated as 
+a flags definition, or to specify the common prefix to be stripped from 
+all values to generate value nicknames, respectively. The "lowercase_name"
+option can be used to specify the word separation used in the *_get_type()
+function. For instance, /*&lt; lowercase_name=gnome_vfs_uri_hide_options &gt;*/.
+</para>
+<para>
+Per value definition, the options "skip" and "nick" are supported. 
+The former causes the value to be skipped, and the latter can be used to 
+specify the otherwise auto-generated nickname.
+Examples:
+<programlisting>
+typedef enum /*&lt; skip &gt;*/
+{
+  PREFIX_FOO
+} PrefixThisEnumWillBeSkipped;
+typedef enum /*&lt; flags,prefix=PREFIX &gt;*/
+{
+  PREFIX_THE_ZEROTH_VALUE,	/*&lt; skip &gt;*/
+  PREFIX_THE_FIRST_VALUE,
+  PREFIX_THE_SECOND_VALUE,
+  PREFIX_THE_THIRD_VALUE,	/*&lt; nick=the-last-value &gt;*/
+} PrefixTheFlagsEnum;
+</programlisting>
+</para>
+</refsect2>
+</refsect1>
+<refsect1><title>See also</title>
+<para><command>glib-genmarshal</command>(1)
+</para>
+</refsect1>
+</refentry>
+
+
diff --git a/docs/reference/gobject/gobject-docs.sgml b/docs/reference/gobject/gobject-docs.sgml
new file mode 100644
index 0000000..ef93c7e
--- /dev/null
+++ b/docs/reference/gobject/gobject-docs.sgml
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY gobject-GType SYSTEM "xml/gtype.xml">
+<!ENTITY gobject-GTypePlugin SYSTEM "xml/gtypeplugin.xml">
+<!ENTITY gobject-GTypeModule SYSTEM "xml/gtypemodule.xml">
+<!ENTITY gobject-The-Base-Object-Type SYSTEM "xml/objects.xml">
+<!ENTITY gobject-Enumeration-and-Flag-Types SYSTEM "xml/enumerations_flags.xml">
+<!ENTITY gobject-Boxed-Types SYSTEM "xml/gboxed.xml">
+<!ENTITY gobject-Generic-values SYSTEM "xml/generic_values.xml">
+<!ENTITY gobject-param-value-types SYSTEM "xml/param_value_types.xml">
+<!ENTITY gobject-GParamSpec SYSTEM "xml/gparamspec.xml">
+<!ENTITY gobject-Varargs-Value-Collection SYSTEM "xml/value_collection.xml">
+<!ENTITY gobject-Signals SYSTEM "xml/signals.xml">
+<!ENTITY gobject-Closures SYSTEM "xml/gclosure.xml">
+<!ENTITY gobject-Value-Arrays SYSTEM "xml/value_arrays.xml">
+<!ENTITY glib-mkenums SYSTEM "glib-mkenums.xml">
+<!ENTITY glib-genmarshal SYSTEM "glib-genmarshal.xml">
+<!ENTITY gobject-query SYSTEM "gobject-query.xml">
+<!ENTITY version SYSTEM "version.xml">
+
+<!ENTITY tutorial-Intro SYSTEM "tut_intro.xml">
+<!ENTITY tutorial-GType SYSTEM "tut_gtype.xml">
+<!ENTITY tutorial-GObject SYSTEM "tut_gobject.xml">
+<!ENTITY tutorial-GSignal SYSTEM "tut_gsignal.xml">
+<!ENTITY tutorial-HowTo SYSTEM "tut_howto.xml">
+<!ENTITY tutorial-Tools SYSTEM "tut_tools.xml">
+
+]>
+<book id="index">
+  <bookinfo>
+    <title>GObject Reference Manual</title>
+    <releaseinfo>
+      for GObject &version;
+      The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://library.gnome.org/devel/gobject/unstable/">http://library.gnome.org/devel/gobject/unstable/</ulink>.
+    </releaseinfo>
+  </bookinfo>
+
+  <preface>
+    <title>Introduction</title>
+      <para>
+			Most modern programming languages come with their own native object
+			systems and additional fundamental algorithmic language constructs.
+			Just as GLib serves as an implementation of such fundamental
+			types and algorithms (linked lists, hash tables and so forth), the
+			GLib Object System provides the required implementations of a
+			flexible extensible and intentionally easy to map (into other
+			languages) object-oriented framework for C.
+			The substantial elements that are provided can be summarized as:
+			<itemizedlist>
+				<listitem><para>
+					 A generic type system to register arbitrary single-inherited
+						flat and deep derived types as well as interfaces for
+						structured types.
+						It takes care of creation, initialization and memory management
+						of the assorted object and class structures, maintains
+						parent/child relationships and deals with dynamic implementations
+						of such types. That is, their type specific implementations are
+						relocatable/unloadable during runtime.
+				</para></listitem>
+				<listitem><para>
+						A collection of fundamental type implementations, such as integers,
+						doubles, enums and structured types, to name a few.
+				</para></listitem>
+				<listitem><para>
+						A sample fundamental type implementation to base object hierarchies
+						upon - the GObject fundamental type.
+				</para></listitem>
+				<listitem><para>
+						A signal system that allows very flexible user customization of
+						virtual/overridable object methods and can serve as a powerful
+						notification mechanism.
+				</para></listitem>
+				<listitem><para>
+						An extensible parameter/value system, supporting all the provided
+						fundamental types that can be used to generically handle object
+						properties or otherwise parameterized types.
+				</para></listitem>
+			</itemizedlist>
+		</para>
+  </preface>
+
+  <part label="I">
+    <title>Concepts</title>
+
+    &tutorial-Intro;
+    &tutorial-GType;
+    &tutorial-GObject;
+    &tutorial-GSignal;
+  </part>
+  <reference label="II">
+    <title>API Reference</title>
+    
+      &gobject-GType;
+      &gobject-GTypePlugin;
+      &gobject-GTypeModule;
+      &gobject-The-Base-Object-Type;
+      &gobject-Enumeration-and-Flag-Types;
+      &gobject-Boxed-Types;
+      &gobject-Generic-values;
+      &gobject-param-value-types;
+      &gobject-Varargs-Value-Collection;
+      &gobject-GParamSpec;
+      &gobject-Signals;
+      &gobject-Closures;
+      &gobject-Value-Arrays;
+      
+  </reference>
+  <reference label="III">
+    <title>Tools Reference</title>
+
+    &glib-mkenums;
+    &glib-genmarshal;
+    &gobject-query;
+  </reference>
+  <part label="IV">
+    <title>Tutorial</title>
+
+    &tutorial-HowTo;
+  </part>
+  <part label="V">
+    <title>Related Tools</title>
+
+    &tutorial-Tools;
+  </part>
+
+  <index>
+    <title>Index</title>
+  </index>
+  <index role="deprecated">
+    <title>Index of deprecated symbols</title>
+  </index>
+  <index role="2.2">
+    <title>Index of new symbols in 2.2</title>
+  </index>
+  <index role="2.4">
+    <title>Index of new symbols in 2.4</title>
+  </index>  
+  <index role="2.6">
+    <title>Index of new symbols in 2.6</title>
+  </index>  
+  <index role="2.8">
+    <title>Index of new symbols in 2.8</title>
+  </index>  
+  <index role="2.10">
+    <title>Index of new symbols in 2.10</title>
+  </index>  
+  <index role="2.12">
+    <title>Index of new symbols in 2.12</title>
+  </index>  
+  <index role="2.14">
+    <title>Index of new symbols in 2.14</title>
+  </index>  
+  <index role="2.18">
+    <title>Index of new symbols in 2.18</title>
+  </index>  
+  
+</book>
diff --git a/docs/reference/gobject/gobject-overrides.txt b/docs/reference/gobject/gobject-overrides.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/reference/gobject/gobject-overrides.txt
diff --git a/docs/reference/gobject/gobject-query.1 b/docs/reference/gobject/gobject-query.1
new file mode 100644
index 0000000..53903c3
--- /dev/null
+++ b/docs/reference/gobject/gobject-query.1
@@ -0,0 +1,83 @@
+'\" t
+.\"     Title: gobject-query
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.74.2 <http://docbook.sf.net/>
+.\"      Date: 03/13/2009
+.\"    Manual: [FIXME: manual]
+.\"    Source: [FIXME: source]
+.\"  Language: English
+.\"
+.TH "GOBJECT\-QUERY" "1" "03/13/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gobject-query \- display a tree of types
+.SH "SYNOPSIS"
+.HP \w'\fBgobject\-query\fR\ 'u
+\fBgobject\-query\fR froots [options...]
+.HP \w'\fBgobject\-query\fR\ 'u
+\fBgobject\-query\fR tree [options...]
+.SH "DESCRIPTION"
+.PP
+
+\fBgobject\-query\fR
+is a small utility that draws a tree of types\&.
+.SH "INVOCATION"
+.PP
+
+\fBgobject\-query\fR
+takes a mandatory argument that specifies whether it should iterate over the fundamental types or print a type tree\&.
+.SS "Options"
+.PP
+\fBfroots\fR
+.RS 4
+iterate over fundamental roots
+.RE
+.PP
+\fBtree\fR
+.RS 4
+print type tree
+.RE
+.PP
+\fB\-r\fR \fItype\fR
+.RS 4
+specify the root type
+.RE
+.PP
+\fB\-n\fR
+.RS 4
+don\'t descend type tree
+.RE
+.PP
+\fB\-b\fR \fIstring\fR
+.RS 4
+specify indent string
+.RE
+.PP
+\fB\-i\fR \fIstring\fR
+.RS 4
+specify incremental indent string
+.RE
+.PP
+\fB\-s\fR \fInumber\fR
+.RS 4
+specify line spacing
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Print brief help and exit\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-version\fR
+.RS 4
+Print version and exit\&.
+.RE
diff --git a/docs/reference/gobject/gobject-query.xml b/docs/reference/gobject/gobject-query.xml
new file mode 100644
index 0000000..af6fccc
--- /dev/null
+++ b/docs/reference/gobject/gobject-query.xml
@@ -0,0 +1,111 @@
+<refentry id="gobject-query">
+
+<refmeta>
+<refentrytitle>gobject-query</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>gobject-query</refname>
+<refpurpose>display a tree of types</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>gobject-query</command>
+<arg choice="plain">froots</arg>
+<arg choice="opt" rep="repeat">options</arg>
+</cmdsynopsis>
+<cmdsynopsis>
+<command>gobject-query</command>
+<arg choice="plain">tree</arg>
+<arg choice="opt" rep="repeat">options</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para>
+<command>gobject-query</command> is a small utility that draws a tree of 
+types.
+</para>
+</refsect1>
+
+<refsect1><title>Invocation</title>
+<para>
+<command>gobject-query</command> takes a mandatory argument that specifies
+whether it should iterate over the fundamental types or print a type tree.
+</para>
+
+<refsect2><title>Options</title>
+<variablelist>
+
+<varlistentry>
+<term><option>froots</option></term>
+<listitem><para>
+iterate over fundamental roots
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>tree</option></term>
+<listitem><para>
+print type tree
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-r</option> <replaceable>type</replaceable></term>
+<listitem><para>
+specify the root type
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-n</option></term>
+<listitem><para>
+don't descend type tree
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-b</option> <replaceable>string</replaceable></term>
+<listitem><para>
+specify indent string
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-i</option> <replaceable>string</replaceable></term>
+<listitem><para>
+specify incremental indent string
+</para></listitem>
+</varlistentry>
+
+
+<varlistentry>
+<term><option>-s</option> <replaceable>number</replaceable></term>
+<listitem><para>
+specify line spacing
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-h</option>, <option>--help</option></term>
+<listitem><para>
+Print brief help and exit.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term><option>-v</option>, <option>--version</option></term>
+<listitem><para>
+Print version and exit.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</refsect2>
+</refsect1>
+</refentry>
+
+
diff --git a/docs/reference/gobject/gobject-sections.txt b/docs/reference/gobject/gobject-sections.txt
new file mode 100644
index 0000000..f0307dd
--- /dev/null
+++ b/docs/reference/gobject/gobject-sections.txt
@@ -0,0 +1,822 @@
+<INCLUDE>glib-object.h</INCLUDE>
+
+<SECTION>
+<FILE>gtype</FILE>
+<TITLE>Type Information</TITLE>
+GType
+G_TYPE_FUNDAMENTAL
+G_TYPE_FUNDAMENTAL_MAX
+G_TYPE_MAKE_FUNDAMENTAL
+G_TYPE_IS_ABSTRACT
+G_TYPE_IS_DERIVED
+G_TYPE_IS_FUNDAMENTAL
+G_TYPE_IS_VALUE_TYPE
+G_TYPE_HAS_VALUE_TABLE
+G_TYPE_IS_CLASSED
+G_TYPE_IS_INSTANTIATABLE
+G_TYPE_IS_DERIVABLE
+G_TYPE_IS_DEEP_DERIVABLE
+G_TYPE_IS_INTERFACE
+GTypeInterface
+GTypeInstance
+GTypeClass
+GTypeInfo
+GTypeFundamentalInfo
+GInterfaceInfo
+GTypeValueTable
+G_TYPE_FROM_INSTANCE
+G_TYPE_FROM_CLASS
+G_TYPE_FROM_INTERFACE
+G_TYPE_INSTANCE_GET_CLASS
+G_TYPE_INSTANCE_GET_INTERFACE
+G_TYPE_INSTANCE_GET_PRIVATE
+G_TYPE_CHECK_INSTANCE
+G_TYPE_CHECK_INSTANCE_CAST
+G_TYPE_CHECK_INSTANCE_TYPE
+G_TYPE_CHECK_CLASS_CAST
+G_TYPE_CHECK_CLASS_TYPE
+G_TYPE_CHECK_VALUE
+G_TYPE_CHECK_VALUE_TYPE
+G_TYPE_FLAG_RESERVED_ID_BIT
+g_type_init
+GTypeDebugFlags
+g_type_init_with_debug_flags
+g_type_name
+g_type_qname
+g_type_from_name
+g_type_parent
+g_type_depth
+g_type_next_base
+g_type_is_a
+g_type_class_ref
+g_type_class_peek
+g_type_class_peek_static
+g_type_class_unref
+g_type_class_peek_parent
+g_type_class_add_private
+g_type_interface_peek
+g_type_interface_peek_parent
+g_type_default_interface_ref
+g_type_default_interface_peek
+g_type_default_interface_unref
+g_type_children
+g_type_interfaces
+g_type_interface_prerequisites
+g_type_set_qdata
+g_type_get_qdata
+g_type_query
+GTypeQuery
+GBaseInitFunc
+GBaseFinalizeFunc
+GClassInitFunc
+GClassFinalizeFunc
+GInstanceInitFunc
+GInterfaceInitFunc
+GInterfaceFinalizeFunc
+GTypeClassCacheFunc
+GTypeFlags
+GTypeFundamentalFlags
+g_type_register_static
+g_type_register_static_simple
+g_type_register_dynamic
+g_type_register_fundamental
+g_type_add_interface_static
+g_type_add_interface_dynamic
+g_type_interface_add_prerequisite
+g_type_get_plugin
+g_type_interface_get_plugin
+g_type_fundamental_next
+g_type_fundamental
+g_type_create_instance
+g_type_free_instance
+g_type_add_class_cache_func
+g_type_remove_class_cache_func
+g_type_class_unref_uncached
+g_type_add_interface_check
+g_type_remove_interface_check
+GTypeInterfaceCheckFunc
+g_type_value_table_peek
+
+G_DEFINE_TYPE
+G_DEFINE_TYPE_WITH_CODE
+G_DEFINE_ABSTRACT_TYPE
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE
+G_IMPLEMENT_INTERFACE
+G_DEFINE_TYPE_EXTENDED
+
+<SUBSECTION Private>
+G_TYPE_FUNDAMENTAL_SHIFT
+g_type_check_instance
+g_type_check_instance_cast
+g_type_check_instance_is_a
+g_type_check_class_cast
+g_type_check_class_is_a
+g_type_check_is_value_type
+g_type_check_value
+g_type_check_value_holds
+g_type_instance_get_private
+g_type_test_flags
+g_type_name_from_instance
+g_type_name_from_class
+
+<SUBSECTION>
+G_TYPE_INVALID
+G_TYPE_NONE
+G_TYPE_INTERFACE
+G_TYPE_CHAR
+G_TYPE_UCHAR
+G_TYPE_BOOLEAN
+G_TYPE_INT
+G_TYPE_UINT
+G_TYPE_LONG
+G_TYPE_ULONG
+G_TYPE_INT64
+G_TYPE_UINT64
+G_TYPE_ENUM
+G_TYPE_FLAGS
+G_TYPE_FLOAT
+G_TYPE_DOUBLE
+G_TYPE_STRING
+G_TYPE_POINTER
+G_TYPE_BOXED
+G_TYPE_PARAM
+G_TYPE_OBJECT
+G_TYPE_GTYPE
+
+<SUBSECTION>
+G_TYPE_RESERVED_GLIB_FIRST
+G_TYPE_RESERVED_GLIB_LAST
+G_TYPE_RESERVED_BSE_FIRST
+G_TYPE_RESERVED_BSE_LAST
+G_TYPE_RESERVED_USER_FIRST
+
+<SUBSECTION Private>
+GOBJECT_VAR
+g_value_c_init
+g_value_types_init
+g_enum_types_init
+g_param_type_init
+g_boxed_type_init
+g_object_type_init
+g_param_spec_types_init
+g_value_transforms_init
+g_signal_init
+g_gtype_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gtypeplugin</FILE>
+<TITLE>GTypePlugin</TITLE>
+GTypePlugin
+GTypePluginClass
+GTypePluginUse
+GTypePluginUnuse
+GTypePluginCompleteTypeInfo
+GTypePluginCompleteInterfaceInfo
+g_type_plugin_use
+g_type_plugin_unuse
+g_type_plugin_complete_type_info
+g_type_plugin_complete_interface_info
+<SUBSECTION Standard>
+G_TYPE_PLUGIN
+G_IS_TYPE_PLUGIN
+G_TYPE_TYPE_PLUGIN
+g_type_plugin_get_type
+G_TYPE_PLUGIN_CLASS
+G_IS_TYPE_PLUGIN_CLASS
+G_TYPE_PLUGIN_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gtypemodule</FILE>
+<TITLE>GTypeModule</TITLE>
+GTypeModule
+GTypeModuleClass
+g_type_module_use
+g_type_module_unuse
+g_type_module_set_name
+g_type_module_register_type
+g_type_module_add_interface
+g_type_module_register_enum
+g_type_module_register_flags
+
+G_DEFINE_DYNAMIC_TYPE
+G_DEFINE_DYNAMIC_TYPE_EXTENDED
+
+<SUBSECTION Standard>
+G_TYPE_MODULE
+G_IS_TYPE_MODULE
+G_TYPE_TYPE_MODULE
+g_type_module_get_type
+G_TYPE_MODULE_CLASS
+G_IS_TYPE_MODULE_CLASS
+G_TYPE_MODULE_GET_CLASS
+</SECTION>
+
+<SECTION>
+<TITLE>The Base Object Type</TITLE>
+<FILE>objects</FILE>
+GObject
+GObjectClass
+GObjectConstructParam
+GObjectGetPropertyFunc
+GObjectSetPropertyFunc
+GObjectFinalizeFunc
+G_TYPE_IS_OBJECT
+G_OBJECT
+G_IS_OBJECT
+G_OBJECT_CLASS
+G_IS_OBJECT_CLASS
+G_OBJECT_GET_CLASS
+G_OBJECT_TYPE
+G_OBJECT_TYPE_NAME
+G_OBJECT_CLASS_TYPE
+G_OBJECT_CLASS_NAME
+g_object_class_install_property
+g_object_class_find_property
+g_object_class_list_properties
+g_object_class_override_property
+g_object_interface_install_property
+g_object_interface_find_property
+g_object_interface_list_properties
+g_object_new
+g_object_newv
+GParameter
+g_object_ref
+g_object_unref
+g_object_ref_sink
+GInitiallyUnowned
+GInitiallyUnownedClass
+G_TYPE_INITIALLY_UNOWNED
+g_object_is_floating
+g_object_force_floating
+GWeakNotify
+g_object_weak_ref
+g_object_weak_unref
+g_object_add_weak_pointer
+g_object_remove_weak_pointer
+GToggleNotify
+g_object_add_toggle_ref
+g_object_remove_toggle_ref
+g_object_connect
+g_object_disconnect
+g_object_set
+g_object_get
+g_object_notify
+g_object_freeze_notify
+g_object_thaw_notify
+g_object_get_data
+g_object_set_data
+g_object_set_data_full
+g_object_steal_data
+g_object_get_qdata
+g_object_set_qdata
+g_object_set_qdata_full
+g_object_steal_qdata
+g_object_set_property
+g_object_get_property
+g_object_new_valist
+g_object_set_valist
+g_object_get_valist
+g_object_watch_closure
+g_object_run_dispose
+G_OBJECT_WARN_INVALID_PROPERTY_ID
+
+<SUBSECTION Standard>
+G_INITIALLY_UNOWNED
+G_INITIALLY_UNOWNED_CLASS
+G_INITIALLY_UNOWNED_GET_CLASS
+G_IS_INITIALLY_UNOWNED
+G_IS_INITIALLY_UNOWNED_CLASS
+
+<SUBSECTION Private>
+G_OBJECT_WARN_INVALID_PSPEC
+g_initially_unowned_get_type
+g_object_compat_control
+g_object_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Enumeration and Flag Types</TITLE>
+<FILE>enumerations_flags</FILE>
+GEnumClass
+GFlagsClass
+G_ENUM_CLASS_TYPE
+G_ENUM_CLASS_TYPE_NAME
+G_TYPE_IS_ENUM
+G_ENUM_CLASS
+G_IS_ENUM_CLASS
+G_TYPE_IS_FLAGS
+G_FLAGS_CLASS
+G_IS_FLAGS_CLASS
+G_FLAGS_CLASS_TYPE
+G_FLAGS_CLASS_TYPE_NAME
+GEnumValue
+GFlagsValue
+g_enum_get_value
+g_enum_get_value_by_name
+g_enum_get_value_by_nick
+g_flags_get_first_value
+g_flags_get_value_by_name
+g_flags_get_value_by_nick
+g_enum_register_static
+g_flags_register_static
+g_enum_complete_type_info
+g_flags_complete_type_info
+</SECTION>
+
+<SECTION>
+<FILE>gboxed</FILE>
+<TITLE>Boxed Types</TITLE>
+GBoxedCopyFunc
+GBoxedFreeFunc
+g_boxed_copy
+g_boxed_free
+g_boxed_type_register_static
+g_pointer_type_register_static
+
+<SUBSECTION>
+G_TYPE_HASH_TABLE
+G_TYPE_DATE
+G_TYPE_GSTRING
+G_TYPE_STRV
+G_TYPE_REGEX
+GStrv
+
+<SUBSECTION Standard>
+G_TYPE_IS_BOXED
+
+<SUBSECTION Private>
+g_gstring_get_type
+g_strv_get_type
+g_date_get_type
+g_hash_table_get_type
+g_regex_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Generic values</TITLE>
+<FILE>generic_values</FILE>
+G_VALUE_HOLDS
+G_VALUE_TYPE
+G_VALUE_TYPE_NAME
+G_TYPE_IS_VALUE
+G_TYPE_IS_VALUE_ABSTRACT
+G_IS_VALUE
+GValue
+G_TYPE_VALUE
+G_TYPE_VALUE_ARRAY
+g_value_init
+g_value_copy
+g_value_reset
+g_value_unset
+g_value_set_instance
+g_value_fits_pointer
+g_value_peek_pointer
+g_value_type_compatible
+g_value_type_transformable
+g_value_transform
+GValueTransform
+g_value_register_transform_func
+g_strdup_value_contents
+
+<SUBSECTION Private>
+G_VALUE_NOCOPY_CONTENTS
+g_value_get_type
+g_value_array_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Value arrays</TITLE>
+<FILE>value_arrays</FILE>
+GValueArray
+g_value_array_get_nth
+g_value_array_new
+g_value_array_copy
+g_value_array_free
+g_value_array_append
+g_value_array_prepend
+g_value_array_insert
+g_value_array_remove
+g_value_array_sort
+g_value_array_sort_with_data
+</SECTION>
+
+<SECTION>
+<TITLE>GParamSpec</TITLE>
+<FILE>gparamspec</FILE>
+G_TYPE_IS_PARAM
+G_PARAM_SPEC
+G_IS_PARAM_SPEC
+G_PARAM_SPEC_CLASS
+G_IS_PARAM_SPEC_CLASS
+G_PARAM_SPEC_GET_CLASS
+G_PARAM_SPEC_TYPE
+G_PARAM_SPEC_TYPE_NAME
+G_PARAM_SPEC_VALUE_TYPE
+GParamSpec
+GParamSpecClass
+GParamFlags
+G_PARAM_READWRITE
+G_PARAM_STATIC_STRINGS
+G_PARAM_MASK
+G_PARAM_USER_SHIFT
+g_param_spec_ref
+g_param_spec_unref
+g_param_spec_sink
+g_param_spec_ref_sink
+g_param_value_set_default
+g_param_value_defaults
+g_param_value_validate
+g_param_value_convert
+g_param_values_cmp
+g_param_spec_get_name
+g_param_spec_get_nick
+g_param_spec_get_blurb
+g_param_spec_get_qdata
+g_param_spec_set_qdata
+g_param_spec_set_qdata_full
+g_param_spec_steal_qdata
+g_param_spec_get_redirect_target
+g_param_spec_internal
+GParamSpecTypeInfo
+g_param_type_register_static
+GParamSpecPool
+g_param_spec_pool_new
+g_param_spec_pool_insert
+g_param_spec_pool_remove
+g_param_spec_pool_lookup
+g_param_spec_pool_list
+g_param_spec_pool_list_owned
+</SECTION>
+
+<SECTION>
+<TITLE>Standard Parameter and Value Types</TITLE>
+<FILE>param_value_types</FILE>
+
+<SUBSECTION gboolean>
+G_IS_PARAM_SPEC_BOOLEAN
+G_PARAM_SPEC_BOOLEAN
+G_VALUE_HOLDS_BOOLEAN
+G_TYPE_PARAM_BOOLEAN
+GParamSpecBoolean
+g_param_spec_boolean
+g_value_set_boolean
+g_value_get_boolean
+
+<SUBSECTION gchar>
+G_IS_PARAM_SPEC_CHAR
+G_PARAM_SPEC_CHAR
+G_VALUE_HOLDS_CHAR
+G_TYPE_PARAM_CHAR
+GParamSpecChar
+g_param_spec_char
+g_value_set_char
+g_value_get_char
+
+<SUBSECTION guchar>
+G_IS_PARAM_SPEC_UCHAR
+G_PARAM_SPEC_UCHAR
+G_VALUE_HOLDS_UCHAR
+G_TYPE_PARAM_UCHAR
+GParamSpecUChar
+g_param_spec_uchar
+g_value_set_uchar
+g_value_get_uchar
+
+<SUBSECTION gint>
+G_IS_PARAM_SPEC_INT
+G_PARAM_SPEC_INT
+G_VALUE_HOLDS_INT  
+G_TYPE_PARAM_INT
+GParamSpecInt
+g_param_spec_int
+g_value_set_int
+g_value_get_int
+
+<SUBSECTION guint>
+G_IS_PARAM_SPEC_UINT
+G_PARAM_SPEC_UINT
+G_VALUE_HOLDS_UINT  
+G_TYPE_PARAM_UINT
+GParamSpecUInt
+g_param_spec_uint
+g_value_set_uint
+g_value_get_uint
+
+<SUBSECTION glong>
+G_IS_PARAM_SPEC_LONG
+G_PARAM_SPEC_LONG
+G_VALUE_HOLDS_LONG 
+G_TYPE_PARAM_LONG
+GParamSpecLong
+g_param_spec_long
+g_value_set_long
+g_value_get_long
+
+<SUBSECTION gulong>
+G_IS_PARAM_SPEC_ULONG
+G_PARAM_SPEC_ULONG
+G_VALUE_HOLDS_ULONG 
+G_TYPE_PARAM_ULONG
+GParamSpecULong
+g_param_spec_ulong
+g_value_set_ulong
+g_value_get_ulong
+
+<SUBSECTION gint64>
+G_IS_PARAM_SPEC_INT64
+G_PARAM_SPEC_INT64
+G_VALUE_HOLDS_INT64
+G_TYPE_PARAM_INT64
+GParamSpecInt64
+g_param_spec_int64
+g_value_set_int64
+g_value_get_int64
+
+<SUBSECTION guint64>
+G_IS_PARAM_SPEC_UINT64
+G_PARAM_SPEC_UINT64
+G_VALUE_HOLDS_UINT64
+G_TYPE_PARAM_UINT64
+GParamSpecUInt64
+g_param_spec_uint64
+g_value_set_uint64
+g_value_get_uint64
+
+<SUBSECTION gfloat>
+G_IS_PARAM_SPEC_FLOAT
+G_PARAM_SPEC_FLOAT
+G_VALUE_HOLDS_FLOAT
+G_TYPE_PARAM_FLOAT
+GParamSpecFloat
+g_param_spec_float
+g_value_set_float
+g_value_get_float
+
+<SUBSECTION gdouble>
+G_IS_PARAM_SPEC_DOUBLE
+G_PARAM_SPEC_DOUBLE
+G_VALUE_HOLDS_DOUBLE
+G_TYPE_PARAM_DOUBLE
+GParamSpecDouble
+g_param_spec_double
+g_value_set_double
+g_value_get_double
+
+<SUBSECTION GEnum>
+G_IS_PARAM_SPEC_ENUM
+G_PARAM_SPEC_ENUM
+G_VALUE_HOLDS_ENUM
+G_TYPE_PARAM_ENUM
+GParamSpecEnum
+g_param_spec_enum
+g_value_set_enum
+g_value_get_enum
+
+<SUBSECTION GFLags>
+G_IS_PARAM_SPEC_FLAGS
+G_PARAM_SPEC_FLAGS
+G_VALUE_HOLDS_FLAGS
+G_TYPE_PARAM_FLAGS
+GParamSpecFlags
+g_param_spec_flags
+g_value_set_flags
+g_value_get_flags
+
+<SUBSECTION gchararray>
+G_IS_PARAM_SPEC_STRING
+G_PARAM_SPEC_STRING
+G_VALUE_HOLDS_STRING
+G_TYPE_PARAM_STRING
+GParamSpecString
+gchararray
+g_param_spec_string
+g_value_set_string
+g_value_set_static_string
+g_value_take_string
+g_value_set_string_take_ownership
+g_value_get_string
+g_value_dup_string
+
+<SUBSECTION GParamSpec>
+G_IS_PARAM_SPEC_PARAM
+G_PARAM_SPEC_PARAM
+G_VALUE_HOLDS_PARAM
+G_TYPE_PARAM_PARAM
+GParamSpecParam
+g_param_spec_param
+g_value_set_param
+g_value_take_param
+g_value_set_param_take_ownership
+g_value_get_param
+g_value_dup_param
+
+<SUBSECTION GBoxed>
+G_IS_PARAM_SPEC_BOXED
+G_PARAM_SPEC_BOXED
+G_VALUE_HOLDS_BOXED
+G_TYPE_PARAM_BOXED
+GParamSpecBoxed
+g_param_spec_boxed
+g_value_set_boxed
+g_value_set_static_boxed
+g_value_take_boxed
+g_value_set_boxed_take_ownership
+g_value_get_boxed
+g_value_dup_boxed
+
+<SUBSECTION gpointer>
+G_IS_PARAM_SPEC_POINTER
+G_PARAM_SPEC_POINTER
+G_VALUE_HOLDS_POINTER
+G_TYPE_PARAM_POINTER
+GParamSpecPointer
+g_param_spec_pointer
+g_value_set_pointer
+g_value_get_pointer
+
+<SUBSECTION GObject>
+G_IS_PARAM_SPEC_OBJECT
+G_PARAM_SPEC_OBJECT
+G_VALUE_HOLDS_OBJECT
+G_TYPE_PARAM_OBJECT
+GParamSpecObject
+g_param_spec_object
+g_value_set_object
+g_value_take_object
+g_value_set_object_take_ownership
+g_value_get_object
+g_value_dup_object
+
+<SUBSECTION gunichar>
+G_IS_PARAM_SPEC_UNICHAR
+G_PARAM_SPEC_UNICHAR
+G_TYPE_PARAM_UNICHAR
+GParamSpecUnichar
+g_param_spec_unichar
+
+<SUBSECTION GValueArray>
+G_IS_PARAM_SPEC_VALUE_ARRAY
+G_PARAM_SPEC_VALUE_ARRAY
+G_TYPE_PARAM_VALUE_ARRAY
+GParamSpecValueArray
+g_param_spec_value_array
+
+<SUBSECTION Override>
+G_IS_PARAM_SPEC_OVERRIDE
+G_PARAM_SPEC_OVERRIDE
+G_TYPE_PARAM_OVERRIDE
+GParamSpecOverride
+g_param_spec_override
+
+<SUBSECTION GType>
+G_IS_PARAM_SPEC_GTYPE
+G_PARAM_SPEC_GTYPE
+G_VALUE_HOLDS_GTYPE
+G_TYPE_PARAM_GTYPE
+GParamSpecGType
+g_param_spec_gtype
+g_value_get_gtype
+g_value_set_gtype
+
+<SUBSECTION Private>
+g_value_set_instance
+g_param_spec_types
+</SECTION>
+
+<SECTION>
+<TITLE>Varargs Value Collection</TITLE>
+<FILE>value_collection</FILE>
+<INCLUDE>glib-object.h,gobject/gvaluecollector.h</INCLUDE>
+GTypeCValue
+G_VALUE_COLLECT
+G_VALUE_LCOPY
+G_VALUE_COLLECT_FORMAT_MAX_LENGTH
+</SECTION>
+
+<SECTION>
+<TITLE>Signals</TITLE>
+<FILE>signals</FILE>
+GSignalInvocationHint
+GSignalAccumulator
+GSignalCMarshaller
+GSignalEmissionHook
+GSignalFlags
+GSignalMatchType
+GSignalQuery
+G_SIGNAL_TYPE_STATIC_SCOPE
+G_SIGNAL_MATCH_MASK
+G_SIGNAL_FLAGS_MASK
+g_signal_new
+g_signal_newv
+g_signal_new_valist
+g_signal_query
+g_signal_lookup
+g_signal_name
+g_signal_list_ids
+g_signal_emit
+g_signal_emit_by_name
+g_signal_emitv
+g_signal_emit_valist
+g_signal_connect
+g_signal_connect_after
+g_signal_connect_swapped
+g_signal_connect_object
+GConnectFlags
+g_signal_connect_data
+g_signal_connect_closure
+g_signal_connect_closure_by_id
+g_signal_handler_block
+g_signal_handler_unblock
+g_signal_handler_disconnect
+g_signal_handler_find
+g_signal_handlers_block_matched
+g_signal_handlers_unblock_matched
+g_signal_handlers_disconnect_matched
+g_signal_handler_is_connected
+g_signal_handlers_block_by_func
+g_signal_handlers_unblock_by_func
+g_signal_handlers_disconnect_by_func
+g_signal_has_handler_pending
+g_signal_stop_emission
+g_signal_stop_emission_by_name
+g_signal_override_class_closure
+g_signal_chain_from_overridden
+g_signal_new_class_handler
+g_signal_override_class_handler
+g_signal_chain_from_overridden_handler
+g_signal_add_emission_hook
+g_signal_remove_emission_hook
+g_signal_parse_name
+g_signal_get_invocation_hint
+g_signal_type_cclosure_new
+g_signal_accumulator_true_handled
+<SUBSECTION Private>
+g_signal_handlers_destroy
+</SECTION>
+
+<SECTION>
+<FILE>gclosure</FILE>
+<TITLE>Closures</TITLE>
+G_CLOSURE_NEEDS_MARSHAL
+G_CLOSURE_N_NOTIFIERS
+G_CCLOSURE_SWAP_DATA
+G_CALLBACK
+GCallback
+GClosure
+G_TYPE_CLOSURE
+GCClosure
+GClosureMarshal
+GClosureNotify
+g_cclosure_new
+g_cclosure_new_swap
+g_cclosure_new_object
+g_cclosure_new_object_swap
+g_closure_new_object
+g_closure_ref
+g_closure_sink
+g_closure_unref
+g_closure_invoke
+g_closure_invalidate
+g_closure_add_finalize_notifier
+g_closure_add_invalidate_notifier
+g_closure_remove_finalize_notifier
+g_closure_remove_invalidate_notifier
+g_closure_new_simple
+g_closure_set_marshal
+g_closure_add_marshal_guards
+g_closure_set_meta_marshal
+g_source_set_closure
+G_TYPE_IO_CHANNEL
+G_TYPE_IO_CONDITION
+
+<SUBSECTION>
+g_cclosure_marshal_VOID__VOID
+g_cclosure_marshal_VOID__BOOLEAN
+g_cclosure_marshal_VOID__CHAR
+g_cclosure_marshal_VOID__UCHAR
+g_cclosure_marshal_VOID__INT
+g_cclosure_marshal_VOID__UINT
+g_cclosure_marshal_VOID__LONG
+g_cclosure_marshal_VOID__ULONG
+g_cclosure_marshal_VOID__ENUM
+g_cclosure_marshal_VOID__FLAGS
+g_cclosure_marshal_VOID__FLOAT
+g_cclosure_marshal_VOID__DOUBLE
+g_cclosure_marshal_VOID__STRING
+g_cclosure_marshal_VOID__PARAM
+g_cclosure_marshal_VOID__BOXED
+g_cclosure_marshal_VOID__POINTER
+g_cclosure_marshal_VOID__OBJECT
+g_cclosure_marshal_STRING__OBJECT_POINTER
+g_cclosure_marshal_VOID__UINT_POINTER
+g_cclosure_marshal_BOOLEAN__FLAGS
+g_cclosure_marshal_BOOL__FLAGS
+
+<SUBSECTION Private>
+GClosureNotifyData
+g_closure_get_type
+g_io_channel_get_type
+g_io_condition_get_type
+</SECTION>
diff --git a/docs/reference/gobject/gobject.cI b/docs/reference/gobject/gobject.cI
new file mode 100644
index 0000000..2976940
--- /dev/null
+++ b/docs/reference/gobject/gobject.cI
@@ -0,0 +1,11 @@
+/*
+ * This is a hack to work around a limitation of gtkdoc-scan: it insists
+ * on putting () behind every symbol listed in gobject.types. Thus we
+ * can't put G_TYPE_OBJECT there, but have to sneak a g_object_get_type()
+ * function in the generated source via an #include.
+ */
+GType 
+g_object_get_type (void)
+{
+  return G_TYPE_OBJECT;
+}
diff --git a/docs/reference/gobject/gobject.types b/docs/reference/gobject/gobject.types
new file mode 100644
index 0000000..b8d745f
--- /dev/null
+++ b/docs/reference/gobject/gobject.types
@@ -0,0 +1,6 @@
+#include <glib/glib-object.h>
+#include "gobject.cI"
+
+g_object_get_type
+g_type_module_get_type
+g_type_plugin_get_type
diff --git a/docs/reference/gobject/images/glue.png b/docs/reference/gobject/images/glue.png
new file mode 100644
index 0000000..f5f3aab
--- /dev/null
+++ b/docs/reference/gobject/images/glue.png
Binary files differ
diff --git a/docs/reference/gobject/tmpl/.gitignore b/docs/reference/gobject/tmpl/.gitignore
new file mode 100644
index 0000000..7fccc28
--- /dev/null
+++ b/docs/reference/gobject/tmpl/.gitignore
@@ -0,0 +1,13 @@
+enumerations_flags.sgml
+gboxed.sgml
+gclosure.sgml
+generic_values.sgml
+gparamspec.sgml
+gtype.sgml
+gtypemodule.sgml
+gtypeplugin.sgml
+objects.sgml
+param_value_types.sgml
+signals.sgml
+value_arrays.sgml
+value_collection.sgml
diff --git a/docs/reference/gobject/tmpl/gobject-unused.sgml b/docs/reference/gobject/tmpl/gobject-unused.sgml
new file mode 100644
index 0000000..48f8a2e
--- /dev/null
+++ b/docs/reference/gobject/tmpl/gobject-unused.sgml
@@ -0,0 +1,87 @@
+<!-- ##### ENUM GTypeFundamentals ##### -->
+<para>
+The predefined identifiers of the reserved fundamental types.
+</para>
+
+@G_TYPE_INVALID: 		Usually a return value indicating an error.
+@G_TYPE_NONE: 			A synonym for the "void" type in C.
+@G_TYPE_INTERFACE: 		Root type of all interface types.
+@G_TYPE_CHAR: 			Identifier for the built-in type "gchar".
+@G_TYPE_UCHAR: 			Identifier for the built-in type "guchar".
+@G_TYPE_BOOLEAN: 		Identifier for the built-in type "gboolean".
+@G_TYPE_INT: 			Identifier for the built-in type "gint".
+@G_TYPE_UINT: 			Identifier for the built-in type "guint".
+@G_TYPE_LONG: 			Identifier for the built-in type "glong".
+@G_TYPE_ULONG: 			Identifier for the built-in type "gulong".
+@G_TYPE_INT64: 
+@G_TYPE_UINT64: 
+@G_TYPE_ENUM: 			Identifier for the "#GEnum" type.
+@G_TYPE_FLAGS: 			Identifier for the "#GFlags" type.
+@G_TYPE_FLOAT: 			Identifier for the built-in type "gfloat".
+@G_TYPE_DOUBLE: 		Identifier for the built-in type "gdouble".
+@G_TYPE_STRING: 		Identifier for a pointer to a null-terminated string "gchar*".
+@G_TYPE_POINTER: 		Identifier for anonymous pointers "void*".
+@G_TYPE_BOXED: 			Identifier for the "#GBoxed" type.
+@G_TYPE_PARAM: 			Identifier for the "#GParam" type.
+@G_TYPE_OBJECT: 		Identifier for the "#GObject" type.
+@G_TYPE_RESERVED_BSE_FIRST: 	First fundamental type ID reserved for BSE.
+@G_TYPE_RESERVED_BSE_LAST: 	Last fundamental type ID reserved for BSE.
+@G_TYPE_RESERVED_LAST_FUNDAMENTAL: 
+@G_TYPE_CONSTANT_TYPES: 
+@G_TYPE_CLOSURE: 
+@G_TYPE_VALUE: 
+@G_TYPE_VALUE_ARRAY: 
+@G_TYPE_GSTRING: 
+@G_TYPE_PARAM_CHAR: 
+@G_TYPE_PARAM_UCHAR: 
+@G_TYPE_PARAM_BOOLEAN: 
+@G_TYPE_PARAM_INT: 
+@G_TYPE_PARAM_UINT: 
+@G_TYPE_PARAM_LONG: 
+@G_TYPE_PARAM_ULONG: 
+@G_TYPE_PARAM_INT64: 
+@G_TYPE_PARAM_UINT64: 
+@G_TYPE_PARAM_UNICHAR: 
+@G_TYPE_PARAM_ENUM: 
+@G_TYPE_PARAM_FLAGS: 
+@G_TYPE_PARAM_FLOAT: 
+@G_TYPE_PARAM_DOUBLE: 
+@G_TYPE_PARAM_STRING: 
+@G_TYPE_PARAM_PARAM: 
+@G_TYPE_PARAM_BOXED: 
+@G_TYPE_PARAM_POINTER: 
+@G_TYPE_PARAM_VALUE_ARRAY: 
+@G_TYPE_PARAM_CLOSURE: 
+@G_TYPE_PARAM_OBJECT: 
+
+<!-- ##### FUNCTION g_type_check_flags ##### -->
+<para>
+Determines whether a given set of #GTypeFlags and #GTypeFundamentalFlags
+are set for @type.
+</para>
+
+@type: 	  The type to check for flags.
+@flags:   Bitwise combination of #GTypeFlags and #GTypeFundamentalFlags.
+@Returns: #TRUE if all @flags are set for @type, #FALSE otherwise.
+
+<!-- ##### FUNCTION g_type_instance_is_a ##### -->
+<para>
+Determines if @instance adheres to the interface exported
+by @iface_type. @iface_type is either a type that @instance
+is derived from, or an interface type that is supported by
+the anchestry of @instance.
+</para>
+
+@instance: 	A valid #GTypeInstance structure.
+@iface_type: 	A #GType value.
+@Returns: 	#TRUE if @instance conforms to @iface_type, #FALSE otherwise.
+
+<!-- ##### FUNCTION g_type_value_is_a ##### -->
+<para>
+Determines if @value is a #GValue whose type conforms to @type.
+</para>
+
+@value: 	  A valid #GValue structure.
+@type:    A #GType value.
+@Returns: #TRUE if @value is a #GValue of @type or #FALSE if not.
+
diff --git a/docs/reference/gobject/tut_gobject.xml b/docs/reference/gobject/tut_gobject.xml
new file mode 100644
index 0000000..75ad2ea
--- /dev/null
+++ b/docs/reference/gobject/tut_gobject.xml
@@ -0,0 +1,747 @@
+<?xml version='1.0' encoding="ISO-8859-1"?>
+<chapter id="chapter-gobject">
+  <title>The GObject base class</title>
+
+  <para>
+    The two previous chapters discussed the details of GLib's Dynamic Type System
+    and its signal control system. The GObject library also contains an implementation
+    for a base fundamental type named <type><link linkend="GObject">GObject</link></type>.
+  </para>
+
+  <para>
+    <type><link linkend="GObject">GObject</link></type> is a fundamental classed instantiable type. It implements:
+    <itemizedlist>
+      <listitem><para>Memory management with reference counting</para></listitem>
+      <listitem><para>Construction/Destruction of instances</para></listitem>
+      <listitem><para>Generic per-object properties with set/get function pairs</para></listitem>
+      <listitem><para>Easy use of signals</para></listitem>
+    </itemizedlist>
+    All the GNOME libraries which use the GLib type system (like GTK+ and GStreamer)
+    inherit from <type><link linkend="GObject">GObject</link></type> which is why it is important to understand
+    the details of how it works.
+  </para>
+
+  <sect1 id="gobject-instantiation">
+    <title>Object instantiation</title>
+
+    <para>
+      The <function><link linkend="g-object-new">g_object_new</link></function>
+      family of functions can be used to instantiate any GType which inherits
+      from the GObject base type. All these functions make sure the class and
+      instance structures have been correctly initialized by GLib's type system
+      and then invoke at one point or another the constructor class method
+      which is used to:
+      <itemizedlist>
+        <listitem><para>
+            Allocate and clear memory through <function><link linkend="g-type-create-instance">g_type_create_instance</link></function>,
+          </para></listitem>
+        <listitem><para>
+            Initialize the object's instance with the construction properties.
+          </para></listitem>
+      </itemizedlist>
+     Although one can expect all class and instance members (except the fields
+     pointing to the parents) to be set to zero, some consider it good practice
+     to explicitly set them.
+    </para>
+
+    <para>
+      Objects which inherit from GObject are allowed to override this
+      constructor class method: they should however chain to their parent
+      constructor method before doing so:
+<programlisting>
+  GObject *(* constructor) (GType                  gtype,
+                            guint                  n_properties,
+                            GObjectConstructParam *properties);
+</programlisting>
+    </para>
+
+    <para>
+      The example below shows how <type>MamanBar</type> overrides the parent's constructor:
+<programlisting>
+#define MAMAN_TYPE_BAR                  (maman_bar_get_type ())
+#define MAMAN_BAR(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
+#define MAMAN_IS_BAR(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAR))
+#define MAMAN_BAR_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAR, MamanBarClass))
+#define MAMAN_IS_BAR_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAR))
+#define MAMAN_BAR_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAR, MamanBarClass))
+
+typedef struct _MamanBar        MamanBar;
+typedef struct _MamanBarClass   MamanBarClass;
+
+struct _MamanBar
+{
+  GObject parent_instance;
+
+  /* instance members */
+};
+
+struct _MamanBarClass
+{
+  GObjectClass parent_class;
+
+  /* class members */
+};
+
+/* will create maman_bar_get_type and set maman_bar_parent_class */
+G_DEFINE_TYPE (MamanBar, maman_bar, G_TYPE_OBJECT);
+
+static GObject *
+maman_bar_constructor (GType                  gtype,
+                       guint                  n_properties,
+                       GObjectConstructParam *properties)
+{
+  GObject *obj;
+
+  {
+    /* Always chain up to the parent constructor */
+    MamanBarClass *klass;
+    GObjectClass *parent_class;  
+    parent_class = G_OBJECT_CLASS (maman_bar_parent_class);
+    obj = parent_class-&gt;constructor (gtype, n_properties, properties);
+  }
+  
+  /* update the object state depending on constructor properties */
+
+  return obj;
+}
+
+static void
+maman_bar_class_init (MamanBarClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class-&gt;constructor = maman_bar_constructor;
+}
+
+static void
+maman_bar_init (MamanBar *self)
+{
+  /* initialize the object */
+}
+
+</programlisting>
+      If the user instantiates an object <type>MamanBar</type> with:
+<programlisting>
+MamanBar *bar = g_object_new (MAMAN_TYPE_BAR, NULL);
+</programlisting>        
+      If this is the first instantiation of such an object, the
+      <function>maman_bar_class_init</function> function will be invoked
+      after any <function>maman_bar_base_class_init</function> function.
+      This will make sure the class structure of this new object is
+      correctly initialized. Here, <function>maman_bar_class_init</function>
+      is expected to override the object's class methods and setup the
+      class' own methods. In the example above, the constructor method is
+      the only overridden method: it is set to
+      <function>maman_bar_constructor</function>.
+    </para>
+
+    <para>
+      Once <function><link linkend="g-object-new">g_object_new</link></function> has obtained a reference to an initialized
+      class structure, it invokes its constructor method to create an instance of the new 
+      object. Since it has just been overridden by <function>maman_bar_class_init</function> 
+      to <function>maman_bar_constructor</function>, the latter is called and, because it
+      was implemented correctly, it chains up to its parent's constructor. In
+      order to find the parent class and chain up to the parent class
+      constructor, we can use the <literal>maman_bar_parent_class</literal>
+      pointer that has been set up for us by the
+      <literal>G_DEFINE_TYPE</literal> macro.
+    </para>
+
+    <para>
+      Finally, at one point or another, <function>g_object_constructor</function> is invoked
+      by the last constructor in the chain. This function allocates the object's instance' buffer 
+      through <function><link linkend="g-type-create-instance">g_type_create_instance</link></function>
+      which means that the instance_init function is invoked at this point if one
+      was registered. After instance_init returns, the object is fully initialized and should be 
+      ready to answer any user-request. When <function><link linkend="g-type-create-instance">g_type_create_instance</link></function>
+      returns, <function>g_object_constructor</function> sets the construction properties
+      (i.e. the properties which were given to <function><link linkend="g-object-new">g_object_new</link></function>) and returns
+      to the user's constructor which is then allowed to do useful instance initialization...
+    </para>
+
+    <para>
+      The process described above might seem a bit complicated, but it can be
+      summarized easily by the table below which lists the functions invoked
+      by <function><link linkend="g-object-new">g_object_new</link></function>
+      and their order of invocation:
+    </para>
+
+    <para>
+      <table id="gobject-construction-table">
+        <title><function><link linkend="g-object-new">g_object_new</link></function></title>
+        <tgroup cols="3">
+          <colspec colwidth="*" colnum="1" align="left"/>
+          <colspec colwidth="*" colnum="2" align="left"/>
+          <colspec colwidth="8*" colnum="3" align="left"/>
+
+          <thead>
+            <row>
+              <entry>Invocation time</entry>
+              <entry>Function Invoked</entry>
+              <entry>Function's parameters</entry>
+              <entry>Remark</entry>
+            </row>
+          </thead>
+          <tbody>
+            <row>
+              <entry morerows="3">First call to <function><link linkend="g-object-new">g_object_new</link></function> for target type</entry>
+              <entry>target type's base_init function</entry>
+              <entry>On the inheritance tree of classes from fundamental type to target type. 
+                base_init is invoked once for each class structure.</entry>
+              <entry>
+                I have no real idea on how this can be used. If you have a good real-life
+                example of how a class' base_init can be used, please, let me know.
+              </entry>
+            </row>
+            <row>
+              <!--entry>First call to <function><link linkend="g-object-new">g_object_new</link></function> for target type</entry-->
+              <entry>target type's class_init function</entry>
+              <entry>On target type's class structure</entry>
+              <entry>
+                Here, you should make sure to initialize or override class methods (that is,
+                assign to each class' method its function pointer) and create the signals and
+                the properties associated to your object.
+              </entry>
+            </row>
+            <row>
+              <!--entry>First call to <function><link linkend="g-object-new">g_object_new</link></function> for target type</entry-->
+              <entry>interface' base_init function</entry>
+              <entry>On interface' vtable</entry>
+              <entry></entry>
+            </row>
+            <row>
+              <!--entry>First call to <function><link linkend="g-object-new">g_object_new</link></function> for target type</entry-->
+              <entry>interface' interface_init function</entry>
+              <entry>On interface' vtable</entry>
+              <entry></entry>
+            </row>
+            <row>
+              <entry morerows="1">Each call to <function><link linkend="g-object-new">g_object_new</link></function> for target type</entry>
+              <entry>target type's class constructor method: GObjectClass->constructor</entry>
+              <entry>On object's instance</entry>
+              <entry>
+                If you need to complete the object initialization after all the construction properties
+                are set, override the constructor method and make sure to chain up to the object's
+                parent class before doing your own initialization.
+                In doubt, do not override the constructor method.
+              </entry>
+            </row>
+            <row>
+              <!--entry>Each call to <function><link linkend="g-object-new">g_object_new</link></function> for target type</entry-->
+              <entry>type's instance_init function</entry>
+              <entry>On the inheritance tree of classes from fundamental type to target type. 
+              the instance_init provided for each type is invoked once for each instance 
+              structure.</entry>
+              <entry>
+                Provide an instance_init function to initialize your object before its construction
+                properties are set. This is the preferred way to initialize a GObject instance.
+                This function is equivalent to C++ constructors.
+              </entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </para>
+
+    <para>
+      Readers should feel concerned about one little twist in the order in
+      which functions are invoked: while, technically, the class' constructor
+      method is called <emphasis>before</emphasis> the GType's instance_init
+      function (since <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> which calls instance_init is called by
+      <function>g_object_constructor</function> which is the top-level class 
+      constructor method and to which users are expected to chain to), the
+      user's code which runs in a user-provided constructor will always
+      run <emphasis>after</emphasis> GType's instance_init function since the
+      user-provided constructor <emphasis>must</emphasis> (you've been warned)
+      chain up <emphasis>before</emphasis> doing anything useful.
+    </para>
+  </sect1>
+
+  <sect1 id="gobject-memory">
+    <title>Object memory management</title>
+
+    <para>
+      The memory-management API for GObjects is a bit complicated but the idea behind it
+      is pretty simple: the goal is to provide a flexible model based on reference counting
+      which can be integrated in applications which use or require different memory management
+      models (such as garbage collection, aso...). The methods which are used to
+      manipulate this reference count are described below.
+<programlisting>
+/*
+  Refcounting
+*/
+gpointer    g_object_ref                      (gpointer        object);
+void        g_object_unref                    (gpointer        object);
+
+/*
+ * Weak References
+ */
+typedef void (*GWeakNotify) (gpointer  data,
+                             GObject  *where_the_object_was);
+
+void g_object_weak_ref            (GObject     *object,
+                                   GWeakNotify  notify,
+                                   gpointer     data);
+void g_object_weak_unref          (GObject     *object,
+                                   GWeakNotify  notify,
+                                   gpointer     data);
+void g_object_add_weak_pointer    (GObject     *object, 
+                                   gpointer    *weak_pointer_location);
+void g_object_remove_weak_pointer (GObject     *object, 
+                                   gpointer    *weak_pointer_location);
+/*
+ * Cycle handling
+ */
+void g_object_run_dispose         (GObject     *object);
+</programlisting>
+    </para>
+
+    <sect2 id="gobject-memory-refcount">
+      <title>Reference count</title>
+
+      <para>
+        The functions <function><link linkend="g-object-ref">g_object_ref</link></function>/<function><link linkend="g-object-unref">g_object_unref</link></function> respectively 
+        increase and decrease the reference count.These functions are thread-safe as of GLib 2.8.
+        The reference count is, unsurprisingly, initialized to one by 
+        <function><link linkend="g-object-new">g_object_new</link></function> which means that the caller
+        is currently the sole owner of the newly-created reference.
+        When the reference count reaches zero, that is, 
+        when <function><link linkend="g-object-unref">g_object_unref</link></function> is called by the last client holding
+        a reference to the object, the <emphasis>dispose</emphasis> and the 
+        <emphasis>finalize</emphasis> class methods are invoked.
+      </para>
+      <para>
+        Finally, after <emphasis>finalize</emphasis> is invoked, 
+        <function><link linkend="g-type-free-instance">g_type_free_instance</link></function> is called to free the object instance.
+        Depending on the memory allocation policy decided when the type was registered (through
+        one of the <function>g_type_register_*</function> functions), the object's instance 
+        memory will be freed or returned to the object pool for this type.
+        Once the object has been freed, if it was the last instance of the type, the type's class
+        will be destroyed as described in <xref linkend="gtype-instantiable-classed"/> and 
+          <xref linkend="gtype-non-instantiable-classed"/>.
+      </para>
+
+      <para>
+        The table below summarizes the destruction process of a GObject:
+        <table id="gobject-destruction-table">
+          <title><function><link linkend="g-object-unref">g_object_unref</link></function></title>
+          <tgroup cols="3">
+            <colspec colwidth="*" colnum="1" align="left"/>
+            <colspec colwidth="*" colnum="2" align="left"/>
+            <colspec colwidth="8*" colnum="3" align="left"/>
+
+            <thead>
+              <row>
+                <entry>Invocation time</entry>
+                <entry>Function Invoked</entry>
+                <entry>Function's parameters</entry>
+                <entry>Remark</entry>
+              </row>
+            </thead>
+            <tbody>
+              <row>
+                <entry morerows="1">Last call to <function><link linkend="g-object-unref">g_object_unref</link></function> for an instance
+                  of target type
+                 </entry>
+                <entry>target type's dispose class function</entry>
+                <entry>GObject instance</entry>
+                <entry>
+                  When dispose ends, the object should not hold any reference to any other
+                  member object. The object is also expected to be able to answer client
+                  method invocations (with possibly an error code but no memory violation)
+                  until finalize is executed. dispose can be executed more than once.
+                dispose should chain up to its parent implementation just before returning
+                to the caller.
+                </entry>
+              </row>
+              <row>
+                <!--entry>Last call to <function><link linkend="g-object-unref">g_object_unref</link></function> for an instance
+                  of target type
+                </entry-->
+                <entry>target type's finalize class function</entry>
+                <entry>GObject instance</entry>
+                <entry>
+                  Finalize is expected to complete the destruction process initiated by
+                  dispose. It should complete the object's destruction. finalize will be
+                  executed only once.
+                finalize should chain up to its parent implementation just before returning
+                to the caller.
+                  The reason why the destruction process is split is two different phases is
+                  explained in <xref linkend="gobject-memory-cycles"/>.
+                </entry>
+              </row>
+              <row>
+                <entry morerows="3">Last call to <function><link linkend="g-object-unref">g_object_unref</link></function> for the last
+                  instance of target type
+                 </entry>
+                <entry>interface' interface_finalize function</entry>
+                <entry>On interface' vtable</entry>
+                <entry>Never used in practice. Unlikely you will need it.</entry>
+              </row>
+              <row>
+                <!--entry>Last call to <function><link linkend="g-object-unref">g_object_unref</link></function>for the last
+                  instance of target type
+                 </entry-->
+                <entry>interface' base_finalize function</entry>
+                <entry>On interface' vtable</entry>
+                <entry>Never used in practice. Unlikely you will need it.</entry>
+              </row>
+              <row>
+                <!--entry>Last call to <function><link linkend="g-object-unref">g_object_unref</link></function> for the last
+                  instance of target type
+                 </entry-->
+                <entry>target type's class_finalize function</entry>
+                <entry>On target type's class structure</entry>
+                <entry>Never used in practice. Unlikely you will need it.</entry>
+              </row>
+              <row>
+                <!--entry>Last call to <function><link linkend="g-object-unref">g_object_unref</link></function> for the last
+                  instance of target type
+                 </entry-->
+                <entry>type's base_finalize function</entry>
+                <entry>On the inheritance tree of classes from fundamental type to target type.
+                  base_init is invoked once for each class structure.</entry>
+                <entry>Never used in practice. Unlikely you will need it.</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </table>                
+      </para>
+
+    </sect2>
+
+    <sect2 id="gobject-memory-weakref">
+      <title>Weak References</title>
+    
+      <para>
+      Weak References are used to monitor object finalization: 
+      <function><link linkend="g-object-weak-ref">g_object_weak_ref</link></function> adds a monitoring callback which does
+      not hold a reference to the object but which is invoked when the object runs 
+      its dispose method. As such, each weak ref can be invoked more than once upon
+      object finalization (since dispose can run more than once during object 
+      finalization).
+      </para>
+
+      <para>
+        <function><link linkend="g-object-weak-unref">g_object_weak_unref</link></function> can be used to remove a monitoring
+        callback from the object. 
+      </para>
+  
+      <para>
+        Weak References are also used to implement <function><link linkend="g-object-add-weak-pointer">g_object_add_weak_pointer</link></function>
+        and <function><link linkend="g-object-remove-weak-pointer">g_object_remove_weak_pointer</link></function>. These functions add a weak reference
+        to the object they are applied to which makes sure to nullify the pointer given by the user
+        when object is finalized.
+      </para>
+  
+    </sect2>
+  
+    <sect2 id="gobject-memory-cycles">
+      <title>Reference counts and cycles</title>
+      
+      <para>
+        Note: the following section was inspired by James Henstridge. I guess this means that 
+        all praise and all curses will be directly forwarded to him.
+      </para>
+  
+      <para>
+        GObject's memory management model was designed to be easily integrated in existing code
+        using garbage collection. This is why the destruction process is split in two phases:
+        the first phase, executed in the dispose handler is supposed to release all references
+        to other member objects. The second phase, executed by the finalize handler is supposed
+        to complete the object's destruction process. Object methods should be able to run
+        without program error (that is, without segfault :) in-between the two phases.
+      </para>
+  
+      <para>
+        This two-step destruction process is very useful to break reference counting cycles.
+        While the detection of the cycles is up to the external code, once the cycles have been
+        detected, the external code can invoke <function><link linkend="g-object-dispose">g_object_dispose</link></function> which 
+        will indeed break any existing cycles since it will run the dispose handler associated
+        to the object and thus release all references to other objects.
+      </para>
+  
+      <para>
+        Attentive readers might now have understood one of the rules about the dispose handler
+        we stated a bit sooner: the dispose handler can be invoked multiple times. Let's say we
+        have a reference count cycle: object A references B which itself references object A.
+        Let's say we have detected the cycle and we want to destroy the two objects. One way to 
+        do this would be to invoke <function><link linkend="g-object-dispose">g_object_dispose</link></function> on one of the 
+        objects.
+      </para>
+  
+      <para>
+        If object A releases all its references to all objects, this means it releases its
+        reference to object B. If object B was not owned by anyone else, this is its last
+        reference count which means this last unref runs B's dispose handler which, in turn,
+        releases B's reference on object A. If this is A's last reference count, this last 
+        unref runs A's dispose handler which is running for the second time before
+        A's finalize handler is invoked !
+      </para>
+  
+      <para>
+        The above example, which might seem a bit contrived can really happen if your
+        GObject's are being handled by language bindings. I would thus suggest the rules stated above
+        for object destruction are closely followed. Otherwise, <emphasis>Bad Bad Things</emphasis> 
+        will happen.
+      </para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="gobject-properties">
+    <title>Object properties</title>
+  
+    <para>
+      One of GObject's nice features is its generic get/set mechanism for object
+      properties. When an object
+      is instantiated, the object's class_init handler should be used to register
+      the object's properties with <function><link linkend="g-object-class-install-property">g_object_class_install_property</link></function>
+      (implemented in <filename>gobject.c</filename>).
+    </para>
+  
+    <para>
+      The best way to understand how object properties work is by looking at a real example
+      on how it is used:
+<programlisting>
+/************************************************/
+/* Implementation                               */
+/************************************************/
+
+enum
+{
+  PROP_0,
+
+  PROP_MAMAN_NAME,
+  PROP_PAPA_NUMBER
+};
+
+static void
+maman_bar_set_property (GObject      *object,
+                        guint         property_id,
+                        const GValue *value,
+                        GParamSpec   *pspec)
+{
+  MamanBar *self = MAMAN_BAR (object);
+
+  switch (property_id)
+    {
+    case PROP_MAMAN_NAME:
+      g_free (self-&gt;priv-&gt;name);
+      self-&gt;priv-&gt;name = g_value_dup_string (value);
+      g_print ("maman: %s\n", self-&gt;priv-&gt;name);
+      break;
+
+    case PROP_PAPA_NUMBER:
+      self-&gt;priv-&gt;papa_number = g_value_get_uchar (value);
+      g_print ("papa: &percnt;u\n", self-&gt;priv-&gt;papa_number);
+      break;
+
+    default:
+      /* We don't have any other property... */
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+maman_bar_get_property (GObject    *object,
+                        guint       property_id,
+                        GValue     *value,
+                        GParamSpec *pspec)
+{
+  MamanBar *self = MAMAN_BAR (object);
+
+  switch (property_id)
+    {
+    case PROP_MAMAN_NAME:
+      g_value_set_string (value, self-&gt;priv-&gt;name);
+      break;
+
+    case PROP_PAPA_NUMBER:
+      g_value_set_uchar (value, self-&gt;priv-&gt;papa_number);
+      break;
+
+    default:
+      /* We don't have any other property... */
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+maman_bar_class_init (MamanBarClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GParamSpec *pspec;
+
+  gobject_class-&gt;set_property = maman_bar_set_property;
+  gobject_class-&gt;get_property = maman_bar_get_property;
+
+  pspec = g_param_spec_string ("maman-name",
+                               "Maman construct prop",
+                               "Set maman's name",
+                               "no-name-set" /* default value */,
+                               G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+  g_object_class_install_property (gobject_class,
+                                   PROP_MAMAN_NAME,
+                                   pspec);
+
+  pspec = g_param_spec_uchar ("papa-number",
+                              "Number of current Papa",
+                              "Set/Get papa's number",
+                              0  /* minimum value */,
+                              10 /* maximum value */,
+                              2  /* default value */,
+                              G_PARAM_READWRITE);
+  g_object_class_install_property (gobject_class,
+                                   PROP_PAPA_NUMBER,
+                                   pspec);
+}
+
+/************************************************/
+/* Use                                          */
+/************************************************/
+
+GObject *bar;
+GValue val = { 0, };
+
+bar = g_object_new (MAMAN_TYPE_SUBBAR, NULL);
+
+g_value_init (&amp;val, G_TYPE_CHAR);
+g_value_set_char (&amp;val, 11);
+
+g_object_set_property (G_OBJECT (bar), "papa-number", &amp;val);
+
+g_value_unset (&amp;val);
+</programlisting>
+      The client code just above looks simple but a lot of things happen under the hood:
+    </para>
+  
+    <para>
+      <function><link linkend="g-object-set-property">g_object_set_property</link></function> first ensures a property
+      with this name was registered in bar's class_init handler. If so, it calls
+      <function><link linkend="object-set-property">object_set_property</link></function> which first walks the class hierarchy,
+      from bottom, most derived type, to top, fundamental type to find the class
+      which registered that property. It then tries to convert the user-provided GValue
+      into a GValue whose type is that of the associated property.
+    </para>
+  
+    <para>
+      If the user provides a signed char GValue, as is shown
+      here, and if the object's property was registered as an unsigned int, 
+      <function><link linkend="g-value-transform">g_value_transform</link></function> will try to transform the input signed char into
+      an unsigned int. Of course, the success of the transformation depends on the availability
+      of the required transform function. In practice, there will almost always be a transformation
+      <footnote>
+        <para>Its behaviour might not be what you expect but it is up to you to actually avoid
+          relying on these transformations.
+        </para>
+      </footnote>
+      which matches and conversion will be carried out if needed.
+    </para>
+  
+    <para>
+      After transformation, the <type><link linkend="GValue">GValue</link></type> is validated by 
+      <function><link linkend="g-param-value-validate">g_param_value_validate</link></function> which makes sure the user's
+      data stored in the <type><link linkend="GValue">GValue</link></type> matches the characteristics specified by
+      the property's <type><link linkend="GParamSpec">GParamSpec</link></type>.  Here, the <type><link linkend="GParamSpec">GParamSpec</link></type> we 
+      provided in class_init has a validation function which makes sure that the GValue
+      contains a value which respects the minimum and maximum bounds of the 
+      <type><link linkend="GParamSpec">GParamSpec</link></type>. In the example above, the client's GValue does not
+      respect these constraints (it is set to 11, while the maximum is 10). As such, the
+      <function><link linkend="g-object-set-property">g_object_set_property</link></function> function will return with an error.
+    </para>
+  
+    <para>
+      If the user's GValue had been set to a valid value, <function><link linkend="g-object-set-property">g_object_set_property</link></function>
+      would have proceeded with calling the object's set_property class method. Here, since our
+      implementation of Foo did override this method, the code path would jump to
+      <function>foo_set_property</function> after having retrieved from the 
+      <type><link linkend="GParamSpec">GParamSpec</link></type> the <emphasis>param_id</emphasis>
+      <footnote>
+        <para>
+          It should be noted that the param_id used here need only to uniquely identify each 
+          <type><link linkend="GParamSpec">GParamSpec</link></type> within the <type><link linkend="FooClass">FooClass</link></type> such that the switch
+          used in the set and get methods actually works. Of course, this locally-unique 
+          integer is purely an optimization: it would have been possible to use a set of 
+          <emphasis>if (strcmp (a, b) == 0) {} else if (strcmp (a, b) == 0) {}</emphasis> statements.
+        </para>
+      </footnote>
+      which had been stored by
+      <function><link linkend="g-object-class-install-property">g_object_class_install_property</link></function>.
+    </para>
+  
+    <para>
+      Once the property has been set by the object's set_property class method, the code path
+      returns to <function><link linkend="g-object-set-property">g_object_set_property</link></function> which calls 
+      <function><link linkend="g-object-notify-queue-thaw">g_object_notify_queue_thaw</link></function>. This function makes sure that
+      the "notify" signal is emitted on the object's instance with the changed property as
+      parameter unless notifications were frozen by <function><link linkend="g-object-freeze-notify">g_object_freeze_notify</link></function>.
+    </para>
+  
+    <para>
+      <function><link linkend="g-object-thaw-notify">g_object_thaw_notify</link></function> can be used to re-enable notification of 
+      property modifications through the "notify" signal. It is important to remember that
+      even if properties are changed while property change notification is frozen, the "notify"
+      signal will be emitted once for each of these changed properties as soon as the property
+      change notification is thawed: no property change is lost for the "notify" signal. Signal
+      can only be delayed by the notification freezing mechanism.
+    </para>
+    
+    <para>
+      It sounds like a tedious task to set up GValues every time when one wants to modify a property.
+      In practice one will rarely do this. The functions <function><link linkend="g-object-set-property">g_object_set_property</link></function>
+      and <function><link linkend="g-object-get-property">g_object_get_property</link></function>
+      are meant to be used by language bindings. For application there is an easier way and
+      that is described next.
+    </para>
+
+    <sect2 id="gobject-multi-properties">
+      <title>Accessing multiple properties at once</title>
+  
+      <para>
+        It is interesting to note that the <function><link linkend="g-object-set">g_object_set</link></function> and 
+        <function><link linkend="g-object-set-valist">g_object_set_valist</link></function> (vararg version) functions can be used to set
+        multiple properties at once. The client code shown above can then be re-written as:
+<programlisting>
+MamanBar *foo;
+foo = /* */;
+g_object_set (G_OBJECT (foo),
+              "papa-number", 2, 
+              "maman-name", "test", 
+              NULL);
+</programlisting>
+        This saves us from managing the GValues that we were needing to handle when using
+        <function><link linkend="g-object-set-property">g_object_set_property</link></function>.
+        The code above will trigger one notify signal emission for each property modified.
+      </para>
+    
+      <para>
+        Of course, the _get versions are also available: <function><link linkend="g-object-get">g_object_get</link></function>
+        and <function><link linkend="g-object-get-valist">g_object_get_valist</link></function> (vararg version) can be used to get numerous
+        properties at once.
+      </para>
+      
+      <para>
+        These high level functions have one drawback - they don't provide a return result.
+        One should pay attention to the argument types and ranges when using them.
+        A known source of errors is to e.g. pass a gfloat instead of a gdouble and thus
+        shifting all subsequent parameters by four bytes. Also forgetting the terminating
+        NULL will lead to unexpected behaviour.
+      </para>
+    
+      <para>
+        Really attentive readers now understand how <function><link linkend="g-object-new">g_object_new</link></function>,
+        <function><link linkend="g-object-newv">g_object_newv</link></function> and <function><link linkend="g-object-new-valist">g_object_new_valist</link></function> 
+        work: they parse the user-provided variable number of parameters and invoke
+        <function><link linkend="g-object-set">g_object_set</link></function> on the parameters only after the object has been successfully constructed.
+        Of course, the "notify" signal will be emitted for each property set.
+      </para>
+    
+    </sect2>
+
+<!-- @todo tell here about how to pass use handle properties in derived classes -->
+
+  </sect1>
+
+</chapter>
diff --git a/docs/reference/gobject/tut_gsignal.xml b/docs/reference/gobject/tut_gsignal.xml
new file mode 100644
index 0000000..74ccd98
--- /dev/null
+++ b/docs/reference/gobject/tut_gsignal.xml
@@ -0,0 +1,520 @@
+<?xml version='1.0' encoding="ISO-8859-1"?>
+<chapter id="chapter-signal">
+  <title>The GObject messaging system</title>
+
+  <sect1 id="closure">
+    <title>Closures</title>
+
+    <para>
+      Closures are central to the concept of asynchronous signal delivery
+      which is widely used throughout GTK+ and GNOME applications. A closure is an 
+      abstraction, a generic representation of a callback. It is a small structure
+      which contains three objects:
+      <itemizedlist>
+        <listitem><para>a function pointer (the callback itself) whose prototype looks like:
+<programlisting>
+return_type function_callback (... , gpointer user_data);
+</programlisting>
+        </para></listitem>
+        <listitem><para>
+           the user_data pointer which is passed to the callback upon invocation of the closure
+          </para></listitem>
+        <listitem><para>
+           a function pointer which represents the destructor of the closure: whenever the
+           closure's refcount reaches zero, this function will be called before the closure
+           structure is freed.
+          </para></listitem>
+      </itemizedlist>
+    </para>
+
+    <para>
+      The <type><link linkend="GClosure">GClosure</link></type> structure represents the common functionality of all
+      closure implementations: there exists a different Closure implementation for
+      each separate runtime which wants to use the GObject type system.
+      <footnote><para>
+        In practice, closures sit at the boundary of language runtimes: if you are
+        writing Python code and one of your Python callbacks receives a signal from
+        a GTK+ widget, the C code in GTK+ needs to execute your Python
+        code. The closure invoked by the GTK+ object invokes the Python callback:
+        it behaves as a normal C object for GTK+ and as a normal Python object for
+        Python code.
+      </para></footnote>
+      The GObject library provides a simple <type><link linkend="GCClosure">GCClosure</link></type> type which
+      is a specific implementation of closures to be used with C/C++ callbacks.
+    </para>
+    <para>
+      A <type><link linkend="GClosure">GClosure</link></type> provides simple services:
+      <itemizedlist>
+        <listitem><para>
+          Invocation (<function><link linkend="g-closure-invoke">g_closure_invoke</link></function>): this is what closures 
+          were created for: they hide the details of callback invocation from the
+          callback invoker.</para>
+        </listitem>
+        <listitem><para>
+          Notification: the closure notifies listeners of certain events such as
+          closure invocation, closure invalidation and closure finalization. Listeners
+          can be registered with <function><link linkend="g-closure-add-finalize-notifier">g_closure_add_finalize_notifier</link></function>
+          (finalization notification), <function><link linkend="g-closure-add-invalidate-notifier">g_closure_add_invalidate_notifier</link></function> 
+          (invalidation notification) and 
+          <function><link linkend="g-closure-add-marshal-guards">g_closure_add_marshal_guards</link></function> (invocation notification).
+          There exist symmetric deregistration functions for finalization and invalidation
+          events (<function><link linkend="g-closure-remove-finalize-notifier">g_closure_remove_finalize_notifier</link></function> and
+          <function><link linkend="g-closure-remove-invalidate-notifier">g_closure_remove_invalidate_notifier</link></function>) but not for the invocation 
+          process.
+          <footnote><para>
+            Closures are reference counted and notify listeners of their destruction in a two-stage
+            process: the invalidation notifiers are invoked before the finalization notifiers.
+          </para></footnote></para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+    <sect2>
+      <title>C Closures</title>
+
+      <para>
+        If you are using C or C++
+        to connect a callback to a given event, you will either use simple <type><link linkend="GCClosure">GCClosure</link></type>s
+        which have a pretty minimal API or the even simpler <function><link linkend="g-signal-connect">g_signal_connect</link></function> 
+        functions (which will be presented a bit later :).
+<programlisting>
+GClosure *g_cclosure_new             (GCallback      callback_func,
+                                      gpointer       user_data,
+                                      GClosureNotify destroy_data);
+GClosure *g_cclosure_new_swap        (GCallback      callback_func,
+                                      gpointer       user_data,
+                                      GClosureNotify destroy_data);
+GClosure *g_signal_type_cclosure_new (GType          itype,
+                                      guint          struct_offset);
+</programlisting>
+      </para>
+
+      <para>
+        <function><link linkend="g-cclosure-new">g_cclosure_new</link></function> will create a new closure which can invoke the
+        user-provided callback_func with the user-provided user_data as last parameter. When the closure
+        is finalized (second stage of the destruction process), it will invoke the destroy_data function 
+        if the user has supplied one.
+      </para>
+  
+      <para>
+        <function><link linkend="g-cclosure-new-swap">g_cclosure_new_swap</link></function> will create a new closure which can invoke the
+        user-provided callback_func with the user-provided user_data as first parameter (instead of being the 
+        last parameter as with <function><link linkend="g-cclosure-new">g_cclosure_new</link></function>). When the closure
+        is finalized (second stage of the destruction process), it will invoke the destroy_data 
+        function if the user has supplied one.
+      </para>
+    </sect2>
+
+    <sect2>
+      <title>Non-C closures (for the fearless)</title>
+
+      <para>
+        As was explained above, closures hide the details of callback invocation. In C,
+        callback invocation is just like function invocation: it is a matter of creating
+        the correct stack frame for the called function and executing a <emphasis>call</emphasis>
+        assembly instruction.
+      </para>
+  
+      <para>
+        C closure marshallers transform the array of GValues which represent 
+        the parameters to the target function into a C-style function parameter list, invoke
+        the user-supplied C function with this new parameter list, get the return value of the
+        function, transform it into a GValue and return this GValue to the marshaller caller.
+      </para>
+  
+      <para>
+        The following code implements a simple marshaller in C for a C function which takes an
+        integer as first parameter and returns void.
+<programlisting>
+g_cclosure_marshal_VOID__INT (GClosure     *closure,
+                              GValue       *return_value,
+                              guint         n_param_values,
+                              const GValue *param_values,
+                              gpointer      invocation_hint,
+                              gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__INT) (gpointer     data1,
+                                          gint         arg_1,
+                                          gpointer     data2);
+  register GMarshalFunc_VOID__INT callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 2);
+
+  data1 = g_value_peek_pointer (param_values + 0);
+  data2 = closure->data;
+
+  callback = (GMarshalFunc_VOID__INT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_int (param_values + 1),
+            data2);
+}
+</programlisting>
+      </para>
+  
+      <para>
+        Of course, there exist other kinds of marshallers. For example, James Henstridge 
+        wrote a generic Python marshaller which is used by all Python closures (a Python closure
+        is used to have Python-based callback be invoked by the closure invocation process).
+        This Python marshaller transforms the input GValue list representing the function 
+        parameters into a Python tuple which is the equivalent structure in Python (you can
+        look in <function>pyg_closure_marshal</function> in <filename>pygtype.c</filename>
+        in the <emphasis>pygobject</emphasis> module in the GNOME Subversion server).
+      </para>
+
+    </sect2>
+  </sect1>
+
+  <sect1 id="signal">
+    <title>Signals</title>
+
+    <para>
+      GObject's signals have nothing to do with standard UNIX signals: they connect 
+      arbitrary application-specific events with any number of listeners.
+      For example, in GTK+, every user event (keystroke or mouse move) is received
+      from the X server and generates a GTK+ event under the form of a signal emission
+      on a given object instance.
+    </para>
+
+    <para>
+      Each signal is registered in the type system together with the type on which
+      it can be emitted: users of the type are said to <emphasis>connect</emphasis>
+      to the signal on a given type instance when they register a closure to be 
+      invoked upon the signal emission. Users can also emit the signal by themselves 
+      or stop the emission of the signal from within one of the closures connected 
+      to the signal.
+    </para>
+
+    <para>
+      When a signal is emitted on a given type instance, all the closures
+      connected to this signal on this type instance will be invoked. All the closures
+      connected to such a signal represent callbacks whose signature looks like:
+<programlisting>
+return_type function_callback (gpointer instance, ... , gpointer user_data);
+</programlisting>
+    </para>
+
+    <sect2 id="signal-registration">
+      <title>Signal registration</title>
+
+	  <para>
+		To register a new signal on an existing type, we can use any of <function><link linkend="g-signal-newv">g_signal_newv</link></function>,
+		<function><link linkend="g-signal-new-valist">g_signal_new_valist</link></function> or <function><link linkend="g-signal-new">g_signal_new</link></function> functions:
+<programlisting>
+guint g_signal_newv (const gchar        *signal_name,
+                     GType               itype,
+                     GSignalFlags        signal_flags,
+                     GClosure           *class_closure,
+                     GSignalAccumulator  accumulator,
+                     gpointer            accu_data,
+                     GSignalCMarshaller  c_marshaller,
+                     GType               return_type,
+                     guint               n_params,
+                     GType              *param_types);
+</programlisting>
+		The number of parameters to these functions is a bit intimidating but they are relatively
+		simple:
+		<itemizedlist>
+		  <listitem><para>
+			  signal_name: is a string which can be used to uniquely identify a given signal.
+			</para></listitem>
+		  <listitem><para>
+			  itype: is the instance type on which this signal can be emitted.
+			</para></listitem>
+		  <listitem><para>
+			  signal_flags: partly defines the order in which closures which were connected to the
+			  signal are invoked.
+			</para></listitem>
+		  <listitem><para>
+			  class_closure: this is the default closure for the signal: if it is not NULL upon
+			  the signal emission, it will be invoked upon this emission of the signal. The 
+			  moment where this closure is invoked compared to other closures connected to that 
+			  signal depends partly on the signal_flags.
+			</para></listitem>
+			<listitem><para>
+			  accumulator: this is a function pointer which is invoked after each closure
+			  has been invoked. If it returns FALSE, signal emission is stopped. If it returns
+			  TRUE, signal emission proceeds normally. It is also used to compute the return
+			  value of the signal based on the return value of all the invoked closures.
+			</para></listitem>
+		  <listitem><para>
+			  accumulator_data: this pointer will be passed down to each invocation of the
+			  accumulator during emission.
+			</para></listitem>
+		  <listitem><para>
+			  c_marshaller: this is the default C marshaller for any closure which is connected to
+			this signal.
+			</para></listitem>
+		  <listitem><para>
+			  return_type: this is the type of the return value of the signal.
+			</para></listitem>
+		  <listitem><para>
+			  n_params: this is the number of parameters this signal takes.
+			</para></listitem>
+		  <listitem><para>
+			  param_types: this is an array of GTypes which indicate the type of each parameter
+			  of the signal. The length of this array is indicated by n_params.
+			</para></listitem>
+		</itemizedlist>
+      </para>
+
+	  <para>
+		As you can see from the above definition, a signal is basically a description
+		of the closures which can be connected to this signal and a description of the
+		order in which the closures connected to this signal will be invoked.
+	  </para>
+
+	</sect2>
+
+	<sect2 id="signal-connection">
+	  <title>Signal connection</title>
+
+	  <para>
+		If you want to connect to a signal with a closure, you have three possibilities:
+		<itemizedlist>
+		  <listitem><para>
+		  You can register a class closure at signal registration: this is a
+		  system-wide operation. i.e.: the class_closure will be invoked during each emission
+		  of a given signal on all the instances of the type which supports that signal.
+			</para></listitem>
+		  <listitem><para>
+		  You can use <function><link linkend="g-signal-override-class-closure">g_signal_override_class_closure</link></function> which
+		  overrides the class_closure of a given type. It is possible to call this function
+		  only on a derived type of the type on which the signal was registered.
+		  This function is of use only to language bindings.
+			</para></listitem>
+		  <listitem><para>
+		  You can register a closure with the <function><link linkend="g-signal-connect">g_signal_connect</link></function>
+		  family of functions. This is an instance-specific operation: the closure
+		  will be invoked only during emission of a given signal on a given instance.
+			</para></listitem>
+		</itemizedlist>
+		It is also possible to connect a different kind of callback on a given signal: 
+		emission hooks are invoked whenever a given signal is emitted whatever the instance on 
+		which it is emitted. Emission hooks are used for example to get all mouse_clicked
+		emissions in an application to be able to emit the small mouse click sound.
+		Emission hooks are connected with <function><link linkend="g-signal-add-emission-hook">g_signal_add_emission_hook</link></function>
+		and removed with <function><link linkend="g-signal-remove-emission-hook">g_signal_remove_emission_hook</link></function>.
+	  </para>
+
+	</sect2>
+
+	<sect2 id="signal-emission">
+	  <title>Signal emission</title>
+
+	  <para>
+		Signal emission is done through the use of the <function><link linkend="g-signal-emit">g_signal_emit</link></function> family 
+		of functions.
+<programlisting>
+void g_signal_emitv (const GValue *instance_and_params,
+                     guint         signal_id,
+                     GQuark        detail,
+                     GValue       *return_value);
+</programlisting>
+		<itemizedlist>
+		  <listitem><para>
+			The instance_and_params array of GValues contains the list of input
+			parameters to the signal. The first element of the array is the 
+			instance pointer on which to invoke the signal. The following elements of
+			the array contain the list of parameters to the signal.
+			</para></listitem>
+		  <listitem><para>
+			signal_id identifies the signal to invoke.
+			</para></listitem>
+		  <listitem><para>
+			detail identifies the specific detail of the signal to invoke. A detail is a kind of 
+			magic token/argument which is passed around during signal emission and which is used
+			by closures connected to the signal to filter out unwanted signal emissions. In most 
+			cases, you can safely set this value to zero. See <xref linkend="signal-detail"/> for
+			more details about this parameter.
+			</para></listitem>
+		  <listitem><para>
+			return_value holds the return value of the last closure invoked during emission if
+			no accumulator was specified. If an accumulator was specified during signal creation,
+			this accumulator is used to calculate the return_value as a function of the return
+			values of all the closures invoked during emission. 
+			<footnote><para>
+			  James (again!!) gives a few non-trivial examples of accumulators:
+			  <quote>
+				For instance, you may have an accumulator that ignores NULL returns from 
+				closures, and only accumulates the non-NULL ones. Another accumulator may try
+				to return the list of values returned by the closures.
+			  </quote>
+			</para></footnote>
+			If no closure is invoked during
+			emission, the return_value is nonetheless initialized to zero/null.
+			</para></listitem>
+		  </itemizedlist>
+		</para>
+
+	  <para>
+		Internally, the GValue array is passed to the emission function proper, 
+		<function>signal_emit_unlocked_R</function> (implemented in <filename>gsignal.c</filename>).
+		Signal emission can be decomposed in 5 steps:
+		<itemizedlist>
+		  <listitem><para>
+			<emphasis>RUN_FIRST</emphasis>: if the G_SIGNAL_RUN_FIRST flag was used
+			during signal registration and if there exist a class_closure for this signal,
+			the class_closure is invoked. Jump to <emphasis>EMISSION_HOOK</emphasis> state.
+			</para></listitem>
+		  <listitem><para>
+			<emphasis>EMISSION_HOOK</emphasis>: if any emission hook was added to
+			the signal, they are invoked from first to last added. Accumulate return values
+			and jump to <emphasis>HANDLER_RUN_FIRST</emphasis> state. 
+			</para></listitem>
+		  <listitem><para>
+			<emphasis>HANDLER_RUN_FIRST</emphasis>: if any closure were connected
+			with the <function><link linkend="g-signal-connect">g_signal_connect</link></function> family of 
+			functions, and if they are not blocked (with the <function><link linkend="g-signal-handler-block">g_signal_handler_block</link></function>
+			family of functions) they are run here, from first to last connected.
+			Jump to <emphasis>RUN_LAST</emphasis> state.
+			</para></listitem>
+		  <listitem><para>
+			<emphasis>RUN_LAST</emphasis>: if the G_SIGNAL_RUN_LAST
+			flag was set during registration and if a class_closure
+			was set, it is invoked here. Jump to 
+			<emphasis>HANDLER_RUN_LAST</emphasis> state.
+			</para></listitem>
+		  <listitem><para>
+			<emphasis>HANDLER_RUN_LAST</emphasis>: if any closure were connected
+			with the <function>g_signal_connect_after</function> family of 
+			functions, if they were not invoked during HANDLER_RUN_FIRST and if they 
+			are not blocked, they are run here, from first to last connected.
+			Jump to  <emphasis>RUN_CLEANUP</emphasis> state.
+			</para></listitem>
+		  <listitem><para>
+			<emphasis>RUN_CLEANUP</emphasis>: if the G_SIGNAL_RUN_CLEANUP flag
+			was set during registration and if a class_closure was set,
+			it is invoked here. Signal emission is completed here.
+			</para></listitem>
+		</itemizedlist>      
+	  </para>
+  
+	  <para>
+		If, at any point during emission (except in RUN_CLEANUP state), one of the 
+		closures or emission hook stops the signal emission with 
+		<function><link linkend="g-signal-stop">g_signal_stop</link></function>, emission jumps to CLEANUP state.
+	  </para>
+  
+	  <para>
+		If, at any point during emission, one of the closures or emission hook 
+		emits the same signal on the same instance, emission is restarted from
+		the RUN_FIRST state.
+	  </para>
+  
+	  <para>
+		The accumulator function is invoked in all states, after invocation
+		of each closure (except in EMISSION_HOOK and CLEANUP). It accumulates
+		the closure return value into the signal return value and returns TRUE or
+		FALSE. If, at any point, it does not return TRUE, emission jumps to CLEANUP state.
+	  </para>
+
+	  <para>
+		If no accumulator function was provided, the value returned by the last handler
+		run will be returned by <function><link linkend="g-signal-emit">g_signal_emit</link></function>.
+	  </para>
+
+	</sect2>
+
+
+	<sect2 id="signal-detail">
+	  <title>The <emphasis>detail</emphasis> argument</title>
+
+	  <para>All the functions related to signal emission or signal connection have a parameter
+		named the <emphasis>detail</emphasis>. Sometimes, this parameter is hidden by the API
+		but it is always there, under one form or another. 
+	  </para>
+
+	  <para>
+	    Of the three main connection functions,
+		only one has an explicit detail parameter as a <type><link linkend="GQuark">GQuark</link></type>
+		<footnote>
+		  <para>A GQuark is an integer which uniquely represents a string. It is possible to transform
+		   back and forth between the integer and string representations with the functions 
+		   <function><link linkend="g-quark-from-string">g_quark_from_string</link></function> and <function><link linkend="g-quark-to-string">g_quark_to_string</link></function>.
+		  </para>
+		</footnote>:
+<programlisting>
+gulong     g_signal_connect_closure_by_id          (gpointer          instance,
+                           guint          signal_id,
+                           GQuark          detail,
+                           GClosure         *closure,
+                           gboolean          after);
+</programlisting>
+        The two other functions hide the detail parameter in the signal name identification:
+<programlisting>
+gulong     g_signal_connect_closure          (gpointer          instance,
+                           const gchar       *detailed_signal,
+                           GClosure         *closure,
+                           gboolean          after);
+gulong     g_signal_connect_data              (gpointer          instance,
+                           const gchar     *detailed_signal,
+                           GCallback      c_handler,
+                           gpointer          data,
+                           GClosureNotify      destroy_data,
+                           GConnectFlags      connect_flags);
+</programlisting>
+		Their detailed_signal parameter is a string which identifies the name of the signal
+		to connect to. However, the format of this string is structured to look like 
+		<emphasis>signal_name::detail_name</emphasis>. Connecting to the signal
+		named <emphasis>notify::cursor_position</emphasis> will actually connect to the signal
+		named <emphasis>notify</emphasis> with the <emphasis>cursor_position</emphasis> name.
+		Internally, the detail string is transformed to a GQuark if it is present.
+	  </para>
+
+	  <para>
+		Of the four main signal emission functions, three have an explicit detail parameter as a 
+		<type><link linkend="GQuark">GQuark</link></type> again:
+<programlisting>
+void                  g_signal_emitv        (const GValue       *instance_and_params,
+                         guint               signal_id,
+                         GQuark              detail,
+                         GValue             *return_value);
+void                  g_signal_emit_valist  (gpointer            instance,
+                         guint               signal_id,
+                         GQuark              detail,
+                         va_list             var_args);
+void                  g_signal_emit         (gpointer            instance,
+                         guint               signal_id,
+                         GQuark              detail,
+                         ...);
+</programlisting>
+        The fourth function hides it in its signal name parameter:
+<programlisting>
+void                  g_signal_emit_by_name (gpointer            instance,
+                         const gchar        *detailed_signal,
+                         ...);
+</programlisting>
+        The format of the detailed_signal parameter is exactly the same as the format used by
+        the <function><link linkend="g-signal-connect">g_signal_connect</link></function> functions: <emphasis>signal_name::detail_name</emphasis>.
+	  </para>
+
+	  <para>
+        If a detail is provided by the user to the emission function, it is used during emission to match
+        against the closures which also provide a detail.
+        If the closures' detail does not match the detail provided by the user, they will not be invoked
+        (even though they are connected to a signal which is being emitted).
+	  </para>
+
+	  <para>
+		This completely optional filtering mechanism is mainly used as an optimization for signals
+		which are often emitted for many different reasons: the clients can filter out which events they are
+		interested in before the closure's marshalling code runs. For example, this is used extensively
+		by the <emphasis>notify</emphasis> signal of GObject: whenever a property is modified on a GObject,
+		instead of just emitting the <emphasis>notify</emphasis> signal, GObject associates as a detail to this
+		signal emission the name of the property modified. This allows clients who wish to be notified of changes
+		to only one property to filter most events before receiving them.
+	  </para>
+
+	  <para>
+		As a simple rule, users can and should set the detail parameter to zero: this will disable completely
+        this optional filtering.
+	  </para>
+
+	</sect2>
+
+  </sect1>
+</chapter>
+
diff --git a/docs/reference/gobject/tut_gtype.xml b/docs/reference/gobject/tut_gtype.xml
new file mode 100644
index 0000000..2ea2bf3
--- /dev/null
+++ b/docs/reference/gobject/tut_gtype.xml
@@ -0,0 +1,938 @@
+<?xml version='1.0' encoding="ISO-8859-1"?>
+  <chapter id="chapter-gtype">
+    <title>The GLib Dynamic Type System</title>
+
+      <para>
+        A type, as manipulated by the GLib type system, is much more generic than what
+        is usually understood as an Object type. It is best explained by looking at the 
+        structure and the functions used to register new types in the type system.
+        <programlisting>
+typedef struct _GTypeInfo               GTypeInfo;
+struct _GTypeInfo
+{
+  /* interface types, classed types, instantiated types */
+  guint16                class_size;
+  
+  GBaseInitFunc          base_init;
+  GBaseFinalizeFunc      base_finalize;
+  
+  /* classed types, instantiated types */
+  GClassInitFunc         class_init;
+  GClassFinalizeFunc     class_finalize;
+  gconstpointer          class_data;
+  
+  /* instantiated types */
+  guint16                instance_size;
+  guint16                n_preallocs;
+  GInstanceInitFunc      instance_init;
+  
+  /* value handling */
+  const GTypeValueTable *value_table;
+};
+GType g_type_register_static (GType             parent_type,
+                              const gchar      *type_name,
+                              const GTypeInfo  *info,
+                              GTypeFlags        flags);
+GType g_type_register_fundamental (GType                       type_id,
+                                   const gchar                *type_name,
+                                   const GTypeInfo            *info,
+                                   const GTypeFundamentalInfo *finfo,
+                                   GTypeFlags                  flags);
+        </programlisting>
+      </para>
+
+      <para>
+        <function><link linkend="g-type-register-static">g_type_register_static</link></function> and 
+        <function><link linkend="g-type-register-fundamental">g_type_register_fundamental</link></function>
+        are the C functions, defined in
+        <filename>gtype.h</filename> and implemented in <filename>gtype.c</filename>
+        which you should use to register a new <type><link linkend="GType">GType</link></type> in the program's type system.
+        It is not likely you will ever need to use 
+        <function><link linkend="g-type-register-fundamental">g_type_register_fundamental</link></function> (you have to be Tim Janik 
+        to do that) but in case you want to, the last chapter explains how to create
+        new fundamental types.
+        <footnote>
+          <para>
+            Please note that there exists another registration function: the 
+            <function><link linkend="g-type-register-dynamic">g_type_register_dynamic</link></function>. We will not discuss this
+            function here since its use is very similar to the <function>_static</function> 
+            version.
+          </para>
+        </footnote>
+      </para>
+
+      <para>
+        Fundamental types are top-level types which do not derive from any other type 
+        while other non-fundamental types derive from other types.
+        Upon initialization by <function><link linkend="g-type-init">g_type_init</link></function>, the type system not 
+        only initializes its internal data structures but it also registers a number of core
+        types: some of these are fundamental types. Others are types derived from these 
+        fundamental types.
+      </para>
+
+      <para>
+        Fundamental and non-fundamental types are defined by:
+        <itemizedlist>
+          <listitem><para>
+            class size: the class_size field in <type><link linkend="GTypeInfo">GTypeInfo</link></type>.
+          </para></listitem>
+          <listitem><para>
+            class initialization functions (C++ constructor): the base_init and 
+            class_init fields in <type><link linkend="GTypeInfo">GTypeInfo</link></type>.
+          </para></listitem>
+          <listitem><para>
+            class destruction functions (C++ destructor): the base_finalize and 
+            class_finalize fields in <type><link linkend="GTypeInfo">GTypeInfo</link></type>.
+          </para></listitem>
+          <listitem><para>
+            instance size (C++ parameter to new): the instance_size field in 
+            <type><link linkend="GTypeInfo">GTypeInfo</link></type>.
+          </para></listitem>
+          <listitem><para>
+            instantiation policy (C++ type of new operator): the n_preallocs
+            field in <type><link linkend="GTypeInfo">GTypeInfo</link></type>.
+          </para></listitem>
+          <listitem><para>
+            copy functions (C++ copy operators): the value_table field in 
+            <type><link linkend="GTypeInfo">GTypeInfo</link></type>.
+          </para></listitem>
+          <listitem><para>
+            type characteristic flags: <type><link linkend="GTypeFlags">GTypeFlags</link></type>.
+          </para></listitem>
+        </itemizedlist>
+        Fundamental types are also defined by a set of <type><link linkend="GTypeFundamentalFlags">GTypeFundamentalFlags</link></type> 
+        which are stored in a <type><link linkend="GTypeFundamentalInfo">GTypeFundamentalInfo</link></type>.
+        Non-fundamental types are furthermore defined by the type of their parent which is
+        passed as the parent_type parameter to <function><link linkend="g-type-register-static">g_type_register_static</link></function>
+        and <function><link linkend="g-type-register-dynamic">g_type_register_dynamic</link></function>.
+      </para>
+      
+      <sect1 id="gtype-copy">
+        <title>Copy functions</title>
+
+        <para>
+          The major common point between <emphasis>all</emphasis> GLib types (fundamental and 
+          non-fundamental, classed and non-classed, instantiable and non-instantiable) is that
+          they can all be manipulated through a single API to copy/assign them.
+        </para>
+
+        <para>
+          The <type><link linkend="GValue">GValue</link></type> structure is used as an abstract container for all of these 
+          types. Its simplistic API (defined in <filename>gobject/gvalue.h</filename>) can be 
+          used to invoke the value_table functions registered
+          during type registration: for example <function><link linkend="g-value-copy">g_value_copy</link></function> copies the 
+          content of a <type><link linkend="GValue">GValue</link></type> to another <type><link linkend="GValue">GValue</link></type>. This is similar
+          to a C++ assignment which invokes the C++ copy operator to modify the default
+          bit-by-bit copy semantics of C++/C structures/classes.
+        </para>
+
+        <para>
+          The following code shows how you can copy around a 64 bit integer, as well as a <type><link linkend="GObject">GObject</link></type>
+          instance pointer (sample code for this is located in the source tarball for this document in 
+          <filename>sample/gtype/test.c</filename>):
+<programlisting>
+static void test_int (void)
+{
+  GValue a_value = {0, }; 
+  GValue b_value = {0, };
+  guint64 a, b;
+
+  a = 0xdeadbeaf;
+
+  g_value_init (&amp;a_value, G_TYPE_UINT64);
+  g_value_set_uint64 (&amp;a_value, a);
+
+  g_value_init (&amp;b_value, G_TYPE_UINT64);
+  g_value_copy (&amp;a_value, &amp;b_value);
+
+  b = g_value_get_uint64 (&amp;b_value);
+
+  if (a == b) {
+    g_print ("Yay !! 10 lines of code to copy around a uint64.\n");
+  } else {
+    g_print ("Are you sure this is not a Z80 ?\n");
+  }
+}
+
+static void test_object (void)
+{
+  GObject *obj;
+  GValue obj_vala = {0, };
+  GValue obj_valb = {0, };
+  obj = g_object_new (MAMAN_TYPE_BAR, NULL);
+
+  g_value_init (&amp;obj_vala, MAMAN_TYPE_BAR);
+  g_value_set_object (&amp;obj_vala, obj);
+
+  g_value_init (&amp;obj_valb, G_TYPE_OBJECT);
+
+  /* g_value_copy's semantics for G_TYPE_OBJECT types is to copy the reference.
+     This function thus calls g_object_ref.
+     It is interesting to note that the assignment works here because
+     MAMAN_TYPE_BAR is a G_TYPE_OBJECT.
+   */
+  g_value_copy (&amp;obj_vala, &amp;obj_valb);
+
+  g_object_unref (G_OBJECT (obj));
+  g_object_unref (G_OBJECT (obj));
+}
+</programlisting>
+          The important point about the above code is that the exact semantics of the copy calls
+          is undefined since they depend on the implementation of the copy function. Certain 
+          copy functions might decide to allocate a new chunk of memory and then to copy the 
+          data from the source to the destination. Others might want to simply increment
+          the reference count of the instance and copy the reference to the new GValue.
+        </para>
+        
+        <para>
+          The value_table used to specify these assignment functions is defined in
+          <filename>gtype.h</filename> and is thoroughly described in the
+          API documentation provided with GObject (for once ;-) which is why we will
+          not detail its exact semantics. 
+          <programlisting>
+typedef struct _GTypeValueTable         GTypeValueTable;
+struct _GTypeValueTable
+{
+  void     (*value_init)         (GValue       *value);
+  void     (*value_free)         (GValue       *value);
+  void     (*value_copy)         (const GValue *src_value,
+                                  GValue       *dest_value);
+  /* varargs functionality (optional) */
+  gpointer (*value_peek_pointer) (const GValue *value);
+  gchar            *collect_format;
+  gchar*   (*collect_value)      (GValue       *value,
+                                  guint         n_collect_values,
+                                  GTypeCValue  *collect_values,
+                                  guint                collect_flags);
+  gchar            *lcopy_format;
+  gchar*   (*lcopy_value)        (const GValue *value,
+                                  guint         n_collect_values,
+                                  GTypeCValue  *collect_values,
+                                  guint                collect_flags);
+};
+          </programlisting>
+          Interestingly, it is also very unlikely
+          you will ever need to specify a value_table during type registration
+          because these value_tables are inherited from the parent types for
+          non-fundamental types which means that unless you want to write a 
+          fundamental type (not a great idea!), you will not need to provide
+          a new value_table since you will inherit the value_table structure
+          from your parent type.
+        </para>
+      </sect1>
+
+      <sect1 id="gtype-conventions">
+        <title>Conventions</title>
+
+
+      <para>
+        There are a number of conventions users are expected to follow when creating new types
+        which are to be exported in a header file:
+        <itemizedlist>
+          <listitem><para>
+            Use the <function>object_method</function> pattern for function names: to invoke
+            the method named foo on an instance of object type bar, call 
+            <function>bar_foo</function>.
+          </para></listitem>
+          <listitem><para>Use prefixing to avoid namespace conflicts with other projects.
+            If your library (or application) is named <emphasis>Maman</emphasis>,
+            <footnote>
+              <para>
+                <emphasis>Maman</emphasis> is the French word for <emphasis>mum</emphasis>
+                or <emphasis>mother</emphasis> - nothing more and nothing less.
+              </para>
+            </footnote>
+            
+            prefix all your function names with <emphasis>maman_</emphasis>.
+            For example: <function>maman_object_method</function>.
+          </para></listitem>
+          <listitem><para>Create a macro named <function>PREFIX_TYPE_OBJECT</function> which always 
+            returns the GType for the associated object type. For an object of type 
+            <emphasis>Bar</emphasis> in a libray prefixed by <emphasis>maman</emphasis>, 
+            use: <function>MAMAN_TYPE_BAR</function>.
+            It is common although not a convention to implement this macro using either a global 
+            static variable or a function named <function>prefix_object_get_type</function>.
+            We will follow the function pattern wherever possible in this document.
+          </para></listitem>
+          <listitem><para>Create a macro named <function>PREFIX_OBJECT (obj)</function> which 
+            returns a pointer of type <type>PrefixObject</type>. This macro is used to enforce
+            static type safety by doing explicit casts wherever needed. It also enforces
+            dynamic type safety by doing runtime checks. It is possible to disable the dynamic
+            type checks in production builds (see <link linkend="glib-building">building glib</link>).
+            For example, we would create 
+            <function>MAMAN_BAR (obj)</function> to keep the previous example.
+          </para></listitem>
+          <listitem><para>If the type is classed, create a macro named 
+            <function>PREFIX_OBJECT_CLASS (klass)</function>. This macro
+            is strictly equivalent to the previous casting macro: it does static casting with
+            dynamic type checking of class structures. It is expected to return a pointer
+            to a class structure of type <type>PrefixObjectClass</type>. Again, an example is:
+            <function>MAMAN_BAR_CLASS</function>.
+          </para></listitem>
+          <listitem><para>Create a macro named <function>PREFIX_IS_BAR (obj)</function>: this macro is expected
+            to return a <type>gboolean</type> which indicates whether or not the input
+            object instance pointer of type BAR.
+          </para></listitem>
+          <listitem><para>If the type is classed, create a macro named
+            <function>PREFIX_IS_OBJECT_CLASS (klass)</function> which, as above, returns a boolean
+            if the input class pointer is a pointer to a class of type OBJECT.
+          </para></listitem>
+          <listitem><para>If the type is classed, create a macro named 
+            <function>PREFIX_OBJECT_GET_CLASS (obj)</function>
+            which returns the class pointer associated to an instance of a given type. This macro
+            is used for static and dynamic type safety purposes (just like the previous casting
+            macros).
+          </para></listitem>
+        </itemizedlist>
+        The implementation of these macros is pretty straightforward: a number of simple-to-use 
+        macros are provided in <filename>gtype.h</filename>. For the example we used above, we would 
+        write the following trivial code to declare the macros:
+<programlisting>
+#define MAMAN_TYPE_BAR                  (maman_bar_get_type ())
+#define MAMAN_BAR(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
+#define MAMAN_BAR_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAR, MamanBarClass))
+#define MAMAN_IS_BAR(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAR))
+#define MAMAN_IS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAR))
+#define MAMAN_BAR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAR, MamanBarClass))
+</programlisting>
+        <note><simpara>Stick to the naming <varname>klass</varname> as <varname>class</varname> is a registered c++ keyword.</simpara></note>
+      </para>
+
+      <para>
+        The following code shows how to implement the <function>maman_bar_get_type</function>
+        function:
+<programlisting>
+GType maman_bar_get_type (void)
+{
+  static GType type = 0;
+  if (type == 0) {
+    static const GTypeInfo info = {
+      /* You fill this structure. */
+    };
+    type = g_type_register_static (G_TYPE_OBJECT,
+                                   "MamanBarType",
+                                   &amp;info, 0);
+  }
+  return type;
+}
+</programlisting>
+      </para>
+
+      <para>
+        When having no special requirements you also can use the <function>G_DEFINE_TYPE</function>
+	macro:
+<programlisting>
+G_DEFINE_TYPE (MamanBar, maman_bar, G_TYPE_OBJECT)
+</programlisting>
+      </para>
+
+      </sect1>
+
+      <sect1 id="gtype-non-instantiable">
+        <title>Non-instantiable non-classed fundamental types</title>
+
+        <para>
+          A lot of types are not instantiable by the type system and do not have
+          a class. Most of these types are fundamental trivial types such as <emphasis>gchar</emphasis>, 
+          registered in <function>g_value_types_init</function> (in <filename>gvaluetypes.c</filename>).
+        </para>
+
+        <para>
+          To register such a type in the type system, you just need to fill the 
+          <type><link linkend="GTypeInfo">GTypeInfo</link></type> structure with zeros since these types are also most of the time
+          fundamental:
+          <programlisting>
+  GTypeInfo info = {
+    0,                                /* class_size */
+    NULL,                        /* base_init */
+    NULL,                        /* base_destroy */
+    NULL,                        /* class_init */
+    NULL,                        /* class_destroy */
+    NULL,                        /* class_data */
+    0,                                /* instance_size */
+    0,                                /* n_preallocs */
+    NULL,                        /* instance_init */
+    NULL,                        /* value_table */
+  };
+  static const GTypeValueTable value_table = {
+    value_init_long0,                /* value_init */
+    NULL,                        /* value_free */
+    value_copy_long0,                /* value_copy */
+    NULL,                        /* value_peek_pointer */
+    "i",                        /* collect_format */
+    value_collect_int,        /* collect_value */
+    "p",                        /* lcopy_format */
+    value_lcopy_char,                /* lcopy_value */
+  };
+  info.value_table = &amp;value_table;
+  type = g_type_register_fundamental (G_TYPE_CHAR, "gchar", &amp;info, &amp;finfo, 0);
+          </programlisting>
+        </para>
+
+
+        <para>
+          Having non-instantiable types might seem a bit useless: what good is a type
+          if you cannot instantiate an instance of that type ? Most of these types
+          are used in conjunction with <type><link linkend="GValue">GValue</link></type>s: a GValue is initialized
+          with an integer or a string and it is passed around by using the registered 
+          type's value_table. <type><link linkend="GValue">GValue</link></type>s (and by extension these trivial fundamental
+          types) are most useful when used in conjunction with object properties and signals.
+        </para>
+
+      </sect1>
+
+      <sect1 id="gtype-instantiable-classed">
+        <title>Instantiable classed types: objects</title>
+
+        <para>
+          Types which are registered with a class and are declared instantiable are
+          what most closely resembles an <emphasis>object</emphasis>. 
+          Although <type><link linkend="GObject">GObject</link></type>s (detailed in <xref linkend="chapter-gobject"/>) 
+          are the most well known type of instantiable
+          classed types, other kinds of similar objects used as the base of an inheritance 
+          hierarchy have been externally developed and they are all built on the fundamental
+          features described below.
+        </para>
+
+        <para>
+          For example, the code below shows how you could register 
+          such a fundamental object type in the type system:
+<programlisting>
+typedef struct {
+  GObject parent;
+  /* instance members */
+  int field_a;
+} MamanBar;
+
+typedef struct {
+  GObjectClass parent;
+  /* class members */
+  void (*do_action_public_virtual) (MamanBar *self, guint8 i);
+
+  void (*do_action_public_pure_virtual) (MamanBar *self, guint8 i);
+} MamanBarClass;
+
+#define MAMAN_TYPE_BAR (maman_bar_get_type ())
+
+GType 
+maman_bar_get_type (void)
+{
+  static GType type = 0;
+  if (type == 0) {
+    static const GTypeInfo info = {
+      sizeof (MamanBarClass),
+      NULL,           /* base_init */
+      NULL,           /* base_finalize */
+      (GClassInitFunc) foo_class_init,
+      NULL,           /* class_finalize */
+      NULL,           /* class_data */
+      sizeof (MamanBar),
+      0,              /* n_preallocs */
+      (GInstanceInitFunc) NULL /* instance_init */
+    };
+    type = g_type_register_static (G_TYPE_OBJECT,
+                                   "BarType",
+                                   &amp;info, 0);
+  }
+  return type;
+}
+</programlisting>
+          Upon the first call to <function>maman_bar_get_type</function>, the type named
+          <emphasis>BarType</emphasis> will be registered in the type system as inheriting
+          from the type <emphasis>G_TYPE_OBJECT</emphasis>.
+        </para>
+
+        <para>
+          Every object must define two structures: its class structure and its 
+          instance structure. All class structures must contain as first member
+          a <type><link linkend="GTypeClass">GTypeClass</link></type> structure. All instance structures must contain as first
+          member a <type><link linkend="GTypeInstance">GTypeInstance</link></type> structure. The declaration of these C types,
+          coming from <filename>gtype.h</filename> is shown below:
+<programlisting>
+struct _GTypeClass
+{
+  GType g_type;
+};
+struct _GTypeInstance
+{
+  GTypeClass *g_class;
+};
+</programlisting>
+          These constraints allow the type system to make sure that every object instance
+          (identified by a pointer to the object's instance structure) contains in its
+          first bytes a pointer to the object's class structure.
+        </para>
+        <para>
+          This relationship is best explained by an example: let's take object B which
+          inherits from object A:
+<programlisting>
+/* A definitions */
+typedef struct {
+  GTypeInstance parent;
+  int field_a;
+  int field_b;
+} A;
+typedef struct {
+  GTypeClass parent_class;
+  void (*method_a) (void);
+  void (*method_b) (void);
+} AClass;
+
+/* B definitions. */
+typedef struct {
+  A parent;
+  int field_c;
+  int field_d;
+} B;
+typedef struct {
+  AClass parent_class;
+  void (*method_c) (void);
+  void (*method_d) (void);
+} BClass;
+</programlisting>          
+          The C standard mandates that the first field of a C structure is stored starting
+          in the first byte of the buffer used to hold the structure's fields in memory.
+          This means that the first field of an instance of an object B is A's first field
+          which in turn is GTypeInstance's first field which in turn is g_class, a pointer
+          to B's class structure.
+        </para>
+
+        <para>
+          Thanks to these simple conditions, it is possible to detect the type of every
+          object instance by doing: 
+<programlisting>
+B *b;
+b->parent.parent.g_class->g_type
+</programlisting>
+          or, more quickly:
+<programlisting>
+B *b;
+((GTypeInstance*)b)->g_class->g_type
+</programlisting>
+        </para>
+
+        <sect2 id="gtype-instantiable-classed-init-done">
+          <title>Initialization and Destruction</title>
+
+          <para>
+            instantiation of these types can be done with 
+            <function><link linkend="g-type-create-instance">g_type_create_instance</link></function>:
+<programlisting>
+GTypeInstance* g_type_create_instance (GType          type);
+void           g_type_free_instance   (GTypeInstance *instance);
+</programlisting>
+            <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> will look up the type information
+            structure associated to the type requested. Then, the instance size and instantiation
+            policy (if the n_preallocs field is set to a non-zero value, the type system allocates
+            the object's instance structures in chunks rather than mallocing for every instance)
+            declared by the user are used to get a buffer to hold the object's instance
+            structure.
+          </para>
+
+          <para>
+            If this is the first instance of the object ever created, the type system must create
+            a class structure: it allocates a buffer to hold the object's class structure and
+            initializes it. It first copies the parent's class structure over this structure
+            (if there is no parent, it initializes it to zero). It then invokes the 
+            base_class_initialization functions (<type><link linkend="GBaseInitFunc">GBaseInitFunc</link></type>) from topmost 
+            fundamental object to bottom-most most derived object. The object's class_init 
+            (<type><link linkend="GClassInitFunc">GClassInitFunc</link></type>) function is invoked afterwards to complete
+            initialization of the class structure.
+            Finally, the object's interfaces are initialized (we will discuss interface initialization
+            in more detail later).
+          </para>
+
+          <para>
+            Once the type system has a pointer to an initialized class structure, it sets the object's
+            instance class pointer to the object's class structure and invokes the object's
+            instance_init (<type><link linkend="GInstanceInitFunc">GInstanceInitFunc</link></type>)functions, from top-most fundamental 
+            type to bottom-most most derived type.
+          </para>
+
+          <para>
+            Object instance destruction through <function><link linkend="g-type-free-instance">g_type_free_instance</link></function> is very simple:
+            the instance structure is returned to the instance pool if there is one and if this was the
+            last living instance of the object, the class is destroyed.
+          </para>
+
+
+          <para>
+            Class destruction (the concept of destruction is sometimes partly 
+            referred to as finalization in GType) is the symmetric process of 
+            the initialization: interfaces are destroyed first. 
+            Then, the most derived 
+            class_finalize (<type><link linkend="ClassFinalizeFunc">ClassFinalizeFunc</link></type>) function is invoked. The 
+            base_class_finalize (<type><link linkend="GBaseFinalizeFunc">GBaseFinalizeFunc</link></type>) functions are 
+            Finally invoked from bottom-most most-derived type to top-most fundamental type and 
+            the class structure is freed.
+          </para>
+
+          <para>
+            As many readers have now understood it, the base initialization/finalization process is
+            very similar to the C++ constructor/destructor paradigm. The practical details are different
+            though and it is important not to get confused by superficial similarities. 
+            GTypes have no instance destruction mechanism. It is
+            the user's responsibility to implement correct destruction semantics on top
+            of the existing GType code. (this is what GObject does. See 
+            <xref linkend="chapter-gobject"/>)
+           Furthermore, C++ code equivalent to the base_init 
+           and class_init callbacks of GType is usually not needed because C++ cannot really create object 
+           types at runtime.
+          </para>
+
+          <para>
+            The instantiation/finalization process can be summarized as follows:
+            <table id="gtype-init-fini-table">
+              <title>GType Instantiation/Finalization</title>
+              <tgroup cols="3">
+                <colspec colwidth="*" colnum="1" align="left"/>
+                <colspec colwidth="*" colnum="2" align="left"/>
+                <colspec colwidth="8*" colnum="3" align="left"/>
+    
+                <thead>
+                  <row>
+                    <entry>Invocation time</entry>
+                    <entry>Function Invoked</entry>
+                    <entry>Function's parameters</entry>
+                  </row>
+                </thead>
+                <tbody>
+                  <row>
+                    <entry morerows="2">First call to <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> for target type</entry>
+                    <entry>type's base_init function</entry>
+                    <entry>On the inheritance tree of classes from fundamental type to target type. 
+                      base_init is invoked once for each class structure.</entry>
+                  </row>
+                  <row>
+                    <!--entry>First call to <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> for target type</entry-->
+                    <entry>target type's class_init function</entry>
+                    <entry>On target type's class structure</entry>
+                  </row>
+                  <row>
+                    <!--entry>First call to <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> for target type</entry-->
+                    <entry>interface initialization, see 
+                      <xref linkend="gtype-non-instantiable-classed-init"/></entry>
+                    <entry></entry>
+                  </row>
+                  <row>
+                    <entry>Each call to <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> for target type</entry>
+                    <entry>target type's instance_init function</entry>
+                    <entry>On object's instance</entry>
+                  </row>
+                  <row>
+                    <entry morerows="2">Last call to <function><link linkend="g-type-free-instance">g_type_free_instance</link></function> for target type</entry>
+                    <entry>interface destruction, see
+                      <xref linkend="gtype-non-instantiable-classed-dest"/></entry>
+                    <entry></entry>
+                  </row>
+                  <row>
+                    <!--entry>Last call to <function><link linkend="g-type-free-instance">g_type_free_instance</link></function> for target type</entry-->
+                    <entry>target type's class_finalize function</entry>
+                    <entry>On target type's class structure</entry>
+                  </row>
+                  <row>
+                    <!--entry>Last call to <function><link linkend="g-type-free-instance">g_type_free_instance</link></function> for target type</entry-->
+                    <entry>type's base_finalize function</entry>
+                    <entry>On the inheritance tree of classes from fundamental type to target type. 
+                      base_finalize is invoked once for each class structure.</entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </table>
+          </para>
+          
+        </sect2>
+
+      </sect1>
+
+      <sect1 id="gtype-non-instantiable-classed">
+        <title>Non-instantiable classed types: interfaces</title>
+
+        <para>
+          GType's interfaces are very similar to Java's interfaces. They allow
+          to describe a common API that several classes will adhere to.
+          Imagine the play, pause and stop buttons on hi-fi equipment - those can
+          be seen as a playback interface. Once you know what they do, you can
+          control your CD player, MP3 player or anything that uses these symbols.
+          To declare an interface you have to register a non-instantiable
+          classed type which derives from 
+          <type><link linkend="GTypeInterface">GTypeInterface</link></type>. The following piece of code declares such an interface.
+<programlisting>
+#define MAMAN_IBAZ_TYPE                (maman_ibaz_get_type ())
+#define MAMAN_IBAZ(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_IBAZ_TYPE, MamanIbaz))
+#define MAMAN_IS_IBAZ(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_IBAZ_TYPE))
+#define MAMAN_IBAZ_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), MAMAN_IBAZ_TYPE, MamanIbazInterface))
+
+typedef struct _MamanIbaz MamanIbaz; /* dummy object */
+typedef struct _MamanIbazInterface MamanIbazInterface;
+
+struct _MamanIbazInterface {
+  GTypeInterface parent;
+
+  void (*do_action) (MamanIbaz *self);
+};
+
+GType maman_ibaz_get_type (void);
+
+void maman_ibaz_do_action (MamanIbaz *self);
+</programlisting>
+          The interface function, <function>maman_ibaz_do_action</function> is implemented
+          in a pretty simple way:
+<programlisting>
+void maman_ibaz_do_action (MamanIbaz *self)
+{
+  MAMAN_IBAZ_GET_INTERFACE (self)->do_action (self);
+}
+</programlisting>
+         <function>maman_ibaz_get_type</function> registers a type named <emphasis>MamanIBaz</emphasis>
+         which inherits from G_TYPE_INTERFACE. All interfaces must be children of G_TYPE_INTERFACE in the 
+         inheritance tree.
+        </para>
+
+        <para>
+          An interface is defined by only one structure which must contain as first member
+          a <type><link linkend="GTypeInterface">GTypeInterface</link></type> structure. The interface structure is expected to
+          contain the function pointers of the interface methods. It is good style to 
+          define helper functions for each of the interface methods which simply call
+          the interface' method directly: <function>maman_ibaz_do_action</function>
+          is one of these.
+        </para>
+
+        <para>
+          Once an interface type is registered, you must register implementations for these
+          interfaces. The function named <function>maman_baz_get_type</function> registers
+          a new GType named MamanBaz which inherits from <type><link linkend="GObject">GObject</link></type> and which
+          implements the interface <type>MamanIBaz</type>.
+<programlisting>
+static void maman_baz_do_action (MamanIbaz *self)
+{
+  g_print ("Baz implementation of IBaz interface Action.\n");
+}
+
+
+static void
+baz_interface_init (gpointer         g_iface,
+                    gpointer         iface_data)
+{
+  MamanIbazInterface *iface = (MamanIbazInterface *)g_iface;
+  iface->do_action = maman_baz_do_action;
+}
+
+GType 
+maman_baz_get_type (void)
+{
+  static GType type = 0;
+  if (type == 0) {
+    static const GTypeInfo info = {
+      sizeof (MamanBazInterface),
+      NULL,   /* base_init */
+      NULL,   /* base_finalize */
+      NULL,   /* class_init */
+      NULL,   /* class_finalize */
+      NULL,   /* class_data */
+      sizeof (MamanBaz),
+      0,      /* n_preallocs */
+      NULL    /* instance_init */
+    };
+    static const GInterfaceInfo ibaz_info = {
+      (GInterfaceInitFunc) baz_interface_init,    /* interface_init */
+      NULL,               /* interface_finalize */
+      NULL          /* interface_data */
+    };
+    type = g_type_register_static (G_TYPE_OBJECT,
+                                   "MamanBazType",
+                                   &amp;info, 0);
+    g_type_add_interface_static (type,
+                                 MAMAN_IBAZ_TYPE,
+                                 &amp;ibaz_info);
+  }
+  return type;
+}
+</programlisting>
+        </para>
+
+        <para>
+          <function><link linkend="g-type-add-interface-static">g_type_add_interface_static</link></function> records in the type system that
+          a given type implements also <type>FooInterface</type> 
+          (<function>foo_interface_get_type</function> returns the type of 
+          <type>FooInterface</type>).
+                The <type><link linkend="GInterfaceInfo">GInterfaceInfo</link></type> structure holds
+          information about the implementation of the interface:
+<programlisting>
+struct _GInterfaceInfo
+{
+  GInterfaceInitFunc     interface_init;
+  GInterfaceFinalizeFunc interface_finalize;
+  gpointer               interface_data;
+};
+</programlisting>
+        </para>
+
+        <sect2 id="gtype-non-instantiable-classed-init">
+          <title>Interface Initialization</title>
+
+          <para>
+            When an instantiable classed type which registered an interface 
+            implementation is created for the first time, its class structure 
+            is initialized following the process
+            described in <xref linkend="gtype-instantiable-classed"/>. 
+            After that, the interface implementations associated with
+            the type are initialized.
+          </para>
+
+          <para>
+            First a memory buffer is allocated to hold the interface structure. The parent's
+            interface structure is then copied over to the new interface structure (the parent
+            interface is already initialized at that point). If there is no parent interface,
+            the interface structure is initialized with zeros. The g_type and the g_instance_type
+            fields are then initialized: g_type is set to the type of the most-derived interface
+            and g_instance_type is set to the type of the most derived type which implements 
+            this interface.
+          </para>
+
+          <para>
+            Finally, the interface' most-derived <function>base_init</function> function and then 
+            the implementation's <function>interface_init</function>
+            function are invoked. It is important to understand that if there are multiple 
+            implementations of an interface the <function>base_init</function> and 
+            <function>interface_init</function> functions will be
+            invoked once for each implementation initialized.
+          </para>
+
+          <para>
+            It is thus common for base_init functions to hold a local static boolean variable
+            which makes sure that the interface type is initialized only once even if there are 
+            multiple implementations of the interface:
+<programlisting>
+static void
+maman_ibaz_base_init (gpointer g_iface)
+{
+  static gboolean initialized = FALSE;
+
+  if (!initialized) {
+    /* create interface signals here. */
+    initialized = TRUE;
+  }
+}
+</programlisting>
+          </para>
+
+        <para>
+          If you have found the stuff about interface hairy, you are right: it is hairy but
+          there is not much I can do about it. What I can do is summarize what you need to know
+          about interfaces:          
+        </para>
+
+          <para>
+            The above process can be summarized as follows:
+          <table id="ginterface-init-table">
+            <title>Interface Initialization</title>
+            <tgroup cols="3">
+              <colspec colwidth="*" colnum="1" align="left"/>
+              <colspec colwidth="*" colnum="2" align="left"/>
+              <colspec colwidth="8*" colnum="3" align="left"/>
+              
+              <thead>
+                <row>
+                  <entry>Invocation time</entry>
+                  <entry>Function Invoked</entry>
+                  <entry>Function's parameters</entry>
+                  <entry>Remark</entry>
+                </row>
+              </thead>
+              <tbody>
+                <row>
+                  <entry morerows="1">First call to <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> for type
+                    implementing interface
+                   </entry>
+                  <entry>interface' base_init function</entry>
+                  <entry>On interface' vtable</entry>
+                  <entry>Register interface' signals here (use a local static 
+                    boolean variable as described above to make sure not to register them
+                    twice.).</entry>
+                </row>
+                <row>
+                  <!--entry>First call to <function><link linkend="g-type-create-instance">g_type_create_instance</link></function> for type
+                    implementing interface
+                   </entry-->
+                  <entry>interface' interface_init function</entry>
+                  <entry>On interface' vtable</entry>
+                  <entry>
+                    Initialize interface' implementation. That is, initialize the interface 
+                    method pointers in the interface structure to the function's implementation.
+                  </entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </table>
+          It is highly unlikely (i.e. I do not know of <emphasis>anyone</emphasis> who actually 
+          used it) you will ever need other more fancy things such as the ones described in the
+          following section (<xref linkend="gtype-non-instantiable-classed-dest"/>).
+        </para>
+        
+        </sect2>
+        
+        <sect2 id="gtype-non-instantiable-classed-dest">
+          <title>Interface Destruction</title>
+
+          <para>
+            When the last instance of an instantiable type which registered 
+            an interface implementation is destroyed, the interface's 
+            implementations associated to the type are destroyed.
+          </para>
+
+          <para>
+            To destroy an interface implementation, GType first calls the 
+            implementation's <function>interface_finalize</function> function 
+            and then the interface's most-derived 
+            <function>base_finalize</function> function.
+          </para>
+
+          <para>
+            Again, it is important to understand, as in 
+            <xref linkend="gtype-non-instantiable-classed-init"/>,
+              that both <function>interface_finalize</function> and <function>base_finalize</function>
+              are invoked exactly once for the destruction of each implementation of an interface. Thus,
+              if you were to use one of these functions, you would need to use a static integer variable
+              which would hold the number of instances of implementations of an interface such that
+              the interface's class is destroyed only once (when the integer variable reaches zero).
+          </para>
+          
+        <para>
+          The above process can be summarized as follows:
+          <table id="ginterface-init-table">
+            <title>Interface Finalization</title>
+            <tgroup cols="3">
+              <colspec colwidth="*" colnum="1" align="left"/>
+              <colspec colwidth="*" colnum="2" align="left"/>
+              <colspec colwidth="8*" colnum="3" align="left"/>
+              
+              <thead>
+                <row>
+                  <entry>Invocation time</entry>
+                  <entry>Function Invoked</entry>
+                  <entry>Function's parameters</entry>
+                </row>
+              </thead>
+              <tbody>
+                <row>
+                  <entry morerows="1">Last call to <function><link linkend="g-type-free-instance">g_type_free_instance</link></function> for type
+                    implementing interface
+                   </entry>
+                  <entry>interface' interface_finalize function</entry>
+                  <entry>On interface' vtable</entry>
+                </row>
+                <row>
+                  <!--entry>Last call to <function><link linkend="g-type-free-instance">g_type_free_instance</link></function>for type
+                    implementing interface
+                   </entry-->
+                  <entry>interface' base_finalize function</entry>
+                  <entry>On interface' vtable</entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </table>
+        </para>
+      </sect2>
+    </sect1>
+  </chapter>
diff --git a/docs/reference/gobject/tut_howto.xml b/docs/reference/gobject/tut_howto.xml
new file mode 100644
index 0000000..319d951
--- /dev/null
+++ b/docs/reference/gobject/tut_howto.xml
@@ -0,0 +1,1715 @@
+<?xml version='1.0' encoding="ISO-8859-1"?>
+<partintro>
+  <para>
+    This chapter tries to answer the real-life questions of users and presents
+    the most common scenario use cases I could come up with.
+    The use cases are presented from most likely to less likely.
+  </para>
+</partintro>
+
+<chapter id="howto-gobject">
+  <title>How to define and implement a new GObject</title>
+  
+  <para>
+    Clearly, this is one of the most common questions people ask: they just
+    want to crank code and implement a subclass of a GObject. Sometimes because
+    they want to create their own class hierarchy, sometimes because they want
+    to subclass one of GTK+'s widget. This chapter will focus on the 
+    implementation of a subtype of GObject.
+  </para>
+
+  <sect1 id="howto-gobject-header">
+    <title>Boilerplate header code</title>
+    
+    <para>
+      The first step before writing the code for your GObject is to write the
+      type's header which contains the needed type, function and macro
+      definitions. Each of these elements is nothing but a convention which
+      is followed not only by GTK+'s code but also by most users of GObject.
+      If you feel the need not to obey the rules stated below, think about it
+      twice:
+      <itemizedlist>
+        <listitem><para>If your users are a bit accustomed to GTK+ code or any
+        GLib code, they will be a bit surprised and getting used to the
+        conventions you decided upon will take time (money) and will make them
+        grumpy (not a good thing)</para></listitem>
+        <listitem><para>You must assess the fact that these conventions might
+        have been designed by both smart and experienced people: maybe they
+        were at least partly right. Try  to put your ego aside.</para></listitem>
+      </itemizedlist>
+    </para>
+
+    <para>
+      Pick a name convention for your headers and source code and stick to it:
+      <itemizedlist>
+        <listitem><para>use a dash to separate the prefix from the typename:
+        <filename>maman-bar.h</filename> and <filename>maman-bar.c</filename>
+        (this is the convention used by Nautilus and most GNOME libraries).</para></listitem>
+        <listitem><para>use an underscore to separate the prefix from the
+        typename: <filename>maman_bar.h</filename> and
+        <filename>maman_bar.c</filename>.</para></listitem>
+        <listitem><para>Do not separate the prefix from the typename:
+        <filename>mamanbar.h</filename> and <filename>mamanbar.c</filename>.
+        (this is the convention used by GTK+)</para></listitem>
+      </itemizedlist>
+      I personally like the first solution better: it makes reading file names
+      easier for those with poor eyesight like me.
+    </para>
+
+    <para>
+      When you need some private (internal) declarations in several
+      (sub)classes, you can define them in a private header file which
+      is often named by appending the <emphasis>private</emphasis> keyword
+      to the public header name. For example, one could use
+      <filename>maman-bar-private.h</filename>,
+      <filename>maman_bar_private.h</filename> or
+      <filename>mamanbarprivate.h</filename>. Typically, such private header
+      files are not installed.
+    </para>
+
+    <para>
+      The basic conventions for any header which exposes a GType are described
+      in <xref linkend="gtype-conventions"/>. Most GObject-based code also
+      obeys one of of the following conventions: pick one and stick to it.
+      <itemizedlist>
+        <listitem><para>
+            If you want to declare a type named bar with prefix maman, name the type instance
+            <function>MamanBar</function> and its class <function>MamanBarClass</function>
+            (name is case-sensitive). It is customary to declare them with code similar to the 
+            following:
+<programlisting>
+/*
+ * Copyright/Licensing information.
+ */
+
+/* inclusion guard */
+#ifndef __MAMAN_BAR_H__
+#define __MAMAN_BAR_H__
+
+#include &lt;glib-object.h&gt;
+/*
+ * Potentially, include other headers on which this header depends.
+ */
+
+/*
+ * Type macros.
+ */
+#define MAMAN_TYPE_BAR                  (maman_bar_get_type ())
+#define MAMAN_BAR(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
+#define MAMAN_IS_BAR(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAR))
+#define MAMAN_BAR_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAR, MamanBarClass))
+#define MAMAN_IS_BAR_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAR))
+#define MAMAN_BAR_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAR, MamanBarClass))
+
+typedef struct _MamanBar        MamanBar;
+typedef struct _MamanBarClass   MamanBarClass;
+
+struct _MamanBar
+{
+  GObject parent_instance;
+
+  /* instance members */
+};
+
+struct _MamanBarClass
+{
+  GObjectClass parent_class;
+
+  /* class members */
+};
+
+/* used by MAMAN_TYPE_BAR */
+GType maman_bar_get_type (void);
+
+/*
+ * Method definitions.
+ */
+
+#endif /* __MAMAN_BAR_H__ */
+</programlisting>
+          </para></listitem>
+        <listitem><para>
+            Most GTK+ types declare their private fields in the public header
+            with a /* private */ comment, relying on their user's intelligence
+            not to try to play with these fields. Fields not marked private
+            are considered public by default. The /* protected */ comment
+            (same semantics as those of C++) is also used, mainly in the GType
+            library, in code written by Tim Janik.
+<programlisting>
+struct _MamanBar
+{
+  GObject parent_instance;
+
+  /*&lt; private &gt;*/
+  int hsize;
+};
+</programlisting>
+          </para></listitem>
+        <listitem><para>
+            All of Nautilus code and a lot of GNOME libraries use private
+            indirection members, as described by Herb Sutter in his Pimpl
+            articles(see <ulink url="http://www.gotw.ca/gotw/024.htm">Compilation Firewalls</ulink>
+            and <ulink url="http://www.gotw.ca/gotw/028.htm">The Fast Pimpl Idiom</ulink>:
+            he summarizes the different issues better than I will).
+<programlisting>
+typedef struct _MamanBarPrivate MamanBarPrivate;
+
+struct _MamanBar
+{
+  GObject parent_instance;
+    
+  /*&lt; private &gt;*/
+  MamanBarPrivate *priv;
+};
+</programlisting>
+            <note><simpara>Do not call this <varname>private</varname>, as
+            that is a registered c++ keyword.</simpara></note>
+
+            The private structure is then defined in the .c file, using the
+            g_type_class_add_private() function to notify the presence of
+            a private memory area for each instance and it can either
+            be retrieved using <function>G_TYPE_INSTANCE_GET_PRIVATE()</function>
+            each time is needed, or assigned to the <literal>priv</literal>
+            member of the instance structure inside the object's
+            <function>init</function> function.
+<programlisting>
+#define MAMAN_BAR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MAMAN_TYPE_BAR, MamanBarPrivate))
+
+struct _MamanBarPrivate
+{
+  int hsize;
+}
+
+static void
+maman_bar_class_init (MamanBarClass *klass)
+{
+  g_type_class_add_private (klass, sizeof (MamanBarPrivate));
+}
+
+static void
+maman_bar_init (MamanBar *self)
+{
+  MamanBarPrivate *priv;
+
+  self->priv = priv = MAMAN_BAR_GET_PRIVATE (self);
+
+  priv->hsize = 42;
+}
+</programlisting>
+          </para></listitem>
+
+          <listitem><para>
+            You don't need to free or allocate the private structure, only the
+            objects or pointers that it may contain. Another advantage of this
+            to the previous version is that is lessens memory fragmentation,
+            as the public and private parts of the instance memory are
+            allocated at once.
+          </para></listitem>
+      </itemizedlist>
+    </para>
+
+    <para>
+      Finally, there are different header include conventions. Again, pick one
+      and stick to it. I personally use indifferently any of the two, depending
+      on the codebase I work on: the rule, as always, is consistency.
+      <itemizedlist>
+        <listitem><para>
+            Some people add at the top of their headers a number of #include
+            directives to pull in all the headers needed to compile client
+            code. This allows client code to simply #include "maman-bar.h".
+          </para></listitem>
+        <listitem><para>
+            Other do not #include anything and expect the client to #include
+            themselves the headers they need before including your header. This
+            speeds up compilation because it minimizes the amount of
+            pre-processor work. This can be used in conjunction with the
+            re-declaration of certain unused types in the client code to
+            minimize compile-time dependencies and thus speed up compilation.
+          </para></listitem>
+      </itemizedlist>
+    </para>
+      
+  </sect1>
+
+  <sect1 id="howto-gobject-code">
+    <title>Boilerplate code</title>
+
+    <para>
+      In your code, the first step is to #include the needed headers: depending
+      on your header include strategy, this can be as simple as
+      <literal>#include "maman-bar.h"</literal> or as complicated as tens
+      of #include lines ending with <literal>#include "maman-bar.h"</literal>:
+<programlisting>
+/*
+ * Copyright information
+ */
+
+#include "maman-bar.h"
+
+/* If you use Pimpls, include the private structure 
+ * definition here. Some people create a maman-bar-private.h header
+ * which is included by the maman-bar.c file and which contains the
+ * definition for this private structure.
+ */
+struct _MamanBarPrivate {
+  int member_1;
+  /* stuff */
+};
+
+/* 
+ * forward definitions
+ */
+</programlisting>
+    </para>
+
+    <para>
+      Call the <function>G_DEFINE_TYPE</function> macro using the name
+      of the type, the prefix of the functions and the parent GType to
+      reduce the amount of boilerplate needed. This macro will:
+
+      <itemizedlist>
+        <listitem><simpara>implement the <function>maman_bar_get_type</function>
+        function</simpara></listitem>
+        <listitem><simpara>define a parent class pointer accessible from
+        the whole .c file</simpara></listitem>
+      </itemizedlist>
+
+<programlisting>
+G_DEFINE_TYPE (MamanBar, maman_bar, G_TYPE_OBJECT);
+</programlisting>
+    </para>
+
+    <para>
+      It is also possible to use the
+      <function>G_DEFINE_TYPE_WITH_CODE</function> macro to control the
+      get_type function implementation - for instance, to add a call to
+      <function>G_IMPLEMENT_INTERFACE</function> macro which will
+      call the <function>g_type_implement_interface</function> function.
+    </para>
+  </sect1>
+
+  <sect1 id="howto-gobject-construction">
+    <title>Object Construction</title>
+
+    <para>
+      People often get confused when trying to construct their GObjects because of the
+      sheer number of different ways to hook into the objects's construction process: it is
+      difficult to figure which is the <emphasis>correct</emphasis>, recommended way.
+    </para>
+
+    <para>
+      <xref linkend="gobject-construction-table"/> shows what user-provided functions
+      are invoked during object instantiation and in which order they are invoked.
+      A user looking for the equivalent of the simple C++ constructor function should use
+      the instance_init method. It will be invoked after all the parent's instance_init
+      functions have been invoked. It cannot take arbitrary construction parameters 
+      (as in C++) but if your object needs arbitrary parameters to complete initialization,
+      you can use construction properties.
+    </para>
+
+    <para>
+      Construction properties will be set only after all instance_init functions have run.
+      No object reference will be returned to the client of <function><link linkend="g-object-new">g_object_new</link></function>
+      until all the construction properties have been set.
+    </para>
+
+    <para>
+      As such, I would recommend writing the following code first:
+<programlisting>
+static void
+maman_bar_init (MamanBar *self)
+{
+  self->priv = MAMAN_BAR_GET_PRIVATE (self); 
+
+  /* initialize all public and private members to reasonable default values. */
+
+  /* If you need specific construction properties to complete initialization,
+   * delay initialization completion until the property is set. 
+   */
+}
+</programlisting>
+    </para>
+
+    <para>
+      Now, if you need special construction properties, install the properties in the class_init function,
+      override the set and get methods and implement the get and set methods as described in 
+      <xref linkend="gobject-properties"/>. Make sure that these properties use a construct only 
+      <type><link linkend="GParamSpec">GParamSpec</link></type> by setting the param spec's flag field to G_PARAM_CONSTRUCT_ONLY: this helps
+      GType ensure that these properties are not set again later by malicious user code.
+<programlisting>
+static void
+bar_class_init (MamanBarClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GParamSpec *maman_param_spec;
+
+  gobject_class->set_property = bar_set_property;
+  gobject_class->get_property = bar_get_property;
+
+  maman_param_spec = g_param_spec_string ("maman",
+                                          "Maman construct prop",
+                                          "Set maman's name",
+                                          "no-name-set" /* default value */,
+                                          G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+  g_object_class_install_property (gobject_class,
+                                   PROP_MAMAN,
+                                   maman_param_spec);
+}
+</programlisting>
+      If you need this, make sure you can build and run code similar to the code shown above. Make sure
+      your construct properties can set correctly during construction, make sure you cannot set them 
+      afterwards and make sure that if your users do not call <function><link linkend="g-object-new">g_object_new</link></function>
+      with the required construction properties, these will be initialized with the default values.
+    </para>
+
+    <para>
+      I consider good taste to halt program execution if a construction property is set its
+      default value. This allows you to catch client code which does not give a reasonable
+      value to the construction properties. Of course, you are free to disagree but you
+      should have a good reason to do so.
+    </para>
+
+    <para>
+      Some people sometimes need to construct their object but only after
+      the construction properties have been set. This is possible through
+      the use of the constructor class method as described in
+      <xref linkend="gobject-instantiation"/> or, more simply, using
+      the constructed class method available since GLib 2.12.
+    </para>
+  </sect1>
+
+  <sect1 id="howto-gobject-destruction">
+    <title>Object Destruction</title>
+
+    <para>
+      Again, it is often difficult to figure out which mechanism to use to
+      hook into the object's destruction process: when the last
+      <function><link linkend="g-object-unref">g_object_unref</link></function>
+      function call is made, a lot of things happen as described in
+      <xref linkend="gobject-destruction-table"/>.
+    </para>
+
+    <para>
+      The destruction process of your object might be split in two different
+      phases: dispose and the finalize.
+<programlisting>
+#define MAMAN_BAR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MAMAN_TYPE_BAR, MamanBarPrivate))
+
+struct _MamanBarPrivate
+{
+  GObject *an_object;
+
+  gchar *a_string;
+};
+
+G_DEFINE_TYPE (MamanBar, maman_bar, G_TYPE_OBJECT);
+
+static void
+maman_bar_dispose (GObject *gobject)
+{
+  MamanBar *self = MAMAN_BAR (gobject);
+
+  /* 
+   * In dispose, you are supposed to free all types referenced from this
+   * object which might themselves hold a reference to self. Generally,
+   * the most simple solution is to unref all members on which you own a 
+   * reference.
+   */
+
+  /* dispose might be called multiple times, so we must guard against
+   * calling g_object_unref() on an invalid GObject.
+   */
+  if (self->priv->an_object)
+    {
+      g_object_unref (self->priv->an_object);
+
+      self->priv->an_object = NULL;
+    }
+
+  /* Chain up to the parent class */
+  G_OBJECT_CLASS (maman_bar_parent_class)->dispose (gobject);
+}
+
+static void
+maman_bar_finalize (GObject *gobject)
+{
+  MamanBar *self = MAMAN_BAR (gobject);
+
+  g_free (self->priv->a_string);
+
+  /* Chain up to the parent class */
+  G_OBJECT_CLASS (maman_bar_parent_class)->finalize (gobject);
+}
+
+static void
+maman_bar_class_init (MamanBarClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->dispose = maman_bar_dispose;
+  gobject_class->finalize = maman_bar_finalize;
+
+  g_type_class_add_private (klass, sizeof (MamanBarPrivate));
+}
+
+static void
+maman_bar_init (MamanBar *self);
+{
+  self->priv = MAMAN_BAR_GET_PRIVATE (self);
+
+  self->priv->an_object = g_object_new (MAMAN_TYPE_BAZ, NULL);
+  self->priv->a_string = g_strdup ("Maman");
+}
+</programlisting>
+    </para>
+
+    <para>
+      Add similar code to your GObject, make sure the code still builds
+      and runs: dispose and finalize must be called during the last unref.
+    </para>
+
+    <para>
+      It is possible that object methods might be invoked after dispose is
+      run and before finalize runs. GObject does not consider this to be a
+      program error: you must gracefully detect this and neither crash nor
+      warn the user.
+    </para>
+  </sect1>
+
+  <sect1 id="howto-gobject-methods">
+    <title>Object methods</title>
+
+    <para>
+      Just as with C++, there are many different ways to define object
+      methods and extend them: the following list and sections draw on
+      C++ vocabulary. (Readers are expected to know basic C++ buzzwords.
+      Those who have not had to write C++ code recently can refer to e.g.
+      <ulink url="http://www.cplusplus.com/doc/tutorial/"/> to refresh
+      their memories.)
+      <itemizedlist>
+        <listitem><para>
+            non-virtual public methods,
+          </para></listitem>
+        <listitem><para>
+            virtual public methods and
+          </para></listitem>
+        <listitem><para>
+            virtual private methods
+          </para></listitem>
+      </itemizedlist>
+    </para>
+
+    <sect2>
+      <title>Non-virtual public methods</title>
+
+      <para>
+        These are the simplest: you want to provide a simple method which
+        can act on your object. All you need to do is to provide a function
+        prototype in the header and an implementation of that prototype
+        in the source file.
+<programlisting>
+/* declaration in the header. */
+void maman_bar_do_action (MamanBar *self, /* parameters */);
+
+/* implementation in the source file */
+void
+maman_bar_do_action (MamanBar *self, /* parameters */)
+{
+  g_return_if_fail (MAMAN_IS_BAR (self));
+
+  /* do stuff here. */
+}
+</programlisting>
+      </para>
+
+      <para>There is really nothing scary about this.</para>
+    </sect2>
+
+    <sect2>
+      <title>Virtual public methods</title>
+
+      <para>
+        This is the preferred way to create polymorphic GObjects. All you
+        need to do is to define the common method and its class function in
+        the public header, implement the common method in the source file
+        and re-implement the class function in each object which inherits
+        from you.
+<programlisting>
+/* declaration in maman-bar.h. */
+struct _MamanBarClass
+{
+  GObjectClass parent_class;
+
+  /* stuff */
+  void (*do_action) (MamanBar *self, /* parameters */);
+};
+
+void maman_bar_do_action (MamanBar *self, /* parameters */);
+
+/* implementation in maman-bar.c */
+void
+maman_bar_do_action (MamanBar *self, /* parameters */)
+{
+  g_return_if_fail (MAMAN_IS_BAR (self));
+
+  MAMAN_BAR_GET_CLASS (self)->do_action (self, /* parameters */);
+}
+</programlisting>
+        The code above simply redirects the do_action call to the relevant
+        class function. Some users, concerned about performance, do not
+        provide the <function>maman_bar_do_action</function> wrapper function
+        and require users to dereference the class pointer themselves. This
+        is not such a great idea in terms of encapsulation and makes it
+        difficult to change the object's implementation afterwards, should
+        this be needed.
+      </para>
+
+      <para>
+        Other users, also concerned by performance issues, declare
+        the <function>maman_bar_do_action</function> function inline in the
+        header file. This, however, makes it difficult to change the
+        object's implementation later (although easier than requiring users
+        to directly dereference the class function) and is often difficult
+        to write in a portable way (the <emphasis>inline</emphasis> keyword
+        is part of the C99 standard but not every compiler supports it).
+      </para>
+
+      <para>
+        In doubt, unless a user shows you hard numbers about the performance
+        cost of the function call, just implement <function>maman_bar_do_action</function>
+        in the source file.
+      </para>
+
+      <para>
+        Please, note that it is possible for you to provide a default
+        implementation for this class method in the object's
+        <function>class_init</function> function: initialize the
+        klass-&gt;do_action field to a pointer to the actual implementation.
+        You can also make this class method pure virtual by initializing
+        the klass-&gt;do_action field to NULL:
+<programlisting>
+static void
+maman_bar_real_do_action_two (MamanBar *self, /* parameters */)
+{
+  /* Default implementation for the virtual method. */
+}
+
+static void
+maman_bar_class_init (BarClass *klass)
+{
+  /* pure virtual method: mandates implementation in children. */
+  klass->do_action_one = NULL;
+
+  /* merely virtual method. */
+  klass->do_action_two = maman_bar_real_do_action_two;
+}
+
+void
+maman_bar_do_action_one (MamanBar *self, /* parameters */)
+{
+  g_return_if_fail (MAMAN_IS_BAR (self));
+
+  MAMAN_BAR_GET_CLASS (self)->do_action_one (self, /* parameters */);
+}
+
+void
+maman_bar_do_action_two (MamanBar *self, /* parameters */)
+{
+  g_return_if_fail (MAMAN_IS_BAR (self));
+
+  MAMAN_BAR_GET_CLASS (self)->do_action_two (self, /* parameters */);
+}
+</programlisting>
+      </para>
+    </sect2>
+
+    <sect2>
+      <title>Virtual private Methods</title>
+
+      <para>
+        These are very similar to Virtual Public methods. They just don't
+        have a public function to call the function directly. The header
+        file contains only a declaration of the class function:
+<programlisting>
+/* declaration in maman-bar.h. */
+struct _MamanBarClass
+{
+  GObjectClass parent;
+
+  /* stuff */
+  void (* helper_do_specific_action) (MamanBar *self, /* parameters */);
+};
+
+void maman_bar_do_any_action (MamanBar *self, /* parameters */);
+</programlisting>
+        These class functions are often used to delegate part of the job
+        to child classes:
+<programlisting>
+/* this accessor function is static: it is not exported outside of this file. */
+static void 
+maman_bar_do_specific_action (MamanBar *self, /* parameters */)
+{
+  MAMAN_BAR_GET_CLASS (self)->do_specific_action (self, /* parameters */);
+}
+
+void
+maman_bar_do_any_action (MamanBar *self, /* parameters */)
+{
+  /* random code here */
+
+  /* 
+   * Try to execute the requested action. Maybe the requested action
+   * cannot be implemented here. So, we delegate its implementation
+   * to the child class:
+   */
+  maman_bar_do_specific_action (self, /* parameters */);
+
+  /* other random code here */
+}
+</programlisting>
+      </para>
+
+      <para>
+        Again, it is possible to provide a default implementation for this
+        private virtual class function:
+<programlisting>
+static void
+maman_bar_class_init (MamanBarClass *klass)
+{
+  /* pure virtual method: mandates implementation in children. */
+  klass->do_specific_action_one = NULL;
+
+  /* merely virtual method. */
+  klass->do_specific_action_two = maman_bar_real_do_specific_action_two;
+}
+</programlisting>
+      </para>
+
+      <para>
+        Children can then implement the subclass with code such as:
+<programlisting>
+static void
+maman_bar_subtype_class_init (MamanBarSubTypeClass *klass)
+{
+  MamanBarClass *bar_class = MAMAN_BAR_CLASS (klass);
+
+  /* implement pure virtual class function. */
+  bar_class->do_specific_action_one = maman_bar_subtype_do_specific_action_one;
+}
+</programlisting>
+      </para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="howto-gobject-chainup">
+    <title>Chaining up</title>
+    
+    <para>Chaining up is often loosely defined by the following set of
+    conditions:
+      <itemizedlist>
+        <listitem><para>Parent class A defines a public virtual method named <function>foo</function> and 
+        provides a default implementation.</para></listitem>
+        <listitem><para>Child class B re-implements method <function>foo</function>.</para></listitem>
+        <listitem><para>In the method B::foo, the child class B calls its parent class method A::foo.</para></listitem>
+      </itemizedlist>
+      There are many uses to this idiom:
+      <itemizedlist>
+        <listitem><para>You need to change the behaviour of a class without modifying its code. You create
+          a subclass to inherit its implementation, re-implement a public virtual method to modify the behaviour
+          slightly and chain up to ensure that the previous behaviour is not really modified, just extended.
+          </para></listitem>
+        <listitem><para>You are lazy, you have access to the source code of the parent class but you don't want 
+          to modify it to add method calls to new specialized method calls: it is faster to hack the child class
+          to chain up than to modify the parent to call down.</para></listitem>
+        <listitem><para>You need to implement the Chain Of Responsibility pattern: each object of the inheritance
+          tree chains up to its parent (typically, at the beginning or the end of the method) to ensure that
+          they each handler is run in turn.</para></listitem>
+      </itemizedlist>
+      I am personally not really convinced any of the last two uses are really a good idea but since this
+      programming idiom is often used, this section attempts to explain how to implement it.
+    </para>
+
+    <para>
+      To explicitly chain up to the implementation of the virtual method in the parent class, 
+      you first need a handle to the original parent class structure. This pointer can then be used to 
+      access the original class function pointer and invoke it directly.
+      <footnote>
+        <para>
+          The <emphasis>original</emphasis> adjective used in this sentence is not innocuous. To fully 
+          understand its meaning, you need to recall how class structures are initialized: for each object type,
+          the class structure associated to this object is created by first copying the class structure of its 
+          parent type (a simple <function>memcpy</function>) and then by invoking the class_init callback on 
+          the resulting class structure. Since the class_init callback is responsible for overwriting the class structure
+          with the user re-implementations of the class methods, we cannot merely use the modified copy of the parent class
+          structure stored in our derived instance. We want to get a copy of the class structure of an instance of the parent 
+          class.
+        </para>
+      </footnote>
+    </para>
+    
+    <para>The function <function><link linkend="g-type-class-peek-parent">g_type_class_peek_parent</link></function> is used to access the original parent 
+    class structure. Its input is a pointer to the class of the derived object and it returns a pointer
+    to the original parent class structure. The code below shows how you could use it:
+<programlisting>
+static void
+b_method_to_call (B *obj, int a)
+{
+  BClass *klass;
+  AClass *parent_class;
+
+  klass = B_GET_CLASS (obj);
+  parent_class = g_type_class_peek_parent (klass);
+
+  /* do stuff before chain up */
+
+  parent_class->method_to_call (obj, a);
+
+  /* do stuff after chain up */
+}
+</programlisting>
+  </para>
+
+  </sect1>
+
+</chapter>
+<!-- End Howto GObject -->
+
+<chapter id="howto-interface">
+  <title>How to define and implement interfaces</title>
+
+  <sect1 id="howto-interface-define">
+    <title>How to define interfaces</title>
+  
+  <para>
+    The bulk of interface definition has already been shown in <xref linkend="gtype-non-instantiable-classed"/>
+    but I feel it is needed to show exactly how to create an interface.
+  </para>
+
+  <para>
+    As above, the first step is to get the header right:
+<programlisting>
+#ifndef __MAMAN_IBAZ_H__
+#define __MAMAN_IBAZ_H__
+
+#include &lt;glib-object.h&gt;
+
+#define MAMAN_TYPE_IBAZ                 (maman_ibaz_get_type ())
+#define MAMAN_IBAZ(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_IBAZ, MamanIbaz))
+#define MAMAN_IS_IBAZ(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_IBAZ))
+#define MAMAN_IBAZ_GET_INTERFACE(inst)  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), MAMAN_TYPE_IBAZ, MamanIbazInterface))
+
+
+typedef struct _MamanIbaz               MamanIbaz; /* dummy object */
+typedef struct _MamanIbazInterface      MamanIbazInterface;
+
+struct _MamanIbazInterface
+{
+  GTypeInterface parent_iface;
+
+  void (*do_action) (MamanIbaz *self);
+};
+
+GType maman_ibaz_get_type (void);
+
+void maman_ibaz_do_action (MamanIbaz *self);
+
+#endif /* __MAMAN_IBAZ_H__ */
+</programlisting>
+    This code is the same as the code for a normal <type><link linkend="GType">GType</link></type>
+    which derives from a <type><link linkend="GObject">GObject</link></type> except for a few details:
+    <itemizedlist>
+      <listitem><para>
+        The <function>_GET_CLASS</function> macro is called <function>_GET_INTERFACE</function>
+                  and not implemented with <function><link linkend="G_TYPE_INSTANCE_GET_CLASS">G_TYPE_INSTANCE_GET_CLASS</link></function>
+                  but with <function><link linkend="G_TYPE_INSTANCE_GET_INTERFACE">G_TYPE_INSTANCE_GET_INTERFACE</link></function>.
+      </para></listitem>
+      <listitem><para>
+        The instance type, <type>MamanIbaz</type> is not fully defined: it is
+        used merely as an abstract type which represents an instance of
+        whatever object which implements the interface.
+      </para></listitem>
+      <listitem><para>
+        The parent of the <type>MamanIbazInterface</type> is not
+        <type>GObjectClass</type> but <type>GTypeInterface</type>.
+      </para></listitem>
+    </itemizedlist>
+  </para>
+
+  <para>
+    The implementation of the <type>MamanIbaz</type> type itself is trivial:
+    <itemizedlist>
+      <listitem><para><function>maman_ibaz_get_type</function> registers the
+       type in the type system.
+       </para></listitem>
+      <listitem><para><function>maman_ibaz_base_init</function> is expected 
+      to register the interface's signals if there are any (we will see a bit
+      (later how to use them). Make sure to use a static local boolean variable
+      to make sure not to run the initialization code twice (as described in
+      <xref linkend="gtype-non-instantiable-classed-init"/>, 
+      <function>base_init</function> is run once for each interface implementation 
+      instantiation)</para></listitem>
+      <listitem><para><function>maman_ibaz_do_action</function> dereferences
+      the class structure to access its associated class function and calls it.
+      </para></listitem>
+    </itemizedlist>
+<programlisting>
+static void
+maman_ibaz_base_init (gpointer g_class)
+{
+  static gboolean is_initialized = FALSE;
+
+  if (!is_initialized)
+    {
+      /* add properties and signals to the interface here */
+
+      is_initialized = TRUE;
+    }
+}
+
+GType
+maman_ibaz_get_type (void)
+{
+  static GType iface_type = 0;
+  if (iface_type == 0)
+    {
+      static const GTypeInfo info = {
+        sizeof (MamanIbazInterface),
+        maman_ibaz_base_init,   /* base_init */
+        NULL,   /* base_finalize */
+      };
+
+      iface_type = g_type_register_static (G_TYPE_INTERFACE, "MamanIbaz",
+                                           &amp;info, 0);
+    }
+
+  return iface_type;
+}
+
+void
+maman_ibaz_do_action (MamanIbaz *self)
+{
+  g_return_if_fail (MAMAN_IS_IBAZ (self));
+
+  MAMAN_IBAZ_GET_INTERFACE (self)->do_action (self);
+}
+</programlisting>
+    </para>
+  </sect1>
+  
+  <sect1 id="howto-interface-implement">
+    <title>How To define implement an Interface?</title>
+  
+    <para>
+      Once the interface is defined, implementing it is rather trivial.
+    </para>
+  
+    <para>
+      The first step is to define a normal GObject class, like:
+<programlisting>
+#ifndef __MAMAN_BAZ_H__
+#define __MAMAN_BAZ_H__
+
+#include &lt;glib-object.h&gt;
+
+#define MAMAN_TYPE_BAZ             (maman_baz_get_type ())
+#define MAMAN_BAZ(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAZ, Mamanbaz))
+#define MAMAN_IS_BAZ(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAZ))
+#define MAMAN_BAZ_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAZ, MamanbazClass))
+#define MAMAN_IS_BAZ_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAZ))
+#define MAMAN_BAZ_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAZ, MamanbazClass))
+
+
+typedef struct _MamanBaz        MamanBaz;
+typedef struct _MamanBazClass   MamanBazClass;
+
+struct _MamanBaz
+{
+  GObject parent_instance;
+
+  int instance_member;
+};
+
+struct _MamanBazClass
+{
+  GObjectClass parent_class;
+};
+
+GType maman_baz_get_type (void);
+
+#endif /* __MAMAN_BAZ_H__ */
+</programlisting>
+      There is clearly nothing specifically weird or scary about this header:
+      it does not define any weird API or derives from a weird type.
+    </para>
+  
+    <para>
+      The second step is to implement <type>MamanBaz</type> by defining
+      its GType. Instead of using <function>G_DEFINE_TYPE</function> we
+      use <function>G_DEFINE_TYPE_WITH_CODE</function> and the
+      <function>G_IMPLEMENT_INTERFACE</function> macros.
+<programlisting>
+static void maman_ibaz_interface_init (MamanIbazInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MamanBar, maman_bar, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (MAMAN_TYPE_IBAZ,
+                                                maman_ibaz_interface_init));
+</programlisting>
+      This definition is very much like all the similar functions we looked
+      at previously. The only interface-specific code present here is the call
+      to <function>G_IMPLEMENT_INTERFACE</function>. 
+    </para>
+
+    <note><para>Classes can implement multiple interfaces by using multiple
+    calls to <function>G_IMPLEMENT_INTERFACE</function> inside the call
+    to <function>G_DEFINE_TYPE_WITH_CODE</function>.</para></note>
+  
+    <para>
+      <function>maman_baz_interface_init</function>, the interface
+      initialization function: inside it every virtual method of the interface
+      must be assigned to its implementation:
+<programlisting>
+static void
+maman_baz_do_action (MamanBaz *self)
+{
+  g_print ("Baz implementation of IBaz interface Action: 0x%x.\n",
+           self->instance_member);
+}
+
+static void
+maman_ibaz_interface_init (MamanIbazInterface *iface)
+{
+  iface->do_action = baz_do_action;
+}
+
+static void
+maman_baz_init (MamanBaz *self)
+{
+  MamanBaz *self = MAMAN_BAZ (instance);
+  self->instance_member = 0xdeadbeaf;
+}
+</programlisting>
+    </para>
+  
+  </sect1>
+  
+  <sect1>
+    <title>Interface definition prerequisites</title>
+  
+    <para>
+      To specify that an interface requires the presence of other interfaces
+      when implemented, GObject introduces the concept of
+      <emphasis>prerequisites</emphasis>: it is possible to associate
+      a list of prerequisite interfaces to an interface. For example, if
+      object A wishes to implement interface I1, and if interface I1 has a
+      prerequisite on interface I2, A has to implement both I1 and I2.
+    </para>
+  
+    <para>
+      The mechanism described above is, in practice, very similar to
+      Java's interface I1 extends interface I2. The example below shows
+      the GObject equivalent:
+<programlisting>
+  /* inside the GType function of the MamanIbar interface */
+  type = g_type_register_static (G_TYPE_INTERFACE, "MamanIbar", &amp;info, 0);
+
+  /* Make the MamanIbar interface require MamanIbaz interface. */
+  g_type_interface_add_prerequisite (type, MAMAN_TYPE_IBAZ);
+</programlisting>
+      The code shown above adds the MamanIbaz interface to the list of
+      prerequisites of MamanIbar while the code below shows how an
+      implementation can implement both interfaces and register their
+      implementations:
+<programlisting>
+static void
+maman_ibar_do_another_action (MamanIbar *ibar)
+{
+  MamanBar *self = MAMAN_BAR (ibar);
+
+  g_print ("Bar implementation of IBar interface Another Action: 0x%x.\n",
+           self->instance_member);
+}
+
+static void
+maman_ibar_interface_init (MamanIbarInterface *iface)
+{
+  iface->do_another_action = maman_ibar_do_another_action;
+}
+
+static void
+maman_ibaz_do_action (MamanIbaz *ibaz)
+{
+  MamanBar *self = MAMAN_BAR (ibaz);
+
+  g_print ("Bar implementation of IBaz interface Action: 0x%x.\n",
+           self->instance_member);
+}
+
+static void
+maman_ibaz_interface_init (MamanIbazInterface *iface)
+{
+  iface->do_action = maman_ibaz_do_action;
+}
+
+static void
+maman_bar_class_init (MamanBarClass *klass)
+{
+
+}
+
+static void
+maman_bar_init (MamanBar *self)
+{
+  self->instance_member = 0x666;
+}
+
+G_DEFINE_TYPE_WITH_CODE (MamanBar, maman_bar, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (MAMAN_TYPE_IBAZ,
+                                                maman_ibaz_interface_init)
+                         G_IMPLEMENT_INTERFACE (MAMAN_TYPE_IBAR,
+                                                maman_ibar_interface_init));
+</programlisting>
+      It is very important to notice that the order in which interface
+      implementations are added to the main object is not random:
+      <function><link linkend="g-type-add-interface-static">g_type_add_interface_static</link></function>,
+      which is called by <function>G_IMPLEMENT_INTERFACE</function>, must be
+      invoked first on the interfaces which have no prerequisites and then on
+      the others.
+    </para>
+  </sect1>
+  
+  <sect1 id="howto-interface-properties">
+    <title>Interface Properties</title>
+  
+    <para>
+      Starting from version 2.4 of GLib, GObject interfaces can also have
+      properties. Declaration of the interface properties is similar to
+      declaring the properties of ordinary GObject types as explained in
+      <xref linkend="gobject-properties"/>, 
+      except that <function><link linkend="g-object-interface-install-property">g_object_interface_install_property</link></function> is used to 
+      declare the properties instead of <function><link linkend="g-object-class-install-property">g_object_class_install_property</link></function>.
+    </para>
+  
+    <para>
+      To include a property named 'name' of type <type>string</type> in the 
+      <type>maman_ibaz</type> interface example code above, we only need to
+      add one 
+      <footnote>
+        <para>
+          That really is one line extended to six for the sake of clarity
+        </para>
+      </footnote>  
+      line in the <function>maman_ibaz_base_init</function>
+      <footnote>
+        <para>
+          The <function><link linkend="g-object-interface-install-property">g_object_interface_install_property</link></function>
+          can also be called from <function>class_init</function> but it must
+          not be called after that point.
+        </para>
+      </footnote>
+      as shown below:
+<programlisting>
+static void
+maman_ibaz_base_init (gpointer g_iface)
+{
+  static gboolean is_initialized = FALSE;
+
+  if (!is_initialized)
+    {
+      g_object_interface_install_property (g_iface,
+                                           g_param_spec_string ("name",
+                                                                "Name",
+                                                                "Name of the MamanIbaz",
+                                                                "maman",
+                                                                G_PARAM_READWRITE));
+      is_initialized = TRUE;
+    }
+}
+</programlisting>
+    </para>
+  
+    <para>
+      One point worth noting is that the declared property wasn't assigned an 
+      integer ID. The reason being that integer IDs of properties are used
+      only inside the get and set methods and since interfaces do not
+      implement properties, there is no need to assign integer IDs to
+      interface properties.
+    </para>
+    
+    <para>
+      An implementation shall declare and define it's properties in the usual
+      way as explained in <xref linkend="gobject-properties"/>, except for one
+      small change: it must declare the properties of the interface it
+      implements using <function><link linkend="g-object-class-override-property">g_object_class_override_property</link></function>
+      instead of <function><link linkend="g-object-class-install-property">g_object_class_install_property</link></function>.
+      The following code snippet shows the modifications needed in the
+      <type>MamanBaz</type> declaration and implementation above:
+<programlisting>
+
+struct _MamanBaz
+{
+  GObject parent_instance;
+
+  gint instance_member;
+  gchar *name;
+};
+
+enum
+{
+  PROP_0,
+
+  PROP_NAME
+};
+
+static void
+maman_baz_set_property (GObject      *object,
+                        guint         property_id,
+                        const GValue *value,
+                        GParamSpec   *pspec)
+{
+  MamanBaz *baz = MAMAN_BAZ (object);
+  GObject *obj;
+
+  switch (prop_id)
+    {
+    case ARG_NAME:
+      g_free (baz->name);
+      baz->name = g_value_dup_string (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+maman_baz_get_property (GObject    *object,
+                        guint       prop_id,
+                        GValue     *value,
+                        GParamSpec *pspec)
+{
+  MamanBaz *baz = MAMAN_BAZ (object);
+
+  switch (prop_id)
+    {
+    case ARG_NAME:
+      g_value_set_string (value, baz->name);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+maman_baz_class_init (MamanBazClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property = maman_baz_set_property;
+  gobject_class->get_property = maman_baz_get_property;
+
+  g_object_class_override_property (gobject_class, PROP_NAME, "name");
+}
+
+</programlisting>
+    </para>
+  
+  </sect1>
+</chapter>
+<!-- End Howto Interfaces -->
+
+<chapter id="howto-signals">
+  <title>How to create and use signals</title>
+
+  <para>
+    The signal system which was built in GType is pretty complex and
+    flexible: it is possible for its users to connect at runtime any
+    number of callbacks (implemented in any language for which a binding
+    exists)
+    <footnote>
+      <para>A Python callback can be connected to any signal on any
+      C-based GObject.
+      </para>
+    </footnote>
+    to any signal and to stop the emission of any signal at any 
+    state of the signal emission process. This flexibility makes it
+    possible to use GSignal for much more than just emit signals which
+    can be received by numerous clients. 
+  </para>
+
+  <sect1 id="howto-simple-signals">
+    <title>Simple use of signals</title>
+
+    <para>
+      The most basic use of signals is to implement simple event
+      notification: for example, if we have a MamanFile object, and
+      if this object has a write method, we might wish to be notified
+      whenever someone has changed something via our MamanFile instance.
+      The code below shows how the user can connect a callback to the
+      "changed" signal.
+<programlisting>
+file = g_object_new (MAMAN_FILE_TYPE, NULL);
+
+g_signal_connect (file, "changed", G_CALLBACK (changed_event), NULL);
+
+maman_file_write (file, buffer, strlen (buffer));
+</programlisting>
+    </para>
+    
+    <para>
+      The <type>MamanFile</type> signal is registered in the class_init
+      function:
+<programlisting>
+file_signals[CHANGED] = 
+  g_signal_newv ("changed",
+                 G_TYPE_FROM_CLASS (gobject_class),
+                 G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+                 NULL /* closure */,
+                 NULL /* accumulator */,
+                 NULL /* accumulator data */,
+                 g_cclosure_marshal_VOID__VOID,
+                 G_TYPE_NONE /* return_type */,
+                 0     /* n_params */,
+                 NULL  /* param_types */);
+</programlisting>
+      and the signal is emitted in <function>maman_file_write</function>:
+<programlisting>
+void
+maman_file_write (MamanFile    *self,
+                  const guchar *buffer,
+                  gssize        size)
+{
+  /* First write data. */
+
+  /* Then, notify user of data written. */
+  g_signal_emit (self, file_signals[CHANGED], 0 /* details */);
+}
+</programlisting>
+      As shown above, you can safely set the details parameter to zero if
+      you do not know what it can be used for. For a discussion of what you
+      could used it for, see <xref linkend="signal-detail"/>
+    </para>
+
+    <para>
+      The signature of the signal handler in the above example is defined as
+      <function>g_cclosure_marshal_VOID__VOID</function>. Its name follows
+      a simple convention which encodes the function parameter and return value
+      types in the function name. Specifically, the value in front of the
+      double underscore is the type of the return value, while the value(s)
+      after the double underscore denote the parameter types.
+    </para>
+
+    <para>
+      The header <filename>gobject/gmarshal.h</filename> defines a set of
+      commonly needed closures that one can use. If you want to have complex
+      marshallers for your signals you should probably use glib-genmarshal
+      to autogenerate them from a file containing their return and
+      parameter types.
+    </para>
+  </sect1>
+
+<!-- 
+  this is utterly wrong and should be completely removed - or rewritten
+  with a better example than writing a buffer using synchronous signals.
+
+  <sect1>
+    <title>How to provide more flexibility to users?</title>
+
+    <para>
+      The previous implementation does the job but the signal facility of
+      GObject can be used to provide even more flexibility to this file
+      change notification mechanism. One of the key ideas is to make the
+      process of writing data to the file part of the signal emission
+      process to allow users to be notified either before or after the
+      data is written to the file.
+    </para>
+    
+    <para>
+      To integrate the process of writing the data to the file into the
+      signal emission mechanism, we can register a default class closure
+      for this signal which will be invoked during the signal emission,
+      just like any other user-connected signal handler. 
+    </para>
+    
+    <para>
+      The first step to implement this idea is to change the signature of
+      the signal: we need to pass around the buffer to write and its size.
+      To do this, we use our own marshaller which will be generated
+      through GLib's glib-genmarshal tool. We thus create a file named <filename>marshall.list</filename> which contains
+      the following single line:
+<programlisting>
+VOID:POINTER,UINT
+</programlisting>
+      and use the Makefile provided in <filename>sample/signal/Makefile</filename> to generate the file named
+      <filename>maman-file-complex-marshall.c</filename>. This C file is finally included in 
+      <filename>maman-file-complex.c</filename>.
+    </para>
+
+    <para>
+      Once the marshaller is present, we register the signal and its marshaller in the class_init function 
+      of the object <type>MamanFileComplex</type> (full source for this object is included in 
+      <filename>sample/signal/maman-file-complex.{h|c}</filename>):
+<programlisting>
+GClosure *default_closure;
+GType param_types[2];
+
+default_closure = g_cclosure_new (G_CALLBACK (default_write_signal_handler),
+                                  (gpointer)0xdeadbeaf /* user_data */, 
+                                  NULL /* destroy_data */);
+
+param_types[0] = G_TYPE_POINTER;
+param_types[1] = G_TYPE_UINT;
+klass->write_signal_id = 
+  g_signal_newv ("write",
+                 G_TYPE_FROM_CLASS (g_class),
+                 G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+                 default_closure /* class closure */,
+                 NULL /* accumulator */,
+                 NULL /* accu_data */,
+                 maman_file_complex_VOID__POINTER_UINT,
+                 G_TYPE_NONE /* return_type */,
+                 2     /* n_params */,
+                 param_types /* param_types */);
+</programlisting>
+      The code shown above first creates the closure which contains the code to complete the file write. This
+      closure is registered as the default class_closure of the newly created signal.
+    </para>
+
+    <para>
+      Of course, you need to implement completely the code for the default closure since I just provided
+      a skeleton:
+<programlisting>
+static void
+default_write_signal_handler (GObject *obj, guint8 *buffer, guint size, gpointer user_data)
+{
+  g_assert (user_data == (gpointer)0xdeadbeaf);
+  /* Here, we trigger the real file write. */
+  g_print ("default signal handler: 0x%x %u\n", buffer, size);
+}
+</programlisting>
+    </para>
+
+    <para>
+      Finally, the client code must invoke the <function>maman_file_complex_write</function> function which 
+      triggers the signal emission:
+<programlisting>
+void maman_file_complex_write (MamanFileComplex *self, guint8 *buffer, guint size)
+{
+  /* trigger event */
+  g_signal_emit (self,
+                 MAMAN_FILE_COMPLEX_GET_CLASS (self)->write_signal_id,
+                 0, /* details */
+                 buffer, size);
+}
+</programlisting>
+    </para>
+    
+    <para>
+      The client code (as shown in <filename>sample/signal/test.c</filename> and below) can now connect signal handlers before 
+      and after the file write is completed: since the default signal handler which does the write itself runs during the 
+      RUN_LAST phase of the signal emission, it will run after all handlers connected with <function><link linkend="g-signal-connect">g_signal_connect</link></function>
+      and before all handlers connected with <function><link linkend="g-signal-connect-after">g_signal_connect_after</link></function>. If you intent to write a GObject
+      which emits signals, I would thus urge you to create all your signals with the G_SIGNAL_RUN_LAST such that your users
+      have a maximum of flexibility as to when to get the event. Here, we combined it with G_SIGNAL_NO_RECURSE and 
+      G_SIGNAL_NO_HOOKS to ensure our users will not try to do really weird things with our GObject. I strongly advise you
+      to do the same unless you really know why (in which case you really know the inner workings of GSignal by heart and
+      you are not reading this).
+    </para>
+    
+    <para>
+<programlisting>
+static void complex_write_event_before (GObject *file, guint8 *buffer, guint size, gpointer user_data)
+{
+  g_assert (user_data == NULL);
+  g_print ("Complex Write event before: 0x%x, %u\n", buffer, size);
+}
+
+static void complex_write_event_after (GObject *file, guint8 *buffer, guint size, gpointer user_data)
+{
+  g_assert (user_data == NULL);
+  g_print ("Complex Write event after: 0x%x, %u\n", buffer, size);
+}
+
+static void test_file_complex (void)
+{
+  guint8 buffer[100];
+  GObject *file;
+
+  file = g_object_new (MAMAN_FILE_COMPLEX_TYPE, NULL);
+
+  g_signal_connect (G_OBJECT (file), "write",
+                    (GCallback)complex_write_event_before,
+                    NULL);
+
+  g_signal_connect_after (G_OBJECT (file), "write",
+                          (GCallback)complex_write_event_after,
+                          NULL);
+
+  maman_file_complex_write (MAMAN_FILE_COMPLEX (file), buffer, 50);
+
+  g_object_unref (G_OBJECT (file));
+}
+</programlisting>
+      The code above generates the following output on my machine:
+<programlisting>
+Complex Write event before: 0xbfffe280, 50
+default signal handler: 0xbfffe280 50
+Complex Write event after: 0xbfffe280, 50
+</programlisting>
+    </para>
+
+-->
+
+<!--
+  this is also utterly wrong on so many levels that I don't even want
+  to enumerate them. it's also full of completely irrelevant footnotes
+  about personal preferences demonstrating a severe lack of whatsoever
+  clue. the whole idea of storing the signal ids inside the Class
+  structure is so fundamentally flawed that I'll require a frontal
+  lobotomy just to forget I've ever seen it.
+
+    <sect2>
+    <title>How most people do the same thing with less code</title>
+    
+      <para>For many historic reasons related to how the ancestor of GObject used to work in GTK+ 1.x versions,
+        there is a much <emphasis>simpler</emphasis> 
+        <footnote>
+          <para>I personally think that this method is horribly mind-twisting: it adds a new indirection
+          which unnecessarily complicates the overall code path. However, because this method is widely used
+          by all of GTK+ and GObject code, readers need to understand it. The reason why this is done that way
+          in most of GTK+ is related to the fact that the ancestor of GObject did not provide any other way to
+          create a signal with a default handler than this one. Some people have tried to justify that it is done
+          that way because it is better, faster (I am extremely doubtful about the faster bit. As a matter of fact,
+          the better bit also mystifies me ;-). I have the feeling no one really knows and everyone does it
+          because they copy/pasted code from code which did the same. It is probably better to leave this 
+          specific trivia to hacker legends domain...
+          </para>
+        </footnote>
+        way to create a signal with a default handler than to create 
+        a closure by hand and to use the <function><link linkend="g-signal-newv">g_signal_newv</link></function>.
+      </para>
+    
+      <para>For example, <function><link linkend="g-signal-new">g_signal_new</link></function> can be used to create a signal which uses a default 
+        handler which is stored in the class structure of the object. More specifically, the class structure 
+        contains a function pointer which is accessed during signal emission to invoke the default handler and
+        the user is expected to provide to <function><link linkend="g-signal-new">g_signal_new</link></function> the offset from the start of the
+        class structure to the function pointer.
+          <footnote>
+            <para>I would like to point out here that the reason why the default handler of a signal is named everywhere
+             a class_closure is probably related to the fact that it used to be really a function pointer stored in
+             the class structure.
+            </para>
+          </footnote>
+      </para>
+    
+      <para>The following code shows the declaration of the <type>MamanFileSimple</type> class structure which contains
+        the <function>write</function> function pointer.
+<programlisting>
+struct _MamanFileSimpleClass {
+  GObjectClass parent;
+        
+  guint write_signal_id;
+
+  /* signal default handlers */
+  void (*write) (MamanFileSimple *self, guint8 *buffer, guint size);
+};
+</programlisting>
+        The <function>write</function> function pointer is initialized in the class_init function of the object
+        to <function>default_write_signal_handler</function>:
+<programlisting>
+static void
+maman_file_simple_class_init (gpointer g_class,
+                               gpointer g_class_data)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
+  MamanFileSimpleClass *klass = MAMAN_FILE_SIMPLE_CLASS (g_class);
+
+  klass->write = default_write_signal_handler;
+</programlisting>
+        Finally, the signal is created with <function><link linkend="g-signal-new">g_signal_new</link></function> in the same class_init function:
+<programlisting>
+klass->write_signal_id = 
+ g_signal_new ("write",
+               G_TYPE_FROM_CLASS (g_class),
+               G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+               G_STRUCT_OFFSET (MamanFileSimpleClass, write),
+               NULL /* accumulator */,
+               NULL /* accu_data */,
+               maman_file_complex_VOID__POINTER_UINT,
+               G_TYPE_NONE /* return_type */,
+               2     /* n_params */,
+               G_TYPE_POINTER,
+               G_TYPE_UINT);
+</programlisting>
+        Of note, here, is the 4th argument to the function: it is an integer calculated by the <function><link linkend="G-STRUCT-OFFSET">G_STRUCT_OFFSET</link></function>
+        macro which indicates the offset of the member <emphasis>write</emphasis> from the start of the 
+        <type>MamanFileSimpleClass</type> class structure.
+        <footnote>
+          <para>GSignal uses this offset to create a special wrapper closure 
+           which first retrieves the target function pointer before calling it.
+          </para>
+        </footnote>
+     </para>
+
+     <para>
+       While the complete code for this type of default handler looks less cluttered as shown in 
+       <filename>sample/signal/maman-file-simple.{h|c}</filename>, it contains numerous subtleties.
+       The main subtle point which everyone must be aware of is that the signature of the default 
+       handler created that way does not have a user_data argument: 
+       <function>default_write_signal_handler</function> is different in 
+       <filename>sample/signal/maman-file-complex.c</filename> and in 
+       <filename>sample/signal/maman-file-simple.c</filename>.
+     </para>
+
+     <para>If you have doubts about which method to use, I would advise you to use the second one which
+       involves <function><link linkend="g-signal-new">g_signal_new</link></function> rather than <function><link linkend="g-signal-newv">g_signal_newv</link></function>: 
+       it is better to write code which looks like the vast majority of other GTK+/GObject code than to
+       do it your own way. However, now, you know why.
+     </para>
+
+   </sect2>
+
+  </sect1>
+-->
+
+<!--
+  yet another pointless section. if we are scared of possible abuses
+  from the users then we should not be mentioning it inside a tutorial
+  for beginners. but, obviously, there's nothing to be afraid of - it's
+  just that this section must be completely reworded.
+
+  <sect1>
+    <title>How users can abuse signals (and why some think it is good)</title>
+
+    <para>Now that you know how to create signals to which the users can connect easily and at any point in
+      the signal emission process thanks to <function><link linkend="g-signal-connect">g_signal_connect</link></function>, 
+      <function><link linkend="g-signal-connect-after">g_signal_connect_after</link></function> and G_SIGNAL_RUN_LAST, it is time to look into how your
+      users can and will screw you. This is also interesting to know how you too, can screw other people.
+      This will make you feel good and eleet.
+    </para>
+    
+    <para>
+      The users can:
+      <itemizedlist>
+         <listitem><para>stop the emission of the signal at anytime</para></listitem>
+         <listitem><para>override the default handler of the signal if it is stored as a function
+           pointer in the class structure (which is the preferred way to create a default signal handler,
+           as discussed in the previous section).</para></listitem>
+       </itemizedlist> 
+    </para>
+    
+    <para>
+      In both cases, the original programmer should be as careful as possible to write code which is
+      resistant to the fact that the default handler of the signal might not able to run. This is obviously
+      not the case in the example used in the previous sections since the write to the file depends on whether
+      or not the default handler runs (however, this might be your goal: to allow the user to prevent the file 
+      write if he wishes to).
+    </para>
+    
+    <para>
+      If all you want to do is to stop the signal emission from one of the callbacks you connected yourself,
+      you can call <function><link linkend="g-signal-stop-by-name">g_signal_stop_by_name</link></function>. Its use is very simple which is why I won't detail 
+      it further.
+    </para>
+    
+    <para>
+      If the signal's default handler is just a class function pointer, it is also possible to override 
+      it yourself from the class_init function of a type which derives from the parent. That way, when the signal
+      is emitted, the parent class will use the function provided by the child as a signal default handler.
+      Of course, it is also possible (and recommended) to chain up from the child to the parent's default signal 
+      handler to ensure the integrity of the parent object.
+    </para>
+    
+    <para>
+      Overriding a class method and chaining up was demonstrated in <xref linkend="howto-gobject-methods"/> 
+      which is why I won't bother to show exactly how to do it here again.
+    </para>
+
+  </sect1>
+
+-->
+
+</chapter>
+
+<!--
+  <sect2>
+    <title>Warning on signal creation and default closure</title>
+
+    <para>
+      Most of the existing code I have seen up to now (in both GTK+, GNOME libraries and
+      many GTK+ and GNOME applications) using signals uses a small
+      variation of the default handler pattern I have shown in the previous section.
+    </para>
+
+    <para>
+      Usually, the <function><link linkend="g-signal-new">g_signal_new</link></function> function is preferred over
+      <function><link linkend="g-signal-newv">g_signal_newv</link></function>. When <function><link linkend="g-signal-new">g_signal_new</link></function>
+      is used, the default closure is exported as a class function. For example,
+      <filename>gobject.h</filename> contains the declaration of <type><link linkend="GObjectClass">GObjectClass</link></type>
+      whose notify class function is the default handler for the <emphasis>notify</emphasis>
+      signal:
+<programlisting>
+struct  _GObjectClass
+{
+  GTypeClass   g_type_class;
+
+  /* class methods and other stuff. */
+
+  /* signals */
+  void (*notify) (GObject     *object,
+                  GParamSpec  *pspec);
+};
+</programlisting>
+     </para>
+
+     <para>
+       <filename>gobject.c</filename>'s <function><link linkend="g-object-do-class-init">g_object_do_class_init</link></function> function
+       registers the <emphasis>notify</emphasis> signal and initializes this class function
+       to NULL:
+<programlisting>
+static void
+g_object_do_class_init (GObjectClass *class)
+{
+
+  /* Stuff */
+
+  class->notify = NULL;
+
+  gobject_signals[NOTIFY] =
+    g_signal_new ("notify",
+                  G_TYPE_FROM_CLASS (class),
+                  G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED | G_SIGNAL_NO_HOOKS,
+                  G_STRUCT_OFFSET (GObjectClass, notify),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__PARAM,
+                  G_TYPE_NONE,
+                  1, G_TYPE_PARAM);
+}
+</programlisting>
+       <function><link linkend="g-signal-new">g_signal_new</link></function> creates a <type><link linkend="GClosure">GClosure</link></type> which dereferences the
+       type's class structure to access the class function pointer and invoke it if it not NULL. The
+       class function is ignored it is set to NULL.
+     </para>
+
+     <para>
+       To understand the reason for such a complex scheme to access the signal's default handler, 
+       you must remember the whole reason for the use of these signals. The goal here is to delegate
+       a part of the process to the user without requiring the user to subclass the object to override
+       one of the class functions. The alternative to subclassing, that is, the use of signals
+       to delegate processing to the user, is, however, a bit less optimal in terms of speed: rather
+       than just dereferencing a function pointer in a class structure, you must start the whole
+       process of signal emission which is a bit heavyweight.
+     </para>
+
+     <para>
+       This is why some people decided to use class functions for some signal's default handlers:
+       rather than having users connect a handler to the signal and stop the signal emission
+       from within that handler, you just need to override the default class function which is
+       supposedly more efficient.
+     </para>
+
+    </sect2>
+-->
+
diff --git a/docs/reference/gobject/tut_intro.xml b/docs/reference/gobject/tut_intro.xml
new file mode 100644
index 0000000..b719358
--- /dev/null
+++ b/docs/reference/gobject/tut_intro.xml
@@ -0,0 +1,179 @@
+<?xml version='1.0' encoding="ISO-8859-1"?>
+<chapter id="chapter-intro">
+  <title>Background</title>
+  
+  <para>
+    GObject, and its lower-level type system, GType, are used by GTK+ and most GNOME libraries to
+    provide:
+    <itemizedlist>
+      <listitem><para>object-oriented C-based APIs and</para></listitem>
+      <listitem><para>automatic transparent API bindings to other compiled 
+      or interpreted languages.</para></listitem>
+    </itemizedlist>
+  </para>
+  
+  <para>
+    A lot of programmers are used to working with compiled-only or dynamically interpreted-only
+    languages and do not understand the challenges associated with cross-language interoperability.
+    This introduction tries to provide an insight into these challenges and briefly describes
+    the solution chosen by GLib.
+  </para>
+  
+  <para>
+    The following chapters go into greater detail into how GType and GObject work and
+    how you can use them as a C programmer. It is useful to keep in mind that
+    allowing access to C objects from other interpreted languages was one of the major design
+    goals: this can often explain the sometimes rather convoluted APIs and features present
+    in this library.
+  </para>
+
+  <sect1>
+    <title>Data types and programming</title>
+    
+    <para>
+      One could say (I have seen such definitions used in some textbooks on programming language theory)
+      that a programming language is merely a way to create data types and manipulate them. Most languages
+      provide a number of language-native types and a few primitives to create more complex types based
+      on these primitive types.
+    </para>
+    
+    <para>
+      In C, the language provides types such as <emphasis>char</emphasis>, <emphasis>long</emphasis>, 
+      <emphasis>pointer</emphasis>. During compilation of C code, the compiler maps these
+      language types to the compiler's target architecture machine types. If you are using a C interpreter
+      (I have never seen one myself but it is possible :), the interpreter (the program which interprets 
+      the source code and executes it) maps the language types to the machine types of the target machine at 
+      runtime, during the program execution (or just before execution if it uses a Just In Time compiler engine).
+    </para>
+    
+    <para>
+      Perl and Python are interpreted languages which do not really provide type definitions similar
+      to those used by C. Perl and Python programmers manipulate variables and the type of the variables
+      is decided only upon the first assignment or upon the first use which forces a type on the variable.
+      The interpreter also often provides a lot of automatic conversions from one type to the other. For example,
+      in Perl, a variable which holds an integer can be automatically converted to a string given the
+      required context:
+<programlisting>
+my $tmp = 10;
+print "this is an integer converted to a string:" . $tmp . "\n";
+</programlisting>
+      Of course, it is also often possible to explicitly specify conversions when the default conversions provided
+      by the language are not intuitive.
+    </para>
+    
+  </sect1>
+
+  <sect1>
+    <title>Exporting a C API</title>
+    
+    <para>
+      C APIs are defined by a set of functions and global variables which are usually exported from a 
+      binary. C functions have an arbitrary number of arguments and one return value. Each function is thus
+      uniquely identified by the function name and the set of C types which describe the function arguments
+      and return value. The global variables exported by the API are similarly identified by their name and 
+      their type.
+    </para>
+    
+    <para>
+      A C API is thus merely defined by a set of names to which a set of types are associated. If you know the
+      function calling convention and the mapping of the C types to the machine types used by the platform you 
+      are on, you can resolve the name of each function to find where the code associated to this function 
+      is located in memory, and then construct a valid argument list for the function. Finally, all you have to 
+      do is trigger a call to the target C function with the argument list.
+    </para>
+    
+    <para>
+      For the sake of discussion, here is a sample C function and the associated 32 bit x86 
+      assembly code generated by GCC on my Linux box:
+<programlisting>
+static void function_foo (int foo)
+{}
+
+int main (int argc, char *argv[])
+{
+
+        function_foo (10);
+
+        return 0;
+}
+
+push   $0xa
+call   0x80482f4 &lt;function_foo>
+</programlisting>
+      The assembly code shown above is pretty straightforward: the first instruction pushes
+      the hexadecimal value 0xa (decimal value 10) as a 32-bit integer on the stack and calls 
+      <function>function_foo</function>. As you can see, C function calls are implemented by
+      gcc by native function calls (this is probably the fastest implementation possible).
+    </para>
+    
+    <para>
+      Now, let's say we want to call the C function <function>function_foo</function> from 
+      a Python program. To do this, the Python interpreter needs to:
+      <itemizedlist>
+        <listitem><para>Find where the function is located. This probably means finding the binary generated by the C compiler
+        which exports this function.</para></listitem>
+        <listitem><para>Load the code of the function in executable memory.</para></listitem>
+        <listitem><para>Convert the Python parameters to C-compatible parameters before calling 
+        the function.</para></listitem>
+        <listitem><para>Call the function with the right calling convention.</para></listitem>
+        <listitem><para>Convert the return values of the C function to Python-compatible
+        variables to return them to the Python code.</para></listitem>
+      </itemizedlist>
+    </para>
+    
+    <para>
+      The process described above is pretty complex and there are a lot of ways to make it entirely automatic
+      and transparent to C and Python programmers:
+      <itemizedlist>
+        <listitem><para>The first solution is to write by hand a lot of glue code, once for each function exported or imported,
+        which does the Python-to-C parameter conversion and the C-to-Python return value conversion. This glue code is then 
+        linked with the interpreter which allows Python programs to call Python functions which delegate work to
+        C functions.</para></listitem>
+        <listitem><para>Another, nicer solution is to automatically generate the glue code, once for each function exported or
+        imported, with a special compiler which
+        reads the original function signature.</para></listitem>
+        <listitem><para>The solution used by GLib is to use the GType library which holds at runtime a description of
+        all the objects manipulated by the programmer. This so-called <emphasis>dynamic type</emphasis>
+        <footnote>
+          <para>
+            There are numerous different implementations of dynamic type systems: all C++ 
+            compilers have one, Java and .NET have one too. A dynamic type system allows you
+            to get information about every instantiated object at runtime. It can be implemented
+            by a process-specific database: every new object created registers the characteristics 
+            of its associated type in the type system. It can also be implemented by introspection
+            interfaces. The common point between all these different type systems and implementations
+            is that they all allow you to query for object metadata at runtime.
+          </para>
+        </footnote>
+        library is then used by special generic glue code to automatically convert function parameters and
+        function calling conventions between different runtime domains.</para></listitem>
+      </itemizedlist>
+      The greatest advantage of the solution implemented by GType is that the glue code sitting at the runtime domain 
+      boundaries is written once: the figure below states this more clearly.
+      <figure>
+        <mediaobject>
+          <imageobject> <!-- this is for HTML output -->
+            <imagedata fileref="glue.png" format="PNG" align="center"/>
+          </imageobject>
+          <imageobject> <!-- this is for PDF output -->
+            <imagedata fileref="glue.jpg" format="JPG" align="center"/>
+          </imageobject>
+        </mediaobject>
+      </figure>
+      
+      Currently, there exist at least Python and Perl generic glue code which makes it possible to use
+      C objects written with GType directly in Python or Perl, with a minimum amount of work: there
+      is no need to generate huge amounts of glue code either automatically or by hand.
+    </para>
+    
+    <para>
+      Although that goal was arguably laudable, its pursuit has had a major influence on
+      the whole GType/GObject library. C programmers are likely to be puzzled at the complexity 
+      of the features exposed in the following chapters if they forget that the GType/GObject library
+      was not only designed to offer OO-like features to C programmers but also transparent 
+      cross-language interoperability.
+    </para>
+  
+  </sect1>
+
+</chapter>
diff --git a/docs/reference/gobject/tut_tools.xml b/docs/reference/gobject/tut_tools.xml
new file mode 100644
index 0000000..7b3a41d
--- /dev/null
+++ b/docs/reference/gobject/tut_tools.xml
@@ -0,0 +1,125 @@
+<?xml version='1.0' encoding="ISO-8859-1"?>
+<partintro>
+  <para>
+    Several useful developer tools have been build around GObject
+    technology.  The next sections briefly introduce them and link to
+    the respective project pages.
+  </para>
+
+  <para>
+    For example, writing GObjects is often seen as a tedious task. It
+    requires a lot of typing and just doing a copy/paste requires a
+    great deal of care. A lot of projects and scripts have been
+    written to generate GObject skeleton form boilerplate code, or
+    even translating higher-level language into plain C.
+  </para>
+</partintro>
+
+<chapter id="tools-vala">
+  <title>Vala</title>
+  <para>
+    From the <ulink url="http://live.gnome.org/Vala">Vala
+    homepage</ulink> itself: <quote>Vala is a new programming language
+    that aims to bring modern programming language features to GNOME
+    developers without imposing any additional runtime requirements
+    and without using a different ABI compared to applications and
+    libraries written in C.</quote>
+  </para>
+
+  <para>
+    The syntax of Vala is similar to C#. The available compiler
+    translates Vala into GObject C code. It can also compile
+    non-GObject C, using plain C API.
+  </para>
+</chapter>
+
+<chapter id="tools-gob">
+  <title>GObject builder</title>
+
+  <para>
+    In order to help a GObject class developper, one obvious idea is
+    to use some sort of templates for the skeletons.  and then run
+    them through a special tool to generate the real C files.  <ulink
+    url="http://www.5z.com/jirka/gob.html">GOB</ulink> (or GOB2) is
+    such a tool. It is a preprocessor which can be used to build
+    GObjects with inline C code so that there is no need to edit the
+    generated C code.  The syntax is inspired by Java and Yacc or
+    Lex. The implementation is intentionally kept simple: the inline C
+    code provided by the user is not parsed.
+  </para>
+</chapter>
+
+<chapter id="tools-ginspector">
+    <title>Graphical inspection of GObjects</title>
+
+    <para>
+      Yet another tool that you may find helpful when working with
+      GObjects is <ulink
+      url="http://sourceforge.net/projects/g-inspector">G-Inspector</ulink>. It
+      is able to display GLib/GTK+ objects and their properties.
+    </para>
+</chapter>
+
+<chapter id="tools-refdb">
+  <title>Debugging reference count problems</title>
+
+  <para>
+    The reference counting scheme used by GObject does solve quite 
+    a few memory management problems but also introduces new sources of bugs.
+    In large applications, finding the exact spot where the reference count
+    of an Object is not properly handled can be very difficult. Hopefully, 
+    there exist a tool named <ulink url="http://refdbg.sf.net/">refdbg</ulink>
+    which can be used to automate the task of tracking down the location
+    of invalid code with regard to reference counting. This application 
+    intercepts the reference counting calls and tries to detect invalid behavior. 
+    It supports a filter-rule mechanism to let you trace only the objects you are 
+    interested in and it can be used together with GDB.
+  </para>
+  <para>
+    <indexterm><primary>g_trap_object_ref</primary></indexterm>
+    Note that if GObject has been compiled with <option>--enable-debug=yes</option>,
+    it exports a trap variable 
+    <programlisting>
+static volatile GObject *g_trap_object_ref;
+    </programlisting>
+    If set to a non-NULL value, <link linkend="g-object-ref">g_object_ref</link>()
+    and <link linkend="g-object-unref">g_object_unref</link>() will be intercepted
+    when called with that value. 
+  </para>
+</chapter>
+  
+<chapter id="tools-gtkdoc">
+  <title>Writing API docs</title>
+
+  <para>The API documentation for most of the GLib, GObject, GTK+ and GNOME
+  libraries is built with a combination of complex tools. Typically, the part of 
+  the documentation which describes the behavior of each function is extracted
+  from the specially-formatted source code comments by a tool named gtk-doc which
+  generates DocBook XML and merges this DocBook XML with a set of master XML 
+  DocBook files. These XML DocBook files are finally processed with xsltproc
+  (a small program part of the libxslt library) to generate the final HTML
+  output. Other tools can be used to generate PDF output from the source XML.
+  The following code excerpt shows what these comments look like.
+<programlisting>
+/**
+ * gtk_widget_freeze_child_notify:
+ * @widget: a #GtkWidget
+ * 
+ * Stops emission of "child-notify" signals on @widget. The signals are
+ * queued until gtk_widget_thaw_child_notify() is called on @widget. 
+ *
+ * This is the analogue of g_object_freeze_notify() for child properties.
+ **/
+void
+gtk_widget_freeze_child_notify (GtkWidget *widget)
+{
+...
+</programlisting>
+  </para>
+  <para>
+  Thorough
+  <ulink url="http://developer.gnome.org/arch/doc/authors.html">documentation</ulink> 
+  on how to set up and use gtk-doc in your
+  project is provided on the GNOME developer website.
+  </para>
+</chapter>
diff --git a/docs/reference/gobject/version.xml.in b/docs/reference/gobject/version.xml.in
new file mode 100644
index 0000000..af9b9c4
--- /dev/null
+++ b/docs/reference/gobject/version.xml.in
@@ -0,0 +1 @@
+@GLIB_VERSION@
diff --git a/gio-2.0-uninstalled.pc.in b/gio-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..04da6ea
--- /dev/null
+++ b/gio-2.0-uninstalled.pc.in
@@ -0,0 +1,6 @@
+Name: GIO Uninstalled
+Description: glib I/O library, Not Installed
+Version: @VERSION@
+Requires: glib-2.0-uninstalled,gobject-2.0-uninstalled,gmodule-no-export-2.0-uninstalled
+Libs: ${pc_top_builddir}/${pcfiledir}/gio/libgio-2.0.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/gio-2.0.pc.in b/gio-2.0.pc.in
new file mode 100644
index 0000000..baefef1
--- /dev/null
+++ b/gio-2.0.pc.in
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+giomoduledir=@GIO_MODULE_DIR@
+
+Name: GIO
+Description: glib I/O library
+Version: @VERSION@
+Requires: glib-2.0,gobject-2.0,gmodule-no-export-2.0
+Libs: -L${libdir} -lgio-2.0
+Cflags: 
diff --git a/gio-unix-2.0-uninstalled.pc.in b/gio-unix-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..a45dc9e
--- /dev/null
+++ b/gio-unix-2.0-uninstalled.pc.in
@@ -0,0 +1,6 @@
+Name: GIO unix specific APIs
+Description: unix specific headers for glib I/O library, Not Installed
+Version: @VERSION@
+Requires: gobject-2.0-uninstalled,gmodule-no-export-2.0-uninstalled,gio-2.0-uninstalled
+Libs: ${pc_top_builddir}/${pcfiledir}/gio/libgio-2.0.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/gio-unix-2.0.pc.in b/gio-unix-2.0.pc.in
new file mode 100644
index 0000000..2e81c07
--- /dev/null
+++ b/gio-unix-2.0.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: GIO unix specific APIs
+Description: unix specific headers for glib I/O library
+Version: @VERSION@
+Requires: gobject-2.0,gmodule-no-export-2.0,gio-2.0
+Libs: -L${libdir} -lgio-2.0
+Cflags: -I${includedir}/gio-unix-2.0/
diff --git a/gio/.gitignore b/gio/.gitignore
new file mode 100644
index 0000000..14da934
--- /dev/null
+++ b/gio/.gitignore
@@ -0,0 +1,4 @@
+gio-marshal.[ch]
+gioenumtypes.[ch]
+gioalias.h
+gioaliasdef.c
diff --git a/gio/ChangeLog b/gio/ChangeLog
new file mode 100644
index 0000000..65c5273
--- /dev/null
+++ b/gio/ChangeLog
@@ -0,0 +1,5966 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-26  Carlos Garnacho  <carlosg@gnome.org>
+
+	Bug 575270 – GVolumeMonitor::mount-pre-unmount not being emitted
+
+	* gunixmount.c (eject_unmount_cb) (eject_unmount_do_cb)
+	(eject_unmount_do): Emit ::mount-pre-unmount and wait 500msec before
+	actually trying to unmount.
+
+2009-03-17  Colin Walters  <walters@redhat.com>
+
+	Bug 575708 - runaway inotify madness ...
+
+	* gfilemonitor.c: Queue up events in a local list and
+	fire one idle, instead of queuing lots of individual
+	idles which has bad performance behavior.
+
+2009-03-17  Alexander Larsson  <alexl@redhat.com>
+
+        * glocalfileinputstream.c:
+        * glocalfileoutputstream.c:
+	fix attributes argument of query_info methods to
+	be "const char *".
+
+2009-03-16  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 575555 – Use fsync() when replacing files to avoid data loss on crash
+
+        * glocalfileoutputstream.c:
+        (g_local_file_output_stream_close):
+        (_g_local_file_output_stream_replace):
+	fsync temp file before closing if replacing target file
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+2009-03-04  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 573843 – g_get_current_dir returns non-absolute path
+
+	* glocalfile.c (canonicalize_filename):
+	Handle the case where g_get_current_dir() returns a non-absolute path.
+
+2009-03-04  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 573970 – crash in gunixvolumemonitor:update_mounts when unmounting
+
+        * gunionvolumemonitor.c:
+        (g_union_volume_monitor_dispose):
+	Run dispose on child monitors when disposing.
+
+        * gunixvolumemonitor.c:
+	Remove all volumes and mount on dispose to avoid circular
+	dependencies not freeing the monitor
+
+2009-03-03  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 561172 – gnome-open fails on local URIs with anchors
+
+        * gdesktopappinfo.c:
+	Don't force uris to filenames if the uri has an anchor, because
+	that would strip the anchor.
+
+        * glocalvfs.c:
+	Strip anchor from file:// uris when creating GFile, since
+	g_filename_from_uri doesn't handle them.
+
+2009-03-03  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 562613 – Missing const modifier in string parameters
+
+        * gfileinputstream.[ch]:
+        * gfileoutputstream.[ch]:
+        * glocalfileinfo.[ch]:
+	Make string arguments const if used as such.
+
+2009-03-03  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c (g_local_file_query_filesystem_info):
+	Handle filesystems no supporting reporting how much is free.
+	This fixes bug 573454 where the filesystem not supporting this
+	is the gvfs smb backend over the fuse filesystem.
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-03-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gioenums.h: Add a Since: tag
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 573658 – Deadlock in giomodule.c
+
+	* giomodule.c: Use a separate lock for extension point registration
+	to avoid deadlock. Discovered by Torsten Schoenfeld
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdatainputstream.c: Fix docs
+
+2009-02-27  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 573421 – Clarify message format in GMountOperation
+
+	* gmountoperation.c: Document that the first line of a
+	multi-line message should be interpreted as a heading.
+
+2009-02-27  David Zeuthen  <davidz@redhat.com>
+
+	Bug 573462 – GEmblemedIcon leak
+
+	* gemblemedicon.c (g_emblemed_icon_finalize):
+	Avoid leaking a GList.
+
+2009-02-27  Alexander Larsson  <alexl@redhat.com>
+
+        * giomodule-priv.h:
+        * giomodule.c:
+	Split out the extension point registration code to its
+	own function.
+
+        * glocalvfs.c:
+	Ensure extension points are registered before extending it.
+	It might not have happened yet if g_vfs_get_local() is called.
+
+2009-02-26  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 540461 – g_memory_output_stream_get_data_size() doesn't behave as document
+        * gmemoryoutputstream.c:
+	Track actual valid size, even if we later seek back.
+
+        * tests/memory-output-stream.c:
+	Add testcase
+
+2009-02-26  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 543183 – Clarify docs for g_file_has_prefix
+
+	* gfile.c: (g_file_has_prefix):
+	Clarify how the prefix matching works.
+
+2009-02-26  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	Support desktop file key X-GIO-NoFuse which disables
+	use of fuse pathnames for %u and %U arguments.
+
+2009-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 570073 – Add support for reading filesystems on Interix
+
+	* gunixmounts.c (_g_get_unix_mounts):
+	Support Interix. Patch from  Fabian Groffen 
+
+2009-02-25  Paolo Borelli  <pborelli@katamail.com>
+
+	Bug 570069 – wrong preprocessor directive in gio/glocalfileinfo.c
+
+	* glocalfileinfo.c: fix preprocessor condition. Patch by Markus Duft.
+
+2009-02-23  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	Remove accidentally commited spew
+
+2009-02-20  Alexander Larsson  <alexl@redhat.com>
+
+        * gcontenttype.c:
+        (g_content_type_guess):
+	Don't ever sniff desktop files when the filename is known.
+	In other words, only allow desktop files with the .desktop extension
+	and when the filename isn't known.
+	This is a security precaution since desktop files can execute
+	arbitrary code when launched and we don't want to allow them to
+	try and hide as another type. There is no legit reason to not
+	have the .desktop extension anyway.
+
+2009-02-19  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 549298 – impossible to copy files with p (pipe) flag
+
+	* gfile.c:
+	(file_copy_fallback):
+	Error out if the source file is a special file
+
+2009-02-18  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 560564 – Replacing a symlink with its linked file truncates the original file
+
+	* gioenums.h:
+	Add G_FILE_CREATE_REPLACE_DESTINATION
+
+	* glocalfileoutputstream.c:
+	(handle_overwrite_open):
+	(_g_local_file_output_stream_replace):
+	Handle G_FILE_CREATE_REPLACE_DESTINATION when overwriting files.
+
+	* gfile.c:
+	(file_copy_fallback):
+	Pass G_FILE_CREATE_REPLACE_DESTINATION to g_file_replace when copying
+	with overwrite.
+
+2009-02-17  Ryan Lortie  <desrt@desrt.ca>
+
+	* gfileinfo.c: unref the destination's attribute matcher before
+	overwriting it.
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols: Add missing exports for new API
+
+	* gdatainputstream.c: Add missing Since: tags.
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmountoperation.[hc]: Add an "aborted" signal to abort a
+	mount operation from the backend side.
+
+	* gvolume.h: Add docs regarding the "aborted" signal.
+
+2009-02-16  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 505042 – add file attribute for actually used file size in bytes
+
+	* gfileinfo.h: add G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE define to
+	"standard::allocated-size"
+	* gfileattribute.c: document
+	* glocalfileinfo.c: set the allocated size from st_blocks * 512
+
+2009-02-16  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 571598 – GAsyncResult with NULL gobject
+
+	* gsimpleasyncresult.c: remove various assertions and add some checks
+	to allow for a NULL source_object in GSimpleAsyncResult.
+
+2009-02-11  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 541225 – Can't compile gio on AIX : duplicate case value in 
+	gioerror.c
+
+	* gioerror.c (g_io_error_from_errno): Cope with EEXIST == ENOTEMPTY. 
+	Reported by Nicolas Joseph 
+
+2009-02-04  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 566747 - URIs opened with firefox %u load as local files
+
+	* gdummyfile.c (g_dummy_file_get_path):
+	Dummy files are never used for local paths, so always return NULL
+	in get_path(). 
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-01-31  Paolo Borelli  <pborelli@katamail.com>
+
+	* glocalfileinfo.c: plug a tiny mem leak.
+
+2009-01-29  Ryan Lortie  <desrt@desrt.ca>
+
+	* gioerror.c (g_io_error_from_errno): handle all possible cases of
+	EAGAIN and EWOULDBLOCK being (un)defined and (un)equal.
+
+2009-01-28  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 568575 – _async functions for GDataInputStream
+
+	* gdatainputstream.h:
+	* gdatainputstream.c: add _async versions of read_line and read_until.
+	* gio.symbols:
+	* ../docs/reference/gio/gio-sections.txt: add new functions
+	* tests/sleepy-stream.c: new test case for async read line
+	* tests/Makefile.am: add new test
+
+2009-01-22  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 568723 – g_buffered_input_stream_fill_async doesn't take count == -1
+
+	* gbufferedinputstream.c (g_buffered_input_stream_fill_async,
+	g_buffered_input_stream_fill): check for count < -1 instead of count <
+	0 and copy modified check to non-async version for consistency.
+	document the "count = -1" API.
+
+2009-01-22  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 568741 – g_buffered_input_stream_fill_async doesn't work
+
+	* gbufferedinputstream.c (fill_async_callback): grow the buffer tail
+	after we have successfully read data from the base stream
+
+2009-01-20  Ryan Lortie  <desrt@desrt.ca>
+
+	Bug 568394 – dropping the last reference to a stream filter closes the
+	base stream
+
+	* gfilterinputstream.h:
+	* gfilterinputstream.c: add "close-base-stream" property and only
+	close the base stream if it is true.  issue async close callbacks from
+	correct source object.
+	* gfilteroutputstream.h:
+	* gfilteroutputstream.c: add a "close-base-stream" property and only
+	close the base stream if it is true.  issue async close callbacks from
+	correct source object.
+	* gbufferedoutputstream: check g_filter_output_stream_get_close_base()
+	before closing the base stream.  fix invalid source tag comparison in
+	close_async (was comparing to flush_async).
+	* ../docs/reference/gio/gio-sections.txt:
+	* gio.symbols: add
+	g_filter_{in,out}put_stream_{g,s}et_close_base_stream
+	* tests/filter-streams.c: new test cases
+	* tests/Makefile.am: add new test
+	* tests/.gitignore: add new test
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c (g_desktop_app_info_new): Expand the docs.
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gappinfo.h: Document get_commandline vfunc
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gunixmounts.c: Some stylistic fixes.
+
+2009-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 565484 – g_content_type_guess passes non-UTF8 text to XDG 
+	functions in non-UTF8 locale
+
+	* xdgmime/xdgmimecache.c:
+	* xdgmime/xdgmimeglob.c: Don't assume filenames are UTF-8.
+
+2009-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* xdgmime/test-mime.c: Make tests work with current shared-mime-info.
+
+2009-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 566770 – error code 0 for Too many open files is useless
+
+	* gioenums.h: Add a G_IO_ERROR_TOO_MANY_OPEN_FILES error code.
+	Requested by Olivier Sessink.
+
+	* gioerror.c: Translate EMFILE to G_IO_ERROR_TOO_MANY_OPEN_FILES.
+
+	* glocalfileenumerator.c: Translate G_FILE_ERROR_MFILE to
+	G_IO_ERROR_TOO_MANY_OPEN_FILES.
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+2009-01-05  Dan Winship  <danw@gnome.org>
+
+	* gdesktopappinfo.c (update_mimeapps_list): cast a "char **" to
+	"const char **" to avoid a warning.
+
+	* gemblem.c (g_emblem_from_tokens):
+	* gemblemedicon.c (g_emblemed_icon_from_tokens):
+	* xdgmime/xdgmime.c (xdg_mime_get_icon): remove unused
+	variables
+
+2009-01-05  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 566064 – Add NOATIME flag to query_info_flags
+
+	* glocalfileinfo.c (get_content_type): Try using O_NOATIME when
+	sniffing for mime types. Based on a patch by A. Walton
+
+2009-01-05  Ryan Lortie  <desrt@desrt.ca>
+
+	* tests/.gitignore: improve
+	* tests/Makefile.am: add new simple-async-result test
+	* tests/simple-async-result.c: new file to test GSimpleAsyncResult
+
+2009-01-05  Ryan Lortie  <desrt@desrt.ca>
+
+	* gio.symbols:
+	* ../docs/reference/gio/gio-sections.txt:
+	* gsimpleasyncresult.h:
+	* gsimpleasyncresult.c: Add g_simple_async_result_is_valid().
+	Implementation by Dan Winship.  Closes #566170.
+
+2008-12-31  Matthias Clasen <mclasen@redhat.com>
+
+	* gdesktopappinfo.c:
+	* gunixmounts.c:
+	* gunixinputstream.c:
+	* gunixoutputstream.c: Add a note about being UNIX-specific.
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.3 ===
+
+2008-12-12  Dan Winship  <danw@gnome.org>
+
+	* pltcheck.sh: make this work on x86_64
+
+2008-12-12  Ryan Lortie  <desrt@desrt.ca>
+
+	* gio/gicon.c (g_icon_to_string_tokenized): free the tokens when done
+	with them
+
+2008-12-12  Ryan Lortie  <desrt@desrt.ca>
+
+	* gio/gunixmounts.c (g_unix_mount_at): fix leak that occurs when
+	multiple mount entries match the requested path
+
+2008-12-10  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 562452 - Ensure we return G_IO_ERROR_CANCELLED if cancelling
+	g_simple_async_result_run_in_thread
+	
+	* gsimpleasyncresult.c:
+	Make g_simple_async_result_run_in_thread check cancellation before
+	calling out to the user in the callback. This means we guarantee
+	reporting cancels of async operations from the main threads, which
+	is probably more in line with what users expect.
+	
+	Note that there are still no such guarantees for cancelling sync
+	operations or cancelling async operation from outside the main
+	thread. Furthermore, the exact behaviour of async implementations
+	not using run_in_thread may differ.
+
+2008-12-09  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 515777 - incorrect date&time on copy
+	
+	* glocalfile.c:
+	(g_local_file_class_init):
+	Copy mtime by default
+	
+	* gfile.c:
+	Change docs about G_FILE_COPY_ALL_METADATA to not mention
+	mtime as an example.
+
+2008-12-08  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 558298 – Hide ecryptfs mounts
+
+	* gunixmounts.c: (guess_system_internal): Hide ecryptfs mounts, 
+	so that the desktop does not show both the mount and the target 
+	directory. Patch by Martin Pitt
+ 
+2008-12-08  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 555465 – GUnix{Input,Output}Stream lacks fd/close_fd_at_close 
+	property
+
+	* gio.symbols:
+	* gunixinputstream.[hc]:
+	* gunixoutputstream.[hc]: Add "fd" and "close-fd" properties
+	including getters and setters. Patch by Maciej Piechotka
+
+2008-12-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 558458 – Cannot build gio tests on Solaris using SUN cc
+
+	* tests/live-g-file.c: Support compilers that don't understand
+	ISO C varargs macros. Patch by Eric Lamarque
+
+2008-12-07  Matthias Clasen  <mclasen@redhat.com>
+	
+	Bug 526320 – should not list mounts that the user doesn't have 
+	permission to use
+
+	gunixmounts.c: Use g_access() to check accessibility of local devices.
+	Patch by Martin Pitt
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdatainputstream.c (g_data_input_stream_read_line): Revert the
+	behaviour change, and update the docs instead, to avoid breaking
+	existing users.
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+2008-12-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.symbols:
+	* gmount.[ch]:
+	* gunionvolumemonitor.c:
+	* gvolume.c:
+	Add and document g_mount_is_shadowed plus calls
+	to set/unset a mount as shadowed
+	
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/tests/g-icon.c: Comment out two failing tests
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 555486 – No way to recover command line from GAppInfo
+
+	* gio.symbols:
+	* gappinfo.[hc]: Add g_app_info_get_commandline. Requested
+	by Hans Petter Jansson.
+	
+	* gdesktopappinfo.c: And implement it here.
+
+2008-11-28  Christian Dywan  <christian@imendio.com>
+
+	* gappinfo.c: Fix a typo, s/detext/detect. Patch by Enrico Tröger.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 559633 – gtk_image_new_from_gicon does not always work for
+	.desktop files
+
+	* gdesktopappinfo.c (g_desktop_app_info_new_from_keyfile): Ignore
+	extensions on icon names.  Proposed by Axel von Bertoldi.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 548163 – Nautilus displays wrong error message for too long file
+	names
+
+	* glocalfile.c (g_local_file_set_display_name): Correctly set
+	error conditions if the new name is e.g. too long. Reported
+	by Leonardo Ferreira Fontenelle.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 547481 – g_data_input_stream_read_line behaves not as stated in
+	the docs
+
+	* gdatainputstream.c (g_data_input_stream_read_line): Behave as
+	documented and include the line end in the returned string. 
+	Pointed out by Paul Pogonyshev.
+
+	* tests/data-input-stream.c: Fix the read_line test to test the
+	documented behaviour.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c (g_app_info_can_delete): Only allow deleting
+	files that have been created by g_app_info_create_from_commandline.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 541715 – win32 : patch for warnings and signature problems in 
+	recent code
+	
+	* glocalvfs.c: Avoid unused variables. Pointed out by Jody
+	Goldberg.
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 562393 – g_buffered_input_stream_read_byte broken if data
+	available
+
+	* gbufferedinputstream.c (g_buffered_input_stream_read_byte): Fix
+	handling of buffered content.  Patch by Philip Withnall
+
+	* tests/buffered-input-stream.c: Add a testcase for this bug.
+	* tests/Makefile.am: And build it
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 561807 – inotify_sub.c :: dup_dirname() fails to remove trailing
+	'/'
+
+	* inotify/inotify-sub.c (dup_dirname): Actually strip the trailing
+	'/' away. Spotted by Dan Williams.
+
+2008-11-21  Cosimo Cecchi  <cosimoc@gnome.org>
+
+	Bug 561375 – Leaks mountpoint description
+
+	* glocalfile.c: (get_mount_info): don't leak the mountpoint description
+	string.
+
+2008-11-21  Cosimo Cecchi  <cosimoc@gnome.org>
+
+	Bug 561352 – Leak of icon description
+
+	* gcontenttype.c: (g_content_type_get_icon): don't leak the XDG mimetype
+	generic icon string.
+
+2008-11-14  Matthias Clasen <mclasen@redhat.com>
+
+	* gfileattribute.c: Add G_FILE_ATTRIBUTE_PREVIEW_ICON to doc table.
+
+2008-11-12  Tor Lillqvist  <tml@novell.com>
+
+	Bug 556415 - Crash on Windows 2000 in g_winhttp_vfs_init()
+
+	* win32/gwinhttpvfs.h: Move the set of function pointers to
+	winhttp.dll into a separate struct GWinHttpDllFuncs. Just have a
+	pointer to that in the GWinHttpVfsClass.
+	
+	* win32/gwinhttpvfs.c: Move the lookup of functions from
+	winhttp.dll into a function of its own, that stores the pointers
+	in a separate GWinHttpDllFuncs variable. Add two bookeeping
+	booleans lookup_done and funcs_found.
+
+	Don't call g_io_extension_point_implement() to register the
+	winhttp extension unless winhttp.dll has been successfully loaded
+	and the required functions found in it.
+
+	* win32/gwinhttp*.c: Adjust calls of the functions looked up from
+	winhttp.dll correspondingly.
+
+2008-10-28  Cosimo Cecchi  <cosimoc@gnome.org>
+
+	reviewed by: Alexander Larsson <alexl@redhat.com>
+
+	* gdatainputstream.c: Make the docs of g_dada_input_stream_read_line ()
+	clearer about the behavior when there's no more content to read.
+
+2008-10-27  Federico Mena Quintero  <federico@novell.com>
+
+	* glocalfile.c (g_local_file_get_parse_name): Don't leak roundtripped_filename.
+
+2008-10-27  Tor Lillqvist  <tml@novell.com>
+
+	Bug 557592 - Missing include in gwinhttpfile.c
+
+	* win32/gwinhttpfile.c: Include <wchar.h> to make it compile with
+	MSVC2008.
+
+2008-10-24  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 556910 – [fam-helper.c:223]: Memory leak: sub
+
+	* fam/fam-helper.c: Fix a memory leak and formatting issues.
+	Reported by Daniel Marjamäki
+
+2008-10-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c (g_app_info_reset_type_associations): Fix docs.
+
+2008-10-23  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 528320 - Incorrect icons displayed for files with custom mimetype icons
+	
+	* glocalfileinfo.c:
+	(_g_local_file_info_get):
+	Don't return the fallback icon (text-x-generic) for all files.
+	This is causing problems with theme icon lookup and custom mime
+	icons, as the generic fallback overrides custom mime icons in
+	inherited themes.
+
+	This is a slight change as applications might not get an icon wher
+	they previously did. But there is no guarantee to get on neither before
+	or after this change, so it should not break applications. Changes
+	to nautilus and gtk+ will be done to manually use the generic fallback
+	icon if no icon is found, but this is only required for rare cases.
+
+2008-10-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileinfo.h:
+	Add G_FILE_ATTRIBUTE_PREVIEW_ICON (#557182)
+
+2008-10-21  Alexander Larsson  <alexl@redhat.com>
+
+	Bug 555740 - gicon serialization
+	Based on patch from David Zeuthen
+	
+	* gicon.[ch]:
+	* gio.symbols:
+	Add g_icon_to_string() and g_icon_new_for_string().
+	
+	* gemblem.c:
+	* gemblemedicon.c:
+	* gfileicon.c:
+	* gthemedicon.c:
+	Implement icon serialization for built-in icon types
+	
+	* tests/Makefile.am:
+	* tests/g-icon.c:
+	Added GIcon serialization test
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.0 ===
+
+2008-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 556422 – g_file_enumerator_next_file: unclear whether return 
+	value needs to be freed
+
+	* gfileenumerator.c (g_file_enumerate_next_file): Clarify
+	the return value docs. Pointed out by Armin Burgmeier
+
+2008-10-14  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 556334 – Warning when building without selinux support
+
+	* glocalfileinfo.c: Avoid compiler warnings when selinux is
+	disabled. Patch by Pascal Terjan
+
+2008-10-14  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 556335 – make check fails in abicheck.sh
+
+	* gio.symbols: Add g_file_attribute_info_list_get_type. 
+	Pointed out by Pascal Terjan.
+
+2008-10-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	When adding an application as handling a mime type (but
+	not as the default), copy the full list of desktop ids handling
+	that type in before adding the new one on the end of the list.
+	This means we're not accidentally changing the default by overriding
+	the info from the later directories in the search path.
+	
+	Also, fixes small leak of removed_entries.
+
+2008-10-12  David Zeuthen  <davidz@redhat.com>
+
+	* gio.symbols:
+	* gunionvolumemonitor.c:
+	* gvolumemonitor.h:
+	Deprecate g_volume_monitor_adopt_orphan_mount() (#555331).
+
+2008-10-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileattribute.c (escape_byte_string):
+	Upper half of byte is >> 4, not >> 8.
+	Found by Kjartan Maraas via sparse
+
+2008-10-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 555711 – Wrong fallback order of mimetype icons
+
+	* gcontenttype.c: Don't prefer generic icons over
+	default mimetype icons.
+
+	* xdgmime/xdgmimecache.c (xdg_mime_cache_get_icon): 
+	* xdgmime/xdgmime.c (xdg_mime_get_icon): Don't fall back
+	to generic icons.
+	Patch by Krysztof Kosiński
+
+2008-10-10  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 555121 – Improved build-time handling of gio module-dir
+
+	* fam/Makefile.am: Use GIO_MODULE_DIR consistently.
+	* Makefile.am: Create the module dir.
+
+2008-10-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	* gio/tests/live-g-file.c:
+	* gio/gsimpleasyncresult.c: Fix gcc warnings.
+
+2008-10-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gunixinputstream.c (g_unix_input_stream_read):
+	Actually return -1 in case of cancelled, not old res value.
+
+2008-10-06  Colin Walters  <walters@verbum.org>
+
+	Bug 554745 - GFileAttributeInfoList should be boxed
+
+	* gio/gfileattribute.c: Define a boxed type for GFileAttributeList
+	for convenience of bindings.
+	* gio/gfileattribute.h: Prototype it.
+
+2008-10-05  Pascal Terjan  <pterjan@linuxfr.org>
+
+	Bug 554970 – segfault when update-desktop-database is not available
+	on the system
+
+	* gdesktopappinfo.c (run_update_command): Have the error set before 
+	using it.
+
+2008-10-01  David Zeuthen  <davidz@redhat.com>
+
+	* gdesktopappinfo.c (expand_macro): If possible, always pass FUSE
+	file:// URIs (such as '/home/davidz/.gvfs/sftp on foo/file.avi')
+	instead of the gio URI (such as sftp://foo/file.avi) when using
+	g_app_info_launch() and friends. With a sufficiently recent gvfs,
+	apps using gio+gvfs will map the FUSE file:// URI back to the gio
+	URI (and thus bypass the fuse daemon) thanks the patch from bug
+	#530654.  Since Nautilus is an user of g_app_info_launch() it
+	means that non-gio POSIX apps, such as mplayer, will Just Work(tm)
+	when launced via the file manager. Win. Fixes bug #528670.
+
+	* gappinfo.c: Add some notes about the FUSE POSIX URI <-> GIO URI
+	mapping to the description of GAppInfo.
+
+2008-09-30  Tor Lillqvist  <tml@novell.com>
+
+	* tests/Makefile.am: Build desktop-app-info only on Unix.
+
+	* glocalfile.c (get_volume_for_path) [Win32]: Avoid a
+	g_critical(). Pass a large enough result buffer to
+	GetVolumePathNameW(). Just use MAX_PATH.
+
+2008-09-29  David Zeuthen  <davidz@redhat.com>
+
+	* gvolume.c: Clarify semantics of g_volume_mount_finish() (#552168)
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	* tests/data-input-stream.c:
+	* tests/data-output-stream.c:
+	* tests/live-g-file.c:
+	* tests/memory-input-stream.c:
+	* tests/memory-output-stream.c: Use g_assert_error() and
+	g_assert_no_error()
+
+2008-09-26  Matthias Clasen  <mclasen@redhat.com>
+	
+	Bug 545350 – GAppInfo deletion
+	Bug 545351 – Reset associations for content type
+
+	* gio.symbols:
+	* gappinfo.[hc]: New functions g_app_info_can_delete,
+	g_app_info_delete and g_app_info_reset_type_associations.
+
+	* gdesktopappinfo.c:
+	* gwin32appinfo.c: Implementations of these.
+
+	* tests/Makefile.am:
+	* tests/desktop-app-info.c: Tests for GAppInfo functionality.
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	Bug 505361 – gunixinputstream.c assumes poll() available
+	Bug 509446 – portable blocking gio cancellation
+
+	* gcancellable.c (g_cancellable_make_pollfd): New method to make a
+	GPollFD for a cancellable (which is slightly more complicated on
+	Windows than Unix).
+
+	* gunixinputstream.c (g_unix_input_stream_read):
+	* gunixoutputstream.c (g_unix_output_stream_write): Use
+	g_cancellable_make_pollfd() and g_poll() rather than using poll()
+	directly.
+
+	* tests/unix-streams.c: test of GUnixInputStream,
+	GUnixOutputStream, and GCancellable.
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	* gdesktopappinfo.c (get_all_desktop_entries_for_mime_type): add a
+	cast to stop a gcc warning
+
+	* gfile.c (g_file_copy_attributes): add parens to stop a gcc
+	warning
+
+2008-09-25  Dan Winship  <danw@gnome.org>
+
+	Bug 553426 - cancellable clarifications
+
+	* gcancellable.c (g_cancellable_class_init): Add a note to the
+	"cancelled" signal docs warning about thread-safety issues
+	(g_cancellable_cancel): Note that cancelling an asynchronous
+	operation takes effect asynchronously, not immediately.
+
+2008-09-22  Nelson Benítez León  <nbenitez@svn.gnome.org>
+
+	* gioenums.h: Add new GFileCopyFlag, to leave target file with
+	default perms, instead of setting the source file perms, in a copy
+	operation.
+
+	* gfile.c (g_file_copy_attributes) 
+	(build_attribute_list_for_copy)
+	(should_copy): Not copy "unix::mode" attribute if we have received
+	G_FILE_COPY_TARGET_DEFAULT_PERMS flag.
+
+2008-09-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c (expand_macro_single): Plug a memory leak
+
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.1 ===
+
+2008-09-16  Michael Natterer  <mitch@imendio.com>
+
+	* gcontenttype.c (g_content_type_guess): can't assign the return
+	value of g_strdupv() to an array. Fill the array manually with
+	const strings instead (it is never freed anyway). Fixes the
+	build. Also fixed indentation.
+
+2008-09-16  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gdesktopappinfo.c (g_desktop_app_info_new_from_keyfile):
+	Fix trivial typo to unbreak the build (there was a colon
+	instead of a semicolon at the end of a statement).
+
+2008-09-15  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 552352 – g_app_info_launch doesn't work if "Path" key in .desktop 
+	file is empty
+
+	* gdesktopappinfo.c (g_desktop_app_info_new_from_keyfile): Ignore
+	an empty Path value.  
+
+2008-09-15  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 551681 – g_content_type_guess() too naive with filenames
+
+	* gcontenttype.c (g_content_type_guess): Check whether there's a '/'
+	at the end of the filename, and declare it a directory.
+	Patch by Bastien Nocera
+
+2008-09-14  Cosimo Cecchi  <cosimoc@gnome.org>
+
+	Bug 551887 – Docs for g_desktop_app_info_new_from_filename ()
+	aren't clear.
+
+	* gdesktopappinfo.c: add a note in the docs clarifying what the
+	"filename" parameter really is.
+
+2008-09-12  Tor Lillqvist  <tml@novell.com>
+
+	* gwin32appinfo.c (g_win32_app_info_launch): Don't call
+	FormatMessage() etc here. Call g_win32_error_message() instead
+	which already does all that. Besides, the code was broken as it
+	called the default "A" version of FormatMessage() but still
+	thought it produced a wide string.
+
+2008-09-12  Michael Natterer  <mitch@imendio.com>
+
+	* gfileinfo.c (g_file_info_get_content_type): remove dangling 's'
+	in the documentation.
+
+2008-09-08  Christian Neumair  <cneumair@gnome.org>
+
+	* gunixmount.c (eject_unmount_read_error), (eject_unmount_do):
+	* gunixvolume.c (eject_mount_read_error), (eject_mount_do):
+	Use non-blocking pipe for mount helper I/O. Fixes #550647.
+
+2008-09-06  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 551149 – xdgmime mem leak
+
+	* xdgmime/xdgmime.c (xdg_mime_init_from_directory): Plug
+	a memory leak. Patch by Christian Persch
+
+2008-09-04  Tor Lillqvist  <tml@novell.com>
+
+	* gwin32mount.c (g_win32_mount_finalize): Don't unref icon if
+	NULL.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.0 ===
+
+2008-09-02  Michael Natterer  <mitch@imendio.com>
+
+	* *.h: big header formatting cleanup: indentation, vtable
+	formatting, consistent spacing in (* vfunc), trailing whitespace
+	removal. Formatting should be pretty consistent in all GIO headers
+	now.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmount.h: Document guess_content_type sync vfunc.
+
+2008-09-02  Michael Natterer  <mitch@imendio.com>
+
+	* gbufferedoutputstream.h (struct _GBufferedOutputStreamClass):
+	fix parent_class member to be GFilterOutputStreamClass (not
+	GOutputStreamClass). Drop three pointers of padding, which is
+	exactly what GFilterOutputStreamClass adds to GOutputStreamClass,
+	so the class struct size stays the same.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 550059 – Wrong docs for g_emblemed_icon_add_emblem
+
+	* gemblemedicon.c (g_emblemed_icon_get_add_emblem): Don't document
+	nonexisting return values. Pointed out by Cosimo Cecchi.
+
+2008-08-23  Tor Lillqvist  <tml@novell.com>
+
+	Bug 548988 - g_file_replace fails on Windows when the target file
+	exists already
+
+	* glocalfileoutputstream.c (g_local_file_output_stream_close): On
+	Windows, close the file before potentially renaming it (in case we
+	have been writing to a file with a temporary name).
+
+	(g_local_file_output_stream_close, handle_overwrite_open): Use
+	GLocalFileStat instead of plain struct stat, for passing to
+	_g_local_file_info_create_etag(). Thus also use _fstati64()
+	instead of plain fstat() on Windows.
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+2008-08-15  Padraig O'Briain  <padraig.obriain@sun.com>
+
+	* gunixmounts.c: Add zfs to ignore_fs array in guess_system_internal:
+	Fix for #542156.
+
+2008-08-13  Tor Lillqvist  <tml@novell.com>
+
+	* win32/gwinhttpvfs.c
+	* win32/gwinhttpvfs.h
+	* win32/gwinhttpfile.c
+	* win32/gwinhttpfileinputstream.c
+	* win32/gwinhttpfileoutputstream.c: Refactor some common code
+	snippets into helper functions. Check HTTP response status
+	codes. Implement g_winhttp_file_query_info(), looking at
+	Content-Length, Content-Type and Last-Modified.
+
+	* win32/winhttp.h: Add some symbolic constants that are not
+	publicly documented. Just a handful, so it should be OK to use
+	information from the Windows SDK's headers.
+
+2008-08-13  Tor Lillqvist  <tml@novell.com>
+
+	Bug 546582 - Callbacks from GFileMonitor present a GFile in the
+	wrong folder
+
+	* win32/gwin32directorymonitor.c
+	(g_win32_directory_monitor_callback): Patch by Erik van Pienbroek.
+
+2008-08-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* ginputstream.c:
+	* goutputstream.c: Add intro docs.
+
+2008-08-13  Tor Lillqvist  <tml@novell.com>
+
+	* win32/gwinhttpfileoutputstream.c
+	(g_winhttp_file_output_stream_write): Don't write the
+	Content-Length header ourselves, WinHttpSendRequest() takes care
+	of that when the dwTotalLength parameter is non-zero. Increment
+	offset by the number of actual bytes sent, although I wonder if
+	such a scenario is possible where less than requested would be
+	sent and accepted by the server without errors.
+
+2008-08-13  Tor Lillqvist  <tml@novell.com>
+
+	* win32/gwinhttpvfs.c
+	* win32/gwinhttpvfs.h
+	* win32/gwinhttpfile.c
+	* win32/gwinhttpfile.h
+	* win32/gwinhttpfileinputstream.c
+	* win32/gwinhttpfileinputstream.h
+	* win32/gwinhttpfileoutputstream.c
+	* win32/gwinhttpfileoutputstream.h: New files implementing
+	GWinHttpVfs and related classes, a GVfs for HTTP and HTTPS URIs on
+	Windows. The implementation uses the WinHttp API. Both reading and
+	writing are supported, i.e. GET and PUT requests. When writing,
+	each write call is done using a separate PUT request with a
+	Content-Range header. Requests for file URIs and plain pathnames
+	are forwarded to GLocalVfs.
+
+	* win32/winhttp.h: Reverse engineered <winhttp.h>, borrowed from
+	WINE. Used as there is no <winhttp.h> bundled with mingw, and
+	requiring people to download the Windows SDK just for this one
+	header is not reasonable.
+
+	* win32/Makefile.am: Add above files.
+
+	* giomodule.c: Call _g_winhttp_vfs_get_type() on Windows to set up
+	the plumbing for the above.
+
+2008-08-11  Sven Neumann  <sven@gimp.org>
+
+	* gfilenamecompleter.c
+	* glocaldirectorymonitor.c
+	* gmountoperation.c
+	* gunionvolumemonitor.c
+	* gunixmount.c
+	* gunixmounts.c
+	* gunixvolume.c
+	* gunixvolumemonitor.c
+	* gvolumemonitor.c
+	* gwin32mount.c
+	* gwin32volumemonitor.c: use canonical signal names.
+
+2008-08-11  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Put a list of the platform-dependent .la files in
+	the subdirectories in the platform_deps Make variable, and make
+	libgio-2.0.la depend on that, so that it gets relinked if one of
+	the dependent libraries has changed.
+
+2008-08-11  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (platform_libadd): Remove -lwininet which had been
+	added by mistake. We will probably eventually be using WinHTTP,
+	not the older WinInet anyway. (Actually I am working on it.)
+
+2008-08-10  Felix Riemann  <friemann@svn.gnome.org>
+
+	Bug 547080 – g_file_copy leaks expected errors
+
+	* gfile.c: (g_file_copy): Clear G_IO_ERROR_NOT_SUPPORTED errors
+	before trying the next fallback routine.
+
+2008-08-09  Loïc Minier  <lool@dooz.org>
+
+	Bug 535124 – umask 002 not being applied for new directories, new
+	files get the correct umask
+
+	* gfile.c (g_file_make_directory)
+	(g_file_make_directory_with_parents): Document ownership and
+	permissions of newly created directories as being the default
+	ones of the process.
+
+2008-08-08  Loïc Minier  <lool@dooz.org>
+
+	Bug 535124 – umask 002 not being applied for new directories, new
+	files get the correct umask
+
+	* glocalfile.c: (g_local_file_make_directory): Use 0777 instead of
+	0755 as umask
+
+2008-08-08  Tor Lillqvist  <tml@novell.com>
+
+	* gwin32mount.c: Remove unused code. Whitespace cleanup.
+
+	* gwin32volumemonitor.c (get_connected_drives): Put questionable
+	code that didn't actually do anything inside #if 0, and add a
+	comment wondering what the code was supposed to do. This also gets
+	rid of a leftover debugging printout.
+
+2008-08-07  Paul Pogonyshev  <pogonyshev@gmx.net>
+
+	* gfileicon.c (g_file_icon_get_property)
+	(g_file_icon_set_property): New functions.
+	(g_file_icon_class_init): Hook them up.  Install `GFileIcon:file'
+	property.
+	(g_file_icon_new): Use the property (bug #546132).
+
+2008-08-06  Paul Pogonyshev  <pogonyshev@gmx.net>
+
+	* gthemedicon.c (g_themed_icon_get_property): Also handle
+	`PROP_USE_DEFAULT_FALLBACKS'.
+	(g_themed_icon_class_init): Make
+	`GThemedIcon:use-default-fallbacks' read-write (bug #546483).
+
+2008-08-05  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 546371 – Improve docs re g_file_monitor
+
+	* gfilemonitor.c: Mention g_file_monitor() in the docs.
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.5 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 546017 – Don't copy attributes when copying a symlink
+
+	* gfile.c (g_file_copy_attributes): Specify
+	G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS in the call to 
+	g_file_set_attributes_from_info. Patch by Christian Kellner
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* gemblemedicon.[hc]: 
+	* gio.symbols:
+	* gemblem.[hc]: Add GEmblem to make the emblem mechanism
+	a bit more extensible. Work by Clemens Buss.
+
+	* gioenums.h: Add GEmblemOrigin.
+	* Makefile.am: Glue
+
+2008-08-03  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+	Bug 546079 – leak in xdgmime
+	
+	* xdgmime/xdgmime.c (xdg_mime_shutdown): Fix memory leak.
+	
+2008-08-03  Tor Lillqvist  <tml@novell.com>
+
+	* win32/gwin32directorymonitor.h
+	* win32/gwin32directorymonitor.c: Whitespace cleanup to match GLib
+	style.
+
+2008-08-03  Tor Lillqvist  <tml@novell.com>
+
+	* win32/gwin32directorymonitor.c
+	(g_win32_directory_monitor_callback): Make prototype match
+	LPOVERLAPPED_COMPLETION_ROUTINE to avoid warning. Cast
+	LPOVERLAPPED parameter to local GWin32DirectoryMonitorPrivate
+	pointer.
+
+	(g_win32_directory_monitor_constructor):
+	GLocalDirectoryMonitor::dirname is in UTF-8 like all other file
+	names in the GLib API on Windows, so convert to UTF-16 and open
+	with CreateFileW().
+
+2008-08-03  Tor Lillqvist  <tml@novell.com>
+
+	Bug 541036 - Gnumeric crashes when trying to open Desktop or
+	user's folder under Windows
+
+	* win32/gwin32directorymonitor.c
+	(g_win32_directory_monitor_constructor): Ignore error from
+	CreateFile() when opening directory. Instead of asserting, just
+	store INVALID_HANDLE_VALUE then in
+	GWin32DirectoryMonitorPrivate::hDirectory. Also ignore error from
+	ReadDirectoryChangesW().
+	(g_win32_directory_monitor_cancel): Don't attempt to close
+	directory handle if it is INVALID_HANDLE_VALUE.
+
+2008-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c: Remove debug spew
+
+2008-08-01  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc : add gemblembedicon
+
+2008-07-30  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 545457 – gdmsetup crashed with SIGSEGV in
+	g_unix_mount_guess_should_display()
+
+	* gunixvolumemonitor.c (get_mount_for_mount_path): Don't 
+	crash if no mount is found.
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 545203 – gfile.c: argument is different type.
+
+	* gfile.c (open_read_async_thread): Pass a GError **
+	to g_file_set_error_literal.
+	Reported by Kazuki Iwamoto
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 545157 – wrong/no list of "open with" applications for .cc and
+	.cpp files
+
+	* gdesktopappinfo.c (get_all_desktop_entries_for_mime_type):
+	Collect all ancestors, not just direct parents. Pointed
+	out by Bastien Nocera
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.am: Install gemblemedicon.h
+
+2008-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gemblemedicon.[hc]: Add a GIcon implementation that can
+	add an emblem to another icon.
+
+	* gio.h:
+	* Makefile.am:
+	* gio.symbols: Glue
+
+	* gloadableicon.c:
+	* gfileicon.c: Small documentation additions.
+
+2008-07-28  Tor Lillqvist  <tml@novell.com>
+
+	* gwin32appinfo.c (g_win32_app_info_get_icon): Correct return
+	type.
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (gio-2.0.lib): Pass appropriate -machine flag to lib.exe.
+
+2008-07-24  David Zeuthen  <davidz@redhat.com>
+
+	* gmount.[ch]:
+	* gio.symbols:
+	Also export a g_mount_guess_content_type_sync() function.
+
+2008-07-23  Matthias Clasen  <mclasen@redhat.com>
+
+	529694 – SELinux context setting support
+
+	* gfileinfo.c: Support setting selinux attributes.
+	Patch by Tomas Bzatek
+
+2008-07-22  Priit Laes <plaes@plaes.org>
+
+	Bug 544140 - fam-helper 64-bit issue?
+
+	* fam/fam-helper.c: Added missing include so compiler doesn't complain.
+
+2008-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.4 ===
+
+2008-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gvolumemonitor.[hc]:
+	* gmountoperation.c:
+	* gioenums.h:
+	* gdrive.c:
+	* gvfs.c:
+	* gmount.c: Documentation fixes
+
+2008-07-19  Matthias Clasen  <mclasen@redhat.com>
+
+	543504 – crash in Epiphany Web Browser: Opening local file
+
+	* gappinfo.c:
+	* gasyncresult.c:
+	* gdesktopappinfo.c:
+	* gdrive.c:
+	* gfile.c:
+	* gicon.c:
+	* gloadableicon.c:
+	* gmount.c:
+	* gseekable.c:
+	* gvolume.c: Register types thread-safely.
+	Patch by Christian Persch
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* gcontenttype.c: Remove debug spew
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 543560 – enable gio-FEN back-end warnings on Solaris will crash
+	any applications
+
+	* fen/fen-kernel.c: Remove a warning that was causing
+	crashes. Reported by Lin Ma.
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 543040 – async reading on dummy file will crash on
+	GIO_USE_VFS=local
+
+	* gfile.c (open_read_async_thread): Cope with read_fn being
+	NULL. Reported by Lin Ma.  
+
+2008-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols:
+	* gcontenttype.[hc]: Add g_content_type_guess_for_tree().
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gvfs.h:
+	* gdesktopappinfo.h: 
+	* giomodule.c: Rename a chapter id to avoid filename conflict.
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 540616 – mem leak in filechooser button
+
+	* gunixvolumemonitor.c (get_mount_for_mount_path): Free
+	the mount entry. Reported by Chrisitan Persch
+
+2008-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfile.c: Small documentation fixes.
+
+2008-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* gunixmounts.c: Use g_strcmp0 instead of rolling our own.
+
+2008-07-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gvolumemonitor.c:
+	* gfile.c:
+	* gvolume.c:
+	* gmount.c: Documentation improvements.
+
+2008-07-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols:
+	* gmount.[hc]: Add g_mount_guess_content_type(). 
+
+2008-07-06  David Zeuthen  <davidz@redhat.com>
+
+	* gio.symbols:
+	* gvolume.[ch]: Add new method g_volume_get_activation_root(). This
+	is needed for easily handling adoption of foreign volumes by
+	out-of-process volume monitors (#541793)
+
+2008-07-06  David Zeuthen  <davidz@redhat.com>
+
+	* gvolumemonitor.[ch]:
+	* gunionvolumemonitor.c: Export the eject-button signal on the
+	volume monitor class (#541794).
+
+2008-07-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* gappinfo.c: More doc tweaks
+
+2008-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gappinfo.c: Clarify some docs
+
+2008-07-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c: Fix a stupid mistake.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfilemonitor.c: Fix the build.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 536160 – Add g_file_monitor()
+
+	* gio.symbols:
+	* gfile.[hc]: Add g_file_monitor which can return either
+	a file or a directory monitor.  Proposed by Behdad Esfahbod
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	536733 – gio build failure on Irix
+
+	* glocalfile.c: Use a configure check for structfs.f_bavail.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 534639 – add g_desktop_app_info_new_from_keyfile
+
+	* gio.symbols:
+	* gdesktopappinfo.[hc]: Add a function to create a
+	GDesktopAppInfo from a GKeyFile. Proposed by Josselin Mouette.
+
+2008-07-02  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gappinfo.c: Fix ulink in doc to make gtk-doc happy.
+
+2008-07-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* gunixmounts.c: Fix a doc typo.
+
+2008-07-01  Cody Russell  <bratsche@gnome.org>
+
+	* gio/gcontenttype.c:
+	* gio/gwin32appinfo.c:
+	* gio/gwin32volumemonitor.c:
+	* gio/gwin32mount.c: Fixed some include problems.
+
+2008-07-01  Cody Russell  <bratsche@gnome.org>
+
+	* gio/gioenums.h:
+	* gio/giotypes.h:
+	Moved all relevant typedefs into these files.
+
+	* gio/*.[ch]:
+	Updated wrt added files.
+
+	Split types into separate file for easier maintainership. (#538564)
+
+2008-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 540331 – g_file_append_to () documentation: can return NULL
+
+	* gfile.c (g_file_append_to): Clarify docs.
+	Patch by Jared Moore
+
+2008-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 539090 – g_content_type_from_mime_type() should unalias
+
+	* gcontentype.c (g_content_type_from_mime_type): Unalias.
+	Patch by Markus Bergman
+
+2008-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 538836 – make check failure on PPC and ALPHA: pltcheck.sh on
+	g_atomic_pointer_get
+
+	* pltcheck.sh: Allow g_atomic_pointer_get, to fix 'make check'
+	on ppc and alpha. Reported by Mart Raudsepp
+
+2008-06-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/Makefile.am: 
+	* tests/memory-output-stream.c: Add some tests for
+	GMemoryOutputStream. 
+
+2008-06-29  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 540423 – unrecoverable error after g_seekable_truncate(seekable,
+	0, ...)
+
+	* gmemoryoutputstream.c (array_resize): Handle truncation to
+	zero correctly. Reported by Akira Tagoh
+
+2008-06-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmemoryoutputstream.c: Trivial doc fixes
+
+2008-06-29  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 540802 – g_list_prepend doesn't concat lists
+
+	* giomodule.c (_g_io_modules_ensure_loaded): Don't g_list_prepend
+	one list to another. Pointed out by Jan Arne Petersen
+
+2008-06-28  Michael Natterer  <mitch@imendio.com>
+
+	* gfileicon.c: remove semicolons from G_IMPLEMENT_INTERFACE().
+
+2008-06-18  Matthias Clasen <mclasen@rdhat.com>
+
+	* glocalfileinfo.c: Don't do fallback for user-home and user-desktop
+	to avoid problems with partial icon themes.
+	
+2008-06-17  Hans Breuer  <hans@breuer.org>
+
+	* gwin32mount.[ch] gwin32volumemonitor.[ch] : bits and pieces from 
+	gtk-2-12 and gunix*.[hc] to make the file chooser show drive letter
+	access again on win32, see bug #538127
+	* giomodule.c : ensure GWin32VolumeMonitor is registered
+	* glocaldireoctorymonitor.c : initial state on win32 is_mounted=TRUE
+	* Makefile.am makefile.msc : updated
+
+2008-06-16  Hans Breuer  <hans@breuer.org>
+
+	* glocalfileenumerator.c(_g_local_file_enumerator_new) : declaration 
+	and initialization in one step avoids c99ism
+
+2008-06-16  Christian Persch  <chpe@gnome.org>
+
+	* gio/gappinfo.c
+	* gio/gbufferedinputstream.c
+	* gio/gcancellable.c
+	* gio/gdatainputstream.c
+	* gio/gdesktopappinfo.c
+	* gio/gfile.c
+	* gio/gfileenumerator.c
+	* gio/gfileinputstream.c
+	* gio/gfileoutputstream.c
+	* gio/ginputstream.c
+	* gio/glocaldirectorymonitor.c
+	* gio/glocalfile.c
+	* gio/glocalfileenumerator.c
+	* gio/glocalfileinfo.c
+	* gio/glocalfilemonitor.c
+	* gio/glocalfileoutputstream.c
+	* gio/gmemoryinputstream.c
+	* gio/gmemoryoutputstream.c
+	* gio/goutputstream.c
+	* gio/gwin32appinfo.c: Use g_set_error_literal where appropriate. Patch from 
+	bug #535947.
+
+2008-06-16  Tor Lillqvist  <tml@novell.com>
+
+	Bug 538362 - Get Win32 icons back in the file chooser
+
+	* gcontenttype.c (g_content_type_get_icon): Look up the icon
+	corresponding to a file extension in the Registry. Patch by Hans
+	Breuer.
+	(get_registry_classes_key): Handle also REG_EXPAND_SZ type values.
+	
+2008-06-16  Tor Lillqvist  <tml@novell.com>
+
+	Patches by Hans Breuer:
+
+	* glocalfile.c (is_xp_or_later): Handle compiling against older
+	SDK headers with missing VerifyVersionInfo().  Conditioned on
+	_MSC_VER, but should probably use some better test.
+	* glocalfile.c (g_local_file_query_filesystem_info): Don't test
+	uninitialised statfs_result variable on Win32.
+
+2008-06-16  Michael Natterer  <mitch@imendio.com>
+
+	* *.c: chain up unconditionally in finalize() and dispose(). Also
+	don't dereference these function pointers when calling them since
+	that has no meaning at all.
+
+2008-06-16  Ross Burton  <ross@burtonini.com>
+
+	* gfileenumerator.c:
+	Remove check for dispose implementation as it annoys Emmanuele.
+	
+2008-06-16  Ross Burton  <ross@burtonini.com>
+
+	Bug 536252 – GFileEnumerator should allow access to the containing
+	GFile
+	
+	* gfileenumerator.c:
+	* gfileenumerator.h:
+	* gfile.h:
+	Add g_file_enumerator_get_container() and a container writeable
+	construct-only property.  Also shuffle around typedefs to make it
+	compile.
+	
+	* glocalfileenumerator.c:
+	* glocalfileenumerator.h:
+	* glocalfile.c:
+	Instead of a string filename take a GFile in the constructor and
+	use it to set the container property.
+	
+	* gio.symbols:
+	Update with new API.
+
+2008-06-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfile.c: Make includes more uniform
+
+2008-06-12  Yevgen Muntyan  <muntyan@tamu.edu>
+
+	* tests/live-g-file.c (sample_struct):
+	Use less fancy unicode filenames, so the test doesn't fail
+	on Mac OS X (#531476).
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.17.2 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.1 ===
+
+2008-06-11  A. Walton  <awalton@gnome.org>
+
+	* tests/g-file.c (test_g_file_new_null):
+	Fix broken test case.
+
+2008-06-11  Matthias Clasen <mclasen@redhat.com>
+
+	* pltcheck.sh: We use g_clear_error now.
+
+2008-06-11  Matthias Clasen <mclasen@redhat.com>
+
+	* glocalfile.c (g_local_file_enumerate_children): Revert
+	an unintended change.
+
+2008-06-11  Matthias Clasen <mclasen@redhat.com>
+
+	* gfile.c (g_file_replace_contents): Don't unref before the last use.
+
+2008-06-10  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 537546 – 'desktop' shortcut in file chooser looks like a generic
+	folder
+	
+	* glocalfileinfo.c (_g_local_file_info_get): Return user-desktop
+	as icon for the desktop directory, also make user-home and
+	user-desktop the preferred icons.
+
+2008-06-10  Matthias Clasen <mclasen@redhat.com>
+
+	* gio.symbols:
+	* gthemedicon.[hc] (g_themed_icon_prepend_name): New function,
+	to add a name to the front of the list.
+
+2008-06-10  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 537392 – Additional colon in xattr name
+
+	* glocalfileinfo.c (set_xattr): Skip the second colon of the prefix,
+	too. Reported by  Alessandro Morandi 
+
+2008-06-10  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 536641 – Filesystem querying in gio does not list AFS and autofs
+	file systems
+
+	* glocalfile.c (get_fs_type): Add afs and autofs.
+	Patch by Danny Baumann.
+
+2008-06-10  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 528600 – g_dummy_file_get_parent("scheme://example.com/")
+
+	* gdummyfile.c (g_dummy_file_get_parent): Return NULL if there
+	is no parent.  (Owen Taylor, patch by Christian Neumair)
+	
+2008-06-10  Paolo Borelli  <pborelli@katamail.com>
+
+	* gfile.c (g_file_replace_contents): do not leak the output stream.
+
+2008-06-10  Michael Natterer  <mitch@imendio.com>
+
+	* gcontenttype.c (g_content_type_get_icon): fix SEGV by not using
+	uninitialized memory as array index.
+
+2008-06-10  Tor Lillqvist  <tml@novell.com>
+
+	* gcontenttype.c (g_content_type_can_be_executable)
+	(g_content_type_get_icon) [Win32]: Add TODO comments.
+
+2008-06-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* xdgmime/Makefile.am: Fix the build
+
+2008-06-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* gcontenttype.c (g_content_type_get_icon): Use icons specified
+	in the shared mime database, if available.
+
+	* xdgmime/*: Sync with upstream. This brings support for
+	glob weights, generic icons, and changes the cache format to 
+	version 1.1.
+
+2008-05-28  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am: don't define G_DISABLE_SINGLE_INCLUDES, it's in
+	the global CPPFLAGS now.
+
+	* tests/data-input-stream.c
+	* tests/data-output-stream.c
+	* tests/g-file-info.c
+	* tests/g-file.c
+	* tests/live-g-file.c
+	* tests/memory-input-stream.c: don't include <glib/gtestutils.h>
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.0 ===
+
+	* tests/live-g-file.c: Clean up after the tests, so make distcheck
+	doesn't complain about leftover files.
+
+2008-05-27  simon.zheng  <simon.zheng@sun.com>
+
+	* glocalfile.c: (g_local_file_query_filesystem_info):
+	Fix #533369. Make G_FILE_ATTRIBUTE_FILESYSTEM_TYPE work on Solaris.
+
+2008-05-26  Michael Natterer  <mitch@imendio.com>
+
+	* gmemoryoutputstream.h: declare
+	g_memory_output_stream_get_data_size().
+
+2008-05-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/*: Make tests work 
+
+2008-05-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols: Add g_memory_output_stream_get_data_size.
+
+2008-05-25  Ross Burton  <ross@burtonini.com>
+
+	* glocalfile.c:
+	Fix typo in error message (#534764).
+
+2008-05-25  Ross Burton  <ross@burtonini.com>
+
+	* Makefile.am:
+	Fix circular dependency loop for gioenumtypes.h (#534759).
+
+2008-05-19  Hans Breuer  <hans@breuer.org>
+
+	* Makefile.am : EXTRA_DIST += makefile.msc
+
+2008-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* gcontenttype.h:
+	* gcontenttype.c: (g_content_type_from_mime_type):
+	New function to create a content type from a mime type. (#527175,
+	Milan Crha)
+
+2008-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 532965 – Should not return filesystem::free for certain file systems
+
+	* glocalfile.c (g_local_file_query_filesystem_info) Don't return
+	free space for ncpfs.
+
+2008-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 530196 – _g_local_file_has_trash_dir() doesn't handle st_dev == 0
+
+	* glocalfile.c (_g_local_file_has_trash_dir): Handle the case that
+	st_dev might be zero.
+
+2008-05-16  Tor Lillqvist  <tml@novell.com>
+
+	* win32/gwin32directorymonitor.c: #define _WIN32_WINNT 0x0400 to
+	get declaration of ReadDirectoryChangesW() from Platform SDK headers.
+
+2008-05-13  Bastien Nocera  <hadess@hadess.net>
+
+	* gfile.c (has_valid_scheme): A URI scheme must start with a
+	letter, even if later more characters are allowed (#532852)
+
+2008-05-05  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent
+	code from being checked in that breaks the build of applications
+	which use G_DISABLE_SINGLE_INCLUDES.
+
+	* makegioalias.pl: make the alias file include "glib.h" instead of
+	"glibconfig.h".
+
+	* gio.symbols: whitespace change to force regeneration of the
+	alias file after above script change.
+
+	* gfileinfo.h: remove inlcusion of <glib/gfileutils.h>.
+
+	* gfilenamecompleter.c: remove inclusion of "gurifuncs.h".
+
+	* gioerror.h: #include <glib.h> instead of <glib/gerror.h>.
+
+	* glocalfileinfo.c: remove inclusion of <glib/gchecksum>.
+
+2008-04-28  David Zeuthen  <davidz@redhat.com>
+
+	* gunixmounts.c (g_unix_mount_guess_should_display): Avoid
+	displaying mounts in a subdirectory not accessible to the
+	user (#526320).
+
+2008-04-22  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am: fix library versioning (it was 0.0.0).
+
+2008-04-21  Lin Ma  <Lin.Ma@Sun.COM>
+
+	* fen/fen-data.c, fen/fen-helper.c, fen/fen-missing.c, fen/fen-node.c:
+	Default disable all loggings.
+	* fen/fen-kernel.c: (printevent), (port_add_kevent),
+	(port_fetch_event_cb): Fixed two macro nits.
+
+2008-04-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* xdgmime/xdgmime.c: Rework the timestamp checking code
+	to protect against duplicate directories in XDG_DATA_DIRS.
+	Fixes fd.o bug 12513, reported by Joe Shaw.
+
+2008-04-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Partically revert the last commit after realizing that
+	xdg_mime_media_type_equal doesn't have to init at all.
+
+	* xdgmime/xdgmime.h:
+	* xdgmime/xdgmime.c: Get rid of _xdg_mime_media_type_equal
+
+	* xdgmime/xdgmimecache.c: Use xdg_mime_media_type_equal
+
+2008-04-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Avoid possible memory corruption in xdgmime, fd.o bug 12512,
+	reported by Joe Shaw and Federico Mena Quintero.
+
+	* xdgmime/xdgmime.c(_xdg_mime_media_type_equal): Implement.
+	(xdg_mime_media_type_equal): Turn into a wrapper around the 
+	_-prefixed version.
+
+	* xdgmime/xdgmimecache.c: Use the _-prefixed versions of comparison
+	functions throughout.
+
+2008-04-16  Michael Meeks  <michael.meeks@novell.com>
+
+	* gdesktopappinfo.c (g_desktop_app_info_new_from_filename): 
+	tolerate an empty TryExec= line without failing; nautilus used
+	to create launchers with these in previous versions. Fixes #528433
+
+2008-04-09  Padraig O'Briain  <padraig.obriain@sun.com>
+
+	* gdesktopappinfo.c: In g_app_info_create_from_commandline set comment
+	after name. Fixes #527132.
+
+2008-04-08  Tomas Bzatek  <tbzatek@redhat.com>
+
+	* gfile.c: (g_file_replace):
+	Doc update
+
+2008-04-07  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 526796 – Wrong order of arguments in g_file_copy's fallback
+
+	* gfile.c (file_copy_fallback): Fix the argument order. Patch
+	by Christian Kellner.
+
+2008-04-04  Sebastien Bacher  <seb128@ubuntu.com>
+
+	* gunixmounts.c: (g_unix_mount_guess_should_display):
+	Don't list the user directory as a mount, fix potential issue
+	when other users have a similar naming and don't special case the
+	gvfs mounts there since that's not required (#525866)
+
+2008-03-31  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c (get_parent):
+	Don't leak parent.
+	
+2008-03-31  A. Walton  <awalton@svn.gnome.org>
+
+	* gfile.c (g_file_query_file_type):
+	Always return a GFileType enum value (#520715).
+
+2008-03-31  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileenumerator.c:
+	Read readdir() info in chunks (of 1000) and sort
+	the chunks by inode before stat:ing.
+	This is a 20% performance increase in testing
+	gvfs-ls on /usr/bin with cold cache.
+
+2008-03-31  Alexander Larsson  <alexl@redhat.com>
+
+	* gmemoryoutputstream.c:
+	Clarify docs for g_memory_output_stream_get_size.
+	Add g_memory_output_stream_get_data_size.
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols:
+	* gfile.c:
+	* gfile.h: Add g_file_query_file_type convenience function
+	to query the type of a file.  (#520715, Mikkel Kamstrup Erlandsen)
+
+2008-03-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfileenumerator.c:
+	* gfile.c: Fix some documentation typos.  (#524950, Rob Bradford)
+
+2008-03-28  A. Walton  <awalton@svn.gnome.org>
+
+	* giomodule.c (_g_io_modules_ensure_loaded):
+	Adds GIO_EXTRA_MODULES environment variable support, closing bug 
+	#523039.
+
+2008-03-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	(copy_stream_with_progress):
+	Fix up last commit.
+	
+2008-03-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	(copy_stream_with_progress):
+	(file_copy_fallback):
+	Fallback to g_file_query_info for source size
+	if g_file_input_stream_query_info fails. (#524579)
+
+2008-03-28  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c (g_local_file_move):
+	Reuse old string instead of adding new one.
+
+2008-03-28  Lin Ma  <Lin.Ma@Sun.COM>
+
+	* fen/*.[hc]: still copyright issue. I hate copyright.
+
+2008-03-27  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c (g_local_file_move):
+	Return G_IO_ERROR_IS_DIRECTORY, not G_IO_ERROR_WOULD_MERGE when moving
+	file over directory. This is according to the docs and what the move via
+	copy+remove fallback does.
+
+2008-03-27  Lin Ma  <Lin.Ma@Sun.COM>
+
+	* fen/*.[hc]: Updated copyright.
+
+2008-03-20  Lin Ma  <Lin.Ma@Sun.COM>
+
+	* fen/fen-data.c: (fdata_adjust_changed): Removed a bad formatted msg.
+
+2008-03-20  Lin Ma  <Lin.Ma@Sun.COM>
+
+	* fen/fen-data.c: (process_events), (fdata_add_event): Fixed FEN does
+	not emit attribute changed events when optimizing changed events.
+	* fen/fen-helper.c, fen/fen-kernel.c: Added ifdef to default disable
+	warning messages.
+
+2008-03-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmountoperation.[hc]: Small documentation additions
+
+2008-03-19  Sebastien Bacher  <seb128@ubuntu.com>
+
+	* gunixmounts.c: (guess_mount_type): 
+	consider nfs4 mounts as G_UNIX_MOUNT_TYPE_NFS (Closes: #523338)
+
+2008-03-19  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	(copy_stream_with_progress):
+	Bump block side for copy to 64k to minimize
+	overhead for low latency links. (#523015)
+
+2008-03-16  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (libgio_2_0_la_DEPENDENCIES): Make libgio-2.0.la
+	depend on gio.def on Windows.
+
+2008-03-12  David Zeuthen  <davidz@redhat.com>
+
+	* gio.symbols:
+	* gunixmounts.[ch]:
+	Add g_unix_mount_monitor_set_rate_limit() function (#521946)
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gunixmounts.c:
+	(guess_mount_type):
+	Avoid redudant tests (#521851)
+	Patch from Josselin Mouette
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gfilemonitor.c:
+	(g_file_monitor_is_cancelled):
+	Fix C89 issue (#521672)
+	Patch from Jens Granseuer
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+	* fam/fam-helper.[ch]:
+	* fam/fam-module.c:
+	Shut down fam (including removing fam GSource) when
+	module is unloaded (#521513)
+	Patch from Joe Marcus Clarke   
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+	* giomodule.c:
+	(_g_io_modules_ensure_loaded):
+	Fix up FEN ifdefs
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	(g_local_file_query_filesystem_info):
+	Use right define name for f_fstypename member check
+
+2008-03-14  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* fen/Makefile.am: Added.
+	* fen/fen-data.[ch]: Added.
+	* fen/fen-dump.[ch]: Added.
+	* fen/fen-helper.[ch]: Added.
+	* fen/fen-kernel.[ch]: Added.
+	* fen/fen-missing.[ch]: Added.
+	* fen/fen-node.[ch]: Added.
+	* fen/fen-sub.[ch]: Added.
+	* fen/gfendirectorymonitor.[ch]: Added.
+	* fen/gfenfilemonitor.[ch]: Added.
+	* giomodule.c:
+	Added Solaris FEN file notification backend.
+	Patch from Lin Ma <Lin.Ma@Sun.COM>
+
+2008-03-13  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Actually use the gio.def file when linking the
+	library on Windows. Produce .lib library for Microsoft's toolchain
+	when possible. Install the .lib and .def file like for the other
+	libraries of GLib.
+
+2008-03-13  Tomas Bzatek  <tbzatek@redhat.com>
+
+	* tests/live-g-file.c:
+	Include live-g-file in standard set of tests, making a temporary
+	directory in source structure.
+	
+	Clean target directory before the tests (write mode only)
+
+2008-03-12  Tor Lillqvist  <tml@novell.com>
+
+	Bug 517419 - gio win32 directory monitor
+	Implementation by Vlad Grecescu.
+	
+	* win32/Makefile.am
+	* win32/gwin32directorymonitor.h
+	* win32/gwin32directorymonitor.c: New files.
+
+	* giomodule.c: Set up the GWin32DirectoryMonitor plumbing.
+
+	* Makefile.am: Add the win32 subdirectory.
+
+2008-03-12  Tor Lillqvist  <tml@novell.com>
+
+	* glocalfileinfo.h: Introduce a macro GLocalFileStat that is the
+	normal struct stat on Unix but struct _stati64 on Windows to have
+	access to 64-bit file size information. Use that instead of struct
+	stat in the functions declared here in this private header.
+
+	* glocalfileinfo.c: Corresponding changes. Move some G_OS_WIN32,
+	S_ISLNK and HAVE_UTIMES ifdefs and add some more to avoid compiler
+	warnings about unused functions and variables. Don't set
+	meaningless attributes like inode numbers on Windows.
+
+2008-03-12  Benjamin Otte  <otte@gnome.org>
+
+	* gvfs.h:
+	trim whitespace so gtk-doc groks the function name
+
+2008-03-12  Tor Lillqvist  <tml@novell.com>
+
+	* glocalfile.c (_g_local_file_has_trash_dir): Implement as empty,
+	returning FALSE, on Win32.
+
+2008-03-11  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	* glocalfileinfo.[ch]:
+	Correctly implement can_trash by actually
+	looking for a trash dir, not just assuming
+	one exists.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.16.1 ===
+
+2008-03-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gthemedicon.c:
+	Fix crashes in new constructor and properties code
+
+2008-03-10  Murray Cumming  <murrayc@murrayc.com>
+
+	* gfile.c: Minor spelling correction in documentation:
+	existance -> existence.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+2008-03-10  Matthias Clasen <mclasen@redhat.com>
+
+	* gio.symbols: Remove g_file_contains_file here, too.
+
+2008-03-10  Matthias Clasen <mclasen@redhat.com>
+
+	* gthemedicon.c: Add properties to make bindings happy.  (#517676,
+	Samuel Cormier-Iijima)
+
+2008-03-08  Tor Lillqvist  <tml@novell.com>
+
+	* glocalfile.c: Define FILE_READ_ONLY_VOLUME if it is missing from
+	winnt.h. (#521145)
+
+2008-03-07  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	(g_local_file_query_filesystem_info):
+	Use struct statfs.f_fstypename if availible (e.g. on OpenBSD)
+	Patch from Jasper Lievisse Adriaanse
+
+2008-03-06  Tor Lillqvist  <tml@novell.com>
+
+	* gfileinfo.h: Correct milliseconds to microseconds in the doc
+	comments for the *_USEC attributes.
+
+2008-03-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c (g_file_query_exists):
+	Add g_return_val_if_fail check (#520700)
+
+2008-03-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	* gfilemonitor.c:
+	* gthemedicon.c:
+	* gunionvolumemonitor.c:
+	* gunixmounts.c:
+	* tests/g-file.c:
+	* tests/live-g-file.c:
+	* xdgmime/xdgmimecache.c:
+	Fix sparse warnings (#519489)
+
+2008-03-05  Alexander Larsson  <alexl@redhat.com>
+
+	* gfilemonitor.c:
+	Make cancellation threadsafe (i.e.
+	guarantee its only done once, and always
+	done)
+	
+	* glocaldirectorymonitor.c:
+	Make sure we the monitor lives while the
+	mounts_changed callback is being called (#520484)
+
+2008-03-04  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gbufferedinputstream.c: Fix typo in parameter
+	documentation.
+
+2008-03-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	Remove deprecated symbols we kept for one release.
+
+2008-03-04  Murray Cumming  <murrayc@murrayc.com>
+
+	* ginputstream.c:
+	* goutputstream.c: Tiny documentation corrections.
+
+2008-03-03  Alexander Larsson  <alexl@redhat.com>
+
+	* gunionvolumemonitor.c:
+	* gvolumemonitor.h:
+	Fix the adopt_orphan_mount vfunc to take a
+	volume_monitor reference in an ABI compat way.
+	This change is not API compat, but the added
+	arg is not used in the only user of this vfunc, so
+	all we get is a harmless warning in gvfs (#520169)
+	
+2008-03-01  Benjamin Otte  <otte@gnome.org>
+
+	* gfile.c:
+	clarify docs for g_file_delete().
+
+2008-02-29  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileinfo.c:
+	(get_content_type):
+	Make sure empty files get text/plain type (#518720)
+
+2008-02-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gcontenttype.c:
+	Fix type warnings
+	
+	* gunixvolume.c:
+	(g_unix_volume_mount):
+	Add missing GMountMountFlags argument
+
+2008-02-26  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	(g_local_file_delete):
+	Handle filesystems (like ntfs-3g) that return EEXIST instead
+	of ENOTEMPTY (#518816)
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.6 ===
+
+2008-02-25  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gfile.c (g_file_find_enclosing_mount):
+	* ginputstream.c (g_input_stream_set_pending):
+	* glocalfile.c (g_local_file_find_enclosing_mount):
+	* gmount.c (g_mount_unmount), (g_mount_eject), (g_mount_remount):
+	* goutputstream.c (g_output_stream_set_pending):
+
+	Fixup translator comments (#518578).
+
+2008-02-25  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gfile.c (g_file_find_enclosing_mount):
+	* giomodule.c:
+	* glocalfile.c (g_local_file_find_enclosing_mount):
+	* goutputstream.c:
+
+	Fix a few typos in translator comments and documentation.
+
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	* ginputstream.c:
+	* glocalfile.c:
+	* gmount.c:
+	* goutputstream.c:
+	Add translator comments (#518578)
+
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:	
+	Reintroduce g_file_contains_file, keep around for one
+	unstable release cycle to avoid crashing to many apps.
+	Make sure to delete after release.
+
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	Remove deprecated g_file_contains_file.
+
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gfilemonitor.c:
+	Emit actual change signals in an idle handler.
+	This avoids reentrance and locking problems in
+	the file notification backends.
+	
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gunixmounts.c:
+	(g_unix_mount_guess_should_display):
+	Remove type guessing, instead just display
+	mounts in /media and in ~/.
+
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	Make new strings reuse old ones.
+	
+2008-02-25  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	Implement trashing and filesystem::readonly for win32 (#517235)
+	Patch from Yevgen Muntyan
+
+2008-02-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfileinfo.h: Documentation fixes.
+
+2008-02-22  Alexander Larsson  <alexl@redhat.com>
+
+	* gcontenttype.c (g_content_type_get_icon):
+	Look at old-style gnome mime icon names too, as many
+	have not moved to the new style.
+
+2008-02-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* *.c: Correct the @include in for section docs.
+
+2008-02-21  David Zeuthen  <davidz@redhat.com>
+
+	* glocalfileinfo.c: (_g_local_file_info_get):
+	* gcontenttype.c:
+	(g_content_type_get_icon): Implement this function by
+	moving bits from glocalfileinfo.c
+	(g_content_type_get_description): Unalias before getting
+	description (#517687)
+
+	* gfile.c: (g_file_class_init),
+	(g_file_query_filesystem_info_async),
+	(g_file_query_filesystem_info_finish),
+	(query_filesystem_info_data_free),
+	(query_filesystem_info_async_thread),
+	(g_file_real_query_filesystem_info_async),
+	(g_file_real_query_filesystem_info_finish):
+	* gfile.h: Implement async version of
+	g_file_query_filesystem_info()
+
+	* gfileinfo.h: Add new attributes for filesystem::use-preview
+
+	* gio.symbols: Update
+
+	* gthemedicon.c: (g_themed_icon_append_name):
+	* gthemedicon.h: Add new new convenience function.
+
+	* gunionvolumemonitor.c: (g_union_volume_monitor_dispose),
+	(get_mounts), (get_volumes), (get_connected_drives),
+	(get_volume_for_uuid), (get_mount_for_uuid),
+	(g_union_volume_monitor_init), (populate_union_monitor),
+	(g_volume_monitor_get), (_g_mount_get_for_mount_path),
+	(g_volume_monitor_adopt_orphan_mount):
+	* gvolumemonitor.c:
+	* gvolumemonitor.h: Use recursive locks so it's safe for volume
+	monitor implementations to call into the main volume monitor. Also
+	separate object initialization and volume monitor initialization
+	such that non-native volume monitors can properly adopt their
+	mounts away.
+
+2008-02-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	Fix doc typo
+	
+2008-02-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	Add more documentation about how GFiles work (from #517086)
+
+2008-02-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* gio.symbols:
+	Add new g_file_has_prefix that does the same as g_file_contains_file.
+	Deprecate g_file_contains_file and add a macro that converts
+	it to g_file_has_prefix.
+	The reason for this change is that the contains_file() name seems to
+	imply that this does more work than what it does, but its really only
+	a name match (from #517086)
+	
+	* gdummyfile.c:
+	* glocalfile.c:
+	* tests/g-file.c:
+	Update to match the above change.
+
+2008-02-20  Benjamin Otte  <otte@gnome.org>
+
+	* gfile.c: (g_file_mount_mountable), (g_file_unmount_mountable),
+	(g_file_eject_mountable):
+	even more cases of not returning in error path
+
+2008-02-20  Benjamin Otte  <otte@gnome.org>
+
+	* gfile.c: (g_file_mount_mountable): 
+	return from function in error path.
+
+2008-02-18  Sylvain Pasche <sylvain.pasche@gmail.com>
+
+	* gfile.h:
+	 Remove trailing coma in GMountMountFlags struct
+
+2008-02-18  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	* glocalfileinfo.c:
+	* glocalfileoutputstream.c:
+	Use g_unlink/g_rename instead of unlink/rename;
+	do not pass raw filenames to g_set_error. (#517239)
+	Patch from Yevgen Muntyan.
+
+2008-02-18  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	* glocalfileoutputstream.c:
+	Open files with O_BINARY on windows. (#517140)
+
+2008-02-14  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileoutputstream.c:
+	Correctly check for HAVE_FCHMOD and HAVE_FCHOWN
+
+2008-02-14  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	Copy permissions with file on copy (#514084)
+	This is what cp does and makes sure e.g. the
+	exec permissions are kept.
+	Its kinda weird in that it keeps the permission bits
+	the same while the uid and gid are different. However
+	the new uid is the user so its not a security issue,
+	and I've heard no complaints about cp on this issue.
+
+2008-02-13  Ryan Lortie  <desrt@desrt.ca>
+
+	* gfileinfo.h: add G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT
+
+2008-02-13  Alexander Larsson  <alexl@redhat.com>
+
+	* inotify/inotify-path.c:
+	Define IN_ONLYDIR if not in header (#515346)
+
+2008-02-12  Alexander Larsson  <alexl@redhat.com>
+
+	* tests/live-g-file.c:
+	C89 fixes (#515892)
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.15.5 ===
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* gio.symbols: Add g_mount_mount_flags_get_type.
+
+2008-02-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileinfo.c:
+	(g_file_info_set_attribute_mask):
+	(g_file_attribute_matcher_matches_id):
+	Correctly handle NULL GAttributeMatcher meaning
+	matches nothing. (Fixes #513492)
+
+2008-02-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* gmount.[ch]:
+	* gvolume.[ch]:
+	Added GMountMountFlags enum and added a flags
+	argument to all mount calls.
+	
+	This is an API/ABI change for future extensibility,
+	as I think we will need at least an
+	inhibit-autorun flag (the panel needs this).
+	There are no flags defined yet though.
+
+2008-02-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileinfo.h:
+	Added new standard::description attribute.
+	Requested by Vincent, and useful for both
+	panel and nautilus
+
+2008-02-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	Minor docs cleanup
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* *.c: Documentation additions
+
+2008-02-10  Matthias Clasen <mclasen@redhat.com>
+
+	* gappinfo.h: Formatting cleanup
+	* gappinfo.c: Fix up docs.
+
+2008-02-09  Matthias Clasen <mclasen@redhat.com>
+
+	* gunixmounts.c: Consistently use getmntent_r() and fall
+	back to getmntent().  (#515492)
+
+2008-02-09  Matthias Clasen <mclasen@redhat.com>
+
+	* gbufferedinputstream.c:
+	* ginputstream.c:
+	* goutputstream.c: Use G_STRFUNC instead of __FUNCTION__.
+
+	* tests/data-input-stream.c:
+	* tests/data-output-stream.c: Portability fixes.
+
+2008-02-08  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.symbols: 
+	* gunixvolume.c:
+	* gvolume.[ch]:
+	Add g_volume_should_automount.
+	Docs needed.
+
+2008-02-07  Tor Lillqvist  <tml@novell.com>
+
+	* tests/Makefile.am (TEST_PROGS): live-g-file won't build on
+	Win32, too Unix-specific.
+
+2008-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+	* pltcheck.sh: Skip g_bit_*().  Inline functions may end up with
+	a local plt if the compiler doesn't support what we want.  Bug #514702
+
+2008-02-06  Murray Cumming,,,  <murrayc@murrayc.com>
+
+	reviewed by: <delete if not using a buddy>
+
+	* gfile.c:
+	* gunixinputstream.c:
+	* gunixoutputstream.c:
+
+2008-02-06  Tomas Bzatek  <tbzatek@redhat.com>
+
+	* tests/Makefile.am:
+	* tests/live-g-file.c:
+	* tests/live-g-file.txt:
+	New GIO testing module working over real data
+
+2008-02-06  Tomas Bzatek  <tbzatek@redhat.com>
+
+	* glocalfileoutputstream.c (g_local_file_output_stream_close):
+	Fallback to rename() if link() is not available
+	(when no support on target filesystem)
+
+2008-02-06  Michael Natterer  <mitch@imendio.com>
+
+	* gfileinfo.c (g_file_info_get_icon): replace
+	"icon && G_IS_ICON (icon)" by simply "G_IS_ICON (icon)".
+
+2008-02-06  Tomas Bzatek  <tbzatek@redhat.com>
+
+	* gfile.c (g_file_create):
+	Documentation update of error codes
+
+2008-02-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	Update to use both mimeapps.list and
+	defaults.list as discussed on xdg list.
+
+2008-02-06  Benjamin Otte  <otte@gnome.org>
+
+	* gasyncresult.c:
+	* gfilenamecompleter.c:
+	Fix some typos in the documentation.
+
+2008-02-06  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c (g_local_file_trash):
+	Don't succeed with trash if newly created
+	trash dir has the wrong owner. (#514696)
+
+2008-02-05  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c (g_local_file_move):
+	Don't spew warnings when destination is not
+	a GLocalFile.
+
+2008-02-03  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc : update
+
+2008-02-01  Michael Natterer  <mitch@imendio.com>
+
+	* gcontenttype.c (_g_unix_content_type_get_parents): assign the
+	return value of xdg_mime_list_mime_parents() to a variable of the
+	correct type.
+
+2008-02-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.c (g_app_info_launch_uris):
+	Actually call the launch_uris method, not
+	launch.
+
+2008-02-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c (g_desktop_app_info_equal):
+	Ensure appinfos with no id but same pointer value
+	compare equal
+
+2008-02-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.c (g_app_info_launch_default_for_uri): 
+	Don't leak appinfo.
+	
+2008-02-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.[ch]:
+	* gio.symbols:
+	Add g_app_info_launch_default_for_uri utility
+	function. (#513256)
+
+2008-02-01  Cosimo Cecchi  <cosimoc@svn.gnome.org>
+
+	* gdesktopappinfo.c:
+	Doc fix for g_app_info_get_default_for_uri_scheme ()
+	Bug #513483.
+
+2008-01-30  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.c:
+	Add doc comment about uris vs GFiles to
+	g_app_info_launch()
+	
+	* gdesktopappinfo.c:
+	Ensure uris passed to g_app_info_launch_uris()
+	are not roundtriped through GFile (as that
+	may be slightly destructive for e.g. mailto: links)
+
+2008-01-30  Alexander Larsson  <alexl@redhat.com>
+
+	* tests/data-input-stream.c:
+	* tests/data-output-stream.c:
+	C89 fixes from Jens Granseuer (#512849)
+
+2008-01-30  Alexander Larsson  <alexl@redhat.com>
+
+	* fam/fam-helper.c:
+	Fix gamin/fam difference build issue. (#509419)
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.h:
+	* gdesktopappinfo.c:
+	Add G_APP_INFO_CREATE_SUPPORTS_URIS flag
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	* gdesktopappinfo.h:
+	giomodule-priv.h include moved to .c file.
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gnativevolumemonitor.h (struct _GNativeVolumeMonitorClass):
+	Remove unused prio/name fields.
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gcontenttype.c (looks_like_text):
+	Don't treat whitespace as control chars.
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	Lazily create the desktop files for appinfos created
+	by g_app_info_create_from_commandline() when needed
+	for mime associations. This allows run-time use
+	of GAppInfo object without creating unnecessary
+	files on disk.
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.symbols:
+	Added new symbols to gio.symbols
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	Add g_file_query_default_handler utility to easily look up
+	the GAppInfo that handles a file.
+	
+	* gdesktopappinfo.[ch]:
+	* giomodule.c:
+	Set up an extension point for g_app_info_get_default_for_uri_scheme()
+	
+	* gvfs.c:
+	Remove unused function
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileenumerator.c:
+	Mention need to free returned value in
+	g_file_enumerator_next_files_finish docs.
+	Fix leak if g_file_enumerator_next_files_finish()
+	not called.
+
+2008-01-29  Alexander Larsson  <alexl@redhat.com>
+
+	* gcontenttype.c:
+	(_g_unix_content_type_get_parents):
+	Use list_parents, not get_parents from xdgmime, because
+	the later doesn't use the cache.
+	
+	* xdgmime/xdgmimecache.c:
+	(_xdg_mime_cache_list_mime_parents):
+	Don't list the same type as parent multiple times.
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+2008-01-28  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalvfs.c:
+	Register local vfs with prio 0.
+	
+	* gvfs.h:
+	Remove old name and prio class members
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/g-file.c: Disable some tests that are failing in
+	the absence of a http backend.
+
+2008-01-28  Alexander Larsson  <alexl@redhat.com>
+
+	* giomodule.[ch]:
+	* gio.symbols:
+	Add registration hooks for extension points.
+	Register the gio extension points.
+	
+	* fam/gfamdirectorymonitor.c:
+	* fam/gfamfilemonitor.c:
+	* glocaldirectorymonitor.[ch]:
+	* glocalfilemonitor.[ch]:
+	* gnativevolumemonitor.h:
+	* gunionvolumemonitor.c:
+	* gunixvolumemonitor.c:
+	* gvfs.[ch]:
+	* gvolumemonitor.h:
+	* inotify/ginotifydirectorymonitor.c:
+	* inotify/ginotifyfilemonitor.c:
+	Use the extension points registration instead
+	of g_type_children().
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+	
+	* gdrive.[hc]: 
+	* gvolume.[hc]: Document new API. 
+
+	* gfile.c (g_file_copy_async): Fix docs
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gbufferedinputstream.c:
+	* ginputstream.c:
+	* goutputstream.c: Replace uses of G_GNUC_PRETTY_FUNCTION by
+	__FUNCTION__.
+	
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* glocalfile.c: Avoid trivial differences in translatable strings.
+
+2008-01-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* fam/fam-helper.c (fam_event_to_file_monitor_event): Make this
+	build with gcc 3.4  (#509419)
+
+2008-01-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfilemonitor.c: Add references to g_file_monitor_file/directory()
+	(#509994, Murray Cumming)
+
+2008-01-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* gioscheduler.h: Make GIOSchedulerJobFunc return boolean
+	* gioscheduler.c: Keep calling io jobs until they return FALSE;
+	this allows big jobs to be executed in chunks, instead of blocking
+	the main loop for a long time.
+
+	* gsimpleasyncresult.c:
+	* giofile.c: Adapt callers.
+
+2008-01-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	Implement changes discussed on xdg list.
+	Now we can add supported mimetypes by just using defaults.list
+	We can also remove associations in defaults.list.
+
+2008-01-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	Don't make local copy of desktop file
+	for mimetype changes if the file already
+	supports the new mimetype.
+
+2008-01-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* ginputstream.c:
+	* goutputstream.c:
+	* gbufferedinputstream.c:
+	* glocalfile.c: String improvements.  (#511966, 
+	 Theppitak Karoonboonyanan)
+
+2008-01-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* gioscheduler.h: Expand docs a bit.
+
+2008-01-24  Alexander Larsson  <alexl@redhat.com>
+
+	* gdrive.[ch]:
+	Add g_drive_get_identifier and
+	g_drive_enumerate_identifiers
+
+	* gvolume.[ch]:
+	Add g_volume_get_identifier and
+	g_volume_enumerate_identifiers
+	
+	* gio.symbols:
+	Add symbols
+	
+	* gunixvolume.c:
+	Implement identifiers for unix backend
+
+2008-01-24  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* gfile.h:
+	* gio.symbols:
+	Add g_file_copy_async() (#511580)
+	Based on patch from Carlos Garcia Campos
+
+2008-01-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gioscheduler.c: Some documentation additions.
+
+2008-01-22  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	(g_desktop_app_info_new):
+	Don't leak basename.
+	
+2008-01-22  Alexander Larsson  <alexl@redhat.com>
+
+	* gdesktopappinfo.c:
+	(g_desktop_app_info_new_from_filename):
+	Don't leak GKeyFile
+
+2008-01-22  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileinfo.c (get_thumbnail_attributes):
+	Fix leak of uri
+
+2008-01-22  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	(canonicalize_filename):
+	Canonicalize paths that start with more than
+	two slashes.
+	
+	* tests/g-file.c:
+	(compare_two_files):
+	(test_g_file_new_for_path):
+	Test the above
+
+2008-01-22  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	Allow UTF-8 in file:// parse names.
+	
+	* tests/Makefile.am:
+	* tests/data-input-stream.c:
+	* tests/data-output-stream.c:
+	* tests/g-file-info.c:
+	* tests/g-file.c:
+	Added a bunch of tests from Tomas Bzatek
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+2008-01-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileinputstream.[ch]:
+	* gfileoutputstream.[ch]:
+	* gio.symbols:
+	Remove duplicated GSeekable functions. (#509990)
+	Just use the g_seekable_xxx() calls instead.
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glocal*.c:
+	* gvolumemanager.c: Whitespace cleanups.
+
+	* glocalfileoutputsteam.c (_g_local_file_output_stream_create):
+	Use the right mode when creating the file.
+
+2008-01-21  Murray Cumming,,,  <murrayc@murrayc.com>
+
+	* gfileenumerator.c:
+	* gfileinputstream.c:
+	* ginputstream.c:
+	* goutputstream.c: Documentation: Fixed minor typos 
+	and added more mentions of specific _finish() functions.
+
+2008-01-21  Alexander Larsson  <alexl@redhat.com>
+
+	* inotify/Makefile.am:
+	* inotify/inotify-helper.c:
+	* inotify/inotify-kernel.c:
+	* inotify/inotify-path.c:
+	* inotify/local_inotify.h: Removed.
+	* inotify/local_inotify_syscalls.h: Removed.
+	Removed the included copies of the inotify
+	headers. We now only use the <sys/inotify.h>
+	header which exists on modern systems.
+	This fixes problems on ARM and SH5 (#510448)
+	but is also generally much cleaner and future
+	safe. For instance, if other OSes add support
+	for inotify it should "just work".
+
+2008-01-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* inotify/*.c: Coding style fixes.
+	* inotify/inotify-missing.c: Use g_timeout_add_seconds
+	for the 1/4 Hz timer.
+
+2008-01-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfile.c:
+	* gfilemonitor.[hc]:
+	* gmemoryinputstream.c:
+	* gmemoryoutputstream.c:
+	* gmountoperation.c:
+	* gthemedicon.c: Documentation updates
+
+2008-01-20  Murray Cumming  <murrayc@murrayc.com>
+
+	* gfile.c: documentation: Fixed more minor 
+	typos.
+
+2008-01-18  Murray Cumming  <murrayc@murrayc.com>
+
+	* gmount.c: (g_mount_remount): documentation: 
+	Mention g_mount_remount_finish() instead of 
+	g_mount_unmount_finish().
+
+2008-01-18  Murray Cumming  <murrayc@murrayc.com>
+
+	* gappinfo.c:
+	* gcancellable.c:
+	* gfile.c: Fixed some minor typos in the 
+	documentation. 
+
+2008-01-18  Murray Cumming  <murrayc@murrayc.com>
+
+	* gio/gvolumemonitor.c: 
+	(g_volume_monitor_get_connected_drives): 
+	(g_volume_monitor_get_volumes): 
+	(g_volume_monitor_get_mounts): Documentation: 
+	Clarify the ownership of the regurn GLists.
+
+2008-01-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.h:
+	Add the async find_enclosing_mount version
+	to the header file too.
+
+2008-01-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	Add async version of find_enclosing_mount
+	with default implementation.
+
+2008-01-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	(g_file_copy):
+	(g_file_move):
+	Allow calls to implementation of copy and write
+	even if the type of the file implementations is
+	different. This can be used to implement native
+	upload and download calls in a vfs.
+	
+	* glocalfile.c:
+	(g_local_file_move):
+	Protect against the case where move is called
+	with one file not being local.
+	
+	Make sure we call the progress callback once
+	in the native move operation so that the caller
+	knows how many bytes were copied.
+
+2008-01-16  Murray Cumming  <murrayc@murrayc.com>
+
+	* gappinfo.c:
+	* gdatainputstream.c:
+	* gfile.c:
+	* gfileoutputstream.c:
+	* ginputstream.c:
+	* gmount.c:
+	* goutputstream.c:
+	* gseekable.c:
+	* gunixmounts.c: Corrected some typos in the documentation:
+	occured -> occurred.
+	its -> it's (where appropriate).
+
+2008-01-16  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* gio.symbols:
+	Add g_file_query_exists (#508771)
+
+2008-01-15  Murray Cumming  <murrayc@murrayc.com>
+
+	* gdrive.c:
+	* gfile.c:
+	* gmount.c:
+	* gvolume.c: For async functions that have no non-async 
+	version, document that the GAsyncReadyCallback may be NULL.
+	Bug #509626.
+
+2008-01-15  Alexander Larsson  <alexl@redhat.com>
+
+	* gmemoryinputstream.c:
+	* gmemoryoutputstream.c:
+	Don't do pointer arithmetic on void * (#508602)
+	Patch from Kazuki IWAMOTO
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.2 ===
+
+2008-01-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c (g_file_monitor_file):
+	Don't set error here, since we fallback to polling monitor.
+
+2008-01-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	(g_file_monitor_directory):
+	(g_file_monitor_file):
+	Add GError to file monitor calls
+	
+	* glocaldirectorymonitor.c:
+	* glocaldirectorymonitor.h:
+	* glocalfile.c:
+	* glocalfilemonitor.c:
+	* glocalfilemonitor.h:
+	* gunixmounts.c:
+	Update for above change
+
+2008-01-14  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfile.c:
+	(match_prefix):
+	Handle root correctly in g_file_get_relative_path (#508719)
+
+2008-01-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gasyncresult.c:
+	Clean up docs and example for GAsyncResult (#508074)
+
+2008-01-11  Murray Cumming  <murrayc@murrayc.com>
+
+	* gfile.c: Clarify the sentence about GAsyncReadyCallback, 
+	and correct some spelling mistakes. Bug #508108.
+
+2008-01-11  Matthias Clasen <mclasen@redhat.com>
+
+	* glocalfileinfo.c: Add a comment.
+
+2008-01-10  Murray Cumming  <murrayc@murrayc.com>
+
+	* gfileinfo.c: GFileInfo description: Mention 
+	how to actually set attributes in a GFile and how to discover 
+	which attributes are settable. Bug #508378.
+
+2008-01-10  A. Walton  <awalton@svn.gnome.org>
+
+	* gdesktopappinfo.c: (g_app_info_get_all_for_type),
+	(g_app_info_get_default_for_type):
+	Check for NULL content types.
+
+2008-01-10  Frederic Crozat  <fcrozat@mandriva.com>
+
+	* gunixmounts.c: add rpc_pipefs to systemfs list (#508309).
+
+2008-01-09  Murray Cumming  <murrayc@murrayc.com>
+
+	* gfile.c: *_async() functions: Several small corrections 
+	to the documentation, mostly correcting copy/paste errors 
+	and improving some sentences.
+
+2008-01-09  Dan Winship  <danw@gnome.org>
+
+	* glocalfile.c (get_unique_filename): x86_64 fix
+
+2008-01-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.symbols:
+	* gunixmount.c:
+	* gunixmounts.[ch]:
+	Add g_unix_mount_guess_should_display and use
+	for unix volume monitor backend.
+	This means we more or less show what the
+	gnome-vfs backend did.
+	Based on patch from Padraig O'Briain
+
+2008-01-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.symbols:
+	* gthemedicon.[ch]:
+	Add g_themed_icon_new_with_default_fallbacks
+	
+	* gunixmounts.c:
+	Use default fallbacks for icons
+
+2008-01-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio-marshal.list:
+	* gmountoperation.[ch]:
+	Change the API a bit so that unhandled methods
+	get reported via the reply, rather than by
+	the signal emission return value. This is because
+	some handlers can't know this immediately without
+	doing I/O, and this is an async operation that
+	should not block.
+
+2008-01-09  Alexander Larsson  <alexl@redhat.com>
+
+	* fam/fam-helper.c:
+	* fam/gfamdirectorymonitor.c:
+	* fam/gfamfilemonitor.c:
+	Fix double free crash (#508224)
+	Patch from Joe Marcus Clarke
+
+008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.1 ===
+
+2008-01-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gunixinputstream.c (g_unix_input_stream_skip_finish):
+	Fix warning (#507835)
+
+2008-01-07  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	Pass --internal to glib-genmarshal
+	
+	* gfilemonitor.c:
+	* gmountoperation.c:
+	* gio-marshal.list:
+	Use better types for signal arguments (#507822)
+
+2008-01-07  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	Build test subdir after .
+	Remove gdirectorymonitor.[ch]
+	
+	* gdirectorymonitor.[ch]:
+	* gfilemonitor.c:
+	* gfile.[ch]:
+	* gio.h:
+	Remove GDirectoryMonitor and make
+	GFileMonitor the baseclass for both file and
+	directory monitors. Lift the more generic
+	rate limiting code from GDirectoryMonitor
+	into GFileMonitor.
+	
+	* fam/fam-helper.c:
+	* fam/gfamdirectorymonitor.[ch]:
+	* inotify/ginotifydirectorymonitor.[ch]:
+	* inotify/inotify-helper.c:
+	* glocaldirectorymonitor.[ch]:
+	* glocalfile.c:
+	* gvolumemonitor.c:
+	Update for the removed GDirectoryMonitor.
+	
+	* gmemoryoutputstream.c:
+	Remove ununsed variable
+
+2008-01-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gmemoryinputstream.c:
+	Translate error strings
+	
+	* gio.symbols:
+	* gmemoryoutputstream.[ch]:
+	New implementation that avoids using GByteArray
+	in implementation and API. (#506377)
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* tests/*: Add a test for memory input streams.
+	
+	* Makefile.am: Add tests to SUBDIRS.
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* glocalfilemonitor.c:
+	* glocaldirectorymonitor.c: Mark property nicks and blurbs
+	for translation.
+
+2008-01-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c: Fix a docs typo.
+
+	* gfileattribute.c: Add information about extended attributes
+	to the documentation.  (#505058)
+
+2008-01-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gio-marshal.list:
+	* gmountoperation.c:
+	Use the right type (uint) for the ask_password signal.
+
+2008-01-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.[ch]:
+	* gwin32appinfo.c:
+	* gio.symbols:
+	Add g_app_info_supports_files() 
+	Remove desktop arg from g_app_info_should_show().
+	
+	* gdesktopappinfo.[ch]:
+	Implement g_app_info_supports_files() and new should_show()
+	Add g_desktop_app_info_set_desktop_env() to set the desktop
+	for should_show(). (This will be set by gtk+ later)
+
+2008-01-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.symbols:
+	* gmemoryinputstream.[ch]:
+	Improve API so that you can use multiple chunks
+	of memory and custom destroy functions. (#506374)
+
+2008-01-03  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileinfo.c:
+	Handle NULL attribute matchers safely, as we return this
+	for empty attribute matcher strings.
+
+2008-01-03  Alexander Larsson  <alexl@redhat.com>
+
+	* gunixmounts.c (g_unix_is_mount_path_system_internal):
+	Add /usr/local to list of internal mountpoints
+
+2008-01-03  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileinfo.c:
+	Check for HAVE_LCHOWN (#505887)
+	
+2008-01-03  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileinfo.h:
+	* glocalfileinfo.c:
+	Add define for selinux context attribute.
+	Fix missing : -> :: namespace separator change
+	Fix missing _ -> - name change for xattr-sys.
+	(#505058)
+
+2008-01-03  Alexander Larsson  <alexl@redhat.com>
+
+	* fam/Makefile.am:
+	Link to libglib and libgobject directly (#504879)
+	Patch from Sebastien Bacher
+
+2008-01-01  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gfile.c: Expanded the g_file_new_for_commandline_arg
+	description a bit, based on the code and the docs of the
+	other g_file_new_for_* functions.
+
+2007-12-31  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* gfilemonitor.h: Fixed typo in docs.
+
+2007-12-31  Mathias Hasselmann  <mathias@openismus.com>
+
+	Updates to GIO documentation. (#506395, Mikael Hermansson)
+
+	* gcontenttype.c: Describe memory management for return value of
+	g_content_types_get_registered(). Missing piece from #505815.
+	* gdrive.c, gmount.c, gvolumemonitor.c: Add more description to
+	GVolume, GDrive, GMounts, which hopefully gives the user less
+	confusions when using this API. Following explainations from
+	Alexander Larsson on gtk-devel-list.
+
+2007-12-30  Matthias Clasen  <mclasen@redhat.com> 
+
+	* gfileinfo.c: Expand the long description.
+
+2007-12-30  Matthias Clasen  <mclasen@redhat.com> 
+
+	* fam/Makefile.am:
+	* inotify/Makefile.am: Use GLIB_DEBUG_FLAGS. This should
+	fix builds with --disable-visibility.  (#500273, Christian Persch)
+
+2007-12-30  Matthias Clasen  <mclasen@redhat.com> 
+
+	* gdesktopfileinfo.c (g_app_info_get_all): Don't include NULLs
+	in the list of returned app infos.
+
+2007-12-30  Matthias Clasen  <mclasen@redhat.com> 
+
+	* gappinfo.c: Fix a cross-reference
+
+2007-12-30  Matthias Clasen  <mclasen@redhat.com> 
+
+	* gfileinputstream.c:
+	* gfileoutputstream.c:
+	* gloadableicon.h:
+	* gunixmounts.c:
+	* gmount.h:
+	* gdesktopappinfo.c:
+	* gvolumemonitor.c: 
+	* gfileinfo.c: Documentation updates.
+
+2007-12-26  Matthias Clasen  <mclasen@redhat.com> 
+
+	* gdesktopappinfo.c: Include crt_externs.h.  (#505730,
+	Tommi Komulainen)
+
+2007-12-26  Matthias Clasen  <mclasen@redhat.com> 
+
+	* gcontenttype.c (g_content_types_get_registered): Don't return
+	freed memory (#505815, Mikael Hermansson)
+
+2007-12-25  Paolo Borelli  <pborelli@katamail.com>
+
+	* glocalfileinfo.c (set_info_from_stat): fix typo in the ifdef
+	used to detect statbuf->st_blocks. (#505042)
+
+2007-12-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c (g_desktop_app_info_launch): Fix the
+	environment handling.  (#504829, Cosimo Cecchi)
+
+2007-12-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* gappinfo.c: Doc improvements
+	
+	* gdesktopappinfo.c (g_app_info_get_all): Return app infos,
+	not ids.
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.0 ===
+
+2007-12-20  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc : don't build gdesktopappinfo.obj, it collides 
+	with symbols gwin32appinfo.obj, added gmount.obj
+	* gio.symbols : mark g_desktop_app_* as G_OS_UNIX
+
+2007-12-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	* gfileattribute.c:
+	* gfileinfo.c:
+	* gfileinfo.h:
+	* gfilenamecompleter.c:
+	* glocalfile.c:
+	* glocalfileinfo.c:
+	* gpollfilemonitor.c:
+	File attribute renames:
+	std:: -> standard::
+	fs:: -> filesystem::
+	id::fs -> id::filesystem
+	
+2007-12-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* gdrive.[ch]:
+	* gmount.[ch]:
+	* gvolume.[ch]:
+	* gunixmount.c:
+	* gunixvolume.c:
+	* gio.symbols:
+	Add GMountUnmountFlags to all unmount and
+	eject calls.
+	Add g_mount_remount() call.
+
+2007-12-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gvfs.c (get_default_vfs):
+	Fix unused variable warning
+
+2007-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* pltcheck.sh: Update
+
+2007-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gunionvolumemonitor.c:
+	* gunixmount.c: Remove C99 comments
+
+2007-12-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols: Add some missing symbols
+
+2007-12-19  Alexander Larsson  <alexl@redhat.com>
+
+	* giomodule.c:
+	Make g_io_modules_load_all_in_directory not unuse
+	loaded modules so that users of it can do stuff
+	before unloading.
+	Init internal "module" types.
+	Initialize static prio and name for types so that
+	we don't have to load modules to get it.
+	
+	* gnativevolumemonitor.h:
+	* gvolumemonitor.h:
+	Move is_supported to parent class so that
+	non-native monitors can avoid being initialized
+	too. (For instance GDaemonVolumeMonitor if we're
+	not using GDaemonVfs.)
+	
+	* glocaldirectorymonitor.[ch]:
+	* glocalfilemonitor.[ch]:
+	* gunionvolumemonitor.c:
+	* gunixvolumemonitor.c:
+	* gvfs.c:
+	Find plugins using the static prio+name to
+	avoid unnecessarily loading the modules.
+
+2007-12-19  Alexander Larsson  <alexl@redhat.com>
+
+	* giomodule.c:
+	Remove warnings
+
+2007-12-19  Alexander Larsson  <alexl@redhat.com>
+
+	* gunionvolumemonitor.c:
+	Store the native type as GType, not class so that
+	we can unload it. But still avoid unnecessarily
+	unload modules.
+
+2007-12-19  David Zeuthen  <davidz@redhat.com>
+
+	Introduce g_volume_monitor_adopt_orphan_mount() function. Also
+	add signals 'disconnected' and 'eject-button' on GDrive. Add
+	signal 'removed' on GVolume and 'unmounted' on GMount.
+
+	* gdrive.c: (g_drive_base_init):
+	* gdrive.h:
+	* gfile.c: (g_file_mount_mountable),
+	(g_file_mount_enclosing_volume):
+	* gio.symbols:
+	* gioerror.h:
+	* gmount.c: (g_mount_base_init):
+	* gmount.h:
+	* gunionvolumemonitor.c: (g_volume_monitor_adopt_orphan_mount):
+	* gunixvolumemonitor.c: (update_volumes), (update_mounts):
+	* gvolume.c: (g_volume_base_init), (g_volume_mount):
+	* gvolume.h:
+	* gvolumemonitor.h:
+
+2007-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* *.c: Fix up includes in the section docs.
+
+2007-12-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gnativevolumemonitor.h:
+	* gunionvolumemonitor.c:
+	* gunixvolumemonitor.c:
+	Add is_supported() to GNativeVolumeMonitorClass so
+	that we can avoid having to create an object to see
+	if the backend is supported at runtime.
+	Also add name member and an env var to pick a specific
+	volume monitor backend.
+	
+	* gmountprivate.h:
+	* glocalfile.c:
+	Add cancellable to _g_mount_get_for_mount_path()
+	
+	* glocaldirectorymonitor.c:
+	* glocalfilemonitor.c:
+	Avoid loading and unloading modules while sorting.
+
+2007-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* gio.symbols:
+	* gunixmounts.[hc]: Namespace waste reduction, move some
+	g_get_unix_mount functions to the g_unix_mount namespace.
+
+	* gunixmounts.c:
+	* gunixvolumemonitor.c:
+	* glocalfile.c:
+	* glocaldirectorymonitor.c: Update all callers.
+
+	* gunixmounts.h: Remove leftover g_unix_get_canonical_device_path
+
+2007-12-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	Add doc comments about what GFile operations are
+	guaranteed to not block.
+
+2007-12-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gunixmounts.c:
+	Add missing #ifdef fixing OSX build.
+	(#503334, patch from Richard Hult)
+
+2007-12-14  David Zeuthen  <davidz@redhat.com>
+
+	* Makefile.am:
+	* gio.symbols:
+	* gmount.c: (g_mount_get_uuid), (g_mount_can_eject),
+	(g_mount_eject), (g_mount_eject_finish):
+	* gmount.h:
+	* gunionvolumemonitor.c: (g_union_volume_monitor_finalize),
+	(get_volume_for_uuid), (get_mount_for_uuid),
+	(g_union_volume_monitor_class_init),
+	(get_default_native_type_with_exclude), (get_default_native_type),
+	(get_native_type), (update_native_type),
+	(g_union_volume_monitor_init), (_g_mount_get_for_mount_path):
+	* gunixmount.c: (_g_unix_mount_new), (g_unix_mount_get_uuid),
+	(g_unix_mount_can_eject), (eject_unmount_cb),
+	(eject_unmount_read_error), (eject_unmount_do),
+	(g_unix_mount_unmount), (g_unix_mount_eject),
+	(g_unix_mount_eject_finish), (g_unix_mount_mount_iface_init):
+	* gunixmounts.c: (g_unix_mount_guess_can_eject),
+	(g_unix_mount_point_guess_can_eject):
+	* gunixmounts.h:
+	* gunixvolume.c: (_g_unix_volume_new), (g_unix_volume_get_uuid),
+	(g_unix_volume_can_eject), (g_unix_volume_get_drive),
+	(eject_mount_cb), (eject_mount_read_error), (eject_mount_do),
+	(g_unix_volume_mount), (g_unix_volume_eject),
+	(g_unix_volume_eject_finish), (g_unix_volume_volume_iface_init):
+	* gunixvolumemonitor.c: (get_volume_for_uuid),
+	(get_mount_for_uuid), (g_unix_volume_monitor_class_init),
+	(update_mounts):
+	* gvolume.c: (g_volume_get_uuid), (g_volume_can_eject),
+	(g_volume_eject), (g_volume_eject_finish):
+	* gvolume.h:
+	* gvolumemonitor.c: (g_volume_monitor_get_volume_for_uuid),
+	(g_volume_monitor_get_mount_for_uuid):
+	* gvolumemonitor.h:
+
+	Provide eject() on both GMount and GVolume and utility functions
+	to guess whether a GUnixMountPoint or GUnixMountEntry should be
+	ejected. Introduce the concept of UUID's and wire it into GVolume
+	and GMount and provide API on GVolumeMonitor to find such
+	instances. Also handle the case where an external
+	GNativeVolumeMonitor fails to initialize. Lock around the
+	_g_get_mount_for_mount_path() function such that volume monitor
+	implementations won't have to do locking themselves.
+
+2007-12-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* gdesktopappinfo.c:
+	* gunixmounts.c:
+	* gfileinfo.c:
+	* gvolumemonitor.c:
+	* gfile.h:
+	* gioscheduler.c:
+	* gvolume.h: Documentation updates
+
+2007-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* gunixmounts.c:
+	* gfile.h: Doc updates
+
+2007-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* gcontenttype.c:
+	* gdesktopappinfo.c: Use hash table iterators.
+
+2007-12-14  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* gfileattribute.[ch]:
+	* gfileattribute-priv.h:
+	Move GFileAttributeValue to a private header, as
+	its sort of ugly.
+	
+	* gfile.[ch]:
+	Make set_attribute take a type + a pointer instead
+	of a GFileAttributeValue.
+	
+	* gfileinfo.[ch]:
+	Fix up for above changes.
+	Add g_file_info_get_attribute_data to get
+	all info in one call, g_file_info_get_attribute_status
+	to get the status and g_file_info_get_attribute_as_string.
+	
+	* gio.symbols:
+	* glocalfile.c:
+	* glocalfileinfo.[ch]:
+	Update for changes
+	
+	* gunixmounts.c:
+	Make _guess_type static.
+
+2007-12-14  Yevgen Muntyan  <muntyan@tamu.edu>
+
+	* Makefile.am:
+	* inotify/Makefile.am: Fixed build when srcdir != builddir,
+	made mkenums and friends use temporary files to avoid leaving
+	empty generated files on failure (#503470).
+
+2007-12-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gmountoperation.h:
+	Fix AKS -> ASK typo
+
+2007-12-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.h:
+	* gfile.[ch]:
+	* gfileattribute.[ch]:
+	* gio.symbols:
+	* glocalfile.c:
+	* glocalfileoutputstream.c:
+	* gmountoperation.[ch]:
+	* goutputstream.[ch]:
+	Clean up all flags enums to not have _FLAGS in them
+	Make the names of some of the enums better.
+
+	* glocalfileinfo.c:
+	Fix warning
+	
+2007-12-14  Michael Natterer  <mitch@imendio.com>
+
+	* gio.symbols: fix g_io_scheduler symbol names.
+
+2007-12-14  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* fam/Makefile.am:
+	* gappinfo.h:
+	* gasyncresult.h:
+	* gbufferedinputstream.h:
+	* gbufferedoutputstream.h:
+	* gcancellable.h:
+	* gcontenttype.h:
+	* gdatainputstream.h:
+	* gdataoutputstream.h:
+	* gdesktopappinfo.h:
+	* gdirectorymonitor.h:
+	* gdrive.h:
+	* gfile.h:
+	* gfileattribute.h:
+	* gfileenumerator.h:
+	* gfileicon.h:
+	* gfileinfo.h:
+	* gfileinputstream.h:
+	* gfilemonitor.h:
+	* gfilenamecompleter.h:
+	* gfileoutputstream.h:
+	* gfilterinputstream.h:
+	* gfilteroutputstream.h:
+	* gicon.h:
+	* ginputstream.h:
+	* gio.h:
+	* gioerror.h:
+	* giomodule.h:
+	* gioscheduler.h:
+	* gloadableicon.h:
+	* gmemoryinputstream.h:
+	* gmemoryoutputstream.h:
+	* gmount.h:
+	* gmountoperation.h:
+	* goutputstream.h:
+	* gseekable.h:
+	* gsimpleasyncresult.h:
+	* gthemedicon.h:
+	* gunixinputstream.h:
+	* gunixmounts.h:
+	* gunixoutputstream.h:
+	* gvfs.h:
+	* gvolume.h:
+	* gvolumemonitor.h:
+	* inotify/Makefile.am:
+	Only allow including <gio/gio.h> from apps
+
+2007-12-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gioscheduler.[ch]:
+	* gsimpleasyncresult.c:
+	Rename gioscheduler calls so they all use the g_io_schedule_ prefix.
+	Split out the send_to_mainloop call into two versions instead
+	of having the block argument.
+
+2007-12-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gcancellable.[ch]:
+	* gio.symbols:
+	* gbufferedinputstream.c:
+	* gfileenumerator.c:
+	* gfileinputstream.c:
+	* gfileoutputstream.c:
+	* ginputstream.c:
+	* gioscheduler.c:
+	* goutputstream.c:
+	g_push/pop_current_cancellable ->
+	g_cancellable_push/pop_current
+
+2007-12-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* gio.symbols:
+	Rename g_mount_for_location to g_file_mount_enclosing_volume.
+
+2007-12-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gmountoperation.h:
+	G_PASSWORD_FLAGS_ANON_SUPPORTED -> G_PASSWORD_FLAGS_ANONYMOUS_SUPPORTED
+
+2007-12-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gioscheduler.c:
+	Fix race condition when freeing proxy in
+	g_io_job_send_to_mainloop().
+
+2007-12-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gfileattribute.c:
+	* gfileinfo.[ch]:
+	* glocalfile.c:
+	* glocalfileinfo.c:
+	Make attribute namespace separator "::" instead of ":".
+	Use - instead of _ as separator in attribute names.
+
+2007-12-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gbufferedinputstream.h:
+	* gbufferedoutputstream.h:
+	* gdatainputstream.h:
+	* gdataoutputstream.h:
+	* gdirectorymonitor.h:
+	* gfileenumerator.h:
+	* gfileinputstream.h:
+	* gfilemonitor.h:
+	* gfileoutputstream.h:
+	* gfilterinputstream.h:
+	* gfilteroutputstream.h:
+	* ginputstream.h:
+	* glocalfileinputstream.h:
+	* glocalfileoutputstream.h:
+	* gmemoryinputstream.h:
+	* gmemoryoutputstream.h:
+	* gnativevolumemonitor.h:
+	* goutputstream.h:
+	* gunixinputstream.h:
+	* gunixoutputstream.h:
+	* gvfs.h:
+	* gvolumemonitor.h:
+	s/parent/parent_instance/ in GObjects
+
+2007-12-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gdrive.h:
+	* gmount.h:
+	* gvolume.h:
+	No need for padding for interfaces
+	
+2007-12-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gappinfo.[ch]:
+	* gasyncresult.c:
+	* gbufferedinputstream.c:
+	* gbufferedoutputstream.c:
+	* gcancellable.c:
+	* gcontenttype.c:
+	* gdatainputstream.[ch]:
+	* gdesktopappinfo.c:
+	* gdirectorymonitor.c:
+	* gfile.[ch]:
+	* gfileattribute.[ch]:
+	* gfileicon.[ch]:
+	* gfileinfo.h:
+	* gfileinputstream.h:
+	* gfilemonitor.[ch]:
+	* gfileoutputstream.[ch]:
+	* gfilterinputstream.h:
+	* gfilteroutputstream.h:
+	* gicon.h:
+	* gioscheduler.c:
+	* gloadableicon.[ch]:
+	* gmemoryinputstream.c:
+	* gmountoperation.c:
+	* gthemedicon.c:
+	Fix up a bunch of details in the docs.
+
+	* glocalfileinfo.c:
+	CR/LF -> LF fixups
+	
+2007-12-11  David Zeuthen  <davidz@redhat.com>
+
+	Rework how volumes, drives and volume monitoring is
+	done. Previosly the model was
+
+	 GDrive <1-1> GVolume
+
+	where a GDrive instance represented a mount point and a GVolume
+	instance represented a mounted file system. This patch changes it
+	the model to
+
+		GDrive <1-N> GVolume <1-1> GMount
+
+	where GMount now serves the purpose of the old GVolume and the new
+	GVolume serves the purpose of the old GDrive. In addition the new
+	GDrive interface is used to represent a collection of GVolume
+	instances (typically partitions) and also contains utility to query
+	the state of the physical drive the GDrive object represents (such
+	as checking for media, polling the drive, ejecting the media etc.).
+
+	Also implement mounting and unmounting in the Unix volume monitor
+	backend. A subquent patch will introduce GDrive support for ejection
+	of media.
+
+	* Makefile.am:
+	* gdrive.c: (g_drive_is_media_check_automatic),
+	(g_drive_is_media_removable), (g_drive_has_media),
+	(g_drive_can_poll_for_media), (g_drive_eject),
+	(g_drive_eject_finish), (g_drive_poll_for_media),
+	(g_drive_poll_for_media_finish):
+	* gdrive.h:
+	* gfile.c: (g_file_find_enclosing_mount):
+	* gfile.h:
+	* gio.symbols:
+	* glocaldirectorymonitor.c:
+	(g_local_directory_monitor_constructor), (mounts_changed):
+	* glocalfile.c: (get_mount_info),
+	(g_local_file_find_enclosing_mount),
+	(g_local_file_file_iface_init):
+	* gnativevolumemonitor.h:
+	* gunionvolumemonitor.c: (get_mounts), (get_volumes),
+	(get_connected_drives), (g_union_volume_monitor_class_init),
+	(child_volume_added), (child_volume_removed),
+	(child_volume_changed), (child_mount_added), (child_mount_removed),
+	(child_mount_pre_unmount), (child_mount_changed),
+	(child_drive_changed), (g_union_volume_monitor_add_monitor),
+	(g_union_volume_monitor_remove_monitor),
+	(_g_mount_get_for_mount_path):
+	* gunixmounts.c: (g_unix_is_mount_path_system_internal),
+	(guess_system_internal), (_g_get_unix_mounts),
+	(_g_get_unix_mount_points), (g_get_unix_mount_at),
+	(g_unix_mount_free), (g_unix_mount_compare),
+	(g_unix_mount_get_mount_path), (g_unix_mount_get_device_path),
+	(g_unix_mount_get_fs_type), (g_unix_mount_is_readonly),
+	(g_unix_mount_is_system_internal), (g_unix_mount_guess_type),
+	(type_to_icon), (g_unix_mount_guess_name),
+	(g_unix_mount_guess_icon), (g_unix_mount_point_guess_name),
+	(g_unix_mount_point_guess_icon), (_canonicalize_filename),
+	(_resolve_symlink), (_resolve_dev_root):
+	* gunixmounts.h:
+	* gunixvolume.c: (g_unix_volume_finalize), (_g_unix_volume_new),
+	(_g_unix_volume_disconnected), (_g_unix_volume_set_mount),
+	(_g_unix_volume_unset_mount), (g_unix_volume_get_icon),
+	(g_unix_volume_get_name), (g_unix_volume_can_mount),
+	(g_unix_volume_get_drive), (g_unix_volume_get_mount),
+	(_g_unix_volume_has_mount_path), (mount_cb), (mount_read_error),
+	(g_unix_volume_mount), (g_unix_volume_mount_finish),
+	(g_unix_volume_volume_iface_init):
+	* gunixvolume.h:
+	* gunixvolumemonitor.c: (g_unix_volume_monitor_finalize),
+	(get_mounts), (get_volumes), (get_connected_drives),
+	(get_mount_for_mount_path), (g_unix_volume_monitor_class_init),
+	(mountpoints_changed), (mounts_changed),
+	(g_unix_volume_monitor_init),
+	(_g_unix_volume_monitor_lookup_volume_for_mount_path),
+	(find_mount_by_mountpath), (update_volumes), (update_mounts):
+	* gunixvolumemonitor.h:
+	* gvolume.c: (g_volume_get_mount), (g_volume_can_mount),
+	(g_volume_mount), (g_volume_mount_finish):
+	* gvolume.h:
+	* gvolumemonitor.c: (g_volume_monitor_class_init),
+	(g_volume_monitor_get_connected_drives),
+	(g_volume_monitor_get_volumes), (g_volume_monitor_get_mounts):
+	* gvolumemonitor.h:
+
+2007-12-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmountoperation.h (GPasswordFlags): Close the gap
+
+2007-12-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.am: Install gdesktopappinfo.h as unix-specific header.
+	* gio.symbols:
+	* gdesktopappinfo.[hc]: Remove _-prefixes
+
+2007-12-10  Tor Lillqvist  <tml@novell.com>
+
+	* glocalfile.c: Add some more G_OS_WIN32 conditionals to silence
+	gcc warnings.
+
+2007-12-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c (g_file_set_display_name):
+	Don't hardcode '/' (#502727)
+
+2007-12-09  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc : follow lib naming convention
+	* glocalfileinfo.c(win32_get_file_user_info) : working implementation
+	for user and group name, tested with ../tests/gio-ls
+
+2007-12-09  A. Walton  <awalton@svn.gnome.org>
+
+	* gdesktopappinfo.c:
+	* gdrive.c:
+	* gdrive.h:
+	* gfile.c:
+	* gfile.h:
+	* gfileattribute.c:
+	* gfileenumerator.c:
+	* gioerror.c:
+	* gioscheduler.c:
+	* gioscheduler.h:
+	* gloadableicon.c:
+	* gmemoryinputstream.c:
+	* gmemoryoutputstream.c:
+	* goutputstream.h:
+	* gsimpleasyncresult.c:
+	More documentation cleanup and filling in missing information, bringing
+	GIO to 99% symbol coverage.
+
+2007-12-08  Hans Breuer  <hans@breuer.org>
+
+	[gio compiles and links on win32, not sure how much already works]
+	* glocaldirectorymonitor.c : ifdefed out inotify emulation for win32
+	* glocalfile.c : use HAVE_UNISTD_H; implement file system size info 
+	base on win32 API; prefer g_lstat() over lstat(); instead of 
+	localtime_r() use an all GLib implementation on win32;
+	get_mount_info() still needs a win32 specifc implementation
+	* glocalfileinfo.c : use HAVE_*_H; start of implementation of 
+	win32_get_file_user_info to get owner/group info without uid/gid
+	* glocalfileinputstream.c : include <io.h> on win32
+	* glocalfileoutputstream.c : include <io.h> on win32 and some S_IS*
+	definition, use g_win32_ftruncate() for G_OS_WIN32
+	* gwin32appinfo.c : optionalize a bunch on #ifdef AssocQueryString
+	it is available with mingw/w32api but a mess with the M$ Platform SDKs
+	see: http://mail.gnome.org/archives/gtk-devel-list/2007-December/msg00014.html
+	* makefile.msc : updated
+
+2007-12-07  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileenumerator.c (_g_local_file_enumerator_new):
+	Avoid warning spew if error == NULL
+	
+2007-12-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.c:
+	Update docs wrt etags
+
+2007-12-06  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileinfo.h:
+	Include sys/types.h for dev_t (#501919)
+
+2007-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+	* gio.symbols:
+	* pltcheck.sh:
+	Make abicheck and pltcheck pass.
+
+2007-12-05  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* giomodule-priv.h: Added.
+	* glocaldirectorymonitor.c:
+	* glocalfilemonitor.c:
+	* gunionvolumemonitor.c:
+	* gvfs.c:
+	Actually add the declaration of _g_io_modules_ensure_loaded
+
+2007-12-05  Alexander Larsson  <alexl@redhat.com>
+
+	* gdatainputstream.c:
+	Fix warnings
+	
+	* gio.symbols:
+	* giomodule.[ch]
+	* glocaldirectorymonitor.c:
+	* glocalfilemonitor.c:
+	* gunionvolumemonitor.c:
+	* gvfs.c:
+	Make g_io_modules_ensure_loaded a private function and
+	don't pass in the dirname. This means we can do magic
+	directory finding in the win32 version.
+	Export the actual load-modules-in-directory code so that
+	gvfs can reuse that.
+
+2007-12-05  Alexander Larsson  <alexl@redhat.com>
+
+	* gbufferedinputstream.c:
+	* gbufferedoutputstream.c:
+	* gdrive.[ch]:
+	* gfile.[ch]:
+	* gfileenumerator.[ch]:
+	* gfileinputstream.c:
+	* gfileoutputstream.[ch]:
+	* gfilterinputstream.c:
+	* gfilteroutputstream.c:
+	* ginputstream.[ch]:
+	* glocalfile.c:
+	* glocalfileenumerator.c:
+	* glocalfileinputstream.c:
+	* glocalfileoutputstream.c:
+	* gmemoryinputstream.c:
+	* gmemoryoutputstream.c:
+	* goutputstream.[ch]:
+	* gseekable.[ch]:
+	* gunixdrive.c:
+	* gunixinputstream.c:
+	* gunixoutputstream.c:
+	Rename all struct members named:
+	read, write, close, truncate, or mount
+	to foo_fn, as these are reserved names
+	and could be defined as macros in libc.
+	(#501645)
+
+2007-12-04  Alexander Larsson  <alexl@redhat.com>
+
+	* goutputstream.c:
+	(g_output_stream_close):
+	Only call flush if non-null.
+
+2007-11-30  Dan Winship  <danw@gnome.org>
+
+	* ginputstream.c (g_input_stream_set_pending): Make this take a
+	GError and return a gboolean, and do the "outstanding operation"
+	check (and the "stream is already closed" check) itself.
+	(g_input_stream_clear_pending): Formerly set_pending(FALSE).
+
+	* goutputstream.c (g_output_stream_set_pending)
+	(g_output_stream_clear_pending): Likewise
+
+	* gbufferedinputstream.c: 
+	* gfileinputstream.c: 
+	* gfileoutputstream.c: Update for that
+
+	* gsimpleasyncresult.c (g_simple_async_report_gerror_in_idle):
+	Like g_simple_async_report_error_in_idle, but takes a GError
+	rather than building one.
+
+2007-11-30  Dan Winship  <danw@gnome.org>
+
+	* goutputstream.c: Don't cheat and unset the "pending" flag around
+	inner calls. Instead, call the class method directly rather than
+	the wrapper function that checks "pending"
+
+2007-12-03  Behdad Esfahbod  <behdad@gnome.org>
+
+	* glib/gnulib/Makefile.am: Fix EXTRA_DIST automake warnings. (#501107)
+
+2007-12-03  Hans Breuer  <hans@breuer.org>
+
+	[start of port to win32/msvc]
+	* gcancellable.c : HAVE_UNIST_H and _pipe()
+	* gcontenttype.c : only include <dirent.h> in the UNIX branch
+	* gdatainputstream.c : pointer arithmetic on void* is a gcc extension
+	* gdummyfile.c glocalfileinputstream.c gsimpleasyncresult.c : use 
+	HAVE_UNIST_H
+	* glocalfileoutputstream.c : use HAVE_UNIST_H and s/ssize_t/gssize/
+	* glocalvfs.c : use HAVE_PWD_H
+	* gio.symbols : ifdef unix specific functions with G_OS_UNIX
+	* makefile.msc : new file (maybe later converted to makefile.msc.in)
+	* Makefile.am : added to EXTRA_DIST
+
+2007-12-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfile.c (g_file_copy): Add a cross-reference to g_file_dup().
+	(#499783)
+
+2007-12-03  Alexander Larsson  <alexl@redhat.com>
+
+	* glocalfileinfo.c:
+	Handle OSX style xattrs API (#500506)
+
+2007-12-03  Alexander Larsson  <alexl@redhat.com>
+
+	* gfile.[ch]:
+	* glocalfile.c:
+	Add G_FILE_COPY_NO_FALLBACK_FOR_MOVE flag
+
+2007-12-02  A. Walton  <awalton@svn.gnome.org>
+
+	* gfile.c:
+	* gfileattribute.c:
+	Documentation accuracy fixes.
+
+2007-12-01  Behdad Esfahbod  <behdad@gnome.org>
+
+	* gioenumtypes.c.template: Fix typo.
+
+2007-12-01  Matthias Clasen <mclasen@redhat.com>
+
+	* gioenumtypes.c.template: Make threadsafe get_type() functions.
+
+2007-12-01  Matthias Clasen <mclasen@redhat.com>
+
+	* gdirectorymonitor.c:
+	* gfilemonitor.c: Add properties
+
+	* gbufferedoutputstream.c: Don't mark buffer-size property 
+	as construct-only.
+
+2007-12-01  Matthias Clasen <mclasen@redhat.com>
+
+	* gbufferedoutputstream.c: Add auto-grow property.
+
+2007-11-30  Matthias Clasen <mclasen@redhat.com>
+
+	* *.c: Unify the capitalization of section headings.
+
+2007-11-30  Matthias Clasen <mclasen@redhat.com>
+
+	* gmountoperation.c: Add properties
+	
+	* gdatainputstream.c: Turn byte-order and newline-type into
+	properties.
+
+2007-11-30  Matthias Clasen <mclasen@redhat.com>
+
+	* gioenumtypes.[hc].template: Templates for enum registration
+
+	* Makefile.am: Generate gioenumtypes.[hc]
+
+	* gio.h: Include gioenumtypes.h
+	* gappinfo.h:
+	* gfile.h: Add some explicit nicks.
+
+	* gio.symbols: Add new symbols
+
+	* pltcheck.sh: Adjust
+
+2007-11-30  Matthias Clasen <mclasen@redhat.com>
+
+	* *.c: Explain etags and link to the explanation
+
+2007-11-29  Matthias Clasen <mclasen@redhat.com>
+
+	* *.c: Explain I/O priority.
+
+	* *.c: More coding style fixes.
+
+2007-11-29  Matthias Clasen <mclasen@redhat.com>
+
+	* gasyncresult.c: Add another paragraph to the intro,
+	adjust coding style of example.
+
+2007-11-29  A. Walton <awalton@svn.gnome.org>
+
+	* gappinfo.c:
+	  Fixes unknown meaning in GAppLaunchContext docs.
+	* gfile.c:
+	  Clarify asynchronous ops.
+	* gfileattribute.c:
+	  Fix entity tag docs.
+	* gicon.c:
+	* gthemedicon.c:
+	  Provides missing gtk-doc section, fixes API docs slighly.
+	* gsimpleasyncresult.c:
+	  Fill in missing info in docs.
+	* gunixinputstream.c:
+	* gunixoutputstream.c:
+	  Be more expressive in short description.
+	* gunixvolume.c:
+	  Remove gtk-doc stubs for non-public API.
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* *.c: Coding style fixups
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* inotify/inotify-helper.c: Don't export the lock from libgio.
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.am:
+	* abicheck.sh: Fix copy-and-paste leftovers 
+
+2007-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gfile.h: Add G_FILE_COPY_FLAGS_NONE for consistency.
+
+2007-11-28  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* gdriveprivate.h:
+	Removed unnecessary file
+	
+	* gdesktopappinfo.[ch]:
+	* gdummyfile.[ch]:
+	* gfile.c:
+	* glocaldirectorymonitor.[ch]:
+	* glocalfile.[ch]:
+	* glocalfileenumerator.[ch]:
+	* glocalfileinputstream.[ch]:
+	* glocalfilemonitor.[ch]:
+	* glocalfileoutputstream.[ch]:
+	* glocalvfs.[ch]:
+	* gnativevolumemonitor.c:
+	* gpollfilemonitor.[ch]:
+	* gunionvolumemonitor.[ch]:
+	* gunixdrive.[ch]:
+	* gunixvolume.[ch]:
+	* gunixvolumemonitor.[ch]:
+	* gvfs.c:
+	* gvolumeprivate.h:
+	* inotify/ginotifydirectorymonitor.[ch]:
+	* inotify/ginotifyfilemonitor.[ch]:
+	* inotify/inotify-helper.c:
+	Append _ to all internal functions
+	
+	* gio.symbols:
+	Add missing symbols
+	Export symbols needed for modules
+
+2007-11-28  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* abicheck.sh: Added.
+	* makegioalias.pl: Added.
+	* pltcheck.sh: Added.
+	* gio.symbols: Added.
+	* *.c:
+	* inotify/*.c
+	Initial work on adding symbol handling.
+
+	* gvfs.h:
+	Correct ifdef guard name
+
+	* fam/Makefile.am:
+	* inotify/Makefile.am:
+	* xdgmime/Makefile.am:
+	Include toplevel Makefile.decl
+
+2007-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gcontenttype.c: Move doc comments to the unix section.
+
+	* *.[hc]: More trivial doc corrections.
+
+2007-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gpollfilemonitor.c:
+	* gunixmounts.c:
+	* gvfs.c:
+	* gfile.c:
+	* gdesktopappinfo.c:
+	* gwin32appinfo.c:
+	* gvolume.c:
+	* glocalvfs.c:
+	* gvolumemonitor.c:
+	* gdatainputstream.c:
+	* gdatainputstream.h:
+	* gdataoutputstream.c:
+	* gdataoutputstream.h:
+	* gfileinfo.h: Doc cleanups
+
+2007-11-28  Andre Klapper  <a9016009@gmx.de>
+
+	* gdesktopappinfo.c: Fix a typo.
+
+2007-11-27  Andre Klapper  <a9016009@gmx.de>
+
+	* glocalfileoutputstream.c: Fix a typo.
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio.h:
+	Don't include removed headers
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* gsocketinputstream.[ch]: Removed.
+	* gsocketoutputstream.[ch]: Removed.
+	* gunixinputstream.[ch]: Added.
+	* gunixoutputstream.[ch]: Added.
+	Renamed GSocket*Stream to GUnix*Stream and made
+	it unix-only, since its not really only for sockets
+	and it only works on unix (but is highly useful there).
+
+2007-11-27  Andrew Walton  <awalton@svn.gnome.org>
+	* gappinfo.c:
+	* gappinfo.h:
+	* gasynchelper.c:
+	* gasyncresult.c:
+	* gasyncresult.h:
+	* gbufferedinputstream.c:
+	* gbufferedinputstream.h:
+	* gbufferedoutputstream.c:
+	* gbufferedoutputstream.h:
+	* gcancellable.c: 
+	* gcancellable.h:
+	* gcontenttype.c:
+	* gdatainputstream.c:
+	* gdatainputstream.h:
+	* gdataoutputstream.c:
+	* gdataoutputstream.h:
+	* gdirectorymonitor.c:
+	* gdirectorymonitor.h:
+	* gdrive.c: 
+	* gdrive.h:
+	* gfile.c:
+	* gfile.h:
+	* gfileattribute.c:
+	* gfileattribute.h:
+	* gfileenumerator.c:
+	* gfileenumerator.h:
+	* gfileicon.c:
+	* gfileicon.h:
+	* gfileinfo.c:
+	* gfileinfo.h:
+	* gfileinputstream.c:
+	* gfileinputstream.h:
+	* gfilemonitor.c:
+	* gfilemonitor.h:
+	* gfilenamecompleter.c:
+	* gfilenamecompleter.h:
+	* gfileoutputstream.c:
+	* gfileoutputstream.h:
+	* gfilterinputstream.c:
+	* gfilterinputstream.h:
+	* gfilteroutputstream.c:
+	* gfilteroutputstream.h:
+	* gicon.c:
+	* gicon.h:
+	* ginputstream.c:
+	* ginputstream.h:
+	* gioerror.c:
+	* gioerror.h:
+	* giomodule.c:
+	* giomodule.h:
+	* gioscheduler.c:
+	* gioscheduler.h:
+	* gloadableicon.c:
+	* gloadableicon.h:
+	* glocalfileoutputstream.c:
+	* gmemoryinputstream.c:
+	* gmemoryinputstream.h:
+	* gmemoryoutputstream.c:
+	* gmemoryoutputstream.h:
+	* gmountoperation.c: 
+	* gmountoperation.h:
+	* goutputstream.c:
+	* goutputstream.h:
+	* gpollfilemonitor.c:
+	* gseekable.c:
+	* gseekable.h:
+	* gsimpleasyncresult.c:
+	* gsimpleasyncresult.h:
+	* gsocketinputstream.c:
+	* gsocketinputstream.h:
+	* gsocketoutputstream.c:
+	* gsocketoutputstream.h:
+	* gthemedicon.c:
+	* gthemedicon.h:
+	* gunixdrive.c:
+	* gunixmounts.c: 
+	* gunixmounts.h:
+	* gunixvolume.c:
+	* gunixvolumemonitor.c:
+	* gurifuncs.c:
+	* gurifuncs.h:
+	* gvfs.c:
+	* gvfs.h:
+	* gvolume.c:
+	* gvolume.h:
+	* gvolumemonitor.c: 
+	* gvolumemonitor.h:
+	Bumps documentation to 93% symbol coverage, touching most 
+	of the public files. Fixes broken function documentation prototypes. 
+	Fixes GCancellable inaccuracies. Removes unnecessary incomplete 
+	gtk-doc headers in private files.
+
+2007-11-27  Jürg Billeter  <j@bitron.ch>
+
+	* gbufferedinputstream.c: (g_buffered_input_stream_peek_buffer),
+	(g_buffered_input_stream_read_byte):
+	* gbufferedinputstream.h:
+	New functions for efficient access to buffer and simple single byte
+	reads.
+
+	* gdatainputstream.c: (scan_for_newline), (scan_for_chars),
+	(g_data_input_stream_read_until):
+	* gdatainputstream.h:
+	Use peek_buffer to avoid memcpy in scan_for_newline, implement
+	read_until with multiple stop chars.
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* fam/Makefile.am:
+	* inotify/Makefile.am:
+	Use the user-specified giomoduledir
+
+2007-11-27  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am
+	* gio.h:
+	Add catch-all gio.h header
+	Don't install gdummyfile.h
+
+2007-11-26  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am (gioinclude_HEADERS):
+	Remove trailing whitespace
+	
+2007-11-26  Alexander Larsson  <alexl@redhat.com>
+
+	Merge gio-standalone into glib
+
+2007-11-25  Christian Kellner  <gicmo@gnome.org>
+
+	* gio/goutputstream.c:
+	Fix small mistake in the docs.
+
+2007-11-21  Christian Persch  <chpe@gnome.org>
+
+	* gio/glocalfile.c: (g_local_file_trash):
+	Convert filenames to UTF-8 for GError.
+	Use g_mkdir_with_parent to create the Trash dir, and use mode 0700
+	as per xdg base dir spec.
+
+2007-11-21  Christian Persch  <chpe@gnome.org>
+
+	* gio/gdesktopappinfo.c:
+	Use that g_key_file_to_data cannot fail.
+	Some misc cleanups.
+	Use stock defines for the key file group and key names.
+	Use bitfields.
+
+2007-11-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.c:
+	(copy_stream_with_progress):
+	Make sure we do a final progress callback with
+	the full total size.
+
+2007-11-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Export g_file_copy_attributes
+	Remove padding as its not needed for interfaces
+
+2007-11-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.c:
+	* gio/gioerror.h:
+	* gio/glocalfile.c:
+	Add G_IO_ERROR_WOULD_MERGE for
+	copy/move dir on dir with overwrite.
+
+2007-11-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	* gio/glocalfileinfo.c:
+	Add COPY_NAME (this is an optional
+	non-modified utf8 version of the name) that
+	can roundtrip.
+
+2007-11-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileenumerator.c:
+	Report errors as GIOError, not GFileError
+
+2007-11-16  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileoutputstream.c:
+	* gio/gwin32appinfo.c:
+	Fix typos in strings.
+	Patch from Luca Ferretti <elle.uca@libero.it>
+
+2007-11-15  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.ac:
+	Post release version bump
+
+=== gio-standalone 0.1.2 ===
+
+2007-11-15  Alexander Larsson  <alexl@redhat.com>
+
+	* docs/reference/gio/Makefile.am:
+	Fix up distcheck by removing weird
+	non-needed stuff
+
+	* NEWS:
+	Update for release
+
+2007-11-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdesktopappinfo.c:
+	* gio/glocaldirectorymonitor.c:
+	* gio/glocalfile.c:
+	* gio/glocalfileinfo.c:
+	* gio/inotify/inotify-sub.c:
+	* programs/gio-cat.c:
+	* programs/gio-copy.c:
+	* programs/gio-info.c:
+	* programs/gio-ls.c:
+	* programs/gio-monitor-dir.c:
+	* programs/gio-monitor-file.c:
+	* programs/gio-mount.c:
+	* programs/gio-move.c:
+	* programs/gio-rm.c:
+	* programs/gio-save.c:
+	* programs/gio-trash.c:
+	Leak fixes from Kjartan Maraas
+
+2007-11-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/fam/fam-helper.c:
+	* gio/gdrive.[ch]:
+	* gio/glocalfileinfo.c:
+	* gio/gunixdrive.c:
+	* gio/gvfs.c:
+	* gio/gvolume.[ch]:
+	* gio/inotify/inotify-diag.c:
+	* gio/inotify/inotify-kernel.c:
+	Various code cleanups from Kjartan Maraas
+
+2007-11-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gioscheduler.c:
+	(init_scheduler):
+	Set up threadpool so that we cache 2 unused
+	idle threads for at 15 secs. This means we
+	will reuse thread-local data (like dbus connections)
+	for them.
+
+2007-11-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/fam/fam-helper.c:
+	* gio/fam/gfamdirectorymonitor.c:
+	* gio/fam/gfamfilemonitor.c:
+	* gio/gappinfo.c:
+	* gio/gcontenttype.c:
+	* gio/gdatainputstream.c:
+	* gio/gdataoutputstream.c:
+	* gio/gdummyfile.c:
+	* gio/gfile.c:
+	* gio/gfile.h:
+	* gio/gfileattribute.h:
+	* gio/gfileenumerator.c:
+	* gio/gfileinfo.c:
+	* gio/ginputstream.c:
+	* gio/gioerror.h:
+	* gio/glocalfile.c:
+	* gio/glocalfileinfo.c:
+	* gio/goutputstream.c:
+	* gio/gpollfilemonitor.c:
+	* gio/gsimpleasyncresult.c:
+	* gio/gunixmounts.c:
+	* gio/gunixmounts.h:
+	* gio/inotify/ginotifydirectorymonitor.c:
+	* gio/inotify/ginotifyfilemonitor.c:
+	* gio/inotify/inotify-diag.c:
+	* gio/inotify/inotify-kernel.c:
+	* gio/inotify/inotify-path.c:
+	* gio/test-gio.c:
+	* gio/test-streams.c:
+	* programs/gio-info.c:
+	* programs/gio-monitor-dir.c:
+	* programs/gio-monitor-file.c:
+	Various code cleanups from Kjartan Maraas
+
+2007-11-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdummyfile.c:
+	Handle the uri-scheme calls for dummy files
+
+2007-11-13  Marko Anastasov  <marko@marko.anastasov.name>
+
+	* gio/gio/gfileinfo.[ch]: Use a different parameter name instead of
+	'namespace' for in g_file_attribute_matcher_enumerate_namespace()
+	to avoid clash with the C++ keyword.
+
+2007-11-13  Marko Anastasov  <marko@marko.anastasov.name>
+
+	* gio/glocalfileinfo.c: Build fix, added missing semicolon
+	to an ifdef'ed call to getpwuid() in lookup_uid_data().
+
+2007-11-11  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/glocaldirectorymonitor.c:
+	* gio/glocalfilemonitor.c:
+	* gio/gunionvolumemonitor.c:
+	Don't use g_once_init_*() for initializations that could fail and
+	could leave the initialization variable set to 0 but use GOnce.
+	This prevents a deadlock on the second call when trying to create
+	a monitor and no monitor type is available. Thanks to Sven Herzberg
+	for reporting.
+
+2007-11-11  Sven Herzberg  <sven@imendio.com>
+
+	* gio/glocalfile.c: guard the #include <sys/statfs.h> by the correct
+	#ifdef (make it work on MacOS X again)
+
+2007-11-09  Andrew Walton  <awalton@svn.gnome.org>
+	* Changelog:
+	Fixes Changelog for last two commits (sorry guys).
+
+2007-11-07  Andrew Walton  <awalton@svn.gnome.org>
+	* gio/gappinfo.c:
+	* gio/gbufferedinputstream.c:
+	* gio/gdatainputstream.c:
+	* gio/gfile.c:
+	* gio/gfileoutputstream.c:
+	* gio/gfilterinputstream.c:
+	* gio/glocalfileinputstream.c:
+	* gio/gurifuncs.c:
+	* gio/gvfs.c:
+	More consistency fixes in g*stream.c files. 
+	Significant clean of gfile's documentation, filling in of 
+	asynchronous operations documentation.
+
+2007-11-07  Andrew Walton  <awalton@svn.gnome.org>
+	* gio/gappinfo.c:
+	* gio/gasyncresult.c:
+	* gio/gbufferedinputstream.c:
+	* gio/gbufferedoutputstream.c:
+	* gio/gcancellable.c:
+	* gio/gcontenttype.c:
+	* gio/gdatainputstream.c:
+	* gio/gdataoutputstream.c:
+	* gio/gdesktopappinfo.c:
+	* gio/gdrive.c:
+	* gio/gfile.c:
+	* gio/gfileattribute.c:
+	* gio/gio/gfileenumerator.c:
+	* gio/gfileinfo.c:
+	* gio/gfileinputstream.c:
+	* gio/gfilemonitor.c:
+	* gio/gfileoutputstream.c:
+	* gio/ginputstream.c:
+	* gio/giomodule.c:
+	* gio/gioscheduler.c:
+	* gio/gloadableicon.c:
+	* gio/glocalfileoutputstream.c:
+	* gio/gmemoryoutputstream.c:
+	* gio/gmountoperation.c:
+	* gio/goutputstream.c:
+	* gio/gseekable.c:
+	* gio/gsimpleasyncresult.c:
+	* gio/gunionvolumemonitor.c:
+	* gio/gunixmounts.c:
+	* gio/gunixvolume.c:
+	* gio/gurifuncs.c:
+	* gio/gvfs.c:
+	* gio/gvolume.c:
+	* gio/gvolumemonitor.c:
+	Updated documentation stubs, working towards consistency and 
+	completeness.
+
+2007-11-07  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gmemoryoutputstream.c:
+	* gio/gmemoryoutputstream.h:
+	Change g_memory_output_stream_set_free_on_close() to
+	g_memory_output_stream_set_free_data() as this makes more sense and
+	is more consistent with GMemoryInputStream.
+
+2007-11-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.c:
+	Fix some docs
+	
+	* gio/glocalvfs.c:
+	* gio/gvfs.[ch]:
+	Change how we find the default vfs so that
+	we can handle a gvfs failing to init
+
+2007-11-07  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gbufferedoutputstream.c:
+	* gio/gdatainputstream.c:
+	* gio/gdataoutputstream.c:
+	* gio/gfileinputstream.c:
+	* gio/gfileoutputstream.c:
+	* gio/gfilterinputstream.c:
+	* gio/gfilteroutputstream.c:
+	* gio/ginputstream.c:
+	* gio/gmemoryinputstream.c:
+	* gio/gmemoryoutputstream.c:
+	* gio/goutputstream.c:
+	* gio/gsimpleasyncresult.c:
+	* gio/gsocketinputstream.c:
+	* gio/gsocketoutputstream.c:
+	Add guards to the remaining public functions, add a TODO for
+	an unimplemented function and remove some useless guards.
+
+2007-11-07  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.ac:
+	Autoconf checks for the various types of
+	getpwuid_r and getgrgid_r
+	
+	* gio/glocalfileinfo.c:
+	Use the autoconf checks from above
+
+2007-11-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfile.c:
+	(g_local_file_query_filesystem_info):
+	Some fixes for the statvfs case
+	
+2007-11-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfile.c:
+	(g_local_file_query_filesystem_info):
+	Pick the "best" of statfs / statvfs for the system
+	if both are availible.
+
+2007-11-07  Alexander Larsson  <alexl@redhat.com>
+
+	Solaris fixes from Halton.Huo@Sun.COM:
+	
+	* gio/gdrive.c:
+	* gio/gfile.c:
+	* gio/gvolume.c:
+	Don't return void
+	
+	* gio/glocalfileinfo.c:
+	Fix for solaris definition of getpwuid_r
+	
+	* gio/test-streams.c:
+	Use G_GNUC_PRETTY_FUNCTION
+
+2007-11-07  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdesktopappinfo.c:
+	(update_default_list):
+	Remove double semicolon.
+	Patch from Jens Granseuer
+
+2007-11-06  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* docs/reference/gio/gio-sections.txt:
+	* gio/gbufferedinputstream.c:
+	* gio/gbufferedinputstream.h:
+	* gio/gdatainputstream.c:
+	* gio/gfileenumerator.c:
+	* gio/gioscheduler.c:
+	* gio/gunionvolumemonitor.c:
+	* gio/gvfs.c:
+	* programs/gio-save.c:
+	Fix typo: availible -> available. Unfortuntely this breaks API
+	and ABI as g_buffered_input_stream_get_available() was renamed.
+	
+	* gio/gunixmounts.c:
+	* gio/gbufferedinputstream.c:
+	Add guards for public functions.
+
+2007-11-06  Ross Burton  <ross@openedhand.com>
+
+	* docs/reference/gio/Makefile.am:
+	Fix invalid += usage which automake 1.10 doesn't like.
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.c:
+	(g_app_launch_context_class_init):
+	Fix warning
+
+	Patch from Ross Burton 
+	
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.ac:
+	Post release version bump
+
+=== gio-standalone 0.1.1 ===
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.ac:
+	Bump version to 0.1.1
+	
+	* gio/gsimpleasyncresult.c:
+	(g_simple_async_result_set_from_error):
+	Remove bogus g_return_if_fail
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* configure.ac:
+	The name is gio-standalone
+	
+	* gio/Makefile.am:
+	Add top src/builddir to includedir
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* docs/reference/gio/gio-sections.txt:
+	* gio/gappinfo.c:
+	* gio/gbufferedinputstream.c:
+	* gio/gbufferedoutputstream.c:
+	* gio/gcancellable.c:
+	* gio/gdatainputstream.h:
+	* gio/gdataoutputstream.c:
+	* gio/gdataoutputstream.h:
+	* gio/gdirectorymonitor.c:
+	* gio/gfile.c:
+	* gio/gfileattribute.c:
+	* gio/gfileattribute.h:
+	* gio/gfileenumerator.c:
+	* gio/gfileenumerator.h:
+	* gio/gfileinfo.c:
+	* gio/gfileinfo.h:
+	* gio/gfileinputstream.h:
+	* gio/gfilemonitor.c:
+	* gio/gfileoutputstream.h:
+	* gio/glocalfilemonitor.h:
+	* gio/glocalfileoutputstream.h:
+	* gio/gmemoryinputstream.c:
+	* gio/gmemoryoutputstream.c:
+	* gio/gmountoperation.c:
+	* gio/goutputstream.c:
+	* gio/goutputstream.h:
+	* gio/gseekable.h:
+	* gio/gsimpleasyncresult.c:
+	* gio/gunixmounts.c:
+	* gio/gunixmounts.h:
+	* gio/gurifuncs.h:
+	* gio/inotify/inotify-helper.c:
+	Fix gtk-doc warnings
+
+	Patch from Ross Burton 
+	
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfilenamecompleter.c:
+	(g_filename_completer_get_completions):
+	fix warning
+	
+	* gio/gunixvolume.c:
+	Remove unused function
+
+	Patches from Ross Burton 
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdrive.h:
+	* gio/gseekable.h:
+	* gio/gvolume.h:
+	Padding not needed for interfaces
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfilemonitor.c:
+	Remove debug spew
+
+	* gio/Makefile.am:
+	Make giotypes.h an internal file
+	
+	* gio/gappinfo.h:
+	* gio/gbufferedinputstream.h:
+	* gio/gbufferedoutputstream.h:
+	* gio/gcancellable.h:
+	* gio/gdatainputstream.h:
+	* gio/gdataoutputstream.h:
+	* gio/gdirectorymonitor.c:
+	* gio/gdirectorymonitor.h:
+	* gio/gdrive.c:
+	* gio/gdrive.h:
+	* gio/gfile.c:
+	* gio/gfile.h:
+	* gio/gfileattribute.h:
+	* gio/gfileenumerator.h:
+	* gio/gfileicon.c:
+	* gio/gfileicon.h:
+	* gio/gfileinfo.c:
+	* gio/gfileinfo.h:
+	* gio/gfilemonitor.c:
+	* gio/gfilemonitor.h:
+	* gio/gfilenamecompleter.c:
+	* gio/gfilenamecompleter.h:
+	* gio/gfilterinputstream.h:
+	* gio/gfilteroutputstream.h:
+	* gio/ginputstream.h:
+	* gio/gmemoryinputstream.h:
+	* gio/gmemoryoutputstream.h:
+	* gio/gmountoperation.c:
+	* gio/gmountoperation.h:
+	* gio/gnativevolumemonitor.c:
+	* gio/goutputstream.h:
+	* gio/gseekable.c:
+	* gio/gseekable.h:
+	* gio/gsimpleasyncresult.c:
+	* gio/gsimpleasyncresult.h:
+	* gio/gsocketinputstream.h:
+	* gio/gsocketoutputstream.h:
+	* gio/gthemedicon.c:
+	* gio/gthemedicon.h:
+	* gio/gvfs.h:
+	* gio/gvolume.c:
+	* gio/gvolume.h:
+	* gio/gvolumemonitor.c:
+	* gio/gvolumemonitor.h:
+	Add padding in classes where it seems useful
+	Don't include giotypes.h from public headers
+	Move in Class definitions into c file where possible
+	
+	* gio/glocalfile.c:
+	Fix warnings
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* docs/reference/gio/gio-docs.xml:
+	Better structure for API docs
+
+2007-11-06  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfileicon.c:
+	* gio/gloadableicon.c:
+	* gio/gsimpleasyncresult.c:
+	* gio/gthemedicon.c:
+	Add some more guards to public functions. Only files missing are now
+	g*stream*.c.
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* docs/reference/gio/gio-docs.xml:
+	Remove old files, add missing ones
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* docs/reference/gio/gio-sections.txt:
+	Restructure
+	Add missing stuff
+	Hide implementation classes
+	
+	* gio/gdriveprivate.h:
+	* gio/gvolumeprivate.h:
+	Remove non-existing function declarations
+
+2007-11-06  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gappinfo.c:
+	Fix compilation warnings and add guards to the new functions.
+	
+	* gio/gasyncresult.c:
+	* gio/gdummyfile.c:
+	Add guards to the public functions.
+	
+	* gio/gdummyfile.c:
+	Implement get_path().
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfilenamecompleter.c:
+	Make g_filename_completer_get_completions
+	return char ** instead of GList for
+	typesafety.
+	
+	* docs/reference/gio/gio-docs.xml:
+	* docs/reference/gio/gio-sections.txt:
+	* gio/gappinfo.c:
+	* gio/gasyncresult.c:
+	* gio/gbufferedinputstream.c:
+	* gio/gbufferedoutputstream.c:
+	* gio/gcancellable.c:
+	* gio/gcontenttype.c:
+	* gio/gdatainputstream.c:
+	* gio/gdataoutputstream.c:
+	* gio/gdesktopappinfo.c:
+	* gio/gdirectorymonitor.c:
+	* gio/gdrive.c:
+	* gio/gdummyfile.c:
+	* gio/gfile.c:
+	* gio/gfileattribute.c:
+	* gio/gfileenumerator.c:
+	* gio/gfileicon.c:
+	* gio/gfileinfo.c:
+	* gio/gfileinputstream.c:
+	* gio/gfilemonitor.c:
+	* gio/gfilenamecompleter.c:
+	* gio/gfilenamecompleter.h:
+	* gio/gfileoutputstream.c:
+	* gio/gfilterinputstream.c:
+	* gio/gicon.c:
+	* gio/ginputstream.c:
+	* gio/giomodule.c:
+	* gio/gioscheduler.c:
+	* gio/gloadableicon.c:
+	* gio/glocaldirectorymonitor.c:
+	* gio/glocalfile.c:
+	* gio/glocalfileinputstream.c:
+	* gio/glocalfilemonitor.c:
+	* gio/glocalfileoutputstream.c:
+	* gio/glocalvfs.c:
+	* gio/gmemoryinputstream.c:
+	* gio/gmemoryoutputstream.c:
+	* gio/gmountoperation.c:
+	* gio/goutputstream.c:
+	* gio/gpollfilemonitor.c:
+	* gio/gseekable.c:
+	* gio/gsimpleasyncresult.c:
+	* gio/gsocketinputstream.c:
+	* gio/gsocketoutputstream.c:
+	* gio/gthemedicon.c:
+	* gio/gunionvolumemonitor.c:
+	* gio/gunixdrive.c:
+	* gio/gunixmounts.c:
+	* gio/gunixvolume.c:
+	* gio/gunixvolumemonitor.c:
+	* gio/gurifuncs.c:
+	* gio/gvfs.c:
+	* gio/gvolume.c:
+	* gio/gvolumemonitor.c:
+	* gio/gwin32appinfo.c:
+	Add (mostly stub) doc strings to public functions.
+	Patch from Andrew Walton (awalton@gmail.com)
+
+2007-11-06  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.[ch]:
+	Added GAppLaunchContext object and pass that to launch.
+	This allows simple implementation of both
+	launch-on-screen and startup notification via a gtk+
+	subclass of GAppLaunchContext
+	
+	* gio/gdesktopappinfo.c:
+	Implement GAppLaunchContext API
+	
+	* gio/gwin32appinfo.c:
+	Update to new APIs
+
+2007-11-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gmountoperation.c:
+	Add some guards to GMountOperation's public functions.
+
+2007-11-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+
+	* gio/gappinfo.c:
+	* gio/gcancellable.c:
+	* gio/gdirectorymonitor.c:
+	* gio/gdrive.c:
+	* gio/gfileenumerator.c:
+	* gio/gfilemonitor.c:,
+	* gio/gfilenamecompleter.c:
+	* gio/gicon.c:
+	* gio/giomodule.c:
+	* gio/gioscheduler.c:
+	* gio/gseekable.c:
+	* gio/gurifuncs.c:
+	* gio/gvolume.c:
+	* gio/gvolumemonitor.c:
+	Add even more guards to various public functions.
+
+2007-11-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gappinfo.c:
+	Add guards to the public functions of GAppInfo.
+
+2007-11-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gcontenttype.c:
+	Add some more guards for public functions.
+
+2007-11-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/fam/fam-module.c:
+	* gio/fam/gfamdirectorymonitor.c:
+	* gio/fam/gfamdirectorymonitor.h:
+	* gio/fam/gfamfilemonitor.c:
+	* gio/fam/gfamfilemonitor.h:
+	* gio/inotify/ginotifydirectorymonitor.c:
+	* gio/inotify/ginotifydirectorymonitor.h:
+	* gio/inotify/ginotifyfilemonitor.c:
+	* gio/inotify/ginotifyfilemonitor.h:
+	Add proper copyright information and remove an unused variable
+	in the GInotifyFileMonitor constructor.
+
+	* gio/gcancellable.c:
+	Add a guard for a public function and an assertion to prevent
+	an undefined program state.
+
+2007-11-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfileattribute.c:
+	Don't run into an assertion if the given attribute value is NULL
+	in g_file_attribute_value_get_*() but instead return a fallback
+	value that makes sense in most situations. Passing them a attribute
+	value with the wrong type will still run into an assertion.
+
+2007-11-02  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfileattribute.c:
+	* gio/gfileinfo.c:
+	Add even more guards to the public functions. Also fix the refcounting
+	of GFileAttributeInfoList and GFileAttributeMatcher to be atomic and
+	let g_file_info_list_attributes() filter the attributes by namespace
+	instead of simply ignoring the namespace parameter.
+
+2007-11-03  Sven Herzberg  <sven@imendio.com>
+
+	* gio/gdesktopappinfo.c: don't use environ. Use the glib API for that.
+	(This makes gio work on MacOS X again)
+
+2007-11-02  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* Makefile.am:
+	Build the gio subdirectory before the docs. Otherwise the build will
+	fail.
+
+	* gio/gvfs.c: (g_vfs_get_name), (g_vfs_get_priority),
+	(g_vfs_get_file_for_path), (g_vfs_get_file_for_uri),
+	(g_vfs_get_supported_uri_schemes), (g_vfs_parse_name):
+	Add guards to the public functions.
+
+2007-11-02  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfileattribute.c: (g_file_attribute_value_as_string):
+	Cast parameter to g_type_name_from_instance() to a GTypeInstance *
+	to prevent a compiler warning.
+
+	* gio/glocalfile.c: (get_mount_info), (find_topdir_for):
+	Set the G_FILE_ATTRIBUTE_FS_READONLY as boolean, not as string and
+	return something in the non-void function find_topdir_for().
+
+2007-11-01  Christian Kellner  <gicmo@gnome.org>,  Ryan Lortie  <desrt@desrt.ca>
+
+	* configure.ac:
+	* Makefile.am:
+	* docs/:
+	Gtkdocify!
+
+2007-11-01  Ryan Lortie  <desrt@desrt.ca>
+
+	* gappinfo.c (g_app_info_launch, g_app_info_launch_uris):
+	* gappinfo.h (g_app_info_launch, g_app_info_launch_uris):
+	* gwin32appinfo.c (g_win32_app_info_launch):
+	* gdesktopappinfo.c (expand_macro, equal_up_to_equals,
+	envp_for_startup_id, g_desktop_app_info_launch,
+	g_desktop_app_info_launch_uris):
+
+	Give an opaque 'startup_id' string instead of 'envp'.
+	Support empty file lists for launching new windows.
+	Fix infinite recursion bug when launching URIs.
+
+2007-11-01  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfile.c:
+	Add guard to the new g_file_get_uri_scheme() function.
+
+2007-11-01  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfile.c:
+	Convert a g_return_val_if_fail() to setting the GError instead as
+	otherwise applications have to verify the parameter before otherwise
+	and the parameter might come directly from the user.
+
+2007-11-01  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/inotify/ginotify*.[ch]:
+	Add missing copyright information.
+
+2007-11-01  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfile.c:
+	Add guards in the beginning of public functions to check for valid
+	parameters and fix a bug in copy_stream_with_progress() that could've
+	caused writing less bytes than reading.
+	* gio/glocalfileinfo.c:
+	Check for a NULL parameter and set the GError accordingly then.
+	* gio/goutputstream.c:
+	Fix the same bug as in gfile.c that could've caused writing less bytes
+	than reading in g_output_stream_real_splice().
+
+2007-11-01  Sebastien Bacher  <seb128@ubuntu.com>
+
+	* gio/Makefile.am:
+	Use the correct gvolumeprivate.h naming
+
+2007-11-01  Christian Kellner  <gicmo@gnome.org>
+
+	* gio/Makefile.am:
+	Remove leftover "$(daemon_sources)" entry.
+
+2007-11-01  Christian Kellner  <gicmo@gnome.org>
+
+	* gio/fam/*.[ch]:
+	* gio/*.[ch]:
+	* programs/*.[ch]:
+	Add copyright information to source files.
+
+2007-11-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	* gio/glocalfile.c:
+	Add g_file_get_uri_scheme
+
+2007-11-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.h:
+	* gio/gdesktopappinfo.c:
+	* gio/gwin32appinfo.c:
+	Add g_app_info_get_default_for_uri_scheme.
+
+2007-11-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/Makefile.am:
+	Correct filename for gdriveprivate.h
+
+2007-10-31  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	Rename id:value to id:file
+	Add id:fs
+	
+	* gio/glocalfileinfo.c:
+	Implement id:fs
+
+2007-10-31  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gunixvolume.c:
+	* gio/gvolume.[ch]:
+	Remove g_volume_get_platform_id, as thats not
+	needed with the simpler union volume monitor
+
+2007-10-31  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/Makefile.am:
+	* gio/guniondrive.[ch]: Removed.
+	* gio/gunionvolume.[ch]: Removed.
+	Remove GUnionDrive/Volume
+
+	* gio/gunionvolumemonitor.c:
+	Simplify union volume monitor, now we
+	only have one native volume monitor and
+	we use the actual volumes/drives from the
+	child monitors instead of wrapping them
+
+	* gio/gnativevolumemonitor.[ch]:
+	Base class for native volume monitors.
+	Includes priority and get_volume_for_mountpoint
+	
+	* gio/gfile.[ch]:
+	Add g_file_find_enclosing_volume
+
+	* gio/gfileinfo.h:
+	Remove volume name fs attribute
+	Add readonly fs attribute
+	
+	* gio/glocalfile.c:
+	Implement readonly attribute
+	remove volume name attribute
+	Implement find_enclosing volume
+	
+	* gio/gunixmounts.c:
+	Add a volume for "/".
+	
+	* gio/gunixvolume.[ch]:
+	Set better name for /
+	
+	* gio/gunixvolumemonitor.[ch]:
+	Derive from GNativeVolumeMonitor
+	Implement get_volume_for_mountpoint
+	
+	* gio/gvolume.h:
+	GVolume typedef moved to gfile.h
+	
+	* gio/gvolumeprivate.h:
+	Add g_volume_get_for_mount_path
+
+2007-10-31  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gunixmounts.[ch]:
+	Add cache info to unix mount listers
+	Make getmntent use threadsafe
+	Add is_system_internal attribute for GUnixMount
+	
+	* gio/gunixvolume.c:
+	(g_unix_volume_new):
+	Use is_system_internal instead of own code
+	
+	* gio/glocaldirectorymonitor.c:
+	* gio/gunixvolumemonitor.c:
+	Update to new gunixmounts API
+	
+	* gio/glocalfile.c:
+	Fix warning
+
+2007-10-30  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	Add volume name fsinfo attribute
+	
+	* gio/glocalfile.c:
+	Read volume name info
+	
+	* gio/gunionvolumemonitor.c:
+	Fix infinite loops when finalizing a union volume monitor
+
+2007-10-30  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/goutputstream.[ch]:
+	Add splice() with default implementation
+	
+	* gio/gsocketoutputstream.c:
+	(g_socket_output_stream_write):
+	Return error on cancellation correctly.
+	
+2007-10-26  Paolo Borelli  <pborelli@katamail.com>
+
+	* gio/glocalfile.c (g_local_file_trash):
+	Do not leak a string.
+
+2007-10-26  Paolo Borelli  <pborelli@katamail.com>
+
+	* gio/gfile.c (g_file_load_contents):
+	Unref the stream after closing it.
+
+2007-10-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gioscheduler.h:
+	Fix include
+
+2007-10-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	* gio/glocalfile.c:
+	Add g_file_has_uri_scheme and implement for local files
+
+2007-10-25  Paolo Borelli  <pborelli@katamail.com>
+
+	* gio/gdesktopappinfo.c: do not leak a string.
+
+2007-10-24  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/glocaldirectorymonitor.c: (_compare_monitor_class_by_prio),
+	(g_local_directory_monitor_new):
+	* gio/glocalfilemonitor.c: (_compare_monitor_class_by_prio),
+	(g_local_file_monitor_new):
+	Only look for the monitor type that should be used the first time
+	and use g_qsort_with_data() instead of our own bubble sort
+	implementation.
+
+2007-10-24  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/Makefile.am:
+	* gio/fam/Makefile.am:
+	* gio/fam/fam-helper.c: (_fam_sub_startup), (_fam_sub_add):
+	* gio/fam/fam-helper.h:
+	* gio/fam/fam-module.c: (g_io_module_load), (g_io_module_unload):
+	* gio/fam/gfamdirectorymonitor.c:
+	* gio/fam/gfamdirectorymonitor.h:
+	* gio/fam/gfamfilemonitor.c: (g_fam_file_monitor_finalize),
+	* gio/fam/gfamfilemonitor.h:
+	* gio/glocaldirectorymonitor.c:
+	* gio/glocaldirectorymonitor.h:
+	* gio/glocalfilemonitor.c: (g_local_file_monitor_init),
+	* gio/glocalfilemonitor.h:
+	* gio/inotify/Makefile.am:
+	* gio/inotify/ginotifydirectorymonitor.c:
+	* gio/inotify/ginotifydirectorymonitor.h:
+	* gio/inotify/ginotifyfilemonitor.c:
+	* gio/inotify/ginotifyfilemonitor.h:
+	Implement the FAM and Inotify monitors as
+	GLocal(Directory|File)Monitor subclasses and put the FAM monitors into
+	their own GIO module. GLocal(Directory|File)Monitor will use the
+	monitor with the highest rank that is supported on that machine.
+
+2007-10-23  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/Makefile.am:
+	Change GIO module dir to $(libdir)/gio/modules and change
+	the log domain from GVFS to GIO. Also only export symbols starting
+	with g_ in the resulting library.
+	* gio/test-streams.c: (main):
+	Set log handler for the GIO log domain.
+
+2007-10-22  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfilenamecompleter.[ch]:
+	Add g_filename_completer_set_dirs_only
+
+2007-10-22  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/Makefile.am:
+	* gio/gurifuncs.[ch]:
+	Add some simple URI helpers
+	
+	* gio/gfilenamecompleter.[ch]:
+	Added object for filename (parse name actually) completion
+	
+	* gio/glocalvfs.c:
+	Handle ~ in parse names
+
+2007-10-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	* gio/glocalfileinfo.c:
+	Add and implement id:value attribute
+
+2007-10-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdrive.[ch]:
+	* gio/guniondrive.c:
+	* gio/gunixdrive.c:
+	Add and implement g_drive_has_volumes
+	
+2007-10-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	* gio/glocalfileinfo.[ch]:
+	Add unix:is_mountpoint and implement for local files
+
+2007-10-16  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gunionvolumemonitor.c:
+	(g_union_volume_monitor_init):
+	Fix up the unix type getting so that it works with gcc
+	
+2007-10-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	* gio/glocalfileinfo.c:
+	Add thumbnail:failed to file info
+
+2007-10-12  Richard Hult  <richard@imendio.com>
+
+	* gio/gvfs.c (get_default_vfs): Make the type volatile to avoid
+	optimizing away the get_type call (happens with some gcc versions,
+	like the one shipped with OS X 10.4).
+
+2007-10-12  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	(_g_local_file_info_set_attribute):
+	Fix build if not HAVE_XATTR
+	Patch from Milosz Derezynski <internalerror@gmail.com>
+
+2007-10-11  Sven Herzberg  <herzi@gnome-de.org>
+
+	* gio/gunixmounts.c: small build fix (sorry, Alex, you haven't been
+	around for review, otherwise I would have asked you before
+	committing)
+
+2007-10-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	Add thumbnail:path attribute
+	
+	* gio/glocalfileinfo.c:
+	Implement thumbnail:path for local files
+
+2007-10-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	(_g_local_file_info_get):
+	Avoid duplicate icon names
+
+2007-10-11  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gthemedicon.[ch]:
+	Change g_themed_icon_get_names return type to const
+
+2007-10-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	Don't reference freed memory
+
+2007-10-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileattribute.c:
+	Handle objects
+	
+	* gio/glocalfileinfo.c:
+	Return icon info
+
+2007-10-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.c:
+	Check for NULL icons
+
+	* gio/gfileattribute.c:
+	Don't dup when getting objects (same as for string attributes)
+
+	* gio/gicon.c (g_icon_equal):
+	Safely handle NULLs in equal
+
+2007-10-10  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h:
+	Fix c++ compilation issues
+	Patch from Milosz Derezynski <internalerror@gmail.com>
+
+2007-10-10  Alexander Larsson  <alexl@redhat.com>
+
+	* programs/gio-monitor-dir.c:
+	Don't crash if dir monitor not supported.
+
+2007-10-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gioerror.h:
+	Add missing G_END_DECLS
+
+2007-10-09  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gfile.c: (g_file_set_display_name),
+	(g_file_query_settable_attributes),
+	(g_file_query_writable_namespaces):
+	Return NULL not FALSE on errors as the return type is a pointer.
+
+2007-10-09  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/glocalfile.c: (g_local_file_monitor_file):
+	Don't call monitor_file on the default interface vtable (which
+	is NULL) but simply return NULL. The caller, GFile, will create a
+	polling monitor if NULL is returned.
+
+2007-10-09  Alexander Larsson  <alexl@redhat.com>
+
+	* Makefile.am:
+	* configure.ac:
+	* gio-unix-2.0.pc.in:
+	Add gio-unix-2.0.pc if OS_UNIX
+	
+	* gio/Makefile.am:
+	Install gunixmounts.h into gio-unix-2.0 if OS_UNIX
+
+2007-10-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gunixmounts.[ch]:
+	Make unix mount monitoring API sane.
+	Now its just a object with mounts_changed
+	and mountpoints_changed signals.
+	
+	* gio/glocaldirectorymonitor.c:
+	* gio/gunixvolumemonitor.c:
+	Use new mount monitor api
+
+2007-10-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gunixmounts.[ch]:
+	Move guess type into one call for mounts and one for mountpoints
+	
+	* gio/gunixdrive.c:
+	* gio/gunixvolume.c:
+	Update
+
+2007-10-09  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gunixmounts.[ch]:
+	Remove _ prefix in preparation to make this semi-public
+	Hide implementation of structs
+	
+	* gio/glocaldirectorymonitor.c:
+	* gio/gunixdrive.c:
+	* gio/gunixvolume.c:
+	* gio/gunixvolumemonitor.c:
+	Update for above API changes
+
+2007-10-08  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.c:
+	Better polling fallback. This also handles the case where we have
+	a monitor_file implementation, but it fails.
+
+2007-10-08  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	* gio/glocalfile.c:
+	* gio/gunixmounts.c:
+	* programs/gio-monitor-dir.c:
+	* programs/gio-monitor-file.c:
+	Added cancellable to file monitoring calls.
+	These are really sync calls and need this.
+
+2007-10-08  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/glocalvfs.c: (g_local_vfs_get_supported_uri_schemes),
+	(g_local_vfs_class_init):
+	* gio/gvfs.c: (g_vfs_get_supported_uri_schemes):
+	* gio/gvfs.h: Add functions to get a list of supported URI schemes.
+
+2007-10-05  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdirectorymonitorprivate.h: 
+	* gio/gfilemonitorprivate.h: 
+	* gio/gdirectorymonitor.h:
+	* gio/gfilemonitor.h:
+	Remove *private.h and move to the public API, so that
+	we can do implementations outside gio (such as in gvfs)
+	
+	* gio/gdirectorymonitor.c:
+	* gio/gfilemonitor.c:
+	* gio/glocaldirectorymonitor.c:
+	* gio/gpollfilemonitor.c:
+	* gio/inotify/inotify-helper.c:
+	* gio/fam/fam-helper.c:
+	Update to the new header names
+
+2007-10-05  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gdirectorymonitor.c:
+	* gio/gfilemonitor.c: Mark the GFileMonitor and GDirectoryMonitor
+	GTypes as abstract.
+
+2007-10-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c (get_access_rights):
+	Set CAN_TRASH when we can move the file.
+	We should really also check for a parent trash dir.
+
+2007-10-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.h (G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH):
+	Add can_trash access attribute
+
+2007-10-04  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfile.c:
+	(g_local_file_trash):
+	Create info file first. This is per-spec and allows
+	us to actually trash directories.
+
+2007-10-02  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdesktopappinfo.c:
+	Implement the new mime support code.
+	Always set app as handling mimetype when being set as default for it
+
+2007-10-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c (_g_local_file_info_set_attribute):
+	Fix up check for xattrs:
+
+2007-10-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.c:
+	(g_app_info_set_as_default_for_extension):
+	(g_app_info_add_supports_type):
+	(g_app_info_can_remove_supports_type):
+	(g_app_info_remove_supports_type):
+	Make these fail nicely if not implemented
+
+2007-10-01  Paolo Borelli  <pborelli@katamail.com>
+
+	* gio/glocalfileoutputstream.c:
+	* gio/glocalfileoutputstream.h:
+	* gio/test-gio.c:
+	* gio/gfile.c:
+	* gio/gfile.h:
+	* gio/glocalfile.c:
+	* programs/gio-save.c: 
+	Add a GFileCreateFlags argument to operations that can create
+	a new file.
+
+2007-10-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.[ch]:
+	* gio/gdesktopappinfo.c:
+	Add more (stubbed out) mime API needed for nautilus
+
+2007-10-01  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.h:
+	Add GAppInfoCreateFlags flag to g_app_info_create_from_commandline.
+	Add g_app_info_set_as_default_for_extension.
+	
+	* gio/gdesktopappinfo.c:
+	Dummy for g_app_info_set_as_default_for_extension
+	Support flags in g_app_info_create_from_commandline
+
+	* gio/gwin32appinfo.c:
+	* gio/test-gio.c:
+	Update for API changes
+	
+	* gio/gthemedicon.c:
+	Properly NULL-terminate list of icon names
+
+2007-09-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gloadableicon.h:
+	Correct G_TYPE_LOADABLE_ICON, it was pointing to the GIcon type...
+
+2007-09-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/Makefile.am:
+	Install headers in $includedir/gio-standalone/
+	
+	* gio-2.0.pc.in: Added.
+	* gio-standalone.pc.in: Removed.
+	* configure.ac:
+	* Makefile.am:
+	Renamed pkg-config file to match glib (for future move)
+	Update to the new include dir
+	
+	* gio/gappinfo.h:
+	Add more TODO comments
+
+2007-09-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdesktopappinfo.[ch]:
+	Expose new_from_filename
+	Add getter for is_hidden and handle it better
+
+2007-09-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.[ch]:
+	Rename g_file_size_format_for_display to
+	g_format_file_size_for_display.
+	Now it doesn't have the g_file prefix, so we
+	can later move it to glib.
+
+2007-09-28  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.[ch]:
+	Add g_app_info_get_id and g_app_info_get_executable.
+	Make all getters non-reffing
+	Make g_app_info_launch take GFile arguments.
+	Add must_support_uris argument to g_app_info_get_default_for_type.
+	
+	* gio/gwin32appinfo.c:
+	Update to GAppInfo api changes
+	
+	* gio/gdesktopappinfo.c:
+	Update to GAppInfo api changes
+	Implement supports_xdg_startup_notify
+	
+	* gio/gfileicon.c (g_file_icon_get_file):
+	Make getter non-reffing.
+	
+	* gio/test-gio.c:
+	Update to new API
+
+2007-09-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinfo.[ch]: 
+	Add g_file_size_format_for_display helper
+	
+2007-09-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	Set UNIX_GID from gid, not from uid
+
+2007-09-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Add g_file_set_attributes_async
+
+2007-09-27  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfile.c (g_local_file_set_display_name):
+	Fix set_display_name to actually rename to the right place.
+	Use lstat to look for existing files so we don't overwrite
+	broken links.
+
+2007-09-26  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Add g_file_set_display_name_async()
+
+2007-09-26  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Add load_partial_contents async calls
+	
+	* gio/glocalfile.c:
+	Make internal function static
+
+2007-09-26  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	Correctly detect broken symlinks
+
+2007-09-26  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gcancellable.c (g_cancellable_cancel):
+	Allow cancel on NULL cancellable
+
+2007-09-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gsimpleasyncresult.c:
+	Don't allocate g_error manually.
+	Fixes g_slice/g_new mixup crash
+
+2007-09-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocaldirectorymonitor.c (g_local_directory_monitor_new):
+	Actually set active_backend.
+	This means the monitor will be cancelled correctly.
+
+2007-09-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdirectorymonitor.c:
+	Set timeout to NULL when destroying
+
+2007-09-25  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gioerror.h:
+	Rename G_IO_ERROR_NOT_MOUNTABLE to G_IO_ERROR_NOT_MOUNTABLE_FILE as
+	that is a better description of the error.
+
+2007-09-25  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gio/gvfs.c: (g_vfs_get_local):
+	Make the local vfs variable static. The same instance should
+	always be returned.
+
+2007-09-24  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileinfo.c:
+	Pass in actual length read into sniffer, not the length
+	we tried to read.
+
+2007-09-21  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileenumerator.c:
+	* gio/gfileinfo.c:
+	* gio/gfileinfo.h:
+	* gio/gfileinputstream.c:
+	* gio/gfileoutputstream.c:
+	* gio/ginputstream.c:
+	* gio/goutputstream.c:
+	Don't crash if async callbacks are NULL
+
+2007-09-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Add async enumerate_children method and default
+	implementation
+
+2007-09-20  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]
+	Add g_file_contains_file & g_file_get_relative_path, since they
+	were needed for nautilus.
+	Renamed g_file_resolve_relative to g_file_resolve_relative_path
+	to make it clearer.
+	
+	* gio/gdummyfile.c:
+	* gio/glocalfile.c:
+	Implement new methods
+
+2007-09-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	* gio/gfileinputstream.[ch]:
+	* gio/gfileoutputstream.[ch]:
+	* gio/glocalfile.c:
+	* gio/glocalfileenumerator.[ch]:
+	* gio/glocalfileinfo.[ch]:
+	* gio/glocalfileinputstream.c:
+	* gio/glocalfileoutputstream.c:
+	* gio/gpollfilemonitor.c:
+	* programs/gio-copy.c:
+	* programs/gio-info.c:
+	* programs/gio-move.c:
+	Rename get_file_info to query_info() to make it clearer
+	that these are not simple getters, but do i/o.
+
+2007-09-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdatainputstream.[ch]:
+	* gio/test-streams.c:
+	Use _read_XXX instead of _get_XXX for the i/o calls
+	in GDataInputStream
+
+2007-09-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gappinfo.h:
+	Added needed stuff to TODO comment
+
+2007-09-17  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/glocalfileoutputstream.c (g_local_file_output_stream_close):
+	Don't error out removing the backup copy if it doesn't
+	already exist.
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* programs/Makefile.am:
+	* programs/gvfs-*.c: 
+	* programs/gio-*.c:
+	Renamed apps from gvfs-xxx to gio-xxx.
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.c:
+	* gio/gfileoutputstream.[ch]:
+	* gio/glocalfileoutputstream.c:
+	* programs/gvfs-save.c:
+	g_file_output_stream_get_etag doesn't do i/o, so remove
+	cancellation and error.
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Add new_etag output to replace_contents functions
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileoutputstream.[ch]:
+	Add async get_file_info and default implementation
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinputstream.c:
+	Implement fallback wrapper for async get_file_info
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfile.[ch]:
+	Add etag out argument to load_contents
+	
+	* gio/test-gio.c:
+	Update to new API
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gcontenttype.c (looks_like_text):
+	Whitespace like tab, cr and lf do not make the
+	file binary.
+
+2007-09-14  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gfileinputstream.[ch]:
+	Add async get_file_info.
+
+2007-09-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/goutputstream.c (g_output_stream_write_all):
+	Allow NULL for bytes_written
+
+2007-09-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gmemoryinputstream.[ch]:
+	Add accessors for data
+
+2007-09-13  Alexander Larsson  <alexl@redhat.com>
+
+	* gio/gdatainputstream.c (g_data_input_stream_get_until):
+	Don't crash if length is NULL
+
diff --git a/gio/Makefile.am b/gio/Makefile.am
new file mode 100644
index 0000000..be6568f
--- /dev/null
+++ b/gio/Makefile.am
@@ -0,0 +1,365 @@
+include $(top_srcdir)/Makefile.decl
+
+NULL =
+
+SUBDIRS=
+
+if OS_UNIX
+SUBDIRS += xdgmime
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+if MS_LIB_AVAILABLE
+noinst_DATA = gio-2.0.lib
+
+install_ms_lib_cmd = $(INSTALL) gio-2.0.lib $(DESTDIR)$(libdir)
+uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/gio-2.0.lib
+endif
+endif
+
+install-ms-lib:
+	$(install_ms_lib_cmd)
+
+uninstall-ms-lib:
+	$(uninstall_ms_lib_cmd)
+
+gio.def: gio.symbols
+	(echo -e EXPORTS; $(CPP) -P -DINCLUDE_VARIABLES -DINCLUDE_INTERNAL_SYMBOLS -DG_OS_WIN32 -DALL_FILES - <$(srcdir)/gio.symbols | sed -e '/^$$/d' -e 's/^/	/' -e 's/G_GNUC_[^ ]*//g' | sort) > gio.def.tmp && \
+	  mv gio.def.tmp gio.def
+
+gioalias.h: gio.symbols
+	$(PERL) $(srcdir)/makegioalias.pl < $(srcdir)/gio.symbols > gioalias.h.tmp && \
+	  mv gioalias.h.tmp gioalias.h
+
+gioaliasdef.c: gio.symbols
+	$(PERL) $(srcdir)/makegioalias.pl -def < $(srcdir)/gio.symbols > gioaliasdef.c.tmp && \
+	  mv gioaliasdef.c.tmp gioaliasdef.c
+
+if OS_LINUX
+if HAVE_GNUC_VISIBILITY
+TESTS = abicheck.sh pltcheck.sh
+endif
+endif
+
+AM_CPPFLAGS = \
+	-DG_LOG_DOMAIN=\"GLib-GIO\"			\
+	-I$(top_builddir)				\
+	-I$(top_srcdir)					\
+	-I$(top_srcdir)/glib				\
+	-I$(top_srcdir)/gmodule				\
+	$(GLIB_DEBUG_FLAGS)				\
+	-DG_DISABLE_DEPRECATED				\
+	-DGIO_COMPILATION				\
+	-DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"	
+
+lib_LTLIBRARIES = libgio-2.0.la
+
+marshal_sources = \
+        gio-marshal.h	\
+        gio-marshal.c	\
+	$(NULL)
+
+if CROSS_COMPILING
+  glib_genmarshal=$(GLIB_GENMARSHAL)
+else
+  glib_genmarshal=../gobject/glib-genmarshal
+endif
+
+gio-marshal.h: gio-marshal.list
+	$(glib_genmarshal) --prefix=_gio_marshal $(srcdir)/gio-marshal.list --header --internal > $@.tmp && \
+	  mv $@.tmp $@
+
+gio-marshal.c: gio-marshal.h gio-marshal.list
+	(echo "#include \"gio-marshal.h\""; \
+	$(glib_genmarshal) --prefix=_gio_marshal $(srcdir)/gio-marshal.list --body --internal) > $@.tmp && \
+	  mv $@.tmp $@
+
+local_sources = \
+	glocaldirectorymonitor.c 	\
+	glocaldirectorymonitor.h 	\
+	glocalfile.c 			\
+	glocalfile.h 			\
+	glocalfileenumerator.c 		\
+	glocalfileenumerator.h 		\
+	glocalfileinfo.c 		\
+	glocalfileinfo.h 		\
+	glocalfileinputstream.c 	\
+	glocalfileinputstream.h 	\
+	glocalfilemonitor.c 		\
+	glocalfilemonitor.h 		\
+	glocalfileoutputstream.c 	\
+	glocalfileoutputstream.h 	\
+	glocalvfs.c 			\
+	glocalvfs.h 			\
+	$(NULL)
+
+platform_libadd =
+platform_deps =
+appinfo_sources =
+
+if HAVE_INOTIFY
+SUBDIRS += inotify
+platform_libadd += inotify/libinotify.la
+platform_deps += inotify/libinotify.la
+endif
+
+if HAVE_FEN
+AM_CPPFLAGS += -DHAVE_FEN
+SUBDIRS += fen
+platform_libadd += fen/libfen.la
+platform_deps += fen/libfen.la
+endif
+
+if OS_WIN32
+SUBDIRS += win32
+platform_libadd += win32/libgiowin32.la
+platform_deps += win32/libgiowin32.la
+endif
+
+
+SUBDIRS += .
+
+if HAVE_FAM
+SUBDIRS += fam
+endif
+
+if OS_UNIX
+appinfo_sources += gdesktopappinfo.c gdesktopappinfo.h
+platform_libadd += xdgmime/libxdgmime.la
+platform_deps += xdgmime/libxdgmime.la
+unix_sources = \
+	gunixmount.c		\
+	gunixmount.h		\
+	gunixmounts.c 		\
+	gunixmounts.h 		\
+	gunixvolume.c 		\
+	gunixvolume.h 		\
+	gunixvolumemonitor.c 	\
+	gunixvolumemonitor.h 	\
+	gunixinputstream.c 	\
+	gunixoutputstream.c 	\
+	$(NULL)
+
+
+giounixincludedir=$(includedir)/gio-unix-2.0/gio
+giounixinclude_HEADERS = \
+	gdesktopappinfo.h	\
+	gunixmounts.h 		\
+	gunixinputstream.h 	\
+	gunixoutputstream.h 	\
+	$(NULL)
+endif
+
+if OS_WIN32
+appinfo_sources += gwin32appinfo.c gwin32appinfo.h
+platform_libadd += -lshlwapi
+win32_sources = \
+	gwin32mount.c \
+	gwin32mount.h \
+	gwin32volumemonitor.c \
+	gwin32volumemonitor.h \
+	$(NULL)
+
+endif
+
+SUBDIRS += tests
+
+libgio_2_0_la_SOURCES =		\
+	gappinfo.c 		\
+	gasynchelper.c 		\
+	gasynchelper.h 		\
+	gasyncresult.c 		\
+	gbufferedinputstream.c 	\
+	gbufferedoutputstream.c \
+	gcancellable.c 		\
+	gcontenttype.c 		\
+	gcontenttypeprivate.h 	\
+	gdatainputstream.c 	\
+	gdataoutputstream.c 	\
+	gdrive.c 		\
+	gdummyfile.h 		\
+	gdummyfile.c 		\
+	gemblem.h 		\
+	gemblem.c 		\
+	gemblemedicon.h		\
+	gemblemedicon.c		\
+	gfile.c 		\
+	gfileattribute.c 	\
+	gfileattribute-priv.h 	\
+	gfileenumerator.c 	\
+	gfileicon.c 		\
+	gfileinfo.c 		\
+	gfileinputstream.c 	\
+	gfilemonitor.c 		\
+	gfilenamecompleter.c 	\
+	gfileoutputstream.c 	\
+	gfilterinputstream.c 	\
+	gfilteroutputstream.c 	\
+	gicon.c 		\
+	ginputstream.c 		\
+	gioenums.h		\
+	gioerror.c 		\
+	giomodule.c 		\
+	giomodule-priv.h	\
+	gioscheduler.c 		\
+	gloadableicon.c 	\
+	gmount.c 		\
+	gmemoryinputstream.c 	\
+	gmemoryoutputstream.c 	\
+	gmountoperation.c 	\
+	gnativevolumemonitor.c 	\
+	gnativevolumemonitor.h 	\
+	goutputstream.c 	\
+	gpollfilemonitor.c 	\
+	gpollfilemonitor.h 	\
+	gseekable.c 		\
+	gsimpleasyncresult.c 	\
+	gthemedicon.c 		\
+	gunionvolumemonitor.c 	\
+	gunionvolumemonitor.h 	\
+	gvfs.c 			\
+	gvolume.c 		\
+	gvolumemonitor.c 	\
+	gmountprivate.h 	\
+	gioenumtypes.h		\
+	gioenumtypes.c		\
+	gioalias.h 		\
+	gioaliasdef.c		\
+	$(appinfo_sources) 	\
+	$(unix_sources) 	\
+	$(win32_sources) 	\
+	$(local_sources) 	\
+	$(marshal_sources) 	\
+	$(NULL)
+
+$(libgio_2_0_la_OBJECTS): $(marshal_sources)
+
+libgio_2_0_la_LIBADD = \
+	$(top_builddir)/glib/libglib-2.0.la 		\
+	$(top_builddir)/gobject/libgobject-2.0.la 	\
+	$(top_builddir)/gmodule/libgmodule-2.0.la 	\
+	$(platform_libadd) 				\
+	$(SELINUX_LIBS) 				\
+	$(GLIB_LIBS) 					\
+	$(XATTR_LIBS) 					\
+	$(NULL)
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+export_symbols = -export-symbols gio.def
+gio_def = gio.def
+
+install-def-file:
+	$(INSTALL) gio.def $(DESTDIR)$(libdir)/gio-2.0.def
+
+uninstall-def-file:
+	-rm $(DESTDIR)$(libdir)/gio-2.0.def
+else
+install-def-file:
+uninstall-def-file:
+
+export_symbols = -export-symbols-regex '^g_.*'
+endif
+
+install-data-local: install-ms-lib install-def-file
+	$(mkinstalldirs) $(DESTDIR)$(GIO_MODULE_DIR)
+
+uninstall-local: uninstall-ms-lib uninstall-def-file
+
+libgio_2_0_la_LDFLAGS = \
+	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+	-export-dynamic $(no_undefined) $(export_symbols)
+
+libgio_2_0_la_DEPENDENCIES = $(gio_def) $(platform_deps)
+
+gio_headers =			\
+	gappinfo.h 		\
+	gasyncresult.h 		\
+	gbufferedinputstream.h 	\
+	gbufferedoutputstream.h \
+	gcancellable.h 		\
+	gcontenttype.h 		\
+	gdatainputstream.h 	\
+	gdataoutputstream.h 	\
+	gdrive.h 		\
+	gemblem.h 		\
+	gemblemedicon.h		\
+	gfile.h 		\
+	gfileattribute.h 	\
+	gfileenumerator.h 	\
+	gfileicon.h 		\
+	gfileinfo.h 		\
+	gfileinputstream.h 	\
+	gfilemonitor.h 		\
+	gfilenamecompleter.h 	\
+	gfileoutputstream.h 	\
+	gfilterinputstream.h 	\
+	gfilteroutputstream.h 	\
+	gicon.h 		\
+	ginputstream.h 		\
+	gio.h			\
+	giotypes.h		\
+	gioenums.h		\
+	gioerror.h 		\
+	giomodule.h 		\
+	gioscheduler.h 		\
+	gloadableicon.h 	\
+	gmount.h 		\
+	gmemoryinputstream.h 	\
+	gmemoryoutputstream.h 	\
+	gmountoperation.h 	\
+	gnativevolumemonitor.h 	\
+	goutputstream.h 	\
+	gseekable.h 		\
+	gsimpleasyncresult.h 	\
+	gthemedicon.h 		\
+	gvfs.h 			\
+	gvolume.h 		\
+	gvolumemonitor.h 	\
+	$(NULL)
+
+gioincludedir=$(includedir)/glib-2.0/gio/
+gioinclude_HEADERS = 		\
+	$(gio_headers)		\
+	gioenumtypes.h
+
+# these sources (also mentioned above) are generated.
+BUILT_SOURCES = 		\
+	gio-marshal.h 		\
+	gio-marshal.c 		\
+	gioalias.h 		\
+	gioaliasdef.c		\
+	gioenumtypes.h		\
+	gioenumtypes.c		\
+	$(NULL)
+
+EXTRA_DIST += 			\
+	gio-marshal.list	\
+	gio.symbols		\
+	gioenumtypes.h.template	\
+	gioenumtypes.c.template	\
+	makefile.msc		\
+	makegioalias.pl		\
+	abicheck.sh		\
+	pltcheck.sh		\
+	$(NULL)
+
+CLEANFILES = 			\
+	$(marshal_sources)	\
+	$(NULL)
+
+gioenumtypes.h: $(gio_headers) gioenumtypes.h.template
+	( top_builddir=`cd $(top_builddir) && pwd`; \
+	  cd $(srcdir) && $$top_builddir/gobject/glib-mkenums --template gioenumtypes.h.template $(gio_headers) ) > \
+	    gioenumtypes.h.tmp && mv gioenumtypes.h.tmp gioenumtypes.h
+
+gioenumtypes.c: $(gio_headers) gioenumtypes.c.template
+	( top_builddir=`cd $(top_builddir) && pwd`; \
+	  cd $(srcdir) && $$top_builddir/gobject/glib-mkenums --template gioenumtypes.c.template $(gio_headers) ) > \
+	    gioenumtypes.c.tmp && mv gioenumtypes.c.tmp gioenumtypes.c
+
+gio-2.0.lib: libgio-2.0.la gio.def
+	lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgio-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:gio.def -out:$@
diff --git a/gio/abicheck.sh b/gio/abicheck.sh
new file mode 100755
index 0000000..5796399
--- /dev/null
+++ b/gio/abicheck.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+egrep '^#([^i]|if).*[^\]$' "${top_builddir:-..}/glibconfig.h" > glibconfig.cpp
+
+INCLUDES="-include ${top_builddir:-..}/config.h"
+INCLUDES="$INCLUDES -include glibconfig.cpp"
+
+cpp -DINCLUDE_VARIABLES -P $INCLUDES -DALL_FILES ${srcdir:-.}/gio.symbols | sed -e '/^$/d' -e 's/ G_GNUC.*$//' -e 's/ PRIVATE$//' | sort > expected-abi
+rm glibconfig.cpp
+
+nm -D -g --defined-only .libs/libgio-2.0.so | cut -d ' ' -f 3 | sort > actual-abi
+
+diff -u expected-abi actual-abi && rm expected-abi actual-abi
diff --git a/gio/fam/Makefile.am b/gio/fam/Makefile.am
new file mode 100644
index 0000000..29ae072
--- /dev/null
+++ b/gio/fam/Makefile.am
@@ -0,0 +1,39 @@
+include $(top_srcdir)/Makefile.decl
+
+NULL =
+
+module_flags = -export_dynamic -avoid-version -module -no-undefined -export-symbols-regex '^g_io_module_(load|unload)'
+
+giomodule_LTLIBRARIES = libgiofam.la
+giomoduledir = $(GIO_MODULE_DIR)
+
+libgiofam_la_SOURCES = 		\
+	fam-helper.c			\
+	fam-helper.h			\
+	fam-module.c			\
+	gfamdirectorymonitor.c		\
+	gfamdirectorymonitor.h		\
+	gfamfilemonitor.c		\
+	gfamfilemonitor.h		\
+	$(NULL)
+
+libgiofam_la_CFLAGS = \
+	-DG_LOG_DOMAIN=\"GLib-GIO\"	\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gmodule		\
+	-I$(top_srcdir)/gio 		\
+	$(GLIB_DEBUG_FLAGS)		\
+	-DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"	\
+	-DGIO_COMPILATION		\
+	-DG_DISABLE_DEPRECATED
+
+libgiofam_la_LDFLAGS = $(module_flags)
+libgiofam_la_LIBADD = \
+		$(top_builddir)/gio/libgio-2.0.la \
+		$(top_builddir)/gobject/libgobject-2.0.la \
+		$(top_builddir)/glib/libglib-2.0.la \
+		$(GLIB_LIBS) \
+		$(FAM_LIBS) \
+		$(NULL)
+
diff --git a/gio/fam/fam-helper.c b/gio/fam/fam-helper.c
new file mode 100644
index 0000000..840c497
--- /dev/null
+++ b/gio/fam/fam-helper.c
@@ -0,0 +1,276 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#include "config.h"
+#include <fam.h>
+#include <gio/gfilemonitor.h>
+
+#include "gfile.h"
+#include "fam-helper.h"
+
+static FAMConnection* fam_connection = NULL;
+static gint fam_watch_id = 0;
+G_LOCK_DEFINE_STATIC(fam_connection);
+
+struct _fam_sub
+{
+  gchar *pathname;
+  gboolean directory;
+  gpointer user_data;
+  gboolean cancelled;
+  FAMRequest request;
+};
+
+/* This uses int as the argument type because the
+   real type differs between implementations:
+   gamin has "typedef enum FAMCodes {....} FAMCodes;"
+   fam has "enum FAMCodes { ... }".
+*/
+static GFileMonitorEvent  
+fam_event_to_file_monitor_event (int code)
+{
+  switch (code)
+    {
+    case FAMChanged:
+      return G_FILE_MONITOR_EVENT_CHANGED;
+      break;
+    case FAMDeleted:
+      return G_FILE_MONITOR_EVENT_DELETED;
+      break;
+    case FAMCreated:
+      return G_FILE_MONITOR_EVENT_CREATED;
+      break;
+    default:
+      return -1;
+      break;
+    }
+}
+
+static gboolean
+fam_do_iter_unlocked (void)
+{
+  while (fam_connection != NULL && FAMPending (fam_connection)) 
+    {
+      FAMEvent ev;
+      fam_sub* sub = NULL;
+      gboolean cancelled;
+    
+      if (FAMNextEvent (fam_connection, &ev) != 1) 
+        {
+          FAMClose (fam_connection);
+          g_free (fam_connection);
+          g_source_remove (fam_watch_id);
+          fam_watch_id = 0;
+          fam_connection = NULL;
+          return FALSE;
+        }
+    
+      sub = (fam_sub*)ev.userdata;
+      cancelled = sub->cancelled;
+      if (ev.code == FAMAcknowledge && cancelled)
+        {
+	  _fam_sub_free (sub);
+	  continue;
+        }
+    
+      if (cancelled)
+        continue;
+    
+      if (sub->directory)
+        {
+	  GFileMonitor* monitor = G_FILE_MONITOR (sub->user_data);
+	  GFileMonitorEvent eflags = fam_event_to_file_monitor_event (ev.code);
+	  gchar* path = NULL;
+	  GFile *child, *parent;
+	
+	  /* unsupported event */
+	  if (eflags == -1)
+	    continue;
+	
+	  if (ev.filename[0] == '/')
+	    path = g_strdup (ev.filename);
+	  else
+	    path = g_strdup_printf ("%s/%s", sub->pathname, ev.filename);
+
+	  child = g_file_new_for_path (path);
+	  parent = g_file_get_parent (child);
+	  g_file_monitor_emit_event (monitor, child, NULL, eflags);
+	  g_free (path);
+	  g_object_unref (child);
+	  g_object_unref (parent);
+        } 
+      else 
+        {
+	  GFile *child;
+	  GFileMonitor* monitor = G_FILE_MONITOR (sub->user_data);
+	  GFileMonitorEvent eflags = fam_event_to_file_monitor_event (ev.code);
+	  gchar* path = NULL;
+      
+	  if (eflags == -1)
+	    continue;
+	  path = g_strdup (ev.filename);
+	  child = g_file_new_for_path (path);
+	  g_file_monitor_emit_event (monitor, child, NULL, eflags);
+	  g_free (path);
+	  g_object_unref (child);
+        }
+    }
+  
+  return TRUE;
+}
+
+static gboolean
+fam_callback (GIOChannel   *source,
+              GIOCondition  condition,
+              gpointer      data)
+{
+  gboolean res;
+  G_LOCK (fam_connection);
+  
+  res = fam_do_iter_unlocked ();
+  
+  G_UNLOCK (fam_connection);
+  return res;
+}
+
+gboolean
+_fam_sub_startup (void)
+{
+  GIOChannel *ioc;
+  
+  G_LOCK (fam_connection);
+  
+  if (fam_connection == NULL) 
+    {
+      fam_connection = g_new0 (FAMConnection, 1);
+      if (FAMOpen2 (fam_connection, "gvfs user") != 0) 
+        {
+          g_warning ("FAMOpen failed, FAMErrno=%d\n", FAMErrno);
+          g_free (fam_connection);
+          fam_connection = NULL;
+          G_UNLOCK (fam_connection);
+          return FALSE;
+        }
+#ifdef HAVE_FAM_NO_EXISTS
+    /* This is a gamin extension that avoids sending all the Exists event for dir monitors */
+      FAMNoExists (fam_connection);
+#endif
+      ioc = g_io_channel_unix_new (FAMCONNECTION_GETFD(fam_connection));
+      fam_watch_id = g_io_add_watch (ioc,
+  				     G_IO_IN | G_IO_HUP | G_IO_ERR,
+				     fam_callback, fam_connection);
+      g_io_channel_unref (ioc);
+    }
+  
+  G_UNLOCK (fam_connection);
+  
+  return TRUE;
+}
+
+void
+_fam_sub_shutdown (void)
+{
+  G_LOCK (fam_connection);
+
+  if (fam_connection != NULL) 
+    {
+      FAMClose (fam_connection);
+      g_free (fam_connection);
+      g_source_remove (fam_watch_id);
+      fam_watch_id = 0;
+      fam_connection = NULL;
+    }
+
+  G_UNLOCK (fam_connection);
+}
+
+fam_sub*
+_fam_sub_add (const gchar *pathname,
+	      gboolean     directory,
+	      gpointer     user_data)
+{
+  fam_sub *sub;
+
+  if (!_fam_sub_startup ())
+    return NULL;
+  
+  G_LOCK (fam_connection);
+  /* We need to queue up incoming messages to avoid blocking on write
+   *  if there are many monitors being canceled */
+  fam_do_iter_unlocked ();
+  
+  if (fam_connection == NULL) 
+    {
+      G_UNLOCK (fam_connection);
+      return NULL;
+    }
+
+  sub = g_new0 (fam_sub, 1);
+  sub->pathname = g_strdup (pathname);
+  sub->directory = directory;
+  sub->user_data = user_data;
+  
+  if (directory)
+    FAMMonitorDirectory (fam_connection, pathname, &sub->request, sub);
+  else
+    FAMMonitorFile (fam_connection, pathname, &sub->request, sub);
+  
+  G_UNLOCK (fam_connection);
+
+  return sub;
+}
+
+gboolean
+_fam_sub_cancel (fam_sub* sub)
+{
+  if (sub->cancelled)
+    return TRUE;
+  
+  sub->cancelled = TRUE;
+  
+  G_LOCK (fam_connection);
+  /* We need to queue up incoming messages to avoid blocking on write
+   *  if there are many monitors being canceled */
+  fam_do_iter_unlocked ();
+  
+  if (fam_connection == NULL) 
+    {
+      G_UNLOCK (fam_connection);
+      return FALSE;
+    }
+  
+  FAMCancelMonitor (fam_connection, &sub->request);
+  
+  G_UNLOCK (fam_connection);
+  
+  return TRUE;
+}
+
+void
+_fam_sub_free (fam_sub* sub)
+{
+  g_free (sub->pathname);
+  g_free (sub);
+}
+
diff --git a/gio/fam/fam-helper.h b/gio/fam/fam-helper.h
new file mode 100644
index 0000000..05e67d1
--- /dev/null
+++ b/gio/fam/fam-helper.h
@@ -0,0 +1,38 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __FAM_HELPER_H__
+#define __FAM_HELPER_H__
+
+typedef struct _fam_sub fam_sub;
+
+gboolean  _fam_sub_startup (void);
+void      _fam_sub_shutdown (void);
+fam_sub*  _fam_sub_add     (const gchar* pathname,
+			    gboolean     directory,
+			    gpointer     user_data);
+gboolean  _fam_sub_cancel  (fam_sub* sub);
+void      _fam_sub_free    (fam_sub* sub);
+
+#endif /* __FAM_HELPER_H__ */
diff --git a/gio/fam/fam-module.c b/gio/fam/fam-module.c
new file mode 100644
index 0000000..70e8dea
--- /dev/null
+++ b/gio/fam/fam-module.c
@@ -0,0 +1,43 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#include "giomodule.h"
+#include "gfamdirectorymonitor.h"
+#include "gfamfilemonitor.h"
+#include "fam-helper.h"
+
+void
+g_io_module_load (GIOModule *module)
+{
+  g_fam_file_monitor_register (module);
+  g_fam_directory_monitor_register (module);
+}
+
+void
+g_io_module_unload (GIOModule   *module)
+{
+  _fam_sub_shutdown ();
+}
+
diff --git a/gio/fam/gfamdirectorymonitor.c b/gio/fam/gfamdirectorymonitor.c
new file mode 100644
index 0000000..831a2bc
--- /dev/null
+++ b/gio/fam/gfamdirectorymonitor.c
@@ -0,0 +1,153 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#include "config.h"
+
+#include "gfamdirectorymonitor.h"
+#include "giomodule.h"
+
+#include "fam-helper.h"
+
+struct _GFamDirectoryMonitor
+{
+  GLocalDirectoryMonitor parent_instance;
+  fam_sub *sub;
+};
+
+static gboolean g_fam_directory_monitor_cancel (GFileMonitor* monitor);
+
+G_DEFINE_DYNAMIC_TYPE (GFamDirectoryMonitor, g_fam_directory_monitor, G_TYPE_LOCAL_DIRECTORY_MONITOR)
+
+static void
+g_fam_directory_monitor_finalize (GObject *object)
+{
+  GFamDirectoryMonitor *fam_monitor = G_FAM_DIRECTORY_MONITOR (object);
+  fam_sub *sub = fam_monitor->sub;
+
+  if (sub) {
+    if (!_fam_sub_cancel (sub))
+      g_warning ("Unexpected error cancelling fam monitor");
+
+    fam_monitor->sub = NULL;
+  }
+
+  if (G_OBJECT_CLASS (g_fam_directory_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_fam_directory_monitor_parent_class)->finalize) (object);
+}
+
+static GObject *
+g_fam_directory_monitor_constructor (GType type,
+                                    guint n_construct_properties,
+                                    GObjectConstructParam *construct_properties)
+{
+  GObject *obj;
+  GFamDirectoryMonitorClass *klass;
+  GObjectClass *parent_class;
+  GFamDirectoryMonitor *fam_monitor;
+  const gchar *dirname = NULL;
+  fam_sub *sub = NULL;
+  
+  klass = G_FAM_DIRECTORY_MONITOR_CLASS (g_type_class_peek (G_TYPE_FAM_DIRECTORY_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type,
+                                   n_construct_properties,
+                                   construct_properties);
+
+  fam_monitor = G_FAM_DIRECTORY_MONITOR (obj);
+
+  dirname = G_LOCAL_DIRECTORY_MONITOR (obj)->dirname;
+  g_assert (dirname != NULL);
+
+  sub = _fam_sub_add (dirname, TRUE, fam_monitor);
+  /* FIXME: what to do about errors here? we can't return NULL or another
+   * kind of error and an assertion is probably too hard */
+  g_assert (sub != NULL);
+
+  fam_monitor->sub = sub;
+
+  return obj;
+}
+
+static void
+g_fam_directory_monitor_class_finalize (GFamDirectoryMonitorClass *klass)
+{
+}
+
+static gboolean
+g_fam_directory_monitor_is_supported (void)
+{
+  return _fam_sub_startup ();
+}
+
+static void
+g_fam_directory_monitor_class_init (GFamDirectoryMonitorClass* klass)
+{
+  GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+  GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
+  GLocalDirectoryMonitorClass *local_directory_monitor_class = G_LOCAL_DIRECTORY_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_fam_directory_monitor_finalize;
+  gobject_class->constructor = g_fam_directory_monitor_constructor;
+  file_monitor_class->cancel = g_fam_directory_monitor_cancel;
+
+  local_directory_monitor_class->mount_notify = FALSE;
+  local_directory_monitor_class->is_supported = g_fam_directory_monitor_is_supported;
+}
+
+static void
+g_fam_directory_monitor_init (GFamDirectoryMonitor* monitor)
+{
+
+}
+
+static gboolean
+g_fam_directory_monitor_cancel (GFileMonitor* monitor)
+{
+  GFamDirectoryMonitor *fam_monitor = G_FAM_DIRECTORY_MONITOR (monitor);
+  fam_sub *sub = fam_monitor->sub;
+
+  if (sub) {
+    if (!_fam_sub_cancel (sub))
+      g_warning ("Unexpected error cancelling fam monitor");
+
+    fam_monitor->sub = NULL;
+  }
+
+  if (G_FILE_MONITOR_CLASS (g_fam_directory_monitor_parent_class)->cancel)
+    (*G_FILE_MONITOR_CLASS (g_fam_directory_monitor_parent_class)->cancel) (monitor);
+
+  return TRUE;
+}
+
+void
+g_fam_directory_monitor_register (GIOModule *module)
+{
+  g_fam_directory_monitor_register_type (G_TYPE_MODULE (module));
+  g_io_extension_point_implement (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME,
+				  G_TYPE_FAM_DIRECTORY_MONITOR,
+				  "fam",
+				  10);
+}
+
diff --git a/gio/fam/gfamdirectorymonitor.h b/gio/fam/gfamdirectorymonitor.h
new file mode 100644
index 0000000..48192d1
--- /dev/null
+++ b/gio/fam/gfamdirectorymonitor.h
@@ -0,0 +1,54 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __G_FAM_DIRECTORY_MONITOR_H__
+#define __G_FAM_DIRECTORY_MONITOR_H__
+
+#include <glib-object.h>
+#include <string.h>
+#include "glocaldirectorymonitor.h"
+#include "giomodule.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FAM_DIRECTORY_MONITOR		(g_fam_directory_monitor_get_type ())
+#define G_FAM_DIRECTORY_MONITOR(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FAM_DIRECTORY_MONITOR, GFamDirectoryMonitor))
+#define G_FAM_DIRECTORY_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_FAM_DIRECTORY_MONITOR, GFamDirectoryMonitorClass))
+#define G_IS_FAM_DIRECTORY_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FAM_DIRECTORY_MONITOR))
+#define G_IS_FAM_DIRECTORY_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FAM_DIRECTORY_MONITOR))
+
+typedef struct _GFamDirectoryMonitor      GFamDirectoryMonitor;
+typedef struct _GFamDirectoryMonitorClass GFamDirectoryMonitorClass;
+
+struct _GFamDirectoryMonitorClass {
+  GLocalDirectoryMonitorClass parent_class;
+};
+
+GType g_fam_directory_monitor_get_type (void);
+void g_fam_directory_monitor_register (GIOModule *module);
+
+G_END_DECLS
+
+#endif /* __G_FAM_DIRECTORY_MONITOR_H__ */
diff --git a/gio/fam/gfamfilemonitor.c b/gio/fam/gfamfilemonitor.c
new file mode 100644
index 0000000..1855047
--- /dev/null
+++ b/gio/fam/gfamfilemonitor.c
@@ -0,0 +1,151 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#include "config.h"
+
+#include "gfamfilemonitor.h"
+#include "giomodule.h"
+
+#include "fam-helper.h"
+
+struct _GFamFileMonitor
+{
+  GLocalFileMonitor parent_instance;
+  fam_sub *sub;
+};
+
+static gboolean g_fam_file_monitor_cancel (GFileMonitor* monitor);
+
+G_DEFINE_DYNAMIC_TYPE (GFamFileMonitor, g_fam_file_monitor, G_TYPE_LOCAL_FILE_MONITOR)
+
+static void
+g_fam_file_monitor_finalize (GObject *object)
+{
+  GFamFileMonitor *fam_monitor = G_FAM_FILE_MONITOR (object);
+  fam_sub *sub = fam_monitor->sub;
+
+  if (sub) {
+    if (!_fam_sub_cancel (sub))
+      g_warning ("Unexpected error cancelling fam monitor");
+    fam_monitor->sub = NULL;
+  }
+
+  if (G_OBJECT_CLASS (g_fam_file_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_fam_file_monitor_parent_class)->finalize) (object);
+}
+
+static GObject *
+g_fam_file_monitor_constructor (GType type,
+                                guint n_construct_properties,
+                                GObjectConstructParam *construct_properties)
+{
+  GObject *obj;
+  GFamFileMonitorClass *klass;
+  GObjectClass *parent_class;
+  GFamFileMonitor *fam_monitor;
+  const gchar *filename = NULL;
+  fam_sub *sub = NULL;
+  
+  klass = G_FAM_FILE_MONITOR_CLASS (g_type_class_peek (G_TYPE_FAM_FILE_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type,
+                                   n_construct_properties,
+                                   construct_properties);
+
+  fam_monitor = G_FAM_FILE_MONITOR (obj);
+
+  filename = G_LOCAL_FILE_MONITOR (obj)->filename;
+
+  g_assert (filename != NULL);
+
+  sub = _fam_sub_add (filename, FALSE, fam_monitor);
+  /* FIXME: what to do about errors here? we can't return NULL or another
+   * kind of error and an assertion is probably too hard */
+  g_assert (sub != NULL);
+
+  fam_monitor->sub = sub;
+
+  return obj;
+}
+
+static void
+g_fam_file_monitor_class_finalize (GFamFileMonitorClass *klass)
+{
+}
+
+static gboolean
+g_fam_file_monitor_is_supported (void)
+{
+  return _fam_sub_startup ();
+}
+
+static void
+g_fam_file_monitor_class_init (GFamFileMonitorClass* klass)
+{
+  GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+  GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
+  GLocalFileMonitorClass *local_file_monitor_class = G_LOCAL_FILE_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_fam_file_monitor_finalize;
+  gobject_class->constructor = g_fam_file_monitor_constructor;
+  file_monitor_class->cancel = g_fam_file_monitor_cancel;
+
+  local_file_monitor_class->is_supported = g_fam_file_monitor_is_supported;
+}
+
+static void
+g_fam_file_monitor_init (GFamFileMonitor* monitor)
+{
+
+}
+
+static gboolean
+g_fam_file_monitor_cancel (GFileMonitor* monitor)
+{
+  GFamFileMonitor *fam_monitor = G_FAM_FILE_MONITOR (monitor);
+  fam_sub *sub = fam_monitor->sub;
+
+  if (sub) {
+    if (!_fam_sub_cancel (sub))
+      g_warning ("Unexpected error cancelling fam monitor");
+    fam_monitor->sub = NULL;
+  }
+
+  if (G_FILE_MONITOR_CLASS (g_fam_file_monitor_parent_class)->cancel)
+    (*G_FILE_MONITOR_CLASS (g_fam_file_monitor_parent_class)->cancel) (monitor);
+
+  return TRUE;
+}
+
+void
+g_fam_file_monitor_register (GIOModule *module)
+{
+  g_fam_file_monitor_register_type (G_TYPE_MODULE (module));
+  g_io_extension_point_implement (G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME,
+				  G_TYPE_FAM_FILE_MONITOR,
+				  "fam",
+				  10);
+}
+
diff --git a/gio/fam/gfamfilemonitor.h b/gio/fam/gfamfilemonitor.h
new file mode 100644
index 0000000..559384e
--- /dev/null
+++ b/gio/fam/gfamfilemonitor.h
@@ -0,0 +1,55 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __G_FAM_FILE_MONITOR_H__
+#define __G_FAM_FILE_MONITOR_H__
+
+#include <glib-object.h>
+#include <string.h>
+#include <gio/gfilemonitor.h>
+#include "glocalfilemonitor.h"
+#include "giomodule.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FAM_FILE_MONITOR		(g_fam_file_monitor_get_type ())
+#define G_FAM_FILE_MONITOR(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FAM_FILE_MONITOR, GFamFileMonitor))
+#define G_FAM_FILE_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_FAM_FILE_MONITOR, GFamFileMonitorClass))
+#define G_IS_FAM_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FAM_FILE_MONITOR))
+#define G_IS_FAM_FILE_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FAM_FILE_MONITOR))
+
+typedef struct _GFamFileMonitor      GFamFileMonitor;
+typedef struct _GFamFileMonitorClass GFamFileMonitorClass;
+
+struct _GFamFileMonitorClass {
+  GLocalFileMonitorClass parent_class;
+};
+
+GType g_fam_file_monitor_get_type (void);
+void g_fam_file_monitor_register (GIOModule *module);
+
+G_END_DECLS
+
+#endif /* __G_FAM_FILE_MONITOR_H__ */
diff --git a/gio/fen/Makefile.am b/gio/fen/Makefile.am
new file mode 100644
index 0000000..1acaa44
--- /dev/null
+++ b/gio/fen/Makefile.am
@@ -0,0 +1,38 @@
+include $(top_srcdir)/Makefile.decl
+
+NULL =
+
+noinst_LTLIBRARIES = libfen.la
+
+libfen_la_SOURCES = 		\
+	fen-dump.c		\
+	fen-dump.h		\
+	fen-kernel.c 		\
+	fen-kernel.h 		\
+	fen-node.c		\
+	fen-node.h		\
+	fen-missing.c		\
+	fen-missing.h		\
+	fen-helper.c 		\
+	fen-helper.h		\
+	fen-data.c		\
+	fen-data.h		\
+	fen-sub.c		\
+	fen-sub.h		\
+	gfenfilemonitor.c		\
+	gfenfilemonitor.h		\
+	gfendirectorymonitor.c	\
+	gfendirectorymonitor.h	\
+	$(NULL)
+
+libfen_la_CFLAGS = \
+	-DG_LOG_DOMAIN=\"GLib-GIO\"	\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gmodule		\
+	-I$(top_srcdir)/gio 		\
+	-I$(top_builddir)/gio 		\
+	$(GLIB_DEBUG_FLAGS)		\
+	-DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"	\
+	-DGIO_COMPILATION		\
+	-DG_DISABLE_DEPRECATED
diff --git a/gio/fen/fen-data.c b/gio/fen/fen-data.c
new file mode 100644
index 0000000..13b2fe1
--- /dev/null
+++ b/gio/fen/fen-data.c
@@ -0,0 +1,722 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include <port.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <glib.h>
+#include "fen-data.h"
+#include "fen-kernel.h"
+#include "fen-missing.h"
+#include "fen-dump.h"
+
+#define	PROCESS_EVENTQ_TIME	10	/* in milliseconds */
+#define PAIR_EVENTS_TIMEVAL	00000	/* in microseconds */
+#define	PAIR_EVENTS_INC_TIMEVAL	0000	/* in microseconds */
+#define SCAN_CHANGINGS_TIME	50	/* in milliseconds */
+#define	SCAN_CHANGINGS_MAX_TIME	(4*100)	/* in milliseconds */
+#define	SCAN_CHANGINGS_MIN_TIME	(4*100)	/* in milliseconds */
+#define	INIT_CHANGES_NUM	2
+#define	BASE_NUM	2
+
+#ifdef GIO_COMPILATION
+#define FD_W if (fd_debug_enabled) g_warning
+static gboolean fd_debug_enabled = FALSE;
+#else
+#include "gam_error.h"
+#define FD_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
+#endif
+
+G_LOCK_EXTERN (fen_lock);
+static GList *deleting_data = NULL;
+static guint deleting_data_id = 0;
+
+static void (*emit_once_cb) (fdata *f, int events, gpointer sub);
+static void (*emit_cb) (fdata *f, int events);
+static int (*_event_converter) (int event);
+
+static gboolean fdata_delete (fdata* f);
+static gint fdata_sub_find (gpointer a, gpointer b);
+static void scan_children (node_t *f);
+static void scan_known_children (node_t* f);
+
+node_t*
+add_missing_cb (node_t* parent, gpointer user_data)
+{
+    g_assert (parent);
+    FD_W ("%s p:0x%p %s\n", __func__, parent, (gchar*)user_data);
+    return add_node (parent, (gchar*)user_data);
+}
+
+gboolean
+pre_del_cb (node_t* node, gpointer user_data)
+{
+    fdata* data;
+    
+    g_assert (node);
+    data = node_get_data (node);
+    FD_W ("%s node:0x%p %s\n", __func__, node, NODE_NAME(node));
+    if (data != NULL) {
+        if (!FN_IS_PASSIVE(data)) {
+            return FALSE;
+        }
+        fdata_delete (data);
+    }
+    return TRUE;
+}
+
+static guint
+_pow (guint x, guint y)
+{
+    guint z = 1;
+    g_assert (x >= 0 && y >= 0);
+    for (; y > 0; y--) {
+        z *= x;
+    }
+    return z;
+}
+
+static guint
+get_scalable_scan_time (fdata* data)
+{
+    guint sleep_time;
+    /* Caculate from num = 0 */
+    sleep_time = _pow (BASE_NUM, data->changed_event_num) * SCAN_CHANGINGS_TIME;
+    if (sleep_time < SCAN_CHANGINGS_MIN_TIME) {
+        sleep_time = SCAN_CHANGINGS_MIN_TIME;
+    } else if (sleep_time > SCAN_CHANGINGS_MAX_TIME) {
+        sleep_time = SCAN_CHANGINGS_MAX_TIME;
+        data->change_update_id = INIT_CHANGES_NUM;
+    }
+    FD_W ("SCALABE SCAN num:time [ %4u : %4u ] %s\n", data->changed_event_num, sleep_time, FN_NAME(data));
+    return sleep_time;
+}
+
+static gboolean
+g_timeval_lt (GTimeVal *val1, GTimeVal *val2)
+{
+    if (val1->tv_sec < val2->tv_sec)
+        return TRUE;
+  
+    if (val1->tv_sec > val2->tv_sec)
+        return FALSE;
+  
+    /* val1->tv_sec == val2->tv_sec */
+    if (val1->tv_usec < val2->tv_usec)
+        return TRUE;
+  
+    return FALSE;
+}
+
+/**
+ * If all active children nodes are ported, then cancel monitor the parent node
+ *
+ * Unsafe, need lock.
+ */
+static void
+scan_known_children (node_t* f)
+{
+	GDir *dir;
+	GError *err = NULL;
+    fdata* pdata;
+    
+    FD_W ("%s %s [0x%p]\n", __func__, NODE_NAME(f), f);
+    pdata = node_get_data (f);
+    /*
+     * Currect fdata must is directly monitored. Be sure it is 1 level monitor.
+     */
+	dir = g_dir_open (NODE_NAME(f), 0, &err);
+	if (dir) {
+		const char *basename;
+        
+		while ((basename = g_dir_read_name (dir)))
+		{
+            node_t* childf = NULL;
+            fdata* data;
+			GList *idx;
+			/*
+             * If the node is existed, and isn't ported, then emit created
+             * event. Ignore others.
+             */
+            childf = children_find (f, basename);
+            if (childf &&
+              (data = node_get_data (childf)) != NULL &&
+              !FN_IS_PASSIVE (data)) {
+                if (!is_monitoring (data) &&
+                  port_add (&data->fobj, &data->len, data)) {
+                    fdata_emit_events (data, FN_EVENT_CREATED);
+                }
+            }
+        }
+		g_dir_close (dir);
+    } else {
+        FD_W (err->message);
+        g_error_free (err);
+    }
+}
+
+static void
+scan_children (node_t *f)
+{
+	GDir *dir;
+	GError *err = NULL;
+    fdata* pdata;
+    
+    FD_W ("%s %s [0x%p]\n", __func__, NODE_NAME(f), f);
+    pdata = node_get_data (f);
+    /*
+     * Currect fdata must is directly monitored. Be sure it is 1 level monitor.
+     */
+	dir = g_dir_open (NODE_NAME(f), 0, &err);
+	if (dir) {
+		const char *basename;
+        
+		while ((basename = g_dir_read_name (dir)))
+		{
+            node_t* childf = NULL;
+            fdata* data;
+			GList *idx;
+
+            childf = children_find (f, basename);
+            if (childf == NULL) {
+                gchar *filename;
+
+                filename = g_build_filename (NODE_NAME(f), basename, NULL);
+                childf = add_node (f, filename);
+                g_assert (childf);
+                data = fdata_new (childf, FALSE);
+                g_free (filename);
+            }
+            if ((data = node_get_data (childf)) == NULL) {
+                data = fdata_new (childf, FALSE);
+            }
+            /* Be sure data isn't ported and add to port successfully */
+            /* Don't need delete it, it will be deleted by the parent */
+            if (is_monitoring (data)) {
+                /* Ignored */
+            } else if (/* !is_ported (data) && */
+                port_add (&data->fobj, &data->len, data)) {
+                fdata_emit_events (data, FN_EVENT_CREATED);
+            }
+        }
+		g_dir_close (dir);
+    } else {
+        FD_W (err->message);
+        g_error_free (err);
+    }
+}
+
+static gboolean
+scan_deleting_data (gpointer data)
+{
+    fdata *f;
+    GList* i;
+    GList* deleted_list = NULL;
+    gboolean ret = TRUE;
+
+    if (G_TRYLOCK (fen_lock)) {
+        for (i = deleting_data; i; i = i->next) {
+            f = (fdata*)i->data;
+            if (fdata_delete (f)) {
+                deleted_list = g_list_prepend (deleted_list, i);
+            }
+        }
+
+        for (i = deleted_list; i; i = i->next) {
+            deleting_data = g_list_remove_link (deleting_data,
+              (GList *)i->data);
+            g_list_free_1 ((GList *)i->data);
+        }
+        g_list_free (deleted_list);
+
+        if (deleting_data == NULL) {
+            deleting_data_id = 0;
+            ret = FALSE;
+        }
+        G_UNLOCK (fen_lock);
+    }
+    return ret;
+}
+
+gboolean
+is_monitoring (fdata* data)
+{
+    return is_ported (data) || data->change_update_id > 0;
+}
+
+fdata*
+get_parent_data (fdata* data)
+{
+    if (FN_NODE(data) && !IS_TOPNODE(FN_NODE(data))) {
+        return node_get_data (FN_NODE(data)->parent);
+    }
+    return NULL;
+}
+
+node_t*
+get_parent_node (fdata* data)
+{
+    if (FN_NODE(data)) {
+        return (FN_NODE(data)->parent);
+    }
+    return NULL;
+}
+
+fdata *
+fdata_new (node_t* node, gboolean is_mondir)
+{
+	fdata *f = NULL;
+
+    g_assert (node);
+	if ((f = g_new0 (fdata, 1)) != NULL) {
+        FN_NODE(f) = node;
+		FN_NAME(f) = g_strdup (NODE_NAME(node));
+        f->is_dir = is_mondir;
+        f->eventq = g_queue_new ();
+        FD_W ("[ %s ] 0x%p %s\n", __func__, f, FN_NAME(f));
+        node_set_data (node, f);
+	}
+	return f;
+}
+
+static gboolean
+fdata_delete (fdata *f)
+{
+    fnode_event_t *ev;
+
+    FD_W ("[ TRY %s ] 0x%p id[%4d:%4d] %s\n", __func__, f, f->eventq_id, f->change_update_id, FN_NAME(f));
+    g_assert (FN_IS_PASSIVE(f));
+
+    port_remove (f);
+    /* missing_remove (f); */
+
+    if (f->node != NULL) {
+        node_set_data (f->node, NULL);
+        f->node = NULL;
+    }
+
+    if (f->change_update_id > 0 || f->eventq_id > 0) {
+        if (FN_IS_LIVING(f)) {
+            f->is_cancelled = TRUE;
+            deleting_data = g_list_prepend (deleting_data, f);
+            if (deleting_data_id == 0) {
+                deleting_data_id = g_idle_add (scan_deleting_data, NULL);
+                g_assert (deleting_data_id > 0);
+            }
+        }
+        return FALSE;
+    }
+    FD_W ("[ %s ] 0x%p %s\n", __func__, f, FN_NAME(f));
+
+    while ((ev = g_queue_pop_head (f->eventq)) != NULL) {
+        fnode_event_delete (ev);
+    }
+
+    g_queue_free (f->eventq);
+    g_free (FN_NAME(f));
+    g_free (f);
+    return TRUE;
+}
+
+void
+fdata_reset (fdata* data)
+{
+    fnode_event_t *ev;
+
+    g_assert (data);
+
+    while ((ev = g_queue_pop_head (data->eventq)) != NULL) {
+        fnode_event_delete (ev);
+    }
+}
+
+static gint
+fdata_sub_find (gpointer a, gpointer b)
+{
+    if (a != b) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+void
+fdata_sub_add (fdata *f, gpointer sub)
+{
+    FD_W ("[%s] [data: 0x%p ] [s: 0x%p ] %s\n", __func__, f, sub, FN_NAME(f));
+    g_assert (g_list_find_custom (f->subs, sub, (GCompareFunc)fdata_sub_find) == NULL);
+    f->subs = g_list_prepend (f->subs, sub);
+}
+
+void
+fdata_sub_remove (fdata *f, gpointer sub)
+{
+    GList *l;
+    FD_W ("[%s] [data: 0x%p ] [s: 0x%p ] %s\n", __func__, f, sub, FN_NAME(f));
+    g_assert (g_list_find_custom (f->subs, sub, (GCompareFunc)fdata_sub_find) != NULL);
+    l = g_list_find_custom (f->subs, sub, (GCompareFunc)fdata_sub_find);
+    g_assert (l);
+    g_assert (sub == l->data);
+    f->subs = g_list_delete_link (f->subs, l);
+}
+
+/**
+ * Adjust self on failing to Port
+ */
+void
+fdata_adjust_deleted (fdata* f)
+{
+    node_t* parent;
+    fdata* pdata;
+    node_op_t op = {NULL, NULL, pre_del_cb, NULL};
+
+    /*
+     * It's a top node. We move it to missing list.
+     */
+    parent = get_parent_node (f);
+    pdata = get_parent_data (f);
+    if (!FN_IS_PASSIVE(f) ||
+      children_num (FN_NODE(f)) > 0 ||
+      (pdata && !FN_IS_PASSIVE(pdata))) {
+        if (parent) {
+            if (pdata == NULL) {
+                pdata = fdata_new (parent, FALSE);
+            }
+            g_assert (pdata);
+            if (!port_add (&pdata->fobj, &pdata->len, pdata)) {
+                fdata_adjust_deleted (pdata);
+            }
+        } else {
+            /* f is root */
+            g_assert (IS_TOPNODE(FN_NODE(f)));
+            missing_add (f);
+        }
+    } else {
+#ifdef GIO_COMPILATION
+        pending_remove_node (FN_NODE(f), &op);
+#else
+        remove_node (FN_NODE(f), &op);
+#endif
+    }
+}
+
+static gboolean
+fdata_adjust_changed (fdata *f)
+{
+    fnode_event_t *ev;
+    struct stat buf;
+    node_t* parent;
+    fdata* pdata;
+
+    G_LOCK (fen_lock);
+    parent = get_parent_node (f);
+    pdata = get_parent_data (f);
+
+    if (!FN_IS_LIVING(f) ||
+      (children_num (FN_NODE(f)) == 0 &&
+        FN_IS_PASSIVE(f) &&
+        pdata && FN_IS_PASSIVE(pdata))) {
+        f->change_update_id = 0;
+        G_UNLOCK (fen_lock);
+        return FALSE;
+    }
+
+    FD_W ("[ %s ] %s\n", __func__, FN_NAME(f));
+    if (FN_STAT (FN_NAME(f), &buf) != 0) {
+        FD_W ("LSTAT [%-20s] %s\n", FN_NAME(f), g_strerror (errno));
+        goto L_delete;
+    }
+    f->is_dir = S_ISDIR (buf.st_mode) ? TRUE : FALSE;
+    if (f->len != buf.st_size) {
+        /* FD_W ("LEN [%lld:%lld] %s\n", f->len, buf.st_size, FN_NAME(f)); */
+        f->len = buf.st_size;
+        ev = fnode_event_new (FILE_MODIFIED, TRUE, f);
+        if (ev != NULL) {
+            ev->is_pending = TRUE;
+            fdata_add_event (f, ev);
+        }
+        /* Fdata is still changing, so scalable scan */
+        f->change_update_id = g_timeout_add (get_scalable_scan_time (f),
+          (GSourceFunc)fdata_adjust_changed,
+          (gpointer)f);
+        G_UNLOCK (fen_lock);
+        return FALSE;
+    } else {
+        f->changed_event_num = 0;
+        f->fobj.fo_atime = buf.st_atim;
+        f->fobj.fo_mtime = buf.st_mtim;
+        f->fobj.fo_ctime = buf.st_ctim;
+        if (FN_IS_DIR(f)) {
+            if (FN_IS_MONDIR(f)) {
+                scan_children (FN_NODE(f));
+            } else {
+                scan_known_children (FN_NODE(f));
+                if ((children_num (FN_NODE(f)) == 0 &&
+                      FN_IS_PASSIVE(f) &&
+                      pdata && FN_IS_PASSIVE(pdata))) {
+                    port_remove (f);
+                    goto L_exit;
+                }
+            }
+        }
+        if (!port_add_simple (&f->fobj, f)) {
+        L_delete:
+            ev = fnode_event_new (FILE_DELETE, FALSE, f);
+            if (ev != NULL) {
+                fdata_add_event (f, ev);
+            }
+        }
+    }
+L_exit:
+    f->change_update_id = 0;
+    G_UNLOCK (fen_lock);
+    return FALSE;
+}
+
+void
+fdata_emit_events_once (fdata *f, int event, gpointer sub)
+{
+    emit_once_cb (f, _event_converter (event), sub);
+}
+
+void
+fdata_emit_events (fdata *f, int event)
+{
+    emit_cb (f, _event_converter (event));
+}
+
+static gboolean
+process_events (gpointer udata)
+{
+    node_op_t op = {NULL, NULL, pre_del_cb, NULL};
+    fdata* f;
+    fnode_event_t* ev;
+    int e;
+
+    /* FD_W ("IN <======== %s\n", __func__); */
+
+    f = (fdata*)udata;
+    FD_W ("%s 0x%p id:%-4d %s\n", __func__, f, f->eventq_id, FN_NAME(f));
+    
+    G_LOCK (fen_lock);
+
+    if (!FN_IS_LIVING(f)) {
+        f->eventq_id = 0;
+        G_UNLOCK (fen_lock);
+        return FALSE;
+    }
+    
+    if ((ev = (fnode_event_t*)g_queue_pop_head (f->eventq)) != NULL) {
+        /* Send events to clients. */
+        e = ev->e;
+        if (!ev->is_pending) {
+#ifdef GIO_COMPILATION
+            if (ev->has_twin) {
+                fdata_emit_events (f, FILE_ATTRIB);
+            }
+#endif
+            fdata_emit_events (f, ev->e);
+        }
+        
+        fnode_event_delete (ev);
+        ev = NULL;
+
+        /* Adjust node state. */
+        /*
+         * Node the node has been created, so we can delete create event in
+         * optimizing. To reduce the statings, we add it to Port on discoving
+         * it then emit CREATED event. So we don't need to do anything here.
+         */
+        switch (e) {
+        case FILE_MODIFIED:
+        case MOUNTEDOVER:
+        case UNMOUNTED:
+            /* If the event is a changed event, then pending process it */
+            if (f->change_update_id == 0) {
+                f->change_update_id = g_timeout_add (get_scalable_scan_time(f),
+                  (GSourceFunc)fdata_adjust_changed,
+                  (gpointer)f);
+                g_assert (f->change_update_id > 0);
+            }
+            break;
+        case FILE_ATTRIB:
+            g_assert (f->change_update_id == 0);
+            if (!port_add (&f->fobj, &f->len, f)) {
+                ev = fnode_event_new (FILE_DELETE, FALSE, f);
+                if (ev != NULL) {
+                    fdata_add_event (f, ev);
+                }
+            }
+            break;
+        case FILE_DELETE: /* Ignored */
+            break;
+        default:
+            g_assert_not_reached ();
+            break;
+        }
+        /* Process one event a time */
+        G_UNLOCK (fen_lock); 
+        return TRUE;
+    }
+    f->eventq_id = 0;
+    G_UNLOCK (fen_lock); 
+    /* FD_W ("OUT ========> %s\n", __func__); */
+    return FALSE;
+}
+
+/**
+ * fdata_add_event:
+ *
+ */
+void
+fdata_add_event (fdata *f, fnode_event_t *ev)
+{
+    node_op_t op = {NULL, NULL, pre_del_cb, NULL};
+    fnode_event_t *tail;
+
+    if (!FN_IS_LIVING(f)) {
+        fnode_event_delete (ev);
+        return;
+    }
+    
+    FD_W ("%s %d\n", __func__, ev->e);
+    g_get_current_time (&ev->t);
+    /*
+     * If created/deleted events of child node happened, then we use parent
+     * event queue to handle.
+     * If child node emits deleted event, it seems no changes for the parent
+     * node, but the attr is changed. So we may try to cancel processing the
+     * coming changed events of the parent node.
+     */
+    tail = (fnode_event_t*)g_queue_peek_tail (f->eventq);
+    switch (ev->e) {
+    case FILE_RENAME_FROM:
+    case FILE_RENAME_TO:
+    case FILE_ACCESS:
+        fnode_event_delete (ev);
+        g_assert_not_reached ();
+        return;
+    case FILE_DELETE:
+        /* clear changed event number */
+        f->changed_event_num = 0;
+        /*
+         * We will cancel all previous events.
+         */
+        if (tail) {
+            g_queue_pop_tail (f->eventq);
+            do {
+                fnode_event_delete (tail);
+            } while ((tail = (fnode_event_t*)g_queue_pop_tail (f->eventq)) != NULL);
+        }
+        /*
+         * Given a node "f" is deleted, process it ASAP.
+         */
+        fdata_emit_events (f, ev->e);
+        fnode_event_delete (ev);
+        fdata_adjust_deleted (f);
+        return;
+    case FILE_MODIFIED:
+    case UNMOUNTED:
+    case MOUNTEDOVER:
+        /* clear changed event number */
+        f->changed_event_num ++;
+    case FILE_ATTRIB:
+    default:
+        /*
+         * If in the time range, we will try optimizing
+         * (changed+) to (changed)
+         * (attrchanged changed) to ([changed, attrchanged])
+         * (event attrchanged) to ([event, attrchanged])
+         */
+        if (tail) {
+            do {
+                if (tail->e == ev->e) {
+                    if (g_timeval_lt (&ev->t, &tail->t)) {
+                        g_queue_peek_tail (f->eventq);
+                        /* Add the increment */
+                        g_time_val_add (&ev->t, PAIR_EVENTS_INC_TIMEVAL);
+                        /* skip the previous event */
+                        FD_W ("SKIPPED -- %s\n", _event_string (tail->e));
+                        fnode_event_delete (tail);
+                    } else {
+                        break;
+                    }
+                } else if (ev->e == FILE_MODIFIED && tail->e == FILE_ATTRIB) {
+                    ev->has_twin = TRUE;
+                    fnode_event_delete (tail);
+                } else if (ev->e == FILE_ATTRIB && f->change_update_id > 0) {
+                    tail->has_twin = TRUE;
+                    /* skip the current event */
+                    fnode_event_delete (ev);
+                    return;
+                } else {
+                    break;
+                }
+            } while ((tail = (fnode_event_t*)g_queue_peek_tail (f->eventq)) != NULL);
+        }
+    }
+
+    /* must add the threshold time */
+    g_time_val_add (&ev->t, PAIR_EVENTS_TIMEVAL);
+    
+    g_queue_push_tail (f->eventq, ev);
+
+    /* starting process_events */
+    if (f->eventq_id == 0) {
+        f->eventq_id = g_timeout_add (PROCESS_EVENTQ_TIME,
+          process_events,
+          (gpointer)f);
+        g_assert (f->eventq_id > 0);
+    }
+    FD_W ("%s 0x%p id:%-4d %s\n", __func__, f, f->eventq_id, FN_NAME(f));
+}
+
+gboolean
+fdata_class_init (void (*user_emit_cb) (fdata*, int),
+  void (*user_emit_once_cb) (fdata*, int,  gpointer),
+  int (*user_event_converter) (int event))
+{
+    FD_W ("%s\n", __func__);
+    if (user_emit_cb == NULL) {
+        return FALSE;
+    }
+    if (user_emit_once_cb == NULL) {
+        return FALSE;
+    }
+    if (user_event_converter == NULL) {
+        return FALSE;
+    }
+    emit_cb = user_emit_cb;
+    emit_once_cb = user_emit_once_cb;
+    _event_converter = user_event_converter;
+    
+    if (!port_class_init (fdata_add_event)) {
+        FD_W ("port_class_init failed.");
+        return FALSE;
+    }
+    return TRUE;
+}
diff --git a/gio/fen/fen-data.h b/gio/fen/fen-data.h
new file mode 100644
index 0000000..3c0be8a
--- /dev/null
+++ b/gio/fen/fen-data.h
@@ -0,0 +1,89 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "fen-node.h"
+#include "fen-kernel.h"
+
+#ifndef _FEN_DATA_H_
+#define _FEN_DATA_H_
+
+#define FN_EVENT_CREATED	0
+#define FN_NAME(fp)	(((fdata*)(fp))->fobj.fo_name)
+#define FN_NODE(fp)	(((fdata*)(fp))->node)
+#define	FN_IS_DIR(fp)	(((fdata*)(fp))->is_dir)
+#define	FN_IS_PASSIVE(fp)	(((fdata*)(fp))->subs == NULL)
+#define	FN_IS_MONDIR(fp)	(((fdata*)(fp))->mon_dir_num > 0)
+#define	FN_IS_LIVING(fp)	(!((fdata*)(fp))->is_cancelled)
+
+typedef struct
+{
+	file_obj_t fobj;
+    off_t len;
+    gboolean is_cancelled;
+
+    node_t* node;
+	/* to identify if the path is dir */
+	gboolean is_dir;
+    guint mon_dir_num;
+
+	/* List of subscriptions monitoring this fdata/path */
+	GList *subs;
+
+    /* prcessed changed events num */
+    guint changed_event_num;
+    
+    /* process events source id */
+    GQueue* eventq;
+    guint eventq_id;
+    guint change_update_id;
+} fdata;
+
+/* fdata functions */
+fdata* fdata_new (node_t* node, gboolean is_mondir);
+void fdata_reset (fdata* data);
+void fdata_emit_events_once (fdata *f, int event, gpointer sub);
+void fdata_emit_events (fdata *f, int event);
+void fdata_add_event (fdata *f, fnode_event_t *ev);
+void fdata_adjust_deleted (fdata *f);
+fdata* get_parent_data (fdata* data);
+node_t* get_parent_node (fdata* data);
+gboolean is_monitoring (fdata* data);
+
+/* sub */
+void fdata_sub_add (fdata *f, gpointer sub);
+void fdata_sub_remove (fdata *f, gpointer sub);
+
+/* misc */
+node_t* add_missing_cb (node_t* parent, gpointer user_data);
+gboolean pre_del_cb (node_t* node, gpointer user_data);
+
+/* init */
+gboolean fdata_class_init (void (*user_emit_cb) (fdata*, int),
+  void (*user_emit_once_cb) (fdata*, int,  gpointer),
+  int (*user_event_converter) (int event));
+
+#endif /* _FEN_DATA_H_ */
diff --git a/gio/fen/fen-dump.c b/gio/fen/fen-dump.c
new file mode 100644
index 0000000..6448dc8
--- /dev/null
+++ b/gio/fen/fen-dump.c
@@ -0,0 +1,100 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include <glib.h>
+#include <glib/gprintf.h>
+#include "fen-node.h"
+#include "fen-data.h"
+#include "fen-kernel.h"
+#include "fen-missing.h"
+#include "fen-dump.h"
+
+G_LOCK_EXTERN (fen_lock);
+
+/*-------------------- node ------------------*/
+static void
+dump_node (node_t* node, gpointer data)
+{
+    if (data && node->user_data) {
+        return;
+    }
+    g_printf ("[%s] < 0x%p : 0x%p > %s\n", __func__, node, node->user_data, NODE_NAME(node));
+}
+
+static gboolean
+dump_node_tree (node_t* node, gpointer user_data)
+{
+    node_op_t op = {dump_node, NULL, NULL, user_data};
+    GList* children;
+    GList* i;
+    if (G_TRYLOCK (fen_lock)) {
+        if (node) {
+            travel_nodes (node, &op);
+        }
+        G_UNLOCK (fen_lock);
+    }
+    return TRUE;
+}
+
+/* ------------------ fdata port hash --------------------*/
+void
+dump_hash_cb (gpointer key,
+  gpointer value,
+  gpointer user_data)
+{
+    g_printf ("[%s] < 0x%p : 0x%p >\n", __func__, key, value);
+}
+
+gboolean
+dump_hash (GHashTable* hash, gpointer user_data)
+{
+    if (G_TRYLOCK (fen_lock)) {
+        if (g_hash_table_size (hash) > 0) {
+            g_hash_table_foreach (hash, dump_hash_cb, user_data);
+        }
+        G_UNLOCK (fen_lock);
+    }
+    return TRUE;
+}
+
+/* ------------------ event --------------------*/
+void
+dump_event (fnode_event_t* ev, gpointer user_data)
+{
+    fdata* data = ev->user_data;
+    g_printf ("[%s] < 0x%p : 0x%p > [ %10s ] %s\n", __func__, ev, ev->user_data, _event_string (ev->e), FN_NAME(data));
+}
+
+void
+dump_event_queue (fdata* data, gpointer user_data)
+{
+    if (G_TRYLOCK (fen_lock)) {
+        if (data->eventq) {
+            g_queue_foreach (data->eventq, (GFunc)dump_event, user_data);
+        }
+        G_UNLOCK (fen_lock);
+    }
+}
+
diff --git a/gio/fen/fen-dump.h b/gio/fen/fen-dump.h
new file mode 100644
index 0000000..0e866fa
--- /dev/null
+++ b/gio/fen/fen-dump.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#ifndef _FEN_DUMP_H_
+#define _FEN_DUMP_H_
+
+
+#endif /* _FEN_DUMP_H_ */
diff --git a/gio/fen/fen-helper.c b/gio/fen/fen-helper.c
new file mode 100644
index 0000000..1b2fc21
--- /dev/null
+++ b/gio/fen/fen-helper.c
@@ -0,0 +1,336 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include <glib.h>
+#include "fen-data.h"
+#include "fen-helper.h"
+#include "fen-kernel.h"
+#ifdef GIO_COMPILATION
+#include "gfilemonitor.h"
+#else
+#include "gam_event.h"
+#include "gam_server.h"
+#include "gam_protocol.h"
+#endif
+
+#ifdef GIO_COMPILATION
+#define FH_W if (fh_debug_enabled) g_warning
+static gboolean fh_debug_enabled = FALSE;
+#else
+#include "gam_error.h"
+#define FH_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
+#endif
+
+G_LOCK_EXTERN (fen_lock);
+
+static void default_emit_event_cb (fdata *f, int events);
+static void default_emit_once_event_cb (fdata *f, int events, gpointer sub);
+static int default_event_converter (int event);
+
+static void
+scan_children_init (node_t *f, gpointer sub)
+{
+	GDir *dir;
+	GError *err = NULL;
+    node_op_t op = {NULL, NULL, pre_del_cb, NULL};
+    fdata* pdata;
+    
+    FH_W ("%s %s [0x%p]\n", __func__, NODE_NAME(f), f);
+    pdata = node_get_data (f);
+
+    dir = g_dir_open (NODE_NAME(f), 0, &err);
+    if (dir) {
+        const char *basename;
+        
+        while ((basename = g_dir_read_name (dir)))
+        {
+            node_t *childf = NULL;
+            fdata* data;
+            GList *idx;
+
+            childf = children_find (f, basename);
+            if (childf == NULL) {
+                gchar *filename;
+            
+                filename = g_build_filename (NODE_NAME(f), basename, NULL);
+                childf = add_node (f, filename);
+                g_assert (childf);
+                g_free (filename);
+            }
+            if ((data = node_get_data (childf)) == NULL) {
+                data = fdata_new (childf, FALSE);
+            }
+            
+            if (is_monitoring (data)) {
+                /* Ignored */
+            } else if (/* !is_ported (data) && */
+                port_add (&data->fobj, &data->len, data)) {
+                /* Emit created to all other subs */
+                fdata_emit_events (data, FN_EVENT_CREATED);
+            }
+            /* Emit created to the new sub */
+#ifdef GIO_COMPILATION
+            /* fdata_emit_events_once (data, FN_EVENT_CREATED, sub); */
+#else
+            gam_server_emit_one_event (NODE_NAME(childf),
+              gam_subscription_is_dir (sub), GAMIN_EVENT_EXISTS, sub, 1);
+#endif
+        }
+        g_dir_close (dir);
+    } else {
+        FH_W (err->message);
+        g_error_free (err);
+    }
+}
+
+/**
+ * fen_add
+ * 
+ * Won't hold a ref, we have a timout callback to clean unused fdata.
+ * If there is no value for a key, add it and return it; else return the old
+ * one.
+ */
+void
+fen_add (const gchar *filename, gpointer sub, gboolean is_mondir)
+{
+    node_op_t op = {NULL, add_missing_cb, pre_del_cb, (gpointer)filename};
+	node_t* f;
+    fdata* data;
+    
+    g_assert (filename);
+    g_assert (sub);
+
+    G_LOCK (fen_lock);
+	f = find_node_full (filename, &op);
+    FH_W ("[ %s ] f[0x%p] sub[0x%p] %s\n", __func__, f, sub, filename);
+    g_assert (f);
+    data = node_get_data (f);
+    if (data == NULL) {
+        data = fdata_new (f, is_mondir);
+    }
+
+    if (is_mondir) {
+        data->mon_dir_num ++;
+    }
+    
+    /* Change to active */
+#ifdef GIO_COMPILATION
+    if (port_add (&data->fobj, &data->len, data) ||
+      g_file_test (FN_NAME(data), G_FILE_TEST_EXISTS)) {
+        if (is_mondir) {
+            scan_children_init (f, sub);
+        }
+        fdata_sub_add (data, sub);
+    } else {
+        fdata_sub_add (data, sub);
+        fdata_adjust_deleted (data);
+    }
+#else
+    if (port_add (&data->fobj, &data->len, data) ||
+      g_file_test (FN_NAME(data), G_FILE_TEST_EXISTS)) {
+        gam_server_emit_one_event (FN_NAME(data),
+          gam_subscription_is_dir (sub), GAMIN_EVENT_EXISTS, sub, 1);
+        if (is_mondir) {
+            scan_children_init (f, sub);
+        }
+        gam_server_emit_one_event (FN_NAME(data),
+          gam_subscription_is_dir (sub), GAMIN_EVENT_ENDEXISTS, sub, 1);
+        fdata_sub_add (data, sub);
+    } else {
+        fdata_sub_add (data, sub);
+        gam_server_emit_one_event (FN_NAME(data),
+          gam_subscription_is_dir (sub), GAMIN_EVENT_DELETED, sub, 1);
+        fdata_adjust_deleted (data);
+        gam_server_emit_one_event (FN_NAME(data),
+          gam_subscription_is_dir (sub), GAMIN_EVENT_ENDEXISTS, sub, 1);
+    }
+#endif
+    G_UNLOCK (fen_lock);
+}
+
+void
+fen_remove (const gchar *filename, gpointer sub, gboolean is_mondir)
+{
+    node_op_t op = {NULL, add_missing_cb, pre_del_cb, (gpointer)filename};
+    node_t* f;
+    fdata* data;
+    
+    g_assert (filename);
+    g_assert (sub);
+
+    G_LOCK (fen_lock);
+	f = find_node (filename);
+    FH_W ("[ %s ] f[0x%p] sub[0x%p] %s\n", __func__, f, sub, filename);
+
+    g_assert (f);
+    data = node_get_data (f);
+    g_assert (data);
+    
+    if (is_mondir) {
+        data->mon_dir_num --;
+    }
+    fdata_sub_remove (data, sub);
+    if (FN_IS_PASSIVE(data)) {
+#ifdef GIO_COMPILATION
+        pending_remove_node (f, &op);
+#else
+        remove_node (f, &op);
+#endif
+    }
+    G_UNLOCK (fen_lock);
+}
+
+static gboolean
+fen_init_once_func (gpointer data)
+{
+    FH_W ("%s\n", __func__);
+    if (!node_class_init ()) {
+        FH_W ("node_class_init failed.");
+        return FALSE;
+    }
+    if (!fdata_class_init (default_emit_event_cb,
+          default_emit_once_event_cb,
+          default_event_converter)) {
+        FH_W ("fdata_class_init failed.");
+        return FALSE;
+    }
+    return TRUE;
+}
+
+gboolean
+fen_init ()
+{
+#ifdef GIO_COMPILATION
+    static GOnce fen_init_once = G_ONCE_INIT;
+    g_once (&fen_init_once, (GThreadFunc)fen_init_once_func, NULL);
+    return (gboolean)fen_init_once.retval;
+#else
+    return fen_init_once_func (NULL);
+#endif
+}
+
+static void
+default_emit_once_event_cb (fdata *f, int events, gpointer sub)
+{
+#ifdef GIO_COMPILATION
+    GFile* child;
+    fen_sub* _sub = (fen_sub*)sub;
+    child = g_file_new_for_path (FN_NAME(f));
+    g_file_monitor_emit_event (G_FILE_MONITOR (_sub->user_data),
+      child, NULL, events);
+    g_object_unref (child);
+#else
+    gam_server_emit_one_event (FN_NAME(f),
+      gam_subscription_is_dir (sub), events, sub, 1);
+#endif
+}
+
+static void
+default_emit_event_cb (fdata *f, int events)
+{
+    GList* i;
+    fdata* pdata;
+    
+#ifdef GIO_COMPILATION
+    GFile* child;
+    child = g_file_new_for_path (FN_NAME(f));
+    for (i = f->subs; i; i = i->next) {
+        fen_sub* sub = (fen_sub*)i->data;
+        gboolean file_is_dir = sub->is_mondir;
+        if ((events != G_FILE_MONITOR_EVENT_CHANGED &&
+              events != G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED) ||
+          !file_is_dir) {
+            g_file_monitor_emit_event (G_FILE_MONITOR (sub->user_data),
+              child, NULL, events);
+        }
+    }
+    if ((pdata = get_parent_data (f)) != NULL) {
+        for (i = pdata->subs; i; i = i->next) {
+            fen_sub* sub = (fen_sub*)i->data;
+            gboolean file_is_dir = sub->is_mondir;
+            g_file_monitor_emit_event (G_FILE_MONITOR (sub->user_data),
+              child, NULL, events);
+        }
+    }
+    g_object_unref (child);
+#else
+    for (i = f->subs; i; i = i->next) {
+        gboolean file_is_dir = gam_subscription_is_dir (i->data);
+        if (events != GAMIN_EVENT_CHANGED || !file_is_dir) {
+            gam_server_emit_one_event (FN_NAME(f), file_is_dir, events, i->data, 1);
+        }
+    }
+    if ((pdata = get_parent_data (f)) != NULL) {
+        for (i = pdata->subs; i; i = i->next) {
+            gboolean file_is_dir = gam_subscription_is_dir (i->data);
+            gam_server_emit_one_event (FN_NAME(f), file_is_dir, events, i->data, 1);
+        }
+    }
+#endif
+}
+
+static int
+default_event_converter (int event)
+{
+#ifdef GIO_COMPILATION
+    switch (event) {
+    case FN_EVENT_CREATED:
+        return G_FILE_MONITOR_EVENT_CREATED;
+    case FILE_DELETE:
+    case FILE_RENAME_FROM:
+        return G_FILE_MONITOR_EVENT_DELETED;
+    case UNMOUNTED:
+        return G_FILE_MONITOR_EVENT_UNMOUNTED;
+    case FILE_ATTRIB:
+        return G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED;
+    case MOUNTEDOVER:
+    case FILE_MODIFIED:
+    case FILE_RENAME_TO:
+        return G_FILE_MONITOR_EVENT_CHANGED;
+    default:
+        /* case FILE_ACCESS: */
+        g_assert_not_reached ();
+        return -1;
+    }
+#else
+    switch (event) {
+    case FN_EVENT_CREATED:
+        return GAMIN_EVENT_CREATED;
+    case FILE_DELETE:
+    case FILE_RENAME_FROM:
+        return GAMIN_EVENT_DELETED;
+    case FILE_ATTRIB:
+    case MOUNTEDOVER:
+    case UNMOUNTED:
+    case FILE_MODIFIED:
+    case FILE_RENAME_TO:
+        return GAMIN_EVENT_CHANGED;
+    default:
+        /* case FILE_ACCESS: */
+        g_assert_not_reached ();
+        return -1;
+    }
+#endif
+}
diff --git a/gio/fen/fen-helper.h b/gio/fen/fen-helper.h
new file mode 100644
index 0000000..0138534
--- /dev/null
+++ b/gio/fen/fen-helper.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "fen-sub.h"
+
+#ifndef _FEN_HELPER_H_
+#define _FEN_HELPER_H_
+
+void fen_add (const gchar *filename, gpointer sub, gboolean is_mondir);
+void fen_remove (const gchar *filename, gpointer sub, gboolean is_mondir);
+
+/* FEN subsystem initializing */
+gboolean fen_init ();
+
+#endif /* _FEN_HELPER_H_ */
diff --git a/gio/fen/fen-kernel.c b/gio/fen/fen-kernel.c
new file mode 100644
index 0000000..1bf9505
--- /dev/null
+++ b/gio/fen/fen-kernel.c
@@ -0,0 +1,534 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include <rctl.h>
+#include <strings.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glib.h>
+#include "fen-kernel.h"
+#include "fen-dump.h"
+
+#ifdef GIO_COMPILATION
+#define FK_W if (fk_debug_enabled) g_warning
+static gboolean fk_debug_enabled = FALSE;
+#else
+#include "gam_error.h"
+#define FK_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
+#endif
+
+G_GNUC_INTERNAL G_LOCK_DEFINE (fen_lock);
+#define PE_ALLOC	64
+#define F_PORT(pfo)		(((_f *)(pfo))->port->port)
+#define F_NAME(pfo)		(((_f *)(pfo))->fobj->fo_name)
+#define FEN_ALL_EVENTS	(FILE_MODIFIED | FILE_ATTRIB | FILE_NOFOLLOW)
+#define FEN_IGNORE_EVENTS	(FILE_ACCESS)
+#define PROCESS_PORT_EVENTS_TIME	400	/* in milliseconds */
+
+static GHashTable *_obj_fen_hash = NULL;	/* <user_data, port> */
+static ulong max_port_events = 512;
+static GList *pn_vq;	/* the queue of ports which don't have the max objs */
+static GList *pn_fq;	/* the queue of ports which have the max objs */
+static GQueue *g_eventq = NULL;
+static void (*add_event_cb) (gpointer, fnode_event_t*);
+
+typedef struct pnode
+{
+	long ref;	/* how many fds are associated to this port */
+	int port;
+    guint port_source_id;
+} pnode_t;
+
+typedef struct {
+    pnode_t*	port;
+    file_obj_t*	fobj;
+
+    gboolean	is_active;
+    gpointer	user_data;
+} _f;
+
+static gboolean port_fetch_event_cb (void *arg);
+static pnode_t *pnode_new ();
+static void pnode_delete (pnode_t *pn);
+
+gboolean
+is_ported (gpointer f)
+{
+    _f* fo = g_hash_table_lookup (_obj_fen_hash, f);
+    
+    if (fo) {
+        return fo->is_active;
+    }
+    return FALSE;
+}
+
+static gchar*
+printevent (const char *pname, int event, const char *tag)
+{
+    static gchar	*event_string = NULL;
+    GString			*str;
+
+    if (event_string) {
+        g_free(event_string);
+    }
+
+    str = g_string_new ("");
+    g_string_printf (str, "[%s] [%-20s]", tag, pname);
+    if (event & FILE_ACCESS) {
+        str = g_string_append (str, " ACCESS");
+    }
+    if (event & FILE_MODIFIED) {
+        str = g_string_append (str, " MODIFIED");
+    }
+    if (event & FILE_ATTRIB) {
+        str = g_string_append (str, " ATTRIB");
+    }
+    if (event & FILE_DELETE) {
+        str = g_string_append (str, " DELETE");
+    }
+    if (event & FILE_RENAME_TO) {
+        str = g_string_append (str, " RENAME_TO");
+    }
+    if (event & FILE_RENAME_FROM) {
+        str = g_string_append (str, " RENAME_FROM");
+    }
+    if (event & UNMOUNTED) {
+        str = g_string_append (str, " UNMOUNTED");
+    }
+    if (event & MOUNTEDOVER) {
+        str = g_string_append (str, " MOUNTEDOVER");
+    }
+    event_string = str->str;
+    g_string_free (str, FALSE);
+    return event_string;
+}
+
+static void
+port_add_kevent (int e, gpointer f)
+{
+    fnode_event_t *ev, *tail;
+    GTimeVal t;
+    gboolean has_twin = FALSE;
+    
+    /*
+     * Child FILE_DELETE | FILE_RENAME_FROM will trigger parent FILE_MODIFIED.
+     * FILE_MODIFIED will trigger FILE_ATTRIB.
+     */
+
+    if ((e & FILE_ATTRIB) && e != FILE_ATTRIB) {
+        e ^= FILE_ATTRIB;
+        has_twin = TRUE;
+    }
+    if (e == FILE_RENAME_FROM) {
+        e = FILE_DELETE;
+    }
+    if (e == FILE_RENAME_TO) {
+        e = FILE_MODIFIED;
+    }
+    
+    switch (e) {
+    case FILE_DELETE:
+    case FILE_RENAME_FROM:
+    case FILE_MODIFIED:
+    case FILE_ATTRIB:
+    case UNMOUNTED:
+    case MOUNTEDOVER:
+        break;
+    case FILE_RENAME_TO:
+    case FILE_ACCESS:
+    default:
+        g_assert_not_reached ();
+        return;
+    }
+
+    tail = (fnode_event_t*) g_queue_peek_tail (g_eventq);
+    if (tail) {
+        if (tail->user_data == f) {
+            if (tail->e == e) {
+                tail->has_twin = (has_twin | (tail->has_twin ^ has_twin));
+                /* skip the current */
+                return;
+            } else if (e == FILE_MODIFIED && !has_twin
+              && tail->e == FILE_ATTRIB) {
+                tail->e = FILE_MODIFIED;
+                tail->has_twin = TRUE;
+                return;
+            } else if (e == FILE_ATTRIB
+              && tail->e == FILE_MODIFIED && !tail->has_twin) {
+                tail->has_twin = TRUE;
+                return;
+            }
+        }
+    }
+    
+    if ((ev = fnode_event_new (e, has_twin, f)) != NULL) {
+        g_queue_push_tail (g_eventq, ev);
+    }
+}
+
+static void
+port_process_kevents ()
+{
+    fnode_event_t *ev;
+    
+    while ((ev = (fnode_event_t*)g_queue_pop_head (g_eventq)) != NULL) {
+        FK_W ("[%s] 0x%p %s\n", __func__, ev, _event_string (ev->e));
+        add_event_cb (ev->user_data, ev);
+    }
+}
+
+static gboolean
+port_fetch_event_cb (void *arg)
+{
+	pnode_t *pn = (pnode_t *)arg;
+    _f* fo;
+	uint_t nget = 0;
+	port_event_t pe[PE_ALLOC];
+    timespec_t timeout;
+    gpointer f;
+    gboolean ret = TRUE;
+    
+    /* FK_W ("IN <======== %s\n", __func__); */
+    G_LOCK (fen_lock);
+    
+    memset (&timeout, 0, sizeof (timespec_t));
+    do {
+        nget = 1;
+        if (port_getn (pn->port, pe, PE_ALLOC, &nget, &timeout) == 0) {
+            int i;
+            for (i = 0; i < nget; i++) {
+                fo = (_f*)pe[i].portev_user;
+                /* handle event */
+                switch (pe[i].portev_source) {
+                case PORT_SOURCE_FILE:
+                    /* If got FILE_EXCEPTION or add to port failed,
+                       delete the pnode */
+                    fo->is_active = FALSE;
+                    if (fo->user_data) {
+                        FK_W("%s\n",
+                          printevent(F_NAME(fo), pe[i].portev_events, "RAW"));
+                        port_add_kevent (pe[i].portev_events, fo->user_data);
+                    } else {
+                        /* fnode is deleted */
+                        goto L_delete;
+                    }
+                    if (pe[i].portev_events & FILE_EXCEPTION) {
+                        g_hash_table_remove (_obj_fen_hash, fo->user_data);
+                    L_delete:
+                        FK_W ("[ FREE_FO ] [0x%p]\n", fo);
+                        pnode_delete (fo->port);
+                        g_free (fo);
+                    }
+                    break;
+                default:
+                    /* case PORT_SOURCE_TIMER: */
+                    FK_W ("[kernel] unknown portev_source %d\n", pe[i].portev_source);
+                }
+            }
+        } else {
+            FK_W ("[kernel] port_getn %s\n", g_strerror (errno));
+            nget = 0;
+        }
+    } while (nget == PE_ALLOC);
+
+	/* Processing g_eventq */
+    port_process_kevents ();
+    
+    if (pn->ref == 0) {
+        pn->port_source_id = 0;
+        ret = FALSE;
+    }
+    G_UNLOCK (fen_lock);
+    /* FK_W ("OUT ========> %s\n", __func__); */
+	return ret;
+}
+
+/*
+ * ref - 1 if remove a watching file succeeded.
+ */
+static void
+pnode_delete (pnode_t *pn)
+{
+    g_assert (pn->ref <= max_port_events);
+    
+	if (pn->ref == max_port_events) {
+        FK_W ("PORT : move to visible queue - [pn] 0x%p [ref] %d\n", pn, pn->ref);
+		pn_fq = g_list_remove (pn_fq, pn);
+		pn_vq = g_list_prepend (pn_vq, pn);
+	}
+	if ((-- pn->ref) == 0) {
+        /* Should dispatch the source */
+	}
+	FK_W ("%s [pn] 0x%p [ref] %d\n", __func__, pn, pn->ref);
+}
+
+/*
+ * malloc pnode_t and port_create, start thread at pnode_ref.
+ * if pnode_new succeeded, the pnode_t will never
+ * be freed. So pnode_t can be freed only in pnode_new.
+ * Note pnode_monitor_remove_all can also free pnode_t, but currently no one
+ * invork it.
+ */
+static pnode_t *
+pnode_new ()
+{
+	pnode_t *pn = NULL;
+
+	if (pn_vq) {
+		pn = (pnode_t*)pn_vq->data;
+        g_assert (pn->ref < max_port_events);
+	} else {
+		pn = g_new0 (pnode_t, 1);
+		if (pn != NULL) {
+            if ((pn->port = port_create ()) >= 0) {
+                g_assert (g_list_find (pn_vq, pn) == NULL);
+                pn_vq = g_list_prepend (pn_vq, pn);
+            } else {
+                FK_W ("PORT_CREATE %s\n", g_strerror (errno));
+                g_free (pn);
+                pn = NULL;
+			}
+		}
+	}
+	if (pn) {
+		FK_W ("%s [pn] 0x%p [ref] %d\n", __func__, pn, pn->ref);
+        pn->ref++;
+        if (pn->ref == max_port_events) {
+            FK_W ("PORT : move to full queue - [pn] 0x%p [ref] %d\n", pn, pn->ref);
+            pn_vq = g_list_remove (pn_vq, pn);
+            pn_fq = g_list_prepend (pn_fq, pn);
+            g_assert (g_list_find (pn_vq, pn) == NULL);
+        }
+        /* attach the source */
+        if (pn->port_source_id == 0) {
+            pn->port_source_id = g_timeout_add (PROCESS_PORT_EVENTS_TIME,
+              port_fetch_event_cb,
+              (void *)pn);
+            g_assert (pn->port_source_id > 0);
+        }
+	}
+
+	return pn;
+}
+
+/**
+ * port_add_internal
+ *
+ * < private >
+ * Unsafe, need lock fen_lock.
+ */
+static gboolean
+port_add_internal (file_obj_t* fobj, off_t* len,
+  gpointer f, gboolean need_stat)
+{
+    int ret;
+    struct stat buf;
+    _f* fo = NULL;
+
+    g_assert (f && fobj);
+    FK_W ("%s [0x%p] %s\n", __func__, f, fobj->fo_name);
+
+    if ((fo = g_hash_table_lookup (_obj_fen_hash, f)) == NULL) {
+        fo = g_new0 (_f, 1);
+        fo->fobj = fobj;
+        fo->user_data = f;
+        g_assert (fo);
+        FK_W ("[ NEW_FO ] [0x%p] %s\n", fo, F_NAME(fo));
+        g_hash_table_insert (_obj_fen_hash, f, fo);
+    }
+
+    if (fo->is_active) {
+        return TRUE;
+    }
+
+    if (fo->port == NULL) {
+        fo->port = pnode_new ();
+    }
+    
+    if (need_stat) {
+        if (FN_STAT (F_NAME(fo), &buf) != 0) {
+            FK_W ("LSTAT [%-20s] %s\n", F_NAME(fo), g_strerror (errno));
+            goto L_exit;
+        }
+        g_assert (len);
+        fo->fobj->fo_atime = buf.st_atim;
+        fo->fobj->fo_mtime = buf.st_mtim;
+        fo->fobj->fo_ctime = buf.st_ctim;
+        *len = buf.st_size;
+    }
+    
+    if (port_associate (F_PORT(fo),
+          PORT_SOURCE_FILE,
+          (uintptr_t)fo->fobj,
+          FEN_ALL_EVENTS,
+          (void *)fo) == 0) {
+        fo->is_active = TRUE;
+        FK_W ("%s %s\n", "PORT_ASSOCIATE", F_NAME(fo));
+        return TRUE;
+    } else {
+        FK_W ("PORT_ASSOCIATE [%-20s] %s\n", F_NAME(fo), g_strerror (errno));
+    L_exit:
+        FK_W ("[ FREE_FO ] [0x%p]\n", fo);
+        g_hash_table_remove (_obj_fen_hash, f);
+        pnode_delete (fo->port);
+        g_free (fo);
+    }
+    return FALSE;
+}
+
+gboolean
+port_add (file_obj_t* fobj, off_t* len, gpointer f)
+{
+    return port_add_internal (fobj, len, f, TRUE);
+}
+
+gboolean
+port_add_simple (file_obj_t* fobj, gpointer f)
+{
+    return port_add_internal (fobj, NULL, f, FALSE);
+}
+
+/**
+ * port_remove
+ *
+ * < private >
+ * Unsafe, need lock fen_lock.
+ */
+void
+port_remove (gpointer f)
+{
+    _f* fo = NULL;
+
+    FK_W ("%s\n", __func__);
+    if ((fo = g_hash_table_lookup (_obj_fen_hash, f)) != NULL) {
+        /* Marked */
+        fo->user_data = NULL;
+        g_hash_table_remove (_obj_fen_hash, f);
+        
+        if (port_dissociate (F_PORT(fo),
+              PORT_SOURCE_FILE,
+              (uintptr_t)fo->fobj) == 0) {
+            /*
+             * Note, we can run foode_delete if dissociating is failed,
+             * because there may be some pending events (mostly like
+             * FILE_DELETE) in the port_get. If we delete the foode
+             * the fnode may be deleted, then port_get will run on an invalid
+             * address.
+             */
+            FK_W ("[ FREE_FO ] [0x%p]\n", fo);
+            pnode_delete (fo->port);
+            g_free (fo);
+        } else {
+            FK_W ("PORT_DISSOCIATE [%-20s] %s\n", F_NAME(fo), g_strerror (errno));
+        }
+    }
+}
+
+const gchar *
+_event_string (int event)
+{
+    switch (event) {
+    case FILE_DELETE:
+        return "FILE_DELETE";
+    case FILE_RENAME_FROM:
+        return "FILE_RENAME_FROM";
+    case FILE_MODIFIED:
+        return "FILE_MODIFIED";
+    case FILE_RENAME_TO:
+        return "FILE_RENAME_TO";
+    case MOUNTEDOVER:
+        return "MOUNTEDOVER";
+    case FILE_ATTRIB:
+        return "FILE_ATTRIB";
+    case UNMOUNTED:
+        return "UNMOUNTED";
+    case FILE_ACCESS:
+        return "FILE_ACCESS";
+    default:
+        return "EVENT_UNKNOWN";
+    }
+}
+
+/**
+ * Get Solaris resouce values.
+ *
+ */
+
+extern gboolean
+port_class_init (void (*user_add_event) (gpointer, fnode_event_t*))
+{
+	rctlblk_t *rblk;
+    FK_W ("%s\n", __func__);
+	if ((rblk = malloc (rctlblk_size ())) == NULL) {
+        FK_W ("[kernel] rblk malloc %s\n", g_strerror (errno));
+		return FALSE;
+	}
+	if (getrctl ("process.max-port-events", NULL, rblk, RCTL_FIRST) == -1) {
+        FK_W ("[kernel] getrctl %s\n", g_strerror (errno));
+        free (rblk);
+        return FALSE;
+	} else {
+        max_port_events = rctlblk_get_value(rblk);
+		FK_W ("[kernel] max_port_events = %u\n", max_port_events);
+        free (rblk);
+	}
+    if ((_obj_fen_hash = g_hash_table_new(g_direct_hash,
+           g_direct_equal)) == NULL) {
+        FK_W ("[kernel] fobj hash initializing faild\n");
+        return FALSE;
+    }
+    if ((g_eventq = g_queue_new ()) == NULL) {
+		FK_W ("[kernel] FEN global event queue initializing faild\n");
+    }
+    if (user_add_event == NULL) {
+        return FALSE;
+    }
+    add_event_cb = user_add_event;
+	return TRUE;
+}
+
+fnode_event_t*
+fnode_event_new (int event, gboolean has_twin, gpointer user_data)
+{
+    fnode_event_t *ev;
+    
+    if ((ev = g_new (fnode_event_t, 1)) != NULL) {
+        g_assert (ev);
+        ev->e = event;
+        ev->user_data = user_data;
+        ev->has_twin = has_twin;
+        /* Default isn't a pending event. */
+        ev->is_pending = FALSE;
+    }
+    return ev;
+}
+
+void
+fnode_event_delete (fnode_event_t* ev)
+{
+    g_free (ev);
+}
diff --git a/gio/fen/fen-kernel.h b/gio/fen/fen-kernel.h
new file mode 100644
index 0000000..269298b
--- /dev/null
+++ b/gio/fen/fen-kernel.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include <port.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifndef _FEN_KERNEL_H_
+#define _FEN_KERNEL_H_
+
+#define FN_STAT	lstat
+
+typedef struct fnode_event
+{
+    int e;
+    gboolean has_twin;
+    gboolean is_pending;
+    gpointer user_data;
+    GTimeVal t;
+} fnode_event_t;
+
+gboolean port_add (file_obj_t* fobj, off_t* len, gpointer f);
+gboolean port_add_simple (file_obj_t* fobj, gpointer f);
+void port_remove (gpointer f);
+gboolean is_ported (gpointer f);
+
+fnode_event_t* fnode_event_new (int event, gboolean has_twin, gpointer user_data);
+void fnode_event_delete (fnode_event_t* ev);
+const gchar * _event_string (int event);
+
+extern gboolean port_class_init ();
+
+#endif /* _FEN_KERNEL_H_ */
diff --git a/gio/fen/fen-missing.c b/gio/fen/fen-missing.c
new file mode 100644
index 0000000..d422940
--- /dev/null
+++ b/gio/fen/fen-missing.c
@@ -0,0 +1,121 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include <glib.h>
+#include "fen-data.h"
+#include "fen-missing.h"
+
+G_LOCK_EXTERN (fen_lock);
+#define SCAN_MISSING_INTERVAL 4000	/* in milliseconds */
+
+#ifdef GIO_COMPILATION
+#define FM_W if (fm_debug_enabled) g_warning
+gboolean fm_debug_enabled = FALSE;
+#else
+#include "gam_error.h"
+#define FM_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
+#endif
+
+/* global data structure for scan missing files */
+static GList *missing_list = NULL;
+static guint scan_missing_source_id = 0;
+
+static gboolean scan_missing_list (gpointer data);
+
+static gboolean
+scan_missing_list (gpointer data)
+{
+    GList *existing_list = NULL;
+    GList *idx = NULL;
+    fdata *f;
+    gboolean ret = TRUE;
+
+    G_LOCK (fen_lock);
+    
+    for (idx = missing_list; idx; idx = idx->next) {
+        f = (fdata*)idx->data;
+        
+        if (port_add (&f->fobj, &f->len, f)) {
+            /* TODO - emit CREATE event */
+            fdata_emit_events (f, FN_EVENT_CREATED);
+            existing_list = g_list_prepend (existing_list, idx);
+        }
+    }
+    
+    for (idx = existing_list; idx; idx = idx->next) {
+        missing_list = g_list_remove_link (missing_list, (GList *)idx->data);
+        g_list_free_1 ((GList *)idx->data);
+    }
+    g_list_free (existing_list);
+
+    if (missing_list == NULL) {
+        scan_missing_source_id = 0;
+        ret = FALSE;
+    }
+
+    G_UNLOCK (fen_lock);
+    return ret;
+}
+
+/**
+ * missing_add
+ *
+ * Unsafe, need lock fen_lock.
+ */
+void
+missing_add (fdata *f)
+{
+    GList *idx;
+    
+    g_assert (!is_ported (f));
+
+    if (g_list_find (missing_list, f) != NULL) {
+        FM_W ("%s is ALREADY added %s\n", __func__, FN_NAME(f));
+        return;
+    }
+    FM_W ("%s is added %s\n", __func__, FN_NAME(f));
+    
+    missing_list = g_list_prepend (missing_list, f);
+    
+    /* if doesn't scan, then start */
+    if (scan_missing_source_id == 0) {
+        scan_missing_source_id = g_timeout_add (SCAN_MISSING_INTERVAL,
+          scan_missing_list,
+          NULL);
+        g_assert (scan_missing_source_id > 0);
+    }
+}
+
+/**
+ * missing_remove
+ *
+ * Unsafe, need lock fen_lock.
+ */
+void
+missing_remove (fdata *f)
+{
+    FM_W ("%s %s\n", __func__, FN_NAME(f));
+    missing_list = g_list_remove (missing_list, f);
+}
diff --git a/gio/fen/fen-missing.h b/gio/fen/fen-missing.h
new file mode 100644
index 0000000..6597316
--- /dev/null
+++ b/gio/fen/fen-missing.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#ifndef __GAM_FEN_H__
+#define __GAM_FEN_H__
+
+#include "fen-data.h"
+
+G_BEGIN_DECLS
+
+extern void missing_add (fdata *f);
+extern void missing_remove (fdata *f);
+
+G_END_DECLS
+
+#endif /* __GAM_FEN_H__ */
+
diff --git a/gio/fen/fen-node.c b/gio/fen/fen-node.c
new file mode 100644
index 0000000..c1cc56b
--- /dev/null
+++ b/gio/fen/fen-node.c
@@ -0,0 +1,466 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include <errno.h>
+#include <strings.h>
+#include <glib.h>
+#include "fen-node.h"
+#include "fen-dump.h"
+
+#define	NODE_STAT(n)	(((node_t*)(n))->stat)
+
+struct _dnode {
+    gchar* filename;
+    node_op_t* op;
+    GTimeVal tv;
+};
+
+#ifdef GIO_COMPILATION
+#define FN_W if (fn_debug_enabled) g_warning
+static gboolean fn_debug_enabled = FALSE;
+#else
+#include "gam_error.h"
+#define FN_W(...) GAM_DEBUG(DEBUG_INFO, __VA_ARGS__)
+#endif
+
+G_LOCK_EXTERN (fen_lock);
+#define	PROCESS_DELETING_INTERVAL	900 /* in second */
+
+static node_t* _head = NULL;
+static GList *deleting_nodes = NULL;
+static guint deleting_nodes_id = 0;
+
+static node_t* node_new (node_t* parent, const gchar* basename);
+static void node_delete (node_t* parent);
+static gboolean remove_node_internal (node_t* node, node_op_t* op);
+static void children_add (node_t *p, node_t *f);
+static void children_remove (node_t *p, node_t *f);
+static guint children_foreach_remove (node_t *f, GHRFunc func, gpointer user_data);
+static void children_foreach (node_t *f, GHFunc func, gpointer user_data);
+static gboolean children_remove_cb (gpointer key,
+  gpointer value,
+  gpointer user_data);
+
+static struct _dnode*
+_dnode_new (const gchar* filename, node_op_t* op)
+{
+    struct _dnode* d;
+
+    g_assert (op);
+    if ((d = g_new (struct _dnode, 1)) != NULL) {
+        d->filename = g_strdup (filename);
+        d->op = g_memdup (op, sizeof (node_op_t));
+        g_assert (d->op);
+        g_get_current_time (&d->tv);
+        g_time_val_add (&d->tv, PROCESS_DELETING_INTERVAL);
+    }
+    return d;
+}
+
+static void
+_dnode_free (struct _dnode* d)
+{
+    g_assert (d);
+    g_free (d->filename);
+    g_free (d->op);
+    g_free (d);
+}
+
+static gboolean
+g_timeval_lt (GTimeVal *val1, GTimeVal *val2)
+{
+    if (val1->tv_sec < val2->tv_sec)
+        return TRUE;
+  
+    if (val1->tv_sec > val2->tv_sec)
+        return FALSE;
+  
+    /* val1->tv_sec == val2->tv_sec */
+    if (val1->tv_usec < val2->tv_usec)
+        return TRUE;
+  
+    return FALSE;
+}
+
+static gboolean
+scan_deleting_nodes (gpointer data)
+{
+    struct _dnode* d;
+    GTimeVal tv_now;
+    GList* i;
+    GList* deleted_list = NULL;
+    gboolean ret = TRUE;
+    node_t* node;
+
+    g_get_current_time (&tv_now);
+
+    if (G_TRYLOCK (fen_lock)) {
+        for (i = deleting_nodes; i; i = i->next) {
+            d = (struct _dnode*)i->data;
+            /* Time to free, try only once */
+            if (g_timeval_lt (&d->tv, &tv_now)) {
+                if ((node = find_node (d->filename)) != NULL) {
+                    remove_node_internal (node, d->op);
+                }
+                _dnode_free (d);
+                deleted_list = g_list_prepend (deleted_list, i);
+            }
+        }
+
+        for (i = deleted_list; i; i = i->next) {
+            deleting_nodes = g_list_remove_link (deleting_nodes,
+              (GList *)i->data);
+            g_list_free_1 ((GList *)i->data);
+        }
+        g_list_free (deleted_list);
+
+        if (deleting_nodes == NULL) {
+            deleting_nodes_id = 0;
+            ret = FALSE;
+        }
+        G_UNLOCK (fen_lock);
+    }
+    return ret;
+}
+
+gpointer
+node_get_data (node_t* node)
+{
+    g_assert (node);
+    return node->user_data;
+}
+
+gpointer
+node_set_data (node_t* node, gpointer user_data)
+{
+    gpointer data = node->user_data;
+    g_assert (node);
+    node->user_data = user_data;
+    return data;
+}
+
+void
+travel_nodes (node_t* node, node_op_t* op)
+{
+    GList* children;
+    GList* i;
+
+    if (node) {
+        if (op && op->hit) {
+            op->hit (node, op->user_data);
+        }
+    }
+    children = g_hash_table_get_values (node->children);
+    if (children) {
+        for (i = children; i; i = i->next) {
+            travel_nodes (i->data, op);
+        }
+        g_list_free (children);
+    }
+}
+
+static node_t*
+find_node_internal (node_t* node, const gchar* filename, node_op_t* op)
+{
+    gchar* str;
+    gchar* token;
+    gchar* lasts;
+    node_t* parent;
+    node_t* child;
+    
+    g_assert (filename && filename[0] == '/');
+    g_assert (node);
+    
+    parent = node;
+    str = g_strdup (filename + strlen (NODE_NAME(parent)));
+    
+    if ((token = strtok_r (str, G_DIR_SEPARATOR_S, &lasts)) != NULL) {
+        do {
+            FN_W ("%s %s + %s\n", __func__, NODE_NAME(parent), token);
+            child = children_find (parent, token);
+            if (child) {
+                parent = child;
+            } else {
+                if (op && op->add_missing) {
+                    child = op->add_missing (parent, op->user_data);
+                    goto L_hit;
+                }
+                break;
+            }
+        } while ((token = strtok_r (NULL, G_DIR_SEPARATOR_S, &lasts)) != NULL);
+    } else {
+        /* It's the head */
+        g_assert (parent == _head);
+        child = _head;
+    }
+    
+    if (token == NULL && child) {
+    L_hit:
+        if (op && op->hit) {
+            op->hit (child, op->user_data);
+        }
+    }
+    g_free (str);
+    return child;
+}
+
+node_t*
+find_node (const gchar *filename)
+{
+    return find_node_internal (_head, filename, NULL);
+}
+
+node_t*
+find_node_full (const gchar* filename, node_op_t* op)
+{
+    return find_node_internal (_head, filename, op);
+}
+
+node_t*
+add_node (node_t* parent, const gchar* filename)
+{
+    gchar* str;
+    gchar* token;
+    gchar* lasts;
+    node_t* child = NULL;
+
+    g_assert (_head);
+    g_assert (filename && filename[0] == '/');
+
+    if (parent == NULL) {
+        parent = _head;
+    }
+    
+    str = g_strdup (filename + strlen (NODE_NAME(parent)));
+    
+    if ((token = strtok_r (str, G_DIR_SEPARATOR_S, &lasts)) != NULL) {
+        do {
+            FN_W ("%s %s + %s\n", __func__, NODE_NAME(parent), token);
+            child = node_new (parent, token);
+            if (child) {
+                children_add (parent, child);
+                parent = child;
+            } else {
+                break;
+            }
+        } while ((token = strtok_r (NULL, G_DIR_SEPARATOR_S, &lasts)) != NULL);
+    }
+    g_free (str);
+    if (token == NULL) {
+        return child;
+    } else {
+        return NULL;
+    }
+}
+
+/**
+ * delete recursively
+ */
+static gboolean
+remove_children (node_t* node, node_op_t* op)
+{
+    FN_W ("%s 0x%p %s\n", __func__, node, NODE_NAME(node));
+    if (children_num (node) > 0) {
+        children_foreach_remove (node, children_remove_cb,
+          (gpointer)op);
+    }
+    if (children_num (node) == 0) {
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static gboolean
+remove_node_internal (node_t* node, node_op_t* op)
+{
+    node_t* parent = NULL;
+    /*
+     * If the parent is passive and doesn't have children, delete it.
+     * NOTE node_delete_deep is a depth first delete recursively.
+     * Top node is deleted in node_cancel_sub
+     */
+    g_assert (node);
+    g_assert (op && op->pre_del);
+    if (node != _head) {
+        if (remove_children (node, op)) {
+            if (node->user_data) {
+                if (!op->pre_del (node, op->user_data)) {
+                    return FALSE;
+                }
+            }
+            parent = node->parent;
+            children_remove (parent, node);
+            node_delete (node);
+            if (children_num (parent) == 0) {
+                remove_node_internal (parent, op);
+            }
+            return TRUE;
+        }
+        return FALSE;
+    }
+    return TRUE;
+}
+
+void
+pending_remove_node (node_t* node, node_op_t* op)
+{
+    struct _dnode* d;
+    GList* l;
+    
+    for (l = deleting_nodes; l; l=l->next) {
+        d = (struct _dnode*) l->data;
+        if (g_ascii_strcasecmp (d->filename, NODE_NAME(node)) == 0) {
+            return;
+        }
+    }
+    
+    d = _dnode_new (NODE_NAME(node), op);
+    g_assert (d);
+    deleting_nodes = g_list_prepend (deleting_nodes, d);
+    if (deleting_nodes_id == 0) {
+        deleting_nodes_id = g_timeout_add_seconds (PROCESS_DELETING_INTERVAL,
+          scan_deleting_nodes,
+          NULL);
+        g_assert (deleting_nodes_id > 0);
+    }
+}
+
+void
+remove_node (node_t* node, node_op_t* op)
+{
+    remove_node_internal (node, op);
+}
+
+static node_t*
+node_new (node_t* parent, const gchar* basename)
+{
+	node_t *f = NULL;
+
+    g_assert (basename && basename[0]);
+    if ((f = g_new0 (node_t, 1)) != NULL) {
+        if (parent) {
+            f->basename = g_strdup (basename);
+            f->filename = g_build_filename (G_DIR_SEPARATOR_S,
+              NODE_NAME(parent), basename, NULL);
+        } else {
+            f->basename = g_strdup (basename);
+            f->filename = g_strdup (basename);
+        }
+        f->children = g_hash_table_new_full (g_str_hash, g_str_equal,
+          NULL, (GDestroyNotify)node_delete);
+        FN_W ("[ %s ] 0x%p %s\n", __func__, f, NODE_NAME(f));
+    }
+	return f;
+}
+
+static void
+node_delete (node_t *f)
+{
+    FN_W ("[ %s ] 0x%p %s\n", __func__, f, NODE_NAME(f));
+    g_assert (g_hash_table_size (f->children) == 0);
+    g_assert (f->user_data == NULL);
+
+    g_hash_table_unref (f->children);
+    g_free (f->basename);
+    g_free (f->filename);
+    g_free (f);
+}
+
+static void
+children_add (node_t *p, node_t *f)
+{
+    FN_W ("%s [p] %8s [c] %8s\n", __func__, p->basename, f->basename);
+    g_hash_table_insert (p->children, f->basename, f);
+    f->parent = p;
+}
+
+static void
+children_remove (node_t *p, node_t *f)
+{
+    FN_W ("%s [p] %8s [c] %8s\n", __func__, p->basename, f->basename);
+    g_hash_table_steal (p->children, f->basename);
+    f->parent = NULL;
+}
+
+guint
+children_num (node_t *f)
+{
+    return g_hash_table_size (f->children);
+}
+
+node_t *
+children_find (node_t *f, const gchar *basename)
+{
+    return (node_t *) g_hash_table_lookup (f->children, (gpointer)basename);
+}
+
+/**
+ * depth first delete recursively
+ */
+static gboolean
+children_remove_cb (gpointer key,
+  gpointer value,
+  gpointer user_data)
+{
+    node_t* f = (node_t*)value;
+    node_op_t* op = (node_op_t*) user_data;
+    
+    g_assert (f->parent);
+
+    FN_W ("%s [p] %8s [c] %8s\n", __func__, f->parent->basename, f->basename);
+    if (remove_children (f, op)) {
+        if (f->user_data != NULL) {
+            return op->pre_del (f, op->user_data);
+        }
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static guint
+children_foreach_remove (node_t *f, GHRFunc func, gpointer user_data)
+{
+    g_assert (f);
+    
+    return g_hash_table_foreach_remove (f->children, func, user_data);
+}
+
+static void
+children_foreach (node_t *f, GHFunc func, gpointer user_data)
+{
+    g_assert (f);
+    
+    g_hash_table_foreach (f->children, func, user_data);
+}
+
+gboolean
+node_class_init ()
+{
+    FN_W ("%s\n", __func__);
+    if (_head == NULL) {
+        _head = node_new (NULL, G_DIR_SEPARATOR_S);
+    }
+    return _head != NULL;
+}
diff --git a/gio/fen/fen-node.h b/gio/fen/fen-node.h
new file mode 100644
index 0000000..613f0e5
--- /dev/null
+++ b/gio/fen/fen-node.h
@@ -0,0 +1,73 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#ifndef _FEN_NODE_H_
+#define _FEN_NODE_H_
+
+typedef struct node node_t;
+
+struct node
+{
+    gchar *filename;
+    gchar *basename;
+    gint stat;
+    
+	/* the parent and children of node */
+    node_t *parent;
+    GHashTable *children; /* children in basename */
+
+    gpointer user_data;
+};
+
+#define	IS_TOPNODE(fp)	(((node_t *)(fp))->parent == NULL)
+#define NODE_NAME(fp)	(((node_t *)(fp))->filename)
+
+typedef struct node_op
+{
+    /* find */
+    void (*hit) (node_t* node, gpointer user_data);
+    node_t* (*add_missing) (node_t* parent, gpointer user_data);
+    /* delete */
+    gboolean (*pre_del) (node_t* node, gpointer user_data);
+	/* data */
+    gpointer user_data;
+} node_op_t;
+
+node_t* add_node (node_t* parent, const gchar* filename);
+void remove_node (node_t* node, node_op_t* op);
+void pending_remove_node (node_t* node, node_op_t* op);
+
+void travel_nodes (node_t* node, node_op_t* op);
+node_t* find_node_full (const gchar* filename, node_op_t* op);
+node_t* find_node (const gchar *filename);
+
+node_t* children_find (node_t *f, const gchar *basename);
+guint children_num (node_t *f);
+
+gpointer node_get_data (node_t* node);
+gpointer node_set_data (node_t* node, gpointer user_data);
+
+gboolean node_class_init ();
+
+#endif /* _FEN_NODE_H_ */
diff --git a/gio/fen/fen-sub.c b/gio/fen/fen-sub.c
new file mode 100644
index 0000000..47c18fd
--- /dev/null
+++ b/gio/fen/fen-sub.c
@@ -0,0 +1,42 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+#include "fen-sub.h"
+
+fen_sub*
+fen_sub_new (gpointer udata, gboolean is_mondir)
+{
+    fen_sub *sub;
+    sub = g_new (fen_sub, 1);
+    sub->user_data = udata;
+    sub->is_mondir = is_mondir;
+    return sub;
+}
+
+void
+fen_sub_delete (fen_sub *sub)
+{
+    g_free (sub);
+}
diff --git a/gio/fen/fen-sub.h b/gio/fen/fen-sub.h
new file mode 100644
index 0000000..474d91a
--- /dev/null
+++ b/gio/fen/fen-sub.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* 
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Lin Ma <lin.ma@sun.com>
+ */
+
+#include <glib.h>
+
+#ifndef _FEN_SUB_H_
+#define _FEN_SUB_H_
+
+typedef struct _fen_sub
+{
+    gpointer user_data;
+    gboolean is_mondir;
+} fen_sub;
+
+fen_sub*	fen_sub_new (gpointer udata, gboolean is_mondir);
+void		fen_sub_delete (fen_sub *sub);
+
+#endif _FEN_SUB_H_
diff --git a/gio/fen/gfendirectorymonitor.c b/gio/fen/gfendirectorymonitor.c
new file mode 100644
index 0000000..d73ab99
--- /dev/null
+++ b/gio/fen/gfendirectorymonitor.c
@@ -0,0 +1,150 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ *          Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+
+#include "gfendirectorymonitor.h"
+#include "giomodule.h"
+
+#include "fen-helper.h"
+
+#include "gioalias.h"
+
+struct _GFenDirectoryMonitor
+{
+	GLocalDirectoryMonitor parent_instance;
+    gboolean cancelled;
+    fen_sub* sub;
+};
+
+static gboolean g_fen_directory_monitor_cancel (GFileMonitor* monitor);
+
+#define g_fen_directory_monitor_get_type _g_fen_directory_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GFenDirectoryMonitor, g_fen_directory_monitor, G_TYPE_LOCAL_DIRECTORY_MONITOR,
+  g_io_extension_point_implement (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME,
+    g_define_type_id,
+    "fen",
+    20))
+
+static void
+g_fen_directory_monitor_finalize (GObject *object)
+{
+	GFenDirectoryMonitor *self = G_FEN_DIRECTORY_MONITOR (object);
+    
+    if (self->sub) {
+        fen_remove (G_LOCAL_DIRECTORY_MONITOR (self)->dirname, self->sub, TRUE);
+        fen_sub_delete (self->sub);
+        self->sub = NULL;
+    }
+
+	if (G_OBJECT_CLASS (g_fen_directory_monitor_parent_class)->finalize)
+		(*G_OBJECT_CLASS (g_fen_directory_monitor_parent_class)->finalize) (object);
+}
+
+static GObject *
+g_fen_directory_monitor_constructor (GType type,
+  guint n_construct_properties,
+  GObjectConstructParam *construct_properties)
+{
+	GObject *obj;
+	GFenDirectoryMonitorClass *klass;
+	GObjectClass *parent_class;
+	GFenDirectoryMonitor *self;
+	const gchar *dirname = NULL;
+  
+	klass = G_FEN_DIRECTORY_MONITOR_CLASS (g_type_class_peek (G_TYPE_FEN_DIRECTORY_MONITOR));
+	parent_class = g_fen_directory_monitor_parent_class;
+	obj = parent_class->constructor (type,
+      n_construct_properties,
+      construct_properties);
+
+	self = G_FEN_DIRECTORY_MONITOR (obj);
+
+	dirname = G_LOCAL_DIRECTORY_MONITOR (self)->dirname;
+	g_assert (dirname != NULL);
+
+	/* Will never fail as is_supported() should be called before instanciating
+	 * anyway */
+    if (!fen_init ())
+        g_assert_not_reached ();
+
+	/* FIXME: what to do about errors here? we can't return NULL or another
+	 * kind of error and an assertion is probably too hard */
+    self->sub = fen_sub_new (self, TRUE);
+    g_assert (self->sub);
+    
+    fen_add (dirname, self->sub, TRUE);
+
+	return obj;
+}
+
+static gboolean
+g_fen_directory_monitor_is_supported (void)
+{
+	return fen_init ();
+}
+
+static void
+g_fen_directory_monitor_class_init (GFenDirectoryMonitorClass* klass)
+{
+	GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+	GFileMonitorClass *directory_monitor_class = G_FILE_MONITOR_CLASS (klass);
+	GLocalDirectoryMonitorClass *local_directory_monitor_class = G_LOCAL_DIRECTORY_MONITOR_CLASS (klass);
+  
+	gobject_class->finalize = g_fen_directory_monitor_finalize;
+	gobject_class->constructor = g_fen_directory_monitor_constructor;
+	directory_monitor_class->cancel = g_fen_directory_monitor_cancel;
+
+	local_directory_monitor_class->mount_notify = TRUE;
+	local_directory_monitor_class->is_supported = g_fen_directory_monitor_is_supported;
+}
+
+static void
+g_fen_directory_monitor_init (GFenDirectoryMonitor* monitor)
+{
+}
+
+static gboolean
+g_fen_directory_monitor_cancel (GFileMonitor* monitor)
+{
+	GFenDirectoryMonitor *self = G_FEN_DIRECTORY_MONITOR (monitor);
+    
+    if (self->sub) {
+        fen_remove (G_LOCAL_DIRECTORY_MONITOR (self)->dirname, self->sub, TRUE);
+        fen_sub_delete (self->sub);
+        self->sub = NULL;
+    }
+    
+	if (G_FILE_MONITOR_CLASS (g_fen_directory_monitor_parent_class)->cancel)
+		(*G_FILE_MONITOR_CLASS (g_fen_directory_monitor_parent_class)->cancel) (monitor);
+
+	return TRUE;
+}
+
diff --git a/gio/fen/gfendirectorymonitor.h b/gio/fen/gfendirectorymonitor.h
new file mode 100644
index 0000000..c22998c
--- /dev/null
+++ b/gio/fen/gfendirectorymonitor.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __G_FEN_DIRECTORY_MONITOR_H__
+#define __G_FEN_DIRECTORY_MONITOR_H__
+
+#include <glib-object.h>
+#include <string.h>
+#include "glocaldirectorymonitor.h"
+#include "giomodule.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FEN_DIRECTORY_MONITOR		(_g_fen_directory_monitor_get_type ())
+#define G_FEN_DIRECTORY_MONITOR(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FEN_DIRECTORY_MONITOR, GFenDirectoryMonitor))
+#define G_FEN_DIRECTORY_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_FEN_DIRECTORY_MONITOR, GFenDirectoryMonitorClass))
+#define G_IS_FEN_DIRECTORY_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FEN_DIRECTORY_MONITOR))
+#define G_IS_FEN_DIRECTORY_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FEN_DIRECTORY_MONITOR))
+
+typedef struct _GFenDirectoryMonitor      GFenDirectoryMonitor;
+typedef struct _GFenDirectoryMonitorClass GFenDirectoryMonitorClass;
+
+struct _GFenDirectoryMonitorClass {
+  GLocalDirectoryMonitorClass parent_class;
+};
+
+GType _g_fen_directory_monitor_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __G_FEN_DIRECTORY_MONITOR_H__ */
diff --git a/gio/fen/gfenfilemonitor.c b/gio/fen/gfenfilemonitor.c
new file mode 100644
index 0000000..c5240d6
--- /dev/null
+++ b/gio/fen/gfenfilemonitor.c
@@ -0,0 +1,149 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ * Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ *          Lin Ma <lin.ma@sun.com>
+ */
+
+#include "config.h"
+
+#include "gfenfilemonitor.h"
+#include <gio/giomodule.h>
+
+#include "fen-helper.h"
+
+#include "gioalias.h"
+
+struct _GFenFileMonitor
+{
+    GLocalFileMonitor parent_instance;
+    fen_sub* sub;
+};
+
+static gboolean g_fen_file_monitor_cancel (GFileMonitor* monitor);
+
+#define g_fen_file_monitor_get_type _g_fen_file_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GFenFileMonitor, g_fen_file_monitor, G_TYPE_LOCAL_FILE_MONITOR,
+  g_io_extension_point_implement (G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME,
+    g_define_type_id,
+    "fen",
+    20))
+
+static void
+g_fen_file_monitor_finalize (GObject *object)
+{
+	GFenFileMonitor *self = G_FEN_FILE_MONITOR (object);
+    
+    if (self->sub) {
+        fen_remove (G_LOCAL_FILE_MONITOR (self)->filename, self->sub, FALSE);
+        fen_sub_delete (self->sub);
+        self->sub = NULL;
+    }
+    
+    if (G_OBJECT_CLASS (g_fen_file_monitor_parent_class)->finalize)
+        (*G_OBJECT_CLASS (g_fen_file_monitor_parent_class)->finalize) (object);
+}
+
+static GObject *
+g_fen_file_monitor_constructor (GType type,
+  guint n_construct_properties,
+  GObjectConstructParam *construct_properties)
+{
+    GObject *obj;
+    GFenFileMonitorClass *klass;
+    GObjectClass *parent_class;
+    GFenFileMonitor *self;
+    const gchar *filename = NULL;
+  
+    klass = G_FEN_FILE_MONITOR_CLASS (g_type_class_peek (G_TYPE_FEN_FILE_MONITOR));
+    parent_class = g_fen_file_monitor_parent_class;
+    obj = parent_class->constructor (type,
+      n_construct_properties,
+      construct_properties);
+
+    self = G_FEN_FILE_MONITOR (obj);
+
+    filename = G_LOCAL_FILE_MONITOR (obj)->filename;
+
+    g_assert (filename != NULL);
+
+    /* Will never fail as is_supported() should be called before instanciating
+     * anyway */
+    if (!fen_init ())
+        g_assert_not_reached ();
+    
+    /* FIXME: what to do about errors here? we can't return NULL or another
+     * kind of error and an assertion is probably too hard */
+    self->sub = fen_sub_new (self, FALSE);
+    g_assert (self->sub);
+    
+    fen_add (filename, self->sub, FALSE);
+
+    return obj;
+}
+
+static gboolean
+g_fen_file_monitor_is_supported (void)
+{
+	return fen_init ();
+}
+
+static void
+g_fen_file_monitor_class_init (GFenFileMonitorClass* klass)
+{
+    GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+    GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
+    GLocalFileMonitorClass *local_file_monitor_class = G_LOCAL_FILE_MONITOR_CLASS (klass);
+  
+    gobject_class->finalize = g_fen_file_monitor_finalize;
+    gobject_class->constructor = g_fen_file_monitor_constructor;
+    file_monitor_class->cancel = g_fen_file_monitor_cancel;
+
+    local_file_monitor_class->is_supported = g_fen_file_monitor_is_supported;
+}
+
+static void
+g_fen_file_monitor_init (GFenFileMonitor* monitor)
+{
+}
+
+static gboolean
+g_fen_file_monitor_cancel (GFileMonitor* monitor)
+{
+    GFenFileMonitor *self = G_FEN_FILE_MONITOR (monitor);
+    
+    if (self->sub) {
+        fen_remove (G_LOCAL_FILE_MONITOR (self)->filename, self->sub, FALSE);
+        fen_sub_delete (self->sub);
+        self->sub = NULL;
+    }
+    
+    if (G_FILE_MONITOR_CLASS (g_fen_file_monitor_parent_class)->cancel)
+        (*G_FILE_MONITOR_CLASS (g_fen_file_monitor_parent_class)->cancel) (monitor);
+
+    return TRUE;
+}
+
diff --git a/gio/fen/gfenfilemonitor.h b/gio/fen/gfenfilemonitor.h
new file mode 100644
index 0000000..e8b2e6a
--- /dev/null
+++ b/gio/fen/gfenfilemonitor.h
@@ -0,0 +1,56 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim:set expandtab ts=4 shiftwidth=4: */
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __G_FEN_FILE_MONITOR_H__
+#define __G_FEN_FILE_MONITOR_H__
+
+#include <glib-object.h>
+#include <string.h>
+#include <gio/gfilemonitor.h>
+#include <gio/glocalfilemonitor.h>
+#include <gio/giomodule.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FEN_FILE_MONITOR		(_g_fen_file_monitor_get_type ())
+#define G_FEN_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FEN_FILE_MONITOR, GFenFileMonitor))
+#define G_FEN_FILE_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_FEN_FILE_MONITOR, GFenFileMonitorClass))
+#define G_IS_FEN_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FEN_FILE_MONITOR))
+#define G_IS_FEN_FILE_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FEN_FILE_MONITOR))
+
+typedef struct _GFenFileMonitor      GFenFileMonitor;
+typedef struct _GFenFileMonitorClass GFenFileMonitorClass;
+
+struct _GFenFileMonitorClass {
+  GLocalFileMonitorClass parent_class;
+};
+
+GType _g_fen_file_monitor_get_type (void);
+
+G_END_DECLS
+
+#endif /* __G_FEN_FILE_MONITOR_H__ */
diff --git a/gio/gappinfo.c b/gio/gappinfo.c
new file mode 100644
index 0000000..b017247
--- /dev/null
+++ b/gio/gappinfo.c
@@ -0,0 +1,826 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gappinfo.h"
+#include "glibintl.h"
+#include <gioerror.h>
+#include <gfile.h>
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gappinfo
+ * @short_description: Application information and launch contexts
+ * @include: gio/gio.h
+ * 
+ * #GAppInfo and #GAppLaunchContext are used for describing and launching 
+ * applications installed on the system.
+ *
+ * As of GLib 2.20, URIs will always be converted to POSIX paths
+ * (using g_file_get_path()) when using g_app_info_launch() even if
+ * the application requested an URI and not a POSIX path. For example
+ * for an desktop-file based application with Exec key <literal>totem
+ * %%U</literal> and a single URI,
+ * <literal>sftp://foo/file.avi</literal>, then
+ * <literal>/home/user/.gvfs/sftp on foo/file.avi</literal> will be
+ * passed. This will only work if a set of suitable GIO extensions
+ * (such as gvfs 2.26 compiled with FUSE support), is available and
+ * operational; if this is not the case, the URI will be passed
+ * unmodified to the application. Some URIs, such as
+ * <literal>mailto:</literal>, of course cannot be mapped to a POSIX
+ * path (in gvfs there's no FUSE mount for it); such URIs will be
+ * passed unmodified to the application.
+ *
+ * Specifically for gvfs 2.26 and later, the POSIX URI will be mapped
+ * back to the GIO URI in the #GFile constructors (since gvfs
+ * implements the #GVfs extension point). As such, if the application
+ * needs to examine the URI, it needs to use g_file_get_uri() or
+ * similar on #GFile. In other words, an application cannot assume
+ * that the URI passed to e.g. g_file_new_for_commandline_arg() is
+ * equal to the result of g_file_get_uri(). The following snippet
+ * illustrates this:
+ *
+ * <programlisting>
+ * GFile *f;
+ * char *uri;
+ *
+ * file = g_file_new_for_commandline_arg (uri_from_commandline);
+ *
+ * uri = g_file_get_uri (file);
+ * strcmp (uri, uri_from_commandline) == 0; // FALSE
+ * g_free (uri);
+ *
+ * if (g_file_has_uri_scheme (file, "cdda"))
+ *   {
+ *     // do something special with uri
+ *   }
+ * g_object_unref (file);
+ * </programlisting>
+ *
+ * This code will work when both <literal>cdda://sr0/Track
+ * 1.wav</literal> and <literal>/home/user/.gvfs/cdda on sr0/Track
+ * 1.wav</literal> is passed to the application. It should be noted
+ * that it's generally not safe for applications to rely on the format
+ * of a particular URIs. Different launcher applications (e.g. file
+ * managers) may have different ideas of what a given URI means.
+ *
+ **/
+
+static void g_app_info_base_init (gpointer g_class);
+static void g_app_info_class_init (gpointer g_class,
+				   gpointer class_data);
+
+
+GType
+g_app_info_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+     const GTypeInfo app_info_info =
+      {
+        sizeof (GAppInfoIface), /* class_size */
+	g_app_info_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_app_info_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GAppInfo"),
+				&app_info_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_app_info_class_init (gpointer g_class,
+		       gpointer class_data)
+{
+}
+
+static void
+g_app_info_base_init (gpointer g_class)
+{
+}
+
+
+/**
+ * g_app_info_dup:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Creates a duplicate of a #GAppInfo.
+ *
+ * Returns: a duplicate of @appinfo.
+ **/
+GAppInfo *
+g_app_info_dup (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->dup) (appinfo);
+}
+
+/**
+ * g_app_info_equal:
+ * @appinfo1: the first #GAppInfo.  
+ * @appinfo2: the second #GAppInfo.
+ * 
+ * Checks if two #GAppInfos are equal.
+ *
+ * Returns: %TRUE if @appinfo1 is equal to @appinfo2. %FALSE otherwise.
+ **/
+gboolean
+g_app_info_equal (GAppInfo *appinfo1,
+		  GAppInfo *appinfo2)
+{
+  GAppInfoIface *iface;
+
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo1), FALSE);
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo2), FALSE);
+
+  if (G_TYPE_FROM_INSTANCE (appinfo1) != G_TYPE_FROM_INSTANCE (appinfo2))
+    return FALSE;
+  
+  iface = G_APP_INFO_GET_IFACE (appinfo1);
+
+  return (* iface->equal) (appinfo1, appinfo2);
+}
+
+/**
+ * g_app_info_get_id:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Gets the ID of an application. An id is a string that
+ * identifies the application. The exact format of the id is
+ * platform dependent. For instance, on Unix this is the
+ * desktop file id from the xdg menu specification.
+ *
+ * Note that the returned ID may be %NULL, depending on how
+ * the @appinfo has been constructed.
+ *
+ * Returns: a string containing the application's ID.
+ **/
+const char *
+g_app_info_get_id (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->get_id) (appinfo);
+}
+
+/**
+ * g_app_info_get_name:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Gets the installed name of the application. 
+ *
+ * Returns: the name of the application for @appinfo.
+ **/
+const char *
+g_app_info_get_name (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->get_name) (appinfo);
+}
+
+/**
+ * g_app_info_get_description:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Gets a human-readable description of an installed application.
+ *
+ * Returns: a string containing a description of the 
+ * application @appinfo, or %NULL if none. 
+ **/
+const char *
+g_app_info_get_description (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->get_description) (appinfo);
+}
+
+/**
+ * g_app_info_get_executable:
+ * @appinfo: a #GAppInfo
+ * 
+ * Gets the executable's name for the installed application.
+ *
+ * Returns: a string containing the @appinfo's application 
+ * binary's name
+ **/
+const char *
+g_app_info_get_executable (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->get_executable) (appinfo);
+}
+
+
+/**
+ * g_app_info_get_commandline:
+ * @appinfo: a #GAppInfo
+ * 
+ * Gets the commandline with which the application will be
+ * started.  
+ *
+ * Returns: a string containing the @appinfo's commandline, 
+ *     or %NULL if this information is not available
+ *
+ * Since: 2.20
+ **/
+const char *
+g_app_info_get_commandline (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->get_commandline)
+    return (* iface->get_commandline) (appinfo);
+ 
+  return NULL;
+}
+
+/**
+ * g_app_info_set_as_default_for_type:
+ * @appinfo: a #GAppInfo.
+ * @content_type: the content type.
+ * @error: a #GError.
+ * 
+ * Sets the application as the default handler for a given type.
+ *
+ * Returns: %TRUE on success, %FALSE on error.
+ **/
+gboolean
+g_app_info_set_as_default_for_type (GAppInfo    *appinfo,
+				    const char  *content_type,
+				    GError     **error)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+  g_return_val_if_fail (content_type != NULL, FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->set_as_default_for_type) (appinfo, content_type, error);
+}
+
+
+/**
+ * g_app_info_set_as_default_for_extension:
+ * @appinfo: a #GAppInfo.
+ * @extension: a string containing the file extension (without the dot).
+ * @error: a #GError.
+ * 
+ * Sets the application as the default handler for the given file extention.
+ *
+ * Returns: %TRUE on success, %FALSE on error.
+ **/
+gboolean
+g_app_info_set_as_default_for_extension (GAppInfo    *appinfo,
+					 const char  *extension,
+					 GError     **error)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+  g_return_val_if_fail (extension != NULL, FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->set_as_default_for_extension)
+    return (* iface->set_as_default_for_extension) (appinfo, extension, error);
+
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                       "g_app_info_set_as_default_for_extension not supported yet");
+  return FALSE;
+}
+
+
+/**
+ * g_app_info_add_supports_type:
+ * @appinfo: a #GAppInfo.
+ * @content_type: a string.
+ * @error: a #GError.
+ * 
+ * Adds a content type to the application information to indicate the 
+ * application is capable of opening files with the given content type.
+ *
+ * Returns: %TRUE on success, %FALSE on error.
+ **/
+gboolean
+g_app_info_add_supports_type (GAppInfo    *appinfo,
+			      const char  *content_type,
+			      GError     **error)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+  g_return_val_if_fail (content_type != NULL, FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->add_supports_type)
+    return (* iface->add_supports_type) (appinfo, content_type, error);
+
+  g_set_error_literal (error, G_IO_ERROR, 
+                       G_IO_ERROR_NOT_SUPPORTED, 
+                       "g_app_info_add_supports_type not supported yet");
+
+  return FALSE;
+}
+
+
+/**
+ * g_app_info_can_remove_supports_type:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Checks if a supported content type can be removed from an application.
+ *
+ * Returns: %TRUE if it is possible to remove supported 
+ *     content types from a given @appinfo, %FALSE if not.
+ **/
+gboolean
+g_app_info_can_remove_supports_type (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->can_remove_supports_type)
+    return (* iface->can_remove_supports_type) (appinfo);
+
+  return FALSE;
+}
+
+
+/**
+ * g_app_info_remove_supports_type:
+ * @appinfo: a #GAppInfo.
+ * @content_type: a string.
+ * @error: a #GError.
+ *
+ * Removes a supported type from an application, if possible.
+ * 
+ * Returns: %TRUE on success, %FALSE on error.
+ **/
+gboolean
+g_app_info_remove_supports_type (GAppInfo    *appinfo,
+				 const char  *content_type,
+				 GError     **error)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+  g_return_val_if_fail (content_type != NULL, FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->remove_supports_type)
+    return (* iface->remove_supports_type) (appinfo, content_type, error);
+
+  g_set_error_literal (error, G_IO_ERROR, 
+                       G_IO_ERROR_NOT_SUPPORTED, 
+                       "g_app_info_remove_supports_type not supported yet");
+
+  return FALSE;
+}
+
+
+/**
+ * g_app_info_get_icon:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Gets the icon for the application.
+ *
+ * Returns: the default #GIcon for @appinfo.
+ **/
+GIcon *
+g_app_info_get_icon (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), NULL);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->get_icon) (appinfo);
+}
+
+
+/**
+ * g_app_info_launch:
+ * @appinfo: a #GAppInfo
+ * @files: a #GList of #GFile objects
+ * @launch_context: a #GAppLaunchContext or %NULL
+ * @error: a #GError
+ * 
+ * Launches the application. Passes @files to the launched application 
+ * as arguments, using the optional @launch_context to get information
+ * about the details of the launcher (like what screen it is on).
+ * On error, @error will be set accordingly.
+ *
+ * To lauch the application without arguments pass a %NULL @files list.
+ *
+ * Note that even if the launch is successful the application launched
+ * can fail to start if it runs into problems during startup. There is
+ * no way to detect this.
+ *
+ * Some URIs can be changed when passed through a GFile (for instance
+ * unsupported uris with strange formats like mailto:), so if you have
+ * a textual uri you want to pass in as argument, consider using
+ * g_app_info_launch_uris() instead.
+ * 
+ * Returns: %TRUE on successful launch, %FALSE otherwise. 
+ **/
+gboolean
+g_app_info_launch (GAppInfo           *appinfo,
+		   GList              *files,
+		   GAppLaunchContext  *launch_context,
+		   GError            **error)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->launch) (appinfo, files, launch_context, error);
+}
+
+
+/**
+ * g_app_info_supports_uris:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Checks if the application supports reading files and directories from URIs.
+ *
+ * Returns: %TRUE if the @appinfo supports URIs.
+ **/
+gboolean
+g_app_info_supports_uris (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->supports_uris) (appinfo);
+}
+
+
+/**
+ * g_app_info_supports_files:
+ * @appinfo: a #GAppInfo.
+ * 
+ * Checks if the application accepts files as arguments.
+ *
+ * Returns: %TRUE if the @appinfo supports files.
+ **/
+gboolean
+g_app_info_supports_files (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->supports_files) (appinfo);
+}
+
+
+/**
+ * g_app_info_launch_uris:
+ * @appinfo: a #GAppInfo
+ * @uris: a #GList containing URIs to launch. 
+ * @launch_context: a #GAppLaunchContext or %NULL
+ * @error: a #GError
+ * 
+ * Launches the application. Passes @uris to the launched application 
+ * as arguments, using the optional @launch_context to get information
+ * about the details of the launcher (like what screen it is on).
+ * On error, @error will be set accordingly.
+ *
+ * To lauch the application without arguments pass a %NULL @uris list.
+ *
+ * Note that even if the launch is successful the application launched
+ * can fail to start if it runs into problems during startup. There is
+ * no way to detect this.
+ *
+ * Returns: %TRUE on successful launch, %FALSE otherwise. 
+ **/
+gboolean
+g_app_info_launch_uris (GAppInfo           *appinfo,
+			GList              *uris,
+			GAppLaunchContext  *launch_context,
+			GError            **error)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->launch_uris) (appinfo, uris, launch_context, error);
+}
+
+
+/**
+ * g_app_info_should_show:
+ * @appinfo: a #GAppInfo.
+ *
+ * Checks if the application info should be shown in menus that 
+ * list available applications.
+ * 
+ * Returns: %TRUE if the @appinfo should be shown, %FALSE otherwise.
+ **/
+gboolean
+g_app_info_should_show (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  return (* iface->should_show) (appinfo);
+}
+
+/**
+ * g_app_info_launch_default_for_uri:
+ * @uri: the uri to show
+ * @launch_context: an optional #GAppLaunchContext.
+ * @error: a #GError.
+ *
+ * Utility function that launches the default application 
+ * registered to handle the specified uri. Synchronous I/O
+ * is done on the uri to detect the type of the file if
+ * required.
+ * 
+ * Returns: %TRUE on success, %FALSE on error.
+ **/
+gboolean
+g_app_info_launch_default_for_uri (const char         *uri,
+				   GAppLaunchContext  *launch_context,
+				   GError            **error)
+{
+  GAppInfo *app_info;
+  GFile *file;
+  GList l;
+  gboolean res;
+
+  file = g_file_new_for_uri (uri);
+  app_info = g_file_query_default_handler (file, NULL, error);
+  g_object_unref (file);
+  if (app_info == NULL)
+    return FALSE;
+
+  /* Use the uri, not the GFile, as the GFile roundtrip may
+   * affect the uri which we don't want (for instance for a
+   * mailto: uri).
+   */
+  l.data = (char *)uri;
+  l.next = l.prev = NULL;
+  res = g_app_info_launch_uris (app_info, &l,
+				launch_context, error);
+
+  g_object_unref (app_info);
+  
+  return res;
+}
+
+/**
+ * g_app_info_can_delete:
+ * @appinfo: a #GAppInfo
+ *
+ * Obtains the information whether the GAppInfo can be deleted.
+ * See g_app_info_delete().
+ *
+ * Returns: %TRUE if @appinfo can be deleted
+ *
+ * Since: 2.20
+ */
+gboolean
+g_app_info_can_delete (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->can_delete)
+    return (* iface->can_delete) (appinfo);
+ 
+  return FALSE; 
+}
+
+
+/**
+ * g_app_info_delete:
+ * @appinfo: a #GAppInfo
+ *
+ * Tries to delete an #GAppInfo. 
+ *
+ * On some platforms, there may be a difference between user-defined
+ * #GAppInfo<!-- -->s which can be deleted, and system-wide ones which
+ * cannot. See g_app_info_can_delete().
+ * 
+ * Returns: %TRUE if @appinfo has been deleted
+ *
+ * Since: 2.20
+ */
+gboolean
+g_app_info_delete (GAppInfo *appinfo)
+{
+  GAppInfoIface *iface;
+  
+  g_return_val_if_fail (G_IS_APP_INFO (appinfo), FALSE);
+
+  iface = G_APP_INFO_GET_IFACE (appinfo);
+
+  if (iface->do_delete)
+    return (* iface->do_delete) (appinfo);
+ 
+  return FALSE; 
+}
+
+
+G_DEFINE_TYPE (GAppLaunchContext, g_app_launch_context, G_TYPE_OBJECT);
+
+/**
+ * g_app_launch_context_new:
+ * 
+ * Creates a new application launch context. This is not normally used,
+ * instead you instantiate a subclass of this, such as #GdkAppLaunchContext.
+ *
+ * Returns: a #GAppLaunchContext.
+ **/
+GAppLaunchContext *
+g_app_launch_context_new (void)
+{
+  return g_object_new (G_TYPE_APP_LAUNCH_CONTEXT, NULL);
+}
+
+static void
+g_app_launch_context_class_init (GAppLaunchContextClass *klass)
+{
+}
+
+static void
+g_app_launch_context_init (GAppLaunchContext *launch_context)
+{
+}
+
+/**
+ * g_app_launch_context_get_display:
+ * @context: a #GAppLaunchContext
+ * @info: a #GAppInfo
+ * @files: a #GList of #GFile objects
+ *
+ * Gets the display string for the display. This is used to ensure new
+ * applications are started on the same display as the launching 
+ * application.
+ * 
+ * Returns: a display string for the display.
+ **/
+char *
+g_app_launch_context_get_display (GAppLaunchContext *context,
+				  GAppInfo          *info,
+				  GList             *files)
+{
+  GAppLaunchContextClass *class;
+
+  g_return_val_if_fail (G_IS_APP_LAUNCH_CONTEXT (context), NULL);
+  g_return_val_if_fail (G_IS_APP_INFO (info), NULL);
+
+  class = G_APP_LAUNCH_CONTEXT_GET_CLASS (context);
+
+  if (class->get_display == NULL)
+    return NULL;
+
+  return class->get_display (context, info, files);
+}
+
+/**
+ * g_app_launch_context_get_startup_notify_id:
+ * @context: a #GAppLaunchContext
+ * @info: a #GAppInfo
+ * @files: a #GList of of #GFile objects
+ * 
+ * Initiates startup notification for the application and returns the
+ * DESKTOP_STARTUP_ID for the launched operation, if supported.
+ *
+ * Startup notification IDs are defined in the <ulink
+ * url="http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt">
+ * FreeDesktop.Org Startup Notifications standard</ulink>.
+ *
+ * Returns: a startup notification ID for the application, or %NULL if 
+ *     not supported.
+ **/
+char *
+g_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
+					    GAppInfo          *info,
+					    GList             *files)
+{
+  GAppLaunchContextClass *class;
+
+  g_return_val_if_fail (G_IS_APP_LAUNCH_CONTEXT (context), NULL);
+  g_return_val_if_fail (G_IS_APP_INFO (info), NULL);
+
+  class = G_APP_LAUNCH_CONTEXT_GET_CLASS (context);
+
+  if (class->get_startup_notify_id == NULL)
+    return NULL;
+
+  return class->get_startup_notify_id (context, info, files);
+}
+
+
+/**
+ * g_app_launch_context_launch_failed:
+ * @context: a #GAppLaunchContext.
+ * @startup_notify_id: the startup notification id that was returned by g_app_launch_context_get_startup_notify_id().
+ *
+ * Called when an application has failed to launch, so that it can cancel
+ * the application startup notification started in g_app_launch_context_get_startup_notify_id().
+ * 
+ **/
+void
+g_app_launch_context_launch_failed (GAppLaunchContext *context,
+				    const char        *startup_notify_id)
+{
+  GAppLaunchContextClass *class;
+
+  g_return_if_fail (G_IS_APP_LAUNCH_CONTEXT (context));
+  g_return_if_fail (startup_notify_id != NULL);
+
+  class = G_APP_LAUNCH_CONTEXT_GET_CLASS (context);
+
+  if (class->launch_failed != NULL)
+    class->launch_failed (context, startup_notify_id);
+}
+
+
+#define __G_APP_INFO_C__
+#include "gioaliasdef.c"
diff --git a/gio/gappinfo.h b/gio/gappinfo.h
new file mode 100644
index 0000000..21a41da
--- /dev/null
+++ b/gio/gappinfo.h
@@ -0,0 +1,234 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_APP_INFO_H__
+#define __G_APP_INFO_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_APP_INFO            (g_app_info_get_type ())
+#define G_APP_INFO(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_APP_INFO, GAppInfo))
+#define G_IS_APP_INFO(obj)	   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_APP_INFO))
+#define G_APP_INFO_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_APP_INFO, GAppInfoIface))
+
+#define G_TYPE_APP_LAUNCH_CONTEXT         (g_app_launch_context_get_type ())
+#define G_APP_LAUNCH_CONTEXT(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContext))
+#define G_APP_LAUNCH_CONTEXT_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContextClass))
+#define G_IS_APP_LAUNCH_CONTEXT(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_APP_LAUNCH_CONTEXT))
+#define G_IS_APP_LAUNCH_CONTEXT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_APP_LAUNCH_CONTEXT))
+#define G_APP_LAUNCH_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_APP_LAUNCH_CONTEXT, GAppLaunchContextClass))
+
+typedef struct _GAppLaunchContextClass   GAppLaunchContextClass;
+typedef struct _GAppLaunchContextPrivate GAppLaunchContextPrivate;
+
+/**
+ * GAppInfo:
+ *
+ * Information about an installed application and methods to launch
+ * it (with file arguments).
+ */
+
+/**
+ * GAppInfoIface:
+ * @g_iface: The parent interface.
+ * @dup: Copies a #GAppInfo.
+ * @equal: Checks two #GAppInfo<!-- -->s for equality.
+ * @get_id: Gets a string identifier for a #GAppInfo.
+ * @get_name: Gets the name of the application for a #GAppInfo.
+ * @get_description: Gets a short description for the application described by the #GAppInfo.
+ * @get_executable: Gets the execuable name for the #GAppInfo.
+ * @get_icon: Gets the #GIcon for the #GAppInfo.
+ * @launch: Launches an application specified by the #GAppInfo.
+ * @supports_uris: Indicates whether the application specified supports launching URIs.
+ * @supports_files: Indicates whether the application specified accepts filename arguments.
+ * @launch_uris: Launches an application with a list of URIs.
+ * @should_show: Returns whether an application should be shown (e.g. when getting a list of installed applications).
+ * <ulink url="http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt">
+ * <citetitle>FreeDesktop.Org Startup Notification Specification</citetitle></ulink>.
+ * @set_as_default_for_type: Sets an application as default for a given content type.
+ * @set_as_default_for_extension: Sets an application as default for a given file extention.
+ * @add_supports_type: Adds to the #GAppInfo information about supported file types.
+ * @can_remove_supports_type: Checks for support for removing supported file types from a #GAppInfo.
+ * @remove_supports_type: Removes a supported application type from a #GAppInfo.
+ * @can_delete: Checks if a #GAppInfo can be deleted. Since 2.20
+ * @do_delete: Deletes a #GAppInfo. Since 2.20
+ * @get_commandline: Gets the commandline for the #GAppInfo. Since 2.20
+ *
+ * Application Information interface, for operating system portability.
+ */
+typedef struct _GAppInfoIface    GAppInfoIface;
+
+struct _GAppInfoIface
+{
+  GTypeInterface g_iface;
+
+  /* Virtual Table */
+
+  GAppInfo *   (* dup)                          (GAppInfo           *appinfo);
+  gboolean     (* equal)                        (GAppInfo           *appinfo1,
+                                                 GAppInfo           *appinfo2);
+  const char * (* get_id)                       (GAppInfo           *appinfo);
+  const char * (* get_name)                     (GAppInfo           *appinfo);
+  const char * (* get_description)              (GAppInfo           *appinfo);
+  const char * (* get_executable)               (GAppInfo           *appinfo);
+  GIcon *      (* get_icon)                     (GAppInfo           *appinfo);
+  gboolean     (* launch)                       (GAppInfo           *appinfo,
+                                                 GList              *filenames,
+                                                 GAppLaunchContext  *launch_context,
+                                                 GError            **error);
+  gboolean     (* supports_uris)                (GAppInfo           *appinfo);
+  gboolean     (* supports_files)               (GAppInfo           *appinfo);
+  gboolean     (* launch_uris)                  (GAppInfo           *appinfo,
+                                                 GList              *uris,
+                                                 GAppLaunchContext  *launch_context,
+                                                 GError            **error);
+  gboolean     (* should_show)                  (GAppInfo           *appinfo);
+
+  /* For changing associations */
+  gboolean     (* set_as_default_for_type)      (GAppInfo           *appinfo,
+                                                 const char         *content_type,
+                                                 GError            **error);
+  gboolean     (* set_as_default_for_extension) (GAppInfo           *appinfo,
+                                                 const char         *extension,
+                                                 GError            **error);
+  gboolean     (* add_supports_type)            (GAppInfo           *appinfo,
+                                                 const char         *content_type,
+                                                 GError            **error);
+  gboolean     (* can_remove_supports_type)     (GAppInfo           *appinfo);
+  gboolean     (* remove_supports_type)         (GAppInfo           *appinfo,
+                                                 const char         *content_type,
+                                                 GError            **error);
+  gboolean     (* can_delete)                   (GAppInfo           *appinfo);
+  gboolean     (* do_delete)                    (GAppInfo           *appinfo);
+  const char * (* get_commandline)              (GAppInfo           *appinfo);
+};
+
+GType       g_app_info_get_type                     (void) G_GNUC_CONST;
+GAppInfo *  g_app_info_create_from_commandline      (const char           *commandline,
+						     const char           *application_name,
+						     GAppInfoCreateFlags   flags,
+						     GError              **error);
+GAppInfo *  g_app_info_dup                          (GAppInfo             *appinfo);
+gboolean    g_app_info_equal                        (GAppInfo             *appinfo1,
+						     GAppInfo             *appinfo2);
+const char *g_app_info_get_id                       (GAppInfo             *appinfo);
+const char *g_app_info_get_name                     (GAppInfo             *appinfo);
+const char *g_app_info_get_description              (GAppInfo             *appinfo);
+const char *g_app_info_get_executable               (GAppInfo             *appinfo);
+const char *g_app_info_get_commandline              (GAppInfo             *appinfo);
+GIcon *     g_app_info_get_icon                     (GAppInfo             *appinfo);
+gboolean    g_app_info_launch                       (GAppInfo             *appinfo,
+						     GList                *files,
+						     GAppLaunchContext    *launch_context,
+						     GError              **error);
+gboolean    g_app_info_supports_uris                (GAppInfo             *appinfo);
+gboolean    g_app_info_supports_files               (GAppInfo             *appinfo);
+gboolean    g_app_info_launch_uris                  (GAppInfo             *appinfo,
+						     GList                *uris,
+						     GAppLaunchContext    *launch_context,
+						     GError              **error);
+gboolean    g_app_info_should_show                  (GAppInfo             *appinfo);
+
+gboolean    g_app_info_set_as_default_for_type      (GAppInfo             *appinfo,
+						     const char           *content_type,
+						     GError              **error);
+gboolean    g_app_info_set_as_default_for_extension (GAppInfo             *appinfo,
+						     const char           *extension,
+						     GError              **error);
+gboolean    g_app_info_add_supports_type            (GAppInfo             *appinfo,
+						     const char           *content_type,
+						     GError              **error);
+gboolean    g_app_info_can_remove_supports_type     (GAppInfo             *appinfo);
+gboolean    g_app_info_remove_supports_type         (GAppInfo             *appinfo,
+						     const char           *content_type,
+						     GError              **error);
+gboolean    g_app_info_can_delete                   (GAppInfo   *appinfo);
+gboolean    g_app_info_delete                       (GAppInfo   *appinfo);
+
+GList *   g_app_info_get_all                     (void);
+GList *   g_app_info_get_all_for_type            (const char  *content_type);
+void      g_app_info_reset_type_associations     (const char  *content_type);
+GAppInfo *g_app_info_get_default_for_type        (const char  *content_type,
+						  gboolean     must_support_uris);
+GAppInfo *g_app_info_get_default_for_uri_scheme  (const char  *uri_scheme);
+
+gboolean  g_app_info_launch_default_for_uri      (const char              *uri,
+					          GAppLaunchContext       *launch_context,
+					          GError                 **error);
+
+/**
+ * GAppLaunchContext:
+ * @parent_instance: The parent instance.
+ *
+ * Integrating the launch with the launching application. This is used to
+ * handle for instance startup notification and launching the new application
+ * on the same screen as the launching window.
+ */
+struct _GAppLaunchContext
+{
+  GObject parent_instance;
+
+  /*< private >*/
+  GAppLaunchContextPrivate *priv;
+};
+
+struct _GAppLaunchContextClass
+{
+  GObjectClass parent_class;
+
+  char * (* get_display)           (GAppLaunchContext *context,
+                                    GAppInfo          *info,
+                                    GList             *files);
+  char * (* get_startup_notify_id) (GAppLaunchContext *context,
+                                    GAppInfo          *info,
+                                    GList             *files);
+  void   (* launch_failed)         (GAppLaunchContext *context,
+                                    const char        *startup_notify_id);
+
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType              g_app_launch_context_get_type              (void) G_GNUC_CONST;
+GAppLaunchContext *g_app_launch_context_new                   (void);
+char *             g_app_launch_context_get_display           (GAppLaunchContext *context,
+							       GAppInfo          *info,
+							       GList             *files);
+char *             g_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
+							       GAppInfo          *info,
+							       GList             *files);
+void               g_app_launch_context_launch_failed         (GAppLaunchContext *context,
+							       const char *       startup_notify_id);
+
+G_END_DECLS
+
+#endif /* __G_APP_INFO_H__ */
diff --git a/gio/gasynchelper.c b/gio/gasynchelper.c
new file mode 100644
index 0000000..b7594dd
--- /dev/null
+++ b/gio/gasynchelper.c
@@ -0,0 +1,175 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include "gasynchelper.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gasynchelper
+ * @short_description: Asynchronous Helper Functions
+ * @include: gio/gio.h
+ * @see_also: #GAsyncReady
+ * 
+ * Provides helper functions for asynchronous operations.
+ *
+ **/
+
+static void
+async_result_free (gpointer data)
+{
+  GAsyncResultData *res = data;
+
+  if (res->error)
+    g_error_free (res->error);
+
+  g_object_unref (res->async_object);
+  
+  g_free (res);
+}
+
+void
+_g_queue_async_result (GAsyncResultData *result,
+		       gpointer          async_object,
+		       GError           *error,
+		       gpointer          user_data,
+		       GSourceFunc       source_func)
+{
+  GSource *source;
+
+  g_return_if_fail (G_IS_OBJECT (async_object));
+  
+  result->async_object = g_object_ref (async_object);
+  result->user_data = user_data;
+  result->error = error;
+
+  source = g_idle_source_new ();
+  g_source_set_priority (source, G_PRIORITY_DEFAULT);
+  g_source_set_callback (source, source_func, result, async_result_free);
+  g_source_attach (source, NULL);
+  g_source_unref (source);
+}
+
+/*************************************************************************
+ *             fd source                                                 *
+ ************************************************************************/
+
+typedef struct 
+{
+  GSource source;
+  GPollFD pollfd;
+  GCancellable *cancellable;
+  gulong cancelled_tag;
+} FDSource;
+
+static gboolean 
+fd_source_prepare (GSource *source,
+		   gint    *timeout)
+{
+  FDSource *fd_source = (FDSource *)source;
+  *timeout = -1;
+  
+  return g_cancellable_is_cancelled (fd_source->cancellable);
+}
+
+static gboolean 
+fd_source_check (GSource *source)
+{
+  FDSource *fd_source = (FDSource *)source;
+
+  return
+    g_cancellable_is_cancelled  (fd_source->cancellable) ||
+    fd_source->pollfd.revents != 0;
+}
+
+static gboolean
+fd_source_dispatch (GSource     *source,
+		    GSourceFunc  callback,
+		    gpointer     user_data)
+
+{
+  GFDSourceFunc func = (GFDSourceFunc)callback;
+  FDSource *fd_source = (FDSource *)source;
+
+  g_warn_if_fail (func != NULL);
+
+  return (*func) (user_data, fd_source->pollfd.revents, fd_source->pollfd.fd);
+}
+
+static void 
+fd_source_finalize (GSource *source)
+{
+  FDSource *fd_source = (FDSource *)source;
+
+  if (fd_source->cancelled_tag)
+    g_signal_handler_disconnect (fd_source->cancellable,
+				 fd_source->cancelled_tag);
+
+  if (fd_source->cancellable)
+    g_object_unref (fd_source->cancellable);
+}
+
+static GSourceFuncs fd_source_funcs = {
+  fd_source_prepare,
+  fd_source_check,
+  fd_source_dispatch,
+  fd_source_finalize
+};
+
+/* Might be called on another thread */
+static void
+fd_source_cancelled_cb (GCancellable *cancellable,
+			gpointer      data)
+{
+  /* Wake up the mainloop in case we're waiting on async calls with FDSource */
+  g_main_context_wakeup (NULL);
+}
+
+GSource *
+_g_fd_source_new (int           fd,
+		  gushort       events,
+		  GCancellable *cancellable)
+{
+  GSource *source;
+  FDSource *fd_source;
+
+  source = g_source_new (&fd_source_funcs, sizeof (FDSource));
+  fd_source = (FDSource *)source;
+
+  if (cancellable)
+    fd_source->cancellable = g_object_ref (cancellable);
+  
+  fd_source->pollfd.fd = fd;
+  fd_source->pollfd.events = events;
+  g_source_add_poll (source, &fd_source->pollfd);
+
+  if (cancellable)
+    fd_source->cancelled_tag =
+      g_signal_connect_data (cancellable, "cancelled",
+			     (GCallback)fd_source_cancelled_cb,
+			     NULL, NULL,
+			     0);
+  
+  return source;
+}
diff --git a/gio/gasynchelper.h b/gio/gasynchelper.h
new file mode 100644
index 0000000..b4d8e50
--- /dev/null
+++ b/gio/gasynchelper.h
@@ -0,0 +1,53 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_ASYNC_HELPER_H__
+#define __G_ASYNC_HELPER_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+typedef struct
+{
+  gpointer       async_object;
+  GError *       error;
+  gpointer       user_data;
+} GAsyncResultData;
+
+typedef gboolean (*GFDSourceFunc) (gpointer     user_data,
+				   GIOCondition condition,
+				   int          fd);
+
+void     _g_queue_async_result (GAsyncResultData *result,
+				gpointer         async_object,
+				GError          *error,
+				gpointer         user_data,
+				GSourceFunc      source_func);
+
+GSource *_g_fd_source_new      (int              fd,
+				gushort          events,
+				GCancellable    *cancellable);
+
+G_END_DECLS
+
+#endif /* __G_ASYNC_HELPER_H__ */
diff --git a/gio/gasyncresult.c b/gio/gasyncresult.c
new file mode 100644
index 0000000..4eb2a36
--- /dev/null
+++ b/gio/gasyncresult.c
@@ -0,0 +1,198 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gasyncresult.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gasyncresult
+ * @short_description: Asynchronous Function Results
+ * @include: gio/gio.h
+ * @see_also: #GSimpleAsyncResult
+ * 
+ * Provides a base class for implementing asynchronous function results.
+ * 
+ * Asynchronous operations are broken up into two separate operations
+ * which are chained together by a #GAsyncReadyCallback. To begin
+ * an asynchronous operation, provide a #GAsyncReadyCallback to the 
+ * asynchronous function. This callback will be triggered when the 
+ * operation has completed, and will be passed a #GAsyncResult instance 
+ * filled with the details of the operation's success or failure, the 
+ * object the asynchronous function was started for and any error codes 
+ * returned. The asynchronous callback function is then expected to call 
+ * the corresponding "_finish()" function with the object the function 
+ * was called for, and the #GAsyncResult instance, and optionally, 
+ * an @error to grab any error conditions that may have occurred.
+ * 
+ * The purpose of the "_finish()" function is to take the generic 
+ * result of type #GAsyncResult and return the specific result
+ * that the operation in question yields (e.g. a #GFileEnumerator for
+ * a "enumerate children" operation). If the result or error status
+ * of the operation is not needed, there is no need to call the
+ * "_finish()" function, GIO will take care of cleaning up the
+ * result and error information after the #GAsyncReadyCallback 
+ * returns. It is also allowed to take a reference to the #GAsyncResult and
+ * call "_finish()" later.
+ * 
+ * Example of a typical asynchronous operation flow:
+ * |[
+ * void _theoretical_frobnitz_async (Theoretical         *t, 
+ *                                   GCancellable        *c, 
+ *                                   GAsyncReadyCallback *cb,
+ *                                   gpointer             u);
+ *
+ * gboolean _theoretical_frobnitz_finish (Theoretical   *t,
+ *                                        GAsyncResult  *res,
+ *                                        GError       **e);
+ *
+ * static void 
+ * frobnitz_result_func (GObject      *source_object, 
+ *			 GAsyncResult *res, 
+ *			 gpointer      user_data)
+ * {
+ *   gboolean success = FALSE;
+ *
+ *   success = _theoretical_frobnitz_finish (source_object, res, NULL);
+ *
+ *   if (success)
+ *     g_printf ("Hurray!\n");
+ *   else 
+ *     g_printf ("Uh oh!\n");
+ *
+ *   /<!-- -->* ... *<!-- -->/
+ *
+ * }
+ *
+ * int main (int argc, void *argv[])
+ * {
+ *    /<!-- -->* ... *<!-- -->/
+ *
+ *    _theoretical_frobnitz_async (theoretical_data, 
+ *                                 NULL, 
+ *                                 frobnitz_result_func, 
+ *                                 NULL);
+ *
+ *    /<!-- -->* ... *<!-- -->/
+ * }
+ * ]|
+ *
+ * The callback for an asynchronous operation is called only once, and is
+ * always called, even in the case of a cancelled operation. On cancellation
+ * the result is a %G_IO_ERROR_CANCELLED error.
+ * 
+ * Some ascynchronous operations are implemented using synchronous calls. These
+ * are run in a separate thread, if #GThread has been initialized, but otherwise they
+ * are sent to the Main Event Loop and processed in an idle function. So, if you
+ * truly need asynchronous operations, make sure to initialize #GThread.
+ **/
+
+static void g_async_result_base_init (gpointer g_class);
+static void g_async_result_class_init (gpointer g_class,
+				       gpointer class_data);
+
+GType
+g_async_result_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo async_result_info =
+      {
+        sizeof (GAsyncResultIface), /* class_size */
+	g_async_result_base_init,   /* base_init */
+	NULL,		            /* base_finalize */
+	g_async_result_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GAsyncResult"),
+				&async_result_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_async_result_class_init (gpointer g_class,
+			   gpointer class_data)
+{
+}
+
+static void
+g_async_result_base_init (gpointer g_class)
+{
+}
+
+/**
+ * g_async_result_get_user_data:
+ * @res: a #GAsyncResult.
+ * 
+ * Gets the user data from a #GAsyncResult.
+ * 
+ * Returns: the user data for @res. 
+ **/
+gpointer
+g_async_result_get_user_data (GAsyncResult *res)
+{
+  GAsyncResultIface *iface;
+
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  iface = G_ASYNC_RESULT_GET_IFACE (res);
+
+  return (* iface->get_user_data) (res);
+}
+
+/**
+ * g_async_result_get_source_object:
+ * @res: a #GAsyncResult.
+ * 
+ * Gets the source object from a #GAsyncResult.
+ * 
+ * Returns: the source object for the @res.
+ **/
+GObject *
+g_async_result_get_source_object (GAsyncResult *res)
+{
+  GAsyncResultIface *iface;
+
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  iface = G_ASYNC_RESULT_GET_IFACE (res);
+
+  return (* iface->get_source_object) (res);
+}
+
+#define __G_ASYNC_RESULT_C__
+#include "gioaliasdef.c"
diff --git a/gio/gasyncresult.h b/gio/gasyncresult.h
new file mode 100644
index 0000000..1614586
--- /dev/null
+++ b/gio/gasyncresult.h
@@ -0,0 +1,73 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_ASYNC_RESULT_H__
+#define __G_ASYNC_RESULT_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_ASYNC_RESULT            (g_async_result_get_type ())
+#define G_ASYNC_RESULT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ASYNC_RESULT, GAsyncResult))
+#define G_IS_ASYNC_RESULT(obj)	       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ASYNC_RESULT))
+#define G_ASYNC_RESULT_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ASYNC_RESULT, GAsyncResultIface))
+
+/**
+ * GAsyncResult:
+ *
+ * Holds results information for an asynchronous operation,
+ * usually passed directly to a asynchronous _finish() operation.
+ **/
+typedef struct _GAsyncResultIface    GAsyncResultIface;
+
+
+/**
+ * GAsyncResultIface:
+ * @g_iface: The parent interface.
+ * @get_user_data: Gets the user data passed to the callback.
+ * @get_source_object: Gets the source object that issued the asynchronous operation.
+ *
+ * Interface definition for #GAsyncResult.
+ **/
+struct _GAsyncResultIface
+{
+  GTypeInterface g_iface;
+
+  /* Virtual Table */
+
+  gpointer  (* get_user_data)     (GAsyncResult *async_result);
+  GObject * (* get_source_object) (GAsyncResult *async_result);
+};
+
+GType    g_async_result_get_type          (void) G_GNUC_CONST;
+
+gpointer g_async_result_get_user_data     (GAsyncResult *res);
+GObject *g_async_result_get_source_object (GAsyncResult *res);
+
+G_END_DECLS
+
+#endif /* __G_ASYNC_RESULT_H__ */
diff --git a/gio/gbufferedinputstream.c b/gio/gbufferedinputstream.c
new file mode 100644
index 0000000..d49b528
--- /dev/null
+++ b/gio/gbufferedinputstream.c
@@ -0,0 +1,1375 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Jürg Billeter
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org> 
+ */
+
+#include "config.h"
+#include "gbufferedinputstream.h"
+#include "ginputstream.h"
+#include "gcancellable.h"
+#include "gasyncresult.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include <string.h>
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gbufferedinputstream
+ * @short_description: Buffered Input Stream
+ * @include: gio/gio.h
+ * @see_also: #GFilterInputStream, #GInputStream
+ * 
+ * Buffered input stream implements #GFilterInputStream and provides 
+ * for buffered reads. 
+ * 
+ * By default, #GBufferedInputStream's buffer size is set at 4 kilobytes.
+ * 
+ * To create a buffered input stream, use g_buffered_input_stream_new(), 
+ * or g_buffered_input_stream_new_sized() to specify the buffer's size at 
+ * construction.
+ * 
+ * To get the size of a buffer within a buffered input stream, use 
+ * g_buffered_input_stream_get_buffer_size(). To change the size of a 
+ * buffered input stream's buffer, use
+ * g_buffered_input_stream_set_buffer_size(). Note that the buffer's size 
+ * cannot be reduced below the size of the data within the buffer.
+ *
+ **/
+
+
+
+#define DEFAULT_BUFFER_SIZE 4096
+
+struct _GBufferedInputStreamPrivate {
+  guint8 *buffer;
+  gsize   len;
+  gsize   pos;
+  gsize   end;
+  GAsyncReadyCallback outstanding_callback;
+};
+
+enum {
+  PROP_0,
+  PROP_BUFSIZE
+};
+
+static void g_buffered_input_stream_set_property  (GObject      *object,
+                                                   guint         prop_id,
+                                                   const GValue *value,
+                                                   GParamSpec   *pspec);
+
+static void g_buffered_input_stream_get_property  (GObject      *object,
+                                                   guint         prop_id,
+                                                   GValue       *value,
+                                                   GParamSpec   *pspec);
+static void g_buffered_input_stream_finalize      (GObject *object);
+
+
+static gssize g_buffered_input_stream_skip             (GInputStream          *stream,
+							gsize                  count,
+							GCancellable          *cancellable,
+							GError               **error);
+static void   g_buffered_input_stream_skip_async       (GInputStream          *stream,
+							gsize                  count,
+							int                    io_priority,
+							GCancellable          *cancellable,
+							GAsyncReadyCallback    callback,
+							gpointer               user_data);
+static gssize g_buffered_input_stream_skip_finish      (GInputStream          *stream,
+							GAsyncResult          *result,
+							GError               **error);
+static gssize g_buffered_input_stream_read             (GInputStream          *stream,
+							void                  *buffer,
+							gsize                  count,
+							GCancellable          *cancellable,
+							GError               **error);
+static void   g_buffered_input_stream_read_async       (GInputStream          *stream,
+							void                  *buffer,
+							gsize                  count,
+							int                    io_priority,
+							GCancellable          *cancellable,
+							GAsyncReadyCallback    callback,
+							gpointer               user_data);
+static gssize g_buffered_input_stream_read_finish      (GInputStream          *stream,
+							GAsyncResult          *result,
+							GError               **error);
+static gssize g_buffered_input_stream_real_fill        (GBufferedInputStream  *stream,
+							gssize                 count,
+							GCancellable          *cancellable,
+							GError               **error);
+static void   g_buffered_input_stream_real_fill_async  (GBufferedInputStream  *stream,
+							gssize                 count,
+							int                    io_priority,
+							GCancellable          *cancellable,
+							GAsyncReadyCallback    callback,
+							gpointer               user_data);
+static gssize g_buffered_input_stream_real_fill_finish (GBufferedInputStream  *stream,
+							GAsyncResult          *result,
+							GError               **error);
+
+static void compact_buffer (GBufferedInputStream *stream);
+
+G_DEFINE_TYPE (GBufferedInputStream,
+               g_buffered_input_stream,
+               G_TYPE_FILTER_INPUT_STREAM)
+
+
+static void
+g_buffered_input_stream_class_init (GBufferedInputStreamClass *klass)
+{
+  GObjectClass *object_class;
+  GInputStreamClass *istream_class;
+  GBufferedInputStreamClass *bstream_class;
+
+  g_type_class_add_private (klass, sizeof (GBufferedInputStreamPrivate));
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->get_property = g_buffered_input_stream_get_property;
+  object_class->set_property = g_buffered_input_stream_set_property;
+  object_class->finalize     = g_buffered_input_stream_finalize;
+
+  istream_class = G_INPUT_STREAM_CLASS (klass);
+  istream_class->skip = g_buffered_input_stream_skip;
+  istream_class->skip_async  = g_buffered_input_stream_skip_async;
+  istream_class->skip_finish = g_buffered_input_stream_skip_finish;
+  istream_class->read_fn = g_buffered_input_stream_read;
+  istream_class->read_async  = g_buffered_input_stream_read_async;
+  istream_class->read_finish = g_buffered_input_stream_read_finish;
+
+  bstream_class = G_BUFFERED_INPUT_STREAM_CLASS (klass);
+  bstream_class->fill = g_buffered_input_stream_real_fill;
+  bstream_class->fill_async = g_buffered_input_stream_real_fill_async;
+  bstream_class->fill_finish = g_buffered_input_stream_real_fill_finish;
+  
+  g_object_class_install_property (object_class,
+                                   PROP_BUFSIZE,
+                                   g_param_spec_uint ("buffer-size",
+                                                      P_("Buffer Size"),
+                                                      P_("The size of the backend buffer"),
+                                                      1,
+                                                      G_MAXUINT,
+                                                      DEFAULT_BUFFER_SIZE,
+                                                      G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+                                                      G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+
+}
+
+/**
+ * g_buffered_input_stream_get_buffer_size:
+ * @stream: #GBufferedInputStream.
+ * 
+ * Gets the size of the input buffer.
+ * 
+ * Returns: the current buffer size.
+ **/
+gsize
+g_buffered_input_stream_get_buffer_size (GBufferedInputStream  *stream)
+{
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), 0);
+
+  return stream->priv->len;
+}
+
+/**
+ * g_buffered_input_stream_set_buffer_size:
+ * @stream: #GBufferedInputStream.
+ * @size: a #gsize.
+ *
+ * Sets the size of the internal buffer of @stream to @size, or to the 
+ * size of the contents of the buffer. The buffer can never be resized 
+ * smaller than its current contents.
+ **/
+void
+g_buffered_input_stream_set_buffer_size (GBufferedInputStream  *stream,
+                                         gsize                  size)
+{
+  GBufferedInputStreamPrivate *priv;
+  gsize in_buffer;
+  guint8 *buffer;
+  
+  g_return_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream));
+
+  priv = stream->priv;
+
+  if (priv->len == size)
+    return;
+
+  if (priv->buffer)
+    {
+      in_buffer = priv->end - priv->pos;
+
+      /* Never resize smaller than current buffer contents */
+      size = MAX (size, in_buffer);
+
+      buffer = g_malloc (size);
+      memcpy (buffer, priv->buffer + priv->pos, in_buffer);
+      priv->len = size;
+      priv->pos = 0;
+      priv->end = in_buffer;
+      g_free (priv->buffer);
+      priv->buffer = buffer;
+    }
+  else
+    {
+      priv->len = size;
+      priv->pos = 0;
+      priv->end = 0;
+      priv->buffer = g_malloc (size);
+    }
+
+  g_object_notify (G_OBJECT (stream), "buffer-size");
+}
+
+static void
+g_buffered_input_stream_set_property (GObject      *object,
+                                      guint         prop_id,
+                                      const GValue *value,
+                                      GParamSpec   *pspec)
+{
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStream        *bstream;
+
+  bstream = G_BUFFERED_INPUT_STREAM (object);
+  priv = bstream->priv;
+
+  switch (prop_id) 
+    {
+    case PROP_BUFSIZE:
+      g_buffered_input_stream_set_buffer_size (bstream, g_value_get_uint (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_buffered_input_stream_get_property (GObject    *object,
+                                      guint       prop_id,
+                                      GValue     *value,
+                                      GParamSpec *pspec)
+{
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStream        *bstream;
+
+  bstream = G_BUFFERED_INPUT_STREAM (object);
+  priv = bstream->priv;
+
+  switch (prop_id)
+    { 
+    case PROP_BUFSIZE:
+      g_value_set_uint (value, priv->len);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_buffered_input_stream_finalize (GObject *object)
+{
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStream        *stream;
+
+  stream = G_BUFFERED_INPUT_STREAM (object);
+  priv = stream->priv;
+
+  g_free (priv->buffer);
+
+  G_OBJECT_CLASS (g_buffered_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_buffered_input_stream_init (GBufferedInputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                              G_TYPE_BUFFERED_INPUT_STREAM,
+                                              GBufferedInputStreamPrivate);
+}
+
+
+/**
+ * g_buffered_input_stream_new:
+ * @base_stream: a #GInputStream.
+ * 
+ * Creates a new #GInputStream from the given @base_stream, with 
+ * a buffer set to the default size (4 kilobytes).
+ *
+ * Returns: a #GInputStream for the given @base_stream.
+ **/
+GInputStream *
+g_buffered_input_stream_new (GInputStream *base_stream)
+{
+  GInputStream *stream;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (base_stream), NULL);
+
+  stream = g_object_new (G_TYPE_BUFFERED_INPUT_STREAM,
+                         "base-stream", base_stream,
+                         NULL);
+
+  return stream;
+}
+
+/**
+ * g_buffered_input_stream_new_sized:
+ * @base_stream: a #GInputStream.
+ * @size: a #gsize.
+ * 
+ * Creates a new #GBufferedInputStream from the given @base_stream, 
+ * with a buffer set to @size.
+ *
+ * Returns: a #GInputStream.
+ **/
+GInputStream *
+g_buffered_input_stream_new_sized (GInputStream *base_stream,
+                                   gsize         size)
+{
+  GInputStream *stream;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (base_stream), NULL);
+
+  stream = g_object_new (G_TYPE_BUFFERED_INPUT_STREAM,
+                         "base-stream", base_stream,
+                         "buffer-size", (guint)size,
+                         NULL);
+
+  return stream;
+}
+
+/**
+ * g_buffered_input_stream_fill:
+ * @stream: #GBufferedInputStream.
+ * @count: the number of bytes that will be read from the stream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore.
+ *
+ * Tries to read @count bytes from the stream into the buffer. 
+ * Will block during this read.
+ * 
+ * If @count is zero, returns zero and does nothing. A value of @count
+ * larger than %G_MAXSSIZE will cause a %G_IO_ERROR_INVALID_ARGUMENT error.
+ *
+ * On success, the number of bytes read into the buffer is returned.
+ * It is not an error if this is not the same as the requested size, as it
+ * can happen e.g. near the end of a file. Zero is returned on end of file
+ * (or if @count is zero),  but never otherwise.
+ *
+ * If @count is -1 then the attempted read size is equal to the number of
+ * bytes that are required to fill the buffer.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. If an
+ * operation was partially finished when the operation was cancelled the
+ * partial result will be returned, without an error.
+ *
+ * On error -1 is returned and @error is set accordingly.
+ * 
+ * For the asynchronous, non-blocking, version of this function, see 
+ * g_buffered_input_stream_fill_async().
+ *
+ * Returns: the number of bytes read into @stream's buffer, up to @count, 
+ *     or -1 on error.
+ **/
+gssize
+g_buffered_input_stream_fill (GBufferedInputStream  *stream,
+                              gssize                 count,
+                              GCancellable          *cancellable,
+                              GError               **error)
+{
+  GBufferedInputStreamClass *class;
+  GInputStream *input_stream;
+  gssize res;
+
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), -1);
+  
+  input_stream = G_INPUT_STREAM (stream);
+  
+  if (count < -1)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Too large count value passed to %s"), G_STRFUNC);
+      return -1;
+    }
+
+  if (!g_input_stream_set_pending (input_stream, error))
+    return -1;
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+  res = class->fill (stream, count, cancellable, error);
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_input_stream_clear_pending (input_stream);
+  
+  return res;
+}
+
+static void
+async_fill_callback_wrapper (GObject      *source_object,
+                             GAsyncResult *res,
+                             gpointer      user_data)
+{
+  GBufferedInputStream *stream = G_BUFFERED_INPUT_STREAM (source_object);
+
+  g_input_stream_clear_pending (G_INPUT_STREAM (stream));
+  (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+/**
+ * g_buffered_input_stream_fill_async:
+ * @stream: #GBufferedInputStream.
+ * @count: the number of bytes that will be read from the stream.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object
+ * @callback: a #GAsyncReadyCallback.
+ * @user_data: a #gpointer.
+ *
+ * Reads data into @stream's buffer asynchronously, up to @count size.
+ * @io_priority can be used to prioritize reads. For the synchronous
+ * version of this function, see g_buffered_input_stream_fill().
+ *
+ * If @count is -1 then the attempted read size is equal to the number
+ * of bytes that are required to fill the buffer.
+ **/
+void
+g_buffered_input_stream_fill_async (GBufferedInputStream *stream,
+                                    gssize                count,
+                                    int                   io_priority,
+                                    GCancellable         *cancellable,
+                                    GAsyncReadyCallback   callback,
+                                    gpointer              user_data)
+{
+  GBufferedInputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream));
+
+  if (count == 0)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  callback,
+					  user_data,
+					  g_buffered_input_stream_fill_async);
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+  
+  if (count < -1)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (stream),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+					   _("Too large count value passed to %s"),
+					   G_STRFUNC);
+      return;
+    }
+  
+  if (!g_input_stream_set_pending (G_INPUT_STREAM (stream), &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+    
+  class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+  
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  class->fill_async (stream, count, io_priority, cancellable,
+                     async_fill_callback_wrapper, user_data);
+}
+
+/**
+ * g_buffered_input_stream_fill_finish:
+ * @stream: a #GBufferedInputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError.
+ *
+ * Finishes an asynchronous read.
+ * 
+ * Returns: a #gssize of the read stream, or %-1 on an error. 
+ **/
+gssize
+g_buffered_input_stream_fill_finish (GBufferedInputStream  *stream,
+                                     GAsyncResult          *result,
+                                     GError               **error)
+{
+  GSimpleAsyncResult *simple;
+  GBufferedInputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), -1);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), -1);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+        return -1;
+
+      /* Special case read of 0 bytes */
+      if (g_simple_async_result_get_source_tag (simple) == g_buffered_input_stream_fill_async)
+        return 0;
+    }
+
+  class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+  return class->fill_finish (stream, result, error);
+}
+
+/**
+ * g_buffered_input_stream_get_available:
+ * @stream: #GBufferedInputStream.
+ * 
+ * Gets the size of the available data within the stream.
+ * 
+ * Returns: size of the available stream. 
+ **/
+gsize
+g_buffered_input_stream_get_available (GBufferedInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), -1);
+
+  return stream->priv->end - stream->priv->pos;
+}
+
+/**
+ * g_buffered_input_stream_peek:
+ * @stream: a #GBufferedInputStream.
+ * @buffer: a pointer to an allocated chunk of memory.
+ * @offset: a #gsize.
+ * @count: a #gsize.
+ * 
+ * Peeks in the buffer, copying data of size @count into @buffer, 
+ * offset @offset bytes.
+ * 
+ * Returns: a #gsize of the number of bytes peeked, or %-1 on error.
+ **/
+gsize
+g_buffered_input_stream_peek (GBufferedInputStream *stream,
+                              void                 *buffer,
+                              gsize                 offset,
+                              gsize                 count)
+{
+  gsize available;
+  gsize end;
+  
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), -1);
+  g_return_val_if_fail (buffer != NULL, -1);
+
+  available = g_buffered_input_stream_get_available (stream);
+
+  if (offset > available)
+    return 0;
+  
+  end = MIN (offset + count, available);
+  count = end - offset;
+  
+  memcpy (buffer, stream->priv->buffer + stream->priv->pos + offset, count);
+  return count;
+}
+
+/**
+ * g_buffered_input_stream_peek_buffer:
+ * @stream: a #GBufferedInputStream.
+ * @count: a #gsize to get the number of bytes available in the buffer.
+ *
+ * Returns the buffer with the currently available bytes. The returned
+ * buffer must not be modified and will become invalid when reading from
+ * the stream or filling the buffer.
+ *
+ * Returns: read-only buffer
+ **/
+const void*
+g_buffered_input_stream_peek_buffer (GBufferedInputStream *stream,
+                                     gsize                *count)
+{
+  GBufferedInputStreamPrivate *priv;
+
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), NULL);
+
+  priv = stream->priv;
+
+  if (count) 
+    *count = priv->end - priv->pos;
+
+  return priv->buffer + priv->pos;
+}
+
+static void
+compact_buffer (GBufferedInputStream *stream)
+{
+  GBufferedInputStreamPrivate *priv;
+  gsize current_size;
+
+  priv = stream->priv;
+
+  current_size = priv->end - priv->pos;
+  
+  g_memmove (priv->buffer, priv->buffer + priv->pos, current_size);
+  
+  priv->pos = 0;
+  priv->end = current_size;
+}
+
+static gssize
+g_buffered_input_stream_real_fill (GBufferedInputStream  *stream,
+                                   gssize                 count,
+                                   GCancellable          *cancellable,
+                                   GError               **error)
+{
+  GBufferedInputStreamPrivate *priv;
+  GInputStream *base_stream;
+  gssize nread;
+  gsize in_buffer;
+
+  priv = stream->priv;
+
+  if (count == -1)
+    count = priv->len;
+  
+  in_buffer = priv->end - priv->pos;
+
+  /* Never fill more than can fit in the buffer */
+  count = MIN (count, priv->len - in_buffer);
+
+  /* If requested length does not fit at end, compact */
+  if (priv->len - priv->end < count)
+    compact_buffer (stream);
+
+  base_stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
+  nread = g_input_stream_read (base_stream,
+                               priv->buffer + priv->end,
+                               count,
+                               cancellable,
+                               error);
+
+  if (nread > 0)
+    priv->end += nread;
+  
+  return nread;
+}
+
+static gssize
+g_buffered_input_stream_skip (GInputStream  *stream,
+                              gsize          count,
+                              GCancellable  *cancellable,
+                              GError       **error)
+{
+  GBufferedInputStream        *bstream;
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStreamClass *class;
+  GInputStream *base_stream;
+  gsize available, bytes_skipped;
+  gssize nread;
+
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+  priv = bstream->priv;
+
+  available = priv->end - priv->pos;
+
+  if (count <= available)
+    {
+      priv->pos += count;
+      return count;
+    }
+
+  /* Full request not available, skip all currently available and 
+   * request refill for more 
+   */
+  
+  priv->pos = 0;
+  priv->end = 0;
+  bytes_skipped = available;
+  count -= available;
+
+  if (bytes_skipped > 0)
+    error = NULL; /* Ignore further errors if we already read some data */
+  
+  if (count > priv->len)
+    {
+      /* Large request, shortcut buffer */
+      
+      base_stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
+
+      nread = g_input_stream_skip (base_stream,
+                                   count,
+                                   cancellable,
+                                   error);
+      
+      if (nread < 0 && bytes_skipped == 0)
+        return -1;
+      
+      if (nread > 0)
+        bytes_skipped += nread;
+      
+      return bytes_skipped;
+    }
+  
+  class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+  nread = class->fill (bstream, priv->len, cancellable, error);
+  
+  if (nread < 0)
+    {
+      if (bytes_skipped == 0)
+        return -1;
+      else
+        return bytes_skipped;
+    }
+  
+  available = priv->end - priv->pos;
+  count = MIN (count, available);
+  
+  bytes_skipped += count;
+  priv->pos += count;
+  
+  return bytes_skipped;
+}
+
+static gssize
+g_buffered_input_stream_read (GInputStream *stream,
+                              void         *buffer,
+                              gsize         count,
+                              GCancellable *cancellable,
+                              GError      **error)
+{
+  GBufferedInputStream        *bstream;
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStreamClass *class;
+  GInputStream *base_stream;
+  gsize available, bytes_read;
+  gssize nread;
+
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+  priv = bstream->priv;
+
+  available = priv->end - priv->pos;
+
+  if (count <= available)
+    {
+      memcpy (buffer, priv->buffer + priv->pos, count);
+      priv->pos += count;
+      return count;
+    }
+  
+  /* Full request not available, read all currently availbile and request refill for more */
+  
+  memcpy (buffer, priv->buffer + priv->pos, available);
+  priv->pos = 0;
+  priv->end = 0;
+  bytes_read = available;
+  count -= available;
+
+  if (bytes_read > 0)
+    error = NULL; /* Ignore further errors if we already read some data */
+  
+  if (count > priv->len)
+    {
+      /* Large request, shortcut buffer */
+      
+      base_stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
+
+      nread = g_input_stream_read (base_stream,
+				   (char *)buffer + bytes_read,
+				   count,
+				   cancellable,
+				   error);
+      
+      if (nread < 0 && bytes_read == 0)
+        return -1;
+      
+      if (nread > 0)
+        bytes_read += nread;
+      
+      return bytes_read;
+    }
+  
+  class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+  nread = class->fill (bstream, priv->len, cancellable, error);
+  if (nread < 0)
+    {
+      if (bytes_read == 0)
+        return -1;
+      else
+        return bytes_read;
+    }
+  
+  available = priv->end - priv->pos;
+  count = MIN (count, available);
+  
+  memcpy ((char *)buffer + bytes_read, (char *)priv->buffer + priv->pos, count);
+  bytes_read += count;
+  priv->pos += count;
+  
+  return bytes_read;
+}
+
+/**
+ * g_buffered_input_stream_read_byte:
+ * @stream: #GBufferedInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore.
+ *
+ * Tries to read a single byte from the stream or the buffer. Will block
+ * during this read.
+ *
+ * On success, the byte read from the stream is returned. On end of stream
+ * -1 is returned but it's not an exceptional error and @error is not set.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. If an
+ * operation was partially finished when the operation was cancelled the
+ * partial result will be returned, without an error.
+ *
+ * On error -1 is returned and @error is set accordingly.
+ * 
+ * Returns: the byte read from the @stream, or -1 on end of stream or error.
+ **/
+int
+g_buffered_input_stream_read_byte (GBufferedInputStream  *stream,
+                                   GCancellable          *cancellable,
+                                   GError               **error)
+{
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStreamClass *class;
+  GInputStream *input_stream;
+  gsize available;
+  gssize nread;
+
+  g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), -1);
+
+  priv = stream->priv;
+  input_stream = G_INPUT_STREAM (stream);
+
+  if (g_input_stream_is_closed (input_stream))
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                           _("Stream is already closed"));
+      return -1;
+    }
+
+  if (!g_input_stream_set_pending (input_stream, error))
+    return -1;
+
+  available = priv->end - priv->pos;
+
+  if (available != 0)
+    {
+      g_input_stream_clear_pending (input_stream);
+      return priv->buffer[priv->pos++];
+    }
+
+  /* Byte not available, request refill for more */
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+
+  priv->pos = 0;
+  priv->end = 0;
+
+  class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+  nread = class->fill (stream, priv->len, cancellable, error);
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+
+  g_input_stream_clear_pending (input_stream);
+
+  if (nread <= 0)
+    return -1; /* error or end of stream */
+
+  return priv->buffer[priv->pos++];
+}
+
+/* ************************** */
+/* Async stuff implementation */
+/* ************************** */
+
+static void
+fill_async_callback (GObject      *source_object,
+                     GAsyncResult *result,
+                     gpointer      user_data)
+{
+  GError *error;
+  gssize res;
+  GSimpleAsyncResult *simple;
+
+  simple = user_data;
+  
+  error = NULL;
+  res = g_input_stream_read_finish (G_INPUT_STREAM (source_object),
+				    result, &error);
+
+  g_simple_async_result_set_op_res_gssize (simple, res);
+  if (res == -1)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+  else
+    {
+      GBufferedInputStreamPrivate *priv;
+      GObject *object;
+
+      object = g_async_result_get_source_object (G_ASYNC_RESULT (simple));
+      priv = G_BUFFERED_INPUT_STREAM (object)->priv;
+
+      g_assert_cmpint (priv->end + res, <=, priv->len);
+      priv->end += res;
+
+      g_object_unref (object);
+    }
+  
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+g_buffered_input_stream_real_fill_async (GBufferedInputStream *stream,
+                                         gssize                count,
+                                         int                   io_priority,
+                                         GCancellable         *cancellable,
+                                         GAsyncReadyCallback   callback,
+                                         gpointer              user_data)
+{
+  GBufferedInputStreamPrivate *priv;
+  GInputStream *base_stream;
+  GSimpleAsyncResult *simple;
+  gsize in_buffer;
+
+  priv = stream->priv;
+
+  if (count == -1)
+    count = priv->len;
+  
+  in_buffer = priv->end - priv->pos;
+
+  /* Never fill more than can fit in the buffer */
+  count = MIN (count, priv->len - in_buffer);
+
+  /* If requested length does not fit at end, compact */
+  if (priv->len - priv->end < count)
+    compact_buffer (stream);
+
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+				      callback, user_data,
+				      g_buffered_input_stream_real_fill_async);
+  
+  base_stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
+  g_input_stream_read_async (base_stream,
+			     priv->buffer + priv->end,
+			     count,
+			     io_priority,
+			     cancellable,
+			     fill_async_callback,
+			     simple);
+}
+
+static gssize
+g_buffered_input_stream_real_fill_finish (GBufferedInputStream *stream,
+					  GAsyncResult         *result,
+					  GError              **error)
+{
+  GSimpleAsyncResult *simple;
+  gssize nread;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_buffered_input_stream_real_fill_async);
+  
+  nread = g_simple_async_result_get_op_res_gssize (simple);
+  return nread;
+}
+
+typedef struct {
+  gssize bytes_read;
+  gssize count;
+  void *buffer;
+} ReadAsyncData;
+
+static void 
+free_read_async_data (gpointer _data)
+{
+  ReadAsyncData *data = _data;
+  g_slice_free (ReadAsyncData, data);
+}
+
+static void
+large_read_callback (GObject *source_object,
+		     GAsyncResult *result,
+		     gpointer user_data)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+  ReadAsyncData *data;
+  GError *error;
+  gssize nread;
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  
+  error = NULL;
+  nread = g_input_stream_read_finish (G_INPUT_STREAM (source_object),
+				      result, &error);
+
+  /* Only report the error if we've not already read some data */
+  if (nread < 0 && data->bytes_read == 0)
+    g_simple_async_result_set_from_error (simple, error);
+  
+  if (nread > 0)
+    data->bytes_read += nread;
+  
+  if (error)
+    g_error_free (error);
+  
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+read_fill_buffer_callback (GObject *source_object,
+			   GAsyncResult *result,
+			   gpointer user_data)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+  GBufferedInputStream *bstream;
+  GBufferedInputStreamPrivate *priv;
+  ReadAsyncData *data;
+  GError *error;
+  gssize nread;
+  gsize available;
+
+  bstream = G_BUFFERED_INPUT_STREAM (source_object);
+  priv = bstream->priv;
+  
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  
+  error = NULL;
+  nread = g_buffered_input_stream_fill_finish (bstream,
+					       result, &error);
+  
+  if (nread < 0 && data->bytes_read == 0)
+    g_simple_async_result_set_from_error (simple, error);
+
+
+  if (nread > 0)
+    {
+      available = priv->end - priv->pos;
+      data->count = MIN (data->count, available);
+      
+      memcpy ((char *)data->buffer + data->bytes_read, (char *)priv->buffer + priv->pos, data->count);
+      data->bytes_read += data->count;
+      priv->pos += data->count;
+    }
+
+  if (error)
+    g_error_free (error);
+  
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+g_buffered_input_stream_read_async (GInputStream              *stream,
+                                    void                      *buffer,
+                                    gsize                      count,
+                                    int                        io_priority,
+                                    GCancellable              *cancellable,
+                                    GAsyncReadyCallback        callback,
+                                    gpointer                   user_data)
+{
+  GBufferedInputStream *bstream;
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStreamClass *class;
+  GInputStream *base_stream;
+  gsize available;
+  GSimpleAsyncResult *simple;
+  ReadAsyncData *data;
+
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+  priv = bstream->priv;
+
+  data = g_slice_new (ReadAsyncData);
+  data->buffer = buffer;
+  data->bytes_read = 0;
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+				      callback, user_data,
+				      g_buffered_input_stream_read_async);
+  g_simple_async_result_set_op_res_gpointer (simple, data, free_read_async_data);
+  
+  available = priv->end - priv->pos;
+  
+  if (count <= available)
+    {
+      memcpy (buffer, priv->buffer + priv->pos, count);
+      priv->pos += count;
+      data->bytes_read = count;
+      
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+
+
+  /* Full request not available, read all currently availbile and request refill for more */
+  
+  memcpy (buffer, priv->buffer + priv->pos, available);
+  priv->pos = 0;
+  priv->end = 0;
+  
+  count -= available;
+  
+  data->bytes_read = available;
+  data->count = count;
+
+  if (count > priv->len)
+    {
+      /* Large request, shortcut buffer */
+      
+      base_stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
+      
+      g_input_stream_read_async (base_stream,
+				 (char *)buffer + data->bytes_read,
+				 count,
+				 io_priority, cancellable,
+				 large_read_callback,
+				 simple);
+    }
+  else
+    {
+      class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+      class->fill_async (bstream, priv->len, io_priority, cancellable,
+			 read_fill_buffer_callback, simple);
+    }
+}
+
+static gssize
+g_buffered_input_stream_read_finish (GInputStream   *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  ReadAsyncData *data;
+  
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_buffered_input_stream_read_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  
+  return data->bytes_read;
+}
+
+typedef struct {
+  gssize bytes_skipped;
+  gssize count;
+} SkipAsyncData;
+
+static void 
+free_skip_async_data (gpointer _data)
+{
+  SkipAsyncData *data = _data;
+  g_slice_free (SkipAsyncData, data);
+}
+
+static void
+large_skip_callback (GObject *source_object,
+		     GAsyncResult *result,
+		     gpointer user_data)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+  SkipAsyncData *data;
+  GError *error;
+  gssize nread;
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  
+  error = NULL;
+  nread = g_input_stream_skip_finish (G_INPUT_STREAM (source_object),
+				      result, &error);
+
+  /* Only report the error if we've not already read some data */
+  if (nread < 0 && data->bytes_skipped == 0)
+    g_simple_async_result_set_from_error (simple, error);
+  
+  if (nread > 0)
+    data->bytes_skipped += nread;
+  
+  if (error)
+    g_error_free (error);
+  
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+skip_fill_buffer_callback (GObject *source_object,
+			   GAsyncResult *result,
+			   gpointer user_data)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+  GBufferedInputStream *bstream;
+  GBufferedInputStreamPrivate *priv;
+  SkipAsyncData *data;
+  GError *error;
+  gssize nread;
+  gsize available;
+
+  bstream = G_BUFFERED_INPUT_STREAM (source_object);
+  priv = bstream->priv;
+  
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  
+  error = NULL;
+  nread = g_buffered_input_stream_fill_finish (bstream,
+					       result, &error);
+  
+  if (nread < 0 && data->bytes_skipped == 0)
+    g_simple_async_result_set_from_error (simple, error);
+
+
+  if (nread > 0)
+    {
+      available = priv->end - priv->pos;
+      data->count = MIN (data->count, available);
+      
+      data->bytes_skipped += data->count;
+      priv->pos += data->count;
+    }
+
+  if (error)
+    g_error_free (error);
+  
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+g_buffered_input_stream_skip_async (GInputStream              *stream,
+                                    gsize                      count,
+                                    int                        io_priority,
+                                    GCancellable              *cancellable,
+                                    GAsyncReadyCallback        callback,
+                                    gpointer                   user_data)
+{
+  GBufferedInputStream *bstream;
+  GBufferedInputStreamPrivate *priv;
+  GBufferedInputStreamClass *class;
+  GInputStream *base_stream;
+  gsize available;
+  GSimpleAsyncResult *simple;
+  SkipAsyncData *data;
+
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+  priv = bstream->priv;
+
+  data = g_slice_new (SkipAsyncData);
+  data->bytes_skipped = 0;
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+				      callback, user_data,
+				      g_buffered_input_stream_skip_async);
+  g_simple_async_result_set_op_res_gpointer (simple, data, free_skip_async_data);
+  
+  available = priv->end - priv->pos;
+  
+  if (count <= available)
+    {
+      priv->pos += count;
+      data->bytes_skipped = count;
+      
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+
+
+  /* Full request not available, skip all currently availbile and request refill for more */
+  
+  priv->pos = 0;
+  priv->end = 0;
+  
+  count -= available;
+  
+  data->bytes_skipped = available;
+  data->count = count;
+
+  if (count > priv->len)
+    {
+      /* Large request, shortcut buffer */
+      
+      base_stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
+      
+      g_input_stream_skip_async (base_stream,
+				 count,
+				 io_priority, cancellable,
+				 large_skip_callback,
+				 simple);
+    }
+  else
+    {
+      class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
+      class->fill_async (bstream, priv->len, io_priority, cancellable,
+			 skip_fill_buffer_callback, simple);
+    }
+}
+
+static gssize
+g_buffered_input_stream_skip_finish (GInputStream   *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  SkipAsyncData *data;
+  
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_buffered_input_stream_skip_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  
+  return data->bytes_skipped;
+}
+
+
+#define __G_BUFFERED_INPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gbufferedinputstream.h b/gio/gbufferedinputstream.h
new file mode 100644
index 0000000..029426c
--- /dev/null
+++ b/gio/gbufferedinputstream.h
@@ -0,0 +1,123 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_BUFFERED_INPUT_STREAM_H__
+#define __G_BUFFERED_INPUT_STREAM_H__
+
+#include <gio/gfilterinputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_BUFFERED_INPUT_STREAM         (g_buffered_input_stream_get_type ())
+#define G_BUFFERED_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStream))
+#define G_BUFFERED_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStreamClass))
+#define G_IS_BUFFERED_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_BUFFERED_INPUT_STREAM))
+#define G_IS_BUFFERED_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_BUFFERED_INPUT_STREAM))
+#define G_BUFFERED_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_BUFFERED_INPUT_STREAM, GBufferedInputStreamClass))
+
+/**
+ * GBufferedInputStream:
+ *
+ * Implements #GFilterInputStream with a sized input buffer.
+ **/
+typedef struct _GBufferedInputStreamClass    GBufferedInputStreamClass;
+typedef struct _GBufferedInputStreamPrivate  GBufferedInputStreamPrivate;
+
+struct _GBufferedInputStream
+{
+  GFilterInputStream parent_instance;
+
+  /*< private >*/
+  GBufferedInputStreamPrivate *priv;
+};
+
+struct _GBufferedInputStreamClass
+{
+  GFilterInputStreamClass parent_class;
+
+  gssize   (* fill)        (GBufferedInputStream *stream,
+			    gssize                count,
+			    GCancellable         *cancellable,
+			    GError              **error);
+
+  /* Async ops: (optional in derived classes) */
+  void     (* fill_async)  (GBufferedInputStream *stream,
+			    gssize                count,
+			    int                   io_priority,
+			    GCancellable         *cancellable,
+			    GAsyncReadyCallback   callback,
+			    gpointer              user_data);
+  gssize   (* fill_finish) (GBufferedInputStream *stream,
+			    GAsyncResult         *result,
+			    GError              **error);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+
+GType         g_buffered_input_stream_get_type        (void) G_GNUC_CONST;
+GInputStream* g_buffered_input_stream_new             (GInputStream          *base_stream);
+GInputStream* g_buffered_input_stream_new_sized       (GInputStream          *base_stream,
+						       gsize                  size);
+
+gsize         g_buffered_input_stream_get_buffer_size (GBufferedInputStream  *stream);
+void          g_buffered_input_stream_set_buffer_size (GBufferedInputStream  *stream,
+						       gsize                  size);
+gsize         g_buffered_input_stream_get_available   (GBufferedInputStream  *stream);
+gsize         g_buffered_input_stream_peek            (GBufferedInputStream  *stream,
+						       void                  *buffer,
+						       gsize                  offset,
+						       gsize                  count);
+const void*   g_buffered_input_stream_peek_buffer     (GBufferedInputStream  *stream,
+						       gsize                 *count);
+
+gssize        g_buffered_input_stream_fill            (GBufferedInputStream  *stream,
+						       gssize                 count,
+						       GCancellable          *cancellable,
+						       GError               **error);
+void          g_buffered_input_stream_fill_async      (GBufferedInputStream  *stream,
+						       gssize                 count,
+						       int                    io_priority,
+						       GCancellable          *cancellable,
+						       GAsyncReadyCallback    callback,
+						       gpointer               user_data);
+gssize        g_buffered_input_stream_fill_finish     (GBufferedInputStream  *stream,
+						       GAsyncResult          *result,
+						       GError               **error);
+
+int           g_buffered_input_stream_read_byte       (GBufferedInputStream  *stream,
+						       GCancellable          *cancellable,
+						       GError               **error);
+
+G_END_DECLS
+
+#endif /* __G_BUFFERED_INPUT_STREAM_H__ */
diff --git a/gio/gbufferedoutputstream.c b/gio/gbufferedoutputstream.c
new file mode 100644
index 0000000..5bb6a98
--- /dev/null
+++ b/gio/gbufferedoutputstream.c
@@ -0,0 +1,773 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org> 
+ */
+
+#include "config.h"
+#include "gbufferedoutputstream.h"
+#include "goutputstream.h"
+#include "gsimpleasyncresult.h"
+#include "string.h"
+#include "glibintl.h"
+
+#include <gioalias.h>
+
+/**
+ * SECTION:gbufferedoutputstream
+ * @short_description: Buffered Output Stream
+ * @include: gio/gio.h
+ * @see_also: #GFilterOutputStream, #GOutputStream
+ * 
+ * Buffered output stream implements #GFilterOutputStream and provides 
+ * for buffered writes. 
+ * 
+ * By default, #GBufferedOutputStream's buffer size is set at 4 kilobytes.
+ * 
+ * To create a buffered output stream, use g_buffered_output_stream_new(), 
+ * or g_buffered_output_stream_new_sized() to specify the buffer's size 
+ * at construction.
+ * 
+ * To get the size of a buffer within a buffered input stream, use 
+ * g_buffered_output_stream_get_buffer_size(). To change the size of a 
+ * buffered output stream's buffer, use 
+ * g_buffered_output_stream_set_buffer_size(). Note that the buffer's 
+ * size cannot be reduced below the size of the data within the buffer.
+ **/
+
+#define DEFAULT_BUFFER_SIZE 4096
+
+struct _GBufferedOutputStreamPrivate {
+  guint8 *buffer; 
+  gsize   len;
+  goffset pos;
+  gboolean auto_grow;
+};
+
+enum {
+  PROP_0,
+  PROP_BUFSIZE,
+  PROP_AUTO_GROW
+};
+
+static void     g_buffered_output_stream_set_property (GObject      *object,
+                                                       guint         prop_id,
+                                                       const GValue *value,
+                                                       GParamSpec   *pspec);
+
+static void     g_buffered_output_stream_get_property (GObject    *object,
+                                                       guint       prop_id,
+                                                       GValue     *value,
+                                                       GParamSpec *pspec);
+static void     g_buffered_output_stream_finalize     (GObject *object);
+
+
+static gssize   g_buffered_output_stream_write        (GOutputStream *stream,
+                                                       const void    *buffer,
+                                                       gsize          count,
+                                                       GCancellable  *cancellable,
+                                                       GError       **error);
+static gboolean g_buffered_output_stream_flush        (GOutputStream    *stream,
+                                                       GCancellable  *cancellable,
+                                                       GError          **error);
+static gboolean g_buffered_output_stream_close        (GOutputStream  *stream,
+                                                       GCancellable   *cancellable,
+                                                       GError        **error);
+
+static void     g_buffered_output_stream_write_async  (GOutputStream        *stream,
+                                                       const void           *buffer,
+                                                       gsize                 count,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              data);
+static gssize   g_buffered_output_stream_write_finish (GOutputStream        *stream,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+static void     g_buffered_output_stream_flush_async  (GOutputStream        *stream,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              data);
+static gboolean g_buffered_output_stream_flush_finish (GOutputStream        *stream,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+static void     g_buffered_output_stream_close_async  (GOutputStream        *stream,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              data);
+static gboolean g_buffered_output_stream_close_finish (GOutputStream        *stream,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+
+G_DEFINE_TYPE (GBufferedOutputStream,
+               g_buffered_output_stream,
+               G_TYPE_FILTER_OUTPUT_STREAM)
+
+
+static void
+g_buffered_output_stream_class_init (GBufferedOutputStreamClass *klass)
+{
+  GObjectClass *object_class;
+  GOutputStreamClass *ostream_class;
+ 
+  g_type_class_add_private (klass, sizeof (GBufferedOutputStreamPrivate));
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->get_property = g_buffered_output_stream_get_property;
+  object_class->set_property = g_buffered_output_stream_set_property;
+  object_class->finalize     = g_buffered_output_stream_finalize;
+
+  ostream_class = G_OUTPUT_STREAM_CLASS (klass);
+  ostream_class->write_fn = g_buffered_output_stream_write;
+  ostream_class->flush = g_buffered_output_stream_flush;
+  ostream_class->close_fn = g_buffered_output_stream_close;
+  ostream_class->write_async  = g_buffered_output_stream_write_async;
+  ostream_class->write_finish = g_buffered_output_stream_write_finish;
+  ostream_class->flush_async  = g_buffered_output_stream_flush_async;
+  ostream_class->flush_finish = g_buffered_output_stream_flush_finish;
+  ostream_class->close_async  = g_buffered_output_stream_close_async;
+  ostream_class->close_finish = g_buffered_output_stream_close_finish;
+
+  g_object_class_install_property (object_class,
+                                   PROP_BUFSIZE,
+                                   g_param_spec_uint ("buffer-size",
+                                                      P_("Buffer Size"),
+                                                      P_("The size of the backend buffer"),
+                                                      1,
+                                                      G_MAXUINT,
+                                                      DEFAULT_BUFFER_SIZE,
+                                                      G_PARAM_READWRITE|G_PARAM_CONSTRUCT|
+                                                      G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property (object_class,
+                                   PROP_AUTO_GROW,
+                                   g_param_spec_boolean ("auto-grow",
+                                                         P_("Auto-grow"),
+                                                         P_("Whether the buffer should automatically grow"),
+                                                         FALSE,
+                                                         G_PARAM_READWRITE|
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+}
+
+/**
+ * g_buffered_output_stream_get_buffer_size:
+ * @stream: a #GBufferedOutputStream.
+ * 
+ * Gets the size of the buffer in the @stream.
+ * 
+ * Returns: the current size of the buffer.
+ **/
+gsize
+g_buffered_output_stream_get_buffer_size (GBufferedOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_BUFFERED_OUTPUT_STREAM (stream), -1);
+
+  return stream->priv->len;
+}
+
+/**
+ * g_buffered_output_stream_set_buffer_size:
+ * @stream: a #GBufferedOutputStream.
+ * @size: a #gsize.
+ *
+ * Sets the size of the internal buffer to @size.
+ **/    
+void
+g_buffered_output_stream_set_buffer_size (GBufferedOutputStream *stream,
+                                          gsize                  size)
+{
+  GBufferedOutputStreamPrivate *priv;
+  guint8 *buffer;
+  
+  g_return_if_fail (G_IS_BUFFERED_OUTPUT_STREAM (stream));
+
+  priv = stream->priv;
+  
+  if (size == priv->len)
+    return;
+
+  if (priv->buffer)
+    {
+      size = MAX (size, priv->pos);
+
+      buffer = g_malloc (size);
+      memcpy (buffer, priv->buffer, priv->pos);
+      g_free (priv->buffer);
+      priv->buffer = buffer;
+      priv->len = size;
+      /* Keep old pos */
+    }
+  else
+    {
+      priv->buffer = g_malloc (size);
+      priv->len = size;
+      priv->pos = 0;
+    }
+
+  g_object_notify (G_OBJECT (stream), "buffer-size");
+}
+
+/**
+ * g_buffered_output_stream_get_auto_grow:
+ * @stream: a #GBufferedOutputStream.
+ * 
+ * Checks if the buffer automatically grows as data is added.
+ * 
+ * Returns: %TRUE if the @stream's buffer automatically grows,
+ * %FALSE otherwise.
+ **/  
+gboolean
+g_buffered_output_stream_get_auto_grow (GBufferedOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_BUFFERED_OUTPUT_STREAM (stream), FALSE);
+
+  return stream->priv->auto_grow;
+}
+
+/**
+ * g_buffered_output_stream_set_auto_grow:
+ * @stream: a #GBufferedOutputStream.
+ * @auto_grow: a #gboolean.
+ *
+ * Sets whether or not the @stream's buffer should automatically grow.
+ * If @auto_grow is true, then each write will just make the buffer
+ * larger, and you must manually flush the buffer to actually write out
+ * the data to the underlying stream.
+ **/
+void
+g_buffered_output_stream_set_auto_grow (GBufferedOutputStream *stream,
+                                        gboolean               auto_grow)
+{
+  GBufferedOutputStreamPrivate *priv;
+  g_return_if_fail (G_IS_BUFFERED_OUTPUT_STREAM (stream));
+  priv = stream->priv;
+  auto_grow = auto_grow != FALSE;
+  if (priv->auto_grow != auto_grow)
+    {
+      priv->auto_grow = auto_grow;
+      g_object_notify (G_OBJECT (stream), "auto-grow");
+    }
+}
+
+static void
+g_buffered_output_stream_set_property (GObject      *object,
+                                       guint         prop_id,
+                                       const GValue *value,
+                                       GParamSpec   *pspec)
+{
+  GBufferedOutputStream *stream;
+
+  stream = G_BUFFERED_OUTPUT_STREAM (object);
+
+  switch (prop_id) 
+    {
+    case PROP_BUFSIZE:
+      g_buffered_output_stream_set_buffer_size (stream, g_value_get_uint (value));
+      break;    
+
+    case PROP_AUTO_GROW:
+      g_buffered_output_stream_set_auto_grow (stream, g_value_get_boolean (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_buffered_output_stream_get_property (GObject    *object,
+                                       guint       prop_id,
+                                       GValue     *value,
+                                       GParamSpec *pspec)
+{
+  GBufferedOutputStream *buffered_stream;
+  GBufferedOutputStreamPrivate *priv;
+
+  buffered_stream = G_BUFFERED_OUTPUT_STREAM (object);
+  priv = buffered_stream->priv;
+
+  switch (prop_id)
+    {
+    case PROP_BUFSIZE:
+      g_value_set_uint (value, priv->len);
+      break;
+
+    case PROP_AUTO_GROW:
+      g_value_set_boolean (value, priv->auto_grow);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_buffered_output_stream_finalize (GObject *object)
+{
+  GBufferedOutputStream *stream;
+  GBufferedOutputStreamPrivate *priv;
+
+  stream = G_BUFFERED_OUTPUT_STREAM (object);
+  priv = stream->priv;
+
+  g_free (priv->buffer);
+
+  G_OBJECT_CLASS (g_buffered_output_stream_parent_class)->finalize (object);
+}
+
+static void
+g_buffered_output_stream_init (GBufferedOutputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                              G_TYPE_BUFFERED_OUTPUT_STREAM,
+                                              GBufferedOutputStreamPrivate);
+
+}
+
+/**
+ * g_buffered_output_stream_new:
+ * @base_stream: a #GOutputStream.
+ * 
+ * Creates a new buffered output stream for a base stream.
+ * 
+ * Returns: a #GOutputStream for the given @base_stream.
+ **/  
+GOutputStream *
+g_buffered_output_stream_new (GOutputStream *base_stream)
+{
+  GOutputStream *stream;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (base_stream), NULL);
+
+  stream = g_object_new (G_TYPE_BUFFERED_OUTPUT_STREAM,
+                         "base-stream", base_stream,
+                         NULL);
+
+  return stream;
+}
+
+/**
+ * g_buffered_output_stream_new_sized:
+ * @base_stream: a #GOutputStream.
+ * @size: a #gsize.
+ * 
+ * Creates a new buffered output stream with a given buffer size.
+ * 
+ * Returns: a #GOutputStream with an internal buffer set to @size.
+ **/  
+GOutputStream *
+g_buffered_output_stream_new_sized (GOutputStream *base_stream,
+                                    gsize          size)
+{
+  GOutputStream *stream;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (base_stream), NULL);
+
+  stream = g_object_new (G_TYPE_BUFFERED_OUTPUT_STREAM,
+                         "base-stream", base_stream,
+                         "buffer-size", size,
+                         NULL);
+
+  return stream;
+}
+
+static gboolean
+flush_buffer (GBufferedOutputStream  *stream,
+              GCancellable           *cancellable,
+              GError                 **error)
+{
+  GBufferedOutputStreamPrivate *priv;
+  GOutputStream                *base_stream;
+  gboolean                      res;
+  gsize                         bytes_written;
+  gsize                         count;
+
+  priv = stream->priv;
+  bytes_written = 0;
+  base_stream = G_FILTER_OUTPUT_STREAM (stream)->base_stream;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (base_stream), FALSE);
+
+  res = g_output_stream_write_all (base_stream,
+                                   priv->buffer,
+                                   priv->pos,
+                                   &bytes_written,
+                                   cancellable,
+                                   error);
+
+  count = priv->pos - bytes_written;
+
+  if (count > 0)
+    g_memmove (priv->buffer, priv->buffer + bytes_written, count);
+  
+  priv->pos -= bytes_written;
+
+  return res;
+}
+
+static gssize
+g_buffered_output_stream_write  (GOutputStream *stream,
+                                 const void    *buffer,
+                                 gsize          count,
+                                 GCancellable  *cancellable,
+                                 GError       **error)
+{
+  GBufferedOutputStream        *bstream;
+  GBufferedOutputStreamPrivate *priv;
+  gboolean res;
+  gsize    n;
+  gsize new_size;
+
+  bstream = G_BUFFERED_OUTPUT_STREAM (stream);
+  priv = bstream->priv;
+
+  n = priv->len - priv->pos;
+
+  if (priv->auto_grow && n < count)
+    {
+      new_size = MAX (priv->len * 2, priv->len + count);
+      g_buffered_output_stream_set_buffer_size (bstream, new_size);
+    }
+  else if (n == 0)
+    {
+      res = flush_buffer (bstream, cancellable, error);
+      
+      if (res == FALSE)
+	return -1;
+    }
+
+  n = priv->len - priv->pos;
+  
+  count = MIN (count, n);
+  memcpy (priv->buffer + priv->pos, buffer, count);
+  priv->pos += count;
+
+  return count;
+}
+
+static gboolean
+g_buffered_output_stream_flush (GOutputStream  *stream,
+                                GCancellable   *cancellable,
+                                GError        **error)
+{
+  GBufferedOutputStream *bstream;
+  GBufferedOutputStreamPrivate *priv;
+  GOutputStream                *base_stream;
+  gboolean res;
+
+  bstream = G_BUFFERED_OUTPUT_STREAM (stream);
+  priv = bstream->priv;
+  base_stream = G_FILTER_OUTPUT_STREAM (stream)->base_stream;
+
+  res = flush_buffer (bstream, cancellable, error);
+
+  if (res == FALSE)
+    return FALSE;
+
+  res = g_output_stream_flush (base_stream, cancellable, error);
+
+  return res;
+}
+
+static gboolean
+g_buffered_output_stream_close (GOutputStream  *stream,
+                                GCancellable   *cancellable,
+                                GError        **error)
+{
+  GBufferedOutputStream        *bstream;
+  GBufferedOutputStreamPrivate *priv;
+  GOutputStream                *base_stream;
+  gboolean                      res;
+
+  bstream = G_BUFFERED_OUTPUT_STREAM (stream);
+  priv = bstream->priv;
+  base_stream = G_FILTER_OUTPUT_STREAM (bstream)->base_stream;
+
+  res = flush_buffer (bstream, cancellable, error);
+
+  if (g_filter_output_stream_get_close_base_stream (G_FILTER_OUTPUT_STREAM (stream)))
+    {
+      /* report the first error but still close the stream */
+      if (res)
+        res = g_output_stream_close (base_stream, cancellable, error); 
+      else
+        g_output_stream_close (base_stream, cancellable, NULL); 
+    }
+
+  return res;
+}
+
+/* ************************** */
+/* Async stuff implementation */
+/* ************************** */
+
+/* TODO: This should be using the base class async ops, not threads */
+
+typedef struct {
+
+  guint flush_stream : 1;
+  guint close_stream : 1;
+
+} FlushData;
+
+static void
+free_flush_data (gpointer data)
+{
+  g_slice_free (FlushData, data);
+}
+
+/* This function is used by all three (i.e. 
+ * _write, _flush, _close) functions since
+ * all of them will need to flush the buffer
+ * and so closing and writing is just a special
+ * case of flushing + some addition stuff */
+static void
+flush_buffer_thread (GSimpleAsyncResult *result,
+                     GObject            *object,
+                     GCancellable       *cancellable)
+{
+  GBufferedOutputStream *stream;
+  GOutputStream *base_stream;
+  FlushData     *fdata;
+  gboolean       res;
+  GError        *error = NULL;
+
+  stream = G_BUFFERED_OUTPUT_STREAM (object);
+  fdata = g_simple_async_result_get_op_res_gpointer (result);
+  base_stream = G_FILTER_OUTPUT_STREAM (stream)->base_stream;
+
+  res = flush_buffer (stream, cancellable, &error);
+
+  /* if flushing the buffer didn't work don't even bother
+   * to flush the stream but just report that error */
+  if (res && fdata->flush_stream)
+    res = g_output_stream_flush (base_stream, cancellable, &error);
+
+  if (fdata->close_stream) 
+    {
+     
+      /* if flushing the buffer or the stream returned 
+       * an error report that first error but still try 
+       * close the stream */
+      if (g_filter_output_stream_get_close_base_stream (G_FILTER_OUTPUT_STREAM (stream)))
+        {
+          if (res == FALSE)
+            g_output_stream_close (base_stream, cancellable, NULL);
+          else 
+            res = g_output_stream_close (base_stream, cancellable, &error);
+        }
+    }
+
+  if (res == FALSE)
+    {
+      g_simple_async_result_set_from_error (result, error);
+      g_error_free (error);
+    }
+}
+
+typedef struct {
+    
+  FlushData fdata;
+
+  gsize  count;
+  const void  *buffer;
+
+} WriteData;
+
+static void 
+free_write_data (gpointer data)
+{
+  g_slice_free (WriteData, data);
+}
+
+static void
+g_buffered_output_stream_write_async (GOutputStream        *stream,
+                                      const void           *buffer,
+                                      gsize                 count,
+                                      int                   io_priority,
+                                      GCancellable         *cancellable,
+                                      GAsyncReadyCallback   callback,
+                                      gpointer              data)
+{
+  GBufferedOutputStream *buffered_stream;
+  GBufferedOutputStreamPrivate *priv;
+  GSimpleAsyncResult *res;
+  WriteData *wdata;
+
+  buffered_stream = G_BUFFERED_OUTPUT_STREAM (stream);
+  priv = buffered_stream->priv;
+
+  wdata = g_slice_new (WriteData);
+  wdata->count  = count;
+  wdata->buffer = buffer;
+
+  res = g_simple_async_result_new (G_OBJECT (stream),
+                                   callback,
+                                   data,
+                                   g_buffered_output_stream_write_async);
+
+  g_simple_async_result_set_op_res_gpointer (res, wdata, free_write_data);
+
+  /* if we have space left directly call the
+   * callback (from idle) otherwise schedule a buffer 
+   * flush in the thread. In both cases the actual
+   * copying of the data to the buffer will be done in
+   * the write_finish () func since that should
+   * be fast enough */
+  if (priv->len - priv->pos > 0)
+    {
+      g_simple_async_result_complete_in_idle (res);
+    }
+  else
+    {
+      wdata->fdata.flush_stream = FALSE;
+      wdata->fdata.close_stream = FALSE;
+      g_simple_async_result_run_in_thread (res, 
+                                           flush_buffer_thread, 
+                                           io_priority,
+                                           cancellable);
+      g_object_unref (res);
+    }
+}
+
+static gssize
+g_buffered_output_stream_write_finish (GOutputStream        *stream,
+                                       GAsyncResult         *result,
+                                       GError              **error)
+{
+  GBufferedOutputStreamPrivate *priv;
+  GBufferedOutputStream        *buffered_stream;
+  GSimpleAsyncResult *simple;
+  WriteData          *wdata;
+  gssize              count;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  buffered_stream = G_BUFFERED_OUTPUT_STREAM (stream);
+  priv = buffered_stream->priv;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+            g_buffered_output_stream_write_async);
+
+  wdata = g_simple_async_result_get_op_res_gpointer (simple);
+
+  /* Now do the real copying of data to the buffer */
+  count = priv->len - priv->pos; 
+  count = MIN (wdata->count, count);
+
+  memcpy (priv->buffer + priv->pos, wdata->buffer, count);
+  
+  priv->pos += count;
+
+  return count;
+}
+
+static void
+g_buffered_output_stream_flush_async (GOutputStream        *stream,
+                                      int                   io_priority,
+                                      GCancellable         *cancellable,
+                                      GAsyncReadyCallback   callback,
+                                      gpointer              data)
+{
+  GSimpleAsyncResult *res;
+  FlushData          *fdata;
+
+  fdata = g_slice_new (FlushData);
+  fdata->flush_stream = TRUE;
+  fdata->close_stream = FALSE;
+
+  res = g_simple_async_result_new (G_OBJECT (stream),
+                                   callback,
+                                   data,
+                                   g_buffered_output_stream_flush_async);
+
+  g_simple_async_result_set_op_res_gpointer (res, fdata, free_flush_data);
+
+  g_simple_async_result_run_in_thread (res, 
+                                       flush_buffer_thread, 
+                                       io_priority,
+                                       cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_buffered_output_stream_flush_finish (GOutputStream        *stream,
+                                       GAsyncResult         *result,
+                                       GError              **error)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+            g_buffered_output_stream_flush_async);
+
+  return TRUE;
+}
+
+static void
+g_buffered_output_stream_close_async (GOutputStream        *stream,
+                                      int                   io_priority,
+                                      GCancellable         *cancellable,
+                                      GAsyncReadyCallback   callback,
+                                      gpointer              data)
+{
+  GSimpleAsyncResult *res;
+  FlushData          *fdata;
+
+  fdata = g_slice_new (FlushData);
+  fdata->close_stream = TRUE;
+
+  res = g_simple_async_result_new (G_OBJECT (stream),
+                                   callback,
+                                   data,
+                                   g_buffered_output_stream_close_async);
+
+  g_simple_async_result_set_op_res_gpointer (res, fdata, free_flush_data);
+
+  g_simple_async_result_run_in_thread (res, 
+                                       flush_buffer_thread, 
+                                       io_priority,
+                                       cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_buffered_output_stream_close_finish (GOutputStream        *stream,
+                                       GAsyncResult         *result,
+                                       GError              **error)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+            g_buffered_output_stream_close_async);
+
+  return TRUE;
+}
+
+#define __G_BUFFERED_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gbufferedoutputstream.h b/gio/gbufferedoutputstream.h
new file mode 100644
index 0000000..106bca7
--- /dev/null
+++ b/gio/gbufferedoutputstream.h
@@ -0,0 +1,82 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_BUFFERED_OUTPUT_STREAM_H__
+#define __G_BUFFERED_OUTPUT_STREAM_H__
+
+#include <gio/gfilteroutputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_BUFFERED_OUTPUT_STREAM         (g_buffered_output_stream_get_type ())
+#define G_BUFFERED_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStream))
+#define G_BUFFERED_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStreamClass))
+#define G_IS_BUFFERED_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_BUFFERED_OUTPUT_STREAM))
+#define G_IS_BUFFERED_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_BUFFERED_OUTPUT_STREAM))
+#define G_BUFFERED_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_BUFFERED_OUTPUT_STREAM, GBufferedOutputStreamClass))
+
+/**
+ * GBufferedOutputStream:
+ * @parent_class: The parent class.
+ *
+ * An implementation of #GFilterOutputStream with a sized buffer.
+ **/
+typedef struct _GBufferedOutputStreamClass    GBufferedOutputStreamClass;
+typedef struct _GBufferedOutputStreamPrivate  GBufferedOutputStreamPrivate;
+
+struct _GBufferedOutputStream
+{
+  GFilterOutputStream parent_instance;
+
+  /*< protected >*/
+  GBufferedOutputStreamPrivate *priv;
+};
+
+struct _GBufferedOutputStreamClass
+{
+  GFilterOutputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+};
+
+
+GType          g_buffered_output_stream_get_type        (void) G_GNUC_CONST;
+GOutputStream* g_buffered_output_stream_new             (GOutputStream         *base_stream);
+GOutputStream* g_buffered_output_stream_new_sized       (GOutputStream         *base_stream,
+							 gsize                  size);
+gsize          g_buffered_output_stream_get_buffer_size (GBufferedOutputStream *stream);
+void           g_buffered_output_stream_set_buffer_size (GBufferedOutputStream *stream,
+							 gsize                  size);
+gboolean       g_buffered_output_stream_get_auto_grow   (GBufferedOutputStream *stream);
+void           g_buffered_output_stream_set_auto_grow   (GBufferedOutputStream *stream,
+							 gboolean               auto_grow);
+
+G_END_DECLS
+
+#endif /* __G_BUFFERED_OUTPUT_STREAM_H__ */
diff --git a/gio/gcancellable.c b/gio/gcancellable.c
new file mode 100644
index 0000000..dedc3bd
--- /dev/null
+++ b/gio/gcancellable.c
@@ -0,0 +1,488 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <fcntl.h>
+#include <gioerror.h>
+#ifdef G_OS_WIN32
+#include <io.h>
+#ifndef pipe
+#define pipe(fds) _pipe(fds, 4096, _O_BINARY)
+#endif
+#endif
+#include "gcancellable.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gcancellable
+ * @short_description: Thread-safe Operation Cancellation Stack
+ * @include: gio/gio.h
+ *
+ * GCancellable is a thread-safe operation cancellation stack used 
+ * throughout GIO to allow for cancellation of synchronous and
+ * asynchronous operations.
+ */
+
+enum {
+  CANCELLED,
+  LAST_SIGNAL
+};
+
+struct _GCancellable
+{
+  GObject parent_instance;
+
+  guint cancelled : 1;
+  guint allocated_pipe : 1;
+  int cancel_pipe[2];
+
+#ifdef G_OS_WIN32
+  GIOChannel *read_channel;
+#endif
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (GCancellable, g_cancellable, G_TYPE_OBJECT);
+
+static GStaticPrivate current_cancellable = G_STATIC_PRIVATE_INIT;
+G_LOCK_DEFINE_STATIC(cancellable);
+  
+static void
+g_cancellable_finalize (GObject *object)
+{
+  GCancellable *cancellable = G_CANCELLABLE (object);
+
+  if (cancellable->cancel_pipe[0] != -1)
+    close (cancellable->cancel_pipe[0]);
+  
+  if (cancellable->cancel_pipe[1] != -1)
+    close (cancellable->cancel_pipe[1]);
+
+#ifdef G_OS_WIN32
+  if (cancellable->read_channel)
+    g_io_channel_unref (cancellable->read_channel);
+#endif
+
+  G_OBJECT_CLASS (g_cancellable_parent_class)->finalize (object);
+}
+
+static void
+g_cancellable_class_init (GCancellableClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_cancellable_finalize;
+
+  /**
+   * GCancellable::cancelled:
+   * @cancellable: a #GCancellable.
+   * 
+   * Emitted when the operation has been cancelled.
+   * 
+   * Can be used by implementations of cancellable operations. If the
+   * operation is cancelled from another thread, the signal will be
+   * emitted in the thread that cancelled the operation, not the
+   * thread that is running the operation.
+   *
+   * Note that disconnecting from this signal (or any signal) in a
+   * multi-threaded program is prone to race conditions, and it is
+   * possible that a signal handler may be invoked even
+   * <emphasis>after</emphasis> a call to
+   * g_signal_handler_disconnect() for that handler has already
+   * returned. Therefore, code such as the following is wrong in a
+   * multi-threaded program:
+   *
+   * |[
+   *     my_data = my_data_new (...);
+   *     id = g_signal_connect (cancellable, "cancelled",
+   *                            G_CALLBACK (cancelled_handler), my_data);
+   *
+   *     /<!-- -->* cancellable operation here... *<!-- -->/
+   *
+   *     g_signal_handler_disconnect (cancellable, id);
+   *     my_data_free (my_data);  /<!-- -->* WRONG! *<!-- -->/
+   *     /<!-- -->* if g_cancellable_cancel() is called from another
+   *      * thread, cancelled_handler() may be running at this point,
+   *      * so it's not safe to free my_data.
+   *      *<!-- -->/
+   * ]|
+   *
+   * The correct way to free data (or otherwise clean up temporary
+   * state) in this situation is to use g_signal_connect_data() (or
+   * g_signal_connect_closure()) to connect to the signal, and do the
+   * cleanup from a #GClosureNotify, which will not be called until
+   * after the signal handler is both removed and not running:
+   *
+   * |[
+   * static void
+   * cancelled_disconnect_notify (gpointer my_data, GClosure *closure)
+   * {
+   *   my_data_free (my_data);
+   * }
+   *
+   * ...
+   *
+   *     my_data = my_data_new (...);
+   *     id = g_signal_connect_data (cancellable, "cancelled",
+   *                                 G_CALLBACK (cancelled_handler), my_data,
+   *                                 cancelled_disconnect_notify, 0);
+   *
+   *     /<!-- -->* cancellable operation here... *<!-- -->/
+   *
+   *     g_signal_handler_disconnect (cancellable, id);
+   *     /<!-- -->* cancelled_disconnect_notify() may or may not have
+   *      * already been called at this point, so the code has to treat
+   *      * my_data as though it has been freed.
+   *      *<!-- -->/
+   * ]|
+   */
+  signals[CANCELLED] =
+    g_signal_new (I_("cancelled"),
+		  G_TYPE_FROM_CLASS (gobject_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GCancellableClass, cancelled),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__VOID,
+		  G_TYPE_NONE, 0);
+  
+}
+
+static void
+set_fd_nonblocking (int fd)
+{
+#ifdef F_GETFL
+  glong fcntl_flags;
+  fcntl_flags = fcntl (fd, F_GETFL);
+
+#ifdef O_NONBLOCK
+  fcntl_flags |= O_NONBLOCK;
+#else
+  fcntl_flags |= O_NDELAY;
+#endif
+
+  fcntl (fd, F_SETFL, fcntl_flags);
+#endif
+}
+
+static void
+g_cancellable_open_pipe (GCancellable *cancellable)
+{
+  if (pipe (cancellable->cancel_pipe) == 0)
+    {
+      /* Make them nonblocking, just to be sure we don't block
+       * on errors and stuff
+       */
+      set_fd_nonblocking (cancellable->cancel_pipe[0]);
+      set_fd_nonblocking (cancellable->cancel_pipe[1]);
+    }
+  else
+    g_warning ("Failed to create pipe for GCancellable. Out of file descriptors?");
+}
+
+static void
+g_cancellable_init (GCancellable *cancellable)
+{
+  cancellable->cancel_pipe[0] = -1;
+  cancellable->cancel_pipe[1] = -1;
+}
+
+/**
+ * g_cancellable_new:
+ * 
+ * Creates a new #GCancellable object.
+ *
+ * Applications that want to start one or more operations
+ * that should be cancellable should create a #GCancellable
+ * and pass it to the operations.
+ *
+ * One #GCancellable can be used in multiple consecutive
+ * operations, but not in multiple concurrent operations.
+ *  
+ * Returns: a #GCancellable.
+ **/
+GCancellable *
+g_cancellable_new (void)
+{
+  return g_object_new (G_TYPE_CANCELLABLE, NULL);
+}
+
+/**
+ * g_cancellable_push_current:
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * 
+ * Pushes @cancellable onto the cancellable stack. The current
+ * cancllable can then be recieved using g_cancellable_get_current().
+ *
+ * This is useful when implementing cancellable operations in
+ * code that does not allow you to pass down the cancellable object.
+ *
+ * This is typically called automatically by e.g. #GFile operations,
+ * so you rarely have to call this yourself.
+ **/
+void
+g_cancellable_push_current (GCancellable *cancellable)
+{
+  GSList *l;
+
+  g_return_if_fail (cancellable != NULL);
+  
+  l = g_static_private_get (&current_cancellable);
+  l = g_slist_prepend (l, cancellable);
+  g_static_private_set (&current_cancellable, l, NULL);
+}
+
+/**
+ * g_cancellable_pop_current:
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ *
+ * Pops @cancellable off the cancellable stack (verifying that @cancellable 
+ * is on the top of the stack).
+ **/
+void
+g_cancellable_pop_current (GCancellable *cancellable)
+{
+  GSList *l;
+  
+  l = g_static_private_get (&current_cancellable);
+  
+  g_return_if_fail (l != NULL);
+  g_return_if_fail (l->data == cancellable);
+
+  l = g_slist_delete_link (l, l);
+  g_static_private_set (&current_cancellable, l, NULL);
+}
+
+/**
+ * g_cancellable_get_current:
+ * 
+ * Gets the top cancellable from the stack.
+ * 
+ * Returns: a #GCancellable from the top of the stack, or %NULL
+ * if the stack is empty. 
+ **/
+GCancellable *
+g_cancellable_get_current  (void)
+{
+  GSList *l;
+  
+  l = g_static_private_get (&current_cancellable);
+  if (l == NULL)
+    return NULL;
+
+  return G_CANCELLABLE (l->data);
+}
+
+/**
+ * g_cancellable_reset:
+ * @cancellable: a #GCancellable object.
+ * 
+ * Resets @cancellable to its uncancelled state. 
+ **/
+void 
+g_cancellable_reset (GCancellable *cancellable)
+{
+  g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+
+  G_LOCK(cancellable);
+  /* Make sure we're not leaving old cancel state around */
+  if (cancellable->cancelled)
+    {
+      char ch;
+#ifdef G_OS_WIN32
+      if (cancellable->read_channel)
+	{
+	  gsize bytes_read;
+	  g_io_channel_read_chars (cancellable->read_channel, &ch, 1,
+				   &bytes_read, NULL);
+	}
+      else
+#endif
+      if (cancellable->cancel_pipe[0] != -1)
+	read (cancellable->cancel_pipe[0], &ch, 1);
+      cancellable->cancelled = FALSE;
+    }
+  G_UNLOCK(cancellable);
+}
+
+/**
+ * g_cancellable_is_cancelled:
+ * @cancellable: a #GCancellable or NULL.
+ * 
+ * Checks if a cancellable job has been cancelled.
+ * 
+ * Returns: %TRUE if @cancellable is cancelled, 
+ * FALSE if called with %NULL or if item is not cancelled. 
+ **/
+gboolean
+g_cancellable_is_cancelled (GCancellable *cancellable)
+{
+  return cancellable != NULL && cancellable->cancelled;
+}
+
+/**
+ * g_cancellable_set_error_if_cancelled:
+ * @cancellable: a #GCancellable object.
+ * @error: #GError to append error state to.
+ * 
+ * If the @cancellable is cancelled, sets the error to notify
+ * that the operation was cancelled.
+ * 
+ * Returns: %TRUE if @cancellable was cancelled, %FALSE if it was not.
+ **/
+gboolean
+g_cancellable_set_error_if_cancelled (GCancellable  *cancellable,
+				      GError       **error)
+{
+  if (g_cancellable_is_cancelled (cancellable))
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_CANCELLED,
+                           _("Operation was cancelled"));
+      return TRUE;
+    }
+  
+  return FALSE;
+}
+
+/**
+ * g_cancellable_get_fd:
+ * @cancellable: a #GCancellable.
+ * 
+ * Gets the file descriptor for a cancellable job. This can be used to
+ * implement cancellable operations on Unix systems. The returned fd will
+ * turn readable when @cancellable is cancelled.
+ *
+ * See also g_cancellable_make_pollfd().
+ *
+ * Returns: A valid file descriptor. %-1 if the file descriptor 
+ * is not supported, or on errors. 
+ **/
+int
+g_cancellable_get_fd (GCancellable *cancellable)
+{
+  int fd;
+  if (cancellable == NULL)
+    return -1;
+  
+  G_LOCK(cancellable);
+  if (!cancellable->allocated_pipe)
+    {
+      cancellable->allocated_pipe = TRUE;
+      g_cancellable_open_pipe (cancellable);
+    }
+  
+  fd = cancellable->cancel_pipe[0];
+  G_UNLOCK(cancellable);
+  
+  return fd;
+}
+
+/**
+ * g_cancellable_make_pollfd:
+ * @cancellable: a #GCancellable.
+ * @pollfd: a pointer to a #GPollFD
+ * 
+ * Creates a #GPollFD corresponding to @cancellable; this can be passed
+ * to g_poll() and used to poll for cancellation.
+ **/
+void
+g_cancellable_make_pollfd (GCancellable *cancellable, GPollFD *pollfd)
+{
+  g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+  g_return_if_fail (pollfd != NULL);
+
+#ifdef G_OS_WIN32
+  if (!cancellable->read_channel)
+    {
+      int fd = g_cancellable_get_fd (cancellable);
+      cancellable->read_channel = g_io_channel_win32_new_fd (fd);
+      g_io_channel_set_buffered (cancellable->read_channel, FALSE);
+      g_io_channel_set_flags (cancellable->read_channel,
+			      G_IO_FLAG_NONBLOCK, NULL);
+      g_io_channel_set_encoding (cancellable->read_channel, NULL, NULL);
+    }
+  g_io_channel_win32_make_pollfd (cancellable->read_channel, G_IO_IN, pollfd);
+  /* (We need to keep cancellable->read_channel around, because it's
+   * keeping track of state related to the pollfd.)
+   */
+#else /* !G_OS_WIN32 */
+  pollfd->fd = g_cancellable_get_fd (cancellable);
+  pollfd->events = G_IO_IN;
+#endif /* G_OS_WIN32 */
+  pollfd->revents = 0;
+}
+
+/**
+ * g_cancellable_cancel:
+ * @cancellable: a #GCancellable object.
+ * 
+ * Will set @cancellable to cancelled, and will emit the
+ * #GCancellable::cancelled signal. (However, see the warning about
+ * race conditions in the documentation for that signal if you are
+ * planning to connect to it.)
+ *
+ * This function is thread-safe. In other words, you can safely call
+ * it from a thread other than the one running the operation that was
+ * passed the @cancellable.
+ *
+ * The convention within gio is that cancelling an asynchronous
+ * operation causes it to complete asynchronously. That is, if you
+ * cancel the operation from the same thread in which it is running,
+ * then the operation's #GAsyncReadyCallback will not be invoked until
+ * the application returns to the main loop.
+ **/
+void
+g_cancellable_cancel (GCancellable *cancellable)
+{
+  gboolean cancel;
+
+  cancel = FALSE;
+  
+  G_LOCK(cancellable);
+  if (cancellable != NULL &&
+      !cancellable->cancelled)
+    {
+      char ch = 'x';
+      cancel = TRUE;
+      cancellable->cancelled = TRUE;
+      if (cancellable->cancel_pipe[1] != -1)
+	write (cancellable->cancel_pipe[1], &ch, 1);
+    }
+  G_UNLOCK(cancellable);
+
+  if (cancel)
+    {
+      g_object_ref (cancellable);
+      g_signal_emit (cancellable, signals[CANCELLED], 0);
+      g_object_unref (cancellable);
+    }
+}
+
+#define __G_CANCELLABLE_C__
+#include "gioaliasdef.c"
diff --git a/gio/gcancellable.h b/gio/gcancellable.h
new file mode 100644
index 0000000..c327fe7
--- /dev/null
+++ b/gio/gcancellable.h
@@ -0,0 +1,87 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_CANCELLABLE_H__
+#define __G_CANCELLABLE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_CANCELLABLE         (g_cancellable_get_type ())
+#define G_CANCELLABLE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_CANCELLABLE, GCancellable))
+#define G_CANCELLABLE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_CANCELLABLE, GCancellableClass))
+#define G_IS_CANCELLABLE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_CANCELLABLE))
+#define G_IS_CANCELLABLE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_CANCELLABLE))
+#define G_CANCELLABLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_CANCELLABLE, GCancellableClass))
+
+/**
+ * GCancellable:
+ *
+ * Allows actions to be cancelled.
+ */
+typedef struct _GCancellableClass   GCancellableClass;
+
+struct _GCancellableClass
+{
+  GObjectClass parent_class;
+
+  void (* cancelled) (GCancellable *cancellable);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType         g_cancellable_get_type               (void) G_GNUC_CONST;
+
+GCancellable *g_cancellable_new                    (void);
+
+/* These are only safe to call inside a cancellable op */
+gboolean      g_cancellable_is_cancelled           (GCancellable  *cancellable);
+gboolean      g_cancellable_set_error_if_cancelled (GCancellable  *cancellable,
+						    GError       **error);
+
+int           g_cancellable_get_fd                 (GCancellable  *cancellable);
+void          g_cancellable_make_pollfd            (GCancellable  *cancellable,
+						    GPollFD       *pollfd);
+
+GCancellable *g_cancellable_get_current            (void);
+void          g_cancellable_push_current           (GCancellable  *cancellable);
+void          g_cancellable_pop_current            (GCancellable  *cancellable);
+void          g_cancellable_reset                  (GCancellable  *cancellable);
+
+
+/* This is safe to call from another thread */
+void          g_cancellable_cancel       (GCancellable  *cancellable);
+
+G_END_DECLS
+
+#endif /* __G_CANCELLABLE_H__ */
diff --git a/gio/gcontenttype.c b/gio/gcontenttype.c
new file mode 100644
index 0000000..3c7b16f
--- /dev/null
+++ b/gio/gcontenttype.c
@@ -0,0 +1,1671 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "gcontenttypeprivate.h"
+#include "gthemedicon.h"
+#include "gicon.h"
+#include "gfile.h"
+#include "gfileenumerator.h"
+#include "gfileinfo.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gcontenttype
+ * @short_description: Platform-specific content typing
+ * @include: gio/gio.h
+ *
+ * A content type is a platform specific string that defines the type
+ * of a file. On unix it is a mime type, on win32 it is an extension string
+ * like ".doc", ".txt" or a percieved string like "audio". Such strings
+ * can be looked up in the registry at HKEY_CLASSES_ROOT.
+ **/
+
+#ifdef G_OS_WIN32
+
+#include <windows.h>
+
+static char *
+get_registry_classes_key (const char    *subdir,
+			  const wchar_t *key_name)
+{
+  wchar_t *wc_key;
+  HKEY reg_key = NULL;
+  DWORD key_type;
+  DWORD nbytes;
+  char *value_utf8;
+
+  value_utf8 = NULL;
+  
+  nbytes = 0;
+  wc_key = g_utf8_to_utf16 (subdir, -1, NULL, NULL, NULL);
+  if (RegOpenKeyExW (HKEY_CLASSES_ROOT, wc_key, 0,
+		     KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS &&
+      RegQueryValueExW (reg_key, key_name, 0,
+			&key_type, NULL, &nbytes) == ERROR_SUCCESS &&
+      (key_type == REG_SZ || key_type == REG_EXPAND_SZ))
+    {
+      wchar_t *wc_temp = g_new (wchar_t, (nbytes+1)/2 + 1);
+      RegQueryValueExW (reg_key, key_name, 0,
+			&key_type, (LPBYTE) wc_temp, &nbytes);
+      wc_temp[nbytes/2] = '\0';
+      if (key_type == REG_EXPAND_SZ)
+        {
+          wchar_t dummy[1];
+          int len = ExpandEnvironmentStringsW (wc_temp, dummy, 1);
+          if (len > 0)
+            {
+              wchar_t *wc_temp_expanded = g_new (wchar_t, len);
+              if (ExpandEnvironmentStringsW (wc_temp, wc_temp_expanded, len) == len)
+                value_utf8 = g_utf16_to_utf8 (wc_temp_expanded, -1, NULL, NULL, NULL);
+              g_free (wc_temp_expanded);
+            }
+        }
+      else
+        {
+          value_utf8 = g_utf16_to_utf8 (wc_temp, -1, NULL, NULL, NULL);
+        }
+      g_free (wc_temp);
+      
+    }
+  g_free (wc_key);
+  
+  if (reg_key != NULL)
+    RegCloseKey (reg_key);
+
+  return value_utf8;
+}
+
+gboolean
+g_content_type_equals (const char *type1,
+		       const char *type2)
+{
+  char *progid1, *progid2;
+  gboolean res;
+  
+  g_return_val_if_fail (type1 != NULL, FALSE);
+  g_return_val_if_fail (type2 != NULL, FALSE);
+
+  if (g_ascii_strcasecmp (type1, type2) == 0)
+    return TRUE;
+
+  res = FALSE;
+  progid1 = get_registry_classes_key (type1, NULL);
+  progid2 = get_registry_classes_key (type2, NULL);
+  if (progid1 != NULL && progid2 != NULL &&
+      strcmp (progid1, progid2) == 0)
+    res = TRUE;
+  g_free (progid1);
+  g_free (progid2);
+  
+  return res;
+}
+
+gboolean
+g_content_type_is_a (const char *type,
+		     const char *supertype)
+{
+  gboolean res;
+  char *value_utf8;
+
+  g_return_val_if_fail (type != NULL, FALSE);
+  g_return_val_if_fail (supertype != NULL, FALSE);
+
+  if (g_content_type_equals (type, supertype))
+    return TRUE;
+
+  res = FALSE;
+  value_utf8 = get_registry_classes_key (type, L"PerceivedType");
+  if (value_utf8 && strcmp (value_utf8, supertype) == 0)
+    res = TRUE;
+  g_free (value_utf8);
+  
+  return res;
+}
+
+gboolean
+g_content_type_is_unknown (const char *type)
+{
+  g_return_val_if_fail (type != NULL, FALSE);
+
+  return strcmp ("*", type) == 0;
+}
+
+char *
+g_content_type_get_description (const char *type)
+{
+  char *progid;
+  char *description;
+
+  g_return_val_if_fail (type != NULL, NULL);
+
+  progid = get_registry_classes_key (type, NULL);
+  if (progid)
+    {
+      description = get_registry_classes_key (progid, NULL);
+      g_free (progid);
+
+      if (description)
+	return description;
+    }
+
+  if (g_content_type_is_unknown (type))
+    return g_strdup (_("Unknown type"));
+  return g_strdup_printf (_("%s filetype"), type);
+}
+
+char *
+g_content_type_get_mime_type (const char *type)
+{
+  char *mime;
+
+  g_return_val_if_fail (type != NULL, NULL);
+
+  mime = get_registry_classes_key (type, L"Content Type");
+  if (mime)
+    return mime;
+  else if (g_content_type_is_unknown (type))
+    return g_strdup ("application/octet-stream");
+  else if (*type == '.')
+    return g_strdup_printf ("application/x-ext-%s", type+1);
+  /* TODO: Map "image" to "image/ *", etc? */
+
+  return g_strdup ("application/octet-stream");
+}
+
+G_LOCK_DEFINE_STATIC (_type_icons);
+static GHashTable *_type_icons = NULL;
+
+GIcon *
+g_content_type_get_icon (const char *type)
+{
+  GIcon *themed_icon;
+  char *name = NULL;
+
+  g_return_val_if_fail (type != NULL, NULL);
+
+  /* In the Registry icons are the default value of
+     HKEY_CLASSES_ROOT\<progid>\DefaultIcon with typical values like:
+     <type>: <value>
+     REG_EXPAND_SZ: %SystemRoot%\System32\Wscript.exe,3
+     REG_SZ: shimgvw.dll,3
+  */
+  G_LOCK (_type_icons);
+  if (!_type_icons)
+    _type_icons = g_hash_table_new (g_str_hash, g_str_equal);
+  name = g_hash_table_lookup (_type_icons, type);
+  if (!name && type[0] == '.')
+    {
+      /* double lookup by extension */
+      gchar *key = get_registry_classes_key (type, NULL);
+      if (!key)
+        key = g_strconcat (type+1, "file\\DefaultIcon", NULL);
+      else
+        {
+	  gchar *key2 = g_strconcat (key, "\\DefaultIcon", NULL);
+	  g_free (key);
+	  key = key2;
+	}
+      name = get_registry_classes_key (key, NULL);
+      if (name && strcmp (name, "%1") == 0)
+        {
+	  g_free (name);
+	  name = NULL;
+	}
+      if (name)
+        g_hash_table_insert (_type_icons, g_strdup (type), g_strdup (name));
+      g_free (key);
+    }
+
+  /* icon-name similar to how it was with gtk-2-12 */
+  if (name)
+    {
+      themed_icon = g_themed_icon_new (name);
+    }
+  else
+    {
+      /* if not found an icon fall back to gtk-builtins */
+      name = strcmp (type, "inode/directory") == 0 ? "gtk-directory" : 
+	                   g_content_type_can_be_executable (type) ? "gtk-execute" : "gtk-file";
+      g_hash_table_insert (_type_icons, g_strdup (type), g_strdup (name));
+      themed_icon = g_themed_icon_new_with_default_fallbacks (name);
+    }
+  G_UNLOCK (_type_icons);
+
+  return G_ICON (themed_icon);
+}
+
+gboolean
+g_content_type_can_be_executable (const char *type)
+{
+  g_return_val_if_fail (type != NULL, FALSE);
+
+  if (strcmp (type, ".exe") == 0 ||
+      strcmp (type, ".com") == 0 ||
+      strcmp (type, ".bat") == 0)
+    return TRUE;
+
+  /* TODO: Also look at PATHEXT, which lists the extensions for
+   * "scripts" in addition to those for true binary executables.
+   *
+   * (PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH for me
+   * right now, for instance). And in a sense, all associated file
+   * types are "executable" on Windows... You can just type foo.jpg as
+   * a command name in cmd.exe, and it will run the application
+   * associated with .jpg. Hard to say what this API actually means
+   * with "executable".
+   */
+
+  return FALSE;
+}
+
+static gboolean
+looks_like_text (const guchar *data, 
+                 gsize         data_size)
+{
+  gsize i;
+  guchar c;
+  for (i = 0; i < data_size; i++)
+    {
+      c = data[i];
+      if (g_ascii_iscntrl (c) && !g_ascii_isspace (c))
+	return FALSE;
+    }
+  return TRUE;
+}
+
+char *
+g_content_type_from_mime_type (const char *mime_type)
+{
+  char *key, *content_type;
+
+  g_return_val_if_fail (mime_type != NULL, NULL);
+
+  key = g_strconcat ("MIME\\DataBase\\Content Type\\", mime_type, NULL);
+  content_type = get_registry_classes_key (key, L"Extension");
+  g_free (key);
+
+  return content_type;
+}
+
+char *
+g_content_type_guess (const char   *filename,
+		      const guchar *data,
+		      gsize         data_size,
+		      gboolean     *result_uncertain)
+{
+  char *basename;
+  char *type;
+  char *dot;
+
+  type = NULL;
+
+  if (filename)
+    {
+      basename = g_path_get_basename (filename);
+      dot = strrchr (basename, '.');
+      if (dot)
+	type = g_strdup (dot);
+      g_free (basename);
+    }
+
+  if (type)
+    return type;
+
+  if (data && looks_like_text (data, data_size))
+    return g_strdup (".txt");
+
+  return g_strdup ("*");
+}
+
+GList *
+g_content_types_get_registered (void)
+{
+  DWORD index;
+  wchar_t keyname[256];
+  DWORD key_len;
+  char *key_utf8;
+  GList *types;
+
+  types = NULL;
+  index = 0;
+  key_len = 256;
+  while (RegEnumKeyExW(HKEY_CLASSES_ROOT,
+		       index,
+		       keyname,
+		       &key_len,
+		       NULL,
+		       NULL,
+		       NULL,
+		       NULL) == ERROR_SUCCESS)
+    {
+      key_utf8 = g_utf16_to_utf8 (keyname, -1, NULL, NULL, NULL);
+      if (key_utf8)
+	{
+	  if (*key_utf8 == '.')
+	    types = g_list_prepend (types, key_utf8);
+	  else
+	    g_free (key_utf8);
+	}
+      index++;
+      key_len = 256;
+    }
+  
+  return g_list_reverse (types);
+}
+
+char **
+g_content_type_guess_for_tree (GFile *root)
+{
+  /* FIXME: implement */
+  return NULL;
+}
+
+#else /* !G_OS_WIN32 - Unix specific version */
+
+#include <dirent.h>
+
+#define XDG_PREFIX _gio_xdg
+#include "xdgmime/xdgmime.h"
+
+/* We lock this mutex whenever we modify global state in this module.  */
+G_LOCK_DEFINE_STATIC (gio_xdgmime);
+
+gsize
+_g_unix_content_type_get_sniff_len (void)
+{
+  gsize size;
+
+  G_LOCK (gio_xdgmime);
+  size = xdg_mime_get_max_buffer_extents ();
+  G_UNLOCK (gio_xdgmime);
+
+  return size;
+}
+
+char *
+_g_unix_content_type_unalias (const char *type)
+{
+  char *res;
+  
+  G_LOCK (gio_xdgmime);
+  res = g_strdup (xdg_mime_unalias_mime_type (type));
+  G_UNLOCK (gio_xdgmime);
+  
+  return res;
+}
+
+char **
+_g_unix_content_type_get_parents (const char *type)
+{
+  const char *umime;
+  char **parents;
+  GPtrArray *array;
+  int i;
+
+  array = g_ptr_array_new ();
+  
+  G_LOCK (gio_xdgmime);
+  
+  umime = xdg_mime_unalias_mime_type (type);
+  
+  g_ptr_array_add (array, g_strdup (umime));
+  
+  parents = xdg_mime_list_mime_parents (umime);
+  for (i = 0; parents && parents[i] != NULL; i++)
+    g_ptr_array_add (array, g_strdup (parents[i]));
+  
+  free (parents);
+  
+  G_UNLOCK (gio_xdgmime);
+  
+  g_ptr_array_add (array, NULL);
+  
+  return (char **)g_ptr_array_free (array, FALSE);
+}
+
+/**
+ * g_content_type_equals:
+ * @type1: a content type string.
+ * @type2: a content type string.
+ *
+ * Compares two content types for equality.
+ *
+ * Returns: %TRUE if the two strings are identical or equivalent,
+ * %FALSE otherwise.
+ **/  
+gboolean
+g_content_type_equals (const char *type1,
+		       const char *type2)
+{
+  gboolean res;
+  
+  g_return_val_if_fail (type1 != NULL, FALSE);
+  g_return_val_if_fail (type2 != NULL, FALSE);
+  
+  G_LOCK (gio_xdgmime);
+  res = xdg_mime_mime_type_equal (type1, type2);
+  G_UNLOCK (gio_xdgmime);
+	
+  return res;
+}
+
+/**
+ * g_content_type_is_a:
+ * @type: a content type string. 
+ * @supertype: a string.
+ *
+ * Determines if @type is a subset of @supertype.  
+ *
+ * Returns: %TRUE if @type is a kind of @supertype,
+ * %FALSE otherwise. 
+ **/  
+gboolean
+g_content_type_is_a (const char *type,
+		     const char *supertype)
+{
+  gboolean res;
+    
+  g_return_val_if_fail (type != NULL, FALSE);
+  g_return_val_if_fail (supertype != NULL, FALSE);
+  
+  G_LOCK (gio_xdgmime);
+  res = xdg_mime_mime_type_subclass (type, supertype);
+  G_UNLOCK (gio_xdgmime);
+	
+  return res;
+}
+
+/**
+ * g_content_type_is_unknown:
+ * @type: a content type string. 
+ * 
+ * Checks if the content type is the generic "unknown" type.
+ * On unix this is the "application/octet-stream" mimetype,
+ * while on win32 it is "*".
+ * 
+ * Returns: %TRUE if the type is the unknown type.
+ **/  
+gboolean
+g_content_type_is_unknown (const char *type)
+{
+  g_return_val_if_fail (type != NULL, FALSE);
+
+  return strcmp (XDG_MIME_TYPE_UNKNOWN, type) == 0;
+}
+
+
+typedef enum {
+  MIME_TAG_TYPE_OTHER,
+  MIME_TAG_TYPE_COMMENT
+} MimeTagType;
+
+typedef struct {
+  int current_type;
+  int current_lang_level;
+  int comment_lang_level;
+  char *comment;
+} MimeParser;
+
+
+static int
+language_level (const char *lang)
+{
+  const char * const *lang_list;
+  int i;
+  
+  /* The returned list is sorted from most desirable to least
+     desirable and always contains the default locale "C". */
+  lang_list = g_get_language_names ();
+  
+  for (i = 0; lang_list[i]; i++)
+    if (strcmp (lang_list[i], lang) == 0)
+      return 1000-i;
+  
+  return 0;
+}
+
+static void
+mime_info_start_element (GMarkupParseContext  *context,
+			 const gchar          *element_name,
+			 const gchar         **attribute_names,
+			 const gchar         **attribute_values,
+			 gpointer              user_data,
+			 GError              **error)
+{
+  int i;
+  const char *lang;
+  MimeParser *parser = user_data;
+  
+  if (strcmp (element_name, "comment") == 0)
+    {
+      lang = "C";
+      for (i = 0; attribute_names[i]; i++)
+	if (strcmp (attribute_names[i], "xml:lang") == 0)
+	  {
+	    lang = attribute_values[i];
+	    break;
+	  }
+      
+      parser->current_lang_level = language_level (lang);
+      parser->current_type = MIME_TAG_TYPE_COMMENT;
+    }
+  else
+    parser->current_type = MIME_TAG_TYPE_OTHER;
+  
+}
+
+static void
+mime_info_end_element (GMarkupParseContext  *context,
+		       const gchar          *element_name,
+		       gpointer              user_data,
+		       GError              **error)
+{
+  MimeParser *parser = user_data;
+  
+  parser->current_type = MIME_TAG_TYPE_OTHER;
+}
+
+static void
+mime_info_text (GMarkupParseContext  *context,
+		const gchar          *text,
+		gsize                 text_len,  
+		gpointer              user_data,
+		GError              **error)
+{
+  MimeParser *parser = user_data;
+
+  if (parser->current_type == MIME_TAG_TYPE_COMMENT &&
+      parser->current_lang_level > parser->comment_lang_level)
+    {
+      g_free (parser->comment);
+      parser->comment = g_strndup (text, text_len);
+      parser->comment_lang_level = parser->current_lang_level;
+    }
+}
+
+static char *
+load_comment_for_mime_helper (const char *dir, 
+                              const char *basename)
+{
+  GMarkupParseContext *context;
+  char *filename, *data;
+  gsize len;
+  gboolean res;
+  MimeParser parse_data = {0};
+  GMarkupParser parser = {
+    mime_info_start_element,
+    mime_info_end_element,
+    mime_info_text
+  };
+
+  filename = g_build_filename (dir, "mime", basename, NULL);
+  
+  res = g_file_get_contents (filename,  &data,  &len,  NULL);
+  g_free (filename);
+  if (!res)
+    return NULL;
+  
+  context = g_markup_parse_context_new   (&parser, 0, &parse_data, NULL);
+  res = g_markup_parse_context_parse (context, data, len, NULL);
+  g_free (data);
+  g_markup_parse_context_free (context);
+  
+  if (!res)
+    return NULL;
+
+  return parse_data.comment;
+}
+
+
+static char *
+load_comment_for_mime (const char *mimetype)
+{
+  const char * const* dirs;
+  char *basename;
+  char *comment;
+  int i;
+
+  basename = g_strdup_printf ("%s.xml", mimetype);
+
+  comment = load_comment_for_mime_helper (g_get_user_data_dir (), basename);
+  if (comment)
+    {
+      g_free (basename);
+      return comment;
+    }
+  
+  dirs = g_get_system_data_dirs ();
+
+  for (i = 0; dirs[i] != NULL; i++)
+    {
+      comment = load_comment_for_mime_helper (dirs[i], basename);
+      if (comment)
+	{
+	  g_free (basename);
+	  return comment;
+	}
+    }
+  g_free (basename);
+  
+  return g_strdup_printf (_("%s type"), mimetype);
+}
+
+/**
+ * g_content_type_get_description:
+ * @type: a content type string. 
+ * 
+ * Gets the human readable description of the content type.
+ * 
+ * Returns: a short description of the content type @type. 
+ **/  
+char *
+g_content_type_get_description (const char *type)
+{
+  static GHashTable *type_comment_cache = NULL;
+  char *comment;
+
+  g_return_val_if_fail (type != NULL, NULL);
+  
+  G_LOCK (gio_xdgmime);
+  type = xdg_mime_unalias_mime_type (type);
+
+  if (type_comment_cache == NULL)
+    type_comment_cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+  comment = g_hash_table_lookup (type_comment_cache, type);
+  comment = g_strdup (comment);
+  G_UNLOCK (gio_xdgmime);
+  
+  if (comment != NULL)
+    return comment;
+
+  comment = load_comment_for_mime (type);
+  
+  G_LOCK (gio_xdgmime);
+  g_hash_table_insert (type_comment_cache,
+		       g_strdup (type),
+		       g_strdup (comment));
+  G_UNLOCK (gio_xdgmime);
+
+  return comment;
+}
+
+/**
+ * g_content_type_get_mime_type:
+ * @type: a content type string. 
+ * 
+ * Gets the mime-type for the content type. If one is registered
+ * 
+ * Returns: the registered mime-type for the given @type, or NULL if unknown.
+ **/  
+char *
+g_content_type_get_mime_type (const char *type)
+{
+  g_return_val_if_fail (type != NULL, NULL);
+
+  return g_strdup (type);
+}
+
+/**
+ * g_content_type_get_icon:
+ * @type: a content type string.
+ * 
+ * Gets the icon for a content type.
+ * 
+ * Returns: #GIcon corresponding to the content type.
+ **/  
+GIcon *
+g_content_type_get_icon (const char *type)
+{
+  char *mimetype_icon, *generic_mimetype_icon, *q;
+  char *xdg_mimetype_icon, *legacy_mimetype_icon;
+  char *xdg_mimetype_generic_icon;
+  char *icon_names[4];
+  int n = 0;
+  const char *p;
+  GIcon *themed_icon;
+  
+  g_return_val_if_fail (type != NULL, NULL);
+  
+  G_LOCK (gio_xdgmime);
+  xdg_mimetype_icon = g_strdup (xdg_mime_get_icon (type));
+  xdg_mimetype_generic_icon = g_strdup (xdg_mime_get_generic_icon (type));
+  G_UNLOCK (gio_xdgmime);
+
+  mimetype_icon = g_strdup (type);
+  
+  while ((q = strchr (mimetype_icon, '/')) != NULL)
+    *q = '-';
+  
+  p = strchr (type, '/');
+  if (p == NULL)
+    p = type + strlen (type);
+
+  /* Not all icons have migrated to the new icon theme spec, look for old names too */
+  legacy_mimetype_icon = g_strconcat ("gnome-mime-", mimetype_icon, NULL);
+  
+  generic_mimetype_icon = g_malloc (p - type + strlen ("-x-generic") + 1);
+  memcpy (generic_mimetype_icon, type, p - type);
+  memcpy (generic_mimetype_icon + (p - type), "-x-generic", strlen ("-x-generic"));
+  generic_mimetype_icon[(p - type) + strlen ("-x-generic")] = 0;
+  
+  if (xdg_mimetype_icon)
+    icon_names[n++] = xdg_mimetype_icon;
+
+  icon_names[n++] = mimetype_icon;
+  icon_names[n++] = legacy_mimetype_icon;
+
+  if (xdg_mimetype_generic_icon)
+    icon_names[n++] = xdg_mimetype_generic_icon;
+
+  icon_names[n++] = generic_mimetype_icon;
+  
+  themed_icon = g_themed_icon_new_from_names (icon_names, n);
+  
+  g_free (xdg_mimetype_icon);
+  g_free (xdg_mimetype_generic_icon);
+  g_free (mimetype_icon);
+  g_free (legacy_mimetype_icon);
+  g_free (generic_mimetype_icon);
+  
+  return themed_icon;
+}
+
+/**
+ * g_content_type_can_be_executable:
+ * @type: a content type string.
+ * 
+ * Checks if a content type can be executable. Note that for instance
+ * things like text files can be executables (i.e. scripts and batch files).
+ * 
+ * Returns: %TRUE if the file type corresponds to a type that
+ * can be executable, %FALSE otherwise. 
+ **/  
+gboolean
+g_content_type_can_be_executable (const char *type)
+{
+  g_return_val_if_fail (type != NULL, FALSE);
+
+  if (g_content_type_is_a (type, "application/x-executable")  ||
+      g_content_type_is_a (type, "text/plain"))
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
+looks_like_text (const guchar *data, gsize data_size)
+{
+  gsize i;
+  char c;
+  
+  for (i = 0; i < data_size; i++)
+    {
+      c = data[i];
+      
+      if (g_ascii_iscntrl (c) &&
+	  !g_ascii_isspace (c))
+	return FALSE;
+    }
+  return TRUE;
+}
+
+/**
+ * g_content_type_from_mime_type:
+ * @mime_type: a mime type string.
+ *
+ * Tries to find a content type based on the mime type name.
+ *
+ * Returns: Newly allocated string with content type or NULL when does not know.
+ *
+ * Since: 2.18
+ **/
+char *
+g_content_type_from_mime_type (const char *mime_type)
+{
+  char *umime;
+
+  g_return_val_if_fail (mime_type != NULL, NULL);
+
+  G_LOCK (gio_xdgmime);
+  /* mime type and content type are same on unixes */
+  umime = g_strdup (xdg_mime_unalias_mime_type (mime_type));
+  G_UNLOCK (gio_xdgmime);
+
+  return umime;
+}
+
+/**
+ * g_content_type_guess:
+ * @filename: a string, or %NULL
+ * @data: a stream of data, or %NULL
+ * @data_size: the size of @data
+ * @result_uncertain: a flag indicating the certainty of the result
+ * 
+ * Guesses the content type based on example data. If the function is 
+ * uncertain, @result_uncertain will be set to %TRUE. Either @filename
+ * or @data may be %NULL, in which case the guess will be based solely
+ * on the other argument.
+ * 
+ * Returns: a string indicating a guessed content type for the 
+ * given data. 
+ **/  
+char *
+g_content_type_guess (const char   *filename,
+		      const guchar *data,
+		      gsize         data_size,
+		      gboolean     *result_uncertain)
+{
+  char *basename;
+  const char *name_mimetypes[10], *sniffed_mimetype;
+  char *mimetype;
+  int i;
+  int n_name_mimetypes;
+  int sniffed_prio;
+
+  sniffed_prio = 0;
+  n_name_mimetypes = 0;
+  sniffed_mimetype = XDG_MIME_TYPE_UNKNOWN;
+
+  if (result_uncertain)
+    *result_uncertain = FALSE;
+  
+  G_LOCK (gio_xdgmime);
+  
+  if (filename)
+    {
+      i = strlen (filename);
+      if (filename[i - 1] == '/')
+        {
+          name_mimetypes[0] = "inode/directory";
+          name_mimetypes[1] = NULL;
+          n_name_mimetypes = 1;
+          if (result_uncertain)
+            *result_uncertain = TRUE;
+        }
+      else
+        {
+          basename = g_path_get_basename (filename);
+          n_name_mimetypes = xdg_mime_get_mime_types_from_file_name (basename, name_mimetypes, 10);
+          g_free (basename);
+        }
+    }
+
+  /* Got an extension match, and no conflicts. This is it. */
+  if (n_name_mimetypes == 1)
+    {
+      G_UNLOCK (gio_xdgmime);
+      return g_strdup (name_mimetypes[0]);
+    }
+  
+  if (data)
+    {
+      sniffed_mimetype = xdg_mime_get_mime_type_for_data (data, data_size, &sniffed_prio);
+      if (sniffed_mimetype == XDG_MIME_TYPE_UNKNOWN &&
+	  data &&
+	  looks_like_text (data, data_size))
+	sniffed_mimetype = "text/plain";
+
+      /* For security reasons we don't ever want to sniff desktop files
+       * where we know the filename and it doesn't have a .desktop extension.
+       * This is because desktop files allow executing any application and
+       * we don't want to make it possible to hide them looking like something
+       * else.
+       */
+      if (filename != NULL &&
+          strcmp (sniffed_mimetype, "application/x-desktop") == 0)
+        sniffed_mimetype = "text/plain";
+    }
+  
+  if (n_name_mimetypes == 0)
+    {
+      if (sniffed_mimetype == XDG_MIME_TYPE_UNKNOWN &&
+	  result_uncertain)
+	*result_uncertain = TRUE;
+      
+      mimetype = g_strdup (sniffed_mimetype);
+    }
+  else
+    {
+      mimetype = NULL;
+      if (sniffed_mimetype != XDG_MIME_TYPE_UNKNOWN)
+	{
+	  if (sniffed_prio >= 80) /* High priority sniffing match, use that */
+	    mimetype = g_strdup (sniffed_mimetype);
+	  else
+	    {
+	      /* There are conflicts between the name matches and we have a sniffed
+		 type, use that as a tie breaker. */
+	      
+	      for (i = 0; i < n_name_mimetypes; i++)
+		{
+		  if ( xdg_mime_mime_type_subclass (name_mimetypes[i], sniffed_mimetype))
+		    {
+		      /* This nametype match is derived from (or the same as) the sniffed type).
+			 This is probably it. */
+		      mimetype = g_strdup (name_mimetypes[i]);
+		      break;
+		    }
+		}
+	    }
+	}
+      
+      if (mimetype == NULL)
+	{
+	  /* Conflicts, and sniffed type was no help or not there. Guess on the first one */
+	  mimetype = g_strdup (name_mimetypes[0]);
+	  if (result_uncertain)
+	    *result_uncertain = TRUE;
+	}
+    }
+  
+  G_UNLOCK (gio_xdgmime);
+
+  return mimetype;
+}
+
+static void
+enumerate_mimetypes_subdir (const char *dir, 
+                            const char *prefix, 
+                            GHashTable *mimetypes)
+{
+  DIR *d;
+  struct dirent *ent;
+  char *mimetype;
+
+  d = opendir (dir);
+  if (d)
+    {
+      while ((ent = readdir (d)) != NULL)
+	{
+	  if (g_str_has_suffix (ent->d_name, ".xml"))
+	    {
+	      mimetype = g_strdup_printf ("%s/%.*s", prefix, (int) strlen (ent->d_name) - 4, ent->d_name);
+	      g_hash_table_replace (mimetypes, mimetype, NULL);
+	    }
+	}
+      closedir (d);
+    }
+}
+
+static void
+enumerate_mimetypes_dir (const char *dir, 
+                         GHashTable *mimetypes)
+{
+  DIR *d;
+  struct dirent *ent;
+  char *mimedir;
+  char *name;
+
+  mimedir = g_build_filename (dir, "mime", NULL);
+  
+  d = opendir (mimedir);
+  if (d)
+    {
+      while ((ent = readdir (d)) != NULL)
+	{
+	  if (strcmp (ent->d_name, "packages") != 0)
+	    {
+	      name = g_build_filename (mimedir, ent->d_name, NULL);
+	      if (g_file_test (name, G_FILE_TEST_IS_DIR))
+		enumerate_mimetypes_subdir (name, ent->d_name, mimetypes);
+	      g_free (name);
+	    }
+	}
+      closedir (d);
+    }
+  
+  g_free (mimedir);
+}
+
+/**
+ * g_content_types_get_registered:
+ * 
+ * Gets a list of strings containing all the registered content types
+ * known to the system. The list and its data should be freed using 
+ * @g_list_foreach(list, g_free, NULL) and @g_list_free(list)
+ * Returns: #GList of the registered content types.
+ **/  
+GList *
+g_content_types_get_registered (void)
+{
+  const char * const* dirs;
+  GHashTable *mimetypes;
+  GHashTableIter iter;
+  gpointer key;
+  int i;
+  GList *l;
+
+  mimetypes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+  enumerate_mimetypes_dir (g_get_user_data_dir (), mimetypes);
+  dirs = g_get_system_data_dirs ();
+
+  for (i = 0; dirs[i] != NULL; i++)
+    enumerate_mimetypes_dir (dirs[i], mimetypes);
+
+  l = NULL;
+  g_hash_table_iter_init (&iter, mimetypes);
+  while (g_hash_table_iter_next (&iter, &key, NULL))
+    {
+      l = g_list_prepend (l, key);
+      g_hash_table_iter_steal (&iter);
+    }
+
+  g_hash_table_destroy (mimetypes);
+
+  return l;
+}
+
+
+/* tree magic data */
+static GList *tree_matches = NULL;
+static gboolean need_reload = FALSE;
+
+G_LOCK_DEFINE_STATIC (gio_treemagic);
+
+typedef struct 
+{
+  gchar *path;
+  GFileType type;
+  guint match_case : 1;
+  guint executable : 1;
+  guint non_empty  : 1;
+  guint on_disc    : 1;
+  gchar *mimetype;
+  GList *matches;
+} TreeMatchlet;
+
+typedef struct
+{
+  gchar *contenttype;
+  gint priority;
+  GList *matches;
+} TreeMatch;
+
+
+static void
+tree_matchlet_free (TreeMatchlet *matchlet)
+{
+  g_list_foreach (matchlet->matches, (GFunc)tree_matchlet_free, NULL);
+  g_list_free (matchlet->matches);
+  g_free (matchlet->path);
+  g_free (matchlet->mimetype);
+  g_slice_free (TreeMatchlet, matchlet);
+}
+
+static void
+tree_match_free (TreeMatch *match)
+{
+  g_list_foreach (match->matches, (GFunc)tree_matchlet_free, NULL);
+  g_list_free (match->matches);
+  g_free (match->contenttype);
+  g_slice_free (TreeMatch, match);
+}
+
+static TreeMatch *
+parse_header (gchar *line)
+{
+  gint len;
+  gchar *s;
+  TreeMatch *match;
+
+  len = strlen (line);
+
+  if (line[0] != '[' || line[len - 1] != ']')
+    return NULL;
+	
+  line[len - 1] = 0;
+  s = strchr (line, ':');
+	
+  match = g_slice_new0 (TreeMatch);
+  match->priority = atoi (line + 1);
+  match->contenttype = g_strdup (s + 1);
+
+  return match;
+}
+
+static TreeMatchlet *
+parse_match_line (gchar *line, 
+		  gint  *depth)
+{
+  gchar *s, *p;
+  TreeMatchlet *matchlet;
+  gchar **parts;
+  gint i;
+
+  matchlet = g_slice_new0 (TreeMatchlet);
+
+  if (line[0] == '>') 
+    {
+      *depth = 0;
+      s = line;
+    }
+  else 
+    {
+      *depth = atoi (line);
+      s = strchr (line, '>');
+    }
+  s += 2; 
+  p = strchr (s, '"');
+  *p = 0;
+
+  matchlet->path = g_strdup (s);
+  s = p + 1;
+  parts = g_strsplit (s, ",", 0);
+  if (strcmp (parts[0], "=file") == 0)
+    matchlet->type = G_FILE_TYPE_REGULAR;
+  else if (strcmp (parts[0], "=directory") == 0)
+    matchlet->type = G_FILE_TYPE_DIRECTORY;
+  else if (strcmp (parts[0], "=link") == 0)
+    matchlet->type = G_FILE_TYPE_SYMBOLIC_LINK;
+  else
+    matchlet->type = G_FILE_TYPE_UNKNOWN;
+  for (i = 1; parts[i]; i++)
+    {
+      if (strcmp (parts[i], "executable") == 0)
+        matchlet->executable = 1;
+      else if (strcmp (parts[i], "match-case") == 0)
+        matchlet->match_case = 1;
+      else if (strcmp (parts[i], "non-empty") == 0)
+        matchlet->non_empty = 1;
+      else if (strcmp (parts[i], "on-disc") == 0)
+        matchlet->on_disc = 1;
+      else 
+        matchlet->mimetype = g_strdup (parts[i]);
+    }
+
+  g_strfreev (parts);
+
+  return matchlet;
+}
+
+static gint
+cmp_match (gconstpointer a, gconstpointer b)
+{
+  const TreeMatch *aa = (const TreeMatch *)a;
+  const TreeMatch *bb = (const TreeMatch *)b;
+
+  return bb->priority - aa->priority;
+}
+
+static void
+insert_match (TreeMatch *match)
+{
+  tree_matches = g_list_insert_sorted (tree_matches, match, cmp_match);
+}
+
+static void
+insert_matchlet (TreeMatch    *match, 
+                 TreeMatchlet *matchlet, 
+                 gint          depth)
+{
+  if (depth == 0) 
+    match->matches = g_list_append (match->matches, matchlet);
+  else 
+    {
+      GList *last;
+      TreeMatchlet *m;
+
+      last = g_list_last (match->matches);
+      if (!last) 
+        {
+          tree_matchlet_free (matchlet);
+          g_warning ("can't insert tree matchlet at depth %d", depth);
+          return;
+        }
+
+      m = (TreeMatchlet *) last->data;
+      while (--depth > 0) 
+        {
+          last = g_list_last (m->matches);
+          if (!last) 
+            {
+              tree_matchlet_free (matchlet);
+              g_warning ("can't insert tree matchlet at depth %d", depth);
+              return;
+            }
+			
+          m = (TreeMatchlet *) last->data;
+        }
+      m->matches = g_list_append (m->matches, matchlet);
+    }
+}
+
+static void
+read_tree_magic_from_directory (const gchar *prefix)
+{
+  gchar *filename;
+  gchar *text;
+  gsize len;
+  gchar **lines;
+  gint i;
+  TreeMatch *match;
+  TreeMatchlet *matchlet;
+  gint depth;
+
+  filename = g_build_filename (prefix, "mime", "treemagic", NULL);
+
+  if (g_file_get_contents (filename, &text, &len, NULL)) 
+    {
+      if (strcmp (text, "MIME-TreeMagic") == 0) 
+        {
+          lines = g_strsplit (text + strlen ("MIME-TreeMagic") + 2, "\n", 0);
+          match = NULL;
+          for (i = 0; lines[i] && lines[i][0]; i++) 
+            {
+              if (lines[i][0] == '[') 
+                {
+                  match = parse_header (lines[i]);
+                  insert_match (match);
+                }
+              else 
+                {
+                  matchlet = parse_match_line (lines[i], &depth);
+                  insert_matchlet (match, matchlet, depth);
+                }
+            }
+      
+          g_strfreev (lines);
+        }
+      else 
+        g_warning ("%s: header not found, skipping\n", filename);
+
+      g_free (text);
+    }
+	
+  g_free (filename);
+}
+
+
+static void
+xdg_mime_reload (void *user_data)
+{
+  need_reload = TRUE;
+}
+
+static void 
+tree_magic_shutdown (void)
+{
+  g_list_foreach (tree_matches, (GFunc)tree_match_free, NULL);
+  g_list_free (tree_matches);
+  tree_matches = NULL;
+}
+
+static void
+tree_magic_init (void)
+{
+  static gboolean initialized = FALSE;
+  const gchar *dir;
+  const gchar * const * dirs;
+  int i;
+
+  if (!initialized) 
+    {
+      initialized = TRUE;
+
+      xdg_mime_register_reload_callback (xdg_mime_reload, NULL, NULL);
+      need_reload = TRUE;
+    }
+
+  if (need_reload) 
+    {
+      need_reload = FALSE;
+
+      tree_magic_shutdown ();
+
+      dir = g_get_user_data_dir ();
+      read_tree_magic_from_directory (dir);
+      dirs = g_get_system_data_dirs ();
+      for (i = 0; dirs[i]; i++)
+        read_tree_magic_from_directory (dirs[i]);
+    }
+}
+
+/* a filtering enumerator */
+
+typedef struct 
+{
+  gchar *path;
+  gint depth;
+  gboolean ignore_case;
+  gchar **components;
+  gchar **case_components;
+  GFileEnumerator **enumerators;
+  GFile **children;
+} Enumerator;
+
+static gboolean
+component_match (Enumerator  *e, 
+                 gint         depth, 
+                 const gchar *name)
+{
+  gchar *case_folded, *key;
+  gboolean found;
+
+  if (strcmp (name, e->components[depth]) == 0)
+    return TRUE;
+
+  if (!e->ignore_case)
+    return FALSE;
+
+  case_folded = g_utf8_casefold (name, -1);
+  key = g_utf8_collate_key (case_folded, -1);
+
+  found = strcmp (key, e->case_components[depth]) == 0;
+
+  g_free (case_folded);
+  g_free (key);
+
+  return found;
+}
+
+static GFile *
+next_match_recurse (Enumerator *e, 
+                    gint        depth)
+{
+  GFile *file;
+  GFileInfo *info;
+  const gchar *name;
+
+  while (TRUE) 
+    {
+      if (e->enumerators[depth] == NULL) 
+        {
+          if (depth > 0) 
+            {
+              file = next_match_recurse (e, depth - 1);
+              if (file)  
+                {
+                  e->children[depth] = file;
+                  e->enumerators[depth] = g_file_enumerate_children (file,
+                                                                     G_FILE_ATTRIBUTE_STANDARD_NAME,
+                                                                     G_FILE_QUERY_INFO_NONE,
+							             NULL,
+							             NULL);
+                }
+            }
+          if (e->enumerators[depth] == NULL)
+            return NULL;
+        }
+
+      while ((info = g_file_enumerator_next_file (e->enumerators[depth], NULL, NULL))) 
+        {
+          name = g_file_info_get_name (info);
+          if (component_match (e, depth, name)) 
+            {
+              file = g_file_get_child (e->children[depth], name);
+              g_object_unref (info);
+              return file;
+            }
+          g_object_unref (info);
+        }
+
+      g_object_unref (e->enumerators[depth]);
+      e->enumerators[depth] = NULL;
+      g_object_unref (e->children[depth]);
+      e->children[depth] = NULL;
+    }
+}
+
+static GFile *
+enumerator_next (Enumerator *e)
+{
+  return next_match_recurse (e, e->depth - 1);
+}
+
+static Enumerator *
+enumerator_new (GFile      *root,
+                const char *path, 
+                gboolean    ignore_case)
+{
+  Enumerator *e;
+  gint i;
+  gchar *case_folded;
+
+  e = g_new0 (Enumerator, 1);
+  e->path = g_strdup (path);
+  e->ignore_case = ignore_case;
+
+  e->components = g_strsplit (e->path, G_DIR_SEPARATOR_S, -1);
+  e->depth = g_strv_length (e->components);
+  if (e->ignore_case) 
+    {
+      e->case_components = g_new0 (char *, e->depth + 1);
+      for (i = 0; e->components[i]; i++) 
+        {
+          case_folded = g_utf8_casefold (e->components[i], -1);
+          e->case_components[i] = g_utf8_collate_key (case_folded, -1);
+          g_free (case_folded);
+        }	
+    }
+
+  e->children = g_new0 (GFile *, e->depth);
+  e->children[0] = g_object_ref (root);
+  e->enumerators = g_new0 (GFileEnumerator *, e->depth);
+  e->enumerators[0] = g_file_enumerate_children (root,
+                                                 G_FILE_ATTRIBUTE_STANDARD_NAME,
+                                                 G_FILE_QUERY_INFO_NONE,
+                                                 NULL,
+                                                 NULL);
+
+  return e;
+}
+
+static void
+enumerator_free (Enumerator *e)
+{
+  gint i;
+
+  for (i = 0; i < e->depth; i++) 
+    { 
+      if (e->enumerators[i]) 
+        g_object_unref (e->enumerators[i]);
+      if (e->children[i])
+        g_object_unref (e->children[i]);
+    }
+
+  g_free (e->enumerators);
+  g_free (e->children);
+  g_strfreev (e->components);
+  if (e->case_components)
+    g_strfreev (e->case_components);
+  g_free (e->path);
+  g_free (e);
+}
+
+static gboolean
+matchlet_match (TreeMatchlet *matchlet,
+                GFile        *root)
+{
+  GFile *file;
+  GFileInfo *info;
+  gboolean result;
+  const gchar *attrs;
+  Enumerator *e;
+  GList *l;
+
+  e = enumerator_new (root, matchlet->path, !matchlet->match_case);
+	
+  do 
+    {
+      file = enumerator_next (e);
+      if (!file) 
+        {
+          enumerator_free (e);	
+          return FALSE;
+        }
+
+      if (matchlet->mimetype)
+        attrs = G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE ","
+                G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE;
+      else
+        attrs = G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE;
+      info = g_file_query_info (file, 
+                                attrs,
+                                G_FILE_QUERY_INFO_NONE,
+                                NULL,
+                                NULL);
+      if (info) 
+        {
+          result = TRUE;
+
+          if (matchlet->type != G_FILE_TYPE_UNKNOWN &&
+              g_file_info_get_file_type (info) != matchlet->type) 
+            result = FALSE;
+
+          if (matchlet->executable &&
+              !g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))
+            result = FALSE;
+        }	
+      else 
+        result = FALSE;
+
+      if (result && matchlet->non_empty) 
+        {
+          GFileEnumerator *child_enum;
+          GFileInfo *child_info;
+
+          child_enum = g_file_enumerate_children (file, 
+                                                  G_FILE_ATTRIBUTE_STANDARD_NAME,
+                                                  G_FILE_QUERY_INFO_NONE,
+                                                  NULL,
+                                                  NULL);
+	
+          if (child_enum) 
+            {
+              child_info = g_file_enumerator_next_file (child_enum, NULL, NULL);
+              if (child_info)
+                g_object_unref (child_info);
+              else 
+                result = FALSE;	
+              g_object_unref (child_enum);
+            }
+          else 
+            result = FALSE;
+        }
+	
+      if (result && matchlet->mimetype) 
+        {
+          if (strcmp (matchlet->mimetype, g_file_info_get_content_type (info)) != 0) 
+            result = FALSE;
+        }
+	
+      g_object_unref (info);
+      g_object_unref (file);
+    }
+  while (!result);
+
+  enumerator_free (e);
+	
+  if (!matchlet->matches) 
+    return TRUE;
+
+  for (l = matchlet->matches; l; l = l->next) 
+    {
+      TreeMatchlet *submatchlet;
+
+      submatchlet = l->data;
+      if (matchlet_match (submatchlet, root))
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
+static void
+match_match (TreeMatch    *match,
+             GFile        *root,
+             GPtrArray    *types)
+{
+  GList *l;
+	
+  for (l = match->matches; l; l = l->next) 
+    {
+      TreeMatchlet *matchlet = l->data;
+      if (matchlet_match (matchlet, root)) 
+        {
+          g_ptr_array_add (types, g_strdup (match->contenttype));
+          break;
+        }
+    }
+}
+
+/**
+ * g_content_type_guess_for_tree:
+ * @root: the root of the tree to guess a type for
+ *
+ * Tries to guess the type of the tree with root @root, by
+ * looking at the files it contains. The result is an array
+ * of content types, with the best guess coming first.
+ *
+ * The types returned all have the form x-content/foo, e.g.
+ * x-content/audio-cdda (for audio CDs) or x-content/image-dcf 
+ * (for a camera memory card). See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
+ * specification for more on x-content types.
+ *
+ * This function is useful in the implementation of g_mount_guess_content_type().
+ *
+ * Returns: an %NULL-terminated array of zero or more content types, or %NULL. 
+ *    Free with g_strfreev()
+ *
+ * Since: 2.18
+ */
+char **
+g_content_type_guess_for_tree (GFile *root)
+{
+  GPtrArray *types;
+  GList *l;
+
+  types = g_ptr_array_new ();
+
+  G_LOCK (gio_treemagic);
+
+  tree_magic_init ();
+  for (l = tree_matches; l; l = l->next) 
+    {
+      TreeMatch *match = l->data;
+      match_match (match, root, types);
+    }
+
+  G_UNLOCK (gio_treemagic);
+
+  g_ptr_array_add (types, NULL);
+
+  return (char **)g_ptr_array_free (types, FALSE);
+}
+
+#endif /* Unix version */
+
+#define __G_CONTENT_TYPE_C__
+#include "gioaliasdef.c"
diff --git a/gio/gcontenttype.h b/gio/gcontenttype.h
new file mode 100644
index 0000000..95c9475
--- /dev/null
+++ b/gio/gcontenttype.h
@@ -0,0 +1,57 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_CONTENT_TYPE_H__
+#define __G_CONTENT_TYPE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+gboolean g_content_type_equals            (const char   *type1,
+					   const char   *type2);
+gboolean g_content_type_is_a              (const char   *type,
+					   const char   *supertype);
+gboolean g_content_type_is_unknown        (const char   *type);
+char *   g_content_type_get_description   (const char   *type);
+char *   g_content_type_get_mime_type     (const char   *type);
+GIcon *  g_content_type_get_icon          (const char   *type);
+gboolean g_content_type_can_be_executable (const char   *type);
+
+char *   g_content_type_from_mime_type    (const char   *mime_type);
+
+char *   g_content_type_guess             (const char   *filename,
+					   const guchar *data,
+					   gsize         data_size,
+					   gboolean     *result_uncertain);
+
+char **  g_content_type_guess_for_tree    (GFile        *root);
+
+GList *  g_content_types_get_registered   (void);
+
+G_END_DECLS
+
+#endif /* __G_CONTENT_TYPE_H__ */
diff --git a/gio/gcontenttypeprivate.h b/gio/gcontenttypeprivate.h
new file mode 100644
index 0000000..a94d138
--- /dev/null
+++ b/gio/gcontenttypeprivate.h
@@ -0,0 +1,36 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_CONTENT_TYPE_PRIVATE_H__
+#define __G_CONTENT_TYPE_PRIVATE_H__
+
+#include "gcontenttype.h"
+
+G_BEGIN_DECLS
+
+gsize  _g_unix_content_type_get_sniff_len (void);
+char * _g_unix_content_type_unalias       (const char *type);
+char **_g_unix_content_type_get_parents   (const char *type);
+
+G_END_DECLS
+
+#endif /* __G_CONTENT_TYPE_PRIVATE_H__ */
diff --git a/gio/gdatainputstream.c b/gio/gdatainputstream.c
new file mode 100644
index 0000000..2dc909d
--- /dev/null
+++ b/gio/gdatainputstream.c
@@ -0,0 +1,1252 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Jürg Billeter
+ * Copyright © 2009 Codethink Limited
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gdatainputstream.h"
+#include "gsimpleasyncresult.h"
+#include "gcancellable.h"
+#include "gioenumtypes.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gdatainputstream
+ * @short_description: Data Input Stream
+ * @include: gio/gio.h
+ * @see_also: #GInputStream
+ * 
+ * Data input stream implements #GInputStream and includes functions for 
+ * reading structured data directly from a binary input stream.
+ *
+ **/
+
+struct _GDataInputStreamPrivate {
+  GDataStreamByteOrder byte_order;
+  GDataStreamNewlineType newline_type;
+};
+
+enum {
+  PROP_0,
+  PROP_BYTE_ORDER,
+  PROP_NEWLINE_TYPE
+};
+
+static void g_data_input_stream_set_property (GObject      *object,
+					      guint         prop_id,
+					      const GValue *value,
+					      GParamSpec   *pspec);
+static void g_data_input_stream_get_property (GObject      *object,
+					      guint         prop_id,
+					      GValue       *value,
+					      GParamSpec   *pspec);
+
+G_DEFINE_TYPE (GDataInputStream,
+               g_data_input_stream,
+               G_TYPE_BUFFERED_INPUT_STREAM)
+
+
+static void
+g_data_input_stream_class_init (GDataInputStreamClass *klass)
+{
+  GObjectClass *object_class;
+
+  g_type_class_add_private (klass, sizeof (GDataInputStreamPrivate));
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->get_property = g_data_input_stream_get_property;
+  object_class->set_property = g_data_input_stream_set_property;
+
+  /**
+   * GDataStream:byte-order:
+   *
+   * The ::byte-order property determines the byte ordering that
+   * is used when reading multi-byte entities (such as integers)
+   * from the stream.
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_BYTE_ORDER,
+                                   g_param_spec_enum ("byte-order",
+                                                      P_("Byte order"),
+                                                      P_("The byte order"),
+                                                      G_TYPE_DATA_STREAM_BYTE_ORDER,
+                                                      G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN,
+                                                      G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_BLURB));
+
+  /**
+   * GDataStream:newline-type:
+   *
+   * The :newline-type property determines what is considered
+   * as a line ending when reading complete lines from the stream.
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_NEWLINE_TYPE,
+                                   g_param_spec_enum ("newline-type",
+                                                      P_("Newline type"),
+                                                      P_("The accepted types of line ending"),
+                                                      G_TYPE_DATA_STREAM_NEWLINE_TYPE,
+                                                      G_DATA_STREAM_NEWLINE_TYPE_LF,
+                                                      G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_data_input_stream_set_property (GObject      *object,
+				  guint         prop_id,
+				  const GValue *value,
+				  GParamSpec   *pspec)
+{
+  GDataInputStreamPrivate *priv;
+  GDataInputStream        *dstream;
+
+  dstream = G_DATA_INPUT_STREAM (object);
+  priv = dstream->priv;
+
+   switch (prop_id) 
+    {
+    case PROP_BYTE_ORDER:
+      g_data_input_stream_set_byte_order (dstream, g_value_get_enum (value));
+      break;
+
+    case PROP_NEWLINE_TYPE:
+      g_data_input_stream_set_newline_type (dstream, g_value_get_enum (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_data_input_stream_get_property (GObject    *object,
+                                  guint       prop_id,
+                                  GValue     *value,
+                                  GParamSpec *pspec)
+{
+  GDataInputStreamPrivate *priv;
+  GDataInputStream        *dstream;
+
+  dstream = G_DATA_INPUT_STREAM (object);
+  priv = dstream->priv;
+
+  switch (prop_id)
+    { 
+    case PROP_BYTE_ORDER:
+      g_value_set_enum (value, priv->byte_order);
+      break;
+
+    case PROP_NEWLINE_TYPE:
+      g_value_set_enum (value, priv->newline_type);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+static void
+g_data_input_stream_init (GDataInputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                              G_TYPE_DATA_INPUT_STREAM,
+                                              GDataInputStreamPrivate);
+
+  stream->priv->byte_order = G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN;
+  stream->priv->newline_type = G_DATA_STREAM_NEWLINE_TYPE_LF;
+}
+
+/**
+ * g_data_input_stream_new:
+ * @base_stream: a #GInputStream.
+ * 
+ * Creates a new data input stream for the @base_stream.
+ * 
+ * Returns: a new #GDataInputStream.
+ **/
+GDataInputStream *
+g_data_input_stream_new (GInputStream *base_stream)
+{
+  GDataInputStream *stream;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (base_stream), NULL);
+
+  stream = g_object_new (G_TYPE_DATA_INPUT_STREAM,
+                         "base-stream", base_stream,
+                         NULL);
+
+  return stream;
+}
+
+/**
+ * g_data_input_stream_set_byte_order:
+ * @stream: a given #GDataInputStream.
+ * @order: a #GDataStreamByteOrder to set.
+ * 
+ * This function sets the byte order for the given @stream. All subsequent
+ * reads from the @stream will be read in the given @order.
+ *  
+ **/
+void
+g_data_input_stream_set_byte_order (GDataInputStream     *stream,
+				    GDataStreamByteOrder  order)
+{
+  GDataInputStreamPrivate *priv;
+
+  g_return_if_fail (G_IS_DATA_INPUT_STREAM (stream));
+
+  priv = stream->priv;
+
+  if (priv->byte_order != order)
+    {
+      priv->byte_order = order;
+      
+      g_object_notify (G_OBJECT (stream), "byte-order");
+    }
+}
+
+/**
+ * g_data_input_stream_get_byte_order:
+ * @stream: a given #GDataInputStream.
+ * 
+ * Gets the byte order for the data input stream.
+ * 
+ * Returns: the @stream's current #GDataStreamByteOrder. 
+ **/
+GDataStreamByteOrder
+g_data_input_stream_get_byte_order (GDataInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN);
+
+  return stream->priv->byte_order;
+}
+
+/**
+ * g_data_input_stream_set_newline_type:
+ * @stream: a #GDataInputStream.
+ * @type: the type of new line return as #GDataStreamNewlineType.
+ * 
+ * Sets the newline type for the @stream.
+ * 
+ * Note that using G_DATA_STREAM_NEWLINE_TYPE_ANY is slightly unsafe. If a read
+ * chunk ends in "CR" we must read an additional byte to know if this is "CR" or
+ * "CR LF", and this might block if there is no more data availible.
+ *  
+ **/
+void
+g_data_input_stream_set_newline_type (GDataInputStream       *stream,
+				      GDataStreamNewlineType  type)
+{
+  GDataInputStreamPrivate *priv;
+
+  g_return_if_fail (G_IS_DATA_INPUT_STREAM (stream));
+
+  priv = stream->priv;
+  
+  if (priv->newline_type != type)
+    {
+      priv->newline_type = type;
+
+      g_object_notify (G_OBJECT (stream), "newline-type");
+    }
+}
+
+/**
+ * g_data_input_stream_get_newline_type:
+ * @stream: a given #GDataInputStream.
+ * 
+ * Gets the current newline type for the @stream.
+ * 
+ * Returns: #GDataStreamNewlineType for the given @stream.
+ **/
+GDataStreamNewlineType
+g_data_input_stream_get_newline_type (GDataInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), G_DATA_STREAM_NEWLINE_TYPE_ANY);
+
+  return stream->priv->newline_type;
+}
+
+static gboolean
+read_data (GDataInputStream  *stream,
+           void              *buffer,
+           gsize              size,
+           GCancellable      *cancellable,
+           GError           **error)
+{
+  gsize available;
+  gssize res;
+
+  while ((available = g_buffered_input_stream_get_available (G_BUFFERED_INPUT_STREAM (stream))) < size)
+    {
+      res = g_buffered_input_stream_fill (G_BUFFERED_INPUT_STREAM (stream),
+					  size - available,
+					  cancellable, error);
+      if (res < 0)
+	return FALSE;
+      if (res == 0)
+	{
+	  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                               _("Unexpected early end-of-stream"));
+	  return FALSE;
+	}
+    }
+  
+  /* This should always succeed, since it's in the buffer */
+  res = g_input_stream_read (G_INPUT_STREAM (stream),
+			     buffer, size,
+			     NULL, NULL);
+  g_warn_if_fail (res == size);
+  return TRUE;
+}
+
+
+/**
+ * g_data_input_stream_read_byte:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ * 
+ * Reads an unsigned 8-bit/1-byte value from @stream.
+ *
+ * Returns: an unsigned 8-bit/1-byte value read from the @stream or %0 
+ * if an error occurred.
+ **/
+guchar
+g_data_input_stream_read_byte (GDataInputStream  *stream,
+			       GCancellable       *cancellable,
+			       GError            **error)
+{
+  guchar c;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), '\0');
+  
+  if (read_data (stream, &c, 1, cancellable, error))
+      return c;
+  
+  return 0;
+}
+
+
+/**
+ * g_data_input_stream_read_int16:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ * 
+ * Reads a 16-bit/2-byte value from @stream.
+ *
+ * In order to get the correct byte order for this read operation, 
+ * see g_data_stream_get_byte_order() and g_data_stream_set_byte_order().
+ * 
+ * Returns: a signed 16-bit/2-byte value read from @stream or %0 if 
+ * an error occurred.
+ **/
+gint16
+g_data_input_stream_read_int16 (GDataInputStream  *stream,
+			       GCancellable       *cancellable,
+			       GError            **error)
+{
+  gint16 v;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), 0);
+  
+  if (read_data (stream, &v, 2, cancellable, error))
+    {
+      switch (stream->priv->byte_order)
+	{
+	case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+	  v = GINT16_FROM_BE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+	  v = GINT16_FROM_LE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+	default:
+	  break;
+	}
+      return v;
+    }
+  
+  return 0;
+}
+
+
+/**
+ * g_data_input_stream_read_uint16:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ *
+ * Reads an unsigned 16-bit/2-byte value from @stream.
+ *
+ * In order to get the correct byte order for this read operation, 
+ * see g_data_stream_get_byte_order() and g_data_stream_set_byte_order(). 
+ * 
+ * Returns: an unsigned 16-bit/2-byte value read from the @stream or %0 if 
+ * an error occurred. 
+ **/
+guint16
+g_data_input_stream_read_uint16 (GDataInputStream  *stream,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  guint16 v;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), 0);
+  
+  if (read_data (stream, &v, 2, cancellable, error))
+    {
+      switch (stream->priv->byte_order)
+	{
+	case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+	  v = GUINT16_FROM_BE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+	  v = GUINT16_FROM_LE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+	default:
+	  break;
+	}
+      return v;
+    }
+  
+  return 0;
+}
+
+
+/**
+ * g_data_input_stream_read_int32:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ * 
+ * Reads a signed 32-bit/4-byte value from @stream.
+ *
+ * In order to get the correct byte order for this read operation, 
+ * see g_data_stream_get_byte_order() and g_data_stream_set_byte_order().
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *   
+ * Returns: a signed 32-bit/4-byte value read from the @stream or %0 if 
+ * an error occurred. 
+ **/
+gint32
+g_data_input_stream_read_int32 (GDataInputStream  *stream,
+				GCancellable       *cancellable,
+				GError            **error)
+{
+  gint32 v;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), 0);
+  
+  if (read_data (stream, &v, 4, cancellable, error))
+    {
+      switch (stream->priv->byte_order)
+	{
+	case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+	  v = GINT32_FROM_BE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+	  v = GINT32_FROM_LE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+	default:
+	  break;
+	}
+      return v;
+    }
+  
+  return 0;
+}
+
+
+/**
+ * g_data_input_stream_read_uint32:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ * 
+ * Reads an unsigned 32-bit/4-byte value from @stream.
+ *
+ * In order to get the correct byte order for this read operation, 
+ * see g_data_stream_get_byte_order() and g_data_stream_set_byte_order().
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: an unsigned 32-bit/4-byte value read from the @stream or %0 if 
+ * an error occurred. 
+ **/
+guint32
+g_data_input_stream_read_uint32 (GDataInputStream  *stream,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  guint32 v;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), 0);
+  
+  if (read_data (stream, &v, 4, cancellable, error))
+    {
+      switch (stream->priv->byte_order)
+	{
+	case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+	  v = GUINT32_FROM_BE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+	  v = GUINT32_FROM_LE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+	default:
+	  break;
+	}
+      return v;
+    }
+  
+  return 0;
+}
+
+
+/**
+ * g_data_input_stream_read_int64:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ * 
+ * Reads a 64-bit/8-byte value from @stream.
+ *
+ * In order to get the correct byte order for this read operation, 
+ * see g_data_stream_get_byte_order() and g_data_stream_set_byte_order().
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a signed 64-bit/8-byte value read from @stream or %0 if 
+ * an error occurred.  
+ **/
+gint64
+g_data_input_stream_read_int64 (GDataInputStream  *stream,
+			       GCancellable       *cancellable,
+			       GError            **error)
+{
+  gint64 v;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), 0);
+  
+  if (read_data (stream, &v, 8, cancellable, error))
+    {
+      switch (stream->priv->byte_order)
+	{
+	case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+	  v = GINT64_FROM_BE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+	  v = GINT64_FROM_LE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+	default:
+	  break;
+	}
+      return v;
+    }
+  
+  return 0;
+}
+
+
+/**
+ * g_data_input_stream_read_uint64:
+ * @stream: a given #GDataInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ * 
+ * Reads an unsigned 64-bit/8-byte value from @stream.
+ *
+ * In order to get the correct byte order for this read operation, 
+ * see g_data_stream_get_byte_order().
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: an unsigned 64-bit/8-byte read from @stream or %0 if 
+ * an error occurred. 
+ **/
+guint64
+g_data_input_stream_read_uint64 (GDataInputStream  *stream,
+				GCancellable       *cancellable,
+				GError            **error)
+{
+  guint64 v;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), 0);
+  
+  if (read_data (stream, &v, 8, cancellable, error))
+    {
+      switch (stream->priv->byte_order)
+	{
+	case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+	  v = GUINT64_FROM_BE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+	  v = GUINT64_FROM_LE (v);
+	  break;
+	case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+	default:
+	  break;
+	}
+      return v;
+    }
+  
+  return 0;
+}
+
+static gssize
+scan_for_newline (GDataInputStream *stream,
+		  gsize            *checked_out,
+		  gboolean         *last_saw_cr_out,
+		  int              *newline_len_out)
+{
+  GBufferedInputStream *bstream;
+  GDataInputStreamPrivate *priv;
+  const char *buffer;
+  gsize start, end, peeked;
+  int i;
+  gssize found_pos;
+  int newline_len;
+  gsize available, checked;
+  gboolean last_saw_cr;
+
+  priv = stream->priv;
+  
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+
+  checked = *checked_out;
+  last_saw_cr = *last_saw_cr_out;
+  found_pos = -1;
+  newline_len = 0;
+  
+  start = checked;
+  buffer = (const char*)g_buffered_input_stream_peek_buffer (bstream, &available) + start;
+  end = available;
+  peeked = end - start;
+
+  for (i = 0; checked < available && i < peeked; i++)
+    {
+      switch (priv->newline_type)
+	{
+	case G_DATA_STREAM_NEWLINE_TYPE_LF:
+	  if (buffer[i] == 10)
+	    {
+	      found_pos = start + i;
+	      newline_len = 1;
+	    }
+	  break;
+	case G_DATA_STREAM_NEWLINE_TYPE_CR:
+	  if (buffer[i] == 13)
+	    {
+	      found_pos = start + i;
+	      newline_len = 1;
+	    }
+	  break;
+	case G_DATA_STREAM_NEWLINE_TYPE_CR_LF:
+	  if (last_saw_cr && buffer[i] == 10)
+	    {
+	      found_pos = start + i - 1;
+	      newline_len = 2;
+	    }
+	  break;
+	default:
+	case G_DATA_STREAM_NEWLINE_TYPE_ANY:
+	  if (buffer[i] == 10) /* LF */
+	    {
+	      if (last_saw_cr)
+		{
+		  /* CR LF */
+		  found_pos = start + i - 1;
+		  newline_len = 2;
+		}
+	      else
+		{
+		  /* LF */
+		  found_pos = start + i;
+		  newline_len = 1;
+		}
+	    }
+	  else if (last_saw_cr)
+	    {
+	      /* Last was cr, this is not LF, end is CR */
+	      found_pos = start + i - 1;
+	      newline_len = 1;
+	    }
+	  /* Don't check for CR here, instead look at last_saw_cr on next byte */
+	  break;
+	}
+	
+      last_saw_cr = (buffer[i] == 13);
+
+      if (found_pos != -1)
+	{
+	  *newline_len_out = newline_len;
+	  return found_pos;
+	}
+    }
+
+  checked = end;
+
+  *checked_out = checked;
+  *last_saw_cr_out = last_saw_cr;
+  return -1;
+}
+		  
+
+/**
+ * g_data_input_stream_read_line:
+ * @stream: a given #GDataInputStream.
+ * @length: a #gsize to get the length of the data read in.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ *
+ * Reads a line from the data input stream.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
+ *
+ * Returns: a string with the line that was read in (without the newlines).
+ *     Set @length to a #gsize to get the length of the read line.
+ *     On an error, it will return %NULL and @error will be set. If there's no
+ *     content to read, it will still return %NULL, but @error won't be set.
+ **/
+char *
+g_data_input_stream_read_line (GDataInputStream  *stream,
+			       gsize             *length,
+			       GCancellable      *cancellable,
+			       GError           **error)
+{
+  GBufferedInputStream *bstream;
+  gsize checked;
+  gboolean last_saw_cr;
+  gssize found_pos;
+  gssize res;
+  int newline_len;
+  char *line;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), NULL);  
+
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+
+  newline_len = 0;
+  checked = 0;
+  last_saw_cr = FALSE;
+
+  while ((found_pos = scan_for_newline (stream, &checked, &last_saw_cr, &newline_len)) == -1)
+    {
+      if (g_buffered_input_stream_get_available (bstream) ==
+	  g_buffered_input_stream_get_buffer_size (bstream))
+	g_buffered_input_stream_set_buffer_size (bstream,
+						 2 * g_buffered_input_stream_get_buffer_size (bstream));
+
+      res = g_buffered_input_stream_fill (bstream, -1, cancellable, error);
+      if (res < 0)
+	return NULL;
+      if (res == 0)
+	{
+	  /* End of stream */
+	  if (g_buffered_input_stream_get_available (bstream) == 0)
+	    {
+	      if (length)
+		*length = 0;
+	      return NULL;
+	    }
+	  else
+	    {
+	      found_pos = checked;
+	      newline_len = 0;
+	      break;
+	    }
+	}
+    }
+
+  line = g_malloc (found_pos + newline_len + 1);
+
+  res = g_input_stream_read (G_INPUT_STREAM (stream),
+			     line,
+			     found_pos + newline_len,
+			     NULL, NULL);
+  if (length)
+    *length = (gsize)found_pos;
+  g_warn_if_fail (res == found_pos + newline_len);
+  line[found_pos] = 0;
+  
+  return line;
+}
+
+static gssize
+scan_for_chars (GDataInputStream *stream,
+		gsize            *checked_out,
+		const char       *stop_chars)
+{
+  GBufferedInputStream *bstream;
+  GDataInputStreamPrivate *priv;
+  const char *buffer;
+  gsize start, end, peeked;
+  int i;
+  gssize found_pos;
+  gsize available, checked;
+  const char *stop_char;
+
+  priv = stream->priv;
+  
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+
+  checked = *checked_out;
+  found_pos = -1;
+  
+  start = checked;
+  buffer = (const char *)g_buffered_input_stream_peek_buffer (bstream, &available) + start;
+  end = available;
+  peeked = end - start;
+
+  for (i = 0; checked < available && i < peeked; i++)
+    {
+      for (stop_char = stop_chars; *stop_char != '\0'; stop_char++)
+	{
+	  if (buffer[i] == *stop_char)
+	    return (start + i);
+	}
+    }
+
+  checked = end;
+
+  *checked_out = checked;
+  return -1;
+}
+
+/**
+ * g_data_input_stream_read_until:
+ * @stream: a given #GDataInputStream.
+ * @stop_chars: characters to terminate the read.
+ * @length: a #gsize to get the length of the data read in.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ *
+ * Reads a string from the data input stream, up to the first
+ * occurrence of any of the stop characters.
+ *
+ * Returns: a string with the data that was read before encountering
+ *     any of the stop characters. Set @length to a #gsize to get the length
+ *     of the string. This function will return %NULL on an error.
+ */
+char *
+g_data_input_stream_read_until (GDataInputStream  *stream,
+			       const gchar        *stop_chars,
+			       gsize              *length,
+			       GCancellable       *cancellable,
+			       GError            **error)
+{
+  GBufferedInputStream *bstream;
+  gsize checked;
+  gssize found_pos;
+  gssize res;
+  int stop_char_len;
+  char *data_until;
+  
+  g_return_val_if_fail (G_IS_DATA_INPUT_STREAM (stream), NULL);  
+
+  bstream = G_BUFFERED_INPUT_STREAM (stream);
+
+  stop_char_len = 1;
+  checked = 0;
+
+  while ((found_pos = scan_for_chars (stream, &checked, stop_chars)) == -1)
+    {
+      if (g_buffered_input_stream_get_available (bstream) ==
+	  g_buffered_input_stream_get_buffer_size (bstream))
+	g_buffered_input_stream_set_buffer_size (bstream,
+						 2 * g_buffered_input_stream_get_buffer_size (bstream));
+
+      res = g_buffered_input_stream_fill (bstream, -1, cancellable, error);
+      if (res < 0)
+	return NULL;
+      if (res == 0)
+	{
+	  /* End of stream */
+	  if (g_buffered_input_stream_get_available (bstream) == 0)
+	    {
+	      if (length)
+		*length = 0;
+	      return NULL;
+	    }
+	  else
+	    {
+	      found_pos = checked;
+	      stop_char_len = 0;
+	      break;
+	    }
+	}
+    }
+
+  data_until = g_malloc (found_pos + stop_char_len + 1);
+
+  res = g_input_stream_read (G_INPUT_STREAM (stream),
+			     data_until,
+			     found_pos + stop_char_len,
+			     NULL, NULL);
+  if (length)
+    *length = (gsize)found_pos;
+  g_warn_if_fail (res == found_pos + stop_char_len);
+  data_until[found_pos] = 0;
+  
+  return data_until;
+}
+
+typedef struct
+{
+  GDataInputStream *stream;
+  GSimpleAsyncResult *simple;
+  gboolean last_saw_cr;
+  gsize checked;
+  gint io_priority;
+  GCancellable *cancellable;
+
+  gchar *stop_chars;
+  gchar *line;
+  gsize length;
+} GDataInputStreamReadData;
+
+static void
+g_data_input_stream_read_complete (GDataInputStreamReadData *data,
+                                   gsize                     read_length,
+                                   gsize                     skip_length,
+                                   gboolean                  need_idle_dispatch)
+{
+  if (read_length || skip_length)
+    {
+      gssize bytes;
+
+      data->length = read_length;
+      data->line = g_malloc (read_length + 1);
+      data->line[read_length] = '\0';
+
+      /* we already checked the buffer.  this shouldn't fail. */
+      bytes = g_input_stream_read (G_INPUT_STREAM (data->stream),
+                                   data->line, read_length, NULL, NULL);
+      g_assert_cmpint (bytes, ==, read_length);
+
+      bytes = g_input_stream_skip (G_INPUT_STREAM (data->stream),
+                                   skip_length, NULL, NULL);
+      g_assert_cmpint (bytes, ==, skip_length);
+    }
+
+  if (need_idle_dispatch)
+    g_simple_async_result_complete_in_idle (data->simple);
+  else
+    g_simple_async_result_complete (data->simple);
+
+  g_object_unref (data->simple);
+}
+
+static void
+g_data_input_stream_read_line_ready (GObject      *object,
+                                     GAsyncResult *result,
+                                     gpointer      user_data)
+{
+  GDataInputStreamReadData *data = user_data;
+  gssize found_pos;
+  gint newline_len;
+
+  if (result)
+    /* this is a callback.  finish the async call. */
+    {
+      GBufferedInputStream *buffer = G_BUFFERED_INPUT_STREAM (data->stream);
+      GError *error = NULL;
+      gssize bytes;
+
+      bytes = g_buffered_input_stream_fill_finish (buffer, result, &error);
+
+      if (bytes <= 0)
+        {
+          if (bytes < 0)
+            /* stream error. */
+            {
+              g_simple_async_result_set_from_error (data->simple, error);
+              g_error_free (error);
+              data->checked = 0;
+            }
+
+          g_data_input_stream_read_complete (data, data->checked, 0, FALSE);
+          return;
+        }
+
+      /* only proceed if we got more bytes... */
+    }
+
+  if (data->stop_chars)
+    {
+      found_pos = scan_for_chars (data->stream,
+                                  &data->checked,
+                                  data->stop_chars);
+      newline_len = 0;
+    }
+  else
+    found_pos = scan_for_newline (data->stream, &data->checked,
+                                  &data->last_saw_cr, &newline_len);
+
+  if (found_pos == -1)
+    /* didn't find a full line; need to buffer some more bytes */
+    {
+      GBufferedInputStream *buffer = G_BUFFERED_INPUT_STREAM (data->stream);
+      gsize size;
+
+      size = g_buffered_input_stream_get_buffer_size (buffer);
+
+      if (g_buffered_input_stream_get_available (buffer) == size)
+        /* need to grow the buffer */
+        g_buffered_input_stream_set_buffer_size (buffer, size * 2);
+
+      /* try again */
+      g_buffered_input_stream_fill_async (buffer, -1, data->io_priority,
+                                          data->cancellable,
+                                          g_data_input_stream_read_line_ready,
+                                          user_data);
+    }
+  else
+    {
+      /* read the line and the EOL.  no error is possible. */
+      g_data_input_stream_read_complete (data, found_pos,
+                                         newline_len, result == NULL);
+    }
+}
+
+static void
+g_data_input_stream_read_data_free (gpointer user_data)
+{
+  GDataInputStreamReadData *data = user_data;
+
+  /* we don't hold a ref to ->simple because it keeps a ref to us.
+   * we are called because it is being finalized.
+   */
+
+  g_free (data->stop_chars);
+  if (data->cancellable)
+    g_object_unref (data->cancellable);
+  g_free (data->line);
+  g_slice_free (GDataInputStreamReadData, data);
+}
+
+static void
+g_data_input_stream_read_async (GDataInputStream    *stream,
+                                const gchar         *stop_chars,
+                                gint                 io_priority,
+                                GCancellable        *cancellable,
+                                GAsyncReadyCallback  callback,
+                                gpointer             user_data,
+                                gpointer             source_tag)
+{
+  GDataInputStreamReadData *data;
+
+  data = g_slice_new (GDataInputStreamReadData);
+  data->stream = stream;
+  if (cancellable)
+    g_object_ref (cancellable);
+  data->cancellable = cancellable;
+  data->stop_chars = g_strdup (stop_chars);
+  data->io_priority = io_priority;
+  data->last_saw_cr = FALSE;
+  data->checked = 0;
+  data->line = NULL;
+
+  data->simple = g_simple_async_result_new (G_OBJECT (stream), callback,
+                                            user_data, source_tag);
+  g_simple_async_result_set_op_res_gpointer (data->simple, data,
+                                             g_data_input_stream_read_data_free);
+  g_data_input_stream_read_line_ready (NULL, NULL, data);
+}
+
+static gchar *
+g_data_input_stream_read_finish (GDataInputStream  *stream,
+                                 GAsyncResult      *result,
+                                 gsize             *length,
+                                 GError           **error)
+{
+  GDataInputStreamReadData *data;
+  GSimpleAsyncResult *simple;
+  gchar *line;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  if (g_simple_async_result_propagate_error (simple, error))
+    return NULL;
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+
+  line = data->line;
+  data->line = NULL;
+
+  if (length && line)
+    *length = data->length;
+
+  return line;
+}
+
+/**
+ * g_data_input_stream_read_line_async:
+ * @stream: a given #GDataInputStream.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link>
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: callback to call when the request is satisfied.
+ * @user_data: the data to pass to callback function.
+ *
+ * The asynchronous version of g_data_input_stream_read_line().  It is
+ * an error to have two outstanding calls to this function.
+ *
+ * When the operation is finished, @callback will be called. You
+ * can then call g_data_input_stream_read_line_finish() to get
+ * the result of the operation.
+ *
+ * Since: 2.20
+ */
+void
+g_data_input_stream_read_line_async (GDataInputStream    *stream,
+                                     gint                 io_priority,
+                                     GCancellable        *cancellable,
+                                     GAsyncReadyCallback  callback,
+                                     gpointer             user_data)
+{
+  g_return_if_fail (G_IS_DATA_INPUT_STREAM (stream));
+  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+  g_data_input_stream_read_async (stream, NULL, io_priority,
+                                  cancellable, callback, user_data,
+                                  g_data_input_stream_read_line_async);
+}
+
+/**
+ * g_data_input_stream_read_until_async:
+ * @stream: a given #GDataInputStream.
+ * @stop_chars: characters to terminate the read.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link>
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: callback to call when the request is satisfied.
+ * @user_data: the data to pass to callback function.
+ *
+ * The asynchronous version of g_data_input_stream_read_until().
+ * It is an error to have two outstanding calls to this function.
+ *
+ * When the operation is finished, @callback will be called. You
+ * can then call g_data_input_stream_read_until_finish() to get
+ * the result of the operation.
+ *
+ * Since: 2.20
+ */
+void
+g_data_input_stream_read_until_async (GDataInputStream    *stream,
+                                      const gchar         *stop_chars,
+                                      gint                 io_priority,
+                                      GCancellable        *cancellable,
+                                      GAsyncReadyCallback  callback,
+                                      gpointer             user_data)
+{
+  g_return_if_fail (G_IS_DATA_INPUT_STREAM (stream));
+  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+  g_return_if_fail (stop_chars != NULL);
+
+  g_data_input_stream_read_async (stream, stop_chars, io_priority,
+                                  cancellable, callback, user_data,
+                                  g_data_input_stream_read_until_async);
+}
+
+/**
+ * g_data_input_stream_read_line_finish:
+ * @stream: a given #GDataInputStream.
+ * @result: the #GAsyncResult that was provided to the callback.
+ * @length: a #gsize to get the length of the data read in.
+ * @error: #GError for error reporting.
+ *
+ * Finish an asynchronous call started by
+ * g_data_input_stream_read_line_async().
+ *
+ * Returns: a string with the line that was read in (without the newlines).
+ *     Set @length to a #gsize to get the length of the read line.
+ *     On an error, it will return %NULL and @error will be set. If there's no
+ *     content to read, it will still return %NULL, but @error won't be set.
+ *
+ * Since: 2,20
+ */
+gchar *
+g_data_input_stream_read_line_finish (GDataInputStream  *stream,
+                                      GAsyncResult      *result,
+                                      gsize             *length,
+                                      GError           **error)
+{
+  g_return_val_if_fail (
+    g_simple_async_result_is_valid (result, G_OBJECT (stream),
+      g_data_input_stream_read_line_async), NULL);
+
+  return g_data_input_stream_read_finish (stream, result, length, error);
+}
+
+/**
+ * g_data_input_stream_read_until_finish:
+ * @stream: a given #GDataInputStream.
+ * @result: the #GAsyncResult that was provided to the callback.
+ * @length: a #gsize to get the length of the data read in.
+ * @error: #GError for error reporting.
+ *
+ * Finish an asynchronous call started by
+ * g_data_input_stream_read_until_async().
+ *
+ * Since: 2.20
+ *
+ * Returns: a string with the data that was read before encountering
+ *     any of the stop characters. Set @length to a #gsize to get the length
+ *     of the string. This function will return %NULL on an error.
+ */
+gchar *
+g_data_input_stream_read_until_finish (GDataInputStream  *stream,
+                                       GAsyncResult      *result,
+                                       gsize             *length,
+                                       GError           **error)
+{
+  g_return_val_if_fail (
+    g_simple_async_result_is_valid (result, G_OBJECT (stream),
+      g_data_input_stream_read_until_async), NULL);
+
+  return g_data_input_stream_read_finish (stream, result, length, error);
+}
+
+
+#define __G_DATA_INPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gdatainputstream.h b/gio/gdatainputstream.h
new file mode 100644
index 0000000..c01ef87
--- /dev/null
+++ b/gio/gdatainputstream.h
@@ -0,0 +1,133 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_DATA_INPUT_STREAM_H__
+#define __G_DATA_INPUT_STREAM_H__
+
+#include <gio/gbufferedinputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_DATA_INPUT_STREAM         (g_data_input_stream_get_type ())
+#define G_DATA_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DATA_INPUT_STREAM, GDataInputStream))
+#define G_DATA_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DATA_INPUT_STREAM, GDataInputStreamClass))
+#define G_IS_DATA_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DATA_INPUT_STREAM))
+#define G_IS_DATA_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DATA_INPUT_STREAM))
+#define G_DATA_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DATA_INPUT_STREAM, GDataInputStreamClass))
+
+/**
+ * GDataInputStream:
+ * @parent: a #GBufferedInputStream.
+ *
+ * An implementation of #GBufferedInputStream that allows for high-level
+ * data manipulation of arbitrary data (including binary operations).
+ **/
+typedef struct _GDataInputStreamClass    GDataInputStreamClass;
+typedef struct _GDataInputStreamPrivate  GDataInputStreamPrivate;
+
+struct _GDataInputStream
+{
+  GBufferedInputStream parent_instance;
+
+  /*< private >*/
+  GDataInputStreamPrivate *priv;
+};
+
+struct _GDataInputStreamClass
+{
+  GBufferedInputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType                  g_data_input_stream_get_type             (void) G_GNUC_CONST;
+GDataInputStream *     g_data_input_stream_new                  (GInputStream            *base_stream);
+
+void                   g_data_input_stream_set_byte_order       (GDataInputStream        *stream,
+							         GDataStreamByteOrder     order);
+GDataStreamByteOrder   g_data_input_stream_get_byte_order       (GDataInputStream        *stream);
+void                   g_data_input_stream_set_newline_type     (GDataInputStream        *stream,
+							         GDataStreamNewlineType   type);
+GDataStreamNewlineType g_data_input_stream_get_newline_type     (GDataInputStream        *stream);
+guchar                 g_data_input_stream_read_byte            (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+gint16                 g_data_input_stream_read_int16           (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+guint16                g_data_input_stream_read_uint16          (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+gint32                 g_data_input_stream_read_int32           (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+guint32                g_data_input_stream_read_uint32          (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+gint64                 g_data_input_stream_read_int64           (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+guint64                g_data_input_stream_read_uint64          (GDataInputStream        *stream,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+char *                 g_data_input_stream_read_line            (GDataInputStream        *stream,
+							         gsize                   *length,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+void                   g_data_input_stream_read_line_async      (GDataInputStream        *stream,
+                                                                 gint                     io_priority,
+                                                                 GCancellable            *cancellable,
+                                                                 GAsyncReadyCallback      callback,
+                                                                 gpointer                 user_data);
+char *                 g_data_input_stream_read_line_finish     (GDataInputStream        *stream,
+                                                                 GAsyncResult            *result,
+                                                                 gsize                   *length,
+                                                                 GError                 **error);
+char *                 g_data_input_stream_read_until           (GDataInputStream        *stream,
+							         const gchar             *stop_chars,
+							         gsize                   *length,
+							         GCancellable            *cancellable,
+							         GError                 **error);
+void                   g_data_input_stream_read_until_async     (GDataInputStream        *stream,
+							         const gchar             *stop_chars,
+                                                                 gint                     io_priority,
+                                                                 GCancellable            *cancellable,
+                                                                 GAsyncReadyCallback      callback,
+                                                                 gpointer                 user_data);
+char *                 g_data_input_stream_read_until_finish    (GDataInputStream        *stream,
+                                                                 GAsyncResult            *result,
+                                                                 gsize                   *length,
+                                                                 GError                 **error);
+
+G_END_DECLS
+
+#endif /* __G_DATA_INPUT_STREAM_H__ */
diff --git a/gio/gdataoutputstream.c b/gio/gdataoutputstream.c
new file mode 100644
index 0000000..1dc2dd8
--- /dev/null
+++ b/gio/gdataoutputstream.c
@@ -0,0 +1,506 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <string.h>
+#include "gdataoutputstream.h"
+#include "gioenumtypes.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gdataoutputstream
+ * @short_description: Data Output Stream
+ * @include: gio/gio.h
+ * @see_also: #GOutputStream
+ * 
+ * Data output stream implements #GOutputStream and includes functions for 
+ * writing data directly to an output stream.
+ *
+ **/
+
+
+
+struct _GDataOutputStreamPrivate {
+  GDataStreamByteOrder byte_order;
+};
+
+enum {
+  PROP_0,
+  PROP_BYTE_ORDER
+};
+
+static void g_data_output_stream_set_property (GObject      *object,
+					       guint         prop_id,
+					       const GValue *value,
+					       GParamSpec   *pspec);
+static void g_data_output_stream_get_property (GObject      *object,
+					       guint         prop_id,
+					       GValue       *value,
+					       GParamSpec   *pspec);
+
+G_DEFINE_TYPE (GDataOutputStream,
+               g_data_output_stream,
+               G_TYPE_FILTER_OUTPUT_STREAM)
+
+
+static void
+g_data_output_stream_class_init (GDataOutputStreamClass *klass)
+{
+  GObjectClass *object_class;
+
+  g_type_class_add_private (klass, sizeof (GDataOutputStreamPrivate));
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->get_property = g_data_output_stream_get_property;
+  object_class->set_property = g_data_output_stream_set_property;
+
+  /**
+   * GDataOutputStream:byte-order:
+   *
+   * Determines the byte ordering that is used when writing 
+   * multi-byte entities (such as integers) to the stream.
+   */
+  g_object_class_install_property (object_class,
+                                   PROP_BYTE_ORDER,
+                                   g_param_spec_enum ("byte-order",
+                                                      P_("Byte order"),
+                                                      P_("The byte order"),
+                                                      G_TYPE_DATA_STREAM_BYTE_ORDER,
+                                                      G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN,
+                                                      G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_BLURB));
+
+}
+
+static void
+g_data_output_stream_set_property (GObject     *object,
+				  guint         prop_id,
+				  const GValue *value,
+				  GParamSpec   *pspec)
+{
+  GDataOutputStream *dstream;
+
+  dstream = G_DATA_OUTPUT_STREAM (object);
+
+  switch (prop_id) 
+    {
+    case PROP_BYTE_ORDER:
+      g_data_output_stream_set_byte_order (dstream, g_value_get_enum (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_data_output_stream_get_property (GObject    *object,
+				   guint       prop_id,
+				   GValue     *value,
+				   GParamSpec *pspec)
+{
+  GDataOutputStreamPrivate *priv;
+  GDataOutputStream        *dstream;
+
+  dstream = G_DATA_OUTPUT_STREAM (object);
+  priv = dstream->priv;
+
+  switch (prop_id)
+    {
+    case PROP_BYTE_ORDER:
+      g_value_set_enum (value, priv->byte_order);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_data_output_stream_init (GDataOutputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                              G_TYPE_DATA_OUTPUT_STREAM,
+                                              GDataOutputStreamPrivate);
+
+  stream->priv->byte_order = G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN;
+}
+
+/**
+ * g_data_output_stream_new:
+ * @base_stream: a #GOutputStream.
+ * 
+ * Creates a new data output stream for @base_stream.
+ * 
+ * Returns: #GDataOutputStream.
+ **/
+GDataOutputStream *
+g_data_output_stream_new (GOutputStream *base_stream)
+{
+  GDataOutputStream *stream;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (base_stream), NULL);
+
+  stream = g_object_new (G_TYPE_DATA_OUTPUT_STREAM,
+                         "base-stream", base_stream,
+                         NULL);
+
+  return stream;
+}
+
+/**
+ * g_data_output_stream_set_byte_order:
+ * @stream: a #GDataOutputStream.
+ * @order: a %GDataStreamByteOrder.
+ * 
+ * Sets the byte order of the data output stream to @order.
+ **/
+void
+g_data_output_stream_set_byte_order (GDataOutputStream    *stream,
+                                     GDataStreamByteOrder  order)
+{
+  GDataOutputStreamPrivate *priv;
+  g_return_if_fail (G_IS_DATA_OUTPUT_STREAM (stream));
+  priv = stream->priv;
+  if (priv->byte_order != order)
+    {
+      priv->byte_order = order;
+      g_object_notify (G_OBJECT (stream), "byte-order");
+    }
+}
+
+/**
+ * g_data_output_stream_get_byte_order:
+ * @stream: a #GDataOutputStream.
+ * 
+ * Gets the byte order for the stream.
+ * 
+ * Returns: the #GDataStreamByteOrder for the @stream.
+ **/
+GDataStreamByteOrder
+g_data_output_stream_get_byte_order (GDataOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN);
+
+  return stream->priv->byte_order;
+}
+
+/**
+ * g_data_output_stream_put_byte:
+ * @stream: a #GDataOutputStream.
+ * @data: a #guchar.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts a byte into the output stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_byte (GDataOutputStream  *stream,
+			       guchar              data,
+			       GCancellable       *cancellable,
+			       GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 1,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_int16:
+ * @stream: a #GDataOutputStream.
+ * @data: a #gint16.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts a signed 16-bit integer into the output stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_int16 (GDataOutputStream  *stream,
+				gint16              data,
+				GCancellable       *cancellable,
+				GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  switch (stream->priv->byte_order)
+    {
+    case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+      data = GINT16_TO_BE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+      data = GINT16_TO_LE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+    default:
+      break;
+    }
+  
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 2,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_uint16:
+ * @stream: a #GDataOutputStream.
+ * @data: a #guint16.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts an unsigned 16-bit integer into the output stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_uint16 (GDataOutputStream  *stream,
+				 guint16             data,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  switch (stream->priv->byte_order)
+    {
+    case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+      data = GUINT16_TO_BE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+      data = GUINT16_TO_LE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+    default:
+      break;
+    }
+  
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 2,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_int32:
+ * @stream: a #GDataOutputStream.
+ * @data: a #gint32.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts a signed 32-bit integer into the output stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_int32 (GDataOutputStream  *stream,
+				gint32              data,
+				GCancellable       *cancellable,
+				GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  switch (stream->priv->byte_order)
+    {
+    case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+      data = GINT32_TO_BE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+      data = GINT32_TO_LE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+    default:
+      break;
+    }
+  
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 4,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_uint32:
+ * @stream: a #GDataOutputStream.
+ * @data: a #guint32.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts an unsigned 32-bit integer into the stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_uint32 (GDataOutputStream  *stream,
+				 guint32             data,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  switch (stream->priv->byte_order)
+    {
+    case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+      data = GUINT32_TO_BE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+      data = GUINT32_TO_LE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+    default:
+      break;
+    }
+  
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 4,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_int64:
+ * @stream: a #GDataOutputStream.
+ * @data: a #gint64.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts a signed 64-bit integer into the stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_int64 (GDataOutputStream  *stream,
+				gint64              data,
+				GCancellable       *cancellable,
+				GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  switch (stream->priv->byte_order)
+    {
+    case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+      data = GINT64_TO_BE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+      data = GINT64_TO_LE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+    default:
+      break;
+    }
+  
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 8,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_uint64:
+ * @stream: a #GDataOutputStream.
+ * @data: a #guint64.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts an unsigned 64-bit integer into the stream.
+ * 
+ * Returns: %TRUE if @data was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_uint64 (GDataOutputStream  *stream,
+				 guint64             data,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+
+  switch (stream->priv->byte_order)
+    {
+    case G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN:
+      data = GUINT64_TO_BE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN:
+      data = GUINT64_TO_LE (data);
+      break;
+    case G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN:
+    default:
+      break;
+    }
+  
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    &data, 8,
+				    &bytes_written,
+				    cancellable, error);
+}
+
+/**
+ * g_data_output_stream_put_string:
+ * @stream: a #GDataOutputStream.
+ * @str: a string.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Puts a string into the output stream. 
+ * 
+ * Returns: %TRUE if @string was successfully added to the @stream.
+ **/
+gboolean
+g_data_output_stream_put_string (GDataOutputStream  *stream,
+				 const char         *str,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  gsize bytes_written;
+  
+  g_return_val_if_fail (G_IS_DATA_OUTPUT_STREAM (stream), FALSE);
+  g_return_val_if_fail (str != NULL, FALSE);
+
+  return g_output_stream_write_all (G_OUTPUT_STREAM (stream),
+				    str, strlen (str),
+				    &bytes_written,
+				    cancellable, error);
+}  
+
+#define __G_DATA_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gdataoutputstream.h b/gio/gdataoutputstream.h
new file mode 100644
index 0000000..f864b18
--- /dev/null
+++ b/gio/gdataoutputstream.h
@@ -0,0 +1,116 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_DATA_OUTPUT_STREAM_H__
+#define __G_DATA_OUTPUT_STREAM_H__
+
+#include <gio/gfilteroutputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_DATA_OUTPUT_STREAM         (g_data_output_stream_get_type ())
+#define G_DATA_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStream))
+#define G_DATA_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStreamClass))
+#define G_IS_DATA_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DATA_OUTPUT_STREAM))
+#define G_IS_DATA_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DATA_OUTPUT_STREAM))
+#define G_DATA_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DATA_OUTPUT_STREAM, GDataOutputStreamClass))
+
+/**
+ * GDataOutputStream:
+ * @parent_instance: a #GBufferedOutputStream.
+ *
+ * An implementation of #GBufferedOutputStream that allows for high-level
+ * data manipulation of arbitrary data (including binary operations).
+ **/
+typedef struct _GDataOutputStream         GDataOutputStream;
+typedef struct _GDataOutputStreamClass    GDataOutputStreamClass;
+typedef struct _GDataOutputStreamPrivate  GDataOutputStreamPrivate;
+
+struct _GDataOutputStream
+{
+  GFilterOutputStream parent_instance;
+
+  /*< private >*/
+  GDataOutputStreamPrivate *priv;
+};
+
+struct _GDataOutputStreamClass
+{
+  GFilterOutputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+
+GType                g_data_output_stream_get_type       (void) G_GNUC_CONST;
+GDataOutputStream *  g_data_output_stream_new            (GOutputStream         *base_stream);
+
+void                 g_data_output_stream_set_byte_order (GDataOutputStream     *stream,
+							  GDataStreamByteOrder   order);
+GDataStreamByteOrder g_data_output_stream_get_byte_order (GDataOutputStream     *stream);
+
+gboolean             g_data_output_stream_put_byte       (GDataOutputStream     *stream,
+							  guchar                 data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_int16      (GDataOutputStream     *stream,
+							  gint16                 data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_uint16     (GDataOutputStream     *stream,
+							  guint16                data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_int32      (GDataOutputStream     *stream,
+							  gint32                 data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_uint32     (GDataOutputStream     *stream,
+							  guint32                data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_int64      (GDataOutputStream     *stream,
+							  gint64                 data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_uint64     (GDataOutputStream     *stream,
+							  guint64                data,
+							  GCancellable          *cancellable,
+							  GError               **error);
+gboolean             g_data_output_stream_put_string     (GDataOutputStream     *stream,
+							  const char            *str,
+							  GCancellable          *cancellable,
+							  GError               **error);
+
+G_END_DECLS
+
+#endif /* __G_DATA_OUTPUT_STREAM_H__ */
diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c
new file mode 100644
index 0000000..fea0761
--- /dev/null
+++ b/gio/gdesktopappinfo.c
@@ -0,0 +1,2833 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright © 2007 Ryan Lortie
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+#ifdef HAVE_CRT_EXTERNS_H
+#include <crt_externs.h>
+#endif
+
+#include "gcontenttypeprivate.h"
+#include "gdesktopappinfo.h"
+#include "gfile.h"
+#include "gioerror.h"
+#include "gthemedicon.h"
+#include "gfileicon.h"
+#include <glib/gstdio.h>
+#include "glibintl.h"
+#include "giomodule-priv.h"
+#include "gappinfo.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gdesktopappinfo
+ * @short_description: Application information from desktop files
+ * @include: gio/gdesktopappinfo.h 
+ * 
+ * #GDesktopAppInfo is an implementation of #GAppInfo based on
+ * desktop files.
+ * 
+ * Note that <filename>&lt;gio/gdesktopappinfo.h&gt;</filename> belongs to 
+ * the UNIX-specific GIO interfaces, thus you have to use the 
+ * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ */
+
+#define DEFAULT_APPLICATIONS_GROUP  "Default Applications" 
+#define ADDED_ASSOCIATIONS_GROUP    "Added Associations" 
+#define REMOVED_ASSOCIATIONS_GROUP  "Removed Associations" 
+#define MIME_CACHE_GROUP            "MIME Cache"
+
+static void     g_desktop_app_info_iface_init         (GAppInfoIface    *iface);
+static GList *  get_all_desktop_entries_for_mime_type (const char       *base_mime_type,
+						       const char      **except);
+static void     mime_info_cache_reload                (const char       *dir);
+static gboolean g_desktop_app_info_ensure_saved       (GDesktopAppInfo  *info,
+						       GError          **error);
+
+/**
+ * GDesktopAppInfo:
+ * 
+ * Information about an installed application from a desktop file.
+ */
+struct _GDesktopAppInfo
+{
+  GObject parent_instance;
+
+  char *desktop_id;
+  char *filename;
+
+  char *name;
+  /* FIXME: what about GenericName ? */
+  char *comment;
+  char *icon_name;
+  GIcon *icon;
+  char **only_show_in;
+  char **not_show_in;
+  char *try_exec;
+  char *exec;
+  char *binary;
+  char *path;
+
+  guint nodisplay       : 1;
+  guint hidden          : 1;
+  guint terminal        : 1;
+  guint startup_notify  : 1;
+  guint no_fuse         : 1;
+  /* FIXME: what about StartupWMClass ? */
+};
+
+G_DEFINE_TYPE_WITH_CODE (GDesktopAppInfo, g_desktop_app_info, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_APP_INFO,
+						g_desktop_app_info_iface_init))
+
+static gpointer
+search_path_init (gpointer data)
+{
+  char **args = NULL;
+  const char * const *data_dirs;
+  const char *user_data_dir;
+  int i, length, j;
+
+  data_dirs = g_get_system_data_dirs ();
+  length = g_strv_length ((char **) data_dirs);
+  
+  args = g_new (char *, length + 2);
+  
+  j = 0;
+  user_data_dir = g_get_user_data_dir ();
+  args[j++] = g_build_filename (user_data_dir, "applications", NULL);
+  for (i = 0; i < length; i++)
+    args[j++] = g_build_filename (data_dirs[i],
+				  "applications", NULL);
+  args[j++] = NULL;
+  
+  return args;
+}
+  
+static const char * const *
+get_applications_search_path (void)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  return g_once (&once_init, search_path_init, NULL);
+}
+
+static void
+g_desktop_app_info_finalize (GObject *object)
+{
+  GDesktopAppInfo *info;
+
+  info = G_DESKTOP_APP_INFO (object);
+
+  g_free (info->desktop_id);
+  g_free (info->filename);
+  g_free (info->name);
+  g_free (info->comment);
+  g_free (info->icon_name);
+  if (info->icon)
+    g_object_unref (info->icon);
+  g_strfreev (info->only_show_in);
+  g_strfreev (info->not_show_in);
+  g_free (info->try_exec);
+  g_free (info->exec);
+  g_free (info->binary);
+  g_free (info->path);
+  
+  G_OBJECT_CLASS (g_desktop_app_info_parent_class)->finalize (object);
+}
+
+static void
+g_desktop_app_info_class_init (GDesktopAppInfoClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_desktop_app_info_finalize;
+}
+
+static void
+g_desktop_app_info_init (GDesktopAppInfo *local)
+{
+}
+
+static char *
+binary_from_exec (const char *exec)
+{
+  const char *p, *start;
+  
+  p = exec;
+  while (*p == ' ')
+    p++;
+  start = p;
+  while (*p != ' ' && *p != 0)
+    p++;
+  
+  return g_strndup (start, p - start);
+  
+}
+
+/**
+ * g_desktop_app_info_new_from_keyfile:
+ * @key_file: an opened #GKeyFile
+ * 
+ * Creates a new #GDesktopAppInfo.
+ *
+ * Returns: a new #GDesktopAppInfo or %NULL on error.
+ *
+ * Since: 2.18
+ **/
+GDesktopAppInfo *
+g_desktop_app_info_new_from_keyfile (GKeyFile *key_file)
+{
+  GDesktopAppInfo *info;
+  char *start_group;
+  char *type;
+  char *try_exec;
+  
+  start_group = g_key_file_get_start_group (key_file);
+  if (start_group == NULL || strcmp (start_group, G_KEY_FILE_DESKTOP_GROUP) != 0)
+    {
+      g_free (start_group);
+      return NULL;
+    }
+  g_free (start_group);
+
+  type = g_key_file_get_string (key_file,
+                                G_KEY_FILE_DESKTOP_GROUP,
+                                G_KEY_FILE_DESKTOP_KEY_TYPE,
+                                NULL);
+  if (type == NULL || strcmp (type, G_KEY_FILE_DESKTOP_TYPE_APPLICATION) != 0)
+    {
+      g_free (type);
+      return NULL;
+    }
+  g_free (type);
+
+  try_exec = g_key_file_get_string (key_file,
+                                    G_KEY_FILE_DESKTOP_GROUP,
+                                    G_KEY_FILE_DESKTOP_KEY_TRY_EXEC,
+                                    NULL);
+  if (try_exec && try_exec[0] != '\0')
+    {
+      char *t;
+      t = g_find_program_in_path (try_exec);
+      if (t == NULL)
+	{
+	  g_free (try_exec);
+	  return NULL;
+	}
+      g_free (t);
+    }
+
+  info = g_object_new (G_TYPE_DESKTOP_APP_INFO, NULL);
+  info->filename = NULL;
+
+  info->name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL);
+  info->comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, NULL, NULL);
+  info->nodisplay = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, NULL) != FALSE;
+  info->icon_name =  g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ICON, NULL, NULL);
+  info->only_show_in = g_key_file_get_string_list (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN, NULL, NULL);
+  info->not_show_in = g_key_file_get_string_list (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN, NULL, NULL);
+  info->try_exec = try_exec;
+  info->exec = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_EXEC, NULL);
+  info->path = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_PATH, NULL);
+  info->terminal = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TERMINAL, NULL) != FALSE;
+  info->startup_notify = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY, NULL) != FALSE;
+  info->no_fuse = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, "X-GIO-NoFuse", NULL) != FALSE;
+  info->hidden = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_HIDDEN, NULL) != FALSE;
+  
+  info->icon = NULL;
+  if (info->icon_name)
+    {
+      if (g_path_is_absolute (info->icon_name))
+	{
+	  GFile *file;
+	  
+	  file = g_file_new_for_path (info->icon_name);
+	  info->icon = g_file_icon_new (file);
+	  g_object_unref (file);
+	}
+      else
+        {
+          char *p;
+
+          /* Work around a common mistake in desktop files */    
+          if ((p = strrchr (info->icon_name, '.')) != NULL &&
+              (strcmp (p, ".png") == 0 ||
+               strcmp (p, ".xpm") == 0 ||
+               strcmp (p, ".svg") == 0)) 
+            *p = 0;
+
+	  info->icon = g_themed_icon_new (info->icon_name);
+        }
+    }
+  
+  if (info->exec)
+    info->binary = binary_from_exec (info->exec);
+  
+  if (info->path && info->path[0] == '\0')
+    {
+      g_free (info->path);
+      info->path = NULL;
+    }
+
+  return info;
+}
+
+/**
+ * g_desktop_app_info_new_from_filename:
+ * @filename: the path of a desktop file, in the GLib filename encoding
+ * 
+ * Creates a new #GDesktopAppInfo.
+ *
+ * Returns: a new #GDesktopAppInfo or %NULL on error.
+ **/
+GDesktopAppInfo *
+g_desktop_app_info_new_from_filename (const char *filename)
+{
+  GKeyFile *key_file;
+  GDesktopAppInfo *info = NULL;
+
+  key_file = g_key_file_new ();
+  
+  if (g_key_file_load_from_file (key_file,
+				 filename,
+				 G_KEY_FILE_NONE,
+				 NULL))
+    {
+      info = g_desktop_app_info_new_from_keyfile (key_file);
+      if (info)
+        info->filename = g_strdup (filename);
+    }  
+
+  g_key_file_free (key_file);
+
+  return info;
+}
+
+/**
+ * g_desktop_app_info_new:
+ * @desktop_id: the desktop file id
+ * 
+ * Creates a new #GDesktopAppInfo based on a desktop file id. 
+ *
+ * A desktop file id is the basename of the desktop file, including the 
+ * .desktop extension. GIO is looking for a desktop file with this name 
+ * in the <filename>applications</filename> subdirectories of the XDG data
+ * directories (i.e. the directories specified in the 
+ * <envar>XDG_DATA_HOME</envar> and <envar>XDG_DATA_DIRS</envar> environment 
+ * variables). GIO also supports the prefix-to-subdirectory mapping that is
+ * described in the <ulink url="http://standards.freedesktop.org/menu-spec/latest/">Menu Spec</ulink> 
+ * (i.e. a desktop id of kde-foo.desktop will match
+ * <filename>/usr/share/applications/kde/foo.desktop</filename>).
+ * 
+ * Returns: a new #GDesktopAppInfo, or %NULL if no desktop file with that id
+ */
+GDesktopAppInfo *
+g_desktop_app_info_new (const char *desktop_id)
+{
+  GDesktopAppInfo *appinfo;
+  const char * const *dirs;
+  char *basename;
+  int i;
+
+  dirs = get_applications_search_path ();
+
+  basename = g_strdup (desktop_id);
+  
+  for (i = 0; dirs[i] != NULL; i++)
+    {
+      char *filename;
+      char *p;
+
+      filename = g_build_filename (dirs[i], desktop_id, NULL);
+      appinfo = g_desktop_app_info_new_from_filename (filename);
+      g_free (filename);
+      if (appinfo != NULL)
+	goto found;
+
+      p = basename;
+      while ((p = strchr (p, '-')) != NULL)
+	{
+	  *p = '/';
+	  
+	  filename = g_build_filename (dirs[i], basename, NULL);
+	  appinfo = g_desktop_app_info_new_from_filename (filename);
+	  g_free (filename);
+	  if (appinfo != NULL)
+	    goto found;
+	  *p = '-';
+	  p++;
+	}
+    }
+  
+  g_free (basename);
+  return NULL;
+
+ found:
+  g_free (basename);
+  
+  appinfo->desktop_id = g_strdup (desktop_id);
+
+  if (g_desktop_app_info_get_is_hidden (appinfo))
+    {
+      g_object_unref (appinfo);
+      appinfo = NULL;
+    }
+  
+  return appinfo;
+}
+
+static GAppInfo *
+g_desktop_app_info_dup (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  GDesktopAppInfo *new_info;
+  
+  new_info = g_object_new (G_TYPE_DESKTOP_APP_INFO, NULL);
+
+  new_info->filename = g_strdup (info->filename);
+  new_info->desktop_id = g_strdup (info->desktop_id);
+  
+  new_info->name = g_strdup (info->name);
+  new_info->comment = g_strdup (info->comment);
+  new_info->nodisplay = info->nodisplay;
+  new_info->icon_name = g_strdup (info->icon_name);
+  if (info->icon)
+    new_info->icon = g_object_ref (info->icon);
+  new_info->only_show_in = g_strdupv (info->only_show_in);
+  new_info->not_show_in = g_strdupv (info->not_show_in);
+  new_info->try_exec = g_strdup (info->try_exec);
+  new_info->exec = g_strdup (info->exec);
+  new_info->binary = g_strdup (info->binary);
+  new_info->path = g_strdup (info->path);
+  new_info->hidden = info->hidden;
+  new_info->terminal = info->terminal;
+  new_info->startup_notify = info->startup_notify;
+  
+  return G_APP_INFO (new_info);
+}
+
+static gboolean
+g_desktop_app_info_equal (GAppInfo *appinfo1,
+			  GAppInfo *appinfo2)
+{
+  GDesktopAppInfo *info1 = G_DESKTOP_APP_INFO (appinfo1);
+  GDesktopAppInfo *info2 = G_DESKTOP_APP_INFO (appinfo2);
+
+  if (info1->desktop_id == NULL ||
+      info2->desktop_id == NULL)
+    return info1 == info2;
+
+  return strcmp (info1->desktop_id, info2->desktop_id) == 0;
+}
+
+static const char *
+g_desktop_app_info_get_id (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  return info->desktop_id;
+}
+
+static const char *
+g_desktop_app_info_get_name (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  if (info->name == NULL)
+    return _("Unnamed");
+  return info->name;
+}
+
+/**
+ * g_desktop_app_info_get_is_hidden:
+ * @info: a #GDesktopAppInfo.
+ *
+ * A desktop file is hidden if the Hidden key in it is
+ * set to True.
+ *
+ * Returns: %TRUE if hidden, %FALSE otherwise. 
+ **/
+gboolean
+g_desktop_app_info_get_is_hidden (GDesktopAppInfo *info)
+{
+  return info->hidden;
+}
+
+static const char *
+g_desktop_app_info_get_description (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  
+  return info->comment;
+}
+
+static const char *
+g_desktop_app_info_get_executable (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  
+  return info->binary;
+}
+
+static const char *
+g_desktop_app_info_get_commandline (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  
+  return info->exec;
+}
+
+static GIcon *
+g_desktop_app_info_get_icon (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  return info->icon;
+}
+
+static char *
+expand_macro_single (char macro, char *uri)
+{
+  GFile *file;
+  char *result = NULL;
+  char *path, *name;
+
+  file = g_file_new_for_uri (uri);
+  path = g_file_get_path (file);
+  g_object_unref (file);
+  
+  switch (macro)
+    {
+    case 'u':
+    case 'U':	
+      result = g_shell_quote (uri);
+      break;
+    case 'f':
+    case 'F':
+      if (path)
+	result = g_shell_quote (path);
+      break;
+    case 'd':
+    case 'D':
+      if (path)
+        {
+          name = g_path_get_dirname (path);
+	  result = g_shell_quote (name);
+          g_free (name);
+        }
+      break;
+    case 'n':
+    case 'N':
+      if (path)
+        {
+          name = g_path_get_basename (path);
+	  result = g_shell_quote (name);
+          g_free (name);
+        }
+      break;
+    }
+
+  g_free (path);
+  
+  return result;
+}
+
+static void
+expand_macro (char              macro, 
+              GString          *exec, 
+              GDesktopAppInfo  *info, 
+              GList           **uri_list)
+{
+  GList *uris = *uri_list;
+  char *expanded;
+  gboolean force_file_uri;
+  char force_file_uri_macro;
+  char *uri;
+
+  g_return_if_fail (exec != NULL);
+
+  /* On %u and %U, pass POSIX file path pointing to the URI via
+   * the FUSE mount in ~/.gvfs. Note that if the FUSE daemon isn't
+   * running or the URI doesn't have a POSIX file path via FUSE
+   * we'll just pass the URI.
+   */
+  force_file_uri_macro = macro;
+  force_file_uri = FALSE;
+  if (!info->no_fuse)
+    {
+      switch (macro)
+	{
+	case 'u':
+	  force_file_uri_macro = 'f';
+	  force_file_uri = TRUE;
+	  break;
+	case 'U':
+	  force_file_uri_macro = 'F';
+	  force_file_uri = TRUE;
+	  break;
+	default:
+	  break;
+	}
+    }
+
+  switch (macro)
+    {
+    case 'u':
+    case 'f':
+    case 'd':
+    case 'n':
+      if (uris)
+	{
+	  uri = uris->data;
+          if (!force_file_uri ||
+	      /* Pass URI if it contains an anchor */
+	      strchr (uri, '#') != NULL)
+            {
+              expanded = expand_macro_single (macro, uri);
+            }
+          else
+            {
+              expanded = expand_macro_single (force_file_uri_macro, uri);
+              if (expanded == NULL)
+                expanded = expand_macro_single (macro, uri);
+            }
+
+	  if (expanded)
+	    {
+	      g_string_append (exec, expanded);
+	      g_free (expanded);
+	    }
+	  uris = uris->next;
+	}
+
+      break;
+
+    case 'U':	
+    case 'F':
+    case 'D':
+    case 'N':
+      while (uris)
+	{
+	  uri = uris->data;
+	  
+          if (!force_file_uri ||
+	      /* Pass URI if it contains an anchor */
+	      strchr (uri, '#') != NULL)
+            {
+              expanded = expand_macro_single (macro, uri);
+            }
+          else
+            {
+              expanded = expand_macro_single (force_file_uri_macro, uri);
+              if (expanded == NULL)
+                expanded = expand_macro_single (macro, uri);
+            }
+
+	  if (expanded)
+	    {
+	      g_string_append (exec, expanded);
+	      g_free (expanded);
+	    }
+	  
+	  uris = uris->next;
+	  
+	  if (uris != NULL && expanded)
+	    g_string_append_c (exec, ' ');
+	}
+
+      break;
+
+    case 'i':
+      if (info->icon_name)
+	{
+	  g_string_append (exec, "--icon ");
+	  g_string_append (exec, info->icon_name);
+	}
+      break;
+
+    case 'c':
+      if (info->name) 
+	g_string_append (exec, info->name);
+      break;
+
+    case 'k':
+      if (info->filename) 
+	g_string_append (exec, info->filename);
+      break;
+
+    case 'm': /* deprecated */
+      break;
+
+    case '%':
+      g_string_append_c (exec, '%');
+      break;
+    }
+  
+  *uri_list = uris;
+}
+
+static gboolean
+expand_application_parameters (GDesktopAppInfo   *info,
+			       GList            **uris,
+			       int               *argc,
+			       char            ***argv,
+			       GError           **error)
+{
+  GList *uri_list = *uris;
+  const char *p = info->exec;
+  GString *expanded_exec = g_string_new (NULL);
+  gboolean res;
+  
+  if (info->exec == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                           _("Desktop file didn't specify Exec field"));
+      return FALSE;
+    }
+  
+  while (*p)
+    {
+      if (p[0] == '%' && p[1] != '\0')
+	{
+	  expand_macro (p[1], expanded_exec, info, uris);
+	  p++;
+	}
+      else
+	g_string_append_c (expanded_exec, *p);
+      
+      p++;
+    }
+  
+  /* No file substitutions */
+  if (uri_list == *uris && uri_list != NULL)
+    {
+      /* If there is no macro default to %f. This is also what KDE does */
+      g_string_append_c (expanded_exec, ' ');
+      expand_macro ('f', expanded_exec, info, uris);
+    }
+  
+  res = g_shell_parse_argv (expanded_exec->str, argc, argv, error);
+  g_string_free (expanded_exec, TRUE);
+  return res;
+}
+
+static gboolean
+prepend_terminal_to_vector (int    *argc,
+			    char ***argv)
+{
+#ifndef G_OS_WIN32
+  char **real_argv;
+  int real_argc;
+  int i, j;
+  char **term_argv = NULL;
+  int term_argc = 0;
+  char *check;
+  char **the_argv;
+  
+  g_return_val_if_fail (argc != NULL, FALSE);
+  g_return_val_if_fail (argv != NULL, FALSE);
+	
+  /* sanity */
+  if(*argv == NULL)
+    *argc = 0;
+  
+  the_argv = *argv;
+
+  /* compute size if not given */
+  if (*argc < 0)
+    {
+      for (i = 0; the_argv[i] != NULL; i++)
+	;
+      *argc = i;
+    }
+  
+  term_argc = 2;
+  term_argv = g_new0 (char *, 3);
+
+  check = g_find_program_in_path ("gnome-terminal");
+  if (check != NULL)
+    {
+      term_argv[0] = check;
+      /* Note that gnome-terminal takes -x and
+       * as -e in gnome-terminal is broken we use that. */
+      term_argv[1] = g_strdup ("-x");
+    }
+  else
+    {
+      if (check == NULL)
+	check = g_find_program_in_path ("nxterm");
+      if (check == NULL)
+	check = g_find_program_in_path ("color-xterm");
+      if (check == NULL)
+	check = g_find_program_in_path ("rxvt");
+      if (check == NULL)
+	check = g_find_program_in_path ("xterm");
+      if (check == NULL)
+	check = g_find_program_in_path ("dtterm");
+      if (check == NULL)
+	{
+	  check = g_strdup ("xterm");
+	  g_warning ("couldn't find a terminal, falling back to xterm");
+	}
+      term_argv[0] = check;
+      term_argv[1] = g_strdup ("-e");
+    }
+
+  real_argc = term_argc + *argc;
+  real_argv = g_new (char *, real_argc + 1);
+  
+  for (i = 0; i < term_argc; i++)
+    real_argv[i] = term_argv[i];
+  
+  for (j = 0; j < *argc; j++, i++)
+    real_argv[i] = (char *)the_argv[j];
+  
+  real_argv[i] = NULL;
+  
+  g_free (*argv);
+  *argv = real_argv;
+  *argc = real_argc;
+  
+  /* we use g_free here as we sucked all the inner strings
+   * out from it into real_argv */
+  g_free (term_argv);
+  return TRUE;
+#else
+  return FALSE;
+#endif /* G_OS_WIN32 */
+}
+
+/* '=' is the new '\0'.
+ * DO NOT CALL unless at least one string ends with '='
+ */
+static gboolean
+is_env (const char *a,
+	const char *b)
+{
+  while (*a == *b)
+  {
+    if (*a == 0 || *b == 0)
+      return FALSE;
+    
+    if (*a == '=')
+      return TRUE;
+
+    a++;
+    b++;
+  }
+
+  return FALSE;
+}
+
+/* free with g_strfreev */
+static char **
+replace_env_var (char       **old_environ,
+		 const char  *env_var,
+		 const char  *new_value)
+{
+  int length, new_length;
+  int index, new_index;
+  char **new_environ;
+  int i, new_i;
+
+  /* do two things at once:
+   *  - discover the length of the environment ('length')
+   *  - find the location (if any) of the env var ('index')
+   */
+  index = -1;
+  for (length = 0; old_environ[length]; length++)
+    {
+      /* if we already have it in our environment, replace */
+      if (is_env (old_environ[length], env_var))
+	index = length;
+    }
+
+  
+  /* no current env var, no desired env value.
+   * this is easy :)
+   */
+  if (new_value == NULL && index == -1)
+    return old_environ;
+
+  /* in all cases now, we will be using a modified environment.
+   * determine its length and allocated it.
+   * 
+   * after this block:
+   *   new_index   = location to insert, if any
+   *   new_length  = length of the new array
+   *   new_environ = the pointer array for the new environment
+   */
+  
+  if (new_value == NULL && index >= 0)
+    {
+      /* in this case, we will be removing an entry */
+      new_length = length - 1;
+      new_index = -1;
+    }
+  else if (new_value != NULL && index < 0)
+    {
+      /* in this case, we will be adding an entry to the end */
+      new_length = length + 1;
+      new_index = length;
+    }
+  else
+    /* in this case, we will be replacing the existing entry */
+    {
+      new_length = length;
+      new_index = index;
+    }
+
+  new_environ = g_malloc (sizeof (char *) * (new_length + 1));
+  new_environ[new_length] = NULL;
+
+  /* now we do the copying.
+   * for each entry in the new environment, we decide what to do
+   */
+  
+  i = 0;
+  for (new_i = 0; new_i < new_length; new_i++)
+    {
+      if (new_i == new_index)
+	{
+	  /* insert our new item */
+	  new_environ[new_i] = g_strconcat (env_var,
+					    "=",
+					    new_value,
+					    NULL);
+	  
+	  /* if we had an old entry, skip it now */
+	  if (index >= 0)
+	    i++;
+	}
+      else
+	{
+	  /* if this is the old DESKTOP_STARTUP_ID, skip it */
+	  if (i == index)
+	    i++;
+	  
+	  /* copy an old item */
+	  new_environ[new_i] = g_strdup (old_environ[i]);
+	  i++;
+	}
+    }
+
+  g_strfreev (old_environ);
+  
+  return new_environ;
+}
+
+static GList *
+uri_list_segment_to_files (GList *start,
+			   GList *end)
+{
+  GList *res;
+  GFile *file;
+
+  res = NULL;
+  while (start != NULL && start != end)
+    {
+      file = g_file_new_for_uri ((char *)start->data);
+      res = g_list_prepend (res, file);
+      start = start->next;
+    }
+
+  return g_list_reverse (res);
+}
+
+#ifdef HAVE__NSGETENVIRON
+#define environ (*_NSGetEnviron())
+#elif !defined(G_OS_WIN32)
+
+/* According to the Single Unix Specification, environ is not in 
+ *  * any system header, although unistd.h often declares it.
+ *   */
+extern char **environ;
+#endif
+
+static gboolean
+g_desktop_app_info_launch_uris (GAppInfo           *appinfo,
+				GList              *uris,
+				GAppLaunchContext  *launch_context,
+				GError            **error)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  gboolean completed = FALSE;
+  GList *old_uris;
+  GList *launched_files;
+  char **envp;
+  char **argv;
+  int argc;
+  char *display;
+  char *sn_id;
+
+  g_return_val_if_fail (appinfo != NULL, FALSE);
+
+  argv = NULL;
+  envp = NULL;
+      
+  do 
+    {
+      old_uris = uris;
+      if (!expand_application_parameters (info, &uris,
+					  &argc, &argv, error))
+	goto out;
+      
+      if (info->terminal && !prepend_terminal_to_vector (&argc, &argv))
+	{
+	  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                               _("Unable to find terminal required for application"));
+	  goto out;
+	}
+
+      sn_id = NULL;
+      if (launch_context)
+	{
+	  launched_files = uri_list_segment_to_files (old_uris, uris);
+	  
+	  display = g_app_launch_context_get_display (launch_context,
+						      appinfo,
+						      launched_files);
+
+	  sn_id = NULL;
+	  if (info->startup_notify)
+	    sn_id = g_app_launch_context_get_startup_notify_id (launch_context,
+								appinfo,
+								launched_files);
+	  
+	  if (display || sn_id)
+	    {
+#ifdef G_OS_WIN32
+	      /* FIXME */
+	      envp = g_new0 (char *, 1);
+#else
+	      envp = g_strdupv (environ);
+#endif
+	      
+	      if (display)
+		envp = replace_env_var (envp,
+					"DISPLAY",
+					display);
+	      
+	      if (sn_id)
+		envp = replace_env_var (envp,
+					"DESKTOP_STARTUP_ID",
+					sn_id);
+	    }
+
+	  g_free (display);
+	  
+	  g_list_foreach (launched_files, (GFunc)g_object_unref, NULL);
+	  g_list_free (launched_files);
+	}
+      
+      if (!g_spawn_async (info->path,  /* working directory */
+			  argv,
+			  envp,
+			  G_SPAWN_SEARCH_PATH /* flags */,
+			  NULL /* child_setup */,
+			  NULL /* data */,
+			  NULL /* child_pid */,
+			  error))
+	{
+	  if (sn_id)
+	    {
+	      g_app_launch_context_launch_failed (launch_context, sn_id);
+	      g_free (sn_id);
+	    }
+	  goto out;
+	}
+
+      
+      g_free (sn_id);
+      
+      g_strfreev (envp);
+      g_strfreev (argv);
+      envp = NULL;
+      argv = NULL;
+    }
+  while (uris != NULL);
+
+  completed = TRUE;
+
+ out:
+  g_strfreev (argv);
+  g_strfreev (envp);
+
+  return completed;
+}
+
+static gboolean
+g_desktop_app_info_supports_uris (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+ 
+  return info->exec && 
+    ((strstr (info->exec, "%u") != NULL) ||
+     (strstr (info->exec, "%U") != NULL));
+}
+
+static gboolean
+g_desktop_app_info_supports_files (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+ 
+  return info->exec && 
+    ((strstr (info->exec, "%f") != NULL) ||
+     (strstr (info->exec, "%F") != NULL));
+}
+
+static gboolean
+g_desktop_app_info_launch (GAppInfo           *appinfo,
+			   GList              *files,
+			   GAppLaunchContext  *launch_context,
+			   GError            **error)
+{
+  GList *uris;
+  char *uri;
+  gboolean res;
+
+  uris = NULL;
+  while (files)
+    {
+      uri = g_file_get_uri (files->data);
+      uris = g_list_prepend (uris, uri);
+      files = files->next;
+    }
+  
+  uris = g_list_reverse (uris);
+  
+  res = g_desktop_app_info_launch_uris (appinfo, uris, launch_context, error);
+  
+  g_list_foreach  (uris, (GFunc)g_free, NULL);
+  g_list_free (uris);
+  
+  return res;
+}
+
+G_LOCK_DEFINE_STATIC (g_desktop_env);
+static gchar *g_desktop_env = NULL;
+
+/**
+ * g_desktop_app_info_set_desktop_env:
+ * @desktop_env: a string specifying what desktop this is
+ *
+ * Sets the name of the desktop that the application is running in.
+ * This is used by g_app_info_should_show() to evaluate the
+ * <literal>OnlyShowIn</literal> and <literal>NotShowIn</literal>
+ * desktop entry fields.
+ *
+ * The <ulink url="http://standards.freedesktop.org/menu-spec/latest/">Desktop 
+ * Menu specification</ulink> recognizes the following:
+ * <simplelist>
+ *   <member>GNOME</member>
+ *   <member>KDE</member>
+ *   <member>ROX</member>
+ *   <member>XFCE</member>
+ *   <member>Old</member> 
+ * </simplelist>
+ *
+ * Should be called only once; subsequent calls are ignored.
+ */
+void
+g_desktop_app_info_set_desktop_env (const gchar *desktop_env)
+{
+  G_LOCK (g_desktop_env);
+  if (!g_desktop_env)
+    g_desktop_env = g_strdup (desktop_env);
+  G_UNLOCK (g_desktop_env);
+}
+
+static gboolean
+g_desktop_app_info_should_show (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  gboolean found;
+  const gchar *desktop_env;
+  int i;
+
+  if (info->nodisplay)
+    return FALSE;
+
+  G_LOCK (g_desktop_env);
+  desktop_env = g_desktop_env;
+  G_UNLOCK (g_desktop_env);
+
+  if (info->only_show_in)
+    {
+      if (desktop_env == NULL)
+	return FALSE;
+      
+      found = FALSE;
+      for (i = 0; info->only_show_in[i] != NULL; i++)
+	{
+	  if (strcmp (info->only_show_in[i], desktop_env) == 0)
+	    {
+	      found = TRUE;
+	      break;
+	    }
+	}
+      if (!found)
+	return FALSE;
+    }
+
+  if (info->not_show_in && desktop_env)
+    {
+      for (i = 0; info->not_show_in[i] != NULL; i++)
+	{
+	  if (strcmp (info->not_show_in[i], desktop_env) == 0)
+	    return FALSE;
+	}
+    }
+  
+  return TRUE;
+}
+
+typedef enum {
+  APP_DIR,
+  MIMETYPE_DIR
+} DirType;
+
+static char *
+ensure_dir (DirType   type,
+            GError  **error)
+{
+  char *path, *display_name;
+  int errsv;
+
+  if (type == APP_DIR)
+    path = g_build_filename (g_get_user_data_dir (), "applications", NULL);
+  else
+    path = g_build_filename (g_get_user_data_dir (), "mime", "packages", NULL);
+
+  errno = 0;
+  if (g_mkdir_with_parents (path, 0700) == 0)
+    return path;
+
+  errsv = errno;
+  display_name = g_filename_display_name (path);
+  if (type == APP_DIR)
+    g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+                 _("Can't create user application configuration folder %s: %s"),
+                 display_name, g_strerror (errsv));
+  else
+    g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+                 _("Can't create user MIME configuration folder %s: %s"),
+                 display_name, g_strerror (errsv));
+
+  g_free (display_name);
+  g_free (path);
+
+  return NULL;
+}
+
+static gboolean
+update_mimeapps_list (const char  *desktop_id, 
+		      const char  *content_type, 
+		      gboolean     add_as_default,
+		      gboolean     add_non_default,
+		      gboolean     remove, 
+		      GError     **error)
+{
+  char *dirname, *filename;
+  GKeyFile *key_file;
+  gboolean load_succeeded, res;
+  char **old_list, **list;
+  GList *system_list, *l;
+  gsize length, data_size;
+  char *data;
+  int i, j, k;
+  char **content_types;
+
+  /* Don't add both at start and end */
+  g_assert (!(add_as_default && add_non_default));
+  
+  dirname = ensure_dir (APP_DIR, error);
+  if (!dirname)
+    return FALSE;
+
+  filename = g_build_filename (dirname, "mimeapps.list", NULL);
+  g_free (dirname);
+
+  key_file = g_key_file_new ();
+  load_succeeded = g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL);
+  if (!load_succeeded || !g_key_file_has_group (key_file, ADDED_ASSOCIATIONS_GROUP))
+    {
+      g_key_file_free (key_file);
+      key_file = g_key_file_new ();
+    }
+
+  if (content_type)
+    {
+      content_types = g_new (char *, 2);
+      content_types[0] = g_strdup (content_type);
+      content_types[1] = NULL;
+    }
+  else
+    {
+      content_types = g_key_file_get_keys (key_file, ADDED_ASSOCIATIONS_GROUP, NULL, NULL);
+    }
+
+  for (k = 0; content_types && content_types[k]; k++)
+    { 
+      /* Add to the right place in the list */
+  
+      length = 0;
+      old_list = g_key_file_get_string_list (key_file, ADDED_ASSOCIATIONS_GROUP,
+					     content_types[k], &length, NULL);
+
+      list = g_new (char *, 1 + length + 1);
+
+      i = 0;
+      if (add_as_default)
+        list[i++] = g_strdup (desktop_id);
+      if (old_list)
+        {
+          for (j = 0; old_list[j] != NULL; j++)
+	    {
+	      if (g_strcmp0 (old_list[j], desktop_id) != 0)
+	        list[i++] = g_strdup (old_list[j]);
+	      else if (add_non_default)
+		{
+		  /* If adding as non-default, and it's already in,
+		     don't change order of desktop ids */
+		  add_non_default = FALSE;
+		  list[i++] = g_strdup (old_list[j]);
+		}
+	    }
+        }
+      
+      if (add_non_default)
+	{
+	  /* We're adding as non-default, and it wasn't already in the list,
+	     so we add at the end. But to avoid listing the app before the
+	     current system default (thus changing the default) we have to
+	     add the current list of (not yet listed) apps before it. */
+
+	  list[i] = NULL; /* Terminate current list so we can use it */
+	  system_list =  get_all_desktop_entries_for_mime_type (content_type, (const char **)list);
+	  
+	  list = g_renew (char *, list, 1 + length + g_list_length (system_list) + 1);
+	  
+	  for (l = system_list; l != NULL; l = l->next)
+	    {
+	      list[i++] = l->data; /* no strdup, taking ownership */
+	      if (g_strcmp0 (l->data, desktop_id) == 0)
+		add_non_default = FALSE;
+	    }
+	  g_list_free (system_list);
+		  
+	  if (add_non_default)
+	    list[i++] = g_strdup (desktop_id);
+	}
+      
+      list[i] = NULL;
+  
+      g_strfreev (old_list);
+
+      if (list[0] == NULL || desktop_id == NULL)
+        g_key_file_remove_key (key_file,
+			       ADDED_ASSOCIATIONS_GROUP,
+			       content_types[k],
+			       NULL);
+      else
+        g_key_file_set_string_list (key_file,
+			            ADDED_ASSOCIATIONS_GROUP,
+			            content_types[k],
+			            (const char * const *)list, i);
+   
+      g_strfreev (list);
+    }
+  
+  if (content_type)
+    {
+      /* reuse the list from above */
+    }
+  else
+    {
+      g_strfreev (content_types);
+      content_types = g_key_file_get_keys (key_file, REMOVED_ASSOCIATIONS_GROUP, NULL, NULL);
+    }
+
+  for (k = 0; content_types && content_types[k]; k++) 
+    {
+      /* Remove from removed associations group (unless remove) */
+  
+      length = 0;
+      old_list = g_key_file_get_string_list (key_file, REMOVED_ASSOCIATIONS_GROUP,
+					     content_types[k], &length, NULL);
+
+      list = g_new (char *, 1 + length + 1);
+
+      i = 0;
+      if (remove)
+        list[i++] = g_strdup (desktop_id);
+      if (old_list)
+        {
+          for (j = 0; old_list[j] != NULL; j++)
+	    {
+	      if (g_strcmp0 (old_list[j], desktop_id) != 0)
+	        list[i++] = g_strdup (old_list[j]);
+	    }
+        }
+      list[i] = NULL;
+  
+      g_strfreev (old_list);
+
+      if (list[0] == NULL || desktop_id == NULL)
+        g_key_file_remove_key (key_file,
+			       REMOVED_ASSOCIATIONS_GROUP,
+			       content_types[k],
+			       NULL);
+      else
+        g_key_file_set_string_list (key_file,
+				    REMOVED_ASSOCIATIONS_GROUP,
+				    content_types[k],
+				    (const char * const *)list, i);
+
+      g_strfreev (list);
+    }
+  
+  g_strfreev (content_types);  
+
+  data = g_key_file_to_data (key_file, &data_size, error);
+  g_key_file_free (key_file);
+  
+  res = g_file_set_contents (filename, data, data_size, error);
+
+  mime_info_cache_reload (NULL);
+			  
+  g_free (filename);
+  g_free (data);
+  
+  return res;
+}
+
+static gboolean
+g_desktop_app_info_set_as_default_for_type (GAppInfo    *appinfo,
+					    const char  *content_type,
+					    GError     **error)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  if (!g_desktop_app_info_ensure_saved (info, error))
+    return FALSE;  
+  
+  return update_mimeapps_list (info->desktop_id, content_type, TRUE, FALSE, FALSE, error);
+}
+
+static void
+update_program_done (GPid     pid,
+		     gint     status,
+		     gpointer data)
+{
+  /* Did the application exit correctly */
+  if (WIFEXITED (status) &&
+      WEXITSTATUS (status) == 0)
+    {
+      /* Here we could clean out any caches in use */
+    }
+}
+
+static void
+run_update_command (char *command,
+		    char *subdir)
+{
+	char *argv[3] = {
+		NULL,
+		NULL,
+		NULL,
+	};
+	GPid pid = 0;
+	GError *error = NULL;
+
+	argv[0] = command;
+	argv[1] = g_build_filename (g_get_user_data_dir (), subdir, NULL);
+
+	if (g_spawn_async ("/", argv,
+			   NULL,       /* envp */
+			   G_SPAWN_SEARCH_PATH |
+			   G_SPAWN_STDOUT_TO_DEV_NULL |
+			   G_SPAWN_STDERR_TO_DEV_NULL |
+			   G_SPAWN_DO_NOT_REAP_CHILD,
+			   NULL, NULL, /* No setup function */
+			   &pid,
+			   &error)) 
+	  g_child_watch_add (pid, update_program_done, NULL);
+	else
+	  {
+	    /* If we get an error at this point, it's quite likely the user doesn't
+	     * have an installed copy of either 'update-mime-database' or
+	     * 'update-desktop-database'.  I don't think we want to popup an error
+	     * dialog at this point, so we just do a g_warning to give the user a
+	     * chance of debugging it.
+	     */
+	    g_warning ("%s", error->message);
+	  }
+	
+	g_free (argv[1]);
+}
+
+static gboolean
+g_desktop_app_info_set_as_default_for_extension (GAppInfo    *appinfo,
+						 const char  *extension,
+						 GError     **error)
+{
+  char *filename, *basename, *mimetype;
+  char *dirname;
+  gboolean res;
+
+  if (!g_desktop_app_info_ensure_saved (G_DESKTOP_APP_INFO (appinfo), error))
+    return FALSE;  
+  
+  dirname = ensure_dir (MIMETYPE_DIR, error);
+  if (!dirname)
+    return FALSE;
+  
+  basename = g_strdup_printf ("user-extension-%s.xml", extension);
+  filename = g_build_filename (dirname, basename, NULL);
+  g_free (basename);
+  g_free (dirname);
+
+  mimetype = g_strdup_printf ("application/x-extension-%s", extension);
+  
+  if (!g_file_test (filename, G_FILE_TEST_EXISTS)) 
+    {
+      char *contents;
+
+      contents =
+        g_strdup_printf ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+                         "<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">\n"
+                         " <mime-type type=\"%s\">\n"
+                         "  <comment>%s document</comment>\n"
+                         "  <glob pattern=\"*.%s\"/>\n"
+                         " </mime-type>\n"
+                         "</mime-info>\n", mimetype, extension, extension);
+
+      g_file_set_contents (filename, contents, -1, NULL);
+      g_free (contents);
+
+      run_update_command ("update-mime-database", "mime");
+    }
+  g_free (filename);
+  
+  res = g_desktop_app_info_set_as_default_for_type (appinfo,
+						    mimetype,
+						    error);
+
+  g_free (mimetype);
+  
+  return res;
+}
+
+static gboolean
+g_desktop_app_info_add_supports_type (GAppInfo    *appinfo,
+				      const char  *content_type,
+				      GError     **error)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  if (!g_desktop_app_info_ensure_saved (G_DESKTOP_APP_INFO (info), error))
+    return FALSE;  
+  
+  return update_mimeapps_list (info->desktop_id, content_type, FALSE, TRUE, FALSE, error);
+}
+
+static gboolean
+g_desktop_app_info_can_remove_supports_type (GAppInfo *appinfo)
+{
+  return TRUE;
+}
+
+static gboolean
+g_desktop_app_info_remove_supports_type (GAppInfo    *appinfo,
+					 const char  *content_type,
+					 GError     **error)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  if (!g_desktop_app_info_ensure_saved (G_DESKTOP_APP_INFO (info), error))
+    return FALSE;
+  
+  return update_mimeapps_list (info->desktop_id, content_type, FALSE, FALSE, TRUE, error);
+}
+
+static gboolean
+g_desktop_app_info_ensure_saved (GDesktopAppInfo  *info,
+				 GError          **error)
+{
+  GKeyFile *key_file;
+  char *dirname;
+  char *filename;
+  char *data, *desktop_id;
+  gsize data_size;
+  int fd;
+  gboolean res;
+  
+  if (info->filename != NULL)
+    return TRUE;
+
+  /* This is only used for object created with
+   * g_app_info_create_from_commandline. All other
+   * object should have a filename
+   */
+  
+  dirname = ensure_dir (APP_DIR, error);
+  if (!dirname)
+    return FALSE;
+  
+  key_file = g_key_file_new ();
+
+  g_key_file_set_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			 "Encoding", "UTF-8");
+  g_key_file_set_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			 G_KEY_FILE_DESKTOP_KEY_VERSION, "1.0");
+  g_key_file_set_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			 G_KEY_FILE_DESKTOP_KEY_TYPE,
+                         G_KEY_FILE_DESKTOP_TYPE_APPLICATION);
+  if (info->terminal) 
+    g_key_file_set_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			    G_KEY_FILE_DESKTOP_KEY_TERMINAL, TRUE);
+
+  g_key_file_set_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			 G_KEY_FILE_DESKTOP_KEY_EXEC, info->exec);
+
+  g_key_file_set_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			 G_KEY_FILE_DESKTOP_KEY_NAME, info->name);
+
+  g_key_file_set_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			 G_KEY_FILE_DESKTOP_KEY_COMMENT, info->comment);
+  
+  g_key_file_set_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP,
+			  G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, TRUE);
+
+  data = g_key_file_to_data (key_file, &data_size, NULL);
+  g_key_file_free (key_file);
+
+  desktop_id = g_strdup_printf ("userapp-%s-XXXXXX.desktop", info->name);
+  filename = g_build_filename (dirname, desktop_id, NULL);
+  g_free (desktop_id);
+  g_free (dirname);
+  
+  fd = g_mkstemp (filename);
+  if (fd == -1)
+    {
+      char *display_name;
+
+      display_name = g_filename_display_name (filename);
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+		   _("Can't create user desktop file %s"), display_name);
+      g_free (display_name);
+      g_free (filename);
+      g_free (data);
+      return FALSE;
+    }
+
+  desktop_id = g_path_get_basename (filename);
+
+  close (fd);
+  
+  res = g_file_set_contents (filename, data, data_size, error);
+  if (!res)
+    {
+      g_free (desktop_id);
+      g_free (filename);
+      return FALSE;
+    }
+
+  info->filename = filename;
+  info->desktop_id = desktop_id;
+  
+  run_update_command ("update-desktop-database", "applications");
+  
+  return TRUE;
+}
+
+static gboolean
+g_desktop_app_info_can_delete (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+
+  if (info->filename)
+    {
+      if (strstr (info->filename, "/userapp-"))
+        return g_access (info->filename, W_OK) == 0;
+    }
+
+  return FALSE;
+}
+
+static gboolean
+g_desktop_app_info_delete (GAppInfo *appinfo)
+{
+  GDesktopAppInfo *info = G_DESKTOP_APP_INFO (appinfo);
+  
+  if (info->filename)
+    { 
+      if (g_remove (info->filename) == 0)
+        {
+          update_mimeapps_list (info->desktop_id, NULL, FALSE, FALSE, FALSE, NULL);
+
+          g_free (info->filename);
+          info->filename = NULL;
+          g_free (info->desktop_id);
+          info->desktop_id = NULL;
+
+          return TRUE;
+        }
+    }
+
+  return FALSE;
+}
+
+/**
+ * g_app_info_create_from_commandline:
+ * @commandline: the commandline to use
+ * @application_name: the application name, or %NULL to use @commandline
+ * @flags: flags that can specify details of the created #GAppInfo
+ * @error: a #GError location to store the error occuring, %NULL to ignore.
+ *
+ * Creates a new #GAppInfo from the given information.
+ *
+ * Returns: new #GAppInfo for given command.
+ **/
+GAppInfo *
+g_app_info_create_from_commandline (const char           *commandline,
+				    const char           *application_name,
+				    GAppInfoCreateFlags   flags,
+				    GError              **error)
+{
+  char **split;
+  char *basename;
+  GDesktopAppInfo *info;
+
+  info = g_object_new (G_TYPE_DESKTOP_APP_INFO, NULL);
+
+  info->filename = NULL;
+  info->desktop_id = NULL;
+  
+  info->terminal = flags & G_APP_INFO_CREATE_NEEDS_TERMINAL;
+  info->startup_notify = FALSE;
+  info->hidden = FALSE;
+  if (flags & G_APP_INFO_CREATE_SUPPORTS_URIS)
+    info->exec = g_strconcat (commandline, " %u", NULL);
+  else
+    info->exec = g_strconcat (commandline, " %f", NULL);
+  info->nodisplay = TRUE;
+  info->binary = binary_from_exec (info->exec);
+  
+  if (application_name)
+    info->name = g_strdup (application_name);
+  else
+    {
+      /* FIXME: this should be more robust. Maybe g_shell_parse_argv and use argv[0] */
+      split = g_strsplit (commandline, " ", 2);
+      basename = g_path_get_basename (split[0]);
+      g_strfreev (split);
+      info->name = basename;
+      if (info->name == NULL)
+	info->name = g_strdup ("custom");
+    }
+  info->comment = g_strdup_printf (_("Custom definition for %s"), info->name);
+  
+  return G_APP_INFO (info);
+}
+
+static void
+g_desktop_app_info_iface_init (GAppInfoIface *iface)
+{
+  iface->dup = g_desktop_app_info_dup;
+  iface->equal = g_desktop_app_info_equal;
+  iface->get_id = g_desktop_app_info_get_id;
+  iface->get_name = g_desktop_app_info_get_name;
+  iface->get_description = g_desktop_app_info_get_description;
+  iface->get_executable = g_desktop_app_info_get_executable;
+  iface->get_icon = g_desktop_app_info_get_icon;
+  iface->launch = g_desktop_app_info_launch;
+  iface->supports_uris = g_desktop_app_info_supports_uris;
+  iface->supports_files = g_desktop_app_info_supports_files;
+  iface->launch_uris = g_desktop_app_info_launch_uris;
+  iface->should_show = g_desktop_app_info_should_show;
+  iface->set_as_default_for_type = g_desktop_app_info_set_as_default_for_type;
+  iface->set_as_default_for_extension = g_desktop_app_info_set_as_default_for_extension;
+  iface->add_supports_type = g_desktop_app_info_add_supports_type;
+  iface->can_remove_supports_type = g_desktop_app_info_can_remove_supports_type;
+  iface->remove_supports_type = g_desktop_app_info_remove_supports_type;
+  iface->can_delete = g_desktop_app_info_can_delete;
+  iface->do_delete = g_desktop_app_info_delete;
+  iface->get_commandline = g_desktop_app_info_get_commandline;
+}
+
+static gboolean
+app_info_in_list (GAppInfo *info, 
+                  GList    *list)
+{
+  while (list != NULL)
+    {
+      if (g_app_info_equal (info, list->data))
+	return TRUE;
+      list = list->next;
+    }
+  return FALSE;
+}
+
+
+/**
+ * g_app_info_get_all_for_type:
+ * @content_type: the content type to find a #GAppInfo for
+ * 
+ * Gets a list of all #GAppInfo s for a given content type.
+ *
+ * Returns: #GList of #GAppInfo s for given @content_type
+ *    or %NULL on error.
+ **/
+GList *
+g_app_info_get_all_for_type (const char *content_type)
+{
+  GList *desktop_entries, *l;
+  GList *infos;
+  GDesktopAppInfo *info;
+
+  g_return_val_if_fail (content_type != NULL, NULL);
+  
+  desktop_entries = get_all_desktop_entries_for_mime_type (content_type, NULL);
+
+  infos = NULL;
+  for (l = desktop_entries; l != NULL; l = l->next)
+    {
+      char *desktop_entry = l->data;
+
+      info = g_desktop_app_info_new (desktop_entry);
+      if (info)
+	{
+	  if (app_info_in_list (G_APP_INFO (info), infos))
+	    g_object_unref (info);
+	  else
+	    infos = g_list_prepend (infos, info);
+	}
+      g_free (desktop_entry);
+    }
+
+  g_list_free (desktop_entries);
+  
+  return g_list_reverse (infos);
+}
+
+/**
+ * g_app_info_reset_type_associations:
+ * @content_type: a content type 
+ *
+ * Removes all changes to the type associations done by
+ * g_app_info_set_as_default_for_type(), 
+ * g_app_info_set_as_default_for_extension(), 
+ * g_app_info_add_supports_type() of g_app_info_remove_supports_type().
+ *
+ * Since: 2.20
+ */
+void
+g_app_info_reset_type_associations (const char *content_type)
+{
+  update_mimeapps_list (NULL, content_type, FALSE, FALSE, FALSE, NULL);
+}
+
+/**
+ * g_app_info_get_default_for_type:
+ * @content_type: the content type to find a #GAppInfo for
+ * @must_support_uris: if %TRUE, the #GAppInfo is expected to
+ *     support URIs
+ * 
+ * Gets the #GAppInfo that correspond to a given content type.
+ *
+ * Returns: #GAppInfo for given @content_type or %NULL on error.
+ **/
+GAppInfo *
+g_app_info_get_default_for_type (const char *content_type,
+				 gboolean    must_support_uris)
+{
+  GList *desktop_entries, *l;
+  GAppInfo *info;
+
+  g_return_val_if_fail (content_type != NULL, NULL);
+  
+  desktop_entries = get_all_desktop_entries_for_mime_type (content_type, NULL);
+
+  info = NULL;
+  for (l = desktop_entries; l != NULL; l = l->next)
+    {
+      char *desktop_entry = l->data;
+
+      info = (GAppInfo *)g_desktop_app_info_new (desktop_entry);
+      if (info)
+	{
+	  if (must_support_uris && !g_app_info_supports_uris (info))
+	    {
+	      g_object_unref (info);
+	      info = NULL;
+	    }
+	  else
+	    break;
+	}
+    }
+  
+  g_list_foreach  (desktop_entries, (GFunc)g_free, NULL);
+  g_list_free (desktop_entries);
+  
+  return info;
+}
+
+/**
+ * g_app_info_get_default_for_uri_scheme:
+ * @uri_scheme: a string containing a URI scheme.
+ *
+ * Gets the default application for launching applications 
+ * using this URI scheme. A URI scheme is the initial part 
+ * of the URI, up to but not including the ':', e.g. "http", 
+ * "ftp" or "sip".
+ * 
+ * Returns: #GAppInfo for given @uri_scheme or %NULL on error.
+ **/
+GAppInfo *
+g_app_info_get_default_for_uri_scheme (const char *uri_scheme)
+{
+  static gsize lookup = 0;
+  
+  if (g_once_init_enter (&lookup))
+    {
+      gsize setup_value = 1;
+      GDesktopAppInfoLookup *lookup_instance;
+      const char *use_this;
+      GIOExtensionPoint *ep;
+      GIOExtension *extension;
+      GList *l;
+
+      use_this = g_getenv ("GIO_USE_URI_ASSOCIATION");
+      
+      /* Ensure vfs in modules loaded */
+      _g_io_modules_ensure_loaded ();
+      
+      ep = g_io_extension_point_lookup (G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME);
+
+      lookup_instance = NULL;
+      if (use_this)
+	{
+	  extension = g_io_extension_point_get_extension_by_name (ep, use_this);
+	  if (extension)
+	    lookup_instance = g_object_new (g_io_extension_get_type (extension), NULL);
+	}
+      
+      if (lookup_instance == NULL)
+	{
+	  for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
+	    {
+	      extension = l->data;
+	      lookup_instance = g_object_new (g_io_extension_get_type (extension), NULL);
+	      if (lookup_instance != NULL)
+		break;
+	    }
+	}
+
+      if (lookup_instance != NULL)
+	setup_value = (gsize)lookup_instance;
+      
+      g_once_init_leave (&lookup, setup_value);
+    }
+
+  if (lookup == 1)
+    return NULL;
+
+  return g_desktop_app_info_lookup_get_default_for_uri_scheme (G_DESKTOP_APP_INFO_LOOKUP (lookup),
+							       uri_scheme);
+}
+
+
+static void
+get_apps_from_dir (GHashTable *apps, 
+                   const char *dirname, 
+                   const char *prefix)
+{
+  GDir *dir;
+  const char *basename;
+  char *filename, *subprefix, *desktop_id;
+  gboolean hidden;
+  GDesktopAppInfo *appinfo;
+  
+  dir = g_dir_open (dirname, 0, NULL);
+  if (dir)
+    {
+      while ((basename = g_dir_read_name (dir)) != NULL)
+	{
+	  filename = g_build_filename (dirname, basename, NULL);
+	  if (g_str_has_suffix (basename, ".desktop"))
+	    {
+	      desktop_id = g_strconcat (prefix, basename, NULL);
+
+	      /* Use _extended so we catch NULLs too (hidden) */
+	      if (!g_hash_table_lookup_extended (apps, desktop_id, NULL, NULL))
+		{
+		  appinfo = g_desktop_app_info_new_from_filename (filename);
+
+		  if (appinfo && g_desktop_app_info_get_is_hidden (appinfo))
+		    {
+		      g_object_unref (appinfo);
+		      appinfo = NULL;
+		      hidden = TRUE;
+		    }
+				      
+		  if (appinfo || hidden)
+		    {
+		      g_hash_table_insert (apps, g_strdup (desktop_id), appinfo);
+
+		      if (appinfo)
+			{
+			  /* Reuse instead of strdup here */
+			  appinfo->desktop_id = desktop_id;
+			  desktop_id = NULL;
+			}
+		    }
+		}
+	      g_free (desktop_id);
+	    }
+	  else
+	    {
+	      if (g_file_test (filename, G_FILE_TEST_IS_DIR))
+		{
+		  subprefix = g_strconcat (prefix, basename, "-", NULL);
+		  get_apps_from_dir (apps, filename, subprefix);
+		  g_free (subprefix);
+		}
+	    }
+	  g_free (filename);
+	}
+      g_dir_close (dir);
+    }
+}
+
+
+/**
+ * g_app_info_get_all:
+ *
+ * Gets a list of all of the applications currently registered 
+ * on this system.
+ * 
+ * For desktop files, this includes applications that have 
+ * <literal>NoDisplay=true</literal> set or are excluded from 
+ * display by means of <literal>OnlyShowIn</literal> or
+ * <literal>NotShowIn</literal>. See g_app_info_should_show().
+ * The returned list does not include applications which have
+ * the <literal>Hidden</literal> key set. 
+ * 
+ * Returns: a newly allocated #GList of references to #GAppInfo<!---->s.
+ **/
+GList *
+g_app_info_get_all (void)
+{
+  const char * const *dirs;
+  GHashTable *apps;
+  GHashTableIter iter;
+  gpointer value;
+  int i;
+  GList *infos;
+
+  dirs = get_applications_search_path ();
+
+  apps = g_hash_table_new_full (g_str_hash, g_str_equal,
+				g_free, NULL);
+
+  
+  for (i = 0; dirs[i] != NULL; i++)
+    get_apps_from_dir (apps, dirs[i], "");
+
+
+  infos = NULL;
+  g_hash_table_iter_init (&iter, apps);
+  while (g_hash_table_iter_next (&iter, NULL, &value))
+    {
+      if (value)
+        infos = g_list_prepend (infos, value);
+    }
+
+  g_hash_table_destroy (apps);
+
+  return g_list_reverse (infos);
+}
+
+/* Cacheing of mimeinfo.cache and defaults.list files */
+
+typedef struct {
+  char *path;
+  GHashTable *mime_info_cache_map;
+  GHashTable *defaults_list_map;
+  GHashTable *mimeapps_list_added_map;
+  GHashTable *mimeapps_list_removed_map;
+  time_t mime_info_cache_timestamp;
+  time_t defaults_list_timestamp;
+  time_t mimeapps_list_timestamp;
+} MimeInfoCacheDir;
+
+typedef struct {
+  GList *dirs;                       /* mimeinfo.cache and defaults.list */
+  GHashTable *global_defaults_cache; /* global results of defaults.list lookup and validation */
+  time_t last_stat_time;
+  guint should_ping_mime_monitor : 1;
+} MimeInfoCache;
+
+static MimeInfoCache *mime_info_cache = NULL;
+G_LOCK_DEFINE_STATIC (mime_info_cache);
+
+static void mime_info_cache_dir_add_desktop_entries (MimeInfoCacheDir  *dir,
+						     const char        *mime_type,
+						     char             **new_desktop_file_ids);
+
+static MimeInfoCache * mime_info_cache_new (void);
+
+static void
+destroy_info_cache_value (gpointer  key, 
+                          GList    *value, 
+                          gpointer  data)
+{
+  g_list_foreach (value, (GFunc)g_free, NULL);
+  g_list_free (value);
+}
+
+static void
+destroy_info_cache_map (GHashTable *info_cache_map)
+{
+  g_hash_table_foreach (info_cache_map, (GHFunc)destroy_info_cache_value, NULL);
+  g_hash_table_destroy (info_cache_map);
+}
+
+static gboolean
+mime_info_cache_dir_out_of_date (MimeInfoCacheDir *dir,
+				 const char       *cache_file,
+				 time_t           *timestamp)
+{
+  struct stat buf;
+  char *filename;
+  
+  filename = g_build_filename (dir->path, cache_file, NULL);
+  
+  if (g_stat (filename, &buf) < 0)
+    {
+      g_free (filename);
+      return TRUE;
+    }
+  g_free (filename);
+
+  if (buf.st_mtime != *timestamp) 
+    return TRUE;
+  
+  return FALSE;
+}
+
+/* Call with lock held */
+static gboolean
+remove_all (gpointer  key,
+	    gpointer  value,
+	    gpointer  user_data)
+{
+  return TRUE;
+}
+
+
+static void
+mime_info_cache_blow_global_cache (void)
+{
+  g_hash_table_foreach_remove (mime_info_cache->global_defaults_cache,
+			       remove_all, NULL);
+}
+
+static void
+mime_info_cache_dir_init (MimeInfoCacheDir *dir)
+{
+  GError *load_error;
+  GKeyFile *key_file;
+  gchar *filename, **mime_types;
+  int i;
+  struct stat buf;
+  
+  load_error = NULL;
+  mime_types = NULL;
+  
+  if (dir->mime_info_cache_map != NULL &&
+      !mime_info_cache_dir_out_of_date (dir, "mimeinfo.cache",
+					&dir->mime_info_cache_timestamp))
+    return;
+  
+  if (dir->mime_info_cache_map != NULL)
+    destroy_info_cache_map (dir->mime_info_cache_map);
+  
+  dir->mime_info_cache_map = g_hash_table_new_full (g_str_hash, g_str_equal,
+						    (GDestroyNotify) g_free,
+						    NULL);
+  
+  key_file = g_key_file_new ();
+  
+  filename = g_build_filename (dir->path, "mimeinfo.cache", NULL);
+  
+  if (g_stat (filename, &buf) < 0)
+    goto error;
+  
+  if (dir->mime_info_cache_timestamp > 0) 
+    mime_info_cache->should_ping_mime_monitor = TRUE;
+  
+  dir->mime_info_cache_timestamp = buf.st_mtime;
+  
+  g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, &load_error);
+  
+  g_free (filename);
+  filename = NULL;
+  
+  if (load_error != NULL)
+    goto error;
+  
+  mime_types = g_key_file_get_keys (key_file, MIME_CACHE_GROUP,
+				    NULL, &load_error);
+  
+  if (load_error != NULL)
+    goto error;
+  
+  for (i = 0; mime_types[i] != NULL; i++)
+    {
+      gchar **desktop_file_ids;
+      char *unaliased_type;
+      desktop_file_ids = g_key_file_get_string_list (key_file,
+						     MIME_CACHE_GROUP,
+						     mime_types[i],
+						     NULL,
+						     NULL);
+      
+      if (desktop_file_ids == NULL)
+	continue;
+
+      unaliased_type = _g_unix_content_type_unalias (mime_types[i]);
+      mime_info_cache_dir_add_desktop_entries (dir,
+					       unaliased_type,
+					       desktop_file_ids);
+      g_free (unaliased_type);
+    
+      g_strfreev (desktop_file_ids);
+    }
+  
+  g_strfreev (mime_types);
+  g_key_file_free (key_file);
+  
+  return;
+ error:
+  g_free (filename);
+  g_key_file_free (key_file);
+  
+  if (mime_types != NULL)
+    g_strfreev (mime_types);
+  
+  if (load_error)
+    g_error_free (load_error);
+}
+
+static void
+mime_info_cache_dir_init_defaults_list (MimeInfoCacheDir *dir)
+{
+  GKeyFile *key_file;
+  GError *load_error;
+  gchar *filename, **mime_types;
+  char *unaliased_type;
+  char **desktop_file_ids;
+  int i;
+  struct stat buf;
+
+  load_error = NULL;
+  mime_types = NULL;
+
+  if (dir->defaults_list_map != NULL &&
+      !mime_info_cache_dir_out_of_date (dir, "defaults.list",
+					&dir->defaults_list_timestamp))
+    return;
+  
+  if (dir->defaults_list_map != NULL)
+    g_hash_table_destroy (dir->defaults_list_map);
+  dir->defaults_list_map = g_hash_table_new_full (g_str_hash, g_str_equal,
+						  g_free, (GDestroyNotify)g_strfreev);
+  
+
+  key_file = g_key_file_new ();
+  
+  filename = g_build_filename (dir->path, "defaults.list", NULL);
+  if (g_stat (filename, &buf) < 0)
+    goto error;
+
+  if (dir->defaults_list_timestamp > 0) 
+    mime_info_cache->should_ping_mime_monitor = TRUE;
+
+  dir->defaults_list_timestamp = buf.st_mtime;
+
+  g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, &load_error);
+  g_free (filename);
+  filename = NULL;
+
+  if (load_error != NULL)
+    goto error;
+
+  mime_types = g_key_file_get_keys (key_file, DEFAULT_APPLICATIONS_GROUP,
+				    NULL, NULL);
+  if (mime_types != NULL)
+    {
+      for (i = 0; mime_types[i] != NULL; i++)
+	{
+	  desktop_file_ids = g_key_file_get_string_list (key_file,
+							 DEFAULT_APPLICATIONS_GROUP,
+							 mime_types[i],
+							 NULL,
+							 NULL);
+	  if (desktop_file_ids == NULL)
+	    continue;
+	  
+	  unaliased_type = _g_unix_content_type_unalias (mime_types[i]);
+	  g_hash_table_replace (dir->defaults_list_map,
+				unaliased_type,
+				desktop_file_ids);
+	}
+      
+      g_strfreev (mime_types);
+    }
+
+  g_key_file_free (key_file);
+  return;
+  
+ error:
+  g_free (filename);
+  g_key_file_free (key_file);
+  
+  if (mime_types != NULL)
+    g_strfreev (mime_types);
+  
+  if (load_error)
+    g_error_free (load_error);
+}
+
+static void
+mime_info_cache_dir_init_mimeapps_list (MimeInfoCacheDir *dir)
+{
+  GKeyFile *key_file;
+  GError *load_error;
+  gchar *filename, **mime_types;
+  char *unaliased_type;
+  char **desktop_file_ids;
+  int i;
+  struct stat buf;
+
+  load_error = NULL;
+  mime_types = NULL;
+
+  if (dir->mimeapps_list_added_map != NULL &&
+      !mime_info_cache_dir_out_of_date (dir, "mimeapps.list",
+					&dir->mimeapps_list_timestamp))
+    return;
+  
+  if (dir->mimeapps_list_added_map != NULL)
+    g_hash_table_destroy (dir->mimeapps_list_added_map);
+  dir->mimeapps_list_added_map = g_hash_table_new_full (g_str_hash, g_str_equal,
+							g_free, (GDestroyNotify)g_strfreev);
+  
+  if (dir->mimeapps_list_removed_map != NULL)
+    g_hash_table_destroy (dir->mimeapps_list_removed_map);
+  dir->mimeapps_list_removed_map = g_hash_table_new_full (g_str_hash, g_str_equal,
+							  g_free, (GDestroyNotify)g_strfreev);
+
+  key_file = g_key_file_new ();
+  
+  filename = g_build_filename (dir->path, "mimeapps.list", NULL);
+  if (g_stat (filename, &buf) < 0)
+    goto error;
+
+  if (dir->mimeapps_list_timestamp > 0) 
+    mime_info_cache->should_ping_mime_monitor = TRUE;
+
+  dir->mimeapps_list_timestamp = buf.st_mtime;
+
+  g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, &load_error);
+  g_free (filename);
+  filename = NULL;
+
+  if (load_error != NULL)
+    goto error;
+
+  mime_types = g_key_file_get_keys (key_file, ADDED_ASSOCIATIONS_GROUP,
+				    NULL, NULL);
+  if (mime_types != NULL)
+    {
+      for (i = 0; mime_types[i] != NULL; i++)
+	{
+	  desktop_file_ids = g_key_file_get_string_list (key_file,
+							 ADDED_ASSOCIATIONS_GROUP,
+							 mime_types[i],
+							 NULL,
+							 NULL);
+	  if (desktop_file_ids == NULL)
+	    continue;
+	  
+	  unaliased_type = _g_unix_content_type_unalias (mime_types[i]);
+	  g_hash_table_replace (dir->mimeapps_list_added_map,
+				unaliased_type,
+				desktop_file_ids);
+	}
+      
+      g_strfreev (mime_types);
+    }
+
+  mime_types = g_key_file_get_keys (key_file, REMOVED_ASSOCIATIONS_GROUP,
+				    NULL, NULL);
+  if (mime_types != NULL)
+    {
+      for (i = 0; mime_types[i] != NULL; i++)
+	{
+	  desktop_file_ids = g_key_file_get_string_list (key_file,
+							 REMOVED_ASSOCIATIONS_GROUP,
+							 mime_types[i],
+							 NULL,
+							 NULL);
+	  if (desktop_file_ids == NULL)
+	    continue;
+	  
+	  unaliased_type = _g_unix_content_type_unalias (mime_types[i]);
+	  g_hash_table_replace (dir->mimeapps_list_removed_map,
+				unaliased_type,
+				desktop_file_ids);
+	}
+      
+      g_strfreev (mime_types);
+    }
+
+  g_key_file_free (key_file);
+  return;
+  
+ error:
+  g_free (filename);
+  g_key_file_free (key_file);
+  
+  if (mime_types != NULL)
+    g_strfreev (mime_types);
+  
+  if (load_error)
+    g_error_free (load_error);
+}
+
+static MimeInfoCacheDir *
+mime_info_cache_dir_new (const char *path)
+{
+  MimeInfoCacheDir *dir;
+
+  dir = g_new0 (MimeInfoCacheDir, 1);
+  dir->path = g_strdup (path);
+  
+  return dir;
+}
+
+static void
+mime_info_cache_dir_free (MimeInfoCacheDir *dir)
+{
+  if (dir == NULL)
+    return;
+  
+  if (dir->mime_info_cache_map != NULL)
+    {
+      destroy_info_cache_map (dir->mime_info_cache_map);
+      dir->mime_info_cache_map = NULL;
+      
+  }
+  
+  if (dir->defaults_list_map != NULL)
+    {
+      g_hash_table_destroy (dir->defaults_list_map);
+      dir->defaults_list_map = NULL;
+    }
+  
+  if (dir->mimeapps_list_added_map != NULL)
+    {
+      g_hash_table_destroy (dir->mimeapps_list_added_map);
+      dir->mimeapps_list_added_map = NULL;
+    }
+  
+  if (dir->mimeapps_list_removed_map != NULL)
+    {
+      g_hash_table_destroy (dir->mimeapps_list_removed_map);
+      dir->mimeapps_list_removed_map = NULL;
+    }
+  
+  g_free (dir);
+}
+
+static void
+mime_info_cache_dir_add_desktop_entries (MimeInfoCacheDir  *dir,
+					 const char        *mime_type,
+					 char             **new_desktop_file_ids)
+{
+  GList *desktop_file_ids;
+  int i;
+  
+  desktop_file_ids = g_hash_table_lookup (dir->mime_info_cache_map,
+					  mime_type);
+  
+  for (i = 0; new_desktop_file_ids[i] != NULL; i++)
+    {
+      if (!g_list_find (desktop_file_ids, new_desktop_file_ids[i]))
+	desktop_file_ids = g_list_append (desktop_file_ids,
+					  g_strdup (new_desktop_file_ids[i]));
+    }
+  
+  g_hash_table_insert (dir->mime_info_cache_map, g_strdup (mime_type), desktop_file_ids);
+}
+
+static void
+mime_info_cache_init_dir_lists (void)
+{
+  const char * const *dirs;
+  int i;
+  
+  mime_info_cache = mime_info_cache_new ();
+  
+  dirs = get_applications_search_path ();
+  
+  for (i = 0; dirs[i] != NULL; i++)
+    {
+      MimeInfoCacheDir *dir;
+      
+      dir = mime_info_cache_dir_new (dirs[i]);
+      
+      if (dir != NULL)
+	{
+	  mime_info_cache_dir_init (dir);
+	  mime_info_cache_dir_init_defaults_list (dir);
+	  mime_info_cache_dir_init_mimeapps_list (dir);
+	  
+	  mime_info_cache->dirs = g_list_append (mime_info_cache->dirs, dir);
+	}
+    }
+}
+
+static void
+mime_info_cache_update_dir_lists (void)
+{
+  GList *tmp;
+  
+  tmp = mime_info_cache->dirs;
+  
+  while (tmp != NULL)
+    {
+      MimeInfoCacheDir *dir = (MimeInfoCacheDir *) tmp->data;
+
+      /* No need to do this if we had file monitors... */
+      mime_info_cache_blow_global_cache ();
+      mime_info_cache_dir_init (dir);
+      mime_info_cache_dir_init_defaults_list (dir);
+      mime_info_cache_dir_init_mimeapps_list (dir);
+      
+      tmp = tmp->next;
+    }
+}
+
+static void
+mime_info_cache_init (void)
+{
+  G_LOCK (mime_info_cache);
+  if (mime_info_cache == NULL)
+    mime_info_cache_init_dir_lists ();
+  else
+    {
+      time_t now;
+      
+      time (&now);
+      if (now >= mime_info_cache->last_stat_time + 10)
+	{
+	  mime_info_cache_update_dir_lists ();
+	  mime_info_cache->last_stat_time = now;
+	}
+    }
+  
+  if (mime_info_cache->should_ping_mime_monitor)
+    {
+      /* g_idle_add (emit_mime_changed, NULL); */
+      mime_info_cache->should_ping_mime_monitor = FALSE;
+    }
+  
+  G_UNLOCK (mime_info_cache);
+}
+
+static MimeInfoCache *
+mime_info_cache_new (void)
+{
+  MimeInfoCache *cache;
+  
+  cache = g_new0 (MimeInfoCache, 1);
+  
+  cache->global_defaults_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
+							(GDestroyNotify) g_free,
+							(GDestroyNotify) g_free);
+  return cache;
+}
+
+static void
+mime_info_cache_free (MimeInfoCache *cache)
+{
+  if (cache == NULL)
+    return;
+  
+  g_list_foreach (cache->dirs,
+		  (GFunc) mime_info_cache_dir_free,
+		  NULL);
+  g_list_free (cache->dirs);
+  g_hash_table_destroy (cache->global_defaults_cache);
+  g_free (cache);
+}
+
+/**
+ * mime_info_cache_reload:
+ * @dir: directory path which needs reloading.
+ * 
+ * Reload the mime information for the @dir.
+ */
+static void
+mime_info_cache_reload (const char *dir)
+{
+  /* FIXME: just reload the dir that needs reloading,
+   * don't blow the whole cache
+   */
+  if (mime_info_cache != NULL)
+    {
+      G_LOCK (mime_info_cache);
+      mime_info_cache_free (mime_info_cache);
+      mime_info_cache = NULL;
+      G_UNLOCK (mime_info_cache);
+    }
+}
+
+static GList *
+append_desktop_entry (GList      *list, 
+                      const char *desktop_entry,
+		      GList      *removed_entries)
+{
+  /* Add if not already in list, and valid */
+  if (!g_list_find_custom (list, desktop_entry, (GCompareFunc) strcmp) &&
+      !g_list_find_custom (removed_entries, desktop_entry, (GCompareFunc) strcmp))
+    list = g_list_prepend (list, g_strdup (desktop_entry));
+  
+  return list;
+}
+
+/**
+ * get_all_desktop_entries_for_mime_type:
+ * @mime_type: a mime type.
+ * @except: NULL or a strv list
+ *
+ * Returns all the desktop ids for @mime_type. The desktop files
+ * are listed in an order so that default applications are listed before
+ * non-default ones, and handlers for inherited mimetypes are listed
+ * after the base ones.
+ *
+ * Optionally doesn't list the desktop ids given in the @except 
+ *
+ * Return value: a #GList containing the desktop ids which claim
+ *    to handle @mime_type.
+ */
+static GList *
+get_all_desktop_entries_for_mime_type (const char *base_mime_type,
+				       const char **except)
+{
+  GList *desktop_entries, *removed_entries, *list, *dir_list, *tmp;
+  MimeInfoCacheDir *dir;
+  char *mime_type;
+  char **mime_types;
+  char **default_entries;
+  char **removed_associations;
+  int i, j, k;
+  GPtrArray *array;
+  char **anc;
+  
+  mime_info_cache_init ();
+
+  /* collect all ancestors */
+  mime_types = _g_unix_content_type_get_parents (base_mime_type);
+  array = g_ptr_array_new ();
+  for (i = 0; mime_types[i]; i++)
+    g_ptr_array_add (array, mime_types[i]);
+  g_free (mime_types);
+  for (i = 0; i < array->len; i++)
+    {
+      anc = _g_unix_content_type_get_parents (g_ptr_array_index (array, i));
+      for (j = 0; anc[j]; j++)
+        {
+          for (k = 0; k < array->len; k++)
+            {
+              if (strcmp (anc[j], g_ptr_array_index (array, k)) == 0)
+                break;
+            }
+          if (k == array->len) /* not found */
+            g_ptr_array_add (array, g_strdup (anc[j]));
+        }
+      g_strfreev (anc);
+    }
+  g_ptr_array_add (array, NULL);
+  mime_types = (char **)g_ptr_array_free (array, FALSE);
+
+  G_LOCK (mime_info_cache);
+  
+  removed_entries = NULL;
+  desktop_entries = NULL;
+
+  for (i = 0; except != NULL && except[i] != NULL; i++)
+    removed_entries = g_list_prepend (removed_entries, g_strdup (except[i]));
+  
+  for (i = 0; mime_types[i] != NULL; i++)
+    {
+      mime_type = mime_types[i];
+
+      /* Go through all apps listed as defaults */
+      for (dir_list = mime_info_cache->dirs;
+	   dir_list != NULL;
+	   dir_list = dir_list->next)
+	{
+	  dir = dir_list->data;
+
+	  /* First added associations from mimeapps.list */
+	  default_entries = g_hash_table_lookup (dir->mimeapps_list_added_map, mime_type);
+	  for (j = 0; default_entries != NULL && default_entries[j] != NULL; j++)
+	    desktop_entries = append_desktop_entry (desktop_entries, default_entries[j], removed_entries);
+
+	  /* Then removed associations from mimeapps.list */
+	  removed_associations = g_hash_table_lookup (dir->mimeapps_list_removed_map, mime_type);
+	  for (j = 0; removed_associations != NULL && removed_associations[j] != NULL; j++)
+	    removed_entries = append_desktop_entry (removed_entries, removed_associations[j], NULL);
+
+	  /* Then system defaults (or old per-user config) (using removed associations from this dir or earlier) */
+	  default_entries = g_hash_table_lookup (dir->defaults_list_map, mime_type);
+	  for (j = 0; default_entries != NULL && default_entries[j] != NULL; j++)
+	    desktop_entries = append_desktop_entry (desktop_entries, default_entries[j], removed_entries);
+	}
+
+      /* Go through all entries that support the mimetype */
+      for (dir_list = mime_info_cache->dirs;
+	   dir_list != NULL;
+	   dir_list = dir_list->next) 
+        {
+	  dir = dir_list->data;
+	
+	  list = g_hash_table_lookup (dir->mime_info_cache_map, mime_type);
+	  for (tmp = list; tmp != NULL; tmp = tmp->next)
+	    desktop_entries = append_desktop_entry (desktop_entries, tmp->data, removed_entries);
+        }
+    }
+  
+  G_UNLOCK (mime_info_cache);
+
+  g_strfreev (mime_types);
+
+  g_list_foreach (removed_entries, (GFunc)g_free, NULL);
+  g_list_free (removed_entries);
+  
+  desktop_entries = g_list_reverse (desktop_entries);
+  
+  return desktop_entries;
+}
+
+/* GDesktopAppInfoLookup interface: */
+
+static void g_desktop_app_info_lookup_base_init (gpointer g_class);
+static void g_desktop_app_info_lookup_class_init (gpointer g_class,
+						  gpointer class_data);
+
+GType
+g_desktop_app_info_lookup_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo desktop_app_info_lookup_info =
+      {
+        sizeof (GDesktopAppInfoLookupIface), /* class_size */
+	g_desktop_app_info_lookup_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_desktop_app_info_lookup_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GDesktopAppInfoLookup"),
+				&desktop_app_info_lookup_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_desktop_app_info_lookup_class_init (gpointer g_class,
+				      gpointer class_data)
+{
+}
+
+static void
+g_desktop_app_info_lookup_base_init (gpointer g_class)
+{
+}
+
+/**
+ * g_desktop_app_info_lookup_get_default_for_uri_scheme:
+ * @lookup: a #GDesktopAppInfoLookup
+ * @uri_scheme: a string containing a URI scheme.
+ *
+ * Gets the default application for launching applications 
+ * using this URI scheme for a particular GDesktopAppInfoLookup
+ * implementation.
+ *
+ * The GDesktopAppInfoLookup interface and this function is used
+ * to implement g_app_info_get_default_for_uri_scheme() backends
+ * in a GIO module. There is no reason for applications to use it
+ * directly. Applications should use g_app_info_get_default_for_uri_scheme().
+ * 
+ * Returns: #GAppInfo for given @uri_scheme or %NULL on error.
+ */
+GAppInfo *
+g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *lookup,
+						      const char            *uri_scheme)
+{
+  GDesktopAppInfoLookupIface *iface;
+  
+  g_return_val_if_fail (G_IS_DESKTOP_APP_INFO_LOOKUP (lookup), NULL);
+
+  iface = G_DESKTOP_APP_INFO_LOOKUP_GET_IFACE (lookup);
+
+  return (* iface->get_default_for_uri_scheme) (lookup, uri_scheme);
+}
+
+#define __G_DESKTOP_APP_INFO_C__
+#include "gioaliasdef.c"
diff --git a/gio/gdesktopappinfo.h b/gio/gdesktopappinfo.h
new file mode 100644
index 0000000..6e51545
--- /dev/null
+++ b/gio/gdesktopappinfo.h
@@ -0,0 +1,94 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_DESKTOP_APP_INFO_H__
+#define __G_DESKTOP_APP_INFO_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_DESKTOP_APP_INFO         (g_desktop_app_info_get_type ())
+#define G_DESKTOP_APP_INFO(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DESKTOP_APP_INFO, GDesktopAppInfo))
+#define G_DESKTOP_APP_INFO_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DESKTOP_APP_INFO, GDesktopAppInfoClass))
+#define G_IS_DESKTOP_APP_INFO(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DESKTOP_APP_INFO))
+#define G_IS_DESKTOP_APP_INFO_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DESKTOP_APP_INFO))
+#define G_DESKTOP_APP_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DESKTOP_APP_INFO, GDesktopAppInfoClass))
+
+typedef struct _GDesktopAppInfo        GDesktopAppInfo;
+typedef struct _GDesktopAppInfoClass   GDesktopAppInfoClass;
+
+struct _GDesktopAppInfoClass
+{
+  GObjectClass parent_class;
+};
+
+
+GType            g_desktop_app_info_get_type          (void) G_GNUC_CONST;
+
+GDesktopAppInfo *g_desktop_app_info_new_from_filename (const char      *filename);
+GDesktopAppInfo *g_desktop_app_info_new_from_keyfile  (GKeyFile        *key_file);
+
+GDesktopAppInfo *g_desktop_app_info_new               (const char      *desktop_id);
+gboolean         g_desktop_app_info_get_is_hidden     (GDesktopAppInfo *info);
+
+void             g_desktop_app_info_set_desktop_env   (const char      *desktop_env);
+
+
+#define G_TYPE_DESKTOP_APP_INFO_LOOKUP           (g_desktop_app_info_lookup_get_type ())
+#define G_DESKTOP_APP_INFO_LOOKUP(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DESKTOP_APP_INFO_LOOKUP, GDesktopAppInfoLookup))
+#define G_IS_DESKTOP_APP_INFO_LOOKUP(obj)	 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DESKTOP_APP_INFO_LOOKUP))
+#define G_DESKTOP_APP_INFO_LOOKUP_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_DESKTOP_APP_INFO_LOOKUP, GDesktopAppInfoLookupIface))
+
+/**
+ * G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME:
+ *
+ * Extension point for default handler to URI association. See
+ * <link linkend="extending-gio">Extending GIO</link>.
+ */
+#define G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME "gio-desktop-app-info-lookup"
+
+/**
+ * GDesktopAppInfoLookup:
+ *
+ * Interface that is used by backends to associate default
+ * handlers with URI schemes.
+ */
+typedef struct _GDesktopAppInfoLookup GDesktopAppInfoLookup;
+typedef struct _GDesktopAppInfoLookupIface GDesktopAppInfoLookupIface;
+
+struct _GDesktopAppInfoLookupIface
+{
+  GTypeInterface g_iface;
+
+  GAppInfo * (* get_default_for_uri_scheme) (GDesktopAppInfoLookup *lookup,
+                                             const char            *uri_scheme);
+};
+
+GType     g_desktop_app_info_lookup_get_type                   (void) G_GNUC_CONST;
+
+GAppInfo *g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *lookup,
+                                                                const char            *uri_scheme);
+
+G_END_DECLS
+
+#endif /* __G_DESKTOP_APP_INFO_H__ */
diff --git a/gio/gdrive.c b/gio/gdrive.c
new file mode 100644
index 0000000..9450819
--- /dev/null
+++ b/gio/gdrive.c
@@ -0,0 +1,547 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+#include "gdrive.h"
+#include "gsimpleasyncresult.h"
+#include "gasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gdrive
+ * @short_description: Virtual File System drive management
+ * @include: gio/gio.h
+ * 
+ * #GDrive - this represent a piece of hardware connected to the machine.
+ * It's generally only created for removable hardware or hardware with
+ * removable media. 
+ *
+ * #GDrive is a container class for #GVolume objects that stem from
+ * the same piece of media. As such, #GDrive abstracts a drive with
+ * (or without) removable media and provides operations for querying
+ * whether media is available, determing whether media change is
+ * automatically detected and ejecting the media.
+ *
+ * If the #GDrive reports that media isn't automatically detected, one
+ * can poll for media; typically one should not do this periodically
+ * as a poll for media operation is potententially expensive and may
+ * spin up the drive creating noise.
+ *
+ * For porting from GnomeVFS note that there is no equivalent of
+ * #GDrive in that API.
+ **/
+
+static void g_drive_base_init (gpointer g_class);
+static void g_drive_class_init (gpointer g_class,
+				 gpointer class_data);
+
+GType
+g_drive_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo drive_info =
+      {
+        sizeof (GDriveIface), /* class_size */
+	g_drive_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_drive_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GDrive"),
+				&drive_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_drive_class_init (gpointer g_class,
+                    gpointer class_data)
+{
+}
+
+static void
+g_drive_base_init (gpointer g_class)
+{
+  static gboolean initialized = FALSE;
+
+  if (! initialized)
+    {
+      /**
+      * GDrive::changed:
+      * @drive: a #GDrive.
+      * 
+      * Emitted when the drive's state has changed.
+      **/
+      g_signal_new (I_("changed"),
+                    G_TYPE_DRIVE,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GDriveIface, changed),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+      /**
+      * GDrive::disconnected:
+      * @drive: a #GDrive.
+      * 
+      * This signal is emitted when the #GDrive have been
+      * disconnected. If the recipient is holding references to the
+      * object they should release them so the object can be
+      * finalized.
+      **/
+      g_signal_new (I_("disconnected"),
+                    G_TYPE_DRIVE,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GDriveIface, disconnected),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+      /**
+      * GDrive::eject-button:
+      * @drive: a #GDrive.
+      * 
+      * Emitted when the physical eject button (if any) of a drive has
+      * been pressed.
+      **/
+      g_signal_new (I_("eject-button"),
+                    G_TYPE_DRIVE,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GDriveIface, eject_button),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+      initialized = TRUE;
+    }
+}
+
+/**
+ * g_drive_get_name:
+ * @drive: a #GDrive.
+ * 
+ * Gets the name of @drive.
+ *
+ * Returns: a string containing @drive's name. The returned 
+ *     string should be freed when no longer needed.
+ **/
+char *
+g_drive_get_name (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), NULL);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->get_name) (drive);
+}
+
+/**
+ * g_drive_get_icon:
+ * @drive: a #GDrive.
+ * 
+ * Gets the icon for @drive.
+ * 
+ * Returns: #GIcon for the @drive.
+ *    Free the returned object with g_object_unref().
+ **/
+GIcon *
+g_drive_get_icon (GDrive *drive)
+{
+  GDriveIface *iface;
+  
+  g_return_val_if_fail (G_IS_DRIVE (drive), NULL);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->get_icon) (drive);
+}
+
+/**
+ * g_drive_has_volumes:
+ * @drive: a #GDrive.
+ * 
+ * Check if @drive has any mountable volumes.
+ * 
+ * Returns: %TRUE if the @drive contains volumes, %FALSE otherwise.
+ **/
+gboolean
+g_drive_has_volumes (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->has_volumes) (drive);
+}
+
+/**
+ * g_drive_get_volumes:
+ * @drive: a #GDrive.
+ * 
+ * Get a list of mountable volumes for @drive.
+ *
+ * The returned list should be freed with g_list_free(), after
+ * its elements have been unreffed with g_object_unref().
+ * 
+ * Returns: #GList containing any #GVolume objects on the given @drive.
+ **/
+GList *
+g_drive_get_volumes (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), NULL);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->get_volumes) (drive);
+}
+
+/**
+ * g_drive_is_media_check_automatic:
+ * @drive: a #GDrive.
+ * 
+ * Checks if @drive is capabable of automatically detecting media changes.
+ * 
+ * Returns: %TRUE if the @drive is capabable of automatically detecting 
+ *     media changes, %FALSE otherwise.
+ **/
+gboolean
+g_drive_is_media_check_automatic (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->is_media_check_automatic) (drive);
+}
+
+/**
+ * g_drive_is_media_removable:
+ * @drive: a #GDrive.
+ * 
+ * Checks if the @drive supports removable media.
+ * 
+ * Returns: %TRUE if @drive supports removable media, %FALSE otherwise.
+ **/
+gboolean
+g_drive_is_media_removable (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->is_media_removable) (drive);
+}
+
+/**
+ * g_drive_has_media:
+ * @drive: a #GDrive.
+ * 
+ * Checks if the @drive has media. Note that the OS may not be polling
+ * the drive for media changes; see g_drive_is_media_check_automatic()
+ * for more details.
+ * 
+ * Returns: %TRUE if @drive has media, %FALSE otherwise.
+ **/
+gboolean
+g_drive_has_media (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  return (* iface->has_media) (drive);
+}
+
+/**
+ * g_drive_can_eject:
+ * @drive: a #GDrive.
+ * 
+ * Checks if a drive can be ejected.
+ * 
+ * Returns: %TRUE if the @drive can be ejected, %FALSE otherwise.
+ **/
+gboolean
+g_drive_can_eject (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  if (iface->can_eject == NULL)
+    return FALSE;
+
+  return (* iface->can_eject) (drive);
+}
+
+/**
+ * g_drive_can_poll_for_media:
+ * @drive: a #GDrive.
+ * 
+ * Checks if a drive can be polled for media changes.
+ * 
+ * Returns: %TRUE if the @drive can be polled for media changes,
+ *     %FALSE otherwise.
+ **/
+gboolean
+g_drive_can_poll_for_media (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  if (iface->poll_for_media == NULL)
+    return FALSE;
+
+  return (* iface->can_poll_for_media) (drive);
+}
+
+/**
+ * g_drive_eject:
+ * @drive: a #GDrive.
+ * @flags: flags affecting the unmount if required for eject
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data to pass to @callback
+ * 
+ * Asynchronously ejects a drive.
+ *
+ * When the operation is finished, @callback will be called.
+ * You can then call g_drive_eject_finish() to obtain the
+ * result of the operation.
+ **/
+void
+g_drive_eject (GDrive              *drive,
+	       GMountUnmountFlags   flags,
+	       GCancellable        *cancellable,
+	       GAsyncReadyCallback  callback,
+	       gpointer             user_data)
+{
+  GDriveIface *iface;
+
+  g_return_if_fail (G_IS_DRIVE (drive));
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  if (iface->eject == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (drive), callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   _("drive doesn't implement eject"));
+      
+      return;
+    }
+  
+  (* iface->eject) (drive, flags, cancellable, callback, user_data);
+}
+
+/**
+ * g_drive_eject_finish:
+ * @drive: a #GDrive.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes ejecting a drive.
+ * 
+ * Returns: %TRUE if the drive has been ejected successfully,
+ *     %FALSE otherwise.
+ **/
+gboolean
+g_drive_eject_finish (GDrive        *drive,
+		      GAsyncResult  *result,
+		      GError       **error)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_DRIVE_GET_IFACE (drive);
+  
+  return (* iface->eject_finish) (drive, result, error);
+}
+
+/**
+ * g_drive_poll_for_media:
+ * @drive: a #GDrive.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data to pass to @callback
+ * 
+ * Asynchronously polls @drive to see if media has been inserted or removed.
+ * 
+ * When the operation is finished, @callback will be called.
+ * You can then call g_drive_poll_for_media_finish() to obtain the
+ * result of the operation.
+ **/
+void
+g_drive_poll_for_media (GDrive              *drive,
+                        GCancellable        *cancellable,
+                        GAsyncReadyCallback  callback,
+                        gpointer             user_data)
+{
+  GDriveIface *iface;
+
+  g_return_if_fail (G_IS_DRIVE (drive));
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  if (iface->poll_for_media == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (drive), callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   _("drive doesn't implement polling for media"));
+      
+      return;
+    }
+  
+  (* iface->poll_for_media) (drive, cancellable, callback, user_data);
+}
+
+/**
+ * g_drive_poll_for_media_finish:
+ * @drive: a #GDrive.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an operation started with g_drive_poll_for_media() on a drive.
+ * 
+ * Returns: %TRUE if the drive has been poll_for_mediaed successfully,
+ *     %FALSE otherwise.
+ **/
+gboolean
+g_drive_poll_for_media_finish (GDrive        *drive,
+                               GAsyncResult  *result,
+                               GError       **error)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_DRIVE_GET_IFACE (drive);
+  
+  return (* iface->poll_for_media_finish) (drive, result, error);
+}
+
+/**
+ * g_drive_get_identifier:
+ * @drive: a #GDrive
+ * @kind: the kind of identifier to return
+ *
+ * Gets the identifier of the given kind for @drive.
+ *
+ * Returns: a newly allocated string containing the
+ *     requested identfier, or %NULL if the #GDrive
+ *     doesn't have this kind of identifier.
+ */
+char *
+g_drive_get_identifier (GDrive     *drive,
+			const char *kind)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), NULL);
+  g_return_val_if_fail (kind != NULL, NULL);
+
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  if (iface->get_identifier == NULL)
+    return NULL;
+  
+  return (* iface->get_identifier) (drive, kind);
+}
+
+/**
+ * g_drive_enumerate_identifiers:
+ * @drive: a #GDrive
+ *
+ * Gets the kinds of identifiers that @drive has. 
+ * Use g_drive_get_identifer() to obtain the identifiers
+ * themselves.
+ *
+ * Returns: a %NULL-terminated array of strings containing
+ *     kinds of identifiers. Use g_strfreev() to free.
+ */
+char **
+g_drive_enumerate_identifiers (GDrive *drive)
+{
+  GDriveIface *iface;
+
+  g_return_val_if_fail (G_IS_DRIVE (drive), NULL);
+  iface = G_DRIVE_GET_IFACE (drive);
+
+  if (iface->enumerate_identifiers == NULL)
+    return NULL;
+  
+  return (* iface->enumerate_identifiers) (drive);
+}
+
+
+#define __G_DRIVE_C__
+#include "gioaliasdef.c"
diff --git a/gio/gdrive.h b/gio/gdrive.h
new file mode 100644
index 0000000..e1bc321
--- /dev/null
+++ b/gio/gdrive.h
@@ -0,0 +1,140 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_DRIVE_H__
+#define __G_DRIVE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_DRIVE           (g_drive_get_type ())
+#define G_DRIVE(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DRIVE, GDrive))
+#define G_IS_DRIVE(obj)	       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DRIVE))
+#define G_DRIVE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_DRIVE, GDriveIface))
+
+/**
+ * GDriveIface:
+ * @g_iface: The parent interface.
+ * @changed: Signal emitted when the drive is changed.
+ * @disconnected: The removed signal that is emitted when the #GDrive have been disconnected. If the recipient is holding references to the object they should release them so the object can be finalized.
+ * @eject_button: Signal emitted when the physical eject button (if any) of a drive have been pressed.
+ * @get_name: Returns the name for the given #GDrive.
+ * @get_icon: Returns a #GIcon for the given #GDrive.
+ * @has_volumes: Returns %TRUE if the #GDrive has mountable volumes.
+ * @get_volumes: Returns a list #GList of #GVolume for the #GDrive.
+ * @is_media_removable: Returns %TRUE if the #GDrive supports removal and insertion of media.
+ * @has_media: Returns %TRUE if the #GDrive has media inserted.
+ * @is_media_check_automatic: Returns %TRUE if the #GDrive is capabable of automatically detecting media changes.
+ * @can_poll_for_media: Returns %TRUE if the #GDrive is capable of manually polling for media change.
+ * @can_eject: Returns %TRUE if the #GDrive can eject media.
+ * @eject: Ejects a #GDrive.
+ * @eject_finish: Finishes an eject operation.
+ * @poll_for_media: Poll for media insertion/removal on a #GDrive.
+ * @poll_for_media_finish: Finishes a media poll operation.
+ * @get_identifier: Returns the identifier of the given kind, or %NULL if
+ *    the #GDrive doesn't have one.
+ * @enumerate_identifiers: Returns an array strings listing the kinds
+ *    of identifiers which the #GDrive has.
+ *
+ * Interface for creating #GDrive implementations.
+ */
+typedef struct _GDriveIface    GDriveIface;
+
+struct _GDriveIface
+{
+  GTypeInterface g_iface;
+
+  /* signals */
+  void     (* changed)                  (GDrive              *drive);
+  void     (* disconnected)             (GDrive              *drive);
+  void     (* eject_button)             (GDrive              *drive);
+
+  /* Virtual Table */
+  char *   (* get_name)                 (GDrive              *drive);
+  GIcon *  (* get_icon)                 (GDrive              *drive);
+  gboolean (* has_volumes)              (GDrive              *drive);
+  GList *  (* get_volumes)              (GDrive              *drive);
+  gboolean (* is_media_removable)       (GDrive              *drive);
+  gboolean (* has_media)                (GDrive              *drive);
+  gboolean (* is_media_check_automatic) (GDrive              *drive);
+  gboolean (* can_eject)                (GDrive              *drive);
+  gboolean (* can_poll_for_media)       (GDrive              *drive);
+  void     (* eject)                    (GDrive              *drive,
+                                         GMountUnmountFlags   flags,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data);
+  gboolean (* eject_finish)             (GDrive              *drive,
+                                         GAsyncResult        *result,
+                                         GError             **error);
+  void     (* poll_for_media)           (GDrive              *drive,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data);
+  gboolean (* poll_for_media_finish)    (GDrive              *drive,
+                                         GAsyncResult        *result,
+                                         GError             **error);
+
+  char *   (* get_identifier)           (GDrive              *drive,
+                                         const char          *kind);
+  char **  (* enumerate_identifiers)    (GDrive              *drive);
+};
+
+GType    g_drive_get_type                 (void) G_GNUC_CONST;
+
+char *   g_drive_get_name                 (GDrive               *drive);
+GIcon *  g_drive_get_icon                 (GDrive               *drive);
+gboolean g_drive_has_volumes              (GDrive               *drive);
+GList *  g_drive_get_volumes              (GDrive               *drive);
+gboolean g_drive_is_media_removable       (GDrive               *drive);
+gboolean g_drive_has_media                (GDrive               *drive);
+gboolean g_drive_is_media_check_automatic (GDrive               *drive);
+gboolean g_drive_can_poll_for_media       (GDrive               *drive);
+gboolean g_drive_can_eject                (GDrive               *drive);
+void     g_drive_eject                    (GDrive               *drive,
+					   GMountUnmountFlags    flags,
+                                           GCancellable         *cancellable,
+                                           GAsyncReadyCallback   callback,
+                                           gpointer              user_data);
+gboolean g_drive_eject_finish             (GDrive               *drive,
+                                           GAsyncResult         *result,
+                                           GError              **error);
+void     g_drive_poll_for_media           (GDrive               *drive,
+                                           GCancellable         *cancellable,
+                                           GAsyncReadyCallback   callback,
+                                           gpointer              user_data);
+gboolean g_drive_poll_for_media_finish    (GDrive               *drive,
+                                           GAsyncResult         *result,
+                                           GError              **error);
+char *   g_drive_get_identifier           (GDrive              *drive,
+					   const char          *kind);
+char **  g_drive_enumerate_identifiers    (GDrive              *drive);
+
+G_END_DECLS
+
+#endif /* __G_DRIVE_H__ */
diff --git a/gio/gdummyfile.c b/gio/gdummyfile.c
new file mode 100644
index 0000000..1033b4e
--- /dev/null
+++ b/gio/gdummyfile.c
@@ -0,0 +1,761 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+
+#include "gdummyfile.h"
+#include "gfile.h"
+
+#include "gioalias.h"
+
+static void g_dummy_file_file_iface_init (GFileIface *iface);
+
+typedef struct {
+  char *scheme;
+  char *userinfo;
+  char *host;
+  int port; /* -1 => not in uri */
+  char *path;
+  char *query;
+  char *fragment;
+} GDecodedUri;
+
+struct _GDummyFile
+{
+  GObject parent_instance;
+
+  GDecodedUri *decoded_uri;
+  char *text_uri;
+};
+
+#define g_dummy_file_get_type _g_dummy_file_get_type
+G_DEFINE_TYPE_WITH_CODE (GDummyFile, g_dummy_file, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_FILE,
+						g_dummy_file_file_iface_init))
+
+#define SUB_DELIM_CHARS  "!$&'()*+,;="
+
+static char *       _g_encode_uri       (GDecodedUri *decoded);
+static void         _g_decoded_uri_free (GDecodedUri *decoded);
+static GDecodedUri *_g_decode_uri       (const char  *uri);
+static GDecodedUri *_g_decoded_uri_new  (void);
+
+static char * unescape_string (const gchar *escaped_string,
+			       const gchar *escaped_string_end,
+			       const gchar *illegal_characters);
+
+static void g_string_append_encoded (GString    *string, 
+                                     const char *encoded,
+				     const char *reserved_chars_allowed);
+
+static void
+g_dummy_file_finalize (GObject *object)
+{
+  GDummyFile *dummy;
+
+  dummy = G_DUMMY_FILE (object);
+
+  if (dummy->decoded_uri)
+    _g_decoded_uri_free (dummy->decoded_uri);
+  
+  g_free (dummy->text_uri);
+
+  G_OBJECT_CLASS (g_dummy_file_parent_class)->finalize (object);
+}
+
+static void
+g_dummy_file_class_init (GDummyFileClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = g_dummy_file_finalize;
+}
+
+static void
+g_dummy_file_init (GDummyFile *dummy)
+{
+}
+
+/**
+ * g_dummy_file_new:
+ * @uri: Universal Resource Identifier for the dummy file object.
+ * 
+ * Returns: a new #GFile. 
+ **/
+GFile *
+_g_dummy_file_new (const char *uri)
+{
+  GDummyFile *dummy;
+
+  g_return_val_if_fail (uri != NULL, NULL);
+
+  dummy = g_object_new (G_TYPE_DUMMY_FILE, NULL);
+  dummy->text_uri = g_strdup (uri);
+  dummy->decoded_uri = _g_decode_uri (uri);
+  
+  return G_FILE (dummy);
+}
+
+static gboolean
+g_dummy_file_is_native (GFile *file)
+{
+  return FALSE;
+}
+
+static char *
+g_dummy_file_get_basename (GFile *file)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+  
+  if (dummy->decoded_uri)
+    return g_path_get_basename (dummy->decoded_uri->path);
+  return g_strdup (dummy->text_uri);
+}
+
+static char *
+g_dummy_file_get_path (GFile *file)
+{
+  return NULL;
+}
+
+static char *
+g_dummy_file_get_uri (GFile *file)
+{
+  return g_strdup (G_DUMMY_FILE (file)->text_uri);
+}
+
+static char *
+g_dummy_file_get_parse_name (GFile *file)
+{
+  return g_strdup (G_DUMMY_FILE (file)->text_uri);
+}
+
+static GFile *
+g_dummy_file_get_parent (GFile *file)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+  GFile *parent;
+  char *dirname;
+  char *uri;
+  GDecodedUri new_decoded_uri;
+
+  if (dummy->decoded_uri == NULL ||
+      g_strcmp0 (dummy->decoded_uri->path, "/") == 0)
+    return NULL;
+
+  dirname = g_path_get_dirname (dummy->decoded_uri->path);
+  
+  if (strcmp (dirname, ".") == 0)
+    {
+      g_free (dirname);
+      return NULL;
+    }
+  
+  new_decoded_uri = *dummy->decoded_uri;
+  new_decoded_uri.path = dirname;
+  uri = _g_encode_uri (&new_decoded_uri);
+  g_free (dirname);
+  
+  parent = _g_dummy_file_new (uri);
+  g_free (uri);
+  
+  return parent;
+}
+
+static GFile *
+g_dummy_file_dup (GFile *file)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+
+  return _g_dummy_file_new (dummy->text_uri);
+}
+
+static guint
+g_dummy_file_hash (GFile *file)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+  
+  return g_str_hash (dummy->text_uri);
+}
+
+static gboolean
+g_dummy_file_equal (GFile *file1,
+		    GFile *file2)
+{
+  GDummyFile *dummy1 = G_DUMMY_FILE (file1);
+  GDummyFile *dummy2 = G_DUMMY_FILE (file2);
+
+  return g_str_equal (dummy1->text_uri, dummy2->text_uri);
+}
+
+static int
+safe_strcmp (const char *a, 
+             const char *b)
+{
+  if (a == NULL)
+    a = "";
+  if (b == NULL)
+    b = "";
+
+  return strcmp (a, b);
+}
+
+static gboolean
+uri_same_except_path (GDecodedUri *a,
+		      GDecodedUri *b)
+{
+  if (safe_strcmp (a->scheme, b->scheme) != 0)
+    return FALSE;
+  if (safe_strcmp (a->userinfo, b->userinfo) != 0)
+    return FALSE;
+  if (safe_strcmp (a->host, b->host) != 0)
+    return FALSE;
+  if (a->port != b->port)
+    return FALSE;
+
+  return TRUE;
+}
+
+static const char *
+match_prefix (const char *path, 
+              const char *prefix)
+{
+  int prefix_len;
+
+  prefix_len = strlen (prefix);
+  if (strncmp (path, prefix, prefix_len) != 0)
+    return NULL;
+  return path + prefix_len;
+}
+
+static gboolean
+g_dummy_file_prefix_matches (GFile *parent, GFile *descendant)
+{
+  GDummyFile *parent_dummy = G_DUMMY_FILE (parent);
+  GDummyFile *descendant_dummy = G_DUMMY_FILE (descendant);
+  const char *remainder;
+
+  if (parent_dummy->decoded_uri != NULL &&
+      descendant_dummy->decoded_uri != NULL)
+    {
+      if (uri_same_except_path (parent_dummy->decoded_uri,
+				descendant_dummy->decoded_uri)) 
+        {
+	  remainder = match_prefix (descendant_dummy->decoded_uri->path,
+                                    parent_dummy->decoded_uri->path);
+          if (remainder != NULL && *remainder == '/')
+	    {
+	      while (*remainder == '/')
+	        remainder++;
+	      if (*remainder != 0)
+	        return TRUE;
+	    }
+        }
+    }
+  else
+    {
+      remainder = match_prefix (descendant_dummy->text_uri,
+				parent_dummy->text_uri);
+      if (remainder != NULL && *remainder == '/')
+	  {
+	    while (*remainder == '/')
+	      remainder++;
+	    if (*remainder != 0)
+	      return TRUE;
+	  }
+    }
+  
+  return FALSE;
+}
+
+static char *
+g_dummy_file_get_relative_path (GFile *parent,
+				GFile *descendant)
+{
+  GDummyFile *parent_dummy = G_DUMMY_FILE (parent);
+  GDummyFile *descendant_dummy = G_DUMMY_FILE (descendant);
+  const char *remainder;
+
+  if (parent_dummy->decoded_uri != NULL &&
+      descendant_dummy->decoded_uri != NULL)
+    {
+      if (uri_same_except_path (parent_dummy->decoded_uri,
+				descendant_dummy->decoded_uri)) 
+        {
+          remainder = match_prefix (descendant_dummy->decoded_uri->path,
+                                    parent_dummy->decoded_uri->path);
+          if (remainder != NULL && *remainder == '/')
+	    {
+	      while (*remainder == '/')
+	        remainder++;
+	      if (*remainder != 0)
+	        return g_strdup (remainder);
+	    }
+        }
+    }
+  else
+    {
+      remainder = match_prefix (descendant_dummy->text_uri,
+				parent_dummy->text_uri);
+      if (remainder != NULL && *remainder == '/')
+	  {
+	    while (*remainder == '/')
+	      remainder++;
+	    if (*remainder != 0)
+	      return unescape_string (remainder, NULL, "/");
+	  }
+    }
+  
+  return NULL;
+}
+
+
+static GFile *
+g_dummy_file_resolve_relative_path (GFile      *file,
+				    const char *relative_path)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+  GFile *child;
+  char *uri;
+  GDecodedUri new_decoded_uri;
+  GString *str;
+
+  if (dummy->decoded_uri == NULL)
+    {
+      str = g_string_new (dummy->text_uri);
+      g_string_append (str, "/");
+      g_string_append_encoded (str, relative_path, SUB_DELIM_CHARS ":@/");
+      child = _g_dummy_file_new (str->str);
+      g_string_free (str, TRUE);
+    }
+  else
+    {
+      new_decoded_uri = *dummy->decoded_uri;
+      
+      if (g_path_is_absolute (relative_path))
+	new_decoded_uri.path = g_strdup (relative_path);
+      else
+	new_decoded_uri.path = g_build_filename (new_decoded_uri.path, relative_path, NULL);
+      
+      uri = _g_encode_uri (&new_decoded_uri);
+      g_free (new_decoded_uri.path);
+      
+      child = _g_dummy_file_new (uri);
+      g_free (uri);
+    }
+
+  return child;
+}
+
+static GFile *
+g_dummy_file_get_child_for_display_name (GFile        *file,
+					 const char   *display_name,
+					 GError      **error)
+{
+  return g_file_get_child (file, display_name);
+}
+
+static gboolean
+g_dummy_file_has_uri_scheme (GFile *file,
+			     const char *uri_scheme)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+  
+  if (dummy->decoded_uri)
+    return g_ascii_strcasecmp (uri_scheme, dummy->decoded_uri->scheme) == 0;
+  return FALSE;
+}
+
+static char *
+g_dummy_file_get_uri_scheme (GFile *file)
+{
+  GDummyFile *dummy = G_DUMMY_FILE (file);
+
+  if (dummy->decoded_uri)
+    return g_strdup (dummy->decoded_uri->scheme);
+    
+  return NULL;
+}
+
+
+static void
+g_dummy_file_file_iface_init (GFileIface *iface)
+{
+  iface->dup = g_dummy_file_dup;
+  iface->hash = g_dummy_file_hash;
+  iface->equal = g_dummy_file_equal;
+  iface->is_native = g_dummy_file_is_native;
+  iface->has_uri_scheme = g_dummy_file_has_uri_scheme;
+  iface->get_uri_scheme = g_dummy_file_get_uri_scheme;
+  iface->get_basename = g_dummy_file_get_basename;
+  iface->get_path = g_dummy_file_get_path;
+  iface->get_uri = g_dummy_file_get_uri;
+  iface->get_parse_name = g_dummy_file_get_parse_name;
+  iface->get_parent = g_dummy_file_get_parent;
+  iface->prefix_matches = g_dummy_file_prefix_matches;
+  iface->get_relative_path = g_dummy_file_get_relative_path;
+  iface->resolve_relative_path = g_dummy_file_resolve_relative_path;
+  iface->get_child_for_display_name = g_dummy_file_get_child_for_display_name;
+}
+
+/* Uri handling helper functions: */
+
+static int
+unescape_character (const char *scanner)
+{
+  int first_digit;
+  int second_digit;
+  
+  first_digit = g_ascii_xdigit_value (*scanner++);
+  if (first_digit < 0)
+    return -1;
+
+  second_digit = g_ascii_xdigit_value (*scanner++);
+  if (second_digit < 0)
+    return -1;
+
+  return (first_digit << 4) | second_digit;
+}
+
+static char *
+unescape_string (const gchar *escaped_string,
+		 const gchar *escaped_string_end,
+		 const gchar *illegal_characters)
+{
+  const gchar *in;
+  gchar *out, *result;
+  gint character;
+  
+  if (escaped_string == NULL)
+    return NULL;
+
+  if (escaped_string_end == NULL)
+    escaped_string_end = escaped_string + strlen (escaped_string);
+  
+  result = g_malloc (escaped_string_end - escaped_string + 1);
+	
+  out = result;
+  for (in = escaped_string; in < escaped_string_end; in++) 
+    {
+      character = *in;
+      if (*in == '%') 
+        {
+          in++;
+          if (escaped_string_end - in < 2)
+	    {
+	      g_free (result);
+	      return NULL;
+	    }
+      
+          character = unescape_character (in);
+      
+          /* Check for an illegal character. We consider '\0' illegal here. */
+          if (character <= 0 ||
+	      (illegal_characters != NULL &&
+	       strchr (illegal_characters, (char)character) != NULL))
+	    {
+	      g_free (result);
+	      return NULL;
+	    }
+          in++; /* The other char will be eaten in the loop header */
+        }
+      *out++ = (char)character;
+    }
+  
+  *out = '\0';
+  g_warn_if_fail (out - result <= strlen (escaped_string));
+  return result;
+}
+
+void
+_g_decoded_uri_free (GDecodedUri *decoded)
+{
+  if (decoded == NULL)
+    return;
+
+  g_free (decoded->scheme);
+  g_free (decoded->query);
+  g_free (decoded->fragment);
+  g_free (decoded->userinfo);
+  g_free (decoded->host);
+  g_free (decoded->path);
+  g_free (decoded);
+}
+
+GDecodedUri *
+_g_decoded_uri_new (void)
+{
+  GDecodedUri *uri;
+
+  uri = g_new0 (GDecodedUri, 1);
+  uri->port = -1;
+
+  return uri;
+}
+
+GDecodedUri *
+_g_decode_uri (const char *uri)
+{
+  GDecodedUri *decoded;
+  const char *p, *in, *hier_part_start, *hier_part_end, *query_start, *fragment_start;
+  char *out;
+  char c;
+
+  /* From RFC 3986 Decodes:
+   * URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
+   */ 
+
+  p = uri;
+  
+  /* Decode scheme:
+     scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+  */
+
+  if (!g_ascii_isalpha (*p))
+    return NULL;
+
+  while (1)
+    {
+      c = *p++;
+
+      if (c == ':')
+	break;
+      
+      if (!(g_ascii_isalnum(c) ||
+	    c == '+' ||
+	    c == '-' ||
+	    c == '.'))
+	return NULL;
+    }
+
+  decoded = _g_decoded_uri_new ();
+  
+  decoded->scheme = g_malloc (p - uri);
+  out = decoded->scheme;
+  for (in = uri; in < p - 1; in++)
+    *out++ = g_ascii_tolower (*in);
+  *out = 0;
+
+  hier_part_start = p;
+
+  query_start = strchr (p, '?');
+  if (query_start)
+    {
+      hier_part_end = query_start++;
+      fragment_start = strchr (query_start, '#');
+      if (fragment_start)
+	{
+	  decoded->query = g_strndup (query_start, fragment_start - query_start);
+	  decoded->fragment = g_strdup (fragment_start+1);
+	}
+      else
+	{
+	  decoded->query = g_strdup (query_start);
+	  decoded->fragment = NULL;
+	}
+    }
+  else
+    {
+      /* No query */
+      decoded->query = NULL;
+      fragment_start = strchr (p, '#');
+      if (fragment_start)
+	{
+	  hier_part_end = fragment_start++;
+	  decoded->fragment = g_strdup (fragment_start);
+	}
+      else
+	{
+	  hier_part_end = p + strlen (p);
+	  decoded->fragment = NULL;
+	}
+    }
+
+  /*  3:
+      hier-part   = "//" authority path-abempty
+                  / path-absolute
+                  / path-rootless
+                  / path-empty
+
+  */
+
+  if (hier_part_start[0] == '/' &&
+      hier_part_start[1] == '/')
+    {
+      const char *authority_start, *authority_end;
+      const char *userinfo_start, *userinfo_end;
+      const char *host_start, *host_end;
+      const char *port_start;
+      
+      authority_start = hier_part_start + 2;
+      /* authority is always followed by / or nothing */
+      authority_end = memchr (authority_start, '/', hier_part_end - authority_start);
+      if (authority_end == NULL)
+	authority_end = hier_part_end;
+
+      /* 3.2:
+	      authority   = [ userinfo "@" ] host [ ":" port ]
+      */
+
+      userinfo_end = memchr (authority_start, '@', authority_end - authority_start);
+      if (userinfo_end)
+	{
+	  userinfo_start = authority_start;
+	  decoded->userinfo = unescape_string (userinfo_start, userinfo_end, NULL);
+	  if (decoded->userinfo == NULL)
+	    {
+	      _g_decoded_uri_free (decoded);
+	      return NULL;
+	    }
+	  host_start = userinfo_end + 1;
+	}
+      else
+	host_start = authority_start;
+
+      port_start = memchr (host_start, ':', authority_end - host_start);
+      if (port_start)
+	{
+	  host_end = port_start++;
+
+	  decoded->port = atoi(port_start);
+	}
+      else
+	{
+	  host_end = authority_end;
+	  decoded->port = -1;
+	}
+
+      decoded->host = g_strndup (host_start, host_end - host_start);
+
+      hier_part_start = authority_end;
+    }
+
+  decoded->path = unescape_string (hier_part_start, hier_part_end, "/");
+
+  if (decoded->path == NULL)
+    {
+      _g_decoded_uri_free (decoded);
+      return NULL;
+    }
+  
+  return decoded;
+}
+
+static gboolean
+is_valid (char c, const char *reserved_chars_allowed)
+{
+  if (g_ascii_isalnum (c) ||
+      c == '-' ||
+      c == '.' ||
+      c == '_' ||
+      c == '~')
+    return TRUE;
+
+  if (reserved_chars_allowed &&
+      strchr (reserved_chars_allowed, c) != NULL)
+    return TRUE;
+  
+  return FALSE;
+}
+
+static void
+g_string_append_encoded (GString    *string, 
+                         const char *encoded,
+			 const char *reserved_chars_allowed)
+{
+  unsigned char c;
+  const char *end;
+  static const gchar hex[16] = "0123456789ABCDEF";
+
+  end = encoded + strlen (encoded);
+  
+  while ((c = *encoded) != 0)
+    {
+      if (is_valid (c, reserved_chars_allowed))
+	{
+	  g_string_append_c (string, c);
+	  encoded++;
+	}
+      else
+	{
+	  g_string_append_c (string, '%');
+	  g_string_append_c (string, hex[((guchar)c) >> 4]);
+	  g_string_append_c (string, hex[((guchar)c) & 0xf]);
+	  encoded++;
+	}
+    }
+}
+
+static char *
+_g_encode_uri (GDecodedUri *decoded)
+{
+  GString *uri;
+
+  uri = g_string_new (NULL);
+
+  g_string_append (uri, decoded->scheme);
+  g_string_append (uri, "://");
+
+  if (decoded->host != NULL)
+    {
+      if (decoded->userinfo)
+	{
+	  /* userinfo    = *( unreserved / pct-encoded / sub-delims / ":" ) */
+	  g_string_append_encoded (uri, decoded->userinfo, SUB_DELIM_CHARS ":");
+	  g_string_append_c (uri, '@');
+	}
+      
+      g_string_append (uri, decoded->host);
+      
+      if (decoded->port != -1)
+	{
+	  g_string_append_c (uri, ':');
+	  g_string_append_printf (uri, "%d", decoded->port);
+	}
+    }
+
+  g_string_append_encoded (uri, decoded->path, SUB_DELIM_CHARS ":@/");
+  
+  if (decoded->query)
+    {
+      g_string_append_c (uri, '?');
+      g_string_append (uri, decoded->query);
+    }
+    
+  if (decoded->fragment)
+    {
+      g_string_append_c (uri, '#');
+      g_string_append (uri, decoded->fragment);
+    }
+
+  return g_string_free (uri, FALSE);
+}
diff --git a/gio/gdummyfile.h b/gio/gdummyfile.h
new file mode 100644
index 0000000..791f233
--- /dev/null
+++ b/gio/gdummyfile.h
@@ -0,0 +1,51 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_DUMMY_FILE_H__
+#define __G_DUMMY_FILE_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_DUMMY_FILE         (_g_dummy_file_get_type ())
+#define G_DUMMY_FILE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_DUMMY_FILE, GDummyFile))
+#define G_DUMMY_FILE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_DUMMY_FILE, GDummyFileClass))
+#define G_IS_DUMMY_FILE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_DUMMY_FILE))
+#define G_IS_DUMMY_FILE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_DUMMY_FILE))
+#define G_DUMMY_FILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_DUMMY_FILE, GDummyFileClass))
+
+typedef struct _GDummyFile        GDummyFile;
+typedef struct _GDummyFileClass   GDummyFileClass;
+
+struct _GDummyFileClass
+{
+  GObjectClass parent_class;
+};
+
+GType   _g_dummy_file_get_type (void) G_GNUC_CONST;
+
+GFile * _g_dummy_file_new      (const char *uri);
+
+G_END_DECLS
+
+#endif /* __G_DUMMY_FILE_H__ */
diff --git a/gio/gemblem.c b/gio/gemblem.c
new file mode 100644
index 0000000..4cd70d3
--- /dev/null
+++ b/gio/gemblem.c
@@ -0,0 +1,363 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2008 Clemens N. Buss <cebuzz@gmail.com>
+ *
+ * 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 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.
+ *
+ */
+
+#include <config.h>
+
+#include "gicon.h"
+#include "gemblem.h"
+#include "glibintl.h"
+#include "gioenums.h"
+#include "gioenumtypes.h"
+#include "gioerror.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gemblem
+ * @short_description: An object for emblems
+ * @include: gio/gio.h
+ * @see_also: #GIcon, #GEmblemedIcon, #GLoadableIcon, #GThemedIcon
+ *
+ * #GEmblem is an implementation of #GIcon that supports
+ * having an emblem, which is an icon with additional properties.
+ * It can than be added to a #GEmblemedIcon.
+ *
+ * Currently, only metainformation about the emblem's origin is 
+ * supported. More may be added in the future.
+ **/
+
+static void g_emblem_iface_init (GIconIface *iface);
+
+struct _GEmblem
+{
+  GObject parent_instance;
+
+  GIcon *icon;
+  GEmblemOrigin origin;
+};
+
+struct _GEmblemClass
+{
+  GObjectClass parent_class;
+};
+
+enum
+{
+  PROP_0_GEMBLEM,
+  PROP_ICON,
+  PROP_ORIGIN
+};
+
+G_DEFINE_TYPE_WITH_CODE (GEmblem, g_emblem, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (G_TYPE_ICON, g_emblem_iface_init))
+
+static void
+g_emblem_get_property (GObject    *object, 
+                       guint       prop_id, 
+                       GValue     *value, 
+                       GParamSpec *pspec)
+{
+  GEmblem *emblem = G_EMBLEM (object);
+	
+  switch (prop_id)
+    {
+      case PROP_ICON:
+        g_value_set_object (value, emblem->icon);
+
+      case PROP_ORIGIN:
+        g_value_set_enum (value, emblem->origin);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+  }   
+}
+
+static void
+g_emblem_set_property (GObject      *object,
+                       guint         prop_id,
+                       const GValue *value,
+                       GParamSpec   *pspec)
+{
+  GEmblem *emblem = G_EMBLEM (object);
+
+  switch (prop_id)
+    {
+      case PROP_ICON:
+        emblem->icon = g_value_get_object (value);
+        break;
+
+      case PROP_ORIGIN:
+        emblem->origin = g_value_get_enum (value);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
+}
+
+static void
+g_emblem_finalize (GObject *object)
+{
+  GEmblem *emblem = G_EMBLEM (object);
+
+  g_object_unref (emblem->icon);
+
+  (*G_OBJECT_CLASS (g_emblem_parent_class)->finalize) (object);
+}
+
+static void
+g_emblem_class_init (GEmblemClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_emblem_finalize;
+  gobject_class->set_property = g_emblem_set_property;
+  gobject_class->get_property = g_emblem_get_property;
+
+  g_object_class_install_property (gobject_class, 
+                                   PROP_ORIGIN,
+                                   g_param_spec_enum ("origin",
+                                                      P_("GEmblem's origin"),
+                                                      P_("Tells which origin the emblem is derived from"),
+                                                      G_TYPE_EMBLEM_ORIGIN,
+                                                      G_EMBLEM_ORIGIN_UNKNOWN,
+                                                      G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+
+  g_object_class_install_property (gobject_class,
+                                   PROP_ICON,
+                                   g_param_spec_object ("icon",
+                                                      P_("The icon of the emblem"),
+                                                      P_("The actual icon of the emblem"),
+                                                      G_TYPE_OBJECT,
+                                                      G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+
+}
+
+static void
+g_emblem_init (GEmblem *emblem)
+{
+}
+
+/**
+ * g_emblem_new:
+ * @icon: a GIcon containing the icon.
+ * 
+ * Creates a new emblem for @icon.
+ * 
+ * Returns: a new #GEmblem.
+ *
+ * Since: 2.18
+ **/
+GEmblem *
+g_emblem_new (GIcon *icon)
+{
+  GEmblem* emblem;
+
+  g_return_val_if_fail (icon != NULL, NULL);
+  g_return_val_if_fail (G_IS_ICON (icon), NULL);
+  g_return_val_if_fail (!G_IS_EMBLEM (icon), NULL);
+
+  emblem = g_object_new (G_TYPE_EMBLEM, NULL);
+  emblem->icon = g_object_ref (icon);
+  emblem->origin = G_EMBLEM_ORIGIN_UNKNOWN;
+
+  return emblem;
+}
+
+/**
+ * g_emblem_new_with_origin:
+ * @icon: a GIcon containing the icon.
+ * @origin: a GEmblemOrigin enum defining the emblem's origin
+ *
+ * Creates a new emblem for @icon.
+ * 
+ * Returns: a new #GEmblem.
+ *
+ * Since: 2.18
+ **/
+GEmblem *
+g_emblem_new_with_origin (GIcon         *icon,
+                          GEmblemOrigin  origin)
+{
+  GEmblem* emblem;
+
+  g_return_val_if_fail (icon != NULL, NULL);
+  g_return_val_if_fail (G_IS_ICON (icon), NULL);
+  g_return_val_if_fail (!G_IS_EMBLEM (icon), NULL);
+
+  emblem = g_object_new (G_TYPE_EMBLEM, NULL);
+  emblem->icon = g_object_ref (icon);
+  emblem->origin = origin;
+
+  return emblem;
+}
+
+/**
+ * g_emblem_get_icon:
+ * @emblem: a #GEmblem from which the icon should be extracted.
+ * 
+ * Gives back the icon from @emblem.
+ * 
+ * Returns: a #GIcon. The returned object belongs to the emblem
+ *    and should not be modified or freed.
+ *
+ * Since: 2.18
+ **/
+GIcon *
+g_emblem_get_icon (GEmblem *emblem)
+{
+  g_return_val_if_fail (G_IS_EMBLEM (emblem), NULL);
+
+  return emblem->icon;
+}
+
+
+/**
+ * g_emblem_get_origin:
+ * @emblem: a #GEmblem 
+ * 
+ * Gets the origin of the emblem.
+ * 
+ * Returns: the origin of the emblem
+ *
+ * Since: 2.18
+ **/
+GEmblemOrigin
+g_emblem_get_origin (GEmblem *emblem)
+{
+  g_return_val_if_fail (G_IS_EMBLEM (emblem), G_EMBLEM_ORIGIN_UNKNOWN);
+
+  return emblem->origin;
+}
+
+static guint
+g_emblem_hash (GIcon *icon)
+{
+  GEmblem *emblem = G_EMBLEM (icon);
+  guint hash;
+
+  hash  = g_icon_hash (g_emblem_get_icon (emblem));
+  hash ^= emblem->origin; 
+
+  return hash;
+}
+
+static gboolean
+g_emblem_equal (GIcon *icon1,
+                GIcon *icon2)
+{
+  GEmblem *emblem1 = G_EMBLEM (icon1);
+  GEmblem *emblem2 = G_EMBLEM (icon2);
+  
+  return emblem1->origin == emblem2->origin &&
+         g_icon_equal (emblem1->icon, emblem2->icon);
+}
+
+static gboolean
+g_emblem_to_tokens (GIcon *icon,
+		    GPtrArray *tokens,
+		    gint  *out_version)
+{
+  GEmblem *emblem = G_EMBLEM (icon);
+  char *s;
+
+  /* GEmblem are encoded as
+   *
+   * <origin> <icon>
+   */
+
+  g_return_val_if_fail (out_version != NULL, FALSE);
+
+  *out_version = 0;
+
+  s = g_icon_to_string (emblem->icon);
+  if (s == NULL)
+    return FALSE;
+
+  g_ptr_array_add (tokens, s);
+
+  s = g_strdup_printf ("%d", emblem->origin);
+  g_ptr_array_add (tokens, s);
+  
+  return TRUE;
+}
+
+static GIcon *
+g_emblem_from_tokens (gchar  **tokens,
+		      gint     num_tokens,
+		      gint     version,
+		      GError **error)
+{
+  GEmblem *emblem;
+  GIcon *icon;
+  GEmblemOrigin origin;
+
+  emblem = NULL;
+
+  if (version != 0)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Can't handle version %d of GEmblem encoding"),
+                   version);
+      return NULL;
+    }
+
+  if (num_tokens != 2)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Malformed number of tokens (%d) in GEmblem encoding"),
+                   num_tokens);
+      return NULL;
+    }
+  
+  icon = g_icon_new_for_string (tokens[0], error);
+  
+  if (icon == NULL)
+    return NULL;
+
+  origin = atoi (tokens[1]);
+  
+  emblem = g_emblem_new_with_origin (icon, origin);
+  g_object_unref (icon);
+  
+  return G_ICON (emblem);
+}
+
+static void
+g_emblem_iface_init (GIconIface *iface)
+{
+  iface->hash  = g_emblem_hash;
+  iface->equal = g_emblem_equal;
+  iface->to_tokens = g_emblem_to_tokens;
+  iface->from_tokens = g_emblem_from_tokens;
+}
+
+#define __G_EMBLEM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gemblem.h b/gio/gemblem.h
new file mode 100644
index 0000000..06816e1
--- /dev/null
+++ b/gio/gemblem.h
@@ -0,0 +1,58 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2008 Clemens N. Buss <cebuzz@gmail.com>
+ *
+ * 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 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.
+ *
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_EMBLEM_H__
+#define __G_EMBLEM_H__
+
+#include <gio/gioenums.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_EMBLEM         (g_emblem_get_type ())
+#define G_EMBLEM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_EMBLEM, GEmblem))
+#define G_EMBLEM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_EMBLEM, GEmblemClass))
+#define G_IS_EMBLEM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_EMBLEM))
+#define G_IS_EMBLEM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_EMBLEM))
+#define G_EMBLEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_EMBLEM, GEmblemClass))
+
+/**
+ * GEmblem:
+ *
+ * An object for Emblems
+ */
+typedef struct _GEmblem        GEmblem;
+typedef struct _GEmblemClass   GEmblemClass;
+
+GType          g_emblem_get_type        (void) G_GNUC_CONST;
+
+GEmblem       *g_emblem_new             (GIcon         *icon);
+GEmblem       *g_emblem_new_with_origin (GIcon         *icon,
+                                         GEmblemOrigin  origin);
+GIcon         *g_emblem_get_icon        (GEmblem       *emblem);
+GEmblemOrigin  g_emblem_get_origin      (GEmblem       *emblem);
+
+G_END_DECLS
+
+#endif /* __G_EMBLEM_H__ */
diff --git a/gio/gemblemedicon.c b/gio/gemblemedicon.c
new file mode 100644
index 0000000..abfcf0c
--- /dev/null
+++ b/gio/gemblemedicon.c
@@ -0,0 +1,355 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Matthias Clasen <mclasen@redhat.com>
+ *         Clemens N. Buss <cebuzz@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include "gemblemedicon.h"
+#include "glibintl.h"
+#include "gioerror.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gemblemedicon
+ * @short_description: Icon with emblems
+ * @include: gio/gio.h
+ * @see_also: #GIcon, #GLoadableIcon, #GThemedIcon, #GEmblem
+ *
+ * #GEmblemedIcon is an implementation of #GIcon that supports
+ * adding an emblem to an icon. Adding multiple emblems to an
+ * icon is ensured via g_emblemed_icon_add_emblem(). 
+ *
+ * Note that #GEmblemedIcon allows no control over the position
+ * of the emblems. See also #GEmblem for more information.
+ **/
+
+static void g_emblemed_icon_icon_iface_init (GIconIface *iface);
+
+struct _GEmblemedIcon
+{
+  GObject parent_instance;
+
+  GIcon *icon;
+  GList *emblems;
+};
+
+struct _GEmblemedIconClass
+{
+  GObjectClass parent_class;
+};
+
+G_DEFINE_TYPE_WITH_CODE (GEmblemedIcon, g_emblemed_icon, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (G_TYPE_ICON,
+                         g_emblemed_icon_icon_iface_init))
+
+
+static void
+g_emblemed_icon_finalize (GObject *object)
+{
+  GEmblemedIcon *emblemed;
+
+  emblemed = G_EMBLEMED_ICON (object);
+
+  g_object_unref (emblemed->icon);
+  g_list_foreach (emblemed->emblems, (GFunc) g_object_unref, NULL);
+  g_list_free (emblemed->emblems);
+
+  (*G_OBJECT_CLASS (g_emblemed_icon_parent_class)->finalize) (object);
+}
+
+static void
+g_emblemed_icon_class_init (GEmblemedIconClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = g_emblemed_icon_finalize;
+}
+
+static void
+g_emblemed_icon_init (GEmblemedIcon *emblemed)
+{
+}
+
+/**
+ * g_emblemed_icon_new:
+ * @icon: a #GIcon
+ * @emblem: a #GEmblem
+ *
+ * Creates a new emblemed icon for @icon with the emblem @emblem.
+ *
+ * Returns: a new #GIcon
+ *
+ * Since: 2.18
+ **/
+GIcon *
+g_emblemed_icon_new (GIcon   *icon,
+                     GEmblem *emblem)
+{
+  GEmblemedIcon *emblemed;
+  
+  g_return_val_if_fail (G_IS_ICON (icon), NULL);
+  g_return_val_if_fail (!G_IS_EMBLEM (icon), NULL);
+  g_return_val_if_fail (G_IS_EMBLEM (emblem), NULL);
+
+  emblemed = G_EMBLEMED_ICON (g_object_new (G_TYPE_EMBLEMED_ICON, NULL));
+  emblemed->icon = g_object_ref (icon);
+  
+  g_emblemed_icon_add_emblem (emblemed, emblem);
+
+  return G_ICON (emblemed);
+}
+
+
+/**
+ * g_emblemed_icon_get_icon:
+ * @emblemed: a #GEmblemedIcon
+ *
+ * Gets the main icon for @emblemed.
+ *
+ * Returns: a #GIcon that is owned by @emblemed
+ *
+ * Since: 2.18
+ **/
+GIcon *
+g_emblemed_icon_get_icon (GEmblemedIcon *emblemed)
+{
+  g_return_val_if_fail (G_IS_EMBLEMED_ICON (emblemed), NULL);
+
+  return emblemed->icon;
+}
+
+/**
+ * g_emblemed_icon_get_emblems:
+ * @emblemed: a #GEmblemedIcon
+ *
+ * Gets the list of emblems for the @icon.
+ *
+ * Returns: a #GList of #GEmblem <!-- -->s that is owned by @emblemed
+ *
+ * Since: 2.18
+ **/
+
+GList *
+g_emblemed_icon_get_emblems (GEmblemedIcon *emblemed)
+{
+  g_return_val_if_fail (G_IS_EMBLEMED_ICON (emblemed), NULL);
+
+  return emblemed->emblems;
+}
+
+
+/**
+ * g_emblemed_icon_add_emblem:
+ * @emblemed: a #GEmblemedIcon
+ * @emblem: a #GEmblem
+ *
+ * Adds @emblem to the #GList of #GEmblem <!-- -->s.
+ *
+ * Since: 2.18
+ **/
+void 
+g_emblemed_icon_add_emblem (GEmblemedIcon *emblemed,
+                            GEmblem       *emblem)
+{
+  g_return_if_fail (G_IS_EMBLEMED_ICON (emblemed));
+  g_return_if_fail (G_IS_EMBLEM (emblem));
+
+  g_object_ref (emblem);
+  emblemed->emblems = g_list_append (emblemed->emblems, emblem);
+}
+
+static guint
+g_emblemed_icon_hash (GIcon *icon)
+{
+  GEmblemedIcon *emblemed = G_EMBLEMED_ICON (icon);
+  GList *list;
+  guint hash = g_icon_hash (emblemed->icon);
+
+  for (list = emblemed->emblems; list != NULL; list = list->next)
+    hash ^= g_icon_hash (G_ICON (list->data));
+
+  return hash;
+}
+
+static gint
+g_emblem_comp (GEmblem *a,
+               GEmblem *b)
+{
+  guint hash_a = g_icon_hash (G_ICON (a));
+  guint hash_b = g_icon_hash (G_ICON (b));
+
+  if(hash_a < hash_b)
+    return -1;
+
+  if(hash_a == hash_b)
+    return 0;
+
+  return 1;
+}
+
+static gboolean
+g_emblemed_icon_equal (GIcon *icon1,
+                       GIcon *icon2)
+{
+  GEmblemedIcon *emblemed1 = G_EMBLEMED_ICON (icon1);
+  GEmblemedIcon *emblemed2 = G_EMBLEMED_ICON (icon2);
+  GList *list1, *list2;
+
+  if (!g_icon_equal (emblemed1->icon, emblemed2->icon))
+    return FALSE;
+
+  list1 = emblemed1->emblems;
+  list2 = emblemed2->emblems;
+
+  list1 = g_list_sort (list1, (GCompareFunc) g_emblem_comp);
+  list2 = g_list_sort (list2, (GCompareFunc) g_emblem_comp);
+
+  while (list1 && list2)
+  {
+    if (!g_icon_equal (G_ICON (list1->data), G_ICON (list2->data)))
+        return FALSE;
+    
+    list1 = list1->next;
+    list2 = list2->next;
+  }
+  
+  return list1 == NULL && list2 == NULL;
+}
+
+static gboolean
+g_emblemed_icon_to_tokens (GIcon *icon,
+                           GPtrArray *tokens,
+                           gint  *out_version)
+{
+  GEmblemedIcon *emblemed_icon = G_EMBLEMED_ICON (icon);
+  GList *l;
+  char *s;
+
+  /* GEmblemedIcons are encoded as
+   *
+   *   <encoded_icon> [<encoded_emblem_icon>]*
+   */
+
+  g_return_val_if_fail (out_version != NULL, FALSE);
+
+  *out_version = 0;
+
+  s = g_icon_to_string (emblemed_icon->icon);
+  if (s == NULL)
+    return FALSE;
+
+  g_ptr_array_add (tokens, s);
+
+  for (l = emblemed_icon->emblems; l != NULL; l = l->next)
+    {
+      GIcon *emblem_icon = G_ICON (l->data);
+
+      s = g_icon_to_string (emblem_icon);
+      if (s == NULL)
+        return FALSE;
+      
+      g_ptr_array_add (tokens, s);
+    }
+
+  return TRUE;
+}
+
+static GIcon *
+g_emblemed_icon_from_tokens (gchar  **tokens,
+                             gint     num_tokens,
+                             gint     version,
+                             GError **error)
+{
+  GEmblemedIcon *emblemed_icon;
+  int n;
+
+  emblemed_icon = NULL;
+
+  if (version != 0)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Can't handle version %d of GEmblemedIcon encoding"),
+                   version);
+      goto fail;
+    }
+
+  if (num_tokens < 1)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Malformed number of tokens (%d) in GEmblemedIcon encoding"),
+                   num_tokens);
+      goto fail;
+    }
+
+  emblemed_icon = g_object_new (G_TYPE_EMBLEMED_ICON, NULL);
+  emblemed_icon->icon = g_icon_new_for_string (tokens[0], error);
+  if (emblemed_icon->icon == NULL)
+    goto fail;
+
+  for (n = 1; n < num_tokens; n++)
+    {
+      GIcon *emblem;
+
+      emblem = g_icon_new_for_string (tokens[n], error);
+      if (emblem == NULL)
+        goto fail;
+
+      if (!G_IS_EMBLEM (emblem))
+        {
+          g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_INVALID_ARGUMENT,
+                               _("Expected a GEmblem for GEmblemedIcon"));
+          g_object_unref (emblem);
+          goto fail;
+        }
+
+      emblemed_icon->emblems = g_list_append (emblemed_icon->emblems, emblem);
+    }
+
+  return G_ICON (emblemed_icon);
+
+ fail:
+  if (emblemed_icon != NULL)
+    g_object_unref (emblemed_icon);
+  return NULL;
+}
+
+static void
+g_emblemed_icon_icon_iface_init (GIconIface *iface)
+{
+  iface->hash = g_emblemed_icon_hash;
+  iface->equal = g_emblemed_icon_equal;
+  iface->to_tokens = g_emblemed_icon_to_tokens;
+  iface->from_tokens = g_emblemed_icon_from_tokens;
+}
+
+#define __G_EMBLEMED_ICON_C__
+#include "gioaliasdef.c"
diff --git a/gio/gemblemedicon.h b/gio/gemblemedicon.h
new file mode 100644
index 0000000..7a5dc4d
--- /dev/null
+++ b/gio/gemblemedicon.h
@@ -0,0 +1,62 @@
+/* Gio - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Matthias Clasen <mclasen@redhat.com>
+ *         Clemens N. Buss <cebuzz@gmail.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_EMBLEMED_ICON_H__
+#define __G_EMBLEMED_ICON_H__
+
+#include <gio/gicon.h>
+#include <gio/gemblem.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_EMBLEMED_ICON         (g_emblemed_icon_get_type ())
+#define G_EMBLEMED_ICON(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_EMBLEMED_ICON, GEmblemedIcon))
+#define G_EMBLEMED_ICON_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_EMBLEMED_ICON, GEmblemedIconClass))
+#define G_IS_EMBLEMED_ICON(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_EMBLEMED_ICON))
+#define G_IS_EMBLEMED_ICON_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_EMBLEMED_ICON))
+#define G_EMBLEMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_EMBLEMED_ICON, GEmblemedIconClass))
+
+/**
+ * GEmblemedIcon:
+ *
+ * An implementation of #GIcon for icons with emblems.
+ **/
+typedef struct _GEmblemedIcon        GEmblemedIcon;
+typedef struct _GEmblemedIconClass   GEmblemedIconClass;
+
+GType  g_emblemed_icon_get_type    (void) G_GNUC_CONST;
+
+GIcon *g_emblemed_icon_new         (GIcon         *icon,
+                                    GEmblem       *emblem);
+GIcon *g_emblemed_icon_get_icon    (GEmblemedIcon *emblemed);
+GList *g_emblemed_icon_get_emblems (GEmblemedIcon *emblemed);
+void   g_emblemed_icon_add_emblem  (GEmblemedIcon *emblemed,
+                                    GEmblem       *emblem);
+
+G_END_DECLS
+
+#endif /* __G_EMBLEMED_ICON_H__ */
diff --git a/gio/gfile.c b/gio/gfile.c
new file mode 100644
index 0000000..5801900
--- /dev/null
+++ b/gio/gfile.c
@@ -0,0 +1,5909 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <string.h>
+#include <sys/types.h>
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+#include "gfile.h"
+#include "gvfs.h"
+#include "gioscheduler.h"
+#include "glocalfile.h"
+#include "gsimpleasyncresult.h"
+#include "gfileattribute-priv.h"
+#include "gpollfilemonitor.h"
+#include "gappinfo.h"
+#include "gfileinputstream.h"
+#include "gfileoutputstream.h"
+#include "gcancellable.h"
+#include "gasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfile
+ * @short_description: File and Directory Handling
+ * @include: gio/gio.h
+ * @see_also: #GFileInfo, #GFileEnumerator
+ * 
+ * #GFile is a high level abstraction for manipulating files on a 
+ * virtual file system. #GFile<!-- -->s are lightweight, immutable 
+ * objects that do no I/O upon creation. It is necessary to understand that
+ * #GFile objects do not represent files, merely an identifier for a file. All
+ * file content I/O is implemented as streaming operations (see #GInputStream and 
+ * #GOutputStream).
+ *
+ * To construct a #GFile, you can use: 
+ * g_file_new_for_path() if you have a path.
+ * g_file_new_for_uri() if you have a URI.
+ * g_file_new_for_commandline_arg() for a command line argument.
+ * g_file_parse_name() from a utf8 string gotten from g_file_get_parse_name().
+ * 
+ * One way to think of a #GFile is as an abstraction of a pathname. For normal
+ * files the system pathname is what is stored internally, but as #GFile<!-- -->s
+ * are extensible it could also be something else that corresponds to a pathname
+ * in a userspace implementation of a filesystem.
+ *
+ * #GFile<!-- -->s make up hierarchies of directories and files that correspond to the
+ * files on a filesystem. You can move through the file system with #GFile using
+ * g_file_get_parent() to get an identifier for the parent directory, g_file_get_child()
+ * to get a child within a directory, g_file_resolve_relative_path() to resolve a relative
+ * path between two #GFile<!-- -->s. There can be multiple hierarchies, so you may not
+ * end up at the same root if you repeatedly call g_file_get_parent() on two different
+ * files.
+ *
+ * All #GFile<!-- -->s have a basename (get with g_file_get_basename()). These names
+ * are byte strings that are used to identify the file on the filesystem (relative to
+ * its parent directory) and there is no guarantees that they have any particular charset
+ * encoding or even make any sense at all. If you want to use filenames in a user
+ * interface you should use the display name that you can get by requesting the
+ * %G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME attribute with g_file_query_info().
+ * This is guaranteed to be in utf8 and can be used in a user interface. But always
+ * store the real basename or the #GFile to use to actually access the file, because
+ * there is no way to go from a display name to the actual name.
+ *
+ * Using #GFile as an identifier has the same weaknesses as using a path in that
+ * there may be multiple aliases for the same file. For instance, hard or
+ * soft links may cause two different #GFile<!-- -->s to refer to the same file.
+ * Other possible causes for aliases are: case insensitive filesystems, short
+ * and long names on Fat/NTFS, or bind mounts in Linux. If you want to check if
+ * two #GFile<!-- -->s point to the same file you can query for the
+ * %G_FILE_ATTRIBUTE_ID_FILE attribute. Note that #GFile does some trivial
+ * canonicalization of pathnames passed in, so that trivial differences in the
+ * path string used at creation (duplicated slashes, slash at end of path, "."
+ * or ".." path segments, etc) does not create different #GFile<!-- -->s.
+ * 
+ * Many #GFile operations have both synchronous and asynchronous versions 
+ * to suit your application. Asynchronous versions of synchronous functions 
+ * simply have _async() appended to their function names. The asynchronous 
+ * I/O functions call a #GAsyncReadyCallback which is then used to finalize 
+ * the operation, producing a GAsyncResult which is then passed to the 
+ * function's matching _finish() operation. 
+ *
+ * Some #GFile operations do not have synchronous analogs, as they may
+ * take a very long time to finish, and blocking may leave an application
+ * unusable. Notable cases include:
+ * g_file_mount_mountable() to mount a mountable file.
+ * g_file_unmount_mountable() to unmount a mountable file.
+ * g_file_eject_mountable() to eject a mountable file.
+ * 
+ * <para id="gfile-etag"><indexterm><primary>entity tag</primary></indexterm>
+ * One notable feature of #GFile<!-- -->s are entity tags, or "etags" for 
+ * short. Entity tags are somewhat like a more abstract version of the 
+ * traditional mtime, and can be used to quickly determine if the file has
+ * been modified from the version on the file system. See the HTTP 1.1 
+ * <ulink url="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">specification</ulink>
+ * for HTTP Etag headers, which are a very similar concept.
+ * </para>
+ **/
+
+static void g_file_base_init (gpointer g_class);
+static void g_file_class_init (gpointer g_class,
+			       gpointer class_data);
+
+static void               g_file_real_query_info_async            (GFile                  *file,
+								   const char             *attributes,
+								   GFileQueryInfoFlags     flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileInfo *        g_file_real_query_info_finish           (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_query_filesystem_info_async (GFile                  *file,
+								   const char             *attributes,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileInfo *        g_file_real_query_filesystem_info_finish (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_enumerate_children_async    (GFile                  *file,
+								   const char             *attributes,
+								   GFileQueryInfoFlags     flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileEnumerator *  g_file_real_enumerate_children_finish   (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_read_async                  (GFile                  *file,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileInputStream * g_file_real_read_finish                 (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_append_to_async             (GFile                  *file,
+								   GFileCreateFlags        flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileOutputStream *g_file_real_append_to_finish            (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_create_async                (GFile                  *file,
+								   GFileCreateFlags        flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileOutputStream *g_file_real_create_finish               (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_replace_async               (GFile                  *file,
+								   const char             *etag,
+								   gboolean                make_backup,
+								   GFileCreateFlags        flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFileOutputStream *g_file_real_replace_finish              (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static gboolean           g_file_real_set_attributes_from_info    (GFile                  *file,
+								   GFileInfo              *info,
+								   GFileQueryInfoFlags     flags,
+								   GCancellable           *cancellable,
+								   GError                **error);
+static void               g_file_real_set_display_name_async      (GFile                  *file,
+								   const char             *display_name,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GFile *            g_file_real_set_display_name_finish     (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_set_attributes_async        (GFile                  *file,
+								   GFileInfo              *info,
+								   GFileQueryInfoFlags     flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static gboolean           g_file_real_set_attributes_finish       (GFile                  *file,
+								   GAsyncResult           *res,
+								   GFileInfo             **info,
+								   GError                **error);
+static void               g_file_real_find_enclosing_mount_async  (GFile                  *file,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static GMount *           g_file_real_find_enclosing_mount_finish (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+static void               g_file_real_copy_async                  (GFile                  *source,
+								   GFile                  *destination,
+								   GFileCopyFlags          flags,
+								   int                     io_priority,
+								   GCancellable           *cancellable,
+								   GFileProgressCallback   progress_callback,
+								   gpointer                progress_callback_data,
+								   GAsyncReadyCallback     callback,
+								   gpointer                user_data);
+static gboolean           g_file_real_copy_finish                 (GFile                  *file,
+								   GAsyncResult           *res,
+								   GError                **error);
+
+GType
+g_file_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo file_info =
+      {
+        sizeof (GFileIface), /* class_size */
+	g_file_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_file_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GFile"),
+				&file_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_file_class_init (gpointer g_class,
+		   gpointer class_data)
+{
+  GFileIface *iface = g_class;
+
+  iface->enumerate_children_async = g_file_real_enumerate_children_async;
+  iface->enumerate_children_finish = g_file_real_enumerate_children_finish;
+  iface->set_display_name_async = g_file_real_set_display_name_async;
+  iface->set_display_name_finish = g_file_real_set_display_name_finish;
+  iface->query_info_async = g_file_real_query_info_async;
+  iface->query_info_finish = g_file_real_query_info_finish;
+  iface->query_filesystem_info_async = g_file_real_query_filesystem_info_async;
+  iface->query_filesystem_info_finish = g_file_real_query_filesystem_info_finish;
+  iface->set_attributes_async = g_file_real_set_attributes_async;
+  iface->set_attributes_finish = g_file_real_set_attributes_finish;
+  iface->read_async = g_file_real_read_async;
+  iface->read_finish = g_file_real_read_finish;
+  iface->append_to_async = g_file_real_append_to_async;
+  iface->append_to_finish = g_file_real_append_to_finish;
+  iface->create_async = g_file_real_create_async;
+  iface->create_finish = g_file_real_create_finish;
+  iface->replace_async = g_file_real_replace_async;
+  iface->replace_finish = g_file_real_replace_finish;
+  iface->find_enclosing_mount_async = g_file_real_find_enclosing_mount_async;
+  iface->find_enclosing_mount_finish = g_file_real_find_enclosing_mount_finish;
+  iface->set_attributes_from_info = g_file_real_set_attributes_from_info;
+  iface->copy_async = g_file_real_copy_async;
+  iface->copy_finish = g_file_real_copy_finish;
+}
+
+static void
+g_file_base_init (gpointer g_class)
+{
+}
+
+
+/**
+ * g_file_is_native:
+ * @file: input #GFile.
+ *
+ * Checks to see if a file is native to the platform.
+ *
+ * A native file s one expressed in the platform-native filename format,
+ * e.g. "C:\Windows" or "/usr/bin/". This does not mean the file is local,
+ * as it might be on a locally mounted remote filesystem.
+ *
+ * On some systems non-native files may be available using
+ * the native filesystem via a userspace filesystem (FUSE), in
+ * these cases this call will return %FALSE, but g_file_get_path()
+ * will still return a native path.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: %TRUE if file is native. 
+ **/
+gboolean
+g_file_is_native (GFile *file)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->is_native) (file);
+}
+
+
+/**
+ * g_file_has_uri_scheme: 
+ * @file: input #GFile.
+ * @uri_scheme: a string containing a URI scheme.
+ *
+ * Checks to see if a #GFile has a given URI scheme.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: %TRUE if #GFile's backend supports the
+ *     given URI scheme, %FALSE if URI scheme is %NULL,
+ *     not supported, or #GFile is invalid.
+ **/
+gboolean
+g_file_has_uri_scheme (GFile      *file,
+		       const char *uri_scheme)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (uri_scheme != NULL, FALSE);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->has_uri_scheme) (file, uri_scheme);
+}
+
+
+/**
+ * g_file_get_uri_scheme:
+ * @file: input #GFile.
+ *
+ * Gets the URI scheme for a #GFile.
+ * RFC 3986 decodes the scheme as:
+ * <programlisting>
+ * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 
+ * </programlisting>
+ * Common schemes include "file", "http", "ftp", etc. 
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: a string containing the URI scheme for the given 
+ *     #GFile. The returned string should be freed with g_free() 
+ *     when no longer needed.
+ **/
+char *
+g_file_get_uri_scheme (GFile *file)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_uri_scheme) (file);
+}
+
+
+/**
+ * g_file_get_basename:
+ * @file: input #GFile.
+ *
+ * Gets the base name (the last component of the path) for a given #GFile.
+ *
+ * If called for the top level of a system (such as the filesystem root
+ * or a uri like sftp://host/) it will return a single directory separator
+ * (and on Windows, possibly a drive letter).
+ *
+ * The base name is a byte string (*not* UTF-8). It has no defined encoding
+ * or rules other than it may not contain zero bytes.  If you want to use
+ * filenames in a user interface you should use the display name that you
+ * can get by requesting the %G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME
+ * attribute with g_file_query_info().
+ * 
+ * This call does no blocking i/o.
+ * 
+ * Returns: string containing the #GFile's base name, or %NULL 
+ *     if given #GFile is invalid. The returned string should be 
+ *     freed with g_free() when no longer needed.
+ **/
+char *
+g_file_get_basename (GFile *file)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_basename) (file);
+}
+
+/**
+ * g_file_get_path:
+ * @file: input #GFile.
+ *
+ * Gets the local pathname for #GFile, if one exists. 
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: string containing the #GFile's path, or %NULL if 
+ *     no such path exists. The returned string should be 
+ *     freed with g_free() when no longer needed.
+ **/
+char *
+g_file_get_path (GFile *file)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_path) (file);
+}
+
+/**
+ * g_file_get_uri:
+ * @file: input #GFile.
+ *
+ * Gets the URI for the @file.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: a string containing the #GFile's URI.
+ *     The returned string should be freed with g_free() when no longer needed.
+ **/
+char *
+g_file_get_uri (GFile *file)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_uri) (file);
+}
+
+/**
+ * g_file_get_parse_name:
+ * @file: input #GFile.
+ *
+ * Gets the parse name of the @file.
+ * A parse name is a UTF-8 string that describes the
+ * file such that one can get the #GFile back using
+ * g_file_parse_name().
+ *
+ * This is generally used to show the #GFile as a nice
+ * full-pathname kind of string in a user interface,
+ * like in a location entry.
+ *
+ * For local files with names that can safely be converted
+ * to UTF8 the pathname is used, otherwise the IRI is used
+ * (a form of URI that allows UTF8 characters unescaped).
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: a string containing the #GFile's parse name. The returned 
+ *     string should be freed with g_free() when no longer needed.
+ **/
+char *
+g_file_get_parse_name (GFile *file)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_parse_name) (file);
+}
+
+/**
+ * g_file_dup:
+ * @file: input #GFile.
+ *
+ * Duplicates a #GFile handle. This operation does not duplicate 
+ * the actual file or directory represented by the #GFile; see 
+ * g_file_copy() if attempting to copy a file. 
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: a new #GFile that is a duplicate of the given #GFile. 
+ **/
+GFile *
+g_file_dup (GFile *file)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->dup) (file);
+}
+
+/**
+ * g_file_hash:
+ * @file: #gconstpointer to a #GFile.
+ *
+ * Creates a hash value for a #GFile.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: 0 if @file is not a valid #GFile, otherwise an 
+ *     integer that can be used as hash value for the #GFile. 
+ *     This function is intended for easily hashing a #GFile to 
+ *     add to a #GHashTable or similar data structure.
+ **/
+guint
+g_file_hash (gconstpointer file)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), 0);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->hash) ((GFile *)file);
+}
+
+/**
+ * g_file_equal:
+ * @file1: the first #GFile.
+ * @file2: the second #GFile.
+ *
+ * Checks equality of two given #GFile<!-- -->s. Note that two
+ * #GFile<!-- -->s that differ can still refer to the same
+ * file on the filesystem due to various forms of filename
+ * aliasing.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: %TRUE if @file1 and @file2 are equal.
+ *     %FALSE if either is not a #GFile.
+ **/
+gboolean
+g_file_equal (GFile *file1,
+	      GFile *file2)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file1), FALSE);
+  g_return_val_if_fail (G_IS_FILE (file2), FALSE);
+  
+  if (G_TYPE_FROM_INSTANCE (file1) != G_TYPE_FROM_INSTANCE (file2))
+    return FALSE;
+
+  iface = G_FILE_GET_IFACE (file1);
+  
+  return (* iface->equal) (file1, file2);
+}
+
+
+/**
+ * g_file_get_parent:
+ * @file: input #GFile.
+ *
+ * Gets the parent directory for the @file. 
+ * If the @file represents the root directory of the 
+ * file system, then %NULL will be returned.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: a #GFile structure to the parent of the given
+ *     #GFile or %NULL if there is no parent. 
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_get_parent (GFile *file)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_parent) (file);
+}
+
+/**
+ * g_file_get_child:
+ * @file: input #GFile.
+ * @name: string containing the child's basename.
+ *
+ * Gets a child of @file with basename equal to @name.
+ *
+ * Note that the file with that specific name might not exist, but
+ * you can still have a #GFile that points to it. You can use this
+ * for instance to create that file.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: a #GFile to a child specified by @name.
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_get_child (GFile      *file,
+		  const char *name)
+{
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  return g_file_resolve_relative_path (file, name);
+}
+
+/**
+ * g_file_get_child_for_display_name:
+ * @file: input #GFile.
+ * @display_name: string to a possible child.
+ * @error: #GError.
+ *
+ * Gets the child of @file for a given @display_name (i.e. a UTF8
+ * version of the name). If this function fails, it returns %NULL and @error will be 
+ * set. This is very useful when constructing a GFile for a new file
+ * and the user entered the filename in the user interface, for instance
+ * when you select a directory and type a filename in the file selector.
+ * 
+ * This call does no blocking i/o.
+ * 
+ * Returns: a #GFile to the specified child, or 
+ *     %NULL if the display name couldn't be converted.  
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_get_child_for_display_name (GFile      *file,
+				   const char *display_name,
+				   GError **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (display_name != NULL, NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->get_child_for_display_name) (file, display_name, error);
+}
+
+/**
+ * g_file_has_prefix:
+ * @file: input #GFile.
+ * @prefix: input #GFile.
+ * 
+ * Checks whether @file has the prefix specified by @prefix. In other word, 
+ * if the names of inital elements of @file<!-- -->s pathname match @prefix.
+ * Only full pathname elements are matched, so a path like /foo is not
+ * considered a prefix of /foobar, only of /foo/bar.
+ * 
+ * This call does no i/o, as it works purely on names. As such it can 
+ * sometimes return %FALSE even if @file is inside a @prefix (from a 
+ * filesystem point of view), because the prefix of @file is an alias 
+ * of @prefix.
+ *
+ * Returns:  %TRUE if the @files's parent, grandparent, etc is @prefix. 
+ *     %FALSE otherwise.
+ **/
+gboolean
+g_file_has_prefix (GFile *file,
+		   GFile *prefix)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_FILE (prefix), FALSE);
+
+  if (G_TYPE_FROM_INSTANCE (file) != G_TYPE_FROM_INSTANCE (prefix))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  /* The vtable function differs in arg order since we're
+     using the old contains_file call */
+  return (* iface->prefix_matches) (prefix, file);
+}
+
+/**
+ * g_file_get_relative_path:
+ * @parent: input #GFile.
+ * @descendant: input #GFile.
+ *
+ * Gets the path for @descendant relative to @parent. 
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: string with the relative path from @descendant 
+ *     to @parent, or %NULL if @descendant doesn't have @parent as prefix. 
+ *     The returned string should be freed with g_free() when no longer needed.
+ **/
+char *
+g_file_get_relative_path (GFile *parent,
+			  GFile *descendant)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (parent), NULL);
+  g_return_val_if_fail (G_IS_FILE (descendant), NULL);
+
+  if (G_TYPE_FROM_INSTANCE (parent) != G_TYPE_FROM_INSTANCE (descendant))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (parent);
+
+  return (* iface->get_relative_path) (parent, descendant);
+}
+
+/**
+ * g_file_resolve_relative_path:
+ * @file: input #GFile.
+ * @relative_path: a given relative path string.
+ *
+ * Resolves a relative path for @file to an absolute path.
+ *
+ * This call does no blocking i/o.
+ * 
+ * Returns: #GFile to the resolved path. %NULL if @relative_path 
+ *     is %NULL or if @file is invalid.
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_resolve_relative_path (GFile      *file,
+			      const char *relative_path)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (relative_path != NULL, NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->resolve_relative_path) (file, relative_path);
+}
+
+/**
+ * g_file_enumerate_children:
+ * @file: input #GFile.
+ * @attributes: an attribute query string.
+ * @flags: a set of #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: #GError for error reporting.
+ *
+ * Gets the requested information about the files in a directory. The result
+ * is a #GFileEnumerator object that will give out #GFileInfo objects for
+ * all the files in the directory.
+ *
+ * The @attribute value is a string that specifies the file attributes that
+ * should be gathered. It is not an error if it's not possible to read a particular
+ * requested attribute from a file - it just won't be set. @attribute should
+ * be a comma-separated list of attribute or attribute wildcards. The wildcard "*"
+ * means all attributes, and a wildcard like "standard::*" means all attributes in the standard
+ * namespace. An example attribute query be "standard::*,owner::user".
+ * The standard attributes are available as defines, like #G_FILE_ATTRIBUTE_STANDARD_NAME.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * If the file does not exist, the G_IO_ERROR_NOT_FOUND error will be returned.
+ * If the file is not a directory, the G_FILE_ERROR_NOTDIR error will be returned.
+ * Other errors are possible too.
+ *
+ * Returns: A #GFileEnumerator if successful, %NULL on error. 
+ *     Free the returned object with g_object_unref().
+ **/
+GFileEnumerator *
+g_file_enumerate_children (GFile                *file,
+			   const char           *attributes,
+			   GFileQueryInfoFlags   flags,
+			   GCancellable         *cancellable,
+			   GError              **error)
+			   
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->enumerate_children == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+
+  return (* iface->enumerate_children) (file, attributes, flags,
+					cancellable, error);
+}
+
+/**
+ * g_file_enumerate_children_async:
+ * @file: input #GFile.
+ * @attributes: an attribute query string.
+ * @flags: a set of #GFileQueryInfoFlags.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously gets the requested information about the files in a directory. The result
+ * is a #GFileEnumerator object that will give out #GFileInfo objects for
+ * all the files in the directory.
+ *
+ * For more details, see g_file_enumerate_children() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_enumerate_children_finish() to get the result of the operation.
+ **/
+void
+g_file_enumerate_children_async (GFile               *file,
+				 const char          *attributes,
+				 GFileQueryInfoFlags  flags,
+				 int                  io_priority,
+				 GCancellable        *cancellable,
+				 GAsyncReadyCallback  callback,
+				 gpointer             user_data)
+{
+  GFileIface *iface;
+
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->enumerate_children_async) (file,
+				       attributes,
+				       flags,
+				       io_priority,
+				       cancellable,
+				       callback,
+				       user_data);
+}
+
+/**
+ * g_file_enumerate_children_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult.
+ * @error: a #GError.
+ * 
+ * Finishes an async enumerate children operation.
+ * See g_file_enumerate_children_async().
+ *
+ * Returns: a #GFileEnumerator or %NULL if an error occurred.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileEnumerator *
+g_file_enumerate_children_finish (GFile         *file,
+				  GAsyncResult  *res,
+				  GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->enumerate_children_finish) (file, res, error);
+}
+
+/**
+ * g_file_query_exists:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ *
+ * Utility function to check if a particular file exists. This is
+ * implemented using g_file_query_info() and as such does blocking I/O.
+ *
+ * Note that in many cases it is racy to first check for file existence
+ * and then execute something based on the outcome of that, because the
+ * file might have been created or removed in between the operations. The
+ * general approach to handling that is to not check, but just do the
+ * operation and handle the errors as they come.
+ *
+ * As an example of race-free checking, take the case of reading a file, and
+ * if it doesn't exist, creating it. There are two racy versions: read it, and
+ * on error create it; and: check if it exists, if not create it. These
+ * can both result in two processes creating the file (with perhaps a partially
+ * written file as the result). The correct approach is to always try to create
+ * the file with g_file_create() which will either atomically create the file
+ * or fail with a G_IO_ERROR_EXISTS error.
+ *
+ * However, in many cases an existence check is useful in a user
+ * interface, for instance to make a menu item sensitive/insensitive, so that
+ * you don't have to fool users that something is possible and then just show
+ * and error dialog. If you do this, you should make sure to also handle the
+ * errors that can happen due to races when you execute the operation.
+ * 
+ * Returns: %TRUE if the file exists (and can be detected without error), %FALSE otherwise (or if cancelled).
+ */
+gboolean
+g_file_query_exists (GFile *file,
+		     GCancellable *cancellable)
+{
+  GFileInfo *info;
+  
+  g_return_val_if_fail (G_IS_FILE(file), FALSE);
+  
+  info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
+			    G_FILE_QUERY_INFO_NONE, cancellable, NULL);
+  if (info != NULL)
+    {
+      g_object_unref (info);
+      return TRUE;
+    }
+  
+  return FALSE;
+}
+
+/**
+ * g_file_query_file_type:
+ * @file: input #GFile.
+ * @flags: a set of #GFileQueryInfoFlags passed to g_file_query_info().
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ *
+ * Utility function to inspect the #GFileType of a file. This is
+ * implemented using g_file_query_info() and as such does blocking I/O.
+ *
+ * The primary use case of this method is to check if a file is a regular file,
+ * directory, or symlink.
+ * 
+ * Returns: The #GFileType of the file and #G_FILE_TYPE_UNKNOWN if the file
+ *          does not exist
+ *
+ * Since: 2.18
+ */
+GFileType
+g_file_query_file_type (GFile *file,
+                        GFileQueryInfoFlags   flags,
+		 	GCancellable *cancellable)
+{
+  GFileInfo *info;
+  GFileType file_type;
+  
+  g_return_val_if_fail (G_IS_FILE(file), G_FILE_TYPE_UNKNOWN);
+  info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE, flags,
+			    cancellable, NULL);
+  if (info != NULL)
+    {
+      file_type = g_file_info_get_file_type (info);
+      g_object_unref (info);
+    }
+  else
+    file_type = G_FILE_TYPE_UNKNOWN;
+  
+  return file_type;
+}
+
+/**
+ * g_file_query_info:
+ * @file: input #GFile.
+ * @attributes: an attribute query string.
+ * @flags: a set of #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError.
+ *
+ * Gets the requested information about specified @file. The result
+ * is a #GFileInfo object that contains key-value attributes (such as 
+ * the type or size of the file).
+ *
+ * The @attribute value is a string that specifies the file attributes that
+ * should be gathered. It is not an error if it's not possible to read a particular
+ * requested attribute from a file - it just won't be set. @attribute should
+ * be a comma-separated list of attribute or attribute wildcards. The wildcard "*"
+ * means all attributes, and a wildcard like "standard::*" means all attributes in the standard
+ * namespace. An example attribute query be "standard::*,owner::user".
+ * The standard attributes are available as defines, like #G_FILE_ATTRIBUTE_STANDARD_NAME.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *
+ * For symlinks, normally the information about the target of the
+ * symlink is returned, rather than information about the symlink itself.
+ * However if you pass #G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS in @flags the
+ * information about the symlink itself will be returned. Also, for symlinks
+ * that point to non-existing files the information about the symlink itself
+ * will be returned.
+ *
+ * If the file does not exist, the G_IO_ERROR_NOT_FOUND error will be returned.
+ * Other errors are possible too, and depend on what kind of filesystem the file is on.
+ *
+ * Returns: a #GFileInfo for the given @file, or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileInfo *
+g_file_query_info (GFile                *file,
+		   const char           *attributes,
+		   GFileQueryInfoFlags   flags,
+		   GCancellable         *cancellable,
+		   GError              **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->query_info == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+  
+  return (* iface->query_info) (file, attributes, flags, cancellable, error);
+}
+
+/**
+ * g_file_query_info_async:
+ * @file: input #GFile.
+ * @attributes: an attribute query string.
+ * @flags: a set of #GFileQueryInfoFlags.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Asynchronously gets the requested information about specified @file. The result
+ * is a #GFileInfo object that contains key-value attributes (such as type or size
+ * for the file).
+ * 
+ * For more details, see g_file_query_info() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_query_info_finish() to get the result of the operation.
+ **/
+void
+g_file_query_info_async (GFile               *file,
+			 const char          *attributes,
+			 GFileQueryInfoFlags  flags,
+			 int                  io_priority,
+			 GCancellable        *cancellable,
+			 GAsyncReadyCallback  callback,
+			 gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->query_info_async) (file,
+			       attributes,
+			       flags,
+			       io_priority,
+			       cancellable,
+			       callback,
+			       user_data);
+}
+
+/**
+ * g_file_query_info_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError. 
+ * 
+ * Finishes an asynchronous file info query. 
+ * See g_file_query_info_async().
+ * 
+ * Returns: #GFileInfo for given @file or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileInfo *
+g_file_query_info_finish (GFile         *file,
+			  GAsyncResult  *res,
+			  GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->query_info_finish) (file, res, error);
+}
+
+/**
+ * g_file_query_filesystem_info:
+ * @file: input #GFile.
+ * @attributes:  an attribute query string.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError. 
+ * 
+ * Similar to g_file_query_info(), but obtains information
+ * about the filesystem the @file is on, rather than the file itself.
+ * For instance the amount of space available and the type of
+ * the filesystem.
+ *
+ * The @attribute value is a string that specifies the file attributes that
+ * should be gathered. It is not an error if it's not possible to read a particular
+ * requested attribute from a file - it just won't be set. @attribute should
+ * be a comma-separated list of attribute or attribute wildcards. The wildcard "*"
+ * means all attributes, and a wildcard like "fs:*" means all attributes in the fs
+ * namespace. The standard namespace for filesystem attributes is "fs".
+ * Common attributes of interest are #G_FILE_ATTRIBUTE_FILESYSTEM_SIZE
+ * (the total size of the filesystem in bytes), #G_FILE_ATTRIBUTE_FILESYSTEM_FREE (number of
+ * bytes available), and #G_FILE_ATTRIBUTE_FILESYSTEM_TYPE (type of the filesystem).
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *
+ * If the file does not exist, the G_IO_ERROR_NOT_FOUND error will be returned.
+ * Other errors are possible too, and depend on what kind of filesystem the file is on.
+ *
+ * Returns: a #GFileInfo or %NULL if there was an error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileInfo *
+g_file_query_filesystem_info (GFile         *file,
+			      const char    *attributes,
+			      GCancellable  *cancellable,
+			      GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->query_filesystem_info == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+  
+  return (* iface->query_filesystem_info) (file, attributes, cancellable, error);
+}
+
+/**
+ * g_file_query_filesystem_info_async:
+ * @file: input #GFile.
+ * @attributes: an attribute query string.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Asynchronously gets the requested information about the filesystem
+ * that the specified @file is on. The result is a #GFileInfo object
+ * that contains key-value attributes (such as type or size for the
+ * file).
+ * 
+ * For more details, see g_file_query_filesystem_info() which is the
+ * synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can
+ * then call g_file_query_info_finish() to get the result of the
+ * operation.
+ **/
+void
+g_file_query_filesystem_info_async (GFile               *file,
+                                    const char          *attributes,
+                                    int                  io_priority,
+                                    GCancellable        *cancellable,
+                                    GAsyncReadyCallback  callback,
+                                    gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->query_filesystem_info_async) (file,
+                                          attributes,
+                                          io_priority,
+                                          cancellable,
+                                          callback,
+                                          user_data);
+}
+
+/**
+ * g_file_query_filesystem_info_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError. 
+ * 
+ * Finishes an asynchronous filesystem info query.  See
+ * g_file_query_filesystem_info_async().
+ * 
+ * Returns: #GFileInfo for given @file or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileInfo *
+g_file_query_filesystem_info_finish (GFile         *file,
+                                     GAsyncResult  *res,
+                                     GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->query_filesystem_info_finish) (file, res, error);
+}
+
+/**
+ * g_file_find_enclosing_mount:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError. 
+ *
+ * Gets a #GMount for the #GFile. 
+ *
+ * If the #GFileIface for @file does not have a mount (e.g. possibly a 
+ * remote share), @error will be set to %G_IO_ERROR_NOT_FOUND and %NULL
+ * will be returned.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GMount where the @file is located or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GMount *
+g_file_find_enclosing_mount (GFile         *file,
+			     GCancellable  *cancellable,
+			     GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  iface = G_FILE_GET_IFACE (file);
+  if (iface->find_enclosing_mount == NULL)
+    {
+
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+			/* Translators: This is an error message when trying to find the
+			 * enclosing (user visible) mount of a file, but none exists. */
+		   _("Containing mount does not exist"));
+      return NULL;
+    }
+
+  return (* iface->find_enclosing_mount) (file, cancellable, error);
+}
+
+/**
+ * g_file_find_enclosing_mount_async:
+ * @file: a #GFile
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously gets the mount for the file.
+ *
+ * For more details, see g_file_find_enclosing_mount() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_find_enclosing_mount_finish() to get the result of the operation.
+ */
+void
+g_file_find_enclosing_mount_async (GFile              *file,
+				   int                   io_priority,
+				   GCancellable         *cancellable,
+				   GAsyncReadyCallback   callback,
+				   gpointer              user_data)
+{
+  GFileIface *iface;
+
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->find_enclosing_mount_async) (file,
+					 io_priority,
+					 cancellable,
+					 callback,
+					 user_data);
+}
+
+/**
+ * g_file_find_enclosing_mount_finish:
+ * @file: a #GFile
+ * @res: a #GAsyncResult
+ * @error: a #GError
+ * 
+ * Finishes an asynchronous find mount request. 
+ * See g_file_find_enclosing_mount_async().
+ * 
+ * Returns: #GMount for given @file or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GMount *
+g_file_find_enclosing_mount_finish (GFile         *file,
+				    GAsyncResult  *res,
+				    GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->find_enclosing_mount_finish) (file, res, error);
+}
+
+
+/**
+ * g_file_read:
+ * @file: #GFile to read.
+ * @cancellable: a #GCancellable
+ * @error: a #GError, or %NULL
+ *
+ * Opens a file for reading. The result is a #GFileInputStream that
+ * can be used to read the contents of the file.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * If the file does not exist, the G_IO_ERROR_NOT_FOUND error will be returned.
+ * If the file is a directory, the G_IO_ERROR_IS_DIRECTORY error will be returned.
+ * Other errors are possible too, and depend on what kind of filesystem the file is on.
+ *
+ * Returns: #GFileInputStream or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileInputStream *
+g_file_read (GFile         *file,
+	     GCancellable  *cancellable,
+	     GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->read_fn == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+  
+  return (* iface->read_fn) (file, cancellable, error);
+}
+
+/**
+ * g_file_append_to:
+ * @file: input #GFile.
+ * @flags: a set of #GFileCreateFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ *
+ * Gets an output stream for appending data to the file. If
+ * the file doesn't already exist it is created.
+ *
+ * By default files created are generally readable by everyone,
+ * but if you pass #G_FILE_CREATE_PRIVATE in @flags the file
+ * will be made readable only to the current user, to the level that
+ * is supported on the target filesystem.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *
+ * Some file systems don't allow all file names, and may
+ * return an %G_IO_ERROR_INVALID_FILENAME error.
+ * If the file is a directory the %G_IO_ERROR_IS_DIRECTORY error will be
+ * returned. Other errors are possible too, and depend on what kind of
+ * filesystem the file is on.
+ * 
+ * Returns: a #GFileOutputStream, or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileOutputStream *
+g_file_append_to (GFile             *file,
+		  GFileCreateFlags   flags,
+		  GCancellable      *cancellable,
+		  GError           **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->append_to == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+  
+  return (* iface->append_to) (file, flags, cancellable, error);
+}
+
+/**
+ * g_file_create:
+ * @file: input #GFile.
+ * @flags: a set of #GFileCreateFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ *
+ * Creates a new file and returns an output stream for writing to it.
+ * The file must not already exist.
+ *
+ * By default files created are generally readable by everyone,
+ * but if you pass #G_FILE_CREATE_PRIVATE in @flags the file
+ * will be made readable only to the current user, to the level that
+ * is supported on the target filesystem.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *
+ * If a file or directory with this name already exists the G_IO_ERROR_EXISTS
+ * error will be returned.
+ * Some file systems don't allow all file names, and may
+ * return an G_IO_ERROR_INVALID_FILENAME error, and if the name
+ * is to long G_IO_ERROR_FILENAME_TOO_LONG will be returned.
+ * Other errors are possible too, and depend on what kind of
+ * filesystem the file is on.
+ * 
+ * Returns: a #GFileOutputStream for the newly created file, or 
+ *     %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileOutputStream *
+g_file_create (GFile             *file,
+	       GFileCreateFlags   flags,
+	       GCancellable      *cancellable,
+	       GError           **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->create == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+  
+  return (* iface->create) (file, flags, cancellable, error);
+}
+
+/**
+ * g_file_replace:
+ * @file: input #GFile.
+ * @etag: an optional <link linkend="gfile-etag">entity tag</link> for the 
+ *     current #GFile, or #NULL to ignore.
+ * @make_backup: %TRUE if a backup should be created.
+ * @flags: a set of #GFileCreateFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ *
+ * Returns an output stream for overwriting the file, possibly
+ * creating a backup copy of the file first. If the file doesn't exist,
+ * it will be created.
+ *
+ * This will try to replace the file in the safest way possible so
+ * that any errors during the writing will not affect an already
+ * existing copy of the file. For instance, for local files it
+ * may write to a temporary file and then atomically rename over
+ * the destination when the stream is closed.
+ * 
+ * By default files created are generally readable by everyone,
+ * but if you pass #G_FILE_CREATE_PRIVATE in @flags the file
+ * will be made readable only to the current user, to the level that
+ * is supported on the target filesystem.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * If you pass in a non-#NULL @etag value, then this value is
+ * compared to the current entity tag of the file, and if they differ
+ * an G_IO_ERROR_WRONG_ETAG error is returned. This generally means
+ * that the file has been changed since you last read it. You can get
+ * the new etag from g_file_output_stream_get_etag() after you've
+ * finished writing and closed the #GFileOutputStream. When you load
+ * a new file you can use g_file_input_stream_query_info() to get
+ * the etag of the file.
+ * 
+ * If @make_backup is %TRUE, this function will attempt to make a backup
+ * of the current file before overwriting it. If this fails a G_IO_ERROR_CANT_CREATE_BACKUP
+ * error will be returned. If you want to replace anyway, try again with
+ * @make_backup set to %FALSE.
+ *
+ * If the file is a directory the G_IO_ERROR_IS_DIRECTORY error will be returned,
+ * and if the file is some other form of non-regular file then a
+ * G_IO_ERROR_NOT_REGULAR_FILE error will be returned.
+ * Some file systems don't allow all file names, and may
+ * return an G_IO_ERROR_INVALID_FILENAME error, and if the name
+ * is to long G_IO_ERROR_FILENAME_TOO_LONG will be returned.
+ * Other errors are possible too, and depend on what kind of
+ * filesystem the file is on.
+ *
+ * Returns: a #GFileOutputStream or %NULL on error. 
+ *     Free the returned object with g_object_unref().
+ **/
+GFileOutputStream *
+g_file_replace (GFile             *file,
+		const char        *etag,
+		gboolean           make_backup,
+		GFileCreateFlags   flags,
+		GCancellable      *cancellable,
+		GError           **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->replace == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+  
+  
+  /* Handle empty tag string as NULL in consistent way. */
+  if (etag && *etag == 0)
+    etag = NULL;
+  
+  return (* iface->replace) (file, etag, make_backup, flags, cancellable, error);
+}
+
+/**
+ * g_file_read_async:
+ * @file: input #GFile.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously opens @file for reading.
+ *
+ * For more details, see g_file_read() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_read_finish() to get the result of the operation.
+ **/
+void
+g_file_read_async (GFile               *file,
+		   int                  io_priority,
+		   GCancellable        *cancellable,
+		   GAsyncReadyCallback  callback,
+		   gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->read_async) (file,
+			 io_priority,
+			 cancellable,
+			 callback,
+			 user_data);
+}
+
+/**
+ * g_file_read_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError, or %NULL
+ *
+ * Finishes an asynchronous file read operation started with 
+ * g_file_read_async(). 
+ *  
+ * Returns: a #GFileInputStream or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileInputStream *
+g_file_read_finish (GFile         *file,
+		    GAsyncResult  *res,
+		    GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->read_finish) (file, res, error);
+}
+
+/**
+ * g_file_append_to_async:
+ * @file: input #GFile.
+ * @flags: a set of #GFileCreateFlags.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Asynchronously opens @file for appending.
+ *
+ * For more details, see g_file_append_to() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_append_to_finish() to get the result of the operation.
+ **/
+void
+g_file_append_to_async (GFile               *file,
+			GFileCreateFlags     flags,
+			int                  io_priority,
+			GCancellable        *cancellable,
+			GAsyncReadyCallback  callback,
+			gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->append_to_async) (file,
+			      flags,
+			      io_priority,
+			      cancellable,
+			      callback,
+			      user_data);
+}
+
+/**
+ * g_file_append_to_finish:
+ * @file: input #GFile.
+ * @res: #GAsyncResult
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous file append operation started with 
+ * g_file_append_to_async(). 
+ * 
+ * Returns: a valid #GFileOutputStream or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileOutputStream *
+g_file_append_to_finish (GFile         *file,
+			 GAsyncResult  *res,
+			 GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->append_to_finish) (file, res, error);
+}
+
+/**
+ * g_file_create_async:
+ * @file: input #GFile.
+ * @flags: a set of #GFileCreateFlags.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Asynchronously creates a new file and returns an output stream for writing to it.
+ * The file must not already exist.
+ *
+ * For more details, see g_file_create() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_create_finish() to get the result of the operation.
+ **/
+void
+g_file_create_async (GFile               *file,
+		     GFileCreateFlags     flags,
+		     int                  io_priority,
+		     GCancellable        *cancellable,
+		     GAsyncReadyCallback  callback,
+		     gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->create_async) (file,
+			   flags,
+			   io_priority,
+			   cancellable,
+			   callback,
+			   user_data);
+}
+
+/**
+ * g_file_create_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous file create operation started with 
+ * g_file_create_async(). 
+ * 
+ * Returns: a #GFileOutputStream or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileOutputStream *
+g_file_create_finish (GFile         *file,
+		      GAsyncResult  *res,
+		      GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->create_finish) (file, res, error);
+}
+
+/**
+ * g_file_replace_async:
+ * @file: input #GFile.
+ * @etag: an <link linkend="gfile-etag">entity tag</link> for the 
+ *     current #GFile, or NULL to ignore.
+ * @make_backup: %TRUE if a backup should be created.
+ * @flags: a set of #GFileCreateFlags.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously overwrites the file, replacing the contents, possibly
+ * creating a backup copy of the file first.
+ *
+ * For more details, see g_file_replace() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_replace_finish() to get the result of the operation.
+ **/
+void
+g_file_replace_async (GFile               *file,
+		      const char          *etag,
+		      gboolean             make_backup,
+		      GFileCreateFlags     flags,
+		      int                  io_priority,
+		      GCancellable        *cancellable,
+		      GAsyncReadyCallback  callback,
+		      gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->replace_async) (file,
+			    etag,
+			    make_backup,
+			    flags,
+			    io_priority,
+			    cancellable,
+			    callback,
+			    user_data);
+}
+
+/**
+ * g_file_replace_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous file replace operation started with 
+ * g_file_replace_async(). 
+ * 
+ * Returns: a #GFileOutputStream, or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileOutputStream *
+g_file_replace_finish (GFile         *file,
+		       GAsyncResult  *res,
+		       GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->replace_finish) (file, res, error);
+}
+
+static gboolean
+copy_symlink (GFile           *destination,
+	      GFileCopyFlags   flags,
+	      GCancellable    *cancellable,
+	      const char      *target,
+	      GError         **error)
+{
+  GError *my_error;
+  gboolean tried_delete;
+  GFileInfo *info;
+  GFileType file_type;
+
+  tried_delete = FALSE;
+
+ retry:
+  my_error = NULL;
+  if (!g_file_make_symbolic_link (destination, target, cancellable, &my_error))
+    {
+      /* Maybe it already existed, and we want to overwrite? */
+      if (!tried_delete && (flags & G_FILE_COPY_OVERWRITE) && 
+	  my_error->domain == G_IO_ERROR && my_error->code == G_IO_ERROR_EXISTS)
+	{
+	  g_error_free (my_error);
+
+
+	  /* Don't overwrite if the destination is a directory */
+	  info = g_file_query_info (destination, G_FILE_ATTRIBUTE_STANDARD_TYPE,
+				    G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+				    cancellable, &my_error);
+	  if (info != NULL)
+	    {
+	      file_type = g_file_info_get_file_type (info);
+	      g_object_unref (info);
+	      
+	      if (file_type == G_FILE_TYPE_DIRECTORY)
+		{
+		  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
+                                       _("Can't copy over directory"));
+		  return FALSE;
+		}
+	    }
+	  
+	  if (!g_file_delete (destination, cancellable, error))
+	    return FALSE;
+	  
+	  tried_delete = TRUE;
+	  goto retry;
+	}
+            /* Nah, fail */
+      g_propagate_error (error, my_error);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static GInputStream *
+open_source_for_copy (GFile           *source,
+		      GFile           *destination,
+		      GFileCopyFlags   flags,
+		      GCancellable    *cancellable,
+		      GError         **error)
+{
+  GError *my_error;
+  GInputStream *in;
+  GFileInfo *info;
+  GFileType file_type;
+  
+  my_error = NULL;
+  in = (GInputStream *)g_file_read (source, cancellable, &my_error);
+  if (in != NULL)
+    return in;
+
+  /* There was an error opening the source, try to set a good error for it: */
+
+  if (my_error->domain == G_IO_ERROR && my_error->code == G_IO_ERROR_IS_DIRECTORY)
+    {
+      /* The source is a directory, don't fail with WOULD_RECURSE immediately, 
+       * as that is less useful to the app. Better check for errors on the 
+       * target instead. 
+       */
+      g_error_free (my_error);
+      my_error = NULL;
+      
+      info = g_file_query_info (destination, G_FILE_ATTRIBUTE_STANDARD_TYPE,
+				G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+				cancellable, &my_error);
+      if (info != NULL)
+	{
+	  file_type = g_file_info_get_file_type (info);
+	  g_object_unref (info);
+	  
+	  if (flags & G_FILE_COPY_OVERWRITE)
+	    {
+	      if (file_type == G_FILE_TYPE_DIRECTORY)
+		{
+		  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_WOULD_MERGE,
+                                       _("Can't copy directory over directory"));
+		  return NULL;
+		}
+	      /* continue to would_recurse error */
+	    }
+	  else
+	    {
+	      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_EXISTS,
+                                   _("Target file exists"));
+	      return NULL;
+	    }
+	}
+      else
+	{
+	  /* Error getting info from target, return that error 
+           * (except for NOT_FOUND, which is no error here) 
+           */
+	  if (my_error->domain != G_IO_ERROR && my_error->code != G_IO_ERROR_NOT_FOUND)
+	    {
+	      g_propagate_error (error, my_error);
+	      return NULL;
+	    }
+	  g_error_free (my_error);
+	}
+      
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_WOULD_RECURSE,
+                           _("Can't recursively copy directory"));
+      return NULL;
+    }
+
+  g_propagate_error (error, my_error);
+  return NULL;
+}
+
+static gboolean
+should_copy (GFileAttributeInfo *info, 
+             gboolean            as_move,
+             gboolean            skip_perms)
+{
+  if (skip_perms && strcmp(info->name, "unix::mode") == 0)
+        return FALSE;
+
+  if (as_move)
+    return info->flags & G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED;
+  return info->flags & G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE;
+}
+
+static char *
+build_attribute_list_for_copy (GFileAttributeInfoList *attributes,
+			       GFileAttributeInfoList *namespaces,
+			       gboolean                as_move,
+			       gboolean                skip_perms)
+{
+  GString *s;
+  gboolean first;
+  int i;
+  
+  first = TRUE;
+  s = g_string_new ("");
+
+  if (attributes)
+    {
+      for (i = 0; i < attributes->n_infos; i++)
+	{
+	  if (should_copy (&attributes->infos[i], as_move, skip_perms))
+	    {
+	      if (first)
+		first = FALSE;
+	      else
+		g_string_append_c (s, ',');
+		
+	      g_string_append (s, attributes->infos[i].name);
+	    }
+	}
+    }
+
+  if (namespaces)
+    {
+      for (i = 0; i < namespaces->n_infos; i++)
+	{
+	  if (should_copy (&namespaces->infos[i], as_move, FALSE))
+	    {
+	      if (first)
+		first = FALSE;
+	      else
+		g_string_append_c (s, ',');
+		
+	      g_string_append (s, namespaces->infos[i].name);
+	      g_string_append (s, ":*");
+	    }
+	}
+    }
+
+  return g_string_free (s, FALSE);
+}
+
+/**
+ * g_file_copy_attributes:
+ * @source: a #GFile with attributes.
+ * @destination: a #GFile to copy attributes to.
+ * @flags: a set of #GFileCopyFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, %NULL to ignore.
+ *
+ * Copies the file attributes from @source to @destination. 
+ *
+ * Normally only a subset of the file attributes are copied,
+ * those that are copies in a normal file copy operation
+ * (which for instance does not include e.g. owner). However
+ * if #G_FILE_COPY_ALL_METADATA is specified in @flags, then
+ * all the metadata that is possible to copy is copied. This
+ * is useful when implementing move by copy + delete source.
+ *
+ * Returns: %TRUE if the attributes were copied successfully, %FALSE otherwise.
+ **/
+gboolean
+g_file_copy_attributes (GFile           *source,
+			GFile           *destination,
+			GFileCopyFlags   flags,
+			GCancellable    *cancellable,
+			GError         **error)
+{
+  GFileAttributeInfoList *attributes, *namespaces;
+  char *attrs_to_read;
+  gboolean res;
+  GFileInfo *info;
+  gboolean as_move;
+  gboolean source_nofollow_symlinks;
+  gboolean skip_perms;
+
+  as_move = flags & G_FILE_COPY_ALL_METADATA;
+  source_nofollow_symlinks = flags & G_FILE_COPY_NOFOLLOW_SYMLINKS;
+  skip_perms = (flags & G_FILE_COPY_TARGET_DEFAULT_PERMS) != 0;
+
+  /* Ignore errors here, if the target supports no attributes there is nothing to copy */
+  attributes = g_file_query_settable_attributes (destination, cancellable, NULL);
+  namespaces = g_file_query_writable_namespaces (destination, cancellable, NULL);
+
+  if (attributes == NULL && namespaces == NULL)
+    return TRUE;
+
+  attrs_to_read = build_attribute_list_for_copy (attributes, namespaces, as_move, skip_perms);
+
+  /* Ignore errors here, if we can't read some info (e.g. if it doesn't exist)
+   * we just don't copy it. 
+   */
+  info = g_file_query_info (source, attrs_to_read,
+			    source_nofollow_symlinks ? G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS:0,
+			    cancellable,
+			    NULL);
+
+  g_free (attrs_to_read);
+  
+  res = TRUE;
+  if  (info)
+    {
+      res = g_file_set_attributes_from_info (destination,
+					     info,
+                         G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+					     cancellable,
+					     error);
+      g_object_unref (info);
+    }
+  
+  g_file_attribute_info_list_unref (attributes);
+  g_file_attribute_info_list_unref (namespaces);
+  
+  return res;
+}
+
+/* Closes the streams */
+static gboolean
+copy_stream_with_progress (GInputStream           *in,
+			   GOutputStream          *out,
+                           GFile                  *source,
+			   GCancellable           *cancellable,
+			   GFileProgressCallback   progress_callback,
+			   gpointer                progress_callback_data,
+			   GError                **error)
+{
+  gssize n_read, n_written;
+  goffset current_size;
+  char buffer[1024*64], *p;
+  gboolean res;
+  goffset total_size;
+  GFileInfo *info;
+
+  total_size = -1;
+  info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (in),
+					 G_FILE_ATTRIBUTE_STANDARD_SIZE,
+					 cancellable, NULL);
+  if (info)
+    {
+      if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
+        total_size = g_file_info_get_size (info);
+      g_object_unref (info);
+    }
+
+  if (total_size == -1)
+    {
+      info = g_file_query_info (source, 
+                                G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                                G_FILE_QUERY_INFO_NONE,
+                                cancellable, NULL);
+      if (info)
+        {
+          if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
+            total_size = g_file_info_get_size (info);
+          g_object_unref (info);
+        }
+    }
+
+  if (total_size == -1)
+    total_size = 0;
+  
+  current_size = 0;
+  res = TRUE;
+  while (TRUE)
+    {
+      n_read = g_input_stream_read (in, buffer, sizeof (buffer), cancellable, error);
+      if (n_read == -1)
+	{
+	  res = FALSE;
+	  break;
+	}
+	
+      if (n_read == 0)
+	break;
+
+      current_size += n_read;
+
+      p = buffer;
+      while (n_read > 0)
+	{
+	  n_written = g_output_stream_write (out, p, n_read, cancellable, error);
+	  if (n_written == -1)
+	    {
+	      res = FALSE;
+	      break;
+	    }
+
+	  p += n_written;
+	  n_read -= n_written;
+	}
+
+      if (!res)
+        break;
+
+      if (progress_callback)
+	progress_callback (current_size, total_size, progress_callback_data);
+    }
+
+  if (!res)
+    error = NULL; /* Ignore further errors */
+
+  /* Make sure we send full copied size */
+  if (progress_callback)
+    progress_callback (current_size, total_size, progress_callback_data);
+  
+  /* Don't care about errors in source here */
+  g_input_stream_close (in, cancellable, NULL);
+
+  /* But write errors on close are bad! */
+  if (!g_output_stream_close (out, cancellable, error))
+    res = FALSE;
+
+  g_object_unref (in);
+  g_object_unref (out);
+      
+  return res;
+}
+
+static gboolean
+file_copy_fallback (GFile                  *source,
+		    GFile                  *destination,
+		    GFileCopyFlags          flags,
+		    GCancellable           *cancellable,
+		    GFileProgressCallback   progress_callback,
+		    gpointer                progress_callback_data,
+		    GError                **error)
+{
+  GInputStream *in;
+  GOutputStream *out;
+  GFileInfo *info;
+  const char *target;
+
+  /* need to know the file type */
+  info = g_file_query_info (source,
+			    G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET,
+			    G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+			    cancellable,
+			    error);
+
+  if (info == NULL)
+	  return FALSE;
+
+  /* Maybe copy the symlink? */
+  if ((flags & G_FILE_COPY_NOFOLLOW_SYMLINKS) &&
+      g_file_info_get_file_type (info) == G_FILE_TYPE_SYMBOLIC_LINK)
+    {
+      target = g_file_info_get_symlink_target (info);
+      if (target)
+	{
+	  if (!copy_symlink (destination, flags, cancellable, target, error))
+	    {
+	      g_object_unref (info);
+	      return FALSE;
+	    }
+	  
+	  g_object_unref (info);
+	  goto copied_file;
+	}
+        /* ... else fall back on a regular file copy */
+	g_object_unref (info);
+    }
+  /* Handle "special" files (pipes, device nodes, ...)? */
+  else if (g_file_info_get_file_type (info) == G_FILE_TYPE_SPECIAL)
+    {
+      /* FIXME: could try to recreate device nodes and others? */
+
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Can't copy special file"));
+      g_object_unref (info);
+      return FALSE;
+    }
+  /* Everything else should just fall back on a regular copy. */
+  else
+    g_object_unref (info);
+
+  in = open_source_for_copy (source, destination, flags, cancellable, error);
+  if (in == NULL)
+    return FALSE;
+  
+  if (flags & G_FILE_COPY_OVERWRITE)
+    {
+      out = (GOutputStream *)g_file_replace (destination,
+					     NULL,
+					     flags & G_FILE_COPY_BACKUP,
+                                             G_FILE_CREATE_REPLACE_DESTINATION,
+					     cancellable, error);
+    }
+  else
+    {
+      out = (GOutputStream *)g_file_create (destination, 0, cancellable, error);
+    }
+
+  if (out == NULL)
+    {
+      g_object_unref (in);
+      return FALSE;
+    }
+
+  if (!copy_stream_with_progress (in, out, source, cancellable,
+				  progress_callback, progress_callback_data,
+				  error))
+    return FALSE;
+
+ copied_file:
+
+  /* Ignore errors here. Failure to copy metadata is not a hard error */
+  g_file_copy_attributes (source, destination,
+			  flags, cancellable, NULL);
+  
+  return TRUE;
+}
+
+/**
+ * g_file_copy:
+ * @source: input #GFile.
+ * @destination: destination #GFile
+ * @flags: set of #GFileCopyFlags
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @progress_callback: function to callback with progress information
+ * @progress_callback_data: user data to pass to @progress_callback
+ * @error: #GError to set on error, or %NULL
+ *
+ * Copies the file @source to the location specified by @destination.
+ * Can not handle recursive copies of directories.
+ *
+ * If the flag #G_FILE_COPY_OVERWRITE is specified an already
+ * existing @destination file is overwritten.
+ *
+ * If the flag #G_FILE_COPY_NOFOLLOW_SYMLINKS is specified then symlinks
+ * will be copied as symlinks, otherwise the target of the
+ * @source symlink will be copied.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * If @progress_callback is not %NULL, then the operation can be monitored by
+ * setting this to a #GFileProgressCallback function. @progress_callback_data
+ * will be passed to this function. It is guaranteed that this callback will
+ * be called after all data has been transferred with the total number of bytes
+ * copied during the operation.
+ * 
+ * If the @source file does not exist then the G_IO_ERROR_NOT_FOUND
+ * error is returned, independent on the status of the @destination.
+ *
+ * If #G_FILE_COPY_OVERWRITE is not specified and the target exists, then the
+ * error G_IO_ERROR_EXISTS is returned.
+ *
+ * If trying to overwrite a file over a directory the G_IO_ERROR_IS_DIRECTORY
+ * error is returned. If trying to overwrite a directory with a directory the
+ * G_IO_ERROR_WOULD_MERGE error is returned.
+ *
+ * If the source is a directory and the target does not exist, or #G_FILE_COPY_OVERWRITE is
+ * specified and the target is a file, then the G_IO_ERROR_WOULD_RECURSE error
+ * is returned.
+ *
+ * If you are interested in copying the #GFile object itself (not the on-disk
+ * file), see g_file_dup().
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ **/
+gboolean
+g_file_copy (GFile                  *source,
+	     GFile                  *destination,
+	     GFileCopyFlags          flags,
+	     GCancellable           *cancellable,
+	     GFileProgressCallback   progress_callback,
+	     gpointer                progress_callback_data,
+	     GError                **error)
+{
+  GFileIface *iface;
+  GError *my_error;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_FILE (source), FALSE);
+  g_return_val_if_fail (G_IS_FILE (destination), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (destination);
+  if (iface->copy)
+    {
+      my_error = NULL;
+      res = (* iface->copy) (source, destination,
+			     flags, cancellable,
+			     progress_callback, progress_callback_data,
+			     &my_error);
+      
+      if (res)
+	return TRUE;
+      
+      if (my_error->domain != G_IO_ERROR || my_error->code != G_IO_ERROR_NOT_SUPPORTED)
+	{
+	  g_propagate_error (error, my_error);
+	      return FALSE;
+	}
+      else
+	g_clear_error (&my_error);
+    }
+
+  /* If the types are different, and the destination method failed
+     also try the source method */
+  if (G_OBJECT_TYPE (source) != G_OBJECT_TYPE (destination))
+    {
+      iface = G_FILE_GET_IFACE (source);
+      
+      if (iface->copy)
+	{
+	  my_error = NULL;
+	  res = (* iface->copy) (source, destination,
+				 flags, cancellable,
+				 progress_callback, progress_callback_data,
+				 &my_error);
+	  
+	  if (res)
+	    return TRUE;
+	  
+	  if (my_error->domain != G_IO_ERROR || my_error->code != G_IO_ERROR_NOT_SUPPORTED)
+	    {
+	      g_propagate_error (error, my_error);
+	      return FALSE;
+	    }
+	  else
+	    g_clear_error (&my_error);
+	}
+    }
+  
+  return file_copy_fallback (source, destination, flags, cancellable,
+			     progress_callback, progress_callback_data,
+			     error);
+}
+
+/**
+ * g_file_copy_async:
+ * @source: input #GFile.
+ * @destination: destination #GFile
+ * @flags: set of #GFileCopyFlags
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @progress_callback: function to callback with progress information
+ * @progress_callback_data: user data to pass to @progress_callback
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Copies the file @source to the location specified by @destination 
+ * asynchronously. For details of the behaviour, see g_file_copy().
+ *
+ * If @progress_callback is not %NULL, then that function that will be called
+ * just like in g_file_copy(), however the callback will run in the main loop,
+ * not in the thread that is doing the I/O operation.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_copy_finish() to get the result of the operation.
+ **/
+void
+g_file_copy_async (GFile                  *source,
+		   GFile                  *destination,
+		   GFileCopyFlags          flags,
+		   int                     io_priority,
+		   GCancellable           *cancellable,
+		   GFileProgressCallback   progress_callback,
+		   gpointer                progress_callback_data,
+		   GAsyncReadyCallback     callback,
+		   gpointer                user_data)
+{
+  GFileIface *iface;
+
+  g_return_if_fail (G_IS_FILE (source));
+  g_return_if_fail (G_IS_FILE (destination));
+
+  iface = G_FILE_GET_IFACE (source);
+  (* iface->copy_async) (source,
+			 destination,
+			 flags,
+			 io_priority,
+			 cancellable,
+			 progress_callback,
+			 progress_callback_data,
+			 callback,
+			 user_data);
+}
+
+/**
+ * g_file_copy_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes copying the file started with 
+ * g_file_copy_async().
+ * 
+ * Returns: a %TRUE on success, %FALSE on error.
+ **/
+gboolean
+g_file_copy_finish (GFile        *file,
+		    GAsyncResult *res,
+		    GError      **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->copy_finish) (file, res, error);
+}
+
+/**
+ * g_file_move:
+ * @source: #GFile pointing to the source location.
+ * @destination: #GFile pointing to the destination location.
+ * @flags: set of #GFileCopyFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @progress_callback: #GFileProgressCallback function for updates.
+ * @progress_callback_data: gpointer to user data for the callback function.
+ * @error: #GError for returning error conditions, or %NULL
+ *
+ *
+ * Tries to move the file or directory @source to the location specified by @destination.
+ * If native move operations are supported then this is used, otherwise a copy + delete
+ * fallback is used. The native implementation may support moving directories (for instance
+ * on moves inside the same filesystem), but the fallback code does not.
+ * 
+ * If the flag #G_FILE_COPY_OVERWRITE is specified an already
+ * existing @destination file is overwritten.
+ *
+ * If the flag #G_FILE_COPY_NOFOLLOW_SYMLINKS is specified then symlinks
+ * will be copied as symlinks, otherwise the target of the
+ * @source symlink will be copied.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * If @progress_callback is not %NULL, then the operation can be monitored by
+ * setting this to a #GFileProgressCallback function. @progress_callback_data
+ * will be passed to this function. It is guaranteed that this callback will
+ * be called after all data has been transferred with the total number of bytes
+ * copied during the operation.
+ * 
+ * If the @source file does not exist then the G_IO_ERROR_NOT_FOUND
+ * error is returned, independent on the status of the @destination.
+ *
+ * If #G_FILE_COPY_OVERWRITE is not specified and the target exists, then the
+ * error G_IO_ERROR_EXISTS is returned.
+ *
+ * If trying to overwrite a file over a directory the G_IO_ERROR_IS_DIRECTORY
+ * error is returned. If trying to overwrite a directory with a directory the
+ * G_IO_ERROR_WOULD_MERGE error is returned.
+ *
+ * If the source is a directory and the target does not exist, or #G_FILE_COPY_OVERWRITE is
+ * specified and the target is a file, then the G_IO_ERROR_WOULD_RECURSE error
+ * may be returned (if the native move operation isn't available).
+ *
+ * Returns: %TRUE on successful move, %FALSE otherwise.
+ **/
+gboolean
+g_file_move (GFile                  *source,
+	     GFile                  *destination,
+	     GFileCopyFlags          flags,
+	     GCancellable           *cancellable,
+	     GFileProgressCallback   progress_callback,
+	     gpointer                progress_callback_data,
+	     GError                **error)
+{
+  GFileIface *iface;
+  GError *my_error;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_FILE (source), FALSE);
+  g_return_val_if_fail (G_IS_FILE (destination), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (destination);
+  if (iface->move)
+    {
+      my_error = NULL;
+      res = (* iface->move) (source, destination,
+			     flags, cancellable,
+			     progress_callback, progress_callback_data,
+			     &my_error);
+      
+      if (res)
+	return TRUE;
+      
+      if (my_error->domain != G_IO_ERROR || my_error->code != G_IO_ERROR_NOT_SUPPORTED)
+	{
+	  g_propagate_error (error, my_error);
+	  return FALSE;
+	}
+    }
+
+  /* If the types are different, and the destination method failed
+     also try the source method */
+  if (G_OBJECT_TYPE (source) != G_OBJECT_TYPE (destination))
+    {
+      iface = G_FILE_GET_IFACE (source);
+      
+      if (iface->move)
+	{
+	  my_error = NULL;
+	  res = (* iface->move) (source, destination,
+				 flags, cancellable,
+				 progress_callback, progress_callback_data,
+				 &my_error);
+	  
+	  if (res)
+	    return TRUE;
+	  
+	  if (my_error->domain != G_IO_ERROR || my_error->code != G_IO_ERROR_NOT_SUPPORTED)
+	    {
+	      g_propagate_error (error, my_error);
+	      return FALSE;
+	    }
+	}
+    }
+  
+  if (flags & G_FILE_COPY_NO_FALLBACK_FOR_MOVE)
+    {  
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return FALSE;
+    }
+  
+  flags |= G_FILE_COPY_ALL_METADATA;
+  if (!g_file_copy (source, destination, flags, cancellable,
+		    progress_callback, progress_callback_data,
+		    error))
+    return FALSE;
+
+  return g_file_delete (source, cancellable, error);
+}
+
+/**
+ * g_file_make_directory
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL 
+ *
+ * Creates a directory. Note that this will only create a child directory of
+ * the immediate parent directory of the path or URI given by the #GFile. To 
+ * recursively create directories, see g_file_make_directory_with_parents().
+ * This function will fail if the parent directory does not exist, setting 
+ * @error to %G_IO_ERROR_NOT_FOUND. If the file system doesn't support creating
+ * directories, this function will fail, setting @error to 
+ * %G_IO_ERROR_NOT_SUPPORTED.
+ *
+ * For a local #GFile the newly created directory will have the default
+ * (current) ownership and permissions of the current process.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE on successful creation, %FALSE otherwise.
+ **/
+gboolean
+g_file_make_directory (GFile         *file,
+		       GCancellable  *cancellable,
+		       GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->make_directory == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return FALSE;
+    }
+  
+  return (* iface->make_directory) (file, cancellable, error);
+}
+
+/**
+ * g_file_make_directory_with_parents:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL 
+ *
+ * Creates a directory and any parent directories that may not exist similar to
+ * 'mkdir -p'. If the file system does not support creating directories, this
+ * function will fail, setting @error to %G_IO_ERROR_NOT_SUPPORTED.
+ * 
+ * For a local #GFile the newly created directories will have the default
+ * (current) ownership and permissions of the current process.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if all directories have been successfully created, %FALSE
+ * otherwise.
+ *
+ * Since: 2.18
+ **/
+gboolean
+g_file_make_directory_with_parents (GFile         *file,
+		                    GCancellable  *cancellable,
+		                    GError       **error)
+{
+  gboolean result;
+  GFile *parent_file, *work_file;
+  GList *list = NULL, *l;
+  GError *my_error = NULL;
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  result = g_file_make_directory (file, cancellable, &my_error);
+  if (result || my_error->code != G_IO_ERROR_NOT_FOUND) 
+    {
+      if (my_error)
+        g_propagate_error (error, my_error);
+      return result;
+    }
+  
+  work_file = file;
+  
+  while (!result && my_error->code == G_IO_ERROR_NOT_FOUND) 
+    {
+      g_clear_error (&my_error);
+    
+      parent_file = g_file_get_parent (work_file);
+      if (parent_file == NULL)
+        break;
+      result = g_file_make_directory (parent_file, cancellable, &my_error);
+    
+      if (!result && my_error->code == G_IO_ERROR_NOT_FOUND)
+        list = g_list_prepend (list, parent_file);
+
+      work_file = parent_file;
+    }
+
+  for (l = list; result && l; l = l->next)
+    {
+      result = g_file_make_directory ((GFile *) l->data, cancellable, &my_error);
+    }
+  
+  /* Clean up */
+  while (list != NULL) 
+    {
+      g_object_unref ((GFile *) list->data);
+      list = g_list_remove (list, list->data);
+    }
+
+  if (!result) 
+    {
+      g_propagate_error (error, my_error);
+      return result;
+    }
+  
+  return g_file_make_directory (file, cancellable, error);
+}
+
+/**
+ * g_file_make_symbolic_link:
+ * @file: input #GFile.
+ * @symlink_value: a string with the value of the new symlink.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError. 
+ * 
+ * Creates a symbolic link.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE on the creation of a new symlink, %FALSE otherwise.
+ **/
+gboolean
+g_file_make_symbolic_link (GFile         *file,
+			   const char    *symlink_value,
+			   GCancellable  *cancellable,
+			   GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (symlink_value != NULL, FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+
+  if (*symlink_value == '\0')
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid symlink value given"));
+      return FALSE;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->make_symbolic_link == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return FALSE;
+    }
+  
+  return (* iface->make_symbolic_link) (file, symlink_value, cancellable, error);
+}
+
+/**
+ * g_file_delete:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL 
+ * 
+ * Deletes a file. If the @file is a directory, it will only be deleted if it 
+ * is empty.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the file was deleted. %FALSE otherwise.
+ **/
+gboolean
+g_file_delete (GFile         *file,
+	       GCancellable  *cancellable,
+	       GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->delete_file == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return FALSE;
+    }
+  
+  return (* iface->delete_file) (file, cancellable, error);
+}
+
+/**
+ * g_file_trash:
+ * @file: #GFile to send to trash.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ *
+ * Sends @file to the "Trashcan", if possible. This is similar to
+ * deleting it, but the user can recover it before emptying the trashcan.
+ * Not all file systems support trashing, so this call can return the
+ * %G_IO_ERROR_NOT_SUPPORTED error.
+ *
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE on successful trash, %FALSE otherwise.
+ **/
+gboolean
+g_file_trash (GFile         *file,
+	      GCancellable  *cancellable,
+	      GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->trash == NULL)
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Trash not supported"));
+      return FALSE;
+    }
+  
+  return (* iface->trash) (file, cancellable, error);
+}
+
+/**
+ * g_file_set_display_name:
+ * @file: input #GFile.
+ * @display_name: a string.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Renames @file to the specified display name.
+ *
+ * The display name is converted from UTF8 to the correct encoding for the target
+ * filesystem if possible and the @file is renamed to this.
+ * 
+ * If you want to implement a rename operation in the user interface the edit name
+ * (#G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME) should be used as the initial value in the rename
+ * widget, and then the result after editing should be passed to g_file_set_display_name().
+ *
+ * On success the resulting converted filename is returned.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GFile specifying what @file was renamed to, or %NULL 
+ *     if there was an error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_set_display_name (GFile         *file,
+			 const char    *display_name,
+			 GCancellable  *cancellable,
+			 GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (display_name != NULL, NULL);
+
+  if (strchr (display_name, G_DIR_SEPARATOR) != NULL)
+    {
+      g_set_error (error,
+		   G_IO_ERROR,
+		   G_IO_ERROR_INVALID_ARGUMENT,
+		   _("File names cannot contain '%c'"), G_DIR_SEPARATOR);
+      return NULL;
+    }
+  
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->set_display_name) (file, display_name, cancellable, error);
+}
+
+/**
+ * g_file_set_display_name_async:
+ * @file: input #GFile.
+ * @display_name: a string.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Asynchronously sets the display name for a given #GFile.
+ * 
+ * For more details, see g_file_set_display_name() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_set_display_name_finish() to get the result of the operation.
+ **/
+void
+g_file_set_display_name_async (GFile               *file,
+			       const char          *display_name,
+			       int                  io_priority,
+			       GCancellable        *cancellable,
+			       GAsyncReadyCallback  callback,
+			       gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+  g_return_if_fail (display_name != NULL);
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->set_display_name_async) (file,
+				     display_name,
+				     io_priority,
+				     cancellable,
+				     callback,
+				     user_data);
+}
+
+/**
+ * g_file_set_display_name_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes setting a display name started with 
+ * g_file_set_display_name_async().
+ * 
+ * Returns: a #GFile or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_set_display_name_finish (GFile         *file,
+				GAsyncResult  *res,
+				GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->set_display_name_finish) (file, res, error);
+}
+
+/**
+ * g_file_query_settable_attributes:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Obtain the list of settable attributes for the file.
+ *
+ * Returns the type and full attribute name of all the attributes 
+ * that can be set on this file. This doesn't mean setting it will always 
+ * succeed though, you might get an access failure, or some specific 
+ * file may not support a specific attribute.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GFileAttributeInfoList describing the settable attributes.
+ * When you are done with it, release it with g_file_attribute_info_list_unref()
+ **/
+GFileAttributeInfoList *
+g_file_query_settable_attributes (GFile         *file,
+				  GCancellable  *cancellable,
+				  GError       **error)
+{
+  GFileIface *iface;
+  GError *my_error;
+  GFileAttributeInfoList *list;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->query_settable_attributes == NULL)
+    return g_file_attribute_info_list_new ();
+
+  my_error = NULL;
+  list = (* iface->query_settable_attributes) (file, cancellable, &my_error);
+  
+  if (list == NULL)
+    {
+      if (my_error->domain == G_IO_ERROR && my_error->code == G_IO_ERROR_NOT_SUPPORTED)
+	{
+	  list = g_file_attribute_info_list_new ();
+	  g_error_free (my_error);
+	}
+      else
+	g_propagate_error (error, my_error);
+    }
+  
+  return list;
+}
+
+/**
+ * g_file_query_writable_namespaces:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Obtain the list of attribute namespaces where new attributes 
+ * can be created by a user. An example of this is extended
+ * attributes (in the "xattr" namespace).
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GFileAttributeInfoList describing the writable namespaces.
+ * When you are done with it, release it with g_file_attribute_info_list_unref()
+ **/
+GFileAttributeInfoList *
+g_file_query_writable_namespaces (GFile         *file,
+				  GCancellable  *cancellable,
+				  GError       **error)
+{
+  GFileIface *iface;
+  GError *my_error;
+  GFileAttributeInfoList *list;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->query_writable_namespaces == NULL)
+    return g_file_attribute_info_list_new ();
+
+  my_error = NULL;
+  list = (* iface->query_writable_namespaces) (file, cancellable, &my_error);
+  
+  if (list == NULL)
+    {
+      if (my_error->domain == G_IO_ERROR && my_error->code == G_IO_ERROR_NOT_SUPPORTED)
+	{
+	  list = g_file_attribute_info_list_new ();
+	  g_error_free (my_error);
+	}
+      else
+	g_propagate_error (error, my_error);
+    }
+  
+  return list;
+}
+
+/**
+ * g_file_set_attribute:
+ * @file: input #GFile.
+ * @attribute: a string containing the attribute's name.
+ * @type: The type of the attribute
+ * @value_p: a pointer to the value (or the pointer itself if the type is a pointer type)
+ * @flags: a set of #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets an attribute in the file with attribute name @attribute to @value.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the attribute was set, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attribute (GFile                      *file,
+		      const char                 *attribute,
+		      GFileAttributeType          type,
+		      gpointer                    value_p,
+		      GFileQueryInfoFlags         flags,
+		      GCancellable               *cancellable,
+		      GError                    **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->set_attribute == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return FALSE;
+    }
+
+  return (* iface->set_attribute) (file, attribute, type, value_p, flags, cancellable, error);
+}
+
+/**
+ * g_file_set_attributes_from_info:
+ * @file: input #GFile.
+ * @info: a #GFileInfo.
+ * @flags: #GFileQueryInfoFlags
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL 
+ * 
+ * Tries to set all attributes in the #GFileInfo on the target values, 
+ * not stopping on the first error.
+ * 
+ * If there is any error during this operation then @error will be set to
+ * the first error. Error on particular fields are flagged by setting 
+ * the "status" field in the attribute value to 
+ * %G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING, which means you can also detect
+ * further errors.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if there was any error, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attributes_from_info (GFile                *file,
+				 GFileInfo            *info,
+				 GFileQueryInfoFlags   flags,
+				 GCancellable         *cancellable,
+				 GError              **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return FALSE;
+  
+  g_file_info_clear_status (info);
+  
+  iface = G_FILE_GET_IFACE (file);
+
+  return (* iface->set_attributes_from_info) (file, 
+                                              info, 
+                                              flags, 
+                                              cancellable, 
+                                              error);
+}
+
+
+static gboolean
+g_file_real_set_attributes_from_info (GFile                *file,
+				      GFileInfo            *info,
+				      GFileQueryInfoFlags   flags,
+				      GCancellable         *cancellable,
+				      GError              **error)
+{
+  char **attributes;
+  int i;
+  gboolean res;
+  GFileAttributeValue *value;
+  
+  res = TRUE;
+  
+  attributes = g_file_info_list_attributes (info, NULL);
+
+  for (i = 0; attributes[i] != NULL; i++)
+    {
+      value = _g_file_info_get_attribute_value (info, attributes[i]);
+
+      if (value->status != G_FILE_ATTRIBUTE_STATUS_UNSET)
+	continue;
+
+      if (!g_file_set_attribute (file, attributes[i],
+				 value->type, _g_file_attribute_value_peek_as_pointer (value),
+				 flags, cancellable, error))
+	{
+	  value->status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
+	  res = FALSE;
+	  /* Don't set error multiple times */
+	  error = NULL;
+	}
+      else
+	value->status = G_FILE_ATTRIBUTE_STATUS_SET;
+    }
+  
+  g_strfreev (attributes);
+  
+  return res;
+}
+
+/**
+ * g_file_set_attributes_async:
+ * @file: input #GFile.
+ * @info: a #GFileInfo.
+ * @flags: a #GFileQueryInfoFlags.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback. 
+ * @user_data: a #gpointer.
+ *
+ * Asynchronously sets the attributes of @file with @info.
+ * 
+ * For more details, see g_file_set_attributes_from_info() which is
+ * the synchronous version of this call.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_set_attributes_finish() to get the result of the operation.
+ **/
+void
+g_file_set_attributes_async (GFile               *file,
+			     GFileInfo           *info,
+			     GFileQueryInfoFlags  flags,
+			     int                  io_priority,
+			     GCancellable        *cancellable,
+			     GAsyncReadyCallback  callback,
+			     gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+  g_return_if_fail (G_IS_FILE_INFO (info));
+
+  iface = G_FILE_GET_IFACE (file);
+  (* iface->set_attributes_async) (file, 
+                                   info, 
+                                   flags, 
+                                   io_priority, 
+                                   cancellable, 
+                                   callback, 
+                                   user_data);
+}
+
+/**
+ * g_file_set_attributes_finish:
+ * @file: input #GFile.
+ * @result: a #GAsyncResult.
+ * @info: a #GFileInfo.
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes setting an attribute started in g_file_set_attributes_async().
+ * 
+ * Returns: %TRUE if the attributes were set correctly, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attributes_finish (GFile         *file,
+			      GAsyncResult  *result,
+			      GFileInfo    **info,
+			      GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  /* No standard handling of errors here, as we must set info even
+   * on errors 
+   */
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->set_attributes_finish) (file, result, info, error);
+}
+
+/**
+ * g_file_set_attribute_string:
+ * @file: input #GFile.
+ * @attribute: a string containing the attribute's name.
+ * @value: a string containing the attribute's value.
+ * @flags: #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets @attribute of type %G_FILE_ATTRIBUTE_TYPE_STRING to @value. 
+ * If @attribute is of a different type, this operation will fail.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @attribute was successfully set, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attribute_string (GFile                *file,
+			     const char           *attribute,
+			     const char           *value,
+			     GFileQueryInfoFlags   flags,
+			     GCancellable         *cancellable,
+			     GError              **error)
+{
+  return g_file_set_attribute (file, attribute,
+			       G_FILE_ATTRIBUTE_TYPE_STRING, (gpointer)value,
+			       flags, cancellable, error);
+}
+
+/**
+ * g_file_set_attribute_byte_string:
+ * @file: input #GFile.
+ * @attribute: a string containing the attribute's name.
+ * @value: a string containing the attribute's new value.
+ * @flags: a #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets @attribute of type %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING to @value. 
+ * If @attribute is of a different type, this operation will fail, 
+ * returning %FALSE. 
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @attribute was successfully set to @value 
+ * in the @file, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attribute_byte_string  (GFile                *file,
+				   const char           *attribute,
+				   const char           *value,
+				   GFileQueryInfoFlags   flags,
+				   GCancellable         *cancellable,
+				   GError              **error)
+{
+  return g_file_set_attribute (file, attribute,
+			       G_FILE_ATTRIBUTE_TYPE_BYTE_STRING, (gpointer)value,
+			       flags, cancellable, error);
+}
+
+/**
+ * g_file_set_attribute_uint32:
+ * @file: input #GFile.
+ * @attribute: a string containing the attribute's name.
+ * @value: a #guint32 containing the attribute's new value.
+ * @flags: a #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets @attribute of type %G_FILE_ATTRIBUTE_TYPE_UINT32 to @value. 
+ * If @attribute is of a different type, this operation will fail.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @attribute was successfully set to @value 
+ * in the @file, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attribute_uint32 (GFile                *file,
+			     const char           *attribute,
+			     guint32               value,
+			     GFileQueryInfoFlags   flags,
+			     GCancellable         *cancellable,
+			     GError              **error)
+{
+  return g_file_set_attribute (file, attribute,
+			       G_FILE_ATTRIBUTE_TYPE_UINT32, &value,
+			       flags, cancellable, error);
+}
+
+/**
+ * g_file_set_attribute_int32:
+ * @file: input #GFile.
+ * @attribute: a string containing the attribute's name.
+ * @value: a #gint32 containing the attribute's new value.
+ * @flags: a #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets @attribute of type %G_FILE_ATTRIBUTE_TYPE_INT32 to @value. 
+ * If @attribute is of a different type, this operation will fail.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @attribute was successfully set to @value 
+ * in the @file, %FALSE otherwise. 
+ **/
+gboolean
+g_file_set_attribute_int32 (GFile                *file,
+			    const char           *attribute,
+			    gint32                value,
+			    GFileQueryInfoFlags   flags,
+			    GCancellable         *cancellable,
+			    GError              **error)
+{
+  return g_file_set_attribute (file, attribute,
+			       G_FILE_ATTRIBUTE_TYPE_INT32, &value,
+			       flags, cancellable, error);
+}
+
+/**
+ * g_file_set_attribute_uint64:
+ * @file: input #GFile. 
+ * @attribute: a string containing the attribute's name.
+ * @value: a #guint64 containing the attribute's new value.
+ * @flags: a #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets @attribute of type %G_FILE_ATTRIBUTE_TYPE_UINT64 to @value. 
+ * If @attribute is of a different type, this operation will fail.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @attribute was successfully set to @value 
+ * in the @file, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attribute_uint64 (GFile                *file,
+			     const char           *attribute,
+			     guint64               value,
+			     GFileQueryInfoFlags   flags,
+			     GCancellable         *cancellable,
+			     GError              **error)
+ {
+  return g_file_set_attribute (file, attribute,
+			       G_FILE_ATTRIBUTE_TYPE_UINT64, &value,
+			       flags, cancellable, error);
+}
+
+/**
+ * g_file_set_attribute_int64:
+ * @file: input #GFile.
+ * @attribute: a string containing the attribute's name.
+ * @value: a #guint64 containing the attribute's new value.
+ * @flags: a #GFileQueryInfoFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ * 
+ * Sets @attribute of type %G_FILE_ATTRIBUTE_TYPE_INT64 to @value. 
+ * If @attribute is of a different type, this operation will fail.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @attribute was successfully set, %FALSE otherwise.
+ **/
+gboolean
+g_file_set_attribute_int64 (GFile                *file,
+			    const char           *attribute,
+			    gint64                value,
+			    GFileQueryInfoFlags   flags,
+			    GCancellable         *cancellable,
+			    GError              **error)
+{
+  return g_file_set_attribute (file, attribute,
+			       G_FILE_ATTRIBUTE_TYPE_INT64, &value,
+			       flags, cancellable, error);
+}
+
+/**
+ * g_file_mount_mountable:
+ * @file: input #GFile.
+ * @flags: flags affecting the operation
+ * @mount_operation: a #GMountOperation, or %NULL to avoid user interaction.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied, or %NULL.
+ * @user_data: the data to pass to callback function
+ * 
+ * Mounts a file of type G_FILE_TYPE_MOUNTABLE.
+ * Using @mount_operation, you can request callbacks when, for instance, 
+ * passwords are needed during authentication.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_mount_mountable_finish() to get the result of the operation.
+ **/
+void
+g_file_mount_mountable (GFile               *file,
+			GMountMountFlags     flags,
+			GMountOperation     *mount_operation,
+			GCancellable        *cancellable,
+			GAsyncReadyCallback  callback,
+			gpointer             user_data)
+{
+  GFileIface *iface;
+
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->mount_mountable == NULL) 
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (file),
+					   callback,
+					   user_data,
+					   G_IO_ERROR,
+					   G_IO_ERROR_NOT_SUPPORTED,
+					   _("Operation not supported"));
+      return;
+    }
+  
+  (* iface->mount_mountable) (file,
+			      flags,
+			      mount_operation,
+			      cancellable,
+			      callback,
+			      user_data);
+}
+
+/**
+ * g_file_mount_mountable_finish:
+ * @file: input #GFile.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, or %NULL
+ *
+ * Finishes a mount operation. See g_file_mount_mountable() for details.
+ * 
+ * Finish an asynchronous mount operation that was started 
+ * with g_file_mount_mountable().
+ *
+ * Returns: a #GFile or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_file_mount_mountable_finish (GFile         *file,
+			       GAsyncResult  *result,
+			       GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->mount_mountable_finish) (file, result, error);
+}
+
+/**
+ * g_file_unmount_mountable:
+ * @file: input #GFile.
+ * @flags: flags affecting the operation
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied, or %NULL.
+ * @user_data: the data to pass to callback function
+ *
+ * Unmounts a file of type G_FILE_TYPE_MOUNTABLE.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * g_file_unmount_mountable_finish() to get the result of the operation.
+ **/
+void
+g_file_unmount_mountable (GFile               *file,
+			  GMountUnmountFlags   flags,
+			  GCancellable        *cancellable,
+			  GAsyncReadyCallback  callback,
+			  gpointer             user_data)
+{
+  GFileIface *iface;
+  
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  
+  if (iface->unmount_mountable == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (file),
+					   callback,
+					   user_data,
+					   G_IO_ERROR,
+					   G_IO_ERROR_NOT_SUPPORTED,
+					   _("Operation not supported"));
+      return;
+    }
+  
+  (* iface->unmount_mountable) (file,
+				flags,
+				cancellable,
+				callback,
+				user_data);
+}
+
+/**
+ * g_file_unmount_mountable_finish:
+ * @file: input #GFile.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, or %NULL
+ *
+ * Finishes an unmount operation, see g_file_unmount_mountable() for details.
+ * 
+ * Finish an asynchronous unmount operation that was started 
+ * with g_file_unmount_mountable().
+ *
+ * Returns: %TRUE if the operation finished successfully. %FALSE
+ * otherwise.
+ **/
+gboolean
+g_file_unmount_mountable_finish (GFile         *file,
+				 GAsyncResult  *result,
+				 GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->unmount_mountable_finish) (file, result, error);
+}
+
+/**
+ * g_file_eject_mountable:
+ * @file: input #GFile.
+ * @flags: flags affecting the operation
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied, or %NULL.
+ * @user_data: the data to pass to callback function
+ * 
+ * Starts an asynchronous eject on a mountable.  
+ * When this operation has completed, @callback will be called with
+ * @user_user data, and the operation can be finalized with 
+ * g_file_eject_mountable_finish().
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ **/
+void
+g_file_eject_mountable (GFile               *file,
+			GMountUnmountFlags   flags,
+			GCancellable        *cancellable,
+			GAsyncReadyCallback  callback,
+			gpointer             user_data)
+{
+  GFileIface *iface;
+
+  g_return_if_fail (G_IS_FILE (file));
+
+  iface = G_FILE_GET_IFACE (file);
+  
+  if (iface->eject_mountable == NULL) 
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (file),
+					   callback,
+					   user_data,
+					   G_IO_ERROR,
+					   G_IO_ERROR_NOT_SUPPORTED,
+					   _("Operation not supported"));
+      return;
+    }
+  
+  (* iface->eject_mountable) (file,
+			      flags,
+			      cancellable,
+			      callback,
+			      user_data);
+}
+
+/**
+ * g_file_eject_mountable_finish:
+ * @file: input #GFile.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous eject operation started by 
+ * g_file_eject_mountable().
+ * 
+ * Returns: %TRUE if the @file was ejected successfully. %FALSE 
+ * otherwise.
+ **/
+gboolean
+g_file_eject_mountable_finish (GFile         *file,
+			       GAsyncResult  *result,
+			       GError       **error)
+{
+  GFileIface *iface;
+  
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_FILE_GET_IFACE (file);
+  return (* iface->eject_mountable_finish) (file, result, error);
+}
+
+/**
+ * g_file_monitor_directory:
+ * @file: input #GFile.
+ * @flags: a set of #GFileMonitorFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL.
+ * 
+ * Obtains a directory monitor for the given file.
+ * This may fail if directory monitoring is not supported.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GFileMonitor for the given @file, or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileMonitor*
+g_file_monitor_directory (GFile             *file,
+			  GFileMonitorFlags  flags,
+			  GCancellable      *cancellable,
+			  GError           **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  iface = G_FILE_GET_IFACE (file);
+
+  if (iface->monitor_dir == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+      return NULL;
+    }
+
+  return (* iface->monitor_dir) (file, flags, cancellable, error);
+}
+
+/**
+ * g_file_monitor_file:
+ * @file: input #GFile.
+ * @flags: a set of #GFileMonitorFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL.
+ * 
+ * Obtains a file monitor for the given file. If no file notification
+ * mechanism exists, then regular polling of the file is used.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GFileMonitor for the given @file, or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ **/
+GFileMonitor*
+g_file_monitor_file (GFile             *file,
+		     GFileMonitorFlags  flags,
+		     GCancellable      *cancellable,
+		     GError           **error)
+{
+  GFileIface *iface;
+  GFileMonitor *monitor;
+  
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  iface = G_FILE_GET_IFACE (file);
+
+  monitor = NULL;
+  
+  if (iface->monitor_file)
+    monitor = (* iface->monitor_file) (file, flags, cancellable, NULL);
+
+/* Fallback to polling */
+  if (monitor == NULL)
+    monitor = _g_poll_file_monitor_new (file);
+
+  return monitor;
+}
+
+/**
+ * g_file_monitor:
+ * @file: input #GFile
+ * @flags: a set of #GFileMonitorFlags
+ * @cancellable: optional #GCancellable object, %NULL to ignore
+ * @error: a #GError, or %NULL
+ * 
+ * Obtains a file or directory monitor for the given file, depending
+ * on the type of the file.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: a #GFileMonitor for the given @file, or %NULL on error.
+ *     Free the returned object with g_object_unref().
+ *
+ * Since: 2.18
+ */
+GFileMonitor*
+g_file_monitor (GFile             *file,
+	        GFileMonitorFlags  flags,
+		GCancellable      *cancellable,
+		GError           **error)
+{
+  if (g_file_query_file_type (file, 0, cancellable) == G_FILE_TYPE_DIRECTORY)
+    return g_file_monitor_directory (file, flags, cancellable, error);
+  else
+    return g_file_monitor_file (file, flags, cancellable, error);
+}
+
+/********************************************
+ *   Default implementation of async ops    *
+ ********************************************/
+
+typedef struct {
+  char *attributes;
+  GFileQueryInfoFlags flags;
+  GFileInfo *info;
+} QueryInfoAsyncData;
+
+static void
+query_info_data_free (QueryInfoAsyncData *data)
+{
+  if (data->info)
+    g_object_unref (data->info);
+  g_free (data->attributes);
+  g_free (data);
+}
+
+static void
+query_info_async_thread (GSimpleAsyncResult *res,
+			 GObject            *object,
+			 GCancellable       *cancellable)
+{
+  GError *error = NULL;
+  QueryInfoAsyncData *data;
+  GFileInfo *info;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+  
+  info = g_file_query_info (G_FILE (object), data->attributes, data->flags, cancellable, &error);
+
+  if (info == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->info = info;
+}
+
+static void
+g_file_real_query_info_async (GFile               *file,
+			      const char          *attributes,
+			      GFileQueryInfoFlags  flags,
+			      int                  io_priority,
+			      GCancellable        *cancellable,
+			      GAsyncReadyCallback  callback,
+			      gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  QueryInfoAsyncData *data;
+
+  data = g_new0 (QueryInfoAsyncData, 1);
+  data->attributes = g_strdup (attributes);
+  data->flags = flags;
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_query_info_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_info_data_free);
+  
+  g_simple_async_result_run_in_thread (res, query_info_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileInfo *
+g_file_real_query_info_finish (GFile         *file,
+			       GAsyncResult  *res,
+			       GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  QueryInfoAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_query_info_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->info)
+    return g_object_ref (data->info);
+  
+  return NULL;
+}
+
+typedef struct {
+  char *attributes;
+  GFileInfo *info;
+} QueryFilesystemInfoAsyncData;
+
+static void
+query_filesystem_info_data_free (QueryFilesystemInfoAsyncData *data)
+{
+  if (data->info)
+    g_object_unref (data->info);
+  g_free (data->attributes);
+  g_free (data);
+}
+
+static void
+query_filesystem_info_async_thread (GSimpleAsyncResult *res,
+                                    GObject            *object,
+                                    GCancellable       *cancellable)
+{
+  GError *error = NULL;
+  QueryFilesystemInfoAsyncData *data;
+  GFileInfo *info;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+  
+  info = g_file_query_filesystem_info (G_FILE (object), data->attributes, cancellable, &error);
+
+  if (info == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->info = info;
+}
+
+static void
+g_file_real_query_filesystem_info_async (GFile               *file,
+                                         const char          *attributes,
+                                         int                  io_priority,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  QueryFilesystemInfoAsyncData *data;
+
+  data = g_new0 (QueryFilesystemInfoAsyncData, 1);
+  data->attributes = g_strdup (attributes);
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_query_filesystem_info_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_filesystem_info_data_free);
+  
+  g_simple_async_result_run_in_thread (res, query_filesystem_info_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileInfo *
+g_file_real_query_filesystem_info_finish (GFile         *file,
+                                          GAsyncResult  *res,
+                                          GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  QueryFilesystemInfoAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_query_filesystem_info_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->info)
+    return g_object_ref (data->info);
+  
+  return NULL;
+}
+
+typedef struct {
+  char *attributes;
+  GFileQueryInfoFlags flags;
+  GFileEnumerator *enumerator;
+} EnumerateChildrenAsyncData;
+
+static void
+enumerate_children_data_free (EnumerateChildrenAsyncData *data)
+{
+  if (data->enumerator)
+    g_object_unref (data->enumerator);
+  g_free (data->attributes);
+  g_free (data);
+}
+
+static void
+enumerate_children_async_thread (GSimpleAsyncResult *res,
+				 GObject            *object,
+				 GCancellable       *cancellable)
+{
+  GError *error = NULL;
+  EnumerateChildrenAsyncData *data;
+  GFileEnumerator *enumerator;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+  
+  enumerator = g_file_enumerate_children (G_FILE (object), data->attributes, data->flags, cancellable, &error);
+
+  if (enumerator == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->enumerator = enumerator;
+}
+
+static void
+g_file_real_enumerate_children_async (GFile               *file,
+				      const char          *attributes,
+				      GFileQueryInfoFlags  flags,
+				      int                  io_priority,
+				      GCancellable        *cancellable,
+				      GAsyncReadyCallback  callback,
+				      gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  EnumerateChildrenAsyncData *data;
+
+  data = g_new0 (EnumerateChildrenAsyncData, 1);
+  data->attributes = g_strdup (attributes);
+  data->flags = flags;
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_enumerate_children_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)enumerate_children_data_free);
+  
+  g_simple_async_result_run_in_thread (res, enumerate_children_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileEnumerator *
+g_file_real_enumerate_children_finish (GFile         *file,
+				       GAsyncResult  *res,
+				       GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  EnumerateChildrenAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_enumerate_children_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->enumerator)
+    return g_object_ref (data->enumerator);
+  
+  return NULL;
+}
+
+static void
+open_read_async_thread (GSimpleAsyncResult *res,
+			GObject            *object,
+			GCancellable       *cancellable)
+{
+  GFileIface *iface;
+  GFileInputStream *stream;
+  GError *error = NULL;
+
+  iface = G_FILE_GET_IFACE (object);
+
+  if (iface->read_fn == NULL)
+    {
+      g_set_error_literal (&error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Operation not supported"));
+
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+
+      return;
+    }
+  
+  stream = iface->read_fn (G_FILE (object), cancellable, &error);
+
+  if (stream == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+}
+
+static void
+g_file_real_read_async (GFile               *file,
+			int                  io_priority,
+			GCancellable        *cancellable,
+			GAsyncReadyCallback  callback,
+			gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_read_async);
+  
+  g_simple_async_result_run_in_thread (res, open_read_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileInputStream *
+g_file_real_read_finish (GFile         *file,
+			 GAsyncResult  *res,
+			 GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  gpointer op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_read_async);
+
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  if (op)
+    return g_object_ref (op);
+  
+  return NULL;
+}
+
+static void
+append_to_async_thread (GSimpleAsyncResult *res,
+			GObject            *object,
+			GCancellable       *cancellable)
+{
+  GFileIface *iface;
+  GFileCreateFlags *data;
+  GFileOutputStream *stream;
+  GError *error = NULL;
+
+  iface = G_FILE_GET_IFACE (object);
+
+  data = g_simple_async_result_get_op_res_gpointer (res);
+
+  stream = iface->append_to (G_FILE (object), *data, cancellable, &error);
+
+  if (stream == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+}
+
+static void
+g_file_real_append_to_async (GFile               *file,
+			     GFileCreateFlags     flags,
+			     int                  io_priority,
+			     GCancellable        *cancellable,
+			     GAsyncReadyCallback  callback,
+			     gpointer             user_data)
+{
+  GFileCreateFlags *data;
+  GSimpleAsyncResult *res;
+
+  data = g_new0 (GFileCreateFlags, 1);
+  *data = flags;
+
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_append_to_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)g_free);
+
+  g_simple_async_result_run_in_thread (res, append_to_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileOutputStream *
+g_file_real_append_to_finish (GFile         *file,
+			      GAsyncResult  *res,
+			      GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  gpointer op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_append_to_async);
+
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  if (op)
+    return g_object_ref (op);
+  
+  return NULL;
+}
+
+static void
+create_async_thread (GSimpleAsyncResult *res,
+		     GObject            *object,
+		     GCancellable       *cancellable)
+{
+  GFileIface *iface;
+  GFileCreateFlags *data;
+  GFileOutputStream *stream;
+  GError *error = NULL;
+
+  iface = G_FILE_GET_IFACE (object);
+
+  data = g_simple_async_result_get_op_res_gpointer (res);
+
+  stream = iface->create (G_FILE (object), *data, cancellable, &error);
+
+  if (stream == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+}
+
+static void
+g_file_real_create_async (GFile               *file,
+			  GFileCreateFlags     flags,
+			  int                  io_priority,
+			  GCancellable        *cancellable,
+			  GAsyncReadyCallback  callback,
+			  gpointer             user_data)
+{
+  GFileCreateFlags *data;
+  GSimpleAsyncResult *res;
+
+  data = g_new0 (GFileCreateFlags, 1);
+  *data = flags;
+
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_create_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)g_free);
+
+  g_simple_async_result_run_in_thread (res, create_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileOutputStream *
+g_file_real_create_finish (GFile         *file,
+			   GAsyncResult  *res,
+			   GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  gpointer op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_create_async);
+
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  if (op)
+    return g_object_ref (op);
+  
+  return NULL;
+}
+
+typedef struct {
+  GFileOutputStream *stream;
+  char *etag;
+  gboolean make_backup;
+  GFileCreateFlags flags;
+} ReplaceAsyncData;
+
+static void
+replace_async_data_free (ReplaceAsyncData *data)
+{
+  if (data->stream)
+    g_object_unref (data->stream);
+  g_free (data->etag);
+  g_free (data);
+}
+
+static void
+replace_async_thread (GSimpleAsyncResult *res,
+		      GObject            *object,
+		      GCancellable       *cancellable)
+{
+  GFileIface *iface;
+  GFileOutputStream *stream;
+  GError *error = NULL;
+  ReplaceAsyncData *data;
+
+  iface = G_FILE_GET_IFACE (object);
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+
+  stream = iface->replace (G_FILE (object),
+			   data->etag,
+			   data->make_backup,
+			   data->flags,
+			   cancellable,
+			   &error);
+
+  if (stream == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->stream = stream;
+}
+
+static void
+g_file_real_replace_async (GFile               *file,
+			   const char          *etag,
+			   gboolean             make_backup,
+			   GFileCreateFlags     flags,
+			   int                  io_priority,
+			   GCancellable        *cancellable,
+			   GAsyncReadyCallback  callback,
+			   gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  ReplaceAsyncData *data;
+
+  data = g_new0 (ReplaceAsyncData, 1);
+  data->etag = g_strdup (etag);
+  data->make_backup = make_backup;
+  data->flags = flags;
+
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_replace_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)replace_async_data_free);
+
+  g_simple_async_result_run_in_thread (res, replace_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileOutputStream *
+g_file_real_replace_finish (GFile         *file,
+			    GAsyncResult  *res,
+			    GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  ReplaceAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_replace_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->stream)
+    return g_object_ref (data->stream);
+  
+  return NULL;
+}
+
+typedef struct {
+  char *name;
+  GFile *file;
+} SetDisplayNameAsyncData;
+
+static void
+set_display_name_data_free (SetDisplayNameAsyncData *data)
+{
+  g_free (data->name);
+  if (data->file)
+    g_object_unref (data->file);
+  g_free (data);
+}
+
+static void
+set_display_name_async_thread (GSimpleAsyncResult *res,
+			       GObject            *object,
+			       GCancellable       *cancellable)
+{
+  GError *error = NULL;
+  SetDisplayNameAsyncData *data;
+  GFile *file;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+  
+  file = g_file_set_display_name (G_FILE (object), data->name, cancellable, &error);
+
+  if (file == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->file = file;
+}
+
+static void
+g_file_real_set_display_name_async (GFile               *file,	
+				    const char          *display_name,
+				    int                  io_priority,
+				    GCancellable        *cancellable,
+				    GAsyncReadyCallback  callback,
+				    gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  SetDisplayNameAsyncData *data;
+
+  data = g_new0 (SetDisplayNameAsyncData, 1);
+  data->name = g_strdup (display_name);
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_set_display_name_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)set_display_name_data_free);
+  
+  g_simple_async_result_run_in_thread (res, set_display_name_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFile *
+g_file_real_set_display_name_finish (GFile         *file,
+				     GAsyncResult  *res,
+				     GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  SetDisplayNameAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_set_display_name_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->file)
+    return g_object_ref (data->file);
+  
+  return NULL;
+}
+
+typedef struct {
+  GFileQueryInfoFlags flags;
+  GFileInfo *info;
+  gboolean res;
+  GError *error;
+} SetInfoAsyncData;
+
+static void
+set_info_data_free (SetInfoAsyncData *data)
+{
+  if (data->info)
+    g_object_unref (data->info);
+  if (data->error)
+    g_error_free (data->error);
+  g_free (data);
+}
+
+static void
+set_info_async_thread (GSimpleAsyncResult *res,
+		       GObject            *object,
+		       GCancellable       *cancellable)
+{
+  SetInfoAsyncData *data;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+  
+  data->error = NULL;
+  data->res = g_file_set_attributes_from_info (G_FILE (object),
+					       data->info,
+					       data->flags,
+					       cancellable,
+					       &data->error);
+}
+
+static void
+g_file_real_set_attributes_async (GFile               *file,
+				  GFileInfo           *info,
+				  GFileQueryInfoFlags  flags,
+				  int                  io_priority,
+				  GCancellable        *cancellable,
+				  GAsyncReadyCallback  callback,
+				  gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  SetInfoAsyncData *data;
+
+  data = g_new0 (SetInfoAsyncData, 1);
+  data->info = g_file_info_dup (info);
+  data->flags = flags;
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_set_attributes_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)set_info_data_free);
+  
+  g_simple_async_result_run_in_thread (res, set_info_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_file_real_set_attributes_finish (GFile         *file,
+				   GAsyncResult  *res,
+				   GFileInfo    **info,
+				   GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  SetInfoAsyncData *data;
+  
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_set_attributes_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+
+  if (info) 
+    *info = g_object_ref (data->info);
+
+  if (error != NULL && data->error) 
+    *error = g_error_copy (data->error);
+  
+  return data->res;
+}
+
+static void
+find_enclosing_mount_async_thread (GSimpleAsyncResult *res,
+				    GObject            *object,
+				    GCancellable       *cancellable)
+{
+  GError *error = NULL;
+  GMount *mount;
+  
+  mount = g_file_find_enclosing_mount (G_FILE (object), cancellable, &error);
+
+  if (mount == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    g_simple_async_result_set_op_res_gpointer (res, mount, (GDestroyNotify)g_object_unref);
+}
+
+static void
+g_file_real_find_enclosing_mount_async (GFile               *file,
+					int                  io_priority,
+					GCancellable        *cancellable,
+					GAsyncReadyCallback  callback,
+					gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  
+  res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_find_enclosing_mount_async);
+  
+  g_simple_async_result_run_in_thread (res, find_enclosing_mount_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GMount *
+g_file_real_find_enclosing_mount_finish (GFile         *file,
+					  GAsyncResult  *res,
+					  GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  GMount *mount;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_find_enclosing_mount_async);
+
+  mount = g_simple_async_result_get_op_res_gpointer (simple);
+  return g_object_ref (mount);
+}
+
+
+typedef struct {
+  GFile *source;
+  GFile *destination;
+  GFileCopyFlags flags;
+  GFileProgressCallback progress_cb;
+  gpointer progress_cb_data;
+  GIOSchedulerJob *job;
+} CopyAsyncData;
+
+static void
+copy_async_data_free (CopyAsyncData *data)
+{
+  g_object_unref (data->source);
+  g_object_unref (data->destination);
+  g_free (data);
+}
+
+typedef struct {
+  CopyAsyncData *data;
+  goffset current_num_bytes;
+  goffset total_num_bytes;
+} ProgressData;
+
+static gboolean
+copy_async_progress_in_main (gpointer user_data)
+{
+  ProgressData *progress = user_data;
+  CopyAsyncData *data = progress->data;
+
+  data->progress_cb (progress->current_num_bytes,
+		     progress->total_num_bytes,
+		     data->progress_cb_data);
+
+  return FALSE;
+}
+
+static gboolean
+mainloop_barrier (gpointer user_data)
+{
+  /* Does nothing, but ensures all queued idles before
+     this are run */
+  return FALSE;
+}
+
+
+static void
+copy_async_progress_callback (goffset  current_num_bytes,
+			      goffset  total_num_bytes,
+			      gpointer user_data)
+{
+  CopyAsyncData *data = user_data;
+  ProgressData *progress;
+
+  progress = g_new (ProgressData, 1);
+  progress->data = data;
+  progress->current_num_bytes = current_num_bytes;
+  progress->total_num_bytes = total_num_bytes;
+  
+  g_io_scheduler_job_send_to_mainloop_async (data->job,
+					     copy_async_progress_in_main,
+					     progress,
+					     g_free);
+}
+
+static gboolean
+copy_async_thread (GIOSchedulerJob *job,
+		   GCancellable    *cancellable,
+ 		   gpointer         user_data)
+{
+  GSimpleAsyncResult *res;
+  CopyAsyncData *data;
+  gboolean result;
+  GError *error;
+
+  res = user_data;
+  data = g_simple_async_result_get_op_res_gpointer (res);
+
+  error = NULL;
+  data->job = job;
+  result = g_file_copy (data->source,
+			data->destination,
+			data->flags,
+			cancellable,
+			(data->progress_cb != NULL) ? copy_async_progress_callback : NULL,
+			data,
+			&error);
+
+  /* Ensure all progress callbacks are done running in main thread */
+  if (data->progress_cb != NULL)
+    g_io_scheduler_job_send_to_mainloop (job,
+					 mainloop_barrier,
+					 NULL, NULL);
+  
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+
+  g_simple_async_result_complete_in_idle (res);
+
+  return FALSE;
+}
+
+static void
+g_file_real_copy_async (GFile                  *source,
+			GFile                  *destination,
+			GFileCopyFlags          flags,
+			int                     io_priority,
+			GCancellable           *cancellable,
+			GFileProgressCallback   progress_callback,
+			gpointer                progress_callback_data,
+			GAsyncReadyCallback     callback,
+			gpointer                user_data)
+{
+  GSimpleAsyncResult *res;
+  CopyAsyncData *data;
+
+  data = g_new0 (CopyAsyncData, 1);
+  data->source = g_object_ref (source);
+  data->destination = g_object_ref (destination);
+  data->flags = flags;
+  data->progress_cb = progress_callback;
+  data->progress_cb_data = progress_callback_data;
+
+  res = g_simple_async_result_new (G_OBJECT (source), callback, user_data, g_file_real_copy_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)copy_async_data_free);
+
+  g_io_scheduler_push_job (copy_async_thread, res, g_object_unref, io_priority, cancellable);
+}
+
+static gboolean
+g_file_real_copy_finish (GFile        *file,
+			 GAsyncResult *res,
+			 GError      **error)
+{
+  /* Error handled in g_file_copy_finish() */
+  return TRUE;
+}
+
+
+/********************************************
+ *   Default VFS operations                 *
+ ********************************************/
+
+/**
+ * g_file_new_for_path:
+ * @path: a string containing a relative or absolute path.
+ * 
+ * Constructs a #GFile for a given path. This operation never
+ * fails, but the returned object might not support any I/O
+ * operation if @path is malformed.
+ * 
+ * Returns: a new #GFile for the given @path. 
+ **/
+GFile *
+g_file_new_for_path (const char *path)
+{
+  g_return_val_if_fail (path != NULL, NULL);
+
+  return g_vfs_get_file_for_path (g_vfs_get_default (), path);
+}
+ 
+/**
+ * g_file_new_for_uri:
+ * @uri: a string containing a URI.
+ * 
+ * Constructs a #GFile for a given URI. This operation never 
+ * fails, but the returned object might not support any I/O 
+ * operation if @uri is malformed or if the uri type is 
+ * not supported.
+ * 
+ * Returns: a #GFile for the given @uri.
+ **/ 
+GFile *
+g_file_new_for_uri (const char *uri)
+{
+  g_return_val_if_fail (uri != NULL, NULL);
+
+  return g_vfs_get_file_for_uri (g_vfs_get_default (), uri);
+}
+  
+/**
+ * g_file_parse_name:
+ * @parse_name: a file name or path to be parsed.
+ * 
+ * Constructs a #GFile with the given @parse_name (i.e. something given by g_file_get_parse_name()).
+ * This operation never fails, but the returned object might not support any I/O
+ * operation if the @parse_name cannot be parsed.
+ * 
+ * Returns: a new #GFile.
+ **/
+GFile *
+g_file_parse_name (const char *parse_name)
+{
+  g_return_val_if_fail (parse_name != NULL, NULL);
+
+  return g_vfs_parse_name (g_vfs_get_default (), parse_name);
+}
+
+static gboolean
+is_valid_scheme_character (char c)
+{
+  return g_ascii_isalnum (c) || c == '+' || c == '-' || c == '.';
+}
+
+/* Following RFC 2396, valid schemes are built like:
+ *       scheme        = alpha *( alpha | digit | "+" | "-" | "." )
+ */
+static gboolean
+has_valid_scheme (const char *uri)
+{
+  const char *p;
+  
+  p = uri;
+  
+  if (!g_ascii_isalpha (*p))
+    return FALSE;
+
+  do {
+    p++;
+  } while (is_valid_scheme_character (*p));
+
+  return *p == ':';
+}
+
+/**
+ * g_file_new_for_commandline_arg:
+ * @arg: a command line string.
+ * 
+ * Creates a #GFile with the given argument from the command line. The value of
+ * @arg can be either a URI, an absolute path or a relative path resolved
+ * relative to the current working directory.
+ * This operation never fails, but the returned object might not support any
+ * I/O operation if @arg points to a malformed path.
+ *
+ * Returns: a new #GFile. 
+ **/
+GFile *
+g_file_new_for_commandline_arg (const char *arg)
+{
+  GFile *file;
+  char *filename;
+  char *current_dir;
+  
+  g_return_val_if_fail (arg != NULL, NULL);
+  
+  if (g_path_is_absolute (arg))
+    return g_file_new_for_path (arg);
+
+  if (has_valid_scheme (arg))
+    return g_file_new_for_uri (arg);
+    
+  current_dir = g_get_current_dir ();
+  filename = g_build_filename (current_dir, arg, NULL);
+  g_free (current_dir);
+  
+  file = g_file_new_for_path (filename);
+  g_free (filename);
+  
+  return file;
+}
+
+/**
+ * g_file_mount_enclosing_volume:
+ * @location: input #GFile.
+ * @flags: flags affecting the operation
+ * @mount_operation: a #GMountOperation or %NULL to avoid user interaction.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied, or %NULL.
+ * @user_data: the data to pass to callback function
+ * 
+ * Starts a @mount_operation, mounting the volume that contains the file @location. 
+ * 
+ * When this operation has completed, @callback will be called with
+ * @user_user data, and the operation can be finalized with 
+ * g_file_mount_enclosing_volume_finish().
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ **/
+void
+g_file_mount_enclosing_volume (GFile               *location,
+			       GMountMountFlags     flags,
+			       GMountOperation     *mount_operation,
+			       GCancellable        *cancellable,
+			       GAsyncReadyCallback  callback,
+			       gpointer             user_data)
+{
+  GFileIface *iface;
+
+  g_return_if_fail (G_IS_FILE (location));
+
+  iface = G_FILE_GET_IFACE (location);
+
+  if (iface->mount_enclosing_volume == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (location),
+					   callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   _("volume doesn't implement mount"));
+      
+      return;
+    }
+  
+  (* iface->mount_enclosing_volume) (location, flags, mount_operation, cancellable, callback, user_data);
+
+}
+
+/**
+ * g_file_mount_enclosing_volume_finish:
+ * @location: input #GFile.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes a mount operation started by g_file_mount_enclosing_volume().
+ * 
+ * Returns: %TRUE if successful. If an error
+ * has occurred, this function will return %FALSE and set @error
+ * appropriately if present.
+ **/
+gboolean
+g_file_mount_enclosing_volume_finish (GFile         *location,
+				      GAsyncResult  *result,
+				      GError       **error)
+{
+  GFileIface *iface;
+
+  g_return_val_if_fail (G_IS_FILE (location), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_FILE_GET_IFACE (location);
+
+  return (* iface->mount_enclosing_volume_finish) (location, result, error);
+}
+
+/********************************************
+ *   Utility functions                      *
+ ********************************************/
+
+/**
+ * g_file_query_default_handler:
+ * @file: a #GFile to open.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ *
+ * Returns the #GAppInfo that is registered as the default
+ * application to handle the file specified by @file.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *
+ * Returns: a #GAppInfo if the handle was found, %NULL if there were errors.
+ * When you are done with it, release it with g_object_unref()
+ **/
+GAppInfo *
+g_file_query_default_handler (GFile                  *file,
+			      GCancellable           *cancellable,
+			      GError                **error)
+{
+  char *uri_scheme;
+  const char *content_type;
+  GAppInfo *appinfo;
+  GFileInfo *info;
+  char *path;
+  
+  uri_scheme = g_file_get_uri_scheme (file);
+  appinfo = g_app_info_get_default_for_uri_scheme (uri_scheme);
+  g_free (uri_scheme);
+
+  if (appinfo != NULL)
+    return appinfo;
+
+  info = g_file_query_info (file,
+			    G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+			    0,
+			    cancellable,
+			    error);
+  if (info == NULL)
+    return NULL;
+
+  appinfo = NULL;
+
+  content_type = g_file_info_get_content_type (info);
+  if (content_type)
+    {
+      /* Don't use is_native(), as we want to support fuse paths if availible */
+      path = g_file_get_path (file);
+      appinfo = g_app_info_get_default_for_type (content_type,
+						 path == NULL);
+      g_free (path);
+    }
+  
+  g_object_unref (info);
+
+  if (appinfo != NULL)
+    return appinfo;
+
+  g_set_error_literal (error, G_IO_ERROR,
+                       G_IO_ERROR_NOT_SUPPORTED,
+                       _("No application is registered as handling this file"));
+  return NULL;
+  
+}
+
+
+#define GET_CONTENT_BLOCK_SIZE 8192
+
+/**
+ * g_file_load_contents:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @contents: a location to place the contents of the file.
+ * @length: a location to place the length of the contents of the file,
+ *    or %NULL if the length is not needed
+ * @etag_out: a location to place the current entity tag for the file,
+ *    or %NULL if the entity tag is not needed
+ * @error: a #GError, or %NULL
+ *
+ * Loads the content of the file into memory. The data is always 
+ * zero-terminated, but this is not included in the resultant @length.
+ * The returned @content should be freed with g_free() when no longer
+ * needed.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if the @file's contents were successfully loaded.
+ * %FALSE if there were errors.
+ **/
+gboolean
+g_file_load_contents (GFile         *file,
+		      GCancellable  *cancellable,
+		      char         **contents,
+		      gsize         *length,
+		      char         **etag_out,
+		      GError       **error)
+{
+  GFileInputStream *in;
+  GByteArray *content;
+  gsize pos;
+  gssize res;
+  GFileInfo *info;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (contents != NULL, FALSE);
+
+  in = g_file_read (file, cancellable, error);
+  if (in == NULL)
+    return FALSE;
+
+  content = g_byte_array_new ();
+  pos = 0;
+  
+  g_byte_array_set_size (content, pos + GET_CONTENT_BLOCK_SIZE + 1);
+  while ((res = g_input_stream_read (G_INPUT_STREAM (in),
+				     content->data + pos,
+				     GET_CONTENT_BLOCK_SIZE,
+				     cancellable, error)) > 0)
+    {
+      pos += res;
+      g_byte_array_set_size (content, pos + GET_CONTENT_BLOCK_SIZE + 1);
+    }
+
+  if (etag_out)
+    {
+      *etag_out = NULL;
+      
+      info = g_file_input_stream_query_info (in,
+					     G_FILE_ATTRIBUTE_ETAG_VALUE,
+					     cancellable,
+					     NULL);
+      if (info)
+	{
+	  *etag_out = g_strdup (g_file_info_get_etag (info));
+	  g_object_unref (info);
+	}
+    } 
+
+  /* Ignore errors on close */
+  g_input_stream_close (G_INPUT_STREAM (in), cancellable, NULL);
+  g_object_unref (in);
+
+  if (res < 0)
+    {
+      /* error is set already */
+      g_byte_array_free (content, TRUE);
+      return FALSE;
+    }
+
+  if (length)
+    *length = pos;
+
+  /* Zero terminate (we got an extra byte allocated for this */
+  content->data[pos] = 0;
+  
+  *contents = (char *)g_byte_array_free (content, FALSE);
+  
+  return TRUE;
+}
+
+typedef struct {
+  GFile *file;
+  GError *error;
+  GCancellable *cancellable;
+  GFileReadMoreCallback read_more_callback;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GByteArray *content;
+  gsize pos;
+  char *etag;
+} LoadContentsData;
+
+
+static void
+load_contents_data_free (LoadContentsData *data)
+{
+  if (data->error)
+    g_error_free (data->error);
+  if (data->cancellable)
+    g_object_unref (data->cancellable);
+  if (data->content)
+    g_byte_array_free (data->content, TRUE);
+  g_free (data->etag);
+  g_object_unref (data->file);
+  g_free (data);
+}
+
+static void
+load_contents_close_callback (GObject      *obj,
+			      GAsyncResult *close_res,
+			      gpointer      user_data)
+{
+  GInputStream *stream = G_INPUT_STREAM (obj);
+  LoadContentsData *data = user_data;
+  GSimpleAsyncResult *res;
+
+  /* Ignore errors here, we're only reading anyway */
+  g_input_stream_close_finish (stream, close_res, NULL);
+  g_object_unref (stream);
+
+  res = g_simple_async_result_new (G_OBJECT (data->file),
+				   data->callback,
+				   data->user_data,
+				   g_file_load_contents_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)load_contents_data_free);
+  g_simple_async_result_complete (res);
+  g_object_unref (res);
+}
+
+static void
+load_contents_fstat_callback (GObject      *obj,
+			      GAsyncResult *stat_res,
+			      gpointer      user_data)
+{
+  GInputStream *stream = G_INPUT_STREAM (obj);
+  LoadContentsData *data = user_data;
+  GFileInfo *info;
+
+  info = g_file_input_stream_query_info_finish (G_FILE_INPUT_STREAM (stream),
+						   stat_res, NULL);
+  if (info)
+    {
+      data->etag = g_strdup (g_file_info_get_etag (info));
+      g_object_unref (info);
+    }
+
+  g_input_stream_close_async (stream, 0,
+			      data->cancellable,
+			      load_contents_close_callback, data);
+}
+
+static void
+load_contents_read_callback (GObject      *obj,
+			     GAsyncResult *read_res,
+			     gpointer      user_data)
+{
+  GInputStream *stream = G_INPUT_STREAM (obj);
+  LoadContentsData *data = user_data;
+  GError *error = NULL;
+  gssize read_size;
+
+  read_size = g_input_stream_read_finish (stream, read_res, &error);
+
+  if (read_size < 0) 
+    {
+      /* Error or EOF, close the file */
+      data->error = error;
+      g_input_stream_close_async (stream, 0,
+				  data->cancellable,
+				  load_contents_close_callback, data);
+    }
+  else if (read_size == 0)
+    {
+      g_file_input_stream_query_info_async (G_FILE_INPUT_STREAM (stream),
+					    G_FILE_ATTRIBUTE_ETAG_VALUE,
+					    0,
+					    data->cancellable,
+					    load_contents_fstat_callback,
+					    data);
+    }
+  else if (read_size > 0)
+    {
+      data->pos += read_size;
+      
+      g_byte_array_set_size (data->content,
+			     data->pos + GET_CONTENT_BLOCK_SIZE);
+
+
+      if (data->read_more_callback &&
+	  !data->read_more_callback ((char *)data->content->data, data->pos, data->user_data))
+	g_file_input_stream_query_info_async (G_FILE_INPUT_STREAM (stream),
+					      G_FILE_ATTRIBUTE_ETAG_VALUE,
+					      0,
+					      data->cancellable,
+					      load_contents_fstat_callback,
+					      data);
+      else 
+	g_input_stream_read_async (stream,
+				   data->content->data + data->pos,
+				   GET_CONTENT_BLOCK_SIZE,
+				   0,
+				   data->cancellable,
+				   load_contents_read_callback,
+				   data);
+    }
+}
+
+static void
+load_contents_open_callback (GObject      *obj,
+			     GAsyncResult *open_res,
+			     gpointer      user_data)
+{
+  GFile *file = G_FILE (obj);
+  GFileInputStream *stream;
+  LoadContentsData *data = user_data;
+  GError *error = NULL;
+  GSimpleAsyncResult *res;
+
+  stream = g_file_read_finish (file, open_res, &error);
+
+  if (stream)
+    {
+      g_byte_array_set_size (data->content,
+			     data->pos + GET_CONTENT_BLOCK_SIZE);
+      g_input_stream_read_async (G_INPUT_STREAM (stream),
+				 data->content->data + data->pos,
+				 GET_CONTENT_BLOCK_SIZE,
+				 0,
+				 data->cancellable,
+				 load_contents_read_callback,
+				 data);
+      
+    }
+  else
+    {
+      res = g_simple_async_result_new_from_error (G_OBJECT (data->file),
+						  data->callback,
+						  data->user_data,
+						  error);
+      g_simple_async_result_complete (res);
+      g_error_free (error);
+      load_contents_data_free (data);
+      g_object_unref (res);
+    }
+}
+
+/**
+ * g_file_load_partial_contents_async:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @read_more_callback: a #GFileReadMoreCallback to receive partial data and to specify whether further data should be read.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to the callback functions.
+ *
+ * Reads the partial contents of a file. A #GFileReadMoreCallback should be 
+ * used to stop reading from the file when appropriate, else this function
+ * will behave exactly as g_file_load_contents_async(). This operation 
+ * can be finished by g_file_load_partial_contents_finish().
+ *
+ * Users of this function should be aware that @user_data is passed to 
+ * both the @read_more_callback and the @callback.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ **/
+void
+g_file_load_partial_contents_async (GFile                 *file,
+				    GCancellable          *cancellable,
+				    GFileReadMoreCallback  read_more_callback,
+				    GAsyncReadyCallback    callback,
+				    gpointer               user_data)
+{
+  LoadContentsData *data;
+
+  g_return_if_fail (G_IS_FILE (file));
+
+  data = g_new0 (LoadContentsData, 1);
+
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->read_more_callback = read_more_callback;
+  data->callback = callback;
+  data->user_data = user_data;
+  data->content = g_byte_array_new ();
+  data->file = g_object_ref (file);
+
+  g_file_read_async (file,
+		     0,
+		     cancellable,
+		     load_contents_open_callback,
+		     data);
+}
+
+/**
+ * g_file_load_partial_contents_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @contents: a location to place the contents of the file.
+ * @length: a location to place the length of the contents of the file,
+ *     or %NULL if the length is not needed
+ * @etag_out: a location to place the current entity tag for the file,
+ *     or %NULL if the entity tag is not needed
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous partial load operation that was started
+ * with g_file_load_partial_contents_async(). The data is always 
+ * zero-terminated, but this is not included in the resultant @length.
+ * The returned @content should be freed with g_free() when no longer
+ * needed.
+ *
+ * Returns: %TRUE if the load was successful. If %FALSE and @error is 
+ * present, it will be set appropriately. 
+ **/
+gboolean
+g_file_load_partial_contents_finish (GFile         *file,
+				     GAsyncResult  *res,
+				     char         **contents,
+				     gsize         *length,
+				     char         **etag_out,
+				     GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  LoadContentsData *data;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+  g_return_val_if_fail (contents != NULL, FALSE);
+
+  simple = G_SIMPLE_ASYNC_RESULT (res);
+
+  if (g_simple_async_result_propagate_error (simple, error))
+    return FALSE;
+  
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_load_contents_async);
+  
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+
+  if (data->error)
+    {
+      g_propagate_error (error, data->error);
+      data->error = NULL;
+      *contents = NULL;
+      if (length)
+	*length = 0;
+      return FALSE;
+    }
+
+  if (length)
+    *length = data->pos;
+
+  if (etag_out)
+    {
+      *etag_out = data->etag;
+      data->etag = NULL;
+    }
+
+  /* Zero terminate */
+  g_byte_array_set_size (data->content, data->pos + 1);
+  data->content->data[data->pos] = 0;
+  
+  *contents = (char *)g_byte_array_free (data->content, FALSE);
+  data->content = NULL;
+
+  return TRUE;
+}
+
+/**
+ * g_file_load_contents_async:
+ * @file: input #GFile.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Starts an asynchronous load of the @file's contents.
+ *
+ * For more details, see g_file_load_contents() which is
+ * the synchronous version of this call.
+ *
+ * When the load operation has completed, @callback will be called 
+ * with @user data. To finish the operation, call 
+ * g_file_load_contents_finish() with the #GAsyncResult returned by 
+ * the @callback.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ **/
+void
+g_file_load_contents_async (GFile               *file,
+			   GCancellable        *cancellable,
+			   GAsyncReadyCallback  callback,
+			   gpointer             user_data)
+{
+  g_file_load_partial_contents_async (file,
+				      cancellable,
+				      NULL,
+				      callback, user_data);
+}
+
+/**
+ * g_file_load_contents_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @contents: a location to place the contents of the file.
+ * @length: a location to place the length of the contents of the file,
+ *     or %NULL if the length is not needed
+ * @etag_out: a location to place the current entity tag for the file,
+ *     or %NULL if the entity tag is not needed
+ * @error: a #GError, or %NULL
+ * 
+ * Finishes an asynchronous load of the @file's contents. 
+ * The contents are placed in @contents, and @length is set to the 
+ * size of the @contents string. The @content should be freed with
+ * g_free() when no longer needed. If @etag_out is present, it will be 
+ * set to the new entity tag for the @file.
+ * 
+ * Returns: %TRUE if the load was successful. If %FALSE and @error is 
+ * present, it will be set appropriately. 
+ **/
+gboolean
+g_file_load_contents_finish (GFile         *file,
+			     GAsyncResult  *res,
+			     char         **contents,
+			     gsize         *length,
+			     char         **etag_out,
+			     GError       **error)
+{
+  return g_file_load_partial_contents_finish (file,
+					      res,
+					      contents,
+					      length,
+					      etag_out,
+					      error);
+}
+  
+/**
+ * g_file_replace_contents:
+ * @file: input #GFile.
+ * @contents: a string containing the new contents for @file.
+ * @length: the length of @contents in bytes.
+ * @etag: the old <link linkend="gfile-etag">entity tag</link> 
+ *     for the document, or %NULL
+ * @make_backup: %TRUE if a backup should be created.
+ * @flags: a set of #GFileCreateFlags.
+ * @new_etag: a location to a new <link linkend="gfile-etag">entity tag</link>
+ *      for the document. This should be freed with g_free() when no longer 
+ *      needed, or %NULL
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: a #GError, or %NULL
+ *
+ * Replaces the contents of @file with @contents of @length bytes.
+ 
+ * If @etag is specified (not %NULL) any existing file must have that etag, or
+ * the error %G_IO_ERROR_WRONG_ETAG will be returned.
+ *
+ * If @make_backup is %TRUE, this function will attempt to make a backup of @file.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ *
+ * The returned @new_etag can be used to verify that the file hasn't changed the
+ * next time it is saved over.
+ * 
+ * Returns: %TRUE if successful. If an error
+ * has occurred, this function will return %FALSE and set @error
+ * appropriately if present.
+ **/
+gboolean
+g_file_replace_contents (GFile             *file,
+			 const char        *contents,
+			 gsize              length,
+			 const char        *etag,
+			 gboolean           make_backup,
+			 GFileCreateFlags   flags,
+			 char             **new_etag,
+			 GCancellable      *cancellable,
+			 GError           **error)
+{
+  GFileOutputStream *out;
+  gsize pos, remainder;
+  gssize res;
+  gboolean ret;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (contents != NULL, FALSE);
+
+  out = g_file_replace (file, etag, make_backup, flags, cancellable, error);
+  if (out == NULL)
+    return FALSE;
+
+  pos = 0;
+  remainder = length;
+  while (remainder > 0 &&
+	 (res = g_output_stream_write (G_OUTPUT_STREAM (out),
+				       contents + pos,
+				       MIN (remainder, GET_CONTENT_BLOCK_SIZE),
+				       cancellable,
+				       error)) > 0)
+    {
+      pos += res;
+      remainder -= res;
+    }
+  
+  if (remainder > 0 && res < 0)
+    {
+      /* Ignore errors on close */
+      g_output_stream_close (G_OUTPUT_STREAM (out), cancellable, NULL);
+      g_object_unref (out);
+
+      /* error is set already */
+      return FALSE;
+    }
+  
+  ret = g_output_stream_close (G_OUTPUT_STREAM (out), cancellable, error);
+
+  if (new_etag)
+    *new_etag = g_file_output_stream_get_etag (out);
+
+  g_object_unref (out);
+
+  return ret;
+}
+
+typedef struct {
+  GFile *file;
+  GError *error;
+  GCancellable *cancellable;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  const char *content;
+  gsize length;
+  gsize pos;
+  char *etag;
+} ReplaceContentsData;
+
+static void
+replace_contents_data_free (ReplaceContentsData *data)
+{
+  if (data->error)
+    g_error_free (data->error);
+  if (data->cancellable)
+    g_object_unref (data->cancellable);
+  g_object_unref (data->file);
+  g_free (data->etag);
+  g_free (data);
+}
+
+static void
+replace_contents_close_callback (GObject      *obj,
+				 GAsyncResult *close_res,
+				 gpointer      user_data)
+{
+  GOutputStream *stream = G_OUTPUT_STREAM (obj);
+  ReplaceContentsData *data = user_data;
+  GSimpleAsyncResult *res;
+
+  /* Ignore errors here, we're only reading anyway */
+  g_output_stream_close_finish (stream, close_res, NULL);
+  g_object_unref (stream);
+
+  data->etag = g_file_output_stream_get_etag (G_FILE_OUTPUT_STREAM (stream));
+  
+  res = g_simple_async_result_new (G_OBJECT (data->file),
+				   data->callback,
+				   data->user_data,
+				   g_file_replace_contents_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)replace_contents_data_free);
+  g_simple_async_result_complete (res);
+  g_object_unref (res);
+}
+
+static void
+replace_contents_write_callback (GObject      *obj,
+				 GAsyncResult *read_res,
+				 gpointer      user_data)
+{
+  GOutputStream *stream = G_OUTPUT_STREAM (obj);
+  ReplaceContentsData *data = user_data;
+  GError *error = NULL;
+  gssize write_size;
+  
+  write_size = g_output_stream_write_finish (stream, read_res, &error);
+
+  if (write_size <= 0) 
+    {
+      /* Error or EOF, close the file */
+      if (write_size < 0)
+	data->error = error;
+      g_output_stream_close_async (stream, 0,
+				   data->cancellable,
+				   replace_contents_close_callback, data);
+    }
+  else if (write_size > 0)
+    {
+      data->pos += write_size;
+
+      if (data->pos >= data->length)
+	g_output_stream_close_async (stream, 0,
+				     data->cancellable,
+				     replace_contents_close_callback, data);
+      else
+	g_output_stream_write_async (stream,
+				     data->content + data->pos,
+				     data->length - data->pos,
+				     0,
+				     data->cancellable,
+				     replace_contents_write_callback,
+				     data);
+    }
+}
+
+static void
+replace_contents_open_callback (GObject      *obj,
+				GAsyncResult *open_res,
+				gpointer      user_data)
+{
+  GFile *file = G_FILE (obj);
+  GFileOutputStream *stream;
+  ReplaceContentsData *data = user_data;
+  GError *error = NULL;
+  GSimpleAsyncResult *res;
+
+  stream = g_file_replace_finish (file, open_res, &error);
+
+  if (stream)
+    {
+      g_output_stream_write_async (G_OUTPUT_STREAM (stream),
+				   data->content + data->pos,
+				   data->length - data->pos,
+				   0,
+				   data->cancellable,
+				   replace_contents_write_callback,
+				   data);
+      
+    }
+  else
+    {
+      res = g_simple_async_result_new_from_error (G_OBJECT (data->file),
+						  data->callback,
+						  data->user_data,
+						  error);
+      g_simple_async_result_complete (res);
+      g_error_free (error);
+      replace_contents_data_free (data);
+      g_object_unref (res);
+    }
+}
+
+/**
+ * g_file_replace_contents_async:
+ * @file: input #GFile.
+ * @contents: string of contents to replace the file with.
+ * @length: the length of @contents in bytes.
+ * @etag: a new <link linkend="gfile-etag">entity tag</link> for the @file, or %NULL
+ * @make_backup: %TRUE if a backup should be created.
+ * @flags: a set of #GFileCreateFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Starts an asynchronous replacement of @file with the given 
+ * @contents of @length bytes. @etag will replace the document's 
+ * current entity tag.
+ * 
+ * When this operation has completed, @callback will be called with
+ * @user_user data, and the operation can be finalized with 
+ * g_file_replace_contents_finish().
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * If @make_backup is %TRUE, this function will attempt to 
+ * make a backup of @file.
+ **/
+void
+g_file_replace_contents_async  (GFile               *file,
+				const char          *contents,
+				gsize                length,
+				const char          *etag,
+				gboolean             make_backup,
+				GFileCreateFlags     flags,
+				GCancellable        *cancellable,
+				GAsyncReadyCallback  callback,
+				gpointer             user_data)
+{
+  ReplaceContentsData *data;
+
+  g_return_if_fail (G_IS_FILE (file));
+  g_return_if_fail (contents != NULL);
+
+  data = g_new0 (ReplaceContentsData, 1);
+
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+  data->content = contents;
+  data->length = length;
+  data->pos = 0;
+  data->file = g_object_ref (file);
+
+  g_file_replace_async (file,
+			etag,
+			make_backup,
+			flags,
+			0,
+			cancellable,
+			replace_contents_open_callback,
+			data);
+}
+  
+/**
+ * g_file_replace_contents_finish:
+ * @file: input #GFile.
+ * @res: a #GAsyncResult. 
+ * @new_etag: a location of a new <link linkend="gfile-etag">entity tag</link> 
+ *     for the document. This should be freed with g_free() when it is no 
+ *     longer needed, or %NULL
+ * @error: a #GError, or %NULL 
+ * 
+ * Finishes an asynchronous replace of the given @file. See
+ * g_file_replace_contents_async(). Sets @new_etag to the new entity 
+ * tag for the document, if present.
+ * 
+ * Returns: %TRUE on success, %FALSE on failure.
+ **/
+gboolean
+g_file_replace_contents_finish (GFile         *file,
+				GAsyncResult  *res,
+				char         **new_etag,
+				GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  ReplaceContentsData *data;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+
+  simple = G_SIMPLE_ASYNC_RESULT (res);
+
+  if (g_simple_async_result_propagate_error (simple, error))
+    return FALSE;
+  
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_replace_contents_async);
+  
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+
+  if (data->error)
+    {
+      g_propagate_error (error, data->error);
+      data->error = NULL;
+      return FALSE;
+    }
+
+
+  if (new_etag)
+    {
+      *new_etag = data->etag;
+      data->etag = NULL; /* Take ownership */
+    }
+  
+  return TRUE;
+}
+
+#define __G_FILE_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfile.h b/gio/gfile.h
new file mode 100644
index 0000000..f6e17af
--- /dev/null
+++ b/gio/gfile.h
@@ -0,0 +1,812 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_H__
+#define __G_FILE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE            (g_file_get_type ())
+#define G_FILE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_FILE, GFile))
+#define G_IS_FILE(obj)	       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_FILE))
+#define G_FILE_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_FILE, GFileIface))
+
+#if 0
+/**
+ * GFile:
+ *
+ * A handle to an object implementing the #GFileIface interface.
+ * Generally stores a location within the file system. Handles do not
+ * necessarily represent files or directories that currently exist.
+ **/
+typedef struct _GFile         		GFile; /* Dummy typedef */
+#endif
+typedef struct _GFileIface    		GFileIface;
+
+
+/**
+ * GFileIface:
+ * @g_iface: The parent interface.
+ * @dup: Duplicates a #GFile.
+ * @hash: Creates a hash of a #GFile.
+ * @equal: Checks equality of two given #GFile<!-- -->s.
+ * @is_native: Checks to see if a file is native to the system.
+ * @has_uri_scheme: Checks to see if a #GFile has a given URI scheme.
+ * @get_uri_scheme: Gets the URI scheme for a #GFile.
+ * @get_basename: Gets the basename for a given #GFile.
+ * @get_path: Gets the current path within a #GFile.
+ * @get_uri: Gets a URI for the path within a #GFile.
+ * @get_parse_name: Gets the parsed name for the #GFile.
+ * @get_parent: Gets the parent directory for the #GFile.
+ * @prefix_matches: Checks whether a #GFile contains a specified file.
+ * @get_relative_path: Gets the path for a #GFile relative to a given path.
+ * @resolve_relative_path: Resolves a relative path for a #GFile to an absolute path.
+ * @get_child_for_display_name: Gets the child #GFile for a given display name.
+ * @enumerate_children: Gets a #GFileEnumerator with the children of a #GFile.
+ * @enumerate_children_async: Asynchronously gets a #GFileEnumerator with the children of a #GFile.
+ * @enumerate_children_finish: Finishes asynchronously enumerating the children.
+ * @query_info: Gets the #GFileInfo for a #GFile.
+ * @query_info_async: Asynchronously gets the #GFileInfo for a #GFile.
+ * @query_info_finish: Finishes an asynchronous query info operation.
+ * @query_filesystem_info: Gets a #GFileInfo for the file system #GFile is on.
+ * @query_filesystem_info_async: Asynchronously gets a #GFileInfo for the file system #GFile is on.
+ * @query_filesystem_info_finish: Finishes asynchronously getting the file system info.
+ * @find_enclosing_mount: Gets a #GMount for the #GFile.
+ * @find_enclosing_mount_async: Asynchronously gets the #GMount for a #GFile.
+ * @find_enclosing_mount_finish: Finishes asynchronously getting the volume.
+ * @set_display_name: Sets the display name for a #GFile.
+ * @set_display_name_async: Asynchronously sets a #GFile's display name.
+ * @set_display_name_finish: Finishes asynchronously setting a #GFile's display name.
+ * @query_settable_attributes: Returns a list of #GFileAttribute<!-- -->s that can be set.
+ * @_query_settable_attributes_async: Asynchronously gets a list of #GFileAttribute<!-- -->s that can be set.
+ * @_query_settable_attributes_finish: Finishes asynchronously querying settable attributes.
+ * @query_writable_namespaces: Returns a list of #GFileAttribute namespaces that are writable.
+ * @_query_writable_namespaces_async: Asynchronously gets a list of #GFileAttribute namespaces that are writable.
+ * @_query_writable_namespaces_finish: Finishes asynchronously querying the writable namespaces.
+ * @set_attribute: Sets a #GFileAttribute.
+ * @set_attributes_from_info: Sets a #GFileAttribute with information from a #GFileInfo.
+ * @set_attributes_async: Asynchronously sets a file's attributes.
+ * @set_attributes_finish: Finishes setting a file's attributes asynchronously.
+ * @read_fn: Reads a file asynchronously.
+ * @read_async: Asynchronously reads a file.
+ * @read_finish: Finishes asynchronously reading a file.
+ * @append_to: Writes to the end of a file.
+ * @append_to_async: Asynchronously writes to the end of a file.
+ * @append_to_finish: Finishes an asynchronous file append operation.
+ * @create: Creates a new file.
+ * @create_async: Asynchronously creates a file.
+ * @create_finish: Finishes asynchronously creating a file.
+ * @replace: Replaces the contents of a file.
+ * @replace_async: Asynchronously replaces the contents of a file.
+ * @replace_finish: Finishes asynchronously replacing a file.
+ * @delete_file: Deletes a file.
+ * @_delete_file_async: Asynchronously deletes a file.
+ * @_delete_file_finish: Finishes an asynchronous delete.
+ * @trash: Sends a #GFile to the Trash location.
+ * @_trash_async: Asynchronously sends a #GFile to the Trash location.
+ * @_trash_finish: Finishes an asynchronous file trashing operation.
+ * @make_directory: Makes a directory.
+ * @_make_directory_async: Asynchronously makes a directory.
+ * @_make_directory_finish: Finishes making a directory asynchronously.
+ * @make_symbolic_link: Makes a symbolic link.
+ * @_make_symbolic_link_async: Asynchronously makes a symbolic link
+ * @_make_symbolic_link_finish: Finishes making a symbolic link asynchronously.
+ * @copy: Copies a file.
+ * @copy_async: Asynchronously copies a file.
+ * @copy_finish: Finishes an asynchronous copy operation.
+ * @move: Moves a file.
+ * @_move_async: Asynchronously moves a file.
+ * @_move_finish: Finishes an asynchronous move operation.
+ * @mount_mountable: Mounts a mountable object.
+ * @mount_mountable_finish: Finishes a mounting operation.
+ * @unmount_mountable: Unmounts a mountable object.
+ * @unmount_mountable_finish: Finishes an unmount operation.
+ * @eject_mountable: Ejects a mountable.
+ * @eject_mountable_finish: Finishes an eject operation.
+ * @mount_enclosing_volume: Mounts a specified location.
+ * @mount_enclosing_volume_finish: Finishes mounting a specified location.
+ * @monitor_dir: Creates a #GFileMonitor for the location.
+ * @monitor_file: Creates a #GFileMonitor for the location.
+ *
+ * An interface for writing VFS file handles.
+ **/
+struct _GFileIface
+{
+  GTypeInterface g_iface;
+
+  /* Virtual Table */
+
+  GFile *             (* dup)                         (GFile         *file);
+  guint               (* hash)                        (GFile         *file);
+  gboolean            (* equal)                       (GFile         *file1,
+                                                       GFile         *file2);
+  gboolean            (* is_native)                   (GFile         *file);
+  gboolean            (* has_uri_scheme)              (GFile         *file,
+                                                       const char    *uri_scheme);
+  char *              (* get_uri_scheme)              (GFile         *file);
+  char *              (* get_basename)                (GFile         *file);
+  char *              (* get_path)                    (GFile         *file);
+  char *              (* get_uri)                     (GFile         *file);
+  char *              (* get_parse_name)              (GFile         *file);
+  GFile *             (* get_parent)                  (GFile         *file);
+  gboolean            (* prefix_matches)              (GFile         *prefix,
+                                                       GFile         *file);
+  char *              (* get_relative_path)           (GFile         *parent,
+                                                       GFile         *descendant);
+  GFile *             (* resolve_relative_path)       (GFile        *file,
+                                                       const char   *relative_path);
+  GFile *             (* get_child_for_display_name)  (GFile        *file,
+                                                       const char   *display_name,
+                                                       GError      **error);
+
+  GFileEnumerator *   (* enumerate_children)          (GFile                *file,
+                                                       const char           *attributes,
+                                                       GFileQueryInfoFlags   flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* enumerate_children_async)    (GFile                *file,
+                                                       const char           *attributes,
+                                                       GFileQueryInfoFlags   flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileEnumerator *   (* enumerate_children_finish)   (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFileInfo *         (* query_info)                  (GFile                *file,
+                                                       const char           *attributes,
+                                                       GFileQueryInfoFlags   flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* query_info_async)            (GFile                *file,
+                                                       const char           *attributes,
+                                                       GFileQueryInfoFlags   flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileInfo *         (* query_info_finish)           (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFileInfo *         (* query_filesystem_info)       (GFile                *file,
+                                                       const char           *attributes,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* query_filesystem_info_async) (GFile                *file,
+                                                       const char           *attributes,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileInfo *         (* query_filesystem_info_finish)(GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GMount *            (* find_enclosing_mount)        (GFile                *file,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* find_enclosing_mount_async)  (GFile                *file,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GMount *            (* find_enclosing_mount_finish) (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFile *             (* set_display_name)            (GFile                *file,
+                                                       const char           *display_name,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* set_display_name_async)      (GFile                *file,
+                                                       const char           *display_name,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFile *             (* set_display_name_finish)     (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFileAttributeInfoList * (* query_settable_attributes)    (GFile          *file,
+                                                             GCancellable   *cancellable,
+                                                             GError        **error);
+  void                (* _query_settable_attributes_async)  (void);
+  void                (* _query_settable_attributes_finish) (void);
+
+  GFileAttributeInfoList * (* query_writable_namespaces)    (GFile          *file,
+                                                             GCancellable   *cancellable,
+                                                             GError        **error);
+  void                (* _query_writable_namespaces_async)  (void);
+  void                (* _query_writable_namespaces_finish) (void);
+
+  gboolean            (* set_attribute)               (GFile                *file,
+                                                       const char           *attribute,
+                                                       GFileAttributeType    type,
+                                                       gpointer              value_p,
+                                                       GFileQueryInfoFlags   flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  gboolean            (* set_attributes_from_info)    (GFile                *file,
+                                                       GFileInfo            *info,
+                                                       GFileQueryInfoFlags   flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* set_attributes_async)        (GFile                *file,
+                                                       GFileInfo            *info,
+                                                       GFileQueryInfoFlags   flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  gboolean            (* set_attributes_finish)       (GFile                *file,
+                                                       GAsyncResult         *result,
+                                                       GFileInfo           **info,
+                                                       GError              **error);
+
+  GFileInputStream *  (* read_fn)                     (GFile                *file,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* read_async)                  (GFile                *file,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileInputStream *  (* read_finish)                 (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFileOutputStream * (* append_to)                   (GFile                *file,
+                                                       GFileCreateFlags      flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* append_to_async)             (GFile                *file,
+                                                       GFileCreateFlags      flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileOutputStream * (* append_to_finish)            (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFileOutputStream * (* create)                      (GFile                *file,
+                                                       GFileCreateFlags      flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* create_async)                (GFile                *file,
+                                                       GFileCreateFlags      flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileOutputStream * (* create_finish)               (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  GFileOutputStream * (* replace)                     (GFile                *file,
+                                                       const char           *etag,
+                                                       gboolean              make_backup,
+                                                       GFileCreateFlags      flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* replace_async)               (GFile                *file,
+                                                       const char           *etag,
+                                                       gboolean              make_backup,
+                                                       GFileCreateFlags      flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFileOutputStream * (* replace_finish)              (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  gboolean            (* delete_file)                 (GFile                *file,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* _delete_file_async)          (void);
+  void                (* _delete_file_finish)         (void);
+
+  gboolean            (* trash)                       (GFile                *file,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* _trash_async)                (void);
+  void                (* _trash_finish)               (void);
+
+  gboolean            (* make_directory)              (GFile                *file,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* _make_directory_async)       (void);
+  void                (* _make_directory_finish)      (void);
+
+  gboolean            (* make_symbolic_link)          (GFile                *file,
+                                                       const char           *symlink_value,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  void                (* _make_symbolic_link_async)   (void);
+  void                (* _make_symbolic_link_finish)  (void);
+
+  gboolean            (* copy)                        (GFile                *source,
+                                                       GFile                *destination,
+                                                       GFileCopyFlags        flags,
+                                                       GCancellable         *cancellable,
+                                                       GFileProgressCallback progress_callback,
+                                                       gpointer              progress_callback_data,
+                                                       GError              **error);
+  void                (* copy_async)                  (GFile                *source,
+                                                       GFile                *destination,
+                                                       GFileCopyFlags        flags,
+                                                       int                   io_priority,
+                                                       GCancellable         *cancellable,
+                                                       GFileProgressCallback progress_callback,
+                                                       gpointer              progress_callback_data,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  gboolean            (* copy_finish)                 (GFile                *file,
+                                                       GAsyncResult         *res,
+                                                       GError              **error);
+
+  gboolean            (* move)                        (GFile                *source,
+                                                       GFile                *destination,
+                                                       GFileCopyFlags        flags,
+                                                       GCancellable         *cancellable,
+                                                       GFileProgressCallback progress_callback,
+                                                       gpointer              progress_callback_data,
+                                                       GError              **error);
+  void                (* _move_async)                 (void);
+  void                (* _move_finish)                (void);
+
+  void                (* mount_mountable)             (GFile                *file,
+                                                       GMountMountFlags      flags,
+                                                       GMountOperation      *mount_operation,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  GFile *             (* mount_mountable_finish)      (GFile                *file,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+
+  void                (* unmount_mountable)           (GFile                *file,
+                                                       GMountUnmountFlags    flags,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  gboolean            (* unmount_mountable_finish)    (GFile                *file,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+
+  void                (* eject_mountable)             (GFile                *file,
+                                                       GMountUnmountFlags    flags,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  gboolean            (* eject_mountable_finish)      (GFile                *file,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+
+  void                (* mount_enclosing_volume)      (GFile                *location,
+                                                       GMountMountFlags      flags,
+                                                       GMountOperation      *mount_operation,
+                                                       GCancellable         *cancellable,
+                                                       GAsyncReadyCallback   callback,
+                                                       gpointer              user_data);
+  gboolean         (* mount_enclosing_volume_finish)  (GFile                *location,
+                                                       GAsyncResult         *result,
+                                                       GError              **error);
+
+  GFileMonitor *      (* monitor_dir)                 (GFile                *file,
+                                                       GFileMonitorFlags     flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+  GFileMonitor *      (* monitor_file)                (GFile                *file,
+                                                       GFileMonitorFlags     flags,
+                                                       GCancellable         *cancellable,
+                                                       GError              **error);
+};
+
+GType                   g_file_get_type                   (void) G_GNUC_CONST;
+
+GFile *                 g_file_new_for_path               (const char                 *path);
+GFile *                 g_file_new_for_uri                (const char                 *uri);
+GFile *                 g_file_new_for_commandline_arg    (const char                 *arg);
+GFile *                 g_file_parse_name                 (const char                 *parse_name);
+GFile *                 g_file_dup                        (GFile                      *file);
+guint                   g_file_hash                       (gconstpointer               file);
+gboolean                g_file_equal                      (GFile                      *file1,
+							   GFile                      *file2);
+char *                  g_file_get_basename               (GFile                      *file);
+char *                  g_file_get_path                   (GFile                      *file);
+char *                  g_file_get_uri                    (GFile                      *file);
+char *                  g_file_get_parse_name             (GFile                      *file);
+GFile *                 g_file_get_parent                 (GFile                      *file);
+GFile *                 g_file_get_child                  (GFile                      *file,
+							   const char                 *name);
+GFile *                 g_file_get_child_for_display_name (GFile                      *file,
+							   const char                 *display_name,
+							   GError                    **error);
+gboolean                g_file_has_prefix                 (GFile                      *file,
+							   GFile                      *prefix);
+char *                  g_file_get_relative_path          (GFile                      *parent,
+							   GFile                      *descendant);
+GFile *                 g_file_resolve_relative_path      (GFile                      *file,
+							   const char                 *relative_path);
+gboolean                g_file_is_native                  (GFile                      *file);
+gboolean                g_file_has_uri_scheme             (GFile                      *file,
+							   const char                 *uri_scheme);
+char *                  g_file_get_uri_scheme             (GFile                      *file);
+GFileInputStream *      g_file_read                       (GFile                      *file,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_read_async                 (GFile                      *file,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileInputStream *      g_file_read_finish                (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+GFileOutputStream *     g_file_append_to                  (GFile                      *file,
+							   GFileCreateFlags             flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+GFileOutputStream *     g_file_create                     (GFile                      *file,
+							   GFileCreateFlags             flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+GFileOutputStream *     g_file_replace                    (GFile                      *file,
+							   const char                 *etag,
+							   gboolean                    make_backup,
+							   GFileCreateFlags            flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_append_to_async            (GFile                      *file,
+							   GFileCreateFlags            flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileOutputStream *     g_file_append_to_finish           (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+void                    g_file_create_async               (GFile                      *file,
+							   GFileCreateFlags            flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileOutputStream *     g_file_create_finish              (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+void                    g_file_replace_async              (GFile                      *file,
+							   const char                 *etag,
+							   gboolean                    make_backup,
+							   GFileCreateFlags            flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileOutputStream *     g_file_replace_finish             (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+gboolean                g_file_query_exists               (GFile                      *file,
+							   GCancellable               *cancellable);
+GFileType               g_file_query_file_type            (GFile                      *file,
+                                                           GFileQueryInfoFlags         flags,
+                                                           GCancellable               *cancellable);
+GFileInfo *             g_file_query_info                 (GFile                      *file,
+							   const char                 *attributes,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_query_info_async           (GFile                      *file,
+							   const char                 *attributes,
+							   GFileQueryInfoFlags         flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileInfo *             g_file_query_info_finish          (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+GFileInfo *             g_file_query_filesystem_info      (GFile                      *file,
+							   const char                 *attributes,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_query_filesystem_info_async (GFile                      *file,
+							   const char                 *attributes,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileInfo *             g_file_query_filesystem_info_finish (GFile                      *file,
+                                                           GAsyncResult               *res,
+							   GError                    **error);
+GMount *                g_file_find_enclosing_mount       (GFile                      *file,
+                                                           GCancellable               *cancellable,
+                                                           GError                    **error);
+void                    g_file_find_enclosing_mount_async (GFile                      *file,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GMount *                g_file_find_enclosing_mount_finish (GFile                     *file,
+							    GAsyncResult              *res,
+							    GError                   **error);
+GFileEnumerator *       g_file_enumerate_children         (GFile                      *file,
+							   const char                 *attributes,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_enumerate_children_async   (GFile                      *file,
+							   const char                 *attributes,
+							   GFileQueryInfoFlags         flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFileEnumerator *       g_file_enumerate_children_finish  (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+GFile *                 g_file_set_display_name           (GFile                      *file,
+							   const char                 *display_name,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_set_display_name_async     (GFile                      *file,
+							   const char                 *display_name,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFile *                 g_file_set_display_name_finish    (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+gboolean                g_file_delete                     (GFile                      *file,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_trash                      (GFile                      *file,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_copy                       (GFile                      *source,
+							   GFile                      *destination,
+							   GFileCopyFlags              flags,
+							   GCancellable               *cancellable,
+							   GFileProgressCallback       progress_callback,
+							   gpointer                    progress_callback_data,
+							   GError                    **error);
+void                    g_file_copy_async                 (GFile                      *source,
+							   GFile                      *destination,
+							   GFileCopyFlags              flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GFileProgressCallback       progress_callback,
+							   gpointer                    progress_callback_data,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+gboolean                g_file_copy_finish                (GFile                      *file,
+							   GAsyncResult               *res,
+							   GError                    **error);
+gboolean                g_file_move                       (GFile                      *source,
+							   GFile                      *destination,
+							   GFileCopyFlags              flags,
+							   GCancellable               *cancellable,
+							   GFileProgressCallback       progress_callback,
+							   gpointer                    progress_callback_data,
+							   GError                    **error);
+gboolean                g_file_make_directory             (GFile                      *file,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_make_directory_with_parents (GFile                     *file,
+		                                           GCancellable               *cancellable,
+		                                           GError                    **error);
+gboolean                g_file_make_symbolic_link         (GFile                      *file,
+							   const char                 *symlink_value,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+GFileAttributeInfoList *g_file_query_settable_attributes  (GFile                      *file,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+GFileAttributeInfoList *g_file_query_writable_namespaces  (GFile                      *file,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attribute              (GFile                      *file,
+							   const char                 *attribute,
+							   GFileAttributeType          type,
+							   gpointer                    value_p,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attributes_from_info   (GFile                      *file,
+							   GFileInfo                  *info,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_set_attributes_async       (GFile                      *file,
+							   GFileInfo                  *info,
+							   GFileQueryInfoFlags         flags,
+							   int                         io_priority,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+gboolean                g_file_set_attributes_finish      (GFile                      *file,
+							   GAsyncResult               *result,
+							   GFileInfo                 **info,
+							   GError                    **error);
+gboolean                g_file_set_attribute_string       (GFile                      *file,
+							   const char                 *attribute,
+							   const char                 *value,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attribute_byte_string  (GFile                      *file,
+							   const char                 *attribute,
+							   const char                 *value,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attribute_uint32       (GFile                      *file,
+							   const char                 *attribute,
+							   guint32                     value,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attribute_int32        (GFile                      *file,
+							   const char                 *attribute,
+							   gint32                      value,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attribute_uint64       (GFile                      *file,
+							   const char                 *attribute,
+							   guint64                     value,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+gboolean                g_file_set_attribute_int64        (GFile                      *file,
+							   const char                 *attribute,
+							   gint64                      value,
+							   GFileQueryInfoFlags         flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+void                    g_file_mount_enclosing_volume     (GFile                      *location,
+							   GMountMountFlags            flags,
+							   GMountOperation            *mount_operation,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+gboolean                g_file_mount_enclosing_volume_finish (GFile                      *location,
+							   GAsyncResult               *result,
+							   GError                    **error);
+void                    g_file_mount_mountable            (GFile                      *file,
+							   GMountMountFlags            flags,
+							   GMountOperation            *mount_operation,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+GFile *                 g_file_mount_mountable_finish     (GFile                      *file,
+							   GAsyncResult               *result,
+							   GError                    **error);
+void                    g_file_unmount_mountable          (GFile                      *file,
+							   GMountUnmountFlags          flags,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+gboolean                g_file_unmount_mountable_finish   (GFile                      *file,
+							   GAsyncResult               *result,
+							   GError                    **error);
+void                    g_file_eject_mountable            (GFile                      *file,
+							   GMountUnmountFlags          flags,
+							   GCancellable               *cancellable,
+							   GAsyncReadyCallback         callback,
+							   gpointer                    user_data);
+gboolean                g_file_eject_mountable_finish     (GFile                      *file,
+							   GAsyncResult               *result,
+							   GError                    **error);
+
+gboolean                g_file_copy_attributes            (GFile                      *source,
+							   GFile                      *destination,
+							   GFileCopyFlags              flags,
+							   GCancellable               *cancellable,
+							   GError                    **error);
+
+
+GFileMonitor*           g_file_monitor_directory          (GFile                  *file,
+							   GFileMonitorFlags       flags,
+							   GCancellable           *cancellable,
+							   GError                **error);
+GFileMonitor*           g_file_monitor_file               (GFile                  *file,
+							   GFileMonitorFlags       flags,
+							   GCancellable           *cancellable,
+							   GError                **error);
+GFileMonitor*           g_file_monitor                    (GFile                  *file,
+							   GFileMonitorFlags       flags,
+							   GCancellable           *cancellable,
+							   GError                **error);
+
+
+/* Utilities */
+
+GAppInfo *g_file_query_default_handler       (GFile                  *file,
+					      GCancellable           *cancellable,
+					      GError                **error);
+gboolean g_file_load_contents                (GFile                  *file,
+					      GCancellable           *cancellable,
+					      char                  **contents,
+					      gsize                  *length,
+					      char                  **etag_out,
+					      GError                **error);
+void     g_file_load_contents_async          (GFile                  *file,
+					      GCancellable           *cancellable,
+					      GAsyncReadyCallback     callback,
+					      gpointer                user_data);
+gboolean g_file_load_contents_finish         (GFile                  *file,
+					      GAsyncResult           *res,
+					      char                  **contents,
+					      gsize                  *length,
+					      char                  **etag_out,
+					      GError                **error);
+void     g_file_load_partial_contents_async  (GFile                  *file,
+					      GCancellable           *cancellable,
+					      GFileReadMoreCallback   read_more_callback,
+					      GAsyncReadyCallback     callback,
+					      gpointer                user_data);
+gboolean g_file_load_partial_contents_finish (GFile                  *file,
+					      GAsyncResult           *res,
+					      char                  **contents,
+					      gsize                  *length,
+					      char                  **etag_out,
+					      GError                **error);
+gboolean g_file_replace_contents             (GFile                  *file,
+					      const char             *contents,
+					      gsize                   length,
+					      const char             *etag,
+					      gboolean                make_backup,
+					      GFileCreateFlags        flags,
+					      char                  **new_etag,
+					      GCancellable           *cancellable,
+					      GError                **error);
+void     g_file_replace_contents_async       (GFile                  *file,
+					      const char             *contents,
+					      gsize                   length,
+					      const char             *etag,
+					      gboolean                make_backup,
+					      GFileCreateFlags        flags,
+					      GCancellable           *cancellable,
+					      GAsyncReadyCallback     callback,
+					      gpointer                user_data);
+gboolean g_file_replace_contents_finish      (GFile                  *file,
+					      GAsyncResult           *res,
+					      char                  **new_etag,
+					      GError                **error);
+
+G_END_DECLS
+
+#endif /* __G_FILE_H__ */
diff --git a/gio/gfileattribute-priv.h b/gio/gfileattribute-priv.h
new file mode 100644
index 0000000..99c3481
--- /dev/null
+++ b/gio/gfileattribute-priv.h
@@ -0,0 +1,89 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_FILE_ATTRIBUTE_PRIV_H__
+#define __G_FILE_ATTRIBUTE_PRIV_H__
+
+#include "gfileattribute.h"
+#include "gfileinfo.h"
+
+#define G_FILE_ATTRIBUTE_VALUE_INIT {0}
+
+typedef struct  {
+  GFileAttributeType type : 8;
+  GFileAttributeStatus status : 8;
+  union {
+    gboolean boolean;
+    gint32 int32;
+    guint32 uint32;
+    gint64 int64;
+    guint64 uint64;
+    char *string;
+    GObject *obj;
+  } u;
+} GFileAttributeValue;
+
+GFileAttributeValue *_g_file_attribute_value_new             (void);
+void                 _g_file_attribute_value_free            (GFileAttributeValue *attr);
+void                 _g_file_attribute_value_clear           (GFileAttributeValue *attr);
+void                 _g_file_attribute_value_set             (GFileAttributeValue *attr,
+							      const GFileAttributeValue *new_value);
+GFileAttributeValue *_g_file_attribute_value_dup             (const GFileAttributeValue *other);
+gpointer             _g_file_attribute_value_peek_as_pointer (GFileAttributeValue *attr);
+
+char *               _g_file_attribute_value_as_string       (const GFileAttributeValue *attr);
+
+const char *         _g_file_attribute_value_get_string      (const GFileAttributeValue *attr);
+const char *         _g_file_attribute_value_get_byte_string (const GFileAttributeValue *attr);
+gboolean             _g_file_attribute_value_get_boolean     (const GFileAttributeValue *attr);
+guint32              _g_file_attribute_value_get_uint32      (const GFileAttributeValue *attr);
+gint32               _g_file_attribute_value_get_int32       (const GFileAttributeValue *attr);
+guint64              _g_file_attribute_value_get_uint64      (const GFileAttributeValue *attr);
+gint64               _g_file_attribute_value_get_int64       (const GFileAttributeValue *attr);
+GObject *            _g_file_attribute_value_get_object      (const GFileAttributeValue *attr);
+
+void                 _g_file_attribute_value_set_from_pointer(GFileAttributeValue *attr,
+							      GFileAttributeType   type,
+							      gpointer             value_p,
+							      gboolean             dup);
+void                 _g_file_attribute_value_set_string      (GFileAttributeValue *attr,
+							      const char          *string);
+void                 _g_file_attribute_value_set_byte_string (GFileAttributeValue *attr,
+							      const char          *string);
+void                 _g_file_attribute_value_set_boolean     (GFileAttributeValue *attr,
+							      gboolean             value);
+void                 _g_file_attribute_value_set_uint32      (GFileAttributeValue *attr,
+							      guint32              value);
+void                 _g_file_attribute_value_set_int32       (GFileAttributeValue *attr,
+							      gint32               value);
+void                 _g_file_attribute_value_set_uint64      (GFileAttributeValue *attr,
+							      guint64              value);
+void                 _g_file_attribute_value_set_int64       (GFileAttributeValue *attr,
+							      gint64               value);
+void                 _g_file_attribute_value_set_object      (GFileAttributeValue *attr,
+							      GObject             *obj);
+
+
+GFileAttributeValue *_g_file_info_get_attribute_value (GFileInfo  *info,
+						       const char *attribute);
+
+#endif /* __G_FILE_ATTRIBUTE_PRIV_H__ */
diff --git a/gio/gfileattribute.c b/gio/gfileattribute.c
new file mode 100644
index 0000000..a0dfcbf
--- /dev/null
+++ b/gio/gfileattribute.c
@@ -0,0 +1,1013 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gfileattribute.h"
+#include "gfileattribute-priv.h"
+#include <glib-object.h>
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfileattribute
+ * @short_description: Key-Value Paired File Attributes
+ * @include: gio/gio.h
+ * @see_also: #GFile, #GFileInfo
+ * 
+ * File attributes in GIO consist of a list of key-value pairs. 
+ * 
+ * Keys are strings that contain a key namespace and a key name, separated
+ * by a colon, e.g. "namespace:keyname". Namespaces are included to sort
+ * key-value pairs by namespaces for relevance. Keys can be retrived 
+ * using wildcards, e.g. "standard::*" will return all of the keys in the 
+ * "standard" namespace.
+ * 
+ * Values are stored within the list in #GFileAttributeValue structures.
+ * Values can store different types, listed in the enum #GFileAttributeType.
+ * Upon creation of a #GFileAttributeValue, the type will be set to 
+ * %G_FILE_ATTRIBUTE_TYPE_INVALID. 
+ * 
+ * The list of possible attributes for a filesystem (pointed to by a #GFile) is
+ * availible as a #GFileAttributeInfoList. This list is queryable by key names 
+ * as indicated earlier.
+ * 
+ * Classes that implement #GFileIface will create a #GFileAttributeInfoList and 
+ * install default keys and values for their given file system, architecture, 
+ * and other possible implementation details (e.g., on a UNIX system, a file 
+ * attribute key will be registered for the user id for a given file).
+ * 
+ * <para>
+ * <table>
+ * <title>GFileAttributes Default Namespaces</title>
+ * <tgroup cols='2' align='left'><thead>
+ * <row><entry>Namspace</entry><entry>Description</entry></row>
+ * </thead>
+ * <tbody>
+ * <row><entry>"standard"</entry><entry>The "Standard" namespace. General file
+ * information that any application may need should be put in this namespace. 
+ * Examples include the file's name, type, and size.</entry></row> 
+ * <row><entry>"etag"</entry><entry>The <link linkend="gfile-etag">"Entity Tag"</link> 
+ * namespace. Currently, the only key in this namespace is "value", which contains 
+ * the value of the current entity tag.</entry></row>
+ * <row><entry>"id"</entry><entry>The "Identification" namespace. This 
+ * namespace is used by file managers and applications that list directories
+ * to check for loops and to uniquely identify files.</entry></row>
+ * <row><entry>"access"</entry><entry>The "Access" namespace. Used to check
+ * if a user has the proper privilidges to access files and perform
+ * file operations. Keys in this namespace are made to be generic 
+ * and easily understood, e.g. the "can_read" key is %TRUE if 
+ * the current user has permission to read the file. UNIX permissions and
+ * NTFS ACLs in Windows should be mapped to these values.</entry></row>
+ * <row><entry>"mountable"</entry><entry>The "Mountable" namespace. Includes 
+ * simple boolean keys for checking if a file or path supports mount operations, e.g.
+ * mount, unmount, eject. These are used for files of type %G_FILE_TYPE_MOUNTABLE.</entry></row>
+ * <row><entry>"time"</entry><entry>The "Time" namespace. Includes file 
+ * access, changed, created times. </entry></row>
+ * <row><entry>"unix"</entry><entry>The "Unix" namespace. Includes UNIX-specific
+ * information and may not be available for all files. Examples include 
+ * the UNIX "UID", "GID", etc.</entry></row>
+ * <row><entry>"dos"</entry><entry>The "DOS" namespace. Includes DOS-specific 
+ * information and may not be available for all files. Examples include
+ * "is_system" for checking if a file is marked as a system file, and "is_archive"
+ * for checking if a file is marked as an archive file.</entry></row>
+ * <row><entry>"owner"</entry><entry>The "Owner" namespace. Includes information
+ * about who owns a file. May not be available for all file systems. Examples include
+ * "user" for getting the user name of the file owner. This information is often mapped from
+ * some backend specific data such as a unix UID.</entry></row>
+ * <row><entry>"thumbnail"</entry><entry>The "Thumbnail" namespace. Includes 
+ * information about file thumbnails and their location within the file system. Exaples of 
+ * keys in this namespace include "path" to get the location of a thumbnail, and "failed"
+ * to check if thumbnailing of the file failed.</entry></row>
+ * <row><entry>"filesystem"</entry><entry>The "Filesystem" namespace. Gets information
+ * about the file system where a file is located, such as its type, how much
+ * space is left available, and the overall size of the file system.</entry></row>
+ * <row><entry>"gvfs"</entry><entry>The "GVFS" namespace. Keys in this namespace
+ * contain information about the current GVFS backend in use. </entry></row>
+ * <row><entry>"xattr"</entry><entry>The "xattr" namespace. Gets information 
+ * about extended user attributes. See attr(5). The "user." prefix of the
+ * extended user attribute name is stripped away when constructing keys in
+ * this namespace, e.g. "xattr::mime_type" for the extended attribute with 
+ * the name "user.mime_type". Note that this information is only available
+ * if GLib has been built with extended attribute support.</entry></row>
+ * <row><entry>"xattr-sys"</entry><entry>The "xattr-sys" namespace. 
+ * Gets information about extended attributes which are not user-specific. 
+ * See attr(5). Note that this information is only available if GLib
+ * has been built with extended attribute support.</entry></row>
+ * <row><entry>"selinux"</entry><entry>The "SELinux" namespace. Includes
+ * information about the SELinux context of files. Note that this information
+ * is only available if GLib has been built with SELinux support.</entry></row>
+ * </tbody>
+ * </tgroup>
+ * </table>
+ * </para>
+ * 
+ * Please note that these are not all of the possible namespaces.
+ * More namespaces can be added from GIO modules or by individual applications. 
+ * For more information about writing GIO modules, see #GIOModule.
+ *
+ * <!-- TODO: Implementation note about using extended attributes on supported 
+ * file systems -->
+ * 
+ * <para><table>
+ * <title>GFileAttributes Built-in Keys and Value Types</title>
+ * <tgroup cols='3' align='left'><thead>
+ * <row><entry>Enum Value</entry><entry>Namespace:Key</entry><entry>Value Type</entry></row>
+ * </thead><tbody>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_TYPE</entry><entry>standard::type</entry><entry>uint32 (#GFileType)</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN</entry><entry>standard::is-hidden</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP</entry><entry>standard::is-backup</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK</entry><entry>standard::is-symlink</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL</entry><entry>standard::is-virtual</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_NAME</entry><entry>standard::name</entry><entry>byte string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME</entry><entry>standard::display-name</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME</entry><entry>standard::edit-name</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_ICON</entry><entry>standard::icon</entry><entry>object (#GIcon)</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE</entry><entry>standard::content-type</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE</entry><entry>standard::fast-content-type</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_SIZE</entry><entry>standard::size</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE</entry><entry>standard::allocated-size</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET</entry><entry>standard::symlink-target</entry><entry>byte string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_TARGET_URI</entry><entry>standard::target-uri</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER</entry><entry>standard::sort-order</entry><entry>int32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ETAG_VALUE</entry><entry>etag::value</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ID_FILE</entry><entry>id::file</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ID_FILESYSTEM</entry><entry>id::filesystem</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ACCESS_CAN_READ</entry><entry>access::can-read</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE</entry><entry>access::can-write</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE</entry><entry>access::can-execute</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE</entry><entry>access::can-delete</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH</entry><entry>access::can-trash</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME</entry><entry>access::can-rename</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT</entry><entry>mountable::can-mount</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT</entry><entry>mountable::can-unmount</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT</entry><entry>mountable::can-eject</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE</entry><entry>mountable::unix-device</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI</entry><entry>mountable::hal-udi</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_MODIFIED</entry><entry>time::modified</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC</entry><entry>time::modified-usec</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_ACCESS</entry><entry>time::access</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_ACCESS_USEC</entry><entry>time::access-usec</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_CHANGED</entry><entry>time::changed</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_CHANGED_USEC</entry><entry>time::changed-usec</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_CREATED</entry><entry>time::created</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_TIME_CREATED_USEC</entry><entry>time::created-usec</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_DEVICE</entry><entry>unix::device</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_INODE</entry><entry>unix::inode</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_MODE</entry><entry>unix::mode</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_NLINK</entry><entry>unix::nlink</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_UID</entry><entry>unix::uid</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_GID</entry><entry>unix::gid</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_RDEV</entry><entry>unix::rdev</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE</entry><entry>unix::block-size</entry><entry>uint32</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_BLOCKS</entry><entry>unix::blocks</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT</entry><entry>unix::is-mountpoint</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE</entry><entry>dos::is-archive</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_DOS_IS_SYSTEM</entry><entry>dos::is-system</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_OWNER_USER</entry><entry>owner::user</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_OWNER_USER_REAL</entry><entry>owner::user-real</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_OWNER_GROUP</entry><entry>owner::group</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_THUMBNAIL_PATH</entry><entry>thumbnail::path</entry><entry>bytestring</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_THUMBNAILING_FAILED</entry><entry>thumbnail::failed</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_PREVIEW_ICON</entry><entry>preview::icon</entry><entry>object (#GIcon)</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_FILESYSTEM_SIZE</entry><entry>filesystem::size</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_FILESYSTEM_FREE</entry><entry>filesystem::free</entry><entry>uint64</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_FILESYSTEM_TYPE</entry><entry>filesystem::type</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_FILESYSTEM_READONLY</entry><entry>filesystem::readonly</entry><entry>boolean</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_GVFS_BACKEND</entry><entry>gvfs::backend</entry><entry>string</entry></row>
+ * <row><entry>%G_FILE_ATTRIBUTE_SELINUX_CONTEXT</entry><entry>selinux::context</entry><entry>string</entry></row>
+ * </tbody></tgroup></table></para>
+ *  
+ * Note that there are no predefined keys in the "xattr" and "xattr-sys" 
+ * namespaces. Keys for the "xattr" namespace are constructed by stripping
+ * away the "user." prefix from the extended user attribute, and prepending
+ * "xattr::". Keys for the "xattr-sys" namespace are constructed by 
+ * concatenating "xattr-sys::" with the extended attribute name. All extended
+ * attribute values are returned as hex-encoded strings in which bytes outside
+ * the ASCII range are encoded as hexadecimal escape sequences of the form
+ * \x<replaceable>nn</replaceable>.
+ **/ 
+
+/*
+ * _g_file_attribute_value_free:
+ * @attr: a #GFileAttributeValue. 
+ * 
+ * Frees the memory used by @attr.
+ *
+ **/
+void
+_g_file_attribute_value_free (GFileAttributeValue *attr)
+{
+  g_return_if_fail (attr != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  g_free (attr);
+}
+
+/*
+ * _g_file_attribute_value_clear:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Clears the value of @attr and sets its type to 
+ * %G_FILE_ATTRIBUTE_TYPE_INVALID.
+ * 
+ **/
+void
+_g_file_attribute_value_clear (GFileAttributeValue *attr)
+{
+  g_return_if_fail (attr != NULL);
+
+  if (attr->type == G_FILE_ATTRIBUTE_TYPE_STRING ||
+      attr->type == G_FILE_ATTRIBUTE_TYPE_BYTE_STRING)
+    g_free (attr->u.string);
+  
+  if (attr->type == G_FILE_ATTRIBUTE_TYPE_OBJECT &&
+      attr->u.obj != NULL)
+    g_object_unref (attr->u.obj);
+  
+  attr->type = G_FILE_ATTRIBUTE_TYPE_INVALID;
+}
+
+/*
+ * g_file_attribute_value_set:
+ * @attr: a #GFileAttributeValue to set the value in.
+ * @new_value: a #GFileAttributeValue to get the value from.
+ * 
+ * Sets an attribute's value from another attribute.
+ **/
+void
+_g_file_attribute_value_set (GFileAttributeValue        *attr,
+			     const GFileAttributeValue *new_value)
+{
+  g_return_if_fail (attr != NULL);
+  g_return_if_fail (new_value != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  *attr = *new_value;
+
+  if (attr->type == G_FILE_ATTRIBUTE_TYPE_STRING ||
+      attr->type == G_FILE_ATTRIBUTE_TYPE_BYTE_STRING)
+    attr->u.string = g_strdup (attr->u.string);
+  
+  if (attr->type == G_FILE_ATTRIBUTE_TYPE_OBJECT &&
+      attr->u.obj != NULL)
+    g_object_ref (attr->u.obj);
+}
+
+/*
+ * _g_file_attribute_value_new:
+ * 
+ * Creates a new file attribute.
+ * 
+ * Returns: a #GFileAttributeValue.
+ **/
+GFileAttributeValue *
+_g_file_attribute_value_new (void)
+{
+  GFileAttributeValue *attr;
+
+  attr = g_new (GFileAttributeValue, 1);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_INVALID;
+  return attr;
+}
+
+gpointer
+_g_file_attribute_value_peek_as_pointer (GFileAttributeValue *attr)
+{
+  switch (attr->type) {
+  case G_FILE_ATTRIBUTE_TYPE_STRING:
+  case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
+    return attr->u.string;
+  case G_FILE_ATTRIBUTE_TYPE_OBJECT:
+    return attr->u.obj;
+  default:
+    return (gpointer) &attr->u;
+  }
+}
+
+/*
+ * g_file_attribute_value_dup:
+ * @other: a #GFileAttributeValue to duplicate.
+ * 
+ * Duplicates a file attribute.
+ * 
+ * Returns: a duplicate of the @other.
+ **/
+GFileAttributeValue *
+_g_file_attribute_value_dup (const GFileAttributeValue *other)
+{
+  GFileAttributeValue *attr;
+
+  g_return_val_if_fail (other != NULL, NULL);
+
+  attr = g_new (GFileAttributeValue, 1);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_INVALID;
+  _g_file_attribute_value_set (attr, other);
+  return attr;
+}
+
+GType
+g_file_attribute_info_list_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      GType g_define_type_id =
+        g_boxed_type_register_static (I_("GFileAttributeInfoList"),
+                                      (GBoxedCopyFunc) g_file_attribute_info_list_dup,
+                                      (GBoxedFreeFunc) g_file_attribute_info_list_unref);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static gboolean
+valid_char (char c)
+{
+  return c >= 32 && c <= 126 && c != '\\';
+}
+
+static char *
+escape_byte_string (const char *str)
+{
+  size_t len;
+  int num_invalid, i;
+  char *escaped_val, *p;
+  unsigned char c;
+  const char hex_digits[] = "0123456789abcdef";
+
+  len = strlen (str);
+
+  num_invalid = 0;
+  for (i = 0; i < len; i++)
+    {
+      if (!valid_char (str[i]))
+	num_invalid++;
+    }
+
+  if (num_invalid == 0)
+    return g_strdup (str);
+  else
+    {
+      escaped_val = g_malloc (len + num_invalid*3 + 1);
+
+      p = escaped_val;
+      for (i = 0; i < len; i++)
+	{
+	  c = str[i];
+	  if (valid_char (c))
+	    *p++ = c;
+	  else
+	    {
+	      *p++ = '\\';
+	      *p++ = 'x';
+	      *p++ = hex_digits[(c >> 4) & 0xf];
+	      *p++ = hex_digits[c & 0xf];
+	    }
+	}
+      *p++ = 0;
+      return escaped_val;
+    }
+}
+
+/*
+ * _g_file_attribute_value_as_string:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Converts a #GFileAttributeValue to a string for display.
+ * The returned string should be freed when no longer needed.
+ *
+ * Returns: a string from the @attr, %NULL on error, or "&lt;invalid&gt;"
+ * if @attr is of type %G_FILE_ATTRIBUTE_TYPE_INVALID.
+ */
+char *
+_g_file_attribute_value_as_string (const GFileAttributeValue *attr)
+{
+  char *str;
+
+  g_return_val_if_fail (attr != NULL, NULL);
+
+  switch (attr->type)
+    {
+    case G_FILE_ATTRIBUTE_TYPE_STRING:
+      str = g_strdup (attr->u.string);
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
+      str = escape_byte_string (attr->u.string);
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_BOOLEAN:
+      str = g_strdup_printf ("%s", attr->u.boolean?"TRUE":"FALSE");
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_UINT32:
+      str = g_strdup_printf ("%u", (unsigned int)attr->u.uint32);
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_INT32:
+      str = g_strdup_printf ("%i", (int)attr->u.int32);
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_UINT64:
+      str = g_strdup_printf ("%"G_GUINT64_FORMAT, attr->u.uint64);
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_INT64:
+      str = g_strdup_printf ("%"G_GINT64_FORMAT, attr->u.int64);
+      break;
+    case G_FILE_ATTRIBUTE_TYPE_OBJECT:
+      str = g_strdup_printf ("%s:%p", g_type_name_from_instance
+                                          ((GTypeInstance *) attr->u.obj),
+                                      attr->u.obj);
+      break;
+    default:
+      g_warning ("Invalid type in GFileInfo attribute");
+      str = g_strdup ("<invalid>");
+      break;
+    }
+
+  return str;
+}
+
+/*
+ * _g_file_attribute_value_get_string:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the string from a file attribute value. If the value is not the
+ * right type then %NULL will be returned.
+ *
+ * Returns: the string value contained within the attribute, or %NULL.
+ */
+const char *
+_g_file_attribute_value_get_string (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return NULL;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_STRING, NULL);
+
+  return attr->u.string;
+}
+
+/*
+ * _g_file_attribute_value_get_byte_string:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the byte string from a file attribute value. If the value is not the
+ * right type then %NULL will be returned.
+ *
+ * Returns: the byte string contained within the attribute or %NULL.
+ */
+const char *
+_g_file_attribute_value_get_byte_string (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return NULL;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_BYTE_STRING, NULL);
+
+  return attr->u.string;
+}
+
+/*
+ * _g_file_attribute_value_get_boolean:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the boolean value from a file attribute value. If the value is not the
+ * right type then %FALSE will be returned.
+ *
+ * Returns: the boolean value contained within the attribute, or %FALSE.
+ */
+gboolean
+_g_file_attribute_value_get_boolean (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return FALSE;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_BOOLEAN, FALSE);
+
+  return attr->u.boolean;
+}
+
+/*
+ * _g_file_attribute_value_get_uint32:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the unsigned 32-bit integer from a file attribute value. If the value
+ * is not the right type then 0 will be returned.
+ *
+ * Returns: the unsigned 32-bit integer from the attribute, or 0.
+ */
+guint32
+_g_file_attribute_value_get_uint32 (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return 0;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_UINT32, 0);
+
+  return attr->u.uint32;
+}
+
+/*
+ * _g_file_attribute_value_get_int32:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the signed 32-bit integer from a file attribute value. If the value
+ * is not the right type then 0 will be returned.
+ *
+ * Returns: the signed 32-bit integer from the attribute, or 0.
+ */
+gint32
+_g_file_attribute_value_get_int32 (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return 0;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_INT32, 0);
+
+  return attr->u.int32;
+}
+
+/*
+ * _g_file_attribute_value_get_uint64:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the unsigned 64-bit integer from a file attribute value. If the value
+ * is not the right type then 0 will be returned.
+ *
+ * Returns: the unsigned 64-bit integer from the attribute, or 0.
+ */
+guint64
+_g_file_attribute_value_get_uint64 (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return 0;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_UINT64, 0);
+
+  return attr->u.uint64;
+}
+
+/*
+ * _g_file_attribute_value_get_int64:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the signed 64-bit integer from a file attribute value. If the value
+ * is not the right type then 0 will be returned.
+ *
+ * Returns: the signed 64-bit integer from the attribute, or 0.
+ */
+gint64
+_g_file_attribute_value_get_int64 (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return 0;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_INT64, 0);
+
+  return attr->u.int64;
+}
+
+/*
+ * _g_file_attribute_value_get_object:
+ * @attr: a #GFileAttributeValue.
+ *
+ * Gets the GObject from a file attribute value. If the value
+ * is not the right type then %NULL will be returned.
+ *
+ * Returns: the GObject from the attribute, or %NULL.
+ **/
+GObject *
+_g_file_attribute_value_get_object (const GFileAttributeValue *attr)
+{
+  if (attr == NULL)
+    return NULL;
+
+  g_return_val_if_fail (attr->type == G_FILE_ATTRIBUTE_TYPE_OBJECT, NULL);
+
+  return attr->u.obj;
+}
+
+
+void
+_g_file_attribute_value_set_from_pointer (GFileAttributeValue *value,
+					  GFileAttributeType   type,
+					  gpointer             value_p,
+					  gboolean             dup)
+{
+  _g_file_attribute_value_clear (value);
+  value->type = type;
+  switch (type)
+    {
+    case G_FILE_ATTRIBUTE_TYPE_STRING:
+    case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
+      if (dup)
+	value->u.string = g_strdup (value_p);
+      else
+	value->u.string = value_p;
+      break;
+
+    case G_FILE_ATTRIBUTE_TYPE_OBJECT:
+      if (dup)
+	value->u.obj = g_object_ref (value_p);
+      else
+	value->u.obj = value_p;
+      break;
+
+    case G_FILE_ATTRIBUTE_TYPE_BOOLEAN:
+      value->u.boolean = *(gboolean *)value_p;
+      break;
+
+    case G_FILE_ATTRIBUTE_TYPE_UINT32:
+      value->u.uint32 = *(guint32 *)value_p;
+      break;
+
+    case G_FILE_ATTRIBUTE_TYPE_INT32:
+      value->u.int32 = *(gint32 *)value_p;
+      break;
+
+    case G_FILE_ATTRIBUTE_TYPE_UINT64:
+      value->u.uint64 = *(guint64 *)value_p;
+      break;
+
+    case G_FILE_ATTRIBUTE_TYPE_INT64:
+      value->u.int64 = *(gint64 *)value_p;
+      break;
+    default:
+      g_warning ("Unknown type specified in g_file_info_set_attribute\n");
+      break;
+    }
+}
+
+/*
+ * _g_file_attribute_value_set_string:
+ * @attr: a #GFileAttributeValue.
+ * @string: a string to set within the type.
+ *
+ * Sets the attribute value to a given string.
+ */
+void
+_g_file_attribute_value_set_string (GFileAttributeValue *attr,
+				    const char          *string)
+{
+  g_return_if_fail (attr != NULL);
+  g_return_if_fail (string != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_STRING;
+  attr->u.string = g_strdup (string);
+}
+
+/*
+ * _g_file_attribute_value_set_byte_string:
+ * @attr: a #GFileAttributeValue.
+ * @string: a byte string to set within the type.
+ *
+ * Sets the attribute value to a given byte string.
+ */
+void
+_g_file_attribute_value_set_byte_string (GFileAttributeValue *attr,
+					 const char          *string)
+{
+  g_return_if_fail (attr != NULL);
+  g_return_if_fail (string != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_BYTE_STRING;
+  attr->u.string = g_strdup (string);
+}
+
+/*
+ * _g_file_attribute_value_set_boolean:
+ * @attr: a #GFileAttributeValue.
+ * @value: a #gboolean to set within the type.
+ *
+ * Sets the attribute value to the given boolean value.
+ */
+void
+_g_file_attribute_value_set_boolean (GFileAttributeValue *attr,
+				     gboolean             value)
+{
+  g_return_if_fail (attr != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_BOOLEAN;
+  attr->u.boolean = !!value;
+}
+
+/*
+ * _g_file_attribute_value_set_uint32:
+ * @attr: a #GFileAttributeValue.
+ * @value: a #guint32 to set within the type.
+ *
+ * Sets the attribute value to the given unsigned 32-bit integer.
+ */
+void
+_g_file_attribute_value_set_uint32 (GFileAttributeValue *attr,
+				    guint32              value)
+{
+  g_return_if_fail (attr != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_UINT32;
+  attr->u.uint32 = value;
+}
+
+/*
+ * _g_file_attribute_value_set_int32:
+ * @attr: a #GFileAttributeValue.
+ * @value: a #gint32 to set within the type.
+ *
+ * Sets the attribute value to the given signed 32-bit integer.
+ */
+void
+_g_file_attribute_value_set_int32 (GFileAttributeValue *attr,
+				   gint32               value)
+{
+  g_return_if_fail (attr != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_INT32;
+  attr->u.int32 = value;
+}
+
+/*
+ * _g_file_attribute_value_set_uint64:
+ * @attr: a #GFileAttributeValue.
+ * @value: a #guint64 to set within the type.
+ *
+ * Sets the attribute value to a given unsigned 64-bit integer.
+ */
+void
+_g_file_attribute_value_set_uint64 (GFileAttributeValue *attr,
+				    guint64              value)
+{
+  g_return_if_fail (attr != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_UINT64;
+  attr->u.uint64 = value;
+}
+
+/*
+ * _g_file_attribute_value_set_int64:
+ * @attr: a #GFileAttributeValue.
+ * @value: a #gint64 to set within the type.
+ *
+ * Sets the attribute value to a given signed 64-bit integer.
+ */
+void
+_g_file_attribute_value_set_int64 (GFileAttributeValue *attr,
+				   gint64               value)
+{
+  g_return_if_fail (attr != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_INT64;
+  attr->u.int64 = value;
+}
+
+/*
+ * _g_file_attribute_value_set_object:
+ * @attr: a #GFileAttributeValue.
+ * @obj: a #GObject.
+ *
+ * Sets the attribute to contain the value @obj.
+ * The @attr references the GObject internally.
+ */
+void
+_g_file_attribute_value_set_object (GFileAttributeValue *attr,
+				    GObject             *obj)
+{
+  g_return_if_fail (attr != NULL);
+  g_return_if_fail (obj != NULL);
+
+  _g_file_attribute_value_clear (attr);
+  attr->type = G_FILE_ATTRIBUTE_TYPE_OBJECT;
+  attr->u.obj = g_object_ref (obj);
+}
+
+typedef struct {
+  GFileAttributeInfoList public;
+  GArray *array;
+  int ref_count;
+} GFileAttributeInfoListPriv;
+
+static void
+list_update_public (GFileAttributeInfoListPriv *priv)
+{
+  priv->public.infos = (GFileAttributeInfo *)priv->array->data;
+  priv->public.n_infos = priv->array->len;
+}
+
+/**
+ * g_file_attribute_info_list_new:
+ *
+ * Creates a new file attribute info list.
+ *
+ * Returns: a #GFileAttributeInfoList.
+ */
+GFileAttributeInfoList *
+g_file_attribute_info_list_new (void)
+{
+  GFileAttributeInfoListPriv *priv;
+
+  priv = g_new0 (GFileAttributeInfoListPriv, 1);
+
+  priv->ref_count = 1;
+  priv->array = g_array_new (TRUE, FALSE, sizeof (GFileAttributeInfo));
+
+  list_update_public (priv);
+
+  return (GFileAttributeInfoList *)priv;
+}
+
+/**
+ * g_file_attribute_info_list_dup:
+ * @list: a #GFileAttributeInfoList to duplicate.
+ *
+ * Makes a duplicate of a file attribute info list.
+ *
+ * Returns: a copy of the given @list.
+ */
+GFileAttributeInfoList *
+g_file_attribute_info_list_dup (GFileAttributeInfoList *list)
+{
+  GFileAttributeInfoListPriv *new;
+  int i;
+
+  g_return_val_if_fail (list != NULL, NULL);
+
+  new = g_new0 (GFileAttributeInfoListPriv, 1);
+  new->ref_count = 1;
+  new->array = g_array_new (TRUE, FALSE, sizeof (GFileAttributeInfo));
+
+  g_array_set_size (new->array, list->n_infos);
+  list_update_public (new);
+  for (i = 0; i < list->n_infos; i++)
+    {
+      new->public.infos[i].name = g_strdup (list->infos[i].name);
+      new->public.infos[i].type = list->infos[i].type;
+      new->public.infos[i].flags = list->infos[i].flags;
+    }
+
+  return (GFileAttributeInfoList *)new;
+}
+
+/**
+ * g_file_attribute_info_list_ref:
+ * @list: a #GFileAttributeInfoList to reference.
+ *
+ * References a file attribute info list.
+ *
+ * Returns: #GFileAttributeInfoList or %NULL on error.
+ */
+GFileAttributeInfoList *
+g_file_attribute_info_list_ref (GFileAttributeInfoList *list)
+{
+  GFileAttributeInfoListPriv *priv = (GFileAttributeInfoListPriv *)list;
+
+  g_return_val_if_fail (list != NULL, NULL);
+  g_return_val_if_fail (priv->ref_count > 0, NULL);
+
+  g_atomic_int_inc (&priv->ref_count);
+
+  return list;
+}
+
+/**
+ * g_file_attribute_info_list_unref:
+ * @list: The #GFileAttributeInfoList to unreference.
+ *
+ * Removes a reference from the given @list. If the reference count
+ * falls to zero, the @list is deleted.
+ */
+void
+g_file_attribute_info_list_unref (GFileAttributeInfoList *list)
+{
+  GFileAttributeInfoListPriv *priv = (GFileAttributeInfoListPriv *)list;
+  int i;
+
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (priv->ref_count > 0);
+
+  if (g_atomic_int_dec_and_test (&priv->ref_count))
+    {
+      for (i = 0; i < list->n_infos; i++)
+        g_free (list->infos[i].name);
+      g_array_free (priv->array, TRUE);
+    }
+}
+
+static int
+g_file_attribute_info_list_bsearch (GFileAttributeInfoList *list,
+				    const char             *name)
+{
+  int start, end, mid;
+
+  start = 0;
+  end = list->n_infos;
+
+  while (start != end)
+    {
+      mid = start + (end - start) / 2;
+
+      if (strcmp (name, list->infos[mid].name) < 0)
+	end = mid;
+      else if (strcmp (name, list->infos[mid].name) > 0)
+	start = mid + 1;
+      else
+	return mid;
+    }
+  return start;
+}
+
+/**
+ * g_file_attribute_info_list_lookup:
+ * @list: a #GFileAttributeInfoList.
+ * @name: the name of the attribute to lookup.
+ *
+ * Gets the file attribute with the name @name from @list.
+ *
+ * Returns: a #GFileAttributeInfo for the @name, or %NULL if an
+ * attribute isn't found.
+ */
+const GFileAttributeInfo *
+g_file_attribute_info_list_lookup (GFileAttributeInfoList *list,
+				   const char             *name)
+{
+  int i;
+
+  g_return_val_if_fail (list != NULL, NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  i = g_file_attribute_info_list_bsearch (list, name);
+
+  if (i < list->n_infos && strcmp (list->infos[i].name, name) == 0)
+    return &list->infos[i];
+
+  return NULL;
+}
+
+/**
+ * g_file_attribute_info_list_add:
+ * @list: a #GFileAttributeInfoList.
+ * @name: the name of the attribute to add.
+ * @type: the #GFileAttributeType for the attribute.
+ * @flags: #GFileAttributeInfoFlags for the attribute.
+ *
+ * Adds a new attribute with @name to the @list, setting
+ * its @type and @flags.
+ */
+void
+g_file_attribute_info_list_add (GFileAttributeInfoList *list,
+				const char             *name,
+				GFileAttributeType      type,
+				GFileAttributeInfoFlags flags)
+{
+  GFileAttributeInfoListPriv *priv = (GFileAttributeInfoListPriv *)list;
+  GFileAttributeInfo info;
+  int i;
+
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (name != NULL);
+
+  i = g_file_attribute_info_list_bsearch (list, name);
+
+  if (i < list->n_infos && strcmp (list->infos[i].name, name) == 0)
+    {
+      list->infos[i].type = type;
+      return;
+    }
+
+  info.name = g_strdup (name);
+  info.type = type;
+  info.flags = flags;
+  g_array_insert_vals (priv->array, i, &info, 1);
+
+  list_update_public (priv);
+}
+
+#define __G_FILE_ATTRIBUTE_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfileattribute.h b/gio/gfileattribute.h
new file mode 100644
index 0000000..46803fb
--- /dev/null
+++ b/gio/gfileattribute.h
@@ -0,0 +1,77 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_ATTRIBUTE_H__
+#define __G_FILE_ATTRIBUTE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GFileAttributeInfo:
+ * @name: the name of the attribute.
+ * @type: the #GFileAttributeType type of the attribute.
+ * @flags: a set of #GFileAttributeInfoFlags.
+ *
+ * Information about a specific attribute.
+ **/
+struct _GFileAttributeInfo
+{
+  char                    *name;
+  GFileAttributeType       type;
+  GFileAttributeInfoFlags  flags;
+};
+
+/**
+ * GFileAttributeInfoList:
+ * @infos: an array of #GFileAttributeInfo<!-- -->s.
+ * @n_infos: the number of values in the array.
+ *
+ * Acts as a lightweight registry for possible valid file attributes.
+ * The registry stores Key-Value pair formats as #GFileAttributeInfo<!-- -->s.
+ **/
+struct _GFileAttributeInfoList
+{
+  GFileAttributeInfo *infos;
+  int                 n_infos;
+};
+
+GType                     g_file_attribute_info_list_get_type (void);
+GFileAttributeInfoList *  g_file_attribute_info_list_new    (void);
+GFileAttributeInfoList *  g_file_attribute_info_list_ref    (GFileAttributeInfoList *list);
+void                      g_file_attribute_info_list_unref  (GFileAttributeInfoList *list);
+GFileAttributeInfoList *  g_file_attribute_info_list_dup    (GFileAttributeInfoList *list);
+const GFileAttributeInfo *g_file_attribute_info_list_lookup (GFileAttributeInfoList *list,
+							     const char             *name);
+void                      g_file_attribute_info_list_add    (GFileAttributeInfoList *list,
+							     const char             *name,
+							     GFileAttributeType      type,
+							     GFileAttributeInfoFlags flags);
+
+G_END_DECLS
+
+#endif /* __G_FILE_INFO_H__ */
diff --git a/gio/gfileenumerator.c b/gio/gfileenumerator.c
new file mode 100644
index 0000000..579215f
--- /dev/null
+++ b/gio/gfileenumerator.c
@@ -0,0 +1,764 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gfileenumerator.h"
+#include "gfile.h"
+#include "gioscheduler.h"
+#include "gasyncresult.h"
+#include "gasynchelper.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfileenumerator
+ * @short_description: Enumerated Files Routines
+ * @include: gio/gio.h
+ * 
+ * #GFileEnumerator allows you to operate on a set of #GFile<!-- -->s, 
+ * returning a #GFileInfo structure for each file enumerated (e.g. 
+ * g_file_enumerate_children() will return a #GFileEnumerator for each 
+ * of the children within a directory).
+ *
+ * To get the next file's information from a #GFileEnumerator, use 
+ * g_file_enumerator_next_file() or its asynchronous version, 
+ * g_file_enumerator_next_file_async(). Note that the asynchronous 
+ * version will return a list of #GFileInfo<!---->s, whereas the 
+ * synchronous will only return the next file in the enumerator.
+ *
+ * To close a #GFileEnumerator, use g_file_enumerator_close(), or 
+ * its asynchronous version, g_file_enumerator_close_async(). Once 
+ * a #GFileEnumerator is closed, no further actions may be performed 
+ * on it, and it should be freed with g_object_unref().
+ * 
+ **/ 
+
+G_DEFINE_TYPE (GFileEnumerator, g_file_enumerator, G_TYPE_OBJECT);
+
+struct _GFileEnumeratorPrivate {
+  /* TODO: Should be public for subclasses? */
+  GFile *container;
+  guint closed : 1;
+  guint pending : 1;
+  GAsyncReadyCallback outstanding_callback;
+  GError *outstanding_error;
+};
+
+enum {
+  PROP_0,
+  PROP_CONTAINER
+};
+
+static void     g_file_enumerator_real_next_files_async  (GFileEnumerator      *enumerator,
+							  int                   num_files,
+							  int                   io_priority,
+							  GCancellable         *cancellable,
+							  GAsyncReadyCallback   callback,
+							  gpointer              user_data);
+static GList *  g_file_enumerator_real_next_files_finish (GFileEnumerator      *enumerator,
+							  GAsyncResult         *res,
+							  GError              **error);
+static void     g_file_enumerator_real_close_async       (GFileEnumerator      *enumerator,
+							  int                   io_priority,
+							  GCancellable         *cancellable,
+							  GAsyncReadyCallback   callback,
+							  gpointer              user_data);
+static gboolean g_file_enumerator_real_close_finish      (GFileEnumerator      *enumerator,
+							  GAsyncResult         *res,
+							  GError              **error);
+
+static void
+g_file_enumerator_set_property (GObject      *object,
+                                guint         property_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+  GFileEnumerator *enumerator;
+  
+  enumerator = G_FILE_ENUMERATOR (object);
+  
+  switch (property_id) {
+  case PROP_CONTAINER:
+    enumerator->priv->container = g_value_dup_object (value);
+    break;
+  default:
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    break;
+  }
+}
+
+static void
+g_file_enumerator_dispose (GObject *object)
+{
+  GFileEnumerator *enumerator;
+
+  enumerator = G_FILE_ENUMERATOR (object);
+  
+  if (enumerator->priv->container) {
+    g_object_unref (enumerator->priv->container);
+    enumerator->priv->container = NULL;
+  }
+
+  G_OBJECT_CLASS (g_file_enumerator_parent_class)->dispose (object);
+}
+
+static void
+g_file_enumerator_finalize (GObject *object)
+{
+  GFileEnumerator *enumerator;
+
+  enumerator = G_FILE_ENUMERATOR (object);
+  
+  if (!enumerator->priv->closed)
+    g_file_enumerator_close (enumerator, NULL, NULL);
+
+  G_OBJECT_CLASS (g_file_enumerator_parent_class)->finalize (object);
+}
+
+static void
+g_file_enumerator_class_init (GFileEnumeratorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GFileEnumeratorPrivate));
+  
+  gobject_class->set_property = g_file_enumerator_set_property;
+  gobject_class->dispose = g_file_enumerator_dispose;
+  gobject_class->finalize = g_file_enumerator_finalize;
+
+  klass->next_files_async = g_file_enumerator_real_next_files_async;
+  klass->next_files_finish = g_file_enumerator_real_next_files_finish;
+  klass->close_async = g_file_enumerator_real_close_async;
+  klass->close_finish = g_file_enumerator_real_close_finish;
+
+  g_object_class_install_property
+    (gobject_class, PROP_CONTAINER,
+     g_param_spec_object ("container", P_("Container"),
+                          P_("The container that is being enumerated"),
+                          G_TYPE_FILE,
+                          G_PARAM_WRITABLE |
+                          G_PARAM_CONSTRUCT_ONLY |
+                          G_PARAM_STATIC_STRINGS));
+}
+
+static void
+g_file_enumerator_init (GFileEnumerator *enumerator)
+{
+  enumerator->priv = G_TYPE_INSTANCE_GET_PRIVATE (enumerator,
+						  G_TYPE_FILE_ENUMERATOR,
+						  GFileEnumeratorPrivate);
+}
+
+/**
+ * g_file_enumerator_next_file:
+ * @enumerator: a #GFileEnumerator.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Returns information for the next file in the enumerated object.
+ * Will block until the information is available. The #GFileInfo 
+ * returned from this function will contain attributes that match the 
+ * attribute string that was passed when the #GFileEnumerator was created.
+ *
+ * On error, returns %NULL and sets @error to the error. If the
+ * enumerator is at the end, %NULL will be returned and @error will
+ * be unset.
+ *
+ * Return value: A #GFileInfo or %NULL on error or end of enumerator.
+ *    Free the returned object with g_object_unref() when no longer needed.
+ **/
+GFileInfo *
+g_file_enumerator_next_file (GFileEnumerator *enumerator,
+			     GCancellable *cancellable,
+			     GError **error)
+{
+  GFileEnumeratorClass *class;
+  GFileInfo *info;
+  
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
+  g_return_val_if_fail (enumerator != NULL, NULL);
+  
+  if (enumerator->priv->closed)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                           _("Enumerator is closed"));
+      return NULL;
+    }
+
+  if (enumerator->priv->pending)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PENDING,
+                           _("File enumerator has outstanding operation"));
+      return NULL;
+    }
+
+  if (enumerator->priv->outstanding_error)
+    {
+      g_propagate_error (error, enumerator->priv->outstanding_error);
+      enumerator->priv->outstanding_error = NULL;
+      return NULL;
+    }
+  
+  class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  enumerator->priv->pending = TRUE;
+  info = (* class->next_file) (enumerator, cancellable, error);
+  enumerator->priv->pending = FALSE;
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  return info;
+}
+  
+/**
+ * g_file_enumerator_close:
+ * @enumerator: a #GFileEnumerator.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Releases all resources used by this enumerator, making the
+ * enumerator return %G_IO_ERROR_CLOSED on all calls.
+ *
+ * This will be automatically called when the last reference
+ * is dropped, but you might want to call this function to make 
+ * sure resources are released as early as possible.
+ *
+ * Return value: #TRUE on success or #FALSE on error.
+ **/
+gboolean
+g_file_enumerator_close (GFileEnumerator  *enumerator,
+			 GCancellable     *cancellable,
+			 GError          **error)
+{
+  GFileEnumeratorClass *class;
+
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), FALSE);
+  g_return_val_if_fail (enumerator != NULL, FALSE);
+  
+  class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
+
+  if (enumerator->priv->closed)
+    return TRUE;
+  
+  if (enumerator->priv->pending)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PENDING,
+                           _("File enumerator has outstanding operation"));
+      return FALSE;
+    }
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  enumerator->priv->pending = TRUE;
+  (* class->close_fn) (enumerator, cancellable, error);
+  enumerator->priv->pending = FALSE;
+  enumerator->priv->closed = TRUE;
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  return TRUE;
+}
+
+static void
+next_async_callback_wrapper (GObject      *source_object,
+			     GAsyncResult *res,
+			     gpointer      user_data)
+{
+  GFileEnumerator *enumerator = G_FILE_ENUMERATOR (source_object);
+
+  enumerator->priv->pending = FALSE;
+  if (enumerator->priv->outstanding_callback)
+    (*enumerator->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (enumerator);
+}
+
+/**
+ * g_file_enumerator_next_files_async:
+ * @enumerator: a #GFileEnumerator.
+ * @num_files: the number of file info objects to request
+ * @io_priority: the <link linkend="gioscheduler">io priority</link> 
+ *     of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Request information for a number of files from the enumerator asynchronously.
+ * When all i/o for the operation is finished the @callback will be called with
+ * the requested information. 
+ *
+ * The callback can be called with less than @num_files files in case of error
+ * or at the end of the enumerator. In case of a partial error the callback will
+ * be called with any succeeding items and no error, and on the next request the
+ * error will be reported. If a request is cancelled the callback will be called
+ * with %G_IO_ERROR_CANCELLED.
+ *
+ * During an async request no other sync and async calls are allowed, and will
+ * result in %G_IO_ERROR_PENDING errors. 
+ *
+ * Any outstanding i/o request with higher priority (lower numerical value) will
+ * be executed before an outstanding request with lower priority. Default
+ * priority is %G_PRIORITY_DEFAULT.
+ **/
+void
+g_file_enumerator_next_files_async (GFileEnumerator     *enumerator,
+				    int                  num_files,
+				    int                  io_priority,
+				    GCancellable        *cancellable,
+				    GAsyncReadyCallback  callback,
+				    gpointer             user_data)
+{
+  GFileEnumeratorClass *class;
+  GSimpleAsyncResult *simple;
+
+  g_return_if_fail (G_IS_FILE_ENUMERATOR (enumerator));
+  g_return_if_fail (enumerator != NULL);
+  g_return_if_fail (num_files >= 0);
+
+  if (num_files == 0)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (enumerator),
+					  callback,
+					  user_data,
+					  g_file_enumerator_next_files_async);
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+  
+  if (enumerator->priv->closed)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (enumerator),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_CLOSED,
+					   _("File enumerator is already closed"));
+      return;
+    }
+  
+  if (enumerator->priv->pending)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (enumerator),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_PENDING,
+					   _("File enumerator has outstanding operation"));
+      return;
+    }
+
+  class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
+  
+  enumerator->priv->pending = TRUE;
+  enumerator->priv->outstanding_callback = callback;
+  g_object_ref (enumerator);
+  (* class->next_files_async) (enumerator, num_files, io_priority, cancellable, 
+			       next_async_callback_wrapper, user_data);
+}
+
+/**
+ * g_file_enumerator_next_files_finish:
+ * @enumerator: a #GFileEnumerator.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes the asynchronous operation started with g_file_enumerator_next_files_async().
+ * 
+ * Returns: a #GList of #GFileInfo<!---->s. You must free the list with 
+ *     g_list_free() and unref the infos with g_object_unref when you're 
+ *     done with them.
+ **/
+GList *
+g_file_enumerator_next_files_finish (GFileEnumerator  *enumerator,
+				     GAsyncResult     *result,
+				     GError          **error)
+{
+  GFileEnumeratorClass *class;
+  GSimpleAsyncResult *simple;
+  
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
+  
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+      
+      /* Special case read of 0 files */
+      if (g_simple_async_result_get_source_tag (simple) == g_file_enumerator_next_files_async)
+	return NULL;
+    }
+  
+  class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
+  return class->next_files_finish (enumerator, result, error);
+}
+
+static void
+close_async_callback_wrapper (GObject      *source_object,
+			      GAsyncResult *res,
+			      gpointer      user_data)
+{
+  GFileEnumerator *enumerator = G_FILE_ENUMERATOR (source_object);
+  
+  enumerator->priv->pending = FALSE;
+  enumerator->priv->closed = TRUE;
+  if (enumerator->priv->outstanding_callback)
+    (*enumerator->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (enumerator);
+}
+
+/**
+ * g_file_enumerator_close_async:
+ * @enumerator: a #GFileEnumerator.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously closes the file enumerator. 
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned in 
+ * g_file_enumerator_close_finish(). 
+ **/
+void
+g_file_enumerator_close_async (GFileEnumerator     *enumerator,
+			       int                  io_priority,
+			       GCancellable        *cancellable,
+			       GAsyncReadyCallback  callback,
+			       gpointer             user_data)
+{
+  GFileEnumeratorClass *class;
+
+  g_return_if_fail (G_IS_FILE_ENUMERATOR (enumerator));
+
+  if (enumerator->priv->closed)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (enumerator),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_CLOSED,
+					   _("File enumerator is already closed"));
+      return;
+    }
+  
+  if (enumerator->priv->pending)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (enumerator),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_PENDING,
+					   _("File enumerator has outstanding operation"));
+      return;
+    }
+
+  class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
+  
+  enumerator->priv->pending = TRUE;
+  enumerator->priv->outstanding_callback = callback;
+  g_object_ref (enumerator);
+  (* class->close_async) (enumerator, io_priority, cancellable,
+			  close_async_callback_wrapper, user_data);
+}
+
+/**
+ * g_file_enumerator_close_finish:
+ * @enumerator: a #GFileEnumerator.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes closing a file enumerator, started from g_file_enumerator_close_async().
+ * 
+ * If the file enumerator was already closed when g_file_enumerator_close_async() 
+ * was called, then this function will report %G_IO_ERROR_CLOSED in @error, and 
+ * return %FALSE. If the file enumerator had pending operation when the close 
+ * operation was started, then this function will report %G_IO_ERROR_PENDING, and
+ * return %FALSE.  If @cancellable was not %NULL, then the operation may have been 
+ * cancelled by triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be set, and %FALSE will be 
+ * returned. 
+ * 
+ * Returns: %TRUE if the close operation has finished successfully.
+ **/
+gboolean
+g_file_enumerator_close_finish (GFileEnumerator  *enumerator,
+				GAsyncResult     *result,
+				GError          **error)
+{
+  GSimpleAsyncResult *simple;
+  GFileEnumeratorClass *class;
+
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+  
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
+  return class->close_finish (enumerator, result, error);
+}
+
+/**
+ * g_file_enumerator_is_closed:
+ * @enumerator: a #GFileEnumerator.
+ *
+ * Checks if the file enumerator has been closed.
+ * 
+ * Returns: %TRUE if the @enumerator is closed.
+ **/
+gboolean
+g_file_enumerator_is_closed (GFileEnumerator *enumerator)
+{
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), TRUE);
+  
+  return enumerator->priv->closed;
+}
+
+/**
+ * g_file_enumerator_has_pending:
+ * @enumerator: a #GFileEnumerator.
+ * 
+ * Checks if the file enumerator has pending operations.
+ *
+ * Returns: %TRUE if the @enumerator has pending operations.
+ **/
+gboolean
+g_file_enumerator_has_pending (GFileEnumerator *enumerator)
+{
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), TRUE);
+  
+  return enumerator->priv->pending;
+}
+
+/**
+ * g_file_enumerator_set_pending:
+ * @enumerator: a #GFileEnumerator.
+ * @pending: a boolean value.
+ * 
+ * Sets the file enumerator as having pending operations.
+ **/
+void
+g_file_enumerator_set_pending (GFileEnumerator *enumerator,
+			       gboolean         pending)
+{
+  g_return_if_fail (G_IS_FILE_ENUMERATOR (enumerator));
+  
+  enumerator->priv->pending = pending;
+}
+
+/**
+ * g_file_enumerator_get_container:
+ * @enumerator: a #GFileEnumerator
+ *
+ * Get the #GFile container which is being enumerated.
+ *
+ * Returns: the #GFile which is being enumerated.
+ *
+ * Since: 2.18.
+ */
+GFile *
+g_file_enumerator_get_container (GFileEnumerator *enumerator)
+{
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
+
+  return enumerator->priv->container;
+}
+
+typedef struct {
+  int                num_files;
+  GList             *files;
+} NextAsyncOp;
+
+static void
+next_async_op_free (NextAsyncOp *op)
+{
+  /* Free the list, if finish wasn't called */
+  g_list_foreach (op->files, (GFunc)g_object_unref, NULL);
+  g_list_free (op->files);
+  
+  g_free (op);
+}
+		    
+
+
+static void
+next_files_thread (GSimpleAsyncResult *res,
+		   GObject            *object,
+		   GCancellable       *cancellable)
+{
+  NextAsyncOp *op;
+  GFileEnumeratorClass *class;
+  GError *error = NULL;
+  GFileInfo *info;
+  GFileEnumerator *enumerator;
+  int i;
+
+  enumerator = G_FILE_ENUMERATOR (object);
+  op = g_simple_async_result_get_op_res_gpointer (res);
+
+  class = G_FILE_ENUMERATOR_GET_CLASS (object);
+
+  for (i = 0; i < op->num_files; i++)
+    {
+      if (g_cancellable_set_error_if_cancelled (cancellable, &error))
+	info = NULL;
+      else
+	info = class->next_file (enumerator, cancellable, &error);
+      
+      if (info == NULL)
+	{
+	  /* If we get an error after first file, return that on next operation */
+	  if (error != NULL && i > 0)
+	    {
+	      if (error->domain == G_IO_ERROR &&
+		  error->code == G_IO_ERROR_CANCELLED)
+		g_error_free (error); /* Never propagate cancel errors to other call */
+	      else
+		enumerator->priv->outstanding_error = error;
+	      error = NULL;
+	    }
+	      
+	  break;
+	}
+      else
+	op->files = g_list_prepend (op->files, info);
+    }
+}
+
+static void
+g_file_enumerator_real_next_files_async (GFileEnumerator     *enumerator,
+					 int                  num_files,
+					 int                  io_priority,
+					 GCancellable        *cancellable,
+					 GAsyncReadyCallback  callback,
+					 gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  NextAsyncOp *op;
+
+  op = g_new0 (NextAsyncOp, 1);
+
+  op->num_files = num_files;
+  op->files = NULL;
+
+  res = g_simple_async_result_new (G_OBJECT (enumerator), callback, user_data, g_file_enumerator_real_next_files_async);
+  g_simple_async_result_set_op_res_gpointer (res, op, (GDestroyNotify) next_async_op_free);
+  
+  g_simple_async_result_run_in_thread (res, next_files_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GList *
+g_file_enumerator_real_next_files_finish (GFileEnumerator                *enumerator,
+					  GAsyncResult                   *result,
+					  GError                        **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  NextAsyncOp *op;
+  GList *res;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+	    g_file_enumerator_real_next_files_async);
+
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+
+  res = op->files;
+  op->files = NULL;
+  return res;
+}
+
+static void
+close_async_thread (GSimpleAsyncResult *res,
+		    GObject            *object,
+		    GCancellable       *cancellable)
+{
+  GFileEnumeratorClass *class;
+  GError *error = NULL;
+  gboolean result;
+
+  /* Auto handling of cancelation disabled, and ignore
+     cancellation, since we want to close things anyway, although
+     possibly in a quick-n-dirty way. At least we never want to leak
+     open handles */
+  
+  class = G_FILE_ENUMERATOR_GET_CLASS (object);
+  result = class->close_fn (G_FILE_ENUMERATOR (object), cancellable, &error);
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+
+static void
+g_file_enumerator_real_close_async (GFileEnumerator     *enumerator,
+				    int                  io_priority,
+				    GCancellable        *cancellable,
+				    GAsyncReadyCallback  callback,
+				    gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  
+  res = g_simple_async_result_new (G_OBJECT (enumerator),
+				   callback,
+				   user_data,
+				   g_file_enumerator_real_close_async);
+
+  g_simple_async_result_set_handle_cancellation (res, FALSE);
+  
+  g_simple_async_result_run_in_thread (res,
+				       close_async_thread,
+				       io_priority,
+				       cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_file_enumerator_real_close_finish (GFileEnumerator  *enumerator,
+                                     GAsyncResult     *result,
+                                     GError          **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+	    g_file_enumerator_real_close_async);
+  return TRUE;
+}
+
+#define __G_FILE_ENUMERATOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfileenumerator.h b/gio/gfileenumerator.h
new file mode 100644
index 0000000..1214b49
--- /dev/null
+++ b/gio/gfileenumerator.h
@@ -0,0 +1,133 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_ENUMERATOR_H__
+#define __G_FILE_ENUMERATOR_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE_ENUMERATOR         (g_file_enumerator_get_type ())
+#define G_FILE_ENUMERATOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_ENUMERATOR, GFileEnumerator))
+#define G_FILE_ENUMERATOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_ENUMERATOR, GFileEnumeratorClass))
+#define G_IS_FILE_ENUMERATOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_ENUMERATOR))
+#define G_IS_FILE_ENUMERATOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_ENUMERATOR))
+#define G_FILE_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_ENUMERATOR, GFileEnumeratorClass))
+
+/**
+ * GFileEnumerator:
+ * @parent_instance: The parent class.
+ *
+ * A per matched file iterator.
+ **/
+typedef struct _GFileEnumeratorClass    GFileEnumeratorClass;
+typedef struct _GFileEnumeratorPrivate  GFileEnumeratorPrivate;
+
+struct _GFileEnumerator
+{
+  GObject parent_instance;
+
+  /*< private >*/
+  GFileEnumeratorPrivate *priv;
+};
+
+struct _GFileEnumeratorClass
+{
+  GObjectClass parent_class;
+
+  /* Virtual Table */
+
+  GFileInfo * (* next_file)         (GFileEnumerator      *enumerator,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+  gboolean    (* close_fn)          (GFileEnumerator      *enumerator,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+
+  void        (* next_files_async)  (GFileEnumerator      *enumerator,
+                                     int                   num_files,
+                                     int                   io_priority,
+                                     GCancellable         *cancellable,
+                                     GAsyncReadyCallback   callback,
+                                     gpointer              user_data);
+  GList *     (* next_files_finish) (GFileEnumerator      *enumerator,
+                                     GAsyncResult         *res,
+                                     GError              **error);
+  void        (* close_async)       (GFileEnumerator      *enumerator,
+                                     int                   io_priority,
+                                     GCancellable         *cancellable,
+                                     GAsyncReadyCallback   callback,
+                                     gpointer              user_data);
+  gboolean    (* close_finish)      (GFileEnumerator      *enumerator,
+                                     GAsyncResult         *res,
+                                     GError              **error);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+  void (*_g_reserved6) (void);
+  void (*_g_reserved7) (void);
+};
+
+GType      g_file_enumerator_get_type          (void) G_GNUC_CONST;
+
+GFileInfo *g_file_enumerator_next_file         (GFileEnumerator      *enumerator,
+						GCancellable         *cancellable,
+						GError              **error);
+gboolean   g_file_enumerator_close             (GFileEnumerator      *enumerator,
+						GCancellable         *cancellable,
+						GError              **error);
+void       g_file_enumerator_next_files_async  (GFileEnumerator      *enumerator,
+						int                   num_files,
+						int                   io_priority,
+						GCancellable         *cancellable,
+						GAsyncReadyCallback   callback,
+						gpointer              user_data);
+GList *    g_file_enumerator_next_files_finish (GFileEnumerator      *enumerator,
+						GAsyncResult         *result,
+						GError              **error);
+void       g_file_enumerator_close_async       (GFileEnumerator      *enumerator,
+						int                   io_priority,
+						GCancellable         *cancellable,
+						GAsyncReadyCallback   callback,
+						gpointer              user_data);
+gboolean   g_file_enumerator_close_finish      (GFileEnumerator      *enumerator,
+						GAsyncResult         *result,
+						GError              **error);
+gboolean   g_file_enumerator_is_closed         (GFileEnumerator      *enumerator);
+gboolean   g_file_enumerator_has_pending       (GFileEnumerator      *enumerator);
+void       g_file_enumerator_set_pending       (GFileEnumerator      *enumerator,
+						gboolean              pending);
+GFile *    g_file_enumerator_get_container     (GFileEnumerator *enumerator);
+
+G_END_DECLS
+
+#endif /* __G_FILE_ENUMERATOR_H__ */
diff --git a/gio/gfileicon.c b/gio/gfileicon.c
new file mode 100644
index 0000000..730d3ba
--- /dev/null
+++ b/gio/gfileicon.c
@@ -0,0 +1,388 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include "gfileicon.h"
+#include "gfile.h"
+#include "gicon.h"
+#include "glibintl.h"
+#include "gloadableicon.h"
+#include "ginputstream.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfileicon
+ * @short_description: Icons pointing to an image file
+ * @include: gio/gio.h
+ * @see_also: #GIcon, #GLoadableIcon
+ * 
+ * #GFileIcon specifies an icon by pointing to an image file
+ * to be used as icon.
+ * 
+ **/
+
+static void g_file_icon_icon_iface_init          (GIconIface          *iface);
+static void g_file_icon_loadable_icon_iface_init (GLoadableIconIface  *iface);
+static void g_file_icon_load_async               (GLoadableIcon       *icon,
+						  int                  size,
+						  GCancellable        *cancellable,
+						  GAsyncReadyCallback  callback,
+						  gpointer             user_data);
+
+struct _GFileIcon
+{
+  GObject parent_instance;
+
+  GFile *file;
+};
+
+struct _GFileIconClass
+{
+  GObjectClass parent_class;
+};
+
+enum
+{
+  PROP_0,
+  PROP_FILE
+};
+
+G_DEFINE_TYPE_WITH_CODE (GFileIcon, g_file_icon, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (G_TYPE_ICON,
+                                                g_file_icon_icon_iface_init)
+                         G_IMPLEMENT_INTERFACE (G_TYPE_LOADABLE_ICON,
+                                                g_file_icon_loadable_icon_iface_init))
+
+static void
+g_file_icon_get_property (GObject    *object,
+                          guint       prop_id,
+                          GValue     *value,
+                          GParamSpec *pspec)
+{
+  GFileIcon *icon = G_FILE_ICON (object);
+
+  switch (prop_id)
+    {
+      case PROP_FILE:
+        g_value_set_object (value, icon->file);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+g_file_icon_set_property (GObject      *object,
+                          guint         prop_id,
+                          const GValue *value,
+                          GParamSpec   *pspec)
+{
+  GFileIcon *icon = G_FILE_ICON (object);
+
+  switch (prop_id)
+    {
+      case PROP_FILE:
+        icon->file = G_FILE (g_value_dup_object (value));
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+g_file_icon_finalize (GObject *object)
+{
+  GFileIcon *icon;
+
+  icon = G_FILE_ICON (object);
+
+  g_object_unref (icon->file);
+
+  G_OBJECT_CLASS (g_file_icon_parent_class)->finalize (object);
+}
+
+static void
+g_file_icon_class_init (GFileIconClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->get_property = g_file_icon_get_property;
+  gobject_class->set_property = g_file_icon_set_property;
+  gobject_class->finalize = g_file_icon_finalize;
+
+  /**
+   * GFileIcon:file:
+   *
+   * The file containing the icon.
+   */
+  g_object_class_install_property (gobject_class, PROP_FILE,
+                                   g_param_spec_object ("file",
+                                                        _("file"),
+                                                        _("The file containing the icon"),
+                                                        G_TYPE_FILE,
+                                                        G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+}
+
+static void
+g_file_icon_init (GFileIcon *file)
+{
+}
+
+/**
+ * g_file_icon_new:
+ * @file: a #GFile.
+ * 
+ * Creates a new icon for a file.
+ * 
+ * Returns: a #GIcon for the given @file, or %NULL on error.
+ **/
+GIcon *
+g_file_icon_new (GFile *file)
+{
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  return G_ICON (g_object_new (G_TYPE_FILE_ICON, "file", file, NULL));
+}
+
+/**
+ * g_file_icon_get_file:
+ * @icon: a #GIcon.
+ * 
+ * Gets the #GFile associated with the given @icon.
+ * 
+ * Returns: a #GFile, or %NULL.
+ **/
+GFile *
+g_file_icon_get_file (GFileIcon *icon)
+{
+  g_return_val_if_fail (G_IS_FILE_ICON (icon), NULL);
+
+  return icon->file;
+}
+
+static guint
+g_file_icon_hash (GIcon *icon)
+{
+  GFileIcon *file_icon = G_FILE_ICON (icon);
+
+  return g_file_hash (file_icon->file);
+}
+
+static gboolean
+g_file_icon_equal (GIcon *icon1,
+		   GIcon *icon2)
+{
+  GFileIcon *file1 = G_FILE_ICON (icon1);
+  GFileIcon *file2 = G_FILE_ICON (icon2);
+  
+  return g_file_equal (file1->file, file2->file);
+}
+
+static gboolean
+g_file_icon_to_tokens (GIcon *icon,
+		       GPtrArray *tokens,
+                       gint  *out_version)
+{
+  GFileIcon *file_icon = G_FILE_ICON (icon);
+
+  g_return_val_if_fail (out_version != NULL, FALSE);
+
+  *out_version = 0;
+
+  g_ptr_array_add (tokens, g_file_get_uri (file_icon->file));
+  return TRUE;
+}
+
+static GIcon *
+g_file_icon_from_tokens (gchar  **tokens,
+                         gint     num_tokens,
+                         gint     version,
+                         GError **error)
+{
+  GIcon *icon;
+  GFile *file;
+
+  icon = NULL;
+
+  if (version != 0)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Can't handle version %d of GFileIcon encoding"),
+                   version);
+      goto out;
+    }
+
+  if (num_tokens != 1)
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Malformed input data for GFileIcon"));
+      goto out;
+    }
+
+  file = g_file_new_for_uri (tokens[0]);
+  icon = g_file_icon_new (file);
+  g_object_unref (file);
+
+ out:
+  return icon;
+}
+
+static void
+g_file_icon_icon_iface_init (GIconIface *iface)
+{
+  iface->hash = g_file_icon_hash;
+  iface->equal = g_file_icon_equal;
+  iface->to_tokens = g_file_icon_to_tokens;
+  iface->from_tokens = g_file_icon_from_tokens;
+}
+
+
+static GInputStream *
+g_file_icon_load (GLoadableIcon  *icon,
+		  int            size,
+		  char          **type,
+		  GCancellable   *cancellable,
+		  GError        **error)
+{
+  GFileInputStream *stream;
+  GFileIcon *file_icon = G_FILE_ICON (icon);
+
+  stream = g_file_read (file_icon->file,
+			cancellable,
+			error);
+  
+  return G_INPUT_STREAM (stream);
+}
+
+typedef struct {
+  GLoadableIcon *icon;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+} LoadData;
+
+static void
+load_data_free (LoadData *data)
+{
+  g_object_unref (data->icon);
+  g_free (data);
+}
+
+static void
+load_async_callback (GObject      *source_object,
+		     GAsyncResult *res,
+		     gpointer      user_data)
+{
+  GFileInputStream *stream;
+  GError *error = NULL;
+  GSimpleAsyncResult *simple;
+  LoadData *data = user_data;
+
+  stream = g_file_read_finish (G_FILE (source_object), res, &error);
+  
+  if (stream == NULL)
+    {
+      simple = g_simple_async_result_new_from_error (G_OBJECT (data->icon),
+						     data->callback,
+						     data->user_data,
+						     error);
+      g_error_free (error);
+    }
+  else
+    {
+      simple = g_simple_async_result_new (G_OBJECT (data->icon),
+					  data->callback,
+					  data->user_data,
+					  g_file_icon_load_async);
+      
+      g_simple_async_result_set_op_res_gpointer (simple,
+						 stream,
+						 g_object_unref);
+  }
+
+
+  g_simple_async_result_complete (simple);
+  
+  load_data_free (data);
+}
+
+static void
+g_file_icon_load_async (GLoadableIcon       *icon,
+                        int                  size,
+                        GCancellable        *cancellable,
+                        GAsyncReadyCallback  callback,
+                        gpointer             user_data)
+{
+  GFileIcon *file_icon = G_FILE_ICON (icon);
+  LoadData *data;
+
+  data = g_new0 (LoadData, 1);
+  data->icon = g_object_ref (icon);
+  data->callback = callback;
+  data->user_data = user_data;
+  
+  g_file_read_async (file_icon->file, 0,
+		     cancellable,
+		     load_async_callback, data);
+  
+}
+
+static GInputStream *
+g_file_icon_load_finish (GLoadableIcon  *icon,
+			 GAsyncResult   *res,
+			 char          **type,
+			 GError        **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  gpointer op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_icon_load_async);
+
+  if (type)
+    *type = NULL;
+  
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  if (op)
+    return g_object_ref (op);
+  
+  return NULL;
+}
+
+static void
+g_file_icon_loadable_icon_iface_init (GLoadableIconIface *iface)
+{
+  iface->load = g_file_icon_load;
+  iface->load_async = g_file_icon_load_async;
+  iface->load_finish = g_file_icon_load_finish;
+}
+
+#define __G_FILE_ICON_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfileicon.h b/gio/gfileicon.h
new file mode 100644
index 0000000..08ae791
--- /dev/null
+++ b/gio/gfileicon.h
@@ -0,0 +1,56 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_ICON_H__
+#define __G_FILE_ICON_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE_ICON         (g_file_icon_get_type ())
+#define G_FILE_ICON(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_ICON, GFileIcon))
+#define G_FILE_ICON_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_ICON, GFileIconClass))
+#define G_IS_FILE_ICON(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_ICON))
+#define G_IS_FILE_ICON_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_ICON))
+#define G_FILE_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_ICON, GFileIconClass))
+
+/**
+ * GFileIcon:
+ *
+ * Gets an icon for a #GFile. Implements #GLoadableIcon.
+ **/
+typedef struct _GFileIconClass   GFileIconClass;
+
+GType   g_file_icon_get_type (void) G_GNUC_CONST;
+
+GIcon * g_file_icon_new      (GFile     *file);
+
+GFile * g_file_icon_get_file (GFileIcon *icon);
+
+G_END_DECLS
+
+#endif /* __G_FILE_ICON_H__ */
diff --git a/gio/gfileinfo.c b/gio/gfileinfo.c
new file mode 100644
index 0000000..5131bdb
--- /dev/null
+++ b/gio/gfileinfo.c
@@ -0,0 +1,2183 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+/**
+ * SECTION:gfileinfo
+ * @short_description: File Information and Attributes
+ * @include: gio/gio.h
+ * @see_also: #GFile, <link linkend="gio-GFileAttribute">GFileAttribute</link>
+ * 
+ * Functionality for manipulating basic metadata for files. #GFileInfo
+ * implements methods for getting information that all files should 
+ * contain, and allows for manipulation of extended attributes. 
+ *
+ * See <link linkend="gio-GFileAttribute">GFileAttribute</link> for more
+ * information on how GIO handles file attributes.
+ *
+ * To obtain a #GFileInfo for a #GFile, use g_file_query_info() (or its 
+ * async variant). To obtain a #GFileInfo for a file input or output 
+ * stream, use g_file_input_stream_query_info() or 
+ * g_file_output_stream_query_info() (or their async variants).
+ *
+ * To change the actual attributes of a file, you should then set the 
+ * attribute in the #GFileInfo and call g_file_set_attributes_from_info() 
+ * or g_file_set_attributes_async() on a GFile.
+ *
+ * However, not all attributes can be changed in the file. For instance, 
+ * the actual size of a file cannot be changed via g_file_info_set_size(). 
+ * You may call g_file_query_settable_attributes() and 
+ * g_file_query_writable_namespaces() to discover the settable attributes 
+ * of a particular file at runtime.
+ *
+ * #GFileAttributeMatcher allows for searching through a #GFileInfo for 
+ * attributes.
+ **/
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gfileinfo.h"
+#include "gfileattribute-priv.h"
+#include "gicon.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/* We use this nasty thing, because NULL is a valid attribute matcher (matches nothing) */
+#define NO_ATTRIBUTE_MASK ((GFileAttributeMatcher *)1)
+
+typedef struct  {
+  guint32 attribute;
+  GFileAttributeValue value;
+} GFileAttribute;
+
+struct _GFileInfo
+{
+  GObject parent_instance;
+
+  GArray *attributes;
+  GFileAttributeMatcher *mask;
+};
+
+struct _GFileInfoClass
+{
+  GObjectClass parent_class;
+};
+
+
+static gboolean g_file_attribute_matcher_matches_id (GFileAttributeMatcher *matcher,
+						     guint32 id);
+
+G_DEFINE_TYPE (GFileInfo, g_file_info, G_TYPE_OBJECT);
+
+typedef struct {
+  guint32 id;
+  guint32 attribute_id_counter;
+} NSInfo;
+
+G_LOCK_DEFINE_STATIC (attribute_hash);
+static int namespace_id_counter = 0;
+static GHashTable *ns_hash = NULL;
+static GHashTable *attribute_hash = NULL;
+static char ***attributes = NULL;
+
+/* Attribute ids are 32bit, we split it up like this:
+ * |------------|--------------------|
+ *   12 bit          20 bit       
+ *   namespace      attribute id    
+ *
+ * This way the attributes gets sorted in namespace order
+ */
+
+#define NS_POS 20
+#define NS_MASK ((guint32)((1<<12) - 1))
+#define ID_POS 0
+#define ID_MASK ((guint32)((1<<20) - 1))
+
+#define GET_NS(_attr_id) \
+    (((guint32) (_attr_id) >> NS_POS) & NS_MASK)
+#define GET_ID(_attr_id) \
+    (((guint32)(_attr_id) >> ID_POS) & ID_MASK)
+
+#define MAKE_ATTR_ID(_ns, _id)				\
+    ( ((((guint32) _ns) & NS_MASK) << NS_POS) |		\
+      ((((guint32) _id) & ID_MASK) << ID_POS) )
+
+static NSInfo *
+_lookup_namespace (const char *namespace)
+{
+  NSInfo *ns_info;
+  
+  ns_info = g_hash_table_lookup (ns_hash, namespace);
+  if (ns_info == NULL)
+    {
+      ns_info = g_new0 (NSInfo, 1);
+      ns_info->id = ++namespace_id_counter;
+      g_hash_table_insert (ns_hash, g_strdup (namespace), ns_info);
+      attributes = g_realloc (attributes, (ns_info->id + 1) * sizeof (char **));
+      attributes[ns_info->id] = NULL;
+    }
+  return ns_info;
+}
+
+static guint32
+lookup_namespace (const char *namespace)
+{
+  NSInfo *ns_info;
+  guint32 id;
+  
+  G_LOCK (attribute_hash);
+  
+  if (attribute_hash == NULL)
+    {
+      ns_hash = g_hash_table_new (g_str_hash, g_str_equal);
+      attribute_hash = g_hash_table_new (g_str_hash, g_str_equal);
+    }
+
+  ns_info = _lookup_namespace (namespace);
+  id = 0;
+  if (ns_info)
+    id = ns_info->id;
+  
+  G_UNLOCK (attribute_hash);
+
+  return id;
+}
+
+static char *
+get_attribute_for_id (int attribute)
+{
+  char *s;
+  G_LOCK (attribute_hash);
+  s = attributes[GET_NS(attribute)][GET_ID(attribute)];
+  G_UNLOCK (attribute_hash);
+  return s;
+}
+
+static guint32
+lookup_attribute (const char *attribute)
+{
+  guint32 attr_id, id;
+  char *ns;
+  const char *colon;
+  NSInfo *ns_info;
+  
+  G_LOCK (attribute_hash);
+  if (attribute_hash == NULL)
+    {
+      ns_hash = g_hash_table_new (g_str_hash, g_str_equal);
+      attribute_hash = g_hash_table_new (g_str_hash, g_str_equal);
+    }
+
+  attr_id = GPOINTER_TO_UINT (g_hash_table_lookup (attribute_hash, attribute));
+
+  if (attr_id != 0)
+    {
+      G_UNLOCK (attribute_hash);
+      return attr_id;
+    }
+
+  colon = strstr (attribute, "::");
+  if (colon)
+    ns = g_strndup (attribute, colon - attribute);
+  else
+    ns = g_strdup ("");
+
+  ns_info = _lookup_namespace (ns);
+  g_free (ns);
+
+  id = ++ns_info->attribute_id_counter;
+  attributes[ns_info->id] = g_realloc (attributes[ns_info->id], (id + 1) * sizeof (char *));
+  attributes[ns_info->id][id] = g_strdup (attribute);
+  
+  attr_id = MAKE_ATTR_ID (ns_info->id, id);
+
+  g_hash_table_insert (attribute_hash, attributes[ns_info->id][id], GUINT_TO_POINTER (attr_id));
+  
+  G_UNLOCK (attribute_hash);
+  
+  return attr_id;
+}
+
+static void
+g_file_info_finalize (GObject *object)
+{
+  GFileInfo *info;
+  int i;
+  GFileAttribute *attrs;
+
+  info = G_FILE_INFO (object);
+
+  attrs = (GFileAttribute *)info->attributes->data;
+  for (i = 0; i < info->attributes->len; i++)
+    _g_file_attribute_value_clear (&attrs[i].value);
+  g_array_free (info->attributes, TRUE);  
+
+  if (info->mask != NO_ATTRIBUTE_MASK)
+    g_file_attribute_matcher_unref (info->mask);
+
+  G_OBJECT_CLASS (g_file_info_parent_class)->finalize (object);
+}
+
+static void
+g_file_info_class_init (GFileInfoClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_file_info_finalize;
+}
+
+static void
+g_file_info_init (GFileInfo *info)
+{
+  info->mask = NO_ATTRIBUTE_MASK;
+  info->attributes = g_array_new (FALSE, FALSE,
+				  sizeof (GFileAttribute));
+}
+
+/**
+ * g_file_info_new:
+ * 
+ * Creates a new file info structure.
+ * 
+ * Returns: a #GFileInfo.
+ **/
+GFileInfo *
+g_file_info_new (void)
+{
+  return g_object_new (G_TYPE_FILE_INFO, NULL);
+}
+
+/**
+ * g_file_info_copy_into:
+ * @src_info: source to copy attributes from.
+ * @dest_info: destination to copy attributes to.
+ * 
+ * Copies all of the #GFileAttribute<!-- -->s from @src_info to @dest_info.
+ **/
+void
+g_file_info_copy_into (GFileInfo *src_info, 
+                       GFileInfo *dest_info)
+{
+  GFileAttribute *source, *dest;
+  int i;
+
+  g_return_if_fail (G_IS_FILE_INFO (src_info));
+  g_return_if_fail (G_IS_FILE_INFO (dest_info));
+
+  dest = (GFileAttribute *)dest_info->attributes->data;
+  for (i = 0; i < dest_info->attributes->len; i++)
+    _g_file_attribute_value_clear (&dest[i].value);
+  
+  g_array_set_size (dest_info->attributes,
+		    src_info->attributes->len);
+
+  source = (GFileAttribute *)src_info->attributes->data;
+  dest = (GFileAttribute *)dest_info->attributes->data;
+  
+  for (i = 0; i < src_info->attributes->len; i++)
+    {
+      dest[i].attribute = source[i].attribute;
+      dest[i].value.type = G_FILE_ATTRIBUTE_TYPE_INVALID;
+      _g_file_attribute_value_set (&dest[i].value, &source[i].value);
+    }
+
+  if (dest_info->mask != NO_ATTRIBUTE_MASK)
+    g_file_attribute_matcher_unref (dest_info->mask);
+
+  if (src_info->mask == NO_ATTRIBUTE_MASK)
+    dest_info->mask = NO_ATTRIBUTE_MASK;
+  else
+    dest_info->mask = g_file_attribute_matcher_ref (src_info->mask);
+}
+
+/**
+ * g_file_info_dup:
+ * @other: a #GFileInfo.
+ * 
+ * Duplicates a file info structure.
+ * 
+ * Returns: a duplicate #GFileInfo of @other.
+ **/
+GFileInfo *
+g_file_info_dup (GFileInfo *other)
+{
+  GFileInfo *new;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (other), NULL);
+  
+  new = g_file_info_new ();
+  g_file_info_copy_into (other, new);
+  return new;
+}
+
+/**
+ * g_file_info_set_attribute_mask:
+ * @info: a #GFileInfo.
+ * @mask: a #GFileAttributeMatcher.
+ *
+ * Sets @mask on @info to match specific attribute types.
+ **/
+void
+g_file_info_set_attribute_mask (GFileInfo             *info,
+				GFileAttributeMatcher *mask)
+{
+  GFileAttribute *attr;
+  int i;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  
+  if (mask != info->mask)
+    {
+      if (info->mask != NO_ATTRIBUTE_MASK)
+	g_file_attribute_matcher_unref (info->mask);
+      info->mask = g_file_attribute_matcher_ref (mask);
+
+      /* Remove non-matching attributes */
+      for (i = 0; i < info->attributes->len; i++)
+	{
+	  attr = &g_array_index (info->attributes, GFileAttribute, i);
+	  if (!g_file_attribute_matcher_matches_id (mask,
+						    attr->attribute))
+	    {
+	      _g_file_attribute_value_clear (&attr->value);
+	      g_array_remove_index (info->attributes, i);
+	      i--;
+	    }
+	}
+    }
+}
+
+/**
+ * g_file_info_unset_attribute_mask:
+ * @info: #GFileInfo.
+ * 
+ * Unsets a mask set by g_file_info_set_attribute_mask(), if one
+ * is set.
+ **/
+void
+g_file_info_unset_attribute_mask (GFileInfo *info)
+{
+  g_return_if_fail (G_IS_FILE_INFO (info));
+
+  if (info->mask != NO_ATTRIBUTE_MASK)
+    g_file_attribute_matcher_unref (info->mask);
+  info->mask = NO_ATTRIBUTE_MASK;
+}
+
+/**
+ * g_file_info_clear_status:
+ * @info: a #GFileInfo.
+ *
+ * Clears the status information from @info.
+ **/
+void
+g_file_info_clear_status (GFileInfo  *info)
+{
+  GFileAttribute *attrs;
+  int i;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+
+  attrs = (GFileAttribute *)info->attributes->data;
+  for (i = 0; i < info->attributes->len; i++)
+    attrs[i].value.status = G_FILE_ATTRIBUTE_STATUS_UNSET;
+}
+
+static int
+g_file_info_find_place (GFileInfo  *info,
+			guint32     attribute)
+{
+  int min, max, med;
+  GFileAttribute *attrs;
+  /* Binary search for the place where attribute would be, if it's
+     in the array */
+
+  min = 0;
+  max = info->attributes->len;
+
+  attrs = (GFileAttribute *)info->attributes->data;
+
+  while (min < max)
+    {
+      med = min + (max - min) / 2;
+      if (attrs[med].attribute == attribute)
+	{
+	  min = med;
+	  break;
+	}
+      else if (attrs[med].attribute < attribute)
+	min = med + 1;
+      else /* attrs[med].attribute > attribute */
+	max = med;
+    }
+
+  return min;
+}
+
+static GFileAttributeValue *
+g_file_info_find_value (GFileInfo *info,
+			guint32    attr_id)
+{
+  GFileAttribute *attrs;
+  int i;
+
+  i = g_file_info_find_place (info, attr_id);
+  attrs = (GFileAttribute *)info->attributes->data;
+  if (i < info->attributes->len &&
+      attrs[i].attribute == attr_id)
+    return &attrs[i].value;
+  
+  return NULL;
+}
+
+static GFileAttributeValue *
+g_file_info_find_value_by_name (GFileInfo  *info,
+				const char *attribute)
+{
+  guint32 attr_id;
+
+  attr_id = lookup_attribute (attribute);
+  return g_file_info_find_value (info, attr_id);
+}
+
+/**
+ * g_file_info_has_attribute:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Checks if a file info structure has an attribute named @attribute.
+ * 
+ * Returns: %TRUE if @Ginfo has an attribute named @attribute, 
+ *     %FALSE otherwise.
+ **/
+gboolean
+g_file_info_has_attribute (GFileInfo  *info,
+			   const char *attribute)
+{
+  GFileAttributeValue *value;
+
+  g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return value != NULL;
+}
+
+/**
+ * g_file_info_list_attributes:
+ * @info: a #GFileInfo.
+ * @name_space: a file attribute key's namespace.
+ * 
+ * Lists the file info structure's attributes.
+ * 
+ * Returns: a null-terminated array of strings of all of the 
+ * possible attribute types for the given @name_space, or 
+ * %NULL on error.
+ **/
+char **
+g_file_info_list_attributes (GFileInfo  *info,
+			     const char *name_space)
+{
+  GPtrArray *names;
+  GFileAttribute *attrs;
+  guint32 attribute;
+  guint32 ns_id = (name_space) ? lookup_namespace (name_space) : 0;
+  int i;
+ 
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+
+  names = g_ptr_array_new ();
+  attrs = (GFileAttribute *)info->attributes->data;
+  for (i = 0; i < info->attributes->len; i++)
+    {
+      attribute = attrs[i].attribute;
+      if (ns_id == 0 || GET_NS (attribute) == ns_id)
+        g_ptr_array_add (names, g_strdup (get_attribute_for_id (attribute)));
+    }
+
+  /* NULL terminate */
+  g_ptr_array_add (names, NULL);
+  
+  return (char **)g_ptr_array_free (names, FALSE);
+}
+
+/**
+ * g_file_info_get_attribute_type:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets the attribute type for an attribute key.
+ * 
+ * Returns: a #GFileAttributeType for the given @attribute, or 
+ * %G_FILE_ATTRIBUTE_TYPE_INVALID if the key is invalid.
+ **/
+GFileAttributeType
+g_file_info_get_attribute_type (GFileInfo  *info,
+				const char *attribute)
+{
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), G_FILE_ATTRIBUTE_TYPE_INVALID);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', G_FILE_ATTRIBUTE_TYPE_INVALID);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  if (value)
+    return value->type;
+  else
+    return G_FILE_ATTRIBUTE_TYPE_INVALID;
+}
+
+/**
+ * g_file_info_remove_attribute:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Removes all cases of @attribute from @info if it exists.
+ **/
+void
+g_file_info_remove_attribute (GFileInfo  *info,
+			      const char *attribute)
+{
+  guint32 attr_id;
+  GFileAttribute *attrs;
+  int i;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  attr_id = lookup_attribute (attribute);
+  
+  i = g_file_info_find_place (info, attr_id);
+  attrs = (GFileAttribute *)info->attributes->data;
+  if (i < info->attributes->len &&
+      attrs[i].attribute == attr_id)
+    {
+      _g_file_attribute_value_clear (&attrs[i].value);
+      g_array_remove_index (info->attributes, i);
+    }
+}
+
+/**
+ * g_file_info_get_attribute_data:
+ * @info: a #GFileInfo
+ * @attribute: a file attribute key
+ * @type: return location for the attribute type, or %NULL
+ * @value_pp: return location for the attribute value, or %NULL
+ * @status: return location for the attribute status, or %NULL
+ *
+ * Gets the attribute type, value and status for an attribute key.
+ *
+ * Returns: %TRUE if @info has an attribute named @attribute, 
+ *      %FALSE otherwise.
+ */
+gboolean
+g_file_info_get_attribute_data (GFileInfo            *info,
+				const char           *attribute,
+				GFileAttributeType   *type,
+				gpointer             *value_pp,
+				GFileAttributeStatus *status)
+{
+  GFileAttributeValue *value;
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  if (value == NULL)
+    return FALSE;
+
+  if (status)
+    *status = value->status;
+
+  if (type)
+    *type = value->type;
+
+  if (value_pp)
+    *value_pp = _g_file_attribute_value_peek_as_pointer (value);
+  
+  return TRUE;
+}
+
+/** 
+ * g_file_info_get_attribute_status:
+ * @info: a #GFileInfo
+ * @attribute: a file attribute key
+ *
+ * Gets the attribute status for an attribute key.
+ *
+ * Returns: a #GFileAttributeStatus for the given @attribute, or 
+ *    %G_FILE_ATTRIBUTE_STATUS_UNSET if the key is invalid.
+ *
+ */
+GFileAttributeStatus
+g_file_info_get_attribute_status (GFileInfo  *info,
+				  const char *attribute)
+{
+  GFileAttributeValue *val;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', 0);
+
+  val = g_file_info_find_value_by_name (info, attribute);
+  if (val)
+    return val->status;
+
+  return G_FILE_ATTRIBUTE_STATUS_UNSET;
+}
+
+
+GFileAttributeValue *
+_g_file_info_get_attribute_value (GFileInfo  *info,
+				  const char *attribute)
+  
+{
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', NULL);
+
+  return g_file_info_find_value_by_name (info, attribute);
+}
+
+/**
+ * g_file_info_get_attribute_as_string:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets the value of a attribute, formated as a string.
+ * This escapes things as needed to make the string valid
+ * utf8.
+ * 
+ * Returns: a UTF-8 string associated with the given @attribute.
+ *    When you're done with the string it must be freed with g_free().
+ **/
+char *
+g_file_info_get_attribute_as_string (GFileInfo  *info,
+				     const char *attribute)
+{
+  GFileAttributeValue *val;
+  val = _g_file_info_get_attribute_value (info, attribute);
+  if (val) 
+    return _g_file_attribute_value_as_string (val);
+  return NULL;
+}
+
+
+/**
+ * g_file_info_get_attribute_object:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets the value of a #GObject attribute. If the attribute does 
+ * not contain a #GObject, %NULL will be returned.
+ * 
+ * Returns: a #GObject associated with the given @attribute, or
+ * %NULL otherwise.
+ **/
+GObject *
+g_file_info_get_attribute_object (GFileInfo  *info,
+				  const char *attribute)
+{
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', NULL);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_object (value);
+}
+
+/**
+ * g_file_info_get_attribute_string:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets the value of a string attribute. If the attribute does 
+ * not contain a string, %NULL will be returned.
+ * 
+ * Returns: the contents of the @attribute value as a string, or 
+ * %NULL otherwise.
+ **/
+const char *
+g_file_info_get_attribute_string (GFileInfo  *info,
+				  const char *attribute)
+{
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', NULL);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_string (value);
+}
+
+/**
+ * g_file_info_get_attribute_byte_string:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets the value of a byte string attribute. If the attribute does 
+ * not contain a byte string, %NULL will be returned.
+ * 
+ * Returns: the contents of the @attribute value as a byte string, or 
+ * %NULL otherwise.
+ **/
+const char *
+g_file_info_get_attribute_byte_string (GFileInfo  *info,
+				       const char *attribute)
+{
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', NULL);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_byte_string (value);
+}
+
+/**
+ * g_file_info_get_attribute_boolean:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets the value of a boolean attribute. If the attribute does not
+ * contain a boolean value, %FALSE will be returned.
+ * 
+ * Returns: the boolean value contained within the attribute. 
+ **/
+gboolean
+g_file_info_get_attribute_boolean (GFileInfo  *info,
+				   const char *attribute)
+{
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_boolean (value);
+}
+
+/**
+ * g_file_info_get_attribute_uint32:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets an unsigned 32-bit integer contained within the attribute. If the 
+ * attribute does not contain an unsigned 32-bit integer, or is invalid, 
+ * 0 will be returned.
+ * 
+ * Returns: an unsigned 32-bit integer from the attribute. 
+ **/
+guint32
+g_file_info_get_attribute_uint32 (GFileInfo  *info,
+				  const char *attribute)
+{
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', 0);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_uint32 (value);
+}
+
+/**
+ * g_file_info_get_attribute_int32:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets a signed 32-bit integer contained within the attribute. If the 
+ * attribute does not contain a signed 32-bit integer, or is invalid, 
+ * 0 will be returned.
+ * 
+ * Returns: a signed 32-bit integer from the attribute.
+ **/
+gint32
+g_file_info_get_attribute_int32 (GFileInfo  *info,
+				 const char *attribute)
+{
+  GFileAttributeValue *value;
+
+  g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', 0);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_int32 (value);
+}
+
+/**
+ * g_file_info_get_attribute_uint64:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets a unsigned 64-bit integer contained within the attribute. If the 
+ * attribute does not contain an unsigned 64-bit integer, or is invalid, 
+ * 0 will be returned.
+ * 
+ * Returns: a unsigned 64-bit integer from the attribute. 
+ **/
+guint64
+g_file_info_get_attribute_uint64 (GFileInfo  *info,
+				  const char *attribute)
+{
+  GFileAttributeValue *value;
+
+  g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', 0);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_uint64 (value);
+}
+
+/**
+ * g_file_info_get_attribute_int64:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * 
+ * Gets a signed 64-bit integer contained within the attribute. If the 
+ * attribute does not contain an signed 64-bit integer, or is invalid, 
+ * 0 will be returned.
+ * 
+ * Returns: a signed 64-bit integer from the attribute. 
+ **/
+gint64
+g_file_info_get_attribute_int64  (GFileInfo  *info,
+				  const char *attribute)
+{
+  GFileAttributeValue *value;
+
+  g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', 0);
+
+  value = g_file_info_find_value_by_name (info, attribute);
+  return _g_file_attribute_value_get_int64 (value);
+}
+
+static GFileAttributeValue *
+g_file_info_create_value (GFileInfo *info,
+			  guint32 attr_id)
+{
+  GFileAttribute *attrs;
+  int i;
+
+  if (info->mask != NO_ATTRIBUTE_MASK &&
+      !g_file_attribute_matcher_matches_id (info->mask, attr_id))
+    return NULL;
+  
+  i = g_file_info_find_place (info, attr_id);
+  
+  attrs = (GFileAttribute *)info->attributes->data;
+  if (i < info->attributes->len &&
+      attrs[i].attribute == attr_id)
+    return &attrs[i].value;
+  else
+    {
+      GFileAttribute attr = { 0 };
+      attr.attribute = attr_id;
+      g_array_insert_val (info->attributes, i, attr);
+
+      attrs = (GFileAttribute *)info->attributes->data;
+      return &attrs[i].value;
+    }
+}
+
+static GFileAttributeValue *
+g_file_info_create_value_by_name (GFileInfo *info,
+				  const char *attribute)
+{
+  guint32 attr_id;
+
+  attr_id = lookup_attribute (attribute);
+
+  return g_file_info_create_value (info, attr_id);
+}
+
+/**
+ * g_file_info_set_attribute:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @type: a #GFileAttributeType
+ * @value_p: pointer to the value
+ * 
+ * Sets the @attribute to contain the given value, if possible.
+ **/
+void
+g_file_info_set_attribute (GFileInfo                 *info,
+			   const char                *attribute,
+			   GFileAttributeType         type,
+			   gpointer                   value_p)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  value = g_file_info_create_value_by_name (info, attribute);
+
+  if (value)
+    _g_file_attribute_value_set_from_pointer (value, type, value_p, TRUE);
+}
+
+/**
+ * g_file_info_set_attribute_object:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: a #GObject.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_object (GFileInfo  *info,
+				  const char *attribute,
+				  GObject    *attr_value)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+  g_return_if_fail (G_IS_OBJECT (attr_value));
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_object (value, attr_value);
+}
+
+/**
+ * g_file_info_set_attribute_string:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: a string.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_string (GFileInfo  *info,
+				  const char *attribute,
+				  const char *attr_value)
+{
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+  g_return_if_fail (attr_value != NULL);
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_string (value, attr_value);
+}
+
+/**
+ * g_file_info_set_attribute_byte_string:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: a byte string.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_byte_string (GFileInfo  *info,
+				       const char *attribute,
+				       const char *attr_value)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+  g_return_if_fail (attr_value != NULL);
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_byte_string (value, attr_value);
+}
+
+/**
+ * g_file_info_set_attribute_boolean:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: a boolean value.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_boolean (GFileInfo  *info,
+				   const char *attribute,
+				   gboolean    attr_value)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_boolean (value, attr_value);
+}
+
+/**
+ * g_file_info_set_attribute_uint32:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: an unsigned 32-bit integer.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_uint32 (GFileInfo  *info,
+				  const char *attribute,
+				  guint32     attr_value)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_uint32 (value, attr_value);
+}
+
+
+/**
+ * g_file_info_set_attribute_int32:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: a signed 32-bit integer
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_int32 (GFileInfo  *info,
+                                 const char *attribute,
+                                 gint32      attr_value)
+{
+  GFileAttributeValue *value;
+ 
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_int32 (value, attr_value);
+}
+
+/**
+ * g_file_info_set_attribute_uint64:
+ * @info: a #GFileInfo.
+ * @attribute: a file attribute key.
+ * @attr_value: an unsigned 64-bit integer.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ **/
+void
+g_file_info_set_attribute_uint64 (GFileInfo  *info,
+				  const char *attribute,
+				  guint64     attr_value)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_uint64 (value, attr_value);
+}
+
+/**
+ * g_file_info_set_attribute_int64:
+ * @info: a #GFileInfo.
+ * @attribute: attribute name to set.
+ * @attr_value: int64 value to set attribute to.
+ * 
+ * Sets the @attribute to contain the given @attr_value, 
+ * if possible.
+ * 
+ **/
+void
+g_file_info_set_attribute_int64  (GFileInfo  *info,
+				  const char *attribute,
+				  gint64      attr_value)
+{
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (attribute != NULL && *attribute != '\0');
+
+  value = g_file_info_create_value_by_name (info, attribute);
+  if (value)
+    _g_file_attribute_value_set_int64 (value, attr_value);
+}
+
+/* Helper getters */
+/**
+ * g_file_info_get_file_type:
+ * @info: a #GFileInfo.
+ * 
+ * Gets a file's type (whether it is a regular file, symlink, etc). 
+ * This is different from the file's content type, see g_file_info_get_content_type().
+ * 
+ * Returns: a #GFileType for the given file.
+ **/
+GFileType
+g_file_info_get_file_type (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+
+  g_return_val_if_fail (G_IS_FILE_INFO (info), G_FILE_TYPE_UNKNOWN);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_TYPE);
+  
+  value = g_file_info_find_value (info, attr);
+  return (GFileType)_g_file_attribute_value_get_uint32 (value);
+}
+
+/**
+ * g_file_info_get_is_hidden:
+ * @info: a #GFileInfo.
+ * 
+ * Checks if a file is hidden.
+ * 
+ * Returns: %TRUE if the file is a hidden file, %FALSE otherwise.
+ **/
+gboolean
+g_file_info_get_is_hidden (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN);
+  
+  value = g_file_info_find_value (info, attr);
+  return (GFileType)_g_file_attribute_value_get_boolean (value);
+}
+
+/**
+ * g_file_info_get_is_backup:
+ * @info: a #GFileInfo.
+ * 
+ * Checks if a file is a backup file.
+ * 
+ * Returns: %TRUE if file is a backup file, %FALSE otherwise.
+ **/
+gboolean
+g_file_info_get_is_backup (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP);
+  
+  value = g_file_info_find_value (info, attr);
+  return (GFileType)_g_file_attribute_value_get_boolean (value);
+}
+
+/**
+ * g_file_info_get_is_symlink:
+ * @info: a #GFileInfo.
+ * 
+ * Checks if a file is a symlink.
+ * 
+ * Returns: %TRUE if the given @info is a symlink.
+ **/
+gboolean
+g_file_info_get_is_symlink (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), FALSE);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK);
+  
+  value = g_file_info_find_value (info, attr);
+  return (GFileType)_g_file_attribute_value_get_boolean (value);
+}
+
+/**
+ * g_file_info_get_name:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the name for a file.
+ * 
+ * Returns: a string containing the file name.
+ **/
+const char *
+g_file_info_get_name (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_NAME);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_byte_string (value);
+}
+
+/**
+ * g_file_info_get_display_name:
+ * @info: a #GFileInfo.
+ * 
+ * Gets a display name for a file.
+ * 
+ * Returns: a string containing the display name.
+ **/
+const char *
+g_file_info_get_display_name (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_string (value);
+}
+
+/**
+ * g_file_info_get_edit_name:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the edit name for a file.
+ * 
+ * Returns: a string containing the edit name.
+ **/
+const char *
+g_file_info_get_edit_name (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_string (value);
+}
+
+/**
+ * g_file_info_get_icon:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the icon for a file.
+ * 
+ * Returns: #GIcon for the given @info.
+ **/
+GIcon *
+g_file_info_get_icon (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  GObject *obj;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_ICON);
+  
+  value = g_file_info_find_value (info, attr);
+  obj = _g_file_attribute_value_get_object (value);
+  if (G_IS_ICON (obj))
+    return G_ICON (obj);
+  return NULL;
+}
+
+/**
+ * g_file_info_get_content_type:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the file's content type.
+ * 
+ * Returns: a string containing the file's content type.
+ **/
+const char *
+g_file_info_get_content_type (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_string (value);
+}
+
+/**
+ * g_file_info_get_size:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the file's size.
+ * 
+ * Returns: a #goffset containing the file's size. 
+ **/
+goffset
+g_file_info_get_size (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+ 
+  g_return_val_if_fail (G_IS_FILE_INFO (info), (goffset) 0);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SIZE);
+  
+  value = g_file_info_find_value (info, attr);
+  return (goffset) _g_file_attribute_value_get_uint64 (value);
+}
+
+/**
+ * g_file_info_get_modification_time:
+ * @info: a #GFileInfo.
+ * @result: a #GTimeVal.
+ * 
+ * Gets the modification time of the current @info and sets it
+ * in @result.
+ **/
+void
+g_file_info_get_modification_time (GFileInfo *info,
+				   GTimeVal  *result)
+{
+  static guint32 attr_mtime = 0, attr_mtime_usec;
+  GFileAttributeValue *value;
+
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (result != NULL);
+  
+  if (attr_mtime == 0)
+    {
+      attr_mtime = lookup_attribute (G_FILE_ATTRIBUTE_TIME_MODIFIED);
+      attr_mtime_usec = lookup_attribute (G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC);
+    }
+  
+  value = g_file_info_find_value (info, attr_mtime);
+  result->tv_sec = _g_file_attribute_value_get_uint64 (value);
+  value = g_file_info_find_value (info, attr_mtime_usec);
+  result->tv_usec = _g_file_attribute_value_get_uint32 (value);
+}
+
+/**
+ * g_file_info_get_symlink_target:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the symlink target for a given #GFileInfo.
+ * 
+ * Returns: a string containing the symlink target.
+ **/
+const char *
+g_file_info_get_symlink_target (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_byte_string (value);
+}
+
+/**
+ * g_file_info_get_etag:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the <link linkend="gfile-etag">entity tag</link> for a given 
+ * #GFileInfo. See %G_FILE_ATTRIBUTE_ETAG_VALUE.
+ * 
+ * Returns: a string containing the value of the "etag:value" attribute.
+ **/
+const char *
+g_file_info_get_etag (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_ETAG_VALUE);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_string (value);
+}
+
+/**
+ * g_file_info_get_sort_order:
+ * @info: a #GFileInfo.
+ * 
+ * Gets the value of the sort_order attribute from the #GFileInfo.
+ * See %G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER.
+ * 
+ * Returns: a #gint32 containing the value of the "standard::sort_order" attribute.
+ **/
+gint32
+g_file_info_get_sort_order (GFileInfo *info)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_val_if_fail (G_IS_FILE_INFO (info), 0);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER);
+  
+  value = g_file_info_find_value (info, attr);
+  return _g_file_attribute_value_get_int32 (value);
+}
+
+/* Helper setters: */
+/**
+ * g_file_info_set_file_type:
+ * @info: a #GFileInfo.
+ * @type: a #GFileType.
+ * 
+ * Sets the file type in a #GFileInfo to @type.
+ * See %G_FILE_ATTRIBUTE_STANDARD_TYPE.
+ **/
+void
+g_file_info_set_file_type (GFileInfo *info,
+			   GFileType  type)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_TYPE);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_uint32 (value, type);
+}
+
+/**
+ * g_file_info_set_is_hidden:
+ * @info: a #GFileInfo.
+ * @is_hidden: a #gboolean.
+ * 
+ * Sets the "is_hidden" attribute in a #GFileInfo according to @is_symlink.
+ * See %G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN.
+ **/
+void
+g_file_info_set_is_hidden (GFileInfo *info,
+			   gboolean   is_hidden)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_boolean (value, is_hidden);
+}
+
+/**
+ * g_file_info_set_is_symlink:
+ * @info: a #GFileInfo.
+ * @is_symlink: a #gboolean.
+ * 
+ * Sets the "is_symlink" attribute in a #GFileInfo according to @is_symlink.
+ * See %G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK.
+ **/
+void
+g_file_info_set_is_symlink (GFileInfo *info,
+			    gboolean   is_symlink)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_boolean (value, is_symlink);
+}
+
+/**
+ * g_file_info_set_name:
+ * @info: a #GFileInfo.
+ * @name: a string containing a name.
+ * 
+ * Sets the name attribute for the current #GFileInfo. 
+ * See %G_FILE_ATTRIBUTE_STANDARD_NAME.
+ **/
+void
+g_file_info_set_name (GFileInfo  *info,
+		      const char *name)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (name != NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_NAME);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_byte_string (value, name);
+}
+
+/**
+ * g_file_info_set_display_name:
+ * @info: a #GFileInfo.
+ * @display_name: a string containing a display name.
+ * 
+ * Sets the display name for the current #GFileInfo.
+ * See %G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME.
+ **/
+void
+g_file_info_set_display_name (GFileInfo  *info,
+			      const char *display_name)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (display_name != NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_string (value, display_name);
+}
+
+/**
+ * g_file_info_set_edit_name:
+ * @info: a #GFileInfo.
+ * @edit_name: a string containing an edit name.
+ * 
+ * Sets the edit name for the current file.
+ * See %G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME.
+ **/
+void
+g_file_info_set_edit_name (GFileInfo  *info,
+			   const char *edit_name)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (edit_name != NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_string (value, edit_name);
+}
+
+/**
+ * g_file_info_set_icon:
+ * @info: a #GFileInfo.
+ * @icon: a #GIcon.
+ * 
+ * Sets the icon for a given #GFileInfo. 
+ * See %G_FILE_ATTRIBUTE_STANDARD_ICON.
+ **/
+void
+g_file_info_set_icon (GFileInfo *info,
+		      GIcon     *icon)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (G_IS_ICON (icon));
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_ICON);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_object (value, G_OBJECT (icon));
+}
+
+/**
+ * g_file_info_set_content_type:
+ * @info: a #GFileInfo.
+ * @content_type: a content type. See #GContentType.
+ * 
+ * Sets the content type attribute for a given #GFileInfo.
+ * See %G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE.
+ **/
+void
+g_file_info_set_content_type (GFileInfo  *info,
+			      const char *content_type)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (content_type != NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_string (value, content_type);
+}
+
+/**
+ * g_file_info_set_size:
+ * @info: a #GFileInfo.
+ * @size: a #goffset containing the file's size.
+ * 
+ * Sets the %G_FILE_ATTRIBUTE_STANDARD_SIZE attribute in the file info 
+ * to the given size.
+ **/
+void
+g_file_info_set_size (GFileInfo *info,
+		      goffset    size)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SIZE);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_uint64 (value, size);
+}
+
+/**
+ * g_file_info_set_modification_time
+ * @info: a #GFileInfo.
+ * @mtime: a #GTimeVal.
+ * 
+ * Sets the %G_FILE_ATTRIBUTE_TIME_MODIFIED attribute in the file
+ * info to the given time value.
+ **/
+void
+g_file_info_set_modification_time (GFileInfo *info,
+				   GTimeVal  *mtime)
+{
+  static guint32 attr_mtime = 0, attr_mtime_usec;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (mtime != NULL);
+  
+  if (attr_mtime == 0)
+    {
+      attr_mtime = lookup_attribute (G_FILE_ATTRIBUTE_TIME_MODIFIED);
+      attr_mtime_usec = lookup_attribute (G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC);
+    }
+  
+  value = g_file_info_create_value (info, attr_mtime);
+  if (value)
+    _g_file_attribute_value_set_uint64 (value, mtime->tv_sec);
+  value = g_file_info_create_value (info, attr_mtime_usec);
+  if (value)
+    _g_file_attribute_value_set_uint32 (value, mtime->tv_usec);
+}
+
+/**
+ * g_file_info_set_symlink_target:
+ * @info: a #GFileInfo.
+ * @symlink_target: a static string containing a path to a symlink target.
+ * 
+ * Sets the %G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET attribute in the file info 
+ * to the given symlink target.
+ **/
+void
+g_file_info_set_symlink_target (GFileInfo  *info,
+				const char *symlink_target)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  g_return_if_fail (symlink_target != NULL);
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_byte_string (value, symlink_target);
+}
+
+/**
+ * g_file_info_set_sort_order:
+ * @info: a #GFileInfo.
+ * @sort_order: a sort order integer.
+ * 
+ * Sets the sort order attribute in the file info structure. See 
+ * %G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER.
+ **/
+void
+g_file_info_set_sort_order (GFileInfo *info,
+			    gint32     sort_order)
+{
+  static guint32 attr = 0;
+  GFileAttributeValue *value;
+  
+  g_return_if_fail (G_IS_FILE_INFO (info));
+  
+  if (attr == 0)
+    attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER);
+  
+  value = g_file_info_create_value (info, attr);
+  if (value)
+    _g_file_attribute_value_set_int32 (value, sort_order);
+}
+
+
+#define ON_STACK_MATCHERS 5
+
+typedef struct {
+  guint32 id;
+  guint32 mask;
+} SubMatcher;
+
+struct _GFileAttributeMatcher {
+  gboolean all;
+  SubMatcher sub_matchers[ON_STACK_MATCHERS];
+  GArray *more_sub_matchers;
+
+  /* Interator */
+  guint32 iterator_ns;
+  int iterator_pos;
+  int ref;
+};
+
+static void
+matcher_add (GFileAttributeMatcher *matcher,
+	     guint                  id,
+             guint                  mask)
+{
+  SubMatcher *sub_matchers;
+  int i;
+  SubMatcher s;
+
+  for (i = 0; i < ON_STACK_MATCHERS; i++)
+    {
+      /* First empty spot, not found, use this */
+      if (matcher->sub_matchers[i].id == 0)
+	{
+	  matcher->sub_matchers[i].id = id;
+	  matcher->sub_matchers[i].mask = mask;
+	  return;
+	}
+      
+      /* Already added */
+      if (matcher->sub_matchers[i].id == id &&
+	  matcher->sub_matchers[i].mask == mask)
+	return;
+    }
+
+  if (matcher->more_sub_matchers == NULL)
+    matcher->more_sub_matchers = g_array_new (FALSE, FALSE, sizeof (SubMatcher));
+      
+  sub_matchers = (SubMatcher *)matcher->more_sub_matchers->data;
+  for (i = 0; i < matcher->more_sub_matchers->len; i++)
+    {
+      /* Already added */
+      if (sub_matchers[i].id == id &&
+	  sub_matchers[i].mask == mask)
+	return;
+    }
+
+  s.id = id;
+  s.mask = mask;
+  
+  g_array_append_val (matcher->more_sub_matchers, s);
+}
+
+/**
+ * g_file_attribute_matcher_new:
+ * @attributes: an attribute string to match.
+ * 
+ * Creates a new file attribute matcher, which matches attributes 
+ * against a given string. #GFileAttributeMatcher<!-- -->s are reference 
+ * counted structures, and are created with a reference count of 1. If 
+ * the number of references falls to 0, the #GFileAttributeMatcher is 
+ * automatically destroyed.
+ * 
+ * The @attribute string should be formatted with specific keys separated
+ * from namespaces with a double colon. Several "namespace::key" strings may be 
+ * concatenated with a single comma (e.g. "standard::type,standard::is-hidden"). 
+ * The wildcard "*" may be used to match all keys and namespaces, or 
+ * "namespace::*" will match all keys in a given namespace. 
+ * 
+ * Examples of strings to use:
+ * <table>
+ * <title>File Attribute Matcher strings and results</title>
+ * <tgroup cols='2' align='left'><thead>
+ * <row><entry> Matcher String </entry><entry> Matches </entry></row></thead>
+ * <tbody>
+ * <row><entry>"*"</entry><entry>matches all attributes.</entry></row>
+ * <row><entry>"standard::is-hidden"</entry><entry>matches only the key is-hidden in the standard namespace.</entry></row>
+ * <row><entry>"standard::type,unix::*"</entry><entry>matches the type key in the standard namespace and
+ * all keys in the unix namespace.</entry></row>
+ * </tbody></tgroup>
+ * </table>
+ * 
+ * Returns: a #GFileAttributeMatcher.
+ **/
+GFileAttributeMatcher *
+g_file_attribute_matcher_new (const char *attributes)
+{
+  char **split;
+  char *colon;
+  int i;
+  GFileAttributeMatcher *matcher;
+
+  if (attributes == NULL || *attributes == '\0')
+    return NULL;
+
+  matcher = g_malloc0 (sizeof (GFileAttributeMatcher));
+  matcher->ref = 1;
+
+  split = g_strsplit (attributes, ",", -1);
+
+  for (i = 0; split[i] != NULL; i++)
+    {
+      if (strcmp (split[i], "*") == 0)
+	matcher->all = TRUE;
+      else
+	{
+	  guint32 id, mask;
+  
+	  colon = strstr (split[i], "::");
+	  if (colon != NULL &&
+	      !(colon[2] == 0 ||
+		(colon[2] == '*' &&
+		 colon[3] == 0)))
+	    {
+	      id = lookup_attribute (split[i]);
+	      mask = 0xffffffff;
+	    }
+	  else
+	    {
+	      if (colon)
+		*colon = 0;
+
+	      id = lookup_namespace (split[i]) << NS_POS;
+	      mask = NS_MASK << NS_POS;
+	    }
+	  
+	  matcher_add (matcher, id, mask);
+	}
+    }
+
+  g_strfreev (split);
+
+  return matcher;
+}
+
+/**
+ * g_file_attribute_matcher_ref:
+ * @matcher: a #GFileAttributeMatcher.
+ * 
+ * References a file attribute matcher.
+ * 
+ * Returns: a #GFileAttributeMatcher.
+ **/
+GFileAttributeMatcher *
+g_file_attribute_matcher_ref (GFileAttributeMatcher *matcher)
+{
+  if (matcher)
+    {
+      g_return_val_if_fail (matcher->ref > 0, NULL);
+      g_atomic_int_inc (&matcher->ref);
+    }
+  return matcher;
+}
+
+/**
+ * g_file_attribute_matcher_unref:
+ * @matcher: a #GFileAttributeMatcher.
+ * 
+ * Unreferences @matcher. If the reference count falls below 1, 
+ * the @matcher is automatically freed.
+ * 
+ **/
+void
+g_file_attribute_matcher_unref (GFileAttributeMatcher *matcher)
+{
+  if (matcher)
+    {
+      g_return_if_fail (matcher->ref > 0);
+      
+      if (g_atomic_int_dec_and_test (&matcher->ref))
+	{
+	  if (matcher->more_sub_matchers)
+	    g_array_free (matcher->more_sub_matchers, TRUE);
+	  
+	  g_free (matcher);
+	}
+    }
+}
+
+/**
+ * g_file_attribute_matcher_matches_only:
+ * @matcher: a #GFileAttributeMatcher.
+ * @attribute: a file attribute key.
+ * 
+ * Checks if a attribute matcher only matches a given attribute. Always
+ * returns %FALSE if "*" was used when creating the matcher.
+ * 
+ * Returns: %TRUE if the matcher only matches @attribute. %FALSE otherwise.
+ **/
+gboolean
+g_file_attribute_matcher_matches_only (GFileAttributeMatcher *matcher,
+				       const char            *attribute)
+{
+  guint32 id;
+
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE);
+
+  if (matcher == NULL ||
+      matcher->all)
+    return FALSE;
+  
+  id = lookup_attribute (attribute);
+
+  if (matcher->sub_matchers[0].id != 0 &&
+      matcher->sub_matchers[1].id == 0 &&
+      matcher->sub_matchers[0].mask == 0xffffffff &&
+      matcher->sub_matchers[0].id == id)
+    return TRUE;
+  
+  return FALSE;
+}
+
+static gboolean
+matcher_matches_id (GFileAttributeMatcher *matcher,
+                    guint32                id)
+{
+  SubMatcher *sub_matchers;
+  int i;
+  
+  for (i = 0; i < ON_STACK_MATCHERS; i++)
+    {
+      if (matcher->sub_matchers[i].id == 0)
+	return FALSE;
+      
+      if (matcher->sub_matchers[i].id == (id & matcher->sub_matchers[i].mask))
+	return TRUE;
+    }
+
+  if (matcher->more_sub_matchers)
+    {
+      sub_matchers = (SubMatcher *)matcher->more_sub_matchers->data;
+      for (i = 0; i < matcher->more_sub_matchers->len; i++)
+	{
+	  if (sub_matchers[i].id == (id & sub_matchers[i].mask))
+	    return TRUE;
+	}
+    }
+  
+  return FALSE;
+}
+
+static gboolean
+g_file_attribute_matcher_matches_id (GFileAttributeMatcher *matcher,
+                                     guint32                id)
+{
+  /* We return a NULL matcher for an empty match string, so handle this */
+  if (matcher == NULL)
+    return FALSE;
+  
+  if (matcher->all)
+    return TRUE;
+  
+  return matcher_matches_id (matcher, id);
+}
+
+/**
+ * g_file_attribute_matcher_matches:
+ * @matcher: a #GFileAttributeMatcher.
+ * @attribute: a file attribute key.
+ *
+ * Checks if an attribute will be matched by an attribute matcher. If 
+ * the matcher was created with the "*" matching string, this function
+ * will always return %TRUE.
+ * 
+ * Returns: %TRUE if @attribute matches @matcher. %FALSE otherwise.
+ **/
+gboolean
+g_file_attribute_matcher_matches (GFileAttributeMatcher *matcher,
+				  const char            *attribute)
+{
+  g_return_val_if_fail (attribute != NULL && *attribute != '\0', FALSE);
+
+  /* We return a NULL matcher for an empty match string, so handle this */
+  if (matcher == NULL)
+    return FALSE;
+  
+  if (matcher->all)
+    return TRUE;
+  
+  return matcher_matches_id (matcher, lookup_attribute (attribute));
+}
+
+/* return TRUE -> all */
+/**
+ * g_file_attribute_matcher_enumerate_namespace:
+ * @matcher: a #GFileAttributeMatcher.
+ * @ns: a string containing a file attribute namespace.
+ * 
+ * Checks if the matcher will match all of the keys in a given namespace.
+ * This will always return %TRUE if a wildcard character is in use (e.g. if 
+ * matcher was created with "standard::*" and @ns is "standard", or if matcher was created
+ * using "*" and namespace is anything.) 
+ * 
+ * TODO: this is awkwardly worded.
+ * 
+ * Returns: %TRUE if the matcher matches all of the entries
+ * in the given @ns, %FALSE otherwise.
+ **/
+gboolean
+g_file_attribute_matcher_enumerate_namespace (GFileAttributeMatcher *matcher,
+					      const char            *ns)
+{
+  SubMatcher *sub_matchers;
+  int ns_id;
+  int i;
+  
+  g_return_val_if_fail (ns != NULL && *ns != '\0', FALSE);
+
+  /* We return a NULL matcher for an empty match string, so handle this */
+  if (matcher == NULL)
+    return FALSE;
+  
+  if (matcher->all)
+    return TRUE;
+
+  ns_id = lookup_namespace (ns) << NS_POS;
+
+  for (i = 0; i < ON_STACK_MATCHERS; i++)
+    {
+      if (matcher->sub_matchers[i].id == ns_id)
+	return TRUE;
+    }
+
+  if (matcher->more_sub_matchers)
+    {
+      sub_matchers = (SubMatcher *)matcher->more_sub_matchers->data;
+      for (i = 0; i < matcher->more_sub_matchers->len; i++)
+	{
+	  if (sub_matchers[i].id == ns_id)
+	    return TRUE;
+	}
+    }
+
+  matcher->iterator_ns = ns_id;
+  matcher->iterator_pos = 0;
+  
+  return FALSE;
+}
+
+/**
+ * g_file_attribute_matcher_enumerate_next:
+ * @matcher: a #GFileAttributeMatcher.
+ * 
+ * Gets the next matched attribute from a #GFileAttributeMatcher.
+ * 
+ * Returns: a string containing the next attribute or %NULL if 
+ * no more attribute exist.
+ **/
+const char *
+g_file_attribute_matcher_enumerate_next (GFileAttributeMatcher *matcher)
+{
+  int i;
+  SubMatcher *sub_matcher;
+
+  /* We return a NULL matcher for an empty match string, so handle this */
+  if (matcher == NULL)
+    return NULL;
+
+  while (1)
+    {
+      i = matcher->iterator_pos++;
+
+      if (i < ON_STACK_MATCHERS)
+	{
+	  if (matcher->sub_matchers[i].id == 0)
+	    return NULL;
+
+	  sub_matcher = &matcher->sub_matchers[i];
+	}
+      else
+	{
+	  if (matcher->more_sub_matchers == NULL)
+	    return NULL;
+      
+	  i -= ON_STACK_MATCHERS;
+	  if (i < matcher->more_sub_matchers->len)
+	    sub_matcher = &g_array_index (matcher->more_sub_matchers, SubMatcher, i);
+	  else
+	    return NULL;
+	}
+
+      if (sub_matcher->mask == 0xffffffff &&
+	  (sub_matcher->id & (NS_MASK << NS_POS)) == matcher->iterator_ns)
+	return get_attribute_for_id (sub_matcher->id);
+    }
+}
+
+#define __G_FILE_INFO_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfileinfo.h b/gio/gfileinfo.h
new file mode 100644
index 0000000..9c3907e
--- /dev/null
+++ b/gio/gfileinfo.h
@@ -0,0 +1,844 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_INFO_H__
+#define __G_FILE_INFO_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE_INFO         (g_file_info_get_type ())
+#define G_FILE_INFO(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_INFO, GFileInfo))
+#define G_FILE_INFO_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_INFO, GFileInfoClass))
+#define G_IS_FILE_INFO(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_INFO))
+#define G_IS_FILE_INFO_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_INFO))
+#define G_FILE_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_INFO, GFileInfoClass))
+
+/**
+ * GFileInfo:
+ *
+ * Stores information about a file system object referenced by a #GFile.
+ **/
+typedef struct _GFileInfoClass   GFileInfoClass;
+
+
+/* Common Attributes:  */
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_TYPE:
+ *
+ * A key in the "standard" namespace for storing file types.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ * The value for this key should contain a #GFileType.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_TYPE "standard::type"                     /* uint32 (GFileType) */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN:
+ *
+ * A key in the "standard" namespace for checking if a file is hidden.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN "standard::is-hidden"           /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP:
+ *
+ * A key in the "standard" namespace for checking if a file is a backup file.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP "standard::is-backup"           /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK:
+ *
+ * A key in the "standard" namespace for checking if the file is a symlink.
+ * Typically the actual type is something else, if we followed the symlink
+ * to get the type.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK "standard::is-symlink"         /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL:
+ *
+ * A key in the "standard" namespace for checking if a file is virtual.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL "standard::is-virtual"         /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_NAME:
+ *
+ * A key in the "standard" namespace for getting the name of the file.
+ * The name is the on-disk filename which may not be in any known encoding,
+ * and can thus not be generally displayed as is.
+ * Use #G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME if you need to display the
+ * name in a user interface.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_NAME "standard::name"                     /* byte string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME:
+ *
+ * A key in the "standard" namespace for getting the display name of the file.
+ * A display name is guaranteed to be in UTF8 and can thus be displayed in
+ * the UI.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "standard::display-name"     /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME:
+ *
+ * A key in the "standard" namespace for edit name of the file.
+ * An edit name is similar to the display name, but it is meant to be
+ * used when you want to rename the file in the UI. The display name
+ * might contain information you don't want in the new filename (such as
+ * "(invalid unicode)" if the filename was in an invalid encoding).
+ *
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME "standard::edit-name"           /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_COPY_NAME:
+ *
+ * A key in the "standard" namespace for getting the copy name of the file.
+ * The copy name is an optional version of the name. If available it's always
+ * in UTF8, and corresponds directly to the original filename (only transcoded to
+ * UTF8). This is useful if you want to copy the file to another filesystem that
+ * might have a different encoding. If the filename is not a valid string in the
+ * encoding selected for the filesystem it is in then the copy name will not be set.
+ *
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_COPY_NAME "standard::copy-name"           /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION:
+ *
+ * A key in the "standard" namespace for getting the description of the file.
+ * The description is a utf8 string that describes the file, generally containing
+ * the filename, but can also contain furter information. Example descriptions
+ * could be "filename (on hostname)" for a remote file or "filename (in trash)"
+ * for a file in the trash. This is useful for instance as the window title
+ * when displaying a directory or for a bookmarks menu.
+ *
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION "standard::description"        /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_ICON:
+ *
+ * A key in the "standard" namespace for getting the icon for the file.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT.
+ * The value for this key should contain a #GIcon.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_ICON "standard::icon"                     /* object (GIcon) */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE:
+ *
+ * A key in the "standard" namespace for getting the content type of the file.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ * The value for this key should contain a valid content type.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "standard::content-type"     /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE:
+ *
+ * A key in the "standard" namespace for getting the fast content type.
+ * The fast content type isn't as reliable as the regular one, as it
+ * only uses the filename to guess it, but it is faster to calculate than the
+ * regular content type.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ *
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE "standard::fast-content-type" /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_SIZE:
+ *
+ * A key in the "standard" namespace for getting the file's size (in bytes).
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_SIZE "standard::size"                     /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_ALLOCATED_SIZE:
+ *
+ * A key in the "standard" namespace for getting the amount of disk space
+ * that is consumed by the file (in bytes).  This will generally be larger
+ * than the file size (due to block size overhead) but can occasionally be
+ * smaller (for example, for sparse files).
+ *
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE "standard::allocated-size" /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET:
+ *
+ * A key in the "standard" namespace for getting the symlink target, if the file
+ * is a symlink. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET "standard::symlink-target" /* byte string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_TARGET_URI:
+ *
+ * A key in the "standard" namespace for getting the target URI for the file, in
+ * the case of %G_FILE_TYPE_SHORTCUT or %G_FILE_TYPE_MOUNTABLE files.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_TARGET_URI "standard::target-uri"         /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER:
+ *
+ * A key in the "standard" namespace for setting the sort order of a file.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_INT32.
+ * An example use would be in file managers, which would use this key
+ * to set the order files are displayed. Files with smaller sort order
+ * should be sorted first, and files without sort order as if sort order
+ * was zero.
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER "standard::sort-order"         /* int32  */
+
+/* Entity tags, used to avoid missing updates on save */
+
+/**
+ * G_FILE_ATTRIBUTE_ETAG_VALUE:
+ *
+ * A key in the "etag" namespace for getting the value of the file's
+ * entity tag. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_ETAG_VALUE "etag::value"                 /* string */
+
+/* File identifier, for e.g. avoiding loops when doing recursive
+ * directory scanning
+ */
+
+/**
+ * G_FILE_ATTRIBUTE_ID_FILE:
+ *
+ * A key in the "id" namespace for getting a file identifier.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ * An example use would be during listing files, to avoid recursive
+ * directory scanning.
+ **/
+#define G_FILE_ATTRIBUTE_ID_FILE "id::file"                     /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_ID_FILESYSTEM:
+ *
+ * A key in the "id" namespace for getting the file system identifier.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ * An example use would be during drag and drop to see if the source
+ * and target are on the same filesystem (default to move) or not (default
+ * to copy).
+ **/
+#define G_FILE_ATTRIBUTE_ID_FILESYSTEM "id::filesystem"         /* string */
+
+/* Calculated Access Rights for current user */
+
+/**
+ * G_FILE_ATTRIBUTE_ACCESS_CAN_READ:
+ *
+ * A key in the "access" namespace for getting read privileges.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ * This attribute will be %TRUE if the user is able to read the file.
+ **/
+#define G_FILE_ATTRIBUTE_ACCESS_CAN_READ "access::can-read"       /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE:
+ *
+ * A key in the "access" namespace for getting write privileges.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ * This attribute will be %TRUE if the user is able to write to the file.
+ **/
+#define G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE "access::can-write"     /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE:
+ *
+ * A key in the "access" namespace for getting execution privileges.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ * This attribute will be %TRUE if the user is able to execute the file.
+ **/
+#define G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE "access::can-execute" /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE:
+ *
+ * A key in the "access" namespace for checking deletion privileges.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ * This attribute will be %TRUE if the user is able to delete the file.
+ **/
+#define G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE "access::can-delete"   /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH:
+ *
+ * A key in the "access" namespace for checking trashing privileges.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ * This attribute will be %TRUE if the user is able to move the file to
+ * the trash.
+ **/
+#define G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH "access::can-trash"     /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME:
+ *
+ * A key in the "access" namespace for checking renaming privileges.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ * This attribute will be %TRUE if the user is able to rename the file.
+ **/
+#define G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME "access::can-rename"   /* boolean */
+
+/* TODO: Should we have special version for directories? can_enumerate, etc */
+
+/* Mountable attributes */
+
+/**
+ * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT:
+ *
+ * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) is mountable.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT "mountable::can-mount"     /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT:
+ *
+ * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE)  is unmountable.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT "mountable::can-unmount" /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT:
+ *
+ * A key in the "mountable" namespace for checking if a file (of type G_FILE_TYPE_MOUNTABLE) can be ejected.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT "mountable::can-eject"     /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE:
+ *
+ * A key in the "mountable" namespace for getting the unix device.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE "mountable::unix-device" /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI:
+ *
+ * A key in the "mountable" namespace for getting the HAL UDI for the mountable
+ * file. Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI "mountable::hal-udi"         /* string */
+
+/* Time attributes */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_MODIFIED:
+ *
+ * A key in the "time" namespace for getting the time the file was last
+ * modified. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT64, and contains the UNIX time since the
+ * file was modified.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_MODIFIED "time::modified"           /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC:
+ *
+ * A key in the "time" namespace for getting the miliseconds of the time
+ * the file was last modified. This should be used in conjunction with
+ * #G_FILE_ATTRIBUTE_TIME_MODIFIED. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC "time::modified-usec" /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_ACCESS:
+ *
+ * A key in the "time" namespace for getting the time the file was last
+ * accessed. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT64, and contains the UNIX time since the
+ * file was last accessed.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_ACCESS "time::access"               /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_ACCESS_USEC:
+ *
+ * A key in the "time" namespace for getting the microseconds of the time
+ * the file was last accessed. This should be used in conjunction with
+ * #G_FILE_ATTRIBUTE_TIME_ACCESS. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_ACCESS_USEC "time::access-usec"     /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_CHANGED:
+ *
+ * A key in the "time" namespace for getting the time the file was last
+ * changed. Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64,
+ * and contains the UNIX time since the file was last changed.
+ *
+ * This corresponds to the traditional UNIX ctime.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_CHANGED "time::changed"             /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_CHANGED_USEC:
+ *
+ * A key in the "time" namespace for getting the microseconds of the time
+ * the file was last changed. This should be used in conjunction with
+ * #G_FILE_ATTRIBUTE_TIME_CHANGED. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_CHANGED_USEC "time::changed-usec"   /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_CREATED:
+ *
+ * A key in the "time" namespace for getting the time the file was created.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64,
+ * and contains the UNIX time since the file was created.
+ *
+ * This corresponds to the NTFS ctime.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_CREATED "time::created"             /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_TIME_CREATED_USEC:
+ *
+ * A key in the "time" namespace for getting the microseconds of the time
+ * the file was created. This should be used in conjunction with
+ * #G_FILE_ATTRIBUTE_TIME_CREATED. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_TIME_CREATED_USEC "time::created-usec"   /* uint32 */
+
+/* Unix specific attributes */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_DEVICE:
+ *
+ * A key in the "unix" namespace for getting the device id of the device the
+ * file is located on (see stat() documentation). This attribute is only
+ * available for UNIX file systems. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_DEVICE "unix::device"               /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_INODE:
+ *
+ * A key in the "unix" namespace for getting the inode of the file.
+ * This attribute is only available for UNIX file systems. Corresponding
+ * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_INODE "unix::inode"                 /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_MODE:
+ *
+ * A key in the "unix" namespace for getting the mode of the file
+ * (e.g. whether the file is a regular file, symlink, etc). See lstat()
+ * documentation. This attribute is only available for UNIX file systems.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_MODE "unix::mode"                   /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_NLINK:
+ *
+ * A key in the "unix" namespace for getting the number of hard links
+ * for a file. See lstat() documentation. This attribute is only available
+ * for UNIX file systems. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_NLINK "unix::nlink"                 /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_UID:
+ *
+ * A key in the "unix" namespace for getting the user ID for the file.
+ * This attribute is only available for UNIX file systems.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_UID "unix::uid"                     /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_GID:
+ *
+ * A key in the "unix" namespace for getting the group ID for the file.
+ * This attribute is only available for UNIX file systems.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_GID "unix::gid"                     /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_RDEV:
+ *
+ * A key in the "unix" namespace for getting the device ID for the file
+ * (if it is a special file). See lstat() documentation. This attribute
+ * is only available for UNIX file systems. Corresponding #GFileAttributeType
+ * is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_RDEV "unix::rdev"                   /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE:
+ *
+ * A key in the "unix" namespace for getting the block size for the file
+ * system. This attribute is only available for UNIX file systems.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE "unix::block-size"       /* uint32 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_BLOCKS:
+ *
+ * A key in the "unix" namespace for getting the number of blocks allocated
+ * for the file. This attribute is only available for UNIX file systems.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT64.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_BLOCKS "unix::blocks"               /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT:
+ *
+ * A key in the "unix" namespace for checking if the file represents a
+ * UNIX mount point. This attribute is %TRUE if the file is a UNIX mount
+ * point. This attribute is only available for UNIX file systems.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT "unix::is-mountpoint" /* boolean */
+
+/* DOS specific attributes */
+
+/**
+ * G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE:
+ *
+ * A key in the "dos" namespace for checking if the file's archive flag
+ * is set. This attribute is %TRUE if the archive flag is set. This attribute
+ * is only available for DOS file systems. Corresponding #GFileAttributeType
+ * is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE "dos::is-archive"         /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_DOS_IS_SYSTEM:
+ *
+ * A key in the "dos" namespace for checking if the file's backup flag
+ * is set. This attribute is %TRUE if the backup flag is set. This attribute
+ * is only available for DOS file systems. Corresponding #GFileAttributeType
+ * is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_DOS_IS_SYSTEM "dos::is-system"           /* boolean */
+
+/* Owner attributes */
+
+/**
+ * G_FILE_ATTRIBUTE_OWNER_USER:
+ *
+ * A key in the "owner" namespace for getting the user name of the
+ * file's owner. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_OWNER_USER "owner::user"                 /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_OWNER_USER_REAL:
+ *
+ * A key in the "owner" namespace for getting the real name of the
+ * user that owns the file. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_OWNER_USER_REAL "owner::user-real"       /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_OWNER_GROUP:
+ *
+ * A key in the "owner" namespace for getting the file owner's group.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_OWNER_GROUP "owner::group"               /* string */
+
+/* Thumbnails */
+
+/**
+ * G_FILE_ATTRIBUTE_THUMBNAIL_PATH:
+ *
+ * A key in the "thumbnail" namespace for getting the path to the thumbnail
+ * image. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_BYTE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_THUMBNAIL_PATH "thumbnail::path"         /* bytestring */
+/**
+ * G_FILE_ATTRIBUTE_THUMBNAILING_FAILED:
+ *
+ * A key in the "thumbnail" namespace for checking if thumbnailing failed.
+ * This attribute is %TRUE if thumbnailing failed. Corresponding
+ * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_THUMBNAILING_FAILED "thumbnail::failed"         /* boolean */
+
+/* Preview */
+
+/**
+ * G_FILE_ATTRIBUTE_PREVIEW_ICON:
+ *
+ * A key in the "preview" namespace for getting a #GIcon that can be
+ * used to get preview of the file. For example, it may be a low
+ * resolution thumbnail without metadata. Corresponding
+ * #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT.  The value
+ * for this key should contain a #GIcon.
+ *
+ * Since: 2.20
+ **/
+#define G_FILE_ATTRIBUTE_PREVIEW_ICON "preview::icon"         /* object (GIcon) */
+
+/* File system info (for g_file_get_filesystem_info) */
+
+/**
+ * G_FILE_ATTRIBUTE_FILESYSTEM_SIZE:
+ *
+ * A key in the "filesystem" namespace for getting the total size (in bytes) of the file system,
+ * used in g_file_query_filesystem_info(). Corresponding #GFileAttributeType
+ * is %G_FILE_ATTRIBUTE_TYPE_UINT64.
+ **/
+#define G_FILE_ATTRIBUTE_FILESYSTEM_SIZE "filesystem::size"                       /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_FILESYSTEM_FREE:
+ *
+ * A key in the "filesystem" namespace for getting the number of bytes of free space left on the
+ * file system. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_UINT64.
+ **/
+#define G_FILE_ATTRIBUTE_FILESYSTEM_FREE "filesystem::free"                       /* uint64 */
+
+/**
+ * G_FILE_ATTRIBUTE_FILESYSTEM_TYPE:
+ *
+ * A key in the "filesystem" namespace for getting the file system's type.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_FILESYSTEM_TYPE "filesystem::type"                       /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_FILESYSTEM_READONLY:
+ *
+ * A key in the "filesystem" namespace for checking if the file system
+ * is read only. Is set to %TRUE if the file system is read only.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_BOOLEAN.
+ **/
+#define G_FILE_ATTRIBUTE_FILESYSTEM_READONLY "filesystem::readonly"               /* boolean */
+
+/**
+ * G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW:
+ *
+ * A key in the "filesystem" namespace for hinting a file manager
+ * application whether it should preview (e.g. thumbnail) files on the
+ * file system. The value for this key contain a
+ * #GFilesystemPreviewType.
+ **/
+#define G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW "filesystem::use-preview"        /* uint32 (GFilesystemPreviewType) */
+
+/**
+ * G_FILE_ATTRIBUTE_GVFS_BACKEND:
+ *
+ * A key in the "gvfs" namespace that gets the name of the current
+ * GVFS backend in use. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_STRING.
+ **/
+#define G_FILE_ATTRIBUTE_GVFS_BACKEND "gvfs::backend"             /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_SELINUX_CONTEXT:
+ *
+ * A key in the "selinux" namespace for getting the file's SELinux
+ * context. Corresponding #GFileAttributeType is
+ * %G_FILE_ATTRIBUTE_TYPE_STRING. Note that this attribute is only
+ * available if GLib has been built with SELinux support.
+ **/
+#define G_FILE_ATTRIBUTE_SELINUX_CONTEXT "selinux::context"       /* string */
+
+/**
+ * G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT:
+ *
+ * A key in the "trash" namespace.  When requested against
+ * "trash:///" returns the number of (toplevel) items in the trash folder.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_UINT32.
+ **/
+#define G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT "trash::item-count"     /* uint32 */
+
+GType              g_file_info_get_type                  (void) G_GNUC_CONST;
+
+GFileInfo *        g_file_info_new                       (void);
+GFileInfo *        g_file_info_dup                       (GFileInfo  *other);
+void               g_file_info_copy_into                 (GFileInfo  *src_info,
+							  GFileInfo  *dest_info);
+gboolean           g_file_info_has_attribute             (GFileInfo  *info,
+							  const char *attribute);
+char **            g_file_info_list_attributes           (GFileInfo  *info,
+							  const char *name_space);
+gboolean           g_file_info_get_attribute_data        (GFileInfo  *info,
+							  const char *attribute,
+							  GFileAttributeType *type,
+							  gpointer   *value_pp,
+							  GFileAttributeStatus *status);
+GFileAttributeType g_file_info_get_attribute_type        (GFileInfo  *info,
+							  const char *attribute);
+void               g_file_info_remove_attribute          (GFileInfo  *info,
+							  const char *attribute);
+GFileAttributeStatus g_file_info_get_attribute_status    (GFileInfo  *info,
+							  const char *attribute);
+char *             g_file_info_get_attribute_as_string   (GFileInfo  *info,
+							  const char *attribute);
+const char *       g_file_info_get_attribute_string      (GFileInfo  *info,
+							  const char *attribute);
+const char *       g_file_info_get_attribute_byte_string (GFileInfo  *info,
+							  const char *attribute);
+gboolean           g_file_info_get_attribute_boolean     (GFileInfo  *info,
+							  const char *attribute);
+guint32            g_file_info_get_attribute_uint32      (GFileInfo  *info,
+							  const char *attribute);
+gint32             g_file_info_get_attribute_int32       (GFileInfo  *info,
+							  const char *attribute);
+guint64            g_file_info_get_attribute_uint64      (GFileInfo  *info,
+							  const char *attribute);
+gint64             g_file_info_get_attribute_int64       (GFileInfo  *info,
+							  const char *attribute);
+GObject *          g_file_info_get_attribute_object      (GFileInfo  *info,
+							  const char *attribute);
+
+void               g_file_info_set_attribute             (GFileInfo  *info,
+							  const char *attribute,
+							  GFileAttributeType type,
+							  gpointer    value_p);
+void               g_file_info_set_attribute_string      (GFileInfo  *info,
+							  const char *attribute,
+							  const char *attr_value);
+void               g_file_info_set_attribute_byte_string (GFileInfo  *info,
+							  const char *attribute,
+							  const char *attr_value);
+void               g_file_info_set_attribute_boolean     (GFileInfo  *info,
+							  const char *attribute,
+							  gboolean    attr_value);
+void               g_file_info_set_attribute_uint32      (GFileInfo  *info,
+							  const char *attribute,
+							  guint32     attr_value);
+void               g_file_info_set_attribute_int32       (GFileInfo  *info,
+							  const char *attribute,
+							  gint32      attr_value);
+void               g_file_info_set_attribute_uint64      (GFileInfo  *info,
+							  const char *attribute,
+							  guint64     attr_value);
+void               g_file_info_set_attribute_int64       (GFileInfo  *info,
+							  const char *attribute,
+							  gint64      attr_value);
+void               g_file_info_set_attribute_object      (GFileInfo  *info,
+							  const char *attribute,
+							  GObject    *attr_value);
+
+void               g_file_info_clear_status              (GFileInfo  *info);
+
+/* Helper getters: */
+GFileType         g_file_info_get_file_type          (GFileInfo         *info);
+gboolean          g_file_info_get_is_hidden          (GFileInfo         *info);
+gboolean          g_file_info_get_is_backup          (GFileInfo         *info);
+gboolean          g_file_info_get_is_symlink         (GFileInfo         *info);
+const char *      g_file_info_get_name               (GFileInfo         *info);
+const char *      g_file_info_get_display_name       (GFileInfo         *info);
+const char *      g_file_info_get_edit_name          (GFileInfo         *info);
+GIcon *           g_file_info_get_icon               (GFileInfo         *info);
+const char *      g_file_info_get_content_type       (GFileInfo         *info);
+goffset           g_file_info_get_size               (GFileInfo         *info);
+void              g_file_info_get_modification_time  (GFileInfo         *info,
+						      GTimeVal          *result);
+const char *      g_file_info_get_symlink_target     (GFileInfo         *info);
+const char *      g_file_info_get_etag               (GFileInfo         *info);
+gint32            g_file_info_get_sort_order         (GFileInfo         *info);
+
+void              g_file_info_set_attribute_mask     (GFileInfo         *info,
+						      GFileAttributeMatcher *mask);
+void              g_file_info_unset_attribute_mask   (GFileInfo         *info);
+
+/* Helper setters: */
+void              g_file_info_set_file_type          (GFileInfo         *info,
+						      GFileType          type);
+void              g_file_info_set_is_hidden          (GFileInfo         *info,
+						      gboolean           is_hidden);
+void              g_file_info_set_is_symlink         (GFileInfo         *info,
+						      gboolean           is_symlink);
+void              g_file_info_set_name               (GFileInfo         *info,
+						      const char        *name);
+void              g_file_info_set_display_name       (GFileInfo         *info,
+						      const char        *display_name);
+void              g_file_info_set_edit_name          (GFileInfo         *info,
+						      const char        *edit_name);
+void              g_file_info_set_icon               (GFileInfo         *info,
+						      GIcon             *icon);
+void              g_file_info_set_content_type       (GFileInfo         *info,
+						      const char        *content_type);
+void              g_file_info_set_size               (GFileInfo         *info,
+						      goffset            size);
+void              g_file_info_set_modification_time  (GFileInfo         *info,
+						      GTimeVal          *mtime);
+void              g_file_info_set_symlink_target     (GFileInfo         *info,
+						      const char        *symlink_target);
+void              g_file_info_set_sort_order         (GFileInfo         *info,
+						      gint32             sort_order);
+
+GFileAttributeMatcher *g_file_attribute_matcher_new            (const char            *attributes);
+GFileAttributeMatcher *g_file_attribute_matcher_ref            (GFileAttributeMatcher *matcher);
+void                   g_file_attribute_matcher_unref          (GFileAttributeMatcher *matcher);
+gboolean               g_file_attribute_matcher_matches        (GFileAttributeMatcher *matcher,
+								const char            *attribute);
+gboolean               g_file_attribute_matcher_matches_only   (GFileAttributeMatcher *matcher,
+								const char            *attribute);
+gboolean               g_file_attribute_matcher_enumerate_namespace (GFileAttributeMatcher *matcher,
+								     const char            *ns);
+const char *           g_file_attribute_matcher_enumerate_next (GFileAttributeMatcher *matcher);
+
+G_END_DECLS
+
+#endif /* __G_FILE_INFO_H__ */
diff --git a/gio/gfileinputstream.c b/gio/gfileinputstream.c
new file mode 100644
index 0000000..0493f38
--- /dev/null
+++ b/gio/gfileinputstream.c
@@ -0,0 +1,475 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <gfileinputstream.h>
+#include <gseekable.h>
+#include "gsimpleasyncresult.h"
+#include "gcancellable.h"
+#include "gasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfileinputstream
+ * @short_description: File input streaming operations
+ * @include: gio/gio.h
+ * @see_also: #GInputStream, #GDataInputStream, #GSeekable
+ *
+ * GFileInputStream provides input streams that take their
+ * content from a file.
+ *
+ * GFileInputStream implements #GSeekable, which allows the input 
+ * stream to jump to arbitrary positions in the file, provided the 
+ * filesystem of the file allows it. In addition to the generic 
+ * g_seekable_ API, GFileInputStream has its own API for seeking 
+ * and positioning. To find the position of a file input stream, 
+ * use g_file_input_stream_tell(). To find out if a file input 
+ * stream supports seeking, use g_file_input_stream_can_seek().
+ * To position a file input stream, use g_file_input_stream_seek().
+ **/
+
+static void       g_file_input_stream_seekable_iface_init    (GSeekableIface       *iface);
+static goffset    g_file_input_stream_seekable_tell          (GSeekable            *seekable);
+static gboolean   g_file_input_stream_seekable_can_seek      (GSeekable            *seekable);
+static gboolean   g_file_input_stream_seekable_seek          (GSeekable            *seekable,
+							      goffset               offset,
+							      GSeekType             type,
+							      GCancellable         *cancellable,
+							      GError              **error);
+static gboolean   g_file_input_stream_seekable_can_truncate  (GSeekable            *seekable);
+static gboolean   g_file_input_stream_seekable_truncate      (GSeekable            *seekable,
+							      goffset               offset,
+							      GCancellable         *cancellable,
+							      GError              **error);
+static void       g_file_input_stream_real_query_info_async  (GFileInputStream     *stream,
+							      const char           *attributes,
+							      int                   io_priority,
+							      GCancellable         *cancellable,
+							      GAsyncReadyCallback   callback,
+							      gpointer              user_data);
+static GFileInfo *g_file_input_stream_real_query_info_finish (GFileInputStream     *stream,
+							      GAsyncResult         *result,
+							      GError              **error);
+
+
+G_DEFINE_TYPE_WITH_CODE (GFileInputStream, g_file_input_stream, G_TYPE_INPUT_STREAM,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE,
+						g_file_input_stream_seekable_iface_init))
+
+struct _GFileInputStreamPrivate {
+  GAsyncReadyCallback outstanding_callback;
+};
+
+static void
+g_file_input_stream_class_init (GFileInputStreamClass *klass)
+{
+  g_type_class_add_private (klass, sizeof (GFileInputStreamPrivate));
+
+  klass->query_info_async = g_file_input_stream_real_query_info_async;
+  klass->query_info_finish = g_file_input_stream_real_query_info_finish;
+}
+
+static void
+g_file_input_stream_seekable_iface_init (GSeekableIface *iface)
+{
+  iface->tell = g_file_input_stream_seekable_tell;
+  iface->can_seek = g_file_input_stream_seekable_can_seek;
+  iface->seek = g_file_input_stream_seekable_seek;
+  iface->can_truncate = g_file_input_stream_seekable_can_truncate;
+  iface->truncate_fn = g_file_input_stream_seekable_truncate;
+}
+
+static void
+g_file_input_stream_init (GFileInputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+					      G_TYPE_FILE_INPUT_STREAM,
+					      GFileInputStreamPrivate);
+}
+
+/**
+ * g_file_input_stream_query_info:
+ * @stream: a #GFileInputStream.
+ * @attributes: a file attribute query string.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ *
+ * Queries a file input stream the given @attributes. This function blocks 
+ * while querying the stream. For the asynchronous (non-blocking) version 
+ * of this function, see g_file_input_stream_query_info_async(). While the 
+ * stream is blocked, the stream will set the pending flag internally, and 
+ * any other operations on the stream will fail with %G_IO_ERROR_PENDING.
+ *
+ * Returns: a #GFileInfo, or %NULL on error.
+ **/
+GFileInfo *
+g_file_input_stream_query_info (GFileInputStream  *stream,
+                                const char        *attributes,
+                                GCancellable      *cancellable,
+                                GError           **error)
+{
+  GFileInputStreamClass *class;
+  GInputStream *input_stream;
+  GFileInfo *info;
+  
+  g_return_val_if_fail (G_IS_FILE_INPUT_STREAM (stream), NULL);
+  
+  input_stream = G_INPUT_STREAM (stream);
+  
+  if (!g_input_stream_set_pending (input_stream, error))
+    return NULL;
+      
+  info = NULL;
+  
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  class = G_FILE_INPUT_STREAM_GET_CLASS (stream);
+  if (class->query_info)
+    info = class->query_info (stream, attributes, cancellable, error);
+  else
+    g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                         _("Stream doesn't support query_info"));
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_input_stream_clear_pending (input_stream);
+  
+  return info;
+}
+
+static void
+async_ready_callback_wrapper (GObject      *source_object,
+                              GAsyncResult *res,
+                              gpointer      user_data)
+{
+  GFileInputStream *stream = G_FILE_INPUT_STREAM (source_object);
+
+  g_input_stream_clear_pending (G_INPUT_STREAM (stream));
+  if (stream->priv->outstanding_callback)
+    (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+/**
+ * g_file_input_stream_query_info_async:
+ * @stream: a #GFileInputStream.
+ * @attributes: a file attribute query string.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Queries the stream information asynchronously.
+ * When the operation is finished @callback will be called. 
+ * You can then call g_file_input_stream_query_info_finish() 
+ * to get the result of the operation.
+ *
+ * For the synchronous version of this function, 
+ * see g_file_input_stream_query_info(). 
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be set
+ *  
+ **/
+void
+g_file_input_stream_query_info_async (GFileInputStream    *stream,
+                                      const char          *attributes,
+                                      int                  io_priority,
+                                      GCancellable        *cancellable,
+                                      GAsyncReadyCallback  callback,
+                                      gpointer             user_data)
+{
+  GFileInputStreamClass *klass;
+  GInputStream *input_stream;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_FILE_INPUT_STREAM (stream));
+
+  input_stream = G_INPUT_STREAM (stream);
+  
+  if (!g_input_stream_set_pending (input_stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+
+  klass = G_FILE_INPUT_STREAM_GET_CLASS (stream);
+
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  klass->query_info_async (stream, attributes, io_priority, cancellable,
+			      async_ready_callback_wrapper, user_data);
+}
+
+/**
+ * g_file_input_stream_query_info_finish:
+ * @stream: a #GFileInputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, 
+ *     or %NULL to ignore.
+ * 
+ * Finishes an asynchronous info query operation.
+ * 
+ * Returns: #GFileInfo. 
+ **/
+GFileInfo *
+g_file_input_stream_query_info_finish (GFileInputStream  *stream,
+                                       GAsyncResult      *result,
+                                       GError           **error)
+{
+  GSimpleAsyncResult *simple;
+  GFileInputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_FILE_INPUT_STREAM (stream), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+
+  class = G_FILE_INPUT_STREAM_GET_CLASS (stream);
+  return class->query_info_finish (stream, result, error);
+}
+
+static goffset
+g_file_input_stream_tell (GFileInputStream *stream)
+{
+  GFileInputStreamClass *class;
+  goffset offset;
+
+  g_return_val_if_fail (G_IS_FILE_INPUT_STREAM (stream), 0);
+
+  class = G_FILE_INPUT_STREAM_GET_CLASS (stream);
+
+  offset = 0;
+  if (class->tell)
+    offset = class->tell (stream);
+
+  return offset;
+}
+
+static goffset
+g_file_input_stream_seekable_tell (GSeekable *seekable)
+{
+  return g_file_input_stream_tell (G_FILE_INPUT_STREAM (seekable));
+}
+
+static gboolean
+g_file_input_stream_can_seek (GFileInputStream *stream)
+{
+  GFileInputStreamClass *class;
+  gboolean can_seek;
+
+  g_return_val_if_fail (G_IS_FILE_INPUT_STREAM (stream), FALSE);
+
+  class = G_FILE_INPUT_STREAM_GET_CLASS (stream);
+
+  can_seek = FALSE;
+  if (class->seek)
+    {
+      can_seek = TRUE;
+      if (class->can_seek)
+	can_seek = class->can_seek (stream);
+    }
+  
+  return can_seek;
+}
+
+static gboolean
+g_file_input_stream_seekable_can_seek (GSeekable *seekable)
+{
+  return g_file_input_stream_can_seek (G_FILE_INPUT_STREAM (seekable));
+}
+
+static gboolean
+g_file_input_stream_seek (GFileInputStream  *stream,
+			  goffset            offset,
+			  GSeekType          type,
+			  GCancellable      *cancellable,
+			  GError           **error)
+{
+  GFileInputStreamClass *class;
+  GInputStream *input_stream;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_FILE_INPUT_STREAM (stream), FALSE);
+
+  input_stream = G_INPUT_STREAM (stream);
+  class = G_FILE_INPUT_STREAM_GET_CLASS (stream);
+
+  if (!class->seek)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Seek not supported on stream"));
+      return FALSE;
+    }
+
+  if (!g_input_stream_set_pending (input_stream, error))
+    return FALSE;
+  
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  res = class->seek (stream, offset, type, cancellable, error);
+  
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+
+  g_input_stream_clear_pending (input_stream);
+  
+  return res;
+}
+
+static gboolean
+g_file_input_stream_seekable_seek (GSeekable     *seekable,
+				   goffset        offset,
+				   GSeekType      type,
+				   GCancellable  *cancellable,
+				   GError       **error)
+{
+  return g_file_input_stream_seek (G_FILE_INPUT_STREAM (seekable),
+				   offset, type, cancellable, error);
+}
+
+static gboolean
+g_file_input_stream_seekable_can_truncate (GSeekable *seekable)
+{
+  return FALSE;
+}
+
+static gboolean
+g_file_input_stream_seekable_truncate (GSeekable     *seekable,
+				       goffset        offset,
+				       GCancellable  *cancellable,
+				       GError       **error)
+{
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                       _("Truncate not allowed on input stream"));
+  return FALSE;
+}
+
+/********************************************
+ *   Default implementation of async ops    *
+ ********************************************/
+
+typedef struct {
+  char *attributes;
+  GFileInfo *info;
+} QueryInfoAsyncData;
+
+static void
+query_info_data_free (QueryInfoAsyncData *data)
+{
+  if (data->info)
+    g_object_unref (data->info);
+  g_free (data->attributes);
+  g_free (data);
+}
+
+static void
+query_info_async_thread (GSimpleAsyncResult *res,
+		         GObject            *object,
+		         GCancellable       *cancellable)
+{
+  GFileInputStreamClass *class;
+  GError *error = NULL;
+  QueryInfoAsyncData *data;
+  GFileInfo *info;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+
+  info = NULL;
+  
+  class = G_FILE_INPUT_STREAM_GET_CLASS (object);
+  if (class->query_info)
+    info = class->query_info (G_FILE_INPUT_STREAM (object), data->attributes, cancellable, &error);
+  else
+    g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                         _("Stream doesn't support query_info"));
+
+  if (info == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->info = info;
+}
+
+static void
+g_file_input_stream_real_query_info_async (GFileInputStream    *stream,
+                                           const char          *attributes,
+                                           int                  io_priority,
+                                           GCancellable        *cancellable,
+                                           GAsyncReadyCallback  callback,
+                                           gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  QueryInfoAsyncData *data;
+
+  data = g_new0 (QueryInfoAsyncData, 1);
+  data->attributes = g_strdup (attributes);
+  
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_file_input_stream_real_query_info_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_info_data_free);
+  
+  g_simple_async_result_run_in_thread (res, query_info_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileInfo *
+g_file_input_stream_real_query_info_finish (GFileInputStream  *stream,
+                                            GAsyncResult      *res,
+                                            GError           **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  QueryInfoAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_input_stream_real_query_info_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->info)
+    return g_object_ref (data->info);
+  
+  return NULL;
+}
+
+#define __G_FILE_INPUT_STREAM_C__
+#include "gioaliasdef.c"
+
diff --git a/gio/gfileinputstream.h b/gio/gfileinputstream.h
new file mode 100644
index 0000000..3c162c7
--- /dev/null
+++ b/gio/gfileinputstream.h
@@ -0,0 +1,112 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_INPUT_STREAM_H__
+#define __G_FILE_INPUT_STREAM_H__
+
+#include <gio/ginputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE_INPUT_STREAM         (g_file_input_stream_get_type ())
+#define G_FILE_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_INPUT_STREAM, GFileInputStream))
+#define G_FILE_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_INPUT_STREAM, GFileInputStreamClass))
+#define G_IS_FILE_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_INPUT_STREAM))
+#define G_IS_FILE_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_INPUT_STREAM))
+#define G_FILE_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_INPUT_STREAM, GFileInputStreamClass))
+
+/**
+ * GFileInputStream:
+ *
+ * A subclass of GInputStream for opened files. This adds
+ * a few file-specific operations and seeking.
+ *
+ * #GFileInputStream implements #GSeekable.
+ **/
+typedef struct _GFileInputStreamClass    GFileInputStreamClass;
+typedef struct _GFileInputStreamPrivate  GFileInputStreamPrivate;
+
+struct _GFileInputStream
+{
+  GInputStream parent_instance;
+
+  /*< private >*/
+  GFileInputStreamPrivate *priv;
+};
+
+struct _GFileInputStreamClass
+{
+  GInputStreamClass parent_class;
+
+  goffset     (* tell)              (GFileInputStream     *stream);
+  gboolean    (* can_seek)          (GFileInputStream     *stream);
+  gboolean    (* seek)	            (GFileInputStream     *stream,
+                                     goffset               offset,
+                                     GSeekType             type,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+  GFileInfo * (* query_info)        (GFileInputStream     *stream,
+                                     const char           *attributes,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+  void        (* query_info_async)  (GFileInputStream     *stream,
+                                     const char           *attributes,
+                                     int                   io_priority,
+                                     GCancellable         *cancellable,
+                                     GAsyncReadyCallback   callback,
+                                     gpointer              user_data);
+  GFileInfo * (* query_info_finish) (GFileInputStream     *stream,
+                                     GAsyncResult         *res,
+                                     GError              **error);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType      g_file_input_stream_get_type          (void) G_GNUC_CONST;
+
+GFileInfo *g_file_input_stream_query_info        (GFileInputStream     *stream,
+						  const char           *attributes,
+						  GCancellable         *cancellable,
+						  GError              **error);
+void       g_file_input_stream_query_info_async  (GFileInputStream     *stream,
+						  const char           *attributes,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              user_data);
+GFileInfo *g_file_input_stream_query_info_finish (GFileInputStream     *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+
+G_END_DECLS
+
+#endif /* __G_FILE_FILE_INPUT_STREAM_H__ */
diff --git a/gio/gfilemonitor.c b/gio/gfilemonitor.c
new file mode 100644
index 0000000..41444e3
--- /dev/null
+++ b/gio/gfilemonitor.c
@@ -0,0 +1,712 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "gfilemonitor.h"
+#include "gio-marshal.h"
+#include "gioenumtypes.h"
+#include "gfile.h"
+#include "gvfs.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+struct _FileChange;
+typedef struct _FileChange FileChange;
+static void file_change_free (FileChange *change);
+
+/**
+ * SECTION:gfilemonitor
+ * @short_description: File Monitor
+ * @include: gio/gio.h
+ *
+ * Monitors a file or directory for changes.
+ *
+ * To obtain a #GFileMonitor for a file or directory, use
+ * g_file_monitor(), g_file_monitor_file(), or
+ * g_file_monitor_directory().
+ *
+ * To get informed about changes to the file or directory you
+ * are monitoring, connect to the #GFileMonitor::changed signal.
+ **/
+
+G_LOCK_DEFINE_STATIC(cancelled);
+
+enum {
+  CHANGED,
+  LAST_SIGNAL
+};
+
+/* work around a limitation of the aliasing foo */
+#undef g_file_monitor
+
+G_DEFINE_ABSTRACT_TYPE (GFileMonitor, g_file_monitor, G_TYPE_OBJECT);
+
+typedef struct {
+  GFile *file;
+  guint32 last_sent_change_time; /* 0 == not sent */
+  guint32 send_delayed_change_at; /* 0 == never */
+  guint32 send_virtual_changes_done_at; /* 0 == never */
+} RateLimiter;
+
+struct _GFileMonitorPrivate {
+  gboolean cancelled;
+  int rate_limit_msec;
+
+  /* Rate limiting change events */
+  GHashTable *rate_limiter;
+
+  guint pending_file_change_id;
+  GSList *pending_file_changes; /* FileChange */
+
+  GSource *timeout;
+  guint32 timeout_fires_at;
+};
+
+enum {
+  PROP_0,
+  PROP_RATE_LIMIT,
+  PROP_CANCELLED
+};
+
+static void
+g_file_monitor_set_property (GObject      *object,
+                             guint         prop_id,
+                             const GValue *value,
+                             GParamSpec   *pspec)
+{
+  GFileMonitor *monitor;
+
+  monitor = G_FILE_MONITOR (object);
+
+  switch (prop_id)
+    {
+    case PROP_RATE_LIMIT:
+      g_file_monitor_set_rate_limit (monitor, g_value_get_int (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_file_monitor_get_property (GObject    *object,
+                             guint       prop_id,
+                             GValue     *value,
+                             GParamSpec *pspec)
+{
+  GFileMonitor *monitor;
+  GFileMonitorPrivate *priv;
+
+  monitor = G_FILE_MONITOR (object);
+  priv = monitor->priv;
+
+  switch (prop_id)
+    {
+    case PROP_RATE_LIMIT:
+      g_value_set_int (value, priv->rate_limit_msec);
+      break;
+
+    case PROP_CANCELLED:
+      G_LOCK (cancelled);
+      g_value_set_boolean (value, priv->cancelled);
+      G_UNLOCK (cancelled);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+#define DEFAULT_RATE_LIMIT_MSECS 800
+#define DEFAULT_VIRTUAL_CHANGES_DONE_DELAY_SECS 2
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void
+rate_limiter_free (RateLimiter *limiter)
+{
+  g_object_unref (limiter->file);
+  g_slice_free (RateLimiter, limiter);
+}
+
+static void
+g_file_monitor_finalize (GObject *object)
+{
+  GFileMonitor *monitor;
+
+  monitor = G_FILE_MONITOR (object);
+
+  if (monitor->priv->timeout)
+    {
+      g_source_destroy (monitor->priv->timeout);
+      g_source_unref (monitor->priv->timeout);
+    }
+
+  g_hash_table_destroy (monitor->priv->rate_limiter);
+
+  G_OBJECT_CLASS (g_file_monitor_parent_class)->finalize (object);
+}
+
+static void
+g_file_monitor_dispose (GObject *object)
+{
+  GFileMonitor *monitor;
+  GFileMonitorPrivate *priv;
+  
+  monitor = G_FILE_MONITOR (object);
+  priv = monitor->priv;
+
+  if (priv->pending_file_change_id)
+    {
+      g_source_remove (priv->pending_file_change_id);
+      priv->pending_file_change_id = 0;
+    }
+  g_slist_foreach (priv->pending_file_changes, (GFunc) file_change_free, NULL);
+  g_slist_free (priv->pending_file_changes);
+  priv->pending_file_changes = NULL;
+
+  /* Make sure we cancel on last unref */
+  g_file_monitor_cancel (monitor);
+
+  G_OBJECT_CLASS (g_file_monitor_parent_class)->dispose (object);
+}
+
+static void
+g_file_monitor_class_init (GFileMonitorClass *klass)
+{
+  GObjectClass *object_class;
+  
+  g_type_class_add_private (klass, sizeof (GFileMonitorPrivate));
+  
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->finalize = g_file_monitor_finalize;
+  object_class->dispose = g_file_monitor_dispose;
+  object_class->get_property = g_file_monitor_get_property;
+  object_class->set_property = g_file_monitor_set_property;
+
+  /**
+   * GFileMonitor::changed:
+   * @monitor: a #GFileMonitor.
+   * @file: a #GFile.
+   * @other_file: a #GFile.
+   * @event_type: a #GFileMonitorEvent.
+   * 
+   * Emitted when a file has been changed. 
+   **/
+  signals[CHANGED] =
+    g_signal_new (I_("changed"),
+		  G_TYPE_FILE_MONITOR,
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GFileMonitorClass, changed),
+		  NULL, NULL,
+		  _gio_marshal_VOID__OBJECT_OBJECT_ENUM,
+		  G_TYPE_NONE, 3,
+		  G_TYPE_FILE, G_TYPE_FILE, G_TYPE_FILE_MONITOR_EVENT);
+
+  g_object_class_install_property (object_class,
+                                   PROP_RATE_LIMIT,
+                                   g_param_spec_int ("rate-limit",
+                                                     P_("Rate limit"),
+                                                     P_("The limit of the monitor to watch for changes, in milliseconds"),
+                                                     0, G_MAXINT,
+                                                     DEFAULT_RATE_LIMIT_MSECS,
+                                                     G_PARAM_READWRITE|
+                                                     G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property (object_class,
+                                   PROP_CANCELLED,
+                                   g_param_spec_boolean ("cancelled",
+                                                         P_("Cancelled"),
+                                                         P_("Whether the monitor has been cancelled"),
+                                                         FALSE,
+                                                         G_PARAM_READABLE|
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_file_monitor_init (GFileMonitor *monitor)
+{
+  monitor->priv = G_TYPE_INSTANCE_GET_PRIVATE (monitor,
+					       G_TYPE_FILE_MONITOR,
+					       GFileMonitorPrivate);
+  monitor->priv->rate_limit_msec = DEFAULT_RATE_LIMIT_MSECS;
+  monitor->priv->rate_limiter = g_hash_table_new_full (g_file_hash, (GEqualFunc)g_file_equal,
+						       NULL, (GDestroyNotify) rate_limiter_free);
+}
+
+/**
+ * g_file_monitor_is_cancelled:
+ * @monitor: a #GFileMonitor
+ * 
+ * Returns whether the monitor is canceled.
+ *
+ * Returns: %TRUE if monitor is canceled. %FALSE otherwise.
+ **/
+gboolean
+g_file_monitor_is_cancelled (GFileMonitor *monitor)
+{
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_FILE_MONITOR (monitor), FALSE);
+
+  G_LOCK (cancelled);
+  res = monitor->priv->cancelled;
+  G_UNLOCK (cancelled);
+  
+  return res;
+}
+
+/**
+ * g_file_monitor_cancel:
+ * @monitor: a #GFileMonitor.
+ * 
+ * Cancels a file monitor.
+ * 
+ * Returns: %TRUE if monitor was cancelled.
+ **/
+gboolean
+g_file_monitor_cancel (GFileMonitor* monitor)
+{
+  GFileMonitorClass *klass;
+  
+  g_return_val_if_fail (G_IS_FILE_MONITOR (monitor), FALSE);
+  
+  G_LOCK (cancelled);
+  if (monitor->priv->cancelled)
+    {
+      G_UNLOCK (cancelled);
+      return TRUE;
+    }
+  
+  monitor->priv->cancelled = TRUE;
+  G_UNLOCK (cancelled);
+  
+  g_object_notify (G_OBJECT (monitor), "cancelled");
+
+  klass = G_FILE_MONITOR_GET_CLASS (monitor);
+  return (* klass->cancel) (monitor);
+}
+
+/**
+ * g_file_monitor_set_rate_limit:
+ * @monitor: a #GFileMonitor.
+ * @limit_msecs: a integer with the limit in milliseconds to 
+ * poll for changes.
+ *
+ * Sets the rate limit to which the @monitor will report
+ * consecutive change events to the same file. 
+ * 
+ **/
+void
+g_file_monitor_set_rate_limit (GFileMonitor *monitor,
+			       int           limit_msecs)
+{
+  GFileMonitorPrivate *priv;
+  
+  g_return_if_fail (G_IS_FILE_MONITOR (monitor));
+  
+  priv = monitor->priv;
+  if (priv->rate_limit_msec != limit_msecs)
+    {
+      monitor->priv->rate_limit_msec = limit_msecs;
+      g_object_notify (G_OBJECT (monitor), "rate-limit");
+    }
+}
+
+struct _FileChange {
+  GFile             *child;
+  GFile             *other_file;
+  GFileMonitorEvent  event_type;
+};
+
+static void
+file_change_free (FileChange *change)
+{
+  g_object_unref (change->child);
+  if (change->other_file)
+    g_object_unref (change->other_file);
+  
+  g_slice_free (FileChange, change);
+}
+
+static gboolean
+emit_cb (gpointer data)
+{
+  GFileMonitor *monitor = G_FILE_MONITOR (data);
+  GSList *pending, *iter;
+  
+  pending = g_slist_reverse (monitor->priv->pending_file_changes);
+  monitor->priv->pending_file_changes = NULL;
+  monitor->priv->pending_file_change_id = 0;
+
+  g_object_ref (monitor);
+  for (iter = pending; iter; iter = iter->next)
+    {
+       FileChange *change = iter->data;
+       g_signal_emit (monitor, signals[CHANGED], 0,
+	  	      change->child, change->other_file, change->event_type);
+       file_change_free (change);
+    }
+  g_slist_free (pending);
+  g_object_unref (monitor);
+
+  return FALSE;
+}
+
+static void
+emit_in_idle (GFileMonitor      *monitor,
+	      GFile             *child,
+	      GFile             *other_file,
+	      GFileMonitorEvent  event_type)
+{
+  GSource *source;
+  FileChange *change;
+  GFileMonitorPrivate *priv;
+
+  priv = monitor->priv;
+
+  change = g_slice_new (FileChange);
+
+  change->child = g_object_ref (child);
+  if (other_file)
+    change->other_file = g_object_ref (other_file);
+  else
+    change->other_file = NULL;
+  change->event_type = event_type;
+
+  if (!priv->pending_file_change_id)
+    {
+      source = g_idle_source_new ();
+      g_source_set_priority (source, 0);
+
+      /* We don't ref here - instead dispose will free any
+       * pending idles.
+       */
+      g_source_set_callback (source, emit_cb, monitor, NULL);
+      priv->pending_file_change_id = g_source_attach (source, NULL);
+      g_source_unref (source);
+    }
+  /* We reverse this in the processor */
+  priv->pending_file_changes = g_slist_prepend (priv->pending_file_changes, change);
+}
+
+static guint32
+get_time_msecs (void)
+{
+  return g_thread_gettime() / (1000 * 1000);
+}
+
+static guint32
+time_difference (guint32 from, guint32 to)
+{
+  if (from > to)
+    return 0;
+  return to - from;
+}
+
+/* Change event rate limiting support: */
+
+static RateLimiter *
+new_limiter (GFileMonitor *monitor,
+	     GFile             *file)
+{
+  RateLimiter *limiter;
+
+  limiter = g_slice_new0 (RateLimiter);
+  limiter->file = g_object_ref (file);
+  g_hash_table_insert (monitor->priv->rate_limiter, file, limiter);
+  
+  return limiter;
+}
+
+static void
+rate_limiter_send_virtual_changes_done_now (GFileMonitor *monitor, 
+                                            RateLimiter  *limiter)
+{
+  if (limiter->send_virtual_changes_done_at != 0)
+    {
+      emit_in_idle (monitor, limiter->file, NULL,
+		    G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT);
+      limiter->send_virtual_changes_done_at = 0;
+    }
+}
+
+static void
+rate_limiter_send_delayed_change_now (GFileMonitor *monitor, 
+                                      RateLimiter *limiter, 
+                                      guint32 time_now)
+{
+  if (limiter->send_delayed_change_at != 0)
+    {
+      emit_in_idle (monitor, 
+		    limiter->file, NULL,
+		    G_FILE_MONITOR_EVENT_CHANGED);
+      limiter->send_delayed_change_at = 0;
+      limiter->last_sent_change_time = time_now;
+    }
+}
+
+typedef struct {
+  guint32 min_time;
+  guint32 time_now;
+  GFileMonitor *monitor;
+} ForEachData;
+
+static gboolean
+calc_min_time (GFileMonitor *monitor, 
+               RateLimiter *limiter, 
+               guint32 time_now, 
+               guint32 *min_time)
+{
+  gboolean delete_me;
+  guint32 expire_at;
+
+  delete_me = TRUE;
+
+  if (limiter->last_sent_change_time != 0)
+    {
+      /* Set a timeout at 2*rate limit so that we can clear out the change from the hash eventualy */
+      expire_at = limiter->last_sent_change_time + 2 * monitor->priv->rate_limit_msec;
+
+      if (time_difference (time_now, expire_at) > 0)
+	{
+	  delete_me = FALSE;
+	  *min_time = MIN (*min_time,
+			   time_difference (time_now, expire_at));
+	}
+    }
+
+  if (limiter->send_delayed_change_at != 0)
+    {
+      delete_me = FALSE;
+      *min_time = MIN (*min_time,
+		       time_difference (time_now, limiter->send_delayed_change_at));
+    }
+
+  if (limiter->send_virtual_changes_done_at != 0)
+    {
+      delete_me = FALSE;
+      *min_time = MIN (*min_time,
+		       time_difference (time_now, limiter->send_virtual_changes_done_at));
+    }
+
+  return delete_me;
+}
+
+static gboolean
+foreach_rate_limiter_fire (gpointer key,
+			   gpointer value,
+			   gpointer user_data)
+{
+  RateLimiter *limiter = value;
+  ForEachData *data = user_data;
+
+  if (limiter->send_delayed_change_at != 0 &&
+      time_difference (data->time_now, limiter->send_delayed_change_at) == 0)
+    rate_limiter_send_delayed_change_now (data->monitor, limiter, data->time_now);
+  
+  if (limiter->send_virtual_changes_done_at != 0 &&
+      time_difference (data->time_now, limiter->send_virtual_changes_done_at) == 0)
+    rate_limiter_send_virtual_changes_done_now (data->monitor, limiter);
+  
+  return calc_min_time (data->monitor, limiter, data->time_now, &data->min_time);
+}
+
+static gboolean 
+rate_limiter_timeout (gpointer timeout_data)
+{
+  GFileMonitor *monitor = timeout_data;
+  ForEachData data;
+  GSource *source;
+  
+  data.min_time = G_MAXUINT32;
+  data.monitor = monitor;
+  data.time_now = get_time_msecs ();
+  g_hash_table_foreach_remove (monitor->priv->rate_limiter,
+			       foreach_rate_limiter_fire,
+			       &data);
+  
+  /* Remove old timeout */
+  if (monitor->priv->timeout)
+    {
+      g_source_destroy (monitor->priv->timeout);
+      g_source_unref (monitor->priv->timeout);
+      monitor->priv->timeout = NULL;
+      monitor->priv->timeout_fires_at = 0;
+    }
+  
+  /* Set up new timeout */
+  if (data.min_time != G_MAXUINT32)
+    {
+      source = g_timeout_source_new (data.min_time + 1); /* + 1 to make sure we've really passed the time */
+      g_source_set_callback (source, rate_limiter_timeout, monitor, NULL);
+      g_source_attach (source, NULL);
+      
+      monitor->priv->timeout = source;
+      monitor->priv->timeout_fires_at = data.time_now + data.min_time; 
+    }
+  
+  return FALSE;
+}
+
+static gboolean
+foreach_rate_limiter_update (gpointer key,
+			     gpointer value,
+			     gpointer user_data)
+{
+  RateLimiter *limiter = value;
+  ForEachData *data = user_data;
+
+  return calc_min_time (data->monitor, limiter, data->time_now, &data->min_time);
+}
+
+static void
+update_rate_limiter_timeout (GFileMonitor *monitor, 
+                             guint new_time)
+{
+  ForEachData data;
+  GSource *source;
+  
+  if (monitor->priv->timeout_fires_at != 0 && new_time != 0 &&
+      time_difference (new_time, monitor->priv->timeout_fires_at) == 0)
+    return; /* Nothing to do, we already fire earlier than that */
+
+  data.min_time = G_MAXUINT32;
+  data.monitor = monitor;
+  data.time_now = get_time_msecs ();
+  g_hash_table_foreach_remove (monitor->priv->rate_limiter,
+			       foreach_rate_limiter_update,
+			       &data);
+
+  /* Remove old timeout */
+  if (monitor->priv->timeout)
+    {
+      g_source_destroy (monitor->priv->timeout);
+      g_source_unref (monitor->priv->timeout);
+      monitor->priv->timeout_fires_at = 0;
+      monitor->priv->timeout = NULL;
+    }
+
+  /* Set up new timeout */
+  if (data.min_time != G_MAXUINT32)
+    {
+      source = g_timeout_source_new (data.min_time + 1);  /* + 1 to make sure we've really passed the time */
+      g_source_set_callback (source, rate_limiter_timeout, monitor, NULL);
+      g_source_attach (source, NULL);
+      
+      monitor->priv->timeout = source;
+      monitor->priv->timeout_fires_at = data.time_now + data.min_time; 
+    }
+}
+
+/**
+ * g_file_monitor_emit_event:
+ * @monitor: a #GFileMonitor.
+ * @child: a #GFile.
+ * @other_file: a #GFile.
+ * @event_type: a set of #GFileMonitorEvent flags.
+ * 
+ * Emits the #GFileMonitor::changed signal if a change
+ * has taken place. Should be called from file monitor 
+ * implementations only.
+ *
+ * The signal will be emitted from an idle handler.
+ **/
+void
+g_file_monitor_emit_event (GFileMonitor      *monitor,
+			   GFile             *child,
+			   GFile             *other_file,
+			   GFileMonitorEvent  event_type)
+{
+  guint32 time_now, since_last;
+  gboolean emit_now;
+  RateLimiter *limiter;
+
+  g_return_if_fail (G_IS_FILE_MONITOR (monitor));
+  g_return_if_fail (G_IS_FILE (child));
+
+  limiter = g_hash_table_lookup (monitor->priv->rate_limiter, child);
+
+  if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
+    {
+      if (limiter)
+	{
+	  rate_limiter_send_delayed_change_now (monitor, limiter, get_time_msecs ());
+	  if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
+	    limiter->send_virtual_changes_done_at = 0;
+	  else
+	    rate_limiter_send_virtual_changes_done_now (monitor, limiter);
+	  update_rate_limiter_timeout (monitor, 0);
+	}
+      emit_in_idle (monitor, child, other_file, event_type);
+    }
+  else
+    {
+      /* Changed event, rate limit */
+      time_now = get_time_msecs ();
+      emit_now = TRUE;
+      
+      if (limiter)
+	{
+	  since_last = time_difference (limiter->last_sent_change_time, time_now);
+	  if (since_last < monitor->priv->rate_limit_msec)
+	    {
+	      /* We ignore this change, but arm a timer so that we can fire it later if we
+		 don't get any other events (that kill this timeout) */
+	      emit_now = FALSE;
+	      if (limiter->send_delayed_change_at == 0)
+		{
+		  limiter->send_delayed_change_at = time_now + monitor->priv->rate_limit_msec;
+		  update_rate_limiter_timeout (monitor, limiter->send_delayed_change_at);
+		}
+	    }
+	}
+      
+      if (limiter == NULL)
+	limiter = new_limiter (monitor, child);
+      
+      if (emit_now)
+	{
+	  emit_in_idle (monitor, child, other_file, event_type);
+	  
+	  limiter->last_sent_change_time = time_now;
+	  limiter->send_delayed_change_at = 0;
+	  /* Set a timeout of 2*rate limit so that we can clear out the change from the hash eventualy */
+	  update_rate_limiter_timeout (monitor, time_now + 2 * monitor->priv->rate_limit_msec);
+	}
+      
+      /* Schedule a virtual change done. This is removed if we get a real one, and
+	 postponed if we get more change events. */
+      
+      limiter->send_virtual_changes_done_at = time_now + DEFAULT_VIRTUAL_CHANGES_DONE_DELAY_SECS * 1000;
+      update_rate_limiter_timeout (monitor, limiter->send_virtual_changes_done_at);
+    }
+}
+
+#define __G_FILE_MONITOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfilemonitor.h b/gio/gfilemonitor.h
new file mode 100644
index 0000000..cf6f6be
--- /dev/null
+++ b/gio/gfilemonitor.h
@@ -0,0 +1,95 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_MONITOR_H__
+#define __G_FILE_MONITOR_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE_MONITOR         (g_file_monitor_get_type ())
+#define G_FILE_MONITOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_MONITOR, GFileMonitor))
+#define G_FILE_MONITOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_MONITOR, GFileMonitorClass))
+#define G_IS_FILE_MONITOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_MONITOR))
+#define G_IS_FILE_MONITOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_MONITOR))
+#define G_FILE_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_MONITOR, GFileMonitorClass))
+
+typedef struct _GFileMonitorClass       GFileMonitorClass;
+typedef struct _GFileMonitorPrivate	GFileMonitorPrivate;
+
+/**
+ * GFileMonitor:
+ *
+ * Watches for changes to a file.
+ **/
+struct _GFileMonitor
+{
+  GObject parent_instance;
+
+  /*< private >*/
+  GFileMonitorPrivate *priv;
+};
+
+struct _GFileMonitorClass
+{
+  GObjectClass parent_class;
+
+  /* Signals */
+  void     (* changed) (GFileMonitor      *monitor,
+                        GFile             *file,
+                        GFile             *other_file,
+                        GFileMonitorEvent  event_type);
+
+  /* Virtual Table */
+  gboolean (* cancel)  (GFileMonitor      *monitor);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType    g_file_monitor_get_type       (void) G_GNUC_CONST;
+
+gboolean g_file_monitor_cancel         (GFileMonitor      *monitor);
+gboolean g_file_monitor_is_cancelled   (GFileMonitor      *monitor);
+void     g_file_monitor_set_rate_limit (GFileMonitor      *monitor,
+                                        int                limit_msecs);
+
+
+/* For implementations */
+void     g_file_monitor_emit_event     (GFileMonitor      *monitor,
+                                        GFile             *child,
+                                        GFile             *other_file,
+                                        GFileMonitorEvent  event_type);
+
+G_END_DECLS
+
+#endif /* __G_FILE_MONITOR_H__ */
diff --git a/gio/gfilenamecompleter.c b/gio/gfilenamecompleter.c
new file mode 100644
index 0000000..459e302
--- /dev/null
+++ b/gio/gfilenamecompleter.c
@@ -0,0 +1,518 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gfilenamecompleter.h"
+#include "gfileenumerator.h"
+#include "gfileattribute.h"
+#include "gfile.h"
+#include "gfileinfo.h"
+#include "gcancellable.h"
+#include <string.h>
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfilenamecompleter
+ * @short_description: Filename Completer
+ * @include: gio/gio.h
+ * 
+ * Completes partial file and directory names given a partial string by
+ * looking in the file system for clues. Can return a list of possible 
+ * completion strings for widget implementations.
+ * 
+ **/
+
+enum {
+  GOT_COMPLETION_DATA,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+typedef struct {
+  GFilenameCompleter *completer;
+  GFileEnumerator *enumerator;
+  GCancellable *cancellable;
+  gboolean should_escape;
+  GFile *dir;
+  GList *basenames;
+  gboolean dirs_only;
+} LoadBasenamesData;
+
+struct _GFilenameCompleter {
+  GObject parent;
+
+  GFile *basenames_dir;
+  gboolean basenames_are_escaped;
+  GList *basenames;
+  gboolean dirs_only;
+
+  LoadBasenamesData *basename_loader;
+};
+
+G_DEFINE_TYPE (GFilenameCompleter, g_filename_completer, G_TYPE_OBJECT);
+
+static void cancel_load_basenames (GFilenameCompleter *completer);
+
+static void
+g_filename_completer_finalize (GObject *object)
+{
+  GFilenameCompleter *completer;
+
+  completer = G_FILENAME_COMPLETER (object);
+
+  cancel_load_basenames (completer);
+
+  if (completer->basenames_dir)
+    g_object_unref (completer->basenames_dir);
+
+  g_list_foreach (completer->basenames, (GFunc)g_free, NULL);
+  g_list_free (completer->basenames);
+
+  G_OBJECT_CLASS (g_filename_completer_parent_class)->finalize (object);
+}
+
+static void
+g_filename_completer_class_init (GFilenameCompleterClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_filename_completer_finalize;
+  /**
+   * GFilenameCompleter::got-completion-data:
+   * 
+   * Emitted when the file name completion information comes available.
+   **/
+  signals[GOT_COMPLETION_DATA] = g_signal_new (I_("got-completion-data"),
+					  G_TYPE_FILENAME_COMPLETER,
+					  G_SIGNAL_RUN_LAST,
+					  G_STRUCT_OFFSET (GFilenameCompleterClass, got_completion_data),
+					  NULL, NULL,
+					  g_cclosure_marshal_VOID__VOID,
+					  G_TYPE_NONE, 0);
+}
+
+static void
+g_filename_completer_init (GFilenameCompleter *completer)
+{
+}
+
+/**
+ * g_filename_completer_new:
+ * 
+ * Creates a new filename completer.
+ * 
+ * Returns: a #GFilenameCompleter.
+ **/
+GFilenameCompleter *
+g_filename_completer_new (void)
+{
+  return g_object_new (G_TYPE_FILENAME_COMPLETER, NULL);
+}
+
+static char *
+longest_common_prefix (char *a, char *b)
+{
+  char *start;
+
+  start = a;
+
+  while (g_utf8_get_char (a) == g_utf8_get_char (b))
+    {
+      a = g_utf8_next_char (a);
+      b = g_utf8_next_char (b);
+    }
+
+  return g_strndup (start, a - start);
+}
+
+static void
+load_basenames_data_free (LoadBasenamesData *data)
+{
+  if (data->enumerator)
+    g_object_unref (data->enumerator);
+  
+  g_object_unref (data->cancellable);
+  g_object_unref (data->dir);
+  
+  g_list_foreach (data->basenames, (GFunc)g_free, NULL);
+  g_list_free (data->basenames);
+  
+  g_free (data);
+}
+
+static void
+got_more_files (GObject *source_object,
+		GAsyncResult *res,
+		gpointer user_data)
+{
+  LoadBasenamesData *data = user_data;
+  GList *infos, *l;
+  GFileInfo *info;
+  const char *name;
+  gboolean append_slash;
+  char *t;
+  char *basename;
+
+  if (data->completer == NULL)
+    {
+      /* Was cancelled */
+      load_basenames_data_free (data);
+      return;
+    }
+
+  infos = g_file_enumerator_next_files_finish (data->enumerator, res, NULL);
+
+  for (l = infos; l != NULL; l = l->next)
+    {
+      info = l->data;
+
+      if (data->dirs_only &&
+	  g_file_info_get_file_type (info) != G_FILE_TYPE_DIRECTORY)
+	{
+	  g_object_unref (info);
+	  continue;
+	}
+      
+      append_slash = g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY;
+      name = g_file_info_get_name (info);
+      if (name == NULL)
+	{
+	  g_object_unref (info);
+	  continue;
+	}
+
+      
+      if (data->should_escape)
+	basename = g_uri_escape_string (name,
+					G_URI_RESERVED_CHARS_ALLOWED_IN_PATH,
+					TRUE);
+      else
+	/* If not should_escape, must be a local filename, convert to utf8 */
+	basename = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
+      
+      if (basename)
+	{
+	  if (append_slash)
+	    {
+	      t = basename;
+	      basename = g_strconcat (basename, "/", NULL);
+	      g_free (t);
+	    }
+	  
+	  data->basenames = g_list_prepend (data->basenames, basename);
+	}
+      
+      g_object_unref (info);
+    }
+  
+  g_list_free (infos);
+  
+  if (infos)
+    {
+      /* Not last, get more files */
+      g_file_enumerator_next_files_async (data->enumerator,
+					  100,
+					  0,
+					  data->cancellable,
+					  got_more_files, data);
+    }
+  else
+    {
+      data->completer->basename_loader = NULL;
+      
+      if (data->completer->basenames_dir)
+	g_object_unref (data->completer->basenames_dir);
+      g_list_foreach (data->completer->basenames, (GFunc)g_free, NULL);
+      g_list_free (data->completer->basenames);
+      
+      data->completer->basenames_dir = g_object_ref (data->dir);
+      data->completer->basenames = data->basenames;
+      data->completer->basenames_are_escaped = data->should_escape;
+      data->basenames = NULL;
+      
+      g_file_enumerator_close_async (data->enumerator, 0, NULL, NULL, NULL);
+
+      g_signal_emit (data->completer, signals[GOT_COMPLETION_DATA], 0);
+      load_basenames_data_free (data);
+    }
+}
+
+
+static void
+got_enum (GObject *source_object,
+	  GAsyncResult *res,
+	  gpointer user_data)
+{
+  LoadBasenamesData *data = user_data;
+
+  if (data->completer == NULL)
+    {
+      /* Was cancelled */
+      load_basenames_data_free (data);
+      return;
+    }
+  
+  data->enumerator = g_file_enumerate_children_finish (G_FILE (source_object), res, NULL);
+  
+  if (data->enumerator == NULL)
+    {
+      data->completer->basename_loader = NULL;
+
+      if (data->completer->basenames_dir)
+	g_object_unref (data->completer->basenames_dir);
+      g_list_foreach (data->completer->basenames, (GFunc)g_free, NULL);
+      g_list_free (data->completer->basenames);
+
+      /* Mark uptodate with no basenames */
+      data->completer->basenames_dir = g_object_ref (data->dir);
+      data->completer->basenames = NULL;
+      data->completer->basenames_are_escaped = data->should_escape;
+      
+      load_basenames_data_free (data);
+      return;
+    }
+  
+  g_file_enumerator_next_files_async (data->enumerator,
+				      100,
+				      0,
+				      data->cancellable,
+				      got_more_files, data);
+}
+
+static void
+schedule_load_basenames (GFilenameCompleter *completer,
+			 GFile *dir,
+			 gboolean should_escape)
+{
+  LoadBasenamesData *data;
+
+  cancel_load_basenames (completer);
+
+  data = g_new0 (LoadBasenamesData, 1);
+  data->completer = completer;
+  data->cancellable = g_cancellable_new ();
+  data->dir = g_object_ref (dir);
+  data->should_escape = should_escape;
+  data->dirs_only = completer->dirs_only;
+
+  completer->basename_loader = data;
+  
+  g_file_enumerate_children_async (dir,
+				   G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE,
+				   0, 0,
+				   data->cancellable,
+				   got_enum, data);
+}
+
+static void
+cancel_load_basenames (GFilenameCompleter *completer)
+{
+  LoadBasenamesData *loader;
+  
+  if (completer->basename_loader)
+    {
+      loader = completer->basename_loader; 
+      loader->completer = NULL;
+      
+      g_cancellable_cancel (loader->cancellable);
+      
+      completer->basename_loader = NULL;
+    }
+}
+
+
+/* Returns a list of possible matches and the basename to use for it */
+static GList *
+init_completion (GFilenameCompleter *completer,
+		 const char *initial_text,
+		 char **basename_out)
+{
+  gboolean should_escape;
+  GFile *file, *parent;
+  char *basename;
+  char *t;
+  int len;
+
+  *basename_out = NULL;
+  
+  should_escape = ! (g_path_is_absolute (initial_text) || *initial_text == '~');
+
+  len = strlen (initial_text);
+  
+  if (len > 0 &&
+      initial_text[len - 1] == '/')
+    return NULL;
+  
+  file = g_file_parse_name (initial_text);
+  parent = g_file_get_parent (file);
+  if (parent == NULL)
+    {
+      g_object_unref (file);
+      return NULL;
+    }
+
+  if (completer->basenames_dir == NULL ||
+      completer->basenames_are_escaped != should_escape ||
+      !g_file_equal (parent, completer->basenames_dir))
+    {
+      schedule_load_basenames (completer, parent, should_escape);
+      g_object_unref (file);
+      return NULL;
+    }
+  
+  basename = g_file_get_basename (file);
+  if (should_escape)
+    {
+      t = basename;
+      basename = g_uri_escape_string (basename, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, TRUE);
+      g_free (t);
+    }
+  else
+    {
+      t = basename;
+      basename = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL);
+      g_free (t);
+      
+      if (basename == NULL)
+	return NULL;
+    }
+
+  *basename_out = basename;
+
+  return completer->basenames;
+}
+
+/**
+ * g_filename_completer_get_completion_suffix:
+ * @completer: the filename completer.
+ * @initial_text: text to be completed.
+ *
+ * Obtains a completion for @initial_text from @completer.
+ *  
+ * Returns: a completed string, or %NULL if no completion exists. 
+ *     This string is not owned by GIO, so remember to g_free() it 
+ *     when finished.
+ **/
+char *
+g_filename_completer_get_completion_suffix (GFilenameCompleter *completer,
+					    const char *initial_text)
+{
+  GList *possible_matches, *l;
+  char *prefix;
+  char *suffix;
+  char *possible_match;
+  char *lcp;
+
+  g_return_val_if_fail (G_IS_FILENAME_COMPLETER (completer), NULL);
+  g_return_val_if_fail (initial_text != NULL, NULL);
+
+  possible_matches = init_completion (completer, initial_text, &prefix);
+
+  suffix = NULL;
+  
+  for (l = possible_matches; l != NULL; l = l->next)
+    {
+      possible_match = l->data;
+      
+      if (g_str_has_prefix (possible_match, prefix))
+	{
+	  if (suffix == NULL)
+	    suffix = g_strdup (possible_match + strlen (prefix));
+	  else
+	    {
+	      lcp = longest_common_prefix (suffix,
+					   possible_match + strlen (prefix));
+	      g_free (suffix);
+	      suffix = lcp;
+	      
+	      if (*suffix == 0)
+		break;
+	    }
+	}
+    }
+
+  g_free (prefix);
+  
+  return suffix;
+}
+
+/**
+ * g_filename_completer_get_completions:
+ * @completer: the filename completer.
+ * @initial_text: text to be completed.
+ * 
+ * Gets an array of completion strings for a given initial text.
+ * 
+ * Returns: array of strings with possible completions for @initial_text.
+ * This array must be freed by g_strfreev() when finished. 
+ **/
+char **
+g_filename_completer_get_completions (GFilenameCompleter *completer,
+				      const char *initial_text)
+{
+  GList *possible_matches, *l;
+  char *prefix;
+  char *possible_match;
+  GPtrArray *res;
+
+  g_return_val_if_fail (G_IS_FILENAME_COMPLETER (completer), NULL);
+  g_return_val_if_fail (initial_text != NULL, NULL);
+
+  possible_matches = init_completion (completer, initial_text, &prefix);
+
+  res = g_ptr_array_new ();
+  for (l = possible_matches; l != NULL; l = l->next)
+    {
+      possible_match = l->data;
+      
+      if (g_str_has_prefix (possible_match, prefix))
+	g_ptr_array_add (res,
+			 g_strconcat (initial_text, possible_match + strlen (prefix), NULL));
+    }
+
+  g_free (prefix);
+  
+  return (char**)g_ptr_array_free (res, FALSE);
+}
+
+/**
+ * g_filename_completer_set_dirs_only:
+ * @completer: the filename completer.
+ * @dirs_only: a #gboolean.
+ * 
+ * If @dirs_only is %TRUE, @completer will only 
+ * complete directory names, and not file names.
+ **/
+void
+g_filename_completer_set_dirs_only (GFilenameCompleter *completer,
+				    gboolean dirs_only)
+{
+  g_return_if_fail (G_IS_FILENAME_COMPLETER (completer));
+
+  completer->dirs_only = dirs_only;
+}
+
+#define __G_FILENAME_COMPLETER_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfilenamecompleter.h b/gio/gfilenamecompleter.h
new file mode 100644
index 0000000..1899c27
--- /dev/null
+++ b/gio/gfilenamecompleter.h
@@ -0,0 +1,76 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILENAME_COMPLETER_H__
+#define __G_FILENAME_COMPLETER_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILENAME_COMPLETER         (g_filename_completer_get_type ())
+#define G_FILENAME_COMPLETER(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILENAME_COMPLETER, GFilenameCompleter))
+#define G_FILENAME_COMPLETER_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILENAME_COMPLETER, GFilenameCompleterClass))
+#define G_FILENAME_COMPLETER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILENAME_COMPLETER, GFilenameCompleterClass))
+#define G_IS_FILENAME_COMPLETER(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILENAME_COMPLETER))
+#define G_IS_FILENAME_COMPLETER_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILENAME_COMPLETER))
+
+/**
+ * GFilenameCompleter:
+ *
+ * Completes filenames based on files that exist within the file system.
+ **/
+typedef struct _GFilenameCompleterClass GFilenameCompleterClass;
+
+struct _GFilenameCompleterClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+  /* signals */
+  void (* got_completion_data) (GFilenameCompleter *filename_completer);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+};
+
+GType               g_filename_completer_get_type              (void) G_GNUC_CONST;
+
+GFilenameCompleter *g_filename_completer_new                   (void);
+
+char *              g_filename_completer_get_completion_suffix (GFilenameCompleter *completer,
+                                                                const char *initial_text);
+char **             g_filename_completer_get_completions       (GFilenameCompleter *completer,
+                                                                const char *initial_text);
+void                g_filename_completer_set_dirs_only         (GFilenameCompleter *completer,
+                                                                gboolean dirs_only);
+
+G_END_DECLS
+
+#endif /* __G_FILENAME_COMPLETER_H__ */
diff --git a/gio/gfileoutputstream.c b/gio/gfileoutputstream.c
new file mode 100644
index 0000000..494734c
--- /dev/null
+++ b/gio/gfileoutputstream.c
@@ -0,0 +1,576 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <gfileoutputstream.h>
+#include <gseekable.h>
+#include "gsimpleasyncresult.h"
+#include "gasyncresult.h"
+#include "gcancellable.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfileoutputstream
+ * @short_description: File output streaming operations
+ * @include: gio/gio.h
+ * @see_also: #GOutputStream, #GDataOutputStream, #GSeekable
+ * 
+ * GFileOutputStream provides output streams that write their
+ * content to a file.
+ *
+ * GFileOutputStream implements #GSeekable, which allows the output 
+ * stream to jump to arbitrary positions in the file and to truncate
+ * the file, provided the filesystem of the file supports these 
+ * operations. In addition to the generic g_seekable_ API, 
+ * GFileOutputStream has its own API for seeking and positioning. 
+ * To find the position of a file output stream, use 
+ * g_file_output_stream_tell(). To find out if a file output 
+ * stream supports seeking, use g_file_output_stream_can_seek().
+ * To position a file output stream, use g_file_output_stream_seek().
+ * To find out if a file output stream supports truncating, use
+ * g_file_output_stream_can_truncate(). To truncate a file output
+ * stream, use g_file_output_stream_truncate().
+ **/
+
+static void       g_file_output_stream_seekable_iface_init    (GSeekableIface       *iface);
+static goffset    g_file_output_stream_seekable_tell          (GSeekable            *seekable);
+static gboolean   g_file_output_stream_seekable_can_seek      (GSeekable            *seekable);
+static gboolean   g_file_output_stream_seekable_seek          (GSeekable            *seekable,
+							       goffset               offset,
+							       GSeekType             type,
+							       GCancellable         *cancellable,
+							       GError              **error);
+static gboolean   g_file_output_stream_seekable_can_truncate  (GSeekable            *seekable);
+static gboolean   g_file_output_stream_seekable_truncate      (GSeekable            *seekable,
+							       goffset               offset,
+							       GCancellable         *cancellable,
+							       GError              **error);
+static void       g_file_output_stream_real_query_info_async  (GFileOutputStream    *stream,
+							       const char           *attributes,
+							       int                   io_priority,
+							       GCancellable         *cancellable,
+							       GAsyncReadyCallback   callback,
+							       gpointer              user_data);
+static GFileInfo *g_file_output_stream_real_query_info_finish (GFileOutputStream    *stream,
+							       GAsyncResult         *result,
+							       GError              **error);
+
+G_DEFINE_TYPE_WITH_CODE (GFileOutputStream, g_file_output_stream, G_TYPE_OUTPUT_STREAM,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE,
+						g_file_output_stream_seekable_iface_init));
+
+struct _GFileOutputStreamPrivate {
+  GAsyncReadyCallback outstanding_callback;
+};
+
+static void
+g_file_output_stream_class_init (GFileOutputStreamClass *klass)
+{
+  g_type_class_add_private (klass, sizeof (GFileOutputStreamPrivate));
+
+  klass->query_info_async = g_file_output_stream_real_query_info_async;
+  klass->query_info_finish = g_file_output_stream_real_query_info_finish;
+}
+
+static void
+g_file_output_stream_seekable_iface_init (GSeekableIface *iface)
+{
+  iface->tell = g_file_output_stream_seekable_tell;
+  iface->can_seek = g_file_output_stream_seekable_can_seek;
+  iface->seek = g_file_output_stream_seekable_seek;
+  iface->can_truncate = g_file_output_stream_seekable_can_truncate;
+  iface->truncate_fn = g_file_output_stream_seekable_truncate;
+}
+
+static void
+g_file_output_stream_init (GFileOutputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+					      G_TYPE_FILE_OUTPUT_STREAM,
+					      GFileOutputStreamPrivate);
+}
+
+/**
+ * g_file_output_stream_query_info:
+ * @stream: a #GFileOutputStream.
+ * @attributes: a file attribute query string.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError, %NULL to ignore.
+ *
+ * Queries a file output stream for the given @attributes. 
+ * This function blocks while querying the stream. For the asynchronous 
+ * version of this function, see g_file_output_stream_query_info_async(). 
+ * While the stream is blocked, the stream will set the pending flag 
+ * internally, and any other operations on the stream will fail with 
+ * %G_IO_ERROR_PENDING.
+ * 
+ * Can fail if the stream was already closed (with @error being set to 
+ * %G_IO_ERROR_CLOSED), the stream has pending operations (with @error being
+ * set to %G_IO_ERROR_PENDING), or if querying info is not supported for 
+ * the stream's interface (with @error being set to %G_IO_ERROR_NOT_SUPPORTED). In
+ * all cases of failure, %NULL will be returned.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be set, and %NULL will 
+ * be returned. 
+ * 
+ * Returns: a #GFileInfo for the @stream, or %NULL on error.
+ **/
+GFileInfo *
+g_file_output_stream_query_info (GFileOutputStream      *stream,
+				    const char             *attributes,
+				    GCancellable           *cancellable,
+				    GError                **error)
+{
+  GFileOutputStreamClass *class;
+  GOutputStream *output_stream;
+  GFileInfo *info;
+  
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), NULL);
+  
+  output_stream = G_OUTPUT_STREAM (stream);
+  
+  if (!g_output_stream_set_pending (output_stream, error))
+    return NULL;
+      
+  info = NULL;
+  
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+  if (class->query_info)
+    info = class->query_info (stream, attributes, cancellable, error);
+  else
+    g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                         _("Stream doesn't support query_info"));
+  
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_output_stream_clear_pending (output_stream);
+  
+  return info;
+}
+
+static void
+async_ready_callback_wrapper (GObject *source_object,
+			      GAsyncResult *res,
+			      gpointer      user_data)
+{
+  GFileOutputStream *stream = G_FILE_OUTPUT_STREAM (source_object);
+
+  g_output_stream_clear_pending (G_OUTPUT_STREAM (stream));
+  if (stream->priv->outstanding_callback)
+    (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+/**
+ * g_file_output_stream_query_info_async:
+ * @stream: a #GFileOutputStream.
+ * @attributes: a file attribute query string.
+ * @io_priority: the <link linkend="gio-GIOScheduler">I/O priority</link> 
+ *     of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Asynchronously queries the @stream for a #GFileInfo. When completed,
+ * @callback will be called with a #GAsyncResult which can be used to 
+ * finish the operation with g_file_output_stream_query_info_finish().
+ * 
+ * For the synchronous version of this function, see 
+ * g_file_output_stream_query_info().
+ *
+ **/
+void
+g_file_output_stream_query_info_async (GFileOutputStream     *stream,
+					  const char           *attributes,
+					  int                   io_priority,
+					  GCancellable         *cancellable,
+					  GAsyncReadyCallback   callback,
+					  gpointer              user_data)
+{
+  GFileOutputStreamClass *klass;
+  GOutputStream *output_stream;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_FILE_OUTPUT_STREAM (stream));
+
+  output_stream = G_OUTPUT_STREAM (stream);
+ 
+  if (!g_output_stream_set_pending (output_stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+
+  klass = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  klass->query_info_async (stream, attributes, io_priority, cancellable,
+			      async_ready_callback_wrapper, user_data);
+}
+
+/**
+ * g_file_output_stream_query_info_finish:
+ * @stream: a #GFileOutputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError, %NULL to ignore.
+ * 
+ * Finalizes the asynchronous query started 
+ * by g_file_output_stream_query_info_async().
+ * 
+ * Returns: A #GFileInfo for the finished query.
+ **/
+GFileInfo *
+g_file_output_stream_query_info_finish (GFileOutputStream     *stream,
+					   GAsyncResult         *result,
+					   GError              **error)
+{
+  GSimpleAsyncResult *simple;
+  GFileOutputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
+  
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+  return class->query_info_finish (stream, result, error);
+}
+
+/**
+ * g_file_output_stream_get_etag:
+ * @stream: a #GFileOutputStream.
+ * 
+ * Gets the entity tag for the file when it has been written.
+ * This must be called after the stream has been written
+ * and closed, as the etag can change while writing.
+ * 
+ * Returns: the entity tag for the stream.
+ **/
+char *
+g_file_output_stream_get_etag (GFileOutputStream  *stream)
+{
+  GFileOutputStreamClass *class;
+  GOutputStream *output_stream;
+  char *etag;
+  
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), NULL);
+  
+  output_stream = G_OUTPUT_STREAM (stream);
+  
+  if (!g_output_stream_is_closed (output_stream))
+    {
+      g_warning ("stream is not closed yet, can't get etag");
+      return NULL;
+    }
+
+  etag = NULL;
+  
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+  if (class->get_etag)
+    etag = class->get_etag (stream);
+  
+  return etag;
+}
+
+static goffset
+g_file_output_stream_tell (GFileOutputStream  *stream)
+{
+  GFileOutputStreamClass *class;
+  goffset offset;
+  
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), 0);  
+
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+
+  offset = 0;
+  if (class->tell)
+    offset = class->tell (stream);
+
+  return offset;
+}
+
+static goffset
+g_file_output_stream_seekable_tell (GSeekable *seekable)
+{
+  return g_file_output_stream_tell (G_FILE_OUTPUT_STREAM (seekable));
+}
+
+static gboolean
+g_file_output_stream_can_seek (GFileOutputStream  *stream)
+{
+  GFileOutputStreamClass *class;
+  gboolean can_seek;
+
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), FALSE);
+
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+
+  can_seek = FALSE;
+  if (class->seek)
+    {
+      can_seek = TRUE;
+      if (class->can_seek)
+	can_seek = class->can_seek (stream);
+    }
+  
+  return can_seek;
+}
+
+static gboolean
+g_file_output_stream_seekable_can_seek (GSeekable *seekable)
+{
+  return g_file_output_stream_can_seek (G_FILE_OUTPUT_STREAM (seekable));
+}
+
+static gboolean
+g_file_output_stream_seek (GFileOutputStream  *stream,
+			   goffset             offset,
+			   GSeekType           type,
+			   GCancellable       *cancellable,
+			   GError            **error)
+{
+  GFileOutputStreamClass *class;
+  GOutputStream *output_stream;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), FALSE);
+
+  output_stream = G_OUTPUT_STREAM (stream);
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+
+  if (!class->seek)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Seek not supported on stream"));
+      return FALSE;
+    }
+
+  if (!g_output_stream_set_pending (output_stream, error))
+    return FALSE;
+  
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  res = class->seek (stream, offset, type, cancellable, error);
+  
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+
+  g_output_stream_clear_pending (output_stream);
+  
+  return res;
+}
+
+static gboolean
+g_file_output_stream_seekable_seek (GSeekable  *seekable,
+				    goffset     offset,
+				    GSeekType   type,
+				    GCancellable  *cancellable,
+				    GError    **error)
+{
+  return g_file_output_stream_seek (G_FILE_OUTPUT_STREAM (seekable),
+				    offset, type, cancellable, error);
+}
+
+static gboolean
+g_file_output_stream_can_truncate (GFileOutputStream  *stream)
+{
+  GFileOutputStreamClass *class;
+  gboolean can_truncate;
+
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), FALSE);
+
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+
+  can_truncate = FALSE;
+  if (class->truncate_fn)
+    {
+      can_truncate = TRUE;
+      if (class->can_truncate)
+	can_truncate = class->can_truncate (stream);
+    }
+  
+  return can_truncate;
+}
+
+static gboolean
+g_file_output_stream_seekable_can_truncate (GSeekable  *seekable)
+{
+  return g_file_output_stream_can_truncate (G_FILE_OUTPUT_STREAM (seekable));
+}
+
+static gboolean
+g_file_output_stream_truncate (GFileOutputStream  *stream,
+			       goffset             size,
+			       GCancellable       *cancellable,
+			       GError            **error)
+{
+  GFileOutputStreamClass *class;
+  GOutputStream *output_stream;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_FILE_OUTPUT_STREAM (stream), FALSE);
+
+  output_stream = G_OUTPUT_STREAM (stream);
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (stream);
+
+  if (!class->truncate_fn)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Truncate not supported on stream"));
+      return FALSE;
+    }
+
+  if (!g_output_stream_set_pending (output_stream, error))
+    return FALSE;
+  
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  res = class->truncate_fn (stream, size, cancellable, error);
+  
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+
+  g_output_stream_clear_pending (output_stream);
+  
+  return res;
+}
+
+static gboolean
+g_file_output_stream_seekable_truncate (GSeekable     *seekable,
+					goffset        size,
+					GCancellable  *cancellable,
+					GError       **error)
+{
+  return g_file_output_stream_truncate (G_FILE_OUTPUT_STREAM (seekable),
+					size, cancellable, error);
+}
+/********************************************
+ *   Default implementation of async ops    *
+ ********************************************/
+
+typedef struct {
+  char *attributes;
+  GFileInfo *info;
+} QueryInfoAsyncData;
+
+static void
+query_info_data_free (QueryInfoAsyncData *data)
+{
+  if (data->info)
+    g_object_unref (data->info);
+  g_free (data->attributes);
+  g_free (data);
+}
+
+static void
+query_info_async_thread (GSimpleAsyncResult *res,
+		       GObject *object,
+		       GCancellable *cancellable)
+{
+  GFileOutputStreamClass *class;
+  GError *error = NULL;
+  QueryInfoAsyncData *data;
+  GFileInfo *info;
+  
+  data = g_simple_async_result_get_op_res_gpointer (res);
+
+  info = NULL;
+  
+  class = G_FILE_OUTPUT_STREAM_GET_CLASS (object);
+  if (class->query_info)
+    info = class->query_info (G_FILE_OUTPUT_STREAM (object), data->attributes, cancellable, &error);
+  else
+    g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                         _("Stream doesn't support query_info"));
+
+  if (info == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    data->info = info;
+}
+
+static void
+g_file_output_stream_real_query_info_async (GFileOutputStream     *stream,
+					       const char           *attributes,
+					       int                   io_priority,
+					       GCancellable         *cancellable,
+					       GAsyncReadyCallback   callback,
+					       gpointer              user_data)
+{
+  GSimpleAsyncResult *res;
+  QueryInfoAsyncData *data;
+
+  data = g_new0 (QueryInfoAsyncData, 1);
+  data->attributes = g_strdup (attributes);
+  
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_file_output_stream_real_query_info_async);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_info_data_free);
+  
+  g_simple_async_result_run_in_thread (res, query_info_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static GFileInfo *
+g_file_output_stream_real_query_info_finish (GFileOutputStream     *stream,
+						GAsyncResult         *res,
+						GError              **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  QueryInfoAsyncData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_output_stream_real_query_info_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+  if (data->info)
+    return g_object_ref (data->info);
+  
+  return NULL;
+}
+
+#define __G_FILE_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfileoutputstream.h b/gio/gfileoutputstream.h
new file mode 100644
index 0000000..b2c27f5
--- /dev/null
+++ b/gio/gfileoutputstream.h
@@ -0,0 +1,119 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILE_OUTPUT_STREAM_H__
+#define __G_FILE_OUTPUT_STREAM_H__
+
+#include <gio/goutputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILE_OUTPUT_STREAM         (g_file_output_stream_get_type ())
+#define G_FILE_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStream))
+#define G_FILE_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStreamClass))
+#define G_IS_FILE_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILE_OUTPUT_STREAM))
+#define G_IS_FILE_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILE_OUTPUT_STREAM))
+#define G_FILE_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILE_OUTPUT_STREAM, GFileOutputStreamClass))
+
+/**
+ * GFileOutputStream:
+ *
+ * A subclass of GOutputStream for opened files. This adds
+ * a few file-specific operations and seeking and truncating.
+ *
+ * #GFileOutputStream implements GSeekable.
+ **/
+typedef struct _GFileOutputStreamClass    GFileOutputStreamClass;
+typedef struct _GFileOutputStreamPrivate  GFileOutputStreamPrivate;
+
+struct _GFileOutputStream
+{
+  GOutputStream parent_instance;
+
+  /*< private >*/
+  GFileOutputStreamPrivate *priv;
+};
+
+struct _GFileOutputStreamClass
+{
+  GOutputStreamClass parent_class;
+
+  goffset     (* tell)              (GFileOutputStream    *stream);
+  gboolean    (* can_seek)          (GFileOutputStream    *stream);
+  gboolean    (* seek)	            (GFileOutputStream    *stream,
+                                     goffset               offset,
+                                     GSeekType             type,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+  gboolean    (* can_truncate)      (GFileOutputStream    *stream);
+  gboolean    (* truncate_fn)       (GFileOutputStream    *stream,
+                                     goffset               size,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+  GFileInfo * (* query_info)        (GFileOutputStream    *stream,
+                                     const char           *attributes,
+                                     GCancellable         *cancellable,
+                                     GError              **error);
+  void        (* query_info_async)  (GFileOutputStream     *stream,
+                                     const char            *attributes,
+                                     int                   io_priority,
+                                     GCancellable         *cancellable,
+                                     GAsyncReadyCallback   callback,
+                                     gpointer              user_data);
+  GFileInfo * (* query_info_finish) (GFileOutputStream     *stream,
+                                     GAsyncResult         *res,
+                                     GError              **error);
+  char      * (* get_etag)          (GFileOutputStream    *stream);
+
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType      g_file_output_stream_get_type          (void) G_GNUC_CONST;
+
+
+GFileInfo *g_file_output_stream_query_info        (GFileOutputStream    *stream,
+                                                   const char           *attributes,
+                                                   GCancellable         *cancellable,
+                                                   GError              **error);
+void       g_file_output_stream_query_info_async  (GFileOutputStream    *stream,
+						   const char           *attributes,
+						   int                   io_priority,
+						   GCancellable         *cancellable,
+						   GAsyncReadyCallback   callback,
+						   gpointer              user_data);
+GFileInfo *g_file_output_stream_query_info_finish (GFileOutputStream    *stream,
+						   GAsyncResult         *result,
+						   GError              **error);
+char *     g_file_output_stream_get_etag          (GFileOutputStream    *stream);
+
+G_END_DECLS
+
+#endif /* __G_FILE_FILE_OUTPUT_STREAM_H__ */
diff --git a/gio/gfilterinputstream.c b/gio/gfilterinputstream.c
new file mode 100644
index 0000000..aa27465
--- /dev/null
+++ b/gio/gfilterinputstream.c
@@ -0,0 +1,499 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org> 
+ */
+
+#include "config.h"
+#include "gfilterinputstream.h"
+#include "ginputstream.h"
+#include "gsimpleasyncresult.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfilterinputstream
+ * @short_description: Filter Input Stream
+ * @include: gio/gio.h
+ *
+ **/
+
+enum {
+  PROP_0,
+  PROP_BASE_STREAM,
+  PROP_CLOSE_BASE
+};
+
+static void     g_filter_input_stream_set_property (GObject      *object,
+                                                    guint         prop_id,
+                                                    const GValue *value,
+                                                    GParamSpec   *pspec);
+
+static void     g_filter_input_stream_get_property (GObject      *object,
+                                                    guint         prop_id,
+                                                    GValue       *value,
+                                                    GParamSpec   *pspec);
+static void     g_filter_input_stream_finalize     (GObject *object);
+
+
+static gssize   g_filter_input_stream_read         (GInputStream         *stream,
+                                                    void                 *buffer,
+                                                    gsize                 count,
+                                                    GCancellable         *cancellable,
+                                                    GError              **error);
+static gssize   g_filter_input_stream_skip         (GInputStream         *stream,
+                                                    gsize                 count,
+                                                    GCancellable         *cancellable,
+                                                    GError              **error);
+static gboolean g_filter_input_stream_close        (GInputStream         *stream,
+                                                    GCancellable         *cancellable,
+                                                    GError              **error);
+static void     g_filter_input_stream_read_async   (GInputStream         *stream,
+                                                    void                 *buffer,
+                                                    gsize                 count,
+                                                    int                   io_priority,
+                                                    GCancellable         *cancellable,
+                                                    GAsyncReadyCallback   callback,
+                                                    gpointer              user_data);
+static gssize   g_filter_input_stream_read_finish  (GInputStream         *stream,
+                                                    GAsyncResult         *result,
+                                                    GError              **error);
+static void     g_filter_input_stream_skip_async   (GInputStream         *stream,
+                                                    gsize                 count,
+                                                    int                   io_priority,
+                                                    GCancellable         *cancellabl,
+                                                    GAsyncReadyCallback   callback,
+                                                    gpointer              datae);
+static gssize   g_filter_input_stream_skip_finish  (GInputStream         *stream,
+                                                    GAsyncResult         *result,
+                                                    GError              **error);
+static void     g_filter_input_stream_close_async  (GInputStream         *stream,
+                                                    int                   io_priority,
+                                                    GCancellable         *cancellabl,
+                                                    GAsyncReadyCallback   callback,
+                                                    gpointer              data);
+static gboolean g_filter_input_stream_close_finish (GInputStream         *stream,
+                                                    GAsyncResult         *result,
+                                                    GError              **error);
+
+G_DEFINE_TYPE (GFilterInputStream, g_filter_input_stream, G_TYPE_INPUT_STREAM)
+
+#define GET_PRIVATE(inst) G_TYPE_INSTANCE_GET_PRIVATE (inst, \
+  G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamPrivate)
+
+typedef struct
+{
+  gboolean close_base;
+} GFilterInputStreamPrivate;
+
+static void
+g_filter_input_stream_class_init (GFilterInputStreamClass *klass)
+{
+  GObjectClass *object_class;
+  GInputStreamClass *istream_class;
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->get_property = g_filter_input_stream_get_property;
+  object_class->set_property = g_filter_input_stream_set_property;
+  object_class->finalize     = g_filter_input_stream_finalize;
+
+  istream_class = G_INPUT_STREAM_CLASS (klass);
+  istream_class->read_fn  = g_filter_input_stream_read;
+  istream_class->skip  = g_filter_input_stream_skip;
+  istream_class->close_fn = g_filter_input_stream_close;
+
+  istream_class->read_async   = g_filter_input_stream_read_async;
+  istream_class->read_finish  = g_filter_input_stream_read_finish;
+  istream_class->skip_async   = g_filter_input_stream_skip_async;
+  istream_class->skip_finish  = g_filter_input_stream_skip_finish;
+  istream_class->close_async  = g_filter_input_stream_close_async;
+  istream_class->close_finish = g_filter_input_stream_close_finish;
+
+  g_type_class_add_private (klass, sizeof (GFilterInputStreamPrivate));
+
+  g_object_class_install_property (object_class,
+                                   PROP_BASE_STREAM,
+                                   g_param_spec_object ("base-stream",
+                                                         P_("The Filter Base Stream"),
+                                                         P_("The underlying base stream on which the io ops will be done."),
+                                                         G_TYPE_INPUT_STREAM,
+                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | 
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property (object_class,
+                                   PROP_CLOSE_BASE,
+                                   g_param_spec_boolean ("close-base-stream",
+                                                         P_("Close Base Stream"),
+                                                         P_("If the base stream should be closed when the filter stream is closed."),
+                                                         TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | 
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_filter_input_stream_set_property (GObject         *object,
+                                    guint            prop_id,
+                                    const GValue    *value,
+                                    GParamSpec      *pspec)
+{
+  GFilterInputStream *filter_stream;
+  GObject *obj;
+
+  filter_stream = G_FILTER_INPUT_STREAM (object);
+
+  switch (prop_id) 
+    {
+    case PROP_BASE_STREAM:
+      obj = g_value_dup_object (value);
+      filter_stream->base_stream = G_INPUT_STREAM (obj); 
+      break;
+
+    case PROP_CLOSE_BASE:
+      g_filter_input_stream_set_close_base_stream (filter_stream,
+                                                   g_value_get_boolean (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_filter_input_stream_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  GFilterInputStream *filter_stream;
+
+  filter_stream = G_FILTER_INPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_BASE_STREAM:
+      g_value_set_object (value, filter_stream->base_stream);
+      break;
+
+    case PROP_CLOSE_BASE:
+      g_value_set_boolean (value, GET_PRIVATE (filter_stream)->close_base);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_filter_input_stream_finalize (GObject *object)
+{
+  GFilterInputStream *stream;
+
+  stream = G_FILTER_INPUT_STREAM (object);
+
+  g_object_unref (stream->base_stream);
+
+  G_OBJECT_CLASS (g_filter_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_filter_input_stream_init (GFilterInputStream *stream)
+{
+
+}
+
+/**
+ * g_filter_input_stream_get_base_stream:
+ * @stream: a #GFilterInputStream.
+ * 
+ * Gets the base stream for the filter stream.
+ *
+ * Returns: a #GInputStream.
+ **/
+GInputStream *
+g_filter_input_stream_get_base_stream (GFilterInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_FILTER_INPUT_STREAM (stream), NULL);
+
+  return stream->base_stream;
+}
+
+/**
+ * g_filter_input_stream_get_close_base_stream:
+ * @stream: a #GFilterInputStream.
+ *
+ * Returns whether the base stream will be closed when @stream is
+ * closed.
+ *
+ * Return value: %TRUE if the base stream will be closed.
+ **/
+gboolean
+g_filter_input_stream_get_close_base_stream (GFilterInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_FILTER_INPUT_STREAM (stream), FALSE);
+
+  return GET_PRIVATE (stream)->close_base;
+}
+
+/**
+ * g_filter_input_stream_set_close_base_stream:
+ * @stream: a #GFilterInputStream.
+ * @close_base: %TRUE to close the base stream.
+ *
+ * Sets whether the base stream will be closed when @stream is closed.
+ **/
+void
+g_filter_input_stream_set_close_base_stream (GFilterInputStream *stream,
+                                             gboolean            close_base)
+{
+  GFilterInputStreamPrivate *priv;
+
+  g_return_if_fail (G_IS_FILTER_INPUT_STREAM (stream));
+
+  close_base = !!close_base;
+ 
+  priv = GET_PRIVATE (stream);
+
+  if (priv->close_base != close_base)
+    {
+      priv->close_base = close_base;
+      g_object_notify (G_OBJECT (stream), "close-base-stream");
+    }
+}
+
+static gssize
+g_filter_input_stream_read (GInputStream  *stream,
+                            void          *buffer,
+                            gsize          count,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+  GFilterInputStream *filter_stream;
+  GInputStream       *base_stream;
+  gssize              nread;
+
+  filter_stream = G_FILTER_INPUT_STREAM (stream);
+  base_stream = filter_stream->base_stream;
+
+  nread = g_input_stream_read (base_stream,
+                               buffer,
+                               count,
+                               cancellable,
+                               error);
+
+  return nread;
+}
+
+static gssize
+g_filter_input_stream_skip (GInputStream  *stream,
+                            gsize          count,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+  GFilterInputStream *filter_stream;
+  GInputStream       *base_stream;
+  gssize              nskipped;
+
+  filter_stream = G_FILTER_INPUT_STREAM (stream);
+  base_stream = filter_stream->base_stream;
+
+  nskipped = g_input_stream_skip (base_stream,
+                                  count,
+                                  cancellable,
+                                  error);
+  return nskipped;
+}
+
+static gboolean
+g_filter_input_stream_close (GInputStream  *stream,
+                             GCancellable  *cancellable,
+                             GError       **error)
+{
+  gboolean res = TRUE;
+
+  if (GET_PRIVATE (stream)->close_base)
+    {
+      GFilterInputStream *filter_stream;
+      GInputStream       *base_stream;
+
+      filter_stream = G_FILTER_INPUT_STREAM (stream);
+      base_stream = filter_stream->base_stream;
+
+      res = g_input_stream_close (base_stream,
+                                  cancellable,
+                                  error);
+    }
+
+  return res;
+}
+
+static void
+g_filter_input_stream_read_async (GInputStream        *stream,
+                                  void                *buffer,
+                                  gsize                count,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GFilterInputStream *filter_stream;
+  GInputStream       *base_stream;
+
+  filter_stream = G_FILTER_INPUT_STREAM (stream);
+  base_stream = filter_stream->base_stream;
+
+  g_input_stream_read_async (base_stream,
+                             buffer,
+                             count,
+                             io_priority,
+                             cancellable,
+                             callback,
+                             user_data);
+}
+
+static gssize
+g_filter_input_stream_read_finish (GInputStream  *stream,
+                                   GAsyncResult  *result,
+                                   GError       **error)
+{
+  GFilterInputStream *filter_stream;
+  GInputStream       *base_stream;
+  gssize nread;
+
+  filter_stream = G_FILTER_INPUT_STREAM (stream);
+  base_stream = filter_stream->base_stream;
+
+  nread = g_input_stream_read_finish (base_stream,
+                                      result,
+                                      error);
+  
+  return nread;
+}
+
+static void
+g_filter_input_stream_skip_async (GInputStream        *stream,
+                                  gsize                count,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GFilterInputStream *filter_stream;
+  GInputStream       *base_stream;
+
+  filter_stream = G_FILTER_INPUT_STREAM (stream);
+  base_stream = filter_stream->base_stream;
+
+  g_input_stream_skip_async (base_stream,
+                             count,
+                             io_priority,
+                             cancellable,
+                             callback,
+                             user_data);
+
+}
+
+static gssize
+g_filter_input_stream_skip_finish (GInputStream  *stream,
+                                   GAsyncResult  *result,
+                                   GError       **error)
+{
+  GFilterInputStream *filter_stream;
+  GInputStream       *base_stream;
+  gssize nskipped;
+
+  filter_stream = G_FILTER_INPUT_STREAM (stream);
+  base_stream = filter_stream->base_stream;
+
+  nskipped = g_input_stream_skip_finish (base_stream,
+                                         result,
+                                         error);
+
+  return nskipped;
+}
+
+static void
+g_filter_input_stream_close_ready (GObject       *object,
+                                   GAsyncResult  *result,
+                                   gpointer       user_data)
+{
+  GSimpleAsyncResult *simple = user_data;
+  GError *error = NULL;
+
+  g_input_stream_close_finish (G_INPUT_STREAM (object), result, &error);
+
+  if (error)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+g_filter_input_stream_close_async (GInputStream        *stream,
+                                   int                  io_priority,
+                                   GCancellable        *cancellable,
+                                   GAsyncReadyCallback  callback,
+                                   gpointer             user_data)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+                                      callback, user_data,
+                                      g_filter_input_stream_close_async);
+
+  if (GET_PRIVATE (stream)->close_base)
+    {
+      GFilterInputStream *filter_stream = G_FILTER_INPUT_STREAM (stream);
+
+      g_input_stream_close_async (filter_stream->base_stream,
+                                  io_priority, cancellable,
+                                  g_filter_input_stream_close_ready,
+                                  g_object_ref (simple));
+    }
+  else
+    /* do nothing */
+    g_simple_async_result_complete_in_idle (simple);
+
+  g_object_unref (simple);
+}
+
+static gboolean
+g_filter_input_stream_close_finish (GInputStream  *stream,
+                                    GAsyncResult  *result,
+                                    GError       **error)
+{
+  GSimpleAsyncResult *simple;
+
+  g_return_val_if_fail (g_simple_async_result_is_valid (
+    result, G_OBJECT (stream), g_filter_input_stream_close_async), FALSE);
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  return !g_simple_async_result_propagate_error (simple, error);
+}
+
+#define __G_FILTER_INPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfilterinputstream.h b/gio/gfilterinputstream.h
new file mode 100644
index 0000000..1514104
--- /dev/null
+++ b/gio/gfilterinputstream.h
@@ -0,0 +1,76 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILTER_INPUT_STREAM_H__
+#define __G_FILTER_INPUT_STREAM_H__
+
+#include <gio/ginputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILTER_INPUT_STREAM         (g_filter_input_stream_get_type ())
+#define G_FILTER_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStream))
+#define G_FILTER_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamClass))
+#define G_IS_FILTER_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILTER_INPUT_STREAM))
+#define G_IS_FILTER_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILTER_INPUT_STREAM))
+#define G_FILTER_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILTER_INPUT_STREAM, GFilterInputStreamClass))
+
+/**
+ * GFilterInputStream:
+ *
+ * A base class for all input streams that work on an underlying stream.
+ **/
+typedef struct _GFilterInputStreamClass    GFilterInputStreamClass;
+
+struct _GFilterInputStream
+{
+  GInputStream parent_instance;
+
+  /*<protected >*/
+  GInputStream *base_stream;
+};
+
+struct _GFilterInputStreamClass
+{
+  GInputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+};
+
+
+GType          g_filter_input_stream_get_type              (void) G_GNUC_CONST;
+GInputStream * g_filter_input_stream_get_base_stream       (GFilterInputStream *stream);
+gboolean       g_filter_input_stream_get_close_base_stream (GFilterInputStream *stream);
+void           g_filter_input_stream_set_close_base_stream (GFilterInputStream *stream,
+                                                            gboolean            close_base);
+
+G_END_DECLS
+
+#endif /* __G_FILTER_INPUT_STREAM_H__ */
diff --git a/gio/gfilteroutputstream.c b/gio/gfilteroutputstream.c
new file mode 100644
index 0000000..32fc6f7
--- /dev/null
+++ b/gio/gfilteroutputstream.c
@@ -0,0 +1,485 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org> 
+ */
+
+#include "config.h"
+#include "gfilteroutputstream.h"
+#include "gsimpleasyncresult.h"
+#include "goutputstream.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gfilteroutputstream
+ * @short_description: Filter Output Stream
+ * @include: gio/gio.h
+ *
+ **/
+
+enum {
+  PROP_0,
+  PROP_BASE_STREAM,
+  PROP_CLOSE_BASE
+};
+
+static void     g_filter_output_stream_set_property (GObject      *object,
+                                                     guint         prop_id,
+                                                     const GValue *value,
+                                                     GParamSpec   *pspec);
+
+static void     g_filter_output_stream_get_property (GObject    *object,
+                                                     guint       prop_id,
+                                                     GValue     *value,
+                                                     GParamSpec *pspec);
+static void     g_filter_output_stream_dispose      (GObject *object);
+
+
+static gssize   g_filter_output_stream_write        (GOutputStream *stream,
+                                                     const void    *buffer,
+                                                     gsize          count,
+                                                     GCancellable  *cancellable,
+                                                     GError       **error);
+static gboolean g_filter_output_stream_flush        (GOutputStream    *stream,
+                                                     GCancellable  *cancellable,
+                                                     GError          **error);
+static gboolean g_filter_output_stream_close        (GOutputStream  *stream,
+                                                     GCancellable   *cancellable,
+                                                     GError        **error);
+static void     g_filter_output_stream_write_async  (GOutputStream        *stream,
+                                                     const void           *buffer,
+                                                     gsize                 count,
+                                                     int                   io_priority,
+                                                     GCancellable         *cancellable,
+                                                     GAsyncReadyCallback   callback,
+                                                     gpointer              data);
+static gssize   g_filter_output_stream_write_finish (GOutputStream        *stream,
+                                                     GAsyncResult         *result,
+                                                     GError              **error);
+static void     g_filter_output_stream_flush_async  (GOutputStream        *stream,
+                                                     int                   io_priority,
+                                                     GCancellable         *cancellable,
+                                                     GAsyncReadyCallback   callback,
+                                                     gpointer              data);
+static gboolean g_filter_output_stream_flush_finish (GOutputStream        *stream,
+                                                     GAsyncResult         *result,
+                                                     GError              **error);
+static void     g_filter_output_stream_close_async  (GOutputStream        *stream,
+                                                     int                   io_priority,
+                                                     GCancellable         *cancellable,
+                                                     GAsyncReadyCallback   callback,
+                                                     gpointer              data);
+static gboolean g_filter_output_stream_close_finish (GOutputStream        *stream,
+                                                     GAsyncResult         *result,
+                                                     GError              **error);
+
+
+
+G_DEFINE_TYPE (GFilterOutputStream, g_filter_output_stream, G_TYPE_OUTPUT_STREAM)
+
+#define GET_PRIVATE(inst) G_TYPE_INSTANCE_GET_PRIVATE (inst, \
+  G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamPrivate)
+
+typedef struct
+{
+  gboolean close_base;
+} GFilterOutputStreamPrivate;
+
+static void
+g_filter_output_stream_class_init (GFilterOutputStreamClass *klass)
+{
+  GObjectClass *object_class;
+  GOutputStreamClass *ostream_class;
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->get_property = g_filter_output_stream_get_property;
+  object_class->set_property = g_filter_output_stream_set_property;
+  object_class->dispose      = g_filter_output_stream_dispose;
+    
+  ostream_class = G_OUTPUT_STREAM_CLASS (klass);
+  ostream_class->write_fn = g_filter_output_stream_write;
+  ostream_class->flush = g_filter_output_stream_flush;
+  ostream_class->close_fn = g_filter_output_stream_close;
+  ostream_class->write_async  = g_filter_output_stream_write_async;
+  ostream_class->write_finish = g_filter_output_stream_write_finish;
+  ostream_class->flush_async  = g_filter_output_stream_flush_async;
+  ostream_class->flush_finish = g_filter_output_stream_flush_finish;
+  ostream_class->close_async  = g_filter_output_stream_close_async;
+  ostream_class->close_finish = g_filter_output_stream_close_finish;
+
+  g_type_class_add_private (klass, sizeof (GFilterOutputStreamPrivate));
+
+  g_object_class_install_property (object_class,
+                                   PROP_BASE_STREAM,
+                                   g_param_spec_object ("base-stream",
+                                                         P_("The Filter Base Stream"),
+                                                         P_("The underlying base stream on which the io ops will be done."),
+                                                         G_TYPE_OUTPUT_STREAM,
+                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | 
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  g_object_class_install_property (object_class,
+                                   PROP_CLOSE_BASE,
+                                   g_param_spec_boolean ("close-base-stream",
+                                                         P_("Close Base Stream"),
+                                                         P_("If the base stream should be closed when the filter stream is closed."),
+                                                         TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_filter_output_stream_set_property (GObject      *object,
+                                     guint         prop_id,
+                                     const GValue *value,
+                                     GParamSpec   *pspec)
+{
+  GFilterOutputStream *filter_stream;
+  GObject *obj;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (object);
+
+  switch (prop_id) 
+    {
+    case PROP_BASE_STREAM:
+      obj = g_value_dup_object (value);
+      filter_stream->base_stream = G_OUTPUT_STREAM (obj);
+      break;
+
+    case PROP_CLOSE_BASE:
+      g_filter_output_stream_set_close_base_stream (filter_stream,
+                                                    g_value_get_boolean (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_filter_output_stream_get_property (GObject    *object,
+                                     guint       prop_id,
+                                     GValue     *value,
+                                     GParamSpec *pspec)
+{
+  GFilterOutputStream *filter_stream;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_BASE_STREAM:
+      g_value_set_object (value, filter_stream->base_stream);
+      break;
+
+    case PROP_CLOSE_BASE:
+      g_value_set_boolean (value, GET_PRIVATE (filter_stream)->close_base);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+
+}
+
+static void
+g_filter_output_stream_dispose (GObject *object)
+{
+  GFilterOutputStream *stream;
+
+  stream = G_FILTER_OUTPUT_STREAM (object);
+
+  G_OBJECT_CLASS (g_filter_output_stream_parent_class)->dispose (object);
+  
+  if (stream->base_stream)
+    {
+      g_object_unref (stream->base_stream);
+      stream->base_stream = NULL;
+    }
+}
+
+
+static void
+g_filter_output_stream_init (GFilterOutputStream *stream)
+{
+}
+
+/**
+ * g_filter_output_stream_get_base_stream:
+ * @stream: a #GFilterOutputStream.
+ * 
+ * Gets the base stream for the filter stream.
+ *
+ * Returns: a #GOutputStream.
+ **/
+GOutputStream *
+g_filter_output_stream_get_base_stream (GFilterOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_FILTER_OUTPUT_STREAM (stream), NULL);
+
+  return stream->base_stream;
+}
+
+/**
+ * g_filter_output_stream_get_close_base_stream:
+ * @stream: a #GFilterOutputStream.
+ *
+ * Returns whether the base stream will be closed when @stream is
+ * closed.
+ *
+ * Return value: %TRUE if the base stream will be closed.
+ **/
+gboolean
+g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_FILTER_OUTPUT_STREAM (stream), FALSE);
+
+  return GET_PRIVATE (stream)->close_base;
+}
+
+/**
+ * g_filter_output_stream_set_close_base_stream:
+ * @stream: a #GFilterOutputStream.
+ * @close_base: %TRUE to close the base stream.
+ *
+ * Sets whether the base stream will be closed when @stream is closed.
+ **/
+void
+g_filter_output_stream_set_close_base_stream (GFilterOutputStream *stream,
+                                              gboolean             close_base)
+{
+  GFilterOutputStreamPrivate *priv;
+
+  g_return_if_fail (G_IS_FILTER_OUTPUT_STREAM (stream));
+
+  close_base = !!close_base;
+
+  priv = GET_PRIVATE (stream);
+
+  if (priv->close_base != close_base)
+    {
+      priv->close_base = close_base;
+      g_object_notify (G_OBJECT (stream), "close-base-stream");
+    }
+}
+
+static gssize
+g_filter_output_stream_write (GOutputStream  *stream,
+                              const void     *buffer,
+                              gsize           count,
+                              GCancellable   *cancellable,
+                              GError        **error)
+{
+  GFilterOutputStream *filter_stream;
+  gssize nwritten;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+  nwritten = g_output_stream_write (filter_stream->base_stream,
+                                    buffer,
+                                    count,
+                                    cancellable,
+                                    error);
+
+  return nwritten;
+}
+
+static gboolean
+g_filter_output_stream_flush (GOutputStream  *stream,
+                              GCancellable   *cancellable,
+                              GError        **error)
+{
+  GFilterOutputStream *filter_stream;
+  gboolean res;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+  res = g_output_stream_flush (filter_stream->base_stream,
+                               cancellable,
+                               error);
+
+  return res;
+}
+
+static gboolean
+g_filter_output_stream_close (GOutputStream  *stream,
+                              GCancellable   *cancellable,
+                              GError        **error)
+{
+  gboolean res = TRUE;
+
+  if (GET_PRIVATE (stream)->close_base)
+    {
+      GFilterOutputStream *filter_stream;
+
+      filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+      res = g_output_stream_close (filter_stream->base_stream,
+                                   cancellable,
+                                   error);
+    }
+
+  return res;
+}
+
+static void
+g_filter_output_stream_write_async (GOutputStream       *stream,
+                                    const void          *buffer,
+                                    gsize                count,
+                                    int                  io_priority,
+                                    GCancellable        *cancellable,
+                                    GAsyncReadyCallback  callback,
+                                    gpointer             data)
+{
+  GFilterOutputStream *filter_stream;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+  g_output_stream_write_async (filter_stream->base_stream,
+                               buffer,
+                               count,
+                               io_priority,
+                               cancellable,
+                               callback,
+                               data);
+
+}
+
+static gssize
+g_filter_output_stream_write_finish (GOutputStream  *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GFilterOutputStream *filter_stream;
+  gssize nwritten;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+  nwritten = g_output_stream_write_finish (filter_stream->base_stream,
+                                           result,
+                                           error);
+
+  return nwritten;
+}
+
+static void
+g_filter_output_stream_flush_async (GOutputStream       *stream,
+                                    int                  io_priority,
+                                    GCancellable        *cancellable,
+                                    GAsyncReadyCallback  callback,
+                                    gpointer             data)
+{
+  GFilterOutputStream *filter_stream;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+  g_output_stream_flush_async (filter_stream->base_stream,
+                               io_priority,
+                               cancellable,
+                               callback,
+                               data);
+}
+
+static gboolean
+g_filter_output_stream_flush_finish (GOutputStream  *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GFilterOutputStream *filter_stream;
+  gboolean res;
+
+  filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+  res = g_output_stream_flush_finish (filter_stream->base_stream,
+                                      result,
+                                      error);
+
+  return res;
+}
+
+static void
+g_filter_output_stream_close_ready (GObject       *object,
+                                    GAsyncResult  *result,
+                                    gpointer       user_data)
+{
+  GSimpleAsyncResult *simple = user_data;
+  GError *error = NULL;
+
+  g_output_stream_close_finish (G_OUTPUT_STREAM (object), result, &error);
+
+  if (error)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+}
+
+static void
+g_filter_output_stream_close_async (GOutputStream       *stream,
+                                    int                  io_priority,
+                                    GCancellable        *cancellable,
+                                    GAsyncReadyCallback  callback,
+                                    gpointer             user_data)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+                                      callback, user_data,
+                                      g_filter_output_stream_close_async);
+
+  if (GET_PRIVATE (stream)->close_base)
+    {
+      GFilterOutputStream *filter_stream = G_FILTER_OUTPUT_STREAM (stream);
+
+      g_output_stream_close_async (filter_stream->base_stream,
+                                  io_priority, cancellable,
+                                  g_filter_output_stream_close_ready,
+                                  g_object_ref (simple));
+    }
+  else
+    /* do nothing */
+    g_simple_async_result_complete_in_idle (simple);
+
+  g_object_unref (simple);
+}
+
+static gboolean
+g_filter_output_stream_close_finish (GOutputStream  *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GSimpleAsyncResult *simple;
+
+  g_return_val_if_fail (g_simple_async_result_is_valid (
+    result, G_OBJECT (stream), g_filter_output_stream_close_async), FALSE);
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  return !g_simple_async_result_propagate_error (simple, error);
+}
+
+#define __G_FILTER_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gfilteroutputstream.h b/gio/gfilteroutputstream.h
new file mode 100644
index 0000000..10350e5
--- /dev/null
+++ b/gio/gfilteroutputstream.h
@@ -0,0 +1,76 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_FILTER_OUTPUT_STREAM_H__
+#define __G_FILTER_OUTPUT_STREAM_H__
+
+#include <gio/goutputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_FILTER_OUTPUT_STREAM         (g_filter_output_stream_get_type ())
+#define G_FILTER_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStream))
+#define G_FILTER_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamClass))
+#define G_IS_FILTER_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_FILTER_OUTPUT_STREAM))
+#define G_IS_FILTER_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_FILTER_OUTPUT_STREAM))
+#define G_FILTER_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamClass))
+
+/**
+ * GFilterOutputStream:
+ *
+ * A base class for all output streams that work on an underlying stream.
+ **/
+typedef struct _GFilterOutputStreamClass    GFilterOutputStreamClass;
+
+struct _GFilterOutputStream
+{
+  GOutputStream parent_instance;
+
+  /*< protected >*/
+  GOutputStream *base_stream;
+};
+
+struct _GFilterOutputStreamClass
+{
+  GOutputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+};
+
+
+GType           g_filter_output_stream_get_type              (void) G_GNUC_CONST;
+GOutputStream * g_filter_output_stream_get_base_stream       (GFilterOutputStream *stream);
+gboolean        g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream);
+void            g_filter_output_stream_set_close_base_stream (GFilterOutputStream *stream,
+                                                              gboolean             close_base);
+
+G_END_DECLS
+
+#endif /* __G_FILTER_OUTPUT_STREAM_H__ */
diff --git a/gio/gicon.c b/gio/gicon.c
new file mode 100644
index 0000000..32538b5
--- /dev/null
+++ b/gio/gicon.c
@@ -0,0 +1,494 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include "gicon.h"
+#include "gthemedicon.h"
+#include "gfileicon.h"
+#include "gemblemedicon.h"
+#include "gfile.h"
+#include "gioerror.h"
+
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/* There versioning of this is implicit, version 1 would be ".1 " */
+#define G_ICON_SERIALIZATION_MAGIC0 ". "
+
+/**
+ * SECTION:gicon
+ * @short_description: Interface for icons
+ * @include: gio/gio.h
+ *
+ * #GIcon is a very minimal interface for icons. It provides functions
+ * for checking the equality of two icons, hashing of icons and
+ * serializing an icon to and from strings.
+ *
+ * #GIcon does not provide the actual pixmap for the icon as this is out 
+ * of GIO's scope, however implementations of #GIcon may contain the name 
+ * of an icon (see #GThemedIcon), or the path to an icon (see #GLoadableIcon). 
+ * 
+ * To obtain a hash of a #GIcon, see g_icon_hash().
+ * 
+ * To check if two #GIcons are equal, see g_icon_equal().
+ *
+ * For serializing a #GIcon, use g_icon_to_string() and
+ * g_icon_new_for_string().
+ *
+ * If your application or library provides one or more #GIcon
+ * implementations you need to ensure that each #GType is registered
+ * with the type system prior to calling g_icon_new_for_string().
+ **/
+
+static void g_icon_base_init (gpointer g_class);
+static void g_icon_class_init (gpointer g_class,
+			       gpointer class_data);
+
+GType
+g_icon_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo icon_info =
+      {
+        sizeof (GIconIface), /* class_size */
+	g_icon_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_icon_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GIcon"),
+				&icon_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_icon_class_init (gpointer g_class,
+		   gpointer class_data)
+{
+}
+
+static void
+g_icon_base_init (gpointer g_class)
+{
+}
+
+/**
+ * g_icon_hash:
+ * @icon: #gconstpointer to an icon object.
+ * 
+ * Gets a hash for an icon.
+ * 
+ * Returns: a #guint containing a hash for the @icon, suitable for 
+ * use in a #GHashTable or similar data structure.
+ **/
+guint
+g_icon_hash (gconstpointer icon)
+{
+  GIconIface *iface;
+
+  g_return_val_if_fail (G_IS_ICON (icon), 0);
+
+  iface = G_ICON_GET_IFACE (icon);
+
+  return (* iface->hash) ((GIcon *)icon);
+}
+
+/**
+ * g_icon_equal:
+ * @icon1: pointer to the first #GIcon.
+ * @icon2: pointer to the second #GIcon.
+ * 
+ * Checks if two icons are equal.
+ * 
+ * Returns: %TRUE if @icon1 is equal to @icon2. %FALSE otherwise.
+ **/
+gboolean
+g_icon_equal (GIcon *icon1,
+	      GIcon *icon2)
+{
+  GIconIface *iface;
+
+  if (icon1 == NULL && icon2 == NULL)
+    return TRUE;
+
+  if (icon1 == NULL || icon2 == NULL)
+    return FALSE;
+  
+  if (G_TYPE_FROM_INSTANCE (icon1) != G_TYPE_FROM_INSTANCE (icon2))
+    return FALSE;
+
+  iface = G_ICON_GET_IFACE (icon1);
+  
+  return (* iface->equal) (icon1, icon2);
+}
+
+static gboolean
+g_icon_to_string_tokenized (GIcon *icon, GString *s)
+{
+  char *ret;
+  GPtrArray *tokens;
+  gint version;
+  GIconIface *icon_iface;
+  int i;
+
+  g_return_val_if_fail (icon != NULL, FALSE);
+  g_return_val_if_fail (G_IS_ICON (icon), FALSE);
+
+  ret = NULL;
+
+  icon_iface = G_ICON_GET_IFACE (icon);
+  if (icon_iface->to_tokens == NULL)
+    return FALSE;
+
+  tokens = g_ptr_array_new ();
+  if (!icon_iface->to_tokens (icon, tokens, &version))
+    {
+      g_ptr_array_free (tokens, TRUE);
+      return FALSE;
+    }
+
+  /* format: TypeName[.Version] <token_0> .. <token_N-1>
+     version 0 is implicit and can be omitted
+     all the tokens are url escaped to ensure they have no spaces in them */
+  
+  g_string_append (s, g_type_name_from_instance ((GTypeInstance *)icon));
+  if (version != 0)
+    g_string_append_printf (s, ".%d", version);
+  
+  for (i = 0; i < tokens->len; i++)
+    {
+      char *token;
+
+      token = g_ptr_array_index (tokens, i);
+
+      g_string_append_c (s, ' ');
+      /* We really only need to escape spaces here, so allow lots of otherwise reserved chars */
+      g_string_append_uri_escaped (s, token,
+				   G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, TRUE);
+
+      g_free (token);
+    }
+  
+  g_ptr_array_free (tokens, TRUE);
+  
+  return TRUE;
+}
+
+/**
+ * g_icon_to_string:
+ * @icon: a #GIcon.
+ *
+ * Generates a textual representation of @icon that can be used for
+ * serialization such as when passing @icon to a different process or
+ * saving it to persistent storage. Use g_icon_new_for_string() to
+ * get @icon back from the returned string.
+ *
+ * The encoding of the returned string is proprietary to #GIcon except
+ * in the following two cases
+ *
+ * <itemizedlist>
+ * <listitem><para>
+ *     If @icon is a #GFileIcon, the returned string is a native path
+ *     (such as <literal>/path/to/my icon.png</literal>) without escaping
+ *     if the #GFile for @icon is a native file.  If the file is not
+ *     native, the returned string is the result of g_file_get_uri()
+ *     (such as <literal>sftp://path/to/my%%20icon.png</literal>).
+ * </para></listitem>
+ * <listitem><para>
+ *    If @icon is a #GThemedIcon with exactly one name, the encoding is
+ *    simply the name (such as <literal>network-server</literal>).
+ * </para></listitem>
+ * </itemizedlist>
+ *
+ * Returns: An allocated NUL-terminated UTF8 string or %NULL if @icon can't
+ * be serialized. Use g_free() to free.
+ *
+ * Since: 2.20
+ */
+gchar *
+g_icon_to_string (GIcon *icon)
+{
+  gchar *ret;
+
+  g_return_val_if_fail (icon != NULL, NULL);
+  g_return_val_if_fail (G_IS_ICON (icon), NULL);
+
+  ret = NULL;
+
+  if (G_IS_FILE_ICON (icon))
+    {
+      GFile *file;
+
+      file = g_file_icon_get_file (G_FILE_ICON (icon));
+      if (g_file_is_native (file))
+	{
+	  ret = g_file_get_path (file);
+	  if (!g_utf8_validate (ret, -1, NULL))
+	    {
+	      g_free (ret);
+	      ret = NULL;
+	    }
+	}
+      else
+        ret = g_file_get_uri (file);
+    }
+  else if (G_IS_THEMED_ICON (icon))
+    {
+      const char * const *names;
+
+      names = g_themed_icon_get_names (G_THEMED_ICON (icon));
+      if (names != NULL &&
+	  names[0] != NULL &&
+	  names[0][0] != '.' && /* Allowing icons starting with dot would break G_ICON_SERIALIZATION_MAGIC0 */
+	  g_utf8_validate (names[0], -1, NULL) && /* Only return utf8 strings */
+	  names[1] == NULL)
+	ret = g_strdup (names[0]);
+    }
+
+  if (ret == NULL)
+    {
+      GString *s;
+
+      s = g_string_new (G_ICON_SERIALIZATION_MAGIC0);
+
+      if (g_icon_to_string_tokenized (icon, s))
+	ret = g_string_free (s, FALSE);
+      else
+	g_string_free (s, TRUE);
+    }
+
+  return ret;
+}
+
+static GIcon *
+g_icon_new_from_tokens (char   **tokens,
+			GError **error)
+{
+  GIcon *icon;
+  char *typename, *version_str;
+  GType type;
+  gpointer klass;
+  GIconIface *icon_iface;
+  gint version;
+  char *endp;
+  int num_tokens;
+  int i;
+
+  icon = NULL;
+  klass = NULL;
+
+  num_tokens = g_strv_length (tokens);
+
+  if (num_tokens < 1)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Wrong number of tokens (%d)"),
+                   num_tokens);
+      goto out;
+    }
+  
+  typename = tokens[0];
+  version_str = strchr (typename, '.');
+  if (version_str)
+    {
+      *version_str = 0;
+      version_str += 1;
+    }
+  
+  
+  type = g_type_from_name (tokens[0]);
+  if (type == 0)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("No type for class name %s"),
+                   tokens[0]);
+      goto out;
+    }
+
+  if (!g_type_is_a (type, G_TYPE_ICON))
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Type %s does not implement the GIcon interface"),
+                   tokens[0]);
+      goto out;
+    }
+
+  klass = g_type_class_ref (type);
+  if (klass == NULL)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Type %s is not classed"),
+                   tokens[0]);
+      goto out;
+    }
+
+  version = 0;
+  if (version_str)
+    {
+      version = strtol (version_str, &endp, 10);
+      if (endp == NULL || *endp != '\0')
+	{
+	  g_set_error (error,
+		       G_IO_ERROR,
+		       G_IO_ERROR_INVALID_ARGUMENT,
+		       _("Malformed version number: %s"),
+		       version_str);
+	  goto out;
+	}
+    }
+
+  icon_iface = g_type_interface_peek (klass, G_TYPE_ICON);
+  g_assert (icon_iface != NULL);
+
+  if (icon_iface->from_tokens == NULL)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Type %s does not implement from_tokens() on the GIcon interface"),
+                   tokens[0]);
+      goto out;
+    }
+
+  for (i = 1;  i < num_tokens; i++)
+    {
+      char *escaped;
+
+      escaped = tokens[i];
+      tokens[i] = g_uri_unescape_string (escaped, NULL);
+      g_free (escaped);
+    }
+  
+  icon = icon_iface->from_tokens (tokens + 1, num_tokens - 1, version, error);
+
+ out:
+  if (klass != NULL)
+    g_type_class_unref (klass);
+  return icon;
+}
+
+static void
+ensure_builtin_icon_types (void)
+{
+  static volatile GType t;
+  t = g_themed_icon_get_type ();
+  t = g_file_icon_get_type ();
+  t = g_emblemed_icon_get_type ();
+  t = g_emblem_get_type ();
+}
+
+/**
+ * g_icon_new_for_string:
+ * @str: A string obtained via g_icon_to_string().
+ * @error: Return location for error.
+ *
+ * Generate a #GIcon instance from @str. This function can fail if
+ * @str is not valid - see g_icon_to_string() for discussion.
+ *
+ * If your application or library provides one or more #GIcon
+ * implementations you need to ensure that each #GType is registered
+ * with the type system prior to calling g_icon_new_for_string().
+ *
+ * Returns: An object implementing the #GIcon interface or %NULL if
+ * @error is set.
+ *
+ * Since: 2.20
+ **/
+GIcon *
+g_icon_new_for_string (const gchar   *str,
+                       GError       **error)
+{
+  GIcon *icon;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  ensure_builtin_icon_types ();
+
+  icon = NULL;
+
+  if (*str == '.')
+    {
+      if (g_str_has_prefix (str, G_ICON_SERIALIZATION_MAGIC0))
+	{
+	  gchar **tokens;
+	  
+	  /* handle tokenized encoding */
+	  tokens = g_strsplit (str + sizeof (G_ICON_SERIALIZATION_MAGIC0) - 1, " ", 0);
+	  icon = g_icon_new_from_tokens (tokens, error);
+	  g_strfreev (tokens);
+	}
+      else
+	g_set_error_literal (error,
+			     G_IO_ERROR,
+			     G_IO_ERROR_INVALID_ARGUMENT,
+			     _("Can't handle the supplied version the icon encoding"));
+    }
+  else
+    {
+      gchar *scheme;
+
+      /* handle special GFileIcon and GThemedIcon cases */
+      scheme = g_uri_parse_scheme (str);
+      if (scheme != NULL || str[0] == '/')
+        {
+          GFile *location;
+          location = g_file_new_for_commandline_arg (str);
+          icon = g_file_icon_new (location);
+          g_object_unref (location);
+        }
+      else
+	icon = g_themed_icon_new (str);
+      g_free (scheme);
+    }
+
+  return icon;
+}
+
+
+#define __G_ICON_C__
+#include "gioaliasdef.c"
diff --git a/gio/gicon.h b/gio/gicon.h
new file mode 100644
index 0000000..8f339f6
--- /dev/null
+++ b/gio/gicon.h
@@ -0,0 +1,91 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_ICON_H__
+#define __G_ICON_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_ICON            (g_icon_get_type ())
+#define G_ICON(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_ICON, GIcon))
+#define G_IS_ICON(obj)	       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_ICON))
+#define G_ICON_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_ICON, GIconIface))
+
+/**
+ * GIcon:
+ *
+ * An abstract type that specifies an icon.
+ **/
+typedef struct _GIconIface GIconIface;
+
+/**
+ * GIconIface:
+ * @g_iface: The parent interface.
+ * @hash: A hash for a given #GIcon.
+ * @equal: Checks if two #GIcon<!-- -->s are equal.
+ * @to_tokens: Serializes a #GIcon into tokens. The tokens must not
+ * contain any whitespace. Don't implement if the #GIcon can't be
+ * serialized (Since 2.20).
+ * @from_tokens: Constructs a #GIcon from tokens. Set the #GError if
+ * the tokens are malformed. Don't implement if the #GIcon can't be
+ * serialized (Since 2.20).
+ *
+ * GIconIface is used to implement GIcon types for various
+ * different systems. See #GThemedIcon and #GLoadableIcon for
+ * examples of how to implement this interface.
+ */
+struct _GIconIface
+{
+  GTypeInterface g_iface;
+
+  /* Virtual Table */
+
+  guint       (* hash)        (GIcon   *icon);
+  gboolean    (* equal)       (GIcon   *icon1,
+                               GIcon   *icon2);
+  gboolean    (* to_tokens)   (GIcon   *icon,
+			       GPtrArray *tokens,
+                               gint    *out_version);
+  GIcon *     (* from_tokens) (gchar  **tokens,
+                               gint     num_tokens,
+                               gint     version,
+                               GError **error);
+};
+
+GType    g_icon_get_type  (void) G_GNUC_CONST;
+
+guint    g_icon_hash            (gconstpointer  icon);
+gboolean g_icon_equal           (GIcon         *icon1,
+                                 GIcon         *icon2);
+gchar   *g_icon_to_string       (GIcon         *icon);
+GIcon   *g_icon_new_for_string  (const gchar   *str,
+                                 GError       **error);
+
+G_END_DECLS
+
+#endif /* __G_ICON_H__ */
diff --git a/gio/ginputstream.c b/gio/ginputstream.c
new file mode 100644
index 0000000..663bfde
--- /dev/null
+++ b/gio/ginputstream.c
@@ -0,0 +1,1215 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <glib.h>
+#include "glibintl.h"
+
+#include "ginputstream.h"
+#include "gseekable.h"
+#include "gcancellable.h"
+#include "gasyncresult.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:ginputstream
+ * @short_description: Base class for implementing streaming input
+ * @include: gio/gio.h
+ *
+ * GInputStream has functions to read from a stream (g_input_stream_read()),
+ * to close a stream (g_input_stream_close()) and to skip some content
+ * (g_input_stream_skip()). 
+ *
+ * To copy the content of an input stream to an output stream without 
+ * manually handling the reads and writes, use g_output_stream_splice(). 
+ *
+ * All of these functions have async variants too.
+ **/
+
+G_DEFINE_TYPE (GInputStream, g_input_stream, G_TYPE_OBJECT);
+
+struct _GInputStreamPrivate {
+  guint closed : 1;
+  guint pending : 1;
+  GAsyncReadyCallback outstanding_callback;
+};
+
+static gssize   g_input_stream_real_skip         (GInputStream         *stream,
+						  gsize                 count,
+						  GCancellable         *cancellable,
+						  GError              **error);
+static void     g_input_stream_real_read_async   (GInputStream         *stream,
+						  void                 *buffer,
+						  gsize                 count,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              user_data);
+static gssize   g_input_stream_real_read_finish  (GInputStream         *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+static void     g_input_stream_real_skip_async   (GInputStream         *stream,
+						  gsize                 count,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              data);
+static gssize   g_input_stream_real_skip_finish  (GInputStream         *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+static void     g_input_stream_real_close_async  (GInputStream         *stream,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              data);
+static gboolean g_input_stream_real_close_finish (GInputStream         *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+
+static void
+g_input_stream_finalize (GObject *object)
+{
+  GInputStream *stream;
+
+  stream = G_INPUT_STREAM (object);
+  
+  if (!stream->priv->closed)
+    g_input_stream_close (stream, NULL, NULL);
+
+  G_OBJECT_CLASS (g_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_input_stream_dispose (GObject *object)
+{
+  GInputStream *stream;
+
+  stream = G_INPUT_STREAM (object);
+  
+  if (!stream->priv->closed)
+    g_input_stream_close (stream, NULL, NULL);
+
+  G_OBJECT_CLASS (g_input_stream_parent_class)->dispose (object);
+}
+
+
+static void
+g_input_stream_class_init (GInputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GInputStreamPrivate));
+  
+  gobject_class->finalize = g_input_stream_finalize;
+  gobject_class->dispose = g_input_stream_dispose;
+  
+  klass->skip = g_input_stream_real_skip;
+  klass->read_async = g_input_stream_real_read_async;
+  klass->read_finish = g_input_stream_real_read_finish;
+  klass->skip_async = g_input_stream_real_skip_async;
+  klass->skip_finish = g_input_stream_real_skip_finish;
+  klass->close_async = g_input_stream_real_close_async;
+  klass->close_finish = g_input_stream_real_close_finish;
+}
+
+static void
+g_input_stream_init (GInputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+					      G_TYPE_INPUT_STREAM,
+					      GInputStreamPrivate);
+}
+
+/**
+ * g_input_stream_read:
+ * @stream: a #GInputStream.
+ * @buffer: a buffer to read data into (which should be at least count bytes long).
+ * @count: the number of bytes that will be read from the stream
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Tries to read @count bytes from the stream into the buffer starting at
+ * @buffer. Will block during this read.
+ * 
+ * If count is zero returns zero and does nothing. A value of @count
+ * larger than %G_MAXSSIZE will cause a %G_IO_ERROR_INVALID_ARGUMENT error.
+ *
+ * On success, the number of bytes read into the buffer is returned.
+ * It is not an error if this is not the same as the requested size, as it
+ * can happen e.g. near the end of a file. Zero is returned on end of file
+ * (or if @count is zero),  but never otherwise.
+ *
+ * If @cancellable is not NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error G_IO_ERROR_CANCELLED will be returned. If an
+ * operation was partially finished when the operation was cancelled the
+ * partial result will be returned, without an error.
+ *
+ * On error -1 is returned and @error is set accordingly.
+ * 
+ * Return value: Number of bytes read, or -1 on error
+ **/
+gssize
+g_input_stream_read  (GInputStream  *stream,
+		      void          *buffer,
+		      gsize          count,
+		      GCancellable  *cancellable,
+		      GError       **error)
+{
+  GInputStreamClass *class;
+  gssize res;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), -1);
+  g_return_val_if_fail (buffer != NULL, 0);
+
+  if (count == 0)
+    return 0;
+  
+  if (((gssize) count) < 0)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+		   _("Too large count value passed to %s"), G_STRFUNC);
+      return -1;
+    }
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+
+  if (class->read_fn == NULL) 
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Input stream doesn't implement read"));
+      return -1;
+    }
+
+  if (!g_input_stream_set_pending (stream, error))
+    return -1;
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  res = class->read_fn (stream, buffer, count, cancellable, error);
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_input_stream_clear_pending (stream);
+
+  return res;
+}
+
+/**
+ * g_input_stream_read_all:
+ * @stream: a #GInputStream.
+ * @buffer: a buffer to read data into (which should be at least count bytes long).
+ * @count: the number of bytes that will be read from the stream
+ * @bytes_read: location to store the number of bytes that was read from the stream
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Tries to read @count bytes from the stream into the buffer starting at
+ * @buffer. Will block during this read.
+ *
+ * This function is similar to g_input_stream_read(), except it tries to
+ * read as many bytes as requested, only stopping on an error or end of stream.
+ *
+ * On a successful read of @count bytes, or if we reached the end of the
+ * stream,  %TRUE is returned, and @bytes_read is set to the number of bytes
+ * read into @buffer.
+ * 
+ * If there is an error during the operation %FALSE is returned and @error
+ * is set to indicate the error status, @bytes_read is updated to contain
+ * the number of bytes read into @buffer before the error occurred.
+ *
+ * Return value: %TRUE on success, %FALSE if there was an error
+ **/
+gboolean
+g_input_stream_read_all (GInputStream  *stream,
+			 void          *buffer,
+			 gsize          count,
+			 gsize         *bytes_read,
+			 GCancellable  *cancellable,
+			 GError       **error)
+{
+  gsize _bytes_read;
+  gssize res;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
+  g_return_val_if_fail (buffer != NULL, FALSE);
+
+  _bytes_read = 0;
+  while (_bytes_read < count)
+    {
+      res = g_input_stream_read (stream, (char *)buffer + _bytes_read, count - _bytes_read,
+				 cancellable, error);
+      if (res == -1)
+	{
+	  if (bytes_read)
+	    *bytes_read = _bytes_read;
+	  return FALSE;
+	}
+      
+      if (res == 0)
+	break;
+
+      _bytes_read += res;
+    }
+
+  if (bytes_read)
+    *bytes_read = _bytes_read;
+  return TRUE;
+}
+
+/**
+ * g_input_stream_skip:
+ * @stream: a #GInputStream.
+ * @count: the number of bytes that will be skipped from the stream
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Tries to skip @count bytes from the stream. Will block during the operation.
+ *
+ * This is identical to g_input_stream_read(), from a behaviour standpoint,
+ * but the bytes that are skipped are not returned to the user. Some
+ * streams have an implementation that is more efficient than reading the data.
+ *
+ * This function is optional for inherited classes, as the default implementation
+ * emulates it using read.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. If an
+ * operation was partially finished when the operation was cancelled the
+ * partial result will be returned, without an error.
+ *
+ * Return value: Number of bytes skipped, or -1 on error
+ **/
+gssize
+g_input_stream_skip (GInputStream  *stream,
+		     gsize          count,
+		     GCancellable  *cancellable,
+		     GError       **error)
+{
+  GInputStreamClass *class;
+  gssize res;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), -1);
+
+  if (count == 0)
+    return 0;
+
+  if (((gssize) count) < 0)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+		   _("Too large count value passed to %s"), G_STRFUNC);
+      return -1;
+    }
+  
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+
+  if (!g_input_stream_set_pending (stream, error))
+    return -1;
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  res = class->skip (stream, count, cancellable, error);
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_input_stream_clear_pending (stream);
+
+  return res;
+}
+
+static gssize
+g_input_stream_real_skip (GInputStream  *stream,
+			  gsize          count,
+			  GCancellable  *cancellable,
+			  GError       **error)
+{
+  GInputStreamClass *class;
+  gssize ret, read_bytes;
+  char buffer[8192];
+  GError *my_error;
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+
+  if (G_IS_SEEKABLE (stream) && g_seekable_can_seek (G_SEEKABLE (stream)))
+    {
+      if (g_seekable_seek (G_SEEKABLE (stream),
+			   count,
+			   G_SEEK_CUR,
+			   cancellable,
+			   NULL))
+	return count;
+    }
+
+  /* If not seekable, or seek failed, fall back to reading data: */
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  
+  read_bytes = 0;
+  while (1)
+    {
+      my_error = NULL;
+
+      ret = class->read_fn (stream, buffer, MIN (sizeof (buffer), count),
+			 cancellable, &my_error);
+      if (ret == -1)
+	{
+	  if (read_bytes > 0 &&
+	      my_error->domain == G_IO_ERROR &&
+	      my_error->code == G_IO_ERROR_CANCELLED)
+	    {
+	      g_error_free (my_error);
+	      return read_bytes;
+	    }
+	  
+	  g_propagate_error (error, my_error);
+	  return -1;
+	}
+
+      count -= ret;
+      read_bytes += ret;
+      
+      if (ret == 0 || count == 0)
+	return read_bytes;
+    }
+}
+
+/**
+ * g_input_stream_close:
+ * @stream: A #GInputStream.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Closes the stream, releasing resources related to it.
+ *
+ * Once the stream is closed, all other operations will return %G_IO_ERROR_CLOSED.
+ * Closing a stream multiple times will not return an error.
+ *
+ * Streams will be automatically closed when the last reference
+ * is dropped, but you might want to call this function to make sure 
+ * resources are released as early as possible.
+ *
+ * Some streams might keep the backing store of the stream (e.g. a file descriptor)
+ * open after the stream is closed. See the documentation for the individual
+ * stream for details.
+ *
+ * On failure the first error that happened will be reported, but the close
+ * operation will finish as much as possible. A stream that failed to
+ * close will still return %G_IO_ERROR_CLOSED for all operations. Still, it
+ * is important to check and report the error to the user.
+ *
+ * If @cancellable is not NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
+ * Cancelling a close will still leave the stream closed, but some streams
+ * can use a faster close that doesn't block to e.g. check errors. 
+ *
+ * Return value: %TRUE on success, %FALSE on failure
+ **/
+gboolean
+g_input_stream_close (GInputStream  *stream,
+		      GCancellable  *cancellable,
+		      GError       **error)
+{
+  GInputStreamClass *class;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+
+  if (stream->priv->closed)
+    return TRUE;
+
+  res = TRUE;
+
+  if (!g_input_stream_set_pending (stream, error))
+    return FALSE;
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+
+  if (class->close_fn)
+    res = class->close_fn (stream, cancellable, error);
+
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+
+  g_input_stream_clear_pending (stream);
+  
+  stream->priv->closed = TRUE;
+  
+  return res;
+}
+
+static void
+async_ready_callback_wrapper (GObject      *source_object,
+			      GAsyncResult *res,
+			      gpointer      user_data)
+{
+  GInputStream *stream = G_INPUT_STREAM (source_object);
+
+  g_input_stream_clear_pending (stream);
+  if (stream->priv->outstanding_callback)
+    (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+static void
+async_ready_close_callback_wrapper (GObject      *source_object,
+				    GAsyncResult *res,
+				    gpointer      user_data)
+{
+  GInputStream *stream = G_INPUT_STREAM (source_object);
+
+  g_input_stream_clear_pending (stream);
+  stream->priv->closed = TRUE;
+  if (stream->priv->outstanding_callback)
+    (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+/**
+ * g_input_stream_read_async:
+ * @stream: A #GInputStream.
+ * @buffer: a buffer to read data into (which should be at least count bytes long).
+ * @count: the number of bytes that will be read from the stream
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ * of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Request an asynchronous read of @count bytes from the stream into the buffer
+ * starting at @buffer. When the operation is finished @callback will be called. 
+ * You can then call g_input_stream_read_finish() to get the result of the 
+ * operation.
+ *
+ * During an async request no other sync and async calls are allowed, and will
+ * result in %G_IO_ERROR_PENDING errors. 
+ *
+ * A value of @count larger than %G_MAXSSIZE will cause a %G_IO_ERROR_INVALID_ARGUMENT error.
+ *
+ * On success, the number of bytes read into the buffer will be passed to the
+ * callback. It is not an error if this is not the same as the requested size, as it
+ * can happen e.g. near the end of a file, but generally we try to read
+ * as many bytes as requested. Zero is returned on end of file
+ * (or if @count is zero),  but never otherwise.
+ *
+ * Any outstanding i/o request with higher priority (lower numerical value) will
+ * be executed before an outstanding request with lower priority. Default
+ * priority is %G_PRIORITY_DEFAULT.
+ *
+ * The asyncronous methods have a default fallback that uses threads to implement
+ * asynchronicity, so they are optional for inheriting classes. However, if you
+ * override one you must override all.
+ **/
+void
+g_input_stream_read_async (GInputStream        *stream,
+			   void                *buffer,
+			   gsize                count,
+			   int                  io_priority,
+			   GCancellable        *cancellable,
+			   GAsyncReadyCallback  callback,
+			   gpointer             user_data)
+{
+  GInputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_INPUT_STREAM (stream));
+  g_return_if_fail (buffer != NULL);
+
+  if (count == 0)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  callback,
+					  user_data,
+					  g_input_stream_read_async);
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+  
+  if (((gssize) count) < 0)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (stream),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+					   _("Too large count value passed to %s"),
+					   G_STRFUNC);
+      return;
+    }
+
+  if (!g_input_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  class->read_async (stream, buffer, count, io_priority, cancellable,
+		     async_ready_callback_wrapper, user_data);
+}
+
+/**
+ * g_input_stream_read_finish:
+ * @stream: a #GInputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes an asynchronous stream read operation. 
+ * 
+ * Returns: number of bytes read in, or -1 on error.
+ **/
+gssize
+g_input_stream_read_finish (GInputStream  *stream,
+			    GAsyncResult  *result,
+			    GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  GInputStreamClass *class;
+  
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), -1);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), -1);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return -1;
+
+      /* Special case read of 0 bytes */
+      if (g_simple_async_result_get_source_tag (simple) == g_input_stream_read_async)
+	return 0;
+    }
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  return class->read_finish (stream, result, error);
+}
+
+/**
+ * g_input_stream_skip_async:
+ * @stream: A #GInputStream.
+ * @count: the number of bytes that will be skipped from the stream
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ * of the request. 
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Request an asynchronous skip of @count bytes from the stream into the buffer
+ * starting at @buffer. When the operation is finished @callback will be called. 
+ * You can then call g_input_stream_skip_finish() to get the result of the 
+ * operation.
+ *
+ * During an async request no other sync and async calls are allowed, and will
+ * result in %G_IO_ERROR_PENDING errors. 
+ *
+ * A value of @count larger than %G_MAXSSIZE will cause a %G_IO_ERROR_INVALID_ARGUMENT error.
+ *
+ * On success, the number of bytes skipped will be passed to the
+ * callback. It is not an error if this is not the same as the requested size, as it
+ * can happen e.g. near the end of a file, but generally we try to skip
+ * as many bytes as requested. Zero is returned on end of file
+ * (or if @count is zero), but never otherwise.
+ *
+ * Any outstanding i/o request with higher priority (lower numerical value) will
+ * be executed before an outstanding request with lower priority. Default
+ * priority is %G_PRIORITY_DEFAULT.
+ *
+ * The asyncronous methods have a default fallback that uses threads to implement
+ * asynchronicity, so they are optional for inheriting classes. However, if you
+ * override one you must override all.
+ **/
+void
+g_input_stream_skip_async (GInputStream        *stream,
+			   gsize                count,
+			   int                  io_priority,
+			   GCancellable        *cancellable,
+			   GAsyncReadyCallback  callback,
+			   gpointer             user_data)
+{
+  GInputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_INPUT_STREAM (stream));
+
+  if (count == 0)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  callback,
+					  user_data,
+					  g_input_stream_skip_async);
+
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+  
+  if (((gssize) count) < 0)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (stream),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+					   _("Too large count value passed to %s"),
+					   G_STRFUNC);
+      return;
+    }
+
+  if (!g_input_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  class->skip_async (stream, count, io_priority, cancellable,
+		     async_ready_callback_wrapper, user_data);
+}
+
+/**
+ * g_input_stream_skip_finish:
+ * @stream: a #GInputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes a stream skip operation.
+ * 
+ * Returns: the size of the bytes skipped, or %-1 on error.
+ **/
+gssize
+g_input_stream_skip_finish (GInputStream  *stream,
+			    GAsyncResult  *result,
+			    GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  GInputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), -1);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), -1);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return -1;
+
+      /* Special case skip of 0 bytes */
+      if (g_simple_async_result_get_source_tag (simple) == g_input_stream_skip_async)
+	return 0;
+    }
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  return class->skip_finish (stream, result, error);
+}
+
+/**
+ * g_input_stream_close_async:
+ * @stream: A #GInputStream.
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> 
+ * of the request. 
+ * @cancellable: optional cancellable object
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Requests an asynchronous closes of the stream, releasing resources related to it.
+ * When the operation is finished @callback will be called. 
+ * You can then call g_input_stream_close_finish() to get the result of the 
+ * operation.
+ *
+ * For behaviour details see g_input_stream_close().
+ *
+ * The asyncronous methods have a default fallback that uses threads to implement
+ * asynchronicity, so they are optional for inheriting classes. However, if you
+ * override one you must override all.
+ **/
+void
+g_input_stream_close_async (GInputStream        *stream,
+			    int                  io_priority,
+			    GCancellable        *cancellable,
+			    GAsyncReadyCallback  callback,
+			    gpointer             user_data)
+{
+  GInputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_INPUT_STREAM (stream));
+
+  if (stream->priv->closed)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  callback,
+					  user_data,
+					  g_input_stream_close_async);
+
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+
+  if (!g_input_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+  
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  class->close_async (stream, io_priority, cancellable,
+		      async_ready_close_callback_wrapper, user_data);
+}
+
+/**
+ * g_input_stream_close_finish:
+ * @stream: a #GInputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes closing a stream asynchronously, started from g_input_stream_close_async().
+ * 
+ * Returns: %TRUE if the stream was closed successfully.
+ **/
+gboolean
+g_input_stream_close_finish (GInputStream  *stream,
+			     GAsyncResult  *result,
+			     GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  GInputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+
+      /* Special case already closed */
+      if (g_simple_async_result_get_source_tag (simple) == g_input_stream_close_async)
+	return TRUE;
+    }
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+  return class->close_finish (stream, result, error);
+}
+
+/**
+ * g_input_stream_is_closed:
+ * @stream: input stream.
+ * 
+ * Checks if an input stream is closed.
+ * 
+ * Returns: %TRUE if the stream is closed.
+ **/
+gboolean
+g_input_stream_is_closed (GInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), TRUE);
+  
+  return stream->priv->closed;
+}
+ 
+/**
+ * g_input_stream_has_pending:
+ * @stream: input stream.
+ * 
+ * Checks if an input stream has pending actions.
+ * 
+ * Returns: %TRUE if @stream has pending actions.
+ **/  
+gboolean
+g_input_stream_has_pending (GInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), TRUE);
+  
+  return stream->priv->pending;
+}
+
+/**
+ * g_input_stream_set_pending:
+ * @stream: input stream
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Sets @stream to have actions pending. If the pending flag is
+ * already set or @stream is closed, it will return %FALSE and set
+ * @error.
+ *
+ * Return value: %TRUE if pending was previously unset and is now set.
+ **/
+gboolean
+g_input_stream_set_pending (GInputStream *stream, GError **error)
+{
+  g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
+  
+  if (stream->priv->closed)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                           _("Stream is already closed"));
+      return FALSE;
+    }
+  
+  if (stream->priv->pending)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PENDING,
+		/* Translators: This is an error you get if there is already an
+		 * operation running against this stream when you try to start
+		 * one */
+		 _("Stream has outstanding operation"));
+      return FALSE;
+    }
+  
+  stream->priv->pending = TRUE;
+  return TRUE;
+}
+
+/**
+ * g_input_stream_clear_pending:
+ * @stream: input stream
+ * 
+ * Clears the pending flag on @stream.
+ **/
+void
+g_input_stream_clear_pending (GInputStream *stream)
+{
+  g_return_if_fail (G_IS_INPUT_STREAM (stream));
+  
+  stream->priv->pending = FALSE;
+}
+
+/********************************************
+ *   Default implementation of async ops    *
+ ********************************************/
+
+typedef struct {
+  void              *buffer;
+  gsize              count_requested;
+  gssize             count_read;
+} ReadData;
+
+static void
+read_async_thread (GSimpleAsyncResult *res,
+		   GObject            *object,
+		   GCancellable       *cancellable)
+{
+  ReadData *op;
+  GInputStreamClass *class;
+  GError *error = NULL;
+ 
+  op = g_simple_async_result_get_op_res_gpointer (res);
+
+  class = G_INPUT_STREAM_GET_CLASS (object);
+
+  op->count_read = class->read_fn (G_INPUT_STREAM (object),
+				   op->buffer, op->count_requested,
+				   cancellable, &error);
+  if (op->count_read == -1)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+static void
+g_input_stream_real_read_async (GInputStream        *stream,
+				void                *buffer,
+				gsize                count,
+				int                  io_priority,
+				GCancellable        *cancellable,
+				GAsyncReadyCallback  callback,
+				gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  ReadData *op;
+  
+  op = g_new (ReadData, 1);
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_input_stream_real_read_async);
+  g_simple_async_result_set_op_res_gpointer (res, op, g_free);
+  op->buffer = buffer;
+  op->count_requested = count;
+  
+  g_simple_async_result_run_in_thread (res, read_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gssize
+g_input_stream_real_read_finish (GInputStream  *stream,
+				 GAsyncResult  *result,
+				 GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  ReadData *op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+	    g_input_stream_real_read_async);
+
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+
+  return op->count_read;
+}
+
+typedef struct {
+  gsize count_requested;
+  gssize count_skipped;
+} SkipData;
+
+
+static void
+skip_async_thread (GSimpleAsyncResult *res,
+		   GObject            *object,
+		   GCancellable       *cancellable)
+{
+  SkipData *op;
+  GInputStreamClass *class;
+  GError *error = NULL;
+  
+  class = G_INPUT_STREAM_GET_CLASS (object);
+  op = g_simple_async_result_get_op_res_gpointer (res);
+  op->count_skipped = class->skip (G_INPUT_STREAM (object),
+				   op->count_requested,
+				   cancellable, &error);
+  if (op->count_skipped == -1)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+typedef struct {
+  char buffer[8192];
+  gsize count;
+  gsize count_skipped;
+  int io_prio;
+  GCancellable *cancellable;
+  gpointer user_data;
+  GAsyncReadyCallback callback;
+} SkipFallbackAsyncData;
+
+static void
+skip_callback_wrapper (GObject      *source_object,
+		       GAsyncResult *res,
+		       gpointer      user_data)
+{
+  GInputStreamClass *class;
+  SkipFallbackAsyncData *data = user_data;
+  SkipData *op;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+  gssize ret;
+
+  ret = g_input_stream_read_finish (G_INPUT_STREAM (source_object), res, &error);
+
+  if (ret > 0)
+    {
+      data->count -= ret;
+      data->count_skipped += ret;
+
+      if (data->count > 0)
+	{
+	  class = G_INPUT_STREAM_GET_CLASS (source_object);
+	  class->read_async (G_INPUT_STREAM (source_object), data->buffer, MIN (8192, data->count), data->io_prio, data->cancellable,
+			     skip_callback_wrapper, data);
+	  return;
+	}
+    }
+
+  op = g_new0 (SkipData, 1);
+  op->count_skipped = data->count_skipped;
+  simple = g_simple_async_result_new (source_object,
+				      data->callback, data->user_data,
+				      g_input_stream_real_skip_async);
+
+  g_simple_async_result_set_op_res_gpointer (simple, op, g_free);
+
+  if (ret == -1)
+    {
+      if (data->count_skipped && 
+	  error->domain == G_IO_ERROR &&
+	  error->code == G_IO_ERROR_CANCELLED)
+	{ /* No error, return partial read */ }
+      else
+	g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+  
+  g_free (data);
+ }
+
+static void
+g_input_stream_real_skip_async (GInputStream        *stream,
+				gsize                count,
+				int                  io_priority,
+				GCancellable        *cancellable,
+				GAsyncReadyCallback  callback,
+				gpointer             user_data)
+{
+  GInputStreamClass *class;
+  SkipData *op;
+  SkipFallbackAsyncData *data;
+  GSimpleAsyncResult *res;
+
+  class = G_INPUT_STREAM_GET_CLASS (stream);
+
+  if (class->read_async == g_input_stream_real_read_async)
+    {
+      /* Read is thread-using async fallback.
+       * Make skip use threads too, so that we can use a possible sync skip
+       * implementation. */
+      op = g_new0 (SkipData, 1);
+      
+      res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data,
+				       g_input_stream_real_skip_async);
+
+      g_simple_async_result_set_op_res_gpointer (res, op, g_free);
+
+      op->count_requested = count;
+
+      g_simple_async_result_run_in_thread (res, skip_async_thread, io_priority, cancellable);
+      g_object_unref (res);
+    }
+  else
+    {
+      /* TODO: Skip fallback uses too much memory, should do multiple read calls */
+      
+      /* There is a custom async read function, lets use that. */
+      data = g_new (SkipFallbackAsyncData, 1);
+      data->count = count;
+      data->count_skipped = 0;
+      data->io_prio = io_priority;
+      data->cancellable = cancellable;
+      data->callback = callback;
+      data->user_data = user_data;
+      class->read_async (stream, data->buffer, MIN (8192, count), io_priority, cancellable,
+			 skip_callback_wrapper, data);
+    }
+
+}
+
+static gssize
+g_input_stream_real_skip_finish (GInputStream  *stream,
+				 GAsyncResult  *result,
+				 GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  SkipData *op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_input_stream_real_skip_async);
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  return op->count_skipped;
+}
+
+static void
+close_async_thread (GSimpleAsyncResult *res,
+		    GObject            *object,
+		    GCancellable       *cancellable)
+{
+  GInputStreamClass *class;
+  GError *error = NULL;
+  gboolean result;
+
+  /* Auto handling of cancelation disabled, and ignore
+     cancellation, since we want to close things anyway, although
+     possibly in a quick-n-dirty way. At least we never want to leak
+     open handles */
+  
+  class = G_INPUT_STREAM_GET_CLASS (object);
+  result = class->close_fn (G_INPUT_STREAM (object), cancellable, &error);
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+static void
+g_input_stream_real_close_async (GInputStream        *stream,
+				 int                  io_priority,
+				 GCancellable        *cancellable,
+				 GAsyncReadyCallback  callback,
+				 gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  
+  res = g_simple_async_result_new (G_OBJECT (stream),
+				   callback,
+				   user_data,
+				   g_input_stream_real_close_async);
+
+  g_simple_async_result_set_handle_cancellation (res, FALSE);
+  
+  g_simple_async_result_run_in_thread (res,
+				       close_async_thread,
+				       io_priority,
+				       cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_input_stream_real_close_finish (GInputStream  *stream,
+				  GAsyncResult  *result,
+				  GError       **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_input_stream_real_close_async);
+  return TRUE;
+}
+
+#define __G_INPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/ginputstream.h b/gio/ginputstream.h
new file mode 100644
index 0000000..8179529
--- /dev/null
+++ b/gio/ginputstream.h
@@ -0,0 +1,172 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_INPUT_STREAM_H__
+#define __G_INPUT_STREAM_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_INPUT_STREAM         (g_input_stream_get_type ())
+#define G_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INPUT_STREAM, GInputStream))
+#define G_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_INPUT_STREAM, GInputStreamClass))
+#define G_IS_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INPUT_STREAM))
+#define G_IS_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INPUT_STREAM))
+#define G_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_INPUT_STREAM, GInputStreamClass))
+
+/**
+ * GInputStream:
+ *
+ * Base class for streaming input operations.
+ **/
+typedef struct _GInputStreamClass    GInputStreamClass;
+typedef struct _GInputStreamPrivate  GInputStreamPrivate;
+
+struct _GInputStream
+{
+  GObject parent_instance;
+
+  /*< private >*/
+  GInputStreamPrivate *priv;
+};
+
+struct _GInputStreamClass
+{
+  GObjectClass parent_class;
+
+  /* Sync ops: */
+
+  gssize   (* read_fn)      (GInputStream        *stream,
+                             void                *buffer,
+                             gsize                count,
+                             GCancellable        *cancellable,
+                             GError             **error);
+  gssize   (* skip)         (GInputStream        *stream,
+                             gsize                count,
+                             GCancellable        *cancellable,
+                             GError             **error);
+  gboolean (* close_fn)	    (GInputStream        *stream,
+                             GCancellable        *cancellable,
+                             GError             **error);
+
+  /* Async ops: (optional in derived classes) */
+  void     (* read_async)   (GInputStream        *stream,
+                             void                *buffer,
+                             gsize                count,
+                             int                  io_priority,
+                             GCancellable        *cancellable,
+                             GAsyncReadyCallback  callback,
+                             gpointer             user_data);
+  gssize   (* read_finish)  (GInputStream        *stream,
+                             GAsyncResult        *result,
+                             GError             **error);
+  void     (* skip_async)   (GInputStream        *stream,
+                             gsize                count,
+                             int                  io_priority,
+                             GCancellable        *cancellable,
+                             GAsyncReadyCallback  callback,
+                             gpointer             user_data);
+  gssize   (* skip_finish)  (GInputStream        *stream,
+                             GAsyncResult        *result,
+                             GError             **error);
+  void     (* close_async)  (GInputStream        *stream,
+                             int                  io_priority,
+                             GCancellable        *cancellable,
+                             GAsyncReadyCallback  callback,
+                             gpointer             user_data);
+  gboolean (* close_finish) (GInputStream        *stream,
+                             GAsyncResult        *result,
+                             GError             **error);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType    g_input_stream_get_type      (void) G_GNUC_CONST;
+
+gssize   g_input_stream_read          (GInputStream          *stream,
+				       void                  *buffer,
+				       gsize                  count,
+				       GCancellable          *cancellable,
+				       GError               **error);
+gboolean g_input_stream_read_all      (GInputStream          *stream,
+				       void                  *buffer,
+				       gsize                  count,
+				       gsize                 *bytes_read,
+				       GCancellable          *cancellable,
+				       GError               **error);
+gssize   g_input_stream_skip          (GInputStream          *stream,
+				       gsize                  count,
+				       GCancellable          *cancellable,
+				       GError               **error);
+gboolean g_input_stream_close         (GInputStream          *stream,
+				       GCancellable          *cancellable,
+				       GError               **error);
+void     g_input_stream_read_async    (GInputStream          *stream,
+				       void                  *buffer,
+				       gsize                  count,
+				       int                    io_priority,
+				       GCancellable          *cancellable,
+				       GAsyncReadyCallback    callback,
+				       gpointer               user_data);
+gssize   g_input_stream_read_finish   (GInputStream          *stream,
+				       GAsyncResult          *result,
+				       GError               **error);
+void     g_input_stream_skip_async    (GInputStream          *stream,
+				       gsize                  count,
+				       int                    io_priority,
+				       GCancellable          *cancellable,
+				       GAsyncReadyCallback    callback,
+				       gpointer               user_data);
+gssize   g_input_stream_skip_finish   (GInputStream          *stream,
+				       GAsyncResult          *result,
+				       GError               **error);
+void     g_input_stream_close_async   (GInputStream          *stream,
+				       int                    io_priority,
+				       GCancellable          *cancellable,
+				       GAsyncReadyCallback    callback,
+				       gpointer               user_data);
+gboolean g_input_stream_close_finish  (GInputStream          *stream,
+				       GAsyncResult          *result,
+				       GError               **error);
+
+/* For implementations: */
+
+gboolean g_input_stream_is_closed     (GInputStream          *stream);
+gboolean g_input_stream_has_pending   (GInputStream          *stream);
+gboolean g_input_stream_set_pending   (GInputStream          *stream,
+				       GError               **error);
+void     g_input_stream_clear_pending (GInputStream          *stream);
+
+G_END_DECLS
+
+#endif /* __G_INPUT_STREAM_H__ */
diff --git a/gio/gio-marshal.list b/gio/gio-marshal.list
new file mode 100644
index 0000000..ab176d6
--- /dev/null
+++ b/gio/gio-marshal.list
@@ -0,0 +1,4 @@
+VOID:STRING,STRING,STRING,FLAGS
+VOID:STRING,BOXED
+VOID:BOOLEAN,POINTER
+VOID:OBJECT,OBJECT,ENUM
diff --git a/gio/gio.h b/gio/gio.h
new file mode 100644
index 0000000..e3a0b14
--- /dev/null
+++ b/gio/gio.h
@@ -0,0 +1,74 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_IO_H__
+#define __G_IO_H__
+
+#define __GIO_GIO_H_INSIDE__
+
+#include <gio/giotypes.h>
+
+#include <gio/gappinfo.h>
+#include <gio/gasyncresult.h>
+#include <gio/gbufferedinputstream.h>
+#include <gio/gbufferedoutputstream.h>
+#include <gio/gcancellable.h>
+#include <gio/gcontenttype.h>
+#include <gio/gdatainputstream.h>
+#include <gio/gdataoutputstream.h>
+#include <gio/gdrive.h>
+#include <gio/gemblemedicon.h>
+#include <gio/gfile.h>
+#include <gio/gfileattribute.h>
+#include <gio/gfileenumerator.h>
+#include <gio/gfileicon.h>
+#include <gio/gfileinfo.h>
+#include <gio/gfileinputstream.h>
+#include <gio/gfilemonitor.h>
+#include <gio/gfilenamecompleter.h>
+#include <gio/gfileoutputstream.h>
+#include <gio/gfilterinputstream.h>
+#include <gio/gfilteroutputstream.h>
+#include <gio/gicon.h>
+#include <gio/ginputstream.h>
+#include <gio/gioenums.h>
+#include <gio/gioenumtypes.h>
+#include <gio/gioerror.h>
+#include <gio/giomodule.h>
+#include <gio/gioscheduler.h>
+#include <gio/gloadableicon.h>
+#include <gio/gmemoryinputstream.h>
+#include <gio/gmemoryoutputstream.h>
+#include <gio/gmount.h>
+#include <gio/gmountoperation.h>
+#include <gio/gnativevolumemonitor.h>
+#include <gio/goutputstream.h>
+#include <gio/gseekable.h>
+#include <gio/gsimpleasyncresult.h>
+#include <gio/gthemedicon.h>
+#include <gio/gvfs.h>
+#include <gio/gvolume.h>
+#include <gio/gvolumemonitor.h>
+
+#undef __GIO_GIO_H_INSIDE__
+
+#endif /* __G_IO_H__ */
diff --git a/gio/gio.symbols b/gio/gio.symbols
new file mode 100644
index 0000000..f73e9ff
--- /dev/null
+++ b/gio/gio.symbols
@@ -0,0 +1,857 @@
+/* This file lists all exported symbols. It is used to generate
+ * the gio.def file used to control exports on Windows and the
+ * gioalias.h/gioaliasdef.c files used to avoid PLT entries for
+ * internal uses of exported functions (see makegioalias.pl).
+ *
+ * Every symbol must be included in the right
+ * #ifdef IN_HEADER(sym) #endif and
+ * #ifdef IN_FILE(sym) #endif sections.
+ */
+
+#ifdef ALL_FILES
+#define IN_FILE(x) 1
+#define IN_HEADER(x) 1
+#endif
+
+#if IN_HEADER(__G_VFS_H__)
+#if IN_FILE(__G_VFS_C__)
+g_vfs_get_type G_GNUC_CONST
+g_vfs_is_active
+g_vfs_get_file_for_path
+g_vfs_get_file_for_uri
+g_vfs_get_supported_uri_schemes
+g_vfs_parse_name
+g_vfs_get_default
+g_vfs_get_local
+#endif
+#endif
+
+#if IN_HEADER(__G_APP_INFO_H__)
+#if IN_FILE(__G_APP_INFO_C__)
+g_app_info_get_type G_GNUC_CONST
+g_app_launch_context_get_type G_GNUC_CONST
+g_app_info_dup
+g_app_info_equal
+g_app_info_get_id
+g_app_info_get_name
+g_app_info_get_description
+g_app_info_get_executable
+g_app_info_get_commandline
+g_app_info_get_icon
+g_app_info_launch
+g_app_info_supports_uris
+g_app_info_supports_files
+g_app_info_launch_uris
+g_app_info_should_show
+g_app_info_set_as_default_for_type
+g_app_info_set_as_default_for_extension
+g_app_info_add_supports_type
+g_app_info_can_remove_supports_type
+g_app_info_remove_supports_type
+g_app_info_launch_default_for_uri
+g_app_info_can_delete
+g_app_info_delete
+g_app_launch_context_new
+g_app_launch_context_get_display
+g_app_launch_context_get_startup_notify_id
+g_app_launch_context_launch_failed
+#endif
+
+#if IN_FILE(__G_DESKTOP_APP_INFO_C__)
+g_app_info_create_from_commandline
+g_app_info_get_all
+g_app_info_get_all_for_type
+g_app_info_get_default_for_type
+g_app_info_get_default_for_uri_scheme
+g_app_info_reset_type_associations
+#endif
+#endif
+
+
+#if IN_HEADER(__G_DESKTOP_APP_INFO_H__)
+#if IN_FILE(__G_DESKTOP_APP_INFO_C__)
+#ifdef G_OS_UNIX
+g_desktop_app_info_new_from_filename
+g_desktop_app_info_new_from_keyfile
+g_desktop_app_info_new
+g_desktop_app_info_get_type G_GNUC_CONST
+g_desktop_app_info_get_is_hidden
+g_desktop_app_info_set_desktop_env
+g_desktop_app_info_lookup_get_type G_GNUC_CONST
+g_desktop_app_info_lookup_get_default_for_uri_scheme
+#endif
+#endif
+#endif
+
+
+#if IN_HEADER(__G_ASYNC_RESULT_H__)
+#if IN_FILE(__G_ASYNC_RESULT_C__)
+g_async_result_get_type G_GNUC_CONST
+g_async_result_get_user_data
+g_async_result_get_source_object
+#endif
+#endif
+
+#if IN_HEADER(__G_BUFFERED_INPUT_STREAM_H__)
+#if IN_FILE(__G_BUFFERED_INPUT_STREAM_C__)
+g_buffered_input_stream_get_type G_GNUC_CONST
+g_buffered_input_stream_new
+g_buffered_input_stream_new_sized
+g_buffered_input_stream_get_buffer_size
+g_buffered_input_stream_set_buffer_size
+g_buffered_input_stream_get_available
+g_buffered_input_stream_peek
+g_buffered_input_stream_peek_buffer
+g_buffered_input_stream_fill
+g_buffered_input_stream_fill_async
+g_buffered_input_stream_fill_finish
+g_buffered_input_stream_read_byte
+#endif
+#endif
+
+#if IN_HEADER(__G_BUFFERED_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_BUFFERED_OUTPUT_STREAM_C__)
+g_buffered_output_stream_get_type G_GNUC_CONST;
+g_buffered_output_stream_new
+g_buffered_output_stream_new_sized
+g_buffered_output_stream_get_buffer_size
+g_buffered_output_stream_set_buffer_size
+g_buffered_output_stream_get_auto_grow
+g_buffered_output_stream_set_auto_grow
+#endif
+#endif
+
+#if IN_HEADER(__G_CANCELLABLE_H__)
+#if IN_FILE(__G_CANCELLABLE_C__)
+g_cancellable_get_type G_GNUC_CONST
+g_cancellable_new
+g_cancellable_is_cancelled
+g_cancellable_set_error_if_cancelled
+g_cancellable_get_fd
+g_cancellable_make_pollfd
+g_cancellable_get_current
+g_cancellable_push_current
+g_cancellable_pop_current
+g_cancellable_reset
+g_cancellable_cancel
+#endif
+#endif
+
+#if IN_HEADER(__G_CONTENT_TYPE_H__)
+#if IN_FILE(__G_CONTENT_TYPE_C__)
+g_content_type_equals
+g_content_type_is_a
+g_content_type_is_unknown
+g_content_type_get_description
+g_content_type_get_mime_type
+g_content_type_get_icon
+g_content_type_can_be_executable
+g_content_type_from_mime_type
+g_content_type_guess
+g_content_type_guess_for_tree
+g_content_types_get_registered
+#endif
+#endif
+
+#if IN_HEADER(__G_DATA_INPUT_STREAM_H__)
+#if IN_FILE(__G_DATA_INPUT_STREAM_C__)
+g_data_input_stream_get_type G_GNUC_CONST
+g_data_input_stream_new
+g_data_input_stream_set_byte_order
+g_data_input_stream_get_byte_order
+g_data_input_stream_set_newline_type
+g_data_input_stream_get_newline_type
+g_data_input_stream_read_byte
+g_data_input_stream_read_int16
+g_data_input_stream_read_uint16
+g_data_input_stream_read_int32
+g_data_input_stream_read_uint32
+g_data_input_stream_read_int64
+g_data_input_stream_read_uint64
+g_data_input_stream_read_line
+g_data_input_stream_read_line_async
+g_data_input_stream_read_line_finish
+g_data_input_stream_read_until
+g_data_input_stream_read_until_async
+g_data_input_stream_read_until_finish
+#endif
+#endif
+
+#if IN_HEADER(__G_DATA_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_DATA_OUTPUT_STREAM_C__)
+g_data_output_stream_get_type G_GNUC_CONST
+g_data_output_stream_new
+g_data_output_stream_set_byte_order
+g_data_output_stream_get_byte_order
+g_data_output_stream_put_byte
+g_data_output_stream_put_int16
+g_data_output_stream_put_uint16
+g_data_output_stream_put_int32
+g_data_output_stream_put_uint32
+g_data_output_stream_put_int64
+g_data_output_stream_put_uint64
+g_data_output_stream_put_string
+#endif
+#endif
+
+#if IN_HEADER(__G_DRIVE_H__)
+#if IN_FILE(__G_DRIVE_C__)
+g_drive_get_type G_GNUC_CONST
+g_drive_get_name
+g_drive_get_icon
+g_drive_has_volumes
+g_drive_get_volumes
+g_drive_is_media_removable
+g_drive_has_media
+g_drive_is_media_check_automatic
+g_drive_can_poll_for_media
+g_drive_can_eject
+g_drive_eject
+g_drive_eject_finish
+g_drive_poll_for_media
+g_drive_poll_for_media_finish
+g_drive_get_identifier
+g_drive_enumerate_identifiers
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_ATTRIBUTE_H__)
+#if IN_FILE(__G_FILE_ATTRIBUTE_C__)
+g_file_attribute_info_list_new
+g_file_attribute_info_list_ref
+g_file_attribute_info_list_unref
+g_file_attribute_info_list_dup
+g_file_attribute_info_list_get_type G_GNUC_CONST
+g_file_attribute_info_list_lookup
+g_file_attribute_info_list_add
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_H__)
+#if IN_FILE(__G_FILE_C__)
+g_file_get_type G_GNUC_CONST
+g_file_new_for_path
+g_file_new_for_uri
+g_file_new_for_commandline_arg
+g_file_parse_name
+g_file_dup
+g_file_hash
+g_file_equal
+g_file_get_basename
+g_file_get_path
+g_file_get_uri
+g_file_get_parse_name
+g_file_get_parent
+g_file_get_child
+g_file_get_child_for_display_name
+g_file_has_prefix
+g_file_get_relative_path
+g_file_resolve_relative_path
+g_file_is_native
+g_file_has_uri_scheme
+g_file_get_uri_scheme
+g_file_read
+g_file_read_async
+g_file_read_finish
+g_file_append_to
+g_file_create
+g_file_replace
+g_file_append_to_async
+g_file_append_to_finish
+g_file_create_async
+g_file_create_finish
+g_file_replace_async
+g_file_replace_finish
+g_file_query_exists
+g_file_query_info
+g_file_query_info_async
+g_file_query_info_finish
+g_file_query_file_type
+g_file_query_filesystem_info
+g_file_query_filesystem_info_async
+g_file_query_filesystem_info_finish
+g_file_find_enclosing_mount
+g_file_find_enclosing_mount_async
+g_file_find_enclosing_mount_finish
+g_file_enumerate_children
+g_file_enumerate_children_async
+g_file_enumerate_children_finish
+g_file_set_display_name
+g_file_set_display_name_async
+g_file_set_display_name_finish
+g_file_delete
+g_file_trash
+g_file_copy
+g_file_copy_async
+g_file_copy_finish
+g_file_move
+g_file_make_directory
+g_file_make_directory_with_parents
+g_file_make_symbolic_link
+g_file_query_settable_attributes
+g_file_query_writable_namespaces
+g_file_set_attribute
+g_file_set_attributes_from_info
+g_file_set_attributes_async
+g_file_set_attributes_finish
+g_file_set_attribute_string
+g_file_set_attribute_byte_string
+g_file_set_attribute_uint32
+g_file_set_attribute_int32
+g_file_set_attribute_uint64
+g_file_set_attribute_int64
+g_file_mount_enclosing_volume
+g_file_mount_enclosing_volume_finish
+g_file_mount_mountable
+g_file_mount_mountable_finish
+g_file_unmount_mountable
+g_file_unmount_mountable_finish
+g_file_eject_mountable
+g_file_eject_mountable_finish
+g_file_copy_attributes
+g_file_monitor_directory
+g_file_monitor_file
+g_file_monitor
+g_file_query_default_handler
+g_file_load_contents
+g_file_load_contents_async
+g_file_load_contents_finish
+g_file_load_partial_contents_async
+g_file_load_partial_contents_finish
+g_file_replace_contents
+g_file_replace_contents_async
+g_file_replace_contents_finish
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_ENUMERATOR_H__)
+#if IN_FILE(__G_FILE_ENUMERATOR_C__)
+g_file_enumerator_get_type G_GNUC_CONST
+g_file_enumerator_next_file
+g_file_enumerator_close
+g_file_enumerator_next_files_async
+g_file_enumerator_next_files_finish
+g_file_enumerator_close_async
+g_file_enumerator_close_finish
+g_file_enumerator_is_closed
+g_file_enumerator_has_pending
+g_file_enumerator_set_pending
+g_file_enumerator_get_container
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_ICON_H__)
+#if IN_FILE(__G_FILE_ICON_C__)
+g_file_icon_get_type G_GNUC_CONST
+g_file_icon_new
+g_file_icon_get_file
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_INFO_H__)
+#if IN_FILE(__G_FILE_INFO_C__)
+g_file_info_get_type  G_GNUC_CONST
+g_file_info_new 
+g_file_info_dup 
+g_file_info_copy_into 
+g_file_info_has_attribute 
+g_file_info_list_attributes 
+g_file_info_get_attribute_type 
+g_file_info_remove_attribute 
+g_file_info_get_attribute_status 
+g_file_info_get_attribute_data 
+g_file_info_get_attribute_as_string 
+g_file_info_get_attribute_string 
+g_file_info_get_attribute_byte_string 
+g_file_info_get_attribute_boolean 
+g_file_info_get_attribute_uint32 
+g_file_info_get_attribute_int32 
+g_file_info_get_attribute_uint64 
+g_file_info_get_attribute_int64 
+g_file_info_get_attribute_object 
+g_file_info_set_attribute 
+g_file_info_set_attribute_string 
+g_file_info_set_attribute_byte_string 
+g_file_info_set_attribute_boolean 
+g_file_info_set_attribute_uint32 
+g_file_info_set_attribute_int32 
+g_file_info_set_attribute_uint64 
+g_file_info_set_attribute_int64 
+g_file_info_set_attribute_object 
+g_file_info_clear_status 
+g_file_info_get_file_type 
+g_file_info_get_is_hidden 
+g_file_info_get_is_backup 
+g_file_info_get_is_symlink 
+g_file_info_get_name 
+g_file_info_get_display_name 
+g_file_info_get_edit_name 
+g_file_info_get_icon 
+g_file_info_get_content_type 
+g_file_info_get_size 
+g_file_info_get_modification_time 
+g_file_info_get_symlink_target 
+g_file_info_get_etag 
+g_file_info_get_sort_order 
+g_file_info_set_attribute_mask 
+g_file_info_unset_attribute_mask 
+g_file_info_set_file_type 
+g_file_info_set_is_hidden 
+g_file_info_set_is_symlink 
+g_file_info_set_name 
+g_file_info_set_display_name 
+g_file_info_set_edit_name 
+g_file_info_set_icon 
+g_file_info_set_content_type 
+g_file_info_set_size 
+g_file_info_set_modification_time 
+g_file_info_set_symlink_target 
+g_file_info_set_sort_order 
+g_file_attribute_matcher_new 
+g_file_attribute_matcher_ref 
+g_file_attribute_matcher_unref 
+g_file_attribute_matcher_matches 
+g_file_attribute_matcher_matches_only 
+g_file_attribute_matcher_enumerate_namespace 
+g_file_attribute_matcher_enumerate_next 
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_INPUT_STREAM_H__)
+#if IN_FILE(__G_FILE_INPUT_STREAM_C__)
+g_file_input_stream_get_type  G_GNUC_CONST
+g_file_input_stream_query_info 
+g_file_input_stream_query_info_async 
+g_file_input_stream_query_info_finish 
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_MONITOR_H__)
+#if IN_FILE(__G_FILE_MONITOR_C__)
+g_file_monitor_get_type  G_GNUC_CONST
+g_file_monitor_cancel 
+g_file_monitor_is_cancelled 
+g_file_monitor_set_rate_limit 
+g_file_monitor_emit_event 
+#endif
+#endif
+
+#if IN_HEADER(__G_FILENAME_COMPLETER_H__)
+#if IN_FILE(__G_FILENAME_COMPLETER_C__)
+g_filename_completer_get_type  G_GNUC_CONST
+g_filename_completer_new 
+g_filename_completer_get_completion_suffix 
+g_filename_completer_get_completions 
+g_filename_completer_set_dirs_only 
+#endif
+#endif
+
+#if IN_HEADER(__G_FILE_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_FILE_OUTPUT_STREAM_C__)
+g_file_output_stream_get_type  G_GNUC_CONST
+g_file_output_stream_query_info 
+g_file_output_stream_query_info_async 
+g_file_output_stream_query_info_finish 
+g_file_output_stream_get_etag 
+#endif
+#endif
+
+#if IN_HEADER(__G_FILTER_INPUT_STREAM_H__)
+#if IN_FILE(__G_FILTER_INPUT_STREAM_C__)
+g_filter_input_stream_get_type  G_GNUC_CONST
+g_filter_input_stream_get_base_stream 
+g_filter_input_stream_get_close_base_stream
+g_filter_input_stream_set_close_base_stream
+#endif
+#endif
+
+#if IN_HEADER(__G_FILTER_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_FILTER_OUTPUT_STREAM_C__)
+g_filter_output_stream_get_type  G_GNUC_CONST
+g_filter_output_stream_get_base_stream 
+g_filter_output_stream_get_close_base_stream
+g_filter_output_stream_set_close_base_stream
+#endif
+#endif
+
+#if IN_HEADER(__G_ICON_H__)
+#if IN_FILE(__G_ICON_C__)
+g_icon_get_type  G_GNUC_CONST
+g_icon_hash 
+g_icon_equal 
+g_icon_to_string
+g_icon_new_for_string
+#endif
+#endif
+
+#if IN_HEADER(__G_INPUT_STREAM_H__)
+#if IN_FILE(__G_INPUT_STREAM_C__)
+g_input_stream_get_type  G_GNUC_CONST
+g_input_stream_read 
+g_input_stream_read_all 
+g_input_stream_skip 
+g_input_stream_close 
+g_input_stream_read_async 
+g_input_stream_read_finish 
+g_input_stream_skip_async 
+g_input_stream_skip_finish 
+g_input_stream_close_async 
+g_input_stream_close_finish 
+g_input_stream_is_closed 
+g_input_stream_has_pending 
+g_input_stream_set_pending 
+g_input_stream_clear_pending
+#endif
+#endif
+
+#if IN_HEADER(__G_IO_ERROR_H__)
+#if IN_FILE(__G_IO_ERROR_C__)
+g_io_error_quark 
+g_io_error_from_errno 
+#endif
+#endif
+
+#if IN_HEADER(__G_IO_MODULE_H__)
+#if IN_FILE(__G_IO_MODULE_C__)
+g_io_module_get_type  G_GNUC_CONST
+g_io_module_new 
+g_io_modules_load_all_in_directory
+g_io_extension_point_register
+g_io_extension_point_lookup
+g_io_extension_point_set_required_type
+g_io_extension_point_get_required_type
+g_io_extension_point_get_extensions
+g_io_extension_point_get_extension_by_name
+g_io_extension_point_implement
+g_io_extension_get_type
+g_io_extension_get_name
+g_io_extension_get_priority
+g_io_extension_ref_class
+#endif
+#endif
+
+#if IN_HEADER(__G_IO_SCHEDULER_H__)
+#if IN_FILE(__G_IO_SCHEDULER_C__)
+g_io_scheduler_push_job
+g_io_scheduler_cancel_all_jobs
+g_io_scheduler_job_send_to_mainloop
+g_io_scheduler_job_send_to_mainloop_async
+#endif
+#endif
+
+#if IN_HEADER(__G_LOADABLE_ICON_H__)
+#if IN_FILE(__G_LOADABLE_ICON_C__)
+g_loadable_icon_get_type  G_GNUC_CONST
+g_loadable_icon_load 
+g_loadable_icon_load_async 
+g_loadable_icon_load_finish 
+#endif
+#endif
+
+#if IN_HEADER(__G_MEMORY_INPUT_STREAM_H__)
+#if IN_FILE(__G_MEMORY_INPUT_STREAM_C__)
+g_memory_input_stream_get_type  G_GNUC_CONST
+g_memory_input_stream_new
+g_memory_input_stream_new_from_data 
+g_memory_input_stream_add_data 
+#endif
+#endif
+
+#if IN_HEADER(__G_MEMORY_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_MEMORY_OUTPUT_STREAM_C__)
+g_memory_output_stream_get_type  G_GNUC_CONST
+g_memory_output_stream_new 
+g_memory_output_stream_get_data 
+g_memory_output_stream_get_data_size
+g_memory_output_stream_get_size
+#endif
+#endif
+
+#if IN_HEADER(__G_MOUNT_OPERATION_H__)
+#if IN_FILE(__G_MOUNT_OPERATION_C__)
+g_mount_operation_get_type  G_GNUC_CONST
+g_mount_operation_new 
+g_mount_operation_get_username 
+g_mount_operation_set_username 
+g_mount_operation_get_password 
+g_mount_operation_set_password 
+g_mount_operation_get_anonymous 
+g_mount_operation_set_anonymous 
+g_mount_operation_get_domain 
+g_mount_operation_set_domain 
+g_mount_operation_get_password_save 
+g_mount_operation_set_password_save 
+g_mount_operation_get_choice 
+g_mount_operation_set_choice 
+g_mount_operation_reply 
+#endif
+#endif
+
+#if IN_HEADER(__G_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_OUTPUT_STREAM_C__)
+g_output_stream_get_type  G_GNUC_CONST
+g_output_stream_write 
+g_output_stream_write_all 
+g_output_stream_splice 
+g_output_stream_flush 
+g_output_stream_close 
+g_output_stream_write_async 
+g_output_stream_write_finish 
+g_output_stream_splice_async 
+g_output_stream_splice_finish 
+g_output_stream_flush_async 
+g_output_stream_flush_finish 
+g_output_stream_close_async 
+g_output_stream_close_finish 
+g_output_stream_is_closed 
+g_output_stream_has_pending 
+g_output_stream_set_pending 
+g_output_stream_clear_pending
+#endif
+#endif
+
+#if IN_HEADER(__G_SEEKABLE_H__)
+#if IN_FILE(__G_SEEKABLE_C__)
+g_seekable_get_type  G_GNUC_CONST
+g_seekable_tell 
+g_seekable_can_seek 
+g_seekable_seek 
+g_seekable_can_truncate 
+g_seekable_truncate 
+#endif
+#endif
+
+#if IN_HEADER(__G_SIMPLE_ASYNC_RESULT_H__)
+#if IN_FILE(__G_SIMPLE_ASYNC_RESULT_C__)
+g_simple_async_result_get_type  G_GNUC_CONST
+g_simple_async_result_new 
+g_simple_async_result_new_error 
+g_simple_async_result_new_from_error 
+g_simple_async_result_set_op_res_gpointer 
+g_simple_async_result_get_op_res_gpointer 
+g_simple_async_result_set_op_res_gssize 
+g_simple_async_result_get_op_res_gssize 
+g_simple_async_result_set_op_res_gboolean 
+g_simple_async_result_get_op_res_gboolean 
+g_simple_async_result_get_source_tag 
+g_simple_async_result_set_handle_cancellation 
+g_simple_async_result_complete 
+g_simple_async_result_complete_in_idle 
+g_simple_async_result_run_in_thread 
+g_simple_async_result_set_from_error 
+g_simple_async_result_propagate_error 
+g_simple_async_result_set_error 
+g_simple_async_result_set_error_va 
+g_simple_async_result_is_valid
+g_simple_async_report_error_in_idle 
+g_simple_async_report_gerror_in_idle 
+#endif
+#endif
+
+#if IN_HEADER(__G_THEMED_ICON_H__)
+#if IN_FILE(__G_THEMED_ICON_C__)
+g_themed_icon_get_type  G_GNUC_CONST
+g_themed_icon_new
+g_themed_icon_new_with_default_fallbacks
+g_themed_icon_new_from_names
+g_themed_icon_get_names
+g_themed_icon_prepend_name
+g_themed_icon_append_name
+#endif
+#endif
+
+#if IN_HEADER(__G_UNIX_MOUNTS_H__)
+#if IN_FILE(__G_UNIX_MOUNTS_C__)
+#ifdef G_OS_UNIX
+g_unix_mount_free 
+g_unix_mount_point_free 
+g_unix_mount_compare 
+g_unix_mount_get_mount_path 
+g_unix_mount_get_device_path 
+g_unix_mount_get_fs_type 
+g_unix_mount_is_readonly 
+g_unix_mount_is_system_internal 
+g_unix_mount_guess_can_eject
+g_unix_mount_guess_should_display
+g_unix_mount_guess_name 
+g_unix_mount_guess_icon
+g_unix_mount_point_compare 
+g_unix_mount_point_get_mount_path 
+g_unix_mount_point_get_device_path 
+g_unix_mount_point_get_fs_type 
+g_unix_mount_point_is_readonly 
+g_unix_mount_point_is_user_mountable 
+g_unix_mount_point_is_loopback 
+g_unix_mount_point_guess_can_eject
+g_unix_mount_point_guess_name
+g_unix_mount_point_guess_icon
+g_unix_mount_points_get
+g_unix_mounts_get
+g_unix_mount_at 
+g_unix_mounts_changed_since 
+g_unix_mount_points_changed_since 
+g_unix_mount_monitor_get_type  G_GNUC_CONST
+g_unix_mount_monitor_new 
+g_unix_mount_monitor_set_rate_limit 
+g_unix_is_mount_path_system_internal
+#endif /* G_OS_UNIX */
+#endif
+#endif
+
+#if IN_HEADER(__G_UNIX_INPUT_STREAM_H__)
+#if IN_FILE(__G_UNIX_INPUT_STREAM_C__)
+#ifdef G_OS_UNIX
+g_unix_input_stream_get_type  G_GNUC_CONST
+g_unix_input_stream_new 
+g_unix_input_stream_set_close_fd
+g_unix_input_stream_get_close_fd
+g_unix_input_stream_get_fd
+#endif /* G_OS_UNIX */
+#endif
+#endif
+
+#if IN_HEADER(__G_UNIX_OUTPUT_STREAM_H__)
+#if IN_FILE(__G_UNIX_OUTPUT_STREAM_C__)
+#ifdef G_OS_UNIX
+g_unix_output_stream_get_type  G_GNUC_CONST
+g_unix_output_stream_new 
+g_unix_output_stream_set_close_fd
+g_unix_output_stream_get_close_fd
+g_unix_output_stream_get_fd
+#endif /* G_OS_UNIX */
+#endif
+#endif
+
+#if IN_HEADER(__G_MOUNT_H__)
+#if IN_FILE(__G_MOUNT_C__)
+g_mount_get_type  G_GNUC_CONST
+g_mount_get_root 
+g_mount_get_name 
+g_mount_get_icon 
+g_mount_get_uuid 
+g_mount_get_volume
+g_mount_get_drive 
+g_mount_can_unmount 
+g_mount_can_eject 
+g_mount_unmount 
+g_mount_unmount_finish 
+g_mount_eject 
+g_mount_eject_finish 
+g_mount_remount 
+g_mount_remount_finish 
+g_mount_guess_content_type
+g_mount_guess_content_type_finish
+g_mount_guess_content_type_sync
+g_mount_is_shadowed
+g_mount_shadow
+g_mount_unshadow
+#endif
+#endif
+
+#if IN_HEADER(__G_VOLUME_H__)
+#if IN_FILE(__G_VOLUME_C__)
+g_volume_get_type  G_GNUC_CONST
+g_volume_get_name 
+g_volume_get_icon 
+g_volume_get_uuid 
+g_volume_get_drive 
+g_volume_get_mount
+g_volume_should_automount
+g_volume_can_mount
+g_volume_can_eject
+g_volume_mount 
+g_volume_mount_finish 
+g_volume_eject 
+g_volume_eject_finish
+g_volume_get_identifier
+g_volume_enumerate_identifiers
+g_volume_get_activation_root
+#endif
+#endif
+
+#if IN_HEADER(__G_VOLUME_MONITOR_H__)
+#if IN_FILE(__G_VOLUME_MONITOR_C__)
+g_volume_monitor_get_type  G_GNUC_CONST
+g_volume_monitor_get_connected_drives 
+g_volume_monitor_get_volume_for_uuid
+g_volume_monitor_get_volumes 
+g_volume_monitor_get_mounts
+g_volume_monitor_get_mount_for_uuid
+#endif
+#if IN_FILE(__G_UNION_VOLUME_MONITOR_C__)
+g_volume_monitor_get 
+#ifndef G_DISABLE_DEPRECATED
+g_volume_monitor_adopt_orphan_mount
+#endif
+#endif
+#endif
+
+#if IN_HEADER(__G_NATIVE_VOLUME_MONITOR_H__)
+#if IN_FILE(__G_NATIVE_VOLUME_MONITOR_C__)
+g_native_volume_monitor_get_type  G_GNUC_CONST
+#endif
+#endif
+
+#if IN_HEADER(__G_LOCAL_FILE_MONITOR_H__)
+#if IN_FILE(__G_LOCAL_FILE_MONITOR_C__)
+#ifdef G_OS_UNIX
+g_local_file_monitor_get_type  G_GNUC_CONST
+#endif
+#endif
+#endif
+
+#if IN_HEADER(__G_LOCAL_DIRECTORY_MONITOR_H__)
+#if IN_FILE(__G_LOCAL_DIRECTORY_MONITOR_C__)
+#ifdef G_OS_UNIX
+g_local_directory_monitor_get_type  G_GNUC_CONST
+#endif
+#endif
+#endif
+
+#if IN_HEADER(__GIO_ENUM_TYPES_H__)
+#if IN_FILE(__GIO_ENUM_TYPES_C__)
+g_mount_unmount_flags_get_type G_GNUC_CONST
+g_app_info_create_flags_get_type G_GNUC_CONST
+g_data_stream_byte_order_get_type G_GNUC_CONST
+g_data_stream_newline_type_get_type G_GNUC_CONST
+g_file_attribute_info_flags_get_type G_GNUC_CONST
+g_file_attribute_status_get_type G_GNUC_CONST
+g_file_attribute_type_get_type G_GNUC_CONST
+g_file_copy_flags_get_type G_GNUC_CONST
+g_file_create_flags_get_type G_GNUC_CONST
+g_file_monitor_event_get_type G_GNUC_CONST
+g_file_monitor_flags_get_type G_GNUC_CONST
+g_file_query_info_flags_get_type G_GNUC_CONST
+g_file_type_get_type G_GNUC_CONST
+g_filesystem_preview_type_get_type G_GNUC_CONST
+g_io_error_enum_get_type G_GNUC_CONST
+g_mount_mount_flags_get_type G_GNUC_CONST
+g_mount_operation_result_get_type G_GNUC_CONST
+g_output_stream_splice_flags_get_type G_GNUC_CONST
+g_ask_password_flags_get_type G_GNUC_CONST
+g_password_save_get_type G_GNUC_CONST
+g_emblem_origin_get_type G_GNUC_CONST
+#endif
+#endif
+
+
+#if IN_HEADER(__G_EMBLEMED_ICON_H__)
+#if IN_FILE(__G_EMBLEMED_ICON_C__)
+g_emblemed_icon_get_type G_GNUC_CONST
+g_emblemed_icon_new
+g_emblemed_icon_get_icon
+g_emblemed_icon_get_emblems
+g_emblemed_icon_add_emblem
+#endif
+#endif
+
+#if IN_HEADER(__G_EMBLEM_H__)
+#if IN_FILE(__G_EMBLEM_C__)
+g_emblem_get_type G_GNUC_CONST
+g_emblem_new
+g_emblem_new_with_origin
+g_emblem_get_icon
+g_emblem_get_origin
+#endif
+#endif
+
diff --git a/gio/gioenums.h b/gio/gioenums.h
new file mode 100644
index 0000000..3bb50ff
--- /dev/null
+++ b/gio/gioenums.h
@@ -0,0 +1,482 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __GIO_ENUMS_H__
+#define __GIO_ENUMS_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+
+/**
+ * GAppInfoCreateFlags:
+ * @G_APP_INFO_CREATE_NONE: No flags.
+ * @G_APP_INFO_CREATE_NEEDS_TERMINAL: Application opens in a terminal window.
+ * @G_APP_INFO_CREATE_SUPPORTS_URIS: Application supports URI arguments.
+ *
+ * Flags used when creating a #GAppInfo.
+ */
+typedef enum {
+  G_APP_INFO_CREATE_NONE           = 0,         /*< nick=none >*/
+  G_APP_INFO_CREATE_NEEDS_TERMINAL = (1 << 0),  /*< nick=needs-terminal >*/
+  G_APP_INFO_CREATE_SUPPORTS_URIS  = (1 << 1)   /*< nick=supports-uris >*/
+} GAppInfoCreateFlags;
+
+
+/**
+ * GDataStreamByteOrder:
+ * @G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN: Selects Big Endian byte order.
+ * @G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN: Selects Little Endian byte order.
+ * @G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN: Selects endianness based on host machine's architecture.
+ *
+ * #GDataStreamByteOrder is used to ensure proper endianness of streaming data sources
+ * across various machine architectures.
+ *
+ **/
+typedef enum {
+  G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN,
+  G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN,
+  G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN
+} GDataStreamByteOrder;
+
+
+/**
+ * GDataStreamNewlineType:
+ * @G_DATA_STREAM_NEWLINE_TYPE_LF: Selects "LF" line endings, common on most modern UNIX platforms.
+ * @G_DATA_STREAM_NEWLINE_TYPE_CR: Selects "CR" line endings.
+ * @G_DATA_STREAM_NEWLINE_TYPE_CR_LF: Selects "CR, LF" line ending, common on Microsoft Windows.
+ * @G_DATA_STREAM_NEWLINE_TYPE_ANY: Automatically try to handle any line ending type.
+ *
+ * #GDataStreamNewlineType is used when checking for or setting the line endings for a given file.
+ **/
+typedef enum {
+  G_DATA_STREAM_NEWLINE_TYPE_LF,
+  G_DATA_STREAM_NEWLINE_TYPE_CR,
+  G_DATA_STREAM_NEWLINE_TYPE_CR_LF,
+  G_DATA_STREAM_NEWLINE_TYPE_ANY
+} GDataStreamNewlineType;
+
+
+/**
+ * GFileAttributeType:
+ * @G_FILE_ATTRIBUTE_TYPE_INVALID: indicates an invalid or uninitalized type.
+ * @G_FILE_ATTRIBUTE_TYPE_STRING: a null terminated UTF8 string.
+ * @G_FILE_ATTRIBUTE_TYPE_BYTE_STRING: a zero terminated string of non-zero bytes.
+ * @G_FILE_ATTRIBUTE_TYPE_BOOLEAN: a boolean value.
+ * @G_FILE_ATTRIBUTE_TYPE_UINT32: an unsigned 4-byte/32-bit integer.
+ * @G_FILE_ATTRIBUTE_TYPE_INT32: a signed 4-byte/32-bit integer.
+ * @G_FILE_ATTRIBUTE_TYPE_UINT64: an unsigned 8-byte/64-bit integer.
+ * @G_FILE_ATTRIBUTE_TYPE_INT64: a signed 8-byte/64-bit integer.
+ * @G_FILE_ATTRIBUTE_TYPE_OBJECT: a #GObject.
+ *
+ * The data types for file attributes.
+ **/
+typedef enum {
+  G_FILE_ATTRIBUTE_TYPE_INVALID = 0,
+  G_FILE_ATTRIBUTE_TYPE_STRING,
+  G_FILE_ATTRIBUTE_TYPE_BYTE_STRING, /* zero terminated string of non-zero bytes */
+  G_FILE_ATTRIBUTE_TYPE_BOOLEAN,
+  G_FILE_ATTRIBUTE_TYPE_UINT32,
+  G_FILE_ATTRIBUTE_TYPE_INT32,
+  G_FILE_ATTRIBUTE_TYPE_UINT64,
+  G_FILE_ATTRIBUTE_TYPE_INT64,
+  G_FILE_ATTRIBUTE_TYPE_OBJECT
+} GFileAttributeType;
+
+
+/**
+ * GFileAttributeInfoFlags:
+ * @G_FILE_ATTRIBUTE_INFO_NONE: no flags set.
+ * @G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE: copy the attribute values when the file is copied.
+ * @G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED: copy the attribute values when the file is moved.
+ *
+ * Flags specifying the behaviour of an attribute.
+ **/
+typedef enum {
+  G_FILE_ATTRIBUTE_INFO_NONE            = 0,
+  G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE  = (1 << 0),
+  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED = (1 << 1)
+} GFileAttributeInfoFlags;
+
+
+/**
+ * GFileAttributeStatus:
+ * @G_FILE_ATTRIBUTE_STATUS_UNSET: Attribute value is unset (empty).
+ * @G_FILE_ATTRIBUTE_STATUS_SET: Attribute value is set.
+ * @G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING: Indicates an error in setting the value.
+ *
+ * Used by g_file_set_attributes_from_info() when setting file attributes.
+ **/
+typedef enum {
+  G_FILE_ATTRIBUTE_STATUS_UNSET = 0,
+  G_FILE_ATTRIBUTE_STATUS_SET,
+  G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING
+} GFileAttributeStatus;
+
+
+/**
+ * GFileQueryInfoFlags:
+ * @G_FILE_QUERY_INFO_NONE: No flags set.
+ * @G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS: Don't follow symlinks.
+ *
+ * Flags used when querying a #GFileInfo.
+ */
+typedef enum {
+  G_FILE_QUERY_INFO_NONE              = 0,
+  G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS = (1 << 0)   /*< nick=nofollow-symlinks >*/
+} GFileQueryInfoFlags;
+
+
+/**
+ * GFileCreateFlags:
+ * @G_FILE_CREATE_NONE: No flags set.
+ * @G_FILE_CREATE_PRIVATE: Create a file that can only be
+ *    accessed by the current user.
+ * @G_FILE_CREATE_REPLACE_DESTINATION: Replace the destination
+ *    as if it didn't exist before. Don't try to keep any old
+ *    permissions, replace instead of following links. This
+ *    is generally useful if you're doing a "copy over" 
+ *    rather than a "save new version of" replace operation.
+ *    You can think of it as "unlink destination" before
+ *    writing to it, although the implementation may not
+ *    be exactly like that. Since 2.20
+ *
+ * Flags used when an operation may create a file.
+ */
+typedef enum {
+  G_FILE_CREATE_NONE    = 0,
+  G_FILE_CREATE_PRIVATE = (1 << 0),
+  G_FILE_CREATE_REPLACE_DESTINATION = (1 << 1)
+} GFileCreateFlags;
+
+
+/**
+ * GMountMountFlags:
+ * @G_MOUNT_MOUNT_NONE: No flags set.
+ *
+ * Flags used when mounting a mount.
+ */
+typedef enum {
+  G_MOUNT_MOUNT_NONE = 0
+} GMountMountFlags;
+
+
+/**
+ * GMountUnmountFlags:
+ * @G_MOUNT_UNMOUNT_NONE: No flags set.
+ * @G_MOUNT_UNMOUNT_FORCE: Unmount even if there are outstanding
+ *  file operations on the mount.
+ *
+ * Flags used when an unmounting a mount.
+ */
+typedef enum {
+  G_MOUNT_UNMOUNT_NONE  = 0,
+  G_MOUNT_UNMOUNT_FORCE = (1 << 0)
+} GMountUnmountFlags;
+
+
+/**
+ * GFileCopyFlags:
+ * @G_FILE_COPY_NONE: No flags set.
+ * @G_FILE_COPY_OVERWRITE: Overwrite any existing files
+ * @G_FILE_COPY_BACKUP: Make a backup of any existing files.
+ * @G_FILE_COPY_NOFOLLOW_SYMLINKS: Don't follow symlinks.
+ * @G_FILE_COPY_ALL_METADATA: Copy all file metadata instead of just default set used for copy (see #GFileInfo).
+ * @G_FILE_COPY_NO_FALLBACK_FOR_MOVE: Don't use copy and delete fallback if native move not supported.
+ * @G_FILE_COPY_TARGET_DEFAULT_PERMS: Leaves target file with default perms, instead of setting the source file perms.
+ *
+ * Flags used when copying or moving files.
+ */
+typedef enum {
+  G_FILE_COPY_NONE                 = 0,          /*< nick=none >*/
+  G_FILE_COPY_OVERWRITE            = (1 << 0),
+  G_FILE_COPY_BACKUP               = (1 << 1),
+  G_FILE_COPY_NOFOLLOW_SYMLINKS    = (1 << 2),
+  G_FILE_COPY_ALL_METADATA         = (1 << 3),
+  G_FILE_COPY_NO_FALLBACK_FOR_MOVE = (1 << 4),
+  G_FILE_COPY_TARGET_DEFAULT_PERMS = (1 << 5)
+} GFileCopyFlags;
+
+
+/**
+ * GFileMonitorFlags:
+ * @G_FILE_MONITOR_NONE: No flags set.
+ * @G_FILE_MONITOR_WATCH_MOUNTS: Watch for mount events.
+ *
+ * Flags used to set what a #GFileMonitor will watch for.
+ */
+typedef enum {
+  G_FILE_MONITOR_NONE         = 0,
+  G_FILE_MONITOR_WATCH_MOUNTS = (1 << 0)
+} GFileMonitorFlags;
+
+
+/**
+ * GFileType:
+ * @G_FILE_TYPE_UNKNOWN: File's type is unknown.
+ * @G_FILE_TYPE_REGULAR: File handle represents a regular file.
+ * @G_FILE_TYPE_DIRECTORY: File handle represents a directory.
+ * @G_FILE_TYPE_SYMBOLIC_LINK: File handle represents a symbolic link
+ *    (Unix systems).
+ * @G_FILE_TYPE_SPECIAL: File is a "special" file, such as a socket, fifo,
+ *    block device, or character device.
+ * @G_FILE_TYPE_SHORTCUT: File is a shortcut (Windows systems).
+ * @G_FILE_TYPE_MOUNTABLE: File is a mountable location.
+ *
+ * Indicates the file's on-disk type.
+ **/
+typedef enum {
+  G_FILE_TYPE_UNKNOWN = 0,
+  G_FILE_TYPE_REGULAR,
+  G_FILE_TYPE_DIRECTORY,
+  G_FILE_TYPE_SYMBOLIC_LINK,
+  G_FILE_TYPE_SPECIAL, /* socket, fifo, blockdev, chardev */
+  G_FILE_TYPE_SHORTCUT,
+  G_FILE_TYPE_MOUNTABLE
+} GFileType;
+
+
+/**
+ * GFilesystemPreviewType:
+ * @G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS: Only preview files if user has explicitly requested it.
+ * @G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL: Preview files if user has requested preview of "local" files.
+ * @G_FILESYSTEM_PREVIEW_TYPE_NEVER: Never preview files.
+ *
+ * Indicates a hint from the file system whether files should be
+ * previewed in a file manager. Returned as the value of the key
+ * #G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW.
+ **/
+typedef enum {
+  G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS = 0,
+  G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL,
+  G_FILESYSTEM_PREVIEW_TYPE_NEVER
+} GFilesystemPreviewType;
+
+
+/**
+ * GFileMonitorEvent:
+ * @G_FILE_MONITOR_EVENT_CHANGED: a file changed.
+ * @G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: a hint that this was probably the last change in a set of changes.
+ * @G_FILE_MONITOR_EVENT_DELETED: a file was deleted.
+ * @G_FILE_MONITOR_EVENT_CREATED: a file was created.
+ * @G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: a file attribute was changed.
+ * @G_FILE_MONITOR_EVENT_PRE_UNMOUNT: the file location will soon be unmounted.
+ * @G_FILE_MONITOR_EVENT_UNMOUNTED: the file location was unmounted.
+ *
+ * Specifies what type of event a monitor event is.
+ **/
+typedef enum {
+  G_FILE_MONITOR_EVENT_CHANGED,
+  G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT,
+  G_FILE_MONITOR_EVENT_DELETED,
+  G_FILE_MONITOR_EVENT_CREATED,
+  G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED,
+  G_FILE_MONITOR_EVENT_PRE_UNMOUNT,
+  G_FILE_MONITOR_EVENT_UNMOUNTED
+} GFileMonitorEvent;
+
+
+/* This enumeration conflicts with GIOError in giochannel.h. However,
+ * that is only used as a return value in some deprecated functions.
+ * So, we reuse the same prefix for the enumeration values, but call
+ * the actual enumeration (which is rarely used) GIOErrorEnum.
+ */
+/**
+ * GIOErrorEnum:
+ * @G_IO_ERROR_FAILED: Generic error condition for when any operation fails.
+ * @G_IO_ERROR_NOT_FOUND: File not found error.
+ * @G_IO_ERROR_EXISTS: File already exists error.
+ * @G_IO_ERROR_IS_DIRECTORY: File is a directory error.
+ * @G_IO_ERROR_NOT_DIRECTORY: File is not a directory.
+ * @G_IO_ERROR_NOT_EMPTY: File is a directory that isn't empty.
+ * @G_IO_ERROR_NOT_REGULAR_FILE: File is not a regular file.
+ * @G_IO_ERROR_NOT_SYMBOLIC_LINK: File is not a symbolic link.
+ * @G_IO_ERROR_NOT_MOUNTABLE_FILE: File cannot be mounted.
+ * @G_IO_ERROR_FILENAME_TOO_LONG: Filename is too many characters.
+ * @G_IO_ERROR_INVALID_FILENAME: Filename is invalid or contains invalid characters.
+ * @G_IO_ERROR_TOO_MANY_LINKS: File contains too many symbolic links.
+ * @G_IO_ERROR_NO_SPACE: No space left on drive.
+ * @G_IO_ERROR_INVALID_ARGUMENT: Invalid argument.
+ * @G_IO_ERROR_PERMISSION_DENIED: Permission denied.
+ * @G_IO_ERROR_NOT_SUPPORTED: Operation not supported for the current backend.
+ * @G_IO_ERROR_NOT_MOUNTED: File isn't mounted.
+ * @G_IO_ERROR_ALREADY_MOUNTED: File is already mounted.
+ * @G_IO_ERROR_CLOSED: File was closed.
+ * @G_IO_ERROR_CANCELLED: Operation was cancelled. See #GCancellable.
+ * @G_IO_ERROR_PENDING: Operations are still pending.
+ * @G_IO_ERROR_READ_ONLY: File is read only.
+ * @G_IO_ERROR_CANT_CREATE_BACKUP: Backup couldn't be created.
+ * @G_IO_ERROR_WRONG_ETAG: File's Entity Tag was incorrect.
+ * @G_IO_ERROR_TIMED_OUT: Operation timed out.
+ * @G_IO_ERROR_WOULD_RECURSE: Operation would be recursive.
+ * @G_IO_ERROR_BUSY: File is busy.
+ * @G_IO_ERROR_WOULD_BLOCK: Operation would block.
+ * @G_IO_ERROR_HOST_NOT_FOUND: Host couldn't be found (remote operations).
+ * @G_IO_ERROR_WOULD_MERGE: Operation would merge files.
+ * @G_IO_ERROR_FAILED_HANDLED: Operation failed and a helper program has 
+ *     already interacted with the user. Do not display any error dialog.
+ * @G_IO_ERROR_TOO_MANY_OPEN_FILES: The current process has too many files 
+ *     open and can't open any more. Duplicate descriptors do count toward 
+ *     this limit. Since 2.20
+ *
+ * Error codes returned by GIO functions.
+ *
+ **/
+typedef enum {
+  G_IO_ERROR_FAILED,
+  G_IO_ERROR_NOT_FOUND,
+  G_IO_ERROR_EXISTS,
+  G_IO_ERROR_IS_DIRECTORY,
+  G_IO_ERROR_NOT_DIRECTORY,
+  G_IO_ERROR_NOT_EMPTY,
+  G_IO_ERROR_NOT_REGULAR_FILE,
+  G_IO_ERROR_NOT_SYMBOLIC_LINK,
+  G_IO_ERROR_NOT_MOUNTABLE_FILE,
+  G_IO_ERROR_FILENAME_TOO_LONG,
+  G_IO_ERROR_INVALID_FILENAME,
+  G_IO_ERROR_TOO_MANY_LINKS,
+  G_IO_ERROR_NO_SPACE,
+  G_IO_ERROR_INVALID_ARGUMENT,
+  G_IO_ERROR_PERMISSION_DENIED,
+  G_IO_ERROR_NOT_SUPPORTED,
+  G_IO_ERROR_NOT_MOUNTED,
+  G_IO_ERROR_ALREADY_MOUNTED,
+  G_IO_ERROR_CLOSED,
+  G_IO_ERROR_CANCELLED,
+  G_IO_ERROR_PENDING,
+  G_IO_ERROR_READ_ONLY,
+  G_IO_ERROR_CANT_CREATE_BACKUP,
+  G_IO_ERROR_WRONG_ETAG,
+  G_IO_ERROR_TIMED_OUT,
+  G_IO_ERROR_WOULD_RECURSE,
+  G_IO_ERROR_BUSY,
+  G_IO_ERROR_WOULD_BLOCK,
+  G_IO_ERROR_HOST_NOT_FOUND,
+  G_IO_ERROR_WOULD_MERGE,
+  G_IO_ERROR_FAILED_HANDLED,
+  G_IO_ERROR_TOO_MANY_OPEN_FILES
+} GIOErrorEnum;
+
+
+/**
+ * GAskPasswordFlags:
+ * @G_ASK_PASSWORD_NEED_PASSWORD: operation requires a password.
+ * @G_ASK_PASSWORD_NEED_USERNAME: operation requires a username.
+ * @G_ASK_PASSWORD_NEED_DOMAIN: operation requires a domain.
+ * @G_ASK_PASSWORD_SAVING_SUPPORTED: operation supports saving settings.
+ * @G_ASK_PASSWORD_ANONYMOUS_SUPPORTED: operation supports anonymous users.
+ *
+ * #GAskPasswordFlags are used to request specific information from the
+ * user, or to notify the user of their choices in an authentication
+ * situation.
+ **/
+typedef enum {
+  G_ASK_PASSWORD_NEED_PASSWORD       = (1 << 0),
+  G_ASK_PASSWORD_NEED_USERNAME       = (1 << 1),
+  G_ASK_PASSWORD_NEED_DOMAIN         = (1 << 2),
+  G_ASK_PASSWORD_SAVING_SUPPORTED    = (1 << 3),
+  G_ASK_PASSWORD_ANONYMOUS_SUPPORTED = (1 << 4)
+} GAskPasswordFlags;
+
+
+/**
+ * GPasswordSave:
+ * @G_PASSWORD_SAVE_NEVER: never save a password.
+ * @G_PASSWORD_SAVE_FOR_SESSION: save a password for the session.
+ * @G_PASSWORD_SAVE_PERMANENTLY: save a password permanently.
+ *
+ * #GPasswordSave is used to indicate the lifespan of a saved password.
+ *
+ * #Gvfs stores passwords in the Gnome keyring when this flag allows it
+ * to, and later retrieves it again from there.
+ **/
+typedef enum {
+  G_PASSWORD_SAVE_NEVER,
+  G_PASSWORD_SAVE_FOR_SESSION,
+  G_PASSWORD_SAVE_PERMANENTLY
+} GPasswordSave;
+
+
+/**
+ * GMountOperationResult:
+ * @G_MOUNT_OPERATION_HANDLED: The request was fulfilled and the
+ *     user specified data is now available
+ * @G_MOUNT_OPERATION_ABORTED: The user requested the mount operation
+ *     to be aborted
+ * @G_MOUNT_OPERATION_UNHANDLED: The request was unhandled (i.e. not
+ *     implemented)
+ *
+ * #GMountOperationResult is returned as a result when a request for
+ * information is send by the mounting operation.
+ **/
+typedef enum {
+  G_MOUNT_OPERATION_HANDLED,
+  G_MOUNT_OPERATION_ABORTED,
+  G_MOUNT_OPERATION_UNHANDLED
+} GMountOperationResult;
+
+
+/**
+ * GOutputStreamSpliceFlags:
+ * @G_OUTPUT_STREAM_SPLICE_NONE: Do not close either stream.
+ * @G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE: Close the source stream after
+ *     the splice.
+ * @G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET: Close the target stream after
+ *     the splice.
+ *
+ * GOutputStreamSpliceFlags determine how streams should be spliced.
+ **/
+typedef enum {
+  G_OUTPUT_STREAM_SPLICE_NONE         = 0,
+  G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE = (1 << 0),
+  G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET = (1 << 1)
+} GOutputStreamSpliceFlags;
+
+
+/**
+ * GEmblemOrigin:
+ * @G_EMBLEM_ORIGIN_UNKNOWN: Emblem of unknown origin
+ * @G_EMBLEM_ORIGIN_DEVICE: Embleme adds device-specific information
+ * @G_EMBLEM_ORIGIN_LIVEMETADATA: Emblem depicts live metadata, such as "readonly"
+ * @G_EMBLEM_ORIGIN_TAG: Emblem comes from a user-defined tag, e.g. set by nautilus (in the future)
+ *
+ * GEmblemOrigin is used to add information about the origin of the emblem
+ * to #GEmblem.
+ *
+ * Since: 2.18
+ */
+typedef enum  {
+  G_EMBLEM_ORIGIN_UNKNOWN,
+  G_EMBLEM_ORIGIN_DEVICE,
+  G_EMBLEM_ORIGIN_LIVEMETADATA,
+  G_EMBLEM_ORIGIN_TAG
+} GEmblemOrigin;
+
+
+G_END_DECLS
+
+#endif /* __GIO_ENUMS_H__ */
diff --git a/gio/gioenumtypes.c.template b/gio/gioenumtypes.c.template
new file mode 100644
index 0000000..46db905
--- /dev/null
+++ b/gio/gioenumtypes.c.template
@@ -0,0 +1,42 @@
+/*** BEGIN file-header ***/
+#include <gio.h>
+#include "gioalias.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      static const G@Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+        { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+        { 0, NULL, NULL }
+      };
+      GType g_define_type_id =
+        g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+#define __GIO_ENUM_TYPES_C__
+#include "gioaliasdef.c"
+/*** END file-tail ***/
diff --git a/gio/gioenumtypes.h.template b/gio/gioenumtypes.h.template
new file mode 100644
index 0000000..174bd62
--- /dev/null
+++ b/gio/gioenumtypes.h.template
@@ -0,0 +1,24 @@
+/*** BEGIN file-header ***/
+#ifndef __GIO_ENUM_TYPES_H__
+#define __GIO_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* __GIO_ENUM_TYPES_H__ */
+/*** END file-tail ***/
diff --git a/gio/gioerror.c b/gio/gioerror.c
new file mode 100644
index 0000000..697070b
--- /dev/null
+++ b/gio/gioerror.c
@@ -0,0 +1,204 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <errno.h>
+#include "gioerror.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gioerror
+ * @short_description: Error helper functions
+ * @include: gio/gio.h
+ *
+ * Contains helper functions for reporting errors to the user.
+ **/
+
+/**
+ * g_io_error_quark:
+ * 
+ * Gets the GIO Error Quark.
+ *
+ * Return value: a #GQuark.
+ **/
+GQuark
+g_io_error_quark (void)
+{
+  return g_quark_from_static_string ("g-io-error-quark");
+}
+
+/**
+ * g_io_error_from_errno:
+ * @err_no: Error number as defined in errno.h.
+ *
+ * Converts errno.h error codes into GIO error codes.
+ *
+ * Returns: #GIOErrorEnum value for the given errno.h error number.
+ **/
+GIOErrorEnum
+g_io_error_from_errno (gint err_no)
+{
+  switch (err_no)
+    {
+#ifdef EEXIST
+    case EEXIST:
+      return G_IO_ERROR_EXISTS;
+      break;
+#endif
+
+#ifdef EISDIR
+    case EISDIR:
+      return G_IO_ERROR_IS_DIRECTORY;
+      break;
+#endif
+
+#ifdef EACCES
+    case EACCES:
+      return G_IO_ERROR_PERMISSION_DENIED;
+      break;
+#endif
+
+#ifdef ENAMETOOLONG
+    case ENAMETOOLONG:
+      return G_IO_ERROR_FILENAME_TOO_LONG;
+      break;
+#endif
+
+#ifdef ENOENT
+    case ENOENT:
+      return G_IO_ERROR_NOT_FOUND;
+      break;
+#endif
+
+#ifdef ENOTDIR
+    case ENOTDIR:
+      return G_IO_ERROR_NOT_DIRECTORY;
+      break;
+#endif
+
+#ifdef EROFS
+    case EROFS:
+      return G_IO_ERROR_READ_ONLY;
+      break;
+#endif
+
+#ifdef ELOOP
+    case ELOOP:
+      return G_IO_ERROR_TOO_MANY_LINKS;
+      break;
+#endif
+
+#ifdef ENOSPC
+    case ENOSPC:
+      return G_IO_ERROR_NO_SPACE;
+      break;
+#endif
+
+#ifdef ENOMEM
+    case ENOMEM:
+      return G_IO_ERROR_NO_SPACE;
+      break;
+#endif
+      
+#ifdef EINVAL
+    case EINVAL:
+      return G_IO_ERROR_INVALID_ARGUMENT;
+      break;
+#endif
+
+#ifdef EPERM
+    case EPERM:
+      return G_IO_ERROR_PERMISSION_DENIED;
+      break;
+#endif
+
+#ifdef ECANCELED
+    case ECANCELED:
+      return G_IO_ERROR_CANCELLED;
+      break;
+#endif
+
+#if defined(ENOTEMPTY) && (!defined (EEXIST) || (ENOTEMPTY != EEXIST))
+    case ENOTEMPTY:
+      return G_IO_ERROR_NOT_EMPTY;
+      break;
+#endif
+
+#ifdef ENOTSUP
+    case ENOTSUP:
+      return G_IO_ERROR_NOT_SUPPORTED;
+      break;
+#endif
+
+#ifdef ETIMEDOUT
+    case ETIMEDOUT:
+      return G_IO_ERROR_TIMED_OUT;
+      break;
+#endif
+
+#ifdef EBUSY
+    case EBUSY:
+      return G_IO_ERROR_BUSY;
+      break;
+#endif
+
+/* some magic to deal with EWOULDBLOCK and EAGAIN.
+ * apparently on HP-UX these are actually defined to different values,
+ * but on Linux, for example, they are the same.
+ */
+#if defined(EWOULDBLOCK) && defined(EAGAIN) && EWOULDBLOCK == EAGAIN
+    /* we have both and they are the same: only emit one case. */
+    case EAGAIN:
+      return G_IO_ERROR_WOULD_BLOCK;
+      break;
+#else
+    /* else: consider each of them separately.  this handles both the
+     * case of having only one and the case where they are different values.
+     */
+# ifdef EAGAIN
+    case EAGAIN:
+      return G_IO_ERROR_WOULD_BLOCK;
+      break;
+# endif
+
+# ifdef EWOULDBLOCK
+    case EWOULDBLOCK:
+      return G_IO_ERROR_WOULD_BLOCK;
+      break;
+# endif
+#endif
+
+#ifdef EMFILE
+    case EMFILE:
+      return G_IO_ERROR_TOO_MANY_OPEN_FILES;
+      break;
+#endif
+
+    default:
+      return G_IO_ERROR_FAILED;
+      break;
+    }
+}
+
+#define __G_IO_ERROR_C__
+#include "gioaliasdef.c"
diff --git a/gio/gioerror.h b/gio/gioerror.h
new file mode 100644
index 0000000..c1dc377
--- /dev/null
+++ b/gio/gioerror.h
@@ -0,0 +1,48 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_IO_ERROR_H__
+#define __G_IO_ERROR_H__
+
+#include <glib.h>
+#include <gio/gioenums.h>
+
+G_BEGIN_DECLS
+
+/**
+ * G_IO_ERROR:
+ *
+ * Error domain for GIO. Errors in this domain will be from the #GIOErrorEnum enumeration.
+ * See #GError for more information on error domains.
+ **/
+#define G_IO_ERROR g_io_error_quark()
+
+GQuark       g_io_error_quark      (void);
+GIOErrorEnum g_io_error_from_errno (gint err_no);
+
+G_END_DECLS
+
+#endif /* __G_IO_ERROR_H__ */
diff --git a/gio/giomodule-priv.h b/gio/giomodule-priv.h
new file mode 100644
index 0000000..a4677b0
--- /dev/null
+++ b/gio/giomodule-priv.h
@@ -0,0 +1,35 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_IO_MODULE_PRIV_H__
+#define __G_IO_MODULE_PRIV_H__
+
+#include "giomodule.h"
+
+G_BEGIN_DECLS
+
+void _g_io_modules_ensure_extension_points_registered (void);
+void _g_io_modules_ensure_loaded                      (void);
+
+G_END_DECLS
+
+#endif /* __G_IO_MODULE_PRIV_H__ */
diff --git a/gio/giomodule.c b/gio/giomodule.c
new file mode 100644
index 0000000..68f3b7b
--- /dev/null
+++ b/gio/giomodule.c
@@ -0,0 +1,694 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "giomodule.h"
+#include "giomodule-priv.h"
+#include "glocalfilemonitor.h"
+#include "glocaldirectorymonitor.h"
+#include "gnativevolumemonitor.h"
+#include "gvfs.h"
+#ifdef G_OS_UNIX
+#include "gdesktopappinfo.h"
+#endif
+#include "gioalias.h"
+
+/**
+ * SECTION:giomodule
+ * @short_description: Loadable GIO Modules
+ * @include: gio/gio.h
+ *
+ * Provides an interface and default functions for loading and unloading 
+ * modules. This is used internally to make GIO extensible, but can also
+ * be used by others to implement module loading.
+ * 
+ **/
+
+/**
+ * SECTION:extensionpoints
+ * @short_description: Extension Points
+ * @include: gio.h
+ * @see_also: <link linkend="extending-gio">Extending GIO</link>
+ *
+ * #GIOExtensionPoint provides a mechanism for modules to extend the
+ * functionality of the library or application that loaded it in an 
+ * organized fashion.  
+ *
+ * An extension point is identified by a name, and it may optionally
+ * require that any implementation must by of a certain type (or derived
+ * thereof). Use g_io_extension_point_register() to register an
+ * extension point, and g_io_extension_point_set_required_type() to
+ * set a required type.
+ *
+ * A module can implement an extension point by specifying the #GType 
+ * that implements the functionality. Additionally, each implementation
+ * of an extension point has a name, and a priority. Use
+ * g_io_extension_point_implement() to implement an extension point.
+ * 
+ *  |[
+ *  GIOExtensionPoint *ep;
+ *
+ *  /&ast; Register an extension point &ast;/
+ *  ep = g_io_extension_point_register ("my-extension-point");
+ *  g_io_extension_point_set_required_type (ep, MY_TYPE_EXAMPLE);
+ *  ]|
+ *
+ *  |[
+ *  /&ast; Implement an extension point &ast;/
+ *  G_DEFINE_TYPE (MyExampleImpl, my_example_impl, MY_TYPE_EXAMPLE);
+ *  g_io_extension_point_implement ("my-extension-point",
+ *                                  my_example_impl_get_type (),
+ *                                  "my-example",
+ *                                  10);
+ *  ]|
+ *
+ *  It is up to the code that registered the extension point how
+ *  it uses the implementations that have been associated with it.
+ *  Depending on the use case, it may use all implementations, or
+ *  only the one with the highest priority, or pick a specific
+ *  one by name. 
+ */
+struct _GIOModule {
+  GTypeModule parent_instance;
+  
+  gchar       *filename;
+  GModule     *library;
+  
+  void (* load)   (GIOModule *module);
+  void (* unload) (GIOModule *module);
+};
+
+struct _GIOModuleClass
+{
+  GTypeModuleClass parent_class;
+
+};
+
+static void      g_io_module_finalize      (GObject      *object);
+static gboolean  g_io_module_load_module   (GTypeModule  *gmodule);
+static void      g_io_module_unload_module (GTypeModule  *gmodule);
+
+G_DEFINE_TYPE (GIOModule, g_io_module, G_TYPE_TYPE_MODULE);
+
+static void
+g_io_module_class_init (GIOModuleClass *class)
+{
+  GObjectClass     *object_class      = G_OBJECT_CLASS (class);
+  GTypeModuleClass *type_module_class = G_TYPE_MODULE_CLASS (class);
+
+  object_class->finalize     = g_io_module_finalize;
+
+  type_module_class->load    = g_io_module_load_module;
+  type_module_class->unload  = g_io_module_unload_module;
+}
+
+static void
+g_io_module_init (GIOModule *module)
+{
+}
+
+static void
+g_io_module_finalize (GObject *object)
+{
+  GIOModule *module = G_IO_MODULE (object);
+
+  g_free (module->filename);
+
+  G_OBJECT_CLASS (g_io_module_parent_class)->finalize (object);
+}
+
+static gboolean
+g_io_module_load_module (GTypeModule *gmodule)
+{
+  GIOModule *module = G_IO_MODULE (gmodule);
+
+  if (!module->filename)
+    {
+      g_warning ("GIOModule path not set");
+      return FALSE;
+    }
+
+  module->library = g_module_open (module->filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+
+  if (!module->library)
+    {
+      g_printerr ("%s\n", g_module_error ());
+      return FALSE;
+    }
+
+  /* Make sure that the loaded library contains the required methods */
+  if (! g_module_symbol (module->library,
+                         "g_io_module_load",
+                         (gpointer) &module->load) ||
+      ! g_module_symbol (module->library,
+                         "g_io_module_unload",
+                         (gpointer) &module->unload))
+    {
+      g_printerr ("%s\n", g_module_error ());
+      g_module_close (module->library);
+
+      return FALSE;
+    }
+
+  /* Initialize the loaded module */
+  module->load (module);
+
+  return TRUE;
+}
+
+static void
+g_io_module_unload_module (GTypeModule *gmodule)
+{
+  GIOModule *module = G_IO_MODULE (gmodule);
+
+  module->unload (module);
+
+  g_module_close (module->library);
+  module->library = NULL;
+
+  module->load   = NULL;
+  module->unload = NULL;
+}
+
+/**
+ * g_io_module_new:
+ * @filename: filename of the shared library module.
+ * 
+ * Creates a new GIOModule that will load the specific
+ * shared library when in use.
+ * 
+ * Returns: a #GIOModule from given @filename, 
+ * or %NULL on error.
+ **/
+GIOModule *
+g_io_module_new (const gchar *filename)
+{
+  GIOModule *module;
+
+  g_return_val_if_fail (filename != NULL, NULL);
+
+  module = g_object_new (G_IO_TYPE_MODULE, NULL);
+  module->filename = g_strdup (filename);
+
+  return module;
+}
+
+static gboolean
+is_valid_module_name (const gchar *basename)
+{
+#if !defined(G_OS_WIN32) && !defined(G_WITH_CYGWIN)
+  return
+    g_str_has_prefix (basename, "lib") &&
+    g_str_has_suffix (basename, ".so");
+#else
+  return g_str_has_suffix (basename, ".dll");
+#endif
+}
+
+/**
+ * g_io_modules_load_all_in_directory:
+ * @dirname: pathname for a directory containing modules to load.
+ *
+ * Loads all the modules in the specified directory.
+ *
+ * Returns: a list of #GIOModules loaded from the directory,
+ *      All the modules are loaded into memory, if you want to
+ *      unload them (enabling on-demand loading) you must call
+ *      g_type_module_unuse() on all the modules. Free the list
+ *      with g_list_free().
+ **/
+GList *
+g_io_modules_load_all_in_directory (const char *dirname)
+{
+  const gchar *name;
+  GDir        *dir;
+  GList *modules;
+
+  if (!g_module_supported ())
+    return NULL;
+
+  dir = g_dir_open (dirname, 0, NULL);
+  if (!dir)
+    return NULL;
+
+  modules = NULL;
+  while ((name = g_dir_read_name (dir)))
+    {
+      if (is_valid_module_name (name))
+        {
+          GIOModule *module;
+          gchar     *path;
+
+          path = g_build_filename (dirname, name, NULL);
+          module = g_io_module_new (path);
+
+          if (!g_type_module_use (G_TYPE_MODULE (module)))
+            {
+              g_printerr ("Failed to load module: %s\n", path);
+              g_object_unref (module);
+              g_free (path);
+              continue;
+            }
+	  
+          g_free (path);
+
+          modules = g_list_prepend (modules, module);
+        }
+    }
+  
+  g_dir_close (dir);
+
+  return modules;
+}
+
+G_LOCK_DEFINE_STATIC (registered_extensions);
+G_LOCK_DEFINE_STATIC (loaded_dirs);
+
+extern GType _g_fen_directory_monitor_get_type (void);
+extern GType _g_fen_file_monitor_get_type (void);
+extern GType _g_inotify_directory_monitor_get_type (void);
+extern GType _g_inotify_file_monitor_get_type (void);
+extern GType _g_unix_volume_monitor_get_type (void);
+extern GType _g_local_vfs_get_type (void);
+
+extern GType _g_win32_volume_monitor_get_type (void);
+extern GType g_win32_directory_monitor_get_type (void);
+extern GType _g_winhttp_vfs_get_type (void);
+
+void
+_g_io_modules_ensure_extension_points_registered (void)
+{
+  static gboolean registered_extensions = FALSE;
+  GIOExtensionPoint *ep;
+
+  G_LOCK (registered_extensions);
+  
+  if (!registered_extensions)
+    {
+      registered_extensions = TRUE;
+      
+#ifdef G_OS_UNIX
+      ep = g_io_extension_point_register (G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME);
+      g_io_extension_point_set_required_type (ep, G_TYPE_DESKTOP_APP_INFO_LOOKUP);
+#endif
+      
+      ep = g_io_extension_point_register (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME);
+      g_io_extension_point_set_required_type (ep, G_TYPE_LOCAL_DIRECTORY_MONITOR);
+      
+      ep = g_io_extension_point_register (G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME);
+      g_io_extension_point_set_required_type (ep, G_TYPE_LOCAL_FILE_MONITOR);
+      
+      ep = g_io_extension_point_register (G_VOLUME_MONITOR_EXTENSION_POINT_NAME);
+      g_io_extension_point_set_required_type (ep, G_TYPE_VOLUME_MONITOR);
+      
+      ep = g_io_extension_point_register (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME);
+      g_io_extension_point_set_required_type (ep, G_TYPE_NATIVE_VOLUME_MONITOR);
+      
+      ep = g_io_extension_point_register (G_VFS_EXTENSION_POINT_NAME);
+      g_io_extension_point_set_required_type (ep, G_TYPE_VFS);
+    }
+  
+  G_UNLOCK (registered_extensions);
+ }
+
+void
+_g_io_modules_ensure_loaded (void)
+{
+  GList *modules, *l;
+  static gboolean loaded_dirs = FALSE;
+  const char *module_path;
+
+  _g_io_modules_ensure_extension_points_registered ();
+  
+  G_LOCK (loaded_dirs);
+
+  if (!loaded_dirs)
+    {
+      loaded_dirs = TRUE;
+
+      modules = g_io_modules_load_all_in_directory (GIO_MODULE_DIR);
+
+      module_path = g_getenv ("GIO_EXTRA_MODULES");
+
+      if (module_path)
+        {
+          int i = 0;
+          gchar **paths;
+          paths = g_strsplit (module_path, ":", 0);
+    
+          while (paths[i] != NULL)
+            { 
+              modules = g_list_concat (modules, g_io_modules_load_all_in_directory (paths[i]));
+              i++;
+            }
+
+          g_strfreev (paths);
+        }
+
+      /* Initialize types from built-in "modules" */
+#if defined(HAVE_SYS_INOTIFY_H) || defined(HAVE_LINUX_INOTIFY_H)
+      _g_inotify_directory_monitor_get_type ();
+      _g_inotify_file_monitor_get_type ();
+#endif
+#if defined(HAVE_FEN)
+      _g_fen_directory_monitor_get_type ();
+      _g_fen_file_monitor_get_type ();
+#endif
+#ifdef G_OS_WIN32
+      _g_win32_volume_monitor_get_type ();
+      g_win32_directory_monitor_get_type ();
+#endif
+#ifdef G_OS_UNIX
+      _g_unix_volume_monitor_get_type ();
+#endif
+#ifdef G_OS_WIN32
+      _g_winhttp_vfs_get_type ();
+#endif
+      _g_local_vfs_get_type ();
+    
+      for (l = modules; l != NULL; l = l->next)
+	g_type_module_unuse (G_TYPE_MODULE (l->data));
+      
+      g_list_free (modules);
+    }
+
+  G_UNLOCK (loaded_dirs);
+}
+
+struct _GIOExtension {
+  char *name;
+  GType type;
+  gint priority;
+};
+
+struct _GIOExtensionPoint {
+  GType required_type;
+  char *name;
+  GList *extensions;
+};
+
+static GHashTable *extension_points = NULL;
+G_LOCK_DEFINE_STATIC(extension_points);
+
+
+static void
+g_io_extension_point_free (GIOExtensionPoint *ep)
+{
+  g_free (ep->name);
+  g_free (ep);
+}
+
+/**
+ * g_io_extension_point_register:
+ * @name: The name of the extension point
+ *
+ * Registers an extension point.
+ *
+ * Returns: the new #GIOExtensionPoint. This object is owned by GIO
+ *    and should not be freed
+ */
+GIOExtensionPoint *
+g_io_extension_point_register (const char *name)
+{
+  GIOExtensionPoint *ep;
+  
+  G_LOCK (extension_points);
+  if (extension_points == NULL)
+    extension_points = g_hash_table_new_full (g_str_hash,
+					      g_str_equal,
+					      NULL,
+					      (GDestroyNotify)g_io_extension_point_free);
+
+  if (g_hash_table_lookup (extension_points, name) != NULL)
+    {
+      g_warning ("Extension point %s registered multiple times", name);
+      G_UNLOCK (extension_points);
+      return NULL;
+    }
+
+  ep = g_new0 (GIOExtensionPoint, 1);
+  ep->name = g_strdup (name);
+  
+  g_hash_table_insert (extension_points, ep->name, ep);
+  
+  G_UNLOCK (extension_points);
+
+  return ep;
+}
+
+/**
+ * g_io_extension_point_lookup:
+ * @name: the name of the extension point
+ *
+ * Looks up an existing extension point.
+ *
+ * Returns: the #GIOExtensionPoint, or %NULL if there is no
+ *    registered extension point with the given name
+ */
+GIOExtensionPoint *
+g_io_extension_point_lookup (const char *name)
+{
+  GIOExtensionPoint *ep;
+
+  G_LOCK (extension_points);
+  ep = NULL;
+  if (extension_points != NULL)
+    ep = g_hash_table_lookup (extension_points, name);
+  
+  G_UNLOCK (extension_points);
+
+  return ep;
+  
+}
+
+/**
+ * g_io_extension_point_set_required_type:
+ * @extension_point: a #GIOExtensionPoint
+ * @type: the #GType to require
+ *
+ * Sets the required type for @extension_point to @type. 
+ * All implementations must henceforth have this type.
+ */
+void
+g_io_extension_point_set_required_type (GIOExtensionPoint *extension_point,
+					GType              type)
+{
+  extension_point->required_type = type;
+}
+
+/**
+ * g_io_extension_point_get_required_type:
+ * @extension_point: a #GIOExtensionPoint
+ *
+ * Gets the required type for @extension_point.
+ *
+ * Returns: the #GType that all implementations must have, 
+ *     or #G_TYPE_INVALID if the extension point has no required type
+ */
+GType
+g_io_extension_point_get_required_type (GIOExtensionPoint *extension_point)
+{
+  return extension_point->required_type;
+}
+
+/**
+ * g_io_extension_point_get_extensions:
+ * @extension_point: a #GIOExtensionPoint
+ *
+ * Gets a list of all extensions that implement this extension point.
+ * The list is sorted by priority, beginning with the highest priority.
+ * 
+ * Returns: a #GList of #GIOExtension<!-- -->s. The list is owned by
+ *   GIO and should not be modified
+ */
+GList *
+g_io_extension_point_get_extensions (GIOExtensionPoint *extension_point)
+{
+  return extension_point->extensions;
+}
+
+/**
+ * g_io_extension_point_get_extension_by_name:
+ * @extension_point: a #GIOExtensionPoint
+ * @name: the name of the extension to get
+ *
+ * Finds a #GIOExtension for an extension point by name.
+ *
+ * Returns: the #GIOExtension for @extension_point that has the
+ *    given name, or %NULL if there is no extension with that name
+ */
+GIOExtension *
+g_io_extension_point_get_extension_by_name (GIOExtensionPoint *extension_point,
+					    const char        *name)
+{
+  GList *l;
+
+  for (l = extension_point->extensions; l != NULL; l = l->next)
+    {
+      GIOExtension *e = l->data;
+
+      if (e->name != NULL &&
+	  strcmp (e->name, name) == 0)
+	return e;
+    }
+  
+  return NULL;
+}
+
+static gint
+extension_prio_compare (gconstpointer  a,
+			gconstpointer  b)
+{
+  const GIOExtension *extension_a = a, *extension_b = b;
+
+  return extension_b->priority - extension_a->priority;
+}
+
+/**
+ * g_io_extension_point_implement:
+ * @extension_point_name: the name of the extension point
+ * @type: the #GType to register as extension 
+ * @extension_name: the name for the extension
+ * @priority: the priority for the extension
+ *
+ * Registers @type as extension for the extension point with name
+ * @extension_point_name. 
+ *
+ * If @type has already been registered as an extension for this 
+ * extension point, the existing #GIOExtension object is returned.
+ *
+ * Returns: a #GIOExtension object for #GType
+ */
+GIOExtension *
+g_io_extension_point_implement (const char *extension_point_name,
+				GType       type,
+				const char *extension_name,
+				gint        priority)
+{
+  GIOExtensionPoint *extension_point;
+  GIOExtension *extension;
+  GList *l;
+
+  g_return_val_if_fail (extension_point_name != NULL, NULL);
+
+  extension_point = g_io_extension_point_lookup (extension_point_name);
+  if (extension_point == NULL)
+    {
+      g_warning ("Tried to implement non-registered extension point %s", extension_point_name);
+      return NULL;
+    }
+  
+  if (extension_point->required_type != 0 &&
+      !g_type_is_a (type, extension_point->required_type))
+    {
+      g_warning ("Tried to register an extension of the type %s to extension point %s. "
+		 "Expected type is %s.",
+		 g_type_name (type),
+		 extension_point_name, 
+		 g_type_name (extension_point->required_type));
+      return NULL;
+    }      
+
+  /* It's safe to register the same type multiple times */
+  for (l = extension_point->extensions; l != NULL; l = l->next)
+    {
+      extension = l->data;
+      if (extension->type == type)
+	return extension;
+    }
+  
+  extension = g_slice_new0 (GIOExtension);
+  extension->type = type;
+  extension->name = g_strdup (extension_name);
+  extension->priority = priority;
+  
+  extension_point->extensions = g_list_insert_sorted (extension_point->extensions,
+						      extension, extension_prio_compare);
+  
+  return extension;
+}
+
+/**
+ * g_io_extension_ref_class:
+ * @extension: a #GIOExtension
+ *
+ * Gets a reference to the class for the type that is 
+ * associated with @extension.
+ *
+ * Returns: the #GTypeClass for the type of @extension
+ */
+GTypeClass *
+g_io_extension_ref_class (GIOExtension *extension)
+{
+  return g_type_class_ref (extension->type);
+}
+
+/**
+ * g_io_extension_get_type:
+ * @extension: a #GIOExtension
+ *
+ * Gets the type associated with @extension.
+ *
+ * Returns: the type of @extension
+ */
+GType
+g_io_extension_get_type (GIOExtension *extension)
+{
+  return extension->type;
+}
+
+/**
+ * g_io_extension_get_name:
+ * @extension: a #GIOExtension
+ *
+ * Gets the name under which @extension was registered.
+ *
+ * Note that the same type may be registered as extension
+ * for multiple extension points, under different names.
+ *
+ * Returns: the name of @extension.
+ */
+const char *
+g_io_extension_get_name (GIOExtension *extension)
+{
+  return extension->name;
+}
+
+/**
+ * g_io_extension_get_priority:
+ * @extension: a #GIOExtension
+ *
+ * Gets the priority with which @extension was registered.
+ *
+ * Returns: the priority of @extension
+ */
+gint
+g_io_extension_get_priority (GIOExtension *extension)
+{
+  return extension->priority;
+}
+
+#define __G_IO_MODULE_C__
+#include "gioaliasdef.c"
diff --git a/gio/giomodule.h b/gio/giomodule.h
new file mode 100644
index 0000000..5a1aee5
--- /dev/null
+++ b/gio/giomodule.h
@@ -0,0 +1,97 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_IO_MODULE_H__
+#define __G_IO_MODULE_H__
+
+#include <gio/giotypes.h>
+#include <gmodule.h>
+
+G_BEGIN_DECLS
+
+#define G_IO_TYPE_MODULE         (g_io_module_get_type ())
+#define G_IO_MODULE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_IO_TYPE_MODULE, GIOModule))
+#define G_IO_MODULE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_IO_TYPE_MODULE, GIOModuleClass))
+#define G_IO_IS_MODULE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_IO_TYPE_MODULE))
+#define G_IO_IS_MODULE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_IO_TYPE_MODULE))
+#define G_IO_MODULE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_IO_TYPE_MODULE, GIOModuleClass))
+
+/**
+ * GIOModule:
+ *
+ * Opaque module base class for extending GIO.
+ **/
+typedef struct _GIOModuleClass GIOModuleClass;
+
+GType              g_io_module_get_type                       (void) G_GNUC_CONST;
+GIOModule         *g_io_module_new                            (const gchar       *filename);
+
+GList             *g_io_modules_load_all_in_directory         (const gchar       *dirname);
+
+GIOExtensionPoint *g_io_extension_point_register              (const char        *name);
+GIOExtensionPoint *g_io_extension_point_lookup                (const char        *name);
+void               g_io_extension_point_set_required_type     (GIOExtensionPoint *extension_point,
+							       GType              type);
+GType              g_io_extension_point_get_required_type     (GIOExtensionPoint *extension_point);
+GList             *g_io_extension_point_get_extensions        (GIOExtensionPoint *extension_point);
+GIOExtension *     g_io_extension_point_get_extension_by_name (GIOExtensionPoint *extension_point,
+							       const char        *name);
+GIOExtension *     g_io_extension_point_implement             (const char        *extension_point_name,
+							       GType              type,
+							       const char        *extension_name,
+							       gint               priority);
+
+GType              g_io_extension_get_type                    (GIOExtension      *extension);
+const char *       g_io_extension_get_name                    (GIOExtension      *extension);
+gint               g_io_extension_get_priority                (GIOExtension      *extension);
+GTypeClass*        g_io_extension_ref_class                   (GIOExtension      *extension);
+
+
+/* API for the modules to implement */
+
+/**
+ * g_io_module_load:
+ * @module: a #GIOModule.
+ *
+ * Required API for GIO modules to implement.
+ * This function is ran after the module has been loaded into GIO,
+ * to initialize the module.
+ **/
+void   g_io_module_load   (GIOModule *module);
+
+/**
+ * g_io_module_unload:
+ * @module: a #GIOModule.
+ *
+ * Required API for GIO modules to implement.
+ * This function is ran when the module is being unloaded from GIO,
+ * to finalize the module.
+ **/
+void   g_io_module_unload (GIOModule *module);
+
+G_END_DECLS
+
+#endif /* __G_IO_MODULE_H__ */
diff --git a/gio/gioscheduler.c b/gio/gioscheduler.c
new file mode 100644
index 0000000..14b59fe
--- /dev/null
+++ b/gio/gioscheduler.c
@@ -0,0 +1,461 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include "gioscheduler.h"
+#include "gcancellable.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gioscheduler
+ * @short_description: I/O Scheduler
+ * @include: gio/gio.h
+ * 
+ * Schedules asynchronous I/O operations. #GIOScheduler integrates 
+ * into the main event loop (#GMainLoop) and may use threads if they 
+ * are available.
+ * 
+ * <para id="io-priority"><indexterm><primary>I/O priority</primary></indexterm>
+ * Each I/O operation has a priority, and the scheduler uses the priorities
+ * to determine the order in which operations are executed. They are 
+ * <emphasis>not</emphasis> used to determine system-wide I/O scheduling.
+ * Priorities are integers, with lower numbers indicating higher priority. 
+ * It is recommended to choose priorities between %G_PRIORITY_LOW and 
+ * %G_PRIORITY_HIGH, with %G_PRIORITY_DEFAULT as a default.
+ * </para>
+ **/
+
+struct _GIOSchedulerJob {
+  GSList *active_link;
+  GIOSchedulerJobFunc job_func;
+  GSourceFunc cancel_func; /* Runs under job map lock */
+  gpointer data;
+  GDestroyNotify destroy_notify;
+
+  gint io_priority;
+  GCancellable *cancellable;
+
+  guint idle_tag;
+};
+
+G_LOCK_DEFINE_STATIC(active_jobs);
+static GSList *active_jobs = NULL;
+
+static GThreadPool *job_thread_pool = NULL;
+
+static void io_job_thread (gpointer data,
+			   gpointer user_data);
+
+static void
+g_io_job_free (GIOSchedulerJob *job)
+{
+  if (job->cancellable)
+    g_object_unref (job->cancellable);
+  g_free (job);
+}
+
+static gint
+g_io_job_compare (gconstpointer a,
+		  gconstpointer b,
+		  gpointer      user_data)
+{
+  const GIOSchedulerJob *aa = a;
+  const GIOSchedulerJob *bb = b;
+
+  /* Cancelled jobs are set prio == -1, so that
+     they are executed as quickly as possible */
+  
+  /* Lower value => higher priority */
+  if (aa->io_priority < bb->io_priority)
+    return -1;
+  if (aa->io_priority == bb->io_priority)
+    return 0;
+  return 1;
+}
+
+static gpointer
+init_scheduler (gpointer arg)
+{
+  if (job_thread_pool == NULL)
+    {
+      /* TODO: thread_pool_new can fail */
+      job_thread_pool = g_thread_pool_new (io_job_thread,
+					   NULL,
+					   10,
+					   FALSE,
+					   NULL);
+      if (job_thread_pool != NULL)
+	{
+	  g_thread_pool_set_sort_function (job_thread_pool,
+					   g_io_job_compare,
+					   NULL);
+	  /* It's kinda weird that this is a global setting
+	   * instead of per threadpool. However, we really
+	   * want to cache some threads, but not keep around
+	   * those threads forever. */
+	  g_thread_pool_set_max_idle_time (15 * 1000);
+	  g_thread_pool_set_max_unused_threads (2);
+	}
+    }
+  return NULL;
+}
+
+static void
+remove_active_job (GIOSchedulerJob *job)
+{
+  GIOSchedulerJob *other_job;
+  GSList *l;
+  gboolean resort_jobs;
+  
+  G_LOCK (active_jobs);
+  active_jobs = g_slist_delete_link (active_jobs, job->active_link);
+  
+  resort_jobs = FALSE;
+  for (l = active_jobs; l != NULL; l = l->next)
+    {
+      other_job = l->data;
+      if (other_job->io_priority >= 0 &&
+	  g_cancellable_is_cancelled (other_job->cancellable))
+	{
+	  other_job->io_priority = -1;
+	  resort_jobs = TRUE;
+	}
+    }
+  G_UNLOCK (active_jobs);
+  
+  if (resort_jobs &&
+      job_thread_pool != NULL)
+    g_thread_pool_set_sort_function (job_thread_pool,
+				     g_io_job_compare,
+				     NULL);
+
+}
+
+static void
+job_destroy (gpointer data)
+{
+  GIOSchedulerJob *job = data;
+
+  if (job->destroy_notify)
+    job->destroy_notify (job->data);
+
+  remove_active_job (job);
+  g_io_job_free (job);
+}
+
+static void
+io_job_thread (gpointer data,
+	       gpointer user_data)
+{
+  GIOSchedulerJob *job = data;
+  gboolean result;
+
+  if (job->cancellable)
+    g_cancellable_push_current (job->cancellable);
+
+  do 
+    {
+      result = job->job_func (job, job->cancellable, job->data);
+    }
+  while (result);
+
+  if (job->cancellable)
+    g_cancellable_pop_current (job->cancellable);
+
+  job_destroy (job);
+}
+
+static gboolean
+run_job_at_idle (gpointer data)
+{
+  GIOSchedulerJob *job = data;
+  gboolean result;
+
+  if (job->cancellable)
+    g_cancellable_push_current (job->cancellable);
+  
+  result = job->job_func (job, job->cancellable, job->data);
+  
+  if (job->cancellable)
+    g_cancellable_pop_current (job->cancellable);
+
+  return result;
+}
+
+/**
+ * g_io_scheduler_push_job:
+ * @job_func: a #GIOSchedulerJobFunc.
+ * @user_data: data to pass to @job_func
+ * @notify: a #GDestroyNotify for @user_data, or %NULL
+ * @io_priority: the <link linkend="gioscheduler">I/O priority</link> 
+ * of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ *
+ * Schedules the I/O job to run. 
+ *
+ * @notify will be called on @user_data after @job_func has returned,
+ * regardless whether the job was cancelled or has run to completion.
+ * 
+ * If @cancellable is not %NULL, it can be used to cancel the I/O job
+ * by calling g_cancellable_cancel() or by calling 
+ * g_io_scheduler_cancel_all_jobs().
+ **/
+void
+g_io_scheduler_push_job (GIOSchedulerJobFunc  job_func,
+			 gpointer             user_data,
+			 GDestroyNotify       notify,
+			 gint                 io_priority,
+			 GCancellable        *cancellable)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  GIOSchedulerJob *job;
+
+  g_return_if_fail (job_func != NULL);
+
+  job = g_new0 (GIOSchedulerJob, 1);
+  job->job_func = job_func;
+  job->data = user_data;
+  job->destroy_notify = notify;
+  job->io_priority = io_priority;
+    
+  if (cancellable)
+    job->cancellable = g_object_ref (cancellable);
+
+  G_LOCK (active_jobs);
+  active_jobs = g_slist_prepend (active_jobs, job);
+  job->active_link = active_jobs;
+  G_UNLOCK (active_jobs);
+
+  if (g_thread_supported())
+    {
+      g_once (&once_init, init_scheduler, NULL);
+      g_thread_pool_push (job_thread_pool, job, NULL);
+    }
+  else
+    {
+      /* Threads not available, instead do the i/o sync inside a
+       * low prio idle handler
+       */
+      job->idle_tag = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE + 1 + io_priority / 10,
+				       run_job_at_idle,
+				       job, job_destroy);
+    }
+}
+
+/**
+ * g_io_scheduler_cancel_all_jobs:
+ * 
+ * Cancels all cancellable I/O jobs. 
+ *
+ * A job is cancellable if a #GCancellable was passed into
+ * g_io_scheduler_push_job().
+ **/
+void
+g_io_scheduler_cancel_all_jobs (void)
+{
+  GSList *cancellable_list, *l;
+  
+  G_LOCK (active_jobs);
+  cancellable_list = NULL;
+  for (l = active_jobs; l != NULL; l = l->next)
+    {
+      GIOSchedulerJob *job = l->data;
+      if (job->cancellable)
+	cancellable_list = g_slist_prepend (cancellable_list,
+					    g_object_ref (job->cancellable));
+    }
+  G_UNLOCK (active_jobs);
+
+  for (l = cancellable_list; l != NULL; l = l->next)
+    {
+      GCancellable *c = l->data;
+      g_cancellable_cancel (c);
+      g_object_unref (c);
+    }
+  g_slist_free (cancellable_list);
+}
+
+typedef struct {
+  GSourceFunc func;
+  gboolean ret_val;
+  gpointer data;
+  GDestroyNotify notify;
+
+  GMutex *ack_lock;
+  GCond *ack_condition;
+} MainLoopProxy;
+
+static gboolean
+mainloop_proxy_func (gpointer data)
+{
+  MainLoopProxy *proxy = data;
+
+  proxy->ret_val = proxy->func (proxy->data);
+
+  if (proxy->notify)
+    proxy->notify (proxy->data);
+  
+  if (proxy->ack_lock)
+    {
+      g_mutex_lock (proxy->ack_lock);
+      g_cond_signal (proxy->ack_condition);
+      g_mutex_unlock (proxy->ack_lock);
+    }
+  
+  return FALSE;
+}
+
+static void
+mainloop_proxy_free (MainLoopProxy *proxy)
+{
+  if (proxy->ack_lock)
+    {
+      g_mutex_free (proxy->ack_lock);
+      g_cond_free (proxy->ack_condition);
+    }
+  
+  g_free (proxy);
+}
+
+/**
+ * g_io_scheduler_job_send_to_mainloop:
+ * @job: a #GIOSchedulerJob
+ * @func: a #GSourceFunc callback that will be called in the main thread
+ * @user_data: data to pass to @func
+ * @notify: a #GDestroyNotify for @user_data, or %NULL
+ * 
+ * Used from an I/O job to send a callback to be run in the 
+ * main loop (main thread), waiting for the result (and thus 
+ * blocking the I/O job).
+ *
+ * Returns: The return value of @func
+ **/
+gboolean
+g_io_scheduler_job_send_to_mainloop (GIOSchedulerJob *job,
+				     GSourceFunc      func,
+				     gpointer         user_data,
+				     GDestroyNotify   notify)
+{
+  GSource *source;
+  MainLoopProxy *proxy;
+  guint id;
+  gboolean ret_val;
+
+  g_return_val_if_fail (job != NULL, FALSE);
+  g_return_val_if_fail (func != NULL, FALSE);
+
+  if (job->idle_tag)
+    {
+      /* We just immediately re-enter in the case of idles (non-threads)
+       * Anything else would just deadlock. If you can't handle this, enable threads.
+       */
+      ret_val = func (user_data);
+      if (notify)
+	notify (user_data);
+      return ret_val;
+    }
+  
+  proxy = g_new0 (MainLoopProxy, 1);
+  proxy->func = func;
+  proxy->data = user_data;
+  proxy->notify = notify;
+  proxy->ack_lock = g_mutex_new ();
+  proxy->ack_condition = g_cond_new ();
+  g_mutex_lock (proxy->ack_lock);
+  
+  source = g_idle_source_new ();
+  g_source_set_priority (source, G_PRIORITY_DEFAULT);
+  g_source_set_callback (source, mainloop_proxy_func, proxy,
+			 NULL);
+
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  g_cond_wait (proxy->ack_condition, proxy->ack_lock);
+  g_mutex_unlock (proxy->ack_lock);
+
+  ret_val = proxy->ret_val;
+  mainloop_proxy_free (proxy);
+  
+  return ret_val;
+}
+
+/**
+ * g_io_scheduler_job_send_to_mainloop_async:
+ * @job: a #GIOSchedulerJob
+ * @func: a #GSourceFunc callback that will be called in the main thread
+ * @user_data: data to pass to @func
+ * @notify: a #GDestroyNotify for @user_data, or %NULL
+ * 
+ * Used from an I/O job to send a callback to be run asynchronously 
+ * in the main loop (main thread). The callback will be run when the 
+ * main loop is available, but at that time the I/O job might have 
+ * finished. The return value from the callback is ignored.
+ *
+ * Note that if you are passing the @user_data from g_io_scheduler_push_job()
+ * on to this function you have to ensure that it is not freed before
+ * @func is called, either by passing %NULL as @notify to 
+ * g_io_scheduler_push_job() or by using refcounting for @user_data.
+ **/
+void
+g_io_scheduler_job_send_to_mainloop_async (GIOSchedulerJob *job,
+					   GSourceFunc      func,
+					   gpointer         user_data,
+					   GDestroyNotify   notify)
+{
+  GSource *source;
+  MainLoopProxy *proxy;
+  guint id;
+
+  g_return_if_fail (job != NULL);
+  g_return_if_fail (func != NULL);
+
+  if (job->idle_tag)
+    {
+      /* We just immediately re-enter in the case of idles (non-threads)
+       * Anything else would just deadlock. If you can't handle this, enable threads.
+       */
+      func (user_data);
+      if (notify)
+	notify (user_data);
+      return;
+    }
+  
+  proxy = g_new0 (MainLoopProxy, 1);
+  proxy->func = func;
+  proxy->data = user_data;
+  proxy->notify = notify;
+  
+  source = g_idle_source_new ();
+  g_source_set_priority (source, G_PRIORITY_DEFAULT);
+  g_source_set_callback (source, mainloop_proxy_func, proxy,
+			 (GDestroyNotify)mainloop_proxy_free);
+
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+}
+
+
+#define __G_IO_SCHEDULER_C__
+#include "gioaliasdef.c"
diff --git a/gio/gioscheduler.h b/gio/gioscheduler.h
new file mode 100644
index 0000000..7d6b527
--- /dev/null
+++ b/gio/gioscheduler.h
@@ -0,0 +1,52 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_IO_SCHEDULER_H__
+#define __G_IO_SCHEDULER_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+
+void     g_io_scheduler_push_job                   (GIOSchedulerJobFunc  job_func,
+						    gpointer             user_data,
+						    GDestroyNotify       notify,
+						    gint                 io_priority,
+						    GCancellable        *cancellable);
+void     g_io_scheduler_cancel_all_jobs            (void);
+gboolean g_io_scheduler_job_send_to_mainloop       (GIOSchedulerJob     *job,
+						    GSourceFunc          func,
+						    gpointer             user_data,
+						    GDestroyNotify       notify);
+void     g_io_scheduler_job_send_to_mainloop_async (GIOSchedulerJob     *job,
+						    GSourceFunc          func,
+						    gpointer             user_data,
+						    GDestroyNotify       notify);
+
+G_END_DECLS
+
+#endif /* __G_IO_SCHEDULER_H__ */
diff --git a/gio/giotypes.h b/gio/giotypes.h
new file mode 100644
index 0000000..981c195
--- /dev/null
+++ b/gio/giotypes.h
@@ -0,0 +1,196 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __GIO_TYPES_H__
+#define __GIO_TYPES_H__
+
+#include <gio/gioenums.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GAppLaunchContext             GAppLaunchContext;
+typedef struct _GAppInfo                      GAppInfo; /* Dummy typedef */
+typedef struct _GAsyncResult                  GAsyncResult; /* Dummy typedef */
+typedef struct _GBufferedInputStream          GBufferedInputStream;
+typedef struct _GBufferedOutputStream         GBufferedOutputStream;
+typedef struct _GCancellable                  GCancellable;
+typedef struct _GDataInputStream              GDataInputStream;
+
+/**
+ * GDrive:
+ *
+ * Opaque drive object.
+ **/
+typedef struct _GDrive                        GDrive; /* Dummy typedef */
+typedef struct _GFileEnumerator               GFileEnumerator;
+typedef struct _GFileMonitor                  GFileMonitor;
+typedef struct _GFilterInputStream            GFilterInputStream;
+typedef struct _GFilterOutputStream           GFilterOutputStream;
+
+/**
+ * GFile:
+ *
+ * A handle to an object implementing the #GFileIface interface.
+ * Generally stores a location within the file system. Handles do not
+ * necessarily represent files or directories that currently exist.
+ **/
+typedef struct _GFile                         GFile; /* Dummy typedef */
+typedef struct _GFileInfo                     GFileInfo;
+
+/**
+ * GFileAttributeMatcher:
+ *
+ * Determines if a string matches a file attribute.
+ **/
+typedef struct _GFileAttributeMatcher         GFileAttributeMatcher;
+typedef struct _GFileAttributeInfo            GFileAttributeInfo;
+typedef struct _GFileAttributeInfoList        GFileAttributeInfoList;
+typedef struct _GFileInputStream              GFileInputStream;
+typedef struct _GFileOutputStream             GFileOutputStream;
+typedef struct _GFileIcon                     GFileIcon;
+typedef struct _GFilenameCompleter            GFilenameCompleter;
+
+
+typedef struct _GIcon                         GIcon; /* Dummy typedef */
+typedef struct _GInputStream                  GInputStream;
+typedef struct _GIOModule                     GIOModule;
+typedef struct _GIOExtensionPoint             GIOExtensionPoint;
+typedef struct _GIOExtension                  GIOExtension;
+
+/**
+ * GIOSchedulerJob:
+ *
+ * Opaque class for definining and scheduling IO jobs.
+ **/
+typedef struct _GIOSchedulerJob               GIOSchedulerJob;
+typedef struct _GLoadableIcon                 GLoadableIcon; /* Dummy typedef */
+typedef struct _GMemoryInputStream            GMemoryInputStream;
+typedef struct _GMemoryOutputStream           GMemoryOutputStream;
+
+/**
+ * GMount:
+ *
+ * A handle to an object implementing the #GMountIface interface.
+ **/
+typedef struct _GMount                        GMount; /* Dummy typedef */
+typedef struct _GMountOperation               GMountOperation;
+typedef struct _GOutputStream                 GOutputStream;
+typedef struct _GSeekable                     GSeekable;
+typedef struct _GSimpleAsyncResult            GSimpleAsyncResult;
+typedef struct _GThemedIcon                   GThemedIcon;
+typedef struct _GVfs                          GVfs; /* Dummy typedef */
+
+/**
+ * GVolume:
+ *
+ * Opaque mountable volume object.
+ **/
+typedef struct _GVolume                       GVolume; /* Dummy typedef */
+typedef struct _GVolumeMonitor                GVolumeMonitor;
+
+/**
+ * GAsyncReadyCallback:
+ * @source_object: the object the asynchronous operation was started with.
+ * @res: a #GAsyncResult.
+ * @user_data: user data passed to the callback.
+ *
+ * Type definition for a function that will be called back when an asynchronous
+ * operation within GIO has been completed.
+ **/
+typedef void (*GAsyncReadyCallback) (GObject *source_object,
+				     GAsyncResult *res,
+				     gpointer user_data);
+
+/**
+ * GFileProgressCallback:
+ * @current_num_bytes: the current number of bytes in the operation.
+ * @total_num_bytes: the total number of bytes in the operation.
+ * @user_data: user data passed to the callback.
+ *
+ * When doing file operations that may take a while, such as moving
+ * a file or copying a file, a progress callback is used to pass how
+ * far along that operation is to the application.
+ **/
+typedef void (*GFileProgressCallback) (goffset current_num_bytes,
+                                       goffset total_num_bytes,
+                                       gpointer user_data);
+
+/**
+ * GFileReadMoreCallback:
+ * @file_contents: the data as currently read.
+ * @file_size: the size of the data currently read.
+ * @callback_data: data passed to the callback.
+ *
+ * When loading the partial contents of a file with g_file_load_partial_contents_async(),
+ * it may become necessary to determine if any more data from the file should be loaded.
+ * A #GFileReadMoreCallback function facilitates this by returning %TRUE if more data
+ * should be read, or %FALSE otherwise.
+ *
+ * Returns: %TRUE if more data should be read back. %FALSE otherwise.
+ **/
+typedef gboolean (* GFileReadMoreCallback) (const char *file_contents,
+                                            goffset file_size,
+                                            gpointer callback_data);
+
+
+/**
+ * GIOSchedulerJobFunc:
+ * @job: a #GIOSchedulerJob.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @user_data: the data to pass to callback function
+ *
+ * I/O Job function.
+ *
+ * Note that depending on whether threads are available, the
+ * #GIOScheduler may run jobs in separate threads or in an idle
+ * in the mainloop.
+ *
+ * Long-running jobs should periodically check the @cancellable
+ * to see if they have been cancelled.
+ *
+ * Returns: %TRUE if this function should be called again to
+ *    complete the job, %FALSE if the job is complete (or cancelled)
+ **/
+typedef gboolean (*GIOSchedulerJobFunc) (GIOSchedulerJob *job,
+					 GCancellable    *cancellable,
+					 gpointer         user_data);
+
+/**
+ * GSimpleAsyncThreadFunc:
+ * @res: a #GSimpleAsyncResult.
+ * @object: a #GObject.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ *
+ * Simple thread function that runs an asynchronous operation and
+ * checks for cancellation.
+ **/
+typedef void (*GSimpleAsyncThreadFunc) (GSimpleAsyncResult *res,
+                                        GObject *object,
+                                        GCancellable *cancellable);
+
+G_END_DECLS
+
+#endif /* __GIO_TYPES_H__ */
diff --git a/gio/gloadableicon.c b/gio/gloadableicon.c
new file mode 100644
index 0000000..b5ba6f5
--- /dev/null
+++ b/gio/gloadableicon.c
@@ -0,0 +1,283 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gasyncresult.h"
+#include "gsimpleasyncresult.h"
+#include "gicon.h"
+#include "gloadableicon.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gloadableicon
+ * @short_description: Loadable Icons
+ * @include: gio/gio.h
+ * @see_also: #GIcon, #GThemedIcon
+ * 
+ * Extends the #GIcon interface and adds the ability to 
+ * load icons from streams.
+ **/
+
+static void          g_loadable_icon_real_load_async  (GLoadableIcon        *icon,
+						       int                   size,
+						       GCancellable         *cancellable,
+						       GAsyncReadyCallback   callback,
+						       gpointer              user_data);
+static GInputStream *g_loadable_icon_real_load_finish (GLoadableIcon        *icon,
+						       GAsyncResult         *res,
+						       char                **type,
+						       GError              **error);
+static void          g_loadable_icon_base_init        (gpointer              g_class);
+static void          g_loadable_icon_class_init       (gpointer              g_class,
+						       gpointer              class_data);
+
+GType
+g_loadable_icon_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo loadable_icon_info =
+	{
+        sizeof (GLoadableIconIface), /* class_size */
+	g_loadable_icon_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_loadable_icon_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GLoadableIcon"),
+				&loadable_icon_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_ICON);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_loadable_icon_class_init (gpointer g_class,
+			    gpointer class_data)
+{
+  GLoadableIconIface *iface = g_class;
+
+  iface->load_async = g_loadable_icon_real_load_async;
+  iface->load_finish = g_loadable_icon_real_load_finish;
+}
+
+static void
+g_loadable_icon_base_init (gpointer g_class)
+{
+}
+
+/**
+ * g_loadable_icon_load:
+ * @icon: a #GLoadableIcon.
+ * @size: an integer.
+ * @type:  a location to store the type of the loaded icon, %NULL to ignore.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Loads a loadable icon. For the asynchronous version of this function, 
+ * see g_loadable_icon_load_async().
+ * 
+ * Returns: a #GInputStream to read the icon from.
+ **/
+GInputStream *
+g_loadable_icon_load (GLoadableIcon  *icon,
+		      int             size,
+		      char          **type,
+		      GCancellable   *cancellable,
+		      GError        **error)
+{
+  GLoadableIconIface *iface;
+
+  g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL);
+
+  iface = G_LOADABLE_ICON_GET_IFACE (icon);
+
+  return (* iface->load) (icon, size, type, cancellable, error);
+}
+
+/**
+ * g_loadable_icon_load_async:
+ * @icon: a #GLoadableIcon.
+ * @size: an integer.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Loads an icon asynchronously. To finish this function, see 
+ * g_loadable_icon_load_finish(). For the synchronous, blocking 
+ * version of this function, see g_loadable_icon_load().
+ **/
+void
+g_loadable_icon_load_async (GLoadableIcon       *icon,
+                            int                  size,
+                            GCancellable        *cancellable,
+                            GAsyncReadyCallback  callback,
+                            gpointer             user_data)
+{
+  GLoadableIconIface *iface;
+  
+  g_return_if_fail (G_IS_LOADABLE_ICON (icon));
+
+  iface = G_LOADABLE_ICON_GET_IFACE (icon);
+
+  (* iface->load_async) (icon, size, cancellable, callback, user_data);
+}
+
+/**
+ * g_loadable_icon_load_finish:
+ * @icon: a #GLoadableIcon.
+ * @res: a #GAsyncResult.
+ * @type: a location to store the type of the loaded icon, %NULL to ignore.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes an asynchronous icon load started in g_loadable_icon_load_async().
+ * 
+ * Returns: a #GInputStream to read the icon from.
+ **/
+GInputStream *
+g_loadable_icon_load_finish (GLoadableIcon  *icon,
+			     GAsyncResult   *res,
+			     char          **type,
+			     GError        **error)
+{
+  GLoadableIconIface *iface;
+  
+  g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (res))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return NULL;
+    }
+  
+  iface = G_LOADABLE_ICON_GET_IFACE (icon);
+
+  return (* iface->load_finish) (icon, res, type, error);
+}
+
+/********************************************
+ *   Default implementation of async load   *
+ ********************************************/
+
+typedef struct {
+  int size;
+  char *type;
+  GInputStream *stream;
+} LoadData;
+
+static void
+load_data_free (LoadData *data)
+{
+  if (data->stream)
+    g_object_unref (data->stream);
+  g_free (data->type);
+  g_free (data);
+}
+
+static void
+load_async_thread (GSimpleAsyncResult *res,
+		   GObject            *object,
+		   GCancellable       *cancellable)
+{
+  GLoadableIconIface *iface;
+  GInputStream *stream;
+  LoadData *data;
+  GError *error = NULL;
+  char *type = NULL;
+
+  data = g_simple_async_result_get_op_res_gpointer (res);
+  
+  iface = G_LOADABLE_ICON_GET_IFACE (object);
+  stream = iface->load (G_LOADABLE_ICON (object), data->size, &type, cancellable, &error);
+
+  if (stream == NULL)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+  else
+    {
+      data->stream = stream;
+      data->type = type;
+    }
+}
+
+
+
+static void
+g_loadable_icon_real_load_async (GLoadableIcon       *icon,
+				 int                  size,
+				 GCancellable        *cancellable,
+				 GAsyncReadyCallback  callback,
+				 gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  LoadData *data;
+  
+  res = g_simple_async_result_new (G_OBJECT (icon), callback, user_data, g_loadable_icon_real_load_async);
+  data = g_new0 (LoadData, 1);
+  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify) load_data_free);
+  g_simple_async_result_run_in_thread (res, load_async_thread, 0, cancellable);
+  g_object_unref (res);
+}
+
+static GInputStream *
+g_loadable_icon_real_load_finish (GLoadableIcon        *icon,
+				  GAsyncResult         *res,
+				  char                **type,
+				  GError              **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+  LoadData *data;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_loadable_icon_real_load_async);
+
+  data = g_simple_async_result_get_op_res_gpointer (simple);
+
+  if (type)
+    {
+      *type = data->type;
+      data->type = NULL;
+    }
+
+  return g_object_ref (data->stream);
+}
+
+#define __G_LOADABLE_ICON_C__
+#include "gioaliasdef.c"
diff --git a/gio/gloadableicon.h b/gio/gloadableicon.h
new file mode 100644
index 0000000..754090f
--- /dev/null
+++ b/gio/gloadableicon.h
@@ -0,0 +1,97 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_LOADABLE_ICON_H__
+#define __G_LOADABLE_ICON_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOADABLE_ICON            (g_loadable_icon_get_type ())
+#define G_LOADABLE_ICON(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_LOADABLE_ICON, GLoadableIcon))
+#define G_IS_LOADABLE_ICON(obj)	        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_LOADABLE_ICON))
+#define G_LOADABLE_ICON_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_LOADABLE_ICON, GLoadableIconIface))
+
+/**
+ * GLoadableIcon:
+ *
+ * Generic type for all kinds of icons that can be loaded
+ * as a stream.
+ **/
+typedef struct _GLoadableIconIface    		GLoadableIconIface;
+
+/**
+ * GLoadableIconIface:
+ * @g_iface: The parent interface.
+ * @load: Loads an icon.
+ * @load_async: Loads an icon asynchronously.
+ * @load_finish: Finishes an asynchronous icon load.
+ *
+ * Interface for icons that can be loaded as a stream.
+ **/
+struct _GLoadableIconIface
+{
+  GTypeInterface g_iface;
+
+  /* Virtual Table */
+
+  GInputStream * (* load)        (GLoadableIcon       *icon,
+                                  int                  size,
+                                  char               **type,
+                                  GCancellable        *cancellable,
+                                  GError             **error);
+  void           (* load_async)  (GLoadableIcon       *icon,
+                                  int                  size,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data);
+  GInputStream * (* load_finish) (GLoadableIcon       *icon,
+                                  GAsyncResult        *res,
+                                  char               **type,
+                                  GError             **error);
+};
+
+GType         g_loadable_icon_get_type    (void) G_GNUC_CONST;
+
+GInputStream *g_loadable_icon_load        (GLoadableIcon        *icon,
+					   int                   size,
+					   char                **type,
+					   GCancellable         *cancellable,
+					   GError              **error);
+void          g_loadable_icon_load_async  (GLoadableIcon        *icon,
+					   int                   size,
+					   GCancellable         *cancellable,
+					   GAsyncReadyCallback   callback,
+					   gpointer              user_data);
+GInputStream *g_loadable_icon_load_finish (GLoadableIcon        *icon,
+					   GAsyncResult         *res,
+					   char                **type,
+					   GError              **error);
+
+G_END_DECLS
+
+#endif /* __G_LOADABLE_ICON_H__ */
diff --git a/gio/glocaldirectorymonitor.c b/gio/glocaldirectorymonitor.c
new file mode 100644
index 0000000..42c2ce0
--- /dev/null
+++ b/gio/glocaldirectorymonitor.c
@@ -0,0 +1,304 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include "glocaldirectorymonitor.h"
+#include "gunixmounts.h"
+#include "giomodule-priv.h"
+#include "gfile.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include <string.h>
+
+#include "gioalias.h"
+
+enum
+{
+  PROP_0,
+  PROP_DIRNAME
+};
+
+static gboolean g_local_directory_monitor_cancel (GFileMonitor      *monitor);
+static void     mounts_changed                   (GUnixMountMonitor *mount_monitor, 
+                                                  gpointer           user_data);
+
+G_DEFINE_ABSTRACT_TYPE (GLocalDirectoryMonitor, g_local_directory_monitor, G_TYPE_FILE_MONITOR)
+
+static void
+g_local_directory_monitor_finalize (GObject *object)
+{
+  GLocalDirectoryMonitor *local_monitor;
+  local_monitor = G_LOCAL_DIRECTORY_MONITOR (object);
+
+  g_free (local_monitor->dirname);
+
+  if (local_monitor->mount_monitor)
+    {
+      g_signal_handlers_disconnect_by_func (local_monitor->mount_monitor, mounts_changed, local_monitor);
+      g_object_unref (local_monitor->mount_monitor);
+      local_monitor->mount_monitor = NULL;
+    }
+
+  G_OBJECT_CLASS (g_local_directory_monitor_parent_class)->finalize (object);
+}
+
+static void
+g_local_directory_monitor_set_property (GObject      *object,
+                                        guint         property_id,
+                                        const GValue *value,
+                                        GParamSpec   *pspec)
+{
+  switch (property_id)
+  {
+    case PROP_DIRNAME:
+      /* Do nothing */
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+  }
+}
+
+static GObject *
+g_local_directory_monitor_constructor (GType                  type,
+                                       guint                  n_construct_properties,
+                                       GObjectConstructParam *construct_properties)
+{
+  GObject *obj;
+  GLocalDirectoryMonitorClass *klass;
+  GObjectClass *parent_class;
+  GLocalDirectoryMonitor *local_monitor;
+  const gchar *dirname = NULL;
+  gint i;
+  
+  klass = G_LOCAL_DIRECTORY_MONITOR_CLASS (g_type_class_peek (G_TYPE_LOCAL_DIRECTORY_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type,
+                                   n_construct_properties,
+                                   construct_properties);
+
+  local_monitor = G_LOCAL_DIRECTORY_MONITOR (obj);
+
+  for (i = 0; i < n_construct_properties; i++)
+    {
+      if (strcmp ("dirname", g_param_spec_get_name (construct_properties[i].pspec)) == 0)
+        {
+          g_warn_if_fail (G_VALUE_HOLDS_STRING (construct_properties[i].value));
+          dirname = g_value_get_string (construct_properties[i].value);
+          break;
+        }
+    }
+
+  local_monitor->dirname = g_strdup (dirname);
+
+  if (!klass->mount_notify)
+    {
+#ifdef G_OS_WIN32
+      /*claim everything was mounted */
+      local_monitor->was_mounted = TRUE;
+#else
+      GUnixMountEntry *mount;
+      
+      /* Emulate unmount detection */
+      
+      mount = g_unix_mount_at (local_monitor->dirname, NULL);
+      
+      local_monitor->was_mounted = mount != NULL;
+      
+      if (mount)
+        g_unix_mount_free (mount);
+
+      local_monitor->mount_monitor = g_unix_mount_monitor_new ();
+      g_signal_connect_object (local_monitor->mount_monitor, "mounts-changed",
+			       G_CALLBACK (mounts_changed), local_monitor, 0);
+#endif
+    }
+
+  return obj;
+}
+
+static void
+g_local_directory_monitor_class_init (GLocalDirectoryMonitorClass* klass)
+{
+  GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+  GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_local_directory_monitor_finalize;
+  gobject_class->set_property = g_local_directory_monitor_set_property;
+  gobject_class->constructor = g_local_directory_monitor_constructor;
+
+  file_monitor_class->cancel = g_local_directory_monitor_cancel;
+
+  g_object_class_install_property (gobject_class, 
+                                   PROP_DIRNAME,
+                                   g_param_spec_string ("dirname", 
+                                                        P_("Directory name"), 
+                                                        P_("Directory to monitor"),
+                                                        NULL, 
+                                                        G_PARAM_CONSTRUCT_ONLY|
+                                                        G_PARAM_WRITABLE|
+                                                        G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  klass->mount_notify = FALSE;
+}
+
+static void
+g_local_directory_monitor_init (GLocalDirectoryMonitor *local_monitor)
+{
+}
+
+static void
+mounts_changed (GUnixMountMonitor *mount_monitor,
+                gpointer           user_data)
+{
+  GLocalDirectoryMonitor *local_monitor = user_data;
+  GUnixMountEntry *mount;
+  gboolean is_mounted;
+  GFile *file;
+  
+  /* Emulate unmount detection */
+#ifdef G_OS_WIN32
+  mount = NULL;
+  /*claim everything was mounted */
+  is_mounted = TRUE;
+#else  
+  mount = g_unix_mount_at (local_monitor->dirname, NULL);
+  
+  is_mounted = mount != NULL;
+  
+  if (mount)
+    g_unix_mount_free (mount);
+#endif
+
+  if (local_monitor->was_mounted != is_mounted)
+    {
+      if (local_monitor->was_mounted && !is_mounted)
+        {
+          file = g_file_new_for_path (local_monitor->dirname);
+          g_file_monitor_emit_event (G_FILE_MONITOR (local_monitor),
+				     file, NULL,
+				     G_FILE_MONITOR_EVENT_UNMOUNTED);
+          g_object_unref (file);
+        }
+      local_monitor->was_mounted = is_mounted;
+    }
+}
+
+static gpointer
+get_default_local_directory_monitor (gpointer data)
+{
+  GLocalDirectoryMonitorClass *chosen_class;
+  GLocalDirectoryMonitorClass **ret = data;
+  GIOExtensionPoint *ep;
+  GList *extensions, *l;
+
+  _g_io_modules_ensure_loaded ();
+
+  ep = g_io_extension_point_lookup (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME);
+
+  extensions = g_io_extension_point_get_extensions (ep);
+  
+  chosen_class = NULL;
+  for (l = extensions; l != NULL; l = l->next)
+    {
+      GIOExtension *extension = l->data;
+      GLocalDirectoryMonitorClass *klass;
+      
+      klass = G_LOCAL_DIRECTORY_MONITOR_CLASS (g_io_extension_ref_class (extension));
+      
+      if (klass->is_supported ())
+	{
+	  chosen_class = klass;
+	  break;
+	}
+      else
+	g_type_class_unref (klass);
+    }
+  
+  if (chosen_class)
+    {
+      *ret = chosen_class;
+      return (gpointer)G_TYPE_FROM_CLASS (chosen_class);
+    }
+  else
+    return (gpointer)G_TYPE_INVALID;
+}
+
+/**
+ * _g_local_directory_monitor_new:
+ * @dirname: filename of the directory to monitor.
+ * @flags: #GFileMonitorFlags.
+ * 
+ * Returns: new #GFileMonitor for the given @dirname.
+ **/
+GFileMonitor*
+_g_local_directory_monitor_new (const char         *dirname,
+				GFileMonitorFlags   flags,
+				GError            **error)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  GTypeClass *type_class;
+  GFileMonitor *monitor;
+  GType type;
+
+  type_class = NULL;
+  g_once (&once_init, get_default_local_directory_monitor, &type_class);
+  type = (GType)once_init.retval;
+
+  monitor = NULL;
+  if (type != G_TYPE_INVALID)
+    monitor = G_FILE_MONITOR (g_object_new (type, "dirname", dirname, NULL));
+  else
+    g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                         _("Unable to find default local directory monitor type"));
+
+  /* This is non-null on first pass here. Unref the class now.
+   * This is to avoid unloading the module and then loading it
+   * again which would happen if we unrefed the class
+   * before creating the monitor.
+   */
+  
+  if (type_class)
+    g_type_class_unref (type_class);
+  
+  return monitor;
+}
+
+static gboolean
+g_local_directory_monitor_cancel (GFileMonitor *monitor)
+{
+  GLocalDirectoryMonitor *local_monitor = G_LOCAL_DIRECTORY_MONITOR (monitor);
+
+  if (local_monitor->mount_monitor)
+    {
+      g_signal_handlers_disconnect_by_func (local_monitor->mount_monitor, mounts_changed, local_monitor);
+      g_object_unref (local_monitor->mount_monitor);
+      local_monitor->mount_monitor = NULL;
+    }
+
+  return TRUE;
+}
+
+#define __G_LOCAL_DIRECTORY_MONITOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/glocaldirectorymonitor.h b/gio/glocaldirectorymonitor.h
new file mode 100644
index 0000000..bf2f2b9
--- /dev/null
+++ b/gio/glocaldirectorymonitor.h
@@ -0,0 +1,70 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_DIRECTORY_MONITOR_H__
+#define __G_LOCAL_DIRECTORY_MONITOR_H__
+
+#include <gio/gfilemonitor.h>
+
+#include "gunixmounts.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_DIRECTORY_MONITOR		(g_local_directory_monitor_get_type ())
+#define G_LOCAL_DIRECTORY_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_LOCAL_DIRECTORY_MONITOR, GLocalDirectoryMonitor))
+#define G_LOCAL_DIRECTORY_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_LOCAL_DIRECTORY_MONITOR, GLocalDirectoryMonitorClass))
+#define G_IS_LOCAL_DIRECTORY_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_LOCAL_DIRECTORY_MONITOR))
+#define G_IS_LOCAL_DIRECTORY_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_LOCAL_DIRECTORY_MONITOR))
+
+#define G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME "gio-local-directory-monitor"
+
+typedef struct _GLocalDirectoryMonitor      GLocalDirectoryMonitor;
+typedef struct _GLocalDirectoryMonitorClass GLocalDirectoryMonitorClass;
+
+struct _GLocalDirectoryMonitor
+{
+  GFileMonitor parent_instance;
+
+  gchar             *dirname;
+  /* For mount emulation */
+  GUnixMountMonitor *mount_monitor;
+  gboolean           was_mounted;
+};
+
+struct _GLocalDirectoryMonitorClass
+{
+  GFileMonitorClass parent_class;
+
+  gboolean mount_notify;
+
+  gboolean (* is_supported) (void);
+};
+
+GType           g_local_directory_monitor_get_type (void) G_GNUC_CONST;
+
+GFileMonitor * _g_local_directory_monitor_new      (const char         *dirname,
+                                                    GFileMonitorFlags   flags,
+                                                    GError            **error);
+
+G_END_DECLS
+
+#endif /* __G_LOCAL_DIRECTORY_MONITOR_H__ */
diff --git a/gio/glocalfile.c b/gio/glocalfile.c
new file mode 100644
index 0000000..efb8417
--- /dev/null
+++ b/gio/glocalfile.c
@@ -0,0 +1,2299 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#if HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#elif HAVE_SYS_MOUNT_H
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/mount.h>
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#if defined(HAVE_STATFS) && defined(HAVE_STATVFS)
+/* Some systems have both statfs and statvfs, pick the
+   most "native" for these */
+# if !defined(HAVE_STRUCT_STATFS_F_BAVAIL)
+   /* on solaris and irix, statfs doesn't even have the
+      f_bavail field */
+#  define USE_STATVFS
+# else
+  /* at least on linux, statfs is the actual syscall */
+#  define USE_STATFS
+# endif
+
+#elif defined(HAVE_STATFS)
+
+# define USE_STATFS
+
+#elif defined(HAVE_STATVFS)
+
+# define USE_STATVFS
+
+#endif
+
+#include "gfileattribute.h"
+#include "glocalfile.h"
+#include "glocalfileinfo.h"
+#include "glocalfileenumerator.h"
+#include "glocalfileinputstream.h"
+#include "glocalfileoutputstream.h"
+#include "glocaldirectorymonitor.h"
+#include "glocalfilemonitor.h"
+#include "gmountprivate.h"
+#include "gunixmounts.h"
+#include "gioerror.h"
+#include <glib/gstdio.h>
+#include "glibintl.h"
+
+#ifdef G_OS_WIN32
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+#include <io.h>
+#include <direct.h>
+
+#ifndef FILE_READ_ONLY_VOLUME
+#define FILE_READ_ONLY_VOLUME           0x00080000
+#endif
+
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
+#endif
+#ifndef S_ISLNK
+#define S_ISLNK(m) (0)
+#endif
+#endif
+
+#include "gioalias.h"
+
+static void g_local_file_file_iface_init (GFileIface *iface);
+
+static GFileAttributeInfoList *local_writable_attributes = NULL;
+static GFileAttributeInfoList *local_writable_namespaces = NULL;
+
+struct _GLocalFile
+{
+  GObject parent_instance;
+
+  char *filename;
+};
+
+#define g_local_file_get_type _g_local_file_get_type
+G_DEFINE_TYPE_WITH_CODE (GLocalFile, g_local_file, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_FILE,
+						g_local_file_file_iface_init))
+
+static char *find_mountpoint_for (const char *file, dev_t dev);
+
+static void
+g_local_file_finalize (GObject *object)
+{
+  GLocalFile *local;
+
+  local = G_LOCAL_FILE (object);
+
+  g_free (local->filename);
+
+  G_OBJECT_CLASS (g_local_file_parent_class)->finalize (object);
+}
+
+static void
+g_local_file_class_init (GLocalFileClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GFileAttributeInfoList *list;
+
+  gobject_class->finalize = g_local_file_finalize;
+
+  /* Set up attribute lists */
+
+  /* Writable attributes: */
+
+  list = g_file_attribute_info_list_new ();
+
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_UNIX_MODE,
+				  G_FILE_ATTRIBUTE_TYPE_UINT32,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE |
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+  
+#ifdef HAVE_CHOWN
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_UNIX_UID,
+				  G_FILE_ATTRIBUTE_TYPE_UINT32,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_UNIX_GID,
+				  G_FILE_ATTRIBUTE_TYPE_UINT32,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+#endif
+  
+#ifdef HAVE_SYMLINK
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET,
+				  G_FILE_ATTRIBUTE_TYPE_BYTE_STRING,
+				  0);
+#endif
+  
+#ifdef HAVE_UTIMES
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_TIME_MODIFIED,
+				  G_FILE_ATTRIBUTE_TYPE_UINT64,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE |
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC,
+				  G_FILE_ATTRIBUTE_TYPE_UINT32,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE |
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+  /* When copying, the target file is accessed. Replicating
+   * the source access time does not make sense in this case.
+   */
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_TIME_ACCESS,
+				  G_FILE_ATTRIBUTE_TYPE_UINT64,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+  g_file_attribute_info_list_add (list,
+				  G_FILE_ATTRIBUTE_TIME_ACCESS_USEC,
+				  G_FILE_ATTRIBUTE_TYPE_UINT32,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+#endif
+
+  local_writable_attributes = list;
+
+  /* Writable namespaces: */
+  
+  list = g_file_attribute_info_list_new ();
+
+#ifdef HAVE_XATTR
+  g_file_attribute_info_list_add (list,
+				  "xattr",
+				  G_FILE_ATTRIBUTE_TYPE_STRING,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE |
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+  g_file_attribute_info_list_add (list,
+				  "xattr-sys",
+				  G_FILE_ATTRIBUTE_TYPE_STRING,
+				  G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED);
+#endif
+
+  local_writable_namespaces = list;
+}
+
+static void
+g_local_file_init (GLocalFile *local)
+{
+}
+
+
+static char *
+canonicalize_filename (const char *filename)
+{
+  char *canon, *start, *p, *q;
+  char *cwd;
+  int i;
+  
+  if (!g_path_is_absolute (filename))
+    {
+      cwd = g_get_current_dir ();
+      canon = g_build_filename (cwd, filename, NULL);
+      g_free (cwd);
+    }
+  else
+    canon = g_strdup (filename);
+
+  start = (char *)g_path_skip_root (canon);
+
+  if (start == NULL)
+    {
+      /* This shouldn't really happen, as g_get_current_dir() should
+	 return an absolute pathname, but bug 573843 shows this is
+	 not always happening */
+      g_free (canon);
+      return g_build_filename (G_DIR_SEPARATOR_S, filename, NULL);
+    }
+  
+  /* POSIX allows double slashes at the start to
+   * mean something special (as does windows too).
+   * So, "//" != "/", but more than two slashes
+   * is treated as "/".
+   */
+  i = 0;
+  for (p = start - 1;
+       (p >= canon) &&
+	 G_IS_DIR_SEPARATOR (*p);
+       p--)
+    i++;
+  if (i > 2)
+    {
+      i -= 1;
+      start -= i;
+      memmove (start, start+i, strlen (start+i)+1);
+    }
+  
+  p = start;
+  while (*p != 0)
+    {
+      if (p[0] == '.' && (p[1] == 0 || G_IS_DIR_SEPARATOR (p[1])))
+	{
+	  memmove (p, p+1, strlen (p+1)+1);
+	}
+      else if (p[0] == '.' && p[1] == '.' && (p[2] == 0 || G_IS_DIR_SEPARATOR (p[2])))
+	{
+	  q = p + 2;
+	  /* Skip previous separator */
+	  p = p - 2;
+	  if (p < start)
+	    p = start;
+	  while (p > start && !G_IS_DIR_SEPARATOR (*p))
+	    p--;
+	  if (G_IS_DIR_SEPARATOR (*p))
+	    *p++ = G_DIR_SEPARATOR;
+	  memmove (p, q, strlen (q)+1);
+	}
+      else
+	{
+	  /* Skip until next separator */
+	  while (*p != 0 && !G_IS_DIR_SEPARATOR (*p))
+	    p++;
+	  
+	  if (*p != 0)
+	    {
+	      /* Canonicalize one separator */
+	      *p++ = G_DIR_SEPARATOR;
+	    }
+	}
+
+      /* Remove additional separators */
+      q = p;
+      while (*q && G_IS_DIR_SEPARATOR (*q))
+	q++;
+
+      if (p != q)
+	memmove (p, q, strlen (q)+1);
+    }
+
+  /* Remove trailing slashes */
+  if (p > start && G_IS_DIR_SEPARATOR (*(p-1)))
+    *(p-1) = 0;
+  
+  return canon;
+}
+
+/**
+ * _g_local_file_new:
+ * @filename: filename of the file to create.
+ * 
+ * Returns: new local #GFile.
+ **/
+GFile *
+_g_local_file_new (const char *filename)
+{
+  GLocalFile *local;
+
+  local = g_object_new (G_TYPE_LOCAL_FILE, NULL);
+  local->filename = canonicalize_filename (filename);
+  
+  return G_FILE (local);
+}
+
+static gboolean
+g_local_file_is_native (GFile *file)
+{
+  return TRUE;
+}
+
+static gboolean
+g_local_file_has_uri_scheme (GFile      *file,
+			     const char *uri_scheme)
+{
+  return g_ascii_strcasecmp (uri_scheme, "file") == 0;
+}
+
+static char *
+g_local_file_get_uri_scheme (GFile *file)
+{
+  return g_strdup ("file");
+}
+
+static char *
+g_local_file_get_basename (GFile *file)
+{
+  return g_path_get_basename (G_LOCAL_FILE (file)->filename);
+}
+
+static char *
+g_local_file_get_path (GFile *file)
+{
+  return g_strdup (G_LOCAL_FILE (file)->filename);
+}
+
+static char *
+g_local_file_get_uri (GFile *file)
+{
+  return g_filename_to_uri (G_LOCAL_FILE (file)->filename, NULL, NULL);
+}
+
+static gboolean
+get_filename_charset (const gchar **filename_charset)
+{
+  const gchar **charsets;
+  gboolean is_utf8;
+  
+  is_utf8 = g_get_filename_charsets (&charsets);
+
+  if (filename_charset)
+    *filename_charset = charsets[0];
+  
+  return is_utf8;
+}
+
+static gboolean
+name_is_valid_for_display (const char *string,
+			   gboolean    is_valid_utf8)
+{
+  char c;
+
+  if (!is_valid_utf8 &&
+      !g_utf8_validate (string, -1, NULL))
+    return FALSE;
+
+  while ((c = *string++) != 0)
+    {
+      if (g_ascii_iscntrl (c))
+	return FALSE;
+    }
+
+  return TRUE;
+}
+
+static char *
+g_local_file_get_parse_name (GFile *file)
+{
+  const char *filename;
+  char *parse_name;
+  const gchar *charset;
+  char *utf8_filename;
+  char *roundtripped_filename;
+  gboolean free_utf8_filename;
+  gboolean is_valid_utf8;
+  char *escaped_path;
+  
+  filename = G_LOCAL_FILE (file)->filename;
+  if (get_filename_charset (&charset))
+    {
+      utf8_filename = (char *)filename;
+      free_utf8_filename = FALSE;
+      is_valid_utf8 = FALSE; /* Can't guarantee this */
+    }
+  else
+    {
+      utf8_filename = g_convert (filename, -1, 
+				 "UTF-8", charset, NULL, NULL, NULL);
+      free_utf8_filename = TRUE;
+      is_valid_utf8 = TRUE;
+
+      if (utf8_filename != NULL)
+	{
+	  /* Make sure we can roundtrip: */
+	  roundtripped_filename = g_convert (utf8_filename, -1,
+					     charset, "UTF-8", NULL, NULL, NULL);
+	  
+	  if (roundtripped_filename == NULL ||
+	      strcmp (utf8_filename, roundtripped_filename) != 0)
+	    {
+	      g_free (utf8_filename);
+	      utf8_filename = NULL;
+	    }
+
+	  g_free (roundtripped_filename);
+	}
+    }
+
+  if (utf8_filename != NULL &&
+      name_is_valid_for_display (utf8_filename, is_valid_utf8))
+    {
+      if (free_utf8_filename)
+	parse_name = utf8_filename;
+      else
+	parse_name = g_strdup (utf8_filename);
+    }
+  else
+    {
+      escaped_path = g_uri_escape_string (filename,
+					  G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/",
+					  TRUE);
+      parse_name = g_strconcat ("file://",
+				(*escaped_path != '/') ? "/" : "",
+				escaped_path,
+				NULL);
+      
+      g_free (escaped_path);
+
+      if (free_utf8_filename)
+	g_free (utf8_filename);
+    }
+  
+  return parse_name;
+}
+
+static GFile *
+g_local_file_get_parent (GFile *file)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  const char *non_root;
+  char *dirname;
+  GFile *parent;
+
+  /* Check for root */
+  non_root = g_path_skip_root (local->filename);
+  if (*non_root == 0)
+    return NULL;
+
+  dirname = g_path_get_dirname (local->filename);
+  parent = _g_local_file_new (dirname);
+  g_free (dirname);
+  return parent;
+}
+
+static GFile *
+g_local_file_dup (GFile *file)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+
+  return _g_local_file_new (local->filename);
+}
+
+static guint
+g_local_file_hash (GFile *file)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  
+  return g_str_hash (local->filename);
+}
+
+static gboolean
+g_local_file_equal (GFile *file1,
+		    GFile *file2)
+{
+  GLocalFile *local1 = G_LOCAL_FILE (file1);
+  GLocalFile *local2 = G_LOCAL_FILE (file2);
+
+  return g_str_equal (local1->filename, local2->filename);
+}
+
+static const char *
+match_prefix (const char *path, 
+              const char *prefix)
+{
+  int prefix_len;
+
+  prefix_len = strlen (prefix);
+  if (strncmp (path, prefix, prefix_len) != 0)
+    return NULL;
+  
+  /* Handle the case where prefix is the root, so that
+   * the IS_DIR_SEPRARATOR check below works */
+  if (prefix_len > 0 &&
+      G_IS_DIR_SEPARATOR (prefix[prefix_len-1]))
+    prefix_len--;
+  
+  return path + prefix_len;
+}
+
+static gboolean
+g_local_file_prefix_matches (GFile *parent,
+			     GFile *descendant)
+{
+  GLocalFile *parent_local = G_LOCAL_FILE (parent);
+  GLocalFile *descendant_local = G_LOCAL_FILE (descendant);
+  const char *remainder;
+
+  remainder = match_prefix (descendant_local->filename, parent_local->filename);
+  if (remainder != NULL && G_IS_DIR_SEPARATOR (*remainder))
+    return TRUE;
+  return FALSE;
+}
+
+static char *
+g_local_file_get_relative_path (GFile *parent,
+				GFile *descendant)
+{
+  GLocalFile *parent_local = G_LOCAL_FILE (parent);
+  GLocalFile *descendant_local = G_LOCAL_FILE (descendant);
+  const char *remainder;
+
+  remainder = match_prefix (descendant_local->filename, parent_local->filename);
+  
+  if (remainder != NULL && G_IS_DIR_SEPARATOR (*remainder))
+    return g_strdup (remainder + 1);
+  return NULL;
+}
+
+static GFile *
+g_local_file_resolve_relative_path (GFile      *file,
+				    const char *relative_path)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  char *filename;
+  GFile *child;
+
+  if (g_path_is_absolute (relative_path))
+    return _g_local_file_new (relative_path);
+  
+  filename = g_build_filename (local->filename, relative_path, NULL);
+  child = _g_local_file_new (filename);
+  g_free (filename);
+  
+  return child;
+}
+
+static GFileEnumerator *
+g_local_file_enumerate_children (GFile                *file,
+				 const char           *attributes,
+				 GFileQueryInfoFlags   flags,
+				 GCancellable         *cancellable,
+				 GError              **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  return _g_local_file_enumerator_new (local,
+				       attributes, flags,
+				       cancellable, error);
+}
+
+static GFile *
+g_local_file_get_child_for_display_name (GFile        *file,
+					 const char   *display_name,
+					 GError      **error)
+{
+  GFile *new_file;
+  char *basename;
+
+  basename = g_filename_from_utf8 (display_name, -1, NULL, NULL, NULL);
+  if (basename == NULL)
+    {
+      g_set_error (error, G_IO_ERROR,
+		   G_IO_ERROR_INVALID_FILENAME,
+		   _("Invalid filename %s"), display_name);
+      return NULL;
+    }
+
+  new_file = g_file_get_child (file, basename);
+  g_free (basename);
+  
+  return new_file;
+}
+
+#ifdef USE_STATFS
+static const char *
+get_fs_type (long f_type)
+{
+  /* filesystem ids taken from linux manpage */
+  switch (f_type) 
+    {
+    case 0xadf5:
+      return "adfs";
+    case 0x5346414f:
+      return "afs";
+    case 0x0187:
+      return "autofs";
+    case 0xADFF:
+      return "affs";
+    case 0x42465331:
+      return "befs";
+    case 0x1BADFACE:
+      return "bfs";
+    case 0x9123683E:
+      return "btrfs";
+    case 0xFF534D42:
+      return "cifs";
+    case 0x73757245:
+      return "coda";
+    case 0x012FF7B7:
+      return "coh";
+    case 0x28cd3d45:
+      return "cramfs";
+    case 0x1373:
+      return "devfs";
+    case 0x00414A53:
+      return "efs";
+    case 0x137D:
+      return "ext";
+    case 0xEF51:
+      return "ext2";
+    case 0xEF53:
+      return "ext3/ext4";
+    case 0x4244:
+      return "hfs";
+    case 0xF995E849:
+      return "hpfs";
+    case 0x958458f6:
+      return "hugetlbfs";
+    case 0x9660:
+      return "isofs";
+    case 0x72b6:
+      return "jffs2";
+    case 0x3153464a:
+      return "jfs";
+    case 0x137F:
+      return "minix";
+    case 0x138F:
+      return "minix2";
+    case 0x2468:
+      return "minix2";
+    case 0x2478:
+      return "minix22";
+    case 0x4d44:
+      return "msdos";
+    case 0x564c:
+      return "ncp";
+    case 0x6969:
+      return "nfs";
+    case 0x5346544e:
+      return "ntfs";
+    case 0x9fa1:
+      return "openprom";
+    case 0x9fa0:
+      return "proc";
+    case 0x002f:
+      return "qnx4";
+    case 0x52654973:
+      return "reiserfs";
+    case 0x7275:
+      return "romfs";
+    case 0x517B:
+      return "smb";
+    case 0x73717368:
+      return "squashfs";
+    case 0x012FF7B6:
+      return "sysv2";
+    case 0x012FF7B5:
+      return "sysv4";
+    case 0x01021994:
+      return "tmpfs";
+    case 0x15013346:
+      return "udf";
+    case 0x00011954:
+      return "ufs";
+    case 0x9fa2:
+      return "usbdevice";
+    case 0xa501FCF5:
+      return "vxfs";
+    case 0x012FF7B4:
+      return "xenix";
+    case 0x58465342:
+      return "xfs";
+    case 0x012FD16D:
+      return "xiafs";
+    default:
+      return NULL;
+    }
+}
+#endif
+
+#ifndef G_OS_WIN32
+
+G_LOCK_DEFINE_STATIC(mount_info_hash);
+static GHashTable *mount_info_hash = NULL;
+static guint64 mount_info_hash_cache_time = 0;
+
+typedef enum {
+  MOUNT_INFO_READONLY = 1<<0
+} MountInfo;
+
+static gboolean
+device_equal (gconstpointer v1,
+              gconstpointer v2)
+{
+  return *(dev_t *)v1 == *(dev_t *)v2;
+}
+
+static guint
+device_hash (gconstpointer v)
+{
+  return (guint) *(dev_t *)v;
+}
+
+static void
+get_mount_info (GFileInfo             *fs_info,
+		const char            *path,
+		GFileAttributeMatcher *matcher)
+{
+  struct stat buf;
+  gboolean got_info;
+  gpointer info_as_ptr;
+  guint mount_info;
+  char *mountpoint;
+  dev_t *dev;
+  GUnixMountEntry *mount;
+  guint64 cache_time;
+
+  if (g_lstat (path, &buf) != 0)
+    return;
+
+  G_LOCK (mount_info_hash);
+
+  if (mount_info_hash == NULL)
+    mount_info_hash = g_hash_table_new_full (device_hash, device_equal,
+					     g_free, NULL);
+
+
+  if (g_unix_mounts_changed_since (mount_info_hash_cache_time))
+    g_hash_table_remove_all (mount_info_hash);
+  
+  got_info = g_hash_table_lookup_extended (mount_info_hash,
+					   &buf.st_dev,
+					   NULL,
+					   &info_as_ptr);
+  
+  G_UNLOCK (mount_info_hash);
+  
+  mount_info = GPOINTER_TO_UINT (info_as_ptr);
+  
+  if (!got_info)
+    {
+      mount_info = 0;
+
+      mountpoint = find_mountpoint_for (path, buf.st_dev);
+      if (mountpoint == NULL)
+	mountpoint = g_strdup ("/");
+
+      mount = g_unix_mount_at (mountpoint, &cache_time);
+      if (mount)
+	{
+	  if (g_unix_mount_is_readonly (mount))
+	    mount_info |= MOUNT_INFO_READONLY;
+	  
+	  g_unix_mount_free (mount);
+	}
+
+      g_free (mountpoint);
+
+      dev = g_new0 (dev_t, 1);
+      *dev = buf.st_dev;
+      
+      G_LOCK (mount_info_hash);
+      mount_info_hash_cache_time = cache_time;
+      g_hash_table_insert (mount_info_hash, dev, GUINT_TO_POINTER (mount_info));
+      G_UNLOCK (mount_info_hash);
+    }
+
+  if (mount_info & MOUNT_INFO_READONLY)
+    g_file_info_set_attribute_boolean (fs_info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE);
+}
+
+#endif
+
+#ifdef G_OS_WIN32
+
+static gboolean
+is_xp_or_later (void)
+{
+  static int result = -1;
+
+  if (result == -1)
+    {
+#ifndef _MSC_VER    
+      OSVERSIONINFOEX ver_info = {0};
+      DWORDLONG cond_mask = 0;
+      int op = VER_GREATER_EQUAL;
+
+      ver_info.dwOSVersionInfoSize = sizeof ver_info;
+      ver_info.dwMajorVersion = 5;
+      ver_info.dwMinorVersion = 1;
+
+      VER_SET_CONDITION (cond_mask, VER_MAJORVERSION, op);
+      VER_SET_CONDITION (cond_mask, VER_MINORVERSION, op);
+
+      result = VerifyVersionInfo (&ver_info,
+				  VER_MAJORVERSION | VER_MINORVERSION, 
+				  cond_mask) != 0;
+#else
+      result = ((DWORD)(LOBYTE (LOWORD (GetVersion ())))) >= 5;  
+#endif
+    }
+
+  return result;
+}
+
+static wchar_t *
+get_volume_for_path (const char *path)
+{
+  long len;
+  wchar_t *wpath;
+  wchar_t *result;
+
+  wpath = g_utf8_to_utf16 (path, -1, NULL, NULL, NULL);
+  result = g_new (wchar_t, MAX_PATH);
+
+  if (!GetVolumePathNameW (wpath, result, MAX_PATH))
+    {
+      char *msg = g_win32_error_message (GetLastError ());
+      g_critical ("GetVolumePathName failed: %s", msg);
+      g_free (msg);
+      g_free (result);
+      g_free (wpath);
+      return NULL;
+    }
+
+  len = wcslen (result);
+  if (len > 0 && result[len-1] != L'\\')
+    {
+      result = g_renew (wchar_t, result, len + 2);
+      result[len] = L'\\';
+      result[len + 1] = 0;
+    }
+
+  g_free (wpath);
+  return result;
+}
+
+static char *
+find_mountpoint_for (const char *file, dev_t dev)
+{
+  wchar_t *wpath;
+  char *utf8_path;
+
+  wpath = get_volume_for_path (file);
+  if (!wpath)
+    return NULL;
+
+  utf8_path = g_utf16_to_utf8 (wpath, -1, NULL, NULL, NULL);
+
+  g_free (wpath);
+  return utf8_path;
+}
+
+static void
+get_filesystem_readonly (GFileInfo  *info,
+			 const char *path)
+{
+  wchar_t *rootdir;
+
+  rootdir = get_volume_for_path (path);
+
+  if (rootdir)
+    {
+      if (is_xp_or_later ())
+        {
+          DWORD flags;
+          if (GetVolumeInformationW (rootdir, NULL, 0, NULL, NULL, &flags, NULL, 0))
+	    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY,
+					       (flags & FILE_READ_ONLY_VOLUME) != 0);
+        }
+      else
+        {
+          if (GetDriveTypeW (rootdir) == DRIVE_CDROM)
+	    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, TRUE);
+        }
+    }
+
+  g_free (rootdir);
+}
+
+#endif /* G_OS_WIN32 */
+
+static GFileInfo *
+g_local_file_query_filesystem_info (GFile         *file,
+				    const char    *attributes,
+				    GCancellable  *cancellable,
+				    GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  GFileInfo *info;
+  int statfs_result = 0;
+  gboolean no_size;
+#ifndef G_OS_WIN32
+  guint64 block_size;
+  const char *fstype;
+#ifdef USE_STATFS
+  struct statfs statfs_buffer;
+#elif defined(USE_STATVFS)
+  struct statvfs statfs_buffer;
+#endif
+#endif
+  GFileAttributeMatcher *attribute_matcher;
+	
+  no_size = FALSE;
+  
+#ifdef USE_STATFS
+  
+#if STATFS_ARGS == 2
+  statfs_result = statfs (local->filename, &statfs_buffer);
+#elif STATFS_ARGS == 4
+  statfs_result = statfs (local->filename, &statfs_buffer,
+			  sizeof (statfs_buffer), 0);
+#endif
+  block_size = statfs_buffer.f_bsize;
+  
+  /* Many backends can't report free size (for instance the gvfs fuse
+     backend for backend not supporting this), and set f_bfree to 0,
+     but it can be 0 for real too. We treat the availible == 0 and
+     free == 0 case as "both of these are invalid".
+   */
+#ifndef G_OS_WIN32
+  if (statfs_buffer.f_bavail == 0 && statfs_buffer.f_bfree == 0)
+    no_size = TRUE;
+#endif
+  
+#elif defined(USE_STATVFS)
+  statfs_result = statvfs (local->filename, &statfs_buffer);
+  block_size = statfs_buffer.f_frsize; 
+#endif
+
+  if (statfs_result == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error getting filesystem info: %s"),
+		   g_strerror (errsv));
+      return NULL;
+    }
+
+  info = g_file_info_new ();
+
+  attribute_matcher = g_file_attribute_matcher_new (attributes);
+  
+  if (!no_size &&
+      g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_FILESYSTEM_FREE))
+    {
+#ifdef G_OS_WIN32
+      gchar *localdir = g_path_get_dirname (local->filename);
+      wchar_t *wdirname = g_utf8_to_utf16 (localdir, -1, NULL, NULL, NULL);
+      ULARGE_INTEGER li;
+      
+      g_free (localdir);
+      if (GetDiskFreeSpaceExW (wdirname, &li, NULL, NULL))
+        g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, (guint64)li.QuadPart);
+      g_free (wdirname);
+#else
+      g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, block_size * statfs_buffer.f_bavail);
+#endif
+    }
+  if (!no_size &&
+      g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_FILESYSTEM_SIZE))
+    {
+#ifdef G_OS_WIN32
+      gchar *localdir = g_path_get_dirname (local->filename);
+      wchar_t *wdirname = g_utf8_to_utf16 (localdir, -1, NULL, NULL, NULL);
+      ULARGE_INTEGER li;
+      
+      g_free (localdir);
+      if (GetDiskFreeSpaceExW (wdirname, NULL, &li, NULL))
+        g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE,  (guint64)li.QuadPart);
+      g_free (wdirname);
+#else
+      g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, block_size * statfs_buffer.f_blocks);
+#endif
+    }
+#ifdef USE_STATFS
+#if defined(HAVE_STRUCT_STATFS_F_FSTYPENAME)
+  fstype = g_strdup(statfs_buffer.f_fstypename);
+#else
+  fstype = get_fs_type (statfs_buffer.f_type);
+#endif
+
+#elif defined(USE_STATVFS) && defined(HAVE_STRUCT_STATVFS_F_BASETYPE)
+  fstype = g_strdup(statfs_buffer.f_basetype); 
+#endif
+
+#ifndef G_OS_WIN32
+  if (fstype &&
+      g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_FILESYSTEM_TYPE))
+    g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE, fstype);
+#endif  
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_FILESYSTEM_READONLY))
+    {
+#ifdef G_OS_WIN32
+      get_filesystem_readonly (info, local->filename);
+#else
+      get_mount_info (info, local->filename, attribute_matcher);
+#endif
+    }
+  
+  g_file_attribute_matcher_unref (attribute_matcher);
+  
+  return info;
+}
+
+static GMount *
+g_local_file_find_enclosing_mount (GFile         *file,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  struct stat buf;
+  char *mountpoint;
+  GMount *mount;
+
+  if (g_lstat (local->filename, &buf) != 0)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+		      /* Translators: This is an error message when trying to
+		       * find the enclosing (user visible) mount of a file, but
+		       * none exists. */
+		      _("Containing mount does not exist"));
+      return NULL;
+    }
+
+  mountpoint = find_mountpoint_for (local->filename, buf.st_dev);
+  if (mountpoint == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+		      /* Translators: This is an error message when trying to
+		       * find the enclosing (user visible) mount of a file, but
+		       * none exists. */
+		      _("Containing mount does not exist"));
+      return NULL;
+    }
+
+  mount = _g_mount_get_for_mount_path (mountpoint, cancellable);
+  g_free (mountpoint);
+  if (mount)
+    return mount;
+
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+		  /* Translators: This is an error message when trying to find
+		   * the enclosing (user visible) mount of a file, but none
+		   * exists. */
+		  _("Containing mount does not exist"));
+  return NULL;
+}
+
+static GFile *
+g_local_file_set_display_name (GFile         *file,
+			       const char    *display_name,
+			       GCancellable  *cancellable,
+			       GError       **error)
+{
+  GLocalFile *local, *new_local;
+  GFile *new_file, *parent;
+  struct stat statbuf;
+  int errsv;
+
+  parent = g_file_get_parent (file);
+  if (parent == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_FAILED,
+                           _("Can't rename root directory"));
+      return NULL;
+    }
+  
+  new_file = g_file_get_child_for_display_name (parent, display_name, error);
+  g_object_unref (parent);
+  
+  if (new_file == NULL)
+    return NULL;
+  local = G_LOCAL_FILE (file);
+  new_local = G_LOCAL_FILE (new_file);
+
+  if (g_lstat (new_local->filename, &statbuf) == -1) 
+    {
+      errsv = errno;
+
+      if (errsv != ENOENT)
+        {
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error renaming file: %s"),
+		       g_strerror (errsv));
+          return NULL;
+        }
+    }
+  else
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_EXISTS,
+                           _("Can't rename file, filename already exist"));
+      return NULL;
+    }
+
+  if (g_rename (local->filename, new_local->filename) == -1)
+    {
+      errsv = errno;
+
+      if (errsv == EINVAL)
+	/* We can't get a rename file into itself error herer,
+	   so this must be an invalid filename, on e.g. FAT */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	g_set_error (error, G_IO_ERROR,
+		     g_io_error_from_errno (errsv),
+		     _("Error renaming file: %s"),
+		     g_strerror (errsv));
+      g_object_unref (new_file);
+      return NULL;
+    }
+  
+  return new_file;
+}
+
+static GFileInfo *
+g_local_file_query_info (GFile                *file,
+			 const char           *attributes,
+			 GFileQueryInfoFlags   flags,
+			 GCancellable         *cancellable,
+			 GError              **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  GFileInfo *info;
+  GFileAttributeMatcher *matcher;
+  char *basename, *dirname;
+  GLocalParentFileInfo parent_info;
+
+  matcher = g_file_attribute_matcher_new (attributes);
+  
+  basename = g_path_get_basename (local->filename);
+  
+  dirname = g_path_get_dirname (local->filename);
+  _g_local_file_info_get_parent_info (dirname, matcher, &parent_info);
+  g_free (dirname);
+  
+  info = _g_local_file_info_get (basename, local->filename,
+				 matcher, flags, &parent_info,
+				 error);
+  
+  g_free (basename);
+
+  g_file_attribute_matcher_unref (matcher);
+
+  return info;
+}
+
+static GFileAttributeInfoList *
+g_local_file_query_settable_attributes (GFile         *file,
+					GCancellable  *cancellable,
+					GError       **error)
+{
+  return g_file_attribute_info_list_ref (local_writable_attributes);
+}
+
+static GFileAttributeInfoList *
+g_local_file_query_writable_namespaces (GFile         *file,
+					GCancellable  *cancellable,
+					GError       **error)
+{
+  return g_file_attribute_info_list_ref (local_writable_namespaces);
+}
+
+static gboolean
+g_local_file_set_attribute (GFile                *file,
+			    const char           *attribute,
+			    GFileAttributeType    type,
+			    gpointer              value_p,
+			    GFileQueryInfoFlags   flags,
+			    GCancellable         *cancellable,
+			    GError              **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+
+  return _g_local_file_info_set_attribute (local->filename,
+					   attribute,
+					   type,
+					   value_p,
+					   flags,
+					   cancellable,
+					   error);
+}
+
+static gboolean
+g_local_file_set_attributes_from_info (GFile                *file,
+				       GFileInfo            *info,
+				       GFileQueryInfoFlags   flags,
+				       GCancellable         *cancellable,
+				       GError              **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  int res, chained_res;
+  GFileIface *default_iface;
+
+  res = _g_local_file_info_set_attributes (local->filename,
+					   info, flags, 
+					   cancellable,
+					   error);
+
+  if (!res)
+    error = NULL; /* Don't write over error if further errors */
+
+  default_iface = g_type_default_interface_peek (G_TYPE_FILE);
+
+  chained_res = (default_iface->set_attributes_from_info) (file, info, flags, cancellable, error);
+  
+  return res && chained_res;
+}
+
+static GFileInputStream *
+g_local_file_read (GFile         *file,
+		   GCancellable  *cancellable,
+		   GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  int fd;
+  struct stat buf;
+  
+  fd = g_open (local->filename, O_RDONLY|O_BINARY, 0);
+  if (fd == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error opening file: %s"),
+		   g_strerror (errsv));
+      return NULL;
+    }
+
+  if (fstat(fd, &buf) == 0 && S_ISDIR (buf.st_mode))
+    {
+      close (fd);
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_IS_DIRECTORY,
+                           _("Can't open directory"));
+      return NULL;
+    }
+  
+  return _g_local_file_input_stream_new (fd);
+}
+
+static GFileOutputStream *
+g_local_file_append_to (GFile             *file,
+			GFileCreateFlags   flags,
+			GCancellable      *cancellable,
+			GError           **error)
+{
+  return _g_local_file_output_stream_append (G_LOCAL_FILE (file)->filename,
+					     flags, cancellable, error);
+}
+
+static GFileOutputStream *
+g_local_file_create (GFile             *file,
+		     GFileCreateFlags   flags,
+		     GCancellable      *cancellable,
+		     GError           **error)
+{
+  return _g_local_file_output_stream_create (G_LOCAL_FILE (file)->filename,
+					     flags, cancellable, error);
+}
+
+static GFileOutputStream *
+g_local_file_replace (GFile             *file,
+		      const char        *etag,
+		      gboolean           make_backup,
+		      GFileCreateFlags   flags,
+		      GCancellable      *cancellable,
+		      GError           **error)
+{
+  return _g_local_file_output_stream_replace (G_LOCAL_FILE (file)->filename,
+					      etag, make_backup, flags,
+					      cancellable, error);
+}
+
+
+static gboolean
+g_local_file_delete (GFile         *file,
+		     GCancellable  *cancellable,
+		     GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  
+  if (g_remove (local->filename) == -1)
+    {
+      int errsv = errno;
+
+      /* Posix allows EEXIST too, but the more sane error
+	 is G_IO_ERROR_NOT_FOUND, and it's what nautilus
+	 expects */
+      if (errsv == EEXIST)
+	errsv = ENOTEMPTY;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error removing file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static char *
+strip_trailing_slashes (const char *path)
+{
+  char *path_copy;
+  int len;
+
+  path_copy = g_strdup (path);
+  len = strlen (path_copy);
+  while (len > 1 && path_copy[len-1] == '/')
+    path_copy[--len] = 0;
+
+  return path_copy;
+ }
+
+static char *
+expand_symlink (const char *link)
+{
+  char *resolved, *canonical, *parent, *link2;
+  char symlink_value[4096];
+#ifdef G_OS_WIN32
+#else
+  ssize_t res;
+#endif
+  
+#ifdef G_OS_WIN32
+#else
+  res = readlink (link, symlink_value, sizeof (symlink_value) - 1);
+  
+  if (res == -1)
+    return g_strdup (link);
+  symlink_value[res] = 0;
+#endif
+  
+  if (g_path_is_absolute (symlink_value))
+    return canonicalize_filename (symlink_value);
+  else
+    {
+      link2 = strip_trailing_slashes (link);
+      parent = g_path_get_dirname (link2);
+      g_free (link2);
+      
+      resolved = g_build_filename (parent, symlink_value, NULL);
+      g_free (parent);
+      
+      canonical = canonicalize_filename (resolved);
+      
+      g_free (resolved);
+
+      return canonical;
+    }
+}
+
+static char *
+get_parent (const char *path, 
+            dev_t      *parent_dev)
+{
+  char *parent, *tmp;
+  struct stat parent_stat;
+  int num_recursions;
+  char *path_copy;
+
+  path_copy = strip_trailing_slashes (path);
+  
+  parent = g_path_get_dirname (path_copy);
+  if (strcmp (parent, ".") == 0 ||
+      strcmp (parent, path_copy) == 0)
+    {
+      g_free (parent);
+      g_free (path_copy);
+      return NULL;
+    }
+  g_free (path_copy);
+
+  num_recursions = 0;
+  do {
+    if (g_lstat (parent, &parent_stat) != 0)
+      {
+	g_free (parent);
+	return NULL;
+      }
+    
+    if (S_ISLNK (parent_stat.st_mode))
+      {
+	tmp = parent;
+	parent = expand_symlink (parent);
+	g_free (tmp);
+      }
+    
+    num_recursions++;
+    if (num_recursions > 12)
+      {
+	g_free (parent);
+	return NULL;
+      }
+  } while (S_ISLNK (parent_stat.st_mode));
+
+  *parent_dev = parent_stat.st_dev;
+  
+  return parent;
+}
+
+static char *
+expand_all_symlinks (const char *path)
+{
+  char *parent, *parent_expanded;
+  char *basename, *res;
+  dev_t parent_dev;
+
+  parent = get_parent (path, &parent_dev);
+  if (parent)
+    {
+      parent_expanded = expand_all_symlinks (parent);
+      g_free (parent);
+      basename = g_path_get_basename (path);
+      res = g_build_filename (parent_expanded, basename, NULL);
+      g_free (basename);
+      g_free (parent_expanded);
+    }
+  else
+    res = g_strdup (path);
+  
+  return res;
+}
+
+#ifndef G_OS_WIN32
+
+static char *
+find_mountpoint_for (const char *file, 
+                     dev_t       dev)
+{
+  char *dir, *parent;
+  dev_t dir_dev, parent_dev;
+
+  dir = g_strdup (file);
+  dir_dev = dev;
+
+  while (1) 
+    {
+      parent = get_parent (dir, &parent_dev);
+      if (parent == NULL)
+        return dir;
+    
+      if (parent_dev != dir_dev)
+        {
+          g_free (parent);
+          return dir;
+        }
+    
+      g_free (dir);
+      dir = parent;
+    }
+}
+
+static char *
+find_topdir_for (const char *file)
+{
+  char *dir;
+  dev_t dir_dev;
+
+  dir = get_parent (file, &dir_dev);
+  if (dir == NULL)
+    return NULL;
+
+  return find_mountpoint_for (dir, dir_dev);
+}
+
+static char *
+get_unique_filename (const char *basename, 
+                     int         id)
+{
+  const char *dot;
+      
+  if (id == 1)
+    return g_strdup (basename);
+
+  dot = strchr (basename, '.');
+  if (dot)
+    return g_strdup_printf ("%.*s.%d%s", (int)(dot - basename), basename, id, dot);
+  else
+    return g_strdup_printf ("%s.%d", basename, id);
+}
+
+static gboolean
+path_has_prefix (const char *path, 
+                 const char *prefix)
+{
+  int prefix_len;
+
+  if (prefix == NULL)
+    return TRUE;
+
+  prefix_len = strlen (prefix);
+  
+  if (strncmp (path, prefix, prefix_len) == 0 &&
+      (prefix_len == 0 || /* empty prefix always matches */
+       prefix[prefix_len - 1] == '/' || /* last char in prefix was a /, so it must be in path too */
+       path[prefix_len] == 0 ||
+       path[prefix_len] == '/'))
+    return TRUE;
+  
+  return FALSE;
+}
+
+static char *
+try_make_relative (const char *path, 
+                   const char *base)
+{
+  char *path2, *base2;
+  char *relative;
+
+  path2 = expand_all_symlinks (path);
+  base2 = expand_all_symlinks (base);
+
+  relative = NULL;
+  if (path_has_prefix (path2, base2))
+    {
+      relative = path2 + strlen (base2);
+      while (*relative == '/')
+	relative ++;
+      relative = g_strdup (relative);
+    }
+  g_free (path2);
+  g_free (base2);
+
+  if (relative)
+    return relative;
+  
+  /* Failed, use abs path */
+  return g_strdup (path);
+}
+
+static char *
+escape_trash_name (char *name)
+{
+  GString *str;
+  const gchar hex[16] = "0123456789ABCDEF";
+  
+  str = g_string_new ("");
+
+  while (*name != 0)
+    {
+      char c;
+
+      c = *name++;
+
+      if (g_ascii_isprint (c))
+	g_string_append_c (str, c);
+      else
+	{
+          g_string_append_c (str, '%');
+          g_string_append_c (str, hex[((guchar)c) >> 4]);
+          g_string_append_c (str, hex[((guchar)c) & 0xf]);
+	}
+    }
+
+  return g_string_free (str, FALSE);
+}
+
+gboolean
+_g_local_file_has_trash_dir (const char *dirname, dev_t dir_dev)
+{
+  static gsize home_dev_set = 0;
+  static dev_t home_dev;
+  char *topdir, *globaldir, *trashdir, *tmpname;
+  uid_t uid;
+  char uid_str[32];
+  struct stat global_stat, trash_stat;
+  gboolean res;
+  int statres;
+      
+  if (g_once_init_enter (&home_dev_set))
+    {
+      struct stat home_stat;
+      
+      g_stat (g_get_home_dir (), &home_stat);
+      home_dev = home_stat.st_dev;
+      g_once_init_leave (&home_dev_set, 1);
+    }
+
+  /* Assume we can trash to the home */
+  if (dir_dev == home_dev)
+    return TRUE;
+
+  topdir = find_mountpoint_for (dirname, dir_dev);
+  if (topdir == NULL)
+    return FALSE;
+
+  globaldir = g_build_filename (topdir, ".Trash", NULL); 
+  statres = g_lstat (globaldir, &global_stat);
+ if (g_lstat (globaldir, &global_stat) == 0 &&
+      S_ISDIR (global_stat.st_mode) &&
+      (global_stat.st_mode & S_ISVTX) != 0)
+    {
+      /* got a toplevel sysadmin created dir, assume we
+       * can trash to it (we should be able to create a dir)
+       * This fails for the FAT case where the ownership of
+       * that dir would be wrong though..
+       */
+      g_free (globaldir);
+      g_free (topdir);
+      return TRUE;
+    }
+  g_free (globaldir);
+
+  /* No global trash dir, or it failed the tests, fall back to $topdir/.Trash-$uid */
+  uid = geteuid ();
+  g_snprintf (uid_str, sizeof (uid_str), "%lu", (unsigned long) uid);
+  
+  tmpname = g_strdup_printf (".Trash-%s", uid_str);
+  trashdir = g_build_filename (topdir, tmpname, NULL);
+  g_free (tmpname);
+
+  if (g_lstat (trashdir, &trash_stat) == 0)
+    {
+      g_free (topdir);
+      g_free (trashdir);
+      return
+	S_ISDIR (trash_stat.st_mode) &&
+	trash_stat.st_uid == uid;
+    }
+  g_free (trashdir);
+
+  /* User specific trash didn't exist, can we create it? */
+  res = g_access (topdir, W_OK) == 0;
+  
+  g_free (topdir);
+  
+  return res;
+}
+
+
+static gboolean
+g_local_file_trash (GFile         *file,
+		    GCancellable  *cancellable,
+		    GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  struct stat file_stat, home_stat;
+  const char *homedir;
+  char *trashdir, *topdir, *infodir, *filesdir;
+  char *basename, *trashname, *trashfile, *infoname, *infofile;
+  char *original_name, *original_name_escaped;
+  int i;
+  char *data;
+  gboolean is_homedir_trash;
+  char delete_time[32];
+  int fd;
+  struct stat trash_stat, global_stat;
+  char *dirname, *globaldir;
+  
+  if (g_lstat (local->filename, &file_stat) != 0)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error trashing file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+    
+  homedir = g_get_home_dir ();
+  g_stat (homedir, &home_stat);
+
+  is_homedir_trash = FALSE;
+  trashdir = NULL;
+  if (file_stat.st_dev == home_stat.st_dev)
+    {
+      is_homedir_trash = TRUE;
+      errno = 0;
+      trashdir = g_build_filename (g_get_user_data_dir (), "Trash", NULL);
+      if (g_mkdir_with_parents (trashdir, 0700) < 0)
+	{
+          char *display_name;
+          int errsv = errno;
+
+          display_name = g_filename_display_name (trashdir);
+          g_set_error (error, G_IO_ERROR,
+                       g_io_error_from_errno (errsv),
+                       _("Unable to create trash dir %s: %s"),
+                       display_name, g_strerror (errsv));
+          g_free (display_name);
+          g_free (trashdir);
+          return FALSE;
+	}
+      topdir = g_strdup (g_get_user_data_dir ());
+    }
+  else
+    {
+      uid_t uid;
+      char uid_str[32];
+
+      uid = geteuid ();
+      g_snprintf (uid_str, sizeof (uid_str), "%lu", (unsigned long)uid);
+      
+      topdir = find_topdir_for (local->filename);
+      if (topdir == NULL)
+	{
+	  g_set_error_literal (error, G_IO_ERROR,
+                               G_IO_ERROR_NOT_SUPPORTED,
+                               _("Unable to find toplevel directory for trash"));
+	  return FALSE;
+	}
+      
+      /* Try looking for global trash dir $topdir/.Trash/$uid */
+      globaldir = g_build_filename (topdir, ".Trash", NULL);
+      if (g_lstat (globaldir, &global_stat) == 0 &&
+	  S_ISDIR (global_stat.st_mode) &&
+	  (global_stat.st_mode & S_ISVTX) != 0)
+	{
+	  trashdir = g_build_filename (globaldir, uid_str, NULL);
+
+	  if (g_lstat (trashdir, &trash_stat) == 0)
+	    {
+	      if (!S_ISDIR (trash_stat.st_mode) ||
+		  trash_stat.st_uid != uid)
+		{
+		  /* Not a directory or not owned by user, ignore */
+		  g_free (trashdir);
+		  trashdir = NULL;
+		}
+	    }
+	  else if (g_mkdir (trashdir, 0700) == -1)
+	    {
+	      g_free (trashdir);
+	      trashdir = NULL;
+	    }
+	}
+      g_free (globaldir);
+
+      if (trashdir == NULL)
+	{
+	  gboolean tried_create;
+	  
+	  /* No global trash dir, or it failed the tests, fall back to $topdir/.Trash-$uid */
+	  dirname = g_strdup_printf (".Trash-%s", uid_str);
+	  trashdir = g_build_filename (topdir, dirname, NULL);
+	  g_free (dirname);
+
+	  tried_create = FALSE;
+
+	retry:
+	  if (g_lstat (trashdir, &trash_stat) == 0)
+	    {
+	      if (!S_ISDIR (trash_stat.st_mode) ||
+		  trash_stat.st_uid != uid)
+		{
+		  /* Remove the failed directory */
+		  if (tried_create)
+		    g_remove (trashdir);
+		  
+		  /* Not a directory or not owned by user, ignore */
+		  g_free (trashdir);
+		  trashdir = NULL;
+		}
+	    }
+	  else
+	    {
+	      if (!tried_create &&
+		  g_mkdir (trashdir, 0700) != -1)
+		{
+		  /* Ensure that the created dir has the right uid etc.
+		     This might fail on e.g. a FAT dir */
+		  tried_create = TRUE;
+		  goto retry;
+		}
+	      else
+		{
+		  g_free (trashdir);
+		  trashdir = NULL;
+		}
+	    }
+	}
+
+      if (trashdir == NULL)
+	{
+	  g_free (topdir);
+	  g_set_error_literal (error, G_IO_ERROR,
+                               G_IO_ERROR_NOT_SUPPORTED,
+                               _("Unable to find or create trash directory"));
+	  return FALSE;
+	}
+    }
+
+  /* Trashdir points to the trash dir with the "info" and "files" subdirectories */
+
+  infodir = g_build_filename (trashdir, "info", NULL);
+  filesdir = g_build_filename (trashdir, "files", NULL);
+  g_free (trashdir);
+
+  /* Make sure we have the subdirectories */
+  if ((g_mkdir (infodir, 0700) == -1 && errno != EEXIST) ||
+      (g_mkdir (filesdir, 0700) == -1 && errno != EEXIST))
+    {
+      g_free (topdir);
+      g_free (infodir);
+      g_free (filesdir);
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SUPPORTED,
+                           _("Unable to find or create trash directory"));
+      return FALSE;
+    }  
+
+  basename = g_path_get_basename (local->filename);
+  i = 1;
+  trashname = NULL;
+  infofile = NULL;
+  do {
+    g_free (trashname);
+    g_free (infofile);
+    
+    trashname = get_unique_filename (basename, i++);
+    infoname = g_strconcat (trashname, ".trashinfo", NULL);
+    infofile = g_build_filename (infodir, infoname, NULL);
+    g_free (infoname);
+
+    fd = open (infofile, O_CREAT | O_EXCL, 0666);
+  } while (fd == -1 && errno == EEXIST);
+
+  g_free (basename);
+  g_free (infodir);
+
+  if (fd == -1)
+    {
+      int errsv = errno;
+
+      g_free (filesdir);
+      g_free (topdir);
+      g_free (trashname);
+      g_free (infofile);
+      
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Unable to create trashing info file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+
+  close (fd);
+
+  /* TODO: Maybe we should verify that you can delete the file from the trash
+     before moving it? OTOH, that is hard, as it needs a recursive scan */
+
+  trashfile = g_build_filename (filesdir, trashname, NULL);
+
+  g_free (filesdir);
+
+  if (g_rename (local->filename, trashfile) == -1)
+    {
+      int errsv = errno;
+
+      g_free (topdir);
+      g_free (trashname);
+      g_free (infofile);
+      g_free (trashfile);
+
+      if (errsv == EXDEV)
+	/* The trash dir was actually on another fs anyway!?
+	   This can happen when the same device is mounted multiple
+	   times, or with bind mounts of the same fs. */
+	g_set_error (error, G_IO_ERROR,
+		     G_IO_ERROR_NOT_SUPPORTED,
+		     _("Unable to trash file: %s"),
+		     g_strerror (errsv));
+      else
+	g_set_error (error, G_IO_ERROR,
+		     g_io_error_from_errno (errsv),
+		     _("Unable to trash file: %s"),
+		     g_strerror (errsv));
+      return FALSE;
+    }
+
+  g_free (trashfile);
+
+  /* TODO: Do we need to update mtime/atime here after the move? */
+
+  /* Use absolute names for homedir */
+  if (is_homedir_trash)
+    original_name = g_strdup (local->filename);
+  else
+    original_name = try_make_relative (local->filename, topdir);
+  original_name_escaped = escape_trash_name (original_name);
+  
+  g_free (original_name);
+  g_free (topdir);
+  
+  {
+    time_t t;
+    struct tm now;
+    t = time (NULL);
+    localtime_r (&t, &now);
+    delete_time[0] = 0;
+    strftime(delete_time, sizeof (delete_time), "%Y-%m-%dT%H:%M:%S", &now);
+  }
+
+  data = g_strdup_printf ("[Trash Info]\nPath=%s\nDeletionDate=%s\n",
+			  original_name_escaped, delete_time);
+
+  g_file_set_contents (infofile, data, -1, NULL);
+  g_free (infofile);
+  g_free (data);
+  
+  g_free (original_name_escaped);
+  g_free (trashname);
+  
+  return TRUE;
+}
+#else /* G_OS_WIN32 */
+gboolean
+_g_local_file_has_trash_dir (const char *dirname, dev_t dir_dev)
+{
+  return FALSE;			/* XXX ??? */
+}
+
+static gboolean
+g_local_file_trash (GFile         *file,
+		    GCancellable  *cancellable,
+		    GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  SHFILEOPSTRUCTW op = {0};
+  gboolean success;
+  wchar_t *wfilename;
+  long len;
+
+  wfilename = g_utf8_to_utf16 (local->filename, -1, NULL, &len, NULL);
+  /* SHFILEOPSTRUCT.pFrom is double-zero-terminated */
+  wfilename = g_renew (wchar_t, wfilename, len + 2);
+  wfilename[len + 1] = 0;
+
+  op.wFunc = FO_DELETE;
+  op.pFrom = wfilename;
+  op.fFlags = FOF_ALLOWUNDO;
+
+  success = SHFileOperationW (&op) == 0;
+
+  if (success && op.fAnyOperationsAborted)
+    {
+      if (cancellable && !g_cancellable_is_cancelled (cancellable))
+	g_cancellable_cancel (cancellable);
+      g_set_error (error, G_IO_ERROR,
+		   G_IO_ERROR_CANCELLED,
+		   _("Unable to trash file: %s"),
+		   _("Operation was cancelled"));
+      success = FALSE;
+    }
+  else if (!success)
+    g_set_error (error, G_IO_ERROR,
+		 G_IO_ERROR_FAILED,
+		 _("Unable to trash file: %s"),
+		 _("internal error"));
+
+  g_free (wfilename);
+  return success;
+}
+#endif /* G_OS_WIN32 */
+
+static gboolean
+g_local_file_make_directory (GFile         *file,
+			     GCancellable  *cancellable,
+			     GError       **error)
+{
+  GLocalFile *local = G_LOCAL_FILE (file);
+  
+  if (g_mkdir (local->filename, 0777) == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EINVAL)
+	/* This must be an invalid filename, on e.g. FAT */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	g_set_error (error, G_IO_ERROR,
+		     g_io_error_from_errno (errsv),
+		     _("Error creating directory: %s"),
+		     g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static gboolean
+g_local_file_make_symbolic_link (GFile         *file,
+				 const char    *symlink_value,
+				 GCancellable  *cancellable,
+				 GError       **error)
+{
+#ifdef HAVE_SYMLINK
+  GLocalFile *local = G_LOCAL_FILE (file);
+  
+  if (symlink (symlink_value, local->filename) == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EINVAL)
+	/* This must be an invalid filename, on e.g. FAT */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	g_set_error (error, G_IO_ERROR,
+		     g_io_error_from_errno (errsv),
+		     _("Error making symbolic link: %s"),
+		     g_strerror (errsv));
+      return FALSE;
+    }
+  return TRUE;
+#else
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Symlinks not supported");
+  return FALSE;
+#endif
+}
+
+
+static gboolean
+g_local_file_copy (GFile                  *source,
+		   GFile                  *destination,
+		   GFileCopyFlags          flags,
+		   GCancellable           *cancellable,
+		   GFileProgressCallback   progress_callback,
+		   gpointer                progress_callback_data,
+		   GError                **error)
+{
+  /* Fall back to default copy */
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Copy not supported");
+  return FALSE;
+}
+
+static gboolean
+g_local_file_move (GFile                  *source,
+		   GFile                  *destination,
+		   GFileCopyFlags          flags,
+		   GCancellable           *cancellable,
+		   GFileProgressCallback   progress_callback,
+		   gpointer                progress_callback_data,
+		   GError                **error)
+{
+  GLocalFile *local_source, *local_destination;
+  struct stat statbuf;
+  gboolean destination_exist, source_is_dir;
+  char *backup_name;
+  int res;
+  off_t source_size;
+  
+  if (!G_IS_LOCAL_FILE (source) ||
+      !G_IS_LOCAL_FILE (destination))
+    {
+      /* Fall back to default move */
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Move not supported");
+      return FALSE;
+    }
+  
+  local_source = G_LOCAL_FILE (source);
+  local_destination = G_LOCAL_FILE (destination);
+  
+  res = g_lstat (local_source->filename, &statbuf);
+  if (res == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error moving file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+
+  source_is_dir = S_ISDIR (statbuf.st_mode);
+  source_size = statbuf.st_size;
+  
+  destination_exist = FALSE;
+  res = g_lstat (local_destination->filename, &statbuf);
+  if (res == 0)
+    {
+      destination_exist = TRUE; /* Target file exists */
+
+      if (flags & G_FILE_COPY_OVERWRITE)
+	{
+	  /* Always fail on dirs, even with overwrite */
+	  if (S_ISDIR (statbuf.st_mode))
+	    {
+	      if (source_is_dir)
+		g_set_error_literal (error,
+                                     G_IO_ERROR,
+                                     G_IO_ERROR_WOULD_MERGE,
+                                     _("Can't move directory over directory"));
+              else
+		g_set_error_literal (error,
+                                     G_IO_ERROR,
+                                     G_IO_ERROR_IS_DIRECTORY,
+                                     _("Can't copy over directory"));
+	      return FALSE;
+	    }
+	}
+      else
+	{
+	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_EXISTS,
+                               _("Target file exists"));
+	  return FALSE;
+	}
+    }
+  
+  if (flags & G_FILE_COPY_BACKUP && destination_exist)
+    {
+      backup_name = g_strconcat (local_destination->filename, "~", NULL);
+      if (g_rename (local_destination->filename, backup_name) == -1)
+	{
+      	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_CANT_CREATE_BACKUP,
+                               _("Backup file creation failed"));
+	  g_free (backup_name);
+	  return FALSE;
+	}
+      g_free (backup_name);
+      destination_exist = FALSE; /* It did, but no more */
+    }
+
+  if (source_is_dir && destination_exist && (flags & G_FILE_COPY_OVERWRITE))
+    {
+      /* Source is a dir, destination exists (and is not a dir, because that would have failed
+	 earlier), and we're overwriting. Manually remove the target so we can do the rename. */
+      res = g_unlink (local_destination->filename);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error removing target file: %s"),
+		       g_strerror (errsv));
+	  return FALSE;
+	}
+    }
+  
+  if (g_rename (local_source->filename, local_destination->filename) == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EXDEV)
+	/* This will cause the fallback code to run */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_NOT_SUPPORTED,
+                             _("Move between mounts not supported"));
+      else if (errsv == EINVAL)
+	/* This must be an invalid filename, on e.g. FAT, or
+	   we're trying to move the file into itself...
+	   We return invalid filename for both... */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	g_set_error (error, G_IO_ERROR,
+		     g_io_error_from_errno (errsv),
+		     _("Error moving file: %s"),
+		     g_strerror (errsv));
+      return FALSE;
+    }
+
+  /* Make sure we send full copied size */
+  if (progress_callback)
+    progress_callback (source_size, source_size, progress_callback_data);
+  
+  return TRUE;
+}
+
+static GFileMonitor*
+g_local_file_monitor_dir (GFile             *file,
+			  GFileMonitorFlags  flags,
+			  GCancellable      *cancellable,
+			  GError           **error)
+{
+  GLocalFile* local_file = G_LOCAL_FILE(file);
+  return _g_local_directory_monitor_new (local_file->filename, flags, error);
+}
+
+static GFileMonitor*
+g_local_file_monitor_file (GFile             *file,
+			   GFileMonitorFlags  flags,
+			   GCancellable      *cancellable,
+			   GError           **error)
+{
+  GLocalFile* local_file = G_LOCAL_FILE(file);
+  return _g_local_file_monitor_new (local_file->filename, flags, error);
+}
+
+static void
+g_local_file_file_iface_init (GFileIface *iface)
+{
+  iface->dup = g_local_file_dup;
+  iface->hash = g_local_file_hash;
+  iface->equal = g_local_file_equal;
+  iface->is_native = g_local_file_is_native;
+  iface->has_uri_scheme = g_local_file_has_uri_scheme;
+  iface->get_uri_scheme = g_local_file_get_uri_scheme;
+  iface->get_basename = g_local_file_get_basename;
+  iface->get_path = g_local_file_get_path;
+  iface->get_uri = g_local_file_get_uri;
+  iface->get_parse_name = g_local_file_get_parse_name;
+  iface->get_parent = g_local_file_get_parent;
+  iface->prefix_matches = g_local_file_prefix_matches;
+  iface->get_relative_path = g_local_file_get_relative_path;
+  iface->resolve_relative_path = g_local_file_resolve_relative_path;
+  iface->get_child_for_display_name = g_local_file_get_child_for_display_name;
+  iface->set_display_name = g_local_file_set_display_name;
+  iface->enumerate_children = g_local_file_enumerate_children;
+  iface->query_info = g_local_file_query_info;
+  iface->query_filesystem_info = g_local_file_query_filesystem_info;
+  iface->find_enclosing_mount = g_local_file_find_enclosing_mount;
+  iface->query_settable_attributes = g_local_file_query_settable_attributes;
+  iface->query_writable_namespaces = g_local_file_query_writable_namespaces;
+  iface->set_attribute = g_local_file_set_attribute;
+  iface->set_attributes_from_info = g_local_file_set_attributes_from_info;
+  iface->read_fn = g_local_file_read;
+  iface->append_to = g_local_file_append_to;
+  iface->create = g_local_file_create;
+  iface->replace = g_local_file_replace;
+  iface->delete_file = g_local_file_delete;
+  iface->trash = g_local_file_trash;
+  iface->make_directory = g_local_file_make_directory;
+  iface->make_symbolic_link = g_local_file_make_symbolic_link;
+  iface->copy = g_local_file_copy;
+  iface->move = g_local_file_move;
+  iface->monitor_dir = g_local_file_monitor_dir;
+  iface->monitor_file = g_local_file_monitor_file;
+}
diff --git a/gio/glocalfile.h b/gio/glocalfile.h
new file mode 100644
index 0000000..abb36fa
--- /dev/null
+++ b/gio/glocalfile.h
@@ -0,0 +1,51 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_FILE_H__
+#define __G_LOCAL_FILE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_FILE         (_g_local_file_get_type ())
+#define G_LOCAL_FILE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_LOCAL_FILE, GLocalFile))
+#define G_LOCAL_FILE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_LOCAL_FILE, GLocalFileClass))
+#define G_IS_LOCAL_FILE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_LOCAL_FILE))
+#define G_IS_LOCAL_FILE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_LOCAL_FILE))
+#define G_LOCAL_FILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_LOCAL_FILE, GLocalFileClass))
+
+typedef struct _GLocalFile        GLocalFile;
+typedef struct _GLocalFileClass   GLocalFileClass;
+
+struct _GLocalFileClass
+{
+  GObjectClass parent_class;
+};
+
+GType   _g_local_file_get_type (void) G_GNUC_CONST;
+
+GFile * _g_local_file_new      (const char *filename);
+
+G_END_DECLS
+
+#endif /* __G_LOCAL_FILE_H__ */
diff --git a/gio/glocalfileenumerator.c b/gio/glocalfileenumerator.c
new file mode 100644
index 0000000..eda7b03
--- /dev/null
+++ b/gio/glocalfileenumerator.c
@@ -0,0 +1,389 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <glocalfileenumerator.h>
+#include <glocalfileinfo.h>
+#include <glocalfile.h>
+#include <gioerror.h>
+#include <string.h>
+#include <stdlib.h>
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+#define CHUNK_SIZE 1000
+
+  /* TODO:
+   *  It would be nice to use the dirent->d_type to check file type without
+   *  needing to stat each files on linux and other systems that support it.
+   *  (question: does that following symlink or not?)
+   */
+
+#ifdef G_OS_WIN32
+#define USE_GDIR
+#endif
+
+#ifndef USE_GDIR
+
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+
+typedef struct {
+  char *name;
+  long inode;
+} DirEntry;
+
+#endif
+
+struct _GLocalFileEnumerator
+{
+  GFileEnumerator parent;
+
+  GFileAttributeMatcher *matcher;
+  char *filename;
+  char *attributes;
+  GFileQueryInfoFlags flags;
+
+  gboolean got_parent_info;
+  GLocalParentFileInfo parent_info;
+  
+#ifdef USE_GDIR
+  GDir *dir;
+#else
+  DIR *dir;
+  DirEntry *entries;
+  int entries_pos;
+  gboolean at_end;
+#endif
+  
+  gboolean follow_symlinks;
+};
+
+#define g_local_file_enumerator_get_type _g_local_file_enumerator_get_type
+G_DEFINE_TYPE (GLocalFileEnumerator, g_local_file_enumerator, G_TYPE_FILE_ENUMERATOR);
+
+static GFileInfo *g_local_file_enumerator_next_file (GFileEnumerator  *enumerator,
+						     GCancellable     *cancellable,
+						     GError          **error);
+static gboolean   g_local_file_enumerator_close     (GFileEnumerator  *enumerator,
+						     GCancellable     *cancellable,
+						     GError          **error);
+
+
+static void
+free_entries (GLocalFileEnumerator *local)
+{
+#ifndef USE_GDIR
+  int i;
+
+  if (local->entries != NULL)
+    {
+      for (i = 0; local->entries[i].name != NULL; i++)
+	g_free (local->entries[i].name);
+      
+      g_free (local->entries);
+    }
+#endif
+}
+
+static void
+g_local_file_enumerator_finalize (GObject *object)
+{
+  GLocalFileEnumerator *local;
+
+  local = G_LOCAL_FILE_ENUMERATOR (object);
+
+  g_free (local->filename);
+  g_file_attribute_matcher_unref (local->matcher);
+  if (local->dir)
+    {
+#ifdef USE_GDIR
+      g_dir_close (local->dir);
+#else
+      closedir (local->dir);
+#endif      
+      local->dir = NULL;
+    }
+
+  free_entries (local);
+
+  G_OBJECT_CLASS (g_local_file_enumerator_parent_class)->finalize (object);
+}
+
+
+static void
+g_local_file_enumerator_class_init (GLocalFileEnumeratorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GFileEnumeratorClass *enumerator_class = G_FILE_ENUMERATOR_CLASS (klass);
+  
+  gobject_class->finalize = g_local_file_enumerator_finalize;
+
+  enumerator_class->next_file = g_local_file_enumerator_next_file;
+  enumerator_class->close_fn = g_local_file_enumerator_close;
+}
+
+static void
+g_local_file_enumerator_init (GLocalFileEnumerator *local)
+{
+}
+
+#ifdef USE_GDIR
+static void
+convert_file_to_io_error (GError **error,
+			  GError  *file_error)
+{
+  int new_code;
+
+  if (file_error == NULL)
+    return;
+  
+  new_code = G_IO_ERROR_FAILED;
+  
+  if (file_error->domain == G_FILE_ERROR) 
+    {
+      switch (file_error->code) 
+        {
+        case G_FILE_ERROR_NOENT:
+          new_code = G_IO_ERROR_NOT_FOUND;
+          break;
+        case G_FILE_ERROR_ACCES:
+          new_code = G_IO_ERROR_PERMISSION_DENIED;
+          break;
+        case G_FILE_ERROR_NOTDIR:
+          new_code = G_IO_ERROR_NOT_DIRECTORY;
+          break;
+        case G_FILE_ERROR_MFILE:
+          new_code = G_IO_ERROR_TOO_MANY_OPEN_FILES;
+          break;
+        default:
+          break;
+        }
+    }
+  
+  g_set_error_literal (error, G_IO_ERROR,
+                       new_code,
+                       file_error->message);
+}
+#endif
+
+GFileEnumerator *
+_g_local_file_enumerator_new (GLocalFile *file,
+			      const char           *attributes,
+			      GFileQueryInfoFlags   flags,
+			      GCancellable         *cancellable,
+			      GError              **error)
+{
+  GLocalFileEnumerator *local;
+  char *filename = g_file_get_path (G_FILE (file));
+
+#ifdef USE_GDIR
+  GError *dir_error;
+  GDir *dir;
+  
+  dir_error = NULL;
+  dir = g_dir_open (filename, 0, error != NULL ? &dir_error : NULL);
+  if (dir == NULL) 
+    {
+      if (error != NULL)
+	{
+	  convert_file_to_io_error (error, dir_error);
+	  g_error_free (dir_error);
+	}
+      g_free (filename);
+      return NULL;
+    }
+#else
+  DIR *dir;
+  int errsv;
+
+  dir = opendir (filename);
+  if (dir == NULL)
+    {
+      errsv = errno;
+
+      g_set_error_literal (error, G_IO_ERROR,
+                           g_io_error_from_errno (errsv),
+                           g_strerror (errsv));
+      g_free (filename);
+      return NULL;
+    }
+
+#endif
+  
+  local = g_object_new (G_TYPE_LOCAL_FILE_ENUMERATOR,
+                        "container", file,
+                        NULL);
+
+  local->dir = dir;
+  local->filename = filename;
+  local->matcher = g_file_attribute_matcher_new (attributes);
+  local->flags = flags;
+  
+  return G_FILE_ENUMERATOR (local);
+}
+
+#ifndef USE_GDIR
+static int
+sort_by_inode (const void *_a, const void *_b)
+{
+  const DirEntry *a, *b;
+
+  a = _a;
+  b = _b;
+  return a->inode - b->inode;
+}
+
+static const char *
+next_file_helper (GLocalFileEnumerator *local)
+{
+  struct dirent *entry;
+  const char *filename;
+  int i;
+
+  if (local->at_end)
+    return NULL;
+  
+  if (local->entries == NULL ||
+      (local->entries[local->entries_pos].name == NULL))
+    {
+      if (local->entries == NULL)
+	local->entries = g_new (DirEntry, CHUNK_SIZE + 1);
+      else
+	{
+	  /* Restart by clearing old names */
+	  for (i = 0; local->entries[i].name != NULL; i++)
+	    g_free (local->entries[i].name);
+	}
+      
+      for (i = 0; i < CHUNK_SIZE; i++)
+	{
+	  entry = readdir (local->dir);
+	  while (entry 
+		 && (0 == strcmp (entry->d_name, ".") ||
+		     0 == strcmp (entry->d_name, "..")))
+	    entry = readdir (local->dir);
+
+	  if (entry)
+	    {
+	      local->entries[i].name = g_strdup (entry->d_name);
+	      local->entries[i].inode = entry->d_ino;
+	    }
+	  else
+	    break;
+	}
+      local->entries[i].name = NULL;
+      local->entries_pos = 0;
+      
+      qsort (local->entries, i, sizeof (DirEntry), sort_by_inode);
+    }
+
+  filename = local->entries[local->entries_pos++].name;
+  if (filename == NULL)
+    local->at_end = TRUE;
+    
+  return filename;
+}
+
+#endif
+
+static GFileInfo *
+g_local_file_enumerator_next_file (GFileEnumerator  *enumerator,
+				   GCancellable     *cancellable,
+				   GError          **error)
+{
+  GLocalFileEnumerator *local = G_LOCAL_FILE_ENUMERATOR (enumerator);
+  const char *filename;
+  char *path;
+  GFileInfo *info;
+  GError *my_error;
+
+  if (!local->got_parent_info)
+    {
+      _g_local_file_info_get_parent_info (local->filename, local->matcher, &local->parent_info);
+      local->got_parent_info = TRUE;
+    }
+  
+ next_file:
+
+#ifdef USE_GDIR
+  filename = g_dir_read_name (local->dir);
+#else
+  filename = next_file_helper (local);
+#endif
+
+  if (filename == NULL)
+    return NULL;
+
+  my_error = NULL;
+  path = g_build_filename (local->filename, filename, NULL);
+  info = _g_local_file_info_get (filename, path,
+				 local->matcher,
+				 local->flags,
+				 &local->parent_info,
+				 &my_error); 
+  g_free (path);
+
+  if (info == NULL)
+    {
+      /* Failed to get info */
+      /* If the file does not exist there might have been a race where
+       * the file was removed between the readdir and the stat, so we
+       * ignore the file. */
+      if (my_error->domain == G_IO_ERROR &&
+	  my_error->code == G_IO_ERROR_NOT_FOUND)
+	{
+	  g_error_free (my_error);
+	  goto next_file;
+	}
+      else
+	g_propagate_error (error, my_error);
+    }
+
+  return info;
+}
+
+static gboolean
+g_local_file_enumerator_close (GFileEnumerator  *enumerator,
+			       GCancellable     *cancellable,
+			       GError          **error)
+{
+  GLocalFileEnumerator *local = G_LOCAL_FILE_ENUMERATOR (enumerator);
+
+  if (local->dir)
+    {
+#ifdef USE_GDIR
+      g_dir_close (local->dir);
+#else
+      closedir (local->dir);
+#endif
+      local->dir = NULL;
+    }
+
+  return TRUE;
+}
+
+
diff --git a/gio/glocalfileenumerator.h b/gio/glocalfileenumerator.h
new file mode 100644
index 0000000..1269be3
--- /dev/null
+++ b/gio/glocalfileenumerator.h
@@ -0,0 +1,57 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_FILE_ENUMERATOR_H__
+#define __G_LOCAL_FILE_ENUMERATOR_H__
+
+#include <gfileenumerator.h>
+#include <glocalfile.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_FILE_ENUMERATOR         (_g_local_file_enumerator_get_type ())
+#define G_LOCAL_FILE_ENUMERATOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_LOCAL_FILE_ENUMERATOR, GLocalFileEnumerator))
+#define G_LOCAL_FILE_ENUMERATOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_LOCAL_FILE_ENUMERATOR, GLocalFileEnumeratorClass))
+#define G_IS_LOCAL_FILE_ENUMERATOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_LOCAL_FILE_ENUMERATOR))
+#define G_IS_LOCAL_FILE_ENUMERATOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_LOCAL_FILE_ENUMERATOR))
+#define G_LOCAL_FILE_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_LOCAL_FILE_ENUMERATOR, GLocalFileEnumeratorClass))
+
+typedef struct _GLocalFileEnumerator         GLocalFileEnumerator;
+typedef struct _GLocalFileEnumeratorClass    GLocalFileEnumeratorClass;
+typedef struct _GLocalFileEnumeratorPrivate  GLocalFileEnumeratorPrivate;
+
+struct _GLocalFileEnumeratorClass
+{
+  GFileEnumeratorClass parent_class;
+};
+
+GType             _g_local_file_enumerator_get_type (void) G_GNUC_CONST;
+
+GFileEnumerator * _g_local_file_enumerator_new      (GLocalFile           *file,
+                                                     const char           *attributes,
+                                                     GFileQueryInfoFlags   flags,
+                                                     GCancellable         *cancellable,
+                                                     GError              **error);
+
+G_END_DECLS
+
+#endif /* __G_FILE_LOCAL_FILE_ENUMERATOR_H__ */
diff --git a/gio/glocalfileinfo.c b/gio/glocalfileinfo.c
new file mode 100644
index 0000000..e0d5b90
--- /dev/null
+++ b/gio/glocalfileinfo.c
@@ -0,0 +1,2300 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#define _GNU_SOURCE
+#include <fcntl.h>
+#include <errno.h>
+#ifdef HAVE_GRP_H
+#include <grp.h>
+#endif
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+#ifdef HAVE_SELINUX
+#include <selinux/selinux.h>
+#endif
+
+#ifdef HAVE_XATTR
+
+#if defined HAVE_SYS_XATTR_H
+  #include <sys/xattr.h>
+#elif defined HAVE_ATTR_XATTR_H
+  #include <attr/xattr.h>
+#else
+  #error "Neither <sys/xattr.h> nor <attr/xattr.h> is present but extended attribute support is enabled."
+#endif /* defined HAVE_SYS_XATTR_H || HAVE_ATTR_XATTR_H */
+
+#endif /* HAVE_XATTR */
+
+#include <glib/gstdio.h>
+#include <gfileattribute-priv.h>
+
+#include "glibintl.h"
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <io.h>
+#ifndef W_OK
+#define W_OK 2
+#endif
+#ifndef R_OK
+#define R_OK 4
+#endif
+#ifndef X_OK
+#define X_OK 0 /* not really */
+#endif
+#ifndef S_ISREG
+#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
+#endif
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
+#endif
+#ifndef S_IXUSR
+#define S_IXUSR _S_IEXEC
+#endif
+#endif
+
+#include "glocalfileinfo.h"
+#include "gioerror.h"
+#include "gthemedicon.h"
+#include "gcontenttype.h"
+#include "gcontenttypeprivate.h"
+
+#include "gioalias.h"
+
+struct ThumbMD5Context {
+	guint32 buf[4];
+	guint32 bits[2];
+	unsigned char in[64];
+};
+
+#ifndef G_OS_WIN32
+
+typedef struct {
+  char *user_name;
+  char *real_name;
+} UidData;
+
+G_LOCK_DEFINE_STATIC (uid_cache);
+static GHashTable *uid_cache = NULL;
+
+G_LOCK_DEFINE_STATIC (gid_cache);
+static GHashTable *gid_cache = NULL;
+
+#endif  /* !G_OS_WIN32 */
+
+char *
+_g_local_file_info_create_etag (GLocalFileStat *statbuf)
+{
+  GTimeVal tv;
+  
+  tv.tv_sec = statbuf->st_mtime;
+#if defined (HAVE_STRUCT_STAT_ST_MTIMENSEC)
+  tv.tv_usec = statbuf->st_mtimensec / 1000;
+#elif defined (HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
+  tv.tv_usec = statbuf->st_mtim.tv_nsec / 1000;
+#else
+  tv.tv_usec = 0;
+#endif
+
+  return g_strdup_printf ("%lu:%lu", tv.tv_sec, tv.tv_usec);
+}
+
+static char *
+_g_local_file_info_create_file_id (GLocalFileStat *statbuf)
+{
+  return g_strdup_printf ("l%" G_GUINT64_FORMAT ":%" G_GUINT64_FORMAT,
+			  (guint64) statbuf->st_dev, 
+			  (guint64) statbuf->st_ino);
+}
+
+static char *
+_g_local_file_info_create_fs_id (GLocalFileStat *statbuf)
+{
+  return g_strdup_printf ("l%" G_GUINT64_FORMAT,
+			  (guint64) statbuf->st_dev);
+}
+
+
+#ifdef S_ISLNK
+
+static gchar *
+read_link (const gchar *full_name)
+{
+#ifdef HAVE_READLINK
+  gchar *buffer;
+  guint size;
+  
+  size = 256;
+  buffer = g_malloc (size);
+  
+  while (1)
+    {
+      int read_size;
+      
+      read_size = readlink (full_name, buffer, size);
+      if (read_size < 0)
+	{
+	  g_free (buffer);
+	  return NULL;
+	}
+      if (read_size < size)
+	{
+	  buffer[read_size] = 0;
+	  return buffer;
+	}
+      size *= 2;
+      buffer = g_realloc (buffer, size);
+    }
+#else
+  return NULL;
+#endif
+}
+
+#endif  /* S_ISLNK */
+
+#ifdef HAVE_SELINUX
+/* Get the SELinux security context */
+static void
+get_selinux_context (const char            *path,
+		     GFileInfo             *info,
+		     GFileAttributeMatcher *attribute_matcher,
+		     gboolean               follow_symlinks)
+{
+  char *context;
+
+  if (!g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_SELINUX_CONTEXT))
+    return;
+  
+  if (is_selinux_enabled ())
+    {
+      if (follow_symlinks)
+	{
+	  if (lgetfilecon_raw (path, &context) < 0)
+	    return;
+	}
+      else
+	{
+	  if (getfilecon_raw (path, &context) < 0)
+	    return;
+	}
+
+      if (context)
+	{
+	  g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_SELINUX_CONTEXT, context);
+	  freecon (context);
+	}
+    }
+}
+#endif
+
+#ifdef HAVE_XATTR
+
+/* Wrappers to hide away differences between (Linux) getxattr/lgetxattr and
+ * (Mac) getxattr(..., XATTR_NOFOLLOW)
+ */
+#ifdef HAVE_XATTR_NOFOLLOW
+#define g_fgetxattr(fd,name,value,size)  fgetxattr(fd,name,value,size,0,0)
+#define g_flistxattr(fd,name,size)       flistxattr(fd,name,size,0)
+#define g_setxattr(path,name,value,size) setxattr(path,name,value,size,0,0)
+#else
+#define g_fgetxattr     fgetxattr
+#define g_flistxattr    flistxattr
+#define g_setxattr(path,name,value,size) setxattr(path,name,value,size,0)
+#endif
+
+static ssize_t
+g_getxattr (const char *path, const char *name, void *value, size_t size,
+            gboolean follow_symlinks)
+{
+#ifdef HAVE_XATTR_NOFOLLOW
+  return getxattr (path, name, value, size, 0, follow_symlinks ? 0 : XATTR_NOFOLLOW);
+#else
+  if (follow_symlinks)
+    return getxattr (path, name, value, size);
+  else
+    return lgetxattr (path, name, value, size);
+#endif
+}
+
+static ssize_t
+g_listxattr(const char *path, char *namebuf, size_t size,
+            gboolean follow_symlinks)
+{
+#ifdef HAVE_XATTR_NOFOLLOW
+  return listxattr (path, namebuf, size, follow_symlinks ? 0 : XATTR_NOFOLLOW);
+#else
+  if (follow_symlinks)
+    return listxattr (path, namebuf, size);
+  else
+    return llistxattr (path, namebuf, size);
+#endif
+}
+
+static gboolean
+valid_char (char c)
+{
+  return c >= 32 && c <= 126 && c != '\\';
+}
+
+static gboolean
+name_is_valid (const char *str)
+{
+  while (*str)
+    {
+      if (!valid_char (*str++))
+	return FALSE;
+    }
+  return TRUE;
+}
+
+static char *
+hex_escape_string (const char *str, 
+                   gboolean   *free_return)
+{
+  int num_invalid, i;
+  char *escaped_str, *p;
+  unsigned char c;
+  static char *hex_digits = "0123456789abcdef";
+  int len;
+
+  len = strlen (str);
+  
+  num_invalid = 0;
+  for (i = 0; i < len; i++)
+    {
+      if (!valid_char (str[i]))
+	num_invalid++;
+    }
+
+  if (num_invalid == 0)
+    {
+      *free_return = FALSE;
+      return (char *)str;
+    }
+
+  escaped_str = g_malloc (len + num_invalid*3 + 1);
+
+  p = escaped_str;
+  for (i = 0; i < len; i++)
+    {
+      if (valid_char (str[i]))
+	*p++ = str[i];
+      else
+	{
+	  c = str[i];
+	  *p++ = '\\';
+	  *p++ = 'x';
+	  *p++ = hex_digits[(c >> 4) & 0xf];
+	  *p++ = hex_digits[c & 0xf];
+	}
+    }
+  *p++ = 0;
+
+  *free_return = TRUE;
+  return escaped_str;
+}
+
+static char *
+hex_unescape_string (const char *str, 
+                     int        *out_len, 
+                     gboolean   *free_return)
+{
+  int i;
+  char *unescaped_str, *p;
+  unsigned char c;
+  int len;
+
+  len = strlen (str);
+  
+  if (strchr (str, '\\') == NULL)
+    {
+      if (out_len)
+	*out_len = len;
+      *free_return = FALSE;
+      return (char *)str;
+    }
+  
+  unescaped_str = g_malloc (len + 1);
+
+  p = unescaped_str;
+  for (i = 0; i < len; i++)
+    {
+      if (str[i] == '\\' &&
+	  str[i+1] == 'x' &&
+	  len - i >= 4)
+	{
+	  c =
+	    (g_ascii_xdigit_value (str[i+2]) << 4) |
+	    g_ascii_xdigit_value (str[i+3]);
+	  *p++ = c;
+	  i += 3;
+	}
+      else
+	*p++ = str[i];
+    }
+  *p++ = 0;
+
+  if (out_len)
+    *out_len = p - unescaped_str;
+  *free_return = TRUE;
+  return unescaped_str;
+}
+
+static void
+escape_xattr (GFileInfo  *info,
+	      const char *gio_attr, /* gio attribute name */
+	      const char *value, /* Is zero terminated */
+	      size_t      len /* not including zero termination */)
+{
+  char *escaped_val;
+  gboolean free_escaped_val;
+  
+  escaped_val = hex_escape_string (value, &free_escaped_val);
+  
+  g_file_info_set_attribute_string (info, gio_attr, escaped_val);
+  
+  if (free_escaped_val)
+    g_free (escaped_val);
+}
+
+static void
+get_one_xattr (const char *path,
+	       GFileInfo  *info,
+	       const char *gio_attr,
+	       const char *xattr,
+	       gboolean    follow_symlinks)
+{
+  char value[64];
+  char *value_p;
+  ssize_t len;
+
+  len = g_getxattr (path, xattr, value, sizeof (value)-1, follow_symlinks);
+
+  value_p = NULL;
+  if (len >= 0)
+    value_p = value;
+  else if (len == -1 && errno == ERANGE)
+    {
+      len = g_getxattr (path, xattr, NULL, 0, follow_symlinks);
+
+      if (len < 0)
+	return;
+
+      value_p = g_malloc (len+1);
+
+      len = g_getxattr (path, xattr, value_p, len, follow_symlinks);
+
+      if (len < 0)
+	{
+	  g_free (value_p);
+	  return;
+	}
+    }
+  else
+    return;
+  
+  /* Null terminate */
+  value_p[len] = 0;
+
+  escape_xattr (info, gio_attr, value_p, len);
+  
+  if (value_p != value)
+    g_free (value_p);
+}
+
+#endif /* defined HAVE_XATTR */
+
+static void
+get_xattrs (const char            *path,
+	    gboolean               user,
+	    GFileInfo             *info,
+	    GFileAttributeMatcher *matcher,
+	    gboolean               follow_symlinks)
+{
+#ifdef HAVE_XATTR
+  gboolean all;
+  gsize list_size;
+  ssize_t list_res_size;
+  size_t len;
+  char *list;
+  const char *attr, *attr2;
+
+  if (user)
+    all = g_file_attribute_matcher_enumerate_namespace (matcher, "xattr");
+  else
+    all = g_file_attribute_matcher_enumerate_namespace (matcher, "xattr-sys");
+
+  if (all)
+    {
+      list_res_size = g_listxattr (path, NULL, 0, follow_symlinks);
+
+      if (list_res_size == -1 ||
+	  list_res_size == 0)
+	return;
+
+      list_size = list_res_size;
+      list = g_malloc (list_size);
+
+    retry:
+      
+      list_res_size = g_listxattr (path, list, list_size, follow_symlinks);
+      
+      if (list_res_size == -1 && errno == ERANGE)
+	{
+	  list_size = list_size * 2;
+	  list = g_realloc (list, list_size);
+	  goto retry;
+	}
+
+      if (list_res_size == -1)
+	return;
+
+      attr = list;
+      while (list_res_size > 0)
+	{
+	  if ((user && g_str_has_prefix (attr, "user.")) ||
+	      (!user && !g_str_has_prefix (attr, "user.")))
+	    {
+	      char *escaped_attr, *gio_attr;
+	      gboolean free_escaped_attr;
+	      
+	      if (user)
+		{
+		  escaped_attr = hex_escape_string (attr + 5, &free_escaped_attr);
+		  gio_attr = g_strconcat ("xattr::", escaped_attr, NULL);
+		}
+	      else
+		{
+		  escaped_attr = hex_escape_string (attr, &free_escaped_attr);
+		  gio_attr = g_strconcat ("xattr-sys::", escaped_attr, NULL);
+		}
+	      
+	      if (free_escaped_attr)
+		g_free (escaped_attr);
+	      
+	      get_one_xattr (path, info, gio_attr, attr, follow_symlinks);
+
+	      g_free (gio_attr);
+	    }
+	      
+	  len = strlen (attr) + 1;
+	  attr += len;
+	  list_res_size -= len;
+	}
+
+      g_free (list);
+    }
+  else
+    {
+      while ((attr = g_file_attribute_matcher_enumerate_next (matcher)) != NULL)
+	{
+	  char *unescaped_attribute, *a;
+	  gboolean free_unescaped_attribute;
+
+	  attr2 = strchr (attr, ':');
+	  if (attr2)
+	    {
+	      attr2 += 2; /* Skip '::' */
+	      unescaped_attribute = hex_unescape_string (attr2, NULL, &free_unescaped_attribute);
+	      if (user)
+		a = g_strconcat ("user.", unescaped_attribute, NULL);
+	      else
+		a = unescaped_attribute;
+	      
+	      get_one_xattr (path, info, attr, a, follow_symlinks);
+
+	      if (user)
+		g_free (a);
+	      
+	      if (free_unescaped_attribute)
+		g_free (unescaped_attribute);
+	    }
+	}
+    }
+#endif /* defined HAVE_XATTR */
+}
+
+#ifdef HAVE_XATTR
+static void
+get_one_xattr_from_fd (int         fd,
+		       GFileInfo  *info,
+		       const char *gio_attr,
+		       const char *xattr)
+{
+  char value[64];
+  char *value_p;
+  ssize_t len;
+
+  len = g_fgetxattr (fd, xattr, value, sizeof (value) - 1);
+
+  value_p = NULL;
+  if (len >= 0)
+    value_p = value;
+  else if (len == -1 && errno == ERANGE)
+    {
+      len = g_fgetxattr (fd, xattr, NULL, 0);
+
+      if (len < 0)
+	return;
+
+      value_p = g_malloc (len + 1);
+
+      len = g_fgetxattr (fd, xattr, value_p, len);
+
+      if (len < 0)
+	{
+	  g_free (value_p);
+	  return;
+	}
+    }
+  else
+    return;
+  
+  /* Null terminate */
+  value_p[len] = 0;
+
+  escape_xattr (info, gio_attr, value_p, len);
+  
+  if (value_p != value)
+    g_free (value_p);
+}
+#endif /* defined HAVE_XATTR */
+
+static void
+get_xattrs_from_fd (int                    fd,
+		    gboolean               user,
+		    GFileInfo             *info,
+		    GFileAttributeMatcher *matcher)
+{
+#ifdef HAVE_XATTR
+  gboolean all;
+  gsize list_size;
+  ssize_t list_res_size;
+  size_t len;
+  char *list;
+  const char *attr, *attr2;
+
+  if (user)
+    all = g_file_attribute_matcher_enumerate_namespace (matcher, "xattr");
+  else
+    all = g_file_attribute_matcher_enumerate_namespace (matcher, "xattr-sys");
+
+  if (all)
+    {
+      list_res_size = g_flistxattr (fd, NULL, 0);
+
+      if (list_res_size == -1 ||
+	  list_res_size == 0)
+	return;
+
+      list_size = list_res_size;
+      list = g_malloc (list_size);
+
+    retry:
+      
+      list_res_size = g_flistxattr (fd, list, list_size);
+      
+      if (list_res_size == -1 && errno == ERANGE)
+	{
+	  list_size = list_size * 2;
+	  list = g_realloc (list, list_size);
+	  goto retry;
+	}
+
+      if (list_res_size == -1)
+	return;
+
+      attr = list;
+      while (list_res_size > 0)
+	{
+	  if ((user && g_str_has_prefix (attr, "user.")) ||
+	      (!user && !g_str_has_prefix (attr, "user.")))
+	    {
+	      char *escaped_attr, *gio_attr;
+	      gboolean free_escaped_attr;
+	      
+	      if (user)
+		{
+		  escaped_attr = hex_escape_string (attr + 5, &free_escaped_attr);
+		  gio_attr = g_strconcat ("xattr::", escaped_attr, NULL);
+		}
+	      else
+		{
+		  escaped_attr = hex_escape_string (attr, &free_escaped_attr);
+		  gio_attr = g_strconcat ("xattr-sys::", escaped_attr, NULL);
+		}
+	      
+	      if (free_escaped_attr)
+		g_free (escaped_attr);
+	      
+	      get_one_xattr_from_fd (fd, info, gio_attr, attr);
+	    }
+	  
+	  len = strlen (attr) + 1;
+	  attr += len;
+	  list_res_size -= len;
+	}
+
+      g_free (list);
+    }
+  else
+    {
+      while ((attr = g_file_attribute_matcher_enumerate_next (matcher)) != NULL)
+	{
+	  char *unescaped_attribute, *a;
+	  gboolean free_unescaped_attribute;
+
+	  attr2 = strchr (attr, ':');
+	  if (attr2)
+	    {
+	      attr2++; /* Skip ':' */
+	      unescaped_attribute = hex_unescape_string (attr2, NULL, &free_unescaped_attribute);
+	      if (user)
+		a = g_strconcat ("user.", unescaped_attribute, NULL);
+	      else
+		a = unescaped_attribute;
+	      
+	      get_one_xattr_from_fd (fd, info, attr, a);
+
+	      if (user)
+		g_free (a);
+	      
+	      if (free_unescaped_attribute)
+		g_free (unescaped_attribute);
+	    }
+	}
+    }
+#endif /* defined HAVE_XATTR */
+}
+
+#ifdef HAVE_XATTR
+static gboolean
+set_xattr (char                       *filename,
+	   const char                 *escaped_attribute,
+	   const GFileAttributeValue  *attr_value,
+	   GError                    **error)
+{
+  char *attribute, *value;
+  gboolean free_attribute, free_value;
+  int val_len, res, errsv;
+  gboolean is_user;
+  char *a;
+
+  if (attr_value == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Attribute value must be non-NULL"));
+      return FALSE;
+    }
+
+  if (attr_value->type != G_FILE_ATTRIBUTE_TYPE_STRING)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid attribute type (string expected)"));
+      return FALSE;
+    }
+
+  if (!name_is_valid (escaped_attribute))
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid extended attribute name"));
+      return FALSE;
+    }
+
+  if (g_str_has_prefix (escaped_attribute, "xattr::"))
+    {
+      escaped_attribute += strlen ("xattr::");
+      is_user = TRUE;
+    }
+  else
+    {
+      g_warn_if_fail (g_str_has_prefix (escaped_attribute, "xattr-sys::"));
+      escaped_attribute += strlen ("xattr-sys::");
+      is_user = FALSE;
+    }
+  
+  attribute = hex_unescape_string (escaped_attribute, NULL, &free_attribute);
+  value = hex_unescape_string (attr_value->u.string, &val_len, &free_value);
+
+  if (is_user)
+    a = g_strconcat ("user.", attribute, NULL);
+  else
+    a = attribute;
+  
+  res = g_setxattr (filename, a, value, val_len);
+  errsv = errno;
+  
+  if (is_user)
+    g_free (a);
+  
+  if (free_attribute)
+    g_free (attribute);
+  
+  if (free_value)
+    g_free (value);
+
+  if (res == -1)
+    {
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting extended attribute '%s': %s"),
+		   escaped_attribute, g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+#endif
+
+
+void
+_g_local_file_info_get_parent_info (const char            *dir,
+				    GFileAttributeMatcher *attribute_matcher,
+				    GLocalParentFileInfo  *parent_info)
+{
+  /* Use plain struct stat for now as long as we only look at the
+   * S_ISVTX bit which doesn't exist on Win32 anyway.
+   */
+  struct stat statbuf;
+  int res;
+  
+  parent_info->writable = FALSE;
+  parent_info->is_sticky = FALSE;
+  parent_info->has_trash_dir = FALSE;
+  parent_info->device = 0;
+
+  if (g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME) ||
+      g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE) ||
+      g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH) ||
+      g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT))
+    {
+      /* FIXME: Windows: The underlying _waccess() call in the C
+       * library is mostly pointless as it only looks at the READONLY
+       * FAT-style attribute of the file, it doesn't check the ACL at
+       * all.
+       */
+      parent_info->writable = (g_access (dir, W_OK) == 0);
+      
+      res = g_stat (dir, &statbuf);
+
+      /*
+       * The sticky bit (S_ISVTX) on a directory means that a file in that directory can be
+       * renamed or deleted only by the owner of the file, by the owner of the directory, and
+       * by a privileged process.
+       */
+      if (res == 0)
+	{
+#ifdef S_ISVTX
+	  parent_info->is_sticky = (statbuf.st_mode & S_ISVTX) != 0;
+#else
+	  parent_info->is_sticky = FALSE;
+#endif
+	  parent_info->owner = statbuf.st_uid;
+	  parent_info->device = statbuf.st_dev;
+          /* No need to find trash dir if it's not writable anyway */
+          if (parent_info->writable &&
+              g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH))
+            parent_info->has_trash_dir = _g_local_file_has_trash_dir (dir, statbuf.st_dev);
+	}
+    }
+}
+
+static void
+get_access_rights (GFileAttributeMatcher *attribute_matcher,
+		   GFileInfo             *info,
+		   const gchar           *path,
+		   GLocalFileStat        *statbuf,
+		   GLocalParentFileInfo  *parent_info)
+{
+  /* FIXME: Windows: The underlyin _waccess() is mostly pointless */
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
+				       g_access (path, R_OK) == 0);
+  
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
+				       g_access (path, W_OK) == 0);
+  
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE,
+				       g_access (path, X_OK) == 0);
+
+
+  if (parent_info)
+    {
+      gboolean writable;
+
+      writable = FALSE;
+      if (parent_info->writable)
+	{
+	  if (parent_info->is_sticky)
+	    {
+#ifndef G_OS_WIN32
+	      uid_t uid = geteuid ();
+
+	      if (uid == statbuf->st_uid ||
+		  uid == parent_info->owner ||
+		  uid == 0)
+#endif
+		writable = TRUE;
+	    }
+	  else
+	    writable = TRUE;
+	}
+
+      if (g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME))
+	g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME,
+					   writable);
+      
+      if (g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE))
+	g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE,
+					   writable);
+
+      if (g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH))
+        g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH,
+                                           writable && parent_info->has_trash_dir);
+    }
+}
+
+static void
+set_info_from_stat (GFileInfo             *info, 
+                    GLocalFileStat        *statbuf,
+		    GFileAttributeMatcher *attribute_matcher)
+{
+  GFileType file_type;
+
+  file_type = G_FILE_TYPE_UNKNOWN;
+
+  if (S_ISREG (statbuf->st_mode))
+    file_type = G_FILE_TYPE_REGULAR;
+  else if (S_ISDIR (statbuf->st_mode))
+    file_type = G_FILE_TYPE_DIRECTORY;
+#ifndef G_OS_WIN32
+  else if (S_ISCHR (statbuf->st_mode) ||
+	   S_ISBLK (statbuf->st_mode) ||
+	   S_ISFIFO (statbuf->st_mode)
+#ifdef S_ISSOCK
+	   || S_ISSOCK (statbuf->st_mode)
+#endif
+	   )
+    file_type = G_FILE_TYPE_SPECIAL;
+#endif
+#ifdef S_ISLNK
+  else if (S_ISLNK (statbuf->st_mode))
+    file_type = G_FILE_TYPE_SYMBOLIC_LINK;
+#endif
+
+  g_file_info_set_file_type (info, file_type);
+  g_file_info_set_size (info, statbuf->st_size);
+
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_DEVICE, statbuf->st_dev);
+#ifndef G_OS_WIN32
+  /* Pointless setting these on Windows even if they exist in the struct */
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_UNIX_INODE, statbuf->st_ino);
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_NLINK, statbuf->st_nlink);
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID, statbuf->st_uid);
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID, statbuf->st_gid);
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_RDEV, statbuf->st_rdev);
+#endif
+  /* FIXME: st_mode is mostly pointless on Windows, too. Set the attribute or not? */
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE, statbuf->st_mode);
+#if defined (HAVE_STRUCT_STAT_ST_BLKSIZE)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE, statbuf->st_blksize);
+#endif
+#if defined (HAVE_STRUCT_STAT_ST_BLOCKS)
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_UNIX_BLOCKS, statbuf->st_blocks);
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE,
+                                    statbuf->st_blocks * G_GUINT64_CONSTANT (512));
+#endif
+  
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED, statbuf->st_mtime);
+#if defined (HAVE_STRUCT_STAT_ST_MTIMENSEC)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, statbuf->st_mtimensec / 1000);
+#elif defined (HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, statbuf->st_mtim.tv_nsec / 1000);
+#endif
+  
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS, statbuf->st_atime);
+#if defined (HAVE_STRUCT_STAT_ST_ATIMENSEC)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC, statbuf->st_atimensec / 1000);
+#elif defined (HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC, statbuf->st_atim.tv_nsec / 1000);
+#endif
+  
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_CHANGED, statbuf->st_ctime);
+#if defined (HAVE_STRUCT_STAT_ST_CTIMENSEC)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_CHANGED_USEC, statbuf->st_ctimensec / 1000);
+#elif defined (HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC)
+  g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_CHANGED_USEC, statbuf->st_ctim.tv_nsec / 1000);
+#endif
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_ETAG_VALUE))
+    {
+      char *etag = _g_local_file_info_create_etag (statbuf);
+      g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ETAG_VALUE, etag);
+      g_free (etag);
+    }
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_ID_FILE))
+    {
+      char *id = _g_local_file_info_create_file_id (statbuf);
+      g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILE, id);
+      g_free (id);
+    }
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_ID_FILESYSTEM))
+    {
+      char *id = _g_local_file_info_create_fs_id (statbuf);
+      g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILESYSTEM, id);
+      g_free (id);
+    }
+}
+
+#ifndef G_OS_WIN32
+
+static char *
+make_valid_utf8 (const char *name)
+{
+  GString *string;
+  const gchar *remainder, *invalid;
+  gint remaining_bytes, valid_bytes;
+  
+  string = NULL;
+  remainder = name;
+  remaining_bytes = strlen (name);
+  
+  while (remaining_bytes != 0) 
+    {
+      if (g_utf8_validate (remainder, remaining_bytes, &invalid)) 
+	break;
+      valid_bytes = invalid - remainder;
+    
+      if (string == NULL) 
+	string = g_string_sized_new (remaining_bytes);
+
+      g_string_append_len (string, remainder, valid_bytes);
+      /* append U+FFFD REPLACEMENT CHARACTER */
+      g_string_append (string, "\357\277\275");
+      
+      remaining_bytes -= valid_bytes + 1;
+      remainder = invalid + 1;
+    }
+  
+  if (string == NULL)
+    return g_strdup (name);
+  
+  g_string_append (string, remainder);
+
+  g_warn_if_fail (g_utf8_validate (string->str, -1, NULL));
+  
+  return g_string_free (string, FALSE);
+}
+
+static char *
+convert_pwd_string_to_utf8 (char *pwd_str)
+{
+  char *utf8_string;
+  
+  if (!g_utf8_validate (pwd_str, -1, NULL))
+    {
+      utf8_string = g_locale_to_utf8 (pwd_str, -1, NULL, NULL, NULL);
+      if (utf8_string == NULL)
+	utf8_string = make_valid_utf8 (pwd_str);
+    }
+  else 
+    utf8_string = g_strdup (pwd_str);
+  
+  return utf8_string;
+}
+
+static void
+uid_data_free (UidData *data)
+{
+  g_free (data->user_name);
+  g_free (data->real_name);
+  g_free (data);
+}
+
+/* called with lock held */
+static UidData *
+lookup_uid_data (uid_t uid)
+{
+  UidData *data;
+  char buffer[4096];
+  struct passwd pwbuf;
+  struct passwd *pwbufp;
+  char *gecos, *comma;
+  
+  if (uid_cache == NULL)
+    uid_cache = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)uid_data_free);
+
+  data = g_hash_table_lookup (uid_cache, GINT_TO_POINTER (uid));
+
+  if (data)
+    return data;
+
+  data = g_new0 (UidData, 1);
+
+#if defined(HAVE_POSIX_GETPWUID_R)
+  getpwuid_r (uid, &pwbuf, buffer, sizeof(buffer), &pwbufp);
+#elif defined(HAVE_NONPOSIX_GETPWUID_R)
+  pwbufp = getpwuid_r (uid, &pwbuf, buffer, sizeof(buffer));
+#else
+  pwbufp = getpwuid (uid);
+#endif
+
+  if (pwbufp != NULL)
+    {
+      if (pwbufp->pw_name != NULL && pwbufp->pw_name[0] != 0)
+	data->user_name = convert_pwd_string_to_utf8 (pwbufp->pw_name);
+
+      gecos = pwbufp->pw_gecos;
+
+      if (gecos)
+	{
+	  comma = strchr (gecos, ',');
+	  if (comma)
+	    *comma = 0;
+	  data->real_name = convert_pwd_string_to_utf8 (gecos);
+	}
+    }
+
+  /* Default fallbacks */
+  if (data->real_name == NULL)
+    {
+      if (data->user_name != NULL)
+	data->real_name = g_strdup (data->user_name);
+      else
+	data->real_name = g_strdup_printf ("user #%d", (int)uid);
+    }
+  
+  if (data->user_name == NULL)
+    data->user_name = g_strdup_printf ("%d", (int)uid);
+  
+  g_hash_table_replace (uid_cache, GINT_TO_POINTER (uid), data);
+  
+  return data;
+}
+
+static char *
+get_username_from_uid (uid_t uid)
+{
+  char *res;
+  UidData *data;
+  
+  G_LOCK (uid_cache);
+  data = lookup_uid_data (uid);
+  res = g_strdup (data->user_name);  
+  G_UNLOCK (uid_cache);
+
+  return res;
+}
+
+static char *
+get_realname_from_uid (uid_t uid)
+{
+  char *res;
+  UidData *data;
+  
+  G_LOCK (uid_cache);
+  data = lookup_uid_data (uid);
+  res = g_strdup (data->real_name);  
+  G_UNLOCK (uid_cache);
+  
+  return res;
+}
+
+/* called with lock held */
+static char *
+lookup_gid_name (gid_t gid)
+{
+  char *name;
+  char buffer[4096];
+  struct group gbuf;
+  struct group *gbufp;
+  
+  if (gid_cache == NULL)
+    gid_cache = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_free);
+
+  name = g_hash_table_lookup (gid_cache, GINT_TO_POINTER (gid));
+
+  if (name)
+    return name;
+
+#if defined (HAVE_POSIX_GETGRGID_R)
+  getgrgid_r (gid, &gbuf, buffer, sizeof(buffer), &gbufp);
+#elif defined (HAVE_NONPOSIX_GETGRGID_R)
+  gbufp = getgrgid_r (gid, &gbuf, buffer, sizeof(buffer));
+#else
+  gbufp = getgrgid (gid);
+#endif
+
+  if (gbufp != NULL &&
+      gbufp->gr_name != NULL &&
+      gbufp->gr_name[0] != 0)
+    name = convert_pwd_string_to_utf8 (gbufp->gr_name);
+  else
+    name = g_strdup_printf("%d", (int)gid);
+  
+  g_hash_table_replace (gid_cache, GINT_TO_POINTER (gid), name);
+  
+  return name;
+}
+
+static char *
+get_groupname_from_gid (gid_t gid)
+{
+  char *res;
+  char *name;
+  
+  G_LOCK (gid_cache);
+  name = lookup_gid_name (gid);
+  res = g_strdup (name);  
+  G_UNLOCK (gid_cache);
+  return res;
+}
+
+#endif /* !G_OS_WIN32 */
+
+static char *
+get_content_type (const char          *basename,
+		  const char          *path,
+		  GLocalFileStat      *statbuf,
+		  gboolean             is_symlink,
+		  gboolean             symlink_broken,
+		  GFileQueryInfoFlags  flags,
+		  gboolean             fast)
+{
+  if (is_symlink &&
+      (symlink_broken || (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS)))
+    return g_strdup  ("inode/symlink");
+  else if (S_ISDIR(statbuf->st_mode))
+    return g_strdup ("inode/directory");
+#ifndef G_OS_WIN32
+  else if (S_ISCHR(statbuf->st_mode))
+    return g_strdup ("inode/chardevice");
+  else if (S_ISBLK(statbuf->st_mode))
+    return g_strdup ("inode/blockdevice");
+  else if (S_ISFIFO(statbuf->st_mode))
+    return g_strdup ("inode/fifo");
+#endif
+#ifdef S_ISSOCK
+  else if (S_ISSOCK(statbuf->st_mode))
+    return g_strdup ("inode/socket");
+#endif
+  else
+    {
+      char *content_type;
+      gboolean result_uncertain;
+      
+      content_type = g_content_type_guess (basename, NULL, 0, &result_uncertain);
+      
+#ifndef G_OS_WIN32
+      if (!fast && result_uncertain && path != NULL)
+	{
+	  guchar sniff_buffer[4096];
+	  gsize sniff_length;
+	  int fd;
+
+	  sniff_length = _g_unix_content_type_get_sniff_len ();
+	  if (sniff_length > 4096)
+	    sniff_length = 4096;
+
+#ifdef O_NOATIME	  
+          fd = open (path, O_RDONLY | O_NOATIME);
+          if (fd < 0 && errno == EPERM)
+#endif
+	    fd = open (path, O_RDONLY);
+
+	  if (fd != -1)
+	    {
+	      ssize_t res;
+	      
+	      res = read (fd, sniff_buffer, sniff_length);
+	      close (fd);
+	      if (res >= 0)
+		{
+		  g_free (content_type);
+		  content_type = g_content_type_guess (basename, sniff_buffer, res, NULL);
+		}
+	    }
+	}
+#endif
+      
+      return content_type;
+    }
+  
+}
+
+static void
+get_thumbnail_attributes (const char *path,
+                          GFileInfo  *info)
+{
+  GChecksum *checksum;
+  char *uri;
+  char *filename;
+  char *basename;
+
+  uri = g_filename_to_uri (path, NULL, NULL);
+
+  checksum = g_checksum_new (G_CHECKSUM_MD5);
+  g_checksum_update (checksum, (const guchar *) uri, strlen (uri));
+  
+  g_free (uri);
+
+  basename = g_strconcat (g_checksum_get_string (checksum), ".png", NULL);
+  g_checksum_free (checksum);
+
+  filename = g_build_filename (g_get_home_dir (),
+                               ".thumbnails", "normal", basename,
+                               NULL);
+
+  if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+    g_file_info_set_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH, filename);
+  else
+    {
+      g_free (filename);
+      filename = g_build_filename (g_get_home_dir (),
+                                   ".thumbnails", "fail",
+                                   "gnome-thumbnail-factory",
+                                   basename,
+                                   NULL);
+
+      if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+	g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED, TRUE);
+    }
+  g_free (basename);
+  g_free (filename);
+}
+
+#ifdef G_OS_WIN32
+static void
+win32_get_file_user_info (const gchar  *filename,
+			  gchar       **group_name, 
+			  gchar       **user_name, 
+			  gchar       **real_name)
+{
+  PSECURITY_DESCRIPTOR psd = NULL;
+  DWORD sd_size = 0; /* first call calculates the size required */
+  
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  if ((GetFileSecurityW (wfilename, 
+                        GROUP_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION,
+			NULL,
+			sd_size,
+			&sd_size) || (ERROR_INSUFFICIENT_BUFFER == GetLastError())) &&
+     (psd = g_try_malloc (sd_size)) != NULL &&
+     GetFileSecurityW (wfilename, 
+                       GROUP_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION,
+		       psd,
+		       sd_size,
+		       &sd_size))
+    {
+      PSID psid = 0;
+      BOOL defaulted;
+      SID_NAME_USE name_use = 0; /* don't care? */
+      wchar_t *name = NULL;
+      wchar_t *domain = NULL;
+      DWORD name_len = 0;
+      DWORD domain_len = 0;
+      /* get the user name */
+      do {
+        if (!user_name)
+	  break;
+	if (!GetSecurityDescriptorOwner (psd, &psid, &defaulted))
+	  break;
+	if (!LookupAccountSidW (NULL, /* local machine */
+                                psid, 
+			        name, &name_len,
+			        domain, &domain_len, /* no domain info yet */
+			        &name_use)  && (ERROR_INSUFFICIENT_BUFFER != GetLastError()))
+	  break;
+	name = g_try_malloc (name_len * sizeof (wchar_t));
+	domain = g_try_malloc (domain_len * sizeof (wchar_t));
+	if (name && domain &&
+            LookupAccountSidW (NULL, /* local machine */
+                               psid, 
+			       name, &name_len,
+			       domain, &domain_len, /* no domain info yet */
+			       &name_use))
+	  {
+	    *user_name = g_utf16_to_utf8 (name, -1, NULL, NULL, NULL);
+	  }
+	g_free (name);
+	g_free (domain);
+      } while (FALSE);
+
+      /* get the group name */
+      do {
+        if (!group_name)
+	  break;
+	if (!GetSecurityDescriptorGroup (psd, &psid, &defaulted))
+	  break;
+	if (!LookupAccountSidW (NULL, /* local machine */
+                                psid, 
+			        name, &name_len,
+			        domain, &domain_len, /* no domain info yet */
+			        &name_use)  && (ERROR_INSUFFICIENT_BUFFER != GetLastError()))
+	  break;
+	name = g_try_malloc (name_len * sizeof (wchar_t));
+	domain = g_try_malloc (domain_len * sizeof (wchar_t));
+	if (name && domain &&
+            LookupAccountSidW (NULL, /* local machine */
+                               psid, 
+			       name, &name_len,
+			       domain, &domain_len, /* no domain info yet */
+			       &name_use))
+	  {
+	    *group_name = g_utf16_to_utf8 (name, -1, NULL, NULL, NULL);
+	  }
+	g_free (name);
+	g_free (domain);
+      } while (FALSE);
+
+      /* TODO: get real name */
+
+      g_free (psd);
+    }
+  g_free (wfilename);
+}
+#endif /* G_OS_WIN32 */
+
+GFileInfo *
+_g_local_file_info_get (const char             *basename,
+			const char             *path,
+			GFileAttributeMatcher  *attribute_matcher,
+			GFileQueryInfoFlags     flags,
+			GLocalParentFileInfo   *parent_info,
+			GError                **error)
+{
+  GFileInfo *info;
+  GLocalFileStat statbuf;
+#ifdef S_ISLNK
+  struct stat statbuf2;
+#endif
+  int res;
+  gboolean is_symlink, symlink_broken;
+#ifdef G_OS_WIN32
+  DWORD dos_attributes;
+#endif
+
+  info = g_file_info_new ();
+
+  /* Make sure we don't set any unwanted attributes */
+  g_file_info_set_attribute_mask (info, attribute_matcher);
+  
+  g_file_info_set_name (info, basename);
+
+  /* Avoid stat in trivial case */
+  if (attribute_matcher == NULL)
+    return info;
+
+#ifndef G_OS_WIN32
+  res = g_lstat (path, &statbuf);
+#else
+  {
+    wchar_t *wpath = g_utf8_to_utf16 (path, -1, NULL, NULL, error);
+    int len;
+
+    if (wpath == NULL)
+      {
+        g_object_unref (info);
+        return NULL;
+      }
+
+    len = wcslen (wpath);
+    while (len > 0 && G_IS_DIR_SEPARATOR (wpath[len-1]))
+      len--;
+    if (len > 0 &&
+        (!g_path_is_absolute (path) || len > g_path_skip_root (path) - path))
+      wpath[len] = '\0';
+
+    res = _wstati64 (wpath, &statbuf);
+    dos_attributes = GetFileAttributesW (wpath);
+
+    g_free (wpath);
+  }
+#endif
+
+  if (res == -1)
+    {
+      int errsv = errno;
+      char *display_name = g_filename_display_name (path);
+      g_object_unref (info);
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error stating file '%s': %s"),
+		   display_name, g_strerror (errsv));
+      g_free (display_name);
+      return NULL;
+    }
+  
+#ifdef S_ISLNK
+  is_symlink = S_ISLNK (statbuf.st_mode);
+#else
+  is_symlink = FALSE;
+#endif
+  symlink_broken = FALSE;
+#ifdef S_ISLNK
+  if (is_symlink)
+    {
+      g_file_info_set_is_symlink (info, TRUE);
+
+      /* Unless NOFOLLOW was set we default to following symlinks */
+      if (!(flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS))
+	{
+	  res = stat (path, &statbuf2);
+
+	    /* Report broken links as symlinks */
+	  if (res != -1)
+	    statbuf = statbuf2;
+	  else
+	    symlink_broken = TRUE;
+	}
+    }
+#endif
+
+  set_info_from_stat (info, &statbuf, attribute_matcher);
+  
+#ifndef G_OS_WIN32
+  if (basename != NULL && basename[0] == '.')
+    g_file_info_set_is_hidden (info, TRUE);
+
+  if (basename != NULL && basename[strlen (basename) -1] == '~' &&
+      S_ISREG (statbuf.st_mode))
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP, TRUE);
+#else
+  if (dos_attributes & FILE_ATTRIBUTE_HIDDEN)
+    g_file_info_set_is_hidden (info, TRUE);
+
+  if (dos_attributes & FILE_ATTRIBUTE_ARCHIVE)
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE, TRUE);
+
+  if (dos_attributes & FILE_ATTRIBUTE_SYSTEM)
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_DOS_IS_SYSTEM, TRUE);
+#endif
+
+#ifdef S_ISLNK
+  if (is_symlink &&
+      g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET))
+    {
+      char *link = read_link (path);
+      g_file_info_set_symlink_target (info, link);
+      g_free (link);
+    }
+#endif
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME))
+    {
+      char *display_name = g_filename_display_basename (path);
+     
+      /* look for U+FFFD REPLACEMENT CHARACTER */ 
+      if (strstr (display_name, "\357\277\275") != NULL)
+	{
+	  char *p = display_name;
+	  display_name = g_strconcat (display_name, _(" (invalid encoding)"), NULL);
+	  g_free (p);
+	}
+      g_file_info_set_display_name (info, display_name);
+      g_free (display_name);
+    }
+  
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME))
+    {
+      char *edit_name = g_filename_display_basename (path);
+      g_file_info_set_edit_name (info, edit_name);
+      g_free (edit_name);
+    }
+
+  
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_COPY_NAME))
+    {
+      char *copy_name = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL);
+      if (copy_name)
+	g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_COPY_NAME, copy_name);
+      g_free (copy_name);
+    }
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE) ||
+      g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_ICON))
+    {
+      char *content_type = get_content_type (basename, path, &statbuf, is_symlink, symlink_broken, flags, FALSE);
+
+      if (content_type)
+	{
+	  g_file_info_set_content_type (info, content_type);
+
+	  if (g_file_attribute_matcher_matches (attribute_matcher,
+						G_FILE_ATTRIBUTE_STANDARD_ICON))
+	    {
+	      GIcon *icon;
+
+              if (strcmp (path, g_get_home_dir ()) == 0)
+                icon = g_themed_icon_new ("user-home");
+              else if (strcmp (path, g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)) == 0) 
+                icon = g_themed_icon_new ("user-desktop");
+              else 
+                {
+                  icon = g_content_type_get_icon (content_type);
+                  if (G_IS_THEMED_ICON (icon))
+                    {
+                      const char *type_icon = NULL;
+
+                      if (S_ISDIR (statbuf.st_mode)) 
+                        type_icon = "folder";
+                      if (type_icon)
+                        g_themed_icon_append_name (G_THEMED_ICON (icon), type_icon);
+                    }
+                }
+
+              if (icon != NULL)
+                {
+                  g_file_info_set_icon (info, icon);
+                  g_object_unref (icon);
+                }
+	    }
+	  
+	  g_free (content_type);
+	}
+    }
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE))
+    {
+      char *content_type = get_content_type (basename, path, &statbuf, is_symlink, symlink_broken, flags, TRUE);
+      
+      if (content_type)
+	{
+	  g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, content_type);
+	  g_free (content_type);
+	}
+    }
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_OWNER_USER))
+    {
+      char *name = NULL;
+      
+#ifdef G_OS_WIN32
+      win32_get_file_user_info (path, NULL, &name, NULL);
+#else
+      name = get_username_from_uid (statbuf.st_uid);
+#endif
+      if (name)
+	g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER, name);
+      g_free (name);
+    }
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_OWNER_USER_REAL))
+    {
+      char *name = NULL;
+#ifdef G_OS_WIN32
+      win32_get_file_user_info (path, NULL, NULL, &name);
+#else
+      name = get_realname_from_uid (statbuf.st_uid);
+#endif
+      if (name)
+	g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER_REAL, name);
+      g_free (name);
+    }
+  
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_OWNER_GROUP))
+    {
+      char *name = NULL;
+#ifdef G_OS_WIN32
+      win32_get_file_user_info (path, &name, NULL, NULL);
+#else
+      name = get_groupname_from_gid (statbuf.st_gid);
+#endif
+      if (name)
+	g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_GROUP, name);
+      g_free (name);
+    }
+
+  if (parent_info && parent_info->device != 0 &&
+      g_file_attribute_matcher_matches (attribute_matcher, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT) &&
+      statbuf.st_dev != parent_info->device) 
+    g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT, TRUE);
+  
+  get_access_rights (attribute_matcher, info, path, &statbuf, parent_info);
+  
+#ifdef HAVE_SELINUX
+  get_selinux_context (path, info, attribute_matcher, (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) == 0);
+#endif
+  get_xattrs (path, TRUE, info, attribute_matcher, (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) == 0);
+  get_xattrs (path, FALSE, info, attribute_matcher, (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS) == 0);
+
+  if (g_file_attribute_matcher_matches (attribute_matcher,
+					G_FILE_ATTRIBUTE_THUMBNAIL_PATH))
+    get_thumbnail_attributes (path, info);
+  
+  g_file_info_unset_attribute_mask (info);
+
+  return info;
+}
+
+GFileInfo *
+_g_local_file_info_get_from_fd (int         fd,
+				const char *attributes,
+				GError    **error)
+{
+  GLocalFileStat stat_buf;
+  GFileAttributeMatcher *matcher;
+  GFileInfo *info;
+  
+#ifdef G_OS_WIN32
+#define FSTAT _fstati64
+#else
+#define FSTAT fstat
+#endif
+
+  if (FSTAT (fd, &stat_buf) == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error stating file descriptor: %s"),
+		   g_strerror (errsv));
+      return NULL;
+    }
+
+  info = g_file_info_new ();
+
+  matcher = g_file_attribute_matcher_new (attributes);
+
+  /* Make sure we don't set any unwanted attributes */
+  g_file_info_set_attribute_mask (info, matcher);
+  
+  set_info_from_stat (info, &stat_buf, matcher);
+  
+#ifdef HAVE_SELINUX
+  if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_SELINUX_CONTEXT) &&
+      is_selinux_enabled ())
+    {
+      char *context;
+      if (fgetfilecon_raw (fd, &context) >= 0)
+	{
+	  g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_SELINUX_CONTEXT, context);
+	  freecon (context);
+	}
+    }
+#endif
+
+  get_xattrs_from_fd (fd, TRUE, info, matcher);
+  get_xattrs_from_fd (fd, FALSE, info, matcher);
+  
+  g_file_attribute_matcher_unref (matcher);
+
+  g_file_info_unset_attribute_mask (info);
+  
+  return info;
+}
+
+static gboolean
+get_uint32 (const GFileAttributeValue  *value,
+	    guint32                    *val_out,
+	    GError                    **error)
+{
+  if (value->type != G_FILE_ATTRIBUTE_TYPE_UINT32)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid attribute type (uint32 expected)"));
+      return FALSE;
+    }
+
+  *val_out = value->u.uint32;
+  
+  return TRUE;
+}
+
+#ifdef HAVE_UTIMES
+static gboolean
+get_uint64 (const GFileAttributeValue  *value,
+	    guint64                    *val_out,
+	    GError                    **error)
+{
+  if (value->type != G_FILE_ATTRIBUTE_TYPE_UINT64)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid attribute type (uint64 expected)"));
+      return FALSE;
+    }
+
+  *val_out = value->u.uint64;
+  
+  return TRUE;
+}
+#endif
+
+#if defined(HAVE_SYMLINK)
+static gboolean
+get_byte_string (const GFileAttributeValue  *value,
+		 const char                **val_out,
+		 GError                    **error)
+{
+  if (value->type != G_FILE_ATTRIBUTE_TYPE_BYTE_STRING)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid attribute type (byte string expected)"));
+      return FALSE;
+    }
+
+  *val_out = value->u.string;
+  
+  return TRUE;
+}
+#endif
+
+#ifdef HAVE_SELINUX
+static gboolean
+get_string (const GFileAttributeValue  *value,
+	    const char                **val_out,
+	    GError                    **error)
+{
+  if (value->type != G_FILE_ATTRIBUTE_TYPE_STRING)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid attribute type (byte string expected)"));
+      return FALSE;
+    }
+
+  *val_out = value->u.string;
+  
+  return TRUE;
+}
+#endif
+
+static gboolean
+set_unix_mode (char                       *filename,
+	       const GFileAttributeValue  *value,
+	       GError                    **error)
+{
+  guint32 val;
+  
+  if (!get_uint32 (value, &val, error))
+    return FALSE;
+  
+  if (g_chmod (filename, val) == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting permissions: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  return TRUE;
+}
+
+#ifdef HAVE_CHOWN
+static gboolean
+set_unix_uid_gid (char                       *filename,
+		  const GFileAttributeValue  *uid_value,
+		  const GFileAttributeValue  *gid_value,
+		  GFileQueryInfoFlags         flags,
+		  GError                    **error)
+{
+  int res;
+  guint32 val;
+  uid_t uid;
+  gid_t gid;
+  
+  if (uid_value)
+    {
+      if (!get_uint32 (uid_value, &val, error))
+	return FALSE;
+      uid = val;
+    }
+  else
+    uid = -1;
+  
+  if (gid_value)
+    {
+      if (!get_uint32 (gid_value, &val, error))
+	return FALSE;
+      gid = val;
+    }
+  else
+    gid = -1;
+  
+#ifdef HAVE_LCHOWN
+  if (flags & G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS)
+    res = lchown (filename, uid, gid);
+  else
+#endif
+    res = chown (filename, uid, gid);
+  
+  if (res == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting owner: %s"),
+		   g_strerror (errsv));
+	  return FALSE;
+    }
+  return TRUE;
+}
+#endif
+
+#ifdef HAVE_SYMLINK
+static gboolean
+set_symlink (char                       *filename,
+	     const GFileAttributeValue  *value,
+	     GError                    **error)
+{
+  const char *val;
+  struct stat statbuf;
+  
+  if (!get_byte_string (value, &val, error))
+    return FALSE;
+  
+  if (val == NULL)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("symlink must be non-NULL"));
+      return FALSE;
+    }
+  
+  if (g_lstat (filename, &statbuf))
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting symlink: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  if (!S_ISLNK (statbuf.st_mode))
+    {
+      g_set_error_literal (error, G_IO_ERROR,
+                           G_IO_ERROR_NOT_SYMBOLIC_LINK,
+                           _("Error setting symlink: file is not a symlink"));
+      return FALSE;
+    }
+  
+  if (g_unlink (filename))
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting symlink: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  if (symlink (filename, val) != 0)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting symlink: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+#endif
+
+#ifdef HAVE_UTIMES
+static int
+lazy_stat (char        *filename, 
+           struct stat *statbuf, 
+           gboolean    *called_stat)
+{
+  int res;
+
+  if (*called_stat)
+    return 0;
+  
+  res = g_stat (filename, statbuf);
+  
+  if (res == 0)
+    *called_stat = TRUE;
+  
+  return res;
+}
+
+
+static gboolean
+set_mtime_atime (char                       *filename,
+		 const GFileAttributeValue  *mtime_value,
+		 const GFileAttributeValue  *mtime_usec_value,
+		 const GFileAttributeValue  *atime_value,
+		 const GFileAttributeValue  *atime_usec_value,
+		 GError                    **error)
+{
+  int res;
+  guint64 val;
+  guint32 val_usec;
+  struct stat statbuf;
+  gboolean got_stat = FALSE;
+  struct timeval times[2] = { {0, 0}, {0, 0} };
+
+  /* ATIME */
+  if (atime_value)
+    {
+      if (!get_uint64 (atime_value, &val, error))
+	return FALSE;
+      times[0].tv_sec = val;
+    }
+  else
+    {
+      if (lazy_stat (filename, &statbuf, &got_stat) == 0)
+	{
+	  times[0].tv_sec = statbuf.st_mtime;
+#if defined (HAVE_STRUCT_STAT_ST_ATIMENSEC)
+	  times[0].tv_usec = statbuf.st_atimensec / 1000;
+#elif defined (HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC)
+	  times[0].tv_usec = statbuf.st_atim.tv_nsec / 1000;
+#endif
+	}
+    }
+  
+  if (atime_usec_value)
+    {
+      if (!get_uint32 (atime_usec_value, &val_usec, error))
+	return FALSE;
+      times[0].tv_usec = val_usec;
+    }
+
+  /* MTIME */
+  if (mtime_value)
+    {
+      if (!get_uint64 (mtime_value, &val, error))
+	return FALSE;
+      times[1].tv_sec = val;
+    }
+  else
+    {
+      if (lazy_stat (filename, &statbuf, &got_stat) == 0)
+	{
+	  times[1].tv_sec = statbuf.st_mtime;
+#if defined (HAVE_STRUCT_STAT_ST_MTIMENSEC)
+	  times[1].tv_usec = statbuf.st_mtimensec / 1000;
+#elif defined (HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC)
+	  times[1].tv_usec = statbuf.st_mtim.tv_nsec / 1000;
+#endif
+	}
+    }
+  
+  if (mtime_usec_value)
+    {
+      if (!get_uint32 (mtime_usec_value, &val_usec, error))
+	return FALSE;
+      times[1].tv_usec = val_usec;
+    }
+  
+  res = utimes (filename, times);
+  if (res == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error setting owner: %s"),
+		   g_strerror (errsv));
+	  return FALSE;
+    }
+  return TRUE;
+}
+#endif
+
+
+#ifdef HAVE_SELINUX
+static gboolean
+set_selinux_context (char                       *filename,
+		 const GFileAttributeValue  *value,
+		 GError                    **error)
+{
+  const char *val;
+
+  if (!get_string (value, &val, error))
+    return FALSE;
+
+  if (val == NULL)
+  {
+    g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                         _("SELinux context must be non-NULL"));
+    return FALSE;
+  }
+
+  if (is_selinux_enabled ()) {
+	security_context_t val_s;
+	
+	val_s = g_strdup (val);
+	
+	if (setfilecon_raw (filename, val_s) < 0)
+	{
+            int errsv = errno;
+            
+            g_set_error (error, G_IO_ERROR,
+                         g_io_error_from_errno (errsv),
+                	_("Error setting SELinux context: %s"),
+                         g_strerror (errsv));
+            return FALSE;
+        }
+        g_free (val_s);
+  } else {
+    g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                         _("SELinux is not enabled on this system"));
+    return FALSE;
+  }
+                                                     
+  return TRUE;
+}
+#endif 
+
+
+gboolean
+_g_local_file_info_set_attribute (char                 *filename,
+				  const char           *attribute,
+				  GFileAttributeType    type,
+				  gpointer              value_p,
+				  GFileQueryInfoFlags   flags,
+				  GCancellable         *cancellable,
+				  GError              **error)
+{
+  GFileAttributeValue value = { 0 };
+
+  _g_file_attribute_value_set_from_pointer (&value, type, value_p, FALSE);
+  
+  if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_MODE) == 0)
+    return set_unix_mode (filename, &value, error);
+  
+#ifdef HAVE_CHOWN
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_UID) == 0)
+    return set_unix_uid_gid (filename, &value, NULL, flags, error);
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_GID) == 0)
+    return set_unix_uid_gid (filename, NULL, &value, flags, error);
+#endif
+  
+#ifdef HAVE_SYMLINK
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET) == 0)
+    return set_symlink (filename, &value, error);
+#endif
+
+#ifdef HAVE_UTIMES
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_TIME_MODIFIED) == 0)
+    return set_mtime_atime (filename, &value, NULL, NULL, NULL, error);
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC) == 0)
+    return set_mtime_atime (filename, NULL, &value, NULL, NULL, error);
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_TIME_ACCESS) == 0)
+    return set_mtime_atime (filename, NULL, NULL, &value, NULL, error);
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC) == 0)
+    return set_mtime_atime (filename, NULL, NULL, NULL, &value, error);
+#endif
+
+#ifdef HAVE_XATTR
+  else if (g_str_has_prefix (attribute, "xattr::"))
+    return set_xattr (filename, attribute, &value, error);
+  else if (g_str_has_prefix (attribute, "xattr-sys::"))
+    return set_xattr (filename, attribute, &value, error);
+#endif
+
+#ifdef HAVE_SELINUX 
+  else if (strcmp (attribute, G_FILE_ATTRIBUTE_SELINUX_CONTEXT) == 0)
+    return set_selinux_context (filename, &value, error);
+#endif
+  
+  g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+	       _("Setting attribute %s not supported"), attribute);
+  return FALSE;
+}
+
+gboolean
+_g_local_file_info_set_attributes  (char                 *filename,
+				    GFileInfo            *info,
+				    GFileQueryInfoFlags   flags,
+				    GCancellable         *cancellable,
+				    GError              **error)
+{
+  GFileAttributeValue *value;
+#ifdef HAVE_CHOWN
+  GFileAttributeValue *uid, *gid;
+#endif
+#ifdef HAVE_UTIMES
+  GFileAttributeValue *mtime, *mtime_usec, *atime, *atime_usec;
+#endif
+#if defined (HAVE_CHOWN) || defined (HAVE_UTIMES)
+  GFileAttributeStatus status;
+#endif
+  gboolean res;
+  
+  /* Handles setting multiple specified data in a single set, and takes care
+     of ordering restrictions when setting attributes */
+
+  res = TRUE;
+
+  /* Set symlink first, since this recreates the file */
+#ifdef HAVE_SYMLINK
+  value = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET);
+  if (value)
+    {
+      if (!set_symlink (filename, value, error))
+	{
+	  value->status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
+	  res = FALSE;
+	  /* Don't set error multiple times */
+	  error = NULL;
+	}
+      else
+	value->status = G_FILE_ATTRIBUTE_STATUS_SET;
+	
+    }
+#endif
+
+#ifdef HAVE_CHOWN
+  /* Group uid and gid setting into one call
+   * Change ownership before permissions, since ownership changes can
+     change permissions (e.g. setuid)
+   */
+  uid = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_UNIX_UID);
+  gid = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_UNIX_GID);
+  
+  if (uid || gid)
+    {
+      if (!set_unix_uid_gid (filename, uid, gid, flags, error))
+	{
+	  status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
+	  res = FALSE;
+	  /* Don't set error multiple times */
+	  error = NULL;
+	}
+      else
+	status = G_FILE_ATTRIBUTE_STATUS_SET;
+      if (uid)
+	uid->status = status;
+      if (gid)
+	gid->status = status;
+    }
+#endif
+  
+  value = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_UNIX_MODE);
+  if (value)
+    {
+      if (!set_unix_mode (filename, value, error))
+	{
+	  value->status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
+	  res = FALSE;
+	  /* Don't set error multiple times */
+	  error = NULL;
+	}
+      else
+	value->status = G_FILE_ATTRIBUTE_STATUS_SET;
+	
+    }
+
+#ifdef HAVE_UTIMES
+  /* Group all time settings into one call
+   * Change times as the last thing to avoid it changing due to metadata changes
+   */
+  
+  mtime = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+  mtime_usec = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC);
+  atime = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_TIME_ACCESS);
+  atime_usec = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC);
+
+  if (mtime || mtime_usec || atime || atime_usec)
+    {
+      if (!set_mtime_atime (filename, mtime, mtime_usec, atime, atime_usec, error))
+	{
+	  status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
+	  res = FALSE;
+	  /* Don't set error multiple times */
+	  error = NULL;
+	}
+      else
+	status = G_FILE_ATTRIBUTE_STATUS_SET;
+      
+      if (mtime)
+	mtime->status = status;
+      if (mtime_usec)
+	mtime_usec->status = status;
+      if (atime)
+	atime->status = status;
+      if (atime_usec)
+	atime_usec->status = status;
+    }
+#endif
+
+  /* xattrs are handled by default callback */
+
+
+  /*  SELinux context */
+#ifdef HAVE_SELINUX 
+  if (is_selinux_enabled ()) {
+    value = _g_file_info_get_attribute_value (info, G_FILE_ATTRIBUTE_SELINUX_CONTEXT);
+    if (value)
+    {
+      if (!set_selinux_context (filename, value, error))
+        {
+          value->status = G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING;
+          res = FALSE;
+          /* Don't set error multiple times */
+          error = NULL;
+        }
+      else
+        value->status = G_FILE_ATTRIBUTE_STATUS_SET;
+    }
+  }
+#endif
+
+  return res;
+}
diff --git a/gio/glocalfileinfo.h b/gio/glocalfileinfo.h
new file mode 100644
index 0000000..29ccfc0
--- /dev/null
+++ b/gio/glocalfileinfo.h
@@ -0,0 +1,83 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_FILE_INFO_H__
+#define __G_LOCAL_FILE_INFO_H__
+
+#include <gio/gfileinfo.h>
+#include <gio/gfile.h>
+#include <sys/stat.h>
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+G_BEGIN_DECLS
+
+typedef struct
+{
+  gboolean writable;
+  gboolean is_sticky;
+  gboolean has_trash_dir;
+  int      owner;
+  dev_t    device;
+} GLocalParentFileInfo;
+
+#ifdef G_OS_WIN32
+/* We want 64-bit file size support */
+#define GLocalFileStat struct _stati64
+#else
+#define GLocalFileStat struct stat
+#endif
+
+gboolean   _g_local_file_has_trash_dir        (const char             *dirname,
+                                               dev_t                   dir_dev);
+void       _g_local_file_info_get_parent_info (const char             *dir,
+                                               GFileAttributeMatcher  *attribute_matcher,
+                                               GLocalParentFileInfo   *parent_info);
+GFileInfo *_g_local_file_info_get             (const char             *basename,
+                                               const char             *path,
+                                               GFileAttributeMatcher  *attribute_matcher,
+                                               GFileQueryInfoFlags     flags,
+                                               GLocalParentFileInfo   *parent_info,
+                                               GError                **error);
+GFileInfo *_g_local_file_info_get_from_fd     (int                     fd,
+                                               const char             *attributes,
+                                               GError                **error);
+char *     _g_local_file_info_create_etag     (GLocalFileStat         *statbuf);
+gboolean   _g_local_file_info_set_attribute   (char                   *filename,
+                                               const char             *attribute,
+                                               GFileAttributeType      type,
+                                               gpointer                value_p,
+                                               GFileQueryInfoFlags     flags,
+                                               GCancellable           *cancellable,
+                                               GError                **error);
+gboolean   _g_local_file_info_set_attributes  (char                   *filename,
+                                               GFileInfo              *info,
+                                               GFileQueryInfoFlags     flags,
+                                               GCancellable           *cancellable,
+                                               GError                **error);
+
+G_END_DECLS
+
+#endif /* __G_FILE_LOCAL_FILE_INFO_H__ */
+
+
diff --git a/gio/glocalfileinputstream.c b/gio/glocalfileinputstream.c
new file mode 100644
index 0000000..a8d0104
--- /dev/null
+++ b/gio/glocalfileinputstream.c
@@ -0,0 +1,336 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <errno.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include "gcancellable.h"
+#include "gioerror.h"
+#include "glocalfileinputstream.h"
+#include "glocalfileinfo.h"
+#include "glibintl.h"
+
+#ifdef G_OS_WIN32
+#include <io.h>
+#endif
+
+#include "gioalias.h"
+
+#define g_local_file_input_stream_get_type _g_local_file_input_stream_get_type
+G_DEFINE_TYPE (GLocalFileInputStream, g_local_file_input_stream, G_TYPE_FILE_INPUT_STREAM);
+
+struct _GLocalFileInputStreamPrivate {
+  int fd;
+};
+
+static gssize     g_local_file_input_stream_read       (GInputStream      *stream,
+							void              *buffer,
+							gsize              count,
+							GCancellable      *cancellable,
+							GError           **error);
+static gssize     g_local_file_input_stream_skip       (GInputStream      *stream,
+							gsize              count,
+							GCancellable      *cancellable,
+							GError           **error);
+static gboolean   g_local_file_input_stream_close      (GInputStream      *stream,
+							GCancellable      *cancellable,
+							GError           **error);
+static goffset    g_local_file_input_stream_tell       (GFileInputStream  *stream);
+static gboolean   g_local_file_input_stream_can_seek   (GFileInputStream  *stream);
+static gboolean   g_local_file_input_stream_seek       (GFileInputStream  *stream,
+							goffset            offset,
+							GSeekType          type,
+							GCancellable      *cancellable,
+							GError           **error);
+static GFileInfo *g_local_file_input_stream_query_info (GFileInputStream  *stream,
+							const char        *attributes,
+							GCancellable      *cancellable,
+							GError           **error);
+
+static void
+g_local_file_input_stream_finalize (GObject *object)
+{
+  GLocalFileInputStream *file;
+  
+  file = G_LOCAL_FILE_INPUT_STREAM (object);
+
+  G_OBJECT_CLASS (g_local_file_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_local_file_input_stream_class_init (GLocalFileInputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
+  GFileInputStreamClass *file_stream_class = G_FILE_INPUT_STREAM_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GLocalFileInputStreamPrivate));
+  
+  gobject_class->finalize = g_local_file_input_stream_finalize;
+
+  stream_class->read_fn = g_local_file_input_stream_read;
+  stream_class->skip = g_local_file_input_stream_skip;
+  stream_class->close_fn = g_local_file_input_stream_close;
+  file_stream_class->tell = g_local_file_input_stream_tell;
+  file_stream_class->can_seek = g_local_file_input_stream_can_seek;
+  file_stream_class->seek = g_local_file_input_stream_seek;
+  file_stream_class->query_info = g_local_file_input_stream_query_info;
+}
+
+static void
+g_local_file_input_stream_init (GLocalFileInputStream *info)
+{
+  info->priv = G_TYPE_INSTANCE_GET_PRIVATE (info,
+					    G_TYPE_LOCAL_FILE_INPUT_STREAM,
+					    GLocalFileInputStreamPrivate);
+}
+
+/**
+ * g_local_file_input_stream_new:
+ * @fd: File Descriptor.
+ * 
+ * Returns: #GFileInputStream for the given file descriptor.
+ **/
+GFileInputStream *
+_g_local_file_input_stream_new (int fd)
+{
+  GLocalFileInputStream *stream;
+
+  stream = g_object_new (G_TYPE_LOCAL_FILE_INPUT_STREAM, NULL);
+  stream->priv->fd = fd;
+  
+  return G_FILE_INPUT_STREAM (stream);
+}
+
+static gssize
+g_local_file_input_stream_read (GInputStream  *stream,
+				void          *buffer,
+				gsize          count,
+				GCancellable  *cancellable,
+				GError       **error)
+{
+  GLocalFileInputStream *file;
+  gssize res;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+
+  res = -1;
+  while (1)
+    {
+      if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	break;
+      res = read (file->priv->fd, buffer, count);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error reading from file: %s"),
+		       g_strerror (errsv));
+	}
+      
+      break;
+    }
+  
+  return res;
+}
+
+static gssize
+g_local_file_input_stream_skip (GInputStream  *stream,
+				gsize          count,
+				GCancellable  *cancellable,
+				GError       **error)
+{
+  off_t res, start;
+  GLocalFileInputStream *file;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+  
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return -1;
+  
+  start = lseek (file->priv->fd, 0, SEEK_CUR);
+  if (start == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error seeking in file: %s"),
+		   g_strerror (errsv));
+      return -1;
+    }
+  
+  res = lseek (file->priv->fd, count, SEEK_CUR);
+  if (res == -1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error seeking in file: %s"),
+		   g_strerror (errsv));
+      return -1;
+    }
+
+  return res - start;
+}
+
+static gboolean
+g_local_file_input_stream_close (GInputStream  *stream,
+				 GCancellable  *cancellable,
+				 GError       **error)
+{
+  GLocalFileInputStream *file;
+  int res;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+
+  if (file->priv->fd == -1)
+    return TRUE;
+
+  while (1)
+    {
+      res = close (file->priv->fd);
+      if (res == -1)
+        {
+          int errsv = errno;
+
+          g_set_error (error, G_IO_ERROR,
+                       g_io_error_from_errno (errsv),
+                       _("Error closing file: %s"),
+                       g_strerror (errsv));
+        }
+      break;
+    }
+
+  return res != -1;
+}
+
+
+static goffset
+g_local_file_input_stream_tell (GFileInputStream *stream)
+{
+  GLocalFileInputStream *file;
+  off_t pos;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+  
+  pos = lseek (file->priv->fd, 0, SEEK_CUR);
+
+  if (pos == (off_t)-1)
+    return 0;
+  
+  return pos;
+}
+
+static gboolean
+g_local_file_input_stream_can_seek (GFileInputStream *stream)
+{
+  GLocalFileInputStream *file;
+  off_t pos;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+  
+  pos = lseek (file->priv->fd, 0, SEEK_CUR);
+
+  if (pos == (off_t)-1 && errno == ESPIPE)
+    return FALSE;
+  
+  return TRUE;
+}
+
+static int
+seek_type_to_lseek (GSeekType type)
+{
+  switch (type)
+    {
+    default:
+    case G_SEEK_CUR:
+      return SEEK_CUR;
+      
+    case G_SEEK_SET:
+      return SEEK_SET;
+      
+    case G_SEEK_END:
+      return SEEK_END;
+    }
+}
+
+static gboolean
+g_local_file_input_stream_seek (GFileInputStream  *stream,
+				goffset            offset,
+				GSeekType          type,
+				GCancellable      *cancellable,
+				GError           **error)
+{
+  GLocalFileInputStream *file;
+  off_t pos;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+
+  pos = lseek (file->priv->fd, offset, seek_type_to_lseek (type));
+
+  if (pos == (off_t)-1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error seeking in file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static GFileInfo *
+g_local_file_input_stream_query_info (GFileInputStream  *stream,
+				      const char        *attributes,
+				      GCancellable      *cancellable,
+				      GError           **error)
+{
+  GLocalFileInputStream *file;
+
+  file = G_LOCAL_FILE_INPUT_STREAM (stream);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  return _g_local_file_info_get_from_fd (file->priv->fd,
+					 attributes,
+					 error);
+}
diff --git a/gio/glocalfileinputstream.h b/gio/glocalfileinputstream.h
new file mode 100644
index 0000000..29740d6
--- /dev/null
+++ b/gio/glocalfileinputstream.h
@@ -0,0 +1,60 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_FILE_INPUT_STREAM_H__
+#define __G_LOCAL_FILE_INPUT_STREAM_H__
+
+#include <gio/gfileinputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_FILE_INPUT_STREAM         (_g_local_file_input_stream_get_type ())
+#define G_LOCAL_FILE_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_LOCAL_FILE_INPUT_STREAM, GLocalFileInputStream))
+#define G_LOCAL_FILE_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_LOCAL_FILE_INPUT_STREAM, GLocalFileInputStreamClass))
+#define G_IS_LOCAL_FILE_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_LOCAL_FILE_INPUT_STREAM))
+#define G_IS_LOCAL_FILE_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_LOCAL_FILE_INPUT_STREAM))
+#define G_LOCAL_FILE_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_LOCAL_FILE_INPUT_STREAM, GLocalFileInputStreamClass))
+
+typedef struct _GLocalFileInputStream         GLocalFileInputStream;
+typedef struct _GLocalFileInputStreamClass    GLocalFileInputStreamClass;
+typedef struct _GLocalFileInputStreamPrivate  GLocalFileInputStreamPrivate;
+
+struct _GLocalFileInputStream
+{
+  GFileInputStream parent_instance;
+
+  /*< private >*/
+  GLocalFileInputStreamPrivate *priv;
+};
+
+struct _GLocalFileInputStreamClass
+{
+  GFileInputStreamClass parent_class;
+};
+
+GType              _g_local_file_input_stream_get_type (void) G_GNUC_CONST;
+
+GFileInputStream * _g_local_file_input_stream_new      (int fd);
+
+G_END_DECLS
+
+#endif /* __G_LOCAL_FILE_INPUT_STREAM_H__ */
diff --git a/gio/glocalfilemonitor.c b/gio/glocalfilemonitor.c
new file mode 100644
index 0000000..f59ee02
--- /dev/null
+++ b/gio/glocalfilemonitor.c
@@ -0,0 +1,213 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include "glocalfilemonitor.h"
+#include "giomodule-priv.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include <string.h>
+
+#include "gioalias.h"
+
+enum
+{
+  PROP_0,
+  PROP_FILENAME
+};
+
+G_DEFINE_ABSTRACT_TYPE (GLocalFileMonitor, g_local_file_monitor, G_TYPE_FILE_MONITOR)
+
+static void
+g_local_file_monitor_init (GLocalFileMonitor* local_monitor)
+{
+}
+
+static void
+g_local_file_monitor_set_property (GObject      *object,
+                                   guint         property_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  switch (property_id)
+  {
+    case PROP_FILENAME:
+      /* Do nothing */
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+  }
+}
+
+static GObject *
+g_local_file_monitor_constructor (GType                  type,
+                                  guint                  n_construct_properties,
+                                  GObjectConstructParam *construct_properties)
+{
+  GObject *obj;
+  GLocalFileMonitorClass *klass;
+  GObjectClass *parent_class;
+  GLocalFileMonitor *local_monitor;
+  const gchar *filename = NULL;
+  gint i;
+  
+  klass = G_LOCAL_FILE_MONITOR_CLASS (g_type_class_peek (G_TYPE_LOCAL_FILE_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type,
+                                   n_construct_properties,
+                                   construct_properties);
+
+  local_monitor = G_LOCAL_FILE_MONITOR (obj);
+
+  for (i = 0; i < n_construct_properties; i++)
+    {
+      if (strcmp ("filename", g_param_spec_get_name (construct_properties[i].pspec)) == 0)
+        {
+          g_warn_if_fail (G_VALUE_HOLDS_STRING (construct_properties[i].value));
+          filename = g_value_get_string (construct_properties[i].value);
+          break;
+        }
+    }
+
+  g_warn_if_fail (filename != NULL);
+
+  local_monitor->filename = g_strdup (filename);
+  return obj;
+}
+
+static void
+g_local_file_monitor_finalize (GObject *object)
+{
+  GLocalFileMonitor *local_monitor = G_LOCAL_FILE_MONITOR (object);
+  if (local_monitor->filename)
+    {
+      g_free (local_monitor->filename);
+      local_monitor->filename = NULL;
+    }
+
+  G_OBJECT_CLASS (g_local_file_monitor_parent_class)->finalize (object);
+}
+
+static void g_local_file_monitor_class_init (GLocalFileMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property = g_local_file_monitor_set_property;
+  gobject_class->finalize = g_local_file_monitor_finalize;
+  gobject_class->constructor = g_local_file_monitor_constructor;
+
+  g_object_class_install_property (gobject_class, 
+                                   PROP_FILENAME,
+                                   g_param_spec_string ("filename", 
+                                                        P_("File name"), 
+                                                        P_("File name to monitor"),
+                                                        NULL, 
+                                                        G_PARAM_CONSTRUCT_ONLY|
+                                                        G_PARAM_WRITABLE|
+                                                        G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+}
+
+static gpointer
+get_default_local_file_monitor (gpointer data)
+{
+  GLocalFileMonitorClass *chosen_class;
+  GLocalFileMonitorClass **ret = data;
+  GIOExtensionPoint *ep;
+  GList *extensions, *l;
+
+  _g_io_modules_ensure_loaded ();
+
+  ep = g_io_extension_point_lookup (G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME);
+
+  extensions = g_io_extension_point_get_extensions (ep);
+  
+  chosen_class = NULL;
+  for (l = extensions; l != NULL; l = l->next)
+    {
+      GIOExtension *extension = l->data;
+      GLocalFileMonitorClass *klass;
+      
+      klass = G_LOCAL_FILE_MONITOR_CLASS (g_io_extension_ref_class (extension));
+      
+      if (klass->is_supported ())
+	{
+	  chosen_class = klass;
+	  break;
+	}
+      else
+	g_type_class_unref (klass);
+    }
+  
+  if (chosen_class)
+    {
+      *ret = chosen_class;
+      return (gpointer)G_TYPE_FROM_CLASS (chosen_class);
+    }
+  else
+    return (gpointer)G_TYPE_INVALID;
+}
+
+/**
+ * g_local_file_monitor_new:
+ * @pathname: path name to monitor.
+ * @flags: #GFileMonitorFlags.
+ * 
+ * Returns: a new #GFileMonitor for the given @pathname. 
+ **/
+GFileMonitor*
+_g_local_file_monitor_new (const char         *pathname,
+			   GFileMonitorFlags   flags,
+			   GError            **error)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  GTypeClass *type_class;
+  GFileMonitor *monitor;
+  GType type;
+
+  type_class = NULL;
+  g_once (&once_init, get_default_local_file_monitor, &type_class);
+  type = (GType)once_init.retval;
+
+  monitor = NULL;
+  if (type != G_TYPE_INVALID)
+    monitor = G_FILE_MONITOR (g_object_new (type, "filename", pathname, NULL));
+  else
+    g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                         _("Unable to find default local file monitor type"));
+
+  /* This is non-null on first pass here. Unref the class now.
+   * This is to avoid unloading the module and then loading it
+   * again which would happen if we unrefed the class
+   * before creating the monitor.
+   */
+  
+  if (type_class)
+    g_type_class_unref (type_class);
+  
+  return monitor;
+}
+
+#define __G_LOCAL_FILE_MONITOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/glocalfilemonitor.h b/gio/glocalfilemonitor.h
new file mode 100644
index 0000000..7cc6b13
--- /dev/null
+++ b/gio/glocalfilemonitor.h
@@ -0,0 +1,63 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_FILE_MONITOR_H__
+#define __G_LOCAL_FILE_MONITOR_H__
+
+#include <gio/gfilemonitor.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_FILE_MONITOR		(g_local_file_monitor_get_type ())
+#define G_LOCAL_FILE_MONITOR(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_LOCAL_FILE_MONITOR, GLocalFileMonitor))
+#define G_LOCAL_FILE_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_LOCAL_FILE_MONITOR, GLocalFileMonitorClass))
+#define G_IS_LOCAL_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_LOCAL_FILE_MONITOR))
+#define G_IS_LOCAL_FILE_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_LOCAL_FILE_MONITOR))
+
+#define G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME "gio-local-file-monitor"
+
+typedef struct _GLocalFileMonitor      GLocalFileMonitor;
+typedef struct _GLocalFileMonitorClass GLocalFileMonitorClass;
+
+struct _GLocalFileMonitor
+{
+  GFileMonitor parent_instance;
+
+  gchar *filename;
+};
+
+struct _GLocalFileMonitorClass
+{
+  GFileMonitorClass parent_class;
+
+  gboolean (* is_supported) (void);
+};
+
+GType           g_local_file_monitor_get_type (void) G_GNUC_CONST;
+
+GFileMonitor * _g_local_file_monitor_new      (const char         *pathname,
+                                               GFileMonitorFlags   flags,
+                                               GError            **error);
+
+G_END_DECLS
+
+#endif /* __G_LOCAL_FILE_MONITOR_H__ */
diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c
new file mode 100644
index 0000000..354ee32
--- /dev/null
+++ b/gio/glocalfileoutputstream.c
@@ -0,0 +1,1057 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <errno.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include "glibintl.h"
+#include "gioerror.h"
+#include "gcancellable.h"
+#include "glocalfileoutputstream.h"
+#include "glocalfileinfo.h"
+
+#ifdef G_OS_WIN32
+#include <io.h>
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
+#endif
+#ifndef S_ISREG
+#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
+#endif
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#include "gioalias.h"
+
+#define g_local_file_output_stream_get_type _g_local_file_output_stream_get_type
+G_DEFINE_TYPE (GLocalFileOutputStream, g_local_file_output_stream, G_TYPE_FILE_OUTPUT_STREAM);
+
+/* Some of the file replacement code was based on the code from gedit,
+ * relicenced to LGPL with permissions from the authors.
+ */
+
+#define BACKUP_EXTENSION "~"
+
+struct _GLocalFileOutputStreamPrivate {
+  char *tmp_filename;
+  char *original_filename;
+  char *backup_filename;
+  char *etag;
+  gboolean sync_on_close;
+  int fd;
+};
+
+static gssize     g_local_file_output_stream_write        (GOutputStream      *stream,
+							   const void         *buffer,
+							   gsize               count,
+							   GCancellable       *cancellable,
+							   GError            **error);
+static gboolean   g_local_file_output_stream_close        (GOutputStream      *stream,
+							   GCancellable       *cancellable,
+							   GError            **error);
+static GFileInfo *g_local_file_output_stream_query_info   (GFileOutputStream  *stream,
+							   const char         *attributes,
+							   GCancellable       *cancellable,
+							   GError            **error);
+static char *     g_local_file_output_stream_get_etag     (GFileOutputStream  *stream);
+static goffset    g_local_file_output_stream_tell         (GFileOutputStream  *stream);
+static gboolean   g_local_file_output_stream_can_seek     (GFileOutputStream  *stream);
+static gboolean   g_local_file_output_stream_seek         (GFileOutputStream  *stream,
+							   goffset             offset,
+							   GSeekType           type,
+							   GCancellable       *cancellable,
+							   GError            **error);
+static gboolean   g_local_file_output_stream_can_truncate (GFileOutputStream  *stream);
+static gboolean   g_local_file_output_stream_truncate     (GFileOutputStream  *stream,
+							   goffset             size,
+							   GCancellable       *cancellable,
+							   GError            **error);
+
+static void
+g_local_file_output_stream_finalize (GObject *object)
+{
+  GLocalFileOutputStream *file;
+  
+  file = G_LOCAL_FILE_OUTPUT_STREAM (object);
+  
+  g_free (file->priv->tmp_filename);
+  g_free (file->priv->original_filename);
+  g_free (file->priv->backup_filename);
+  g_free (file->priv->etag);
+
+  G_OBJECT_CLASS (g_local_file_output_stream_parent_class)->finalize (object);
+}
+
+static void
+g_local_file_output_stream_class_init (GLocalFileOutputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
+  GFileOutputStreamClass *file_stream_class = G_FILE_OUTPUT_STREAM_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GLocalFileOutputStreamPrivate));
+  
+  gobject_class->finalize = g_local_file_output_stream_finalize;
+
+  stream_class->write_fn = g_local_file_output_stream_write;
+  stream_class->close_fn = g_local_file_output_stream_close;
+  file_stream_class->query_info = g_local_file_output_stream_query_info;
+  file_stream_class->get_etag = g_local_file_output_stream_get_etag;
+  file_stream_class->tell = g_local_file_output_stream_tell;
+  file_stream_class->can_seek = g_local_file_output_stream_can_seek;
+  file_stream_class->seek = g_local_file_output_stream_seek;
+  file_stream_class->can_truncate = g_local_file_output_stream_can_truncate;
+  file_stream_class->truncate_fn = g_local_file_output_stream_truncate;
+}
+
+static void
+g_local_file_output_stream_init (GLocalFileOutputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+					      G_TYPE_LOCAL_FILE_OUTPUT_STREAM,
+					      GLocalFileOutputStreamPrivate);
+}
+
+static gssize
+g_local_file_output_stream_write (GOutputStream  *stream,
+				  const void     *buffer,
+				  gsize           count,
+				  GCancellable   *cancellable,
+				  GError        **error)
+{
+  GLocalFileOutputStream *file;
+  gssize res;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+
+  while (1)
+    {
+      if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	return -1;
+      res = write (file->priv->fd, buffer, count);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error writing to file: %s"),
+		       g_strerror (errsv));
+	}
+      
+      break;
+    }
+  
+  return res;
+}
+
+static gboolean
+g_local_file_output_stream_close (GOutputStream  *stream,
+				  GCancellable   *cancellable,
+				  GError        **error)
+{
+  GLocalFileOutputStream *file;
+  GLocalFileStat final_stat;
+  int res;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+
+#ifdef HAVE_FSYNC
+  if (file->priv->sync_on_close &&
+      fsync (file->priv->fd) != 0)
+    {
+      int errsv = errno;
+      
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errno),
+		   _("Error writing to file: %s"),
+		   g_strerror (errsv));
+      goto err_out;
+    }
+#endif
+ 
+#ifdef G_OS_WIN32
+
+  /* Must close before renaming on Windows, so just do the close first
+   * in all cases for now.
+   */
+  if (_fstati64 (file->priv->fd, &final_stat) == 0)
+    file->priv->etag = _g_local_file_info_create_etag (&final_stat);
+
+  res = close (file->priv->fd);
+  if (res == -1)
+    {
+      int errsv = errno;
+      
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error closing file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+
+#endif
+
+  if (file->priv->tmp_filename)
+    {
+      /* We need to move the temp file to its final place,
+       * and possibly create the backup file
+       */
+
+      if (file->priv->backup_filename)
+	{
+	  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	    goto err_out;
+	  
+#ifdef HAVE_LINK
+	  /* create original -> backup link, the original is then renamed over */
+	  if (g_unlink (file->priv->backup_filename) != 0 &&
+	      errno != ENOENT)
+	    {
+              int errsv = errno;
+
+	      g_set_error (error, G_IO_ERROR,
+			   G_IO_ERROR_CANT_CREATE_BACKUP,
+			   _("Error removing old backup link: %s"),
+			   g_strerror (errsv));
+	      goto err_out;
+	    }
+
+	  if (link (file->priv->original_filename, file->priv->backup_filename) != 0)
+	    {
+	      /*  link failed or is not supported, try rename  */
+	      if (g_rename (file->priv->original_filename, file->priv->backup_filename) != 0)
+		{
+                  int errsv = errno;
+
+	    	  g_set_error (error, G_IO_ERROR,
+		    	       G_IO_ERROR_CANT_CREATE_BACKUP,
+			       _("Error creating backup copy: %s"),
+			       g_strerror (errsv));
+	          goto err_out;
+		}
+	    }
+#else
+	    /* If link not supported, just rename... */
+	  if (g_rename (file->priv->original_filename, file->priv->backup_filename) != 0)
+	    {
+              int errsv = errno;
+
+	      g_set_error (error, G_IO_ERROR,
+			   G_IO_ERROR_CANT_CREATE_BACKUP,
+			   _("Error creating backup copy: %s"),
+			   g_strerror (errsv));
+	      goto err_out;
+	    }
+#endif
+	}
+      
+
+      if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	goto err_out;
+
+      /* tmp -> original */
+      if (g_rename (file->priv->tmp_filename, file->priv->original_filename) != 0)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error renaming temporary file: %s"),
+		       g_strerror (errsv));
+	  goto err_out;
+	}
+    }
+  
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    goto err_out;
+      
+#ifndef G_OS_WIN32		/* Already did the fstat() and close() above on Win32 */
+
+  if (fstat (file->priv->fd, &final_stat) == 0)
+    file->priv->etag = _g_local_file_info_create_etag (&final_stat);
+
+  while (1)
+    {
+      res = close (file->priv->fd);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error closing file: %s"),
+		       g_strerror (errsv));
+	}
+      break;
+    }
+  
+  return res != -1;
+
+#else
+
+  return TRUE;
+
+#endif
+
+ err_out:
+
+#ifndef G_OS_WIN32
+  /* A simple try to close the fd in case we fail before the actual close */
+  close (file->priv->fd);
+#endif
+  return FALSE;
+}
+
+static char *
+g_local_file_output_stream_get_etag (GFileOutputStream *stream)
+{
+  GLocalFileOutputStream *file;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+  
+  return g_strdup (file->priv->etag);
+}
+
+static goffset
+g_local_file_output_stream_tell (GFileOutputStream *stream)
+{
+  GLocalFileOutputStream *file;
+  off_t pos;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+  
+  pos = lseek (file->priv->fd, 0, SEEK_CUR);
+
+  if (pos == (off_t)-1)
+    return 0;
+  
+  return pos;
+}
+
+static gboolean
+g_local_file_output_stream_can_seek (GFileOutputStream *stream)
+{
+  GLocalFileOutputStream *file;
+  off_t pos;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+  
+  pos = lseek (file->priv->fd, 0, SEEK_CUR);
+
+  if (pos == (off_t)-1 && errno == ESPIPE)
+    return FALSE;
+  
+  return TRUE;
+}
+
+static int
+seek_type_to_lseek (GSeekType type)
+{
+  switch (type)
+    {
+    default:
+    case G_SEEK_CUR:
+      return SEEK_CUR;
+      
+    case G_SEEK_SET:
+      return SEEK_SET;
+      
+    case G_SEEK_END:
+      return SEEK_END;
+    }
+}
+
+static gboolean
+g_local_file_output_stream_seek (GFileOutputStream  *stream,
+				 goffset             offset,
+				 GSeekType           type,
+				 GCancellable       *cancellable,
+				 GError            **error)
+{
+  GLocalFileOutputStream *file;
+  off_t pos;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+
+  pos = lseek (file->priv->fd, offset, seek_type_to_lseek (type));
+
+  if (pos == (off_t)-1)
+    {
+      int errsv = errno;
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error seeking in file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static gboolean
+g_local_file_output_stream_can_truncate (GFileOutputStream *stream)
+{
+  /* We can't truncate pipes and stuff where we can't seek */
+  return g_local_file_output_stream_can_seek (stream);
+}
+
+static gboolean
+g_local_file_output_stream_truncate (GFileOutputStream  *stream,
+				     goffset             size,
+				     GCancellable       *cancellable,
+				     GError            **error)
+{
+  GLocalFileOutputStream *file;
+  int res;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+
+ restart:
+#ifdef G_OS_WIN32
+  res = g_win32_ftruncate (file->priv->fd, size);
+#else
+  res = ftruncate (file->priv->fd, size);
+#endif
+  
+  if (res == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EINTR)
+	{
+	  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	    return FALSE;
+	  goto restart;
+	}
+
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error truncating file: %s"),
+		   g_strerror (errsv));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+
+static GFileInfo *
+g_local_file_output_stream_query_info (GFileOutputStream  *stream,
+				       const char         *attributes,
+				       GCancellable       *cancellable,
+				       GError            **error)
+{
+  GLocalFileOutputStream *file;
+
+  file = G_LOCAL_FILE_OUTPUT_STREAM (stream);
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+  
+  return _g_local_file_info_get_from_fd (file->priv->fd,
+					 attributes,
+					 error);
+}
+
+GFileOutputStream *
+_g_local_file_output_stream_create  (const char        *filename,
+				     GFileCreateFlags   flags,
+				     GCancellable      *cancellable,
+				     GError           **error)
+{
+  GLocalFileOutputStream *stream;
+  int mode;
+  int fd;
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  if (flags & G_FILE_CREATE_PRIVATE)
+    mode = 0600;
+  else
+    mode = 0666;
+  
+  fd = g_open (filename, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, mode);
+  if (fd == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EINVAL)
+	/* This must be an invalid filename, on e.g. FAT */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	{
+	  char *display_name = g_filename_display_name (filename);
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error opening file '%s': %s"),
+		       display_name, g_strerror (errsv));
+	  g_free (display_name);
+	}
+      return NULL;
+    }
+  
+  stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL);
+  stream->priv->fd = fd;
+  return G_FILE_OUTPUT_STREAM (stream);
+}
+
+GFileOutputStream *
+_g_local_file_output_stream_append  (const char        *filename,
+				     GFileCreateFlags   flags,
+				     GCancellable      *cancellable,
+				     GError           **error)
+{
+  GLocalFileOutputStream *stream;
+  int mode;
+  int fd;
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  if (flags & G_FILE_CREATE_PRIVATE)
+    mode = 0600;
+  else
+    mode = 0666;
+
+  fd = g_open (filename, O_CREAT | O_APPEND | O_WRONLY | O_BINARY, mode);
+  if (fd == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EINVAL)
+	/* This must be an invalid filename, on e.g. FAT */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	{
+	  char *display_name = g_filename_display_name (filename);
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error opening file '%s': %s"),
+		       display_name, g_strerror (errsv));
+	  g_free (display_name);
+	}
+      return NULL;
+    }
+  
+  stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL);
+  stream->priv->fd = fd;
+  
+  return G_FILE_OUTPUT_STREAM (stream);
+}
+
+static char *
+create_backup_filename (const char *filename)
+{
+  return g_strconcat (filename, BACKUP_EXTENSION, NULL);
+}
+
+#define BUFSIZE	8192 /* size of normal write buffer */
+
+static gboolean
+copy_file_data (gint     sfd,
+		gint     dfd,
+		GError **error)
+{
+  gboolean ret = TRUE;
+  gpointer buffer;
+  const gchar *write_buffer;
+  gssize bytes_read;
+  gssize bytes_to_write;
+  gssize bytes_written;
+  
+  buffer = g_malloc (BUFSIZE);
+  
+  do
+    {
+      bytes_read = read (sfd, buffer, BUFSIZE);
+      if (bytes_read == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error reading from file: %s"),
+		       g_strerror (errsv));
+	  ret = FALSE;
+	  break;
+	}
+      
+      bytes_to_write = bytes_read;
+      write_buffer = buffer;
+      
+      do
+	{
+	  bytes_written = write (dfd, write_buffer, bytes_to_write);
+	  if (bytes_written == -1)
+	    {
+              int errsv = errno;
+
+	      if (errsv == EINTR)
+		continue;
+	      
+	      g_set_error (error, G_IO_ERROR,
+			   g_io_error_from_errno (errsv),
+			   _("Error writing to file: %s"),
+			   g_strerror (errsv));
+	      ret = FALSE;
+	      break;
+	    }
+	  
+	  bytes_to_write -= bytes_written;
+	  write_buffer += bytes_written;
+	}
+      while (bytes_to_write > 0);
+      
+    } while ((bytes_read != 0) && (ret == TRUE));
+
+  g_free (buffer);
+  
+  return ret;
+}
+
+static int
+handle_overwrite_open (const char    *filename,
+		       const char    *etag,
+		       gboolean       create_backup,
+		       char         **temp_filename,
+		       GFileCreateFlags flags,
+		       GCancellable  *cancellable,
+		       GError       **error)
+{
+  int fd = -1;
+  GLocalFileStat original_stat;
+  char *current_etag;
+  gboolean is_symlink;
+  int open_flags;
+  int res;
+  int mode;
+
+  if (flags & G_FILE_CREATE_PRIVATE)
+    mode = 0600;
+  else
+    mode = 0666;
+
+  /* We only need read access to the original file if we are creating a backup.
+   * We also add O_CREATE to avoid a race if the file was just removed */
+  if (create_backup)
+    open_flags = O_RDWR | O_CREAT | O_BINARY;
+  else
+    open_flags = O_WRONLY | O_CREAT | O_BINARY;
+  
+  /* Some systems have O_NOFOLLOW, which lets us avoid some races
+   * when finding out if the file we opened was a symlink */
+#ifdef O_NOFOLLOW
+  is_symlink = FALSE;
+  fd = g_open (filename, open_flags | O_NOFOLLOW, mode);
+  if (fd == -1 && errno == ELOOP)
+    {
+      /* Could be a symlink, or it could be a regular ELOOP error,
+       * but then the next open will fail too. */
+      is_symlink = TRUE;
+      fd = g_open (filename, open_flags, mode);
+    }
+#else
+  fd = g_open (filename, open_flags, mode);
+  /* This is racy, but we do it as soon as possible to minimize the race */
+  is_symlink = g_file_test (filename, G_FILE_TEST_IS_SYMLINK);
+#endif
+    
+  if (fd == -1)
+    {
+      int errsv = errno;
+      char *display_name = g_filename_display_name (filename);
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error opening file '%s': %s"),
+		   display_name, g_strerror (errsv));
+      g_free (display_name);
+      return -1;
+    }
+  
+#ifdef G_OS_WIN32
+  res = _fstati64 (fd, &original_stat);
+#else
+  res = fstat (fd, &original_stat);
+#endif
+
+  if (res != 0) 
+    {
+      int errsv = errno;
+      char *display_name = g_filename_display_name (filename);
+      g_set_error (error, G_IO_ERROR,
+		   g_io_error_from_errno (errsv),
+		   _("Error stating file '%s': %s"),
+		   display_name, g_strerror (errsv));
+      g_free (display_name);
+      goto err_out;
+    }
+  
+  /* not a regular file */
+  if (!S_ISREG (original_stat.st_mode))
+    {
+      if (S_ISDIR (original_stat.st_mode))
+	g_set_error_literal (error,
+                             G_IO_ERROR,
+                             G_IO_ERROR_IS_DIRECTORY,
+                             _("Target file is a directory"));
+      else
+	g_set_error_literal (error,
+                             G_IO_ERROR,
+                             G_IO_ERROR_NOT_REGULAR_FILE,
+                             _("Target file is not a regular file"));
+      goto err_out;
+    }
+  
+  if (etag != NULL)
+    {
+      current_etag = _g_local_file_info_create_etag (&original_stat);
+      if (strcmp (etag, current_etag) != 0)
+	{
+	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_WRONG_ETAG,
+                               _("The file was externally modified"));
+	  g_free (current_etag);
+	  goto err_out;
+	}
+      g_free (current_etag);
+    }
+
+  /* We use two backup strategies.
+   * The first one (which is faster) consist in saving to a
+   * tmp file then rename the original file to the backup and the
+   * tmp file to the original name. This is fast but doesn't work
+   * when the file is a link (hard or symbolic) or when we can't
+   * write to the current dir or can't set the permissions on the
+   * new file. 
+   * The second strategy consist simply in copying the old file
+   * to a backup file and rewrite the contents of the file.
+   */
+  
+  if ((flags & G_FILE_CREATE_REPLACE_DESTINATION) ||
+      (!(original_stat.st_nlink > 1) && !is_symlink))
+    {
+      char *dirname, *tmp_filename;
+      int tmpfd;
+      
+      dirname = g_path_get_dirname (filename);
+      tmp_filename = g_build_filename (dirname, ".goutputstream-XXXXXX", NULL);
+      g_free (dirname);
+
+      tmpfd = g_mkstemp (tmp_filename);
+      if (tmpfd == -1)
+	{
+	  g_free (tmp_filename);
+	  goto fallback_strategy;
+	}
+      
+      /* try to keep permissions (unless replacing) */
+
+      if ( ! (flags & G_FILE_CREATE_REPLACE_DESTINATION) &&
+	   (
+#ifdef HAVE_FCHOWN
+	    fchown (tmpfd, original_stat.st_uid, original_stat.st_gid) == -1 ||
+#endif
+#ifdef HAVE_FCHMOD
+	    fchmod (tmpfd, original_stat.st_mode) == -1 ||
+#endif
+	    0
+	    )
+	  )
+	{
+	  struct stat tmp_statbuf;
+	  
+	  /* Check that we really needed to change something */
+	  if (fstat (tmpfd, &tmp_statbuf) != 0 ||
+	      original_stat.st_uid != tmp_statbuf.st_uid ||
+	      original_stat.st_gid != tmp_statbuf.st_gid ||
+	      original_stat.st_mode != tmp_statbuf.st_mode)
+	    {
+	      close (tmpfd);
+	      g_unlink (tmp_filename);
+	      g_free (tmp_filename);
+	      goto fallback_strategy;
+	    }
+	}
+
+      close (fd);
+      *temp_filename = tmp_filename;
+      return tmpfd;
+    }
+
+ fallback_strategy:
+
+  if (create_backup)
+    {
+#if defined(HAVE_FCHOWN) && defined(HAVE_FCHMOD)
+      struct stat tmp_statbuf;      
+#endif
+      char *backup_filename;
+      int bfd;
+      
+      backup_filename = create_backup_filename (filename);
+
+      if (g_unlink (backup_filename) == -1 && errno != ENOENT)
+	{
+	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_CANT_CREATE_BACKUP,
+                               _("Backup file creation failed"));
+	  g_free (backup_filename);
+	  goto err_out;
+	}
+
+      bfd = g_open (backup_filename,
+		    O_WRONLY | O_CREAT | O_EXCL | O_BINARY,
+		    original_stat.st_mode & 0777);
+
+      if (bfd == -1)
+	{
+	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_CANT_CREATE_BACKUP,
+                               _("Backup file creation failed"));
+	  g_free (backup_filename);
+	  goto err_out;
+	}
+
+      /* If needed, Try to set the group of the backup same as the
+       * original file. If this fails, set the protection
+       * bits for the group same as the protection bits for
+       * others. */
+#if defined(HAVE_FCHOWN) && defined(HAVE_FCHMOD)
+      if (fstat (bfd, &tmp_statbuf) != 0)
+	{
+	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_CANT_CREATE_BACKUP,
+                               _("Backup file creation failed"));
+	  g_unlink (backup_filename);
+	  g_free (backup_filename);
+	  goto err_out;
+	}
+      
+      if ((original_stat.st_gid != tmp_statbuf.st_gid)  &&
+	  fchown (bfd, (uid_t) -1, original_stat.st_gid) != 0)
+	{
+	  if (fchmod (bfd,
+		      (original_stat.st_mode & 0707) |
+		      ((original_stat.st_mode & 07) << 3)) != 0)
+	    {
+	      g_set_error_literal (error,
+                                   G_IO_ERROR,
+                                   G_IO_ERROR_CANT_CREATE_BACKUP,
+                                   _("Backup file creation failed"));
+	      g_unlink (backup_filename);
+	      close (bfd);
+	      g_free (backup_filename);
+	      goto err_out;
+	    }
+	}
+#endif
+
+      if (!copy_file_data (fd, bfd, NULL))
+	{
+	  g_set_error_literal (error,
+                               G_IO_ERROR,
+                               G_IO_ERROR_CANT_CREATE_BACKUP,
+                               _("Backup file creation failed"));
+	  g_unlink (backup_filename);
+	  close (bfd);
+	  g_free (backup_filename);
+	  
+	  goto err_out;
+	}
+      
+      close (bfd);
+      g_free (backup_filename);
+
+      /* Seek back to the start of the file after the backup copy */
+      if (lseek (fd, 0, SEEK_SET) == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error seeking in file: %s"),
+		       g_strerror (errsv));
+	  goto err_out;
+	}
+    }
+
+  if (flags & G_FILE_CREATE_REPLACE_DESTINATION)
+    {
+      close (fd);
+      
+      if (g_unlink (filename) != 0)
+	{
+	  int errsv = errno;
+	  
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error removing old file: %s"),
+		       g_strerror (errsv));
+	  goto err_out2;
+	}
+      
+      fd = g_open (filename, O_WRONLY | O_CREAT | O_BINARY, mode);
+      if (fd == -1)
+	{
+	  int errsv = errno;
+	  char *display_name = g_filename_display_name (filename);
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error opening file '%s': %s"),
+		       display_name, g_strerror (errsv));
+	  g_free (display_name);
+	  goto err_out2;
+	}
+    }
+  else
+    {
+      /* Truncate the file at the start */
+#ifdef G_OS_WIN32
+      if (g_win32_ftruncate (fd, 0) == -1)
+#else
+	if (ftruncate (fd, 0) == -1)
+#endif
+	  {
+	    int errsv = errno;
+	    
+	    g_set_error (error, G_IO_ERROR,
+			 g_io_error_from_errno (errsv),
+			 _("Error truncating file: %s"),
+			 g_strerror (errsv));
+	    goto err_out;
+	  }
+    }
+    
+  return fd;
+
+ err_out:
+  close (fd);
+ err_out2:
+  return -1;
+}
+
+GFileOutputStream *
+_g_local_file_output_stream_replace (const char        *filename,
+				     const char        *etag,
+				     gboolean           create_backup,
+				     GFileCreateFlags   flags,
+				     GCancellable      *cancellable,
+				     GError           **error)
+{
+  GLocalFileOutputStream *stream;
+  int mode;
+  int fd;
+  char *temp_file;
+  gboolean sync_on_close;
+
+  if (g_cancellable_set_error_if_cancelled (cancellable, error))
+    return NULL;
+
+  temp_file = NULL;
+
+  if (flags & G_FILE_CREATE_PRIVATE)
+    mode = 0600;
+  else
+    mode = 0666;
+  sync_on_close = FALSE;
+
+  /* If the file doesn't exist, create it */
+  fd = g_open (filename, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, mode);
+
+  if (fd == -1 && errno == EEXIST)
+    {
+      /* The file already exists */
+      fd = handle_overwrite_open (filename, etag, create_backup, &temp_file,
+				  flags, cancellable, error);
+      if (fd == -1)
+	return NULL;
+
+      /* If the final destination exists, we want to sync the newly written
+       * file to ensure the data is on disk when we rename over the destination.
+       * otherwise if we get a system crash we can lose both the new and the
+       * old file on some filesystems. (I.E. those that don't guarantee the
+       * data is written to the disk before the metadata.)
+       */
+      sync_on_close = TRUE;
+    }
+  else if (fd == -1)
+    {
+      int errsv = errno;
+
+      if (errsv == EINVAL)
+	/* This must be an invalid filename, on e.g. FAT */
+	g_set_error_literal (error, G_IO_ERROR,
+                             G_IO_ERROR_INVALID_FILENAME,
+                             _("Invalid filename"));
+      else
+	{
+	  char *display_name = g_filename_display_name (filename);
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error opening file '%s': %s"),
+		       display_name, g_strerror (errsv));
+	  g_free (display_name);
+	}
+      return NULL;
+    }
+  
+ 
+  stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL);
+  stream->priv->fd = fd;
+  stream->priv->sync_on_close = sync_on_close;
+  stream->priv->tmp_filename = temp_file;
+  if (create_backup)
+    stream->priv->backup_filename = create_backup_filename (filename);
+  stream->priv->original_filename =  g_strdup (filename);
+  
+  return G_FILE_OUTPUT_STREAM (stream);
+}
diff --git a/gio/glocalfileoutputstream.h b/gio/glocalfileoutputstream.h
new file mode 100644
index 0000000..3606f65
--- /dev/null
+++ b/gio/glocalfileoutputstream.h
@@ -0,0 +1,72 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_FILE_OUTPUT_STREAM_H__
+#define __G_LOCAL_FILE_OUTPUT_STREAM_H__
+
+#include <gio/gfileoutputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_FILE_OUTPUT_STREAM         (_g_local_file_output_stream_get_type ())
+#define G_LOCAL_FILE_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_LOCAL_FILE_OUTPUT_STREAM, GLocalFileOutputStream))
+#define G_LOCAL_FILE_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_LOCAL_FILE_OUTPUT_STREAM, GLocalFileOutputStreamClass))
+#define G_IS_LOCAL_FILE_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_LOCAL_FILE_OUTPUT_STREAM))
+#define G_IS_LOCAL_FILE_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_LOCAL_FILE_OUTPUT_STREAM))
+#define G_LOCAL_FILE_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_LOCAL_FILE_OUTPUT_STREAM, GLocalFileOutputStreamClass))
+
+typedef struct _GLocalFileOutputStream         GLocalFileOutputStream;
+typedef struct _GLocalFileOutputStreamClass    GLocalFileOutputStreamClass;
+typedef struct _GLocalFileOutputStreamPrivate  GLocalFileOutputStreamPrivate;
+
+struct _GLocalFileOutputStream
+{
+  GFileOutputStream parent_instance;
+
+  /*< private >*/
+  GLocalFileOutputStreamPrivate *priv;
+};
+
+struct _GLocalFileOutputStreamClass
+{
+  GFileOutputStreamClass parent_class;
+};
+
+GType               _g_local_file_output_stream_get_type (void) G_GNUC_CONST;
+GFileOutputStream * _g_local_file_output_stream_create   (const char       *filename,
+                                                          GFileCreateFlags  flags,
+                                                          GCancellable     *cancellable,
+                                                          GError          **error);
+GFileOutputStream * _g_local_file_output_stream_append   (const char       *filename,
+                                                          GFileCreateFlags  flags,
+                                                          GCancellable     *cancellable,
+                                                          GError          **error);
+GFileOutputStream * _g_local_file_output_stream_replace  (const char       *filename,
+                                                          const char       *etag,
+                                                          gboolean          create_backup,
+                                                          GFileCreateFlags  flags,
+                                                          GCancellable     *cancellable,
+                                                          GError          **error);
+
+G_END_DECLS
+
+#endif /* __G_LOCAL_FILE_OUTPUT_STREAM_H__ */
diff --git a/gio/glocalvfs.c b/gio/glocalvfs.c
new file mode 100644
index 0000000..cd535e3
--- /dev/null
+++ b/gio/glocalvfs.c
@@ -0,0 +1,219 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "glocalvfs.h"
+#include "glocalfile.h"
+#include "giomodule.h"
+#include "giomodule-priv.h"
+#include "gvfs.h"
+#include <gio/gdummyfile.h>
+#include <sys/types.h>
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+#include <string.h>
+
+#include "gioalias.h"
+
+struct _GLocalVfs
+{
+  GVfs parent;
+};
+
+struct _GLocalVfsClass
+{
+  GVfsClass parent_class;
+  
+};
+
+#define g_local_vfs_get_type _g_local_vfs_get_type
+G_DEFINE_TYPE_WITH_CODE (GLocalVfs, g_local_vfs, G_TYPE_VFS,
+			 _g_io_modules_ensure_extension_points_registered ();
+			 g_io_extension_point_implement (G_VFS_EXTENSION_POINT_NAME,
+							 g_define_type_id,
+							 "local",
+							 0))
+static void
+g_local_vfs_finalize (GObject *object)
+{
+  /* must chain up */
+  G_OBJECT_CLASS (g_local_vfs_parent_class)->finalize (object);
+}
+
+static void
+g_local_vfs_init (GLocalVfs *vfs)
+{
+}
+
+/**
+ * g_local_vfs_new:
+ *
+ * Returns a new #GVfs handle for a local vfs.
+ *
+ * Returns: a new #GVfs handle.
+ **/
+GVfs *
+_g_local_vfs_new (void)
+{
+  return g_object_new (G_TYPE_LOCAL_VFS, NULL);
+}
+
+static GFile *
+g_local_vfs_get_file_for_path (GVfs       *vfs,
+                               const char *path)
+{
+  return _g_local_file_new (path);
+}
+
+static GFile *
+g_local_vfs_get_file_for_uri (GVfs       *vfs,
+                              const char *uri)
+{
+  char *path;
+  GFile *file;
+  char *stripped_uri, *hash;
+  
+  if (strchr (uri, '#') != NULL)
+    {
+      stripped_uri = g_strdup (uri);
+      hash = strchr (stripped_uri, '#');
+      *hash = 0;
+    }
+  else
+    stripped_uri = (char *)uri;
+      
+  path = g_filename_from_uri (stripped_uri, NULL, NULL);
+
+  if (stripped_uri != uri)
+    g_free (stripped_uri);
+  
+  if (path != NULL)
+    file = _g_local_file_new (path);
+  else
+    file = _g_dummy_file_new (uri);
+
+  g_free (path);
+
+  return file;
+}
+
+static const gchar * const *
+g_local_vfs_get_supported_uri_schemes (GVfs *vfs)
+{
+  static const gchar * uri_schemes[] = { "file", NULL };
+
+  return uri_schemes;
+}
+
+static GFile *
+g_local_vfs_parse_name (GVfs       *vfs,
+                        const char *parse_name)
+{
+  GFile *file;
+  char *filename;
+  char *user_prefix;
+  const char *user_start, *user_end;
+  char *rest;
+  
+  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
+  g_return_val_if_fail (parse_name != NULL, NULL);
+
+  if (g_ascii_strncasecmp ("file:", parse_name, 5) == 0)
+    filename = g_filename_from_uri (parse_name, NULL, NULL);
+  else
+    {
+      if (*parse_name == '~')
+	{
+	  parse_name ++;
+	  user_start = parse_name;
+	  
+	  while (*parse_name != 0 && *parse_name != '/')
+	    parse_name++;
+	  
+	  user_end = parse_name;
+
+	  if (user_end == user_start)
+	    user_prefix = g_strdup (g_get_home_dir ());
+	  else
+	    {
+#ifdef HAVE_PWD_H
+              struct passwd *passwd_file_entry;
+              char *user_name;
+
+	      user_name = g_strndup (user_start, user_end - user_start);
+	      passwd_file_entry = getpwnam (user_name);
+	      g_free (user_name);
+	      
+	      if (passwd_file_entry != NULL &&
+		  passwd_file_entry->pw_dir != NULL)
+		user_prefix = g_strdup (passwd_file_entry->pw_dir);
+	      else
+#endif
+		user_prefix = g_strdup (g_get_home_dir ());
+	    }
+
+	  rest = NULL;
+	  if (*user_end != 0)
+	    rest = g_filename_from_utf8 (user_end, -1, NULL, NULL, NULL);
+	  
+	  filename = g_build_filename (user_prefix, rest, NULL);
+	  g_free (rest);
+	  g_free (user_prefix);
+	}
+      else
+	filename = g_filename_from_utf8 (parse_name, -1, NULL, NULL, NULL);
+    }
+  
+  if (filename == NULL)
+    filename = g_strdup (parse_name);
+    
+  file = _g_local_file_new (filename);
+  g_free (filename);
+
+  return file;
+}
+
+static gboolean
+g_local_vfs_is_active (GVfs *vfs)
+{
+  return TRUE;
+}
+
+static void
+g_local_vfs_class_init (GLocalVfsClass *class)
+{
+  GObjectClass *object_class;
+  GVfsClass *vfs_class;
+  
+  object_class = (GObjectClass *) class;
+
+  object_class->finalize = g_local_vfs_finalize;
+
+  vfs_class = G_VFS_CLASS (class);
+
+  vfs_class->is_active = g_local_vfs_is_active;
+  vfs_class->get_file_for_path = g_local_vfs_get_file_for_path;
+  vfs_class->get_file_for_uri = g_local_vfs_get_file_for_uri;
+  vfs_class->get_supported_uri_schemes = g_local_vfs_get_supported_uri_schemes;
+  vfs_class->parse_name = g_local_vfs_parse_name;
+}
diff --git a/gio/glocalvfs.h b/gio/glocalvfs.h
new file mode 100644
index 0000000..5d9de2f
--- /dev/null
+++ b/gio/glocalvfs.h
@@ -0,0 +1,46 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_LOCAL_VFS_H__
+#define __G_LOCAL_VFS_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_LOCAL_VFS            (_g_local_vfs_get_type ())
+#define G_LOCAL_VFS(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_LOCAL_VFS, GLocalVfs))
+#define G_LOCAL_VFS_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_LOCAL_VFS, GLocalVfsClass))
+#define G_IS_LOCAL_VFS(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_LOCAL_VFS))
+#define G_IS_LOCAL_VFS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_LOCAL_VFS))
+#define G_LOCAL_VFS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_LOCAL_VFS, GLocalVfsClass))
+
+typedef struct _GLocalVfs       GLocalVfs;
+typedef struct _GLocalVfsClass  GLocalVfsClass;
+
+GType   _g_local_vfs_get_type  (void) G_GNUC_CONST;
+
+GVfs  * _g_local_vfs_new       (void);
+
+G_END_DECLS
+
+#endif /* __G_LOCAL_VFS_H__ */
diff --git a/gio/gmemoryinputstream.c b/gio/gmemoryinputstream.c
new file mode 100644
index 0000000..bb6001b
--- /dev/null
+++ b/gio/gmemoryinputstream.c
@@ -0,0 +1,526 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org> 
+ */
+
+#include "config.h"
+#include "gmemoryinputstream.h"
+#include "ginputstream.h"
+#include "gseekable.h"
+#include "string.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gmemoryinputstream
+ * @short_description: Streaming input operations on memory chunks
+ * @include: gio/gio.h
+ * @see_also: #GMemoryOutputStream
+ *
+ * #GMemoryInputStream is a class for using arbitrary
+ * memory chunks as input for GIO streaming input operations.
+ *
+ */
+
+typedef struct _Chunk Chunk;
+
+struct _Chunk {
+  guint8         *data;
+  gsize           len;
+  GDestroyNotify  destroy;
+};
+
+struct _GMemoryInputStreamPrivate {
+  GSList *chunks;
+  gsize   len;
+  gsize   pos;
+};
+
+static gssize   g_memory_input_stream_read         (GInputStream         *stream,
+						    void                 *buffer,
+						    gsize                 count,
+						    GCancellable         *cancellable,
+						    GError              **error);
+static gssize   g_memory_input_stream_skip         (GInputStream         *stream,
+						    gsize                 count,
+						    GCancellable         *cancellable,
+						    GError              **error);
+static gboolean g_memory_input_stream_close        (GInputStream         *stream,
+						    GCancellable         *cancellable,
+						    GError              **error);
+static void     g_memory_input_stream_read_async   (GInputStream         *stream,
+						    void                 *buffer,
+						    gsize                 count,
+						    int                   io_priority,
+						    GCancellable         *cancellable,
+						    GAsyncReadyCallback   callback,
+						    gpointer              user_data);
+static gssize   g_memory_input_stream_read_finish  (GInputStream         *stream,
+						    GAsyncResult         *result,
+						    GError              **error);
+static void     g_memory_input_stream_skip_async   (GInputStream         *stream,
+						    gsize                 count,
+						    int                   io_priority,
+						    GCancellable         *cancellabl,
+						    GAsyncReadyCallback   callback,
+						    gpointer              datae);
+static gssize   g_memory_input_stream_skip_finish  (GInputStream         *stream,
+						    GAsyncResult         *result,
+						    GError              **error);
+static void     g_memory_input_stream_close_async  (GInputStream         *stream,
+						    int                   io_priority,
+						    GCancellable         *cancellabl,
+						    GAsyncReadyCallback   callback,
+						    gpointer              data);
+static gboolean g_memory_input_stream_close_finish (GInputStream         *stream,
+						    GAsyncResult         *result,
+						    GError              **error);
+
+static void     g_memory_input_stream_seekable_iface_init (GSeekableIface  *iface);
+static goffset  g_memory_input_stream_tell                (GSeekable       *seekable);
+static gboolean g_memory_input_stream_can_seek            (GSeekable       *seekable);
+static gboolean g_memory_input_stream_seek                (GSeekable       *seekable,
+                                                           goffset          offset,
+                                                           GSeekType        type,
+                                                           GCancellable    *cancellable,
+                                                           GError         **error);
+static gboolean g_memory_input_stream_can_truncate        (GSeekable       *seekable);
+static gboolean g_memory_input_stream_truncate            (GSeekable       *seekable,
+                                                           goffset          offset,
+                                                           GCancellable    *cancellable,
+                                                           GError         **error);
+static void     g_memory_input_stream_finalize            (GObject         *object);
+
+G_DEFINE_TYPE_WITH_CODE (GMemoryInputStream, g_memory_input_stream, G_TYPE_INPUT_STREAM,
+                         G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE,
+                                                g_memory_input_stream_seekable_iface_init))
+
+
+static void
+g_memory_input_stream_class_init (GMemoryInputStreamClass *klass)
+{
+  GObjectClass *object_class;
+  GInputStreamClass *istream_class;
+
+  g_type_class_add_private (klass, sizeof (GMemoryInputStreamPrivate));
+
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->finalize     = g_memory_input_stream_finalize;
+  
+  istream_class = G_INPUT_STREAM_CLASS (klass);
+  istream_class->read_fn  = g_memory_input_stream_read;
+  istream_class->skip  = g_memory_input_stream_skip;
+  istream_class->close_fn = g_memory_input_stream_close;
+
+  istream_class->read_async  = g_memory_input_stream_read_async;
+  istream_class->read_finish  = g_memory_input_stream_read_finish;
+  istream_class->skip_async  = g_memory_input_stream_skip_async;
+  istream_class->skip_finish  = g_memory_input_stream_skip_finish;
+  istream_class->close_async = g_memory_input_stream_close_async;
+  istream_class->close_finish = g_memory_input_stream_close_finish;
+}
+
+static void
+free_chunk (gpointer data, 
+            gpointer user_data)
+{
+  Chunk *chunk = data;
+
+  if (chunk->destroy)
+    chunk->destroy (chunk->data);
+
+  g_slice_free (Chunk, chunk);
+}
+
+static void
+g_memory_input_stream_finalize (GObject *object)
+{
+  GMemoryInputStream        *stream;
+  GMemoryInputStreamPrivate *priv;
+
+  stream = G_MEMORY_INPUT_STREAM (object);
+  priv = stream->priv;
+
+  g_slist_foreach (priv->chunks, free_chunk, NULL);
+  g_slist_free (priv->chunks);
+
+  G_OBJECT_CLASS (g_memory_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_memory_input_stream_seekable_iface_init (GSeekableIface *iface)
+{
+  iface->tell         = g_memory_input_stream_tell;
+  iface->can_seek     = g_memory_input_stream_can_seek;
+  iface->seek         = g_memory_input_stream_seek;
+  iface->can_truncate = g_memory_input_stream_can_truncate;
+  iface->truncate_fn  = g_memory_input_stream_truncate;
+}
+
+static void
+g_memory_input_stream_init (GMemoryInputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                              G_TYPE_MEMORY_INPUT_STREAM,
+                                              GMemoryInputStreamPrivate);
+}
+
+/**
+ * g_memory_input_stream_new:
+ *
+ * Creates a new empty #GMemoryInputStream. 
+ *
+ * Returns: a new #GInputStream
+ */
+GInputStream *
+g_memory_input_stream_new (void)
+{
+  GInputStream *stream;
+
+  stream = g_object_new (G_TYPE_MEMORY_INPUT_STREAM, NULL);
+
+  return stream;
+}
+
+/**
+ * g_memory_input_stream_new_from_data:
+ * @data: input data
+ * @len: length of the data, may be -1 if @data is a nul-terminated string
+ * @destroy: function that is called to free @data, or %NULL
+ *
+ * Creates a new #GMemoryInputStream with data in memory of a given size.
+ * 
+ * Returns: new #GInputStream read from @data of @len bytes.
+ **/
+GInputStream *
+g_memory_input_stream_new_from_data (const void     *data, 
+                                     gssize          len,
+                                     GDestroyNotify  destroy)
+{
+  GInputStream *stream;
+
+  stream = g_memory_input_stream_new ();
+
+  g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (stream),
+                                  data, len, destroy);
+
+  return stream;
+}
+
+/**
+ * g_memory_input_stream_add_data:
+ * @stream: a #GMemoryInputStream
+ * @data: input data
+ * @len: length of the data, may be -1 if @data is a nul-terminated string
+ * @destroy: function that is called to free @data, or %NULL
+ *
+ * Appends @data to data that can be read from the input stream
+ */
+void
+g_memory_input_stream_add_data (GMemoryInputStream *stream,
+                                const void         *data,
+                                gssize              len,
+                                GDestroyNotify      destroy)
+{
+  GMemoryInputStreamPrivate *priv;
+  Chunk *chunk;
+ 
+  g_return_if_fail (G_IS_MEMORY_INPUT_STREAM (stream));
+  g_return_if_fail (data != NULL);
+
+  priv = stream->priv;
+
+  if (len == -1)
+    len = strlen (data);
+  
+  chunk = g_slice_new (Chunk);
+  chunk->data = (guint8 *)data;
+  chunk->len = len;
+  chunk->destroy = destroy;
+
+  priv->chunks = g_slist_append (priv->chunks, chunk);
+  priv->len += chunk->len;
+}
+
+static gssize
+g_memory_input_stream_read (GInputStream  *stream,
+                            void          *buffer,
+                            gsize          count,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+  GMemoryInputStream *memory_stream;
+  GMemoryInputStreamPrivate *priv;
+  GSList *l;
+  Chunk *chunk;
+  gsize offset, start, rest, size;
+
+  memory_stream = G_MEMORY_INPUT_STREAM (stream);
+  priv = memory_stream->priv;
+
+  count = MIN (count, priv->len - priv->pos);
+
+  offset = 0;
+  for (l = priv->chunks; l; l = l->next) 
+    {
+      chunk = (Chunk *)l->data;
+
+      if (offset + chunk->len > priv->pos)
+        break;
+
+      offset += chunk->len;
+    }
+  
+  start = priv->pos - offset;
+  rest = count;
+
+  for (; l && rest > 0; l = l->next)
+    {
+      chunk = (Chunk *)l->data;
+      size = MIN (rest, chunk->len - start);
+
+      memcpy ((guint8 *)buffer + (count - rest), chunk->data + start, size);
+      rest -= size;
+
+      start = 0;
+    }
+
+  priv->pos += count;
+
+  return count;
+}
+
+static gssize
+g_memory_input_stream_skip (GInputStream  *stream,
+                            gsize          count,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+  GMemoryInputStream *memory_stream;
+  GMemoryInputStreamPrivate *priv;
+
+  memory_stream = G_MEMORY_INPUT_STREAM (stream);
+  priv = memory_stream->priv;
+
+  count = MIN (count, priv->len - priv->pos);
+  priv->pos += count;
+
+  return count;
+}
+
+static gboolean
+g_memory_input_stream_close (GInputStream  *stream,
+                             GCancellable  *cancellable,
+                             GError       **error)
+{
+  return TRUE;
+}
+
+static void
+g_memory_input_stream_read_async (GInputStream        *stream,
+                                  void                *buffer,
+                                  gsize                count,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GSimpleAsyncResult *simple;
+  gssize nread;
+
+  nread = g_memory_input_stream_read (stream, buffer, count, cancellable, NULL);
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+				      callback,
+				      user_data,
+				      g_memory_input_stream_read_async);
+  g_simple_async_result_set_op_res_gssize (simple, nread);
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+static gssize
+g_memory_input_stream_read_finish (GInputStream  *stream,
+                                   GAsyncResult  *result,
+                                   GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  gssize nread;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_memory_input_stream_read_async);
+  
+  nread = g_simple_async_result_get_op_res_gssize (simple);
+  return nread;
+}
+
+static void
+g_memory_input_stream_skip_async (GInputStream        *stream,
+                                  gsize                count,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GSimpleAsyncResult *simple;
+  gssize nskipped;
+
+  nskipped = g_memory_input_stream_skip (stream, count, cancellable, NULL);
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+                                      callback,
+                                      user_data,
+                                      g_memory_input_stream_skip_async);
+  g_simple_async_result_set_op_res_gssize (simple, nskipped);
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+static gssize
+g_memory_input_stream_skip_finish (GInputStream  *stream,
+                                   GAsyncResult  *result,
+                                   GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  gssize nskipped;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_memory_input_stream_skip_async);
+  
+  nskipped = g_simple_async_result_get_op_res_gssize (simple);
+  return nskipped;
+}
+
+static void
+g_memory_input_stream_close_async (GInputStream        *stream,
+                                   int                  io_priority,
+                                   GCancellable        *cancellable,
+                                   GAsyncReadyCallback  callback,
+                                   gpointer             user_data)
+{
+  GSimpleAsyncResult *simple;
+  
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+				      callback,
+				      user_data,
+				      g_memory_input_stream_close_async);
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+static gboolean
+g_memory_input_stream_close_finish (GInputStream  *stream,
+                                    GAsyncResult  *result,
+                                    GError       **error)
+{
+  return TRUE;
+}
+
+static goffset
+g_memory_input_stream_tell (GSeekable *seekable)
+{
+  GMemoryInputStream *memory_stream;
+  GMemoryInputStreamPrivate *priv;
+
+  memory_stream = G_MEMORY_INPUT_STREAM (seekable);
+  priv = memory_stream->priv;
+
+  return priv->pos;
+}
+
+static
+gboolean g_memory_input_stream_can_seek (GSeekable *seekable)
+{
+  return TRUE;
+}
+
+static gboolean
+g_memory_input_stream_seek (GSeekable     *seekable,
+                            goffset        offset,
+                            GSeekType      type,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+  GMemoryInputStream *memory_stream;
+  GMemoryInputStreamPrivate *priv;
+  goffset absolute;
+
+  memory_stream = G_MEMORY_INPUT_STREAM (seekable);
+  priv = memory_stream->priv;
+
+  switch (type) 
+    {
+    case G_SEEK_CUR:
+      absolute = priv->pos + offset;
+      break;
+
+    case G_SEEK_SET:
+      absolute = offset;
+      break;
+
+    case G_SEEK_END:
+      absolute = priv->len + offset;
+      break;
+  
+    default:
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid GSeekType supplied"));
+
+      return FALSE;
+    }
+
+  if (absolute < 0 || absolute > priv->len)
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid seek request"));
+      return FALSE;
+    }
+
+  priv->pos = absolute;
+
+  return TRUE;
+}
+
+static gboolean
+g_memory_input_stream_can_truncate (GSeekable *seekable)
+{
+  return FALSE;
+}
+
+static gboolean
+g_memory_input_stream_truncate (GSeekable     *seekable,
+                                goffset        offset,
+                                GCancellable  *cancellable,
+                                GError       **error)
+{
+  g_set_error_literal (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_NOT_SUPPORTED,
+                       _("Cannot truncate GMemoryInputStream"));
+  return FALSE;
+}
+
+#define __G_MEMORY_INPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gmemoryinputstream.h b/gio/gmemoryinputstream.h
new file mode 100644
index 0000000..e629db1
--- /dev/null
+++ b/gio/gmemoryinputstream.h
@@ -0,0 +1,82 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_MEMORY_INPUT_STREAM_H__
+#define __G_MEMORY_INPUT_STREAM_H__
+
+#include <gio/ginputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_MEMORY_INPUT_STREAM         (g_memory_input_stream_get_type ())
+#define G_MEMORY_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStream))
+#define G_MEMORY_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStreamClass))
+#define G_IS_MEMORY_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MEMORY_INPUT_STREAM))
+#define G_IS_MEMORY_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MEMORY_INPUT_STREAM))
+#define G_MEMORY_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MEMORY_INPUT_STREAM, GMemoryInputStreamClass))
+
+/**
+ * GMemoryInputStream:
+ *
+ * Implements #GInputStream for arbitrary memory chunks.
+ **/
+typedef struct _GMemoryInputStreamClass    GMemoryInputStreamClass;
+typedef struct _GMemoryInputStreamPrivate  GMemoryInputStreamPrivate;
+
+struct _GMemoryInputStream
+{
+  GInputStream parent_instance;
+
+  /*< private >*/
+  GMemoryInputStreamPrivate *priv;
+};
+
+struct _GMemoryInputStreamClass
+{
+  GInputStreamClass parent_class;
+
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+
+GType          g_memory_input_stream_get_type      (void) G_GNUC_CONST;
+GInputStream * g_memory_input_stream_new           (void);
+GInputStream * g_memory_input_stream_new_from_data (const void         *data,
+                                                    gssize              len,
+                                                    GDestroyNotify      destroy);
+void           g_memory_input_stream_add_data      (GMemoryInputStream *stream,
+                                                    const void         *data,
+                                                    gssize              len,
+                                                    GDestroyNotify      destroy);
+
+G_END_DECLS
+
+#endif /* __G_MEMORY_INPUT_STREAM_H__ */
diff --git a/gio/gmemoryoutputstream.c b/gio/gmemoryoutputstream.c
new file mode 100644
index 0000000..6da5761
--- /dev/null
+++ b/gio/gmemoryoutputstream.c
@@ -0,0 +1,606 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#include "config.h"
+#include "gmemoryoutputstream.h"
+#include "goutputstream.h"
+#include "gseekable.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "string.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gmemoryoutputstream
+ * @short_description: Streaming output operations on memory chunks
+ * @include: gio/gio.h
+ * @see_also: #GMemoryInputStream
+ *
+ * #GMemoryOutputStream is a class for using arbitrary
+ * memory chunks as output for GIO streaming output operations.
+ *
+ */
+
+#define MIN_ARRAY_SIZE  16
+
+struct _GMemoryOutputStreamPrivate {
+  
+  gpointer       data;
+  gsize          len;
+  gsize          valid_len; /* The part of data that has been written to */
+
+  goffset        pos;
+
+  GReallocFunc   realloc_fn;
+  GDestroyNotify destroy;
+};
+
+static void     g_memory_output_stream_finalize     (GObject      *object);
+
+static gssize   g_memory_output_stream_write       (GOutputStream *stream,
+                                                    const void    *buffer,
+                                                    gsize          count,
+                                                    GCancellable  *cancellable,
+                                                    GError       **error);
+
+static gboolean g_memory_output_stream_close       (GOutputStream  *stream,
+                                                    GCancellable   *cancellable,
+                                                    GError        **error);
+
+static void     g_memory_output_stream_write_async  (GOutputStream        *stream,
+                                                     const void           *buffer,
+                                                     gsize                 count,
+                                                     int                   io_priority,
+                                                     GCancellable         *cancellable,
+                                                     GAsyncReadyCallback   callback,
+                                                     gpointer              data);
+static gssize   g_memory_output_stream_write_finish (GOutputStream        *stream,
+                                                     GAsyncResult         *result,
+                                                     GError              **error);
+static void     g_memory_output_stream_close_async  (GOutputStream        *stream,
+                                                     int                   io_priority,
+                                                     GCancellable         *cancellable,
+                                                     GAsyncReadyCallback   callback,
+                                                     gpointer              data);
+static gboolean g_memory_output_stream_close_finish (GOutputStream        *stream,
+                                                     GAsyncResult         *result,
+                                                     GError              **error);
+
+static void     g_memory_output_stream_seekable_iface_init (GSeekableIface  *iface);
+static goffset  g_memory_output_stream_tell                (GSeekable       *seekable);
+static gboolean g_memory_output_stream_can_seek            (GSeekable       *seekable);
+static gboolean g_memory_output_stream_seek                (GSeekable       *seekable,
+                                                           goffset          offset,
+                                                           GSeekType        type,
+                                                           GCancellable    *cancellable,
+                                                           GError         **error);
+static gboolean g_memory_output_stream_can_truncate        (GSeekable       *seekable);
+static gboolean g_memory_output_stream_truncate            (GSeekable       *seekable,
+                                                           goffset          offset,
+                                                           GCancellable    *cancellable,
+                                                           GError         **error);
+
+G_DEFINE_TYPE_WITH_CODE (GMemoryOutputStream, g_memory_output_stream, G_TYPE_OUTPUT_STREAM,
+                         G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE,
+                                                g_memory_output_stream_seekable_iface_init))
+
+
+static void
+g_memory_output_stream_class_init (GMemoryOutputStreamClass *klass)
+{
+  GOutputStreamClass *ostream_class;
+  GObjectClass *gobject_class;
+
+  g_type_class_add_private (klass, sizeof (GMemoryOutputStreamPrivate));
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = g_memory_output_stream_finalize;
+
+  ostream_class = G_OUTPUT_STREAM_CLASS (klass);
+
+  ostream_class->write_fn = g_memory_output_stream_write;
+  ostream_class->close_fn = g_memory_output_stream_close;
+  ostream_class->write_async  = g_memory_output_stream_write_async;
+  ostream_class->write_finish = g_memory_output_stream_write_finish;
+  ostream_class->close_async  = g_memory_output_stream_close_async;
+  ostream_class->close_finish = g_memory_output_stream_close_finish;
+}
+
+static void
+g_memory_output_stream_finalize (GObject *object)
+{
+  GMemoryOutputStream        *stream;
+  GMemoryOutputStreamPrivate *priv;
+
+  stream = G_MEMORY_OUTPUT_STREAM (object);
+  priv = stream->priv;
+  
+  if (priv->destroy)
+    priv->destroy (priv->data);
+
+  G_OBJECT_CLASS (g_memory_output_stream_parent_class)->finalize (object);
+}
+
+static void
+g_memory_output_stream_seekable_iface_init (GSeekableIface *iface)
+{
+  iface->tell         = g_memory_output_stream_tell;
+  iface->can_seek     = g_memory_output_stream_can_seek;
+  iface->seek         = g_memory_output_stream_seek;
+  iface->can_truncate = g_memory_output_stream_can_truncate;
+  iface->truncate_fn  = g_memory_output_stream_truncate;
+}
+
+
+static void
+g_memory_output_stream_init (GMemoryOutputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                              G_TYPE_MEMORY_OUTPUT_STREAM,
+                                              GMemoryOutputStreamPrivate);
+}
+
+/**
+ * g_memory_output_stream_new:
+ * @data: pointer to a chunk of memory to use, or %NULL
+ * @len: the size of @data
+ * @realloc_fn: a function with realloc() semantics to be called when 
+ *     @data needs to be grown, or %NULL
+ * @destroy: a function to be called on @data when the stream is finalized,
+ *     or %NULL
+ *
+ * Creates a new #GMemoryOutputStream. 
+ *
+ * If @data is non-%NULL, the stream  will use that for its internal storage.
+ * If @realloc_fn is non-%NULL, it will be used for resizing the internal
+ * storage when necessary. To construct a fixed-size output stream, 
+ * pass %NULL as @realloc_fn.
+ * |[
+ * /&ast; a stream that can grow &ast;/
+ * stream = g_memory_output_stream_new (NULL, 0, realloc, free);
+ *
+ * /&ast; a fixed-size stream &ast;/
+ * data = malloc (200);
+ * stream2 = g_memory_output_stream_new (data, 200, NULL, free);
+ * ]|
+ *
+ * Return value: A newly created #GMemoryOutputStream object.
+ **/
+GOutputStream *
+g_memory_output_stream_new (gpointer       data,
+                            gsize          len,
+                            GReallocFunc   realloc_fn,
+                            GDestroyNotify destroy)
+{
+  GOutputStream *stream;
+  GMemoryOutputStreamPrivate *priv;
+
+  stream = g_object_new (G_TYPE_MEMORY_OUTPUT_STREAM, NULL);
+
+  priv = G_MEMORY_OUTPUT_STREAM (stream)->priv;
+
+  priv->data = data;
+  priv->len = len;
+  priv->realloc_fn = realloc_fn;
+  priv->destroy = destroy;
+
+  priv->pos = 0;
+  priv->valid_len = 0;
+
+  return stream;
+}
+
+/**
+ * g_memory_output_stream_get_data:
+ * @ostream: a #GMemoryOutputStream
+ *
+ * Gets any loaded data from the @ostream. 
+ *
+ * Note that the returned pointer may become invalid on the next 
+ * write or truncate operation on the stream. 
+ * 
+ * Returns: pointer to the stream's data
+ **/
+gpointer
+g_memory_output_stream_get_data (GMemoryOutputStream *ostream)
+{
+  g_return_val_if_fail (G_IS_MEMORY_OUTPUT_STREAM (ostream), NULL);
+
+  return ostream->priv->data;
+}
+
+/**
+ * g_memory_output_stream_get_size:
+ * @ostream: a #GMemoryOutputStream
+ *
+ * Gets the size of the currently allocated data area (availible from
+ * g_memory_output_stream_get_data()). If the stream isn't
+ * growable (no realloc was passed to g_memory_output_stream_new()) then
+ * this is the maximum size of the stream and further writes
+ * will return %G_IO_ERROR_NO_SPACE.
+ *
+ * Note that for growable streams the returned size may become invalid on
+ * the next write or truncate operation on the stream.
+ *
+ * If you want the number of bytes currently written to the stream, use
+ * g_memory_output_stream_get_data_size().
+ * 
+ * Returns: the number of bytes allocated for the data buffer
+ */
+gsize
+g_memory_output_stream_get_size (GMemoryOutputStream *ostream)
+{
+  g_return_val_if_fail (G_IS_MEMORY_OUTPUT_STREAM (ostream), 0);
+  
+  return ostream->priv->len;
+}
+
+/**
+ * g_memory_output_stream_get_data_size:
+ * @ostream: a #GMemoryOutputStream
+ *
+ * Returns the number of bytes from the start up
+ * to including the last byte written in the stream
+ * that has not been truncated away.
+ * 
+ * Returns: the number of bytes written to the stream
+ *
+ * Since: 2.18
+ */
+gsize
+g_memory_output_stream_get_data_size (GMemoryOutputStream *ostream)
+{
+  g_return_val_if_fail (G_IS_MEMORY_OUTPUT_STREAM (ostream), 0);
+  
+  return ostream->priv->valid_len;
+}
+
+
+static gboolean
+array_check_boundary (GMemoryOutputStream  *stream,
+                      goffset               size,
+                      GError              **error)
+{
+  if (size > G_MAXUINT)
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_FAILED,
+                           _("Reached maximum data array limit"));
+
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+array_resize (GMemoryOutputStream  *ostream,
+              gsize                 size,
+	      gboolean              allow_partial,
+              GError              **error)
+{
+  GMemoryOutputStreamPrivate *priv;
+  gpointer data;
+  gsize len;
+
+  priv = ostream->priv;
+
+  if (!array_check_boundary (ostream, size, error))
+    return FALSE;
+
+  if (priv->len == size)
+    return TRUE;
+
+  if (!priv->realloc_fn)
+    {
+      if (allow_partial &&
+	  priv->pos < priv->len)
+	return TRUE; /* Short write */
+      
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_NO_SPACE,
+                           _("Memory output stream not resizable"));
+      return FALSE;
+    }
+
+  len = priv->len;
+  data = priv->realloc_fn (priv->data, size);
+
+  if (size > 0 && !data) 
+    {
+      if (allow_partial &&
+	  priv->pos < priv->len)
+	return TRUE; /* Short write */
+      
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_NO_SPACE,
+                           _("Failed to resize memory output stream"));
+      return FALSE;
+    }
+
+  if (size > len)
+    memset ((guint8 *)data + len, 0, size - len);
+
+  priv->data = data;
+  priv->len = size;
+  
+  if (priv->len < priv->valid_len)
+    priv->valid_len = priv->len;
+  
+  return TRUE;
+}
+
+static gint
+g_nearest_pow (gint num)
+{
+  gint n = 1;
+
+  while (n < num)
+    n <<= 1;
+
+  return n;
+}
+
+static gssize
+g_memory_output_stream_write (GOutputStream  *stream,
+                              const void     *buffer,
+                              gsize           count,
+                              GCancellable   *cancellable,
+                              GError        **error)
+{
+  GMemoryOutputStream        *ostream;
+  GMemoryOutputStreamPrivate *priv;
+  guint8   *dest;
+  gsize new_size;
+
+  ostream = G_MEMORY_OUTPUT_STREAM (stream);
+  priv = ostream->priv;
+
+  if (count == 0)
+    return 0;
+
+  if (priv->pos + count > priv->len) 
+    {
+      /* At least enought to fit the write, rounded up
+	 for greater than linear growth */
+      new_size = g_nearest_pow (priv->pos + count);
+      new_size = MAX (new_size, MIN_ARRAY_SIZE);
+      
+      if (!array_resize (ostream, new_size, TRUE, error))
+	return -1;
+    }
+
+  /* Make sure we handle short writes if the array_resize
+     only added part of the required memory */
+  count = MIN (count, priv->len - priv->pos);
+  
+  dest = (guint8 *)priv->data + priv->pos;
+  memcpy (dest, buffer, count); 
+  priv->pos += count;
+  
+  if (priv->pos > priv->valid_len)
+    priv->valid_len = priv->pos;
+
+  return count;
+}
+
+static gboolean
+g_memory_output_stream_close (GOutputStream  *stream,
+                              GCancellable   *cancellable,
+                              GError        **error)
+{
+  return TRUE;
+}
+
+static void
+g_memory_output_stream_write_async (GOutputStream       *stream,
+                                    const void          *buffer,
+                                    gsize                count,
+                                    int                  io_priority,
+                                    GCancellable        *cancellable,
+                                    GAsyncReadyCallback  callback,
+                                    gpointer             data)
+{
+  GSimpleAsyncResult *simple;
+  gssize nwritten;
+
+  nwritten = g_memory_output_stream_write (stream,
+                                           buffer,
+                                           count,
+                                           cancellable,
+                                           NULL);
+ 
+
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+                                      callback,
+                                      data,
+                                      g_memory_output_stream_write_async);
+  
+  g_simple_async_result_set_op_res_gssize (simple, nwritten); 
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+static gssize
+g_memory_output_stream_write_finish (GOutputStream  *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  gssize nwritten;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+                  g_memory_output_stream_write_async);
+
+  nwritten = g_simple_async_result_get_op_res_gssize (simple);
+
+  return nwritten;
+}
+
+static void
+g_memory_output_stream_close_async (GOutputStream       *stream,
+                                    int                  io_priority,
+                                    GCancellable        *cancellable,
+                                    GAsyncReadyCallback  callback,
+                                    gpointer             data)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = g_simple_async_result_new (G_OBJECT (stream),
+                                      callback,
+                                      data,
+                                      g_memory_output_stream_close_async);
+
+
+  /* will always return TRUE */
+  g_memory_output_stream_close (stream, cancellable, NULL);
+  
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+static gboolean
+g_memory_output_stream_close_finish (GOutputStream  *stream,
+                                     GAsyncResult   *result,
+                                     GError        **error)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == 
+                  g_memory_output_stream_close_async);
+
+  return TRUE;
+}
+
+static goffset
+g_memory_output_stream_tell (GSeekable *seekable)
+{
+  GMemoryOutputStream *stream;
+  GMemoryOutputStreamPrivate *priv;
+
+  stream = G_MEMORY_OUTPUT_STREAM (seekable);
+  priv = stream->priv;
+
+  return priv->pos;
+}
+
+static gboolean
+g_memory_output_stream_can_seek (GSeekable *seekable)
+{
+  return TRUE;
+}
+
+static gboolean
+g_memory_output_stream_seek (GSeekable    *seekable,
+                            goffset        offset,
+                            GSeekType      type,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+  GMemoryOutputStream        *stream;
+  GMemoryOutputStreamPrivate *priv;
+  goffset absolute;
+
+  stream = G_MEMORY_OUTPUT_STREAM (seekable);
+  priv = stream->priv;
+
+  switch (type) 
+    {
+    case G_SEEK_CUR:
+      absolute = priv->pos + offset;
+      break;
+
+    case G_SEEK_SET:
+      absolute = offset;
+      break;
+
+    case G_SEEK_END:
+      absolute = priv->len + offset;
+      break;
+  
+    default:
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid GSeekType supplied"));
+
+      return FALSE;
+    }
+
+  if (absolute < 0) 
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Invalid seek request"));
+      return FALSE;
+    }
+
+  if (!array_check_boundary (stream, absolute, error)) 
+    return FALSE;  
+
+  priv->pos = absolute;
+
+  return TRUE;
+}
+
+static gboolean
+g_memory_output_stream_can_truncate (GSeekable *seekable)
+{
+  GMemoryOutputStream *ostream;
+  GMemoryOutputStreamPrivate *priv;
+
+  ostream = G_MEMORY_OUTPUT_STREAM (seekable);
+  priv = ostream->priv;
+
+  return priv->realloc_fn != NULL;
+}
+
+static gboolean
+g_memory_output_stream_truncate (GSeekable     *seekable,
+                                 goffset        offset,
+                                 GCancellable  *cancellable,
+                                 GError       **error)
+{
+  GMemoryOutputStream *ostream;
+  GMemoryOutputStreamPrivate *priv;
+
+  ostream = G_MEMORY_OUTPUT_STREAM (seekable);
+  priv = ostream->priv;
+ 
+  if (!array_resize (ostream, offset, FALSE, error))
+    return FALSE;
+
+  return TRUE;
+}
+
+#define __G_MEMORY_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gmemoryoutputstream.h b/gio/gmemoryoutputstream.h
new file mode 100644
index 0000000..d2f5b7f
--- /dev/null
+++ b/gio/gmemoryoutputstream.h
@@ -0,0 +1,97 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Christian Kellner <gicmo@gnome.org>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_MEMORY_OUTPUT_STREAM_H__
+#define __G_MEMORY_OUTPUT_STREAM_H__
+
+#include <gio/goutputstream.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_MEMORY_OUTPUT_STREAM         (g_memory_output_stream_get_type ())
+#define G_MEMORY_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStream))
+#define G_MEMORY_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStreamClass))
+#define G_IS_MEMORY_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MEMORY_OUTPUT_STREAM))
+#define G_IS_MEMORY_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MEMORY_OUTPUT_STREAM))
+#define G_MEMORY_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MEMORY_OUTPUT_STREAM, GMemoryOutputStreamClass))
+
+/**
+ * GMemoryOutputStream:
+ *
+ * Implements #GOutputStream for arbitrary memory chunks.
+ **/
+typedef struct _GMemoryOutputStreamClass    GMemoryOutputStreamClass;
+typedef struct _GMemoryOutputStreamPrivate  GMemoryOutputStreamPrivate;
+
+struct _GMemoryOutputStream
+{
+  GOutputStream parent_instance;
+
+  /*< private >*/
+  GMemoryOutputStreamPrivate *priv;
+};
+
+struct _GMemoryOutputStreamClass
+{
+  GOutputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+/**
+ * GReallocFunc:
+ * @data: memory block to reallocate
+ * @size: size to reallocate @data to
+ *
+ * Changes the size of the memory block pointed to by @data to
+ * @size bytes.
+ *
+ * The function should have the same semantics as realloc().
+ *
+ * Returns: a pointer to the reallocated memory
+ */
+typedef gpointer (* GReallocFunc) (gpointer data,
+                                   gsize    size);
+
+GType          g_memory_output_stream_get_type      (void) G_GNUC_CONST;
+
+GOutputStream *g_memory_output_stream_new           (gpointer             data,
+                                                     gsize                len,
+                                                     GReallocFunc         realloc_fn,
+                                                     GDestroyNotify       destroy);
+gpointer       g_memory_output_stream_get_data      (GMemoryOutputStream *ostream);
+gsize          g_memory_output_stream_get_size      (GMemoryOutputStream *ostream);
+gsize          g_memory_output_stream_get_data_size (GMemoryOutputStream *ostream);
+
+G_END_DECLS
+
+#endif /* __G_MEMORY_OUTPUT_STREAM_H__ */
diff --git a/gio/gmount.c b/gio/gmount.c
new file mode 100644
index 0000000..dbdbeaf
--- /dev/null
+++ b/gio/gmount.c
@@ -0,0 +1,833 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2008 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gmount.h"
+#include "gmountprivate.h"
+#include "gasyncresult.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gmount
+ * @short_description: Mount management
+ * @include: gio/gio.h
+ * @see also: GVolume, GUnixMount
+ *
+ * The #GMount interface represents user-visible mounts. Note, when 
+ * porting from GnomeVFS, #GMount is the moral equivalent of #GnomeVFSVolume.
+ *
+ * #GMount is a "mounted" filesystem that you can access. Mounted is in
+ * quotes because it's not the same as a unix mount, it might be a gvfs
+ * mount, but you can still access the files on it if you use GIO. Might or
+ * might not be related to a volume object.
+ * 
+ * Unmounting a #GMount instance is an asynchronous operation. For
+ * more information about asynchronous operations, see #GAsyncReady
+ * and #GSimpleAsyncReady. To unmount a #GMount instance, first call
+ * g_mount_unmount() with (at least) the #GMount instance and a
+ * #GAsyncReadyCallback.  The callback will be fired when the
+ * operation has resolved (either with success or failure), and a
+ * #GAsyncReady structure will be passed to the callback.  That
+ * callback should then call g_mount_unmount_finish() with the #GMount
+ * and the #GAsyncReady data to see if the operation was completed
+ * successfully.  If an @error is present when g_mount_unmount_finish() 
+ * is called, then it will be filled with any error information.
+ **/
+
+static void g_mount_base_init (gpointer g_class);
+static void g_mount_class_init (gpointer g_class,
+                                gpointer class_data);
+
+GType
+g_mount_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo mount_info =
+      {
+        sizeof (GMountIface), /* class_size */
+	g_mount_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_mount_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GMount"),
+				&mount_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_mount_class_init (gpointer g_class,
+                    gpointer class_data)
+{
+}
+
+static void
+g_mount_base_init (gpointer g_class)
+{
+  static gboolean initialized = FALSE;
+
+  if (! initialized)
+    {
+     /**
+      * GMount::changed:
+      * @mount: the object on which the signal is emitted
+      * 
+      * Emitted when the mount has been changed.
+      **/
+      g_signal_new (I_("changed"),
+                    G_TYPE_MOUNT,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GMountIface, changed),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+     /**
+      * GMount::unmounted:
+      * @mount: the object on which the signal is emitted
+      * 
+      * This signal is emitted when the #GMount have been
+      * unmounted. If the recipient is holding references to the
+      * object they should release them so the object can be
+      * finalized.
+      **/
+      g_signal_new (I_("unmounted"),
+                    G_TYPE_MOUNT,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GMountIface, unmounted),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+      initialized = TRUE;
+    }
+}
+
+/**
+ * g_mount_get_root:
+ * @mount: a #GMount.
+ * 
+ * Gets the root directory on @mount.
+ * 
+ * Returns: a #GFile. 
+ *      The returned object should be unreffed with 
+ *      g_object_unref() when no longer needed.
+ **/
+GFile *
+g_mount_get_root (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->get_root) (mount);
+}
+
+/**
+ * g_mount_get_name:
+ * @mount: a #GMount.
+ * 
+ * Gets the name of @mount.
+ * 
+ * Returns: the name for the given @mount. 
+ *     The returned string should be freed with g_free()
+ *     when no longer needed.
+ **/
+char *
+g_mount_get_name (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->get_name) (mount);
+}
+
+/**
+ * g_mount_get_icon:
+ * @mount: a #GMount.
+ * 
+ * Gets the icon for @mount.
+ * 
+ * Returns: a #GIcon.
+ *      The returned object should be unreffed with 
+ *      g_object_unref() when no longer needed.
+ **/
+GIcon *
+g_mount_get_icon (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->get_icon) (mount);
+}
+
+/**
+ * g_mount_get_uuid:
+ * @mount: a #GMount.
+ * 
+ * Gets the UUID for the @mount. The reference is typically based on
+ * the file system UUID for the mount in question and should be
+ * considered an opaque string. Returns %NULL if there is no UUID
+ * available.
+ * 
+ * Returns: the UUID for @mount or %NULL if no UUID can be computed.
+ *     The returned string should be freed with g_free()
+ *     when no longer needed.
+ **/
+char *
+g_mount_get_uuid (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->get_uuid) (mount);
+}
+
+/**
+ * g_mount_get_volume:
+ * @mount: a #GMount.
+ * 
+ * Gets the volume for the @mount.
+ * 
+ * Returns: a #GVolume or %NULL if @mount is not associated with a volume.
+ *      The returned object should be unreffed with 
+ *      g_object_unref() when no longer needed.
+ **/
+GVolume *
+g_mount_get_volume (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->get_volume) (mount);
+}
+
+/**
+ * g_mount_get_drive:
+ * @mount: a #GMount.
+ * 
+ * Gets the drive for the @mount.
+ *
+ * This is a convenience method for getting the #GVolume and then
+ * using that object to get the #GDrive.
+ * 
+ * Returns: a #GDrive or %NULL if @mount is not associated with a volume or a drive.
+ *      The returned object should be unreffed with 
+ *      g_object_unref() when no longer needed.
+ **/
+GDrive *
+g_mount_get_drive (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->get_drive) (mount);
+}
+
+/**
+ * g_mount_can_unmount: 
+ * @mount: a #GMount.
+ * 
+ * Checks if @mount can be mounted.
+ * 
+ * Returns: %TRUE if the @mount can be unmounted.
+ **/
+gboolean
+g_mount_can_unmount (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->can_unmount) (mount);
+}
+
+/**
+ * g_mount_can_eject: 
+ * @mount: a #GMount.
+ * 
+ * Checks if @mount can be eject.
+ * 
+ * Returns: %TRUE if the @mount can be ejected.
+ **/
+gboolean
+g_mount_can_eject (GMount *mount)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  return (* iface->can_eject) (mount);
+}
+
+/**
+ * g_mount_unmount:
+ * @mount: a #GMount.
+ * @flags: flags affecting the operation
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data passed to @callback.
+ * 
+ * Unmounts a mount. This is an asynchronous operation, and is 
+ * finished by calling g_mount_unmount_finish() with the @mount 
+ * and #GAsyncResult data returned in the @callback.
+ **/
+void
+g_mount_unmount (GMount              *mount,
+                 GMountUnmountFlags   flags,
+                 GCancellable        *cancellable,
+                 GAsyncReadyCallback  callback,
+                 gpointer             user_data)
+{
+  GMountIface *iface;
+
+  g_return_if_fail (G_IS_MOUNT (mount));
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  if (iface->unmount == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (mount),
+					   callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   /* Translators: This is an error
+					    * message for mount objects that
+					    * don't implement unmount. */
+					   _("mount doesn't implement unmount"));
+
+      return;
+    }
+  
+  (* iface->unmount) (mount, flags, cancellable, callback, user_data);
+}
+
+/**
+ * g_mount_unmount_finish:
+ * @mount: a #GMount.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ *     ignore.
+ * 
+ * Finishes unmounting a mount. If any errors occurred during the operation, 
+ * @error will be set to contain the errors and %FALSE will be returned.
+ * 
+ * Returns: %TRUE if the mount was successfully unmounted. %FALSE otherwise.
+ **/
+gboolean
+g_mount_unmount_finish (GMount        *mount,
+                        GAsyncResult  *result,
+                        GError       **error)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+        return FALSE;
+    }
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+  return (* iface->unmount_finish) (mount, result, error);
+}
+
+
+/**
+ * g_mount_eject:
+ * @mount: a #GMount.
+ * @flags: flags affecting the unmount if required for eject
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data passed to @callback.
+ * 
+ * Ejects a mount. This is an asynchronous operation, and is 
+ * finished by calling g_mount_eject_finish() with the @mount 
+ * and #GAsyncResult data returned in the @callback.
+ **/
+void
+g_mount_eject (GMount              *mount,
+               GMountUnmountFlags   flags,
+               GCancellable        *cancellable,
+               GAsyncReadyCallback  callback,
+               gpointer             user_data)
+{
+  GMountIface *iface;
+
+  g_return_if_fail (G_IS_MOUNT (mount));
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  if (iface->eject == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (mount),
+					   callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   /* Translators: This is an error
+					    * message for mount objects that
+					    * don't implement eject. */
+					   _("mount doesn't implement eject"));
+      
+      return;
+    }
+  
+  (* iface->eject) (mount, flags, cancellable, callback, user_data);
+}
+
+/**
+ * g_mount_eject_finish:
+ * @mount: a #GMount.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ *     ignore.
+ * 
+ * Finishes ejecting a mount. If any errors occurred during the operation, 
+ * @error will be set to contain the errors and %FALSE will be returned.
+ * 
+ * Returns: %TRUE if the mount was successfully ejected. %FALSE otherwise.
+ **/
+gboolean
+g_mount_eject_finish (GMount        *mount,
+                      GAsyncResult  *result,
+                      GError       **error)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+        return FALSE;
+    }
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+  return (* iface->eject_finish) (mount, result, error);
+}
+
+/**
+ * g_mount_remount:
+ * @mount: a #GMount.
+ * @flags: flags affecting the operation
+ * @mount_operation: a #GMountOperation or %NULL to avoid user interaction.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data passed to @callback.
+ * 
+ * Remounts a mount. This is an asynchronous operation, and is 
+ * finished by calling g_mount_remount_finish() with the @mount 
+ * and #GAsyncResults data returned in the @callback.
+ *
+ * Remounting is useful when some setting affecting the operation
+ * of the volume has been changed, as these may need a remount to
+ * take affect. While this is semantically equivalent with unmounting
+ * and then remounting not all backends might need to actually be
+ * unmounted.
+ **/
+void
+g_mount_remount (GMount              *mount,
+                 GMountMountFlags     flags,
+                 GMountOperation     *mount_operation,
+                 GCancellable        *cancellable,
+                 GAsyncReadyCallback  callback,
+                 gpointer             user_data)
+{
+  GMountIface *iface;
+
+  g_return_if_fail (G_IS_MOUNT (mount));
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  if (iface->remount == NULL)
+    { 
+      g_simple_async_report_error_in_idle (G_OBJECT (mount),
+					   callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   /* Translators: This is an error
+					    * message for mount objects that
+					    * don't implement remount. */
+					   _("mount doesn't implement remount"));
+      
+      return;
+    }
+  
+  (* iface->remount) (mount, flags, mount_operation, cancellable, callback, user_data);
+}
+
+/**
+ * g_mount_remount_finish:
+ * @mount: a #GMount.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ *     ignore.
+ * 
+ * Finishes remounting a mount. If any errors occurred during the operation, 
+ * @error will be set to contain the errors and %FALSE will be returned.
+ * 
+ * Returns: %TRUE if the mount was successfully remounted. %FALSE otherwise.
+ **/
+gboolean
+g_mount_remount_finish (GMount        *mount,
+                        GAsyncResult  *result,
+                        GError       **error)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+        return FALSE;
+    }
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+  return (* iface->remount_finish) (mount, result, error);
+}
+
+/**
+ * g_mount_guess_content_type:
+ * @mount: a #GMount
+ * @force_rescan: Whether to force a rescan of the content. 
+ *     Otherwise a cached result will be used if available
+ * @cancellable: optional #GCancellable object, %NULL to ignore
+ * @callback: a #GAsyncReadyCallback
+ * @user_data: user data passed to @callback
+ * 
+ * Tries to guess the type of content stored on @mount. Returns one or
+ * more textual identifiers of well-known content types (typically
+ * prefixed with "x-content/"), e.g. x-content/image-dcf for camera 
+ * memory cards. See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
+ * specification for more on x-content types.
+ *
+ * This is an asynchronous operation (see
+ * g_mount_guess_content_type_sync() for the synchronous version), and
+ * is finished by calling g_mount_guess_content_type_finish() with the
+ * @mount and #GAsyncResult data returned in the @callback.
+ *
+ * Since: 2.18
+ */
+void
+g_mount_guess_content_type (GMount              *mount,
+                            gboolean             force_rescan,
+                            GCancellable        *cancellable,
+                            GAsyncReadyCallback  callback,
+                            gpointer             user_data)
+{
+  GMountIface *iface;
+
+  g_return_if_fail (G_IS_MOUNT (mount));
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  if (iface->guess_content_type == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (mount),
+                                           callback, user_data,
+                                           G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                                           /* Translators: This is an error
+                                            * message for mount objects that
+                                            * don't implement content type guessing. */
+                                           _("mount doesn't implement content type guessing"));
+
+      return;
+    }
+  
+  (* iface->guess_content_type) (mount, force_rescan, cancellable, callback, user_data);
+}
+
+/**
+ * g_mount_guess_content_type_finish:
+ * @mount: a #GMount
+ * @result: a #GAsyncResult
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ *     ignore
+ * 
+ * Finishes guessing content types of @mount. If any errors occured
+ * during the operation, @error will be set to contain the errors and
+ * %FALSE will be returned. In particular, you may get an 
+ * %G_IO_ERROR_NOT_SUPPORTED if the mount does not support content 
+ * guessing.
+ * 
+ * Returns: a %NULL-terminated array of content types or %NULL on error. 
+ *     Caller should free this array with g_strfreev() when done with it.
+ *
+ * Since: 2.18
+ **/
+gchar **
+g_mount_guess_content_type_finish (GMount        *mount,
+                                   GAsyncResult  *result,
+                                   GError       **error)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+        return FALSE;
+    }
+  
+  iface = G_MOUNT_GET_IFACE (mount);
+  return (* iface->guess_content_type_finish) (mount, result, error);
+}
+
+/**
+ * g_mount_guess_content_type_sync:
+ * @mount: a #GMount
+ * @force_rescan: Whether to force a rescan of the content.
+ *     Otherwise a cached result will be used if available
+ * @cancellable: optional #GCancellable object, %NULL to ignore
+ * @error: a #GError location to store the error occuring, or %NULL to
+ *     ignore
+ *
+ * Tries to guess the type of content stored on @mount. Returns one or
+ * more textual identifiers of well-known content types (typically
+ * prefixed with "x-content/"), e.g. x-content/image-dcf for camera 
+ * memory cards. See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
+ * specification for more on x-content types.
+ *
+ * This is an synchronous operation and as such may block doing IO;
+ * see g_mount_guess_content_type() for the asynchronous version.
+ *
+ * Returns: a %NULL-terminated array of content types or %NULL on error.
+ *     Caller should free this array with g_strfreev() when done with it.
+ *
+ * Since: 2.18
+ */
+char **
+g_mount_guess_content_type_sync (GMount              *mount,
+                                 gboolean             force_rescan,
+                                 GCancellable        *cancellable,
+                                 GError             **error)
+{
+  GMountIface *iface;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), NULL);
+
+  iface = G_MOUNT_GET_IFACE (mount);
+
+  if (iface->guess_content_type_sync == NULL)
+    {
+      g_set_error_literal (error,
+                           G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           /* Translators: This is an error
+                            * message for mount objects that
+                            * don't implement content type guessing. */
+                           _("mount doesn't implement synchronous content type guessing"));
+
+      return NULL;
+    }
+
+  return (* iface->guess_content_type_sync) (mount, force_rescan, cancellable, error);
+}
+
+G_LOCK_DEFINE_STATIC (priv_lock);
+
+/* only access this structure when holding priv_lock */
+typedef struct
+{
+  gint shadow_ref_count;
+} GMountPrivate;
+
+static void
+free_private (GMountPrivate *private)
+{
+  G_LOCK (priv_lock);
+  g_free (private);
+  G_UNLOCK (priv_lock);
+}
+
+/* may only be called when holding priv_lock */
+static GMountPrivate *
+get_private (GMount *mount)
+{
+  GMountPrivate *private;
+
+  private = g_object_get_data (G_OBJECT (mount), "g-mount-private");
+  if (G_LIKELY (private != NULL))
+    goto out;
+
+  private = g_new0 (GMountPrivate, 1);
+  g_object_set_data_full (G_OBJECT (mount),
+                          "g-mount-private",
+                          private,
+                          (GDestroyNotify) free_private);
+
+ out:
+  return private;
+}
+
+/**
+ * g_mount_is_shadowed:
+ * @mount: A #GMount.
+ *
+ * Determines if @mount is shadowed. Applications or libraries should
+ * avoid displaying @mount in the user interface if it is shadowed.
+ *
+ * A mount is said to be shadowed if there exists one or more user
+ * visible objects (currently #GMount objects) with a root that is
+ * inside the root of @mount.
+ *
+ * One application of shadow mounts is when exposing a single file
+ * system that is used to address several logical volumes. In this
+ * situation, a #GVolumeMonitor implementation would create two
+ * #GVolume objects (for example, one for the camera functionality of
+ * the device and one for a SD card reader on the device) with
+ * activation URIs <literal>gphoto2://[usb:001,002]/store1/</literal>
+ * and <literal>gphoto2://[usb:001,002]/store2/</literal>. When the
+ * underlying mount (with root
+ * <literal>gphoto2://[usb:001,002]/</literal>) is mounted, said
+ * #GVolumeMonitor implementation would create two #GMount objects
+ * (each with their root matching the corresponding volume activation
+ * root) that would shadow the original mount.
+ *
+ * The proxy monitor in GVfs 2.26 and later, automatically creates and
+ * manage shadow mounts (and shadows the underlying mount) if the
+ * activation root on a #GVolume is set.
+ *
+ * Returns: %TRUE if @mount is shadowed.
+ *
+ * Since: 2.20
+ **/
+gboolean
+g_mount_is_shadowed (GMount *mount)
+{
+  GMountPrivate *priv;
+  gboolean ret;
+
+  g_return_val_if_fail (G_IS_MOUNT (mount), FALSE);
+
+  G_LOCK (priv_lock);
+  priv = get_private (mount);
+  ret = (priv->shadow_ref_count > 0);
+  G_UNLOCK (priv_lock);
+
+  return ret;
+}
+
+/**
+ * g_mount_shadow:
+ * @mount: A #GMount.
+ *
+ * Increments the shadow count on @mount. Usually used by
+ * #GVolumeMonitor implementations when creating a shadow mount for
+ * @mount, see g_mount_is_shadowed() for more information. The caller
+ * will need to emit the #GMount::changed signal on @mount manually.
+ *
+ * Since: 2.20
+ **/
+void
+g_mount_shadow (GMount *mount)
+{
+  GMountPrivate *priv;
+
+  g_return_if_fail (G_IS_MOUNT (mount));
+
+  G_LOCK (priv_lock);
+  priv = get_private (mount);
+  priv->shadow_ref_count += 1;
+  G_UNLOCK (priv_lock);
+}
+
+/**
+ * g_mount_unshadow:
+ * @mount: A #GMount.
+ *
+ * Decrements the shadow count on @mount. Usually used by
+ * #GVolumeMonitor implementations when destroying a shadow mount for
+ * @mount, see g_mount_is_shadowed() for more information. The caller
+ * will need to emit the #GMount::changed signal on @mount manually.
+ *
+ * Since: 2.20
+ **/
+void
+g_mount_unshadow (GMount *mount)
+{
+  GMountPrivate *priv;
+
+  g_return_if_fail (G_IS_MOUNT (mount));
+
+  G_LOCK (priv_lock);
+  priv = get_private (mount);
+  priv->shadow_ref_count -= 1;
+  if (priv->shadow_ref_count < 0)
+    g_warning ("Shadow ref count on GMount is negative");
+  G_UNLOCK (priv_lock);
+}
+
+#define __G_MOUNT_C__
+#include "gioaliasdef.c"
diff --git a/gio/gmount.h b/gio/gmount.h
new file mode 100644
index 0000000..027960d
--- /dev/null
+++ b/gio/gmount.h
@@ -0,0 +1,189 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2008 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_MOUNT_H__
+#define __G_MOUNT_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_MOUNT            (g_mount_get_type ())
+#define G_MOUNT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_MOUNT, GMount))
+#define G_IS_MOUNT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_MOUNT))
+#define G_MOUNT_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_MOUNT, GMountIface))
+
+typedef struct _GMountIface    GMountIface;
+
+/**
+ * GMountIface:
+ * @g_iface: The parent interface.
+ * @changed: Changed signal that is emitted when the mount's state has changed.
+ * @unmounted: The unmounted signal that is emitted when the #GMount have been unmounted. If the recipient is holding references to the object they should release them so the object can be finalized.
+ * @get_root: Gets a #GFile to the root directory of the #GMount.
+ * @get_name: Gets a string containing the name of the #GMount.
+ * @get_icon: Gets a #GIcon for the #GMount.
+ * @get_uuid: Gets the UUID for the #GMount. The reference is typically based on the file system UUID for the mount in question and should be considered an opaque string. Returns %NULL if there is no UUID available.
+ * @get_volume: Gets a #GVolume the mount is located on. Returns %NULL if the #GMount is not associated with a #GVolume.
+ * @get_drive: Gets a #GDrive the volume of the mount is located on. Returns %NULL if the #GMount is not associated with a #GDrive or a #GVolume. This is convenience method for getting the #GVolume and using that to get the #GDrive.
+ * @can_unmount: Checks if a #GMount can be unmounted.
+ * @can_eject: Checks if a #GMount can be ejected.
+ * @unmount: Starts unmounting a #GMount.
+ * @unmount_finish: Finishes an unmounting operation.
+ * @eject: Starts ejecting a #GMount.
+ * @eject_finish: Finishes an eject operation.
+ * @remount: Starts remounting a #GMount.
+ * @remount_finish: Finishes a remounting operation.
+ * @guess_content_type: Starts guessing the type of the content of a #GMount.
+ *     See g_mount_guess_content_type() for more information on content
+ *     type guessing. This operation was added in 2.18.
+ * @guess_content_type_finish: Finishes a contenet type guessing operation. Added in 2.18.
+ * @guess_content_type_sync: Synchronous variant of @guess_content_type. Added in 2.18
+ *
+ * Interface for implementing operations for mounts.
+ **/
+struct _GMountIface
+{
+  GTypeInterface g_iface;
+
+  /* signals */
+
+  void        (* changed)                   (GMount              *mount);
+  void        (* unmounted)                 (GMount              *mount);
+
+  /* Virtual Table */
+
+  GFile     * (* get_root)                  (GMount              *mount);
+  char      * (* get_name)                  (GMount              *mount);
+  GIcon     * (* get_icon)                  (GMount              *mount);
+  char      * (* get_uuid)                  (GMount              *mount);
+  GVolume   * (* get_volume)                (GMount              *mount);
+  GDrive    * (* get_drive)                 (GMount              *mount);
+  gboolean    (* can_unmount)               (GMount              *mount);
+  gboolean    (* can_eject)                 (GMount              *mount);
+
+  void        (* unmount)                   (GMount              *mount,
+                                             GMountUnmountFlags   flags,
+                                             GCancellable        *cancellable,
+                                             GAsyncReadyCallback  callback,
+                                             gpointer             user_data);
+  gboolean    (* unmount_finish)            (GMount              *mount,
+                                             GAsyncResult        *result,
+                                             GError             **error);
+
+  void        (* eject)                     (GMount              *mount,
+                                             GMountUnmountFlags   flags,
+                                             GCancellable        *cancellable,
+                                             GAsyncReadyCallback  callback,
+                                             gpointer             user_data);
+  gboolean    (* eject_finish)              (GMount              *mount,
+                                             GAsyncResult        *result,
+                                             GError             **error);
+
+  void        (* remount)                   (GMount              *mount,
+                                             GMountMountFlags     flags,
+                                             GMountOperation     *mount_operation,
+                                             GCancellable        *cancellable,
+                                             GAsyncReadyCallback  callback,
+                                             gpointer             user_data);
+  gboolean    (* remount_finish)            (GMount              *mount,
+                                             GAsyncResult        *result,
+                                             GError             **error);
+
+  void        (* guess_content_type)        (GMount              *mount,
+                                             gboolean             force_rescan,
+                                             GCancellable        *cancellable,
+                                             GAsyncReadyCallback  callback,
+                                             gpointer             user_data);
+  gchar    ** (* guess_content_type_finish) (GMount              *mount,
+                                             GAsyncResult        *result,
+                                             GError             **error);
+  gchar    ** (* guess_content_type_sync)   (GMount              *mount,
+                                             gboolean             force_rescan,
+                                             GCancellable        *cancellable,
+                                             GError             **error);
+};
+
+GType       g_mount_get_type                  (void) G_GNUC_CONST;
+
+GFile     * g_mount_get_root                  (GMount              *mount);
+char      * g_mount_get_name                  (GMount              *mount);
+GIcon     * g_mount_get_icon                  (GMount              *mount);
+char      * g_mount_get_uuid                  (GMount              *mount);
+GVolume   * g_mount_get_volume                (GMount              *mount);
+GDrive    * g_mount_get_drive                 (GMount              *mount);
+gboolean    g_mount_can_unmount               (GMount              *mount);
+gboolean    g_mount_can_eject                 (GMount              *mount);
+
+void        g_mount_unmount                   (GMount              *mount,
+                                               GMountUnmountFlags   flags,
+                                               GCancellable        *cancellable,
+                                               GAsyncReadyCallback  callback,
+                                               gpointer             user_data);
+gboolean    g_mount_unmount_finish            (GMount              *mount,
+                                               GAsyncResult        *result,
+                                               GError             **error);
+
+void        g_mount_eject                     (GMount              *mount,
+                                               GMountUnmountFlags   flags,
+                                               GCancellable        *cancellable,
+                                               GAsyncReadyCallback  callback,
+                                               gpointer             user_data);
+gboolean    g_mount_eject_finish              (GMount              *mount,
+                                               GAsyncResult        *result,
+                                               GError             **error);
+
+void        g_mount_remount                   (GMount              *mount,
+                                               GMountMountFlags     flags,
+                                               GMountOperation     *mount_operation,
+                                               GCancellable        *cancellable,
+                                               GAsyncReadyCallback  callback,
+                                               gpointer             user_data);
+gboolean    g_mount_remount_finish            (GMount              *mount,
+                                               GAsyncResult        *result,
+                                               GError             **error);
+
+void        g_mount_guess_content_type        (GMount              *mount,
+                                               gboolean             force_rescan,
+                                               GCancellable        *cancellable,
+                                               GAsyncReadyCallback  callback,
+                                               gpointer             user_data);
+gchar    ** g_mount_guess_content_type_finish (GMount              *mount,
+                                               GAsyncResult        *result,
+                                               GError             **error);
+gchar    ** g_mount_guess_content_type_sync   (GMount              *mount,
+                                               gboolean             force_rescan,
+                                               GCancellable        *cancellable,
+                                               GError             **error);
+
+gboolean    g_mount_is_shadowed               (GMount              *mount);
+void        g_mount_shadow                    (GMount              *mount);
+void        g_mount_unshadow                  (GMount              *mount);
+
+G_END_DECLS
+
+#endif /* __G_MOUNT_H__ */
diff --git a/gio/gmountoperation.c b/gio/gmountoperation.c
new file mode 100644
index 0000000..18311f9
--- /dev/null
+++ b/gio/gmountoperation.c
@@ -0,0 +1,665 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gmountoperation.h"
+#include "gioenumtypes.h"
+#include "gio-marshal.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/** 
+ * SECTION:gmountoperation
+ * @short_description: Authentication methods for mountable locations
+ * @include: gio/gio.h
+ *
+ * #GMountOperation provides a mechanism for authenticating mountable 
+ * operations, such as loop mounting files, hard drive partitions or 
+ * server locations. 
+ *
+ * Mounting operations are handed a #GMountOperation that then can use 
+ * if they require any privileges or authentication for their volumes 
+ * to be mounted (e.g. a hard disk partition or an encrypted filesystem), 
+ * or if they are implementing a remote server protocol which requires 
+ * user credentials such as FTP or WebDAV.
+ *
+ * Users should instantiate a subclass of this that implements all
+ * the various callbacks to show the required dialogs, such as 
+ * #GtkMountOperation.
+ **/
+
+G_DEFINE_TYPE (GMountOperation, g_mount_operation, G_TYPE_OBJECT);
+
+enum {
+  ASK_PASSWORD,
+  ASK_QUESTION,
+  REPLY,
+  ABORTED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+struct _GMountOperationPrivate {
+  char *password;
+  char *user;
+  char *domain;
+  gboolean anonymous;
+  GPasswordSave password_save;
+  int choice;
+};
+
+enum {
+  PROP_0,
+  PROP_USERNAME,
+  PROP_PASSWORD,
+  PROP_ANONYMOUS,
+  PROP_DOMAIN,
+  PROP_PASSWORD_SAVE,
+  PROP_CHOICE
+};
+
+static void 
+g_mount_operation_set_property (GObject      *object,
+                                guint         prop_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+  GMountOperation *operation;
+
+  operation = G_MOUNT_OPERATION (object);
+
+  switch (prop_id)
+    {
+    case PROP_USERNAME:
+      g_mount_operation_set_username (operation, 
+                                      g_value_get_string (value));
+      break;
+   
+    case PROP_PASSWORD:
+      g_mount_operation_set_password (operation, 
+                                      g_value_get_string (value));
+      break;
+
+    case PROP_ANONYMOUS:
+      g_mount_operation_set_anonymous (operation, 
+                                       g_value_get_boolean (value));
+      break;
+
+    case PROP_DOMAIN:
+      g_mount_operation_set_domain (operation, 
+                                    g_value_get_string (value));
+      break;
+
+    case PROP_PASSWORD_SAVE:
+      g_mount_operation_set_password_save (operation, 
+                                           g_value_get_enum (value));
+      break;
+
+    case PROP_CHOICE:
+      g_mount_operation_set_choice (operation, 
+                                    g_value_get_int (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+static void 
+g_mount_operation_get_property (GObject    *object,
+                                guint       prop_id,
+                                GValue     *value,
+                                GParamSpec *pspec)
+{
+  GMountOperation *operation;
+  GMountOperationPrivate *priv;
+
+  operation = G_MOUNT_OPERATION (object);
+  priv = operation->priv;
+  
+  switch (prop_id)
+    {
+    case PROP_USERNAME:
+      g_value_set_string (value, priv->user);
+      break;
+
+    case PROP_PASSWORD:
+      g_value_set_string (value, priv->password);
+      break;
+
+    case PROP_ANONYMOUS:
+      g_value_set_boolean (value, priv->anonymous);
+      break;
+
+    case PROP_DOMAIN:
+      g_value_set_string (value, priv->domain);
+      break;
+
+    case PROP_PASSWORD_SAVE:
+      g_value_set_enum (value, priv->password_save);
+      break;
+
+    case PROP_CHOICE:
+      g_value_set_int (value, priv->choice);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+static void
+g_mount_operation_finalize (GObject *object)
+{
+  GMountOperation *operation;
+  GMountOperationPrivate *priv;
+
+  operation = G_MOUNT_OPERATION (object);
+
+  priv = operation->priv;
+  
+  g_free (priv->password);
+  g_free (priv->user);
+  g_free (priv->domain);
+
+  G_OBJECT_CLASS (g_mount_operation_parent_class)->finalize (object);
+}
+
+static gboolean
+reply_non_handled_in_idle (gpointer data)
+{
+  GMountOperation *op = data;
+
+  g_mount_operation_reply (op, G_MOUNT_OPERATION_UNHANDLED);
+  return FALSE;
+}
+
+static void
+ask_password (GMountOperation *op,
+	      const char      *message,
+	      const char      *default_user,
+	      const char      *default_domain,
+	      GAskPasswordFlags flags)
+{
+  g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+		   reply_non_handled_in_idle,
+		   g_object_ref (op),
+		   g_object_unref);
+}
+  
+static void
+ask_question (GMountOperation *op,
+	      const char      *message,
+	      const char      *choices[])
+{
+  g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+		   reply_non_handled_in_idle,
+		   g_object_ref (op),
+		   g_object_unref);
+}
+
+static void
+g_mount_operation_class_init (GMountOperationClass *klass)
+{
+  GObjectClass *object_class;
+  
+  g_type_class_add_private (klass, sizeof (GMountOperationPrivate));
+ 
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->finalize = g_mount_operation_finalize;
+  object_class->get_property = g_mount_operation_get_property;
+  object_class->set_property = g_mount_operation_set_property;
+  
+  klass->ask_password = ask_password;
+  klass->ask_question = ask_question;
+  
+  /**
+   * GMountOperation::ask-password:
+   * @op: a #GMountOperation requesting a password.
+   * @message: string containing a message to display to the user.
+   * @default_user: string containing the default user name.
+   * @default_domain: string containing the default domain.
+   * @flags: a set of #GAskPasswordFlags.
+   *
+   * Emitted when a mount operation asks the user for a password.
+   *
+   * If the message contains a line break, the first line should be
+   * presented as a heading. For example, it may be used as the
+   * primary text in a #GtkMessageDialog.
+   */
+  signals[ASK_PASSWORD] =
+    g_signal_new (I_("ask-password"),
+		  G_TYPE_FROM_CLASS (object_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GMountOperationClass, ask_password),
+		  NULL, NULL,
+		  _gio_marshal_VOID__STRING_STRING_STRING_FLAGS,
+		  G_TYPE_NONE, 4,
+		  G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_ASK_PASSWORD_FLAGS);
+		  
+  /**
+   * GMountOperation::ask-question:
+   * @op: a #GMountOperation asking a question.
+   * @message: string containing a message to display to the user.
+   * @choices: an array of strings for each possible choice.
+   *
+   * Emitted when asking the user a question and gives a list of
+   * choices for the user to choose from.
+   *
+   * If the message contains a line break, the first line should be
+   * presented as a heading. For example, it may be used as the
+   * primary text in a #GtkMessageDialog.
+   */
+  signals[ASK_QUESTION] =
+    g_signal_new (I_("ask-question"),
+		  G_TYPE_FROM_CLASS (object_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GMountOperationClass, ask_question),
+		  NULL, NULL,
+		  _gio_marshal_VOID__STRING_BOXED,
+		  G_TYPE_NONE, 2,
+		  G_TYPE_STRING, G_TYPE_STRV);
+		  
+  /**
+   * GMountOperation::reply:
+   * @op: a #GMountOperation.
+   * @result: a #GMountOperationResult indicating how the request was handled
+   *
+   * Emitted when the user has replied to the mount operation.
+   */
+  signals[REPLY] =
+    g_signal_new (I_("reply"),
+		  G_TYPE_FROM_CLASS (object_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GMountOperationClass, reply),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__ENUM,
+		  G_TYPE_NONE, 1,
+		  G_TYPE_MOUNT_OPERATION_RESULT);
+
+  /**
+   * GMountOperation::aborted:
+   *
+   * Emitted by the backend when e.g. a device becomes unavailable
+   * while a mount operation is in progress.
+   *
+   * Implementations of GMountOperation should handle this signal
+   * by dismissing open password dialogs.
+   *
+   * Since: 2.20
+   */
+  signals[ABORTED] =
+    g_signal_new (I_("aborted"),
+		  G_TYPE_FROM_CLASS (object_class),
+		  G_SIGNAL_RUN_LAST,
+		  G_STRUCT_OFFSET (GMountOperationClass, aborted),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__VOID,
+		  G_TYPE_NONE, 0);
+
+  /**
+   * GMountOperation:username:
+   *
+   * The user name that is used for authentication when carrying out
+   * the mount operation.
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_USERNAME,
+                                   g_param_spec_string ("username",
+                                                        P_("Username"),
+                                                        P_("The user name"),
+                                                        NULL,
+                                                        G_PARAM_READWRITE|
+                                                        G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  /**
+   * GMountOperation:password:
+   *
+   * The password that is used for authentication when carrying out
+   * the mount operation.
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_PASSWORD,
+                                   g_param_spec_string ("password",
+                                                        P_("Password"),
+                                                        P_("The password"),
+                                                        NULL,
+                                                        G_PARAM_READWRITE|
+                                                        G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  /**
+   * GMountOperation:anonymous:
+   * 
+   * Whether to use an anonymous user when authenticating.
+   */
+  g_object_class_install_property (object_class,
+                                   PROP_ANONYMOUS,
+                                   g_param_spec_boolean ("anonymous",
+                                                         P_("Anonymous"),
+                                                         P_("Whether to use an anonymous user"),
+                                                         FALSE,
+                                                         G_PARAM_READWRITE|
+                                                         G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  /**
+   * GMountOperation:domain:
+   *
+   * The domain to use for the mount operation.
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_DOMAIN,
+                                   g_param_spec_string ("domain",
+                                                        P_("Domain"),
+                                                        P_("The domain of the mount operation"),
+                                                        NULL,
+                                                        G_PARAM_READWRITE|
+                                                        G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  /**
+   * GMountOperation:password-save:
+   *
+   * Determines if and how the password information should be saved. 
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_PASSWORD_SAVE,
+                                   g_param_spec_enum ("password-save",
+                                                      P_("Password save"),
+                                                      P_("How passwords should be saved"),
+                                                      G_TYPE_PASSWORD_SAVE,
+                                                      G_PASSWORD_SAVE_NEVER,
+                                                      G_PARAM_READWRITE|
+                                                      G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+
+  /**
+   * GMountOperation:choice:
+   *
+   * The index of the user's choice when a question is asked during the 
+   * mount operation. See the #GMountOperation::ask-question signal.
+   */ 
+  g_object_class_install_property (object_class,
+                                   PROP_CHOICE,
+                                   g_param_spec_int ("choice",
+                                                     P_("Choice"),
+                                                     P_("The users choice"),
+                                                     0, G_MAXINT, 0,
+                                                     G_PARAM_READWRITE|
+                                                     G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_mount_operation_init (GMountOperation *operation)
+{
+  operation->priv = G_TYPE_INSTANCE_GET_PRIVATE (operation,
+						 G_TYPE_MOUNT_OPERATION,
+						 GMountOperationPrivate);
+}
+
+/**
+ * g_mount_operation_new:
+ * 
+ * Creates a new mount operation.
+ * 
+ * Returns: a #GMountOperation.
+ **/
+GMountOperation *
+g_mount_operation_new (void)
+{
+  return g_object_new (G_TYPE_MOUNT_OPERATION, NULL);
+}
+
+/**
+ * g_mount_operation_get_username
+ * @op: a #GMountOperation.
+ * 
+ * Get the user name from the mount operation.
+ *
+ * Returns: a string containing the user name.
+ **/
+const char *
+g_mount_operation_get_username (GMountOperation *op)
+{
+  g_return_val_if_fail (G_IS_MOUNT_OPERATION (op), NULL);
+  return op->priv->user;
+}
+
+/**
+ * g_mount_operation_set_username:
+ * @op: a #GMountOperation.
+ * @username: input username.
+ *
+ * Sets the user name within @op to @username.
+ **/
+void
+g_mount_operation_set_username (GMountOperation *op,
+				const char      *username)
+{
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  g_free (op->priv->user);
+  op->priv->user = g_strdup (username);
+  g_object_notify (G_OBJECT (op), "username");
+}
+
+/**
+ * g_mount_operation_get_password:
+ * @op: a #GMountOperation.
+ *
+ * Gets a password from the mount operation. 
+ *
+ * Returns: a string containing the password within @op.
+ **/
+const char *
+g_mount_operation_get_password (GMountOperation *op)
+{
+  g_return_val_if_fail (G_IS_MOUNT_OPERATION (op), NULL);
+  return op->priv->password;
+}
+
+/**
+ * g_mount_operation_set_password:
+ * @op: a #GMountOperation.
+ * @password: password to set.
+ * 
+ * Sets the mount operation's password to @password.  
+ *
+ **/
+void
+g_mount_operation_set_password (GMountOperation *op,
+				const char      *password)
+{
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  g_free (op->priv->password);
+  op->priv->password = g_strdup (password);
+  g_object_notify (G_OBJECT (op), "password");
+}
+
+/**
+ * g_mount_operation_get_anonymous:
+ * @op: a #GMountOperation.
+ * 
+ * Check to see whether the mount operation is being used 
+ * for an anonymous user.
+ * 
+ * Returns: %TRUE if mount operation is anonymous. 
+ **/
+gboolean
+g_mount_operation_get_anonymous (GMountOperation *op)
+{
+  g_return_val_if_fail (G_IS_MOUNT_OPERATION (op), FALSE);
+  return op->priv->anonymous;
+}
+
+/**
+ * g_mount_operation_set_anonymous:
+ * @op: a #GMountOperation.
+ * @anonymous: boolean value.
+ * 
+ * Sets the mount operation to use an anonymous user if @anonymous is %TRUE.
+ **/  
+void
+g_mount_operation_set_anonymous (GMountOperation *op,
+				 gboolean         anonymous)
+{
+  GMountOperationPrivate *priv;
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  priv = op->priv;
+
+  if (priv->anonymous != anonymous)
+    {
+      priv->anonymous = anonymous;
+      g_object_notify (G_OBJECT (op), "anonymous");
+    }
+}
+
+/**
+ * g_mount_operation_get_domain:
+ * @op: a #GMountOperation.
+ * 
+ * Gets the domain of the mount operation.
+ * 
+ * Returns: a string set to the domain. 
+ **/
+const char *
+g_mount_operation_get_domain (GMountOperation *op)
+{
+  g_return_val_if_fail (G_IS_MOUNT_OPERATION (op), NULL);
+  return op->priv->domain;
+}
+
+/**
+ * g_mount_operation_set_domain:
+ * @op: a #GMountOperation.
+ * @domain: the domain to set.
+ * 
+ * Sets the mount operation's domain. 
+ **/  
+void
+g_mount_operation_set_domain (GMountOperation *op,
+			      const char      *domain)
+{
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  g_free (op->priv->domain);
+  op->priv->domain = g_strdup (domain);
+  g_object_notify (G_OBJECT (op), "domain");
+}
+
+/**
+ * g_mount_operation_get_password_save:
+ * @op: a #GMountOperation.
+ * 
+ * Gets the state of saving passwords for the mount operation.
+ *
+ * Returns: a #GPasswordSave flag. 
+ **/  
+
+GPasswordSave
+g_mount_operation_get_password_save (GMountOperation *op)
+{
+  g_return_val_if_fail (G_IS_MOUNT_OPERATION (op), G_PASSWORD_SAVE_NEVER);
+  return op->priv->password_save;
+}
+
+/**
+ * g_mount_operation_set_password_save:
+ * @op: a #GMountOperation.
+ * @save: a set of #GPasswordSave flags.
+ * 
+ * Sets the state of saving passwords for the mount operation.
+ * 
+ **/   
+void
+g_mount_operation_set_password_save (GMountOperation *op,
+				     GPasswordSave    save)
+{
+  GMountOperationPrivate *priv;
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  priv = op->priv;
+ 
+  if (priv->password_save != save)
+    {
+      priv->password_save = save;
+      g_object_notify (G_OBJECT (op), "password-save");
+    }
+}
+
+/**
+ * g_mount_operation_get_choice:
+ * @op: a #GMountOperation.
+ * 
+ * Gets a choice from the mount operation.
+ *
+ * Returns: an integer containing an index of the user's choice from 
+ * the choice's list, or %0.
+ **/
+int
+g_mount_operation_get_choice (GMountOperation *op)
+{
+  g_return_val_if_fail (G_IS_MOUNT_OPERATION (op), 0);
+  return op->priv->choice;
+}
+
+/**
+ * g_mount_operation_set_choice:
+ * @op: a #GMountOperation.
+ * @choice: an integer.
+ *
+ * Sets a default choice for the mount operation.
+ **/
+void
+g_mount_operation_set_choice (GMountOperation *op,
+			      int              choice)
+{
+  GMountOperationPrivate *priv;
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  priv = op->priv;
+  if (priv->choice != choice)
+    {
+      priv->choice = choice;
+      g_object_notify (G_OBJECT (op), "choice");
+    }
+}
+
+/**
+ * g_mount_operation_reply:
+ * @op: a #GMountOperation
+ * @result: a #GMountOperationResult
+ * 
+ * Emits the #GMountOperation::reply signal.
+ **/
+void
+g_mount_operation_reply (GMountOperation *op,
+			 GMountOperationResult result)
+{
+  g_return_if_fail (G_IS_MOUNT_OPERATION (op));
+  g_signal_emit (op, signals[REPLY], 0, result);
+}
+
+#define __G_MOUNT_OPERATION_C__
+#include "gioaliasdef.c"
diff --git a/gio/gmountoperation.h b/gio/gmountoperation.h
new file mode 100644
index 0000000..e6ba51a
--- /dev/null
+++ b/gio/gmountoperation.h
@@ -0,0 +1,119 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_MOUNT_OPERATION_H__
+#define __G_MOUNT_OPERATION_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_MOUNT_OPERATION         (g_mount_operation_get_type ())
+#define G_MOUNT_OPERATION(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_MOUNT_OPERATION, GMountOperation))
+#define G_MOUNT_OPERATION_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_MOUNT_OPERATION, GMountOperationClass))
+#define G_IS_MOUNT_OPERATION(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_MOUNT_OPERATION))
+#define G_IS_MOUNT_OPERATION_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_MOUNT_OPERATION))
+#define G_MOUNT_OPERATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_MOUNT_OPERATION, GMountOperationClass))
+
+/**
+ * GMountOperation:
+ *
+ * Class for providing authentication methods for mounting operations,
+ * such as mounting a file locally, or authenticating with a server.
+ **/
+typedef struct _GMountOperationClass   GMountOperationClass;
+typedef struct _GMountOperationPrivate GMountOperationPrivate;
+
+struct _GMountOperation
+{
+  GObject parent_instance;
+
+  GMountOperationPrivate *priv;
+};
+
+struct _GMountOperationClass
+{
+  GObjectClass parent_class;
+
+  /* signals: */
+
+  void (* ask_password) (GMountOperation       *op,
+			 const char            *message,
+			 const char            *default_user,
+			 const char            *default_domain,
+			 GAskPasswordFlags      flags);
+
+  void (* ask_question) (GMountOperation       *op,
+			 const char            *message,
+			 const char            *choices[]);
+
+  void (* reply)        (GMountOperation       *op,
+			 GMountOperationResult  result);
+
+  void (* aborted)      (GMountOperation       *op);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+  void (*_g_reserved6) (void);
+  void (*_g_reserved7) (void);
+  void (*_g_reserved8) (void);
+  void (*_g_reserved9) (void);
+  void (*_g_reserved10) (void);
+  void (*_g_reserved11) (void);
+};
+
+GType             g_mount_operation_get_type      (void) G_GNUC_CONST;
+GMountOperation * g_mount_operation_new           (void);
+
+const char *  g_mount_operation_get_username      (GMountOperation *op);
+void          g_mount_operation_set_username      (GMountOperation *op,
+						   const char      *username);
+const char *  g_mount_operation_get_password      (GMountOperation *op);
+void          g_mount_operation_set_password      (GMountOperation *op,
+						   const char      *password);
+gboolean      g_mount_operation_get_anonymous     (GMountOperation *op);
+void          g_mount_operation_set_anonymous     (GMountOperation *op,
+						   gboolean         anonymous);
+const char *  g_mount_operation_get_domain        (GMountOperation *op);
+void          g_mount_operation_set_domain        (GMountOperation *op,
+						   const char      *domain);
+GPasswordSave g_mount_operation_get_password_save (GMountOperation *op);
+void          g_mount_operation_set_password_save (GMountOperation *op,
+						   GPasswordSave    save);
+int           g_mount_operation_get_choice        (GMountOperation *op);
+void          g_mount_operation_set_choice        (GMountOperation *op,
+						   int              choice);
+void          g_mount_operation_reply             (GMountOperation *op,
+						   GMountOperationResult result);
+
+G_END_DECLS
+
+#endif /* __G_MOUNT_OPERATION_H__ */
diff --git a/gio/gmountprivate.h b/gio/gmountprivate.h
new file mode 100644
index 0000000..74e9852
--- /dev/null
+++ b/gio/gmountprivate.h
@@ -0,0 +1,35 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_VOLUMEPRIV_H__
+#define __G_VOLUMEPRIV_H__
+
+#include <gio/gvolume.h>
+
+G_BEGIN_DECLS
+
+GMount *_g_mount_get_for_mount_path (const char *mount_path,
+				     GCancellable *cancellable);
+
+G_END_DECLS
+
+#endif /* __G_VOLUMEPRIV_H__ */
diff --git a/gio/gnativevolumemonitor.c b/gio/gnativevolumemonitor.c
new file mode 100644
index 0000000..c325131
--- /dev/null
+++ b/gio/gnativevolumemonitor.c
@@ -0,0 +1,34 @@
+#include "config.h"
+
+#include <string.h>
+
+#include <glib.h>
+#include "gnativevolumemonitor.h"
+
+#include "gioalias.h"
+
+G_DEFINE_ABSTRACT_TYPE (GNativeVolumeMonitor, g_native_volume_monitor, G_TYPE_VOLUME_MONITOR);
+
+static void
+g_native_volume_monitor_finalize (GObject *object)
+{
+  G_OBJECT_CLASS (g_native_volume_monitor_parent_class)->finalize (object);
+}
+
+
+static void
+g_native_volume_monitor_class_init (GNativeVolumeMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_native_volume_monitor_finalize;
+}
+
+
+static void
+g_native_volume_monitor_init (GNativeVolumeMonitor *native_monitor)
+{
+}
+
+#define __G_NATIVE_VOLUME_MONITOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/gnativevolumemonitor.h b/gio/gnativevolumemonitor.h
new file mode 100644
index 0000000..9c859fe
--- /dev/null
+++ b/gio/gnativevolumemonitor.h
@@ -0,0 +1,36 @@
+#ifndef __G_NATIVE_VOLUME_MONITOR_H__
+#define __G_NATIVE_VOLUME_MONITOR_H__
+
+#include <gio/gvolumemonitor.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_NATIVE_VOLUME_MONITOR        (g_native_volume_monitor_get_type ())
+#define G_NATIVE_VOLUME_MONITOR(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_NATIVE_VOLUME_MONITOR, GNativeVolumeMonitor))
+#define G_NATIVE_VOLUME_MONITOR_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_NATIVE_VOLUME_MONITOR, GNativeVolumeMonitorClass))
+#define G_IS_NATIVE_VOLUME_MONITOR(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_NATIVE_VOLUME_MONITOR))
+#define G_IS_NATIVE_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_NATIVE_VOLUME_MONITOR))
+
+#define G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME "gio-native-volume-monitor"
+
+typedef struct _GNativeVolumeMonitor      GNativeVolumeMonitor;
+typedef struct _GNativeVolumeMonitorClass GNativeVolumeMonitorClass;
+
+struct _GNativeVolumeMonitor
+{
+  GVolumeMonitor parent_instance;
+};
+
+struct _GNativeVolumeMonitorClass
+{
+  GVolumeMonitorClass parent_class;
+
+  GMount * (* get_mount_for_mount_path) (const char   *mount_path,
+                                         GCancellable *cancellable);
+};
+
+GType g_native_volume_monitor_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __G_NATIVE_VOLUME_MONITOR_H__ */
diff --git a/gio/goutputstream.c b/gio/goutputstream.c
new file mode 100644
index 0000000..3f7155d
--- /dev/null
+++ b/gio/goutputstream.c
@@ -0,0 +1,1349 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "goutputstream.h"
+#include "gcancellable.h"
+#include "gasyncresult.h"
+#include "gsimpleasyncresult.h"
+#include "ginputstream.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:goutputstream
+ * @short_description: Base class for implementing streaming output
+ * @include: gio/gio.h
+ *
+ * GOutputStream has functions to write to a stream (g_output_stream_write()),
+ * to close a stream (g_output_stream_close()) and to flush pending writes
+ * (g_output_stream_flush()). 
+ *
+ * To copy the content of an input stream to an output stream without 
+ * manually handling the reads and writes, use g_output_stream_splice(). 
+ *
+ * All of these functions have async variants too.
+ **/
+
+G_DEFINE_TYPE (GOutputStream, g_output_stream, G_TYPE_OBJECT);
+
+struct _GOutputStreamPrivate {
+  guint closed : 1;
+  guint pending : 1;
+  guint cancelled : 1;
+  GAsyncReadyCallback outstanding_callback;
+};
+
+static gssize   g_output_stream_real_splice        (GOutputStream             *stream,
+						    GInputStream              *source,
+						    GOutputStreamSpliceFlags   flags,
+						    GCancellable              *cancellable,
+						    GError                   **error);
+static void     g_output_stream_real_write_async   (GOutputStream             *stream,
+						    const void                *buffer,
+						    gsize                      count,
+						    int                        io_priority,
+						    GCancellable              *cancellable,
+						    GAsyncReadyCallback        callback,
+						    gpointer                   data);
+static gssize   g_output_stream_real_write_finish  (GOutputStream             *stream,
+						    GAsyncResult              *result,
+						    GError                   **error);
+static void     g_output_stream_real_splice_async  (GOutputStream             *stream,
+						    GInputStream              *source,
+						    GOutputStreamSpliceFlags   flags,
+						    int                        io_priority,
+						    GCancellable              *cancellable,
+						    GAsyncReadyCallback        callback,
+						    gpointer                   data);
+static gssize   g_output_stream_real_splice_finish (GOutputStream             *stream,
+						    GAsyncResult              *result,
+						    GError                   **error);
+static void     g_output_stream_real_flush_async   (GOutputStream             *stream,
+						    int                        io_priority,
+						    GCancellable              *cancellable,
+						    GAsyncReadyCallback        callback,
+						    gpointer                   data);
+static gboolean g_output_stream_real_flush_finish  (GOutputStream             *stream,
+						    GAsyncResult              *result,
+						    GError                   **error);
+static void     g_output_stream_real_close_async   (GOutputStream             *stream,
+						    int                        io_priority,
+						    GCancellable              *cancellable,
+						    GAsyncReadyCallback        callback,
+						    gpointer                   data);
+static gboolean g_output_stream_real_close_finish  (GOutputStream             *stream,
+						    GAsyncResult              *result,
+						    GError                   **error);
+
+static void
+g_output_stream_finalize (GObject *object)
+{
+  GOutputStream *stream;
+
+  stream = G_OUTPUT_STREAM (object);
+
+  G_OBJECT_CLASS (g_output_stream_parent_class)->finalize (object);
+}
+
+static void
+g_output_stream_dispose (GObject *object)
+{
+  GOutputStream *stream;
+
+  stream = G_OUTPUT_STREAM (object);
+  
+  if (!stream->priv->closed)
+    g_output_stream_close (stream, NULL, NULL);
+
+  G_OBJECT_CLASS (g_output_stream_parent_class)->dispose (object);
+}
+
+static void
+g_output_stream_class_init (GOutputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GOutputStreamPrivate));
+  
+  gobject_class->finalize = g_output_stream_finalize;
+  gobject_class->dispose = g_output_stream_dispose;
+
+  klass->splice = g_output_stream_real_splice;
+  
+  klass->write_async = g_output_stream_real_write_async;
+  klass->write_finish = g_output_stream_real_write_finish;
+  klass->splice_async = g_output_stream_real_splice_async;
+  klass->splice_finish = g_output_stream_real_splice_finish;
+  klass->flush_async = g_output_stream_real_flush_async;
+  klass->flush_finish = g_output_stream_real_flush_finish;
+  klass->close_async = g_output_stream_real_close_async;
+  klass->close_finish = g_output_stream_real_close_finish;
+}
+
+static void
+g_output_stream_init (GOutputStream *stream)
+{
+  stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+					      G_TYPE_OUTPUT_STREAM,
+					      GOutputStreamPrivate);
+}
+
+/**
+ * g_output_stream_write:
+ * @stream: a #GOutputStream.
+ * @buffer: the buffer containing the data to write. 
+ * @count: the number of bytes to write
+ * @cancellable: optional cancellable object
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Tries to write @count bytes from @buffer into the stream. Will block
+ * during the operation.
+ * 
+ * If count is zero returns zero and does nothing. A value of @count
+ * larger than %G_MAXSSIZE will cause a %G_IO_ERROR_INVALID_ARGUMENT error.
+ *
+ * On success, the number of bytes written to the stream is returned.
+ * It is not an error if this is not the same as the requested size, as it
+ * can happen e.g. on a partial i/o error, or if there is not enough
+ * storage in the stream. All writes either block until at least one byte
+ * is written, so zero is never returned (unless @count is zero).
+ * 
+ * If @cancellable is not NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error G_IO_ERROR_CANCELLED will be returned. If an
+ * operation was partially finished when the operation was cancelled the
+ * partial result will be returned, without an error.
+ *
+ * On error -1 is returned and @error is set accordingly.
+ * 
+ * Return value: Number of bytes written, or -1 on error
+ **/
+gssize
+g_output_stream_write (GOutputStream  *stream,
+		       const void     *buffer,
+		       gsize           count,
+		       GCancellable   *cancellable,
+		       GError        **error)
+{
+  GOutputStreamClass *class;
+  gssize res;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), -1);
+  g_return_val_if_fail (buffer != NULL, 0);
+
+  if (count == 0)
+    return 0;
+  
+  if (((gssize) count) < 0)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+		   _("Too large count value passed to %s"), G_STRFUNC);
+      return -1;
+    }
+
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+
+  if (class->write_fn == NULL) 
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Output stream doesn't implement write"));
+      return -1;
+    }
+  
+  if (!g_output_stream_set_pending (stream, error))
+    return -1;
+  
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+  
+  res = class->write_fn (stream, buffer, count, cancellable, error);
+  
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_output_stream_clear_pending (stream);
+
+  return res; 
+}
+
+/**
+ * g_output_stream_write_all:
+ * @stream: a #GOutputStream.
+ * @buffer: the buffer containing the data to write. 
+ * @count: the number of bytes to write
+ * @bytes_written: location to store the number of bytes that was 
+ *     written to the stream
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Tries to write @count bytes from @buffer into the stream. Will block
+ * during the operation.
+ * 
+ * This function is similar to g_output_stream_write(), except it tries to
+ * write as many bytes as requested, only stopping on an error.
+ *
+ * On a successful write of @count bytes, %TRUE is returned, and @bytes_written
+ * is set to @count.
+ * 
+ * If there is an error during the operation FALSE is returned and @error
+ * is set to indicate the error status, @bytes_written is updated to contain
+ * the number of bytes written into the stream before the error occurred.
+ *
+ * Return value: %TRUE on success, %FALSE if there was an error
+ **/
+gboolean
+g_output_stream_write_all (GOutputStream  *stream,
+			   const void     *buffer,
+			   gsize           count,
+			   gsize          *bytes_written,
+			   GCancellable   *cancellable,
+			   GError        **error)
+{
+  gsize _bytes_written;
+  gssize res;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+  g_return_val_if_fail (buffer != NULL, FALSE);
+
+  _bytes_written = 0;
+  while (_bytes_written < count)
+    {
+      res = g_output_stream_write (stream, (char *)buffer + _bytes_written, count - _bytes_written,
+				   cancellable, error);
+      if (res == -1)
+	{
+	  if (bytes_written)
+	    *bytes_written = _bytes_written;
+	  return FALSE;
+	}
+      
+      if (res == 0)
+	g_warning ("Write returned zero without error");
+
+      _bytes_written += res;
+    }
+  
+  if (bytes_written)
+    *bytes_written = _bytes_written;
+
+  return TRUE;
+}
+
+/**
+ * g_output_stream_flush:
+ * @stream: a #GOutputStream.
+ * @cancellable: optional cancellable object
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Flushed any outstanding buffers in the stream. Will block during 
+ * the operation. Closing the stream will implicitly cause a flush.
+ *
+ * This function is optional for inherited classes.
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
+ *
+ * Return value: %TRUE on success, %FALSE on error
+ **/
+gboolean
+g_output_stream_flush (GOutputStream  *stream,
+                       GCancellable   *cancellable,
+                       GError        **error)
+{
+  GOutputStreamClass *class;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+
+  if (!g_output_stream_set_pending (stream, error))
+    return FALSE;
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+
+  res = TRUE;
+  if (class->flush)
+    {
+      if (cancellable)
+	g_cancellable_push_current (cancellable);
+      
+      res = class->flush (stream, cancellable, error);
+      
+      if (cancellable)
+	g_cancellable_pop_current (cancellable);
+    }
+  
+  g_output_stream_clear_pending (stream);
+
+  return res;
+}
+
+/**
+ * g_output_stream_splice:
+ * @stream: a #GOutputStream.
+ * @source: a #GInputStream.
+ * @flags: a set of #GOutputStreamSpliceFlags.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ *
+ * Splices an input stream into an output stream.
+ *
+ * Returns: a #gssize containing the size of the data spliced.
+ **/
+gssize
+g_output_stream_splice (GOutputStream             *stream,
+			GInputStream              *source,
+			GOutputStreamSpliceFlags   flags,
+			GCancellable              *cancellable,
+			GError                   **error)
+{
+  GOutputStreamClass *class;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), -1);
+  g_return_val_if_fail (G_IS_INPUT_STREAM (source), -1);
+
+  if (g_input_stream_is_closed (source))
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                           _("Source stream is already closed"));
+      return -1;
+    }
+
+  if (!g_output_stream_set_pending (stream, error))
+    return -1;
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+
+  res = TRUE;
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+      
+  res = class->splice (stream, source, flags, cancellable, error);
+      
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  g_output_stream_clear_pending (stream);
+
+  return res;
+}
+
+static gssize
+g_output_stream_real_splice (GOutputStream             *stream,
+                             GInputStream              *source,
+                             GOutputStreamSpliceFlags   flags,
+                             GCancellable              *cancellable,
+                             GError                   **error)
+{
+  GOutputStreamClass *class = G_OUTPUT_STREAM_GET_CLASS (stream);
+  gssize n_read, n_written;
+  gssize bytes_copied;
+  char buffer[8192], *p;
+  gboolean res;
+
+  bytes_copied = 0;
+  if (class->write_fn == NULL) 
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                           _("Output stream doesn't implement write"));
+      res = FALSE;
+      goto notsupported;
+    }
+  
+  res = TRUE;
+  do 
+    {
+      n_read = g_input_stream_read (source, buffer, sizeof (buffer), cancellable, error);
+      if (n_read == -1)
+	{
+	  res = FALSE;
+	  break;
+	}
+	
+      if (n_read == 0)
+	break;
+
+      p = buffer;
+      while (n_read > 0)
+	{
+	  n_written = class->write_fn (stream, p, n_read, cancellable, error);
+	  if (n_written == -1)
+	    {
+	      res = FALSE;
+	      break;
+	    }
+
+	  p += n_written;
+	  n_read -= n_written;
+	  bytes_copied += n_written;
+	}
+    }
+  while (res);
+
+ notsupported:
+  if (!res)
+    error = NULL; /* Ignore further errors */
+
+  if (flags & G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE)
+    {
+      /* Don't care about errors in source here */
+      g_input_stream_close (source, cancellable, NULL);
+    }
+
+  if (flags & G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET)
+    {
+      /* But write errors on close are bad! */
+      if (!class->close_fn (stream, cancellable, error))
+	res = FALSE;
+    }
+
+  if (res)
+    return bytes_copied;
+  
+  return -1;
+}
+
+
+/**
+ * g_output_stream_close:
+ * @stream: A #GOutputStream.
+ * @cancellable: optional cancellable object
+ * @error: location to store the error occuring, or %NULL to ignore
+ *
+ * Closes the stream, releasing resources related to it.
+ *
+ * Once the stream is closed, all other operations will return %G_IO_ERROR_CLOSED.
+ * Closing a stream multiple times will not return an error.
+ *
+ * Closing a stream will automatically flush any outstanding buffers in the
+ * stream.
+ *
+ * Streams will be automatically closed when the last reference
+ * is dropped, but you might want to call this function to make sure 
+ * resources are released as early as possible.
+ *
+ * Some streams might keep the backing store of the stream (e.g. a file descriptor)
+ * open after the stream is closed. See the documentation for the individual
+ * stream for details.
+ *
+ * On failure the first error that happened will be reported, but the close
+ * operation will finish as much as possible. A stream that failed to
+ * close will still return %G_IO_ERROR_CLOSED for all operations. Still, it
+ * is important to check and report the error to the user, otherwise
+ * there might be a loss of data as all data might not be written.
+ * 
+ * If @cancellable is not NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
+ * Cancelling a close will still leave the stream closed, but there some streams
+ * can use a faster close that doesn't block to e.g. check errors. On
+ * cancellation (as with any error) there is no guarantee that all written
+ * data will reach the target. 
+ *
+ * Return value: %TRUE on success, %FALSE on failure
+ **/
+gboolean
+g_output_stream_close (GOutputStream  *stream,
+		       GCancellable   *cancellable,
+		       GError        **error)
+{
+  GOutputStreamClass *class;
+  gboolean res;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+
+  if (stream->priv->closed)
+    return TRUE;
+
+  if (!g_output_stream_set_pending (stream, error))
+    return FALSE;
+
+  if (cancellable)
+    g_cancellable_push_current (cancellable);
+
+  if (class->flush)
+    res = class->flush (stream, cancellable, error);
+  else
+    res = TRUE;
+  
+  if (!res)
+    {
+      /* flushing caused the error that we want to return,
+       * but we still want to close the underlying stream if possible
+       */
+      if (class->close_fn)
+	class->close_fn (stream, cancellable, NULL);
+    }
+  else
+    {
+      res = TRUE;
+      if (class->close_fn)
+	res = class->close_fn (stream, cancellable, error);
+    }
+  
+  if (cancellable)
+    g_cancellable_pop_current (cancellable);
+  
+  stream->priv->closed = TRUE;
+  g_output_stream_clear_pending (stream);
+  
+  return res;
+}
+
+static void
+async_ready_callback_wrapper (GObject      *source_object,
+                              GAsyncResult *res,
+                              gpointer      user_data)
+{
+  GOutputStream *stream = G_OUTPUT_STREAM (source_object);
+
+  g_output_stream_clear_pending (stream);
+  if (stream->priv->outstanding_callback)
+    (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+static void
+async_ready_close_callback_wrapper (GObject      *source_object,
+                                    GAsyncResult *res,
+                                    gpointer      user_data)
+{
+  GOutputStream *stream = G_OUTPUT_STREAM (source_object);
+
+  stream->priv->closed = TRUE;
+  g_output_stream_clear_pending (stream);
+  if (stream->priv->outstanding_callback)
+    (*stream->priv->outstanding_callback) (source_object, res, user_data);
+  g_object_unref (stream);
+}
+
+/**
+ * g_output_stream_write_async:
+ * @stream: A #GOutputStream.
+ * @buffer: the buffer containing the data to write. 
+ * @count: the number of bytes to write
+ * @io_priority: the io priority of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Request an asynchronous write of @count bytes from @buffer into 
+ * the stream. When the operation is finished @callback will be called.
+ * You can then call g_output_stream_write_finish() to get the result of the 
+ * operation.
+ *
+ * During an async request no other sync and async calls are allowed, 
+ * and will result in %G_IO_ERROR_PENDING errors. 
+ *
+ * A value of @count larger than %G_MAXSSIZE will cause a 
+ * %G_IO_ERROR_INVALID_ARGUMENT error.
+ *
+ * On success, the number of bytes written will be passed to the
+ * @callback. It is not an error if this is not the same as the 
+ * requested size, as it can happen e.g. on a partial I/O error, 
+ * but generally we try to write as many bytes as requested. 
+ *
+ * Any outstanding I/O request with higher priority (lower numerical 
+ * value) will be executed before an outstanding request with lower 
+ * priority. Default priority is %G_PRIORITY_DEFAULT.
+ *
+ * The asyncronous methods have a default fallback that uses threads 
+ * to implement asynchronicity, so they are optional for inheriting 
+ * classes. However, if you override one you must override all.
+ *
+ * For the synchronous, blocking version of this function, see 
+ * g_output_stream_write().
+ **/
+void
+g_output_stream_write_async (GOutputStream       *stream,
+			     const void          *buffer,
+			     gsize                count,
+			     int                  io_priority,
+			     GCancellable        *cancellable,
+			     GAsyncReadyCallback  callback,
+			     gpointer             user_data)
+{
+  GOutputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
+  g_return_if_fail (buffer != NULL);
+
+  if (count == 0)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  callback,
+					  user_data,
+					  g_output_stream_write_async);
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+
+  if (((gssize) count) < 0)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (stream),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+					   _("Too large count value passed to %s"),
+					   G_STRFUNC);
+      return;
+    }
+
+  if (!g_output_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  class->write_async (stream, buffer, count, io_priority, cancellable,
+		      async_ready_callback_wrapper, user_data);
+}
+
+/**
+ * g_output_stream_write_finish:
+ * @stream: a #GOutputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes a stream write operation.
+ * 
+ * Returns: a #gssize containing the number of bytes written to the stream.
+ **/
+gssize
+g_output_stream_write_finish (GOutputStream  *stream,
+                              GAsyncResult   *result,
+                              GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  GOutputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), -1);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), -1);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return -1;
+
+      /* Special case writes of 0 bytes */
+      if (g_simple_async_result_get_source_tag (simple) == g_output_stream_write_async)
+	return 0;
+    }
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+  return class->write_finish (stream, result, error);
+}
+
+typedef struct {
+  GInputStream *source;
+  gpointer user_data;
+  GAsyncReadyCallback callback;
+} SpliceUserData;
+
+static void
+async_ready_splice_callback_wrapper (GObject      *source_object,
+                                     GAsyncResult *res,
+                                     gpointer     _data)
+{
+  GOutputStream *stream = G_OUTPUT_STREAM (source_object);
+  SpliceUserData *data = _data;
+  
+  g_output_stream_clear_pending (stream);
+  
+  if (data->callback)
+    (*data->callback) (source_object, res, data->user_data);
+  
+  g_object_unref (stream);
+  g_object_unref (data->source);
+  g_free (data);
+}
+
+/**
+ * g_output_stream_splice_async:
+ * @stream: a #GOutputStream.
+ * @source: a #GInputStream. 
+ * @flags: a set of #GOutputStreamSpliceFlags.
+ * @io_priority: the io priority of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @callback: a #GAsyncReadyCallback. 
+ * @user_data: user data passed to @callback.
+ * 
+ * Splices a stream asynchronously.
+ * When the operation is finished @callback will be called.
+ * You can then call g_output_stream_splice_finish() to get the 
+ * result of the operation.
+ *
+ * For the synchronous, blocking version of this function, see 
+ * g_output_stream_splice().
+ **/
+void
+g_output_stream_splice_async (GOutputStream            *stream,
+			      GInputStream             *source,
+			      GOutputStreamSpliceFlags  flags,
+			      int                       io_priority,
+			      GCancellable             *cancellable,
+			      GAsyncReadyCallback       callback,
+			      gpointer                  user_data)
+{
+  GOutputStreamClass *class;
+  SpliceUserData *data;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
+  g_return_if_fail (G_IS_INPUT_STREAM (source));
+
+  if (g_input_stream_is_closed (source))
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (stream),
+					   callback,
+					   user_data,
+					   G_IO_ERROR, G_IO_ERROR_CLOSED,
+					   _("Source stream is already closed"));
+      return;
+    }
+  
+  if (!g_output_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+
+  data = g_new0 (SpliceUserData, 1);
+  data->callback = callback;
+  data->user_data = user_data;
+  data->source = g_object_ref (source);
+  
+  g_object_ref (stream);
+  class->splice_async (stream, source, flags, io_priority, cancellable,
+		      async_ready_splice_callback_wrapper, data);
+}
+
+/**
+ * g_output_stream_splice_finish:
+ * @stream: a #GOutputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ *
+ * Finishes an asynchronous stream splice operation.
+ * 
+ * Returns: a #gssize of the number of bytes spliced.
+ **/
+gssize
+g_output_stream_splice_finish (GOutputStream  *stream,
+			       GAsyncResult   *result,
+			       GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  GOutputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), -1);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), -1);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return -1;
+    }
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+  return class->splice_finish (stream, result, error);
+}
+
+/**
+ * g_output_stream_flush_async:
+ * @stream: a #GOutputStream.
+ * @io_priority: the io priority of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * 
+ * Flushes a stream asynchronously.
+ * For behaviour details see g_output_stream_flush().
+ *
+ * When the operation is finished @callback will be 
+ * called. You can then call g_output_stream_flush_finish() to get the 
+ * result of the operation.
+ **/
+void
+g_output_stream_flush_async (GOutputStream       *stream,
+                             int                  io_priority,
+                             GCancellable        *cancellable,
+                             GAsyncReadyCallback  callback,
+                             gpointer             user_data)
+{
+  GOutputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
+
+  if (!g_output_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+  
+  if (class->flush_async == NULL)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  async_ready_callback_wrapper,
+					  user_data,
+					  g_output_stream_flush_async);
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+      
+  class->flush_async (stream, io_priority, cancellable,
+		      async_ready_callback_wrapper, user_data);
+}
+
+/**
+ * g_output_stream_flush_finish:
+ * @stream: a #GOutputStream.
+ * @result: a GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Finishes flushing an output stream.
+ * 
+ * Returns: %TRUE if flush operation suceeded, %FALSE otherwise.
+ **/
+gboolean
+g_output_stream_flush_finish (GOutputStream  *stream,
+                              GAsyncResult   *result,
+                              GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  GOutputStreamClass *klass;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+
+      /* Special case default implementation */
+      if (g_simple_async_result_get_source_tag (simple) == g_output_stream_flush_async)
+	return TRUE;
+    }
+
+  klass = G_OUTPUT_STREAM_GET_CLASS (stream);
+  return klass->flush_finish (stream, result, error);
+}
+
+
+/**
+ * g_output_stream_close_async:
+ * @stream: A #GOutputStream.
+ * @io_priority: the io priority of the request.
+ * @callback: callback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ * @cancellable: optional cancellable object
+ *
+ * Requests an asynchronous close of the stream, releasing resources 
+ * related to it. When the operation is finished @callback will be 
+ * called. You can then call g_output_stream_close_finish() to get 
+ * the result of the operation.
+ *
+ * For behaviour details see g_output_stream_close().
+ *
+ * The asyncronous methods have a default fallback that uses threads 
+ * to implement asynchronicity, so they are optional for inheriting 
+ * classes. However, if you override one you must override all.
+ **/
+void
+g_output_stream_close_async (GOutputStream       *stream,
+                             int                  io_priority,
+                             GCancellable        *cancellable,
+                             GAsyncReadyCallback  callback,
+                             gpointer             user_data)
+{
+  GOutputStreamClass *class;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+
+  g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
+  
+  if (stream->priv->closed)
+    {
+      simple = g_simple_async_result_new (G_OBJECT (stream),
+					  callback,
+					  user_data,
+					  g_output_stream_close_async);
+      g_simple_async_result_complete_in_idle (simple);
+      g_object_unref (simple);
+      return;
+    }
+
+  if (!g_output_stream_set_pending (stream, &error))
+    {
+      g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
+					    callback,
+					    user_data,
+					    error);
+      g_error_free (error);
+      return;
+    }
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+  stream->priv->outstanding_callback = callback;
+  g_object_ref (stream);
+  class->close_async (stream, io_priority, cancellable,
+		      async_ready_close_callback_wrapper, user_data);
+}
+
+/**
+ * g_output_stream_close_finish:
+ * @stream: a #GOutputStream.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Closes an output stream.
+ * 
+ * Returns: %TRUE if stream was successfully closed, %FALSE otherwise.
+ **/
+gboolean
+g_output_stream_close_finish (GOutputStream  *stream,
+                              GAsyncResult   *result,
+                              GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  GOutputStreamClass *class;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+
+      /* Special case already closed */
+      if (g_simple_async_result_get_source_tag (simple) == g_output_stream_close_async)
+	return TRUE;
+    }
+
+  class = G_OUTPUT_STREAM_GET_CLASS (stream);
+  return class->close_finish (stream, result, error);
+}
+
+/**
+ * g_output_stream_is_closed:
+ * @stream: a #GOutputStream.
+ * 
+ * Checks if an output stream has already been closed.
+ * 
+ * Returns: %TRUE if @stream is closed. %FALSE otherwise. 
+ **/
+gboolean
+g_output_stream_is_closed (GOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), TRUE);
+  
+  return stream->priv->closed;
+}
+
+/**
+ * g_output_stream_has_pending:
+ * @stream: a #GOutputStream.
+ * 
+ * Checks if an ouput stream has pending actions.
+ * 
+ * Returns: %TRUE if @stream has pending actions. 
+ **/
+gboolean
+g_output_stream_has_pending (GOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+  
+  return stream->priv->pending;
+}
+
+/**
+ * g_output_stream_set_pending:
+ * @stream: a #GOutputStream.
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Sets @stream to have actions pending. If the pending flag is
+ * already set or @stream is closed, it will return %FALSE and set
+ * @error.
+ *
+ * Return value: %TRUE if pending was previously unset and is now set.
+ **/
+gboolean
+g_output_stream_set_pending (GOutputStream *stream,
+			     GError **error)
+{
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
+  
+  if (stream->priv->closed)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
+                           _("Stream is already closed"));
+      return FALSE;
+    }
+  
+  if (stream->priv->pending)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PENDING,
+                           /* Translators: This is an error you get if there is
+                            * already an operation running against this stream when
+                            * you try to start one */
+                           _("Stream has outstanding operation"));
+      return FALSE;
+    }
+  
+  stream->priv->pending = TRUE;
+  return TRUE;
+}
+
+/**
+ * g_output_stream_clear_pending:
+ * @stream: output stream
+ * 
+ * Clears the pending flag on @stream.
+ **/
+void
+g_output_stream_clear_pending (GOutputStream *stream)
+{
+  g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
+  
+  stream->priv->pending = FALSE;
+}
+
+
+/********************************************
+ *   Default implementation of async ops    *
+ ********************************************/
+
+typedef struct {
+  const void         *buffer;
+  gsize               count_requested;
+  gssize              count_written;
+} WriteData;
+
+static void
+write_async_thread (GSimpleAsyncResult *res,
+                    GObject            *object,
+                    GCancellable       *cancellable)
+{
+  WriteData *op;
+  GOutputStreamClass *class;
+  GError *error = NULL;
+
+  class = G_OUTPUT_STREAM_GET_CLASS (object);
+  op = g_simple_async_result_get_op_res_gpointer (res);
+  op->count_written = class->write_fn (G_OUTPUT_STREAM (object), op->buffer, op->count_requested,
+				       cancellable, &error);
+  if (op->count_written == -1)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+static void
+g_output_stream_real_write_async (GOutputStream       *stream,
+                                  const void          *buffer,
+                                  gsize                count,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  WriteData *op;
+
+  op = g_new0 (WriteData, 1);
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_output_stream_real_write_async);
+  g_simple_async_result_set_op_res_gpointer (res, op, g_free);
+  op->buffer = buffer;
+  op->count_requested = count;
+  
+  g_simple_async_result_run_in_thread (res, write_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gssize
+g_output_stream_real_write_finish (GOutputStream  *stream,
+                                   GAsyncResult   *result,
+                                   GError        **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  WriteData *op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_output_stream_real_write_async);
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  return op->count_written;
+}
+
+typedef struct {
+  GInputStream *source;
+  GOutputStreamSpliceFlags flags;
+  gssize bytes_copied;
+} SpliceData;
+
+static void
+splice_async_thread (GSimpleAsyncResult *result,
+                     GObject            *object,
+                     GCancellable       *cancellable)
+{
+  SpliceData *op;
+  GOutputStreamClass *class;
+  GError *error = NULL;
+  GOutputStream *stream;
+
+  stream = G_OUTPUT_STREAM (object);
+  class = G_OUTPUT_STREAM_GET_CLASS (object);
+  op = g_simple_async_result_get_op_res_gpointer (result);
+  
+  op->bytes_copied = class->splice (stream,
+				    op->source,
+				    op->flags,
+				    cancellable,
+				    &error);
+  if (op->bytes_copied == -1)
+    {
+      g_simple_async_result_set_from_error (result, error);
+      g_error_free (error);
+    }
+}
+
+static void
+g_output_stream_real_splice_async (GOutputStream             *stream,
+                                   GInputStream              *source,
+                                   GOutputStreamSpliceFlags   flags,
+                                   int                        io_priority,
+                                   GCancellable              *cancellable,
+                                   GAsyncReadyCallback        callback,
+                                   gpointer                   user_data)
+{
+  GSimpleAsyncResult *res;
+  SpliceData *op;
+
+  op = g_new0 (SpliceData, 1);
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_output_stream_real_splice_async);
+  g_simple_async_result_set_op_res_gpointer (res, op, g_free);
+  op->flags = flags;
+  op->source = source;
+
+  /* TODO: In the case where both source and destintion have
+     non-threadbased async calls we can use a true async copy here */
+  
+  g_simple_async_result_run_in_thread (res, splice_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gssize
+g_output_stream_real_splice_finish (GOutputStream  *stream,
+                                    GAsyncResult   *result,
+                                    GError        **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  SpliceData *op;
+
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_output_stream_real_splice_async);
+  op = g_simple_async_result_get_op_res_gpointer (simple);
+  return op->bytes_copied;
+}
+
+
+static void
+flush_async_thread (GSimpleAsyncResult *res,
+                    GObject            *object,
+                    GCancellable       *cancellable)
+{
+  GOutputStreamClass *class;
+  gboolean result;
+  GError *error = NULL;
+
+  class = G_OUTPUT_STREAM_GET_CLASS (object);
+  result = TRUE;
+  if (class->flush)
+    result = class->flush (G_OUTPUT_STREAM (object), cancellable, &error);
+
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+static void
+g_output_stream_real_flush_async (GOutputStream       *stream,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_output_stream_real_write_async);
+  
+  g_simple_async_result_run_in_thread (res, flush_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_output_stream_real_flush_finish (GOutputStream  *stream,
+                                   GAsyncResult   *result,
+                                   GError        **error)
+{
+  return TRUE;
+}
+
+static void
+close_async_thread (GSimpleAsyncResult *res,
+                    GObject            *object,
+                    GCancellable       *cancellable)
+{
+  GOutputStreamClass *class;
+  GError *error = NULL;
+  gboolean result;
+
+  /* Auto handling of cancelation disabled, and ignore
+     cancellation, since we want to close things anyway, although
+     possibly in a quick-n-dirty way. At least we never want to leak
+     open handles */
+  
+  class = G_OUTPUT_STREAM_GET_CLASS (object);
+  result = class->close_fn (G_OUTPUT_STREAM (object), cancellable, &error);
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (res, error);
+      g_error_free (error);
+    }
+}
+
+static void
+g_output_stream_real_close_async (GOutputStream       *stream,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+  GSimpleAsyncResult *res;
+  
+  res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_output_stream_real_close_async);
+
+  g_simple_async_result_set_handle_cancellation (res, FALSE);
+  
+  g_simple_async_result_run_in_thread (res, close_async_thread, io_priority, cancellable);
+  g_object_unref (res);
+}
+
+static gboolean
+g_output_stream_real_close_finish (GOutputStream  *stream,
+                                   GAsyncResult   *result,
+                                   GError        **error)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_output_stream_real_close_async);
+  return TRUE;
+}
+
+#define __G_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/goutputstream.h b/gio/goutputstream.h
new file mode 100644
index 0000000..e9f3160
--- /dev/null
+++ b/gio/goutputstream.h
@@ -0,0 +1,206 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_OUTPUT_STREAM_H__
+#define __G_OUTPUT_STREAM_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_OUTPUT_STREAM         (g_output_stream_get_type ())
+#define G_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_OUTPUT_STREAM, GOutputStream))
+#define G_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_OUTPUT_STREAM, GOutputStreamClass))
+#define G_IS_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_OUTPUT_STREAM))
+#define G_IS_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_OUTPUT_STREAM))
+#define G_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_OUTPUT_STREAM, GOutputStreamClass))
+
+/**
+ * GOutputStream:
+ *
+ * Base class for writing output.
+ *
+ * All classes derived from GOutputStream should implement synchronous
+ * writing, splicing, flushing and closing streams, but may implement
+ * asynchronous versions.
+ **/
+typedef struct _GOutputStreamClass    GOutputStreamClass;
+typedef struct _GOutputStreamPrivate  GOutputStreamPrivate;
+
+struct _GOutputStream
+{
+  GObject parent_instance;
+
+  /*< private >*/
+  GOutputStreamPrivate *priv;
+};
+
+
+struct _GOutputStreamClass
+{
+  GObjectClass parent_class;
+
+  /* Sync ops: */
+
+  gssize      (* write_fn)      (GOutputStream            *stream,
+                                 const void               *buffer,
+                                 gsize                     count,
+                                 GCancellable             *cancellable,
+                                 GError                  **error);
+  gssize      (* splice)        (GOutputStream            *stream,
+                                 GInputStream             *source,
+                                 GOutputStreamSpliceFlags  flags,
+                                 GCancellable             *cancellable,
+                                 GError                  **error);
+  gboolean    (* flush)	        (GOutputStream            *stream,
+                                 GCancellable             *cancellable,
+                                 GError                  **error);
+  gboolean    (* close_fn)      (GOutputStream            *stream,
+                                 GCancellable             *cancellable,
+                                 GError                  **error);
+
+  /* Async ops: (optional in derived classes) */
+
+  void        (* write_async)   (GOutputStream            *stream,
+                                 const void               *buffer,
+                                 gsize                     count,
+                                 int                       io_priority,
+                                 GCancellable             *cancellable,
+                                 GAsyncReadyCallback       callback,
+                                 gpointer                  user_data);
+  gssize      (* write_finish)  (GOutputStream            *stream,
+                                 GAsyncResult             *result,
+                                 GError                  **error);
+  void        (* splice_async)  (GOutputStream            *stream,
+                                 GInputStream             *source,
+                                 GOutputStreamSpliceFlags  flags,
+                                 int                       io_priority,
+                                 GCancellable             *cancellable,
+                                 GAsyncReadyCallback       callback,
+                                 gpointer                  data);
+  gssize      (* splice_finish) (GOutputStream            *stream,
+                                 GAsyncResult             *result,
+                                 GError                  **error);
+  void        (* flush_async)   (GOutputStream            *stream,
+                                 int                       io_priority,
+                                 GCancellable             *cancellable,
+                                 GAsyncReadyCallback       callback,
+                                 gpointer                  user_data);
+  gboolean    (* flush_finish)  (GOutputStream            *stream,
+                                 GAsyncResult             *result,
+                                 GError                  **error);
+  void        (* close_async)   (GOutputStream            *stream,
+                                 int                       io_priority,
+                                 GCancellable             *cancellable,
+                                 GAsyncReadyCallback       callback,
+                                 gpointer                  user_data);
+  gboolean    (* close_finish)  (GOutputStream            *stream,
+                                 GAsyncResult             *result,
+                                 GError                  **error);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+  void (*_g_reserved6) (void);
+  void (*_g_reserved7) (void);
+  void (*_g_reserved8) (void);
+};
+
+GType    g_output_stream_get_type      (void) G_GNUC_CONST;
+
+gssize   g_output_stream_write         (GOutputStream             *stream,
+					const void                *buffer,
+					gsize                      count,
+					GCancellable              *cancellable,
+					GError                   **error);
+gboolean g_output_stream_write_all     (GOutputStream             *stream,
+					const void                *buffer,
+					gsize                      count,
+					gsize                     *bytes_written,
+					GCancellable              *cancellable,
+					GError                   **error);
+gssize   g_output_stream_splice        (GOutputStream             *stream,
+					GInputStream              *source,
+					GOutputStreamSpliceFlags   flags,
+					GCancellable              *cancellable,
+					GError                   **error);
+gboolean g_output_stream_flush         (GOutputStream             *stream,
+					GCancellable              *cancellable,
+					GError                   **error);
+gboolean g_output_stream_close         (GOutputStream             *stream,
+					GCancellable              *cancellable,
+					GError                   **error);
+void     g_output_stream_write_async   (GOutputStream             *stream,
+					const void                *buffer,
+					gsize                      count,
+					int                        io_priority,
+					GCancellable              *cancellable,
+					GAsyncReadyCallback        callback,
+					gpointer                   user_data);
+gssize   g_output_stream_write_finish  (GOutputStream             *stream,
+					GAsyncResult              *result,
+					GError                   **error);
+void     g_output_stream_splice_async  (GOutputStream             *stream,
+					GInputStream              *source,
+					GOutputStreamSpliceFlags   flags,
+					int                        io_priority,
+					GCancellable              *cancellable,
+					GAsyncReadyCallback        callback,
+					gpointer                   user_data);
+gssize   g_output_stream_splice_finish (GOutputStream             *stream,
+					GAsyncResult              *result,
+					GError                   **error);
+void     g_output_stream_flush_async   (GOutputStream             *stream,
+					int                        io_priority,
+					GCancellable              *cancellable,
+					GAsyncReadyCallback        callback,
+					gpointer                   user_data);
+gboolean g_output_stream_flush_finish  (GOutputStream             *stream,
+					GAsyncResult              *result,
+					GError                   **error);
+void     g_output_stream_close_async   (GOutputStream             *stream,
+					int                        io_priority,
+					GCancellable              *cancellable,
+					GAsyncReadyCallback        callback,
+					gpointer                   user_data);
+gboolean g_output_stream_close_finish  (GOutputStream             *stream,
+					GAsyncResult              *result,
+					GError                   **error);
+
+gboolean g_output_stream_is_closed     (GOutputStream             *stream);
+gboolean g_output_stream_has_pending   (GOutputStream             *stream);
+gboolean g_output_stream_set_pending   (GOutputStream             *stream,
+					GError                   **error);
+void     g_output_stream_clear_pending (GOutputStream             *stream);
+
+
+G_END_DECLS
+
+#endif /* __G_OUTPUT_STREAM_H__ */
diff --git a/gio/gpollfilemonitor.c b/gio/gpollfilemonitor.c
new file mode 100644
index 0000000..51d04ef
--- /dev/null
+++ b/gio/gpollfilemonitor.c
@@ -0,0 +1,233 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "gpollfilemonitor.h"
+#include "gfile.h"
+#include "gfilemonitor.h"
+#include "gfileinfo.h"
+
+#include "gioalias.h"
+
+static gboolean g_poll_file_monitor_cancel (GFileMonitor* monitor);
+static void schedule_poll_timeout (GPollFileMonitor* poll_monitor);
+
+struct _GPollFileMonitor
+{
+  GFileMonitor parent_instance;
+  GFile *file;
+  GFileInfo *last_info;
+  guint timeout;
+};
+
+#define POLL_TIME_SECS 5
+
+#define g_poll_file_monitor_get_type _g_poll_file_monitor_get_type
+G_DEFINE_TYPE (GPollFileMonitor, g_poll_file_monitor, G_TYPE_FILE_MONITOR)
+
+static void
+g_poll_file_monitor_finalize (GObject* object)
+{
+  GPollFileMonitor* poll_monitor;
+  
+  poll_monitor = G_POLL_FILE_MONITOR (object);
+
+  g_object_unref (poll_monitor->file);
+
+  G_OBJECT_CLASS (g_poll_file_monitor_parent_class)->finalize (object);
+}
+
+
+static void
+g_poll_file_monitor_class_init (GPollFileMonitorClass* klass)
+{
+  GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+  GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_poll_file_monitor_finalize;
+
+  file_monitor_class->cancel = g_poll_file_monitor_cancel;
+}
+
+static void
+g_poll_file_monitor_init (GPollFileMonitor* poll_monitor)
+{
+}
+
+static int 
+safe_strcmp (const char *a, 
+             const char *b)
+{
+  if (a == NULL && b == NULL)
+    return 0;
+  if (a == NULL)
+    return -1;
+  if (b == NULL)
+    return 1;
+  
+  return strcmp (a, b);
+}
+
+static int
+calc_event_type (GFileInfo *last,
+		 GFileInfo *new)
+{
+  if (last == NULL && new == NULL)
+    return -1;
+
+  if (last == NULL && new != NULL)
+    return G_FILE_MONITOR_EVENT_CREATED;
+  
+  if (last != NULL && new == NULL)
+    return G_FILE_MONITOR_EVENT_DELETED;
+
+  if (safe_strcmp (g_file_info_get_etag (last),
+		   g_file_info_get_etag (new)))
+    return G_FILE_MONITOR_EVENT_CHANGED;
+  
+  if (g_file_info_get_size (last) !=
+      g_file_info_get_size (new))
+    return G_FILE_MONITOR_EVENT_CHANGED;
+
+  return -1;
+}
+
+static void
+got_new_info (GObject      *source_object,
+              GAsyncResult *res,
+              gpointer      user_data)
+{
+  GPollFileMonitor* poll_monitor = user_data;
+  GFileInfo *info;
+  int event;
+
+  info = g_file_query_info_finish (poll_monitor->file, res, NULL);
+
+  if (!g_file_monitor_is_cancelled (G_FILE_MONITOR (poll_monitor)))
+    {
+      event = calc_event_type (poll_monitor->last_info, info);
+
+      if (event != -1)
+	{
+	  g_file_monitor_emit_event (G_FILE_MONITOR (poll_monitor),
+				     poll_monitor->file,
+				     NULL, event);
+	  /* We're polling so slowly anyway, so always emit the done hint */
+	  if (event == G_FILE_MONITOR_EVENT_CHANGED)
+	    g_file_monitor_emit_event (G_FILE_MONITOR (poll_monitor),
+				       poll_monitor->file,
+				       NULL, G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT);
+	}
+      
+      if (poll_monitor->last_info)
+	{
+	  g_object_unref (poll_monitor->last_info);
+	  poll_monitor->last_info = NULL;
+	}
+      
+      if (info)
+	poll_monitor->last_info = g_object_ref (info);
+      
+      schedule_poll_timeout (poll_monitor);
+    }
+
+  if (info)
+    g_object_unref (info);
+  
+  g_object_unref (poll_monitor);
+}
+
+static gboolean
+poll_file_timeout (gpointer data)
+{
+  GPollFileMonitor* poll_monitor = data;
+
+  poll_monitor->timeout = FALSE;
+
+  g_file_query_info_async (poll_monitor->file, G_FILE_ATTRIBUTE_ETAG_VALUE "," G_FILE_ATTRIBUTE_STANDARD_SIZE,
+			 0, 0, NULL, got_new_info, g_object_ref (poll_monitor));
+  
+  return FALSE;
+}
+
+static void
+schedule_poll_timeout (GPollFileMonitor* poll_monitor)
+{
+  poll_monitor->timeout = g_timeout_add_seconds (POLL_TIME_SECS, poll_file_timeout, poll_monitor);
+ }
+
+static void
+got_initial_info (GObject      *source_object,
+                  GAsyncResult *res,
+                  gpointer      user_data)
+{
+  GPollFileMonitor* poll_monitor = user_data;
+  GFileInfo *info;
+
+  info = g_file_query_info_finish (poll_monitor->file, res, NULL);
+
+  poll_monitor->last_info = info;
+
+  if (!g_file_monitor_is_cancelled (G_FILE_MONITOR (poll_monitor)))
+    schedule_poll_timeout (poll_monitor);
+  
+  g_object_unref (poll_monitor);
+}
+
+/**
+ * g_poll_file_monitor_new:
+ * @file: a #GFile.
+ * 
+ * Polls @file for changes.
+ * 
+ * Returns: a new #GFileMonitor for the given #GFile. 
+ **/
+GFileMonitor*
+_g_poll_file_monitor_new (GFile *file)
+{
+  GPollFileMonitor* poll_monitor;
+  
+  poll_monitor = g_object_new (G_TYPE_POLL_FILE_MONITOR, NULL);
+
+  poll_monitor->file = g_object_ref (file);
+
+  g_file_query_info_async (file, G_FILE_ATTRIBUTE_ETAG_VALUE "," G_FILE_ATTRIBUTE_STANDARD_SIZE,
+			   0, 0, NULL, got_initial_info, g_object_ref (poll_monitor));
+  
+  return G_FILE_MONITOR (poll_monitor);
+}
+
+static gboolean
+g_poll_file_monitor_cancel (GFileMonitor* monitor)
+{
+  GPollFileMonitor *poll_monitor = G_POLL_FILE_MONITOR (monitor);
+  
+  if (poll_monitor->timeout)
+    {
+      g_source_remove (poll_monitor->timeout);
+      poll_monitor->timeout = 0;
+    }
+  
+  return TRUE;
+}
diff --git a/gio/gpollfilemonitor.h b/gio/gpollfilemonitor.h
new file mode 100644
index 0000000..6537f5a
--- /dev/null
+++ b/gio/gpollfilemonitor.h
@@ -0,0 +1,50 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_POLL_FILE_MONITOR_H__
+#define __G_POLL_FILE_MONITOR_H__
+
+#include <gio/gfilemonitor.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_POLL_FILE_MONITOR		(_g_poll_file_monitor_get_type ())
+#define G_POLL_FILE_MONITOR(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_POLL_FILE_MONITOR, GPollFileMonitor))
+#define G_POLL_FILE_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_POLL_FILE_MONITOR, GPollFileMonitorClass))
+#define G_IS_POLL_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_POLL_FILE_MONITOR))
+#define G_IS_POLL_FILE_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_POLL_FILE_MONITOR))
+
+typedef struct _GPollFileMonitor      GPollFileMonitor;
+typedef struct _GPollFileMonitorClass GPollFileMonitorClass;
+
+struct _GPollFileMonitorClass
+{
+  GFileMonitorClass parent_class;
+};
+
+GType          _g_poll_file_monitor_get_type (void) G_GNUC_CONST;
+
+GFileMonitor * _g_poll_file_monitor_new      (GFile *file);
+
+G_END_DECLS
+
+#endif /* __G_POLL_FILE_MONITOR_H__ */
diff --git a/gio/gseekable.c b/gio/gseekable.c
new file mode 100644
index 0000000..a2cbb8a
--- /dev/null
+++ b/gio/gseekable.c
@@ -0,0 +1,211 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include "gseekable.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gseekable
+ * @short_description: Stream seeking interface
+ * @include: gio/gio.h
+ * @see_also: #GInputStream, #GOutputStream
+ * 
+ * #GSeekable is implemented by streams (implementations of 
+ * #GInputStream or #GOutputStream) that support seeking.
+ * 
+ **/
+
+
+static void g_seekable_base_init (gpointer g_class);
+
+
+GType
+g_seekable_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo seekable_info =
+      {
+        sizeof (GSeekableIface), /* class_size */
+	g_seekable_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	NULL,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GSeekable"),
+				&seekable_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_seekable_base_init (gpointer g_class)
+{
+}
+
+/**
+ * g_seekable_tell:
+ * @seekable: a #GSeekable.
+ * 
+ * Tells the current position within the stream.
+ * 
+ * Returns: the offset from the beginning of the buffer.
+ **/
+goffset
+g_seekable_tell (GSeekable *seekable)
+{
+  GSeekableIface *iface;
+
+  g_return_val_if_fail (G_IS_SEEKABLE (seekable), 0);
+
+  iface = G_SEEKABLE_GET_IFACE (seekable);
+
+  return (* iface->tell) (seekable);
+}
+
+/**
+ * g_seekable_can_seek:
+ * @seekable: a #GSeekable.
+ * 
+ * Tests if the stream supports the #GSeekableIface.
+ * 
+ * Returns: %TRUE if @seekable can be seeked. %FALSE otherwise.
+ **/
+gboolean
+g_seekable_can_seek (GSeekable *seekable)
+{
+  GSeekableIface *iface;
+  
+  g_return_val_if_fail (G_IS_SEEKABLE (seekable), FALSE);
+
+  iface = G_SEEKABLE_GET_IFACE (seekable);
+
+  return (* iface->can_seek) (seekable);
+}
+
+/**
+ * g_seekable_seek:
+ * @seekable: a #GSeekable.
+ * @offset: a #goffset.
+ * @type: a #GSeekType.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Seeks in the stream by the given @offset, modified by @type.
+ *
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. 
+ * 
+ * Returns: %TRUE if successful. If an error
+ *     has occurred, this function will return %FALSE and set @error
+ *     appropriately if present.
+ **/
+gboolean
+g_seekable_seek (GSeekable     *seekable,
+		 goffset        offset,
+		 GSeekType      type,
+		 GCancellable  *cancellable,
+		 GError       **error)
+{
+  GSeekableIface *iface;
+  
+  g_return_val_if_fail (G_IS_SEEKABLE (seekable), FALSE);
+
+  iface = G_SEEKABLE_GET_IFACE (seekable);
+
+  return (* iface->seek) (seekable, offset, type, cancellable, error);
+}
+
+/**
+ * g_seekable_can_truncate:
+ * @seekable: a #GSeekable.
+ * 
+ * Tests if the stream can be truncated.
+ * 
+ * Returns: %TRUE if the stream can be truncated, %FALSE otherwise.
+ **/
+gboolean
+g_seekable_can_truncate (GSeekable *seekable)
+{
+  GSeekableIface *iface;
+  
+  g_return_val_if_fail (G_IS_SEEKABLE (seekable), FALSE);
+
+  iface = G_SEEKABLE_GET_IFACE (seekable);
+
+  return (* iface->can_truncate) (seekable);
+}
+
+/**
+ * g_seekable_truncate:
+ * @seekable: a #GSeekable.
+ * @offset: a #goffset.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * @error: a #GError location to store the error occuring, or %NULL to 
+ * ignore.
+ * 
+ * Truncates a stream with a given #offset. 
+ * 
+ * If @cancellable is not %NULL, then the operation can be cancelled by
+ * triggering the cancellable object from another thread. If the operation
+ * was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. If an
+ * operation was partially finished when the operation was cancelled the
+ * partial result will be returned, without an error.
+ * 
+ * Returns: %TRUE if successful. If an error
+ *     has occurred, this function will return %FALSE and set @error
+ *     appropriately if present. 
+ **/
+gboolean
+g_seekable_truncate (GSeekable     *seekable,
+		     goffset        offset,
+		     GCancellable  *cancellable,
+		     GError       **error)
+{
+  GSeekableIface *iface;
+  
+  g_return_val_if_fail (G_IS_SEEKABLE (seekable), FALSE);
+
+  iface = G_SEEKABLE_GET_IFACE (seekable);
+
+  return (* iface->truncate_fn) (seekable, offset, cancellable, error);
+}
+
+#define __G_SEEKABLE_C__
+#include "gioaliasdef.c"
diff --git a/gio/gseekable.h b/gio/gseekable.h
new file mode 100644
index 0000000..0cba50f
--- /dev/null
+++ b/gio/gseekable.h
@@ -0,0 +1,99 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_SEEKABLE_H__
+#define __G_SEEKABLE_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_SEEKABLE            (g_seekable_get_type ())
+#define G_SEEKABLE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_SEEKABLE, GSeekable))
+#define G_IS_SEEKABLE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_SEEKABLE))
+#define G_SEEKABLE_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_SEEKABLE, GSeekableIface))
+
+/**
+ * GSeekable:
+ *
+ * Seek object for streaming operations.
+ **/
+typedef struct _GSeekableIface   GSeekableIface;
+
+/**
+ * GSeekableIface:
+ * @g_iface: The parent interface.
+ * @tell: Tells the current location within a stream.
+ * @can_seek: Checks if seeking is supported by the stream.
+ * @seek: Seeks to a location within a stream.
+ * @can_truncate: Chekcs if truncation is suppored by the stream.
+ * @truncate_fn: Truncates a stream.
+ *
+ * Provides an interface for implementing seekable functionality on I/O Streams.
+ **/
+struct _GSeekableIface
+{
+  GTypeInterface g_iface;
+
+  /* Virtual Table */
+
+  goffset     (* tell)	         (GSeekable    *seekable);
+
+  gboolean    (* can_seek)       (GSeekable    *seekable);
+  gboolean    (* seek)	         (GSeekable    *seekable,
+				  goffset       offset,
+				  GSeekType     type,
+				  GCancellable *cancellable,
+				  GError      **error);
+
+  gboolean    (* can_truncate)   (GSeekable    *seekable);
+  gboolean    (* truncate_fn)    (GSeekable    *seekable,
+				  goffset       offset,
+				  GCancellable *cancellable,
+				  GError       **error);
+
+  /* TODO: Async seek/truncate */
+};
+
+GType    g_seekable_get_type     (void) G_GNUC_CONST;
+
+goffset  g_seekable_tell         (GSeekable     *seekable);
+gboolean g_seekable_can_seek     (GSeekable     *seekable);
+gboolean g_seekable_seek         (GSeekable     *seekable,
+				  goffset        offset,
+				  GSeekType      type,
+				  GCancellable  *cancellable,
+				  GError       **error);
+gboolean g_seekable_can_truncate (GSeekable     *seekable);
+gboolean g_seekable_truncate     (GSeekable     *seekable,
+				  goffset        offset,
+				  GCancellable  *cancellable,
+				  GError       **error);
+
+G_END_DECLS
+
+
+#endif /* __G_SEEKABLE_H__ */
diff --git a/gio/gsimpleasyncresult.c b/gio/gsimpleasyncresult.c
new file mode 100644
index 0000000..d5c3e7b
--- /dev/null
+++ b/gio/gsimpleasyncresult.c
@@ -0,0 +1,813 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "gsimpleasyncresult.h"
+#include "gasyncresult.h"
+#include "gcancellable.h"
+#include "gioscheduler.h"
+#include <gio/gioerror.h>
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gsimpleasyncresult
+ * @short_description: Simple asynchronous results implementation
+ * @include: gio/gio.h
+ * @see_also: #GAsyncResult
+ *
+ * Implements #GAsyncResult for simple cases. Most of the time, this 
+ * will be all an application needs, and will be used transparently. 
+ * Because of this, #GSimpleAsyncResult is used throughout GIO for 
+ * handling asynchronous functions. 
+ * 
+ * GSimpleAsyncResult handles #GAsyncReadyCallback<!-- -->s, error 
+ * reporting, operation cancellation and the final state of an operation, 
+ * completely transparent to the application. Results can be returned 
+ * as a pointer e.g. for functions that return data that is collected 
+ * asynchronously, a boolean value for checking the success or failure 
+ * of an operation, or a #gssize for operations which return the number 
+ * of bytes modified by the operation; all of the simple return cases 
+ * are covered.
+ * 
+ * Most of the time, an application will not need to know of the details 
+ * of this API; it is handled transparently, and any necessary operations 
+ * are handled by #GAsyncResult's interface. However, if implementing a 
+ * new GIO module, for writing language bindings, or for complex 
+ * applications that need better control of how asynchronous operations 
+ * are completed, it is important to understand this functionality.
+ * 
+ * GSimpleAsyncResults are tagged with the calling function to ensure 
+ * that asynchronous functions and their finishing functions are used 
+ * together correctly.
+ * 
+ * To create a new #GSimpleAsyncResult, call g_simple_async_result_new(). 
+ * If the result needs to be created for a #GError, use 
+ * g_simple_async_result_new_from_error(). If a #GError is not available 
+ * (e.g. the asynchronous operation's doesn't take a #GError argument), 
+ * but the result still needs to be created for an error condition, use
+ * g_simple_async_result_new_error() (or g_simple_async_result_set_error_va()
+ * if your application or binding requires passing a variable argument list 
+ * directly), and the error can then be propegated through the use of 
+ * g_simple_async_result_propagate_error().
+ * 
+ * An asynchronous operation can be made to ignore a cancellation event by 
+ * calling g_simple_async_result_set_handle_cancellation() with a 
+ * #GSimpleAsyncResult for the operation and %FALSE. This is useful for
+ * operations that are dangerous to cancel, such as close (which would
+ * cause a leak if cancelled before being run).
+ * 
+ * GSimpleAsyncResult can integrate into GLib's event loop, #GMainLoop, 
+ * or it can use #GThread<!-- -->s if available. 
+ * g_simple_async_result_complete() will finish an I/O task directly within 
+ * the main event loop. g_simple_async_result_complete_in_idle() will 
+ * integrate the I/O task into the main event loop as an idle function and 
+ * g_simple_async_result_run_in_thread() will run the job in a separate 
+ * thread.
+ * 
+ * To set the results of an asynchronous function, 
+ * g_simple_async_result_set_op_res_gpointer(), 
+ * g_simple_async_result_set_op_res_gboolean(), and 
+ * g_simple_async_result_set_op_res_gssize()
+ * are provided, setting the operation's result to a gpointer, gboolean, or 
+ * gssize, respectively.
+ * 
+ * Likewise, to get the result of an asynchronous function, 
+ * g_simple_async_result_get_op_res_gpointer(),
+ * g_simple_async_result_get_op_res_gboolean(), and 
+ * g_simple_async_result_get_op_res_gssize() are 
+ * provided, getting the operation's result as a gpointer, gboolean, and 
+ * gssize, respectively.
+ **/
+
+static void g_simple_async_result_async_result_iface_init (GAsyncResultIface       *iface);
+
+struct _GSimpleAsyncResult
+{
+  GObject parent_instance;
+
+  GObject *source_object;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GError *error;
+  gboolean failed;
+  gboolean handle_cancellation;
+
+  gpointer source_tag;
+
+  union {
+    gpointer v_pointer;
+    gboolean v_boolean;
+    gssize   v_ssize;
+  } op_res;
+
+  GDestroyNotify destroy_op_res;
+};
+
+struct _GSimpleAsyncResultClass
+{
+  GObjectClass parent_class;
+};
+
+
+G_DEFINE_TYPE_WITH_CODE (GSimpleAsyncResult, g_simple_async_result, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_RESULT,
+						g_simple_async_result_async_result_iface_init))
+
+static void
+g_simple_async_result_finalize (GObject *object)
+{
+  GSimpleAsyncResult *simple;
+
+  simple = G_SIMPLE_ASYNC_RESULT (object);
+
+  if (simple->source_object)
+    g_object_unref (simple->source_object);
+
+  if (simple->destroy_op_res)
+    simple->destroy_op_res (simple->op_res.v_pointer);
+
+  if (simple->error)
+    g_error_free (simple->error);
+
+  G_OBJECT_CLASS (g_simple_async_result_parent_class)->finalize (object);
+}
+
+static void
+g_simple_async_result_class_init (GSimpleAsyncResultClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_simple_async_result_finalize;
+}
+
+static void
+g_simple_async_result_init (GSimpleAsyncResult *simple)
+{
+  simple->handle_cancellation = TRUE;
+}
+
+/**
+ * g_simple_async_result_new:
+ * @source_object: a #GObject the asynchronous function was called with,
+ * or %NULL.
+ * @callback: a #GAsyncReadyCallback.
+ * @user_data: user data passed to @callback.
+ * @source_tag: the asynchronous function.
+ * 
+ * Creates a #GSimpleAsyncResult.
+ * 
+ * Returns: a #GSimpleAsyncResult.
+ **/
+GSimpleAsyncResult *
+g_simple_async_result_new (GObject             *source_object,
+                           GAsyncReadyCallback  callback,
+                           gpointer             user_data,
+                           gpointer             source_tag)
+{
+  GSimpleAsyncResult *simple;
+
+  g_return_val_if_fail (!source_object || G_IS_OBJECT (source_object), NULL);
+
+  simple = g_object_new (G_TYPE_SIMPLE_ASYNC_RESULT, NULL);
+  simple->callback = callback;
+  if (source_object)
+    simple->source_object = g_object_ref (source_object);
+  else
+    simple->source_object = NULL;
+  simple->user_data = user_data;
+  simple->source_tag = source_tag;
+  
+  return simple;
+}
+
+/**
+ * g_simple_async_result_new_from_error:
+ * @source_object: a #GObject, or %NULL.
+ * @callback: a #GAsyncReadyCallback.
+ * @user_data: user data passed to @callback.
+ * @error: a #GError location.
+ * 
+ * Creates a #GSimpleAsyncResult from an error condition.
+ * 
+ * Returns: a #GSimpleAsyncResult.
+ **/
+GSimpleAsyncResult *
+g_simple_async_result_new_from_error (GObject             *source_object,
+                                      GAsyncReadyCallback  callback,
+                                      gpointer             user_data,
+                                      GError              *error)
+{
+  GSimpleAsyncResult *simple;
+
+  g_return_val_if_fail (!source_object || G_IS_OBJECT (source_object), NULL);
+
+  simple = g_simple_async_result_new (source_object,
+				      callback,
+				      user_data, NULL);
+  g_simple_async_result_set_from_error (simple, error);
+
+  return simple;
+}
+
+/**
+ * g_simple_async_result_new_error:
+ * @source_object: a #GObject, or %NULL.
+ * @callback: a #GAsyncReadyCallback. 
+ * @user_data: user data passed to @callback.
+ * @domain: a #GQuark.
+ * @code: an error code.
+ * @format: a string with format characters.
+ * @...: a list of values to insert into @format.
+ * 
+ * Creates a new #GSimpleAsyncResult with a set error.
+ * 
+ * Returns: a #GSimpleAsyncResult.
+ **/
+GSimpleAsyncResult *
+g_simple_async_result_new_error (GObject             *source_object,
+                                 GAsyncReadyCallback  callback,
+                                 gpointer             user_data,
+                                 GQuark               domain,
+                                 gint                 code,
+                                 const char          *format,
+                                 ...)
+{
+  GSimpleAsyncResult *simple;
+  va_list args;
+  
+  g_return_val_if_fail (!source_object || G_IS_OBJECT (source_object), NULL);
+  g_return_val_if_fail (domain != 0, NULL);
+  g_return_val_if_fail (format != NULL, NULL);
+
+  simple = g_simple_async_result_new (source_object,
+				      callback,
+				      user_data, NULL);
+
+  va_start (args, format);
+  g_simple_async_result_set_error_va (simple, domain, code, format, args);
+  va_end (args);
+  
+  return simple;
+}
+
+
+static gpointer
+g_simple_async_result_get_user_data (GAsyncResult *res)
+{
+  return G_SIMPLE_ASYNC_RESULT (res)->user_data;
+}
+
+static GObject *
+g_simple_async_result_get_source_object (GAsyncResult *res)
+{
+  if (G_SIMPLE_ASYNC_RESULT (res)->source_object)
+    return g_object_ref (G_SIMPLE_ASYNC_RESULT (res)->source_object);
+  return NULL;
+}
+
+static void
+g_simple_async_result_async_result_iface_init (GAsyncResultIface *iface)
+{
+  iface->get_user_data = g_simple_async_result_get_user_data;
+  iface->get_source_object = g_simple_async_result_get_source_object;
+}
+
+/**
+ * g_simple_async_result_set_handle_cancellation:
+ * @simple: a #GSimpleAsyncResult.
+ * @handle_cancellation: a #gboolean.
+ * 
+ * Sets whether to handle cancellation within the asynchronous operation.
+ * 
+ **/
+void
+g_simple_async_result_set_handle_cancellation (GSimpleAsyncResult *simple,
+                                               gboolean            handle_cancellation)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  simple->handle_cancellation = handle_cancellation;
+}
+
+/**
+ * g_simple_async_result_get_source_tag:
+ * @simple: a #GSimpleAsyncResult.
+ * 
+ * Gets the source tag for the #GSimpleAsyncResult.
+ * 
+ * Returns: a #gpointer to the source object for the #GSimpleAsyncResult.
+ **/
+gpointer
+g_simple_async_result_get_source_tag (GSimpleAsyncResult *simple)
+{
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple), NULL);
+  return simple->source_tag;
+}
+
+/**
+ * g_simple_async_result_propagate_error:
+ * @simple: a #GSimpleAsyncResult.
+ * @dest: a location to propegate the error to.
+ * 
+ * Propagates an error from within the simple asynchronous result to
+ * a given destination.
+ * 
+ * Returns: %TRUE if the error was propegated to @dest. %FALSE otherwise.
+ **/
+gboolean
+g_simple_async_result_propagate_error (GSimpleAsyncResult  *simple,
+                                       GError             **dest)
+{
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple), FALSE);
+
+  if (simple->failed)
+    {
+      g_propagate_error (dest, simple->error);
+      simple->error = NULL;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * g_simple_async_result_set_op_res_gpointer:
+ * @simple: a #GSimpleAsyncResult.
+ * @op_res: a pointer result from an asynchronous function.
+ * @destroy_op_res: a #GDestroyNotify function.
+ * 
+ * Sets the operation result within the asynchronous result to a pointer.
+ **/
+void
+g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple,
+                                           gpointer            op_res,
+                                           GDestroyNotify      destroy_op_res)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+
+  simple->op_res.v_pointer = op_res;
+  simple->destroy_op_res = destroy_op_res;
+}
+
+/**
+ * g_simple_async_result_get_op_res_gpointer:
+ * @simple: a #GSimpleAsyncResult.
+ * 
+ * Gets a pointer result as returned by the asynchronous function.
+ * 
+ * Returns: a pointer from the result.
+ **/
+gpointer
+g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple)
+{
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple), NULL);
+  return simple->op_res.v_pointer;
+}
+
+/**
+ * g_simple_async_result_set_op_res_gssize:
+ * @simple: a #GSimpleAsyncResult.
+ * @op_res: a #gssize.
+ * 
+ * Sets the operation result within the asynchronous result to 
+ * the given @op_res. 
+ **/
+void
+g_simple_async_result_set_op_res_gssize (GSimpleAsyncResult *simple,
+                                         gssize              op_res)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  simple->op_res.v_ssize = op_res;
+}
+
+/**
+ * g_simple_async_result_get_op_res_gssize:
+ * @simple: a #GSimpleAsyncResult.
+ * 
+ * Gets a gssize from the asynchronous result.
+ * 
+ * Returns: a gssize returned from the asynchronous function.
+ **/
+gssize
+g_simple_async_result_get_op_res_gssize (GSimpleAsyncResult *simple)
+{
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple), 0);
+  return simple->op_res.v_ssize;
+}
+
+/**
+ * g_simple_async_result_set_op_res_gboolean:
+ * @simple: a #GSimpleAsyncResult.
+ * @op_res: a #gboolean.
+ * 
+ * Sets the operation result to a boolean within the asynchronous result.
+ **/
+void
+g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple,
+                                           gboolean            op_res)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  simple->op_res.v_boolean = !!op_res;
+}
+
+/**
+ * g_simple_async_result_get_op_res_gboolean:
+ * @simple: a #GSimpleAsyncResult.
+ * 
+ * Gets the operation result boolean from within the asynchronous result.
+ * 
+ * Returns: %TRUE if the operation's result was %TRUE, %FALSE 
+ *     if the operation's result was %FALSE. 
+ **/
+gboolean
+g_simple_async_result_get_op_res_gboolean (GSimpleAsyncResult *simple)
+{
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple), FALSE);
+  return simple->op_res.v_boolean;
+}
+
+/**
+ * g_simple_async_result_set_from_error:
+ * @simple: a #GSimpleAsyncResult.
+ * @error: #GError.
+ * 
+ * Sets the result from a #GError. 
+ **/
+void
+g_simple_async_result_set_from_error (GSimpleAsyncResult *simple,
+                                      GError             *error)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  g_return_if_fail (error != NULL);
+
+  if (simple->error)
+    g_error_free (simple->error);
+  simple->error = g_error_copy (error);
+  simple->failed = TRUE;
+}
+
+static GError* 
+_g_error_new_valist (GQuark     domain,
+                    gint        code,
+                    const char *format,
+                    va_list     args)
+{
+  GError *error;
+  char *message;
+
+  message = g_strdup_vprintf (format, args);
+
+  error = g_error_new_literal (domain, code, message);
+  g_free (message);
+  
+  return error;
+}
+
+/**
+ * g_simple_async_result_set_error_va:
+ * @simple: a #GSimpleAsyncResult.
+ * @domain: a #GQuark (usually #G_IO_ERROR).
+ * @code: an error code.
+ * @format: a formatted error reporting string.
+ * @args: va_list of arguments. 
+ * 
+ * Sets an error within the asynchronous result without a #GError. 
+ * Unless writing a binding, see g_simple_async_result_set_error().
+ **/
+void
+g_simple_async_result_set_error_va (GSimpleAsyncResult *simple,
+                                    GQuark              domain,
+                                    gint                code,
+                                    const char         *format,
+                                    va_list             args)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  g_return_if_fail (domain != 0);
+  g_return_if_fail (format != NULL);
+
+  if (simple->error)
+    g_error_free (simple->error);
+  simple->error = _g_error_new_valist (domain, code, format, args);
+  simple->failed = TRUE;
+}
+
+/**
+ * g_simple_async_result_set_error:
+ * @simple: a #GSimpleAsyncResult.
+ * @domain: a #GQuark (usually #G_IO_ERROR).
+ * @code: an error code.
+ * @format: a formatted error reporting string.
+ * @...: a list of variables to fill in @format.
+ * 
+ * Sets an error within the asynchronous result without a #GError.
+ **/
+void
+g_simple_async_result_set_error (GSimpleAsyncResult *simple,
+                                 GQuark              domain,
+                                 gint                code,
+                                 const char         *format,
+                                 ...)
+{
+  va_list args;
+
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  g_return_if_fail (domain != 0);
+  g_return_if_fail (format != NULL);
+
+  va_start (args, format);
+  g_simple_async_result_set_error_va (simple, domain, code, format, args);
+  va_end (args);
+}
+
+/**
+ * g_simple_async_result_complete:
+ * @simple: a #GSimpleAsyncResult.
+ * 
+ * Completes an asynchronous I/O job.
+ * Must be called in the main thread, as it invokes the callback that
+ * should be called in the main thread. If you are in a different thread
+ * use g_simple_async_result_complete_in_idle().
+ **/
+void
+g_simple_async_result_complete (GSimpleAsyncResult *simple)
+{
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+
+  if (simple->callback)
+    simple->callback (simple->source_object,
+		      G_ASYNC_RESULT (simple),
+		      simple->user_data);
+}
+
+static gboolean
+complete_in_idle_cb (gpointer data)
+{
+  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (data);
+
+  g_simple_async_result_complete (simple);
+
+  return FALSE;
+}
+
+/**
+ * g_simple_async_result_complete_in_idle:
+ * @simple: a #GSimpleAsyncResult.
+ * 
+ * Completes an asynchronous function in the main event loop using 
+ * an idle function.
+ **/
+void
+g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple)
+{
+  GSource *source;
+  guint id;
+  
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  
+  g_object_ref (simple);
+  
+  source = g_idle_source_new ();
+  g_source_set_priority (source, G_PRIORITY_DEFAULT);
+  g_source_set_callback (source, complete_in_idle_cb, simple, g_object_unref);
+
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+}
+
+typedef struct {
+  GSimpleAsyncResult *simple;
+  GCancellable *cancellable;
+  GSimpleAsyncThreadFunc func;
+} RunInThreadData;
+
+
+static gboolean
+complete_in_idle_cb_for_thread (gpointer _data)
+{
+  RunInThreadData *data = _data;
+  GSimpleAsyncResult *simple;
+
+  simple = data->simple;
+  
+  if (simple->handle_cancellation &&
+      g_cancellable_is_cancelled (data->cancellable))
+    g_simple_async_result_set_error (simple,
+                                     G_IO_ERROR,
+                                     G_IO_ERROR_CANCELLED,
+                                     "%s", _("Operation was cancelled"));
+  
+  g_simple_async_result_complete (simple);
+
+  if (data->cancellable)
+    g_object_unref (data->cancellable);
+  g_object_unref (data->simple);
+  g_free (data);
+  
+  return FALSE;
+}
+
+static gboolean
+run_in_thread (GIOSchedulerJob *job,
+               GCancellable    *c,
+               gpointer         _data)
+{
+  RunInThreadData *data = _data;
+  GSimpleAsyncResult *simple = data->simple;
+  GSource *source;
+  guint id;
+  
+  if (simple->handle_cancellation &&
+      g_cancellable_is_cancelled (c))
+    g_simple_async_result_set_error (simple,
+                                     G_IO_ERROR,
+                                     G_IO_ERROR_CANCELLED,
+                                     "%s", _("Operation was cancelled"));
+  else
+    data->func (simple,
+                simple->source_object,
+                c);
+
+  source = g_idle_source_new ();
+  g_source_set_priority (source, G_PRIORITY_DEFAULT);
+  g_source_set_callback (source, complete_in_idle_cb_for_thread, data, NULL);
+
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  return FALSE;
+}
+
+/**
+ * g_simple_async_result_run_in_thread:
+ * @simple: a #GSimpleAsyncResult.
+ * @func: a #GSimpleAsyncThreadFunc.
+ * @io_priority: the io priority of the request.
+ * @cancellable: optional #GCancellable object, %NULL to ignore. 
+ * 
+ * Runs the asynchronous job in a separated thread.
+ **/
+void
+g_simple_async_result_run_in_thread (GSimpleAsyncResult     *simple,
+                                     GSimpleAsyncThreadFunc  func,
+                                     int                     io_priority, 
+                                     GCancellable           *cancellable)
+{
+  RunInThreadData *data;
+  
+  g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+  g_return_if_fail (func != NULL);
+
+  data = g_new (RunInThreadData, 1);
+  data->func = func;
+  data->simple = g_object_ref (simple);
+  data->cancellable = cancellable;
+  if (cancellable)
+    g_object_ref (cancellable);
+  g_io_scheduler_push_job (run_in_thread, data, NULL, io_priority, cancellable);
+}
+
+/**
+ * g_simple_async_result_is_valid:
+ * @result: the #GAsyncResult passed to the _finish function.
+ * @source: the #GObject passed to the _finish function.
+ * @source_tag: the asynchronous function.
+ *
+ * Ensures that the data passed to the _finish function of an async
+ * operation is consistent.  Three checks are performed.
+ * 
+ * First, @result is checked to ensure that it is really a
+ * #GSimpleAsyncResult.  Second, @source is checked to ensure that it
+ * matches the source object of @result.  Third, @source_tag is
+ * checked to ensure that it is equal to the source_tag argument given
+ * to g_simple_async_result_new() (which, by convention, is a pointer
+ * to the _async function corresponding to the _finish function from
+ * which this function is called).
+ *
+ * Returns: #TRUE if all checks passed or #FALSE if any failed.
+ **/ 
+gboolean
+g_simple_async_result_is_valid (GAsyncResult *result,
+                                GObject      *source,
+                                gpointer      source_tag)
+{
+  GSimpleAsyncResult *simple;
+  GObject *cmp_source;
+
+  if (!G_IS_SIMPLE_ASYNC_RESULT (result))
+    return FALSE;
+  simple = (GSimpleAsyncResult *)result;
+
+  cmp_source = g_async_result_get_source_object (result);
+  if (cmp_source != source)
+    {
+      g_object_unref (cmp_source);
+      return FALSE;
+    }
+  g_object_unref (cmp_source);
+
+  return source_tag == g_simple_async_result_get_source_tag (simple);
+}
+
+/**
+ * g_simple_async_report_error_in_idle:
+ * @object: a #GObject.
+ * @callback: a #GAsyncReadyCallback. 
+ * @user_data: user data passed to @callback.
+ * @domain: a #GQuark containing the error domain (usually #G_IO_ERROR).
+ * @code: a specific error code.
+ * @format: a formatted error reporting string.
+ * @...: a list of variables to fill in @format.
+ * 
+ * Reports an error in an asynchronous function in an idle function by 
+ * directly setting the contents of the #GAsyncResult with the given error
+ * information.
+ **/
+void
+g_simple_async_report_error_in_idle (GObject             *object,
+                                     GAsyncReadyCallback  callback,
+                                     gpointer             user_data,
+                                     GQuark               domain,
+                                     gint                 code,
+                                     const char          *format,
+                                     ...)
+{
+  GSimpleAsyncResult *simple;
+  va_list args;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (domain != 0);
+  g_return_if_fail (format != NULL);
+
+  simple = g_simple_async_result_new (object,
+				      callback,
+				      user_data, NULL);
+
+  va_start (args, format);
+  g_simple_async_result_set_error_va (simple, domain, code, format, args);
+  va_end (args);
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+/**
+ * g_simple_async_report_gerror_in_idle:
+ * @object: a #GObject.
+ * @callback: a #GAsyncReadyCallback. 
+ * @user_data: user data passed to @callback.
+ * @error: the #GError to report
+ * 
+ * Reports an error in an idle function. Similar to 
+ * g_simple_async_report_error_in_idle(), but takes a #GError rather 
+ * than building a new one.
+ **/
+void
+g_simple_async_report_gerror_in_idle (GObject *object,
+				      GAsyncReadyCallback callback,
+				      gpointer user_data,
+				      GError *error)
+{
+  GSimpleAsyncResult *simple;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (error != NULL);
+
+  simple = g_simple_async_result_new_from_error (object,
+						 callback,
+						 user_data,
+						 error);
+  g_simple_async_result_complete_in_idle (simple);
+  g_object_unref (simple);
+}
+
+#define __G_SIMPLE_ASYNC_RESULT_C__
+#include "gioaliasdef.c"
diff --git a/gio/gsimpleasyncresult.h b/gio/gsimpleasyncresult.h
new file mode 100644
index 0000000..7259a97
--- /dev/null
+++ b/gio/gsimpleasyncresult.h
@@ -0,0 +1,125 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_SIMPLE_ASYNC_RESULT_H__
+#define __G_SIMPLE_ASYNC_RESULT_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_SIMPLE_ASYNC_RESULT         (g_simple_async_result_get_type ())
+#define G_SIMPLE_ASYNC_RESULT(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResult))
+#define G_SIMPLE_ASYNC_RESULT_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResultClass))
+#define G_IS_SIMPLE_ASYNC_RESULT(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_SIMPLE_ASYNC_RESULT))
+#define G_IS_SIMPLE_ASYNC_RESULT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_SIMPLE_ASYNC_RESULT))
+#define G_SIMPLE_ASYNC_RESULT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_SIMPLE_ASYNC_RESULT, GSimpleAsyncResultClass))
+
+/**
+ * GSimpleAsyncResult:
+ *
+ * A simple implementation of #GAsyncResult.
+ **/
+typedef struct _GSimpleAsyncResultClass   GSimpleAsyncResultClass;
+
+
+GType               g_simple_async_result_get_type         (void) G_GNUC_CONST;
+
+GSimpleAsyncResult *g_simple_async_result_new              (GObject                 *source_object,
+							    GAsyncReadyCallback      callback,
+							    gpointer                 user_data,
+							    gpointer                 source_tag);
+GSimpleAsyncResult *g_simple_async_result_new_error        (GObject                 *source_object,
+							    GAsyncReadyCallback      callback,
+							    gpointer                 user_data,
+							    GQuark                   domain,
+							    gint                     code,
+							    const char              *format,
+							    ...) G_GNUC_PRINTF (6, 7);
+GSimpleAsyncResult *g_simple_async_result_new_from_error   (GObject                 *source_object,
+							    GAsyncReadyCallback      callback,
+							    gpointer                 user_data,
+							    GError                  *error);
+
+void                g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult      *simple,
+                                                               gpointer                 op_res,
+                                                               GDestroyNotify           destroy_op_res);
+gpointer            g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult      *simple);
+
+void                g_simple_async_result_set_op_res_gssize   (GSimpleAsyncResult      *simple,
+                                                               gssize                   op_res);
+gssize              g_simple_async_result_get_op_res_gssize   (GSimpleAsyncResult      *simple);
+
+void                g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult      *simple,
+                                                               gboolean                 op_res);
+gboolean            g_simple_async_result_get_op_res_gboolean (GSimpleAsyncResult      *simple);
+
+
+
+gpointer            g_simple_async_result_get_source_tag   (GSimpleAsyncResult      *simple);
+void                g_simple_async_result_set_handle_cancellation (GSimpleAsyncResult      *simple,
+								   gboolean          handle_cancellation);
+void                g_simple_async_result_complete         (GSimpleAsyncResult      *simple);
+void                g_simple_async_result_complete_in_idle (GSimpleAsyncResult      *simple);
+void                g_simple_async_result_run_in_thread    (GSimpleAsyncResult      *simple,
+							    GSimpleAsyncThreadFunc   func,
+							    int                      io_priority,
+							    GCancellable            *cancellable);
+void                g_simple_async_result_set_from_error   (GSimpleAsyncResult      *simple,
+							    GError                  *error);
+gboolean            g_simple_async_result_propagate_error  (GSimpleAsyncResult      *simple,
+							    GError                 **dest);
+void                g_simple_async_result_set_error        (GSimpleAsyncResult      *simple,
+							    GQuark                   domain,
+							    gint                     code,
+							    const char              *format,
+							    ...) G_GNUC_PRINTF (4, 5);
+void                g_simple_async_result_set_error_va     (GSimpleAsyncResult      *simple,
+							    GQuark                   domain,
+							    gint                     code,
+							    const char              *format,
+							    va_list                  args);
+gboolean            g_simple_async_result_is_valid         (GAsyncResult            *result,
+                                                            GObject                 *source,
+                                                            gpointer                 source_tag);
+
+void g_simple_async_report_error_in_idle  (GObject            *object,
+					   GAsyncReadyCallback callback,
+					   gpointer            user_data,
+					   GQuark              domain,
+					   gint                code,
+					   const char         *format,
+					   ...);
+void g_simple_async_report_gerror_in_idle (GObject            *object,
+					   GAsyncReadyCallback callback,
+					   gpointer            user_data,
+					   GError             *error);
+
+G_END_DECLS
+
+
+
+#endif /* __G_SIMPLE_ASYNC_RESULT_H__ */
diff --git a/gio/gthemedicon.c b/gio/gthemedicon.c
new file mode 100644
index 0000000..68f8226
--- /dev/null
+++ b/gio/gthemedicon.c
@@ -0,0 +1,526 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gthemedicon.h"
+#include "gicon.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gthemedicon
+ * @short_description: Icon theming support
+ * @include: gio/gio.h
+ * @see_also: #GIcon, #GLoadableIcon
+ *
+ * #GThemedIcon is an implementation of #GIcon that supports icon themes.
+ * #GThemedIcon contains a list of all of the icons present in an icon
+ * theme, so that icons can be looked up quickly. #GThemedIcon does
+ * not provide actual pixmaps for icons, just the icon names.
+ * Ideally something like gtk_icon_theme_choose_icon() should be used to
+ * resolve the list of names so that fallback icons work nicely with
+ * themes that inherit other themes.
+ **/
+
+static void g_themed_icon_icon_iface_init (GIconIface *iface);
+
+struct _GThemedIcon
+{
+  GObject parent_instance;
+  
+  char     **names;
+  gboolean   use_default_fallbacks;
+};
+
+struct _GThemedIconClass
+{
+  GObjectClass parent_class;
+};
+
+enum
+{
+  PROP_0,
+  PROP_NAME,
+  PROP_NAMES,
+  PROP_USE_DEFAULT_FALLBACKS
+};
+
+G_DEFINE_TYPE_WITH_CODE (GThemedIcon, g_themed_icon, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_ICON,
+						g_themed_icon_icon_iface_init))
+
+static void
+g_themed_icon_get_property (GObject    *object,
+                            guint       prop_id,
+                            GValue     *value,
+                            GParamSpec *pspec)
+{
+  GThemedIcon *icon = G_THEMED_ICON (object);
+
+  switch (prop_id)
+    {
+      case PROP_NAMES:
+        g_value_set_boxed (value, icon->names);
+        break;
+
+      case PROP_USE_DEFAULT_FALLBACKS:
+        g_value_set_boolean (value, icon->use_default_fallbacks);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+g_themed_icon_set_property (GObject      *object,
+                            guint         prop_id,
+                            const GValue *value,
+                            GParamSpec   *pspec)
+{
+  GThemedIcon *icon = G_THEMED_ICON (object);
+  gchar **names;
+  const gchar *name;
+
+  switch (prop_id)
+    {
+      case PROP_NAME:
+        name = g_value_get_string (value);
+
+        if (!name)
+          break;
+
+        if (icon->names)
+          g_strfreev (icon->names);
+
+        icon->names = g_new (char *, 2);
+        icon->names[0] = g_strdup (name);
+        icon->names[1] = NULL;
+        break;
+
+      case PROP_NAMES:
+        names = g_value_dup_boxed (value);
+
+        if (!names)
+          break;
+
+        if (icon->names)
+          g_strfreev (icon->names);
+
+        icon->names = names;
+        break;
+
+      case PROP_USE_DEFAULT_FALLBACKS:
+        icon->use_default_fallbacks = g_value_get_boolean (value);
+        break;
+
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+g_themed_icon_constructed (GObject *object)
+{
+  GThemedIcon *themed = G_THEMED_ICON (object);
+
+  g_return_if_fail (themed->names != NULL && themed->names[0] != NULL);
+
+  if (themed->use_default_fallbacks)
+    {
+      int i = 0, dashes = 0;
+      const char *p;
+      char *dashp;
+      char *last;
+
+      p = themed->names[0];
+      while (*p)
+        {
+          if (*p == '-')
+            dashes++;
+          p++;
+        }
+
+      last = g_strdup (themed->names[0]);
+
+      g_strfreev (themed->names);
+
+      themed->names = g_new (char *, dashes + 1 + 1);
+      themed->names[i++] = last;
+
+      while ((dashp = strrchr (last, '-')) != NULL)
+        themed->names[i++] = last = g_strndup (last, dashp - last);
+
+      themed->names[i++] = NULL;
+    }
+}
+
+static void
+g_themed_icon_finalize (GObject *object)
+{
+  GThemedIcon *themed;
+
+  themed = G_THEMED_ICON (object);
+
+  g_strfreev (themed->names);
+
+  G_OBJECT_CLASS (g_themed_icon_parent_class)->finalize (object);
+}
+
+static void
+g_themed_icon_class_init (GThemedIconClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_themed_icon_finalize;
+  gobject_class->constructed = g_themed_icon_constructed;
+  gobject_class->set_property = g_themed_icon_set_property;
+  gobject_class->get_property = g_themed_icon_get_property;
+
+  /**
+   * GThemedIcon:name:
+   *
+   * The icon name.
+   */
+  g_object_class_install_property (gobject_class, PROP_NAME,
+                                   g_param_spec_string ("name",
+                                                        _("name"),
+                                                        _("The name of the icon"),
+                                                        NULL,
+                                                        G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+
+  /**
+   * GThemedIcon:names:
+   *
+   * A %NULL-terminated array of icon names.
+   */
+  g_object_class_install_property (gobject_class, PROP_NAMES,
+                                   g_param_spec_boxed ("names",
+                                                       _("names"),
+                                                       _("An array containing the icon names"),
+                                                       G_TYPE_STRV,
+                                                       G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+
+  /**
+   * GThemedIcon:use-default-fallbacks:
+   *
+   * Whether to use the default fallbacks found by shortening the icon name 
+   * at '-' characters. If the "names" array has more than one element, 
+   * ignores any past the first.
+   *
+   * For example, if the icon name was "gnome-dev-cdrom-audio", the array 
+   * would become
+   * |[
+   * {
+   *   "gnome-dev-cdrom-audio",
+   *   "gnome-dev-cdrom",
+   *   "gnome-dev",
+   *   "gnome",
+   *   NULL
+   * };
+   * ]|
+   */
+  g_object_class_install_property (gobject_class, PROP_USE_DEFAULT_FALLBACKS,
+                                   g_param_spec_boolean ("use-default-fallbacks",
+                                                         _("use default fallbacks"),
+                                                         _("Whether to use default fallbacks found by shortening the name at '-' characters. Ignores names after the first if multiple names are given."),
+                                                         FALSE,
+                                                         G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+}
+
+static void
+g_themed_icon_init (GThemedIcon *themed)
+{
+  themed->names = NULL;
+}
+
+/**
+ * g_themed_icon_new:
+ * @iconname: a string containing an icon name.
+ * 
+ * Creates a new themed icon for @iconname.
+ * 
+ * Returns: a new #GThemedIcon.
+ **/
+GIcon *
+g_themed_icon_new (const char *iconname)
+{
+  g_return_val_if_fail (iconname != NULL, NULL);
+
+  return G_ICON (g_object_new (G_TYPE_THEMED_ICON, "name", iconname, NULL));
+}
+
+/**
+ * g_themed_icon_new_from_names:
+ * @iconnames: an array of strings containing icon names.
+ * @len: the length of the @iconnames array, or -1 if @iconnames is 
+ *     %NULL-terminated
+ * 
+ * Creates a new themed icon for @iconnames.
+ * 
+ * Returns: a new #GThemedIcon
+ **/
+GIcon *
+g_themed_icon_new_from_names (char **iconnames,
+                              int    len)
+{
+  GIcon *icon = icon;
+
+  g_return_val_if_fail (iconnames != NULL, NULL);
+
+  if (len >= 0)
+    {
+      char **names;
+      int i;
+
+      names = g_new (char *, len + 1);
+
+      for (i = 0; i < len; i++)
+        names[i] = iconnames[i];
+
+      names[i] = NULL;
+
+      icon = G_ICON (g_object_new (G_TYPE_THEMED_ICON, "names", names, NULL));
+
+      g_free (names);
+    }
+  else
+    icon = G_ICON (g_object_new (G_TYPE_THEMED_ICON, "names", iconnames, NULL));
+
+  return icon;
+}
+
+/**
+ * g_themed_icon_new_with_default_fallbacks:
+ * @iconname: a string containing an icon name
+ *
+ * Creates a new themed icon for @iconname, and all the names
+ * that can be created by shortening @iconname at '-' characters.
+ * 
+ * In the following example, @icon1 and @icon2 are equivalent:
+ * |[
+ * const char *names[] = { 
+ *   "gnome-dev-cdrom-audio",
+ *   "gnome-dev-cdrom",
+ *   "gnome-dev",
+ *   "gnome"
+ * };
+ *
+ * icon1 = g_themed_icon_new_from_names (names, 4);
+ * icon2 = g_themed_icon_new_with_default_fallbacks ("gnome-dev-cdrom-audio");
+ * ]|
+ *
+ * Returns: a new #GThemedIcon.
+ */
+GIcon *
+g_themed_icon_new_with_default_fallbacks (const char *iconname)
+{
+  g_return_val_if_fail (iconname != NULL, NULL);
+
+  return G_ICON (g_object_new (G_TYPE_THEMED_ICON, "name", iconname, "use-default-fallbacks", TRUE, NULL));
+}
+
+
+/**
+ * g_themed_icon_get_names:
+ * @icon: a #GThemedIcon.
+ * 
+ * Gets the names of icons from within @icon.
+ * 
+ * Returns: a list of icon names.
+ **/
+const char * const *
+g_themed_icon_get_names (GThemedIcon *icon)
+{
+  g_return_val_if_fail (G_IS_THEMED_ICON (icon), NULL);
+  return (const char * const *)icon->names;
+}
+
+/**
+ * g_themed_icon_append_name:
+ * @icon: a #GThemedIcon
+ * @iconname: name of icon to append to list of icons from within @icon.
+ *
+ * Append a name to the list of icons from within @icon.
+ *
+ * <note><para>
+ * Note that doing so invalidates the hash computed by prior calls
+ * to g_icon_hash().
+ * </para></note>
+ */
+void
+g_themed_icon_append_name (GThemedIcon *icon, 
+                           const char  *iconname)
+{
+  guint num_names;
+
+  g_return_if_fail (G_IS_THEMED_ICON (icon));
+  g_return_if_fail (iconname != NULL);
+
+  num_names = g_strv_length (icon->names);
+  icon->names = g_realloc (icon->names, sizeof (char*) * (num_names + 2));
+  icon->names[num_names] = g_strdup (iconname);
+  icon->names[num_names + 1] = NULL;
+
+  g_object_notify (G_OBJECT (icon), "names");
+}
+
+/**
+ * g_themed_icon_prepend_name:
+ * @icon: a #GThemedIcon
+ * @iconname: name of icon to prepend to list of icons from within @icon.
+ *
+ * Prepend a name to the list of icons from within @icon.
+ *
+ * <note><para>
+ * Note that doing so invalidates the hash computed by prior calls
+ * to g_icon_hash().
+ * </para></note>
+ *
+ * Since: 2.18
+ */
+void
+g_themed_icon_prepend_name (GThemedIcon *icon, 
+                            const char  *iconname)
+{
+  guint num_names;
+  gchar **names;
+  gint i;
+
+  g_return_if_fail (G_IS_THEMED_ICON (icon));
+  g_return_if_fail (iconname != NULL);
+
+  num_names = g_strv_length (icon->names);
+  names = g_new (char*, num_names + 2);
+  for (i = 0; icon->names[i]; i++)
+    names[i + 1] = icon->names[i];
+  names[0] = g_strdup (iconname);
+  names[num_names + 1] = NULL;
+
+  g_free (icon->names);
+  icon->names = names;
+
+  g_object_notify (G_OBJECT (icon), "names");
+}
+
+static guint
+g_themed_icon_hash (GIcon *icon)
+{
+  GThemedIcon *themed = G_THEMED_ICON (icon);
+  guint hash;
+  int i;
+
+  hash = 0;
+
+  for (i = 0; themed->names[i] != NULL; i++)
+    hash ^= g_str_hash (themed->names[i]);
+  
+  return hash;
+}
+
+static gboolean
+g_themed_icon_equal (GIcon *icon1,
+                     GIcon *icon2)
+{
+  GThemedIcon *themed1 = G_THEMED_ICON (icon1);
+  GThemedIcon *themed2 = G_THEMED_ICON (icon2);
+  int i;
+
+  for (i = 0; themed1->names[i] != NULL && themed2->names[i] != NULL; i++)
+    {
+      if (!g_str_equal (themed1->names[i], themed2->names[i]))
+	return FALSE;
+    }
+
+  return themed1->names[i] == NULL && themed2->names[i] == NULL;
+}
+
+
+static gboolean
+g_themed_icon_to_tokens (GIcon *icon,
+			 GPtrArray *tokens,
+                         gint  *out_version)
+{
+  GThemedIcon *themed_icon = G_THEMED_ICON (icon);
+  int n;
+
+  g_return_val_if_fail (out_version != NULL, FALSE);
+
+  *out_version = 0;
+
+  for (n = 0; themed_icon->names[n] != NULL; n++)
+    g_ptr_array_add (tokens,
+		     g_strdup (themed_icon->names[n]));
+  
+  return TRUE;
+}
+
+static GIcon *
+g_themed_icon_from_tokens (gchar  **tokens,
+                           gint     num_tokens,
+                           gint     version,
+                           GError **error)
+{
+  GIcon *icon;
+  gchar **names;
+  int n;
+
+  icon = NULL;
+
+  if (version != 0)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_ARGUMENT,
+                   _("Can't handle version %d of GThemedIcon encoding"),
+                   version);
+      goto out;
+    }
+  
+  names = g_new0 (gchar *, num_tokens + 1);
+  for (n = 0; n < num_tokens; n++)
+    names[n] = tokens[n];
+  names[n] = NULL;
+
+  icon = g_themed_icon_new_from_names (names, num_tokens);
+  g_free (names);
+
+ out:
+  return icon;
+}
+
+static void
+g_themed_icon_icon_iface_init (GIconIface *iface)
+{
+  iface->hash = g_themed_icon_hash;
+  iface->equal = g_themed_icon_equal;
+  iface->to_tokens = g_themed_icon_to_tokens;
+  iface->from_tokens = g_themed_icon_from_tokens;
+}
+
+#define __G_THEMED_ICON_C__
+#include "gioaliasdef.c"
diff --git a/gio/gthemedicon.h b/gio/gthemedicon.h
new file mode 100644
index 0000000..7b934fd
--- /dev/null
+++ b/gio/gthemedicon.h
@@ -0,0 +1,63 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_THEMED_ICON_H__
+#define __G_THEMED_ICON_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_THEMED_ICON         (g_themed_icon_get_type ())
+#define G_THEMED_ICON(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_THEMED_ICON, GThemedIcon))
+#define G_THEMED_ICON_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_THEMED_ICON, GThemedIconClass))
+#define G_IS_THEMED_ICON(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_THEMED_ICON))
+#define G_IS_THEMED_ICON_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_THEMED_ICON))
+#define G_THEMED_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_THEMED_ICON, GThemedIconClass))
+
+/**
+ * GThemedIcon:
+ *
+ * An implementation of #GIcon for themed icons.
+ **/
+typedef struct _GThemedIconClass   GThemedIconClass;
+
+GType  g_themed_icon_get_type                   (void) G_GNUC_CONST;
+
+GIcon *g_themed_icon_new                        (const char  *iconname);
+GIcon *g_themed_icon_new_with_default_fallbacks (const char  *iconname);
+GIcon *g_themed_icon_new_from_names             (char       **iconnames,
+                                                 int          len);
+void   g_themed_icon_prepend_name               (GThemedIcon *icon,
+                                                 const char  *iconname);
+void   g_themed_icon_append_name                (GThemedIcon *icon,
+                                                 const char  *iconname);
+
+const char * const *g_themed_icon_get_names     (GThemedIcon *icon);
+
+G_END_DECLS
+
+#endif /* __G_THEMED_ICON_H__ */
diff --git a/gio/gunionvolumemonitor.c b/gio/gunionvolumemonitor.c
new file mode 100644
index 0000000..12ef95c
--- /dev/null
+++ b/gio/gunionvolumemonitor.c
@@ -0,0 +1,690 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib.h>
+#include "gunionvolumemonitor.h"
+#include "gmountprivate.h"
+#include "giomodule-priv.h"
+#ifdef G_OS_UNIX
+#include "gunixvolumemonitor.h"
+#endif
+#include "gnativevolumemonitor.h"
+
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+struct _GUnionVolumeMonitor {
+  GVolumeMonitor parent;
+
+  GList *monitors;
+};
+
+static void g_union_volume_monitor_remove_monitor (GUnionVolumeMonitor *union_monitor,
+						   GVolumeMonitor *child_monitor);
+
+
+#define g_union_volume_monitor_get_type _g_union_volume_monitor_get_type
+G_DEFINE_TYPE (GUnionVolumeMonitor, g_union_volume_monitor, G_TYPE_VOLUME_MONITOR);
+
+static GStaticRecMutex the_volume_monitor_mutex = G_STATIC_REC_MUTEX_INIT;
+
+static GUnionVolumeMonitor *the_volume_monitor = NULL;
+
+static void
+g_union_volume_monitor_finalize (GObject *object)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+
+  monitor = G_UNION_VOLUME_MONITOR (object);
+
+  while (monitor->monitors != NULL)
+    {
+      child_monitor = monitor->monitors->data;
+      g_union_volume_monitor_remove_monitor (monitor, 
+                                             child_monitor);
+      g_object_unref (child_monitor);
+    }
+
+  G_OBJECT_CLASS (g_union_volume_monitor_parent_class)->finalize (object);
+}
+
+static void
+g_union_volume_monitor_dispose (GObject *object)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+  GList *l;
+
+  monitor = G_UNION_VOLUME_MONITOR (object);
+
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+  the_volume_monitor = NULL;
+
+  for (l = monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+      g_object_run_dispose (G_OBJECT (child_monitor));
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  G_OBJECT_CLASS (g_union_volume_monitor_parent_class)->dispose (object);
+}
+
+static GList *
+get_mounts (GVolumeMonitor *volume_monitor)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+  GList *res;
+  GList *l;
+  
+  monitor = G_UNION_VOLUME_MONITOR (volume_monitor);
+
+  res = NULL;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  for (l = monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+
+      res = g_list_concat (res, g_volume_monitor_get_mounts (child_monitor));
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return res;
+}
+
+static GList *
+get_volumes (GVolumeMonitor *volume_monitor)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+  GList *res;
+  GList *l;
+  
+  monitor = G_UNION_VOLUME_MONITOR (volume_monitor);
+
+  res = NULL;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  for (l = monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+
+      res = g_list_concat (res, g_volume_monitor_get_volumes (child_monitor));
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return res;
+}
+
+static GList *
+get_connected_drives (GVolumeMonitor *volume_monitor)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+  GList *res;
+  GList *l;
+  
+  monitor = G_UNION_VOLUME_MONITOR (volume_monitor);
+
+  res = NULL;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  for (l = monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+
+      res = g_list_concat (res, g_volume_monitor_get_connected_drives (child_monitor));
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return res;
+}
+
+static GVolume *
+get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+  GVolume *volume;
+  GList *l;
+  
+  monitor = G_UNION_VOLUME_MONITOR (volume_monitor);
+
+  volume = NULL;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  for (l = monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+
+      volume = g_volume_monitor_get_volume_for_uuid (child_monitor, uuid);
+      if (volume != NULL)
+        break;
+
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return volume;
+}
+
+static GMount *
+get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
+{
+  GUnionVolumeMonitor *monitor;
+  GVolumeMonitor *child_monitor;
+  GMount *mount;
+  GList *l;
+  
+  monitor = G_UNION_VOLUME_MONITOR (volume_monitor);
+
+  mount = NULL;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  for (l = monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+
+      mount = g_volume_monitor_get_mount_for_uuid (child_monitor, uuid);
+      if (mount != NULL)
+        break;
+
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return mount;
+}
+
+static void
+g_union_volume_monitor_class_init (GUnionVolumeMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_union_volume_monitor_finalize;
+  gobject_class->dispose = g_union_volume_monitor_dispose;
+
+  monitor_class->get_connected_drives = get_connected_drives;
+  monitor_class->get_volumes = get_volumes;
+  monitor_class->get_mounts = get_mounts;
+  monitor_class->get_volume_for_uuid = get_volume_for_uuid;
+  monitor_class->get_mount_for_uuid = get_mount_for_uuid;
+}
+
+static void
+child_volume_added (GVolumeMonitor      *child_monitor,
+                    GVolume    *child_volume,
+                    GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "volume-added",
+			 child_volume);
+}
+
+static void
+child_volume_removed (GVolumeMonitor      *child_monitor,
+                      GVolume    *child_volume,
+                      GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "volume-removed",
+			 child_volume);
+}
+
+static void
+child_volume_changed (GVolumeMonitor      *child_monitor,
+                      GVolume    *child_volume,
+                      GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "volume-changed",
+			 child_volume);
+}
+
+static void
+child_mount_added (GVolumeMonitor      *child_monitor,
+                   GMount              *child_mount,
+                   GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+                         "mount-added",
+                         child_mount);
+}
+
+static void
+child_mount_removed (GVolumeMonitor      *child_monitor,
+                     GMount              *child_mount,
+                     GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "mount-removed",
+			 child_mount);
+}
+
+static void
+child_mount_pre_unmount (GVolumeMonitor       *child_monitor,
+                          GMount              *child_mount,
+                          GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "mount-pre-unmount",
+			 child_mount);
+}
+
+
+static void
+child_mount_changed (GVolumeMonitor       *child_monitor,
+                      GMount              *child_mount,
+                      GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "mount-changed",
+			 child_mount);
+}
+
+static void
+child_drive_connected (GVolumeMonitor      *child_monitor,
+                       GDrive              *child_drive,
+                       GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "drive-connected",
+			 child_drive);
+}
+
+static void
+child_drive_disconnected (GVolumeMonitor      *child_monitor,
+                          GDrive              *child_drive,
+                          GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+			 "drive-disconnected",
+			 child_drive);
+}
+
+static void
+child_drive_changed (GVolumeMonitor      *child_monitor,
+                     GDrive             *child_drive,
+                     GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+                         "drive-changed",
+                         child_drive);
+}
+
+static void
+child_drive_eject_button (GVolumeMonitor      *child_monitor,
+                          GDrive             *child_drive,
+                          GUnionVolumeMonitor *union_monitor)
+{
+  g_signal_emit_by_name (union_monitor,
+                         "drive-eject-button",
+                         child_drive);
+}
+
+static void
+g_union_volume_monitor_add_monitor (GUnionVolumeMonitor *union_monitor,
+                                    GVolumeMonitor      *volume_monitor)
+{
+  if (g_list_find (union_monitor->monitors, volume_monitor))
+    return;
+
+  union_monitor->monitors =
+    g_list_prepend (union_monitor->monitors,
+		    g_object_ref (volume_monitor));
+
+  g_signal_connect (volume_monitor, "volume-added", (GCallback)child_volume_added, union_monitor);
+  g_signal_connect (volume_monitor, "volume-removed", (GCallback)child_volume_removed, union_monitor);
+  g_signal_connect (volume_monitor, "volume-changed", (GCallback)child_volume_changed, union_monitor);
+  g_signal_connect (volume_monitor, "mount-added", (GCallback)child_mount_added, union_monitor);
+  g_signal_connect (volume_monitor, "mount-removed", (GCallback)child_mount_removed, union_monitor);
+  g_signal_connect (volume_monitor, "mount-pre-unmount", (GCallback)child_mount_pre_unmount, union_monitor);
+  g_signal_connect (volume_monitor, "mount-changed", (GCallback)child_mount_changed, union_monitor);
+  g_signal_connect (volume_monitor, "drive-connected", (GCallback)child_drive_connected, union_monitor);
+  g_signal_connect (volume_monitor, "drive-disconnected", (GCallback)child_drive_disconnected, union_monitor);
+  g_signal_connect (volume_monitor, "drive-changed", (GCallback)child_drive_changed, union_monitor);
+  g_signal_connect (volume_monitor, "drive-eject-button", (GCallback)child_drive_eject_button, union_monitor);
+}
+
+static void
+g_union_volume_monitor_remove_monitor (GUnionVolumeMonitor *union_monitor,
+                                       GVolumeMonitor      *child_monitor)
+{
+  GList *l;
+
+  l = g_list_find (union_monitor->monitors, child_monitor);
+  if (l == NULL)
+    return;
+
+  union_monitor->monitors = g_list_delete_link (union_monitor->monitors, l);
+
+  g_signal_handlers_disconnect_by_func (child_monitor, child_volume_added, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_volume_removed, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_volume_changed, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_mount_added, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_mount_removed, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_mount_pre_unmount, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_mount_changed, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_drive_connected, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_drive_disconnected, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_drive_changed, union_monitor);
+  g_signal_handlers_disconnect_by_func (child_monitor, child_drive_eject_button, union_monitor);
+}
+
+static GType
+get_default_native_class (gpointer data)
+{
+  GNativeVolumeMonitorClass *klass, *native_class, **native_class_out;
+  const char *use_this;
+  GIOExtensionPoint *ep;
+  GIOExtension *extension;
+  GList *l;
+
+  native_class_out = data;
+  
+  use_this = g_getenv ("GIO_USE_VOLUME_MONITOR");
+  
+  /* Ensure vfs in modules loaded */
+  _g_io_modules_ensure_loaded ();
+
+  ep = g_io_extension_point_lookup (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME);
+
+  native_class = NULL;
+  if (use_this)
+    {
+      extension = g_io_extension_point_get_extension_by_name (ep, use_this);
+      if (extension)
+	{
+	  klass = G_NATIVE_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension));
+	  if (G_VOLUME_MONITOR_CLASS (klass)->is_supported())
+	    native_class = klass;
+	  else
+	    g_type_class_unref (klass);
+	}
+    }
+
+  if (native_class == NULL)
+    {
+      for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
+	{
+	  extension = l->data;
+	  klass = G_NATIVE_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension));
+	  if (G_VOLUME_MONITOR_CLASS (klass)->is_supported())
+	    {
+	      native_class = klass;
+	      break;
+	    }
+	  else
+	    g_type_class_unref (klass);
+	}
+    }
+ 
+  if (native_class)
+    {
+      *native_class_out = native_class;
+      return G_TYPE_FROM_CLASS (native_class);
+    }
+  else
+    return G_TYPE_INVALID;
+}
+
+/* We return the class, with a ref taken.
+ * This way we avoid unloading the class/module
+ * between selecting the type and creating the
+ * instance on the first call.
+ */
+static GNativeVolumeMonitorClass *
+get_native_class (void)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  GTypeClass *type_class;
+
+  type_class = NULL;
+  g_once (&once_init, (GThreadFunc)get_default_native_class, &type_class);
+
+  if (type_class == NULL && once_init.retval != GUINT_TO_POINTER(G_TYPE_INVALID))
+    type_class = g_type_class_ref ((GType)once_init.retval);
+  
+  return (GNativeVolumeMonitorClass *)type_class;
+}
+
+static void
+g_union_volume_monitor_init (GUnionVolumeMonitor *union_monitor)
+{
+}
+
+static void
+populate_union_monitor (GUnionVolumeMonitor *union_monitor)
+{
+  GVolumeMonitor *monitor;
+  GNativeVolumeMonitorClass *native_class;
+  GVolumeMonitorClass *klass;
+  GIOExtensionPoint *ep;
+  GIOExtension *extension;
+  GList *l;
+
+  native_class = get_native_class ();
+
+  if (native_class != NULL)
+    {
+      monitor = g_object_new (G_TYPE_FROM_CLASS (native_class), NULL);
+      g_union_volume_monitor_add_monitor (union_monitor, monitor);
+      g_object_unref (monitor);
+      g_type_class_unref (native_class);
+    }
+
+  ep = g_io_extension_point_lookup (G_VOLUME_MONITOR_EXTENSION_POINT_NAME);
+  for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
+    {
+      extension = l->data;
+      
+      klass = G_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension));
+      if (klass->is_supported == NULL || klass->is_supported())
+	{
+	  monitor = g_object_new (g_io_extension_get_type (extension), NULL);
+	  g_union_volume_monitor_add_monitor (union_monitor, monitor);
+	  g_object_unref (monitor);
+	}
+      g_type_class_unref (klass);
+    }
+}
+
+static GUnionVolumeMonitor *
+g_union_volume_monitor_new (void)
+{
+  GUnionVolumeMonitor *monitor;
+
+  monitor = g_object_new (G_TYPE_UNION_VOLUME_MONITOR, NULL);
+  
+  return monitor;
+}
+
+/**
+ * g_volume_monitor_get:
+ * 
+ * Gets the volume monitor used by gio.
+ *
+ * Returns: a reference to the #GVolumeMonitor used by gio. Call
+ *    g_object_unref() when done with it.
+ **/
+GVolumeMonitor *
+g_volume_monitor_get (void)
+{
+  GVolumeMonitor *vm;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  if (the_volume_monitor)
+    vm = G_VOLUME_MONITOR (g_object_ref (the_volume_monitor));
+  else
+    {
+      the_volume_monitor = g_union_volume_monitor_new ();
+      populate_union_monitor (the_volume_monitor);
+      vm = G_VOLUME_MONITOR (the_volume_monitor);
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return vm;
+}
+
+/**
+ * _g_mount_get_for_mount_path:
+ * @mountpoint: a string.
+ * @cancellable: a #GCancellable, or %NULL
+ * 
+ * Returns: a #GMount for given @mount_path or %NULL.  
+ **/
+GMount *
+_g_mount_get_for_mount_path (const char *mount_path,
+			     GCancellable *cancellable)
+{
+  GNativeVolumeMonitorClass *klass;
+  GMount *mount;
+  
+  klass = get_native_class ();
+  if (klass == NULL)
+    return NULL;
+
+  mount = NULL;
+
+  if (klass->get_mount_for_mount_path)
+    {
+      g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+      mount = klass->get_mount_for_mount_path (mount_path, cancellable);
+      g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+    }
+
+  /* TODO: How do we know this succeeded? Keep in mind that the native
+   *       volume monitor may fail (e.g. not being able to connect to
+   *       hald). Is the get_mount_for_mount_path() method allowed to
+   *       return NULL? Seems like it is ... probably the method needs
+   *       to take a boolean and write if it succeeds or not.. Messy.
+   *       Very messy.
+   */
+  
+  g_type_class_unref (klass);
+
+  return mount;
+}
+
+/**
+ * g_volume_monitor_adopt_orphan_mount:
+ * @mount: a #GMount object to find a parent for
+ *
+ * This function should be called by any #GVolumeMonitor
+ * implementation when a new #GMount object is created that is not
+ * associated with a #GVolume object. It must be called just before
+ * emitting the @mount_added signal.
+ *
+ * If the return value is not %NULL, the caller must associate the
+ * returned #GVolume object with the #GMount. This involves returning
+ * it in its g_mount_get_volume() implementation. The caller must
+ * also listen for the "removed" signal on the returned object
+ * and give up its reference when handling that signal
+ * 
+ * Similary, if implementing g_volume_monitor_adopt_orphan_mount(),
+ * the implementor must take a reference to @mount and return it in
+ * its g_volume_get_mount() implemented. Also, the implementor must
+ * listen for the "unmounted" signal on @mount and give up its
+ * reference upon handling that signal.
+ *
+ * There are two main use cases for this function.
+ *
+ * One is when implementing a user space file system driver that reads
+ * blocks of a block device that is already represented by the native
+ * volume monitor (for example a CD Audio file system driver). Such
+ * a driver will generate its own #GMount object that needs to be
+ * assoicated with the #GVolume object that represents the volume.
+ *
+ * The other is for implementing a #GVolumeMonitor whose sole purpose
+ * is to return #GVolume objects representing entries in the users
+ * "favorite servers" list or similar.
+ *
+ * Returns: the #GVolume object that is the parent for @mount or %NULL
+ * if no wants to adopt the #GMount.
+ *
+ * Deprecated: 2.20: Instead of using this function, #GVolumeMonitor
+ * implementations should instead create shadow mounts with the URI of
+ * the mount they intend to adopt. See the proxy volume monitor in
+ * gvfs for an example of this. Also see g_mount_is_shadowed(),
+ * g_mount_shadow() and g_mount_unshadow() functions.
+ */
+GVolume *
+g_volume_monitor_adopt_orphan_mount (GMount *mount)
+{
+  GVolumeMonitor *child_monitor;
+  GVolumeMonitorClass *child_monitor_class;
+  GVolume *volume;
+  GList *l;
+
+  g_return_val_if_fail (mount != NULL, NULL);
+
+  if (the_volume_monitor == NULL)
+    return NULL;
+
+  volume = NULL;
+  
+  g_static_rec_mutex_lock (&the_volume_monitor_mutex);
+
+  for (l = the_volume_monitor->monitors; l != NULL; l = l->next)
+    {
+      child_monitor = l->data;
+      child_monitor_class = G_VOLUME_MONITOR_GET_CLASS (child_monitor);
+
+      if (child_monitor_class->adopt_orphan_mount != NULL)
+        {
+          volume = child_monitor_class->adopt_orphan_mount (mount, child_monitor);
+          if (volume != NULL)
+            break;
+        }
+    }
+  
+  g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
+
+  return volume;
+}
+
+
+#define __G_UNION_VOLUME_MONITOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/gunionvolumemonitor.h b/gio/gunionvolumemonitor.h
new file mode 100644
index 0000000..2924b66
--- /dev/null
+++ b/gio/gunionvolumemonitor.h
@@ -0,0 +1,49 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#ifndef __G_UNION_VOLUME_MONITOR_H__
+#define __G_UNION_VOLUME_MONITOR_H__
+
+#include <gio/gvolumemonitor.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_UNION_VOLUME_MONITOR        (_g_union_volume_monitor_get_type ())
+#define G_UNION_VOLUME_MONITOR(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNION_VOLUME_MONITOR, GUnionVolumeMonitor))
+#define G_UNION_VOLUME_MONITOR_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNION_VOLUME_MONITOR, GUnionVolumeMonitorClass))
+#define G_IS_UNION_VOLUME_MONITOR(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNION_VOLUME_MONITOR))
+#define G_IS_UNION_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNION_VOLUME_MONITOR))
+
+typedef struct _GUnionVolumeMonitor      GUnionVolumeMonitor;
+typedef struct _GUnionVolumeMonitorClass GUnionVolumeMonitorClass;
+
+struct _GUnionVolumeMonitorClass
+{
+  GVolumeMonitorClass parent_class;
+};
+
+GType _g_union_volume_monitor_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __G_UNION_VOLUME_MONITOR_H__ */
diff --git a/gio/gunixinputstream.c b/gio/gunixinputstream.c
new file mode 100644
index 0000000..4ce9529
--- /dev/null
+++ b/gio/gunixinputstream.c
@@ -0,0 +1,652 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include "gioerror.h"
+#include "gsimpleasyncresult.h"
+#include "gunixinputstream.h"
+#include "gcancellable.h"
+#include "gasynchelper.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gunixinputstream
+ * @short_description: Streaming input operations for UNIX file descriptors
+ * @include: gio/gunixinputstream.h
+ * @see_also: #GInputStream
+ *
+ * #GUnixInputStream implements #GInputStream for reading from a
+ * UNIX file descriptor, including asynchronous operations. The file
+ * descriptor must be selectable, so it doesn't work with opened files.
+ *
+ * Note that <filename>&lt;gio/gunixinputstream.h&gt;</filename> belongs 
+ * to the UNIX-specific GIO interfaces, thus you have to use the 
+ * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ */
+
+enum {
+  PROP_0,
+  PROP_FD,
+  PROP_CLOSE_FD
+};
+
+G_DEFINE_TYPE (GUnixInputStream, g_unix_input_stream, G_TYPE_INPUT_STREAM);
+
+struct _GUnixInputStreamPrivate {
+  int fd;
+  gboolean close_fd;
+};
+
+static void     g_unix_input_stream_set_property (GObject              *object,
+						  guint                 prop_id,
+						  const GValue         *value,
+						  GParamSpec           *pspec);
+static void     g_unix_input_stream_get_property (GObject              *object,
+						  guint                 prop_id,
+						  GValue               *value,
+						  GParamSpec           *pspec);
+static gssize   g_unix_input_stream_read         (GInputStream         *stream,
+						  void                 *buffer,
+						  gsize                 count,
+						  GCancellable         *cancellable,
+						  GError              **error);
+static gboolean g_unix_input_stream_close        (GInputStream         *stream,
+						  GCancellable         *cancellable,
+						  GError              **error);
+static void     g_unix_input_stream_read_async   (GInputStream         *stream,
+						  void                 *buffer,
+						  gsize                 count,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              data);
+static gssize   g_unix_input_stream_read_finish  (GInputStream         *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+static void     g_unix_input_stream_skip_async   (GInputStream         *stream,
+						  gsize                 count,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              data);
+static gssize   g_unix_input_stream_skip_finish  (GInputStream         *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+static void     g_unix_input_stream_close_async  (GInputStream         *stream,
+						  int                   io_priority,
+						  GCancellable         *cancellable,
+						  GAsyncReadyCallback   callback,
+						  gpointer              data);
+static gboolean g_unix_input_stream_close_finish (GInputStream         *stream,
+						  GAsyncResult         *result,
+						  GError              **error);
+
+
+static void
+g_unix_input_stream_finalize (GObject *object)
+{
+  GUnixInputStream *stream;
+  
+  stream = G_UNIX_INPUT_STREAM (object);
+
+  G_OBJECT_CLASS (g_unix_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_unix_input_stream_class_init (GUnixInputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GUnixInputStreamPrivate));
+
+  gobject_class->get_property = g_unix_input_stream_get_property;
+  gobject_class->set_property = g_unix_input_stream_set_property;
+  gobject_class->finalize = g_unix_input_stream_finalize;
+
+  stream_class->read_fn = g_unix_input_stream_read;
+  stream_class->close_fn = g_unix_input_stream_close;
+  stream_class->read_async = g_unix_input_stream_read_async;
+  stream_class->read_finish = g_unix_input_stream_read_finish;
+  if (0)
+    {
+      /* TODO: Implement instead of using fallbacks */
+      stream_class->skip_async = g_unix_input_stream_skip_async;
+      stream_class->skip_finish = g_unix_input_stream_skip_finish;
+    }
+  stream_class->close_async = g_unix_input_stream_close_async;
+  stream_class->close_finish = g_unix_input_stream_close_finish;
+
+  /**
+   * GUnixInputStream:fd:
+   *
+   * The file descriptor that the stream reads from.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_FD,
+				   g_param_spec_int ("fd",
+						     _("File descriptor"),
+						     _("The file descriptor to read from"),
+						     G_MININT, G_MAXINT, -1,
+						     G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+  /**
+   * GUnixInputStream:close-fd:
+   *
+   * Whether to close the file descriptor when the stream is closed.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_CLOSE_FD,
+				   g_param_spec_boolean ("close-fd",
+							 _("Close file descriptor"),
+							 _("Whether to close the file descriptor when the stream is closed"),
+							 TRUE,
+							 G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_unix_input_stream_set_property (GObject         *object,
+				  guint            prop_id,
+				  const GValue    *value,
+				  GParamSpec      *pspec)
+{
+  GUnixInputStream *unix_stream;
+  
+  unix_stream = G_UNIX_INPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      unix_stream->priv->fd = g_value_get_int (value);
+      break;
+    case PROP_CLOSE_FD:
+      unix_stream->priv->close_fd = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_unix_input_stream_get_property (GObject    *object,
+				  guint       prop_id,
+				  GValue     *value,
+				  GParamSpec *pspec)
+{
+  GUnixInputStream *unix_stream;
+
+  unix_stream = G_UNIX_INPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      g_value_set_int (value, unix_stream->priv->fd);
+      break;
+    case PROP_CLOSE_FD:
+      g_value_set_boolean (value, unix_stream->priv->close_fd);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+g_unix_input_stream_init (GUnixInputStream *unix_stream)
+{
+  unix_stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (unix_stream,
+						   G_TYPE_UNIX_INPUT_STREAM,
+						   GUnixInputStreamPrivate);
+
+  unix_stream->priv->fd = -1;
+  unix_stream->priv->close_fd = TRUE;
+}
+
+/**
+ * g_unix_input_stream_new:
+ * @fd: a UNIX file descriptor
+ * @close_fd: %TRUE to close the file descriptor when done
+ * 
+ * Creates a new #GUnixInputStream for the given @fd. 
+ *
+ * If @close_fd is %TRUE, the file descriptor will be closed 
+ * when the stream is closed.
+ * 
+ * Returns: a new #GUnixInputStream
+ **/
+GInputStream *
+g_unix_input_stream_new (gint     fd,
+			 gboolean close_fd)
+{
+  GUnixInputStream *stream;
+
+  g_return_val_if_fail (fd != -1, NULL);
+
+  stream = g_object_new (G_TYPE_UNIX_INPUT_STREAM,
+			 "fd", fd,
+			 "close-fd", close_fd,
+			 NULL);
+
+  return G_INPUT_STREAM (stream);
+}
+
+/**
+ * g_unix_input_stream_set_close_fd:
+ * @stream: a #GUnixInputStream
+ * @close_fd: %TRUE to close the file descriptor when done
+ *
+ * Sets whether the file descriptor of @stream shall be closed
+ * when the stream is closed.
+ *
+ * Since: 2.20
+ */
+void
+g_unix_input_stream_set_close_fd (GUnixInputStream *stream,
+				  gboolean          close_fd)
+{
+  g_return_if_fail (G_IS_UNIX_INPUT_STREAM (stream));
+
+  close_fd = close_fd != FALSE;
+  if (stream->priv->close_fd != close_fd)
+    {
+      stream->priv->close_fd = close_fd;
+      g_object_notify (G_OBJECT (stream), "close-fd");
+    }
+}
+
+/**
+ * g_unix_input_stream_get_close_fd:
+ * @stream: a #GUnixInputStream
+ *
+ * Returns whether the file descriptor of @stream will be
+ * closed when the stream is closed.
+ *
+ * Return value: %TRUE if the file descriptor is closed when done
+ *
+ * Since: 2.20
+ */
+gboolean
+g_unix_input_stream_get_close_fd (GUnixInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_INPUT_STREAM (stream), FALSE);
+
+  return stream->priv->close_fd;
+}
+
+/**
+ * g_unix_input_stream_get_fd:
+ * @stream: a #GUnixInputStream
+ *
+ * Return the UNIX file descriptor that the stream reads from.
+ *
+ * Return value: The file descriptor of @stream
+ *
+ * Since: 2.20
+ */
+gint
+g_unix_input_stream_get_fd (GUnixInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_INPUT_STREAM (stream), -1);
+  
+  return stream->priv->fd;
+}
+
+static gssize
+g_unix_input_stream_read (GInputStream  *stream,
+			  void          *buffer,
+			  gsize          count,
+			  GCancellable  *cancellable,
+			  GError       **error)
+{
+  GUnixInputStream *unix_stream;
+  gssize res;
+  GPollFD poll_fds[2];
+  int poll_ret;
+
+  unix_stream = G_UNIX_INPUT_STREAM (stream);
+
+  if (cancellable)
+    {
+      poll_fds[0].fd = unix_stream->priv->fd;
+      poll_fds[0].events = G_IO_IN;
+      g_cancellable_make_pollfd (cancellable, &poll_fds[1]);
+      do
+	poll_ret = g_poll (poll_fds, 2, -1);
+      while (poll_ret == -1 && errno == EINTR);
+      
+      if (poll_ret == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error reading from unix: %s"),
+		       g_strerror (errsv));
+	  return -1;
+	}
+    }
+
+  while (1)
+    {
+      if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	return -1;
+      res = read (unix_stream->priv->fd, buffer, count);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error reading from unix: %s"),
+		       g_strerror (errsv));
+	}
+      
+      break;
+    }
+
+  return res;
+}
+
+static gboolean
+g_unix_input_stream_close (GInputStream  *stream,
+			   GCancellable  *cancellable,
+			   GError       **error)
+{
+  GUnixInputStream *unix_stream;
+  int res;
+
+  unix_stream = G_UNIX_INPUT_STREAM (stream);
+
+  if (!unix_stream->priv->close_fd)
+    return TRUE;
+  
+  while (1)
+    {
+      /* This might block during the close. Doesn't seem to be a way to avoid it though. */
+      res = close (unix_stream->priv->fd);
+      if (res == -1)
+        {
+          int errsv = errno;
+
+          g_set_error (error, G_IO_ERROR,
+                       g_io_error_from_errno (errsv),
+                       _("Error closing unix: %s"),
+                       g_strerror (errsv));
+        }
+      break;
+    }
+  
+  return res != -1;
+}
+
+typedef struct {
+  gsize count;
+  void *buffer;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GCancellable *cancellable;
+  GUnixInputStream *stream;
+} ReadAsyncData;
+
+static gboolean
+read_async_cb (ReadAsyncData *data,
+               GIOCondition   condition,
+               int            fd)
+{
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+  gssize count_read;
+
+  /* We know that we can read from fd once without blocking */
+  while (1)
+    {
+      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+	{
+	  count_read = -1;
+	  break;
+	}
+      count_read = read (data->stream->priv->fd, data->buffer, data->count);
+      if (count_read == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (&error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error reading from unix: %s"),
+		       g_strerror (errsv));
+	}
+      break;
+    }
+
+  simple = g_simple_async_result_new (G_OBJECT (data->stream),
+				      data->callback,
+				      data->user_data,
+				      g_unix_input_stream_read_async);
+
+  g_simple_async_result_set_op_res_gssize (simple, count_read);
+
+  if (count_read == -1)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+
+  return FALSE;
+}
+
+static void
+g_unix_input_stream_read_async (GInputStream        *stream,
+				void                *buffer,
+				gsize                count,
+				int                  io_priority,
+				GCancellable        *cancellable,
+				GAsyncReadyCallback  callback,
+				gpointer             user_data)
+{
+  GSource *source;
+  GUnixInputStream *unix_stream;
+  ReadAsyncData *data;
+
+  unix_stream = G_UNIX_INPUT_STREAM (stream);
+
+  data = g_new0 (ReadAsyncData, 1);
+  data->count = count;
+  data->buffer = buffer;
+  data->callback = callback;
+  data->user_data = user_data;
+  data->cancellable = cancellable;
+  data->stream = unix_stream;
+
+  source = _g_fd_source_new (unix_stream->priv->fd,
+			     G_IO_IN,
+			     cancellable);
+  
+  g_source_set_callback (source, (GSourceFunc)read_async_cb, data, g_free);
+  g_source_attach (source, NULL);
+ 
+  g_source_unref (source);
+}
+
+static gssize
+g_unix_input_stream_read_finish (GInputStream  *stream,
+				 GAsyncResult  *result,
+				 GError       **error)
+{
+  GSimpleAsyncResult *simple;
+  gssize nread;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_unix_input_stream_read_async);
+  
+  nread = g_simple_async_result_get_op_res_gssize (simple);
+  return nread;
+}
+
+static void
+g_unix_input_stream_skip_async (GInputStream        *stream,
+				gsize                count,
+				int                  io_priority,
+				GCancellable        *cancellable,
+				GAsyncReadyCallback  callback,
+				gpointer             data)
+{
+  g_warn_if_reached ();
+  /* TODO: Not implemented */
+}
+
+static gssize
+g_unix_input_stream_skip_finish  (GInputStream  *stream,
+				  GAsyncResult  *result,
+				  GError       **error)
+{
+  g_warn_if_reached ();
+  return 0;
+  /* TODO: Not implemented */
+}
+
+
+typedef struct {
+  GInputStream *stream;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+} CloseAsyncData;
+
+static void
+close_async_data_free (gpointer _data)
+{
+  CloseAsyncData *data = _data;
+
+  g_free (data);
+}
+
+static gboolean
+close_async_cb (CloseAsyncData *data)
+{
+  GUnixInputStream *unix_stream;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+  gboolean result;
+  int res;
+
+  unix_stream = G_UNIX_INPUT_STREAM (data->stream);
+
+  if (!unix_stream->priv->close_fd)
+    {
+      result = TRUE;
+      goto out;
+    }
+  
+  while (1)
+    {
+      res = close (unix_stream->priv->fd);
+      if (res == -1)
+        {
+          int errsv = errno;
+
+          g_set_error (&error, G_IO_ERROR,
+                       g_io_error_from_errno (errsv),
+                       _("Error closing unix: %s"),
+                       g_strerror (errsv));
+        }
+      break;
+    }
+  
+  result = res != -1;
+
+ out:
+  simple = g_simple_async_result_new (G_OBJECT (data->stream),
+				      data->callback,
+				      data->user_data,
+				      g_unix_input_stream_close_async);
+
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+  
+  return FALSE;
+}
+
+static void
+g_unix_input_stream_close_async (GInputStream        *stream,
+				 int                  io_priority,
+				 GCancellable        *cancellable,
+				 GAsyncReadyCallback  callback,
+				 gpointer             user_data)
+{
+  GSource *idle;
+  CloseAsyncData *data;
+
+  data = g_new0 (CloseAsyncData, 1);
+
+  data->stream = stream;
+  data->callback = callback;
+  data->user_data = user_data;
+  
+  idle = g_idle_source_new ();
+  g_source_set_callback (idle, (GSourceFunc)close_async_cb, data, close_async_data_free);
+  g_source_attach (idle, NULL);
+  g_source_unref (idle);
+}
+
+static gboolean
+g_unix_input_stream_close_finish (GInputStream  *stream,
+				  GAsyncResult  *result,
+				  GError       **error)
+{
+  /* Failures handled in generic close_finish code */
+  return TRUE;
+}
+
+#define __G_UNIX_INPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gunixinputstream.h b/gio/gunixinputstream.h
new file mode 100644
index 0000000..cbdbe54
--- /dev/null
+++ b/gio/gunixinputstream.h
@@ -0,0 +1,78 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_UNIX_INPUT_STREAM_H__
+#define __G_UNIX_INPUT_STREAM_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_UNIX_INPUT_STREAM         (g_unix_input_stream_get_type ())
+#define G_UNIX_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNIX_INPUT_STREAM, GUnixInputStream))
+#define G_UNIX_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNIX_INPUT_STREAM, GUnixInputStreamClass))
+#define G_IS_UNIX_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNIX_INPUT_STREAM))
+#define G_IS_UNIX_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNIX_INPUT_STREAM))
+#define G_UNIX_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_UNIX_INPUT_STREAM, GUnixInputStreamClass))
+
+/**
+ * GUnixInputStream:
+ *
+ * Implements #GInputStream for reading from selectable unix file descriptors
+ **/
+typedef struct _GUnixInputStream         GUnixInputStream;
+typedef struct _GUnixInputStreamClass    GUnixInputStreamClass;
+typedef struct _GUnixInputStreamPrivate  GUnixInputStreamPrivate;
+
+struct _GUnixInputStream
+{
+  GInputStream parent_instance;
+
+  /*< private >*/
+  GUnixInputStreamPrivate *priv;
+};
+
+struct _GUnixInputStreamClass
+{
+  GInputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType          g_unix_input_stream_get_type     (void) G_GNUC_CONST;
+
+GInputStream * g_unix_input_stream_new          (gint              fd,
+                                                 gboolean          close_fd);
+void           g_unix_input_stream_set_close_fd (GUnixInputStream *stream,
+                                                 gboolean          close_fd);
+gboolean       g_unix_input_stream_get_close_fd (GUnixInputStream *stream);
+gint           g_unix_input_stream_get_fd       (GUnixInputStream *stream);
+
+G_END_DECLS
+
+#endif /* __G_UNIX_INPUT_STREAM_H__ */
diff --git a/gio/gunixmount.c b/gio/gunixmount.c
new file mode 100644
index 0000000..603c0ba
--- /dev/null
+++ b/gio/gunixmount.c
@@ -0,0 +1,467 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include "gunixvolumemonitor.h"
+#include "gunixmount.h"
+#include "gunixmounts.h"
+#include "gunixvolume.h"
+#include "gmountprivate.h"
+#include "gmount.h"
+#include "gfile.h"
+#include "gvolumemonitor.h"
+#include "gthemedicon.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+/* for BUFSIZ */
+#include <stdio.h>
+
+#include "gioalias.h"
+
+struct _GUnixMount {
+  GObject parent;
+
+  GVolumeMonitor   *volume_monitor;
+
+  GUnixVolume      *volume; /* owned by volume monitor */
+
+  char *name;
+  GIcon *icon;
+  char *device_path;
+  char *mount_path;
+
+  gboolean can_eject;
+};
+
+static void g_unix_mount_mount_iface_init (GMountIface *iface);
+
+#define g_unix_mount_get_type _g_unix_mount_get_type
+G_DEFINE_TYPE_WITH_CODE (GUnixMount, g_unix_mount, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_MOUNT,
+						g_unix_mount_mount_iface_init))
+
+
+static void
+g_unix_mount_finalize (GObject *object)
+{
+  GUnixMount *mount;
+  
+  mount = G_UNIX_MOUNT (object);
+
+  if (mount->volume_monitor != NULL)
+    g_object_unref (mount->volume_monitor);
+
+  if (mount->volume)
+    _g_unix_volume_unset_mount (mount->volume, mount);
+    
+  /* TODO: g_warn_if_fail (volume->volume == NULL); */
+  g_object_unref (mount->icon);
+  g_free (mount->name);
+  g_free (mount->device_path);
+  g_free (mount->mount_path);
+
+  G_OBJECT_CLASS (g_unix_mount_parent_class)->finalize (object);
+}
+
+static void
+g_unix_mount_class_init (GUnixMountClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = g_unix_mount_finalize;
+}
+
+static void
+g_unix_mount_init (GUnixMount *unix_mount)
+{
+}
+
+GUnixMount *
+_g_unix_mount_new (GVolumeMonitor  *volume_monitor,
+                   GUnixMountEntry *mount_entry,
+                   GUnixVolume     *volume)
+{
+  GUnixMount *mount;
+  
+  /* No volume for mount: Ignore internal things */
+  if (volume == NULL && !g_unix_mount_guess_should_display (mount_entry))
+    return NULL;
+
+  mount = g_object_new (G_TYPE_UNIX_MOUNT, NULL);
+  mount->volume_monitor = volume_monitor != NULL ? g_object_ref (volume_monitor) : NULL;
+  mount->device_path = g_strdup (g_unix_mount_get_device_path (mount_entry));
+  mount->mount_path = g_strdup (g_unix_mount_get_mount_path (mount_entry));
+  mount->can_eject = g_unix_mount_guess_can_eject (mount_entry);
+
+  mount->name = g_unix_mount_guess_name (mount_entry);
+  mount->icon = g_unix_mount_guess_icon (mount_entry);
+
+  /* need to do this last */
+  mount->volume = volume;
+  if (volume != NULL)
+    _g_unix_volume_set_mount (volume, mount);
+
+  return mount;
+}
+
+void
+_g_unix_mount_unmounted (GUnixMount *mount)
+{
+  if (mount->volume != NULL)
+    {
+      _g_unix_volume_unset_mount (mount->volume, mount);
+      mount->volume = NULL;
+      g_signal_emit_by_name (mount, "changed");
+      /* there's really no need to emit mount_changed on the volume monitor 
+       * as we're going to be deleted.. */
+    }
+}
+
+void
+_g_unix_mount_unset_volume (GUnixMount *mount,
+                            GUnixVolume  *volume)
+{
+  if (mount->volume == volume)
+    {
+      mount->volume = NULL;
+      /* TODO: Emit changed in idle to avoid locking issues */
+      g_signal_emit_by_name (mount, "changed");
+      if (mount->volume_monitor != NULL)
+        g_signal_emit_by_name (mount->volume_monitor, "mount-changed", mount);
+    }
+}
+
+static GFile *
+g_unix_mount_get_root (GMount *mount)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+
+  return g_file_new_for_path (unix_mount->mount_path);
+}
+
+static GIcon *
+g_unix_mount_get_icon (GMount *mount)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+
+  return g_object_ref (unix_mount->icon);
+}
+
+static char *
+g_unix_mount_get_uuid (GMount *mount)
+{
+  return NULL;
+}
+
+static char *
+g_unix_mount_get_name (GMount *mount)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+  
+  return g_strdup (unix_mount->name);
+}
+
+gboolean
+_g_unix_mount_has_mount_path (GUnixMount *mount,
+                              const char  *mount_path)
+{
+  return strcmp (mount->mount_path, mount_path) == 0;
+}
+
+static GDrive *
+g_unix_mount_get_drive (GMount *mount)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+
+  if (unix_mount->volume != NULL)
+    return g_volume_get_drive (G_VOLUME (unix_mount->volume));
+
+  return NULL;
+}
+
+static GVolume *
+g_unix_mount_get_volume (GMount *mount)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+
+  if (unix_mount->volume)
+    return G_VOLUME (g_object_ref (unix_mount->volume));
+  
+  return NULL;
+}
+
+static gboolean
+g_unix_mount_can_unmount (GMount *mount)
+{
+  return TRUE;
+}
+
+static gboolean
+g_unix_mount_can_eject (GMount *mount)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+  return unix_mount->can_eject;
+}
+
+
+typedef struct {
+  GUnixMount *unix_mount;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GCancellable *cancellable;
+  int error_fd;
+  GIOChannel *error_channel;
+  guint error_channel_source_id;
+  GString *error_string;
+  gchar **argv;
+} UnmountEjectOp;
+
+static void 
+eject_unmount_cb (GPid pid, gint status, gpointer user_data)
+{
+  UnmountEjectOp *data = user_data;
+  GSimpleAsyncResult *simple;
+  
+  if (WEXITSTATUS (status) != 0)
+    {
+      GError *error;
+      error = g_error_new_literal (G_IO_ERROR, 
+                                   G_IO_ERROR_FAILED,
+                                   data->error_string->str);
+      simple = g_simple_async_result_new_from_error (G_OBJECT (data->unix_mount),
+                                                     data->callback,
+                                                     data->user_data,
+                                                     error);
+      g_error_free (error);
+    }
+  else
+    {
+      simple = g_simple_async_result_new (G_OBJECT (data->unix_mount),
+                                          data->callback,
+                                          data->user_data,
+                                          NULL);
+    }
+
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+
+  g_source_remove (data->error_channel_source_id);
+  g_io_channel_unref (data->error_channel);
+  g_string_free (data->error_string, TRUE);
+  g_strfreev (data->argv);
+  close (data->error_fd);
+  g_spawn_close_pid (pid);
+  g_free (data);
+}
+
+static gboolean
+eject_unmount_read_error (GIOChannel *channel,
+                    GIOCondition condition,
+                    gpointer user_data)
+{
+  UnmountEjectOp *data = user_data;
+  char buf[BUFSIZ];
+  gsize bytes_read;
+  GError *error;
+  GIOStatus status;
+
+  error = NULL;
+read:
+  status = g_io_channel_read_chars (channel, buf, sizeof (buf), &bytes_read, &error);
+  if (status == G_IO_STATUS_NORMAL)
+   {
+     g_string_append_len (data->error_string, buf, bytes_read);
+     if (bytes_read == sizeof (buf))
+        goto read;
+   }
+  else if (status == G_IO_STATUS_EOF)
+    g_string_append_len (data->error_string, buf, bytes_read);
+  else if (status == G_IO_STATUS_ERROR)
+    {
+      if (data->error_string->len > 0)
+        g_string_append (data->error_string, "\n");
+
+      g_string_append (data->error_string, error->message);
+      g_error_free (error);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+eject_unmount_do_cb (gpointer user_data)
+{
+  UnmountEjectOp *data = (UnmountEjectOp *) user_data;
+  GPid child_pid;
+  GError *error = NULL;
+
+  if (!g_spawn_async_with_pipes (NULL,         /* working dir */
+                                 data->argv,
+                                 NULL,         /* envp */
+                                 G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
+                                 NULL,         /* child_setup */
+                                 NULL,         /* user_data for child_setup */
+                                 &child_pid,
+                                 NULL,           /* standard_input */
+                                 NULL,           /* standard_output */
+                                 &(data->error_fd),
+                                 &error)) {
+    g_assert (error != NULL);
+    goto handle_error;
+  }
+
+  data->error_string = g_string_new ("");
+
+  data->error_channel = g_io_channel_unix_new (data->error_fd);
+  g_io_channel_set_flags (data->error_channel, G_IO_FLAG_NONBLOCK, &error);
+  if (error != NULL)
+    goto handle_error;
+
+  data->error_channel_source_id = g_io_add_watch (data->error_channel, G_IO_IN, eject_unmount_read_error, data);
+  g_child_watch_add (child_pid, eject_unmount_cb, data);
+
+handle_error:
+  if (error != NULL) {
+    GSimpleAsyncResult *simple;
+    simple = g_simple_async_result_new_from_error (G_OBJECT (data->unix_mount),
+                                                   data->callback,
+                                                   data->user_data,
+                                                   error);
+    g_simple_async_result_complete (simple);
+    g_object_unref (simple);
+
+    if (data->error_string != NULL)
+      g_string_free (data->error_string, TRUE);
+
+    if (data->error_channel != NULL)
+      g_io_channel_unref (data->error_channel);
+
+    g_strfreev (data->argv);
+    g_error_free (error);
+    g_free (data);
+  }
+
+  return FALSE;
+}
+
+static void
+eject_unmount_do (GMount              *mount,
+                  GCancellable        *cancellable,
+                  GAsyncReadyCallback  callback,
+                  gpointer             user_data,
+                  char               **argv)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+  UnmountEjectOp *data;
+
+  data = g_new0 (UnmountEjectOp, 1);
+  data->unix_mount = unix_mount;
+  data->callback = callback;
+  data->user_data = user_data;
+  data->cancellable = cancellable;
+  data->argv = g_strdupv (argv);
+
+  if (unix_mount->volume_monitor != NULL)
+    g_signal_emit_by_name (unix_mount->volume_monitor, "mount-pre-unmount", mount);
+
+  g_timeout_add (500, (GSourceFunc) eject_unmount_do_cb, data);
+}
+
+static void
+g_unix_mount_unmount (GMount             *mount,
+                      GMountUnmountFlags flags,
+                      GCancellable        *cancellable,
+                      GAsyncReadyCallback  callback,
+                      gpointer             user_data)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+  char *argv[] = {"umount", NULL, NULL};
+
+  if (unix_mount->mount_path != NULL)
+    argv[1] = unix_mount->mount_path;
+  else
+    argv[1] = unix_mount->device_path;
+
+  eject_unmount_do (mount, cancellable, callback, user_data, argv);
+}
+
+static gboolean
+g_unix_mount_unmount_finish (GMount       *mount,
+                             GAsyncResult  *result,
+                             GError       **error)
+{
+  return TRUE;
+}
+
+static void
+g_unix_mount_eject (GMount             *mount,
+                    GMountUnmountFlags flags,
+                    GCancellable        *cancellable,
+                    GAsyncReadyCallback  callback,
+                    gpointer             user_data)
+{
+  GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
+  char *argv[] = {"eject", NULL, NULL};
+
+  if (unix_mount->mount_path != NULL)
+    argv[1] = unix_mount->mount_path;
+  else
+    argv[1] = unix_mount->device_path;
+
+  eject_unmount_do (mount, cancellable, callback, user_data, argv);
+}
+
+static gboolean
+g_unix_mount_eject_finish (GMount       *mount,
+                           GAsyncResult  *result,
+                           GError       **error)
+{
+  return TRUE;
+}
+
+static void
+g_unix_mount_mount_iface_init (GMountIface *iface)
+{
+  iface->get_root = g_unix_mount_get_root;
+  iface->get_name = g_unix_mount_get_name;
+  iface->get_icon = g_unix_mount_get_icon;
+  iface->get_uuid = g_unix_mount_get_uuid;
+  iface->get_drive = g_unix_mount_get_drive;
+  iface->get_volume = g_unix_mount_get_volume;
+  iface->can_unmount = g_unix_mount_can_unmount;
+  iface->can_eject = g_unix_mount_can_eject;
+  iface->unmount = g_unix_mount_unmount;
+  iface->unmount_finish = g_unix_mount_unmount_finish;
+  iface->eject = g_unix_mount_eject;
+  iface->eject_finish = g_unix_mount_eject_finish;
+}
diff --git a/gio/gunixmount.h b/gio/gunixmount.h
new file mode 100644
index 0000000..35cd64d
--- /dev/null
+++ b/gio/gunixmount.h
@@ -0,0 +1,59 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#ifndef __G_UNIX_MOUNT_H__
+#define __G_UNIX_MOUNT_H__
+
+#include <gio/giotypes.h>
+
+#include "gunixmounts.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_UNIX_MOUNT        (_g_unix_mount_get_type ())
+#define G_UNIX_MOUNT(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNIX_MOUNT, GUnixMount))
+#define G_UNIX_MOUNT_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNIX_MOUNT, GUnixMountClass))
+#define G_IS_UNIX_MOUNT(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNIX_MOUNT))
+#define G_IS_UNIX_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNIX_MOUNT))
+
+typedef struct _GUnixMountClass GUnixMountClass;
+
+struct _GUnixMountClass
+{
+  GObjectClass parent_class;
+};
+
+GType        _g_unix_mount_get_type       (void) G_GNUC_CONST;
+
+GUnixMount * _g_unix_mount_new            (GVolumeMonitor  *volume_monitor,
+                                           GUnixMountEntry *mount_entry,
+                                           GUnixVolume     *volume);
+gboolean     _g_unix_mount_has_mount_path (GUnixMount      *mount,
+                                           const char      *mount_path);
+void         _g_unix_mount_unset_volume   (GUnixMount      *mount,
+                                           GUnixVolume     *volume);
+void         _g_unix_mount_unmounted      (GUnixMount      *mount);
+
+G_END_DECLS
+
+#endif /* __G_UNIX_MOUNT_H__ */
diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
new file mode 100644
index 0000000..48dc7c5
--- /dev/null
+++ b/gio/gunixmounts.c
@@ -0,0 +1,2196 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#ifndef HAVE_SYSCTLBYNAME
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_POLL_H
+#include <sys/poll.h>
+#endif
+#endif
+#ifdef HAVE_POLL_H
+#include <poll.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include <errno.h>
+#include <string.h>
+#include <signal.h>
+#include <gstdio.h>
+#include <dirent.h>
+
+#include "gunixmounts.h"
+#include "gfile.h"
+#include "gfilemonitor.h"
+#include "glibintl.h"
+#include "gthemedicon.h"
+
+#include "gioalias.h"
+
+static const char *_resolve_dev_root (void);
+
+/**
+ * SECTION:gunixmounts
+ * @include: gio/gunixmounts.h
+ * @short_description: Unix Mounts
+ * 
+ * Routines for managing mounted UNIX mount points and paths.
+ *
+ * Note that <filename>&lt;gio/gunixmounts.h&gt;</filename> belongs to the 
+ * UNIX-specific GIO interfaces, thus you have to use the 
+ * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ */
+
+/*
+ * GUnixMountType:
+ * @G_UNIX_MOUNT_TYPE_UNKNOWN: Unknown UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_FLOPPY: Floppy disk UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_CDROM: CDROM UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_NFS: Network File System (NFS) UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_ZIP: ZIP UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_JAZ: JAZZ UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_MEMSTICK: Memory Stick UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_CF: Compact Flash UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_SM: Smart Media UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_SDMMC: SD/MMC UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_IPOD: iPod UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_CAMERA: Digital camera UNIX mount type.
+ * @G_UNIX_MOUNT_TYPE_HD: Hard drive UNIX mount type.
+ * 
+ * Types of UNIX mounts.
+ **/
+typedef enum {
+  G_UNIX_MOUNT_TYPE_UNKNOWN,
+  G_UNIX_MOUNT_TYPE_FLOPPY,
+  G_UNIX_MOUNT_TYPE_CDROM,
+  G_UNIX_MOUNT_TYPE_NFS,
+  G_UNIX_MOUNT_TYPE_ZIP,
+  G_UNIX_MOUNT_TYPE_JAZ,
+  G_UNIX_MOUNT_TYPE_MEMSTICK,
+  G_UNIX_MOUNT_TYPE_CF,
+  G_UNIX_MOUNT_TYPE_SM,
+  G_UNIX_MOUNT_TYPE_SDMMC,
+  G_UNIX_MOUNT_TYPE_IPOD,
+  G_UNIX_MOUNT_TYPE_CAMERA,
+  G_UNIX_MOUNT_TYPE_HD
+} GUnixMountType;
+
+struct _GUnixMountEntry {
+  char *mount_path;
+  char *device_path;
+  char *filesystem_type;
+  gboolean is_read_only;
+  gboolean is_system_internal;
+};
+
+struct _GUnixMountPoint {
+  char *mount_path;
+  char *device_path;
+  char *filesystem_type;
+  gboolean is_read_only;
+  gboolean is_user_mountable;
+  gboolean is_loopback;
+};
+
+enum {
+  MOUNTS_CHANGED,
+  MOUNTPOINTS_CHANGED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+struct _GUnixMountMonitor {
+  GObject parent;
+
+  GFileMonitor *fstab_monitor;
+  GFileMonitor *mtab_monitor;
+};
+
+struct _GUnixMountMonitorClass {
+  GObjectClass parent_class;
+};
+  
+static GUnixMountMonitor *the_mount_monitor = NULL;
+
+static GList *_g_get_unix_mounts (void);
+static GList *_g_get_unix_mount_points (void);
+
+G_DEFINE_TYPE (GUnixMountMonitor, g_unix_mount_monitor, G_TYPE_OBJECT);
+
+#define MOUNT_POLL_INTERVAL 4000
+
+#ifdef HAVE_SYS_MNTTAB_H
+#define MNTOPT_RO	"ro"
+#endif
+
+#ifdef HAVE_MNTENT_H
+#include <mntent.h>
+#elif defined (HAVE_SYS_MNTTAB_H)
+#include <sys/mnttab.h>
+#endif
+
+#ifdef HAVE_SYS_VFSTAB_H
+#include <sys/vfstab.h>
+#endif
+
+#if defined(HAVE_SYS_MNTCTL_H) && defined(HAVE_SYS_VMOUNT_H) && defined(HAVE_SYS_VFS_H)
+#include <sys/mntctl.h>
+#include <sys/vfs.h>
+#include <sys/vmount.h>
+#include <fshelp.h>
+#endif
+
+#if defined(HAVE_GETMNTINFO) && defined(HAVE_FSTAB_H) && defined(HAVE_SYS_MOUNT_H)
+#include <sys/ucred.h>
+#include <sys/mount.h>
+#include <fstab.h>
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#endif
+
+#ifndef HAVE_SETMNTENT
+#define setmntent(f,m) fopen(f,m)
+#endif
+#ifndef HAVE_ENDMNTENT
+#define endmntent(f) fclose(f)
+#endif
+
+static gboolean
+is_in (const char *value, const char *set[])
+{
+  int i;
+  for (i = 0; set[i] != NULL; i++)
+    {
+      if (strcmp (set[i], value) == 0)
+	return TRUE;
+    }
+  return FALSE;
+}
+
+/**
+ * g_unix_is_mount_path_system_internal:
+ * @mount_path: a mount path, e.g. <filename>/media/disk</filename> 
+ *    or <filename>/usr</filename>
+ *
+ * Determines if @mount_path is considered an implementation of the
+ * OS. This is primarily used for hiding mountable and mounted volumes
+ * that only are used in the OS and has little to no relevance to the
+ * casual user.
+ *
+ * Returns: %TRUE if @mount_path is considered an implementation detail 
+ *     of the OS.
+ **/
+gboolean
+g_unix_is_mount_path_system_internal (const char *mount_path)
+{
+  const char *ignore_mountpoints[] = {
+    /* Includes all FHS 2.3 toplevel dirs and other specilized
+     * directories that we want to hide from the user.
+     */
+    "/",              /* we already have "Filesystem root" in Nautilus */ 
+    "/bin",
+    "/boot",
+    "/dev",
+    "/etc",
+    "/home",
+    "/lib",
+    "/lib64",
+    "/media",
+    "/mnt",
+    "/opt",
+    "/root",
+    "/sbin",
+    "/srv",
+    "/tmp",
+    "/usr",
+    "/usr/local",
+    "/var",
+    "/var/log/audit", /* https://bugzilla.redhat.com/show_bug.cgi?id=333041 */
+    "/var/tmp",       /* https://bugzilla.redhat.com/show_bug.cgi?id=335241 */
+    "/proc",
+    "/sbin",
+    "/net",
+    NULL
+  };
+
+  if (is_in (mount_path, ignore_mountpoints))
+    return TRUE;
+  
+  if (g_str_has_prefix (mount_path, "/dev") ||
+      g_str_has_prefix (mount_path, "/proc") ||
+      g_str_has_prefix (mount_path, "/sys"))
+    return TRUE;
+
+  if (strstr (mount_path, "/.gvfs") != NULL)
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
+guess_system_internal (const char *mountpoint,
+		       const char *fs,
+		       const char *device)
+{
+  const char *ignore_fs[] = {
+    "auto",
+    "autofs",
+    "devfs",
+    "devpts",
+    "ecryptfs",
+    "kernfs",
+    "linprocfs",
+    "proc",
+    "procfs",
+    "ptyfs",
+    "rootfs",
+    "selinuxfs",
+    "sysfs",
+    "tmpfs",
+    "usbfs",
+    "nfsd",
+    "rpc_pipefs",
+    "zfs",
+    NULL
+  };
+  const char *ignore_devices[] = {
+    "none",
+    "sunrpc",
+    "devpts",
+    "nfsd",
+    "/dev/loop",
+    "/dev/vn",
+    NULL
+  };
+  
+  if (is_in (fs, ignore_fs))
+    return TRUE;
+  
+  if (is_in (device, ignore_devices))
+    return TRUE;
+
+  if (g_unix_is_mount_path_system_internal (mountpoint))
+    return TRUE;
+  
+  return FALSE;
+}
+
+#ifdef HAVE_MNTENT_H
+
+static char *
+get_mtab_read_file (void)
+{
+#ifdef _PATH_MOUNTED
+# ifdef __linux__
+  return "/proc/mounts";
+# else
+  return _PATH_MOUNTED;
+# endif
+#else	
+  return "/etc/mtab";
+#endif
+}
+
+static char *
+get_mtab_monitor_file (void)
+{
+#ifdef _PATH_MOUNTED
+  return _PATH_MOUNTED;
+#else	
+  return "/etc/mtab";
+#endif
+}
+
+#ifndef HAVE_GETMNTENT_R
+G_LOCK_DEFINE_STATIC(getmntent);
+#endif
+
+static GList *
+_g_get_unix_mounts (void)
+{
+#ifdef HAVE_GETMNTENT_R
+  struct mntent ent;
+  char buf[1024];
+#endif
+  struct mntent *mntent;
+  FILE *file;
+  char *read_file;
+  GUnixMountEntry *mount_entry;
+  GHashTable *mounts_hash;
+  GList *return_list;
+  
+  read_file = get_mtab_read_file ();
+
+  file = setmntent (read_file, "r");
+  if (file == NULL)
+    return NULL;
+
+  return_list = NULL;
+  
+  mounts_hash = g_hash_table_new (g_str_hash, g_str_equal);
+  
+#ifdef HAVE_GETMNTENT_R
+  while ((mntent = getmntent_r (file, &ent, buf, sizeof (buf))) != NULL)
+#else
+  G_LOCK (getmntent);
+  while ((mntent = getmntent (file)) != NULL)
+#endif
+    {
+      /* ignore any mnt_fsname that is repeated and begins with a '/'
+       *
+       * We do this to avoid being fooled by --bind mounts, since
+       * these have the same device as the location they bind to.
+       * It's not an ideal solution to the problem, but it's likely that
+       * the most important mountpoint is first and the --bind ones after
+       * that aren't as important. So it should work.
+       *
+       * The '/' is to handle procfs, tmpfs and other no device mounts.
+       */
+      if (mntent->mnt_fsname != NULL &&
+	  mntent->mnt_fsname[0] == '/' &&
+	  g_hash_table_lookup (mounts_hash, mntent->mnt_fsname))
+        continue;
+      
+      mount_entry = g_new0 (GUnixMountEntry, 1);
+      mount_entry->mount_path = g_strdup (mntent->mnt_dir);
+      if (strcmp (mntent->mnt_fsname, "/dev/root") == 0)
+        mount_entry->device_path = g_strdup (_resolve_dev_root ());
+      else
+        mount_entry->device_path = g_strdup (mntent->mnt_fsname);
+      mount_entry->filesystem_type = g_strdup (mntent->mnt_type);
+      
+#if defined (HAVE_HASMNTOPT)
+      if (hasmntopt (mntent, MNTOPT_RO) != NULL)
+	mount_entry->is_read_only = TRUE;
+#endif
+      
+      mount_entry->is_system_internal =
+	guess_system_internal (mount_entry->mount_path,
+			       mount_entry->filesystem_type,
+			       mount_entry->device_path);
+      
+      g_hash_table_insert (mounts_hash,
+			   mount_entry->device_path,
+			   mount_entry->device_path);
+      
+      return_list = g_list_prepend (return_list, mount_entry);
+    }
+  g_hash_table_destroy (mounts_hash);
+  
+  endmntent (file);
+
+#ifndef HAVE_GETMNTENT_R
+  G_UNLOCK (getmntent);
+#endif
+  
+  return g_list_reverse (return_list);
+}
+
+#elif defined (HAVE_SYS_MNTTAB_H)
+
+G_LOCK_DEFINE_STATIC(getmntent);
+
+static char *
+get_mtab_read_file (void)
+{
+#ifdef _PATH_MOUNTED
+  return _PATH_MOUNTED;
+#else	
+  return "/etc/mnttab";
+#endif
+}
+
+static char *
+get_mtab_monitor_file (void)
+{
+  return get_mtab_read_file ();
+}
+
+static GList *
+_g_get_unix_mounts (void)
+{
+  struct mnttab mntent;
+  FILE *file;
+  char *read_file;
+  GUnixMountEntry *mount_entry;
+  GList *return_list;
+  
+  read_file = get_mtab_read_file ();
+  
+  file = setmntent (read_file, "r");
+  if (file == NULL)
+    return NULL;
+  
+  return_list = NULL;
+  
+  G_LOCK (getmntent);
+  while (! getmntent (file, &mntent))
+    {
+      mount_entry = g_new0 (GUnixMountEntry, 1);
+      
+      mount_entry->mount_path = g_strdup (mntent.mnt_mountp);
+      mount_entry->device_path = g_strdup (mntent.mnt_special);
+      mount_entry->filesystem_type = g_strdup (mntent.mnt_fstype);
+      
+#if defined (HAVE_HASMNTOPT)
+      if (hasmntopt (&mntent, MNTOPT_RO) != NULL)
+	mount_entry->is_read_only = TRUE;
+#endif
+
+      mount_entry->is_system_internal =
+	guess_system_internal (mount_entry->mount_path,
+			       mount_entry->filesystem_type,
+			       mount_entry->device_path);
+      
+      return_list = g_list_prepend (return_list, mount_entry);
+    }
+  
+  endmntent (file);
+  
+  G_UNLOCK (getmntent);
+  
+  return g_list_reverse (return_list);
+}
+
+#elif defined(HAVE_SYS_MNTCTL_H) && defined(HAVE_SYS_VMOUNT_H) && defined(HAVE_SYS_VFS_H)
+
+static char *
+get_mtab_monitor_file (void)
+{
+  return NULL;
+}
+
+static GList *
+_g_get_unix_mounts (void)
+{
+  struct vfs_ent *fs_info;
+  struct vmount *vmount_info;
+  int vmount_number;
+  unsigned int vmount_size;
+  int current;
+  GList *return_list;
+  
+  if (mntctl (MCTL_QUERY, sizeof (vmount_size), &vmount_size) != 0)
+    {
+      g_warning ("Unable to know the number of mounted volumes\n");
+      
+      return NULL;
+    }
+
+  vmount_info = (struct vmount*)g_malloc (vmount_size);
+
+  vmount_number = mntctl (MCTL_QUERY, vmount_size, vmount_info);
+  
+  if (vmount_info->vmt_revision != VMT_REVISION)
+    g_warning ("Bad vmount structure revision number, want %d, got %d\n", VMT_REVISION, vmount_info->vmt_revision);
+
+  if (vmount_number < 0)
+    {
+      g_warning ("Unable to recover mounted volumes information\n");
+      
+      g_free (vmount_info);
+      return NULL;
+    }
+  
+  return_list = NULL;
+  while (vmount_number > 0)
+    {
+      mount_entry = g_new0 (GUnixMountEntry, 1);
+      
+      mount_entry->device_path = g_strdup (vmt2dataptr (vmount_info, VMT_OBJECT));
+      mount_entry->mount_path = g_strdup (vmt2dataptr (vmount_info, VMT_STUB));
+      /* is_removable = (vmount_info->vmt_flags & MNT_REMOVABLE) ? 1 : 0; */
+      mount_entry->is_read_only = (vmount_info->vmt_flags & MNT_READONLY) ? 1 : 0;
+
+      fs_info = getvfsbytype (vmount_info->vmt_gfstype);
+      
+      if (fs_info == NULL)
+	mount_entry->filesystem_type = g_strdup ("unknown");
+      else
+	mount_entry->filesystem_type = g_strdup (fs_info->vfsent_name);
+
+      mount_entry->is_system_internal =
+	guess_system_internal (mount_entry->mount_path,
+			       mount_entry->filesystem_type,
+			       mount_entry->device_path);
+      
+      return_list = g_list_prepend (return_list, mount_entry);
+      
+      vmount_info = (struct vmount *)( (char*)vmount_info 
+				       + vmount_info->vmt_length);
+      vmount_number--;
+    }
+  
+  g_free (vmount_info);
+  
+  return g_list_reverse (return_list);
+}
+
+#elif defined(HAVE_GETMNTINFO) && defined(HAVE_FSTAB_H) && defined(HAVE_SYS_MOUNT_H)
+
+static char *
+get_mtab_monitor_file (void)
+{
+  return NULL;
+}
+
+static GList *
+_g_get_unix_mounts (void)
+{
+  struct statfs *mntent = NULL;
+  int num_mounts, i;
+  GUnixMountEntry *mount_entry;
+  GList *return_list;
+  
+  /* Pass MNT_NOWAIT to avoid blocking trying to update NFS mounts. */
+  if ((num_mounts = getmntinfo (&mntent, MNT_NOWAIT)) == 0)
+    return NULL;
+  
+  return_list = NULL;
+  
+  for (i = 0; i < num_mounts; i++)
+    {
+      mount_entry = g_new0 (GUnixMountEntry, 1);
+      
+      mount_entry->mount_path = g_strdup (mntent[i].f_mntonname);
+      mount_entry->device_path = g_strdup (mntent[i].f_mntfromname);
+      mount_entry->filesystem_type = g_strdup (mntent[i].f_fstypename);
+      if (mntent[i].f_flags & MNT_RDONLY)
+	mount_entry->is_read_only = TRUE;
+
+      mount_entry->is_system_internal =
+	guess_system_internal (mount_entry->mount_path,
+			       mount_entry->filesystem_type,
+			       mount_entry->device_path);
+      
+      return_list = g_list_prepend (return_list, mount_entry);
+    }
+  
+  return g_list_reverse (return_list);
+}
+#elif defined(__INTERIX)
+
+static char *
+get_mtab_monitor_file (void)
+{
+  return NULL;
+}
+
+static GList *
+_g_get_unix_mounts (void)
+{
+  DIR *dirp;
+  GList* return_list = NULL;
+  char filename[9 + NAME_MAX];
+
+  dirp = opendir ("/dev/fs");
+  if (!dirp)
+    {
+      g_warning ("unable to read /dev/fs!");
+      return NULL;
+    }
+
+  while (1)
+    {
+      struct statvfs statbuf;
+      struct dirent entry;
+      struct dirent* result;
+      
+      if (readdir_r (dirp, &entry, &result) || result == NULL)
+        break;
+      
+      strcpy (filename, "/dev/fs/");
+      strcat (filename, entry.d_name);
+      
+      if (statvfs (filename, &statbuf) == 0)
+        {
+          GUnixMountEntry* mount_entry = g_new0(GUnixMountEntry, 1);
+          
+          mount_entry->mount_path = g_strdup (statbuf.f_mntonname);
+          mount_entry->device_path = g_strdup (statbuf.f_mntfromname);
+          mount_entry->filesystem_type = g_strdup (statbuf.f_fstypename);
+          
+          if (statbuf.f_flag & ST_RDONLY)
+            mount_entry->is_read_only = TRUE;
+          
+          return_list = g_list_prepend(return_list, mount_entry);
+        }
+    }
+  
+  return_list = g_list_reverse (return_list);
+  
+  closedir (dirp);
+
+  return return_list;
+}
+#else
+#error No _g_get_unix_mounts() implementation for system
+#endif
+
+/* _g_get_unix_mount_points():
+ * read the fstab.
+ * don't return swap and ignore mounts.
+ */
+
+static char *
+get_fstab_file (void)
+{
+#if defined(HAVE_SYS_MNTCTL_H) && defined(HAVE_SYS_VMOUNT_H) && defined(HAVE_SYS_VFS_H)
+  /* AIX */
+  return "/etc/filesystems";
+#elif defined(_PATH_MNTTAB)
+  return _PATH_MNTTAB;
+#elif defined(VFSTAB)
+  return VFSTAB;
+#else
+  return "/etc/fstab";
+#endif
+}
+
+#ifdef HAVE_MNTENT_H
+static GList *
+_g_get_unix_mount_points (void)
+{
+#ifdef HAVE_GETMNTENT_R
+  struct mntent ent;
+  char buf[1024];
+#endif
+  struct mntent *mntent;
+  FILE *file;
+  char *read_file;
+  GUnixMountPoint *mount_entry;
+  GList *return_list;
+  
+  read_file = get_fstab_file ();
+  
+  file = setmntent (read_file, "r");
+  if (file == NULL)
+    return NULL;
+
+  return_list = NULL;
+  
+#ifdef HAVE_GETMNTENT_R
+  while ((mntent = getmntent_r (file, &ent, buf, sizeof (buf))) != NULL)
+#else
+  G_LOCK (getmntent);
+  while ((mntent = getmntent (file)) != NULL)
+#endif
+    {
+      if ((strcmp (mntent->mnt_dir, "ignore") == 0) ||
+	  (strcmp (mntent->mnt_dir, "swap") == 0))
+	continue;
+
+      mount_entry = g_new0 (GUnixMountPoint, 1);
+      mount_entry->mount_path = g_strdup (mntent->mnt_dir);
+      if (strcmp (mntent->mnt_fsname, "/dev/root") == 0)
+        mount_entry->device_path = g_strdup (_resolve_dev_root ());
+      else
+        mount_entry->device_path = g_strdup (mntent->mnt_fsname);
+      mount_entry->filesystem_type = g_strdup (mntent->mnt_type);
+      
+#ifdef HAVE_HASMNTOPT
+      if (hasmntopt (mntent, MNTOPT_RO) != NULL)
+	mount_entry->is_read_only = TRUE;
+      
+      if (hasmntopt (mntent, "loop") != NULL)
+	mount_entry->is_loopback = TRUE;
+      
+#endif
+      
+      if ((mntent->mnt_type != NULL && strcmp ("supermount", mntent->mnt_type) == 0)
+#ifdef HAVE_HASMNTOPT
+	  || (hasmntopt (mntent, "user") != NULL
+	      && hasmntopt (mntent, "user") != hasmntopt (mntent, "user_xattr"))
+	  || hasmntopt (mntent, "pamconsole") != NULL
+	  || hasmntopt (mntent, "users") != NULL
+	  || hasmntopt (mntent, "owner") != NULL
+#endif
+	  )
+	mount_entry->is_user_mountable = TRUE;
+      
+      return_list = g_list_prepend (return_list, mount_entry);
+    }
+  
+  endmntent (file);
+
+#ifndef HAVE_GETMNTENT_R
+  G_UNLOCK (getmntent);
+#endif
+  
+  return g_list_reverse (return_list);
+}
+
+#elif defined (HAVE_SYS_MNTTAB_H)
+
+static GList *
+_g_get_unix_mount_points (void)
+{
+  struct mnttab mntent;
+  FILE *file;
+  char *read_file;
+  GUnixMountPoint *mount_entry;
+  GList *return_list;
+  
+  read_file = get_fstab_file ();
+  
+  file = setmntent (read_file, "r");
+  if (file == NULL)
+    return NULL;
+
+  return_list = NULL;
+  
+  G_LOCK (getmntent);
+  while (! getmntent (file, &mntent))
+    {
+      if ((strcmp (mntent.mnt_mountp, "ignore") == 0) ||
+	  (strcmp (mntent.mnt_mountp, "swap") == 0))
+	continue;
+      
+      mount_entry = g_new0 (GUnixMountPoint, 1);
+      
+      mount_entry->mount_path = g_strdup (mntent.mnt_mountp);
+      mount_entry->device_path = g_strdup (mntent.mnt_special);
+      mount_entry->filesystem_type = g_strdup (mntent.mnt_fstype);
+      
+#ifdef HAVE_HASMNTOPT
+      if (hasmntopt (&mntent, MNTOPT_RO) != NULL)
+	mount_entry->is_read_only = TRUE;
+      
+      if (hasmntopt (&mntent, "lofs") != NULL)
+	mount_entry->is_loopback = TRUE;
+#endif
+      
+      if ((mntent.mnt_fstype != NULL)
+#ifdef HAVE_HASMNTOPT
+	  || (hasmntopt (&mntent, "user") != NULL
+	      && hasmntopt (&mntent, "user") != hasmntopt (&mntent, "user_xattr"))
+	  || hasmntopt (&mntent, "pamconsole") != NULL
+	  || hasmntopt (&mntent, "users") != NULL
+	  || hasmntopt (&mntent, "owner") != NULL
+#endif
+	  )
+	mount_entry->is_user_mountable = TRUE;
+      
+      return_list = g_list_prepend (return_list, mount_entry);
+    }
+  
+  endmntent (file);
+  G_UNLOCK (getmntent);
+  
+  return g_list_reverse (return_list);
+}
+#elif defined(HAVE_SYS_MNTCTL_H) && defined(HAVE_SYS_VMOUNT_H) && defined(HAVE_SYS_VFS_H)
+
+/* functions to parse /etc/filesystems on aix */
+
+/* read character, ignoring comments (begin with '*', end with '\n' */
+static int
+aix_fs_getc (FILE *fd)
+{
+  int c;
+  
+  while ((c = getc (fd)) == '*')
+    {
+      while (((c = getc (fd)) != '\n') && (c != EOF))
+	;
+    }
+}
+
+/* eat all continuous spaces in a file */
+static int
+aix_fs_ignorespace (FILE *fd)
+{
+  int c;
+  
+  while ((c = aix_fs_getc (fd)) != EOF)
+    {
+      if (!g_ascii_isspace (c))
+	{
+	  ungetc (c,fd);
+	  return c;
+	}
+    }
+  
+  return EOF;
+}
+
+/* read one word from file */
+static int
+aix_fs_getword (FILE *fd, 
+                char *word)
+{
+  int c;
+  
+  aix_fs_ignorespace (fd);
+
+  while (((c = aix_fs_getc (fd)) != EOF) && !g_ascii_isspace (c))
+    {
+      if (c == '"')
+	{
+	  while (((c = aix_fs_getc (fd)) != EOF) && (c != '"'))
+	    *word++ = c;
+	  else
+	    *word++ = c;
+	}
+    }
+  *word = 0;
+  
+  return c;
+}
+
+typedef struct {
+  char mnt_mount[PATH_MAX];
+  char mnt_special[PATH_MAX];
+  char mnt_fstype[16];
+  char mnt_options[128];
+} AixMountTableEntry;
+
+/* read mount points properties */
+static int
+aix_fs_get (FILE               *fd, 
+            AixMountTableEntry *prop)
+{
+  static char word[PATH_MAX] = { 0 };
+  char value[PATH_MAX];
+  
+  /* read stanza */
+  if (word[0] == 0)
+    {
+      if (aix_fs_getword (fd, word) == EOF)
+	return EOF;
+    }
+
+  word[strlen(word) - 1] = 0;
+  strcpy (prop->mnt_mount, word);
+  
+  /* read attributes and value */
+  
+  while (aix_fs_getword (fd, word) != EOF)
+    {
+      /* test if is attribute or new stanza */
+      if (word[strlen(word) - 1] == ':')
+	return 0;
+      
+      /* read "=" */
+      aix_fs_getword (fd, value);
+      
+      /* read value */
+      aix_fs_getword (fd, value);
+      
+      if (strcmp (word, "dev") == 0)
+	strcpy (prop->mnt_special, value);
+      else if (strcmp (word, "vfs") == 0)
+	strcpy (prop->mnt_fstype, value);
+      else if (strcmp (word, "options") == 0)
+	strcpy(prop->mnt_options, value);
+    }
+  
+  return 0;
+}
+
+static GList *
+_g_get_unix_mount_points (void)
+{
+  struct mntent *mntent;
+  FILE *file;
+  char *read_file;
+  GUnixMountPoint *mount_entry;
+  AixMountTableEntry mntent;
+  GList *return_list;
+  
+  read_file = get_fstab_file ();
+  
+  file = setmntent (read_file, "r");
+  if (file == NULL)
+    return NULL;
+  
+  return_list = NULL;
+  
+  while (!aix_fs_get (file, &mntent))
+    {
+      if (strcmp ("cdrfs", mntent.mnt_fstype) == 0)
+	{
+	  mount_entry = g_new0 (GUnixMountPoint, 1);
+	  
+	  mount_entry->mount_path = g_strdup (mntent.mnt_mount);
+	  mount_entry->device_path = g_strdup (mntent.mnt_special);
+	  mount_entry->filesystem_type = g_strdup (mntent.mnt_fstype);
+	  mount_entry->is_read_only = TRUE;
+	  mount_entry->is_user_mountable = TRUE;
+	  
+	  return_list = g_list_prepend (return_list, mount_entry);
+	}
+    }
+	
+  endmntent (file);
+  
+  return g_list_reverse (return_list);
+}
+
+#elif defined(HAVE_GETMNTINFO) && defined(HAVE_FSTAB_H) && defined(HAVE_SYS_MOUNT_H)
+
+static GList *
+_g_get_unix_mount_points (void)
+{
+  struct fstab *fstab = NULL;
+  GUnixMountPoint *mount_entry;
+  GList *return_list;
+#ifdef HAVE_SYS_SYSCTL_H
+  int usermnt = 0;
+  size_t len = sizeof(usermnt);
+  struct stat sb;
+#endif
+  
+  if (!setfsent ())
+    return NULL;
+
+  return_list = NULL;
+  
+#ifdef HAVE_SYS_SYSCTL_H
+#if defined(HAVE_SYSCTLBYNAME)
+  sysctlbyname ("vfs.usermount", &usermnt, &len, NULL, 0);
+#elif defined(CTL_VFS) && defined(VFS_USERMOUNT)
+  {
+    int mib[2];
+    
+    mib[0] = CTL_VFS;
+    mib[1] = VFS_USERMOUNT;
+    sysctl (mib, 2, &usermnt, &len, NULL, 0);
+  }
+#elif defined(CTL_KERN) && defined(KERN_USERMOUNT)
+  {
+    int mib[2];
+    
+    mib[0] = CTL_KERN;
+    mib[1] = KERN_USERMOUNT;
+    sysctl (mib, 2, &usermnt, &len, NULL, 0);
+  }
+#endif
+#endif
+  
+  while ((fstab = getfsent ()) != NULL)
+    {
+      if (strcmp (fstab->fs_vfstype, "swap") == 0)
+	continue;
+      
+      mount_entry = g_new0 (GUnixMountPoint, 1);
+      
+      mount_entry->mount_path = g_strdup (fstab->fs_file);
+      mount_entry->device_path = g_strdup (fstab->fs_spec);
+      mount_entry->filesystem_type = g_strdup (fstab->fs_vfstype);
+      
+      if (strcmp (fstab->fs_type, "ro") == 0)
+	mount_entry->is_read_only = TRUE;
+
+#ifdef HAVE_SYS_SYSCTL_H
+      if (usermnt != 0)
+	{
+	  uid_t uid = getuid ();
+	  if (stat (fstab->fs_file, &sb) == 0)
+	    {
+	      if (uid == 0 || sb.st_uid == uid)
+		mount_entry->is_user_mountable = TRUE;
+	    }
+	}
+#endif
+
+      return_list = g_list_prepend (return_list, mount_entry);
+    }
+  
+  endfsent ();
+  
+  return g_list_reverse (return_list);
+}
+#elif defined(__INTERIX)
+static GList *
+_g_get_unix_mount_points (void)
+{
+  return _g_get_unix_mounts ();
+}
+#else
+#error No g_get_mount_table() implementation for system
+#endif
+
+static guint64
+get_mounts_timestamp (void)
+{
+  const char *monitor_file;
+  struct stat buf;
+
+  monitor_file = get_mtab_monitor_file ();
+  if (monitor_file)
+    {
+      if (stat (monitor_file, &buf) == 0)
+	return (guint64)buf.st_mtime;
+    }
+  return 0;
+}
+
+static guint64
+get_mount_points_timestamp (void)
+{
+  const char *monitor_file;
+  struct stat buf;
+
+  monitor_file = get_fstab_file ();
+  if (monitor_file)
+    {
+      if (stat (monitor_file, &buf) == 0)
+	return (guint64)buf.st_mtime;
+    }
+  return 0;
+}
+
+/**
+ * g_unix_mounts_get:
+ * @time_read: guint64 to contain a timestamp.
+ * 
+ * Gets a #GList of strings containing the unix mounts. 
+ * If @time_read is set, it will be filled with the mount 
+ * timestamp, allowing for checking if the mounts have changed 
+ * with g_unix_mounts_changed_since().
+ * 
+ * Returns: a #GList of the UNIX mounts. 
+ **/
+GList *
+g_unix_mounts_get (guint64 *time_read)
+{
+  if (time_read)
+    *time_read = get_mounts_timestamp ();
+
+  return _g_get_unix_mounts ();
+}
+
+/**
+ * g_unix_mount_at:
+ * @mount_path: path for a possible unix mount.
+ * @time_read: guint64 to contain a timestamp.
+ * 
+ * Gets a #GUnixMountEntry for a given mount path. If @time_read
+ * is set, it will be filled with a unix timestamp for checking
+ * if the mounts have changed since with g_unix_mounts_changed_since().
+ * 
+ * Returns: a #GUnixMount. 
+ **/
+GUnixMountEntry *
+g_unix_mount_at (const char *mount_path,
+		 guint64    *time_read)
+{
+  GList *mounts, *l;
+  GUnixMountEntry *mount_entry, *found;
+  
+  mounts = g_unix_mounts_get (time_read);
+
+  found = NULL;
+  for (l = mounts; l != NULL; l = l->next)
+    {
+      mount_entry = l->data;
+
+      if (!found && strcmp (mount_path, mount_entry->mount_path) == 0)
+	found = mount_entry;
+      else
+	g_unix_mount_free (mount_entry);
+    }
+  g_list_free (mounts);
+
+  return found;
+}
+
+/**
+ * g_unix_mount_points_get:
+ * @time_read: guint64 to contain a timestamp.
+ * 
+ * Gets a #GList of strings containing the unix mount points. 
+ * If @time_read is set, it will be filled with the mount timestamp,
+ * allowing for checking if the mounts have changed with 
+ * g_unix_mounts_points_changed_since().
+ * 
+ * Returns: a #GList of the UNIX mountpoints. 
+ **/
+GList *
+g_unix_mount_points_get (guint64 *time_read)
+{
+  if (time_read)
+    *time_read = get_mount_points_timestamp ();
+
+  return _g_get_unix_mount_points ();
+}
+
+/**
+ * g_unix_mounts_changed_since:
+ * @time: guint64 to contain a timestamp.
+ * 
+ * Checks if the unix mounts have changed since a given unix time.
+ * 
+ * Returns: %TRUE if the mounts have changed since @time. 
+ **/
+gboolean
+g_unix_mounts_changed_since (guint64 time)
+{
+  return get_mounts_timestamp () != time;
+}
+
+/**
+ * g_unix_mount_points_changed_since:
+ * @time: guint64 to contain a timestamp.
+ * 
+ * Checks if the unix mount points have changed since a given unix time.
+ * 
+ * Returns: %TRUE if the mount points have changed since @time. 
+ **/
+gboolean
+g_unix_mount_points_changed_since (guint64 time)
+{
+  return get_mount_points_timestamp () != time;
+}
+
+static void
+g_unix_mount_monitor_finalize (GObject *object)
+{
+  GUnixMountMonitor *monitor;
+  
+  monitor = G_UNIX_MOUNT_MONITOR (object);
+
+  if (monitor->fstab_monitor)
+    {
+      g_file_monitor_cancel (monitor->fstab_monitor);
+      g_object_unref (monitor->fstab_monitor);
+    }
+  
+  if (monitor->mtab_monitor)
+    {
+      g_file_monitor_cancel (monitor->mtab_monitor);
+      g_object_unref (monitor->mtab_monitor);
+    }
+
+  the_mount_monitor = NULL;
+
+  G_OBJECT_CLASS (g_unix_mount_monitor_parent_class)->finalize (object);
+}
+
+
+static void
+g_unix_mount_monitor_class_init (GUnixMountMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = g_unix_mount_monitor_finalize;
+ 
+  /**
+   * GUnixMountMonitor::mounts-changed:
+   * @monitor: the object on which the signal is emitted
+   * 
+   * Emitted when the unix mounts have changed.
+   */ 
+  signals[MOUNTS_CHANGED] =
+    g_signal_new ("mounts-changed",
+		  G_TYPE_FROM_CLASS (klass),
+		  G_SIGNAL_RUN_LAST,
+		  0,
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__VOID,
+		  G_TYPE_NONE, 0);
+
+  /**
+   * GUnixMountMonitor::mountpoints-changed:
+   * @monitor: the object on which the signal is emitted
+   * 
+   * Emitted when the unix mount points have changed.
+   */
+  signals[MOUNTPOINTS_CHANGED] =
+    g_signal_new ("mountpoints-changed",
+		  G_TYPE_FROM_CLASS (klass),
+		  G_SIGNAL_RUN_LAST,
+		  0,
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__VOID,
+		  G_TYPE_NONE, 0);
+}
+
+static void
+fstab_file_changed (GFileMonitor      *monitor,
+		    GFile             *file,
+		    GFile             *other_file,
+		    GFileMonitorEvent  event_type,
+		    gpointer           user_data)
+{
+  GUnixMountMonitor *mount_monitor;
+
+  if (event_type != G_FILE_MONITOR_EVENT_CHANGED &&
+      event_type != G_FILE_MONITOR_EVENT_CREATED &&
+      event_type != G_FILE_MONITOR_EVENT_DELETED)
+    return;
+
+  mount_monitor = user_data;
+  g_signal_emit (mount_monitor, signals[MOUNTPOINTS_CHANGED], 0);
+}
+
+static void
+mtab_file_changed (GFileMonitor      *monitor,
+		   GFile             *file,
+		   GFile             *other_file,
+		   GFileMonitorEvent  event_type,
+		   gpointer           user_data)
+{
+  GUnixMountMonitor *mount_monitor;
+
+  if (event_type != G_FILE_MONITOR_EVENT_CHANGED &&
+      event_type != G_FILE_MONITOR_EVENT_CREATED &&
+      event_type != G_FILE_MONITOR_EVENT_DELETED)
+    return;
+  
+  mount_monitor = user_data;
+  g_signal_emit (mount_monitor, signals[MOUNTS_CHANGED], 0);
+}
+
+static void
+g_unix_mount_monitor_init (GUnixMountMonitor *monitor)
+{
+  GFile *file;
+    
+  if (get_fstab_file () != NULL)
+    {
+      file = g_file_new_for_path (get_fstab_file ());
+      monitor->fstab_monitor = g_file_monitor_file (file, 0, NULL, NULL);
+      g_object_unref (file);
+      
+      g_signal_connect (monitor->fstab_monitor, "changed", (GCallback)fstab_file_changed, monitor);
+    }
+  
+  if (get_mtab_monitor_file () != NULL)
+    {
+      file = g_file_new_for_path (get_mtab_monitor_file ());
+      monitor->mtab_monitor = g_file_monitor_file (file, 0, NULL, NULL);
+      g_object_unref (file);
+      
+      g_signal_connect (monitor->mtab_monitor, "changed", (GCallback)mtab_file_changed, monitor);
+    }
+}
+
+/**
+ * g_unix_mount_monitor_set_rate_limit:
+ * @mount_monitor: a #GUnixMountMonitor
+ * @limit_msec: a integer with the limit in milliseconds to
+ *     poll for changes.
+ *
+ * Sets the rate limit to which the @mount_monitor will report
+ * consecutive change events to the mount and mount point entry files.
+ *
+ * Since: 2.18
+ */
+void
+g_unix_mount_monitor_set_rate_limit (GUnixMountMonitor *mount_monitor,
+                                     gint               limit_msec)
+{
+  g_return_if_fail (G_IS_UNIX_MOUNT_MONITOR (mount_monitor));
+
+  if (mount_monitor->fstab_monitor != NULL)
+    g_file_monitor_set_rate_limit (mount_monitor->fstab_monitor, limit_msec);
+
+  if (mount_monitor->mtab_monitor != NULL)
+    g_file_monitor_set_rate_limit (mount_monitor->mtab_monitor, limit_msec);
+}
+
+/**
+ * g_unix_mount_monitor_new:
+ * 
+ * Gets a new #GUnixMountMonitor. The default rate limit for which the
+ * monitor will report consecutive changes for the mount and mount
+ * point entry files is the default for a #GFileMonitor. Use
+ * g_unix_mount_monitor_set_rate_limit() to change this.
+ * 
+ * Returns: a #GUnixMountMonitor. 
+ */
+GUnixMountMonitor *
+g_unix_mount_monitor_new (void)
+{
+  if (the_mount_monitor == NULL)
+    {
+      the_mount_monitor = g_object_new (G_TYPE_UNIX_MOUNT_MONITOR, NULL);
+      return the_mount_monitor;
+    }
+  
+  return g_object_ref (the_mount_monitor);
+}
+
+/**
+ * g_unix_mount_free:
+ * @mount_entry: a #GUnixMount.
+ * 
+ * Frees a unix mount.
+ */
+void
+g_unix_mount_free (GUnixMountEntry *mount_entry)
+{
+  g_return_if_fail (mount_entry != NULL);
+
+  g_free (mount_entry->mount_path);
+  g_free (mount_entry->device_path);
+  g_free (mount_entry->filesystem_type);
+  g_free (mount_entry);
+}
+
+/**
+ * g_unix_mount_point_free:
+ * @mount_point: unix mount point to free.
+ * 
+ * Frees a unix mount point.
+ */
+void
+g_unix_mount_point_free (GUnixMountPoint *mount_point)
+{
+  g_return_if_fail (mount_point != NULL);
+
+  g_free (mount_point->mount_path);
+  g_free (mount_point->device_path);
+  g_free (mount_point->filesystem_type);
+  g_free (mount_point);
+}
+
+/**
+ * g_unix_mount_compare:
+ * @mount1: first #GUnixMountEntry to compare.
+ * @mount2: second #GUnixMountEntry to compare.
+ * 
+ * Compares two unix mounts.
+ * 
+ * Returns: 1, 0 or -1 if @mount1 is greater than, equal to,
+ * or less than @mount2, respectively. 
+ */
+gint
+g_unix_mount_compare (GUnixMountEntry *mount1,
+		      GUnixMountEntry *mount2)
+{
+  int res;
+
+  g_return_val_if_fail (mount1 != NULL && mount2 != NULL, 0);
+  
+  res = g_strcmp0 (mount1->mount_path, mount2->mount_path);
+  if (res != 0)
+    return res;
+	
+  res = g_strcmp0 (mount1->device_path, mount2->device_path);
+  if (res != 0)
+    return res;
+	
+  res = g_strcmp0 (mount1->filesystem_type, mount2->filesystem_type);
+  if (res != 0)
+    return res;
+
+  res =  mount1->is_read_only - mount2->is_read_only;
+  if (res != 0)
+    return res;
+  
+  return 0;
+}
+
+/**
+ * g_unix_mount_get_mount_path:
+ * @mount_entry: input #GUnixMountEntry to get the mount path for.
+ * 
+ * Gets the mount path for a unix mount.
+ * 
+ * Returns: the mount path for @mount_entry.
+ */
+const gchar *
+g_unix_mount_get_mount_path (GUnixMountEntry *mount_entry)
+{
+  g_return_val_if_fail (mount_entry != NULL, NULL);
+
+  return mount_entry->mount_path;
+}
+
+/**
+ * g_unix_mount_get_device_path:
+ * @mount_entry: a #GUnixMount.
+ * 
+ * Gets the device path for a unix mount.
+ * 
+ * Returns: a string containing the device path.
+ */
+const gchar *
+g_unix_mount_get_device_path (GUnixMountEntry *mount_entry)
+{
+  g_return_val_if_fail (mount_entry != NULL, NULL);
+
+  return mount_entry->device_path;
+}
+
+/**
+ * g_unix_mount_get_fs_type:
+ * @mount_entry: a #GUnixMount.
+ * 
+ * Gets the filesystem type for the unix mount.
+ * 
+ * Returns: a string containing the file system type.
+ */
+const gchar *
+g_unix_mount_get_fs_type (GUnixMountEntry *mount_entry)
+{
+  g_return_val_if_fail (mount_entry != NULL, NULL);
+
+  return mount_entry->filesystem_type;
+}
+
+/**
+ * g_unix_mount_is_readonly:
+ * @mount_entry: a #GUnixMount.
+ * 
+ * Checks if a unix mount is mounted read only.
+ * 
+ * Returns: %TRUE if @mount_entry is read only.
+ */
+gboolean
+g_unix_mount_is_readonly (GUnixMountEntry *mount_entry)
+{
+  g_return_val_if_fail (mount_entry != NULL, FALSE);
+
+  return mount_entry->is_read_only;
+}
+
+/**
+ * g_unix_mount_is_system_internal:
+ * @mount_entry: a #GUnixMount.
+ * 
+ * Checks if a unix mount is a system path.
+ * 
+ * Returns: %TRUE if the unix mount is for a system path.
+ */
+gboolean
+g_unix_mount_is_system_internal (GUnixMountEntry *mount_entry)
+{
+  g_return_val_if_fail (mount_entry != NULL, FALSE);
+
+  return mount_entry->is_system_internal;
+}
+
+/**
+ * g_unix_mount_point_compare:
+ * @mount1: a #GUnixMount.
+ * @mount2: a #GUnixMount.
+ * 
+ * Compares two unix mount points.
+ * 
+ * Returns: 1, 0 or -1 if @mount1 is greater than, equal to,
+ * or less than @mount2, respectively.
+ */
+gint
+g_unix_mount_point_compare (GUnixMountPoint *mount1,
+			    GUnixMountPoint *mount2)
+{
+  int res;
+
+  g_return_val_if_fail (mount1 != NULL && mount2 != NULL, 0);
+
+  res = g_strcmp0 (mount1->mount_path, mount2->mount_path);
+  if (res != 0) 
+    return res;
+	
+  res = g_strcmp0 (mount1->device_path, mount2->device_path);
+  if (res != 0) 
+    return res;
+	
+  res = g_strcmp0 (mount1->filesystem_type, mount2->filesystem_type);
+  if (res != 0) 
+    return res;
+
+  res =  mount1->is_read_only - mount2->is_read_only;
+  if (res != 0) 
+    return res;
+
+  res = mount1->is_user_mountable - mount2->is_user_mountable;
+  if (res != 0) 
+    return res;
+
+  res = mount1->is_loopback - mount2->is_loopback;
+  if (res != 0)
+    return res;
+  
+  return 0;
+}
+
+/**
+ * g_unix_mount_point_get_mount_path:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Gets the mount path for a unix mount point.
+ * 
+ * Returns: a string containing the mount path.
+ */
+const gchar *
+g_unix_mount_point_get_mount_path (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, NULL);
+
+  return mount_point->mount_path;
+}
+
+/**
+ * g_unix_mount_point_get_device_path:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Gets the device path for a unix mount point.
+ * 
+ * Returns: a string containing the device path.
+ */
+const gchar *
+g_unix_mount_point_get_device_path (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, NULL);
+
+  return mount_point->device_path;
+}
+
+/**
+ * g_unix_mount_point_get_fs_type:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Gets the file system type for the mount point.
+ * 
+ * Returns: a string containing the file system type.
+ */
+const gchar *
+g_unix_mount_point_get_fs_type (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, NULL);
+
+  return mount_point->filesystem_type;
+}
+
+/**
+ * g_unix_mount_point_is_readonly:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Checks if a unix mount point is read only.
+ * 
+ * Returns: %TRUE if a mount point is read only.
+ */
+gboolean
+g_unix_mount_point_is_readonly (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, FALSE);
+
+  return mount_point->is_read_only;
+}
+
+/**
+ * g_unix_mount_point_is_user_mountable:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Checks if a unix mount point is mountable by the user.
+ * 
+ * Returns: %TRUE if the mount point is user mountable.
+ */
+gboolean
+g_unix_mount_point_is_user_mountable (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, FALSE);
+
+  return mount_point->is_user_mountable;
+}
+
+/**
+ * g_unix_mount_point_is_loopback:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Checks if a unix mount point is a loopback device.
+ * 
+ * Returns: %TRUE if the mount point is a loopback. %FALSE otherwise. 
+ */
+gboolean
+g_unix_mount_point_is_loopback (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, FALSE);
+
+  return mount_point->is_loopback;
+}
+
+static GUnixMountType
+guess_mount_type (const char *mount_path,
+		  const char *device_path,
+		  const char *filesystem_type)
+{
+  GUnixMountType type;
+  char *basename;
+
+  type = G_UNIX_MOUNT_TYPE_UNKNOWN;
+  
+  if ((strcmp (filesystem_type, "udf") == 0) ||
+      (strcmp (filesystem_type, "iso9660") == 0) ||
+      (strcmp (filesystem_type, "cd9660") == 0))
+    type = G_UNIX_MOUNT_TYPE_CDROM;
+  else if ((strcmp (filesystem_type, "nfs") == 0) ||
+           (strcmp (filesystem_type, "nfs4") == 0))
+    type = G_UNIX_MOUNT_TYPE_NFS;
+  else if (g_str_has_prefix (device_path, "/vol/dev/diskette/") ||
+	   g_str_has_prefix (device_path, "/dev/fd") ||
+	   g_str_has_prefix (device_path, "/dev/floppy"))
+    type = G_UNIX_MOUNT_TYPE_FLOPPY;
+  else if (g_str_has_prefix (device_path, "/dev/cdrom") ||
+	   g_str_has_prefix (device_path, "/dev/acd") ||
+	   g_str_has_prefix (device_path, "/dev/cd"))
+    type = G_UNIX_MOUNT_TYPE_CDROM;
+  else if (g_str_has_prefix (device_path, "/vol/"))
+    {
+      const char *name = mount_path + strlen ("/");
+      
+      if (g_str_has_prefix (name, "cdrom"))
+	type = G_UNIX_MOUNT_TYPE_CDROM;
+      else if (g_str_has_prefix (name, "floppy") ||
+	       g_str_has_prefix (device_path, "/vol/dev/diskette/")) 
+	type = G_UNIX_MOUNT_TYPE_FLOPPY;
+      else if (g_str_has_prefix (name, "rmdisk")) 
+	type = G_UNIX_MOUNT_TYPE_ZIP;
+      else if (g_str_has_prefix (name, "jaz"))
+	type = G_UNIX_MOUNT_TYPE_JAZ;
+      else if (g_str_has_prefix (name, "memstick"))
+	type = G_UNIX_MOUNT_TYPE_MEMSTICK;
+    }
+  else
+    {
+      basename = g_path_get_basename (mount_path);
+      
+      if (g_str_has_prefix (basename, "cdr") ||
+	  g_str_has_prefix (basename, "cdwriter") ||
+	  g_str_has_prefix (basename, "burn") ||
+	  g_str_has_prefix (basename, "dvdr"))
+	type = G_UNIX_MOUNT_TYPE_CDROM;
+      else if (g_str_has_prefix (basename, "floppy"))
+	type = G_UNIX_MOUNT_TYPE_FLOPPY;
+      else if (g_str_has_prefix (basename, "zip"))
+	type = G_UNIX_MOUNT_TYPE_ZIP;
+      else if (g_str_has_prefix (basename, "jaz"))
+	type = G_UNIX_MOUNT_TYPE_JAZ;
+      else if (g_str_has_prefix (basename, "camera"))
+	type = G_UNIX_MOUNT_TYPE_CAMERA;
+      else if (g_str_has_prefix (basename, "memstick") ||
+	       g_str_has_prefix (basename, "memory_stick") ||
+	       g_str_has_prefix (basename, "ram"))
+	type = G_UNIX_MOUNT_TYPE_MEMSTICK;
+      else if (g_str_has_prefix (basename, "compact_flash"))
+	type = G_UNIX_MOUNT_TYPE_CF;
+      else if (g_str_has_prefix (basename, "smart_media"))
+	type = G_UNIX_MOUNT_TYPE_SM;
+      else if (g_str_has_prefix (basename, "sd_mmc"))
+	type = G_UNIX_MOUNT_TYPE_SDMMC;
+      else if (g_str_has_prefix (basename, "ipod"))
+	type = G_UNIX_MOUNT_TYPE_IPOD;
+      
+      g_free (basename);
+    }
+  
+  if (type == G_UNIX_MOUNT_TYPE_UNKNOWN)
+    type = G_UNIX_MOUNT_TYPE_HD;
+  
+  return type;
+}
+
+/*
+ * g_unix_mount_guess_type:
+ * @mount_entry: a #GUnixMount.
+ * 
+ * Guesses the type of a unix mount. If the mount type cannot be 
+ * determined, returns %G_UNIX_MOUNT_TYPE_UNKNOWN.
+ * 
+ * Returns: a #GUnixMountType. 
+ */
+static GUnixMountType
+g_unix_mount_guess_type (GUnixMountEntry *mount_entry)
+{
+  g_return_val_if_fail (mount_entry != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+  g_return_val_if_fail (mount_entry->mount_path != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+  g_return_val_if_fail (mount_entry->device_path != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+  g_return_val_if_fail (mount_entry->filesystem_type != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+
+  return guess_mount_type (mount_entry->mount_path,
+			   mount_entry->device_path,
+			   mount_entry->filesystem_type);
+}
+
+/*
+ * g_unix_mount_point_guess_type:
+ * @mount_point: a #GUnixMountPoint.
+ * 
+ * Guesses the type of a unix mount point. 
+ * If the mount type cannot be determined, 
+ * returns %G_UNIX_MOUNT_TYPE_UNKNOWN.
+ * 
+ * Returns: a #GUnixMountType.
+ */
+static GUnixMountType
+g_unix_mount_point_guess_type (GUnixMountPoint *mount_point)
+{
+  g_return_val_if_fail (mount_point != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+  g_return_val_if_fail (mount_point->mount_path != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+  g_return_val_if_fail (mount_point->device_path != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+  g_return_val_if_fail (mount_point->filesystem_type != NULL, G_UNIX_MOUNT_TYPE_UNKNOWN);
+
+  return guess_mount_type (mount_point->mount_path,
+			   mount_point->device_path,
+			   mount_point->filesystem_type);
+}
+
+static const char *
+type_to_icon (GUnixMountType type, gboolean is_mount_point)
+{
+  const char *icon_name;
+  
+  switch (type)
+    {
+    case G_UNIX_MOUNT_TYPE_HD:
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "drive-harddisk";
+      break;
+    case G_UNIX_MOUNT_TYPE_FLOPPY:
+    case G_UNIX_MOUNT_TYPE_ZIP:
+    case G_UNIX_MOUNT_TYPE_JAZ:
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "media-floppy";
+      break;
+    case G_UNIX_MOUNT_TYPE_CDROM:
+      if (is_mount_point)
+        icon_name = "drive-optical";
+      else
+        icon_name = "media-optical";
+      break;
+    case G_UNIX_MOUNT_TYPE_NFS:
+      /* TODO: Would like a better icon here... */
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "drive-harddisk";
+      break;
+    case G_UNIX_MOUNT_TYPE_MEMSTICK:
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "media-flash";
+      break;
+    case G_UNIX_MOUNT_TYPE_CAMERA:
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "camera-photo";
+      break;
+    case G_UNIX_MOUNT_TYPE_IPOD:
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "multimedia-player";
+      break;
+    case G_UNIX_MOUNT_TYPE_UNKNOWN:
+    default:
+      if (is_mount_point)
+        icon_name = "drive-removable-media";
+      else
+        icon_name = "drive-harddisk";
+      break;
+    }
+
+  return icon_name;
+}
+
+/**
+ * g_unix_mount_guess_name:
+ * @mount_entry: a #GUnixMountEntry
+ * 
+ * Guesses the name of a Unix mount. 
+ * The result is a translated string.
+ *
+ * Returns: A newly allocated string that must
+ *     be freed with g_free()
+ */
+gchar *
+g_unix_mount_guess_name (GUnixMountEntry *mount_entry)
+{
+  char *name;
+
+  if (strcmp (mount_entry->mount_path, "/") == 0)
+    name = g_strdup (_("Filesystem root"));
+  else
+    name = g_filename_display_basename (mount_entry->mount_path);
+
+  return name;
+}
+
+/**
+ * g_unix_mount_guess_icon:
+ * @mount_entry: a #GUnixMountEntry
+ * 
+ * Guesses the icon of a Unix mount. 
+ *
+ * Returns: a #GIcon
+ */
+GIcon *
+g_unix_mount_guess_icon (GUnixMountEntry *mount_entry)
+{
+  return g_themed_icon_new_with_default_fallbacks (type_to_icon (g_unix_mount_guess_type (mount_entry), FALSE));
+}
+
+/**
+ * g_unix_mount_point_guess_name:
+ * @mount_point: a #GUnixMountPoint
+ * 
+ * Guesses the name of a Unix mount point. 
+ * The result is a translated string.
+ *
+ * Returns: A newly allocated string that must 
+ *     be freed with g_free()
+ */
+gchar *
+g_unix_mount_point_guess_name (GUnixMountPoint *mount_point)
+{
+  char *name;
+
+  if (strcmp (mount_point->mount_path, "/") == 0)
+    name = g_strdup (_("Filesystem root"));
+  else
+    name = g_filename_display_basename (mount_point->mount_path);
+
+  return name;
+}
+
+/**
+ * g_unix_mount_point_guess_icon:
+ * @mount_point: a #GUnixMountPoint
+ * 
+ * Guesses the icon of a Unix mount point. 
+ *
+ * Returns: a #GIcon
+ */
+GIcon *
+g_unix_mount_point_guess_icon (GUnixMountPoint *mount_point)
+{
+  return g_themed_icon_new_with_default_fallbacks (type_to_icon (g_unix_mount_point_guess_type (mount_point), TRUE));
+}
+
+/**
+ * g_unix_mount_guess_can_eject:
+ * @mount_entry: a #GUnixMountEntry
+ * 
+ * Guesses whether a Unix mount can be ejected.
+ *
+ * Returns: %TRUE if @mount_entry is deemed to be ejectable.
+ */
+gboolean
+g_unix_mount_guess_can_eject (GUnixMountEntry *mount_entry)
+{
+  GUnixMountType guessed_type;
+
+  guessed_type = g_unix_mount_guess_type (mount_entry);
+  if (guessed_type == G_UNIX_MOUNT_TYPE_IPOD ||
+      guessed_type == G_UNIX_MOUNT_TYPE_CDROM)
+    return TRUE;
+
+  return FALSE;
+}
+
+/**
+ * g_unix_mount_guess_should_display:
+ * @mount_entry: a #GUnixMountEntry
+ * 
+ * Guesses whether a Unix mount should be displayed in the UI.
+ *
+ * Returns: %TRUE if @mount_entry is deemed to be displayable.
+ */
+gboolean
+g_unix_mount_guess_should_display (GUnixMountEntry *mount_entry)
+{
+  const char *mount_path;
+
+  /* Never display internal mountpoints */
+  if (g_unix_mount_is_system_internal (mount_entry))
+    return FALSE;
+  
+  /* Only display things in /media (which are generally user mountable)
+     and home dir (fuse stuff) */
+  mount_path = mount_entry->mount_path;
+  if (mount_path != NULL)
+    {
+      if (g_str_has_prefix (mount_path, "/media/")) 
+        {
+          char *path;
+          /* Avoid displaying mounts that are not accessible to the user.
+           *
+           * See http://bugzilla.gnome.org/show_bug.cgi?id=526320 for why we
+           * want to avoid g_access() for mount points which can potentially
+           * block or fail stat()'ing, such as network mounts.
+           */
+          path = g_path_get_dirname (mount_path);
+          if (g_str_has_prefix (path, "/media/"))
+            {
+              if (g_access (path, R_OK|X_OK) != 0) 
+                {
+                  g_free (path);
+                  return FALSE;
+                }
+            }
+          g_free (path);
+
+          if (mount_entry->device_path && mount_entry->device_path[0] == '/')
+           {
+             struct stat st;
+             if (g_stat (mount_entry->device_path, &st) == 0 &&
+                 S_ISBLK(st.st_mode) &&
+                 g_access (mount_path, R_OK|X_OK) != 0)
+               return FALSE;
+           }
+          return TRUE;
+        }
+      
+      if (g_str_has_prefix (mount_path, g_get_home_dir ()) && 
+          mount_path[strlen (g_get_home_dir())] == G_DIR_SEPARATOR)
+        return TRUE;
+    }
+  
+  return FALSE;
+}
+
+/**
+ * g_unix_mount_point_guess_can_eject:
+ * @mount_point: a #GUnixMountPoint
+ * 
+ * Guesses whether a Unix mount point can be ejected.
+ *
+ * Returns: %TRUE if @mount_point is deemed to be ejectable.
+ */
+gboolean
+g_unix_mount_point_guess_can_eject (GUnixMountPoint *mount_point)
+{
+  GUnixMountType guessed_type;
+
+  guessed_type = g_unix_mount_point_guess_type (mount_point);
+  if (guessed_type == G_UNIX_MOUNT_TYPE_IPOD ||
+      guessed_type == G_UNIX_MOUNT_TYPE_CDROM)
+    return TRUE;
+
+  return FALSE;
+}
+
+
+/* borrowed from gtk/gtkfilesystemunix.c in GTK+ on 02/23/2006 */
+static void
+_canonicalize_filename (gchar *filename)
+{
+  gchar *p, *q;
+  gboolean last_was_slash = FALSE;
+  
+  p = filename;
+  q = filename;
+  
+  while (*p)
+    {
+      if (*p == G_DIR_SEPARATOR)
+        {
+          if (!last_was_slash)
+            *q++ = G_DIR_SEPARATOR;
+          
+          last_was_slash = TRUE;
+        }
+      else
+        {
+          if (last_was_slash && *p == '.')
+            {
+              if (*(p + 1) == G_DIR_SEPARATOR ||
+                  *(p + 1) == '\0')
+                {
+                  if (*(p + 1) == '\0')
+                    break;
+                  
+                  p += 1;
+                }
+              else if (*(p + 1) == '.' &&
+                       (*(p + 2) == G_DIR_SEPARATOR ||
+                        *(p + 2) == '\0'))
+                {
+                  if (q > filename + 1)
+                    {
+                      q--;
+                      while (q > filename + 1 &&
+                             *(q - 1) != G_DIR_SEPARATOR)
+                        q--;
+                    }
+                  
+                  if (*(p + 2) == '\0')
+                    break;
+                  
+                  p += 2;
+                }
+              else
+                {
+                  *q++ = *p;
+                  last_was_slash = FALSE;
+                }
+            }
+          else
+            {
+              *q++ = *p;
+              last_was_slash = FALSE;
+            }
+        }
+      
+      p++;
+    }
+  
+  if (q > filename + 1 && *(q - 1) == G_DIR_SEPARATOR)
+    q--;
+  
+  *q = '\0';
+}
+
+static char *
+_resolve_symlink (const char *file)
+{
+  GError *error;
+  char *dir;
+  char *link;
+  char *f;
+  char *f1;
+  
+  f = g_strdup (file);
+  
+  while (g_file_test (f, G_FILE_TEST_IS_SYMLINK)) 
+    {
+      link = g_file_read_link (f, &error);
+      if (link == NULL) 
+        {
+          g_error_free (error);
+          g_free (f);
+          f = NULL;
+          goto out;
+        }
+    
+      dir = g_path_get_dirname (f);
+      f1 = g_strdup_printf ("%s/%s", dir, link);
+      g_free (dir);
+      g_free (link);
+      g_free (f);
+      f = f1;
+    }
+  
+ out:
+  if (f != NULL)
+    _canonicalize_filename (f);
+  return f;
+}
+
+#ifdef HAVE_MNTENT_H
+static const char *
+_resolve_dev_root (void)
+{
+  static gboolean have_real_dev_root = FALSE;
+  static char real_dev_root[256];
+  struct stat statbuf;
+  
+  /* see if it's cached already */
+  if (have_real_dev_root)
+    goto found;
+  
+  /* otherwise we're going to find it right away.. */
+  have_real_dev_root = TRUE;
+  
+  if (stat ("/dev/root", &statbuf) == 0) 
+    {
+      if (! S_ISLNK (statbuf.st_mode)) 
+        {
+          dev_t root_dev = statbuf.st_dev;
+          FILE *f;
+          char buf[1024];
+      
+          /* see if device with similar major:minor as /dev/root is mention
+           * in /etc/mtab (it usually is) 
+           */
+          f = fopen ("/etc/mtab", "r");
+          if (f != NULL) 
+            {
+	      struct mntent *entp;
+#ifdef HAVE_GETMNTENT_R        
+              struct mntent ent;
+              while ((entp = getmntent_r (f, &ent, buf, sizeof (buf))) != NULL) 
+                {
+#else
+	      G_LOCK (getmntent);
+	      while ((entp = getmntent (f)) != NULL) 
+                { 
+#endif          
+                  if (stat (entp->mnt_fsname, &statbuf) == 0 &&
+                      statbuf.st_dev == root_dev) 
+                    {
+                      strncpy (real_dev_root, entp->mnt_fsname, sizeof (real_dev_root) - 1);
+                      real_dev_root[sizeof (real_dev_root) - 1] = '\0';
+                      fclose (f);
+                      goto found;
+                    }
+                }
+
+              endmntent (f);
+
+#ifndef HAVE_GETMNTENT_R
+	      G_UNLOCK (getmntent);
+#endif
+            }                                        
+      
+          /* no, that didn't work.. next we could scan /dev ... but I digress.. */
+      
+        } 
+       else 
+        {
+          char *resolved;
+          resolved = _resolve_symlink ("/dev/root");
+          if (resolved != NULL)
+            {
+              strncpy (real_dev_root, resolved, sizeof (real_dev_root) - 1);
+              real_dev_root[sizeof (real_dev_root) - 1] = '\0';
+              g_free (resolved);
+              goto found;
+            }
+        }
+    }
+  
+  /* bah sucks.. */
+  strcpy (real_dev_root, "/dev/root");
+  
+found:
+  return real_dev_root;
+}
+#endif
+
+#define __G_UNIX_MOUNTS_C__
+#include "gioaliasdef.c"
diff --git a/gio/gunixmounts.h b/gio/gunixmounts.h
new file mode 100644
index 0000000..55aa3cc
--- /dev/null
+++ b/gio/gunixmounts.h
@@ -0,0 +1,102 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_UNIX_MOUNTS_H__
+#define __G_UNIX_MOUNTS_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GUnixMountEntry:
+ *
+ * Defines a Unix mount entry (e.g. <filename>/media/cdrom</filename>).
+ * This corresponds roughly to a mtab entry.
+ **/
+typedef struct _GUnixMountEntry GUnixMountEntry;
+
+/**
+ * GUnixMountPoint:
+ *
+ * Defines a Unix mount point (e.g. <filename>/dev</filename>).
+ * This corresponds roughly to a fstab entry.
+ **/
+typedef struct _GUnixMountPoint GUnixMountPoint;
+
+/**
+ * GUnixMountMonitor:
+ *
+ * Watches #GUnixMount<!-- -->s for changes.
+ **/
+typedef struct _GUnixMountMonitor      GUnixMountMonitor;
+typedef struct _GUnixMountMonitorClass GUnixMountMonitorClass;
+
+#define G_TYPE_UNIX_MOUNT_MONITOR        (g_unix_mount_monitor_get_type ())
+#define G_UNIX_MOUNT_MONITOR(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNIX_MOUNT_MONITOR, GUnixMountMonitor))
+#define G_UNIX_MOUNT_MONITOR_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNIX_MOUNT_MONITOR, GUnixMountMonitorClass))
+#define G_IS_UNIX_MOUNT_MONITOR(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNIX_MOUNT_MONITOR))
+#define G_IS_UNIX_MOUNT_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNIX_MOUNT_MONITOR))
+
+void           g_unix_mount_free                    (GUnixMountEntry    *mount_entry);
+void           g_unix_mount_point_free              (GUnixMountPoint    *mount_point);
+gint           g_unix_mount_compare                 (GUnixMountEntry    *mount1,
+						     GUnixMountEntry    *mount2);
+const char *   g_unix_mount_get_mount_path          (GUnixMountEntry    *mount_entry);
+const char *   g_unix_mount_get_device_path         (GUnixMountEntry    *mount_entry);
+const char *   g_unix_mount_get_fs_type             (GUnixMountEntry    *mount_entry);
+gboolean       g_unix_mount_is_readonly             (GUnixMountEntry    *mount_entry);
+gboolean       g_unix_mount_is_system_internal      (GUnixMountEntry    *mount_entry);
+gboolean       g_unix_mount_guess_can_eject         (GUnixMountEntry    *mount_entry);
+gboolean       g_unix_mount_guess_should_display    (GUnixMountEntry    *mount_entry);
+char *         g_unix_mount_guess_name              (GUnixMountEntry    *mount_entry);
+GIcon *        g_unix_mount_guess_icon              (GUnixMountEntry    *mount_entry);
+
+gint           g_unix_mount_point_compare           (GUnixMountPoint    *mount1,
+						     GUnixMountPoint    *mount2);
+const char *   g_unix_mount_point_get_mount_path    (GUnixMountPoint    *mount_point);
+const char *   g_unix_mount_point_get_device_path   (GUnixMountPoint    *mount_point);
+const char *   g_unix_mount_point_get_fs_type       (GUnixMountPoint    *mount_point);
+gboolean       g_unix_mount_point_is_readonly       (GUnixMountPoint    *mount_point);
+gboolean       g_unix_mount_point_is_user_mountable (GUnixMountPoint    *mount_point);
+gboolean       g_unix_mount_point_is_loopback       (GUnixMountPoint    *mount_point);
+gboolean       g_unix_mount_point_guess_can_eject   (GUnixMountPoint    *mount_point);
+char *         g_unix_mount_point_guess_name        (GUnixMountPoint    *mount_point);
+GIcon *        g_unix_mount_point_guess_icon        (GUnixMountPoint    *mount_point);
+
+GList *        g_unix_mount_points_get              (guint64            *time_read);
+GList *        g_unix_mounts_get                    (guint64            *time_read);
+GUnixMountEntry *g_unix_mount_at                    (const char         *mount_path,
+						     guint64            *time_read);
+gboolean       g_unix_mounts_changed_since          (guint64             time);
+gboolean       g_unix_mount_points_changed_since    (guint64             time);
+
+GType              g_unix_mount_monitor_get_type       (void) G_GNUC_CONST;
+GUnixMountMonitor *g_unix_mount_monitor_new            (void);
+void               g_unix_mount_monitor_set_rate_limit (GUnixMountMonitor *mount_monitor,
+                                                        int                limit_msec);
+
+gboolean g_unix_is_mount_path_system_internal (const char *mount_path);
+
+G_END_DECLS
+
+#endif /* __G_UNIX_MOUNTS_H__ */
diff --git a/gio/gunixoutputstream.c b/gio/gunixoutputstream.c
new file mode 100644
index 0000000..5bfba2c
--- /dev/null
+++ b/gio/gunixoutputstream.c
@@ -0,0 +1,608 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include "gioerror.h"
+#include "gunixoutputstream.h"
+#include "gcancellable.h"
+#include "gsimpleasyncresult.h"
+#include "gasynchelper.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gunixoutputstream
+ * @short_description: Streaming output operations for Unix file descriptors
+ * @include: gio/gunixoutputstream.h
+ * @see_also: #GOutputStream
+ *
+ * #GUnixOutputStream implements #GOutputStream for writing to a
+ * unix file descriptor, including asynchronous operations. The file
+ * descriptor must be selectable, so it doesn't work with opened files.
+ *
+ * Note that <filename>&lt;gio/gunixoutputstream.h&gt;</filename> belongs 
+ * to the UNIX-specific GIO interfaces, thus you have to use the
+ * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ */
+
+enum {
+  PROP_0,
+  PROP_FD,
+  PROP_CLOSE_FD
+};
+
+G_DEFINE_TYPE (GUnixOutputStream, g_unix_output_stream, G_TYPE_OUTPUT_STREAM);
+
+
+struct _GUnixOutputStreamPrivate {
+  int fd;
+  gboolean close_fd;
+};
+
+static void     g_unix_output_stream_set_property (GObject              *object,
+						   guint                 prop_id,
+						   const GValue         *value,
+						   GParamSpec           *pspec);
+static void     g_unix_output_stream_get_property (GObject              *object,
+						   guint                 prop_id,
+						   GValue               *value,
+						   GParamSpec           *pspec);
+static gssize   g_unix_output_stream_write        (GOutputStream        *stream,
+						   const void           *buffer,
+						   gsize                 count,
+						   GCancellable         *cancellable,
+						   GError              **error);
+static gboolean g_unix_output_stream_close        (GOutputStream        *stream,
+						   GCancellable         *cancellable,
+						   GError              **error);
+static void     g_unix_output_stream_write_async  (GOutputStream        *stream,
+						   const void           *buffer,
+						   gsize                 count,
+						   int                   io_priority,
+						   GCancellable         *cancellable,
+						   GAsyncReadyCallback   callback,
+						   gpointer              data);
+static gssize   g_unix_output_stream_write_finish (GOutputStream        *stream,
+						   GAsyncResult         *result,
+						   GError              **error);
+static void     g_unix_output_stream_close_async  (GOutputStream        *stream,
+						   int                   io_priority,
+						   GCancellable         *cancellable,
+						   GAsyncReadyCallback   callback,
+						   gpointer              data);
+static gboolean g_unix_output_stream_close_finish (GOutputStream        *stream,
+						   GAsyncResult         *result,
+						   GError              **error);
+
+
+static void
+g_unix_output_stream_finalize (GObject *object)
+{
+  GUnixOutputStream *stream;
+  
+  stream = G_UNIX_OUTPUT_STREAM (object);
+
+  G_OBJECT_CLASS (g_unix_output_stream_parent_class)->finalize (object);
+}
+
+static void
+g_unix_output_stream_class_init (GUnixOutputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (GUnixOutputStreamPrivate));
+
+  gobject_class->get_property = g_unix_output_stream_get_property;
+  gobject_class->set_property = g_unix_output_stream_set_property;
+  gobject_class->finalize = g_unix_output_stream_finalize;
+
+  stream_class->write_fn = g_unix_output_stream_write;
+  stream_class->close_fn = g_unix_output_stream_close;
+  stream_class->write_async = g_unix_output_stream_write_async;
+  stream_class->write_finish = g_unix_output_stream_write_finish;
+  stream_class->close_async = g_unix_output_stream_close_async;
+  stream_class->close_finish = g_unix_output_stream_close_finish;
+
+   /**
+   * GUnixOutputStream:fd:
+   *
+   * The file descriptor that the stream writes to.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_FD,
+				   g_param_spec_int ("fd",
+						     _("File descriptor"),
+						     _("The file descriptor to write to"),
+						     G_MININT, G_MAXINT, -1,
+						     G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+  /**
+   * GUnixOutputStream:close-fd:
+   *
+   * Whether to close the file descriptor when the stream is closed.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_CLOSE_FD,
+				   g_param_spec_boolean ("close-fd",
+							 _("Close file descriptor"),
+							 _("Whether to close the file descriptor when the stream is closed"),
+							 TRUE,
+							 G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_unix_output_stream_set_property (GObject         *object,
+				   guint            prop_id,
+				   const GValue    *value,
+				   GParamSpec      *pspec)
+{
+  GUnixOutputStream *unix_stream;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      unix_stream->priv->fd = g_value_get_int (value);
+      break;
+    case PROP_CLOSE_FD:
+      unix_stream->priv->close_fd = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_unix_output_stream_get_property (GObject    *object,
+				   guint       prop_id,
+				   GValue     *value,
+				   GParamSpec *pspec)
+{
+  GUnixOutputStream *unix_stream;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      g_value_set_int (value, unix_stream->priv->fd);
+      break;
+    case PROP_CLOSE_FD:
+      g_value_set_boolean (value, unix_stream->priv->close_fd);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+g_unix_output_stream_init (GUnixOutputStream *unix_stream)
+{
+  unix_stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (unix_stream,
+						   G_TYPE_UNIX_OUTPUT_STREAM,
+						   GUnixOutputStreamPrivate);
+
+  unix_stream->priv->fd = -1;
+  unix_stream->priv->close_fd = TRUE;
+}
+
+/**
+ * g_unix_output_stream_new:
+ * @fd: a UNIX file descriptor
+ * @close_fd: %TRUE to close the file descriptor when done
+ * 
+ * Creates a new #GUnixOutputStream for the given @fd. 
+ * 
+ * If @close_fd, is %TRUE, the file descriptor will be closed when 
+ * the output stream is destroyed.
+ * 
+ * Returns: a new #GOutputStream
+ **/
+GOutputStream *
+g_unix_output_stream_new (gint     fd,
+			  gboolean close_fd)
+{
+  GUnixOutputStream *stream;
+
+  g_return_val_if_fail (fd != -1, NULL);
+
+  stream = g_object_new (G_TYPE_UNIX_OUTPUT_STREAM,
+			 "fd", fd,
+			 "close-fd", close_fd,
+			 NULL);
+  
+  return G_OUTPUT_STREAM (stream);
+}
+
+/**
+ * g_unix_output_stream_set_close_fd:
+ * @stream: a #GUnixOutputStream
+ * @close_fd: %TRUE to close the file descriptor when done
+ *
+ * Sets whether the file descriptor of @stream shall be closed
+ * when the stream is closed.
+ *
+ * Since: 2.20
+ */
+void
+g_unix_output_stream_set_close_fd (GUnixOutputStream *stream,
+                                   gboolean           close_fd)
+{
+  g_return_if_fail (G_IS_UNIX_OUTPUT_STREAM (stream));
+
+  close_fd = close_fd != FALSE;
+  if (stream->priv->close_fd != close_fd)
+    {
+      stream->priv->close_fd = close_fd;
+      g_object_notify (G_OBJECT (stream), "close-fd");
+    }
+}
+
+/**
+ * g_unix_output_stream_get_close_fd:
+ * @stream: a #GUnixOutputStream
+ *
+ * Returns whether the file descriptor of @stream will be
+ * closed when the stream is closed.
+ *
+ * Return value: %TRUE if the file descriptor is closed when done
+ *
+ * Since: 2.20
+ */
+gboolean
+g_unix_output_stream_get_close_fd (GUnixOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_OUTPUT_STREAM (stream), FALSE);
+
+  return stream->priv->close_fd;
+}
+
+/**
+ * g_unix_output_stream_get_fd:
+ * @stream: a #GUnixOutputStream
+ *
+ * Return the UNIX file descriptor that the stream writes to.
+ *
+ * Return value: The file descriptor of @stream
+ *
+ * Since: 2.20
+ */
+gint
+g_unix_output_stream_get_fd (GUnixOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_OUTPUT_STREAM (stream), -1);
+
+  return stream->priv->fd;
+}
+
+static gssize
+g_unix_output_stream_write (GOutputStream  *stream,
+			    const void     *buffer,
+			    gsize           count,
+			    GCancellable   *cancellable,
+			    GError        **error)
+{
+  GUnixOutputStream *unix_stream;
+  gssize res;
+  GPollFD poll_fds[2];
+  int poll_ret;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (stream);
+
+  if (cancellable)
+    {
+      poll_fds[0].fd = unix_stream->priv->fd;
+      poll_fds[0].events = G_IO_OUT;
+      g_cancellable_make_pollfd (cancellable, &poll_fds[1]);
+      do
+	poll_ret = g_poll (poll_fds, 2, -1);
+      while (poll_ret == -1 && errno == EINTR);
+      
+      if (poll_ret == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error writing to unix: %s"),
+		       g_strerror (errsv));
+	  return -1;
+	}
+    }
+      
+  while (1)
+    {
+      if (g_cancellable_set_error_if_cancelled (cancellable, error))
+	return -1;
+
+      res = write (unix_stream->priv->fd, buffer, count);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error writing to unix: %s"),
+		       g_strerror (errsv));
+	}
+      
+      break;
+    }
+  
+  return res;
+}
+
+static gboolean
+g_unix_output_stream_close (GOutputStream  *stream,
+			    GCancellable   *cancellable,
+			    GError        **error)
+{
+  GUnixOutputStream *unix_stream;
+  int res;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (stream);
+
+  if (!unix_stream->priv->close_fd)
+    return TRUE;
+  
+  while (1)
+    {
+      /* This might block during the close. Doesn't seem to be a way to avoid it though. */
+      res = close (unix_stream->priv->fd);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error closing unix: %s"),
+		       g_strerror (errsv));
+	}
+      break;
+    }
+
+  return res != -1;
+}
+
+typedef struct {
+  gsize count;
+  const void *buffer;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GCancellable *cancellable;
+  GUnixOutputStream *stream;
+} WriteAsyncData;
+
+static gboolean
+write_async_cb (WriteAsyncData *data,
+		GIOCondition    condition,
+		int             fd)
+{
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+  gssize count_written;
+
+  while (1)
+    {
+      if (g_cancellable_set_error_if_cancelled (data->cancellable, &error))
+	{
+	  count_written = -1;
+	  break;
+	}
+      
+      count_written = write (data->stream->priv->fd, data->buffer, data->count);
+      if (count_written == -1)
+	{
+          int errsv = errno;
+
+	  if (errsv == EINTR)
+	    continue;
+	  
+	  g_set_error (&error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error reading from unix: %s"),
+		       g_strerror (errsv));
+	}
+      break;
+    }
+
+  simple = g_simple_async_result_new (G_OBJECT (data->stream),
+				      data->callback,
+				      data->user_data,
+				      g_unix_output_stream_write_async);
+  
+  g_simple_async_result_set_op_res_gssize (simple, count_written);
+
+  if (count_written == -1)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+
+  return FALSE;
+}
+
+static void
+g_unix_output_stream_write_async (GOutputStream       *stream,
+				  const void          *buffer,
+				  gsize                count,
+				  int                  io_priority,
+				  GCancellable        *cancellable,
+				  GAsyncReadyCallback  callback,
+				  gpointer             user_data)
+{
+  GSource *source;
+  GUnixOutputStream *unix_stream;
+  WriteAsyncData *data;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (stream);
+
+  data = g_new0 (WriteAsyncData, 1);
+  data->count = count;
+  data->buffer = buffer;
+  data->callback = callback;
+  data->user_data = user_data;
+  data->cancellable = cancellable;
+  data->stream = unix_stream;
+
+  source = _g_fd_source_new (unix_stream->priv->fd,
+			     G_IO_OUT,
+			     cancellable);
+  
+  g_source_set_callback (source, (GSourceFunc)write_async_cb, data, g_free);
+  g_source_attach (source, NULL);
+  
+  g_source_unref (source);
+}
+
+static gssize
+g_unix_output_stream_write_finish (GOutputStream  *stream,
+				   GAsyncResult   *result,
+				   GError        **error)
+{
+  GSimpleAsyncResult *simple;
+  gssize nwritten;
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+  g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_unix_output_stream_write_async);
+  
+  nwritten = g_simple_async_result_get_op_res_gssize (simple);
+  return nwritten;
+}
+
+typedef struct {
+  GOutputStream *stream;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+} CloseAsyncData;
+
+static gboolean
+close_async_cb (CloseAsyncData *data)
+{
+  GUnixOutputStream *unix_stream;
+  GSimpleAsyncResult *simple;
+  GError *error = NULL;
+  gboolean result;
+  int res;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (data->stream);
+
+  if (!unix_stream->priv->close_fd)
+    {
+      result = TRUE;
+      goto out;
+    }
+  
+  while (1)
+    {
+      res = close (unix_stream->priv->fd);
+      if (res == -1)
+	{
+          int errsv = errno;
+
+	  g_set_error (&error, G_IO_ERROR,
+		       g_io_error_from_errno (errsv),
+		       _("Error closing unix: %s"),
+		       g_strerror (errsv));
+	}
+      break;
+    }
+  
+  result = res != -1;
+  
+ out:
+  simple = g_simple_async_result_new (G_OBJECT (data->stream),
+				      data->callback,
+				      data->user_data,
+				      g_unix_output_stream_close_async);
+
+  if (!result)
+    {
+      g_simple_async_result_set_from_error (simple, error);
+      g_error_free (error);
+    }
+
+  /* Complete immediately, not in idle, since we're already in a mainloop callout */
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+  
+  return FALSE;
+}
+
+static void
+g_unix_output_stream_close_async (GOutputStream        *stream,
+				  int                  io_priority,
+				  GCancellable        *cancellable,
+				  GAsyncReadyCallback  callback,
+				  gpointer             user_data)
+{
+  GSource *idle;
+  CloseAsyncData *data;
+
+  data = g_new0 (CloseAsyncData, 1);
+
+  data->stream = stream;
+  data->callback = callback;
+  data->user_data = user_data;
+  
+  idle = g_idle_source_new ();
+  g_source_set_callback (idle, (GSourceFunc)close_async_cb, data, g_free);
+  g_source_attach (idle, NULL);
+  g_source_unref (idle);
+}
+
+static gboolean
+g_unix_output_stream_close_finish (GOutputStream  *stream,
+				   GAsyncResult   *result,
+				   GError        **error)
+{
+  /* Failures handled in generic close_finish code */
+  return TRUE;
+}
+
+#define __G_UNIX_OUTPUT_STREAM_C__
+#include "gioaliasdef.c"
diff --git a/gio/gunixoutputstream.h b/gio/gunixoutputstream.h
new file mode 100644
index 0000000..ad42923
--- /dev/null
+++ b/gio/gunixoutputstream.h
@@ -0,0 +1,77 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_UNIX_OUTPUT_STREAM_H__
+#define __G_UNIX_OUTPUT_STREAM_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_UNIX_OUTPUT_STREAM         (g_unix_output_stream_get_type ())
+#define G_UNIX_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNIX_OUTPUT_STREAM, GUnixOutputStream))
+#define G_UNIX_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNIX_OUTPUT_STREAM, GUnixOutputStreamClass))
+#define G_IS_UNIX_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNIX_OUTPUT_STREAM))
+#define G_IS_UNIX_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNIX_OUTPUT_STREAM))
+#define G_UNIX_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_UNIX_OUTPUT_STREAM, GUnixOutputStreamClass))
+
+/**
+ * GUnixOutputStream:
+ *
+ * Implements #GOutputStream for outputting to selectable unix file descriptors
+ **/
+typedef struct _GUnixOutputStream         GUnixOutputStream;
+typedef struct _GUnixOutputStreamClass    GUnixOutputStreamClass;
+typedef struct _GUnixOutputStreamPrivate  GUnixOutputStreamPrivate;
+
+struct _GUnixOutputStream
+{
+  GOutputStream parent_instance;
+
+  /*< private >*/
+  GUnixOutputStreamPrivate *priv;
+};
+
+struct _GUnixOutputStreamClass
+{
+  GOutputStreamClass parent_class;
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+};
+
+GType           g_unix_output_stream_get_type     (void) G_GNUC_CONST;
+
+GOutputStream * g_unix_output_stream_new          (gint     fd,
+                                                   gboolean close_fd);
+void            g_unix_output_stream_set_close_fd (GUnixOutputStream *stream,
+                                                   gboolean           close_fd);
+gboolean        g_unix_output_stream_get_close_fd (GUnixOutputStream *stream);
+gint            g_unix_output_stream_get_fd       (GUnixOutputStream *stream);
+G_END_DECLS
+
+#endif /* __G_UNIX_OUTPUT_STREAM_H__ */
diff --git a/gio/gunixvolume.c b/gio/gunixvolume.c
new file mode 100644
index 0000000..91cb346
--- /dev/null
+++ b/gio/gunixvolume.c
@@ -0,0 +1,534 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include "gunixvolume.h"
+#include "gunixmount.h"
+#include "gunixmounts.h"
+#include "gthemedicon.h"
+#include "gvolume.h"
+#include "gvolumemonitor.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+/* for BUFSIZ */
+#include <stdio.h>
+
+#include "gioalias.h"
+
+struct _GUnixVolume {
+  GObject parent;
+
+  GVolumeMonitor *volume_monitor;
+  GUnixMount     *mount; /* owned by volume monitor */
+  
+  char *device_path;
+  char *mount_path;
+  gboolean can_eject;
+
+  char *identifier;
+  char *identifier_type;
+  
+  char *name;
+  GIcon *icon;
+};
+
+static void g_unix_volume_volume_iface_init (GVolumeIface *iface);
+
+#define g_unix_volume_get_type _g_unix_volume_get_type
+G_DEFINE_TYPE_WITH_CODE (GUnixVolume, g_unix_volume, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_VOLUME,
+						g_unix_volume_volume_iface_init))
+
+static void
+g_unix_volume_finalize (GObject *object)
+{
+  GUnixVolume *volume;
+  
+  volume = G_UNIX_VOLUME (object);
+
+  if (volume->volume_monitor != NULL)
+    g_object_unref (volume->volume_monitor);
+
+  if (volume->mount)
+    _g_unix_mount_unset_volume (volume->mount, volume);
+  
+  g_object_unref (volume->icon);
+  g_free (volume->name);
+  g_free (volume->mount_path);
+  g_free (volume->device_path);
+  g_free (volume->identifier);
+  g_free (volume->identifier_type);
+
+  G_OBJECT_CLASS (g_unix_volume_parent_class)->finalize (object);
+}
+
+static void
+g_unix_volume_class_init (GUnixVolumeClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = g_unix_volume_finalize;
+}
+
+static void
+g_unix_volume_init (GUnixVolume *unix_volume)
+{
+}
+
+/**
+ * g_unix_volume_new:
+ * @volume_monitor: a #GVolumeMonitor.
+ * @mountpoint: a #GUnixMountPoint.
+ * 
+ * Returns: a #GUnixVolume for the given #GUnixMountPoint.
+ **/
+GUnixVolume *
+_g_unix_volume_new (GVolumeMonitor  *volume_monitor,
+                    GUnixMountPoint *mountpoint)
+{
+  GUnixVolume *volume;
+  
+  if (!(g_unix_mount_point_is_user_mountable (mountpoint) ||
+	g_str_has_prefix (g_unix_mount_point_get_device_path (mountpoint), "/vol/")) ||
+      g_unix_mount_point_is_loopback (mountpoint))
+    return NULL;
+  
+  volume = g_object_new (G_TYPE_UNIX_VOLUME, NULL);
+  volume->volume_monitor = volume_monitor != NULL ? g_object_ref (volume_monitor) : NULL;
+  volume->mount_path = g_strdup (g_unix_mount_point_get_mount_path (mountpoint));
+  volume->device_path = g_strdup (g_unix_mount_point_get_device_path (mountpoint));
+  volume->can_eject = g_unix_mount_point_guess_can_eject (mountpoint);
+
+  volume->name = g_unix_mount_point_guess_name (mountpoint);
+  volume->icon = g_unix_mount_point_guess_icon (mountpoint);
+
+
+  if (strcmp (g_unix_mount_point_get_fs_type (mountpoint), "nfs") == 0)
+    {
+      volume->identifier_type = g_strdup (G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT);
+      volume->identifier = g_strdup (volume->device_path);
+    }
+  else if (g_str_has_prefix (volume->device_path, "LABEL="))
+    {
+      volume->identifier_type = g_strdup (G_VOLUME_IDENTIFIER_KIND_LABEL);
+      volume->identifier = g_strdup (volume->device_path + 6);
+    }
+  else if (g_str_has_prefix (volume->device_path, "UUID="))
+    {
+      volume->identifier_type = g_strdup (G_VOLUME_IDENTIFIER_KIND_UUID);
+      volume->identifier = g_strdup (volume->device_path + 5);
+    }
+  else if (g_path_is_absolute (volume->device_path))
+    {
+      volume->identifier_type = g_strdup (G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
+      volume->identifier = g_strdup (volume->device_path);
+    }
+  
+  return volume;
+}
+
+/**
+ * g_unix_volume_disconnected:
+ * @volume:
+ * 
+ **/
+void
+_g_unix_volume_disconnected (GUnixVolume *volume)
+{
+  if (volume->mount)
+    {
+      _g_unix_mount_unset_volume (volume->mount, volume);
+      volume->mount = NULL;
+    }
+}
+
+/**
+ * g_unix_volume_set_mount:
+ * @volume:
+ * @mount:
+ *  
+ **/
+void
+_g_unix_volume_set_mount (GUnixVolume  *volume,
+                          GUnixMount *mount)
+{
+  if (volume->mount == mount)
+    return;
+  
+  if (volume->mount)
+    _g_unix_mount_unset_volume (volume->mount, volume);
+  
+  volume->mount = mount;
+  
+  /* TODO: Emit changed in idle to avoid locking issues */
+  g_signal_emit_by_name (volume, "changed");
+  if (volume->volume_monitor != NULL)
+    g_signal_emit_by_name (volume->volume_monitor, "volume-changed", volume);
+}
+
+/**
+ * g_unix_volume_unset_mount:
+ * @volume:
+ * @mount:
+ *
+ **/
+void
+_g_unix_volume_unset_mount (GUnixVolume  *volume,
+                            GUnixMount *mount)
+{
+  if (volume->mount == mount)
+    {
+      volume->mount = NULL;
+      /* TODO: Emit changed in idle to avoid locking issues */
+      g_signal_emit_by_name (volume, "changed");
+      if (volume->volume_monitor != NULL)
+        g_signal_emit_by_name (volume->volume_monitor, "volume-changed", volume);
+    }
+}
+
+static GIcon *
+g_unix_volume_get_icon (GVolume *volume)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  return g_object_ref (unix_volume->icon);
+}
+
+static char *
+g_unix_volume_get_name (GVolume *volume)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  return g_strdup (unix_volume->name);
+}
+
+static char *
+g_unix_volume_get_uuid (GVolume *volume)
+{
+  return NULL;
+}
+
+static gboolean
+g_unix_volume_can_mount (GVolume *volume)
+{
+  return TRUE;
+}
+
+static gboolean
+g_unix_volume_can_eject (GVolume *volume)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  return unix_volume->can_eject;
+}
+
+static gboolean
+g_unix_volume_should_automount (GVolume *volume)
+{
+  /* We automount all local volumes because we don't even
+     make the internal stuff visible */
+  return TRUE;
+}
+
+static GDrive *
+g_unix_volume_get_drive (GVolume *volume)
+{
+  return NULL;
+}
+
+static GMount *
+g_unix_volume_get_mount (GVolume *volume)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+
+  if (unix_volume->mount != NULL)
+    return g_object_ref (unix_volume->mount);
+
+  return NULL;
+}
+
+
+gboolean
+_g_unix_volume_has_mount_path (GUnixVolume *volume,
+                                         const char  *mount_path)
+{
+  return strcmp (volume->mount_path, mount_path) == 0;
+}
+
+
+typedef struct {
+  GUnixVolume *unix_volume;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GCancellable *cancellable;
+  int error_fd;
+  GIOChannel *error_channel;
+  guint error_channel_source_id;
+  GString *error_string;
+} EjectMountOp;
+
+static void 
+eject_mount_cb (GPid pid, gint status, gpointer user_data)
+{
+  EjectMountOp *data = user_data;
+  GSimpleAsyncResult *simple;
+  
+  if (WEXITSTATUS (status) != 0)
+    {
+      GError *error;
+      error = g_error_new_literal (G_IO_ERROR, 
+                                   G_IO_ERROR_FAILED,
+                                   data->error_string->str);
+      simple = g_simple_async_result_new_from_error (G_OBJECT (data->unix_volume),
+                                                     data->callback,
+                                                     data->user_data,
+                                                     error);
+      g_error_free (error);
+    }
+  else
+    {
+      simple = g_simple_async_result_new (G_OBJECT (data->unix_volume),
+                                          data->callback,
+                                          data->user_data,
+                                          NULL);
+    }
+
+  g_simple_async_result_complete (simple);
+  g_object_unref (simple);
+
+  g_source_remove (data->error_channel_source_id);
+  g_io_channel_unref (data->error_channel);
+  g_string_free (data->error_string, TRUE);
+  close (data->error_fd);
+  g_spawn_close_pid (pid);
+  g_free (data);
+}
+
+static gboolean
+eject_mount_read_error (GIOChannel *channel,
+                  GIOCondition condition,
+                  gpointer user_data)
+{
+  EjectMountOp *data = user_data;
+  char buf[BUFSIZ];
+  gsize bytes_read;
+  GError *error;
+  GIOStatus status;
+
+  error = NULL;
+read:
+  status = g_io_channel_read_chars (channel, buf, sizeof (buf), &bytes_read, &error);
+  if (status == G_IO_STATUS_NORMAL)
+   {
+     g_string_append_len (data->error_string, buf, bytes_read);
+     if (bytes_read == sizeof (buf))
+        goto read;
+   }
+  else if (status == G_IO_STATUS_EOF)
+    g_string_append_len (data->error_string, buf, bytes_read);
+  else if (status == G_IO_STATUS_ERROR)
+    {
+      if (data->error_string->len > 0)
+        g_string_append (data->error_string, "\n");
+
+      g_string_append (data->error_string, error->message);
+      g_error_free (error);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static void
+eject_mount_do (GVolume             *volume,
+                GCancellable        *cancellable,
+                GAsyncReadyCallback  callback,
+                gpointer             user_data,
+                char               **argv)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  EjectMountOp *data;
+  GPid child_pid;
+  GError *error;
+  
+  data = g_new0 (EjectMountOp, 1);
+  data->unix_volume = unix_volume;
+  data->callback = callback;
+  data->user_data = user_data;
+  data->cancellable = cancellable;
+  
+  error = NULL;
+  if (!g_spawn_async_with_pipes (NULL,         /* working dir */
+                                 argv,
+                                 NULL,         /* envp */
+                                 G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
+                                 NULL,         /* child_setup */
+                                 NULL,         /* user_data for child_setup */
+                                 &child_pid,
+                                 NULL,           /* standard_input */
+                                 NULL,           /* standard_output */
+                                 &(data->error_fd),
+                                 &error)) {
+    g_assert (error != NULL);
+    goto handle_error;
+  }
+
+  data->error_string = g_string_new ("");
+
+  data->error_channel = g_io_channel_unix_new (data->error_fd);
+  g_io_channel_set_flags (data->error_channel, G_IO_FLAG_NONBLOCK, &error);
+  if (error != NULL)
+    goto handle_error;
+
+  data->error_channel_source_id = g_io_add_watch (data->error_channel, G_IO_IN, eject_mount_read_error, data);
+  g_child_watch_add (child_pid, eject_mount_cb, data);
+
+handle_error:
+  if (error != NULL) {
+    GSimpleAsyncResult *simple;
+    simple = g_simple_async_result_new_from_error (G_OBJECT (data->unix_volume),
+                                                   data->callback,
+                                                   data->user_data,
+                                                   error);
+    g_simple_async_result_complete (simple);
+    g_object_unref (simple);
+
+    if (data->error_string != NULL)
+      g_string_free (data->error_string, TRUE);
+
+    if (data->error_channel != NULL)
+      g_io_channel_unref (data->error_channel);
+
+    g_error_free (error);
+    g_free (data);
+  }
+}
+
+
+static void
+g_unix_volume_mount (GVolume    *volume,
+                     GMountMountFlags    flags,
+                     GMountOperation     *mount_operation,
+                     GCancellable        *cancellable,
+                     GAsyncReadyCallback  callback,
+                     gpointer             user_data)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  char *argv[] = {"mount", NULL, NULL};
+
+  if (unix_volume->mount_path != NULL)
+    argv[1] = unix_volume->mount_path;
+  else
+    argv[1] = unix_volume->device_path;
+
+  eject_mount_do (volume, cancellable, callback, user_data, argv);
+}
+
+static gboolean
+g_unix_volume_mount_finish (GVolume        *volume,
+                           GAsyncResult  *result,
+                           GError       **error)
+{
+  return TRUE;
+}
+
+static void
+g_unix_volume_eject (GVolume    *volume,
+                     GMountUnmountFlags   flags,
+                     GCancellable        *cancellable,
+                     GAsyncReadyCallback  callback,
+                     gpointer             user_data)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  char *argv[] = {"eject", NULL, NULL};
+
+  argv[1] = unix_volume->device_path;
+
+  eject_mount_do (volume, cancellable, callback, user_data, argv);
+}
+
+static gboolean
+g_unix_volume_eject_finish (GVolume        *volume,
+                            GAsyncResult  *result,
+                            GError       **error)
+{
+  return TRUE;
+}
+
+static char *
+g_unix_volume_get_identifier (GVolume              *volume,
+                              const char          *kind)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+
+  if (unix_volume->identifier_type != NULL &&
+      strcmp (kind, unix_volume->identifier_type) == 0)
+    return g_strdup (unix_volume->identifier);
+  return NULL;
+}
+
+static char **
+g_unix_volume_enumerate_identifiers (GVolume *volume)
+{
+  GUnixVolume *unix_volume = G_UNIX_VOLUME (volume);
+  char **res;
+
+  if (unix_volume->identifier_type)
+    {
+      res = g_new (char *, 2);
+      res[0] = g_strdup (unix_volume->identifier_type);
+      res[1] = NULL;
+    }
+  else
+    {
+      res = g_new (char *, 1);
+      res[0] = NULL;
+    }
+
+  return res;
+}
+
+static void
+g_unix_volume_volume_iface_init (GVolumeIface *iface)
+{
+  iface->get_name = g_unix_volume_get_name;
+  iface->get_icon = g_unix_volume_get_icon;
+  iface->get_uuid = g_unix_volume_get_uuid;
+  iface->get_drive = g_unix_volume_get_drive;
+  iface->get_mount = g_unix_volume_get_mount;
+  iface->can_mount = g_unix_volume_can_mount;
+  iface->can_eject = g_unix_volume_can_eject;
+  iface->should_automount = g_unix_volume_should_automount;
+  iface->mount_fn = g_unix_volume_mount;
+  iface->mount_finish = g_unix_volume_mount_finish;
+  iface->eject = g_unix_volume_eject;
+  iface->eject_finish = g_unix_volume_eject_finish;
+  iface->get_identifier = g_unix_volume_get_identifier;
+  iface->enumerate_identifiers = g_unix_volume_enumerate_identifiers;
+}
diff --git a/gio/gunixvolume.h b/gio/gunixvolume.h
new file mode 100644
index 0000000..3d51d3f
--- /dev/null
+++ b/gio/gunixvolume.h
@@ -0,0 +1,60 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#ifndef __G_UNIX_VOLUME_H__
+#define __G_UNIX_VOLUME_H__
+
+#include <gio/giotypes.h>
+#include <gio/gunixvolumemonitor.h>
+#include <gio/gunixmounts.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_UNIX_VOLUME        (_g_unix_volume_get_type ())
+#define G_UNIX_VOLUME(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNIX_VOLUME, GUnixVolume))
+#define G_UNIX_VOLUME_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNIX_VOLUME, GUnixVolumeClass))
+#define G_IS_UNIX_VOLUME(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNIX_VOLUME))
+#define G_IS_UNIX_VOLUME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNIX_VOLUME))
+
+typedef struct _GUnixVolumeClass GUnixVolumeClass;
+
+struct _GUnixVolumeClass
+{
+  GObjectClass parent_class;
+};
+
+GType         _g_unix_volume_get_type       (void) G_GNUC_CONST;
+
+GUnixVolume * _g_unix_volume_new            (GVolumeMonitor  *volume_monitor,
+                                             GUnixMountPoint *mountpoint);
+gboolean      _g_unix_volume_has_mount_path (GUnixVolume     *volume,
+                                             const char      *mount_path);
+void          _g_unix_volume_set_mount      (GUnixVolume     *volume,
+                                             GUnixMount      *mount);
+void          _g_unix_volume_unset_mount    (GUnixVolume     *volume,
+                                             GUnixMount      *mount);
+void          _g_unix_volume_disconnected   (GUnixVolume     *volume);
+
+G_END_DECLS
+
+#endif /* __G_UNIX_VOLUME_H__ */
diff --git a/gio/gunixvolumemonitor.c b/gio/gunixvolumemonitor.c
new file mode 100644
index 0000000..7592ca8
--- /dev/null
+++ b/gio/gunixvolumemonitor.c
@@ -0,0 +1,448 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib.h>
+#include "gunixvolumemonitor.h"
+#include "gunixmounts.h"
+#include "gunixmount.h"
+#include "gunixvolume.h"
+#include "gmount.h"
+#include "gmountprivate.h"
+#include "giomodule.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+struct _GUnixVolumeMonitor {
+  GNativeVolumeMonitor parent;
+
+  GUnixMountMonitor *mount_monitor;
+
+  GList *last_mountpoints;
+  GList *last_mounts;
+
+  GList *volumes;
+  GList *mounts;
+};
+
+static void mountpoints_changed      (GUnixMountMonitor  *mount_monitor,
+                                      gpointer            user_data);
+static void mounts_changed           (GUnixMountMonitor  *mount_monitor,
+                                      gpointer            user_data);
+static void update_volumes           (GUnixVolumeMonitor *monitor);
+static void update_mounts            (GUnixVolumeMonitor *monitor);
+
+#define g_unix_volume_monitor_get_type _g_unix_volume_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GUnixVolumeMonitor, g_unix_volume_monitor, G_TYPE_NATIVE_VOLUME_MONITOR,
+                         g_io_extension_point_implement (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME,
+							 g_define_type_id,
+							 "unix",
+							 0));
+
+static void
+g_unix_volume_monitor_finalize (GObject *object)
+{
+  GUnixVolumeMonitor *monitor;
+  
+  monitor = G_UNIX_VOLUME_MONITOR (object);
+
+  g_signal_handlers_disconnect_by_func (monitor->mount_monitor, mountpoints_changed, monitor);
+  g_signal_handlers_disconnect_by_func (monitor->mount_monitor, mounts_changed, monitor);
+					
+  g_object_unref (monitor->mount_monitor);
+
+  g_list_foreach (monitor->last_mountpoints, (GFunc)g_unix_mount_point_free, NULL);
+  g_list_free (monitor->last_mountpoints);
+  g_list_foreach (monitor->last_mounts, (GFunc)g_unix_mount_free, NULL);
+  g_list_free (monitor->last_mounts);
+
+  g_list_foreach (monitor->volumes, (GFunc)g_object_unref, NULL);
+  g_list_free (monitor->volumes);
+  g_list_foreach (monitor->mounts, (GFunc)g_object_unref, NULL);
+  g_list_free (monitor->mounts);
+
+  G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->finalize (object);
+}
+
+static void
+g_unix_volume_monitor_dispose (GObject *object)
+{
+  GUnixVolumeMonitor *monitor;
+
+  monitor = G_UNIX_VOLUME_MONITOR (object);
+  g_list_foreach (monitor->volumes, (GFunc)g_object_unref, NULL);
+  g_list_free (monitor->volumes);
+  monitor->volumes = NULL;
+  
+  g_list_foreach (monitor->mounts, (GFunc)g_object_unref, NULL);
+  g_list_free (monitor->mounts);
+  monitor->mounts = NULL;
+  
+  G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->dispose (object);
+}
+
+static GList *
+get_mounts (GVolumeMonitor *volume_monitor)
+{
+  GUnixVolumeMonitor *monitor;
+  GList *l;
+  
+  monitor = G_UNIX_VOLUME_MONITOR (volume_monitor);
+
+  l = g_list_copy (monitor->mounts);
+  g_list_foreach (l, (GFunc)g_object_ref, NULL);
+
+  return l;
+}
+
+static GList *
+get_volumes (GVolumeMonitor *volume_monitor)
+{
+  GUnixVolumeMonitor *monitor;
+  GList *l;
+  
+  monitor = G_UNIX_VOLUME_MONITOR (volume_monitor);
+
+  l = g_list_copy (monitor->volumes);
+  g_list_foreach (l, (GFunc)g_object_ref, NULL);
+
+  return l;
+}
+
+static GList *
+get_connected_drives (GVolumeMonitor *volume_monitor)
+{
+  return NULL;
+}
+
+static GVolume *
+get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
+{
+  return NULL;
+}
+
+static GMount *
+get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
+{
+  return NULL;
+}
+
+static gboolean
+is_supported (void)
+{
+  return TRUE;
+}
+
+static GMount *
+get_mount_for_mount_path (const char *mount_path,
+                          GCancellable *cancellable)
+{
+  GUnixMountEntry *mount_entry;
+  GUnixMount *mount;
+
+  mount_entry = g_unix_mount_at (mount_path, NULL);
+
+  if (!mount_entry)
+    return NULL;
+
+  /* TODO: Set mountable volume? */
+  mount = _g_unix_mount_new (NULL, mount_entry, NULL);
+
+  g_unix_mount_free (mount_entry);
+
+  return G_MOUNT (mount);
+}
+
+static void
+g_unix_volume_monitor_class_init (GUnixVolumeMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
+  GNativeVolumeMonitorClass *native_class = G_NATIVE_VOLUME_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_unix_volume_monitor_finalize;
+  gobject_class->dispose = g_unix_volume_monitor_dispose;
+
+  monitor_class->get_mounts = get_mounts;
+  monitor_class->get_volumes = get_volumes;
+  monitor_class->get_connected_drives = get_connected_drives;
+  monitor_class->get_volume_for_uuid = get_volume_for_uuid;
+  monitor_class->get_mount_for_uuid = get_mount_for_uuid;
+  monitor_class->is_supported = is_supported;
+
+  native_class->get_mount_for_mount_path = get_mount_for_mount_path;
+}
+
+static void
+mountpoints_changed (GUnixMountMonitor *mount_monitor,
+		     gpointer           user_data)
+{
+  GUnixVolumeMonitor *unix_monitor = user_data;
+
+  /* Update both to make sure volumes are created before mounts */
+  update_volumes (unix_monitor);
+  update_mounts (unix_monitor);
+}
+
+static void
+mounts_changed (GUnixMountMonitor *mount_monitor,
+		gpointer           user_data)
+{
+  GUnixVolumeMonitor *unix_monitor = user_data;
+
+  /* Update both to make sure volumes are created before mounts */
+  update_volumes (unix_monitor);
+  update_mounts (unix_monitor);
+}
+
+static void
+g_unix_volume_monitor_init (GUnixVolumeMonitor *unix_monitor)
+{
+
+  unix_monitor->mount_monitor = g_unix_mount_monitor_new ();
+
+  g_signal_connect (unix_monitor->mount_monitor,
+		    "mounts-changed", G_CALLBACK (mounts_changed),
+		    unix_monitor);
+  
+  g_signal_connect (unix_monitor->mount_monitor,
+		    "mountpoints-changed", G_CALLBACK (mountpoints_changed),
+		    unix_monitor);
+		    
+  update_volumes (unix_monitor);
+  update_mounts (unix_monitor);
+}
+
+/**
+ * g_unix_volume_monitor_new:
+ * 
+ * Returns:  a new #GVolumeMonitor.
+ **/
+GVolumeMonitor *
+_g_unix_volume_monitor_new (void)
+{
+  GUnixVolumeMonitor *monitor;
+
+  monitor = g_object_new (G_TYPE_UNIX_VOLUME_MONITOR, NULL);
+  
+  return G_VOLUME_MONITOR (monitor);
+}
+
+static void
+diff_sorted_lists (GList         *list1, 
+                   GList         *list2, 
+                   GCompareFunc   compare,
+		   GList        **added, 
+                   GList        **removed)
+{
+  int order;
+  
+  *added = *removed = NULL;
+  
+  while (list1 != NULL &&
+	 list2 != NULL)
+    {
+      order = (*compare) (list1->data, list2->data);
+      if (order < 0)
+	{
+	  *removed = g_list_prepend (*removed, list1->data);
+	  list1 = list1->next;
+	}
+      else if (order > 0)
+	{
+	  *added = g_list_prepend (*added, list2->data);
+	  list2 = list2->next;
+	}
+      else
+	{ /* same item */
+	  list1 = list1->next;
+	  list2 = list2->next;
+	}
+    }
+
+  while (list1 != NULL)
+    {
+      *removed = g_list_prepend (*removed, list1->data);
+      list1 = list1->next;
+    }
+  while (list2 != NULL)
+    {
+      *added = g_list_prepend (*added, list2->data);
+      list2 = list2->next;
+    }
+}
+
+/**
+ * _g_unix_volume_monitor_lookup_volume_for_mount_path: 
+ * @monitor:
+ * @mount_path:
+ * 
+ * Returns:  #GUnixVolume for the given @mount_path.
+ **/
+GUnixVolume *
+_g_unix_volume_monitor_lookup_volume_for_mount_path (GUnixVolumeMonitor *monitor,
+                                                     const char         *mount_path)
+{
+  GList *l;
+
+  for (l = monitor->volumes; l != NULL; l = l->next)
+    {
+      GUnixVolume *volume = l->data;
+
+      if (_g_unix_volume_has_mount_path (volume, mount_path))
+	return volume;
+    }
+  
+  return NULL;
+}
+
+static GUnixMount *
+find_mount_by_mountpath (GUnixVolumeMonitor *monitor,
+                         const char *mount_path)
+{
+  GList *l;
+
+  for (l = monitor->mounts; l != NULL; l = l->next)
+    {
+      GUnixMount *mount = l->data;
+
+      if (_g_unix_mount_has_mount_path (mount, mount_path))
+	return mount;
+    }
+  
+  return NULL;
+}
+
+static void
+update_volumes (GUnixVolumeMonitor *monitor)
+{
+  GList *new_mountpoints;
+  GList *removed, *added;
+  GList *l;
+  GUnixVolume *volume;
+  
+  new_mountpoints = g_unix_mount_points_get (NULL);
+  
+  new_mountpoints = g_list_sort (new_mountpoints, (GCompareFunc) g_unix_mount_point_compare);
+  
+  diff_sorted_lists (monitor->last_mountpoints,
+		     new_mountpoints, (GCompareFunc) g_unix_mount_point_compare,
+		     &added, &removed);
+  
+  for (l = removed; l != NULL; l = l->next)
+    {
+      GUnixMountPoint *mountpoint = l->data;
+      
+      volume = _g_unix_volume_monitor_lookup_volume_for_mount_path (monitor,
+                                                                    g_unix_mount_point_get_mount_path (mountpoint));
+      if (volume)
+	{
+	  _g_unix_volume_disconnected (volume);
+	  monitor->volumes = g_list_remove (monitor->volumes, volume);
+	  g_signal_emit_by_name (monitor, "volume-removed", volume);
+	  g_signal_emit_by_name (volume, "removed");
+	  g_object_unref (volume);
+	}
+    }
+  
+  for (l = added; l != NULL; l = l->next)
+    {
+      GUnixMountPoint *mountpoint = l->data;
+      
+      volume = _g_unix_volume_new (G_VOLUME_MONITOR (monitor), mountpoint);
+      if (volume)
+	{
+	  monitor->volumes = g_list_prepend (monitor->volumes, volume);
+	  g_signal_emit_by_name (monitor, "volume-added", volume);
+	}
+    }
+  
+  g_list_free (added);
+  g_list_free (removed);
+  g_list_foreach (monitor->last_mountpoints,
+		  (GFunc)g_unix_mount_point_free, NULL);
+  g_list_free (monitor->last_mountpoints);
+  monitor->last_mountpoints = new_mountpoints;
+}
+
+static void
+update_mounts (GUnixVolumeMonitor *monitor)
+{
+  GList *new_mounts;
+  GList *removed, *added;
+  GList *l;
+  GUnixMount *mount;
+  GUnixVolume *volume;
+  const char *mount_path;
+  
+  new_mounts = g_unix_mounts_get (NULL);
+  
+  new_mounts = g_list_sort (new_mounts, (GCompareFunc) g_unix_mount_compare);
+  
+  diff_sorted_lists (monitor->last_mounts,
+		     new_mounts, (GCompareFunc) g_unix_mount_compare,
+		     &added, &removed);
+  
+  for (l = removed; l != NULL; l = l->next)
+    {
+      GUnixMountEntry *mount_entry = l->data;
+      
+      mount = find_mount_by_mountpath (monitor, g_unix_mount_get_mount_path (mount_entry));
+      if (mount)
+	{
+	  _g_unix_mount_unmounted (mount);
+	  monitor->mounts = g_list_remove (monitor->mounts, mount);
+	  g_signal_emit_by_name (monitor, "mount-removed", mount);
+	  g_signal_emit_by_name (mount, "unmounted");
+	  g_object_unref (mount);
+	}
+    }
+  
+  for (l = added; l != NULL; l = l->next)
+    {
+      GUnixMountEntry *mount_entry = l->data;
+
+      mount_path = g_unix_mount_get_mount_path (mount_entry);
+      
+      volume = _g_unix_volume_monitor_lookup_volume_for_mount_path (monitor, mount_path);
+      mount = _g_unix_mount_new (G_VOLUME_MONITOR (monitor), mount_entry, volume);
+      if (mount)
+	{
+	  monitor->mounts = g_list_prepend (monitor->mounts, mount);
+	  g_signal_emit_by_name (monitor, "mount-added", mount);
+	}
+    }
+  
+  g_list_free (added);
+  g_list_free (removed);
+  g_list_foreach (monitor->last_mounts,
+		  (GFunc)g_unix_mount_free, NULL);
+  g_list_free (monitor->last_mounts);
+  monitor->last_mounts = new_mounts;
+}
diff --git a/gio/gunixvolumemonitor.h b/gio/gunixvolumemonitor.h
new file mode 100644
index 0000000..9c09cf6
--- /dev/null
+++ b/gio/gunixvolumemonitor.h
@@ -0,0 +1,63 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#ifndef __G_UNIX_VOLUME_MONITOR_H__
+#define __G_UNIX_VOLUME_MONITOR_H__
+
+#include <gio/gnativevolumemonitor.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_UNIX_VOLUME_MONITOR        (_g_unix_volume_monitor_get_type ())
+#define G_UNIX_VOLUME_MONITOR(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_UNIX_VOLUME_MONITOR, GUnixVolumeMonitor))
+#define G_UNIX_VOLUME_MONITOR_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_UNIX_VOLUME_MONITOR, GUnixVolumeMonitorClass))
+#define G_IS_UNIX_VOLUME_MONITOR(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_UNIX_VOLUME_MONITOR))
+#define G_IS_UNIX_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_UNIX_VOLUME_MONITOR))
+
+typedef struct _GUnixVolumeMonitor      GUnixVolumeMonitor;
+typedef struct _GUnixVolumeMonitorClass GUnixVolumeMonitorClass;
+
+/* Forward definitions */
+
+/**
+ * GUnixMount:
+ *
+ * Implementation of the #GMount interface for Unix systems.
+ */
+typedef struct _GUnixMount GUnixMount;
+typedef struct _GUnixVolume GUnixVolume;
+
+struct _GUnixVolumeMonitorClass
+{
+  GNativeVolumeMonitorClass parent_class;
+};
+
+GType            _g_unix_volume_monitor_get_type                     (void) G_GNUC_CONST;
+
+GVolumeMonitor * _g_unix_volume_monitor_new                          (void);
+GUnixVolume    * _g_unix_volume_monitor_lookup_volume_for_mount_path (GUnixVolumeMonitor *monitor,
+                                                                      const char         *mount_path);
+
+G_END_DECLS
+
+#endif /* __G_UNIX_VOLUME_MONITOR_H__ */
diff --git a/gio/gvfs.c b/gio/gvfs.c
new file mode 100644
index 0000000..df59c62
--- /dev/null
+++ b/gio/gvfs.c
@@ -0,0 +1,255 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+#include <string.h>
+#include "gvfs.h"
+#include "glocalvfs.h"
+#include "giomodule-priv.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gvfs
+ * @short_description: Virtual File System 
+ * @include: gio/gio.h
+ * 
+ * Entry point for using GIO functionality.
+ *
+ **/
+
+G_DEFINE_TYPE (GVfs, g_vfs, G_TYPE_OBJECT);
+
+static void
+g_vfs_class_init (GVfsClass *klass)
+{
+}
+
+static void
+g_vfs_init (GVfs *vfs)
+{
+}
+
+/**
+ * g_vfs_is_active:
+ * @vfs: a #GVfs.
+ * 
+ * Checks if the VFS is active.
+ * 
+ * Returns: %TRUE if construction of the @vfs was successful and it is now active.
+ **/
+gboolean
+g_vfs_is_active (GVfs *vfs)
+{
+  GVfsClass *class;
+
+  g_return_val_if_fail (G_IS_VFS (vfs), FALSE);
+
+  class = G_VFS_GET_CLASS (vfs);
+
+  return (* class->is_active) (vfs);
+}
+
+
+/**
+ * g_vfs_get_file_for_path:
+ * @vfs: a #GVfs.
+ * @path: a string containing a VFS path.
+ * 
+ * Gets a #GFile for @path.
+ * 
+ * Returns: a #GFile. 
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_vfs_get_file_for_path (GVfs       *vfs,
+			 const char *path)
+{
+  GVfsClass *class;
+  
+  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
+  g_return_val_if_fail (path != NULL, NULL);
+
+  class = G_VFS_GET_CLASS (vfs);
+
+  return (* class->get_file_for_path) (vfs, path);
+}
+
+/**
+ * g_vfs_get_file_for_uri:
+ * @vfs: a#GVfs.
+ * @uri: a string containing a URI 
+ * 
+ * Gets a #GFile for @uri.
+ * 
+ * This operation never fails, but the returned object
+ * might not support any I/O operation if the URI 
+ * is malformed or if the URI scheme is not supported.
+ * 
+ * Returns: a #GFile. 
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_vfs_get_file_for_uri (GVfs       *vfs,
+			const char *uri)
+{
+  GVfsClass *class;
+  
+  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
+  g_return_val_if_fail (uri != NULL, NULL);
+
+  class = G_VFS_GET_CLASS (vfs);
+
+  return (* class->get_file_for_uri) (vfs, uri);
+}
+
+/**
+ * g_vfs_get_supported_uri_schemes:
+ * @vfs: a #GVfs.
+ * 
+ * Gets a list of URI schemes supported by @vfs.
+ * 
+ * Returns: a %NULL-terminated array of strings.
+ *     The returned array belongs to GIO and must 
+ *     not be freed or modified.
+ **/
+const gchar * const *
+g_vfs_get_supported_uri_schemes (GVfs *vfs)
+{
+  GVfsClass *class;
+  
+  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
+
+  class = G_VFS_GET_CLASS (vfs);
+
+  return (* class->get_supported_uri_schemes) (vfs);
+}
+
+/**
+ * g_vfs_parse_name:
+ * @vfs: a #GVfs.
+ * @parse_name: a string to be parsed by the VFS module.
+ * 
+ * This operation never fails, but the returned object might 
+ * not support any I/O operations if the @parse_name cannot 
+ * be parsed by the #GVfs module.
+ * 
+ * Returns: a #GFile for the given @parse_name.
+ *     Free the returned object with g_object_unref().
+ **/
+GFile *
+g_vfs_parse_name (GVfs       *vfs,
+		  const char *parse_name)
+{
+  GVfsClass *class;
+  
+  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
+  g_return_val_if_fail (parse_name != NULL, NULL);
+
+  class = G_VFS_GET_CLASS (vfs);
+
+  return (* class->parse_name) (vfs, parse_name);
+}
+
+static gpointer
+get_default_vfs (gpointer arg)
+{
+  const char *use_this;
+  GVfs *vfs;
+  GList *l;
+  GIOExtensionPoint *ep;
+  GIOExtension *extension;
+  
+
+  use_this = g_getenv ("GIO_USE_VFS");
+  
+  /* Ensure vfs in modules loaded */
+  _g_io_modules_ensure_loaded ();
+
+  ep = g_io_extension_point_lookup (G_VFS_EXTENSION_POINT_NAME);
+
+  if (use_this)
+    {
+      extension = g_io_extension_point_get_extension_by_name (ep, use_this);
+      if (extension)
+	{
+	  vfs = g_object_new (g_io_extension_get_type (extension), NULL);
+	  
+	  if (g_vfs_is_active (vfs))
+	    return vfs;
+	  
+	  g_object_unref (vfs);
+	}
+    }
+
+  for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
+    {
+      extension = l->data;
+
+      vfs = g_object_new (g_io_extension_get_type (extension), NULL);
+
+      if (g_vfs_is_active (vfs))
+	return vfs;
+
+      g_object_unref (vfs);
+    }
+  
+
+  return NULL;
+}
+
+/**
+ * g_vfs_get_default:
+ * 
+ * Gets the default #GVfs for the system.
+ * 
+ * Returns: a #GVfs. 
+ **/
+GVfs *
+g_vfs_get_default (void)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  
+  return g_once (&once_init, get_default_vfs, NULL);
+}
+
+/**
+ * g_vfs_get_local:
+ * 
+ * Gets the local #GVfs for the system.
+ * 
+ * Returns: a #GVfs.
+ **/
+GVfs *
+g_vfs_get_local (void)
+{
+  static gsize vfs = 0;
+
+  if (g_once_init_enter (&vfs))
+    g_once_init_leave (&vfs, (gsize)_g_local_vfs_new ());
+
+  return G_VFS (vfs);
+}
+
+#define __G_VFS_C__
+#include "gioaliasdef.c"
diff --git a/gio/gvfs.h b/gio/gvfs.h
new file mode 100644
index 0000000..bb8fd80
--- /dev/null
+++ b/gio/gvfs.h
@@ -0,0 +1,109 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_VFS_H__
+#define __G_VFS_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_VFS         (g_vfs_get_type ())
+#define G_VFS(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VFS, GVfs))
+#define G_VFS_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VFS, GVfsClass))
+#define G_VFS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VFS, GVfsClass))
+#define G_IS_VFS(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VFS))
+#define G_IS_VFS_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VFS))
+
+/**
+ * G_VFS_EXTENSION_POINT_NAME:
+ *
+ * Extension point for #GVfs functionality.
+ * See <link linkend="extending-gio">Extending GIO</link>.
+ */
+#define G_VFS_EXTENSION_POINT_NAME "gio-vfs"
+
+/**
+ * GVfs:
+ *
+ * Virtual File System object.
+ **/
+typedef struct _GVfsClass    GVfsClass;
+
+struct _GVfs
+{
+  GObject parent_instance;
+};
+
+struct _GVfsClass
+{
+  GObjectClass parent_class;
+
+  /* Virtual Table */
+
+  gboolean              (* is_active)                 (GVfs       *vfs);
+  GFile               * (* get_file_for_path)         (GVfs       *vfs,
+                                                       const char *path);
+  GFile               * (* get_file_for_uri)          (GVfs       *vfs,
+                                                       const char *uri);
+  const gchar * const * (* get_supported_uri_schemes) (GVfs       *vfs);
+  GFile               * (* parse_name)                (GVfs       *vfs,
+                                                       const char *parse_name);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+  void (*_g_reserved6) (void);
+  void (*_g_reserved7) (void);
+  void (*_g_reserved8) (void);
+  void (*_g_reserved9) (void);
+  void (*_g_reserved10) (void);
+  void (*_g_reserved11) (void);
+  void (*_g_reserved12) (void);
+};
+
+GType                 g_vfs_get_type                  (void) G_GNUC_CONST;
+
+gboolean              g_vfs_is_active                 (GVfs       *vfs);
+GFile *               g_vfs_get_file_for_path         (GVfs       *vfs,
+                                                       const char *path);
+GFile *               g_vfs_get_file_for_uri          (GVfs       *vfs,
+                                                       const char *uri);
+const gchar* const * g_vfs_get_supported_uri_schemes  (GVfs       *vfs);
+
+GFile *               g_vfs_parse_name                (GVfs       *vfs,
+                                                       const char *parse_name);
+
+GVfs *                g_vfs_get_default               (void);
+GVfs *                g_vfs_get_local                 (void);
+
+G_END_DECLS
+
+#endif /* __G_VFS_H__ */
diff --git a/gio/gvolume.c b/gio/gvolume.c
new file mode 100644
index 0000000..6e3f8b7
--- /dev/null
+++ b/gio/gvolume.c
@@ -0,0 +1,601 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+#include "gmount.h"
+#include "gvolume.h"
+#include "gasyncresult.h"
+#include "gsimpleasyncresult.h"
+#include "gioerror.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gvolume
+ * @short_description: Volume management
+ * @include: gio/gio.h
+ * 
+ * The #GVolume interface represents user-visible objects that can be
+ * mounted. Note, when porting from GnomeVFS, #GVolume is the moral
+ * equivalent of #GnomeVFSDrive.
+ *
+ * Mounting a #GVolume instance is an asynchronous operation. For more
+ * information about asynchronous operations, see #GAsyncReady and
+ * #GSimpleAsyncReady. To mount a #GVolume, first call
+ * g_volume_mount() with (at least) the #GVolume instance, optionally
+ * a #GMountOperation object and a #GAsyncReadyCallback. 
+ *
+ * Typically, one will only want to pass %NULL for the
+ * #GMountOperation if automounting all volumes when a desktop session
+ * starts since it's not desirable to put up a lot of dialogs asking
+ * for credentials.
+ *
+ * The callback will be fired when the operation has resolved (either
+ * with success or failure), and a #GAsyncReady structure will be
+ * passed to the callback.  That callback should then call
+ * g_volume_mount_finish() with the #GVolume instance and the
+ * #GAsyncReady data to see if the operation was completed
+ * successfully.  If an @error is present when g_volume_mount_finish()
+ * is called, then it will be filled with any error information.
+ *
+ * <para id="volume-identifier">
+ * It is sometimes necessary to directly access the underlying
+ * operating system object behind a volume (e.g. for passing a volume
+ * to an application via the commandline). For this purpose, GIO
+ * allows to obtain an 'identifier' for the volume. There can be
+ * different kinds of identifiers, such as Hal UDIs, filesystem labels,
+ * traditional Unix devices (e.g. <filename>/dev/sda2</filename>),
+ * uuids. GIO uses predefind strings as names for the different kinds
+ * of identifiers: #G_VOLUME_IDENTIFIER_KIND_HAL_UDI,
+ * #G_VOLUME_IDENTIFIER_KIND_LABEL, etc. Use g_volume_get_identifier()
+ * to obtain an identifier for a volume.
+ * </para>
+ *
+ * Note that #G_VOLUME_IDENTIFIER_KIND_HAL_UDI will only be available
+ * when the gvfs hal volume monitor is in use. Other volume monitors
+ * will generally be able to provide the #G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE
+ * identifier, which can be used to obtain a hal device by means of
+ * libhal_manger_find_device_string_match().
+ */
+
+static void g_volume_base_init (gpointer g_class);
+static void g_volume_class_init (gpointer g_class,
+                                 gpointer class_data);
+
+GType
+g_volume_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile))
+    {
+      const GTypeInfo volume_info =
+      {
+        sizeof (GVolumeIface), /* class_size */
+	g_volume_base_init,   /* base_init */
+	NULL,		/* base_finalize */
+	g_volume_class_init,
+	NULL,		/* class_finalize */
+	NULL,		/* class_data */
+	0,
+	0,              /* n_preallocs */
+	NULL
+      };
+      GType g_define_type_id =
+	g_type_register_static (G_TYPE_INTERFACE, I_("GVolume"),
+				&volume_info, 0);
+
+      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
+
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+    }
+
+  return g_define_type_id__volatile;
+}
+
+static void
+g_volume_class_init (gpointer g_class,
+                     gpointer class_data)
+{
+}
+
+static void
+g_volume_base_init (gpointer g_class)
+{
+  static gboolean initialized = FALSE;
+
+  if (! initialized)
+    {
+     /**
+      * GVolume::changed:
+      * 
+      * Emitted when the volume has been changed.
+      **/
+      g_signal_new (I_("changed"),
+                    G_TYPE_VOLUME,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GVolumeIface, changed),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+     /**
+      * GVolume::removed:
+      * 
+      * This signal is emitted when the #GVolume have been removed. If
+      * the recipient is holding references to the object they should
+      * release them so the object can be finalized.
+      **/
+      g_signal_new (I_("removed"),
+                    G_TYPE_VOLUME,
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GVolumeIface, removed),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__VOID,
+                    G_TYPE_NONE, 0);
+
+      initialized = TRUE;
+    }
+}
+
+/**
+ * g_volume_get_name:
+ * @volume: a #GVolume.
+ * 
+ * Gets the name of @volume.
+ * 
+ * Returns: the name for the given @volume. The returned string should 
+ * be freed with g_free() when no longer needed.
+ **/
+char *
+g_volume_get_name (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  return (* iface->get_name) (volume);
+}
+
+/**
+ * g_volume_get_icon:
+ * @volume: a #GVolume.
+ * 
+ * Gets the icon for @volume.
+ * 
+ * Returns: a #GIcon.
+ *     The returned object should be unreffed with g_object_unref()
+ *     when no longer needed.
+ **/
+GIcon *
+g_volume_get_icon (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  return (* iface->get_icon) (volume);
+}
+
+/**
+ * g_volume_get_uuid:
+ * @volume: a #GVolume.
+ * 
+ * Gets the UUID for the @volume. The reference is typically based on
+ * the file system UUID for the volume in question and should be
+ * considered an opaque string. Returns %NULL if there is no UUID
+ * available.
+ * 
+ * Returns: the UUID for @volume or %NULL if no UUID can be computed.
+ *     The returned string should be freed with g_free() 
+ *     when no longer needed.
+ **/
+char *
+g_volume_get_uuid (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  return (* iface->get_uuid) (volume);
+}
+  
+/**
+ * g_volume_get_drive:
+ * @volume: a #GVolume.
+ * 
+ * Gets the drive for the @volume.
+ * 
+ * Returns: a #GDrive or %NULL if @volume is not associated with a drive.
+ *     The returned object should be unreffed with g_object_unref()
+ *     when no longer needed.
+ **/
+GDrive *
+g_volume_get_drive (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  return (* iface->get_drive) (volume);
+}
+
+/**
+ * g_volume_get_mount:
+ * @volume: a #GVolume.
+ * 
+ * Gets the mount for the @volume.
+ * 
+ * Returns: a #GMount or %NULL if @volume isn't mounted.
+ *     The returned object should be unreffed with g_object_unref()
+ *     when no longer needed.
+ **/
+GMount *
+g_volume_get_mount (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  return (* iface->get_mount) (volume);
+}
+
+
+/**
+ * g_volume_can_mount:
+ * @volume: a #GVolume.
+ * 
+ * Checks if a volume can be mounted.
+ * 
+ * Returns: %TRUE if the @volume can be mounted. %FALSE otherwise.
+ **/
+gboolean
+g_volume_can_mount (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), FALSE);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->can_mount == NULL)
+    return FALSE;
+
+  return (* iface->can_mount) (volume);
+}
+
+/**
+ * g_volume_can_eject:
+ * @volume: a #GVolume.
+ * 
+ * Checks if a volume can be ejected.
+ * 
+ * Returns: %TRUE if the @volume can be ejected. %FALSE otherwise.
+ **/
+gboolean
+g_volume_can_eject (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), FALSE);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->can_eject == NULL)
+    return FALSE;
+
+  return (* iface->can_eject) (volume);
+}
+
+/**
+ * g_volume_should_automount:
+ * @volume: a #GVolume
+ *
+ * Returns whether the volume should be automatically mounted.
+ * 
+ * Returns: %TRUE if the volume should be automatically mounted.
+ */
+gboolean
+g_volume_should_automount (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), FALSE);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->should_automount == NULL)
+    return FALSE;
+
+  return (* iface->should_automount) (volume);
+}
+
+
+/**
+ * g_volume_mount:
+ * @volume: a #GVolume.
+ * @flags: flags affecting the operation
+ * @mount_operation: a #GMountOperation or %NULL to avoid user interaction.
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data that gets passed to @callback
+ * 
+ * Mounts a volume. This is an asynchronous operation, and is
+ * finished by calling g_volume_mount_finish() with the @volume
+ * and #GAsyncResult returned in the @callback.
+ **/
+void
+g_volume_mount (GVolume             *volume,
+		GMountMountFlags     flags,
+                GMountOperation     *mount_operation,
+                GCancellable        *cancellable,
+                GAsyncReadyCallback  callback,
+                gpointer             user_data)
+{
+  GVolumeIface *iface;
+
+  g_return_if_fail (G_IS_VOLUME (volume));
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->mount_fn == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (volume), callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   _("volume doesn't implement mount"));
+      
+      return;
+    }
+  
+  (* iface->mount_fn) (volume, flags, mount_operation, cancellable, callback, user_data);
+}
+
+/**
+ * g_volume_mount_finish:
+ * @volume: a #GVolume
+ * @result: a #GAsyncResult
+ * @error: a #GError location to store an error, or %NULL to ignore
+ * 
+ * Finishes mounting a volume. If any errors occured during the operation,
+ * @error will be set to contain the errors and %FALSE will be returned.
+ *
+ * If the mount operation succeeded, g_volume_get_mount() on @volume
+ * is guaranteed to return the mount right after calling this
+ * function; there's no need to listen for the 'mount-added' signal on
+ * #GVolumeMonitor.
+ * 
+ * Returns: %TRUE, %FALSE if operation failed.
+ **/
+gboolean
+g_volume_mount_finish (GVolume       *volume,
+                       GAsyncResult  *result,
+                       GError       **error)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_VOLUME_GET_IFACE (volume);
+  return (* iface->mount_finish) (volume, result, error);
+}
+
+/**
+ * g_volume_eject:
+ * @volume: a #GVolume.
+ * @flags: flags affecting the unmount if required for eject
+ * @cancellable: optional #GCancellable object, %NULL to ignore.
+ * @callback: a #GAsyncReadyCallback, or %NULL.
+ * @user_data: user data that gets passed to @callback
+ * 
+ * Ejects a volume. This is an asynchronous operation, and is
+ * finished by calling g_volume_eject_finish() with the @volume
+ * and #GAsyncResult returned in the @callback.
+ **/
+void
+g_volume_eject (GVolume             *volume,
+		GMountUnmountFlags   flags,
+                GCancellable        *cancellable,
+                GAsyncReadyCallback  callback,
+                gpointer             user_data)
+{
+  GVolumeIface *iface;
+
+  g_return_if_fail (G_IS_VOLUME (volume));
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->eject == NULL)
+    {
+      g_simple_async_report_error_in_idle (G_OBJECT (volume), callback, user_data,
+					   G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+					   _("volume doesn't implement eject"));
+      
+      return;
+    }
+  
+  (* iface->eject) (volume, flags, cancellable, callback, user_data);
+}
+
+/**
+ * g_volume_eject_finish:
+ * @volume: pointer to a #GVolume.
+ * @result: a #GAsyncResult.
+ * @error: a #GError location to store an error, or %NULL to ignore
+ * 
+ * Finishes ejecting a volume. If any errors occured during the operation,
+ * @error will be set to contain the errors and %FALSE will be returned.
+ * 
+ * Returns: %TRUE, %FALSE if operation failed.
+ **/
+gboolean
+g_volume_eject_finish (GVolume       *volume,
+                       GAsyncResult  *result,
+                       GError       **error)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), FALSE);
+  g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+  if (G_IS_SIMPLE_ASYNC_RESULT (result))
+    {
+      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+      if (g_simple_async_result_propagate_error (simple, error))
+	return FALSE;
+    }
+  
+  iface = G_VOLUME_GET_IFACE (volume);
+  return (* iface->eject_finish) (volume, result, error);
+}
+
+/**
+ * g_volume_get_identifier:
+ * @volume: a #GVolume
+ * @kind: the kind of identifier to return
+ *
+ * Gets the identifier of the given kind for @volume. 
+ * See the <link linkend="volume-identifier">introduction</link>
+ * for more information about volume identifiers.
+ *
+ * Returns: a newly allocated string containing the
+ *   requested identfier, or %NULL if the #GVolume
+ *   doesn't have this kind of identifier
+ */
+char *
+g_volume_get_identifier (GVolume    *volume,
+			 const char *kind)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+  g_return_val_if_fail (kind != NULL, NULL);
+
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->get_identifier == NULL)
+    return NULL;
+  
+  return (* iface->get_identifier) (volume, kind);
+}
+
+/**
+ * g_volume_enumerate_identifiers:
+ * @volume: a #GVolume
+ * 
+ * Gets the kinds of <link linkend="volume-identifier">identifiers</link>
+ * that @volume has. Use g_volume_get_identifer() to obtain 
+ * the identifiers themselves.
+ *
+ * Returns: a %NULL-terminated array of strings containing
+ *   kinds of identifiers. Use g_strfreev() to free.
+ */
+char **
+g_volume_enumerate_identifiers (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->enumerate_identifiers == NULL)
+    return NULL;
+  
+  return (* iface->enumerate_identifiers) (volume);
+}
+
+/**
+ * g_volume_get_activation_root:
+ * @volume: a #GVolume
+ *
+ * Gets the activation root for a #GVolume if it is known ahead of
+ * mount time. Returns %NULL otherwise. If not %NULL and if @volume
+ * is mounted, then the result of g_mount_get_root() on the
+ * #GMount object obtained from g_volume_get_mount() will always
+ * either be equal or a prefix of what this function returns. In
+ * other words, in code
+ *
+ * <programlisting>
+ *   GMount *mount;
+ *   GFile *mount_root
+ *   GFile *volume_activation_root;
+ *
+ *   mount = g_volume_get_mount (volume); /&ast; mounted, so never NULL &ast;/
+ *   mount_root = g_mount_get_root (mount);
+ *   volume_activation_root = g_volume_get_activation_root(volume); /&ast; assume not NULL &ast;/
+ * </programlisting>
+ *
+ * then the expression
+ *
+ * <programlisting>
+ *   (g_file_has_prefix (volume_activation_root, mount_root) ||
+      g_file_equal (volume_activation_root, mount_root))
+ * </programlisting>
+ *
+ * will always be %TRUE.
+ *
+ * Activation roots are typically used in #GVolumeMonitor
+ * implementations to find the underlying mount to shadow, see
+ * g_mount_is_shadowed() for more details.
+ *
+ * Returns: the activation root of @volume or %NULL. Use
+ * g_object_unref() to free.
+ *
+ * Since: 2.18
+ **/
+GFile *
+g_volume_get_activation_root (GVolume *volume)
+{
+  GVolumeIface *iface;
+
+  g_return_val_if_fail (G_IS_VOLUME (volume), NULL);
+  iface = G_VOLUME_GET_IFACE (volume);
+
+  if (iface->get_activation_root == NULL)
+    return NULL;
+
+  return (* iface->get_activation_root) (volume);
+}
+
+
+
+#define __G_VOLUME_C__
+#include "gioaliasdef.c"
diff --git a/gio/gvolume.h b/gio/gvolume.h
new file mode 100644
index 0000000..f81faad
--- /dev/null
+++ b/gio/gvolume.h
@@ -0,0 +1,188 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_VOLUME_H__
+#define __G_VOLUME_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+/**
+ * G_VOLUME_IDENTIFIER_KIND_HAL_UDI:
+ *
+ * The string used to obtain a Hal UDI with g_volume_get_identifier().
+ */
+#define G_VOLUME_IDENTIFIER_KIND_HAL_UDI "hal-udi"
+
+/**
+ * G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE:
+ *
+ * The string used to obtain a Unix device path with g_volume_get_identifier().
+ */
+#define G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE "unix-device"
+
+/**
+ * G_VOLUME_IDENTIFIER_KIND_LABEL:
+ *
+ * The string used to obtain a filesystem label with g_volume_get_identifier().
+ */
+#define G_VOLUME_IDENTIFIER_KIND_LABEL "label"
+
+/**
+ * G_VOLUME_IDENTIFIER_KIND_UUID:
+ *
+ * The string used to obtain a UUID with g_volume_get_identifier().
+ */
+#define G_VOLUME_IDENTIFIER_KIND_UUID "uuid"
+
+/**
+ * G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT:
+ *
+ * The string used to obtain a NFS mount with g_volume_get_identifier().
+ */
+#define G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT "nfs-mount"
+
+
+#define G_TYPE_VOLUME            (g_volume_get_type ())
+#define G_VOLUME(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_VOLUME, GVolume))
+#define G_IS_VOLUME(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_VOLUME))
+#define G_VOLUME_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_VOLUME, GVolumeIface))
+
+/**
+ * GVolumeIface:
+ * @g_iface: The parent interface.
+ * @changed: Changed signal that is emitted when the volume's state has changed.
+ * @removed: The removed signal that is emitted when the #GVolume have been removed. If the recipient is holding references to the object they should release them so the object can be finalized.
+ * @get_name: Gets a string containing the name of the #GVolume.
+ * @get_icon: Gets a #GIcon for the #GVolume.
+ * @get_uuid: Gets the UUID for the #GVolume. The reference is typically based on the file system UUID for the mount in question and should be considered an opaque string. Returns %NULL if there is no UUID available.
+ * @get_drive: Gets a #GDrive the volume is located on. Returns %NULL if the #GVolume is not associated with a #GDrive.
+ * @get_mount: Gets a #GMount representing the mounted volume. Returns %NULL if the #GVolume is not mounted.
+ * @can_mount: Returns %TRUE if the #GVolume can be mounted.
+ * @can_eject: Checks if a #GVolume can be ejected.
+ * @mount_fn: Mounts a given #GVolume. 
+ *     #GVolume implementations must emit the #GMountOperation::aborted 
+ *     signal before completing a mount operation that is aborted while 
+ *     awaiting input from the user through a #GMountOperation instance.
+ * @mount_finish: Finishes a mount operation.
+ * @eject: Ejects a given #GVolume.
+ * @eject_finish: Finishes an eject operation.
+ * @get_identifier: Returns the <link linkend="volume-identifier">identifier</link> of the given kind, or %NULL if
+ *    the #GVolume doesn't have one.
+ * @enumerate_identifiers: Returns an array strings listing the kinds
+ *    of <link linkend="volume-identifier">identifiers</link> which the #GVolume has.
+ * @should_automount: Returns %TRUE if the #GVolume should be automatically mounted.
+ * @get_activation_root: Returns the activation root for the #GVolume if it is known in advance or %NULL if
+ *   it is not known.
+ *
+ * Interface for implementing operations for mountable volumes.
+ **/
+typedef struct _GVolumeIface    GVolumeIface;
+
+struct _GVolumeIface
+{
+  GTypeInterface g_iface;
+
+  /* signals */
+
+  void        (* changed)               (GVolume             *volume);
+  void        (* removed)               (GVolume             *volume);
+
+  /* Virtual Table */
+
+  char      * (* get_name)              (GVolume             *volume);
+  GIcon     * (* get_icon)              (GVolume             *volume);
+  char      * (* get_uuid)              (GVolume             *volume);
+  GDrive    * (* get_drive)             (GVolume             *volume);
+  GMount    * (* get_mount)             (GVolume             *volume);
+  gboolean    (* can_mount)             (GVolume             *volume);
+  gboolean    (* can_eject)             (GVolume             *volume);
+  void        (* mount_fn)              (GVolume             *volume,
+                                         GMountMountFlags     flags,
+                                         GMountOperation     *mount_operation,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data);
+  gboolean    (* mount_finish)          (GVolume             *volume,
+                                         GAsyncResult        *result,
+                                         GError             **error);
+  void        (* eject)                 (GVolume             *volume,
+                                         GMountUnmountFlags   flags,
+                                         GCancellable        *cancellable,
+                                         GAsyncReadyCallback  callback,
+                                         gpointer             user_data);
+  gboolean    (* eject_finish)          (GVolume             *volume,
+                                         GAsyncResult        *result,
+                                         GError             **error);
+
+  char      * (* get_identifier)        (GVolume             *volume,
+                                         const char          *kind);
+  char     ** (* enumerate_identifiers) (GVolume             *volume);
+
+  gboolean    (* should_automount)      (GVolume             *volume);
+
+  GFile     * (* get_activation_root)   (GVolume             *volume);
+
+};
+
+GType    g_volume_get_type              (void) G_GNUC_CONST;
+
+char *   g_volume_get_name              (GVolume              *volume);
+GIcon *  g_volume_get_icon              (GVolume              *volume);
+char *   g_volume_get_uuid              (GVolume              *volume);
+GDrive * g_volume_get_drive             (GVolume              *volume);
+GMount * g_volume_get_mount             (GVolume              *volume);
+gboolean g_volume_can_mount             (GVolume              *volume);
+gboolean g_volume_can_eject             (GVolume              *volume);
+gboolean g_volume_should_automount      (GVolume              *volume);
+void     g_volume_mount                 (GVolume              *volume,
+					 GMountMountFlags      flags,
+					 GMountOperation      *mount_operation,
+					 GCancellable         *cancellable,
+					 GAsyncReadyCallback   callback,
+					 gpointer              user_data);
+gboolean g_volume_mount_finish          (GVolume              *volume,
+					 GAsyncResult         *result,
+					 GError              **error);
+void     g_volume_eject                 (GVolume              *volume,
+					 GMountUnmountFlags    flags,
+					 GCancellable         *cancellable,
+					 GAsyncReadyCallback   callback,
+					 gpointer              user_data);
+gboolean g_volume_eject_finish          (GVolume              *volume,
+					 GAsyncResult         *result,
+					 GError              **error);
+char *   g_volume_get_identifier        (GVolume              *volume,
+					 const char           *kind);
+char **  g_volume_enumerate_identifiers (GVolume              *volume);
+
+GFile *  g_volume_get_activation_root   (GVolume              *volume);
+
+G_END_DECLS
+
+#endif /* __G_VOLUME_H__ */
diff --git a/gio/gvolumemonitor.c b/gio/gvolumemonitor.c
new file mode 100644
index 0000000..3265fe4
--- /dev/null
+++ b/gio/gvolumemonitor.c
@@ -0,0 +1,377 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#include "config.h"
+#include "gvolumemonitor.h"
+#include "gvolume.h"
+#include "gmount.h"
+#include "gdrive.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+/**
+ * SECTION:gvolumemonitor
+ * @short_description: Volume Monitor
+ * @include: gio/gio.h
+ * @see_also: #GFileMonitor
+ * 
+ * #GVolumeMonitor is for listing the user interesting devices and volumes
+ * on the computer. In other words, what a file selector or file manager
+ * would show in a sidebar. 
+**/
+
+G_DEFINE_TYPE (GVolumeMonitor, g_volume_monitor, G_TYPE_OBJECT);
+
+enum {
+  VOLUME_ADDED,
+  VOLUME_REMOVED,
+  VOLUME_CHANGED,
+  MOUNT_ADDED,
+  MOUNT_REMOVED,
+  MOUNT_PRE_UNMOUNT,
+  MOUNT_CHANGED,
+  DRIVE_CONNECTED,
+  DRIVE_DISCONNECTED,
+  DRIVE_CHANGED,
+  DRIVE_EJECT_BUTTON,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+
+static void
+g_volume_monitor_finalize (GObject *object)
+{
+  GVolumeMonitor *monitor;
+
+  monitor = G_VOLUME_MONITOR (object);
+
+  G_OBJECT_CLASS (g_volume_monitor_parent_class)->finalize (object);
+}
+
+static void
+g_volume_monitor_class_init (GVolumeMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_volume_monitor_finalize;
+
+  /**
+   * GVolumeMonitor::volume-added:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @volume: a #GVolume that was added.
+   * 
+   * Emitted when a mountable volume is added to the system.
+   **/
+  signals[VOLUME_ADDED] = g_signal_new (I_("volume-added"),
+                                        G_TYPE_VOLUME_MONITOR,
+                                        G_SIGNAL_RUN_LAST,
+                                        G_STRUCT_OFFSET (GVolumeMonitorClass, volume_added),
+                                        NULL, NULL,
+                                        g_cclosure_marshal_VOID__OBJECT,
+                                        G_TYPE_NONE, 1, G_TYPE_VOLUME);
+  
+  /**
+   * GVolumeMonitor::volume-removed:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @volume: a #GVolume that was removed.
+   * 
+   * Emitted when a mountable volume is removed from the system.
+   **/  
+  signals[VOLUME_REMOVED] = g_signal_new (I_("volume-removed"),
+                                          G_TYPE_VOLUME_MONITOR,
+                                          G_SIGNAL_RUN_LAST,
+                                          G_STRUCT_OFFSET (GVolumeMonitorClass, volume_removed),
+                                          NULL, NULL,
+                                          g_cclosure_marshal_VOID__OBJECT,
+                                          G_TYPE_NONE, 1, G_TYPE_VOLUME);
+  
+  /**
+   * GVolumeMonitor::volume-changed:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @volume: a #GVolume that changed.
+   * 
+   * Emitted when mountable volume is changed.
+   **/  
+  signals[VOLUME_CHANGED] = g_signal_new (I_("volume-changed"),
+                                          G_TYPE_VOLUME_MONITOR,
+                                          G_SIGNAL_RUN_LAST,
+                                          G_STRUCT_OFFSET (GVolumeMonitorClass, volume_changed),
+                                          NULL, NULL,
+                                          g_cclosure_marshal_VOID__OBJECT,
+                                          G_TYPE_NONE, 1, G_TYPE_VOLUME);
+
+  /**
+   * GVolumeMonitor::mount-added:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @mount: a #GMount that was added.
+   * 
+   * Emitted when a mount is added.
+   **/
+  signals[MOUNT_ADDED] = g_signal_new (I_("mount-added"),
+                                       G_TYPE_VOLUME_MONITOR,
+                                       G_SIGNAL_RUN_LAST,
+                                       G_STRUCT_OFFSET (GVolumeMonitorClass, mount_added),
+                                       NULL, NULL,
+                                       g_cclosure_marshal_VOID__OBJECT,
+                                       G_TYPE_NONE, 1, G_TYPE_MOUNT);
+
+  /**
+   * GVolumeMonitor::mount-removed:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @mount: a #GMount that was removed.
+   * 
+   * Emitted when a mount is removed.
+   **/
+  signals[MOUNT_REMOVED] = g_signal_new (I_("mount-removed"),
+                                         G_TYPE_VOLUME_MONITOR,
+                                         G_SIGNAL_RUN_LAST,
+                                         G_STRUCT_OFFSET (GVolumeMonitorClass, mount_removed),
+                                         NULL, NULL,
+                                         g_cclosure_marshal_VOID__OBJECT,
+                                         G_TYPE_NONE, 1, G_TYPE_MOUNT);
+
+  /**
+   * GVolumeMonitor::mount-pre-unmount:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @mount: a #GMount that is being unmounted.
+   *
+   * Emitted when a mount is about to be removed.
+   **/ 
+  signals[MOUNT_PRE_UNMOUNT] = g_signal_new (I_("mount-pre-unmount"),
+                                             G_TYPE_VOLUME_MONITOR,
+                                             G_SIGNAL_RUN_LAST,
+                                             G_STRUCT_OFFSET (GVolumeMonitorClass, mount_pre_unmount),
+                                             NULL, NULL,
+                                             g_cclosure_marshal_VOID__OBJECT,
+                                             G_TYPE_NONE, 1, G_TYPE_MOUNT);
+
+  /**
+   * GVolumeMonitor::mount-changed:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @mount: a #GMount that changed.
+   *
+   * Emitted when a mount changes.
+   **/ 
+  signals[MOUNT_CHANGED] = g_signal_new (I_("mount-changed"),
+                                         G_TYPE_VOLUME_MONITOR,
+                                         G_SIGNAL_RUN_LAST,
+                                         G_STRUCT_OFFSET (GVolumeMonitorClass, mount_changed),
+                                         NULL, NULL,
+                                         g_cclosure_marshal_VOID__OBJECT,
+                                         G_TYPE_NONE, 1, G_TYPE_MOUNT);
+
+  /**
+   * GVolumeMonitor::drive-connected:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @drive: a #GDrive that was connected.
+   * 
+   * Emitted when a drive is connected to the system.
+   **/
+  signals[DRIVE_CONNECTED] = g_signal_new (I_("drive-connected"),
+					   G_TYPE_VOLUME_MONITOR,
+					   G_SIGNAL_RUN_LAST,
+					   G_STRUCT_OFFSET (GVolumeMonitorClass, drive_connected),
+					   NULL, NULL,
+					   g_cclosure_marshal_VOID__OBJECT,
+					   G_TYPE_NONE, 1, G_TYPE_DRIVE);
+  
+  /**
+   * GVolumeMonitor::drive-disconnected:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @drive: a #GDrive that was disconnected.
+   * 
+   * Emitted when a drive is disconnected from the system.
+   **/  
+  signals[DRIVE_DISCONNECTED] = g_signal_new (I_("drive-disconnected"),
+					      G_TYPE_VOLUME_MONITOR,
+					      G_SIGNAL_RUN_LAST,
+					      G_STRUCT_OFFSET (GVolumeMonitorClass, drive_disconnected),
+					      NULL, NULL,
+					      g_cclosure_marshal_VOID__OBJECT,
+					      G_TYPE_NONE, 1, G_TYPE_DRIVE);
+
+  /**
+   * GVolumeMonitor::drive-changed:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @drive: the drive that changed
+   *
+   * Emitted when a drive changes.
+   **/ 
+  signals[DRIVE_CHANGED] = g_signal_new (I_("drive-changed"),
+                                         G_TYPE_VOLUME_MONITOR,
+                                         G_SIGNAL_RUN_LAST,
+                                         G_STRUCT_OFFSET (GVolumeMonitorClass, drive_changed),
+                                         NULL, NULL,
+                                         g_cclosure_marshal_VOID__OBJECT,
+                                         G_TYPE_NONE, 1, G_TYPE_DRIVE);
+
+  /**
+   * GVolumeMonitor::drive-eject-button:
+   * @volume_monitor: The volume monitor emitting the signal.
+   * @drive: the drive where the eject button was pressed
+   *
+   * Emitted when the eject button is pressed on @drive.
+   *
+   * Since: 2.18
+   **/
+  signals[DRIVE_EJECT_BUTTON] = g_signal_new (I_("drive-eject-button"),
+                                              G_TYPE_VOLUME_MONITOR,
+                                              G_SIGNAL_RUN_LAST,
+                                              G_STRUCT_OFFSET (GVolumeMonitorClass, drive_eject_button),
+                                              NULL, NULL,
+                                              g_cclosure_marshal_VOID__OBJECT,
+                                              G_TYPE_NONE, 1, G_TYPE_DRIVE);
+
+}
+
+static void
+g_volume_monitor_init (GVolumeMonitor *monitor)
+{
+}
+
+
+/**
+ * g_volume_monitor_get_connected_drives:
+ * @volume_monitor: a #GVolumeMonitor.
+ * 
+ * Gets a list of drives connected to the system.
+ * 
+ * The returned list should be freed with g_list_free(), after
+ * its elements have been unreffed with g_object_unref().
+ *
+ * Returns: a #GList of connected #GDrive objects.
+ **/
+GList *
+g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor)
+{
+  GVolumeMonitorClass *class;
+
+  g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
+
+  class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
+
+  return class->get_connected_drives (volume_monitor);
+}
+
+/**
+ * g_volume_monitor_get_volumes:
+ * @volume_monitor: a #GVolumeMonitor.
+ * 
+ * Gets a list of the volumes on the system.
+ * 
+ * The returned list should be freed with g_list_free(), after
+ * its elements have been unreffed with g_object_unref().
+ *
+ * Returns: a #GList of #GVolume objects.
+ **/
+GList *
+g_volume_monitor_get_volumes (GVolumeMonitor *volume_monitor)
+{
+  GVolumeMonitorClass *class;
+
+  g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
+
+  class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
+
+  return class->get_volumes (volume_monitor);
+}
+
+/**
+ * g_volume_monitor_get_mounts:
+ * @volume_monitor: a #GVolumeMonitor.
+ * 
+ * Gets a list of the mounts on the system.
+ *
+ * The returned list should be freed with g_list_free(), after
+ * its elements have been unreffed with g_object_unref().
+ * 
+ * Returns: a #GList of #GMount objects.
+ **/
+GList *
+g_volume_monitor_get_mounts (GVolumeMonitor *volume_monitor)
+{
+  GVolumeMonitorClass *class;
+
+  g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
+
+  class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
+
+  return class->get_mounts (volume_monitor);
+}
+
+/**
+ * g_volume_monitor_get_volume_for_uuid:
+ * @volume_monitor: a #GVolumeMonitor.
+ * @uuid: the UUID to look for
+ * 
+ * Finds a #GVolume object by its UUID (see g_volume_get_uuid())
+ * 
+ * Returns: a #GVolume or %NULL if no such volume is available.
+ *     Free the returned object with g_object_unref().
+ **/
+GVolume *
+g_volume_monitor_get_volume_for_uuid (GVolumeMonitor *volume_monitor, 
+                                      const char     *uuid)
+{
+  GVolumeMonitorClass *class;
+
+  g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
+  g_return_val_if_fail (uuid != NULL, NULL);
+
+  class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
+
+  return class->get_volume_for_uuid (volume_monitor, uuid);
+}
+
+/**
+ * g_volume_monitor_get_mount_for_uuid:
+ * @volume_monitor: a #GVolumeMonitor.
+ * @uuid: the UUID to look for
+ * 
+ * Finds a #GMount object by its UUID (see g_mount_get_uuid())
+ * 
+ * Returns: a #GMount or %NULL if no such mount is available.
+ *     Free the returned object with g_object_unref().
+ **/
+GMount *
+g_volume_monitor_get_mount_for_uuid (GVolumeMonitor *volume_monitor, 
+                                     const char     *uuid)
+{
+  GVolumeMonitorClass *class;
+
+  g_return_val_if_fail (G_IS_VOLUME_MONITOR (volume_monitor), NULL);
+  g_return_val_if_fail (uuid != NULL, NULL);
+
+  class = G_VOLUME_MONITOR_GET_CLASS (volume_monitor);
+
+  return class->get_mount_for_uuid (volume_monitor, uuid);
+}
+
+
+#define __G_VOLUME_MONITOR_C__
+#include "gioaliasdef.c"
diff --git a/gio/gvolumemonitor.h b/gio/gvolumemonitor.h
new file mode 100644
index 0000000..4d286f1
--- /dev/null
+++ b/gio/gvolumemonitor.h
@@ -0,0 +1,148 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ */
+
+#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
+#error "Only <gio/gio.h> can be included directly."
+#endif
+
+#ifndef __G_VOLUME_MONITOR_H__
+#define __G_VOLUME_MONITOR_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_VOLUME_MONITOR         (g_volume_monitor_get_type ())
+#define G_VOLUME_MONITOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_VOLUME_MONITOR, GVolumeMonitor))
+#define G_VOLUME_MONITOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_VOLUME_MONITOR, GVolumeMonitorClass))
+#define G_VOLUME_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_VOLUME_MONITOR, GVolumeMonitorClass))
+#define G_IS_VOLUME_MONITOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_VOLUME_MONITOR))
+#define G_IS_VOLUME_MONITOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_VOLUME_MONITOR))
+
+/**
+ * G_VOLUME_MONITOR_EXTENSION_POINT_NAME:
+ *
+ * Extension point for volume monitor functionality.
+ * See <link linkend="extending-gio">Extending GIO</link>.
+ */
+#define G_VOLUME_MONITOR_EXTENSION_POINT_NAME "gio-volume-monitor"
+
+/**
+ * GVolumeMonitor:
+ * @parent_instance: The parent instance.
+ *
+ * A Volume Monitor that watches for volume events.
+ **/
+typedef struct _GVolumeMonitorClass GVolumeMonitorClass;
+
+struct _GVolumeMonitor
+{
+  GObject parent_instance;
+
+  /*< private >*/
+  gpointer priv;
+};
+
+struct _GVolumeMonitorClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+  /* signals */
+  void      (* volume_added)         (GVolumeMonitor *volume_monitor,
+                                      GVolume        *volume);
+  void      (* volume_removed)       (GVolumeMonitor *volume_monitor,
+                                      GVolume        *volume);
+  void      (* volume_changed)       (GVolumeMonitor *volume_monitor,
+                                      GVolume        *volume);
+
+  void      (* mount_added)          (GVolumeMonitor *volume_monitor,
+                                      GMount         *mount);
+  void      (* mount_removed)        (GVolumeMonitor *volume_monitor,
+                                      GMount         *mount);
+  void      (* mount_pre_unmount)    (GVolumeMonitor *volume_monitor,
+                                      GMount         *mount);
+  void      (* mount_changed)        (GVolumeMonitor *volume_monitor,
+                                      GMount         *mount);
+
+  void      (* drive_connected)      (GVolumeMonitor *volume_monitor,
+                                      GDrive	     *drive);
+  void      (* drive_disconnected)   (GVolumeMonitor *volume_monitor,
+                                      GDrive         *drive);
+  void      (* drive_changed)        (GVolumeMonitor *volume_monitor,
+                                      GDrive         *drive);
+
+  /* Vtable */
+
+  gboolean  (* is_supported)         (void);
+
+  GList   * (* get_connected_drives) (GVolumeMonitor *volume_monitor);
+  GList   * (* get_volumes)          (GVolumeMonitor *volume_monitor);
+  GList   * (* get_mounts)           (GVolumeMonitor *volume_monitor);
+
+  GVolume * (* get_volume_for_uuid)  (GVolumeMonitor *volume_monitor,
+                                      const char     *uuid);
+
+  GMount  * (* get_mount_for_uuid)   (GVolumeMonitor *volume_monitor,
+                                      const char     *uuid);
+
+
+  /* These arguments are unfortunately backwards by mistake (bug #520169). Deprecated in 2.20. */
+  GVolume * (* adopt_orphan_mount)   (GMount         *mount,
+                                      GVolumeMonitor *volume_monitor);
+
+  /* signal added in 2.17 */
+  void      (* drive_eject_button)   (GVolumeMonitor *volume_monitor,
+                                      GDrive         *drive);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*_g_reserved1) (void);
+  void (*_g_reserved2) (void);
+  void (*_g_reserved3) (void);
+  void (*_g_reserved4) (void);
+  void (*_g_reserved5) (void);
+  void (*_g_reserved6) (void);
+  void (*_g_reserved7) (void);
+};
+
+GType           g_volume_monitor_get_type             (void) G_GNUC_CONST;
+
+GVolumeMonitor *g_volume_monitor_get                  (void);
+GList *         g_volume_monitor_get_connected_drives (GVolumeMonitor *volume_monitor);
+GList *         g_volume_monitor_get_volumes          (GVolumeMonitor *volume_monitor);
+GList *         g_volume_monitor_get_mounts           (GVolumeMonitor *volume_monitor);
+GVolume *       g_volume_monitor_get_volume_for_uuid  (GVolumeMonitor *volume_monitor,
+                                                       const char     *uuid);
+GMount *        g_volume_monitor_get_mount_for_uuid   (GVolumeMonitor *volume_monitor,
+                                                       const char     *uuid);
+
+#ifndef G_DISABLE_DEPRECATED
+GVolume *       g_volume_monitor_adopt_orphan_mount   (GMount         *mount);
+#endif
+
+G_END_DECLS
+
+#endif /* __G_VOLUME_MONITOR_H__ */
diff --git a/gio/gwin32appinfo.c b/gio/gwin32appinfo.c
new file mode 100644
index 0000000..3e669c6
--- /dev/null
+++ b/gio/gwin32appinfo.c
@@ -0,0 +1,669 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gcontenttypeprivate.h"
+#include "gwin32appinfo.h"
+#include "gappinfo.h"
+#include "gioerror.h"
+#include "gfile.h"
+#include <glib/gstdio.h>
+#include "glibintl.h"
+
+#include <windows.h>
+#include <shlwapi.h>
+
+#include "gioalias.h"
+
+#ifndef ASSOCF_INIT_BYEXENAME
+#define ASSOCF_INIT_BYEXENAME 0x00000002
+#endif
+
+/* These were wrong in MingW */
+#define REAL_ASSOCSTR_COMMAND 1
+#define REAL_ASSOCSTR_EXECUTABLE 2
+#define REAL_ASSOCSTR_FRIENDLYDOCNAME 3
+#define REAL_ASSOCSTR_FRIENDLYAPPNAME 4
+
+#ifndef AssocQueryString
+#pragma message("AssocQueryString not available with SDK used")
+#endif
+
+static void g_win32_app_info_iface_init (GAppInfoIface *iface);
+
+struct _GWin32AppInfo
+{
+  GObject parent_instance;
+  wchar_t *id;
+  char *id_utf8;
+  gboolean id_is_exename;
+  char *executable;
+  char *name;
+  gboolean no_open_with;
+};
+
+G_DEFINE_TYPE_WITH_CODE (GWin32AppInfo, g_win32_app_info, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_APP_INFO,
+						g_win32_app_info_iface_init))
+
+
+static void
+g_win32_app_info_finalize (GObject *object)
+{
+  GWin32AppInfo *info;
+
+  info = G_WIN32_APP_INFO (object);
+
+  g_free (info->id);
+  g_free (info->id_utf8);
+  g_free (info->name);
+  g_free (info->executable);
+
+  G_OBJECT_CLASS (g_win32_app_info_parent_class)->finalize (object);
+}
+
+static void
+g_win32_app_info_class_init (GWin32AppInfoClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  
+  gobject_class->finalize = g_win32_app_info_finalize;
+}
+
+static void
+g_win32_app_info_init (GWin32AppInfo *local)
+{
+}
+
+static GAppInfo *
+g_desktop_app_info_new_from_id (wchar_t *id /* takes ownership */,
+				gboolean id_is_exename)
+{
+#ifdef AssocQueryString
+  ASSOCF flags;
+#endif
+  wchar_t buffer[1024];
+  DWORD buffer_size;
+  GWin32AppInfo *info;
+  HKEY app_key;
+  
+  info = g_object_new (G_TYPE_WIN32_APP_INFO, NULL);
+  info->id = id; /* Takes ownership */
+  info->id_utf8 = g_utf16_to_utf8 (id, -1, NULL, NULL, NULL);  
+  info->id_is_exename = id_is_exename;
+
+#ifdef AssocQueryString  
+  flags = 0;
+  if (id_is_exename)
+    flags |= ASSOCF_INIT_BYEXENAME;
+
+  buffer_size = 1024;
+  if (AssocQueryStringW(flags,
+			REAL_ASSOCSTR_EXECUTABLE,
+			id,
+			NULL,
+			buffer,
+			&buffer_size) == S_OK)
+    info->executable = g_utf16_to_utf8 (buffer, -1, NULL, NULL, NULL);
+ 
+  buffer_size = 1024;
+  if (AssocQueryStringW(flags,
+			REAL_ASSOCSTR_FRIENDLYAPPNAME,
+			id,
+			NULL,
+			buffer,
+			&buffer_size) == S_OK)
+    info->name = g_utf16_to_utf8 (buffer, -1, NULL, NULL, NULL);
+#endif
+
+  if (info->name == NULL)
+    {
+      /* TODO: Should look up name from executable resources */
+      if (info->executable)
+	info->name = g_path_get_basename (info->executable);
+      else
+	info->name = g_strdup (info->id_utf8);
+    }
+
+#ifdef AssocQueryString
+  if (AssocQueryKeyW(flags,
+		     ASSOCKEY_APP,
+		     info->id,
+		     NULL,
+		     &app_key) == S_OK)
+    {
+      if (RegQueryValueExW (app_key, L"NoOpenWith", 0,
+			    NULL, NULL, NULL) == ERROR_SUCCESS)
+	info->no_open_with = TRUE;
+      RegCloseKey (app_key);
+    }
+#endif
+  
+  return G_APP_INFO (info);
+}
+
+static wchar_t *
+dup_wstring (wchar_t *str)
+{
+  gsize len;
+  for (len = 0; str[len] != 0; len++)
+    ;
+  return (wchar_t *)g_memdup (str, (len + 1) * 2);
+}
+
+static GAppInfo *
+g_win32_app_info_dup (GAppInfo *appinfo)
+{
+  GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo);
+  GWin32AppInfo *new_info;
+  
+  new_info = g_object_new (G_TYPE_WIN32_APP_INFO, NULL);
+
+  new_info->id = dup_wstring (info->id);
+  new_info->id_utf8 = g_strdup (info->id_utf8);
+  new_info->id_is_exename = info->id_is_exename;
+  new_info->name = g_strdup (info->name);
+  new_info->executable = g_strdup (info->executable);
+  new_info->no_open_with = info->no_open_with;
+  
+  return G_APP_INFO (new_info);
+}
+
+static gboolean
+g_win32_app_info_equal (GAppInfo *appinfo1,
+                        GAppInfo *appinfo2)
+{
+  GWin32AppInfo *info1 = G_WIN32_APP_INFO (appinfo1);
+  GWin32AppInfo *info2 = G_WIN32_APP_INFO (appinfo2);
+
+  if (info1->executable == NULL ||
+      info2->executable == NULL)
+    return FALSE;
+  
+  return strcmp (info1->executable, info2->executable) == 0;
+}
+
+static const char *
+g_win32_app_info_get_id (GAppInfo *appinfo)
+{
+  GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo);
+
+  return info->id_utf8;
+}
+
+static const char *
+g_win32_app_info_get_name (GAppInfo *appinfo)
+{
+  GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo);
+
+  if (info->name == NULL)
+    return _("Unnamed");
+  
+  return info->name;
+}
+
+static const char *
+g_win32_app_info_get_description (GAppInfo *appinfo)
+{
+  /* Win32 has no app descriptions */
+  return NULL;
+}
+
+static const char *
+g_win32_app_info_get_executable (GAppInfo *appinfo)
+{
+  GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo);
+  
+  return info->executable;
+}
+
+static GIcon *
+g_win32_app_info_get_icon (GAppInfo *appinfo)
+{
+  /* GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo); */
+
+  /* TODO: How to handle icons */
+  return NULL;
+}
+
+static gboolean
+g_win32_app_info_launch (GAppInfo           *appinfo,
+			 GList              *files,
+			 GAppLaunchContext  *launch_context,
+			 GError            **error)
+{
+  GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo);
+#ifdef AssocQueryString
+  ASSOCF flags;
+#endif
+  HKEY class_key;
+  SHELLEXECUTEINFOW exec_info = {0};
+  GList *l;
+
+  /* TODO:  What might startup_id mean on win32? */
+#ifdef AssocQueryString  
+  flags = 0;
+  if (info->id_is_exename)
+    flags |= ASSOCF_INIT_BYEXENAME;
+
+  if (AssocQueryKeyW (flags,
+		      ASSOCKEY_SHELLEXECCLASS,
+		      info->id,
+		      NULL,
+		      &class_key) != S_OK)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Can't find application"));
+      return FALSE;
+    }
+#endif
+
+  for (l = files; l != NULL; l = l->next)
+    {
+      char *path = g_file_get_path (l->data);
+      wchar_t *wfilename = g_utf8_to_utf16 (path, -1, NULL, NULL, NULL);
+
+      g_free (path);
+      
+      memset (&exec_info, 0, sizeof (exec_info));
+      exec_info.cbSize = sizeof (exec_info);
+      exec_info.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_CLASSKEY;
+      exec_info.lpFile = wfilename;     
+      exec_info.nShow = SW_SHOWNORMAL;
+      exec_info.hkeyClass = class_key;
+      
+      if (!ShellExecuteExW (&exec_info))
+	{
+	  char *message_utf8 = g_win32_error_message (GetLastError ());
+
+	  g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Error launching application: %s"), message_utf8);
+	  g_free (message_utf8);
+	  
+	  g_free (wfilename);
+	  RegCloseKey (class_key);
+	  return FALSE;
+	}
+      
+      g_free (wfilename);
+    }
+  
+  RegCloseKey (class_key);
+  
+  return TRUE;
+}
+
+static gboolean
+g_win32_app_info_supports_uris (GAppInfo *appinfo)
+{
+  return FALSE;
+}
+
+static gboolean
+g_win32_app_info_supports_files (GAppInfo *appinfo)
+{
+  return TRUE;
+}
+
+static gboolean
+g_win32_app_info_launch_uris (GAppInfo           *appinfo,
+			      GList              *uris,
+			      GAppLaunchContext  *launch_context,
+			      GError            **error)
+{
+  g_set_error_literal (error, G_IO_ERROR, 
+                       G_IO_ERROR_NOT_SUPPORTED, 
+                       _("URIs not supported"));
+  return FALSE;
+}
+
+static gboolean
+g_win32_app_info_should_show (GAppInfo *appinfo)
+{
+  GWin32AppInfo *info = G_WIN32_APP_INFO (appinfo);
+
+  if (info->no_open_with)
+    return FALSE;
+  
+  return TRUE;
+}
+
+static gboolean
+g_win32_app_info_set_as_default_for_type (GAppInfo    *appinfo,
+                                          const char  *content_type,
+                                          GError     **error)
+{
+  g_set_error_literal (error, G_IO_ERROR, 
+                       G_IO_ERROR_NOT_SUPPORTED, 
+                       _("association changes not supported on win32"));
+  return FALSE;
+}
+
+GAppInfo *
+g_app_info_create_from_commandline (const char           *commandline,
+				    const char           *application_name,
+				    GAppInfoCreateFlags   flags,
+				    GError              **error)
+{
+  g_set_error_literal (error, G_IO_ERROR, 
+                       G_IO_ERROR_NOT_SUPPORTED, 
+                       _("Association creation not supported on win32"));
+  return NULL;
+}
+
+
+static void
+g_win32_app_info_iface_init (GAppInfoIface *iface)
+{
+  iface->dup = g_win32_app_info_dup;
+  iface->equal = g_win32_app_info_equal;
+  iface->get_id = g_win32_app_info_get_id;
+  iface->get_name = g_win32_app_info_get_name;
+  iface->get_description = g_win32_app_info_get_description;
+  iface->get_executable = g_win32_app_info_get_executable;
+  iface->get_icon = g_win32_app_info_get_icon;
+  iface->launch = g_win32_app_info_launch;
+  iface->supports_uris = g_win32_app_info_supports_uris;
+  iface->supports_files = g_win32_app_info_supports_files;
+  iface->launch_uris = g_win32_app_info_launch_uris;
+  iface->should_show = g_win32_app_info_should_show;
+  iface->set_as_default_for_type = g_win32_app_info_set_as_default_for_type;
+}
+
+static void
+enumerate_open_with_list (HKEY    dir_key,
+			  GList **prognames)
+{
+  DWORD index;
+  wchar_t name[256];
+  DWORD name_len, nbytes;
+  wchar_t data[256];
+  wchar_t *data_alloc;
+  DWORD type;
+
+  /* Must also look inside for a,b,c, + MRUList */
+  index = 0;
+  name_len = 256;
+  nbytes = sizeof (data) - 2;
+  while (RegEnumValueW (dir_key,
+		        index,
+		        name,
+		        &name_len,
+		        0,
+		        &type,
+		        (LPBYTE)data,
+		        &nbytes) == ERROR_SUCCESS)
+    {
+      data[nbytes/2] = '\0';
+      if (type == REG_SZ &&
+	  /* Ignore things like MRUList, just look at 'a', 'b', 'c', etc */
+	  name_len == 1)
+	{
+	  data_alloc = (wchar_t *)g_memdup (data, nbytes + 2);
+	  data_alloc[nbytes/2] = 0;
+	  *prognames = g_list_prepend (*prognames, data_alloc);
+	}
+      index++;
+      name_len = 256;
+      nbytes = sizeof (data) - 2;
+    }
+  
+  index = 0;
+  name_len = 256;
+  while (RegEnumKeyExW (dir_key,
+		        index,
+		        name,
+		        &name_len,
+		        NULL,
+		        NULL,
+		        NULL,
+		        NULL) == ERROR_SUCCESS)
+    {
+      *prognames = g_list_prepend (*prognames, g_memdup (name, (name_len + 1) * 2));
+      index++;
+      name_len = 256;
+    }
+}
+
+static void
+enumerate_open_with_progids (HKEY dir_key,
+			     GList **progids)
+{
+  DWORD index;
+  wchar_t name[256];
+  DWORD name_len, type;
+
+  index = 0;
+  name_len = 256;
+  while (RegEnumValueW (dir_key,
+		        index,
+		        name,
+		        &name_len,
+		        0,
+		        &type,
+		        NULL,
+		        0) == ERROR_SUCCESS)
+    {
+      *progids = g_list_prepend (*progids, g_memdup (name, (name_len + 1) * 2));
+      index++;
+      name_len = 256;
+    }
+}
+
+static void
+enumerate_open_with_root (HKEY    dir_key,
+			  GList **progids,
+			  GList **prognames)
+{
+  HKEY reg_key = NULL;
+  
+  if (RegOpenKeyExW (dir_key, L"OpenWithList", 0,
+		     KEY_READ, &reg_key) == ERROR_SUCCESS)
+    {
+      enumerate_open_with_list (reg_key, prognames);
+      RegCloseKey (reg_key);
+    }
+  
+  if (RegOpenKeyExW (dir_key, L"OpenWithProgids", 0,
+		     KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS)
+    {
+      enumerate_open_with_progids (reg_key, progids);
+      RegCloseKey (reg_key);
+    }
+}
+
+static gboolean
+app_info_in_list (GAppInfo *info, 
+                  GList    *list)
+{
+  while (list != NULL)
+    {
+      if (g_app_info_equal (info, list->data))
+	return TRUE;
+      list = list->next;
+    }
+  return FALSE;
+}
+
+GList *
+g_app_info_get_all_for_type (const char *content_type)
+{
+  GList *progids = NULL;
+  GList *prognames = NULL;
+  HKEY reg_key, sys_file_assoc_key, reg_key2;
+  wchar_t percieved_type[128];
+  DWORD nchars, key_type;
+  wchar_t *wc_key;
+  GList *l;
+  GList *infos;
+
+  wc_key = g_utf8_to_utf16 (content_type, -1, NULL, NULL, NULL);
+  if (RegOpenKeyExW (HKEY_CLASSES_ROOT, wc_key, 0,
+		     KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS)
+    {
+      enumerate_open_with_root (reg_key, &progids, &prognames);
+
+      nchars = sizeof (percieved_type) / sizeof(wchar_t);
+      if (RegQueryValueExW (reg_key, L"PerceivedType", 0,
+			    &key_type, (LPBYTE) percieved_type, &nchars) == ERROR_SUCCESS)
+	{
+	  if (key_type == REG_SZ &&
+	      RegOpenKeyExW (HKEY_CLASSES_ROOT, L"SystemFileAssociations", 0,
+			     KEY_QUERY_VALUE, &sys_file_assoc_key) == ERROR_SUCCESS)
+	    {
+	      if (RegOpenKeyExW (sys_file_assoc_key, percieved_type, 0,
+				 KEY_QUERY_VALUE, &reg_key2) == ERROR_SUCCESS)
+		{
+		  enumerate_open_with_root (reg_key2, &progids, &prognames);
+		  RegCloseKey (reg_key2);
+		}
+
+	      RegCloseKey (sys_file_assoc_key);
+	    }
+	}
+      RegCloseKey (reg_key);
+    }
+
+  if (RegOpenKeyExW (HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts", 0,
+		     KEY_QUERY_VALUE, &reg_key) == ERROR_SUCCESS)
+    {
+      if (RegOpenKeyExW (reg_key, wc_key, 0,
+			 KEY_QUERY_VALUE, &reg_key2) == ERROR_SUCCESS)
+	{
+	  enumerate_open_with_root (reg_key2, &progids, &prognames);
+	  RegCloseKey (reg_key2);
+	}
+      
+      RegCloseKey (reg_key);
+    }
+
+  infos = NULL;
+  for (l = prognames; l != NULL; l = l->next)
+    {
+      GAppInfo *info;
+
+      /* l->data ownership is taken */
+      info = g_desktop_app_info_new_from_id ((wchar_t *)l->data, TRUE);
+      if (app_info_in_list (info, infos))
+	g_object_unref (info);
+      else
+	infos = g_list_prepend (infos, info);
+    }
+  g_list_free (prognames);
+
+  for (l = progids; l != NULL; l = l->next)
+    {
+      GAppInfo *info;
+
+      /* l->data ownership is taken */
+      info = g_desktop_app_info_new_from_id ((wchar_t *)l->data, FALSE);
+      if (app_info_in_list (info, infos))
+	g_object_unref (info);
+      else
+	infos = g_list_prepend (infos, info);
+    }
+  g_list_free (progids);
+  
+  g_free (wc_key);
+  return g_list_reverse (infos);
+}
+
+GAppInfo *
+g_app_info_get_default_for_type (const char *content_type,
+				 gboolean    must_support_uris)
+{
+  wchar_t *wtype;
+  wchar_t buffer[1024];
+  DWORD buffer_size;
+
+  wtype = g_utf8_to_utf16 (content_type, -1, NULL, NULL, NULL);
+
+  /* Verify that we have some sort of app registered for this type */
+#ifdef AssocQueryString
+  buffer_size = 1024;
+  if (AssocQueryStringW (0,
+		  	 REAL_ASSOCSTR_COMMAND,
+			 wtype,
+			 NULL,
+			 buffer,
+			 &buffer_size) == S_OK)
+    /* Takes ownership of wtype */
+    return g_desktop_app_info_new_from_id (wtype, FALSE);
+#endif
+
+  g_free (wtype);
+  return NULL;
+}
+
+GAppInfo *
+g_app_info_get_default_for_uri_scheme (const char *uri_scheme)
+{
+  /* TODO: Implement */
+  return NULL;
+}
+
+GList *
+g_app_info_get_all (void)
+{
+  DWORD index;
+  wchar_t name[256];
+  DWORD name_len;
+  HKEY reg_key;
+  GList *infos;
+  GAppInfo *info;
+
+  if (RegOpenKeyExW (HKEY_CLASSES_ROOT, L"Applications", 0,
+		     KEY_READ, &reg_key) != ERROR_SUCCESS)
+    return NULL;
+
+  infos = NULL;
+  index = 0;
+  name_len = 256;
+  while (RegEnumKeyExW (reg_key,
+		        index,
+		        name,
+		        &name_len,
+		        NULL,
+		        NULL,
+		        NULL,
+		        NULL) == ERROR_SUCCESS)
+    {
+      wchar_t *name_dup = g_memdup (name, (name_len+1)*2);
+      /* name_dup ownership is taken */
+      info = g_desktop_app_info_new_from_id (name_dup, TRUE);
+      infos = g_list_prepend (infos, info);
+      
+      index++;
+      name_len = 256;
+    }
+  
+  RegCloseKey (reg_key);
+
+  return g_list_reverse (infos);
+}
+
+void
+g_app_info_reset_type_associations (const char *content_type)
+{
+  /* nothing to do */
+}
diff --git a/gio/gwin32appinfo.h b/gio/gwin32appinfo.h
new file mode 100644
index 0000000..c07ee30
--- /dev/null
+++ b/gio/gwin32appinfo.h
@@ -0,0 +1,50 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#ifndef __G_WIN32_APP_INFO_H__
+#define __G_WIN32_APP_INFO_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WIN32_APP_INFO         (g_win32_app_info_get_type ())
+#define G_WIN32_APP_INFO(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_APP_INFO, GWin32AppInfo))
+#define G_WIN32_APP_INFO_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WIN32_APP_INFO, GWin32AppInfoClass))
+#define G_IS_WIN32_APP_INFO(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_APP_INFO))
+#define G_IS_WIN32_APP_INFO_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WIN32_APP_INFO))
+#define G_WIN32_APP_INFO_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WIN32_APP_INFO, GWin32AppInfoClass))
+
+typedef struct _GWin32AppInfo        GWin32AppInfo;
+typedef struct _GWin32AppInfoClass   GWin32AppInfoClass;
+
+struct _GWin32AppInfoClass
+{
+  GObjectClass parent_class;
+};
+
+GType g_win32_app_info_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+
+#endif /* __G_WIN32_APP_INFO_H__ */
diff --git a/gio/gwin32mount.c b/gio/gwin32mount.c
new file mode 100644
index 0000000..98ae45e
--- /dev/null
+++ b/gio/gwin32mount.c
@@ -0,0 +1,349 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Hans Breuer
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ *         Hans Breuer <hans@breuer.org>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#define WIN32_MEAN_AND_LEAN
+#include <windows.h>
+
+#include <glib.h>
+#include "gwin32volumemonitor.h"
+#include "gwin32mount.h"
+#include "gmount.h"
+#include "gfile.h"
+#include "gmountprivate.h"
+#include "gvolumemonitor.h"
+#include "gthemedicon.h"
+#include "gsimpleasyncresult.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+struct _GWin32Mount {
+  GObject parent;
+
+  GVolumeMonitor   *volume_monitor;
+
+  GWin32Volume      *volume; /* owned by volume monitor */
+  int   drive_type;
+
+  /* why does all this stuff need to be duplicated? It is in volume already! */
+  char *name;
+  GIcon *icon;
+  char *mount_path;
+
+  gboolean can_eject;
+};
+
+static void g_win32_mount_mount_iface_init (GMountIface *iface);
+
+#define g_win32_mount_get_type _g_win32_mount_get_type
+G_DEFINE_TYPE_WITH_CODE (GWin32Mount, g_win32_mount, G_TYPE_OBJECT,
+			 G_IMPLEMENT_INTERFACE (G_TYPE_MOUNT,
+						g_win32_mount_mount_iface_init))
+
+
+static void
+g_win32_mount_finalize (GObject *object)
+{
+  GWin32Mount *mount;
+  
+  mount = G_WIN32_MOUNT (object);
+
+  if (mount->volume_monitor != NULL)
+    g_object_unref (mount->volume_monitor);
+#if 0
+  if (mount->volume)
+    _g_win32_volume_unset_mount (mount->volume, mount);
+#endif
+  /* TODO: g_warn_if_fail (volume->volume == NULL); */
+
+  if (mount->icon != NULL)
+    g_object_unref (mount->icon);
+
+  g_free (mount->name);
+  g_free (mount->mount_path);
+  
+  if (G_OBJECT_CLASS (g_win32_mount_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_win32_mount_parent_class)->finalize) (object);
+}
+
+static void
+g_win32_mount_class_init (GWin32MountClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = g_win32_mount_finalize;
+}
+
+static void
+g_win32_mount_init (GWin32Mount *win32_mount)
+{
+}
+
+gchar *
+_win32_get_displayname (const char *drive)
+{
+  gunichar2 *wdrive = g_utf8_to_utf16 (drive, -1, NULL, NULL, NULL);
+  gchar *name = NULL;
+  SHFILEINFOW sfi;
+  if (SHGetFileInfoW(wdrive, 0, &sfi, sizeof(sfi), SHGFI_DISPLAYNAME))
+    name = g_utf16_to_utf8 (sfi.szDisplayName, -1, NULL, NULL, NULL);
+
+  g_free (wdrive);
+  return name ? name : g_strdup (drive);
+}
+
+/**
+ * _g_win32_mount_new:
+ * @volume_monitor: a #GVolumeMonitor.
+ * @path: a win32 path.
+ * @volume: ususally NULL
+ * 
+ * Returns: a #GWin32Mount for the given win32 path.
+ **/
+GWin32Mount *
+_g_win32_mount_new (GVolumeMonitor  *volume_monitor,
+                    const char      *path,
+                    GWin32Volume    *volume)
+{
+  GWin32Mount *mount;
+  const gchar *drive = path; //fixme
+
+#if 0  
+  /* No volume for mount: Ignore internal things */
+  if (volume == NULL && !g_win32_mount_guess_should_display (mount_entry))
+    return NULL;
+#endif
+
+  mount = g_object_new (G_TYPE_WIN32_MOUNT, NULL);
+  mount->volume_monitor = volume_monitor != NULL ? g_object_ref (volume_monitor) : NULL;
+  mount->mount_path = g_strdup (path);
+  mount->drive_type = GetDriveType (drive);
+  mount->can_eject = FALSE; /* TODO */
+  mount->name = _win32_get_displayname (drive);
+
+  /* need to do this last */
+  mount->volume = volume;
+#if 0
+  if (volume != NULL)
+    _g_win32_volume_set_mount (volume, mount);
+#endif
+  return mount;
+}
+
+void
+_g_win32_mount_unmounted (GWin32Mount *mount)
+{
+  if (mount->volume != NULL)
+    {
+#if 0
+      _g_win32_volume_unset_mount (mount->volume, mount);
+#endif
+      mount->volume = NULL;
+      g_signal_emit_by_name (mount, "changed");
+      /* there's really no need to emit mount_changed on the volume monitor 
+       * as we're going to be deleted.. */
+    }
+}
+
+void
+_g_win32_mount_unset_volume (GWin32Mount  *mount,
+			     GWin32Volume *volume)
+{
+  if (mount->volume == volume)
+    {
+      mount->volume = NULL;
+      /* TODO: Emit changed in idle to avoid locking issues */
+      g_signal_emit_by_name (mount, "changed");
+      if (mount->volume_monitor != NULL)
+        g_signal_emit_by_name (mount->volume_monitor, "mount-changed", mount);
+    }
+}
+
+static GFile *
+g_win32_mount_get_root (GMount *mount)
+{
+  GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+
+  return g_file_new_for_path (win32_mount->mount_path);
+}
+
+const char *
+_win32_drive_type_to_icon (int type)
+{
+  switch (type)
+  {
+  case DRIVE_REMOVABLE : return "gtk-floppy";
+  case DRIVE_FIXED : return "gtk-harddisk";
+  case DRIVE_REMOTE : return "gtk-network"; 
+  case DRIVE_CDROM : return "gtk-cdrom";
+  default : return "gtk-directory";
+  }
+}
+
+static GIcon *
+g_win32_mount_get_icon (GMount *mount)
+{
+  GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+
+  g_return_val_if_fail (win32_mount->mount_path != NULL, NULL);
+
+  /* lazy creation */
+  if (!win32_mount->icon)
+    {
+      SHFILEINFOW shfi;
+      wchar_t *wfn = g_utf8_to_utf16 (win32_mount->mount_path, -1, NULL, NULL, NULL);
+
+      if (SHGetFileInfoW (wfn, 0, &shfi, sizeof (shfi), SHGFI_ICONLOCATION))
+        {
+	  gchar *name = g_utf16_to_utf8 (shfi.szDisplayName, -1, NULL, NULL, NULL);
+	  gchar *id = g_strdup_printf ("%s,%i", name, shfi.iIcon);
+	  win32_mount->icon = g_themed_icon_new (id);
+	  g_free (name);
+	  g_free (id);
+	}
+      else
+        {
+          win32_mount->icon = g_themed_icon_new_with_default_fallbacks (
+	                        _win32_drive_type_to_icon (win32_mount->drive_type));
+	}
+    }
+
+  return g_object_ref (win32_mount->icon);
+}
+
+static char *
+g_win32_mount_get_uuid (GMount *mount)
+{
+  return NULL;
+}
+
+static char *
+g_win32_mount_get_name (GMount *mount)
+{
+  GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+  
+  return g_strdup (win32_mount->name);
+}
+
+static GDrive *
+g_win32_mount_get_drive (GMount *mount)
+{
+  GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+
+  if (win32_mount->volume != NULL)
+    return g_volume_get_drive (G_VOLUME (win32_mount->volume));
+
+  return NULL;
+}
+
+static GVolume *
+g_win32_mount_get_volume (GMount *mount)
+{
+  GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+
+  if (win32_mount->volume)
+    return G_VOLUME (g_object_ref (win32_mount->volume));
+  
+  return NULL;
+}
+
+static gboolean
+g_win32_mount_can_unmount (GMount *mount)
+{
+  return FALSE;
+}
+
+static gboolean
+g_win32_mount_can_eject (GMount *mount)
+{
+  GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+  return win32_mount->can_eject;
+}
+
+
+typedef struct {
+  GWin32Mount *win32_mount;
+  GAsyncReadyCallback callback;
+  gpointer user_data;
+  GCancellable *cancellable;
+  int error_fd;
+  GIOChannel *error_channel;
+  guint error_channel_source_id;
+  GString *error_string;
+} UnmountEjectOp;
+
+static void
+g_win32_mount_unmount (GMount              *mount,
+		       GMountUnmountFlags   flags,
+		       GCancellable        *cancellable,
+		       GAsyncReadyCallback  callback,
+		       gpointer             user_data)
+{
+}
+
+static gboolean
+g_win32_mount_unmount_finish (GMount        *mount,
+			      GAsyncResult  *result,
+			      GError       **error)
+{
+  return FALSE;
+}
+
+static void
+g_win32_mount_eject (GMount              *mount,
+		     GMountUnmountFlags   flags,
+		     GCancellable        *cancellable,
+		     GAsyncReadyCallback  callback,
+		     gpointer             user_data)
+{
+}
+
+static gboolean
+g_win32_mount_eject_finish (GMount        *mount,
+			    GAsyncResult  *result,
+			    GError       **error)
+{
+  return FALSE;
+}
+
+static void
+g_win32_mount_mount_iface_init (GMountIface *iface)
+{
+  iface->get_root = g_win32_mount_get_root;
+  iface->get_name = g_win32_mount_get_name;
+  iface->get_icon = g_win32_mount_get_icon;
+  iface->get_uuid = g_win32_mount_get_uuid;
+  iface->get_drive = g_win32_mount_get_drive;
+  iface->get_volume = g_win32_mount_get_volume;
+  iface->can_unmount = g_win32_mount_can_unmount;
+  iface->can_eject = g_win32_mount_can_eject;
+  iface->unmount = g_win32_mount_unmount;
+  iface->unmount_finish = g_win32_mount_unmount_finish;
+  iface->eject = g_win32_mount_eject;
+  iface->eject_finish = g_win32_mount_eject_finish;
+}
diff --git a/gio/gwin32mount.h b/gio/gwin32mount.h
new file mode 100644
index 0000000..92e1f28
--- /dev/null
+++ b/gio/gwin32mount.h
@@ -0,0 +1,57 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Hans Breuer
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ *         Hans Breuer <hans@breuer.org>
+ */
+
+#ifndef __G_WIN32_MOUNT_H__
+#define __G_WIN32_MOUNT_H__
+
+#include <gio/giotypes.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WIN32_MOUNT        (_g_win32_mount_get_type ())
+#define G_WIN32_MOUNT(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_MOUNT, GWin32Mount))
+#define G_WIN32_MOUNT_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WIN32_MOUNT, GWin32MountClass))
+#define G_IS_WIN32_MOUNT(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_MOUNT))
+#define G_IS_WIN32_MOUNT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WIN32_MOUNT))
+
+typedef struct _GWin32MountClass GWin32MountClass;
+
+struct _GWin32MountClass
+{
+  GObjectClass parent_class;
+};
+
+GType         _g_win32_mount_get_type     (void) G_GNUC_CONST;
+
+GWin32Mount * _g_win32_mount_new          (GVolumeMonitor *volume_monitor,
+                                           const char     *path,
+                                           GWin32Volume   *volume);
+void          _g_win32_mount_unset_volume (GWin32Mount    *mount,
+                                           GWin32Volume   *volume);
+void          _g_win32_mount_unmounted    (GWin32Mount    *mount);
+
+G_END_DECLS
+
+#endif /* __G_WIN32_MOUNT_H__ */
diff --git a/gio/gwin32volumemonitor.c b/gio/gwin32volumemonitor.c
new file mode 100644
index 0000000..858a9dd
--- /dev/null
+++ b/gio/gwin32volumemonitor.c
@@ -0,0 +1,286 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Hans Breuer
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ *         Hans Breuer <hans@breuer.org>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib.h>
+#include "glibintl.h"
+
+#include "gwin32volumemonitor.h"
+#include "gwin32mount.h"
+#include "gmount.h"
+#include "giomodule.h"
+#include "gioalias.h"
+
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+
+struct _GWin32VolumeMonitor {
+  GNativeVolumeMonitor parent;
+
+  GList *volumes;
+  GList *mounts;
+};
+
+#define g_win32_volume_monitor_get_type _g_win32_volume_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GWin32VolumeMonitor, g_win32_volume_monitor, G_TYPE_NATIVE_VOLUME_MONITOR,
+                         g_io_extension_point_implement (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME,
+							 g_define_type_id,
+							 "win32",
+							 0));
+							 
+static void
+g_win32_volume_monitor_finalize (GObject *object)
+{
+  GWin32VolumeMonitor *monitor;
+  
+  monitor = G_WIN32_VOLUME_MONITOR (object);
+
+  if (G_OBJECT_CLASS (g_win32_volume_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_win32_volume_monitor_parent_class)->finalize) (object);
+}
+
+/**
+ * get_viewable_logical_drives:
+ * 
+ * Returns the list of logical and viewable drives as defined by
+ * GetLogicalDrives() and the registry keys
+ * Software\Microsoft\Windows\CurrentVersion\Policies\Explorer under
+ * HKLM or HKCU. If neither key exists the result of
+ * GetLogicalDrives() is returned.
+ *
+ * Return value: bitmask with same meaning as returned by GetLogicalDrives()
+**/
+static guint32 
+get_viewable_logical_drives (void)
+{
+  guint viewable_drives = GetLogicalDrives ();
+  HKEY key;
+
+  DWORD var_type = REG_DWORD; //the value's a REG_DWORD type
+  DWORD no_drives_size = 4;
+  DWORD no_drives;
+  gboolean hklm_present = FALSE;
+
+  if (RegOpenKeyEx (HKEY_LOCAL_MACHINE,
+		    "Software\\Microsoft\\Windows\\"
+		    "CurrentVersion\\Policies\\Explorer",
+		    0, KEY_READ, &key) == ERROR_SUCCESS)
+    {
+      if (RegQueryValueEx (key, "NoDrives", NULL, &var_type,
+			   (LPBYTE) &no_drives, &no_drives_size) == ERROR_SUCCESS)
+	{
+	  /* We need the bits that are set in viewable_drives, and
+	   * unset in no_drives.
+	   */
+	  viewable_drives = viewable_drives & ~no_drives;
+	  hklm_present = TRUE;
+	}
+      RegCloseKey (key);
+    }
+
+  /* If the key is present in HKLM then the one in HKCU should be ignored */
+  if (!hklm_present)
+    {
+      if (RegOpenKeyEx (HKEY_CURRENT_USER,
+			"Software\\Microsoft\\Windows\\"
+			"CurrentVersion\\Policies\\Explorer",
+			0, KEY_READ, &key) == ERROR_SUCCESS)
+	{
+	  if (RegQueryValueEx (key, "NoDrives", NULL, &var_type,
+			       (LPBYTE) &no_drives, &no_drives_size) == ERROR_SUCCESS)
+	    {
+	      viewable_drives = viewable_drives & ~no_drives;
+	    }
+	  RegCloseKey (key);
+	}
+    }
+
+  return viewable_drives; 
+}
+
+/* deliver accesible (aka 'mounted') volumes */
+static GList *
+get_mounts (GVolumeMonitor *volume_monitor)
+{
+  GWin32VolumeMonitor *monitor;
+  DWORD   drives;
+  gchar   drive[4] = "A:\\";
+  GList *list = NULL;
+  
+  monitor = G_WIN32_VOLUME_MONITOR (volume_monitor);
+
+  drives = get_viewable_logical_drives ();
+
+  if (!drives)
+    g_warning ("get_viewable_logical_drives failed.");
+
+  while (drives && drive[0] <= 'Z')
+    {
+      if (drives & 1)
+      {
+	list = g_list_prepend (list, _g_win32_mount_new (volume_monitor, drive, NULL));
+      }
+      drives >>= 1;
+      drive[0]++;
+    }
+  return list;
+}
+
+/* actually 'mounting' volumes is out of GIOs business on win32, so no volumes are delivered either */
+static GList *
+get_volumes (GVolumeMonitor *volume_monitor)
+{
+  GWin32VolumeMonitor *monitor;
+  GList *l = NULL;
+  
+  monitor = G_WIN32_VOLUME_MONITOR (volume_monitor);
+
+  return l;
+}
+
+/* real hardware */
+static GList *
+get_connected_drives (GVolumeMonitor *volume_monitor)
+{
+  GWin32VolumeMonitor *monitor;
+  HANDLE  find_handle;
+  BOOL    found;
+  wchar_t wc_name[MAX_PATH+1];
+  GList *list = NULL;
+  
+  monitor = G_WIN32_VOLUME_MONITOR (volume_monitor);
+
+#if 0
+  find_handle = FindFirstVolumeW (wc_name, MAX_PATH);
+  found = (find_handle != INVALID_HANDLE_VALUE);
+  while (found)
+    {
+      /* I don't know what this code is supposed to do; clearly it now
+       * does nothing, the returned GList is always NULL. But what was
+       * this code supposed to be a start of? The volume names that
+       * the FindFirstVolume/FindNextVolume loop iterates over returns
+       * device names like
+       *
+       *   \Device\HarddiskVolume1
+       *   \Device\HarddiskVolume2
+       *   \Device\CdRom0
+       *
+       * No DOS devices there, so I don't see the point with the
+       * QueryDosDevice call below. Probably this code is confusing volumes
+       * with something else that does contain the mapping from DOS devices
+       * to volumes.
+       */
+      wchar_t wc_dev_name[MAX_PATH+1];
+      guint trailing = wcslen (wc_name) - 1;
+
+      /* remove trailing backslash and leading \\?\\ */
+      wc_name[trailing] = L'\0';
+      if (QueryDosDeviceW (&wc_name[4], wc_dev_name, MAX_PATH))
+        {
+          gchar *name = g_utf16_to_utf8 (wc_dev_name, -1, NULL, NULL, NULL);
+          g_print ("%s\n", name);
+	  g_free (name);
+	}
+
+      found = FindNextVolumeW (find_handle, wc_name, MAX_PATH);
+    }
+  if (find_handle != INVALID_HANDLE_VALUE)
+    FindVolumeClose (find_handle);
+#endif
+
+  return list;
+}
+
+static GVolume *
+get_volume_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
+{
+  return NULL;
+}
+
+static GMount *
+get_mount_for_uuid (GVolumeMonitor *volume_monitor, const char *uuid)
+{
+  return NULL;
+}
+
+static gboolean
+is_supported (void)
+{
+  return TRUE;
+}
+
+static GMount *
+get_mount_for_mount_path (const char *mount_path,
+                          GCancellable *cancellable)
+{
+  GWin32Mount *mount;
+
+  /* TODO: Set mountable volume? */
+  mount = _g_win32_mount_new (NULL, mount_path, NULL);
+
+  return G_MOUNT (mount);
+}
+
+static void
+g_win32_volume_monitor_class_init (GWin32VolumeMonitorClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GVolumeMonitorClass *monitor_class = G_VOLUME_MONITOR_CLASS (klass);
+  GNativeVolumeMonitorClass *native_class = G_NATIVE_VOLUME_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_win32_volume_monitor_finalize;
+
+  monitor_class->get_mounts = get_mounts;
+  monitor_class->get_volumes = get_volumes;
+  monitor_class->get_connected_drives = get_connected_drives;
+  monitor_class->get_volume_for_uuid = get_volume_for_uuid;
+  monitor_class->get_mount_for_uuid = get_mount_for_uuid;
+  monitor_class->is_supported = is_supported;
+
+  native_class->get_mount_for_mount_path = get_mount_for_mount_path;
+}
+
+static void
+g_win32_volume_monitor_init (GWin32VolumeMonitor *win32_monitor)
+{
+  /* maybe we shoud setup a callback window to listern for WM_DEVICECHANGE ? */
+#if 0
+  unix_monitor->mount_monitor = g_win32_mount_monitor_new ();
+
+  g_signal_connect (win32_monitor->mount_monitor,
+		    "mounts-changed", G_CALLBACK (mounts_changed),
+		    win32_monitor);
+  
+  g_signal_connect (win32_monitor->mount_monitor,
+		    "mountpoints-changed", G_CALLBACK (mountpoints_changed),
+		    win32_monitor);
+		    
+  update_volumes (win32_monitor);
+  update_mounts (win32_monitor);
+#endif
+}
diff --git a/gio/gwin32volumemonitor.h b/gio/gwin32volumemonitor.h
new file mode 100644
index 0000000..e3aab73
--- /dev/null
+++ b/gio/gwin32volumemonitor.h
@@ -0,0 +1,65 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Hans Breuer
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ *         David Zeuthen <davidz@redhat.com>
+ *         Hans Breuer <hans@breuer.org>
+ */
+
+#ifndef __G_WIN32_VOLUME_MONITOR_H__
+#define __G_WIN32_VOLUME_MONITOR_H__
+
+#include <gio/gnativevolumemonitor.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WIN32_VOLUME_MONITOR        (_g_win32_volume_monitor_get_type ())
+#define G_WIN32_VOLUME_MONITOR(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_VOLUME_MONITOR, GWin32VolumeMonitor))
+#define G_WIN32_VOLUME_MONITOR_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WIN32_VOLUME_MONITOR, GWin32VolumeMonitorClass))
+#define G_IS_WIN32_VOLUME_MONITOR(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_VOLUME_MONITOR))
+#define G_IS_WIN32_VOLUME_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WIN32_VOLUME_MONITOR))
+
+typedef struct _GWin32VolumeMonitor GWin32VolumeMonitor;
+typedef struct _GWin32VolumeMonitorClass GWin32VolumeMonitorClass;
+
+/* Forward definitions */
+
+/**
+ * GWin32Mount:
+ *
+ * Implementation of the #GMount interface for Win32 systems.
+ */
+typedef struct _GWin32Mount  GWin32Mount;
+typedef struct _GWin32Volume GWin32Volume;
+
+struct _GWin32VolumeMonitorClass
+{
+  GNativeVolumeMonitorClass parent_class;
+};
+
+GType            _g_win32_volume_monitor_get_type                     (void) G_GNUC_CONST;
+
+GVolumeMonitor * _g_win32_volume_monitor_new                          (void);
+GWin32Volume   * _g_win32_volume_monitor_lookup_volume_for_mount_path (GWin32VolumeMonitor *monitor,
+                                                                       const char          *mount_path);
+
+G_END_DECLS
+
+#endif /* __G_WIN32_VOLUME_MONITOR_H__ */
diff --git a/gio/inotify/Makefile.am b/gio/inotify/Makefile.am
new file mode 100644
index 0000000..725936b
--- /dev/null
+++ b/gio/inotify/Makefile.am
@@ -0,0 +1,37 @@
+include $(top_srcdir)/Makefile.decl
+
+NULL =
+
+noinst_LTLIBRARIES = libinotify.la
+
+libinotify_la_SOURCES = 		\
+	inotify-kernel.c 		\
+	inotify-sub.c 			\
+	inotify-path.c 			\
+	inotify-missing.c 		\
+	inotify-helper.c 		\
+	inotify-diag.c			\
+	inotify-diag.h			\
+	inotify-kernel.h 		\
+	inotify-missing.h		\
+	inotify-path.h			\
+	inotify-sub.h			\
+	inotify-helper.h		\
+	ginotifyfilemonitor.c		\
+	ginotifyfilemonitor.h		\
+	ginotifydirectorymonitor.c	\
+	ginotifydirectorymonitor.h	\
+	$(NULL)
+
+libinotify_la_CFLAGS = \
+	-DG_LOG_DOMAIN=\"GLib-GIO\"	\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gmodule		\
+	-I$(top_srcdir)/gio 		\
+	-I$(top_builddir)/gio 		\
+	$(GLIB_DEBUG_FLAGS)		\
+	-DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"	\
+	-DGIO_COMPILATION		\
+	-DG_DISABLE_DEPRECATED
+
diff --git a/gio/inotify/ginotifydirectorymonitor.c b/gio/inotify/ginotifydirectorymonitor.c
new file mode 100644
index 0000000..dd6a28a
--- /dev/null
+++ b/gio/inotify/ginotifydirectorymonitor.c
@@ -0,0 +1,150 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#include "config.h"
+
+#include "ginotifydirectorymonitor.h"
+#include "giomodule.h"
+
+#define USE_INOTIFY 1
+#include "inotify-helper.h"
+
+#include "gioalias.h"
+
+struct _GInotifyDirectoryMonitor
+{
+  GLocalDirectoryMonitor parent_instance;
+  inotify_sub *sub;
+};
+
+static gboolean g_inotify_directory_monitor_cancel (GFileMonitor* monitor);
+
+#define g_inotify_directory_monitor_get_type _g_inotify_directory_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GInotifyDirectoryMonitor, g_inotify_directory_monitor, G_TYPE_LOCAL_DIRECTORY_MONITOR,
+			 g_io_extension_point_implement (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME,
+							 g_define_type_id,
+							 "inotify",
+							 20))
+
+static void
+g_inotify_directory_monitor_finalize (GObject *object)
+{
+  GInotifyDirectoryMonitor *inotify_monitor = G_INOTIFY_DIRECTORY_MONITOR (object);
+  inotify_sub *sub = inotify_monitor->sub;
+
+  if (sub)
+    {
+      _ih_sub_cancel (sub);
+      _ih_sub_free (sub);
+      inotify_monitor->sub = NULL;
+    }
+
+  if (G_OBJECT_CLASS (g_inotify_directory_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_inotify_directory_monitor_parent_class)->finalize) (object);
+}
+
+static GObject *
+g_inotify_directory_monitor_constructor (GType type,
+					 guint n_construct_properties,
+					 GObjectConstructParam *construct_properties)
+{
+  GObject *obj;
+  GInotifyDirectoryMonitorClass *klass;
+  GObjectClass *parent_class;
+  GInotifyDirectoryMonitor *inotify_monitor;
+  const gchar *dirname = NULL;
+  inotify_sub *sub = NULL;
+  
+  klass = G_INOTIFY_DIRECTORY_MONITOR_CLASS (g_type_class_peek (G_TYPE_INOTIFY_DIRECTORY_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type,
+                                   n_construct_properties,
+                                   construct_properties);
+
+  inotify_monitor = G_INOTIFY_DIRECTORY_MONITOR (obj);
+
+  dirname = G_LOCAL_DIRECTORY_MONITOR (obj)->dirname;
+  g_assert (dirname != NULL);
+
+  /* Will never fail as is_supported() should be called before instanciating
+   * anyway */
+  g_assert (_ih_startup ());
+
+  sub = _ih_sub_new (dirname, NULL, inotify_monitor);
+  /* FIXME: what to do about errors here? we can't return NULL or another
+   * kind of error and an assertion is probably too hard */
+  g_assert (sub != NULL);
+  g_assert (_ih_sub_add (sub));
+
+  inotify_monitor->sub = sub;
+
+  return obj;
+}
+
+static gboolean
+g_inotify_directory_monitor_is_supported (void)
+{
+  return _ih_startup ();
+}
+
+static void
+g_inotify_directory_monitor_class_init (GInotifyDirectoryMonitorClass* klass)
+{
+  GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+  GFileMonitorClass *directory_monitor_class = G_FILE_MONITOR_CLASS (klass);
+  GLocalDirectoryMonitorClass *local_directory_monitor_class = G_LOCAL_DIRECTORY_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_inotify_directory_monitor_finalize;
+  gobject_class->constructor = g_inotify_directory_monitor_constructor;
+  directory_monitor_class->cancel = g_inotify_directory_monitor_cancel;
+
+  local_directory_monitor_class->mount_notify = TRUE;
+  local_directory_monitor_class->is_supported = g_inotify_directory_monitor_is_supported;
+}
+
+static void
+g_inotify_directory_monitor_init (GInotifyDirectoryMonitor* monitor)
+{
+}
+
+static gboolean
+g_inotify_directory_monitor_cancel (GFileMonitor* monitor)
+{
+  GInotifyDirectoryMonitor *inotify_monitor = G_INOTIFY_DIRECTORY_MONITOR (monitor);
+  inotify_sub *sub = inotify_monitor->sub;
+
+  if (sub) 
+    {
+      _ih_sub_cancel (sub);
+      _ih_sub_free (sub);
+      inotify_monitor->sub = NULL;
+    }
+
+  if (G_FILE_MONITOR_CLASS (g_inotify_directory_monitor_parent_class)->cancel)
+    (*G_FILE_MONITOR_CLASS (g_inotify_directory_monitor_parent_class)->cancel) (monitor);
+
+  return TRUE;
+}
+
diff --git a/gio/inotify/ginotifydirectorymonitor.h b/gio/inotify/ginotifydirectorymonitor.h
new file mode 100644
index 0000000..d5abb71
--- /dev/null
+++ b/gio/inotify/ginotifydirectorymonitor.h
@@ -0,0 +1,53 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __G_INOTIFY_DIRECTORY_MONITOR_H__
+#define __G_INOTIFY_DIRECTORY_MONITOR_H__
+
+#include <glib-object.h>
+#include <string.h>
+#include "glocaldirectorymonitor.h"
+#include "giomodule.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_INOTIFY_DIRECTORY_MONITOR		(_g_inotify_directory_monitor_get_type ())
+#define G_INOTIFY_DIRECTORY_MONITOR(o)			(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INOTIFY_DIRECTORY_MONITOR, GInotifyDirectoryMonitor))
+#define G_INOTIFY_DIRECTORY_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_INOTIFY_DIRECTORY_MONITOR, GInotifyDirectoryMonitorClass))
+#define G_IS_INOTIFY_DIRECTORY_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INOTIFY_DIRECTORY_MONITOR))
+#define G_IS_INOTIFY_DIRECTORY_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INOTIFY_DIRECTORY_MONITOR))
+
+typedef struct _GInotifyDirectoryMonitor      GInotifyDirectoryMonitor;
+typedef struct _GInotifyDirectoryMonitorClass GInotifyDirectoryMonitorClass;
+
+struct _GInotifyDirectoryMonitorClass {
+  GLocalDirectoryMonitorClass parent_class;
+};
+
+GType _g_inotify_directory_monitor_get_type (void);
+
+G_END_DECLS
+
+#endif /* __G_INOTIFY_DIRECTORY_MONITOR_H__ */
diff --git a/gio/inotify/ginotifyfilemonitor.c b/gio/inotify/ginotifyfilemonitor.c
new file mode 100644
index 0000000..0dff7f3
--- /dev/null
+++ b/gio/inotify/ginotifyfilemonitor.c
@@ -0,0 +1,168 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#include "config.h"
+
+#include "ginotifyfilemonitor.h"
+#include <gio/giomodule.h>
+
+#define USE_INOTIFY 1
+#include "inotify-helper.h"
+
+#include "gioalias.h"
+
+struct _GInotifyFileMonitor
+{
+  GLocalFileMonitor parent_instance;
+  gchar *filename;
+  gchar *dirname;
+  inotify_sub *sub;
+};
+
+static gboolean g_inotify_file_monitor_cancel (GFileMonitor* monitor);
+
+#define g_inotify_file_monitor_get_type _g_inotify_file_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GInotifyFileMonitor, g_inotify_file_monitor, G_TYPE_LOCAL_FILE_MONITOR,
+			 g_io_extension_point_implement (G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME,
+							 g_define_type_id,
+							 "inotify",
+							 20))
+
+static void
+g_inotify_file_monitor_finalize (GObject *object)
+{
+  GInotifyFileMonitor *inotify_monitor = G_INOTIFY_FILE_MONITOR (object);
+  inotify_sub *sub = inotify_monitor->sub;
+
+  if (sub)
+    {
+      _ih_sub_cancel (sub);
+      _ih_sub_free (sub);
+      inotify_monitor->sub = NULL;
+    }
+
+  if (inotify_monitor->filename)
+    {
+      g_free (inotify_monitor->filename);
+      inotify_monitor->filename = NULL;
+    }
+
+  if (inotify_monitor->dirname)
+    {
+      g_free (inotify_monitor->dirname);
+      inotify_monitor->dirname = NULL;
+    }
+
+  if (G_OBJECT_CLASS (g_inotify_file_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_inotify_file_monitor_parent_class)->finalize) (object);
+}
+
+static GObject *
+g_inotify_file_monitor_constructor (GType                  type,
+                                    guint                  n_construct_properties,
+                                    GObjectConstructParam *construct_properties)
+{
+  GObject *obj;
+  GInotifyFileMonitorClass *klass;
+  GObjectClass *parent_class;
+  GInotifyFileMonitor *inotify_monitor;
+  const gchar *filename = NULL;
+  inotify_sub *sub = NULL;
+  
+  klass = G_INOTIFY_FILE_MONITOR_CLASS (g_type_class_peek (G_TYPE_INOTIFY_FILE_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type,
+                                   n_construct_properties,
+                                   construct_properties);
+
+  inotify_monitor = G_INOTIFY_FILE_MONITOR (obj);
+
+  filename = G_LOCAL_FILE_MONITOR (obj)->filename;
+
+  g_assert (filename != NULL);
+
+  inotify_monitor->filename = g_path_get_basename (filename);
+  inotify_monitor->dirname = g_path_get_dirname (filename);
+
+  /* Will never fail as is_supported() should be called before instanciating
+   * anyway */
+  g_assert (_ih_startup ());
+
+  sub = _ih_sub_new (inotify_monitor->dirname, inotify_monitor->filename, inotify_monitor);
+ 
+  /* FIXME: what to do about errors here? we can't return NULL or another
+   * kind of error and an assertion is probably too hard */
+  g_assert (sub != NULL);
+  g_assert (_ih_sub_add (sub));
+
+  inotify_monitor->sub = sub;
+
+  return obj;
+}
+
+static gboolean
+g_inotify_file_monitor_is_supported (void)
+{
+  return _ih_startup ();
+}
+
+static void
+g_inotify_file_monitor_class_init (GInotifyFileMonitorClass* klass)
+{
+  GObjectClass* gobject_class = G_OBJECT_CLASS (klass);
+  GFileMonitorClass *file_monitor_class = G_FILE_MONITOR_CLASS (klass);
+  GLocalFileMonitorClass *local_file_monitor_class = G_LOCAL_FILE_MONITOR_CLASS (klass);
+  
+  gobject_class->finalize = g_inotify_file_monitor_finalize;
+  gobject_class->constructor = g_inotify_file_monitor_constructor;
+  file_monitor_class->cancel = g_inotify_file_monitor_cancel;
+
+  local_file_monitor_class->is_supported = g_inotify_file_monitor_is_supported;
+}
+
+static void
+g_inotify_file_monitor_init (GInotifyFileMonitor* monitor)
+{
+}
+
+static gboolean
+g_inotify_file_monitor_cancel (GFileMonitor* monitor)
+{
+  GInotifyFileMonitor *inotify_monitor = G_INOTIFY_FILE_MONITOR (monitor);
+  inotify_sub *sub = inotify_monitor->sub;
+
+  if (sub) 
+    {
+      _ih_sub_cancel (sub);
+      _ih_sub_free (sub);
+      inotify_monitor->sub = NULL;
+    }
+
+  if (G_FILE_MONITOR_CLASS (g_inotify_file_monitor_parent_class)->cancel)
+    (*G_FILE_MONITOR_CLASS (g_inotify_file_monitor_parent_class)->cancel) (monitor);
+
+  return TRUE;
+}
+
diff --git a/gio/inotify/ginotifyfilemonitor.h b/gio/inotify/ginotifyfilemonitor.h
new file mode 100644
index 0000000..e97a40c
--- /dev/null
+++ b/gio/inotify/ginotifyfilemonitor.h
@@ -0,0 +1,54 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2007 Sebastian Dröge.
+ *
+ * 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 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.
+ *
+ * Authors: Alexander Larsson <alexl@redhat.com>
+ *          John McCutchan <john@johnmccutchan.com> 
+ *          Sebastian Dröge <slomo@circular-chaos.org>
+ */
+
+#ifndef __G_INOTIFY_FILE_MONITOR_H__
+#define __G_INOTIFY_FILE_MONITOR_H__
+
+#include <glib-object.h>
+#include <string.h>
+#include <gio/gfilemonitor.h>
+#include <gio/glocalfilemonitor.h>
+#include <gio/giomodule.h>
+
+G_BEGIN_DECLS
+
+#define G_TYPE_INOTIFY_FILE_MONITOR		(_g_inotify_file_monitor_get_type ())
+#define G_INOTIFY_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_INOTIFY_FILE_MONITOR, GInotifyFileMonitor))
+#define G_INOTIFY_FILE_MONITOR_CLASS(k)		(G_TYPE_CHECK_CLASS_CAST ((k), G_TYPE_INOTIFY_FILE_MONITOR, GInotifyFileMonitorClass))
+#define G_IS_INOTIFY_FILE_MONITOR(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_INOTIFY_FILE_MONITOR))
+#define G_IS_INOTIFY_FILE_MONITOR_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_INOTIFY_FILE_MONITOR))
+
+typedef struct _GInotifyFileMonitor      GInotifyFileMonitor;
+typedef struct _GInotifyFileMonitorClass GInotifyFileMonitorClass;
+
+struct _GInotifyFileMonitorClass {
+  GLocalFileMonitorClass parent_class;
+};
+
+GType _g_inotify_file_monitor_get_type (void);
+
+G_END_DECLS
+
+#endif /* __G_INOTIFY_FILE_MONITOR_H__ */
diff --git a/gio/inotify/inotify-diag.c b/gio/inotify/inotify-diag.c
new file mode 100644
index 0000000..937ebd7
--- /dev/null
+++ b/gio/inotify/inotify-diag.c
@@ -0,0 +1,74 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */
+
+/* inotify-helper.c - Gnome VFS Monitor based on inotify.
+
+   Copyright (C) 2005 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: 
+		 John McCutchan <john@johnmccutchan.com>
+*/
+
+#include "config.h"
+#include <glib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "inotify-missing.h"
+#include "inotify-path.h"
+#include "inotify-diag.h"
+
+#define DIAG_DUMP_TIME 20000 /* 20 seconds */
+
+G_LOCK_EXTERN (inotify_lock);
+
+static gboolean
+id_dump (gpointer userdata)
+{
+  GIOChannel *ioc;
+  pid_t pid;
+  char *fname;
+  G_LOCK (inotify_lock);
+  ioc = NULL;
+  pid = getpid ();
+
+  fname = g_strdup_printf ("/tmp/gvfsid.%d", pid);
+  ioc = g_io_channel_new_file (fname, "w", NULL);
+  g_free (fname);
+  
+  if (!ioc)
+    {
+      G_UNLOCK (inotify_lock);
+      return TRUE;
+    }
+
+  _im_diag_dump (ioc);
+  
+  g_io_channel_shutdown (ioc, TRUE, NULL);
+  g_io_channel_unref (ioc);
+  
+  G_UNLOCK (inotify_lock);
+  return TRUE;
+}
+
+void
+_id_startup (void)
+{
+  if (!g_getenv ("GVFS_INOTIFY_DIAG"))
+    return;
+	
+  g_timeout_add (DIAG_DUMP_TIME, id_dump, NULL);
+}
diff --git a/gio/inotify/inotify-diag.h b/gio/inotify/inotify-diag.h
new file mode 100644
index 0000000..f818f16
--- /dev/null
+++ b/gio/inotify/inotify-diag.h
@@ -0,0 +1,29 @@
+/* inotify-helper.h - GNOME VFS Monitor using inotify
+
+   Copyright (C) 2006 John McCutchan <john@johnmccutchan.com>
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Author: John McCutchan <john@johnmccutchan.com>
+*/
+
+
+#ifndef __INOTIFY_DIAG_H
+#define __INOTIFY_DIAG_H
+
+void _id_startup (void);
+
+#endif /* __INOTIFY_DIAG_H */
diff --git a/gio/inotify/inotify-helper.c b/gio/inotify/inotify-helper.c
new file mode 100644
index 0000000..0042e7e
--- /dev/null
+++ b/gio/inotify/inotify-helper.c
@@ -0,0 +1,238 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */
+
+/* inotify-helper.c - GVFS Monitor based on inotify.
+
+   Copyright (C) 2007 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: 
+		 John McCutchan <john@johnmccutchan.com>
+*/
+
+#include "config.h"
+#include <errno.h>
+#include <time.h>
+#include <string.h>
+#include <sys/ioctl.h>
+/* Just include the local header to stop all the pain */
+#include <sys/inotify.h>
+#include <gio/glocalfile.h>
+#include <gio/gfilemonitor.h>
+#include <gio/gfile.h>
+#include "inotify-helper.h"
+#include "inotify-missing.h"
+#include "inotify-path.h"
+#include "inotify-diag.h"
+
+#include "gioalias.h"
+
+
+static gboolean ih_debug_enabled = FALSE;
+#define IH_W if (ih_debug_enabled) g_warning 
+
+static void ih_event_callback (ik_event_t *event, inotify_sub *sub);
+static void ih_not_missing_callback (inotify_sub *sub);
+
+/* We share this lock with inotify-kernel.c and inotify-missing.c
+ *
+ * inotify-kernel.c takes the lock when it reads events from
+ * the kernel and when it processes those events
+ *
+ * inotify-missing.c takes the lock when it is scanning the missing
+ * list.
+ *
+ * We take the lock in all public functions
+ */
+G_GNUC_INTERNAL G_LOCK_DEFINE (inotify_lock);
+
+static GFileMonitorEvent ih_mask_to_EventFlags (guint32 mask);
+
+/**
+ * _ih_startup:
+ *
+ * Initializes the inotify backend.  This must be called before
+ * any other functions in this module.
+ *
+ * Return value: #TRUE if initialization succeeded, #FALSE otherwise
+ */
+gboolean
+_ih_startup (void)
+{
+  static gboolean initialized = FALSE;
+  static gboolean result = FALSE;
+  
+  G_LOCK (inotify_lock);
+  
+  if (initialized == TRUE)
+    {
+      G_UNLOCK (inotify_lock);
+      return result;
+    }
+
+  result = _ip_startup (ih_event_callback);
+  if (!result)
+    {
+      g_warning ("Could not initialize inotify\n");
+      G_UNLOCK (inotify_lock);
+      return FALSE;
+    }
+  _im_startup (ih_not_missing_callback);
+  _id_startup ();
+
+  IH_W ("started gvfs inotify backend\n");
+  
+  initialized = TRUE;
+  
+  G_UNLOCK (inotify_lock);
+  
+  return TRUE;
+}
+
+/**
+ * Adds a subscription to be monitored.
+ */
+gboolean
+_ih_sub_add (inotify_sub *sub)
+{
+  G_LOCK (inotify_lock);
+	
+  if (!_ip_start_watching (sub))
+    _im_add (sub);
+  
+  G_UNLOCK (inotify_lock);
+  return TRUE;
+}
+
+/**
+ * Cancels a subscription which was being monitored.
+ */
+gboolean
+_ih_sub_cancel (inotify_sub *sub)
+{
+  G_LOCK (inotify_lock);
+
+  if (!sub->cancelled)
+    {
+      IH_W ("cancelling %s\n", sub->dirname);
+      sub->cancelled = TRUE;
+      _im_rm (sub);
+      _ip_stop_watching (sub);
+    }
+  
+  G_UNLOCK (inotify_lock);
+  
+  return TRUE;
+}
+
+
+static void
+ih_event_callback (ik_event_t  *event, 
+                   inotify_sub *sub)
+{
+  gchar *fullpath;
+  GFileMonitorEvent eflags;
+  GFile* parent;
+  GFile* child;
+  
+  eflags = ih_mask_to_EventFlags (event->mask);
+  parent = g_file_new_for_path (sub->dirname);
+  if (event->name)
+    fullpath = g_strdup_printf ("%s/%s", sub->dirname, event->name);
+  else
+    fullpath = g_strdup_printf ("%s/", sub->dirname);
+  
+  child = g_file_new_for_path (fullpath);
+  g_free (fullpath);
+
+  g_file_monitor_emit_event (G_FILE_MONITOR (sub->user_data),
+			     child, NULL, eflags);
+
+  g_object_unref (child);
+  g_object_unref (parent);
+}
+
+static void
+ih_not_missing_callback (inotify_sub *sub)
+{
+  gchar *fullpath;
+  GFileMonitorEvent eflags;
+  guint32 mask;
+  GFile* parent;
+  GFile* child;
+  
+  parent = g_file_new_for_path (sub->dirname);
+
+  if (sub->filename)
+    {
+      fullpath = g_strdup_printf ("%s/%s", sub->dirname, sub->filename);
+      g_warning ("Missing callback called fullpath = %s\n", fullpath);
+      if (!g_file_test (fullpath, G_FILE_TEST_EXISTS))
+	{
+	  g_free (fullpath);
+	  return;
+	}
+      mask = IN_CREATE;
+    }
+  else
+    {
+      fullpath = g_strdup_printf ("%s", sub->dirname);
+      mask = IN_CREATE|IN_ISDIR;
+    }
+
+  eflags = ih_mask_to_EventFlags (mask);
+  child = g_file_new_for_path (fullpath);
+  g_free (fullpath);
+
+  g_file_monitor_emit_event (G_FILE_MONITOR (sub->user_data),
+			     child, NULL, eflags);
+
+  g_object_unref (child);
+  g_object_unref (parent);
+}
+
+/* Transforms a inotify event to a GVFS event. */
+static GFileMonitorEvent
+ih_mask_to_EventFlags (guint32 mask)
+{
+  mask &= ~IN_ISDIR;
+  switch (mask)
+    {
+    case IN_MODIFY:
+      return G_FILE_MONITOR_EVENT_CHANGED;
+    case IN_CLOSE_WRITE:
+      return G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT;
+    case IN_ATTRIB:
+      return G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED;
+    case IN_MOVE_SELF:
+    case IN_MOVED_FROM:
+    case IN_DELETE:
+    case IN_DELETE_SELF:
+      return G_FILE_MONITOR_EVENT_DELETED;
+    case IN_CREATE:
+    case IN_MOVED_TO:
+      return G_FILE_MONITOR_EVENT_CREATED;
+    case IN_UNMOUNT:
+      return G_FILE_MONITOR_EVENT_UNMOUNTED;
+    case IN_Q_OVERFLOW:
+    case IN_OPEN:
+    case IN_CLOSE_NOWRITE:
+    case IN_ACCESS:
+    case IN_IGNORED:
+    default:
+      return -1;
+    }
+}
diff --git a/gio/inotify/inotify-helper.h b/gio/inotify/inotify-helper.h
new file mode 100644
index 0000000..1fd9701
--- /dev/null
+++ b/gio/inotify/inotify-helper.h
@@ -0,0 +1,33 @@
+/* inotify-helper.h - GVFS Directory Monitor using inotify
+
+   Copyright (C) 2007 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Author: John McCutchan <john@johnmccutchan.com>
+*/
+
+
+#ifndef __INOTIFY_HELPER_H
+#define __INOTIFY_HELPER_H
+
+#include "inotify-sub.h"
+
+gboolean _ih_startup    (void);
+gboolean _ih_sub_add    (inotify_sub *sub);
+gboolean _ih_sub_cancel (inotify_sub *sub);
+
+#endif /* __INOTIFY_HELPER_H */
diff --git a/gio/inotify/inotify-kernel.c b/gio/inotify/inotify-kernel.c
new file mode 100644
index 0000000..f9861a0
--- /dev/null
+++ b/gio/inotify/inotify-kernel.c
@@ -0,0 +1,673 @@
+/*
+   Copyright (C) 2005 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors:.
+		John McCutchan <john@johnmccutchan.com>
+*/
+
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <glib.h>
+#include "inotify-kernel.h"
+#include <sys/inotify.h>
+
+/* Timings for pairing MOVED_TO / MOVED_FROM events */
+#define PROCESS_EVENTS_TIME 1000 /* milliseconds (1 hz) */
+#define DEFAULT_HOLD_UNTIL_TIME 0 /* 0 millisecond */
+#define MOVE_HOLD_UNTIL_TIME 0 /* 0 milliseconds */
+
+static int inotify_instance_fd = -1;
+static GQueue *events_to_process = NULL;
+static GQueue *event_queue = NULL;
+static GHashTable * cookie_hash = NULL;
+static GIOChannel *inotify_read_ioc;
+static GPollFD ik_poll_fd;
+static gboolean ik_poll_fd_enabled = TRUE;
+static void (*user_cb)(ik_event_t *event);
+
+static gboolean ik_read_callback (gpointer user_data);
+static gboolean ik_process_eq_callback (gpointer user_data);
+
+static guint32 ik_move_matches = 0;
+static guint32 ik_move_misses = 0;
+
+static gboolean process_eq_running = FALSE;
+
+/* We use the lock from inotify-helper.c
+ *
+ * There are two places that we take this lock
+ *
+ * 1) In ik_read_callback
+ *
+ * 2) ik_process_eq_callback.
+ *
+ *
+ * The rest of locking is taken care of in inotify-helper.c
+ */
+G_LOCK_EXTERN (inotify_lock);
+
+typedef struct ik_event_internal {
+  ik_event_t *event;
+  gboolean seen;
+  gboolean sent;
+  GTimeVal hold_until;
+  struct ik_event_internal *pair;
+} ik_event_internal_t;
+
+/* In order to perform non-sleeping inotify event chunking we need
+ * a custom GSource
+ */
+static gboolean
+ik_source_prepare (GSource *source,
+		   gint    *timeout)
+{
+  return FALSE;
+}
+
+static gboolean
+ik_source_timeout (gpointer data)
+{
+  GSource *source = (GSource *)data;
+  
+  /* Re-active the PollFD */
+  g_source_add_poll (source, &ik_poll_fd);
+  g_source_unref (source);
+  ik_poll_fd_enabled = TRUE;
+  
+  return FALSE;
+}
+
+#define MAX_PENDING_COUNT 2
+#define PENDING_THRESHOLD(qsize) ((qsize) >> 1)
+#define PENDING_MARGINAL_COST(p) ((unsigned int)(1 << (p)))
+#define MAX_QUEUED_EVENTS 2048
+#define AVERAGE_EVENT_SIZE sizeof (struct inotify_event) + 16
+#define TIMEOUT_MILLISECONDS 10
+
+static gboolean
+ik_source_check (GSource *source)
+{
+  static int prev_pending = 0, pending_count = 0;
+  
+  /* We already disabled the PollFD or
+   * nothing to be read from inotify */
+  if (!ik_poll_fd_enabled || !(ik_poll_fd.revents & G_IO_IN))
+    return FALSE;
+
+  if (pending_count < MAX_PENDING_COUNT)
+    {
+      unsigned int pending;
+      
+      if (ioctl (inotify_instance_fd, FIONREAD, &pending) == -1)
+	goto do_read;
+      
+      pending /= AVERAGE_EVENT_SIZE;
+      
+      /* Don't wait if the number of pending events is too close
+       * to the maximum queue size.
+       */
+      if (pending > PENDING_THRESHOLD (MAX_QUEUED_EVENTS))
+	goto do_read;
+      
+      /* With each successive iteration, the minimum rate for
+       * further sleep doubles. 
+       */
+      if (pending-prev_pending < PENDING_MARGINAL_COST (pending_count))
+	goto do_read;
+      
+      prev_pending = pending;
+      pending_count++;
+      
+      /* We are going to wait to read the events: */
+      
+      /* Remove the PollFD from the source */
+      g_source_remove_poll (source, &ik_poll_fd);
+      /* To avoid threading issues we need to flag that we've done that */
+      ik_poll_fd_enabled = FALSE;
+      /* Set a timeout to re-add the PollFD to the source */
+      g_source_ref (source);
+      g_timeout_add (TIMEOUT_MILLISECONDS, ik_source_timeout, source);
+      
+      return FALSE;
+    }
+
+do_read:
+  /* We are ready to read events from inotify */
+
+  prev_pending = 0;
+  pending_count = 0;
+  
+  return TRUE;
+}
+
+static gboolean
+ik_source_dispatch (GSource     *source,
+		    GSourceFunc  callback,
+		    gpointer     user_data)
+{
+  if (callback)
+    return callback (user_data);
+  return TRUE;
+}
+
+static GSourceFuncs ik_source_funcs =
+{
+  ik_source_prepare,
+  ik_source_check,
+  ik_source_dispatch,
+  NULL
+};
+
+gboolean _ik_startup (void (*cb)(ik_event_t *event))
+{
+  static gboolean initialized = FALSE;
+  GSource *source;
+  
+  user_cb = cb;
+  /* Ignore multi-calls */
+  if (initialized) 
+    return inotify_instance_fd >= 0;
+  
+  initialized = TRUE;
+  inotify_instance_fd = inotify_init ();
+  
+  if (inotify_instance_fd < 0)
+    return FALSE;
+
+  inotify_read_ioc = g_io_channel_unix_new (inotify_instance_fd);
+  ik_poll_fd.fd = inotify_instance_fd;
+  ik_poll_fd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
+  g_io_channel_set_encoding (inotify_read_ioc, NULL, NULL);
+  g_io_channel_set_flags (inotify_read_ioc, G_IO_FLAG_NONBLOCK, NULL);
+
+  source = g_source_new (&ik_source_funcs, sizeof (GSource));
+  g_source_add_poll (source, &ik_poll_fd);
+  g_source_set_callback (source, ik_read_callback, NULL, NULL);
+  g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  cookie_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
+  event_queue = g_queue_new ();
+  events_to_process = g_queue_new ();
+  
+  return TRUE;
+}
+
+static ik_event_internal_t *
+ik_event_internal_new (ik_event_t *event)
+{
+  ik_event_internal_t *internal_event = g_new0 (ik_event_internal_t, 1);
+  GTimeVal tv;
+  
+  g_assert (event);
+  
+  g_get_current_time (&tv);
+  g_time_val_add (&tv, DEFAULT_HOLD_UNTIL_TIME);
+  internal_event->event = event;
+  internal_event->hold_until = tv;
+  
+  return internal_event;
+}
+
+static ik_event_t *
+ik_event_new (char *buffer)
+{
+  struct inotify_event *kevent = (struct inotify_event *)buffer;
+  ik_event_t *event = g_new0 (ik_event_t, 1);
+  
+  g_assert (buffer);
+  
+  event->wd = kevent->wd;
+  event->mask = kevent->mask;
+  event->cookie = kevent->cookie;
+  event->len = kevent->len;
+  if (event->len)
+    event->name = g_strdup (kevent->name);
+  else
+    event->name = g_strdup ("");
+  
+  return event;
+}
+
+ik_event_t *
+_ik_event_new_dummy (const char *name, 
+                     gint32      wd, 
+                     guint32     mask)
+{
+  ik_event_t *event = g_new0 (ik_event_t, 1);
+  event->wd = wd;
+  event->mask = mask;
+  event->cookie = 0;
+  if (name)
+    event->name = g_strdup (name);
+  else
+    event->name = g_strdup("");
+  
+  event->len = strlen (event->name);
+  
+  return event;
+}
+
+void
+_ik_event_free (ik_event_t *event)
+{
+  if (event->pair)
+    _ik_event_free (event->pair);
+  g_free (event->name);
+  g_free (event);
+}
+
+gint32
+_ik_watch (const char *path, 
+           guint32     mask, 
+           int        *err)
+{
+  gint32 wd = -1;
+  
+  g_assert (path != NULL);
+  g_assert (inotify_instance_fd >= 0);
+  
+  wd = inotify_add_watch (inotify_instance_fd, path, mask);
+  
+  if (wd < 0)
+    {
+      int e = errno;
+      /* FIXME: debug msg failed to add watch */
+      if (err)
+	*err = e;
+      return wd;
+    }
+  
+  g_assert (wd >= 0);
+  return wd;
+}
+
+int
+_ik_ignore (const char *path, 
+            gint32      wd)
+{
+  g_assert (wd >= 0);
+  g_assert (inotify_instance_fd >= 0);
+  
+  if (inotify_rm_watch (inotify_instance_fd, wd) < 0)
+    {
+      /* int e = errno; */
+      /* failed to rm watch */
+      return -1;
+    }
+  
+  return 0;
+}
+
+void
+_ik_move_stats (guint32 *matches, 
+                guint32 *misses)
+{
+  if (matches)
+    *matches = ik_move_matches;
+  
+  if (misses)
+    *misses = ik_move_misses;
+}
+
+const char *
+_ik_mask_to_string (guint32 mask)
+{
+  gboolean is_dir = mask & IN_ISDIR;
+  mask &= ~IN_ISDIR;
+  
+  if (is_dir)
+    {
+      switch (mask)
+	{
+	case IN_ACCESS:
+	  return "ACCESS (dir)";
+	case IN_MODIFY:
+	  return "MODIFY (dir)";
+	case IN_ATTRIB:
+	  return "ATTRIB (dir)";
+	case IN_CLOSE_WRITE:
+	  return "CLOSE_WRITE (dir)";
+	case IN_CLOSE_NOWRITE:
+	  return "CLOSE_NOWRITE (dir)"; 
+	case IN_OPEN:
+	  return "OPEN (dir)";
+	case IN_MOVED_FROM:
+	  return "MOVED_FROM (dir)";
+	case IN_MOVED_TO:
+	  return "MOVED_TO (dir)";
+	case IN_DELETE:
+	  return "DELETE (dir)";
+	case IN_CREATE:
+	  return "CREATE (dir)";
+	case IN_DELETE_SELF:
+	  return "DELETE_SELF (dir)";
+	case IN_UNMOUNT:
+	  return "UNMOUNT (dir)";
+	case IN_Q_OVERFLOW:
+	  return "Q_OVERFLOW (dir)";
+	case IN_IGNORED:
+	  return "IGNORED (dir)";
+	default:
+	  return "UNKNOWN_EVENT (dir)";
+	}
+    }
+  else
+    {
+      switch (mask)
+	{
+	case IN_ACCESS:
+	  return "ACCESS";
+	case IN_MODIFY:
+	  return "MODIFY";
+	case IN_ATTRIB:
+	  return "ATTRIB";
+	case IN_CLOSE_WRITE:
+	  return "CLOSE_WRITE";
+	case IN_CLOSE_NOWRITE:
+	  return "CLOSE_NOWRITE";
+	case IN_OPEN:
+	  return "OPEN";
+	case IN_MOVED_FROM:
+	  return "MOVED_FROM";
+	case IN_MOVED_TO:
+	  return "MOVED_TO";
+	case IN_DELETE:
+	  return "DELETE";
+	case IN_CREATE:
+	  return "CREATE";
+	case IN_DELETE_SELF:
+	  return "DELETE_SELF";
+	case IN_UNMOUNT:
+	  return "UNMOUNT";
+	case IN_Q_OVERFLOW:
+	  return "Q_OVERFLOW";
+	case IN_IGNORED:
+	  return "IGNORED";
+	default:
+	  return "UNKNOWN_EVENT";
+	}
+    }
+}
+
+
+static void
+ik_read_events (gsize  *buffer_size_out, 
+                gchar **buffer_out)
+{
+  static gchar *buffer = NULL;
+  static gsize buffer_size;
+  
+  /* Initialize the buffer on our first call */
+  if (buffer == NULL)
+    {
+      buffer_size = AVERAGE_EVENT_SIZE;
+      buffer_size *= MAX_QUEUED_EVENTS;
+      buffer = g_malloc (buffer_size);
+    }
+
+  *buffer_size_out = 0;
+  *buffer_out = NULL;
+  
+  memset (buffer, 0, buffer_size);
+
+  if (g_io_channel_read_chars (inotify_read_ioc, (char *)buffer, buffer_size, buffer_size_out, NULL) != G_IO_STATUS_NORMAL) {
+    /* error reading */
+  }
+  *buffer_out = buffer;
+}
+
+static gboolean
+ik_read_callback (gpointer user_data)
+{
+  gchar *buffer;
+  gsize buffer_size, buffer_i, events;
+  
+  G_LOCK (inotify_lock);
+  ik_read_events (&buffer_size, &buffer);
+  
+  buffer_i = 0;
+  events = 0;
+  while (buffer_i < buffer_size)
+    {
+      struct inotify_event *event;
+      gsize event_size;
+      event = (struct inotify_event *)&buffer[buffer_i];
+      event_size = sizeof(struct inotify_event) + event->len;
+      g_queue_push_tail (events_to_process, ik_event_internal_new (ik_event_new (&buffer[buffer_i])));
+      buffer_i += event_size;
+      events++;
+    }
+  
+  /* If the event process callback is off, turn it back on */
+  if (!process_eq_running && events)
+    {
+      process_eq_running = TRUE;
+      g_timeout_add (PROCESS_EVENTS_TIME, ik_process_eq_callback, NULL);
+    }
+  
+  G_UNLOCK (inotify_lock);
+  
+  return TRUE;
+}
+
+static gboolean
+g_timeval_lt (GTimeVal *val1, 
+              GTimeVal *val2)
+{
+  if (val1->tv_sec < val2->tv_sec)
+    return TRUE;
+  
+  if (val1->tv_sec > val2->tv_sec)
+    return FALSE;
+  
+  /* val1->tv_sec == val2->tv_sec */
+  if (val1->tv_usec < val2->tv_usec)
+    return TRUE;
+  
+  return FALSE;
+}
+
+static gboolean
+g_timeval_eq (GTimeVal *val1, 
+              GTimeVal *val2)
+{
+  return (val1->tv_sec == val2->tv_sec) && (val1->tv_usec == val2->tv_usec);
+}
+
+static void
+ik_pair_events (ik_event_internal_t *event1, 
+                ik_event_internal_t *event2)
+{
+  g_assert (event1 && event2);
+  /* We should only be pairing events that have the same cookie */
+  g_assert (event1->event->cookie == event2->event->cookie);
+  /* We shouldn't pair an event that already is paired */
+  g_assert (event1->pair == NULL && event2->pair == NULL);
+  
+  /* Pair the internal structures and the ik_event_t structures */
+  event1->pair = event2;
+  event1->event->pair = event2->event;
+  
+  if (g_timeval_lt (&event1->hold_until, &event2->hold_until))
+    event1->hold_until = event2->hold_until;
+  
+  event2->hold_until = event1->hold_until;
+}
+
+static void
+ik_event_add_microseconds (ik_event_internal_t *event, 
+                           glong                ms)
+{
+  g_assert (event);
+  g_time_val_add (&event->hold_until, ms);
+}
+
+static gboolean
+ik_event_ready (ik_event_internal_t *event)
+{
+  GTimeVal tv;
+  g_assert (event);
+  
+  g_get_current_time (&tv);
+  
+  /* An event is ready if,
+   *
+   * it has no cookie -- there is nothing to be gained by holding it
+   * or, it is already paired -- we don't need to hold it anymore
+   * or, we have held it long enough
+   */
+  return
+    event->event->cookie == 0 ||
+    event->pair != NULL ||
+    g_timeval_lt (&event->hold_until, &tv) ||
+    g_timeval_eq (&event->hold_until, &tv);
+}
+
+static void
+ik_pair_moves (gpointer data, 
+               gpointer user_data)
+{
+  ik_event_internal_t *event = (ik_event_internal_t *)data;
+  
+  if (event->seen == TRUE || event->sent == TRUE)
+    return;
+  
+  if (event->event->cookie != 0)
+    {
+      /* When we get a MOVED_FROM event we delay sending the event by
+       * MOVE_HOLD_UNTIL_TIME microseconds. We need to do this because a
+       * MOVED_TO pair _might_ be coming in the near future */
+      if (event->event->mask & IN_MOVED_FROM)
+	{
+	  g_hash_table_insert (cookie_hash, GINT_TO_POINTER (event->event->cookie), event);
+	  /* because we don't deliver move events there is no point in waiting for the match right now. */
+	  ik_event_add_microseconds (event, MOVE_HOLD_UNTIL_TIME);
+	}
+      else if (event->event->mask & IN_MOVED_TO)
+	{
+	  /* We need to check if we are waiting for this MOVED_TO events cookie to pair it with
+	   * a MOVED_FROM */
+	  ik_event_internal_t *match = NULL;
+	  match = g_hash_table_lookup (cookie_hash, GINT_TO_POINTER (event->event->cookie));
+	  if (match)
+	    {
+	      g_hash_table_remove (cookie_hash, GINT_TO_POINTER (event->event->cookie));
+	      ik_pair_events (match, event);
+	    }
+	}
+    }
+  event->seen = TRUE;
+}
+
+static void
+ik_process_events (void)
+{
+  g_queue_foreach (events_to_process, ik_pair_moves, NULL);
+
+  while (!g_queue_is_empty (events_to_process))
+    {
+      ik_event_internal_t *event = g_queue_peek_head (events_to_process);
+      
+      /* This must have been sent as part of a MOVED_TO/MOVED_FROM */
+      if (event->sent)
+	{
+	  /* Pop event */
+	  g_queue_pop_head (events_to_process);
+	  /* Free the internal event structure */
+	  g_free (event);
+	  continue;
+	}
+      
+      /* The event isn't ready yet */
+      if (!ik_event_ready (event))
+	break;
+      
+      /* Pop it */
+      event = g_queue_pop_head (events_to_process);
+      
+      /* Check if this is a MOVED_FROM that is also sitting in the cookie_hash */
+      if (event->event->cookie && event->pair == NULL &&
+	  g_hash_table_lookup (cookie_hash, GINT_TO_POINTER (event->event->cookie)))
+	g_hash_table_remove (cookie_hash, GINT_TO_POINTER (event->event->cookie));
+      
+      if (event->pair)
+	{
+	  /* We send out paired MOVED_FROM/MOVED_TO events in the same event buffer */
+	  /* g_assert (event->event->mask == IN_MOVED_FROM && event->pair->event->mask == IN_MOVED_TO); */
+	  /* Copy the paired data */
+	  event->pair->sent = TRUE;
+	  event->sent = TRUE;
+	  ik_move_matches++;
+	}
+      else if (event->event->cookie)
+	{
+	  /* If we couldn't pair a MOVED_FROM and MOVED_TO together, we change
+	   * the event masks */
+	  /* Changeing MOVED_FROM to DELETE and MOVED_TO to create lets us make
+	   * the gaurantee that you will never see a non-matched MOVE event */
+	  
+	  if (event->event->mask & IN_MOVED_FROM)
+	    {
+	      event->event->mask = IN_DELETE|(event->event->mask & IN_ISDIR);
+	      ik_move_misses++; /* not super accurate, if we aren't watching the destination it still counts as a miss */
+	    }
+	  if (event->event->mask & IN_MOVED_TO)
+	    event->event->mask = IN_CREATE|(event->event->mask & IN_ISDIR);
+	}
+      
+      /* Push the ik_event_t onto the event queue */
+      g_queue_push_tail (event_queue, event->event);
+      /* Free the internal event structure */
+      g_free (event);
+    }
+}
+
+static gboolean
+ik_process_eq_callback (gpointer user_data)
+{
+  gboolean res;
+  
+  /* Try and move as many events to the event queue */
+  G_LOCK (inotify_lock);
+  ik_process_events ();
+  
+  while (!g_queue_is_empty (event_queue))
+    {
+      ik_event_t *event = g_queue_pop_head (event_queue);
+      
+      user_cb (event);
+    }
+
+  res = TRUE;
+  
+  if (g_queue_get_length (events_to_process) == 0)
+    {
+      process_eq_running = FALSE;
+      res = FALSE;
+    }
+  
+  G_UNLOCK (inotify_lock);
+  
+  return res;
+}
diff --git a/gio/inotify/inotify-kernel.h b/gio/inotify/inotify-kernel.h
new file mode 100644
index 0000000..b406d71
--- /dev/null
+++ b/gio/inotify/inotify-kernel.h
@@ -0,0 +1,55 @@
+/*
+   Copyright (C) 2005 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors:.
+		John McCutchan <john@johnmccutchan.com>
+*/
+
+#ifndef __INOTIFY_KERNEL_H
+#define __INOTIFY_KERNEL_H
+
+typedef struct ik_event_s {
+  gint32 wd;
+  guint32 mask;
+  guint32 cookie;
+  guint32 len;
+  char *  name;
+  struct ik_event_s *pair;
+} ik_event_t;
+
+gboolean _ik_startup (void (*cb) (ik_event_t *event));
+
+ik_event_t *_ik_event_new_dummy (const char *name,
+				 gint32      wd,
+				 guint32     mask);
+void        _ik_event_free      (ik_event_t *event);
+
+gint32      _ik_watch           (const char *path,
+				 guint32     mask,
+				 int        *err);
+int         _ik_ignore          (const char *path,
+				 gint32      wd);
+
+
+/* The miss count will probably be enflated */
+void        _ik_move_stats     (guint32 *matches,
+				guint32 *misses);
+const char *_ik_mask_to_string (guint32  mask);
+
+
+#endif
diff --git a/gio/inotify/inotify-missing.c b/gio/inotify/inotify-missing.c
new file mode 100644
index 0000000..d19332a
--- /dev/null
+++ b/gio/inotify/inotify-missing.c
@@ -0,0 +1,167 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */
+
+/* inotify-helper.c - Gnome VFS Monitor based on inotify.
+
+   Copyright (C) 2005 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: 
+		 John McCutchan <john@johnmccutchan.com>
+*/
+
+#include "config.h"
+#include <glib.h>
+#include "inotify-missing.h"
+#include "inotify-path.h"
+
+#define SCAN_MISSING_TIME 4 /* 1/4 Hz */
+
+static gboolean im_debug_enabled = FALSE;
+#define IM_W if (im_debug_enabled) g_warning
+
+/* We put inotify_sub's that are missing on this list */
+static GList *missing_sub_list = NULL;
+static gboolean im_scan_missing (gpointer user_data);
+static gboolean scan_missing_running = FALSE;
+static void (*missing_cb)(inotify_sub *sub) = NULL;
+
+G_LOCK_EXTERN (inotify_lock);
+
+/* inotify_lock must be held before calling */
+void
+_im_startup (void (*callback)(inotify_sub *sub))
+{
+  static gboolean initialized = FALSE;
+  
+  if (!initialized)
+    {
+      missing_cb = callback;
+      initialized = TRUE;
+    }
+}
+
+/* inotify_lock must be held before calling */
+void
+_im_add (inotify_sub *sub)
+{
+  if (g_list_find (missing_sub_list, sub))
+    {
+      IM_W ("asked to add %s to missing list but it's already on the list!\n", sub->dirname);
+      return;
+    }
+
+  IM_W ("adding %s to missing list\n", sub->dirname);
+  missing_sub_list = g_list_prepend (missing_sub_list, sub);
+
+  /* If the timeout is turned off, we turn it back on */
+  if (!scan_missing_running)
+    {
+      scan_missing_running = TRUE;
+      g_timeout_add_seconds (SCAN_MISSING_TIME, im_scan_missing, NULL);
+    }
+}
+
+/* inotify_lock must be held before calling */
+void
+_im_rm (inotify_sub *sub)
+{
+  GList *link;
+  
+  link = g_list_find (missing_sub_list, sub);
+
+  if (!link)
+    {
+      IM_W ("asked to remove %s from missing list but it isn't on the list!\n", sub->dirname);
+      return;
+    }
+
+  IM_W ("removing %s from missing list\n", sub->dirname);
+
+  missing_sub_list = g_list_remove_link (missing_sub_list, link);
+  g_list_free_1 (link);
+}
+
+/* Scans the list of missing subscriptions checking if they
+ * are available yet.
+ */
+static gboolean
+im_scan_missing (gpointer user_data)
+{
+  GList *nolonger_missing = NULL;
+  GList *l;
+  
+  G_LOCK (inotify_lock);
+  
+  IM_W ("scanning missing list with %d items\n", g_list_length (missing_sub_list));
+  for (l = missing_sub_list; l; l = l->next)
+    {
+      inotify_sub *sub = l->data;
+      gboolean not_m = FALSE;
+      
+      IM_W ("checking %p\n", sub);
+      g_assert (sub);
+      g_assert (sub->dirname);
+      not_m = _ip_start_watching (sub);
+
+      if (not_m)
+	{
+	  missing_cb (sub);
+	  IM_W ("removed %s from missing list\n", sub->dirname);
+	  /* We have to build a list of list nodes to remove from the
+	   * missing_sub_list. We do the removal outside of this loop.
+	   */
+	  nolonger_missing = g_list_prepend (nolonger_missing, l);
+	} 
+    }
+
+  for (l = nolonger_missing; l ; l = l->next)
+    {
+      GList *llink = l->data;
+      missing_sub_list = g_list_remove_link (missing_sub_list, llink);
+      g_list_free_1 (llink);
+    }
+
+  g_list_free (nolonger_missing);
+  
+  /* If the missing list is now empty, we disable the timeout */
+  if (missing_sub_list == NULL)
+    {
+      scan_missing_running = FALSE;
+      G_UNLOCK (inotify_lock);
+      return FALSE;
+    }
+  else
+    {
+      G_UNLOCK (inotify_lock);
+      return TRUE;
+    }
+}
+
+
+/* inotify_lock must be held */
+void
+_im_diag_dump (GIOChannel *ioc)
+{
+  GList *l;
+  g_io_channel_write_chars (ioc, "missing list:\n", -1, NULL, NULL);
+  for (l = missing_sub_list; l; l = l->next)
+    {
+      inotify_sub *sub = l->data;
+      g_io_channel_write_chars (ioc, sub->dirname, -1, NULL, NULL);
+      g_io_channel_write_chars (ioc, "\n", -1, NULL, NULL);
+    }
+}
diff --git a/gio/inotify/inotify-missing.h b/gio/inotify/inotify-missing.h
new file mode 100644
index 0000000..b67b595
--- /dev/null
+++ b/gio/inotify/inotify-missing.h
@@ -0,0 +1,35 @@
+/* inotify-helper.h - GNOME VFS Monitor using inotify
+
+   Copyright (C) 2006 John McCutchan <john@johnmccutchan.com>
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Author: John McCutchan <ttb@tentacle.dhs.org>
+*/
+
+
+#ifndef __INOTIFY_MISSING_H
+#define __INOTIFY_MISSING_H
+
+#include "inotify-sub.h"
+
+void _im_startup   (void (*missing_cb)(inotify_sub *sub));
+void _im_add       (inotify_sub *sub);
+void _im_rm        (inotify_sub *sub);
+void _im_diag_dump (GIOChannel  *ioc);
+
+
+#endif /* __INOTIFY_MISSING_H */
diff --git a/gio/inotify/inotify-path.c b/gio/inotify/inotify-path.c
new file mode 100644
index 0000000..3327598
--- /dev/null
+++ b/gio/inotify/inotify-path.c
@@ -0,0 +1,422 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */
+
+/* inotify-path.c - GVFS Directory Monitor based on inotify.
+
+   Copyright (C) 2006 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors:
+		 John McCutchan <john@johnmccutchan.com>
+*/
+
+#include "config.h"
+
+/* Don't put conflicting kernel types in the global namespace: */
+#define __KERNEL_STRICT_NAMES
+
+#include <sys/inotify.h>
+#include <string.h>
+#include <glib.h>
+#include "inotify-kernel.h"
+#include "inotify-path.h"
+#include "inotify-missing.h"
+
+#define IP_INOTIFY_MASK (IN_MODIFY|IN_ATTRIB|IN_MOVED_FROM|IN_MOVED_TO|IN_DELETE|IN_CREATE|IN_DELETE_SELF|IN_UNMOUNT|IN_MOVE_SELF|IN_CLOSE_WRITE)
+
+/* Older libcs don't have this */
+#ifndef IN_ONLYDIR
+#define IN_ONLYDIR 0  
+#endif
+
+typedef struct ip_watched_dir_s {
+  char *path;
+  /* TODO: We need to maintain a tree of watched directories
+   * so that we can deliver move/delete events to sub folders.
+   * Or the application could do it...
+   */
+  struct ip_watched_dir_s* parent;
+  GList*	 children;
+
+  /* Inotify state */
+  gint32 wd;
+  
+  /* List of inotify subscriptions */
+  GList *subs;
+} ip_watched_dir_t;
+
+static gboolean     ip_debug_enabled = FALSE;
+#define IP_W if (ip_debug_enabled) g_warning
+
+/* path -> ip_watched_dir */
+static GHashTable * path_dir_hash = NULL;
+/* inotify_sub * -> ip_watched_dir *
+ *
+ * Each subscription is attached to a watched directory or it is on
+ * the missing list
+ */
+static GHashTable * sub_dir_hash = NULL;
+/* This hash holds GLists of ip_watched_dir_t *'s
+ * We need to hold a list because symbolic links can share
+ * the same wd
+ */
+static GHashTable * wd_dir_hash = NULL;
+
+static ip_watched_dir_t *ip_watched_dir_new  (const char       *path,
+					      int               wd);
+static void              ip_watched_dir_free (ip_watched_dir_t *dir);
+static void              ip_event_callback   (ik_event_t       *event);
+
+
+static void (*event_callback)(ik_event_t *event, inotify_sub *sub);
+
+gboolean
+_ip_startup (void (*cb)(ik_event_t *event, inotify_sub *sub))
+{
+  static gboolean initialized = FALSE;
+  static gboolean result = FALSE;
+  
+  if (initialized == TRUE)
+    return result;
+
+  event_callback = cb;
+  result = _ik_startup (ip_event_callback);
+
+  if (!result)
+    return FALSE;
+
+  path_dir_hash = g_hash_table_new (g_str_hash, g_str_equal);
+  sub_dir_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
+  wd_dir_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
+  
+  initialized = TRUE;
+  return TRUE;
+}
+
+static void
+ip_map_path_dir (const char       *path, 
+                 ip_watched_dir_t *dir)
+{
+  g_assert (path && dir);
+  g_hash_table_insert (path_dir_hash, dir->path, dir);
+}
+
+static void
+ip_map_sub_dir (inotify_sub      *sub, 
+                ip_watched_dir_t *dir)
+{
+  /* Associate subscription and directory */
+  g_assert (dir && sub);
+  g_hash_table_insert (sub_dir_hash, sub, dir);
+  dir->subs = g_list_prepend (dir->subs, sub);
+}
+
+static void
+ip_map_wd_dir (gint32            wd, 
+               ip_watched_dir_t *dir)
+{
+  GList *dir_list;
+  
+  g_assert (wd >= 0 && dir);
+  dir_list = g_hash_table_lookup (wd_dir_hash, GINT_TO_POINTER (wd));
+  dir_list = g_list_prepend (dir_list, dir);
+  g_hash_table_replace (wd_dir_hash, GINT_TO_POINTER (dir->wd), dir_list);
+}
+
+gboolean
+_ip_start_watching (inotify_sub *sub)
+{
+  gint32 wd;
+  int err;
+  ip_watched_dir_t *dir;
+  
+  g_assert (sub);
+  g_assert (!sub->cancelled);
+  g_assert (sub->dirname);
+  
+  IP_W ("Starting to watch %s\n", sub->dirname);
+  dir = g_hash_table_lookup (path_dir_hash, sub->dirname);
+  if (dir)
+    {
+      IP_W ("Already watching\n");
+      goto out;
+    }
+	
+  IP_W ("Trying to add inotify watch ");
+  wd = _ik_watch (sub->dirname, IP_INOTIFY_MASK|IN_ONLYDIR, &err);
+  if (wd < 0) 
+    {
+      IP_W ("Failed\n");
+      return FALSE;
+    }
+  else
+    {
+      /* Create new watched directory and associate it with the 
+       * wd hash and path hash
+       */
+      IP_W ("Success\n");
+      dir = ip_watched_dir_new (sub->dirname, wd);
+      ip_map_wd_dir (wd, dir);
+      ip_map_path_dir (sub->dirname, dir);
+    }
+  
+ out:
+  ip_map_sub_dir (sub, dir);
+  
+  return TRUE;
+}
+
+static void
+ip_unmap_path_dir (const char       *path, 
+                   ip_watched_dir_t *dir)
+{
+  g_assert (path && dir);
+  g_hash_table_remove (path_dir_hash, dir->path);
+}
+
+static void
+ip_unmap_wd_dir (gint32            wd, 
+                 ip_watched_dir_t *dir)
+{
+  GList *dir_list = g_hash_table_lookup (wd_dir_hash, GINT_TO_POINTER (wd));
+  
+  if (!dir_list)
+    return;
+  
+  g_assert (wd >= 0 && dir);
+  dir_list = g_list_remove (dir_list, dir);
+  if (dir_list == NULL) 
+    g_hash_table_remove (wd_dir_hash, GINT_TO_POINTER (dir->wd));
+  else
+    g_hash_table_replace (wd_dir_hash, GINT_TO_POINTER (dir->wd), dir_list);
+}
+
+static void
+ip_unmap_wd (gint32 wd)
+{
+  GList *dir_list = g_hash_table_lookup (wd_dir_hash, GINT_TO_POINTER (wd));
+  if (!dir_list)
+    return;
+  g_assert (wd >= 0);
+  g_hash_table_remove (wd_dir_hash, GINT_TO_POINTER (wd));
+  g_list_free (dir_list);
+}
+
+static void
+ip_unmap_sub_dir (inotify_sub       *sub, 
+                  ip_watched_dir_t *dir)
+{
+  g_assert (sub && dir);
+  g_hash_table_remove (sub_dir_hash, sub);
+  dir->subs = g_list_remove (dir->subs, sub);
+}
+
+static void
+ip_unmap_all_subs (ip_watched_dir_t *dir)
+{
+  GList *l = NULL;
+  
+  for (l = dir->subs; l; l = l->next)
+    {
+      inotify_sub *sub = l->data;
+      g_hash_table_remove (sub_dir_hash, sub);
+    }
+  g_list_free (dir->subs);
+  dir->subs = NULL;
+}
+
+gboolean
+_ip_stop_watching (inotify_sub *sub)
+{
+  ip_watched_dir_t *dir = NULL;
+  
+  dir = g_hash_table_lookup (sub_dir_hash, sub);
+  if (!dir) 
+    return TRUE;
+  
+  ip_unmap_sub_dir (sub, dir);
+  
+  /* No one is subscribing to this directory any more */
+  if (dir->subs == NULL)
+    {
+      _ik_ignore (dir->path, dir->wd);
+      ip_unmap_wd_dir (dir->wd, dir);
+      ip_unmap_path_dir (dir->path, dir);
+      ip_watched_dir_free (dir);
+    }
+  
+  return TRUE;
+}
+
+
+static ip_watched_dir_t *
+ip_watched_dir_new (const char *path, 
+                    gint32      wd)
+{
+  ip_watched_dir_t *dir = g_new0 (ip_watched_dir_t, 1);
+  
+  dir->path = g_strdup (path);
+  dir->wd = wd;
+  
+  return dir;
+}
+
+static void
+ip_watched_dir_free (ip_watched_dir_t *dir)
+{
+  g_assert (dir->subs == NULL);
+  g_free (dir->path);
+  g_free (dir);
+}
+
+static void
+ip_wd_delete (gpointer data, 
+              gpointer user_data)
+{
+  ip_watched_dir_t *dir = data;
+  GList *l = NULL;
+  
+  for (l = dir->subs; l; l = l->next)
+    {
+      inotify_sub *sub = l->data;
+      /* Add subscription to missing list */
+      _im_add (sub);
+    }
+  ip_unmap_all_subs (dir);
+  /* Unassociate the path and the directory */
+  ip_unmap_path_dir (dir->path, dir);
+  ip_watched_dir_free (dir);
+}
+
+static void
+ip_event_dispatch (GList      *dir_list, 
+                   GList      *pair_dir_list, 
+                   ik_event_t *event)
+{
+  GList *dirl;
+  
+  if (!event)
+    return;
+
+  for (dirl = dir_list; dirl; dirl = dirl->next)
+    {
+      GList *subl;
+      ip_watched_dir_t *dir = dirl->data;
+      
+      for (subl = dir->subs; subl; subl = subl->next)
+	{
+	  inotify_sub *sub = subl->data;
+	  
+	  /* If the subscription and the event
+	   * contain a filename and they don't
+	   * match, we don't deliver this event.
+	   */
+	  if (sub->filename &&
+	      event->name &&
+	      strcmp (sub->filename, event->name))
+	    continue;
+	  
+	  /* If the subscription has a filename
+	   * but this event doesn't, we don't
+	   * deliever this event.
+	   */
+	  if (sub->filename && !event->name)
+	    continue;
+	  
+	  /* FIXME: We might need to synthesize
+	   * DELETE/UNMOUNT events when
+	   * the filename doesn't match
+	   */
+	  
+	  event_callback (event, sub);
+	}
+    }
+  
+  if (!event->pair)
+    return;
+  
+  for (dirl = pair_dir_list; dirl; dirl = dirl->next)
+    {
+      GList *subl;
+      ip_watched_dir_t *dir = dirl->data;
+      
+      for (subl = dir->subs; subl; subl = subl->next)
+	{
+	  inotify_sub *sub = subl->data;
+	  
+	  /* If the subscription and the event
+	   * contain a filename and they don't
+	   * match, we don't deliver this event.
+	   */
+	  if (sub->filename &&
+	      event->pair->name &&
+	      strcmp (sub->filename, event->pair->name))
+	    continue;
+	  
+	  /* If the subscription has a filename
+	   * but this event doesn't, we don't
+	   * deliever this event.
+	   */
+	  if (sub->filename && !event->pair->name)
+	    continue;
+	  
+	  /* FIXME: We might need to synthesize
+	   * DELETE/UNMOUNT events when
+	   * the filename doesn't match
+	   */
+	  
+	  event_callback (event->pair, sub);
+	}
+    }
+}
+
+static void
+ip_event_callback (ik_event_t *event)
+{
+  GList* dir_list = NULL;
+  GList* pair_dir_list = NULL;
+  
+  dir_list = g_hash_table_lookup (wd_dir_hash, GINT_TO_POINTER (event->wd));
+  
+  /* We can ignore the IGNORED events */
+  if (event->mask & IN_IGNORED)
+    {
+      _ik_event_free (event);
+      return;
+    }
+
+  if (event->pair)
+    pair_dir_list = g_hash_table_lookup (wd_dir_hash, GINT_TO_POINTER (event->pair->wd));
+
+  if (event->mask & IP_INOTIFY_MASK)
+    ip_event_dispatch (dir_list, pair_dir_list, event);
+  
+  /* We have to manage the missing list
+   * when we get an event that means the
+   * file has been deleted/moved/unmounted.
+   */
+  if (event->mask & IN_DELETE_SELF ||
+      event->mask & IN_MOVE_SELF ||
+      event->mask & IN_UNMOUNT)
+    {
+      /* Add all subscriptions to missing list */
+      g_list_foreach (dir_list, ip_wd_delete, NULL);
+      /* Unmap all directories attached to this wd */
+      ip_unmap_wd (event->wd);
+    }
+  
+  _ik_event_free (event);
+}
diff --git a/gio/inotify/inotify-path.h b/gio/inotify/inotify-path.h
new file mode 100644
index 0000000..c613b9f
--- /dev/null
+++ b/gio/inotify/inotify-path.h
@@ -0,0 +1,33 @@
+/*
+   Copyright (C) 2005 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors:.
+		John McCutchan <john@johnmccutchan.com>
+*/
+
+#ifndef __INOTIFY_PATH_H
+#define __INOTIFY_PATH_H
+
+#include "inotify-kernel.h"
+#include "inotify-sub.h"
+
+gboolean _ip_startup (void (*event_cb)(ik_event_t *event, inotify_sub *sub));
+gboolean _ip_start_watching (inotify_sub *sub);
+gboolean _ip_stop_watching  (inotify_sub *sub);
+
+#endif
diff --git a/gio/inotify/inotify-sub.c b/gio/inotify/inotify-sub.c
new file mode 100644
index 0000000..2b71c93
--- /dev/null
+++ b/gio/inotify/inotify-sub.c
@@ -0,0 +1,70 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 8 -*- */
+
+/* inotify-sub.c - GMonitor based on inotify.
+
+   Copyright (C) 2006 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: 
+		 John McCutchan <john@johnmccutchan.com>
+*/
+
+#include "config.h"
+#include <string.h>
+#include <glib.h>
+
+#include "inotify-sub.h"
+
+static gboolean is_debug_enabled = FALSE;
+#define IS_W if (is_debug_enabled) g_warning
+
+static gchar*
+dup_dirname (const gchar *dirname)
+{
+  gchar *d_dirname = g_strdup (dirname);
+  size_t len = strlen (d_dirname);
+  
+  if (d_dirname[len - 1] == '/')
+    d_dirname[len - 1] = '\0';
+  
+  return d_dirname;
+}
+
+inotify_sub*
+_ih_sub_new (const gchar *dirname, 
+             const gchar *filename, 
+             gpointer     user_data)
+{
+  inotify_sub *sub = NULL;
+  
+  sub = g_new0 (inotify_sub, 1);
+  sub->dirname = dup_dirname (dirname);
+  sub->filename = g_strdup (filename);
+  sub->user_data = user_data;
+  
+  IS_W ("new subscription for %s being setup\n", sub->dirname);
+  
+  return sub;
+}
+
+void
+_ih_sub_free (inotify_sub *sub)
+{
+  g_free (sub->dirname);
+  g_free (sub->filename);
+  g_free (sub);
+}
diff --git a/gio/inotify/inotify-sub.h b/gio/inotify/inotify-sub.h
new file mode 100644
index 0000000..36561e7
--- /dev/null
+++ b/gio/inotify/inotify-sub.h
@@ -0,0 +1,38 @@
+/* inotify-sub.h - GVFS Directory Monitor using inotify
+
+   Copyright (C) 2006 John McCutchan
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Author: John McCutchan <john@johnmccutchan.com>
+*/
+
+
+#ifndef __INOTIFY_SUB_H
+#define __INOTIFY_SUB_H
+
+typedef struct
+{
+	gchar*   dirname;
+	gchar*   filename;
+	gboolean cancelled;
+	gpointer user_data;
+} inotify_sub;
+
+inotify_sub* _ih_sub_new (const gchar* dirname, const gchar* filename, gpointer user_data);
+void         _ih_sub_free (inotify_sub* sub);
+
+#endif /* __INOTIFY_SUB_H */
diff --git a/gio/makefile.msc b/gio/makefile.msc
new file mode 100644
index 0000000..906ec40
--- /dev/null
+++ b/gio/makefile.msc
@@ -0,0 +1,271 @@
+# autogenerated from automake.am with automake.py
+TOP = ..\..
+PRJ_TOP = ..
+PACKAGE = gio
+PKG_VER = 2.0
+!INCLUDE $(TOP)\glib\build\win32\make.msc
+
+# SUBDIRS = fam
+
+sub-all: 
+	for %d in ($(SUBDIRS)) do nmake -nologo -f makefile.msc sub-one THIS=%d
+
+sub-one:
+	cd $(THIS)
+	nmake -nologo -f makefile.msc
+	cd ..
+
+INCLUDES = \
+	-FImsvc_recommended_pragmas.h \
+	-I .. -I ..\glib -I ..\gmodule -I . \
+	$(INTL_CFLAGS)
+
+DEFINES = \
+	-DG_LOG_DOMAIN=\"GLib-GIO\" \
+	-DGIO_MODULE_DIR=\"$(libdir)/gio/modules\" \
+	-DGIO_COMPILATION
+
+appinfo_sources = \
+	gwin32appinfo.c gwin32appinfo.h
+
+gio_headers =			\
+	gappinfo.h 		\
+	gasyncresult.h 		\
+	gbufferedinputstream.h 	\
+	gbufferedoutputstream.h \
+	gcancellable.h 		\
+	gcontenttype.h 		\
+	gdatainputstream.h 	\
+	gdataoutputstream.h 	\
+	gdrive.h 		\
+	gemblemedicon.h		\
+	gfile.h 		\
+	gfileattribute.h 	\
+	gfileenumerator.h 	\
+	gfileicon.h 		\
+	gfileinfo.h 		\
+	gfileinputstream.h 	\
+	gfilemonitor.h 		\
+	gfilenamecompleter.h 	\
+	gfileoutputstream.h 	\
+	gfilterinputstream.h 	\
+	gfilteroutputstream.h 	\
+	gicon.h 		\
+	ginputstream.h 		\
+	gio.h			\
+	giotypes.h		\
+	gioenums.h		\
+	gioerror.h 		\
+	giomodule.h 		\
+	gioscheduler.h 		\
+	gloadableicon.h 	\
+	gmount.h 		\
+	gmemoryinputstream.h 	\
+	gmemoryoutputstream.h 	\
+	gmountoperation.h 	\
+	gnativevolumemonitor.h 	\
+	goutputstream.h 	\
+	gseekable.h 		\
+	gsimpleasyncresult.h 	\
+	gthemedicon.h 		\
+	gvfs.h 			\
+	gvolume.h 		\
+	gvolumemonitor.h 	\
+	$(NULL)
+
+OBJECTS = \
+	gappinfo.obj \
+	gasynchelper.obj \
+	gasyncresult.obj \
+	gbufferedinputstream.obj \
+	gbufferedoutputstream.obj \
+	gcancellable.obj \
+	gcontenttype.obj \
+	gdatainputstream.obj \
+	gdataoutputstream.obj \
+#	gdesktopappinfo.obj \
+	gdrive.obj \
+	gdummyfile.obj \
+	gemblemedicon.obj \
+	gfile.obj \
+	gfileattribute.obj \
+	gfileenumerator.obj \
+	gfileicon.obj \
+	gfileinfo.obj \
+	gfileinputstream.obj \
+	gfilemonitor.obj \
+	gfilenamecompleter.obj \
+	gfileoutputstream.obj \
+	gfilterinputstream.obj \
+	gfilteroutputstream.obj \
+	gicon.obj \
+	ginputstream.obj \
+	gioenumtypes.obj \
+	gioerror.obj \
+	giomodule.obj \
+	gioscheduler.obj \
+	gloadableicon.obj \
+	gmemoryinputstream.obj \
+	gmemoryoutputstream.obj \
+	gmount.obj \
+	gmountoperation.obj \
+	gnativevolumemonitor.obj \
+	goutputstream.obj \
+	gpollfilemonitor.obj \
+	gseekable.obj \
+	gsimpleasyncresult.obj \
+#	gsocketinputstream.obj \
+#	gsocketoutputstream.obj \
+	gthemedicon.obj \
+	gunionvolumemonitor.obj \
+	gvfs.obj \
+	gvolume.obj \
+	gvolumemonitor.obj \
+	\
+	glocalvfs.obj \
+	glocalfile.obj \
+	glocalfileenumerator.obj \
+	glocalfileinfo.obj \
+	glocalfileinputstream.obj \
+	glocalfileoutputstream.obj \
+	glocalfilemonitor.obj \
+	glocaldirectorymonitor.obj \
+	gwin32appinfo.obj \
+	\
+	gio-marshal.obj \
+	gwin32directorymonitor.obj \
+	gwin32mount.obj \
+#	gwin32volume.obj \
+	gwin32volumemonitor.obj
+
+libgio_2_0_la_LIBADD = \
+	$(top_builddir)/glib/libglib-2.0.la \
+	$(top_builddir)/gobject/libgobject-2.0.la \
+	$(top_builddir)/gmodule/libgmodule-2.0.la \
+	$(platform_libadd) \
+	$(SELINUX_LIBS) \
+	$(GLIB_LIBS) \
+	$(XATTR_LIBS) \
+	$(NULL)
+
+unix_sources = \
+	gunixdrive.c \
+	gunixdrive.h \
+	gunixmounts.c \
+	gunixmounts.h \
+	gunixvolume.c \
+	gunixvolume.h \
+	gunixvolumemonitor.c \
+	gunixvolumemonitor.h \
+	$(NULL)
+
+NULL = \
+	
+
+libgio_2_0_la_LDFLAG = \
+	-export-dynamic \
+	$(no_undefined) \
+	-export-symbols-regex \
+	'^g_.*'
+
+giounixincludedi = \
+	$(includedir)/gio-unix-2.0/gio
+
+platform_libadd = \
+	-lshlwapi
+
+marshal_sources = \
+	gio-marshal.h gio-marshal.c $(NULL)
+
+gioincludedi = \
+	$(includedir)/glib-2.0/gio/
+
+EXTRA_DIST = \
+	gio-marshal.list $(NULL)
+
+CLEANFILES = \
+	$(marshal_sources) $(NULL)
+
+no_undefined = \
+	-no-undefined
+
+giounixinclude_HEADERS = \
+	gunixmounts.h $(NULL)
+
+GLIB_GEN_MARSHAL = ..\gobject\glib-genmarshal.exe 
+
+gio-marshal.h: gio-marshal.list
+	$(GLIB_GEN_MARSHAL) --prefix=_gio_marshal gio-marshal.list --header >> xgen-gwmh \
+	&& copy /y xgen-gwmh gio-marshal.h \
+	&& del xgen-gwmh xgen-gwmh~
+
+gio-marshal.c: gio-marshal.h
+	echo #include "gio-marshal.h" >> xgen-gwmc \
+	&& $(GLIB_GEN_MARSHAL) --prefix=_gio_marshal gio-marshal.list --body >> xgen-gwmc \
+	&& copy xgen-gwmc gio-marshal.c \
+	&& del xgen-gwmc xgen-gwmc~
+
+local_sources = \
+	glocaldirectorymonitor.c \
+	glocaldirectorymonitor.h \
+	glocalfile.c \
+	glocalfile.h \
+	glocalfileenumerator.c \
+	glocalfileenumerator.h \
+	glocalfileinfo.c \
+	glocalfileinfo.h \
+	glocalfileinputstream.c \
+	glocalfileinputstream.h \
+	glocalfilemonitor.c \
+	glocalfilemonitor.h \
+	glocalfileoutputstream.c \
+	glocalfileoutputstream.h \
+	glocalvfs.c \
+	glocalvfs.h \
+	$(NULL)
+
+all : \
+	$(PRJ_TOP)\config.h \
+	gioalias.h		\
+	gioaliasdef.c		\
+	gio-marshal.c \
+	gioenumtypes.h		\
+	gioenumtypes.c		\
+	libgio-$(PKG_VER).dll
+
+
+$(PRJ_TOP)\config.h: $(PRJ_TOP)\config.h.win32
+	copy $(PRJ_TOP)\config.h.win32 $(PRJ_TOP)\config.h
+
+gioalias.h: gio.symbols
+	perl ..\glib\makegalias.pl < gio.symbols > gioalias.h
+
+gioaliasdef.c: gio.symbols
+	  perl ..\glib\makegalias.pl -def < gio.symbols > gioaliasdef.c
+
+gioenumtypes.h: $(gio_headers) gioenumtypes.h.template
+	$(PERL) ..\gobject\glib-mkenums --template gioenumtypes.h.template $(gio_headers) > gioenumtypes.h
+	
+gioenumtypes.c: $(gio_headers) gioenumtypes.c.template
+	$(PERL) ..\gobject\glib-mkenums --template gioenumtypes.c.template $(gio_headers) > gioenumtypes.c
+
+gio.def: gio.symbols
+	echo EXPORTS > gio.def
+	cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES \
+		-DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= \
+		-DG_GNUC_PRINTF=;G_GNUC_PRINTF gio.symbols >> gio.def
+
+gwin32directorymonitor.obj : win32\gwin32directorymonitor.c 
+	$(CC) $(CFLAGS) -I win32 -c win32\gwin32directorymonitor.c
+
+RESOURCE = $(PACKAGE).res
+
+libgio-$(PKG_VER).dll : $(OBJECTS) $(PACKAGE).def
+	$(CC) $(CFLAGS) -LD -Felibgio-$(PKG_VER).dll $(OBJECTS) \
+	..\glib\glib-2.0.lib ..\gobject\gobject-2.0.lib ..\gmodule\gmodule-2.0.lib \
+	$(INTL_LIBS) \
+	kernel32.lib user32.lib advapi32.lib shell32.lib wsock32.lib mpr.lib $(LDFLAGS) \
+	/implib:gio-2.0.lib /def:$(PACKAGE).def
+
+.c.obj :
+	$(CC) $(CFLAGS) -c $(PKG_CFLAGS) $<
diff --git a/gio/makegioalias.pl b/gio/makegioalias.pl
new file mode 100755
index 0000000..b4ae319
--- /dev/null
+++ b/gio/makegioalias.pl
@@ -0,0 +1,137 @@
+#!/usr/bin/perl -w
+
+my $do_def = 0;
+
+if (($#ARGV >= 0) && ($ARGV[0] eq "-def")) {
+    shift;
+    $do_def = 1;
+}
+
+print <<EOF;
+/* Generated by makegioalias.pl */
+
+#ifndef DISABLE_VISIBILITY
+
+#include "glib.h"
+
+#ifdef G_HAVE_GNUC_VISIBILITY
+
+EOF
+
+if ($do_def) {
+    print <<EOF
+#undef IN_FILE
+#define IN_FILE defined
+
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+EOF
+} 
+else { 
+    print <<EOF
+#define IN_FILE(x) 1
+#define IN_HEADER defined
+
+EOF
+}
+
+my $in_comment = 0;
+my $in_skipped_section = 0;
+
+while (<>) {
+
+  # ignore empty lines
+  next if /^\s*$/;
+
+  # skip comments
+  if ($_ =~ /^\s*\/\*/)
+  {
+      $in_comment = 1;
+  }
+  
+  if ($in_comment)
+  {
+      if ($_ =~  /\*\/\s$/)
+      {
+	  $in_comment = 0;
+      }
+      
+      next;
+  }
+
+  # handle ifdefs
+  if ($_ =~ /^\#endif/)
+  {
+      if (!$in_skipped_section)
+      {
+	  print $_;
+      }
+
+      $in_skipped_section = 0;
+
+      next;
+  }
+
+  if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
+  {
+      $in_skipped_section = 1;
+  }
+
+  if ($in_skipped_section)
+  {
+      next;
+  }
+
+  if ($_ =~ /^\#ifn?def\s+G/)
+  {
+      print $_;
+      
+      next;
+  }
+ 
+  if ($_ =~ /^\#if.*(IN_FILE|IN_HEADER)/)
+  {
+      print $_;
+      
+      next;
+  }
+
+  chop;
+  my $str = $_;
+  my @words;
+  my $attributes = "";
+
+  @words = split(/ /, $str);
+  $str = shift(@words);
+  chomp($str);
+  my $alias = "IA__".$str;
+  
+  # Drop any Win32 specific .def file syntax,  but keep attributes
+  foreach $word (@words) {
+      $attributes = "$attributes $word" unless $word eq "PRIVATE";
+  }
+  
+  if (!$do_def) {
+    print <<EOF
+extern __typeof ($str) $alias __attribute((visibility("hidden")))$attributes;
+\#define $str $alias
+
+EOF
+  }
+  else {
+    print <<EOF
+\#undef $str 
+extern __typeof ($str) $str __attribute((alias("$alias"), visibility("default")));
+
+EOF
+  }
+}
+
+print <<EOF;
+
+#endif /* G_HAVE_GNUC_VISIBILITY */
+#endif /* DISABLE_VISIBILITY */
+EOF
+
+
diff --git a/gio/pltcheck.sh b/gio/pltcheck.sh
new file mode 100755
index 0000000..e09a587
--- /dev/null
+++ b/gio/pltcheck.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+LANG=C
+
+status=0
+
+if ! which readelf 2>/dev/null >/dev/null; then
+	echo "'readelf' not found; skipping test"
+	exit 0
+fi
+
+SKIP='\<g_access\|\<g_array_\|\<g_ascii\|\<g_list_\|\<g_assertion_message\|\<g_warn_message\|\<g_atomic\|\<g_build_filename\|\<g_byte_array\|\<g_child_watch\|\<g_convert\|\<g_dir_\|\<g_error_\|\<g_clear_error\|\<g_file_error_quark\|\<g_file_get_contents\|\<g_file_set_contents\|\<g_file_test\|\<g_file_read_link\|\<g_filename_\|\<g_find_program_in_path\|\<g_free\|\<g_get_\|\<g_getenv\|\<g_hash_table_\|\<g_idle_\|\<g_intern_static_string\|\<g_io_channel_\|\<g_key_file_\|\<g_listenv\|\<g_locale_to_utf8\|\<g_log\|\<g_main_context_wakeup\|\<g_malloc\|\<g_markup_\|\<g_mkdir_\|\<g_mkstemp\|\<g_module_\|\<g_object_\|\<g_once_\|\<g_param_spec_\|\<g_path_\|\<g_printerr\|\<g_propagate_error\|\<g_ptr_array_\|\<g_qsort_\|\<g_quark_\|\<g_queue_\|\<g_realloc\|\<g_return_if_fail\|\<g_set_error\|\<g_shell_\|\<g_signal_\|\<g_slice_\|\<g_slist_\|\<g_snprintf\|\<g_source_\|\<g_spawn_\|\<g_static_\|\<g_str\|\<g_thread_pool_\|\<g_time_val_add\|\<g_timeout_\|\<g_type_\|\<g_unlink\|\<g_uri_\|\<g_utf8_\|\<g_value_\|\<g_enum_\|\<g_flags_\|\<g_checksum\|\<g_io_add_watch\|\<g_bit_\|\<g_poll\|\<g_boxed'
+
+for so in .libs/lib*.so; do
+	echo Checking $so for local PLT entries
+	readelf -r $so | grep 'JU\?MP_SLOT\?' | grep '\<g_' | grep -v $SKIP && status=1
+done
+
+exit $status
diff --git a/gio/tests/.gitignore b/gio/tests/.gitignore
new file mode 100644
index 0000000..cb94852
--- /dev/null
+++ b/gio/tests/.gitignore
@@ -0,0 +1,14 @@
+buffered-input-stream
+desktop-app-info
+g-icon
+simple-async-result
+unix-streams
+data-input-stream
+data-output-stream
+g-file
+g-file-info
+live-g-file
+memory-input-stream
+memory-output-stream
+filter-streams
+sleepy-stream
diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am
new file mode 100644
index 0000000..70a9ae8
--- /dev/null
+++ b/gio/tests/Makefile.am
@@ -0,0 +1,79 @@
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES = 			\
+	-g 			\
+	-I$(top_srcdir) 	\
+	-I$(top_srcdir)/glib 	\
+	-I$(top_srcdir)/gmodule	\
+	-I$(top_srcdir)/gobject	\
+	-I$(top_srcdir)/gio 	\
+	$(GLIB_DEBUG_FLAGS)
+
+noinst_PROGRAMS = $(TEST_PROGS)
+progs_ldadd     = 					\
+	$(top_builddir)/glib/libglib-2.0.la 		\
+	$(top_builddir)/gobject/libgobject-2.0.la	\
+	$(top_builddir)/gio/libgio-2.0.la
+
+
+TEST_PROGS +=	 		\
+	memory-input-stream 	\
+	memory-output-stream 	\
+	g-file 			\
+	g-file-info 		\
+	data-input-stream 	\
+	data-output-stream 	\
+	g-icon			\
+	buffered-input-stream	\
+	sleepy-stream		\
+	filter-streams		\
+	simple-async-result
+
+if OS_UNIX
+TEST_PROGS += live-g-file unix-streams desktop-app-info
+endif
+
+memory_input_stream_SOURCES	  = memory-input-stream.c
+memory_input_stream_LDADD	  = $(progs_ldadd)
+
+memory_output_stream_SOURCES	  = memory-output-stream.c
+memory_output_stream_LDADD	  = $(progs_ldadd)
+
+g_file_SOURCES	  = g-file.c
+g_file_LDADD	  = $(progs_ldadd)
+
+g_file_info_SOURCES	= g-file-info.c
+g_file_info_LDADD	= $(progs_ldadd)
+
+data_input_stream_SOURCES	= data-input-stream.c
+data_input_stream_LDADD		= $(progs_ldadd)
+
+data_output_stream_SOURCES	= data-output-stream.c
+data_output_stream_LDADD	= $(progs_ldadd)
+
+g_icon_SOURCES	= g-icon.c
+g_icon_LDADD	= $(progs_ldadd)
+
+buffered_input_stream_SOURCES	= buffered-input-stream.c
+buffered_input_stream_LDADD	= $(progs_ldadd)
+
+live_g_file_SOURCES	  = live-g-file.c
+live_g_file_LDADD	  = $(progs_ldadd)
+
+desktop_app_info_SOURCES  = desktop-app-info.c
+desktop_app_info_LDADD	  = $(progs_ldadd)
+
+unix_streams_SOURCES	  = unix-streams.c
+unix_streams_LDADD	  = $(progs_ldadd) \
+	$(top_builddir)/gthread/libgthread-2.0.la
+
+simple_async_result_SOURCES	= simple-async-result.c
+simple_async_result_LDADD	= $(progs_ldadd)
+
+sleepy_stream_SOURCES		= sleepy-stream.c
+sleepy_stream_LDADD		= $(progs_ldadd)
+
+filter_streams_SOURCES		= filter-streams.c
+filter_streams_LDADD		= $(progs_ldadd)
+
+DISTCLEAN_FILES = applications/mimeinfo.cache
diff --git a/gio/tests/buffered-input-stream.c b/gio/tests/buffered-input-stream.c
new file mode 100644
index 0000000..ceb38b9
--- /dev/null
+++ b/gio/tests/buffered-input-stream.c
@@ -0,0 +1,60 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Authors: Matthias Clasen <mclasen@redhat.com>
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+test_read_byte (void)
+{
+  GInputStream *base;
+  GInputStream *in;
+
+  g_test_bug ("562393");
+
+  base = g_memory_input_stream_new_from_data ("abcdefghijk", -1, NULL);
+  in = g_buffered_input_stream_new (base);
+
+  g_assert_cmpint (g_buffered_input_stream_read_byte (G_BUFFERED_INPUT_STREAM (in), NULL, NULL), ==, 'a');
+  g_assert_cmpint (g_buffered_input_stream_read_byte (G_BUFFERED_INPUT_STREAM (in), NULL, NULL), ==, 'b');
+  g_assert_cmpint (g_buffered_input_stream_read_byte (G_BUFFERED_INPUT_STREAM (in), NULL, NULL), ==, 'c');
+
+  g_assert_cmpint (g_input_stream_skip (in, 3, NULL, NULL), ==, 3);
+  
+  g_assert_cmpint (g_buffered_input_stream_read_byte (G_BUFFERED_INPUT_STREAM (in), NULL, NULL), ==, 'g');
+}
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+  g_test_bug_base ("http://bugzilla.gnome.org/");
+
+  g_test_add_func ("/buffered-input-stream/read-byte", test_read_byte);
+
+  return g_test_run();
+}
diff --git a/gio/tests/data-input-stream.c b/gio/tests/data-input-stream.c
new file mode 100644
index 0000000..d1385ca
--- /dev/null
+++ b/gio/tests/data-input-stream.c
@@ -0,0 +1,330 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Authors: Tomas Bzatek <tbzatek@redhat.com>
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_LINES 	0xFFF
+#define MAX_BYTES	0x10000	
+
+static void
+test_seek_to_start (GInputStream *stream)
+{
+  GError *error = NULL;
+  gboolean res = g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert_no_error (error);
+}
+
+static void
+test_read_lines (GDataStreamNewlineType newline_type)
+{
+  GInputStream *stream;
+  GInputStream *base_stream;
+  GError *error = NULL;
+  char *data;
+  int line;
+  const char* lines[MAX_LINES];
+  const char* endl[4] = {"\n", "\r", "\r\n", "\n"};
+  
+  /*  prepare data */
+  int i;
+  for (i = 0; i < MAX_LINES; i++)
+    lines[i] = "some_text";
+	
+  base_stream = g_memory_input_stream_new ();
+  g_assert (base_stream != NULL);
+  stream = G_INPUT_STREAM (g_data_input_stream_new (base_stream));
+  g_assert(stream != NULL);
+	
+  /*  Byte order testing */
+  g_data_input_stream_set_byte_order (G_DATA_INPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
+  g_assert_cmpint (g_data_input_stream_get_byte_order (G_DATA_INPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
+  g_data_input_stream_set_byte_order (G_DATA_INPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
+  g_assert_cmpint (g_data_input_stream_get_byte_order (G_DATA_INPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
+  
+  /*  Line ends testing */
+  g_data_input_stream_set_newline_type (G_DATA_INPUT_STREAM (stream), newline_type);
+  g_assert_cmpint (g_data_input_stream_get_newline_type (G_DATA_INPUT_STREAM (stream)), ==, newline_type);
+	
+
+  /*  Add sample data */
+  for (i = 0; i < MAX_LINES; i++) 
+    g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (base_stream),
+				    g_strconcat (lines[i], endl[newline_type], NULL), -1, NULL);
+
+  /*  Seek to the start */
+  test_seek_to_start (base_stream);
+	
+  /*  Test read line */
+  error = NULL;
+  data = (char*)1;
+  line = 0;
+  while (data)
+    {
+      gsize length = -1;
+      data = g_data_input_stream_read_line (G_DATA_INPUT_STREAM (stream), &length, NULL, &error);
+      if (data)
+	{
+	  g_assert_cmpstr (data, ==, lines[line]);
+	  g_assert_no_error (error);
+	  line++;
+	}
+    }
+  g_assert_cmpint (line, ==, MAX_LINES);
+  
+  
+  g_object_unref (base_stream);
+  g_object_unref (stream);
+}
+
+static void
+test_read_lines_LF (void)
+{
+  test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_LF);
+}
+
+static void
+test_read_lines_CR (void)
+{
+  test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_CR);
+}
+
+static void
+test_read_lines_CR_LF (void)
+{
+  test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_CR_LF);
+}
+
+
+static void
+test_read_until (void)
+{
+  GInputStream *stream;
+  GInputStream *base_stream;
+  GError *error = NULL;
+  char *data;
+  int line;
+  int i;
+  
+#define REPEATS			10   /* number of rounds */
+#define DATA_STRING		" part1 # part2 $ part3 % part4 ^"
+#define DATA_PART_LEN		7    /* number of characters between separators */
+#define DATA_SEP		"#$%^"
+  const int DATA_PARTS_NUM = strlen (DATA_SEP) * REPEATS;
+  
+  base_stream = g_memory_input_stream_new ();
+  stream = G_INPUT_STREAM (g_data_input_stream_new (base_stream));
+  
+  for (i = 0; i < REPEATS; i++)
+    g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (base_stream), DATA_STRING, -1, NULL);
+  
+  /*  Test stop characters */
+  error = NULL;
+  data = (char*)1;
+  line = 0;
+  while (data)
+    {
+      gsize length = -1;
+      data = g_data_input_stream_read_until (G_DATA_INPUT_STREAM (stream), DATA_SEP, &length, NULL, &error);
+      if (data)
+	{
+	  g_assert_cmpint (strlen (data), ==, DATA_PART_LEN);
+	  g_assert_no_error (error);
+	  line++;
+	}
+    }
+  g_assert_no_error (error);
+  g_assert_cmpint (line, ==, DATA_PARTS_NUM);
+	
+	
+  g_object_unref (base_stream);
+  g_object_unref (stream);
+}
+
+enum TestDataType {
+  TEST_DATA_BYTE = 0,
+  TEST_DATA_INT16,
+  TEST_DATA_UINT16,
+  TEST_DATA_INT32,
+  TEST_DATA_UINT32,
+  TEST_DATA_INT64,
+  TEST_DATA_UINT64
+};
+
+#define TEST_DATA_RETYPE_BUFF(a, v)	\
+	 (a == TEST_DATA_BYTE	? *(guchar*)v : \
+	 (a == TEST_DATA_INT16	? *(gint16*)v :	 \
+	 (a == TEST_DATA_UINT16	? *(guint16*)v : \
+	 (a == TEST_DATA_INT32	? *(gint32*)v :	 \
+	 (a == TEST_DATA_UINT32	? *(guint32*)v : \
+	 (a == TEST_DATA_INT64	? *(gint64*)v :	 \
+	 *(guint64*)v )))))) 
+
+
+static void
+test_data_array (GInputStream *stream, GInputStream *base_stream,
+		 gpointer buffer, int len,
+		 enum TestDataType data_type, GDataStreamByteOrder byte_order)
+{
+  GError *error = NULL;
+  int pos = 0;
+  int data_size = 1;
+  gint64 data;
+  GDataStreamByteOrder native;
+  gboolean swap;
+  
+  /*  Seek to start */
+  test_seek_to_start (base_stream);
+
+  /*  Set correct data size */
+  switch (data_type)
+    {
+    case TEST_DATA_BYTE:
+      data_size = 1;
+      break;
+    case TEST_DATA_INT16:
+    case TEST_DATA_UINT16:
+      data_size = 2;
+      break;
+    case TEST_DATA_INT32:
+    case TEST_DATA_UINT32:
+      data_size = 4;
+      break;
+    case TEST_DATA_INT64:
+    case TEST_DATA_UINT64:
+      data_size = 8;
+      break; 
+    }
+
+  /*  Set flag to swap bytes if needed */
+  native = (G_BYTE_ORDER == G_BIG_ENDIAN) ? G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN : G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN;
+  swap = (byte_order != G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN) && (byte_order != native);
+
+  data = 1;
+  while (data != 0)
+    {
+      switch (data_type)
+	{
+	case TEST_DATA_BYTE:
+	  data = g_data_input_stream_read_byte (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  break;
+	case TEST_DATA_INT16:
+	  data = g_data_input_stream_read_int16 (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  if (swap)
+	    data = (gint16)GUINT16_SWAP_LE_BE((gint16)data);
+	  break;
+	case TEST_DATA_UINT16:
+	  data = g_data_input_stream_read_uint16 (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  if (swap)
+	    data = (guint16)GUINT16_SWAP_LE_BE((guint16)data);
+	  break;
+	case TEST_DATA_INT32:
+	  data = g_data_input_stream_read_int32 (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  if (swap)
+	    data = (gint32)GUINT32_SWAP_LE_BE((gint32)data);
+	  break;
+	case TEST_DATA_UINT32:
+	  data = g_data_input_stream_read_uint32 (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  if (swap)
+	    data = (guint32)GUINT32_SWAP_LE_BE((guint32)data);
+	  break;
+	case TEST_DATA_INT64:
+	  data = g_data_input_stream_read_int64 (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  if (swap)
+	    data = (gint64)GUINT64_SWAP_LE_BE((gint64)data);
+	  break;
+	case TEST_DATA_UINT64:
+	  data = g_data_input_stream_read_uint64 (G_DATA_INPUT_STREAM (stream), NULL, &error);
+	  if (swap)
+	    data = (guint64)GUINT64_SWAP_LE_BE((guint64)data);
+	  break;
+	}
+      if ((data) && (! error))  
+	g_assert_cmpint (data, ==, TEST_DATA_RETYPE_BUFF(data_type, ((guchar*)buffer + pos)));
+      
+      pos += data_size;
+    }
+  if (pos < len + 1)
+    g_assert_no_error (error);
+  g_assert_cmpint (pos - data_size, ==, len);
+}
+
+static void
+test_read_int (void)
+{
+  GInputStream *stream;
+  GInputStream *base_stream;
+  GRand *rand;
+  int i;
+  gpointer buffer;
+  
+  rand = g_rand_new ();
+  buffer = g_malloc0 (MAX_BYTES);
+  
+  /*  Fill in some random data */
+  for (i = 0; i < MAX_BYTES; i++)
+    {
+      guchar x = 0;
+      while (! x)
+	x = (guchar)g_rand_int (rand);
+      *(guchar*)((guchar*)buffer + sizeof(guchar) * i) = x; 
+    }
+
+  base_stream = g_memory_input_stream_new ();
+  stream = G_INPUT_STREAM (g_data_input_stream_new (base_stream));
+  g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (base_stream), buffer, MAX_BYTES, NULL);
+  
+  
+  for (i = 0; i < 3; i++)
+    {
+      int j;
+      g_data_input_stream_set_byte_order (G_DATA_INPUT_STREAM (stream), i);
+      
+      for (j = 0; j <= TEST_DATA_UINT64; j++)
+	test_data_array (stream, base_stream, buffer, MAX_BYTES, j, i);
+    }
+
+  g_object_unref (base_stream);
+  g_object_unref (stream);
+  g_rand_free (rand);
+  g_free (buffer);
+}
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/data-input-stream/read-lines-LF", test_read_lines_LF);
+  g_test_add_func ("/data-input-stream/read-lines-CR", test_read_lines_CR);
+  g_test_add_func ("/data-input-stream/read-lines-CR-LF", test_read_lines_CR_LF);
+  g_test_add_func ("/data-input-stream/read-until", test_read_until);
+  g_test_add_func ("/data-input-stream/read-int", test_read_int);
+
+  return g_test_run();
+}
diff --git a/gio/tests/data-output-stream.c b/gio/tests/data-output-stream.c
new file mode 100644
index 0000000..473aeb9
--- /dev/null
+++ b/gio/tests/data-output-stream.c
@@ -0,0 +1,293 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Authors: Tomas Bzatek <tbzatek@redhat.com>
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_LINES		0xFFF	
+#define MAX_LINES_BUFF 		0xFFFFFF
+#define MAX_BYTES_BINARY	0x100	
+
+static void
+test_read_lines (GDataStreamNewlineType newline_type)
+{
+  GOutputStream *stream;
+  GOutputStream *base_stream;
+  GError *error = NULL;
+  gpointer data;
+  char *lines;
+  int size;
+  int i;
+
+#define TEST_STRING	"some_text"
+  
+  const char* endl[4] = {"\n", "\r", "\r\n", "\n"};
+  
+  
+  data = g_malloc0 (MAX_LINES_BUFF);
+  lines = g_malloc0 ((strlen (TEST_STRING) + strlen (endl[newline_type])) * MAX_LINES + 1);
+  
+  /* initialize objects */
+  base_stream = g_memory_output_stream_new (data, MAX_LINES_BUFF, NULL, NULL);
+  stream = G_OUTPUT_STREAM (g_data_output_stream_new (base_stream));
+
+  
+  /*  fill data */
+  for (i = 0; i < MAX_LINES; i++)
+    {
+      gboolean res;
+      char *s = g_strconcat (TEST_STRING, endl[newline_type], NULL);
+      res = g_data_output_stream_put_string (G_DATA_OUTPUT_STREAM (stream), s, NULL, &error);
+      g_stpcpy ((char*)(lines + i*strlen(s)), s);
+      g_assert_no_error (error);
+      g_assert (res == TRUE);
+    }
+
+  /*  Byte order testing */
+  g_data_output_stream_set_byte_order (G_DATA_OUTPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
+  g_assert_cmpint (g_data_output_stream_get_byte_order (G_DATA_OUTPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
+  g_data_output_stream_set_byte_order (G_DATA_OUTPUT_STREAM (stream), G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
+  g_assert_cmpint (g_data_output_stream_get_byte_order (G_DATA_OUTPUT_STREAM (stream)), ==, G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN);
+  
+  /*  compare data */
+  size = strlen (data);
+  g_assert_cmpint (size, <, MAX_LINES_BUFF);
+  g_assert_cmpstr ((char*)data, ==, lines);
+  
+  g_object_unref (base_stream);
+  g_object_unref (stream);
+  g_free (data);
+  g_free (lines);
+}
+
+static void
+test_read_lines_LF (void)
+{
+  test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_LF);
+}
+
+static void
+test_read_lines_CR (void)
+{
+  test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_CR);
+}
+
+static void
+test_read_lines_CR_LF (void)
+{
+  test_read_lines (G_DATA_STREAM_NEWLINE_TYPE_CR_LF);
+}
+
+enum TestDataType {
+  TEST_DATA_BYTE = 0,
+  TEST_DATA_INT16,
+  TEST_DATA_UINT16,
+  TEST_DATA_INT32,
+  TEST_DATA_UINT32,
+  TEST_DATA_INT64,
+  TEST_DATA_UINT64
+};
+
+#define TEST_DATA_RETYPE(a, v)	\
+	(a == TEST_DATA_BYTE	? (guchar)v : \
+	(a == TEST_DATA_INT16	? (gint16)v : \
+	(a == TEST_DATA_UINT16	? (guint16)v : \
+	(a == TEST_DATA_INT32	? (gint32)v : \
+	(a == TEST_DATA_UINT32	? (guint32)v : \
+	(a == TEST_DATA_INT64	? (gint64)v : \
+	 (guint64)v )))))) 
+
+#define TEST_DATA_RETYPE_BUFF(a, v)	\
+	(a == TEST_DATA_BYTE	? *(guchar*)v : \
+	(a == TEST_DATA_INT16	? *(gint16*)v : \
+	(a == TEST_DATA_UINT16	? *(guint16*)v : \
+	(a == TEST_DATA_INT32	? *(gint32*)v : \
+	(a == TEST_DATA_UINT32	? *(guint32*)v : \
+	(a == TEST_DATA_INT64	? *(gint64*)v : \
+	 *(guint64*)v )))))) 
+
+
+
+
+static void
+test_data_array (gpointer buffer, int len,
+		 enum TestDataType data_type, GDataStreamByteOrder byte_order)
+{
+  GOutputStream *stream;
+  GOutputStream *base_stream;
+  gpointer stream_data;
+  
+  GError *error = NULL;
+  int pos;
+  int data_size = 1;
+  GDataStreamByteOrder native;
+  gboolean swap;
+  gboolean res;
+  guint64 data;
+  
+  /*  create objects */
+  stream_data = g_malloc0 (len);
+  base_stream = g_memory_output_stream_new (stream_data, len, NULL, NULL);
+  stream = G_OUTPUT_STREAM (g_data_output_stream_new (base_stream));
+  g_data_output_stream_set_byte_order (G_DATA_OUTPUT_STREAM (stream), byte_order);
+  
+
+  /*  Set correct data size */
+  switch (data_type)
+    {
+    case TEST_DATA_BYTE:
+      data_size = 1;
+      break;
+    case TEST_DATA_INT16:
+    case TEST_DATA_UINT16:
+      data_size = 2;
+      break;
+    case TEST_DATA_INT32:
+    case TEST_DATA_UINT32:
+      data_size = 4;
+      break;
+    case TEST_DATA_INT64:
+    case TEST_DATA_UINT64:
+      data_size = 8;
+      break; 
+    }
+	
+  /*  Set flag to swap bytes if needed */
+  native = (G_BYTE_ORDER == G_BIG_ENDIAN) ? G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN : G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN;
+  swap = (byte_order != G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN) && (byte_order != native);
+
+  /*  Write data to the file */
+  pos = 0;
+  while (pos < len)
+    {
+      switch (data_type)
+	{
+	case TEST_DATA_BYTE:
+	  res = g_data_output_stream_put_byte (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	case TEST_DATA_INT16:
+	  res = g_data_output_stream_put_int16 (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	case TEST_DATA_UINT16:
+	  res = g_data_output_stream_put_uint16 (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	case TEST_DATA_INT32:
+	  res = g_data_output_stream_put_int32 (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	case TEST_DATA_UINT32:
+	  res = g_data_output_stream_put_uint32 (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	case TEST_DATA_INT64:
+	  res = g_data_output_stream_put_int64 (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	case TEST_DATA_UINT64:
+	  res = g_data_output_stream_put_uint64 (G_DATA_OUTPUT_STREAM (stream), TEST_DATA_RETYPE_BUFF (data_type, ((guchar*)buffer + pos)), NULL, &error);
+	  break;
+	}
+      g_assert_no_error (error);
+      g_assert_cmpint (res, ==, TRUE);
+      pos += data_size;
+    }
+  
+	
+  /*  Compare data back */
+  pos = 0;
+  data = 0;
+  while (pos < len)
+    {
+      data = TEST_DATA_RETYPE_BUFF(data_type, ((guchar*)stream_data + pos));
+      if (swap)
+	{
+	  switch (data_type)
+	    {
+	    case TEST_DATA_BYTE:  
+	      break;
+	    case TEST_DATA_UINT16:
+	    case TEST_DATA_INT16:
+	      data = TEST_DATA_RETYPE(data_type, GUINT16_SWAP_LE_BE(TEST_DATA_RETYPE(data_type, data)));
+	      break;
+	    case TEST_DATA_UINT32:
+	    case TEST_DATA_INT32:
+	      data = TEST_DATA_RETYPE(data_type, GUINT32_SWAP_LE_BE(TEST_DATA_RETYPE(data_type, data)));
+	      break;
+	    case TEST_DATA_UINT64:
+	    case TEST_DATA_INT64:
+	      data = TEST_DATA_RETYPE(data_type, GUINT64_SWAP_LE_BE(TEST_DATA_RETYPE(data_type, data)));
+	      break;
+	    }
+	}
+      g_assert_cmpint (data, ==, TEST_DATA_RETYPE_BUFF(data_type, ((guchar*)buffer + pos)));
+      break;
+      
+      pos += data_size;
+    }
+  
+  g_object_unref (base_stream);
+  g_object_unref (stream);
+  g_free (stream_data);
+}
+
+static void
+test_read_int (void)
+{
+  GRand *rand;
+  gpointer buffer;
+  int i;
+  
+  rand = g_rand_new ();
+  buffer = g_malloc0(MAX_BYTES_BINARY);
+  
+  /*  Fill in some random data */
+  for (i = 0; i < MAX_BYTES_BINARY; i++)
+    {
+      guchar x = 0;
+      while (! x)  x = (guchar)g_rand_int (rand);
+      *(guchar*)((guchar*)buffer + sizeof (guchar) * i) = x; 
+    }
+
+  for (i = 0; i < 3; i++)
+    {
+      int j;
+      for (j = 0; j <= TEST_DATA_UINT64; j++)
+	test_data_array (buffer, MAX_BYTES_BINARY, j, i);
+    }
+  
+  g_rand_free (rand);
+  g_free (buffer);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/data-input-stream/read-lines-LF", test_read_lines_LF);
+  g_test_add_func ("/data-input-stream/read-lines-CR", test_read_lines_CR);
+  g_test_add_func ("/data-input-stream/read-lines-CR-LF", test_read_lines_CR_LF);
+  g_test_add_func ("/data-input-stream/read-int", test_read_int);
+
+  return g_test_run();
+}
diff --git a/gio/tests/desktop-app-info.c b/gio/tests/desktop-app-info.c
new file mode 100644
index 0000000..ddf72d4
--- /dev/null
+++ b/gio/tests/desktop-app-info.c
@@ -0,0 +1,259 @@
+/* 
+ * Copyright (C) 2008 Red Hat, Inc
+ *
+ * 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 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.
+ * 
+ * Author: Matthias Clasen
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <gio/gdesktopappinfo.h>
+#include <stdlib.h>
+#include <string.h>
+
+static char *basedir;
+
+static GAppInfo * 
+create_app_info (const char *name)
+{
+  GError *error;
+  GAppInfo *info;
+
+  error = NULL;
+  info = g_app_info_create_from_commandline ("/usr/bin/true blah",
+                                             name,
+                                             G_APP_INFO_CREATE_NONE,
+                                             &error);
+  g_assert (error == NULL);
+
+  /* this is necessary to ensure that the info is saved */
+  g_app_info_set_as_default_for_type (info, "application/x-blah", &error);
+  g_assert (error == NULL);
+  g_app_info_remove_supports_type (info, "application/x-blah", &error);
+  g_assert (error == NULL);
+  g_app_info_reset_type_associations ("application/x-blah");
+  
+  return info;
+}
+
+static void
+test_delete (void)
+{
+  GAppInfo *info;
+
+  const char *id;
+  char *filename;
+  gboolean res;
+
+  info = create_app_info ("Blah");
+ 
+  id = g_app_info_get_id (info);
+  g_assert (id != NULL);
+
+  filename = g_build_filename (basedir, "applications", id, NULL);
+
+  res = g_file_test (filename, G_FILE_TEST_EXISTS);
+  g_assert (res);
+
+  res = g_app_info_can_delete (info);
+  g_assert (res);
+
+  res = g_app_info_delete (info);
+  g_assert (res);
+
+  res = g_file_test (filename, G_FILE_TEST_EXISTS);
+  g_assert (!res);
+
+  g_object_unref (info);
+
+  if (g_file_test ("/usr/share/applications/gedit.desktop", G_FILE_TEST_EXISTS))
+    {
+      info = (GAppInfo*)g_desktop_app_info_new ("gedit.desktop");
+      g_assert (info);
+     
+      res = g_app_info_can_delete (info);
+      g_assert (!res);
+ 
+      res = g_app_info_delete (info);
+      g_assert (!res);
+    }
+}
+
+static void
+test_default (void)
+{
+  GAppInfo *info, *info1, *info2, *info3;
+  GList *list;
+  GError *error = NULL;  
+
+  info1 = create_app_info ("Blah1");
+  info2 = create_app_info ("Blah2");
+  info3 = create_app_info ("Blah3");
+
+  g_app_info_set_as_default_for_type (info1, "application/x-test", &error);
+  g_assert (error == NULL);
+
+  g_app_info_set_as_default_for_type (info2, "application/x-test", &error);
+  g_assert (error == NULL);
+
+  list = g_app_info_get_all_for_type ("application/x-test");
+  g_assert (g_list_length (list) == 2);
+  
+  /* check that both are in the list, info2 before info1 */
+  info = (GAppInfo *)list->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info2)) == 0);
+
+  info = (GAppInfo *)list->next->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info1)) == 0);
+
+  g_list_foreach (list, (GFunc)g_object_unref, NULL);
+  g_list_free (list);
+
+  /* now try adding something at the end */
+  g_app_info_add_supports_type (info3, "application/x-test", &error);
+  g_assert (error == NULL);
+
+  list = g_app_info_get_all_for_type ("application/x-test");
+  g_assert (g_list_length (list) == 3);
+  
+  /* check that all are in the list, info2, info1, info3 */
+  info = (GAppInfo *)list->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info2)) == 0);
+
+  info = (GAppInfo *)list->next->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info1)) == 0);
+
+  info = (GAppInfo *)list->next->next->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info3)) == 0);
+
+  g_list_foreach (list, (GFunc)g_object_unref, NULL);
+  g_list_free (list);
+
+  /* now remove info1 again */
+  g_app_info_remove_supports_type (info1, "application/x-test", &error);
+  g_assert (error == NULL);
+
+  list = g_app_info_get_all_for_type ("application/x-test");
+  g_assert (g_list_length (list) == 2);
+  
+  /* check that both are in the list, info2 before info3 */
+  info = (GAppInfo *)list->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info2)) == 0);
+
+  info = (GAppInfo *)list->next->data;
+  g_assert (g_strcmp0 (g_app_info_get_id (info), g_app_info_get_id (info3)) == 0);
+
+  g_list_foreach (list, (GFunc)g_object_unref, NULL);
+  g_list_free (list);
+
+  /* now clean it all up */
+  g_app_info_reset_type_associations ("application/x-test");
+
+  list = g_app_info_get_all_for_type ("application/x-test");
+  g_assert (list == NULL);
+  
+  g_app_info_delete (info1);
+  g_app_info_delete (info2);
+  g_app_info_delete (info3);
+
+  g_object_unref (info1);
+  g_object_unref (info2);
+}
+
+static void
+cleanup_dir_recurse (GFile *parent, GFile *root)
+{
+  gboolean res;
+  GError *error;
+  GFileEnumerator *enumerator;
+  GFileInfo *info;
+  GFile *descend;
+  char *relative_path;
+
+  g_assert (root != NULL);
+
+  error = NULL;
+  enumerator =
+    g_file_enumerate_children (parent, "*",
+                               G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL,
+                               &error);
+  if (! enumerator)
+          return;
+  error = NULL;
+  info = g_file_enumerator_next_file (enumerator, NULL, &error);
+  while ((info) && (!error))
+    {
+      descend = g_file_get_child (parent, g_file_info_get_name (info));
+      g_assert (descend != NULL);
+      relative_path = g_file_get_relative_path (root, descend);
+      g_assert (relative_path != NULL);
+
+      if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+          cleanup_dir_recurse (descend, root);
+
+      error = NULL;
+      res = g_file_delete (descend, NULL, &error);
+      g_assert_cmpint (res, ==, TRUE);
+
+      g_object_unref (descend);
+      error = NULL;
+      info = g_file_enumerator_next_file (enumerator, NULL, &error);
+    }
+  g_assert (error == NULL);
+
+  error = NULL;
+  res = g_file_enumerator_close (enumerator, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert (error == NULL);
+}
+
+static void
+cleanup_subdirs (const char *basedir)
+{
+  GFile *base, *file;
+ 
+  base = g_file_new_for_path (basedir);  
+  file = g_file_get_child (base, "applications");
+  cleanup_dir_recurse (file, file);
+  g_object_unref (file);
+  file = g_file_get_child (base, "mime");
+  cleanup_dir_recurse (file, file);
+  g_object_unref (file);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  gint result;
+
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+  
+  basedir = g_get_current_dir ();
+  g_setenv ("XDG_DATA_HOME", basedir, TRUE);
+  cleanup_subdirs (basedir);
+  
+  g_test_add_func ("/desktop-app-info/delete", test_delete);
+  g_test_add_func ("/desktop-app-info/default", test_default);
+
+  result = g_test_run ();
+
+  cleanup_subdirs (basedir);
+
+  return result;
+}
diff --git a/gio/tests/filter-streams.c b/gio/tests/filter-streams.c
new file mode 100644
index 0000000..fab17ff
--- /dev/null
+++ b/gio/tests/filter-streams.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright © 2009 Codethink Limited
+ *
+ * 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; either version 2 of the licence or (at
+ * your option) any later version.
+ *
+ * See the included COPYING file for more information.
+ *
+ * Author: Ryan Lortie <desrt@desrt.ca>
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+
+static void
+test_input_filter (void)
+{
+  GInputStream *base, *f1, *f2;
+
+  g_test_bug ("568394");
+  base = g_memory_input_stream_new_from_data ("abcdefghijk", -1, NULL);
+  f1 = g_buffered_input_stream_new (base);
+  f2 = g_buffered_input_stream_new (base);
+
+  g_filter_input_stream_set_close_base_stream (G_FILTER_INPUT_STREAM (f1), FALSE);
+
+  g_assert (g_filter_input_stream_get_base_stream (G_FILTER_INPUT_STREAM (f1)) == base);
+  g_assert (g_filter_input_stream_get_base_stream (G_FILTER_INPUT_STREAM (f2)) == base);
+
+  g_assert (!g_input_stream_is_closed (base));
+  g_assert (!g_input_stream_is_closed (f1));
+  g_assert (!g_input_stream_is_closed (f2));
+
+  g_object_unref (f1);
+
+  g_assert (!g_input_stream_is_closed (base));
+  g_assert (!g_input_stream_is_closed (f2));
+
+  g_object_unref (f2);
+
+  g_assert (g_input_stream_is_closed (base));
+
+  g_object_unref (base);
+}
+
+static void
+test_output_filter (void)
+{
+  GOutputStream *base, *f1, *f2;
+
+  base = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+  f1 = g_buffered_output_stream_new (base);
+  f2 = g_buffered_output_stream_new (base);
+
+  g_filter_output_stream_set_close_base_stream (G_FILTER_OUTPUT_STREAM (f1), FALSE);
+
+  g_assert (g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (f1)) == base);
+  g_assert (g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (f2)) == base);
+
+  g_assert (!g_output_stream_is_closed (base));
+  g_assert (!g_output_stream_is_closed (f1));
+  g_assert (!g_output_stream_is_closed (f2));
+
+  g_object_unref (f1);
+
+  g_assert (!g_output_stream_is_closed (base));
+  g_assert (!g_output_stream_is_closed (f2));
+
+  g_object_unref (f2);
+
+  g_assert (g_output_stream_is_closed (base));
+
+  g_object_unref (base);
+}
+
+gpointer expected_obj;
+gpointer expected_data;
+gboolean callback_happened;
+
+static void
+in_cb (GObject      *object,
+       GAsyncResult *result,
+       gpointer      user_data)
+{
+  GError *error = NULL;
+
+  g_assert (object == expected_obj);
+  g_assert (user_data == expected_data);
+  g_assert (callback_happened == FALSE);
+
+  g_input_stream_close_finish (expected_obj, result, &error);
+  g_assert (error == NULL);
+
+  callback_happened = TRUE;
+}
+
+static void
+test_input_async (void)
+{
+  GInputStream *base, *f1, *f2;
+
+  base = g_memory_input_stream_new_from_data ("abcdefghijk", -1, NULL);
+  f1 = g_buffered_input_stream_new (base);
+  f2 = g_buffered_input_stream_new (base);
+
+  g_filter_input_stream_set_close_base_stream (G_FILTER_INPUT_STREAM (f1), FALSE);
+
+  g_assert (g_filter_input_stream_get_base_stream (G_FILTER_INPUT_STREAM (f1)) == base);
+  g_assert (g_filter_input_stream_get_base_stream (G_FILTER_INPUT_STREAM (f2)) == base);
+
+  g_assert (!g_input_stream_is_closed (base));
+  g_assert (!g_input_stream_is_closed (f1));
+  g_assert (!g_input_stream_is_closed (f2));
+
+  expected_obj = f1;
+  expected_data = g_malloc (20);
+  callback_happened = FALSE;
+  g_input_stream_close_async (f1, 0, NULL, in_cb, expected_data);
+
+  g_assert (callback_happened == FALSE);
+  while (g_main_context_pending (NULL))
+    g_main_context_iteration (NULL, FALSE);
+  g_assert (callback_happened == TRUE);
+
+  g_assert (!g_input_stream_is_closed (base));
+  g_assert (!g_input_stream_is_closed (f2));
+  g_free (expected_data);
+  g_object_unref (f1);
+  g_assert (!g_input_stream_is_closed (base));
+  g_assert (!g_input_stream_is_closed (f2));
+
+  expected_obj = f2;
+  expected_data = g_malloc (20);
+  callback_happened = FALSE;
+  g_input_stream_close_async (f2, 0, NULL, in_cb, expected_data);
+
+  g_assert (callback_happened == FALSE);
+  while (g_main_context_pending (NULL))
+    g_main_context_iteration (NULL, FALSE);
+  g_assert (callback_happened == TRUE);
+
+  g_assert (g_input_stream_is_closed (base));
+  g_assert (g_input_stream_is_closed (f2));
+  g_free (expected_data);
+  g_object_unref (f2);
+
+  g_assert (g_input_stream_is_closed (base));
+  g_object_unref (base);
+}
+
+static void
+out_cb (GObject      *object,
+        GAsyncResult *result,
+        gpointer      user_data)
+{
+  GError *error = NULL;
+
+  g_assert (object == expected_obj);
+  g_assert (user_data == expected_data);
+  g_assert (callback_happened == FALSE);
+
+  g_output_stream_close_finish (expected_obj, result, &error);
+  g_assert (error == NULL);
+
+  callback_happened = TRUE;
+}
+
+
+static void
+test_output_async (void)
+{
+  GOutputStream *base, *f1, *f2;
+
+  base = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+  f1 = g_buffered_output_stream_new (base);
+  f2 = g_buffered_output_stream_new (base);
+
+  g_filter_output_stream_set_close_base_stream (G_FILTER_OUTPUT_STREAM (f1), FALSE);
+
+  g_assert (g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (f1)) == base);
+  g_assert (g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (f2)) == base);
+
+  g_assert (!g_output_stream_is_closed (base));
+  g_assert (!g_output_stream_is_closed (f1));
+  g_assert (!g_output_stream_is_closed (f2));
+
+  expected_obj = f1;
+  expected_data = g_malloc (20);
+  callback_happened = FALSE;
+  g_output_stream_close_async (f1, 0, NULL, out_cb, expected_data);
+
+  g_assert (callback_happened == FALSE);
+  while (g_main_context_pending (NULL))
+    g_main_context_iteration (NULL, FALSE);
+  g_assert (callback_happened == TRUE);
+
+  g_assert (!g_output_stream_is_closed (base));
+  g_assert (!g_output_stream_is_closed (f2));
+  g_free (expected_data);
+  g_object_unref (f1);
+  g_assert (!g_output_stream_is_closed (base));
+  g_assert (!g_output_stream_is_closed (f2));
+
+  expected_obj = f2;
+  expected_data = g_malloc (20);
+  callback_happened = FALSE;
+  g_output_stream_close_async (f2, 0, NULL, out_cb, expected_data);
+
+  g_assert (callback_happened == FALSE);
+  while (g_main_context_pending (NULL))
+    g_main_context_iteration (NULL, FALSE);
+  g_assert (callback_happened == TRUE);
+
+  g_assert (g_output_stream_is_closed (base));
+  g_assert (g_output_stream_is_closed (f2));
+  g_free (expected_data);
+  g_object_unref (f2);
+
+  g_assert (g_output_stream_is_closed (base));
+  g_object_unref (base);
+}
+
+
+int
+main (int argc, char **argv)
+{
+  g_test_init (&argc, &argv, NULL);
+  g_test_bug_base ("http://bugzilla.gnome.org/");
+
+  g_type_init ();
+  g_test_add_func ("/filter-stream/input", test_input_filter);
+  g_test_add_func ("/filter-stream/output", test_output_filter);
+  g_test_add_func ("/filter-stream/async-input", test_input_async);
+  g_test_add_func ("/filter-stream/async-output", test_output_async);
+
+  return g_test_run();
+}
diff --git a/gio/tests/g-file-info.c b/gio/tests/g-file-info.c
new file mode 100644
index 0000000..80bdd6e
--- /dev/null
+++ b/gio/tests/g-file-info.c
@@ -0,0 +1,125 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Authors: Tomas Bzatek <tbzatek@redhat.com>
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define TEST_NAME			"Prilis zlutoucky kun"
+#define TEST_DISPLAY_NAME	        "UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88"
+#define TEST_SIZE			0xFFFFFFF0
+
+static void
+test_assigned_values (GFileInfo *info)
+{
+  const char *name, *display_name, *mistake;
+  guint64 size;
+  GFileType type;
+  
+  /*  Test for attributes presence */
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_NAME) == TRUE);
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME) == TRUE);
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE) == TRUE);
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_COPY_NAME) == FALSE);
+	
+  /*  Retrieve data back and compare */
+  
+  name = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_STANDARD_NAME);
+  display_name = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
+  mistake = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_COPY_NAME);
+  size = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_STANDARD_SIZE);
+  type = g_file_info_get_file_type (info);
+  
+  g_assert_cmpstr (name, ==, TEST_NAME);
+  g_assert_cmpstr (display_name, ==, TEST_DISPLAY_NAME);
+  g_assert (mistake == NULL);
+  g_assert_cmpint (size, ==, TEST_SIZE);
+  g_assert_cmpstr (name, ==, g_file_info_get_name (info));
+  g_assert_cmpstr (display_name, ==, g_file_info_get_display_name (info));
+  g_assert_cmpint (size, ==, g_file_info_get_size (info)	);
+  g_assert_cmpint (type, ==, G_FILE_TYPE_DIRECTORY);
+}
+
+
+
+static void
+test_g_file_info (void)
+{
+  GFileInfo *info;
+  GFileInfo *info_dup;
+  GFileInfo *info_copy;
+  char **attr_list;
+  
+  info = g_file_info_new ();
+  
+  /*  Test for empty instance */
+  attr_list = g_file_info_list_attributes (info, NULL);
+  g_assert (attr_list != NULL);
+  g_assert (*attr_list == NULL);
+	
+  g_file_info_set_attribute_byte_string (info, G_FILE_ATTRIBUTE_STANDARD_NAME, TEST_NAME);
+  g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, TEST_DISPLAY_NAME);
+  g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_STANDARD_SIZE, TEST_SIZE);
+  g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
+	
+  /*  The attr list should not be empty now */
+  attr_list = g_file_info_list_attributes (info, NULL);
+  g_assert (attr_list != NULL);
+  g_assert (*attr_list != NULL);
+	
+  test_assigned_values (info);
+	
+  /*  Test dups */
+  info_dup = g_file_info_dup (info);
+  g_assert (info_dup != NULL);
+  test_assigned_values (info_dup);
+  
+  info_copy = g_file_info_new ();
+  g_file_info_copy_into (info_dup, info_copy);
+  g_assert (info_copy != NULL);
+  test_assigned_values (info_copy);
+	
+  /*  Test remove attribute */
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER) == FALSE);
+  g_file_info_set_attribute_int32 (info, G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER, 10);
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER) == TRUE);
+	
+  g_file_info_remove_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER);
+  g_assert (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER) == FALSE);
+	
+  g_object_unref (info);
+  g_object_unref (info_dup);
+  g_object_unref (info_copy);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/g-file-info/test_g_file_info", test_g_file_info);
+  
+  return g_test_run();
+}
diff --git a/gio/tests/g-file.c b/gio/tests/g-file.c
new file mode 100644
index 0000000..09b7ea1
--- /dev/null
+++ b/gio/tests/g-file.c
@@ -0,0 +1,538 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Authors: Tomas Bzatek <tbzatek@redhat.com>
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct TestPathsWithOper {
+  const char *path1;
+  gboolean equal;
+  gboolean use_uri;
+  const char *path2;
+  const char *path3;
+};
+
+
+
+/* TODO:
+ *   - test on Windows
+ * 
+ **/
+
+static void
+test_g_file_new_null (void)
+{
+  const char *paths[] = {"/",
+			 "/tmp///",
+			 "/non-existent-file",
+			 "/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88",
+			 NULL
+  };
+  const char *uris[] = {"file:///",
+			"file:///tmp///",
+			"non-existent-uri:///some-dir/",
+			"file:///UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88",
+			NULL
+  };
+  
+  GFile *file = NULL;
+  
+  int i = 0;
+  while (paths[i])
+    {
+      file = g_file_new_for_path (paths[i++]);
+      g_assert (file != NULL);
+      g_object_unref (file);
+    }
+  
+  i = 0;
+  while (uris[i])
+    {
+      file = g_file_new_for_uri (uris[i++]);
+      g_assert (file != NULL);
+      g_object_unref(file);
+    }
+}
+
+
+
+static gboolean
+compare_two_files (const gboolean use_uri, const char *path1, const char *path2)
+{
+  GFile *file1 = NULL;
+  GFile *file2 = NULL;
+  gboolean equal;
+
+  if (use_uri)
+    {
+      file1 = g_file_new_for_uri (path1);
+      file2 = g_file_new_for_uri (path2);
+    }
+  else
+    {
+      file1 = g_file_new_for_path (path1);
+      file2 = g_file_new_for_path (path2);
+    }
+
+  g_assert (file1 != NULL);
+  g_assert (file2 != NULL);
+  
+  equal = g_file_equal (file1, file2);
+  
+  g_object_unref (file1);
+  g_object_unref (file2);
+  
+  return equal;
+}
+
+static void
+test_g_file_new_for_path (void)
+{
+  const struct TestPathsWithOper cmp_paths[] =
+    {
+      {"/", TRUE, 0, "/./"},
+      {"//", TRUE, 0, "//"},
+      {"//", TRUE, 0, "//./"},
+      {"/", TRUE, 0, "/.//"},
+      {"/", TRUE, 0, "/././"},
+      {"/tmp", TRUE, 0, "/tmp/d/../"},
+      {"/", TRUE, 0, "/somedir/../"},
+      {"/", FALSE, 0, "/somedir/.../"},
+      {"//tmp/dir1", TRUE, 0, "//tmp/dir1"},
+      {"/tmp/dir1", TRUE, 0, "///tmp/dir1"},
+      {"/tmp/dir1", TRUE, 0, "////tmp/dir1"},
+      {"/tmp/dir1", TRUE, 0, "/tmp/./dir1"},
+      {"/tmp/dir1", TRUE, 0, "/tmp//dir1"},
+      {"/tmp/dir1", TRUE, 0, "/tmp///dir1///"},
+      {"/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88", TRUE, 0, "/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88/"}
+    };
+
+  int i;
+  for (i = 0; i < G_N_ELEMENTS (cmp_paths); i++)
+    {
+      gboolean equal = compare_two_files (FALSE, cmp_paths[i].path1, cmp_paths[i].path2);
+      g_assert_cmpint (equal, ==, cmp_paths[i].equal);
+    }
+}
+
+
+
+static void
+test_g_file_new_for_uri (void)
+{
+  const struct TestPathsWithOper cmp_uris[] = {
+    {"file:///", TRUE, 0, "file:///./"},
+    {"file:////", TRUE, 0, "file:////"},
+    {"file:////", TRUE, 0, "file:////./"},
+    {"file:///", TRUE, 0, "file:///.//"},
+    {"file:///", TRUE, 0, "file:///././"},
+    {"file:///tmp", TRUE, 0, "file:///tmp/d/../"},
+    {"file:///", TRUE, 0, "file:///somedir/../"},
+    {"file:///", FALSE, 0, "file:///somedir/.../"},
+    {"file:////tmp/dir1", TRUE, 0, "file:////tmp/dir1"},
+    {"file:///tmp/dir1", TRUE, 0, "file:///tmp/./dir1"},
+    {"file:///tmp/dir1", TRUE, 0, "file:///tmp//dir1"},
+    {"file:///tmp/dir1", TRUE, 0, "file:///tmp///dir1///"},
+    {"file:///UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88", TRUE, 0, "file:///UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88/"}
+  };
+  
+  int i;
+  for (i = 0; i < G_N_ELEMENTS (cmp_uris); i++)
+    {
+      gboolean equal = compare_two_files (TRUE, cmp_uris[i].path1, cmp_uris[i].path2);
+      g_assert_cmpint (equal, ==, cmp_uris[i].equal);
+    }
+}
+
+
+
+static gboolean
+dup_equals (const gboolean use_uri, const char *path)
+{
+  GFile *file1 = NULL;
+  GFile *file2 = NULL;
+  gboolean equal;
+  
+  if (use_uri) 
+    file1 = g_file_new_for_uri (path);
+  else
+    file1 = g_file_new_for_path (path);
+	
+  g_assert (file1 != NULL);
+  
+  file2 = g_file_dup (file1);
+  
+  g_assert (file2 != NULL);
+  
+  equal = g_file_equal (file1, file2);
+  
+  g_object_unref (file1);
+  g_object_unref (file2);
+	
+  return equal;
+}
+
+static void
+test_g_file_dup (void)
+{
+  const struct TestPathsWithOper dup_paths[] =
+    {
+      {"/", 0, FALSE, ""},
+      {"file:///", 0, TRUE, ""},
+      {"totalnonsense", 0, FALSE, ""},
+      {"/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88", 0, FALSE, ""},
+      {"file:///UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88", 0, TRUE, ""},
+    };
+  
+  int i;
+  for (i = 0; i < G_N_ELEMENTS (dup_paths); i++)
+    {
+      gboolean equal = dup_equals (dup_paths[i].use_uri, dup_paths[i].path1);
+      g_assert (equal == TRUE);
+    }
+}
+
+
+
+static gboolean
+parse_check_utf8 (const gboolean use_uri, const char *path, const char *result_parse_name)
+{
+  GFile *file1 = NULL;
+  GFile *file2 = NULL;
+  char *parsed_name;
+  gboolean is_utf8_valid;
+  gboolean equal;
+  
+  if (use_uri)
+    file1 = g_file_new_for_uri (path);
+  else
+    file1 = g_file_new_for_path (path);
+	
+  g_assert (file1 != NULL);
+
+  parsed_name = g_file_get_parse_name (file1);
+  
+  g_assert (parsed_name != NULL);
+  
+  /* UTF-8 validation */
+  is_utf8_valid = g_utf8_validate (parsed_name, -1, NULL);
+  g_assert (is_utf8_valid == TRUE);
+
+  if (result_parse_name)
+    g_assert_cmpstr (parsed_name, ==, result_parse_name);
+  
+  file2 = g_file_parse_name (parsed_name);
+  
+  g_assert (file2 != NULL);
+
+  equal = g_file_equal (file1, file2);
+	
+  g_object_unref (file1);
+  g_object_unref (file2);
+  
+  g_free (parsed_name);
+  
+  return equal;
+}
+
+static void
+test_g_file_get_parse_name_utf8 (void)
+{
+  const struct TestPathsWithOper strings[] =
+    {
+      {"/", 0, FALSE, "/"},
+      {"file:///", 0, TRUE, "/"},
+      {"totalnonsense", 0, FALSE, NULL},
+      {"/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88", 0, FALSE, NULL /* Depends on local file encoding */},
+      {"file:///invalid%08/UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88/", 0, TRUE, "file:///invalid%08/UTF-8%20p\xc5\x99\xc3\xadli\xc5\xa1%20\xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd%20k\xc5\xaf\xc5\x88"},
+    };
+
+  int i;
+  for (i = 0; i < G_N_ELEMENTS (strings); i++)
+    {
+      gboolean equal = parse_check_utf8 (strings[i].use_uri, strings[i].path1, strings[i].path2);
+      g_assert (equal == TRUE);
+    }
+}
+
+static char *
+resolve_arg (const gboolean is_uri_only, const char *arg)
+{
+  GFile *file1 = NULL;
+  char *uri = NULL;
+  char *path = NULL;
+  char *s = NULL;
+  
+  file1 = g_file_new_for_commandline_arg (arg);
+  g_assert (file1 != NULL);
+	
+  /*  Test if we get URI string */
+  uri = g_file_get_uri (file1);
+  g_assert_cmpstr (uri, !=, NULL);
+  g_print ("%s\n",uri);
+	
+  /*  Test if we get correct value of the local path */
+  path = g_file_get_path (file1);
+  if (is_uri_only) 
+    g_assert_cmpstr (path, ==, NULL);
+  else
+    g_assert (g_path_is_absolute (path) == TRUE);
+
+  /*  Get the URI scheme and compare it with expected one */
+  s = g_file_get_uri_scheme (file1);
+	
+  g_object_unref (file1);
+  g_free (uri);
+  g_free (path);
+  
+  return s;
+}
+
+static void
+test_g_file_new_for_commandline_arg (void)
+{
+  /*  TestPathsWithOper.use_uri represents IsURIOnly here */
+  const struct TestPathsWithOper arg_data[] =
+    {
+      {"./", 0, FALSE, "file"},
+      {"../", 0, FALSE, "file"},
+      {"/tmp", 0, FALSE, "file"},
+      {"//UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88", 0, FALSE, "file"},
+      {"file:///UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88/", 0, FALSE, "file"},
+#if 0
+      {"http://www.gtk.org/", 0, TRUE, "http"},
+      {"ftp://user:pass@ftp.gimp.org/", 0, TRUE, "ftp"},
+#endif
+    };
+  GFile *file;
+  char *resolved;
+  char *cwd;
+  int i;
+  
+  for (i = 0; i < G_N_ELEMENTS (arg_data); i++)
+    {
+      char *s = resolve_arg (arg_data[i].use_uri, arg_data[i].path1);
+      g_assert_cmpstr (s, ==, arg_data[i].path2);
+      g_free (s);
+    }
+  
+  /* Manual test for getting correct cwd */
+  file = g_file_new_for_commandline_arg ("./");
+  resolved = g_file_get_path (file);
+  cwd = g_get_current_dir ();
+  g_assert_cmpstr (resolved, ==, cwd);
+  g_object_unref (file);
+  g_free (resolved);
+  g_free (cwd);
+}
+
+static char*
+get_relative_path (const gboolean use_uri, const gboolean should_have_prefix, const char *dir1, const char *dir2)
+{
+  GFile *file1 = NULL;
+  GFile *file2 = NULL;
+  GFile *file3 = NULL;
+  gboolean has_prefix = FALSE;
+  char *relative_path = NULL;
+  
+  if (use_uri)
+    {
+      file1 = g_file_new_for_uri (dir1);
+      file2 = g_file_new_for_uri (dir2);
+    }
+  else
+    {
+      file1 = g_file_new_for_path (dir1);
+      file2 = g_file_new_for_path (dir2);
+    }
+  
+  g_assert (file1 != NULL);
+  g_assert (file2 != NULL);
+  
+  has_prefix = g_file_has_prefix (file2, file1);
+  g_print ("%s %s\n", dir1, dir2);
+  g_assert (has_prefix == should_have_prefix);
+
+  relative_path = g_file_get_relative_path (file1, file2);
+  if (should_have_prefix)
+    {
+      g_assert (relative_path != NULL);
+      
+      file3 = g_file_resolve_relative_path (file1, relative_path);
+      g_assert (g_file_equal (file2, file3) == TRUE);
+    }
+	
+  if (file1)
+    g_object_unref (file1);
+  if (file2)
+    g_object_unref (file2);
+  if (file3)
+    g_object_unref (file3);
+
+  return relative_path;
+}
+
+static void
+test_g_file_has_prefix (void)
+{
+  /*  TestPathsWithOper.equal represents here if the dir belongs to the directory structure  */
+  const struct TestPathsWithOper dirs[] =
+    {
+      /* path1            equal  uri     path2    path3  */
+      {"/dir1", TRUE, FALSE, "/dir1/dir2/dir3/", "dir2/dir3"},
+      {"/dir1/", TRUE, FALSE, "/dir1/dir2/dir3/", "dir2/dir3"},
+      {"/dir1", TRUE, FALSE, "/dir1/dir2/dir3", "dir2/dir3"},
+      {"/dir1/", TRUE, FALSE, "/dir1/dir2/dir3", "dir2/dir3"},
+      {"/tmp/", FALSE, FALSE, "/something/", NULL},
+      {"/dir1/dir2", FALSE, FALSE, "/dir1/", NULL},
+      {"//dir1/new", TRUE, FALSE, "//dir1/new/dir2/dir3", "dir2/dir3"},
+      {"/dir/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88", TRUE, FALSE, "/dir/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88/dir2", "dir2"},
+      {"file:///dir1", TRUE, TRUE, "file:///dir1/dir2/dir3/", "dir2/dir3"},
+      {"file:///dir1/", TRUE, TRUE, "file:///dir1/dir2/dir3/", "dir2/dir3"},
+      {"file:///dir1", TRUE, TRUE, "file:///dir1/dir2/dir3", "dir2/dir3"},
+      {"file:///dir1/", TRUE, TRUE, "file:///dir1/dir2/dir3", "dir2/dir3"},
+      {"file:///tmp/", FALSE, TRUE, "file:///something/", NULL},
+      {"file:///dir1/dir2", FALSE, TRUE, "file:///dir1/", NULL},
+      {"file:////dir1/new", TRUE, TRUE, "file:////dir1/new/dir2/dir3", "dir2/dir3"},
+      {"file:///dir/UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88", TRUE, TRUE, "file:///dir/UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88/dir2", "dir2"},
+#if 0
+      {"dav://www.gtk.org/plan/", TRUE, TRUE, "dav://www.gtk.org/plan/meetings/20071218.txt", "meetings/20071218.txt"},
+      {"dav://www.gtk.org/plan/meetings", TRUE, TRUE, "dav://www.gtk.org/plan/meetings/20071218.txt", "20071218.txt"},
+#endif
+    };
+  
+  int i;
+  for (i = 0; i < G_N_ELEMENTS (dirs); i++)
+    {
+      char *s = get_relative_path (dirs[i].use_uri, dirs[i].equal, dirs[i].path1, dirs[i].path2);
+      if (dirs[i].equal) 
+	g_assert_cmpstr (s, ==, dirs[i].path3);
+      g_free (s);
+    }
+}
+
+static void
+roundtrip_parent_child (const gboolean use_uri, const gboolean under_root_descending,
+			const char *path, const char *dir_holder)
+{
+  GFile *files[6] = {NULL};
+  int i;
+  
+  if (use_uri)
+    {
+      files[0] = g_file_new_for_uri (path);
+      files[1] = g_file_new_for_uri (path);
+    }
+  else
+    {
+      files[0] = g_file_new_for_path (path);
+      files[1] = g_file_new_for_path (path);
+    }
+
+  g_assert (files[0] != NULL);
+  g_assert (files[1] != NULL);
+  
+  files[2] = g_file_get_child (files[1], dir_holder); 
+  g_assert (files[2] != NULL);
+  
+  files[3] = g_file_get_parent (files[2]);
+  g_assert (files[3] != NULL);
+  g_assert (g_file_equal (files[3], files[0]) == TRUE);
+  
+  files[4] = g_file_get_parent (files[3]);
+  /*  Don't go lower beyond the root */
+  if (under_root_descending) 
+    g_assert (files[4] == NULL);
+  else
+    {
+      g_assert (files[4] != NULL);
+      
+      files[5] = g_file_get_child (files[4], dir_holder); 
+      g_assert (files[5] != NULL);
+      g_assert (g_file_equal (files[5], files[0]) == TRUE);
+    }
+  
+  for (i = 0; i < G_N_ELEMENTS (files); i++)
+    {
+      if (files[i])
+	g_object_unref (files[i]);
+    }
+}
+
+static void
+test_g_file_get_parent_child (void)
+{
+  const struct TestPathsWithOper paths[] =
+    {
+      /* path     root_desc   uri  dir_holder */
+      {"/dir1/dir", FALSE, FALSE, "dir"},
+      {"/dir", FALSE, FALSE, "dir"},
+      {"/", TRUE, FALSE, "dir"},
+      {"/UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88/", FALSE, FALSE, "UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88"},
+      {"file:///dir1/dir", FALSE, TRUE, "dir"},
+      {"file:///dir", FALSE, TRUE, "dir"},
+      {"file:///", TRUE, TRUE, "dir"},
+      {"file:///UTF-8%20p%C5%99%C3%ADli%C5%A1%20%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%20k%C5%AF%C5%88/", FALSE, TRUE, "UTF-8 p\xc5\x99\xc3\xadli\xc5\xa1 \xc5\xbelu\xc5\xa5ou\xc4\x8dk\xc3\xbd k\xc5\xaf\xc5\x88"},
+      {"dav://www.gtk.org/plan/meetings", FALSE, TRUE, "meetings"},
+    };
+
+  int i;
+  for (i = 0; i < G_N_ELEMENTS (paths); i++)
+    roundtrip_parent_child (paths[i].use_uri, paths[i].equal, paths[i].path1, paths[i].path2);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+  
+  
+  /*  Testing whether g_file_new_for_path() or g_file_new_for_uri() always returns non-NULL result  */
+  g_test_add_func ("/g-file/test_g_file_new_null", test_g_file_new_null);
+  
+  /*  Testing whether the g_file_new_for_path() correctly canonicalizes strings and two files equals (g_file_equal()) */
+  g_test_add_func ("/g-file/test_g_file_new_for_path", test_g_file_new_for_path);
+
+  /*  Testing whether the g_file_new_for_uri() correctly canonicalizes strings and two files equals (g_file_equal()) */
+  g_test_add_func ("/g-file/test_g_file_new_for_uri", test_g_file_new_for_uri);
+
+  /*  Testing g_file_dup() equals original file via g_file_equal()  */
+  g_test_add_func ("/g-file/test_g_file_dup", test_g_file_dup);
+
+  /*  Testing g_file_get_parse_name() to return correct UTF-8 string    */
+  g_test_add_func ("/g-file/test_g_file_get_parse_name_utf8", test_g_file_get_parse_name_utf8);
+  
+  /*  Testing g_file_new_for_commandline_arg() for correct relavive path resolution and correct path/URI guess   */
+  g_test_add_func ("/g-file/test_g_file_new_for_commandline_arg", test_g_file_new_for_commandline_arg);
+  
+  /*  Testing g_file_has_prefix(), g_file_get_relative_path() and g_file_resolve_relative_path() to return and process correct relative paths         */
+  g_test_add_func ("/g-file/test_g_file_has_prefix", test_g_file_has_prefix);
+  
+  /*  Testing g_file_get_parent() and g_file_get_child()            */
+  g_test_add_func ("/g-file/test_g_file_get_parent_child", test_g_file_get_parent_child);
+  
+  return g_test_run();
+}
diff --git a/gio/tests/g-icon.c b/gio/tests/g-icon.c
new file mode 100644
index 0000000..5fe4571
--- /dev/null
+++ b/gio/tests/g-icon.c
@@ -0,0 +1,245 @@
+/* GLib testing framework examples and tests
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ *
+ * Authors: David Zeuthen <davidz@redhat.com>
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+test_g_icon_serialize (void)
+{
+  GIcon *icon;
+  GIcon *icon2;
+  GIcon *icon3;
+  GIcon *icon4;
+  GIcon *icon5;
+  GEmblem *emblem1;
+  GEmblem *emblem2;
+  const char *uri;
+  GFile *location;
+  char *data;
+  GError *error;
+
+  error = NULL;
+
+  /* check that GFileIcon and GThemedIcon serialize to the encoding specified */
+
+  uri = "file:///some/native/path/to/an/icon.png";
+  location = g_file_new_for_uri (uri);
+  icon = g_file_icon_new (location);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "/some/native/path/to/an/icon.png");
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (location);
+
+  uri = "file:///some/native/path/to/an/icon with spaces.png";
+  location = g_file_new_for_uri (uri);
+  icon = g_file_icon_new (location);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "/some/native/path/to/an/icon with spaces.png");
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (location);
+
+  uri = "sftp:///some/non-native/path/to/an/icon.png";
+  location = g_file_new_for_uri (uri);
+  icon = g_file_icon_new (location);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "sftp:///some/non-native/path/to/an/icon.png");
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (location);
+
+#if 0
+  uri = "sftp:///some/non-native/path/to/an/icon with spaces.png";
+  location = g_file_new_for_uri (uri);
+  icon = g_file_icon_new (location);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "sftp:///some/non-native/path/to/an/icon%20with%20spaces.png");
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (location);
+#endif
+
+  icon = g_themed_icon_new ("network-server");
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "network-server");
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+
+  /* Check that we can serialize from well-known specified formats */
+  icon = g_icon_new_for_string ("network-server%", &error);
+  g_assert_no_error (error);
+  icon2 = g_themed_icon_new ("network-server%");
+  g_assert (g_icon_equal (icon, icon2));
+  g_object_unref (icon);
+  g_object_unref (icon2);
+
+  icon = g_icon_new_for_string ("/path/to/somewhere.png", &error);
+  g_assert_no_error (error);
+  location = g_file_new_for_commandline_arg ("/path/to/somewhere.png");
+  icon2 = g_file_icon_new (location);
+  g_assert (g_icon_equal (icon, icon2));
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (location);
+
+  icon = g_icon_new_for_string ("/path/to/somewhere with whitespace.png", &error);
+  g_assert_no_error (error);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "/path/to/somewhere with whitespace.png");
+  g_free (data);
+  location = g_file_new_for_commandline_arg ("/path/to/somewhere with whitespace.png");
+  icon2 = g_file_icon_new (location);
+  g_assert (g_icon_equal (icon, icon2));
+  g_object_unref (location);
+  g_object_unref (icon2);
+  location = g_file_new_for_commandline_arg ("/path/to/somewhere%20with%20whitespace.png");
+  icon2 = g_file_icon_new (location);
+  g_assert (!g_icon_equal (icon, icon2));
+  g_object_unref (location);
+  g_object_unref (icon2);
+  g_object_unref (icon);
+
+  icon = g_icon_new_for_string ("sftp:///path/to/somewhere.png", &error);
+  g_assert_no_error (error);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "sftp:///path/to/somewhere.png");
+  g_free (data);
+  location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere.png");
+  icon2 = g_file_icon_new (location);
+  g_assert (g_icon_equal (icon, icon2));
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (location);
+
+#if 0
+  icon = g_icon_new_for_string ("sftp:///path/to/somewhere with whitespace.png", &error);
+  g_assert_no_error (error);
+  data = g_icon_to_string (icon);
+  g_assert_cmpstr (data, ==, "sftp:///path/to/somewhere%20with%20whitespace.png");
+  g_free (data);
+  location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere with whitespace.png");
+  icon2 = g_file_icon_new (location);
+  g_assert (g_icon_equal (icon, icon2));
+  g_object_unref (location);
+  g_object_unref (icon2);
+  location = g_file_new_for_commandline_arg ("sftp:///path/to/somewhere%20with%20whitespace.png");
+  icon2 = g_file_icon_new (location);
+  g_assert (g_icon_equal (icon, icon2));
+  g_object_unref (location);
+  g_object_unref (icon2);
+  g_object_unref (icon);
+#endif
+
+  /* Check that GThemedIcon serialization works */
+
+  icon = g_themed_icon_new ("network-server");
+  g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
+  data = g_icon_to_string (icon);
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+
+  icon = g_themed_icon_new ("icon name with whitespace");
+  g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
+  data = g_icon_to_string (icon);
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+
+  icon = g_themed_icon_new_with_default_fallbacks ("network-server-xyz");
+  g_themed_icon_append_name (G_THEMED_ICON (icon), "computer");
+  data = g_icon_to_string (icon);
+  icon2 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon, icon2));
+  g_free (data);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+
+  /* Check that GEmblemedIcon serialization works */
+
+  icon = g_themed_icon_new ("face-smirk");
+  icon2 = g_themed_icon_new ("emblem-important");
+  g_themed_icon_append_name (G_THEMED_ICON (icon2), "emblem-shared");
+  location = g_file_new_for_uri ("file:///some/path/somewhere.png");
+  icon3 = g_file_icon_new (location);
+  g_object_unref (location);
+  emblem1 = g_emblem_new_with_origin (icon2, G_EMBLEM_ORIGIN_DEVICE);
+  emblem2 = g_emblem_new_with_origin (icon3, G_EMBLEM_ORIGIN_LIVEMETADATA);
+  icon4 = g_emblemed_icon_new (icon, emblem1);
+  g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (icon4), emblem2);
+  data = g_icon_to_string (icon4);
+  icon5 = g_icon_new_for_string (data, &error);
+  g_assert_no_error (error);
+  g_assert (g_icon_equal (icon4, icon5));
+  g_object_unref (emblem1);
+  g_object_unref (emblem2);
+  g_object_unref (icon);
+  g_object_unref (icon2);
+  g_object_unref (icon3);
+  g_object_unref (icon4);
+  g_object_unref (icon5);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/g-icon/serialize", test_g_icon_serialize);
+
+  return g_test_run();
+}
diff --git a/gio/tests/live-g-file.c b/gio/tests/live-g-file.c
new file mode 100644
index 0000000..fe11d31
--- /dev/null
+++ b/gio/tests/live-g-file.c
@@ -0,0 +1,1207 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Authors: Tomas Bzatek <tbzatek@redhat.com>
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#define DEFAULT_TEST_DIR		"testdir_live-g-file"
+
+#define PATTERN_FILE_SIZE	0x10000
+#define TEST_HANDLE_SPECIAL	TRUE
+
+enum StructureExtraFlags
+{
+  TEST_DELETE_NORMAL = 1 << 0,
+  TEST_DELETE_TRASH = 1 << 1,
+  TEST_DELETE_NON_EMPTY = 1 << 2,
+  TEST_DELETE_FAILURE = 1 << 3,
+  TEST_NOT_EXISTS = 1 << 4,
+  TEST_ENUMERATE_FILE = 1 << 5,
+  TEST_NO_ACCESS = 1 << 6,
+  TEST_COPY = 1 << 7,
+  TEST_MOVE = 1 << 8,
+  TEST_COPY_ERROR_RECURSE = 1 << 9,
+  TEST_ALREADY_EXISTS = 1 << 10,
+  TEST_TARGET_IS_FILE = 1 << 11,
+  TEST_CREATE = 1 << 12,
+  TEST_REPLACE = 1 << 13,
+  TEST_APPEND = 1 << 14,
+  TEST_OPEN = 1 << 15,
+  TEST_OVERWRITE = 1 << 16,
+  TEST_INVALID_SYMLINK = 1 << 17,
+};
+
+struct StructureItem
+{
+  const char *filename;
+  const char *link_to;
+  GFileType file_type;
+  GFileCreateFlags create_flags;
+  guint32 mode;
+  gboolean handle_special;
+  enum StructureExtraFlags extra_flags;
+};
+
+#define TEST_DIR_NO_ACCESS		"dir_no-access"
+#define TEST_DIR_NO_WRITE		"dir_no-write"
+#define TEST_DIR_TARGET			"dir-target"
+#define TEST_NAME_NOT_EXISTS	"not_exists"
+#define TEST_TARGET_FILE		"target-file"
+
+
+static const struct StructureItem sample_struct[] = {
+/*	 filename				link	file_type				create_flags		mode | handle_special | extra_flags              */
+    {"dir1",				NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_NONE, 0, 0, TEST_DELETE_NORMAL | TEST_DELETE_NON_EMPTY | TEST_REPLACE | TEST_OPEN},
+    {"dir1/subdir",			NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_NONE, 0, 0, TEST_COPY	| TEST_COPY_ERROR_RECURSE | TEST_APPEND},
+    {"dir2",				NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_NONE, 0, 0, TEST_DELETE_NORMAL | TEST_MOVE | TEST_CREATE},
+    {TEST_DIR_TARGET,		NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_NONE, 0, 0, TEST_COPY | TEST_COPY_ERROR_RECURSE},
+    {TEST_DIR_NO_ACCESS,	NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_PRIVATE, S_IRUSR + S_IWUSR + S_IRGRP + S_IWGRP + S_IROTH + S_IWOTH, 0, TEST_NO_ACCESS | TEST_OPEN},
+    {TEST_DIR_NO_WRITE,		NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_PRIVATE, S_IRUSR + S_IXUSR + S_IRGRP + S_IXGRP + S_IROTH + S_IXOTH, 0, 0},
+    {TEST_TARGET_FILE,		NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, 0, TEST_COPY | TEST_OPEN},
+	{"normal_file",			NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, 0, TEST_ENUMERATE_FILE | TEST_CREATE | TEST_OVERWRITE},
+	{"normal_file-symlink",	"normal_file",	G_FILE_TYPE_SYMBOLIC_LINK, G_FILE_CREATE_NONE, 0, 0, TEST_ENUMERATE_FILE | TEST_COPY | TEST_OPEN},
+    {"executable_file",		NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, S_IRWXU + S_IRWXG + S_IRWXO, 0, TEST_DELETE_TRASH | TEST_COPY | TEST_OPEN | TEST_OVERWRITE | TEST_REPLACE},
+    {"private_file",		NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_PRIVATE, 0, 0, TEST_COPY | TEST_OPEN | TEST_OVERWRITE | TEST_APPEND},
+    {"normal_file2",		NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, 0, TEST_COPY | TEST_OVERWRITE | TEST_REPLACE},
+    {"readonly_file",		NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, S_IRUSR + S_IRGRP + S_IROTH, 0, TEST_DELETE_NORMAL | TEST_OPEN},
+    {"UTF_pr\xcc\x8ci\xcc\x81lis\xcc\x8c z",
+    						NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, 0, TEST_COPY | TEST_CREATE | TEST_OPEN | TEST_OVERWRITE},
+    {"dir_pr\xcc\x8ci\xcc\x81lis\xcc\x8c z",
+    						NULL,	G_FILE_TYPE_DIRECTORY,	G_FILE_CREATE_NONE, 0, 0, TEST_DELETE_NORMAL | TEST_CREATE},
+    {"pattern_file",		NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_COPY | TEST_OPEN | TEST_APPEND},
+    {TEST_NAME_NOT_EXISTS,	NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_DELETE_NORMAL | TEST_NOT_EXISTS | TEST_COPY | TEST_OPEN},
+    {TEST_NAME_NOT_EXISTS,	NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_DELETE_TRASH | TEST_NOT_EXISTS | TEST_MOVE},
+    {"not_exists2",			NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_NOT_EXISTS | TEST_CREATE},
+    {"not_exists3",			NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_NOT_EXISTS | TEST_REPLACE},
+    {"not_exists4",			NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_NOT_EXISTS | TEST_APPEND},
+    {"dir_no-execute/file",	NULL,	G_FILE_TYPE_REGULAR,	G_FILE_CREATE_NONE, 0, TEST_HANDLE_SPECIAL, TEST_DELETE_NORMAL | TEST_DELETE_FAILURE | TEST_NOT_EXISTS | TEST_OPEN},
+	{"lost_symlink",		"nowhere",	G_FILE_TYPE_SYMBOLIC_LINK, G_FILE_CREATE_NONE, 0, 0, TEST_COPY | TEST_DELETE_NORMAL | TEST_OPEN | TEST_INVALID_SYMLINK},
+  };
+
+static gboolean write_test;
+static gboolean verbose;
+static gboolean posix_compat;
+
+#ifdef G_HAVE_ISO_VARARGS
+#define log(...) if (verbose)  g_print (__VA_ARGS__)
+#elif defined(G_HAVE_GNUC_VARARGS)
+#define log(msg...) if (verbose)  g_print (msg)
+#else  /* no varargs macros */
+static void log (const g_char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  if (verbose) g_print (format, args);
+  va_end (args);
+}
+#endif
+
+static GFile *
+create_empty_file (GFile * parent, const char *filename,
+		   GFileCreateFlags create_flags)
+{
+  GFile *child;
+  gboolean res;
+  GError *error;
+  GFileOutputStream *outs;
+
+  child = g_file_get_child (parent, filename);
+  g_assert (child != NULL);
+
+  error = NULL;
+  outs = g_file_replace (child, NULL, FALSE, create_flags, NULL, &error);
+  g_assert_no_error (error);
+  g_assert (outs != NULL);
+  error = NULL;
+  res = g_output_stream_close (G_OUTPUT_STREAM (outs), NULL, &error);
+  g_object_unref (outs);
+  return child;
+}
+
+static GFile *
+create_empty_dir (GFile * parent, const char *filename)
+{
+  GFile *child;
+  gboolean res;
+  GError *error;
+
+  child = g_file_get_child (parent, filename);
+  g_assert (child != NULL);
+  error = NULL;
+  res = g_file_make_directory (child, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert_no_error (error);
+  return child;
+}
+
+static GFile *
+create_symlink (GFile * parent, const char *filename, const char *points_to)
+{
+  GFile *child;
+  gboolean res;
+  GError *error;
+
+  child = g_file_get_child (parent, filename);
+  g_assert (child != NULL);
+  error = NULL;
+  res = g_file_make_symbolic_link (child, points_to, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert_no_error (error);
+  return child;
+}
+
+static void
+test_create_structure (gconstpointer test_data)
+{
+  GFile *root;
+  GFile *child;
+  gboolean res;
+  GError *error;
+  GFileOutputStream *outs;
+  GDataOutputStream *outds;
+  int i;
+  struct StructureItem item;
+
+  g_assert (test_data != NULL);
+  log ("\n  Going to create testing structure in '%s'...\n",
+       (char *) test_data);
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+
+  /*  create root directory  */
+  res = g_file_make_directory (root, NULL, NULL);
+  /*  don't care about errors here  */
+
+  /*  create any other items  */
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+      if ((item.handle_special)
+	  || ((!posix_compat)
+	      && (item.file_type == G_FILE_TYPE_SYMBOLIC_LINK)))
+	continue;
+
+      child = NULL;
+      switch (item.file_type)
+	{
+	case G_FILE_TYPE_REGULAR:
+	  log ("    Creating file '%s'...\n", item.filename);
+	  child = create_empty_file (root, item.filename, item.create_flags);
+	  break;
+	case G_FILE_TYPE_DIRECTORY:
+	  log ("    Creating directory '%s'...\n", item.filename);
+	  child = create_empty_dir (root, item.filename);
+	  break;
+	case G_FILE_TYPE_SYMBOLIC_LINK:
+	  log ("    Creating symlink '%s' --> '%s'...\n", item.filename,
+	       item.link_to);
+	  child = create_symlink (root, item.filename, item.link_to);
+	  break;
+	default:
+	  break;
+	}
+      g_assert (child != NULL);
+
+      if ((item.mode > 0) && (posix_compat))
+	{
+	  error = NULL;
+	  res =
+	    g_file_set_attribute_uint32 (child, G_FILE_ATTRIBUTE_UNIX_MODE,
+					 item.mode,
+					 G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+					 NULL, &error);
+	  g_assert_cmpint (res, ==, TRUE);
+	  g_assert_no_error (error);
+	}
+
+      g_object_unref (child);
+    }
+
+  /*  create a pattern file  */
+  log ("    Creating pattern file...");
+  child = g_file_get_child (root, "pattern_file");
+  g_assert (child != NULL);
+
+  error = NULL;
+  outs =
+    g_file_replace (child, NULL, FALSE, G_FILE_CREATE_NONE, NULL, &error);
+  g_assert_no_error (error);
+
+  g_assert (outs != NULL);
+  outds = g_data_output_stream_new (G_OUTPUT_STREAM (outs));
+  g_assert (outds != NULL);
+  for (i = 0; i < PATTERN_FILE_SIZE; i++)
+    {
+      error = NULL;
+      res = g_data_output_stream_put_byte (outds, i % 256, NULL, &error);
+      g_assert_no_error (error);
+    }
+  error = NULL;
+  res = g_output_stream_close (G_OUTPUT_STREAM (outs), NULL, &error);
+  g_assert_no_error (error);
+  g_object_unref (outds);
+  g_object_unref (outs);
+  g_object_unref (child);
+  log (" done.\n");
+
+  g_object_unref (root);
+}
+
+static GFile *
+file_exists (GFile * parent, const char *filename, gboolean * result)
+{
+  GFile *child;
+  gboolean res;
+
+  if (result)
+    *result = FALSE;
+
+  child = g_file_get_child (parent, filename);
+  g_assert (child != NULL);
+  res = g_file_query_exists (child, NULL);
+  if (result)
+    *result = res;
+
+  return child;
+}
+
+static void
+test_attributes (struct StructureItem item, GFileInfo * info)
+{
+  GFileType ftype;
+  guint32 mode;
+  const char *name, *display_name, *edit_name, *copy_name, *symlink_target;
+  gboolean utf8_valid;
+  gboolean has_attr;
+  gboolean is_symlink;
+  gboolean can_read, can_write;
+
+  /*  standard::type  */
+  has_attr = g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_TYPE);
+  g_assert_cmpint (has_attr, ==, TRUE);
+  ftype = g_file_info_get_file_type (info);
+  g_assert_cmpint (ftype, !=, G_FILE_TYPE_UNKNOWN);
+  g_assert_cmpint (ftype, ==, item.file_type);
+
+  /*  unix::mode  */
+  if ((item.mode > 0) && (posix_compat))
+    {
+      mode =
+	g_file_info_get_attribute_uint32 (info,
+					  G_FILE_ATTRIBUTE_UNIX_MODE) & 0xFFF;
+      g_assert_cmpint (mode, ==, item.mode);
+    }
+
+  /*  access::can-read  */
+  if (item.file_type != G_FILE_TYPE_SYMBOLIC_LINK)
+    {
+      can_read =
+	g_file_info_get_attribute_boolean (info,
+					   G_FILE_ATTRIBUTE_ACCESS_CAN_READ);
+      g_assert_cmpint (can_read, ==, TRUE);
+    }
+
+  /*  access::can-write  */
+  if ((write_test) && ((item.extra_flags & TEST_OVERWRITE) == TEST_OVERWRITE))
+    {
+      can_write =
+	g_file_info_get_attribute_boolean (info,
+					   G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
+      g_assert_cmpint (can_write, ==, TRUE);
+    }
+
+  /*  standard::name  */
+  name = g_file_info_get_name (info);
+  g_assert (name != NULL);
+
+  /*  standard::display-name  */
+  display_name = g_file_info_get_display_name (info);
+  g_assert (display_name != NULL);
+  utf8_valid = g_utf8_validate (display_name, -1, NULL);
+  g_assert_cmpint (utf8_valid, ==, TRUE);
+
+  /*  standard::edit-name  */
+  edit_name = g_file_info_get_edit_name (info);
+  if (edit_name)
+    {
+      utf8_valid = g_utf8_validate (edit_name, -1, NULL);
+      g_assert_cmpint (utf8_valid, ==, TRUE);
+    }
+
+  /*  standard::copy-name  */
+  copy_name =
+    g_file_info_get_attribute_string (info,
+				      G_FILE_ATTRIBUTE_STANDARD_COPY_NAME);
+  if (copy_name)
+    {
+      utf8_valid = g_utf8_validate (copy_name, -1, NULL);
+      g_assert_cmpint (utf8_valid, ==, TRUE);
+    }
+
+  /*  standard::is-symlink  */
+  if (posix_compat)
+    {
+      is_symlink = g_file_info_get_is_symlink (info);
+      g_assert_cmpint (is_symlink, ==,
+		       item.file_type == G_FILE_TYPE_SYMBOLIC_LINK);
+    }
+
+  /*  standard::symlink-target  */
+  if ((item.file_type == G_FILE_TYPE_SYMBOLIC_LINK) && (posix_compat))
+    {
+      symlink_target = g_file_info_get_symlink_target (info);
+      g_assert_cmpstr (symlink_target, ==, item.link_to);
+    }
+}
+
+static void
+test_initial_structure (gconstpointer test_data)
+{
+  GFile *root;
+  GFile *child;
+  gboolean res;
+  GError *error;
+  GFileInputStream *ins;
+  int i;
+  GFileInfo *info;
+  guint32 size;
+  guchar *buffer;
+  gssize read, total_read;
+  struct StructureItem item;
+
+
+  g_assert (test_data != NULL);
+  log ("\n  Testing sample structure in '%s'...\n", (char *) test_data);
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+  /*  test the structure  */
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+      if (((!posix_compat) && (item.file_type == G_FILE_TYPE_SYMBOLIC_LINK))
+	  || (item.handle_special))
+	continue;
+
+      log ("    Testing file '%s'...\n", item.filename);
+
+      child = file_exists (root, item.filename, &res);
+      g_assert (child != NULL);
+      g_assert_cmpint (res, ==, TRUE);
+
+      error = NULL;
+      info =
+	g_file_query_info (child, "*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+			   NULL, &error);
+      g_assert_no_error (error);
+      g_assert (info != NULL);
+
+      test_attributes (item, info);
+
+      g_object_unref (child);
+    }
+
+  /*  read and test the pattern file  */
+  log ("    Testing pattern file...\n");
+  child = file_exists (root, "pattern_file", &res);
+  g_assert (child != NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+  error = NULL;
+  info =
+    g_file_query_info (child, "*", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL,
+		       &error);
+  g_assert_no_error (error);
+  g_assert (info != NULL);
+  size = g_file_info_get_size (info);
+  g_assert_cmpint (size, ==, PATTERN_FILE_SIZE);
+
+  error = NULL;
+  ins = g_file_read (child, NULL, &error);
+  g_assert (ins != NULL);
+  g_assert_no_error (error);
+
+  buffer = g_malloc (PATTERN_FILE_SIZE);
+  total_read = 0;
+
+  while (total_read < PATTERN_FILE_SIZE)
+    {
+      error = NULL;
+      read =
+	g_input_stream_read (G_INPUT_STREAM (ins), buffer + total_read,
+			     PATTERN_FILE_SIZE, NULL, &error);
+      g_assert_no_error (error);
+      total_read += read;
+      log ("      read %d bytes, total = %d of %d.\n", read, total_read,
+	   PATTERN_FILE_SIZE);
+    }
+  g_assert_cmpint (total_read, ==, PATTERN_FILE_SIZE);
+
+  error = NULL;
+  res = g_input_stream_close (G_INPUT_STREAM (ins), NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpint (res, ==, TRUE);
+
+  for (i = 0; i < PATTERN_FILE_SIZE; i++)
+    g_assert_cmpint (*(buffer + i), ==, i % 256);
+
+  g_object_unref (ins);
+  g_object_unref (child);
+  g_free (buffer);
+  g_object_unref (root);
+}
+
+static void
+traverse_recurse_dirs (GFile * parent, GFile * root)
+{
+  gboolean res;
+  GError *error;
+  GFileEnumerator *enumerator;
+  GFileInfo *info;
+  GFile *descend;
+  char *relative_path;
+  int i;
+  gboolean found;
+
+  g_assert (root != NULL);
+
+  error = NULL;
+  enumerator =
+    g_file_enumerate_children (parent, "*",
+			       G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL,
+			       &error);
+  g_assert (enumerator != NULL);
+  g_assert_no_error (error);
+
+  error = NULL;
+  info = g_file_enumerator_next_file (enumerator, NULL, &error);
+  while ((info) && (!error))
+    {
+      descend = g_file_get_child (parent, g_file_info_get_name (info));
+      g_assert (descend != NULL);
+      relative_path = g_file_get_relative_path (root, descend);
+      g_assert (relative_path != NULL);
+
+      found = FALSE;
+      for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+	{
+	  if (strcmp (sample_struct[i].filename, relative_path) == 0)
+	    {
+	      /*  test the attributes again  */
+	      test_attributes (sample_struct[i], info);
+
+	      found = TRUE;
+	      break;
+	    }
+	}
+      g_assert_cmpint (found, ==, TRUE);
+
+      log ("  Found file %s, relative to root: %s\n",
+	   g_file_info_get_display_name (info), relative_path);
+
+      if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+	traverse_recurse_dirs (descend, root);
+
+      g_object_unref (descend);
+      error = NULL;
+      info = g_file_enumerator_next_file (enumerator, NULL, &error);
+    }
+  g_assert_no_error (error);
+
+  error = NULL;
+  res = g_file_enumerator_close (enumerator, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert_no_error (error);
+}
+
+static void
+test_traverse_structure (gconstpointer test_data)
+{
+  GFile *root;
+  gboolean res;
+
+  g_assert (test_data != NULL);
+  log ("\n  Traversing through the sample structure in '%s'...\n",
+       (char *) test_data);
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+  traverse_recurse_dirs (root, root);
+
+  g_object_unref (root);
+}
+
+
+
+
+static void
+test_enumerate (gconstpointer test_data)
+{
+  GFile *root, *child;
+  gboolean res;
+  GError *error;
+  GFileEnumerator *enumerator;
+  GFileInfo *info;
+  int i;
+  struct StructureItem item;
+
+
+  g_assert (test_data != NULL);
+  log ("\n  Test enumerate '%s'...\n", (char *) test_data);
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+      if ((!posix_compat) && (item.file_type == G_FILE_TYPE_SYMBOLIC_LINK))
+	continue;
+
+      if (((item.extra_flags & TEST_NOT_EXISTS) == TEST_NOT_EXISTS) ||
+	  (((item.extra_flags & TEST_NO_ACCESS) == TEST_NO_ACCESS)
+	   && posix_compat)
+	  || ((item.extra_flags & TEST_ENUMERATE_FILE) ==
+	      TEST_ENUMERATE_FILE))
+	{
+	  log ("    Testing file '%s'\n", item.filename);
+	  child = g_file_get_child (root, item.filename);
+	  g_assert (child != NULL);
+	  error = NULL;
+	  enumerator =
+	    g_file_enumerate_children (child, "*",
+				       G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+				       NULL, &error);
+
+	  if ((item.extra_flags & TEST_NOT_EXISTS) == TEST_NOT_EXISTS)
+	    {
+	      g_assert (enumerator == NULL);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
+	    }
+	  if ((item.extra_flags & TEST_ENUMERATE_FILE) == TEST_ENUMERATE_FILE)
+	    {
+	      g_assert (enumerator == NULL);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY);
+	    }
+	  if ((item.extra_flags & TEST_NO_ACCESS) == TEST_NO_ACCESS)
+	    {
+	      g_assert (enumerator != NULL);
+
+	      error = NULL;
+	      info = g_file_enumerator_next_file (enumerator, NULL, &error);
+	      g_assert (info == NULL);
+	      g_assert_no_error (error);
+	      /*  no items should be found, no error should be logged  */
+	    }
+
+	  if (error)
+	    g_error_free (error);
+
+	  if (enumerator)
+	    {
+	      error = NULL;
+	      res = g_file_enumerator_close (enumerator, NULL, &error);
+	      g_assert_cmpint (res, ==, TRUE);
+	      g_assert_no_error (error);
+	    }
+	  g_object_unref (child);
+	}
+    }
+  g_object_unref (root);
+}
+
+static void
+do_copy_move (GFile * root, struct StructureItem item, const char *target_dir,
+	      enum StructureExtraFlags extra_flags)
+{
+  GFile *dst_dir, *src_file, *dst_file;
+  gboolean res;
+  GError *error;
+
+  log ("    do_copy_move: '%s' --> '%s'\n", item.filename, target_dir);
+
+  dst_dir = g_file_get_child (root, target_dir);
+  g_assert (dst_dir != NULL);
+  src_file = g_file_get_child (root, item.filename);
+  g_assert (src_file != NULL);
+  dst_file = g_file_get_child (dst_dir, item.filename);
+  g_assert (dst_file != NULL);
+
+  error = NULL;
+  if ((item.extra_flags & TEST_COPY) == TEST_COPY)
+    res =
+      g_file_copy (src_file, dst_file,
+		   G_FILE_COPY_NOFOLLOW_SYMLINKS |
+		   ((extra_flags ==
+		     TEST_OVERWRITE) ? G_FILE_COPY_OVERWRITE :
+		    G_FILE_COPY_NONE), NULL, NULL, NULL, &error);
+  else
+    res =
+      g_file_move (src_file, dst_file, G_FILE_COPY_NOFOLLOW_SYMLINKS, NULL,
+		   NULL, NULL, &error);
+
+  if (error)
+    log ("       res = %d, error code %d = %s\n", res, error->code,
+	 error->message);
+
+  /*  copying file/directory to itself (".")  */
+  if (((item.extra_flags & TEST_NOT_EXISTS) != TEST_NOT_EXISTS) &&
+      (extra_flags == TEST_ALREADY_EXISTS))
+    {
+      g_assert_cmpint (res, ==, FALSE);
+      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_EXISTS);
+    }
+  /*  target file is a file, overwrite is not set  */
+  else if (((item.extra_flags & TEST_NOT_EXISTS) != TEST_NOT_EXISTS) &&
+	   (extra_flags == TEST_TARGET_IS_FILE))
+    {
+      g_assert_cmpint (res, ==, FALSE);
+      if (item.file_type == G_FILE_TYPE_DIRECTORY)
+	g_assert_error (error, G_IO_ERROR, G_IO_ERROR_WOULD_RECURSE);
+      else
+	g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY);
+    }
+  /*  source file is directory  */
+  else if ((item.extra_flags & TEST_COPY_ERROR_RECURSE) ==
+	   TEST_COPY_ERROR_RECURSE)
+    {
+      g_assert_cmpint (res, ==, FALSE);
+      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_WOULD_RECURSE);
+    }
+  /*  source or target path doesn't exist  */
+  else if (((item.extra_flags & TEST_NOT_EXISTS) == TEST_NOT_EXISTS) ||
+	   (extra_flags == TEST_NOT_EXISTS))
+    {
+      g_assert_cmpint (res, ==, FALSE);
+      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
+    }
+  /*  source or target path permission denied  */
+  else if (((item.extra_flags & TEST_NO_ACCESS) == TEST_NO_ACCESS) ||
+	   (extra_flags == TEST_NO_ACCESS))
+    {
+      g_assert_cmpint (res, ==, FALSE);
+      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED);
+    }
+  /*  no error should be found, all exceptions defined above  */
+  else
+    {
+      g_assert_cmpint (res, ==, TRUE);
+      g_assert_no_error (error);
+    }
+
+  if (error)
+    g_error_free (error);
+
+
+  g_object_unref (dst_dir);
+  g_object_unref (src_file);
+  g_object_unref (dst_file);
+}
+
+static void
+test_copy_move (gconstpointer test_data)
+{
+  GFile *root;
+  gboolean res;
+  int i;
+  struct StructureItem item;
+
+  log ("\n");
+
+  g_assert (test_data != NULL);
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+
+      if ((!posix_compat) && (item.file_type == G_FILE_TYPE_SYMBOLIC_LINK))
+	continue;
+
+      if (((item.extra_flags & TEST_COPY) == TEST_COPY) ||
+	  ((item.extra_flags & TEST_MOVE) == TEST_MOVE))
+	{
+	  /*  test copy/move to a directory, expecting no errors if source files exist  */
+	  do_copy_move (root, item, TEST_DIR_TARGET, 0);
+
+	  /*  some files have been already moved so we can't count with them in the tests  */
+	  if ((item.extra_flags & TEST_COPY) == TEST_COPY)
+	    {
+	      /*  test overwrite for flagged files  */
+	      if ((item.extra_flags & TEST_OVERWRITE) == TEST_OVERWRITE)
+		{
+		  do_copy_move (root, item, TEST_DIR_TARGET, TEST_OVERWRITE);
+		}
+	      /*  source = target, should return G_IO_ERROR_EXISTS  */
+	      do_copy_move (root, item, ".", TEST_ALREADY_EXISTS);
+	      /*  target is file  */
+	      do_copy_move (root, item, TEST_TARGET_FILE,
+			    TEST_TARGET_IS_FILE);
+	      /*  target path is invalid  */
+	      do_copy_move (root, item, TEST_NAME_NOT_EXISTS,
+			    TEST_NOT_EXISTS);
+
+	      /*  tests on POSIX-compatible filesystems  */
+	      if (posix_compat)
+		{
+		  /*  target directory is not accessible (no execute flag)  */
+		  do_copy_move (root, item, TEST_DIR_NO_ACCESS,
+				TEST_NO_ACCESS);
+		  /*  target directory is readonly  */
+		  do_copy_move (root, item, TEST_DIR_NO_WRITE,
+				TEST_NO_ACCESS);
+		}
+	    }
+	}
+    }
+  g_object_unref (root);
+}
+
+static void
+test_create (gconstpointer test_data)
+{
+  GFile *root, *child;
+  gboolean res;
+  GError *error;
+  int i;
+  struct StructureItem item;
+  GFileOutputStream *os;
+
+  g_assert (test_data != NULL);
+  log ("\n");
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+
+      if (((item.extra_flags & TEST_CREATE) == TEST_CREATE) ||
+	  ((item.extra_flags & TEST_REPLACE) == TEST_REPLACE) ||
+	  ((item.extra_flags & TEST_APPEND) == TEST_APPEND))
+	{
+	  log ("  test_create: '%s'\n", item.filename);
+
+	  child = g_file_get_child (root, item.filename);
+	  g_assert (child != NULL);
+	  error = NULL;
+	  os = NULL;
+
+	  if ((item.extra_flags & TEST_CREATE) == TEST_CREATE)
+	    os = g_file_create (child, item.create_flags, NULL, &error);
+	  else if ((item.extra_flags & TEST_REPLACE) == TEST_REPLACE)
+	    os =
+	      g_file_replace (child, NULL, TRUE, item.create_flags, NULL,
+			      &error);
+	  else if ((item.extra_flags & TEST_APPEND) == TEST_APPEND)
+	    os = g_file_append_to (child, item.create_flags, NULL, &error);
+
+
+	  if (error)
+	    log ("       error code %d = %s\n", error->code, error->message);
+
+	  if (((item.extra_flags & TEST_NOT_EXISTS) == 0) &&
+	      ((item.extra_flags & TEST_CREATE) == TEST_CREATE))
+	    {
+	      g_assert (os == NULL);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_EXISTS);
+	    }
+	  else if (item.file_type == G_FILE_TYPE_DIRECTORY)
+	    {
+	      g_assert (os == NULL);
+	      if ((item.extra_flags & TEST_CREATE) == TEST_CREATE)
+		g_assert_error (error, G_IO_ERROR, G_IO_ERROR_EXISTS);
+	      else
+		g_assert_error (error, G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY);
+	    }
+	  else
+	    {
+	      g_assert (os != NULL);
+	      g_assert_no_error (error);
+	    }
+
+	  if (error)
+	    g_error_free (error);
+
+	  if (os)
+	    {
+	      error = NULL;
+	      res =
+		g_output_stream_close (G_OUTPUT_STREAM (os), NULL, &error);
+	      if (error)
+		log ("         g_output_stream_close: error %d = %s\n",
+		     error->code, error->message);
+	      g_assert_cmpint (res, ==, TRUE);
+	      g_assert_no_error (error);
+	    }
+	  g_object_unref (child);
+	}
+    }
+  g_object_unref (root);
+}
+
+static void
+test_open (gconstpointer test_data)
+{
+  GFile *root, *child;
+  gboolean res;
+  GError *error;
+  int i;
+  struct StructureItem item;
+  GFileInputStream *input_stream;
+
+  g_assert (test_data != NULL);
+  log ("\n");
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+
+      if ((!posix_compat) && (item.file_type == G_FILE_TYPE_SYMBOLIC_LINK))
+	continue;
+
+      if ((item.extra_flags & TEST_OPEN) == TEST_OPEN)
+	{
+	  log ("  test_open: '%s'\n", item.filename);
+
+	  child = g_file_get_child (root, item.filename);
+	  g_assert (child != NULL);
+	  error = NULL;
+	  input_stream = g_file_read (child, NULL, &error);
+
+	  if (((item.extra_flags & TEST_NOT_EXISTS) == TEST_NOT_EXISTS) ||
+	      ((item.extra_flags & TEST_INVALID_SYMLINK) ==
+	       TEST_INVALID_SYMLINK))
+	    {
+	      g_assert (input_stream == NULL);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
+	    }
+	  else if (item.file_type == G_FILE_TYPE_DIRECTORY)
+	    {
+	      g_assert (input_stream == NULL);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY);
+	    }
+	  else
+	    {
+	      g_assert (input_stream != NULL);
+	      g_assert_no_error (error);
+	    }
+
+	  if (error)
+	    g_error_free (error);
+
+	  if (input_stream)
+	    {
+	      error = NULL;
+	      res =
+		g_input_stream_close (G_INPUT_STREAM (input_stream), NULL,
+				      &error);
+	      g_assert_cmpint (res, ==, TRUE);
+	      g_assert_no_error (error);
+	    }
+	  g_object_unref (child);
+	}
+    }
+  g_object_unref (root);
+}
+
+static void
+test_delete (gconstpointer test_data)
+{
+  GFile *root;
+  GFile *child;
+  gboolean res;
+  GError *error;
+  int i;
+  struct StructureItem item;
+
+  g_assert (test_data != NULL);
+  log ("\n");
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  res = g_file_query_exists (root, NULL);
+  g_assert_cmpint (res, ==, TRUE);
+
+  for (i = 0; i < G_N_ELEMENTS (sample_struct); i++)
+    {
+      item = sample_struct[i];
+
+      if ((!posix_compat) && (item.file_type == G_FILE_TYPE_SYMBOLIC_LINK))
+	continue;
+
+      if (((item.extra_flags & TEST_DELETE_NORMAL) == TEST_DELETE_NORMAL) ||
+	  ((item.extra_flags & TEST_DELETE_TRASH) == TEST_DELETE_TRASH))
+	{
+	  child = file_exists (root, item.filename, &res);
+	  g_assert (child != NULL);
+	  /*  we don't care about result here  */
+
+	  log ("  Deleting %s, path = %s\n", item.filename,
+	       g_file_get_path (child));
+	  error = NULL;
+	  if ((item.extra_flags & TEST_DELETE_NORMAL) == TEST_DELETE_NORMAL)
+	    res = g_file_delete (child, NULL, &error);
+	  else
+	    res = g_file_trash (child, NULL, &error);
+
+	  if ((item.extra_flags & TEST_DELETE_NON_EMPTY) ==
+	      TEST_DELETE_NON_EMPTY)
+	    {
+	      g_assert_cmpint (res, ==, FALSE);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_EMPTY);
+	    }
+	  if ((item.extra_flags & TEST_DELETE_FAILURE) == TEST_DELETE_FAILURE)
+	    {
+	      g_assert_cmpint (res, ==, FALSE);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
+	    }
+	  if ((item.extra_flags & TEST_NOT_EXISTS) == TEST_NOT_EXISTS)
+	    {
+	      g_assert_cmpint (res, ==, FALSE);
+	      g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
+	    }
+
+	  if (error)
+	    {
+	      log ("      result = %d, error = %s\n", res, error->message);
+	      g_error_free (error);
+	    }
+
+	  g_object_unref (child);
+	}
+    }
+  g_object_unref (root);
+}
+
+
+static void
+cleanup_dir_recurse (GFile *parent, GFile *root)
+{
+  gboolean res;
+  GError *error;
+  GFileEnumerator *enumerator;
+  GFileInfo *info;
+  GFile *descend;
+  char *relative_path;
+
+  g_assert (root != NULL);
+
+  error = NULL;
+  enumerator =
+    g_file_enumerate_children (parent, "*",
+			       G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL,
+			       &error);
+  if (! enumerator)
+	  return;
+
+  error = NULL;
+  info = g_file_enumerator_next_file (enumerator, NULL, &error);
+  while ((info) && (!error))
+    {
+      descend = g_file_get_child (parent, g_file_info_get_name (info));
+      g_assert (descend != NULL);
+      relative_path = g_file_get_relative_path (root, descend);
+      g_assert (relative_path != NULL);
+
+      log ("    deleting '%s'\n", g_file_info_get_display_name (info));
+
+      if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+    	  cleanup_dir_recurse (descend, root);
+      
+      error = NULL;
+      res = g_file_delete (descend, NULL, &error);
+      g_assert_cmpint (res, ==, TRUE);
+
+      g_object_unref (descend);
+      error = NULL;
+      info = g_file_enumerator_next_file (enumerator, NULL, &error);
+    }
+  g_assert_no_error (error);
+
+  error = NULL;
+  res = g_file_enumerator_close (enumerator, NULL, &error);
+  g_assert_cmpint (res, ==, TRUE);
+  g_assert_no_error (error);
+}
+
+static void
+prep_clean_structure (gconstpointer test_data)
+{
+  GFile *root;
+  
+  g_assert (test_data != NULL);
+  log ("\n  Cleaning target testing structure in '%s'...\n",
+       (char *) test_data);
+
+  root = g_file_new_for_commandline_arg ((char *) test_data);
+  g_assert (root != NULL);
+  
+  cleanup_dir_recurse (root, root);
+
+  g_file_delete (root, NULL, NULL);
+  
+  g_object_unref (root);
+}
+
+int
+main (int argc, char *argv[])
+{
+  static gboolean only_create_struct;
+  static char *target_path;
+  GError *error;
+  GOptionContext *context;
+
+  static GOptionEntry cmd_entries[] = {
+    {"read-write", 'w', 0, G_OPTION_ARG_NONE, &write_test,
+     "Perform write tests (incl. structure creation)", NULL},
+    {"create-struct", 'c', 0, G_OPTION_ARG_NONE, &only_create_struct,
+     "Only create testing structure (no tests)", NULL},
+    {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL},
+    {"posix", 'x', 0, G_OPTION_ARG_NONE, &posix_compat,
+     "Test POSIX-specific features (unix permissions, symlinks)", NULL},
+    {NULL}
+  };
+
+  verbose = FALSE;
+  write_test = FALSE;
+  only_create_struct = FALSE;
+  target_path = NULL;
+  posix_compat = FALSE;
+
+  /*  strip all gtester-specific args  */
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  /*  no extra parameters specified, assume we're executed from glib test suite  */ 
+  if (argc < 2)
+    {
+	  verbose = TRUE;
+	  write_test = TRUE;
+	  only_create_struct = FALSE;
+	  target_path = DEFAULT_TEST_DIR;
+#ifdef G_PLATFORM_WIN32
+	  posix_compat = FALSE;
+#else
+	  posix_compat = TRUE;
+#endif
+    }
+  
+  /*  add trailing args  */
+  error = NULL;
+  context = g_option_context_new ("target_path");
+  g_option_context_add_main_entries (context, cmd_entries, NULL);
+  if (!g_option_context_parse (context, &argc, &argv, &error))
+    {
+      g_print ("option parsing failed: %s\n", error->message);
+      return g_test_run ();
+    }
+
+  /*  remaining arg should is the target path; we don't care of the extra args here  */ 
+  if (argc >= 2)
+    target_path = strdup (argv[1]);
+  
+  if (! target_path) 
+    {
+      g_print ("error: target path was not specified\n");
+      g_print ("%s", g_option_context_get_help (context, TRUE, NULL));
+      return g_test_run ();
+    }
+
+  
+  /*  Write test - clean target directory first  */
+  /*    this can be also considered as a test - enumerate + delete  */ 
+  if (write_test || only_create_struct)
+    g_test_add_data_func ("/live-g-file/prep_clean_structure", target_path,
+    	  	  prep_clean_structure);
+  
+  /*  Write test - create new testing structure  */
+  if (write_test || only_create_struct)
+    g_test_add_data_func ("/live-g-file/create_structure", target_path,
+			  test_create_structure);
+
+  /*  Read test - test the sample structure - expect defined attributes to be there  */
+  if (!only_create_struct)
+    g_test_add_data_func ("/live-g-file/test_initial_structure", target_path,
+			  test_initial_structure);
+
+  /*  Read test - test traverse the structure - no special file should appear  */
+  if (!only_create_struct)
+    g_test_add_data_func ("/live-g-file/test_traverse_structure", target_path,
+			  test_traverse_structure);
+
+  /*  Read test - enumerate  */
+  if (!only_create_struct)
+    g_test_add_data_func ("/live-g-file/test_enumerate", target_path,
+			  test_enumerate);
+
+  /*  Read test - open (g_file_read())  */
+  if (!only_create_struct)
+    g_test_add_data_func ("/live-g-file/test_open", target_path, test_open);
+
+  /*  Write test - create  */
+  if (write_test && (!only_create_struct))
+    g_test_add_data_func ("/live-g-file/test_create", target_path,
+			  test_create);
+
+  /*  Write test - copy, move  */
+  if (write_test && (!only_create_struct))
+    g_test_add_data_func ("/live-g-file/test_copy_move", target_path,
+			  test_copy_move);
+
+  /*  Write test - delete, trash  */
+  if (write_test && (!only_create_struct))
+    g_test_add_data_func ("/live-g-file/test_delete", target_path,
+			  test_delete);
+
+  if (write_test || only_create_struct)
+    g_test_add_data_func ("/live-g-file/final_clean", target_path,
+    	  	  prep_clean_structure);
+
+  return g_test_run ();
+
+}
diff --git a/gio/tests/live-g-file.txt b/gio/tests/live-g-file.txt
new file mode 100644
index 0000000..95da0e0
--- /dev/null
+++ b/gio/tests/live-g-file.txt
@@ -0,0 +1,27 @@
+Before you start testing it would be good to explain how it works.
+
+The script works in three modes:
+ 1. read-only (no special arguments) - suitable for read-only backends. Just 
+        create the sample structure using the second mode, pack it (tar -p is 
+        preffered to preserve unix modes) and put it on a reachable place.
+ 2. create-structure - only creates reference structure for later testing 
+        in read-only mode
+ 3. write mode - full test suite, creates testing structure and performs all 
+        read and write tests. Please note the delete/move tests are included 
+        in this mode and target directory structure is unusable after the script
+        is finished.
+
+
+To see the list of available parameters just run 'live-g-file --help'
+
+
+Notes:
+ - it's advised to clean target directory first, otherwise some tests might fail
+   (i.e. the tests creating testing structure)
+
+
+Tested:
+ - local filesystem (/tmp/...)
+ - file:// uri (file:///tmp/...)
+ - locatest:// gvfs backend (localtest:///tmp/...)
+ - FAT16 filesystem (no POSIX extensions)
diff --git a/gio/tests/memory-input-stream.c b/gio/tests/memory-input-stream.c
new file mode 100644
index 0000000..6ffee86
--- /dev/null
+++ b/gio/tests/memory-input-stream.c
@@ -0,0 +1,78 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2007 Imendio AB
+ * Authors: Tim Janik
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+test_read_chunks (void)
+{
+  const char *data1 = "abcdefghijklmnopqrstuvwxyz";
+  const char *data2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+  const char *result = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+  char buffer[128];
+  gsize bytes_read, pos, len, chunk_size;
+  GError *error = NULL;
+  GInputStream *stream;
+  gboolean res;
+
+  stream = g_memory_input_stream_new ();
+
+  g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (stream),
+                                  data1, -1, NULL);  
+  g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (stream),
+                                  data2, -1, NULL);  
+  len = strlen (data1) + strlen (data2);
+
+  for (chunk_size = 1; chunk_size < len - 1; chunk_size++)
+    {
+      pos = 0;
+      while (pos < len) 
+        {
+          bytes_read = g_input_stream_read (stream, buffer, chunk_size, NULL, &error);
+          g_assert_no_error (error);
+          g_assert_cmpint (bytes_read, ==, MIN (chunk_size, len - pos));
+          g_assert (strncmp (buffer, result + pos, bytes_read) == 0);
+
+          pos += bytes_read;
+        }
+      
+      g_assert_cmpint (pos, ==, len);
+      res = g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, &error);
+      g_assert_cmpint (res, ==, TRUE);
+      g_assert_no_error (error);
+    }
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/memory-input-stream/read-chunks", test_read_chunks);
+
+  return g_test_run();
+}
diff --git a/gio/tests/memory-output-stream.c b/gio/tests/memory-output-stream.c
new file mode 100644
index 0000000..cc1e1ea
--- /dev/null
+++ b/gio/tests/memory-output-stream.c
@@ -0,0 +1,100 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Author: Matthias Clasen
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+test_truncate (void)
+{
+  GOutputStream *mo;
+  GDataOutputStream *o;
+  int i;
+  GError *error = NULL;
+
+  g_test_bug ("540423");
+
+  mo = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+  o = g_data_output_stream_new (mo);
+  for (i = 0; i < 1000; i++)
+    {
+      g_data_output_stream_put_byte (o, 1, NULL, &error);
+      g_assert_no_error (error);
+    }
+  g_seekable_truncate (G_SEEKABLE (mo), 0, NULL, &error);
+  g_assert_no_error (error);
+  for (i = 0; i < 2000; i++)
+    {
+      g_data_output_stream_put_byte (o, 1, NULL, &error);
+      g_assert_no_error (error);
+    }
+
+  g_object_unref (o);
+  g_object_unref (mo);
+}
+
+static void
+test_data_size (void)
+{
+  GOutputStream *mo;
+  GDataOutputStream *o;
+  int pos;
+
+  g_test_bug ("540459");
+
+  mo = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+  o = g_data_output_stream_new (mo);
+  g_data_output_stream_put_byte (o, 1, NULL, NULL);
+  pos = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (mo));
+  g_assert_cmpint (pos, ==, 1);
+
+  g_seekable_seek (G_SEEKABLE (mo), 0, G_SEEK_CUR, NULL, NULL);
+  pos = g_seekable_tell (G_SEEKABLE (mo));
+  g_assert_cmpint (pos, ==, 1);
+
+  g_test_bug ("540461");
+  
+  g_seekable_seek (G_SEEKABLE (mo), 0, G_SEEK_SET, NULL, NULL);
+  pos = g_seekable_tell (G_SEEKABLE (mo));
+  g_assert_cmpint (pos, ==, 0);
+  
+  pos = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (mo));
+  g_assert_cmpint (pos, ==, 1);
+  
+  g_object_unref (o);
+  g_object_unref (mo);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+  g_test_bug_base ("http://bugzilla.gnome.org/");
+
+  g_test_add_func ("/memory-output-stream/truncate", test_truncate);
+  g_test_add_func ("/memory-output-stream/get-data-size", test_data_size);
+
+  return g_test_run();
+}
diff --git a/gio/tests/simple-async-result.c b/gio/tests/simple-async-result.c
new file mode 100644
index 0000000..2c4f62b
--- /dev/null
+++ b/gio/tests/simple-async-result.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright © 2009 Ryan Lortie
+ *
+ * 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; either version 2 of the licence or (at
+ * your option) any later version.
+ *
+ * See the included COPYING file for more information.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static GObject      *got_source;
+static GAsyncResult *got_result;
+static gpointer      got_user_data;
+
+static void
+ensure_destroyed (gpointer obj)
+{
+  g_object_add_weak_pointer (obj, &obj);
+  g_object_unref (obj);
+  g_assert (obj == NULL);
+}
+
+static void
+reset (void)
+{
+  got_source = NULL;
+
+  if (got_result)
+    ensure_destroyed (got_result);
+
+  got_result = NULL;
+  got_user_data = NULL;
+}
+
+static void
+check (gpointer a, gpointer b, gpointer c)
+{
+  g_assert (a == got_source);
+  g_assert (b == got_result);
+  g_assert (c == got_user_data);
+}
+
+static void
+callback_func (GObject      *source,
+               GAsyncResult *result,
+               gpointer      user_data)
+{
+  got_source = source;
+  got_result = g_object_ref (result);
+  got_user_data = user_data;
+}
+
+static void
+test_simple_async (void)
+{
+  GSimpleAsyncResult *result;
+  GObject *a, *b, *c;
+
+  a = g_object_new (G_TYPE_OBJECT, NULL);
+  b = g_object_new (G_TYPE_OBJECT, NULL);
+  c = g_object_new (G_TYPE_OBJECT, NULL);
+
+  result = g_simple_async_result_new (a, callback_func, b, test_simple_async);
+  check (NULL, NULL, NULL);
+  g_simple_async_result_complete (result);
+  check (a, result, b);
+  g_object_unref (result);
+
+  g_assert (g_simple_async_result_is_valid (got_result, a, test_simple_async));
+  g_assert (!g_simple_async_result_is_valid (got_result, b, test_simple_async));
+  g_assert (!g_simple_async_result_is_valid (got_result, c, test_simple_async));
+  g_assert (!g_simple_async_result_is_valid (got_result, b, callback_func));
+  g_assert (!g_simple_async_result_is_valid ((gpointer) a, NULL, NULL));
+  reset ();
+  reset ();
+  reset ();
+
+  result = g_simple_async_result_new (a, callback_func, b, test_simple_async);
+  check (NULL, NULL, NULL);
+  g_simple_async_result_complete_in_idle (result);
+  g_object_unref (result);
+  check (NULL, NULL, NULL);
+  g_main_context_iteration (NULL, FALSE);
+  check (a, result, b);
+  reset ();
+
+  ensure_destroyed (a);
+  ensure_destroyed (b);
+  ensure_destroyed (c);
+}
+
+int
+main (int argc, char **argv)
+{
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/gio/simple-async-result/test", test_simple_async);
+
+  return g_test_run();
+}
diff --git a/gio/tests/sleepy-stream.c b/gio/tests/sleepy-stream.c
new file mode 100644
index 0000000..3c3cea9
--- /dev/null
+++ b/gio/tests/sleepy-stream.c
@@ -0,0 +1,294 @@
+/*
+ * Copyright © 2009 Codethink Limited
+ *
+ * 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; either version 2 of the licence or (at
+ * your option) any later version.
+ *
+ * See the included COPYING file for more information.
+ *
+ * Author: Ryan Lortie <desrt@desrt.ca>
+ */
+
+#include <gio/gio.h>
+#include <string.h>
+
+#define MAX_PIECE_SIZE  100
+#define MAX_PIECES       60
+
+static gchar *
+cook_piece (void)
+{
+  char buffer[MAX_PIECE_SIZE * 2];
+  gint symbols, index = 0;
+
+  symbols = g_test_rand_int_range (1, MAX_PIECE_SIZE + 1);
+
+  while (symbols--)
+    {
+      gint c = g_test_rand_int_range (0, 30);
+
+      switch (c)
+        {
+         case 26:
+          buffer[index++] = '\n';
+         case 27:
+          buffer[index++] = '\r';
+          break;
+
+         case 28:
+          buffer[index++] = '\r';
+         case 29:
+          buffer[index++] = '\n';
+          break;
+
+         default:
+          buffer[index++] = c + 'a';
+          break;
+        }
+
+      g_assert_cmpint (index, <=, sizeof buffer);
+    }
+
+  return g_strndup (buffer, index);
+}
+
+static gchar **
+cook_pieces (void)
+{
+  gchar **array;
+  gint pieces;
+
+  pieces = g_test_rand_int_range (0, MAX_PIECES + 1);
+  array = g_new (char *, pieces + 1);
+  array[pieces] = NULL;
+
+  while (pieces--)
+    array[pieces] = cook_piece ();
+
+  return array;
+}
+
+typedef struct
+{
+  GInputStream parent_instance;
+
+  gboolean built_to_fail;
+  gchar **pieces;
+  gint index;
+
+  const gchar *current;
+} SleepyStream;
+
+typedef GInputStreamClass SleepyStreamClass;
+
+G_DEFINE_TYPE (SleepyStream, sleepy_stream, G_TYPE_INPUT_STREAM)
+
+static gssize
+sleepy_stream_read (GInputStream  *stream,
+                    void          *buffer,
+                    gsize          length,
+                    GCancellable  *cancellable,
+                    GError       **error)
+{
+  SleepyStream *sleepy = (SleepyStream *) stream;
+
+  if (sleepy->pieces[sleepy->index] == NULL)
+    {
+      if (sleepy->built_to_fail)
+        {
+          g_set_error (error, 0, 0, "fail");
+          return -1;
+        }
+      else
+        return 0;
+    }
+  else
+    {
+      if (!sleepy->current)
+        sleepy->current = sleepy->pieces[sleepy->index++];
+
+      length = MIN (strlen (sleepy->current), length);
+      memcpy (buffer, sleepy->current, length);
+
+      sleepy->current += length;
+      if (*sleepy->current == '\0')
+        sleepy->current = NULL;
+
+      return length;
+    }
+}
+
+static void
+sleepy_stream_init (SleepyStream *sleepy)
+{
+  sleepy->pieces = cook_pieces ();
+  sleepy->built_to_fail = FALSE;
+  sleepy->index = 0;
+}
+
+static void
+sleepy_stream_finalize (GObject *object)
+{
+  SleepyStream *sleepy = (SleepyStream *) object;
+
+  g_strfreev (sleepy->pieces);
+  G_OBJECT_CLASS (sleepy_stream_parent_class)
+    ->finalize (object);
+}
+
+static void
+sleepy_stream_class_init (SleepyStreamClass *class)
+{
+  G_OBJECT_CLASS (class)->finalize = sleepy_stream_finalize;
+  class->read_fn = sleepy_stream_read;
+
+  /* no read_async implementation.
+   * main thread will sleep while read runs in a worker.
+   */
+}
+
+SleepyStream *
+sleepy_stream_new (void)
+{
+  return g_object_new (sleepy_stream_get_type (), NULL);
+}
+
+static gboolean
+read_line (GDataInputStream  *stream,
+           GString           *string,
+           const gchar       *eol,
+           GError           **error)
+{
+  gsize length;
+  int eol_len;
+  char *str;
+
+  eol_len = 1 + (eol[1] != '\0');
+
+  str = g_data_input_stream_read_line (stream, &length, NULL, error);
+
+  if (str == NULL)
+    return FALSE;
+
+  g_assert (strstr (str, eol) == NULL);
+  g_assert (strlen (str) == length);
+
+  g_string_append (string, str);
+  g_string_append (string, eol);
+  g_free (str);
+
+  return TRUE;
+}
+
+static void
+build_comparison (GString      *str,
+                  SleepyStream *stream)
+{
+  /* build this for comparison */
+  gint i;
+
+  for (i = 0; stream->pieces[i]; i++)
+    g_string_append (str, stream->pieces[i]);
+
+  if (str->len && str->str[str->len - 1] != '\n')
+    g_string_append_c (str, '\n');
+}
+
+
+void
+test (void)
+{
+  SleepyStream *stream = sleepy_stream_new ();
+  GDataInputStream *data;
+  GError *error = NULL;
+  GString *one;
+  GString *two;
+
+  one = g_string_new (NULL);
+  two = g_string_new (NULL);
+
+  data = g_data_input_stream_new (G_INPUT_STREAM (stream));
+  g_data_input_stream_set_newline_type (data, G_DATA_STREAM_NEWLINE_TYPE_LF);
+  build_comparison (one, stream);
+
+  while (read_line (data, two, "\n", &error));
+
+  g_assert_cmpstr (one->str, ==, two->str);
+  g_string_free (one, TRUE);
+  g_string_free (two, TRUE);
+  g_object_unref (stream);
+  g_object_unref (data);
+}
+
+static GDataInputStream *data;
+static GString *one, *two;
+static GMainLoop *loop;
+static const gchar *eol;
+
+static void
+asynch_ready (GObject      *object,
+              GAsyncResult *result,
+              gpointer      user_data)
+{
+  GError *error = NULL;
+  gsize length;
+  gchar *str;
+
+  g_assert (data == G_DATA_INPUT_STREAM (object));
+
+  str = g_data_input_stream_read_line_finish (data, result, &length, &error);
+
+  if (str == NULL)
+    {
+      g_main_loop_quit (loop);
+      if (error)
+        g_error_free (error);
+    }
+  else
+    {
+      g_assert (length == strlen (str));
+      g_string_append (two, str);
+      g_string_append (two, eol);
+      g_free (str);
+
+      /* MOAR!! */
+      g_data_input_stream_read_line_async (data, 0, NULL, asynch_ready, NULL);
+    }
+}
+
+
+void
+asynch (void)
+{
+  SleepyStream *sleepy = sleepy_stream_new ();
+
+  data = g_data_input_stream_new (G_INPUT_STREAM (sleepy));
+  one = g_string_new (NULL);
+  two = g_string_new (NULL);
+  eol = "\n";
+
+  build_comparison (one, sleepy);
+  g_data_input_stream_read_line_async (data, 0, NULL, asynch_ready, NULL);
+  g_main_loop_run (loop = g_main_loop_new (NULL, FALSE));
+
+  g_assert_cmpstr (one->str, ==, two->str);
+  g_string_free (one, TRUE);
+  g_string_free (two, TRUE);
+  g_object_unref (sleepy);
+  g_object_unref (data);
+}
+
+int
+main (int argc, char **argv)
+{
+  g_test_init (&argc, &argv, NULL);
+  g_test_bug_base ("http://bugzilla.gnome.org/");
+
+  g_type_init ();
+  g_test_add_func ("/filter-stream/input", test);
+  g_test_add_func ("/filter-stream/async", asynch);
+
+  return g_test_run();
+}
diff --git a/gio/tests/unix-streams.c b/gio/tests/unix-streams.c
new file mode 100644
index 0000000..be62023
--- /dev/null
+++ b/gio/tests/unix-streams.c
@@ -0,0 +1,256 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Red Hat, Inc
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib/glib.h>
+#include <gio/gio.h>
+#include <gio/gunixinputstream.h>
+#include <gio/gunixoutputstream.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define DATA "abcdefghijklmnopqrstuvwxyz"
+
+int writer_pipe[2], reader_pipe[2];
+GCancellable *writer_cancel, *reader_cancel, *main_cancel;
+GMainLoop *loop;
+
+static gpointer
+writer_thread (gpointer user_data)
+{
+  GOutputStream *out;
+  gssize nwrote, offset;
+  GError *err = NULL;
+
+  out = g_unix_output_stream_new (writer_pipe[1], TRUE);
+
+  do
+    {
+      g_usleep (10);
+
+      offset = 0;
+      while (offset < sizeof (DATA))
+	{
+	  nwrote = g_output_stream_write (out, DATA + offset,
+					  sizeof (DATA) - offset,
+					  writer_cancel, &err);
+	  if (nwrote <= 0 || err != NULL)
+	    break;
+	  offset += nwrote;
+	}
+
+      g_assert (nwrote > 0 || err != NULL);
+    }
+  while (err == NULL);
+
+  if (g_cancellable_is_cancelled (writer_cancel))
+    {
+      g_cancellable_cancel (main_cancel);
+      g_object_unref (out);
+      return NULL;
+    }
+
+  g_warning ("writer: %s", err->message);
+  g_assert_not_reached ();
+}
+
+static gpointer
+reader_thread (gpointer user_data)
+{
+  GInputStream *in;
+  gssize nread, total;
+  GError *err = NULL;
+  char buf[sizeof (DATA)];
+
+  in = g_unix_input_stream_new (reader_pipe[0], TRUE);
+
+  do
+    {
+      total = 0;
+      while (total < sizeof (DATA))
+	{
+	  nread = g_input_stream_read (in, buf + total, sizeof (buf) - total,
+				       reader_cancel, &err);
+	  if (nread <= 0 || err != NULL)
+	    break;
+	  total += nread;
+	}
+
+      if (err)
+	break;
+
+      if (nread == 0)
+	{
+	  g_assert (err == NULL);
+	  /* pipe closed */
+	  g_object_unref (in);
+	  return NULL;
+	}
+
+      g_assert_cmpstr (buf, ==, DATA);
+      g_assert (!g_cancellable_is_cancelled (reader_cancel));
+    }
+  while (err == NULL);
+
+  g_warning ("reader: %s", err->message);
+  g_assert_not_reached ();
+}
+
+char main_buf[sizeof (DATA)];
+gssize main_len, main_offset;
+
+static void readable (GObject *source, GAsyncResult *res, gpointer user_data);
+static void writable (GObject *source, GAsyncResult *res, gpointer user_data);
+
+static void
+do_main_cancel (GOutputStream *out)
+{
+  g_output_stream_close (out, NULL, NULL);
+  g_main_loop_quit (loop);
+}
+
+static void
+readable (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+  GInputStream *in = G_INPUT_STREAM (source);
+  GOutputStream *out = user_data;
+  GError *err = NULL;
+
+  main_len = g_input_stream_read_finish (in, res, &err);
+
+  if (g_cancellable_is_cancelled (main_cancel))
+    {
+      do_main_cancel (out);
+      return;
+    }
+
+  g_assert (err == NULL);
+
+  main_offset = 0;
+  g_output_stream_write_async (out, main_buf, main_len,
+			       G_PRIORITY_DEFAULT, main_cancel,
+			       writable, in);
+}
+
+static void
+writable (GObject *source, GAsyncResult *res, gpointer user_data)
+{
+  GOutputStream *out = G_OUTPUT_STREAM (source);
+  GInputStream *in = user_data;
+  GError *err = NULL;
+  gssize nwrote;
+
+  nwrote = g_output_stream_write_finish (out, res, &err);
+
+  if (g_cancellable_is_cancelled (main_cancel))
+    {
+      do_main_cancel (out);
+      return;
+    }
+
+  g_assert (err == NULL);
+  g_assert_cmpint (nwrote, <=, main_len - main_offset);
+
+  main_offset += nwrote;
+  if (main_offset == main_len)
+    {
+      g_input_stream_read_async (in, main_buf, sizeof (main_buf),
+				 G_PRIORITY_DEFAULT, main_cancel,
+				 readable, out);
+    }
+  else
+    {
+      g_output_stream_write_async (out, main_buf + main_offset,
+				   main_len - main_offset,
+				   G_PRIORITY_DEFAULT, main_cancel,
+				   writable, in);
+    }
+}
+
+static gboolean
+timeout (gpointer cancellable)
+{
+  g_cancellable_cancel (cancellable);
+  return FALSE;
+}
+
+static void
+test_pipe_io (void)
+{
+  GThread *writer, *reader;
+  GInputStream *in;
+  GOutputStream *out;
+
+  /* Split off two (additional) threads, a reader and a writer. From
+   * the writer thread, write data synchronously in small chunks,
+   * which gets read asynchronously by the main thread and then
+   * written asynchronously to the reader thread, which reads it
+   * synchronously. Eventually a timeout in the main thread will cause
+   * it to cancel the writer thread, which will in turn cancel the
+   * read op in the main thread, which will then close the pipe to
+   * the reader thread, causing the read op to fail.
+   */
+
+  g_assert (pipe (writer_pipe) == 0 && pipe (reader_pipe) == 0);
+
+  writer_cancel = g_cancellable_new ();
+  reader_cancel = g_cancellable_new ();
+  main_cancel = g_cancellable_new ();
+
+  writer = g_thread_create (writer_thread, NULL, TRUE, NULL);
+  reader = g_thread_create (reader_thread, NULL, TRUE, NULL);
+
+  in = g_unix_input_stream_new (writer_pipe[0], TRUE);
+  out = g_unix_output_stream_new (reader_pipe[1], TRUE);
+
+  g_input_stream_read_async (in, main_buf, sizeof (main_buf),
+			     G_PRIORITY_DEFAULT, main_cancel,
+			     readable, out);
+
+  g_timeout_add (500, timeout, writer_cancel);
+
+  loop = g_main_loop_new (NULL, TRUE);
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+
+  g_thread_join (reader);
+  g_thread_join (writer);
+
+  g_object_unref (main_cancel);
+  g_object_unref (reader_cancel);
+  g_object_unref (writer_cancel);
+  g_object_unref (in);
+  g_object_unref (out);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_thread_init (NULL);
+  g_type_init ();
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/unix-streams/pipe-io-test", test_pipe_io);
+
+  return g_test_run();
+}
diff --git a/gio/win32/Makefile.am b/gio/win32/Makefile.am
new file mode 100644
index 0000000..19c4a56
--- /dev/null
+++ b/gio/win32/Makefile.am
@@ -0,0 +1,30 @@
+include $(top_srcdir)/Makefile.decl
+
+NULL =
+
+noinst_LTLIBRARIES = libgiowin32.la
+
+libgiowin32_la_SOURCES =			\
+	gwin32directorymonitor.c		\
+	gwin32directorymonitor.h		\
+	gwinhttpvfs.c				\
+	gwinhttpvfs.h				\
+	gwinhttpfile.c				\
+	gwinhttpfile.h				\
+	gwinhttpfileinputstream.c		\
+	gwinhttpfileinputstream.h		\
+	gwinhttpfileoutputstream.c		\
+	gwinhttpfileoutputstream.h		\
+	winhttp.h				\
+	$(NULL)
+
+libgiowin32_la_CFLAGS = \
+	-DG_LOG_DOMAIN=\"GLib-GIO\"	\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gmodule		\
+	-I$(top_srcdir)/gio 		\
+	$(GLIB_DEBUG_FLAGS)		\
+	-DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"	\
+	-DGIO_COMPILATION		\
+	-DG_DISABLE_DEPRECATED
diff --git a/gio/win32/gwin32directorymonitor.c b/gio/win32/gwin32directorymonitor.c
new file mode 100644
index 0000000..4590ff6
--- /dev/null
+++ b/gio/win32/gwin32directorymonitor.c
@@ -0,0 +1,217 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Vlad Grecescu <b100dian@gmail.com>
+ * 
+ */
+
+#define _WIN32_WINNT 0x0400
+
+#include "config.h"
+#include "gwin32directorymonitor.h"
+#include "giomodule.h"
+#include <windows.h>
+
+G_DEFINE_TYPE_WITH_CODE (GWin32DirectoryMonitor,
+			 g_win32_directory_monitor,
+			 G_TYPE_LOCAL_DIRECTORY_MONITOR,
+			 g_io_extension_point_implement (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME,
+							 g_define_type_id,
+							 "readdirectorychanges",
+							 20))
+
+struct _GWin32DirectoryMonitorPrivate {
+  OVERLAPPED overlapped;
+  DWORD buffer_allocated_bytes;
+  gchar *file_notify_buffer;
+  DWORD buffer_filled_bytes;
+  HANDLE hDirectory;
+  /* Needed in the APC where we only have this private struct */
+  GFileMonitor *self;
+};
+
+static void g_win32_directory_monitor_finalize (GObject *base);
+static gboolean g_win32_directory_monitor_cancel (GFileMonitor *base);
+
+static GObject *g_win32_directory_monitor_constructor (GType                  type,
+						       guint                  n_construct_properties,
+						       GObjectConstructParam *construct_properties);
+
+static gboolean
+g_win32_directory_monitor_is_supported (void)
+{
+  return TRUE;
+}
+
+static void
+g_win32_directory_monitor_finalize (GObject *base)
+{
+  GWin32DirectoryMonitor *self;
+  self = G_WIN32_DIRECTORY_MONITOR (base);
+  
+  g_free (self->priv->file_notify_buffer);
+  g_free (self->priv);
+
+  if (G_OBJECT_CLASS (g_win32_directory_monitor_parent_class)->finalize)
+    (*G_OBJECT_CLASS (g_win32_directory_monitor_parent_class)->finalize) (base);
+}
+
+static gboolean
+g_win32_directory_monitor_cancel (GFileMonitor *base)
+{
+  GWin32DirectoryMonitor *self;
+  self = G_WIN32_DIRECTORY_MONITOR (base);
+
+  /* This triggers a last callback() with nBytes=0 */ 
+  if (self->priv->hDirectory != INVALID_HANDLE_VALUE)
+    CloseHandle (self->priv->hDirectory);
+
+  if (G_FILE_MONITOR_CLASS (g_win32_directory_monitor_parent_class)->cancel)
+    (*G_FILE_MONITOR_CLASS (g_win32_directory_monitor_parent_class)->cancel) (base);
+  return TRUE;
+}
+
+static void CALLBACK 
+g_win32_directory_monitor_callback (DWORD        error,
+				    DWORD        nBytes,
+				    LPOVERLAPPED lpOverlapped)
+{
+  gulong offset;
+  PFILE_NOTIFY_INFORMATION pfile_notify_walker;
+  gulong file_name_len;
+  gchar *file_name;
+  gchar *path;
+  GFile *file;
+  GWin32DirectoryMonitorPrivate *priv = (GWin32DirectoryMonitorPrivate *) lpOverlapped;
+
+  static GFileMonitorEvent events[] =
+    {
+      0, 
+      G_FILE_MONITOR_EVENT_CREATED, /* FILE_ACTION_ADDED            */
+      G_FILE_MONITOR_EVENT_DELETED, /* FILE_ACTION_REMOVED          */
+      G_FILE_MONITOR_EVENT_CHANGED, /* FILE_ACTION_MODIFIED         */
+      G_FILE_MONITOR_EVENT_DELETED, /* FILE_ACTION_RENAMED_OLD_NAME */
+      G_FILE_MONITOR_EVENT_CREATED, /* FILE_ACTION_RENAMED_NEW_NAME */
+    };
+
+  if (!nBytes) /* Monitor was cancelled/finalized */
+    return;
+
+  if (g_file_monitor_is_cancelled (G_FILE_MONITOR (priv->self)))
+    return; /* and ReadDirectoryChangesW doesn't get called this time */
+
+  offset = 0;
+  do {
+    pfile_notify_walker = (PFILE_NOTIFY_INFORMATION)(priv->file_notify_buffer + offset);
+    offset += pfile_notify_walker->NextEntryOffset;
+    file_name = g_utf16_to_utf8 (pfile_notify_walker->FileName, pfile_notify_walker->FileNameLength / sizeof(WCHAR), NULL, &file_name_len, NULL);
+    path = g_build_filename(G_LOCAL_DIRECTORY_MONITOR (priv->self)->dirname, file_name, NULL);
+    file = g_file_new_for_path (path);
+    g_file_monitor_emit_event (priv->self, file, NULL, events [pfile_notify_walker->Action]);
+    g_object_unref (file);
+    g_free (path);
+    g_free (file_name);
+  } while (pfile_notify_walker->NextEntryOffset);
+
+  ReadDirectoryChangesW (priv->hDirectory,
+			 (gpointer)priv->file_notify_buffer,
+			 priv->buffer_allocated_bytes,
+			 FALSE, 
+			 FILE_NOTIFY_CHANGE_FILE_NAME |
+			 FILE_NOTIFY_CHANGE_DIR_NAME |
+			 FILE_NOTIFY_CHANGE_ATTRIBUTES |
+			 FILE_NOTIFY_CHANGE_SIZE,
+			 &priv->buffer_filled_bytes,
+			 &priv->overlapped,
+			 g_win32_directory_monitor_callback);
+}
+
+static GObject *
+g_win32_directory_monitor_constructor (GType                  type,
+				       guint                  n_construct_properties,
+				       GObjectConstructParam *construct_properties) {
+  GObject *obj;
+  GWin32DirectoryMonitorClass *klass;
+  GObjectClass *parent_class;
+  GWin32DirectoryMonitor *self;
+  wchar_t *wdirname;
+  gboolean result;
+
+  klass = G_WIN32_DIRECTORY_MONITOR_CLASS (g_type_class_peek (G_TYPE_WIN32_DIRECTORY_MONITOR));
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+  obj = parent_class->constructor (type, n_construct_properties, construct_properties);
+  self = G_WIN32_DIRECTORY_MONITOR (obj);
+  wdirname = g_utf8_to_utf16 (G_LOCAL_DIRECTORY_MONITOR (obj)->dirname, -1, NULL, NULL, NULL);
+
+  self->priv->hDirectory = CreateFileW (wdirname,
+					FILE_LIST_DIRECTORY,
+					FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 
+
+					NULL,
+					OPEN_EXISTING,
+					FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,
+					NULL); 
+  g_free (wdirname);
+  if (self->priv->hDirectory == INVALID_HANDLE_VALUE)
+    {
+      /* Ignore errors */
+      return obj;
+    }
+
+  result = ReadDirectoryChangesW (self->priv->hDirectory,
+				  (gpointer)self->priv->file_notify_buffer,
+				  self->priv->buffer_allocated_bytes,
+				  FALSE, 
+				  FILE_NOTIFY_CHANGE_FILE_NAME |
+				  FILE_NOTIFY_CHANGE_DIR_NAME |
+				  FILE_NOTIFY_CHANGE_ATTRIBUTES |
+				  FILE_NOTIFY_CHANGE_SIZE,
+				  &self->priv->buffer_filled_bytes,
+				  &self->priv->overlapped,
+				  g_win32_directory_monitor_callback);
+  /* Ignore errors */
+
+  return obj;
+}
+
+static void 
+g_win32_directory_monitor_class_init (GWin32DirectoryMonitorClass *klass)
+{
+  g_win32_directory_monitor_parent_class = g_type_class_peek_parent (klass);
+
+  G_OBJECT_CLASS (klass)->constructor = g_win32_directory_monitor_constructor;
+  G_OBJECT_CLASS (klass)->finalize = g_win32_directory_monitor_finalize;
+  G_FILE_MONITOR_CLASS (klass)->cancel = g_win32_directory_monitor_cancel;
+
+  G_LOCAL_DIRECTORY_MONITOR_CLASS (klass)->mount_notify = FALSE;
+  G_LOCAL_DIRECTORY_MONITOR_CLASS (klass)->is_supported = g_win32_directory_monitor_is_supported;
+}
+
+static void
+g_win32_directory_monitor_init (GWin32DirectoryMonitor *self) 
+{
+  self->priv = (GWin32DirectoryMonitorPrivate*)g_new0 (GWin32DirectoryMonitorPrivate, 1);
+  g_assert (self->priv != 0);
+	
+  self->priv->buffer_allocated_bytes = 32768;
+  self->priv->file_notify_buffer = g_new0 (gchar, self->priv->buffer_allocated_bytes);
+  g_assert (self->priv->file_notify_buffer);
+	
+  self->priv->self = G_FILE_MONITOR (self);
+}
diff --git a/gio/win32/gwin32directorymonitor.h b/gio/win32/gwin32directorymonitor.h
new file mode 100644
index 0000000..1504bd4
--- /dev/null
+++ b/gio/win32/gwin32directorymonitor.h
@@ -0,0 +1,62 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Vlad Grecescu <b100dian@gmail.com>
+ * 
+ */
+#ifndef __G_WIN32_DIRECTORY_MONITOR_H__
+#define __G_WIN32_DIRECTORY_MONITOR_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "glocaldirectorymonitor.h"
+#include "giomodule.h"
+
+G_BEGIN_DECLS
+
+
+#define G_TYPE_WIN32_DIRECTORY_MONITOR (g_win32_directory_monitor_get_type ())
+#define G_WIN32_DIRECTORY_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_WIN32_DIRECTORY_MONITOR, GWin32DirectoryMonitor))
+#define G_WIN32_DIRECTORY_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_WIN32_DIRECTORY_MONITOR, GWin32DirectoryMonitorClass))
+#define G_IS_WIN32_DIRECTORY_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_WIN32_DIRECTORY_MONITOR))
+#define G_IS_WIN32_DIRECTORY_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_WIN32_DIRECTORY_MONITOR))
+#define G_WIN32_DIRECTORY_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_WIN32_DIRECTORY_MONITOR, GWin32DirectoryMonitorClass))
+
+typedef struct _GWin32DirectoryMonitor GWin32DirectoryMonitor;
+typedef struct _GWin32DirectoryMonitorClass GWin32DirectoryMonitorClass;
+typedef struct _GWin32DirectoryMonitorPrivate GWin32DirectoryMonitorPrivate;
+
+struct _GWin32DirectoryMonitor {
+  GLocalDirectoryMonitor parent_instance;
+  GWin32DirectoryMonitorPrivate * priv;
+};
+struct _GWin32DirectoryMonitorClass {
+  GLocalDirectoryMonitorClass parent_class;
+};
+
+GType g_win32_directory_monitor_get_type (void);
+void g_win32_directory_monitor_register (GIOModule *module);
+
+G_END_DECLS
+
+#endif /* __G_WIN32_DIRECTORY_MONITOR_H__ */ 
diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c
new file mode 100644
index 0000000..7e72b9f
--- /dev/null
+++ b/gio/win32/gwinhttpfile.c
@@ -0,0 +1,777 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+
+#include "gfile.h"
+#include "gfileattribute.h"
+#include "gfileinfo.h"
+#include "gwinhttpfile.h"
+#include "gwinhttpfileinputstream.h"
+#include "gwinhttpfileoutputstream.h"
+#include "gioerror.h"
+
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+static void g_winhttp_file_file_iface_init (GFileIface *iface);
+
+#define g_winhttp_file_get_type _g_winhttp_file_get_type
+G_DEFINE_TYPE_WITH_CODE (GWinHttpFile, g_winhttp_file, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (G_TYPE_FILE,
+                                                g_winhttp_file_file_iface_init))
+
+static void
+g_winhttp_file_finalize (GObject *object)
+{
+  GWinHttpFile *file;
+
+  file = G_WINHTTP_FILE (object);
+
+  g_free (file->url.lpszScheme);
+  g_free (file->url.lpszHostName);
+  g_free (file->url.lpszUserName);
+  g_free (file->url.lpszPassword);
+  g_free (file->url.lpszUrlPath);
+  g_free (file->url.lpszExtraInfo);
+
+  g_object_unref (file->vfs);
+
+  G_OBJECT_CLASS (g_winhttp_file_parent_class)->finalize (object);
+}
+
+static void
+g_winhttp_file_class_init (GWinHttpFileClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->finalize = g_winhttp_file_finalize;
+}
+
+static void
+g_winhttp_file_init (GWinHttpFile *winhttp)
+{
+}
+
+/**
+ * _g_winhttp_file_new:
+ * @vfs: GWinHttpVfs to use
+ * @uri: URI of the GWinHttpFile to create.
+ *
+ * Returns: new winhttp #GFile.
+ **/
+GFile *
+_g_winhttp_file_new (GWinHttpVfs *vfs,
+                     const char  *uri)
+{
+  wchar_t *wuri;
+  GWinHttpFile *file;
+
+  wuri = g_utf8_to_utf16 (uri, -1, NULL, NULL, NULL);
+
+  if (wuri == NULL)
+    return NULL;
+
+  file = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
+  file->vfs = g_object_ref (vfs);
+
+  memset (&file->url, 0, sizeof (file->url));
+  file->url.dwStructSize = sizeof (file->url);
+  file->url.dwSchemeLength = 1;
+  file->url.dwHostNameLength = 1;
+  file->url.dwUserNameLength = 1;
+  file->url.dwPasswordLength = 1;
+  file->url.dwUrlPathLength = 1;
+  file->url.dwExtraInfoLength = 1;
+
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpCrackUrl (wuri, 0, 0, &file->url))
+    {
+      g_free (wuri);
+      return NULL;
+    }
+
+  file->url.lpszScheme = g_new (wchar_t, ++file->url.dwSchemeLength);
+  file->url.lpszHostName = g_new (wchar_t, ++file->url.dwHostNameLength);
+  file->url.lpszUserName = g_new (wchar_t, ++file->url.dwUserNameLength);
+  file->url.lpszPassword = g_new (wchar_t, ++file->url.dwPasswordLength);
+  file->url.lpszUrlPath = g_new (wchar_t, ++file->url.dwUrlPathLength);
+  file->url.lpszExtraInfo = g_new (wchar_t, ++file->url.dwExtraInfoLength);
+
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpCrackUrl (wuri, 0, 0, &file->url))
+    {
+      g_free (file->url.lpszScheme);
+      g_free (file->url.lpszHostName);
+      g_free (file->url.lpszUserName);
+      g_free (file->url.lpszPassword);
+      g_free (file->url.lpszUrlPath);
+      g_free (file->url.lpszExtraInfo);
+      g_free (wuri);
+      return NULL;
+    }
+
+  g_free (wuri);
+  return G_FILE (file);
+}
+
+static gboolean
+g_winhttp_file_is_native (GFile *file)
+{
+  return FALSE;
+}
+
+static gboolean
+g_winhttp_file_has_uri_scheme (GFile      *file,
+                               const char *uri_scheme)
+{
+  return (g_ascii_strcasecmp (uri_scheme, "http") == 0 ||
+          g_ascii_strcasecmp (uri_scheme, "https") == 0);
+}
+
+static char *
+g_winhttp_file_get_uri_scheme (GFile *file)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+
+  return g_utf16_to_utf8 (winhttp_file->url.lpszScheme, -1, NULL, NULL, NULL);
+}
+
+static char *
+g_winhttp_file_get_basename (GFile *file)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  char *basename;
+  char *last_slash;
+  char *retval;
+
+  basename = g_utf16_to_utf8 (winhttp_file->url.lpszUrlPath, -1, NULL, NULL, NULL);
+  last_slash = strrchr (basename, '/');
+  /* If no slash, or only "/" fallback to full path part of URI */
+  if (last_slash == NULL || last_slash[1] == '\0')
+    return basename;
+
+  retval = g_strdup (last_slash + 1);
+  g_free (basename);
+
+  return retval;
+}
+
+static char *
+g_winhttp_file_get_path (GFile *file)
+{
+  return NULL;
+}
+
+static char *
+g_winhttp_file_get_uri (GFile *file)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  DWORD len;
+  wchar_t *wuri;
+  char *retval;
+
+  len = 0;
+  if (!G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpCreateUrl (&winhttp_file->url, ICU_ESCAPE, NULL, &len) &&
+      GetLastError () != ERROR_INSUFFICIENT_BUFFER)
+    return NULL;
+
+  wuri = g_new (wchar_t, ++len);
+
+  if (!G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpCreateUrl (&winhttp_file->url, ICU_ESCAPE, wuri, &len))
+    {
+      g_free (wuri);
+      return NULL;
+    }
+
+  retval = g_utf16_to_utf8 (wuri, -1, NULL, NULL, NULL);
+  g_free (wuri);
+
+  if (g_str_has_prefix (retval, "http://:@"))
+    {
+      memmove (retval + 7, retval + 9, strlen (retval) - 9);
+      retval[strlen (retval) - 2] = '\0';
+    }
+  else if (g_str_has_prefix (retval, "https://:@"))
+    {
+      memmove (retval + 8, retval + 10, strlen (retval) - 10);
+      retval[strlen (retval) - 2] = '\0';
+    }
+
+  return retval;
+}
+
+static char *
+g_winhttp_file_get_parse_name (GFile *file)
+{
+  /* FIXME: More hair surely needed */
+
+  return g_winhttp_file_get_uri (file);
+}
+
+static GFile *
+g_winhttp_file_get_parent (GFile *file)
+{
+  GWinHttpFile *winhttp_file;
+  char *uri;
+  char *last_slash;
+  GFile *parent;
+
+  winhttp_file = G_WINHTTP_FILE (file);
+
+  uri = g_winhttp_file_get_uri (file);
+  if (uri == NULL)
+    return NULL;
+
+  last_slash = strrchr (uri, '/');
+  if (last_slash == NULL || *(last_slash+1) == 0)
+    {
+      g_free (uri);
+      return NULL;
+    }
+
+  while (last_slash > uri && *last_slash == '/')
+    last_slash--;
+
+  last_slash[1] = '\0';
+
+  parent = _g_winhttp_file_new (winhttp_file->vfs, uri);
+  g_free (uri);
+
+  return parent;
+}
+
+static GFile *
+g_winhttp_file_dup (GFile *file)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  char *uri = g_winhttp_file_get_uri (file);
+  GFile *retval = _g_winhttp_file_new (winhttp_file->vfs, uri);
+
+  g_free (uri);
+
+  return retval;
+}
+
+static guint
+g_winhttp_file_hash (GFile *file)
+{
+  char *uri = g_winhttp_file_get_uri (file);
+  guint retval = g_str_hash (uri);
+
+  g_free (uri);
+
+  return retval;
+}
+
+static gboolean
+g_winhttp_file_equal (GFile *file1,
+                      GFile *file2)
+{
+  char *uri1 = g_winhttp_file_get_uri (file1);
+  char *uri2 = g_winhttp_file_get_uri (file2);
+  gboolean retval = g_str_equal (uri1, uri2);
+
+  g_free (uri1);
+  g_free (uri2);
+
+  return retval;
+}
+
+static const char *
+match_prefix (const char *path,
+              const char *prefix)
+{
+  int prefix_len;
+
+  prefix_len = strlen (prefix);
+  if (strncmp (path, prefix, prefix_len) != 0)
+    return NULL;
+
+  if (prefix_len > 0 && prefix[prefix_len-1] == '/')
+    prefix_len--;
+
+  return path + prefix_len;
+}
+
+static gboolean
+g_winhttp_file_prefix_matches (GFile *parent,
+                               GFile *descendant)
+{
+  char *parent_uri = g_winhttp_file_get_uri (parent);
+  char *descendant_uri = g_winhttp_file_get_uri (descendant);
+  const char *remainder;
+  gboolean retval;
+
+  remainder = match_prefix (descendant_uri, parent_uri);
+
+  if (remainder != NULL && *remainder == '/')
+    retval = TRUE;
+  else
+    retval = FALSE;
+
+  g_free (parent_uri);
+  g_free (descendant_uri);
+
+  return retval;
+}
+
+static char *
+g_winhttp_file_get_relative_path (GFile *parent,
+                                  GFile *descendant)
+{
+  char *parent_uri = g_winhttp_file_get_uri (parent);
+  char *descendant_uri = g_winhttp_file_get_uri (descendant);
+  const char *remainder;
+  char *retval;
+
+  remainder = match_prefix (descendant_uri, parent_uri);
+
+  if (remainder != NULL && *remainder == '/')
+    retval = g_strdup (remainder + 1);
+  else
+    retval = NULL;
+
+  g_free (parent_uri);
+  g_free (descendant_uri);
+
+  return retval;
+}
+
+static GFile *
+g_winhttp_file_resolve_relative_path (GFile      *file,
+                                      const char *relative_path)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  GWinHttpFile *child;
+  wchar_t *wnew_path = g_utf8_to_utf16 (relative_path, -1, NULL, NULL, NULL);
+
+  if (wnew_path == NULL)
+    return NULL;
+
+  if (*wnew_path != '/')
+    {
+      wchar_t *tmp = g_new (wchar_t, wcslen (winhttp_file->url.lpszUrlPath) + 1 + wcslen (wnew_path) + 1);
+      wcscpy (tmp, winhttp_file->url.lpszUrlPath);
+      wcscat (tmp, L"/");
+      wcscat (tmp, wnew_path);
+
+      g_free (wnew_path);
+      wnew_path = tmp;
+    }
+
+  child = g_object_new (G_TYPE_WINHTTP_FILE, NULL);
+  child->vfs = winhttp_file->vfs;
+  child->url = winhttp_file->url;
+  child->url.lpszScheme = g_memdup (winhttp_file->url.lpszScheme, (winhttp_file->url.dwSchemeLength+1)*2);
+  child->url.lpszHostName = g_memdup (winhttp_file->url.lpszHostName, (winhttp_file->url.dwHostNameLength+1)*2);
+  child->url.lpszUserName = g_memdup (winhttp_file->url.lpszUserName, (winhttp_file->url.dwUserNameLength+1)*2);
+  child->url.lpszPassword = g_memdup (winhttp_file->url.lpszPassword, (winhttp_file->url.dwPasswordLength+1)*2);
+  child->url.lpszUrlPath = wnew_path;
+  child->url.dwUrlPathLength = wcslen (wnew_path);
+  child->url.lpszExtraInfo = NULL;
+  child->url.dwExtraInfoLength = 0;
+
+  return (GFile *) child;
+}
+
+static GFile *
+g_winhttp_file_get_child_for_display_name (GFile        *file,
+                                           const char   *display_name,
+                                           GError      **error)
+{
+  GFile *new_file;
+  char *basename;
+
+  basename = g_locale_from_utf8 (display_name, -1, NULL, NULL, NULL);
+  if (basename == NULL)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_FILENAME,
+                   _("Invalid filename %s"), display_name);
+      return NULL;
+    }
+
+  new_file = g_file_get_child (file, basename);
+  g_free (basename);
+
+  return new_file;
+}
+
+static GFile *
+g_winhttp_file_set_display_name (GFile         *file,
+                                 const char    *display_name,
+                                 GCancellable  *cancellable,
+                                 GError       **error)
+{
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                       _("Operation not supported"));
+
+  return NULL;
+}
+
+static time_t
+mktime_utc (SYSTEMTIME *t)
+{
+  time_t retval;
+
+  static const gint days_before[] =
+  {
+    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
+  };
+
+  if (t->wMonth < 1 || t->wMonth > 12)
+    return (time_t) -1;
+
+  retval = (t->wYear - 1970) * 365;
+  retval += (t->wYear - 1968) / 4;
+  retval += days_before[t->wMonth-1] + t->wDay - 1;
+
+  if (t->wYear % 4 == 0 && t->wMonth < 3)
+    retval -= 1;
+
+  retval = ((((retval * 24) + t->wHour) * 60) + t->wMinute) * 60 + t->wSecond;
+
+  return retval;
+}
+
+static GFileInfo *
+g_winhttp_file_query_info (GFile                *file,
+                           const char           *attributes,
+                           GFileQueryInfoFlags   flags,
+                           GCancellable         *cancellable,
+                           GError              **error)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  HINTERNET connection, request;
+  const wchar_t *accept_types[] =
+    {
+      L"*/*",
+      NULL,
+    };
+  GFileInfo *info;
+  GFileAttributeMatcher *matcher;
+  char *basename;
+  wchar_t *content_length;
+  wchar_t *content_type;
+  SYSTEMTIME last_modified;
+  DWORD last_modified_len;
+
+  connection = G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpConnect
+    (G_WINHTTP_VFS (winhttp_file->vfs)->session,
+     winhttp_file->url.lpszHostName,
+     winhttp_file->url.nPort,
+     0);
+
+  if (connection == NULL)
+    {
+      _g_winhttp_set_error (error, GetLastError (), "HTTP connection");
+
+      return NULL;
+    }
+
+  request = G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpOpenRequest
+    (connection,
+     L"HEAD",
+     winhttp_file->url.lpszUrlPath,
+     NULL,
+     WINHTTP_NO_REFERER,
+     accept_types,
+     winhttp_file->url.nScheme == INTERNET_SCHEME_HTTPS ? WINHTTP_FLAG_SECURE : 0);
+
+  if (request == NULL)
+    {
+      _g_winhttp_set_error (error, GetLastError (), "HEAD request");
+
+      return NULL;
+    }
+
+  if (!G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpSendRequest
+      (request,
+       NULL, 0,
+       NULL, 0,
+       0,
+       0))
+    {
+      _g_winhttp_set_error (error, GetLastError (), "HEAD request");
+
+      return NULL;
+    }
+
+  if (!_g_winhttp_response (winhttp_file->vfs, request, error, "HEAD request"))
+    return NULL;
+
+  matcher = g_file_attribute_matcher_new (attributes);
+  info = g_file_info_new ();
+  g_file_info_set_attribute_mask (info, matcher);
+
+  basename = g_winhttp_file_get_basename (file);
+  g_file_info_set_name (info, basename);
+  g_free (basename);
+
+  content_length = NULL;
+  if (_g_winhttp_query_header (winhttp_file->vfs,
+                               request,
+                               "HEAD request",
+                               WINHTTP_QUERY_CONTENT_LENGTH,
+                               &content_length,
+                               NULL))
+    {
+      gint64 cl;
+      int n;
+
+      if (swscanf (content_length, L"%I64d%n", &cl, &n) == 1 &&
+          n == wcslen (content_length))
+        g_file_info_set_size (info, cl);
+
+      g_free (content_length);
+    }
+
+  if (matcher == NULL)
+    return info;
+
+  content_type = NULL;
+  if (_g_winhttp_query_header (winhttp_file->vfs,
+                               request,
+                               "HEAD request",
+                               WINHTTP_QUERY_CONTENT_TYPE,
+                               &content_type,
+                               NULL))
+    {
+      char *ct = g_utf16_to_utf8 (content_type, -1, NULL, NULL, NULL);
+
+      if (ct != NULL)
+        {
+          char *p = strchr (ct, ';');
+
+          if (p != NULL)
+            {
+              char *tmp = g_strndup (ct, p - ct);
+
+              g_file_info_set_content_type (info, tmp);
+              g_free (tmp);
+            }
+          else
+            g_file_info_set_content_type (info, ct);
+        }
+
+      g_free (ct);
+    }
+
+  last_modified_len = sizeof (last_modified);
+  if (G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpQueryHeaders
+      (request,
+       WINHTTP_QUERY_LAST_MODIFIED | WINHTTP_QUERY_FLAG_SYSTEMTIME,
+       NULL,
+       &last_modified,
+       &last_modified_len,
+       NULL) &&
+      last_modified_len == sizeof (last_modified) &&
+      /* Don't bother comparing to the exact Y2038 moment */
+      last_modified.wYear >= 1970 &&
+      last_modified.wYear < 2038)
+    {
+      GTimeVal tv;
+
+      tv.tv_sec = mktime_utc (&last_modified);
+      tv.tv_usec = last_modified.wMilliseconds * 1000;
+
+      g_file_info_set_modification_time (info, &tv);
+    }
+
+  g_file_attribute_matcher_unref (matcher);
+
+  return info;
+}
+
+static GFileInputStream *
+g_winhttp_file_read (GFile         *file,
+                     GCancellable  *cancellable,
+                     GError       **error)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  HINTERNET connection, request;
+  const wchar_t *accept_types[] =
+    {
+      L"*/*",
+      NULL,
+    };
+
+  connection = G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpConnect
+    (G_WINHTTP_VFS (winhttp_file->vfs)->session,
+     winhttp_file->url.lpszHostName,
+     winhttp_file->url.nPort,
+     0);
+
+  if (connection == NULL)
+    {
+      _g_winhttp_set_error (error, GetLastError (), "HTTP connection");
+
+      return NULL;
+    }
+
+  request = G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpOpenRequest
+    (connection,
+     L"GET",
+     winhttp_file->url.lpszUrlPath,
+     NULL,
+     WINHTTP_NO_REFERER,
+     accept_types,
+     winhttp_file->url.nScheme == INTERNET_SCHEME_HTTPS ? WINHTTP_FLAG_SECURE : 0);
+
+  if (request == NULL)
+    {
+      _g_winhttp_set_error (error, GetLastError (), "GET request");
+
+      return NULL;
+    }
+
+  return _g_winhttp_file_input_stream_new (winhttp_file, connection, request);
+}
+
+static GFileOutputStream *
+g_winhttp_file_create (GFile             *file,
+                       GFileCreateFlags   flags,
+                       GCancellable      *cancellable,
+                       GError           **error)
+{
+  GWinHttpFile *winhttp_file = G_WINHTTP_FILE (file);
+  HINTERNET connection;
+
+  connection = G_WINHTTP_VFS_GET_CLASS (winhttp_file->vfs)->funcs->pWinHttpConnect
+    (G_WINHTTP_VFS (winhttp_file->vfs)->session,
+     winhttp_file->url.lpszHostName,
+     winhttp_file->url.nPort,
+     0);
+
+  if (connection == NULL)
+    {
+      _g_winhttp_set_error (error, GetLastError (), "HTTP connection");
+
+      return NULL;
+    }
+
+  return _g_winhttp_file_output_stream_new (winhttp_file, connection);
+}
+
+#if 0
+
+static GFileOutputStream *
+g_winhttp_file_replace (GFile             *file,
+                        const char        *etag,
+                        gboolean           make_backup,
+                        GFileCreateFlags   flags,
+                        GCancellable      *cancellable,
+                        GError           **error)
+{
+  /* FIXME: Implement */
+
+  return NULL;
+}
+
+
+static gboolean
+g_winhttp_file_delete (GFile         *file,
+                       GCancellable  *cancellable,
+                       GError       **error)
+{
+  /* FIXME: Implement */
+
+  return FALSE;
+}
+
+static gboolean
+g_winhttp_file_make_directory (GFile         *file,
+                               GCancellable  *cancellable,
+                               GError       **error)
+{
+  /* FIXME: Implement */
+
+  return FALSE;
+}
+
+static gboolean
+g_winhttp_file_copy (GFile                  *source,
+                     GFile                  *destination,
+                     GFileCopyFlags          flags,
+                     GCancellable           *cancellable,
+                     GFileProgressCallback   progress_callback,
+                     gpointer                progress_callback_data,
+                     GError                **error)
+{
+  /* Fall back to default copy?? */
+  g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+                       "Copy not supported");
+
+  return FALSE;
+}
+
+static gboolean
+g_winhttp_file_move (GFile                  *source,
+                     GFile                  *destination,
+                     GFileCopyFlags          flags,
+                     GCancellable           *cancellable,
+                     GFileProgressCallback   progress_callback,
+                     gpointer                progress_callback_data,
+                     GError                **error)
+{
+  /* FIXME: Implement */
+
+  return FALSE;
+}
+
+#endif
+
+static void
+g_winhttp_file_file_iface_init (GFileIface *iface)
+{
+  iface->dup = g_winhttp_file_dup;
+  iface->hash = g_winhttp_file_hash;
+  iface->equal = g_winhttp_file_equal;
+  iface->is_native = g_winhttp_file_is_native;
+  iface->has_uri_scheme = g_winhttp_file_has_uri_scheme;
+  iface->get_uri_scheme = g_winhttp_file_get_uri_scheme;
+  iface->get_basename = g_winhttp_file_get_basename;
+  iface->get_path = g_winhttp_file_get_path;
+  iface->get_uri = g_winhttp_file_get_uri;
+  iface->get_parse_name = g_winhttp_file_get_parse_name;
+  iface->get_parent = g_winhttp_file_get_parent;
+  iface->prefix_matches = g_winhttp_file_prefix_matches;
+  iface->get_relative_path = g_winhttp_file_get_relative_path;
+  iface->resolve_relative_path = g_winhttp_file_resolve_relative_path;
+  iface->get_child_for_display_name = g_winhttp_file_get_child_for_display_name;
+  iface->set_display_name = g_winhttp_file_set_display_name;
+  iface->query_info = g_winhttp_file_query_info;
+  iface->read_fn = g_winhttp_file_read;
+  iface->create = g_winhttp_file_create;
+#if 0
+  iface->replace = g_winhttp_file_replace;
+  iface->delete_file = g_winhttp_file_delete;
+  iface->make_directory = g_winhttp_file_make_directory;
+  iface->copy = g_winhttp_file_copy;
+  iface->move = g_winhttp_file_move;
+#endif
+}
diff --git a/gio/win32/gwinhttpfile.h b/gio/win32/gwinhttpfile.h
new file mode 100644
index 0000000..9a0c392
--- /dev/null
+++ b/gio/win32/gwinhttpfile.h
@@ -0,0 +1,64 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#ifndef __G_WINHTTP_FILE_H__
+#define __G_WINHTTP_FILE_H__
+
+#include <gio/giotypes.h>
+
+#include "gwinhttpvfs.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WINHTTP_FILE         (_g_winhttp_file_get_type ())
+#define G_WINHTTP_FILE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WINHTTP_FILE, GWinHttpFile))
+#define G_WINHTTP_FILE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WINHTTP_FILE, GWinHttpFileClass))
+#define G_IS_WINHTTP_FILE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WINHTTP_FILE))
+#define G_IS_WINHTTP_FILE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WINHTTP_FILE))
+#define G_WINHTTP_FILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WINHTTP_FILE, GWinHttpFileClass))
+
+typedef struct _GWinHttpFile        GWinHttpFile;
+typedef struct _GWinHttpFileClass   GWinHttpFileClass;
+
+struct _GWinHttpFile
+{
+  GObject parent_instance;
+
+  GWinHttpVfs *vfs;
+
+  URL_COMPONENTS url;
+};
+
+struct _GWinHttpFileClass
+{
+  GObjectClass parent_class;
+};
+
+GType _g_winhttp_file_get_type (void) G_GNUC_CONST;
+  
+GFile * _g_winhttp_file_new (GWinHttpVfs *vfs, const char *uri);
+
+G_END_DECLS
+
+#endif /* __G_WINHTTP_FILE_H__ */
diff --git a/gio/win32/gwinhttpfileinputstream.c b/gio/win32/gwinhttpfileinputstream.c
new file mode 100644
index 0000000..f18a93a
--- /dev/null
+++ b/gio/win32/gwinhttpfileinputstream.c
@@ -0,0 +1,179 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gcancellable.h"
+#include "gioerror.h"
+#include "gwinhttpfileinputstream.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+struct _GWinHttpFileInputStream
+{
+  GFileInputStream parent_instance;
+
+  GWinHttpFile *file;
+  gboolean request_sent;
+  HINTERNET connection;
+  HINTERNET request;
+};
+
+struct _GWinHttpFileInputStreamClass
+{
+  GFileInputStreamClass parent_class;
+};
+
+#define g_winhttp_file_input_stream_get_type _g_winhttp_file_input_stream_get_type
+G_DEFINE_TYPE (GWinHttpFileInputStream, g_winhttp_file_input_stream, G_TYPE_FILE_INPUT_STREAM);
+
+static gssize g_winhttp_file_input_stream_read (GInputStream    *stream,
+                                                void            *buffer,
+                                                gsize            count,
+                                                GCancellable    *cancellable,
+                                                GError         **error);
+
+static gboolean g_winhttp_file_input_stream_close (GInputStream  *stream,
+						   GCancellable  *cancellable,
+						   GError       **error);
+
+static void
+g_winhttp_file_input_stream_finalize (GObject *object)
+{
+  GWinHttpFileInputStream *winhttp_stream;
+
+  winhttp_stream = G_WINHTTP_FILE_INPUT_STREAM (object);
+
+  if (winhttp_stream->request != NULL)
+    G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (winhttp_stream->request);
+  if (winhttp_stream->connection != NULL)
+    G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (winhttp_stream->connection);
+
+  g_object_unref (winhttp_stream->file);
+  winhttp_stream->file = NULL;
+
+  G_OBJECT_CLASS (g_winhttp_file_input_stream_parent_class)->finalize (object);
+}
+
+static void
+g_winhttp_file_input_stream_class_init (GWinHttpFileInputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
+
+  gobject_class->finalize = g_winhttp_file_input_stream_finalize;
+
+  stream_class->read_fn = g_winhttp_file_input_stream_read;
+  stream_class->close_fn = g_winhttp_file_input_stream_close;
+}
+
+static void
+g_winhttp_file_input_stream_init (GWinHttpFileInputStream *info)
+{
+}
+
+/**
+ * g_winhttp_file_input_stream_new:
+ * @file: the GWinHttpFile being read
+ * @connection: handle to the HTTP connection, as from WinHttpConnect()
+ * @request: handle to the HTTP request, as from WinHttpOpenRequest
+ *
+ * Returns: #GFileInputStream for the given request
+ **/
+GFileInputStream *
+_g_winhttp_file_input_stream_new (GWinHttpFile *file,
+                                  HINTERNET     connection,
+                                  HINTERNET     request)
+{
+  GWinHttpFileInputStream *stream;
+
+  stream = g_object_new (G_TYPE_WINHTTP_FILE_INPUT_STREAM, NULL);
+
+  stream->file = g_object_ref (file);
+  stream->request_sent = FALSE;
+  stream->connection = connection;
+  stream->request = request;
+
+  return G_FILE_INPUT_STREAM (stream);
+}
+
+static gssize
+g_winhttp_file_input_stream_read (GInputStream  *stream,
+                                  void          *buffer,
+                                  gsize          count,
+                                  GCancellable  *cancellable,
+                                  GError       **error)
+{
+  GWinHttpFileInputStream *winhttp_stream = G_WINHTTP_FILE_INPUT_STREAM (stream);
+  DWORD bytes_read;
+
+  if (!winhttp_stream->request_sent)
+    {
+      if (!G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpSendRequest
+          (winhttp_stream->request,
+           NULL, 0,
+           NULL, 0,
+           0,
+           0))
+        {
+          _g_winhttp_set_error (error, GetLastError (), "GET request");
+
+          return -1;
+        }
+
+      if (!_g_winhttp_response (winhttp_stream->file->vfs,
+                                winhttp_stream->request,
+                                error,
+                                "GET request"))
+        return -1;
+
+      winhttp_stream->request_sent = TRUE;
+    }
+
+  if (!G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpReadData
+      (winhttp_stream->request, buffer, count, &bytes_read))
+    {
+      _g_winhttp_set_error (error, GetLastError (), "GET request");
+
+      return -1;
+    }
+
+  return bytes_read;
+}
+
+static gboolean 
+g_winhttp_file_input_stream_close (GInputStream         *stream,
+				   GCancellable         *cancellable,
+				   GError              **error)
+{
+  GWinHttpFileInputStream *winhttp_stream = G_WINHTTP_FILE_INPUT_STREAM (stream);
+
+  if (winhttp_stream->connection != NULL)
+    G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (winhttp_stream->connection);
+  winhttp_stream->connection = NULL;
+  return TRUE;
+}
diff --git a/gio/win32/gwinhttpfileinputstream.h b/gio/win32/gwinhttpfileinputstream.h
new file mode 100644
index 0000000..80e02b4
--- /dev/null
+++ b/gio/win32/gwinhttpfileinputstream.h
@@ -0,0 +1,52 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#ifndef __G_WINHTTP_FILE_INPUT_STREAM_H__
+#define __G_WINHTTP_FILE_INPUT_STREAM_H__
+
+#include <gio/gfileinputstream.h>
+
+#include "gwinhttpfile.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WINHTTP_FILE_INPUT_STREAM         (_g_winhttp_file_input_stream_get_type ())
+#define G_WINHTTP_FILE_INPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WINHTTP_FILE_INPUT_STREAM, GWinHttpFileInputStream))
+#define G_WINHTTP_FILE_INPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WINHTTP_FILE_INPUT_STREAM, GWinHttpFileInputStreamClass))
+#define G_IS_WINHTTP_FILE_INPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WINHTTP_FILE_INPUT_STREAM))
+#define G_IS_WINHTTP_FILE_INPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WINHTTP_FILE_INPUT_STREAM))
+#define G_WINHTTP_FILE_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WINHTTP_FILE_INPUT_STREAM, GWinHttpFileInputStreamClass))
+
+typedef struct _GWinHttpFileInputStream         GWinHttpFileInputStream;
+typedef struct _GWinHttpFileInputStreamClass    GWinHttpFileInputStreamClass;
+
+GType _g_winhttp_file_input_stream_get_type (void) G_GNUC_CONST;
+
+GFileInputStream *_g_winhttp_file_input_stream_new (GWinHttpFile *file,
+                                                    HINTERNET     connection,
+                                                    HINTERNET     request);
+
+G_END_DECLS
+
+#endif /* __G_WINHTTP_FILE_INPUT_STREAM_H__ */
diff --git a/gio/win32/gwinhttpfileoutputstream.c b/gio/win32/gwinhttpfileoutputstream.c
new file mode 100644
index 0000000..2d549bf
--- /dev/null
+++ b/gio/win32/gwinhttpfileoutputstream.c
@@ -0,0 +1,187 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#include "config.h"
+
+#include <glib.h>
+
+#include "gcancellable.h"
+#include "gioerror.h"
+#include "gwinhttpfileoutputstream.h"
+#include "glibintl.h"
+
+#include "gioalias.h"
+
+struct _GWinHttpFileOutputStream
+{
+  GFileOutputStream parent_instance;
+
+  GWinHttpFile *file;
+  HINTERNET connection;
+  goffset offset;
+};
+
+struct _GWinHttpFileOutputStreamClass
+{
+  GFileOutputStreamClass parent_class;
+};
+
+#define g_winhttp_file_output_stream_get_type _g_winhttp_file_output_stream_get_type
+G_DEFINE_TYPE (GWinHttpFileOutputStream, g_winhttp_file_output_stream, G_TYPE_FILE_OUTPUT_STREAM);
+
+static gssize     g_winhttp_file_output_stream_write      (GOutputStream     *stream,
+                                                           const void        *buffer,
+                                                           gsize              count,
+                                                           GCancellable      *cancellable,
+                                                           GError           **error);
+
+static void
+g_winhttp_file_output_stream_finalize (GObject *object)
+{
+  GWinHttpFileOutputStream *winhttp_stream;
+
+  winhttp_stream = G_WINHTTP_FILE_OUTPUT_STREAM (object);
+
+  if (winhttp_stream->connection != NULL)
+    G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (winhttp_stream->connection);
+
+  G_OBJECT_CLASS (g_winhttp_file_output_stream_parent_class)->finalize (object);
+}
+
+static void
+g_winhttp_file_output_stream_class_init (GWinHttpFileOutputStreamClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
+
+  gobject_class->finalize = g_winhttp_file_output_stream_finalize;
+
+  stream_class->write_fn = g_winhttp_file_output_stream_write;
+}
+
+static void
+g_winhttp_file_output_stream_init (GWinHttpFileOutputStream *info)
+{
+}
+
+/**
+ * g_winhttp_file_output_stream_new:
+ * @file: the GWinHttpFile being read
+ * @connection: handle to the HTTP connection, as from WinHttpConnect()
+ * @request: handle to the HTTP request, as from WinHttpOpenRequest
+ *
+ * Returns: #GFileOutputStream for the given request
+ **/
+GFileOutputStream *
+_g_winhttp_file_output_stream_new (GWinHttpFile *file,
+                                   HINTERNET     connection)
+{
+  GWinHttpFileOutputStream *stream;
+
+  stream = g_object_new (G_TYPE_WINHTTP_FILE_OUTPUT_STREAM, NULL);
+
+  stream->file = file;
+  stream->connection = connection;
+  stream->offset = 0;
+
+  return G_FILE_OUTPUT_STREAM (stream);
+}
+
+static gssize
+g_winhttp_file_output_stream_write (GOutputStream  *stream,
+                                    const void     *buffer,
+                                    gsize           count,
+                                    GCancellable   *cancellable,
+                                    GError        **error)
+{
+  GWinHttpFileOutputStream *winhttp_stream = G_WINHTTP_FILE_OUTPUT_STREAM (stream);
+  HINTERNET request;
+  char *headers;
+  wchar_t *wheaders;
+  DWORD bytes_written;
+
+  request = G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpOpenRequest
+    (winhttp_stream->connection,
+     L"PUT",
+     winhttp_stream->file->url.lpszUrlPath,
+     NULL,
+     WINHTTP_NO_REFERER,
+     NULL,
+     winhttp_stream->file->url.nScheme == INTERNET_SCHEME_HTTPS ? WINHTTP_FLAG_SECURE : 0);
+
+  if (request == NULL)
+    {
+      _g_winhttp_set_error (error, GetLastError (), "PUT request");
+
+      return -1;
+    }
+
+  headers = g_strdup_printf ("Content-Range: bytes %" G_GINT64_FORMAT "-%" G_GINT64_FORMAT "/*\r\n",
+                             winhttp_stream->offset, winhttp_stream->offset + count);
+  wheaders = g_utf8_to_utf16 (headers, -1, NULL, NULL, NULL);
+  g_free (headers);
+
+  if (!G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpSendRequest
+      (request,
+       wheaders, -1,
+       NULL, 0,
+       count,
+       0))
+    {
+      _g_winhttp_set_error (error, GetLastError (), "PUT request");
+
+      G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (request);
+      g_free (wheaders);
+
+      return -1;
+    }
+
+  g_free (wheaders);
+
+  if (!G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpWriteData
+      (request, buffer, count, &bytes_written))
+    {
+      _g_winhttp_set_error (error, GetLastError (), "PUT request");
+
+      G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (request);
+
+      return -1;
+    }
+
+  winhttp_stream->offset += bytes_written;
+
+  if (!_g_winhttp_response (winhttp_stream->file->vfs,
+                            request,
+                            error,
+                            "PUT request"))
+    {
+      G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (request);
+
+      return -1;
+    }
+
+  G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->funcs->pWinHttpCloseHandle (request);
+
+  return bytes_written;
+}
diff --git a/gio/win32/gwinhttpfileoutputstream.h b/gio/win32/gwinhttpfileoutputstream.h
new file mode 100644
index 0000000..4cc7e61
--- /dev/null
+++ b/gio/win32/gwinhttpfileoutputstream.h
@@ -0,0 +1,51 @@
+/* GIO - GLib Input, Output and Streaming Library
+ * 
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#ifndef __G_WINHTTP_FILE_OUTPUT_STREAM_H__
+#define __G_WINHTTP_FILE_OUTPUT_STREAM_H__
+
+#include <gio/gfileoutputstream.h>
+
+#include "gwinhttpfile.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WINHTTP_FILE_OUTPUT_STREAM         (_g_winhttp_file_output_stream_get_type ())
+#define G_WINHTTP_FILE_OUTPUT_STREAM(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WINHTTP_FILE_OUTPUT_STREAM, GWinHttpFileOutputStream))
+#define G_WINHTTP_FILE_OUTPUT_STREAM_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WINHTTP_FILE_OUTPUT_STREAM, GWinHttpFileOutputStreamClass))
+#define G_IS_WINHTTP_FILE_OUTPUT_STREAM(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WINHTTP_FILE_OUTPUT_STREAM))
+#define G_IS_WINHTTP_FILE_OUTPUT_STREAM_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WINHTTP_FILE_OUTPUT_STREAM))
+#define G_WINHTTP_FILE_OUTPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WINHTTP_FILE_OUTPUT_STREAM, GWinHttpFileOutputStreamClass))
+
+typedef struct _GWinHttpFileOutputStream         GWinHttpFileOutputStream;
+typedef struct _GWinHttpFileOutputStreamClass    GWinHttpFileOutputStreamClass;
+
+GType _g_winhttp_file_output_stream_get_type (void) G_GNUC_CONST;
+
+GFileOutputStream *_g_winhttp_file_output_stream_new (GWinHttpFile *file,
+                                                      HINTERNET     connection);
+
+G_END_DECLS
+
+#endif /* __G_WINHTTP_FILE_OUTPUT_STREAM_H__ */
diff --git a/gio/win32/gwinhttpvfs.c b/gio/win32/gwinhttpvfs.c
new file mode 100644
index 0000000..3b8aa8e
--- /dev/null
+++ b/gio/win32/gwinhttpvfs.c
@@ -0,0 +1,459 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#include "config.h"
+
+#include <wchar.h>
+
+#include "gioerror.h"
+#include "giomodule.h"
+#include "gvfs.h"
+
+#include "gwinhttpfile.h"
+#include "gwinhttpvfs.h"
+
+#include "gioalias.h"
+
+static gboolean lookup_done = FALSE;
+static gboolean funcs_found = FALSE;
+static GWinHttpDllFuncs funcs;
+
+static void
+lookup_funcs (void)
+{
+  HMODULE winhttp;
+
+  if (lookup_done)
+    return;
+
+  winhttp = LoadLibrary ("winhttp.dll");
+  if (winhttp != NULL)
+    {
+      funcs.pWinHttpCloseHandle = (BOOL (WINAPI *) (HINTERNET)) GetProcAddress (winhttp, "WinHttpCloseHandle");
+      funcs.pWinHttpCrackUrl = (BOOL (WINAPI *) (LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS)) GetProcAddress (winhttp, "WinHttpCrackUrl");
+      funcs.pWinHttpConnect = (HINTERNET (WINAPI *) (HINTERNET,LPCWSTR,INTERNET_PORT,DWORD)) GetProcAddress (winhttp, "WinHttpConnect");
+      funcs.pWinHttpCreateUrl = (BOOL (WINAPI *) (LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD)) GetProcAddress (winhttp, "WinHttpCreateUrl");
+      funcs.pWinHttpOpen = (HINTERNET (WINAPI *) (LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD)) GetProcAddress (winhttp, "WinHttpOpen");
+      funcs.pWinHttpOpenRequest = (HINTERNET (WINAPI *) (HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD)) GetProcAddress (winhttp, "WinHttpOpenRequest");
+      funcs.pWinHttpQueryDataAvailable = (BOOL (WINAPI *) (HINTERNET,LPDWORD)) GetProcAddress (winhttp, "WinHttpQueryDataAvailable");
+      funcs.pWinHttpQueryHeaders = (BOOL (WINAPI *) (HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD)) GetProcAddress (winhttp, "WinHttpQueryHeaders");
+      funcs.pWinHttpReadData = (BOOL (WINAPI *) (HINTERNET,LPVOID,DWORD,LPDWORD)) GetProcAddress (winhttp, "WinHttpReadData");
+      funcs.pWinHttpReceiveResponse = (BOOL (WINAPI *) (HINTERNET,LPVOID)) GetProcAddress (winhttp, "WinHttpReceiveResponse");
+      funcs.pWinHttpSendRequest = (BOOL (WINAPI *) (HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR)) GetProcAddress (winhttp, "WinHttpSendRequest");
+      funcs.pWinHttpWriteData = (BOOL (WINAPI *) (HINTERNET,LPCVOID,DWORD,LPDWORD)) GetProcAddress (winhttp, "WinHttpWriteData");
+
+      if (funcs.pWinHttpCloseHandle &&
+	  funcs.pWinHttpCrackUrl &&
+	  funcs.pWinHttpConnect &&
+	  funcs.pWinHttpCreateUrl &&
+	  funcs.pWinHttpOpen &&
+	  funcs.pWinHttpOpenRequest &&
+	  funcs.pWinHttpQueryDataAvailable &&
+	  funcs.pWinHttpQueryHeaders &&
+	  funcs.pWinHttpReadData &&
+	  funcs.pWinHttpReceiveResponse &&
+	  funcs.pWinHttpSendRequest &&
+	  funcs.pWinHttpWriteData)
+	funcs_found = TRUE;
+    }
+  lookup_done = TRUE;
+}
+
+#define g_winhttp_vfs_get_type _g_winhttp_vfs_get_type
+G_DEFINE_TYPE_WITH_CODE (GWinHttpVfs, g_winhttp_vfs, G_TYPE_VFS,
+			 {
+			   lookup_funcs ();
+			   if (funcs_found)
+			     g_io_extension_point_implement (G_VFS_EXTENSION_POINT_NAME,
+							     g_define_type_id,
+							     "winhttp",
+							     10);
+			 })
+
+static const gchar *winhttp_uri_schemes[] = { "http", "https" };
+
+static void
+g_winhttp_vfs_finalize (GObject *object)
+{
+  GWinHttpVfs *vfs;
+
+  vfs = G_WINHTTP_VFS (object);
+
+  (G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpCloseHandle) (vfs->session);
+  vfs->session = NULL;
+
+  if (vfs->wrapped_vfs)
+    g_object_unref (vfs->wrapped_vfs);
+  vfs->wrapped_vfs = NULL;
+
+  G_OBJECT_CLASS (g_winhttp_vfs_parent_class)->finalize (object);
+}
+
+static void
+g_winhttp_vfs_init (GWinHttpVfs *vfs)
+{
+  wchar_t *wagent;
+
+  vfs->wrapped_vfs = g_vfs_get_local ();
+
+  wagent = g_utf8_to_utf16 (g_get_prgname (), -1, NULL, NULL, NULL);
+
+  if (!wagent)
+    wagent = g_utf8_to_utf16 ("GWinHttpVfs", -1, NULL, NULL, NULL);
+
+  vfs->session = (G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpOpen)
+    (wagent,
+     WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
+     WINHTTP_NO_PROXY_NAME,
+     WINHTTP_NO_PROXY_BYPASS,
+     0);
+}
+
+/**
+ * g_winhttp_vfs_new:
+ *
+ * Returns a new #GVfs handle for a WinHttp vfs.
+ *
+ * Returns: a new #GVfs handle.
+ **/
+GVfs *
+_g_winhttp_vfs_new (void)
+{
+  return g_object_new (G_TYPE_WINHTTP_VFS, NULL);
+}
+
+static GFile *
+g_winhttp_vfs_get_file_for_path (GVfs       *vfs,
+                                 const char *path)
+{
+  return g_vfs_get_file_for_path (G_WINHTTP_VFS (vfs)->wrapped_vfs, path);
+}
+
+static GFile *
+g_winhttp_vfs_get_file_for_uri (GVfs       *vfs,
+                                const char *uri)
+{
+  GWinHttpVfs *winhttp_vfs = G_WINHTTP_VFS (vfs);
+  int i;
+
+  /* If it matches one of "our" schemes, handle it */
+  for (i = 0; i < G_N_ELEMENTS (winhttp_uri_schemes); i++)
+    if (g_ascii_strncasecmp (uri, winhttp_uri_schemes[i], strlen (winhttp_uri_schemes[i])) == 0 &&
+        uri[strlen (winhttp_uri_schemes[i])] == ':')
+      return _g_winhttp_file_new (winhttp_vfs, uri);
+
+  /* For other URIs fallback to the wrapped GVfs */
+  return g_vfs_parse_name (winhttp_vfs->wrapped_vfs, uri);
+}
+
+static const gchar * const *
+g_winhttp_vfs_get_supported_uri_schemes (GVfs *vfs)
+{
+  GWinHttpVfs *winhttp_vfs = G_WINHTTP_VFS (vfs);
+  const gchar * const *wrapped_vfs_uri_schemes = g_vfs_get_supported_uri_schemes (winhttp_vfs->wrapped_vfs);
+  int i, n;
+  const gchar **retval;
+
+  n = 0;
+  while (wrapped_vfs_uri_schemes[n] != NULL)
+    n++;
+
+  retval = g_new (const gchar *, n + G_N_ELEMENTS (winhttp_uri_schemes) + 1);
+  n = 0;
+  while (wrapped_vfs_uri_schemes[n] != NULL)
+    {
+      retval[n] = wrapped_vfs_uri_schemes[n];
+      n++;
+    }
+
+  for (i = 0; i < G_N_ELEMENTS (winhttp_uri_schemes); i++)
+    {
+      retval[n] = winhttp_uri_schemes[i];
+      n++;
+    }
+
+  retval[n] = NULL;
+
+  return retval;
+}
+
+static GFile *
+g_winhttp_vfs_parse_name (GVfs       *vfs,
+                          const char *parse_name)
+{
+  GWinHttpVfs *winhttp_vfs = G_WINHTTP_VFS (vfs);
+
+  g_return_val_if_fail (G_IS_VFS (vfs), NULL);
+  g_return_val_if_fail (parse_name != NULL, NULL);
+
+  /* For plain file paths fallback to the wrapped GVfs */
+  if (g_path_is_absolute (parse_name))
+    return g_vfs_parse_name (winhttp_vfs->wrapped_vfs, parse_name);
+
+  /* Otherwise assume it is an URI, so pass on to
+   * g_winhttp_vfs_get_file_for_uri().
+   */
+  return g_winhttp_vfs_get_file_for_uri (vfs, parse_name);
+}
+
+static gboolean
+g_winhttp_vfs_is_active (GVfs *vfs)
+{
+  return TRUE;
+}
+
+static void
+g_winhttp_vfs_class_init (GWinHttpVfsClass *class)
+{
+  GObjectClass *object_class;
+  GVfsClass *vfs_class;
+
+  object_class = (GObjectClass *) class;
+
+  object_class->finalize = g_winhttp_vfs_finalize;
+
+  vfs_class = G_VFS_CLASS (class);
+
+  vfs_class->is_active = g_winhttp_vfs_is_active;
+  vfs_class->get_file_for_path = g_winhttp_vfs_get_file_for_path;
+  vfs_class->get_file_for_uri = g_winhttp_vfs_get_file_for_uri;
+  vfs_class->get_supported_uri_schemes = g_winhttp_vfs_get_supported_uri_schemes;
+  vfs_class->parse_name = g_winhttp_vfs_parse_name;
+
+  lookup_funcs ();
+  if (funcs_found)
+    class->funcs = &funcs;
+  else
+    class->funcs = NULL;
+}
+
+char *
+_g_winhttp_error_message (DWORD error_code)
+{
+  /* The FormatMessage() API that g_win32_error_message() uses doesn't
+   * seem to know about WinHttp errors, unfortunately.
+   */
+  if (error_code >= WINHTTP_ERROR_BASE && error_code < WINHTTP_ERROR_BASE + 200)
+    {
+      switch (error_code)
+        {
+          /* FIXME: Use meaningful error messages */
+#define CASE(x) case ERROR_WINHTTP_##x: return g_strdup ("WinHttp error: " #x);
+          CASE (AUTO_PROXY_SERVICE_ERROR);
+          CASE (AUTODETECTION_FAILED);
+          CASE (BAD_AUTO_PROXY_SCRIPT);
+          CASE (CANNOT_CALL_AFTER_OPEN);
+          CASE (CANNOT_CALL_AFTER_SEND);
+          CASE (CANNOT_CALL_BEFORE_OPEN);
+          CASE (CANNOT_CALL_BEFORE_SEND);
+          CASE (CANNOT_CONNECT);
+          CASE (CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW);
+          CASE (CLIENT_AUTH_CERT_NEEDED);
+          CASE (CONNECTION_ERROR);
+          CASE (HEADER_ALREADY_EXISTS);
+          CASE (HEADER_COUNT_EXCEEDED);
+          CASE (HEADER_NOT_FOUND);
+          CASE (HEADER_SIZE_OVERFLOW);
+          CASE (INCORRECT_HANDLE_STATE);
+          CASE (INCORRECT_HANDLE_TYPE);
+          CASE (INTERNAL_ERROR);
+          CASE (INVALID_OPTION);
+          CASE (INVALID_QUERY_REQUEST);
+          CASE (INVALID_SERVER_RESPONSE);
+          CASE (INVALID_URL);
+          CASE (LOGIN_FAILURE);
+          CASE (NAME_NOT_RESOLVED);
+          CASE (NOT_INITIALIZED);
+          CASE (OPERATION_CANCELLED);
+          CASE (OPTION_NOT_SETTABLE);
+          CASE (OUT_OF_HANDLES);
+          CASE (REDIRECT_FAILED);
+          CASE (RESEND_REQUEST);
+          CASE (RESPONSE_DRAIN_OVERFLOW);
+          CASE (SECURE_CERT_CN_INVALID);
+          CASE (SECURE_CERT_DATE_INVALID);
+          CASE (SECURE_CERT_REV_FAILED);
+          CASE (SECURE_CERT_REVOKED);
+          CASE (SECURE_CERT_WRONG_USAGE);
+          CASE (SECURE_CHANNEL_ERROR);
+          CASE (SECURE_FAILURE);
+          CASE (SECURE_INVALID_CA);
+          CASE (SECURE_INVALID_CERT);
+          CASE (SHUTDOWN);
+          CASE (TIMEOUT);
+          CASE (UNABLE_TO_DOWNLOAD_SCRIPT);
+          CASE (UNRECOGNIZED_SCHEME);
+          #undef CASE
+        default:
+          return g_strdup_printf ("WinHttp error %ld", error_code);
+        }
+    }
+  else
+    return g_win32_error_message (error_code);
+}
+
+void
+_g_winhttp_set_error (GError     **error,
+                      DWORD        error_code,
+                      const char  *what)
+{
+  char *emsg = _g_winhttp_error_message (error_code);
+
+  g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+               "%s failed: %s", what, emsg);
+  g_free (emsg);
+}
+
+gboolean
+_g_winhttp_response (GWinHttpVfs *vfs,
+                     HINTERNET    request,
+                     GError     **error,
+                     const char  *what)
+{
+  wchar_t *status_code;
+  DWORD status_code_len;
+
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpReceiveResponse (request, NULL))
+    {
+      _g_winhttp_set_error (error, GetLastError (), what);
+
+      return FALSE;
+    }
+
+  status_code_len = 0;
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpQueryHeaders
+      (request,
+       WINHTTP_QUERY_STATUS_CODE,
+       NULL,
+       NULL,
+       &status_code_len,
+       NULL) &&
+      GetLastError () != ERROR_INSUFFICIENT_BUFFER)
+    {
+      _g_winhttp_set_error (error, GetLastError (), what);
+
+      return FALSE;
+    }
+
+  status_code = g_malloc (status_code_len);
+
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpQueryHeaders
+      (request,
+       WINHTTP_QUERY_STATUS_CODE,
+       NULL,
+       status_code,
+       &status_code_len,
+       NULL))
+    {
+      _g_winhttp_set_error (error, GetLastError (), what);
+      g_free (status_code);
+
+      return FALSE;
+    }
+
+  if (status_code[0] != L'2')
+    {
+      wchar_t *status_text = NULL;
+      DWORD status_text_len;
+
+      if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpQueryHeaders
+          (request,
+           WINHTTP_QUERY_STATUS_TEXT,
+           NULL,
+           NULL,
+           &status_text_len,
+           NULL) &&
+          GetLastError () == ERROR_INSUFFICIENT_BUFFER)
+        {
+          status_text = g_malloc (status_text_len);
+
+          if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpQueryHeaders
+              (request,
+               WINHTTP_QUERY_STATUS_TEXT,
+               NULL,
+               status_text,
+               &status_text_len,
+               NULL))
+            {
+              g_free (status_text);
+              status_text = NULL;
+            }
+        }
+
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "%s failed: %S %S",
+                   what, status_code, status_text ? status_text : L"");
+      g_free (status_code);
+      g_free (status_text);
+
+      return FALSE;
+    }
+
+  g_free (status_code);
+
+  return TRUE;
+}
+
+gboolean
+_g_winhttp_query_header (GWinHttpVfs *vfs,
+                         HINTERNET    request,
+                         const char  *request_description,
+                         DWORD        which_header,
+                         wchar_t    **header,
+                         GError     **error)
+{
+  DWORD header_len = 0;
+
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpQueryHeaders
+      (request,
+       which_header,
+       NULL,
+       NULL,
+       &header_len,
+       NULL) &&
+      GetLastError () != ERROR_INSUFFICIENT_BUFFER)
+    {
+      _g_winhttp_set_error (error, GetLastError (), request_description);
+
+      return FALSE;
+    }
+
+  *header = g_malloc (header_len);
+  if (!G_WINHTTP_VFS_GET_CLASS (vfs)->funcs->pWinHttpQueryHeaders
+      (request,
+       which_header,
+       NULL,
+       *header,
+       &header_len,
+       NULL))
+    {
+      _g_winhttp_set_error (error, GetLastError (), request_description);
+      g_free (*header);
+      *header = NULL;
+
+      return FALSE;
+    }
+
+  return TRUE;
+}
diff --git a/gio/win32/gwinhttpvfs.h b/gio/win32/gwinhttpvfs.h
new file mode 100644
index 0000000..11593ab
--- /dev/null
+++ b/gio/win32/gwinhttpvfs.h
@@ -0,0 +1,110 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ * Author: Tor Lillqvist <tml@novell.com>
+ */
+
+#ifndef __G_WINHTTP_VFS_H__
+#define __G_WINHTTP_VFS_H__
+
+#include <gio/giotypes.h>
+
+#include "gvfs.h"
+
+#define _WIN32_WINNT 0x0500
+#include <windows.h>
+
+#include "winhttp.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WINHTTP_VFS                      (_g_winhttp_vfs_get_type ())
+#define G_WINHTTP_VFS(obj)                      (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_WINHTTP_VFS, GWinHttpVfs))
+#define G_WINHTTP_VFS_CLASS(klass)              (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_WINHTTP_VFS, GWinHttpVfsClass))
+#define G_IS_WINHTTP_VFS(obj)                   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_WINHTTP_VFS))
+#define G_IS_WINHTTP_VFS_CLASS(klass)           (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_WINHTTP_VFS))
+#define G_WINHTTP_VFS_GET_CLASS(obj)            (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_WINHTTP_VFS, GWinHttpVfsClass))
+
+typedef struct _GWinHttpVfs       GWinHttpVfs;
+typedef struct _GWinHttpDllFuncs  GWinHttpDllFuncs;
+typedef struct _GWinHttpVfsClass  GWinHttpVfsClass;
+
+struct _GWinHttpVfs
+{
+  GVfs parent;
+
+  GVfs *wrapped_vfs;
+  HINTERNET session;
+};
+
+struct _GWinHttpDllFuncs
+{
+  BOOL (WINAPI *pWinHttpCloseHandle) (HINTERNET);
+  BOOL (WINAPI *pWinHttpCrackUrl) (LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS);
+  HINTERNET (WINAPI *pWinHttpConnect) (HINTERNET,LPCWSTR,INTERNET_PORT,DWORD);
+  BOOL (WINAPI *pWinHttpCreateUrl) (LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD);
+  HINTERNET (WINAPI *pWinHttpOpen) (LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD);
+  HINTERNET (WINAPI *pWinHttpOpenRequest) (HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD);
+  BOOL (WINAPI *pWinHttpQueryDataAvailable) (HINTERNET,LPDWORD);
+  BOOL (WINAPI *pWinHttpQueryHeaders) (HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD);
+  BOOL (WINAPI *pWinHttpReadData) (HINTERNET,LPVOID,DWORD,LPDWORD);
+  BOOL (WINAPI *pWinHttpReceiveResponse) (HINTERNET,LPVOID);
+  BOOL (WINAPI *pWinHttpSendRequest) (HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR);
+  BOOL (WINAPI *pWinHttpWriteData) (HINTERNET,LPCVOID,DWORD,LPDWORD);
+};
+
+struct _GWinHttpVfsClass
+{
+  GVfsClass parent_class;
+
+  /* As there is no import library for winhttp.dll in mingw, and
+   * winhttp.dll isn't present on Windows 2000 anyway, we must look up
+   * the functions we need dynamically. Store the pointers here.
+   */
+  GWinHttpDllFuncs *funcs;
+};
+
+
+GType   _g_winhttp_vfs_get_type  (void) G_GNUC_CONST;
+
+GVfs *_g_winhttp_vfs_new (void);
+
+char *_g_winhttp_error_message (DWORD error_code);
+
+void _g_winhttp_set_error (GError     **error,
+                           DWORD        error_code,
+                           const char  *what);
+
+gboolean _g_winhttp_response (GWinHttpVfs *vfs,
+                              HINTERNET    request,
+                              GError     **error,
+                              const char  *what);
+
+gboolean _g_winhttp_query_header (GWinHttpVfs *vfs,
+                                  HINTERNET    request,
+                                  const char  *request_description,
+                                  DWORD        which_header,
+                                  wchar_t    **header,
+                                  GError     **error);
+
+G_END_DECLS
+
+#endif /* __G_WINHTTP_VFS_H__ */
diff --git a/gio/win32/winhttp.h b/gio/win32/winhttp.h
new file mode 100644
index 0000000..a8dd0c1
--- /dev/null
+++ b/gio/win32/winhttp.h
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_WINHTTP_H
+#define __WINE_WINHTTP_H
+
+#define WINHTTPAPI
+#define BOOLAPI WINHTTPAPI BOOL WINAPI
+
+
+typedef LPVOID HINTERNET;
+typedef HINTERNET *LPHINTERNET;
+
+#define INTERNET_DEFAULT_PORT           0
+#define INTERNET_DEFAULT_HTTP_PORT      80
+#define INTERNET_DEFAULT_HTTPS_PORT     443
+typedef WORD INTERNET_PORT;
+typedef INTERNET_PORT *LPINTERNET_PORT;
+
+#define INTERNET_SCHEME_HTTP            1
+#define INTERNET_SCHEME_HTTPS           2
+typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME;
+
+/* flags for WinHttpOpen */
+#define WINHTTP_FLAG_ASYNC                  0x10000000
+
+/* flags for WinHttpOpenRequest */
+#define WINHTTP_FLAG_ESCAPE_PERCENT         0x00000004
+#define WINHTTP_FLAG_NULL_CODEPAGE          0x00000008
+#define WINHTTP_FLAG_ESCAPE_DISABLE         0x00000040
+#define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY   0x00000080
+#define WINHTTP_FLAG_BYPASS_PROXY_CACHE     0x00000100
+#define WINHTTP_FLAG_REFRESH                WINHTTP_FLAG_BYPASS_PROXY_CACHE
+#define WINHTTP_FLAG_SECURE                 0x00800000
+
+#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY   0
+#define WINHTTP_ACCESS_TYPE_NO_PROXY        1
+#define WINHTTP_ACCESS_TYPE_NAMED_PROXY     3
+
+#define WINHTTP_NO_PROXY_NAME               NULL
+#define WINHTTP_NO_PROXY_BYPASS             NULL
+
+#define WINHTTP_NO_REFERER                  NULL
+#define WINHTTP_DEFAULT_ACCEPT_TYPES        NULL
+
+#define WINHTTP_ERROR_BASE                  12000
+
+/* The original WINE winhttp.h didn't contain symbolic names for the
+ * error codes. However, the values of most of them are publicly
+ * documented at
+ * http://msdn.microsoft.com/en-us/library/aa383770(VS.85).aspx so
+ * we can add them here.
+ */
+#define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR 12178
+#define ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT 12166
+#define ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN 12103
+#define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND 12102
+#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN 12100
+#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND 12101
+#define ERROR_WINHTTP_CANNOT_CONNECT 12029
+#define ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW 12183
+#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED 12044
+#define ERROR_WINHTTP_CONNECTION_ERROR 12030
+#define ERROR_WINHTTP_HEADER_ALREADY_EXISTS 12155
+#define ERROR_WINHTTP_HEADER_COUNT_EXCEEDED 12181
+#define ERROR_WINHTTP_HEADER_NOT_FOUND 12150
+#define ERROR_WINHTTP_HEADER_SIZE_OVERFLOW 12182
+#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE 12019
+#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 12018
+#define ERROR_WINHTTP_INTERNAL_ERROR 12004
+#define ERROR_WINHTTP_INVALID_OPTION 12009
+#define ERROR_WINHTTP_INVALID_QUERY_REQUEST 12154
+#define ERROR_WINHTTP_INVALID_SERVER_RESPONSE 12152
+#define ERROR_WINHTTP_INVALID_URL 12005
+#define ERROR_WINHTTP_LOGIN_FAILURE 12015
+#define ERROR_WINHTTP_NAME_NOT_RESOLVED 12007
+#define ERROR_WINHTTP_NOT_INITIALIZED 12172
+#define ERROR_WINHTTP_OPERATION_CANCELLED 12017
+#define ERROR_WINHTTP_OPTION_NOT_SETTABLE 12011
+#define ERROR_WINHTTP_OUT_OF_HANDLES 12001
+#define ERROR_WINHTTP_REDIRECT_FAILED 12156
+#define ERROR_WINHTTP_RESEND_REQUEST 12032
+#define ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW 12184
+#define ERROR_WINHTTP_SECURE_CERT_CN_INVALID 12038
+#define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID 12037
+#define ERROR_WINHTTP_SECURE_CERT_REV_FAILED 12057
+#define ERROR_WINHTTP_SECURE_CERT_REVOKED 12170
+#define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE 12179
+#define ERROR_WINHTTP_SECURE_CHANNEL_ERROR 12157
+#define ERROR_WINHTTP_SECURE_FAILURE 12175
+#define ERROR_WINHTTP_SECURE_INVALID_CA 12045
+#define ERROR_WINHTTP_SECURE_INVALID_CERT 12169
+#define ERROR_WINHTTP_SHUTDOWN 12012
+#define ERROR_WINHTTP_TIMEOUT 12002
+#define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT 12167
+#define ERROR_WINHTTP_UNRECOGNIZED_SCHEME 12006
+/* End of added error codes */
+
+#define ERROR_WINHTTP_AUTODETECTION_FAILED     (WINHTTP_ERROR_BASE + 180)
+
+typedef struct
+{
+    DWORD   dwStructSize;
+    LPWSTR  lpszScheme;
+    DWORD   dwSchemeLength;
+    INTERNET_SCHEME nScheme;
+    LPWSTR  lpszHostName;
+    DWORD   dwHostNameLength;
+    INTERNET_PORT nPort;
+    LPWSTR  lpszUserName;
+    DWORD   dwUserNameLength;
+    LPWSTR  lpszPassword;
+    DWORD   dwPasswordLength;
+    LPWSTR  lpszUrlPath;
+    DWORD   dwUrlPathLength;
+    LPWSTR  lpszExtraInfo;
+    DWORD   dwExtraInfoLength;
+} URL_COMPONENTS, *LPURL_COMPONENTS;
+typedef URL_COMPONENTS URL_COMPONENTSW;
+typedef LPURL_COMPONENTS LPURL_COMPONENTSW;
+
+typedef struct
+{
+    DWORD_PTR dwResult;
+    DWORD dwError;
+} WINHTTP_ASYNC_RESULT, *LPWINHTTP_ASYNC_RESULT;
+
+typedef struct
+{
+    FILETIME ftExpiry;
+    FILETIME ftStart;
+    LPWSTR lpszSubjectInfo;
+    LPWSTR lpszIssuerInfo;
+    LPWSTR lpszProtocolName;
+    LPWSTR lpszSignatureAlgName;
+    LPWSTR lpszEncryptionAlgName;
+    DWORD dwKeySize;
+} WINHTTP_CERTIFICATE_INFO;
+
+typedef struct
+{
+    DWORD dwAccessType;
+    LPCWSTR lpszProxy;
+    LPCWSTR lpszProxyBypass;
+} WINHTTP_PROXY_INFO, *LPWINHTTP_PROXY_INFO;
+typedef WINHTTP_PROXY_INFO WINHTTP_PROXY_INFOW;
+typedef LPWINHTTP_PROXY_INFO LPWINHTTP_PROXY_INFOW;
+
+typedef struct
+{
+    BOOL   fAutoDetect;
+    LPWSTR lpszAutoConfigUrl;
+    LPWSTR lpszProxy;
+    LPWSTR lpszProxyBypass;
+} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;
+
+typedef VOID (CALLBACK *WINHTTP_STATUS_CALLBACK)(HINTERNET,DWORD_PTR,DWORD,LPVOID,DWORD);
+
+typedef struct
+{
+    DWORD dwFlags;
+    DWORD dwAutoDetectFlags;
+    LPCWSTR lpszAutoConfigUrl;
+    LPVOID lpvReserved;
+    DWORD dwReserved;
+    BOOL fAutoLogonIfChallenged;
+} WINHTTP_AUTOPROXY_OPTIONS;
+
+typedef struct
+{
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+} HTTP_VERSION_INFO, *LPHTTP_VERSION_INFO;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL        WINAPI WinHttpAddRequestHeaders(HINTERNET,LPCWSTR,DWORD,DWORD);
+BOOL        WINAPI WinHttpDetectAutoProxyConfigUrl(DWORD,LPWSTR*);
+BOOL        WINAPI WinHttpCheckPlatform(void);
+BOOL        WINAPI WinHttpCloseHandle(HINTERNET);
+HINTERNET   WINAPI WinHttpConnect(HINTERNET,LPCWSTR,INTERNET_PORT,DWORD);
+BOOL        WINAPI WinHttpCrackUrl(LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS);
+BOOL        WINAPI WinHttpCreateUrl(LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD);
+BOOL        WINAPI WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);
+BOOL        WINAPI WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG* config);
+BOOL        WINAPI WinHttpGetProxyForUrl(HINTERNET,LPCWSTR,WINHTTP_AUTOPROXY_OPTIONS*,WINHTTP_PROXY_INFO*);
+HINTERNET   WINAPI WinHttpOpen(LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD);
+
+/* The sixth parameter to WinHttpOpenRequest was wrong in the original
+ * WINE header. It should be LPCWSTR*, not LPCWSTR, as it points to an
+ * array of wide strings.
+ */
+HINTERNET   WINAPI WinHttpOpenRequest(HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD);
+BOOL        WINAPI WinHttpQueryAuthParams(HINTERNET,DWORD,LPVOID*);
+BOOL        WINAPI WinHttpQueryAuthSchemes(HINTERNET,LPDWORD,LPDWORD,LPDWORD);
+BOOL        WINAPI WinHttpQueryDataAvailable(HINTERNET,LPDWORD);
+BOOL        WINAPI WinHttpQueryHeaders(HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD);
+BOOL        WINAPI WinHttpReadData(HINTERNET,LPVOID,DWORD,LPDWORD);
+BOOL        WINAPI WinHttpReceiveResponse(HINTERNET,LPVOID);
+BOOL        WINAPI WinHttpSendRequest(HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR);
+BOOL        WINAPI WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);
+BOOL        WINAPI WinHttpSetCredentials(HINTERNET,DWORD,DWORD,LPCWSTR,LPCWSTR,LPVOID);
+BOOL        WINAPI WinHttpSetOption(HINTERNET,DWORD,LPVOID,DWORD);
+WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(HINTERNET,WINHTTP_STATUS_CALLBACK,DWORD,DWORD_PTR);
+BOOL        WINAPI WinHttpSetTimeouts(HINTERNET,int,int,int,int);
+BOOL        WINAPI WinHttpTimeFromSystemTime(CONST SYSTEMTIME *,LPWSTR);
+BOOL        WINAPI WinHttpTimeToSystemTime(LPCWSTR,SYSTEMTIME*);
+BOOL        WINAPI WinHttpWriteData(HINTERNET,LPCVOID,DWORD,LPDWORD);
+
+/* Additional definitions, from the public domain <wininet.h> in mingw */
+#define ICU_ESCAPE 0x80000000
+#define ICU_DECODE 0x10000000
+
+/* A few constants I couldn't find publicly documented, so I looked up
+ * their value from the Windows SDK <winhttp.h>. Presumably this falls
+ * under fair use.
+ */
+#define WINHTTP_QUERY_CONTENT_LENGTH 5
+#define WINHTTP_QUERY_CONTENT_TYPE 1
+#define WINHTTP_QUERY_LAST_MODIFIED 11
+#define WINHTTP_QUERY_STATUS_CODE 19
+#define WINHTTP_QUERY_STATUS_TEXT 20
+
+#define WINHTTP_QUERY_FLAG_SYSTEMTIME 0x40000000
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __WINE_WINHTTP_H */
diff --git a/gio/xdgmime/.gitignore b/gio/xdgmime/.gitignore
new file mode 100644
index 0000000..56e6945
--- /dev/null
+++ b/gio/xdgmime/.gitignore
@@ -0,0 +1 @@
+test-mime
diff --git a/gio/xdgmime/Makefile.am b/gio/xdgmime/Makefile.am
new file mode 100644
index 0000000..5588b0f
--- /dev/null
+++ b/gio/xdgmime/Makefile.am
@@ -0,0 +1,28 @@
+include $(top_srcdir)/Makefile.decl
+
+AM_CPPFLAGS = -DXDG_PREFIX=_gio_xdg
+
+noinst_LTLIBRARIES = libxdgmime.la
+
+libxdgmime_la_SOURCES = \
+	xdgmime.c 	\
+	xdgmime.h	\
+	xdgmimealias.c	\
+	xdgmimealias.h	\
+	xdgmimecache.c	\
+	xdgmimecache.h	\
+	xdgmimeglob.c 	\
+	xdgmimeglob.h 	\
+	xdgmimeicon.c	\
+	xdgmimeicon.h	\
+	xdgmimeint.c 	\
+	xdgmimeint.h 	\
+	xdgmimemagic.c  \
+	xdgmimemagic.h	\
+	xdgmimeparent.c	\
+	xdgmimeparent.h
+
+noinst_PROGRAMS = test-mime
+
+test_mime_LDADD = libxdgmime.la
+test_mime_SOURCES = test-mime.c
diff --git a/gio/xdgmime/test-mime.c b/gio/xdgmime/test-mime.c
new file mode 100644
index 0000000..8473837
--- /dev/null
+++ b/gio/xdgmime/test-mime.c
@@ -0,0 +1,196 @@
+/* 
+ * Copyright (C) 2003,2004  Red Hat, Inc.
+ * Copyright (C) 2003,2004  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+#include "xdgmime.h"
+#include "xdgmimeglob.h"
+#include <string.h>
+#include <stdio.h>
+
+
+static void
+test_individual_glob (const char  *glob,
+		      XdgGlobType  expected_type)
+{
+  XdgGlobType test_type;
+
+  test_type = _xdg_glob_determine_type (glob);
+  if (test_type != expected_type)
+    {
+      printf ("Test Failed: %s is of type %s, but %s is expected\n",
+	      glob,
+	      ((test_type == XDG_GLOB_LITERAL)?"XDG_GLOB_LITERAL":
+	       ((test_type == XDG_GLOB_SIMPLE)?"XDG_GLOB_SIMPLE":"XDG_GLOB_FULL")),
+	      ((expected_type == XDG_GLOB_LITERAL)?"XDG_GLOB_LITERAL":
+	       ((expected_type == XDG_GLOB_SIMPLE)?"XDG_GLOB_SIMPLE":"XDG_GLOB_COMPLEX")));
+    }
+}
+
+static void
+test_glob_type (void)
+{
+  test_individual_glob ("*.gif", XDG_GLOB_SIMPLE);
+  test_individual_glob ("Foo*.gif", XDG_GLOB_FULL);
+  test_individual_glob ("*[4].gif", XDG_GLOB_FULL);
+  test_individual_glob ("Makefile", XDG_GLOB_LITERAL);
+  test_individual_glob ("sldkfjvlsdf\\\\slkdjf", XDG_GLOB_FULL);
+  test_individual_glob ("tree.[ch]", XDG_GLOB_FULL);
+}
+
+static void
+test_alias (const char *mime_a,
+	    const char *mime_b,
+	    int         expected)
+{
+  int actual;
+
+  actual = xdg_mime_mime_type_equal (mime_a, mime_b);
+
+  if (actual != expected)
+    {
+      printf ("Test Failed: %s is %s to %s\n", 
+	      mime_a, actual ? "equal" : "not equal", mime_b);
+    }
+}
+
+static void
+test_aliasing (void)
+{
+  test_alias ("application/x-wordperfect", "application/vnd.wordperfect", 1);
+  test_alias ("application/x-gnome-app-info", "application/x-desktop", 1);
+  test_alias ("application/x-wordperfect", "application/vnd.wordperfect", 1);
+  test_alias ("application/x-wordperfect", "audio/x-midi", 0);
+  test_alias ("/", "vnd/vnd", 0);
+  test_alias ("application/octet-stream", "text/plain", 0);
+  test_alias ("text/plain", "text/*", 0);
+}
+
+static void
+test_subclass (const char *mime_a,
+	       const char *mime_b,
+	       int         expected)
+{
+  int actual;
+
+  actual = xdg_mime_mime_type_subclass (mime_a, mime_b);
+
+  if (actual != expected)
+    {
+      printf ("Test Failed: %s is %s of %s\n", 
+	      mime_a, actual ? "subclass" : "not subclass", mime_b);
+    }
+}
+
+static void
+test_subclassing (void)
+{
+  test_subclass ("application/rtf", "text/plain", 1);
+  test_subclass ("message/news", "text/plain", 1);
+  test_subclass ("message/news", "message/*", 1);
+  test_subclass ("message/news", "text/*", 1);
+  test_subclass ("message/news", "application/octet-stream", 1);
+  test_subclass ("application/rtf", "application/octet-stream", 1);
+  test_subclass ("application/x-gnome-app-info", "text/plain", 1);
+  test_subclass ("image/x-djvu", "image/vnd.djvu", 1);
+  test_subclass ("image/vnd.djvu", "image/x-djvu", 1);
+  test_subclass ("image/vnd.djvu", "text/plain", 0);
+  test_subclass ("image/vnd.djvu", "text/*", 0);
+  test_subclass ("text/*", "text/plain", 1);
+}
+
+static void
+test_one_match (const char *filename, const char *expected)
+{
+  const char *actual;
+
+  actual = xdg_mime_get_mime_type_from_file_name (filename);
+
+  if (strcmp (actual, expected) != 0) 
+    {
+      printf ("Test Failed: mime type of %s is %s, expected %s\n", 
+	      filename, actual, expected);
+    }  
+}
+
+static void
+test_matches (void)
+{
+  test_one_match ("foo.bar.epub", "application/epub+zip");
+  test_one_match ("core", "application/x-core");
+  test_one_match ("README.in", "text/x-readme");
+  test_one_match ("README.gz", "application/x-gzip");
+  test_one_match ("blabla.cs", "text/x-csharp");
+  test_one_match ("blabla.f90", "text/x-fortran");
+  test_one_match ("blabla.F95", "text/x-fortran");
+  test_one_match ("tarball.tar.gz", "application/x-compressed-tar");
+  test_one_match ("file.gz", "application/x-gzip");
+  test_one_match ("file.tar.lzo", "application/x-tzo");
+  test_one_match ("file.lzo", "application/x-lzop");
+}
+
+static void
+test_one_icon (const char *mimetype, const char *expected)
+{
+  const char *actual;
+
+  actual = xdg_mime_get_generic_icon (mimetype);
+
+  if (actual != expected && strcmp (actual, expected) != 0) 
+    {
+      printf ("Test Failed: icon of %s is %s, expected %s\n", 
+             mimetype, actual, expected);
+    }  
+}
+
+static void
+test_icons (void)
+{
+  test_one_icon ("application/x-font-ttx", "font-x-generic");
+  test_one_icon ("application/mathematica", "x-office-document");
+  test_one_icon ("text/plain", NULL);
+}
+
+int
+main (int argc, char *argv[])
+{
+  const char *result;
+  const char *file_name;
+  int i;
+
+  test_glob_type ();
+  test_aliasing ();
+  test_subclassing ();
+  test_matches ();
+  test_icons ();
+
+  for (i = 1; i < argc; i++)
+    {
+      file_name = argv[i];
+      result = xdg_mime_get_mime_type_for_file (file_name, NULL);
+      printf ("File \"%s\" has a mime-type of %s\n", file_name, result);
+    }
+
+#if 0
+  xdg_mime_dump ();
+#endif
+  return 0;
+}
+     
diff --git a/gio/xdgmime/xdgmime.c b/gio/xdgmime/xdgmime.c
new file mode 100644
index 0000000..c9bcfba
--- /dev/null
+++ b/gio/xdgmime/xdgmime.c
@@ -0,0 +1,926 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmime.c: XDG Mime Spec mime resolver.  Based on version 0.11 of the spec.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ * 
+ * Copyright (C) 2003,2004  Red Hat, Inc.
+ * Copyright (C) 2003,2004  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ * 
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xdgmime.h"
+#include "xdgmimeint.h"
+#include "xdgmimeglob.h"
+#include "xdgmimemagic.h"
+#include "xdgmimealias.h"
+#include "xdgmimeicon.h"
+#include "xdgmimeparent.h"
+#include "xdgmimecache.h"
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <assert.h>
+
+typedef struct XdgDirTimeList XdgDirTimeList;
+typedef struct XdgCallbackList XdgCallbackList;
+
+static int need_reread = TRUE;
+static time_t last_stat_time = 0;
+
+static XdgGlobHash *global_hash = NULL;
+static XdgMimeMagic *global_magic = NULL;
+static XdgAliasList *alias_list = NULL;
+static XdgParentList *parent_list = NULL;
+static XdgDirTimeList *dir_time_list = NULL;
+static XdgCallbackList *callback_list = NULL;
+static XdgIconList *icon_list = NULL;
+static XdgIconList *generic_icon_list = NULL;
+
+XdgMimeCache **_caches = NULL;
+static int n_caches = 0;
+
+const char xdg_mime_type_unknown[] = "application/octet-stream";
+
+
+enum
+{
+  XDG_CHECKED_UNCHECKED,
+  XDG_CHECKED_VALID,
+  XDG_CHECKED_INVALID
+};
+
+struct XdgDirTimeList
+{
+  time_t mtime;
+  char *directory_name;
+  int checked;
+  XdgDirTimeList *next;
+};
+
+struct XdgCallbackList
+{
+  XdgCallbackList *next;
+  XdgCallbackList *prev;
+  int              callback_id;
+  XdgMimeCallback  callback;
+  void            *data;
+  XdgMimeDestroy   destroy;
+};
+
+/* Function called by xdg_run_command_on_dirs.  If it returns TRUE, further
+ * directories aren't looked at */
+typedef int (*XdgDirectoryFunc) (const char *directory,
+				 void       *user_data);
+
+static void
+xdg_dir_time_list_add (char   *file_name, 
+		       time_t  mtime)
+{
+  XdgDirTimeList *list;
+
+  for (list = dir_time_list; list; list = list->next) 
+    {
+      if (strcmp (list->directory_name, file_name) == 0)
+        {
+          free (file_name);
+          return;
+        }
+    }
+  
+  list = calloc (1, sizeof (XdgDirTimeList));
+  list->checked = XDG_CHECKED_UNCHECKED;
+  list->directory_name = file_name;
+  list->mtime = mtime;
+  list->next = dir_time_list;
+  dir_time_list = list;
+}
+ 
+static void
+xdg_dir_time_list_free (XdgDirTimeList *list)
+{
+  XdgDirTimeList *next;
+
+  while (list)
+    {
+      next = list->next;
+      free (list->directory_name);
+      free (list);
+      list = next;
+    }
+}
+
+static int
+xdg_mime_init_from_directory (const char *directory)
+{
+  char *file_name;
+  struct stat st;
+
+  assert (directory != NULL);
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache");
+  if (stat (file_name, &st) == 0)
+    {
+      XdgMimeCache *cache = _xdg_mime_cache_new_from_file (file_name);
+
+      if (cache != NULL)
+	{
+	  xdg_dir_time_list_add (file_name, st.st_mtime);
+
+	  _caches = realloc (_caches, sizeof (XdgMimeCache *) * (n_caches + 2));
+	  _caches[n_caches] = cache;
+          _caches[n_caches + 1] = NULL;
+	  n_caches++;
+
+	  return FALSE;
+	}
+    }
+  free (file_name);
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/globs2") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/globs2");
+  if (stat (file_name, &st) == 0)
+    {
+      _xdg_mime_glob_read_from_file (global_hash, file_name);
+      xdg_dir_time_list_add (file_name, st.st_mtime);
+    }
+  else
+    {
+      free (file_name);
+      file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1);
+      strcpy (file_name, directory); strcat (file_name, "/mime/globs");
+      if (stat (file_name, &st) == 0)
+        {
+          _xdg_mime_glob_read_from_file (global_hash, file_name);
+          xdg_dir_time_list_add (file_name, st.st_mtime);
+        }
+      else
+        {
+          free (file_name);
+        }
+    }
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/magic");
+  if (stat (file_name, &st) == 0)
+    {
+      _xdg_mime_magic_read_from_file (global_magic, file_name);
+      xdg_dir_time_list_add (file_name, st.st_mtime);
+    }
+  else
+    {
+      free (file_name);
+    }
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/aliases") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/aliases");
+  _xdg_mime_alias_read_from_file (alias_list, file_name);
+  free (file_name);
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/subclasses") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/subclasses");
+  _xdg_mime_parent_read_from_file (parent_list, file_name);
+  free (file_name);
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/icons") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/icons");
+  _xdg_mime_icon_read_from_file (icon_list, file_name);
+  free (file_name);
+
+  file_name = malloc (strlen (directory) + strlen ("/mime/generic-icons") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/generic-icons");
+  _xdg_mime_icon_read_from_file (generic_icon_list, file_name);
+  free (file_name);
+
+  return FALSE; /* Keep processing */
+}
+
+/* Runs a command on all the directories in the search path */
+static void
+xdg_run_command_on_dirs (XdgDirectoryFunc  func,
+			 void             *user_data)
+{
+  const char *xdg_data_home;
+  const char *xdg_data_dirs;
+  const char *ptr;
+
+  xdg_data_home = getenv ("XDG_DATA_HOME");
+  if (xdg_data_home)
+    {
+      if ((func) (xdg_data_home, user_data))
+	return;
+    }
+  else
+    {
+      const char *home;
+
+      home = getenv ("HOME");
+      if (home != NULL)
+	{
+	  char *guessed_xdg_home;
+	  int stop_processing;
+
+	  guessed_xdg_home = malloc (strlen (home) + strlen ("/.local/share/") + 1);
+	  strcpy (guessed_xdg_home, home);
+	  strcat (guessed_xdg_home, "/.local/share/");
+	  stop_processing = (func) (guessed_xdg_home, user_data);
+	  free (guessed_xdg_home);
+
+	  if (stop_processing)
+	    return;
+	}
+    }
+
+  xdg_data_dirs = getenv ("XDG_DATA_DIRS");
+  if (xdg_data_dirs == NULL)
+    xdg_data_dirs = "/usr/local/share/:/usr/share/";
+
+  ptr = xdg_data_dirs;
+
+  while (*ptr != '\000')
+    {
+      const char *end_ptr;
+      char *dir;
+      int len;
+      int stop_processing;
+
+      end_ptr = ptr;
+      while (*end_ptr != ':' && *end_ptr != '\000')
+	end_ptr ++;
+
+      if (end_ptr == ptr)
+	{
+	  ptr++;
+	  continue;
+	}
+
+      if (*end_ptr == ':')
+	len = end_ptr - ptr;
+      else
+	len = end_ptr - ptr + 1;
+      dir = malloc (len + 1);
+      strncpy (dir, ptr, len);
+      dir[len] = '\0';
+      stop_processing = (func) (dir, user_data);
+      free (dir);
+
+      if (stop_processing)
+	return;
+
+      ptr = end_ptr;
+    }
+}
+
+/* Checks file_path to make sure it has the same mtime as last time it was
+ * checked.  If it has a different mtime, or if the file doesn't exist, it
+ * returns FALSE.
+ *
+ * FIXME: This doesn't protect against permission changes.
+ */
+static int
+xdg_check_file (const char *file_path,
+                int        *exists)
+{
+  struct stat st;
+
+  /* If the file exists */
+  if (stat (file_path, &st) == 0)
+    {
+      XdgDirTimeList *list;
+
+      if (exists)
+        *exists = TRUE;
+
+      for (list = dir_time_list; list; list = list->next)
+	{
+	  if (! strcmp (list->directory_name, file_path))
+	    {
+	      if (st.st_mtime == list->mtime)
+		list->checked = XDG_CHECKED_VALID;
+	      else 
+		list->checked = XDG_CHECKED_INVALID;
+
+	      return (list->checked != XDG_CHECKED_VALID);
+	    }
+	}
+      return TRUE;
+    }
+
+  if (exists)
+    *exists = FALSE;
+
+  return FALSE;
+}
+
+static int
+xdg_check_dir (const char *directory,
+	       int        *invalid_dir_list)
+{
+  int invalid, exists;
+  char *file_name;
+
+  assert (directory != NULL);
+
+  /* Check the mime.cache file */
+  file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache");
+  invalid = xdg_check_file (file_name, &exists);
+  free (file_name);
+  if (invalid)
+    {
+      *invalid_dir_list = TRUE;
+      return TRUE;
+    }
+  else if (exists)
+    {
+      return FALSE;
+    }
+
+  /* Check the globs file */
+  file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/globs");
+  invalid = xdg_check_file (file_name, NULL);
+  free (file_name);
+  if (invalid)
+    {
+      *invalid_dir_list = TRUE;
+      return TRUE;
+    }
+
+  /* Check the magic file */
+  file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/magic");
+  invalid = xdg_check_file (file_name, NULL);
+  free (file_name);
+  if (invalid)
+    {
+      *invalid_dir_list = TRUE;
+      return TRUE;
+    }
+
+  return FALSE; /* Keep processing */
+}
+
+/* Walks through all the mime files stat()ing them to see if they've changed.
+ * Returns TRUE if they have. */
+static int
+xdg_check_dirs (void)
+{
+  XdgDirTimeList *list;
+  int invalid_dir_list = FALSE;
+
+  for (list = dir_time_list; list; list = list->next)
+    list->checked = XDG_CHECKED_UNCHECKED;
+
+  xdg_run_command_on_dirs ((XdgDirectoryFunc) xdg_check_dir,
+			   &invalid_dir_list);
+
+  if (invalid_dir_list)
+    return TRUE;
+
+  for (list = dir_time_list; list; list = list->next)
+    {
+      if (list->checked != XDG_CHECKED_VALID)
+	return TRUE;
+    }
+
+  return FALSE;
+}
+
+/* We want to avoid stat()ing on every single mime call, so we only look for
+ * newer files every 5 seconds.  This will return TRUE if we need to reread the
+ * mime data from disk.
+ */
+static int
+xdg_check_time_and_dirs (void)
+{
+  struct timeval tv;
+  time_t current_time;
+  int retval = FALSE;
+
+  gettimeofday (&tv, NULL);
+  current_time = tv.tv_sec;
+
+  if (current_time >= last_stat_time + 5)
+    {
+      retval = xdg_check_dirs ();
+      last_stat_time = current_time;
+    }
+
+  return retval;
+}
+
+/* Called in every public function.  It reloads the hash function if need be.
+ */
+static void
+xdg_mime_init (void)
+{
+  if (xdg_check_time_and_dirs ())
+    {
+      xdg_mime_shutdown ();
+    }
+
+  if (need_reread)
+    {
+      global_hash = _xdg_glob_hash_new ();
+      global_magic = _xdg_mime_magic_new ();
+      alias_list = _xdg_mime_alias_list_new ();
+      parent_list = _xdg_mime_parent_list_new ();
+      icon_list = _xdg_mime_icon_list_new ();
+      generic_icon_list = _xdg_mime_icon_list_new ();
+
+      xdg_run_command_on_dirs ((XdgDirectoryFunc) xdg_mime_init_from_directory,
+			       NULL);
+
+      need_reread = FALSE;
+    }
+}
+
+const char *
+xdg_mime_get_mime_type_for_data (const void *data,
+				 size_t      len,
+				 int        *result_prio)
+{
+  const char *mime_type;
+
+  xdg_mime_init ();
+
+  if (_caches)
+    return _xdg_mime_cache_get_mime_type_for_data (data, len, result_prio);
+
+  mime_type = _xdg_mime_magic_lookup_data (global_magic, data, len, result_prio, NULL, 0);
+
+  if (mime_type)
+    return mime_type;
+
+  return XDG_MIME_TYPE_UNKNOWN;
+}
+
+const char *
+xdg_mime_get_mime_type_for_file (const char  *file_name,
+                                 struct stat *statbuf)
+{
+  const char *mime_type;
+  /* currently, only a few globs occur twice, and none
+   * more often, so 5 seems plenty.
+   */
+  const char *mime_types[5];
+  FILE *file;
+  unsigned char *data;
+  int max_extent;
+  int bytes_read;
+  struct stat buf;
+  const char *base_name;
+  int n;
+
+  if (file_name == NULL)
+    return NULL;
+  if (! _xdg_utf8_validate (file_name))
+    return NULL;
+
+  xdg_mime_init ();
+
+  if (_caches)
+    return _xdg_mime_cache_get_mime_type_for_file (file_name, statbuf);
+
+  base_name = _xdg_get_base_name (file_name);
+  n = _xdg_glob_hash_lookup_file_name (global_hash, base_name, mime_types, 5);
+
+  if (n == 1)
+    return mime_types[0];
+
+  if (!statbuf)
+    {
+      if (stat (file_name, &buf) != 0)
+	return XDG_MIME_TYPE_UNKNOWN;
+
+      statbuf = &buf;
+    }
+
+  if (!S_ISREG (statbuf->st_mode))
+    return XDG_MIME_TYPE_UNKNOWN;
+
+  /* FIXME: Need to make sure that max_extent isn't totally broken.  This could
+   * be large and need getting from a stream instead of just reading it all
+   * in. */
+  max_extent = _xdg_mime_magic_get_buffer_extents (global_magic);
+  data = malloc (max_extent);
+  if (data == NULL)
+    return XDG_MIME_TYPE_UNKNOWN;
+        
+  file = fopen (file_name, "r");
+  if (file == NULL)
+    {
+      free (data);
+      return XDG_MIME_TYPE_UNKNOWN;
+    }
+
+  bytes_read = fread (data, 1, max_extent, file);
+  if (ferror (file))
+    {
+      free (data);
+      fclose (file);
+      return XDG_MIME_TYPE_UNKNOWN;
+    }
+
+  mime_type = _xdg_mime_magic_lookup_data (global_magic, data, bytes_read, NULL,
+					   mime_types, n);
+
+  free (data);
+  fclose (file);
+
+  if (mime_type)
+    return mime_type;
+
+  return XDG_MIME_TYPE_UNKNOWN;
+}
+
+const char *
+xdg_mime_get_mime_type_from_file_name (const char *file_name)
+{
+  const char *mime_type;
+
+  xdg_mime_init ();
+
+  if (_caches)
+    return _xdg_mime_cache_get_mime_type_from_file_name (file_name);
+
+  if (_xdg_glob_hash_lookup_file_name (global_hash, file_name, &mime_type, 1))
+    return mime_type;
+  else
+    return XDG_MIME_TYPE_UNKNOWN;
+}
+
+int
+xdg_mime_get_mime_types_from_file_name (const char *file_name,
+					const char  *mime_types[],
+					int          n_mime_types)
+{
+  xdg_mime_init ();
+  
+  if (_caches)
+    return _xdg_mime_cache_get_mime_types_from_file_name (file_name, mime_types, n_mime_types);
+  
+  return _xdg_glob_hash_lookup_file_name (global_hash, file_name, mime_types, n_mime_types);
+}
+
+int
+xdg_mime_is_valid_mime_type (const char *mime_type)
+{
+  /* FIXME: We should make this a better test
+   */
+  return _xdg_utf8_validate (mime_type);
+}
+
+void
+xdg_mime_shutdown (void)
+{
+  XdgCallbackList *list;
+
+  /* FIXME: Need to make this (and the whole library) thread safe */
+  if (dir_time_list)
+    {
+      xdg_dir_time_list_free (dir_time_list);
+      dir_time_list = NULL;
+    }
+	
+  if (global_hash)
+    {
+      _xdg_glob_hash_free (global_hash);
+      global_hash = NULL;
+    }
+  if (global_magic)
+    {
+      _xdg_mime_magic_free (global_magic);
+      global_magic = NULL;
+    }
+
+  if (alias_list)
+    {
+      _xdg_mime_alias_list_free (alias_list);
+      alias_list = NULL;
+    }
+
+  if (parent_list)
+    {
+      _xdg_mime_parent_list_free (parent_list);
+      parent_list = NULL;
+    }
+
+  if (icon_list)
+    {
+      _xdg_mime_icon_list_free (icon_list);
+      icon_list = NULL;
+    }
+
+  if (generic_icon_list)
+    {
+      _xdg_mime_icon_list_free (generic_icon_list);
+      generic_icon_list = NULL;
+    }
+  
+  if (_caches)
+    {
+      int i;
+
+      for (i = 0; i < n_caches; i++)
+        _xdg_mime_cache_unref (_caches[i]);
+      free (_caches);
+      _caches = NULL;
+      n_caches = 0;
+    }
+
+  for (list = callback_list; list; list = list->next)
+    (list->callback) (list->data);
+
+  need_reread = TRUE;
+}
+
+int
+xdg_mime_get_max_buffer_extents (void)
+{
+  xdg_mime_init ();
+  
+  if (_caches)
+    return _xdg_mime_cache_get_max_buffer_extents ();
+
+  return _xdg_mime_magic_get_buffer_extents (global_magic);
+}
+
+const char *
+_xdg_mime_unalias_mime_type (const char *mime_type)
+{
+  const char *lookup;
+
+  if (_caches)
+    return _xdg_mime_cache_unalias_mime_type (mime_type);
+
+  if ((lookup = _xdg_mime_alias_list_lookup (alias_list, mime_type)) != NULL)
+    return lookup;
+
+  return mime_type;
+}
+
+const char *
+xdg_mime_unalias_mime_type (const char *mime_type)
+{
+  xdg_mime_init ();
+
+  return _xdg_mime_unalias_mime_type (mime_type);
+}
+
+int
+_xdg_mime_mime_type_equal (const char *mime_a,
+			   const char *mime_b)
+{
+  const char *unalias_a, *unalias_b;
+
+  unalias_a = _xdg_mime_unalias_mime_type (mime_a);
+  unalias_b = _xdg_mime_unalias_mime_type (mime_b);
+
+  if (strcmp (unalias_a, unalias_b) == 0)
+    return 1;
+
+  return 0;
+}
+
+int
+xdg_mime_mime_type_equal (const char *mime_a,
+			  const char *mime_b)
+{
+  xdg_mime_init ();
+
+  return _xdg_mime_mime_type_equal (mime_a, mime_b);
+}
+
+int
+xdg_mime_media_type_equal (const char *mime_a,
+			   const char *mime_b)
+{
+  char *sep;
+
+  sep = strchr (mime_a, '/');
+  
+  if (sep && strncmp (mime_a, mime_b, sep - mime_a + 1) == 0)
+    return 1;
+
+  return 0;
+}
+
+#if 1
+static int
+xdg_mime_is_super_type (const char *mime)
+{
+  int length;
+  const char *type;
+
+  length = strlen (mime);
+  type = &(mime[length - 2]);
+
+  if (strcmp (type, "/*") == 0)
+    return 1;
+
+  return 0;
+}
+#endif
+
+int
+_xdg_mime_mime_type_subclass (const char *mime,
+			      const char *base)
+{
+  const char *umime, *ubase;
+  const char **parents;
+
+  if (_caches)
+    return _xdg_mime_cache_mime_type_subclass (mime, base);
+
+  umime = _xdg_mime_unalias_mime_type (mime);
+  ubase = _xdg_mime_unalias_mime_type (base);
+
+  if (strcmp (umime, ubase) == 0)
+    return 1;
+
+#if 1  
+  /* Handle supertypes */
+  if (xdg_mime_is_super_type (ubase) &&
+      xdg_mime_media_type_equal (umime, ubase))
+    return 1;
+#endif
+
+  /*  Handle special cases text/plain and application/octet-stream */
+  if (strcmp (ubase, "text/plain") == 0 && 
+      strncmp (umime, "text/", 5) == 0)
+    return 1;
+
+  if (strcmp (ubase, "application/octet-stream") == 0)
+    return 1;
+  
+  parents = _xdg_mime_parent_list_lookup (parent_list, umime);
+  for (; parents && *parents; parents++)
+    {
+      if (_xdg_mime_mime_type_subclass (*parents, ubase))
+	return 1;
+    }
+
+  return 0;
+}
+
+int
+xdg_mime_mime_type_subclass (const char *mime,
+			     const char *base)
+{
+  xdg_mime_init ();
+
+  return _xdg_mime_mime_type_subclass (mime, base);
+}
+
+char **
+xdg_mime_list_mime_parents (const char *mime)
+{
+  const char **parents;
+  char **result;
+  int i, n;
+
+  if (_caches)
+    return _xdg_mime_cache_list_mime_parents (mime);
+
+  parents = xdg_mime_get_mime_parents (mime);
+
+  if (!parents)
+    return NULL;
+
+  for (i = 0; parents[i]; i++) ;
+  
+  n = (i + 1) * sizeof (char *);
+  result = (char **) malloc (n);
+  memcpy (result, parents, n);
+
+  return result;
+}
+
+const char **
+xdg_mime_get_mime_parents (const char *mime)
+{
+  const char *umime;
+
+  xdg_mime_init ();
+
+  umime = _xdg_mime_unalias_mime_type (mime);
+
+  return _xdg_mime_parent_list_lookup (parent_list, umime);
+}
+
+void 
+xdg_mime_dump (void)
+{
+  xdg_mime_init();
+
+  printf ("*** ALIASES ***\n\n");
+  _xdg_mime_alias_list_dump (alias_list);
+  printf ("\n*** PARENTS ***\n\n");
+  _xdg_mime_parent_list_dump (parent_list);
+  printf ("\n*** CACHE ***\n\n");
+  _xdg_glob_hash_dump (global_hash);
+  printf ("\n*** GLOBS ***\n\n");
+  _xdg_glob_hash_dump (global_hash);
+  printf ("\n*** GLOBS REVERSE TREE ***\n\n");
+  _xdg_mime_cache_glob_dump ();
+}
+
+
+/* Registers a function to be called every time the mime database reloads its files
+ */
+int
+xdg_mime_register_reload_callback (XdgMimeCallback  callback,
+				   void            *data,
+				   XdgMimeDestroy   destroy)
+{
+  XdgCallbackList *list_el;
+  static int callback_id = 1;
+
+  /* Make a new list element */
+  list_el = calloc (1, sizeof (XdgCallbackList));
+  list_el->callback_id = callback_id;
+  list_el->callback = callback;
+  list_el->data = data;
+  list_el->destroy = destroy;
+  list_el->next = callback_list;
+  if (list_el->next)
+    list_el->next->prev = list_el;
+
+  callback_list = list_el;
+  callback_id ++;
+
+  return callback_id - 1;
+}
+
+void
+xdg_mime_remove_callback (int callback_id)
+{
+  XdgCallbackList *list;
+
+  for (list = callback_list; list; list = list->next)
+    {
+      if (list->callback_id == callback_id)
+	{
+	  if (list->next)
+	    list->next = list->prev;
+
+	  if (list->prev)
+	    list->prev->next = list->next;
+	  else
+	    callback_list = list->next;
+
+	  /* invoke the destroy handler */
+	  (list->destroy) (list->data);
+	  free (list);
+	  return;
+	}
+    }
+}
+
+const char *
+xdg_mime_get_icon (const char *mime)
+{
+  xdg_mime_init ();
+  
+  if (_caches)
+    return _xdg_mime_cache_get_icon (mime);
+
+  return _xdg_mime_icon_list_lookup (icon_list, mime);
+}
+
+const char *
+xdg_mime_get_generic_icon (const char *mime)
+{
+  xdg_mime_init ();
+  
+  if (_caches)
+    return _xdg_mime_cache_get_generic_icon (mime);
+
+  return _xdg_mime_icon_list_lookup (generic_icon_list, mime);
+}
diff --git a/gio/xdgmime/xdgmime.h b/gio/xdgmime/xdgmime.h
new file mode 100644
index 0000000..d3031a3
--- /dev/null
+++ b/gio/xdgmime/xdgmime.h
@@ -0,0 +1,127 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmime.h: XDG Mime Spec mime resolver.  Based on version 0.11 of the spec.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ * 
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ * 
+ * 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 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.
+ */
+
+
+#ifndef __XDG_MIME_H__
+#define __XDG_MIME_H__
+
+#include <stdlib.h>
+#include <sys/stat.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef XDG_PREFIX
+#define XDG_ENTRY(func) _XDG_ENTRY2(XDG_PREFIX,func)
+#define _XDG_ENTRY2(prefix,func) _XDG_ENTRY3(prefix,func)
+#define _XDG_ENTRY3(prefix,func) prefix##_##func
+
+#define XDG_RESERVED_ENTRY(func) _XDG_RESERVED_ENTRY2(XDG_PREFIX,func)
+#define _XDG_RESERVED_ENTRY2(prefix,func) _XDG_RESERVED_ENTRY3(prefix,func)
+#define _XDG_RESERVED_ENTRY3(prefix,func) _##prefix##_##func
+#endif
+
+typedef void (*XdgMimeCallback) (void *user_data);
+typedef void (*XdgMimeDestroy)  (void *user_data);
+
+  
+#ifdef XDG_PREFIX
+#define xdg_mime_get_mime_type_for_data       XDG_ENTRY(get_mime_type_for_data)
+#define xdg_mime_get_mime_type_for_file       XDG_ENTRY(get_mime_type_for_file)
+#define xdg_mime_get_mime_type_from_file_name XDG_ENTRY(get_mime_type_from_file_name)
+#define xdg_mime_get_mime_types_from_file_name XDG_ENTRY(get_mime_types_from_file_name)
+#define xdg_mime_is_valid_mime_type           XDG_ENTRY(is_valid_mime_type)
+#define xdg_mime_mime_type_equal              XDG_ENTRY(mime_type_equal)
+#define xdg_mime_media_type_equal             XDG_ENTRY(media_type_equal)
+#define xdg_mime_mime_type_subclass           XDG_ENTRY(mime_type_subclass)
+#define xdg_mime_get_mime_parents             XDG_ENTRY(get_mime_parents)
+#define xdg_mime_list_mime_parents            XDG_ENTRY(list_mime_parents)
+#define xdg_mime_unalias_mime_type            XDG_ENTRY(unalias_mime_type)
+#define xdg_mime_get_max_buffer_extents       XDG_ENTRY(get_max_buffer_extents)
+#define xdg_mime_shutdown                     XDG_ENTRY(shutdown)
+#define xdg_mime_dump                         XDG_ENTRY(dump)
+#define xdg_mime_register_reload_callback     XDG_ENTRY(register_reload_callback)
+#define xdg_mime_remove_callback              XDG_ENTRY(remove_callback)
+#define xdg_mime_type_unknown                 XDG_ENTRY(type_unknown)
+#define xdg_mime_get_icon                     XDG_ENTRY(get_icon)
+#define xdg_mime_get_generic_icon             XDG_ENTRY(get_generic_icon)
+
+#define _xdg_mime_mime_type_equal             XDG_RESERVED_ENTRY(mime_type_equal)
+#define _xdg_mime_mime_type_subclass          XDG_RESERVED_ENTRY(mime_type_subclass)
+#define _xdg_mime_unalias_mime_type           XDG_RESERVED_ENTRY(unalias_mime_type)  
+#endif
+
+extern const char xdg_mime_type_unknown[];
+#define XDG_MIME_TYPE_UNKNOWN xdg_mime_type_unknown
+
+const char  *xdg_mime_get_mime_type_for_data       (const void *data,
+						    size_t      len,
+						    int        *result_prio);
+const char  *xdg_mime_get_mime_type_for_file       (const char *file_name,
+                                                    struct stat *statbuf);
+const char  *xdg_mime_get_mime_type_from_file_name (const char *file_name);
+int          xdg_mime_get_mime_types_from_file_name(const char *file_name,
+						    const char *mime_types[],
+						    int         n_mime_types);
+int          xdg_mime_is_valid_mime_type           (const char *mime_type);
+int          xdg_mime_mime_type_equal              (const char *mime_a,
+						    const char *mime_b);
+int          xdg_mime_media_type_equal             (const char *mime_a,
+						    const char *mime_b);
+int          xdg_mime_mime_type_subclass           (const char *mime_a,
+						    const char *mime_b);
+  /* xdg_mime_get_mime_parents() is deprecated since it does
+   * not work correctly with caches. Use xdg_mime_list_parents() 
+   * instead, but notice that that function expects you to free
+   * the array it returns. 
+   */
+const char **xdg_mime_get_mime_parents		   (const char *mime);
+char **      xdg_mime_list_mime_parents		   (const char *mime);
+const char  *xdg_mime_unalias_mime_type		   (const char *mime);
+const char  *xdg_mime_get_icon                     (const char *mime);
+const char  *xdg_mime_get_generic_icon             (const char *mime);
+int          xdg_mime_get_max_buffer_extents       (void);
+void         xdg_mime_shutdown                     (void);
+void         xdg_mime_dump                         (void);
+int          xdg_mime_register_reload_callback     (XdgMimeCallback  callback,
+						    void            *data,
+						    XdgMimeDestroy   destroy);
+void         xdg_mime_remove_callback              (int              callback_id);
+
+   /* Private versions of functions that don't call xdg_mime_init () */
+int          _xdg_mime_mime_type_equal             (const char *mime_a,
+						    const char *mime_b);
+int          _xdg_mime_mime_type_subclass          (const char *mime,
+						    const char *base);
+const char  *_xdg_mime_unalias_mime_type           (const char *mime);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __XDG_MIME_H__ */
diff --git a/gio/xdgmime/xdgmimealias.c b/gio/xdgmime/xdgmimealias.c
new file mode 100644
index 0000000..c33adfa
--- /dev/null
+++ b/gio/xdgmime/xdgmimealias.c
@@ -0,0 +1,184 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimealias.c: Private file.  Datastructure for storing the aliases.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2004  Red Hat, Inc.
+ * Copyright (C) 2004  Matthias Clasen <mclasen@redhat.com>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xdgmimealias.h"
+#include "xdgmimeint.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <fnmatch.h>
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+typedef struct XdgAlias XdgAlias;
+
+struct XdgAlias 
+{
+  char *alias;
+  char *mime_type;
+};
+
+struct XdgAliasList
+{
+  struct XdgAlias *aliases;
+  int n_aliases;
+};
+
+XdgAliasList *
+_xdg_mime_alias_list_new (void)
+{
+  XdgAliasList *list;
+
+  list = malloc (sizeof (XdgAliasList));
+
+  list->aliases = NULL;
+  list->n_aliases = 0;
+
+  return list;
+}
+
+void         
+_xdg_mime_alias_list_free (XdgAliasList *list)
+{
+  int i;
+
+  if (list->aliases)
+    {
+      for (i = 0; i < list->n_aliases; i++)
+	{
+	  free (list->aliases[i].alias);
+	  free (list->aliases[i].mime_type);
+	}
+      free (list->aliases);
+    }
+  free (list);
+}
+
+static int
+alias_entry_cmp (const void *v1, const void *v2)
+{
+  return strcmp (((XdgAlias *)v1)->alias, ((XdgAlias *)v2)->alias);
+}
+
+const char  *
+_xdg_mime_alias_list_lookup (XdgAliasList *list,
+			     const char   *alias)
+{
+  XdgAlias *entry;
+  XdgAlias key;
+
+  if (list->n_aliases > 0)
+    {
+      key.alias = (char *)alias;
+      key.mime_type = NULL;
+
+      entry = bsearch (&key, list->aliases, list->n_aliases,
+		       sizeof (XdgAlias), alias_entry_cmp);
+      if (entry)
+        return entry->mime_type;
+    }
+
+  return NULL;
+}
+
+void
+_xdg_mime_alias_read_from_file (XdgAliasList *list,
+				const char   *file_name)
+{
+  FILE *file;
+  char line[255];
+  int alloc;
+
+  file = fopen (file_name, "r");
+
+  if (file == NULL)
+    return;
+
+  /* FIXME: Not UTF-8 safe.  Doesn't work if lines are greater than 255 chars.
+   * Blah */
+  alloc = list->n_aliases + 16;
+  list->aliases = realloc (list->aliases, alloc * sizeof (XdgAlias));
+  while (fgets (line, 255, file) != NULL)
+    {
+      char *sep;
+      if (line[0] == '#')
+	continue;
+
+      sep = strchr (line, ' ');
+      if (sep == NULL)
+	continue;
+      *(sep++) = '\000';
+      sep[strlen (sep) -1] = '\000';
+      if (list->n_aliases == alloc)
+	{
+	  alloc <<= 1;
+	  list->aliases = realloc (list->aliases, 
+				   alloc * sizeof (XdgAlias));
+	}
+      list->aliases[list->n_aliases].alias = strdup (line);
+      list->aliases[list->n_aliases].mime_type = strdup (sep);
+      list->n_aliases++;
+    }
+  list->aliases = realloc (list->aliases, 
+			   list->n_aliases * sizeof (XdgAlias));
+
+  fclose (file);  
+  
+  if (list->n_aliases > 1)
+    qsort (list->aliases, list->n_aliases, 
+           sizeof (XdgAlias), alias_entry_cmp);
+}
+
+
+void
+_xdg_mime_alias_list_dump (XdgAliasList *list)
+{
+  int i;
+
+  if (list->aliases)
+    {
+      for (i = 0; i < list->n_aliases; i++)
+	{
+	  printf ("%s %s\n", 
+		  list->aliases[i].alias,
+		  list->aliases[i].mime_type);
+	}
+    }
+}
+
+
diff --git a/gio/xdgmime/xdgmimealias.h b/gio/xdgmime/xdgmimealias.h
new file mode 100644
index 0000000..3c28012
--- /dev/null
+++ b/gio/xdgmime/xdgmimealias.h
@@ -0,0 +1,51 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimealias.h: Private file.  Datastructure for storing the aliases.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2004  Red Hat, Inc.
+ * Copyright (C) 200  Matthias Clasen <mclasen@redhat.com>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_ALIAS_H__
+#define __XDG_MIME_ALIAS_H__
+
+#include "xdgmime.h"
+
+typedef struct XdgAliasList XdgAliasList;
+
+#ifdef XDG_PREFIX
+#define _xdg_mime_alias_read_from_file        XDG_RESERVED_ENTRY(alias_read_from_file)
+#define _xdg_mime_alias_list_new              XDG_RESERVED_ENTRY(alias_list_new)
+#define _xdg_mime_alias_list_free             XDG_RESERVED_ENTRY(alias_list_free)
+#define _xdg_mime_alias_list_lookup           XDG_RESERVED_ENTRY(alias_list_lookup)
+#define _xdg_mime_alias_list_dump             XDG_RESERVED_ENTRY(alias_list_dump)
+#endif
+
+void          _xdg_mime_alias_read_from_file (XdgAliasList *list,
+					      const char   *file_name);
+XdgAliasList *_xdg_mime_alias_list_new       (void);
+void          _xdg_mime_alias_list_free      (XdgAliasList *list);
+const char   *_xdg_mime_alias_list_lookup    (XdgAliasList *list,
+					      const char  *alias);
+void          _xdg_mime_alias_list_dump      (XdgAliasList *list);
+
+#endif /* __XDG_MIME_ALIAS_H__ */
diff --git a/gio/xdgmime/xdgmimecache.c b/gio/xdgmime/xdgmimecache.c
new file mode 100644
index 0000000..5bdac5b
--- /dev/null
+++ b/gio/xdgmime/xdgmimecache.c
@@ -0,0 +1,1004 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimealias.c: Private file.  mmappable caches for mime data
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2005  Matthias Clasen <mclasen@redhat.com>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <fnmatch.h>
+#include <assert.h>
+
+#include <netinet/in.h> /* for ntohl/ntohs */
+
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+#else
+#warning Building xdgmime without MMAP support. Binary "mime.info" cache files will not be used.
+#endif
+
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "xdgmimecache.h"
+#include "xdgmimeint.h"
+
+#ifndef MAX
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+#ifndef _O_BINARY
+#define _O_BINARY 0
+#endif
+
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *) -1)
+#endif
+
+#define MAJOR_VERSION 1
+#define MINOR_VERSION 1
+
+struct _XdgMimeCache
+{
+  int ref_count;
+
+  size_t  size;
+  char   *buffer;
+};
+
+#define GET_UINT16(cache,offset) (ntohs(*(xdg_uint16_t*)((cache) + (offset))))
+#define GET_UINT32(cache,offset) (ntohl(*(xdg_uint32_t*)((cache) + (offset))))
+
+XdgMimeCache *
+_xdg_mime_cache_ref (XdgMimeCache *cache)
+{
+  cache->ref_count++;
+  return cache;
+}
+
+void
+_xdg_mime_cache_unref (XdgMimeCache *cache)
+{
+  cache->ref_count--;
+
+  if (cache->ref_count == 0)
+    {
+#ifdef HAVE_MMAP
+      munmap (cache->buffer, cache->size);
+#endif
+      free (cache);
+    }
+}
+
+XdgMimeCache *
+_xdg_mime_cache_new_from_file (const char *file_name)
+{
+  XdgMimeCache *cache = NULL;
+
+#ifdef HAVE_MMAP
+  int fd = -1;
+  struct stat st;
+  char *buffer = NULL;
+
+  /* Open the file and map it into memory */
+  fd = open (file_name, O_RDONLY|_O_BINARY, 0);
+
+  if (fd < 0)
+    return NULL;
+  
+  if (fstat (fd, &st) < 0 || st.st_size < 4)
+    goto done;
+
+  buffer = (char *) mmap (NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+
+  if (buffer == MAP_FAILED)
+    goto done;
+
+  /* Verify version */
+  if (GET_UINT16 (buffer, 0) != MAJOR_VERSION ||
+      GET_UINT16 (buffer, 2) != MINOR_VERSION)
+    {
+      munmap (buffer, st.st_size);
+
+      goto done;
+    }
+  
+  cache = (XdgMimeCache *) malloc (sizeof (XdgMimeCache));
+  cache->ref_count = 1;
+  cache->buffer = buffer;
+  cache->size = st.st_size;
+
+ done:
+  if (fd != -1)
+    close (fd);
+
+#endif  /* HAVE_MMAP */
+
+  return cache;
+}
+
+static int
+cache_magic_matchlet_compare_to_data (XdgMimeCache *cache, 
+				      xdg_uint32_t  offset,
+				      const void   *data,
+				      size_t        len)
+{
+  xdg_uint32_t range_start = GET_UINT32 (cache->buffer, offset);
+  xdg_uint32_t range_length = GET_UINT32 (cache->buffer, offset + 4);
+  xdg_uint32_t data_length = GET_UINT32 (cache->buffer, offset + 12);
+  xdg_uint32_t data_offset = GET_UINT32 (cache->buffer, offset + 16);
+  xdg_uint32_t mask_offset = GET_UINT32 (cache->buffer, offset + 20);
+  
+  int i, j;
+
+  for (i = range_start; i <= range_start + range_length; i++)
+    {
+      int valid_matchlet = TRUE;
+      
+      if (i + data_length > len)
+	return FALSE;
+
+      if (mask_offset)
+	{
+	  for (j = 0; j < data_length; j++)
+	    {
+	      if ((((unsigned char *)cache->buffer)[data_offset + j] & ((unsigned char *)cache->buffer)[mask_offset + j]) !=
+		  ((((unsigned char *) data)[j + i]) & ((unsigned char *)cache->buffer)[mask_offset + j]))
+		{
+		  valid_matchlet = FALSE;
+		  break;
+		}
+	    }
+	}
+      else
+	{
+	  for (j = 0; j < data_length; j++)
+	    {
+	      if (((unsigned char *)cache->buffer)[data_offset + j] != ((unsigned char *) data)[j + i])
+		{
+		  valid_matchlet = FALSE;
+		  break;
+		}
+	    }
+	}
+      
+      if (valid_matchlet)
+	return TRUE;
+    }
+  
+  return FALSE;  
+}
+
+static int
+cache_magic_matchlet_compare (XdgMimeCache *cache, 
+			      xdg_uint32_t  offset,
+			      const void   *data,
+			      size_t        len)
+{
+  xdg_uint32_t n_children = GET_UINT32 (cache->buffer, offset + 24);
+  xdg_uint32_t child_offset = GET_UINT32 (cache->buffer, offset + 28);
+
+  int i;
+  
+  if (cache_magic_matchlet_compare_to_data (cache, offset, data, len))
+    {
+      if (n_children == 0)
+	return TRUE;
+      
+      for (i = 0; i < n_children; i++)
+	{
+	  if (cache_magic_matchlet_compare (cache, child_offset + 32 * i,
+					    data, len))
+	    return TRUE;
+	}
+    }
+  
+  return FALSE;  
+}
+
+static const char *
+cache_magic_compare_to_data (XdgMimeCache *cache, 
+			     xdg_uint32_t  offset,
+			     const void   *data, 
+			     size_t        len, 
+			     int          *prio)
+{
+  xdg_uint32_t priority = GET_UINT32 (cache->buffer, offset);
+  xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, offset + 4);
+  xdg_uint32_t n_matchlets = GET_UINT32 (cache->buffer, offset + 8);
+  xdg_uint32_t matchlet_offset = GET_UINT32 (cache->buffer, offset + 12);
+
+  int i;
+
+  for (i = 0; i < n_matchlets; i++)
+    {
+      if (cache_magic_matchlet_compare (cache, matchlet_offset + i * 32, 
+					data, len))
+	{
+	  *prio = priority;
+	  
+	  return cache->buffer + mimetype_offset;
+	}
+    }
+
+  return NULL;
+}
+
+static const char *
+cache_magic_lookup_data (XdgMimeCache *cache, 
+			 const void   *data, 
+			 size_t        len, 
+			 int          *prio,
+			 const char   *mime_types[],
+			 int           n_mime_types)
+{
+  xdg_uint32_t list_offset;
+  xdg_uint32_t n_entries;
+  xdg_uint32_t offset;
+
+  int j, n;
+
+  *prio = 0;
+
+  list_offset = GET_UINT32 (cache->buffer, 24);
+  n_entries = GET_UINT32 (cache->buffer, list_offset);
+  offset = GET_UINT32 (cache->buffer, list_offset + 8);
+  
+  for (j = 0; j < n_entries; j++)
+    {
+      const char *match;
+
+      match = cache_magic_compare_to_data (cache, offset + 16 * j, 
+					   data, len, prio);
+      if (match)
+	return match;
+      else
+	{
+	  xdg_uint32_t mimetype_offset;
+	  const char *non_match;
+	  
+	  mimetype_offset = GET_UINT32 (cache->buffer, offset + 16 * j + 4);
+	  non_match = cache->buffer + mimetype_offset;
+
+	  for (n = 0; n < n_mime_types; n++)
+	    {
+	      if (mime_types[n] && 
+		  _xdg_mime_mime_type_equal (mime_types[n], non_match))
+		mime_types[n] = NULL;
+	    }
+	}
+    }
+
+  return NULL;
+}
+
+static const char *
+cache_alias_lookup (const char *alias)
+{
+  const char *ptr;
+  int i, min, max, mid, cmp;
+
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 4);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+      xdg_uint32_t offset;
+
+      min = 0; 
+      max = n_entries - 1;
+      while (max >= min) 
+	{
+	  mid = (min + max) / 2;
+
+	  offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid);
+	  ptr = cache->buffer + offset;
+	  cmp = strcmp (ptr, alias);
+	  
+	  if (cmp < 0)
+	    min = mid + 1;
+	  else if (cmp > 0)
+	    max = mid - 1;
+	  else
+	    {
+	      offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid + 4);
+	      return cache->buffer + offset;
+	    }
+	}
+    }
+
+  return NULL;
+}
+
+typedef struct {
+  const char *mime;
+  int weight;
+} MimeWeight;
+
+static int
+cache_glob_lookup_literal (const char *file_name,
+			   const char *mime_types[],
+			   int         n_mime_types)
+{
+  const char *ptr;
+  int i, min, max, mid, cmp;
+
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 12);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+      xdg_uint32_t offset;
+
+      min = 0; 
+      max = n_entries - 1;
+      while (max >= min) 
+	{
+	  mid = (min + max) / 2;
+
+	  offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * mid);
+	  ptr = cache->buffer + offset;
+	  cmp = strcmp (ptr, file_name);
+	  
+	  if (cmp < 0)
+	    min = mid + 1;
+	  else if (cmp > 0)
+	    max = mid - 1;
+	  else
+	    {
+	      offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * mid + 4);
+	      mime_types[0] = (const char *)(cache->buffer + offset);
+	      
+	      return 1;
+	    }
+	}
+    }
+
+  return 0;
+}
+
+static int
+cache_glob_lookup_fnmatch (const char *file_name,
+			   MimeWeight  mime_types[],
+			   int         n_mime_types)
+{
+  const char *mime_type;
+  const char *ptr;
+
+  int i, j, n;
+
+  n = 0;
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 20);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+
+      for (j = 0; j < n_entries && n < n_mime_types; j++)
+	{
+	  xdg_uint32_t offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * j);
+	  xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * j + 4);
+	  int weight = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * j + 8);
+	  ptr = cache->buffer + offset;
+	  mime_type = cache->buffer + mimetype_offset;
+
+	  /* FIXME: Not UTF-8 safe */
+	  if (fnmatch (ptr, file_name, 0) == 0)
+	    {
+	      mime_types[n].mime = mime_type;
+	      mime_types[n].weight = weight;
+	      n++;
+	    }
+	}
+
+      if (n > 0)
+	return n;
+    }
+  
+  return 0;
+}
+
+static int
+cache_glob_node_lookup_suffix (XdgMimeCache  *cache,
+			       xdg_uint32_t   n_entries,
+			       xdg_uint32_t   offset,
+			       const char    *file_name,
+			       int            len,
+			       int            ignore_case,
+			       MimeWeight     mime_types[],
+			       int            n_mime_types)
+{
+  xdg_unichar_t character;
+  xdg_unichar_t match_char;
+  xdg_uint32_t mimetype_offset;
+  xdg_uint32_t n_children;
+  xdg_uint32_t child_offset; 
+  int weight;
+
+  int min, max, mid, n, i;
+
+  character = file_name[len - 1];
+  if (ignore_case)
+    character = tolower (character);
+
+  assert (character != 0);
+
+  min = 0;
+  max = n_entries - 1;
+  while (max >= min)
+    {
+      mid = (min + max) /  2;
+      match_char = GET_UINT32 (cache->buffer, offset + 12 * mid);
+      if (match_char < character)
+	min = mid + 1;
+      else if (match_char > character)
+	max = mid - 1;
+      else 
+	{
+          len--;
+          n = 0;
+          n_children = GET_UINT32 (cache->buffer, offset + 12 * mid + 4);
+          child_offset = GET_UINT32 (cache->buffer, offset + 12 * mid + 8);
+      
+          if (len > 0)
+            {
+              n = cache_glob_node_lookup_suffix (cache, 
+                                                 n_children, child_offset,
+                                                 file_name, len, 
+                                                 ignore_case,
+                                                 mime_types,
+                                                 n_mime_types);
+            }
+          if (n == 0)
+            {
+	      i = 0;
+	      while (n < n_mime_types && i < n_children)
+		{
+		  match_char = GET_UINT32 (cache->buffer, child_offset + 12 * i);
+		  if (match_char != 0)
+		    break;
+
+		  mimetype_offset = GET_UINT32 (cache->buffer, child_offset + 12 * i + 4);
+		  weight = GET_UINT32 (cache->buffer, child_offset + 12 * i + 8);
+
+		  mime_types[n].mime = cache->buffer + mimetype_offset;
+		  mime_types[n].weight = weight;
+		  n++;
+		  i++;
+		}
+	    }
+	  return n;
+	}
+    }
+  return 0;
+}
+
+static int
+cache_glob_lookup_suffix (const char *file_name,
+			  int         len,
+			  int         ignore_case,
+			  MimeWeight  mime_types[],
+			  int         n_mime_types)
+{
+  int i, n;
+
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 16);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+      xdg_uint32_t offset = GET_UINT32 (cache->buffer, list_offset + 4);
+
+      n = cache_glob_node_lookup_suffix (cache, 
+					 n_entries, offset, 
+					 file_name, len,
+					 ignore_case,
+					 mime_types,
+					 n_mime_types);
+      if (n > 0)
+	return n;
+    }
+
+  return 0;
+}
+
+static int compare_mime_weight (const void *a, const void *b)
+{
+  const MimeWeight *aa = (const MimeWeight *)a;
+  const MimeWeight *bb = (const MimeWeight *)b;
+
+  return aa->weight - bb->weight;
+}
+
+static int
+cache_glob_lookup_file_name (const char *file_name, 
+			     const char *mime_types[],
+			     int         n_mime_types)
+{
+  int n;
+  MimeWeight mimes[10];
+  int n_mimes = 10;
+  int i;
+  int len;
+  
+  assert (file_name != NULL && n_mime_types > 0);
+
+  /* First, check the literals */
+  n = cache_glob_lookup_literal (file_name, mime_types, n_mime_types);
+  if (n > 0)
+    return n;
+
+  len = strlen (file_name);
+  n = cache_glob_lookup_suffix (file_name, len, FALSE, mimes, n_mimes);
+
+  if (n == 0)
+    n = cache_glob_lookup_suffix (file_name, len, TRUE, mimes, n_mimes);
+  
+  /* Last, try fnmatch */
+  if (n == 0)
+    n = cache_glob_lookup_fnmatch (file_name, mimes, n_mimes);
+
+  qsort (mimes, n, sizeof (MimeWeight), compare_mime_weight);
+
+  if (n_mime_types < n)
+    n = n_mime_types;
+
+  for (i = 0; i < n; i++)
+    mime_types[i] = mimes[i].mime;
+
+  return n;
+}
+
+int
+_xdg_mime_cache_get_max_buffer_extents (void)
+{
+  xdg_uint32_t offset;
+  xdg_uint32_t max_extent;
+  int i;
+
+  max_extent = 0;
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+
+      offset = GET_UINT32 (cache->buffer, 24);
+      max_extent = MAX (max_extent, GET_UINT32 (cache->buffer, offset + 4));
+    }
+
+  return max_extent;
+}
+
+static const char *
+cache_get_mime_type_for_data (const void *data,
+			      size_t      len,
+			      int        *result_prio,
+			      const char *mime_types[],
+			      int         n_mime_types)
+{
+  const char *mime_type;
+  int i, n, priority;
+
+  priority = 0;
+  mime_type = NULL;
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+
+      int prio;
+      const char *match;
+
+      match = cache_magic_lookup_data (cache, data, len, &prio, 
+				       mime_types, n_mime_types);
+      if (prio > priority)
+	{
+	  priority = prio;
+	  mime_type = match;
+	}
+    }
+
+  if (result_prio)
+    *result_prio = priority;
+  
+  if (priority > 0)
+    return mime_type;
+
+  for (n = 0; n < n_mime_types; n++)
+    {
+      
+      if (mime_types[n])
+	return mime_types[n];
+    }
+
+  return XDG_MIME_TYPE_UNKNOWN;
+}
+
+const char *
+_xdg_mime_cache_get_mime_type_for_data (const void *data,
+					size_t      len,
+					int        *result_prio)
+{
+  return cache_get_mime_type_for_data (data, len, result_prio, NULL, 0);
+}
+
+const char *
+_xdg_mime_cache_get_mime_type_for_file (const char  *file_name,
+					struct stat *statbuf)
+{
+  const char *mime_type;
+  const char *mime_types[10];
+  FILE *file;
+  unsigned char *data;
+  int max_extent;
+  int bytes_read;
+  struct stat buf;
+  const char *base_name;
+  int n;
+
+  if (file_name == NULL)
+    return NULL;
+
+  if (! _xdg_utf8_validate (file_name))
+    return NULL;
+
+  base_name = _xdg_get_base_name (file_name);
+  n = cache_glob_lookup_file_name (base_name, mime_types, 10);
+
+  if (n == 1)
+    return mime_types[0];
+
+  if (!statbuf)
+    {
+      if (stat (file_name, &buf) != 0)
+	return XDG_MIME_TYPE_UNKNOWN;
+
+      statbuf = &buf;
+    }
+
+  if (!S_ISREG (statbuf->st_mode))
+    return XDG_MIME_TYPE_UNKNOWN;
+
+  /* FIXME: Need to make sure that max_extent isn't totally broken.  This could
+   * be large and need getting from a stream instead of just reading it all
+   * in. */
+  max_extent = _xdg_mime_cache_get_max_buffer_extents ();
+  data = malloc (max_extent);
+  if (data == NULL)
+    return XDG_MIME_TYPE_UNKNOWN;
+        
+  file = fopen (file_name, "r");
+  if (file == NULL)
+    {
+      free (data);
+      return XDG_MIME_TYPE_UNKNOWN;
+    }
+
+  bytes_read = fread (data, 1, max_extent, file);
+  if (ferror (file))
+    {
+      free (data);
+      fclose (file);
+      return XDG_MIME_TYPE_UNKNOWN;
+    }
+
+  mime_type = cache_get_mime_type_for_data (data, bytes_read, NULL,
+					    mime_types, n);
+
+  free (data);
+  fclose (file);
+
+  return mime_type;
+}
+
+const char *
+_xdg_mime_cache_get_mime_type_from_file_name (const char *file_name)
+{
+  const char *mime_type;
+
+  if (cache_glob_lookup_file_name (file_name, &mime_type, 1))
+    return mime_type;
+  else
+    return XDG_MIME_TYPE_UNKNOWN;
+}
+
+int
+_xdg_mime_cache_get_mime_types_from_file_name (const char *file_name,
+					       const char  *mime_types[],
+					       int          n_mime_types)
+{
+  return cache_glob_lookup_file_name (file_name, mime_types, n_mime_types);
+}
+
+#if 1
+static int
+is_super_type (const char *mime)
+{
+  int length;
+  const char *type;
+
+  length = strlen (mime);
+  type = &(mime[length - 2]);
+
+  if (strcmp (type, "/*") == 0)
+    return 1;
+
+  return 0;
+}
+#endif
+
+int
+_xdg_mime_cache_mime_type_subclass (const char *mime,
+				    const char *base)
+{
+  const char *umime, *ubase;
+
+  int i, j, min, max, med, cmp;
+  
+  umime = _xdg_mime_cache_unalias_mime_type (mime);
+  ubase = _xdg_mime_cache_unalias_mime_type (base);
+
+  if (strcmp (umime, ubase) == 0)
+    return 1;
+
+  /* We really want to handle text/ * in GtkFileFilter, so we just
+   * turn on the supertype matching
+   */
+#if 1
+  /* Handle supertypes */
+  if (is_super_type (ubase) &&
+      xdg_mime_media_type_equal (umime, ubase))
+    return 1;
+#endif
+
+  /*  Handle special cases text/plain and application/octet-stream */
+  if (strcmp (ubase, "text/plain") == 0 && 
+      strncmp (umime, "text/", 5) == 0)
+    return 1;
+
+  if (strcmp (ubase, "application/octet-stream") == 0)
+    return 1;
+ 
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+      
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 8);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+      xdg_uint32_t offset, n_parents, parent_offset;
+
+      min = 0; 
+      max = n_entries - 1;
+      while (max >= min)
+	{
+	  med = (min + max)/2;
+	  
+	  offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * med);
+	  cmp = strcmp (cache->buffer + offset, umime);
+	  if (cmp < 0)
+	    min = med + 1;
+	  else if (cmp > 0)
+	    max = med - 1;
+	  else
+	    {
+	      offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * med + 4);
+	      n_parents = GET_UINT32 (cache->buffer, offset);
+	      
+	      for (j = 0; j < n_parents; j++)
+		{
+		  parent_offset = GET_UINT32 (cache->buffer, offset + 4 + 4 * j);
+		  if (_xdg_mime_cache_mime_type_subclass (cache->buffer + parent_offset, ubase))
+		    return 1;
+		}
+
+	      break;
+	    }
+	}
+    }
+
+  return 0;
+}
+
+const char *
+_xdg_mime_cache_unalias_mime_type (const char *mime)
+{
+  const char *lookup;
+  
+  lookup = cache_alias_lookup (mime);
+  
+  if (lookup)
+    return lookup;
+  
+  return mime;  
+}
+
+char **
+_xdg_mime_cache_list_mime_parents (const char *mime)
+{
+  int i, j, k, l, p;
+  char *all_parents[128]; /* we'll stop at 128 */ 
+  char **result;
+
+  mime = xdg_mime_unalias_mime_type (mime);
+
+  p = 0;
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+  
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 8);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+
+      for (j = 0; j < n_entries; j++)
+	{
+	  xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * j);
+	  xdg_uint32_t parents_offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * j + 4);
+
+	  if (strcmp (cache->buffer + mimetype_offset, mime) == 0)
+	    {
+	      xdg_uint32_t parent_mime_offset;
+	      xdg_uint32_t n_parents = GET_UINT32 (cache->buffer, parents_offset);
+
+	      for (k = 0; k < n_parents && p < 127; k++)
+		{
+		  parent_mime_offset = GET_UINT32 (cache->buffer, parents_offset + 4 + 4 * k);
+
+		  /* Don't add same parent multiple times.
+		   * This can happen for instance if the same type is listed in multiple directories
+		   */
+		  for (l = 0; l < p; l++)
+		    {
+		      if (strcmp (all_parents[l], cache->buffer + parent_mime_offset) == 0)
+			break;
+		    }
+
+		  if (l == p)
+		    all_parents[p++] = cache->buffer + parent_mime_offset;
+		}
+
+	      break;
+	    }
+	}
+    }
+  all_parents[p++] = NULL;
+  
+  result = (char **) malloc (p * sizeof (char *));
+  memcpy (result, all_parents, p * sizeof (char *));
+
+  return result;
+}
+
+static const char *
+cache_lookup_icon (const char *mime, int header)
+{
+  const char *ptr;
+  int i, min, max, mid, cmp;
+
+  for (i = 0; _caches[i]; i++)
+    {
+      XdgMimeCache *cache = _caches[i];
+      xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, header);
+      xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset);
+      xdg_uint32_t offset;
+
+      min = 0; 
+      max = n_entries - 1;
+      while (max >= min) 
+        {
+          mid = (min + max) / 2;
+
+          offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid);
+          ptr = cache->buffer + offset;
+          cmp = strcmp (ptr, mime);
+         
+          if (cmp < 0)
+            min = mid + 1;
+          else if (cmp > 0)
+            max = mid - 1;
+          else
+            {
+              offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid + 4);
+              return cache->buffer + offset;
+            }
+        }
+    }
+
+  return NULL;
+}
+
+const char *
+_xdg_mime_cache_get_generic_icon (const char *mime)
+{
+  return cache_lookup_icon (mime, 36);
+}
+
+const char *
+_xdg_mime_cache_get_icon (const char *mime)
+{
+  return cache_lookup_icon (mime, 32);
+}
+
+static void
+dump_glob_node (XdgMimeCache *cache,
+		xdg_uint32_t  offset,
+		int           depth)
+{
+  xdg_unichar_t character;
+  xdg_uint32_t mime_offset;
+  xdg_uint32_t n_children;
+  xdg_uint32_t child_offset;
+  int i;
+
+  character = GET_UINT32 (cache->buffer, offset);
+  mime_offset = GET_UINT32 (cache->buffer, offset + 4);
+  n_children = GET_UINT32 (cache->buffer, offset + 8);
+  child_offset = GET_UINT32 (cache->buffer, offset + 12);
+  for (i = 0; i < depth; i++)
+    printf (" ");
+  printf ("%c", character);
+  if (mime_offset)
+    printf (" - %s", cache->buffer + mime_offset);
+  printf ("\n");
+  if (child_offset)
+  {
+    for (i = 0; i < n_children; i++)
+      dump_glob_node (cache, child_offset + 20 * i, depth + 1);
+  }
+}
+
+void
+_xdg_mime_cache_glob_dump (void)
+{
+  int i, j;
+  for (i = 0; _caches[i]; i++)
+  {
+    XdgMimeCache *cache = _caches[i];
+    xdg_uint32_t list_offset;
+    xdg_uint32_t n_entries;
+    xdg_uint32_t offset;
+    list_offset = GET_UINT32 (cache->buffer, 16);
+    n_entries = GET_UINT32 (cache->buffer, list_offset);
+    offset = GET_UINT32 (cache->buffer, list_offset + 4);
+    for (j = 0; j < n_entries; j++)
+	    dump_glob_node (cache, offset + 20 * j, 0);
+  }
+}
+
+
diff --git a/gio/xdgmime/xdgmimecache.h b/gio/xdgmime/xdgmimecache.h
new file mode 100644
index 0000000..27f42d0
--- /dev/null
+++ b/gio/xdgmime/xdgmimecache.h
@@ -0,0 +1,81 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimecache.h: Private file.  Datastructure for mmapped caches.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2005  Matthias Clasen <mclasen@redhat.com>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_CACHE_H__
+#define __XDG_MIME_CACHE_H__
+
+#include "xdgmime.h"
+
+typedef struct _XdgMimeCache XdgMimeCache;
+
+#ifdef XDG_PREFIX
+#define _xdg_mime_cache_new_from_file                 XDG_RESERVED_ENTRY(cache_new_from_file)
+#define _xdg_mime_cache_ref                           XDG_RESERVED_ENTRY(cache_ref)
+#define _xdg_mime_cache_unref                         XDG_RESERVED_ENTRY(cache_unref)
+#define _xdg_mime_cache_get_max_buffer_extents        XDG_RESERVED_ENTRY(cache_get_max_buffer_extents)
+#define _xdg_mime_cache_get_mime_type_for_data        XDG_RESERVED_ENTRY(cache_get_mime_type_for_data)
+#define _xdg_mime_cache_get_mime_type_for_file        XDG_RESERVED_ENTRY(cache_get_mime_type_for_file)
+#define _xdg_mime_cache_get_mime_type_from_file_name  XDG_RESERVED_ENTRY(cache_get_mime_type_from_file_name)
+#define _xdg_mime_cache_get_mime_types_from_file_name XDG_RESERVED_ENTRY(cache_get_mime_types_from_file_name)
+#define _xdg_mime_cache_list_mime_parents             XDG_RESERVED_ENTRY(cache_list_mime_parents)
+#define _xdg_mime_cache_mime_type_subclass            XDG_RESERVED_ENTRY(cache_mime_type_subclass)
+#define _xdg_mime_cache_unalias_mime_type             XDG_RESERVED_ENTRY(cache_unalias_mime_type)
+#define _xdg_mime_cache_get_icon                      XDG_RESERVED_ENTRY(cache_get_icon)
+#define _xdg_mime_cache_get_generic_icon              XDG_RESERVED_ENTRY(cache_get_generic_icon)
+#define _xdg_mime_cache_glob_dump                     XDG_RESERVED_ENTRY(cache_glob_dump)
+#endif
+
+extern XdgMimeCache **_caches;
+
+XdgMimeCache *_xdg_mime_cache_new_from_file (const char   *file_name);
+XdgMimeCache *_xdg_mime_cache_ref           (XdgMimeCache *cache);
+void          _xdg_mime_cache_unref         (XdgMimeCache *cache);
+
+
+const char  *_xdg_mime_cache_get_mime_type_for_data       (const void *data,
+		 				           size_t      len,
+							   int        *result_prio);
+const char  *_xdg_mime_cache_get_mime_type_for_file       (const char  *file_name,
+							   struct stat *statbuf);
+int          _xdg_mime_cache_get_mime_types_from_file_name (const char *file_name,
+							    const char  *mime_types[],
+							    int          n_mime_types);
+const char  *_xdg_mime_cache_get_mime_type_from_file_name (const char *file_name);
+int          _xdg_mime_cache_is_valid_mime_type           (const char *mime_type);
+int          _xdg_mime_cache_mime_type_equal              (const char *mime_a,
+						           const char *mime_b);
+int          _xdg_mime_cache_media_type_equal             (const char *mime_a,
+							   const char *mime_b);
+int          _xdg_mime_cache_mime_type_subclass           (const char *mime_a,
+							   const char *mime_b);
+char       **_xdg_mime_cache_list_mime_parents		  (const char *mime);
+const char  *_xdg_mime_cache_unalias_mime_type            (const char *mime);
+int          _xdg_mime_cache_get_max_buffer_extents       (void);
+const char  *_xdg_mime_cache_get_icon                     (const char *mime);
+const char  *_xdg_mime_cache_get_generic_icon             (const char *mime);
+void         _xdg_mime_cache_glob_dump                    (void);
+
+#endif /* __XDG_MIME_CACHE_H__ */
diff --git a/gio/xdgmime/xdgmimeglob.c b/gio/xdgmime/xdgmimeglob.c
new file mode 100644
index 0000000..22acd3e
--- /dev/null
+++ b/gio/xdgmime/xdgmimeglob.c
@@ -0,0 +1,603 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeglob.c: Private file.  Datastructure for storing the globs.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xdgmimeglob.h"
+#include "xdgmimeint.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <fnmatch.h>
+#include <ctype.h>
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+typedef struct XdgGlobHashNode XdgGlobHashNode;
+typedef struct XdgGlobList XdgGlobList;
+
+struct XdgGlobHashNode
+{
+  xdg_unichar_t character;
+  const char *mime_type;
+  int weight;
+  XdgGlobHashNode *next;
+  XdgGlobHashNode *child;
+};
+struct XdgGlobList
+{
+  const char *data;
+  const char *mime_type;
+  int weight;
+  XdgGlobList *next;
+};
+
+struct XdgGlobHash
+{
+  XdgGlobList *literal_list;
+  XdgGlobHashNode *simple_node;
+  XdgGlobList *full_list;
+};
+
+
+/* XdgGlobList
+ */
+static XdgGlobList *
+_xdg_glob_list_new (void)
+{
+  XdgGlobList *new_element;
+
+  new_element = calloc (1, sizeof (XdgGlobList));
+
+  return new_element;
+}
+
+/* Frees glob_list and all of it's children */
+static void
+_xdg_glob_list_free (XdgGlobList *glob_list)
+{
+  XdgGlobList *ptr, *next;
+
+  ptr = glob_list;
+
+  while (ptr != NULL)
+    {
+      next = ptr->next;
+
+      if (ptr->data)
+	free ((void *) ptr->data);
+      if (ptr->mime_type)
+	free ((void *) ptr->mime_type);
+      free (ptr);
+
+      ptr = next;
+    }
+}
+
+static XdgGlobList *
+_xdg_glob_list_append (XdgGlobList *glob_list,
+		       void        *data,
+		       const char  *mime_type,
+		       int          weight)
+{
+  XdgGlobList *new_element;
+  XdgGlobList *tmp_element;
+
+  new_element = _xdg_glob_list_new ();
+  new_element->data = data;
+  new_element->mime_type = mime_type;
+  new_element->weight = weight;
+  if (glob_list == NULL)
+    return new_element;
+
+  tmp_element = glob_list;
+  while (tmp_element->next != NULL)
+    tmp_element = tmp_element->next;
+
+  tmp_element->next = new_element;
+
+  return glob_list;
+}
+
+/* XdgGlobHashNode
+ */
+
+static XdgGlobHashNode *
+_xdg_glob_hash_node_new (void)
+{
+  XdgGlobHashNode *glob_hash_node;
+
+  glob_hash_node = calloc (1, sizeof (XdgGlobHashNode));
+
+  return glob_hash_node;
+}
+
+static void
+_xdg_glob_hash_node_dump (XdgGlobHashNode *glob_hash_node,
+			  int depth)
+{
+  int i;
+  for (i = 0; i < depth; i++)
+    printf (" ");
+
+  printf ("%c", (char)glob_hash_node->character);
+  if (glob_hash_node->mime_type)
+    printf (" - %s %d\n", glob_hash_node->mime_type, glob_hash_node->weight);
+  else
+    printf ("\n");
+  if (glob_hash_node->child)
+    _xdg_glob_hash_node_dump (glob_hash_node->child, depth + 1);
+  if (glob_hash_node->next)
+    _xdg_glob_hash_node_dump (glob_hash_node->next, depth);
+}
+
+static XdgGlobHashNode *
+_xdg_glob_hash_insert_ucs4 (XdgGlobHashNode *glob_hash_node,
+			    xdg_unichar_t   *text,
+			    const char      *mime_type,
+			    int              weight)
+{
+  XdgGlobHashNode *node;
+  xdg_unichar_t character;
+
+  character = text[0];
+
+  if ((glob_hash_node == NULL) ||
+      (character < glob_hash_node->character))
+    {
+      node = _xdg_glob_hash_node_new ();
+      node->character = character;
+      node->next = glob_hash_node;
+      glob_hash_node = node;
+    }
+  else if (character == glob_hash_node->character)
+    {
+      node = glob_hash_node;
+    }
+  else
+    {
+      XdgGlobHashNode *prev_node;
+      int found_node = FALSE;
+
+      /* Look for the first character of text in glob_hash_node, and insert it if we
+       * have to.*/
+      prev_node = glob_hash_node;
+      node = prev_node->next;
+
+      while (node != NULL)
+	{
+	  if (character < node->character)
+	    {
+	      node = _xdg_glob_hash_node_new ();
+	      node->character = character;
+	      node->next = prev_node->next;
+	      prev_node->next = node;
+
+	      found_node = TRUE;
+	      break;
+	    }
+	  else if (character == node->character)
+	    {
+	      found_node = TRUE;
+	      break;
+	    }
+	  prev_node = node;
+	  node = node->next;
+	}
+
+      if (! found_node)
+	{
+	  node = _xdg_glob_hash_node_new ();
+	  node->character = character;
+	  node->next = prev_node->next;
+	  prev_node->next = node;
+	}
+    }
+
+  text++;
+  if (*text == 0)
+    {
+      if (node->mime_type)
+	{
+	  if (strcmp (node->mime_type, mime_type))
+	    {
+	      XdgGlobHashNode *child;
+	      int found_node = FALSE;
+	      
+	      child = node->child;
+	      while (child && child->character == 0)
+		{
+		  if (strcmp (child->mime_type, mime_type) == 0)
+		    {
+		      found_node = TRUE;
+		      break;
+		    }
+		  child = child->next;
+		}
+
+	      if (!found_node)
+		{
+		  child = _xdg_glob_hash_node_new ();
+		  child->character = 0;
+		  child->mime_type = strdup (mime_type);
+		  child->weight = weight;
+		  child->child = NULL;
+		  child->next = node->child;
+		  node->child = child;
+		}
+	    }
+	}
+      else
+	{
+	  node->mime_type = strdup (mime_type);
+	  node->weight = weight;
+	}
+    }
+  else
+    {
+      node->child = _xdg_glob_hash_insert_ucs4 (node->child, text, mime_type, weight);
+    }
+  return glob_hash_node;
+}
+
+/* glob must be valid UTF-8 */
+static XdgGlobHashNode *
+_xdg_glob_hash_insert_text (XdgGlobHashNode *glob_hash_node,
+			    const char      *text,
+			    const char      *mime_type,
+			    int              weight)
+{
+  XdgGlobHashNode *node;
+  xdg_unichar_t *unitext;
+  int len;
+
+  unitext = _xdg_convert_to_ucs4 (text, &len);
+  _xdg_reverse_ucs4 (unitext, len);
+  node = _xdg_glob_hash_insert_ucs4 (glob_hash_node, unitext, mime_type, weight);
+  free (unitext);
+  return node;
+}
+
+typedef struct {
+  const char *mime;
+  int weight;
+} MimeWeight;
+
+static int
+_xdg_glob_hash_node_lookup_file_name (XdgGlobHashNode *glob_hash_node,
+				      const char      *file_name,
+				      int              len,
+				      int              ignore_case,
+				      MimeWeight       mime_types[],
+				      int              n_mime_types)
+{
+  int n;
+  XdgGlobHashNode *node;
+  xdg_unichar_t character;
+
+  if (glob_hash_node == NULL)
+    return 0;
+
+  character = file_name[len - 1];
+  if (ignore_case)
+    character = tolower(character);
+
+  for (node = glob_hash_node; node && character >= node->character; node = node->next)
+    {
+      if (character == node->character)
+        {
+          len--;
+          n = 0;
+          if (len > 0) 
+	    {
+	      n = _xdg_glob_hash_node_lookup_file_name (node->child,
+							file_name,
+							len,
+							ignore_case,
+							mime_types,
+							n_mime_types);
+	    }
+	  if (n == 0)
+	    {
+              if (node->mime_type)
+                {
+	          mime_types[n].mime = node->mime_type;
+		  mime_types[n].weight = node->weight;
+		  n++; 
+                }
+	      node = node->child;
+	      while (n < n_mime_types && node && node->character == 0)
+		{
+                  if (node->mime_type)
+		    {
+		      mime_types[n].mime = node->mime_type;
+		      mime_types[n].weight = node->weight;
+		      n++;
+		    }
+		  node = node->next;
+		}
+	    }
+	  return n;
+	}
+    }
+
+  return 0;
+}
+
+static int compare_mime_weight (const void *a, const void *b)
+{
+  const MimeWeight *aa = (const MimeWeight *)a;
+  const MimeWeight *bb = (const MimeWeight *)b;
+
+  return aa->weight - bb->weight;
+}
+
+int
+_xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash,
+				 const char  *file_name,
+				 const char  *mime_types[],
+				 int          n_mime_types)
+{
+  XdgGlobList *list;
+  int i, n;
+  MimeWeight mimes[10];
+  int n_mimes = 10;
+  xdg_unichar_t *ucs4;
+  int len;
+
+  /* First, check the literals */
+
+  assert (file_name != NULL && n_mime_types > 0);
+
+  n = 0;
+
+  for (list = glob_hash->literal_list; list; list = list->next)
+    {
+      if (strcmp ((const char *)list->data, file_name) == 0)
+	{
+	  mime_types[0] = list->mime_type;
+	  return 1;
+	}
+    }
+
+  len = strlen (file_name);
+  n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, file_name, len, FALSE,
+					    mimes, n_mimes);
+  if (n == 0)
+    n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, file_name, len, TRUE,
+					      mimes, n_mimes);
+
+  if (n == 0)
+    {
+      for (list = glob_hash->full_list; list && n < n_mime_types; list = list->next)
+        {
+          if (fnmatch ((const char *)list->data, file_name, 0) == 0)
+	    {
+	      mimes[n].mime = list->mime_type;
+	      mimes[n].weight = list->weight;
+	      n++;
+	    }
+        }
+    }
+
+  qsort (mimes, n, sizeof (MimeWeight), compare_mime_weight);
+
+  if (n_mime_types < n)
+    n = n_mime_types;
+
+  for (i = 0; i < n; i++)
+    mime_types[i] = mimes[i].mime;
+
+  return n;
+}
+
+
+
+/* XdgGlobHash
+ */
+
+XdgGlobHash *
+_xdg_glob_hash_new (void)
+{
+  XdgGlobHash *glob_hash;
+
+  glob_hash = calloc (1, sizeof (XdgGlobHash));
+
+  return glob_hash;
+}
+
+
+static void
+_xdg_glob_hash_free_nodes (XdgGlobHashNode *node)
+{
+  if (node)
+    {
+      if (node->child)
+       _xdg_glob_hash_free_nodes (node->child);
+      if (node->next)
+       _xdg_glob_hash_free_nodes (node->next);
+      if (node->mime_type)
+	free ((void *) node->mime_type);
+      free (node);
+    }
+}
+
+void
+_xdg_glob_hash_free (XdgGlobHash *glob_hash)
+{
+  _xdg_glob_list_free (glob_hash->literal_list);
+  _xdg_glob_list_free (glob_hash->full_list);
+  _xdg_glob_hash_free_nodes (glob_hash->simple_node);
+  free (glob_hash);
+}
+
+XdgGlobType
+_xdg_glob_determine_type (const char *glob)
+{
+  const char *ptr;
+  int maybe_in_simple_glob = FALSE;
+  int first_char = TRUE;
+
+  ptr = glob;
+
+  while (*ptr != '\0')
+    {
+      if (*ptr == '*' && first_char)
+	maybe_in_simple_glob = TRUE;
+      else if (*ptr == '\\' || *ptr == '[' || *ptr == '?' || *ptr == '*')
+	  return XDG_GLOB_FULL;
+
+      first_char = FALSE;
+      ptr = _xdg_utf8_next_char (ptr);
+    }
+  if (maybe_in_simple_glob)
+    return XDG_GLOB_SIMPLE;
+  else
+    return XDG_GLOB_LITERAL;
+}
+
+/* glob must be valid UTF-8 */
+void
+_xdg_glob_hash_append_glob (XdgGlobHash *glob_hash,
+			    const char  *glob,
+			    const char  *mime_type,
+			    int          weight)
+{
+  XdgGlobType type;
+
+  assert (glob_hash != NULL);
+  assert (glob != NULL);
+
+  type = _xdg_glob_determine_type (glob);
+
+  switch (type)
+    {
+    case XDG_GLOB_LITERAL:
+      glob_hash->literal_list = _xdg_glob_list_append (glob_hash->literal_list, strdup (glob), strdup (mime_type), weight);
+      break;
+    case XDG_GLOB_SIMPLE:
+      glob_hash->simple_node = _xdg_glob_hash_insert_text (glob_hash->simple_node, glob + 1, mime_type, weight);
+      break;
+    case XDG_GLOB_FULL:
+      glob_hash->full_list = _xdg_glob_list_append (glob_hash->full_list, strdup (glob), strdup (mime_type), weight);
+      break;
+    }
+}
+
+void
+_xdg_glob_hash_dump (XdgGlobHash *glob_hash)
+{
+  XdgGlobList *list;
+  printf ("LITERAL STRINGS\n");
+  if (!glob_hash || glob_hash->literal_list == NULL)
+    {
+      printf ("    None\n");
+    }
+  else
+    {
+      for (list = glob_hash->literal_list; list; list = list->next)
+	printf ("    %s - %s %d\n", (char *)list->data, list->mime_type, list->weight);
+    }
+  printf ("\nSIMPLE GLOBS\n");
+  if (!glob_hash || glob_hash->simple_node == NULL)
+    {
+      printf ("    None\n");
+    }
+  else
+    {
+      _xdg_glob_hash_node_dump (glob_hash->simple_node, 4);
+    }
+
+  printf ("\nFULL GLOBS\n");
+  if (!glob_hash || glob_hash->full_list == NULL)
+    {
+      printf ("    None\n");
+    }
+  else
+    {
+      for (list = glob_hash->full_list; list; list = list->next)
+	printf ("    %s - %s %d\n", (char *)list->data, list->mime_type, list->weight);
+    }
+}
+
+
+void
+_xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash,
+			       const char  *file_name)
+{
+  FILE *glob_file;
+  char line[255];
+
+  glob_file = fopen (file_name, "r");
+
+  if (glob_file == NULL)
+    return;
+
+  /* FIXME: Not UTF-8 safe.  Doesn't work if lines are greater than 255 chars.
+   * Blah */
+  while (fgets (line, 255, glob_file) != NULL)
+    {
+      char *colon, *colon2;
+      char *mimetype, *glob;
+      int weight;
+
+      if (line[0] == '#')
+	continue;
+
+      colon = strchr (line, ':');
+      if (colon == NULL)
+	continue;
+      *(colon++) = '\0';
+      colon[strlen (colon) -1] = '\0';
+      colon2 = strchr (colon, ':');
+      if (colon2) 
+        {
+          *(colon2++) = '\000';
+          weight = atoi (line);
+          mimetype = colon;
+          glob = colon2;
+        }
+      else 
+        {
+          weight = 50;
+          mimetype = line;
+          glob = colon;
+        }
+      _xdg_glob_hash_append_glob (glob_hash, glob, mimetype, weight);
+    }
+
+  fclose (glob_file);
+}
diff --git a/gio/xdgmime/xdgmimeglob.h b/gio/xdgmime/xdgmimeglob.h
new file mode 100644
index 0000000..df8dc79
--- /dev/null
+++ b/gio/xdgmime/xdgmimeglob.h
@@ -0,0 +1,68 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeglob.h: Private file.  Datastructure for storing the globs.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_GLOB_H__
+#define __XDG_MIME_GLOB_H__
+
+#include "xdgmime.h"
+
+typedef struct XdgGlobHash XdgGlobHash;
+
+typedef enum
+{
+  XDG_GLOB_LITERAL, /* Makefile */
+  XDG_GLOB_SIMPLE,  /* *.gif */
+  XDG_GLOB_FULL     /* x*.[ch] */
+} XdgGlobType;
+
+  
+#ifdef XDG_PREFIX
+#define _xdg_mime_glob_read_from_file         XDG_RESERVED_ENTRY(glob_read_from_file)
+#define _xdg_glob_hash_new                    XDG_RESERVED_ENTRY(hash_new)
+#define _xdg_glob_hash_free                   XDG_RESERVED_ENTRY(hash_free)
+#define _xdg_glob_hash_lookup_file_name       XDG_RESERVED_ENTRY(hash_lookup_file_name)
+#define _xdg_glob_hash_append_glob            XDG_RESERVED_ENTRY(hash_append_glob)
+#define _xdg_glob_determine_type              XDG_RESERVED_ENTRY(determine_type)
+#define _xdg_glob_hash_dump                   XDG_RESERVED_ENTRY(hash_dump)
+#endif
+
+void         _xdg_mime_glob_read_from_file   (XdgGlobHash *glob_hash,
+					      const char  *file_name);
+XdgGlobHash *_xdg_glob_hash_new              (void);
+void         _xdg_glob_hash_free             (XdgGlobHash *glob_hash);
+int          _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash,
+					      const char  *text,
+					      const char  *mime_types[],
+					      int          n_mime_types);
+void         _xdg_glob_hash_append_glob      (XdgGlobHash *glob_hash,
+					      const char  *glob,
+					      const char  *mime_type,
+					      int          weight);
+XdgGlobType  _xdg_glob_determine_type        (const char  *glob);
+void         _xdg_glob_hash_dump             (XdgGlobHash *glob_hash);
+
+#endif /* __XDG_MIME_GLOB_H__ */
diff --git a/gio/xdgmime/xdgmimeicon.c b/gio/xdgmime/xdgmimeicon.c
new file mode 100644
index 0000000..16db843
--- /dev/null
+++ b/gio/xdgmime/xdgmimeicon.c
@@ -0,0 +1,183 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeicon.c: Private file.  Datastructure for storing the aliases.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2008  Red Hat, Inc.
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xdgmimeicon.h"
+#include "xdgmimeint.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <fnmatch.h>
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+typedef struct XdgIcon XdgIcon;
+
+struct XdgIcon 
+{
+  char *mime_type;
+  char *icon_name;
+};
+
+struct XdgIconList
+{
+  struct XdgIcon *icons;
+  int n_icons;
+};
+
+XdgIconList *
+_xdg_mime_icon_list_new (void)
+{
+  XdgIconList *list;
+
+  list = malloc (sizeof (XdgIconList));
+
+  list->icons = NULL;
+  list->n_icons = 0;
+
+  return list;
+}
+
+void         
+_xdg_mime_icon_list_free (XdgIconList *list)
+{
+  int i;
+
+  if (list->icons)
+    {
+      for (i = 0; i < list->n_icons; i++)
+	{
+	  free (list->icons[i].mime_type);
+	  free (list->icons[i].icon_name);
+	}
+      free (list->icons);
+    }
+  free (list);
+}
+
+static int
+icon_entry_cmp (const void *v1, const void *v2)
+{
+  return strcmp (((XdgIcon *)v1)->mime_type, ((XdgIcon *)v2)->mime_type);
+}
+
+const char  *
+_xdg_mime_icon_list_lookup (XdgIconList *list,
+			    const char  *mime_type)
+{
+  XdgIcon *entry;
+  XdgIcon key;
+
+  if (list->n_icons > 0)
+    {
+      key.mime_type = (char *)mime_type;
+      key.icon_name = NULL;
+
+      entry = bsearch (&key, list->icons, list->n_icons,
+		       sizeof (XdgIcon), icon_entry_cmp);
+      if (entry)
+        return entry->icon_name;
+    }
+
+  return NULL;
+}
+
+void
+_xdg_mime_icon_read_from_file (XdgIconList *list,
+			       const char   *file_name)
+{
+  FILE *file;
+  char line[255];
+  int alloc;
+
+  file = fopen (file_name, "r");
+
+  if (file == NULL)
+    return;
+
+  /* FIXME: Not UTF-8 safe.  Doesn't work if lines are greater than 255 chars.
+   * Blah */
+  alloc = list->n_icons + 16;
+  list->icons = realloc (list->icons, alloc * sizeof (XdgIcon));
+  while (fgets (line, 255, file) != NULL)
+    {
+      char *sep;
+      if (line[0] == '#')
+	continue;
+
+      sep = strchr (line, ':');
+      if (sep == NULL)
+	continue;
+      *(sep++) = '\000';
+      sep[strlen (sep) -1] = '\000';
+      if (list->n_icons == alloc)
+	{
+	  alloc <<= 1;
+	  list->icons = realloc (list->icons, 
+				   alloc * sizeof (XdgIcon));
+	}
+      list->icons[list->n_icons].mime_type = strdup (line);
+      list->icons[list->n_icons].icon_name = strdup (sep);
+      list->n_icons++;
+    }
+  list->icons = realloc (list->icons, 
+			   list->n_icons * sizeof (XdgIcon));
+
+  fclose (file);  
+  
+  if (list->n_icons > 1)
+    qsort (list->icons, list->n_icons, 
+           sizeof (XdgIcon), icon_entry_cmp);
+}
+
+
+void
+_xdg_mime_icon_list_dump (XdgIconList *list)
+{
+  int i;
+
+  if (list->icons)
+    {
+      for (i = 0; i < list->n_icons; i++)
+	{
+	  printf ("%s %s\n", 
+		  list->icons[i].mime_type,
+		  list->icons[i].icon_name);
+	}
+    }
+}
+
+
diff --git a/gio/xdgmime/xdgmimeicon.h b/gio/xdgmime/xdgmimeicon.h
new file mode 100644
index 0000000..b5f2583
--- /dev/null
+++ b/gio/xdgmime/xdgmimeicon.h
@@ -0,0 +1,50 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeicon.h: Private file.  Datastructure for storing the aliases.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2008  Red Hat, Inc.
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_ICON_H__
+#define __XDG_MIME_ICON_H__
+
+#include "xdgmime.h"
+
+typedef struct XdgIconList XdgIconList;
+
+#ifdef XDG_PREFIX
+#define _xdg_mime_icon_read_from_file        XDG_ENTRY(icon_read_from_file)
+#define _xdg_mime_icon_list_new              XDG_ENTRY(icon_list_new)
+#define _xdg_mime_icon_list_free             XDG_ENTRY(icon_list_free)
+#define _xdg_mime_icon_list_lookup           XDG_ENTRY(icon_list_lookup)
+#define _xdg_mime_icon_list_dump             XDG_ENTRY(icon_list_dump)
+#endif
+
+void          _xdg_mime_icon_read_from_file (XdgIconList *list,
+					    const char   *file_name);
+XdgIconList  *_xdg_mime_icon_list_new       (void);
+void          _xdg_mime_icon_list_free      (XdgIconList *list);
+const char   *_xdg_mime_icon_list_lookup    (XdgIconList *list,
+					     const char  *mime);
+void          _xdg_mime_icon_list_dump      (XdgIconList *list);
+
+#endif /* __XDG_MIME_ICON_H__ */
diff --git a/gio/xdgmime/xdgmimeint.c b/gio/xdgmime/xdgmimeint.c
new file mode 100644
index 0000000..b2aa956
--- /dev/null
+++ b/gio/xdgmime/xdgmimeint.c
@@ -0,0 +1,191 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeint.c: Internal defines and functions.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xdgmimeint.h"
+#include <ctype.h>
+#include <string.h>
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+static const char _xdg_utf8_skip_data[256] = {
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1
+};
+
+const char * const _xdg_utf8_skip = _xdg_utf8_skip_data;
+
+
+
+/* Returns the number of unprocessed characters. */
+xdg_unichar_t
+_xdg_utf8_to_ucs4(const char *source)
+{
+  xdg_unichar_t ucs32;
+  if( ! ( *source & 0x80 ) )
+    {
+      ucs32 = *source;
+    }
+  else
+    {
+      int bytelength = 0;
+      xdg_unichar_t result;
+      if ( ! (*source & 0x40) )
+	{
+	  ucs32 = *source;
+	}
+      else
+	{
+	  if ( ! (*source & 0x20) )
+	    {
+	      result = *source++ & 0x1F;
+	      bytelength = 2;
+	    }
+	  else if ( ! (*source & 0x10) )
+	    {
+	      result = *source++ & 0x0F;
+	      bytelength = 3;
+	    }
+	  else if ( ! (*source & 0x08) )
+	    {
+	      result = *source++ & 0x07;
+	      bytelength = 4;
+	    }
+	  else if ( ! (*source & 0x04) )
+	    {
+	      result = *source++ & 0x03;
+	      bytelength = 5;
+	    }
+	  else if ( ! (*source & 0x02) )
+	    {
+	      result = *source++ & 0x01;
+	      bytelength = 6;
+	    }
+	  else
+	    {
+	      result = *source++;
+	      bytelength = 1;
+	    }
+
+	  for ( bytelength --; bytelength > 0; bytelength -- )
+	    {
+	      result <<= 6;
+	      result |= *source++ & 0x3F;
+	    }
+	  ucs32 = result;
+	}
+    }
+  return ucs32;
+}
+
+
+/* hullo.  this is great code.  don't rewrite it */
+
+xdg_unichar_t
+_xdg_ucs4_to_lower (xdg_unichar_t source)
+{
+  /* FIXME: Do a real to_upper sometime */
+  /* CaseFolding-3.2.0.txt has a table of rules. */
+  if ((source & 0xFF) == source)
+    return (xdg_unichar_t) tolower ((unsigned char) source);
+  return source;
+}
+
+int
+_xdg_utf8_validate (const char *source)
+{
+  /* FIXME: actually write */
+  return TRUE;
+}
+
+const char *
+_xdg_get_base_name (const char *file_name)
+{
+  const char *base_name;
+
+  if (file_name == NULL)
+    return NULL;
+
+  base_name = strrchr (file_name, '/');
+
+  if (base_name == NULL)
+    return file_name;
+  else
+    return base_name + 1;
+}
+
+xdg_unichar_t *
+_xdg_convert_to_ucs4 (const char *source, int *len)
+{
+  xdg_unichar_t *out;
+  int i;
+  const char *p;
+
+  out = malloc (sizeof (xdg_unichar_t) * (strlen (source) + 1));
+
+  p = source;
+  i = 0;
+  while (*p) 
+    {
+      out[i++] = _xdg_utf8_to_ucs4 (p);
+      p = _xdg_utf8_next_char (p); 
+    }
+  out[i] = 0;
+  *len = i;
+ 
+  return out;
+}
+
+void
+_xdg_reverse_ucs4 (xdg_unichar_t *source, int len)
+{
+  xdg_unichar_t c;
+  int i;
+
+  for (i = 0; i < len - i - 1; i++) 
+    {
+      c = source[i]; 
+      source[i] = source[len - i - 1];
+      source[len - i - 1] = c;
+    }
+}
+
diff --git a/gio/xdgmime/xdgmimeint.h b/gio/xdgmime/xdgmimeint.h
new file mode 100644
index 0000000..232c808
--- /dev/null
+++ b/gio/xdgmime/xdgmimeint.h
@@ -0,0 +1,77 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeint.h: Internal defines and functions.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_INT_H__
+#define __XDG_MIME_INT_H__
+
+#include "xdgmime.h"
+
+
+#ifndef	FALSE
+#define	FALSE (0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE (!FALSE)
+#endif
+
+/* FIXME: Needs to be configure check */
+typedef unsigned int   xdg_unichar_t;
+typedef unsigned char  xdg_uchar8_t;
+typedef unsigned short xdg_uint16_t;
+typedef unsigned int   xdg_uint32_t;
+
+#ifdef XDG_PREFIX
+#define _xdg_utf8_skip       XDG_RESERVED_ENTRY(utf8_skip)
+#define _xdg_utf8_to_ucs4    XDG_RESERVED_ENTRY(utf8_to_ucs4)
+#define _xdg_ucs4_to_lower   XDG_RESERVED_ENTRY(ucs4_to_lower)
+#define _xdg_utf8_validate   XDG_RESERVED_ENTRY(utf8_validate)
+#define _xdg_get_base_name   XDG_RESERVED_ENTRY(get_base_name)
+#define _xdg_convert_to_ucs4 XDG_RESERVED_ENTRY(convert_to_ucs4)
+#define _xdg_reverse_ucs4    XDG_RESERVED_ENTRY(reverse_ucs4)
+#endif
+
+#define SWAP_BE16_TO_LE16(val) (xdg_uint16_t)(((xdg_uint16_t)(val) << 8)|((xdg_uint16_t)(val) >> 8))
+
+#define SWAP_BE32_TO_LE32(val) (xdg_uint32_t)((((xdg_uint32_t)(val) & 0xFF000000U) >> 24) |	\
+					      (((xdg_uint32_t)(val) & 0x00FF0000U) >> 8) |	\
+					      (((xdg_uint32_t)(val) & 0x0000FF00U) << 8) |	\
+					      (((xdg_uint32_t)(val) & 0x000000FFU) << 24))
+/* UTF-8 utils
+ */
+extern const char *const _xdg_utf8_skip;
+#define _xdg_utf8_next_char(p) (char *)((p) + _xdg_utf8_skip[*(unsigned char *)(p)])
+#define _xdg_utf8_char_size(p) (int) (_xdg_utf8_skip[*(unsigned char *)(p)])
+
+xdg_unichar_t  _xdg_utf8_to_ucs4  (const char    *source);
+xdg_unichar_t  _xdg_ucs4_to_lower (xdg_unichar_t  source);
+int            _xdg_utf8_validate (const char    *source);
+xdg_unichar_t *_xdg_convert_to_ucs4 (const char *source, int *len);
+void           _xdg_reverse_ucs4 (xdg_unichar_t *source, int len);
+const char    *_xdg_get_base_name (const char    *file_name);
+
+#endif /* __XDG_MIME_INT_H__ */
diff --git a/gio/xdgmime/xdgmimemagic.c b/gio/xdgmime/xdgmimemagic.c
new file mode 100644
index 0000000..ae1093a
--- /dev/null
+++ b/gio/xdgmime/xdgmimemagic.c
@@ -0,0 +1,813 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimemagic.: Private file.  Datastructure for storing magic files.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
+#include "xdgmimemagic.h"
+#include "xdgmimeint.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+#if !defined getc_unlocked && !defined HAVE_GETC_UNLOCKED
+# define getc_unlocked(fp) getc (fp)
+#endif
+
+typedef struct XdgMimeMagicMatch XdgMimeMagicMatch;
+typedef struct XdgMimeMagicMatchlet XdgMimeMagicMatchlet;
+
+typedef enum
+{
+  XDG_MIME_MAGIC_SECTION,
+  XDG_MIME_MAGIC_MAGIC,
+  XDG_MIME_MAGIC_ERROR,
+  XDG_MIME_MAGIC_EOF
+} XdgMimeMagicState;
+
+struct XdgMimeMagicMatch
+{
+  const char *mime_type;
+  int priority;
+  XdgMimeMagicMatchlet *matchlet;
+  XdgMimeMagicMatch *next;
+};
+
+
+struct XdgMimeMagicMatchlet
+{
+  int indent;
+  int offset;
+  unsigned int value_length;
+  unsigned char *value;
+  unsigned char *mask;
+  unsigned int range_length;
+  unsigned int word_size;
+  XdgMimeMagicMatchlet *next;
+};
+
+
+struct XdgMimeMagic
+{
+  XdgMimeMagicMatch *match_list;
+  int max_extent;
+};
+
+static XdgMimeMagicMatch *
+_xdg_mime_magic_match_new (void)
+{
+  return calloc (1, sizeof (XdgMimeMagicMatch));
+}
+
+
+static XdgMimeMagicMatchlet *
+_xdg_mime_magic_matchlet_new (void)
+{
+  XdgMimeMagicMatchlet *matchlet;
+
+  matchlet = malloc (sizeof (XdgMimeMagicMatchlet));
+
+  matchlet->indent = 0;
+  matchlet->offset = 0;
+  matchlet->value_length = 0;
+  matchlet->value = NULL;
+  matchlet->mask = NULL;
+  matchlet->range_length = 1;
+  matchlet->word_size = 1;
+  matchlet->next = NULL;
+
+  return matchlet;
+}
+
+
+static void
+_xdg_mime_magic_matchlet_free (XdgMimeMagicMatchlet *mime_magic_matchlet)
+{
+  if (mime_magic_matchlet)
+    {
+      if (mime_magic_matchlet->next)
+	_xdg_mime_magic_matchlet_free (mime_magic_matchlet->next);
+      if (mime_magic_matchlet->value)
+	free (mime_magic_matchlet->value);
+      if (mime_magic_matchlet->mask)
+	free (mime_magic_matchlet->mask);
+      free (mime_magic_matchlet);
+    }
+}
+
+
+/* Frees mime_magic_match and the remainder of its list
+ */
+static void
+_xdg_mime_magic_match_free (XdgMimeMagicMatch *mime_magic_match)
+{
+  XdgMimeMagicMatch *ptr, *next;
+
+  ptr = mime_magic_match;
+  while (ptr)
+    {
+      next = ptr->next;
+
+      if (ptr->mime_type)
+	free ((void *) ptr->mime_type);
+      if (ptr->matchlet)
+	_xdg_mime_magic_matchlet_free (ptr->matchlet);
+      free (ptr);
+
+      ptr = next;
+    }
+}
+
+/* Reads in a hunk of data until a newline character or a '\000' is hit.  The
+ * returned string is null terminated, and doesn't include the newline.
+ */
+static unsigned char *
+_xdg_mime_magic_read_to_newline (FILE *magic_file,
+				 int  *end_of_file)
+{
+  unsigned char *retval;
+  int c;
+  int len, pos;
+
+  len = 128;
+  pos = 0;
+  retval = malloc (len);
+  *end_of_file = FALSE;
+
+  while (TRUE)
+    {
+      c = getc_unlocked (magic_file);
+      if (c == EOF)
+	{
+	  *end_of_file = TRUE;
+	  break;
+	}
+      if (c == '\n' || c == '\000')
+	break;
+      retval[pos++] = (unsigned char) c;
+      if (pos % 128 == 127)
+	{
+	  len = len + 128;
+	  retval = realloc (retval, len);
+	}
+    }
+
+  retval[pos] = '\000';
+  return retval;
+}
+
+/* Returns the number read from the file, or -1 if no number could be read.
+ */
+static int
+_xdg_mime_magic_read_a_number (FILE *magic_file,
+			       int  *end_of_file)
+{
+  /* LONG_MAX is about 20 characters on my system */
+#define MAX_NUMBER_SIZE 30
+  char number_string[MAX_NUMBER_SIZE + 1];
+  int pos = 0;
+  int c;
+  long retval = -1;
+
+  while (TRUE)
+    {
+      c = getc_unlocked (magic_file);
+
+      if (c == EOF)
+	{
+	  *end_of_file = TRUE;
+	  break;
+	}
+      if (! isdigit (c))
+	{
+	  ungetc (c, magic_file);
+	  break;
+	}
+      number_string[pos] = (char) c;
+      pos++;
+      if (pos == MAX_NUMBER_SIZE)
+	break;
+    }
+  if (pos > 0)
+    {
+      number_string[pos] = '\000';
+      errno = 0;
+      retval = strtol (number_string, NULL, 10);
+
+      if ((retval < INT_MIN) || (retval > INT_MAX) || (errno != 0))
+	return -1;
+    }
+
+  return retval;
+}
+
+/* Headers are of the format:
+ * [<priority>:<mime-type>]
+ */
+static XdgMimeMagicState
+_xdg_mime_magic_parse_header (FILE *magic_file, XdgMimeMagicMatch *match)
+{
+  int c;
+  char *buffer;
+  char *end_ptr;
+  int end_of_file = 0;
+
+  assert (magic_file != NULL);
+  assert (match != NULL);
+
+  c = getc_unlocked (magic_file);
+  if (c == EOF)
+    return XDG_MIME_MAGIC_EOF;
+  if (c != '[')
+    return XDG_MIME_MAGIC_ERROR;
+
+  match->priority = _xdg_mime_magic_read_a_number (magic_file, &end_of_file);
+  if (end_of_file)
+    return XDG_MIME_MAGIC_EOF;
+  if (match->priority == -1)
+    return XDG_MIME_MAGIC_ERROR;
+
+  c = getc_unlocked (magic_file);
+  if (c == EOF)
+    return XDG_MIME_MAGIC_EOF;
+  if (c != ':')
+    return XDG_MIME_MAGIC_ERROR;
+
+  buffer = (char *)_xdg_mime_magic_read_to_newline (magic_file, &end_of_file);
+  if (end_of_file)
+    return XDG_MIME_MAGIC_EOF;
+
+  end_ptr = buffer;
+  while (*end_ptr != ']' && *end_ptr != '\000' && *end_ptr != '\n')
+    end_ptr++;
+  if (*end_ptr != ']')
+    {
+      free (buffer);
+      return XDG_MIME_MAGIC_ERROR;
+    }
+  *end_ptr = '\000';
+
+  match->mime_type = strdup (buffer);
+  free (buffer);
+
+  return XDG_MIME_MAGIC_MAGIC;
+}
+
+static XdgMimeMagicState
+_xdg_mime_magic_parse_error (FILE *magic_file)
+{
+  int c;
+
+  while (1)
+    {
+      c = getc_unlocked (magic_file);
+      if (c == EOF)
+	return XDG_MIME_MAGIC_EOF;
+      if (c == '\n')
+	return XDG_MIME_MAGIC_SECTION;
+    }
+}
+
+/* Headers are of the format:
+ * [ indent ] ">" start-offset "=" value
+ * [ "&" mask ] [ "~" word-size ] [ "+" range-length ] "\n"
+ */
+static XdgMimeMagicState
+_xdg_mime_magic_parse_magic_line (FILE              *magic_file,
+				  XdgMimeMagicMatch *match)
+{
+  XdgMimeMagicMatchlet *matchlet;
+  int c;
+  int end_of_file;
+  int indent = 0;
+  int bytes_read;
+
+  assert (magic_file != NULL);
+
+  /* Sniff the buffer to make sure it's a valid line */
+  c = getc_unlocked (magic_file);
+  if (c == EOF)
+    return XDG_MIME_MAGIC_EOF;
+  else if (c == '[')
+    {
+      ungetc (c, magic_file);
+      return XDG_MIME_MAGIC_SECTION;
+    }
+  else if (c == '\n')
+    return XDG_MIME_MAGIC_MAGIC;
+
+  /* At this point, it must be a digit or a '>' */
+  end_of_file = FALSE;
+  if (isdigit (c))
+    {
+      ungetc (c, magic_file);
+      indent = _xdg_mime_magic_read_a_number (magic_file, &end_of_file);
+      if (end_of_file)
+	return XDG_MIME_MAGIC_EOF;
+      if (indent == -1)
+	return XDG_MIME_MAGIC_ERROR;
+      c = getc_unlocked (magic_file);
+      if (c == EOF)
+	return XDG_MIME_MAGIC_EOF;
+    }
+
+  if (c != '>')
+    return XDG_MIME_MAGIC_ERROR;
+
+  matchlet = _xdg_mime_magic_matchlet_new ();
+  matchlet->indent = indent;
+  matchlet->offset = _xdg_mime_magic_read_a_number (magic_file, &end_of_file);
+  if (end_of_file)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_EOF;
+    }
+  if (matchlet->offset == -1)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_ERROR;
+    }
+  c = getc_unlocked (magic_file);
+  if (c == EOF)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_EOF;
+    }
+  else if (c != '=')
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_ERROR;
+    }
+
+  /* Next two bytes determine how long the value is */
+  matchlet->value_length = 0;
+  c = getc_unlocked (magic_file);
+  if (c == EOF)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_EOF;
+    }
+  matchlet->value_length = c & 0xFF;
+  matchlet->value_length = matchlet->value_length << 8;
+
+  c = getc_unlocked (magic_file);
+  if (c == EOF)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_EOF;
+    }
+  matchlet->value_length = matchlet->value_length + (c & 0xFF);
+
+  matchlet->value = malloc (matchlet->value_length);
+
+  /* OOM */
+  if (matchlet->value == NULL)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      return XDG_MIME_MAGIC_ERROR;
+    }
+  bytes_read = fread (matchlet->value, 1, matchlet->value_length, magic_file);
+  if (bytes_read != matchlet->value_length)
+    {
+      _xdg_mime_magic_matchlet_free (matchlet);
+      if (feof (magic_file))
+	return XDG_MIME_MAGIC_EOF;
+      else
+	return XDG_MIME_MAGIC_ERROR;
+    }
+
+  c = getc_unlocked (magic_file);
+  if (c == '&')
+    {
+      matchlet->mask = malloc (matchlet->value_length);
+      /* OOM */
+      if (matchlet->mask == NULL)
+	{
+	  _xdg_mime_magic_matchlet_free (matchlet);
+	  return XDG_MIME_MAGIC_ERROR;
+	}
+      bytes_read = fread (matchlet->mask, 1, matchlet->value_length, magic_file);
+      if (bytes_read != matchlet->value_length)
+	{
+	  _xdg_mime_magic_matchlet_free (matchlet);
+	  if (feof (magic_file))
+	    return XDG_MIME_MAGIC_EOF;
+	  else
+	    return XDG_MIME_MAGIC_ERROR;
+	}
+      c = getc_unlocked (magic_file);
+    }
+
+  if (c == '~')
+    {
+      matchlet->word_size = _xdg_mime_magic_read_a_number (magic_file, &end_of_file);
+      if (end_of_file)
+	{
+	  _xdg_mime_magic_matchlet_free (matchlet);
+	  return XDG_MIME_MAGIC_EOF;
+	}
+      if (matchlet->word_size != 0 &&
+	  matchlet->word_size != 1 &&
+	  matchlet->word_size != 2 &&
+	  matchlet->word_size != 4)
+	{
+	  _xdg_mime_magic_matchlet_free (matchlet);
+	  return XDG_MIME_MAGIC_ERROR;
+	}
+      c = getc_unlocked (magic_file);
+    }
+
+  if (c == '+')
+    {
+      matchlet->range_length = _xdg_mime_magic_read_a_number (magic_file, &end_of_file);
+      if (end_of_file)
+	{
+	  _xdg_mime_magic_matchlet_free (matchlet);
+	  return XDG_MIME_MAGIC_EOF;
+	}
+      if (matchlet->range_length == -1)
+	{
+	  _xdg_mime_magic_matchlet_free (matchlet);
+	  return XDG_MIME_MAGIC_ERROR;
+	}
+      c = getc_unlocked (magic_file);
+    }
+
+
+  if (c == '\n')
+    {
+      /* We clean up the matchlet, byte swapping if needed */
+      if (matchlet->word_size > 1)
+	{
+	  int i;
+	  if (matchlet->value_length % matchlet->word_size != 0)
+	    {
+	      _xdg_mime_magic_matchlet_free (matchlet);
+	      return XDG_MIME_MAGIC_ERROR;
+	    }
+	  /* FIXME: need to get this defined in a <config.h> style file */
+#if LITTLE_ENDIAN
+	  for (i = 0; i < matchlet->value_length; i = i + matchlet->word_size)
+	    {
+	      if (matchlet->word_size == 2)
+		*((xdg_uint16_t *) matchlet->value + i) = SWAP_BE16_TO_LE16 (*((xdg_uint16_t *) (matchlet->value + i)));
+	      else if (matchlet->word_size == 4)
+		*((xdg_uint32_t *) matchlet->value + i) = SWAP_BE32_TO_LE32 (*((xdg_uint32_t *) (matchlet->value + i)));
+	      if (matchlet->mask)
+		{
+		  if (matchlet->word_size == 2)
+		    *((xdg_uint16_t *) matchlet->mask + i) = SWAP_BE16_TO_LE16 (*((xdg_uint16_t *) (matchlet->mask + i)));
+		  else if (matchlet->word_size == 4)
+		    *((xdg_uint32_t *) matchlet->mask + i) = SWAP_BE32_TO_LE32 (*((xdg_uint32_t *) (matchlet->mask + i)));
+
+		}
+	    }
+#endif
+	}
+
+      matchlet->next = match->matchlet;
+      match->matchlet = matchlet;
+
+
+      return XDG_MIME_MAGIC_MAGIC;
+    }
+
+  _xdg_mime_magic_matchlet_free (matchlet);
+  if (c == EOF)
+    return XDG_MIME_MAGIC_EOF;
+
+  return XDG_MIME_MAGIC_ERROR;
+}
+
+static int
+_xdg_mime_magic_matchlet_compare_to_data (XdgMimeMagicMatchlet *matchlet,
+					  const void           *data,
+					  size_t                len)
+{
+  int i, j;
+  for (i = matchlet->offset; i < matchlet->offset + matchlet->range_length; i++)
+    {
+      int valid_matchlet = TRUE;
+
+      if (i + matchlet->value_length > len)
+	return FALSE;
+
+      if (matchlet->mask)
+	{
+	  for (j = 0; j < matchlet->value_length; j++)
+	    {
+	      if ((matchlet->value[j] & matchlet->mask[j]) !=
+		  ((((unsigned char *) data)[j + i]) & matchlet->mask[j]))
+		{
+		  valid_matchlet = FALSE;
+		  break;
+		}
+	    }
+	}
+      else
+	{
+	  for (j = 0; j <  matchlet->value_length; j++)
+	    {
+	      if (matchlet->value[j] != ((unsigned char *) data)[j + i])
+		{
+		  valid_matchlet = FALSE;
+		  break;
+		}
+	    }
+	}
+      if (valid_matchlet)
+	return TRUE;
+    }
+  return FALSE;
+}
+
+static int
+_xdg_mime_magic_matchlet_compare_level (XdgMimeMagicMatchlet *matchlet,
+					const void           *data,
+					size_t                len,
+					int                   indent)
+{
+  while ((matchlet != NULL) && (matchlet->indent == indent))
+    {
+      if (_xdg_mime_magic_matchlet_compare_to_data (matchlet, data, len))
+	{
+	  if ((matchlet->next == NULL) ||
+	      (matchlet->next->indent <= indent))
+	    return TRUE;
+
+	  if (_xdg_mime_magic_matchlet_compare_level (matchlet->next,
+						      data,
+						      len,
+						      indent + 1))
+	    return TRUE;
+	}
+
+      do
+	{
+	  matchlet = matchlet->next;
+	}
+      while (matchlet && matchlet->indent > indent);
+    }
+
+  return FALSE;
+}
+
+static int
+_xdg_mime_magic_match_compare_to_data (XdgMimeMagicMatch *match,
+				       const void        *data,
+				       size_t             len)
+{
+  return _xdg_mime_magic_matchlet_compare_level (match->matchlet, data, len, 0);
+}
+
+static void
+_xdg_mime_magic_insert_match (XdgMimeMagic      *mime_magic,
+			      XdgMimeMagicMatch *match)
+{
+  XdgMimeMagicMatch *list;
+
+  if (mime_magic->match_list == NULL)
+    {
+      mime_magic->match_list = match;
+      return;
+    }
+
+  if (match->priority > mime_magic->match_list->priority)
+    {
+      match->next = mime_magic->match_list;
+      mime_magic->match_list = match;
+      return;
+    }
+
+  list = mime_magic->match_list;
+  while (list->next != NULL)
+    {
+      if (list->next->priority < match->priority)
+	{
+	  match->next = list->next;
+	  list->next = match;
+	  return;
+	}
+      list = list->next;
+    }
+  list->next = match;
+  match->next = NULL;
+}
+
+XdgMimeMagic *
+_xdg_mime_magic_new (void)
+{
+  return calloc (1, sizeof (XdgMimeMagic));
+}
+
+void
+_xdg_mime_magic_free (XdgMimeMagic *mime_magic)
+{
+  if (mime_magic) {
+    _xdg_mime_magic_match_free (mime_magic->match_list);
+    free (mime_magic);
+  }
+}
+
+int
+_xdg_mime_magic_get_buffer_extents (XdgMimeMagic *mime_magic)
+{
+  return mime_magic->max_extent;
+}
+
+const char *
+_xdg_mime_magic_lookup_data (XdgMimeMagic *mime_magic,
+			     const void   *data,
+			     size_t        len,
+			     int           *result_prio,
+                             const char   *mime_types[],
+                             int           n_mime_types)
+{
+  XdgMimeMagicMatch *match;
+  const char *mime_type;
+  int n;
+  int prio;
+
+  prio = 0;
+  mime_type = NULL;
+  for (match = mime_magic->match_list; match; match = match->next)
+    {
+      if (_xdg_mime_magic_match_compare_to_data (match, data, len))
+	{
+	  prio = match->priority;
+	  mime_type = match->mime_type;
+	  break;
+	}
+      else 
+	{
+	  for (n = 0; n < n_mime_types; n++)
+	    {
+	      if (mime_types[n] && 
+		  _xdg_mime_mime_type_equal (mime_types[n], match->mime_type))
+		mime_types[n] = NULL;
+	    }
+	}
+    }
+
+  if (mime_type == NULL)
+    {
+      for (n = 0; n < n_mime_types; n++)
+	{
+	  if (mime_types[n])
+	    mime_type = mime_types[n];
+	}
+    }
+  
+  if (result_prio)
+    *result_prio = prio;
+
+  return mime_type;
+}
+
+static void
+_xdg_mime_update_mime_magic_extents (XdgMimeMagic *mime_magic)
+{
+  XdgMimeMagicMatch *match;
+  int max_extent = 0;
+
+  for (match = mime_magic->match_list; match; match = match->next)
+    {
+      XdgMimeMagicMatchlet *matchlet;
+
+      for (matchlet = match->matchlet; matchlet; matchlet = matchlet->next)
+	{
+	  int extent;
+
+	  extent = matchlet->value_length + matchlet->offset + matchlet->range_length;
+	  if (max_extent < extent)
+	    max_extent = extent;
+	}
+    }
+
+  mime_magic->max_extent = max_extent;
+}
+
+static XdgMimeMagicMatchlet *
+_xdg_mime_magic_matchlet_mirror (XdgMimeMagicMatchlet *matchlets)
+{
+  XdgMimeMagicMatchlet *new_list;
+  XdgMimeMagicMatchlet *tmp;
+
+  if ((matchlets == NULL) || (matchlets->next == NULL))
+    return matchlets;
+
+  new_list = NULL;
+  tmp = matchlets;
+  while (tmp != NULL)
+    {
+      XdgMimeMagicMatchlet *matchlet;
+
+      matchlet = tmp;
+      tmp = tmp->next;
+      matchlet->next = new_list;
+      new_list = matchlet;
+    }
+
+  return new_list;
+
+}
+
+static void
+_xdg_mime_magic_read_magic_file (XdgMimeMagic *mime_magic,
+				 FILE         *magic_file)
+{
+  XdgMimeMagicState state;
+  XdgMimeMagicMatch *match = NULL; /* Quiet compiler */
+
+  state = XDG_MIME_MAGIC_SECTION;
+
+  while (state != XDG_MIME_MAGIC_EOF)
+    {
+      switch (state)
+	{
+	case XDG_MIME_MAGIC_SECTION:
+	  match = _xdg_mime_magic_match_new ();
+	  state = _xdg_mime_magic_parse_header (magic_file, match);
+	  if (state == XDG_MIME_MAGIC_EOF || state == XDG_MIME_MAGIC_ERROR)
+	    _xdg_mime_magic_match_free (match);
+	  break;
+	case XDG_MIME_MAGIC_MAGIC:
+	  state = _xdg_mime_magic_parse_magic_line (magic_file, match);
+	  if (state == XDG_MIME_MAGIC_SECTION ||
+	      (state == XDG_MIME_MAGIC_EOF && match->mime_type))
+	    {
+	      match->matchlet = _xdg_mime_magic_matchlet_mirror (match->matchlet);
+	      _xdg_mime_magic_insert_match (mime_magic, match);
+	    }
+	  else if (state == XDG_MIME_MAGIC_EOF || state == XDG_MIME_MAGIC_ERROR)
+	    _xdg_mime_magic_match_free (match);
+	  break;
+	case XDG_MIME_MAGIC_ERROR:
+	  state = _xdg_mime_magic_parse_error (magic_file);
+	  break;
+	case XDG_MIME_MAGIC_EOF:
+	default:
+	  /* Make the compiler happy */
+	  assert (0);
+	}
+    }
+  _xdg_mime_update_mime_magic_extents (mime_magic);
+}
+
+void
+_xdg_mime_magic_read_from_file (XdgMimeMagic *mime_magic,
+				const char   *file_name)
+{
+  FILE *magic_file;
+  char header[12];
+
+  magic_file = fopen (file_name, "r");
+
+  if (magic_file == NULL)
+    return;
+
+  if (fread (header, 1, 12, magic_file) == 12)
+    {
+      if (memcmp ("MIME-Magic\0\n", header, 12) == 0)
+        _xdg_mime_magic_read_magic_file (mime_magic, magic_file);
+    }
+
+  fclose (magic_file);
+}
diff --git a/gio/xdgmime/xdgmimemagic.h b/gio/xdgmime/xdgmimemagic.h
new file mode 100644
index 0000000..35c8039
--- /dev/null
+++ b/gio/xdgmime/xdgmimemagic.h
@@ -0,0 +1,57 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimemagic.h: Private file.  Datastructure for storing the magic files.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2003  Red Hat, Inc.
+ * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_MAGIC_H__
+#define __XDG_MIME_MAGIC_H__
+
+#include <unistd.h>
+#include "xdgmime.h"
+typedef struct XdgMimeMagic XdgMimeMagic;
+
+#ifdef XDG_PREFIX
+#define _xdg_mime_glob_read_from_file             XDG_RESERVED_ENTRY(glob_read_from_file)
+#define _xdg_mime_magic_new                       XDG_RESERVED_ENTRY(magic_new)
+#define _xdg_mime_magic_read_from_file            XDG_RESERVED_ENTRY(magic_read_from_file)
+#define _xdg_mime_magic_free                      XDG_RESERVED_ENTRY(magic_free)
+#define _xdg_mime_magic_get_buffer_extents        XDG_RESERVED_ENTRY(magic_get_buffer_extents)
+#define _xdg_mime_magic_lookup_data               XDG_RESERVED_ENTRY(magic_lookup_data)
+#endif
+
+
+XdgMimeMagic *_xdg_mime_magic_new                (void);
+void          _xdg_mime_magic_read_from_file     (XdgMimeMagic *mime_magic,
+						  const char   *file_name);
+void          _xdg_mime_magic_free               (XdgMimeMagic *mime_magic);
+int           _xdg_mime_magic_get_buffer_extents (XdgMimeMagic *mime_magic);
+const char   *_xdg_mime_magic_lookup_data        (XdgMimeMagic *mime_magic,
+						  const void   *data,
+						  size_t        len,
+						  int          *result_prio,
+						  const char   *mime_types[],
+						  int           n_mime_types);
+
+#endif /* __XDG_MIME_MAGIC_H__ */
diff --git a/gio/xdgmime/xdgmimeparent.c b/gio/xdgmime/xdgmimeparent.c
new file mode 100644
index 0000000..52d3c0c
--- /dev/null
+++ b/gio/xdgmime/xdgmimeparent.c
@@ -0,0 +1,219 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimealias.c: Private file.  Datastructure for storing the hierarchy.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2004  Red Hat, Inc.
+ * Copyright (C) 2004  Matthias Clasen <mclasen@redhat.com>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xdgmimeparent.h"
+#include "xdgmimeint.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+#include <fnmatch.h>
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+typedef struct XdgMimeParents XdgMimeParents;
+
+struct XdgMimeParents
+{
+  char *mime;
+  char **parents;
+  int n_parents;
+};
+
+struct XdgParentList
+{
+  struct XdgMimeParents *parents;
+  int n_mimes;
+};
+
+XdgParentList *
+_xdg_mime_parent_list_new (void)
+{
+  XdgParentList *list;
+
+  list = malloc (sizeof (XdgParentList));
+
+  list->parents = NULL;
+  list->n_mimes = 0;
+
+  return list;
+}
+
+void         
+_xdg_mime_parent_list_free (XdgParentList *list)
+{
+  int i;
+  char **p;
+
+  if (list->parents)
+    {
+      for (i = 0; i < list->n_mimes; i++)
+	{
+	  for (p = list->parents[i].parents; *p; p++)
+	    free (*p);
+
+	  free (list->parents[i].parents);
+	  free (list->parents[i].mime);
+	}
+      free (list->parents);
+    }
+  free (list);
+}
+
+static int
+parent_entry_cmp (const void *v1, const void *v2)
+{
+  return strcmp (((XdgMimeParents *)v1)->mime, ((XdgMimeParents *)v2)->mime);
+}
+
+const char **
+_xdg_mime_parent_list_lookup (XdgParentList *list,
+			      const char    *mime)
+{
+  XdgMimeParents *entry;
+  XdgMimeParents key;
+
+  if (list->n_mimes > 0)
+    {
+      key.mime = (char *)mime;
+      key.parents = NULL;
+
+      entry = bsearch (&key, list->parents, list->n_mimes,
+		       sizeof (XdgMimeParents), &parent_entry_cmp);
+      if (entry)
+        return (const char **)entry->parents;
+    }
+
+  return NULL;
+}
+
+void
+_xdg_mime_parent_read_from_file (XdgParentList *list,
+				 const char    *file_name)
+{
+  FILE *file;
+  char line[255];
+  int i, alloc;
+  XdgMimeParents *entry;
+
+  file = fopen (file_name, "r");
+
+  if (file == NULL)
+    return;
+
+  /* FIXME: Not UTF-8 safe.  Doesn't work if lines are greater than 255 chars.
+   * Blah */
+  alloc = list->n_mimes + 16;
+  list->parents = realloc (list->parents, alloc * sizeof (XdgMimeParents));
+  while (fgets (line, 255, file) != NULL)
+    {
+      char *sep;
+      if (line[0] == '#')
+	continue;
+
+      sep = strchr (line, ' ');
+      if (sep == NULL)
+	continue;
+      *(sep++) = '\000';
+      sep[strlen (sep) -1] = '\000';
+      entry = NULL;
+      for (i = 0; i < list->n_mimes; i++)
+	{
+	  if (strcmp (list->parents[i].mime, line) == 0)
+	    {
+	      entry = &(list->parents[i]);
+	      break;
+	    }
+	}
+      
+      if (!entry)
+	{
+	  if (list->n_mimes == alloc)
+	    {
+	      alloc <<= 1;
+	      list->parents = realloc (list->parents, 
+				       alloc * sizeof (XdgMimeParents));
+	    }
+	  list->parents[list->n_mimes].mime = strdup (line);
+	  list->parents[list->n_mimes].parents = NULL;
+	  entry = &(list->parents[list->n_mimes]);
+	  list->n_mimes++;
+	}
+
+      if (!entry->parents)
+	{
+	  entry->n_parents = 1;
+	  entry->parents = malloc ((entry->n_parents + 1) * sizeof (char *));
+	}
+      else
+	{
+	  entry->n_parents += 1;
+	  entry->parents = realloc (entry->parents, 
+				    (entry->n_parents + 2) * sizeof (char *));
+	}
+      entry->parents[entry->n_parents - 1] = strdup (sep);
+      entry->parents[entry->n_parents] = NULL;
+    }
+
+  list->parents = realloc (list->parents, 
+			   list->n_mimes * sizeof (XdgMimeParents));
+
+  fclose (file);  
+  
+  if (list->n_mimes > 1)
+    qsort (list->parents, list->n_mimes, 
+           sizeof (XdgMimeParents), &parent_entry_cmp);
+}
+
+
+void         
+_xdg_mime_parent_list_dump (XdgParentList *list)
+{
+  int i;
+  char **p;
+
+  if (list->parents)
+    {
+      for (i = 0; i < list->n_mimes; i++)
+	{
+	  for (p = list->parents[i].parents; *p; p++)
+	    printf ("%s %s\n", list->parents[i].mime, *p);
+	}
+    }
+}
+
+
diff --git a/gio/xdgmime/xdgmimeparent.h b/gio/xdgmime/xdgmimeparent.h
new file mode 100644
index 0000000..b564f41
--- /dev/null
+++ b/gio/xdgmime/xdgmimeparent.h
@@ -0,0 +1,51 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* xdgmimeparent.h: Private file.  Datastructure for storing the hierarchy.
+ *
+ * More info can be found at http://www.freedesktop.org/standards/
+ *
+ * Copyright (C) 2004  Red Hat, Inc.
+ * Copyright (C) 200  Matthias Clasen <mclasen@redhat.com>
+ *
+ * Licensed under the Academic Free License version 2.0
+ * Or under the following terms:
+ *
+ * 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 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.
+ */
+
+#ifndef __XDG_MIME_PARENT_H__
+#define __XDG_MIME_PARENT_H__
+
+#include "xdgmime.h"
+
+typedef struct XdgParentList XdgParentList;
+
+#ifdef XDG_PREFIX
+#define _xdg_mime_parent_read_from_file        XDG_RESERVED_ENTRY(parent_read_from_file)
+#define _xdg_mime_parent_list_new              XDG_RESERVED_ENTRY(parent_list_new)
+#define _xdg_mime_parent_list_free             XDG_RESERVED_ENTRY(parent_list_free)
+#define _xdg_mime_parent_list_lookup           XDG_RESERVED_ENTRY(parent_list_lookup)
+#define _xdg_mime_parent_list_dump             XDG_RESERVED_ENTRY(parent_list_dump)
+#endif
+
+void          _xdg_mime_parent_read_from_file (XdgParentList *list,
+					       const char    *file_name);
+XdgParentList *_xdg_mime_parent_list_new       (void);
+void           _xdg_mime_parent_list_free      (XdgParentList *list);
+const char   **_xdg_mime_parent_list_lookup    (XdgParentList *list,
+						const char    *mime);
+void           _xdg_mime_parent_list_dump      (XdgParentList *list);
+
+#endif /* __XDG_MIME_PARENT_H__ */
diff --git a/glib-2.0-uninstalled.pc.in b/glib-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..0c0e95f
--- /dev/null
+++ b/glib-2.0-uninstalled.pc.in
@@ -0,0 +1,9 @@
+glib_genmarshal=${pc_top_builddir}/${pcfiledir}/gobject/glib-genmarshal
+gobject_query=${pc_top_builddir}/${pcfiledir}/gobject/gobject-query
+glib_mkenums=${pc_top_builddir}/${pcfiledir}/@srcdir@/gobject/glib-mkenums
+
+Name: GLib Uninstalled
+Description: C Utility Library, Not Installed
+Version: @VERSION@
+Libs: ${pc_top_builddir}/${pcfiledir}/glib/libglib-2.0.la
+Cflags: -I${pc_top_builddir}/${pcfiledir} -I${pc_top_builddir}/${pcfiledir}/@srcdir@ -I${pc_top_builddir}/${pcfiledir}/@srcdir@/glib
diff --git a/glib-2.0.pc.in b/glib-2.0.pc.in
new file mode 100644
index 0000000..3d1ac12
--- /dev/null
+++ b/glib-2.0.pc.in
@@ -0,0 +1,15 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+glib_genmarshal=glib-genmarshal
+gobject_query=gobject-query
+glib_mkenums=glib-mkenums
+
+Name: GLib
+Description: C Utility Library
+Version: @VERSION@
+Libs: -L${libdir} -lglib-2.0 @INTLLIBS@
+Libs.private: @ICONV_LIBS@
+Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include @GLIB_EXTRA_CFLAGS@
diff --git a/glib-gettextize.in b/glib-gettextize.in
new file mode 100644
index 0000000..35d01c1
--- /dev/null
+++ b/glib-gettextize.in
@@ -0,0 +1,188 @@
+#! /bin/sh
+#
+# Copyright (C) 1995-1998, 2000, 2001 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+# - Modified in October 2001 by jacob berkman <jacob@ximian.com> to
+# work with glib's Makefile.in.in and po2tbl.sed.in, to not copy in
+# intl/, and to not add ChangeLog entries to po/ChangeLog
+
+# This file is meant for authors or maintainers which want to
+# internationalize their package with the help of GNU gettext.  For
+# further information how to use it consult the GNU gettext manual.
+
+echo=echo
+progname=$0
+force=0
+configstatus=0
+origdir=`pwd`
+usage="\
+Usage: glib-gettextize [OPTION]... [package-dir]
+      --help           print this help and exit
+      --version        print version information and exit
+  -c, --copy           copy files instead of making symlinks
+  -f, --force          force writing of new files even if old exist
+Report bugs to http://bugzilla.gnome.org/."
+package=@PACKAGE@
+version=@VERSION@
+try_ln_s=:
+
+# Directory where the sources are stored.
+prefix=@prefix@
+case `uname` in
+MINGW32*)
+    prefix="`dirname $0`/.."
+    ;;
+esac
+
+datadir=@datadir@
+datarootdir=@datarootdir@
+
+gettext_dir=$prefix/share/glib-2.0/gettext
+
+while test $# -gt 0; do
+  case "$1" in
+    -c | --copy | --c* )
+      shift
+      try_ln_s=false ;;
+    -f | --force | --f* )
+      shift
+      force=1 ;;
+    -r | --run | --r* )
+      shift
+      configstatus=1 ;;
+    --help | --h* )
+      $echo "$usage"; exit 0 ;;
+    --version | --v* )
+      echo "$progname (GNU $package) $version"
+      $echo "Copyright (C) 1995-1998, 2000, 2001 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."
+      $echo "Written by" "Ulrich Drepper"
+      exit 0 ;;
+    -- )	# Stop option prcessing
+      shift; break ;;
+    -* )
+      $echo "glib-gettextize: unknown option $1"
+      $echo "Try \`glib-gettextize --help' for more information."; exit 1 ;;
+    * )
+      break ;;
+  esac
+done
+
+if test $# -gt 1; then
+  $echo "$usage"
+  exit 1
+fi
+
+# Fill in the command line options value.
+if test $# -eq 1; then
+  srcdir=$1
+  if cd "$srcdir"; then
+    srcdir=`pwd`
+  else
+    $echo "Cannot change directory to \`$srcdir'"
+    exit 1
+  fi
+else
+  srcdir=$origdir
+fi
+
+test -f configure.in || test -f configure.ac || {
+  $echo "Missing configure.in or configure.ac, please cd to your package first."
+  exit 1
+}
+
+configure_in=NONE
+if test -f configure.in; then
+  configure_in=configure.in
+else
+  if test -f configure.ac; then
+    configure_in=configure.ac
+  fi
+fi
+# Check in which directory config.rpath, mkinstalldirs etc. belong.
+auxdir=`cat "$configure_in" | grep '^AC_CONFIG_AUX_DIR' | sed -n -e 's/AC_CONFIG_AUX_DIR(\([^()]*\))/\1/p' | sed -e 's/^\[\(.*\)\]$/\1/' | sed -e 1q`
+if test -n "$auxdir"; then
+  auxdir="$auxdir/"
+fi
+
+if test -f po/Makefile.in.in && test $force -eq 0; then
+  $echo "\
+po/Makefile.in.in exists: use option -f if you really want to delete it."
+  exit 1
+fi
+
+test -d po || {
+  $echo "Creating po/ subdirectory"
+  mkdir po || {
+    $echo "failed to create po/ subdirectory"
+    exit 1
+  }
+}
+
+# For simplicity we changed to the gettext source directory.
+cd $gettext_dir || {
+   $echo "gettext source directory '${gettext_dir}' doesn't exist"
+   exit 1
+}
+
+# Now copy all files.  Take care for the destination directories.
+for file in *; do
+  case $file in
+    intl | po)
+      ;;
+    mkinstalldirs)
+      rm -f "$srcdir/$auxdir$file"
+      ($try_ln_s && ln -s $gettext_dir/$file "$srcdir/$auxdir$file" && $echo "Symlinking file $file") 2>/dev/null ||
+      { $echo "Copying file $file"; cp $file "$srcdir/$auxdir$file"; }
+      ;;
+    *)
+      rm -f "$srcdir/$file"
+      ($try_ln_s && ln -s $gettext_dir/$file "$srcdir/$file" && $echo "Symlinking file $file") 2>/dev/null ||
+      { $echo "Copying file $file"; cp $file "$srcdir/$file"; }
+      ;;
+  esac
+done
+
+# Copy files to po/ subdirectory.
+cd po
+for file in *; do
+  rm -f "$srcdir/po/$file"
+  ($try_ln_s && ln -s $gettext_dir/po/$file "$srcdir/po/$file" && $echo "Symlinking file po/$file") 2>/dev/null ||
+  { $echo "Copying file po/$file"; cp $file "$srcdir/po/$file"; }
+done
+if test -f "$srcdir/po/cat-id-tbl.c"; then
+  $echo "Removing po/cat-id-tbl.c"
+  rm -f "$srcdir/po/cat-id-tbl.c"
+fi
+if test -f "$srcdir/po/stamp-cat-id"; then
+  $echo "Removing po/stamp-cat-id"
+  rm -f "$srcdir/po/stamp-cat-id"
+fi
+
+echo
+echo "Please add the files"
+echo "  codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4"
+echo "  progtest.m4"
+echo "from the $datadir/aclocal directory to your autoconf macro directory"
+echo "or directly to your aclocal.m4 file."
+echo "You will also need config.guess and config.sub, which you can get from"
+echo "ftp://ftp.gnu.org/pub/gnu/config/."
+echo
+
+exit 0
diff --git a/glib-zip.in b/glib-zip.in
new file mode 100755
index 0000000..17dec82
--- /dev/null
+++ b/glib-zip.in
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# Build zipfiles for GLib on Win32: Separate runtime and developer ones.
+# After running make install, run this.
+
+ZIP=/tmp/glib-@GLIB_VERSION@.zip
+DEVZIP=/tmp/glib-dev-@GLIB_VERSION@.zip
+
+cd @prefix@
+
+mkdir -p share/doc/glib-@GLIB_VERSION@
+cp -p @abs_srcdir@/COPYING share/doc/glib-@GLIB_VERSION@
+
+mkdir -p share/doc/glib-dev-@GLIB_VERSION@
+cp -p @abs_srcdir@/COPYING share/doc/glib-dev-@GLIB_VERSION@
+
+if test @LIB_EXE_MACHINE_FLAG@ = X64; then
+  helperbits=64
+else
+  helperbits=32
+fi
+
+rm $ZIP
+zip $ZIP -@ <<EOF
+bin/gspawn-win${helperbits}-helper.exe
+bin/gspawn-win${helperbits}-helper-console.exe
+bin/libglib-2.0-@LT_CURRENT_MINUS_AGE@.dll
+bin/libgio-2.0-@LT_CURRENT_MINUS_AGE@.dll
+bin/libgmodule-2.0-@LT_CURRENT_MINUS_AGE@.dll
+bin/libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll
+bin/libgthread-2.0-@LT_CURRENT_MINUS_AGE@.dll
+EOF
+
+zip -r $ZIP share/locale/*/LC_MESSAGES/glib20.mo
+
+zip -r $ZIP share/doc/glib-@GLIB_VERSION@
+
+rm $DEVZIP
+zip -r $DEVZIP -@ <<EOF
+bin/glib-genmarshal.exe
+bin/glib-gettextize
+bin/glib-mkenums
+bin/gobject-query.exe
+include/glib-2.0
+lib/libglib-2.0.dll.a
+lib/glib-2.0.lib
+lib/glib-2.0.def
+lib/libgmodule-2.0.dll.a
+lib/gmodule-2.0.lib
+lib/gmodule-2.0.def
+lib/libgobject-2.0.dll.a
+lib/gobject-2.0.lib
+lib/gobject-2.0.def
+lib/libgthread-2.0.dll.a
+lib/gthread-2.0.lib
+lib/gthread-2.0.def
+lib/libgio-2.0.dll.a
+lib/gio-2.0.lib
+lib/gio-2.0.def
+lib/glib-2.0
+lib/pkgconfig/glib-2.0.pc
+lib/pkgconfig/gmodule-2.0.pc
+lib/pkgconfig/gmodule-no-export-2.0.pc
+lib/pkgconfig/gobject-2.0.pc
+lib/pkgconfig/gthread-2.0.pc
+lib/pkgconfig/gio-2.0.pc
+share/aclocal/glib-2.0.m4
+share/aclocal/glib-gettext.m4
+share/glib-2.0
+share/gtk-doc/html/glib
+share/gtk-doc/html/gobject
+share/man/man1/glib-mkenums.1
+share/man/man1/glib-genmarshal.1
+share/man/man1/gobject-query.1
+EOF
+
+zip -r $DEVZIP share/doc/glib-dev-@GLIB_VERSION@
diff --git a/glib.h b/glib.h
new file mode 100644
index 0000000..000d417
--- /dev/null
+++ b/glib.h
@@ -0,0 +1,93 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#ifndef __G_LIB_H__
+#define __G_LIB_H__
+
+#define __GLIB_H_INSIDE__
+
+#include <glib/galloca.h>
+#include <glib/garray.h>
+#include <glib/gasyncqueue.h>
+#include <glib/gatomic.h>
+#include <glib/gbacktrace.h>
+#include <glib/gbase64.h>
+#include <glib/gbookmarkfile.h>
+#include <glib/gcache.h>
+#include <glib/gchecksum.h>
+#include <glib/gcompletion.h>
+#include <glib/gconvert.h>
+#include <glib/gdataset.h>
+#include <glib/gdate.h>
+#include <glib/gdir.h>
+#include <glib/gerror.h>
+#include <glib/gfileutils.h>
+#include <glib/ghash.h>
+#include <glib/ghook.h>
+#include <glib/giochannel.h>
+#include <glib/gkeyfile.h>
+#include <glib/glist.h>
+#include <glib/gmacros.h>
+#include <glib/gmain.h>
+#include <glib/gmappedfile.h>
+#include <glib/gmarkup.h>
+#include <glib/gmem.h>
+#include <glib/gmessages.h>
+#include <glib/gnode.h>
+#include <glib/goption.h>
+#include <glib/gpattern.h>
+#include <glib/gpoll.h>
+#include <glib/gprimes.h>
+#include <glib/gqsort.h>
+#include <glib/gquark.h>
+#include <glib/gqueue.h>
+#include <glib/grand.h>
+#include <glib/grel.h>
+#include <glib/gregex.h>
+#include <glib/gscanner.h>
+#include <glib/gsequence.h>
+#include <glib/gshell.h>
+#include <glib/gslice.h>
+#include <glib/gslist.h>
+#include <glib/gspawn.h>
+#include <glib/gstrfuncs.h>
+#include <glib/gstring.h>
+#include <glib/gtestutils.h>
+#include <glib/gthread.h>
+#include <glib/gthreadpool.h>
+#include <glib/gtimer.h>
+#include <glib/gtree.h>
+#include <glib/gtypes.h>
+#include <glib/gunicode.h>
+#include <glib/gurifuncs.h>
+#include <glib/gutils.h>
+#ifdef G_PLATFORM_WIN32
+#include <glib/gwin32.h>
+#endif
+
+#undef __GLIB_H_INSIDE__
+
+#endif /* __G_LIB_H__ */
diff --git a/glib/.gitignore b/glib/.gitignore
new file mode 100644
index 0000000..829cb1c
--- /dev/null
+++ b/glib/.gitignore
@@ -0,0 +1 @@
+gtester
diff --git a/glib/Android.mk b/glib/Android.mk
new file mode 100755
index 0000000..975fe1e
--- /dev/null
+++ b/glib/Android.mk
@@ -0,0 +1,45 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	gdir.c \
+	gerror.c \
+	giochannel.c \
+	gkeyfile.c \
+	gmain.c \
+	gmem.c \
+	goption.c \
+	gslice.c \
+	gslist.c \
+	gstring.c \
+	gstrfuncs.c \
+	gtimer.c \
+	giounix.c \
+	gmessages.c \
+	gutf8.c \
+	gfileutils.c \
+	gconvert.c \
+	gdataset.c \
+	gtestutils.c \
+	ghash.c \
+	glist.c \
+	gthread.c \
+	garray.c \
+	gutils.c \
+	gatomic.c \
+	gprintf.c \
+	gpattern.c \
+	guniprop.c \
+	gpoll.c \
+	grand.c \
+	gunidecomp.c \
+	gqsort.c \
+	gstdio.c
+
+LOCAL_C_INCLUDES:= \
+	$(LOCAL_PATH)/../ \
+	$(LOCAL_PATH)
+
+LOCAL_MODULE:=libglib_static
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/glib/Makefile.am b/glib/Makefile.am
new file mode 100644
index 0000000..c6f20bb
--- /dev/null
+++ b/glib/Makefile.am
@@ -0,0 +1,364 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+if HAVE_GOOD_PRINTF
+else
+PRINTF_SUBDIR = gnulib
+printf_la = gnulib/libgnulib.la
+endif 
+
+if ENABLE_REGEX
+if USE_SYSTEM_PCRE
+else
+MAYBE_PCRE = pcre 
+endif
+gregex_c = gregex.c
+gregex_h = gregex.h
+else
+gregex_c =
+gregex_h =
+endif
+
+SUBDIRS = libcharset $(PRINTF_SUBDIR) $(MAYBE_PCRE) update-pcre . tests
+
+DIST_SUBDIRS = libcharset gnulib pcre update-pcre tests
+
+AM_CPPFLAGS = 				\
+	-I$(top_srcdir) 		\
+	$(pcre_inc) 			\
+	-DG_LOG_DOMAIN=\"GLib\" 	\
+	$(GLIB_DEBUG_FLAGS) 		\
+	-DG_DISABLE_DEPRECATED 		\
+	-DGLIB_COMPILATION 		\
+	-DPCRE_STATIC
+
+glib.def: glib.symbols
+	(echo -e EXPORTS; $(CPP) -P -DINCLUDE_VARIABLES -DINCLUDE_INTERNAL_SYMBOLS -DG_OS_WIN32 -DALL_FILES - <$(srcdir)/glib.symbols | sed -e '/^$$/d' -e 's/^/	/' -e 's/G_GNUC_[^ ]*//g') > glib.def
+
+galias.h: glib.symbols
+	  $(PERL) $(srcdir)/makegalias.pl < $(srcdir)/glib.symbols > galias.h
+
+galiasdef.c: glib.symbols
+	  $(PERL) $(srcdir)/makegalias.pl -def < $(srcdir)/glib.symbols > galiasdef.c
+
+if OS_LINUX
+if HAVE_GNUC_VISIBILITY
+TESTS_ENVIRONMENT = GLIB_DEBUG_FLAGS="$(GLIB_DEBUG_FLAGS)"
+TESTS = abicheck.sh pltcheck.sh
+endif
+endif
+
+BUILT_SOURCES = galias.h galiasdef.c
+
+MIRRORING_TAB_SOURCE = 				\
+	glib-mirroring-tab/Makefile 		\
+	glib-mirroring-tab/gen-mirroring-tab.c	\
+	glib-mirroring-tab/packtab.h		\
+	glib-mirroring-tab/packtab.c
+
+# The compilation of GRegex can be disabled, but the source files must
+# be distributed.
+EXTRA_DIST += 			\
+	makefile.msc.in		\
+	glib.rc.in		\
+	gen-unicode-tables.pl	\
+	gen-script-table.pl	\
+	makegalias.pl		\
+	abicheck.sh		\
+	pltcheck.sh		\
+	glib.symbols		\
+	gregex.c		\
+	gregex.h		\
+	win_iconv.c		\
+	$(MIRRORING_TAB_SOURCE)
+
+# These may be in the builddir too
+BUILT_EXTRA_DIST = 		\
+	makefile.msc		\
+	glib.rc			\
+	galias.h		\
+	galiasdef.c
+
+lib_LTLIBRARIES = libglib-2.0.la
+
+if OS_WIN32_AND_DLL_COMPILATION
+if MS_LIB_AVAILABLE
+noinst_DATA = glib-2.0.lib
+
+install_ms_lib_cmd = $(INSTALL) glib-2.0.lib $(DESTDIR)$(libdir)
+uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/glib-2.0.lib
+endif
+endif
+
+install-ms-lib:
+	$(install_ms_lib_cmd)
+
+uninstall-ms-lib:
+	$(uninstall_ms_lib_cmd)
+
+libglib_2_0_la_SOURCES = 	\
+	garray.c		\
+	gasyncqueue.c		\
+	gatomic.c		\
+	gbacktrace.c		\
+	gbase64.c		\
+	gbookmarkfile.c 	\
+	gbsearcharray.h		\
+	gcache.c		\
+	gchecksum.c		\
+	gcompletion.c		\
+	gconvert.c		\
+	gdataset.c		\
+	gdatasetprivate.h	\
+	gdate.c         	\
+	gdir.c			\
+	gerror.c		\
+	gfileutils.c		\
+	ghash.c			\
+	ghook.c			\
+	giochannel.c    	\
+	gkeyfile.c        	\
+	glibintl.h		\
+	glist.c			\
+	gmain.c         	\
+	gmappedfile.c		\
+	gmarkup.c		\
+	gmem.c			\
+	gmessages.c		\
+	gmirroringtable.h	\
+	gnode.c			\
+	goption.c		\
+	gpattern.c		\
+	gpoll.c			\
+	gprimes.c		\
+	gqsort.c		\
+	gqueue.c		\
+	grel.c			\
+	grand.c			\
+	$(gregex_c)		\
+	gscanner.c		\
+	gscripttable.h		\
+	gsequence.c		\
+	gshell.c		\
+	gslice.c		\
+	gslist.c		\
+	gstdio.c		\
+	gstrfuncs.c		\
+	gstring.c		\
+	gtestutils.c		\
+	gthread.c       	\
+	gthreadprivate.h	\
+	gthreadpool.c   	\
+	gtimer.c		\
+	gtree.c			\
+	guniprop.c		\
+	gutf8.c			\
+	gunibreak.h		\
+	gunibreak.c		\
+	gunichartables.h	\
+	gunicollate.c		\
+	gunicomp.h		\
+	gunidecomp.h		\
+	gunidecomp.c		\
+	gunicodeprivate.h	\
+	gurifuncs.c 		\
+	gutils.c		\
+	gdebug.h		\
+	gprintf.c		\
+	gprintfint.h
+
+EXTRA_libglib_2_0_la_SOURCES = \
+	giounix.c	\
+	giowin32.c	\
+	gspawn.c	\
+	gspawn-win32.c	\
+	gwin32.c
+
+glibincludedir=$(includedir)/glib-2.0
+glibinclude_HEADERS =   \
+	glib-object.h	\
+	glib.h
+
+glibsubincludedir=$(includedir)/glib-2.0/glib
+glibsubinclude_HEADERS =   \
+	galloca.h	\
+	garray.h	\
+	gasyncqueue.h	\
+	gatomic.h	\
+	gbacktrace.h	\
+	gbase64.h	\
+	gbookmarkfile.h \
+	gcache.h	\
+	gchecksum.h	\
+	gcompletion.h	\
+	gconvert.h	\
+	gdataset.h	\
+	gdate.h		\
+	gdir.h		\
+	gerror.h	\
+	gfileutils.h	\
+	ghash.h		\
+	ghook.h		\
+	gi18n.h		\
+	gi18n-lib.h	\
+	giochannel.h	\
+	gkeyfile.h 	\
+	glist.h		\
+	gmacros.h	\
+	gmain.h		\
+	gmappedfile.h	\
+	gmarkup.h	\
+	gmem.h		\
+	gmessages.h	\
+	gnode.h		\
+	goption.h	\
+	gpattern.h	\
+	gpoll.h		\
+	gprimes.h	\
+	gqsort.h	\
+	gquark.h	\
+	gqueue.h	\
+	grand.h		\
+	$(gregex_h)	\
+	grel.h		\
+	gscanner.h	\
+	gsequence.h	\
+	gshell.h	\
+	gslice.h	\
+	gslist.h	\
+	gspawn.h	\
+	gstdio.h	\
+	gstrfuncs.h	\
+	gtestutils.h	\
+	gstring.h	\
+	gthread.h	\
+	gthreadpool.h	\
+	gtimer.h	\
+	gtree.h		\
+	gtypes.h	\
+	gunicode.h	\
+	gurifuncs.h 		\
+	gutils.h	\
+	gwin32.h	\
+	gprintf.h
+
+install-data-local: install-ms-lib install-def-file
+	@if test -f $(glibincludedir)/glist.h ; then					\
+	  echo "*** Old headers found in $(glibincludedir). You should remove the" ;	\
+	  echo "*** contents of this directory and type 'make install' again." ;	\
+	  false ;									\
+        fi
+
+uninstall-local: uninstall-ms-lib uninstall-def-file
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+export_symbols = -export-symbols glib.def
+
+glib_win32_res = glib-win32-res.o
+glib_win32_res_ldflag = -Wl,$(glib_win32_res)
+
+glib_def = glib.def
+
+install-def-file:
+	$(INSTALL) glib.def $(DESTDIR)$(libdir)/glib-2.0.def
+
+uninstall-def-file:
+	-rm $(DESTDIR)$(libdir)/glib-2.0.def
+else
+install-def-file:
+uninstall-def-file:
+
+export_symbols = $(LIBTOOL_EXPORT_OPTIONS)
+endif
+
+if ENABLE_REGEX
+if USE_SYSTEM_PCRE
+pcre_lib = $(PCRE_LIBS)
+pcre_inc = $(PCRE_CFLAGS)
+else
+pcre_lib = pcre/libpcre.la
+pcre_inc =
+endif
+else
+pcre_lib =
+pcre_inc =
+endif
+
+libglib_2_0_la_LIBADD = libcharset/libcharset.la $(printf_la) @GIO@ @GSPAWN@ @PLATFORMDEP@ @ICONV_LIBS@ @G_LIBS_EXTRA@ $(pcre_lib)
+libglib_2_0_la_DEPENDENCIES = libcharset/libcharset.la $(printf_la) @GIO@ @GSPAWN@ @PLATFORMDEP@ $(glib_win32_res) $(glib_def)
+
+libglib_2_0_la_LDFLAGS = \
+	 $(glib_win32_res_ldflag) \
+	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+	-export-dynamic $(no_undefined) $(export_symbols)
+
+INSTALL_PROGS=
+
+gspawn-win32-helper-console.c:
+	echo '#define HELPER_CONSOLE' >$@
+	echo '#include "gspawn-win32-helper.c"' >>$@
+
+gspawn-win64-helper.c:
+	echo '#include "gspawn-win32-helper.c"' >$@
+
+gspawn-win64-helper-console.c:
+	echo '#define HELPER_CONSOLE' >$@
+	echo '#include "gspawn-win32-helper.c"' >>$@
+
+if OS_WIN32
+if OS_WIN32_X64
+INSTALL_PROGS += gspawn-win64-helper gspawn-win64-helper-console
+gspawn_win64_helper_LDADD = libglib-2.0.la
+gspawn_win64_helper_LDFLAGS = -mwindows
+gspawn_win64_helper_console_LDADD = libglib-2.0.la
+else
+INSTALL_PROGS += gspawn-win32-helper gspawn-win32-helper-console
+gspawn_win32_helper_LDADD = libglib-2.0.la
+gspawn_win32_helper_LDFLAGS = -mwindows
+gspawn_win32_helper_console_LDADD = libglib-2.0.la
+endif
+endif
+
+glib-win32-res.o: glib.rc
+	$(WINDRES) glib.rc $@
+
+bin_PROGRAMS	 = ${INSTALL_PROGS}
+
+if OS_UNIX
+
+INSTALL_PROGS	+= gtester
+gtester_SOURCES	 = gtester.c
+gtester_LDADD	 = libglib-2.0.la 
+
+auto_config_binscripts = gtester-report
+bin_SCRIPTS = ${auto_config_binscripts}
+EXTRA_DIST += ${auto_config_binscripts}
+
+CONFIGVARS = \
+        "bindir"    	: "${bindir}",		\
+        "glib-version"  : "${GLIB_VERSION}"
+
+install-exec-hook:
+	for sf in ${auto_config_binscripts} ; do \
+	  mv -f "$(DESTDIR)$(bindir)/$$sf" "$(DESTDIR)$(bindir)/$$sf".tmp \
+	  && sed < "$(DESTDIR)$(bindir)/$$sf".tmp > "$(DESTDIR)$(bindir)/$$sf" \
+	    -e '1,24s|^ *#@PKGINSTALL_CONFIGVARS_IN24LINES@|  ${CONFIGVARS}|' \
+	    -e '1,1s|#! /usr/bin/env python\([0-9]\+\(\.[0-9]\+\)\?\)\?|#!${PYTHON}|' \
+	  || exit $$? ; \
+	  rm -f "$(DESTDIR)$(bindir)/$$sf".tmp ; \
+	done
+
+endif
+
+glib-2.0.lib: libglib-2.0.la glib.def
+	lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libglib-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:glib.def -out:$@
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)'; \
+	for f in $$files; do \
+	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
+	  cp $$d/$$f $(distdir) || exit 1; done
diff --git a/glib/config.h b/glib/config.h
new file mode 100644
index 0000000..d05f6a5
--- /dev/null
+++ b/glib/config.h
@@ -0,0 +1,658 @@
+/* config.h.  Generated from config.h.in by configure.  */
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+/* #undef AC_APPLE_UNIVERSAL_BUILD */
+
+/* define if asm blocks can use numeric local labels */
+/* #undef ASM_NUMERIC_LABELS */
+
+/* poll doesn't work on devices */
+/* #undef BROKEN_POLL */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+/* #undef CRAY_STACKSEG_END */
+
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
+
+/* Whether to disable memory pools */
+/* #undef DISABLE_MEM_POOLS */
+
+/* Whether to enable GC friendliness by default */
+/* #undef ENABLE_GC_FRIENDLY_DEFAULT */
+
+/* always defined to indicate that i18n is enabled */
+#define ENABLE_NLS 1
+
+/* include GRegex */
+#define ENABLE_REGEX /**/
+
+/* Define the gettext package to be used */
+#define GETTEXT_PACKAGE "glib20"
+
+/* Define to the GLIB binary age */
+#define GLIB_BINARY_AGE 2000
+
+/* Byte contents of gmutex */
+#define GLIB_BYTE_CONTENTS_GMUTEX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+
+/* Define to the GLIB interface age */
+#define GLIB_INTERFACE_AGE 0
+
+/* Define the location where the catalogs will be installed */
+#define GLIB_LOCALE_DIR "/usr/local/share/locale"
+
+/* Define to the GLIB major version */
+#define GLIB_MAJOR_VERSION 2
+
+/* Define to the GLIB micro version */
+#define GLIB_MICRO_VERSION 0
+
+/* Define to the GLIB minor version */
+#define GLIB_MINOR_VERSION 20
+
+/* The size of gmutex, as computed by sizeof. */
+#define GLIB_SIZEOF_GMUTEX 40
+
+/* The size of system_thread, as computed by sizeof. */
+#define GLIB_SIZEOF_SYSTEM_THREAD 8
+
+/* alpha atomic implementation */
+/* #undef G_ATOMIC_ALPHA */
+
+/* arm atomic implementation */
+/* #undef G_ATOMIC_ARM */
+
+/* cris atomic implementation */
+/* #undef G_ATOMIC_CRIS */
+
+/* crisv32 atomic implementation */
+/* #undef G_ATOMIC_CRISV32 */
+
+/* i486 atomic implementation */
+/* #undef G_ATOMIC_I486 */
+
+/* ia64 atomic implementation */
+/* #undef G_ATOMIC_IA64 */
+
+/* powerpc atomic implementation */
+/* #undef G_ATOMIC_POWERPC */
+
+/* s390 atomic implementation */
+/* #undef G_ATOMIC_S390 */
+
+/* sparcv9 atomic implementation */
+/* #undef G_ATOMIC_SPARCV9 */
+
+/* x86_64 atomic implementation */
+/* #undef G_ATOMIC_X86_64 */
+
+/* Have inline keyword */
+#define G_HAVE_INLINE 1
+
+/* Have __inline keyword */
+#define G_HAVE___INLINE 1
+
+/* Have __inline__ keyword */
+#define G_HAVE___INLINE__ 1
+
+/* Source file containing theread implementation */
+#define G_THREAD_SOURCE "gthread-posix.c"
+
+/* A 'va_copy' style function */
+#define G_VA_COPY va_copy
+
+/* 'va_lists' cannot be copies as values */
+#define G_VA_COPY_AS_ARRAY 1
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#define HAVE_ALLOCA_H 1
+
+/* Define to 1 if you have the `atexit' function. */
+#define HAVE_ATEXIT 1
+
+/* Define to 1 if you have the <attr/xattr.h> header file. */
+/* #undef HAVE_ATTR_XATTR_H */
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#define HAVE_BIND_TEXTDOMAIN_CODESET 1
+
+/* Define if you have a version of the snprintf function with semantics as
+   specified by the ISO C99 standard. */
+#define HAVE_C99_SNPRINTF 1
+
+/* Define if you have a version of the vsnprintf function with semantics as
+   specified by the ISO C99 standard. */
+#define HAVE_C99_VSNPRINTF 1
+
+/* define to 1 if Carbon is available */
+/* #undef HAVE_CARBON */
+
+/* Define to 1 if you have the `chown' function. */
+#define HAVE_CHOWN 1
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#define HAVE_CLOCK_GETTIME 1
+
+/* Have nl_langinfo (CODESET) */
+#define HAVE_CODESET 1
+
+/* Define to 1 if you have the <crt_externs.h> header file. */
+/* #undef HAVE_CRT_EXTERNS_H */
+
+/* Define to 1 if you have the `dcgettext' function. */
+#define HAVE_DCGETTEXT 1
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+/* #undef HAVE_DOPRNT */
+
+/* define for working do while(0) macros */
+#define HAVE_DOWHILE_MACROS 1
+
+/* Define to 1 if you have the `endmntent' function. */
+#define HAVE_ENDMNTENT 1
+
+/* Define if we have FAM */
+/* #undef HAVE_FAM */
+
+/* Define to 1 if you have the <fam.h> header file. */
+/* #undef HAVE_FAM_H */
+
+/* Define if we have FAMNoExists in fam */
+/* #undef HAVE_FAM_NO_EXISTS */
+
+/* Define to 1 if you have the `fchmod' function. */
+#define HAVE_FCHMOD 1
+
+/* Define to 1 if you have the `fchown' function. */
+#define HAVE_FCHOWN 1
+
+/* Define to 1 if you have the `fdwalk' function. */
+/* #undef HAVE_FDWALK */
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the <fstab.h> header file. */
+#define HAVE_FSTAB_H 1
+
+/* Define to 1 if you have the `getcwd' function. */
+#define HAVE_GETCWD 1
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#define HAVE_GETC_UNLOCKED 1
+
+/* Define to 1 if you have the `getgrgid' function. */
+#define HAVE_GETGRGID 1
+
+/* Define to 1 if you have the `getmntent_r' function. */
+#define HAVE_GETMNTENT_R 1
+
+/* Define to 1 if you have the `getmntinfo' function. */
+/* #undef HAVE_GETMNTINFO */
+
+/* Define to 1 if you have the `getpwuid' function. */
+#define HAVE_GETPWUID 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#define HAVE_GETTEXT 1
+
+/* Define to 1 if you have the `gmtime_r' function. */
+#define HAVE_GMTIME_R 1
+
+/* define to use system printf */
+#define HAVE_GOOD_PRINTF 1
+
+/* Define to 1 if you have the <grp.h> header file. */
+#define HAVE_GRP_H 1
+
+/* Define to 1 if you have the `hasmntopt' function. */
+#define HAVE_HASMNTOPT 1
+
+/* define to support printing 64-bit integers with format I64 */
+/* #undef HAVE_INT64_AND_I64 */
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#define HAVE_INTMAX_T 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#define HAVE_LANGINFO_CODESET 1
+
+/* Define to 1 if you have the `lchown' function. */
+#define HAVE_LCHOWN 1
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#define HAVE_LC_MESSAGES 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the `link' function. */
+#define HAVE_LINK 1
+
+/* Define to 1 if you have the `localtime_r' function. */
+#define HAVE_LOCALTIME_R 1
+
+/* Define if you have the 'long double' type. */
+#define HAVE_LONG_DOUBLE 1
+
+/* Define if you have the 'long long' type. */
+#define HAVE_LONG_LONG 1
+
+/* define if system printf can print long long */
+#define HAVE_LONG_LONG_FORMAT 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H 1
+
+/* Define to 1 if you have the `memalign' function. */
+#define HAVE_MEMALIGN 1
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+#define HAVE_MMAP 1
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Have a monotonic clock */
+#define HAVE_MONOTONIC_CLOCK 1
+
+/* Define to 1 if you have the `nanosleep' function. */
+#define HAVE_NANOSLEEP 1
+
+/* Have non-POSIX function getgrgid_r */
+/* #undef HAVE_NONPOSIX_GETGRGID_R */
+
+/* Have non-POSIX function getpwuid_r */
+/* #undef HAVE_NONPOSIX_GETPWUID_R */
+
+/* Define to 1 if you have the `nsleep' function. */
+/* #undef HAVE_NSLEEP */
+
+/* Define to 1 if you have the `on_exit' function. */
+#define HAVE_ON_EXIT 1
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Have POSIX function getgrgid_r */
+#define HAVE_POSIX_GETGRGID_R 1
+
+/* Have function pthread_attr_setstacksize */
+#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1
+
+/* Define to 1 if the system has the type `ptrdiff_t'. */
+#define HAVE_PTRDIFF_T 1
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#define HAVE_PWD_H 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if libselinux is available */
+/* #undef HAVE_SELINUX */
+
+/* Define to 1 if you have the <selinux/selinux.h> header file. */
+/* #undef HAVE_SELINUX_SELINUX_H */
+
+/* Define to 1 if you have the `setenv' function. */
+#define HAVE_SETENV 1
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the `setmntent' function. */
+#define HAVE_SETMNTENT 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Have functions strlcpy and strlcat */
+/* #undef HAVE_STRLCPY */
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the `strsignal' function. */
+#define HAVE_STRSIGNAL 1
+
+/* Define to 1 if `f_bavail' is member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_fstypename' is member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FSTYPENAME */
+
+/* Define to 1 if `f_basetype' is member of `struct statvfs'. */
+/* #undef HAVE_STRUCT_STATVFS_F_BASETYPE */
+
+/* Define to 1 if `st_atimensec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_ATIMENSEC */
+
+/* Define to 1 if `st_atim.tv_nsec' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
+
+/* Define to 1 if `st_blksize' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
+
+/* Define to 1 if `st_blocks' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctimensec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_CTIMENSEC */
+
+/* Define to 1 if `st_ctim.tv_nsec' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC 1
+
+/* Define to 1 if `st_mtimensec' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_MTIMENSEC */
+
+/* Define to 1 if `st_mtim.tv_nsec' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+
+/* Define to 1 if you have the `symlink' function. */
+#define HAVE_SYMLINK 1
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+#define HAVE_SYS_INOTIFY_H 1
+
+/* Define to 1 if you have the <sys/mntctl.h> header file. */
+/* #undef HAVE_SYS_MNTCTL_H */
+
+/* Define to 1 if you have the <sys/mnttab.h> header file. */
+/* #undef HAVE_SYS_MNTTAB_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define HAVE_SYS_RESOURCE_H 1
+
+/* found fd_set in sys/select.h */
+#define HAVE_SYS_SELECT_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#define HAVE_SYS_SYSCTL_H 1
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/vfstab.h> header file. */
+/* #undef HAVE_SYS_VFSTAB_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vmount.h> header file. */
+/* #undef HAVE_SYS_VMOUNT_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the <sys/xattr.h> header file. */
+#define HAVE_SYS_XATTR_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if your printf function family supports positional parameters as
+   specified by Unix98. */
+#define HAVE_UNIX98_PRINTF 1
+
+/* Define to 1 if you have the `unsetenv' function. */
+#define HAVE_UNSETENV 1
+
+/* Define to 1 if you have the `utimes' function. */
+#define HAVE_UTIMES 1
+
+/* Define to 1 if you have the `valloc' function. */
+#define HAVE_VALLOC 1
+
+/* Define to 1 if you have the <values.h> header file. */
+#define HAVE_VALUES_H 1
+
+/* Define to 1 if you have the `vasprintf' function. */
+#define HAVE_VASPRINTF 1
+
+/* Define to 1 if you have the `vprintf' function. */
+#define HAVE_VPRINTF 1
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define if you have the 'wchar_t' type. */
+#define HAVE_WCHAR_T 1
+
+/* Define to 1 if you have the `wcslen' function. */
+#define HAVE_WCSLEN 1
+
+/* Define if you have the 'wint_t' type. */
+#define HAVE_WINT_T 1
+
+/* Have a working bcopy */
+/* #undef HAVE_WORKING_BCOPY */
+
+/* Define to 1 if xattr is available */
+#define HAVE_XATTR 1
+
+/* Define to 1 if xattr API uses XATTR_NOFOLLOW */
+/* #undef HAVE_XATTR_NOFOLLOW */
+
+/* Define to 1 if you have the `_NSGetEnviron' function. */
+/* #undef HAVE__NSGETENVIRON */
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#define LT_OBJDIR ".libs/"
+
+/* Do we cache iconv descriptors */
+/* #undef NEED_ICONV_CACHE */
+
+/* didn't find fd_set */
+/* #undef NO_FD_SET */
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+/* #undef NO_MINUS_C_MINUS_O */
+
+/* global 'sys_errlist' not found */
+/* #undef NO_SYS_ERRLIST */
+
+/* global 'sys_siglist' not found */
+/* #undef NO_SYS_SIGLIST */
+
+/* global 'sys_siglist' not declared */
+/* #undef NO_SYS_SIGLIST_DECL */
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=glib"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "glib"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "glib 2.20.0"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "glib"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "2.20.0"
+
+/* Maximum POSIX RT priority */
+#define POSIX_MAX_PRIORITY sched_get_priority_max(SCHED_OTHER)
+
+/* define if posix_memalign() can allocate any size */
+#define POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS 1
+
+/* Minimum POSIX RT priority */
+#define POSIX_MIN_PRIORITY sched_get_priority_min(SCHED_OTHER)
+
+/* The POSIX RT yield function */
+#define POSIX_YIELD_FUNC sched_yield()
+
+/* whether realloc (NULL,) works */
+#define REALLOC_0_WORKS 1
+
+/* Define if you have correct malloc prototypes */
+#define SANE_MALLOC_PROTOS 1
+
+/* The size of `char', as computed by sizeof. */
+#define SIZEOF_CHAR 1
+
+/* The size of `int', as computed by sizeof. */
+#define SIZEOF_INT 4
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 8
+
+/* The size of `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* The size of `short', as computed by sizeof. */
+#define SIZEOF_SHORT 2
+
+/* The size of `size_t', as computed by sizeof. */
+#define SIZEOF_SIZE_T 8
+
+/* The size of `void *', as computed by sizeof. */
+#define SIZEOF_VOID_P 8
+
+/* The size of `__int64', as computed by sizeof. */
+#define SIZEOF___INT64 0
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+/* #undef STACK_DIRECTION */
+
+/* Number of arguments to statfs() */
+#define STATFS_ARGS 2
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Using GNU libiconv */
+/* #undef USE_LIBICONV_GNU */
+
+/* Using a native implementation of iconv in a separate library */
+/* #undef USE_LIBICONV_NATIVE */
+
+/* using the system-supplied PCRE library */
+/* #undef USE_SYSTEM_PCRE */
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+/* #  undef WORDS_BIGENDIAN */
+# endif
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to long or long long if <inttypes.h> and <stdint.h> don't define. */
+/* #undef intmax_t */
+
+/* Define to empty if the C compiler doesn't support this keyword. */
+/* #undef signed */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */
diff --git a/glib/galias.h b/glib/galias.h
new file mode 100644
index 0000000..9131fa6
--- /dev/null
+++ b/glib/galias.h
@@ -0,0 +1,3886 @@
+/* Generated by makegalias.pl */
+
+#ifndef DISABLE_VISIBILITY
+
+#include "glibconfig.h"
+
+#ifdef G_HAVE_GNUC_VISIBILITY
+
+#define IN_FILE(x) 1
+#define IN_HEADER defined
+
+#if IN_HEADER(__G_ARRAY_H__)
+#if IN_FILE(__G_ARRAY_C__)
+extern __typeof (g_array_append_vals) IA__g_array_append_vals __attribute((visibility("hidden")));
+#define g_array_append_vals IA__g_array_append_vals
+
+extern __typeof (g_array_free) IA__g_array_free __attribute((visibility("hidden")));
+#define g_array_free IA__g_array_free
+
+extern __typeof (g_array_insert_vals) IA__g_array_insert_vals __attribute((visibility("hidden")));
+#define g_array_insert_vals IA__g_array_insert_vals
+
+extern __typeof (g_array_new) IA__g_array_new __attribute((visibility("hidden")));
+#define g_array_new IA__g_array_new
+
+extern __typeof (g_array_prepend_vals) IA__g_array_prepend_vals __attribute((visibility("hidden")));
+#define g_array_prepend_vals IA__g_array_prepend_vals
+
+extern __typeof (g_array_remove_index) IA__g_array_remove_index __attribute((visibility("hidden")));
+#define g_array_remove_index IA__g_array_remove_index
+
+extern __typeof (g_array_remove_index_fast) IA__g_array_remove_index_fast __attribute((visibility("hidden")));
+#define g_array_remove_index_fast IA__g_array_remove_index_fast
+
+extern __typeof (g_array_remove_range) IA__g_array_remove_range __attribute((visibility("hidden")));
+#define g_array_remove_range IA__g_array_remove_range
+
+extern __typeof (g_array_set_size) IA__g_array_set_size __attribute((visibility("hidden")));
+#define g_array_set_size IA__g_array_set_size
+
+extern __typeof (g_array_sized_new) IA__g_array_sized_new __attribute((visibility("hidden")));
+#define g_array_sized_new IA__g_array_sized_new
+
+extern __typeof (g_array_sort) IA__g_array_sort __attribute((visibility("hidden")));
+#define g_array_sort IA__g_array_sort
+
+extern __typeof (g_array_sort_with_data) IA__g_array_sort_with_data __attribute((visibility("hidden")));
+#define g_array_sort_with_data IA__g_array_sort_with_data
+
+extern __typeof (g_byte_array_append) IA__g_byte_array_append __attribute((visibility("hidden")));
+#define g_byte_array_append IA__g_byte_array_append
+
+extern __typeof (g_byte_array_free) IA__g_byte_array_free __attribute((visibility("hidden")));
+#define g_byte_array_free IA__g_byte_array_free
+
+extern __typeof (g_byte_array_new) IA__g_byte_array_new __attribute((visibility("hidden")));
+#define g_byte_array_new IA__g_byte_array_new
+
+extern __typeof (g_byte_array_prepend) IA__g_byte_array_prepend __attribute((visibility("hidden")));
+#define g_byte_array_prepend IA__g_byte_array_prepend
+
+extern __typeof (g_byte_array_remove_index) IA__g_byte_array_remove_index __attribute((visibility("hidden")));
+#define g_byte_array_remove_index IA__g_byte_array_remove_index
+
+extern __typeof (g_byte_array_remove_index_fast) IA__g_byte_array_remove_index_fast __attribute((visibility("hidden")));
+#define g_byte_array_remove_index_fast IA__g_byte_array_remove_index_fast
+
+extern __typeof (g_byte_array_remove_range) IA__g_byte_array_remove_range __attribute((visibility("hidden")));
+#define g_byte_array_remove_range IA__g_byte_array_remove_range
+
+extern __typeof (g_byte_array_set_size) IA__g_byte_array_set_size __attribute((visibility("hidden")));
+#define g_byte_array_set_size IA__g_byte_array_set_size
+
+extern __typeof (g_byte_array_sized_new) IA__g_byte_array_sized_new __attribute((visibility("hidden")));
+#define g_byte_array_sized_new IA__g_byte_array_sized_new
+
+extern __typeof (g_byte_array_sort) IA__g_byte_array_sort __attribute((visibility("hidden")));
+#define g_byte_array_sort IA__g_byte_array_sort
+
+extern __typeof (g_byte_array_sort_with_data) IA__g_byte_array_sort_with_data __attribute((visibility("hidden")));
+#define g_byte_array_sort_with_data IA__g_byte_array_sort_with_data
+
+extern __typeof (g_ptr_array_add) IA__g_ptr_array_add __attribute((visibility("hidden")));
+#define g_ptr_array_add IA__g_ptr_array_add
+
+extern __typeof (g_ptr_array_foreach) IA__g_ptr_array_foreach __attribute((visibility("hidden")));
+#define g_ptr_array_foreach IA__g_ptr_array_foreach
+
+extern __typeof (g_ptr_array_free) IA__g_ptr_array_free __attribute((visibility("hidden")));
+#define g_ptr_array_free IA__g_ptr_array_free
+
+extern __typeof (g_ptr_array_new) IA__g_ptr_array_new __attribute((visibility("hidden")));
+#define g_ptr_array_new IA__g_ptr_array_new
+
+extern __typeof (g_ptr_array_remove) IA__g_ptr_array_remove __attribute((visibility("hidden")));
+#define g_ptr_array_remove IA__g_ptr_array_remove
+
+extern __typeof (g_ptr_array_remove_fast) IA__g_ptr_array_remove_fast __attribute((visibility("hidden")));
+#define g_ptr_array_remove_fast IA__g_ptr_array_remove_fast
+
+extern __typeof (g_ptr_array_remove_index) IA__g_ptr_array_remove_index __attribute((visibility("hidden")));
+#define g_ptr_array_remove_index IA__g_ptr_array_remove_index
+
+extern __typeof (g_ptr_array_remove_index_fast) IA__g_ptr_array_remove_index_fast __attribute((visibility("hidden")));
+#define g_ptr_array_remove_index_fast IA__g_ptr_array_remove_index_fast
+
+extern __typeof (g_ptr_array_remove_range) IA__g_ptr_array_remove_range __attribute((visibility("hidden")));
+#define g_ptr_array_remove_range IA__g_ptr_array_remove_range
+
+extern __typeof (g_ptr_array_set_size) IA__g_ptr_array_set_size __attribute((visibility("hidden")));
+#define g_ptr_array_set_size IA__g_ptr_array_set_size
+
+extern __typeof (g_ptr_array_sized_new) IA__g_ptr_array_sized_new __attribute((visibility("hidden")));
+#define g_ptr_array_sized_new IA__g_ptr_array_sized_new
+
+extern __typeof (g_ptr_array_sort) IA__g_ptr_array_sort __attribute((visibility("hidden")));
+#define g_ptr_array_sort IA__g_ptr_array_sort
+
+extern __typeof (g_ptr_array_sort_with_data) IA__g_ptr_array_sort_with_data __attribute((visibility("hidden")));
+#define g_ptr_array_sort_with_data IA__g_ptr_array_sort_with_data
+
+#endif
+#endif
+#if IN_HEADER(__G_ASYNCQUEUE_H__)
+#if IN_FILE(__G_ASYNCQUEUE_C__)
+extern __typeof (g_async_queue_length) IA__g_async_queue_length __attribute((visibility("hidden")));
+#define g_async_queue_length IA__g_async_queue_length
+
+extern __typeof (g_async_queue_length_unlocked) IA__g_async_queue_length_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_length_unlocked IA__g_async_queue_length_unlocked
+
+extern __typeof (g_async_queue_lock) IA__g_async_queue_lock __attribute((visibility("hidden")));
+#define g_async_queue_lock IA__g_async_queue_lock
+
+extern __typeof (g_async_queue_new) IA__g_async_queue_new __attribute((visibility("hidden")));
+#define g_async_queue_new IA__g_async_queue_new
+
+extern __typeof (g_async_queue_new_full) IA__g_async_queue_new_full __attribute((visibility("hidden")));
+#define g_async_queue_new_full IA__g_async_queue_new_full
+
+extern __typeof (g_async_queue_pop) IA__g_async_queue_pop __attribute((visibility("hidden")));
+#define g_async_queue_pop IA__g_async_queue_pop
+
+extern __typeof (g_async_queue_pop_unlocked) IA__g_async_queue_pop_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_pop_unlocked IA__g_async_queue_pop_unlocked
+
+extern __typeof (g_async_queue_push) IA__g_async_queue_push __attribute((visibility("hidden")));
+#define g_async_queue_push IA__g_async_queue_push
+
+extern __typeof (g_async_queue_push_unlocked) IA__g_async_queue_push_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_push_unlocked IA__g_async_queue_push_unlocked
+
+extern __typeof (g_async_queue_push_sorted) IA__g_async_queue_push_sorted __attribute((visibility("hidden")));
+#define g_async_queue_push_sorted IA__g_async_queue_push_sorted
+
+extern __typeof (g_async_queue_push_sorted_unlocked) IA__g_async_queue_push_sorted_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_push_sorted_unlocked IA__g_async_queue_push_sorted_unlocked
+
+extern __typeof (g_async_queue_ref) IA__g_async_queue_ref __attribute((visibility("hidden")));
+#define g_async_queue_ref IA__g_async_queue_ref
+
+extern __typeof (g_async_queue_sort) IA__g_async_queue_sort __attribute((visibility("hidden")));
+#define g_async_queue_sort IA__g_async_queue_sort
+
+extern __typeof (g_async_queue_sort_unlocked) IA__g_async_queue_sort_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_sort_unlocked IA__g_async_queue_sort_unlocked
+
+extern __typeof (g_async_queue_timed_pop) IA__g_async_queue_timed_pop __attribute((visibility("hidden")));
+#define g_async_queue_timed_pop IA__g_async_queue_timed_pop
+
+extern __typeof (g_async_queue_timed_pop_unlocked) IA__g_async_queue_timed_pop_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_timed_pop_unlocked IA__g_async_queue_timed_pop_unlocked
+
+extern __typeof (g_async_queue_try_pop) IA__g_async_queue_try_pop __attribute((visibility("hidden")));
+#define g_async_queue_try_pop IA__g_async_queue_try_pop
+
+extern __typeof (g_async_queue_try_pop_unlocked) IA__g_async_queue_try_pop_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_try_pop_unlocked IA__g_async_queue_try_pop_unlocked
+
+extern __typeof (g_async_queue_unlock) IA__g_async_queue_unlock __attribute((visibility("hidden")));
+#define g_async_queue_unlock IA__g_async_queue_unlock
+
+extern __typeof (g_async_queue_unref) IA__g_async_queue_unref __attribute((visibility("hidden")));
+#define g_async_queue_unref IA__g_async_queue_unref
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_async_queue_ref_unlocked) IA__g_async_queue_ref_unlocked __attribute((visibility("hidden")));
+#define g_async_queue_ref_unlocked IA__g_async_queue_ref_unlocked
+
+extern __typeof (g_async_queue_unref_and_unlock) IA__g_async_queue_unref_and_unlock __attribute((visibility("hidden")));
+#define g_async_queue_unref_and_unlock IA__g_async_queue_unref_and_unlock
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_ATOMIC_H__)
+#if IN_FILE(__G_ATOMIC_C__)
+extern __typeof (g_atomic_int_add) IA__g_atomic_int_add __attribute((visibility("hidden")));
+#define g_atomic_int_add IA__g_atomic_int_add
+
+extern __typeof (g_atomic_int_compare_and_exchange) IA__g_atomic_int_compare_and_exchange __attribute((visibility("hidden")));
+#define g_atomic_int_compare_and_exchange IA__g_atomic_int_compare_and_exchange
+
+extern __typeof (g_atomic_int_exchange_and_add) IA__g_atomic_int_exchange_and_add __attribute((visibility("hidden")));
+#define g_atomic_int_exchange_and_add IA__g_atomic_int_exchange_and_add
+
+extern __typeof (g_atomic_pointer_compare_and_exchange) IA__g_atomic_pointer_compare_and_exchange __attribute((visibility("hidden")));
+#define g_atomic_pointer_compare_and_exchange IA__g_atomic_pointer_compare_and_exchange
+
+#endif
+#endif
+#if IN_HEADER(__G_BACKTRACE_H__)
+#if IN_FILE(__G_BACKTRACE_C__)
+extern __typeof (g_on_error_query) IA__g_on_error_query __attribute((visibility("hidden")));
+#define g_on_error_query IA__g_on_error_query
+
+extern __typeof (g_on_error_stack_trace) IA__g_on_error_stack_trace __attribute((visibility("hidden")));
+#define g_on_error_stack_trace IA__g_on_error_stack_trace
+
+#endif
+#endif
+#if IN_HEADER(__G_BASE64_H__)
+#if IN_FILE(__G_BASE64_C__)
+extern __typeof (g_base64_encode_step) IA__g_base64_encode_step __attribute((visibility("hidden")));
+#define g_base64_encode_step IA__g_base64_encode_step
+
+extern __typeof (g_base64_encode_close) IA__g_base64_encode_close __attribute((visibility("hidden")));
+#define g_base64_encode_close IA__g_base64_encode_close
+
+extern __typeof (g_base64_encode) IA__g_base64_encode __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_base64_encode IA__g_base64_encode
+
+extern __typeof (g_base64_decode_step) IA__g_base64_decode_step __attribute((visibility("hidden")));
+#define g_base64_decode_step IA__g_base64_decode_step
+
+extern __typeof (g_base64_decode) IA__g_base64_decode __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_base64_decode IA__g_base64_decode
+
+extern __typeof (g_base64_decode_inplace) IA__g_base64_decode_inplace __attribute((visibility("hidden")));
+#define g_base64_decode_inplace IA__g_base64_decode_inplace
+
+#endif
+#endif
+#if IN_HEADER(__G_BOOKMARK_FILE_H__)
+#if IN_FILE(__G_BOOKMARK_FILE_C__)
+extern __typeof (g_bookmark_file_error_quark) IA__g_bookmark_file_error_quark __attribute((visibility("hidden")));
+#define g_bookmark_file_error_quark IA__g_bookmark_file_error_quark
+
+extern __typeof (g_bookmark_file_new) IA__g_bookmark_file_new __attribute((visibility("hidden")));
+#define g_bookmark_file_new IA__g_bookmark_file_new
+
+extern __typeof (g_bookmark_file_free) IA__g_bookmark_file_free __attribute((visibility("hidden")));
+#define g_bookmark_file_free IA__g_bookmark_file_free
+
+extern __typeof (g_bookmark_file_load_from_file) IA__g_bookmark_file_load_from_file __attribute((visibility("hidden")));
+#define g_bookmark_file_load_from_file IA__g_bookmark_file_load_from_file
+
+extern __typeof (g_bookmark_file_load_from_data) IA__g_bookmark_file_load_from_data __attribute((visibility("hidden")));
+#define g_bookmark_file_load_from_data IA__g_bookmark_file_load_from_data
+
+extern __typeof (g_bookmark_file_load_from_data_dirs) IA__g_bookmark_file_load_from_data_dirs __attribute((visibility("hidden")));
+#define g_bookmark_file_load_from_data_dirs IA__g_bookmark_file_load_from_data_dirs
+
+extern __typeof (g_bookmark_file_to_data) IA__g_bookmark_file_to_data __attribute((visibility("hidden")));
+#define g_bookmark_file_to_data IA__g_bookmark_file_to_data
+
+extern __typeof (g_bookmark_file_to_file) IA__g_bookmark_file_to_file __attribute((visibility("hidden")));
+#define g_bookmark_file_to_file IA__g_bookmark_file_to_file
+
+extern __typeof (g_bookmark_file_set_title) IA__g_bookmark_file_set_title __attribute((visibility("hidden")));
+#define g_bookmark_file_set_title IA__g_bookmark_file_set_title
+
+extern __typeof (g_bookmark_file_get_title) IA__g_bookmark_file_get_title __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_bookmark_file_get_title IA__g_bookmark_file_get_title
+
+extern __typeof (g_bookmark_file_set_description) IA__g_bookmark_file_set_description __attribute((visibility("hidden")));
+#define g_bookmark_file_set_description IA__g_bookmark_file_set_description
+
+extern __typeof (g_bookmark_file_get_description) IA__g_bookmark_file_get_description __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_bookmark_file_get_description IA__g_bookmark_file_get_description
+
+extern __typeof (g_bookmark_file_set_mime_type) IA__g_bookmark_file_set_mime_type __attribute((visibility("hidden")));
+#define g_bookmark_file_set_mime_type IA__g_bookmark_file_set_mime_type
+
+extern __typeof (g_bookmark_file_get_mime_type) IA__g_bookmark_file_get_mime_type __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_bookmark_file_get_mime_type IA__g_bookmark_file_get_mime_type
+
+extern __typeof (g_bookmark_file_set_groups) IA__g_bookmark_file_set_groups __attribute((visibility("hidden")));
+#define g_bookmark_file_set_groups IA__g_bookmark_file_set_groups
+
+extern __typeof (g_bookmark_file_add_group) IA__g_bookmark_file_add_group __attribute((visibility("hidden")));
+#define g_bookmark_file_add_group IA__g_bookmark_file_add_group
+
+extern __typeof (g_bookmark_file_has_group) IA__g_bookmark_file_has_group __attribute((visibility("hidden")));
+#define g_bookmark_file_has_group IA__g_bookmark_file_has_group
+
+extern __typeof (g_bookmark_file_get_groups) IA__g_bookmark_file_get_groups __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_bookmark_file_get_groups IA__g_bookmark_file_get_groups
+
+extern __typeof (g_bookmark_file_add_application) IA__g_bookmark_file_add_application __attribute((visibility("hidden")));
+#define g_bookmark_file_add_application IA__g_bookmark_file_add_application
+
+extern __typeof (g_bookmark_file_has_application) IA__g_bookmark_file_has_application __attribute((visibility("hidden")));
+#define g_bookmark_file_has_application IA__g_bookmark_file_has_application
+
+extern __typeof (g_bookmark_file_get_applications) IA__g_bookmark_file_get_applications __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_bookmark_file_get_applications IA__g_bookmark_file_get_applications
+
+extern __typeof (g_bookmark_file_set_app_info) IA__g_bookmark_file_set_app_info __attribute((visibility("hidden")));
+#define g_bookmark_file_set_app_info IA__g_bookmark_file_set_app_info
+
+extern __typeof (g_bookmark_file_get_app_info) IA__g_bookmark_file_get_app_info __attribute((visibility("hidden")));
+#define g_bookmark_file_get_app_info IA__g_bookmark_file_get_app_info
+
+extern __typeof (g_bookmark_file_set_is_private) IA__g_bookmark_file_set_is_private __attribute((visibility("hidden")));
+#define g_bookmark_file_set_is_private IA__g_bookmark_file_set_is_private
+
+extern __typeof (g_bookmark_file_get_is_private) IA__g_bookmark_file_get_is_private __attribute((visibility("hidden")));
+#define g_bookmark_file_get_is_private IA__g_bookmark_file_get_is_private
+
+extern __typeof (g_bookmark_file_set_icon) IA__g_bookmark_file_set_icon __attribute((visibility("hidden")));
+#define g_bookmark_file_set_icon IA__g_bookmark_file_set_icon
+
+extern __typeof (g_bookmark_file_get_icon) IA__g_bookmark_file_get_icon __attribute((visibility("hidden")));
+#define g_bookmark_file_get_icon IA__g_bookmark_file_get_icon
+
+extern __typeof (g_bookmark_file_set_added) IA__g_bookmark_file_set_added __attribute((visibility("hidden")));
+#define g_bookmark_file_set_added IA__g_bookmark_file_set_added
+
+extern __typeof (g_bookmark_file_get_added) IA__g_bookmark_file_get_added __attribute((visibility("hidden")));
+#define g_bookmark_file_get_added IA__g_bookmark_file_get_added
+
+extern __typeof (g_bookmark_file_set_modified) IA__g_bookmark_file_set_modified __attribute((visibility("hidden")));
+#define g_bookmark_file_set_modified IA__g_bookmark_file_set_modified
+
+extern __typeof (g_bookmark_file_get_modified) IA__g_bookmark_file_get_modified __attribute((visibility("hidden")));
+#define g_bookmark_file_get_modified IA__g_bookmark_file_get_modified
+
+extern __typeof (g_bookmark_file_set_visited) IA__g_bookmark_file_set_visited __attribute((visibility("hidden")));
+#define g_bookmark_file_set_visited IA__g_bookmark_file_set_visited
+
+extern __typeof (g_bookmark_file_get_visited) IA__g_bookmark_file_get_visited __attribute((visibility("hidden")));
+#define g_bookmark_file_get_visited IA__g_bookmark_file_get_visited
+
+extern __typeof (g_bookmark_file_has_item) IA__g_bookmark_file_has_item __attribute((visibility("hidden")));
+#define g_bookmark_file_has_item IA__g_bookmark_file_has_item
+
+extern __typeof (g_bookmark_file_get_size) IA__g_bookmark_file_get_size __attribute((visibility("hidden")));
+#define g_bookmark_file_get_size IA__g_bookmark_file_get_size
+
+extern __typeof (g_bookmark_file_get_uris) IA__g_bookmark_file_get_uris __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_bookmark_file_get_uris IA__g_bookmark_file_get_uris
+
+extern __typeof (g_bookmark_file_remove_group) IA__g_bookmark_file_remove_group __attribute((visibility("hidden")));
+#define g_bookmark_file_remove_group IA__g_bookmark_file_remove_group
+
+extern __typeof (g_bookmark_file_remove_application) IA__g_bookmark_file_remove_application __attribute((visibility("hidden")));
+#define g_bookmark_file_remove_application IA__g_bookmark_file_remove_application
+
+extern __typeof (g_bookmark_file_remove_item) IA__g_bookmark_file_remove_item __attribute((visibility("hidden")));
+#define g_bookmark_file_remove_item IA__g_bookmark_file_remove_item
+
+extern __typeof (g_bookmark_file_move_item) IA__g_bookmark_file_move_item __attribute((visibility("hidden")));
+#define g_bookmark_file_move_item IA__g_bookmark_file_move_item
+
+#endif
+#endif
+#if IN_HEADER(__G_CACHE_H__)
+#if IN_FILE(__G_CACHE_C__)
+extern __typeof (g_cache_destroy) IA__g_cache_destroy __attribute((visibility("hidden")));
+#define g_cache_destroy IA__g_cache_destroy
+
+extern __typeof (g_cache_insert) IA__g_cache_insert __attribute((visibility("hidden")));
+#define g_cache_insert IA__g_cache_insert
+
+extern __typeof (g_cache_key_foreach) IA__g_cache_key_foreach __attribute((visibility("hidden")));
+#define g_cache_key_foreach IA__g_cache_key_foreach
+
+extern __typeof (g_cache_new) IA__g_cache_new __attribute((visibility("hidden")));
+#define g_cache_new IA__g_cache_new
+
+extern __typeof (g_cache_remove) IA__g_cache_remove __attribute((visibility("hidden")));
+#define g_cache_remove IA__g_cache_remove
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_cache_value_foreach) IA__g_cache_value_foreach __attribute((visibility("hidden")));
+#define g_cache_value_foreach IA__g_cache_value_foreach
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_CHECKSUM_H__)
+#if IN_FILE(__G_CHECKSUM_C__)
+extern __typeof (g_checksum_type_get_length) IA__g_checksum_type_get_length __attribute((visibility("hidden")));
+#define g_checksum_type_get_length IA__g_checksum_type_get_length
+
+extern __typeof (g_checksum_new) IA__g_checksum_new __attribute((visibility("hidden")));
+#define g_checksum_new IA__g_checksum_new
+
+extern __typeof (g_checksum_copy) IA__g_checksum_copy __attribute((visibility("hidden")));
+#define g_checksum_copy IA__g_checksum_copy
+
+extern __typeof (g_checksum_free) IA__g_checksum_free __attribute((visibility("hidden")));
+#define g_checksum_free IA__g_checksum_free
+
+extern __typeof (g_checksum_update) IA__g_checksum_update __attribute((visibility("hidden")));
+#define g_checksum_update IA__g_checksum_update
+
+extern __typeof (g_checksum_reset) IA__g_checksum_reset __attribute((visibility("hidden")));
+#define g_checksum_reset IA__g_checksum_reset
+
+extern __typeof (g_checksum_get_string) IA__g_checksum_get_string __attribute((visibility("hidden")));
+#define g_checksum_get_string IA__g_checksum_get_string
+
+extern __typeof (g_checksum_get_digest) IA__g_checksum_get_digest __attribute((visibility("hidden")));
+#define g_checksum_get_digest IA__g_checksum_get_digest
+
+extern __typeof (g_compute_checksum_for_data) IA__g_compute_checksum_for_data __attribute((visibility("hidden")));
+#define g_compute_checksum_for_data IA__g_compute_checksum_for_data
+
+extern __typeof (g_compute_checksum_for_string) IA__g_compute_checksum_for_string __attribute((visibility("hidden")));
+#define g_compute_checksum_for_string IA__g_compute_checksum_for_string
+
+#endif
+#endif
+#if IN_HEADER(__G_COMPLETION_H__)
+#if IN_FILE(__G_COMPLETION_C__)
+extern __typeof (g_completion_add_items) IA__g_completion_add_items __attribute((visibility("hidden")));
+#define g_completion_add_items IA__g_completion_add_items
+
+extern __typeof (g_completion_clear_items) IA__g_completion_clear_items __attribute((visibility("hidden")));
+#define g_completion_clear_items IA__g_completion_clear_items
+
+extern __typeof (g_completion_complete) IA__g_completion_complete __attribute((visibility("hidden")));
+#define g_completion_complete IA__g_completion_complete
+
+extern __typeof (g_completion_complete_utf8) IA__g_completion_complete_utf8 __attribute((visibility("hidden")));
+#define g_completion_complete_utf8 IA__g_completion_complete_utf8
+
+extern __typeof (g_completion_free) IA__g_completion_free __attribute((visibility("hidden")));
+#define g_completion_free IA__g_completion_free
+
+extern __typeof (g_completion_new) IA__g_completion_new __attribute((visibility("hidden")));
+#define g_completion_new IA__g_completion_new
+
+extern __typeof (g_completion_remove_items) IA__g_completion_remove_items __attribute((visibility("hidden")));
+#define g_completion_remove_items IA__g_completion_remove_items
+
+extern __typeof (g_completion_set_compare) IA__g_completion_set_compare __attribute((visibility("hidden")));
+#define g_completion_set_compare IA__g_completion_set_compare
+
+#endif
+#endif
+#if IN_HEADER(__G_CONVERT_H__)
+#if IN_FILE(__G_CONVERT_C__)
+extern __typeof (g_get_filename_charsets) IA__g_get_filename_charsets __attribute((visibility("hidden")));
+#define g_get_filename_charsets IA__g_get_filename_charsets
+
+extern __typeof (g_convert) IA__g_convert __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_convert IA__g_convert
+
+extern __typeof (g_convert_error_quark) IA__g_convert_error_quark __attribute((visibility("hidden")));
+#define g_convert_error_quark IA__g_convert_error_quark
+
+extern __typeof (g_convert_with_fallback) IA__g_convert_with_fallback __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_convert_with_fallback IA__g_convert_with_fallback
+
+extern __typeof (g_convert_with_iconv) IA__g_convert_with_iconv __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_convert_with_iconv IA__g_convert_with_iconv
+
+extern __typeof (g_iconv) IA__g_iconv __attribute((visibility("hidden")));
+#define g_iconv IA__g_iconv
+
+extern __typeof (g_iconv_close) IA__g_iconv_close __attribute((visibility("hidden")));
+#define g_iconv_close IA__g_iconv_close
+
+extern __typeof (g_iconv_open) IA__g_iconv_open __attribute((visibility("hidden")));
+#define g_iconv_open IA__g_iconv_open
+
+extern __typeof (g_locale_from_utf8) IA__g_locale_from_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_locale_from_utf8 IA__g_locale_from_utf8
+
+extern __typeof (g_locale_to_utf8) IA__g_locale_to_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_locale_to_utf8 IA__g_locale_to_utf8
+
+extern __typeof (g_filename_display_name) IA__g_filename_display_name __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_display_name IA__g_filename_display_name
+
+extern __typeof (g_filename_display_basename) IA__g_filename_display_basename __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_display_basename IA__g_filename_display_basename
+
+#ifndef _WIN64
+extern __typeof (g_filename_from_uri) IA__g_filename_from_uri __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_from_uri IA__g_filename_from_uri
+
+extern __typeof (g_filename_from_utf8) IA__g_filename_from_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_from_utf8 IA__g_filename_from_utf8
+
+extern __typeof (g_filename_to_uri) IA__g_filename_to_uri __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_to_uri IA__g_filename_to_uri
+
+extern __typeof (g_filename_to_utf8) IA__g_filename_to_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_to_utf8 IA__g_filename_to_utf8
+
+#endif
+#ifdef G_OS_WIN32
+extern __typeof (g_filename_from_uri_utf8) IA__g_filename_from_uri_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_from_uri_utf8 IA__g_filename_from_uri_utf8
+
+extern __typeof (g_filename_from_utf8_utf8) IA__g_filename_from_utf8_utf8 __attribute((visibility("hidden")));
+#define g_filename_from_utf8_utf8 IA__g_filename_from_utf8_utf8
+
+extern __typeof (g_filename_to_uri_utf8) IA__g_filename_to_uri_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_filename_to_uri_utf8 IA__g_filename_to_uri_utf8
+
+extern __typeof (g_filename_to_utf8_utf8) IA__g_filename_to_utf8_utf8 __attribute((visibility("hidden")));
+#define g_filename_to_utf8_utf8 IA__g_filename_to_utf8_utf8
+
+#endif
+extern __typeof (g_uri_list_extract_uris) IA__g_uri_list_extract_uris __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_uri_list_extract_uris IA__g_uri_list_extract_uris
+
+#endif
+#endif
+#if IN_HEADER(__G_DATASET_H__)
+#if IN_FILE(__G_DATASET_C__)
+extern __typeof (g_datalist_clear) IA__g_datalist_clear __attribute((visibility("hidden")));
+#define g_datalist_clear IA__g_datalist_clear
+
+extern __typeof (g_datalist_foreach) IA__g_datalist_foreach __attribute((visibility("hidden")));
+#define g_datalist_foreach IA__g_datalist_foreach
+
+extern __typeof (g_datalist_get_flags) IA__g_datalist_get_flags __attribute((visibility("hidden")));
+#define g_datalist_get_flags IA__g_datalist_get_flags
+
+extern __typeof (g_datalist_id_get_data) IA__g_datalist_id_get_data __attribute((visibility("hidden")));
+#define g_datalist_id_get_data IA__g_datalist_id_get_data
+
+extern __typeof (g_datalist_id_remove_no_notify) IA__g_datalist_id_remove_no_notify __attribute((visibility("hidden")));
+#define g_datalist_id_remove_no_notify IA__g_datalist_id_remove_no_notify
+
+extern __typeof (g_datalist_id_set_data_full) IA__g_datalist_id_set_data_full __attribute((visibility("hidden")));
+#define g_datalist_id_set_data_full IA__g_datalist_id_set_data_full
+
+extern __typeof (g_datalist_set_flags) IA__g_datalist_set_flags __attribute((visibility("hidden")));
+#define g_datalist_set_flags IA__g_datalist_set_flags
+
+extern __typeof (g_datalist_unset_flags) IA__g_datalist_unset_flags __attribute((visibility("hidden")));
+#define g_datalist_unset_flags IA__g_datalist_unset_flags
+
+extern __typeof (g_datalist_init) IA__g_datalist_init __attribute((visibility("hidden")));
+#define g_datalist_init IA__g_datalist_init
+
+extern __typeof (g_dataset_destroy) IA__g_dataset_destroy __attribute((visibility("hidden")));
+#define g_dataset_destroy IA__g_dataset_destroy
+
+extern __typeof (g_dataset_foreach) IA__g_dataset_foreach __attribute((visibility("hidden")));
+#define g_dataset_foreach IA__g_dataset_foreach
+
+extern __typeof (g_dataset_id_get_data) IA__g_dataset_id_get_data __attribute((visibility("hidden")));
+#define g_dataset_id_get_data IA__g_dataset_id_get_data
+
+extern __typeof (g_dataset_id_remove_no_notify) IA__g_dataset_id_remove_no_notify __attribute((visibility("hidden")));
+#define g_dataset_id_remove_no_notify IA__g_dataset_id_remove_no_notify
+
+extern __typeof (g_dataset_id_set_data_full) IA__g_dataset_id_set_data_full __attribute((visibility("hidden")));
+#define g_dataset_id_set_data_full IA__g_dataset_id_set_data_full
+
+#endif
+#endif
+#if IN_HEADER(__G_QUARK_H__)
+#if IN_FILE(__G_DATASET_C__)
+extern __typeof (g_quark_from_static_string) IA__g_quark_from_static_string __attribute((visibility("hidden")));
+#define g_quark_from_static_string IA__g_quark_from_static_string
+
+extern __typeof (g_quark_from_string) IA__g_quark_from_string __attribute((visibility("hidden")));
+#define g_quark_from_string IA__g_quark_from_string
+
+extern __typeof (g_quark_to_string) IA__g_quark_to_string __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_quark_to_string IA__g_quark_to_string
+
+extern __typeof (g_quark_try_string) IA__g_quark_try_string __attribute((visibility("hidden")));
+#define g_quark_try_string IA__g_quark_try_string
+
+extern __typeof (g_intern_string) IA__g_intern_string __attribute((visibility("hidden")));
+#define g_intern_string IA__g_intern_string
+
+extern __typeof (g_intern_static_string) IA__g_intern_static_string __attribute((visibility("hidden")));
+#define g_intern_static_string IA__g_intern_static_string
+
+#endif
+#endif
+#if IN_HEADER(__G_DATE_H__)
+#if IN_FILE(__G_DATE_C__)
+extern __typeof (g_date_add_days) IA__g_date_add_days __attribute((visibility("hidden")));
+#define g_date_add_days IA__g_date_add_days
+
+extern __typeof (g_date_add_months) IA__g_date_add_months __attribute((visibility("hidden")));
+#define g_date_add_months IA__g_date_add_months
+
+extern __typeof (g_date_add_years) IA__g_date_add_years __attribute((visibility("hidden")));
+#define g_date_add_years IA__g_date_add_years
+
+extern __typeof (g_date_clamp) IA__g_date_clamp __attribute((visibility("hidden")));
+#define g_date_clamp IA__g_date_clamp
+
+extern __typeof (g_date_clear) IA__g_date_clear __attribute((visibility("hidden")));
+#define g_date_clear IA__g_date_clear
+
+extern __typeof (g_date_compare) IA__g_date_compare __attribute((visibility("hidden")));
+#define g_date_compare IA__g_date_compare
+
+extern __typeof (g_date_days_between) IA__g_date_days_between __attribute((visibility("hidden")));
+#define g_date_days_between IA__g_date_days_between
+
+extern __typeof (g_date_free) IA__g_date_free __attribute((visibility("hidden")));
+#define g_date_free IA__g_date_free
+
+extern __typeof (g_date_get_day) IA__g_date_get_day __attribute((visibility("hidden")));
+#define g_date_get_day IA__g_date_get_day
+
+extern __typeof (g_date_get_day_of_year) IA__g_date_get_day_of_year __attribute((visibility("hidden")));
+#define g_date_get_day_of_year IA__g_date_get_day_of_year
+
+extern __typeof (g_date_get_days_in_month) IA__g_date_get_days_in_month __attribute((visibility("hidden")));
+#define g_date_get_days_in_month IA__g_date_get_days_in_month
+
+extern __typeof (g_date_get_iso8601_week_of_year) IA__g_date_get_iso8601_week_of_year __attribute((visibility("hidden")));
+#define g_date_get_iso8601_week_of_year IA__g_date_get_iso8601_week_of_year
+
+extern __typeof (g_date_get_julian) IA__g_date_get_julian __attribute((visibility("hidden")));
+#define g_date_get_julian IA__g_date_get_julian
+
+extern __typeof (g_date_get_monday_week_of_year) IA__g_date_get_monday_week_of_year __attribute((visibility("hidden")));
+#define g_date_get_monday_week_of_year IA__g_date_get_monday_week_of_year
+
+extern __typeof (g_date_get_monday_weeks_in_year) IA__g_date_get_monday_weeks_in_year __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_get_monday_weeks_in_year IA__g_date_get_monday_weeks_in_year
+
+extern __typeof (g_date_get_month) IA__g_date_get_month __attribute((visibility("hidden")));
+#define g_date_get_month IA__g_date_get_month
+
+extern __typeof (g_date_get_sunday_week_of_year) IA__g_date_get_sunday_week_of_year __attribute((visibility("hidden")));
+#define g_date_get_sunday_week_of_year IA__g_date_get_sunday_week_of_year
+
+extern __typeof (g_date_get_sunday_weeks_in_year) IA__g_date_get_sunday_weeks_in_year __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_get_sunday_weeks_in_year IA__g_date_get_sunday_weeks_in_year
+
+extern __typeof (g_date_get_weekday) IA__g_date_get_weekday __attribute((visibility("hidden")));
+#define g_date_get_weekday IA__g_date_get_weekday
+
+extern __typeof (g_date_get_year) IA__g_date_get_year __attribute((visibility("hidden")));
+#define g_date_get_year IA__g_date_get_year
+
+extern __typeof (g_date_is_first_of_month) IA__g_date_is_first_of_month __attribute((visibility("hidden")));
+#define g_date_is_first_of_month IA__g_date_is_first_of_month
+
+extern __typeof (g_date_is_last_of_month) IA__g_date_is_last_of_month __attribute((visibility("hidden")));
+#define g_date_is_last_of_month IA__g_date_is_last_of_month
+
+extern __typeof (g_date_is_leap_year) IA__g_date_is_leap_year __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_is_leap_year IA__g_date_is_leap_year
+
+extern __typeof (g_date_new) IA__g_date_new __attribute((visibility("hidden")));
+#define g_date_new IA__g_date_new
+
+extern __typeof (g_date_new_dmy) IA__g_date_new_dmy __attribute((visibility("hidden")));
+#define g_date_new_dmy IA__g_date_new_dmy
+
+extern __typeof (g_date_new_julian) IA__g_date_new_julian __attribute((visibility("hidden")));
+#define g_date_new_julian IA__g_date_new_julian
+
+extern __typeof (g_date_order) IA__g_date_order __attribute((visibility("hidden")));
+#define g_date_order IA__g_date_order
+
+extern __typeof (g_date_set_day) IA__g_date_set_day __attribute((visibility("hidden")));
+#define g_date_set_day IA__g_date_set_day
+
+extern __typeof (g_date_set_dmy) IA__g_date_set_dmy __attribute((visibility("hidden")));
+#define g_date_set_dmy IA__g_date_set_dmy
+
+extern __typeof (g_date_set_julian) IA__g_date_set_julian __attribute((visibility("hidden")));
+#define g_date_set_julian IA__g_date_set_julian
+
+extern __typeof (g_date_set_month) IA__g_date_set_month __attribute((visibility("hidden")));
+#define g_date_set_month IA__g_date_set_month
+
+extern __typeof (g_date_set_parse) IA__g_date_set_parse __attribute((visibility("hidden")));
+#define g_date_set_parse IA__g_date_set_parse
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_date_set_time) IA__g_date_set_time __attribute((visibility("hidden")));
+#define g_date_set_time IA__g_date_set_time
+
+#endif
+extern __typeof (g_date_set_time_t) IA__g_date_set_time_t __attribute((visibility("hidden")));
+#define g_date_set_time_t IA__g_date_set_time_t
+
+extern __typeof (g_date_set_time_val) IA__g_date_set_time_val __attribute((visibility("hidden")));
+#define g_date_set_time_val IA__g_date_set_time_val
+
+extern __typeof (g_date_set_year) IA__g_date_set_year __attribute((visibility("hidden")));
+#define g_date_set_year IA__g_date_set_year
+
+extern __typeof (g_date_strftime) IA__g_date_strftime __attribute((visibility("hidden")));
+#define g_date_strftime IA__g_date_strftime
+
+extern __typeof (g_date_subtract_days) IA__g_date_subtract_days __attribute((visibility("hidden")));
+#define g_date_subtract_days IA__g_date_subtract_days
+
+extern __typeof (g_date_subtract_months) IA__g_date_subtract_months __attribute((visibility("hidden")));
+#define g_date_subtract_months IA__g_date_subtract_months
+
+extern __typeof (g_date_subtract_years) IA__g_date_subtract_years __attribute((visibility("hidden")));
+#define g_date_subtract_years IA__g_date_subtract_years
+
+extern __typeof (g_date_to_struct_tm) IA__g_date_to_struct_tm __attribute((visibility("hidden")));
+#define g_date_to_struct_tm IA__g_date_to_struct_tm
+
+extern __typeof (g_date_valid) IA__g_date_valid __attribute((visibility("hidden")));
+#define g_date_valid IA__g_date_valid
+
+extern __typeof (g_date_valid_day) IA__g_date_valid_day __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_valid_day IA__g_date_valid_day
+
+extern __typeof (g_date_valid_dmy) IA__g_date_valid_dmy __attribute((visibility("hidden")));
+#define g_date_valid_dmy IA__g_date_valid_dmy
+
+extern __typeof (g_date_valid_julian) IA__g_date_valid_julian __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_valid_julian IA__g_date_valid_julian
+
+extern __typeof (g_date_valid_month) IA__g_date_valid_month __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_valid_month IA__g_date_valid_month
+
+extern __typeof (g_date_valid_weekday) IA__g_date_valid_weekday __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_valid_weekday IA__g_date_valid_weekday
+
+extern __typeof (g_date_valid_year) IA__g_date_valid_year __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_date_valid_year IA__g_date_valid_year
+
+#endif
+#endif
+#if IN_HEADER(__G_DIR_H__)
+#if IN_FILE(__G_DIR_C__)
+extern __typeof (g_dir_close) IA__g_dir_close __attribute((visibility("hidden")));
+#define g_dir_close IA__g_dir_close
+
+#ifndef _WIN64
+extern __typeof (g_dir_open) IA__g_dir_open __attribute((visibility("hidden")));
+#define g_dir_open IA__g_dir_open
+
+extern __typeof (g_dir_read_name) IA__g_dir_read_name __attribute((visibility("hidden")));
+#define g_dir_read_name IA__g_dir_read_name
+
+#endif
+#ifdef G_OS_WIN32
+extern __typeof (g_dir_open_utf8) IA__g_dir_open_utf8 __attribute((visibility("hidden")));
+#define g_dir_open_utf8 IA__g_dir_open_utf8
+
+extern __typeof (g_dir_read_name_utf8) IA__g_dir_read_name_utf8 __attribute((visibility("hidden")));
+#define g_dir_read_name_utf8 IA__g_dir_read_name_utf8
+
+#endif
+extern __typeof (g_dir_rewind) IA__g_dir_rewind __attribute((visibility("hidden")));
+#define g_dir_rewind IA__g_dir_rewind
+
+#endif
+#endif
+#if IN_HEADER(__G_ERROR_H__)
+#if IN_FILE(__G_ERROR_C__)
+extern __typeof (g_clear_error) IA__g_clear_error __attribute((visibility("hidden")));
+#define g_clear_error IA__g_clear_error
+
+extern __typeof (g_error_copy) IA__g_error_copy __attribute((visibility("hidden")));
+#define g_error_copy IA__g_error_copy
+
+extern __typeof (g_error_free) IA__g_error_free __attribute((visibility("hidden")));
+#define g_error_free IA__g_error_free
+
+extern __typeof (g_error_matches) IA__g_error_matches __attribute((visibility("hidden")));
+#define g_error_matches IA__g_error_matches
+
+extern __typeof (g_error_new) IA__g_error_new __attribute((visibility("hidden"))) G_GNUC_PRINTF(3,4);
+#define g_error_new IA__g_error_new
+
+extern __typeof (g_error_new_literal) IA__g_error_new_literal __attribute((visibility("hidden")));
+#define g_error_new_literal IA__g_error_new_literal
+
+extern __typeof (g_propagate_error) IA__g_propagate_error __attribute((visibility("hidden")));
+#define g_propagate_error IA__g_propagate_error
+
+extern __typeof (g_set_error) IA__g_set_error __attribute((visibility("hidden"))) G_GNUC_PRINTF(4,5);
+#define g_set_error IA__g_set_error
+
+extern __typeof (g_set_error_literal) IA__g_set_error_literal __attribute((visibility("hidden")));
+#define g_set_error_literal IA__g_set_error_literal
+
+extern __typeof (g_prefix_error) IA__g_prefix_error __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_prefix_error IA__g_prefix_error
+
+extern __typeof (g_propagate_prefixed_error) IA__g_propagate_prefixed_error __attribute((visibility("hidden"))) G_GNUC_PRINTF(3,4);
+#define g_propagate_prefixed_error IA__g_propagate_prefixed_error
+
+#endif
+#endif
+#if IN_HEADER(__G_FILEUTILS_H__)
+#if IN_FILE(__G_FILEUTILS_C__)
+extern __typeof (g_build_filename) IA__g_build_filename __attribute((visibility("hidden"))) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+#define g_build_filename IA__g_build_filename
+
+extern __typeof (g_build_filenamev) IA__g_build_filenamev __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_build_filenamev IA__g_build_filenamev
+
+extern __typeof (g_build_path) IA__g_build_path __attribute((visibility("hidden"))) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+#define g_build_path IA__g_build_path
+
+extern __typeof (g_build_pathv) IA__g_build_pathv __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_build_pathv IA__g_build_pathv
+
+extern __typeof (g_file_error_from_errno) IA__g_file_error_from_errno __attribute((visibility("hidden")));
+#define g_file_error_from_errno IA__g_file_error_from_errno
+
+extern __typeof (g_file_error_quark) IA__g_file_error_quark __attribute((visibility("hidden")));
+#define g_file_error_quark IA__g_file_error_quark
+
+#ifndef _WIN64
+extern __typeof (g_file_get_contents) IA__g_file_get_contents __attribute((visibility("hidden")));
+#define g_file_get_contents IA__g_file_get_contents
+
+#endif
+extern __typeof (g_file_set_contents) IA__g_file_set_contents __attribute((visibility("hidden")));
+#define g_file_set_contents IA__g_file_set_contents
+
+#ifndef _WIN64
+extern __typeof (g_file_open_tmp) IA__g_file_open_tmp __attribute((visibility("hidden")));
+#define g_file_open_tmp IA__g_file_open_tmp
+
+extern __typeof (g_file_test) IA__g_file_test __attribute((visibility("hidden")));
+#define g_file_test IA__g_file_test
+
+#endif
+extern __typeof (g_file_read_link) IA__g_file_read_link __attribute((visibility("hidden")));
+#define g_file_read_link IA__g_file_read_link
+
+extern __typeof (g_format_size_for_display) IA__g_format_size_for_display __attribute((visibility("hidden")));
+#define g_format_size_for_display IA__g_format_size_for_display
+
+#ifndef _WIN64
+extern __typeof (g_mkstemp) IA__g_mkstemp __attribute((visibility("hidden")));
+#define g_mkstemp IA__g_mkstemp
+
+#endif
+extern __typeof (g_mkdir_with_parents) IA__g_mkdir_with_parents __attribute((visibility("hidden")));
+#define g_mkdir_with_parents IA__g_mkdir_with_parents
+
+#ifdef G_OS_WIN32
+extern __typeof (g_file_get_contents_utf8) IA__g_file_get_contents_utf8 __attribute((visibility("hidden")));
+#define g_file_get_contents_utf8 IA__g_file_get_contents_utf8
+
+extern __typeof (g_file_open_tmp_utf8) IA__g_file_open_tmp_utf8 __attribute((visibility("hidden")));
+#define g_file_open_tmp_utf8 IA__g_file_open_tmp_utf8
+
+extern __typeof (g_file_test_utf8) IA__g_file_test_utf8 __attribute((visibility("hidden")));
+#define g_file_test_utf8 IA__g_file_test_utf8
+
+extern __typeof (g_mkstemp_utf8) IA__g_mkstemp_utf8 __attribute((visibility("hidden")));
+#define g_mkstemp_utf8 IA__g_mkstemp_utf8
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_HASH_H__)
+#if IN_FILE(__G_HASH_C__)
+extern __typeof (g_hash_table_destroy) IA__g_hash_table_destroy __attribute((visibility("hidden")));
+#define g_hash_table_destroy IA__g_hash_table_destroy
+
+extern __typeof (g_hash_table_unref) IA__g_hash_table_unref __attribute((visibility("hidden")));
+#define g_hash_table_unref IA__g_hash_table_unref
+
+extern __typeof (g_hash_table_ref) IA__g_hash_table_ref __attribute((visibility("hidden")));
+#define g_hash_table_ref IA__g_hash_table_ref
+
+extern __typeof (g_hash_table_find) IA__g_hash_table_find __attribute((visibility("hidden")));
+#define g_hash_table_find IA__g_hash_table_find
+
+extern __typeof (g_hash_table_foreach) IA__g_hash_table_foreach __attribute((visibility("hidden")));
+#define g_hash_table_foreach IA__g_hash_table_foreach
+
+extern __typeof (g_hash_table_foreach_remove) IA__g_hash_table_foreach_remove __attribute((visibility("hidden")));
+#define g_hash_table_foreach_remove IA__g_hash_table_foreach_remove
+
+extern __typeof (g_hash_table_foreach_steal) IA__g_hash_table_foreach_steal __attribute((visibility("hidden")));
+#define g_hash_table_foreach_steal IA__g_hash_table_foreach_steal
+
+extern __typeof (g_hash_table_get_keys) IA__g_hash_table_get_keys __attribute((visibility("hidden")));
+#define g_hash_table_get_keys IA__g_hash_table_get_keys
+
+extern __typeof (g_hash_table_get_values) IA__g_hash_table_get_values __attribute((visibility("hidden")));
+#define g_hash_table_get_values IA__g_hash_table_get_values
+
+extern __typeof (g_hash_table_insert) IA__g_hash_table_insert __attribute((visibility("hidden")));
+#define g_hash_table_insert IA__g_hash_table_insert
+
+extern __typeof (g_hash_table_lookup) IA__g_hash_table_lookup __attribute((visibility("hidden")));
+#define g_hash_table_lookup IA__g_hash_table_lookup
+
+extern __typeof (g_hash_table_lookup_extended) IA__g_hash_table_lookup_extended __attribute((visibility("hidden")));
+#define g_hash_table_lookup_extended IA__g_hash_table_lookup_extended
+
+extern __typeof (g_hash_table_new) IA__g_hash_table_new __attribute((visibility("hidden")));
+#define g_hash_table_new IA__g_hash_table_new
+
+extern __typeof (g_hash_table_new_full) IA__g_hash_table_new_full __attribute((visibility("hidden")));
+#define g_hash_table_new_full IA__g_hash_table_new_full
+
+extern __typeof (g_hash_table_remove) IA__g_hash_table_remove __attribute((visibility("hidden")));
+#define g_hash_table_remove IA__g_hash_table_remove
+
+extern __typeof (g_hash_table_remove_all) IA__g_hash_table_remove_all __attribute((visibility("hidden")));
+#define g_hash_table_remove_all IA__g_hash_table_remove_all
+
+extern __typeof (g_hash_table_replace) IA__g_hash_table_replace __attribute((visibility("hidden")));
+#define g_hash_table_replace IA__g_hash_table_replace
+
+extern __typeof (g_hash_table_size) IA__g_hash_table_size __attribute((visibility("hidden")));
+#define g_hash_table_size IA__g_hash_table_size
+
+extern __typeof (g_hash_table_steal) IA__g_hash_table_steal __attribute((visibility("hidden")));
+#define g_hash_table_steal IA__g_hash_table_steal
+
+extern __typeof (g_hash_table_steal_all) IA__g_hash_table_steal_all __attribute((visibility("hidden")));
+#define g_hash_table_steal_all IA__g_hash_table_steal_all
+
+extern __typeof (g_hash_table_iter_init) IA__g_hash_table_iter_init __attribute((visibility("hidden")));
+#define g_hash_table_iter_init IA__g_hash_table_iter_init
+
+extern __typeof (g_hash_table_iter_next) IA__g_hash_table_iter_next __attribute((visibility("hidden")));
+#define g_hash_table_iter_next IA__g_hash_table_iter_next
+
+extern __typeof (g_hash_table_iter_get_hash_table) IA__g_hash_table_iter_get_hash_table __attribute((visibility("hidden")));
+#define g_hash_table_iter_get_hash_table IA__g_hash_table_iter_get_hash_table
+
+extern __typeof (g_hash_table_iter_remove) IA__g_hash_table_iter_remove __attribute((visibility("hidden")));
+#define g_hash_table_iter_remove IA__g_hash_table_iter_remove
+
+extern __typeof (g_hash_table_iter_steal) IA__g_hash_table_iter_steal __attribute((visibility("hidden")));
+#define g_hash_table_iter_steal IA__g_hash_table_iter_steal
+
+#endif
+#endif
+#if IN_HEADER(__G_HOOK_H__)
+#if IN_FILE(__G_HOOK_C__)
+extern __typeof (g_hook_alloc) IA__g_hook_alloc __attribute((visibility("hidden")));
+#define g_hook_alloc IA__g_hook_alloc
+
+extern __typeof (g_hook_compare_ids) IA__g_hook_compare_ids __attribute((visibility("hidden")));
+#define g_hook_compare_ids IA__g_hook_compare_ids
+
+extern __typeof (g_hook_destroy) IA__g_hook_destroy __attribute((visibility("hidden")));
+#define g_hook_destroy IA__g_hook_destroy
+
+extern __typeof (g_hook_destroy_link) IA__g_hook_destroy_link __attribute((visibility("hidden")));
+#define g_hook_destroy_link IA__g_hook_destroy_link
+
+extern __typeof (g_hook_find) IA__g_hook_find __attribute((visibility("hidden")));
+#define g_hook_find IA__g_hook_find
+
+extern __typeof (g_hook_find_data) IA__g_hook_find_data __attribute((visibility("hidden")));
+#define g_hook_find_data IA__g_hook_find_data
+
+extern __typeof (g_hook_find_func) IA__g_hook_find_func __attribute((visibility("hidden")));
+#define g_hook_find_func IA__g_hook_find_func
+
+extern __typeof (g_hook_find_func_data) IA__g_hook_find_func_data __attribute((visibility("hidden")));
+#define g_hook_find_func_data IA__g_hook_find_func_data
+
+extern __typeof (g_hook_first_valid) IA__g_hook_first_valid __attribute((visibility("hidden")));
+#define g_hook_first_valid IA__g_hook_first_valid
+
+extern __typeof (g_hook_free) IA__g_hook_free __attribute((visibility("hidden")));
+#define g_hook_free IA__g_hook_free
+
+extern __typeof (g_hook_get) IA__g_hook_get __attribute((visibility("hidden")));
+#define g_hook_get IA__g_hook_get
+
+extern __typeof (g_hook_insert_before) IA__g_hook_insert_before __attribute((visibility("hidden")));
+#define g_hook_insert_before IA__g_hook_insert_before
+
+extern __typeof (g_hook_insert_sorted) IA__g_hook_insert_sorted __attribute((visibility("hidden")));
+#define g_hook_insert_sorted IA__g_hook_insert_sorted
+
+extern __typeof (g_hook_list_clear) IA__g_hook_list_clear __attribute((visibility("hidden")));
+#define g_hook_list_clear IA__g_hook_list_clear
+
+extern __typeof (g_hook_list_init) IA__g_hook_list_init __attribute((visibility("hidden")));
+#define g_hook_list_init IA__g_hook_list_init
+
+extern __typeof (g_hook_list_invoke) IA__g_hook_list_invoke __attribute((visibility("hidden")));
+#define g_hook_list_invoke IA__g_hook_list_invoke
+
+extern __typeof (g_hook_list_invoke_check) IA__g_hook_list_invoke_check __attribute((visibility("hidden")));
+#define g_hook_list_invoke_check IA__g_hook_list_invoke_check
+
+extern __typeof (g_hook_list_marshal) IA__g_hook_list_marshal __attribute((visibility("hidden")));
+#define g_hook_list_marshal IA__g_hook_list_marshal
+
+extern __typeof (g_hook_list_marshal_check) IA__g_hook_list_marshal_check __attribute((visibility("hidden")));
+#define g_hook_list_marshal_check IA__g_hook_list_marshal_check
+
+extern __typeof (g_hook_next_valid) IA__g_hook_next_valid __attribute((visibility("hidden")));
+#define g_hook_next_valid IA__g_hook_next_valid
+
+extern __typeof (g_hook_prepend) IA__g_hook_prepend __attribute((visibility("hidden")));
+#define g_hook_prepend IA__g_hook_prepend
+
+extern __typeof (g_hook_ref) IA__g_hook_ref __attribute((visibility("hidden")));
+#define g_hook_ref IA__g_hook_ref
+
+extern __typeof (g_hook_unref) IA__g_hook_unref __attribute((visibility("hidden")));
+#define g_hook_unref IA__g_hook_unref
+
+#endif
+#endif
+#if IN_HEADER(__G_IOCHANNEL_H__)
+#if IN_FILE(__G_IOCHANNEL_C__)
+extern __typeof (g_io_add_watch) IA__g_io_add_watch __attribute((visibility("hidden")));
+#define g_io_add_watch IA__g_io_add_watch
+
+extern __typeof (g_io_add_watch_full) IA__g_io_add_watch_full __attribute((visibility("hidden")));
+#define g_io_add_watch_full IA__g_io_add_watch_full
+
+extern __typeof (g_io_create_watch) IA__g_io_create_watch __attribute((visibility("hidden")));
+#define g_io_create_watch IA__g_io_create_watch
+
+extern __typeof (g_io_channel_error_from_errno) IA__g_io_channel_error_from_errno __attribute((visibility("hidden")));
+#define g_io_channel_error_from_errno IA__g_io_channel_error_from_errno
+
+extern __typeof (g_io_channel_error_quark) IA__g_io_channel_error_quark __attribute((visibility("hidden")));
+#define g_io_channel_error_quark IA__g_io_channel_error_quark
+
+extern __typeof (g_io_channel_flush) IA__g_io_channel_flush __attribute((visibility("hidden")));
+#define g_io_channel_flush IA__g_io_channel_flush
+
+extern __typeof (g_io_channel_get_buffer_condition) IA__g_io_channel_get_buffer_condition __attribute((visibility("hidden")));
+#define g_io_channel_get_buffer_condition IA__g_io_channel_get_buffer_condition
+
+extern __typeof (g_io_channel_get_buffered) IA__g_io_channel_get_buffered __attribute((visibility("hidden")));
+#define g_io_channel_get_buffered IA__g_io_channel_get_buffered
+
+extern __typeof (g_io_channel_get_buffer_size) IA__g_io_channel_get_buffer_size __attribute((visibility("hidden")));
+#define g_io_channel_get_buffer_size IA__g_io_channel_get_buffer_size
+
+extern __typeof (g_io_channel_get_close_on_unref) IA__g_io_channel_get_close_on_unref __attribute((visibility("hidden")));
+#define g_io_channel_get_close_on_unref IA__g_io_channel_get_close_on_unref
+
+extern __typeof (g_io_channel_get_encoding) IA__g_io_channel_get_encoding __attribute((visibility("hidden")));
+#define g_io_channel_get_encoding IA__g_io_channel_get_encoding
+
+extern __typeof (g_io_channel_get_flags) IA__g_io_channel_get_flags __attribute((visibility("hidden")));
+#define g_io_channel_get_flags IA__g_io_channel_get_flags
+
+extern __typeof (g_io_channel_get_line_term) IA__g_io_channel_get_line_term __attribute((visibility("hidden")));
+#define g_io_channel_get_line_term IA__g_io_channel_get_line_term
+
+extern __typeof (g_io_channel_init) IA__g_io_channel_init __attribute((visibility("hidden")));
+#define g_io_channel_init IA__g_io_channel_init
+
+extern __typeof (g_io_channel_read_chars) IA__g_io_channel_read_chars __attribute((visibility("hidden")));
+#define g_io_channel_read_chars IA__g_io_channel_read_chars
+
+extern __typeof (g_io_channel_read_line) IA__g_io_channel_read_line __attribute((visibility("hidden")));
+#define g_io_channel_read_line IA__g_io_channel_read_line
+
+extern __typeof (g_io_channel_read_line_string) IA__g_io_channel_read_line_string __attribute((visibility("hidden")));
+#define g_io_channel_read_line_string IA__g_io_channel_read_line_string
+
+extern __typeof (g_io_channel_read_to_end) IA__g_io_channel_read_to_end __attribute((visibility("hidden")));
+#define g_io_channel_read_to_end IA__g_io_channel_read_to_end
+
+extern __typeof (g_io_channel_read_unichar) IA__g_io_channel_read_unichar __attribute((visibility("hidden")));
+#define g_io_channel_read_unichar IA__g_io_channel_read_unichar
+
+extern __typeof (g_io_channel_ref) IA__g_io_channel_ref __attribute((visibility("hidden")));
+#define g_io_channel_ref IA__g_io_channel_ref
+
+extern __typeof (g_io_channel_seek_position) IA__g_io_channel_seek_position __attribute((visibility("hidden")));
+#define g_io_channel_seek_position IA__g_io_channel_seek_position
+
+extern __typeof (g_io_channel_set_buffered) IA__g_io_channel_set_buffered __attribute((visibility("hidden")));
+#define g_io_channel_set_buffered IA__g_io_channel_set_buffered
+
+extern __typeof (g_io_channel_set_buffer_size) IA__g_io_channel_set_buffer_size __attribute((visibility("hidden")));
+#define g_io_channel_set_buffer_size IA__g_io_channel_set_buffer_size
+
+extern __typeof (g_io_channel_set_close_on_unref) IA__g_io_channel_set_close_on_unref __attribute((visibility("hidden")));
+#define g_io_channel_set_close_on_unref IA__g_io_channel_set_close_on_unref
+
+extern __typeof (g_io_channel_set_encoding) IA__g_io_channel_set_encoding __attribute((visibility("hidden")));
+#define g_io_channel_set_encoding IA__g_io_channel_set_encoding
+
+extern __typeof (g_io_channel_set_flags) IA__g_io_channel_set_flags __attribute((visibility("hidden")));
+#define g_io_channel_set_flags IA__g_io_channel_set_flags
+
+extern __typeof (g_io_channel_set_line_term) IA__g_io_channel_set_line_term __attribute((visibility("hidden")));
+#define g_io_channel_set_line_term IA__g_io_channel_set_line_term
+
+extern __typeof (g_io_channel_shutdown) IA__g_io_channel_shutdown __attribute((visibility("hidden")));
+#define g_io_channel_shutdown IA__g_io_channel_shutdown
+
+extern __typeof (g_io_channel_unref) IA__g_io_channel_unref __attribute((visibility("hidden")));
+#define g_io_channel_unref IA__g_io_channel_unref
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_io_channel_close) IA__g_io_channel_close __attribute((visibility("hidden")));
+#define g_io_channel_close IA__g_io_channel_close
+
+extern __typeof (g_io_channel_read) IA__g_io_channel_read __attribute((visibility("hidden")));
+#define g_io_channel_read IA__g_io_channel_read
+
+extern __typeof (g_io_channel_seek) IA__g_io_channel_seek __attribute((visibility("hidden")));
+#define g_io_channel_seek IA__g_io_channel_seek
+
+extern __typeof (g_io_channel_write) IA__g_io_channel_write __attribute((visibility("hidden")));
+#define g_io_channel_write IA__g_io_channel_write
+
+#endif
+extern __typeof (g_io_channel_write_chars) IA__g_io_channel_write_chars __attribute((visibility("hidden")));
+#define g_io_channel_write_chars IA__g_io_channel_write_chars
+
+extern __typeof (g_io_channel_write_unichar) IA__g_io_channel_write_unichar __attribute((visibility("hidden")));
+#define g_io_channel_write_unichar IA__g_io_channel_write_unichar
+
+#endif
+#endif
+#if IN_HEADER(__G_IOCHANNEL_H__)
+#if IN_FILE(__G_IO_UNIX_C__)
+#ifdef G_OS_UNIX
+extern __typeof (g_io_channel_unix_get_fd) IA__g_io_channel_unix_get_fd __attribute((visibility("hidden")));
+#define g_io_channel_unix_get_fd IA__g_io_channel_unix_get_fd
+
+extern __typeof (g_io_channel_unix_new) IA__g_io_channel_unix_new __attribute((visibility("hidden")));
+#define g_io_channel_unix_new IA__g_io_channel_unix_new
+
+extern __typeof (g_io_channel_new_file) IA__g_io_channel_new_file __attribute((visibility("hidden")));
+#define g_io_channel_new_file IA__g_io_channel_new_file
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_IOCHANNEL_H__)
+#if IN_FILE(__G_IO_WIN32_C__)
+#ifdef G_OS_WIN32
+extern __typeof (g_io_channel_unix_get_fd) IA__g_io_channel_unix_get_fd __attribute((visibility("hidden")));
+#define g_io_channel_unix_get_fd IA__g_io_channel_unix_get_fd
+
+extern __typeof (g_io_channel_unix_new) IA__g_io_channel_unix_new __attribute((visibility("hidden")));
+#define g_io_channel_unix_new IA__g_io_channel_unix_new
+
+#ifndef _WIN64
+extern __typeof (g_io_channel_new_file) IA__g_io_channel_new_file __attribute((visibility("hidden")));
+#define g_io_channel_new_file IA__g_io_channel_new_file
+
+#endif
+extern __typeof (g_io_channel_new_file_utf8) IA__g_io_channel_new_file_utf8 __attribute((visibility("hidden")));
+#define g_io_channel_new_file_utf8 IA__g_io_channel_new_file_utf8
+
+extern __typeof (g_io_channel_win32_get_fd) IA__g_io_channel_win32_get_fd __attribute((visibility("hidden")));
+#define g_io_channel_win32_get_fd IA__g_io_channel_win32_get_fd
+
+extern __typeof (g_io_channel_win32_make_pollfd) IA__g_io_channel_win32_make_pollfd __attribute((visibility("hidden")));
+#define g_io_channel_win32_make_pollfd IA__g_io_channel_win32_make_pollfd
+
+extern __typeof (g_io_channel_win32_new_fd) IA__g_io_channel_win32_new_fd __attribute((visibility("hidden")));
+#define g_io_channel_win32_new_fd IA__g_io_channel_win32_new_fd
+
+extern __typeof (g_io_channel_win32_new_messages) IA__g_io_channel_win32_new_messages __attribute((visibility("hidden")));
+#define g_io_channel_win32_new_messages IA__g_io_channel_win32_new_messages
+
+extern __typeof (g_io_channel_win32_new_socket) IA__g_io_channel_win32_new_socket __attribute((visibility("hidden")));
+#define g_io_channel_win32_new_socket IA__g_io_channel_win32_new_socket
+
+#ifndef _WIN64
+extern __typeof (g_io_channel_win32_new_stream_socket) IA__g_io_channel_win32_new_stream_socket __attribute((visibility("hidden")));
+#define g_io_channel_win32_new_stream_socket IA__g_io_channel_win32_new_stream_socket
+
+#endif
+extern __typeof (g_io_channel_win32_poll) IA__g_io_channel_win32_poll __attribute((visibility("hidden")));
+#define g_io_channel_win32_poll IA__g_io_channel_win32_poll
+
+extern __typeof (g_io_channel_win32_set_debug) IA__g_io_channel_win32_set_debug __attribute((visibility("hidden")));
+#define g_io_channel_win32_set_debug IA__g_io_channel_win32_set_debug
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_KEY_FILE_H__)
+#if IN_FILE(__G_KEY_FILE_C__)
+extern __typeof (g_key_file_error_quark) IA__g_key_file_error_quark __attribute((visibility("hidden")));
+#define g_key_file_error_quark IA__g_key_file_error_quark
+
+extern __typeof (g_key_file_free) IA__g_key_file_free __attribute((visibility("hidden")));
+#define g_key_file_free IA__g_key_file_free
+
+extern __typeof (g_key_file_get_boolean) IA__g_key_file_get_boolean __attribute((visibility("hidden")));
+#define g_key_file_get_boolean IA__g_key_file_get_boolean
+
+extern __typeof (g_key_file_get_boolean_list) IA__g_key_file_get_boolean_list __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_boolean_list IA__g_key_file_get_boolean_list
+
+extern __typeof (g_key_file_get_comment) IA__g_key_file_get_comment __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_comment IA__g_key_file_get_comment
+
+extern __typeof (g_key_file_get_groups) IA__g_key_file_get_groups __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_groups IA__g_key_file_get_groups
+
+extern __typeof (g_key_file_get_double) IA__g_key_file_get_double __attribute((visibility("hidden")));
+#define g_key_file_get_double IA__g_key_file_get_double
+
+extern __typeof (g_key_file_get_double_list) IA__g_key_file_get_double_list __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_double_list IA__g_key_file_get_double_list
+
+extern __typeof (g_key_file_get_integer) IA__g_key_file_get_integer __attribute((visibility("hidden")));
+#define g_key_file_get_integer IA__g_key_file_get_integer
+
+extern __typeof (g_key_file_get_integer_list) IA__g_key_file_get_integer_list __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_integer_list IA__g_key_file_get_integer_list
+
+extern __typeof (g_key_file_get_keys) IA__g_key_file_get_keys __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_keys IA__g_key_file_get_keys
+
+extern __typeof (g_key_file_get_locale_string) IA__g_key_file_get_locale_string __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_locale_string IA__g_key_file_get_locale_string
+
+extern __typeof (g_key_file_get_locale_string_list) IA__g_key_file_get_locale_string_list __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_locale_string_list IA__g_key_file_get_locale_string_list
+
+extern __typeof (g_key_file_get_start_group) IA__g_key_file_get_start_group __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_start_group IA__g_key_file_get_start_group
+
+extern __typeof (g_key_file_get_string) IA__g_key_file_get_string __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_string IA__g_key_file_get_string
+
+extern __typeof (g_key_file_get_string_list) IA__g_key_file_get_string_list __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_string_list IA__g_key_file_get_string_list
+
+extern __typeof (g_key_file_get_value) IA__g_key_file_get_value __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_get_value IA__g_key_file_get_value
+
+extern __typeof (g_key_file_has_group) IA__g_key_file_has_group __attribute((visibility("hidden")));
+#define g_key_file_has_group IA__g_key_file_has_group
+
+extern __typeof (g_key_file_has_key) IA__g_key_file_has_key __attribute((visibility("hidden")));
+#define g_key_file_has_key IA__g_key_file_has_key
+
+extern __typeof (g_key_file_load_from_dirs) IA__g_key_file_load_from_dirs __attribute((visibility("hidden")));
+#define g_key_file_load_from_dirs IA__g_key_file_load_from_dirs
+
+extern __typeof (g_key_file_load_from_data) IA__g_key_file_load_from_data __attribute((visibility("hidden")));
+#define g_key_file_load_from_data IA__g_key_file_load_from_data
+
+extern __typeof (g_key_file_load_from_data_dirs) IA__g_key_file_load_from_data_dirs __attribute((visibility("hidden")));
+#define g_key_file_load_from_data_dirs IA__g_key_file_load_from_data_dirs
+
+extern __typeof (g_key_file_load_from_file) IA__g_key_file_load_from_file __attribute((visibility("hidden")));
+#define g_key_file_load_from_file IA__g_key_file_load_from_file
+
+extern __typeof (g_key_file_new) IA__g_key_file_new __attribute((visibility("hidden")));
+#define g_key_file_new IA__g_key_file_new
+
+extern __typeof (g_key_file_remove_comment) IA__g_key_file_remove_comment __attribute((visibility("hidden")));
+#define g_key_file_remove_comment IA__g_key_file_remove_comment
+
+extern __typeof (g_key_file_remove_group) IA__g_key_file_remove_group __attribute((visibility("hidden")));
+#define g_key_file_remove_group IA__g_key_file_remove_group
+
+extern __typeof (g_key_file_remove_key) IA__g_key_file_remove_key __attribute((visibility("hidden")));
+#define g_key_file_remove_key IA__g_key_file_remove_key
+
+extern __typeof (g_key_file_set_boolean) IA__g_key_file_set_boolean __attribute((visibility("hidden")));
+#define g_key_file_set_boolean IA__g_key_file_set_boolean
+
+extern __typeof (g_key_file_set_boolean_list) IA__g_key_file_set_boolean_list __attribute((visibility("hidden")));
+#define g_key_file_set_boolean_list IA__g_key_file_set_boolean_list
+
+extern __typeof (g_key_file_set_comment) IA__g_key_file_set_comment __attribute((visibility("hidden")));
+#define g_key_file_set_comment IA__g_key_file_set_comment
+
+extern __typeof (g_key_file_set_double) IA__g_key_file_set_double __attribute((visibility("hidden")));
+#define g_key_file_set_double IA__g_key_file_set_double
+
+extern __typeof (g_key_file_set_double_list) IA__g_key_file_set_double_list __attribute((visibility("hidden")));
+#define g_key_file_set_double_list IA__g_key_file_set_double_list
+
+extern __typeof (g_key_file_set_integer) IA__g_key_file_set_integer __attribute((visibility("hidden")));
+#define g_key_file_set_integer IA__g_key_file_set_integer
+
+extern __typeof (g_key_file_set_integer_list) IA__g_key_file_set_integer_list __attribute((visibility("hidden")));
+#define g_key_file_set_integer_list IA__g_key_file_set_integer_list
+
+extern __typeof (g_key_file_set_list_separator) IA__g_key_file_set_list_separator __attribute((visibility("hidden")));
+#define g_key_file_set_list_separator IA__g_key_file_set_list_separator
+
+extern __typeof (g_key_file_set_locale_string) IA__g_key_file_set_locale_string __attribute((visibility("hidden")));
+#define g_key_file_set_locale_string IA__g_key_file_set_locale_string
+
+extern __typeof (g_key_file_set_locale_string_list) IA__g_key_file_set_locale_string_list __attribute((visibility("hidden")));
+#define g_key_file_set_locale_string_list IA__g_key_file_set_locale_string_list
+
+extern __typeof (g_key_file_set_string) IA__g_key_file_set_string __attribute((visibility("hidden")));
+#define g_key_file_set_string IA__g_key_file_set_string
+
+extern __typeof (g_key_file_set_string_list) IA__g_key_file_set_string_list __attribute((visibility("hidden")));
+#define g_key_file_set_string_list IA__g_key_file_set_string_list
+
+extern __typeof (g_key_file_set_value) IA__g_key_file_set_value __attribute((visibility("hidden")));
+#define g_key_file_set_value IA__g_key_file_set_value
+
+extern __typeof (g_key_file_to_data) IA__g_key_file_to_data __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_key_file_to_data IA__g_key_file_to_data
+
+#endif
+#endif
+#if IN_HEADER(__G_LIST_H__)
+#if IN_FILE(__G_LIST_C__)
+extern __typeof (g_list_alloc) IA__g_list_alloc __attribute((visibility("hidden")));
+#define g_list_alloc IA__g_list_alloc
+
+extern __typeof (g_list_append) IA__g_list_append __attribute((visibility("hidden")));
+#define g_list_append IA__g_list_append
+
+extern __typeof (g_list_concat) IA__g_list_concat __attribute((visibility("hidden")));
+#define g_list_concat IA__g_list_concat
+
+extern __typeof (g_list_copy) IA__g_list_copy __attribute((visibility("hidden")));
+#define g_list_copy IA__g_list_copy
+
+extern __typeof (g_list_delete_link) IA__g_list_delete_link __attribute((visibility("hidden")));
+#define g_list_delete_link IA__g_list_delete_link
+
+extern __typeof (g_list_find) IA__g_list_find __attribute((visibility("hidden")));
+#define g_list_find IA__g_list_find
+
+extern __typeof (g_list_find_custom) IA__g_list_find_custom __attribute((visibility("hidden")));
+#define g_list_find_custom IA__g_list_find_custom
+
+extern __typeof (g_list_first) IA__g_list_first __attribute((visibility("hidden")));
+#define g_list_first IA__g_list_first
+
+extern __typeof (g_list_foreach) IA__g_list_foreach __attribute((visibility("hidden")));
+#define g_list_foreach IA__g_list_foreach
+
+extern __typeof (g_list_free) IA__g_list_free __attribute((visibility("hidden")));
+#define g_list_free IA__g_list_free
+
+extern __typeof (g_list_free_1) IA__g_list_free_1 __attribute((visibility("hidden")));
+#define g_list_free_1 IA__g_list_free_1
+
+extern __typeof (g_list_index) IA__g_list_index __attribute((visibility("hidden")));
+#define g_list_index IA__g_list_index
+
+extern __typeof (g_list_insert) IA__g_list_insert __attribute((visibility("hidden")));
+#define g_list_insert IA__g_list_insert
+
+extern __typeof (g_list_insert_before) IA__g_list_insert_before __attribute((visibility("hidden")));
+#define g_list_insert_before IA__g_list_insert_before
+
+extern __typeof (g_list_insert_sorted) IA__g_list_insert_sorted __attribute((visibility("hidden")));
+#define g_list_insert_sorted IA__g_list_insert_sorted
+
+extern __typeof (g_list_insert_sorted_with_data) IA__g_list_insert_sorted_with_data __attribute((visibility("hidden")));
+#define g_list_insert_sorted_with_data IA__g_list_insert_sorted_with_data
+
+extern __typeof (g_list_last) IA__g_list_last __attribute((visibility("hidden")));
+#define g_list_last IA__g_list_last
+
+extern __typeof (g_list_length) IA__g_list_length __attribute((visibility("hidden")));
+#define g_list_length IA__g_list_length
+
+extern __typeof (g_list_nth) IA__g_list_nth __attribute((visibility("hidden")));
+#define g_list_nth IA__g_list_nth
+
+extern __typeof (g_list_nth_data) IA__g_list_nth_data __attribute((visibility("hidden")));
+#define g_list_nth_data IA__g_list_nth_data
+
+extern __typeof (g_list_nth_prev) IA__g_list_nth_prev __attribute((visibility("hidden")));
+#define g_list_nth_prev IA__g_list_nth_prev
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_list_pop_allocator) IA__g_list_pop_allocator __attribute((visibility("hidden")));
+#define g_list_pop_allocator IA__g_list_pop_allocator
+
+#endif
+extern __typeof (g_list_position) IA__g_list_position __attribute((visibility("hidden")));
+#define g_list_position IA__g_list_position
+
+extern __typeof (g_list_prepend) IA__g_list_prepend __attribute((visibility("hidden")));
+#define g_list_prepend IA__g_list_prepend
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_list_push_allocator) IA__g_list_push_allocator __attribute((visibility("hidden")));
+#define g_list_push_allocator IA__g_list_push_allocator
+
+#endif
+extern __typeof (g_list_remove) IA__g_list_remove __attribute((visibility("hidden")));
+#define g_list_remove IA__g_list_remove
+
+extern __typeof (g_list_remove_all) IA__g_list_remove_all __attribute((visibility("hidden")));
+#define g_list_remove_all IA__g_list_remove_all
+
+extern __typeof (g_list_remove_link) IA__g_list_remove_link __attribute((visibility("hidden")));
+#define g_list_remove_link IA__g_list_remove_link
+
+extern __typeof (g_list_reverse) IA__g_list_reverse __attribute((visibility("hidden")));
+#define g_list_reverse IA__g_list_reverse
+
+extern __typeof (g_list_sort) IA__g_list_sort __attribute((visibility("hidden")));
+#define g_list_sort IA__g_list_sort
+
+extern __typeof (g_list_sort_with_data) IA__g_list_sort_with_data __attribute((visibility("hidden")));
+#define g_list_sort_with_data IA__g_list_sort_with_data
+
+#endif
+#endif
+#if IN_HEADER(__G_MAIN_H__)
+#if IN_FILE(__G_MAIN_C__)
+extern __typeof (g_child_watch_add) IA__g_child_watch_add __attribute((visibility("hidden")));
+#define g_child_watch_add IA__g_child_watch_add
+
+extern __typeof (g_child_watch_add_full) IA__g_child_watch_add_full __attribute((visibility("hidden")));
+#define g_child_watch_add_full IA__g_child_watch_add_full
+
+extern __typeof (g_child_watch_source_new) IA__g_child_watch_source_new __attribute((visibility("hidden")));
+#define g_child_watch_source_new IA__g_child_watch_source_new
+
+extern __typeof (g_get_current_time) IA__g_get_current_time __attribute((visibility("hidden")));
+#define g_get_current_time IA__g_get_current_time
+
+extern __typeof (g_main_context_acquire) IA__g_main_context_acquire __attribute((visibility("hidden")));
+#define g_main_context_acquire IA__g_main_context_acquire
+
+extern __typeof (g_main_context_add_poll) IA__g_main_context_add_poll __attribute((visibility("hidden")));
+#define g_main_context_add_poll IA__g_main_context_add_poll
+
+extern __typeof (g_main_context_check) IA__g_main_context_check __attribute((visibility("hidden")));
+#define g_main_context_check IA__g_main_context_check
+
+extern __typeof (g_main_context_default) IA__g_main_context_default __attribute((visibility("hidden")));
+#define g_main_context_default IA__g_main_context_default
+
+extern __typeof (g_main_context_dispatch) IA__g_main_context_dispatch __attribute((visibility("hidden")));
+#define g_main_context_dispatch IA__g_main_context_dispatch
+
+extern __typeof (g_main_context_find_source_by_funcs_user_data) IA__g_main_context_find_source_by_funcs_user_data __attribute((visibility("hidden")));
+#define g_main_context_find_source_by_funcs_user_data IA__g_main_context_find_source_by_funcs_user_data
+
+extern __typeof (g_main_context_find_source_by_id) IA__g_main_context_find_source_by_id __attribute((visibility("hidden")));
+#define g_main_context_find_source_by_id IA__g_main_context_find_source_by_id
+
+extern __typeof (g_main_context_find_source_by_user_data) IA__g_main_context_find_source_by_user_data __attribute((visibility("hidden")));
+#define g_main_context_find_source_by_user_data IA__g_main_context_find_source_by_user_data
+
+extern __typeof (g_main_context_get_poll_func) IA__g_main_context_get_poll_func __attribute((visibility("hidden")));
+#define g_main_context_get_poll_func IA__g_main_context_get_poll_func
+
+extern __typeof (g_main_context_is_owner) IA__g_main_context_is_owner __attribute((visibility("hidden")));
+#define g_main_context_is_owner IA__g_main_context_is_owner
+
+extern __typeof (g_main_context_iteration) IA__g_main_context_iteration __attribute((visibility("hidden")));
+#define g_main_context_iteration IA__g_main_context_iteration
+
+extern __typeof (g_main_context_new) IA__g_main_context_new __attribute((visibility("hidden")));
+#define g_main_context_new IA__g_main_context_new
+
+extern __typeof (g_main_context_pending) IA__g_main_context_pending __attribute((visibility("hidden")));
+#define g_main_context_pending IA__g_main_context_pending
+
+extern __typeof (g_main_context_prepare) IA__g_main_context_prepare __attribute((visibility("hidden")));
+#define g_main_context_prepare IA__g_main_context_prepare
+
+extern __typeof (g_main_context_query) IA__g_main_context_query __attribute((visibility("hidden")));
+#define g_main_context_query IA__g_main_context_query
+
+extern __typeof (g_main_context_ref) IA__g_main_context_ref __attribute((visibility("hidden")));
+#define g_main_context_ref IA__g_main_context_ref
+
+extern __typeof (g_main_context_release) IA__g_main_context_release __attribute((visibility("hidden")));
+#define g_main_context_release IA__g_main_context_release
+
+extern __typeof (g_main_context_remove_poll) IA__g_main_context_remove_poll __attribute((visibility("hidden")));
+#define g_main_context_remove_poll IA__g_main_context_remove_poll
+
+extern __typeof (g_main_context_set_poll_func) IA__g_main_context_set_poll_func __attribute((visibility("hidden")));
+#define g_main_context_set_poll_func IA__g_main_context_set_poll_func
+
+extern __typeof (g_main_context_unref) IA__g_main_context_unref __attribute((visibility("hidden")));
+#define g_main_context_unref IA__g_main_context_unref
+
+extern __typeof (g_main_context_wait) IA__g_main_context_wait __attribute((visibility("hidden")));
+#define g_main_context_wait IA__g_main_context_wait
+
+extern __typeof (g_main_context_wakeup) IA__g_main_context_wakeup __attribute((visibility("hidden")));
+#define g_main_context_wakeup IA__g_main_context_wakeup
+
+extern __typeof (g_main_depth) IA__g_main_depth __attribute((visibility("hidden")));
+#define g_main_depth IA__g_main_depth
+
+extern __typeof (g_main_current_source) IA__g_main_current_source __attribute((visibility("hidden")));
+#define g_main_current_source IA__g_main_current_source
+
+extern __typeof (g_main_loop_get_context) IA__g_main_loop_get_context __attribute((visibility("hidden")));
+#define g_main_loop_get_context IA__g_main_loop_get_context
+
+extern __typeof (g_main_loop_is_running) IA__g_main_loop_is_running __attribute((visibility("hidden")));
+#define g_main_loop_is_running IA__g_main_loop_is_running
+
+extern __typeof (g_main_loop_new) IA__g_main_loop_new __attribute((visibility("hidden")));
+#define g_main_loop_new IA__g_main_loop_new
+
+extern __typeof (g_main_loop_quit) IA__g_main_loop_quit __attribute((visibility("hidden")));
+#define g_main_loop_quit IA__g_main_loop_quit
+
+extern __typeof (g_main_loop_ref) IA__g_main_loop_ref __attribute((visibility("hidden")));
+#define g_main_loop_ref IA__g_main_loop_ref
+
+extern __typeof (g_main_loop_run) IA__g_main_loop_run __attribute((visibility("hidden")));
+#define g_main_loop_run IA__g_main_loop_run
+
+extern __typeof (g_main_loop_unref) IA__g_main_loop_unref __attribute((visibility("hidden")));
+#define g_main_loop_unref IA__g_main_loop_unref
+
+extern __typeof (g_source_add_poll) IA__g_source_add_poll __attribute((visibility("hidden")));
+#define g_source_add_poll IA__g_source_add_poll
+
+extern __typeof (g_source_attach) IA__g_source_attach __attribute((visibility("hidden")));
+#define g_source_attach IA__g_source_attach
+
+extern __typeof (g_source_destroy) IA__g_source_destroy __attribute((visibility("hidden")));
+#define g_source_destroy IA__g_source_destroy
+
+extern __typeof (g_source_get_can_recurse) IA__g_source_get_can_recurse __attribute((visibility("hidden")));
+#define g_source_get_can_recurse IA__g_source_get_can_recurse
+
+extern __typeof (g_source_get_context) IA__g_source_get_context __attribute((visibility("hidden")));
+#define g_source_get_context IA__g_source_get_context
+
+extern __typeof (g_source_get_current_time) IA__g_source_get_current_time __attribute((visibility("hidden")));
+#define g_source_get_current_time IA__g_source_get_current_time
+
+extern __typeof (g_source_get_id) IA__g_source_get_id __attribute((visibility("hidden")));
+#define g_source_get_id IA__g_source_get_id
+
+extern __typeof (g_source_get_priority) IA__g_source_get_priority __attribute((visibility("hidden")));
+#define g_source_get_priority IA__g_source_get_priority
+
+extern __typeof (g_source_new) IA__g_source_new __attribute((visibility("hidden")));
+#define g_source_new IA__g_source_new
+
+extern __typeof (g_source_ref) IA__g_source_ref __attribute((visibility("hidden")));
+#define g_source_ref IA__g_source_ref
+
+extern __typeof (g_source_remove) IA__g_source_remove __attribute((visibility("hidden")));
+#define g_source_remove IA__g_source_remove
+
+extern __typeof (g_source_remove_by_funcs_user_data) IA__g_source_remove_by_funcs_user_data __attribute((visibility("hidden")));
+#define g_source_remove_by_funcs_user_data IA__g_source_remove_by_funcs_user_data
+
+extern __typeof (g_source_remove_by_user_data) IA__g_source_remove_by_user_data __attribute((visibility("hidden")));
+#define g_source_remove_by_user_data IA__g_source_remove_by_user_data
+
+extern __typeof (g_source_remove_poll) IA__g_source_remove_poll __attribute((visibility("hidden")));
+#define g_source_remove_poll IA__g_source_remove_poll
+
+extern __typeof (g_source_set_callback) IA__g_source_set_callback __attribute((visibility("hidden")));
+#define g_source_set_callback IA__g_source_set_callback
+
+extern __typeof (g_source_set_callback_indirect) IA__g_source_set_callback_indirect __attribute((visibility("hidden")));
+#define g_source_set_callback_indirect IA__g_source_set_callback_indirect
+
+extern __typeof (g_source_set_can_recurse) IA__g_source_set_can_recurse __attribute((visibility("hidden")));
+#define g_source_set_can_recurse IA__g_source_set_can_recurse
+
+extern __typeof (g_source_set_funcs) IA__g_source_set_funcs __attribute((visibility("hidden")));
+#define g_source_set_funcs IA__g_source_set_funcs
+
+extern __typeof (g_source_is_destroyed) IA__g_source_is_destroyed __attribute((visibility("hidden")));
+#define g_source_is_destroyed IA__g_source_is_destroyed
+
+extern __typeof (g_source_set_priority) IA__g_source_set_priority __attribute((visibility("hidden")));
+#define g_source_set_priority IA__g_source_set_priority
+
+extern __typeof (g_source_unref) IA__g_source_unref __attribute((visibility("hidden")));
+#define g_source_unref IA__g_source_unref
+
+extern __typeof (g_idle_add) IA__g_idle_add __attribute((visibility("hidden")));
+#define g_idle_add IA__g_idle_add
+
+extern __typeof (g_idle_add_full) IA__g_idle_add_full __attribute((visibility("hidden")));
+#define g_idle_add_full IA__g_idle_add_full
+
+extern __typeof (g_idle_remove_by_data) IA__g_idle_remove_by_data __attribute((visibility("hidden")));
+#define g_idle_remove_by_data IA__g_idle_remove_by_data
+
+extern __typeof (g_idle_source_new) IA__g_idle_source_new __attribute((visibility("hidden")));
+#define g_idle_source_new IA__g_idle_source_new
+
+extern __typeof (g_timeout_add) IA__g_timeout_add __attribute((visibility("hidden")));
+#define g_timeout_add IA__g_timeout_add
+
+extern __typeof (g_timeout_add_seconds) IA__g_timeout_add_seconds __attribute((visibility("hidden")));
+#define g_timeout_add_seconds IA__g_timeout_add_seconds
+
+extern __typeof (g_timeout_add_full) IA__g_timeout_add_full __attribute((visibility("hidden")));
+#define g_timeout_add_full IA__g_timeout_add_full
+
+extern __typeof (g_timeout_add_seconds_full) IA__g_timeout_add_seconds_full __attribute((visibility("hidden")));
+#define g_timeout_add_seconds_full IA__g_timeout_add_seconds_full
+
+extern __typeof (g_timeout_source_new) IA__g_timeout_source_new __attribute((visibility("hidden")));
+#define g_timeout_source_new IA__g_timeout_source_new
+
+extern __typeof (g_timeout_source_new_seconds) IA__g_timeout_source_new_seconds __attribute((visibility("hidden")));
+#define g_timeout_source_new_seconds IA__g_timeout_source_new_seconds
+
+#endif
+#endif
+#if IN_HEADER(__G_MAPPED_FILE_H__)
+#if IN_FILE(__G_MAPPED_FILE_C__)
+extern __typeof (g_mapped_file_new) IA__g_mapped_file_new __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_mapped_file_new IA__g_mapped_file_new
+
+extern __typeof (g_mapped_file_get_length) IA__g_mapped_file_get_length __attribute((visibility("hidden")));
+#define g_mapped_file_get_length IA__g_mapped_file_get_length
+
+extern __typeof (g_mapped_file_get_contents) IA__g_mapped_file_get_contents __attribute((visibility("hidden")));
+#define g_mapped_file_get_contents IA__g_mapped_file_get_contents
+
+extern __typeof (g_mapped_file_free) IA__g_mapped_file_free __attribute((visibility("hidden")));
+#define g_mapped_file_free IA__g_mapped_file_free
+
+#endif
+#endif
+#if IN_HEADER(__G_MARKUP_H__)
+#if IN_FILE(__G_MARKUP_C__)
+extern __typeof (g_markup_error_quark) IA__g_markup_error_quark __attribute((visibility("hidden")));
+#define g_markup_error_quark IA__g_markup_error_quark
+
+extern __typeof (g_markup_escape_text) IA__g_markup_escape_text __attribute((visibility("hidden")));
+#define g_markup_escape_text IA__g_markup_escape_text
+
+extern __typeof (g_markup_parse_context_end_parse) IA__g_markup_parse_context_end_parse __attribute((visibility("hidden")));
+#define g_markup_parse_context_end_parse IA__g_markup_parse_context_end_parse
+
+extern __typeof (g_markup_parse_context_free) IA__g_markup_parse_context_free __attribute((visibility("hidden")));
+#define g_markup_parse_context_free IA__g_markup_parse_context_free
+
+extern __typeof (g_markup_parse_context_get_element) IA__g_markup_parse_context_get_element __attribute((visibility("hidden")));
+#define g_markup_parse_context_get_element IA__g_markup_parse_context_get_element
+
+extern __typeof (g_markup_parse_context_get_element_stack) IA__g_markup_parse_context_get_element_stack __attribute((visibility("hidden")));
+#define g_markup_parse_context_get_element_stack IA__g_markup_parse_context_get_element_stack
+
+extern __typeof (g_markup_parse_context_get_position) IA__g_markup_parse_context_get_position __attribute((visibility("hidden")));
+#define g_markup_parse_context_get_position IA__g_markup_parse_context_get_position
+
+extern __typeof (g_markup_parse_context_get_user_data) IA__g_markup_parse_context_get_user_data __attribute((visibility("hidden")));
+#define g_markup_parse_context_get_user_data IA__g_markup_parse_context_get_user_data
+
+extern __typeof (g_markup_parse_context_new) IA__g_markup_parse_context_new __attribute((visibility("hidden")));
+#define g_markup_parse_context_new IA__g_markup_parse_context_new
+
+extern __typeof (g_markup_parse_context_parse) IA__g_markup_parse_context_parse __attribute((visibility("hidden")));
+#define g_markup_parse_context_parse IA__g_markup_parse_context_parse
+
+extern __typeof (g_markup_parse_context_push) IA__g_markup_parse_context_push __attribute((visibility("hidden")));
+#define g_markup_parse_context_push IA__g_markup_parse_context_push
+
+extern __typeof (g_markup_parse_context_pop) IA__g_markup_parse_context_pop __attribute((visibility("hidden")));
+#define g_markup_parse_context_pop IA__g_markup_parse_context_pop
+
+extern __typeof (g_markup_printf_escaped) IA__g_markup_printf_escaped __attribute((visibility("hidden"))) G_GNUC_PRINTF(1,2);
+#define g_markup_printf_escaped IA__g_markup_printf_escaped
+
+extern __typeof (g_markup_vprintf_escaped) IA__g_markup_vprintf_escaped __attribute((visibility("hidden")));
+#define g_markup_vprintf_escaped IA__g_markup_vprintf_escaped
+
+extern __typeof (g_markup_collect_attributes) IA__g_markup_collect_attributes __attribute((visibility("hidden")));
+#define g_markup_collect_attributes IA__g_markup_collect_attributes
+
+#endif
+#endif
+#if IN_HEADER(__G_MEM_H__)
+#if IN_FILE(__G_MEM_C__)
+extern __typeof (g_free) IA__g_free __attribute((visibility("hidden")));
+#define g_free IA__g_free
+
+extern __typeof (g_malloc) IA__g_malloc __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_malloc IA__g_malloc
+
+extern __typeof (g_malloc0) IA__g_malloc0 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_malloc0 IA__g_malloc0
+
+extern __typeof (g_mem_is_system_malloc) IA__g_mem_is_system_malloc __attribute((visibility("hidden")));
+#define g_mem_is_system_malloc IA__g_mem_is_system_malloc
+
+extern __typeof (g_mem_profile) IA__g_mem_profile __attribute((visibility("hidden")));
+#define g_mem_profile IA__g_mem_profile
+
+extern __typeof (g_mem_set_vtable) IA__g_mem_set_vtable __attribute((visibility("hidden")));
+#define g_mem_set_vtable IA__g_mem_set_vtable
+
+extern __typeof (g_realloc) IA__g_realloc __attribute((visibility("hidden")));
+#define g_realloc IA__g_realloc
+
+extern __typeof (g_try_malloc) IA__g_try_malloc __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_try_malloc IA__g_try_malloc
+
+extern __typeof (g_try_malloc0) IA__g_try_malloc0 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_try_malloc0 IA__g_try_malloc0
+
+extern __typeof (g_try_realloc) IA__g_try_realloc __attribute((visibility("hidden")));
+#define g_try_realloc IA__g_try_realloc
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_allocator_free) IA__g_allocator_free __attribute((visibility("hidden")));
+#define g_allocator_free IA__g_allocator_free
+
+extern __typeof (g_allocator_new) IA__g_allocator_new __attribute((visibility("hidden")));
+#define g_allocator_new IA__g_allocator_new
+
+extern __typeof (g_mem_chunk_alloc) IA__g_mem_chunk_alloc __attribute((visibility("hidden")));
+#define g_mem_chunk_alloc IA__g_mem_chunk_alloc
+
+extern __typeof (g_mem_chunk_alloc0) IA__g_mem_chunk_alloc0 __attribute((visibility("hidden")));
+#define g_mem_chunk_alloc0 IA__g_mem_chunk_alloc0
+
+extern __typeof (g_mem_chunk_clean) IA__g_mem_chunk_clean __attribute((visibility("hidden")));
+#define g_mem_chunk_clean IA__g_mem_chunk_clean
+
+extern __typeof (g_mem_chunk_destroy) IA__g_mem_chunk_destroy __attribute((visibility("hidden")));
+#define g_mem_chunk_destroy IA__g_mem_chunk_destroy
+
+extern __typeof (g_mem_chunk_free) IA__g_mem_chunk_free __attribute((visibility("hidden")));
+#define g_mem_chunk_free IA__g_mem_chunk_free
+
+extern __typeof (g_mem_chunk_info) IA__g_mem_chunk_info __attribute((visibility("hidden")));
+#define g_mem_chunk_info IA__g_mem_chunk_info
+
+extern __typeof (g_mem_chunk_new) IA__g_mem_chunk_new __attribute((visibility("hidden")));
+#define g_mem_chunk_new IA__g_mem_chunk_new
+
+extern __typeof (g_mem_chunk_print) IA__g_mem_chunk_print __attribute((visibility("hidden")));
+#define g_mem_chunk_print IA__g_mem_chunk_print
+
+extern __typeof (g_mem_chunk_reset) IA__g_mem_chunk_reset __attribute((visibility("hidden")));
+#define g_mem_chunk_reset IA__g_mem_chunk_reset
+
+extern __typeof (g_blow_chunks) IA__g_blow_chunks __attribute((visibility("hidden")));
+#define g_blow_chunks IA__g_blow_chunks
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_SLICE_H__)
+#if IN_FILE(__G_SLICE_C__)
+extern __typeof (g_slice_alloc) IA__g_slice_alloc __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_slice_alloc IA__g_slice_alloc
+
+extern __typeof (g_slice_alloc0) IA__g_slice_alloc0 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_slice_alloc0 IA__g_slice_alloc0
+
+extern __typeof (g_slice_copy) IA__g_slice_copy __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_slice_copy IA__g_slice_copy
+
+extern __typeof (g_slice_free1) IA__g_slice_free1 __attribute((visibility("hidden")));
+#define g_slice_free1 IA__g_slice_free1
+
+extern __typeof (g_slice_free_chain_with_offset) IA__g_slice_free_chain_with_offset __attribute((visibility("hidden")));
+#define g_slice_free_chain_with_offset IA__g_slice_free_chain_with_offset
+
+extern __typeof (g_slice_set_config) IA__g_slice_set_config __attribute((visibility("hidden")));
+#define g_slice_set_config IA__g_slice_set_config
+
+extern __typeof (g_slice_get_config) IA__g_slice_get_config __attribute((visibility("hidden")));
+#define g_slice_get_config IA__g_slice_get_config
+
+extern __typeof (g_slice_get_config_state) IA__g_slice_get_config_state __attribute((visibility("hidden")));
+#define g_slice_get_config_state IA__g_slice_get_config_state
+
+#ifdef G_ENABLE_DEBUG
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_MESSAGES_H__)
+#if IN_FILE(__G_MESSAGES_C__)
+extern __typeof (g_printf_string_upper_bound) IA__g_printf_string_upper_bound __attribute((visibility("hidden")));
+#define g_printf_string_upper_bound IA__g_printf_string_upper_bound
+
+extern __typeof (g_log) IA__g_log __attribute((visibility("hidden"))) G_GNUC_PRINTF(3,4);
+#define g_log IA__g_log
+
+extern __typeof (g_log_default_handler) IA__g_log_default_handler __attribute((visibility("hidden")));
+#define g_log_default_handler IA__g_log_default_handler
+
+extern __typeof (g_log_remove_handler) IA__g_log_remove_handler __attribute((visibility("hidden")));
+#define g_log_remove_handler IA__g_log_remove_handler
+
+extern __typeof (g_log_set_always_fatal) IA__g_log_set_always_fatal __attribute((visibility("hidden")));
+#define g_log_set_always_fatal IA__g_log_set_always_fatal
+
+extern __typeof (g_log_set_default_handler) IA__g_log_set_default_handler __attribute((visibility("hidden")));
+#define g_log_set_default_handler IA__g_log_set_default_handler
+
+extern __typeof (g_log_set_fatal_mask) IA__g_log_set_fatal_mask __attribute((visibility("hidden")));
+#define g_log_set_fatal_mask IA__g_log_set_fatal_mask
+
+extern __typeof (g_log_set_handler) IA__g_log_set_handler __attribute((visibility("hidden")));
+#define g_log_set_handler IA__g_log_set_handler
+
+extern __typeof (g_logv) IA__g_logv __attribute((visibility("hidden")));
+#define g_logv IA__g_logv
+
+extern __typeof (g_return_if_fail_warning) IA__g_return_if_fail_warning __attribute((visibility("hidden")));
+#define g_return_if_fail_warning IA__g_return_if_fail_warning
+
+extern __typeof (g_warn_message) IA__g_warn_message __attribute((visibility("hidden")));
+#define g_warn_message IA__g_warn_message
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_assert_warning) IA__g_assert_warning __attribute((visibility("hidden"))) G_GNUC_NORETURN;
+#define g_assert_warning IA__g_assert_warning
+
+#endif
+extern __typeof (g_print) IA__g_print __attribute((visibility("hidden"))) G_GNUC_PRINTF(1,2);
+#define g_print IA__g_print
+
+extern __typeof (g_printerr) IA__g_printerr __attribute((visibility("hidden"))) G_GNUC_PRINTF(1,2);
+#define g_printerr IA__g_printerr
+
+extern __typeof (g_set_printerr_handler) IA__g_set_printerr_handler __attribute((visibility("hidden")));
+#define g_set_printerr_handler IA__g_set_printerr_handler
+
+extern __typeof (g_set_print_handler) IA__g_set_print_handler __attribute((visibility("hidden")));
+#define g_set_print_handler IA__g_set_print_handler
+
+#endif
+#endif
+#if IN_HEADER(__G_NODE_H__)
+#if IN_FILE(__G_NODE_C__)
+extern __typeof (g_node_child_index) IA__g_node_child_index __attribute((visibility("hidden")));
+#define g_node_child_index IA__g_node_child_index
+
+extern __typeof (g_node_child_position) IA__g_node_child_position __attribute((visibility("hidden")));
+#define g_node_child_position IA__g_node_child_position
+
+extern __typeof (g_node_children_foreach) IA__g_node_children_foreach __attribute((visibility("hidden")));
+#define g_node_children_foreach IA__g_node_children_foreach
+
+extern __typeof (g_node_copy) IA__g_node_copy __attribute((visibility("hidden")));
+#define g_node_copy IA__g_node_copy
+
+extern __typeof (g_node_copy_deep) IA__g_node_copy_deep __attribute((visibility("hidden")));
+#define g_node_copy_deep IA__g_node_copy_deep
+
+extern __typeof (g_node_depth) IA__g_node_depth __attribute((visibility("hidden")));
+#define g_node_depth IA__g_node_depth
+
+extern __typeof (g_node_destroy) IA__g_node_destroy __attribute((visibility("hidden")));
+#define g_node_destroy IA__g_node_destroy
+
+extern __typeof (g_node_find) IA__g_node_find __attribute((visibility("hidden")));
+#define g_node_find IA__g_node_find
+
+extern __typeof (g_node_find_child) IA__g_node_find_child __attribute((visibility("hidden")));
+#define g_node_find_child IA__g_node_find_child
+
+extern __typeof (g_node_first_sibling) IA__g_node_first_sibling __attribute((visibility("hidden")));
+#define g_node_first_sibling IA__g_node_first_sibling
+
+extern __typeof (g_node_get_root) IA__g_node_get_root __attribute((visibility("hidden")));
+#define g_node_get_root IA__g_node_get_root
+
+extern __typeof (g_node_insert) IA__g_node_insert __attribute((visibility("hidden")));
+#define g_node_insert IA__g_node_insert
+
+extern __typeof (g_node_insert_after) IA__g_node_insert_after __attribute((visibility("hidden")));
+#define g_node_insert_after IA__g_node_insert_after
+
+extern __typeof (g_node_insert_before) IA__g_node_insert_before __attribute((visibility("hidden")));
+#define g_node_insert_before IA__g_node_insert_before
+
+extern __typeof (g_node_is_ancestor) IA__g_node_is_ancestor __attribute((visibility("hidden")));
+#define g_node_is_ancestor IA__g_node_is_ancestor
+
+extern __typeof (g_node_last_child) IA__g_node_last_child __attribute((visibility("hidden")));
+#define g_node_last_child IA__g_node_last_child
+
+extern __typeof (g_node_last_sibling) IA__g_node_last_sibling __attribute((visibility("hidden")));
+#define g_node_last_sibling IA__g_node_last_sibling
+
+extern __typeof (g_node_max_height) IA__g_node_max_height __attribute((visibility("hidden")));
+#define g_node_max_height IA__g_node_max_height
+
+extern __typeof (g_node_n_children) IA__g_node_n_children __attribute((visibility("hidden")));
+#define g_node_n_children IA__g_node_n_children
+
+extern __typeof (g_node_new) IA__g_node_new __attribute((visibility("hidden")));
+#define g_node_new IA__g_node_new
+
+extern __typeof (g_node_n_nodes) IA__g_node_n_nodes __attribute((visibility("hidden")));
+#define g_node_n_nodes IA__g_node_n_nodes
+
+extern __typeof (g_node_nth_child) IA__g_node_nth_child __attribute((visibility("hidden")));
+#define g_node_nth_child IA__g_node_nth_child
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_node_pop_allocator) IA__g_node_pop_allocator __attribute((visibility("hidden")));
+#define g_node_pop_allocator IA__g_node_pop_allocator
+
+#endif
+extern __typeof (g_node_prepend) IA__g_node_prepend __attribute((visibility("hidden")));
+#define g_node_prepend IA__g_node_prepend
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_node_push_allocator) IA__g_node_push_allocator __attribute((visibility("hidden")));
+#define g_node_push_allocator IA__g_node_push_allocator
+
+#endif
+extern __typeof (g_node_reverse_children) IA__g_node_reverse_children __attribute((visibility("hidden")));
+#define g_node_reverse_children IA__g_node_reverse_children
+
+extern __typeof (g_node_traverse) IA__g_node_traverse __attribute((visibility("hidden")));
+#define g_node_traverse IA__g_node_traverse
+
+extern __typeof (g_node_unlink) IA__g_node_unlink __attribute((visibility("hidden")));
+#define g_node_unlink IA__g_node_unlink
+
+#endif
+#endif
+#if IN_HEADER(__G_OPTION_H__)
+#if IN_FILE(__G_OPTION_C__)
+extern __typeof (g_option_context_add_group) IA__g_option_context_add_group __attribute((visibility("hidden")));
+#define g_option_context_add_group IA__g_option_context_add_group
+
+extern __typeof (g_option_context_add_main_entries) IA__g_option_context_add_main_entries __attribute((visibility("hidden")));
+#define g_option_context_add_main_entries IA__g_option_context_add_main_entries
+
+extern __typeof (g_option_error_quark) IA__g_option_error_quark __attribute((visibility("hidden")));
+#define g_option_error_quark IA__g_option_error_quark
+
+extern __typeof (g_option_context_free) IA__g_option_context_free __attribute((visibility("hidden")));
+#define g_option_context_free IA__g_option_context_free
+
+extern __typeof (g_option_context_get_description) IA__g_option_context_get_description __attribute((visibility("hidden")));
+#define g_option_context_get_description IA__g_option_context_get_description
+
+extern __typeof (g_option_context_get_help_enabled) IA__g_option_context_get_help_enabled __attribute((visibility("hidden")));
+#define g_option_context_get_help_enabled IA__g_option_context_get_help_enabled
+
+extern __typeof (g_option_context_get_ignore_unknown_options) IA__g_option_context_get_ignore_unknown_options __attribute((visibility("hidden")));
+#define g_option_context_get_ignore_unknown_options IA__g_option_context_get_ignore_unknown_options
+
+extern __typeof (g_option_context_get_main_group) IA__g_option_context_get_main_group __attribute((visibility("hidden")));
+#define g_option_context_get_main_group IA__g_option_context_get_main_group
+
+extern __typeof (g_option_context_get_summary) IA__g_option_context_get_summary __attribute((visibility("hidden")));
+#define g_option_context_get_summary IA__g_option_context_get_summary
+
+extern __typeof (g_option_context_new) IA__g_option_context_new __attribute((visibility("hidden")));
+#define g_option_context_new IA__g_option_context_new
+
+extern __typeof (g_option_context_parse) IA__g_option_context_parse __attribute((visibility("hidden")));
+#define g_option_context_parse IA__g_option_context_parse
+
+extern __typeof (g_option_context_set_description) IA__g_option_context_set_description __attribute((visibility("hidden")));
+#define g_option_context_set_description IA__g_option_context_set_description
+
+extern __typeof (g_option_context_set_help_enabled) IA__g_option_context_set_help_enabled __attribute((visibility("hidden")));
+#define g_option_context_set_help_enabled IA__g_option_context_set_help_enabled
+
+extern __typeof (g_option_context_set_ignore_unknown_options) IA__g_option_context_set_ignore_unknown_options __attribute((visibility("hidden")));
+#define g_option_context_set_ignore_unknown_options IA__g_option_context_set_ignore_unknown_options
+
+extern __typeof (g_option_context_set_main_group) IA__g_option_context_set_main_group __attribute((visibility("hidden")));
+#define g_option_context_set_main_group IA__g_option_context_set_main_group
+
+extern __typeof (g_option_context_set_summary) IA__g_option_context_set_summary __attribute((visibility("hidden")));
+#define g_option_context_set_summary IA__g_option_context_set_summary
+
+extern __typeof (g_option_context_set_translate_func) IA__g_option_context_set_translate_func __attribute((visibility("hidden")));
+#define g_option_context_set_translate_func IA__g_option_context_set_translate_func
+
+extern __typeof (g_option_context_set_translation_domain) IA__g_option_context_set_translation_domain __attribute((visibility("hidden")));
+#define g_option_context_set_translation_domain IA__g_option_context_set_translation_domain
+
+extern __typeof (g_option_context_get_help) IA__g_option_context_get_help __attribute((visibility("hidden")));
+#define g_option_context_get_help IA__g_option_context_get_help
+
+extern __typeof (g_option_group_add_entries) IA__g_option_group_add_entries __attribute((visibility("hidden")));
+#define g_option_group_add_entries IA__g_option_group_add_entries
+
+extern __typeof (g_option_group_free) IA__g_option_group_free __attribute((visibility("hidden")));
+#define g_option_group_free IA__g_option_group_free
+
+extern __typeof (g_option_group_new) IA__g_option_group_new __attribute((visibility("hidden")));
+#define g_option_group_new IA__g_option_group_new
+
+extern __typeof (g_option_group_set_error_hook) IA__g_option_group_set_error_hook __attribute((visibility("hidden")));
+#define g_option_group_set_error_hook IA__g_option_group_set_error_hook
+
+extern __typeof (g_option_group_set_parse_hooks) IA__g_option_group_set_parse_hooks __attribute((visibility("hidden")));
+#define g_option_group_set_parse_hooks IA__g_option_group_set_parse_hooks
+
+extern __typeof (g_option_group_set_translate_func) IA__g_option_group_set_translate_func __attribute((visibility("hidden")));
+#define g_option_group_set_translate_func IA__g_option_group_set_translate_func
+
+extern __typeof (g_option_group_set_translation_domain) IA__g_option_group_set_translation_domain __attribute((visibility("hidden")));
+#define g_option_group_set_translation_domain IA__g_option_group_set_translation_domain
+
+#endif
+#endif
+#if IN_HEADER(__G_PATTERN_H__)
+#if IN_FILE(__G_PATTERN_C__)
+extern __typeof (g_pattern_match) IA__g_pattern_match __attribute((visibility("hidden")));
+#define g_pattern_match IA__g_pattern_match
+
+extern __typeof (g_pattern_match_simple) IA__g_pattern_match_simple __attribute((visibility("hidden")));
+#define g_pattern_match_simple IA__g_pattern_match_simple
+
+extern __typeof (g_pattern_match_string) IA__g_pattern_match_string __attribute((visibility("hidden")));
+#define g_pattern_match_string IA__g_pattern_match_string
+
+extern __typeof (g_pattern_spec_equal) IA__g_pattern_spec_equal __attribute((visibility("hidden")));
+#define g_pattern_spec_equal IA__g_pattern_spec_equal
+
+extern __typeof (g_pattern_spec_free) IA__g_pattern_spec_free __attribute((visibility("hidden")));
+#define g_pattern_spec_free IA__g_pattern_spec_free
+
+extern __typeof (g_pattern_spec_new) IA__g_pattern_spec_new __attribute((visibility("hidden")));
+#define g_pattern_spec_new IA__g_pattern_spec_new
+
+#endif
+#endif
+#if IN_HEADER(__G_POLL_H__)
+#if IN_FILE(__G_POLL_C__)
+extern __typeof (g_poll) IA__g_poll __attribute((visibility("hidden")));
+#define g_poll IA__g_poll
+
+#endif
+#endif
+#if IN_HEADER(__G_PRIMES_H__)
+#if IN_FILE(__G_PRIMES_C__)
+extern __typeof (g_spaced_primes_closest) IA__g_spaced_primes_closest __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_spaced_primes_closest IA__g_spaced_primes_closest
+
+#endif
+#endif
+#if IN_HEADER(__G_PRINTF_H__)
+#if IN_FILE(__G_PRINTF_C__)
+extern __typeof (g_fprintf) IA__g_fprintf __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_fprintf IA__g_fprintf
+
+extern __typeof (g_printf) IA__g_printf __attribute((visibility("hidden"))) G_GNUC_PRINTF(1,2);
+#define g_printf IA__g_printf
+
+extern __typeof (g_sprintf) IA__g_sprintf __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_sprintf IA__g_sprintf
+
+extern __typeof (g_vasprintf) IA__g_vasprintf __attribute((visibility("hidden")));
+#define g_vasprintf IA__g_vasprintf
+
+extern __typeof (g_vfprintf) IA__g_vfprintf __attribute((visibility("hidden")));
+#define g_vfprintf IA__g_vfprintf
+
+extern __typeof (g_vprintf) IA__g_vprintf __attribute((visibility("hidden")));
+#define g_vprintf IA__g_vprintf
+
+extern __typeof (g_vsprintf) IA__g_vsprintf __attribute((visibility("hidden")));
+#define g_vsprintf IA__g_vsprintf
+
+#endif
+#endif
+#if IN_HEADER(__G_UTILS_H__)
+#if IN_FILE(__G_PRINTF_C__)
+extern __typeof (g_snprintf) IA__g_snprintf __attribute((visibility("hidden"))) G_GNUC_PRINTF(3,4);
+#define g_snprintf IA__g_snprintf
+
+extern __typeof (g_vsnprintf) IA__g_vsnprintf __attribute((visibility("hidden")));
+#define g_vsnprintf IA__g_vsnprintf
+
+#endif
+#endif
+#if IN_HEADER(__G_QSORT_H__)
+#if IN_FILE(__G_QSORT_C__)
+extern __typeof (g_qsort_with_data) IA__g_qsort_with_data __attribute((visibility("hidden")));
+#define g_qsort_with_data IA__g_qsort_with_data
+
+#endif
+#endif
+#if IN_HEADER(__G_QUEUE_H__)
+#if IN_FILE(__G_QUEUE_C__)
+extern __typeof (g_queue_clear) IA__g_queue_clear __attribute((visibility("hidden")));
+#define g_queue_clear IA__g_queue_clear
+
+extern __typeof (g_queue_copy) IA__g_queue_copy __attribute((visibility("hidden")));
+#define g_queue_copy IA__g_queue_copy
+
+extern __typeof (g_queue_delete_link) IA__g_queue_delete_link __attribute((visibility("hidden")));
+#define g_queue_delete_link IA__g_queue_delete_link
+
+extern __typeof (g_queue_find) IA__g_queue_find __attribute((visibility("hidden")));
+#define g_queue_find IA__g_queue_find
+
+extern __typeof (g_queue_find_custom) IA__g_queue_find_custom __attribute((visibility("hidden")));
+#define g_queue_find_custom IA__g_queue_find_custom
+
+extern __typeof (g_queue_foreach) IA__g_queue_foreach __attribute((visibility("hidden")));
+#define g_queue_foreach IA__g_queue_foreach
+
+extern __typeof (g_queue_free) IA__g_queue_free __attribute((visibility("hidden")));
+#define g_queue_free IA__g_queue_free
+
+extern __typeof (g_queue_get_length) IA__g_queue_get_length __attribute((visibility("hidden")));
+#define g_queue_get_length IA__g_queue_get_length
+
+extern __typeof (g_queue_index) IA__g_queue_index __attribute((visibility("hidden")));
+#define g_queue_index IA__g_queue_index
+
+extern __typeof (g_queue_init) IA__g_queue_init __attribute((visibility("hidden")));
+#define g_queue_init IA__g_queue_init
+
+extern __typeof (g_queue_insert_after) IA__g_queue_insert_after __attribute((visibility("hidden")));
+#define g_queue_insert_after IA__g_queue_insert_after
+
+extern __typeof (g_queue_insert_before) IA__g_queue_insert_before __attribute((visibility("hidden")));
+#define g_queue_insert_before IA__g_queue_insert_before
+
+extern __typeof (g_queue_insert_sorted) IA__g_queue_insert_sorted __attribute((visibility("hidden")));
+#define g_queue_insert_sorted IA__g_queue_insert_sorted
+
+extern __typeof (g_queue_is_empty) IA__g_queue_is_empty __attribute((visibility("hidden")));
+#define g_queue_is_empty IA__g_queue_is_empty
+
+extern __typeof (g_queue_link_index) IA__g_queue_link_index __attribute((visibility("hidden")));
+#define g_queue_link_index IA__g_queue_link_index
+
+extern __typeof (g_queue_new) IA__g_queue_new __attribute((visibility("hidden")));
+#define g_queue_new IA__g_queue_new
+
+extern __typeof (g_queue_peek_head) IA__g_queue_peek_head __attribute((visibility("hidden")));
+#define g_queue_peek_head IA__g_queue_peek_head
+
+extern __typeof (g_queue_peek_head_link) IA__g_queue_peek_head_link __attribute((visibility("hidden")));
+#define g_queue_peek_head_link IA__g_queue_peek_head_link
+
+extern __typeof (g_queue_peek_nth) IA__g_queue_peek_nth __attribute((visibility("hidden")));
+#define g_queue_peek_nth IA__g_queue_peek_nth
+
+extern __typeof (g_queue_peek_nth_link) IA__g_queue_peek_nth_link __attribute((visibility("hidden")));
+#define g_queue_peek_nth_link IA__g_queue_peek_nth_link
+
+extern __typeof (g_queue_peek_tail) IA__g_queue_peek_tail __attribute((visibility("hidden")));
+#define g_queue_peek_tail IA__g_queue_peek_tail
+
+extern __typeof (g_queue_peek_tail_link) IA__g_queue_peek_tail_link __attribute((visibility("hidden")));
+#define g_queue_peek_tail_link IA__g_queue_peek_tail_link
+
+extern __typeof (g_queue_pop_head) IA__g_queue_pop_head __attribute((visibility("hidden")));
+#define g_queue_pop_head IA__g_queue_pop_head
+
+extern __typeof (g_queue_pop_head_link) IA__g_queue_pop_head_link __attribute((visibility("hidden")));
+#define g_queue_pop_head_link IA__g_queue_pop_head_link
+
+extern __typeof (g_queue_pop_nth) IA__g_queue_pop_nth __attribute((visibility("hidden")));
+#define g_queue_pop_nth IA__g_queue_pop_nth
+
+extern __typeof (g_queue_pop_nth_link) IA__g_queue_pop_nth_link __attribute((visibility("hidden")));
+#define g_queue_pop_nth_link IA__g_queue_pop_nth_link
+
+extern __typeof (g_queue_pop_tail) IA__g_queue_pop_tail __attribute((visibility("hidden")));
+#define g_queue_pop_tail IA__g_queue_pop_tail
+
+extern __typeof (g_queue_pop_tail_link) IA__g_queue_pop_tail_link __attribute((visibility("hidden")));
+#define g_queue_pop_tail_link IA__g_queue_pop_tail_link
+
+extern __typeof (g_queue_push_head) IA__g_queue_push_head __attribute((visibility("hidden")));
+#define g_queue_push_head IA__g_queue_push_head
+
+extern __typeof (g_queue_push_head_link) IA__g_queue_push_head_link __attribute((visibility("hidden")));
+#define g_queue_push_head_link IA__g_queue_push_head_link
+
+extern __typeof (g_queue_push_nth) IA__g_queue_push_nth __attribute((visibility("hidden")));
+#define g_queue_push_nth IA__g_queue_push_nth
+
+extern __typeof (g_queue_push_nth_link) IA__g_queue_push_nth_link __attribute((visibility("hidden")));
+#define g_queue_push_nth_link IA__g_queue_push_nth_link
+
+extern __typeof (g_queue_push_tail) IA__g_queue_push_tail __attribute((visibility("hidden")));
+#define g_queue_push_tail IA__g_queue_push_tail
+
+extern __typeof (g_queue_push_tail_link) IA__g_queue_push_tail_link __attribute((visibility("hidden")));
+#define g_queue_push_tail_link IA__g_queue_push_tail_link
+
+extern __typeof (g_queue_remove) IA__g_queue_remove __attribute((visibility("hidden")));
+#define g_queue_remove IA__g_queue_remove
+
+extern __typeof (g_queue_remove_all) IA__g_queue_remove_all __attribute((visibility("hidden")));
+#define g_queue_remove_all IA__g_queue_remove_all
+
+extern __typeof (g_queue_reverse) IA__g_queue_reverse __attribute((visibility("hidden")));
+#define g_queue_reverse IA__g_queue_reverse
+
+extern __typeof (g_queue_sort) IA__g_queue_sort __attribute((visibility("hidden")));
+#define g_queue_sort IA__g_queue_sort
+
+extern __typeof (g_queue_unlink) IA__g_queue_unlink __attribute((visibility("hidden")));
+#define g_queue_unlink IA__g_queue_unlink
+
+#endif
+#endif
+#if IN_HEADER(__G_RAND_H__)
+#if IN_FILE(__G_RAND_C__)
+extern __typeof (g_rand_copy) IA__g_rand_copy __attribute((visibility("hidden")));
+#define g_rand_copy IA__g_rand_copy
+
+extern __typeof (g_rand_double) IA__g_rand_double __attribute((visibility("hidden")));
+#define g_rand_double IA__g_rand_double
+
+extern __typeof (g_rand_double_range) IA__g_rand_double_range __attribute((visibility("hidden")));
+#define g_rand_double_range IA__g_rand_double_range
+
+extern __typeof (g_rand_free) IA__g_rand_free __attribute((visibility("hidden")));
+#define g_rand_free IA__g_rand_free
+
+extern __typeof (g_rand_int) IA__g_rand_int __attribute((visibility("hidden")));
+#define g_rand_int IA__g_rand_int
+
+extern __typeof (g_rand_int_range) IA__g_rand_int_range __attribute((visibility("hidden")));
+#define g_rand_int_range IA__g_rand_int_range
+
+extern __typeof (g_rand_new) IA__g_rand_new __attribute((visibility("hidden")));
+#define g_rand_new IA__g_rand_new
+
+extern __typeof (g_rand_new_with_seed) IA__g_rand_new_with_seed __attribute((visibility("hidden")));
+#define g_rand_new_with_seed IA__g_rand_new_with_seed
+
+extern __typeof (g_rand_new_with_seed_array) IA__g_rand_new_with_seed_array __attribute((visibility("hidden")));
+#define g_rand_new_with_seed_array IA__g_rand_new_with_seed_array
+
+extern __typeof (g_random_double) IA__g_random_double __attribute((visibility("hidden")));
+#define g_random_double IA__g_random_double
+
+extern __typeof (g_random_double_range) IA__g_random_double_range __attribute((visibility("hidden")));
+#define g_random_double_range IA__g_random_double_range
+
+extern __typeof (g_random_int) IA__g_random_int __attribute((visibility("hidden")));
+#define g_random_int IA__g_random_int
+
+extern __typeof (g_random_int_range) IA__g_random_int_range __attribute((visibility("hidden")));
+#define g_random_int_range IA__g_random_int_range
+
+extern __typeof (g_random_set_seed) IA__g_random_set_seed __attribute((visibility("hidden")));
+#define g_random_set_seed IA__g_random_set_seed
+
+extern __typeof (g_rand_set_seed) IA__g_rand_set_seed __attribute((visibility("hidden")));
+#define g_rand_set_seed IA__g_rand_set_seed
+
+extern __typeof (g_rand_set_seed_array) IA__g_rand_set_seed_array __attribute((visibility("hidden")));
+#define g_rand_set_seed_array IA__g_rand_set_seed_array
+
+#endif
+#endif
+#if IN_HEADER(__G_REL_H__)
+#if IN_FILE(__G_REL_C__)
+extern __typeof (g_relation_count) IA__g_relation_count __attribute((visibility("hidden")));
+#define g_relation_count IA__g_relation_count
+
+extern __typeof (g_relation_delete) IA__g_relation_delete __attribute((visibility("hidden")));
+#define g_relation_delete IA__g_relation_delete
+
+extern __typeof (g_relation_destroy) IA__g_relation_destroy __attribute((visibility("hidden")));
+#define g_relation_destroy IA__g_relation_destroy
+
+extern __typeof (g_relation_exists) IA__g_relation_exists __attribute((visibility("hidden")));
+#define g_relation_exists IA__g_relation_exists
+
+extern __typeof (g_relation_index) IA__g_relation_index __attribute((visibility("hidden")));
+#define g_relation_index IA__g_relation_index
+
+extern __typeof (g_relation_insert) IA__g_relation_insert __attribute((visibility("hidden")));
+#define g_relation_insert IA__g_relation_insert
+
+extern __typeof (g_relation_new) IA__g_relation_new __attribute((visibility("hidden")));
+#define g_relation_new IA__g_relation_new
+
+extern __typeof (g_relation_print) IA__g_relation_print __attribute((visibility("hidden")));
+#define g_relation_print IA__g_relation_print
+
+extern __typeof (g_relation_select) IA__g_relation_select __attribute((visibility("hidden")));
+#define g_relation_select IA__g_relation_select
+
+extern __typeof (g_tuples_destroy) IA__g_tuples_destroy __attribute((visibility("hidden")));
+#define g_tuples_destroy IA__g_tuples_destroy
+
+extern __typeof (g_tuples_index) IA__g_tuples_index __attribute((visibility("hidden")));
+#define g_tuples_index IA__g_tuples_index
+
+#endif
+#endif
+#if IN_HEADER(__G_SCANNER_H__)
+#if IN_FILE(__G_SCANNER_C__)
+extern __typeof (g_scanner_cur_line) IA__g_scanner_cur_line __attribute((visibility("hidden")));
+#define g_scanner_cur_line IA__g_scanner_cur_line
+
+extern __typeof (g_scanner_cur_position) IA__g_scanner_cur_position __attribute((visibility("hidden")));
+#define g_scanner_cur_position IA__g_scanner_cur_position
+
+extern __typeof (g_scanner_cur_token) IA__g_scanner_cur_token __attribute((visibility("hidden")));
+#define g_scanner_cur_token IA__g_scanner_cur_token
+
+extern __typeof (g_scanner_cur_value) IA__g_scanner_cur_value __attribute((visibility("hidden")));
+#define g_scanner_cur_value IA__g_scanner_cur_value
+
+extern __typeof (g_scanner_destroy) IA__g_scanner_destroy __attribute((visibility("hidden")));
+#define g_scanner_destroy IA__g_scanner_destroy
+
+extern __typeof (g_scanner_eof) IA__g_scanner_eof __attribute((visibility("hidden")));
+#define g_scanner_eof IA__g_scanner_eof
+
+extern __typeof (g_scanner_error) IA__g_scanner_error __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_scanner_error IA__g_scanner_error
+
+extern __typeof (g_scanner_get_next_token) IA__g_scanner_get_next_token __attribute((visibility("hidden")));
+#define g_scanner_get_next_token IA__g_scanner_get_next_token
+
+extern __typeof (g_scanner_input_file) IA__g_scanner_input_file __attribute((visibility("hidden")));
+#define g_scanner_input_file IA__g_scanner_input_file
+
+extern __typeof (g_scanner_input_text) IA__g_scanner_input_text __attribute((visibility("hidden")));
+#define g_scanner_input_text IA__g_scanner_input_text
+
+extern __typeof (g_scanner_lookup_symbol) IA__g_scanner_lookup_symbol __attribute((visibility("hidden")));
+#define g_scanner_lookup_symbol IA__g_scanner_lookup_symbol
+
+extern __typeof (g_scanner_new) IA__g_scanner_new __attribute((visibility("hidden")));
+#define g_scanner_new IA__g_scanner_new
+
+extern __typeof (g_scanner_peek_next_token) IA__g_scanner_peek_next_token __attribute((visibility("hidden")));
+#define g_scanner_peek_next_token IA__g_scanner_peek_next_token
+
+extern __typeof (g_scanner_scope_add_symbol) IA__g_scanner_scope_add_symbol __attribute((visibility("hidden")));
+#define g_scanner_scope_add_symbol IA__g_scanner_scope_add_symbol
+
+extern __typeof (g_scanner_scope_foreach_symbol) IA__g_scanner_scope_foreach_symbol __attribute((visibility("hidden")));
+#define g_scanner_scope_foreach_symbol IA__g_scanner_scope_foreach_symbol
+
+extern __typeof (g_scanner_scope_lookup_symbol) IA__g_scanner_scope_lookup_symbol __attribute((visibility("hidden")));
+#define g_scanner_scope_lookup_symbol IA__g_scanner_scope_lookup_symbol
+
+extern __typeof (g_scanner_scope_remove_symbol) IA__g_scanner_scope_remove_symbol __attribute((visibility("hidden")));
+#define g_scanner_scope_remove_symbol IA__g_scanner_scope_remove_symbol
+
+extern __typeof (g_scanner_set_scope) IA__g_scanner_set_scope __attribute((visibility("hidden")));
+#define g_scanner_set_scope IA__g_scanner_set_scope
+
+extern __typeof (g_scanner_sync_file_offset) IA__g_scanner_sync_file_offset __attribute((visibility("hidden")));
+#define g_scanner_sync_file_offset IA__g_scanner_sync_file_offset
+
+extern __typeof (g_scanner_unexp_token) IA__g_scanner_unexp_token __attribute((visibility("hidden")));
+#define g_scanner_unexp_token IA__g_scanner_unexp_token
+
+extern __typeof (g_scanner_warn) IA__g_scanner_warn __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_scanner_warn IA__g_scanner_warn
+
+#endif
+#endif
+#if IN_HEADER(__G_SEQUENCE_H__)
+#if IN_FILE(__G_SEQUENCE_C__)
+extern __typeof (g_sequence_new) IA__g_sequence_new __attribute((visibility("hidden")));
+#define g_sequence_new IA__g_sequence_new
+
+extern __typeof (g_sequence_free) IA__g_sequence_free __attribute((visibility("hidden")));
+#define g_sequence_free IA__g_sequence_free
+
+extern __typeof (g_sequence_get_length) IA__g_sequence_get_length __attribute((visibility("hidden")));
+#define g_sequence_get_length IA__g_sequence_get_length
+
+extern __typeof (g_sequence_foreach) IA__g_sequence_foreach __attribute((visibility("hidden")));
+#define g_sequence_foreach IA__g_sequence_foreach
+
+extern __typeof (g_sequence_foreach_range) IA__g_sequence_foreach_range __attribute((visibility("hidden")));
+#define g_sequence_foreach_range IA__g_sequence_foreach_range
+
+extern __typeof (g_sequence_sort) IA__g_sequence_sort __attribute((visibility("hidden")));
+#define g_sequence_sort IA__g_sequence_sort
+
+extern __typeof (g_sequence_sort_iter) IA__g_sequence_sort_iter __attribute((visibility("hidden")));
+#define g_sequence_sort_iter IA__g_sequence_sort_iter
+
+extern __typeof (g_sequence_get_begin_iter) IA__g_sequence_get_begin_iter __attribute((visibility("hidden")));
+#define g_sequence_get_begin_iter IA__g_sequence_get_begin_iter
+
+extern __typeof (g_sequence_get_end_iter) IA__g_sequence_get_end_iter __attribute((visibility("hidden")));
+#define g_sequence_get_end_iter IA__g_sequence_get_end_iter
+
+extern __typeof (g_sequence_get_iter_at_pos) IA__g_sequence_get_iter_at_pos __attribute((visibility("hidden")));
+#define g_sequence_get_iter_at_pos IA__g_sequence_get_iter_at_pos
+
+extern __typeof (g_sequence_append) IA__g_sequence_append __attribute((visibility("hidden")));
+#define g_sequence_append IA__g_sequence_append
+
+extern __typeof (g_sequence_prepend) IA__g_sequence_prepend __attribute((visibility("hidden")));
+#define g_sequence_prepend IA__g_sequence_prepend
+
+extern __typeof (g_sequence_insert_before) IA__g_sequence_insert_before __attribute((visibility("hidden")));
+#define g_sequence_insert_before IA__g_sequence_insert_before
+
+extern __typeof (g_sequence_move) IA__g_sequence_move __attribute((visibility("hidden")));
+#define g_sequence_move IA__g_sequence_move
+
+extern __typeof (g_sequence_swap) IA__g_sequence_swap __attribute((visibility("hidden")));
+#define g_sequence_swap IA__g_sequence_swap
+
+extern __typeof (g_sequence_insert_sorted) IA__g_sequence_insert_sorted __attribute((visibility("hidden")));
+#define g_sequence_insert_sorted IA__g_sequence_insert_sorted
+
+extern __typeof (g_sequence_insert_sorted_iter) IA__g_sequence_insert_sorted_iter __attribute((visibility("hidden")));
+#define g_sequence_insert_sorted_iter IA__g_sequence_insert_sorted_iter
+
+extern __typeof (g_sequence_sort_changed) IA__g_sequence_sort_changed __attribute((visibility("hidden")));
+#define g_sequence_sort_changed IA__g_sequence_sort_changed
+
+extern __typeof (g_sequence_sort_changed_iter) IA__g_sequence_sort_changed_iter __attribute((visibility("hidden")));
+#define g_sequence_sort_changed_iter IA__g_sequence_sort_changed_iter
+
+extern __typeof (g_sequence_remove) IA__g_sequence_remove __attribute((visibility("hidden")));
+#define g_sequence_remove IA__g_sequence_remove
+
+extern __typeof (g_sequence_remove_range) IA__g_sequence_remove_range __attribute((visibility("hidden")));
+#define g_sequence_remove_range IA__g_sequence_remove_range
+
+extern __typeof (g_sequence_move_range) IA__g_sequence_move_range __attribute((visibility("hidden")));
+#define g_sequence_move_range IA__g_sequence_move_range
+
+extern __typeof (g_sequence_search) IA__g_sequence_search __attribute((visibility("hidden")));
+#define g_sequence_search IA__g_sequence_search
+
+extern __typeof (g_sequence_search_iter) IA__g_sequence_search_iter __attribute((visibility("hidden")));
+#define g_sequence_search_iter IA__g_sequence_search_iter
+
+extern __typeof (g_sequence_get) IA__g_sequence_get __attribute((visibility("hidden")));
+#define g_sequence_get IA__g_sequence_get
+
+extern __typeof (g_sequence_set) IA__g_sequence_set __attribute((visibility("hidden")));
+#define g_sequence_set IA__g_sequence_set
+
+extern __typeof (g_sequence_iter_is_begin) IA__g_sequence_iter_is_begin __attribute((visibility("hidden")));
+#define g_sequence_iter_is_begin IA__g_sequence_iter_is_begin
+
+extern __typeof (g_sequence_iter_is_end) IA__g_sequence_iter_is_end __attribute((visibility("hidden")));
+#define g_sequence_iter_is_end IA__g_sequence_iter_is_end
+
+extern __typeof (g_sequence_iter_next) IA__g_sequence_iter_next __attribute((visibility("hidden")));
+#define g_sequence_iter_next IA__g_sequence_iter_next
+
+extern __typeof (g_sequence_iter_prev) IA__g_sequence_iter_prev __attribute((visibility("hidden")));
+#define g_sequence_iter_prev IA__g_sequence_iter_prev
+
+extern __typeof (g_sequence_iter_get_position) IA__g_sequence_iter_get_position __attribute((visibility("hidden")));
+#define g_sequence_iter_get_position IA__g_sequence_iter_get_position
+
+extern __typeof (g_sequence_iter_move) IA__g_sequence_iter_move __attribute((visibility("hidden")));
+#define g_sequence_iter_move IA__g_sequence_iter_move
+
+extern __typeof (g_sequence_iter_get_sequence) IA__g_sequence_iter_get_sequence __attribute((visibility("hidden")));
+#define g_sequence_iter_get_sequence IA__g_sequence_iter_get_sequence
+
+extern __typeof (g_sequence_iter_compare) IA__g_sequence_iter_compare __attribute((visibility("hidden")));
+#define g_sequence_iter_compare IA__g_sequence_iter_compare
+
+extern __typeof (g_sequence_range_get_midpoint) IA__g_sequence_range_get_midpoint __attribute((visibility("hidden")));
+#define g_sequence_range_get_midpoint IA__g_sequence_range_get_midpoint
+
+#endif
+#endif
+#if IN_HEADER(__G_SHELL_H__)
+#if IN_FILE(__G_SHELL_C__)
+extern __typeof (g_shell_error_quark) IA__g_shell_error_quark __attribute((visibility("hidden")));
+#define g_shell_error_quark IA__g_shell_error_quark
+
+extern __typeof (g_shell_parse_argv) IA__g_shell_parse_argv __attribute((visibility("hidden")));
+#define g_shell_parse_argv IA__g_shell_parse_argv
+
+extern __typeof (g_shell_quote) IA__g_shell_quote __attribute((visibility("hidden")));
+#define g_shell_quote IA__g_shell_quote
+
+extern __typeof (g_shell_unquote) IA__g_shell_unquote __attribute((visibility("hidden")));
+#define g_shell_unquote IA__g_shell_unquote
+
+#endif
+#endif
+#if IN_HEADER(__G_SLIST_H__)
+#if IN_FILE(__G_SLIST_C__)
+extern __typeof (g_slist_alloc) IA__g_slist_alloc __attribute((visibility("hidden")));
+#define g_slist_alloc IA__g_slist_alloc
+
+extern __typeof (g_slist_append) IA__g_slist_append __attribute((visibility("hidden")));
+#define g_slist_append IA__g_slist_append
+
+extern __typeof (g_slist_concat) IA__g_slist_concat __attribute((visibility("hidden")));
+#define g_slist_concat IA__g_slist_concat
+
+extern __typeof (g_slist_copy) IA__g_slist_copy __attribute((visibility("hidden")));
+#define g_slist_copy IA__g_slist_copy
+
+extern __typeof (g_slist_delete_link) IA__g_slist_delete_link __attribute((visibility("hidden")));
+#define g_slist_delete_link IA__g_slist_delete_link
+
+extern __typeof (g_slist_find) IA__g_slist_find __attribute((visibility("hidden")));
+#define g_slist_find IA__g_slist_find
+
+extern __typeof (g_slist_find_custom) IA__g_slist_find_custom __attribute((visibility("hidden")));
+#define g_slist_find_custom IA__g_slist_find_custom
+
+extern __typeof (g_slist_foreach) IA__g_slist_foreach __attribute((visibility("hidden")));
+#define g_slist_foreach IA__g_slist_foreach
+
+extern __typeof (g_slist_free) IA__g_slist_free __attribute((visibility("hidden")));
+#define g_slist_free IA__g_slist_free
+
+extern __typeof (g_slist_free_1) IA__g_slist_free_1 __attribute((visibility("hidden")));
+#define g_slist_free_1 IA__g_slist_free_1
+
+extern __typeof (g_slist_index) IA__g_slist_index __attribute((visibility("hidden")));
+#define g_slist_index IA__g_slist_index
+
+extern __typeof (g_slist_insert) IA__g_slist_insert __attribute((visibility("hidden")));
+#define g_slist_insert IA__g_slist_insert
+
+extern __typeof (g_slist_insert_before) IA__g_slist_insert_before __attribute((visibility("hidden")));
+#define g_slist_insert_before IA__g_slist_insert_before
+
+extern __typeof (g_slist_insert_sorted) IA__g_slist_insert_sorted __attribute((visibility("hidden")));
+#define g_slist_insert_sorted IA__g_slist_insert_sorted
+
+extern __typeof (g_slist_insert_sorted_with_data) IA__g_slist_insert_sorted_with_data __attribute((visibility("hidden")));
+#define g_slist_insert_sorted_with_data IA__g_slist_insert_sorted_with_data
+
+extern __typeof (g_slist_last) IA__g_slist_last __attribute((visibility("hidden")));
+#define g_slist_last IA__g_slist_last
+
+extern __typeof (g_slist_length) IA__g_slist_length __attribute((visibility("hidden")));
+#define g_slist_length IA__g_slist_length
+
+extern __typeof (g_slist_nth) IA__g_slist_nth __attribute((visibility("hidden")));
+#define g_slist_nth IA__g_slist_nth
+
+extern __typeof (g_slist_nth_data) IA__g_slist_nth_data __attribute((visibility("hidden")));
+#define g_slist_nth_data IA__g_slist_nth_data
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_slist_pop_allocator) IA__g_slist_pop_allocator __attribute((visibility("hidden")));
+#define g_slist_pop_allocator IA__g_slist_pop_allocator
+
+#endif
+extern __typeof (g_slist_position) IA__g_slist_position __attribute((visibility("hidden")));
+#define g_slist_position IA__g_slist_position
+
+extern __typeof (g_slist_prepend) IA__g_slist_prepend __attribute((visibility("hidden")));
+#define g_slist_prepend IA__g_slist_prepend
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_slist_push_allocator) IA__g_slist_push_allocator __attribute((visibility("hidden")));
+#define g_slist_push_allocator IA__g_slist_push_allocator
+
+#endif
+extern __typeof (g_slist_remove) IA__g_slist_remove __attribute((visibility("hidden")));
+#define g_slist_remove IA__g_slist_remove
+
+extern __typeof (g_slist_remove_all) IA__g_slist_remove_all __attribute((visibility("hidden")));
+#define g_slist_remove_all IA__g_slist_remove_all
+
+extern __typeof (g_slist_remove_link) IA__g_slist_remove_link __attribute((visibility("hidden")));
+#define g_slist_remove_link IA__g_slist_remove_link
+
+extern __typeof (g_slist_reverse) IA__g_slist_reverse __attribute((visibility("hidden")));
+#define g_slist_reverse IA__g_slist_reverse
+
+extern __typeof (g_slist_sort) IA__g_slist_sort __attribute((visibility("hidden")));
+#define g_slist_sort IA__g_slist_sort
+
+extern __typeof (g_slist_sort_with_data) IA__g_slist_sort_with_data __attribute((visibility("hidden")));
+#define g_slist_sort_with_data IA__g_slist_sort_with_data
+
+#endif
+#endif
+#if IN_HEADER(__G_SPAWN_H__)
+#if IN_FILE(__G_SPAWN_C__)
+#ifndef _WIN64
+extern __typeof (g_spawn_async) IA__g_spawn_async __attribute((visibility("hidden")));
+#define g_spawn_async IA__g_spawn_async
+
+extern __typeof (g_spawn_async_with_pipes) IA__g_spawn_async_with_pipes __attribute((visibility("hidden")));
+#define g_spawn_async_with_pipes IA__g_spawn_async_with_pipes
+
+#endif
+extern __typeof (g_spawn_close_pid) IA__g_spawn_close_pid __attribute((visibility("hidden")));
+#define g_spawn_close_pid IA__g_spawn_close_pid
+
+#ifndef _WIN64
+extern __typeof (g_spawn_command_line_async) IA__g_spawn_command_line_async __attribute((visibility("hidden")));
+#define g_spawn_command_line_async IA__g_spawn_command_line_async
+
+extern __typeof (g_spawn_command_line_sync) IA__g_spawn_command_line_sync __attribute((visibility("hidden")));
+#define g_spawn_command_line_sync IA__g_spawn_command_line_sync
+
+#endif
+extern __typeof (g_spawn_error_quark) IA__g_spawn_error_quark __attribute((visibility("hidden")));
+#define g_spawn_error_quark IA__g_spawn_error_quark
+
+#ifndef _WIN64
+extern __typeof (g_spawn_sync) IA__g_spawn_sync __attribute((visibility("hidden")));
+#define g_spawn_sync IA__g_spawn_sync
+
+#endif
+#ifdef G_OS_WIN32
+extern __typeof (g_spawn_async_utf8) IA__g_spawn_async_utf8 __attribute((visibility("hidden")));
+#define g_spawn_async_utf8 IA__g_spawn_async_utf8
+
+extern __typeof (g_spawn_async_with_pipes_utf8) IA__g_spawn_async_with_pipes_utf8 __attribute((visibility("hidden")));
+#define g_spawn_async_with_pipes_utf8 IA__g_spawn_async_with_pipes_utf8
+
+extern __typeof (g_spawn_command_line_async_utf8) IA__g_spawn_command_line_async_utf8 __attribute((visibility("hidden")));
+#define g_spawn_command_line_async_utf8 IA__g_spawn_command_line_async_utf8
+
+extern __typeof (g_spawn_command_line_sync_utf8) IA__g_spawn_command_line_sync_utf8 __attribute((visibility("hidden")));
+#define g_spawn_command_line_sync_utf8 IA__g_spawn_command_line_sync_utf8
+
+extern __typeof (g_spawn_sync_utf8) IA__g_spawn_sync_utf8 __attribute((visibility("hidden")));
+#define g_spawn_sync_utf8 IA__g_spawn_sync_utf8
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_STDIO_H__)
+#if IN_FILE(__G_STDIO_C__)
+#if !defined(G_OS_UNIX) || defined(G_STDIO_NO_WRAP_ON_UNIX)
+extern __typeof (g_chmod) IA__g_chmod __attribute((visibility("hidden")));
+#define g_chmod IA__g_chmod
+
+extern __typeof (g_open) IA__g_open __attribute((visibility("hidden")));
+#define g_open IA__g_open
+
+extern __typeof (g_creat) IA__g_creat __attribute((visibility("hidden")));
+#define g_creat IA__g_creat
+
+extern __typeof (g_rename) IA__g_rename __attribute((visibility("hidden")));
+#define g_rename IA__g_rename
+
+extern __typeof (g_mkdir) IA__g_mkdir __attribute((visibility("hidden")));
+#define g_mkdir IA__g_mkdir
+
+extern __typeof (g_stat) IA__g_stat __attribute((visibility("hidden")));
+#define g_stat IA__g_stat
+
+extern __typeof (g_lstat) IA__g_lstat __attribute((visibility("hidden")));
+#define g_lstat IA__g_lstat
+
+extern __typeof (g_remove) IA__g_remove __attribute((visibility("hidden")));
+#define g_remove IA__g_remove
+
+extern __typeof (g_fopen) IA__g_fopen __attribute((visibility("hidden")));
+#define g_fopen IA__g_fopen
+
+extern __typeof (g_freopen) IA__g_freopen __attribute((visibility("hidden")));
+#define g_freopen IA__g_freopen
+
+extern __typeof (g_utime) IA__g_utime __attribute((visibility("hidden")));
+#define g_utime IA__g_utime
+
+#endif
+extern __typeof (g_access) IA__g_access __attribute((visibility("hidden")));
+#define g_access IA__g_access
+
+extern __typeof (g_chdir) IA__g_chdir __attribute((visibility("hidden")));
+#define g_chdir IA__g_chdir
+
+extern __typeof (g_unlink) IA__g_unlink __attribute((visibility("hidden")));
+#define g_unlink IA__g_unlink
+
+extern __typeof (g_rmdir) IA__g_rmdir __attribute((visibility("hidden")));
+#define g_rmdir IA__g_rmdir
+
+#endif
+#endif
+#if IN_HEADER(__G_STRFUNCS_H__)
+#if IN_FILE(__G_STRFUNCS_C__)
+extern __typeof (g_ascii_digit_value) IA__g_ascii_digit_value __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_ascii_digit_value IA__g_ascii_digit_value
+
+extern __typeof (g_ascii_dtostr) IA__g_ascii_dtostr __attribute((visibility("hidden")));
+#define g_ascii_dtostr IA__g_ascii_dtostr
+
+extern __typeof (g_ascii_formatd) IA__g_ascii_formatd __attribute((visibility("hidden")));
+#define g_ascii_formatd IA__g_ascii_formatd
+
+extern __typeof (g_ascii_strdown) IA__g_ascii_strdown __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_ascii_strdown IA__g_ascii_strdown
+
+extern __typeof (g_ascii_strtod) IA__g_ascii_strtod __attribute((visibility("hidden")));
+#define g_ascii_strtod IA__g_ascii_strtod
+
+extern __typeof (g_ascii_strtoull) IA__g_ascii_strtoull __attribute((visibility("hidden")));
+#define g_ascii_strtoull IA__g_ascii_strtoull
+
+extern __typeof (g_ascii_strtoll) IA__g_ascii_strtoll __attribute((visibility("hidden")));
+#define g_ascii_strtoll IA__g_ascii_strtoll
+
+extern __typeof (g_ascii_strup) IA__g_ascii_strup __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_ascii_strup IA__g_ascii_strup
+
+extern __typeof (g_ascii_tolower) IA__g_ascii_tolower __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_ascii_tolower IA__g_ascii_tolower
+
+extern __typeof (g_ascii_toupper) IA__g_ascii_toupper __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_ascii_toupper IA__g_ascii_toupper
+
+extern __typeof (g_ascii_xdigit_value) IA__g_ascii_xdigit_value __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_ascii_xdigit_value IA__g_ascii_xdigit_value
+
+extern __typeof (g_ascii_strcasecmp) IA__g_ascii_strcasecmp __attribute((visibility("hidden")));
+#define g_ascii_strcasecmp IA__g_ascii_strcasecmp
+
+extern __typeof (g_ascii_strncasecmp) IA__g_ascii_strncasecmp __attribute((visibility("hidden")));
+#define g_ascii_strncasecmp IA__g_ascii_strncasecmp
+
+extern __typeof (g_memdup) IA__g_memdup __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_memdup IA__g_memdup
+
+extern __typeof (g_stpcpy) IA__g_stpcpy __attribute((visibility("hidden")));
+#define g_stpcpy IA__g_stpcpy
+
+extern __typeof (g_strcanon) IA__g_strcanon __attribute((visibility("hidden")));
+#define g_strcanon IA__g_strcanon
+
+extern __typeof (g_strchomp) IA__g_strchomp __attribute((visibility("hidden")));
+#define g_strchomp IA__g_strchomp
+
+extern __typeof (g_strchug) IA__g_strchug __attribute((visibility("hidden")));
+#define g_strchug IA__g_strchug
+
+extern __typeof (g_strcompress) IA__g_strcompress __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strcompress IA__g_strcompress
+
+extern __typeof (g_strconcat) IA__g_strconcat __attribute((visibility("hidden"))) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+#define g_strconcat IA__g_strconcat
+
+extern __typeof (g_strdelimit) IA__g_strdelimit __attribute((visibility("hidden")));
+#define g_strdelimit IA__g_strdelimit
+
+extern __typeof (g_strdup) IA__g_strdup __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strdup IA__g_strdup
+
+extern __typeof (g_strdup_printf) IA__g_strdup_printf __attribute((visibility("hidden"))) G_GNUC_PRINTF(1,2) G_GNUC_MALLOC;
+#define g_strdup_printf IA__g_strdup_printf
+
+extern __typeof (g_strdupv) IA__g_strdupv __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strdupv IA__g_strdupv
+
+extern __typeof (g_strdup_vprintf) IA__g_strdup_vprintf __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strdup_vprintf IA__g_strdup_vprintf
+
+extern __typeof (g_strerror) IA__g_strerror __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_strerror IA__g_strerror
+
+extern __typeof (g_strescape) IA__g_strescape __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strescape IA__g_strescape
+
+extern __typeof (g_strfreev) IA__g_strfreev __attribute((visibility("hidden")));
+#define g_strfreev IA__g_strfreev
+
+extern __typeof (g_str_has_prefix) IA__g_str_has_prefix __attribute((visibility("hidden")));
+#define g_str_has_prefix IA__g_str_has_prefix
+
+extern __typeof (g_str_has_suffix) IA__g_str_has_suffix __attribute((visibility("hidden")));
+#define g_str_has_suffix IA__g_str_has_suffix
+
+extern __typeof (g_strjoin) IA__g_strjoin __attribute((visibility("hidden"))) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+#define g_strjoin IA__g_strjoin
+
+extern __typeof (g_strjoinv) IA__g_strjoinv __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strjoinv IA__g_strjoinv
+
+extern __typeof (g_strlcat) IA__g_strlcat __attribute((visibility("hidden")));
+#define g_strlcat IA__g_strlcat
+
+extern __typeof (g_strlcpy) IA__g_strlcpy __attribute((visibility("hidden")));
+#define g_strlcpy IA__g_strlcpy
+
+extern __typeof (g_strndup) IA__g_strndup __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strndup IA__g_strndup
+
+extern __typeof (g_strnfill) IA__g_strnfill __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strnfill IA__g_strnfill
+
+extern __typeof (g_strreverse) IA__g_strreverse __attribute((visibility("hidden")));
+#define g_strreverse IA__g_strreverse
+
+extern __typeof (g_strrstr) IA__g_strrstr __attribute((visibility("hidden")));
+#define g_strrstr IA__g_strrstr
+
+extern __typeof (g_strrstr_len) IA__g_strrstr_len __attribute((visibility("hidden")));
+#define g_strrstr_len IA__g_strrstr_len
+
+extern __typeof (g_strsignal) IA__g_strsignal __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_strsignal IA__g_strsignal
+
+extern __typeof (g_strsplit) IA__g_strsplit __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strsplit IA__g_strsplit
+
+extern __typeof (g_strsplit_set) IA__g_strsplit_set __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_strsplit_set IA__g_strsplit_set
+
+extern __typeof (g_strstr_len) IA__g_strstr_len __attribute((visibility("hidden")));
+#define g_strstr_len IA__g_strstr_len
+
+extern __typeof (g_strtod) IA__g_strtod __attribute((visibility("hidden")));
+#define g_strtod IA__g_strtod
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_strcasecmp) IA__g_strcasecmp __attribute((visibility("hidden")));
+#define g_strcasecmp IA__g_strcasecmp
+
+extern __typeof (g_strncasecmp) IA__g_strncasecmp __attribute((visibility("hidden")));
+#define g_strncasecmp IA__g_strncasecmp
+
+extern __typeof (g_strup) IA__g_strup __attribute((visibility("hidden")));
+#define g_strup IA__g_strup
+
+extern __typeof (g_strdown) IA__g_strdown __attribute((visibility("hidden")));
+#define g_strdown IA__g_strdown
+
+#endif
+extern __typeof (g_strv_length) IA__g_strv_length __attribute((visibility("hidden")));
+#define g_strv_length IA__g_strv_length
+
+extern __typeof (g_strip_context) IA__g_strip_context __attribute((visibility("hidden"))) G_GNUC_FORMAT(1);
+#define g_strip_context IA__g_strip_context
+
+extern __typeof (g_dgettext) IA__g_dgettext __attribute((visibility("hidden"))) G_GNUC_FORMAT(2);
+#define g_dgettext IA__g_dgettext
+
+extern __typeof (g_dngettext) IA__g_dngettext __attribute((visibility("hidden"))) G_GNUC_FORMAT(3);
+#define g_dngettext IA__g_dngettext
+
+extern __typeof (g_dpgettext) IA__g_dpgettext __attribute((visibility("hidden"))) G_GNUC_FORMAT(2);
+#define g_dpgettext IA__g_dpgettext
+
+extern __typeof (g_dpgettext2) IA__g_dpgettext2 __attribute((visibility("hidden"))) G_GNUC_FORMAT(3);
+#define g_dpgettext2 IA__g_dpgettext2
+
+#endif
+#endif
+#if IN_HEADER(__G_URI_FUNCS_H__)
+#if IN_FILE(__G_URI_FUNCS_C__)
+extern __typeof (g_uri_unescape_string) IA__g_uri_unescape_string __attribute((visibility("hidden")));
+#define g_uri_unescape_string IA__g_uri_unescape_string
+
+extern __typeof (g_uri_unescape_segment) IA__g_uri_unescape_segment __attribute((visibility("hidden")));
+#define g_uri_unescape_segment IA__g_uri_unescape_segment
+
+extern __typeof (g_uri_parse_scheme) IA__g_uri_parse_scheme __attribute((visibility("hidden")));
+#define g_uri_parse_scheme IA__g_uri_parse_scheme
+
+extern __typeof (g_uri_escape_string) IA__g_uri_escape_string __attribute((visibility("hidden")));
+#define g_uri_escape_string IA__g_uri_escape_string
+
+#endif
+#endif
+#if IN_HEADER(__G_STRING_H__)
+#if IN_FILE(__G_STRING_C__)
+extern __typeof (g_string_append) IA__g_string_append __attribute((visibility("hidden")));
+#define g_string_append IA__g_string_append
+
+extern __typeof (g_string_append_len) IA__g_string_append_len __attribute((visibility("hidden")));
+#define g_string_append_len IA__g_string_append_len
+
+extern __typeof (g_string_append_printf) IA__g_string_append_printf __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_string_append_printf IA__g_string_append_printf
+
+extern __typeof (g_string_append_unichar) IA__g_string_append_unichar __attribute((visibility("hidden")));
+#define g_string_append_unichar IA__g_string_append_unichar
+
+extern __typeof (g_string_append_vprintf) IA__g_string_append_vprintf __attribute((visibility("hidden")));
+#define g_string_append_vprintf IA__g_string_append_vprintf
+
+extern __typeof (g_string_ascii_down) IA__g_string_ascii_down __attribute((visibility("hidden")));
+#define g_string_ascii_down IA__g_string_ascii_down
+
+extern __typeof (g_string_ascii_up) IA__g_string_ascii_up __attribute((visibility("hidden")));
+#define g_string_ascii_up IA__g_string_ascii_up
+
+extern __typeof (g_string_assign) IA__g_string_assign __attribute((visibility("hidden")));
+#define g_string_assign IA__g_string_assign
+
+extern __typeof (g_string_chunk_free) IA__g_string_chunk_free __attribute((visibility("hidden")));
+#define g_string_chunk_free IA__g_string_chunk_free
+
+extern __typeof (g_string_chunk_clear) IA__g_string_chunk_clear __attribute((visibility("hidden")));
+#define g_string_chunk_clear IA__g_string_chunk_clear
+
+extern __typeof (g_string_chunk_insert) IA__g_string_chunk_insert __attribute((visibility("hidden")));
+#define g_string_chunk_insert IA__g_string_chunk_insert
+
+extern __typeof (g_string_chunk_insert_const) IA__g_string_chunk_insert_const __attribute((visibility("hidden")));
+#define g_string_chunk_insert_const IA__g_string_chunk_insert_const
+
+extern __typeof (g_string_chunk_insert_len) IA__g_string_chunk_insert_len __attribute((visibility("hidden")));
+#define g_string_chunk_insert_len IA__g_string_chunk_insert_len
+
+extern __typeof (g_string_chunk_new) IA__g_string_chunk_new __attribute((visibility("hidden")));
+#define g_string_chunk_new IA__g_string_chunk_new
+
+extern __typeof (g_string_equal) IA__g_string_equal __attribute((visibility("hidden")));
+#define g_string_equal IA__g_string_equal
+
+extern __typeof (g_string_erase) IA__g_string_erase __attribute((visibility("hidden")));
+#define g_string_erase IA__g_string_erase
+
+extern __typeof (g_string_free) IA__g_string_free __attribute((visibility("hidden")));
+#define g_string_free IA__g_string_free
+
+extern __typeof (g_string_hash) IA__g_string_hash __attribute((visibility("hidden")));
+#define g_string_hash IA__g_string_hash
+
+extern __typeof (g_string_insert) IA__g_string_insert __attribute((visibility("hidden")));
+#define g_string_insert IA__g_string_insert
+
+extern __typeof (g_string_insert_c) IA__g_string_insert_c __attribute((visibility("hidden")));
+#define g_string_insert_c IA__g_string_insert_c
+
+extern __typeof (g_string_insert_len) IA__g_string_insert_len __attribute((visibility("hidden")));
+#define g_string_insert_len IA__g_string_insert_len
+
+extern __typeof (g_string_insert_unichar) IA__g_string_insert_unichar __attribute((visibility("hidden")));
+#define g_string_insert_unichar IA__g_string_insert_unichar
+
+extern __typeof (g_string_new) IA__g_string_new __attribute((visibility("hidden")));
+#define g_string_new IA__g_string_new
+
+extern __typeof (g_string_new_len) IA__g_string_new_len __attribute((visibility("hidden")));
+#define g_string_new_len IA__g_string_new_len
+
+extern __typeof (g_string_overwrite) IA__g_string_overwrite __attribute((visibility("hidden")));
+#define g_string_overwrite IA__g_string_overwrite
+
+extern __typeof (g_string_overwrite_len) IA__g_string_overwrite_len __attribute((visibility("hidden")));
+#define g_string_overwrite_len IA__g_string_overwrite_len
+
+extern __typeof (g_string_prepend) IA__g_string_prepend __attribute((visibility("hidden")));
+#define g_string_prepend IA__g_string_prepend
+
+extern __typeof (g_string_prepend_c) IA__g_string_prepend_c __attribute((visibility("hidden")));
+#define g_string_prepend_c IA__g_string_prepend_c
+
+extern __typeof (g_string_prepend_len) IA__g_string_prepend_len __attribute((visibility("hidden")));
+#define g_string_prepend_len IA__g_string_prepend_len
+
+extern __typeof (g_string_prepend_unichar) IA__g_string_prepend_unichar __attribute((visibility("hidden")));
+#define g_string_prepend_unichar IA__g_string_prepend_unichar
+
+extern __typeof (g_string_printf) IA__g_string_printf __attribute((visibility("hidden"))) G_GNUC_PRINTF(2,3);
+#define g_string_printf IA__g_string_printf
+
+extern __typeof (g_string_set_size) IA__g_string_set_size __attribute((visibility("hidden")));
+#define g_string_set_size IA__g_string_set_size
+
+extern __typeof (g_string_sized_new) IA__g_string_sized_new __attribute((visibility("hidden")));
+#define g_string_sized_new IA__g_string_sized_new
+
+extern __typeof (g_string_truncate) IA__g_string_truncate __attribute((visibility("hidden")));
+#define g_string_truncate IA__g_string_truncate
+
+extern __typeof (g_string_append_uri_escaped) IA__g_string_append_uri_escaped __attribute((visibility("hidden")));
+#define g_string_append_uri_escaped IA__g_string_append_uri_escaped
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_string_down) IA__g_string_down __attribute((visibility("hidden")));
+#define g_string_down IA__g_string_down
+
+extern __typeof (g_string_up) IA__g_string_up __attribute((visibility("hidden")));
+#define g_string_up IA__g_string_up
+
+#endif
+extern __typeof (g_string_vprintf) IA__g_string_vprintf __attribute((visibility("hidden")));
+#define g_string_vprintf IA__g_string_vprintf
+
+extern __typeof (g_str_equal) IA__g_str_equal __attribute((visibility("hidden")));
+#define g_str_equal IA__g_str_equal
+
+extern __typeof (g_str_hash) IA__g_str_hash __attribute((visibility("hidden")));
+#define g_str_hash IA__g_str_hash
+
+#endif
+#endif
+#if IN_HEADER(__G_THREAD_H__)
+#if IN_FILE(__G_THREAD_C__)
+extern __typeof (g_once_impl) IA__g_once_impl __attribute((visibility("hidden")));
+#define g_once_impl IA__g_once_impl
+
+extern __typeof (g_once_init_enter_impl) IA__g_once_init_enter_impl __attribute((visibility("hidden")));
+#define g_once_init_enter_impl IA__g_once_init_enter_impl
+
+extern __typeof (g_once_init_leave) IA__g_once_init_leave __attribute((visibility("hidden")));
+#define g_once_init_leave IA__g_once_init_leave
+
+extern __typeof (g_thread_create_full) IA__g_thread_create_full __attribute((visibility("hidden")));
+#define g_thread_create_full IA__g_thread_create_full
+
+extern __typeof (g_thread_error_quark) IA__g_thread_error_quark __attribute((visibility("hidden")));
+#define g_thread_error_quark IA__g_thread_error_quark
+
+extern __typeof (g_thread_exit) IA__g_thread_exit __attribute((visibility("hidden")));
+#define g_thread_exit IA__g_thread_exit
+
+extern __typeof (g_thread_join) IA__g_thread_join __attribute((visibility("hidden")));
+#define g_thread_join IA__g_thread_join
+
+extern __typeof (g_thread_self) IA__g_thread_self __attribute((visibility("hidden")));
+#define g_thread_self IA__g_thread_self
+
+extern __typeof (g_thread_set_priority) IA__g_thread_set_priority __attribute((visibility("hidden")));
+#define g_thread_set_priority IA__g_thread_set_priority
+
+extern __typeof (g_static_mutex_free) IA__g_static_mutex_free __attribute((visibility("hidden")));
+#define g_static_mutex_free IA__g_static_mutex_free
+
+extern __typeof (g_static_mutex_get_mutex_impl) IA__g_static_mutex_get_mutex_impl __attribute((visibility("hidden")));
+#define g_static_mutex_get_mutex_impl IA__g_static_mutex_get_mutex_impl
+
+extern __typeof (g_static_mutex_init) IA__g_static_mutex_init __attribute((visibility("hidden")));
+#define g_static_mutex_init IA__g_static_mutex_init
+
+extern __typeof (g_static_private_free) IA__g_static_private_free __attribute((visibility("hidden")));
+#define g_static_private_free IA__g_static_private_free
+
+extern __typeof (g_static_private_get) IA__g_static_private_get __attribute((visibility("hidden")));
+#define g_static_private_get IA__g_static_private_get
+
+extern __typeof (g_static_private_init) IA__g_static_private_init __attribute((visibility("hidden")));
+#define g_static_private_init IA__g_static_private_init
+
+extern __typeof (g_static_private_set) IA__g_static_private_set __attribute((visibility("hidden")));
+#define g_static_private_set IA__g_static_private_set
+
+extern __typeof (g_static_rec_mutex_free) IA__g_static_rec_mutex_free __attribute((visibility("hidden")));
+#define g_static_rec_mutex_free IA__g_static_rec_mutex_free
+
+extern __typeof (g_static_rec_mutex_init) IA__g_static_rec_mutex_init __attribute((visibility("hidden")));
+#define g_static_rec_mutex_init IA__g_static_rec_mutex_init
+
+extern __typeof (g_static_rec_mutex_lock) IA__g_static_rec_mutex_lock __attribute((visibility("hidden")));
+#define g_static_rec_mutex_lock IA__g_static_rec_mutex_lock
+
+extern __typeof (g_static_rec_mutex_lock_full) IA__g_static_rec_mutex_lock_full __attribute((visibility("hidden")));
+#define g_static_rec_mutex_lock_full IA__g_static_rec_mutex_lock_full
+
+extern __typeof (g_static_rec_mutex_trylock) IA__g_static_rec_mutex_trylock __attribute((visibility("hidden")));
+#define g_static_rec_mutex_trylock IA__g_static_rec_mutex_trylock
+
+extern __typeof (g_static_rec_mutex_unlock) IA__g_static_rec_mutex_unlock __attribute((visibility("hidden")));
+#define g_static_rec_mutex_unlock IA__g_static_rec_mutex_unlock
+
+extern __typeof (g_static_rec_mutex_unlock_full) IA__g_static_rec_mutex_unlock_full __attribute((visibility("hidden")));
+#define g_static_rec_mutex_unlock_full IA__g_static_rec_mutex_unlock_full
+
+extern __typeof (g_static_rw_lock_free) IA__g_static_rw_lock_free __attribute((visibility("hidden")));
+#define g_static_rw_lock_free IA__g_static_rw_lock_free
+
+extern __typeof (g_static_rw_lock_init) IA__g_static_rw_lock_init __attribute((visibility("hidden")));
+#define g_static_rw_lock_init IA__g_static_rw_lock_init
+
+extern __typeof (g_static_rw_lock_reader_lock) IA__g_static_rw_lock_reader_lock __attribute((visibility("hidden")));
+#define g_static_rw_lock_reader_lock IA__g_static_rw_lock_reader_lock
+
+extern __typeof (g_static_rw_lock_reader_trylock) IA__g_static_rw_lock_reader_trylock __attribute((visibility("hidden")));
+#define g_static_rw_lock_reader_trylock IA__g_static_rw_lock_reader_trylock
+
+extern __typeof (g_static_rw_lock_reader_unlock) IA__g_static_rw_lock_reader_unlock __attribute((visibility("hidden")));
+#define g_static_rw_lock_reader_unlock IA__g_static_rw_lock_reader_unlock
+
+extern __typeof (g_static_rw_lock_writer_lock) IA__g_static_rw_lock_writer_lock __attribute((visibility("hidden")));
+#define g_static_rw_lock_writer_lock IA__g_static_rw_lock_writer_lock
+
+extern __typeof (g_static_rw_lock_writer_trylock) IA__g_static_rw_lock_writer_trylock __attribute((visibility("hidden")));
+#define g_static_rw_lock_writer_trylock IA__g_static_rw_lock_writer_trylock
+
+extern __typeof (g_static_rw_lock_writer_unlock) IA__g_static_rw_lock_writer_unlock __attribute((visibility("hidden")));
+#define g_static_rw_lock_writer_unlock IA__g_static_rw_lock_writer_unlock
+
+extern __typeof (g_thread_foreach) IA__g_thread_foreach __attribute((visibility("hidden")));
+#define g_thread_foreach IA__g_thread_foreach
+
+extern __typeof (g_thread_get_initialized) IA__g_thread_get_initialized __attribute((visibility("hidden")));
+#define g_thread_get_initialized IA__g_thread_get_initialized
+
+#endif
+#endif
+#if IN_HEADER(__G_THREADPOOL_H__)
+#if IN_FILE(__G_THREADPOOL_C__)
+extern __typeof (g_thread_pool_free) IA__g_thread_pool_free __attribute((visibility("hidden")));
+#define g_thread_pool_free IA__g_thread_pool_free
+
+extern __typeof (g_thread_pool_get_max_threads) IA__g_thread_pool_get_max_threads __attribute((visibility("hidden")));
+#define g_thread_pool_get_max_threads IA__g_thread_pool_get_max_threads
+
+extern __typeof (g_thread_pool_get_max_unused_threads) IA__g_thread_pool_get_max_unused_threads __attribute((visibility("hidden")));
+#define g_thread_pool_get_max_unused_threads IA__g_thread_pool_get_max_unused_threads
+
+extern __typeof (g_thread_pool_get_max_idle_time) IA__g_thread_pool_get_max_idle_time __attribute((visibility("hidden")));
+#define g_thread_pool_get_max_idle_time IA__g_thread_pool_get_max_idle_time
+
+extern __typeof (g_thread_pool_get_num_threads) IA__g_thread_pool_get_num_threads __attribute((visibility("hidden")));
+#define g_thread_pool_get_num_threads IA__g_thread_pool_get_num_threads
+
+extern __typeof (g_thread_pool_get_num_unused_threads) IA__g_thread_pool_get_num_unused_threads __attribute((visibility("hidden")));
+#define g_thread_pool_get_num_unused_threads IA__g_thread_pool_get_num_unused_threads
+
+extern __typeof (g_thread_pool_new) IA__g_thread_pool_new __attribute((visibility("hidden")));
+#define g_thread_pool_new IA__g_thread_pool_new
+
+extern __typeof (g_thread_pool_push) IA__g_thread_pool_push __attribute((visibility("hidden")));
+#define g_thread_pool_push IA__g_thread_pool_push
+
+extern __typeof (g_thread_pool_set_max_threads) IA__g_thread_pool_set_max_threads __attribute((visibility("hidden")));
+#define g_thread_pool_set_max_threads IA__g_thread_pool_set_max_threads
+
+extern __typeof (g_thread_pool_set_max_unused_threads) IA__g_thread_pool_set_max_unused_threads __attribute((visibility("hidden")));
+#define g_thread_pool_set_max_unused_threads IA__g_thread_pool_set_max_unused_threads
+
+extern __typeof (g_thread_pool_set_max_idle_time) IA__g_thread_pool_set_max_idle_time __attribute((visibility("hidden")));
+#define g_thread_pool_set_max_idle_time IA__g_thread_pool_set_max_idle_time
+
+extern __typeof (g_thread_pool_stop_unused_threads) IA__g_thread_pool_stop_unused_threads __attribute((visibility("hidden")));
+#define g_thread_pool_stop_unused_threads IA__g_thread_pool_stop_unused_threads
+
+extern __typeof (g_thread_pool_unprocessed) IA__g_thread_pool_unprocessed __attribute((visibility("hidden")));
+#define g_thread_pool_unprocessed IA__g_thread_pool_unprocessed
+
+extern __typeof (g_thread_pool_set_sort_function) IA__g_thread_pool_set_sort_function __attribute((visibility("hidden")));
+#define g_thread_pool_set_sort_function IA__g_thread_pool_set_sort_function
+
+#endif
+#endif
+#if IN_HEADER(__G_TEST_UTILS_H__)
+#if IN_FILE(__G_TEST_UTILS_C__)
+extern __typeof (g_assertion_message) IA__g_assertion_message __attribute((visibility("hidden"))) G_GNUC_NORETURN;
+#define g_assertion_message IA__g_assertion_message
+
+extern __typeof (g_assertion_message_cmpnum) IA__g_assertion_message_cmpnum __attribute((visibility("hidden"))) G_GNUC_NORETURN;
+#define g_assertion_message_cmpnum IA__g_assertion_message_cmpnum
+
+extern __typeof (g_assertion_message_cmpstr) IA__g_assertion_message_cmpstr __attribute((visibility("hidden"))) G_GNUC_NORETURN;
+#define g_assertion_message_cmpstr IA__g_assertion_message_cmpstr
+
+extern __typeof (g_assertion_message_expr) IA__g_assertion_message_expr __attribute((visibility("hidden"))) G_GNUC_NORETURN;
+#define g_assertion_message_expr IA__g_assertion_message_expr
+
+extern __typeof (g_assertion_message_error) IA__g_assertion_message_error __attribute((visibility("hidden"))) G_GNUC_NORETURN;
+#define g_assertion_message_error IA__g_assertion_message_error
+
+extern __typeof (g_strcmp0) IA__g_strcmp0 __attribute((visibility("hidden")));
+#define g_strcmp0 IA__g_strcmp0
+
+extern __typeof (g_test_add_data_func) IA__g_test_add_data_func __attribute((visibility("hidden")));
+#define g_test_add_data_func IA__g_test_add_data_func
+
+extern __typeof (g_test_add_func) IA__g_test_add_func __attribute((visibility("hidden")));
+#define g_test_add_func IA__g_test_add_func
+
+extern __typeof (g_test_add_vtable) IA__g_test_add_vtable __attribute((visibility("hidden")));
+#define g_test_add_vtable IA__g_test_add_vtable
+
+extern __typeof (g_test_bug) IA__g_test_bug __attribute((visibility("hidden")));
+#define g_test_bug IA__g_test_bug
+
+extern __typeof (g_test_bug_base) IA__g_test_bug_base __attribute((visibility("hidden")));
+#define g_test_bug_base IA__g_test_bug_base
+
+extern __typeof (g_test_create_case) IA__g_test_create_case __attribute((visibility("hidden")));
+#define g_test_create_case IA__g_test_create_case
+
+extern __typeof (g_test_create_suite) IA__g_test_create_suite __attribute((visibility("hidden")));
+#define g_test_create_suite IA__g_test_create_suite
+
+extern __typeof (g_test_get_root) IA__g_test_get_root __attribute((visibility("hidden")));
+#define g_test_get_root IA__g_test_get_root
+
+extern __typeof (g_test_init) IA__g_test_init __attribute((visibility("hidden")));
+#define g_test_init IA__g_test_init
+
+extern __typeof (g_test_log_buffer_free) IA__g_test_log_buffer_free __attribute((visibility("hidden")));
+#define g_test_log_buffer_free IA__g_test_log_buffer_free
+
+extern __typeof (g_test_log_buffer_new) IA__g_test_log_buffer_new __attribute((visibility("hidden")));
+#define g_test_log_buffer_new IA__g_test_log_buffer_new
+
+extern __typeof (g_test_log_buffer_pop) IA__g_test_log_buffer_pop __attribute((visibility("hidden")));
+#define g_test_log_buffer_pop IA__g_test_log_buffer_pop
+
+extern __typeof (g_test_log_buffer_push) IA__g_test_log_buffer_push __attribute((visibility("hidden")));
+#define g_test_log_buffer_push IA__g_test_log_buffer_push
+
+extern __typeof (g_test_log_msg_free) IA__g_test_log_msg_free __attribute((visibility("hidden")));
+#define g_test_log_msg_free IA__g_test_log_msg_free
+
+extern __typeof (g_test_log_type_name) IA__g_test_log_type_name __attribute((visibility("hidden")));
+#define g_test_log_type_name IA__g_test_log_type_name
+
+extern __typeof (g_test_maximized_result) IA__g_test_maximized_result __attribute((visibility("hidden")));
+#define g_test_maximized_result IA__g_test_maximized_result
+
+extern __typeof (g_test_message) IA__g_test_message __attribute((visibility("hidden")));
+#define g_test_message IA__g_test_message
+
+extern __typeof (g_test_minimized_result) IA__g_test_minimized_result __attribute((visibility("hidden")));
+#define g_test_minimized_result IA__g_test_minimized_result
+
+extern __typeof (g_test_queue_destroy) IA__g_test_queue_destroy __attribute((visibility("hidden")));
+#define g_test_queue_destroy IA__g_test_queue_destroy
+
+extern __typeof (g_test_queue_free) IA__g_test_queue_free __attribute((visibility("hidden")));
+#define g_test_queue_free IA__g_test_queue_free
+
+extern __typeof (g_test_rand_double) IA__g_test_rand_double __attribute((visibility("hidden")));
+#define g_test_rand_double IA__g_test_rand_double
+
+extern __typeof (g_test_rand_double_range) IA__g_test_rand_double_range __attribute((visibility("hidden")));
+#define g_test_rand_double_range IA__g_test_rand_double_range
+
+extern __typeof (g_test_rand_int) IA__g_test_rand_int __attribute((visibility("hidden")));
+#define g_test_rand_int IA__g_test_rand_int
+
+extern __typeof (g_test_rand_int_range) IA__g_test_rand_int_range __attribute((visibility("hidden")));
+#define g_test_rand_int_range IA__g_test_rand_int_range
+
+extern __typeof (g_test_run) IA__g_test_run __attribute((visibility("hidden")));
+#define g_test_run IA__g_test_run
+
+extern __typeof (g_test_run_suite) IA__g_test_run_suite __attribute((visibility("hidden")));
+#define g_test_run_suite IA__g_test_run_suite
+
+extern __typeof (g_test_suite_add) IA__g_test_suite_add __attribute((visibility("hidden")));
+#define g_test_suite_add IA__g_test_suite_add
+
+extern __typeof (g_test_suite_add_suite) IA__g_test_suite_add_suite __attribute((visibility("hidden")));
+#define g_test_suite_add_suite IA__g_test_suite_add_suite
+
+extern __typeof (g_test_timer_elapsed) IA__g_test_timer_elapsed __attribute((visibility("hidden")));
+#define g_test_timer_elapsed IA__g_test_timer_elapsed
+
+extern __typeof (g_test_timer_last) IA__g_test_timer_last __attribute((visibility("hidden")));
+#define g_test_timer_last IA__g_test_timer_last
+
+extern __typeof (g_test_timer_start) IA__g_test_timer_start __attribute((visibility("hidden")));
+#define g_test_timer_start IA__g_test_timer_start
+
+extern __typeof (g_test_trap_assertions) IA__g_test_trap_assertions __attribute((visibility("hidden")));
+#define g_test_trap_assertions IA__g_test_trap_assertions
+
+extern __typeof (g_test_trap_fork) IA__g_test_trap_fork __attribute((visibility("hidden")));
+#define g_test_trap_fork IA__g_test_trap_fork
+
+extern __typeof (g_test_trap_has_passed) IA__g_test_trap_has_passed __attribute((visibility("hidden")));
+#define g_test_trap_has_passed IA__g_test_trap_has_passed
+
+extern __typeof (g_test_trap_reached_timeout) IA__g_test_trap_reached_timeout __attribute((visibility("hidden")));
+#define g_test_trap_reached_timeout IA__g_test_trap_reached_timeout
+
+#endif
+#endif
+#if IN_HEADER(__G_TIMER_H__)
+#if IN_FILE(__G_TIMER_C__)
+extern __typeof (g_timer_continue) IA__g_timer_continue __attribute((visibility("hidden")));
+#define g_timer_continue IA__g_timer_continue
+
+extern __typeof (g_timer_destroy) IA__g_timer_destroy __attribute((visibility("hidden")));
+#define g_timer_destroy IA__g_timer_destroy
+
+extern __typeof (g_timer_elapsed) IA__g_timer_elapsed __attribute((visibility("hidden")));
+#define g_timer_elapsed IA__g_timer_elapsed
+
+extern __typeof (g_timer_new) IA__g_timer_new __attribute((visibility("hidden")));
+#define g_timer_new IA__g_timer_new
+
+extern __typeof (g_timer_reset) IA__g_timer_reset __attribute((visibility("hidden")));
+#define g_timer_reset IA__g_timer_reset
+
+extern __typeof (g_timer_start) IA__g_timer_start __attribute((visibility("hidden")));
+#define g_timer_start IA__g_timer_start
+
+extern __typeof (g_timer_stop) IA__g_timer_stop __attribute((visibility("hidden")));
+#define g_timer_stop IA__g_timer_stop
+
+extern __typeof (g_time_val_add) IA__g_time_val_add __attribute((visibility("hidden")));
+#define g_time_val_add IA__g_time_val_add
+
+extern __typeof (g_time_val_from_iso8601) IA__g_time_val_from_iso8601 __attribute((visibility("hidden")));
+#define g_time_val_from_iso8601 IA__g_time_val_from_iso8601
+
+extern __typeof (g_time_val_to_iso8601) IA__g_time_val_to_iso8601 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_time_val_to_iso8601 IA__g_time_val_to_iso8601
+
+extern __typeof (g_usleep) IA__g_usleep __attribute((visibility("hidden")));
+#define g_usleep IA__g_usleep
+
+#endif
+#endif
+#if IN_HEADER(__G_TREE_H__)
+#if IN_FILE(__G_TREE_C__)
+extern __typeof (g_tree_destroy) IA__g_tree_destroy __attribute((visibility("hidden")));
+#define g_tree_destroy IA__g_tree_destroy
+
+extern __typeof (g_tree_foreach) IA__g_tree_foreach __attribute((visibility("hidden")));
+#define g_tree_foreach IA__g_tree_foreach
+
+extern __typeof (g_tree_height) IA__g_tree_height __attribute((visibility("hidden")));
+#define g_tree_height IA__g_tree_height
+
+extern __typeof (g_tree_insert) IA__g_tree_insert __attribute((visibility("hidden")));
+#define g_tree_insert IA__g_tree_insert
+
+extern __typeof (g_tree_lookup) IA__g_tree_lookup __attribute((visibility("hidden")));
+#define g_tree_lookup IA__g_tree_lookup
+
+extern __typeof (g_tree_lookup_extended) IA__g_tree_lookup_extended __attribute((visibility("hidden")));
+#define g_tree_lookup_extended IA__g_tree_lookup_extended
+
+extern __typeof (g_tree_new) IA__g_tree_new __attribute((visibility("hidden")));
+#define g_tree_new IA__g_tree_new
+
+extern __typeof (g_tree_new_full) IA__g_tree_new_full __attribute((visibility("hidden")));
+#define g_tree_new_full IA__g_tree_new_full
+
+extern __typeof (g_tree_new_with_data) IA__g_tree_new_with_data __attribute((visibility("hidden")));
+#define g_tree_new_with_data IA__g_tree_new_with_data
+
+extern __typeof (g_tree_nnodes) IA__g_tree_nnodes __attribute((visibility("hidden")));
+#define g_tree_nnodes IA__g_tree_nnodes
+
+extern __typeof (g_tree_remove) IA__g_tree_remove __attribute((visibility("hidden")));
+#define g_tree_remove IA__g_tree_remove
+
+extern __typeof (g_tree_replace) IA__g_tree_replace __attribute((visibility("hidden")));
+#define g_tree_replace IA__g_tree_replace
+
+extern __typeof (g_tree_search) IA__g_tree_search __attribute((visibility("hidden")));
+#define g_tree_search IA__g_tree_search
+
+extern __typeof (g_tree_steal) IA__g_tree_steal __attribute((visibility("hidden")));
+#define g_tree_steal IA__g_tree_steal
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_tree_traverse) IA__g_tree_traverse __attribute((visibility("hidden")));
+#define g_tree_traverse IA__g_tree_traverse
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNIBREAK_C__)
+extern __typeof (g_unichar_break_type) IA__g_unichar_break_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_break_type IA__g_unichar_break_type
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNICOLLATE_C__)
+extern __typeof (g_utf8_collate) IA__g_utf8_collate __attribute((visibility("hidden")));
+#define g_utf8_collate IA__g_utf8_collate
+
+extern __typeof (g_utf8_collate_key) IA__g_utf8_collate_key __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_collate_key IA__g_utf8_collate_key
+
+extern __typeof (g_utf8_collate_key_for_filename) IA__g_utf8_collate_key_for_filename __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_collate_key_for_filename IA__g_utf8_collate_key_for_filename
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNIDECOMP_C__)
+extern __typeof (g_unicode_canonical_decomposition) IA__g_unicode_canonical_decomposition __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_unicode_canonical_decomposition IA__g_unicode_canonical_decomposition
+
+extern __typeof (g_unicode_canonical_ordering) IA__g_unicode_canonical_ordering __attribute((visibility("hidden")));
+#define g_unicode_canonical_ordering IA__g_unicode_canonical_ordering
+
+extern __typeof (g_unichar_combining_class) IA__g_unichar_combining_class __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_combining_class IA__g_unichar_combining_class
+
+extern __typeof (g_utf8_normalize) IA__g_utf8_normalize __attribute((visibility("hidden")));
+#define g_utf8_normalize IA__g_utf8_normalize
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNIPROP_C__)
+extern __typeof (g_unichar_isalnum) IA__g_unichar_isalnum __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isalnum IA__g_unichar_isalnum
+
+extern __typeof (g_unichar_isalpha) IA__g_unichar_isalpha __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isalpha IA__g_unichar_isalpha
+
+extern __typeof (g_unichar_iscntrl) IA__g_unichar_iscntrl __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_iscntrl IA__g_unichar_iscntrl
+
+extern __typeof (g_unichar_isdefined) IA__g_unichar_isdefined __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isdefined IA__g_unichar_isdefined
+
+extern __typeof (g_unichar_isdigit) IA__g_unichar_isdigit __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isdigit IA__g_unichar_isdigit
+
+extern __typeof (g_unichar_isgraph) IA__g_unichar_isgraph __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isgraph IA__g_unichar_isgraph
+
+extern __typeof (g_unichar_islower) IA__g_unichar_islower __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_islower IA__g_unichar_islower
+
+extern __typeof (g_unichar_isprint) IA__g_unichar_isprint __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isprint IA__g_unichar_isprint
+
+extern __typeof (g_unichar_ispunct) IA__g_unichar_ispunct __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_ispunct IA__g_unichar_ispunct
+
+extern __typeof (g_unichar_isspace) IA__g_unichar_isspace __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isspace IA__g_unichar_isspace
+
+extern __typeof (g_unichar_istitle) IA__g_unichar_istitle __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_istitle IA__g_unichar_istitle
+
+extern __typeof (g_unichar_isupper) IA__g_unichar_isupper __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isupper IA__g_unichar_isupper
+
+extern __typeof (g_unichar_iswide) IA__g_unichar_iswide __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_iswide IA__g_unichar_iswide
+
+extern __typeof (g_unichar_iswide_cjk) IA__g_unichar_iswide_cjk __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_iswide_cjk IA__g_unichar_iswide_cjk
+
+extern __typeof (g_unichar_isxdigit) IA__g_unichar_isxdigit __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_isxdigit IA__g_unichar_isxdigit
+
+extern __typeof (g_unichar_iszerowidth) IA__g_unichar_iszerowidth __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_iszerowidth IA__g_unichar_iszerowidth
+
+extern __typeof (g_unichar_tolower) IA__g_unichar_tolower __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_tolower IA__g_unichar_tolower
+
+extern __typeof (g_unichar_totitle) IA__g_unichar_totitle __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_totitle IA__g_unichar_totitle
+
+extern __typeof (g_unichar_toupper) IA__g_unichar_toupper __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_toupper IA__g_unichar_toupper
+
+extern __typeof (g_unichar_ismark) IA__g_unichar_ismark __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_ismark IA__g_unichar_ismark
+
+extern __typeof (g_unichar_get_mirror_char) IA__g_unichar_get_mirror_char __attribute((visibility("hidden")));
+#define g_unichar_get_mirror_char IA__g_unichar_get_mirror_char
+
+extern __typeof (g_unichar_get_script) IA__g_unichar_get_script __attribute((visibility("hidden")));
+#define g_unichar_get_script IA__g_unichar_get_script
+
+extern __typeof (g_unichar_digit_value) IA__g_unichar_digit_value __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_digit_value IA__g_unichar_digit_value
+
+extern __typeof (g_unichar_xdigit_value) IA__g_unichar_xdigit_value __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_xdigit_value IA__g_unichar_xdigit_value
+
+extern __typeof (g_unichar_type) IA__g_unichar_type __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_unichar_type IA__g_unichar_type
+
+extern __typeof (g_utf8_casefold) IA__g_utf8_casefold __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_casefold IA__g_utf8_casefold
+
+extern __typeof (g_utf8_strup) IA__g_utf8_strup __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_strup IA__g_utf8_strup
+
+extern __typeof (g_utf8_strdown) IA__g_utf8_strdown __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_strdown IA__g_utf8_strdown
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UTF8_C__)
+extern __typeof (g_get_charset) IA__g_get_charset __attribute((visibility("hidden")));
+#define g_get_charset IA__g_get_charset
+
+extern __typeof (g_ucs4_to_utf16) IA__g_ucs4_to_utf16 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_ucs4_to_utf16 IA__g_ucs4_to_utf16
+
+extern __typeof (g_ucs4_to_utf8) IA__g_ucs4_to_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_ucs4_to_utf8 IA__g_ucs4_to_utf8
+
+extern __typeof (g_utf16_to_ucs4) IA__g_utf16_to_ucs4 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf16_to_ucs4 IA__g_utf16_to_ucs4
+
+extern __typeof (g_utf16_to_utf8) IA__g_utf16_to_utf8 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf16_to_utf8 IA__g_utf16_to_utf8
+
+extern __typeof (g_utf8_find_next_char) IA__g_utf8_find_next_char __attribute((visibility("hidden")));
+#define g_utf8_find_next_char IA__g_utf8_find_next_char
+
+extern __typeof (g_utf8_find_prev_char) IA__g_utf8_find_prev_char __attribute((visibility("hidden")));
+#define g_utf8_find_prev_char IA__g_utf8_find_prev_char
+
+extern __typeof (g_utf8_get_char) IA__g_utf8_get_char __attribute((visibility("hidden")));
+#define g_utf8_get_char IA__g_utf8_get_char
+
+extern __typeof (g_utf8_get_char_validated) IA__g_utf8_get_char_validated __attribute((visibility("hidden")));
+#define g_utf8_get_char_validated IA__g_utf8_get_char_validated
+
+extern __typeof (g_utf8_offset_to_pointer) IA__g_utf8_offset_to_pointer __attribute((visibility("hidden")));
+#define g_utf8_offset_to_pointer IA__g_utf8_offset_to_pointer
+
+extern __typeof (g_utf8_pointer_to_offset) IA__g_utf8_pointer_to_offset __attribute((visibility("hidden")));
+#define g_utf8_pointer_to_offset IA__g_utf8_pointer_to_offset
+
+extern __typeof (g_utf8_prev_char) IA__g_utf8_prev_char __attribute((visibility("hidden")));
+#define g_utf8_prev_char IA__g_utf8_prev_char
+
+extern __typeof (g_utf8_strchr) IA__g_utf8_strchr __attribute((visibility("hidden")));
+#define g_utf8_strchr IA__g_utf8_strchr
+
+extern __typeof (g_utf8_strlen) IA__g_utf8_strlen __attribute((visibility("hidden")));
+#define g_utf8_strlen IA__g_utf8_strlen
+
+extern __typeof (g_utf8_strncpy) IA__g_utf8_strncpy __attribute((visibility("hidden")));
+#define g_utf8_strncpy IA__g_utf8_strncpy
+
+extern __typeof (g_utf8_strrchr) IA__g_utf8_strrchr __attribute((visibility("hidden")));
+#define g_utf8_strrchr IA__g_utf8_strrchr
+
+extern __typeof (g_utf8_strreverse) IA__g_utf8_strreverse __attribute((visibility("hidden")));
+#define g_utf8_strreverse IA__g_utf8_strreverse
+
+extern __typeof (g_utf8_to_ucs4) IA__g_utf8_to_ucs4 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_to_ucs4 IA__g_utf8_to_ucs4
+
+extern __typeof (g_utf8_to_ucs4_fast) IA__g_utf8_to_ucs4_fast __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_to_ucs4_fast IA__g_utf8_to_ucs4_fast
+
+extern __typeof (g_utf8_to_utf16) IA__g_utf8_to_utf16 __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_utf8_to_utf16 IA__g_utf8_to_utf16
+
+extern __typeof (g_utf8_validate) IA__g_utf8_validate __attribute((visibility("hidden")));
+#define g_utf8_validate IA__g_utf8_validate
+
+extern __typeof (g_unichar_to_utf8) IA__g_unichar_to_utf8 __attribute((visibility("hidden")));
+#define g_unichar_to_utf8 IA__g_unichar_to_utf8
+
+extern __typeof (g_unichar_validate) IA__g_unichar_validate __attribute((visibility("hidden")));
+#define g_unichar_validate IA__g_unichar_validate
+
+#endif
+#endif
+#if IN_HEADER(__GLIBINTL_H__)
+#if IN_FILE(__G_UTILS_C__)
+extern __typeof (glib_gettext) IA__glib_gettext __attribute((visibility("hidden"))) G_GNUC_FORMAT(1);
+#define glib_gettext IA__glib_gettext
+
+#endif
+#endif
+#if IN_HEADER(__G_HASH_H__)
+#if IN_FILE(__G_UTILS_C__)
+extern __typeof (g_int_equal) IA__g_int_equal __attribute((visibility("hidden")));
+#define g_int_equal IA__g_int_equal
+
+extern __typeof (g_int_hash) IA__g_int_hash __attribute((visibility("hidden")));
+#define g_int_hash IA__g_int_hash
+
+extern __typeof (g_direct_equal) IA__g_direct_equal __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_direct_equal IA__g_direct_equal
+
+extern __typeof (g_direct_hash) IA__g_direct_hash __attribute((visibility("hidden"))) G_GNUC_CONST;
+#define g_direct_hash IA__g_direct_hash
+
+#endif
+#endif
+#if IN_HEADER(__G_UTILS_H__)
+#if IN_FILE(__G_UTILS_C__)
+extern __typeof (g_atexit) IA__g_atexit __attribute((visibility("hidden")));
+#define g_atexit IA__g_atexit
+
+#ifndef G_DISABLE_DEPRECATED
+extern __typeof (g_basename) IA__g_basename __attribute((visibility("hidden")));
+#define g_basename IA__g_basename
+
+#endif
+extern __typeof (g_get_application_name) IA__g_get_application_name __attribute((visibility("hidden")));
+#define g_get_application_name IA__g_get_application_name
+
+#ifndef _WIN64
+extern __typeof (g_find_program_in_path) IA__g_find_program_in_path __attribute((visibility("hidden")));
+#define g_find_program_in_path IA__g_find_program_in_path
+
+extern __typeof (g_get_current_dir) IA__g_get_current_dir __attribute((visibility("hidden")));
+#define g_get_current_dir IA__g_get_current_dir
+
+extern __typeof (g_getenv) IA__g_getenv __attribute((visibility("hidden")));
+#define g_getenv IA__g_getenv
+
+extern __typeof (g_unsetenv) IA__g_unsetenv __attribute((visibility("hidden")));
+#define g_unsetenv IA__g_unsetenv
+
+extern __typeof (g_get_home_dir) IA__g_get_home_dir __attribute((visibility("hidden")));
+#define g_get_home_dir IA__g_get_home_dir
+
+#endif
+extern __typeof (g_get_host_name) IA__g_get_host_name __attribute((visibility("hidden")));
+#define g_get_host_name IA__g_get_host_name
+
+#ifndef _WIN64
+extern __typeof (g_setenv) IA__g_setenv __attribute((visibility("hidden")));
+#define g_setenv IA__g_setenv
+
+#endif
+extern __typeof (g_listenv) IA__g_listenv __attribute((visibility("hidden")));
+#define g_listenv IA__g_listenv
+
+#ifdef G_OS_WIN32
+extern __typeof (g_find_program_in_path_utf8) IA__g_find_program_in_path_utf8 __attribute((visibility("hidden")));
+#define g_find_program_in_path_utf8 IA__g_find_program_in_path_utf8
+
+extern __typeof (g_get_current_dir_utf8) IA__g_get_current_dir_utf8 __attribute((visibility("hidden")));
+#define g_get_current_dir_utf8 IA__g_get_current_dir_utf8
+
+extern __typeof (g_getenv_utf8) IA__g_getenv_utf8 __attribute((visibility("hidden")));
+#define g_getenv_utf8 IA__g_getenv_utf8
+
+extern __typeof (g_unsetenv_utf8) IA__g_unsetenv_utf8 __attribute((visibility("hidden")));
+#define g_unsetenv_utf8 IA__g_unsetenv_utf8
+
+extern __typeof (g_setenv_utf8) IA__g_setenv_utf8 __attribute((visibility("hidden")));
+#define g_setenv_utf8 IA__g_setenv_utf8
+
+extern __typeof (g_get_home_dir_utf8) IA__g_get_home_dir_utf8 __attribute((visibility("hidden")));
+#define g_get_home_dir_utf8 IA__g_get_home_dir_utf8
+
+#endif
+extern __typeof (g_get_language_names) IA__g_get_language_names __attribute((visibility("hidden")));
+#define g_get_language_names IA__g_get_language_names
+
+extern __typeof (g_get_prgname) IA__g_get_prgname __attribute((visibility("hidden")));
+#define g_get_prgname IA__g_get_prgname
+
+#ifndef _WIN64
+extern __typeof (g_get_real_name) IA__g_get_real_name __attribute((visibility("hidden")));
+#define g_get_real_name IA__g_get_real_name
+
+#endif
+#ifdef G_OS_WIN32
+extern __typeof (g_get_real_name_utf8) IA__g_get_real_name_utf8 __attribute((visibility("hidden")));
+#define g_get_real_name_utf8 IA__g_get_real_name_utf8
+
+#endif
+extern __typeof (g_get_system_config_dirs) IA__g_get_system_config_dirs __attribute((visibility("hidden")));
+#define g_get_system_config_dirs IA__g_get_system_config_dirs
+
+extern __typeof (g_get_system_data_dirs) IA__g_get_system_data_dirs __attribute((visibility("hidden")));
+#define g_get_system_data_dirs IA__g_get_system_data_dirs
+
+#ifdef G_OS_WIN32
+extern __typeof (g_win32_get_system_data_dirs_for_module) IA__g_win32_get_system_data_dirs_for_module __attribute((visibility("hidden")));
+#define g_win32_get_system_data_dirs_for_module IA__g_win32_get_system_data_dirs_for_module
+
+#endif
+#ifndef _WIN64
+extern __typeof (g_get_tmp_dir) IA__g_get_tmp_dir __attribute((visibility("hidden")));
+#define g_get_tmp_dir IA__g_get_tmp_dir
+
+#endif
+#ifdef G_OS_WIN32
+extern __typeof (g_get_tmp_dir_utf8) IA__g_get_tmp_dir_utf8 __attribute((visibility("hidden")));
+#define g_get_tmp_dir_utf8 IA__g_get_tmp_dir_utf8
+
+#endif
+extern __typeof (g_get_user_cache_dir) IA__g_get_user_cache_dir __attribute((visibility("hidden")));
+#define g_get_user_cache_dir IA__g_get_user_cache_dir
+
+extern __typeof (g_get_user_config_dir) IA__g_get_user_config_dir __attribute((visibility("hidden")));
+#define g_get_user_config_dir IA__g_get_user_config_dir
+
+extern __typeof (g_get_user_data_dir) IA__g_get_user_data_dir __attribute((visibility("hidden")));
+#define g_get_user_data_dir IA__g_get_user_data_dir
+
+extern __typeof (g_get_user_special_dir) IA__g_get_user_special_dir __attribute((visibility("hidden")));
+#define g_get_user_special_dir IA__g_get_user_special_dir
+
+#ifndef _WIN64
+extern __typeof (g_get_user_name) IA__g_get_user_name __attribute((visibility("hidden")));
+#define g_get_user_name IA__g_get_user_name
+
+#endif
+#ifdef G_OS_WIN32
+extern __typeof (g_get_user_name_utf8) IA__g_get_user_name_utf8 __attribute((visibility("hidden")));
+#define g_get_user_name_utf8 IA__g_get_user_name_utf8
+
+#endif
+extern __typeof (glib_check_version) IA__glib_check_version __attribute((visibility("hidden")));
+#define glib_check_version IA__glib_check_version
+
+extern __typeof (g_nullify_pointer) IA__g_nullify_pointer __attribute((visibility("hidden")));
+#define g_nullify_pointer IA__g_nullify_pointer
+
+extern __typeof (g_parse_debug_string) IA__g_parse_debug_string __attribute((visibility("hidden")));
+#define g_parse_debug_string IA__g_parse_debug_string
+
+extern __typeof (g_path_get_basename) IA__g_path_get_basename __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_path_get_basename IA__g_path_get_basename
+
+extern __typeof (g_path_get_dirname) IA__g_path_get_dirname __attribute((visibility("hidden"))) G_GNUC_MALLOC;
+#define g_path_get_dirname IA__g_path_get_dirname
+
+extern __typeof (g_path_is_absolute) IA__g_path_is_absolute __attribute((visibility("hidden")));
+#define g_path_is_absolute IA__g_path_is_absolute
+
+extern __typeof (g_path_skip_root) IA__g_path_skip_root __attribute((visibility("hidden")));
+#define g_path_skip_root IA__g_path_skip_root
+
+extern __typeof (g_set_application_name) IA__g_set_application_name __attribute((visibility("hidden")));
+#define g_set_application_name IA__g_set_application_name
+
+extern __typeof (g_set_prgname) IA__g_set_prgname __attribute((visibility("hidden")));
+#define g_set_prgname IA__g_set_prgname
+
+#endif
+#endif
+#if IN_HEADER(__G_REGEX_H__)
+#if IN_FILE(__G_REGEX_C__)
+extern __typeof (g_regex_error_quark) IA__g_regex_error_quark __attribute((visibility("hidden")));
+#define g_regex_error_quark IA__g_regex_error_quark
+
+extern __typeof (g_regex_new) IA__g_regex_new __attribute((visibility("hidden")));
+#define g_regex_new IA__g_regex_new
+
+extern __typeof (g_regex_ref) IA__g_regex_ref __attribute((visibility("hidden")));
+#define g_regex_ref IA__g_regex_ref
+
+extern __typeof (g_regex_unref) IA__g_regex_unref __attribute((visibility("hidden")));
+#define g_regex_unref IA__g_regex_unref
+
+extern __typeof (g_regex_get_pattern) IA__g_regex_get_pattern __attribute((visibility("hidden")));
+#define g_regex_get_pattern IA__g_regex_get_pattern
+
+extern __typeof (g_regex_get_max_backref) IA__g_regex_get_max_backref __attribute((visibility("hidden")));
+#define g_regex_get_max_backref IA__g_regex_get_max_backref
+
+extern __typeof (g_regex_get_capture_count) IA__g_regex_get_capture_count __attribute((visibility("hidden")));
+#define g_regex_get_capture_count IA__g_regex_get_capture_count
+
+extern __typeof (g_regex_get_string_number) IA__g_regex_get_string_number __attribute((visibility("hidden")));
+#define g_regex_get_string_number IA__g_regex_get_string_number
+
+extern __typeof (g_regex_escape_string) IA__g_regex_escape_string __attribute((visibility("hidden")));
+#define g_regex_escape_string IA__g_regex_escape_string
+
+extern __typeof (g_regex_match_simple) IA__g_regex_match_simple __attribute((visibility("hidden")));
+#define g_regex_match_simple IA__g_regex_match_simple
+
+extern __typeof (g_regex_match) IA__g_regex_match __attribute((visibility("hidden")));
+#define g_regex_match IA__g_regex_match
+
+extern __typeof (g_regex_match_full) IA__g_regex_match_full __attribute((visibility("hidden")));
+#define g_regex_match_full IA__g_regex_match_full
+
+extern __typeof (g_regex_match_all) IA__g_regex_match_all __attribute((visibility("hidden")));
+#define g_regex_match_all IA__g_regex_match_all
+
+extern __typeof (g_regex_match_all_full) IA__g_regex_match_all_full __attribute((visibility("hidden")));
+#define g_regex_match_all_full IA__g_regex_match_all_full
+
+extern __typeof (g_regex_split_simple) IA__g_regex_split_simple __attribute((visibility("hidden")));
+#define g_regex_split_simple IA__g_regex_split_simple
+
+extern __typeof (g_regex_split) IA__g_regex_split __attribute((visibility("hidden")));
+#define g_regex_split IA__g_regex_split
+
+extern __typeof (g_regex_split_full) IA__g_regex_split_full __attribute((visibility("hidden")));
+#define g_regex_split_full IA__g_regex_split_full
+
+extern __typeof (g_regex_replace) IA__g_regex_replace __attribute((visibility("hidden")));
+#define g_regex_replace IA__g_regex_replace
+
+extern __typeof (g_regex_replace_literal) IA__g_regex_replace_literal __attribute((visibility("hidden")));
+#define g_regex_replace_literal IA__g_regex_replace_literal
+
+extern __typeof (g_regex_replace_eval) IA__g_regex_replace_eval __attribute((visibility("hidden")));
+#define g_regex_replace_eval IA__g_regex_replace_eval
+
+extern __typeof (g_regex_check_replacement) IA__g_regex_check_replacement __attribute((visibility("hidden")));
+#define g_regex_check_replacement IA__g_regex_check_replacement
+
+extern __typeof (g_match_info_get_regex) IA__g_match_info_get_regex __attribute((visibility("hidden")));
+#define g_match_info_get_regex IA__g_match_info_get_regex
+
+extern __typeof (g_match_info_get_string) IA__g_match_info_get_string __attribute((visibility("hidden")));
+#define g_match_info_get_string IA__g_match_info_get_string
+
+extern __typeof (g_match_info_free) IA__g_match_info_free __attribute((visibility("hidden")));
+#define g_match_info_free IA__g_match_info_free
+
+extern __typeof (g_match_info_next) IA__g_match_info_next __attribute((visibility("hidden")));
+#define g_match_info_next IA__g_match_info_next
+
+extern __typeof (g_match_info_matches) IA__g_match_info_matches __attribute((visibility("hidden")));
+#define g_match_info_matches IA__g_match_info_matches
+
+extern __typeof (g_match_info_get_match_count) IA__g_match_info_get_match_count __attribute((visibility("hidden")));
+#define g_match_info_get_match_count IA__g_match_info_get_match_count
+
+extern __typeof (g_match_info_is_partial_match) IA__g_match_info_is_partial_match __attribute((visibility("hidden")));
+#define g_match_info_is_partial_match IA__g_match_info_is_partial_match
+
+extern __typeof (g_match_info_expand_references) IA__g_match_info_expand_references __attribute((visibility("hidden")));
+#define g_match_info_expand_references IA__g_match_info_expand_references
+
+extern __typeof (g_match_info_fetch) IA__g_match_info_fetch __attribute((visibility("hidden")));
+#define g_match_info_fetch IA__g_match_info_fetch
+
+extern __typeof (g_match_info_fetch_pos) IA__g_match_info_fetch_pos __attribute((visibility("hidden")));
+#define g_match_info_fetch_pos IA__g_match_info_fetch_pos
+
+extern __typeof (g_match_info_fetch_named) IA__g_match_info_fetch_named __attribute((visibility("hidden")));
+#define g_match_info_fetch_named IA__g_match_info_fetch_named
+
+extern __typeof (g_match_info_fetch_named_pos) IA__g_match_info_fetch_named_pos __attribute((visibility("hidden")));
+#define g_match_info_fetch_named_pos IA__g_match_info_fetch_named_pos
+
+extern __typeof (g_match_info_fetch_all) IA__g_match_info_fetch_all __attribute((visibility("hidden")));
+#define g_match_info_fetch_all IA__g_match_info_fetch_all
+
+#endif
+#endif
+#if IN_HEADER(__G_WIN32_H__)
+#if IN_FILE(__G_WIN32_H__)
+#ifdef G_OS_WIN32
+extern __typeof (g_win32_error_message) IA__g_win32_error_message __attribute((visibility("hidden")));
+#define g_win32_error_message IA__g_win32_error_message
+
+extern __typeof (g_win32_ftruncate) IA__g_win32_ftruncate __attribute((visibility("hidden")));
+#define g_win32_ftruncate IA__g_win32_ftruncate
+
+extern __typeof (g_win32_get_package_installation_directory_of_module) IA__g_win32_get_package_installation_directory_of_module __attribute((visibility("hidden")));
+#define g_win32_get_package_installation_directory_of_module IA__g_win32_get_package_installation_directory_of_module
+
+#ifndef _WIN64
+extern __typeof (g_win32_get_package_installation_directory) IA__g_win32_get_package_installation_directory __attribute((visibility("hidden")));
+#define g_win32_get_package_installation_directory IA__g_win32_get_package_installation_directory
+
+#endif
+extern __typeof (g_win32_get_package_installation_directory_utf8) IA__g_win32_get_package_installation_directory_utf8 __attribute((visibility("hidden")));
+#define g_win32_get_package_installation_directory_utf8 IA__g_win32_get_package_installation_directory_utf8
+
+#ifndef _WIN64
+extern __typeof (g_win32_get_package_installation_subdirectory) IA__g_win32_get_package_installation_subdirectory __attribute((visibility("hidden")));
+#define g_win32_get_package_installation_subdirectory IA__g_win32_get_package_installation_subdirectory
+
+#endif
+extern __typeof (g_win32_get_package_installation_subdirectory_utf8) IA__g_win32_get_package_installation_subdirectory_utf8 __attribute((visibility("hidden")));
+#define g_win32_get_package_installation_subdirectory_utf8 IA__g_win32_get_package_installation_subdirectory_utf8
+
+extern __typeof (g_win32_get_windows_version) IA__g_win32_get_windows_version __attribute((visibility("hidden")));
+#define g_win32_get_windows_version IA__g_win32_get_windows_version
+
+extern __typeof (g_win32_getlocale) IA__g_win32_getlocale __attribute((visibility("hidden")));
+#define g_win32_getlocale IA__g_win32_getlocale
+
+extern __typeof (g_win32_locale_filename_from_utf8) IA__g_win32_locale_filename_from_utf8 __attribute((visibility("hidden")));
+#define g_win32_locale_filename_from_utf8 IA__g_win32_locale_filename_from_utf8
+
+#endif
+#endif
+#endif
+
+#endif /* G_HAVE_GNUC_VISIBILITY */
+#endif /* DISABLE_VISIBILITY */
diff --git a/glib/galiasdef.c b/glib/galiasdef.c
new file mode 100644
index 0000000..c8ba51c
--- /dev/null
+++ b/glib/galiasdef.c
@@ -0,0 +1,3897 @@
+/* Generated by makegalias.pl */
+
+#ifndef DISABLE_VISIBILITY
+
+#include "glibconfig.h"
+
+#ifdef G_HAVE_GNUC_VISIBILITY
+
+#undef IN_FILE
+#define IN_FILE defined
+
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+#if IN_HEADER(__G_ARRAY_H__)
+#if IN_FILE(__G_ARRAY_C__)
+#undef g_array_append_vals 
+extern __typeof (g_array_append_vals) g_array_append_vals __attribute((alias("IA__g_array_append_vals"), visibility("default")));
+
+#undef g_array_free 
+extern __typeof (g_array_free) g_array_free __attribute((alias("IA__g_array_free"), visibility("default")));
+
+#undef g_array_insert_vals 
+extern __typeof (g_array_insert_vals) g_array_insert_vals __attribute((alias("IA__g_array_insert_vals"), visibility("default")));
+
+#undef g_array_new 
+extern __typeof (g_array_new) g_array_new __attribute((alias("IA__g_array_new"), visibility("default")));
+
+#undef g_array_prepend_vals 
+extern __typeof (g_array_prepend_vals) g_array_prepend_vals __attribute((alias("IA__g_array_prepend_vals"), visibility("default")));
+
+#undef g_array_remove_index 
+extern __typeof (g_array_remove_index) g_array_remove_index __attribute((alias("IA__g_array_remove_index"), visibility("default")));
+
+#undef g_array_remove_index_fast 
+extern __typeof (g_array_remove_index_fast) g_array_remove_index_fast __attribute((alias("IA__g_array_remove_index_fast"), visibility("default")));
+
+#undef g_array_remove_range 
+extern __typeof (g_array_remove_range) g_array_remove_range __attribute((alias("IA__g_array_remove_range"), visibility("default")));
+
+#undef g_array_set_size 
+extern __typeof (g_array_set_size) g_array_set_size __attribute((alias("IA__g_array_set_size"), visibility("default")));
+
+#undef g_array_sized_new 
+extern __typeof (g_array_sized_new) g_array_sized_new __attribute((alias("IA__g_array_sized_new"), visibility("default")));
+
+#undef g_array_sort 
+extern __typeof (g_array_sort) g_array_sort __attribute((alias("IA__g_array_sort"), visibility("default")));
+
+#undef g_array_sort_with_data 
+extern __typeof (g_array_sort_with_data) g_array_sort_with_data __attribute((alias("IA__g_array_sort_with_data"), visibility("default")));
+
+#undef g_byte_array_append 
+extern __typeof (g_byte_array_append) g_byte_array_append __attribute((alias("IA__g_byte_array_append"), visibility("default")));
+
+#undef g_byte_array_free 
+extern __typeof (g_byte_array_free) g_byte_array_free __attribute((alias("IA__g_byte_array_free"), visibility("default")));
+
+#undef g_byte_array_new 
+extern __typeof (g_byte_array_new) g_byte_array_new __attribute((alias("IA__g_byte_array_new"), visibility("default")));
+
+#undef g_byte_array_prepend 
+extern __typeof (g_byte_array_prepend) g_byte_array_prepend __attribute((alias("IA__g_byte_array_prepend"), visibility("default")));
+
+#undef g_byte_array_remove_index 
+extern __typeof (g_byte_array_remove_index) g_byte_array_remove_index __attribute((alias("IA__g_byte_array_remove_index"), visibility("default")));
+
+#undef g_byte_array_remove_index_fast 
+extern __typeof (g_byte_array_remove_index_fast) g_byte_array_remove_index_fast __attribute((alias("IA__g_byte_array_remove_index_fast"), visibility("default")));
+
+#undef g_byte_array_remove_range 
+extern __typeof (g_byte_array_remove_range) g_byte_array_remove_range __attribute((alias("IA__g_byte_array_remove_range"), visibility("default")));
+
+#undef g_byte_array_set_size 
+extern __typeof (g_byte_array_set_size) g_byte_array_set_size __attribute((alias("IA__g_byte_array_set_size"), visibility("default")));
+
+#undef g_byte_array_sized_new 
+extern __typeof (g_byte_array_sized_new) g_byte_array_sized_new __attribute((alias("IA__g_byte_array_sized_new"), visibility("default")));
+
+#undef g_byte_array_sort 
+extern __typeof (g_byte_array_sort) g_byte_array_sort __attribute((alias("IA__g_byte_array_sort"), visibility("default")));
+
+#undef g_byte_array_sort_with_data 
+extern __typeof (g_byte_array_sort_with_data) g_byte_array_sort_with_data __attribute((alias("IA__g_byte_array_sort_with_data"), visibility("default")));
+
+#undef g_ptr_array_add 
+extern __typeof (g_ptr_array_add) g_ptr_array_add __attribute((alias("IA__g_ptr_array_add"), visibility("default")));
+
+#undef g_ptr_array_foreach 
+extern __typeof (g_ptr_array_foreach) g_ptr_array_foreach __attribute((alias("IA__g_ptr_array_foreach"), visibility("default")));
+
+#undef g_ptr_array_free 
+extern __typeof (g_ptr_array_free) g_ptr_array_free __attribute((alias("IA__g_ptr_array_free"), visibility("default")));
+
+#undef g_ptr_array_new 
+extern __typeof (g_ptr_array_new) g_ptr_array_new __attribute((alias("IA__g_ptr_array_new"), visibility("default")));
+
+#undef g_ptr_array_remove 
+extern __typeof (g_ptr_array_remove) g_ptr_array_remove __attribute((alias("IA__g_ptr_array_remove"), visibility("default")));
+
+#undef g_ptr_array_remove_fast 
+extern __typeof (g_ptr_array_remove_fast) g_ptr_array_remove_fast __attribute((alias("IA__g_ptr_array_remove_fast"), visibility("default")));
+
+#undef g_ptr_array_remove_index 
+extern __typeof (g_ptr_array_remove_index) g_ptr_array_remove_index __attribute((alias("IA__g_ptr_array_remove_index"), visibility("default")));
+
+#undef g_ptr_array_remove_index_fast 
+extern __typeof (g_ptr_array_remove_index_fast) g_ptr_array_remove_index_fast __attribute((alias("IA__g_ptr_array_remove_index_fast"), visibility("default")));
+
+#undef g_ptr_array_remove_range 
+extern __typeof (g_ptr_array_remove_range) g_ptr_array_remove_range __attribute((alias("IA__g_ptr_array_remove_range"), visibility("default")));
+
+#undef g_ptr_array_set_size 
+extern __typeof (g_ptr_array_set_size) g_ptr_array_set_size __attribute((alias("IA__g_ptr_array_set_size"), visibility("default")));
+
+#undef g_ptr_array_sized_new 
+extern __typeof (g_ptr_array_sized_new) g_ptr_array_sized_new __attribute((alias("IA__g_ptr_array_sized_new"), visibility("default")));
+
+#undef g_ptr_array_sort 
+extern __typeof (g_ptr_array_sort) g_ptr_array_sort __attribute((alias("IA__g_ptr_array_sort"), visibility("default")));
+
+#undef g_ptr_array_sort_with_data 
+extern __typeof (g_ptr_array_sort_with_data) g_ptr_array_sort_with_data __attribute((alias("IA__g_ptr_array_sort_with_data"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_ASYNCQUEUE_H__)
+#if IN_FILE(__G_ASYNCQUEUE_C__)
+#undef g_async_queue_length 
+extern __typeof (g_async_queue_length) g_async_queue_length __attribute((alias("IA__g_async_queue_length"), visibility("default")));
+
+#undef g_async_queue_length_unlocked 
+extern __typeof (g_async_queue_length_unlocked) g_async_queue_length_unlocked __attribute((alias("IA__g_async_queue_length_unlocked"), visibility("default")));
+
+#undef g_async_queue_lock 
+extern __typeof (g_async_queue_lock) g_async_queue_lock __attribute((alias("IA__g_async_queue_lock"), visibility("default")));
+
+#undef g_async_queue_new 
+extern __typeof (g_async_queue_new) g_async_queue_new __attribute((alias("IA__g_async_queue_new"), visibility("default")));
+
+#undef g_async_queue_new_full 
+extern __typeof (g_async_queue_new_full) g_async_queue_new_full __attribute((alias("IA__g_async_queue_new_full"), visibility("default")));
+
+#undef g_async_queue_pop 
+extern __typeof (g_async_queue_pop) g_async_queue_pop __attribute((alias("IA__g_async_queue_pop"), visibility("default")));
+
+#undef g_async_queue_pop_unlocked 
+extern __typeof (g_async_queue_pop_unlocked) g_async_queue_pop_unlocked __attribute((alias("IA__g_async_queue_pop_unlocked"), visibility("default")));
+
+#undef g_async_queue_push 
+extern __typeof (g_async_queue_push) g_async_queue_push __attribute((alias("IA__g_async_queue_push"), visibility("default")));
+
+#undef g_async_queue_push_unlocked 
+extern __typeof (g_async_queue_push_unlocked) g_async_queue_push_unlocked __attribute((alias("IA__g_async_queue_push_unlocked"), visibility("default")));
+
+#undef g_async_queue_push_sorted 
+extern __typeof (g_async_queue_push_sorted) g_async_queue_push_sorted __attribute((alias("IA__g_async_queue_push_sorted"), visibility("default")));
+
+#undef g_async_queue_push_sorted_unlocked 
+extern __typeof (g_async_queue_push_sorted_unlocked) g_async_queue_push_sorted_unlocked __attribute((alias("IA__g_async_queue_push_sorted_unlocked"), visibility("default")));
+
+#undef g_async_queue_ref 
+extern __typeof (g_async_queue_ref) g_async_queue_ref __attribute((alias("IA__g_async_queue_ref"), visibility("default")));
+
+#undef g_async_queue_sort 
+extern __typeof (g_async_queue_sort) g_async_queue_sort __attribute((alias("IA__g_async_queue_sort"), visibility("default")));
+
+#undef g_async_queue_sort_unlocked 
+extern __typeof (g_async_queue_sort_unlocked) g_async_queue_sort_unlocked __attribute((alias("IA__g_async_queue_sort_unlocked"), visibility("default")));
+
+#undef g_async_queue_timed_pop 
+extern __typeof (g_async_queue_timed_pop) g_async_queue_timed_pop __attribute((alias("IA__g_async_queue_timed_pop"), visibility("default")));
+
+#undef g_async_queue_timed_pop_unlocked 
+extern __typeof (g_async_queue_timed_pop_unlocked) g_async_queue_timed_pop_unlocked __attribute((alias("IA__g_async_queue_timed_pop_unlocked"), visibility("default")));
+
+#undef g_async_queue_try_pop 
+extern __typeof (g_async_queue_try_pop) g_async_queue_try_pop __attribute((alias("IA__g_async_queue_try_pop"), visibility("default")));
+
+#undef g_async_queue_try_pop_unlocked 
+extern __typeof (g_async_queue_try_pop_unlocked) g_async_queue_try_pop_unlocked __attribute((alias("IA__g_async_queue_try_pop_unlocked"), visibility("default")));
+
+#undef g_async_queue_unlock 
+extern __typeof (g_async_queue_unlock) g_async_queue_unlock __attribute((alias("IA__g_async_queue_unlock"), visibility("default")));
+
+#undef g_async_queue_unref 
+extern __typeof (g_async_queue_unref) g_async_queue_unref __attribute((alias("IA__g_async_queue_unref"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_async_queue_ref_unlocked 
+extern __typeof (g_async_queue_ref_unlocked) g_async_queue_ref_unlocked __attribute((alias("IA__g_async_queue_ref_unlocked"), visibility("default")));
+
+#undef g_async_queue_unref_and_unlock 
+extern __typeof (g_async_queue_unref_and_unlock) g_async_queue_unref_and_unlock __attribute((alias("IA__g_async_queue_unref_and_unlock"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_ATOMIC_H__)
+#if IN_FILE(__G_ATOMIC_C__)
+#undef g_atomic_int_add 
+extern __typeof (g_atomic_int_add) g_atomic_int_add __attribute((alias("IA__g_atomic_int_add"), visibility("default")));
+
+#undef g_atomic_int_compare_and_exchange 
+extern __typeof (g_atomic_int_compare_and_exchange) g_atomic_int_compare_and_exchange __attribute((alias("IA__g_atomic_int_compare_and_exchange"), visibility("default")));
+
+#undef g_atomic_int_exchange_and_add 
+extern __typeof (g_atomic_int_exchange_and_add) g_atomic_int_exchange_and_add __attribute((alias("IA__g_atomic_int_exchange_and_add"), visibility("default")));
+
+#undef g_atomic_pointer_compare_and_exchange 
+extern __typeof (g_atomic_pointer_compare_and_exchange) g_atomic_pointer_compare_and_exchange __attribute((alias("IA__g_atomic_pointer_compare_and_exchange"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_BACKTRACE_H__)
+#if IN_FILE(__G_BACKTRACE_C__)
+#undef g_on_error_query 
+extern __typeof (g_on_error_query) g_on_error_query __attribute((alias("IA__g_on_error_query"), visibility("default")));
+
+#undef g_on_error_stack_trace 
+extern __typeof (g_on_error_stack_trace) g_on_error_stack_trace __attribute((alias("IA__g_on_error_stack_trace"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_BASE64_H__)
+#if IN_FILE(__G_BASE64_C__)
+#undef g_base64_encode_step 
+extern __typeof (g_base64_encode_step) g_base64_encode_step __attribute((alias("IA__g_base64_encode_step"), visibility("default")));
+
+#undef g_base64_encode_close 
+extern __typeof (g_base64_encode_close) g_base64_encode_close __attribute((alias("IA__g_base64_encode_close"), visibility("default")));
+
+#undef g_base64_encode 
+extern __typeof (g_base64_encode) g_base64_encode __attribute((alias("IA__g_base64_encode"), visibility("default")));
+
+#undef g_base64_decode_step 
+extern __typeof (g_base64_decode_step) g_base64_decode_step __attribute((alias("IA__g_base64_decode_step"), visibility("default")));
+
+#undef g_base64_decode 
+extern __typeof (g_base64_decode) g_base64_decode __attribute((alias("IA__g_base64_decode"), visibility("default")));
+
+#undef g_base64_decode_inplace 
+extern __typeof (g_base64_decode_inplace) g_base64_decode_inplace __attribute((alias("IA__g_base64_decode_inplace"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_BOOKMARK_FILE_H__)
+#if IN_FILE(__G_BOOKMARK_FILE_C__)
+#undef g_bookmark_file_error_quark 
+extern __typeof (g_bookmark_file_error_quark) g_bookmark_file_error_quark __attribute((alias("IA__g_bookmark_file_error_quark"), visibility("default")));
+
+#undef g_bookmark_file_new 
+extern __typeof (g_bookmark_file_new) g_bookmark_file_new __attribute((alias("IA__g_bookmark_file_new"), visibility("default")));
+
+#undef g_bookmark_file_free 
+extern __typeof (g_bookmark_file_free) g_bookmark_file_free __attribute((alias("IA__g_bookmark_file_free"), visibility("default")));
+
+#undef g_bookmark_file_load_from_file 
+extern __typeof (g_bookmark_file_load_from_file) g_bookmark_file_load_from_file __attribute((alias("IA__g_bookmark_file_load_from_file"), visibility("default")));
+
+#undef g_bookmark_file_load_from_data 
+extern __typeof (g_bookmark_file_load_from_data) g_bookmark_file_load_from_data __attribute((alias("IA__g_bookmark_file_load_from_data"), visibility("default")));
+
+#undef g_bookmark_file_load_from_data_dirs 
+extern __typeof (g_bookmark_file_load_from_data_dirs) g_bookmark_file_load_from_data_dirs __attribute((alias("IA__g_bookmark_file_load_from_data_dirs"), visibility("default")));
+
+#undef g_bookmark_file_to_data 
+extern __typeof (g_bookmark_file_to_data) g_bookmark_file_to_data __attribute((alias("IA__g_bookmark_file_to_data"), visibility("default")));
+
+#undef g_bookmark_file_to_file 
+extern __typeof (g_bookmark_file_to_file) g_bookmark_file_to_file __attribute((alias("IA__g_bookmark_file_to_file"), visibility("default")));
+
+#undef g_bookmark_file_set_title 
+extern __typeof (g_bookmark_file_set_title) g_bookmark_file_set_title __attribute((alias("IA__g_bookmark_file_set_title"), visibility("default")));
+
+#undef g_bookmark_file_get_title 
+extern __typeof (g_bookmark_file_get_title) g_bookmark_file_get_title __attribute((alias("IA__g_bookmark_file_get_title"), visibility("default")));
+
+#undef g_bookmark_file_set_description 
+extern __typeof (g_bookmark_file_set_description) g_bookmark_file_set_description __attribute((alias("IA__g_bookmark_file_set_description"), visibility("default")));
+
+#undef g_bookmark_file_get_description 
+extern __typeof (g_bookmark_file_get_description) g_bookmark_file_get_description __attribute((alias("IA__g_bookmark_file_get_description"), visibility("default")));
+
+#undef g_bookmark_file_set_mime_type 
+extern __typeof (g_bookmark_file_set_mime_type) g_bookmark_file_set_mime_type __attribute((alias("IA__g_bookmark_file_set_mime_type"), visibility("default")));
+
+#undef g_bookmark_file_get_mime_type 
+extern __typeof (g_bookmark_file_get_mime_type) g_bookmark_file_get_mime_type __attribute((alias("IA__g_bookmark_file_get_mime_type"), visibility("default")));
+
+#undef g_bookmark_file_set_groups 
+extern __typeof (g_bookmark_file_set_groups) g_bookmark_file_set_groups __attribute((alias("IA__g_bookmark_file_set_groups"), visibility("default")));
+
+#undef g_bookmark_file_add_group 
+extern __typeof (g_bookmark_file_add_group) g_bookmark_file_add_group __attribute((alias("IA__g_bookmark_file_add_group"), visibility("default")));
+
+#undef g_bookmark_file_has_group 
+extern __typeof (g_bookmark_file_has_group) g_bookmark_file_has_group __attribute((alias("IA__g_bookmark_file_has_group"), visibility("default")));
+
+#undef g_bookmark_file_get_groups 
+extern __typeof (g_bookmark_file_get_groups) g_bookmark_file_get_groups __attribute((alias("IA__g_bookmark_file_get_groups"), visibility("default")));
+
+#undef g_bookmark_file_add_application 
+extern __typeof (g_bookmark_file_add_application) g_bookmark_file_add_application __attribute((alias("IA__g_bookmark_file_add_application"), visibility("default")));
+
+#undef g_bookmark_file_has_application 
+extern __typeof (g_bookmark_file_has_application) g_bookmark_file_has_application __attribute((alias("IA__g_bookmark_file_has_application"), visibility("default")));
+
+#undef g_bookmark_file_get_applications 
+extern __typeof (g_bookmark_file_get_applications) g_bookmark_file_get_applications __attribute((alias("IA__g_bookmark_file_get_applications"), visibility("default")));
+
+#undef g_bookmark_file_set_app_info 
+extern __typeof (g_bookmark_file_set_app_info) g_bookmark_file_set_app_info __attribute((alias("IA__g_bookmark_file_set_app_info"), visibility("default")));
+
+#undef g_bookmark_file_get_app_info 
+extern __typeof (g_bookmark_file_get_app_info) g_bookmark_file_get_app_info __attribute((alias("IA__g_bookmark_file_get_app_info"), visibility("default")));
+
+#undef g_bookmark_file_set_is_private 
+extern __typeof (g_bookmark_file_set_is_private) g_bookmark_file_set_is_private __attribute((alias("IA__g_bookmark_file_set_is_private"), visibility("default")));
+
+#undef g_bookmark_file_get_is_private 
+extern __typeof (g_bookmark_file_get_is_private) g_bookmark_file_get_is_private __attribute((alias("IA__g_bookmark_file_get_is_private"), visibility("default")));
+
+#undef g_bookmark_file_set_icon 
+extern __typeof (g_bookmark_file_set_icon) g_bookmark_file_set_icon __attribute((alias("IA__g_bookmark_file_set_icon"), visibility("default")));
+
+#undef g_bookmark_file_get_icon 
+extern __typeof (g_bookmark_file_get_icon) g_bookmark_file_get_icon __attribute((alias("IA__g_bookmark_file_get_icon"), visibility("default")));
+
+#undef g_bookmark_file_set_added 
+extern __typeof (g_bookmark_file_set_added) g_bookmark_file_set_added __attribute((alias("IA__g_bookmark_file_set_added"), visibility("default")));
+
+#undef g_bookmark_file_get_added 
+extern __typeof (g_bookmark_file_get_added) g_bookmark_file_get_added __attribute((alias("IA__g_bookmark_file_get_added"), visibility("default")));
+
+#undef g_bookmark_file_set_modified 
+extern __typeof (g_bookmark_file_set_modified) g_bookmark_file_set_modified __attribute((alias("IA__g_bookmark_file_set_modified"), visibility("default")));
+
+#undef g_bookmark_file_get_modified 
+extern __typeof (g_bookmark_file_get_modified) g_bookmark_file_get_modified __attribute((alias("IA__g_bookmark_file_get_modified"), visibility("default")));
+
+#undef g_bookmark_file_set_visited 
+extern __typeof (g_bookmark_file_set_visited) g_bookmark_file_set_visited __attribute((alias("IA__g_bookmark_file_set_visited"), visibility("default")));
+
+#undef g_bookmark_file_get_visited 
+extern __typeof (g_bookmark_file_get_visited) g_bookmark_file_get_visited __attribute((alias("IA__g_bookmark_file_get_visited"), visibility("default")));
+
+#undef g_bookmark_file_has_item 
+extern __typeof (g_bookmark_file_has_item) g_bookmark_file_has_item __attribute((alias("IA__g_bookmark_file_has_item"), visibility("default")));
+
+#undef g_bookmark_file_get_size 
+extern __typeof (g_bookmark_file_get_size) g_bookmark_file_get_size __attribute((alias("IA__g_bookmark_file_get_size"), visibility("default")));
+
+#undef g_bookmark_file_get_uris 
+extern __typeof (g_bookmark_file_get_uris) g_bookmark_file_get_uris __attribute((alias("IA__g_bookmark_file_get_uris"), visibility("default")));
+
+#undef g_bookmark_file_remove_group 
+extern __typeof (g_bookmark_file_remove_group) g_bookmark_file_remove_group __attribute((alias("IA__g_bookmark_file_remove_group"), visibility("default")));
+
+#undef g_bookmark_file_remove_application 
+extern __typeof (g_bookmark_file_remove_application) g_bookmark_file_remove_application __attribute((alias("IA__g_bookmark_file_remove_application"), visibility("default")));
+
+#undef g_bookmark_file_remove_item 
+extern __typeof (g_bookmark_file_remove_item) g_bookmark_file_remove_item __attribute((alias("IA__g_bookmark_file_remove_item"), visibility("default")));
+
+#undef g_bookmark_file_move_item 
+extern __typeof (g_bookmark_file_move_item) g_bookmark_file_move_item __attribute((alias("IA__g_bookmark_file_move_item"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_CACHE_H__)
+#if IN_FILE(__G_CACHE_C__)
+#undef g_cache_destroy 
+extern __typeof (g_cache_destroy) g_cache_destroy __attribute((alias("IA__g_cache_destroy"), visibility("default")));
+
+#undef g_cache_insert 
+extern __typeof (g_cache_insert) g_cache_insert __attribute((alias("IA__g_cache_insert"), visibility("default")));
+
+#undef g_cache_key_foreach 
+extern __typeof (g_cache_key_foreach) g_cache_key_foreach __attribute((alias("IA__g_cache_key_foreach"), visibility("default")));
+
+#undef g_cache_new 
+extern __typeof (g_cache_new) g_cache_new __attribute((alias("IA__g_cache_new"), visibility("default")));
+
+#undef g_cache_remove 
+extern __typeof (g_cache_remove) g_cache_remove __attribute((alias("IA__g_cache_remove"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_cache_value_foreach 
+extern __typeof (g_cache_value_foreach) g_cache_value_foreach __attribute((alias("IA__g_cache_value_foreach"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_CHECKSUM_H__)
+#if IN_FILE(__G_CHECKSUM_C__)
+#undef g_checksum_type_get_length 
+extern __typeof (g_checksum_type_get_length) g_checksum_type_get_length __attribute((alias("IA__g_checksum_type_get_length"), visibility("default")));
+
+#undef g_checksum_new 
+extern __typeof (g_checksum_new) g_checksum_new __attribute((alias("IA__g_checksum_new"), visibility("default")));
+
+#undef g_checksum_copy 
+extern __typeof (g_checksum_copy) g_checksum_copy __attribute((alias("IA__g_checksum_copy"), visibility("default")));
+
+#undef g_checksum_free 
+extern __typeof (g_checksum_free) g_checksum_free __attribute((alias("IA__g_checksum_free"), visibility("default")));
+
+#undef g_checksum_update 
+extern __typeof (g_checksum_update) g_checksum_update __attribute((alias("IA__g_checksum_update"), visibility("default")));
+
+#undef g_checksum_reset 
+extern __typeof (g_checksum_reset) g_checksum_reset __attribute((alias("IA__g_checksum_reset"), visibility("default")));
+
+#undef g_checksum_get_string 
+extern __typeof (g_checksum_get_string) g_checksum_get_string __attribute((alias("IA__g_checksum_get_string"), visibility("default")));
+
+#undef g_checksum_get_digest 
+extern __typeof (g_checksum_get_digest) g_checksum_get_digest __attribute((alias("IA__g_checksum_get_digest"), visibility("default")));
+
+#undef g_compute_checksum_for_data 
+extern __typeof (g_compute_checksum_for_data) g_compute_checksum_for_data __attribute((alias("IA__g_compute_checksum_for_data"), visibility("default")));
+
+#undef g_compute_checksum_for_string 
+extern __typeof (g_compute_checksum_for_string) g_compute_checksum_for_string __attribute((alias("IA__g_compute_checksum_for_string"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_COMPLETION_H__)
+#if IN_FILE(__G_COMPLETION_C__)
+#undef g_completion_add_items 
+extern __typeof (g_completion_add_items) g_completion_add_items __attribute((alias("IA__g_completion_add_items"), visibility("default")));
+
+#undef g_completion_clear_items 
+extern __typeof (g_completion_clear_items) g_completion_clear_items __attribute((alias("IA__g_completion_clear_items"), visibility("default")));
+
+#undef g_completion_complete 
+extern __typeof (g_completion_complete) g_completion_complete __attribute((alias("IA__g_completion_complete"), visibility("default")));
+
+#undef g_completion_complete_utf8 
+extern __typeof (g_completion_complete_utf8) g_completion_complete_utf8 __attribute((alias("IA__g_completion_complete_utf8"), visibility("default")));
+
+#undef g_completion_free 
+extern __typeof (g_completion_free) g_completion_free __attribute((alias("IA__g_completion_free"), visibility("default")));
+
+#undef g_completion_new 
+extern __typeof (g_completion_new) g_completion_new __attribute((alias("IA__g_completion_new"), visibility("default")));
+
+#undef g_completion_remove_items 
+extern __typeof (g_completion_remove_items) g_completion_remove_items __attribute((alias("IA__g_completion_remove_items"), visibility("default")));
+
+#undef g_completion_set_compare 
+extern __typeof (g_completion_set_compare) g_completion_set_compare __attribute((alias("IA__g_completion_set_compare"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_CONVERT_H__)
+#if IN_FILE(__G_CONVERT_C__)
+#undef g_get_filename_charsets 
+extern __typeof (g_get_filename_charsets) g_get_filename_charsets __attribute((alias("IA__g_get_filename_charsets"), visibility("default")));
+
+#ifdef ANDROID_STUB
+#undef g_convert 
+extern __typeof (g_convert) g_convert __attribute((alias("IA__g_convert"), visibility("default")));
+#endif
+
+#undef g_convert_error_quark 
+extern __typeof (g_convert_error_quark) g_convert_error_quark __attribute((alias("IA__g_convert_error_quark"), visibility("default")));
+
+#ifdef ANDROID_STUB
+#undef g_convert_with_fallback 
+extern __typeof (g_convert_with_fallback) g_convert_with_fallback __attribute((alias("IA__g_convert_with_fallback"), visibility("default")));
+
+#undef g_convert_with_iconv 
+extern __typeof (g_convert_with_iconv) g_convert_with_iconv __attribute((alias("IA__g_convert_with_iconv"), visibility("default")));
+
+#undef g_iconv 
+extern __typeof (g_iconv) g_iconv __attribute((alias("IA__g_iconv"), visibility("default")));
+
+#undef g_iconv_close 
+extern __typeof (g_iconv_close) g_iconv_close __attribute((alias("IA__g_iconv_close"), visibility("default")));
+
+#undef g_iconv_open 
+extern __typeof (g_iconv_open) g_iconv_open __attribute((alias("IA__g_iconv_open"), visibility("default")));
+#endif
+
+#undef g_locale_from_utf8 
+extern __typeof (g_locale_from_utf8) g_locale_from_utf8 __attribute((alias("IA__g_locale_from_utf8"), visibility("default")));
+
+#undef g_locale_to_utf8 
+extern __typeof (g_locale_to_utf8) g_locale_to_utf8 __attribute((alias("IA__g_locale_to_utf8"), visibility("default")));
+
+#undef g_filename_display_name 
+extern __typeof (g_filename_display_name) g_filename_display_name __attribute((alias("IA__g_filename_display_name"), visibility("default")));
+
+#undef g_filename_display_basename 
+extern __typeof (g_filename_display_basename) g_filename_display_basename __attribute((alias("IA__g_filename_display_basename"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_filename_from_uri 
+extern __typeof (g_filename_from_uri) g_filename_from_uri __attribute((alias("IA__g_filename_from_uri"), visibility("default")));
+
+#undef g_filename_from_utf8 
+extern __typeof (g_filename_from_utf8) g_filename_from_utf8 __attribute((alias("IA__g_filename_from_utf8"), visibility("default")));
+
+#undef g_filename_to_uri 
+extern __typeof (g_filename_to_uri) g_filename_to_uri __attribute((alias("IA__g_filename_to_uri"), visibility("default")));
+
+#undef g_filename_to_utf8 
+extern __typeof (g_filename_to_utf8) g_filename_to_utf8 __attribute((alias("IA__g_filename_to_utf8"), visibility("default")));
+
+#endif
+#ifdef G_OS_WIN32
+#undef g_filename_from_uri_utf8 
+extern __typeof (g_filename_from_uri_utf8) g_filename_from_uri_utf8 __attribute((alias("IA__g_filename_from_uri_utf8"), visibility("default")));
+
+#undef g_filename_from_utf8_utf8 
+extern __typeof (g_filename_from_utf8_utf8) g_filename_from_utf8_utf8 __attribute((alias("IA__g_filename_from_utf8_utf8"), visibility("default")));
+
+#undef g_filename_to_uri_utf8 
+extern __typeof (g_filename_to_uri_utf8) g_filename_to_uri_utf8 __attribute((alias("IA__g_filename_to_uri_utf8"), visibility("default")));
+
+#undef g_filename_to_utf8_utf8 
+extern __typeof (g_filename_to_utf8_utf8) g_filename_to_utf8_utf8 __attribute((alias("IA__g_filename_to_utf8_utf8"), visibility("default")));
+
+#endif
+#undef g_uri_list_extract_uris 
+extern __typeof (g_uri_list_extract_uris) g_uri_list_extract_uris __attribute((alias("IA__g_uri_list_extract_uris"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_DATASET_H__)
+#if IN_FILE(__G_DATASET_C__)
+#undef g_datalist_clear 
+extern __typeof (g_datalist_clear) g_datalist_clear __attribute((alias("IA__g_datalist_clear"), visibility("default")));
+
+#undef g_datalist_foreach 
+extern __typeof (g_datalist_foreach) g_datalist_foreach __attribute((alias("IA__g_datalist_foreach"), visibility("default")));
+
+#undef g_datalist_get_flags 
+extern __typeof (g_datalist_get_flags) g_datalist_get_flags __attribute((alias("IA__g_datalist_get_flags"), visibility("default")));
+
+#undef g_datalist_id_get_data 
+extern __typeof (g_datalist_id_get_data) g_datalist_id_get_data __attribute((alias("IA__g_datalist_id_get_data"), visibility("default")));
+
+#undef g_datalist_id_remove_no_notify 
+extern __typeof (g_datalist_id_remove_no_notify) g_datalist_id_remove_no_notify __attribute((alias("IA__g_datalist_id_remove_no_notify"), visibility("default")));
+
+#undef g_datalist_id_set_data_full 
+extern __typeof (g_datalist_id_set_data_full) g_datalist_id_set_data_full __attribute((alias("IA__g_datalist_id_set_data_full"), visibility("default")));
+
+#undef g_datalist_set_flags 
+extern __typeof (g_datalist_set_flags) g_datalist_set_flags __attribute((alias("IA__g_datalist_set_flags"), visibility("default")));
+
+#undef g_datalist_unset_flags 
+extern __typeof (g_datalist_unset_flags) g_datalist_unset_flags __attribute((alias("IA__g_datalist_unset_flags"), visibility("default")));
+
+#undef g_datalist_init 
+extern __typeof (g_datalist_init) g_datalist_init __attribute((alias("IA__g_datalist_init"), visibility("default")));
+
+#undef g_dataset_destroy 
+extern __typeof (g_dataset_destroy) g_dataset_destroy __attribute((alias("IA__g_dataset_destroy"), visibility("default")));
+
+#undef g_dataset_foreach 
+extern __typeof (g_dataset_foreach) g_dataset_foreach __attribute((alias("IA__g_dataset_foreach"), visibility("default")));
+
+#undef g_dataset_id_get_data 
+extern __typeof (g_dataset_id_get_data) g_dataset_id_get_data __attribute((alias("IA__g_dataset_id_get_data"), visibility("default")));
+
+#undef g_dataset_id_remove_no_notify 
+extern __typeof (g_dataset_id_remove_no_notify) g_dataset_id_remove_no_notify __attribute((alias("IA__g_dataset_id_remove_no_notify"), visibility("default")));
+
+#undef g_dataset_id_set_data_full 
+extern __typeof (g_dataset_id_set_data_full) g_dataset_id_set_data_full __attribute((alias("IA__g_dataset_id_set_data_full"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_QUARK_H__)
+#if IN_FILE(__G_DATASET_C__)
+#undef g_quark_from_static_string 
+extern __typeof (g_quark_from_static_string) g_quark_from_static_string __attribute((alias("IA__g_quark_from_static_string"), visibility("default")));
+
+#undef g_quark_from_string 
+extern __typeof (g_quark_from_string) g_quark_from_string __attribute((alias("IA__g_quark_from_string"), visibility("default")));
+
+#undef g_quark_to_string 
+extern __typeof (g_quark_to_string) g_quark_to_string __attribute((alias("IA__g_quark_to_string"), visibility("default")));
+
+#undef g_quark_try_string 
+extern __typeof (g_quark_try_string) g_quark_try_string __attribute((alias("IA__g_quark_try_string"), visibility("default")));
+
+#undef g_intern_string 
+extern __typeof (g_intern_string) g_intern_string __attribute((alias("IA__g_intern_string"), visibility("default")));
+
+#undef g_intern_static_string 
+extern __typeof (g_intern_static_string) g_intern_static_string __attribute((alias("IA__g_intern_static_string"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_DATE_H__)
+#if IN_FILE(__G_DATE_C__)
+#undef g_date_add_days 
+extern __typeof (g_date_add_days) g_date_add_days __attribute((alias("IA__g_date_add_days"), visibility("default")));
+
+#undef g_date_add_months 
+extern __typeof (g_date_add_months) g_date_add_months __attribute((alias("IA__g_date_add_months"), visibility("default")));
+
+#undef g_date_add_years 
+extern __typeof (g_date_add_years) g_date_add_years __attribute((alias("IA__g_date_add_years"), visibility("default")));
+
+#undef g_date_clamp 
+extern __typeof (g_date_clamp) g_date_clamp __attribute((alias("IA__g_date_clamp"), visibility("default")));
+
+#undef g_date_clear 
+extern __typeof (g_date_clear) g_date_clear __attribute((alias("IA__g_date_clear"), visibility("default")));
+
+#undef g_date_compare 
+extern __typeof (g_date_compare) g_date_compare __attribute((alias("IA__g_date_compare"), visibility("default")));
+
+#undef g_date_days_between 
+extern __typeof (g_date_days_between) g_date_days_between __attribute((alias("IA__g_date_days_between"), visibility("default")));
+
+#undef g_date_free 
+extern __typeof (g_date_free) g_date_free __attribute((alias("IA__g_date_free"), visibility("default")));
+
+#undef g_date_get_day 
+extern __typeof (g_date_get_day) g_date_get_day __attribute((alias("IA__g_date_get_day"), visibility("default")));
+
+#undef g_date_get_day_of_year 
+extern __typeof (g_date_get_day_of_year) g_date_get_day_of_year __attribute((alias("IA__g_date_get_day_of_year"), visibility("default")));
+
+#undef g_date_get_days_in_month 
+extern __typeof (g_date_get_days_in_month) g_date_get_days_in_month __attribute((alias("IA__g_date_get_days_in_month"), visibility("default")));
+
+#undef g_date_get_iso8601_week_of_year 
+extern __typeof (g_date_get_iso8601_week_of_year) g_date_get_iso8601_week_of_year __attribute((alias("IA__g_date_get_iso8601_week_of_year"), visibility("default")));
+
+#undef g_date_get_julian 
+extern __typeof (g_date_get_julian) g_date_get_julian __attribute((alias("IA__g_date_get_julian"), visibility("default")));
+
+#undef g_date_get_monday_week_of_year 
+extern __typeof (g_date_get_monday_week_of_year) g_date_get_monday_week_of_year __attribute((alias("IA__g_date_get_monday_week_of_year"), visibility("default")));
+
+#undef g_date_get_monday_weeks_in_year 
+extern __typeof (g_date_get_monday_weeks_in_year) g_date_get_monday_weeks_in_year __attribute((alias("IA__g_date_get_monday_weeks_in_year"), visibility("default")));
+
+#undef g_date_get_month 
+extern __typeof (g_date_get_month) g_date_get_month __attribute((alias("IA__g_date_get_month"), visibility("default")));
+
+#undef g_date_get_sunday_week_of_year 
+extern __typeof (g_date_get_sunday_week_of_year) g_date_get_sunday_week_of_year __attribute((alias("IA__g_date_get_sunday_week_of_year"), visibility("default")));
+
+#undef g_date_get_sunday_weeks_in_year 
+extern __typeof (g_date_get_sunday_weeks_in_year) g_date_get_sunday_weeks_in_year __attribute((alias("IA__g_date_get_sunday_weeks_in_year"), visibility("default")));
+
+#undef g_date_get_weekday 
+extern __typeof (g_date_get_weekday) g_date_get_weekday __attribute((alias("IA__g_date_get_weekday"), visibility("default")));
+
+#undef g_date_get_year 
+extern __typeof (g_date_get_year) g_date_get_year __attribute((alias("IA__g_date_get_year"), visibility("default")));
+
+#undef g_date_is_first_of_month 
+extern __typeof (g_date_is_first_of_month) g_date_is_first_of_month __attribute((alias("IA__g_date_is_first_of_month"), visibility("default")));
+
+#undef g_date_is_last_of_month 
+extern __typeof (g_date_is_last_of_month) g_date_is_last_of_month __attribute((alias("IA__g_date_is_last_of_month"), visibility("default")));
+
+#undef g_date_is_leap_year 
+extern __typeof (g_date_is_leap_year) g_date_is_leap_year __attribute((alias("IA__g_date_is_leap_year"), visibility("default")));
+
+#undef g_date_new 
+extern __typeof (g_date_new) g_date_new __attribute((alias("IA__g_date_new"), visibility("default")));
+
+#undef g_date_new_dmy 
+extern __typeof (g_date_new_dmy) g_date_new_dmy __attribute((alias("IA__g_date_new_dmy"), visibility("default")));
+
+#undef g_date_new_julian 
+extern __typeof (g_date_new_julian) g_date_new_julian __attribute((alias("IA__g_date_new_julian"), visibility("default")));
+
+#undef g_date_order 
+extern __typeof (g_date_order) g_date_order __attribute((alias("IA__g_date_order"), visibility("default")));
+
+#undef g_date_set_day 
+extern __typeof (g_date_set_day) g_date_set_day __attribute((alias("IA__g_date_set_day"), visibility("default")));
+
+#undef g_date_set_dmy 
+extern __typeof (g_date_set_dmy) g_date_set_dmy __attribute((alias("IA__g_date_set_dmy"), visibility("default")));
+
+#undef g_date_set_julian 
+extern __typeof (g_date_set_julian) g_date_set_julian __attribute((alias("IA__g_date_set_julian"), visibility("default")));
+
+#undef g_date_set_month 
+extern __typeof (g_date_set_month) g_date_set_month __attribute((alias("IA__g_date_set_month"), visibility("default")));
+
+#undef g_date_set_parse 
+extern __typeof (g_date_set_parse) g_date_set_parse __attribute((alias("IA__g_date_set_parse"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_date_set_time 
+extern __typeof (g_date_set_time) g_date_set_time __attribute((alias("IA__g_date_set_time"), visibility("default")));
+
+#endif
+#undef g_date_set_time_t 
+extern __typeof (g_date_set_time_t) g_date_set_time_t __attribute((alias("IA__g_date_set_time_t"), visibility("default")));
+
+#undef g_date_set_time_val 
+extern __typeof (g_date_set_time_val) g_date_set_time_val __attribute((alias("IA__g_date_set_time_val"), visibility("default")));
+
+#undef g_date_set_year 
+extern __typeof (g_date_set_year) g_date_set_year __attribute((alias("IA__g_date_set_year"), visibility("default")));
+
+#undef g_date_strftime 
+extern __typeof (g_date_strftime) g_date_strftime __attribute((alias("IA__g_date_strftime"), visibility("default")));
+
+#undef g_date_subtract_days 
+extern __typeof (g_date_subtract_days) g_date_subtract_days __attribute((alias("IA__g_date_subtract_days"), visibility("default")));
+
+#undef g_date_subtract_months 
+extern __typeof (g_date_subtract_months) g_date_subtract_months __attribute((alias("IA__g_date_subtract_months"), visibility("default")));
+
+#undef g_date_subtract_years 
+extern __typeof (g_date_subtract_years) g_date_subtract_years __attribute((alias("IA__g_date_subtract_years"), visibility("default")));
+
+#undef g_date_to_struct_tm 
+extern __typeof (g_date_to_struct_tm) g_date_to_struct_tm __attribute((alias("IA__g_date_to_struct_tm"), visibility("default")));
+
+#undef g_date_valid 
+extern __typeof (g_date_valid) g_date_valid __attribute((alias("IA__g_date_valid"), visibility("default")));
+
+#undef g_date_valid_day 
+extern __typeof (g_date_valid_day) g_date_valid_day __attribute((alias("IA__g_date_valid_day"), visibility("default")));
+
+#undef g_date_valid_dmy 
+extern __typeof (g_date_valid_dmy) g_date_valid_dmy __attribute((alias("IA__g_date_valid_dmy"), visibility("default")));
+
+#undef g_date_valid_julian 
+extern __typeof (g_date_valid_julian) g_date_valid_julian __attribute((alias("IA__g_date_valid_julian"), visibility("default")));
+
+#undef g_date_valid_month 
+extern __typeof (g_date_valid_month) g_date_valid_month __attribute((alias("IA__g_date_valid_month"), visibility("default")));
+
+#undef g_date_valid_weekday 
+extern __typeof (g_date_valid_weekday) g_date_valid_weekday __attribute((alias("IA__g_date_valid_weekday"), visibility("default")));
+
+#undef g_date_valid_year 
+extern __typeof (g_date_valid_year) g_date_valid_year __attribute((alias("IA__g_date_valid_year"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_DIR_H__)
+#if IN_FILE(__G_DIR_C__)
+#undef g_dir_close 
+extern __typeof (g_dir_close) g_dir_close __attribute((alias("IA__g_dir_close"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_dir_open 
+extern __typeof (g_dir_open) g_dir_open __attribute((alias("IA__g_dir_open"), visibility("default")));
+
+#undef g_dir_read_name 
+extern __typeof (g_dir_read_name) g_dir_read_name __attribute((alias("IA__g_dir_read_name"), visibility("default")));
+
+#endif
+#ifdef G_OS_WIN32
+#undef g_dir_open_utf8 
+extern __typeof (g_dir_open_utf8) g_dir_open_utf8 __attribute((alias("IA__g_dir_open_utf8"), visibility("default")));
+
+#undef g_dir_read_name_utf8 
+extern __typeof (g_dir_read_name_utf8) g_dir_read_name_utf8 __attribute((alias("IA__g_dir_read_name_utf8"), visibility("default")));
+
+#endif
+#undef g_dir_rewind 
+extern __typeof (g_dir_rewind) g_dir_rewind __attribute((alias("IA__g_dir_rewind"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_ERROR_H__)
+#if IN_FILE(__G_ERROR_C__)
+#undef g_clear_error 
+extern __typeof (g_clear_error) g_clear_error __attribute((alias("IA__g_clear_error"), visibility("default")));
+
+#undef g_error_copy 
+extern __typeof (g_error_copy) g_error_copy __attribute((alias("IA__g_error_copy"), visibility("default")));
+
+#undef g_error_free 
+extern __typeof (g_error_free) g_error_free __attribute((alias("IA__g_error_free"), visibility("default")));
+
+#undef g_error_matches 
+extern __typeof (g_error_matches) g_error_matches __attribute((alias("IA__g_error_matches"), visibility("default")));
+
+#undef g_error_new 
+extern __typeof (g_error_new) g_error_new __attribute((alias("IA__g_error_new"), visibility("default")));
+
+#undef g_error_new_literal 
+extern __typeof (g_error_new_literal) g_error_new_literal __attribute((alias("IA__g_error_new_literal"), visibility("default")));
+
+#undef g_propagate_error 
+extern __typeof (g_propagate_error) g_propagate_error __attribute((alias("IA__g_propagate_error"), visibility("default")));
+
+#undef g_set_error 
+extern __typeof (g_set_error) g_set_error __attribute((alias("IA__g_set_error"), visibility("default")));
+
+#undef g_set_error_literal 
+extern __typeof (g_set_error_literal) g_set_error_literal __attribute((alias("IA__g_set_error_literal"), visibility("default")));
+
+#undef g_prefix_error 
+extern __typeof (g_prefix_error) g_prefix_error __attribute((alias("IA__g_prefix_error"), visibility("default")));
+
+#undef g_propagate_prefixed_error 
+extern __typeof (g_propagate_prefixed_error) g_propagate_prefixed_error __attribute((alias("IA__g_propagate_prefixed_error"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_FILEUTILS_H__)
+#if IN_FILE(__G_FILEUTILS_C__)
+#undef g_build_filename 
+extern __typeof (g_build_filename) g_build_filename __attribute((alias("IA__g_build_filename"), visibility("default")));
+
+#undef g_build_filenamev 
+extern __typeof (g_build_filenamev) g_build_filenamev __attribute((alias("IA__g_build_filenamev"), visibility("default")));
+
+#undef g_build_path 
+extern __typeof (g_build_path) g_build_path __attribute((alias("IA__g_build_path"), visibility("default")));
+
+#undef g_build_pathv 
+extern __typeof (g_build_pathv) g_build_pathv __attribute((alias("IA__g_build_pathv"), visibility("default")));
+
+#undef g_file_error_from_errno 
+extern __typeof (g_file_error_from_errno) g_file_error_from_errno __attribute((alias("IA__g_file_error_from_errno"), visibility("default")));
+
+#undef g_file_error_quark 
+extern __typeof (g_file_error_quark) g_file_error_quark __attribute((alias("IA__g_file_error_quark"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_file_get_contents 
+extern __typeof (g_file_get_contents) g_file_get_contents __attribute((alias("IA__g_file_get_contents"), visibility("default")));
+
+#endif
+#undef g_file_set_contents 
+extern __typeof (g_file_set_contents) g_file_set_contents __attribute((alias("IA__g_file_set_contents"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_file_open_tmp 
+extern __typeof (g_file_open_tmp) g_file_open_tmp __attribute((alias("IA__g_file_open_tmp"), visibility("default")));
+
+#undef g_file_test 
+extern __typeof (g_file_test) g_file_test __attribute((alias("IA__g_file_test"), visibility("default")));
+
+#endif
+#undef g_file_read_link 
+extern __typeof (g_file_read_link) g_file_read_link __attribute((alias("IA__g_file_read_link"), visibility("default")));
+
+#undef g_format_size_for_display 
+extern __typeof (g_format_size_for_display) g_format_size_for_display __attribute((alias("IA__g_format_size_for_display"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_mkstemp 
+extern __typeof (g_mkstemp) g_mkstemp __attribute((alias("IA__g_mkstemp"), visibility("default")));
+
+#endif
+#undef g_mkdir_with_parents 
+extern __typeof (g_mkdir_with_parents) g_mkdir_with_parents __attribute((alias("IA__g_mkdir_with_parents"), visibility("default")));
+
+#ifdef G_OS_WIN32
+#undef g_file_get_contents_utf8 
+extern __typeof (g_file_get_contents_utf8) g_file_get_contents_utf8 __attribute((alias("IA__g_file_get_contents_utf8"), visibility("default")));
+
+#undef g_file_open_tmp_utf8 
+extern __typeof (g_file_open_tmp_utf8) g_file_open_tmp_utf8 __attribute((alias("IA__g_file_open_tmp_utf8"), visibility("default")));
+
+#undef g_file_test_utf8 
+extern __typeof (g_file_test_utf8) g_file_test_utf8 __attribute((alias("IA__g_file_test_utf8"), visibility("default")));
+
+#undef g_mkstemp_utf8 
+extern __typeof (g_mkstemp_utf8) g_mkstemp_utf8 __attribute((alias("IA__g_mkstemp_utf8"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_HASH_H__)
+#if IN_FILE(__G_HASH_C__)
+#undef g_hash_table_destroy 
+extern __typeof (g_hash_table_destroy) g_hash_table_destroy __attribute((alias("IA__g_hash_table_destroy"), visibility("default")));
+
+#undef g_hash_table_unref 
+extern __typeof (g_hash_table_unref) g_hash_table_unref __attribute((alias("IA__g_hash_table_unref"), visibility("default")));
+
+#undef g_hash_table_ref 
+extern __typeof (g_hash_table_ref) g_hash_table_ref __attribute((alias("IA__g_hash_table_ref"), visibility("default")));
+
+#undef g_hash_table_find 
+extern __typeof (g_hash_table_find) g_hash_table_find __attribute((alias("IA__g_hash_table_find"), visibility("default")));
+
+#undef g_hash_table_foreach 
+extern __typeof (g_hash_table_foreach) g_hash_table_foreach __attribute((alias("IA__g_hash_table_foreach"), visibility("default")));
+
+#undef g_hash_table_foreach_remove 
+extern __typeof (g_hash_table_foreach_remove) g_hash_table_foreach_remove __attribute((alias("IA__g_hash_table_foreach_remove"), visibility("default")));
+
+#undef g_hash_table_foreach_steal 
+extern __typeof (g_hash_table_foreach_steal) g_hash_table_foreach_steal __attribute((alias("IA__g_hash_table_foreach_steal"), visibility("default")));
+
+#undef g_hash_table_get_keys 
+extern __typeof (g_hash_table_get_keys) g_hash_table_get_keys __attribute((alias("IA__g_hash_table_get_keys"), visibility("default")));
+
+#undef g_hash_table_get_values 
+extern __typeof (g_hash_table_get_values) g_hash_table_get_values __attribute((alias("IA__g_hash_table_get_values"), visibility("default")));
+
+#undef g_hash_table_insert 
+extern __typeof (g_hash_table_insert) g_hash_table_insert __attribute((alias("IA__g_hash_table_insert"), visibility("default")));
+
+#undef g_hash_table_lookup 
+extern __typeof (g_hash_table_lookup) g_hash_table_lookup __attribute((alias("IA__g_hash_table_lookup"), visibility("default")));
+
+#undef g_hash_table_lookup_extended 
+extern __typeof (g_hash_table_lookup_extended) g_hash_table_lookup_extended __attribute((alias("IA__g_hash_table_lookup_extended"), visibility("default")));
+
+#undef g_hash_table_new 
+extern __typeof (g_hash_table_new) g_hash_table_new __attribute((alias("IA__g_hash_table_new"), visibility("default")));
+
+#undef g_hash_table_new_full 
+extern __typeof (g_hash_table_new_full) g_hash_table_new_full __attribute((alias("IA__g_hash_table_new_full"), visibility("default")));
+
+#undef g_hash_table_remove 
+extern __typeof (g_hash_table_remove) g_hash_table_remove __attribute((alias("IA__g_hash_table_remove"), visibility("default")));
+
+#undef g_hash_table_remove_all 
+extern __typeof (g_hash_table_remove_all) g_hash_table_remove_all __attribute((alias("IA__g_hash_table_remove_all"), visibility("default")));
+
+#undef g_hash_table_replace 
+extern __typeof (g_hash_table_replace) g_hash_table_replace __attribute((alias("IA__g_hash_table_replace"), visibility("default")));
+
+#undef g_hash_table_size 
+extern __typeof (g_hash_table_size) g_hash_table_size __attribute((alias("IA__g_hash_table_size"), visibility("default")));
+
+#undef g_hash_table_steal 
+extern __typeof (g_hash_table_steal) g_hash_table_steal __attribute((alias("IA__g_hash_table_steal"), visibility("default")));
+
+#undef g_hash_table_steal_all 
+extern __typeof (g_hash_table_steal_all) g_hash_table_steal_all __attribute((alias("IA__g_hash_table_steal_all"), visibility("default")));
+
+#undef g_hash_table_iter_init 
+extern __typeof (g_hash_table_iter_init) g_hash_table_iter_init __attribute((alias("IA__g_hash_table_iter_init"), visibility("default")));
+
+#undef g_hash_table_iter_next 
+extern __typeof (g_hash_table_iter_next) g_hash_table_iter_next __attribute((alias("IA__g_hash_table_iter_next"), visibility("default")));
+
+#undef g_hash_table_iter_get_hash_table 
+extern __typeof (g_hash_table_iter_get_hash_table) g_hash_table_iter_get_hash_table __attribute((alias("IA__g_hash_table_iter_get_hash_table"), visibility("default")));
+
+#undef g_hash_table_iter_remove 
+extern __typeof (g_hash_table_iter_remove) g_hash_table_iter_remove __attribute((alias("IA__g_hash_table_iter_remove"), visibility("default")));
+
+#undef g_hash_table_iter_steal 
+extern __typeof (g_hash_table_iter_steal) g_hash_table_iter_steal __attribute((alias("IA__g_hash_table_iter_steal"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_HOOK_H__)
+#if IN_FILE(__G_HOOK_C__)
+#undef g_hook_alloc 
+extern __typeof (g_hook_alloc) g_hook_alloc __attribute((alias("IA__g_hook_alloc"), visibility("default")));
+
+#undef g_hook_compare_ids 
+extern __typeof (g_hook_compare_ids) g_hook_compare_ids __attribute((alias("IA__g_hook_compare_ids"), visibility("default")));
+
+#undef g_hook_destroy 
+extern __typeof (g_hook_destroy) g_hook_destroy __attribute((alias("IA__g_hook_destroy"), visibility("default")));
+
+#undef g_hook_destroy_link 
+extern __typeof (g_hook_destroy_link) g_hook_destroy_link __attribute((alias("IA__g_hook_destroy_link"), visibility("default")));
+
+#undef g_hook_find 
+extern __typeof (g_hook_find) g_hook_find __attribute((alias("IA__g_hook_find"), visibility("default")));
+
+#undef g_hook_find_data 
+extern __typeof (g_hook_find_data) g_hook_find_data __attribute((alias("IA__g_hook_find_data"), visibility("default")));
+
+#undef g_hook_find_func 
+extern __typeof (g_hook_find_func) g_hook_find_func __attribute((alias("IA__g_hook_find_func"), visibility("default")));
+
+#undef g_hook_find_func_data 
+extern __typeof (g_hook_find_func_data) g_hook_find_func_data __attribute((alias("IA__g_hook_find_func_data"), visibility("default")));
+
+#undef g_hook_first_valid 
+extern __typeof (g_hook_first_valid) g_hook_first_valid __attribute((alias("IA__g_hook_first_valid"), visibility("default")));
+
+#undef g_hook_free 
+extern __typeof (g_hook_free) g_hook_free __attribute((alias("IA__g_hook_free"), visibility("default")));
+
+#undef g_hook_get 
+extern __typeof (g_hook_get) g_hook_get __attribute((alias("IA__g_hook_get"), visibility("default")));
+
+#undef g_hook_insert_before 
+extern __typeof (g_hook_insert_before) g_hook_insert_before __attribute((alias("IA__g_hook_insert_before"), visibility("default")));
+
+#undef g_hook_insert_sorted 
+extern __typeof (g_hook_insert_sorted) g_hook_insert_sorted __attribute((alias("IA__g_hook_insert_sorted"), visibility("default")));
+
+#undef g_hook_list_clear 
+extern __typeof (g_hook_list_clear) g_hook_list_clear __attribute((alias("IA__g_hook_list_clear"), visibility("default")));
+
+#undef g_hook_list_init 
+extern __typeof (g_hook_list_init) g_hook_list_init __attribute((alias("IA__g_hook_list_init"), visibility("default")));
+
+#undef g_hook_list_invoke 
+extern __typeof (g_hook_list_invoke) g_hook_list_invoke __attribute((alias("IA__g_hook_list_invoke"), visibility("default")));
+
+#undef g_hook_list_invoke_check 
+extern __typeof (g_hook_list_invoke_check) g_hook_list_invoke_check __attribute((alias("IA__g_hook_list_invoke_check"), visibility("default")));
+
+#undef g_hook_list_marshal 
+extern __typeof (g_hook_list_marshal) g_hook_list_marshal __attribute((alias("IA__g_hook_list_marshal"), visibility("default")));
+
+#undef g_hook_list_marshal_check 
+extern __typeof (g_hook_list_marshal_check) g_hook_list_marshal_check __attribute((alias("IA__g_hook_list_marshal_check"), visibility("default")));
+
+#undef g_hook_next_valid 
+extern __typeof (g_hook_next_valid) g_hook_next_valid __attribute((alias("IA__g_hook_next_valid"), visibility("default")));
+
+#undef g_hook_prepend 
+extern __typeof (g_hook_prepend) g_hook_prepend __attribute((alias("IA__g_hook_prepend"), visibility("default")));
+
+#undef g_hook_ref 
+extern __typeof (g_hook_ref) g_hook_ref __attribute((alias("IA__g_hook_ref"), visibility("default")));
+
+#undef g_hook_unref 
+extern __typeof (g_hook_unref) g_hook_unref __attribute((alias("IA__g_hook_unref"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_IOCHANNEL_H__)
+#if IN_FILE(__G_IOCHANNEL_C__)
+#undef g_io_add_watch 
+extern __typeof (g_io_add_watch) g_io_add_watch __attribute((alias("IA__g_io_add_watch"), visibility("default")));
+
+#undef g_io_add_watch_full 
+extern __typeof (g_io_add_watch_full) g_io_add_watch_full __attribute((alias("IA__g_io_add_watch_full"), visibility("default")));
+
+#undef g_io_create_watch 
+extern __typeof (g_io_create_watch) g_io_create_watch __attribute((alias("IA__g_io_create_watch"), visibility("default")));
+
+#undef g_io_channel_error_from_errno 
+extern __typeof (g_io_channel_error_from_errno) g_io_channel_error_from_errno __attribute((alias("IA__g_io_channel_error_from_errno"), visibility("default")));
+
+#undef g_io_channel_error_quark 
+extern __typeof (g_io_channel_error_quark) g_io_channel_error_quark __attribute((alias("IA__g_io_channel_error_quark"), visibility("default")));
+
+#undef g_io_channel_flush 
+extern __typeof (g_io_channel_flush) g_io_channel_flush __attribute((alias("IA__g_io_channel_flush"), visibility("default")));
+
+#undef g_io_channel_get_buffer_condition 
+extern __typeof (g_io_channel_get_buffer_condition) g_io_channel_get_buffer_condition __attribute((alias("IA__g_io_channel_get_buffer_condition"), visibility("default")));
+
+#undef g_io_channel_get_buffered 
+extern __typeof (g_io_channel_get_buffered) g_io_channel_get_buffered __attribute((alias("IA__g_io_channel_get_buffered"), visibility("default")));
+
+#undef g_io_channel_get_buffer_size 
+extern __typeof (g_io_channel_get_buffer_size) g_io_channel_get_buffer_size __attribute((alias("IA__g_io_channel_get_buffer_size"), visibility("default")));
+
+#undef g_io_channel_get_close_on_unref 
+extern __typeof (g_io_channel_get_close_on_unref) g_io_channel_get_close_on_unref __attribute((alias("IA__g_io_channel_get_close_on_unref"), visibility("default")));
+
+#undef g_io_channel_get_encoding 
+extern __typeof (g_io_channel_get_encoding) g_io_channel_get_encoding __attribute((alias("IA__g_io_channel_get_encoding"), visibility("default")));
+
+#undef g_io_channel_get_flags 
+extern __typeof (g_io_channel_get_flags) g_io_channel_get_flags __attribute((alias("IA__g_io_channel_get_flags"), visibility("default")));
+
+#undef g_io_channel_get_line_term 
+extern __typeof (g_io_channel_get_line_term) g_io_channel_get_line_term __attribute((alias("IA__g_io_channel_get_line_term"), visibility("default")));
+
+#undef g_io_channel_init 
+extern __typeof (g_io_channel_init) g_io_channel_init __attribute((alias("IA__g_io_channel_init"), visibility("default")));
+
+#undef g_io_channel_read_chars 
+extern __typeof (g_io_channel_read_chars) g_io_channel_read_chars __attribute((alias("IA__g_io_channel_read_chars"), visibility("default")));
+
+#undef g_io_channel_read_line 
+extern __typeof (g_io_channel_read_line) g_io_channel_read_line __attribute((alias("IA__g_io_channel_read_line"), visibility("default")));
+
+#undef g_io_channel_read_line_string 
+extern __typeof (g_io_channel_read_line_string) g_io_channel_read_line_string __attribute((alias("IA__g_io_channel_read_line_string"), visibility("default")));
+
+#undef g_io_channel_read_to_end 
+extern __typeof (g_io_channel_read_to_end) g_io_channel_read_to_end __attribute((alias("IA__g_io_channel_read_to_end"), visibility("default")));
+
+#undef g_io_channel_read_unichar 
+extern __typeof (g_io_channel_read_unichar) g_io_channel_read_unichar __attribute((alias("IA__g_io_channel_read_unichar"), visibility("default")));
+
+#undef g_io_channel_ref 
+extern __typeof (g_io_channel_ref) g_io_channel_ref __attribute((alias("IA__g_io_channel_ref"), visibility("default")));
+
+#undef g_io_channel_seek_position 
+extern __typeof (g_io_channel_seek_position) g_io_channel_seek_position __attribute((alias("IA__g_io_channel_seek_position"), visibility("default")));
+
+#undef g_io_channel_set_buffered 
+extern __typeof (g_io_channel_set_buffered) g_io_channel_set_buffered __attribute((alias("IA__g_io_channel_set_buffered"), visibility("default")));
+
+#undef g_io_channel_set_buffer_size 
+extern __typeof (g_io_channel_set_buffer_size) g_io_channel_set_buffer_size __attribute((alias("IA__g_io_channel_set_buffer_size"), visibility("default")));
+
+#undef g_io_channel_set_close_on_unref 
+extern __typeof (g_io_channel_set_close_on_unref) g_io_channel_set_close_on_unref __attribute((alias("IA__g_io_channel_set_close_on_unref"), visibility("default")));
+
+#undef g_io_channel_set_encoding 
+extern __typeof (g_io_channel_set_encoding) g_io_channel_set_encoding __attribute((alias("IA__g_io_channel_set_encoding"), visibility("default")));
+
+#undef g_io_channel_set_flags 
+extern __typeof (g_io_channel_set_flags) g_io_channel_set_flags __attribute((alias("IA__g_io_channel_set_flags"), visibility("default")));
+
+#undef g_io_channel_set_line_term 
+extern __typeof (g_io_channel_set_line_term) g_io_channel_set_line_term __attribute((alias("IA__g_io_channel_set_line_term"), visibility("default")));
+
+#undef g_io_channel_shutdown 
+extern __typeof (g_io_channel_shutdown) g_io_channel_shutdown __attribute((alias("IA__g_io_channel_shutdown"), visibility("default")));
+
+#undef g_io_channel_unref 
+extern __typeof (g_io_channel_unref) g_io_channel_unref __attribute((alias("IA__g_io_channel_unref"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_io_channel_close 
+extern __typeof (g_io_channel_close) g_io_channel_close __attribute((alias("IA__g_io_channel_close"), visibility("default")));
+
+#undef g_io_channel_read 
+extern __typeof (g_io_channel_read) g_io_channel_read __attribute((alias("IA__g_io_channel_read"), visibility("default")));
+
+#undef g_io_channel_seek 
+extern __typeof (g_io_channel_seek) g_io_channel_seek __attribute((alias("IA__g_io_channel_seek"), visibility("default")));
+
+#undef g_io_channel_write 
+extern __typeof (g_io_channel_write) g_io_channel_write __attribute((alias("IA__g_io_channel_write"), visibility("default")));
+
+#endif
+#undef g_io_channel_write_chars 
+extern __typeof (g_io_channel_write_chars) g_io_channel_write_chars __attribute((alias("IA__g_io_channel_write_chars"), visibility("default")));
+
+#undef g_io_channel_write_unichar 
+extern __typeof (g_io_channel_write_unichar) g_io_channel_write_unichar __attribute((alias("IA__g_io_channel_write_unichar"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_IOCHANNEL_H__)
+#if IN_FILE(__G_IO_UNIX_C__)
+#ifdef G_OS_UNIX
+#undef g_io_channel_unix_get_fd 
+extern __typeof (g_io_channel_unix_get_fd) g_io_channel_unix_get_fd __attribute((alias("IA__g_io_channel_unix_get_fd"), visibility("default")));
+
+#undef g_io_channel_unix_new 
+extern __typeof (g_io_channel_unix_new) g_io_channel_unix_new __attribute((alias("IA__g_io_channel_unix_new"), visibility("default")));
+
+#undef g_io_channel_new_file 
+extern __typeof (g_io_channel_new_file) g_io_channel_new_file __attribute((alias("IA__g_io_channel_new_file"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_IOCHANNEL_H__)
+#if IN_FILE(__G_IO_WIN32_C__)
+#ifdef G_OS_WIN32
+#undef g_io_channel_unix_get_fd 
+extern __typeof (g_io_channel_unix_get_fd) g_io_channel_unix_get_fd __attribute((alias("IA__g_io_channel_unix_get_fd"), visibility("default")));
+
+#undef g_io_channel_unix_new 
+extern __typeof (g_io_channel_unix_new) g_io_channel_unix_new __attribute((alias("IA__g_io_channel_unix_new"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_io_channel_new_file 
+extern __typeof (g_io_channel_new_file) g_io_channel_new_file __attribute((alias("IA__g_io_channel_new_file"), visibility("default")));
+
+#endif
+#undef g_io_channel_new_file_utf8 
+extern __typeof (g_io_channel_new_file_utf8) g_io_channel_new_file_utf8 __attribute((alias("IA__g_io_channel_new_file_utf8"), visibility("default")));
+
+#undef g_io_channel_win32_get_fd 
+extern __typeof (g_io_channel_win32_get_fd) g_io_channel_win32_get_fd __attribute((alias("IA__g_io_channel_win32_get_fd"), visibility("default")));
+
+#undef g_io_channel_win32_make_pollfd 
+extern __typeof (g_io_channel_win32_make_pollfd) g_io_channel_win32_make_pollfd __attribute((alias("IA__g_io_channel_win32_make_pollfd"), visibility("default")));
+
+#undef g_io_channel_win32_new_fd 
+extern __typeof (g_io_channel_win32_new_fd) g_io_channel_win32_new_fd __attribute((alias("IA__g_io_channel_win32_new_fd"), visibility("default")));
+
+#undef g_io_channel_win32_new_messages 
+extern __typeof (g_io_channel_win32_new_messages) g_io_channel_win32_new_messages __attribute((alias("IA__g_io_channel_win32_new_messages"), visibility("default")));
+
+#undef g_io_channel_win32_new_socket 
+extern __typeof (g_io_channel_win32_new_socket) g_io_channel_win32_new_socket __attribute((alias("IA__g_io_channel_win32_new_socket"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_io_channel_win32_new_stream_socket 
+extern __typeof (g_io_channel_win32_new_stream_socket) g_io_channel_win32_new_stream_socket __attribute((alias("IA__g_io_channel_win32_new_stream_socket"), visibility("default")));
+
+#endif
+#undef g_io_channel_win32_poll 
+extern __typeof (g_io_channel_win32_poll) g_io_channel_win32_poll __attribute((alias("IA__g_io_channel_win32_poll"), visibility("default")));
+
+#undef g_io_channel_win32_set_debug 
+extern __typeof (g_io_channel_win32_set_debug) g_io_channel_win32_set_debug __attribute((alias("IA__g_io_channel_win32_set_debug"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_KEY_FILE_H__)
+#if IN_FILE(__G_KEY_FILE_C__)
+#undef g_key_file_error_quark 
+extern __typeof (g_key_file_error_quark) g_key_file_error_quark __attribute((alias("IA__g_key_file_error_quark"), visibility("default")));
+
+#undef g_key_file_free 
+extern __typeof (g_key_file_free) g_key_file_free __attribute((alias("IA__g_key_file_free"), visibility("default")));
+
+#undef g_key_file_get_boolean 
+extern __typeof (g_key_file_get_boolean) g_key_file_get_boolean __attribute((alias("IA__g_key_file_get_boolean"), visibility("default")));
+
+#undef g_key_file_get_boolean_list 
+extern __typeof (g_key_file_get_boolean_list) g_key_file_get_boolean_list __attribute((alias("IA__g_key_file_get_boolean_list"), visibility("default")));
+
+#undef g_key_file_get_comment 
+extern __typeof (g_key_file_get_comment) g_key_file_get_comment __attribute((alias("IA__g_key_file_get_comment"), visibility("default")));
+
+#undef g_key_file_get_groups 
+extern __typeof (g_key_file_get_groups) g_key_file_get_groups __attribute((alias("IA__g_key_file_get_groups"), visibility("default")));
+
+#undef g_key_file_get_double 
+extern __typeof (g_key_file_get_double) g_key_file_get_double __attribute((alias("IA__g_key_file_get_double"), visibility("default")));
+
+#undef g_key_file_get_double_list 
+extern __typeof (g_key_file_get_double_list) g_key_file_get_double_list __attribute((alias("IA__g_key_file_get_double_list"), visibility("default")));
+
+#undef g_key_file_get_integer 
+extern __typeof (g_key_file_get_integer) g_key_file_get_integer __attribute((alias("IA__g_key_file_get_integer"), visibility("default")));
+
+#undef g_key_file_get_integer_list 
+extern __typeof (g_key_file_get_integer_list) g_key_file_get_integer_list __attribute((alias("IA__g_key_file_get_integer_list"), visibility("default")));
+
+#undef g_key_file_get_keys 
+extern __typeof (g_key_file_get_keys) g_key_file_get_keys __attribute((alias("IA__g_key_file_get_keys"), visibility("default")));
+
+#undef g_key_file_get_locale_string 
+extern __typeof (g_key_file_get_locale_string) g_key_file_get_locale_string __attribute((alias("IA__g_key_file_get_locale_string"), visibility("default")));
+
+#undef g_key_file_get_locale_string_list 
+extern __typeof (g_key_file_get_locale_string_list) g_key_file_get_locale_string_list __attribute((alias("IA__g_key_file_get_locale_string_list"), visibility("default")));
+
+#undef g_key_file_get_start_group 
+extern __typeof (g_key_file_get_start_group) g_key_file_get_start_group __attribute((alias("IA__g_key_file_get_start_group"), visibility("default")));
+
+#undef g_key_file_get_string 
+extern __typeof (g_key_file_get_string) g_key_file_get_string __attribute((alias("IA__g_key_file_get_string"), visibility("default")));
+
+#undef g_key_file_get_string_list 
+extern __typeof (g_key_file_get_string_list) g_key_file_get_string_list __attribute((alias("IA__g_key_file_get_string_list"), visibility("default")));
+
+#undef g_key_file_get_value 
+extern __typeof (g_key_file_get_value) g_key_file_get_value __attribute((alias("IA__g_key_file_get_value"), visibility("default")));
+
+#undef g_key_file_has_group 
+extern __typeof (g_key_file_has_group) g_key_file_has_group __attribute((alias("IA__g_key_file_has_group"), visibility("default")));
+
+#undef g_key_file_has_key 
+extern __typeof (g_key_file_has_key) g_key_file_has_key __attribute((alias("IA__g_key_file_has_key"), visibility("default")));
+
+#undef g_key_file_load_from_dirs 
+extern __typeof (g_key_file_load_from_dirs) g_key_file_load_from_dirs __attribute((alias("IA__g_key_file_load_from_dirs"), visibility("default")));
+
+#undef g_key_file_load_from_data 
+extern __typeof (g_key_file_load_from_data) g_key_file_load_from_data __attribute((alias("IA__g_key_file_load_from_data"), visibility("default")));
+
+#undef g_key_file_load_from_data_dirs 
+extern __typeof (g_key_file_load_from_data_dirs) g_key_file_load_from_data_dirs __attribute((alias("IA__g_key_file_load_from_data_dirs"), visibility("default")));
+
+#undef g_key_file_load_from_file 
+extern __typeof (g_key_file_load_from_file) g_key_file_load_from_file __attribute((alias("IA__g_key_file_load_from_file"), visibility("default")));
+
+#undef g_key_file_new 
+extern __typeof (g_key_file_new) g_key_file_new __attribute((alias("IA__g_key_file_new"), visibility("default")));
+
+#undef g_key_file_remove_comment 
+extern __typeof (g_key_file_remove_comment) g_key_file_remove_comment __attribute((alias("IA__g_key_file_remove_comment"), visibility("default")));
+
+#undef g_key_file_remove_group 
+extern __typeof (g_key_file_remove_group) g_key_file_remove_group __attribute((alias("IA__g_key_file_remove_group"), visibility("default")));
+
+#undef g_key_file_remove_key 
+extern __typeof (g_key_file_remove_key) g_key_file_remove_key __attribute((alias("IA__g_key_file_remove_key"), visibility("default")));
+
+#undef g_key_file_set_boolean 
+extern __typeof (g_key_file_set_boolean) g_key_file_set_boolean __attribute((alias("IA__g_key_file_set_boolean"), visibility("default")));
+
+#undef g_key_file_set_boolean_list 
+extern __typeof (g_key_file_set_boolean_list) g_key_file_set_boolean_list __attribute((alias("IA__g_key_file_set_boolean_list"), visibility("default")));
+
+#undef g_key_file_set_comment 
+extern __typeof (g_key_file_set_comment) g_key_file_set_comment __attribute((alias("IA__g_key_file_set_comment"), visibility("default")));
+
+#undef g_key_file_set_double 
+extern __typeof (g_key_file_set_double) g_key_file_set_double __attribute((alias("IA__g_key_file_set_double"), visibility("default")));
+
+#undef g_key_file_set_double_list 
+extern __typeof (g_key_file_set_double_list) g_key_file_set_double_list __attribute((alias("IA__g_key_file_set_double_list"), visibility("default")));
+
+#undef g_key_file_set_integer 
+extern __typeof (g_key_file_set_integer) g_key_file_set_integer __attribute((alias("IA__g_key_file_set_integer"), visibility("default")));
+
+#undef g_key_file_set_integer_list 
+extern __typeof (g_key_file_set_integer_list) g_key_file_set_integer_list __attribute((alias("IA__g_key_file_set_integer_list"), visibility("default")));
+
+#undef g_key_file_set_list_separator 
+extern __typeof (g_key_file_set_list_separator) g_key_file_set_list_separator __attribute((alias("IA__g_key_file_set_list_separator"), visibility("default")));
+
+#undef g_key_file_set_locale_string 
+extern __typeof (g_key_file_set_locale_string) g_key_file_set_locale_string __attribute((alias("IA__g_key_file_set_locale_string"), visibility("default")));
+
+#undef g_key_file_set_locale_string_list 
+extern __typeof (g_key_file_set_locale_string_list) g_key_file_set_locale_string_list __attribute((alias("IA__g_key_file_set_locale_string_list"), visibility("default")));
+
+#undef g_key_file_set_string 
+extern __typeof (g_key_file_set_string) g_key_file_set_string __attribute((alias("IA__g_key_file_set_string"), visibility("default")));
+
+#undef g_key_file_set_string_list 
+extern __typeof (g_key_file_set_string_list) g_key_file_set_string_list __attribute((alias("IA__g_key_file_set_string_list"), visibility("default")));
+
+#undef g_key_file_set_value 
+extern __typeof (g_key_file_set_value) g_key_file_set_value __attribute((alias("IA__g_key_file_set_value"), visibility("default")));
+
+#undef g_key_file_to_data 
+extern __typeof (g_key_file_to_data) g_key_file_to_data __attribute((alias("IA__g_key_file_to_data"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_LIST_H__)
+#if IN_FILE(__G_LIST_C__)
+#undef g_list_alloc 
+extern __typeof (g_list_alloc) g_list_alloc __attribute((alias("IA__g_list_alloc"), visibility("default")));
+
+#undef g_list_append 
+extern __typeof (g_list_append) g_list_append __attribute((alias("IA__g_list_append"), visibility("default")));
+
+#undef g_list_concat 
+extern __typeof (g_list_concat) g_list_concat __attribute((alias("IA__g_list_concat"), visibility("default")));
+
+#undef g_list_copy 
+extern __typeof (g_list_copy) g_list_copy __attribute((alias("IA__g_list_copy"), visibility("default")));
+
+#undef g_list_delete_link 
+extern __typeof (g_list_delete_link) g_list_delete_link __attribute((alias("IA__g_list_delete_link"), visibility("default")));
+
+#undef g_list_find 
+extern __typeof (g_list_find) g_list_find __attribute((alias("IA__g_list_find"), visibility("default")));
+
+#undef g_list_find_custom 
+extern __typeof (g_list_find_custom) g_list_find_custom __attribute((alias("IA__g_list_find_custom"), visibility("default")));
+
+#undef g_list_first 
+extern __typeof (g_list_first) g_list_first __attribute((alias("IA__g_list_first"), visibility("default")));
+
+#undef g_list_foreach 
+extern __typeof (g_list_foreach) g_list_foreach __attribute((alias("IA__g_list_foreach"), visibility("default")));
+
+#undef g_list_free 
+extern __typeof (g_list_free) g_list_free __attribute((alias("IA__g_list_free"), visibility("default")));
+
+#undef g_list_free_1 
+extern __typeof (g_list_free_1) g_list_free_1 __attribute((alias("IA__g_list_free_1"), visibility("default")));
+
+#undef g_list_index 
+extern __typeof (g_list_index) g_list_index __attribute((alias("IA__g_list_index"), visibility("default")));
+
+#undef g_list_insert 
+extern __typeof (g_list_insert) g_list_insert __attribute((alias("IA__g_list_insert"), visibility("default")));
+
+#undef g_list_insert_before 
+extern __typeof (g_list_insert_before) g_list_insert_before __attribute((alias("IA__g_list_insert_before"), visibility("default")));
+
+#undef g_list_insert_sorted 
+extern __typeof (g_list_insert_sorted) g_list_insert_sorted __attribute((alias("IA__g_list_insert_sorted"), visibility("default")));
+
+#undef g_list_insert_sorted_with_data 
+extern __typeof (g_list_insert_sorted_with_data) g_list_insert_sorted_with_data __attribute((alias("IA__g_list_insert_sorted_with_data"), visibility("default")));
+
+#undef g_list_last 
+extern __typeof (g_list_last) g_list_last __attribute((alias("IA__g_list_last"), visibility("default")));
+
+#undef g_list_length 
+extern __typeof (g_list_length) g_list_length __attribute((alias("IA__g_list_length"), visibility("default")));
+
+#undef g_list_nth 
+extern __typeof (g_list_nth) g_list_nth __attribute((alias("IA__g_list_nth"), visibility("default")));
+
+#undef g_list_nth_data 
+extern __typeof (g_list_nth_data) g_list_nth_data __attribute((alias("IA__g_list_nth_data"), visibility("default")));
+
+#undef g_list_nth_prev 
+extern __typeof (g_list_nth_prev) g_list_nth_prev __attribute((alias("IA__g_list_nth_prev"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_list_pop_allocator 
+extern __typeof (g_list_pop_allocator) g_list_pop_allocator __attribute((alias("IA__g_list_pop_allocator"), visibility("default")));
+
+#endif
+#undef g_list_position 
+extern __typeof (g_list_position) g_list_position __attribute((alias("IA__g_list_position"), visibility("default")));
+
+#undef g_list_prepend 
+extern __typeof (g_list_prepend) g_list_prepend __attribute((alias("IA__g_list_prepend"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_list_push_allocator 
+extern __typeof (g_list_push_allocator) g_list_push_allocator __attribute((alias("IA__g_list_push_allocator"), visibility("default")));
+
+#endif
+#undef g_list_remove 
+extern __typeof (g_list_remove) g_list_remove __attribute((alias("IA__g_list_remove"), visibility("default")));
+
+#undef g_list_remove_all 
+extern __typeof (g_list_remove_all) g_list_remove_all __attribute((alias("IA__g_list_remove_all"), visibility("default")));
+
+#undef g_list_remove_link 
+extern __typeof (g_list_remove_link) g_list_remove_link __attribute((alias("IA__g_list_remove_link"), visibility("default")));
+
+#undef g_list_reverse 
+extern __typeof (g_list_reverse) g_list_reverse __attribute((alias("IA__g_list_reverse"), visibility("default")));
+
+#undef g_list_sort 
+extern __typeof (g_list_sort) g_list_sort __attribute((alias("IA__g_list_sort"), visibility("default")));
+
+#undef g_list_sort_with_data 
+extern __typeof (g_list_sort_with_data) g_list_sort_with_data __attribute((alias("IA__g_list_sort_with_data"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_MAIN_H__)
+#if IN_FILE(__G_MAIN_C__)
+#undef g_child_watch_add 
+extern __typeof (g_child_watch_add) g_child_watch_add __attribute((alias("IA__g_child_watch_add"), visibility("default")));
+
+#undef g_child_watch_add_full 
+extern __typeof (g_child_watch_add_full) g_child_watch_add_full __attribute((alias("IA__g_child_watch_add_full"), visibility("default")));
+
+#undef g_child_watch_source_new 
+extern __typeof (g_child_watch_source_new) g_child_watch_source_new __attribute((alias("IA__g_child_watch_source_new"), visibility("default")));
+
+#undef g_get_current_time 
+extern __typeof (g_get_current_time) g_get_current_time __attribute((alias("IA__g_get_current_time"), visibility("default")));
+
+#undef g_main_context_acquire 
+extern __typeof (g_main_context_acquire) g_main_context_acquire __attribute((alias("IA__g_main_context_acquire"), visibility("default")));
+
+#undef g_main_context_add_poll 
+extern __typeof (g_main_context_add_poll) g_main_context_add_poll __attribute((alias("IA__g_main_context_add_poll"), visibility("default")));
+
+#undef g_main_context_check 
+extern __typeof (g_main_context_check) g_main_context_check __attribute((alias("IA__g_main_context_check"), visibility("default")));
+
+#undef g_main_context_default 
+extern __typeof (g_main_context_default) g_main_context_default __attribute((alias("IA__g_main_context_default"), visibility("default")));
+
+#undef g_main_context_dispatch 
+extern __typeof (g_main_context_dispatch) g_main_context_dispatch __attribute((alias("IA__g_main_context_dispatch"), visibility("default")));
+
+#undef g_main_context_find_source_by_funcs_user_data 
+extern __typeof (g_main_context_find_source_by_funcs_user_data) g_main_context_find_source_by_funcs_user_data __attribute((alias("IA__g_main_context_find_source_by_funcs_user_data"), visibility("default")));
+
+#undef g_main_context_find_source_by_id 
+extern __typeof (g_main_context_find_source_by_id) g_main_context_find_source_by_id __attribute((alias("IA__g_main_context_find_source_by_id"), visibility("default")));
+
+#undef g_main_context_find_source_by_user_data 
+extern __typeof (g_main_context_find_source_by_user_data) g_main_context_find_source_by_user_data __attribute((alias("IA__g_main_context_find_source_by_user_data"), visibility("default")));
+
+#undef g_main_context_get_poll_func 
+extern __typeof (g_main_context_get_poll_func) g_main_context_get_poll_func __attribute((alias("IA__g_main_context_get_poll_func"), visibility("default")));
+
+#undef g_main_context_is_owner 
+extern __typeof (g_main_context_is_owner) g_main_context_is_owner __attribute((alias("IA__g_main_context_is_owner"), visibility("default")));
+
+#undef g_main_context_iteration 
+extern __typeof (g_main_context_iteration) g_main_context_iteration __attribute((alias("IA__g_main_context_iteration"), visibility("default")));
+
+#undef g_main_context_new 
+extern __typeof (g_main_context_new) g_main_context_new __attribute((alias("IA__g_main_context_new"), visibility("default")));
+
+#undef g_main_context_pending 
+extern __typeof (g_main_context_pending) g_main_context_pending __attribute((alias("IA__g_main_context_pending"), visibility("default")));
+
+#undef g_main_context_prepare 
+extern __typeof (g_main_context_prepare) g_main_context_prepare __attribute((alias("IA__g_main_context_prepare"), visibility("default")));
+
+#undef g_main_context_query 
+extern __typeof (g_main_context_query) g_main_context_query __attribute((alias("IA__g_main_context_query"), visibility("default")));
+
+#undef g_main_context_ref 
+extern __typeof (g_main_context_ref) g_main_context_ref __attribute((alias("IA__g_main_context_ref"), visibility("default")));
+
+#undef g_main_context_release 
+extern __typeof (g_main_context_release) g_main_context_release __attribute((alias("IA__g_main_context_release"), visibility("default")));
+
+#undef g_main_context_remove_poll 
+extern __typeof (g_main_context_remove_poll) g_main_context_remove_poll __attribute((alias("IA__g_main_context_remove_poll"), visibility("default")));
+
+#undef g_main_context_set_poll_func 
+extern __typeof (g_main_context_set_poll_func) g_main_context_set_poll_func __attribute((alias("IA__g_main_context_set_poll_func"), visibility("default")));
+
+#undef g_main_context_unref 
+extern __typeof (g_main_context_unref) g_main_context_unref __attribute((alias("IA__g_main_context_unref"), visibility("default")));
+
+#undef g_main_context_wait 
+extern __typeof (g_main_context_wait) g_main_context_wait __attribute((alias("IA__g_main_context_wait"), visibility("default")));
+
+#undef g_main_context_wakeup 
+extern __typeof (g_main_context_wakeup) g_main_context_wakeup __attribute((alias("IA__g_main_context_wakeup"), visibility("default")));
+
+#undef g_main_depth 
+extern __typeof (g_main_depth) g_main_depth __attribute((alias("IA__g_main_depth"), visibility("default")));
+
+#undef g_main_current_source 
+extern __typeof (g_main_current_source) g_main_current_source __attribute((alias("IA__g_main_current_source"), visibility("default")));
+
+#undef g_main_loop_get_context 
+extern __typeof (g_main_loop_get_context) g_main_loop_get_context __attribute((alias("IA__g_main_loop_get_context"), visibility("default")));
+
+#undef g_main_loop_is_running 
+extern __typeof (g_main_loop_is_running) g_main_loop_is_running __attribute((alias("IA__g_main_loop_is_running"), visibility("default")));
+
+#undef g_main_loop_new 
+extern __typeof (g_main_loop_new) g_main_loop_new __attribute((alias("IA__g_main_loop_new"), visibility("default")));
+
+#undef g_main_loop_quit 
+extern __typeof (g_main_loop_quit) g_main_loop_quit __attribute((alias("IA__g_main_loop_quit"), visibility("default")));
+
+#undef g_main_loop_ref 
+extern __typeof (g_main_loop_ref) g_main_loop_ref __attribute((alias("IA__g_main_loop_ref"), visibility("default")));
+
+#undef g_main_loop_run 
+extern __typeof (g_main_loop_run) g_main_loop_run __attribute((alias("IA__g_main_loop_run"), visibility("default")));
+
+#undef g_main_loop_unref 
+extern __typeof (g_main_loop_unref) g_main_loop_unref __attribute((alias("IA__g_main_loop_unref"), visibility("default")));
+
+#undef g_source_add_poll 
+extern __typeof (g_source_add_poll) g_source_add_poll __attribute((alias("IA__g_source_add_poll"), visibility("default")));
+
+#undef g_source_attach 
+extern __typeof (g_source_attach) g_source_attach __attribute((alias("IA__g_source_attach"), visibility("default")));
+
+#undef g_source_destroy 
+extern __typeof (g_source_destroy) g_source_destroy __attribute((alias("IA__g_source_destroy"), visibility("default")));
+
+#undef g_source_get_can_recurse 
+extern __typeof (g_source_get_can_recurse) g_source_get_can_recurse __attribute((alias("IA__g_source_get_can_recurse"), visibility("default")));
+
+#undef g_source_get_context 
+extern __typeof (g_source_get_context) g_source_get_context __attribute((alias("IA__g_source_get_context"), visibility("default")));
+
+#undef g_source_get_current_time 
+extern __typeof (g_source_get_current_time) g_source_get_current_time __attribute((alias("IA__g_source_get_current_time"), visibility("default")));
+
+#undef g_source_get_id 
+extern __typeof (g_source_get_id) g_source_get_id __attribute((alias("IA__g_source_get_id"), visibility("default")));
+
+#undef g_source_get_priority 
+extern __typeof (g_source_get_priority) g_source_get_priority __attribute((alias("IA__g_source_get_priority"), visibility("default")));
+
+#undef g_source_new 
+extern __typeof (g_source_new) g_source_new __attribute((alias("IA__g_source_new"), visibility("default")));
+
+#undef g_source_ref 
+extern __typeof (g_source_ref) g_source_ref __attribute((alias("IA__g_source_ref"), visibility("default")));
+
+#undef g_source_remove 
+extern __typeof (g_source_remove) g_source_remove __attribute((alias("IA__g_source_remove"), visibility("default")));
+
+#undef g_source_remove_by_funcs_user_data 
+extern __typeof (g_source_remove_by_funcs_user_data) g_source_remove_by_funcs_user_data __attribute((alias("IA__g_source_remove_by_funcs_user_data"), visibility("default")));
+
+#undef g_source_remove_by_user_data 
+extern __typeof (g_source_remove_by_user_data) g_source_remove_by_user_data __attribute((alias("IA__g_source_remove_by_user_data"), visibility("default")));
+
+#undef g_source_remove_poll 
+extern __typeof (g_source_remove_poll) g_source_remove_poll __attribute((alias("IA__g_source_remove_poll"), visibility("default")));
+
+#undef g_source_set_callback 
+extern __typeof (g_source_set_callback) g_source_set_callback __attribute((alias("IA__g_source_set_callback"), visibility("default")));
+
+#undef g_source_set_callback_indirect 
+extern __typeof (g_source_set_callback_indirect) g_source_set_callback_indirect __attribute((alias("IA__g_source_set_callback_indirect"), visibility("default")));
+
+#undef g_source_set_can_recurse 
+extern __typeof (g_source_set_can_recurse) g_source_set_can_recurse __attribute((alias("IA__g_source_set_can_recurse"), visibility("default")));
+
+#undef g_source_set_funcs 
+extern __typeof (g_source_set_funcs) g_source_set_funcs __attribute((alias("IA__g_source_set_funcs"), visibility("default")));
+
+#undef g_source_is_destroyed 
+extern __typeof (g_source_is_destroyed) g_source_is_destroyed __attribute((alias("IA__g_source_is_destroyed"), visibility("default")));
+
+#undef g_source_set_priority 
+extern __typeof (g_source_set_priority) g_source_set_priority __attribute((alias("IA__g_source_set_priority"), visibility("default")));
+
+#undef g_source_unref 
+extern __typeof (g_source_unref) g_source_unref __attribute((alias("IA__g_source_unref"), visibility("default")));
+
+#undef g_idle_add 
+extern __typeof (g_idle_add) g_idle_add __attribute((alias("IA__g_idle_add"), visibility("default")));
+
+#undef g_idle_add_full 
+extern __typeof (g_idle_add_full) g_idle_add_full __attribute((alias("IA__g_idle_add_full"), visibility("default")));
+
+#undef g_idle_remove_by_data 
+extern __typeof (g_idle_remove_by_data) g_idle_remove_by_data __attribute((alias("IA__g_idle_remove_by_data"), visibility("default")));
+
+#undef g_idle_source_new 
+extern __typeof (g_idle_source_new) g_idle_source_new __attribute((alias("IA__g_idle_source_new"), visibility("default")));
+
+#undef g_timeout_add 
+extern __typeof (g_timeout_add) g_timeout_add __attribute((alias("IA__g_timeout_add"), visibility("default")));
+
+#undef g_timeout_add_seconds 
+extern __typeof (g_timeout_add_seconds) g_timeout_add_seconds __attribute((alias("IA__g_timeout_add_seconds"), visibility("default")));
+
+#undef g_timeout_add_full 
+extern __typeof (g_timeout_add_full) g_timeout_add_full __attribute((alias("IA__g_timeout_add_full"), visibility("default")));
+
+#undef g_timeout_add_seconds_full 
+extern __typeof (g_timeout_add_seconds_full) g_timeout_add_seconds_full __attribute((alias("IA__g_timeout_add_seconds_full"), visibility("default")));
+
+#undef g_timeout_source_new 
+extern __typeof (g_timeout_source_new) g_timeout_source_new __attribute((alias("IA__g_timeout_source_new"), visibility("default")));
+
+#undef g_timeout_source_new_seconds 
+extern __typeof (g_timeout_source_new_seconds) g_timeout_source_new_seconds __attribute((alias("IA__g_timeout_source_new_seconds"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_MAPPED_FILE_H__)
+#if IN_FILE(__G_MAPPED_FILE_C__)
+#undef g_mapped_file_new 
+extern __typeof (g_mapped_file_new) g_mapped_file_new __attribute((alias("IA__g_mapped_file_new"), visibility("default")));
+
+#undef g_mapped_file_get_length 
+extern __typeof (g_mapped_file_get_length) g_mapped_file_get_length __attribute((alias("IA__g_mapped_file_get_length"), visibility("default")));
+
+#undef g_mapped_file_get_contents 
+extern __typeof (g_mapped_file_get_contents) g_mapped_file_get_contents __attribute((alias("IA__g_mapped_file_get_contents"), visibility("default")));
+
+#undef g_mapped_file_free 
+extern __typeof (g_mapped_file_free) g_mapped_file_free __attribute((alias("IA__g_mapped_file_free"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_MARKUP_H__)
+#if IN_FILE(__G_MARKUP_C__)
+#undef g_markup_error_quark 
+extern __typeof (g_markup_error_quark) g_markup_error_quark __attribute((alias("IA__g_markup_error_quark"), visibility("default")));
+
+#undef g_markup_escape_text 
+extern __typeof (g_markup_escape_text) g_markup_escape_text __attribute((alias("IA__g_markup_escape_text"), visibility("default")));
+
+#undef g_markup_parse_context_end_parse 
+extern __typeof (g_markup_parse_context_end_parse) g_markup_parse_context_end_parse __attribute((alias("IA__g_markup_parse_context_end_parse"), visibility("default")));
+
+#undef g_markup_parse_context_free 
+extern __typeof (g_markup_parse_context_free) g_markup_parse_context_free __attribute((alias("IA__g_markup_parse_context_free"), visibility("default")));
+
+#undef g_markup_parse_context_get_element 
+extern __typeof (g_markup_parse_context_get_element) g_markup_parse_context_get_element __attribute((alias("IA__g_markup_parse_context_get_element"), visibility("default")));
+
+#undef g_markup_parse_context_get_element_stack 
+extern __typeof (g_markup_parse_context_get_element_stack) g_markup_parse_context_get_element_stack __attribute((alias("IA__g_markup_parse_context_get_element_stack"), visibility("default")));
+
+#undef g_markup_parse_context_get_position 
+extern __typeof (g_markup_parse_context_get_position) g_markup_parse_context_get_position __attribute((alias("IA__g_markup_parse_context_get_position"), visibility("default")));
+
+#undef g_markup_parse_context_get_user_data 
+extern __typeof (g_markup_parse_context_get_user_data) g_markup_parse_context_get_user_data __attribute((alias("IA__g_markup_parse_context_get_user_data"), visibility("default")));
+
+#undef g_markup_parse_context_new 
+extern __typeof (g_markup_parse_context_new) g_markup_parse_context_new __attribute((alias("IA__g_markup_parse_context_new"), visibility("default")));
+
+#undef g_markup_parse_context_parse 
+extern __typeof (g_markup_parse_context_parse) g_markup_parse_context_parse __attribute((alias("IA__g_markup_parse_context_parse"), visibility("default")));
+
+#undef g_markup_parse_context_push 
+extern __typeof (g_markup_parse_context_push) g_markup_parse_context_push __attribute((alias("IA__g_markup_parse_context_push"), visibility("default")));
+
+#undef g_markup_parse_context_pop 
+extern __typeof (g_markup_parse_context_pop) g_markup_parse_context_pop __attribute((alias("IA__g_markup_parse_context_pop"), visibility("default")));
+
+#undef g_markup_printf_escaped 
+extern __typeof (g_markup_printf_escaped) g_markup_printf_escaped __attribute((alias("IA__g_markup_printf_escaped"), visibility("default")));
+
+#undef g_markup_vprintf_escaped 
+extern __typeof (g_markup_vprintf_escaped) g_markup_vprintf_escaped __attribute((alias("IA__g_markup_vprintf_escaped"), visibility("default")));
+
+#undef g_markup_collect_attributes 
+extern __typeof (g_markup_collect_attributes) g_markup_collect_attributes __attribute((alias("IA__g_markup_collect_attributes"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_MEM_H__)
+#if IN_FILE(__G_MEM_C__)
+#undef g_free 
+extern __typeof (g_free) g_free __attribute((alias("IA__g_free"), visibility("default")));
+
+#undef g_malloc 
+extern __typeof (g_malloc) g_malloc __attribute((alias("IA__g_malloc"), visibility("default")));
+
+#undef g_malloc0 
+extern __typeof (g_malloc0) g_malloc0 __attribute((alias("IA__g_malloc0"), visibility("default")));
+
+#undef g_mem_is_system_malloc 
+extern __typeof (g_mem_is_system_malloc) g_mem_is_system_malloc __attribute((alias("IA__g_mem_is_system_malloc"), visibility("default")));
+
+#undef g_mem_profile 
+extern __typeof (g_mem_profile) g_mem_profile __attribute((alias("IA__g_mem_profile"), visibility("default")));
+
+#undef g_mem_set_vtable 
+extern __typeof (g_mem_set_vtable) g_mem_set_vtable __attribute((alias("IA__g_mem_set_vtable"), visibility("default")));
+
+#undef g_realloc 
+extern __typeof (g_realloc) g_realloc __attribute((alias("IA__g_realloc"), visibility("default")));
+
+#undef g_try_malloc 
+extern __typeof (g_try_malloc) g_try_malloc __attribute((alias("IA__g_try_malloc"), visibility("default")));
+
+#undef g_try_malloc0 
+extern __typeof (g_try_malloc0) g_try_malloc0 __attribute((alias("IA__g_try_malloc0"), visibility("default")));
+
+#undef g_try_realloc 
+extern __typeof (g_try_realloc) g_try_realloc __attribute((alias("IA__g_try_realloc"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_allocator_free 
+extern __typeof (g_allocator_free) g_allocator_free __attribute((alias("IA__g_allocator_free"), visibility("default")));
+
+#undef g_allocator_new 
+extern __typeof (g_allocator_new) g_allocator_new __attribute((alias("IA__g_allocator_new"), visibility("default")));
+
+#undef g_mem_chunk_alloc 
+extern __typeof (g_mem_chunk_alloc) g_mem_chunk_alloc __attribute((alias("IA__g_mem_chunk_alloc"), visibility("default")));
+
+#undef g_mem_chunk_alloc0 
+extern __typeof (g_mem_chunk_alloc0) g_mem_chunk_alloc0 __attribute((alias("IA__g_mem_chunk_alloc0"), visibility("default")));
+
+#undef g_mem_chunk_clean 
+extern __typeof (g_mem_chunk_clean) g_mem_chunk_clean __attribute((alias("IA__g_mem_chunk_clean"), visibility("default")));
+
+#undef g_mem_chunk_destroy 
+extern __typeof (g_mem_chunk_destroy) g_mem_chunk_destroy __attribute((alias("IA__g_mem_chunk_destroy"), visibility("default")));
+
+#undef g_mem_chunk_free 
+extern __typeof (g_mem_chunk_free) g_mem_chunk_free __attribute((alias("IA__g_mem_chunk_free"), visibility("default")));
+
+#undef g_mem_chunk_info 
+extern __typeof (g_mem_chunk_info) g_mem_chunk_info __attribute((alias("IA__g_mem_chunk_info"), visibility("default")));
+
+#undef g_mem_chunk_new 
+extern __typeof (g_mem_chunk_new) g_mem_chunk_new __attribute((alias("IA__g_mem_chunk_new"), visibility("default")));
+
+#undef g_mem_chunk_print 
+extern __typeof (g_mem_chunk_print) g_mem_chunk_print __attribute((alias("IA__g_mem_chunk_print"), visibility("default")));
+
+#undef g_mem_chunk_reset 
+extern __typeof (g_mem_chunk_reset) g_mem_chunk_reset __attribute((alias("IA__g_mem_chunk_reset"), visibility("default")));
+
+#undef g_blow_chunks 
+extern __typeof (g_blow_chunks) g_blow_chunks __attribute((alias("IA__g_blow_chunks"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_SLICE_H__)
+#if IN_FILE(__G_SLICE_C__)
+#undef g_slice_alloc 
+extern __typeof (g_slice_alloc) g_slice_alloc __attribute((alias("IA__g_slice_alloc"), visibility("default")));
+
+#undef g_slice_alloc0 
+extern __typeof (g_slice_alloc0) g_slice_alloc0 __attribute((alias("IA__g_slice_alloc0"), visibility("default")));
+
+#undef g_slice_copy 
+extern __typeof (g_slice_copy) g_slice_copy __attribute((alias("IA__g_slice_copy"), visibility("default")));
+
+#undef g_slice_free1 
+extern __typeof (g_slice_free1) g_slice_free1 __attribute((alias("IA__g_slice_free1"), visibility("default")));
+
+#undef g_slice_free_chain_with_offset 
+extern __typeof (g_slice_free_chain_with_offset) g_slice_free_chain_with_offset __attribute((alias("IA__g_slice_free_chain_with_offset"), visibility("default")));
+
+#undef g_slice_set_config 
+extern __typeof (g_slice_set_config) g_slice_set_config __attribute((alias("IA__g_slice_set_config"), visibility("default")));
+
+#undef g_slice_get_config 
+extern __typeof (g_slice_get_config) g_slice_get_config __attribute((alias("IA__g_slice_get_config"), visibility("default")));
+
+#undef g_slice_get_config_state 
+extern __typeof (g_slice_get_config_state) g_slice_get_config_state __attribute((alias("IA__g_slice_get_config_state"), visibility("default")));
+
+#ifdef G_ENABLE_DEBUG
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_MESSAGES_H__)
+#if IN_FILE(__G_MESSAGES_C__)
+#undef g_printf_string_upper_bound 
+extern __typeof (g_printf_string_upper_bound) g_printf_string_upper_bound __attribute((alias("IA__g_printf_string_upper_bound"), visibility("default")));
+
+#undef g_log 
+extern __typeof (g_log) g_log __attribute((alias("IA__g_log"), visibility("default")));
+
+#undef g_log_default_handler 
+extern __typeof (g_log_default_handler) g_log_default_handler __attribute((alias("IA__g_log_default_handler"), visibility("default")));
+
+#undef g_log_remove_handler 
+extern __typeof (g_log_remove_handler) g_log_remove_handler __attribute((alias("IA__g_log_remove_handler"), visibility("default")));
+
+#undef g_log_set_always_fatal 
+extern __typeof (g_log_set_always_fatal) g_log_set_always_fatal __attribute((alias("IA__g_log_set_always_fatal"), visibility("default")));
+
+#undef g_log_set_default_handler 
+extern __typeof (g_log_set_default_handler) g_log_set_default_handler __attribute((alias("IA__g_log_set_default_handler"), visibility("default")));
+
+#undef g_log_set_fatal_mask 
+extern __typeof (g_log_set_fatal_mask) g_log_set_fatal_mask __attribute((alias("IA__g_log_set_fatal_mask"), visibility("default")));
+
+#undef g_log_set_handler 
+extern __typeof (g_log_set_handler) g_log_set_handler __attribute((alias("IA__g_log_set_handler"), visibility("default")));
+
+#undef g_logv 
+extern __typeof (g_logv) g_logv __attribute((alias("IA__g_logv"), visibility("default")));
+
+#undef g_return_if_fail_warning 
+extern __typeof (g_return_if_fail_warning) g_return_if_fail_warning __attribute((alias("IA__g_return_if_fail_warning"), visibility("default")));
+
+#undef g_warn_message 
+extern __typeof (g_warn_message) g_warn_message __attribute((alias("IA__g_warn_message"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_assert_warning 
+extern __typeof (g_assert_warning) g_assert_warning __attribute((alias("IA__g_assert_warning"), visibility("default")));
+
+#endif
+#undef g_print 
+extern __typeof (g_print) g_print __attribute((alias("IA__g_print"), visibility("default")));
+
+#undef g_printerr 
+extern __typeof (g_printerr) g_printerr __attribute((alias("IA__g_printerr"), visibility("default")));
+
+#undef g_set_printerr_handler 
+extern __typeof (g_set_printerr_handler) g_set_printerr_handler __attribute((alias("IA__g_set_printerr_handler"), visibility("default")));
+
+#undef g_set_print_handler 
+extern __typeof (g_set_print_handler) g_set_print_handler __attribute((alias("IA__g_set_print_handler"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_NODE_H__)
+#if IN_FILE(__G_NODE_C__)
+#undef g_node_child_index 
+extern __typeof (g_node_child_index) g_node_child_index __attribute((alias("IA__g_node_child_index"), visibility("default")));
+
+#undef g_node_child_position 
+extern __typeof (g_node_child_position) g_node_child_position __attribute((alias("IA__g_node_child_position"), visibility("default")));
+
+#undef g_node_children_foreach 
+extern __typeof (g_node_children_foreach) g_node_children_foreach __attribute((alias("IA__g_node_children_foreach"), visibility("default")));
+
+#undef g_node_copy 
+extern __typeof (g_node_copy) g_node_copy __attribute((alias("IA__g_node_copy"), visibility("default")));
+
+#undef g_node_copy_deep 
+extern __typeof (g_node_copy_deep) g_node_copy_deep __attribute((alias("IA__g_node_copy_deep"), visibility("default")));
+
+#undef g_node_depth 
+extern __typeof (g_node_depth) g_node_depth __attribute((alias("IA__g_node_depth"), visibility("default")));
+
+#undef g_node_destroy 
+extern __typeof (g_node_destroy) g_node_destroy __attribute((alias("IA__g_node_destroy"), visibility("default")));
+
+#undef g_node_find 
+extern __typeof (g_node_find) g_node_find __attribute((alias("IA__g_node_find"), visibility("default")));
+
+#undef g_node_find_child 
+extern __typeof (g_node_find_child) g_node_find_child __attribute((alias("IA__g_node_find_child"), visibility("default")));
+
+#undef g_node_first_sibling 
+extern __typeof (g_node_first_sibling) g_node_first_sibling __attribute((alias("IA__g_node_first_sibling"), visibility("default")));
+
+#undef g_node_get_root 
+extern __typeof (g_node_get_root) g_node_get_root __attribute((alias("IA__g_node_get_root"), visibility("default")));
+
+#undef g_node_insert 
+extern __typeof (g_node_insert) g_node_insert __attribute((alias("IA__g_node_insert"), visibility("default")));
+
+#undef g_node_insert_after 
+extern __typeof (g_node_insert_after) g_node_insert_after __attribute((alias("IA__g_node_insert_after"), visibility("default")));
+
+#undef g_node_insert_before 
+extern __typeof (g_node_insert_before) g_node_insert_before __attribute((alias("IA__g_node_insert_before"), visibility("default")));
+
+#undef g_node_is_ancestor 
+extern __typeof (g_node_is_ancestor) g_node_is_ancestor __attribute((alias("IA__g_node_is_ancestor"), visibility("default")));
+
+#undef g_node_last_child 
+extern __typeof (g_node_last_child) g_node_last_child __attribute((alias("IA__g_node_last_child"), visibility("default")));
+
+#undef g_node_last_sibling 
+extern __typeof (g_node_last_sibling) g_node_last_sibling __attribute((alias("IA__g_node_last_sibling"), visibility("default")));
+
+#undef g_node_max_height 
+extern __typeof (g_node_max_height) g_node_max_height __attribute((alias("IA__g_node_max_height"), visibility("default")));
+
+#undef g_node_n_children 
+extern __typeof (g_node_n_children) g_node_n_children __attribute((alias("IA__g_node_n_children"), visibility("default")));
+
+#undef g_node_new 
+extern __typeof (g_node_new) g_node_new __attribute((alias("IA__g_node_new"), visibility("default")));
+
+#undef g_node_n_nodes 
+extern __typeof (g_node_n_nodes) g_node_n_nodes __attribute((alias("IA__g_node_n_nodes"), visibility("default")));
+
+#undef g_node_nth_child 
+extern __typeof (g_node_nth_child) g_node_nth_child __attribute((alias("IA__g_node_nth_child"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_node_pop_allocator 
+extern __typeof (g_node_pop_allocator) g_node_pop_allocator __attribute((alias("IA__g_node_pop_allocator"), visibility("default")));
+
+#endif
+#undef g_node_prepend 
+extern __typeof (g_node_prepend) g_node_prepend __attribute((alias("IA__g_node_prepend"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_node_push_allocator 
+extern __typeof (g_node_push_allocator) g_node_push_allocator __attribute((alias("IA__g_node_push_allocator"), visibility("default")));
+
+#endif
+#undef g_node_reverse_children 
+extern __typeof (g_node_reverse_children) g_node_reverse_children __attribute((alias("IA__g_node_reverse_children"), visibility("default")));
+
+#undef g_node_traverse 
+extern __typeof (g_node_traverse) g_node_traverse __attribute((alias("IA__g_node_traverse"), visibility("default")));
+
+#undef g_node_unlink 
+extern __typeof (g_node_unlink) g_node_unlink __attribute((alias("IA__g_node_unlink"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_OPTION_H__)
+#if IN_FILE(__G_OPTION_C__)
+#undef g_option_context_add_group 
+extern __typeof (g_option_context_add_group) g_option_context_add_group __attribute((alias("IA__g_option_context_add_group"), visibility("default")));
+
+#undef g_option_context_add_main_entries 
+extern __typeof (g_option_context_add_main_entries) g_option_context_add_main_entries __attribute((alias("IA__g_option_context_add_main_entries"), visibility("default")));
+
+#undef g_option_error_quark 
+extern __typeof (g_option_error_quark) g_option_error_quark __attribute((alias("IA__g_option_error_quark"), visibility("default")));
+
+#undef g_option_context_free 
+extern __typeof (g_option_context_free) g_option_context_free __attribute((alias("IA__g_option_context_free"), visibility("default")));
+
+#undef g_option_context_get_description 
+extern __typeof (g_option_context_get_description) g_option_context_get_description __attribute((alias("IA__g_option_context_get_description"), visibility("default")));
+
+#undef g_option_context_get_help_enabled 
+extern __typeof (g_option_context_get_help_enabled) g_option_context_get_help_enabled __attribute((alias("IA__g_option_context_get_help_enabled"), visibility("default")));
+
+#undef g_option_context_get_ignore_unknown_options 
+extern __typeof (g_option_context_get_ignore_unknown_options) g_option_context_get_ignore_unknown_options __attribute((alias("IA__g_option_context_get_ignore_unknown_options"), visibility("default")));
+
+#undef g_option_context_get_main_group 
+extern __typeof (g_option_context_get_main_group) g_option_context_get_main_group __attribute((alias("IA__g_option_context_get_main_group"), visibility("default")));
+
+#undef g_option_context_get_summary 
+extern __typeof (g_option_context_get_summary) g_option_context_get_summary __attribute((alias("IA__g_option_context_get_summary"), visibility("default")));
+
+#undef g_option_context_new 
+extern __typeof (g_option_context_new) g_option_context_new __attribute((alias("IA__g_option_context_new"), visibility("default")));
+
+#undef g_option_context_parse 
+extern __typeof (g_option_context_parse) g_option_context_parse __attribute((alias("IA__g_option_context_parse"), visibility("default")));
+
+#undef g_option_context_set_description 
+extern __typeof (g_option_context_set_description) g_option_context_set_description __attribute((alias("IA__g_option_context_set_description"), visibility("default")));
+
+#undef g_option_context_set_help_enabled 
+extern __typeof (g_option_context_set_help_enabled) g_option_context_set_help_enabled __attribute((alias("IA__g_option_context_set_help_enabled"), visibility("default")));
+
+#undef g_option_context_set_ignore_unknown_options 
+extern __typeof (g_option_context_set_ignore_unknown_options) g_option_context_set_ignore_unknown_options __attribute((alias("IA__g_option_context_set_ignore_unknown_options"), visibility("default")));
+
+#undef g_option_context_set_main_group 
+extern __typeof (g_option_context_set_main_group) g_option_context_set_main_group __attribute((alias("IA__g_option_context_set_main_group"), visibility("default")));
+
+#undef g_option_context_set_summary 
+extern __typeof (g_option_context_set_summary) g_option_context_set_summary __attribute((alias("IA__g_option_context_set_summary"), visibility("default")));
+
+#undef g_option_context_set_translate_func 
+extern __typeof (g_option_context_set_translate_func) g_option_context_set_translate_func __attribute((alias("IA__g_option_context_set_translate_func"), visibility("default")));
+
+#undef g_option_context_set_translation_domain 
+extern __typeof (g_option_context_set_translation_domain) g_option_context_set_translation_domain __attribute((alias("IA__g_option_context_set_translation_domain"), visibility("default")));
+
+#undef g_option_context_get_help 
+extern __typeof (g_option_context_get_help) g_option_context_get_help __attribute((alias("IA__g_option_context_get_help"), visibility("default")));
+
+#undef g_option_group_add_entries 
+extern __typeof (g_option_group_add_entries) g_option_group_add_entries __attribute((alias("IA__g_option_group_add_entries"), visibility("default")));
+
+#undef g_option_group_free 
+extern __typeof (g_option_group_free) g_option_group_free __attribute((alias("IA__g_option_group_free"), visibility("default")));
+
+#undef g_option_group_new 
+extern __typeof (g_option_group_new) g_option_group_new __attribute((alias("IA__g_option_group_new"), visibility("default")));
+
+#undef g_option_group_set_error_hook 
+extern __typeof (g_option_group_set_error_hook) g_option_group_set_error_hook __attribute((alias("IA__g_option_group_set_error_hook"), visibility("default")));
+
+#undef g_option_group_set_parse_hooks 
+extern __typeof (g_option_group_set_parse_hooks) g_option_group_set_parse_hooks __attribute((alias("IA__g_option_group_set_parse_hooks"), visibility("default")));
+
+#undef g_option_group_set_translate_func 
+extern __typeof (g_option_group_set_translate_func) g_option_group_set_translate_func __attribute((alias("IA__g_option_group_set_translate_func"), visibility("default")));
+
+#undef g_option_group_set_translation_domain 
+extern __typeof (g_option_group_set_translation_domain) g_option_group_set_translation_domain __attribute((alias("IA__g_option_group_set_translation_domain"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_PATTERN_H__)
+#if IN_FILE(__G_PATTERN_C__)
+#undef g_pattern_match 
+extern __typeof (g_pattern_match) g_pattern_match __attribute((alias("IA__g_pattern_match"), visibility("default")));
+
+#undef g_pattern_match_simple 
+extern __typeof (g_pattern_match_simple) g_pattern_match_simple __attribute((alias("IA__g_pattern_match_simple"), visibility("default")));
+
+#undef g_pattern_match_string 
+extern __typeof (g_pattern_match_string) g_pattern_match_string __attribute((alias("IA__g_pattern_match_string"), visibility("default")));
+
+#undef g_pattern_spec_equal 
+extern __typeof (g_pattern_spec_equal) g_pattern_spec_equal __attribute((alias("IA__g_pattern_spec_equal"), visibility("default")));
+
+#undef g_pattern_spec_free 
+extern __typeof (g_pattern_spec_free) g_pattern_spec_free __attribute((alias("IA__g_pattern_spec_free"), visibility("default")));
+
+#undef g_pattern_spec_new 
+extern __typeof (g_pattern_spec_new) g_pattern_spec_new __attribute((alias("IA__g_pattern_spec_new"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_POLL_H__)
+#if IN_FILE(__G_POLL_C__)
+#undef g_poll 
+extern __typeof (g_poll) g_poll __attribute((alias("IA__g_poll"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_PRIMES_H__)
+#if IN_FILE(__G_PRIMES_C__)
+#undef g_spaced_primes_closest 
+extern __typeof (g_spaced_primes_closest) g_spaced_primes_closest __attribute((alias("IA__g_spaced_primes_closest"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_PRINTF_H__)
+#if IN_FILE(__G_PRINTF_C__)
+#undef g_fprintf 
+extern __typeof (g_fprintf) g_fprintf __attribute((alias("IA__g_fprintf"), visibility("default")));
+
+#undef g_printf 
+extern __typeof (g_printf) g_printf __attribute((alias("IA__g_printf"), visibility("default")));
+
+#undef g_sprintf 
+extern __typeof (g_sprintf) g_sprintf __attribute((alias("IA__g_sprintf"), visibility("default")));
+
+#undef g_vasprintf 
+extern __typeof (g_vasprintf) g_vasprintf __attribute((alias("IA__g_vasprintf"), visibility("default")));
+
+#undef g_vfprintf 
+extern __typeof (g_vfprintf) g_vfprintf __attribute((alias("IA__g_vfprintf"), visibility("default")));
+
+#undef g_vprintf 
+extern __typeof (g_vprintf) g_vprintf __attribute((alias("IA__g_vprintf"), visibility("default")));
+
+#undef g_vsprintf 
+extern __typeof (g_vsprintf) g_vsprintf __attribute((alias("IA__g_vsprintf"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_UTILS_H__)
+#if IN_FILE(__G_PRINTF_C__)
+#undef g_snprintf 
+extern __typeof (g_snprintf) g_snprintf __attribute((alias("IA__g_snprintf"), visibility("default")));
+
+#undef g_vsnprintf 
+extern __typeof (g_vsnprintf) g_vsnprintf __attribute((alias("IA__g_vsnprintf"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_QSORT_H__)
+#if IN_FILE(__G_QSORT_C__)
+#undef g_qsort_with_data 
+extern __typeof (g_qsort_with_data) g_qsort_with_data __attribute((alias("IA__g_qsort_with_data"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_QUEUE_H__)
+#if IN_FILE(__G_QUEUE_C__)
+#undef g_queue_clear 
+extern __typeof (g_queue_clear) g_queue_clear __attribute((alias("IA__g_queue_clear"), visibility("default")));
+
+#undef g_queue_copy 
+extern __typeof (g_queue_copy) g_queue_copy __attribute((alias("IA__g_queue_copy"), visibility("default")));
+
+#undef g_queue_delete_link 
+extern __typeof (g_queue_delete_link) g_queue_delete_link __attribute((alias("IA__g_queue_delete_link"), visibility("default")));
+
+#undef g_queue_find 
+extern __typeof (g_queue_find) g_queue_find __attribute((alias("IA__g_queue_find"), visibility("default")));
+
+#undef g_queue_find_custom 
+extern __typeof (g_queue_find_custom) g_queue_find_custom __attribute((alias("IA__g_queue_find_custom"), visibility("default")));
+
+#undef g_queue_foreach 
+extern __typeof (g_queue_foreach) g_queue_foreach __attribute((alias("IA__g_queue_foreach"), visibility("default")));
+
+#undef g_queue_free 
+extern __typeof (g_queue_free) g_queue_free __attribute((alias("IA__g_queue_free"), visibility("default")));
+
+#undef g_queue_get_length 
+extern __typeof (g_queue_get_length) g_queue_get_length __attribute((alias("IA__g_queue_get_length"), visibility("default")));
+
+#undef g_queue_index 
+extern __typeof (g_queue_index) g_queue_index __attribute((alias("IA__g_queue_index"), visibility("default")));
+
+#undef g_queue_init 
+extern __typeof (g_queue_init) g_queue_init __attribute((alias("IA__g_queue_init"), visibility("default")));
+
+#undef g_queue_insert_after 
+extern __typeof (g_queue_insert_after) g_queue_insert_after __attribute((alias("IA__g_queue_insert_after"), visibility("default")));
+
+#undef g_queue_insert_before 
+extern __typeof (g_queue_insert_before) g_queue_insert_before __attribute((alias("IA__g_queue_insert_before"), visibility("default")));
+
+#undef g_queue_insert_sorted 
+extern __typeof (g_queue_insert_sorted) g_queue_insert_sorted __attribute((alias("IA__g_queue_insert_sorted"), visibility("default")));
+
+#undef g_queue_is_empty 
+extern __typeof (g_queue_is_empty) g_queue_is_empty __attribute((alias("IA__g_queue_is_empty"), visibility("default")));
+
+#undef g_queue_link_index 
+extern __typeof (g_queue_link_index) g_queue_link_index __attribute((alias("IA__g_queue_link_index"), visibility("default")));
+
+#undef g_queue_new 
+extern __typeof (g_queue_new) g_queue_new __attribute((alias("IA__g_queue_new"), visibility("default")));
+
+#undef g_queue_peek_head 
+extern __typeof (g_queue_peek_head) g_queue_peek_head __attribute((alias("IA__g_queue_peek_head"), visibility("default")));
+
+#undef g_queue_peek_head_link 
+extern __typeof (g_queue_peek_head_link) g_queue_peek_head_link __attribute((alias("IA__g_queue_peek_head_link"), visibility("default")));
+
+#undef g_queue_peek_nth 
+extern __typeof (g_queue_peek_nth) g_queue_peek_nth __attribute((alias("IA__g_queue_peek_nth"), visibility("default")));
+
+#undef g_queue_peek_nth_link 
+extern __typeof (g_queue_peek_nth_link) g_queue_peek_nth_link __attribute((alias("IA__g_queue_peek_nth_link"), visibility("default")));
+
+#undef g_queue_peek_tail 
+extern __typeof (g_queue_peek_tail) g_queue_peek_tail __attribute((alias("IA__g_queue_peek_tail"), visibility("default")));
+
+#undef g_queue_peek_tail_link 
+extern __typeof (g_queue_peek_tail_link) g_queue_peek_tail_link __attribute((alias("IA__g_queue_peek_tail_link"), visibility("default")));
+
+#undef g_queue_pop_head 
+extern __typeof (g_queue_pop_head) g_queue_pop_head __attribute((alias("IA__g_queue_pop_head"), visibility("default")));
+
+#undef g_queue_pop_head_link 
+extern __typeof (g_queue_pop_head_link) g_queue_pop_head_link __attribute((alias("IA__g_queue_pop_head_link"), visibility("default")));
+
+#undef g_queue_pop_nth 
+extern __typeof (g_queue_pop_nth) g_queue_pop_nth __attribute((alias("IA__g_queue_pop_nth"), visibility("default")));
+
+#undef g_queue_pop_nth_link 
+extern __typeof (g_queue_pop_nth_link) g_queue_pop_nth_link __attribute((alias("IA__g_queue_pop_nth_link"), visibility("default")));
+
+#undef g_queue_pop_tail 
+extern __typeof (g_queue_pop_tail) g_queue_pop_tail __attribute((alias("IA__g_queue_pop_tail"), visibility("default")));
+
+#undef g_queue_pop_tail_link 
+extern __typeof (g_queue_pop_tail_link) g_queue_pop_tail_link __attribute((alias("IA__g_queue_pop_tail_link"), visibility("default")));
+
+#undef g_queue_push_head 
+extern __typeof (g_queue_push_head) g_queue_push_head __attribute((alias("IA__g_queue_push_head"), visibility("default")));
+
+#undef g_queue_push_head_link 
+extern __typeof (g_queue_push_head_link) g_queue_push_head_link __attribute((alias("IA__g_queue_push_head_link"), visibility("default")));
+
+#undef g_queue_push_nth 
+extern __typeof (g_queue_push_nth) g_queue_push_nth __attribute((alias("IA__g_queue_push_nth"), visibility("default")));
+
+#undef g_queue_push_nth_link 
+extern __typeof (g_queue_push_nth_link) g_queue_push_nth_link __attribute((alias("IA__g_queue_push_nth_link"), visibility("default")));
+
+#undef g_queue_push_tail 
+extern __typeof (g_queue_push_tail) g_queue_push_tail __attribute((alias("IA__g_queue_push_tail"), visibility("default")));
+
+#undef g_queue_push_tail_link 
+extern __typeof (g_queue_push_tail_link) g_queue_push_tail_link __attribute((alias("IA__g_queue_push_tail_link"), visibility("default")));
+
+#undef g_queue_remove 
+extern __typeof (g_queue_remove) g_queue_remove __attribute((alias("IA__g_queue_remove"), visibility("default")));
+
+#undef g_queue_remove_all 
+extern __typeof (g_queue_remove_all) g_queue_remove_all __attribute((alias("IA__g_queue_remove_all"), visibility("default")));
+
+#undef g_queue_reverse 
+extern __typeof (g_queue_reverse) g_queue_reverse __attribute((alias("IA__g_queue_reverse"), visibility("default")));
+
+#undef g_queue_sort 
+extern __typeof (g_queue_sort) g_queue_sort __attribute((alias("IA__g_queue_sort"), visibility("default")));
+
+#undef g_queue_unlink 
+extern __typeof (g_queue_unlink) g_queue_unlink __attribute((alias("IA__g_queue_unlink"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_RAND_H__)
+#if IN_FILE(__G_RAND_C__)
+#undef g_rand_copy 
+extern __typeof (g_rand_copy) g_rand_copy __attribute((alias("IA__g_rand_copy"), visibility("default")));
+
+#undef g_rand_double 
+extern __typeof (g_rand_double) g_rand_double __attribute((alias("IA__g_rand_double"), visibility("default")));
+
+#undef g_rand_double_range 
+extern __typeof (g_rand_double_range) g_rand_double_range __attribute((alias("IA__g_rand_double_range"), visibility("default")));
+
+#undef g_rand_free 
+extern __typeof (g_rand_free) g_rand_free __attribute((alias("IA__g_rand_free"), visibility("default")));
+
+#undef g_rand_int 
+extern __typeof (g_rand_int) g_rand_int __attribute((alias("IA__g_rand_int"), visibility("default")));
+
+#undef g_rand_int_range 
+extern __typeof (g_rand_int_range) g_rand_int_range __attribute((alias("IA__g_rand_int_range"), visibility("default")));
+
+#undef g_rand_new 
+extern __typeof (g_rand_new) g_rand_new __attribute((alias("IA__g_rand_new"), visibility("default")));
+
+#undef g_rand_new_with_seed 
+extern __typeof (g_rand_new_with_seed) g_rand_new_with_seed __attribute((alias("IA__g_rand_new_with_seed"), visibility("default")));
+
+#undef g_rand_new_with_seed_array 
+extern __typeof (g_rand_new_with_seed_array) g_rand_new_with_seed_array __attribute((alias("IA__g_rand_new_with_seed_array"), visibility("default")));
+
+#undef g_random_double 
+extern __typeof (g_random_double) g_random_double __attribute((alias("IA__g_random_double"), visibility("default")));
+
+#undef g_random_double_range 
+extern __typeof (g_random_double_range) g_random_double_range __attribute((alias("IA__g_random_double_range"), visibility("default")));
+
+#undef g_random_int 
+extern __typeof (g_random_int) g_random_int __attribute((alias("IA__g_random_int"), visibility("default")));
+
+#undef g_random_int_range 
+extern __typeof (g_random_int_range) g_random_int_range __attribute((alias("IA__g_random_int_range"), visibility("default")));
+
+#undef g_random_set_seed 
+extern __typeof (g_random_set_seed) g_random_set_seed __attribute((alias("IA__g_random_set_seed"), visibility("default")));
+
+#undef g_rand_set_seed 
+extern __typeof (g_rand_set_seed) g_rand_set_seed __attribute((alias("IA__g_rand_set_seed"), visibility("default")));
+
+#undef g_rand_set_seed_array 
+extern __typeof (g_rand_set_seed_array) g_rand_set_seed_array __attribute((alias("IA__g_rand_set_seed_array"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_REL_H__)
+#if IN_FILE(__G_REL_C__)
+#undef g_relation_count 
+extern __typeof (g_relation_count) g_relation_count __attribute((alias("IA__g_relation_count"), visibility("default")));
+
+#undef g_relation_delete 
+extern __typeof (g_relation_delete) g_relation_delete __attribute((alias("IA__g_relation_delete"), visibility("default")));
+
+#undef g_relation_destroy 
+extern __typeof (g_relation_destroy) g_relation_destroy __attribute((alias("IA__g_relation_destroy"), visibility("default")));
+
+#undef g_relation_exists 
+extern __typeof (g_relation_exists) g_relation_exists __attribute((alias("IA__g_relation_exists"), visibility("default")));
+
+#undef g_relation_index 
+extern __typeof (g_relation_index) g_relation_index __attribute((alias("IA__g_relation_index"), visibility("default")));
+
+#undef g_relation_insert 
+extern __typeof (g_relation_insert) g_relation_insert __attribute((alias("IA__g_relation_insert"), visibility("default")));
+
+#undef g_relation_new 
+extern __typeof (g_relation_new) g_relation_new __attribute((alias("IA__g_relation_new"), visibility("default")));
+
+#undef g_relation_print 
+extern __typeof (g_relation_print) g_relation_print __attribute((alias("IA__g_relation_print"), visibility("default")));
+
+#undef g_relation_select 
+extern __typeof (g_relation_select) g_relation_select __attribute((alias("IA__g_relation_select"), visibility("default")));
+
+#undef g_tuples_destroy 
+extern __typeof (g_tuples_destroy) g_tuples_destroy __attribute((alias("IA__g_tuples_destroy"), visibility("default")));
+
+#undef g_tuples_index 
+extern __typeof (g_tuples_index) g_tuples_index __attribute((alias("IA__g_tuples_index"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_SCANNER_H__)
+#if IN_FILE(__G_SCANNER_C__)
+#undef g_scanner_cur_line 
+extern __typeof (g_scanner_cur_line) g_scanner_cur_line __attribute((alias("IA__g_scanner_cur_line"), visibility("default")));
+
+#undef g_scanner_cur_position 
+extern __typeof (g_scanner_cur_position) g_scanner_cur_position __attribute((alias("IA__g_scanner_cur_position"), visibility("default")));
+
+#undef g_scanner_cur_token 
+extern __typeof (g_scanner_cur_token) g_scanner_cur_token __attribute((alias("IA__g_scanner_cur_token"), visibility("default")));
+
+#undef g_scanner_cur_value 
+extern __typeof (g_scanner_cur_value) g_scanner_cur_value __attribute((alias("IA__g_scanner_cur_value"), visibility("default")));
+
+#undef g_scanner_destroy 
+extern __typeof (g_scanner_destroy) g_scanner_destroy __attribute((alias("IA__g_scanner_destroy"), visibility("default")));
+
+#undef g_scanner_eof 
+extern __typeof (g_scanner_eof) g_scanner_eof __attribute((alias("IA__g_scanner_eof"), visibility("default")));
+
+#undef g_scanner_error 
+extern __typeof (g_scanner_error) g_scanner_error __attribute((alias("IA__g_scanner_error"), visibility("default")));
+
+#undef g_scanner_get_next_token 
+extern __typeof (g_scanner_get_next_token) g_scanner_get_next_token __attribute((alias("IA__g_scanner_get_next_token"), visibility("default")));
+
+#undef g_scanner_input_file 
+extern __typeof (g_scanner_input_file) g_scanner_input_file __attribute((alias("IA__g_scanner_input_file"), visibility("default")));
+
+#undef g_scanner_input_text 
+extern __typeof (g_scanner_input_text) g_scanner_input_text __attribute((alias("IA__g_scanner_input_text"), visibility("default")));
+
+#undef g_scanner_lookup_symbol 
+extern __typeof (g_scanner_lookup_symbol) g_scanner_lookup_symbol __attribute((alias("IA__g_scanner_lookup_symbol"), visibility("default")));
+
+#undef g_scanner_new 
+extern __typeof (g_scanner_new) g_scanner_new __attribute((alias("IA__g_scanner_new"), visibility("default")));
+
+#undef g_scanner_peek_next_token 
+extern __typeof (g_scanner_peek_next_token) g_scanner_peek_next_token __attribute((alias("IA__g_scanner_peek_next_token"), visibility("default")));
+
+#undef g_scanner_scope_add_symbol 
+extern __typeof (g_scanner_scope_add_symbol) g_scanner_scope_add_symbol __attribute((alias("IA__g_scanner_scope_add_symbol"), visibility("default")));
+
+#undef g_scanner_scope_foreach_symbol 
+extern __typeof (g_scanner_scope_foreach_symbol) g_scanner_scope_foreach_symbol __attribute((alias("IA__g_scanner_scope_foreach_symbol"), visibility("default")));
+
+#undef g_scanner_scope_lookup_symbol 
+extern __typeof (g_scanner_scope_lookup_symbol) g_scanner_scope_lookup_symbol __attribute((alias("IA__g_scanner_scope_lookup_symbol"), visibility("default")));
+
+#undef g_scanner_scope_remove_symbol 
+extern __typeof (g_scanner_scope_remove_symbol) g_scanner_scope_remove_symbol __attribute((alias("IA__g_scanner_scope_remove_symbol"), visibility("default")));
+
+#undef g_scanner_set_scope 
+extern __typeof (g_scanner_set_scope) g_scanner_set_scope __attribute((alias("IA__g_scanner_set_scope"), visibility("default")));
+
+#undef g_scanner_sync_file_offset 
+extern __typeof (g_scanner_sync_file_offset) g_scanner_sync_file_offset __attribute((alias("IA__g_scanner_sync_file_offset"), visibility("default")));
+
+#undef g_scanner_unexp_token 
+extern __typeof (g_scanner_unexp_token) g_scanner_unexp_token __attribute((alias("IA__g_scanner_unexp_token"), visibility("default")));
+
+#undef g_scanner_warn 
+extern __typeof (g_scanner_warn) g_scanner_warn __attribute((alias("IA__g_scanner_warn"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_SEQUENCE_H__)
+#if IN_FILE(__G_SEQUENCE_C__)
+#undef g_sequence_new 
+extern __typeof (g_sequence_new) g_sequence_new __attribute((alias("IA__g_sequence_new"), visibility("default")));
+
+#undef g_sequence_free 
+extern __typeof (g_sequence_free) g_sequence_free __attribute((alias("IA__g_sequence_free"), visibility("default")));
+
+#undef g_sequence_get_length 
+extern __typeof (g_sequence_get_length) g_sequence_get_length __attribute((alias("IA__g_sequence_get_length"), visibility("default")));
+
+#undef g_sequence_foreach 
+extern __typeof (g_sequence_foreach) g_sequence_foreach __attribute((alias("IA__g_sequence_foreach"), visibility("default")));
+
+#undef g_sequence_foreach_range 
+extern __typeof (g_sequence_foreach_range) g_sequence_foreach_range __attribute((alias("IA__g_sequence_foreach_range"), visibility("default")));
+
+#undef g_sequence_sort 
+extern __typeof (g_sequence_sort) g_sequence_sort __attribute((alias("IA__g_sequence_sort"), visibility("default")));
+
+#undef g_sequence_sort_iter 
+extern __typeof (g_sequence_sort_iter) g_sequence_sort_iter __attribute((alias("IA__g_sequence_sort_iter"), visibility("default")));
+
+#undef g_sequence_get_begin_iter 
+extern __typeof (g_sequence_get_begin_iter) g_sequence_get_begin_iter __attribute((alias("IA__g_sequence_get_begin_iter"), visibility("default")));
+
+#undef g_sequence_get_end_iter 
+extern __typeof (g_sequence_get_end_iter) g_sequence_get_end_iter __attribute((alias("IA__g_sequence_get_end_iter"), visibility("default")));
+
+#undef g_sequence_get_iter_at_pos 
+extern __typeof (g_sequence_get_iter_at_pos) g_sequence_get_iter_at_pos __attribute((alias("IA__g_sequence_get_iter_at_pos"), visibility("default")));
+
+#undef g_sequence_append 
+extern __typeof (g_sequence_append) g_sequence_append __attribute((alias("IA__g_sequence_append"), visibility("default")));
+
+#undef g_sequence_prepend 
+extern __typeof (g_sequence_prepend) g_sequence_prepend __attribute((alias("IA__g_sequence_prepend"), visibility("default")));
+
+#undef g_sequence_insert_before 
+extern __typeof (g_sequence_insert_before) g_sequence_insert_before __attribute((alias("IA__g_sequence_insert_before"), visibility("default")));
+
+#undef g_sequence_move 
+extern __typeof (g_sequence_move) g_sequence_move __attribute((alias("IA__g_sequence_move"), visibility("default")));
+
+#undef g_sequence_swap 
+extern __typeof (g_sequence_swap) g_sequence_swap __attribute((alias("IA__g_sequence_swap"), visibility("default")));
+
+#undef g_sequence_insert_sorted 
+extern __typeof (g_sequence_insert_sorted) g_sequence_insert_sorted __attribute((alias("IA__g_sequence_insert_sorted"), visibility("default")));
+
+#undef g_sequence_insert_sorted_iter 
+extern __typeof (g_sequence_insert_sorted_iter) g_sequence_insert_sorted_iter __attribute((alias("IA__g_sequence_insert_sorted_iter"), visibility("default")));
+
+#undef g_sequence_sort_changed 
+extern __typeof (g_sequence_sort_changed) g_sequence_sort_changed __attribute((alias("IA__g_sequence_sort_changed"), visibility("default")));
+
+#undef g_sequence_sort_changed_iter 
+extern __typeof (g_sequence_sort_changed_iter) g_sequence_sort_changed_iter __attribute((alias("IA__g_sequence_sort_changed_iter"), visibility("default")));
+
+#undef g_sequence_remove 
+extern __typeof (g_sequence_remove) g_sequence_remove __attribute((alias("IA__g_sequence_remove"), visibility("default")));
+
+#undef g_sequence_remove_range 
+extern __typeof (g_sequence_remove_range) g_sequence_remove_range __attribute((alias("IA__g_sequence_remove_range"), visibility("default")));
+
+#undef g_sequence_move_range 
+extern __typeof (g_sequence_move_range) g_sequence_move_range __attribute((alias("IA__g_sequence_move_range"), visibility("default")));
+
+#undef g_sequence_search 
+extern __typeof (g_sequence_search) g_sequence_search __attribute((alias("IA__g_sequence_search"), visibility("default")));
+
+#undef g_sequence_search_iter 
+extern __typeof (g_sequence_search_iter) g_sequence_search_iter __attribute((alias("IA__g_sequence_search_iter"), visibility("default")));
+
+#undef g_sequence_get 
+extern __typeof (g_sequence_get) g_sequence_get __attribute((alias("IA__g_sequence_get"), visibility("default")));
+
+#undef g_sequence_set 
+extern __typeof (g_sequence_set) g_sequence_set __attribute((alias("IA__g_sequence_set"), visibility("default")));
+
+#undef g_sequence_iter_is_begin 
+extern __typeof (g_sequence_iter_is_begin) g_sequence_iter_is_begin __attribute((alias("IA__g_sequence_iter_is_begin"), visibility("default")));
+
+#undef g_sequence_iter_is_end 
+extern __typeof (g_sequence_iter_is_end) g_sequence_iter_is_end __attribute((alias("IA__g_sequence_iter_is_end"), visibility("default")));
+
+#undef g_sequence_iter_next 
+extern __typeof (g_sequence_iter_next) g_sequence_iter_next __attribute((alias("IA__g_sequence_iter_next"), visibility("default")));
+
+#undef g_sequence_iter_prev 
+extern __typeof (g_sequence_iter_prev) g_sequence_iter_prev __attribute((alias("IA__g_sequence_iter_prev"), visibility("default")));
+
+#undef g_sequence_iter_get_position 
+extern __typeof (g_sequence_iter_get_position) g_sequence_iter_get_position __attribute((alias("IA__g_sequence_iter_get_position"), visibility("default")));
+
+#undef g_sequence_iter_move 
+extern __typeof (g_sequence_iter_move) g_sequence_iter_move __attribute((alias("IA__g_sequence_iter_move"), visibility("default")));
+
+#undef g_sequence_iter_get_sequence 
+extern __typeof (g_sequence_iter_get_sequence) g_sequence_iter_get_sequence __attribute((alias("IA__g_sequence_iter_get_sequence"), visibility("default")));
+
+#undef g_sequence_iter_compare 
+extern __typeof (g_sequence_iter_compare) g_sequence_iter_compare __attribute((alias("IA__g_sequence_iter_compare"), visibility("default")));
+
+#undef g_sequence_range_get_midpoint 
+extern __typeof (g_sequence_range_get_midpoint) g_sequence_range_get_midpoint __attribute((alias("IA__g_sequence_range_get_midpoint"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_SHELL_H__)
+#if IN_FILE(__G_SHELL_C__)
+#undef g_shell_error_quark 
+extern __typeof (g_shell_error_quark) g_shell_error_quark __attribute((alias("IA__g_shell_error_quark"), visibility("default")));
+
+#undef g_shell_parse_argv 
+extern __typeof (g_shell_parse_argv) g_shell_parse_argv __attribute((alias("IA__g_shell_parse_argv"), visibility("default")));
+
+#undef g_shell_quote 
+extern __typeof (g_shell_quote) g_shell_quote __attribute((alias("IA__g_shell_quote"), visibility("default")));
+
+#undef g_shell_unquote 
+extern __typeof (g_shell_unquote) g_shell_unquote __attribute((alias("IA__g_shell_unquote"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_SLIST_H__)
+#if IN_FILE(__G_SLIST_C__)
+#undef g_slist_alloc 
+extern __typeof (g_slist_alloc) g_slist_alloc __attribute((alias("IA__g_slist_alloc"), visibility("default")));
+
+#undef g_slist_append 
+extern __typeof (g_slist_append) g_slist_append __attribute((alias("IA__g_slist_append"), visibility("default")));
+
+#undef g_slist_concat 
+extern __typeof (g_slist_concat) g_slist_concat __attribute((alias("IA__g_slist_concat"), visibility("default")));
+
+#undef g_slist_copy 
+extern __typeof (g_slist_copy) g_slist_copy __attribute((alias("IA__g_slist_copy"), visibility("default")));
+
+#undef g_slist_delete_link 
+extern __typeof (g_slist_delete_link) g_slist_delete_link __attribute((alias("IA__g_slist_delete_link"), visibility("default")));
+
+#undef g_slist_find 
+extern __typeof (g_slist_find) g_slist_find __attribute((alias("IA__g_slist_find"), visibility("default")));
+
+#undef g_slist_find_custom 
+extern __typeof (g_slist_find_custom) g_slist_find_custom __attribute((alias("IA__g_slist_find_custom"), visibility("default")));
+
+#undef g_slist_foreach 
+extern __typeof (g_slist_foreach) g_slist_foreach __attribute((alias("IA__g_slist_foreach"), visibility("default")));
+
+#undef g_slist_free 
+extern __typeof (g_slist_free) g_slist_free __attribute((alias("IA__g_slist_free"), visibility("default")));
+
+#undef g_slist_free_1 
+extern __typeof (g_slist_free_1) g_slist_free_1 __attribute((alias("IA__g_slist_free_1"), visibility("default")));
+
+#undef g_slist_index 
+extern __typeof (g_slist_index) g_slist_index __attribute((alias("IA__g_slist_index"), visibility("default")));
+
+#undef g_slist_insert 
+extern __typeof (g_slist_insert) g_slist_insert __attribute((alias("IA__g_slist_insert"), visibility("default")));
+
+#undef g_slist_insert_before 
+extern __typeof (g_slist_insert_before) g_slist_insert_before __attribute((alias("IA__g_slist_insert_before"), visibility("default")));
+
+#undef g_slist_insert_sorted 
+extern __typeof (g_slist_insert_sorted) g_slist_insert_sorted __attribute((alias("IA__g_slist_insert_sorted"), visibility("default")));
+
+#undef g_slist_insert_sorted_with_data 
+extern __typeof (g_slist_insert_sorted_with_data) g_slist_insert_sorted_with_data __attribute((alias("IA__g_slist_insert_sorted_with_data"), visibility("default")));
+
+#undef g_slist_last 
+extern __typeof (g_slist_last) g_slist_last __attribute((alias("IA__g_slist_last"), visibility("default")));
+
+#undef g_slist_length 
+extern __typeof (g_slist_length) g_slist_length __attribute((alias("IA__g_slist_length"), visibility("default")));
+
+#undef g_slist_nth 
+extern __typeof (g_slist_nth) g_slist_nth __attribute((alias("IA__g_slist_nth"), visibility("default")));
+
+#undef g_slist_nth_data 
+extern __typeof (g_slist_nth_data) g_slist_nth_data __attribute((alias("IA__g_slist_nth_data"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_slist_pop_allocator 
+extern __typeof (g_slist_pop_allocator) g_slist_pop_allocator __attribute((alias("IA__g_slist_pop_allocator"), visibility("default")));
+
+#endif
+#undef g_slist_position 
+extern __typeof (g_slist_position) g_slist_position __attribute((alias("IA__g_slist_position"), visibility("default")));
+
+#undef g_slist_prepend 
+extern __typeof (g_slist_prepend) g_slist_prepend __attribute((alias("IA__g_slist_prepend"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_slist_push_allocator 
+extern __typeof (g_slist_push_allocator) g_slist_push_allocator __attribute((alias("IA__g_slist_push_allocator"), visibility("default")));
+
+#endif
+#undef g_slist_remove 
+extern __typeof (g_slist_remove) g_slist_remove __attribute((alias("IA__g_slist_remove"), visibility("default")));
+
+#undef g_slist_remove_all 
+extern __typeof (g_slist_remove_all) g_slist_remove_all __attribute((alias("IA__g_slist_remove_all"), visibility("default")));
+
+#undef g_slist_remove_link 
+extern __typeof (g_slist_remove_link) g_slist_remove_link __attribute((alias("IA__g_slist_remove_link"), visibility("default")));
+
+#undef g_slist_reverse 
+extern __typeof (g_slist_reverse) g_slist_reverse __attribute((alias("IA__g_slist_reverse"), visibility("default")));
+
+#undef g_slist_sort 
+extern __typeof (g_slist_sort) g_slist_sort __attribute((alias("IA__g_slist_sort"), visibility("default")));
+
+#undef g_slist_sort_with_data 
+extern __typeof (g_slist_sort_with_data) g_slist_sort_with_data __attribute((alias("IA__g_slist_sort_with_data"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_SPAWN_H__)
+#if IN_FILE(__G_SPAWN_C__)
+#ifndef _WIN64
+#undef g_spawn_async 
+extern __typeof (g_spawn_async) g_spawn_async __attribute((alias("IA__g_spawn_async"), visibility("default")));
+
+#undef g_spawn_async_with_pipes 
+extern __typeof (g_spawn_async_with_pipes) g_spawn_async_with_pipes __attribute((alias("IA__g_spawn_async_with_pipes"), visibility("default")));
+
+#endif
+#undef g_spawn_close_pid 
+extern __typeof (g_spawn_close_pid) g_spawn_close_pid __attribute((alias("IA__g_spawn_close_pid"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_spawn_command_line_async 
+extern __typeof (g_spawn_command_line_async) g_spawn_command_line_async __attribute((alias("IA__g_spawn_command_line_async"), visibility("default")));
+
+#undef g_spawn_command_line_sync 
+extern __typeof (g_spawn_command_line_sync) g_spawn_command_line_sync __attribute((alias("IA__g_spawn_command_line_sync"), visibility("default")));
+
+#endif
+#undef g_spawn_error_quark 
+extern __typeof (g_spawn_error_quark) g_spawn_error_quark __attribute((alias("IA__g_spawn_error_quark"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_spawn_sync 
+extern __typeof (g_spawn_sync) g_spawn_sync __attribute((alias("IA__g_spawn_sync"), visibility("default")));
+
+#endif
+#ifdef G_OS_WIN32
+#undef g_spawn_async_utf8 
+extern __typeof (g_spawn_async_utf8) g_spawn_async_utf8 __attribute((alias("IA__g_spawn_async_utf8"), visibility("default")));
+
+#undef g_spawn_async_with_pipes_utf8 
+extern __typeof (g_spawn_async_with_pipes_utf8) g_spawn_async_with_pipes_utf8 __attribute((alias("IA__g_spawn_async_with_pipes_utf8"), visibility("default")));
+
+#undef g_spawn_command_line_async_utf8 
+extern __typeof (g_spawn_command_line_async_utf8) g_spawn_command_line_async_utf8 __attribute((alias("IA__g_spawn_command_line_async_utf8"), visibility("default")));
+
+#undef g_spawn_command_line_sync_utf8 
+extern __typeof (g_spawn_command_line_sync_utf8) g_spawn_command_line_sync_utf8 __attribute((alias("IA__g_spawn_command_line_sync_utf8"), visibility("default")));
+
+#undef g_spawn_sync_utf8 
+extern __typeof (g_spawn_sync_utf8) g_spawn_sync_utf8 __attribute((alias("IA__g_spawn_sync_utf8"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_STDIO_H__)
+#if IN_FILE(__G_STDIO_C__)
+#if !defined(G_OS_UNIX) || defined(G_STDIO_NO_WRAP_ON_UNIX)
+#undef g_chmod 
+extern __typeof (g_chmod) g_chmod __attribute((alias("IA__g_chmod"), visibility("default")));
+
+#undef g_open 
+extern __typeof (g_open) g_open __attribute((alias("IA__g_open"), visibility("default")));
+
+#undef g_creat 
+extern __typeof (g_creat) g_creat __attribute((alias("IA__g_creat"), visibility("default")));
+
+#undef g_rename 
+extern __typeof (g_rename) g_rename __attribute((alias("IA__g_rename"), visibility("default")));
+
+#undef g_mkdir 
+extern __typeof (g_mkdir) g_mkdir __attribute((alias("IA__g_mkdir"), visibility("default")));
+
+#undef g_stat 
+extern __typeof (g_stat) g_stat __attribute((alias("IA__g_stat"), visibility("default")));
+
+#undef g_lstat 
+extern __typeof (g_lstat) g_lstat __attribute((alias("IA__g_lstat"), visibility("default")));
+
+#undef g_remove 
+extern __typeof (g_remove) g_remove __attribute((alias("IA__g_remove"), visibility("default")));
+
+#undef g_fopen 
+extern __typeof (g_fopen) g_fopen __attribute((alias("IA__g_fopen"), visibility("default")));
+
+#undef g_freopen 
+extern __typeof (g_freopen) g_freopen __attribute((alias("IA__g_freopen"), visibility("default")));
+
+#undef g_utime 
+extern __typeof (g_utime) g_utime __attribute((alias("IA__g_utime"), visibility("default")));
+
+#endif
+#undef g_access 
+extern __typeof (g_access) g_access __attribute((alias("IA__g_access"), visibility("default")));
+
+#undef g_chdir 
+extern __typeof (g_chdir) g_chdir __attribute((alias("IA__g_chdir"), visibility("default")));
+
+#undef g_unlink 
+extern __typeof (g_unlink) g_unlink __attribute((alias("IA__g_unlink"), visibility("default")));
+
+#undef g_rmdir 
+extern __typeof (g_rmdir) g_rmdir __attribute((alias("IA__g_rmdir"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_STRFUNCS_H__)
+#if IN_FILE(__G_STRFUNCS_C__)
+#undef g_ascii_digit_value 
+extern __typeof (g_ascii_digit_value) g_ascii_digit_value __attribute((alias("IA__g_ascii_digit_value"), visibility("default")));
+
+#undef g_ascii_dtostr 
+extern __typeof (g_ascii_dtostr) g_ascii_dtostr __attribute((alias("IA__g_ascii_dtostr"), visibility("default")));
+
+#ifdef ANDROID_STUB
+#undef g_ascii_formatd 
+extern __typeof (g_ascii_formatd) g_ascii_formatd __attribute((alias("IA__g_ascii_formatd"), visibility("default")));
+#endif
+
+#undef g_ascii_strdown 
+extern __typeof (g_ascii_strdown) g_ascii_strdown __attribute((alias("IA__g_ascii_strdown"), visibility("default")));
+
+#ifdef ANDROID_STUB
+#undef g_ascii_strtod 
+extern __typeof (g_ascii_strtod) g_ascii_strtod __attribute((alias("IA__g_ascii_strtod"), visibility("default")));
+#endif
+
+#undef g_ascii_strtoull 
+extern __typeof (g_ascii_strtoull) g_ascii_strtoull __attribute((alias("IA__g_ascii_strtoull"), visibility("default")));
+
+#undef g_ascii_strtoll 
+extern __typeof (g_ascii_strtoll) g_ascii_strtoll __attribute((alias("IA__g_ascii_strtoll"), visibility("default")));
+
+#undef g_ascii_strup 
+extern __typeof (g_ascii_strup) g_ascii_strup __attribute((alias("IA__g_ascii_strup"), visibility("default")));
+
+#undef g_ascii_tolower 
+extern __typeof (g_ascii_tolower) g_ascii_tolower __attribute((alias("IA__g_ascii_tolower"), visibility("default")));
+
+#undef g_ascii_toupper 
+extern __typeof (g_ascii_toupper) g_ascii_toupper __attribute((alias("IA__g_ascii_toupper"), visibility("default")));
+
+#undef g_ascii_xdigit_value 
+extern __typeof (g_ascii_xdigit_value) g_ascii_xdigit_value __attribute((alias("IA__g_ascii_xdigit_value"), visibility("default")));
+
+#undef g_ascii_strcasecmp 
+extern __typeof (g_ascii_strcasecmp) g_ascii_strcasecmp __attribute((alias("IA__g_ascii_strcasecmp"), visibility("default")));
+
+#undef g_ascii_strncasecmp 
+extern __typeof (g_ascii_strncasecmp) g_ascii_strncasecmp __attribute((alias("IA__g_ascii_strncasecmp"), visibility("default")));
+
+#undef g_memdup 
+extern __typeof (g_memdup) g_memdup __attribute((alias("IA__g_memdup"), visibility("default")));
+
+#undef g_stpcpy 
+extern __typeof (g_stpcpy) g_stpcpy __attribute((alias("IA__g_stpcpy"), visibility("default")));
+
+#undef g_strcanon 
+extern __typeof (g_strcanon) g_strcanon __attribute((alias("IA__g_strcanon"), visibility("default")));
+
+#undef g_strchomp 
+extern __typeof (g_strchomp) g_strchomp __attribute((alias("IA__g_strchomp"), visibility("default")));
+
+#undef g_strchug 
+extern __typeof (g_strchug) g_strchug __attribute((alias("IA__g_strchug"), visibility("default")));
+
+#undef g_strcompress 
+extern __typeof (g_strcompress) g_strcompress __attribute((alias("IA__g_strcompress"), visibility("default")));
+
+#undef g_strconcat 
+extern __typeof (g_strconcat) g_strconcat __attribute((alias("IA__g_strconcat"), visibility("default")));
+
+#undef g_strdelimit 
+extern __typeof (g_strdelimit) g_strdelimit __attribute((alias("IA__g_strdelimit"), visibility("default")));
+
+#undef g_strdup 
+extern __typeof (g_strdup) g_strdup __attribute((alias("IA__g_strdup"), visibility("default")));
+
+#undef g_strdup_printf 
+extern __typeof (g_strdup_printf) g_strdup_printf __attribute((alias("IA__g_strdup_printf"), visibility("default")));
+
+#undef g_strdupv 
+extern __typeof (g_strdupv) g_strdupv __attribute((alias("IA__g_strdupv"), visibility("default")));
+
+#undef g_strdup_vprintf 
+extern __typeof (g_strdup_vprintf) g_strdup_vprintf __attribute((alias("IA__g_strdup_vprintf"), visibility("default")));
+
+#undef g_strerror 
+extern __typeof (g_strerror) g_strerror __attribute((alias("IA__g_strerror"), visibility("default")));
+
+#undef g_strescape 
+extern __typeof (g_strescape) g_strescape __attribute((alias("IA__g_strescape"), visibility("default")));
+
+#undef g_strfreev 
+extern __typeof (g_strfreev) g_strfreev __attribute((alias("IA__g_strfreev"), visibility("default")));
+
+#undef g_str_has_prefix 
+extern __typeof (g_str_has_prefix) g_str_has_prefix __attribute((alias("IA__g_str_has_prefix"), visibility("default")));
+
+#undef g_str_has_suffix 
+extern __typeof (g_str_has_suffix) g_str_has_suffix __attribute((alias("IA__g_str_has_suffix"), visibility("default")));
+
+#undef g_strjoin 
+extern __typeof (g_strjoin) g_strjoin __attribute((alias("IA__g_strjoin"), visibility("default")));
+
+#undef g_strjoinv 
+extern __typeof (g_strjoinv) g_strjoinv __attribute((alias("IA__g_strjoinv"), visibility("default")));
+
+#undef g_strlcat 
+extern __typeof (g_strlcat) g_strlcat __attribute((alias("IA__g_strlcat"), visibility("default")));
+
+#undef g_strlcpy 
+extern __typeof (g_strlcpy) g_strlcpy __attribute((alias("IA__g_strlcpy"), visibility("default")));
+
+#undef g_strndup 
+extern __typeof (g_strndup) g_strndup __attribute((alias("IA__g_strndup"), visibility("default")));
+
+#undef g_strnfill 
+extern __typeof (g_strnfill) g_strnfill __attribute((alias("IA__g_strnfill"), visibility("default")));
+
+#undef g_strreverse 
+extern __typeof (g_strreverse) g_strreverse __attribute((alias("IA__g_strreverse"), visibility("default")));
+
+#undef g_strrstr 
+extern __typeof (g_strrstr) g_strrstr __attribute((alias("IA__g_strrstr"), visibility("default")));
+
+#undef g_strrstr_len 
+extern __typeof (g_strrstr_len) g_strrstr_len __attribute((alias("IA__g_strrstr_len"), visibility("default")));
+
+#undef g_strsignal 
+extern __typeof (g_strsignal) g_strsignal __attribute((alias("IA__g_strsignal"), visibility("default")));
+
+#undef g_strsplit 
+extern __typeof (g_strsplit) g_strsplit __attribute((alias("IA__g_strsplit"), visibility("default")));
+
+#undef g_strsplit_set 
+extern __typeof (g_strsplit_set) g_strsplit_set __attribute((alias("IA__g_strsplit_set"), visibility("default")));
+
+#undef g_strstr_len 
+extern __typeof (g_strstr_len) g_strstr_len __attribute((alias("IA__g_strstr_len"), visibility("default")));
+
+#undef g_strtod 
+extern __typeof (g_strtod) g_strtod __attribute((alias("IA__g_strtod"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_strcasecmp 
+extern __typeof (g_strcasecmp) g_strcasecmp __attribute((alias("IA__g_strcasecmp"), visibility("default")));
+
+#undef g_strncasecmp 
+extern __typeof (g_strncasecmp) g_strncasecmp __attribute((alias("IA__g_strncasecmp"), visibility("default")));
+
+#undef g_strup 
+extern __typeof (g_strup) g_strup __attribute((alias("IA__g_strup"), visibility("default")));
+
+#undef g_strdown 
+extern __typeof (g_strdown) g_strdown __attribute((alias("IA__g_strdown"), visibility("default")));
+
+#endif
+#undef g_strv_length 
+extern __typeof (g_strv_length) g_strv_length __attribute((alias("IA__g_strv_length"), visibility("default")));
+
+#undef g_strip_context 
+extern __typeof (g_strip_context) g_strip_context __attribute((alias("IA__g_strip_context"), visibility("default")));
+
+#undef g_dgettext 
+extern __typeof (g_dgettext) g_dgettext __attribute((alias("IA__g_dgettext"), visibility("default")));
+
+#undef g_dngettext 
+extern __typeof (g_dngettext) g_dngettext __attribute((alias("IA__g_dngettext"), visibility("default")));
+
+#undef g_dpgettext 
+extern __typeof (g_dpgettext) g_dpgettext __attribute((alias("IA__g_dpgettext"), visibility("default")));
+
+#undef g_dpgettext2 
+extern __typeof (g_dpgettext2) g_dpgettext2 __attribute((alias("IA__g_dpgettext2"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_URI_FUNCS_H__)
+#if IN_FILE(__G_URI_FUNCS_C__)
+#undef g_uri_unescape_string 
+extern __typeof (g_uri_unescape_string) g_uri_unescape_string __attribute((alias("IA__g_uri_unescape_string"), visibility("default")));
+
+#undef g_uri_unescape_segment 
+extern __typeof (g_uri_unescape_segment) g_uri_unescape_segment __attribute((alias("IA__g_uri_unescape_segment"), visibility("default")));
+
+#undef g_uri_parse_scheme 
+extern __typeof (g_uri_parse_scheme) g_uri_parse_scheme __attribute((alias("IA__g_uri_parse_scheme"), visibility("default")));
+
+#undef g_uri_escape_string 
+extern __typeof (g_uri_escape_string) g_uri_escape_string __attribute((alias("IA__g_uri_escape_string"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_STRING_H__)
+#if IN_FILE(__G_STRING_C__)
+#undef g_string_append 
+extern __typeof (g_string_append) g_string_append __attribute((alias("IA__g_string_append"), visibility("default")));
+
+#undef g_string_append_len 
+extern __typeof (g_string_append_len) g_string_append_len __attribute((alias("IA__g_string_append_len"), visibility("default")));
+
+#undef g_string_append_printf 
+extern __typeof (g_string_append_printf) g_string_append_printf __attribute((alias("IA__g_string_append_printf"), visibility("default")));
+
+#undef g_string_append_unichar 
+extern __typeof (g_string_append_unichar) g_string_append_unichar __attribute((alias("IA__g_string_append_unichar"), visibility("default")));
+
+#undef g_string_append_vprintf 
+extern __typeof (g_string_append_vprintf) g_string_append_vprintf __attribute((alias("IA__g_string_append_vprintf"), visibility("default")));
+
+#undef g_string_ascii_down 
+extern __typeof (g_string_ascii_down) g_string_ascii_down __attribute((alias("IA__g_string_ascii_down"), visibility("default")));
+
+#undef g_string_ascii_up 
+extern __typeof (g_string_ascii_up) g_string_ascii_up __attribute((alias("IA__g_string_ascii_up"), visibility("default")));
+
+#undef g_string_assign 
+extern __typeof (g_string_assign) g_string_assign __attribute((alias("IA__g_string_assign"), visibility("default")));
+
+#undef g_string_chunk_free 
+extern __typeof (g_string_chunk_free) g_string_chunk_free __attribute((alias("IA__g_string_chunk_free"), visibility("default")));
+
+#undef g_string_chunk_clear 
+extern __typeof (g_string_chunk_clear) g_string_chunk_clear __attribute((alias("IA__g_string_chunk_clear"), visibility("default")));
+
+#undef g_string_chunk_insert 
+extern __typeof (g_string_chunk_insert) g_string_chunk_insert __attribute((alias("IA__g_string_chunk_insert"), visibility("default")));
+
+#undef g_string_chunk_insert_const 
+extern __typeof (g_string_chunk_insert_const) g_string_chunk_insert_const __attribute((alias("IA__g_string_chunk_insert_const"), visibility("default")));
+
+#undef g_string_chunk_insert_len 
+extern __typeof (g_string_chunk_insert_len) g_string_chunk_insert_len __attribute((alias("IA__g_string_chunk_insert_len"), visibility("default")));
+
+#undef g_string_chunk_new 
+extern __typeof (g_string_chunk_new) g_string_chunk_new __attribute((alias("IA__g_string_chunk_new"), visibility("default")));
+
+#undef g_string_equal 
+extern __typeof (g_string_equal) g_string_equal __attribute((alias("IA__g_string_equal"), visibility("default")));
+
+#undef g_string_erase 
+extern __typeof (g_string_erase) g_string_erase __attribute((alias("IA__g_string_erase"), visibility("default")));
+
+#undef g_string_free 
+extern __typeof (g_string_free) g_string_free __attribute((alias("IA__g_string_free"), visibility("default")));
+
+#undef g_string_hash 
+extern __typeof (g_string_hash) g_string_hash __attribute((alias("IA__g_string_hash"), visibility("default")));
+
+#undef g_string_insert 
+extern __typeof (g_string_insert) g_string_insert __attribute((alias("IA__g_string_insert"), visibility("default")));
+
+#undef g_string_insert_c 
+extern __typeof (g_string_insert_c) g_string_insert_c __attribute((alias("IA__g_string_insert_c"), visibility("default")));
+
+#undef g_string_insert_len 
+extern __typeof (g_string_insert_len) g_string_insert_len __attribute((alias("IA__g_string_insert_len"), visibility("default")));
+
+#undef g_string_insert_unichar 
+extern __typeof (g_string_insert_unichar) g_string_insert_unichar __attribute((alias("IA__g_string_insert_unichar"), visibility("default")));
+
+#undef g_string_new 
+extern __typeof (g_string_new) g_string_new __attribute((alias("IA__g_string_new"), visibility("default")));
+
+#undef g_string_new_len 
+extern __typeof (g_string_new_len) g_string_new_len __attribute((alias("IA__g_string_new_len"), visibility("default")));
+
+#undef g_string_overwrite 
+extern __typeof (g_string_overwrite) g_string_overwrite __attribute((alias("IA__g_string_overwrite"), visibility("default")));
+
+#undef g_string_overwrite_len 
+extern __typeof (g_string_overwrite_len) g_string_overwrite_len __attribute((alias("IA__g_string_overwrite_len"), visibility("default")));
+
+#undef g_string_prepend 
+extern __typeof (g_string_prepend) g_string_prepend __attribute((alias("IA__g_string_prepend"), visibility("default")));
+
+#undef g_string_prepend_c 
+extern __typeof (g_string_prepend_c) g_string_prepend_c __attribute((alias("IA__g_string_prepend_c"), visibility("default")));
+
+#undef g_string_prepend_len 
+extern __typeof (g_string_prepend_len) g_string_prepend_len __attribute((alias("IA__g_string_prepend_len"), visibility("default")));
+
+#undef g_string_prepend_unichar 
+extern __typeof (g_string_prepend_unichar) g_string_prepend_unichar __attribute((alias("IA__g_string_prepend_unichar"), visibility("default")));
+
+#undef g_string_printf 
+extern __typeof (g_string_printf) g_string_printf __attribute((alias("IA__g_string_printf"), visibility("default")));
+
+#undef g_string_set_size 
+extern __typeof (g_string_set_size) g_string_set_size __attribute((alias("IA__g_string_set_size"), visibility("default")));
+
+#undef g_string_sized_new 
+extern __typeof (g_string_sized_new) g_string_sized_new __attribute((alias("IA__g_string_sized_new"), visibility("default")));
+
+#undef g_string_truncate 
+extern __typeof (g_string_truncate) g_string_truncate __attribute((alias("IA__g_string_truncate"), visibility("default")));
+
+#undef g_string_append_uri_escaped 
+extern __typeof (g_string_append_uri_escaped) g_string_append_uri_escaped __attribute((alias("IA__g_string_append_uri_escaped"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_string_down 
+extern __typeof (g_string_down) g_string_down __attribute((alias("IA__g_string_down"), visibility("default")));
+
+#undef g_string_up 
+extern __typeof (g_string_up) g_string_up __attribute((alias("IA__g_string_up"), visibility("default")));
+
+#endif
+#undef g_string_vprintf 
+extern __typeof (g_string_vprintf) g_string_vprintf __attribute((alias("IA__g_string_vprintf"), visibility("default")));
+
+#undef g_str_equal 
+extern __typeof (g_str_equal) g_str_equal __attribute((alias("IA__g_str_equal"), visibility("default")));
+
+#undef g_str_hash 
+extern __typeof (g_str_hash) g_str_hash __attribute((alias("IA__g_str_hash"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_THREAD_H__)
+#if IN_FILE(__G_THREAD_C__)
+#undef g_once_impl 
+extern __typeof (g_once_impl) g_once_impl __attribute((alias("IA__g_once_impl"), visibility("default")));
+
+#undef g_once_init_enter_impl 
+extern __typeof (g_once_init_enter_impl) g_once_init_enter_impl __attribute((alias("IA__g_once_init_enter_impl"), visibility("default")));
+
+#undef g_once_init_leave 
+extern __typeof (g_once_init_leave) g_once_init_leave __attribute((alias("IA__g_once_init_leave"), visibility("default")));
+
+#undef g_thread_create_full 
+extern __typeof (g_thread_create_full) g_thread_create_full __attribute((alias("IA__g_thread_create_full"), visibility("default")));
+
+#undef g_thread_error_quark 
+extern __typeof (g_thread_error_quark) g_thread_error_quark __attribute((alias("IA__g_thread_error_quark"), visibility("default")));
+
+#undef g_thread_exit 
+extern __typeof (g_thread_exit) g_thread_exit __attribute((alias("IA__g_thread_exit"), visibility("default")));
+
+#undef g_thread_join 
+extern __typeof (g_thread_join) g_thread_join __attribute((alias("IA__g_thread_join"), visibility("default")));
+
+#undef g_thread_self 
+extern __typeof (g_thread_self) g_thread_self __attribute((alias("IA__g_thread_self"), visibility("default")));
+
+#undef g_thread_set_priority 
+extern __typeof (g_thread_set_priority) g_thread_set_priority __attribute((alias("IA__g_thread_set_priority"), visibility("default")));
+
+#undef g_static_mutex_free 
+extern __typeof (g_static_mutex_free) g_static_mutex_free __attribute((alias("IA__g_static_mutex_free"), visibility("default")));
+
+#undef g_static_mutex_get_mutex_impl 
+extern __typeof (g_static_mutex_get_mutex_impl) g_static_mutex_get_mutex_impl __attribute((alias("IA__g_static_mutex_get_mutex_impl"), visibility("default")));
+
+#undef g_static_mutex_init 
+extern __typeof (g_static_mutex_init) g_static_mutex_init __attribute((alias("IA__g_static_mutex_init"), visibility("default")));
+
+#undef g_static_private_free 
+extern __typeof (g_static_private_free) g_static_private_free __attribute((alias("IA__g_static_private_free"), visibility("default")));
+
+#undef g_static_private_get 
+extern __typeof (g_static_private_get) g_static_private_get __attribute((alias("IA__g_static_private_get"), visibility("default")));
+
+#undef g_static_private_init 
+extern __typeof (g_static_private_init) g_static_private_init __attribute((alias("IA__g_static_private_init"), visibility("default")));
+
+#undef g_static_private_set 
+extern __typeof (g_static_private_set) g_static_private_set __attribute((alias("IA__g_static_private_set"), visibility("default")));
+
+#undef g_static_rec_mutex_free 
+extern __typeof (g_static_rec_mutex_free) g_static_rec_mutex_free __attribute((alias("IA__g_static_rec_mutex_free"), visibility("default")));
+
+#undef g_static_rec_mutex_init 
+extern __typeof (g_static_rec_mutex_init) g_static_rec_mutex_init __attribute((alias("IA__g_static_rec_mutex_init"), visibility("default")));
+
+#undef g_static_rec_mutex_lock 
+extern __typeof (g_static_rec_mutex_lock) g_static_rec_mutex_lock __attribute((alias("IA__g_static_rec_mutex_lock"), visibility("default")));
+
+#undef g_static_rec_mutex_lock_full 
+extern __typeof (g_static_rec_mutex_lock_full) g_static_rec_mutex_lock_full __attribute((alias("IA__g_static_rec_mutex_lock_full"), visibility("default")));
+
+#undef g_static_rec_mutex_trylock 
+extern __typeof (g_static_rec_mutex_trylock) g_static_rec_mutex_trylock __attribute((alias("IA__g_static_rec_mutex_trylock"), visibility("default")));
+
+#undef g_static_rec_mutex_unlock 
+extern __typeof (g_static_rec_mutex_unlock) g_static_rec_mutex_unlock __attribute((alias("IA__g_static_rec_mutex_unlock"), visibility("default")));
+
+#undef g_static_rec_mutex_unlock_full 
+extern __typeof (g_static_rec_mutex_unlock_full) g_static_rec_mutex_unlock_full __attribute((alias("IA__g_static_rec_mutex_unlock_full"), visibility("default")));
+
+#undef g_static_rw_lock_free 
+extern __typeof (g_static_rw_lock_free) g_static_rw_lock_free __attribute((alias("IA__g_static_rw_lock_free"), visibility("default")));
+
+#undef g_static_rw_lock_init 
+extern __typeof (g_static_rw_lock_init) g_static_rw_lock_init __attribute((alias("IA__g_static_rw_lock_init"), visibility("default")));
+
+#undef g_static_rw_lock_reader_lock 
+extern __typeof (g_static_rw_lock_reader_lock) g_static_rw_lock_reader_lock __attribute((alias("IA__g_static_rw_lock_reader_lock"), visibility("default")));
+
+#undef g_static_rw_lock_reader_trylock 
+extern __typeof (g_static_rw_lock_reader_trylock) g_static_rw_lock_reader_trylock __attribute((alias("IA__g_static_rw_lock_reader_trylock"), visibility("default")));
+
+#undef g_static_rw_lock_reader_unlock 
+extern __typeof (g_static_rw_lock_reader_unlock) g_static_rw_lock_reader_unlock __attribute((alias("IA__g_static_rw_lock_reader_unlock"), visibility("default")));
+
+#undef g_static_rw_lock_writer_lock 
+extern __typeof (g_static_rw_lock_writer_lock) g_static_rw_lock_writer_lock __attribute((alias("IA__g_static_rw_lock_writer_lock"), visibility("default")));
+
+#undef g_static_rw_lock_writer_trylock 
+extern __typeof (g_static_rw_lock_writer_trylock) g_static_rw_lock_writer_trylock __attribute((alias("IA__g_static_rw_lock_writer_trylock"), visibility("default")));
+
+#undef g_static_rw_lock_writer_unlock 
+extern __typeof (g_static_rw_lock_writer_unlock) g_static_rw_lock_writer_unlock __attribute((alias("IA__g_static_rw_lock_writer_unlock"), visibility("default")));
+
+#undef g_thread_foreach 
+extern __typeof (g_thread_foreach) g_thread_foreach __attribute((alias("IA__g_thread_foreach"), visibility("default")));
+
+#undef g_thread_get_initialized 
+extern __typeof (g_thread_get_initialized) g_thread_get_initialized __attribute((alias("IA__g_thread_get_initialized"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_THREADPOOL_H__)
+#if IN_FILE(__G_THREADPOOL_C__)
+#undef g_thread_pool_free 
+extern __typeof (g_thread_pool_free) g_thread_pool_free __attribute((alias("IA__g_thread_pool_free"), visibility("default")));
+
+#undef g_thread_pool_get_max_threads 
+extern __typeof (g_thread_pool_get_max_threads) g_thread_pool_get_max_threads __attribute((alias("IA__g_thread_pool_get_max_threads"), visibility("default")));
+
+#undef g_thread_pool_get_max_unused_threads 
+extern __typeof (g_thread_pool_get_max_unused_threads) g_thread_pool_get_max_unused_threads __attribute((alias("IA__g_thread_pool_get_max_unused_threads"), visibility("default")));
+
+#undef g_thread_pool_get_max_idle_time 
+extern __typeof (g_thread_pool_get_max_idle_time) g_thread_pool_get_max_idle_time __attribute((alias("IA__g_thread_pool_get_max_idle_time"), visibility("default")));
+
+#undef g_thread_pool_get_num_threads 
+extern __typeof (g_thread_pool_get_num_threads) g_thread_pool_get_num_threads __attribute((alias("IA__g_thread_pool_get_num_threads"), visibility("default")));
+
+#undef g_thread_pool_get_num_unused_threads 
+extern __typeof (g_thread_pool_get_num_unused_threads) g_thread_pool_get_num_unused_threads __attribute((alias("IA__g_thread_pool_get_num_unused_threads"), visibility("default")));
+
+#undef g_thread_pool_new 
+extern __typeof (g_thread_pool_new) g_thread_pool_new __attribute((alias("IA__g_thread_pool_new"), visibility("default")));
+
+#undef g_thread_pool_push 
+extern __typeof (g_thread_pool_push) g_thread_pool_push __attribute((alias("IA__g_thread_pool_push"), visibility("default")));
+
+#undef g_thread_pool_set_max_threads 
+extern __typeof (g_thread_pool_set_max_threads) g_thread_pool_set_max_threads __attribute((alias("IA__g_thread_pool_set_max_threads"), visibility("default")));
+
+#undef g_thread_pool_set_max_unused_threads 
+extern __typeof (g_thread_pool_set_max_unused_threads) g_thread_pool_set_max_unused_threads __attribute((alias("IA__g_thread_pool_set_max_unused_threads"), visibility("default")));
+
+#undef g_thread_pool_set_max_idle_time 
+extern __typeof (g_thread_pool_set_max_idle_time) g_thread_pool_set_max_idle_time __attribute((alias("IA__g_thread_pool_set_max_idle_time"), visibility("default")));
+
+#undef g_thread_pool_stop_unused_threads 
+extern __typeof (g_thread_pool_stop_unused_threads) g_thread_pool_stop_unused_threads __attribute((alias("IA__g_thread_pool_stop_unused_threads"), visibility("default")));
+
+#undef g_thread_pool_unprocessed 
+extern __typeof (g_thread_pool_unprocessed) g_thread_pool_unprocessed __attribute((alias("IA__g_thread_pool_unprocessed"), visibility("default")));
+
+#undef g_thread_pool_set_sort_function 
+extern __typeof (g_thread_pool_set_sort_function) g_thread_pool_set_sort_function __attribute((alias("IA__g_thread_pool_set_sort_function"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_TEST_UTILS_H__)
+#if IN_FILE(__G_TEST_UTILS_C__)
+#undef g_assertion_message 
+extern __typeof (g_assertion_message) g_assertion_message __attribute((alias("IA__g_assertion_message"), visibility("default")));
+
+#undef g_assertion_message_cmpnum 
+extern __typeof (g_assertion_message_cmpnum) g_assertion_message_cmpnum __attribute((alias("IA__g_assertion_message_cmpnum"), visibility("default")));
+
+#undef g_assertion_message_cmpstr 
+extern __typeof (g_assertion_message_cmpstr) g_assertion_message_cmpstr __attribute((alias("IA__g_assertion_message_cmpstr"), visibility("default")));
+
+#undef g_assertion_message_expr 
+extern __typeof (g_assertion_message_expr) g_assertion_message_expr __attribute((alias("IA__g_assertion_message_expr"), visibility("default")));
+
+#undef g_assertion_message_error 
+extern __typeof (g_assertion_message_error) g_assertion_message_error __attribute((alias("IA__g_assertion_message_error"), visibility("default")));
+
+#undef g_strcmp0 
+extern __typeof (g_strcmp0) g_strcmp0 __attribute((alias("IA__g_strcmp0"), visibility("default")));
+
+#undef g_test_add_data_func 
+extern __typeof (g_test_add_data_func) g_test_add_data_func __attribute((alias("IA__g_test_add_data_func"), visibility("default")));
+
+#undef g_test_add_func 
+extern __typeof (g_test_add_func) g_test_add_func __attribute((alias("IA__g_test_add_func"), visibility("default")));
+
+#undef g_test_add_vtable 
+extern __typeof (g_test_add_vtable) g_test_add_vtable __attribute((alias("IA__g_test_add_vtable"), visibility("default")));
+
+#undef g_test_bug 
+extern __typeof (g_test_bug) g_test_bug __attribute((alias("IA__g_test_bug"), visibility("default")));
+
+#undef g_test_bug_base 
+extern __typeof (g_test_bug_base) g_test_bug_base __attribute((alias("IA__g_test_bug_base"), visibility("default")));
+
+#undef g_test_create_case 
+extern __typeof (g_test_create_case) g_test_create_case __attribute((alias("IA__g_test_create_case"), visibility("default")));
+
+#undef g_test_create_suite 
+extern __typeof (g_test_create_suite) g_test_create_suite __attribute((alias("IA__g_test_create_suite"), visibility("default")));
+
+#undef g_test_get_root 
+extern __typeof (g_test_get_root) g_test_get_root __attribute((alias("IA__g_test_get_root"), visibility("default")));
+
+#undef g_test_init 
+extern __typeof (g_test_init) g_test_init __attribute((alias("IA__g_test_init"), visibility("default")));
+
+#undef g_test_log_buffer_free 
+extern __typeof (g_test_log_buffer_free) g_test_log_buffer_free __attribute((alias("IA__g_test_log_buffer_free"), visibility("default")));
+
+#undef g_test_log_buffer_new 
+extern __typeof (g_test_log_buffer_new) g_test_log_buffer_new __attribute((alias("IA__g_test_log_buffer_new"), visibility("default")));
+
+#undef g_test_log_buffer_pop 
+extern __typeof (g_test_log_buffer_pop) g_test_log_buffer_pop __attribute((alias("IA__g_test_log_buffer_pop"), visibility("default")));
+
+#undef g_test_log_buffer_push 
+extern __typeof (g_test_log_buffer_push) g_test_log_buffer_push __attribute((alias("IA__g_test_log_buffer_push"), visibility("default")));
+
+#undef g_test_log_msg_free 
+extern __typeof (g_test_log_msg_free) g_test_log_msg_free __attribute((alias("IA__g_test_log_msg_free"), visibility("default")));
+
+#undef g_test_log_type_name 
+extern __typeof (g_test_log_type_name) g_test_log_type_name __attribute((alias("IA__g_test_log_type_name"), visibility("default")));
+
+#undef g_test_maximized_result 
+extern __typeof (g_test_maximized_result) g_test_maximized_result __attribute((alias("IA__g_test_maximized_result"), visibility("default")));
+
+#undef g_test_message 
+extern __typeof (g_test_message) g_test_message __attribute((alias("IA__g_test_message"), visibility("default")));
+
+#undef g_test_minimized_result 
+extern __typeof (g_test_minimized_result) g_test_minimized_result __attribute((alias("IA__g_test_minimized_result"), visibility("default")));
+
+#undef g_test_queue_destroy 
+extern __typeof (g_test_queue_destroy) g_test_queue_destroy __attribute((alias("IA__g_test_queue_destroy"), visibility("default")));
+
+#undef g_test_queue_free 
+extern __typeof (g_test_queue_free) g_test_queue_free __attribute((alias("IA__g_test_queue_free"), visibility("default")));
+
+#undef g_test_rand_double 
+extern __typeof (g_test_rand_double) g_test_rand_double __attribute((alias("IA__g_test_rand_double"), visibility("default")));
+
+#undef g_test_rand_double_range 
+extern __typeof (g_test_rand_double_range) g_test_rand_double_range __attribute((alias("IA__g_test_rand_double_range"), visibility("default")));
+
+#undef g_test_rand_int 
+extern __typeof (g_test_rand_int) g_test_rand_int __attribute((alias("IA__g_test_rand_int"), visibility("default")));
+
+#undef g_test_rand_int_range 
+extern __typeof (g_test_rand_int_range) g_test_rand_int_range __attribute((alias("IA__g_test_rand_int_range"), visibility("default")));
+
+#undef g_test_run 
+extern __typeof (g_test_run) g_test_run __attribute((alias("IA__g_test_run"), visibility("default")));
+
+#undef g_test_run_suite 
+extern __typeof (g_test_run_suite) g_test_run_suite __attribute((alias("IA__g_test_run_suite"), visibility("default")));
+
+#undef g_test_suite_add 
+extern __typeof (g_test_suite_add) g_test_suite_add __attribute((alias("IA__g_test_suite_add"), visibility("default")));
+
+#undef g_test_suite_add_suite 
+extern __typeof (g_test_suite_add_suite) g_test_suite_add_suite __attribute((alias("IA__g_test_suite_add_suite"), visibility("default")));
+
+#undef g_test_timer_elapsed 
+extern __typeof (g_test_timer_elapsed) g_test_timer_elapsed __attribute((alias("IA__g_test_timer_elapsed"), visibility("default")));
+
+#undef g_test_timer_last 
+extern __typeof (g_test_timer_last) g_test_timer_last __attribute((alias("IA__g_test_timer_last"), visibility("default")));
+
+#undef g_test_timer_start 
+extern __typeof (g_test_timer_start) g_test_timer_start __attribute((alias("IA__g_test_timer_start"), visibility("default")));
+
+#undef g_test_trap_assertions 
+extern __typeof (g_test_trap_assertions) g_test_trap_assertions __attribute((alias("IA__g_test_trap_assertions"), visibility("default")));
+
+#undef g_test_trap_fork 
+extern __typeof (g_test_trap_fork) g_test_trap_fork __attribute((alias("IA__g_test_trap_fork"), visibility("default")));
+
+#undef g_test_trap_has_passed 
+extern __typeof (g_test_trap_has_passed) g_test_trap_has_passed __attribute((alias("IA__g_test_trap_has_passed"), visibility("default")));
+
+#undef g_test_trap_reached_timeout 
+extern __typeof (g_test_trap_reached_timeout) g_test_trap_reached_timeout __attribute((alias("IA__g_test_trap_reached_timeout"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_TIMER_H__)
+#if IN_FILE(__G_TIMER_C__)
+#undef g_timer_continue 
+extern __typeof (g_timer_continue) g_timer_continue __attribute((alias("IA__g_timer_continue"), visibility("default")));
+
+#undef g_timer_destroy 
+extern __typeof (g_timer_destroy) g_timer_destroy __attribute((alias("IA__g_timer_destroy"), visibility("default")));
+
+#undef g_timer_elapsed 
+extern __typeof (g_timer_elapsed) g_timer_elapsed __attribute((alias("IA__g_timer_elapsed"), visibility("default")));
+
+#undef g_timer_new 
+extern __typeof (g_timer_new) g_timer_new __attribute((alias("IA__g_timer_new"), visibility("default")));
+
+#undef g_timer_reset 
+extern __typeof (g_timer_reset) g_timer_reset __attribute((alias("IA__g_timer_reset"), visibility("default")));
+
+#undef g_timer_start 
+extern __typeof (g_timer_start) g_timer_start __attribute((alias("IA__g_timer_start"), visibility("default")));
+
+#undef g_timer_stop 
+extern __typeof (g_timer_stop) g_timer_stop __attribute((alias("IA__g_timer_stop"), visibility("default")));
+
+#undef g_time_val_add 
+extern __typeof (g_time_val_add) g_time_val_add __attribute((alias("IA__g_time_val_add"), visibility("default")));
+
+#undef g_time_val_from_iso8601 
+extern __typeof (g_time_val_from_iso8601) g_time_val_from_iso8601 __attribute((alias("IA__g_time_val_from_iso8601"), visibility("default")));
+
+#undef g_time_val_to_iso8601 
+extern __typeof (g_time_val_to_iso8601) g_time_val_to_iso8601 __attribute((alias("IA__g_time_val_to_iso8601"), visibility("default")));
+
+#undef g_usleep 
+extern __typeof (g_usleep) g_usleep __attribute((alias("IA__g_usleep"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_TREE_H__)
+#if IN_FILE(__G_TREE_C__)
+#undef g_tree_destroy 
+extern __typeof (g_tree_destroy) g_tree_destroy __attribute((alias("IA__g_tree_destroy"), visibility("default")));
+
+#undef g_tree_foreach 
+extern __typeof (g_tree_foreach) g_tree_foreach __attribute((alias("IA__g_tree_foreach"), visibility("default")));
+
+#undef g_tree_height 
+extern __typeof (g_tree_height) g_tree_height __attribute((alias("IA__g_tree_height"), visibility("default")));
+
+#undef g_tree_insert 
+extern __typeof (g_tree_insert) g_tree_insert __attribute((alias("IA__g_tree_insert"), visibility("default")));
+
+#undef g_tree_lookup 
+extern __typeof (g_tree_lookup) g_tree_lookup __attribute((alias("IA__g_tree_lookup"), visibility("default")));
+
+#undef g_tree_lookup_extended 
+extern __typeof (g_tree_lookup_extended) g_tree_lookup_extended __attribute((alias("IA__g_tree_lookup_extended"), visibility("default")));
+
+#undef g_tree_new 
+extern __typeof (g_tree_new) g_tree_new __attribute((alias("IA__g_tree_new"), visibility("default")));
+
+#undef g_tree_new_full 
+extern __typeof (g_tree_new_full) g_tree_new_full __attribute((alias("IA__g_tree_new_full"), visibility("default")));
+
+#undef g_tree_new_with_data 
+extern __typeof (g_tree_new_with_data) g_tree_new_with_data __attribute((alias("IA__g_tree_new_with_data"), visibility("default")));
+
+#undef g_tree_nnodes 
+extern __typeof (g_tree_nnodes) g_tree_nnodes __attribute((alias("IA__g_tree_nnodes"), visibility("default")));
+
+#undef g_tree_remove 
+extern __typeof (g_tree_remove) g_tree_remove __attribute((alias("IA__g_tree_remove"), visibility("default")));
+
+#undef g_tree_replace 
+extern __typeof (g_tree_replace) g_tree_replace __attribute((alias("IA__g_tree_replace"), visibility("default")));
+
+#undef g_tree_search 
+extern __typeof (g_tree_search) g_tree_search __attribute((alias("IA__g_tree_search"), visibility("default")));
+
+#undef g_tree_steal 
+extern __typeof (g_tree_steal) g_tree_steal __attribute((alias("IA__g_tree_steal"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_tree_traverse 
+extern __typeof (g_tree_traverse) g_tree_traverse __attribute((alias("IA__g_tree_traverse"), visibility("default")));
+
+#endif
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNIBREAK_C__)
+#undef g_unichar_break_type 
+extern __typeof (g_unichar_break_type) g_unichar_break_type __attribute((alias("IA__g_unichar_break_type"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNICOLLATE_C__)
+#undef g_utf8_collate 
+extern __typeof (g_utf8_collate) g_utf8_collate __attribute((alias("IA__g_utf8_collate"), visibility("default")));
+
+#undef g_utf8_collate_key 
+extern __typeof (g_utf8_collate_key) g_utf8_collate_key __attribute((alias("IA__g_utf8_collate_key"), visibility("default")));
+
+#undef g_utf8_collate_key_for_filename 
+extern __typeof (g_utf8_collate_key_for_filename) g_utf8_collate_key_for_filename __attribute((alias("IA__g_utf8_collate_key_for_filename"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNIDECOMP_C__)
+#undef g_unicode_canonical_decomposition 
+extern __typeof (g_unicode_canonical_decomposition) g_unicode_canonical_decomposition __attribute((alias("IA__g_unicode_canonical_decomposition"), visibility("default")));
+
+#undef g_unicode_canonical_ordering 
+extern __typeof (g_unicode_canonical_ordering) g_unicode_canonical_ordering __attribute((alias("IA__g_unicode_canonical_ordering"), visibility("default")));
+
+#undef g_unichar_combining_class 
+extern __typeof (g_unichar_combining_class) g_unichar_combining_class __attribute((alias("IA__g_unichar_combining_class"), visibility("default")));
+
+#undef g_utf8_normalize 
+extern __typeof (g_utf8_normalize) g_utf8_normalize __attribute((alias("IA__g_utf8_normalize"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UNIPROP_C__)
+#undef g_unichar_isalnum 
+extern __typeof (g_unichar_isalnum) g_unichar_isalnum __attribute((alias("IA__g_unichar_isalnum"), visibility("default")));
+
+#undef g_unichar_isalpha 
+extern __typeof (g_unichar_isalpha) g_unichar_isalpha __attribute((alias("IA__g_unichar_isalpha"), visibility("default")));
+
+#undef g_unichar_iscntrl 
+extern __typeof (g_unichar_iscntrl) g_unichar_iscntrl __attribute((alias("IA__g_unichar_iscntrl"), visibility("default")));
+
+#undef g_unichar_isdefined 
+extern __typeof (g_unichar_isdefined) g_unichar_isdefined __attribute((alias("IA__g_unichar_isdefined"), visibility("default")));
+
+#undef g_unichar_isdigit 
+extern __typeof (g_unichar_isdigit) g_unichar_isdigit __attribute((alias("IA__g_unichar_isdigit"), visibility("default")));
+
+#undef g_unichar_isgraph 
+extern __typeof (g_unichar_isgraph) g_unichar_isgraph __attribute((alias("IA__g_unichar_isgraph"), visibility("default")));
+
+#undef g_unichar_islower 
+extern __typeof (g_unichar_islower) g_unichar_islower __attribute((alias("IA__g_unichar_islower"), visibility("default")));
+
+#undef g_unichar_isprint 
+extern __typeof (g_unichar_isprint) g_unichar_isprint __attribute((alias("IA__g_unichar_isprint"), visibility("default")));
+
+#undef g_unichar_ispunct 
+extern __typeof (g_unichar_ispunct) g_unichar_ispunct __attribute((alias("IA__g_unichar_ispunct"), visibility("default")));
+
+#undef g_unichar_isspace 
+extern __typeof (g_unichar_isspace) g_unichar_isspace __attribute((alias("IA__g_unichar_isspace"), visibility("default")));
+
+#undef g_unichar_istitle 
+extern __typeof (g_unichar_istitle) g_unichar_istitle __attribute((alias("IA__g_unichar_istitle"), visibility("default")));
+
+#undef g_unichar_isupper 
+extern __typeof (g_unichar_isupper) g_unichar_isupper __attribute((alias("IA__g_unichar_isupper"), visibility("default")));
+
+#undef g_unichar_iswide 
+extern __typeof (g_unichar_iswide) g_unichar_iswide __attribute((alias("IA__g_unichar_iswide"), visibility("default")));
+
+#undef g_unichar_iswide_cjk 
+extern __typeof (g_unichar_iswide_cjk) g_unichar_iswide_cjk __attribute((alias("IA__g_unichar_iswide_cjk"), visibility("default")));
+
+#undef g_unichar_isxdigit 
+extern __typeof (g_unichar_isxdigit) g_unichar_isxdigit __attribute((alias("IA__g_unichar_isxdigit"), visibility("default")));
+
+#undef g_unichar_iszerowidth 
+extern __typeof (g_unichar_iszerowidth) g_unichar_iszerowidth __attribute((alias("IA__g_unichar_iszerowidth"), visibility("default")));
+
+#undef g_unichar_tolower 
+extern __typeof (g_unichar_tolower) g_unichar_tolower __attribute((alias("IA__g_unichar_tolower"), visibility("default")));
+
+#undef g_unichar_totitle 
+extern __typeof (g_unichar_totitle) g_unichar_totitle __attribute((alias("IA__g_unichar_totitle"), visibility("default")));
+
+#undef g_unichar_toupper 
+extern __typeof (g_unichar_toupper) g_unichar_toupper __attribute((alias("IA__g_unichar_toupper"), visibility("default")));
+
+#undef g_unichar_ismark 
+extern __typeof (g_unichar_ismark) g_unichar_ismark __attribute((alias("IA__g_unichar_ismark"), visibility("default")));
+
+#undef g_unichar_get_mirror_char 
+extern __typeof (g_unichar_get_mirror_char) g_unichar_get_mirror_char __attribute((alias("IA__g_unichar_get_mirror_char"), visibility("default")));
+
+#undef g_unichar_get_script 
+extern __typeof (g_unichar_get_script) g_unichar_get_script __attribute((alias("IA__g_unichar_get_script"), visibility("default")));
+
+#undef g_unichar_digit_value 
+extern __typeof (g_unichar_digit_value) g_unichar_digit_value __attribute((alias("IA__g_unichar_digit_value"), visibility("default")));
+
+#undef g_unichar_xdigit_value 
+extern __typeof (g_unichar_xdigit_value) g_unichar_xdigit_value __attribute((alias("IA__g_unichar_xdigit_value"), visibility("default")));
+
+#undef g_unichar_type 
+extern __typeof (g_unichar_type) g_unichar_type __attribute((alias("IA__g_unichar_type"), visibility("default")));
+
+#undef g_utf8_casefold 
+extern __typeof (g_utf8_casefold) g_utf8_casefold __attribute((alias("IA__g_utf8_casefold"), visibility("default")));
+
+#undef g_utf8_strup 
+extern __typeof (g_utf8_strup) g_utf8_strup __attribute((alias("IA__g_utf8_strup"), visibility("default")));
+
+#undef g_utf8_strdown 
+extern __typeof (g_utf8_strdown) g_utf8_strdown __attribute((alias("IA__g_utf8_strdown"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_UNICODE_H__)
+#if IN_FILE(__G_UTF8_C__)
+#undef g_get_charset 
+extern __typeof (g_get_charset) g_get_charset __attribute((alias("IA__g_get_charset"), visibility("default")));
+
+#undef g_ucs4_to_utf16 
+extern __typeof (g_ucs4_to_utf16) g_ucs4_to_utf16 __attribute((alias("IA__g_ucs4_to_utf16"), visibility("default")));
+
+#undef g_ucs4_to_utf8 
+extern __typeof (g_ucs4_to_utf8) g_ucs4_to_utf8 __attribute((alias("IA__g_ucs4_to_utf8"), visibility("default")));
+
+#undef g_utf16_to_ucs4 
+extern __typeof (g_utf16_to_ucs4) g_utf16_to_ucs4 __attribute((alias("IA__g_utf16_to_ucs4"), visibility("default")));
+
+#undef g_utf16_to_utf8 
+extern __typeof (g_utf16_to_utf8) g_utf16_to_utf8 __attribute((alias("IA__g_utf16_to_utf8"), visibility("default")));
+
+#undef g_utf8_find_next_char 
+extern __typeof (g_utf8_find_next_char) g_utf8_find_next_char __attribute((alias("IA__g_utf8_find_next_char"), visibility("default")));
+
+#undef g_utf8_find_prev_char 
+extern __typeof (g_utf8_find_prev_char) g_utf8_find_prev_char __attribute((alias("IA__g_utf8_find_prev_char"), visibility("default")));
+
+#undef g_utf8_get_char 
+extern __typeof (g_utf8_get_char) g_utf8_get_char __attribute((alias("IA__g_utf8_get_char"), visibility("default")));
+
+#undef g_utf8_get_char_validated 
+extern __typeof (g_utf8_get_char_validated) g_utf8_get_char_validated __attribute((alias("IA__g_utf8_get_char_validated"), visibility("default")));
+
+#undef g_utf8_offset_to_pointer 
+extern __typeof (g_utf8_offset_to_pointer) g_utf8_offset_to_pointer __attribute((alias("IA__g_utf8_offset_to_pointer"), visibility("default")));
+
+#undef g_utf8_pointer_to_offset 
+extern __typeof (g_utf8_pointer_to_offset) g_utf8_pointer_to_offset __attribute((alias("IA__g_utf8_pointer_to_offset"), visibility("default")));
+
+#undef g_utf8_prev_char 
+extern __typeof (g_utf8_prev_char) g_utf8_prev_char __attribute((alias("IA__g_utf8_prev_char"), visibility("default")));
+
+#undef g_utf8_strchr 
+extern __typeof (g_utf8_strchr) g_utf8_strchr __attribute((alias("IA__g_utf8_strchr"), visibility("default")));
+
+#undef g_utf8_strlen 
+extern __typeof (g_utf8_strlen) g_utf8_strlen __attribute((alias("IA__g_utf8_strlen"), visibility("default")));
+
+#undef g_utf8_strncpy 
+extern __typeof (g_utf8_strncpy) g_utf8_strncpy __attribute((alias("IA__g_utf8_strncpy"), visibility("default")));
+
+#undef g_utf8_strrchr 
+extern __typeof (g_utf8_strrchr) g_utf8_strrchr __attribute((alias("IA__g_utf8_strrchr"), visibility("default")));
+
+#undef g_utf8_strreverse 
+extern __typeof (g_utf8_strreverse) g_utf8_strreverse __attribute((alias("IA__g_utf8_strreverse"), visibility("default")));
+
+#undef g_utf8_to_ucs4 
+extern __typeof (g_utf8_to_ucs4) g_utf8_to_ucs4 __attribute((alias("IA__g_utf8_to_ucs4"), visibility("default")));
+
+#undef g_utf8_to_ucs4_fast 
+extern __typeof (g_utf8_to_ucs4_fast) g_utf8_to_ucs4_fast __attribute((alias("IA__g_utf8_to_ucs4_fast"), visibility("default")));
+
+#undef g_utf8_to_utf16 
+extern __typeof (g_utf8_to_utf16) g_utf8_to_utf16 __attribute((alias("IA__g_utf8_to_utf16"), visibility("default")));
+
+#undef g_utf8_validate 
+extern __typeof (g_utf8_validate) g_utf8_validate __attribute((alias("IA__g_utf8_validate"), visibility("default")));
+
+#undef g_unichar_to_utf8 
+extern __typeof (g_unichar_to_utf8) g_unichar_to_utf8 __attribute((alias("IA__g_unichar_to_utf8"), visibility("default")));
+
+#undef g_unichar_validate 
+extern __typeof (g_unichar_validate) g_unichar_validate __attribute((alias("IA__g_unichar_validate"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__GLIBINTL_H__)
+#if IN_FILE(__G_UTILS_C__)
+#undef glib_gettext 
+extern __typeof (glib_gettext) glib_gettext __attribute((alias("IA__glib_gettext"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_HASH_H__)
+#if IN_FILE(__G_UTILS_C__)
+#undef g_int_equal 
+extern __typeof (g_int_equal) g_int_equal __attribute((alias("IA__g_int_equal"), visibility("default")));
+
+#undef g_int_hash 
+extern __typeof (g_int_hash) g_int_hash __attribute((alias("IA__g_int_hash"), visibility("default")));
+
+#undef g_direct_equal 
+extern __typeof (g_direct_equal) g_direct_equal __attribute((alias("IA__g_direct_equal"), visibility("default")));
+
+#undef g_direct_hash 
+extern __typeof (g_direct_hash) g_direct_hash __attribute((alias("IA__g_direct_hash"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_UTILS_H__)
+#if IN_FILE(__G_UTILS_C__)
+#undef g_atexit 
+extern __typeof (g_atexit) g_atexit __attribute((alias("IA__g_atexit"), visibility("default")));
+
+#ifndef G_DISABLE_DEPRECATED
+#undef g_basename 
+extern __typeof (g_basename) g_basename __attribute((alias("IA__g_basename"), visibility("default")));
+
+#endif
+#undef g_get_application_name 
+extern __typeof (g_get_application_name) g_get_application_name __attribute((alias("IA__g_get_application_name"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_find_program_in_path 
+extern __typeof (g_find_program_in_path) g_find_program_in_path __attribute((alias("IA__g_find_program_in_path"), visibility("default")));
+
+#undef g_get_current_dir 
+extern __typeof (g_get_current_dir) g_get_current_dir __attribute((alias("IA__g_get_current_dir"), visibility("default")));
+
+#undef g_getenv 
+extern __typeof (g_getenv) g_getenv __attribute((alias("IA__g_getenv"), visibility("default")));
+
+#undef g_unsetenv 
+extern __typeof (g_unsetenv) g_unsetenv __attribute((alias("IA__g_unsetenv"), visibility("default")));
+
+#undef g_get_home_dir 
+extern __typeof (g_get_home_dir) g_get_home_dir __attribute((alias("IA__g_get_home_dir"), visibility("default")));
+
+#endif
+#undef g_get_host_name 
+extern __typeof (g_get_host_name) g_get_host_name __attribute((alias("IA__g_get_host_name"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_setenv 
+extern __typeof (g_setenv) g_setenv __attribute((alias("IA__g_setenv"), visibility("default")));
+
+#endif
+#undef g_listenv 
+extern __typeof (g_listenv) g_listenv __attribute((alias("IA__g_listenv"), visibility("default")));
+
+#ifdef G_OS_WIN32
+#undef g_find_program_in_path_utf8 
+extern __typeof (g_find_program_in_path_utf8) g_find_program_in_path_utf8 __attribute((alias("IA__g_find_program_in_path_utf8"), visibility("default")));
+
+#undef g_get_current_dir_utf8 
+extern __typeof (g_get_current_dir_utf8) g_get_current_dir_utf8 __attribute((alias("IA__g_get_current_dir_utf8"), visibility("default")));
+
+#undef g_getenv_utf8 
+extern __typeof (g_getenv_utf8) g_getenv_utf8 __attribute((alias("IA__g_getenv_utf8"), visibility("default")));
+
+#undef g_unsetenv_utf8 
+extern __typeof (g_unsetenv_utf8) g_unsetenv_utf8 __attribute((alias("IA__g_unsetenv_utf8"), visibility("default")));
+
+#undef g_setenv_utf8 
+extern __typeof (g_setenv_utf8) g_setenv_utf8 __attribute((alias("IA__g_setenv_utf8"), visibility("default")));
+
+#undef g_get_home_dir_utf8 
+extern __typeof (g_get_home_dir_utf8) g_get_home_dir_utf8 __attribute((alias("IA__g_get_home_dir_utf8"), visibility("default")));
+
+#endif
+#undef g_get_language_names 
+extern __typeof (g_get_language_names) g_get_language_names __attribute((alias("IA__g_get_language_names"), visibility("default")));
+
+#undef g_get_prgname 
+extern __typeof (g_get_prgname) g_get_prgname __attribute((alias("IA__g_get_prgname"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_get_real_name 
+extern __typeof (g_get_real_name) g_get_real_name __attribute((alias("IA__g_get_real_name"), visibility("default")));
+
+#endif
+#ifdef G_OS_WIN32
+#undef g_get_real_name_utf8 
+extern __typeof (g_get_real_name_utf8) g_get_real_name_utf8 __attribute((alias("IA__g_get_real_name_utf8"), visibility("default")));
+
+#endif
+#undef g_get_system_config_dirs 
+extern __typeof (g_get_system_config_dirs) g_get_system_config_dirs __attribute((alias("IA__g_get_system_config_dirs"), visibility("default")));
+
+#undef g_get_system_data_dirs 
+extern __typeof (g_get_system_data_dirs) g_get_system_data_dirs __attribute((alias("IA__g_get_system_data_dirs"), visibility("default")));
+
+#ifdef G_OS_WIN32
+#undef g_win32_get_system_data_dirs_for_module 
+extern __typeof (g_win32_get_system_data_dirs_for_module) g_win32_get_system_data_dirs_for_module __attribute((alias("IA__g_win32_get_system_data_dirs_for_module"), visibility("default")));
+
+#endif
+#ifndef _WIN64
+#undef g_get_tmp_dir 
+extern __typeof (g_get_tmp_dir) g_get_tmp_dir __attribute((alias("IA__g_get_tmp_dir"), visibility("default")));
+
+#endif
+#ifdef G_OS_WIN32
+#undef g_get_tmp_dir_utf8 
+extern __typeof (g_get_tmp_dir_utf8) g_get_tmp_dir_utf8 __attribute((alias("IA__g_get_tmp_dir_utf8"), visibility("default")));
+
+#endif
+#undef g_get_user_cache_dir 
+extern __typeof (g_get_user_cache_dir) g_get_user_cache_dir __attribute((alias("IA__g_get_user_cache_dir"), visibility("default")));
+
+#undef g_get_user_config_dir 
+extern __typeof (g_get_user_config_dir) g_get_user_config_dir __attribute((alias("IA__g_get_user_config_dir"), visibility("default")));
+
+#undef g_get_user_data_dir 
+extern __typeof (g_get_user_data_dir) g_get_user_data_dir __attribute((alias("IA__g_get_user_data_dir"), visibility("default")));
+
+#undef g_get_user_special_dir 
+extern __typeof (g_get_user_special_dir) g_get_user_special_dir __attribute((alias("IA__g_get_user_special_dir"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_get_user_name 
+extern __typeof (g_get_user_name) g_get_user_name __attribute((alias("IA__g_get_user_name"), visibility("default")));
+
+#endif
+#ifdef G_OS_WIN32
+#undef g_get_user_name_utf8 
+extern __typeof (g_get_user_name_utf8) g_get_user_name_utf8 __attribute((alias("IA__g_get_user_name_utf8"), visibility("default")));
+
+#endif
+#undef glib_check_version 
+extern __typeof (glib_check_version) glib_check_version __attribute((alias("IA__glib_check_version"), visibility("default")));
+
+#undef g_nullify_pointer 
+extern __typeof (g_nullify_pointer) g_nullify_pointer __attribute((alias("IA__g_nullify_pointer"), visibility("default")));
+
+#undef g_parse_debug_string 
+extern __typeof (g_parse_debug_string) g_parse_debug_string __attribute((alias("IA__g_parse_debug_string"), visibility("default")));
+
+#undef g_path_get_basename 
+extern __typeof (g_path_get_basename) g_path_get_basename __attribute((alias("IA__g_path_get_basename"), visibility("default")));
+
+#undef g_path_get_dirname 
+extern __typeof (g_path_get_dirname) g_path_get_dirname __attribute((alias("IA__g_path_get_dirname"), visibility("default")));
+
+#undef g_path_is_absolute 
+extern __typeof (g_path_is_absolute) g_path_is_absolute __attribute((alias("IA__g_path_is_absolute"), visibility("default")));
+
+#undef g_path_skip_root 
+extern __typeof (g_path_skip_root) g_path_skip_root __attribute((alias("IA__g_path_skip_root"), visibility("default")));
+
+#undef g_set_application_name 
+extern __typeof (g_set_application_name) g_set_application_name __attribute((alias("IA__g_set_application_name"), visibility("default")));
+
+#undef g_set_prgname 
+extern __typeof (g_set_prgname) g_set_prgname __attribute((alias("IA__g_set_prgname"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_REGEX_H__)
+#if IN_FILE(__G_REGEX_C__)
+#undef g_regex_error_quark 
+extern __typeof (g_regex_error_quark) g_regex_error_quark __attribute((alias("IA__g_regex_error_quark"), visibility("default")));
+
+#undef g_regex_new 
+extern __typeof (g_regex_new) g_regex_new __attribute((alias("IA__g_regex_new"), visibility("default")));
+
+#undef g_regex_ref 
+extern __typeof (g_regex_ref) g_regex_ref __attribute((alias("IA__g_regex_ref"), visibility("default")));
+
+#undef g_regex_unref 
+extern __typeof (g_regex_unref) g_regex_unref __attribute((alias("IA__g_regex_unref"), visibility("default")));
+
+#undef g_regex_get_pattern 
+extern __typeof (g_regex_get_pattern) g_regex_get_pattern __attribute((alias("IA__g_regex_get_pattern"), visibility("default")));
+
+#undef g_regex_get_max_backref 
+extern __typeof (g_regex_get_max_backref) g_regex_get_max_backref __attribute((alias("IA__g_regex_get_max_backref"), visibility("default")));
+
+#undef g_regex_get_capture_count 
+extern __typeof (g_regex_get_capture_count) g_regex_get_capture_count __attribute((alias("IA__g_regex_get_capture_count"), visibility("default")));
+
+#undef g_regex_get_string_number 
+extern __typeof (g_regex_get_string_number) g_regex_get_string_number __attribute((alias("IA__g_regex_get_string_number"), visibility("default")));
+
+#undef g_regex_escape_string 
+extern __typeof (g_regex_escape_string) g_regex_escape_string __attribute((alias("IA__g_regex_escape_string"), visibility("default")));
+
+#undef g_regex_match_simple 
+extern __typeof (g_regex_match_simple) g_regex_match_simple __attribute((alias("IA__g_regex_match_simple"), visibility("default")));
+
+#undef g_regex_match 
+extern __typeof (g_regex_match) g_regex_match __attribute((alias("IA__g_regex_match"), visibility("default")));
+
+#undef g_regex_match_full 
+extern __typeof (g_regex_match_full) g_regex_match_full __attribute((alias("IA__g_regex_match_full"), visibility("default")));
+
+#undef g_regex_match_all 
+extern __typeof (g_regex_match_all) g_regex_match_all __attribute((alias("IA__g_regex_match_all"), visibility("default")));
+
+#undef g_regex_match_all_full 
+extern __typeof (g_regex_match_all_full) g_regex_match_all_full __attribute((alias("IA__g_regex_match_all_full"), visibility("default")));
+
+#undef g_regex_split_simple 
+extern __typeof (g_regex_split_simple) g_regex_split_simple __attribute((alias("IA__g_regex_split_simple"), visibility("default")));
+
+#undef g_regex_split 
+extern __typeof (g_regex_split) g_regex_split __attribute((alias("IA__g_regex_split"), visibility("default")));
+
+#undef g_regex_split_full 
+extern __typeof (g_regex_split_full) g_regex_split_full __attribute((alias("IA__g_regex_split_full"), visibility("default")));
+
+#undef g_regex_replace 
+extern __typeof (g_regex_replace) g_regex_replace __attribute((alias("IA__g_regex_replace"), visibility("default")));
+
+#undef g_regex_replace_literal 
+extern __typeof (g_regex_replace_literal) g_regex_replace_literal __attribute((alias("IA__g_regex_replace_literal"), visibility("default")));
+
+#undef g_regex_replace_eval 
+extern __typeof (g_regex_replace_eval) g_regex_replace_eval __attribute((alias("IA__g_regex_replace_eval"), visibility("default")));
+
+#undef g_regex_check_replacement 
+extern __typeof (g_regex_check_replacement) g_regex_check_replacement __attribute((alias("IA__g_regex_check_replacement"), visibility("default")));
+
+#undef g_match_info_get_regex 
+extern __typeof (g_match_info_get_regex) g_match_info_get_regex __attribute((alias("IA__g_match_info_get_regex"), visibility("default")));
+
+#undef g_match_info_get_string 
+extern __typeof (g_match_info_get_string) g_match_info_get_string __attribute((alias("IA__g_match_info_get_string"), visibility("default")));
+
+#undef g_match_info_free 
+extern __typeof (g_match_info_free) g_match_info_free __attribute((alias("IA__g_match_info_free"), visibility("default")));
+
+#undef g_match_info_next 
+extern __typeof (g_match_info_next) g_match_info_next __attribute((alias("IA__g_match_info_next"), visibility("default")));
+
+#undef g_match_info_matches 
+extern __typeof (g_match_info_matches) g_match_info_matches __attribute((alias("IA__g_match_info_matches"), visibility("default")));
+
+#undef g_match_info_get_match_count 
+extern __typeof (g_match_info_get_match_count) g_match_info_get_match_count __attribute((alias("IA__g_match_info_get_match_count"), visibility("default")));
+
+#undef g_match_info_is_partial_match 
+extern __typeof (g_match_info_is_partial_match) g_match_info_is_partial_match __attribute((alias("IA__g_match_info_is_partial_match"), visibility("default")));
+
+#undef g_match_info_expand_references 
+extern __typeof (g_match_info_expand_references) g_match_info_expand_references __attribute((alias("IA__g_match_info_expand_references"), visibility("default")));
+
+#undef g_match_info_fetch 
+extern __typeof (g_match_info_fetch) g_match_info_fetch __attribute((alias("IA__g_match_info_fetch"), visibility("default")));
+
+#undef g_match_info_fetch_pos 
+extern __typeof (g_match_info_fetch_pos) g_match_info_fetch_pos __attribute((alias("IA__g_match_info_fetch_pos"), visibility("default")));
+
+#undef g_match_info_fetch_named 
+extern __typeof (g_match_info_fetch_named) g_match_info_fetch_named __attribute((alias("IA__g_match_info_fetch_named"), visibility("default")));
+
+#undef g_match_info_fetch_named_pos 
+extern __typeof (g_match_info_fetch_named_pos) g_match_info_fetch_named_pos __attribute((alias("IA__g_match_info_fetch_named_pos"), visibility("default")));
+
+#undef g_match_info_fetch_all 
+extern __typeof (g_match_info_fetch_all) g_match_info_fetch_all __attribute((alias("IA__g_match_info_fetch_all"), visibility("default")));
+
+#endif
+#endif
+#if IN_HEADER(__G_WIN32_H__)
+#if IN_FILE(__G_WIN32_H__)
+#ifdef G_OS_WIN32
+#undef g_win32_error_message 
+extern __typeof (g_win32_error_message) g_win32_error_message __attribute((alias("IA__g_win32_error_message"), visibility("default")));
+
+#undef g_win32_ftruncate 
+extern __typeof (g_win32_ftruncate) g_win32_ftruncate __attribute((alias("IA__g_win32_ftruncate"), visibility("default")));
+
+#undef g_win32_get_package_installation_directory_of_module 
+extern __typeof (g_win32_get_package_installation_directory_of_module) g_win32_get_package_installation_directory_of_module __attribute((alias("IA__g_win32_get_package_installation_directory_of_module"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_win32_get_package_installation_directory 
+extern __typeof (g_win32_get_package_installation_directory) g_win32_get_package_installation_directory __attribute((alias("IA__g_win32_get_package_installation_directory"), visibility("default")));
+
+#endif
+#undef g_win32_get_package_installation_directory_utf8 
+extern __typeof (g_win32_get_package_installation_directory_utf8) g_win32_get_package_installation_directory_utf8 __attribute((alias("IA__g_win32_get_package_installation_directory_utf8"), visibility("default")));
+
+#ifndef _WIN64
+#undef g_win32_get_package_installation_subdirectory 
+extern __typeof (g_win32_get_package_installation_subdirectory) g_win32_get_package_installation_subdirectory __attribute((alias("IA__g_win32_get_package_installation_subdirectory"), visibility("default")));
+
+#endif
+#undef g_win32_get_package_installation_subdirectory_utf8 
+extern __typeof (g_win32_get_package_installation_subdirectory_utf8) g_win32_get_package_installation_subdirectory_utf8 __attribute((alias("IA__g_win32_get_package_installation_subdirectory_utf8"), visibility("default")));
+
+#undef g_win32_get_windows_version 
+extern __typeof (g_win32_get_windows_version) g_win32_get_windows_version __attribute((alias("IA__g_win32_get_windows_version"), visibility("default")));
+
+#undef g_win32_getlocale 
+extern __typeof (g_win32_getlocale) g_win32_getlocale __attribute((alias("IA__g_win32_getlocale"), visibility("default")));
+
+#undef g_win32_locale_filename_from_utf8 
+extern __typeof (g_win32_locale_filename_from_utf8) g_win32_locale_filename_from_utf8 __attribute((alias("IA__g_win32_locale_filename_from_utf8"), visibility("default")));
+
+#endif
+#endif
+#endif
+
+#endif /* G_HAVE_GNUC_VISIBILITY */
+#endif /* DISABLE_VISIBILITY */
diff --git a/glib/galloca.h b/glib/galloca.h
new file mode 100644
index 0000000..356587f
--- /dev/null
+++ b/glib/galloca.h
@@ -0,0 +1,63 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_ALLOCA_H__
+#define __G_ALLOCA_H__
+
+#include <glib/gtypes.h>
+
+#ifdef  __GNUC__
+/* GCC does the right thing */
+# undef alloca
+# define alloca(size)   __builtin_alloca (size)
+#elif defined (GLIB_HAVE_ALLOCA_H)
+/* a native and working alloca.h is there */ 
+# include <alloca.h>
+#else /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */
+# if defined(_MSC_VER) || defined(__DMC__)
+#  include <malloc.h>
+#  define alloca _alloca
+# else /* !_MSC_VER && !__DMC__ */
+#  ifdef _AIX
+#   pragma alloca
+#  else /* !_AIX */
+#   ifndef alloca /* predefined by HP cc +Olibcalls */
+G_BEGIN_DECLS
+char *alloca ();
+G_END_DECLS
+#   endif /* !alloca */
+#  endif /* !_AIX */
+# endif /* !_MSC_VER && !__DMC__ */
+#endif /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */
+
+#define g_alloca(size)		 alloca (size)
+#define g_newa(struct_type, n_structs)	((struct_type*) g_alloca (sizeof (struct_type) * (gsize) (n_structs)))
+
+#endif /* __G_ALLOCA_H__ */
diff --git a/glib/garray.c b/glib/garray.c
new file mode 100644
index 0000000..b05ded6
--- /dev/null
+++ b/glib/garray.c
@@ -0,0 +1,719 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "garray.h"
+
+#include "gmem.h"
+#include "gthread.h"
+#include "gmessages.h"
+#include "gqsort.h"
+
+#include "galias.h"
+
+
+#define MIN_ARRAY_SIZE  16
+
+typedef struct _GRealArray  GRealArray;
+
+struct _GRealArray
+{
+  guint8 *data;
+  guint   len;
+  guint   alloc;
+  guint   elt_size;
+  guint   zero_terminated : 1;
+  guint   clear : 1;
+};
+
+#define g_array_elt_len(array,i) ((array)->elt_size * (i))
+#define g_array_elt_pos(array,i) ((array)->data + g_array_elt_len((array),(i)))
+#define g_array_elt_zero(array, pos, len) 				\
+  (memset (g_array_elt_pos ((array), pos), 0,  g_array_elt_len ((array), len)))
+#define g_array_zero_terminate(array) G_STMT_START{			\
+  if ((array)->zero_terminated)						\
+    g_array_elt_zero ((array), (array)->len, 1);			\
+}G_STMT_END
+
+static gint g_nearest_pow        (gint        num) G_GNUC_CONST;
+static void g_array_maybe_expand (GRealArray *array,
+				  gint        len);
+
+GArray*
+g_array_new (gboolean zero_terminated,
+	     gboolean clear,
+	     guint    elt_size)
+{
+  return (GArray*) g_array_sized_new (zero_terminated, clear, elt_size, 0);
+}
+
+GArray* g_array_sized_new (gboolean zero_terminated,
+			   gboolean clear,
+			   guint    elt_size,
+			   guint    reserved_size)
+{
+  GRealArray *array = g_slice_new (GRealArray);
+
+  array->data            = NULL;
+  array->len             = 0;
+  array->alloc           = 0;
+  array->zero_terminated = (zero_terminated ? 1 : 0);
+  array->clear           = (clear ? 1 : 0);
+  array->elt_size        = elt_size;
+
+  if (array->zero_terminated || reserved_size != 0)
+    {
+      g_array_maybe_expand (array, reserved_size);
+      g_array_zero_terminate(array);
+    }
+
+  return (GArray*) array;
+}
+
+gchar*
+g_array_free (GArray   *array,
+	      gboolean  free_segment)
+{
+  gchar* segment;
+
+  g_return_val_if_fail (array, NULL);
+
+  if (free_segment)
+    {
+      g_free (array->data);
+      segment = NULL;
+    }
+  else
+    segment = array->data;
+
+  g_slice_free1 (sizeof (GRealArray), array);
+
+  return segment;
+}
+
+GArray*
+g_array_append_vals (GArray       *farray,
+		     gconstpointer data,
+		     guint         len)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_array_maybe_expand (array, len);
+
+  memcpy (g_array_elt_pos (array, array->len), data, 
+	  g_array_elt_len (array, len));
+
+  array->len += len;
+
+  g_array_zero_terminate (array);
+
+  return farray;
+}
+
+GArray*
+g_array_prepend_vals (GArray        *farray,
+		      gconstpointer  data,
+		      guint          len)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_array_maybe_expand (array, len);
+
+  g_memmove (g_array_elt_pos (array, len), g_array_elt_pos (array, 0), 
+	     g_array_elt_len (array, array->len));
+
+  memcpy (g_array_elt_pos (array, 0), data, g_array_elt_len (array, len));
+
+  array->len += len;
+
+  g_array_zero_terminate (array);
+
+  return farray;
+}
+
+GArray*
+g_array_insert_vals (GArray        *farray,
+		     guint          index_,
+		     gconstpointer  data,
+		     guint          len)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_array_maybe_expand (array, len);
+
+  g_memmove (g_array_elt_pos (array, len + index_), 
+	     g_array_elt_pos (array, index_), 
+	     g_array_elt_len (array, array->len - index_));
+
+  memcpy (g_array_elt_pos (array, index_), data, g_array_elt_len (array, len));
+
+  array->len += len;
+
+  g_array_zero_terminate (array);
+
+  return farray;
+}
+
+GArray*
+g_array_set_size (GArray *farray,
+		  guint   length)
+{
+  GRealArray *array = (GRealArray*) farray;
+  if (length > array->len)
+    {
+      g_array_maybe_expand (array, length - array->len);
+      
+      if (array->clear)
+	g_array_elt_zero (array, array->len, length - array->len);
+    }
+  else if (G_UNLIKELY (g_mem_gc_friendly) && length < array->len)
+    g_array_elt_zero (array, length, array->len - length);
+  
+  array->len = length;
+  
+  g_array_zero_terminate (array);
+  
+  return farray;
+}
+
+GArray*
+g_array_remove_index (GArray *farray,
+		      guint   index_)
+{
+  GRealArray* array = (GRealArray*) farray;
+
+  g_return_val_if_fail (array, NULL);
+
+  g_return_val_if_fail (index_ < array->len, NULL);
+
+  if (index_ != array->len - 1)
+    g_memmove (g_array_elt_pos (array, index_),
+	       g_array_elt_pos (array, index_ + 1),
+	       g_array_elt_len (array, array->len - index_ - 1));
+  
+  array->len -= 1;
+
+  if (G_UNLIKELY (g_mem_gc_friendly))
+    g_array_elt_zero (array, array->len, 1);
+  else
+    g_array_zero_terminate (array);
+
+  return farray;
+}
+
+GArray*
+g_array_remove_index_fast (GArray *farray,
+			   guint   index_)
+{
+  GRealArray* array = (GRealArray*) farray;
+
+  g_return_val_if_fail (array, NULL);
+
+  g_return_val_if_fail (index_ < array->len, NULL);
+
+  if (index_ != array->len - 1)
+    memcpy (g_array_elt_pos (array, index_), 
+	    g_array_elt_pos (array, array->len - 1),
+	    g_array_elt_len (array, 1));
+  
+  array->len -= 1;
+
+  if (G_UNLIKELY (g_mem_gc_friendly))
+    g_array_elt_zero (array, array->len, 1);
+  else
+    g_array_zero_terminate (array);
+
+  return farray;
+}
+
+GArray*
+g_array_remove_range (GArray *farray,
+                      guint   index_,
+                      guint   length)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_return_val_if_fail (array, NULL);
+  g_return_val_if_fail (index_ < array->len, NULL);
+  g_return_val_if_fail (index_ + length <= array->len, NULL);
+
+  if (index_ + length != array->len)
+    g_memmove (g_array_elt_pos (array, index_), 
+               g_array_elt_pos (array, index_ + length), 
+               (array->len - (index_ + length)) * array->elt_size);
+
+  array->len -= length;
+  if (G_UNLIKELY (g_mem_gc_friendly))
+    g_array_elt_zero (array, array->len, length);
+  else
+    g_array_zero_terminate (array);
+
+  return farray;
+}
+
+void
+g_array_sort (GArray       *farray,
+	      GCompareFunc  compare_func)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_return_if_fail (array != NULL);
+
+  qsort (array->data,
+	 array->len,
+	 array->elt_size,
+	 compare_func);
+}
+
+void
+g_array_sort_with_data (GArray           *farray,
+			GCompareDataFunc  compare_func,
+			gpointer          user_data)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_return_if_fail (array != NULL);
+
+  g_qsort_with_data (array->data,
+		     array->len,
+		     array->elt_size,
+		     compare_func,
+		     user_data);
+}
+
+
+static gint
+g_nearest_pow (gint num)
+{
+  gint n = 1;
+
+  while (n < num)
+    n <<= 1;
+
+  return n;
+}
+
+static void
+g_array_maybe_expand (GRealArray *array,
+		      gint        len)
+{
+  guint want_alloc = g_array_elt_len (array, array->len + len + 
+				      array->zero_terminated);
+
+  if (want_alloc > array->alloc)
+    {
+      want_alloc = g_nearest_pow (want_alloc);
+      want_alloc = MAX (want_alloc, MIN_ARRAY_SIZE);
+
+      array->data = g_realloc (array->data, want_alloc);
+
+      if (G_UNLIKELY (g_mem_gc_friendly))
+        memset (array->data + array->alloc, 0, want_alloc - array->alloc);
+
+      array->alloc = want_alloc;
+    }
+}
+
+/* Pointer Array
+ */
+
+typedef struct _GRealPtrArray  GRealPtrArray;
+
+struct _GRealPtrArray
+{
+  gpointer *pdata;
+  guint     len;
+  guint     alloc;
+};
+
+static void g_ptr_array_maybe_expand (GRealPtrArray *array,
+				      gint           len);
+
+GPtrArray*
+g_ptr_array_new (void)
+{
+  return g_ptr_array_sized_new (0);
+}
+
+GPtrArray*  
+g_ptr_array_sized_new (guint reserved_size)
+{
+  GRealPtrArray *array = g_slice_new (GRealPtrArray);
+
+  array->pdata = NULL;
+  array->len = 0;
+  array->alloc = 0;
+
+  if (reserved_size != 0)
+    g_ptr_array_maybe_expand (array, reserved_size);
+
+  return (GPtrArray*) array;  
+}
+
+gpointer*
+g_ptr_array_free (GPtrArray *array,
+		  gboolean   free_segment)
+{
+  gpointer* segment;
+
+  g_return_val_if_fail (array, NULL);
+
+  if (free_segment)
+    {
+      g_free (array->pdata);
+      segment = NULL;
+    }
+  else
+    segment = array->pdata;
+
+  g_slice_free1 (sizeof (GRealPtrArray), array);
+
+  return segment;
+}
+
+static void
+g_ptr_array_maybe_expand (GRealPtrArray *array,
+			  gint           len)
+{
+  if ((array->len + len) > array->alloc)
+    {
+      guint old_alloc = array->alloc;
+      array->alloc = g_nearest_pow (array->len + len);
+      array->alloc = MAX (array->alloc, MIN_ARRAY_SIZE);
+      array->pdata = g_realloc (array->pdata, sizeof (gpointer) * array->alloc);
+      if (G_UNLIKELY (g_mem_gc_friendly))
+        for ( ; old_alloc < array->alloc; old_alloc++)
+          array->pdata [old_alloc] = NULL;
+    }
+}
+
+void
+g_ptr_array_set_size  (GPtrArray *farray,
+		       gint	  length)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+
+  g_return_if_fail (array);
+
+  if (length > array->len)
+    {
+      int i;
+      g_ptr_array_maybe_expand (array, (length - array->len));
+      /* This is not 
+       *     memset (array->pdata + array->len, 0,
+       *            sizeof (gpointer) * (length - array->len));
+       * to make it really portable. Remember (void*)NULL needn't be
+       * bitwise zero. It of course is silly not to use memset (..,0,..).
+       */
+      for (i = array->len; i < length; i++)
+	array->pdata[i] = NULL;
+    }
+  if (G_UNLIKELY (g_mem_gc_friendly) && length < array->len)
+    {
+      int i;
+      for (i = length; i < array->len; i++)
+	array->pdata[i] = NULL;
+    }
+
+  array->len = length;
+}
+
+gpointer
+g_ptr_array_remove_index (GPtrArray *farray,
+			  guint      index_)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+  gpointer result;
+
+  g_return_val_if_fail (array, NULL);
+
+  g_return_val_if_fail (index_ < array->len, NULL);
+
+  result = array->pdata[index_];
+  
+  if (index_ != array->len - 1)
+    g_memmove (array->pdata + index_, array->pdata + index_ + 1, 
+	       sizeof (gpointer) * (array->len - index_ - 1));
+  
+  array->len -= 1;
+
+  if (G_UNLIKELY (g_mem_gc_friendly))
+    array->pdata[array->len] = NULL;
+
+  return result;
+}
+
+gpointer
+g_ptr_array_remove_index_fast (GPtrArray *farray,
+			       guint      index_)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+  gpointer result;
+
+  g_return_val_if_fail (array, NULL);
+
+  g_return_val_if_fail (index_ < array->len, NULL);
+
+  result = array->pdata[index_];
+  
+  if (index_ != array->len - 1)
+    array->pdata[index_] = array->pdata[array->len - 1];
+
+  array->len -= 1;
+
+  if (G_UNLIKELY (g_mem_gc_friendly))
+    array->pdata[array->len] = NULL;
+
+  return result;
+}
+
+void
+g_ptr_array_remove_range (GPtrArray *farray,
+                          guint      index_,
+                          guint      length)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+
+  g_return_if_fail (array);
+  g_return_if_fail (index_ < array->len);
+  g_return_if_fail (index_ + length <= array->len);
+
+  if (index_ + length != array->len)
+    g_memmove (&array->pdata[index_],
+               &array->pdata[index_ + length], 
+               (array->len - (index_ + length)) * sizeof (gpointer));
+
+  array->len -= length;
+  if (G_UNLIKELY (g_mem_gc_friendly))
+    {
+      guint i;
+      for (i = 0; i < length; i++)
+        array->pdata[array->len + i] = NULL;
+    }
+}
+
+gboolean
+g_ptr_array_remove (GPtrArray *farray,
+		    gpointer   data)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+  guint i;
+
+  g_return_val_if_fail (array, FALSE);
+
+  for (i = 0; i < array->len; i += 1)
+    {
+      if (array->pdata[i] == data)
+	{
+	  g_ptr_array_remove_index (farray, i);
+	  return TRUE;
+	}
+    }
+
+  return FALSE;
+}
+
+gboolean
+g_ptr_array_remove_fast (GPtrArray *farray,
+			 gpointer   data)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+  guint i;
+
+  g_return_val_if_fail (array, FALSE);
+
+  for (i = 0; i < array->len; i += 1)
+    {
+      if (array->pdata[i] == data)
+	{
+	  g_ptr_array_remove_index_fast (farray, i);
+	  return TRUE;
+	}
+    }
+
+  return FALSE;
+}
+
+void
+g_ptr_array_add (GPtrArray *farray,
+		 gpointer   data)
+{
+  GRealPtrArray* array = (GRealPtrArray*) farray;
+
+  g_return_if_fail (array);
+
+  g_ptr_array_maybe_expand (array, 1);
+
+  array->pdata[array->len++] = data;
+}
+
+void
+g_ptr_array_sort (GPtrArray    *array,
+		  GCompareFunc  compare_func)
+{
+  g_return_if_fail (array != NULL);
+
+  qsort (array->pdata,
+	 array->len,
+	 sizeof (gpointer),
+	 compare_func);
+}
+
+void
+g_ptr_array_sort_with_data (GPtrArray        *array,
+			    GCompareDataFunc  compare_func,
+			    gpointer          user_data)
+{
+  g_return_if_fail (array != NULL);
+
+  g_qsort_with_data (array->pdata,
+		     array->len,
+		     sizeof (gpointer),
+		     compare_func,
+		     user_data);
+}
+
+/**
+ * g_ptr_array_foreach:
+ * @array: a #GPtrArray
+ * @func: the function to call for each array element
+ * @user_data: user data to pass to the function
+ * 
+ * Calls a function for each element of a #GPtrArray.
+ *
+ * Since: 2.4
+ **/
+void
+g_ptr_array_foreach (GPtrArray *array,
+                     GFunc      func,
+                     gpointer   user_data)
+{
+  guint i;
+
+  g_return_if_fail (array);
+
+  for (i = 0; i < array->len; i++)
+    (*func) (array->pdata[i], user_data);
+}
+
+/* Byte arrays 
+ */
+
+GByteArray* g_byte_array_new (void)
+{
+  return (GByteArray*) g_array_sized_new (FALSE, FALSE, 1, 0);
+}
+
+GByteArray* g_byte_array_sized_new (guint reserved_size)
+{
+  return (GByteArray*) g_array_sized_new (FALSE, FALSE, 1, reserved_size);
+}
+
+guint8*	    g_byte_array_free     (GByteArray *array,
+			           gboolean    free_segment)
+{
+  return (guint8*) g_array_free ((GArray*) array, free_segment);
+}
+
+GByteArray* g_byte_array_append   (GByteArray   *array,
+				   const guint8 *data,
+				   guint         len)
+{
+  g_array_append_vals ((GArray*) array, (guint8*)data, len);
+
+  return array;
+}
+
+GByteArray* g_byte_array_prepend  (GByteArray   *array,
+				   const guint8 *data,
+				   guint         len)
+{
+  g_array_prepend_vals ((GArray*) array, (guint8*)data, len);
+
+  return array;
+}
+
+GByteArray* g_byte_array_set_size (GByteArray *array,
+				   guint       length)
+{
+  g_array_set_size ((GArray*) array, length);
+
+  return array;
+}
+
+GByteArray* g_byte_array_remove_index (GByteArray *array,
+				       guint       index_)
+{
+  g_array_remove_index ((GArray*) array, index_);
+
+  return array;
+}
+
+GByteArray* g_byte_array_remove_index_fast (GByteArray *array,
+					    guint       index_)
+{
+  g_array_remove_index_fast ((GArray*) array, index_);
+
+  return array;
+}
+
+GByteArray*
+g_byte_array_remove_range (GByteArray *array,
+                           guint       index_,
+                           guint       length)
+{
+  g_return_val_if_fail (array, NULL);
+  g_return_val_if_fail (index_ < array->len, NULL);
+  g_return_val_if_fail (index_ + length <= array->len, NULL);
+
+  return (GByteArray *)g_array_remove_range ((GArray*) array, index_, length);
+}
+
+void
+g_byte_array_sort (GByteArray   *array,
+		   GCompareFunc  compare_func)
+{
+  g_array_sort ((GArray *) array, compare_func);
+}
+
+void
+g_byte_array_sort_with_data (GByteArray       *array,
+			     GCompareDataFunc  compare_func,
+			     gpointer          user_data)
+{
+  g_array_sort_with_data ((GArray *) array, compare_func, user_data);
+}
+
+#define __G_ARRAY_C__
+#include "galiasdef.c"
diff --git a/glib/garray.h b/glib/garray.h
new file mode 100644
index 0000000..db00137
--- /dev/null
+++ b/glib/garray.h
@@ -0,0 +1,169 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_ARRAY_H__
+#define __G_ARRAY_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GArray		GArray;
+typedef struct _GByteArray	GByteArray;
+typedef struct _GPtrArray	GPtrArray;
+
+struct _GArray
+{
+  gchar *data;
+  guint len;
+};
+
+struct _GByteArray
+{
+  guint8 *data;
+  guint	  len;
+};
+
+struct _GPtrArray
+{
+  gpointer *pdata;
+  guint	    len;
+};
+
+/* Resizable arrays. remove fills any cleared spot and shortens the
+ * array, while preserving the order. remove_fast will distort the
+ * order by moving the last element to the position of the removed.
+ */
+
+#define g_array_append_val(a,v)	  g_array_append_vals (a, &(v), 1)
+#define g_array_prepend_val(a,v)  g_array_prepend_vals (a, &(v), 1)
+#define g_array_insert_val(a,i,v) g_array_insert_vals (a, i, &(v), 1)
+#define g_array_index(a,t,i)      (((t*) (void *) (a)->data) [(i)])
+
+GArray* g_array_new               (gboolean          zero_terminated,
+				   gboolean          clear_,
+				   guint             element_size);
+GArray* g_array_sized_new         (gboolean          zero_terminated,
+				   gboolean          clear_,
+				   guint             element_size,
+				   guint             reserved_size);
+gchar*  g_array_free              (GArray           *array,
+				   gboolean          free_segment);
+GArray* g_array_append_vals       (GArray           *array,
+				   gconstpointer     data,
+				   guint             len);
+GArray* g_array_prepend_vals      (GArray           *array,
+				   gconstpointer     data,
+				   guint             len);
+GArray* g_array_insert_vals       (GArray           *array,
+				   guint             index_,
+				   gconstpointer     data,
+				   guint             len);
+GArray* g_array_set_size          (GArray           *array,
+				   guint             length);
+GArray* g_array_remove_index      (GArray           *array,
+				   guint             index_);
+GArray* g_array_remove_index_fast (GArray           *array,
+				   guint             index_);
+GArray* g_array_remove_range      (GArray           *array,
+				   guint             index_,
+				   guint             length);
+void    g_array_sort              (GArray           *array,
+				   GCompareFunc      compare_func);
+void    g_array_sort_with_data    (GArray           *array,
+				   GCompareDataFunc  compare_func,
+				   gpointer          user_data);
+
+/* Resizable pointer array.  This interface is much less complicated
+ * than the above.  Add appends a pointer.  Remove fills any cleared 
+ * spot and shortens the array. remove_fast will again distort order.  
+ */
+#define    g_ptr_array_index(array,index_) ((array)->pdata)[index_]
+GPtrArray* g_ptr_array_new                (void);
+GPtrArray* g_ptr_array_sized_new          (guint             reserved_size);
+gpointer*  g_ptr_array_free               (GPtrArray        *array,
+					   gboolean          free_seg);
+void       g_ptr_array_set_size           (GPtrArray        *array,
+					   gint              length);
+gpointer   g_ptr_array_remove_index       (GPtrArray        *array,
+					   guint             index_);
+gpointer   g_ptr_array_remove_index_fast  (GPtrArray        *array,
+					   guint             index_);
+gboolean   g_ptr_array_remove             (GPtrArray        *array,
+					   gpointer          data);
+gboolean   g_ptr_array_remove_fast        (GPtrArray        *array,
+					   gpointer          data);
+void       g_ptr_array_remove_range       (GPtrArray        *array,
+					   guint             index_,
+					   guint             length);
+void       g_ptr_array_add                (GPtrArray        *array,
+					   gpointer          data);
+void       g_ptr_array_sort               (GPtrArray        *array,
+					   GCompareFunc      compare_func);
+void       g_ptr_array_sort_with_data     (GPtrArray        *array,
+					   GCompareDataFunc  compare_func,
+					   gpointer          user_data);
+void       g_ptr_array_foreach            (GPtrArray        *array,
+					   GFunc             func,
+					   gpointer          user_data);
+
+
+/* Byte arrays, an array of guint8.  Implemented as a GArray,
+ * but type-safe.
+ */
+
+GByteArray* g_byte_array_new               (void);
+GByteArray* g_byte_array_sized_new         (guint             reserved_size);
+guint8*     g_byte_array_free              (GByteArray       *array,
+					    gboolean          free_segment);
+GByteArray* g_byte_array_append            (GByteArray       *array,
+					    const guint8     *data,
+					    guint             len);
+GByteArray* g_byte_array_prepend           (GByteArray       *array,
+					    const guint8     *data,
+					    guint             len);
+GByteArray* g_byte_array_set_size          (GByteArray       *array,
+					    guint             length);
+GByteArray* g_byte_array_remove_index      (GByteArray       *array,
+					    guint             index_);
+GByteArray* g_byte_array_remove_index_fast (GByteArray       *array,
+					    guint             index_);
+GByteArray* g_byte_array_remove_range      (GByteArray       *array,
+					    guint             index_,
+					    guint             length);
+void        g_byte_array_sort              (GByteArray       *array,
+					    GCompareFunc      compare_func);
+void        g_byte_array_sort_with_data    (GByteArray       *array,
+					    GCompareDataFunc  compare_func,
+					    gpointer          user_data);
+
+G_END_DECLS
+
+#endif /* __G_ARRAY_H__ */
diff --git a/glib/gasyncqueue.h b/glib/gasyncqueue.h
new file mode 100644
index 0000000..9da43e3
--- /dev/null
+++ b/glib/gasyncqueue.h
@@ -0,0 +1,120 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_ASYNCQUEUE_H__
+#define __G_ASYNCQUEUE_H__
+
+#include <glib/gthread.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GAsyncQueue GAsyncQueue;
+
+/* Asyncronous Queues, can be used to communicate between threads */
+
+/* Get a new GAsyncQueue with the ref_count 1 */
+GAsyncQueue*  g_async_queue_new                 (void);
+
+GAsyncQueue*  g_async_queue_new_full            (GDestroyNotify item_free_func);
+
+/* Lock and unlock a GAsyncQueue. All functions lock the queue for
+ * themselves, but in certain cirumstances you want to hold the lock longer,
+ * thus you lock the queue, call the *_unlocked functions and unlock it again.
+ */
+void         g_async_queue_lock                 (GAsyncQueue      *queue);
+void         g_async_queue_unlock               (GAsyncQueue      *queue);
+
+/* Ref and unref the GAsyncQueue. */
+GAsyncQueue* g_async_queue_ref                  (GAsyncQueue      *queue);
+void         g_async_queue_unref                (GAsyncQueue      *queue);
+
+#ifndef G_DISABLE_DEPRECATED
+/* You don't have to hold the lock for calling *_ref and *_unref anymore. */
+void         g_async_queue_ref_unlocked         (GAsyncQueue      *queue);
+void         g_async_queue_unref_and_unlock     (GAsyncQueue      *queue);
+#endif /* !G_DISABLE_DEPRECATED */
+
+/* Push data into the async queue. Must not be NULL. */
+void         g_async_queue_push                 (GAsyncQueue      *queue,
+						 gpointer          data);
+void         g_async_queue_push_unlocked        (GAsyncQueue      *queue,
+						 gpointer          data);
+
+void         g_async_queue_push_sorted          (GAsyncQueue      *queue,
+						 gpointer          data,
+						 GCompareDataFunc  func,
+						 gpointer          user_data);
+void         g_async_queue_push_sorted_unlocked (GAsyncQueue      *queue,
+						 gpointer          data,
+						 GCompareDataFunc  func,
+						 gpointer          user_data);
+
+/* Pop data from the async queue. When no data is there, the thread is blocked
+ * until data arrives.
+ */
+gpointer     g_async_queue_pop                  (GAsyncQueue      *queue);
+gpointer     g_async_queue_pop_unlocked         (GAsyncQueue      *queue);
+
+/* Try to pop data. NULL is returned in case of empty queue. */
+gpointer     g_async_queue_try_pop              (GAsyncQueue      *queue);
+gpointer     g_async_queue_try_pop_unlocked     (GAsyncQueue      *queue);
+
+
+
+/* Wait for data until at maximum until end_time is reached. NULL is returned
+ * in case of empty queue. 
+ */
+gpointer     g_async_queue_timed_pop            (GAsyncQueue      *queue,
+						 GTimeVal         *end_time);
+gpointer     g_async_queue_timed_pop_unlocked   (GAsyncQueue      *queue,
+						 GTimeVal         *end_time);
+
+/* Return the length of the queue. Negative values mean that threads
+ * are waiting, positve values mean that there are entries in the
+ * queue. Actually this function returns the length of the queue minus
+ * the number of waiting threads, g_async_queue_length == 0 could also
+ * mean 'n' entries in the queue and 'n' thread waiting. Such can
+ * happen due to locking of the queue or due to scheduling. 
+ */
+gint         g_async_queue_length               (GAsyncQueue      *queue);
+gint         g_async_queue_length_unlocked      (GAsyncQueue      *queue);
+void         g_async_queue_sort                 (GAsyncQueue      *queue,
+						 GCompareDataFunc  func,
+						 gpointer          user_data);
+void         g_async_queue_sort_unlocked        (GAsyncQueue      *queue,
+						 GCompareDataFunc  func,
+						 gpointer          user_data);
+
+/* Private API */
+GMutex*      _g_async_queue_get_mutex           (GAsyncQueue      *queue);
+
+G_END_DECLS
+
+#endif /* __G_ASYNCQUEUE_H__ */
diff --git a/glib/gatomic.c b/glib/gatomic.c
new file mode 100644
index 0000000..baa73e7
--- /dev/null
+++ b/glib/gatomic.c
@@ -0,0 +1,1058 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * g_atomic_*: atomic operations.
+ * Copyright (C) 2003 Sebastian Wilhelmi
+ * Copyright (C) 2007 Nokia Corporation
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#if defined (G_ATOMIC_ARM)
+#include <sched.h>
+#endif
+
+#include "glib.h"
+#include "gthreadprivate.h"
+#include "galias.h"
+
+#if defined (__GNUC__)
+# if defined (G_ATOMIC_I486)
+/* Adapted from CVS version 1.10 of glibc's sysdeps/i386/i486/bits/atomic.h 
+ */
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+			       gint           val)
+{
+  gint result;
+
+  __asm__ __volatile__ ("lock; xaddl %0,%1"
+                        : "=r" (result), "=m" (*atomic) 
+			: "0" (val), "m" (*atomic));
+  return result;
+}
+ 
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+		  gint           val)
+{
+  __asm__ __volatile__ ("lock; addl %1,%0"
+			: "=m" (*atomic) 
+			: "ir" (val), "m" (*atomic));
+}
+
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+				   gint           oldval, 
+				   gint           newval)
+{
+  gint result;
+ 
+  __asm__ __volatile__ ("lock; cmpxchgl %2, %1"
+			: "=a" (result), "=m" (*atomic)
+			: "r" (newval), "m" (*atomic), "0" (oldval)); 
+
+  return result == oldval;
+}
+
+/* The same code as above, as on i386 gpointer is 32 bit as well.
+ * Duplicating the code here seems more natural than casting the
+ * arguments and calling the former function */
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gpointer result;
+ 
+  __asm__ __volatile__ ("lock; cmpxchgl %2, %1"
+			: "=a" (result), "=m" (*atomic)
+			: "r" (newval), "m" (*atomic), "0" (oldval)); 
+
+  return result == oldval;
+}
+
+# elif defined (G_ATOMIC_SPARCV9)
+/* Adapted from CVS version 1.3 of glibc's sysdeps/sparc/sparc64/bits/atomic.h
+ */
+#  define ATOMIC_INT_CMP_XCHG(atomic, oldval, newval)			\
+  ({ 									\
+     gint __result;							\
+     __asm__ __volatile__ ("cas [%4], %2, %0"				\
+                           : "=r" (__result), "=m" (*(atomic))		\
+                           : "r" (oldval), "m" (*(atomic)), "r" (atomic),\
+                           "0" (newval));				\
+     __result == oldval;						\
+  })
+
+#  if GLIB_SIZEOF_VOID_P == 4 /* 32-bit system */
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gpointer result;
+  __asm__ __volatile__ ("cas [%4], %2, %0"
+			: "=r" (result), "=m" (*atomic)
+			: "r" (oldval), "m" (*atomic), "r" (atomic),
+			"0" (newval));
+  return result == oldval;
+}
+#  elif GLIB_SIZEOF_VOID_P == 8 /* 64-bit system */
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gpointer result;
+  gpointer *a = atomic;
+  __asm__ __volatile__ ("casx [%4], %2, %0"
+			: "=r" (result), "=m" (*a)
+			: "r" (oldval), "m" (*a), "r" (a),
+			"0" (newval));
+  return result == oldval;
+}
+#  else /* What's that */
+#    error "Your system has an unsupported pointer size"
+#  endif /* GLIB_SIZEOF_VOID_P */
+#  define G_ATOMIC_MEMORY_BARRIER					\
+  __asm__ __volatile__ ("membar #LoadLoad | #LoadStore"			\
+                        " | #StoreLoad | #StoreStore" : : : "memory")
+
+# elif defined (G_ATOMIC_ALPHA)
+/* Adapted from CVS version 1.3 of glibc's sysdeps/alpha/bits/atomic.h
+ */
+#  define ATOMIC_INT_CMP_XCHG(atomic, oldval, newval)			\
+  ({ 									\
+     gint __result;							\
+     gint __prev;							\
+     __asm__ __volatile__ (						\
+        "       mb\n"							\
+        "1:     ldl_l   %0,%2\n"					\
+        "       cmpeq   %0,%3,%1\n"					\
+        "       beq     %1,2f\n"					\
+        "       mov     %4,%1\n"					\
+        "       stl_c   %1,%2\n"					\
+        "       beq     %1,1b\n"					\
+        "       mb\n"							\
+        "2:"								\
+        : "=&r" (__prev), 						\
+          "=&r" (__result)						\
+        : "m" (*(atomic)),						\
+          "Ir" (oldval),						\
+          "Ir" (newval)							\
+        : "memory");							\
+     __result != 0;							\
+  })
+#  if GLIB_SIZEOF_VOID_P == 4 /* 32-bit system */
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gint result;
+  gpointer prev;
+  __asm__ __volatile__ (
+        "       mb\n"
+        "1:     ldl_l   %0,%2\n"
+        "       cmpeq   %0,%3,%1\n"
+        "       beq     %1,2f\n"
+        "       mov     %4,%1\n"
+        "       stl_c   %1,%2\n"
+        "       beq     %1,1b\n"
+        "       mb\n"
+        "2:"
+        : "=&r" (prev), 
+          "=&r" (result)
+        : "m" (*atomic),
+          "Ir" (oldval),
+          "Ir" (newval)
+        : "memory");
+  return result != 0;
+}
+#  elif GLIB_SIZEOF_VOID_P == 8 /* 64-bit system */
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gint result;
+  gpointer prev;
+  __asm__ __volatile__ (
+        "       mb\n"
+        "1:     ldq_l   %0,%2\n"
+        "       cmpeq   %0,%3,%1\n"
+        "       beq     %1,2f\n"
+        "       mov     %4,%1\n"
+        "       stq_c   %1,%2\n"
+        "       beq     %1,1b\n"
+        "       mb\n"
+        "2:"
+        : "=&r" (prev), 
+          "=&r" (result)
+        : "m" (*atomic),
+          "Ir" (oldval),
+          "Ir" (newval)
+        : "memory");
+  return result != 0;
+}
+#  else /* What's that */
+#   error "Your system has an unsupported pointer size"
+#  endif /* GLIB_SIZEOF_VOID_P */
+#  define G_ATOMIC_MEMORY_BARRIER  __asm__ ("mb" : : : "memory")
+# elif defined (G_ATOMIC_X86_64)
+/* Adapted from CVS version 1.9 of glibc's sysdeps/x86_64/bits/atomic.h 
+ */
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+			       gint           val)
+{
+  gint result;
+
+  __asm__ __volatile__ ("lock; xaddl %0,%1"
+                        : "=r" (result), "=m" (*atomic) 
+			: "0" (val), "m" (*atomic));
+  return result;
+}
+ 
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+		  gint           val)
+{
+  __asm__ __volatile__ ("lock; addl %1,%0"
+			: "=m" (*atomic) 
+			: "ir" (val), "m" (*atomic));
+}
+
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+				   gint           oldval, 
+				   gint           newval)
+{
+  gint result;
+ 
+  __asm__ __volatile__ ("lock; cmpxchgl %2, %1"
+			: "=a" (result), "=m" (*atomic)
+			: "r" (newval), "m" (*atomic), "0" (oldval)); 
+
+  return result == oldval;
+}
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gpointer result;
+ 
+  __asm__ __volatile__ ("lock; cmpxchgq %q2, %1"
+			: "=a" (result), "=m" (*atomic)
+			: "r" (newval), "m" (*atomic), "0" (oldval)); 
+
+  return result == oldval;
+}
+
+# elif defined (G_ATOMIC_POWERPC)
+/* Adapted from CVS version 1.16 of glibc's sysdeps/powerpc/bits/atomic.h 
+ * and CVS version 1.4 of glibc's sysdeps/powerpc/powerpc32/bits/atomic.h 
+ * and CVS version 1.7 of glibc's sysdeps/powerpc/powerpc64/bits/atomic.h 
+ */
+#   ifdef __OPTIMIZE__
+/* Non-optimizing compile bails on the following two asm statements
+ * for reasons unknown to the author */
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+			       gint           val)
+{
+  gint result, temp;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("1:       lwarx   %0,0,%3\n"
+			"         add     %1,%0,%4\n"
+			"         stwcx.  %1,0,%3\n"
+			"         bne-    1b"
+			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
+			: "b" (atomic), "r" (val), "m" (*atomic)
+			: "cr0", "memory");
+#else
+  __asm__ __volatile__ (".Lieaa%=:       lwarx   %0,0,%3\n"
+			"         add     %1,%0,%4\n"
+			"         stwcx.  %1,0,%3\n"
+			"         bne-    .Lieaa%="
+			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
+			: "b" (atomic), "r" (val), "m" (*atomic)
+			: "cr0", "memory");
+#endif
+  return result;
+}
+ 
+/* The same as above, to save a function call repeated here */
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+		  gint           val)
+{
+  gint result, temp;  
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("1:       lwarx   %0,0,%3\n"
+			"         add     %1,%0,%4\n"
+			"         stwcx.  %1,0,%3\n"
+			"         bne-    1b"
+			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
+			: "b" (atomic), "r" (val), "m" (*atomic)
+			: "cr0", "memory");
+#else
+  __asm__ __volatile__ (".Lia%=:       lwarx   %0,0,%3\n"
+			"         add     %1,%0,%4\n"
+			"         stwcx.  %1,0,%3\n"
+			"         bne-    .Lia%="
+			: "=&b" (result), "=&r" (temp), "=m" (*atomic)
+			: "b" (atomic), "r" (val), "m" (*atomic)
+			: "cr0", "memory");
+#endif
+}
+#   else /* !__OPTIMIZE__ */
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+			       gint           val)
+{
+  gint result;
+  do
+    result = *atomic;
+  while (!g_atomic_int_compare_and_exchange (atomic, result, result + val));
+
+  return result;
+}
+ 
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+		  gint           val)
+{
+  gint result;
+  do
+    result = *atomic;
+  while (!g_atomic_int_compare_and_exchange (atomic, result, result + val));
+}
+#   endif /* !__OPTIMIZE__ */
+
+#   if GLIB_SIZEOF_VOID_P == 4 /* 32-bit system */
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+				   gint           oldval, 
+				   gint           newval)
+{
+  gint result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: lwarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
+  __asm__ __volatile__ ("sync\n"
+			".L1icae%=: lwarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     .L2icae%=\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    .L1icae%=\n"
+			".L2icae%=: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#endif
+  return result == 0;
+}
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gpointer result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: lwarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
+  __asm__ __volatile__ ("sync\n"
+			".L1pcae%=: lwarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     .L2pcae%=\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    .L1pcae%=\n"
+			".L2pcae%=: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#endif
+  return result == 0;
+}
+#   elif GLIB_SIZEOF_VOID_P == 8 /* 64-bit system */
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic,
+				   gint           oldval, 
+				   gint           newval)
+{
+  gpointer result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: lwarx   %0,0,%1\n"
+			"   extsw   %0,%0\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
+  __asm__ __volatile__ ("sync\n"
+			".L1icae%=: lwarx   %0,0,%1\n"
+			"   extsw   %0,%0\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     .L2icae%=\n"
+			"   stwcx.  %3,0,%1\n"
+			"   bne-    .L1icae%=\n"
+			".L2icae%=: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#endif
+  return result == 0;
+}
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gpointer result;
+#if ASM_NUMERIC_LABELS
+  __asm__ __volatile__ ("sync\n"
+			"1: ldarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     2f\n"
+			"   stdcx.  %3,0,%1\n"
+			"   bne-    1b\n"
+			"2: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#else
+  __asm__ __volatile__ ("sync\n"
+			".L1pcae%=: ldarx   %0,0,%1\n"
+			"   subf.   %0,%2,%0\n"
+			"   bne     .L2pcae%=\n"
+			"   stdcx.  %3,0,%1\n"
+			"   bne-    .L1pcae%=\n"
+			".L2pcae%=: isync"
+			: "=&r" (result)
+			: "b" (atomic), "r" (oldval), "r" (newval)
+			: "cr0", "memory"); 
+#endif
+  return result == 0;
+}
+#  else /* What's that */
+#   error "Your system has an unsupported pointer size"
+#  endif /* GLIB_SIZEOF_VOID_P */
+
+#  define G_ATOMIC_MEMORY_BARRIER __asm__ ("sync" : : : "memory")
+
+# elif defined (G_ATOMIC_IA64)
+/* Adapted from CVS version 1.8 of glibc's sysdeps/ia64/bits/atomic.h
+ */
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+			       gint           val)
+{
+  return __sync_fetch_and_add (atomic, val);
+}
+ 
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+		  gint val)
+{
+  __sync_fetch_and_add (atomic, val);
+}
+
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic,
+				   gint           oldval, 
+				   gint           newval)
+{
+  return __sync_bool_compare_and_swap (atomic, oldval, newval);
+}
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  return __sync_bool_compare_and_swap ((long *)atomic, 
+				       (long)oldval, (long)newval);
+}
+
+#  define G_ATOMIC_MEMORY_BARRIER __sync_synchronize ()
+# elif defined (G_ATOMIC_S390)
+/* Adapted from glibc's sysdeps/s390/bits/atomic.h
+ */
+#  define ATOMIC_INT_CMP_XCHG(atomic, oldval, newval)			\
+  ({ 									\
+     gint __result = oldval;					\
+     __asm__ __volatile__ ("cs %0, %2, %1"				\
+                           : "+d" (__result), "=Q" (*(atomic))		\
+                           : "d" (newval), "m" (*(atomic)) : "cc" );	\
+     __result == oldval;						\
+  })
+
+#  if GLIB_SIZEOF_VOID_P == 4 /* 32-bit system */
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+				       gpointer           oldval,
+				       gpointer           newval)
+{
+  gpointer result = oldval;
+  __asm__ __volatile__ ("cs %0, %2, %1"
+			: "+d" (result), "=Q" (*(atomic))
+			: "d" (newval), "m" (*(atomic)) : "cc" );
+  return result == oldval;
+}
+#  elif GLIB_SIZEOF_VOID_P == 8 /* 64-bit system */
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+				       gpointer           oldval,
+				       gpointer           newval)
+{
+  gpointer result = oldval;
+  gpointer *a = atomic;
+  __asm__ __volatile__ ("csg %0, %2, %1"
+			: "+d" (result), "=Q" (*a)
+			: "d" ((long)(newval)), "m" (*a) : "cc" );
+  return result == oldval;
+}
+#  else /* What's that */
+#    error "Your system has an unsupported pointer size"
+#  endif /* GLIB_SIZEOF_VOID_P */
+# elif defined (G_ATOMIC_ARM)
+static volatile int atomic_spin = 0;
+
+static int atomic_spin_trylock (void)
+{
+  int result;
+
+  asm volatile (
+    "swp %0, %1, [%2]\n"
+    : "=&r,&r" (result)
+    : "r,0" (1), "r,r" (&atomic_spin)
+    : "memory");
+  if (result == 0)
+    return 0;
+  else
+    return -1;
+}
+
+static void atomic_spin_lock (void)
+{
+  while (atomic_spin_trylock())
+    sched_yield();
+}
+
+static void atomic_spin_unlock (void)
+{
+  atomic_spin = 0;
+}
+
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+			       gint           val)
+{
+  gint result;
+ 
+  atomic_spin_lock();  
+  result = *atomic;
+  *atomic += val;
+  atomic_spin_unlock();
+
+  return result;
+}
+
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+		  gint           val)
+{
+  atomic_spin_lock();
+  *atomic += val;
+  atomic_spin_unlock();
+}
+
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+				   gint           oldval, 
+				   gint           newval)
+{
+  gboolean result;
+
+  atomic_spin_lock();
+  if (*atomic == oldval)
+    {
+      result = TRUE;
+      *atomic = newval;
+    }
+  else
+    result = FALSE;
+  atomic_spin_unlock();
+
+  return result;
+}
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gboolean result;
+ 
+  atomic_spin_lock();
+  if (*atomic == oldval)
+    {
+      result = TRUE;
+      *atomic = newval;
+    }
+  else
+    result = FALSE;
+  atomic_spin_unlock();
+
+  return result;
+}
+# elif defined (G_ATOMIC_CRIS) || defined (G_ATOMIC_CRISV32)
+#  ifdef G_ATOMIC_CRIS
+#   define CRIS_ATOMIC_INT_CMP_XCHG(atomic, oldval, newval)		\
+  ({									\
+     gboolean __result;							\
+     __asm__ __volatile__ ("\n"						\
+                           "0:\tclearf\n\t"				\
+                           "cmp.d [%[Atomic]], %[OldVal]\n\t"		\
+                           "bne 1f\n\t"					\
+                           "ax\n\t"					\
+                           "move.d %[NewVal], [%[Atomic]]\n\t"		\
+                           "bwf 0b\n"					\
+                           "1:\tseq %[Result]"				\
+                           : [Result] "=&r" (__result),			\
+                                      "=m" (*(atomic))			\
+                           : [Atomic] "r" (atomic),			\
+                             [OldVal] "r" (oldval),			\
+                             [NewVal] "r" (newval),			\
+                                      "g" (*(gpointer*) (atomic))	\
+                           : "memory");					\
+     __result;								\
+  })
+#  else
+#   define CRIS_ATOMIC_INT_CMP_XCHG(atomic, oldval, newval)		\
+  ({									\
+     gboolean __result;							\
+     __asm__ __volatile__ ("\n"						\
+                           "0:\tclearf p\n\t"				\
+                           "cmp.d [%[Atomic]], %[OldVal]\n\t"		\
+                           "bne 1f\n\t"					\
+                           "ax\n\t"					\
+                           "move.d %[NewVal], [%[Atomic]]\n\t"		\
+                           "bcs 0b\n"					\
+                           "1:\tseq %[Result]"				\
+                           : [Result] "=&r" (__result),			\
+                                      "=m" (*(atomic))			\
+                           : [Atomic] "r" (atomic),			\
+                             [OldVal] "r" (oldval),			\
+                             [NewVal] "r" (newval),			\
+                                      "g" (*(gpointer*) (atomic))	\
+                           : "memory");					\
+     __result;								\
+  })
+#  endif
+
+#define CRIS_CACHELINE_SIZE 32
+#define CRIS_ATOMIC_BREAKS_CACHELINE(atomic) \
+  (((gulong)(atomic) & (CRIS_CACHELINE_SIZE - 1)) > (CRIS_CACHELINE_SIZE - sizeof (atomic)))
+
+gint     __g_atomic_int_exchange_and_add         (volatile gint   G_GNUC_MAY_ALIAS *atomic,
+						  gint             val);
+void     __g_atomic_int_add                      (volatile gint   G_GNUC_MAY_ALIAS *atomic,
+						  gint             val);
+gboolean __g_atomic_int_compare_and_exchange     (volatile gint   G_GNUC_MAY_ALIAS *atomic,
+						  gint             oldval,
+						  gint             newval);
+gboolean __g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+						  gpointer         oldval,
+						  gpointer         newval);
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+				       gpointer           oldval,
+				       gpointer           newval)
+{
+  if (G_UNLIKELY (CRIS_ATOMIC_BREAKS_CACHELINE (atomic)))
+    return __g_atomic_pointer_compare_and_exchange (atomic, oldval, newval);
+
+  return CRIS_ATOMIC_INT_CMP_XCHG (atomic, oldval, newval);
+}
+
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic,
+				   gint           oldval,
+				   gint           newval)
+{
+  if (G_UNLIKELY (CRIS_ATOMIC_BREAKS_CACHELINE (atomic)))
+    return __g_atomic_int_compare_and_exchange (atomic, oldval, newval);
+
+  return CRIS_ATOMIC_INT_CMP_XCHG (atomic, oldval, newval);
+}
+
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+			       gint           val)
+{
+  gint result;
+
+  if (G_UNLIKELY (CRIS_ATOMIC_BREAKS_CACHELINE (atomic)))
+    return __g_atomic_int_exchange_and_add (atomic, val);
+
+  do
+    result = *atomic;
+  while (!CRIS_ATOMIC_INT_CMP_XCHG (atomic, result, result + val));
+
+  return result;
+}
+
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+		  gint           val)
+{
+  gint result;
+
+  if (G_UNLIKELY (CRIS_ATOMIC_BREAKS_CACHELINE (atomic)))
+    return __g_atomic_int_add (atomic, val);
+
+  do
+    result = *atomic;
+  while (!CRIS_ATOMIC_INT_CMP_XCHG (atomic, result, result + val));
+}
+
+/* We need the atomic mutex for atomic operations where the atomic variable
+ * breaks the 32 byte cache line since the CRIS architecture does not support
+ * atomic operations on such variables. Fortunately this should be rare.
+ */
+#  define DEFINE_WITH_MUTEXES
+#  define g_atomic_int_exchange_and_add __g_atomic_int_exchange_and_add
+#  define g_atomic_int_add __g_atomic_int_add
+#  define g_atomic_int_compare_and_exchange __g_atomic_int_compare_and_exchange
+#  define g_atomic_pointer_compare_and_exchange __g_atomic_pointer_compare_and_exchange
+
+# else /* !G_ATOMIC_* */
+#  define DEFINE_WITH_MUTEXES
+# endif /* G_ATOMIC_* */
+#else /* !__GNUC__ */
+# ifdef G_PLATFORM_WIN32
+#  define DEFINE_WITH_WIN32_INTERLOCKED
+# else
+#  define DEFINE_WITH_MUTEXES
+# endif
+#endif /* __GNUC__ */
+
+#ifdef DEFINE_WITH_WIN32_INTERLOCKED
+# include <windows.h>
+/* Following indicates that InterlockedCompareExchangePointer is
+ * declared in winbase.h (included by windows.h) and needs to be
+ * commented out if not true. It is defined iff WINVER > 0x0400,
+ * which is usually correct but can be wrong if WINVER is set before
+ * windows.h is included.
+ */
+# if WINVER > 0x0400
+#  define HAVE_INTERLOCKED_COMPARE_EXCHANGE_POINTER
+# endif
+
+gint32
+g_atomic_int_exchange_and_add (volatile gint32 G_GNUC_MAY_ALIAS *atomic,
+			       gint32           val)
+{
+  return InterlockedExchangeAdd (atomic, val);
+}
+
+void     
+g_atomic_int_add (volatile gint32 G_GNUC_MAY_ALIAS *atomic, 
+		  gint32           val)
+{
+  InterlockedExchangeAdd (atomic, val);
+}
+
+gboolean 
+g_atomic_int_compare_and_exchange (volatile gint32 G_GNUC_MAY_ALIAS *atomic,
+				   gint32           oldval,
+				   gint32           newval)
+{
+#ifndef HAVE_INTERLOCKED_COMPARE_EXCHANGE_POINTER
+  return (guint32) InterlockedCompareExchange ((PVOID*)atomic, 
+                                               (PVOID)newval, 
+                                               (PVOID)oldval) == oldval;
+#else
+  return InterlockedCompareExchange (atomic, 
+                                     newval, 
+                                     oldval) == oldval;
+#endif
+}
+
+gboolean 
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+				       gpointer           oldval,
+				       gpointer           newval)
+{
+# ifdef HAVE_INTERLOCKED_COMPARE_EXCHANGE_POINTER
+  return InterlockedCompareExchangePointer (atomic, newval, oldval) == oldval;
+# else
+#  if GLIB_SIZEOF_VOID_P != 4 /* no 32-bit system */
+#   error "InterlockedCompareExchangePointer needed"
+#  else
+   return InterlockedCompareExchange (atomic, newval, oldval) == oldval;
+#  endif
+# endif
+}
+#endif /* DEFINE_WITH_WIN32_INTERLOCKED */
+
+#ifdef DEFINE_WITH_MUTEXES
+/* We have to use the slow, but safe locking method */
+static GMutex *g_atomic_mutex; 
+
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+			       gint           val)
+{
+  gint result;
+    
+  g_mutex_lock (g_atomic_mutex);
+  result = *atomic;
+  *atomic += val;
+  g_mutex_unlock (g_atomic_mutex);
+
+  return result;
+}
+
+
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+		  gint           val)
+{
+  g_mutex_lock (g_atomic_mutex);
+  *atomic += val;
+  g_mutex_unlock (g_atomic_mutex);
+}
+
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic, 
+				   gint           oldval, 
+				   gint           newval)
+{
+  gboolean result;
+    
+  g_mutex_lock (g_atomic_mutex);
+  if (*atomic == oldval)
+    {
+      result = TRUE;
+      *atomic = newval;
+    }
+  else
+    result = FALSE;
+  g_mutex_unlock (g_atomic_mutex);
+
+  return result;
+}
+
+gboolean
+g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+				       gpointer           oldval, 
+				       gpointer           newval)
+{
+  gboolean result;
+    
+  g_mutex_lock (g_atomic_mutex);
+  if (*atomic == oldval)
+    {
+      result = TRUE;
+      *atomic = newval;
+    }
+  else
+    result = FALSE;
+  g_mutex_unlock (g_atomic_mutex);
+
+  return result;
+}
+
+#ifdef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED
+gint
+(g_atomic_int_get) (volatile gint G_GNUC_MAY_ALIAS *atomic)
+{
+  gint result;
+
+  g_mutex_lock (g_atomic_mutex);
+  result = *atomic;
+  g_mutex_unlock (g_atomic_mutex);
+
+  return result;
+}
+
+void
+(g_atomic_int_set) (volatile gint G_GNUC_MAY_ALIAS *atomic,
+                  gint           newval)
+{
+  g_mutex_lock (g_atomic_mutex);
+  *atomic = newval;
+  g_mutex_unlock (g_atomic_mutex);
+}
+
+gpointer
+(g_atomic_pointer_get) (volatile gpointer G_GNUC_MAY_ALIAS *atomic)
+{
+  gpointer result;
+
+  g_mutex_lock (g_atomic_mutex);
+  result = *atomic;
+  g_mutex_unlock (g_atomic_mutex);
+
+  return result;
+}
+
+void
+(g_atomic_pointer_set) (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+                      gpointer           newval)
+{
+  g_mutex_lock (g_atomic_mutex);
+  *atomic = newval;
+  g_mutex_unlock (g_atomic_mutex);
+}
+#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */   
+#elif defined (G_ATOMIC_OP_MEMORY_BARRIER_NEEDED)
+gint
+(g_atomic_int_get) (volatile gint G_GNUC_MAY_ALIAS *atomic)
+{
+  G_ATOMIC_MEMORY_BARRIER;
+  return *atomic;
+}
+
+void
+(g_atomic_int_set) (volatile gint G_GNUC_MAY_ALIAS *atomic,
+                  gint           newval)
+{
+  *atomic = newval;
+  G_ATOMIC_MEMORY_BARRIER; 
+}
+
+gpointer
+(g_atomic_pointer_get) (volatile gpointer G_GNUC_MAY_ALIAS *atomic)
+{
+  G_ATOMIC_MEMORY_BARRIER;
+  return *atomic;
+}   
+
+void
+(g_atomic_pointer_set) (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+                      gpointer           newval)
+{
+  *atomic = newval;
+  G_ATOMIC_MEMORY_BARRIER; 
+}
+#endif /* DEFINE_WITH_MUTEXES || G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
+
+#ifdef ATOMIC_INT_CMP_XCHG
+gboolean
+g_atomic_int_compare_and_exchange (volatile gint G_GNUC_MAY_ALIAS *atomic,
+				   gint           oldval,
+				   gint           newval)
+{
+  return ATOMIC_INT_CMP_XCHG (atomic, oldval, newval);
+}
+
+gint
+g_atomic_int_exchange_and_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+			       gint           val)
+{
+  gint result;
+  do
+    result = *atomic;
+  while (!ATOMIC_INT_CMP_XCHG (atomic, result, result + val));
+
+  return result;
+}
+ 
+void
+g_atomic_int_add (volatile gint G_GNUC_MAY_ALIAS *atomic,
+		  gint           val)
+{
+  gint result;
+  do
+    result = *atomic;
+  while (!ATOMIC_INT_CMP_XCHG (atomic, result, result + val));
+}
+#endif /* ATOMIC_INT_CMP_XCHG */
+
+void 
+_g_atomic_thread_init (void)
+{
+#ifdef DEFINE_WITH_MUTEXES
+  g_atomic_mutex = g_mutex_new ();
+#endif /* DEFINE_WITH_MUTEXES */
+}
+
+#ifndef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED
+gint
+(g_atomic_int_get) (volatile gint G_GNUC_MAY_ALIAS *atomic)
+{
+  return g_atomic_int_get (atomic);
+}
+
+void
+(g_atomic_int_set) (volatile gint G_GNUC_MAY_ALIAS *atomic,
+		    gint           newval)
+{
+  g_atomic_int_set (atomic, newval);
+}
+
+gpointer
+(g_atomic_pointer_get) (volatile gpointer G_GNUC_MAY_ALIAS *atomic)
+{
+  return g_atomic_pointer_get (atomic);
+}
+
+void
+(g_atomic_pointer_set) (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+			gpointer           newval)
+{
+  g_atomic_pointer_set (atomic, newval);
+}
+#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
+
+#define __G_ATOMIC_C__
+#include "galiasdef.c"
diff --git a/glib/gatomic.h b/glib/gatomic.h
new file mode 100644
index 0000000..7d9c318
--- /dev/null
+++ b/glib/gatomic.h
@@ -0,0 +1,85 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * g_atomic_*: atomic operations.
+ * Copyright (C) 2003 Sebastian Wilhelmi
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_ATOMIC_H__
+#define __G_ATOMIC_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+gint     g_atomic_int_exchange_and_add         (volatile gint G_GNUC_MAY_ALIAS *atomic,
+						gint      	   val);
+void     g_atomic_int_add                      (volatile gint G_GNUC_MAY_ALIAS *atomic,
+						gint      	   val);
+gboolean g_atomic_int_compare_and_exchange     (volatile gint G_GNUC_MAY_ALIAS *atomic,
+						gint      	   oldval,
+						gint      	   newval);
+gboolean g_atomic_pointer_compare_and_exchange (volatile gpointer G_GNUC_MAY_ALIAS *atomic, 
+						gpointer  	   oldval, 
+						gpointer  	   newval);
+
+gint     g_atomic_int_get                      (volatile gint G_GNUC_MAY_ALIAS *atomic);
+void     g_atomic_int_set                      (volatile gint G_GNUC_MAY_ALIAS *atomic,
+						gint               newval);
+gpointer g_atomic_pointer_get                  (volatile gpointer G_GNUC_MAY_ALIAS *atomic);
+void     g_atomic_pointer_set                  (volatile gpointer G_GNUC_MAY_ALIAS *atomic,
+						gpointer           newval);
+
+#ifndef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED
+# define g_atomic_int_get(atomic) 		((gint)*(atomic))
+# define g_atomic_int_set(atomic, newval) 	((void) (*(atomic) = (newval)))
+# define g_atomic_pointer_get(atomic) 		((gpointer)*(atomic))
+# define g_atomic_pointer_set(atomic, newval)	((void) (*(atomic) = (newval)))
+#else
+# define g_atomic_int_get(atomic) \
+ ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gint) ? 1 : -1]), \
+  (g_atomic_int_get) ((volatile gint G_GNUC_MAY_ALIAS *) (void *) (atomic)))
+# define g_atomic_int_set(atomic, newval) \
+ ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gint) ? 1 : -1]), \
+  (g_atomic_int_set) ((volatile gint G_GNUC_MAY_ALIAS *) (void *) (atomic), (newval)))
+# define g_atomic_pointer_get(atomic) \
+ ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gpointer) ? 1 : -1]), \
+  (g_atomic_pointer_get) ((volatile gpointer G_GNUC_MAY_ALIAS *) (void *) (atomic)))
+# define g_atomic_pointer_set(atomic, newval) \
+ ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gpointer) ? 1 : -1]), \
+  (g_atomic_pointer_set) ((volatile gpointer G_GNUC_MAY_ALIAS *) (void *) (atomic), (newval)))
+#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
+
+#define g_atomic_int_inc(atomic) (g_atomic_int_add ((atomic), 1))
+#define g_atomic_int_dec_and_test(atomic)				\
+  (g_atomic_int_exchange_and_add ((atomic), -1) == 1)
+
+G_END_DECLS
+
+#endif /* __G_ATOMIC_H__ */
diff --git a/glib/gbacktrace.h b/glib/gbacktrace.h
new file mode 100644
index 0000000..2e74b49
--- /dev/null
+++ b/glib/gbacktrace.h
@@ -0,0 +1,68 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_BACKTRACE_H__
+#define __G_BACKTRACE_H__
+
+#include <glib/gtypes.h>
+#include <signal.h>
+
+G_BEGIN_DECLS
+
+/* Fatal error handlers.
+ * g_on_error_query() will prompt the user to either
+ * [E]xit, [H]alt, [P]roceed or show [S]tack trace.
+ * g_on_error_stack_trace() invokes gdb, which attaches to the current
+ * process and shows a stack trace.
+ * These function may cause different actions on non-unix platforms.
+ * The prg_name arg is required by gdb to find the executable, if it is
+ * passed as NULL, g_on_error_query() will try g_get_prgname().
+ */
+void g_on_error_query (const gchar *prg_name);
+void g_on_error_stack_trace (const gchar *prg_name);
+
+/* Hacker macro to place breakpoints for selected machines.
+ * Actual use is strongly discouraged of course ;)
+ */
+#if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__) && __GNUC__ >= 2
+#  define G_BREAKPOINT()	G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END
+#elif (defined (_MSC_VER) || defined (__DMC__)) && defined (_M_IX86)
+#  define G_BREAKPOINT()	G_STMT_START{ __asm int 3h }G_STMT_END
+#elif defined (_MSC_VER)
+#  define G_BREAKPOINT()	G_STMT_START{ __debugbreak(); }G_STMT_END
+#elif defined (__alpha__) && !defined(__osf__) && defined (__GNUC__) && __GNUC__ >= 2
+#  define G_BREAKPOINT()	G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END
+#else	/* !__i386__ && !__alpha__ */
+#  define G_BREAKPOINT()	G_STMT_START{ raise (SIGTRAP); }G_STMT_END
+#endif	/* __i386__ */
+
+G_END_DECLS
+
+#endif /* __G_BACKTRACE_H__ */
diff --git a/glib/gbase64.h b/glib/gbase64.h
new file mode 100644
index 0000000..2f7c49f
--- /dev/null
+++ b/glib/gbase64.h
@@ -0,0 +1,57 @@
+/* gbase64.h - Base64 coding functions
+ *
+ *  Copyright (C) 2005  Alexander Larsson <alexl@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_BASE64_H__
+#define __G_BASE64_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+gsize   g_base64_encode_step  (const guchar *in,
+			       gsize         len,
+			       gboolean      break_lines,
+			       gchar        *out,
+			       gint         *state,
+			       gint         *save);
+gsize   g_base64_encode_close (gboolean      break_lines,
+			       gchar        *out,
+			       gint         *state,
+			       gint         *save);
+gchar*  g_base64_encode       (const guchar *data,
+			       gsize         len) G_GNUC_MALLOC;
+gsize   g_base64_decode_step  (const gchar  *in,
+			       gsize         len,
+			       guchar       *out,
+			       gint         *state,
+			       guint        *save);
+guchar *g_base64_decode       (const gchar  *text,
+			       gsize        *out_len) G_GNUC_MALLOC;
+guchar *g_base64_decode_inplace (gchar      *text,
+                                 gsize      *out_len);
+
+
+G_END_DECLS
+
+#endif /* __G_BASE64_H__ */
diff --git a/glib/gbookmarkfile.h b/glib/gbookmarkfile.h
new file mode 100644
index 0000000..bdf97c0
--- /dev/null
+++ b/glib/gbookmarkfile.h
@@ -0,0 +1,191 @@
+/* gbookmarkfile.h: parsing and building desktop bookmarks
+ *
+ * Copyright (C) 2005-2006 Emmanuele Bassi
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_BOOKMARK_FILE_H__
+#define __G_BOOKMARK_FILE_H__
+
+#include <glib/gerror.h>
+#include <time.h>
+
+G_BEGIN_DECLS
+
+/* GError enumeration
+ */
+#define G_BOOKMARK_FILE_ERROR	(g_bookmark_file_error_quark ())
+
+typedef enum
+{
+  G_BOOKMARK_FILE_ERROR_INVALID_URI,
+  G_BOOKMARK_FILE_ERROR_INVALID_VALUE,
+  G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED,
+  G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND,
+  G_BOOKMARK_FILE_ERROR_READ,
+  G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING,
+  G_BOOKMARK_FILE_ERROR_WRITE,
+  G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND
+} GBookmarkFileError;
+
+GQuark g_bookmark_file_error_quark (void);
+
+/*
+ * GBookmarkFile
+ */
+typedef struct _GBookmarkFile GBookmarkFile;
+
+GBookmarkFile *g_bookmark_file_new                 (void);
+void           g_bookmark_file_free                (GBookmarkFile  *bookmark);
+
+gboolean       g_bookmark_file_load_from_file      (GBookmarkFile  *bookmark,
+						    const gchar    *filename,
+						    GError        **error);
+gboolean       g_bookmark_file_load_from_data      (GBookmarkFile  *bookmark,
+						    const gchar    *data,
+						    gsize           length,
+						    GError        **error);
+gboolean       g_bookmark_file_load_from_data_dirs (GBookmarkFile  *bookmark,
+						    const gchar    *file,
+						    gchar         **full_path,
+						    GError        **error);
+gchar *        g_bookmark_file_to_data             (GBookmarkFile  *bookmark,
+						    gsize          *length,
+						    GError        **error) G_GNUC_MALLOC;
+gboolean       g_bookmark_file_to_file             (GBookmarkFile  *bookmark,
+						    const gchar    *filename,
+						    GError        **error);
+
+void           g_bookmark_file_set_title           (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *title);
+gchar *        g_bookmark_file_get_title           (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error) G_GNUC_MALLOC;
+void           g_bookmark_file_set_description     (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *description);
+gchar *        g_bookmark_file_get_description     (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error) G_GNUC_MALLOC;
+void           g_bookmark_file_set_mime_type       (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *mime_type);
+gchar *        g_bookmark_file_get_mime_type       (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error) G_GNUC_MALLOC;
+void           g_bookmark_file_set_groups          (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar   **groups,
+						    gsize           length);
+void           g_bookmark_file_add_group           (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *group);
+gboolean       g_bookmark_file_has_group           (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *group,
+						    GError        **error);
+gchar **       g_bookmark_file_get_groups          (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    gsize          *length,
+						    GError        **error) G_GNUC_MALLOC;
+void           g_bookmark_file_add_application     (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *name,
+						    const gchar    *exec);
+gboolean       g_bookmark_file_has_application     (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *name,
+						    GError        **error);
+gchar **       g_bookmark_file_get_applications    (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    gsize          *length,
+						    GError        **error) G_GNUC_MALLOC;
+gboolean       g_bookmark_file_set_app_info        (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *name,
+						    const gchar    *exec,
+						    gint            count,
+						    time_t          stamp,
+						    GError        **error);
+gboolean       g_bookmark_file_get_app_info        (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *name,
+						    gchar         **exec,
+						    guint          *count,
+						    time_t         *stamp,
+						    GError        **error);
+void           g_bookmark_file_set_is_private      (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    gboolean        is_private);
+gboolean       g_bookmark_file_get_is_private      (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error);
+void           g_bookmark_file_set_icon            (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *href,
+						    const gchar    *mime_type);
+gboolean       g_bookmark_file_get_icon            (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    gchar         **href,
+						    gchar         **mime_type,
+						    GError        **error);
+void           g_bookmark_file_set_added           (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    time_t          added);
+time_t         g_bookmark_file_get_added           (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error);
+void           g_bookmark_file_set_modified        (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    time_t          modified);
+time_t         g_bookmark_file_get_modified        (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error);
+void           g_bookmark_file_set_visited         (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    time_t          visited);
+time_t         g_bookmark_file_get_visited         (GBookmarkFile  *bookmark,
+						    const gchar    *uri, 
+						    GError        **error);
+gboolean       g_bookmark_file_has_item            (GBookmarkFile  *bookmark,
+						    const gchar    *uri);
+gint           g_bookmark_file_get_size            (GBookmarkFile  *bookmark);
+gchar **       g_bookmark_file_get_uris            (GBookmarkFile  *bookmark,
+						    gsize          *length) G_GNUC_MALLOC;
+gboolean       g_bookmark_file_remove_group        (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *group,
+						    GError        **error);
+gboolean       g_bookmark_file_remove_application  (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    const gchar    *name,
+						    GError        **error);
+gboolean       g_bookmark_file_remove_item         (GBookmarkFile  *bookmark,
+						    const gchar    *uri,
+						    GError        **error);
+gboolean       g_bookmark_file_move_item           (GBookmarkFile  *bookmark,
+						    const gchar    *old_uri,
+						    const gchar    *new_uri,
+						    GError        **error);
+
+G_END_DECLS
+
+#endif /* __G_BOOKMARK_FILE_H__ */
diff --git a/glib/gbsearcharray.h b/glib/gbsearcharray.h
new file mode 100644
index 0000000..8e68758
--- /dev/null
+++ b/glib/gbsearcharray.h
@@ -0,0 +1,303 @@
+/* GBSearchArray - Binary Searchable Array implementation
+ * Copyright (C) 2000-2003 Tim Janik
+ *
+ * This software is provided "as is"; redistribution and modification
+ * is permitted, provided that the following disclaimer is retained.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * In no event shall the authors or 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 __G_BSEARCH_ARRAY_H__
+#define __G_BSEARCH_ARRAY_H__
+
+#include <glib.h>
+#include <string.h>
+
+
+G_BEGIN_DECLS   /* c++ guards */
+
+/* this implementation is intended to be usable in third-party code
+ * simply by pasting the contents of this file. as such, the
+ * implementation needs to be self-contained within this file.
+ */
+
+/* convenience macro to avoid signed overflow for value comparisions */
+#define G_BSEARCH_ARRAY_CMP(v1,v2) ((v1) > (v2) ? +1 : (v1) == (v2) ? 0 : -1)
+
+
+/* --- typedefs --- */
+typedef gint  (*GBSearchCompareFunc) (gconstpointer bsearch_node1, /* key */
+                                      gconstpointer bsearch_node2);
+typedef enum
+{
+  G_BSEARCH_ARRAY_ALIGN_POWER2  = 1 << 0, /* align memory to power2 sizes */
+  G_BSEARCH_ARRAY_AUTO_SHRINK  = 1 << 1   /* shrink array upon removal */
+} GBSearchArrayFlags;
+
+
+/* --- structures --- */
+typedef struct
+{
+  guint               sizeof_node;
+  GBSearchCompareFunc cmp_nodes;
+  guint               flags;
+} GBSearchConfig;
+typedef union
+{
+  guint    n_nodes;
+  /*< private >*/
+  gpointer alignment_dummy1;
+  glong    alignment_dummy2;
+  gdouble  alignment_dummy3;
+} GBSearchArray;
+
+
+/* --- public API --- */
+static inline GBSearchArray*    g_bsearch_array_create    (const GBSearchConfig *bconfig);
+static inline gpointer          g_bsearch_array_get_nth   (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig,
+                                                           guint                 nth);
+static inline guint             g_bsearch_array_get_index (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig,
+                                                           gconstpointer         node_in_array);
+static inline GBSearchArray*    g_bsearch_array_remove    (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig,
+                                                           guint                 index_);
+/* provide uninitialized space at index for node insertion */
+static inline GBSearchArray*    g_bsearch_array_grow      (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig,
+                                                           guint                 index);
+/* insert key_node into array if it does not exist, otherwise do nothing */
+static inline GBSearchArray*    g_bsearch_array_insert    (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig,
+                                                           gconstpointer         key_node);
+/* insert key_node into array if it does not exist,
+ * otherwise replace the existing node's contents with key_node
+ */
+static inline GBSearchArray*    g_bsearch_array_replace   (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig,
+                                                           gconstpointer         key_node);
+static inline void              g_bsearch_array_free      (GBSearchArray        *barray,
+                                                           const GBSearchConfig *bconfig);
+#define g_bsearch_array_get_n_nodes(barray)     (((GBSearchArray*) (barray))->n_nodes)
+
+/* g_bsearch_array_lookup():
+ * return NULL or exact match node
+ */
+#define g_bsearch_array_lookup(barray, bconfig, key_node)       \
+    g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 0)
+
+/* g_bsearch_array_lookup_sibling():
+ * return NULL for barray->n_nodes==0, otherwise return the
+ * exact match node, or, if there's no such node, return the
+ * node last visited, which is pretty close to an exact match
+ * (will be one off into either direction).
+ */
+#define g_bsearch_array_lookup_sibling(barray, bconfig, key_node)       \
+    g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 1)
+
+/* g_bsearch_array_lookup_insertion():
+ * return NULL for barray->n_nodes==0 or exact match, otherwise
+ * return the node where key_node should be inserted (may be one
+ * after end, i.e. g_bsearch_array_get_index(result) <= barray->n_nodes).
+ */
+#define g_bsearch_array_lookup_insertion(barray, bconfig, key_node)     \
+    g_bsearch_array_lookup_fuzzy ((barray), (bconfig), (key_node), 2)
+
+
+/* --- implementation --- */
+/* helper macro to cut down realloc()s */
+#ifdef  DISABLE_MEM_POOLS
+#define G_BSEARCH_UPPER_POWER2(n)       (n)
+#else   /* !DISABLE_MEM_POOLS */
+#define G_BSEARCH_UPPER_POWER2(n)       ((n) ? 1 << g_bit_storage ((n) - 1) : 0)
+#endif  /* !DISABLE_MEM_POOLS */
+#define G_BSEARCH_ARRAY_NODES(barray)    (((guint8*) (barray)) + sizeof (GBSearchArray))
+static inline GBSearchArray*
+g_bsearch_array_create (const GBSearchConfig *bconfig)
+{
+  GBSearchArray *barray;
+  guint size;
+
+  g_return_val_if_fail (bconfig != NULL, NULL);
+
+  size = sizeof (GBSearchArray) + bconfig->sizeof_node;
+  if (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2)
+    size = G_BSEARCH_UPPER_POWER2 (size);
+  barray = (GBSearchArray *) g_realloc (NULL, size);
+  memset (barray, 0, sizeof (GBSearchArray));
+
+  return barray;
+}
+static inline gpointer
+g_bsearch_array_lookup_fuzzy (GBSearchArray             *barray,
+                              const GBSearchConfig      *bconfig,
+                              gconstpointer              key_node,
+                              const guint                sibling_or_after);
+static inline gpointer
+g_bsearch_array_lookup_fuzzy (GBSearchArray        *barray,
+                              const GBSearchConfig *bconfig,
+                              gconstpointer         key_node,
+                              const guint           sibling_or_after)
+{
+  GBSearchCompareFunc cmp_nodes = bconfig->cmp_nodes;
+  guint8 *check = NULL, *nodes = G_BSEARCH_ARRAY_NODES (barray);
+  guint n_nodes = barray->n_nodes, offs = 0;
+  guint sizeof_node = bconfig->sizeof_node;
+  gint cmp = 0;
+
+  while (offs < n_nodes)
+    {
+      guint i = (offs + n_nodes) >> 1;
+
+      check = nodes + i * sizeof_node;
+      cmp = cmp_nodes (key_node, check);
+      if (cmp == 0)
+        return sibling_or_after > 1 ? NULL : check;
+      else if (cmp < 0)
+        n_nodes = i;
+      else /* (cmp > 0) */
+        offs = i + 1;
+    }
+
+  /* check is last mismatch, cmp > 0 indicates greater key */
+  return G_LIKELY (!sibling_or_after) ? NULL : (sibling_or_after > 1 && cmp > 0) ? check + sizeof_node : check;
+}
+static inline gpointer
+g_bsearch_array_get_nth (GBSearchArray        *barray,
+                         const GBSearchConfig *bconfig,
+                         guint                 nth)
+{
+  return (G_LIKELY (nth < barray->n_nodes) ?
+          G_BSEARCH_ARRAY_NODES (barray) + nth * bconfig->sizeof_node :
+          NULL);
+}
+static inline guint
+g_bsearch_array_get_index (GBSearchArray        *barray,
+                           const GBSearchConfig *bconfig,
+                           gconstpointer         node_in_array)
+{
+  guint distance = ((guint8*) node_in_array) - G_BSEARCH_ARRAY_NODES (barray);
+
+  g_return_val_if_fail (node_in_array != NULL, barray->n_nodes);
+
+  distance /= bconfig->sizeof_node;
+
+  return MIN (distance, barray->n_nodes + 1); /* may return one after end */
+}
+static inline GBSearchArray*
+g_bsearch_array_grow (GBSearchArray        *barray,
+                      const GBSearchConfig *bconfig,
+                      guint                 index_)
+{
+  guint old_size = barray->n_nodes * bconfig->sizeof_node;
+  guint new_size = old_size + bconfig->sizeof_node;
+  guint8 *node;
+
+  g_return_val_if_fail (index_ <= barray->n_nodes, NULL);
+
+  if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2))
+    {
+      new_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + new_size);
+      old_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + old_size);
+      if (old_size != new_size)
+        barray = (GBSearchArray *) g_realloc (barray, new_size);
+    }
+  else
+    barray = (GBSearchArray *) g_realloc (barray, sizeof (GBSearchArray) + new_size);
+  node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
+  g_memmove (node + bconfig->sizeof_node, node, (barray->n_nodes - index_) * bconfig->sizeof_node);
+  barray->n_nodes += 1;
+  return barray;
+}
+static inline GBSearchArray*
+g_bsearch_array_insert (GBSearchArray        *barray,
+                        const GBSearchConfig *bconfig,
+                        gconstpointer         key_node)
+{
+  guint8 *node;
+
+  if (G_UNLIKELY (!barray->n_nodes))
+    {
+      barray = g_bsearch_array_grow (barray, bconfig, 0);
+      node = G_BSEARCH_ARRAY_NODES (barray);
+    }
+  else
+    {
+      node = (guint8 *) g_bsearch_array_lookup_insertion (barray, bconfig, key_node);
+      if (G_LIKELY (node))
+        {
+          guint index_ = g_bsearch_array_get_index (barray, bconfig, node);
+
+          /* grow and insert */
+          barray = g_bsearch_array_grow (barray, bconfig, index_);
+          node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
+        }
+      else /* no insertion needed, node already there */
+        return barray;
+    }
+  memcpy (node, key_node, bconfig->sizeof_node);
+  return barray;
+}
+static inline GBSearchArray*
+g_bsearch_array_replace (GBSearchArray        *barray,
+                         const GBSearchConfig *bconfig,
+                         gconstpointer         key_node)
+{
+  guint8 *node = (guint8 *) g_bsearch_array_lookup (barray, bconfig, key_node);
+  if (G_LIKELY (node))  /* expected path */
+    memcpy (node, key_node, bconfig->sizeof_node);
+  else                  /* revert to insertion */
+    barray = g_bsearch_array_insert (barray, bconfig, key_node);
+  return barray;
+}
+static inline GBSearchArray*
+g_bsearch_array_remove (GBSearchArray        *barray,
+                        const GBSearchConfig *bconfig,
+                        guint                 index_)
+{
+  guint8 *node;
+
+  g_return_val_if_fail (index_ < barray->n_nodes, NULL);
+
+  barray->n_nodes -= 1;
+  node = G_BSEARCH_ARRAY_NODES (barray) + index_ * bconfig->sizeof_node;
+  g_memmove (node, node + bconfig->sizeof_node, (barray->n_nodes - index_) * bconfig->sizeof_node);
+  if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_AUTO_SHRINK))
+    {
+      guint new_size = barray->n_nodes * bconfig->sizeof_node;
+      guint old_size = new_size + bconfig->sizeof_node;
+
+      if (G_UNLIKELY (bconfig->flags & G_BSEARCH_ARRAY_ALIGN_POWER2))
+        {
+          new_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + new_size);
+          old_size = G_BSEARCH_UPPER_POWER2 (sizeof (GBSearchArray) + old_size);
+          if (old_size != new_size)
+            barray = (GBSearchArray *) g_realloc (barray, new_size);
+        }
+      else
+        barray = (GBSearchArray *) g_realloc (barray, sizeof (GBSearchArray) + new_size);
+    }
+  return barray;
+}
+static inline void
+g_bsearch_array_free (GBSearchArray        *barray,
+                      const GBSearchConfig *bconfig)
+{
+  g_return_if_fail (barray != NULL);
+
+  g_free (barray);
+}
+
+G_END_DECLS     /* c++ guards */
+
+#endif  /* !__G_BSEARCH_ARRAY_H__ */
diff --git a/glib/gcache.h b/glib/gcache.h
new file mode 100644
index 0000000..283783d
--- /dev/null
+++ b/glib/gcache.h
@@ -0,0 +1,69 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_CACHE_H__
+#define __G_CACHE_H__
+
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GCache          GCache;
+
+typedef gpointer        (*GCacheNewFunc)        (gpointer       key);
+typedef gpointer        (*GCacheDupFunc)        (gpointer       value);
+typedef void            (*GCacheDestroyFunc)    (gpointer       value);
+
+/* Caches
+ */
+GCache*  g_cache_new           (GCacheNewFunc      value_new_func,
+                                GCacheDestroyFunc  value_destroy_func,
+                                GCacheDupFunc      key_dup_func,
+                                GCacheDestroyFunc  key_destroy_func,
+                                GHashFunc          hash_key_func,
+                                GHashFunc          hash_value_func,
+                                GEqualFunc         key_equal_func);
+void     g_cache_destroy       (GCache            *cache);
+gpointer g_cache_insert        (GCache            *cache,
+                                gpointer           key);
+void     g_cache_remove        (GCache            *cache,
+                                gconstpointer      value);
+void     g_cache_key_foreach   (GCache            *cache,
+                                GHFunc             func,
+                                gpointer           user_data);
+#ifndef G_DISABLE_DEPRECATED
+void     g_cache_value_foreach (GCache            *cache,
+                                GHFunc             func,
+                                gpointer           user_data);
+#endif
+
+G_END_DECLS
+
+#endif /* __G_CACHE_H__ */
diff --git a/glib/gchecksum.h b/glib/gchecksum.h
new file mode 100644
index 0000000..03f1e86
--- /dev/null
+++ b/glib/gchecksum.h
@@ -0,0 +1,86 @@
+/* gchecksum.h - data hashing functions
+ *
+ * Copyright (C) 2007  Emmanuele Bassi  <ebassi@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_CHECKSUM_H__
+#define __G_CHECKSUM_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GChecksumType:
+ * @G_CHECKSUM_MD5: Use the MD5 hashing algorithm
+ * @G_CHECKSUM_SHA1: Use the SHA-1 hashing algorithm
+ * @G_CHECKSUM_SHA256: Use the SHA-256 hashing algorithm
+ *
+ * The hashing algorithm to be used by #GChecksum when performing the
+ * digest of some data.
+ *
+ * Note that the #GChecksumType enumeration may be extended at a later 
+ * date to include new hashing algorithm types. 
+ *
+ * Since: 2.16
+ */
+typedef enum {
+  G_CHECKSUM_MD5,
+  G_CHECKSUM_SHA1,
+  G_CHECKSUM_SHA256
+} GChecksumType;
+
+/**
+ * GChecksum:
+ *
+ * An opaque structure representing a checksumming operation.
+ * To create a new GChecksum, use g_checksum_new(). To free
+ * a GChecksum, use g_checksum_free().
+ *
+ * Since: 2.16
+ */
+typedef struct _GChecksum       GChecksum;
+
+gssize                g_checksum_type_get_length (GChecksumType checksum_type);
+
+GChecksum *           g_checksum_new        (GChecksumType     checksum_type);
+void                  g_checksum_reset      (GChecksum        *checksum);
+GChecksum *           g_checksum_copy       (const GChecksum  *checksum);
+void                  g_checksum_free       (GChecksum        *checksum);
+void                  g_checksum_update     (GChecksum        *checksum,
+                                             const guchar     *data,
+                                             gssize            length);
+G_CONST_RETURN gchar *g_checksum_get_string (GChecksum        *checksum);
+void                  g_checksum_get_digest (GChecksum        *checksum,
+                                             guint8           *buffer,
+                                             gsize            *digest_len);
+
+gchar *g_compute_checksum_for_data   (GChecksumType  checksum_type,
+                                      const guchar  *data,
+                                      gsize          length);
+gchar *g_compute_checksum_for_string (GChecksumType  checksum_type,
+                                      const gchar   *str,
+                                      gssize         length);
+
+G_END_DECLS
+
+#endif /* __G_CHECKSUM_H__ */
diff --git a/glib/gcompletion.h b/glib/gcompletion.h
new file mode 100644
index 0000000..900883e
--- /dev/null
+++ b/glib/gcompletion.h
@@ -0,0 +1,77 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_COMPLETION_H__
+#define __G_COMPLETION_H__
+
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GCompletion     GCompletion;
+
+typedef gchar*          (*GCompletionFunc)      (gpointer);
+
+/* GCompletion
+ */
+
+typedef gint (*GCompletionStrncmpFunc) (const gchar *s1,
+					const gchar *s2,
+					gsize        n);
+
+struct _GCompletion
+{
+  GList* items;
+  GCompletionFunc func;
+ 
+  gchar* prefix;
+  GList* cache;
+  GCompletionStrncmpFunc strncmp_func;
+};
+
+GCompletion* g_completion_new           (GCompletionFunc func);
+void         g_completion_add_items     (GCompletion*    cmp,
+                                         GList*          items);
+void         g_completion_remove_items  (GCompletion*    cmp,
+                                         GList*          items);
+void         g_completion_clear_items   (GCompletion*    cmp);
+GList*       g_completion_complete      (GCompletion*    cmp,
+                                         const gchar*    prefix,
+                                         gchar**         new_prefix);
+GList*       g_completion_complete_utf8 (GCompletion  *cmp,
+                                         const gchar*    prefix,
+                                         gchar**         new_prefix);
+void         g_completion_set_compare   (GCompletion *cmp,
+				         GCompletionStrncmpFunc strncmp_func);
+void         g_completion_free          (GCompletion*    cmp);
+
+G_END_DECLS
+
+#endif /* __G_COMPLETION_H__ */
diff --git a/glib/gconvert.c b/glib/gconvert.c
new file mode 100644
index 0000000..c0952da
--- /dev/null
+++ b/glib/gconvert.c
@@ -0,0 +1,2140 @@
+/* GLIB - Library of useful routines for C programming
+ *
+ * gconvert.c: Convert between character sets using iconv
+ * Copyright Red Hat Inc., 2000
+ * Authors: Havoc Pennington <hp@redhat.com>, Owen Taylor <otaylor@redhat.com>
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include "glib.h"
+
+
+#ifdef ANDROID_STUB
+#ifndef G_OS_WIN32
+#include <iconv.h>
+#endif
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "gprintfint.h"
+#include "gthreadprivate.h"
+#include "gunicode.h"
+
+#ifdef G_OS_WIN32
+#include "win_iconv.c"
+#endif
+
+#ifdef G_PLATFORM_WIN32
+#define STRICT
+#include <windows.h>
+#undef STRICT
+#endif
+
+#include "glibintl.h"
+
+#if defined(USE_LIBICONV_GNU) && !defined (_LIBICONV_H)
+#error GNU libiconv in use but included iconv.h not from libiconv
+#endif
+#if !defined(USE_LIBICONV_GNU) && defined (_LIBICONV_H)
+#error GNU libiconv not in use but included iconv.h is from libiconv
+#endif
+
+#include "galias.h"
+
+typedef void iconv_t;
+
+GQuark 
+g_convert_error_quark (void)
+{
+  return g_quark_from_static_string ("g_convert_error");
+}
+
+static gboolean
+try_conversion (const char *to_codeset,
+		const char *from_codeset,
+		iconv_t    *cd)
+{
+#ifdef ANDROID_STUB
+  *cd = iconv_open (to_codeset, from_codeset);
+
+  if (*cd == (iconv_t)-1 && errno == EINVAL)
+    return FALSE;
+  else
+    return TRUE;
+#else
+  return FALSE;
+#endif
+}
+
+static gboolean
+try_to_aliases (const char **to_aliases,
+		const char  *from_codeset,
+		iconv_t     *cd)
+{
+  if (to_aliases)
+    {
+      const char **p = to_aliases;
+      while (*p)
+	{
+	  if (try_conversion (*p, from_codeset, cd))
+	    return TRUE;
+
+	  p++;
+	}
+    }
+
+  return FALSE;
+}
+
+#ifdef ANDROID_STUB
+G_GNUC_INTERNAL extern const char ** 
+_g_charset_get_aliases (const char *canonical_name);
+#endif
+
+/**
+ * g_iconv_open:
+ * @to_codeset: destination codeset
+ * @from_codeset: source codeset
+ * 
+ * Same as the standard UNIX routine iconv_open(), but
+ * may be implemented via libiconv on UNIX flavors that lack
+ * a native implementation.
+ * 
+ * GLib provides g_convert() and g_locale_to_utf8() which are likely
+ * more convenient than the raw iconv wrappers.
+ * 
+ * Return value: a "conversion descriptor", or (GIConv)-1 if
+ *  opening the converter failed.
+ **/
+GIConv
+g_iconv_open (const gchar  *to_codeset,
+	      const gchar  *from_codeset)
+{
+#ifdef ANDROID_STUB
+  iconv_t cd;
+  
+  if (!try_conversion (to_codeset, from_codeset, &cd))
+    {
+      const char **to_aliases = _g_charset_get_aliases (to_codeset);
+      const char **from_aliases = _g_charset_get_aliases (from_codeset);
+
+      if (from_aliases)
+	{
+	  const char **p = from_aliases;
+	  while (*p)
+	    {
+	      if (try_conversion (to_codeset, *p, &cd))
+		goto out;
+
+	      if (try_to_aliases (to_aliases, *p, &cd))
+		goto out;
+
+	      p++;
+	    }
+	}
+
+      if (try_to_aliases (to_aliases, from_codeset, &cd))
+	goto out;
+    }
+
+ out:
+  return (cd == (iconv_t)-1) ? (GIConv)-1 : (GIConv)cd;
+#else
+  return (GIConv) -1;
+#endif
+}
+
+/**
+ * g_iconv:
+ * @converter: conversion descriptor from g_iconv_open()
+ * @inbuf: bytes to convert
+ * @inbytes_left: inout parameter, bytes remaining to convert in @inbuf
+ * @outbuf: converted output bytes
+ * @outbytes_left: inout parameter, bytes available to fill in @outbuf
+ * 
+ * Same as the standard UNIX routine iconv(), but
+ * may be implemented via libiconv on UNIX flavors that lack
+ * a native implementation.
+ *
+ * GLib provides g_convert() and g_locale_to_utf8() which are likely
+ * more convenient than the raw iconv wrappers.
+ * 
+ * Return value: count of non-reversible conversions, or -1 on error
+ **/
+gsize 
+g_iconv (GIConv   converter,
+	 gchar  **inbuf,
+	 gsize   *inbytes_left,
+	 gchar  **outbuf,
+	 gsize   *outbytes_left)
+{
+#ifdef ANDROID_STUB
+  iconv_t cd = (iconv_t)converter;
+
+  return iconv (cd, inbuf, inbytes_left, outbuf, outbytes_left);
+#else
+  return -1;
+#endif
+}
+
+/**
+ * g_iconv_close:
+ * @converter: a conversion descriptor from g_iconv_open()
+ *
+ * Same as the standard UNIX routine iconv_close(), but
+ * may be implemented via libiconv on UNIX flavors that lack
+ * a native implementation. Should be called to clean up
+ * the conversion descriptor from g_iconv_open() when
+ * you are done converting things.
+ *
+ * GLib provides g_convert() and g_locale_to_utf8() which are likely
+ * more convenient than the raw iconv wrappers.
+ * 
+ * Return value: -1 on error, 0 on success
+ **/
+gint
+g_iconv_close (GIConv converter)
+{
+#ifdef ANDROID_STUB
+  iconv_t cd = (iconv_t)converter;
+
+  return iconv_close (cd);
+#else
+  return -1;
+#endif
+}
+
+
+#ifdef NEED_ICONV_CACHE
+
+#define ICONV_CACHE_SIZE   (16)
+
+struct _iconv_cache_bucket {
+  gchar *key;
+  guint32 refcount;
+  gboolean used;
+  GIConv cd;
+};
+
+static GList *iconv_cache_list;
+static GHashTable *iconv_cache;
+static GHashTable *iconv_open_hash;
+static guint iconv_cache_size = 0;
+G_LOCK_DEFINE_STATIC (iconv_cache_lock);
+
+/* caller *must* hold the iconv_cache_lock */
+static void
+iconv_cache_init (void)
+{
+  static gboolean initialized = FALSE;
+  
+  if (initialized)
+    return;
+  
+  iconv_cache_list = NULL;
+  iconv_cache = g_hash_table_new (g_str_hash, g_str_equal);
+  iconv_open_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
+  
+  initialized = TRUE;
+}
+
+
+/*
+ * iconv_cache_bucket_new:
+ * @key: cache key
+ * @cd: iconv descriptor
+ *
+ * Creates a new cache bucket, inserts it into the cache and
+ * increments the cache size.
+ *
+ * This assumes ownership of @key.
+ *
+ * Returns a pointer to the newly allocated cache bucket.
+ **/
+static struct _iconv_cache_bucket *
+iconv_cache_bucket_new (gchar *key, GIConv cd)
+{
+  struct _iconv_cache_bucket *bucket;
+  
+  bucket = g_new (struct _iconv_cache_bucket, 1);
+  bucket->key = key;
+  bucket->refcount = 1;
+  bucket->used = TRUE;
+  bucket->cd = cd;
+  
+  g_hash_table_insert (iconv_cache, bucket->key, bucket);
+  
+  /* FIXME: if we sorted the list so items with few refcounts were
+     first, then we could expire them faster in iconv_cache_expire_unused () */
+  iconv_cache_list = g_list_prepend (iconv_cache_list, bucket);
+  
+  iconv_cache_size++;
+  
+  return bucket;
+}
+
+
+/*
+ * iconv_cache_bucket_expire:
+ * @node: cache bucket's node
+ * @bucket: cache bucket
+ *
+ * Expires a single cache bucket @bucket. This should only ever be
+ * called on a bucket that currently has no used iconv descriptors
+ * open.
+ *
+ * @node is not a required argument. If @node is not supplied, we
+ * search for it ourselves.
+ **/
+static void
+iconv_cache_bucket_expire (GList *node, struct _iconv_cache_bucket *bucket)
+{
+  g_hash_table_remove (iconv_cache, bucket->key);
+  
+  if (node == NULL)
+    node = g_list_find (iconv_cache_list, bucket);
+  
+  g_assert (node != NULL);
+  
+  if (node->prev)
+    {
+      node->prev->next = node->next;
+      if (node->next)
+        node->next->prev = node->prev;
+    }
+  else
+    {
+      iconv_cache_list = node->next;
+      if (node->next)
+        node->next->prev = NULL;
+    }
+  
+  g_list_free_1 (node);
+  
+  g_free (bucket->key);
+  g_iconv_close (bucket->cd);
+  g_free (bucket);
+  
+  iconv_cache_size--;
+}
+
+
+/*
+ * iconv_cache_expire_unused:
+ *
+ * Expires as many unused cache buckets as it needs to in order to get
+ * the total number of buckets < ICONV_CACHE_SIZE.
+ **/
+static void
+iconv_cache_expire_unused (void)
+{
+  struct _iconv_cache_bucket *bucket;
+  GList *node, *next;
+  
+  node = iconv_cache_list;
+  while (node && iconv_cache_size >= ICONV_CACHE_SIZE)
+    {
+      next = node->next;
+      
+      bucket = node->data;
+      if (bucket->refcount == 0)
+        iconv_cache_bucket_expire (node, bucket);
+      
+      node = next;
+    }
+}
+
+static GIConv
+open_converter (const gchar *to_codeset,
+		const gchar *from_codeset,
+		GError     **error)
+{
+  struct _iconv_cache_bucket *bucket;
+  gchar *key, *dyn_key, auto_key[80];
+  GIConv cd;
+  gsize len_from_codeset, len_to_codeset;
+  
+  /* create our key */
+  len_from_codeset = strlen (from_codeset);
+  len_to_codeset = strlen (to_codeset);
+  if (len_from_codeset + len_to_codeset + 2 < sizeof (auto_key))
+    {
+      key = auto_key;
+      dyn_key = NULL;
+    }
+  else
+    key = dyn_key = g_malloc (len_from_codeset + len_to_codeset + 2);
+  memcpy (key, from_codeset, len_from_codeset);
+  key[len_from_codeset] = ':';
+  strcpy (key + len_from_codeset + 1, to_codeset);
+
+  G_LOCK (iconv_cache_lock);
+  
+  /* make sure the cache has been initialized */
+  iconv_cache_init ();
+  
+  bucket = g_hash_table_lookup (iconv_cache, key);
+  if (bucket)
+    {
+      g_free (dyn_key);
+
+      if (bucket->used)
+        {
+          cd = g_iconv_open (to_codeset, from_codeset);
+          if (cd == (GIConv) -1)
+            goto error;
+        }
+      else
+        {
+	  /* Apparently iconv on Solaris <= 7 segfaults if you pass in
+	   * NULL for anything but inbuf; work around that. (NULL outbuf
+	   * or NULL *outbuf is allowed by Unix98.)
+	   */
+	  gsize inbytes_left = 0;
+	  gchar *outbuf = NULL;
+	  gsize outbytes_left = 0;
+		
+          cd = bucket->cd;
+          bucket->used = TRUE;
+          
+          /* reset the descriptor */
+          g_iconv (cd, NULL, &inbytes_left, &outbuf, &outbytes_left);
+        }
+      
+      bucket->refcount++;
+    }
+  else
+    {
+      cd = g_iconv_open (to_codeset, from_codeset);
+      if (cd == (GIConv) -1) 
+	{
+	  g_free (dyn_key);
+	  goto error;
+	}
+      
+      iconv_cache_expire_unused ();
+
+      bucket = iconv_cache_bucket_new (dyn_key ? dyn_key : g_strdup (key), cd);
+    }
+  
+  g_hash_table_insert (iconv_open_hash, cd, bucket->key);
+  
+  G_UNLOCK (iconv_cache_lock);
+  
+  return cd;
+  
+ error:
+  
+  G_UNLOCK (iconv_cache_lock);
+  
+  /* Something went wrong.  */
+  if (error)
+    {
+      if (errno == EINVAL)
+	g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
+		     _("Conversion from character set '%s' to '%s' is not supported"),
+		     from_codeset, to_codeset);
+      else
+	g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+		     _("Could not open converter from '%s' to '%s'"),
+		     from_codeset, to_codeset);
+    }
+  
+  return cd;
+}
+
+static int
+close_converter (GIConv converter)
+{
+  struct _iconv_cache_bucket *bucket;
+  const gchar *key;
+  GIConv cd;
+  
+  cd = converter;
+  
+  if (cd == (GIConv) -1)
+    return 0;
+  
+  G_LOCK (iconv_cache_lock);
+  
+  key = g_hash_table_lookup (iconv_open_hash, cd);
+  if (key)
+    {
+      g_hash_table_remove (iconv_open_hash, cd);
+      
+      bucket = g_hash_table_lookup (iconv_cache, key);
+      g_assert (bucket);
+      
+      bucket->refcount--;
+      
+      if (cd == bucket->cd)
+        bucket->used = FALSE;
+      else
+        g_iconv_close (cd);
+      
+      if (!bucket->refcount && iconv_cache_size > ICONV_CACHE_SIZE)
+        {
+          /* expire this cache bucket */
+          iconv_cache_bucket_expire (NULL, bucket);
+        }
+    }
+  else
+    {
+      G_UNLOCK (iconv_cache_lock);
+      
+      g_warning ("This iconv context wasn't opened using open_converter");
+      
+      return g_iconv_close (converter);
+    }
+  
+  G_UNLOCK (iconv_cache_lock);
+  
+  return 0;
+}
+
+#else  /* !NEED_ICONV_CACHE */
+
+static GIConv
+open_converter (const gchar *to_codeset,
+		const gchar *from_codeset,
+		GError     **error)
+{
+  GIConv cd;
+
+  cd = g_iconv_open (to_codeset, from_codeset);
+
+  if (cd == (GIConv) -1)
+    {
+      /* Something went wrong.  */
+      if (error)
+	{
+	  if (errno == EINVAL)
+	    g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
+			 _("Conversion from character set '%s' to '%s' is not supported"),
+			 from_codeset, to_codeset);
+	  else
+	    g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+			 _("Could not open converter from '%s' to '%s'"),
+			 from_codeset, to_codeset);
+	}
+    }
+  
+  return cd;
+}
+
+static int
+close_converter (GIConv cd)
+{
+  if (cd == (GIConv) -1)
+    return 0;
+  
+  return g_iconv_close (cd);  
+}
+
+#endif /* NEED_ICONV_CACHE */
+
+/**
+ * g_convert_with_iconv:
+ * @str:           the string to convert
+ * @len:           the length of the string, or -1 if the string is 
+ *                 nul-terminated<footnoteref linkend="nul-unsafe"/>. 
+ * @converter:     conversion descriptor from g_iconv_open()
+ * @bytes_read:    location to store the number of bytes in the
+ *                 input string that were successfully converted, or %NULL.
+ *                 Even if the conversion was successful, this may be 
+ *                 less than @len if there were partial characters
+ *                 at the end of the input. If the error
+ *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 stored will the byte offset after the last valid
+ *                 input sequence.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                 including the terminating nul).
+ * @error:         location to store the error occuring, or %NULL to ignore
+ *                 errors. Any of the errors in #GConvertError may occur.
+ *
+ * Converts a string from one character set to another. 
+ * 
+ * Note that you should use g_iconv() for streaming 
+ * conversions<footnote id="streaming-state">
+ *  <para>
+ * Despite the fact that @byes_read can return information about partial 
+ * characters, the <literal>g_convert_...</literal> functions
+ * are not generally suitable for streaming. If the underlying converter 
+ * being used maintains internal state, then this won't be preserved 
+ * across successive calls to g_convert(), g_convert_with_iconv() or 
+ * g_convert_with_fallback(). (An example of this is the GNU C converter 
+ * for CP1255 which does not emit a base character until it knows that 
+ * the next character is not a mark that could combine with the base 
+ * character.)
+ *  </para>
+ * </footnote>. 
+ *
+ * Return value: If the conversion was successful, a newly allocated
+ *               nul-terminated string, which must be freed with
+ *               g_free(). Otherwise %NULL and @error will be set.
+ **/
+gchar*
+g_convert_with_iconv (const gchar *str,
+		      gssize       len,
+		      GIConv       converter,
+		      gsize       *bytes_read, 
+		      gsize       *bytes_written, 
+		      GError     **error)
+{
+  gchar *dest;
+  gchar *outp;
+  const gchar *p;
+  gsize inbytes_remaining;
+  gsize outbytes_remaining;
+  gsize err;
+  gsize outbuf_size;
+  gboolean have_error = FALSE;
+  gboolean done = FALSE;
+  gboolean reset = FALSE;
+  
+  g_return_val_if_fail (converter != (GIConv) -1, NULL);
+     
+  if (len < 0)
+    len = strlen (str);
+
+  p = str;
+  inbytes_remaining = len;
+  outbuf_size = len + 1; /* + 1 for nul in case len == 1 */
+  
+  outbytes_remaining = outbuf_size - 1; /* -1 for nul */
+  outp = dest = g_malloc (outbuf_size);
+
+  while (!done && !have_error)
+    {
+      if (reset)
+        err = g_iconv (converter, NULL, &inbytes_remaining, &outp, &outbytes_remaining);
+      else
+        err = g_iconv (converter, (char **)&p, &inbytes_remaining, &outp, &outbytes_remaining);
+
+      if (err == (gsize) -1)
+	{
+	  switch (errno)
+	    {
+	    case EINVAL:
+	      /* Incomplete text, do not report an error */
+	      done = TRUE;
+	      break;
+	    case E2BIG:
+	      {
+		gsize used = outp - dest;
+		
+		outbuf_size *= 2;
+		dest = g_realloc (dest, outbuf_size);
+		
+		outp = dest + used;
+		outbytes_remaining = outbuf_size - used - 1; /* -1 for nul */
+	      }
+	      break;
+	    case EILSEQ:
+	      if (error)
+		g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                     _("Invalid byte sequence in conversion input"));
+	      have_error = TRUE;
+	      break;
+	    default:
+	      if (error)
+		g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+			     _("Error during conversion: %s"),
+			     g_strerror (errno));
+	      have_error = TRUE;
+	      break;
+	    }
+	}
+      else 
+	{
+	  if (!reset)
+	    {
+	      /* call g_iconv with NULL inbuf to cleanup shift state */
+	      reset = TRUE;
+	      inbytes_remaining = 0;
+	    }
+	  else
+	    done = TRUE;
+	}
+    }
+
+  *outp = '\0';
+  
+  if (bytes_read)
+    *bytes_read = p - str;
+  else
+    {
+      if ((p - str) != len) 
+	{
+          if (!have_error)
+            {
+	      if (error)
+		g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                                     _("Partial character sequence at end of input"));
+              have_error = TRUE;
+            }
+	}
+    }
+
+  if (bytes_written)
+    *bytes_written = outp - dest;	/* Doesn't include '\0' */
+
+  if (have_error)
+    {
+      g_free (dest);
+      return NULL;
+    }
+  else
+    return dest;
+}
+
+/**
+ * g_convert:
+ * @str:           the string to convert
+ * @len:           the length of the string, or -1 if the string is 
+ *                 nul-terminated<footnote id="nul-unsafe">
+                     <para>
+                       Note that some encodings may allow nul bytes to 
+                       occur inside strings. In that case, using -1 for 
+                       the @len parameter is unsafe.
+                     </para>
+                   </footnote>. 
+ * @to_codeset:    name of character set into which to convert @str
+ * @from_codeset:  character set of @str.
+ * @bytes_read:    location to store the number of bytes in the
+ *                 input string that were successfully converted, or %NULL.
+ *                 Even if the conversion was successful, this may be 
+ *                 less than @len if there were partial characters
+ *                 at the end of the input. If the error
+ *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 stored will the byte offset after the last valid
+ *                 input sequence.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                 including the terminating nul).
+ * @error:         location to store the error occuring, or %NULL to ignore
+ *                 errors. Any of the errors in #GConvertError may occur.
+ *
+ * Converts a string from one character set to another.
+ *
+ * Note that you should use g_iconv() for streaming 
+ * conversions<footnoteref linkend="streaming-state"/>.
+ *
+ * Return value: If the conversion was successful, a newly allocated
+ *               nul-terminated string, which must be freed with
+ *               g_free(). Otherwise %NULL and @error will be set.
+ **/
+gchar*
+g_convert (const gchar *str,
+           gssize       len,  
+           const gchar *to_codeset,
+           const gchar *from_codeset,
+           gsize       *bytes_read, 
+	   gsize       *bytes_written, 
+	   GError     **error)
+{
+  gchar *res;
+  GIConv cd;
+
+  g_return_val_if_fail (str != NULL, NULL);
+  g_return_val_if_fail (to_codeset != NULL, NULL);
+  g_return_val_if_fail (from_codeset != NULL, NULL);
+  
+  cd = open_converter (to_codeset, from_codeset, error);
+
+  if (cd == (GIConv) -1)
+    {
+      if (bytes_read)
+        *bytes_read = 0;
+      
+      if (bytes_written)
+        *bytes_written = 0;
+      
+      return NULL;
+    }
+
+  res = g_convert_with_iconv (str, len, cd,
+			      bytes_read, bytes_written,
+			      error);
+
+  close_converter (cd);
+
+  return res;
+}
+
+/**
+ * g_convert_with_fallback:
+ * @str:          the string to convert
+ * @len:          the length of the string, or -1 if the string is 
+ *                nul-terminated<footnoteref linkend="nul-unsafe"/>. 
+ * @to_codeset:   name of character set into which to convert @str
+ * @from_codeset: character set of @str.
+ * @fallback:     UTF-8 string to use in place of character not
+ *                present in the target encoding. (The string must be
+ *                representable in the target encoding). 
+                  If %NULL, characters not in the target encoding will 
+                  be represented as Unicode escapes \uxxxx or \Uxxxxyyyy.
+ * @bytes_read:   location to store the number of bytes in the
+ *                input string that were successfully converted, or %NULL.
+ *                Even if the conversion was successful, this may be 
+ *                less than @len if there were partial characters
+ *                at the end of the input.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                including the terminating nul).
+ * @error:        location to store the error occuring, or %NULL to ignore
+ *                errors. Any of the errors in #GConvertError may occur.
+ *
+ * Converts a string from one character set to another, possibly
+ * including fallback sequences for characters not representable
+ * in the output. Note that it is not guaranteed that the specification
+ * for the fallback sequences in @fallback will be honored. Some
+ * systems may do an approximate conversion from @from_codeset
+ * to @to_codeset in their iconv() functions, 
+ * in which case GLib will simply return that approximate conversion.
+ *
+ * Note that you should use g_iconv() for streaming 
+ * conversions<footnoteref linkend="streaming-state"/>.
+ *
+ * Return value: If the conversion was successful, a newly allocated
+ *               nul-terminated string, which must be freed with
+ *               g_free(). Otherwise %NULL and @error will be set.
+ **/
+gchar*
+g_convert_with_fallback (const gchar *str,
+			 gssize       len,    
+			 const gchar *to_codeset,
+			 const gchar *from_codeset,
+			 gchar       *fallback,
+			 gsize       *bytes_read,
+			 gsize       *bytes_written,
+			 GError     **error)
+{
+  gchar *utf8;
+  gchar *dest;
+  gchar *outp;
+  const gchar *insert_str = NULL;
+  const gchar *p;
+  gsize inbytes_remaining;   
+  const gchar *save_p = NULL;
+  gsize save_inbytes = 0;
+  gsize outbytes_remaining; 
+  gsize err;
+  GIConv cd;
+  gsize outbuf_size;
+  gboolean have_error = FALSE;
+  gboolean done = FALSE;
+
+  GError *local_error = NULL;
+  
+  g_return_val_if_fail (str != NULL, NULL);
+  g_return_val_if_fail (to_codeset != NULL, NULL);
+  g_return_val_if_fail (from_codeset != NULL, NULL);
+     
+  if (len < 0)
+    len = strlen (str);
+  
+  /* Try an exact conversion; we only proceed if this fails
+   * due to an illegal sequence in the input string.
+   */
+  dest = g_convert (str, len, to_codeset, from_codeset, 
+		    bytes_read, bytes_written, &local_error);
+  if (!local_error)
+    return dest;
+
+  if (!g_error_matches (local_error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE))
+    {
+      g_propagate_error (error, local_error);
+      return NULL;
+    }
+  else
+    g_error_free (local_error);
+
+  local_error = NULL;
+  
+  /* No go; to proceed, we need a converter from "UTF-8" to
+   * to_codeset, and the string as UTF-8.
+   */
+  cd = open_converter (to_codeset, "UTF-8", error);
+  if (cd == (GIConv) -1)
+    {
+      if (bytes_read)
+        *bytes_read = 0;
+      
+      if (bytes_written)
+        *bytes_written = 0;
+      
+      return NULL;
+    }
+
+  utf8 = g_convert (str, len, "UTF-8", from_codeset, 
+		    bytes_read, &inbytes_remaining, error);
+  if (!utf8)
+    {
+      close_converter (cd);
+      if (bytes_written)
+        *bytes_written = 0;
+      return NULL;
+    }
+
+  /* Now the heart of the code. We loop through the UTF-8 string, and
+   * whenever we hit an offending character, we form fallback, convert
+   * the fallback to the target codeset, and then go back to
+   * converting the original string after finishing with the fallback.
+   *
+   * The variables save_p and save_inbytes store the input state
+   * for the original string while we are converting the fallback
+   */
+  p = utf8;
+
+  outbuf_size = len + 1; /* + 1 for nul in case len == 1 */
+  outbytes_remaining = outbuf_size - 1; /* -1 for nul */
+  outp = dest = g_malloc (outbuf_size);
+
+  while (!done && !have_error)
+    {
+      gsize inbytes_tmp = inbytes_remaining;
+      err = g_iconv (cd, (char **)&p, &inbytes_tmp, &outp, &outbytes_remaining);
+      inbytes_remaining = inbytes_tmp;
+
+      if (err == (gsize) -1)
+	{
+	  switch (errno)
+	    {
+	    case EINVAL:
+	      g_assert_not_reached();
+	      break;
+	    case E2BIG:
+	      {
+		gsize used = outp - dest;
+
+		outbuf_size *= 2;
+		dest = g_realloc (dest, outbuf_size);
+		
+		outp = dest + used;
+		outbytes_remaining = outbuf_size - used - 1; /* -1 for nul */
+		
+		break;
+	      }
+	    case EILSEQ:
+	      if (save_p)
+		{
+		  /* Error converting fallback string - fatal
+		   */
+		  g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+			       _("Cannot convert fallback '%s' to codeset '%s'"),
+			       insert_str, to_codeset);
+		  have_error = TRUE;
+		  break;
+		}
+	      else if (p)
+		{
+		  if (!fallback)
+		    { 
+		      gunichar ch = g_utf8_get_char (p);
+		      insert_str = g_strdup_printf (ch < 0x10000 ? "\\u%04x" : "\\U%08x",
+						    ch);
+		    }
+		  else
+		    insert_str = fallback;
+		  
+		  save_p = g_utf8_next_char (p);
+		  save_inbytes = inbytes_remaining - (save_p - p);
+		  p = insert_str;
+		  inbytes_remaining = strlen (p);
+		  break;
+		}
+	      /* fall thru if p is NULL */
+	    default:
+	      g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+			   _("Error during conversion: %s"),
+			   g_strerror (errno));
+	      have_error = TRUE;
+	      break;
+	    }
+	}
+      else
+	{
+	  if (save_p)
+	    {
+	      if (!fallback)
+		g_free ((gchar *)insert_str);
+	      p = save_p;
+	      inbytes_remaining = save_inbytes;
+	      save_p = NULL;
+	    }
+	  else if (p)
+	    {
+	      /* call g_iconv with NULL inbuf to cleanup shift state */
+	      p = NULL;
+	      inbytes_remaining = 0;
+	    }
+	  else
+	    done = TRUE;
+	}
+    }
+
+  /* Cleanup
+   */
+  *outp = '\0';
+  
+  close_converter (cd);
+
+  if (bytes_written)
+    *bytes_written = outp - dest;	/* Doesn't include '\0' */
+
+  g_free (utf8);
+
+  if (have_error)
+    {
+      if (save_p && !fallback)
+	g_free ((gchar *)insert_str);
+      g_free (dest);
+      return NULL;
+    }
+  else
+    return dest;
+}
+
+/*
+ * g_locale_to_utf8
+ *
+ * 
+ */
+
+static gchar *
+strdup_len (const gchar *string,
+	    gssize       len,
+	    gsize       *bytes_written,
+	    gsize       *bytes_read,
+	    GError      **error)
+	 
+{
+  gsize real_len;
+
+  if (!g_utf8_validate (string, len, NULL))
+    {
+      if (bytes_read)
+	*bytes_read = 0;
+      if (bytes_written)
+	*bytes_written = 0;
+
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                           _("Invalid byte sequence in conversion input"));
+      return NULL;
+    }
+  
+  if (len < 0)
+    real_len = strlen (string);
+  else
+    {
+      real_len = 0;
+      
+      while (real_len < len && string[real_len])
+	real_len++;
+    }
+  
+  if (bytes_read)
+    *bytes_read = real_len;
+  if (bytes_written)
+    *bytes_written = real_len;
+
+  return g_strndup (string, real_len);
+}
+
+/**
+ * g_locale_to_utf8:
+ * @opsysstring:   a string in the encoding of the current locale. On Windows
+ *                 this means the system codepage.
+ * @len:           the length of the string, or -1 if the string is
+ *                 nul-terminated<footnoteref linkend="nul-unsafe"/>. 
+ * @bytes_read:    location to store the number of bytes in the
+ *                 input string that were successfully converted, or %NULL.
+ *                 Even if the conversion was successful, this may be 
+ *                 less than @len if there were partial characters
+ *                 at the end of the input. If the error
+ *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 stored will the byte offset after the last valid
+ *                 input sequence.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                 including the terminating nul).
+ * @error:         location to store the error occuring, or %NULL to ignore
+ *                 errors. Any of the errors in #GConvertError may occur.
+ * 
+ * Converts a string which is in the encoding used for strings by
+ * the C runtime (usually the same as that used by the operating
+ * system) in the <link linkend="setlocale">current locale</link> into a
+ * UTF-8 string.
+ * 
+ * Return value: The converted string, or %NULL on an error.
+ **/
+gchar *
+g_locale_to_utf8 (const gchar  *opsysstring,
+		  gssize        len,            
+		  gsize        *bytes_read,    
+		  gsize        *bytes_written,
+		  GError      **error)
+{
+  const char *charset;
+
+  if (g_get_charset (&charset))
+    return strdup_len (opsysstring, len, bytes_read, bytes_written, error);
+  else
+    return g_convert (opsysstring, len, 
+		      "UTF-8", charset, bytes_read, bytes_written, error);
+}
+
+/**
+ * g_locale_from_utf8:
+ * @utf8string:    a UTF-8 encoded string 
+ * @len:           the length of the string, or -1 if the string is
+ *                 nul-terminated<footnoteref linkend="nul-unsafe"/>. 
+ * @bytes_read:    location to store the number of bytes in the
+ *                 input string that were successfully converted, or %NULL.
+ *                 Even if the conversion was successful, this may be 
+ *                 less than @len if there were partial characters
+ *                 at the end of the input. If the error
+ *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 stored will the byte offset after the last valid
+ *                 input sequence.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                 including the terminating nul).
+ * @error:         location to store the error occuring, or %NULL to ignore
+ *                 errors. Any of the errors in #GConvertError may occur.
+ * 
+ * Converts a string from UTF-8 to the encoding used for strings by
+ * the C runtime (usually the same as that used by the operating
+ * system) in the <link linkend="setlocale">current locale</link>. On
+ * Windows this means the system codepage.
+ * 
+ * Return value: The converted string, or %NULL on an error.
+ **/
+gchar *
+g_locale_from_utf8 (const gchar *utf8string,
+		    gssize       len,            
+		    gsize       *bytes_read,    
+		    gsize       *bytes_written,
+		    GError     **error)
+{
+  const gchar *charset;
+
+  if (g_get_charset (&charset))
+    return strdup_len (utf8string, len, bytes_read, bytes_written, error);
+  else
+    return g_convert (utf8string, len,
+		      charset, "UTF-8", bytes_read, bytes_written, error);
+}
+
+#ifndef G_PLATFORM_WIN32
+
+typedef struct _GFilenameCharsetCache GFilenameCharsetCache;
+
+struct _GFilenameCharsetCache {
+  gboolean is_utf8;
+  gchar *charset;
+  gchar **filename_charsets;
+};
+
+static void
+filename_charset_cache_free (gpointer data)
+{
+  GFilenameCharsetCache *cache = data;
+  g_free (cache->charset);
+  g_strfreev (cache->filename_charsets);
+  g_free (cache);
+}
+
+/**
+ * g_get_filename_charsets:
+ * @charsets: return location for the %NULL-terminated list of encoding names
+ *
+ * Determines the preferred character sets used for filenames.
+ * The first character set from the @charsets is the filename encoding, the
+ * subsequent character sets are used when trying to generate a displayable
+ * representation of a filename, see g_filename_display_name().
+ *
+ * On Unix, the character sets are determined by consulting the
+ * environment variables <envar>G_FILENAME_ENCODING</envar> and
+ * <envar>G_BROKEN_FILENAMES</envar>. On Windows, the character set
+ * used in the GLib API is always UTF-8 and said environment variables
+ * have no effect.
+ *
+ * <envar>G_FILENAME_ENCODING</envar> may be set to a comma-separated list 
+ * of character set names. The special token "&commat;locale" is taken to 
+ * mean the character set for the <link linkend="setlocale">current 
+ * locale</link>. If <envar>G_FILENAME_ENCODING</envar> is not set, but 
+ * <envar>G_BROKEN_FILENAMES</envar> is, the character set of the current 
+ * locale is taken as the filename encoding. If neither environment variable 
+ * is set, UTF-8 is taken as the filename encoding, but the character
+ * set of the current locale is also put in the list of encodings.
+ *
+ * The returned @charsets belong to GLib and must not be freed.
+ *
+ * Note that on Unix, regardless of the locale character set or
+ * <envar>G_FILENAME_ENCODING</envar> value, the actual file names present 
+ * on a system might be in any random encoding or just gibberish.
+ *
+ * Return value: %TRUE if the filename encoding is UTF-8.
+ * 
+ * Since: 2.6
+ */
+gboolean
+g_get_filename_charsets (G_CONST_RETURN gchar ***filename_charsets)
+{
+  static GStaticPrivate cache_private = G_STATIC_PRIVATE_INIT;
+  GFilenameCharsetCache *cache = g_static_private_get (&cache_private);
+  const gchar *charset;
+
+  if (!cache)
+    {
+      cache = g_new0 (GFilenameCharsetCache, 1);
+      g_static_private_set (&cache_private, cache, filename_charset_cache_free);
+    }
+
+  g_get_charset (&charset);
+
+  if (!(cache->charset && strcmp (cache->charset, charset) == 0))
+    {
+      const gchar *new_charset;
+      gchar *p;
+      gint i;
+
+      g_free (cache->charset);
+      g_strfreev (cache->filename_charsets);
+      cache->charset = g_strdup (charset);
+      
+      p = getenv ("G_FILENAME_ENCODING");
+      if (p != NULL && p[0] != '\0') 
+	{
+	  cache->filename_charsets = g_strsplit (p, ",", 0);
+	  cache->is_utf8 = (strcmp (cache->filename_charsets[0], "UTF-8") == 0);
+
+	  for (i = 0; cache->filename_charsets[i]; i++)
+	    {
+	      if (strcmp ("@locale", cache->filename_charsets[i]) == 0)
+		{
+		  g_get_charset (&new_charset);
+		  g_free (cache->filename_charsets[i]);
+		  cache->filename_charsets[i] = g_strdup (new_charset);
+		}
+	    }
+	}
+      else if (getenv ("G_BROKEN_FILENAMES") != NULL)
+	{
+	  cache->filename_charsets = g_new0 (gchar *, 2);
+	  cache->is_utf8 = g_get_charset (&new_charset);
+	  cache->filename_charsets[0] = g_strdup (new_charset);
+	}
+      else 
+	{
+	  cache->filename_charsets = g_new0 (gchar *, 3);
+	  cache->is_utf8 = TRUE;
+	  cache->filename_charsets[0] = g_strdup ("UTF-8");
+	  if (!g_get_charset (&new_charset))
+	    cache->filename_charsets[1] = g_strdup (new_charset);
+	}
+    }
+
+  if (filename_charsets)
+    *filename_charsets = (const gchar **)cache->filename_charsets;
+
+  return cache->is_utf8;
+}
+
+#else /* G_PLATFORM_WIN32 */
+
+gboolean
+g_get_filename_charsets (G_CONST_RETURN gchar ***filename_charsets) 
+{
+  static const gchar *charsets[] = {
+    "UTF-8",
+    NULL
+  };
+
+#ifdef G_OS_WIN32
+  /* On Windows GLib pretends that the filename charset is UTF-8 */
+  if (filename_charsets)
+    *filename_charsets = charsets;
+
+  return TRUE;
+#else
+  gboolean result;
+
+  /* Cygwin works like before */
+  result = g_get_charset (&(charsets[0]));
+
+  if (filename_charsets)
+    *filename_charsets = charsets;
+
+  return result;
+#endif
+}
+
+#endif /* G_PLATFORM_WIN32 */
+
+static gboolean
+get_filename_charset (const gchar **filename_charset)
+{
+  const gchar **charsets;
+  gboolean is_utf8;
+  
+  is_utf8 = g_get_filename_charsets (&charsets);
+
+  if (filename_charset)
+    *filename_charset = charsets[0];
+  
+  return is_utf8;
+}
+
+/* This is called from g_thread_init(). It's used to
+ * initialize some static data in a threadsafe way.
+ */
+void 
+_g_convert_thread_init (void)
+{
+  const gchar **dummy;
+  (void) g_get_filename_charsets (&dummy);
+}
+
+/**
+ * g_filename_to_utf8:
+ * @opsysstring:   a string in the encoding for filenames
+ * @len:           the length of the string, or -1 if the string is
+ *                 nul-terminated<footnoteref linkend="nul-unsafe"/>. 
+ * @bytes_read:    location to store the number of bytes in the
+ *                 input string that were successfully converted, or %NULL.
+ *                 Even if the conversion was successful, this may be 
+ *                 less than @len if there were partial characters
+ *                 at the end of the input. If the error
+ *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 stored will the byte offset after the last valid
+ *                 input sequence.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                 including the terminating nul).
+ * @error:         location to store the error occuring, or %NULL to ignore
+ *                 errors. Any of the errors in #GConvertError may occur.
+ * 
+ * Converts a string which is in the encoding used by GLib for
+ * filenames into a UTF-8 string. Note that on Windows GLib uses UTF-8
+ * for filenames; on other platforms, this function indirectly depends on 
+ * the <link linkend="setlocale">current locale</link>.
+ * 
+ * Return value: The converted string, or %NULL on an error.
+ **/
+gchar*
+g_filename_to_utf8 (const gchar *opsysstring, 
+		    gssize       len,           
+		    gsize       *bytes_read,   
+		    gsize       *bytes_written,
+		    GError     **error)
+{
+  const gchar *charset;
+
+  if (get_filename_charset (&charset))
+    return strdup_len (opsysstring, len, bytes_read, bytes_written, error);
+  else
+    return g_convert (opsysstring, len, 
+		      "UTF-8", charset, bytes_read, bytes_written, error);
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+#undef g_filename_to_utf8
+
+/* Binary compatibility version. Not for newly compiled code. Also not needed for
+ * 64-bit versions as there should be no old deployed binaries that would use
+ * the old versions.
+ */
+
+gchar*
+g_filename_to_utf8 (const gchar *opsysstring, 
+		    gssize       len,           
+		    gsize       *bytes_read,   
+		    gsize       *bytes_written,
+		    GError     **error)
+{
+  const gchar *charset;
+
+  if (g_get_charset (&charset))
+    return strdup_len (opsysstring, len, bytes_read, bytes_written, error);
+  else
+    return g_convert (opsysstring, len, 
+		      "UTF-8", charset, bytes_read, bytes_written, error);
+}
+
+#endif
+
+/**
+ * g_filename_from_utf8:
+ * @utf8string:    a UTF-8 encoded string.
+ * @len:           the length of the string, or -1 if the string is
+ *                 nul-terminated.
+ * @bytes_read:    location to store the number of bytes in the
+ *                 input string that were successfully converted, or %NULL.
+ *                 Even if the conversion was successful, this may be 
+ *                 less than @len if there were partial characters
+ *                 at the end of the input. If the error
+ *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 stored will the byte offset after the last valid
+ *                 input sequence.
+ * @bytes_written: the number of bytes stored in the output buffer (not 
+ *                 including the terminating nul).
+ * @error:         location to store the error occuring, or %NULL to ignore
+ *                 errors. Any of the errors in #GConvertError may occur.
+ * 
+ * Converts a string from UTF-8 to the encoding GLib uses for
+ * filenames. Note that on Windows GLib uses UTF-8 for filenames;
+ * on other platforms, this function indirectly depends on the 
+ * <link linkend="setlocale">current locale</link>.
+ * 
+ * Return value: The converted string, or %NULL on an error.
+ **/
+gchar*
+g_filename_from_utf8 (const gchar *utf8string,
+		      gssize       len,            
+		      gsize       *bytes_read,    
+		      gsize       *bytes_written,
+		      GError     **error)
+{
+  const gchar *charset;
+
+  if (get_filename_charset (&charset))
+    return strdup_len (utf8string, len, bytes_read, bytes_written, error);
+  else
+    return g_convert (utf8string, len,
+		      charset, "UTF-8", bytes_read, bytes_written, error);
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+#undef g_filename_from_utf8
+
+/* Binary compatibility version. Not for newly compiled code. */
+
+gchar*
+g_filename_from_utf8 (const gchar *utf8string,
+		      gssize       len,            
+		      gsize       *bytes_read,    
+		      gsize       *bytes_written,
+		      GError     **error)
+{
+  const gchar *charset;
+
+  if (g_get_charset (&charset))
+    return strdup_len (utf8string, len, bytes_read, bytes_written, error);
+  else
+    return g_convert (utf8string, len,
+		      charset, "UTF-8", bytes_read, bytes_written, error);
+}
+
+#endif
+
+/* Test of haystack has the needle prefix, comparing case
+ * insensitive. haystack may be UTF-8, but needle must
+ * contain only ascii. */
+static gboolean
+has_case_prefix (const gchar *haystack, const gchar *needle)
+{
+  const gchar *h, *n;
+  
+  /* Eat one character at a time. */
+  h = haystack;
+  n = needle;
+
+  while (*n && *h &&
+	 g_ascii_tolower (*n) == g_ascii_tolower (*h))
+    {
+      n++;
+      h++;
+    }
+  
+  return *n == '\0';
+}
+
+typedef enum {
+  UNSAFE_ALL        = 0x1,  /* Escape all unsafe characters   */
+  UNSAFE_ALLOW_PLUS = 0x2,  /* Allows '+'  */
+  UNSAFE_PATH       = 0x8,  /* Allows '/', '&', '=', ':', '@', '+', '$' and ',' */
+  UNSAFE_HOST       = 0x10, /* Allows '/' and ':' and '@' */
+  UNSAFE_SLASHES    = 0x20  /* Allows all characters except for '/' and '%' */
+} UnsafeCharacterSet;
+
+static const guchar acceptable[96] = {
+  /* A table of the ASCII chars from space (32) to DEL (127) */
+  /*      !    "    #    $    %    &    '    (    )    *    +    ,    -    .    / */ 
+  0x00,0x3F,0x20,0x20,0x28,0x00,0x2C,0x3F,0x3F,0x3F,0x3F,0x2A,0x28,0x3F,0x3F,0x1C,
+  /* 0    1    2    3    4    5    6    7    8    9    :    ;    <    =    >    ? */
+  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x38,0x20,0x20,0x2C,0x20,0x20,
+  /* @    A    B    C    D    E    F    G    H    I    J    K    L    M    N    O */
+  0x38,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
+  /* P    Q    R    S    T    U    V    W    X    Y    Z    [    \    ]    ^    _ */
+  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x20,0x20,0x20,0x3F,
+  /* `    a    b    c    d    e    f    g    h    i    j    k    l    m    n    o */
+  0x20,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
+  /* p    q    r    s    t    u    v    w    x    y    z    {    |    }    ~  DEL */
+  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x20,0x20,0x3F,0x20
+};
+
+static const gchar hex[16] = "0123456789ABCDEF";
+
+/* Note: This escape function works on file: URIs, but if you want to
+ * escape something else, please read RFC-2396 */
+static gchar *
+g_escape_uri_string (const gchar *string, 
+		     UnsafeCharacterSet mask)
+{
+#define ACCEPTABLE(a) ((a)>=32 && (a)<128 && (acceptable[(a)-32] & use_mask))
+
+  const gchar *p;
+  gchar *q;
+  gchar *result;
+  int c;
+  gint unacceptable;
+  UnsafeCharacterSet use_mask;
+  
+  g_return_val_if_fail (mask == UNSAFE_ALL
+			|| mask == UNSAFE_ALLOW_PLUS
+			|| mask == UNSAFE_PATH
+			|| mask == UNSAFE_HOST
+			|| mask == UNSAFE_SLASHES, NULL);
+  
+  unacceptable = 0;
+  use_mask = mask;
+  for (p = string; *p != '\0'; p++)
+    {
+      c = (guchar) *p;
+      if (!ACCEPTABLE (c)) 
+	unacceptable++;
+    }
+  
+  result = g_malloc (p - string + unacceptable * 2 + 1);
+  
+  use_mask = mask;
+  for (q = result, p = string; *p != '\0'; p++)
+    {
+      c = (guchar) *p;
+      
+      if (!ACCEPTABLE (c))
+	{
+	  *q++ = '%'; /* means hex coming */
+	  *q++ = hex[c >> 4];
+	  *q++ = hex[c & 15];
+	}
+      else
+	*q++ = *p;
+    }
+  
+  *q = '\0';
+  
+  return result;
+}
+
+
+static gchar *
+g_escape_file_uri (const gchar *hostname,
+		   const gchar *pathname)
+{
+  char *escaped_hostname = NULL;
+  char *escaped_path;
+  char *res;
+
+#ifdef G_OS_WIN32
+  char *p, *backslash;
+
+  /* Turn backslashes into forward slashes. That's what Netscape
+   * does, and they are actually more or less equivalent in Windows.
+   */
+  
+  pathname = g_strdup (pathname);
+  p = (char *) pathname;
+  
+  while ((backslash = strchr (p, '\\')) != NULL)
+    {
+      *backslash = '/';
+      p = backslash + 1;
+    }
+#endif
+
+  if (hostname && *hostname != '\0')
+    {
+      escaped_hostname = g_escape_uri_string (hostname, UNSAFE_HOST);
+    }
+
+  escaped_path = g_escape_uri_string (pathname, UNSAFE_PATH);
+
+  res = g_strconcat ("file://",
+		     (escaped_hostname) ? escaped_hostname : "",
+		     (*escaped_path != '/') ? "/" : "",
+		     escaped_path,
+		     NULL);
+
+#ifdef G_OS_WIN32
+  g_free ((char *) pathname);
+#endif
+
+  g_free (escaped_hostname);
+  g_free (escaped_path);
+  
+  return res;
+}
+
+static int
+unescape_character (const char *scanner)
+{
+  int first_digit;
+  int second_digit;
+
+  first_digit = g_ascii_xdigit_value (scanner[0]);
+  if (first_digit < 0) 
+    return -1;
+  
+  second_digit = g_ascii_xdigit_value (scanner[1]);
+  if (second_digit < 0) 
+    return -1;
+  
+  return (first_digit << 4) | second_digit;
+}
+
+static gchar *
+g_unescape_uri_string (const char *escaped,
+		       int         len,
+		       const char *illegal_escaped_characters,
+		       gboolean    ascii_must_not_be_escaped)
+{
+  const gchar *in, *in_end;
+  gchar *out, *result;
+  int c;
+  
+  if (escaped == NULL)
+    return NULL;
+
+  if (len < 0)
+    len = strlen (escaped);
+
+  result = g_malloc (len + 1);
+  
+  out = result;
+  for (in = escaped, in_end = escaped + len; in < in_end; in++)
+    {
+      c = *in;
+
+      if (c == '%')
+	{
+	  /* catch partial escape sequences past the end of the substring */
+	  if (in + 3 > in_end)
+	    break;
+
+	  c = unescape_character (in + 1);
+
+	  /* catch bad escape sequences and NUL characters */
+	  if (c <= 0)
+	    break;
+
+	  /* catch escaped ASCII */
+	  if (ascii_must_not_be_escaped && c <= 0x7F)
+	    break;
+
+	  /* catch other illegal escaped characters */
+	  if (strchr (illegal_escaped_characters, c) != NULL)
+	    break;
+
+	  in += 2;
+	}
+
+      *out++ = c;
+    }
+  
+  g_assert (out - result <= len);
+  *out = '\0';
+
+  if (in != in_end)
+    {
+      g_free (result);
+      return NULL;
+    }
+
+  return result;
+}
+
+static gboolean
+is_asciialphanum (gunichar c)
+{
+  return c <= 0x7F && g_ascii_isalnum (c);
+}
+
+static gboolean
+is_asciialpha (gunichar c)
+{
+  return c <= 0x7F && g_ascii_isalpha (c);
+}
+
+/* allows an empty string */
+static gboolean
+hostname_validate (const char *hostname)
+{
+  const char *p;
+  gunichar c, first_char, last_char;
+
+  p = hostname;
+  if (*p == '\0')
+    return TRUE;
+  do
+    {
+      /* read in a label */
+      c = g_utf8_get_char (p);
+      p = g_utf8_next_char (p);
+      if (!is_asciialphanum (c))
+	return FALSE;
+      first_char = c;
+      do
+	{
+	  last_char = c;
+	  c = g_utf8_get_char (p);
+	  p = g_utf8_next_char (p);
+	}
+      while (is_asciialphanum (c) || c == '-');
+      if (last_char == '-')
+	return FALSE;
+      
+      /* if that was the last label, check that it was a toplabel */
+      if (c == '\0' || (c == '.' && *p == '\0'))
+	return is_asciialpha (first_char);
+    }
+  while (c == '.');
+  return FALSE;
+}
+
+/**
+ * g_filename_from_uri:
+ * @uri: a uri describing a filename (escaped, encoded in ASCII).
+ * @hostname: Location to store hostname for the URI, or %NULL.
+ *            If there is no hostname in the URI, %NULL will be
+ *            stored in this location.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError may occur.
+ * 
+ * Converts an escaped ASCII-encoded URI to a local filename in the
+ * encoding used for filenames. 
+ * 
+ * Return value: a newly-allocated string holding the resulting
+ *               filename, or %NULL on an error.
+ **/
+gchar *
+g_filename_from_uri (const gchar *uri,
+		     gchar      **hostname,
+		     GError     **error)
+{
+  const char *path_part;
+  const char *host_part;
+  char *unescaped_hostname;
+  char *result;
+  char *filename;
+  int offs;
+#ifdef G_OS_WIN32
+  char *p, *slash;
+#endif
+
+  if (hostname)
+    *hostname = NULL;
+
+  if (!has_case_prefix (uri, "file:/"))
+    {
+      g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_BAD_URI,
+		   _("The URI '%s' is not an absolute URI using the \"file\" scheme"),
+		   uri);
+      return NULL;
+    }
+  
+  path_part = uri + strlen ("file:");
+  
+  if (strchr (path_part, '#') != NULL)
+    {
+      g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_BAD_URI,
+		   _("The local file URI '%s' may not include a '#'"),
+		   uri);
+      return NULL;
+    }
+	
+  if (has_case_prefix (path_part, "///")) 
+    path_part += 2;
+  else if (has_case_prefix (path_part, "//"))
+    {
+      path_part += 2;
+      host_part = path_part;
+
+      path_part = strchr (path_part, '/');
+
+      if (path_part == NULL)
+	{
+	  g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_BAD_URI,
+		       _("The URI '%s' is invalid"),
+		       uri);
+	  return NULL;
+	}
+
+      unescaped_hostname = g_unescape_uri_string (host_part, path_part - host_part, "", TRUE);
+
+      if (unescaped_hostname == NULL ||
+	  !hostname_validate (unescaped_hostname))
+	{
+	  g_free (unescaped_hostname);
+	  g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_BAD_URI,
+		       _("The hostname of the URI '%s' is invalid"),
+		       uri);
+	  return NULL;
+	}
+      
+      if (hostname)
+	*hostname = unescaped_hostname;
+      else
+	g_free (unescaped_hostname);
+    }
+
+  filename = g_unescape_uri_string (path_part, -1, "/", FALSE);
+
+  if (filename == NULL)
+    {
+      g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_BAD_URI,
+		   _("The URI '%s' contains invalidly escaped characters"),
+		   uri);
+      return NULL;
+    }
+
+  offs = 0;
+#ifdef G_OS_WIN32
+  /* Drop localhost */
+  if (hostname && *hostname != NULL &&
+      g_ascii_strcasecmp (*hostname, "localhost") == 0)
+    {
+      g_free (*hostname);
+      *hostname = NULL;
+    }
+
+  /* Turn slashes into backslashes, because that's the canonical spelling */
+  p = filename;
+  while ((slash = strchr (p, '/')) != NULL)
+    {
+      *slash = '\\';
+      p = slash + 1;
+    }
+
+  /* Windows URIs with a drive letter can be like "file://host/c:/foo"
+   * or "file://host/c|/foo" (some Netscape versions). In those cases, start
+   * the filename from the drive letter.
+   */
+  if (g_ascii_isalpha (filename[1]))
+    {
+      if (filename[2] == ':')
+	offs = 1;
+      else if (filename[2] == '|')
+	{
+	  filename[2] = ':';
+	  offs = 1;
+	}
+    }
+#endif
+
+  result = g_strdup (filename + offs);
+  g_free (filename);
+
+  return result;
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+#undef g_filename_from_uri
+
+gchar *
+g_filename_from_uri (const gchar *uri,
+		     gchar      **hostname,
+		     GError     **error)
+{
+  gchar *utf8_filename;
+  gchar *retval = NULL;
+
+  utf8_filename = g_filename_from_uri_utf8 (uri, hostname, error);
+  if (utf8_filename)
+    {
+      retval = g_locale_from_utf8 (utf8_filename, -1, NULL, NULL, error);
+      g_free (utf8_filename);
+    }
+  return retval;
+}
+
+#endif
+
+/**
+ * g_filename_to_uri:
+ * @filename: an absolute filename specified in the GLib file name encoding,
+ *            which is the on-disk file name bytes on Unix, and UTF-8 on 
+ *            Windows
+ * @hostname: A UTF-8 encoded hostname, or %NULL for none.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError may occur.
+ * 
+ * Converts an absolute filename to an escaped ASCII-encoded URI, with the path
+ * component following Section 3.3. of RFC 2396.
+ * 
+ * Return value: a newly-allocated string holding the resulting
+ *               URI, or %NULL on an error.
+ **/
+gchar *
+g_filename_to_uri (const gchar *filename,
+		   const gchar *hostname,
+		   GError     **error)
+{
+  char *escaped_uri;
+
+  g_return_val_if_fail (filename != NULL, NULL);
+
+  if (!g_path_is_absolute (filename))
+    {
+      g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH,
+		   _("The pathname '%s' is not an absolute path"),
+		   filename);
+      return NULL;
+    }
+
+  if (hostname &&
+      !(g_utf8_validate (hostname, -1, NULL)
+	&& hostname_validate (hostname)))
+    {
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                           _("Invalid hostname"));
+      return NULL;
+    }
+  
+#ifdef G_OS_WIN32
+  /* Don't use localhost unnecessarily */
+  if (hostname && g_ascii_strcasecmp (hostname, "localhost") == 0)
+    hostname = NULL;
+#endif
+
+  escaped_uri = g_escape_file_uri (hostname, filename);
+
+  return escaped_uri;
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+#undef g_filename_to_uri
+
+gchar *
+g_filename_to_uri (const gchar *filename,
+		   const gchar *hostname,
+		   GError     **error)
+{
+  gchar *utf8_filename;
+  gchar *retval = NULL;
+
+  utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, error);
+
+  if (utf8_filename)
+    {
+      retval = g_filename_to_uri_utf8 (utf8_filename, hostname, error);
+      g_free (utf8_filename);
+    }
+
+  return retval;
+}
+
+#endif
+
+/**
+ * g_uri_list_extract_uris:
+ * @uri_list: an URI list 
+ *
+ * Splits an URI list conforming to the text/uri-list
+ * mime type defined in RFC 2483 into individual URIs,
+ * discarding any comments. The URIs are not validated.
+ *
+ * Returns: a newly allocated %NULL-terminated list of
+ *   strings holding the individual URIs. The array should
+ *   be freed with g_strfreev().
+ *
+ * Since: 2.6
+ */
+gchar **
+g_uri_list_extract_uris (const gchar *uri_list)
+{
+  GSList *uris, *u;
+  const gchar *p, *q;
+  gchar **result;
+  gint n_uris = 0;
+
+  uris = NULL;
+
+  p = uri_list;
+
+  /* We don't actually try to validate the URI according to RFC
+   * 2396, or even check for allowed characters - we just ignore
+   * comments and trim whitespace off the ends.  We also
+   * allow LF delimination as well as the specified CRLF.
+   *
+   * We do allow comments like specified in RFC 2483.
+   */
+  while (p)
+    {
+      if (*p != '#')
+	{
+	  while (g_ascii_isspace (*p))
+	    p++;
+
+	  q = p;
+	  while (*q && (*q != '\n') && (*q != '\r'))
+	    q++;
+
+	  if (q > p)
+	    {
+	      q--;
+	      while (q > p && g_ascii_isspace (*q))
+		q--;
+
+	      if (q > p)
+		{
+		  uris = g_slist_prepend (uris, g_strndup (p, q - p + 1));
+		  n_uris++;
+		}
+	    }
+	}
+      p = strchr (p, '\n');
+      if (p)
+	p++;
+    }
+
+  result = g_new (gchar *, n_uris + 1);
+
+  result[n_uris--] = NULL;
+  for (u = uris; u; u = u->next)
+    result[n_uris--] = u->data;
+
+  g_slist_free (uris);
+
+  return result;
+}
+
+/**
+ * g_filename_display_basename:
+ * @filename: an absolute pathname in the GLib file name encoding
+ *
+ * Returns the display basename for the particular filename, guaranteed
+ * to be valid UTF-8. The display name might not be identical to the filename,
+ * for instance there might be problems converting it to UTF-8, and some files
+ * can be translated in the display.
+ *
+ * If GLib can not make sense of the encoding of @filename, as a last resort it 
+ * replaces unknown characters with U+FFFD, the Unicode replacement character.
+ * You can search the result for the UTF-8 encoding of this character (which is
+ * "\357\277\275" in octal notation) to find out if @filename was in an invalid
+ * encoding.
+ *
+ * You must pass the whole absolute pathname to this functions so that
+ * translation of well known locations can be done.
+ *
+ * This function is preferred over g_filename_display_name() if you know the
+ * whole path, as it allows translation.
+ *
+ * Return value: a newly allocated string containing
+ *   a rendition of the basename of the filename in valid UTF-8
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_filename_display_basename (const gchar *filename)
+{
+  char *basename;
+  char *display_name;
+
+  g_return_val_if_fail (filename != NULL, NULL);
+  
+  basename = g_path_get_basename (filename);
+  display_name = g_filename_display_name (basename);
+  g_free (basename);
+  return display_name;
+}
+
+/**
+ * g_filename_display_name:
+ * @filename: a pathname hopefully in the GLib file name encoding
+ * 
+ * Converts a filename into a valid UTF-8 string. The conversion is 
+ * not necessarily reversible, so you should keep the original around 
+ * and use the return value of this function only for display purposes.
+ * Unlike g_filename_to_utf8(), the result is guaranteed to be non-%NULL 
+ * even if the filename actually isn't in the GLib file name encoding.
+ *
+ * If GLib can not make sense of the encoding of @filename, as a last resort it 
+ * replaces unknown characters with U+FFFD, the Unicode replacement character.
+ * You can search the result for the UTF-8 encoding of this character (which is
+ * "\357\277\275" in octal notation) to find out if @filename was in an invalid
+ * encoding.
+ *
+ * If you know the whole pathname of the file you should use
+ * g_filename_display_basename(), since that allows location-based
+ * translation of filenames.
+ *
+ * Return value: a newly allocated string containing
+ *   a rendition of the filename in valid UTF-8
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_filename_display_name (const gchar *filename)
+{
+  gint i;
+  const gchar **charsets;
+  gchar *display_name = NULL;
+  gboolean is_utf8;
+ 
+  is_utf8 = g_get_filename_charsets (&charsets);
+
+  if (is_utf8)
+    {
+      if (g_utf8_validate (filename, -1, NULL))
+	display_name = g_strdup (filename);
+    }
+  
+  if (!display_name)
+    {
+      /* Try to convert from the filename charsets to UTF-8.
+       * Skip the first charset if it is UTF-8.
+       */
+      for (i = is_utf8 ? 1 : 0; charsets[i]; i++)
+	{
+	  display_name = g_convert (filename, -1, "UTF-8", charsets[i], 
+				    NULL, NULL, NULL);
+
+	  if (display_name)
+	    break;
+	}
+    }
+  
+  /* if all conversions failed, we replace invalid UTF-8
+   * by a question mark
+   */
+  if (!display_name) 
+    display_name = _g_utf8_make_valid (filename);
+
+  return display_name;
+}
+
+#define __G_CONVERT_C__
+#include "galiasdef.c"
diff --git a/glib/gconvert.h b/glib/gconvert.h
new file mode 100644
index 0000000..4d76784
--- /dev/null
+++ b/glib/gconvert.h
@@ -0,0 +1,138 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_CONVERT_H__
+#define __G_CONVERT_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+typedef enum 
+{
+  G_CONVERT_ERROR_NO_CONVERSION,
+  G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+  G_CONVERT_ERROR_FAILED,
+  G_CONVERT_ERROR_PARTIAL_INPUT,
+  G_CONVERT_ERROR_BAD_URI,
+  G_CONVERT_ERROR_NOT_ABSOLUTE_PATH
+} GConvertError;
+
+#define G_CONVERT_ERROR g_convert_error_quark()
+GQuark g_convert_error_quark (void);
+
+/* Thin wrappers around iconv
+ */
+typedef struct _GIConv *GIConv;
+
+GIConv g_iconv_open   (const gchar  *to_codeset,
+		       const gchar  *from_codeset);
+gsize  g_iconv        (GIConv        converter,
+		       gchar       **inbuf,
+		       gsize        *inbytes_left,
+		       gchar       **outbuf,
+		       gsize        *outbytes_left);
+gint   g_iconv_close  (GIConv        converter);
+
+
+gchar* g_convert               (const gchar  *str,
+				gssize        len,            
+				const gchar  *to_codeset,
+				const gchar  *from_codeset,
+				gsize        *bytes_read,     
+				gsize        *bytes_written,  
+				GError      **error) G_GNUC_MALLOC;
+gchar* g_convert_with_iconv    (const gchar  *str,
+				gssize        len,
+				GIConv        converter,
+				gsize        *bytes_read,     
+				gsize        *bytes_written,  
+				GError      **error) G_GNUC_MALLOC;
+gchar* g_convert_with_fallback (const gchar  *str,
+				gssize        len,            
+				const gchar  *to_codeset,
+				const gchar  *from_codeset,
+				gchar        *fallback,
+				gsize        *bytes_read,     
+				gsize        *bytes_written,  
+				GError      **error) G_GNUC_MALLOC;
+
+
+/* Convert between libc's idea of strings and UTF-8.
+ */
+gchar* g_locale_to_utf8   (const gchar  *opsysstring,
+			   gssize        len,            
+			   gsize        *bytes_read,     
+			   gsize        *bytes_written,  
+			   GError      **error) G_GNUC_MALLOC;
+gchar* g_locale_from_utf8 (const gchar  *utf8string,
+			   gssize        len,            
+			   gsize        *bytes_read,     
+			   gsize        *bytes_written,  
+			   GError      **error) G_GNUC_MALLOC;
+
+/* Convert between the operating system (or C runtime)
+ * representation of file names and UTF-8.
+ */
+#ifdef G_OS_WIN32
+#define g_filename_to_utf8 g_filename_to_utf8_utf8
+#define g_filename_from_utf8 g_filename_from_utf8_utf8
+#define g_filename_from_uri g_filename_from_uri_utf8
+#define g_filename_to_uri g_filename_to_uri_utf8 
+#endif
+
+gchar* g_filename_to_utf8   (const gchar  *opsysstring,
+			     gssize        len,            
+			     gsize        *bytes_read,     
+			     gsize        *bytes_written,  
+			     GError      **error) G_GNUC_MALLOC;
+gchar* g_filename_from_utf8 (const gchar  *utf8string,
+			     gssize        len,            
+			     gsize        *bytes_read,     
+			     gsize        *bytes_written,  
+			     GError      **error) G_GNUC_MALLOC;
+
+gchar *g_filename_from_uri (const gchar *uri,
+			    gchar      **hostname,
+			    GError     **error) G_GNUC_MALLOC;
+  
+gchar *g_filename_to_uri   (const gchar *filename,
+			    const gchar *hostname,
+			    GError     **error) G_GNUC_MALLOC;
+gchar *g_filename_display_name (const gchar *filename) G_GNUC_MALLOC;
+gboolean g_get_filename_charsets (G_CONST_RETURN gchar ***charsets);
+
+gchar *g_filename_display_basename (const gchar *filename) G_GNUC_MALLOC;
+
+gchar **g_uri_list_extract_uris (const gchar *uri_list) G_GNUC_MALLOC;
+
+G_END_DECLS
+
+#endif /* __G_CONVERT_H__ */
diff --git a/glib/gdataset.c b/glib/gdataset.c
new file mode 100644
index 0000000..bf5eafe
--- /dev/null
+++ b/glib/gdataset.c
@@ -0,0 +1,759 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gdataset.c: Generic dataset mechanism, similar to GtkObject data.
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe ; except for g_data*_foreach()
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "glib.h"
+#include "gdatasetprivate.h"
+#include "galias.h"
+
+
+/* --- defines --- */
+#define	G_QUARK_BLOCK_SIZE			(512)
+
+/* datalist pointer accesses have to be carried out atomically */
+#define G_DATALIST_GET_POINTER(datalist)						\
+  ((GData*) ((gsize) g_atomic_pointer_get (datalist) & ~(gsize) G_DATALIST_FLAGS_MASK))
+
+#define G_DATALIST_SET_POINTER(datalist, pointer)       G_STMT_START {                  \
+  gpointer _oldv, _newv;                                                                \
+  do {                                                                                  \
+    _oldv = g_atomic_pointer_get (datalist);                                            \
+    _newv = (gpointer) (((gsize) _oldv & G_DATALIST_FLAGS_MASK) | (gsize) pointer);     \
+  } while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, _oldv, _newv));   \
+} G_STMT_END
+
+/* --- structures --- */
+typedef struct _GDataset GDataset;
+struct _GData
+{
+  GData *next;
+  GQuark id;
+  gpointer data;
+  GDestroyNotify destroy_func;
+};
+
+struct _GDataset
+{
+  gconstpointer location;
+  GData        *datalist;
+};
+
+
+/* --- prototypes --- */
+static inline GDataset*	g_dataset_lookup		(gconstpointer	  dataset_location);
+static inline void	g_datalist_clear_i		(GData		**datalist);
+static void		g_dataset_destroy_internal	(GDataset	 *dataset);
+static inline gpointer	g_data_set_internal		(GData     	**datalist,
+							 GQuark   	  key_id,
+							 gpointer         data,
+							 GDestroyNotify   destroy_func,
+							 GDataset	 *dataset);
+static void		g_data_initialize		(void);
+static inline GQuark	g_quark_new			(gchar  	*string);
+
+
+/* --- variables --- */
+G_LOCK_DEFINE_STATIC (g_dataset_global);
+static GHashTable   *g_dataset_location_ht = NULL;
+static GDataset     *g_dataset_cached = NULL; /* should this be
+						 threadspecific? */
+G_LOCK_DEFINE_STATIC (g_quark_global);
+static GHashTable   *g_quark_ht = NULL;
+static gchar       **g_quarks = NULL;
+static GQuark        g_quark_seq_id = 0;
+
+/* --- functions --- */
+
+/* HOLDS: g_dataset_global_lock */
+static inline void
+g_datalist_clear_i (GData **datalist)
+{
+  register GData *list;
+  
+  /* unlink *all* items before walking their destructors
+   */
+  list = G_DATALIST_GET_POINTER (datalist);
+  G_DATALIST_SET_POINTER (datalist, NULL);
+  
+  while (list)
+    {
+      register GData *prev;
+      
+      prev = list;
+      list = prev->next;
+      
+      if (prev->destroy_func)
+	{
+	  G_UNLOCK (g_dataset_global);
+	  prev->destroy_func (prev->data);
+	  G_LOCK (g_dataset_global);
+	}
+      
+      g_slice_free (GData, prev);
+    }
+}
+
+void
+g_datalist_clear (GData **datalist)
+{
+  g_return_if_fail (datalist != NULL);
+  
+  G_LOCK (g_dataset_global);
+  if (!g_dataset_location_ht)
+    g_data_initialize ();
+
+  while (G_DATALIST_GET_POINTER (datalist))
+    g_datalist_clear_i (datalist);
+  G_UNLOCK (g_dataset_global);
+}
+
+/* HOLDS: g_dataset_global_lock */
+static inline GDataset*
+g_dataset_lookup (gconstpointer	dataset_location)
+{
+  register GDataset *dataset;
+  
+  if (g_dataset_cached && g_dataset_cached->location == dataset_location)
+    return g_dataset_cached;
+  
+  dataset = g_hash_table_lookup (g_dataset_location_ht, dataset_location);
+  if (dataset)
+    g_dataset_cached = dataset;
+  
+  return dataset;
+}
+
+/* HOLDS: g_dataset_global_lock */
+static void
+g_dataset_destroy_internal (GDataset *dataset)
+{
+  register gconstpointer dataset_location;
+  
+  dataset_location = dataset->location;
+  while (dataset)
+    {
+      if (!dataset->datalist)
+	{
+	  if (dataset == g_dataset_cached)
+	    g_dataset_cached = NULL;
+	  g_hash_table_remove (g_dataset_location_ht, dataset_location);
+	  g_slice_free (GDataset, dataset);
+	  break;
+	}
+      
+      g_datalist_clear_i (&dataset->datalist);
+      dataset = g_dataset_lookup (dataset_location);
+    }
+}
+
+void
+g_dataset_destroy (gconstpointer  dataset_location)
+{
+  g_return_if_fail (dataset_location != NULL);
+  
+  G_LOCK (g_dataset_global);
+  if (g_dataset_location_ht)
+    {
+      register GDataset *dataset;
+
+      dataset = g_dataset_lookup (dataset_location);
+      if (dataset)
+	g_dataset_destroy_internal (dataset);
+    }
+  G_UNLOCK (g_dataset_global);
+}
+
+/* HOLDS: g_dataset_global_lock */
+static inline gpointer
+g_data_set_internal (GData	  **datalist,
+		     GQuark         key_id,
+		     gpointer       data,
+		     GDestroyNotify destroy_func,
+		     GDataset	   *dataset)
+{
+  register GData *list;
+  
+  list = G_DATALIST_GET_POINTER (datalist);
+  if (!data)
+    {
+      register GData *prev;
+      
+      prev = NULL;
+      while (list)
+	{
+	  if (list->id == key_id)
+	    {
+	      gpointer ret_data = NULL;
+
+	      if (prev)
+		prev->next = list->next;
+	      else
+		{
+		  G_DATALIST_SET_POINTER (datalist, list->next);
+		  
+		  /* the dataset destruction *must* be done
+		   * prior to invocation of the data destroy function
+		   */
+		  if (!list->next && dataset)
+		    g_dataset_destroy_internal (dataset);
+		}
+	      
+	      /* the GData struct *must* already be unlinked
+	       * when invoking the destroy function.
+	       * we use (data==NULL && destroy_func!=NULL) as
+	       * a special hint combination to "steal"
+	       * data without destroy notification
+	       */
+	      if (list->destroy_func && !destroy_func)
+		{
+		  G_UNLOCK (g_dataset_global);
+		  list->destroy_func (list->data);
+		  G_LOCK (g_dataset_global);
+		}
+	      else
+		ret_data = list->data;
+	      
+              g_slice_free (GData, list);
+	      
+	      return ret_data;
+	    }
+	  
+	  prev = list;
+	  list = list->next;
+	}
+    }
+  else
+    {
+      while (list)
+	{
+	  if (list->id == key_id)
+	    {
+	      if (!list->destroy_func)
+		{
+		  list->data = data;
+		  list->destroy_func = destroy_func;
+		}
+	      else
+		{
+		  register GDestroyNotify dfunc;
+		  register gpointer ddata;
+		  
+		  dfunc = list->destroy_func;
+		  ddata = list->data;
+		  list->data = data;
+		  list->destroy_func = destroy_func;
+		  
+		  /* we need to have updated all structures prior to
+		   * invocation of the destroy function
+		   */
+		  G_UNLOCK (g_dataset_global);
+		  dfunc (ddata);
+		  G_LOCK (g_dataset_global);
+		}
+	      
+	      return NULL;
+	    }
+	  
+	  list = list->next;
+	}
+      
+      list = g_slice_new (GData);
+      list->next = G_DATALIST_GET_POINTER (datalist);
+      list->id = key_id;
+      list->data = data;
+      list->destroy_func = destroy_func;
+      G_DATALIST_SET_POINTER (datalist, list);
+    }
+
+  return NULL;
+}
+
+void
+g_dataset_id_set_data_full (gconstpointer  dataset_location,
+			    GQuark         key_id,
+			    gpointer       data,
+			    GDestroyNotify destroy_func)
+{
+  register GDataset *dataset;
+  
+  g_return_if_fail (dataset_location != NULL);
+  if (!data)
+    g_return_if_fail (destroy_func == NULL);
+  if (!key_id)
+    {
+      if (data)
+	g_return_if_fail (key_id > 0);
+      else
+	return;
+    }
+  
+  G_LOCK (g_dataset_global);
+  if (!g_dataset_location_ht)
+    g_data_initialize ();
+ 
+  dataset = g_dataset_lookup (dataset_location);
+  if (!dataset)
+    {
+      dataset = g_slice_new (GDataset);
+      dataset->location = dataset_location;
+      g_datalist_init (&dataset->datalist);
+      g_hash_table_insert (g_dataset_location_ht, 
+			   (gpointer) dataset->location,
+			   dataset);
+    }
+  
+  g_data_set_internal (&dataset->datalist, key_id, data, destroy_func, dataset);
+  G_UNLOCK (g_dataset_global);
+}
+
+void
+g_datalist_id_set_data_full (GData	  **datalist,
+			     GQuark         key_id,
+			     gpointer       data,
+			     GDestroyNotify destroy_func)
+{
+  g_return_if_fail (datalist != NULL);
+  if (!data)
+    g_return_if_fail (destroy_func == NULL);
+  if (!key_id)
+    {
+      if (data)
+	g_return_if_fail (key_id > 0);
+      else
+	return;
+    }
+
+  G_LOCK (g_dataset_global);
+  if (!g_dataset_location_ht)
+    g_data_initialize ();
+  
+  g_data_set_internal (datalist, key_id, data, destroy_func, NULL);
+  G_UNLOCK (g_dataset_global);
+}
+
+gpointer
+g_dataset_id_remove_no_notify (gconstpointer  dataset_location,
+			       GQuark         key_id)
+{
+  gpointer ret_data = NULL;
+
+  g_return_val_if_fail (dataset_location != NULL, NULL);
+  
+  G_LOCK (g_dataset_global);
+  if (key_id && g_dataset_location_ht)
+    {
+      GDataset *dataset;
+  
+      dataset = g_dataset_lookup (dataset_location);
+      if (dataset)
+	ret_data = g_data_set_internal (&dataset->datalist, key_id, NULL, (GDestroyNotify) 42, dataset);
+    } 
+  G_UNLOCK (g_dataset_global);
+
+  return ret_data;
+}
+
+gpointer
+g_datalist_id_remove_no_notify (GData	**datalist,
+				GQuark    key_id)
+{
+  gpointer ret_data = NULL;
+
+  g_return_val_if_fail (datalist != NULL, NULL);
+
+  G_LOCK (g_dataset_global);
+  if (key_id && g_dataset_location_ht)
+    ret_data = g_data_set_internal (datalist, key_id, NULL, (GDestroyNotify) 42, NULL);
+  G_UNLOCK (g_dataset_global);
+
+  return ret_data;
+}
+
+gpointer
+g_dataset_id_get_data (gconstpointer  dataset_location,
+		       GQuark         key_id)
+{
+  g_return_val_if_fail (dataset_location != NULL, NULL);
+  
+  G_LOCK (g_dataset_global);
+  if (key_id && g_dataset_location_ht)
+    {
+      register GDataset *dataset;
+      
+      dataset = g_dataset_lookup (dataset_location);
+      if (dataset)
+	{
+	  register GData *list;
+	  
+	  for (list = dataset->datalist; list; list = list->next)
+	    if (list->id == key_id)
+	      {
+		G_UNLOCK (g_dataset_global);
+		return list->data;
+	      }
+	}
+    }
+  G_UNLOCK (g_dataset_global);
+ 
+  return NULL;
+}
+
+gpointer
+g_datalist_id_get_data (GData	 **datalist,
+			GQuark     key_id)
+{
+  gpointer data = NULL;
+  g_return_val_if_fail (datalist != NULL, NULL);
+  if (key_id)
+    {
+      register GData *list;
+      G_LOCK (g_dataset_global);
+      for (list = G_DATALIST_GET_POINTER (datalist); list; list = list->next)
+	if (list->id == key_id)
+	  {
+            data = list->data;
+            break;
+          }
+      G_UNLOCK (g_dataset_global);
+    }
+  return data;
+}
+
+void
+g_dataset_foreach (gconstpointer    dataset_location,
+		   GDataForeachFunc func,
+		   gpointer         user_data)
+{
+  register GDataset *dataset;
+  
+  g_return_if_fail (dataset_location != NULL);
+  g_return_if_fail (func != NULL);
+
+  G_LOCK (g_dataset_global);
+  if (g_dataset_location_ht)
+    {
+      dataset = g_dataset_lookup (dataset_location);
+      G_UNLOCK (g_dataset_global);
+      if (dataset)
+	{
+	  register GData *list, *next;
+	  
+	  for (list = dataset->datalist; list; list = next)
+	    {
+	      next = list->next;
+	      func (list->id, list->data, user_data);
+	    }
+	}
+    }
+  else
+    {
+      G_UNLOCK (g_dataset_global);
+    }
+}
+
+void
+g_datalist_foreach (GData	   **datalist,
+		    GDataForeachFunc func,
+		    gpointer         user_data)
+{
+  register GData *list, *next;
+
+  g_return_if_fail (datalist != NULL);
+  g_return_if_fail (func != NULL);
+  
+  for (list = G_DATALIST_GET_POINTER (datalist); list; list = next)
+    {
+      next = list->next;
+      func (list->id, list->data, user_data);
+    }
+}
+
+void
+g_datalist_init (GData **datalist)
+{
+  g_return_if_fail (datalist != NULL);
+
+  g_atomic_pointer_set (datalist, NULL);
+}
+
+/**
+ * g_datalist_set_flags:
+ * @datalist: pointer to the location that holds a list
+ * @flags: the flags to turn on. The values of the flags are
+ *   restricted by %G_DATALIST_FLAGS_MASK (currently
+ *   3; giving two possible boolean flags).
+ *   A value for @flags that doesn't fit within the mask is
+ *   an error.
+ * 
+ * Turns on flag values for a data list. This function is used
+ * to keep a small number of boolean flags in an object with
+ * a data list without using any additional space. It is
+ * not generally useful except in circumstances where space
+ * is very tight. (It is used in the base #GObject type, for
+ * example.)
+ *
+ * Since: 2.8
+ **/
+void
+g_datalist_set_flags (GData **datalist,
+		      guint   flags)
+{
+  gpointer oldvalue;
+  g_return_if_fail (datalist != NULL);
+  g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
+  
+  do
+    {
+      oldvalue = g_atomic_pointer_get (datalist);
+    }
+  while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, oldvalue,
+                                                 (gpointer) ((gsize) oldvalue | flags)));
+}
+
+/**
+ * g_datalist_unset_flags:
+ * @datalist: pointer to the location that holds a list
+ * @flags: the flags to turn off. The values of the flags are
+ *   restricted by %G_DATALIST_FLAGS_MASK (currently
+ *   3: giving two possible boolean flags).
+ *   A value for @flags that doesn't fit within the mask is
+ *   an error.
+ * 
+ * Turns off flag values for a data list. See g_datalist_unset_flags()
+ *
+ * Since: 2.8
+ **/
+void
+g_datalist_unset_flags (GData **datalist,
+			guint   flags)
+{
+  gpointer oldvalue;
+  g_return_if_fail (datalist != NULL);
+  g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
+  
+  do
+    {
+      oldvalue = g_atomic_pointer_get (datalist);
+    }
+  while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, oldvalue,
+                                                 (gpointer) ((gsize) oldvalue & ~(gsize) flags)));
+}
+
+/**
+ * g_datalist_get_flags:
+ * @datalist: pointer to the location that holds a list
+ * 
+ * Gets flags values packed in together with the datalist.
+ * See g_datalist_set_flags().
+ * 
+ * Return value: the flags of the datalist
+ *
+ * Since: 2.8
+ **/
+guint
+g_datalist_get_flags (GData **datalist)
+{
+  g_return_val_if_fail (datalist != NULL, 0);
+  
+  return G_DATALIST_GET_FLAGS (datalist); /* atomic macro */
+}
+
+/* HOLDS: g_dataset_global_lock */
+static void
+g_data_initialize (void)
+{
+  g_return_if_fail (g_dataset_location_ht == NULL);
+
+  g_dataset_location_ht = g_hash_table_new (g_direct_hash, NULL);
+  g_dataset_cached = NULL;
+}
+
+GQuark
+g_quark_try_string (const gchar *string)
+{
+  GQuark quark = 0;
+  g_return_val_if_fail (string != NULL, 0);
+  
+  G_LOCK (g_quark_global);
+  if (g_quark_ht)
+    quark = GPOINTER_TO_UINT (g_hash_table_lookup (g_quark_ht, string));
+  G_UNLOCK (g_quark_global);
+  
+  return quark;
+}
+
+/* HOLDS: g_quark_global_lock */
+static inline GQuark
+g_quark_from_string_internal (const gchar *string, 
+			      gboolean     duplicate)
+{
+  GQuark quark = 0;
+  
+  if (g_quark_ht)
+    quark = GPOINTER_TO_UINT (g_hash_table_lookup (g_quark_ht, string));
+  
+  if (!quark)
+    quark = g_quark_new (duplicate ? g_strdup (string) : (gchar *)string);
+  
+  return quark;
+}
+
+GQuark
+g_quark_from_string (const gchar *string)
+{
+  GQuark quark;
+  
+  if (!string)
+    return 0;
+  
+  G_LOCK (g_quark_global);
+  quark = g_quark_from_string_internal (string, TRUE);
+  G_UNLOCK (g_quark_global);
+  
+  return quark;
+}
+
+GQuark
+g_quark_from_static_string (const gchar *string)
+{
+  GQuark quark;
+  
+  if (!string)
+    return 0;
+  
+  G_LOCK (g_quark_global);
+  quark = g_quark_from_string_internal (string, FALSE);
+  G_UNLOCK (g_quark_global);
+
+  return quark;
+}
+
+G_CONST_RETURN gchar*
+g_quark_to_string (GQuark quark)
+{
+  gchar* result = NULL;
+
+  G_LOCK (g_quark_global);
+  if (quark < g_quark_seq_id)
+    result = g_quarks[quark];
+  G_UNLOCK (g_quark_global);
+
+  return result;
+}
+
+/* HOLDS: g_quark_global_lock */
+static inline GQuark
+g_quark_new (gchar *string)
+{
+  GQuark quark;
+  
+  if (g_quark_seq_id % G_QUARK_BLOCK_SIZE == 0)
+    g_quarks = g_renew (gchar*, g_quarks, g_quark_seq_id + G_QUARK_BLOCK_SIZE);
+  if (!g_quark_ht)
+    {
+      g_assert (g_quark_seq_id == 0);
+      g_quark_ht = g_hash_table_new (g_str_hash, g_str_equal);
+      g_quarks[g_quark_seq_id++] = NULL;
+    }
+
+  quark = g_quark_seq_id++;
+  g_quarks[quark] = string;
+  g_hash_table_insert (g_quark_ht, string, GUINT_TO_POINTER (quark));
+  
+  return quark;
+}
+
+/**
+ * g_intern_string:
+ * @string: a string
+ * 
+ * Returns a canonical representation for @string. Interned strings can
+ * be compared for equality by comparing the pointers, instead of using strcmp().
+ * 
+ * Returns: a canonical representation for the string
+ *
+ * Since: 2.10
+ */
+G_CONST_RETURN gchar*
+g_intern_string (const gchar *string)
+{
+  const gchar *result;
+  GQuark quark;
+
+  if (!string)
+    return NULL;
+
+  G_LOCK (g_quark_global);
+  quark = g_quark_from_string_internal (string, TRUE);
+  result = g_quarks[quark];
+  G_UNLOCK (g_quark_global);
+
+  return result;
+}
+
+/**
+ * g_intern_static_string:
+ * @string: a static string
+ * 
+ * Returns a canonical representation for @string. Interned strings can
+ * be compared for equality by comparing the pointers, instead of using strcmp().
+ * g_intern_static_string() does not copy the string, therefore @string must
+ * not be freed or modified. 
+ * 
+ * Returns: a canonical representation for the string
+ *
+ * Since: 2.10
+ */
+G_CONST_RETURN gchar*
+g_intern_static_string (const gchar *string)
+{
+  GQuark quark;
+  const gchar *result;
+
+  if (!string)
+    return NULL;
+
+  G_LOCK (g_quark_global);
+  quark = g_quark_from_string_internal (string, FALSE);
+  result = g_quarks[quark];
+  G_UNLOCK (g_quark_global);
+
+  return result;
+}
+
+
+
+#define __G_DATASET_C__
+#include "galiasdef.c"
diff --git a/glib/gdataset.h b/glib/gdataset.h
new file mode 100644
index 0000000..2733ffb
--- /dev/null
+++ b/glib/gdataset.h
@@ -0,0 +1,122 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_DATASET_H__
+#define __G_DATASET_H__
+
+#include <glib/gquark.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GData           GData;
+
+typedef void            (*GDataForeachFunc)     (GQuark         key_id,
+                                                 gpointer       data,
+                                                 gpointer       user_data);
+
+/* Keyed Data List
+ */
+void     g_datalist_init                (GData            **datalist);
+void     g_datalist_clear               (GData            **datalist);
+gpointer g_datalist_id_get_data         (GData            **datalist,
+					 GQuark             key_id);
+void     g_datalist_id_set_data_full    (GData            **datalist,
+					 GQuark             key_id,
+					 gpointer           data,
+					 GDestroyNotify     destroy_func);
+gpointer g_datalist_id_remove_no_notify (GData            **datalist,
+					 GQuark             key_id);
+void     g_datalist_foreach             (GData            **datalist,
+					 GDataForeachFunc   func,
+					 gpointer           user_data);
+
+/**
+ * G_DATALIST_FLAGS_MASK:
+ *
+ * A bitmask that restricts the possible flags passed to
+ * g_datalist_set_flags(). Passing a flags value where
+ * flags & ~G_DATALIST_FLAGS_MASK != 0 is an error.
+ */
+#define G_DATALIST_FLAGS_MASK 0x3
+
+void     g_datalist_set_flags           (GData            **datalist,
+					 guint              flags);
+void     g_datalist_unset_flags         (GData            **datalist,
+					 guint              flags);
+guint    g_datalist_get_flags           (GData            **datalist);
+
+#define   g_datalist_id_set_data(dl, q, d)      \
+     g_datalist_id_set_data_full ((dl), (q), (d), NULL)
+#define   g_datalist_id_remove_data(dl, q)      \
+     g_datalist_id_set_data ((dl), (q), NULL)
+#define   g_datalist_get_data(dl, k)            \
+     (g_datalist_id_get_data ((dl), g_quark_try_string (k)))
+#define   g_datalist_set_data_full(dl, k, d, f) \
+     g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f))
+#define   g_datalist_remove_no_notify(dl, k)    \
+     g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k))
+#define   g_datalist_set_data(dl, k, d)         \
+     g_datalist_set_data_full ((dl), (k), (d), NULL)
+#define   g_datalist_remove_data(dl, k)         \
+     g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL)
+
+
+/* Location Associated Keyed Data
+ */
+void      g_dataset_destroy             (gconstpointer    dataset_location);
+gpointer  g_dataset_id_get_data         (gconstpointer    dataset_location,
+                                         GQuark           key_id);
+void      g_dataset_id_set_data_full    (gconstpointer    dataset_location,
+                                         GQuark           key_id,
+                                         gpointer         data,
+                                         GDestroyNotify   destroy_func);
+gpointer  g_dataset_id_remove_no_notify (gconstpointer    dataset_location,
+                                         GQuark           key_id);
+void      g_dataset_foreach             (gconstpointer    dataset_location,
+                                         GDataForeachFunc func,
+                                         gpointer         user_data);
+#define   g_dataset_id_set_data(l, k, d)        \
+     g_dataset_id_set_data_full ((l), (k), (d), NULL)
+#define   g_dataset_id_remove_data(l, k)        \
+     g_dataset_id_set_data ((l), (k), NULL)
+#define   g_dataset_get_data(l, k)              \
+     (g_dataset_id_get_data ((l), g_quark_try_string (k)))
+#define   g_dataset_set_data_full(l, k, d, f)   \
+     g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f))
+#define   g_dataset_remove_no_notify(l, k)      \
+     g_dataset_id_remove_no_notify ((l), g_quark_try_string (k))
+#define   g_dataset_set_data(l, k, d)           \
+     g_dataset_set_data_full ((l), (k), (d), NULL)
+#define   g_dataset_remove_data(l, k)           \
+     g_dataset_id_set_data ((l), g_quark_try_string (k), NULL)
+
+G_END_DECLS
+
+#endif /* __G_DATASET_H__ */
diff --git a/glib/gdatasetprivate.h b/glib/gdatasetprivate.h
new file mode 100644
index 0000000..fdbb87a
--- /dev/null
+++ b/glib/gdatasetprivate.h
@@ -0,0 +1,44 @@
+/* GLIB - Library of useful routines for C programming
+ * gdataset-private.h: Internal macros for accessing dataset values
+ * Copyright (C) 2005  Red Hat
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#ifndef __G_DATASETPRIVATE_H__
+#define __G_DATASETPRIVATE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/* GET_FLAGS is implemented via atomic pointer access, to allow memory
+ * barriers to take effect without acquiring the global dataset mutex.
+ */
+#define G_DATALIST_GET_FLAGS(datalist)				\
+  ((gsize) g_atomic_pointer_get (datalist) & G_DATALIST_FLAGS_MASK)
+
+
+G_END_DECLS
+
+#endif /* __G_DATASETPRIVATE_H__ */
diff --git a/glib/gdate.h b/glib/gdate.h
new file mode 100644
index 0000000..cb1f566
--- /dev/null
+++ b/glib/gdate.h
@@ -0,0 +1,263 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_DATE_H__
+#define __G_DATE_H__
+
+#include <time.h>
+
+#include <glib/gtypes.h>
+#include <glib/gquark.h>
+
+G_BEGIN_DECLS
+
+/* GDate
+ *
+ * Date calculations (not time for now, to be resolved). These are a
+ * mutant combination of Steffen Beyer's DateCalc routines
+ * (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
+ * date routines (written for in-house software).  Written by Havoc
+ * Pennington <hp@pobox.com>
+ */
+
+typedef gint32  GTime;
+typedef guint16 GDateYear;
+typedef guint8  GDateDay;   /* day of the month */
+typedef struct _GDate GDate;
+
+/* enum used to specify order of appearance in parsed date strings */
+typedef enum
+{
+  G_DATE_DAY   = 0,
+  G_DATE_MONTH = 1,
+  G_DATE_YEAR  = 2
+} GDateDMY;
+
+/* actual week and month values */
+typedef enum
+{
+  G_DATE_BAD_WEEKDAY  = 0,
+  G_DATE_MONDAY       = 1,
+  G_DATE_TUESDAY      = 2,
+  G_DATE_WEDNESDAY    = 3,
+  G_DATE_THURSDAY     = 4,
+  G_DATE_FRIDAY       = 5,
+  G_DATE_SATURDAY     = 6,
+  G_DATE_SUNDAY       = 7
+} GDateWeekday;
+typedef enum
+{
+  G_DATE_BAD_MONTH = 0,
+  G_DATE_JANUARY   = 1,
+  G_DATE_FEBRUARY  = 2,
+  G_DATE_MARCH     = 3,
+  G_DATE_APRIL     = 4,
+  G_DATE_MAY       = 5,
+  G_DATE_JUNE      = 6,
+  G_DATE_JULY      = 7,
+  G_DATE_AUGUST    = 8,
+  G_DATE_SEPTEMBER = 9,
+  G_DATE_OCTOBER   = 10,
+  G_DATE_NOVEMBER  = 11,
+  G_DATE_DECEMBER  = 12
+} GDateMonth;
+
+#define G_DATE_BAD_JULIAN 0U
+#define G_DATE_BAD_DAY    0U
+#define G_DATE_BAD_YEAR   0U
+
+/* Note: directly manipulating structs is generally a bad idea, but
+ * in this case it's an *incredibly* bad idea, because all or part
+ * of this struct can be invalid at any given time. Use the functions,
+ * or you will get hosed, I promise.
+ */
+struct _GDate
+{
+  guint julian_days : 32; /* julian days representation - we use a
+                           *  bitfield hoping that 64 bit platforms
+                           *  will pack this whole struct in one big
+                           *  int
+                           */
+
+  guint julian : 1;    /* julian is valid */
+  guint dmy    : 1;    /* dmy is valid */
+
+  /* DMY representation */
+  guint day    : 6;
+  guint month  : 4;
+  guint year   : 16;
+};
+
+/* g_date_new() returns an invalid date, you then have to _set() stuff
+ * to get a usable object. You can also allocate a GDate statically,
+ * then call g_date_clear() to initialize.
+ */
+GDate*       g_date_new                   (void);
+GDate*       g_date_new_dmy               (GDateDay     day,
+                                           GDateMonth   month,
+                                           GDateYear    year);
+GDate*       g_date_new_julian            (guint32      julian_day);
+void         g_date_free                  (GDate       *date);
+
+/* check g_date_valid() after doing an operation that might fail, like
+ * _parse.  Almost all g_date operations are undefined on invalid
+ * dates (the exceptions are the mutators, since you need those to
+ * return to validity).
+ */
+gboolean     g_date_valid                 (const GDate *date);
+gboolean     g_date_valid_day             (GDateDay     day) G_GNUC_CONST;
+gboolean     g_date_valid_month           (GDateMonth month) G_GNUC_CONST;
+gboolean     g_date_valid_year            (GDateYear  year) G_GNUC_CONST;
+gboolean     g_date_valid_weekday         (GDateWeekday weekday) G_GNUC_CONST;
+gboolean     g_date_valid_julian          (guint32 julian_date) G_GNUC_CONST;
+gboolean     g_date_valid_dmy             (GDateDay     day,
+                                           GDateMonth   month,
+                                           GDateYear    year) G_GNUC_CONST;
+
+GDateWeekday g_date_get_weekday           (const GDate *date);
+GDateMonth   g_date_get_month             (const GDate *date);
+GDateYear    g_date_get_year              (const GDate *date);
+GDateDay     g_date_get_day               (const GDate *date);
+guint32      g_date_get_julian            (const GDate *date);
+guint        g_date_get_day_of_year       (const GDate *date);
+/* First monday/sunday is the start of week 1; if we haven't reached
+ * that day, return 0. These are not ISO weeks of the year; that
+ * routine needs to be added.
+ * these functions return the number of weeks, starting on the
+ * corrsponding day
+ */
+guint        g_date_get_monday_week_of_year (const GDate *date);
+guint        g_date_get_sunday_week_of_year (const GDate *date);
+guint        g_date_get_iso8601_week_of_year (const GDate *date);
+
+/* If you create a static date struct you need to clear it to get it
+ * in a sane state before use. You can clear a whole array at
+ * once with the ndates argument.
+ */
+void         g_date_clear                 (GDate       *date,
+                                           guint        n_dates);
+
+/* The parse routine is meant for dates typed in by a user, so it
+ * permits many formats but tries to catch common typos. If your data
+ * needs to be strictly validated, it is not an appropriate function.
+ */
+void         g_date_set_parse             (GDate       *date,
+                                           const gchar *str);
+void         g_date_set_time_t            (GDate       *date,
+					   time_t       timet);
+void         g_date_set_time_val          (GDate       *date,
+					   GTimeVal    *timeval);
+#ifndef G_DISABLE_DEPRECATED
+void         g_date_set_time              (GDate       *date,
+                                           GTime        time_);
+#endif
+void         g_date_set_month             (GDate       *date,
+                                           GDateMonth   month);
+void         g_date_set_day               (GDate       *date,
+                                           GDateDay     day);
+void         g_date_set_year              (GDate       *date,
+                                           GDateYear    year);
+void         g_date_set_dmy               (GDate       *date,
+                                           GDateDay     day,
+                                           GDateMonth   month,
+                                           GDateYear    y);
+void         g_date_set_julian            (GDate       *date,
+                                           guint32      julian_date);
+gboolean     g_date_is_first_of_month     (const GDate *date);
+gboolean     g_date_is_last_of_month      (const GDate *date);
+
+/* To go forward by some number of weeks just go forward weeks*7 days */
+void         g_date_add_days              (GDate       *date,
+                                           guint        n_days);
+void         g_date_subtract_days         (GDate       *date,
+                                           guint        n_days);
+
+/* If you add/sub months while day > 28, the day might change */
+void         g_date_add_months            (GDate       *date,
+                                           guint        n_months);
+void         g_date_subtract_months       (GDate       *date,
+                                           guint        n_months);
+
+/* If it's feb 29, changing years can move you to the 28th */
+void         g_date_add_years             (GDate       *date,
+                                           guint        n_years);
+void         g_date_subtract_years        (GDate       *date,
+                                           guint        n_years);
+gboolean     g_date_is_leap_year          (GDateYear    year) G_GNUC_CONST;
+guint8       g_date_get_days_in_month     (GDateMonth   month,
+                                           GDateYear    year) G_GNUC_CONST;
+guint8       g_date_get_monday_weeks_in_year  (GDateYear    year) G_GNUC_CONST;
+guint8       g_date_get_sunday_weeks_in_year  (GDateYear    year) G_GNUC_CONST;
+
+/* Returns the number of days between the two dates.  If date2 comes
+   before date1, a negative value is return. */
+gint         g_date_days_between          (const GDate *date1,
+					   const GDate *date2);
+
+/* qsort-friendly (with a cast...) */
+gint         g_date_compare               (const GDate *lhs,
+                                           const GDate *rhs);
+void         g_date_to_struct_tm          (const GDate *date,
+                                           struct tm   *tm);
+
+void         g_date_clamp                 (GDate *date,
+					   const GDate *min_date,
+					   const GDate *max_date);
+
+/* Swap date1 and date2's values if date1 > date2. */
+void         g_date_order                 (GDate *date1, GDate *date2);
+
+/* Just like strftime() except you can only use date-related formats.
+ *   Using a time format is undefined.
+ */
+gsize        g_date_strftime              (gchar       *s,
+                                           gsize        slen,
+                                           const gchar *format,
+                                           const GDate *date);
+
+#ifndef G_DISABLE_DEPRECATED
+
+#define g_date_weekday 			g_date_get_weekday
+#define g_date_month 			g_date_get_month
+#define g_date_year 			g_date_get_year
+#define g_date_day 			g_date_get_day
+#define g_date_julian 			g_date_get_julian
+#define g_date_day_of_year 		g_date_get_day_of_year
+#define g_date_monday_week_of_year 	g_date_get_monday_week_of_year
+#define g_date_sunday_week_of_year 	g_date_get_sunday_week_of_year
+#define g_date_days_in_month 		g_date_get_days_in_month
+#define g_date_monday_weeks_in_year 	g_date_get_monday_weeks_in_year
+#define g_date_sunday_weeks_in_year	g_date_get_sunday_weeks_in_year
+
+#endif /* G_DISABLE_DEPRECATED */
+
+G_END_DECLS
+
+#endif /* __G_DATE_H__ */
diff --git a/glib/gdebug.h b/glib/gdebug.h
new file mode 100644
index 0000000..dea3dde
--- /dev/null
+++ b/glib/gdebug.h
@@ -0,0 +1,59 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#ifndef __G_DEBUG_H__
+#define __G_DEBUG_H__
+
+G_BEGIN_DECLS 
+
+typedef enum {
+  G_DEBUG_FATAL_WARNINGS  = 1 << 0,
+  G_DEBUG_FATAL_CRITICALS = 1 << 1
+} GDebugFlag;
+
+
+#ifdef G_ENABLE_DEBUG
+
+#define G_NOTE(type, action)            G_STMT_START { \
+    if (!_g_debug_initialized)                         \
+       { _g_debug_init (); }                           \
+    if (_g_debug_flags & G_DEBUG_##type)               \
+       { action; };                         } G_STMT_END
+
+#else /* !G_ENABLE_DEBUG */
+
+#define G_NOTE(type, action)
+      
+#endif /* G_ENABLE_DEBUG */
+
+GLIB_VAR gboolean _g_debug_initialized;
+GLIB_VAR guint _g_debug_flags;
+
+G_GNUC_INTERNAL void _g_debug_init (void);
+
+G_END_DECLS
+
+#endif /* __G_DEBUG_H__ */
diff --git a/glib/gdir.c b/glib/gdir.c
new file mode 100644
index 0000000..b704f30
--- /dev/null
+++ b/glib/gdir.c
@@ -0,0 +1,302 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gdir.c: Simplified wrapper around the DIRENT functions.
+ *
+ * Copyright 2001 Hans Breuer
+ * Copyright 2004 Tor Lillqvist
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_DIRENT_H
+#include <sys/types.h>
+#include <dirent.h>
+#endif
+
+#include "glib.h"
+#include "gdir.h"
+
+#include "glibintl.h"
+
+#include "galias.h"
+
+#if defined (_MSC_VER) && !defined (HAVE_DIRENT_H)
+#include "../build/win32/dirent/dirent.h"
+#include "../build/win32/dirent/wdirent.c"
+#endif
+
+struct _GDir
+{
+#ifdef G_OS_WIN32
+  _WDIR *wdirp;
+#else
+  DIR *dirp;
+#endif
+#ifdef G_OS_WIN32
+  gchar utf8_buf[FILENAME_MAX*4];
+#endif
+};
+
+/**
+ * g_dir_open:
+ * @path: the path to the directory you are interested in. On Unix
+ *         in the on-disk encoding. On Windows in UTF-8
+ * @flags: Currently must be set to 0. Reserved for future use.
+ * @error: return location for a #GError, or %NULL.
+ *         If non-%NULL, an error will be set if and only if
+ *         g_dir_open() fails.
+ *
+ * Opens a directory for reading. The names of the files in the
+ * directory can then be retrieved using g_dir_read_name().
+ *
+ * Return value: a newly allocated #GDir on success, %NULL on failure.
+ *   If non-%NULL, you must free the result with g_dir_close()
+ *   when you are finished with it.
+ **/
+GDir *
+g_dir_open (const gchar  *path,
+            guint         flags,
+            GError      **error)
+{
+  GDir *dir;
+#ifdef G_OS_WIN32
+  wchar_t *wpath;
+#else
+  gchar *utf8_path;
+#endif
+
+  g_return_val_if_fail (path != NULL, NULL);
+
+#ifdef G_OS_WIN32
+  wpath = g_utf8_to_utf16 (path, -1, NULL, NULL, error);
+
+  if (wpath == NULL)
+    return NULL;
+
+  dir = g_new (GDir, 1);
+
+  dir->wdirp = _wopendir (wpath);
+  g_free (wpath);
+
+  if (dir->wdirp)
+    return dir;
+
+  /* error case */
+
+  g_set_error (error,
+	       G_FILE_ERROR,
+	       g_file_error_from_errno (errno),
+	       _("Error opening directory '%s': %s"),
+	       path, g_strerror (errno));
+  
+  g_free (dir);
+      
+  return NULL;
+#else
+  dir = g_new (GDir, 1);
+
+  dir->dirp = opendir (path);
+
+  if (dir->dirp)
+    return dir;
+
+  /* error case */
+  utf8_path = g_filename_to_utf8 (path, -1,
+				  NULL, NULL, NULL);
+  g_set_error (error,
+               G_FILE_ERROR,
+               g_file_error_from_errno (errno),
+               _("Error opening directory '%s': %s"),
+	       utf8_path, g_strerror (errno));
+
+  g_free (utf8_path);
+  g_free (dir);
+
+  return NULL;
+#endif
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+/* The above function actually is called g_dir_open_utf8, and it's
+ * that what applications compiled with this GLib version will
+ * use.
+ */
+
+#undef g_dir_open
+
+/* Binary compatibility version. Not for newly compiled code. */
+
+GDir *
+g_dir_open (const gchar  *path,
+            guint         flags,
+            GError      **error)
+{
+  gchar *utf8_path = g_locale_to_utf8 (path, -1, NULL, NULL, error);
+  GDir *retval;
+
+  if (utf8_path == NULL)
+    return NULL;
+
+  retval = g_dir_open_utf8 (utf8_path, flags, error);
+
+  g_free (utf8_path);
+
+  return retval;
+}
+#endif
+
+/**
+ * g_dir_read_name:
+ * @dir: a #GDir* created by g_dir_open()
+ *
+ * Retrieves the name of the next entry in the directory.  The '.' and
+ * '..' entries are omitted. On Windows, the returned name is in
+ * UTF-8. On Unix, it is in the on-disk encoding.
+ *
+ * Return value: The entry's name or %NULL if there are no 
+ *   more entries. The return value is owned by GLib and
+ *   must not be modified or freed.
+ **/
+G_CONST_RETURN gchar*
+g_dir_read_name (GDir *dir)
+{
+#ifdef G_OS_WIN32
+  gchar *utf8_name;
+  struct _wdirent *wentry;
+#else
+  struct dirent *entry;
+#endif
+
+  g_return_val_if_fail (dir != NULL, NULL);
+
+#ifdef G_OS_WIN32
+  while (1)
+    {
+      wentry = _wreaddir (dir->wdirp);
+      while (wentry 
+	     && (0 == wcscmp (wentry->d_name, L".") ||
+		 0 == wcscmp (wentry->d_name, L"..")))
+	wentry = _wreaddir (dir->wdirp);
+
+      if (wentry == NULL)
+	return NULL;
+
+      utf8_name = g_utf16_to_utf8 (wentry->d_name, -1, NULL, NULL, NULL);
+
+      if (utf8_name == NULL)
+	continue;		/* Huh, impossible? Skip it anyway */
+
+      strcpy (dir->utf8_buf, utf8_name);
+      g_free (utf8_name);
+
+      return dir->utf8_buf;
+    }
+#else
+  entry = readdir (dir->dirp);
+  while (entry 
+         && (0 == strcmp (entry->d_name, ".") ||
+             0 == strcmp (entry->d_name, "..")))
+    entry = readdir (dir->dirp);
+
+  if (entry)
+    return entry->d_name;
+  else
+    return NULL;
+#endif
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+/* Ditto for g_dir_read_name */
+
+#undef g_dir_read_name
+
+/* Binary compatibility version. Not for newly compiled code. */
+
+G_CONST_RETURN gchar*
+g_dir_read_name (GDir *dir)
+{
+  while (1)
+    {
+      const gchar *utf8_name = g_dir_read_name_utf8 (dir);
+      gchar *retval;
+      
+      if (utf8_name == NULL)
+	return NULL;
+
+      retval = g_locale_from_utf8 (utf8_name, -1, NULL, NULL, NULL);
+
+      if (retval != NULL)
+	{
+	  strcpy (dir->utf8_buf, retval);
+	  g_free (retval);
+
+	  return dir->utf8_buf;
+	}
+    }
+}
+
+#endif
+
+/**
+ * g_dir_rewind:
+ * @dir: a #GDir* created by g_dir_open()
+ *
+ * Resets the given directory. The next call to g_dir_read_name()
+ * will return the first entry again.
+ **/
+void
+g_dir_rewind (GDir *dir)
+{
+  g_return_if_fail (dir != NULL);
+  
+#ifdef G_OS_WIN32
+  _wrewinddir (dir->wdirp);
+#else
+  rewinddir (dir->dirp);
+#endif
+}
+
+/**
+ * g_dir_close:
+ * @dir: a #GDir* created by g_dir_open()
+ *
+ * Closes the directory and deallocates all related resources.
+ **/
+void
+g_dir_close (GDir *dir)
+{
+  g_return_if_fail (dir != NULL);
+
+#ifdef G_OS_WIN32
+  _wclosedir (dir->wdirp);
+#else
+  closedir (dir->dirp);
+#endif
+  g_free (dir);
+}
+
+#define __G_DIR_C__
+#include "galiasdef.c"
diff --git a/glib/gdir.h b/glib/gdir.h
new file mode 100644
index 0000000..85e9896
--- /dev/null
+++ b/glib/gdir.h
@@ -0,0 +1,52 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gdir.c: Simplified wrapper around the DIRENT functions.
+ *
+ * Copyright 2001 Hans Breuer
+ *
+ * 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 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_DIR_H__
+#define __G_DIR_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GDir GDir;
+
+#ifdef G_OS_WIN32
+/* For DLL ABI stability, keep old names for old (non-UTF-8) functionality. */
+#define g_dir_open g_dir_open_utf8
+#define g_dir_read_name g_dir_read_name_utf8
+#endif
+
+GDir    *                g_dir_open           (const gchar  *path,
+					       guint         flags,
+					       GError      **error);
+G_CONST_RETURN gchar    *g_dir_read_name      (GDir         *dir);
+void                     g_dir_rewind         (GDir         *dir);
+void                     g_dir_close          (GDir         *dir);
+
+G_END_DECLS
+
+#endif /* __G_DIR_H__ */
diff --git a/glib/gerror.c b/glib/gerror.c
new file mode 100644
index 0000000..9408560
--- /dev/null
+++ b/glib/gerror.c
@@ -0,0 +1,375 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include "config.h"
+
+#include "glib.h"
+#include "galias.h"
+
+
+static GError* 
+g_error_new_valist (GQuark         domain,
+                    gint           code,
+                    const gchar   *format,
+                    va_list        args)
+{
+  GError *error;
+  
+  error = g_slice_new (GError);
+  
+  error->domain = domain;
+  error->code = code;
+  error->message = g_strdup_vprintf (format, args);
+  
+  return error;
+}
+
+/**
+ * g_error_new:
+ * @domain: error domain 
+ * @code: error code
+ * @format: printf()-style format for error message
+ * @Varargs: parameters for message format
+ * 
+ * Creates a new #GError with the given @domain and @code,
+ * and a message formatted with @format.
+ * 
+ * Return value: a new #GError
+ **/
+GError*
+g_error_new (GQuark       domain,
+             gint         code,
+             const gchar *format,
+             ...)
+{
+  GError* error;
+  va_list args;
+
+  g_return_val_if_fail (format != NULL, NULL);
+  g_return_val_if_fail (domain != 0, NULL);
+
+  va_start (args, format);
+  error = g_error_new_valist (domain, code, format, args);
+  va_end (args);
+
+  return error;
+}
+
+/**
+ * g_error_new_literal:
+ * @domain: error domain
+ * @code: error code
+ * @message: error message
+ * 
+ * Creates a new #GError; unlike g_error_new(), @message is not
+ * a printf()-style format string. Use this 
+ * function if @message contains text you don't have control over, 
+ * that could include printf() escape sequences.
+ * 
+ * Return value: a new #GError
+ **/
+GError*
+g_error_new_literal (GQuark         domain,
+                     gint           code,
+                     const gchar   *message)
+{
+  GError* err;
+
+  g_return_val_if_fail (message != NULL, NULL);
+  g_return_val_if_fail (domain != 0, NULL);
+
+  err = g_slice_new (GError);
+
+  err->domain = domain;
+  err->code = code;
+  err->message = g_strdup (message);
+  
+  return err;
+}
+
+/**
+ * g_error_free:
+ * @error: a #GError
+ *
+ * Frees a #GError and associated resources.
+ * 
+ **/
+void
+g_error_free (GError *error)
+{
+  g_return_if_fail (error != NULL);  
+
+  g_free (error->message);
+
+  g_slice_free (GError, error);
+}
+
+/**
+ * g_error_copy:
+ * @error: a #GError
+ * 
+ * Makes a copy of @error.
+ * 
+ * Return value: a new #GError
+ **/
+GError*
+g_error_copy (const GError *error)
+{
+  GError *copy;
+  
+  g_return_val_if_fail (error != NULL, NULL);
+
+  copy = g_slice_new (GError);
+
+  *copy = *error;
+
+  copy->message = g_strdup (error->message);
+
+  return copy;
+}
+
+/**
+ * g_error_matches:
+ * @error: a #GError
+ * @domain: an error domain
+ * @code: an error code
+ * 
+ * Returns %TRUE if @error matches @domain and @code, %FALSE
+ * otherwise.
+ * 
+ * Return value: whether @error has @domain and @code
+ **/
+gboolean
+g_error_matches (const GError *error,
+                 GQuark        domain,
+                 gint          code)
+{
+  return error &&
+    error->domain == domain &&
+    error->code == code;
+}
+
+#define ERROR_OVERWRITTEN_WARNING "GError set over the top of a previous GError or uninitialized memory.\n" \
+               "This indicates a bug in someone's code. You must ensure an error is NULL before it's set.\n" \
+               "The overwriting error message was: %s"
+
+/**
+ * g_set_error:
+ * @err: a return location for a #GError, or %NULL
+ * @domain: error domain
+ * @code: error code 
+ * @format: printf()-style format
+ * @Varargs: args for @format 
+ * 
+ * Does nothing if @err is %NULL; if @err is non-%NULL, then *@err must
+ * be %NULL. A new #GError is created and assigned to *@err.
+ **/
+void
+g_set_error (GError      **err,
+             GQuark        domain,
+             gint          code,
+             const gchar  *format,
+             ...)
+{
+  GError *new;
+  
+  va_list args;
+
+  if (err == NULL)
+    return;
+  
+  va_start (args, format);
+  new = g_error_new_valist (domain, code, format, args);
+  va_end (args);
+
+  if (*err == NULL)
+    *err = new;
+  else
+    g_warning (ERROR_OVERWRITTEN_WARNING, new->message);    
+}
+
+/**
+ * g_set_error_literal:
+ * @err: a return location for a #GError, or %NULL
+ * @domain: error domain
+ * @code: error code 
+ * @message: error message
+ *
+ * Does nothing if @err is %NULL; if @err is non-%NULL, then *@err must
+ * be %NULL. A new #GError is created and assigned to *@err.
+ * Unlike g_set_error(), @message is not a printf()-style format string.
+ * Use this function if @message contains text you don't have control over,
+ * that could include printf() escape sequences.
+ *
+ * Since: 2.18
+ **/
+void
+g_set_error_literal (GError      **err,
+                     GQuark        domain,
+                     gint          code,
+                     const gchar  *message)
+{
+  GError *new;
+  
+  if (err == NULL)
+    return;
+
+  new = g_error_new_literal (domain, code, message);
+  if (*err == NULL)
+    *err = new;
+  else
+    g_warning (ERROR_OVERWRITTEN_WARNING, new->message);    
+}
+
+/**
+ * g_propagate_error:
+ * @dest: error return location
+ * @src: error to move into the return location
+ *
+ * If @dest is %NULL, free @src; otherwise, moves @src into *@dest.
+ * The error variable @dest points to must be %NULL.
+ **/
+void
+g_propagate_error (GError       **dest,
+		   GError        *src)
+{
+  g_return_if_fail (src != NULL);
+  
+  if (dest == NULL)
+    {
+      if (src)
+        g_error_free (src);
+      return;
+    }
+  else
+    {
+      if (*dest != NULL)
+        g_warning (ERROR_OVERWRITTEN_WARNING, src->message);
+      else
+        *dest = src;
+    }
+}
+
+/**
+ * g_clear_error:
+ * @err: a #GError return location
+ * 
+ * If @err is %NULL, does nothing. If @err is non-%NULL,
+ * calls g_error_free() on *@err and sets *@err to %NULL.
+ **/
+void
+g_clear_error (GError **err)
+{
+  if (err && *err)
+    {
+      g_error_free (*err);
+      *err = NULL;
+    }
+}
+
+static void
+g_error_add_prefix (gchar       **string,
+                    const gchar  *format,
+                    va_list       ap)
+{
+  gchar *oldstring;
+  gchar *prefix;
+
+  prefix = g_strdup_vprintf (format, ap);
+  oldstring = *string;
+  *string = g_strconcat (prefix, oldstring, NULL);
+  g_free (oldstring);
+  g_free (prefix);
+}
+
+/**
+ * g_prefix_error:
+ * @err: a return location for a #GError, or %NULL
+ * @format: printf()-style format string
+ * @...: arguments to @format
+ *
+ * Formats a string according to @format and
+ * prefix it to an existing error message.  If
+ * @err is %NULL (ie: no error variable) then do
+ * nothing.
+ *
+ * If *@err is %NULL (ie: an error variable is
+ * present but there is no error condition) then
+ * also do nothing.  Whether or not it makes
+ * sense to take advantage of this feature is up
+ * to you.
+ *
+ * Since: 2.16
+ **/
+void
+g_prefix_error (GError      **err,
+                const gchar  *format,
+                ...)
+{
+  if (err && *err)
+    {
+      va_list ap;
+
+      va_start (ap, format);
+      g_error_add_prefix (&(*err)->message, format, ap);
+      va_end (ap);
+    }
+}
+
+/**
+ * g_propagate_prefixed_error:
+ * @dest: error return location
+ * @src: error to move into the return location
+ * @format: printf()-style format string
+ * @...: arguments to @format
+ * 
+ * If @dest is %NULL, free @src; otherwise,
+ * moves @src into *@dest. *@dest must be %NULL.
+ * After the move, add a prefix as with 
+ * g_prefix_error().
+ *
+ * Since: 2.16
+ **/
+void
+g_propagate_prefixed_error (GError      **dest,
+                            GError       *src,
+                            const gchar  *format,
+                            ...)
+{
+  g_propagate_error (dest, src);
+
+  if (dest && *dest)
+    {
+      va_list ap;
+
+      va_start (ap, format);
+      g_error_add_prefix (&(*dest)->message, format, ap);
+      va_end (ap);
+    }
+}
+
+#define __G_ERROR_C__
+#include "galiasdef.c"
diff --git a/glib/gerror.h b/glib/gerror.h
new file mode 100644
index 0000000..d3d42d5
--- /dev/null
+++ b/glib/gerror.h
@@ -0,0 +1,92 @@
+/* gerror.h - Error reporting system
+ *
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * The Gnome 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 of the
+ * License, or (at your option) any later version.
+ *
+ * The Gnome 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 the Gnome Library; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_ERROR_H__
+#define __G_ERROR_H__
+
+#include <glib/gquark.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GError GError;
+
+struct _GError
+{
+  GQuark       domain;
+  gint         code;
+  gchar       *message;
+};
+
+GError*  g_error_new           (GQuark         domain,
+                                gint           code,
+                                const gchar   *format,
+                                ...) G_GNUC_PRINTF (3, 4);
+
+GError*  g_error_new_literal   (GQuark         domain,
+                                gint           code,
+                                const gchar   *message);
+
+void     g_error_free          (GError        *error);
+GError*  g_error_copy          (const GError  *error);
+
+gboolean g_error_matches       (const GError  *error,
+                                GQuark         domain,
+                                gint           code);
+
+/* if (err) *err = g_error_new(domain, code, format, ...), also has
+ * some sanity checks.
+ */
+void     g_set_error           (GError       **err,
+                                GQuark         domain,
+                                gint           code,
+                                const gchar   *format,
+                                ...) G_GNUC_PRINTF (4, 5);
+
+void     g_set_error_literal   (GError       **err,
+                                GQuark         domain,
+                                gint           code,
+                                const gchar   *message);
+
+/* if (dest) *dest = src; also has some sanity checks.
+ */
+void     g_propagate_error     (GError       **dest,
+				GError        *src);
+
+/* if (err && *err) { g_error_free(*err); *err = NULL; } */
+void     g_clear_error         (GError       **err);
+
+/* if (err) prefix the formatted string to the ->message */
+void     g_prefix_error               (GError       **err,
+                                       const gchar   *format,
+                                       ...) G_GNUC_PRINTF (2, 3);
+
+/* g_propagate_error then g_error_prefix on dest */
+void     g_propagate_prefixed_error   (GError       **dest,
+                                       GError        *src,
+                                       const gchar   *format,
+                                       ...) G_GNUC_PRINTF (3, 4);
+
+G_END_DECLS
+
+#endif /* __G_ERROR_H__ */
diff --git a/glib/gfileutils.c b/glib/gfileutils.c
new file mode 100644
index 0000000..4f5c669
--- /dev/null
+++ b/glib/gfileutils.c
@@ -0,0 +1,1965 @@
+/* gfileutils.c - File utility functions
+ *
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "glib.h"
+
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdlib.h>
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <io.h>
+#endif /* G_OS_WIN32 */
+
+#ifndef S_ISLNK
+#define S_ISLNK(x) 0
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#include "gstdio.h"
+#include "glibintl.h"
+
+#include "galias.h"
+
+static gint create_temp_file (gchar *tmpl, 
+			      int    permissions);
+
+/**
+ * g_mkdir_with_parents:
+ * @pathname: a pathname in the GLib file name encoding
+ * @mode: permissions to use for newly created directories
+ *
+ * Create a directory if it doesn't already exist. Create intermediate
+ * parent directories as needed, too.
+ *
+ * Returns: 0 if the directory already exists, or was successfully
+ * created. Returns -1 if an error occurred, with errno set.
+ *
+ * Since: 2.8
+ */
+int
+g_mkdir_with_parents (const gchar *pathname,
+		      int          mode)
+{
+  gchar *fn, *p;
+
+  if (pathname == NULL || *pathname == '\0')
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  fn = g_strdup (pathname);
+
+  if (g_path_is_absolute (fn))
+    p = (gchar *) g_path_skip_root (fn);
+  else
+    p = fn;
+
+  do
+    {
+      while (*p && !G_IS_DIR_SEPARATOR (*p))
+	p++;
+      
+      if (!*p)
+	p = NULL;
+      else
+	*p = '\0';
+      
+      if (!g_file_test (fn, G_FILE_TEST_EXISTS))
+	{
+	  if (g_mkdir (fn, mode) == -1)
+	    {
+	      int errno_save = errno;
+	      g_free (fn);
+	      errno = errno_save;
+	      return -1;
+	    }
+	}
+      else if (!g_file_test (fn, G_FILE_TEST_IS_DIR))
+	{
+	  g_free (fn);
+	  errno = ENOTDIR;
+	  return -1;
+	}
+      if (p)
+	{
+	  *p++ = G_DIR_SEPARATOR;
+	  while (*p && G_IS_DIR_SEPARATOR (*p))
+	    p++;
+	}
+    }
+  while (p);
+
+  g_free (fn);
+
+  return 0;
+}
+
+/**
+ * g_file_test:
+ * @filename: a filename to test in the GLib file name encoding
+ * @test: bitfield of #GFileTest flags
+ * 
+ * Returns %TRUE if any of the tests in the bitfield @test are
+ * %TRUE. For example, <literal>(G_FILE_TEST_EXISTS | 
+ * G_FILE_TEST_IS_DIR)</literal> will return %TRUE if the file exists; 
+ * the check whether it's a directory doesn't matter since the existence 
+ * test is %TRUE. With the current set of available tests, there's no point
+ * passing in more than one test at a time.
+ * 
+ * Apart from %G_FILE_TEST_IS_SYMLINK all tests follow symbolic links,
+ * so for a symbolic link to a regular file g_file_test() will return
+ * %TRUE for both %G_FILE_TEST_IS_SYMLINK and %G_FILE_TEST_IS_REGULAR.
+ *
+ * Note, that for a dangling symbolic link g_file_test() will return
+ * %TRUE for %G_FILE_TEST_IS_SYMLINK and %FALSE for all other flags.
+ *
+ * You should never use g_file_test() to test whether it is safe
+ * to perform an operation, because there is always the possibility
+ * of the condition changing before you actually perform the operation.
+ * For example, you might think you could use %G_FILE_TEST_IS_SYMLINK
+ * to know whether it is safe to write to a file without being
+ * tricked into writing into a different location. It doesn't work!
+ * |[
+ * /&ast; DON'T DO THIS &ast;/
+ *  if (!g_file_test (filename, G_FILE_TEST_IS_SYMLINK)) 
+ *    {
+ *      fd = g_open (filename, O_WRONLY);
+ *      /&ast; write to fd &ast;/
+ *    }
+ * ]|
+ *
+ * Another thing to note is that %G_FILE_TEST_EXISTS and
+ * %G_FILE_TEST_IS_EXECUTABLE are implemented using the access()
+ * system call. This usually doesn't matter, but if your program
+ * is setuid or setgid it means that these tests will give you
+ * the answer for the real user ID and group ID, rather than the
+ * effective user ID and group ID.
+ *
+ * On Windows, there are no symlinks, so testing for
+ * %G_FILE_TEST_IS_SYMLINK will always return %FALSE. Testing for
+ * %G_FILE_TEST_IS_EXECUTABLE will just check that the file exists and
+ * its name indicates that it is executable, checking for well-known
+ * extensions and those listed in the %PATHEXT environment variable.
+ *
+ * Return value: whether a test was %TRUE
+ **/
+gboolean
+g_file_test (const gchar *filename,
+             GFileTest    test)
+{
+#ifdef G_OS_WIN32
+/* stuff missing in std vc6 api */
+#  ifndef INVALID_FILE_ATTRIBUTES
+#    define INVALID_FILE_ATTRIBUTES -1
+#  endif
+#  ifndef FILE_ATTRIBUTE_DEVICE
+#    define FILE_ATTRIBUTE_DEVICE 64
+#  endif
+  int attributes;
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+
+  if (wfilename == NULL)
+    return FALSE;
+
+  attributes = GetFileAttributesW (wfilename);
+
+  g_free (wfilename);
+
+  if (attributes == INVALID_FILE_ATTRIBUTES)
+    return FALSE;
+
+  if (test & G_FILE_TEST_EXISTS)
+    return TRUE;
+      
+  if (test & G_FILE_TEST_IS_REGULAR)
+    return (attributes & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE)) == 0;
+
+  if (test & G_FILE_TEST_IS_DIR)
+    return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
+
+  if (test & G_FILE_TEST_IS_EXECUTABLE)
+    {
+      const gchar *lastdot = strrchr (filename, '.');
+      const gchar *pathext = NULL, *p;
+      int extlen;
+
+      if (lastdot == NULL)
+	return FALSE;
+
+      if (_stricmp (lastdot, ".exe") == 0 ||
+	  _stricmp (lastdot, ".cmd") == 0 ||
+	  _stricmp (lastdot, ".bat") == 0 ||
+	  _stricmp (lastdot, ".com") == 0)
+	return TRUE;
+
+      /* Check if it is one of the types listed in %PATHEXT% */
+
+      pathext = g_getenv ("PATHEXT");
+      if (pathext == NULL)
+	return FALSE;
+
+      pathext = g_utf8_casefold (pathext, -1);
+
+      lastdot = g_utf8_casefold (lastdot, -1);
+      extlen = strlen (lastdot);
+
+      p = pathext;
+      while (TRUE)
+	{
+	  const gchar *q = strchr (p, ';');
+	  if (q == NULL)
+	    q = p + strlen (p);
+	  if (extlen == q - p &&
+	      memcmp (lastdot, p, extlen) == 0)
+	    {
+	      g_free ((gchar *) pathext);
+	      g_free ((gchar *) lastdot);
+	      return TRUE;
+	    }
+	  if (*q)
+	    p = q + 1;
+	  else
+	    break;
+	}
+
+      g_free ((gchar *) pathext);
+      g_free ((gchar *) lastdot);
+      return FALSE;
+    }
+
+  return FALSE;
+#else
+  if ((test & G_FILE_TEST_EXISTS) && (access (filename, F_OK) == 0))
+    return TRUE;
+  
+  if ((test & G_FILE_TEST_IS_EXECUTABLE) && (access (filename, X_OK) == 0))
+    {
+      if (getuid () != 0)
+	return TRUE;
+
+      /* For root, on some POSIX systems, access (filename, X_OK)
+       * will succeed even if no executable bits are set on the
+       * file. We fall through to a stat test to avoid that.
+       */
+    }
+  else
+    test &= ~G_FILE_TEST_IS_EXECUTABLE;
+
+  if (test & G_FILE_TEST_IS_SYMLINK)
+    {
+      struct stat s;
+
+      if ((lstat (filename, &s) == 0) && S_ISLNK (s.st_mode))
+        return TRUE;
+    }
+  
+  if (test & (G_FILE_TEST_IS_REGULAR |
+	      G_FILE_TEST_IS_DIR |
+	      G_FILE_TEST_IS_EXECUTABLE))
+    {
+      struct stat s;
+      
+      if (stat (filename, &s) == 0)
+	{
+	  if ((test & G_FILE_TEST_IS_REGULAR) && S_ISREG (s.st_mode))
+	    return TRUE;
+	  
+	  if ((test & G_FILE_TEST_IS_DIR) && S_ISDIR (s.st_mode))
+	    return TRUE;
+
+	  /* The extra test for root when access (file, X_OK) succeeds.
+	   */
+	  if ((test & G_FILE_TEST_IS_EXECUTABLE) &&
+	      ((s.st_mode & S_IXOTH) ||
+	       (s.st_mode & S_IXUSR) ||
+	       (s.st_mode & S_IXGRP)))
+	    return TRUE;
+	}
+    }
+
+  return FALSE;
+#endif
+}
+
+GQuark
+g_file_error_quark (void)
+{
+  return g_quark_from_static_string ("g-file-error-quark");
+}
+
+/**
+ * g_file_error_from_errno:
+ * @err_no: an "errno" value
+ * 
+ * Gets a #GFileError constant based on the passed-in @errno.
+ * For example, if you pass in %EEXIST this function returns
+ * #G_FILE_ERROR_EXIST. Unlike @errno values, you can portably
+ * assume that all #GFileError values will exist.
+ *
+ * Normally a #GFileError value goes into a #GError returned
+ * from a function that manipulates files. So you would use
+ * g_file_error_from_errno() when constructing a #GError.
+ * 
+ * Return value: #GFileError corresponding to the given @errno
+ **/
+GFileError
+g_file_error_from_errno (gint err_no)
+{
+  switch (err_no)
+    {
+#ifdef EEXIST
+    case EEXIST:
+      return G_FILE_ERROR_EXIST;
+      break;
+#endif
+
+#ifdef EISDIR
+    case EISDIR:
+      return G_FILE_ERROR_ISDIR;
+      break;
+#endif
+
+#ifdef EACCES
+    case EACCES:
+      return G_FILE_ERROR_ACCES;
+      break;
+#endif
+
+#ifdef ENAMETOOLONG
+    case ENAMETOOLONG:
+      return G_FILE_ERROR_NAMETOOLONG;
+      break;
+#endif
+
+#ifdef ENOENT
+    case ENOENT:
+      return G_FILE_ERROR_NOENT;
+      break;
+#endif
+
+#ifdef ENOTDIR
+    case ENOTDIR:
+      return G_FILE_ERROR_NOTDIR;
+      break;
+#endif
+
+#ifdef ENXIO
+    case ENXIO:
+      return G_FILE_ERROR_NXIO;
+      break;
+#endif
+
+#ifdef ENODEV
+    case ENODEV:
+      return G_FILE_ERROR_NODEV;
+      break;
+#endif
+
+#ifdef EROFS
+    case EROFS:
+      return G_FILE_ERROR_ROFS;
+      break;
+#endif
+
+#ifdef ETXTBSY
+    case ETXTBSY:
+      return G_FILE_ERROR_TXTBSY;
+      break;
+#endif
+
+#ifdef EFAULT
+    case EFAULT:
+      return G_FILE_ERROR_FAULT;
+      break;
+#endif
+
+#ifdef ELOOP
+    case ELOOP:
+      return G_FILE_ERROR_LOOP;
+      break;
+#endif
+
+#ifdef ENOSPC
+    case ENOSPC:
+      return G_FILE_ERROR_NOSPC;
+      break;
+#endif
+
+#ifdef ENOMEM
+    case ENOMEM:
+      return G_FILE_ERROR_NOMEM;
+      break;
+#endif
+
+#ifdef EMFILE
+    case EMFILE:
+      return G_FILE_ERROR_MFILE;
+      break;
+#endif
+
+#ifdef ENFILE
+    case ENFILE:
+      return G_FILE_ERROR_NFILE;
+      break;
+#endif
+
+#ifdef EBADF
+    case EBADF:
+      return G_FILE_ERROR_BADF;
+      break;
+#endif
+
+#ifdef EINVAL
+    case EINVAL:
+      return G_FILE_ERROR_INVAL;
+      break;
+#endif
+
+#ifdef EPIPE
+    case EPIPE:
+      return G_FILE_ERROR_PIPE;
+      break;
+#endif
+
+#ifdef EAGAIN
+    case EAGAIN:
+      return G_FILE_ERROR_AGAIN;
+      break;
+#endif
+
+#ifdef EINTR
+    case EINTR:
+      return G_FILE_ERROR_INTR;
+      break;
+#endif
+
+#ifdef EIO
+    case EIO:
+      return G_FILE_ERROR_IO;
+      break;
+#endif
+
+#ifdef EPERM
+    case EPERM:
+      return G_FILE_ERROR_PERM;
+      break;
+#endif
+
+#ifdef ENOSYS
+    case ENOSYS:
+      return G_FILE_ERROR_NOSYS;
+      break;
+#endif
+
+    default:
+      return G_FILE_ERROR_FAILED;
+      break;
+    }
+}
+
+static gboolean
+get_contents_stdio (const gchar  *display_filename,
+                    FILE         *f,
+                    gchar       **contents,
+                    gsize        *length,
+                    GError      **error)
+{
+  gchar buf[4096];
+  gsize bytes;
+  gchar *str = NULL;
+  gsize total_bytes = 0;
+  gsize total_allocated = 0;
+  gchar *tmp;
+
+  g_assert (f != NULL);
+
+  while (!feof (f))
+    {
+      gint save_errno;
+
+      bytes = fread (buf, 1, sizeof (buf), f);
+      save_errno = errno;
+
+      while ((total_bytes + bytes + 1) > total_allocated)
+        {
+          if (str)
+            total_allocated *= 2;
+          else
+            total_allocated = MIN (bytes + 1, sizeof (buf));
+
+          tmp = g_try_realloc (str, total_allocated);
+
+          if (tmp == NULL)
+            {
+              g_set_error (error,
+                           G_FILE_ERROR,
+                           G_FILE_ERROR_NOMEM,
+                           _("Could not allocate %lu bytes to read file \"%s\""),
+                           (gulong) total_allocated,
+			   display_filename);
+
+              goto error;
+            }
+
+	  str = tmp;
+        }
+
+      if (ferror (f))
+        {
+          g_set_error (error,
+                       G_FILE_ERROR,
+                       g_file_error_from_errno (save_errno),
+                       _("Error reading file '%s': %s"),
+                       display_filename,
+		       g_strerror (save_errno));
+
+          goto error;
+        }
+
+      memcpy (str + total_bytes, buf, bytes);
+
+      if (total_bytes + bytes < total_bytes) 
+        {
+          g_set_error (error,
+                       G_FILE_ERROR,
+                       G_FILE_ERROR_FAILED,
+                       _("File \"%s\" is too large"),
+                       display_filename);
+
+          goto error;
+        }
+
+      total_bytes += bytes;
+    }
+
+  fclose (f);
+
+  if (total_allocated == 0)
+    {
+      str = g_new (gchar, 1);
+      total_bytes = 0;
+    }
+
+  str[total_bytes] = '\0';
+
+  if (length)
+    *length = total_bytes;
+
+  *contents = str;
+
+  return TRUE;
+
+ error:
+
+  g_free (str);
+  fclose (f);
+
+  return FALSE;
+}
+
+#ifndef G_OS_WIN32
+
+static gboolean
+get_contents_regfile (const gchar  *display_filename,
+                      struct stat  *stat_buf,
+                      gint          fd,
+                      gchar       **contents,
+                      gsize        *length,
+                      GError      **error)
+{
+  gchar *buf;
+  gsize bytes_read;
+  gsize size;
+  gsize alloc_size;
+  
+  size = stat_buf->st_size;
+
+  alloc_size = size + 1;
+  buf = g_try_malloc (alloc_size);
+
+  if (buf == NULL)
+    {
+      g_set_error (error,
+                   G_FILE_ERROR,
+                   G_FILE_ERROR_NOMEM,
+                   _("Could not allocate %lu bytes to read file \"%s\""),
+                   (gulong) alloc_size, 
+		   display_filename);
+
+      goto error;
+    }
+  
+  bytes_read = 0;
+  while (bytes_read < size)
+    {
+      gssize rc;
+          
+      rc = read (fd, buf + bytes_read, size - bytes_read);
+
+      if (rc < 0)
+        {
+          if (errno != EINTR) 
+            {
+	      int save_errno = errno;
+
+              g_free (buf);
+              g_set_error (error,
+                           G_FILE_ERROR,
+                           g_file_error_from_errno (save_errno),
+                           _("Failed to read from file '%s': %s"),
+                           display_filename, 
+			   g_strerror (save_errno));
+
+	      goto error;
+            }
+        }
+      else if (rc == 0)
+        break;
+      else
+        bytes_read += rc;
+    }
+      
+  buf[bytes_read] = '\0';
+
+  if (length)
+    *length = bytes_read;
+  
+  *contents = buf;
+
+  close (fd);
+
+  return TRUE;
+
+ error:
+
+  close (fd);
+  
+  return FALSE;
+}
+
+static gboolean
+get_contents_posix (const gchar  *filename,
+                    gchar       **contents,
+                    gsize        *length,
+                    GError      **error)
+{
+  struct stat stat_buf;
+  gint fd;
+  gchar *display_filename = g_filename_display_name (filename);
+
+  /* O_BINARY useful on Cygwin */
+  fd = open (filename, O_RDONLY|O_BINARY);
+
+  if (fd < 0)
+    {
+      int save_errno = errno;
+
+      g_set_error (error,
+                   G_FILE_ERROR,
+                   g_file_error_from_errno (save_errno),
+                   _("Failed to open file '%s': %s"),
+                   display_filename, 
+		   g_strerror (save_errno));
+      g_free (display_filename);
+
+      return FALSE;
+    }
+
+  /* I don't think this will ever fail, aside from ENOMEM, but. */
+  if (fstat (fd, &stat_buf) < 0)
+    {
+      int save_errno = errno;
+
+      close (fd);
+      g_set_error (error,
+                   G_FILE_ERROR,
+                   g_file_error_from_errno (save_errno),
+                   _("Failed to get attributes of file '%s': fstat() failed: %s"),
+                   display_filename, 
+		   g_strerror (save_errno));
+      g_free (display_filename);
+
+      return FALSE;
+    }
+
+  if (stat_buf.st_size > 0 && S_ISREG (stat_buf.st_mode))
+    {
+      gboolean retval = get_contents_regfile (display_filename,
+					      &stat_buf,
+					      fd,
+					      contents,
+					      length,
+					      error);
+      g_free (display_filename);
+
+      return retval;
+    }
+  else
+    {
+      FILE *f;
+      gboolean retval;
+
+      f = fdopen (fd, "r");
+      
+      if (f == NULL)
+        {
+	  int save_errno = errno;
+
+          g_set_error (error,
+                       G_FILE_ERROR,
+                       g_file_error_from_errno (save_errno),
+                       _("Failed to open file '%s': fdopen() failed: %s"),
+                       display_filename, 
+		       g_strerror (save_errno));
+          g_free (display_filename);
+
+          return FALSE;
+        }
+  
+      retval = get_contents_stdio (display_filename, f, contents, length, error);
+      g_free (display_filename);
+
+      return retval;
+    }
+}
+
+#else  /* G_OS_WIN32 */
+
+static gboolean
+get_contents_win32 (const gchar  *filename,
+		    gchar       **contents,
+		    gsize        *length,
+		    GError      **error)
+{
+  FILE *f;
+  gboolean retval;
+  gchar *display_filename = g_filename_display_name (filename);
+  int save_errno;
+  
+  f = g_fopen (filename, "rb");
+  save_errno = errno;
+
+  if (f == NULL)
+    {
+      g_set_error (error,
+                   G_FILE_ERROR,
+                   g_file_error_from_errno (save_errno),
+                   _("Failed to open file '%s': %s"),
+                   display_filename,
+		   g_strerror (save_errno));
+      g_free (display_filename);
+
+      return FALSE;
+    }
+  
+  retval = get_contents_stdio (display_filename, f, contents, length, error);
+  g_free (display_filename);
+
+  return retval;
+}
+
+#endif
+
+/**
+ * g_file_get_contents:
+ * @filename: name of a file to read contents from, in the GLib file name encoding
+ * @contents: location to store an allocated string, use g_free() to free
+ *     the returned string
+ * @length: location to store length in bytes of the contents, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Reads an entire file into allocated memory, with good error
+ * checking.
+ *
+ * If the call was successful, it returns %TRUE and sets @contents to the file
+ * contents and @length to the length of the file contents in bytes. The string
+ * stored in @contents will be nul-terminated, so for text files you can pass
+ * %NULL for the @length argument. If the call was not successful, it returns
+ * %FALSE and sets @error. The error domain is #G_FILE_ERROR. Possible error
+ * codes are those in the #GFileError enumeration. In the error case,
+ * @contents is set to %NULL and @length is set to zero.
+ *
+ * Return value: %TRUE on success, %FALSE if an error occurred
+ **/
+gboolean
+g_file_get_contents (const gchar  *filename,
+                     gchar       **contents,
+                     gsize        *length,
+                     GError      **error)
+{  
+  g_return_val_if_fail (filename != NULL, FALSE);
+  g_return_val_if_fail (contents != NULL, FALSE);
+
+  *contents = NULL;
+  if (length)
+    *length = 0;
+
+#ifdef G_OS_WIN32
+  return get_contents_win32 (filename, contents, length, error);
+#else
+  return get_contents_posix (filename, contents, length, error);
+#endif
+}
+
+static gboolean
+rename_file (const char  *old_name,
+	     const char  *new_name,
+	     GError     **err)
+{
+  errno = 0;
+  if (g_rename (old_name, new_name) == -1)
+    {
+      int save_errno = errno;
+      gchar *display_old_name = g_filename_display_name (old_name);
+      gchar *display_new_name = g_filename_display_name (new_name);
+
+      g_set_error (err,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to rename file '%s' to '%s': g_rename() failed: %s"),
+		   display_old_name,
+		   display_new_name,
+		   g_strerror (save_errno));
+
+      g_free (display_old_name);
+      g_free (display_new_name);
+      
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static gchar *
+write_to_temp_file (const gchar  *contents,
+		    gssize        length,
+		    const gchar  *dest_file,
+		    GError      **err)
+{
+  gchar *tmp_name;
+  gchar *display_name;
+  gchar *retval;
+  FILE *file;
+  gint fd;
+  int save_errno;
+
+  retval = NULL;
+  
+  tmp_name = g_strdup_printf ("%s.XXXXXX", dest_file);
+
+  errno = 0;
+  fd = create_temp_file (tmp_name, 0666);
+  save_errno = errno;
+
+  display_name = g_filename_display_name (tmp_name);
+      
+  if (fd == -1)
+    {
+      g_set_error (err,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to create file '%s': %s"),
+		   display_name, g_strerror (save_errno));
+      
+      goto out;
+    }
+
+  errno = 0;
+  file = fdopen (fd, "wb");
+  if (!file)
+    {
+      save_errno = errno;
+      g_set_error (err,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to open file '%s' for writing: fdopen() failed: %s"),
+		   display_name,
+		   g_strerror (save_errno));
+
+      close (fd);
+      g_unlink (tmp_name);
+      
+      goto out;
+    }
+
+  if (length > 0)
+    {
+      gsize n_written;
+      
+      errno = 0;
+
+      n_written = fwrite (contents, 1, length, file);
+
+      if (n_written < length)
+	{
+	  save_errno = errno;
+      
+ 	  g_set_error (err,
+		       G_FILE_ERROR,
+		       g_file_error_from_errno (save_errno),
+		       _("Failed to write file '%s': fwrite() failed: %s"),
+		       display_name,
+		       g_strerror (save_errno));
+
+	  fclose (file);
+	  g_unlink (tmp_name);
+	  
+	  goto out;
+	}
+    }
+
+  errno = 0;
+  if (fflush (file) != 0)
+    { 
+      save_errno = errno;
+      
+      g_set_error (err,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to write file '%s': fflush() failed: %s"),
+		   display_name, 
+		   g_strerror (save_errno));
+
+      g_unlink (tmp_name);
+      
+      goto out;
+    }
+  
+#ifdef HAVE_FSYNC
+  errno = 0;
+  /* If the final destination exists, we want to sync the newly written
+   * file to ensure the data is on disk when we rename over the destination.
+   * otherwise if we get a system crash we can lose both the new and the
+   * old file on some filesystems. (I.E. those that don't guarantee the
+   * data is written to the disk before the metadata.)
+   */
+  if (g_file_test (dest_file, G_FILE_TEST_EXISTS) &&
+      fsync (fileno (file)) != 0)
+    { 
+      save_errno = errno;
+      
+      g_set_error (err,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to write file '%s': fsync() failed: %s"),
+		   display_name, 
+		   g_strerror (save_errno));
+
+      g_unlink (tmp_name);
+      
+      goto out;
+    }
+#endif
+  
+  errno = 0;
+  if (fclose (file) == EOF)
+    { 
+      save_errno = errno;
+      
+      g_set_error (err,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to close file '%s': fclose() failed: %s"),
+		   display_name, 
+		   g_strerror (save_errno));
+
+      g_unlink (tmp_name);
+      
+      goto out;
+    }
+
+  retval = g_strdup (tmp_name);
+  
+ out:
+  g_free (tmp_name);
+  g_free (display_name);
+  
+  return retval;
+}
+
+/**
+ * g_file_set_contents:
+ * @filename: name of a file to write @contents to, in the GLib file name
+ *   encoding
+ * @contents: string to write to the file
+ * @length: length of @contents, or -1 if @contents is a nul-terminated string
+ * @error: return location for a #GError, or %NULL
+ *
+ * Writes all of @contents to a file named @filename, with good error checking.
+ * If a file called @filename already exists it will be overwritten.
+ *
+ * This write is atomic in the sense that it is first written to a temporary
+ * file which is then renamed to the final name. Notes:
+ * <itemizedlist>
+ * <listitem>
+ *    On Unix, if @filename already exists hard links to @filename will break.
+ *    Also since the file is recreated, existing permissions, access control
+ *    lists, metadata etc. may be lost. If @filename is a symbolic link,
+ *    the link itself will be replaced, not the linked file.
+ * </listitem>
+ * <listitem>
+ *   On Windows renaming a file will not remove an existing file with the
+ *   new name, so on Windows there is a race condition between the existing
+ *   file being removed and the temporary file being renamed.
+ * </listitem>
+ * <listitem>
+ *   On Windows there is no way to remove a file that is open to some
+ *   process, or mapped into memory. Thus, this function will fail if
+ *   @filename already exists and is open.
+ * </listitem>
+ * </itemizedlist>
+ *
+ * If the call was sucessful, it returns %TRUE. If the call was not successful,
+ * it returns %FALSE and sets @error. The error domain is #G_FILE_ERROR.
+ * Possible error codes are those in the #GFileError enumeration.
+ *
+ * Return value: %TRUE on success, %FALSE if an error occurred
+ *
+ * Since: 2.8
+ **/
+gboolean
+g_file_set_contents (const gchar  *filename,
+		     const gchar  *contents,
+		     gssize	   length,
+		     GError	 **error)
+{
+  gchar *tmp_filename;
+  gboolean retval;
+  GError *rename_error = NULL;
+  
+  g_return_val_if_fail (filename != NULL, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+  g_return_val_if_fail (contents != NULL || length == 0, FALSE);
+  g_return_val_if_fail (length >= -1, FALSE);
+  
+  if (length == -1)
+    length = strlen (contents);
+
+  tmp_filename = write_to_temp_file (contents, length, filename, error);
+  
+  if (!tmp_filename)
+    {
+      retval = FALSE;
+      goto out;
+    }
+
+  if (!rename_file (tmp_filename, filename, &rename_error))
+    {
+#ifndef G_OS_WIN32
+
+      g_unlink (tmp_filename);
+      g_propagate_error (error, rename_error);
+      retval = FALSE;
+      goto out;
+
+#else /* G_OS_WIN32 */
+      
+      /* Renaming failed, but on Windows this may just mean
+       * the file already exists. So if the target file
+       * exists, try deleting it and do the rename again.
+       */
+      if (!g_file_test (filename, G_FILE_TEST_EXISTS))
+	{
+	  g_unlink (tmp_filename);
+	  g_propagate_error (error, rename_error);
+	  retval = FALSE;
+	  goto out;
+	}
+
+      g_error_free (rename_error);
+      
+      if (g_unlink (filename) == -1)
+	{
+          gchar *display_filename = g_filename_display_name (filename);
+
+	  int save_errno = errno;
+	  
+	  g_set_error (error,
+		       G_FILE_ERROR,
+		       g_file_error_from_errno (save_errno),
+		       _("Existing file '%s' could not be removed: g_unlink() failed: %s"),
+		       display_filename,
+		       g_strerror (save_errno));
+
+	  g_free (display_filename);
+	  g_unlink (tmp_filename);
+	  retval = FALSE;
+	  goto out;
+	}
+      
+      if (!rename_file (tmp_filename, filename, error))
+	{
+	  g_unlink (tmp_filename);
+	  retval = FALSE;
+	  goto out;
+	}
+
+#endif
+    }
+
+  retval = TRUE;
+  
+ out:
+  g_free (tmp_filename);
+  return retval;
+}
+
+/*
+ * create_temp_file based on the mkstemp implementation from the GNU C library.
+ * Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
+ */
+static gint
+create_temp_file (gchar *tmpl, 
+		  int    permissions)
+{
+  char *XXXXXX;
+  int count, fd;
+  static const char letters[] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+  static const int NLETTERS = sizeof (letters) - 1;
+  glong value;
+  GTimeVal tv;
+  static int counter = 0;
+
+  /* find the last occurrence of "XXXXXX" */
+  XXXXXX = g_strrstr (tmpl, "XXXXXX");
+
+  if (!XXXXXX || strncmp (XXXXXX, "XXXXXX", 6))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  /* Get some more or less random data.  */
+  g_get_current_time (&tv);
+  value = (tv.tv_usec ^ tv.tv_sec) + counter++;
+
+  for (count = 0; count < 100; value += 7777, ++count)
+    {
+      glong v = value;
+
+      /* Fill in the random bits.  */
+      XXXXXX[0] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[1] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[2] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[3] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[4] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[5] = letters[v % NLETTERS];
+
+      /* tmpl is in UTF-8 on Windows, thus use g_open() */
+      fd = g_open (tmpl, O_RDWR | O_CREAT | O_EXCL | O_BINARY, permissions);
+
+      if (fd >= 0)
+	return fd;
+      else if (errno != EEXIST)
+	/* Any other error will apply also to other names we might
+	 *  try, and there are 2^32 or so of them, so give up now.
+	 */
+	return -1;
+    }
+
+  /* We got out of the loop because we ran out of combinations to try.  */
+  errno = EEXIST;
+  return -1;
+}
+
+/**
+ * g_mkstemp:
+ * @tmpl: template filename
+ *
+ * Opens a temporary file. See the mkstemp() documentation
+ * on most UNIX-like systems. 
+ *
+ * The parameter is a string that should follow the rules for
+ * mkstemp() templates, i.e. contain the string "XXXXXX". 
+ * g_mkstemp() is slightly more flexible than mkstemp()
+ * in that the sequence does not have to occur at the very end of the 
+ * template. The X string will 
+ * be modified to form the name of a file that didn't exist.
+ * The string should be in the GLib file name encoding. Most importantly, 
+ * on Windows it should be in UTF-8.
+ *
+ * Return value: A file handle (as from open()) to the file
+ * opened for reading and writing. The file is opened in binary mode
+ * on platforms where there is a difference. The file handle should be
+ * closed with close(). In case of errors, -1 is returned.  
+ */ 
+gint
+g_mkstemp (gchar *tmpl)
+{
+  return create_temp_file (tmpl, 0600);
+}
+
+/**
+ * g_file_open_tmp:
+ * @tmpl: Template for file name, as in g_mkstemp(), basename only,
+ *        or %NULL, to a default template
+ * @name_used: location to store actual name used, or %NULL
+ * @error: return location for a #GError
+ *
+ * Opens a file for writing in the preferred directory for temporary
+ * files (as returned by g_get_tmp_dir()). 
+ *
+ * @tmpl should be a string in the GLib file name encoding containing 
+ * a sequence of six 'X' characters, as the parameter to g_mkstemp().
+ * However, unlike these functions, the template should only be a
+ * basename, no directory components are allowed. If template is
+ * %NULL, a default template is used.
+ *
+ * Note that in contrast to g_mkstemp() (and mkstemp()) 
+ * @tmpl is not modified, and might thus be a read-only literal string.
+ *
+ * The actual name used is returned in @name_used if non-%NULL. This
+ * string should be freed with g_free() when not needed any longer.
+ * The returned name is in the GLib file name encoding.
+ *
+ * Return value: A file handle (as from open()) to 
+ * the file opened for reading and writing. The file is opened in binary 
+ * mode on platforms where there is a difference. The file handle should be
+ * closed with close(). In case of errors, -1 is returned 
+ * and @error will be set.
+ **/
+gint
+g_file_open_tmp (const gchar  *tmpl,
+		 gchar       **name_used,
+		 GError      **error)
+{
+  int retval;
+  const char *tmpdir;
+  const char *sep;
+  char *fulltemplate;
+  const char *slash;
+
+  if (tmpl == NULL)
+    tmpl = ".XXXXXX";
+
+  if ((slash = strchr (tmpl, G_DIR_SEPARATOR)) != NULL
+#ifdef G_OS_WIN32
+      || (strchr (tmpl, '/') != NULL && (slash = "/"))
+#endif
+      )
+    {
+      gchar *display_tmpl = g_filename_display_name (tmpl);
+      char c[2];
+      c[0] = *slash;
+      c[1] = '\0';
+
+      g_set_error (error,
+		   G_FILE_ERROR,
+		   G_FILE_ERROR_FAILED,
+		   _("Template '%s' invalid, should not contain a '%s'"),
+		   display_tmpl, c);
+      g_free (display_tmpl);
+
+      return -1;
+    }
+  
+  if (strstr (tmpl, "XXXXXX") == NULL)
+    {
+      gchar *display_tmpl = g_filename_display_name (tmpl);
+      g_set_error (error,
+		   G_FILE_ERROR,
+		   G_FILE_ERROR_FAILED,
+		   _("Template '%s' doesn't contain XXXXXX"),
+		   display_tmpl);
+      g_free (display_tmpl);
+      return -1;
+    }
+
+  tmpdir = g_get_tmp_dir ();
+
+  if (G_IS_DIR_SEPARATOR (tmpdir [strlen (tmpdir) - 1]))
+    sep = "";
+  else
+    sep = G_DIR_SEPARATOR_S;
+
+  fulltemplate = g_strconcat (tmpdir, sep, tmpl, NULL);
+
+  retval = g_mkstemp (fulltemplate);
+
+  if (retval == -1)
+    {
+      int save_errno = errno;
+      gchar *display_fulltemplate = g_filename_display_name (fulltemplate);
+
+      g_set_error (error,
+		   G_FILE_ERROR,
+		   g_file_error_from_errno (save_errno),
+		   _("Failed to create file '%s': %s"),
+		   display_fulltemplate, g_strerror (save_errno));
+      g_free (display_fulltemplate);
+      g_free (fulltemplate);
+      return -1;
+    }
+
+  if (name_used)
+    *name_used = fulltemplate;
+  else
+    g_free (fulltemplate);
+
+  return retval;
+}
+
+static gchar *
+g_build_path_va (const gchar  *separator,
+		 const gchar  *first_element,
+		 va_list      *args,
+		 gchar       **str_array)
+{
+  GString *result;
+  gint separator_len = strlen (separator);
+  gboolean is_first = TRUE;
+  gboolean have_leading = FALSE;
+  const gchar *single_element = NULL;
+  const gchar *next_element;
+  const gchar *last_trailing = NULL;
+  gint i = 0;
+
+  result = g_string_new (NULL);
+
+  if (str_array)
+    next_element = str_array[i++];
+  else
+    next_element = first_element;
+
+  while (TRUE)
+    {
+      const gchar *element;
+      const gchar *start;
+      const gchar *end;
+
+      if (next_element)
+	{
+	  element = next_element;
+	  if (str_array)
+	    next_element = str_array[i++];
+	  else
+	    next_element = va_arg (*args, gchar *);
+	}
+      else
+	break;
+
+      /* Ignore empty elements */
+      if (!*element)
+	continue;
+      
+      start = element;
+
+      if (separator_len)
+	{
+	  while (start &&
+		 strncmp (start, separator, separator_len) == 0)
+	    start += separator_len;
+      	}
+
+      end = start + strlen (start);
+      
+      if (separator_len)
+	{
+	  while (end >= start + separator_len &&
+		 strncmp (end - separator_len, separator, separator_len) == 0)
+	    end -= separator_len;
+	  
+	  last_trailing = end;
+	  while (last_trailing >= element + separator_len &&
+		 strncmp (last_trailing - separator_len, separator, separator_len) == 0)
+	    last_trailing -= separator_len;
+
+	  if (!have_leading)
+	    {
+	      /* If the leading and trailing separator strings are in the
+	       * same element and overlap, the result is exactly that element
+	       */
+	      if (last_trailing <= start)
+		single_element = element;
+		  
+	      g_string_append_len (result, element, start - element);
+	      have_leading = TRUE;
+	    }
+	  else
+	    single_element = NULL;
+	}
+
+      if (end == start)
+	continue;
+
+      if (!is_first)
+	g_string_append (result, separator);
+      
+      g_string_append_len (result, start, end - start);
+      is_first = FALSE;
+    }
+
+  if (single_element)
+    {
+      g_string_free (result, TRUE);
+      return g_strdup (single_element);
+    }
+  else
+    {
+      if (last_trailing)
+	g_string_append (result, last_trailing);
+  
+      return g_string_free (result, FALSE);
+    }
+}
+
+/**
+ * g_build_pathv:
+ * @separator: a string used to separator the elements of the path.
+ * @args: %NULL-terminated array of strings containing the path elements.
+ * 
+ * Behaves exactly like g_build_path(), but takes the path elements 
+ * as a string array, instead of varargs. This function is mainly
+ * meant for language bindings.
+ *
+ * Return value: a newly-allocated string that must be freed with g_free().
+ *
+ * Since: 2.8
+ */
+gchar *
+g_build_pathv (const gchar  *separator,
+	       gchar       **args)
+{
+  if (!args)
+    return NULL;
+
+  return g_build_path_va (separator, NULL, NULL, args);
+}
+
+
+/**
+ * g_build_path:
+ * @separator: a string used to separator the elements of the path.
+ * @first_element: the first element in the path
+ * @Varargs: remaining elements in path, terminated by %NULL
+ * 
+ * Creates a path from a series of elements using @separator as the
+ * separator between elements. At the boundary between two elements,
+ * any trailing occurrences of separator in the first element, or
+ * leading occurrences of separator in the second element are removed
+ * and exactly one copy of the separator is inserted.
+ *
+ * Empty elements are ignored.
+ *
+ * The number of leading copies of the separator on the result is
+ * the same as the number of leading copies of the separator on
+ * the first non-empty element.
+ *
+ * The number of trailing copies of the separator on the result is
+ * the same as the number of trailing copies of the separator on
+ * the last non-empty element. (Determination of the number of
+ * trailing copies is done without stripping leading copies, so
+ * if the separator is <literal>ABA</literal>, <literal>ABABA</literal>
+ * has 1 trailing copy.)
+ *
+ * However, if there is only a single non-empty element, and there
+ * are no characters in that element not part of the leading or
+ * trailing separators, then the result is exactly the original value
+ * of that element.
+ *
+ * Other than for determination of the number of leading and trailing
+ * copies of the separator, elements consisting only of copies
+ * of the separator are ignored.
+ * 
+ * Return value: a newly-allocated string that must be freed with g_free().
+ **/
+gchar *
+g_build_path (const gchar *separator,
+	      const gchar *first_element,
+	      ...)
+{
+  gchar *str;
+  va_list args;
+
+  g_return_val_if_fail (separator != NULL, NULL);
+
+  va_start (args, first_element);
+  str = g_build_path_va (separator, first_element, &args, NULL);
+  va_end (args);
+
+  return str;
+}
+
+#ifdef G_OS_WIN32
+
+static gchar *
+g_build_pathname_va (const gchar  *first_element,
+		     va_list      *args,
+		     gchar       **str_array)
+{
+  /* Code copied from g_build_pathv(), and modified to use two
+   * alternative single-character separators.
+   */
+  GString *result;
+  gboolean is_first = TRUE;
+  gboolean have_leading = FALSE;
+  const gchar *single_element = NULL;
+  const gchar *next_element;
+  const gchar *last_trailing = NULL;
+  gchar current_separator = '\\';
+  gint i = 0;
+
+  result = g_string_new (NULL);
+
+  if (str_array)
+    next_element = str_array[i++];
+  else
+    next_element = first_element;
+  
+  while (TRUE)
+    {
+      const gchar *element;
+      const gchar *start;
+      const gchar *end;
+
+      if (next_element)
+	{
+	  element = next_element;
+	  if (str_array)
+	    next_element = str_array[i++];
+	  else
+	    next_element = va_arg (*args, gchar *);
+	}
+      else
+	break;
+
+      /* Ignore empty elements */
+      if (!*element)
+	continue;
+      
+      start = element;
+
+      if (TRUE)
+	{
+	  while (start &&
+		 (*start == '\\' || *start == '/'))
+	    {
+	      current_separator = *start;
+	      start++;
+	    }
+	}
+
+      end = start + strlen (start);
+      
+      if (TRUE)
+	{
+	  while (end >= start + 1 &&
+		 (end[-1] == '\\' || end[-1] == '/'))
+	    {
+	      current_separator = end[-1];
+	      end--;
+	    }
+	  
+	  last_trailing = end;
+	  while (last_trailing >= element + 1 &&
+		 (last_trailing[-1] == '\\' || last_trailing[-1] == '/'))
+	    last_trailing--;
+
+	  if (!have_leading)
+	    {
+	      /* If the leading and trailing separator strings are in the
+	       * same element and overlap, the result is exactly that element
+	       */
+	      if (last_trailing <= start)
+		single_element = element;
+		  
+	      g_string_append_len (result, element, start - element);
+	      have_leading = TRUE;
+	    }
+	  else
+	    single_element = NULL;
+	}
+
+      if (end == start)
+	continue;
+
+      if (!is_first)
+	g_string_append_len (result, &current_separator, 1);
+      
+      g_string_append_len (result, start, end - start);
+      is_first = FALSE;
+    }
+
+  if (single_element)
+    {
+      g_string_free (result, TRUE);
+      return g_strdup (single_element);
+    }
+  else
+    {
+      if (last_trailing)
+	g_string_append (result, last_trailing);
+  
+      return g_string_free (result, FALSE);
+    }
+}
+
+#endif
+
+/**
+ * g_build_filenamev:
+ * @args: %NULL-terminated array of strings containing the path elements.
+ * 
+ * Behaves exactly like g_build_filename(), but takes the path elements 
+ * as a string array, instead of varargs. This function is mainly
+ * meant for language bindings.
+ *
+ * Return value: a newly-allocated string that must be freed with g_free().
+ * 
+ * Since: 2.8
+ */
+gchar *
+g_build_filenamev (gchar **args)
+{
+  gchar *str;
+
+#ifndef G_OS_WIN32
+  str = g_build_path_va (G_DIR_SEPARATOR_S, NULL, NULL, args);
+#else
+  str = g_build_pathname_va (NULL, NULL, args);
+#endif
+
+  return str;
+}
+
+/**
+ * g_build_filename:
+ * @first_element: the first element in the path
+ * @Varargs: remaining elements in path, terminated by %NULL
+ * 
+ * Creates a filename from a series of elements using the correct
+ * separator for filenames.
+ *
+ * On Unix, this function behaves identically to <literal>g_build_path
+ * (G_DIR_SEPARATOR_S, first_element, ....)</literal>.
+ *
+ * On Windows, it takes into account that either the backslash
+ * (<literal>\</literal> or slash (<literal>/</literal>) can be used
+ * as separator in filenames, but otherwise behaves as on Unix. When
+ * file pathname separators need to be inserted, the one that last
+ * previously occurred in the parameters (reading from left to right)
+ * is used.
+ *
+ * No attempt is made to force the resulting filename to be an absolute
+ * path. If the first element is a relative path, the result will
+ * be a relative path. 
+ * 
+ * Return value: a newly-allocated string that must be freed with g_free().
+ **/
+gchar *
+g_build_filename (const gchar *first_element, 
+		  ...)
+{
+  gchar *str;
+  va_list args;
+
+  va_start (args, first_element);
+#ifndef G_OS_WIN32
+  str = g_build_path_va (G_DIR_SEPARATOR_S, first_element, &args, NULL);
+#else
+  str = g_build_pathname_va (first_element, &args, NULL);
+#endif
+  va_end (args);
+
+  return str;
+}
+
+#define KILOBYTE_FACTOR 1024.0
+#define MEGABYTE_FACTOR (1024.0 * 1024.0)
+#define GIGABYTE_FACTOR (1024.0 * 1024.0 * 1024.0)
+
+/**
+ * g_format_size_for_display:
+ * @size: a size in bytes.
+ * 
+ * Formats a size (for example the size of a file) into a human readable string.
+ * Sizes are rounded to the nearest size prefix (KB, MB, GB) and are displayed 
+ * rounded to the nearest  tenth. E.g. the file size 3292528 bytes will be
+ * converted into the string "3.1 MB".
+ *
+ * The prefix units base is 1024 (i.e. 1 KB is 1024 bytes).
+ *
+ * This string should be freed with g_free() when not needed any longer.
+ *
+ * Returns: a newly-allocated formatted string containing a human readable
+ *          file size.
+ *
+ * Since: 2.16
+ **/
+char *
+g_format_size_for_display (goffset size)
+{
+  if (size < (goffset) KILOBYTE_FACTOR)
+    return g_strdup_printf (g_dngettext(GETTEXT_PACKAGE, "%u byte", "%u bytes",(guint) size), (guint) size);
+  else
+    {
+      gdouble displayed_size;
+      
+      if (size < (goffset) MEGABYTE_FACTOR)
+	{
+	  displayed_size = (gdouble) size / KILOBYTE_FACTOR;
+	  return g_strdup_printf (_("%.1f KB"), displayed_size);
+	}
+      else if (size < (goffset) GIGABYTE_FACTOR)
+	{
+	  displayed_size = (gdouble) size / MEGABYTE_FACTOR;
+	  return g_strdup_printf (_("%.1f MB"), displayed_size);
+	}
+      else
+	{
+	  displayed_size = (gdouble) size / GIGABYTE_FACTOR;
+	  return g_strdup_printf (_("%.1f GB"), displayed_size);
+	}
+    }
+}
+
+
+/**
+ * g_file_read_link:
+ * @filename: the symbolic link
+ * @error: return location for a #GError
+ *
+ * Reads the contents of the symbolic link @filename like the POSIX
+ * readlink() function.  The returned string is in the encoding used
+ * for filenames. Use g_filename_to_utf8() to convert it to UTF-8.
+ *
+ * Returns: A newly-allocated string with the contents of the symbolic link, 
+ *          or %NULL if an error occurred.
+ *
+ * Since: 2.4
+ */
+gchar *
+g_file_read_link (const gchar  *filename,
+	          GError      **error)
+{
+#ifdef HAVE_READLINK
+  gchar *buffer;
+  guint size;
+  gint read_size;    
+  
+  size = 256; 
+  buffer = g_malloc (size);
+  
+  while (TRUE) 
+    {
+      read_size = readlink (filename, buffer, size);
+      if (read_size < 0) {
+	int save_errno = errno;
+	gchar *display_filename = g_filename_display_name (filename);
+
+	g_free (buffer);
+	g_set_error (error,
+		     G_FILE_ERROR,
+		     g_file_error_from_errno (save_errno),
+		     _("Failed to read the symbolic link '%s': %s"),
+		     display_filename, 
+		     g_strerror (save_errno));
+	g_free (display_filename);
+	
+	return NULL;
+      }
+    
+      if (read_size < size) 
+	{
+	  buffer[read_size] = 0;
+	  return buffer;
+	}
+      
+      size *= 2;
+      buffer = g_realloc (buffer, size);
+    }
+#else
+  g_set_error_literal (error,
+                       G_FILE_ERROR,
+                       G_FILE_ERROR_INVAL,
+                       _("Symbolic links not supported"));
+	
+  return NULL;
+#endif
+}
+
+/* NOTE : Keep this part last to ensure nothing in this file uses the
+ * below binary compatibility versions.
+ */
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+/* Binary compatibility versions. Will be called by code compiled
+ * against quite old (pre-2.8, I think) headers only, not from more
+ * recently compiled code.
+ */
+
+#undef g_file_test
+
+gboolean
+g_file_test (const gchar *filename,
+             GFileTest    test)
+{
+  gchar *utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, NULL);
+  gboolean retval;
+
+  if (utf8_filename == NULL)
+    return FALSE;
+
+  retval = g_file_test_utf8 (utf8_filename, test);
+
+  g_free (utf8_filename);
+
+  return retval;
+}
+
+#undef g_file_get_contents
+
+gboolean
+g_file_get_contents (const gchar  *filename,
+                     gchar       **contents,
+                     gsize        *length,
+                     GError      **error)
+{
+  gchar *utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, error);
+  gboolean retval;
+
+  if (utf8_filename == NULL)
+    return FALSE;
+
+  retval = g_file_get_contents_utf8 (utf8_filename, contents, length, error);
+
+  g_free (utf8_filename);
+
+  return retval;
+}
+
+#undef g_mkstemp
+
+gint
+g_mkstemp (gchar *tmpl)
+{
+  char *XXXXXX;
+  int count, fd;
+  static const char letters[] =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+  static const int NLETTERS = sizeof (letters) - 1;
+  glong value;
+  GTimeVal tv;
+  static int counter = 0;
+
+  /* find the last occurrence of 'XXXXXX' */
+  XXXXXX = g_strrstr (tmpl, "XXXXXX");
+
+  if (!XXXXXX)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  /* Get some more or less random data.  */
+  g_get_current_time (&tv);
+  value = (tv.tv_usec ^ tv.tv_sec) + counter++;
+
+  for (count = 0; count < 100; value += 7777, ++count)
+    {
+      glong v = value;
+
+      /* Fill in the random bits.  */
+      XXXXXX[0] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[1] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[2] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[3] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[4] = letters[v % NLETTERS];
+      v /= NLETTERS;
+      XXXXXX[5] = letters[v % NLETTERS];
+
+      /* This is the backward compatibility system codepage version,
+       * thus use normal open().
+       */
+      fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL | O_BINARY, 0600);
+
+      if (fd >= 0)
+	return fd;
+      else if (errno != EEXIST)
+	/* Any other error will apply also to other names we might
+	 *  try, and there are 2^32 or so of them, so give up now.
+	 */
+	return -1;
+    }
+
+  /* We got out of the loop because we ran out of combinations to try.  */
+  errno = EEXIST;
+  return -1;
+}
+
+#undef g_file_open_tmp
+
+gint
+g_file_open_tmp (const gchar  *tmpl,
+		 gchar       **name_used,
+		 GError      **error)
+{
+  gchar *utf8_tmpl = g_locale_to_utf8 (tmpl, -1, NULL, NULL, error);
+  gchar *utf8_name_used;
+  gint retval;
+
+  if (utf8_tmpl == NULL)
+    return -1;
+
+  retval = g_file_open_tmp_utf8 (utf8_tmpl, &utf8_name_used, error);
+  
+  if (retval == -1)
+    return -1;
+
+  if (name_used)
+    *name_used = g_locale_from_utf8 (utf8_name_used, -1, NULL, NULL, NULL);
+
+  g_free (utf8_name_used);
+
+  return retval;
+}
+
+#endif
+
+#define __G_FILEUTILS_C__
+#include "galiasdef.c"
diff --git a/glib/gfileutils.h b/glib/gfileutils.h
new file mode 100644
index 0000000..9a4b2af
--- /dev/null
+++ b/glib/gfileutils.h
@@ -0,0 +1,125 @@
+/* gfileutils.h - File utility functions
+ *
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_FILEUTILS_H__
+#define __G_FILEUTILS_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+#define G_FILE_ERROR g_file_error_quark ()
+
+typedef enum
+{
+  G_FILE_ERROR_EXIST,
+  G_FILE_ERROR_ISDIR,
+  G_FILE_ERROR_ACCES,
+  G_FILE_ERROR_NAMETOOLONG,
+  G_FILE_ERROR_NOENT,
+  G_FILE_ERROR_NOTDIR,
+  G_FILE_ERROR_NXIO,
+  G_FILE_ERROR_NODEV,
+  G_FILE_ERROR_ROFS,
+  G_FILE_ERROR_TXTBSY,
+  G_FILE_ERROR_FAULT,
+  G_FILE_ERROR_LOOP,
+  G_FILE_ERROR_NOSPC,
+  G_FILE_ERROR_NOMEM,
+  G_FILE_ERROR_MFILE,
+  G_FILE_ERROR_NFILE,
+  G_FILE_ERROR_BADF,
+  G_FILE_ERROR_INVAL,
+  G_FILE_ERROR_PIPE,
+  G_FILE_ERROR_AGAIN,
+  G_FILE_ERROR_INTR,
+  G_FILE_ERROR_IO,
+  G_FILE_ERROR_PERM,
+  G_FILE_ERROR_NOSYS,
+  G_FILE_ERROR_FAILED
+} GFileError;
+
+/* For backward-compat reasons, these are synced to an old 
+ * anonymous enum in libgnome. But don't use that enum
+ * in new code.
+ */
+typedef enum
+{
+  G_FILE_TEST_IS_REGULAR    = 1 << 0,
+  G_FILE_TEST_IS_SYMLINK    = 1 << 1,
+  G_FILE_TEST_IS_DIR        = 1 << 2,
+  G_FILE_TEST_IS_EXECUTABLE = 1 << 3,
+  G_FILE_TEST_EXISTS        = 1 << 4
+} GFileTest;
+
+GQuark     g_file_error_quark      (void);
+/* So other code can generate a GFileError */
+GFileError g_file_error_from_errno (gint err_no);
+
+#ifdef G_OS_WIN32
+#define g_file_test g_file_test_utf8
+#define g_file_get_contents g_file_get_contents_utf8
+#define g_mkstemp g_mkstemp_utf8
+#define g_file_open_tmp g_file_open_tmp_utf8
+#endif
+
+gboolean g_file_test         (const gchar  *filename,
+                              GFileTest     test);
+gboolean g_file_get_contents (const gchar  *filename,
+                              gchar       **contents,
+                              gsize        *length,    
+                              GError      **error);
+gboolean g_file_set_contents (const gchar *filename,
+			      const gchar *contents,
+			      gssize	     length,
+			      GError	   **error);
+gchar   *g_file_read_link    (const gchar  *filename,
+			      GError      **error);
+
+/* Wrapper / workalike for mkstemp() */
+gint    g_mkstemp            (gchar        *tmpl);
+
+/* Wrapper for g_mkstemp */
+gint    g_file_open_tmp      (const gchar  *tmpl,
+			      gchar       **name_used,
+			      GError      **error);
+
+char *g_format_size_for_display (goffset size);
+
+gchar *g_build_path     (const gchar *separator,
+			 const gchar *first_element,
+			 ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+gchar *g_build_pathv    (const gchar  *separator,
+			 gchar       **args) G_GNUC_MALLOC;
+
+gchar *g_build_filename (const gchar *first_element,
+			 ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+gchar *g_build_filenamev (gchar      **args) G_GNUC_MALLOC;
+
+int    g_mkdir_with_parents (const gchar *pathname,
+			     int          mode);
+
+G_END_DECLS
+
+#endif /* __G_FILEUTILS_H__ */
diff --git a/glib/ghash.c b/glib/ghash.c
new file mode 100644
index 0000000..ba33266
--- /dev/null
+++ b/glib/ghash.c
@@ -0,0 +1,1346 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>  /* memset */
+
+#include "glib.h"
+#include "galias.h"
+
+#define HASH_TABLE_MIN_SHIFT 3  /* 1 << 3 == 8 buckets */
+
+typedef struct _GHashNode      GHashNode;
+
+struct _GHashNode
+{
+  gpointer   key;
+  gpointer   value;
+
+  /* If key_hash == 0, node is not in use
+   * If key_hash == 1, node is a tombstone
+   * If key_hash >= 2, node contains data */
+  guint      key_hash;
+};
+
+struct _GHashTable
+{
+  gint             size;
+  gint             mod;
+  guint            mask;
+  gint             nnodes;
+  gint             noccupied;  /* nnodes + tombstones */
+  GHashNode       *nodes;
+  GHashFunc        hash_func;
+  GEqualFunc       key_equal_func;
+  volatile gint    ref_count;
+#ifndef G_DISABLE_ASSERT
+  /*
+   * Tracks the structure of the hash table, not its contents: is only
+   * incremented when a node is added or removed (is not incremented
+   * when the key or data of a node is modified).
+   */
+  int              version;
+#endif
+  GDestroyNotify   key_destroy_func;
+  GDestroyNotify   value_destroy_func;
+};
+
+typedef struct
+{
+  GHashTable  *hash_table;
+  gpointer     dummy1;
+  gpointer     dummy2;
+  int          position;
+  gboolean     dummy3;
+  int          version;
+} RealIter;
+
+/* Each table size has an associated prime modulo (the first prime
+ * lower than the table size) used to find the initial bucket. Probing
+ * then works modulo 2^n. The prime modulo is necessary to get a
+ * good distribution with poor hash functions. */
+static const gint prime_mod [] =
+{
+  1,          /* For 1 << 0 */
+  2,
+  3,
+  7,
+  13,
+  31,
+  61,
+  127,
+  251,
+  509,
+  1021,
+  2039,
+  4093,
+  8191,
+  16381,
+  32749,
+  65521,      /* For 1 << 16 */
+  131071,
+  262139,
+  524287,
+  1048573,
+  2097143,
+  4194301,
+  8388593,
+  16777213,
+  33554393,
+  67108859,
+  134217689,
+  268435399,
+  536870909,
+  1073741789,
+  2147483647  /* For 1 << 31 */
+};
+
+static void
+g_hash_table_set_shift (GHashTable *hash_table, gint shift)
+{
+  gint i;
+  guint mask = 0;
+
+  hash_table->size = 1 << shift;
+  hash_table->mod  = prime_mod [shift];
+
+  for (i = 0; i < shift; i++)
+    {
+      mask <<= 1;
+      mask |= 1;
+    }
+
+  hash_table->mask = mask;
+}
+
+static gint
+g_hash_table_find_closest_shift (gint n)
+{
+  gint i;
+
+  for (i = 0; n; i++)
+    n >>= 1;
+
+  return i;
+}
+
+static void
+g_hash_table_set_shift_from_size (GHashTable *hash_table, gint size)
+{
+  gint shift;
+
+  shift = g_hash_table_find_closest_shift (size);
+  shift = MAX (shift, HASH_TABLE_MIN_SHIFT);
+
+  g_hash_table_set_shift (hash_table, shift);
+}
+
+/*
+ * g_hash_table_lookup_node:
+ * @hash_table: our #GHashTable
+ * @key: the key to lookup against
+ * @hash_return: optional key hash return location
+ * Return value: index of the described #GHashNode
+ *
+ * Performs a lookup in the hash table.  Virtually all hash operations
+ * will use this function internally.
+ *
+ * This function first computes the hash value of the key using the
+ * user's hash function.
+ *
+ * If an entry in the table matching @key is found then this function
+ * returns the index of that entry in the table, and if not, the
+ * index of an empty node (never a tombstone).
+ */
+static inline guint
+g_hash_table_lookup_node (GHashTable    *hash_table,
+                          gconstpointer  key)
+{
+  GHashNode *node;
+  guint node_index;
+  guint hash_value;
+  guint step = 0;
+
+  /* Empty buckets have hash_value set to 0, and for tombstones, it's 1.
+   * We need to make sure our hash value is not one of these. */
+
+  hash_value = (* hash_table->hash_func) (key);
+  if (G_UNLIKELY (hash_value <= 1))
+    hash_value = 2;
+
+  node_index = hash_value % hash_table->mod;
+  node = &hash_table->nodes [node_index];
+
+  while (node->key_hash)
+    {
+      /*  We first check if our full hash values
+       *  are equal so we can avoid calling the full-blown
+       *  key equality function in most cases.
+       */
+
+      if (node->key_hash == hash_value)
+        {
+          if (hash_table->key_equal_func)
+            {
+              if (hash_table->key_equal_func (node->key, key))
+                break;
+            }
+          else if (node->key == key)
+            {
+              break;
+            }
+        }
+
+      step++;
+      node_index += step;
+      node_index &= hash_table->mask;
+      node = &hash_table->nodes [node_index];
+    }
+
+  return node_index;
+}
+
+/*
+ * g_hash_table_lookup_node_for_insertion:
+ * @hash_table: our #GHashTable
+ * @key: the key to lookup against
+ * @hash_return: key hash return location
+ * Return value: index of the described #GHashNode
+ *
+ * Performs a lookup in the hash table, preserving extra information
+ * usually needed for insertion.
+ *
+ * This function first computes the hash value of the key using the
+ * user's hash function.
+ *
+ * If an entry in the table matching @key is found then this function
+ * returns the index of that entry in the table, and if not, the
+ * index of an unused node (empty or tombstone) where the key can be
+ * inserted.
+ *
+ * The computed hash value is returned in the variable pointed to
+ * by @hash_return. This is to save insertions from having to compute
+ * the hash record again for the new record.
+ */
+static inline guint
+g_hash_table_lookup_node_for_insertion (GHashTable    *hash_table,
+                                        gconstpointer  key,
+                                        guint         *hash_return)
+{
+  GHashNode *node;
+  guint node_index;
+  guint hash_value;
+  guint first_tombstone;
+  gboolean have_tombstone = FALSE;
+  guint step = 0;
+
+  /* Empty buckets have hash_value set to 0, and for tombstones, it's 1.
+   * We need to make sure our hash value is not one of these. */
+
+  hash_value = (* hash_table->hash_func) (key);
+  if (G_UNLIKELY (hash_value <= 1))
+    hash_value = 2;
+
+  *hash_return = hash_value;
+
+  node_index = hash_value % hash_table->mod;
+  node = &hash_table->nodes [node_index];
+
+  while (node->key_hash)
+    {
+      /*  We first check if our full hash values
+       *  are equal so we can avoid calling the full-blown
+       *  key equality function in most cases.
+       */
+
+      if (node->key_hash == hash_value)
+        {
+          if (hash_table->key_equal_func)
+            {
+              if (hash_table->key_equal_func (node->key, key))
+                return node_index;
+            }
+          else if (node->key == key)
+            {
+              return node_index;
+            }
+        }
+      else if (node->key_hash == 1 && !have_tombstone)
+        {
+          first_tombstone = node_index;
+          have_tombstone = TRUE;
+        }
+
+      step++;
+      node_index += step;
+      node_index &= hash_table->mask;
+      node = &hash_table->nodes [node_index];
+    }
+
+  if (have_tombstone)
+    return first_tombstone;
+
+  return node_index;
+}
+
+/*
+ * g_hash_table_remove_node:
+ * @hash_table: our #GHashTable
+ * @node: pointer to node to remove
+ * @notify: %TRUE if the destroy notify handlers are to be called
+ *
+ * Removes a node from the hash table and updates the node count.
+ * The node is replaced by a tombstone. No table resize is performed.
+ *
+ * If @notify is %TRUE then the destroy notify functions are called
+ * for the key and value of the hash node.
+ */
+static void
+g_hash_table_remove_node (GHashTable   *hash_table,
+                          GHashNode    *node,
+                          gboolean      notify)
+{
+  if (notify && hash_table->key_destroy_func)
+    hash_table->key_destroy_func (node->key);
+
+  if (notify && hash_table->value_destroy_func)
+    hash_table->value_destroy_func (node->value);
+
+  /* Erect tombstone */
+  node->key_hash = 1;
+
+  /* Be GC friendly */
+  node->key = NULL;
+  node->value = NULL;
+
+  hash_table->nnodes--;
+}
+
+/*
+ * g_hash_table_remove_all_nodes:
+ * @hash_table: our #GHashTable
+ * @notify: %TRUE if the destroy notify handlers are to be called
+ *
+ * Removes all nodes from the table.  Since this may be a precursor to
+ * freeing the table entirely, no resize is performed.
+ *
+ * If @notify is %TRUE then the destroy notify functions are called
+ * for the key and value of the hash node.
+ */
+static void
+g_hash_table_remove_all_nodes (GHashTable *hash_table,
+                               gboolean    notify)
+{
+  int i;
+
+  for (i = 0; i < hash_table->size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+
+      if (node->key_hash > 1)
+        {
+          if (notify && hash_table->key_destroy_func)
+            hash_table->key_destroy_func (node->key);
+
+          if (notify && hash_table->value_destroy_func)
+            hash_table->value_destroy_func (node->value);
+        }
+    }
+
+  /* We need to set node->key_hash = 0 for all nodes - might as well be GC
+   * friendly and clear everything */
+  memset (hash_table->nodes, 0, hash_table->size * sizeof (GHashNode));
+
+  hash_table->nnodes = 0;
+  hash_table->noccupied = 0;
+}
+
+/*
+ * g_hash_table_resize:
+ * @hash_table: our #GHashTable
+ *
+ * Resizes the hash table to the optimal size based on the number of
+ * nodes currently held.  If you call this function then a resize will
+ * occur, even if one does not need to occur.  Use
+ * g_hash_table_maybe_resize() instead.
+ *
+ * This function may "resize" the hash table to its current size, with
+ * the side effect of cleaning up tombstones and otherwise optimizing
+ * the probe sequences.
+ */
+static void
+g_hash_table_resize (GHashTable *hash_table)
+{
+  GHashNode *new_nodes;
+  gint old_size;
+  gint i;
+
+  old_size = hash_table->size;
+  g_hash_table_set_shift_from_size (hash_table, hash_table->nnodes * 2);
+
+  new_nodes = g_new0 (GHashNode, hash_table->size);
+
+  for (i = 0; i < old_size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+      GHashNode *new_node;
+      guint hash_val;
+      guint step = 0;
+
+      if (node->key_hash <= 1)
+        continue;
+
+      hash_val = node->key_hash % hash_table->mod;
+      new_node = &new_nodes [hash_val];
+
+      while (new_node->key_hash)
+        {
+          step++;
+          hash_val += step;
+          hash_val &= hash_table->mask;
+          new_node = &new_nodes [hash_val];
+        }
+
+      *new_node = *node;
+    }
+
+  g_free (hash_table->nodes);
+  hash_table->nodes = new_nodes;
+  hash_table->noccupied = hash_table->nnodes;
+}
+
+/*
+ * g_hash_table_maybe_resize:
+ * @hash_table: our #GHashTable
+ *
+ * Resizes the hash table, if needed.
+ *
+ * Essentially, calls g_hash_table_resize() if the table has strayed
+ * too far from its ideal size for its number of nodes.
+ */
+static inline void
+g_hash_table_maybe_resize (GHashTable *hash_table)
+{
+  gint noccupied = hash_table->noccupied;
+  gint size = hash_table->size;
+
+  if ((size > hash_table->nnodes * 4 && size > 1 << HASH_TABLE_MIN_SHIFT) ||
+      (size <= noccupied + (noccupied / 16)))
+    g_hash_table_resize (hash_table);
+}
+
+/**
+ * g_hash_table_new:
+ * @hash_func: a function to create a hash value from a key.
+ *   Hash values are used to determine where keys are stored within the
+ *   #GHashTable data structure. The g_direct_hash(), g_int_hash() and
+ *   g_str_hash() functions are provided for some common types of keys.
+ *   If hash_func is %NULL, g_direct_hash() is used.
+ * @key_equal_func: a function to check two keys for equality.  This is
+ *   used when looking up keys in the #GHashTable.  The g_direct_equal(),
+ *   g_int_equal() and g_str_equal() functions are provided for the most
+ *   common types of keys. If @key_equal_func is %NULL, keys are compared
+ *   directly in a similar fashion to g_direct_equal(), but without the
+ *   overhead of a function call.
+ *
+ * Creates a new #GHashTable with a reference count of 1.
+ *
+ * Return value: a new #GHashTable.
+ **/
+GHashTable*
+g_hash_table_new (GHashFunc    hash_func,
+                  GEqualFunc   key_equal_func)
+{
+  return g_hash_table_new_full (hash_func, key_equal_func, NULL, NULL);
+}
+
+
+/**
+ * g_hash_table_new_full:
+ * @hash_func: a function to create a hash value from a key.
+ * @key_equal_func: a function to check two keys for equality.
+ * @key_destroy_func: a function to free the memory allocated for the key
+ *   used when removing the entry from the #GHashTable or %NULL if you
+ *   don't want to supply such a function.
+ * @value_destroy_func: a function to free the memory allocated for the
+ *   value used when removing the entry from the #GHashTable or %NULL if
+ *   you don't want to supply such a function.
+ *
+ * Creates a new #GHashTable like g_hash_table_new() with a reference count
+ * of 1 and allows to specify functions to free the memory allocated for the
+ * key and value that get called when removing the entry from the #GHashTable.
+ *
+ * Return value: a new #GHashTable.
+ **/
+GHashTable*
+g_hash_table_new_full (GHashFunc       hash_func,
+                       GEqualFunc      key_equal_func,
+                       GDestroyNotify  key_destroy_func,
+                       GDestroyNotify  value_destroy_func)
+{
+  GHashTable *hash_table;
+
+  hash_table = g_slice_new (GHashTable);
+  g_hash_table_set_shift (hash_table, HASH_TABLE_MIN_SHIFT);
+  hash_table->nnodes             = 0;
+  hash_table->noccupied          = 0;
+  hash_table->hash_func          = hash_func ? hash_func : g_direct_hash;
+  hash_table->key_equal_func     = key_equal_func;
+  hash_table->ref_count          = 1;
+#ifndef G_DISABLE_ASSERT
+  hash_table->version            = 0;
+#endif
+  hash_table->key_destroy_func   = key_destroy_func;
+  hash_table->value_destroy_func = value_destroy_func;
+  hash_table->nodes              = g_new0 (GHashNode, hash_table->size);
+
+  return hash_table;
+}
+
+/**
+ * g_hash_table_iter_init:
+ * @iter: an uninitialized #GHashTableIter.
+ * @hash_table: a #GHashTable.
+ *
+ * Initializes a key/value pair iterator and associates it with
+ * @hash_table. Modifying the hash table after calling this function
+ * invalidates the returned iterator.
+ * |[
+ * GHashTableIter iter;
+ * gpointer key, value;
+ *
+ * g_hash_table_iter_init (&iter, hash_table);
+ * while (g_hash_table_iter_next (&iter, &key, &value)) 
+ *   {
+ *     /&ast; do something with key and value &ast;/
+ *   }
+ * ]|
+ *
+ * Since: 2.16
+ **/
+void
+g_hash_table_iter_init (GHashTableIter *iter,
+			GHashTable     *hash_table)
+{
+  RealIter *ri = (RealIter *) iter;
+
+  g_return_if_fail (iter != NULL);
+  g_return_if_fail (hash_table != NULL);
+
+  ri->hash_table = hash_table;
+  ri->position = -1;
+#ifndef G_DISABLE_ASSERT
+  ri->version = hash_table->version;
+#endif
+}
+
+/**
+ * g_hash_table_iter_next:
+ * @iter: an initialized #GHashTableIter.
+ * @key: a location to store the key, or %NULL.
+ * @value: a location to store the value, or %NULL.
+ *
+ * Advances @iter and retrieves the key and/or value that are now
+ * pointed to as a result of this advancement. If %FALSE is returned,
+ * @key and @value are not set, and the iterator becomes invalid.
+ *
+ * Return value: %FALSE if the end of the #GHashTable has been reached.
+ *
+ * Since: 2.16
+ **/
+gboolean
+g_hash_table_iter_next (GHashTableIter *iter,
+			gpointer       *key,
+			gpointer       *value)
+{
+  RealIter *ri = (RealIter *) iter;
+  GHashNode *node;
+  gint position;
+
+  g_return_val_if_fail (iter != NULL, FALSE);
+#ifndef G_DISABLE_ASSERT
+  g_return_val_if_fail (ri->version == ri->hash_table->version, FALSE);
+#endif
+  g_return_val_if_fail (ri->position < ri->hash_table->size, FALSE);
+
+  position = ri->position;
+
+  do
+    {
+      position++;
+      if (position >= ri->hash_table->size)
+        {
+          ri->position = position;
+          return FALSE;
+        }
+
+      node = &ri->hash_table->nodes [position];
+    }
+  while (node->key_hash <= 1);
+
+  if (key != NULL)
+    *key = node->key;
+  if (value != NULL)
+    *value = node->value;
+
+  ri->position = position;
+  return TRUE;
+}
+
+/**
+ * g_hash_table_iter_get_hash_table:
+ * @iter: an initialized #GHashTableIter.
+ *
+ * Returns the #GHashTable associated with @iter.
+ *
+ * Return value: the #GHashTable associated with @iter.
+ *
+ * Since: 2.16
+ **/
+GHashTable *
+g_hash_table_iter_get_hash_table (GHashTableIter *iter)
+{
+  g_return_val_if_fail (iter != NULL, NULL);
+
+  return ((RealIter *) iter)->hash_table;
+}
+
+static void
+iter_remove_or_steal (RealIter *ri, gboolean notify)
+{
+  g_return_if_fail (ri != NULL);
+#ifndef G_DISABLE_ASSERT
+  g_return_if_fail (ri->version == ri->hash_table->version);
+#endif
+  g_return_if_fail (ri->position >= 0);
+  g_return_if_fail (ri->position < ri->hash_table->size);
+
+  g_hash_table_remove_node (ri->hash_table, &ri->hash_table->nodes [ri->position], notify);
+
+#ifndef G_DISABLE_ASSERT
+  ri->version++;
+  ri->hash_table->version++;
+#endif
+}
+
+/**
+ * g_hash_table_iter_remove():
+ * @iter: an initialized #GHashTableIter.
+ *
+ * Removes the key/value pair currently pointed to by the iterator
+ * from its associated #GHashTable. Can only be called after
+ * g_hash_table_iter_next() returned %TRUE, and cannot be called more
+ * than once for the same key/value pair.
+ *
+ * If the #GHashTable was created using g_hash_table_new_full(), the
+ * key and value are freed using the supplied destroy functions, otherwise
+ * you have to make sure that any dynamically allocated values are freed 
+ * yourself.
+ *
+ * Since: 2.16
+ **/
+void
+g_hash_table_iter_remove (GHashTableIter *iter)
+{
+  iter_remove_or_steal ((RealIter *) iter, TRUE);
+}
+
+/**
+ * g_hash_table_iter_steal():
+ * @iter: an initialized #GHashTableIter.
+ *
+ * Removes the key/value pair currently pointed to by the iterator
+ * from its associated #GHashTable, without calling the key and value
+ * destroy functions. Can only be called after
+ * g_hash_table_iter_next() returned %TRUE, and cannot be called more
+ * than once for the same key/value pair.
+ *
+ * Since: 2.16
+ **/
+void
+g_hash_table_iter_steal (GHashTableIter *iter)
+{
+  iter_remove_or_steal ((RealIter *) iter, FALSE);
+}
+
+
+/**
+ * g_hash_table_ref:
+ * @hash_table: a valid #GHashTable.
+ *
+ * Atomically increments the reference count of @hash_table by one.
+ * This function is MT-safe and may be called from any thread.
+ *
+ * Return value: the passed in #GHashTable.
+ *
+ * Since: 2.10
+ **/
+GHashTable*
+g_hash_table_ref (GHashTable *hash_table)
+{
+  g_return_val_if_fail (hash_table != NULL, NULL);
+  g_return_val_if_fail (hash_table->ref_count > 0, hash_table);
+
+  g_atomic_int_add (&hash_table->ref_count, 1);
+  return hash_table;
+}
+
+/**
+ * g_hash_table_unref:
+ * @hash_table: a valid #GHashTable.
+ *
+ * Atomically decrements the reference count of @hash_table by one.
+ * If the reference count drops to 0, all keys and values will be
+ * destroyed, and all memory allocated by the hash table is released.
+ * This function is MT-safe and may be called from any thread.
+ *
+ * Since: 2.10
+ **/
+void
+g_hash_table_unref (GHashTable *hash_table)
+{
+  g_return_if_fail (hash_table != NULL);
+  g_return_if_fail (hash_table->ref_count > 0);
+
+  if (g_atomic_int_exchange_and_add (&hash_table->ref_count, -1) - 1 == 0)
+    {
+      g_hash_table_remove_all_nodes (hash_table, TRUE);
+      g_free (hash_table->nodes);
+      g_slice_free (GHashTable, hash_table);
+    }
+}
+
+/**
+ * g_hash_table_destroy:
+ * @hash_table: a #GHashTable.
+ *
+ * Destroys all keys and values in the #GHashTable and decrements its
+ * reference count by 1. If keys and/or values are dynamically allocated,
+ * you should either free them first or create the #GHashTable with destroy
+ * notifiers using g_hash_table_new_full(). In the latter case the destroy
+ * functions you supplied will be called on all keys and values during the
+ * destruction phase.
+ **/
+void
+g_hash_table_destroy (GHashTable *hash_table)
+{
+  g_return_if_fail (hash_table != NULL);
+  g_return_if_fail (hash_table->ref_count > 0);
+
+  g_hash_table_remove_all (hash_table);
+  g_hash_table_unref (hash_table);
+}
+
+/**
+ * g_hash_table_lookup:
+ * @hash_table: a #GHashTable.
+ * @key: the key to look up.
+ *
+ * Looks up a key in a #GHashTable. Note that this function cannot
+ * distinguish between a key that is not present and one which is present
+ * and has the value %NULL. If you need this distinction, use
+ * g_hash_table_lookup_extended().
+ *
+ * Return value: the associated value, or %NULL if the key is not found.
+ **/
+gpointer
+g_hash_table_lookup (GHashTable   *hash_table,
+                     gconstpointer key)
+{
+  GHashNode *node;
+  guint      node_index;
+
+  g_return_val_if_fail (hash_table != NULL, NULL);
+
+  node_index = g_hash_table_lookup_node (hash_table, key);
+  node = &hash_table->nodes [node_index];
+
+  return node->key_hash ? node->value : NULL;
+}
+
+/**
+ * g_hash_table_lookup_extended:
+ * @hash_table: a #GHashTable
+ * @lookup_key: the key to look up
+ * @orig_key: return location for the original key, or %NULL
+ * @value: return location for the value associated with the key, or %NULL
+ *
+ * Looks up a key in the #GHashTable, returning the original key and the
+ * associated value and a #gboolean which is %TRUE if the key was found. This
+ * is useful if you need to free the memory allocated for the original key,
+ * for example before calling g_hash_table_remove().
+ *
+ * You can actually pass %NULL for @lookup_key to test
+ * whether the %NULL key exists.
+ *
+ * Return value: %TRUE if the key was found in the #GHashTable.
+ **/
+gboolean
+g_hash_table_lookup_extended (GHashTable    *hash_table,
+                              gconstpointer  lookup_key,
+                              gpointer      *orig_key,
+                              gpointer      *value)
+{
+  GHashNode *node;
+  guint      node_index;
+
+  g_return_val_if_fail (hash_table != NULL, FALSE);
+
+  node_index = g_hash_table_lookup_node (hash_table, lookup_key);
+  node = &hash_table->nodes [node_index];
+
+  if (!node->key_hash)
+    return FALSE;
+
+  if (orig_key)
+    *orig_key = node->key;
+
+  if (value)
+    *value = node->value;
+
+  return TRUE;
+}
+
+/*
+ * g_hash_table_insert_internal:
+ * @hash_table: our #GHashTable
+ * @key: the key to insert
+ * @value: the value to insert
+ * @keep_new_key: if %TRUE and this key already exists in the table
+ *   then call the destroy notify function on the old key.  If %FALSE
+ *   then call the destroy notify function on the new key.
+ *
+ * Implements the common logic for the g_hash_table_insert() and
+ * g_hash_table_replace() functions.
+ *
+ * Do a lookup of @key.  If it is found, replace it with the new
+ * @value (and perhaps the new @key).  If it is not found, create a
+ * new node.
+ */
+static void
+g_hash_table_insert_internal (GHashTable *hash_table,
+                              gpointer    key,
+                              gpointer    value,
+                              gboolean    keep_new_key)
+{
+  GHashNode *node;
+  guint node_index;
+  guint key_hash;
+  guint old_hash;
+
+  g_return_if_fail (hash_table != NULL);
+  g_return_if_fail (hash_table->ref_count > 0);
+
+  node_index = g_hash_table_lookup_node_for_insertion (hash_table, key, &key_hash);
+  node = &hash_table->nodes [node_index];
+
+  old_hash = node->key_hash;
+
+  if (old_hash > 1)
+    {
+      if (keep_new_key)
+        {
+          if (hash_table->key_destroy_func)
+            hash_table->key_destroy_func (node->key);
+          node->key = key;
+        }
+      else
+        {
+          if (hash_table->key_destroy_func)
+            hash_table->key_destroy_func (key);
+        }
+
+      if (hash_table->value_destroy_func)
+        hash_table->value_destroy_func (node->value);
+
+      node->value = value;
+    }
+  else
+    {
+      node->key = key;
+      node->value = value;
+      node->key_hash = key_hash;
+
+      hash_table->nnodes++;
+
+      if (old_hash == 0)
+        {
+          /* We replaced an empty node, and not a tombstone */
+          hash_table->noccupied++;
+          g_hash_table_maybe_resize (hash_table);
+        }
+
+#ifndef G_DISABLE_ASSERT
+      hash_table->version++;
+#endif
+    }
+}
+
+/**
+ * g_hash_table_insert:
+ * @hash_table: a #GHashTable.
+ * @key: a key to insert.
+ * @value: the value to associate with the key.
+ *
+ * Inserts a new key and value into a #GHashTable.
+ *
+ * If the key already exists in the #GHashTable its current value is replaced
+ * with the new value. If you supplied a @value_destroy_func when creating the
+ * #GHashTable, the old value is freed using that function. If you supplied
+ * a @key_destroy_func when creating the #GHashTable, the passed key is freed
+ * using that function.
+ **/
+void
+g_hash_table_insert (GHashTable *hash_table,
+                     gpointer    key,
+                     gpointer    value)
+{
+  g_hash_table_insert_internal (hash_table, key, value, FALSE);
+}
+
+/**
+ * g_hash_table_replace:
+ * @hash_table: a #GHashTable.
+ * @key: a key to insert.
+ * @value: the value to associate with the key.
+ *
+ * Inserts a new key and value into a #GHashTable similar to
+ * g_hash_table_insert(). The difference is that if the key already exists
+ * in the #GHashTable, it gets replaced by the new key. If you supplied a
+ * @value_destroy_func when creating the #GHashTable, the old value is freed
+ * using that function. If you supplied a @key_destroy_func when creating the
+ * #GHashTable, the old key is freed using that function.
+ **/
+void
+g_hash_table_replace (GHashTable *hash_table,
+                      gpointer    key,
+                      gpointer    value)
+{
+  g_hash_table_insert_internal (hash_table, key, value, TRUE);
+}
+
+/*
+ * g_hash_table_remove_internal:
+ * @hash_table: our #GHashTable
+ * @key: the key to remove
+ * @notify: %TRUE if the destroy notify handlers are to be called
+ * Return value: %TRUE if a node was found and removed, else %FALSE
+ *
+ * Implements the common logic for the g_hash_table_remove() and
+ * g_hash_table_steal() functions.
+ *
+ * Do a lookup of @key and remove it if it is found, calling the
+ * destroy notify handlers only if @notify is %TRUE.
+ */
+static gboolean
+g_hash_table_remove_internal (GHashTable    *hash_table,
+                              gconstpointer  key,
+                              gboolean       notify)
+{
+  GHashNode *node;
+  guint node_index;
+
+  g_return_val_if_fail (hash_table != NULL, FALSE);
+
+  node_index = g_hash_table_lookup_node (hash_table, key);
+  node = &hash_table->nodes [node_index];
+
+  /* g_hash_table_lookup_node() never returns a tombstone, so this is safe */
+  if (!node->key_hash)
+    return FALSE;
+
+  g_hash_table_remove_node (hash_table, node, notify);
+  g_hash_table_maybe_resize (hash_table);
+
+#ifndef G_DISABLE_ASSERT
+  hash_table->version++;
+#endif
+
+  return TRUE;
+}
+
+/**
+ * g_hash_table_remove:
+ * @hash_table: a #GHashTable.
+ * @key: the key to remove.
+ *
+ * Removes a key and its associated value from a #GHashTable.
+ *
+ * If the #GHashTable was created using g_hash_table_new_full(), the
+ * key and value are freed using the supplied destroy functions, otherwise
+ * you have to make sure that any dynamically allocated values are freed
+ * yourself.
+ *
+ * Return value: %TRUE if the key was found and removed from the #GHashTable.
+ **/
+gboolean
+g_hash_table_remove (GHashTable    *hash_table,
+                     gconstpointer  key)
+{
+  return g_hash_table_remove_internal (hash_table, key, TRUE);
+}
+
+/**
+ * g_hash_table_steal:
+ * @hash_table: a #GHashTable.
+ * @key: the key to remove.
+ *
+ * Removes a key and its associated value from a #GHashTable without
+ * calling the key and value destroy functions.
+ *
+ * Return value: %TRUE if the key was found and removed from the #GHashTable.
+ **/
+gboolean
+g_hash_table_steal (GHashTable    *hash_table,
+                    gconstpointer  key)
+{
+  return g_hash_table_remove_internal (hash_table, key, FALSE);
+}
+
+/**
+ * g_hash_table_remove_all:
+ * @hash_table: a #GHashTable
+ *
+ * Removes all keys and their associated values from a #GHashTable.
+ *
+ * If the #GHashTable was created using g_hash_table_new_full(), the keys
+ * and values are freed using the supplied destroy functions, otherwise you
+ * have to make sure that any dynamically allocated values are freed
+ * yourself.
+ *
+ * Since: 2.12
+ **/
+void
+g_hash_table_remove_all (GHashTable *hash_table)
+{
+  g_return_if_fail (hash_table != NULL);
+
+#ifndef G_DISABLE_ASSERT
+  if (hash_table->nnodes != 0)
+    hash_table->version++;
+#endif
+
+  g_hash_table_remove_all_nodes (hash_table, TRUE);
+  g_hash_table_maybe_resize (hash_table);
+}
+
+/**
+ * g_hash_table_steal_all:
+ * @hash_table: a #GHashTable.
+ *
+ * Removes all keys and their associated values from a #GHashTable
+ * without calling the key and value destroy functions.
+ *
+ * Since: 2.12
+ **/
+void
+g_hash_table_steal_all (GHashTable *hash_table)
+{
+  g_return_if_fail (hash_table != NULL);
+
+#ifndef G_DISABLE_ASSERT
+  if (hash_table->nnodes != 0)
+    hash_table->version++;
+#endif
+
+  g_hash_table_remove_all_nodes (hash_table, FALSE);
+  g_hash_table_maybe_resize (hash_table);
+}
+
+/*
+ * g_hash_table_foreach_remove_or_steal:
+ * @hash_table: our #GHashTable
+ * @func: the user's callback function
+ * @user_data: data for @func
+ * @notify: %TRUE if the destroy notify handlers are to be called
+ *
+ * Implements the common logic for g_hash_table_foreach_remove() and
+ * g_hash_table_foreach_steal().
+ *
+ * Iterates over every node in the table, calling @func with the key
+ * and value of the node (and @user_data).  If @func returns %TRUE the
+ * node is removed from the table.
+ *
+ * If @notify is true then the destroy notify handlers will be called
+ * for each removed node.
+ */
+static guint
+g_hash_table_foreach_remove_or_steal (GHashTable *hash_table,
+                                      GHRFunc	  func,
+                                      gpointer    user_data,
+                                      gboolean    notify)
+{
+  guint deleted = 0;
+  gint i;
+
+  for (i = 0; i < hash_table->size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+
+      if (node->key_hash > 1 && (* func) (node->key, node->value, user_data))
+        {
+          g_hash_table_remove_node (hash_table, node, notify);
+          deleted++;
+        }
+    }
+
+  g_hash_table_maybe_resize (hash_table);
+
+#ifndef G_DISABLE_ASSERT
+  if (deleted > 0)
+    hash_table->version++;
+#endif
+
+  return deleted;
+}
+
+/**
+ * g_hash_table_foreach_remove:
+ * @hash_table: a #GHashTable.
+ * @func: the function to call for each key/value pair.
+ * @user_data: user data to pass to the function.
+ *
+ * Calls the given function for each key/value pair in the #GHashTable.
+ * If the function returns %TRUE, then the key/value pair is removed from the
+ * #GHashTable. If you supplied key or value destroy functions when creating
+ * the #GHashTable, they are used to free the memory allocated for the removed
+ * keys and values.
+ *
+ * See #GHashTableIter for an alternative way to loop over the 
+ * key/value pairs in the hash table.
+ *
+ * Return value: the number of key/value pairs removed.
+ **/
+guint
+g_hash_table_foreach_remove (GHashTable *hash_table,
+                             GHRFunc     func,
+                             gpointer    user_data)
+{
+  g_return_val_if_fail (hash_table != NULL, 0);
+  g_return_val_if_fail (func != NULL, 0);
+
+  return g_hash_table_foreach_remove_or_steal (hash_table, func, user_data, TRUE);
+}
+
+/**
+ * g_hash_table_foreach_steal:
+ * @hash_table: a #GHashTable.
+ * @func: the function to call for each key/value pair.
+ * @user_data: user data to pass to the function.
+ *
+ * Calls the given function for each key/value pair in the #GHashTable.
+ * If the function returns %TRUE, then the key/value pair is removed from the
+ * #GHashTable, but no key or value destroy functions are called.
+ *
+ * See #GHashTableIter for an alternative way to loop over the 
+ * key/value pairs in the hash table.
+ *
+ * Return value: the number of key/value pairs removed.
+ **/
+guint
+g_hash_table_foreach_steal (GHashTable *hash_table,
+                            GHRFunc     func,
+                            gpointer    user_data)
+{
+  g_return_val_if_fail (hash_table != NULL, 0);
+  g_return_val_if_fail (func != NULL, 0);
+
+  return g_hash_table_foreach_remove_or_steal (hash_table, func, user_data, FALSE);
+}
+
+/**
+ * g_hash_table_foreach:
+ * @hash_table: a #GHashTable.
+ * @func: the function to call for each key/value pair.
+ * @user_data: user data to pass to the function.
+ *
+ * Calls the given function for each of the key/value pairs in the
+ * #GHashTable.  The function is passed the key and value of each
+ * pair, and the given @user_data parameter.  The hash table may not
+ * be modified while iterating over it (you can't add/remove
+ * items). To remove all items matching a predicate, use
+ * g_hash_table_foreach_remove().
+ *
+ * See g_hash_table_find() for performance caveats for linear
+ * order searches in contrast to g_hash_table_lookup().
+ **/
+void
+g_hash_table_foreach (GHashTable *hash_table,
+                      GHFunc      func,
+                      gpointer    user_data)
+{
+  gint i;
+
+  g_return_if_fail (hash_table != NULL);
+  g_return_if_fail (func != NULL);
+
+  for (i = 0; i < hash_table->size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+
+      if (node->key_hash > 1)
+        (* func) (node->key, node->value, user_data);
+    }
+}
+
+/**
+ * g_hash_table_find:
+ * @hash_table: a #GHashTable.
+ * @predicate:  function to test the key/value pairs for a certain property.
+ * @user_data:  user data to pass to the function.
+ *
+ * Calls the given function for key/value pairs in the #GHashTable until
+ * @predicate returns %TRUE.  The function is passed the key and value of
+ * each pair, and the given @user_data parameter. The hash table may not
+ * be modified while iterating over it (you can't add/remove items).
+ *
+ * Note, that hash tables are really only optimized for forward lookups,
+ * i.e. g_hash_table_lookup().
+ * So code that frequently issues g_hash_table_find() or
+ * g_hash_table_foreach() (e.g. in the order of once per every entry in a
+ * hash table) should probably be reworked to use additional or different
+ * data structures for reverse lookups (keep in mind that an O(n) find/foreach
+ * operation issued for all n values in a hash table ends up needing O(n*n)
+ * operations).
+ *
+ * Return value: The value of the first key/value pair is returned, for which
+ * func evaluates to %TRUE. If no pair with the requested property is found,
+ * %NULL is returned.
+ *
+ * Since: 2.4
+ **/
+gpointer
+g_hash_table_find (GHashTable      *hash_table,
+                   GHRFunc          predicate,
+                   gpointer         user_data)
+{
+  gint i;
+
+  g_return_val_if_fail (hash_table != NULL, NULL);
+  g_return_val_if_fail (predicate != NULL, NULL);
+
+  for (i = 0; i < hash_table->size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+
+      if (node->key_hash > 1 && predicate (node->key, node->value, user_data))
+        return node->value;
+    }
+
+  return NULL;
+}
+
+/**
+ * g_hash_table_size:
+ * @hash_table: a #GHashTable.
+ *
+ * Returns the number of elements contained in the #GHashTable.
+ *
+ * Return value: the number of key/value pairs in the #GHashTable.
+ **/
+guint
+g_hash_table_size (GHashTable *hash_table)
+{
+  g_return_val_if_fail (hash_table != NULL, 0);
+
+  return hash_table->nnodes;
+}
+
+/**
+ * g_hash_table_get_keys:
+ * @hash_table: a #GHashTable
+ *
+ * Retrieves every key inside @hash_table. The returned data is valid
+ * until @hash_table is modified.
+ *
+ * Return value: a #GList containing all the keys inside the hash
+ *   table. The content of the list is owned by the hash table and
+ *   should not be modified or freed. Use g_list_free() when done
+ *   using the list.
+ *
+ * Since: 2.14
+ */
+GList *
+g_hash_table_get_keys (GHashTable *hash_table)
+{
+  gint i;
+  GList *retval;
+
+  g_return_val_if_fail (hash_table != NULL, NULL);
+
+  retval = NULL;
+  for (i = 0; i < hash_table->size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+
+      if (node->key_hash > 1)
+        retval = g_list_prepend (retval, node->key);
+    }
+
+  return retval;
+}
+
+/**
+ * g_hash_table_get_values:
+ * @hash_table: a #GHashTable
+ *
+ * Retrieves every value inside @hash_table. The returned data is
+ * valid until @hash_table is modified.
+ *
+ * Return value: a #GList containing all the values inside the hash
+ *   table. The content of the list is owned by the hash table and
+ *   should not be modified or freed. Use g_list_free() when done
+ *   using the list.
+ *
+ * Since: 2.14
+ */
+GList *
+g_hash_table_get_values (GHashTable *hash_table)
+{
+  gint i;
+  GList *retval;
+
+  g_return_val_if_fail (hash_table != NULL, NULL);
+
+  retval = NULL;
+  for (i = 0; i < hash_table->size; i++)
+    {
+      GHashNode *node = &hash_table->nodes [i];
+
+      if (node->key_hash > 1)
+        retval = g_list_prepend (retval, node->value);
+    }
+
+  return retval;
+}
+
+#define __G_HASH_C__
+#include "galiasdef.c"
diff --git a/glib/ghash.h b/glib/ghash.h
new file mode 100644
index 0000000..afdd072
--- /dev/null
+++ b/glib/ghash.h
@@ -0,0 +1,145 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_HASH_H__
+#define __G_HASH_H__
+
+#include <glib/gtypes.h>
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GHashTable  GHashTable;
+
+typedef gboolean  (*GHRFunc)  (gpointer  key,
+                               gpointer  value,
+                               gpointer  user_data);
+
+typedef struct _GHashTableIter GHashTableIter;
+
+struct _GHashTableIter
+{
+  /*< private >*/
+  gpointer	dummy1;
+  gpointer	dummy2;
+  gpointer	dummy3;
+  int		dummy4;
+  gboolean	dummy5;
+  gpointer	dummy6;
+};
+
+/* Hash tables
+ */
+GHashTable* g_hash_table_new		   (GHashFunc	    hash_func,
+					    GEqualFunc	    key_equal_func);
+GHashTable* g_hash_table_new_full      	   (GHashFunc	    hash_func,
+					    GEqualFunc	    key_equal_func,
+					    GDestroyNotify  key_destroy_func,
+					    GDestroyNotify  value_destroy_func);
+void	    g_hash_table_destroy	   (GHashTable	   *hash_table);
+void	    g_hash_table_insert		   (GHashTable	   *hash_table,
+					    gpointer	    key,
+					    gpointer	    value);
+void        g_hash_table_replace           (GHashTable     *hash_table,
+					    gpointer	    key,
+					    gpointer	    value);
+gboolean    g_hash_table_remove		   (GHashTable	   *hash_table,
+					    gconstpointer   key);
+void        g_hash_table_remove_all        (GHashTable     *hash_table);
+gboolean    g_hash_table_steal             (GHashTable     *hash_table,
+					    gconstpointer   key);
+void        g_hash_table_steal_all         (GHashTable     *hash_table);
+gpointer    g_hash_table_lookup		   (GHashTable	   *hash_table,
+					    gconstpointer   key);
+gboolean    g_hash_table_lookup_extended   (GHashTable	   *hash_table,
+					    gconstpointer   lookup_key,
+					    gpointer	   *orig_key,
+					    gpointer	   *value);
+void	    g_hash_table_foreach	   (GHashTable	   *hash_table,
+					    GHFunc	    func,
+					    gpointer	    user_data);
+gpointer    g_hash_table_find	           (GHashTable	   *hash_table,
+					    GHRFunc	    predicate,
+					    gpointer	    user_data);
+guint	    g_hash_table_foreach_remove	   (GHashTable	   *hash_table,
+					    GHRFunc	    func,
+					    gpointer	    user_data);
+guint	    g_hash_table_foreach_steal	   (GHashTable	   *hash_table,
+					    GHRFunc	    func,
+					    gpointer	    user_data);
+guint	    g_hash_table_size		   (GHashTable	   *hash_table);
+GList *     g_hash_table_get_keys          (GHashTable     *hash_table);
+GList *     g_hash_table_get_values        (GHashTable     *hash_table);
+
+void        g_hash_table_iter_init         (GHashTableIter *iter,
+					    GHashTable     *hash_table);
+gboolean    g_hash_table_iter_next         (GHashTableIter *iter,
+					    gpointer       *key,
+					    gpointer       *value);
+GHashTable* g_hash_table_iter_get_hash_table (GHashTableIter *iter);
+void        g_hash_table_iter_remove       (GHashTableIter *iter);
+void        g_hash_table_iter_steal        (GHashTableIter *iter);
+
+/* keeping hash tables alive */
+GHashTable* g_hash_table_ref   		   (GHashTable 	   *hash_table);
+void        g_hash_table_unref             (GHashTable     *hash_table);
+
+#ifndef G_DISABLE_DEPRECATED
+
+/* The following two functions are deprecated and will be removed in
+ * the next major release. They do no good. */
+#define g_hash_table_freeze(hash_table) ((void)0)
+#define g_hash_table_thaw(hash_table) ((void)0)
+
+#endif /* G_DISABLE_DEPRECATED */
+
+/* Hash Functions
+ */
+gboolean g_str_equal (gconstpointer  v1,
+                      gconstpointer  v2);
+guint    g_str_hash  (gconstpointer  v);
+
+gboolean g_int_equal (gconstpointer  v1,
+                      gconstpointer  v2);
+guint    g_int_hash  (gconstpointer  v);
+
+/* This "hash" function will just return the key's address as an
+ * unsigned integer. Useful for hashing on plain addresses or
+ * simple integer values.
+ * Passing NULL into g_hash_table_new() as GHashFunc has the
+ * same effect as passing g_direct_hash().
+ */
+guint    g_direct_hash  (gconstpointer  v) G_GNUC_CONST;
+gboolean g_direct_equal (gconstpointer  v1,
+                         gconstpointer  v2) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __G_HASH_H__ */
diff --git a/glib/ghook.h b/glib/ghook.h
new file mode 100644
index 0000000..5577fc3
--- /dev/null
+++ b/glib/ghook.h
@@ -0,0 +1,181 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_HOOK_H__
+#define __G_HOOK_H__
+
+#include <glib/gmem.h>
+
+G_BEGIN_DECLS
+
+
+/* --- typedefs --- */
+typedef struct _GHook		GHook;
+typedef struct _GHookList	GHookList;
+
+typedef gint		(*GHookCompareFunc)	(GHook		*new_hook,
+						 GHook		*sibling);
+typedef gboolean	(*GHookFindFunc)	(GHook		*hook,
+						 gpointer	 data);
+typedef void		(*GHookMarshaller)	(GHook		*hook,
+						 gpointer	 marshal_data);
+typedef gboolean	(*GHookCheckMarshaller)	(GHook		*hook,
+						 gpointer	 marshal_data);
+typedef void		(*GHookFunc)		(gpointer	 data);
+typedef gboolean	(*GHookCheckFunc)	(gpointer	 data);
+typedef void		(*GHookFinalizeFunc)	(GHookList      *hook_list,
+						 GHook          *hook);
+typedef enum
+{
+  G_HOOK_FLAG_ACTIVE	    = 1 << 0,
+  G_HOOK_FLAG_IN_CALL	    = 1 << 1,
+  G_HOOK_FLAG_MASK	    = 0x0f
+} GHookFlagMask;
+#define G_HOOK_FLAG_USER_SHIFT	(4)
+
+
+/* --- structures --- */
+struct _GHookList
+{
+  gulong	    seq_id;
+  guint		    hook_size : 16;
+  guint		    is_setup : 1;
+  GHook		   *hooks;
+  gpointer	    dummy3;
+  GHookFinalizeFunc finalize_hook;
+  gpointer	    dummy[2];
+};
+struct _GHook
+{
+  gpointer	 data;
+  GHook		*next;
+  GHook		*prev;
+  guint		 ref_count;
+  gulong	 hook_id;
+  guint		 flags;
+  gpointer	 func;
+  GDestroyNotify destroy;
+};
+
+
+/* --- macros --- */
+#define	G_HOOK(hook)			((GHook*) (hook))
+#define	G_HOOK_FLAGS(hook)		(G_HOOK (hook)->flags)
+#define	G_HOOK_ACTIVE(hook)		((G_HOOK_FLAGS (hook) & \
+					  G_HOOK_FLAG_ACTIVE) != 0)
+#define	G_HOOK_IN_CALL(hook)		((G_HOOK_FLAGS (hook) & \
+					  G_HOOK_FLAG_IN_CALL) != 0)
+#define G_HOOK_IS_VALID(hook)		(G_HOOK (hook)->hook_id != 0 && \
+					 (G_HOOK_FLAGS (hook) & \
+                                          G_HOOK_FLAG_ACTIVE))
+#define G_HOOK_IS_UNLINKED(hook)	(G_HOOK (hook)->next == NULL && \
+					 G_HOOK (hook)->prev == NULL && \
+					 G_HOOK (hook)->hook_id == 0 && \
+					 G_HOOK (hook)->ref_count == 0)
+
+
+/* --- prototypes --- */
+/* callback maintenance functions */
+void	 g_hook_list_init		(GHookList		*hook_list,
+					 guint			 hook_size);
+void	 g_hook_list_clear		(GHookList		*hook_list);
+GHook*	 g_hook_alloc			(GHookList		*hook_list);
+void	 g_hook_free			(GHookList		*hook_list,
+					 GHook			*hook);
+GHook *	 g_hook_ref			(GHookList		*hook_list,
+					 GHook			*hook);
+void	 g_hook_unref			(GHookList		*hook_list,
+					 GHook			*hook);
+gboolean g_hook_destroy			(GHookList		*hook_list,
+					 gulong			 hook_id);
+void	 g_hook_destroy_link		(GHookList		*hook_list,
+					 GHook			*hook);
+void	 g_hook_prepend			(GHookList		*hook_list,
+					 GHook			*hook);
+void	 g_hook_insert_before		(GHookList		*hook_list,
+					 GHook			*sibling,
+					 GHook			*hook);
+void	 g_hook_insert_sorted		(GHookList		*hook_list,
+					 GHook			*hook,
+					 GHookCompareFunc	 func);
+GHook*	 g_hook_get			(GHookList		*hook_list,
+					 gulong			 hook_id);
+GHook*	 g_hook_find			(GHookList		*hook_list,
+					 gboolean		 need_valids,
+					 GHookFindFunc		 func,
+					 gpointer		 data);
+GHook*	 g_hook_find_data		(GHookList		*hook_list,
+					 gboolean		 need_valids,
+					 gpointer		 data);
+GHook*	 g_hook_find_func		(GHookList		*hook_list,
+					 gboolean		 need_valids,
+					 gpointer		 func);
+GHook*	 g_hook_find_func_data		(GHookList		*hook_list,
+					 gboolean		 need_valids,
+					 gpointer		 func,
+					 gpointer		 data);
+/* return the first valid hook, and increment its reference count */
+GHook*	 g_hook_first_valid		(GHookList		*hook_list,
+					 gboolean		 may_be_in_call);
+/* return the next valid hook with incremented reference count, and
+ * decrement the reference count of the original hook
+ */
+GHook*	 g_hook_next_valid		(GHookList		*hook_list,
+					 GHook			*hook,
+					 gboolean		 may_be_in_call);
+/* GHookCompareFunc implementation to insert hooks sorted by their id */
+gint	 g_hook_compare_ids		(GHook			*new_hook,
+					 GHook			*sibling);
+/* convenience macros */
+#define	 g_hook_append( hook_list, hook )  \
+     g_hook_insert_before ((hook_list), NULL, (hook))
+/* invoke all valid hooks with the (*GHookFunc) signature.
+ */
+void	 g_hook_list_invoke		(GHookList		*hook_list,
+					 gboolean		 may_recurse);
+/* invoke all valid hooks with the (*GHookCheckFunc) signature,
+ * and destroy the hook if FALSE is returned.
+ */
+void	 g_hook_list_invoke_check	(GHookList		*hook_list,
+					 gboolean		 may_recurse);
+/* invoke a marshaller on all valid hooks.
+ */
+void	 g_hook_list_marshal		(GHookList		*hook_list,
+					 gboolean		 may_recurse,
+					 GHookMarshaller	 marshaller,
+					 gpointer		 marshal_data);
+void	 g_hook_list_marshal_check	(GHookList		*hook_list,
+					 gboolean		 may_recurse,
+					 GHookCheckMarshaller	 marshaller,
+					 gpointer		 marshal_data);
+
+G_END_DECLS
+
+#endif /* __G_HOOK_H__ */
diff --git a/glib/gi18n-lib.h b/glib/gi18n-lib.h
new file mode 100644
index 0000000..ca002a7
--- /dev/null
+++ b/glib/gi18n-lib.h
@@ -0,0 +1,38 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 2002  Peter Mattis, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#ifndef __G_I18N_LIB_H__
+#define __G_I18N_LIB_H__
+
+#include <glib.h>
+
+#include <libintl.h>
+#include <string.h>
+
+#ifndef GETTEXT_PACKAGE
+#error You must define GETTEXT_PACKAGE before including gi18n-lib.h.  Did you forget to include config.h?
+#endif
+
+#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
+#define Q_(String) g_dpgettext (GETTEXT_PACKAGE, String, 0)
+#define N_(String) (String)
+#define C_(Context,String) g_dpgettext (GETTEXT_PACKAGE, Context "\004" String, strlen (Context) + 1)
+#define NC_(Context, String) (String)
+
+#endif  /* __G_I18N_LIB_H__ */
diff --git a/glib/gi18n.h b/glib/gi18n.h
new file mode 100644
index 0000000..c710046
--- /dev/null
+++ b/glib/gi18n.h
@@ -0,0 +1,34 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 2002  Peter Mattis, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#ifndef __G_I18N_H__
+#define __G_I18N_H__
+
+#include <glib.h>
+
+#include <libintl.h>
+#include <string.h>
+
+#define  _(String) gettext (String)
+#define Q_(String) g_dpgettext (NULL, String, 0)
+#define N_(String) (String)
+#define C_(Context,String) g_dpgettext (NULL, Context "\004" String, strlen (Context) + 1)
+#define NC_(Context, String) (String)
+
+#endif  /* __G_I18N_H__ */
diff --git a/glib/giochannel.c b/glib/giochannel.c
new file mode 100644
index 0000000..537fdb6
--- /dev/null
+++ b/glib/giochannel.c
@@ -0,0 +1,2389 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * giochannel.c: IO Channel abstraction
+ * Copyright 1998 Owen Taylor
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#undef G_DISABLE_DEPRECATED
+
+#include "glib.h"
+
+#include "giochannel.h"
+
+#include "glibintl.h"
+
+#include "galias.h"
+
+#define G_IO_NICE_BUF_SIZE	1024
+
+/* This needs to be as wide as the largest character in any possible encoding */
+#define MAX_CHAR_SIZE		10
+
+/* Some simplifying macros, which reduce the need to worry whether the
+ * buffers have been allocated. These also make USE_BUF () an lvalue,
+ * which is used in g_io_channel_read_to_end ().
+ */
+#define USE_BUF(channel)	((channel)->encoding ? (channel)->encoded_read_buf \
+				 : (channel)->read_buf)
+#define BUF_LEN(string)		((string) ? (string)->len : 0)
+
+static GIOError		g_io_error_get_from_g_error	(GIOStatus    status,
+							 GError      *err);
+static void		g_io_channel_purge		(GIOChannel  *channel);
+static GIOStatus	g_io_channel_fill_buffer	(GIOChannel  *channel,
+							 GError     **err);
+static GIOStatus	g_io_channel_read_line_backend	(GIOChannel  *channel,
+							 gsize       *length,
+							 gsize       *terminator_pos,
+							 GError     **error);
+
+/**
+ * g_io_channel_init:
+ * @channel: a #GIOChannel
+ *
+ * Initializes a #GIOChannel struct. 
+ *
+ * This is called by each of the above functions when creating a 
+ * #GIOChannel, and so is not often needed by the application 
+ * programmer (unless you are creating a new type of #GIOChannel).
+ */
+void
+g_io_channel_init (GIOChannel *channel)
+{
+  channel->ref_count = 1;
+  channel->encoding = g_strdup ("UTF-8");
+  channel->line_term = NULL;
+  channel->line_term_len = 0;
+  channel->buf_size = G_IO_NICE_BUF_SIZE;
+  channel->read_cd = (GIConv) -1;
+  channel->write_cd = (GIConv) -1;
+  channel->read_buf = NULL; /* Lazy allocate buffers */
+  channel->encoded_read_buf = NULL;
+  channel->write_buf = NULL;
+  channel->partial_write_buf[0] = '\0';
+  channel->use_buffer = TRUE;
+  channel->do_encode = FALSE;
+  channel->close_on_unref = FALSE;
+}
+
+/**
+ * g_io_channel_ref:
+ * @channel: a #GIOChannel
+ *
+ * Increments the reference count of a #GIOChannel.
+ *
+ * Returns: the @channel that was passed in (since 2.6)
+ */
+GIOChannel *
+g_io_channel_ref (GIOChannel *channel)
+{
+  g_return_val_if_fail (channel != NULL, NULL);
+
+  g_atomic_int_inc (&channel->ref_count);
+
+  return channel;
+}
+
+/**
+ * g_io_channel_unref:
+ * @channel: a #GIOChannel
+ *
+ * Decrements the reference count of a #GIOChannel.
+ */
+void 
+g_io_channel_unref (GIOChannel *channel)
+{
+  gboolean is_zero;
+
+  g_return_if_fail (channel != NULL);
+
+  is_zero = g_atomic_int_dec_and_test (&channel->ref_count);
+
+  if (G_UNLIKELY (is_zero))
+    {
+      if (channel->close_on_unref)
+        g_io_channel_shutdown (channel, TRUE, NULL);
+      else
+        g_io_channel_purge (channel);
+      g_free (channel->encoding);
+      if (channel->read_cd != (GIConv) -1)
+        g_iconv_close (channel->read_cd);
+      if (channel->write_cd != (GIConv) -1)
+        g_iconv_close (channel->write_cd);
+      g_free (channel->line_term);
+      if (channel->read_buf)
+        g_string_free (channel->read_buf, TRUE);
+      if (channel->write_buf)
+        g_string_free (channel->write_buf, TRUE);
+      if (channel->encoded_read_buf)
+        g_string_free (channel->encoded_read_buf, TRUE);
+      channel->funcs->io_free (channel);
+    }
+}
+
+static GIOError
+g_io_error_get_from_g_error (GIOStatus  status,
+			     GError    *err)
+{
+  switch (status)
+    {
+      case G_IO_STATUS_NORMAL:
+      case G_IO_STATUS_EOF:
+        return G_IO_ERROR_NONE;
+      case G_IO_STATUS_AGAIN:
+        return G_IO_ERROR_AGAIN;
+      case G_IO_STATUS_ERROR:
+	g_return_val_if_fail (err != NULL, G_IO_ERROR_UNKNOWN);
+	
+        if (err->domain != G_IO_CHANNEL_ERROR)
+          return G_IO_ERROR_UNKNOWN;
+        switch (err->code)
+          {
+            case G_IO_CHANNEL_ERROR_INVAL:
+              return G_IO_ERROR_INVAL;
+            default:
+              return G_IO_ERROR_UNKNOWN;
+          }
+      default:
+        g_assert_not_reached ();
+    }
+}
+
+/**
+ * g_io_channel_read:
+ * @channel: a #GIOChannel
+ * @buf: a buffer to read the data into (which should be at least 
+ *       count bytes long)
+ * @count: the number of bytes to read from the #GIOChannel
+ * @bytes_read: returns the number of bytes actually read
+ * 
+ * Reads data from a #GIOChannel. 
+ * 
+ * Return value: %G_IO_ERROR_NONE if the operation was successful. 
+ *
+ * Deprecated:2.2: Use g_io_channel_read_chars() instead.
+ **/
+GIOError 
+g_io_channel_read (GIOChannel *channel, 
+		   gchar      *buf, 
+		   gsize       count,
+		   gsize      *bytes_read)
+{
+  GError *err = NULL;
+  GIOError error;
+  GIOStatus status;
+
+  g_return_val_if_fail (channel != NULL, G_IO_ERROR_UNKNOWN);
+  g_return_val_if_fail (bytes_read != NULL, G_IO_ERROR_UNKNOWN);
+
+  if (count == 0)
+    {
+      if (bytes_read)
+        *bytes_read = 0;
+      return G_IO_ERROR_NONE;
+    }
+
+  g_return_val_if_fail (buf != NULL, G_IO_ERROR_UNKNOWN);
+
+  status = channel->funcs->io_read (channel, buf, count, bytes_read, &err);
+
+  error = g_io_error_get_from_g_error (status, err);
+
+  if (err)
+    g_error_free (err);
+
+  return error;
+}
+
+/**
+ * g_io_channel_write:
+ * @channel:  a #GIOChannel
+ * @buf: the buffer containing the data to write
+ * @count: the number of bytes to write
+ * @bytes_written: the number of bytes actually written
+ * 
+ * Writes data to a #GIOChannel. 
+ * 
+ * Return value:  %G_IO_ERROR_NONE if the operation was successful.
+ *
+ * Deprecated:2.2: Use g_io_channel_write_chars() instead.
+ **/
+GIOError 
+g_io_channel_write (GIOChannel  *channel, 
+		    const gchar *buf, 
+		    gsize        count,
+		    gsize       *bytes_written)
+{
+  GError *err = NULL;
+  GIOError error;
+  GIOStatus status;
+
+  g_return_val_if_fail (channel != NULL, G_IO_ERROR_UNKNOWN);
+  g_return_val_if_fail (bytes_written != NULL, G_IO_ERROR_UNKNOWN);
+
+  status = channel->funcs->io_write (channel, buf, count, bytes_written, &err);
+
+  error = g_io_error_get_from_g_error (status, err);
+
+  if (err)
+    g_error_free (err);
+
+  return error;
+}
+
+/**
+ * g_io_channel_seek:
+ * @channel: a #GIOChannel
+ * @offset: an offset, in bytes, which is added to the position specified 
+ *          by @type
+ * @type: the position in the file, which can be %G_SEEK_CUR (the current
+ *        position), %G_SEEK_SET (the start of the file), or %G_SEEK_END 
+ *        (the end of the file)
+ * 
+ * Sets the current position in the #GIOChannel, similar to the standard 
+ * library function fseek(). 
+ * 
+ * Return value: %G_IO_ERROR_NONE if the operation was successful.
+ *
+ * Deprecated:2.2: Use g_io_channel_seek_position() instead.
+ **/
+GIOError 
+g_io_channel_seek (GIOChannel *channel,
+		   gint64      offset, 
+		   GSeekType   type)
+{
+  GError *err = NULL;
+  GIOError error;
+  GIOStatus status;
+
+  g_return_val_if_fail (channel != NULL, G_IO_ERROR_UNKNOWN);
+  g_return_val_if_fail (channel->is_seekable, G_IO_ERROR_UNKNOWN);
+
+  switch (type)
+    {
+      case G_SEEK_CUR:
+      case G_SEEK_SET:
+      case G_SEEK_END:
+        break;
+      default:
+        g_warning ("g_io_channel_seek: unknown seek type");
+        return G_IO_ERROR_UNKNOWN;
+    }
+
+  status = channel->funcs->io_seek (channel, offset, type, &err);
+
+  error = g_io_error_get_from_g_error (status, err);
+
+  if (err)
+    g_error_free (err);
+
+  return error;
+}
+
+/* The function g_io_channel_new_file() is prototyped in both
+ * giounix.c and giowin32.c, so we stick its documentation here.
+ */
+
+/**
+ * g_io_channel_new_file:
+ * @filename: A string containing the name of a file
+ * @mode: One of "r", "w", "a", "r+", "w+", "a+". These have
+ *        the same meaning as in fopen()
+ * @error: A location to return an error of type %G_FILE_ERROR
+ *
+ * Open a file @filename as a #GIOChannel using mode @mode. This
+ * channel will be closed when the last reference to it is dropped,
+ * so there is no need to call g_io_channel_close() (though doing
+ * so will not cause problems, as long as no attempt is made to
+ * access the channel after it is closed).
+ *
+ * Return value: A #GIOChannel on success, %NULL on failure.
+ **/
+
+/**
+ * g_io_channel_close:
+ * @channel: A #GIOChannel
+ * 
+ * Close an IO channel. Any pending data to be written will be
+ * flushed, ignoring errors. The channel will not be freed until the
+ * last reference is dropped using g_io_channel_unref(). 
+ *
+ * Deprecated:2.2: Use g_io_channel_shutdown() instead.
+ **/
+void
+g_io_channel_close (GIOChannel *channel)
+{
+  GError *err = NULL;
+  
+  g_return_if_fail (channel != NULL);
+
+  g_io_channel_purge (channel);
+
+  channel->funcs->io_close (channel, &err);
+
+  if (err)
+    { /* No way to return the error */
+      g_warning ("Error closing channel: %s", err->message);
+      g_error_free (err);
+    }
+  
+  channel->close_on_unref = FALSE; /* Because we already did */
+  channel->is_readable = FALSE;
+  channel->is_writeable = FALSE;
+  channel->is_seekable = FALSE;
+}
+
+/**
+ * g_io_channel_shutdown:
+ * @channel: a #GIOChannel
+ * @flush: if %TRUE, flush pending
+ * @err: location to store a #GIOChannelError
+ * 
+ * Close an IO channel. Any pending data to be written will be
+ * flushed if @flush is %TRUE. The channel will not be freed until the
+ * last reference is dropped using g_io_channel_unref().
+ *
+ * Return value: the status of the operation.
+ **/
+GIOStatus
+g_io_channel_shutdown (GIOChannel  *channel,
+		       gboolean     flush,
+		       GError     **err)
+{
+  GIOStatus status, result;
+  GError *tmperr = NULL;
+  
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (err == NULL || *err == NULL, G_IO_STATUS_ERROR);
+
+  if (channel->write_buf && channel->write_buf->len > 0)
+    {
+      if (flush)
+        {
+          GIOFlags flags;
+      
+          /* Set the channel to blocking, to avoid a busy loop
+           */
+          flags = g_io_channel_get_flags (channel);
+          /* Ignore any errors here, they're irrelevant */
+          g_io_channel_set_flags (channel, flags & ~G_IO_FLAG_NONBLOCK, NULL);
+
+          result = g_io_channel_flush (channel, &tmperr);
+        }
+      else
+        result = G_IO_STATUS_NORMAL;
+
+      g_string_truncate(channel->write_buf, 0);
+    }
+  else
+    result = G_IO_STATUS_NORMAL;
+
+  if (channel->partial_write_buf[0] != '\0')
+    {
+      if (flush)
+        g_warning ("Partial character at end of write buffer not flushed.\n");
+      channel->partial_write_buf[0] = '\0';
+    }
+
+  status = channel->funcs->io_close (channel, err);
+
+  channel->close_on_unref = FALSE; /* Because we already did */
+  channel->is_readable = FALSE;
+  channel->is_writeable = FALSE;
+  channel->is_seekable = FALSE;
+
+  if (status != G_IO_STATUS_NORMAL)
+    {
+      g_clear_error (&tmperr);
+      return status;
+    }
+  else if (result != G_IO_STATUS_NORMAL)
+    {
+      g_propagate_error (err, tmperr);
+      return result;
+    }
+  else
+    return G_IO_STATUS_NORMAL;
+}
+
+/* This function is used for the final flush on close or unref */
+static void
+g_io_channel_purge (GIOChannel *channel)
+{
+  GError *err = NULL;
+  GIOStatus status;
+
+  g_return_if_fail (channel != NULL);
+
+  if (channel->write_buf && channel->write_buf->len > 0)
+    {
+      GIOFlags flags;
+      
+      /* Set the channel to blocking, to avoid a busy loop
+       */
+      flags = g_io_channel_get_flags (channel);
+      g_io_channel_set_flags (channel, flags & ~G_IO_FLAG_NONBLOCK, NULL);
+
+      status = g_io_channel_flush (channel, &err);
+
+      if (err)
+	{ /* No way to return the error */
+	  g_warning ("Error flushing string: %s", err->message);
+	  g_error_free (err);
+	}
+    }
+
+  /* Flush these in case anyone tries to close without unrefing */
+
+  if (channel->read_buf)
+    g_string_truncate (channel->read_buf, 0);
+  if (channel->write_buf)
+    g_string_truncate (channel->write_buf, 0);
+  if (channel->encoding)
+    {
+      if (channel->encoded_read_buf)
+        g_string_truncate (channel->encoded_read_buf, 0);
+
+      if (channel->partial_write_buf[0] != '\0')
+        {
+          g_warning ("Partial character at end of write buffer not flushed.\n");
+          channel->partial_write_buf[0] = '\0';
+        }
+    }
+}
+
+/**
+ * g_io_create_watch:
+ * @channel: a #GIOChannel to watch
+ * @condition: conditions to watch for
+ *
+ * Creates a #GSource that's dispatched when @condition is met for the 
+ * given @channel. For example, if condition is #G_IO_IN, the source will 
+ * be dispatched when there's data available for reading.
+ *
+ * g_io_add_watch() is a simpler interface to this same functionality, for 
+ * the case where you want to add the source to the default main loop context 
+ * at the default priority.
+ *
+ * On Windows, polling a #GSource created to watch a channel for a socket
+ * puts the socket in non-blocking mode. This is a side-effect of the
+ * implementation and unavoidable.
+ *
+ * Returns: a new #GSource
+ */
+GSource *
+g_io_create_watch (GIOChannel   *channel,
+		   GIOCondition  condition)
+{
+  g_return_val_if_fail (channel != NULL, NULL);
+
+  return channel->funcs->io_create_watch (channel, condition);
+}
+
+/**
+ * g_io_add_watch_full:
+ * @channel: a #GIOChannel
+ * @priority: the priority of the #GIOChannel source
+ * @condition: the condition to watch for
+ * @func: the function to call when the condition is satisfied
+ * @user_data: user data to pass to @func
+ * @notify: the function to call when the source is removed
+ *
+ * Adds the #GIOChannel into the default main loop context
+ * with the given priority.
+ *
+ * This internally creates a main loop source using g_io_create_watch()
+ * and attaches it to the main loop context with g_source_attach().
+ * You can do these steps manuallt if you need greater control.
+ *
+ * Returns: the event source id
+ */
+guint 
+g_io_add_watch_full (GIOChannel    *channel,
+		     gint           priority,
+		     GIOCondition   condition,
+		     GIOFunc        func,
+		     gpointer       user_data,
+		     GDestroyNotify notify)
+{
+  GSource *source;
+  guint id;
+  
+  g_return_val_if_fail (channel != NULL, 0);
+
+  source = g_io_create_watch (channel, condition);
+
+  if (priority != G_PRIORITY_DEFAULT)
+    g_source_set_priority (source, priority);
+  g_source_set_callback (source, (GSourceFunc)func, user_data, notify);
+
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  return id;
+}
+
+/**
+ * g_io_add_watch:
+ * @channel: a #GIOChannel
+ * @condition: the condition to watch for
+ * @func: the function to call when the condition is satisfied
+ * @user_data: user data to pass to @func
+ *
+ * Adds the #GIOChannel into the default main loop context
+ * with the default priority.
+ *
+ * Returns: the event source id
+ */
+guint 
+g_io_add_watch (GIOChannel   *channel,
+		GIOCondition  condition,
+		GIOFunc       func,
+		gpointer      user_data)
+{
+  return g_io_add_watch_full (channel, G_PRIORITY_DEFAULT, condition, func, user_data, NULL);
+}
+
+/**
+ * g_io_channel_get_buffer_condition:
+ * @channel: A #GIOChannel
+ *
+ * This function returns a #GIOCondition depending on whether there
+ * is data to be read/space to write data in the internal buffers in 
+ * the #GIOChannel. Only the flags %G_IO_IN and %G_IO_OUT may be set.
+ *
+ * Return value: A #GIOCondition
+ **/
+GIOCondition
+g_io_channel_get_buffer_condition (GIOChannel *channel)
+{
+  GIOCondition condition = 0;
+
+  if (channel->encoding)
+    {
+      if (channel->encoded_read_buf && (channel->encoded_read_buf->len > 0))
+        condition |= G_IO_IN; /* Only return if we have full characters */
+    }
+  else
+    {
+      if (channel->read_buf && (channel->read_buf->len > 0))
+        condition |= G_IO_IN;
+    }
+
+  if (channel->write_buf && (channel->write_buf->len < channel->buf_size))
+    condition |= G_IO_OUT;
+
+  return condition;
+}
+
+/**
+ * g_io_channel_error_from_errno:
+ * @en: an <literal>errno</literal> error number, e.g. %EINVAL
+ *
+ * Converts an <literal>errno</literal> error number to a #GIOChannelError.
+ *
+ * Return value: a #GIOChannelError error number, e.g. 
+ *      %G_IO_CHANNEL_ERROR_INVAL.
+ **/
+GIOChannelError
+g_io_channel_error_from_errno (gint en)
+{
+#ifdef EAGAIN
+  g_return_val_if_fail (en != EAGAIN, G_IO_CHANNEL_ERROR_FAILED);
+#endif
+
+  switch (en)
+    {
+#ifdef EBADF
+    case EBADF:
+      g_warning("Invalid file descriptor.\n");
+      return G_IO_CHANNEL_ERROR_FAILED;
+#endif
+
+#ifdef EFAULT
+    case EFAULT:
+      g_warning("Buffer outside valid address space.\n");
+      return G_IO_CHANNEL_ERROR_FAILED;
+#endif
+
+#ifdef EFBIG
+    case EFBIG:
+      return G_IO_CHANNEL_ERROR_FBIG;
+#endif
+
+#ifdef EINTR
+    /* In general, we should catch EINTR before we get here,
+     * but close() is allowed to return EINTR by POSIX, so
+     * we need to catch it here; EINTR from close() is
+     * unrecoverable, because it's undefined whether
+     * the fd was actually closed or not, so we just return
+     * a generic error code.
+     */
+    case EINTR:
+      return G_IO_CHANNEL_ERROR_FAILED;
+#endif
+
+#ifdef EINVAL
+    case EINVAL:
+      return G_IO_CHANNEL_ERROR_INVAL;
+#endif
+
+#ifdef EIO
+    case EIO:
+      return G_IO_CHANNEL_ERROR_IO;
+#endif
+
+#ifdef EISDIR
+    case EISDIR:
+      return G_IO_CHANNEL_ERROR_ISDIR;
+#endif
+
+#ifdef ENOSPC
+    case ENOSPC:
+      return G_IO_CHANNEL_ERROR_NOSPC;
+#endif
+
+#ifdef ENXIO
+    case ENXIO:
+      return G_IO_CHANNEL_ERROR_NXIO;
+#endif
+
+#ifdef EOVERFLOW
+    case EOVERFLOW:
+      return G_IO_CHANNEL_ERROR_OVERFLOW;
+#endif
+
+#ifdef EPIPE
+    case EPIPE:
+      return G_IO_CHANNEL_ERROR_PIPE;
+#endif
+
+    default:
+      return G_IO_CHANNEL_ERROR_FAILED;
+    }
+}
+
+/**
+ * g_io_channel_set_buffer_size:
+ * @channel: a #GIOChannel
+ * @size: the size of the buffer, or 0 to let GLib pick a good size
+ *
+ * Sets the buffer size.
+ **/  
+void
+g_io_channel_set_buffer_size (GIOChannel *channel,
+                              gsize       size)
+{
+  g_return_if_fail (channel != NULL);
+
+  if (size == 0)
+    size = G_IO_NICE_BUF_SIZE;
+
+  if (size < MAX_CHAR_SIZE)
+    size = MAX_CHAR_SIZE;
+
+  channel->buf_size = size;
+}
+
+/**
+ * g_io_channel_get_buffer_size:
+ * @channel: a #GIOChannel
+ *
+ * Gets the buffer size.
+ *
+ * Return value: the size of the buffer.
+ **/  
+gsize
+g_io_channel_get_buffer_size (GIOChannel *channel)
+{
+  g_return_val_if_fail (channel != NULL, 0);
+
+  return channel->buf_size;
+}
+
+/**
+ * g_io_channel_set_line_term:
+ * @channel: a #GIOChannel
+ * @line_term: The line termination string. Use %NULL for autodetect.
+ *             Autodetection breaks on "\n", "\r\n", "\r", "\0", and
+ *             the Unicode paragraph separator. Autodetection should
+ *             not be used for anything other than file-based channels.
+ * @length: The length of the termination string. If -1 is passed, the
+ *          string is assumed to be nul-terminated. This option allows
+ *          termination strings with embedded nuls.
+ *
+ * This sets the string that #GIOChannel uses to determine
+ * where in the file a line break occurs.
+ **/
+void
+g_io_channel_set_line_term (GIOChannel	*channel,
+                            const gchar	*line_term,
+			    gint         length)
+{
+  g_return_if_fail (channel != NULL);
+  g_return_if_fail (line_term == NULL || length != 0); /* Disallow "" */
+
+  if (line_term == NULL)
+    length = 0;
+  else if (length < 0)
+    length = strlen (line_term);
+
+  g_free (channel->line_term);
+  channel->line_term = line_term ? g_memdup (line_term, length) : NULL;
+  channel->line_term_len = length;
+}
+
+/**
+ * g_io_channel_get_line_term:
+ * @channel: a #GIOChannel
+ * @length: a location to return the length of the line terminator
+ *
+ * This returns the string that #GIOChannel uses to determine
+ * where in the file a line break occurs. A value of %NULL
+ * indicates autodetection.
+ *
+ * Return value: The line termination string. This value
+ *   is owned by GLib and must not be freed.
+ **/
+G_CONST_RETURN gchar*
+g_io_channel_get_line_term (GIOChannel *channel,
+			    gint       *length)
+{
+  g_return_val_if_fail (channel != NULL, NULL);
+
+  if (length)
+    *length = channel->line_term_len;
+
+  return channel->line_term;
+}
+
+/**
+ * g_io_channel_set_flags:
+ * @channel: a #GIOChannel
+ * @flags: the flags to set on the IO channel
+ * @error: A location to return an error of type #GIOChannelError
+ *
+ * Sets the (writeable) flags in @channel to (@flags & %G_IO_CHANNEL_SET_MASK).
+ *
+ * Return value: the status of the operation. 
+ **/
+GIOStatus
+g_io_channel_set_flags (GIOChannel  *channel,
+                        GIOFlags     flags,
+                        GError     **error)
+{
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+
+  return (*channel->funcs->io_set_flags) (channel,
+					  flags & G_IO_FLAG_SET_MASK,
+					  error);
+}
+
+/**
+ * g_io_channel_get_flags:
+ * @channel: a #GIOChannel
+ *
+ * Gets the current flags for a #GIOChannel, including read-only
+ * flags such as %G_IO_FLAG_IS_READABLE.
+ *
+ * The values of the flags %G_IO_FLAG_IS_READABLE and %G_IO_FLAG_IS_WRITEABLE
+ * are cached for internal use by the channel when it is created.
+ * If they should change at some later point (e.g. partial shutdown
+ * of a socket with the UNIX shutdown() function), the user
+ * should immediately call g_io_channel_get_flags() to update
+ * the internal values of these flags.
+ *
+ * Return value: the flags which are set on the channel
+ **/
+GIOFlags
+g_io_channel_get_flags (GIOChannel *channel)
+{
+  GIOFlags flags;
+
+  g_return_val_if_fail (channel != NULL, 0);
+
+  flags = (* channel->funcs->io_get_flags) (channel);
+
+  /* Cross implementation code */
+
+  if (channel->is_seekable)
+    flags |= G_IO_FLAG_IS_SEEKABLE;
+  if (channel->is_readable)
+    flags |= G_IO_FLAG_IS_READABLE;
+  if (channel->is_writeable)
+    flags |= G_IO_FLAG_IS_WRITEABLE;
+
+  return flags;
+}
+
+/**
+ * g_io_channel_set_close_on_unref:
+ * @channel: a #GIOChannel
+ * @do_close: Whether to close the channel on the final unref of
+ *            the GIOChannel data structure. The default value of
+ *            this is %TRUE for channels created by g_io_channel_new_file (),
+ *            and %FALSE for all other channels.
+ *
+ * Setting this flag to %TRUE for a channel you have already closed
+ * can cause problems.
+ **/
+void
+g_io_channel_set_close_on_unref	(GIOChannel *channel,
+				 gboolean    do_close)
+{
+  g_return_if_fail (channel != NULL);
+
+  channel->close_on_unref = do_close;
+}
+
+/**
+ * g_io_channel_get_close_on_unref:
+ * @channel: a #GIOChannel.
+ *
+ * Returns whether the file/socket/whatever associated with @channel
+ * will be closed when @channel receives its final unref and is
+ * destroyed. The default value of this is %TRUE for channels created
+ * by g_io_channel_new_file (), and %FALSE for all other channels.
+ *
+ * Return value: Whether the channel will be closed on the final unref of
+ *               the GIOChannel data structure.
+ **/
+gboolean
+g_io_channel_get_close_on_unref	(GIOChannel *channel)
+{
+  g_return_val_if_fail (channel != NULL, FALSE);
+
+  return channel->close_on_unref;
+}
+
+/**
+ * g_io_channel_seek_position:
+ * @channel: a #GIOChannel
+ * @offset: The offset in bytes from the position specified by @type
+ * @type: a #GSeekType. The type %G_SEEK_CUR is only allowed in those
+ *                      cases where a call to g_io_channel_set_encoding ()
+ *                      is allowed. See the documentation for
+ *                      g_io_channel_set_encoding () for details.
+ * @error: A location to return an error of type #GIOChannelError
+ *
+ * Replacement for g_io_channel_seek() with the new API.
+ *
+ * Return value: the status of the operation.
+ **/
+GIOStatus
+g_io_channel_seek_position (GIOChannel  *channel,
+                            gint64       offset,
+                            GSeekType    type,
+                            GError     **error)
+{
+  GIOStatus status;
+
+  /* For files, only one of the read and write buffers can contain data.
+   * For sockets, both can contain data.
+   */
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_seekable, G_IO_STATUS_ERROR);
+
+  switch (type)
+    {
+      case G_SEEK_CUR: /* The user is seeking relative to the head of the buffer */
+        if (channel->use_buffer)
+          {
+            if (channel->do_encode && channel->encoded_read_buf
+                && channel->encoded_read_buf->len > 0)
+              {
+                g_warning ("Seek type G_SEEK_CUR not allowed for this"
+                  " channel's encoding.\n");
+                return G_IO_STATUS_ERROR;
+              }
+          if (channel->read_buf)
+            offset -= channel->read_buf->len;
+          if (channel->encoded_read_buf)
+            {
+              g_assert (channel->encoded_read_buf->len == 0 || !channel->do_encode);
+
+              /* If there's anything here, it's because the encoding is UTF-8,
+               * so we can just subtract the buffer length, the same as for
+               * the unencoded data.
+               */
+
+              offset -= channel->encoded_read_buf->len;
+            }
+          }
+        break;
+      case G_SEEK_SET:
+      case G_SEEK_END:
+        break;
+      default:
+        g_warning ("g_io_channel_seek_position: unknown seek type");
+        return G_IO_STATUS_ERROR;
+    }
+
+  if (channel->use_buffer)
+    {
+      status = g_io_channel_flush (channel, error);
+      if (status != G_IO_STATUS_NORMAL)
+        return status;
+    }
+
+  status = channel->funcs->io_seek (channel, offset, type, error);
+
+  if ((status == G_IO_STATUS_NORMAL) && (channel->use_buffer))
+    {
+      if (channel->read_buf)
+        g_string_truncate (channel->read_buf, 0);
+
+      /* Conversion state no longer matches position in file */
+      if (channel->read_cd != (GIConv) -1)
+        g_iconv (channel->read_cd, NULL, NULL, NULL, NULL);
+      if (channel->write_cd != (GIConv) -1)
+        g_iconv (channel->write_cd, NULL, NULL, NULL, NULL);
+
+      if (channel->encoded_read_buf)
+        {
+          g_assert (channel->encoded_read_buf->len == 0 || !channel->do_encode);
+          g_string_truncate (channel->encoded_read_buf, 0);
+        }
+
+      if (channel->partial_write_buf[0] != '\0')
+        {
+          g_warning ("Partial character at end of write buffer not flushed.\n");
+          channel->partial_write_buf[0] = '\0';
+        }
+    }
+
+  return status;
+}
+
+/**
+ * g_io_channel_flush:
+ * @channel: a #GIOChannel
+ * @error: location to store an error of type #GIOChannelError
+ *
+ * Flushes the write buffer for the GIOChannel.
+ *
+ * Return value: the status of the operation: One of
+ *   #G_IO_STATUS_NORMAL, #G_IO_STATUS_AGAIN, or
+ *   #G_IO_STATUS_ERROR.
+ **/
+GIOStatus
+g_io_channel_flush (GIOChannel	*channel,
+		    GError     **error)
+{
+  GIOStatus status;
+  gsize this_time = 1, bytes_written = 0;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL), G_IO_STATUS_ERROR);
+
+  if (channel->write_buf == NULL || channel->write_buf->len == 0)
+    return G_IO_STATUS_NORMAL;
+
+  do
+    {
+      g_assert (this_time > 0);
+
+      status = channel->funcs->io_write (channel,
+					 channel->write_buf->str + bytes_written,
+					 channel->write_buf->len - bytes_written,
+					 &this_time, error);
+      bytes_written += this_time;
+    }
+  while ((bytes_written < channel->write_buf->len)
+         && (status == G_IO_STATUS_NORMAL));
+
+  g_string_erase (channel->write_buf, 0, bytes_written);
+
+  return status;
+}
+
+/**
+ * g_io_channel_set_buffered:
+ * @channel: a #GIOChannel
+ * @buffered: whether to set the channel buffered or unbuffered
+ *
+ * The buffering state can only be set if the channel's encoding
+ * is %NULL. For any other encoding, the channel must be buffered.
+ *
+ * A buffered channel can only be set unbuffered if the channel's
+ * internal buffers have been flushed. Newly created channels or
+ * channels which have returned %G_IO_STATUS_EOF
+ * not require such a flush. For write-only channels, a call to
+ * g_io_channel_flush () is sufficient. For all other channels,
+ * the buffers may be flushed by a call to g_io_channel_seek_position ().
+ * This includes the possibility of seeking with seek type %G_SEEK_CUR
+ * and an offset of zero. Note that this means that socket-based
+ * channels cannot be set unbuffered once they have had data
+ * read from them.
+ *
+ * On unbuffered channels, it is safe to mix read and write
+ * calls from the new and old APIs, if this is necessary for
+ * maintaining old code.
+ *
+ * The default state of the channel is buffered.
+ **/
+void
+g_io_channel_set_buffered (GIOChannel *channel,
+                           gboolean    buffered)
+{
+  g_return_if_fail (channel != NULL);
+
+  if (channel->encoding != NULL)
+    {
+      g_warning ("Need to have NULL encoding to set the buffering state of the "
+                 "channel.\n");
+      return;
+    }
+
+  g_return_if_fail (!channel->read_buf || channel->read_buf->len == 0);
+  g_return_if_fail (!channel->write_buf || channel->write_buf->len == 0);
+
+  channel->use_buffer = buffered;
+}
+
+/**
+ * g_io_channel_get_buffered:
+ * @channel: a #GIOChannel
+ *
+ * Returns whether @channel is buffered.
+ *
+ * Return Value: %TRUE if the @channel is buffered. 
+ **/
+gboolean
+g_io_channel_get_buffered (GIOChannel *channel)
+{
+  g_return_val_if_fail (channel != NULL, FALSE);
+
+  return channel->use_buffer;
+}
+
+/**
+ * g_io_channel_set_encoding:
+ * @channel: a #GIOChannel
+ * @encoding: the encoding type
+ * @error: location to store an error of type #GConvertError
+ *
+ * Sets the encoding for the input/output of the channel. 
+ * The internal encoding is always UTF-8. The default encoding 
+ * for the external file is UTF-8.
+ *
+ * The encoding %NULL is safe to use with binary data.
+ *
+ * The encoding can only be set if one of the following conditions
+ * is true:
+ * <itemizedlist>
+ * <listitem><para>
+ *    The channel was just created, and has not been written to or read 
+ *    from yet.
+ * </para></listitem>
+ * <listitem><para>
+ *    The channel is write-only.
+ * </para></listitem>
+ * <listitem><para>
+ *    The channel is a file, and the file pointer was just
+ *    repositioned by a call to g_io_channel_seek_position().
+ *    (This flushes all the internal buffers.)
+ * </para></listitem>
+ * <listitem><para>
+ *    The current encoding is %NULL or UTF-8.
+ * </para></listitem>
+ * <listitem><para>
+ *    One of the (new API) read functions has just returned %G_IO_STATUS_EOF
+ *    (or, in the case of g_io_channel_read_to_end(), %G_IO_STATUS_NORMAL).
+ * </para></listitem>
+ * <listitem><para>
+ *    One of the functions g_io_channel_read_chars() or 
+ *    g_io_channel_read_unichar() has returned %G_IO_STATUS_AGAIN or 
+ *    %G_IO_STATUS_ERROR. This may be useful in the case of 
+ *    %G_CONVERT_ERROR_ILLEGAL_SEQUENCE.
+ *    Returning one of these statuses from g_io_channel_read_line(),
+ *    g_io_channel_read_line_string(), or g_io_channel_read_to_end()
+ *    does <emphasis>not</emphasis> guarantee that the encoding can 
+ *    be changed.
+ * </para></listitem>
+ * </itemizedlist>
+ * Channels which do not meet one of the above conditions cannot call
+ * g_io_channel_seek_position() with an offset of %G_SEEK_CUR, and, if 
+ * they are "seekable", cannot call g_io_channel_write_chars() after 
+ * calling one of the API "read" functions.
+ *
+ * Return Value: %G_IO_STATUS_NORMAL if the encoding was successfully set.
+ **/
+GIOStatus
+g_io_channel_set_encoding (GIOChannel	*channel,
+                           const gchar	*encoding,
+			   GError      **error)
+{
+  GIConv read_cd, write_cd;
+  gboolean did_encode;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL), G_IO_STATUS_ERROR);
+
+  /* Make sure the encoded buffers are empty */
+
+  g_return_val_if_fail (!channel->do_encode || !channel->encoded_read_buf ||
+			channel->encoded_read_buf->len == 0, G_IO_STATUS_ERROR);
+
+  if (!channel->use_buffer)
+    {
+      g_warning ("Need to set the channel buffered before setting the encoding.\n");
+      g_warning ("Assuming this is what you meant and acting accordingly.\n");
+
+      channel->use_buffer = TRUE;
+    }
+
+  if (channel->partial_write_buf[0] != '\0')
+    {
+      g_warning ("Partial character at end of write buffer not flushed.\n");
+      channel->partial_write_buf[0] = '\0';
+    }
+
+  did_encode = channel->do_encode;
+
+  if (!encoding || strcmp (encoding, "UTF8") == 0 || strcmp (encoding, "UTF-8") == 0)
+    {
+      channel->do_encode = FALSE;
+      read_cd = write_cd = (GIConv) -1;
+    }
+  else
+    {
+      gint err = 0;
+      const gchar *from_enc = NULL, *to_enc = NULL;
+
+      if (channel->is_readable)
+        {
+          read_cd = g_iconv_open ("UTF-8", encoding);
+
+          if (read_cd == (GIConv) -1)
+            {
+              err = errno;
+              from_enc = encoding;
+              to_enc = "UTF-8";
+            }
+        }
+      else
+        read_cd = (GIConv) -1;
+
+      if (channel->is_writeable && err == 0)
+        {
+          write_cd = g_iconv_open (encoding, "UTF-8");
+
+          if (write_cd == (GIConv) -1)
+            {
+              err = errno;
+              from_enc = "UTF-8";
+              to_enc = encoding;
+            }
+        }
+      else
+        write_cd = (GIConv) -1;
+
+      if (err != 0)
+        {
+          g_assert (from_enc);
+          g_assert (to_enc);
+
+          if (err == EINVAL)
+            g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
+                         _("Conversion from character set '%s' to '%s' is not supported"),
+                         from_enc, to_enc);
+          else
+            g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+                         _("Could not open converter from '%s' to '%s': %s"),
+                         from_enc, to_enc, g_strerror (err));
+
+          if (read_cd != (GIConv) -1)
+            g_iconv_close (read_cd);
+          if (write_cd != (GIConv) -1)
+            g_iconv_close (write_cd);
+
+          return G_IO_STATUS_ERROR;
+        }
+
+      channel->do_encode = TRUE;
+    }
+
+  /* The encoding is ok, so set the fields in channel */
+
+  if (channel->read_cd != (GIConv) -1)
+    g_iconv_close (channel->read_cd);
+  if (channel->write_cd != (GIConv) -1)
+    g_iconv_close (channel->write_cd);
+
+  if (channel->encoded_read_buf && channel->encoded_read_buf->len > 0)
+    {
+      g_assert (!did_encode); /* Encoding UTF-8, NULL doesn't use encoded_read_buf */
+
+      /* This is just validated UTF-8, so we can copy it back into read_buf
+       * so it can be encoded in whatever the new encoding is.
+       */
+
+      g_string_prepend_len (channel->read_buf, channel->encoded_read_buf->str,
+                            channel->encoded_read_buf->len);
+      g_string_truncate (channel->encoded_read_buf, 0);
+    }
+
+  channel->read_cd = read_cd;
+  channel->write_cd = write_cd;
+
+  g_free (channel->encoding);
+  channel->encoding = g_strdup (encoding);
+
+  return G_IO_STATUS_NORMAL;
+}
+
+/**
+ * g_io_channel_get_encoding:
+ * @channel: a #GIOChannel
+ *
+ * Gets the encoding for the input/output of the channel. 
+ * The internal encoding is always UTF-8. The encoding %NULL 
+ * makes the channel safe for binary data.
+ *
+ * Return value: A string containing the encoding, this string is
+ *   owned by GLib and must not be freed.
+ **/
+G_CONST_RETURN gchar*
+g_io_channel_get_encoding (GIOChannel *channel)
+{
+  g_return_val_if_fail (channel != NULL, NULL);
+
+  return channel->encoding;
+}
+
+static GIOStatus
+g_io_channel_fill_buffer (GIOChannel  *channel,
+                          GError     **err)
+{
+  gsize read_size, cur_len, oldlen;
+  GIOStatus status;
+
+  if (channel->is_seekable && channel->write_buf && channel->write_buf->len > 0)
+    {
+      status = g_io_channel_flush (channel, err);
+      if (status != G_IO_STATUS_NORMAL)
+        return status;
+    }
+  if (channel->is_seekable && channel->partial_write_buf[0] != '\0')
+    {
+      g_warning ("Partial character at end of write buffer not flushed.\n");
+      channel->partial_write_buf[0] = '\0';
+    }
+
+  if (!channel->read_buf)
+    channel->read_buf = g_string_sized_new (channel->buf_size);
+
+  cur_len = channel->read_buf->len;
+
+  g_string_set_size (channel->read_buf, channel->read_buf->len + channel->buf_size);
+
+  status = channel->funcs->io_read (channel, channel->read_buf->str + cur_len,
+                                    channel->buf_size, &read_size, err);
+
+  g_assert ((status == G_IO_STATUS_NORMAL) || (read_size == 0));
+
+  g_string_truncate (channel->read_buf, read_size + cur_len);
+
+  if ((status != G_IO_STATUS_NORMAL) &&
+      ((status != G_IO_STATUS_EOF) || (channel->read_buf->len == 0)))
+    return status;
+
+  g_assert (channel->read_buf->len > 0);
+
+  if (channel->encoded_read_buf)
+    oldlen = channel->encoded_read_buf->len;
+  else
+    {
+      oldlen = 0;
+      if (channel->encoding)
+        channel->encoded_read_buf = g_string_sized_new (channel->buf_size);
+    }
+
+  if (channel->do_encode)
+    {
+      gsize errnum, inbytes_left, outbytes_left;
+      gchar *inbuf, *outbuf;
+      int errval;
+
+      g_assert (channel->encoded_read_buf);
+
+reencode:
+
+      inbytes_left = channel->read_buf->len;
+      outbytes_left = MAX (channel->read_buf->len,
+                           channel->encoded_read_buf->allocated_len
+                           - channel->encoded_read_buf->len - 1); /* 1 for NULL */
+      outbytes_left = MAX (outbytes_left, 6);
+
+      inbuf = channel->read_buf->str;
+      g_string_set_size (channel->encoded_read_buf,
+                         channel->encoded_read_buf->len + outbytes_left);
+      outbuf = channel->encoded_read_buf->str + channel->encoded_read_buf->len
+               - outbytes_left;
+
+      errnum = g_iconv (channel->read_cd, &inbuf, &inbytes_left,
+			&outbuf, &outbytes_left);
+      errval = errno;
+
+      g_assert (inbuf + inbytes_left == channel->read_buf->str
+                + channel->read_buf->len);
+      g_assert (outbuf + outbytes_left == channel->encoded_read_buf->str
+                + channel->encoded_read_buf->len);
+
+      g_string_erase (channel->read_buf, 0,
+		      channel->read_buf->len - inbytes_left);
+      g_string_truncate (channel->encoded_read_buf,
+			 channel->encoded_read_buf->len - outbytes_left);
+
+      if (errnum == (gsize) -1)
+        {
+          switch (errval)
+            {
+              case EINVAL:
+                if ((oldlen == channel->encoded_read_buf->len)
+                  && (status == G_IO_STATUS_EOF))
+                  status = G_IO_STATUS_EOF;
+                else
+                  status = G_IO_STATUS_NORMAL;
+                break;
+              case E2BIG:
+                /* Buffer size at least 6, wrote at least on character */
+                g_assert (inbuf != channel->read_buf->str);
+                goto reencode;
+              case EILSEQ:
+                if (oldlen < channel->encoded_read_buf->len)
+                  status = G_IO_STATUS_NORMAL;
+                else
+                  {
+                    g_set_error_literal (err, G_CONVERT_ERROR,
+                      G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                      _("Invalid byte sequence in conversion input"));
+                    return G_IO_STATUS_ERROR;
+                  }
+                break;
+              default:
+                g_assert (errval != EBADF); /* The converter should be open */
+                g_set_error (err, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+                  _("Error during conversion: %s"), g_strerror (errval));
+                return G_IO_STATUS_ERROR;
+            }
+        }
+      g_assert ((status != G_IO_STATUS_NORMAL)
+               || (channel->encoded_read_buf->len > 0));
+    }
+  else if (channel->encoding) /* UTF-8 */
+    {
+      gchar *nextchar, *lastchar;
+
+      g_assert (channel->encoded_read_buf);
+
+      nextchar = channel->read_buf->str;
+      lastchar = channel->read_buf->str + channel->read_buf->len;
+
+      while (nextchar < lastchar)
+        {
+          gunichar val_char;
+
+          val_char = g_utf8_get_char_validated (nextchar, lastchar - nextchar);
+
+          switch (val_char)
+            {
+              case -2:
+                /* stop, leave partial character in buffer */
+                lastchar = nextchar;
+                break;
+              case -1:
+                if (oldlen < channel->encoded_read_buf->len)
+                  status = G_IO_STATUS_NORMAL;
+                else
+                  {
+                    g_set_error_literal (err, G_CONVERT_ERROR,
+                      G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                      _("Invalid byte sequence in conversion input"));
+                    status = G_IO_STATUS_ERROR;
+                  }
+                lastchar = nextchar;
+                break;
+              default:
+                nextchar = g_utf8_next_char (nextchar);
+                break;
+            }
+        }
+
+      if (lastchar > channel->read_buf->str)
+        {
+          gint copy_len = lastchar - channel->read_buf->str;
+
+          g_string_append_len (channel->encoded_read_buf, channel->read_buf->str,
+                               copy_len);
+          g_string_erase (channel->read_buf, 0, copy_len);
+        }
+    }
+
+  return status;
+}
+
+/**
+ * g_io_channel_read_line:
+ * @channel: a #GIOChannel
+ * @str_return: The line read from the #GIOChannel, including the
+ *              line terminator. This data should be freed with g_free()
+ *              when no longer needed. This is a nul-terminated string. 
+ *              If a @length of zero is returned, this will be %NULL instead.
+ * @length: location to store length of the read data, or %NULL
+ * @terminator_pos: location to store position of line terminator, or %NULL
+ * @error: A location to return an error of type #GConvertError
+ *         or #GIOChannelError
+ *
+ * Reads a line, including the terminating character(s),
+ * from a #GIOChannel into a newly-allocated string.
+ * @str_return will contain allocated memory if the return
+ * is %G_IO_STATUS_NORMAL.
+ *
+ * Return value: the status of the operation.
+ **/
+GIOStatus
+g_io_channel_read_line (GIOChannel  *channel,
+                        gchar      **str_return,
+                        gsize       *length,
+			gsize       *terminator_pos,
+		        GError     **error)
+{
+  GIOStatus status;
+  gsize got_length;
+  
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (str_return != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_readable, G_IO_STATUS_ERROR);
+
+  status = g_io_channel_read_line_backend (channel, &got_length, terminator_pos, error);
+
+  if (length)
+    *length = got_length;
+
+  if (status == G_IO_STATUS_NORMAL)
+    {
+      g_assert (USE_BUF (channel));
+      *str_return = g_strndup (USE_BUF (channel)->str, got_length);
+      g_string_erase (USE_BUF (channel), 0, got_length);
+    }
+  else
+    *str_return = NULL;
+  
+  return status;
+}
+
+/**
+ * g_io_channel_read_line_string:
+ * @channel: a #GIOChannel
+ * @buffer: a #GString into which the line will be written.
+ *          If @buffer already contains data, the old data will
+ *          be overwritten.
+ * @terminator_pos: location to store position of line terminator, or %NULL
+ * @error: a location to store an error of type #GConvertError
+ *         or #GIOChannelError
+ *
+ * Reads a line from a #GIOChannel, using a #GString as a buffer.
+ *
+ * Return value: the status of the operation.
+ **/
+GIOStatus
+g_io_channel_read_line_string (GIOChannel  *channel,
+                               GString	   *buffer,
+			       gsize       *terminator_pos,
+                               GError	  **error)
+{
+  gsize length;
+  GIOStatus status;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (buffer != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_readable, G_IO_STATUS_ERROR);
+
+  if (buffer->len > 0)
+    g_string_truncate (buffer, 0); /* clear out the buffer */
+
+  status = g_io_channel_read_line_backend (channel, &length, terminator_pos, error);
+
+  if (status == G_IO_STATUS_NORMAL)
+    {
+      g_assert (USE_BUF (channel));
+      g_string_append_len (buffer, USE_BUF (channel)->str, length);
+      g_string_erase (USE_BUF (channel), 0, length);
+    }
+
+  return status;
+}
+
+
+static GIOStatus
+g_io_channel_read_line_backend (GIOChannel  *channel,
+                                gsize       *length,
+                                gsize       *terminator_pos,
+                                GError     **error)
+{
+  GIOStatus status;
+  gsize checked_to, line_term_len, line_length, got_term_len;
+  gboolean first_time = TRUE;
+
+  if (!channel->use_buffer)
+    {
+      /* Can't do a raw read in read_line */
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+                           _("Can't do a raw read in g_io_channel_read_line_string"));
+      return G_IO_STATUS_ERROR;
+    }
+
+  status = G_IO_STATUS_NORMAL;
+
+  if (channel->line_term)
+    line_term_len = channel->line_term_len;
+  else
+    line_term_len = 3;
+    /* This value used for setting checked_to, it's the longest of the four
+     * we autodetect for.
+     */
+
+  checked_to = 0;
+
+  while (TRUE)
+    {
+      gchar *nextchar, *lastchar;
+      GString *use_buf;
+
+      if (!first_time || (BUF_LEN (USE_BUF (channel)) == 0))
+        {
+read_again:
+          status = g_io_channel_fill_buffer (channel, error);
+          switch (status)
+            {
+              case G_IO_STATUS_NORMAL:
+                if (BUF_LEN (USE_BUF (channel)) == 0)
+                  /* Can happen when using conversion and only read
+                   * part of a character
+                   */
+                  {
+                    first_time = FALSE;
+                    continue;
+                  }
+                break;
+              case G_IO_STATUS_EOF:
+                if (BUF_LEN (USE_BUF (channel)) == 0)
+                  {
+                    if (length)
+                      *length = 0;
+
+                    if (channel->encoding && channel->read_buf->len != 0)
+                      {
+                        g_set_error_literal (error, G_CONVERT_ERROR,
+                                             G_CONVERT_ERROR_PARTIAL_INPUT,
+                                             _("Leftover unconverted data in "
+                                               "read buffer"));
+                        return G_IO_STATUS_ERROR;
+                      }
+                    else
+                      return G_IO_STATUS_EOF;
+                  }
+                break;
+              default:
+                if (length)
+                  *length = 0;
+                return status;
+            }
+        }
+
+      g_assert (BUF_LEN (USE_BUF (channel)) != 0);
+
+      use_buf = USE_BUF (channel); /* The buffer has been created by this point */
+
+      first_time = FALSE;
+
+      lastchar = use_buf->str + use_buf->len;
+
+      for (nextchar = use_buf->str + checked_to; nextchar < lastchar;
+           channel->encoding ? nextchar = g_utf8_next_char (nextchar) : nextchar++)
+        {
+          if (channel->line_term)
+            {
+              if (memcmp (channel->line_term, nextchar, line_term_len) == 0)
+                {
+                  line_length = nextchar - use_buf->str;
+                  got_term_len = line_term_len;
+                  goto done;
+                }
+            }
+          else /* auto detect */
+            {
+              switch (*nextchar)
+                {
+                  case '\n': /* unix */
+                    line_length = nextchar - use_buf->str;
+                    got_term_len = 1;
+                    goto done;
+                  case '\r': /* Warning: do not use with sockets */
+                    line_length = nextchar - use_buf->str;
+                    if ((nextchar == lastchar - 1) && (status != G_IO_STATUS_EOF)
+                       && (lastchar == use_buf->str + use_buf->len))
+                      goto read_again; /* Try to read more data */
+                    if ((nextchar < lastchar - 1) && (*(nextchar + 1) == '\n')) /* dos */
+                      got_term_len = 2;
+                    else /* mac */
+                      got_term_len = 1;
+                    goto done;
+                  case '\xe2': /* Unicode paragraph separator */
+                    if (strncmp ("\xe2\x80\xa9", nextchar, 3) == 0)
+                      {
+                        line_length = nextchar - use_buf->str;
+                        got_term_len = 3;
+                        goto done;
+                      }
+                    break;
+                  case '\0': /* Embeded null in input */
+                    line_length = nextchar - use_buf->str;
+                    got_term_len = 1;
+                    goto done;
+                  default: /* no match */
+                    break;
+                }
+            }
+        }
+
+      /* If encoding != NULL, valid UTF-8, didn't overshoot */
+      g_assert (nextchar == lastchar);
+
+      /* Check for EOF */
+
+      if (status == G_IO_STATUS_EOF)
+        {
+          if (channel->encoding && channel->read_buf->len > 0)
+            {
+              g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                                   _("Channel terminates in a partial character"));
+              return G_IO_STATUS_ERROR;
+            }
+          line_length = use_buf->len;
+          got_term_len = 0;
+          break;
+        }
+
+      if (use_buf->len > line_term_len - 1)
+	checked_to = use_buf->len - (line_term_len - 1);
+      else
+	checked_to = 0;
+    }
+
+done:
+
+  if (terminator_pos)
+    *terminator_pos = line_length;
+
+  if (length)
+    *length = line_length + got_term_len;
+
+  return G_IO_STATUS_NORMAL;
+}
+
+/**
+ * g_io_channel_read_to_end:
+ * @channel: a #GIOChannel
+ * @str_return: Location to store a pointer to a string holding
+ *              the remaining data in the #GIOChannel. This data should
+ *              be freed with g_free() when no longer needed. This
+ *              data is terminated by an extra nul character, but there 
+ *              may be other nuls in the intervening data.
+ * @length: location to store length of the data
+ * @error: location to return an error of type #GConvertError
+ *         or #GIOChannelError
+ *
+ * Reads all the remaining data from the file.
+ *
+ * Return value: %G_IO_STATUS_NORMAL on success. 
+ *     This function never returns %G_IO_STATUS_EOF.
+ **/
+GIOStatus
+g_io_channel_read_to_end (GIOChannel  *channel,
+                          gchar      **str_return,
+                          gsize	      *length,
+                          GError     **error)
+{
+  GIOStatus status;
+    
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+    G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_readable, G_IO_STATUS_ERROR);
+
+  if (str_return)
+    *str_return = NULL;
+  if (length)
+    *length = 0;
+
+  if (!channel->use_buffer)
+    {
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+                           _("Can't do a raw read in g_io_channel_read_to_end"));
+      return G_IO_STATUS_ERROR;
+    }
+
+  do
+    status = g_io_channel_fill_buffer (channel, error);
+  while (status == G_IO_STATUS_NORMAL);
+
+  if (status != G_IO_STATUS_EOF)
+    return status;
+
+  if (channel->encoding && channel->read_buf->len > 0)
+    {
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                           _("Channel terminates in a partial character"));
+      return G_IO_STATUS_ERROR;
+    }
+
+  if (USE_BUF (channel) == NULL)
+    {
+      /* length is already set to zero */
+      if (str_return)
+        *str_return = g_strdup ("");
+    }
+  else
+    {
+      if (length)
+        *length = USE_BUF (channel)->len;
+
+      if (str_return)
+        *str_return = g_string_free (USE_BUF (channel), FALSE);
+      else
+        g_string_free (USE_BUF (channel), TRUE);
+
+      if (channel->encoding)
+	channel->encoded_read_buf = NULL;
+      else
+	channel->read_buf = NULL;
+    }
+
+  return G_IO_STATUS_NORMAL;
+}
+
+/**
+ * g_io_channel_read_chars:
+ * @channel: a #GIOChannel
+ * @buf: a buffer to read data into
+ * @count: the size of the buffer. Note that the buffer may
+ *         not be complelely filled even if there is data
+ *         in the buffer if the remaining data is not a
+ *         complete character.
+ * @bytes_read: The number of bytes read. This may be zero even on
+ *              success if count < 6 and the channel's encoding is non-%NULL.
+ *              This indicates that the next UTF-8 character is too wide for
+ *              the buffer.
+ * @error: a location to return an error of type #GConvertError
+ *         or #GIOChannelError.
+ *
+ * Replacement for g_io_channel_read() with the new API.
+ *
+ * Return value: the status of the operation.
+ **/
+GIOStatus
+g_io_channel_read_chars (GIOChannel  *channel,
+                         gchar	     *buf,
+                         gsize	      count,
+			 gsize       *bytes_read,
+                         GError     **error)
+{
+  GIOStatus status;
+  gsize got_bytes;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_readable, G_IO_STATUS_ERROR);
+
+  if (count == 0)
+    {
+      *bytes_read = 0;
+      return G_IO_STATUS_NORMAL;
+    }
+  g_return_val_if_fail (buf != NULL, G_IO_STATUS_ERROR);
+
+  if (!channel->use_buffer)
+    {
+      gsize tmp_bytes;
+      
+      g_assert (!channel->read_buf || channel->read_buf->len == 0);
+
+      status = channel->funcs->io_read (channel, buf, count, &tmp_bytes, error);
+      
+      if (bytes_read)
+	*bytes_read = tmp_bytes;
+
+      return status;
+    }
+
+  status = G_IO_STATUS_NORMAL;
+
+  while (BUF_LEN (USE_BUF (channel)) < count && status == G_IO_STATUS_NORMAL)
+    status = g_io_channel_fill_buffer (channel, error);
+
+  /* Only return an error if we have no data */
+
+  if (BUF_LEN (USE_BUF (channel)) == 0)
+    {
+      g_assert (status != G_IO_STATUS_NORMAL);
+
+      if (status == G_IO_STATUS_EOF && channel->encoding
+          && BUF_LEN (channel->read_buf) > 0)
+        {
+          g_set_error_literal (error, G_CONVERT_ERROR,
+                               G_CONVERT_ERROR_PARTIAL_INPUT,
+                               _("Leftover unconverted data in read buffer"));
+          status = G_IO_STATUS_ERROR;
+        }
+
+      if (bytes_read)
+        *bytes_read = 0;
+
+      return status;
+    }
+
+  if (status == G_IO_STATUS_ERROR)
+    g_clear_error (error);
+
+  got_bytes = MIN (count, BUF_LEN (USE_BUF (channel)));
+
+  g_assert (got_bytes > 0);
+
+  if (channel->encoding)
+    /* Don't validate for NULL encoding, binary safe */
+    {
+      gchar *nextchar, *prevchar;
+
+      g_assert (USE_BUF (channel) == channel->encoded_read_buf);
+
+      nextchar = channel->encoded_read_buf->str;
+
+      do
+        {
+          prevchar = nextchar;
+          nextchar = g_utf8_next_char (nextchar);
+          g_assert (nextchar != prevchar); /* Possible for *prevchar of -1 or -2 */
+        }
+      while (nextchar < channel->encoded_read_buf->str + got_bytes);
+
+      if (nextchar > channel->encoded_read_buf->str + got_bytes)
+        got_bytes = prevchar - channel->encoded_read_buf->str;
+
+      g_assert (got_bytes > 0 || count < 6);
+    }
+
+  memcpy (buf, USE_BUF (channel)->str, got_bytes);
+  g_string_erase (USE_BUF (channel), 0, got_bytes);
+
+  if (bytes_read)
+    *bytes_read = got_bytes;
+
+  return G_IO_STATUS_NORMAL;
+}
+
+/**
+ * g_io_channel_read_unichar:
+ * @channel: a #GIOChannel
+ * @thechar: a location to return a character
+ * @error: a location to return an error of type #GConvertError
+ *         or #GIOChannelError
+ *
+ * Reads a Unicode character from @channel.
+ * This function cannot be called on a channel with %NULL encoding.
+ *
+ * Return value: a #GIOStatus
+ **/
+GIOStatus
+g_io_channel_read_unichar (GIOChannel  *channel,
+			   gunichar    *thechar,
+			   GError     **error)
+{
+  GIOStatus status = G_IO_STATUS_NORMAL;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->encoding != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_readable, G_IO_STATUS_ERROR);
+
+  while (BUF_LEN (channel->encoded_read_buf) == 0 && status == G_IO_STATUS_NORMAL)
+    status = g_io_channel_fill_buffer (channel, error);
+
+  /* Only return an error if we have no data */
+
+  if (BUF_LEN (USE_BUF (channel)) == 0)
+    {
+      g_assert (status != G_IO_STATUS_NORMAL);
+
+      if (status == G_IO_STATUS_EOF && BUF_LEN (channel->read_buf) > 0)
+        {
+          g_set_error_literal (error, G_CONVERT_ERROR,
+                               G_CONVERT_ERROR_PARTIAL_INPUT,
+                               _("Leftover unconverted data in read buffer"));
+          status = G_IO_STATUS_ERROR;
+        }
+
+      if (thechar)
+        *thechar = (gunichar) -1;
+
+      return status;
+    }
+
+  if (status == G_IO_STATUS_ERROR)
+    g_clear_error (error);
+
+  if (thechar)
+    *thechar = g_utf8_get_char (channel->encoded_read_buf->str);
+
+  g_string_erase (channel->encoded_read_buf, 0,
+                  g_utf8_next_char (channel->encoded_read_buf->str)
+                  - channel->encoded_read_buf->str);
+
+  return G_IO_STATUS_NORMAL;
+}
+
+/**
+ * g_io_channel_write_chars:
+ * @channel: a #GIOChannel
+ * @buf: a buffer to write data from
+ * @count: the size of the buffer. If -1, the buffer
+ *         is taken to be a nul-terminated string.
+ * @bytes_written: The number of bytes written. This can be nonzero
+ *                 even if the return value is not %G_IO_STATUS_NORMAL.
+ *                 If the return value is %G_IO_STATUS_NORMAL and the
+ *                 channel is blocking, this will always be equal
+ *                 to @count if @count >= 0.
+ * @error: a location to return an error of type #GConvertError
+ *         or #GIOChannelError
+ *
+ * Replacement for g_io_channel_write() with the new API.
+ *
+ * On seekable channels with encodings other than %NULL or UTF-8, generic
+ * mixing of reading and writing is not allowed. A call to g_io_channel_write_chars ()
+ * may only be made on a channel from which data has been read in the
+ * cases described in the documentation for g_io_channel_set_encoding ().
+ *
+ * Return value: the status of the operation.
+ **/
+GIOStatus
+g_io_channel_write_chars (GIOChannel   *channel,
+                          const gchar  *buf,
+                          gssize        count,
+			  gsize        *bytes_written,
+                          GError      **error)
+{
+  GIOStatus status;
+  gssize wrote_bytes = 0;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_writeable, G_IO_STATUS_ERROR);
+
+  if ((count < 0) && buf)
+    count = strlen (buf);
+  
+  if (count == 0)
+    {
+      if (bytes_written)
+        *bytes_written = 0;
+      return G_IO_STATUS_NORMAL;
+    }
+
+  g_return_val_if_fail (buf != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (count > 0, G_IO_STATUS_ERROR);
+
+  /* Raw write case */
+
+  if (!channel->use_buffer)
+    {
+      gsize tmp_bytes;
+      
+      g_assert (!channel->write_buf || channel->write_buf->len == 0);
+      g_assert (channel->partial_write_buf[0] == '\0');
+      
+      status = channel->funcs->io_write (channel, buf, count, &tmp_bytes, error);
+
+      if (bytes_written)
+	*bytes_written = tmp_bytes;
+
+      return status;
+    }
+
+  /* General case */
+
+  if (channel->is_seekable && (( BUF_LEN (channel->read_buf) > 0)
+    || (BUF_LEN (channel->encoded_read_buf) > 0)))
+    {
+      if (channel->do_encode && BUF_LEN (channel->encoded_read_buf) > 0)
+        {
+          g_warning("Mixed reading and writing not allowed on encoded files");
+          return G_IO_STATUS_ERROR;
+        }
+      status = g_io_channel_seek_position (channel, 0, G_SEEK_CUR, error);
+      if (status != G_IO_STATUS_NORMAL)
+        {
+          if (bytes_written)
+            *bytes_written = 0;
+          return status;
+        }
+    }
+
+  if (!channel->write_buf)
+    channel->write_buf = g_string_sized_new (channel->buf_size);
+
+  while (wrote_bytes < count)
+    {
+      gsize space_in_buf;
+
+      /* If the buffer is full, try a write immediately. In
+       * the nonblocking case, this prevents the user from
+       * writing just a little bit to the buffer every time
+       * and never receiving an EAGAIN.
+       */
+
+      if (channel->write_buf->len >= channel->buf_size - MAX_CHAR_SIZE)
+        {
+          gsize did_write = 0, this_time;
+
+          do
+            {
+              status = channel->funcs->io_write (channel, channel->write_buf->str
+                                                 + did_write, channel->write_buf->len
+                                                 - did_write, &this_time, error);
+              did_write += this_time;
+            }
+          while (status == G_IO_STATUS_NORMAL &&
+                 did_write < MIN (channel->write_buf->len, MAX_CHAR_SIZE));
+
+          g_string_erase (channel->write_buf, 0, did_write);
+
+          if (status != G_IO_STATUS_NORMAL)
+            {
+              if (status == G_IO_STATUS_AGAIN && wrote_bytes > 0)
+                status = G_IO_STATUS_NORMAL;
+              if (bytes_written)
+                *bytes_written = wrote_bytes;
+              return status;
+            }
+        }
+
+      space_in_buf = MAX (channel->buf_size, channel->write_buf->allocated_len - 1)
+                     - channel->write_buf->len; /* 1 for NULL */
+
+      /* This is only true because g_io_channel_set_buffer_size ()
+       * ensures that channel->buf_size >= MAX_CHAR_SIZE.
+       */
+      g_assert (space_in_buf >= MAX_CHAR_SIZE);
+
+      if (!channel->encoding)
+        {
+          gssize write_this = MIN (space_in_buf, count - wrote_bytes);
+
+          g_string_append_len (channel->write_buf, buf, write_this);
+          buf += write_this;
+          wrote_bytes += write_this;
+        }
+      else
+        {
+          const gchar *from_buf;
+          gsize from_buf_len, from_buf_old_len, left_len;
+          gsize err;
+          gint errnum;
+
+          if (channel->partial_write_buf[0] != '\0')
+            {
+              g_assert (wrote_bytes == 0);
+
+              from_buf = channel->partial_write_buf;
+              from_buf_old_len = strlen (channel->partial_write_buf);
+              g_assert (from_buf_old_len > 0);
+              from_buf_len = MIN (6, from_buf_old_len + count);
+
+              memcpy (channel->partial_write_buf + from_buf_old_len, buf,
+                      from_buf_len - from_buf_old_len);
+            }
+          else
+            {
+              from_buf = buf;
+              from_buf_len = count - wrote_bytes;
+              from_buf_old_len = 0;
+            }
+
+reconvert:
+
+          if (!channel->do_encode) /* UTF-8 encoding */
+            {
+              const gchar *badchar;
+              gsize try_len = MIN (from_buf_len, space_in_buf);
+
+              /* UTF-8, just validate, emulate g_iconv */
+
+              if (!g_utf8_validate (from_buf, try_len, &badchar))
+                {
+                  gunichar try_char;
+                  gsize incomplete_len = from_buf + try_len - badchar;
+
+                  left_len = from_buf + from_buf_len - badchar;
+
+                  try_char = g_utf8_get_char_validated (badchar, incomplete_len);
+
+                  switch (try_char)
+                    {
+                      case -2:
+                        g_assert (incomplete_len < 6);
+                        if (try_len == from_buf_len)
+                          {
+                            errnum = EINVAL;
+                            err = (gsize) -1;
+                          }
+                        else
+                          {
+                            errnum = 0;
+                            err = (gsize) 0;
+                          }
+                        break;
+                      case -1:
+                        g_warning ("Invalid UTF-8 passed to g_io_channel_write_chars().");
+                        /* FIXME bail here? */
+                        errnum = EILSEQ;
+                        err = (gsize) -1;
+                        break;
+                      default:
+                        g_assert_not_reached ();
+                        err = (gsize) -1;
+                        errnum = 0; /* Don't confunse the compiler */
+                    }
+                }
+              else
+                {
+                  err = (gsize) 0;
+                  errnum = 0;
+                  left_len = from_buf_len - try_len;
+                }
+
+              g_string_append_len (channel->write_buf, from_buf,
+                                   from_buf_len - left_len);
+              from_buf += from_buf_len - left_len;
+            }
+          else
+            {
+               gchar *outbuf;
+
+               left_len = from_buf_len;
+               g_string_set_size (channel->write_buf, channel->write_buf->len
+                                  + space_in_buf);
+               outbuf = channel->write_buf->str + channel->write_buf->len
+                        - space_in_buf;
+               err = g_iconv (channel->write_cd, (gchar **) &from_buf, &left_len,
+                              &outbuf, &space_in_buf);
+               errnum = errno;
+               g_string_truncate (channel->write_buf, channel->write_buf->len
+                                  - space_in_buf);
+            }
+
+          if (err == (gsize) -1)
+            {
+              switch (errnum)
+        	{
+                  case EINVAL:
+                    g_assert (left_len < 6);
+
+                    if (from_buf_old_len == 0)
+                      {
+                        /* Not from partial_write_buf */
+
+                        memcpy (channel->partial_write_buf, from_buf, left_len);
+                        channel->partial_write_buf[left_len] = '\0';
+                        if (bytes_written)
+                          *bytes_written = count;
+                        return G_IO_STATUS_NORMAL;
+                      }
+
+                    /* Working in partial_write_buf */
+
+                    if (left_len == from_buf_len)
+                      {
+                        /* Didn't convert anything, must still have
+                         * less than a full character
+                         */
+
+                        g_assert (count == from_buf_len - from_buf_old_len);
+
+                        channel->partial_write_buf[from_buf_len] = '\0';
+
+                        if (bytes_written)
+                          *bytes_written = count;
+
+                        return G_IO_STATUS_NORMAL;
+                      }
+
+                    g_assert (from_buf_len - left_len >= from_buf_old_len);
+
+                    /* We converted all the old data. This is fine */
+
+                    break;
+                  case E2BIG:
+                    if (from_buf_len == left_len)
+                      {
+                        /* Nothing was written, add enough space for
+                         * at least one character.
+                         */
+                        space_in_buf += MAX_CHAR_SIZE;
+                        goto reconvert;
+                      }
+                    break;
+                  case EILSEQ:
+                    g_set_error_literal (error, G_CONVERT_ERROR,
+                      G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                      _("Invalid byte sequence in conversion input"));
+                    if (from_buf_old_len > 0 && from_buf_len == left_len)
+                      g_warning ("Illegal sequence due to partial character "
+                                 "at the end of a previous write.\n");
+                    else
+                      wrote_bytes += from_buf_len - left_len - from_buf_old_len;
+                    if (bytes_written)
+                      *bytes_written = wrote_bytes;
+                    channel->partial_write_buf[0] = '\0';
+                    return G_IO_STATUS_ERROR;
+                  default:
+                    g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
+                      _("Error during conversion: %s"), g_strerror (errnum));
+                    if (from_buf_len >= left_len + from_buf_old_len)
+                      wrote_bytes += from_buf_len - left_len - from_buf_old_len;
+                    if (bytes_written)
+                      *bytes_written = wrote_bytes;
+                    channel->partial_write_buf[0] = '\0';
+                    return G_IO_STATUS_ERROR;
+                }
+            }
+
+          g_assert (from_buf_len - left_len >= from_buf_old_len);
+
+          wrote_bytes += from_buf_len - left_len - from_buf_old_len;
+
+          if (from_buf_old_len > 0)
+            {
+              /* We were working in partial_write_buf */
+
+              buf += from_buf_len - left_len - from_buf_old_len;
+              channel->partial_write_buf[0] = '\0';
+            }
+          else
+            buf = from_buf;
+        }
+    }
+
+  if (bytes_written)
+    *bytes_written = count;
+
+  return G_IO_STATUS_NORMAL;
+}
+
+/**
+ * g_io_channel_write_unichar:
+ * @channel: a #GIOChannel
+ * @thechar: a character
+ * @error: location to return an error of type #GConvertError
+ *         or #GIOChannelError
+ *
+ * Writes a Unicode character to @channel.
+ * This function cannot be called on a channel with %NULL encoding.
+ *
+ * Return value: a #GIOStatus
+ **/
+GIOStatus
+g_io_channel_write_unichar (GIOChannel  *channel,
+			    gunichar     thechar,
+			    GError     **error)
+{
+  GIOStatus status;
+  gchar static_buf[6];
+  gsize char_len, wrote_len;
+
+  g_return_val_if_fail (channel != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->encoding != NULL, G_IO_STATUS_ERROR);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL),
+			G_IO_STATUS_ERROR);
+  g_return_val_if_fail (channel->is_writeable, G_IO_STATUS_ERROR);
+
+  char_len = g_unichar_to_utf8 (thechar, static_buf);
+
+  if (channel->partial_write_buf[0] != '\0')
+    {
+      g_warning ("Partial charater written before writing unichar.\n");
+      channel->partial_write_buf[0] = '\0';
+    }
+
+  status = g_io_channel_write_chars (channel, static_buf,
+                                     char_len, &wrote_len, error);
+
+  /* We validate UTF-8, so we can't get a partial write */
+
+  g_assert (wrote_len == char_len || status != G_IO_STATUS_NORMAL);
+
+  return status;
+}
+
+/**
+ * g_io_channel_error_quark:
+ *
+ * Return value: the quark used as %G_IO_CHANNEL_ERROR
+ **/
+GQuark
+g_io_channel_error_quark (void)
+{
+  return g_quark_from_static_string ("g-io-channel-error-quark");
+}
+
+#define __G_IOCHANNEL_C__
+#include "galiasdef.c"
diff --git a/glib/giochannel.h b/glib/giochannel.h
new file mode 100644
index 0000000..2a40aa2
--- /dev/null
+++ b/glib/giochannel.h
@@ -0,0 +1,366 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_IOCHANNEL_H__
+#define __G_IOCHANNEL_H__
+
+#include <glib/gconvert.h>
+#include <glib/gmain.h>
+#include <glib/gstring.h>
+
+G_BEGIN_DECLS
+
+/* GIOChannel
+ */
+
+typedef struct _GIOChannel	GIOChannel;
+typedef struct _GIOFuncs        GIOFuncs;
+
+typedef enum
+{
+  G_IO_ERROR_NONE,
+  G_IO_ERROR_AGAIN,
+  G_IO_ERROR_INVAL,
+  G_IO_ERROR_UNKNOWN
+} GIOError;
+
+#define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
+
+typedef enum
+{
+  /* Derived from errno */
+  G_IO_CHANNEL_ERROR_FBIG,
+  G_IO_CHANNEL_ERROR_INVAL,
+  G_IO_CHANNEL_ERROR_IO,
+  G_IO_CHANNEL_ERROR_ISDIR,
+  G_IO_CHANNEL_ERROR_NOSPC,
+  G_IO_CHANNEL_ERROR_NXIO,
+  G_IO_CHANNEL_ERROR_OVERFLOW,
+  G_IO_CHANNEL_ERROR_PIPE,
+  /* Other */
+  G_IO_CHANNEL_ERROR_FAILED
+} GIOChannelError;
+
+typedef enum
+{
+  G_IO_STATUS_ERROR,
+  G_IO_STATUS_NORMAL,
+  G_IO_STATUS_EOF,
+  G_IO_STATUS_AGAIN
+} GIOStatus;
+
+typedef enum
+{
+  G_SEEK_CUR,
+  G_SEEK_SET,
+  G_SEEK_END
+} GSeekType;
+
+typedef enum
+{
+  G_IO_IN	GLIB_SYSDEF_POLLIN,
+  G_IO_OUT	GLIB_SYSDEF_POLLOUT,
+  G_IO_PRI	GLIB_SYSDEF_POLLPRI,
+  G_IO_ERR	GLIB_SYSDEF_POLLERR,
+  G_IO_HUP	GLIB_SYSDEF_POLLHUP,
+  G_IO_NVAL	GLIB_SYSDEF_POLLNVAL
+} GIOCondition;
+
+typedef enum
+{
+  G_IO_FLAG_APPEND = 1 << 0,
+  G_IO_FLAG_NONBLOCK = 1 << 1,
+  G_IO_FLAG_IS_READABLE = 1 << 2,	/* Read only flag */
+  G_IO_FLAG_IS_WRITEABLE = 1 << 3,	/* Read only flag */
+  G_IO_FLAG_IS_SEEKABLE = 1 << 4,	/* Read only flag */
+  G_IO_FLAG_MASK = (1 << 5) - 1,
+  G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK,
+  G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK
+} GIOFlags;
+
+struct _GIOChannel
+{
+  /*< private >*/
+  gint ref_count;
+  GIOFuncs *funcs;
+
+  gchar *encoding;
+  GIConv read_cd;
+  GIConv write_cd;
+  gchar *line_term;		/* String which indicates the end of a line of text */
+  guint line_term_len;		/* So we can have null in the line term */
+
+  gsize buf_size;
+  GString *read_buf;		/* Raw data from the channel */
+  GString *encoded_read_buf;    /* Channel data converted to UTF-8 */
+  GString *write_buf;		/* Data ready to be written to the file */
+  gchar partial_write_buf[6];	/* UTF-8 partial characters, null terminated */
+
+  /* Group the flags together, immediately after partial_write_buf, to save memory */
+
+  guint use_buffer     : 1;	/* The encoding uses the buffers */
+  guint do_encode      : 1;	/* The encoding uses the GIConv coverters */
+  guint close_on_unref : 1;	/* Close the channel on final unref */
+  guint is_readable    : 1;	/* Cached GIOFlag */
+  guint is_writeable   : 1;	/* ditto */
+  guint is_seekable    : 1;	/* ditto */
+
+  gpointer reserved1;	
+  gpointer reserved2;	
+};
+
+typedef gboolean (*GIOFunc) (GIOChannel   *source,
+			     GIOCondition  condition,
+			     gpointer      data);
+struct _GIOFuncs
+{
+  GIOStatus (*io_read)           (GIOChannel   *channel, 
+			          gchar        *buf, 
+				  gsize         count,
+				  gsize        *bytes_read,
+				  GError      **err);
+  GIOStatus (*io_write)          (GIOChannel   *channel, 
+				  const gchar  *buf, 
+				  gsize         count,
+				  gsize        *bytes_written,
+				  GError      **err);
+  GIOStatus (*io_seek)           (GIOChannel   *channel, 
+				  gint64        offset, 
+				  GSeekType     type,
+				  GError      **err);
+  GIOStatus  (*io_close)         (GIOChannel   *channel,
+				  GError      **err);
+  GSource*   (*io_create_watch)  (GIOChannel   *channel,
+				  GIOCondition  condition);
+  void       (*io_free)          (GIOChannel   *channel);
+  GIOStatus  (*io_set_flags)     (GIOChannel   *channel,
+                                  GIOFlags      flags,
+				  GError      **err);
+  GIOFlags   (*io_get_flags)     (GIOChannel   *channel);
+};
+
+void        g_io_channel_init   (GIOChannel    *channel);
+GIOChannel *g_io_channel_ref    (GIOChannel    *channel);
+void        g_io_channel_unref  (GIOChannel    *channel);
+
+#ifndef G_DISABLE_DEPRECATED
+GIOError    g_io_channel_read   (GIOChannel    *channel, 
+			         gchar         *buf, 
+			         gsize          count,
+			         gsize         *bytes_read);
+GIOError  g_io_channel_write    (GIOChannel    *channel, 
+			         const gchar   *buf, 
+			         gsize          count,
+			         gsize         *bytes_written);
+GIOError  g_io_channel_seek     (GIOChannel    *channel,
+			         gint64         offset, 
+			         GSeekType      type);
+void      g_io_channel_close    (GIOChannel    *channel);
+#endif /* G_DISABLE_DEPRECATED */
+
+GIOStatus g_io_channel_shutdown (GIOChannel      *channel,
+				 gboolean         flush,
+				 GError         **err);
+guint     g_io_add_watch_full   (GIOChannel      *channel,
+				 gint             priority,
+				 GIOCondition     condition,
+				 GIOFunc          func,
+				 gpointer         user_data,
+				 GDestroyNotify   notify);
+GSource * g_io_create_watch     (GIOChannel      *channel,
+				 GIOCondition     condition);
+guint     g_io_add_watch        (GIOChannel      *channel,
+				 GIOCondition     condition,
+				 GIOFunc          func,
+				 gpointer         user_data);
+
+/* character encoding conversion involved functions.
+ */
+
+void                  g_io_channel_set_buffer_size      (GIOChannel   *channel,
+							 gsize         size);
+gsize                 g_io_channel_get_buffer_size      (GIOChannel   *channel);
+GIOCondition          g_io_channel_get_buffer_condition (GIOChannel   *channel);
+GIOStatus             g_io_channel_set_flags            (GIOChannel   *channel,
+							 GIOFlags      flags,
+							 GError      **error);
+GIOFlags              g_io_channel_get_flags            (GIOChannel   *channel);
+void                  g_io_channel_set_line_term        (GIOChannel   *channel,
+							 const gchar  *line_term,
+							 gint          length);
+G_CONST_RETURN gchar* g_io_channel_get_line_term        (GIOChannel   *channel,
+							 gint         *length);
+void		      g_io_channel_set_buffered		(GIOChannel   *channel,
+							 gboolean      buffered);
+gboolean	      g_io_channel_get_buffered		(GIOChannel   *channel);
+GIOStatus             g_io_channel_set_encoding         (GIOChannel   *channel,
+							 const gchar  *encoding,
+							 GError      **error);
+G_CONST_RETURN gchar* g_io_channel_get_encoding         (GIOChannel   *channel);
+void                  g_io_channel_set_close_on_unref	(GIOChannel   *channel,
+							 gboolean      do_close);
+gboolean              g_io_channel_get_close_on_unref	(GIOChannel   *channel);
+
+
+GIOStatus   g_io_channel_flush            (GIOChannel   *channel,
+					   GError      **error);
+GIOStatus   g_io_channel_read_line        (GIOChannel   *channel,
+					   gchar       **str_return,
+					   gsize        *length,
+					   gsize        *terminator_pos,
+					   GError      **error);
+GIOStatus   g_io_channel_read_line_string (GIOChannel   *channel,
+					   GString      *buffer,
+					   gsize        *terminator_pos,
+					   GError      **error);
+GIOStatus   g_io_channel_read_to_end      (GIOChannel   *channel,
+					   gchar       **str_return,
+					   gsize        *length,
+					   GError      **error);
+GIOStatus   g_io_channel_read_chars       (GIOChannel   *channel,
+					   gchar        *buf,
+					   gsize         count,
+					   gsize        *bytes_read,
+					   GError      **error);
+GIOStatus   g_io_channel_read_unichar     (GIOChannel   *channel,
+					   gunichar     *thechar,
+					   GError      **error);
+GIOStatus   g_io_channel_write_chars      (GIOChannel   *channel,
+					   const gchar  *buf,
+					   gssize        count,
+					   gsize        *bytes_written,
+					   GError      **error);
+GIOStatus   g_io_channel_write_unichar    (GIOChannel   *channel,
+					   gunichar      thechar,
+					   GError      **error);
+GIOStatus   g_io_channel_seek_position    (GIOChannel   *channel,
+					   gint64        offset,
+					   GSeekType     type,
+					   GError      **error);
+#ifdef G_OS_WIN32
+#define g_io_channel_new_file g_io_channel_new_file_utf8
+#endif
+
+GIOChannel* g_io_channel_new_file         (const gchar  *filename,
+					   const gchar  *mode,
+					   GError      **error);
+
+/* Error handling */
+
+GQuark          g_io_channel_error_quark      (void);
+GIOChannelError g_io_channel_error_from_errno (gint en);
+
+/* On Unix, IO channels created with this function for any file
+ * descriptor or socket.
+ *
+ * On Win32, this can be used either for files opened with the MSVCRT
+ * (the Microsoft run-time C library) _open() or _pipe, including file
+ * descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr),
+ * or for Winsock SOCKETs. If the parameter is a legal file
+ * descriptor, it is assumed to be such, otherwise it should be a
+ * SOCKET. This relies on SOCKETs and file descriptors not
+ * overlapping. If you want to be certain, call either
+ * g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket()
+ * instead as appropriate.
+ *
+ * The term file descriptor as used in the context of Win32 refers to
+ * the emulated Unix-like file descriptors MSVCRT provides. The native
+ * corresponding concept is file HANDLE. There isn't as of yet a way to
+ * get GIOChannels for Win32 file HANDLEs.
+ */
+GIOChannel* g_io_channel_unix_new    (int         fd);
+gint        g_io_channel_unix_get_fd (GIOChannel *channel);
+
+
+/* Hook for GClosure / GSource integration. Don't touch */
+GLIB_VAR GSourceFuncs g_io_watch_funcs;
+
+#ifdef G_OS_WIN32
+
+/* You can use this "pseudo file descriptor" in a GPollFD to add
+ * polling for Windows messages. GTK applications should not do that.
+ */
+
+#define G_WIN32_MSG_HANDLE 19981206
+
+/* Use this to get a GPollFD from a GIOChannel, so that you can call
+ * g_io_channel_win32_poll(). After calling this you should only use
+ * g_io_channel_read() to read from the GIOChannel, i.e. never read()
+ * from the underlying file descriptor. For SOCKETs, it is possible to call
+ * recv().
+ */
+void        g_io_channel_win32_make_pollfd (GIOChannel   *channel,
+					    GIOCondition  condition,
+					    GPollFD      *fd);
+
+/* This can be used to wait a until at least one of the channels is readable.
+ * On Unix you would do a select() on the file descriptors of the channels.
+ */
+gint        g_io_channel_win32_poll   (GPollFD    *fds,
+				       gint        n_fds,
+				       gint        timeout_);
+
+/* Create an IO channel for Windows messages for window handle hwnd. */
+#if GLIB_SIZEOF_VOID_P == 8
+/* We use gsize here so that it is still an integer type and not a
+ * pointer, like the guint in the traditional prototype. We can't use
+ * intptr_t as that is not portable enough.
+ */
+GIOChannel *g_io_channel_win32_new_messages (gsize hwnd);
+#else
+GIOChannel *g_io_channel_win32_new_messages (guint hwnd);
+#endif
+
+/* Create an IO channel for C runtime (emulated Unix-like) file
+ * descriptors. After calling g_io_add_watch() on a IO channel
+ * returned by this function, you shouldn't call read() on the file
+ * descriptor. This is because adding polling for a file descriptor is
+ * implemented on Win32 by starting a thread that sits blocked in a
+ * read() from the file descriptor most of the time. All reads from
+ * the file descriptor should be done by this internal GLib
+ * thread. Your code should call only g_io_channel_read_chars().
+ */
+GIOChannel* g_io_channel_win32_new_fd (gint         fd);
+
+/* Get the C runtime file descriptor of a channel. */
+gint        g_io_channel_win32_get_fd (GIOChannel *channel);
+
+/* Create an IO channel for a winsock socket. The parameter should be
+ * a SOCKET. Contrary to IO channels for file descriptors (on *Win32),
+ * you can use normal recv() or recvfrom() on sockets even if GLib
+ * is polling them.
+ */
+GIOChannel *g_io_channel_win32_new_socket (gint socket);
+
+#endif
+
+G_END_DECLS
+
+#endif /* __G_IOCHANNEL_H__ */
diff --git a/glib/giounix.c b/glib/giounix.c
new file mode 100644
index 0000000..eaff939
--- /dev/null
+++ b/glib/giounix.c
@@ -0,0 +1,609 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * giounix.c: IO Channels using unix file descriptors
+ * Copyright 1998 Owen Taylor
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#define _POSIX_SOURCE		/* for SSIZE_MAX */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+
+#include "glib.h"
+#include "galias.h"
+
+/*
+ * Unix IO Channels
+ */
+
+typedef struct _GIOUnixChannel GIOUnixChannel;
+typedef struct _GIOUnixWatch GIOUnixWatch;
+
+struct _GIOUnixChannel
+{
+  GIOChannel channel;
+  gint fd;
+};
+
+struct _GIOUnixWatch
+{
+  GSource       source;
+  GPollFD       pollfd;
+  GIOChannel   *channel;
+  GIOCondition  condition;
+};
+
+
+static GIOStatus	g_io_unix_read		(GIOChannel   *channel,
+						 gchar        *buf,
+						 gsize         count,
+						 gsize        *bytes_read,
+						 GError      **err);
+static GIOStatus	g_io_unix_write		(GIOChannel   *channel,
+						 const gchar  *buf,
+						 gsize         count,
+						 gsize        *bytes_written,
+						 GError      **err);
+static GIOStatus	g_io_unix_seek		(GIOChannel   *channel,
+						 gint64        offset,
+						 GSeekType     type,
+						 GError      **err);
+static GIOStatus	g_io_unix_close		(GIOChannel   *channel,
+						 GError      **err);
+static void		g_io_unix_free		(GIOChannel   *channel);
+static GSource*		g_io_unix_create_watch	(GIOChannel   *channel,
+						 GIOCondition  condition);
+static GIOStatus	g_io_unix_set_flags	(GIOChannel   *channel,
+                       				 GIOFlags      flags,
+						 GError      **err);
+static GIOFlags 	g_io_unix_get_flags	(GIOChannel   *channel);
+
+static gboolean g_io_unix_prepare  (GSource     *source,
+				    gint        *timeout);
+static gboolean g_io_unix_check    (GSource     *source);
+static gboolean g_io_unix_dispatch (GSource     *source,
+				    GSourceFunc  callback,
+				    gpointer     user_data);
+static void     g_io_unix_finalize (GSource     *source);
+
+GSourceFuncs g_io_watch_funcs = {
+  g_io_unix_prepare,
+  g_io_unix_check,
+  g_io_unix_dispatch,
+  g_io_unix_finalize
+};
+
+static GIOFuncs unix_channel_funcs = {
+  g_io_unix_read,
+  g_io_unix_write,
+  g_io_unix_seek,
+  g_io_unix_close,
+  g_io_unix_create_watch,
+  g_io_unix_free,
+  g_io_unix_set_flags,
+  g_io_unix_get_flags,
+};
+
+static gboolean 
+g_io_unix_prepare (GSource  *source,
+		   gint     *timeout)
+{
+  GIOUnixWatch *watch = (GIOUnixWatch *)source;
+  GIOCondition buffer_condition = g_io_channel_get_buffer_condition (watch->channel);
+
+  *timeout = -1;
+
+  /* Only return TRUE here if _all_ bits in watch->condition will be set
+   */
+  return ((watch->condition & buffer_condition) == watch->condition);
+}
+
+static gboolean 
+g_io_unix_check (GSource  *source)
+{
+  GIOUnixWatch *watch = (GIOUnixWatch *)source;
+  GIOCondition buffer_condition = g_io_channel_get_buffer_condition (watch->channel);
+  GIOCondition poll_condition = watch->pollfd.revents;
+
+  return ((poll_condition | buffer_condition) & watch->condition);
+}
+
+static gboolean
+g_io_unix_dispatch (GSource     *source,
+		    GSourceFunc  callback,
+		    gpointer     user_data)
+
+{
+  GIOFunc func = (GIOFunc)callback;
+  GIOUnixWatch *watch = (GIOUnixWatch *)source;
+  GIOCondition buffer_condition = g_io_channel_get_buffer_condition (watch->channel);
+
+  if (!func)
+    {
+      g_warning ("IO watch dispatched without callback\n"
+		 "You must call g_source_connect().");
+      return FALSE;
+    }
+  
+  return (*func) (watch->channel,
+		  (watch->pollfd.revents | buffer_condition) & watch->condition,
+		  user_data);
+}
+
+static void 
+g_io_unix_finalize (GSource *source)
+{
+  GIOUnixWatch *watch = (GIOUnixWatch *)source;
+
+  g_io_channel_unref (watch->channel);
+}
+
+static GIOStatus
+g_io_unix_read (GIOChannel *channel, 
+		gchar      *buf, 
+		gsize       count,
+		gsize      *bytes_read,
+		GError    **err)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+  gssize result;
+
+  if (count > SSIZE_MAX) /* At least according to the Debian manpage for read */
+    count = SSIZE_MAX;
+
+ retry:
+  result = read (unix_channel->fd, buf, count);
+
+  if (result < 0)
+    {
+      int errsv = errno;
+      *bytes_read = 0;
+
+      switch (errsv)
+        {
+#ifdef EINTR
+          case EINTR:
+            goto retry;
+#endif
+#ifdef EAGAIN
+          case EAGAIN:
+            return G_IO_STATUS_AGAIN;
+#endif
+          default:
+            g_set_error_literal (err, G_IO_CHANNEL_ERROR,
+                                 g_io_channel_error_from_errno (errsv),
+                                 g_strerror (errsv));
+            return G_IO_STATUS_ERROR;
+        }
+    }
+
+  *bytes_read = result;
+
+  return (result > 0) ? G_IO_STATUS_NORMAL : G_IO_STATUS_EOF;
+}
+
+static GIOStatus
+g_io_unix_write (GIOChannel  *channel, 
+		 const gchar *buf, 
+		 gsize       count,
+		 gsize      *bytes_written,
+		 GError    **err)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+  gssize result;
+
+ retry:
+  result = write (unix_channel->fd, buf, count);
+
+  if (result < 0)
+    {
+      int errsv = errno;
+      *bytes_written = 0;
+
+      switch (errsv)
+        {
+#ifdef EINTR
+          case EINTR:
+            goto retry;
+#endif
+#ifdef EAGAIN
+          case EAGAIN:
+            return G_IO_STATUS_AGAIN;
+#endif
+          default:
+            g_set_error_literal (err, G_IO_CHANNEL_ERROR,
+                                 g_io_channel_error_from_errno (errsv),
+                                 g_strerror (errsv));
+            return G_IO_STATUS_ERROR;
+        }
+    }
+
+  *bytes_written = result;
+
+  return G_IO_STATUS_NORMAL;
+}
+
+static GIOStatus
+g_io_unix_seek (GIOChannel *channel,
+		gint64      offset, 
+		GSeekType   type,
+                GError    **err)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+  int whence;
+  off_t tmp_offset;
+  off_t result;
+
+  switch (type)
+    {
+    case G_SEEK_SET:
+      whence = SEEK_SET;
+      break;
+    case G_SEEK_CUR:
+      whence = SEEK_CUR;
+      break;
+    case G_SEEK_END:
+      whence = SEEK_END;
+      break;
+    default:
+      whence = -1; /* Shut the compiler up */
+      g_assert_not_reached ();
+    }
+
+  tmp_offset = offset;
+  if (tmp_offset != offset)
+    {
+      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
+                           g_io_channel_error_from_errno (EINVAL),
+                           g_strerror (EINVAL));
+      return G_IO_STATUS_ERROR;
+    }
+  
+  result = lseek (unix_channel->fd, tmp_offset, whence);
+
+  if (result < 0)
+    {
+      int errsv = errno;
+      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
+                           g_io_channel_error_from_errno (errsv),
+                           g_strerror (errsv));
+      return G_IO_STATUS_ERROR;
+    }
+
+  return G_IO_STATUS_NORMAL;
+}
+
+
+static GIOStatus
+g_io_unix_close (GIOChannel *channel,
+		 GError    **err)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+
+  if (close (unix_channel->fd) < 0)
+    {
+      int errsv = errno;
+      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
+                           g_io_channel_error_from_errno (errsv),
+                           g_strerror (errsv));
+      return G_IO_STATUS_ERROR;
+    }
+
+  return G_IO_STATUS_NORMAL;
+}
+
+static void 
+g_io_unix_free (GIOChannel *channel)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+
+  g_free (unix_channel);
+}
+
+static GSource *
+g_io_unix_create_watch (GIOChannel   *channel,
+			GIOCondition  condition)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+  GSource *source;
+  GIOUnixWatch *watch;
+
+
+  source = g_source_new (&g_io_watch_funcs, sizeof (GIOUnixWatch));
+  watch = (GIOUnixWatch *)source;
+  
+  watch->channel = channel;
+  g_io_channel_ref (channel);
+  
+  watch->condition = condition;
+
+  watch->pollfd.fd = unix_channel->fd;
+  watch->pollfd.events = condition;
+
+  g_source_add_poll (source, &watch->pollfd);
+
+  return source;
+}
+
+static GIOStatus
+g_io_unix_set_flags (GIOChannel *channel,
+                     GIOFlags    flags,
+                     GError    **err)
+{
+  glong fcntl_flags;
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *) channel;
+
+  fcntl_flags = 0;
+
+  if (flags & G_IO_FLAG_APPEND)
+    fcntl_flags |= O_APPEND;
+  if (flags & G_IO_FLAG_NONBLOCK)
+#ifdef O_NONBLOCK
+    fcntl_flags |= O_NONBLOCK;
+#else
+    fcntl_flags |= O_NDELAY;
+#endif
+
+  if (fcntl (unix_channel->fd, F_SETFL, fcntl_flags) == -1)
+    {
+      int errsv = errno;
+      g_set_error_literal (err, G_IO_CHANNEL_ERROR,
+                           g_io_channel_error_from_errno (errsv),
+                           g_strerror (errsv));
+      return G_IO_STATUS_ERROR;
+    }
+
+  return G_IO_STATUS_NORMAL;
+}
+
+static GIOFlags
+g_io_unix_get_flags (GIOChannel *channel)
+{
+  GIOFlags flags = 0;
+  glong fcntl_flags;
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *) channel;
+
+  fcntl_flags = fcntl (unix_channel->fd, F_GETFL);
+
+  if (fcntl_flags == -1)
+    {
+      int err = errno;
+      g_warning (G_STRLOC "Error while getting flags for FD: %s (%d)\n",
+		 g_strerror (err), err);
+      return 0;
+    }
+
+  if (fcntl_flags & O_APPEND)
+    flags |= G_IO_FLAG_APPEND;
+#ifdef O_NONBLOCK
+  if (fcntl_flags & O_NONBLOCK)
+#else
+  if (fcntl_flags & O_NDELAY)
+#endif
+    flags |= G_IO_FLAG_NONBLOCK;
+
+  switch (fcntl_flags & (O_RDONLY | O_WRONLY | O_RDWR))
+    {
+      case O_RDONLY:
+        channel->is_readable = TRUE;
+        channel->is_writeable = FALSE;
+        break;
+      case O_WRONLY:
+        channel->is_readable = FALSE;
+        channel->is_writeable = TRUE;
+        break;
+      case O_RDWR:
+        channel->is_readable = TRUE;
+        channel->is_writeable = TRUE;
+        break;
+      default:
+        g_assert_not_reached ();
+    }
+
+  return flags;
+}
+
+GIOChannel *
+g_io_channel_new_file (const gchar *filename,
+                       const gchar *mode,
+                       GError     **error)
+{
+  int fid, flags;
+  mode_t create_mode;
+  GIOChannel *channel;
+  enum { /* Cheesy hack */
+    MODE_R = 1 << 0,
+    MODE_W = 1 << 1,
+    MODE_A = 1 << 2,
+    MODE_PLUS = 1 << 3
+  } mode_num;
+  struct stat buffer;
+
+  g_return_val_if_fail (filename != NULL, NULL);
+  g_return_val_if_fail (mode != NULL, NULL);
+  g_return_val_if_fail ((error == NULL) || (*error == NULL), NULL);
+
+  switch (mode[0])
+    {
+      case 'r':
+        mode_num = MODE_R;
+        break;
+      case 'w':
+        mode_num = MODE_W;
+        break;
+      case 'a':
+        mode_num = MODE_A;
+        break;
+      default:
+        g_warning ("Invalid GIOFileMode %s.\n", mode);
+        return NULL;
+    }
+
+  switch (mode[1])
+    {
+      case '\0':
+        break;
+      case '+':
+        if (mode[2] == '\0')
+          {
+            mode_num |= MODE_PLUS;
+            break;
+          }
+        /* Fall through */
+      default:
+        g_warning ("Invalid GIOFileMode %s.\n", mode);
+        return NULL;
+    }
+
+  switch (mode_num)
+    {
+      case MODE_R:
+        flags = O_RDONLY;
+        break;
+      case MODE_W:
+        flags = O_WRONLY | O_TRUNC | O_CREAT;
+        break;
+      case MODE_A:
+        flags = O_WRONLY | O_APPEND | O_CREAT;
+        break;
+      case MODE_R | MODE_PLUS:
+        flags = O_RDWR;
+        break;
+      case MODE_W | MODE_PLUS:
+        flags = O_RDWR | O_TRUNC | O_CREAT;
+        break;
+      case MODE_A | MODE_PLUS:
+        flags = O_RDWR | O_APPEND | O_CREAT;
+        break;
+      default:
+        g_assert_not_reached ();
+        flags = 0;
+    }
+
+  create_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
+  fid = open (filename, flags, create_mode);
+  if (fid == -1)
+    {
+      int err = errno;
+      g_set_error_literal (error, G_FILE_ERROR,
+                           g_file_error_from_errno (err),
+                           g_strerror (err));
+      return (GIOChannel *)NULL;
+    }
+
+  if (fstat (fid, &buffer) == -1) /* In case someone opens a FIFO */
+    {
+      int err = errno;
+      close (fid);
+      g_set_error_literal (error, G_FILE_ERROR,
+                           g_file_error_from_errno (err),
+                           g_strerror (err));
+      return (GIOChannel *)NULL;
+    }
+
+  channel = (GIOChannel *) g_new (GIOUnixChannel, 1);
+
+  channel->is_seekable = S_ISREG (buffer.st_mode) || S_ISCHR (buffer.st_mode)
+                         || S_ISBLK (buffer.st_mode);
+
+  switch (mode_num)
+    {
+      case MODE_R:
+        channel->is_readable = TRUE;
+        channel->is_writeable = FALSE;
+        break;
+      case MODE_W:
+      case MODE_A:
+        channel->is_readable = FALSE;
+        channel->is_writeable = TRUE;
+        break;
+      case MODE_R | MODE_PLUS:
+      case MODE_W | MODE_PLUS:
+      case MODE_A | MODE_PLUS:
+        channel->is_readable = TRUE;
+        channel->is_writeable = TRUE;
+        break;
+      default:
+        g_assert_not_reached ();
+    }
+
+  g_io_channel_init (channel);
+  channel->close_on_unref = TRUE; /* must be after g_io_channel_init () */
+  channel->funcs = &unix_channel_funcs;
+
+  ((GIOUnixChannel *) channel)->fd = fid;
+  return channel;
+}
+
+GIOChannel *
+g_io_channel_unix_new (gint fd)
+{
+  struct stat buffer;
+  GIOUnixChannel *unix_channel = g_new (GIOUnixChannel, 1);
+  GIOChannel *channel = (GIOChannel *)unix_channel;
+
+  g_io_channel_init (channel);
+  channel->funcs = &unix_channel_funcs;
+
+  unix_channel->fd = fd;
+
+  /* I'm not sure if fstat on a non-file (e.g., socket) works
+   * it should be safe to say if it fails, the fd isn't seekable.
+   */
+  /* Newer UNIX versions support S_ISSOCK(), fstat() will probably
+   * succeed in most cases.
+   */
+  if (fstat (unix_channel->fd, &buffer) == 0)
+    channel->is_seekable = S_ISREG (buffer.st_mode) || S_ISCHR (buffer.st_mode)
+                           || S_ISBLK (buffer.st_mode);
+  else /* Assume not seekable */
+    channel->is_seekable = FALSE;
+
+  g_io_unix_get_flags (channel); /* Sets is_readable, is_writeable */
+
+  return channel;
+}
+
+gint
+g_io_channel_unix_get_fd (GIOChannel *channel)
+{
+  GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
+  return unix_channel->fd;
+}
+
+#define __G_IO_UNIX_C__
+#include "galiasdef.c"
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c
new file mode 100644
index 0000000..19301ce
--- /dev/null
+++ b/glib/gkeyfile.c
@@ -0,0 +1,3780 @@
+/* gkeyfile.c - key file parser
+ *
+ *  Copyright 2004  Red Hat, Inc.  
+ *
+ * Written by Ray Strode <rstrode@redhat.com>
+ *            Matthias Clasen <mclasen@redhat.com>
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "gkeyfile.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <locale.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef G_OS_WIN32
+#include <io.h>
+
+#ifndef S_ISREG
+#define S_ISREG(mode) ((mode)&_S_IFREG)
+#endif
+
+#endif  /* G_OS_WIN23 */
+
+#include "gconvert.h"
+#include "gdataset.h"
+#include "gerror.h"
+#include "gfileutils.h"
+#include "ghash.h"
+#include "glibintl.h"
+#include "glist.h"
+#include "gslist.h"
+#include "gmem.h"
+#include "gmessages.h"
+#include "gstdio.h"
+#include "gstring.h"
+#include "gstrfuncs.h"
+#include "gutils.h"
+
+#include "galias.h"
+
+typedef struct _GKeyFileGroup GKeyFileGroup;
+
+struct _GKeyFile
+{
+  GList *groups;
+  GHashTable *group_hash;
+
+  GKeyFileGroup *start_group;
+  GKeyFileGroup *current_group;
+
+  GString *parse_buffer; /* Holds up to one line of not-yet-parsed data */
+
+  /* Used for sizing the output buffer during serialization
+   */
+  gsize approximate_size;
+
+  gchar list_separator;
+
+  GKeyFileFlags flags;
+
+  gchar **locales;
+};
+
+typedef struct _GKeyFileKeyValuePair GKeyFileKeyValuePair;
+
+struct _GKeyFileGroup
+{
+  const gchar *name;  /* NULL for above first group (which will be comments) */
+
+  GKeyFileKeyValuePair *comment; /* Special comment that is stuck to the top of a group */
+  gboolean has_trailing_blank_line;
+
+  GList *key_value_pairs; 
+
+  /* Used in parallel with key_value_pairs for
+   * increased lookup performance
+   */
+  GHashTable *lookup_map;
+};
+
+struct _GKeyFileKeyValuePair
+{
+  gchar *key;  /* NULL for comments */
+  gchar *value;
+};
+
+static gint                  find_file_in_data_dirs            (const gchar            *file,
+								const gchar           **data_dirs,
+								gchar                 **output_file,
+								GError                **error);
+static gboolean              g_key_file_load_from_fd           (GKeyFile               *key_file,
+								gint                    fd,
+								GKeyFileFlags           flags,
+								GError                **error);
+static GList                *g_key_file_lookup_group_node      (GKeyFile               *key_file,
+			                                        const gchar            *group_name);
+static GKeyFileGroup        *g_key_file_lookup_group           (GKeyFile               *key_file,
+								const gchar            *group_name);
+
+static GList                *g_key_file_lookup_key_value_pair_node  (GKeyFile       *key_file,
+			                                             GKeyFileGroup  *group,
+                                                                     const gchar    *key);
+static GKeyFileKeyValuePair *g_key_file_lookup_key_value_pair       (GKeyFile       *key_file,
+                                                                     GKeyFileGroup  *group,
+                                                                     const gchar    *key);
+
+static void                  g_key_file_remove_group_node          (GKeyFile      *key_file,
+							  	    GList         *group_node);
+static void                  g_key_file_remove_key_value_pair_node (GKeyFile      *key_file,
+                                                                    GKeyFileGroup *group,
+                                                                    GList         *pair_node);
+
+static void                  g_key_file_add_key                (GKeyFile               *key_file,
+								GKeyFileGroup          *group,
+								const gchar            *key,
+								const gchar            *value);
+static void                  g_key_file_add_group              (GKeyFile               *key_file,
+								const gchar            *group_name);
+static gboolean              g_key_file_is_group_name          (const gchar *name);
+static gboolean              g_key_file_is_key_name            (const gchar *name);
+static void                  g_key_file_key_value_pair_free    (GKeyFileKeyValuePair   *pair);
+static gboolean              g_key_file_line_is_comment        (const gchar            *line);
+static gboolean              g_key_file_line_is_group          (const gchar            *line);
+static gboolean              g_key_file_line_is_key_value_pair (const gchar            *line);
+static gchar                *g_key_file_parse_value_as_string  (GKeyFile               *key_file,
+								const gchar            *value,
+								GSList                **separators,
+								GError                **error);
+static gchar                *g_key_file_parse_string_as_value  (GKeyFile               *key_file,
+								const gchar            *string,
+								gboolean                escape_separator);
+static gint                  g_key_file_parse_value_as_integer (GKeyFile               *key_file,
+								const gchar            *value,
+								GError                **error);
+static gchar                *g_key_file_parse_integer_as_value (GKeyFile               *key_file,
+								gint                    value);
+static gdouble               g_key_file_parse_value_as_double  (GKeyFile               *key_file,
+                                                                const gchar            *value,
+                                                                GError                **error);
+static gboolean              g_key_file_parse_value_as_boolean (GKeyFile               *key_file,
+								const gchar            *value,
+								GError                **error);
+static gchar                *g_key_file_parse_boolean_as_value (GKeyFile               *key_file,
+								gboolean                value);
+static gchar                *g_key_file_parse_value_as_comment (GKeyFile               *key_file,
+                                                                const gchar            *value);
+static gchar                *g_key_file_parse_comment_as_value (GKeyFile               *key_file,
+                                                                const gchar            *comment);
+static void                  g_key_file_parse_key_value_pair   (GKeyFile               *key_file,
+								const gchar            *line,
+								gsize                   length,
+								GError                **error);
+static void                  g_key_file_parse_comment          (GKeyFile               *key_file,
+								const gchar            *line,
+								gsize                   length,
+								GError                **error);
+static void                  g_key_file_parse_group            (GKeyFile               *key_file,
+								const gchar            *line,
+								gsize                   length,
+								GError                **error);
+static gchar                *key_get_locale                    (const gchar            *key);
+static void                  g_key_file_parse_data             (GKeyFile               *key_file,
+								const gchar            *data,
+								gsize                   length,
+								GError                **error);
+static void                  g_key_file_flush_parse_buffer     (GKeyFile               *key_file,
+								GError                **error);
+
+
+GQuark
+g_key_file_error_quark (void)
+{
+  return g_quark_from_static_string ("g-key-file-error-quark");
+}
+
+static void
+g_key_file_init (GKeyFile *key_file)
+{  
+  key_file->current_group = g_slice_new0 (GKeyFileGroup);
+  key_file->groups = g_list_prepend (NULL, key_file->current_group);
+  key_file->group_hash = g_hash_table_new (g_str_hash, g_str_equal);
+  key_file->start_group = NULL;
+  key_file->parse_buffer = g_string_sized_new (128);
+  key_file->approximate_size = 0;
+  key_file->list_separator = ';';
+  key_file->flags = 0;
+  key_file->locales = g_strdupv ((gchar **)g_get_language_names ());
+}
+
+static void
+g_key_file_clear (GKeyFile *key_file)
+{
+  GList *tmp, *group_node;
+
+  if (key_file->locales) 
+    {
+      g_strfreev (key_file->locales);
+      key_file->locales = NULL;
+    }
+
+  if (key_file->parse_buffer)
+    {
+      g_string_free (key_file->parse_buffer, TRUE);
+      key_file->parse_buffer = NULL;
+    }
+
+  tmp = key_file->groups;
+  while (tmp != NULL)
+    {
+      group_node = tmp;
+      tmp = tmp->next;
+      g_key_file_remove_group_node (key_file, group_node);
+    }
+
+  g_hash_table_destroy (key_file->group_hash);
+  key_file->group_hash = NULL;
+
+  g_warn_if_fail (key_file->groups == NULL);
+}
+
+
+/**
+ * g_key_file_new:
+ *
+ * Creates a new empty #GKeyFile object. Use
+ * g_key_file_load_from_file(), g_key_file_load_from_data(),
+ * g_key_file_load_from_dirs() or g_key_file_load_from_data_dirs() to
+ * read an existing key file.
+ *
+ * Return value: an empty #GKeyFile.
+ *
+ * Since: 2.6
+ **/
+GKeyFile *
+g_key_file_new (void)
+{
+  GKeyFile *key_file;
+
+  key_file = g_slice_new0 (GKeyFile);
+  g_key_file_init (key_file);
+
+  return key_file;
+}
+
+/**
+ * g_key_file_set_list_separator:
+ * @key_file: a #GKeyFile 
+ * @separator: the separator
+ *
+ * Sets the character which is used to separate
+ * values in lists. Typically ';' or ',' are used
+ * as separators. The default list separator is ';'.
+ *
+ * Since: 2.6
+ */
+void
+g_key_file_set_list_separator (GKeyFile *key_file,
+			       gchar     separator)
+{
+  g_return_if_fail (key_file != NULL);
+
+  key_file->list_separator = separator;
+}
+
+
+/* Iterates through all the directories in *dirs trying to
+ * open file.  When it successfully locates and opens a file it
+ * returns the file descriptor to the open file.  It also
+ * outputs the absolute path of the file in output_file.
+ */
+static gint
+find_file_in_data_dirs (const gchar   *file,
+                        const gchar  **dirs,
+                        gchar        **output_file,
+                        GError       **error)
+{
+  const gchar **data_dirs, *data_dir;
+  gchar *path;
+  gint fd;
+
+  path = NULL;
+  fd = -1;
+
+  if (dirs == NULL)
+    return fd;
+
+  data_dirs = dirs;
+
+  while (data_dirs && (data_dir = *data_dirs) && fd < 0)
+    {
+      gchar *candidate_file, *sub_dir;
+
+      candidate_file = (gchar *) file;
+      sub_dir = g_strdup ("");
+      while (candidate_file != NULL && fd < 0)
+        {
+          gchar *p;
+
+          path = g_build_filename (data_dir, sub_dir,
+                                   candidate_file, NULL);
+
+          fd = g_open (path, O_RDONLY, 0);
+
+          if (fd < 0)
+            {
+              g_free (path);
+              path = NULL;
+            }
+
+          candidate_file = strchr (candidate_file, '-');
+
+          if (candidate_file == NULL)
+            break;
+
+          candidate_file++;
+
+          g_free (sub_dir);
+          sub_dir = g_strndup (file, candidate_file - file - 1);
+
+          for (p = sub_dir; *p != '\0'; p++)
+            {
+              if (*p == '-')
+                *p = G_DIR_SEPARATOR;
+            }
+        }
+      g_free (sub_dir);
+      data_dirs++;
+    }
+
+  if (fd < 0)
+    {
+      g_set_error_literal (error, G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_NOT_FOUND,
+                           _("Valid key file could not be "
+                             "found in search dirs"));
+    }
+
+  if (output_file != NULL && fd > 0)
+    *output_file = g_strdup (path);
+
+  g_free (path);
+
+  return fd;
+}
+
+static gboolean
+g_key_file_load_from_fd (GKeyFile       *key_file,
+			 gint            fd,
+			 GKeyFileFlags   flags,
+			 GError        **error)
+{
+  GError *key_file_error = NULL;
+  gssize bytes_read;
+  struct stat stat_buf;
+  gchar read_buf[4096];
+  
+  if (fstat (fd, &stat_buf) < 0)
+    {
+      g_set_error_literal (error, G_FILE_ERROR,
+                           g_file_error_from_errno (errno),
+                           g_strerror (errno));
+      return FALSE;
+    }
+
+  if (!S_ISREG (stat_buf.st_mode))
+    {
+      g_set_error_literal (error, G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_PARSE,
+                           _("Not a regular file"));
+      return FALSE;
+    }
+
+  if (stat_buf.st_size == 0)
+    {
+      g_set_error_literal (error, G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_PARSE,
+                           _("File is empty"));
+      return FALSE;
+    }
+
+  if (key_file->approximate_size > 0)
+    {
+      g_key_file_clear (key_file);
+      g_key_file_init (key_file);
+    }
+  key_file->flags = flags;
+
+  bytes_read = 0;
+  do
+    {
+      bytes_read = read (fd, read_buf, 4096);
+
+      if (bytes_read == 0)  /* End of File */
+        break;
+
+      if (bytes_read < 0)
+        {
+          if (errno == EINTR || errno == EAGAIN)
+            continue;
+
+          g_set_error_literal (error, G_FILE_ERROR,
+                               g_file_error_from_errno (errno),
+                               g_strerror (errno));
+          return FALSE;
+        }
+
+      g_key_file_parse_data (key_file, 
+			     read_buf, bytes_read,
+			     &key_file_error);
+    }
+  while (!key_file_error);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return FALSE;
+    }
+
+  g_key_file_flush_parse_buffer (key_file, &key_file_error);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+/**
+ * g_key_file_load_from_file:
+ * @key_file: an empty #GKeyFile struct
+ * @file: the path of a filename to load, in the GLib filename encoding
+ * @flags: flags from #GKeyFileFlags
+ * @error: return location for a #GError, or %NULL
+ *
+ * Loads a key file into an empty #GKeyFile structure.
+ * If the file could not be loaded then %error is set to 
+ * either a #GFileError or #GKeyFileError.
+ *
+ * Return value: %TRUE if a key file could be loaded, %FALSE otherwise
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_load_from_file (GKeyFile       *key_file,
+			   const gchar    *file,
+			   GKeyFileFlags   flags,
+			   GError        **error)
+{
+  GError *key_file_error = NULL;
+  gint fd;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (file != NULL, FALSE);
+
+  fd = g_open (file, O_RDONLY, 0);
+
+  if (fd < 0)
+    {
+      g_set_error_literal (error, G_FILE_ERROR,
+                           g_file_error_from_errno (errno),
+                           g_strerror (errno));
+      return FALSE;
+    }
+
+  g_key_file_load_from_fd (key_file, fd, flags, &key_file_error);
+  close (fd);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+/**
+ * g_key_file_load_from_data:
+ * @key_file: an empty #GKeyFile struct
+ * @data: key file loaded in memory
+ * @length: the length of @data in bytes
+ * @flags: flags from #GKeyFileFlags
+ * @error: return location for a #GError, or %NULL
+ *
+ * Loads a key file from memory into an empty #GKeyFile structure.  
+ * If the object cannot be created then %error is set to a #GKeyFileError. 
+ *
+ * Return value: %TRUE if a key file could be loaded, %FALSE otherwise
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_load_from_data (GKeyFile       *key_file,
+			   const gchar    *data,
+			   gsize           length,
+			   GKeyFileFlags   flags,
+			   GError        **error)
+{
+  GError *key_file_error = NULL;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (data != NULL, FALSE);
+  g_return_val_if_fail (length != 0, FALSE);
+
+  if (length == (gsize)-1)
+    length = strlen (data);
+
+  if (key_file->approximate_size > 0)
+    {
+      g_key_file_clear (key_file);
+      g_key_file_init (key_file);
+    }
+  key_file->flags = flags;
+
+  g_key_file_parse_data (key_file, data, length, &key_file_error);
+  
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return FALSE;
+    }
+
+  g_key_file_flush_parse_buffer (key_file, &key_file_error);
+  
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+/**
+ * g_key_file_load_from_dirs:
+ * @key_file: an empty #GKeyFile struct
+ * @file: a relative path to a filename to open and parse
+ * @search_dirs: %NULL-terminated array of directories to search
+ * @full_path: return location for a string containing the full path
+ *   of the file, or %NULL
+ * @flags: flags from #GKeyFileFlags
+ * @error: return location for a #GError, or %NULL
+ *
+ * This function looks for a key file named @file in the paths
+ * specified in @search_dirs, loads the file into @key_file and
+ * returns the file's full path in @full_path.  If the file could not
+ * be loaded then an %error is set to either a #GFileError or
+ * #GKeyFileError.
+ *
+ * Return value: %TRUE if a key file could be loaded, %FALSE otherwise
+ *
+ * Since: 2.14
+ **/
+gboolean
+g_key_file_load_from_dirs (GKeyFile       *key_file,
+                           const gchar    *file,
+                           const gchar   **search_dirs,
+                           gchar         **full_path,
+                           GKeyFileFlags   flags,
+                           GError        **error)
+{
+  GError *key_file_error = NULL;
+  const gchar **data_dirs;
+  gchar *output_path;
+  gint fd;
+  gboolean found_file;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (!g_path_is_absolute (file), FALSE);
+  g_return_val_if_fail (search_dirs != NULL, FALSE);
+
+  found_file = FALSE;
+  data_dirs = search_dirs;
+  output_path = NULL;
+  while (*data_dirs != NULL && !found_file)
+    {
+      g_free (output_path);
+
+      fd = find_file_in_data_dirs (file, data_dirs, &output_path,
+                                   &key_file_error);
+
+      if (fd < 0)
+        {
+          if (key_file_error)
+            g_propagate_error (error, key_file_error);
+ 	  break;
+        }
+
+      found_file = g_key_file_load_from_fd (key_file, fd, flags,
+	                                    &key_file_error);
+      close (fd);
+
+      if (key_file_error)
+        {
+	  g_propagate_error (error, key_file_error);
+	  break;
+        }
+    }
+
+  if (found_file && full_path)
+    *full_path = output_path;
+  else
+    g_free (output_path);
+
+  return found_file;
+}
+
+/**
+ * g_key_file_load_from_data_dirs:
+ * @key_file: an empty #GKeyFile struct
+ * @file: a relative path to a filename to open and parse
+ * @full_path: return location for a string containing the full path
+ *   of the file, or %NULL
+ * @flags: flags from #GKeyFileFlags 
+ * @error: return location for a #GError, or %NULL
+ *
+ * This function looks for a key file named @file in the paths 
+ * returned from g_get_user_data_dir() and g_get_system_data_dirs(), 
+ * loads the file into @key_file and returns the file's full path in 
+ * @full_path.  If the file could not be loaded then an %error is
+ * set to either a #GFileError or #GKeyFileError.
+ *
+ * Return value: %TRUE if a key file could be loaded, %FALSE othewise
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_load_from_data_dirs (GKeyFile       *key_file,
+				const gchar    *file,
+				gchar         **full_path,
+				GKeyFileFlags   flags,
+				GError        **error)
+{
+  gchar **all_data_dirs;
+  const gchar * user_data_dir;
+  const gchar * const * system_data_dirs;
+  gsize i, j;
+  gboolean found_file;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (!g_path_is_absolute (file), FALSE);
+
+  user_data_dir = g_get_user_data_dir ();
+  system_data_dirs = g_get_system_data_dirs ();
+  all_data_dirs = g_new (gchar *, g_strv_length ((gchar **)system_data_dirs) + 2);
+
+  i = 0;
+  all_data_dirs[i++] = g_strdup (user_data_dir);
+
+  j = 0;
+  while (system_data_dirs[j] != NULL)
+    all_data_dirs[i++] = g_strdup (system_data_dirs[j++]);
+  all_data_dirs[i] = NULL;
+
+  found_file = g_key_file_load_from_dirs (key_file,
+                                          file,
+                                          (const gchar **)all_data_dirs,
+                                          full_path,
+                                          flags,
+                                          error);
+
+  g_strfreev (all_data_dirs);
+
+  return found_file;
+}
+
+/**
+ * g_key_file_free:
+ * @key_file: a #GKeyFile
+ *
+ * Frees a #GKeyFile.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_free (GKeyFile *key_file)
+{
+  g_return_if_fail (key_file != NULL);
+  
+  g_key_file_clear (key_file);
+  g_slice_free (GKeyFile, key_file);
+}
+
+/* If G_KEY_FILE_KEEP_TRANSLATIONS is not set, only returns
+ * true for locales that match those in g_get_language_names().
+ */
+static gboolean
+g_key_file_locale_is_interesting (GKeyFile    *key_file,
+				  const gchar *locale)
+{
+  gsize i;
+
+  if (key_file->flags & G_KEY_FILE_KEEP_TRANSLATIONS)
+    return TRUE;
+
+  for (i = 0; key_file->locales[i] != NULL; i++)
+    {
+      if (g_ascii_strcasecmp (key_file->locales[i], locale) == 0)
+	return TRUE;
+    }
+
+  return FALSE;
+}
+
+static void
+g_key_file_parse_line (GKeyFile     *key_file,
+		       const gchar  *line,
+		       gsize         length,
+		       GError      **error)
+{
+  GError *parse_error = NULL;
+  gchar *line_start;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (line != NULL);
+
+  line_start = (gchar *) line;
+  while (g_ascii_isspace (*line_start))
+    line_start++;
+
+  if (g_key_file_line_is_comment (line_start))
+    g_key_file_parse_comment (key_file, line, length, &parse_error);
+  else if (g_key_file_line_is_group (line_start))
+    g_key_file_parse_group (key_file, line_start,
+			    length - (line_start - line),
+			    &parse_error);
+  else if (g_key_file_line_is_key_value_pair (line_start))
+    g_key_file_parse_key_value_pair (key_file, line_start,
+				     length - (line_start - line),
+				     &parse_error);
+  else
+    {
+      gchar *line_utf8 = _g_utf8_make_valid (line);
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_PARSE,
+                   _("Key file contains line '%s' which is not "
+                     "a key-value pair, group, or comment"), 
+		   line_utf8);
+      g_free (line_utf8);
+
+      return;
+    }
+
+  if (parse_error)
+    g_propagate_error (error, parse_error);
+}
+
+static void
+g_key_file_parse_comment (GKeyFile     *key_file,
+			  const gchar  *line,
+			  gsize         length,
+			  GError      **error)
+{
+  GKeyFileKeyValuePair *pair;
+  
+  if (!(key_file->flags & G_KEY_FILE_KEEP_COMMENTS))
+    return;
+  
+  g_warn_if_fail (key_file->current_group != NULL);
+
+  pair = g_slice_new (GKeyFileKeyValuePair);
+  pair->key = NULL;
+  pair->value = g_strndup (line, length);
+  
+  key_file->current_group->key_value_pairs =
+    g_list_prepend (key_file->current_group->key_value_pairs, pair);
+
+  if (length == 0 || line[0] != '#')
+    key_file->current_group->has_trailing_blank_line = TRUE;
+}
+
+static void
+g_key_file_parse_group (GKeyFile     *key_file,
+			const gchar  *line,
+			gsize         length,
+			GError      **error)
+{
+  gchar *group_name;
+  const gchar *group_name_start, *group_name_end;
+  
+  /* advance past opening '['
+   */
+  group_name_start = line + 1;
+  group_name_end = line + length - 1;
+  
+  while (*group_name_end != ']')
+    group_name_end--;
+
+  group_name = g_strndup (group_name_start, 
+                          group_name_end - group_name_start);
+  
+  if (!g_key_file_is_group_name (group_name))
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+		   G_KEY_FILE_ERROR_PARSE,
+		   _("Invalid group name: %s"), group_name);
+      g_free (group_name);
+      return;
+    }
+
+  g_key_file_add_group (key_file, group_name);
+  g_free (group_name);
+}
+
+static void
+g_key_file_parse_key_value_pair (GKeyFile     *key_file,
+				 const gchar  *line,
+				 gsize         length,
+				 GError      **error)
+{
+  gchar *key, *value, *key_end, *value_start, *locale;
+  gsize key_len, value_len;
+
+  if (key_file->current_group == NULL || key_file->current_group->name == NULL)
+    {
+      g_set_error_literal (error, G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                           _("Key file does not start with a group"));
+      return;
+    }
+
+  key_end = value_start = strchr (line, '=');
+
+  g_warn_if_fail (key_end != NULL);
+
+  key_end--;
+  value_start++;
+
+  /* Pull the key name from the line (chomping trailing whitespace)
+   */
+  while (g_ascii_isspace (*key_end))
+    key_end--;
+
+  key_len = key_end - line + 2;
+
+  g_warn_if_fail (key_len <= length);
+
+  key = g_strndup (line, key_len - 1);
+
+  if (!g_key_file_is_key_name (key))
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_PARSE,
+                   _("Invalid key name: %s"), key);
+      g_free (key);
+      return; 
+    }
+
+  /* Pull the value from the line (chugging leading whitespace)
+   */
+  while (g_ascii_isspace (*value_start))
+    value_start++;
+
+  value_len = line + length - value_start + 1;
+
+  value = g_strndup (value_start, value_len);
+
+  g_warn_if_fail (key_file->start_group != NULL);
+
+  if (key_file->current_group
+      && key_file->current_group->name
+      && strcmp (key_file->start_group->name,
+                 key_file->current_group->name) == 0
+      && strcmp (key, "Encoding") == 0)
+    {
+      if (g_ascii_strcasecmp (value, "UTF-8") != 0)
+        {
+	  gchar *value_utf8 = _g_utf8_make_valid (value);
+          g_set_error (error, G_KEY_FILE_ERROR,
+                       G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
+                       _("Key file contains unsupported "
+			 "encoding '%s'"), value_utf8);
+	  g_free (value_utf8);
+
+          g_free (key);
+          g_free (value);
+          return;
+        }
+    }
+
+  /* Is this key a translation? If so, is it one that we care about?
+   */
+  locale = key_get_locale (key);
+
+  if (locale == NULL || g_key_file_locale_is_interesting (key_file, locale))
+    g_key_file_add_key (key_file, key_file->current_group, key, value);
+
+  g_free (locale);
+  g_free (key);
+  g_free (value);
+}
+
+static gchar *
+key_get_locale (const gchar *key)
+{
+  gchar *locale;
+
+  locale = g_strrstr (key, "[");
+
+  if (locale && strlen (locale) <= 2)
+    locale = NULL;
+
+  if (locale)
+    locale = g_strndup (locale + 1, strlen (locale) - 2);
+
+  return locale;
+}
+
+static void
+g_key_file_parse_data (GKeyFile     *key_file,
+		       const gchar  *data,
+		       gsize         length,
+		       GError      **error)
+{
+  GError *parse_error;
+  gsize i;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (data != NULL);
+
+  parse_error = NULL;
+
+  for (i = 0; i < length; i++)
+    {
+      if (data[i] == '\n')
+        {
+	  if (i > 0 && data[i - 1] == '\r')
+	    g_string_erase (key_file->parse_buffer,
+			    key_file->parse_buffer->len - 1,
+			    1);
+	    
+          /* When a newline is encountered flush the parse buffer so that the
+           * line can be parsed.  Note that completely blank lines won't show
+           * up in the parse buffer, so they get parsed directly.
+           */
+          if (key_file->parse_buffer->len > 0)
+            g_key_file_flush_parse_buffer (key_file, &parse_error);
+          else
+            g_key_file_parse_comment (key_file, "", 1, &parse_error);
+
+          if (parse_error)
+            {
+              g_propagate_error (error, parse_error);
+              return;
+            }
+        }
+      else
+        g_string_append_c (key_file->parse_buffer, data[i]);
+    }
+
+  key_file->approximate_size += length;
+}
+
+static void
+g_key_file_flush_parse_buffer (GKeyFile  *key_file,
+			       GError   **error)
+{
+  GError *file_error = NULL;
+
+  g_return_if_fail (key_file != NULL);
+
+  file_error = NULL;
+
+  if (key_file->parse_buffer->len > 0)
+    {
+      g_key_file_parse_line (key_file, key_file->parse_buffer->str,
+			     key_file->parse_buffer->len,
+			     &file_error);
+      g_string_erase (key_file->parse_buffer, 0, -1);
+
+      if (file_error)
+        {
+          g_propagate_error (error, file_error);
+          return;
+        }
+    }
+}
+
+/**
+ * g_key_file_to_data:
+ * @key_file: a #GKeyFile
+ * @length: return location for the length of the 
+ *   returned string, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * This function outputs @key_file as a string.  
+ *
+ * Note that this function never reports an error,
+ * so it is safe to pass %NULL as @error.
+ *
+ * Return value: a newly allocated string holding
+ *   the contents of the #GKeyFile 
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_key_file_to_data (GKeyFile  *key_file,
+		    gsize     *length,
+		    GError   **error)
+{
+  GString *data_string;
+  GList *group_node, *key_file_node;
+  gboolean has_blank_line = TRUE;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+
+  data_string = g_string_sized_new (2 * key_file->approximate_size);
+  
+  for (group_node = g_list_last (key_file->groups);
+       group_node != NULL;
+       group_node = group_node->prev)
+    {
+      GKeyFileGroup *group;
+
+      group = (GKeyFileGroup *) group_node->data;
+
+      /* separate groups by at least an empty line */
+      if (!has_blank_line)
+	g_string_append_c (data_string, '\n');
+      has_blank_line = group->has_trailing_blank_line;
+
+      if (group->comment != NULL)
+        g_string_append_printf (data_string, "%s\n", group->comment->value);
+
+      if (group->name != NULL)
+        g_string_append_printf (data_string, "[%s]\n", group->name);
+
+      for (key_file_node = g_list_last (group->key_value_pairs);
+           key_file_node != NULL;
+           key_file_node = key_file_node->prev)
+        {
+          GKeyFileKeyValuePair *pair;
+
+          pair = (GKeyFileKeyValuePair *) key_file_node->data;
+
+          if (pair->key != NULL)
+            g_string_append_printf (data_string, "%s=%s\n", pair->key, pair->value);
+          else
+            g_string_append_printf (data_string, "%s\n", pair->value);
+        }
+    }
+
+  if (length)
+    *length = data_string->len;
+
+  return g_string_free (data_string, FALSE);
+}
+
+/**
+ * g_key_file_get_keys:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @length: return location for the number of keys returned, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Returns all keys for the group name @group_name.  The array of
+ * returned keys will be %NULL-terminated, so @length may
+ * optionally be %NULL. In the event that the @group_name cannot
+ * be found, %NULL is returned and @error is set to
+ * #G_KEY_FILE_ERROR_GROUP_NOT_FOUND.
+ *
+ * Return value: a newly-allocated %NULL-terminated array of strings. 
+ *     Use g_strfreev() to free it.
+ *
+ * Since: 2.6
+ **/
+gchar **
+g_key_file_get_keys (GKeyFile     *key_file,
+		     const gchar  *group_name,
+		     gsize        *length,
+		     GError      **error)
+{
+  GKeyFileGroup *group;
+  GList *tmp;
+  gchar **keys;
+  gsize i, num_keys;
+  
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  
+  group = g_key_file_lookup_group (key_file, group_name);
+  
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+      return NULL;
+    }
+
+  num_keys = 0;
+  for (tmp = group->key_value_pairs; tmp; tmp = tmp->next)
+    {
+      GKeyFileKeyValuePair *pair;
+
+      pair = (GKeyFileKeyValuePair *) tmp->data;
+
+      if (pair->key)
+	num_keys++;
+    }
+  
+  keys = g_new (gchar *, num_keys + 1);
+
+  i = num_keys - 1;
+  for (tmp = group->key_value_pairs; tmp; tmp = tmp->next)
+    {
+      GKeyFileKeyValuePair *pair;
+
+      pair = (GKeyFileKeyValuePair *) tmp->data;
+
+      if (pair->key)
+	{
+	  keys[i] = g_strdup (pair->key);
+	  i--;
+	}
+    }
+
+  keys[num_keys] = NULL;
+
+  if (length)
+    *length = num_keys;
+
+  return keys;
+}
+
+/**
+ * g_key_file_get_start_group:
+ * @key_file: a #GKeyFile
+ *
+ * Returns the name of the start group of the file. 
+ *
+ * Return value: The start group of the key file.
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_key_file_get_start_group (GKeyFile *key_file)
+{
+  g_return_val_if_fail (key_file != NULL, NULL);
+
+  if (key_file->start_group)
+    return g_strdup (key_file->start_group->name);
+
+  return NULL;
+}
+
+/**
+ * g_key_file_get_groups:
+ * @key_file: a #GKeyFile
+ * @length: return location for the number of returned groups, or %NULL
+ *
+ * Returns all groups in the key file loaded with @key_file.  
+ * The array of returned groups will be %NULL-terminated, so 
+ * @length may optionally be %NULL.
+ *
+ * Return value: a newly-allocated %NULL-terminated array of strings. 
+ *   Use g_strfreev() to free it.
+ * Since: 2.6
+ **/
+gchar **
+g_key_file_get_groups (GKeyFile *key_file,
+		       gsize    *length)
+{
+  GList *group_node;
+  gchar **groups;
+  gsize i, num_groups;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+
+  num_groups = g_list_length (key_file->groups);
+
+  g_return_val_if_fail (num_groups > 0, NULL);
+
+  group_node = g_list_last (key_file->groups);
+  
+  g_return_val_if_fail (((GKeyFileGroup *) group_node->data)->name == NULL, NULL);
+
+  /* Only need num_groups instead of num_groups + 1
+   * because the first group of the file (last in the
+   * list) is always the comment group at the top,
+   * which we skip
+   */
+  groups = g_new (gchar *, num_groups);
+
+
+  i = 0;
+  for (group_node = group_node->prev;
+       group_node != NULL;
+       group_node = group_node->prev)
+    {
+      GKeyFileGroup *group;
+
+      group = (GKeyFileGroup *) group_node->data;
+
+      g_warn_if_fail (group->name != NULL);
+
+      groups[i++] = g_strdup (group->name);
+    }
+  groups[i] = NULL;
+
+  if (length)
+    *length = i;
+
+  return groups;
+}
+
+/**
+ * g_key_file_get_value:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @error: return location for a #GError, or %NULL
+ *
+ * Returns the raw value associated with @key under @group_name. 
+ * Use g_key_file_get_string() to retrieve an unescaped UTF-8 string. 
+ *
+ * In the event the key cannot be found, %NULL is returned and 
+ * @error is set to #G_KEY_FILE_ERROR_KEY_NOT_FOUND.  In the 
+ * event that the @group_name cannot be found, %NULL is returned 
+ * and @error is set to #G_KEY_FILE_ERROR_GROUP_NOT_FOUND.
+ *
+ *
+ * Return value: a newly allocated string or %NULL if the specified 
+ *  key cannot be found.
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_key_file_get_value (GKeyFile     *key_file,
+		      const gchar  *group_name,
+		      const gchar  *key,
+		      GError      **error)
+{
+  GKeyFileGroup *group;
+  GKeyFileKeyValuePair *pair;
+  gchar *value = NULL;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+  
+  group = g_key_file_lookup_group (key_file, group_name);
+
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+      return NULL;
+    }
+
+  pair = g_key_file_lookup_key_value_pair (key_file, group, key);
+
+  if (pair)
+    value = g_strdup (pair->value);
+  else
+    g_set_error (error, G_KEY_FILE_ERROR,
+                 G_KEY_FILE_ERROR_KEY_NOT_FOUND,
+                 _("Key file does not have key '%s'"), key);
+
+  return value;
+}
+
+/**
+ * g_key_file_set_value:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @value: a string
+ *
+ * Associates a new value with @key under @group_name.  
+ *
+ * If @key cannot be found then it is created. If @group_name cannot 
+ * be found then it is created. To set an UTF-8 string which may contain 
+ * characters that need escaping (such as newlines or spaces), use 
+ * g_key_file_set_string().
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_value (GKeyFile    *key_file,
+		      const gchar *group_name,
+		      const gchar *key,
+		      const gchar *value)
+{
+  GKeyFileGroup *group;
+  GKeyFileKeyValuePair *pair;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (g_key_file_is_group_name (group_name));
+  g_return_if_fail (g_key_file_is_key_name (key));
+  g_return_if_fail (value != NULL);
+
+  group = g_key_file_lookup_group (key_file, group_name);
+
+  if (!group)
+    {
+      g_key_file_add_group (key_file, group_name);
+      group = (GKeyFileGroup *) key_file->groups->data;
+
+      g_key_file_add_key (key_file, group, key, value);
+    }
+  else
+    {
+      pair = g_key_file_lookup_key_value_pair (key_file, group, key);
+
+      if (!pair)
+        g_key_file_add_key (key_file, group, key, value);
+      else
+        {
+          g_free (pair->value);
+          pair->value = g_strdup (value);
+        }
+    }
+}
+
+/**
+ * g_key_file_get_string:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @error: return location for a #GError, or %NULL
+ *
+ * Returns the string value associated with @key under @group_name.
+ * Unlike g_key_file_get_value(), this function handles escape sequences
+ * like \s.
+ *
+ * In the event the key cannot be found, %NULL is returned and 
+ * @error is set to #G_KEY_FILE_ERROR_KEY_NOT_FOUND.  In the 
+ * event that the @group_name cannot be found, %NULL is returned 
+ * and @error is set to #G_KEY_FILE_ERROR_GROUP_NOT_FOUND.
+ *
+ * Return value: a newly allocated string or %NULL if the specified 
+ *   key cannot be found.
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_key_file_get_string (GKeyFile     *key_file,
+		       const gchar  *group_name,
+		       const gchar  *key,
+		       GError      **error)
+{
+  gchar *value, *string_value;
+  GError *key_file_error;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  key_file_error = NULL;
+
+  value = g_key_file_get_value (key_file, group_name, key, &key_file_error);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return NULL;
+    }
+
+  if (!g_utf8_validate (value, -1, NULL))
+    {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
+                   _("Key file contains key '%s' with value '%s' "
+                     "which is not UTF-8"), key, value_utf8);
+      g_free (value_utf8);
+      g_free (value);
+
+      return NULL;
+    }
+
+  string_value = g_key_file_parse_value_as_string (key_file, value, NULL,
+						   &key_file_error);
+  g_free (value);
+
+  if (key_file_error)
+    {
+      if (g_error_matches (key_file_error,
+                           G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_INVALID_VALUE))
+        {
+          g_set_error (error, G_KEY_FILE_ERROR,
+                       G_KEY_FILE_ERROR_INVALID_VALUE,
+                       _("Key file contains key '%s' "
+                         "which has value that cannot be interpreted."),
+                       key);
+          g_error_free (key_file_error);
+        }
+      else
+        g_propagate_error (error, key_file_error);
+    }
+
+  return string_value;
+}
+
+/**
+ * g_key_file_set_string:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @string: a string
+ *
+ * Associates a new string value with @key under @group_name.  
+ * If @key cannot be found then it is created.  
+ * If @group_name cannot be found then it is created.
+ * Unlike g_key_file_set_value(), this function handles characters
+ * that need escaping, such as newlines.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_string (GKeyFile    *key_file,
+		       const gchar *group_name,
+		       const gchar *key,
+		       const gchar *string)
+{
+  gchar *value;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (string != NULL);
+
+  value = g_key_file_parse_string_as_value (key_file, string, FALSE);
+  g_key_file_set_value (key_file, group_name, key, value);
+  g_free (value);
+}
+
+/**
+ * g_key_file_get_string_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @length: return location for the number of returned strings, or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Returns the values associated with @key under @group_name.
+ *
+ * In the event the key cannot be found, %NULL is returned and
+ * @error is set to #G_KEY_FILE_ERROR_KEY_NOT_FOUND.  In the
+ * event that the @group_name cannot be found, %NULL is returned
+ * and @error is set to #G_KEY_FILE_ERROR_GROUP_NOT_FOUND.
+ *
+ * Return value: a %NULL-terminated string array or %NULL if the specified 
+ *   key cannot be found. The array should be freed with g_strfreev().
+ *
+ * Since: 2.6
+ **/
+gchar **
+g_key_file_get_string_list (GKeyFile     *key_file,
+			    const gchar  *group_name,
+			    const gchar  *key,
+			    gsize        *length,
+			    GError      **error)
+{
+  GError *key_file_error = NULL;
+  gchar *value, *string_value, **values;
+  gint i, len;
+  GSList *p, *pieces = NULL;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  if (length)
+    *length = 0;
+
+  value = g_key_file_get_value (key_file, group_name, key, &key_file_error);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return NULL;
+    }
+
+  if (!g_utf8_validate (value, -1, NULL))
+    {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
+                   _("Key file contains key '%s' with value '%s' "
+                     "which is not UTF-8"), key, value_utf8);
+      g_free (value_utf8);
+      g_free (value);
+
+      return NULL;
+    }
+
+  string_value = g_key_file_parse_value_as_string (key_file, value, &pieces, &key_file_error);
+  g_free (value);
+  g_free (string_value);
+
+  if (key_file_error)
+    {
+      if (g_error_matches (key_file_error,
+                           G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_INVALID_VALUE))
+        {
+          g_set_error (error, G_KEY_FILE_ERROR,
+                       G_KEY_FILE_ERROR_INVALID_VALUE,
+                       _("Key file contains key '%s' "
+                         "which has value that cannot be interpreted."),
+                       key);
+          g_error_free (key_file_error);
+        }
+      else
+        g_propagate_error (error, key_file_error);
+
+      return NULL;
+    }
+
+  len = g_slist_length (pieces);
+  values = g_new (gchar *, len + 1);
+  for (p = pieces, i = 0; p; p = p->next)
+    values[i++] = p->data;
+  values[len] = NULL;
+
+  g_slist_free (pieces);
+
+  if (length)
+    *length = len;
+
+  return values;
+}
+
+/**
+ * g_key_file_set_string_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @list: an array of string values
+ * @length: number of string values in @list
+ *
+ * Associates a list of string values for @key under @group_name.
+ * If @key cannot be found then it is created.  
+ * If @group_name cannot be found then it is created.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_string_list (GKeyFile            *key_file,
+			    const gchar         *group_name,
+			    const gchar         *key,
+			    const gchar * const  list[],
+			    gsize                length)
+{
+  GString *value_list;
+  gsize i;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (list != NULL);
+
+  value_list = g_string_sized_new (length * 128);
+  for (i = 0; i < length && list[i] != NULL; i++)
+    {
+      gchar *value;
+
+      value = g_key_file_parse_string_as_value (key_file, list[i], TRUE);
+      g_string_append (value_list, value);
+      g_string_append_c (value_list, key_file->list_separator);
+
+      g_free (value);
+    }
+
+  g_key_file_set_value (key_file, group_name, key, value_list->str);
+  g_string_free (value_list, TRUE);
+}
+
+/**
+ * g_key_file_set_locale_string:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @locale: a locale identifier
+ * @string: a string
+ *
+ * Associates a string value for @key and @locale under @group_name.  
+ * If the translation for @key cannot be found then it is created.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_locale_string (GKeyFile     *key_file,
+			      const gchar  *group_name,
+			      const gchar  *key,
+			      const gchar  *locale,
+			      const gchar  *string)
+{
+  gchar *full_key, *value;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (locale != NULL);
+  g_return_if_fail (string != NULL);
+
+  value = g_key_file_parse_string_as_value (key_file, string, FALSE);
+  full_key = g_strdup_printf ("%s[%s]", key, locale);
+  g_key_file_set_value (key_file, group_name, full_key, value);
+  g_free (full_key);
+  g_free (value);
+}
+
+extern GSList *_g_compute_locale_variants (const gchar *locale);
+
+/**
+ * g_key_file_get_locale_string:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @locale: a locale identifier or %NULL
+ * @error: return location for a #GError, or %NULL
+ *
+ * Returns the value associated with @key under @group_name
+ * translated in the given @locale if available.  If @locale is
+ * %NULL then the current locale is assumed. 
+ *
+ * If @key cannot be found then %NULL is returned and @error is set 
+ * to #G_KEY_FILE_ERROR_KEY_NOT_FOUND. If the value associated
+ * with @key cannot be interpreted or no suitable translation can
+ * be found then the untranslated value is returned.
+ *
+ * Return value: a newly allocated string or %NULL if the specified 
+ *   key cannot be found.
+ *
+ * Since: 2.6
+ **/
+gchar *
+g_key_file_get_locale_string (GKeyFile     *key_file,
+			      const gchar  *group_name,
+			      const gchar  *key,
+			      const gchar  *locale,
+			      GError      **error)
+{
+  gchar *candidate_key, *translated_value;
+  GError *key_file_error;
+  gchar **languages;
+  gboolean free_languages = FALSE;
+  gint i;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  candidate_key = NULL;
+  translated_value = NULL;
+  key_file_error = NULL;
+
+  if (locale)
+    {
+      GSList *l, *list;
+
+      list = _g_compute_locale_variants (locale);
+
+      languages = g_new (gchar *, g_slist_length (list) + 1);
+      for (l = list, i = 0; l; l = l->next, i++)
+	languages[i] = l->data;
+      languages[i] = NULL;
+
+      g_slist_free (list);
+      free_languages = TRUE;
+    }
+  else
+    {
+      languages = (gchar **) g_get_language_names ();
+      free_languages = FALSE;
+    }
+  
+  for (i = 0; languages[i]; i++)
+    {
+      candidate_key = g_strdup_printf ("%s[%s]", key, languages[i]);
+      
+      translated_value = g_key_file_get_string (key_file,
+						group_name,
+						candidate_key, NULL);
+      g_free (candidate_key);
+
+      if (translated_value)
+	break;
+
+      g_free (translated_value);
+      translated_value = NULL;
+   }
+
+  /* Fallback to untranslated key
+   */
+  if (!translated_value)
+    {
+      translated_value = g_key_file_get_string (key_file, group_name, key,
+						&key_file_error);
+      
+      if (!translated_value)
+        g_propagate_error (error, key_file_error);
+    }
+
+  if (free_languages)
+    g_strfreev (languages);
+
+  return translated_value;
+}
+
+/** 
+ * g_key_file_get_locale_string_list: 
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @locale: a locale identifier or %NULL
+ * @length: return location for the number of returned strings or %NULL
+ * @error: return location for a #GError or %NULL
+ *
+ * Returns the values associated with @key under @group_name
+ * translated in the given @locale if available.  If @locale is
+ * %NULL then the current locale is assumed.
+
+ * If @key cannot be found then %NULL is returned and @error is set 
+ * to #G_KEY_FILE_ERROR_KEY_NOT_FOUND. If the values associated
+ * with @key cannot be interpreted or no suitable translations
+ * can be found then the untranslated values are returned. The 
+ * returned array is %NULL-terminated, so @length may optionally 
+ * be %NULL.
+ *
+ * Return value: a newly allocated %NULL-terminated string array
+ *   or %NULL if the key isn't found. The string array should be freed
+ *   with g_strfreev().
+ *
+ * Since: 2.6
+ **/
+gchar **
+g_key_file_get_locale_string_list (GKeyFile     *key_file,
+				   const gchar  *group_name,
+				   const gchar  *key,
+				   const gchar  *locale,
+				   gsize        *length,
+				   GError      **error)
+{
+  GError *key_file_error;
+  gchar **values, *value;
+  char list_separator[2];
+  gsize len;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  key_file_error = NULL;
+
+  value = g_key_file_get_locale_string (key_file, group_name, 
+					key, locale,
+					&key_file_error);
+  
+  if (key_file_error)
+    g_propagate_error (error, key_file_error);
+  
+  if (!value)
+    {
+      if (length)
+        *length = 0;
+      return NULL;
+    }
+
+  len = strlen (value);
+  if (value[len - 1] == key_file->list_separator)
+    value[len - 1] = '\0';
+
+  list_separator[0] = key_file->list_separator;
+  list_separator[1] = '\0';
+  values = g_strsplit (value, list_separator, 0);
+
+  g_free (value);
+
+  if (length)
+    *length = g_strv_length (values);
+
+  return values;
+}
+
+/**
+ * g_key_file_set_locale_string_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @locale: a locale identifier
+ * @list: a %NULL-terminated array of locale string values
+ * @length: the length of @list
+ *
+ * Associates a list of string values for @key and @locale under
+ * @group_name.  If the translation for @key cannot be found then
+ * it is created. 
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_locale_string_list (GKeyFile            *key_file,
+				   const gchar         *group_name,
+				   const gchar         *key,
+				   const gchar         *locale,
+				   const gchar * const  list[],
+				   gsize                length)
+{
+  GString *value_list;
+  gchar *full_key;
+  gsize i;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (locale != NULL);
+  g_return_if_fail (length != 0);
+
+  value_list = g_string_sized_new (length * 128);
+  for (i = 0; i < length && list[i] != NULL; i++)
+    {
+      gchar *value;
+      
+      value = g_key_file_parse_string_as_value (key_file, list[i], TRUE);
+      g_string_append (value_list, value);
+      g_string_append_c (value_list, key_file->list_separator);
+
+      g_free (value);
+    }
+
+  full_key = g_strdup_printf ("%s[%s]", key, locale);
+  g_key_file_set_value (key_file, group_name, full_key, value_list->str);
+  g_free (full_key);
+  g_string_free (value_list, TRUE);
+}
+
+/**
+ * g_key_file_get_boolean:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @error: return location for a #GError
+ *
+ * Returns the value associated with @key under @group_name as a
+ * boolean. 
+ *
+ * If @key cannot be found then %FALSE is returned and @error is set
+ * to #G_KEY_FILE_ERROR_KEY_NOT_FOUND. Likewise, if the value
+ * associated with @key cannot be interpreted as a boolean then %FALSE
+ * is returned and @error is set to #G_KEY_FILE_ERROR_INVALID_VALUE.
+ *
+ * Return value: the value associated with the key as a boolean, 
+ *    or %FALSE if the key was not found or could not be parsed.
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_get_boolean (GKeyFile     *key_file,
+			const gchar  *group_name,
+			const gchar  *key,
+			GError      **error)
+{
+  GError *key_file_error = NULL;
+  gchar *value;
+  gboolean bool_value;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (group_name != NULL, FALSE);
+  g_return_val_if_fail (key != NULL, FALSE);
+
+  value = g_key_file_get_value (key_file, group_name, key, &key_file_error);
+
+  if (!value)
+    {
+      g_propagate_error (error, key_file_error);
+      return FALSE;
+    }
+
+  bool_value = g_key_file_parse_value_as_boolean (key_file, value,
+						  &key_file_error);
+  g_free (value);
+
+  if (key_file_error)
+    {
+      if (g_error_matches (key_file_error,
+                           G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_INVALID_VALUE))
+        {
+          g_set_error (error, G_KEY_FILE_ERROR,
+                       G_KEY_FILE_ERROR_INVALID_VALUE,
+                       _("Key file contains key '%s' "
+                         "which has value that cannot be interpreted."),
+                       key);
+          g_error_free (key_file_error);
+        }
+      else
+        g_propagate_error (error, key_file_error);
+    }
+
+  return bool_value;
+}
+
+/**
+ * g_key_file_set_boolean:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @value: %TRUE or %FALSE
+ *
+ * Associates a new boolean value with @key under @group_name.
+ * If @key cannot be found then it is created. 
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_boolean (GKeyFile    *key_file,
+			const gchar *group_name,
+			const gchar *key,
+			gboolean     value)
+{
+  gchar *result;
+
+  g_return_if_fail (key_file != NULL);
+
+  result = g_key_file_parse_boolean_as_value (key_file, value);
+  g_key_file_set_value (key_file, group_name, key, result);
+  g_free (result);
+}
+
+/**
+ * g_key_file_get_boolean_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @length: the number of booleans returned
+ * @error: return location for a #GError
+ *
+ * Returns the values associated with @key under @group_name as
+ * booleans. 
+ *
+ * If @key cannot be found then %NULL is returned and @error is set to
+ * #G_KEY_FILE_ERROR_KEY_NOT_FOUND. Likewise, if the values associated
+ * with @key cannot be interpreted as booleans then %NULL is returned
+ * and @error is set to #G_KEY_FILE_ERROR_INVALID_VALUE.
+ *
+ * Return value: the values associated with the key as a list of
+ *    booleans, or %NULL if the key was not found or could not be parsed.
+ * 
+ * Since: 2.6
+ **/
+gboolean *
+g_key_file_get_boolean_list (GKeyFile     *key_file,
+			     const gchar  *group_name,
+			     const gchar  *key,
+			     gsize        *length,
+			     GError      **error)
+{
+  GError *key_file_error;
+  gchar **values;
+  gboolean *bool_values;
+  gsize i, num_bools;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  if (length)
+    *length = 0;
+
+  key_file_error = NULL;
+
+  values = g_key_file_get_string_list (key_file, group_name, key,
+				       &num_bools, &key_file_error);
+
+  if (key_file_error)
+    g_propagate_error (error, key_file_error);
+
+  if (!values)
+    return NULL;
+
+  bool_values = g_new (gboolean, num_bools);
+
+  for (i = 0; i < num_bools; i++)
+    {
+      bool_values[i] = g_key_file_parse_value_as_boolean (key_file,
+							  values[i],
+							  &key_file_error);
+
+      if (key_file_error)
+        {
+          g_propagate_error (error, key_file_error);
+          g_strfreev (values);
+          g_free (bool_values);
+
+          return NULL;
+        }
+    }
+  g_strfreev (values);
+
+  if (length)
+    *length = num_bools;
+
+  return bool_values;
+}
+
+/**
+ * g_key_file_set_boolean_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @list: an array of boolean values
+ * @length: length of @list
+ *
+ * Associates a list of boolean values with @key under @group_name.  
+ * If @key cannot be found then it is created.
+ * If @group_name is %NULL, the start_group is used.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_boolean_list (GKeyFile    *key_file,
+			     const gchar *group_name,
+			     const gchar *key,
+			     gboolean     list[],
+			     gsize        length)
+{
+  GString *value_list;
+  gsize i;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (list != NULL);
+
+  value_list = g_string_sized_new (length * 8);
+  for (i = 0; i < length; i++)
+    {
+      gchar *value;
+
+      value = g_key_file_parse_boolean_as_value (key_file, list[i]);
+
+      g_string_append (value_list, value);
+      g_string_append_c (value_list, key_file->list_separator);
+
+      g_free (value);
+    }
+
+  g_key_file_set_value (key_file, group_name, key, value_list->str);
+  g_string_free (value_list, TRUE);
+}
+
+/**
+ * g_key_file_get_integer:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @error: return location for a #GError
+ *
+ * Returns the value associated with @key under @group_name as an
+ * integer. 
+ *
+ * If @key cannot be found then 0 is returned and @error is set to
+ * #G_KEY_FILE_ERROR_KEY_NOT_FOUND. Likewise, if the value associated
+ * with @key cannot be interpreted as an integer then 0 is returned
+ * and @error is set to #G_KEY_FILE_ERROR_INVALID_VALUE.
+ *
+ * Return value: the value associated with the key as an integer, or
+ *     0 if the key was not found or could not be parsed.
+ *
+ * Since: 2.6
+ **/
+gint
+g_key_file_get_integer (GKeyFile     *key_file,
+			const gchar  *group_name,
+			const gchar  *key,
+			GError      **error)
+{
+  GError *key_file_error;
+  gchar *value;
+  gint int_value;
+
+  g_return_val_if_fail (key_file != NULL, -1);
+  g_return_val_if_fail (group_name != NULL, -1);
+  g_return_val_if_fail (key != NULL, -1);
+
+  key_file_error = NULL;
+
+  value = g_key_file_get_value (key_file, group_name, key, &key_file_error);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return 0;
+    }
+
+  int_value = g_key_file_parse_value_as_integer (key_file, value,
+						 &key_file_error);
+  g_free (value);
+
+  if (key_file_error)
+    {
+      if (g_error_matches (key_file_error,
+                           G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_INVALID_VALUE))
+        {
+          g_set_error (error, G_KEY_FILE_ERROR,
+                       G_KEY_FILE_ERROR_INVALID_VALUE,
+                       _("Key file contains key '%s' in group '%s' "
+                         "which has value that cannot be interpreted."), key, 
+                       group_name);
+          g_error_free (key_file_error);
+        }
+      else
+        g_propagate_error (error, key_file_error);
+    }
+
+  return int_value;
+}
+
+/**
+ * g_key_file_set_integer:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @value: an integer value
+ *
+ * Associates a new integer value with @key under @group_name.
+ * If @key cannot be found then it is created.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_integer (GKeyFile    *key_file,
+			const gchar *group_name,
+			const gchar *key,
+			gint         value)
+{
+  gchar *result;
+
+  g_return_if_fail (key_file != NULL);
+
+  result = g_key_file_parse_integer_as_value (key_file, value);
+  g_key_file_set_value (key_file, group_name, key, result);
+  g_free (result);
+}
+
+/**
+ * g_key_file_get_integer_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @length: the number of integers returned
+ * @error: return location for a #GError
+ *
+ * Returns the values associated with @key under @group_name as
+ * integers. 
+ *
+ * If @key cannot be found then %NULL is returned and @error is set to
+ * #G_KEY_FILE_ERROR_KEY_NOT_FOUND. Likewise, if the values associated
+ * with @key cannot be interpreted as integers then %NULL is returned
+ * and @error is set to #G_KEY_FILE_ERROR_INVALID_VALUE.
+ *
+ * Return value: the values associated with the key as a list of
+ *     integers, or %NULL if the key was not found or could not be parsed.
+ *
+ * Since: 2.6
+ **/
+gint *
+g_key_file_get_integer_list (GKeyFile     *key_file,
+			     const gchar  *group_name,
+			     const gchar  *key,
+			     gsize        *length,
+			     GError      **error)
+{
+  GError *key_file_error = NULL;
+  gchar **values;
+  gint *int_values;
+  gsize i, num_ints;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  if (length)
+    *length = 0;
+
+  values = g_key_file_get_string_list (key_file, group_name, key,
+				       &num_ints, &key_file_error);
+
+  if (key_file_error)
+    g_propagate_error (error, key_file_error);
+
+  if (!values)
+    return NULL;
+
+  int_values = g_new (gint, num_ints);
+
+  for (i = 0; i < num_ints; i++)
+    {
+      int_values[i] = g_key_file_parse_value_as_integer (key_file,
+							 values[i],
+							 &key_file_error);
+
+      if (key_file_error)
+        {
+          g_propagate_error (error, key_file_error);
+          g_strfreev (values);
+          g_free (int_values);
+
+          return NULL;
+        }
+    }
+  g_strfreev (values);
+
+  if (length)
+    *length = num_ints;
+
+  return int_values;
+}
+
+/**
+ * g_key_file_set_integer_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @list: an array of integer values
+ * @length: number of integer values in @list
+ *
+ * Associates a list of integer values with @key under @group_name.  
+ * If @key cannot be found then it is created.
+ *
+ * Since: 2.6
+ **/
+void
+g_key_file_set_integer_list (GKeyFile    *key_file,
+			     const gchar *group_name,
+			     const gchar *key,
+			     gint         list[],
+			     gsize        length)
+{
+  GString *values;
+  gsize i;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (list != NULL);
+
+  values = g_string_sized_new (length * 16);
+  for (i = 0; i < length; i++)
+    {
+      gchar *value;
+
+      value = g_key_file_parse_integer_as_value (key_file, list[i]);
+
+      g_string_append (values, value);
+      g_string_append_c (values, key_file->list_separator);
+
+      g_free (value);
+    }
+
+  g_key_file_set_value (key_file, group_name, key, values->str);
+  g_string_free (values, TRUE);
+}
+
+/**
+ * g_key_file_get_double:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @error: return location for a #GError
+ *
+ * Returns the value associated with @key under @group_name as a
+ * double. If @group_name is %NULL, the start_group is used.
+ *
+ * If @key cannot be found then 0.0 is returned and @error is set to
+ * #G_KEY_FILE_ERROR_KEY_NOT_FOUND. Likewise, if the value associated
+ * with @key cannot be interpreted as a double then 0.0 is returned
+ * and @error is set to #G_KEY_FILE_ERROR_INVALID_VALUE.
+ *
+ * Return value: the value associated with the key as a double, or
+ *     0.0 if the key was not found or could not be parsed.
+ *
+ * Since: 2.12
+ **/
+gdouble
+g_key_file_get_double  (GKeyFile     *key_file,
+                        const gchar  *group_name,
+                        const gchar  *key,
+                        GError      **error)
+{
+  GError *key_file_error;
+  gchar *value;
+  gdouble double_value;
+
+  g_return_val_if_fail (key_file != NULL, -1);
+  g_return_val_if_fail (group_name != NULL, -1);
+  g_return_val_if_fail (key != NULL, -1);
+
+  key_file_error = NULL;
+
+  value = g_key_file_get_value (key_file, group_name, key, &key_file_error);
+
+  if (key_file_error)
+    {
+      g_propagate_error (error, key_file_error);
+      return 0;
+    }
+
+  double_value = g_key_file_parse_value_as_double (key_file, value,
+                                                  &key_file_error);
+  g_free (value);
+
+  if (key_file_error)
+    {
+      if (g_error_matches (key_file_error,
+                           G_KEY_FILE_ERROR,
+                           G_KEY_FILE_ERROR_INVALID_VALUE))
+        {
+          g_set_error (error, G_KEY_FILE_ERROR,
+                       G_KEY_FILE_ERROR_INVALID_VALUE,
+                       _("Key file contains key '%s' in group '%s' "
+                         "which has value that cannot be interpreted."), key,
+                       group_name);
+          g_error_free (key_file_error);
+        }
+      else
+        g_propagate_error (error, key_file_error);
+    }
+
+  return double_value;
+}
+
+/**
+ * g_key_file_set_double:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @value: an double value
+ *
+ * Associates a new double value with @key under @group_name.
+ * If @key cannot be found then it is created. 
+ *
+ * Since: 2.12
+ **/
+void
+g_key_file_set_double  (GKeyFile    *key_file,
+                        const gchar *group_name,
+                        const gchar *key,
+                        gdouble      value)
+{
+  gchar result[G_ASCII_DTOSTR_BUF_SIZE];
+
+  g_return_if_fail (key_file != NULL);
+
+  g_ascii_dtostr (result, sizeof (result), value);
+  g_key_file_set_value (key_file, group_name, key, result);
+}
+
+/**
+ * g_key_file_get_double_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @length: the number of doubles returned
+ * @error: return location for a #GError
+ *
+ * Returns the values associated with @key under @group_name as
+ * doubles. 
+ *
+ * If @key cannot be found then %NULL is returned and @error is set to
+ * #G_KEY_FILE_ERROR_KEY_NOT_FOUND. Likewise, if the values associated
+ * with @key cannot be interpreted as doubles then %NULL is returned
+ * and @error is set to #G_KEY_FILE_ERROR_INVALID_VALUE.
+ *
+ * Return value: the values associated with the key as a list of
+ *     doubles, or %NULL if the key was not found or could not be parsed.
+ *
+ * Since: 2.12
+ **/
+gdouble *
+g_key_file_get_double_list  (GKeyFile     *key_file,
+                             const gchar  *group_name,
+                             const gchar  *key,
+                             gsize        *length,
+                             GError      **error)
+{
+  GError *key_file_error = NULL;
+  gchar **values;
+  gdouble *double_values;
+  gsize i, num_doubles;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  if (length)
+    *length = 0;
+
+  values = g_key_file_get_string_list (key_file, group_name, key,
+                                       &num_doubles, &key_file_error);
+
+  if (key_file_error)
+    g_propagate_error (error, key_file_error);
+
+  if (!values)
+    return NULL;
+
+  double_values = g_new (gdouble, num_doubles);
+
+  for (i = 0; i < num_doubles; i++)
+    {
+      double_values[i] = g_key_file_parse_value_as_double (key_file,
+							   values[i],
+							   &key_file_error);
+
+      if (key_file_error)
+        {
+          g_propagate_error (error, key_file_error);
+          g_strfreev (values);
+          g_free (double_values);
+
+          return NULL;
+        }
+    }
+  g_strfreev (values);
+
+  if (length)
+    *length = num_doubles;
+
+  return double_values;
+}
+
+/**
+ * g_key_file_set_double_list:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @list: an array of double values
+ * @length: number of double values in @list
+ *
+ * Associates a list of double values with @key under
+ * @group_name.  If @key cannot be found then it is created.
+ *
+ * Since: 2.12
+ **/
+void
+g_key_file_set_double_list (GKeyFile    *key_file,
+			    const gchar *group_name,
+			    const gchar *key,
+			    gdouble      list[],
+			    gsize        length)
+{
+  GString *values;
+  gsize i;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (list != NULL);
+
+  values = g_string_sized_new (length * 16);
+  for (i = 0; i < length; i++)
+    {
+      gchar result[G_ASCII_DTOSTR_BUF_SIZE];
+
+      g_ascii_dtostr( result, sizeof (result), list[i] );
+
+      g_string_append (values, result);
+      g_string_append_c (values, key_file->list_separator);
+    }
+
+  g_key_file_set_value (key_file, group_name, key, values->str);
+  g_string_free (values, TRUE);
+}
+
+static gboolean
+g_key_file_set_key_comment (GKeyFile     *key_file,
+                            const gchar  *group_name,
+                            const gchar  *key,
+                            const gchar  *comment,
+                            GError      **error)
+{
+  GKeyFileGroup *group;
+  GKeyFileKeyValuePair *pair;
+  GList *key_node, *comment_node, *tmp;
+  
+  group = g_key_file_lookup_group (key_file, group_name);
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+
+      return FALSE;
+    }
+
+  /* First find the key the comments are supposed to be
+   * associated with
+   */
+  key_node = g_key_file_lookup_key_value_pair_node (key_file, group, key);
+
+  if (key_node == NULL)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_KEY_NOT_FOUND,
+                   _("Key file does not have key '%s' in group '%s'"),
+                   key, group->name);
+      return FALSE;
+    }
+
+  /* Then find all the comments already associated with the
+   * key and free them
+   */
+  tmp = key_node->next;
+  while (tmp != NULL)
+    {
+      pair = (GKeyFileKeyValuePair *) tmp->data;
+
+      if (pair->key != NULL)
+        break;
+
+      comment_node = tmp;
+      tmp = tmp->next;
+      g_key_file_remove_key_value_pair_node (key_file, group,
+                                             comment_node); 
+    }
+
+  if (comment == NULL)
+    return TRUE;
+
+  /* Now we can add our new comment
+   */
+  pair = g_slice_new (GKeyFileKeyValuePair);
+  pair->key = NULL;
+  pair->value = g_key_file_parse_comment_as_value (key_file, comment);
+  
+  key_node = g_list_insert (key_node, pair, 1);
+
+  return TRUE;
+}
+
+static gboolean
+g_key_file_set_group_comment (GKeyFile     *key_file,
+                              const gchar  *group_name,
+                              const gchar  *comment,
+                              GError      **error)
+{
+  GKeyFileGroup *group;
+  
+  g_return_val_if_fail (g_key_file_is_group_name (group_name), FALSE);
+
+  group = g_key_file_lookup_group (key_file, group_name);
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+
+      return FALSE;
+    }
+
+  /* First remove any existing comment
+   */
+  if (group->comment)
+    {
+      g_key_file_key_value_pair_free (group->comment);
+      group->comment = NULL;
+    }
+
+  if (comment == NULL)
+    return TRUE;
+
+  /* Now we can add our new comment
+   */
+  group->comment = g_slice_new (GKeyFileKeyValuePair);
+  group->comment->key = NULL;
+  group->comment->value = g_key_file_parse_comment_as_value (key_file, comment);
+
+  return TRUE;
+}
+
+static gboolean
+g_key_file_set_top_comment (GKeyFile     *key_file,
+                            const gchar  *comment,
+                            GError      **error)
+{
+  GList *group_node;
+  GKeyFileGroup *group;
+  GKeyFileKeyValuePair *pair;
+
+  /* The last group in the list should be the top (comments only)
+   * group in the file
+   */
+  g_warn_if_fail (key_file->groups != NULL);
+  group_node = g_list_last (key_file->groups);
+  group = (GKeyFileGroup *) group_node->data;
+  g_warn_if_fail (group->name == NULL);
+
+  /* Note all keys must be comments at the top of
+   * the file, so we can just free it all.
+   */
+  if (group->key_value_pairs != NULL)
+    {
+      g_list_foreach (group->key_value_pairs, 
+                      (GFunc) g_key_file_key_value_pair_free, 
+                      NULL);
+      g_list_free (group->key_value_pairs);
+      group->key_value_pairs = NULL;
+    }
+
+  if (comment == NULL)
+     return TRUE;
+
+  pair = g_slice_new (GKeyFileKeyValuePair);
+  pair->key = NULL;
+  pair->value = g_key_file_parse_comment_as_value (key_file, comment);
+  
+  group->key_value_pairs =
+    g_list_prepend (group->key_value_pairs, pair);
+
+  return TRUE;
+}
+
+/**
+ * g_key_file_set_comment:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name, or %NULL
+ * @key: a key
+ * @comment: a comment
+ * @error: return location for a #GError
+ *
+ * Places a comment above @key from @group_name.
+ * If @key is %NULL then @comment will be written above @group_name.  
+ * If both @key and @group_name  are %NULL, then @comment will be 
+ * written above the first group in the file.
+ *
+ * Returns: %TRUE if the comment was written, %FALSE otherwise
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_set_comment (GKeyFile     *key_file,
+                        const gchar  *group_name,
+                        const gchar  *key,
+                        const gchar  *comment,
+                        GError      **error)
+{
+  g_return_val_if_fail (key_file != NULL, FALSE);
+
+  if (group_name != NULL && key != NULL) 
+    {
+      if (!g_key_file_set_key_comment (key_file, group_name, key, comment, error))
+        return FALSE;
+    } 
+  else if (group_name != NULL) 
+    {
+      if (!g_key_file_set_group_comment (key_file, group_name, comment, error))
+        return FALSE;
+    } 
+  else 
+    {
+      if (!g_key_file_set_top_comment (key_file, comment, error))
+        return FALSE;
+    }
+
+  if (comment != NULL)
+    key_file->approximate_size += strlen (comment);
+
+  return TRUE;
+}
+
+static gchar *
+g_key_file_get_key_comment (GKeyFile     *key_file,
+                            const gchar  *group_name,
+                            const gchar  *key,
+                            GError      **error)
+{
+  GKeyFileGroup *group;
+  GKeyFileKeyValuePair *pair;
+  GList *key_node, *tmp;
+  GString *string;
+  gchar *comment;
+
+  g_return_val_if_fail (g_key_file_is_group_name (group_name), NULL);
+
+  group = g_key_file_lookup_group (key_file, group_name);
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+
+      return NULL;
+    }
+
+  /* First find the key the comments are supposed to be
+   * associated with
+   */
+  key_node = g_key_file_lookup_key_value_pair_node (key_file, group, key);
+
+  if (key_node == NULL)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_KEY_NOT_FOUND,
+                   _("Key file does not have key '%s' in group '%s'"),
+                   key, group->name);
+      return NULL;
+    }
+
+  string = NULL;
+
+  /* Then find all the comments already associated with the
+   * key and concatentate them.
+   */
+  tmp = key_node->next;
+  if (!key_node->next)
+    return NULL;
+
+  pair = (GKeyFileKeyValuePair *) tmp->data;
+  if (pair->key != NULL)
+    return NULL;
+
+  while (tmp->next)
+    {
+      pair = (GKeyFileKeyValuePair *) tmp->next->data;
+      
+      if (pair->key != NULL)
+        break;
+
+      tmp = tmp->next;
+    }
+
+  while (tmp != key_node)
+    {
+      pair = (GKeyFileKeyValuePair *) tmp->data;
+      
+      if (string == NULL)
+	string = g_string_sized_new (512);
+      
+      comment = g_key_file_parse_value_as_comment (key_file, pair->value);
+      g_string_append (string, comment);
+      g_free (comment);
+      
+      tmp = tmp->prev;
+    }
+
+  if (string != NULL)
+    {
+      comment = string->str;
+      g_string_free (string, FALSE);
+    }
+  else
+    comment = NULL;
+
+  return comment;
+}
+
+static gchar *
+get_group_comment (GKeyFile       *key_file,
+		   GKeyFileGroup  *group,
+		   GError        **error)
+{
+  GString *string;
+  GList *tmp;
+  gchar *comment;
+
+  string = NULL;
+
+  tmp = group->key_value_pairs;
+  while (tmp)
+    {
+      GKeyFileKeyValuePair *pair;
+
+      pair = (GKeyFileKeyValuePair *) tmp->data;
+
+      if (pair->key != NULL)
+	{
+	  tmp = tmp->prev;
+	  break;
+	}
+
+      if (tmp->next == NULL)
+	break;
+
+      tmp = tmp->next;
+    }
+  
+  while (tmp != NULL)
+    {
+      GKeyFileKeyValuePair *pair;
+
+      pair = (GKeyFileKeyValuePair *) tmp->data;
+
+      if (string == NULL)
+        string = g_string_sized_new (512);
+
+      comment = g_key_file_parse_value_as_comment (key_file, pair->value);
+      g_string_append (string, comment);
+      g_free (comment);
+
+      tmp = tmp->prev;
+    }
+
+  if (string != NULL)
+    return g_string_free (string, FALSE);
+
+  return NULL;
+}
+
+static gchar *
+g_key_file_get_group_comment (GKeyFile     *key_file,
+                              const gchar  *group_name,
+                              GError      **error)
+{
+  GList *group_node;
+  GKeyFileGroup *group;
+  
+  group = g_key_file_lookup_group (key_file, group_name);
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+
+      return NULL;
+    }
+
+  if (group->comment)
+    return g_strdup (group->comment->value);
+  
+  group_node = g_key_file_lookup_group_node (key_file, group_name);
+  group_node = group_node->next;
+  group = (GKeyFileGroup *)group_node->data;  
+  return get_group_comment (key_file, group, error);
+}
+
+static gchar *
+g_key_file_get_top_comment (GKeyFile  *key_file,
+                            GError   **error)
+{
+  GList *group_node;
+  GKeyFileGroup *group;
+
+  /* The last group in the list should be the top (comments only)
+   * group in the file
+   */
+  g_warn_if_fail (key_file->groups != NULL);
+  group_node = g_list_last (key_file->groups);
+  group = (GKeyFileGroup *) group_node->data;
+  g_warn_if_fail (group->name == NULL);
+
+  return get_group_comment (key_file, group, error);
+}
+
+/**
+ * g_key_file_get_comment:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name, or %NULL
+ * @key: a key
+ * @error: return location for a #GError
+ *
+ * Retrieves a comment above @key from @group_name.
+ * If @key is %NULL then @comment will be read from above 
+ * @group_name. If both @key and @group_name are %NULL, then 
+ * @comment will be read from above the first group in the file.
+ *
+ * Returns: a comment that should be freed with g_free()
+ *
+ * Since: 2.6
+ **/
+gchar * 
+g_key_file_get_comment (GKeyFile     *key_file,
+                        const gchar  *group_name,
+                        const gchar  *key,
+                        GError      **error)
+{
+  g_return_val_if_fail (key_file != NULL, NULL);
+
+  if (group_name != NULL && key != NULL)
+    return g_key_file_get_key_comment (key_file, group_name, key, error);
+  else if (group_name != NULL)
+    return g_key_file_get_group_comment (key_file, group_name, error);
+  else
+    return g_key_file_get_top_comment (key_file, error);
+}
+
+/**
+ * g_key_file_remove_comment:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name, or %NULL
+ * @key: a key
+ * @error: return location for a #GError
+ *
+ * Removes a comment above @key from @group_name.
+ * If @key is %NULL then @comment will be removed above @group_name. 
+ * If both @key and @group_name are %NULL, then @comment will
+ * be removed above the first group in the file.
+ *
+ * Returns: %TRUE if the comment was removed, %FALSE otherwise
+ *
+ * Since: 2.6
+ **/
+
+gboolean
+g_key_file_remove_comment (GKeyFile     *key_file,
+                           const gchar  *group_name,
+                           const gchar  *key,
+                           GError      **error)
+{
+  g_return_val_if_fail (key_file != NULL, FALSE);
+
+  if (group_name != NULL && key != NULL)
+    return g_key_file_set_key_comment (key_file, group_name, key, NULL, error);
+  else if (group_name != NULL)
+    return g_key_file_set_group_comment (key_file, group_name, NULL, error);
+  else
+    return g_key_file_set_top_comment (key_file, NULL, error);
+}
+
+/**
+ * g_key_file_has_group:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ *
+ * Looks whether the key file has the group @group_name.
+ *
+ * Return value: %TRUE if @group_name is a part of @key_file, %FALSE
+ * otherwise.
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_has_group (GKeyFile    *key_file,
+		      const gchar *group_name)
+{
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (group_name != NULL, FALSE);
+
+  return g_key_file_lookup_group (key_file, group_name) != NULL;
+}
+
+/**
+ * g_key_file_has_key:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key name
+ * @error: return location for a #GError
+ *
+ * Looks whether the key file has the key @key in the group
+ * @group_name. 
+ *
+ * Return value: %TRUE if @key is a part of @group_name, %FALSE
+ * otherwise.
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_has_key (GKeyFile     *key_file,
+		    const gchar  *group_name,
+		    const gchar  *key,
+		    GError      **error)
+{
+  GKeyFileKeyValuePair *pair;
+  GKeyFileGroup *group;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (group_name != NULL, FALSE);
+  g_return_val_if_fail (key != NULL, FALSE);
+
+  group = g_key_file_lookup_group (key_file, group_name);
+
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+
+      return FALSE;
+    }
+
+  pair = g_key_file_lookup_key_value_pair (key_file, group, key);
+
+  return pair != NULL;
+}
+
+static void
+g_key_file_add_group (GKeyFile    *key_file,
+		      const gchar *group_name)
+{
+  GKeyFileGroup *group;
+
+  g_return_if_fail (key_file != NULL);
+  g_return_if_fail (g_key_file_is_group_name (group_name));
+
+  group = g_key_file_lookup_group (key_file, group_name);
+  if (group != NULL)
+    {
+      key_file->current_group = group;
+      return;
+    }
+
+  group = g_slice_new0 (GKeyFileGroup);
+  group->name = g_strdup (group_name);
+  group->lookup_map = g_hash_table_new (g_str_hash, g_str_equal);
+  key_file->groups = g_list_prepend (key_file->groups, group);
+  key_file->approximate_size += strlen (group_name) + 3;
+  key_file->current_group = group;
+
+  if (key_file->start_group == NULL)
+    key_file->start_group = group;
+
+  g_hash_table_insert (key_file->group_hash, (gpointer)group->name, group);
+}
+
+static void
+g_key_file_key_value_pair_free (GKeyFileKeyValuePair *pair)
+{
+  if (pair != NULL)
+    {
+      g_free (pair->key);
+      g_free (pair->value);
+      g_slice_free (GKeyFileKeyValuePair, pair);
+    }
+}
+
+/* Be careful not to call this function on a node with data in the
+ * lookup map without removing it from the lookup map, first.
+ *
+ * Some current cases where this warning is not a concern are
+ * when:
+ *   - the node being removed is a comment node
+ *   - the entire lookup map is getting destroyed soon after
+ *     anyway.
+ */ 
+static void
+g_key_file_remove_key_value_pair_node (GKeyFile      *key_file,
+                                       GKeyFileGroup *group,
+			               GList         *pair_node)
+{
+
+  GKeyFileKeyValuePair *pair;
+
+  pair = (GKeyFileKeyValuePair *) pair_node->data;
+
+  group->key_value_pairs = g_list_remove_link (group->key_value_pairs, pair_node);
+
+  if (pair->key != NULL)
+    key_file->approximate_size -= strlen (pair->key) + 1;
+
+  g_warn_if_fail (pair->value != NULL);
+  key_file->approximate_size -= strlen (pair->value);
+
+  g_key_file_key_value_pair_free (pair);
+
+  g_list_free_1 (pair_node);
+}
+
+static void
+g_key_file_remove_group_node (GKeyFile *key_file,
+			      GList    *group_node)
+{
+  GKeyFileGroup *group;
+  GList *tmp;
+
+  group = (GKeyFileGroup *) group_node->data;
+
+  if (group->name)
+    g_hash_table_remove (key_file->group_hash, group->name);
+
+  /* If the current group gets deleted make the current group the last
+   * added group.
+   */
+  if (key_file->current_group == group)
+    {
+      /* groups should always contain at least the top comment group,
+       * unless g_key_file_clear has been called
+       */
+      if (key_file->groups)
+        key_file->current_group = (GKeyFileGroup *) key_file->groups->data;
+      else
+        key_file->current_group = NULL;
+    }
+
+  /* If the start group gets deleted make the start group the first
+   * added group.
+   */
+  if (key_file->start_group == group)
+    {
+      tmp = g_list_last (key_file->groups);
+      while (tmp != NULL)
+	{
+	  if (tmp != group_node &&
+	      ((GKeyFileGroup *) tmp->data)->name != NULL)
+	    break;
+
+	  tmp = tmp->prev;
+	}
+
+      if (tmp)
+        key_file->start_group = (GKeyFileGroup *) tmp->data;
+      else
+        key_file->start_group = NULL;
+    }
+
+  key_file->groups = g_list_remove_link (key_file->groups, group_node);
+
+  if (group->name != NULL)
+    key_file->approximate_size -= strlen (group->name) + 3;
+
+  tmp = group->key_value_pairs;
+  while (tmp != NULL)
+    {
+      GList *pair_node;
+
+      pair_node = tmp;
+      tmp = tmp->next;
+      g_key_file_remove_key_value_pair_node (key_file, group, pair_node);
+    }
+
+  g_warn_if_fail (group->key_value_pairs == NULL);
+
+  if (group->lookup_map)
+    {
+      g_hash_table_destroy (group->lookup_map);
+      group->lookup_map = NULL;
+    }
+
+  g_free ((gchar *) group->name);
+  g_slice_free (GKeyFileGroup, group);
+  g_list_free_1 (group_node);
+}
+
+/**
+ * g_key_file_remove_group:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @error: return location for a #GError or %NULL
+ *
+ * Removes the specified group, @group_name, 
+ * from the key file. 
+ *
+ * Returns: %TRUE if the group was removed, %FALSE otherwise
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_remove_group (GKeyFile     *key_file,
+			 const gchar  *group_name,
+			 GError      **error)
+{
+  GList *group_node;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (group_name != NULL, FALSE);
+
+  group_node = g_key_file_lookup_group_node (key_file, group_name);
+
+  if (!group_node)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+		   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+		   _("Key file does not have group '%s'"),
+		   group_name);
+      return FALSE;
+    }
+
+  g_key_file_remove_group_node (key_file, group_node);
+
+  return TRUE;  
+}
+
+static void
+g_key_file_add_key (GKeyFile      *key_file,
+		    GKeyFileGroup *group,
+		    const gchar   *key,
+		    const gchar   *value)
+{
+  GKeyFileKeyValuePair *pair;
+
+  pair = g_slice_new (GKeyFileKeyValuePair);
+  pair->key = g_strdup (key);
+  pair->value = g_strdup (value);
+
+  g_hash_table_replace (group->lookup_map, pair->key, pair);
+  group->key_value_pairs = g_list_prepend (group->key_value_pairs, pair);
+  group->has_trailing_blank_line = FALSE;
+  key_file->approximate_size += strlen (key) + strlen (value) + 2;
+}
+
+/**
+ * g_key_file_remove_key:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key name to remove
+ * @error: return location for a #GError or %NULL
+ *
+ * Removes @key in @group_name from the key file. 
+ *
+ * Returns: %TRUE if the key was removed, %FALSE otherwise
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_key_file_remove_key (GKeyFile     *key_file,
+		       const gchar  *group_name,
+		       const gchar  *key,
+		       GError      **error)
+{
+  GKeyFileGroup *group;
+  GKeyFileKeyValuePair *pair;
+
+  g_return_val_if_fail (key_file != NULL, FALSE);
+  g_return_val_if_fail (group_name != NULL, FALSE);
+  g_return_val_if_fail (key != NULL, FALSE);
+
+  pair = NULL;
+
+  group = g_key_file_lookup_group (key_file, group_name);
+  if (!group)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+                   _("Key file does not have group '%s'"),
+                   group_name ? group_name : "(null)");
+      return FALSE;
+    }
+
+  pair = g_key_file_lookup_key_value_pair (key_file, group, key);
+
+  if (!pair)
+    {
+      g_set_error (error, G_KEY_FILE_ERROR,
+                   G_KEY_FILE_ERROR_KEY_NOT_FOUND,
+                   _("Key file does not have key '%s' in group '%s'"),
+		   key, group->name);
+      return FALSE;
+    }
+
+  key_file->approximate_size -= strlen (pair->key) + strlen (pair->value) + 2;
+
+  group->key_value_pairs = g_list_remove (group->key_value_pairs, pair);
+  g_hash_table_remove (group->lookup_map, pair->key);  
+  g_key_file_key_value_pair_free (pair);
+
+  return TRUE;
+}
+
+static GList *
+g_key_file_lookup_group_node (GKeyFile    *key_file,
+			      const gchar *group_name)
+{
+  GKeyFileGroup *group;
+  GList *tmp;
+
+  for (tmp = key_file->groups; tmp != NULL; tmp = tmp->next)
+    {
+      group = (GKeyFileGroup *) tmp->data;
+
+      if (group && group->name && strcmp (group->name, group_name) == 0)
+        break;
+    }
+
+  return tmp;
+}
+
+static GKeyFileGroup *
+g_key_file_lookup_group (GKeyFile    *key_file,
+			 const gchar *group_name)
+{
+  return (GKeyFileGroup *)g_hash_table_lookup (key_file->group_hash, group_name);
+}
+
+static GList *
+g_key_file_lookup_key_value_pair_node (GKeyFile       *key_file,
+			               GKeyFileGroup  *group,
+                                       const gchar    *key)
+{
+  GList *key_node;
+
+  for (key_node = group->key_value_pairs;
+       key_node != NULL;
+       key_node = key_node->next)
+    {
+      GKeyFileKeyValuePair *pair;
+
+      pair = (GKeyFileKeyValuePair *) key_node->data; 
+
+      if (pair->key && strcmp (pair->key, key) == 0)
+        break;
+    }
+
+  return key_node;
+}
+
+static GKeyFileKeyValuePair *
+g_key_file_lookup_key_value_pair (GKeyFile      *key_file,
+				  GKeyFileGroup *group,
+				  const gchar   *key)
+{
+  return (GKeyFileKeyValuePair *) g_hash_table_lookup (group->lookup_map, key);
+}
+
+/* Lines starting with # or consisting entirely of whitespace are merely
+ * recorded, not parsed. This function assumes all leading whitespace
+ * has been stripped.
+ */
+static gboolean
+g_key_file_line_is_comment (const gchar *line)
+{
+  return (*line == '#' || *line == '\0' || *line == '\n');
+}
+
+static gboolean 
+g_key_file_is_group_name (const gchar *name)
+{
+  gchar *p, *q;
+
+  if (name == NULL)
+    return FALSE;
+
+  p = q = (gchar *) name;
+  while (*q && *q != ']' && *q != '[' && !g_ascii_iscntrl (*q))
+    q = g_utf8_find_next_char (q, NULL);
+  
+  if (*q != '\0' || q == p)
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+g_key_file_is_key_name (const gchar *name)
+{
+  gchar *p, *q;
+
+  if (name == NULL)
+    return FALSE;
+
+  p = q = (gchar *) name;
+  /* We accept a little more than the desktop entry spec says,
+   * since gnome-vfs uses mime-types as keys in its cache.
+   */
+  while (*q && *q != '=' && *q != '[' && *q != ']')
+    q = g_utf8_find_next_char (q, NULL);
+  
+  /* No empty keys, please */
+  if (q == p)
+    return FALSE;
+
+  /* We accept spaces in the middle of keys to not break
+   * existing apps, but we don't tolerate initial or final
+   * spaces, which would lead to silent corruption when
+   * rereading the file.
+   */
+  if (*p == ' ' || q[-1] == ' ')
+    return FALSE;
+
+  if (*q == '[')
+    {
+      q++;
+      while (*q && (g_unichar_isalnum (g_utf8_get_char_validated (q, -1)) || *q == '-' || *q == '_' || *q == '.' || *q == '@'))
+        q = g_utf8_find_next_char (q, NULL);
+
+      if (*q != ']')
+        return FALSE;     
+
+      q++;
+    }
+
+  if (*q != '\0')
+    return FALSE;
+
+  return TRUE;
+}
+
+/* A group in a key file is made up of a starting '[' followed by one
+ * or more letters making up the group name followed by ']'.
+ */
+static gboolean
+g_key_file_line_is_group (const gchar *line)
+{
+  gchar *p;
+
+  p = (gchar *) line;
+  if (*p != '[')
+    return FALSE;
+
+  p++;
+
+  while (*p && *p != ']')
+    p = g_utf8_find_next_char (p, NULL);
+
+  if (*p != ']')
+    return FALSE;
+ 
+  /* silently accept whitespace after the ] */
+  p = g_utf8_find_next_char (p, NULL);
+  while (*p == ' ' || *p == '\t')
+    p = g_utf8_find_next_char (p, NULL);
+     
+  if (*p)
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+g_key_file_line_is_key_value_pair (const gchar *line)
+{
+  gchar *p;
+
+  p = (gchar *) g_utf8_strchr (line, -1, '=');
+
+  if (!p)
+    return FALSE;
+
+  /* Key must be non-empty
+   */
+  if (*p == line[0])
+    return FALSE;
+
+  return TRUE;
+}
+
+static gchar *
+g_key_file_parse_value_as_string (GKeyFile     *key_file,
+				  const gchar  *value,
+				  GSList      **pieces,
+				  GError      **error)
+{
+  gchar *string_value, *p, *q0, *q;
+
+  string_value = g_new (gchar, strlen (value) + 1);
+
+  p = (gchar *) value;
+  q0 = q = string_value;
+  while (*p)
+    {
+      if (*p == '\\')
+        {
+          p++;
+
+          switch (*p)
+            {
+            case 's':
+              *q = ' ';
+              break;
+
+            case 'n':
+              *q = '\n';
+              break;
+
+            case 't':
+              *q = '\t';
+              break;
+
+            case 'r':
+              *q = '\r';
+              break;
+
+            case '\\':
+              *q = '\\';
+              break;
+
+	    case '\0':
+	      g_set_error_literal (error, G_KEY_FILE_ERROR,
+                                   G_KEY_FILE_ERROR_INVALID_VALUE,
+                                   _("Key file contains escape character "
+                                     "at end of line"));
+	      break;
+
+            default:
+	      if (pieces && *p == key_file->list_separator)
+		*q = key_file->list_separator;
+	      else
+		{
+		  *q++ = '\\';
+		  *q = *p;
+		  
+		  if (*error == NULL)
+		    {
+		      gchar sequence[3];
+		      
+		      sequence[0] = '\\';
+		      sequence[1] = *p;
+		      sequence[2] = '\0';
+		      
+		      g_set_error (error, G_KEY_FILE_ERROR,
+				   G_KEY_FILE_ERROR_INVALID_VALUE,
+				   _("Key file contains invalid escape "
+				     "sequence '%s'"), sequence);
+		    }
+		}
+              break;
+            }
+        }
+      else
+	{
+	  *q = *p;
+	  if (pieces && (*p == key_file->list_separator))
+	    {
+	      *pieces = g_slist_prepend (*pieces, g_strndup (q0, q - q0));
+	      q0 = q + 1; 
+	    }
+	}
+
+      if (*p == '\0')
+	break;
+
+      q++;
+      p++;
+    }
+
+  *q = '\0';
+  if (pieces)
+  {
+    if (q0 < q)
+      *pieces = g_slist_prepend (*pieces, g_strndup (q0, q - q0));
+    *pieces = g_slist_reverse (*pieces);
+  }
+
+  return string_value;
+}
+
+static gchar *
+g_key_file_parse_string_as_value (GKeyFile    *key_file,
+				  const gchar *string,
+				  gboolean     escape_separator)
+{
+  gchar *value, *p, *q;
+  gsize length;
+  gboolean parsing_leading_space;
+
+  length = strlen (string) + 1;
+
+  /* Worst case would be that every character needs to be escaped.
+   * In other words every character turns to two characters
+   */
+  value = g_new (gchar, 2 * length);
+
+  p = (gchar *) string;
+  q = value;
+  parsing_leading_space = TRUE;
+  while (p < (string + length - 1))
+    {
+      gchar escaped_character[3] = { '\\', 0, 0 };
+
+      switch (*p)
+        {
+        case ' ':
+          if (parsing_leading_space)
+            {
+              escaped_character[1] = 's';
+              strcpy (q, escaped_character);
+              q += 2;
+            }
+          else
+            {
+	      *q = *p;
+	      q++;
+            }
+          break;
+        case '\t':
+          if (parsing_leading_space)
+            {
+              escaped_character[1] = 't';
+              strcpy (q, escaped_character);
+              q += 2;
+            }
+          else
+            {
+	      *q = *p;
+	      q++;
+            }
+          break;
+        case '\n':
+          escaped_character[1] = 'n';
+          strcpy (q, escaped_character);
+          q += 2;
+          break;
+        case '\r':
+          escaped_character[1] = 'r';
+          strcpy (q, escaped_character);
+          q += 2;
+          break;
+        case '\\':
+          escaped_character[1] = '\\';
+          strcpy (q, escaped_character);
+          q += 2;
+          parsing_leading_space = FALSE;
+          break;
+        default:
+	  if (escape_separator && *p == key_file->list_separator)
+	    {
+	      escaped_character[1] = key_file->list_separator;
+	      strcpy (q, escaped_character);
+	      q += 2;
+              parsing_leading_space = TRUE;
+	    }
+	  else 
+	    {
+	      *q = *p;
+	      q++;
+              parsing_leading_space = FALSE;
+	    }
+          break;
+        }
+      p++;
+    }
+  *q = '\0';
+
+  return value;
+}
+
+static gint
+g_key_file_parse_value_as_integer (GKeyFile     *key_file,
+				   const gchar  *value,
+				   GError      **error)
+{
+  gchar *end_of_valid_int;
+ glong long_value;
+  gint int_value;
+
+  errno = 0;
+  long_value = strtol (value, &end_of_valid_int, 10);
+
+  if (*value == '\0' || *end_of_valid_int != '\0')
+    {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
+      g_set_error (error, G_KEY_FILE_ERROR,
+		   G_KEY_FILE_ERROR_INVALID_VALUE,
+		   _("Value '%s' cannot be interpreted "
+		     "as a number."), value_utf8);
+      g_free (value_utf8);
+
+      return 0;
+    }
+
+  int_value = long_value;
+  if (int_value != long_value || errno == ERANGE)
+    {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
+      g_set_error (error,
+		   G_KEY_FILE_ERROR, 
+		   G_KEY_FILE_ERROR_INVALID_VALUE,
+		   _("Integer value '%s' out of range"), 
+		   value_utf8);
+      g_free (value_utf8);
+
+      return 0;
+    }
+  
+  return int_value;
+}
+
+static gchar *
+g_key_file_parse_integer_as_value (GKeyFile *key_file,
+				   gint      value)
+
+{
+  return g_strdup_printf ("%d", value);
+}
+
+static gdouble
+g_key_file_parse_value_as_double  (GKeyFile     *key_file,
+                                   const gchar  *value,
+                                   GError      **error)
+{
+  gchar *end_of_valid_d;
+  gdouble double_value = 0;
+
+  double_value = g_ascii_strtod (value, &end_of_valid_d);
+
+  if (*end_of_valid_d != '\0' || end_of_valid_d == value)
+    {
+      gchar *value_utf8 = _g_utf8_make_valid (value);
+      g_set_error (error, G_KEY_FILE_ERROR,
+		   G_KEY_FILE_ERROR_INVALID_VALUE,
+		   _("Value '%s' cannot be interpreted "
+		     "as a float number."), 
+		   value_utf8);
+      g_free (value_utf8);
+    }
+
+  return double_value;
+}
+
+static gboolean
+g_key_file_parse_value_as_boolean (GKeyFile     *key_file,
+				   const gchar  *value,
+				   GError      **error)
+{
+  gchar *value_utf8;
+
+  if (strcmp (value, "true") == 0 || strcmp (value, "1") == 0)
+    return TRUE;
+  else if (strcmp (value, "false") == 0 || strcmp (value, "0") == 0)
+    return FALSE;
+
+  value_utf8 = _g_utf8_make_valid (value);
+  g_set_error (error, G_KEY_FILE_ERROR,
+               G_KEY_FILE_ERROR_INVALID_VALUE,
+               _("Value '%s' cannot be interpreted "
+		 "as a boolean."), value_utf8);
+  g_free (value_utf8);
+
+  return FALSE;
+}
+
+static gchar *
+g_key_file_parse_boolean_as_value (GKeyFile *key_file,
+				   gboolean  value)
+{
+  if (value)
+    return g_strdup ("true");
+  else
+    return g_strdup ("false");
+}
+
+static gchar *
+g_key_file_parse_value_as_comment (GKeyFile    *key_file,
+                                   const gchar *value)
+{
+  GString *string;
+  gchar **lines;
+  gsize i;
+
+  string = g_string_sized_new (512);
+
+  lines = g_strsplit (value, "\n", 0);
+
+  for (i = 0; lines[i] != NULL; i++)
+    {
+        if (lines[i][0] != '#')
+           g_string_append_printf (string, "%s\n", lines[i]);
+        else 
+           g_string_append_printf (string, "%s\n", lines[i] + 1);
+    }
+  g_strfreev (lines);
+
+  return g_string_free (string, FALSE);
+}
+
+static gchar *
+g_key_file_parse_comment_as_value (GKeyFile      *key_file,
+                                   const gchar   *comment)
+{
+  GString *string;
+  gchar **lines;
+  gsize i;
+
+  string = g_string_sized_new (512);
+
+  lines = g_strsplit (comment, "\n", 0);
+
+  for (i = 0; lines[i] != NULL; i++)
+    g_string_append_printf (string, "#%s%s", lines[i], 
+                            lines[i + 1] == NULL? "" : "\n");
+  g_strfreev (lines);
+
+  return g_string_free (string, FALSE);
+}
+
+#define __G_KEY_FILE_C__
+#include "galiasdef.c"
diff --git a/glib/gkeyfile.h b/glib/gkeyfile.h
new file mode 100644
index 0000000..b19124c
--- /dev/null
+++ b/glib/gkeyfile.h
@@ -0,0 +1,250 @@
+/* gkeyfile.h - desktop entry file parser
+ *
+ *  Copyright 2004 Red Hat, Inc.
+ *
+ *  Ray Strode <halfline@hawaii.rr.com>
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_KEY_FILE_H__
+#define __G_KEY_FILE_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+  G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
+  G_KEY_FILE_ERROR_PARSE,
+  G_KEY_FILE_ERROR_NOT_FOUND,
+  G_KEY_FILE_ERROR_KEY_NOT_FOUND,
+  G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
+  G_KEY_FILE_ERROR_INVALID_VALUE
+} GKeyFileError;
+
+#define G_KEY_FILE_ERROR g_key_file_error_quark()
+
+GQuark g_key_file_error_quark (void);
+
+typedef struct _GKeyFile GKeyFile;
+
+typedef enum
+{
+  G_KEY_FILE_NONE              = 0,
+  G_KEY_FILE_KEEP_COMMENTS     = 1 << 0,
+  G_KEY_FILE_KEEP_TRANSLATIONS = 1 << 1
+} GKeyFileFlags;
+
+GKeyFile *g_key_file_new                    (void);
+void      g_key_file_free                   (GKeyFile             *key_file);
+void      g_key_file_set_list_separator     (GKeyFile             *key_file,
+					     gchar                 separator);
+gboolean  g_key_file_load_from_file         (GKeyFile             *key_file,
+					     const gchar          *file,
+					     GKeyFileFlags         flags,
+					     GError              **error);
+gboolean  g_key_file_load_from_data         (GKeyFile             *key_file,
+					     const gchar          *data,
+					     gsize                 length,
+					     GKeyFileFlags         flags,
+					     GError              **error);
+gboolean g_key_file_load_from_dirs          (GKeyFile             *key_file,
+					     const gchar	  *file,
+					     const gchar	 **search_dirs,
+					     gchar		 **full_path,
+					     GKeyFileFlags         flags,
+					     GError              **error);
+gboolean g_key_file_load_from_data_dirs     (GKeyFile             *key_file,
+					     const gchar          *file,
+					     gchar               **full_path,
+					     GKeyFileFlags         flags,
+					     GError              **error);
+gchar    *g_key_file_to_data                (GKeyFile             *key_file,
+					     gsize                *length,
+					     GError              **error) G_GNUC_MALLOC;
+gchar    *g_key_file_get_start_group        (GKeyFile             *key_file) G_GNUC_MALLOC;
+gchar   **g_key_file_get_groups             (GKeyFile             *key_file,
+					     gsize                *length) G_GNUC_MALLOC;
+gchar   **g_key_file_get_keys               (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     gsize                *length,
+					     GError              **error) G_GNUC_MALLOC;
+gboolean  g_key_file_has_group              (GKeyFile             *key_file,
+					     const gchar          *group_name);
+gboolean  g_key_file_has_key                (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     GError              **error);
+gchar    *g_key_file_get_value              (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_value              (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar          *value);
+gchar    *g_key_file_get_string             (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_string             (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar          *string);
+gchar    *g_key_file_get_locale_string      (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar          *locale,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_locale_string      (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar          *locale,
+					     const gchar          *string);
+gboolean  g_key_file_get_boolean            (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     GError              **error);
+void      g_key_file_set_boolean            (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gboolean              value);
+gint      g_key_file_get_integer            (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     GError              **error);
+void      g_key_file_set_integer            (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gint                  value);
+gdouble   g_key_file_get_double             (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             GError              **error);
+void      g_key_file_set_double             (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             gdouble               value);
+gchar   **g_key_file_get_string_list        (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gsize                *length,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_string_list        (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar * const   list[],
+					     gsize                 length);
+gchar   **g_key_file_get_locale_string_list (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar          *locale,
+					     gsize                *length,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_locale_string_list (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     const gchar          *locale,
+					     const gchar * const   list[],
+					     gsize                 length);
+gboolean *g_key_file_get_boolean_list       (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gsize                *length,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_boolean_list       (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gboolean              list[],
+					     gsize                 length);
+gint     *g_key_file_get_integer_list       (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gsize                *length,
+					     GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_double_list        (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             gdouble               list[],
+                                             gsize                 length);
+gdouble  *g_key_file_get_double_list        (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             gsize                *length,
+                                             GError              **error) G_GNUC_MALLOC;
+void      g_key_file_set_integer_list       (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     gint                  list[],
+					     gsize                 length);
+gboolean  g_key_file_set_comment            (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             const gchar          *comment,
+                                             GError              **error);
+gchar    *g_key_file_get_comment            (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             GError              **error) G_GNUC_MALLOC;
+
+gboolean  g_key_file_remove_comment         (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+					     GError              **error);
+gboolean  g_key_file_remove_key             (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     const gchar          *key,
+					     GError              **error);
+gboolean  g_key_file_remove_group           (GKeyFile             *key_file,
+					     const gchar          *group_name,
+					     GError              **error);
+
+/* Defines for handling freedesktop.org Desktop files */
+#define G_KEY_FILE_DESKTOP_GROUP                "Desktop Entry"
+
+#define G_KEY_FILE_DESKTOP_KEY_TYPE             "Type"
+#define G_KEY_FILE_DESKTOP_KEY_VERSION          "Version"
+#define G_KEY_FILE_DESKTOP_KEY_NAME             "Name"
+#define G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME     "GenericName"
+#define G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY       "NoDisplay"
+#define G_KEY_FILE_DESKTOP_KEY_COMMENT          "Comment"
+#define G_KEY_FILE_DESKTOP_KEY_ICON             "Icon"
+#define G_KEY_FILE_DESKTOP_KEY_HIDDEN           "Hidden"
+#define G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN     "OnlyShowIn"
+#define G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN      "NotShowIn"
+#define G_KEY_FILE_DESKTOP_KEY_TRY_EXEC         "TryExec"
+#define G_KEY_FILE_DESKTOP_KEY_EXEC             "Exec"
+#define G_KEY_FILE_DESKTOP_KEY_PATH             "Path"
+#define G_KEY_FILE_DESKTOP_KEY_TERMINAL         "Terminal"
+#define G_KEY_FILE_DESKTOP_KEY_MIME_TYPE        "MimeType"
+#define G_KEY_FILE_DESKTOP_KEY_CATEGORIES       "Categories"
+#define G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY   "StartupNotify"
+#define G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS "StartupWMClass"
+#define G_KEY_FILE_DESKTOP_KEY_URL              "URL"
+
+#define G_KEY_FILE_DESKTOP_TYPE_APPLICATION     "Application"
+#define G_KEY_FILE_DESKTOP_TYPE_LINK            "Link"
+#define G_KEY_FILE_DESKTOP_TYPE_DIRECTORY       "Directory"
+
+G_END_DECLS
+
+#endif /* __G_KEY_FILE_H__ */
diff --git a/glib/glib-object.h b/glib/glib-object.h
new file mode 100644
index 0000000..8687ef1
--- /dev/null
+++ b/glib/glib-object.h
@@ -0,0 +1,41 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998, 1999, 2000 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#ifndef __GLIB_GOBJECT_H__
+#define __GLIB_GOBJECT_H__
+
+#define __GLIB_GOBJECT_H_INSIDE__
+
+/* topmost include file for GObject header files */
+#include	<gobject/gboxed.h>
+#include	<gobject/genums.h>
+#include	<gobject/gobject.h>
+#include	<gobject/gparam.h>
+#include	<gobject/gparamspecs.h>
+#include	<gobject/gsignal.h>
+#include	<gobject/gsourceclosure.h>
+#include	<gobject/gtype.h>
+#include	<gobject/gtypemodule.h>
+#include	<gobject/gtypeplugin.h>
+#include	<gobject/gvalue.h>
+#include	<gobject/gvaluearray.h>
+#include	<gobject/gvaluetypes.h>
+
+#undef __GLIB_GOBJECT_H_INSIDE__
+
+#endif /* __GLIB_GOBJECT_H__ */
diff --git a/glib/glibintl.h b/glib/glibintl.h
new file mode 100644
index 0000000..214b261
--- /dev/null
+++ b/glib/glibintl.h
@@ -0,0 +1,38 @@
+#ifndef __GLIBINTL_H__
+#define __GLIBINTL_H__
+
+#ifndef SIZEOF_CHAR
+#error "config.h must be included prior to glibintl.h"
+#endif
+
+G_CONST_RETURN gchar *glib_gettext (const gchar *str) G_GNUC_FORMAT(1);
+
+#if 0
+
+#include <libintl.h>
+#define _(String) glib_gettext(String)
+/* Split out this in the code, but keep it in the same domain for now */
+#define P_(String) glib_gettext(String)
+
+#ifdef gettext_noop
+#define N_(String) gettext_noop(String)
+#else
+#define N_(String) (String)
+#endif
+#else /* NLS is disabled */
+#define _(String) (String)
+#define N_(String) (String)
+#define P_(String) (String)
+#define textdomain(String) ((String) ? (String) : "messages")
+#define gettext(String) (String)
+#define dgettext(Domain,String) (String)
+#define dcgettext(Domain,String,Type) (String)
+#define dngettext(Domain,String1,String2,N) ((N) == 1 ? (String1) : (String2))
+#define bindtextdomain(Domain,Directory) (Domain) 
+#define bind_textdomain_codeset(Domain,Codeset)
+#endif
+
+/* not really I18N-related, but also a string marker macro */
+#define I_(string) g_intern_static_string (string)
+
+#endif /* __GLIBINTL_H__ */
diff --git a/glib/glist.c b/glib/glist.c
new file mode 100644
index 0000000..b607abd
--- /dev/null
+++ b/glib/glist.c
@@ -0,0 +1,999 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include "glib.h"
+#include "galias.h"
+
+
+void g_list_push_allocator (gpointer dummy) { /* present for binary compat only */ }
+void g_list_pop_allocator  (void)           { /* present for binary compat only */ }
+
+#define _g_list_alloc()         g_slice_new (GList)
+#define _g_list_alloc0()        g_slice_new0 (GList)
+#define _g_list_free1(list)     g_slice_free (GList, list)
+
+GList*
+g_list_alloc (void)
+{
+  return _g_list_alloc0 ();
+}
+
+/**
+ * g_list_free: 
+ * @list: a #GList
+ *
+ * Frees all of the memory used by a #GList.
+ * The freed elements are returned to the slice allocator.
+ *
+ * <note><para>
+ * If list elements contain dynamically-allocated memory, 
+ * they should be freed first.
+ * </para></note>
+ */
+void
+g_list_free (GList *list)
+{
+  g_slice_free_chain (GList, list, next);
+}
+
+/**
+ * g_list_free_1:
+ * @list: a #GList element
+ *
+ * Frees one #GList element.
+ * It is usually used after g_list_remove_link().
+ */
+void
+g_list_free_1 (GList *list)
+{
+  _g_list_free1 (list);
+}
+
+/**
+ * g_list_append:
+ * @list: a pointer to a #GList
+ * @data: the data for the new element
+ *
+ * Adds a new element on to the end of the list.
+ *
+ * <note><para>
+ * The return value is the new start of the list, which 
+ * may have changed, so make sure you store the new value.
+ * </para></note>
+ *
+ * <note><para>
+ * Note that g_list_append() has to traverse the entire list 
+ * to find the end, which is inefficient when adding multiple 
+ * elements. A common idiom to avoid the inefficiency is to prepend 
+ * the elements and reverse the list when all elements have been added.
+ * </para></note>
+ *
+ * |[
+ * /&ast; Notice that these are initialized to the empty list. &ast;/
+ * GList *list = NULL, *number_list = NULL;
+ *
+ * /&ast; This is a list of strings. &ast;/
+ * list = g_list_append (list, "first");
+ * list = g_list_append (list, "second");
+ * 
+ * /&ast; This is a list of integers. &ast;/
+ * number_list = g_list_append (number_list, GINT_TO_POINTER (27));
+ * number_list = g_list_append (number_list, GINT_TO_POINTER (14));
+ * ]|
+ *
+ * Returns: the new start of the #GList
+ */
+GList*
+g_list_append (GList	*list,
+	       gpointer	 data)
+{
+  GList *new_list;
+  GList *last;
+  
+  new_list = _g_list_alloc ();
+  new_list->data = data;
+  new_list->next = NULL;
+  
+  if (list)
+    {
+      last = g_list_last (list);
+      /* g_assert (last != NULL); */
+      last->next = new_list;
+      new_list->prev = last;
+
+      return list;
+    }
+  else
+    {
+      new_list->prev = NULL;
+      return new_list;
+    }
+}
+
+/**
+ * g_list_prepend:
+ * @list: a pointer to a #GList
+ * @data: the data for the new element
+ *
+ * Adds a new element on to the start of the list.
+ *
+ * <note><para>
+ * The return value is the new start of the list, which 
+ * may have changed, so make sure you store the new value.
+ * </para></note>
+ *
+ * |[ 
+ * /&ast; Notice that it is initialized to the empty list. &ast;/
+ * GList *list = NULL;
+ * list = g_list_prepend (list, "last");
+ * list = g_list_prepend (list, "first");
+ * ]|
+ *
+ * Returns: the new start of the #GList
+ */
+GList*
+g_list_prepend (GList	 *list,
+		gpointer  data)
+{
+  GList *new_list;
+  
+  new_list = _g_list_alloc ();
+  new_list->data = data;
+  new_list->next = list;
+  
+  if (list)
+    {
+      new_list->prev = list->prev;
+      if (list->prev)
+	list->prev->next = new_list;
+      list->prev = new_list;
+    }
+  else
+    new_list->prev = NULL;
+  
+  return new_list;
+}
+
+/**
+ * g_list_insert:
+ * @list: a pointer to a #GList
+ * @data: the data for the new element
+ * @position: the position to insert the element. If this is 
+ *     negative, or is larger than the number of elements in the 
+ *     list, the new element is added on to the end of the list.
+ * 
+ * Inserts a new element into the list at the given position.
+ *
+ * Returns: the new start of the #GList
+ */
+GList*
+g_list_insert (GList	*list,
+	       gpointer	 data,
+	       gint	 position)
+{
+  GList *new_list;
+  GList *tmp_list;
+  
+  if (position < 0)
+    return g_list_append (list, data);
+  else if (position == 0)
+    return g_list_prepend (list, data);
+  
+  tmp_list = g_list_nth (list, position);
+  if (!tmp_list)
+    return g_list_append (list, data);
+  
+  new_list = _g_list_alloc ();
+  new_list->data = data;
+  new_list->prev = tmp_list->prev;
+  if (tmp_list->prev)
+    tmp_list->prev->next = new_list;
+  new_list->next = tmp_list;
+  tmp_list->prev = new_list;
+  
+  if (tmp_list == list)
+    return new_list;
+  else
+    return list;
+}
+
+/**
+ * g_list_insert_before:
+ * @list: a pointer to a #GList
+ * @sibling: the list element before which the new element 
+ *     is inserted or %NULL to insert at the end of the list
+ * @data: the data for the new element
+ *
+ * Inserts a new element into the list before the given position.
+ *
+ * Returns: the new start of the #GList
+ */
+GList*
+g_list_insert_before (GList   *list,
+		      GList   *sibling,
+		      gpointer data)
+{
+  if (!list)
+    {
+      list = g_list_alloc ();
+      list->data = data;
+      g_return_val_if_fail (sibling == NULL, list);
+      return list;
+    }
+  else if (sibling)
+    {
+      GList *node;
+
+      node = _g_list_alloc ();
+      node->data = data;
+      node->prev = sibling->prev;
+      node->next = sibling;
+      sibling->prev = node;
+      if (node->prev)
+	{
+	  node->prev->next = node;
+	  return list;
+	}
+      else
+	{
+	  g_return_val_if_fail (sibling == list, node);
+	  return node;
+	}
+    }
+  else
+    {
+      GList *last;
+
+      last = list;
+      while (last->next)
+	last = last->next;
+
+      last->next = _g_list_alloc ();
+      last->next->data = data;
+      last->next->prev = last;
+      last->next->next = NULL;
+
+      return list;
+    }
+}
+
+/**
+ * g_list_concat:
+ * @list1: a #GList
+ * @list2: the #GList to add to the end of the first #GList
+ *
+ * Adds the second #GList onto the end of the first #GList.
+ * Note that the elements of the second #GList are not copied.
+ * They are used directly.
+ *
+ * Returns: the start of the new #GList
+ */
+GList *
+g_list_concat (GList *list1, GList *list2)
+{
+  GList *tmp_list;
+  
+  if (list2)
+    {
+      tmp_list = g_list_last (list1);
+      if (tmp_list)
+	tmp_list->next = list2;
+      else
+	list1 = list2;
+      list2->prev = tmp_list;
+    }
+  
+  return list1;
+}
+
+/**
+ * g_list_remove:
+ * @list: a #GList
+ * @data: the data of the element to remove
+ *
+ * Removes an element from a #GList.
+ * If two elements contain the same data, only the first is removed.
+ * If none of the elements contain the data, the #GList is unchanged.
+ *
+ * Returns: the new start of the #GList
+ */
+GList*
+g_list_remove (GList	     *list,
+	       gconstpointer  data)
+{
+  GList *tmp;
+  
+  tmp = list;
+  while (tmp)
+    {
+      if (tmp->data != data)
+	tmp = tmp->next;
+      else
+	{
+	  if (tmp->prev)
+	    tmp->prev->next = tmp->next;
+	  if (tmp->next)
+	    tmp->next->prev = tmp->prev;
+	  
+	  if (list == tmp)
+	    list = list->next;
+	  
+	  _g_list_free1 (tmp);
+	  
+	  break;
+	}
+    }
+  return list;
+}
+
+/**
+ * g_list_remove_all:
+ * @list: a #GList
+ * @data: data to remove
+ *
+ * Removes all list nodes with data equal to @data. 
+ * Returns the new head of the list. Contrast with 
+ * g_list_remove() which removes only the first node 
+ * matching the given data.
+ *
+ * Returns: new head of @list
+ */
+GList*
+g_list_remove_all (GList	*list,
+		   gconstpointer data)
+{
+  GList *tmp = list;
+
+  while (tmp)
+    {
+      if (tmp->data != data)
+	tmp = tmp->next;
+      else
+	{
+	  GList *next = tmp->next;
+
+	  if (tmp->prev)
+	    tmp->prev->next = next;
+	  else
+	    list = next;
+	  if (next)
+	    next->prev = tmp->prev;
+
+	  _g_list_free1 (tmp);
+	  tmp = next;
+	}
+    }
+  return list;
+}
+
+static inline GList*
+_g_list_remove_link (GList *list,
+		     GList *link)
+{
+  if (link)
+    {
+      if (link->prev)
+	link->prev->next = link->next;
+      if (link->next)
+	link->next->prev = link->prev;
+      
+      if (link == list)
+	list = list->next;
+      
+      link->next = NULL;
+      link->prev = NULL;
+    }
+  
+  return list;
+}
+
+/**
+ * g_list_remove_link:
+ * @list: a #GList
+ * @llink: an element in the #GList
+ *
+ * Removes an element from a #GList, without freeing the element.
+ * The removed element's prev and next links are set to %NULL, so 
+ * that it becomes a self-contained list with one element.
+ *
+ * Returns: the new start of the #GList, without the element
+ */
+GList*
+g_list_remove_link (GList *list,
+		    GList *llink)
+{
+  return _g_list_remove_link (list, llink);
+}
+
+/**
+ * g_list_delete_link:
+ * @list: a #GList
+ * @link_: node to delete from @list
+ *
+ * Removes the node link_ from the list and frees it. 
+ * Compare this to g_list_remove_link() which removes the node 
+ * without freeing it.
+ *
+ * Returns: the new head of @list
+ */
+GList*
+g_list_delete_link (GList *list,
+		    GList *link_)
+{
+  list = _g_list_remove_link (list, link_);
+  _g_list_free1 (link_);
+
+  return list;
+}
+
+/**
+ * g_list_copy:
+ * @list: a #GList
+ *
+ * Copies a #GList.
+ *
+ * <note><para>
+ * Note that this is a "shallow" copy. If the list elements 
+ * consist of pointers to data, the pointers are copied but 
+ * the actual data is not.
+ * </para></note>
+ *
+ * Returns: a copy of @list
+ */
+GList*
+g_list_copy (GList *list)
+{
+  GList *new_list = NULL;
+
+  if (list)
+    {
+      GList *last;
+
+      new_list = _g_list_alloc ();
+      new_list->data = list->data;
+      new_list->prev = NULL;
+      last = new_list;
+      list = list->next;
+      while (list)
+	{
+	  last->next = _g_list_alloc ();
+	  last->next->prev = last;
+	  last = last->next;
+	  last->data = list->data;
+	  list = list->next;
+	}
+      last->next = NULL;
+    }
+
+  return new_list;
+}
+
+/**
+ * g_list_reverse:
+ * @list: a #GList
+ *
+ * Reverses a #GList.
+ * It simply switches the next and prev pointers of each element.
+ *
+ * Returns: the start of the reversed #GList
+ */
+GList*
+g_list_reverse (GList *list)
+{
+  GList *last;
+  
+  last = NULL;
+  while (list)
+    {
+      last = list;
+      list = last->next;
+      last->next = last->prev;
+      last->prev = list;
+    }
+  
+  return last;
+}
+
+/**
+ * g_list_nth:
+ * @list: a #GList
+ * @n: the position of the element, counting from 0
+ *
+ * Gets the element at the given position in a #GList.
+ *
+ * Returns: the element, or %NULL if the position is off 
+ *     the end of the #GList
+ */
+GList*
+g_list_nth (GList *list,
+	    guint  n)
+{
+  while ((n-- > 0) && list)
+    list = list->next;
+  
+  return list;
+}
+
+/**
+ * g_list_nth_prev:
+ * @list: a #GList
+ * @n: the position of the element, counting from 0
+ *
+ * Gets the element @n places before @list.
+ *
+ * Returns: the element, or %NULL if the position is 
+ *     off the end of the #GList
+ */
+GList*
+g_list_nth_prev (GList *list,
+		 guint  n)
+{
+  while ((n-- > 0) && list)
+    list = list->prev;
+  
+  return list;
+}
+
+/**
+ * g_list_nth_data:
+ * @list: a #GList
+ * @n: the position of the element
+ *
+ * Gets the data of the element at the given position.
+ *
+ * Returns: the element's data, or %NULL if the position 
+ *     is off the end of the #GList
+ */
+gpointer
+g_list_nth_data (GList     *list,
+		 guint      n)
+{
+  while ((n-- > 0) && list)
+    list = list->next;
+  
+  return list ? list->data : NULL;
+}
+
+/**
+ * g_list_find:
+ * @list: a #GList
+ * @data: the element data to find
+ *
+ * Finds the element in a #GList which 
+ * contains the given data.
+ *
+ * Returns: the found #GList element, 
+ *     or %NULL if it is not found
+ */
+GList*
+g_list_find (GList         *list,
+	     gconstpointer  data)
+{
+  while (list)
+    {
+      if (list->data == data)
+	break;
+      list = list->next;
+    }
+  
+  return list;
+}
+
+/**
+ * g_list_find_custom:
+ * @list: a #GList
+ * @data: user data passed to the function
+ * @func: the function to call for each element. 
+ *     It should return 0 when the desired element is found
+ *
+ * Finds an element in a #GList, using a supplied function to 
+ * find the desired element. It iterates over the list, calling 
+ * the given function which should return 0 when the desired 
+ * element is found. The function takes two #gconstpointer arguments, 
+ * the #GList element's data as the first argument and the 
+ * given user data.
+ *
+ * Returns: the found #GList element, or %NULL if it is not found
+ */
+GList*
+g_list_find_custom (GList         *list,
+		    gconstpointer  data,
+		    GCompareFunc   func)
+{
+  g_return_val_if_fail (func != NULL, list);
+
+  while (list)
+    {
+      if (! func (list->data, data))
+	return list;
+      list = list->next;
+    }
+
+  return NULL;
+}
+
+
+/**
+ * g_list_position:
+ * @list: a #GList
+ * @llink: an element in the #GList
+ *
+ * Gets the position of the given element 
+ * in the #GList (starting from 0).
+ *
+ * Returns: the position of the element in the #GList, 
+ *     or -1 if the element is not found
+ */
+gint
+g_list_position (GList *list,
+		 GList *llink)
+{
+  gint i;
+
+  i = 0;
+  while (list)
+    {
+      if (list == llink)
+	return i;
+      i++;
+      list = list->next;
+    }
+
+  return -1;
+}
+
+/**
+ * g_list_index:
+ * @list: a #GList
+ * @data: the data to find
+ *
+ * Gets the position of the element containing 
+ * the given data (starting from 0).
+ *
+ * Returns: the index of the element containing the data, 
+ *     or -1 if the data is not found
+ */
+gint
+g_list_index (GList         *list,
+	      gconstpointer  data)
+{
+  gint i;
+
+  i = 0;
+  while (list)
+    {
+      if (list->data == data)
+	return i;
+      i++;
+      list = list->next;
+    }
+
+  return -1;
+}
+
+/**
+ * g_list_last:
+ * @list: a #GList
+ *
+ * Gets the last element in a #GList.
+ *
+ * Returns: the last element in the #GList, 
+ *     or %NULL if the #GList has no elements
+ */
+GList*
+g_list_last (GList *list)
+{
+  if (list)
+    {
+      while (list->next)
+	list = list->next;
+    }
+  
+  return list;
+}
+
+/**
+ * g_list_first:
+ * @list: a #GList
+ *
+ * Gets the first element in a #GList.
+ *
+ * Returns: the first element in the #GList, 
+ *     or %NULL if the #GList has no elements
+ */
+GList*
+g_list_first (GList *list)
+{
+  if (list)
+    {
+      while (list->prev)
+	list = list->prev;
+    }
+  
+  return list;
+}
+
+/**
+ * g_list_length:
+ * @list: a #GList
+ *
+ * Gets the number of elements in a #GList.
+ *
+ * <note><para>
+ * This function iterates over the whole list to 
+ * count its elements.
+ * </para></note>
+ *
+ * Returns: the number of elements in the #GList
+ */
+guint
+g_list_length (GList *list)
+{
+  guint length;
+  
+  length = 0;
+  while (list)
+    {
+      length++;
+      list = list->next;
+    }
+  
+  return length;
+}
+
+/**
+ * g_list_foreach:
+ * @list: a #GList
+ * @func: the function to call with each element's data
+ * @user_data: user data to pass to the function
+ *
+ * Calls a function for each element of a #GList.
+ */
+void
+g_list_foreach (GList	 *list,
+		GFunc	  func,
+		gpointer  user_data)
+{
+  while (list)
+    {
+      GList *next = list->next;
+      (*func) (list->data, user_data);
+      list = next;
+    }
+}
+
+static GList*
+g_list_insert_sorted_real (GList    *list,
+			   gpointer  data,
+			   GFunc     func,
+			   gpointer  user_data)
+{
+  GList *tmp_list = list;
+  GList *new_list;
+  gint cmp;
+
+  g_return_val_if_fail (func != NULL, list);
+  
+  if (!list) 
+    {
+      new_list = _g_list_alloc0 ();
+      new_list->data = data;
+      return new_list;
+    }
+  
+  cmp = ((GCompareDataFunc) func) (data, tmp_list->data, user_data);
+
+  while ((tmp_list->next) && (cmp > 0))
+    {
+      tmp_list = tmp_list->next;
+
+      cmp = ((GCompareDataFunc) func) (data, tmp_list->data, user_data);
+    }
+
+  new_list = _g_list_alloc0 ();
+  new_list->data = data;
+
+  if ((!tmp_list->next) && (cmp > 0))
+    {
+      tmp_list->next = new_list;
+      new_list->prev = tmp_list;
+      return list;
+    }
+   
+  if (tmp_list->prev)
+    {
+      tmp_list->prev->next = new_list;
+      new_list->prev = tmp_list->prev;
+    }
+  new_list->next = tmp_list;
+  tmp_list->prev = new_list;
+ 
+  if (tmp_list == list)
+    return new_list;
+  else
+    return list;
+}
+
+/**
+ * g_list_insert_sorted:
+ * @list: a pointer to a #GList
+ * @data: the data for the new element
+ * @func: the function to compare elements in the list. It should 
+ *     return a number > 0 if the first parameter comes after the 
+ *     second parameter in the sort order.
+ *
+ * Inserts a new element into the list, using the given comparison 
+ * function to determine its position.
+ *
+ * Returns: the new start of the #GList
+ */
+GList*
+g_list_insert_sorted (GList        *list,
+		      gpointer      data,
+		      GCompareFunc  func)
+{
+  return g_list_insert_sorted_real (list, data, (GFunc) func, NULL);
+}
+
+/**
+ * g_list_insert_sorted_with_data:
+ * @list: a pointer to a #GList
+ * @data: the data for the new element
+ * @func: the function to compare elements in the list. 
+ *     It should return a number > 0 if the first parameter 
+ *     comes after the second parameter in the sort order.
+ * @user_data: user data to pass to comparison function.
+ *
+ * Inserts a new element into the list, using the given comparison 
+ * function to determine its position.
+ *
+ * Returns: the new start of the #GList
+ *
+ * Since: 2.10
+ */
+GList*
+g_list_insert_sorted_with_data (GList            *list,
+				gpointer          data,
+				GCompareDataFunc  func,
+				gpointer          user_data)
+{
+  return g_list_insert_sorted_real (list, data, (GFunc) func, user_data);
+}
+
+static GList *
+g_list_sort_merge (GList     *l1, 
+		   GList     *l2,
+		   GFunc     compare_func,
+		   gpointer  user_data)
+{
+  GList list, *l, *lprev;
+  gint cmp;
+
+  l = &list; 
+  lprev = NULL;
+
+  while (l1 && l2)
+    {
+      cmp = ((GCompareDataFunc) compare_func) (l1->data, l2->data, user_data);
+
+      if (cmp <= 0)
+        {
+	  l->next = l1;
+	  l1 = l1->next;
+        } 
+      else 
+	{
+	  l->next = l2;
+	  l2 = l2->next;
+        }
+      l = l->next;
+      l->prev = lprev; 
+      lprev = l;
+    }
+  l->next = l1 ? l1 : l2;
+  l->next->prev = l;
+
+  return list.next;
+}
+
+static GList* 
+g_list_sort_real (GList    *list,
+		  GFunc     compare_func,
+		  gpointer  user_data)
+{
+  GList *l1, *l2;
+  
+  if (!list) 
+    return NULL;
+  if (!list->next) 
+    return list;
+  
+  l1 = list; 
+  l2 = list->next;
+
+  while ((l2 = l2->next) != NULL)
+    {
+      if ((l2 = l2->next) == NULL) 
+	break;
+      l1 = l1->next;
+    }
+  l2 = l1->next; 
+  l1->next = NULL; 
+
+  return g_list_sort_merge (g_list_sort_real (list, compare_func, user_data),
+			    g_list_sort_real (l2, compare_func, user_data),
+			    compare_func,
+			    user_data);
+}
+
+/**
+ * g_list_sort:
+ * @list: a #GList
+ * @compare_func: the comparison function used to sort the #GList.
+ *     This function is passed the data from 2 elements of the #GList 
+ *     and should return 0 if they are equal, a negative value if the 
+ *     first element comes before the second, or a positive value if 
+ *     the first element comes after the second.
+ *
+ * Sorts a #GList using the given comparison function.
+ *
+ * Returns: the start of the sorted #GList
+ */
+GList *
+g_list_sort (GList        *list,
+	     GCompareFunc  compare_func)
+{
+  return g_list_sort_real (list, (GFunc) compare_func, NULL);
+			    
+}
+
+/**
+ * g_list_sort_with_data:
+ * @list: a #GList
+ * @compare_func: comparison function
+ * @user_data: user data to pass to comparison function
+ *
+ * Like g_list_sort(), but the comparison function accepts 
+ * a user data argument.
+ *
+ * Returns: the new head of @list
+ */
+GList *
+g_list_sort_with_data (GList            *list,
+		       GCompareDataFunc  compare_func,
+		       gpointer          user_data)
+{
+  return g_list_sort_real (list, (GFunc) compare_func, user_data);
+}
+
+#define __G_LIST_C__
+#include "galiasdef.c"
diff --git a/glib/glist.h b/glib/glist.h
new file mode 100644
index 0000000..e74ed96
--- /dev/null
+++ b/glib/glist.h
@@ -0,0 +1,120 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_LIST_H__
+#define __G_LIST_H__
+
+#include <glib/gmem.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GList GList;
+
+struct _GList
+{
+  gpointer data;
+  GList *next;
+  GList *prev;
+};
+
+/* Doubly linked lists
+ */
+GList*   g_list_alloc                   (void) G_GNUC_WARN_UNUSED_RESULT;
+void     g_list_free                    (GList            *list);
+void     g_list_free_1                  (GList            *list);
+#define  g_list_free1                   g_list_free_1
+GList*   g_list_append                  (GList            *list,
+					 gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_prepend                 (GList            *list,
+					 gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_insert                  (GList            *list,
+					 gpointer          data,
+					 gint              position) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_insert_sorted           (GList            *list,
+					 gpointer          data,
+					 GCompareFunc      func) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_insert_sorted_with_data (GList            *list,
+					 gpointer          data,
+					 GCompareDataFunc  func,
+					 gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_insert_before           (GList            *list,
+					 GList            *sibling,
+					 gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_concat                  (GList            *list1,
+					 GList            *list2) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_remove                  (GList            *list,
+					 gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_remove_all              (GList            *list,
+					 gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_remove_link             (GList            *list,
+					 GList            *llink) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_delete_link             (GList            *list,
+					 GList            *link_) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_reverse                 (GList            *list) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_copy                    (GList            *list) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_nth                     (GList            *list,
+					 guint             n);
+GList*   g_list_nth_prev                (GList            *list,
+					 guint             n);
+GList*   g_list_find                    (GList            *list,
+					 gconstpointer     data);
+GList*   g_list_find_custom             (GList            *list,
+					 gconstpointer     data,
+					 GCompareFunc      func);
+gint     g_list_position                (GList            *list,
+					 GList            *llink);
+gint     g_list_index                   (GList            *list,
+					 gconstpointer     data);
+GList*   g_list_last                    (GList            *list);
+GList*   g_list_first                   (GList            *list);
+guint    g_list_length                  (GList            *list);
+void     g_list_foreach                 (GList            *list,
+					 GFunc             func,
+					 gpointer          user_data);
+GList*   g_list_sort                    (GList            *list,
+					 GCompareFunc      compare_func) G_GNUC_WARN_UNUSED_RESULT;
+GList*   g_list_sort_with_data          (GList            *list,
+					 GCompareDataFunc  compare_func,
+					 gpointer          user_data)  G_GNUC_WARN_UNUSED_RESULT;
+gpointer g_list_nth_data                (GList            *list,
+					 guint             n);
+
+
+#define g_list_previous(list)	        ((list) ? (((GList *)(list))->prev) : NULL)
+#define g_list_next(list)	        ((list) ? (((GList *)(list))->next) : NULL)
+
+#ifndef G_DISABLE_DEPRECATED
+void     g_list_push_allocator          (gpointer          allocator);
+void     g_list_pop_allocator           (void);
+#endif
+
+G_END_DECLS
+
+#endif /* __G_LIST_H__ */
diff --git a/glib/gmacros.h b/glib/gmacros.h
new file mode 100644
index 0000000..b3ff7ee
--- /dev/null
+++ b/glib/gmacros.h
@@ -0,0 +1,277 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/* This file must not include any other glib header file and must thus
+ * not refer to variables from glibconfig.h
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_MACROS_H__
+#define __G_MACROS_H__
+
+/* We include stddef.h to get the system's definition of NULL
+ */
+#include <stddef.h>
+
+/* Here we provide G_GNUC_EXTENSION as an alias for __extension__,
+ * where this is valid. This allows for warningless compilation of
+ * "long long" types even in the presence of '-ansi -pedantic'. 
+ */
+#if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
+#  define G_GNUC_EXTENSION __extension__
+#else
+#  define G_GNUC_EXTENSION
+#endif
+
+/* Provide macros to feature the GCC function attribute.
+ */
+#if    __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#define G_GNUC_PURE                            \
+  __attribute__((__pure__))
+#define G_GNUC_MALLOC    			\
+  __attribute__((__malloc__))
+#else
+#define G_GNUC_PURE
+#define G_GNUC_MALLOC
+#endif
+
+#if     __GNUC__ >= 4
+#define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
+#else
+#define G_GNUC_NULL_TERMINATED
+#endif
+
+#if     (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
+#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
+#define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))
+#else
+#define G_GNUC_ALLOC_SIZE(x)
+#define G_GNUC_ALLOC_SIZE2(x,y)
+#endif
+
+#if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+#define G_GNUC_PRINTF( format_idx, arg_idx )    \
+  __attribute__((__format__ (__printf__, format_idx, arg_idx)))
+#define G_GNUC_SCANF( format_idx, arg_idx )     \
+  __attribute__((__format__ (__scanf__, format_idx, arg_idx)))
+#define G_GNUC_FORMAT( arg_idx )                \
+  __attribute__((__format_arg__ (arg_idx)))
+#define G_GNUC_NORETURN                         \
+  __attribute__((__noreturn__))
+#define G_GNUC_CONST                            \
+  __attribute__((__const__))
+#define G_GNUC_UNUSED                           \
+  __attribute__((__unused__))
+#define G_GNUC_NO_INSTRUMENT			\
+  __attribute__((__no_instrument_function__))
+#else   /* !__GNUC__ */
+#define G_GNUC_PRINTF( format_idx, arg_idx )
+#define G_GNUC_SCANF( format_idx, arg_idx )
+#define G_GNUC_FORMAT( arg_idx )
+#define G_GNUC_NORETURN
+#define G_GNUC_CONST
+#define G_GNUC_UNUSED
+#define G_GNUC_NO_INSTRUMENT
+#endif  /* !__GNUC__ */
+
+#if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+#define G_GNUC_DEPRECATED                            \
+  __attribute__((__deprecated__))
+#else
+#define G_GNUC_DEPRECATED
+#endif /* __GNUC__ */
+
+#if     __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+#  define G_GNUC_MAY_ALIAS __attribute__((may_alias))
+#else
+#  define G_GNUC_MAY_ALIAS
+#endif
+
+#if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#define G_GNUC_WARN_UNUSED_RESULT 		\
+  __attribute__((warn_unused_result))
+#else
+#define G_GNUC_WARN_UNUSED_RESULT
+#endif /* __GNUC__ */
+
+#ifndef G_DISABLE_DEPRECATED
+/* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with
+ * macros, so we can refer to them as strings unconditionally.
+ * usage not-recommended since gcc-3.0
+ */
+#if defined (__GNUC__) && (__GNUC__ < 3)
+#define G_GNUC_FUNCTION         __FUNCTION__
+#define G_GNUC_PRETTY_FUNCTION  __PRETTY_FUNCTION__
+#else   /* !__GNUC__ */
+#define G_GNUC_FUNCTION         ""
+#define G_GNUC_PRETTY_FUNCTION  ""
+#endif  /* !__GNUC__ */
+#endif  /* !G_DISABLE_DEPRECATED */
+
+#define G_STRINGIFY(macro_or_string)	G_STRINGIFY_ARG (macro_or_string)
+#define	G_STRINGIFY_ARG(contents)	#contents
+
+#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2
+#define G_PASTE(identifier1,identifier2)      G_PASTE_ARGS (identifier1, identifier2)
+#define G_STATIC_ASSERT(expr) typedef struct { char Compile_Time_Assertion[(expr) ? 1 : -1]; } G_PASTE (_GStaticAssert_, __LINE__)
+
+/* Provide a string identifying the current code position */
+#if defined(__GNUC__) && (__GNUC__ < 3) && !defined(__cplusplus)
+#  define G_STRLOC	__FILE__ ":" G_STRINGIFY (__LINE__) ":" __PRETTY_FUNCTION__ "()"
+#else
+#  define G_STRLOC	__FILE__ ":" G_STRINGIFY (__LINE__)
+#endif
+
+/* Provide a string identifying the current function, non-concatenatable */
+#if defined (__GNUC__)
+#  define G_STRFUNC     ((const char*) (__PRETTY_FUNCTION__))
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 19901L
+#  define G_STRFUNC     ((const char*) (__func__))
+#else
+#  define G_STRFUNC     ((const char*) ("???"))
+#endif
+
+/* Guard C code in headers, while including them from C++ */
+#ifdef  __cplusplus
+# define G_BEGIN_DECLS  extern "C" {
+# define G_END_DECLS    }
+#else
+# define G_BEGIN_DECLS
+# define G_END_DECLS
+#endif
+
+/* Provide definitions for some commonly used macros.
+ *  Some of them are only provided if they haven't already
+ *  been defined. It is assumed that if they are already
+ *  defined then the current definition is correct.
+ */
+#ifndef NULL
+#  ifdef __cplusplus
+#    define NULL        (0L)
+#  else /* !__cplusplus */
+#    define NULL        ((void*) 0)
+#  endif /* !__cplusplus */
+#endif
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+#undef	MAX
+#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
+
+#undef	MIN
+#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
+
+#undef	ABS
+#define ABS(a)	   (((a) < 0) ? -(a) : (a))
+
+#undef	CLAMP
+#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
+
+/* Count the number of elements in an array. The array must be defined
+ * as such; using this with a dynamically allocated array will give
+ * incorrect results.
+ */
+#define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
+
+/* Macros by analogy to GINT_TO_POINTER, GPOINTER_TO_INT
+ */
+#define GPOINTER_TO_SIZE(p)	((gsize) (p))
+#define GSIZE_TO_POINTER(s)	((gpointer) (gsize) (s))
+
+/* Provide convenience macros for handling structure
+ * fields through their offsets.
+ */
+
+#if defined(__GNUC__)  && __GNUC__ >= 4
+#  define G_STRUCT_OFFSET(struct_type, member) \
+      ((glong) offsetof (struct_type, member))
+#else
+#  define G_STRUCT_OFFSET(struct_type, member)	\
+      ((glong) ((guint8*) &((struct_type*) 0)->member))
+#endif
+
+#define G_STRUCT_MEMBER_P(struct_p, struct_offset)   \
+    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
+#define G_STRUCT_MEMBER(member_type, struct_p, struct_offset)   \
+    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
+
+/* Provide simple macro statement wrappers:
+ *   G_STMT_START { statements; } G_STMT_END;
+ * This can be used as a single statement, like:
+ *   if (x) G_STMT_START { ... } G_STMT_END; else ...
+ * This intentionally does not use compiler extensions like GCC's '({...})' to
+ * avoid portability issue or side effects when compiled with different compilers.
+ */
+#if !(defined (G_STMT_START) && defined (G_STMT_END))
+#  define G_STMT_START  do
+#  define G_STMT_END    while (0)
+#endif
+
+/* Allow the app programmer to select whether or not return values
+ * (usually char*) are const or not.  Don't try using this feature for
+ * functions with C++ linkage.
+ */
+#ifdef G_DISABLE_CONST_RETURNS
+#define G_CONST_RETURN
+#else
+#define G_CONST_RETURN const
+#endif
+
+/*
+ * The G_LIKELY and G_UNLIKELY macros let the programmer give hints to 
+ * the compiler about the expected result of an expression. Some compilers
+ * can use this information for optimizations.
+ *
+ * The _G_BOOLEAN_EXPR macro is intended to trigger a gcc warning when
+ * putting assignments in g_return_if_fail ().  
+ */
+#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
+#define _G_BOOLEAN_EXPR(expr)                   \
+ __extension__ ({                               \
+   int _g_boolean_var_;                         \
+   if (expr)                                    \
+      _g_boolean_var_ = 1;                      \
+   else                                         \
+      _g_boolean_var_ = 0;                      \
+   _g_boolean_var_;                             \
+})
+#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
+#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
+#else
+#define G_LIKELY(expr) (expr)
+#define G_UNLIKELY(expr) (expr)
+#endif
+
+#endif /* __G_MACROS_H__ */
diff --git a/glib/gmain.c b/glib/gmain.c
new file mode 100644
index 0000000..61fcdde
--- /dev/null
+++ b/glib/gmain.c
@@ -0,0 +1,4030 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gmain.c: Main loop abstraction, timeouts, and idle functions
+ * Copyright 1998 Owen Taylor
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+/* Uncomment the next line (and the corresponding line in gpoll.c) to
+ * enable debugging printouts if the environment variable
+ * G_MAIN_POLL_DEBUG is set to some value.
+ */
+/* #define G_MAIN_POLL_DEBUG */
+
+#ifdef _WIN32
+/* Always enable debugging printout on Windows, as it is more often
+ * needed there...
+ */
+#define G_MAIN_POLL_DEBUG
+#endif
+
+#include "glib.h"
+#include "gthreadprivate.h"
+#include <signal.h>
+#include <sys/types.h>
+#include <time.h>
+#include <stdlib.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif /* HAVE_SYS_TIME_H */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include <errno.h>
+
+#ifdef G_OS_WIN32
+#define STRICT
+#include <windows.h>
+#endif /* G_OS_WIN32 */
+
+#ifdef G_OS_BEOS
+#include <sys/socket.h>
+#include <sys/wait.h>
+#endif /* G_OS_BEOS */
+
+#ifdef G_OS_UNIX
+#include <fcntl.h>
+#include <sys/wait.h>
+#endif
+
+#include "galias.h"
+
+/* Types */
+
+typedef struct _GTimeoutSource GTimeoutSource;
+typedef struct _GChildWatchSource GChildWatchSource;
+typedef struct _GPollRec GPollRec;
+typedef struct _GSourceCallback GSourceCallback;
+
+typedef enum
+{
+  G_SOURCE_READY = 1 << G_HOOK_FLAG_USER_SHIFT,
+  G_SOURCE_CAN_RECURSE = 1 << (G_HOOK_FLAG_USER_SHIFT + 1)
+} GSourceFlags;
+
+#ifdef G_THREADS_ENABLED
+typedef struct _GMainWaiter GMainWaiter;
+
+struct _GMainWaiter
+{
+  GCond *cond;
+  GMutex *mutex;
+};
+#endif  
+
+typedef struct _GMainDispatch GMainDispatch;
+
+struct _GMainDispatch
+{
+  gint depth;
+  GSList *dispatching_sources; /* stack of current sources */
+};
+
+#ifdef G_MAIN_POLL_DEBUG
+gboolean _g_main_poll_debug = FALSE;
+#endif
+
+struct _GMainContext
+{
+#ifdef G_THREADS_ENABLED
+  /* The following lock is used for both the list of sources
+   * and the list of poll records
+   */
+  GStaticMutex mutex;
+  GCond *cond;
+  GThread *owner;
+  guint owner_count;
+  GSList *waiters;
+#endif  
+
+  gint ref_count;
+
+  GPtrArray *pending_dispatches;
+  gint timeout;			/* Timeout for current iteration */
+
+  guint next_id;
+  GSource *source_list;
+  gint in_check_or_prepare;
+
+  GPollRec *poll_records;
+  guint n_poll_records;
+  GPollFD *cached_poll_array;
+  guint cached_poll_array_size;
+
+#ifdef G_THREADS_ENABLED  
+#ifndef G_OS_WIN32
+/* this pipe is used to wake up the main loop when a source is added.
+ */
+  gint wake_up_pipe[2];
+#else /* G_OS_WIN32 */
+  HANDLE wake_up_semaphore;
+#endif /* G_OS_WIN32 */
+
+  GPollFD wake_up_rec;
+  gboolean poll_waiting;
+
+/* Flag indicating whether the set of fd's changed during a poll */
+  gboolean poll_changed;
+#endif /* G_THREADS_ENABLED */
+
+  GPollFunc poll_func;
+
+  GTimeVal current_time;
+  gboolean time_is_current;
+};
+
+struct _GSourceCallback
+{
+  guint ref_count;
+  GSourceFunc func;
+  gpointer    data;
+  GDestroyNotify notify;
+};
+
+struct _GMainLoop
+{
+  GMainContext *context;
+  gboolean is_running;
+  gint ref_count;
+};
+
+struct _GTimeoutSource
+{
+  GSource     source;
+  GTimeVal    expiration;
+  guint       interval;
+  guint	      granularity;
+};
+
+struct _GChildWatchSource
+{
+  GSource     source;
+  GPid        pid;
+  gint        child_status;
+#ifdef G_OS_WIN32
+  GPollFD     poll;
+#else /* G_OS_WIN32 */
+  gint        count;
+  gboolean    child_exited;
+#endif /* G_OS_WIN32 */
+};
+
+struct _GPollRec
+{
+  GPollFD *fd;
+  GPollRec *next;
+  gint priority;
+};
+
+#ifdef G_THREADS_ENABLED
+#define LOCK_CONTEXT(context) g_static_mutex_lock (&context->mutex)
+#define UNLOCK_CONTEXT(context) g_static_mutex_unlock (&context->mutex)
+#define G_THREAD_SELF g_thread_self ()
+#else
+#define LOCK_CONTEXT(context) (void)0
+#define UNLOCK_CONTEXT(context) (void)0
+#define G_THREAD_SELF NULL
+#endif
+
+#define SOURCE_DESTROYED(source) (((source)->flags & G_HOOK_FLAG_ACTIVE) == 0)
+#define SOURCE_BLOCKED(source) (((source)->flags & G_HOOK_FLAG_IN_CALL) != 0 && \
+		                ((source)->flags & G_SOURCE_CAN_RECURSE) == 0)
+
+#define SOURCE_UNREF(source, context)                       \
+   G_STMT_START {                                           \
+    if ((source)->ref_count > 1)                            \
+      (source)->ref_count--;                                \
+    else                                                    \
+      g_source_unref_internal ((source), (context), TRUE);  \
+   } G_STMT_END
+
+
+/* Forward declarations */
+
+static void g_source_unref_internal             (GSource      *source,
+						 GMainContext *context,
+						 gboolean      have_lock);
+static void g_source_destroy_internal           (GSource      *source,
+						 GMainContext *context,
+						 gboolean      have_lock);
+static void g_main_context_poll                 (GMainContext *context,
+						 gint          timeout,
+						 gint          priority,
+						 GPollFD      *fds,
+						 gint          n_fds);
+static void g_main_context_add_poll_unlocked    (GMainContext *context,
+						 gint          priority,
+						 GPollFD      *fd);
+static void g_main_context_remove_poll_unlocked (GMainContext *context,
+						 GPollFD      *fd);
+static void g_main_context_wakeup_unlocked      (GMainContext *context);
+
+static gboolean g_timeout_prepare  (GSource     *source,
+				    gint        *timeout);
+static gboolean g_timeout_check    (GSource     *source);
+static gboolean g_timeout_dispatch (GSource     *source,
+				    GSourceFunc  callback,
+				    gpointer     user_data);
+static gboolean g_child_watch_prepare  (GSource     *source,
+				        gint        *timeout);
+static gboolean g_child_watch_check    (GSource     *source);
+static gboolean g_child_watch_dispatch (GSource     *source,
+					GSourceFunc  callback,
+					gpointer     user_data);
+static gboolean g_idle_prepare     (GSource     *source,
+				    gint        *timeout);
+static gboolean g_idle_check       (GSource     *source);
+static gboolean g_idle_dispatch    (GSource     *source,
+				    GSourceFunc  callback,
+				    gpointer     user_data);
+
+G_LOCK_DEFINE_STATIC (main_loop);
+static GMainContext *default_main_context;
+static GSList *main_contexts_without_pipe = NULL;
+
+#ifndef G_OS_WIN32
+/* Child status monitoring code */
+enum {
+  CHILD_WATCH_UNINITIALIZED,
+  CHILD_WATCH_INITIALIZED_SINGLE,
+  CHILD_WATCH_INITIALIZED_THREADED
+};
+static gint child_watch_init_state = CHILD_WATCH_UNINITIALIZED;
+static gint child_watch_count = 1;
+static gint child_watch_wake_up_pipe[2] = {0, 0};
+#endif /* !G_OS_WIN32 */
+G_LOCK_DEFINE_STATIC (main_context_list);
+static GSList *main_context_list = NULL;
+
+static gint timer_perturb = -1;
+
+GSourceFuncs g_timeout_funcs =
+{
+  g_timeout_prepare,
+  g_timeout_check,
+  g_timeout_dispatch,
+  NULL
+};
+
+GSourceFuncs g_child_watch_funcs =
+{
+  g_child_watch_prepare,
+  g_child_watch_check,
+  g_child_watch_dispatch,
+  NULL
+};
+
+GSourceFuncs g_idle_funcs =
+{
+  g_idle_prepare,
+  g_idle_check,
+  g_idle_dispatch,
+  NULL
+};
+
+/**
+ * g_main_context_ref:
+ * @context: a #GMainContext
+ * 
+ * Increases the reference count on a #GMainContext object by one.
+ *
+ * Returns: the @context that was passed in (since 2.6)
+ **/
+GMainContext *
+g_main_context_ref (GMainContext *context)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+  g_return_val_if_fail (g_atomic_int_get (&context->ref_count) > 0, NULL); 
+
+  g_atomic_int_inc (&context->ref_count);
+
+  return context;
+}
+
+static inline void
+poll_rec_list_free (GMainContext *context,
+		    GPollRec     *list)
+{
+  g_slice_free_chain (GPollRec, list, next);
+}
+
+/**
+ * g_main_context_unref:
+ * @context: a #GMainContext
+ * 
+ * Decreases the reference count on a #GMainContext object by one. If
+ * the result is zero, free the context and free all associated memory.
+ **/
+void
+g_main_context_unref (GMainContext *context)
+{
+  GSource *source;
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0); 
+
+  if (!g_atomic_int_dec_and_test (&context->ref_count))
+    return;
+
+  G_LOCK (main_context_list);
+  main_context_list = g_slist_remove (main_context_list, context);
+  G_UNLOCK (main_context_list);
+
+  source = context->source_list;
+  while (source)
+    {
+      GSource *next = source->next;
+      g_source_destroy_internal (source, context, FALSE);
+      source = next;
+    }
+
+#ifdef G_THREADS_ENABLED  
+  g_static_mutex_free (&context->mutex);
+#endif
+
+  g_ptr_array_free (context->pending_dispatches, TRUE);
+  g_free (context->cached_poll_array);
+
+  poll_rec_list_free (context, context->poll_records);
+  
+#ifdef G_THREADS_ENABLED
+  if (g_thread_supported())
+    {
+#ifndef G_OS_WIN32
+      close (context->wake_up_pipe[0]);
+      close (context->wake_up_pipe[1]);
+#else
+      CloseHandle (context->wake_up_semaphore);
+#endif
+    } 
+  else
+    main_contexts_without_pipe = g_slist_remove (main_contexts_without_pipe, 
+						 context);
+
+  if (context->cond != NULL)
+    g_cond_free (context->cond);
+#endif
+  
+  g_free (context);
+}
+
+#ifdef G_THREADS_ENABLED
+static void 
+g_main_context_init_pipe (GMainContext *context)
+{
+# ifndef G_OS_WIN32
+  if (context->wake_up_pipe[0] != -1)
+    return;
+  if (pipe (context->wake_up_pipe) < 0)
+    g_error ("Cannot create pipe main loop wake-up: %s\n",
+	     g_strerror (errno));
+ 
+  fcntl (context->wake_up_pipe[0], F_SETFD, FD_CLOEXEC);
+  fcntl (context->wake_up_pipe[1], F_SETFD, FD_CLOEXEC);
+
+  context->wake_up_rec.fd = context->wake_up_pipe[0];
+  context->wake_up_rec.events = G_IO_IN;
+# else
+  if (context->wake_up_semaphore != NULL)
+    return;
+  context->wake_up_semaphore = CreateSemaphore (NULL, 0, 100, NULL);
+  if (context->wake_up_semaphore == NULL)
+    g_error ("Cannot create wake-up semaphore: %s",
+	     g_win32_error_message (GetLastError ()));
+  context->wake_up_rec.fd = (gintptr) context->wake_up_semaphore;
+  context->wake_up_rec.events = G_IO_IN;
+
+  if (_g_main_poll_debug)
+    g_print ("wake-up semaphore: %p\n", context->wake_up_semaphore);
+# endif
+  g_main_context_add_poll_unlocked (context, 0, &context->wake_up_rec);
+}
+
+void
+_g_main_thread_init (void)
+{
+  GSList *curr = main_contexts_without_pipe;
+  while (curr)
+    {
+      g_main_context_init_pipe ((GMainContext *)curr->data);
+      curr = curr->next;
+    }
+  g_slist_free (main_contexts_without_pipe);
+  main_contexts_without_pipe = NULL;  
+}
+#endif /* G_THREADS_ENABLED */
+
+/**
+ * g_main_context_new:
+ * 
+ * Creates a new #GMainContext structure.
+ * 
+ * Return value: the new #GMainContext
+ **/
+GMainContext *
+g_main_context_new (void)
+{
+  GMainContext *context = g_new0 (GMainContext, 1);
+
+#ifdef G_MAIN_POLL_DEBUG
+  {
+    static gboolean beenhere = FALSE;
+
+    if (!beenhere)
+      {
+	if (getenv ("G_MAIN_POLL_DEBUG") != NULL)
+	  _g_main_poll_debug = TRUE;
+	beenhere = TRUE;
+      }
+  }
+#endif
+
+#ifdef G_THREADS_ENABLED
+  g_static_mutex_init (&context->mutex);
+
+  context->owner = NULL;
+  context->waiters = NULL;
+
+# ifndef G_OS_WIN32
+  context->wake_up_pipe[0] = -1;
+  context->wake_up_pipe[1] = -1;
+# else
+  context->wake_up_semaphore = NULL;
+# endif
+#endif
+
+  context->ref_count = 1;
+
+  context->next_id = 1;
+  
+  context->source_list = NULL;
+  
+  context->poll_func = g_poll;
+  
+  context->cached_poll_array = NULL;
+  context->cached_poll_array_size = 0;
+  
+  context->pending_dispatches = g_ptr_array_new ();
+  
+  context->time_is_current = FALSE;
+  
+#ifdef G_THREADS_ENABLED
+  if (g_thread_supported ())
+    g_main_context_init_pipe (context);
+  else
+    main_contexts_without_pipe = g_slist_prepend (main_contexts_without_pipe, 
+						  context);
+#endif
+
+  G_LOCK (main_context_list);
+  main_context_list = g_slist_append (main_context_list, context);
+
+#ifdef G_MAIN_POLL_DEBUG
+  if (_g_main_poll_debug)
+    g_print ("created context=%p\n", context);
+#endif
+
+  G_UNLOCK (main_context_list);
+
+  return context;
+}
+
+/**
+ * g_main_context_default:
+ * 
+ * Returns the default main context. This is the main context used
+ * for main loop functions when a main loop is not explicitly
+ * specified.
+ * 
+ * Return value: the default main context.
+ **/
+GMainContext *
+g_main_context_default (void)
+{
+  /* Slow, but safe */
+  
+  G_LOCK (main_loop);
+
+  if (!default_main_context)
+    {
+      default_main_context = g_main_context_new ();
+#ifdef G_MAIN_POLL_DEBUG
+      if (_g_main_poll_debug)
+	g_print ("default context=%p\n", default_main_context);
+#endif
+    }
+
+  G_UNLOCK (main_loop);
+
+  return default_main_context;
+}
+
+/* Hooks for adding to the main loop */
+
+/**
+ * g_source_new:
+ * @source_funcs: structure containing functions that implement
+ *                the sources behavior.
+ * @struct_size: size of the #GSource structure to create.
+ * 
+ * Creates a new #GSource structure. The size is specified to
+ * allow creating structures derived from #GSource that contain
+ * additional data. The size passed in must be at least
+ * <literal>sizeof (GSource)</literal>.
+ * 
+ * The source will not initially be associated with any #GMainContext
+ * and must be added to one with g_source_attach() before it will be
+ * executed.
+ * 
+ * Return value: the newly-created #GSource.
+ **/
+GSource *
+g_source_new (GSourceFuncs *source_funcs,
+	      guint         struct_size)
+{
+  GSource *source;
+
+  g_return_val_if_fail (source_funcs != NULL, NULL);
+  g_return_val_if_fail (struct_size >= sizeof (GSource), NULL);
+  
+  source = (GSource*) g_malloc0 (struct_size);
+
+  source->source_funcs = source_funcs;
+  source->ref_count = 1;
+  
+  source->priority = G_PRIORITY_DEFAULT;
+
+  source->flags = G_HOOK_FLAG_ACTIVE;
+
+  /* NULL/0 initialization for all other fields */
+  
+  return source;
+}
+
+/* Holds context's lock
+ */
+static void
+g_source_list_add (GSource      *source,
+		   GMainContext *context)
+{
+  GSource *tmp_source, *last_source;
+  
+  last_source = NULL;
+  tmp_source = context->source_list;
+  while (tmp_source && tmp_source->priority <= source->priority)
+    {
+      last_source = tmp_source;
+      tmp_source = tmp_source->next;
+    }
+
+  source->next = tmp_source;
+  if (tmp_source)
+    tmp_source->prev = source;
+  
+  source->prev = last_source;
+  if (last_source)
+    last_source->next = source;
+  else
+    context->source_list = source;
+}
+
+/* Holds context's lock
+ */
+static void
+g_source_list_remove (GSource      *source,
+		      GMainContext *context)
+{
+  if (source->prev)
+    source->prev->next = source->next;
+  else
+    context->source_list = source->next;
+
+  if (source->next)
+    source->next->prev = source->prev;
+
+  source->prev = NULL;
+  source->next = NULL;
+}
+
+/**
+ * g_source_attach:
+ * @source: a #GSource
+ * @context: a #GMainContext (if %NULL, the default context will be used)
+ * 
+ * Adds a #GSource to a @context so that it will be executed within
+ * that context. Remove it by calling g_source_destroy().
+ *
+ * Return value: the ID (greater than 0) for the source within the 
+ *   #GMainContext. 
+ **/
+guint
+g_source_attach (GSource      *source,
+		 GMainContext *context)
+{
+  guint result = 0;
+  GSList *tmp_list;
+
+  g_return_val_if_fail (source->context == NULL, 0);
+  g_return_val_if_fail (!SOURCE_DESTROYED (source), 0);
+  
+  if (!context)
+    context = g_main_context_default ();
+
+  LOCK_CONTEXT (context);
+
+  source->context = context;
+  result = source->source_id = context->next_id++;
+
+  source->ref_count++;
+  g_source_list_add (source, context);
+
+  tmp_list = source->poll_fds;
+  while (tmp_list)
+    {
+      g_main_context_add_poll_unlocked (context, source->priority, tmp_list->data);
+      tmp_list = tmp_list->next;
+    }
+
+#ifdef G_THREADS_ENABLED
+  /* Now wake up the main loop if it is waiting in the poll() */
+  g_main_context_wakeup_unlocked (context);
+#endif
+
+  UNLOCK_CONTEXT (context);
+
+  return result;
+}
+
+static void
+g_source_destroy_internal (GSource      *source,
+			   GMainContext *context,
+			   gboolean      have_lock)
+{
+  if (!have_lock)
+    LOCK_CONTEXT (context);
+  
+  if (!SOURCE_DESTROYED (source))
+    {
+      GSList *tmp_list;
+      gpointer old_cb_data;
+      GSourceCallbackFuncs *old_cb_funcs;
+      
+      source->flags &= ~G_HOOK_FLAG_ACTIVE;
+
+      old_cb_data = source->callback_data;
+      old_cb_funcs = source->callback_funcs;
+
+      source->callback_data = NULL;
+      source->callback_funcs = NULL;
+
+      if (old_cb_funcs)
+	{
+	  UNLOCK_CONTEXT (context);
+	  old_cb_funcs->unref (old_cb_data);
+	  LOCK_CONTEXT (context);
+	}
+
+      if (!SOURCE_BLOCKED (source))
+	{
+	  tmp_list = source->poll_fds;
+	  while (tmp_list)
+	    {
+	      g_main_context_remove_poll_unlocked (context, tmp_list->data);
+	      tmp_list = tmp_list->next;
+	    }
+	}
+	  
+      g_source_unref_internal (source, context, TRUE);
+    }
+
+  if (!have_lock)
+    UNLOCK_CONTEXT (context);
+}
+
+/**
+ * g_source_destroy:
+ * @source: a #GSource
+ * 
+ * Removes a source from its #GMainContext, if any, and mark it as
+ * destroyed.  The source cannot be subsequently added to another
+ * context.
+ **/
+void
+g_source_destroy (GSource *source)
+{
+  GMainContext *context;
+  
+  g_return_if_fail (source != NULL);
+  
+  context = source->context;
+  
+  if (context)
+    g_source_destroy_internal (source, context, FALSE);
+  else
+    source->flags &= ~G_HOOK_FLAG_ACTIVE;
+}
+
+/**
+ * g_source_get_id:
+ * @source: a #GSource
+ * 
+ * Returns the numeric ID for a particular source. The ID of a source
+ * is a positive integer which is unique within a particular main loop 
+ * context. The reverse
+ * mapping from ID to source is done by g_main_context_find_source_by_id().
+ *
+ * Return value: the ID (greater than 0) for the source
+ **/
+guint
+g_source_get_id (GSource *source)
+{
+  guint result;
+  
+  g_return_val_if_fail (source != NULL, 0);
+  g_return_val_if_fail (source->context != NULL, 0);
+
+  LOCK_CONTEXT (source->context);
+  result = source->source_id;
+  UNLOCK_CONTEXT (source->context);
+  
+  return result;
+}
+
+/**
+ * g_source_get_context:
+ * @source: a #GSource
+ * 
+ * Gets the #GMainContext with which the source is associated.
+ * Calling this function on a destroyed source is an error.
+ * 
+ * Return value: the #GMainContext with which the source is associated,
+ *               or %NULL if the context has not yet been added
+ *               to a source.
+ **/
+GMainContext *
+g_source_get_context (GSource *source)
+{
+  g_return_val_if_fail (!SOURCE_DESTROYED (source), NULL);
+
+  return source->context;
+}
+
+/**
+ * g_source_add_poll:
+ * @source:a #GSource 
+ * @fd: a #GPollFD structure holding information about a file
+ *      descriptor to watch.
+ * 
+ * Adds a file descriptor to the set of file descriptors polled for
+ * this source. This is usually combined with g_source_new() to add an
+ * event source. The event source's check function will typically test
+ * the @revents field in the #GPollFD struct and return %TRUE if events need
+ * to be processed.
+ **/
+void
+g_source_add_poll (GSource *source,
+		   GPollFD *fd)
+{
+  GMainContext *context;
+  
+  g_return_if_fail (source != NULL);
+  g_return_if_fail (fd != NULL);
+  g_return_if_fail (!SOURCE_DESTROYED (source));
+  
+  context = source->context;
+
+  if (context)
+    LOCK_CONTEXT (context);
+  
+  source->poll_fds = g_slist_prepend (source->poll_fds, fd);
+
+  if (context)
+    {
+      if (!SOURCE_BLOCKED (source))
+	g_main_context_add_poll_unlocked (context, source->priority, fd);
+      UNLOCK_CONTEXT (context);
+    }
+}
+
+/**
+ * g_source_remove_poll:
+ * @source:a #GSource 
+ * @fd: a #GPollFD structure previously passed to g_source_add_poll().
+ * 
+ * Removes a file descriptor from the set of file descriptors polled for
+ * this source. 
+ **/
+void
+g_source_remove_poll (GSource *source,
+		      GPollFD *fd)
+{
+  GMainContext *context;
+  
+  g_return_if_fail (source != NULL);
+  g_return_if_fail (fd != NULL);
+  g_return_if_fail (!SOURCE_DESTROYED (source));
+  
+  context = source->context;
+
+  if (context)
+    LOCK_CONTEXT (context);
+  
+  source->poll_fds = g_slist_remove (source->poll_fds, fd);
+
+  if (context)
+    {
+      if (!SOURCE_BLOCKED (source))
+	g_main_context_remove_poll_unlocked (context, fd);
+      UNLOCK_CONTEXT (context);
+    }
+}
+
+/**
+ * g_source_set_callback_indirect:
+ * @source: the source
+ * @callback_data: pointer to callback data "object"
+ * @callback_funcs: functions for reference counting @callback_data
+ *                  and getting the callback and data
+ * 
+ * Sets the callback function storing the data as a refcounted callback
+ * "object". This is used internally. Note that calling 
+ * g_source_set_callback_indirect() assumes
+ * an initial reference count on @callback_data, and thus
+ * @callback_funcs->unref will eventually be called once more
+ * than @callback_funcs->ref.
+ **/
+void
+g_source_set_callback_indirect (GSource              *source,
+				gpointer              callback_data,
+				GSourceCallbackFuncs *callback_funcs)
+{
+  GMainContext *context;
+  gpointer old_cb_data;
+  GSourceCallbackFuncs *old_cb_funcs;
+  
+  g_return_if_fail (source != NULL);
+  g_return_if_fail (callback_funcs != NULL || callback_data == NULL);
+
+  context = source->context;
+
+  if (context)
+    LOCK_CONTEXT (context);
+
+  old_cb_data = source->callback_data;
+  old_cb_funcs = source->callback_funcs;
+
+  source->callback_data = callback_data;
+  source->callback_funcs = callback_funcs;
+  
+  if (context)
+    UNLOCK_CONTEXT (context);
+  
+  if (old_cb_funcs)
+    old_cb_funcs->unref (old_cb_data);
+}
+
+static void
+g_source_callback_ref (gpointer cb_data)
+{
+  GSourceCallback *callback = cb_data;
+
+  callback->ref_count++;
+}
+
+
+static void
+g_source_callback_unref (gpointer cb_data)
+{
+  GSourceCallback *callback = cb_data;
+
+  callback->ref_count--;
+  if (callback->ref_count == 0)
+    {
+      if (callback->notify)
+	callback->notify (callback->data);
+      g_free (callback);
+    }
+}
+
+static void
+g_source_callback_get (gpointer     cb_data,
+		       GSource     *source, 
+		       GSourceFunc *func,
+		       gpointer    *data)
+{
+  GSourceCallback *callback = cb_data;
+
+  *func = callback->func;
+  *data = callback->data;
+}
+
+static GSourceCallbackFuncs g_source_callback_funcs = {
+  g_source_callback_ref,
+  g_source_callback_unref,
+  g_source_callback_get,
+};
+
+/**
+ * g_source_set_callback:
+ * @source: the source
+ * @func: a callback function
+ * @data: the data to pass to callback function
+ * @notify: a function to call when @data is no longer in use, or %NULL.
+ * 
+ * Sets the callback function for a source. The callback for a source is
+ * called from the source's dispatch function.
+ *
+ * The exact type of @func depends on the type of source; ie. you
+ * should not count on @func being called with @data as its first
+ * parameter.
+ * 
+ * Typically, you won't use this function. Instead use functions specific
+ * to the type of source you are using.
+ **/
+void
+g_source_set_callback (GSource        *source,
+		       GSourceFunc     func,
+		       gpointer        data,
+		       GDestroyNotify  notify)
+{
+  GSourceCallback *new_callback;
+
+  g_return_if_fail (source != NULL);
+
+  new_callback = g_new (GSourceCallback, 1);
+
+  new_callback->ref_count = 1;
+  new_callback->func = func;
+  new_callback->data = data;
+  new_callback->notify = notify;
+
+  g_source_set_callback_indirect (source, new_callback, &g_source_callback_funcs);
+}
+
+
+/**
+ * g_source_set_funcs:
+ * @source: a #GSource
+ * @funcs: the new #GSourceFuncs
+ * 
+ * Sets the source functions (can be used to override 
+ * default implementations) of an unattached source.
+ * 
+ * Since: 2.12
+ */
+void
+g_source_set_funcs (GSource     *source,
+	           GSourceFuncs *funcs)
+{
+  g_return_if_fail (source != NULL);
+  g_return_if_fail (source->context == NULL);
+  g_return_if_fail (source->ref_count > 0);
+  g_return_if_fail (funcs != NULL);
+
+  source->source_funcs = funcs;
+}
+
+/**
+ * g_source_set_priority:
+ * @source: a #GSource
+ * @priority: the new priority.
+ * 
+ * Sets the priority of a source. While the main loop is being
+ * run, a source will be dispatched if it is ready to be dispatched and no sources 
+ * at a higher (numerically smaller) priority are ready to be dispatched.
+ **/
+void
+g_source_set_priority (GSource  *source,
+		       gint      priority)
+{
+  GSList *tmp_list;
+  GMainContext *context;
+  
+  g_return_if_fail (source != NULL);
+
+  context = source->context;
+
+  if (context)
+    LOCK_CONTEXT (context);
+  
+  source->priority = priority;
+
+  if (context)
+    {
+      /* Remove the source from the context's source and then
+       * add it back so it is sorted in the correct plcae
+       */
+      g_source_list_remove (source, source->context);
+      g_source_list_add (source, source->context);
+
+      if (!SOURCE_BLOCKED (source))
+	{
+	  tmp_list = source->poll_fds;
+	  while (tmp_list)
+	    {
+	      g_main_context_remove_poll_unlocked (context, tmp_list->data);
+	      g_main_context_add_poll_unlocked (context, priority, tmp_list->data);
+	      
+	      tmp_list = tmp_list->next;
+	    }
+	}
+      
+      UNLOCK_CONTEXT (source->context);
+    }
+}
+
+/**
+ * g_source_get_priority:
+ * @source: a #GSource
+ * 
+ * Gets the priority of a source.
+ * 
+ * Return value: the priority of the source
+ **/
+gint
+g_source_get_priority (GSource *source)
+{
+  g_return_val_if_fail (source != NULL, 0);
+
+  return source->priority;
+}
+
+/**
+ * g_source_set_can_recurse:
+ * @source: a #GSource
+ * @can_recurse: whether recursion is allowed for this source
+ * 
+ * Sets whether a source can be called recursively. If @can_recurse is
+ * %TRUE, then while the source is being dispatched then this source
+ * will be processed normally. Otherwise, all processing of this
+ * source is blocked until the dispatch function returns.
+ **/
+void
+g_source_set_can_recurse (GSource  *source,
+			  gboolean  can_recurse)
+{
+  GMainContext *context;
+  
+  g_return_if_fail (source != NULL);
+
+  context = source->context;
+
+  if (context)
+    LOCK_CONTEXT (context);
+  
+  if (can_recurse)
+    source->flags |= G_SOURCE_CAN_RECURSE;
+  else
+    source->flags &= ~G_SOURCE_CAN_RECURSE;
+
+  if (context)
+    UNLOCK_CONTEXT (context);
+}
+
+/**
+ * g_source_get_can_recurse:
+ * @source: a #GSource
+ * 
+ * Checks whether a source is allowed to be called recursively.
+ * see g_source_set_can_recurse().
+ * 
+ * Return value: whether recursion is allowed.
+ **/
+gboolean
+g_source_get_can_recurse (GSource  *source)
+{
+  g_return_val_if_fail (source != NULL, FALSE);
+  
+  return (source->flags & G_SOURCE_CAN_RECURSE) != 0;
+}
+
+/**
+ * g_source_ref:
+ * @source: a #GSource
+ * 
+ * Increases the reference count on a source by one.
+ * 
+ * Return value: @source
+ **/
+GSource *
+g_source_ref (GSource *source)
+{
+  GMainContext *context;
+  
+  g_return_val_if_fail (source != NULL, NULL);
+
+  context = source->context;
+
+  if (context)
+    LOCK_CONTEXT (context);
+
+  source->ref_count++;
+
+  if (context)
+    UNLOCK_CONTEXT (context);
+
+  return source;
+}
+
+/* g_source_unref() but possible to call within context lock
+ */
+static void
+g_source_unref_internal (GSource      *source,
+			 GMainContext *context,
+			 gboolean      have_lock)
+{
+  gpointer old_cb_data = NULL;
+  GSourceCallbackFuncs *old_cb_funcs = NULL;
+
+  g_return_if_fail (source != NULL);
+  
+  if (!have_lock && context)
+    LOCK_CONTEXT (context);
+
+  source->ref_count--;
+  if (source->ref_count == 0)
+    {
+      old_cb_data = source->callback_data;
+      old_cb_funcs = source->callback_funcs;
+
+      source->callback_data = NULL;
+      source->callback_funcs = NULL;
+
+      if (context && !SOURCE_DESTROYED (source))
+	{
+	  g_warning (G_STRLOC ": ref_count == 0, but source is still attached to a context!");
+	  source->ref_count++;
+	}
+      else if (context)
+	g_source_list_remove (source, context);
+
+      if (source->source_funcs->finalize)
+	source->source_funcs->finalize (source);
+      
+      g_slist_free (source->poll_fds);
+      source->poll_fds = NULL;
+      g_free (source);
+    }
+  
+  if (!have_lock && context)
+    UNLOCK_CONTEXT (context);
+
+  if (old_cb_funcs)
+    {
+      if (have_lock)
+	UNLOCK_CONTEXT (context);
+      
+      old_cb_funcs->unref (old_cb_data);
+
+      if (have_lock)
+	LOCK_CONTEXT (context);
+    }
+}
+
+/**
+ * g_source_unref:
+ * @source: a #GSource
+ * 
+ * Decreases the reference count of a source by one. If the
+ * resulting reference count is zero the source and associated
+ * memory will be destroyed. 
+ **/
+void
+g_source_unref (GSource *source)
+{
+  g_return_if_fail (source != NULL);
+
+  g_source_unref_internal (source, source->context, FALSE);
+}
+
+/**
+ * g_main_context_find_source_by_id:
+ * @context: a #GMainContext (if %NULL, the default context will be used)
+ * @source_id: the source ID, as returned by g_source_get_id(). 
+ * 
+ * Finds a #GSource given a pair of context and ID.
+ * 
+ * Return value: the #GSource if found, otherwise, %NULL
+ **/
+GSource *
+g_main_context_find_source_by_id (GMainContext *context,
+				  guint         source_id)
+{
+  GSource *source;
+  
+  g_return_val_if_fail (source_id > 0, NULL);
+
+  if (context == NULL)
+    context = g_main_context_default ();
+  
+  LOCK_CONTEXT (context);
+  
+  source = context->source_list;
+  while (source)
+    {
+      if (!SOURCE_DESTROYED (source) &&
+	  source->source_id == source_id)
+	break;
+      source = source->next;
+    }
+
+  UNLOCK_CONTEXT (context);
+
+  return source;
+}
+
+/**
+ * g_main_context_find_source_by_funcs_user_data:
+ * @context: a #GMainContext (if %NULL, the default context will be used).
+ * @funcs: the @source_funcs passed to g_source_new().
+ * @user_data: the user data from the callback.
+ * 
+ * Finds a source with the given source functions and user data.  If
+ * multiple sources exist with the same source function and user data,
+ * the first one found will be returned.
+ * 
+ * Return value: the source, if one was found, otherwise %NULL
+ **/
+GSource *
+g_main_context_find_source_by_funcs_user_data (GMainContext *context,
+					       GSourceFuncs *funcs,
+					       gpointer      user_data)
+{
+  GSource *source;
+  
+  g_return_val_if_fail (funcs != NULL, NULL);
+
+  if (context == NULL)
+    context = g_main_context_default ();
+  
+  LOCK_CONTEXT (context);
+
+  source = context->source_list;
+  while (source)
+    {
+      if (!SOURCE_DESTROYED (source) &&
+	  source->source_funcs == funcs &&
+	  source->callback_funcs)
+	{
+	  GSourceFunc callback;
+	  gpointer callback_data;
+
+	  source->callback_funcs->get (source->callback_data, source, &callback, &callback_data);
+	  
+	  if (callback_data == user_data)
+	    break;
+	}
+      source = source->next;
+    }
+
+  UNLOCK_CONTEXT (context);
+
+  return source;
+}
+
+/**
+ * g_main_context_find_source_by_user_data:
+ * @context: a #GMainContext
+ * @user_data: the user_data for the callback.
+ * 
+ * Finds a source with the given user data for the callback.  If
+ * multiple sources exist with the same user data, the first
+ * one found will be returned.
+ * 
+ * Return value: the source, if one was found, otherwise %NULL
+ **/
+GSource *
+g_main_context_find_source_by_user_data (GMainContext *context,
+					 gpointer      user_data)
+{
+  GSource *source;
+  
+  if (context == NULL)
+    context = g_main_context_default ();
+  
+  LOCK_CONTEXT (context);
+
+  source = context->source_list;
+  while (source)
+    {
+      if (!SOURCE_DESTROYED (source) &&
+	  source->callback_funcs)
+	{
+	  GSourceFunc callback;
+	  gpointer callback_data = NULL;
+
+	  source->callback_funcs->get (source->callback_data, source, &callback, &callback_data);
+
+	  if (callback_data == user_data)
+	    break;
+	}
+      source = source->next;
+    }
+
+  UNLOCK_CONTEXT (context);
+
+  return source;
+}
+
+/**
+ * g_source_remove:
+ * @tag: the ID of the source to remove.
+ * 
+ * Removes the source with the given id from the default main context. 
+ * The id of
+ * a #GSource is given by g_source_get_id(), or will be returned by the
+ * functions g_source_attach(), g_idle_add(), g_idle_add_full(),
+ * g_timeout_add(), g_timeout_add_full(), g_child_watch_add(),
+ * g_child_watch_add_full(), g_io_add_watch(), and g_io_add_watch_full().
+ *
+ * See also g_source_destroy(). You must use g_source_destroy() for sources
+ * added to a non-default main context.
+ *
+ * Return value: %TRUE if the source was found and removed.
+ **/
+gboolean
+g_source_remove (guint tag)
+{
+  GSource *source;
+  
+  g_return_val_if_fail (tag > 0, FALSE);
+
+  source = g_main_context_find_source_by_id (NULL, tag);
+  if (source)
+    g_source_destroy (source);
+
+  return source != NULL;
+}
+
+/**
+ * g_source_remove_by_user_data:
+ * @user_data: the user_data for the callback.
+ * 
+ * Removes a source from the default main loop context given the user
+ * data for the callback. If multiple sources exist with the same user
+ * data, only one will be destroyed.
+ * 
+ * Return value: %TRUE if a source was found and removed. 
+ **/
+gboolean
+g_source_remove_by_user_data (gpointer user_data)
+{
+  GSource *source;
+  
+  source = g_main_context_find_source_by_user_data (NULL, user_data);
+  if (source)
+    {
+      g_source_destroy (source);
+      return TRUE;
+    }
+  else
+    return FALSE;
+}
+
+/**
+ * g_source_remove_by_funcs_user_data:
+ * @funcs: The @source_funcs passed to g_source_new()
+ * @user_data: the user data for the callback
+ * 
+ * Removes a source from the default main loop context given the
+ * source functions and user data. If multiple sources exist with the
+ * same source functions and user data, only one will be destroyed.
+ * 
+ * Return value: %TRUE if a source was found and removed. 
+ **/
+gboolean
+g_source_remove_by_funcs_user_data (GSourceFuncs *funcs,
+				    gpointer      user_data)
+{
+  GSource *source;
+
+  g_return_val_if_fail (funcs != NULL, FALSE);
+
+  source = g_main_context_find_source_by_funcs_user_data (NULL, funcs, user_data);
+  if (source)
+    {
+      g_source_destroy (source);
+      return TRUE;
+    }
+  else
+    return FALSE;
+}
+
+/**
+ * g_get_current_time:
+ * @result: #GTimeVal structure in which to store current time.
+ * 
+ * Equivalent to the UNIX gettimeofday() function, but portable.
+ **/
+void
+g_get_current_time (GTimeVal *result)
+{
+#ifndef G_OS_WIN32
+  struct timeval r;
+
+  g_return_if_fail (result != NULL);
+
+  /*this is required on alpha, there the timeval structs are int's
+    not longs and a cast only would fail horribly*/
+  gettimeofday (&r, NULL);
+  result->tv_sec = r.tv_sec;
+  result->tv_usec = r.tv_usec;
+#else
+  FILETIME ft;
+  guint64 time64;
+
+  g_return_if_fail (result != NULL);
+
+  GetSystemTimeAsFileTime (&ft);
+  memmove (&time64, &ft, sizeof (FILETIME));
+
+  /* Convert from 100s of nanoseconds since 1601-01-01
+   * to Unix epoch. Yes, this is Y2038 unsafe.
+   */
+  time64 -= G_GINT64_CONSTANT (116444736000000000);
+  time64 /= 10;
+
+  result->tv_sec = time64 / 1000000;
+  result->tv_usec = time64 % 1000000;
+#endif
+}
+
+static void
+g_main_dispatch_free (gpointer dispatch)
+{
+  g_slice_free (GMainDispatch, dispatch);
+}
+
+/* Running the main loop */
+
+static GMainDispatch *
+get_dispatch (void)
+{
+  static GStaticPrivate depth_private = G_STATIC_PRIVATE_INIT;
+  GMainDispatch *dispatch = g_static_private_get (&depth_private);
+  if (!dispatch)
+    {
+      dispatch = g_slice_new0 (GMainDispatch);
+      g_static_private_set (&depth_private, dispatch, g_main_dispatch_free);
+    }
+
+  return dispatch;
+}
+
+/**
+ * g_main_depth:
+ *
+ * Returns the depth of the stack of calls to
+ * g_main_context_dispatch() on any #GMainContext in the current thread.
+ *  That is, when called from the toplevel, it gives 0. When
+ * called from within a callback from g_main_context_iteration()
+ * (or g_main_loop_run(), etc.) it returns 1. When called from within 
+ * a callback to a recursive call to g_main_context_iterate(),
+ * it returns 2. And so forth.
+ *
+ * This function is useful in a situation like the following:
+ * Imagine an extremely simple "garbage collected" system.
+ *
+ * |[
+ * static GList *free_list;
+ * 
+ * gpointer
+ * allocate_memory (gsize size)
+ * { 
+ *   gpointer result = g_malloc (size);
+ *   free_list = g_list_prepend (free_list, result);
+ *   return result;
+ * }
+ * 
+ * void
+ * free_allocated_memory (void)
+ * {
+ *   GList *l;
+ *   for (l = free_list; l; l = l->next);
+ *     g_free (l->data);
+ *   g_list_free (free_list);
+ *   free_list = NULL;
+ *  }
+ * 
+ * [...]
+ * 
+ * while (TRUE); 
+ *  {
+ *    g_main_context_iteration (NULL, TRUE);
+ *    free_allocated_memory();
+ *   }
+ * ]|
+ *
+ * This works from an application, however, if you want to do the same
+ * thing from a library, it gets more difficult, since you no longer
+ * control the main loop. You might think you can simply use an idle
+ * function to make the call to free_allocated_memory(), but that
+ * doesn't work, since the idle function could be called from a
+ * recursive callback. This can be fixed by using g_main_depth()
+ *
+ * |[
+ * gpointer
+ * allocate_memory (gsize size)
+ * { 
+ *   FreeListBlock *block = g_new (FreeListBlock, 1);
+ *   block->mem = g_malloc (size);
+ *   block->depth = g_main_depth ();   
+ *   free_list = g_list_prepend (free_list, block);
+ *   return block->mem;
+ * }
+ * 
+ * void
+ * free_allocated_memory (void)
+ * {
+ *   GList *l;
+ *   
+ *   int depth = g_main_depth ();
+ *   for (l = free_list; l; );
+ *     {
+ *       GList *next = l->next;
+ *       FreeListBlock *block = l->data;
+ *       if (block->depth > depth)
+ *         {
+ *           g_free (block->mem);
+ *           g_free (block);
+ *           free_list = g_list_delete_link (free_list, l);
+ *         }
+ *               
+ *       l = next;
+ *     }
+ *   }
+ * ]|
+ *
+ * There is a temptation to use g_main_depth() to solve
+ * problems with reentrancy. For instance, while waiting for data
+ * to be received from the network in response to a menu item,
+ * the menu item might be selected again. It might seem that
+ * one could make the menu item's callback return immediately
+ * and do nothing if g_main_depth() returns a value greater than 1.
+ * However, this should be avoided since the user then sees selecting
+ * the menu item do nothing. Furthermore, you'll find yourself adding
+ * these checks all over your code, since there are doubtless many,
+ * many things that the user could do. Instead, you can use the
+ * following techniques:
+ *
+ * <orderedlist>
+ *  <listitem>
+ *   <para>
+ *     Use gtk_widget_set_sensitive() or modal dialogs to prevent
+ *     the user from interacting with elements while the main
+ *     loop is recursing.
+ *   </para>
+ *  </listitem>
+ *  <listitem>
+ *   <para>
+ *     Avoid main loop recursion in situations where you can't handle
+ *     arbitrary  callbacks. Instead, structure your code so that you
+ *     simply return to the main loop and then get called again when
+ *     there is more work to do.
+ *   </para>
+ *  </listitem>
+ * </orderedlist>
+ * 
+ * Return value: The main loop recursion level in the current thread
+ **/
+int
+g_main_depth (void)
+{
+  GMainDispatch *dispatch = get_dispatch ();
+  return dispatch->depth;
+}
+
+/**
+ * g_main_current_source:
+ *
+ * Returns the currently firing source for this thread.
+ * 
+ * Return value: The currently firing source or %NULL.
+ *
+ * Since: 2.12
+ */
+GSource *
+g_main_current_source (void)
+{
+  GMainDispatch *dispatch = get_dispatch ();
+  return dispatch->dispatching_sources ? dispatch->dispatching_sources->data : NULL;
+}
+
+/**
+ * g_source_is_destroyed:
+ * @source: a #GSource
+ *
+ * Returns whether @source has been destroyed.
+ *
+ * This is important when you operate upon your objects 
+ * from within idle handlers, but may have freed the object 
+ * before the dispatch of your idle handler.
+ *
+ * |[
+ * static gboolean 
+ * idle_callback (gpointer data)
+ * {
+ *   SomeWidget *self = data;
+ *    
+ *   GDK_THREADS_ENTER (<!-- -->);
+ *   /<!-- -->* do stuff with self *<!-- -->/
+ *   self->idle_id = 0;
+ *   GDK_THREADS_LEAVE (<!-- -->);
+ *    
+ *   return FALSE;
+ * }
+ *  
+ * static void 
+ * some_widget_do_stuff_later (SomeWidget *self)
+ * {
+ *   self->idle_id = g_idle_add (idle_callback, self);
+ * }
+ *  
+ * static void 
+ * some_widget_finalize (GObject *object)
+ * {
+ *   SomeWidget *self = SOME_WIDGET (object);
+ *    
+ *   if (self->idle_id)
+ *     g_source_remove (self->idle_id);
+ *    
+ *   G_OBJECT_CLASS (parent_class)->finalize (object);
+ * }
+ * ]|
+ *
+ * This will fail in a multi-threaded application if the 
+ * widget is destroyed before the idle handler fires due 
+ * to the use after free in the callback. A solution, to 
+ * this particular problem, is to check to if the source
+ * has already been destroy within the callback.
+ *
+ * |[
+ * static gboolean 
+ * idle_callback (gpointer data)
+ * {
+ *   SomeWidget *self = data;
+ *   
+ *   GDK_THREADS_ENTER ();
+ *   if (!g_source_is_destroyed (g_main_current_source ()))
+ *     {
+ *       /<!-- -->* do stuff with self *<!-- -->/
+ *     }
+ *   GDK_THREADS_LEAVE ();
+ *   
+ *   return FALSE;
+ * }
+ * ]|
+ *
+ * Return value: %TRUE if the source has been destroyed
+ *
+ * Since: 2.12
+ */
+gboolean
+g_source_is_destroyed (GSource *source)
+{
+  return SOURCE_DESTROYED (source);
+}
+
+
+/* Temporarily remove all this source's file descriptors from the
+ * poll(), so that if data comes available for one of the file descriptors
+ * we don't continually spin in the poll()
+ */
+/* HOLDS: source->context's lock */
+static void
+block_source (GSource *source)
+{
+  GSList *tmp_list;
+
+  g_return_if_fail (!SOURCE_BLOCKED (source));
+
+  tmp_list = source->poll_fds;
+  while (tmp_list)
+    {
+      g_main_context_remove_poll_unlocked (source->context, tmp_list->data);
+      tmp_list = tmp_list->next;
+    }
+}
+
+/* HOLDS: source->context's lock */
+static void
+unblock_source (GSource *source)
+{
+  GSList *tmp_list;
+  
+  g_return_if_fail (!SOURCE_BLOCKED (source)); /* Source already unblocked */
+  g_return_if_fail (!SOURCE_DESTROYED (source));
+  
+  tmp_list = source->poll_fds;
+  while (tmp_list)
+    {
+      g_main_context_add_poll_unlocked (source->context, source->priority, tmp_list->data);
+      tmp_list = tmp_list->next;
+    }
+}
+
+/* HOLDS: context's lock */
+static void
+g_main_dispatch (GMainContext *context)
+{
+  GMainDispatch *current = get_dispatch ();
+  guint i;
+
+  for (i = 0; i < context->pending_dispatches->len; i++)
+    {
+      GSource *source = context->pending_dispatches->pdata[i];
+
+      context->pending_dispatches->pdata[i] = NULL;
+      g_assert (source);
+
+      source->flags &= ~G_SOURCE_READY;
+
+      if (!SOURCE_DESTROYED (source))
+	{
+	  gboolean was_in_call;
+	  gpointer user_data = NULL;
+	  GSourceFunc callback = NULL;
+	  GSourceCallbackFuncs *cb_funcs;
+	  gpointer cb_data;
+	  gboolean need_destroy;
+
+	  gboolean (*dispatch) (GSource *,
+				GSourceFunc,
+				gpointer);
+	  GSList current_source_link;
+
+	  dispatch = source->source_funcs->dispatch;
+	  cb_funcs = source->callback_funcs;
+	  cb_data = source->callback_data;
+
+	  if (cb_funcs)
+	    cb_funcs->ref (cb_data);
+	  
+	  if ((source->flags & G_SOURCE_CAN_RECURSE) == 0)
+	    block_source (source);
+	  
+	  was_in_call = source->flags & G_HOOK_FLAG_IN_CALL;
+	  source->flags |= G_HOOK_FLAG_IN_CALL;
+
+	  if (cb_funcs)
+	    cb_funcs->get (cb_data, source, &callback, &user_data);
+
+	  UNLOCK_CONTEXT (context);
+
+	  current->depth++;
+	  /* The on-stack allocation of the GSList is unconventional, but
+	   * we know that the lifetime of the link is bounded to this
+	   * function as the link is kept in a thread specific list and
+	   * not manipulated outside of this function and its descendants.
+	   * Avoiding the overhead of a g_slist_alloc() is useful as many
+	   * applications do little more than dispatch events.
+	   *
+	   * This is a performance hack - do not revert to g_slist_prepend()!
+	   */
+	  current_source_link.data = source;
+	  current_source_link.next = current->dispatching_sources;
+	  current->dispatching_sources = &current_source_link;
+	  need_destroy = ! dispatch (source,
+				     callback,
+				     user_data);
+	  g_assert (current->dispatching_sources == &current_source_link);
+	  current->dispatching_sources = current_source_link.next;
+	  current->depth--;
+	  
+	  if (cb_funcs)
+	    cb_funcs->unref (cb_data);
+
+ 	  LOCK_CONTEXT (context);
+	  
+	  if (!was_in_call)
+	    source->flags &= ~G_HOOK_FLAG_IN_CALL;
+
+	  if ((source->flags & G_SOURCE_CAN_RECURSE) == 0 &&
+	      !SOURCE_DESTROYED (source))
+	    unblock_source (source);
+	  
+	  /* Note: this depends on the fact that we can't switch
+	   * sources from one main context to another
+	   */
+	  if (need_destroy && !SOURCE_DESTROYED (source))
+	    {
+	      g_assert (source->context == context);
+	      g_source_destroy_internal (source, context, TRUE);
+	    }
+	}
+      
+      SOURCE_UNREF (source, context);
+    }
+
+  g_ptr_array_set_size (context->pending_dispatches, 0);
+}
+
+/* Holds context's lock */
+static inline GSource *
+next_valid_source (GMainContext *context,
+		   GSource      *source)
+{
+  GSource *new_source = source ? source->next : context->source_list;
+
+  while (new_source)
+    {
+      if (!SOURCE_DESTROYED (new_source))
+	{
+	  new_source->ref_count++;
+	  break;
+	}
+      
+      new_source = new_source->next;
+    }
+
+  if (source)
+    SOURCE_UNREF (source, context);
+	  
+  return new_source;
+}
+
+/**
+ * g_main_context_acquire:
+ * @context: a #GMainContext
+ * 
+ * Tries to become the owner of the specified context.
+ * If some other thread is the owner of the context,
+ * returns %FALSE immediately. Ownership is properly
+ * recursive: the owner can require ownership again
+ * and will release ownership when g_main_context_release()
+ * is called as many times as g_main_context_acquire().
+ *
+ * You must be the owner of a context before you
+ * can call g_main_context_prepare(), g_main_context_query(),
+ * g_main_context_check(), g_main_context_dispatch().
+ * 
+ * Return value: %TRUE if the operation succeeded, and
+ *   this thread is now the owner of @context.
+ **/
+gboolean 
+g_main_context_acquire (GMainContext *context)
+{
+#ifdef G_THREADS_ENABLED
+  gboolean result = FALSE;
+  GThread *self = G_THREAD_SELF;
+
+  if (context == NULL)
+    context = g_main_context_default ();
+  
+  LOCK_CONTEXT (context);
+
+  if (!context->owner)
+    {
+      context->owner = self;
+      g_assert (context->owner_count == 0);
+    }
+
+  if (context->owner == self)
+    {
+      context->owner_count++;
+      result = TRUE;
+    }
+
+  UNLOCK_CONTEXT (context); 
+  
+  return result;
+#else /* !G_THREADS_ENABLED */
+  return TRUE;
+#endif /* G_THREADS_ENABLED */
+}
+
+/**
+ * g_main_context_release:
+ * @context: a #GMainContext
+ * 
+ * Releases ownership of a context previously acquired by this thread
+ * with g_main_context_acquire(). If the context was acquired multiple
+ * times, the ownership will be released only when g_main_context_release()
+ * is called as many times as it was acquired.
+ **/
+void
+g_main_context_release (GMainContext *context)
+{
+#ifdef G_THREADS_ENABLED
+  if (context == NULL)
+    context = g_main_context_default ();
+  
+  LOCK_CONTEXT (context);
+
+  context->owner_count--;
+  if (context->owner_count == 0)
+    {
+      context->owner = NULL;
+
+      if (context->waiters)
+	{
+	  GMainWaiter *waiter = context->waiters->data;
+	  gboolean loop_internal_waiter =
+	    (waiter->mutex == g_static_mutex_get_mutex (&context->mutex));
+	  context->waiters = g_slist_delete_link (context->waiters,
+						  context->waiters);
+	  if (!loop_internal_waiter)
+	    g_mutex_lock (waiter->mutex);
+	  
+	  g_cond_signal (waiter->cond);
+	  
+	  if (!loop_internal_waiter)
+	    g_mutex_unlock (waiter->mutex);
+	}
+    }
+
+  UNLOCK_CONTEXT (context); 
+#endif /* G_THREADS_ENABLED */
+}
+
+/**
+ * g_main_context_wait:
+ * @context: a #GMainContext
+ * @cond: a condition variable
+ * @mutex: a mutex, currently held
+ * 
+ * Tries to become the owner of the specified context,
+ * as with g_main_context_acquire(). But if another thread
+ * is the owner, atomically drop @mutex and wait on @cond until 
+ * that owner releases ownership or until @cond is signaled, then
+ * try again (once) to become the owner.
+ * 
+ * Return value: %TRUE if the operation succeeded, and
+ *   this thread is now the owner of @context.
+ **/
+gboolean
+g_main_context_wait (GMainContext *context,
+		     GCond        *cond,
+		     GMutex       *mutex)
+{
+#ifdef G_THREADS_ENABLED
+  gboolean result = FALSE;
+  GThread *self = G_THREAD_SELF;
+  gboolean loop_internal_waiter;
+  
+  if (context == NULL)
+    context = g_main_context_default ();
+
+  loop_internal_waiter = (mutex == g_static_mutex_get_mutex (&context->mutex));
+  
+  if (!loop_internal_waiter)
+    LOCK_CONTEXT (context);
+
+  if (context->owner && context->owner != self)
+    {
+      GMainWaiter waiter;
+
+      waiter.cond = cond;
+      waiter.mutex = mutex;
+
+      context->waiters = g_slist_append (context->waiters, &waiter);
+      
+      if (!loop_internal_waiter)
+	UNLOCK_CONTEXT (context);
+      g_cond_wait (cond, mutex);
+      if (!loop_internal_waiter)      
+	LOCK_CONTEXT (context);
+
+      context->waiters = g_slist_remove (context->waiters, &waiter);
+    }
+
+  if (!context->owner)
+    {
+      context->owner = self;
+      g_assert (context->owner_count == 0);
+    }
+
+  if (context->owner == self)
+    {
+      context->owner_count++;
+      result = TRUE;
+    }
+
+  if (!loop_internal_waiter)
+    UNLOCK_CONTEXT (context); 
+  
+  return result;
+#else /* !G_THREADS_ENABLED */
+  return TRUE;
+#endif /* G_THREADS_ENABLED */
+}
+
+/**
+ * g_main_context_prepare:
+ * @context: a #GMainContext
+ * @priority: location to store priority of highest priority
+ *            source already ready.
+ * 
+ * Prepares to poll sources within a main loop. The resulting information
+ * for polling is determined by calling g_main_context_query ().
+ * 
+ * Return value: %TRUE if some source is ready to be dispatched
+ *               prior to polling.
+ **/
+gboolean
+g_main_context_prepare (GMainContext *context,
+			gint         *priority)
+{
+  gint i;
+  gint n_ready = 0;
+  gint current_priority = G_MAXINT;
+  GSource *source;
+
+  if (context == NULL)
+    context = g_main_context_default ();
+  
+  LOCK_CONTEXT (context);
+
+  context->time_is_current = FALSE;
+
+  if (context->in_check_or_prepare)
+    {
+      g_warning ("g_main_context_prepare() called recursively from within a source's check() or "
+		 "prepare() member.");
+      UNLOCK_CONTEXT (context);
+      return FALSE;
+    }
+
+#ifdef G_THREADS_ENABLED
+  if (context->poll_waiting)
+    {
+      g_warning("g_main_context_prepare(): main loop already active in another thread");
+      UNLOCK_CONTEXT (context);
+      return FALSE;
+    }
+  
+  context->poll_waiting = TRUE;
+#endif /* G_THREADS_ENABLED */
+
+#if 0
+  /* If recursing, finish up current dispatch, before starting over */
+  if (context->pending_dispatches)
+    {
+      if (dispatch)
+	g_main_dispatch (context, &current_time);
+      
+      UNLOCK_CONTEXT (context);
+      return TRUE;
+    }
+#endif
+
+  /* If recursing, clear list of pending dispatches */
+
+  for (i = 0; i < context->pending_dispatches->len; i++)
+    {
+      if (context->pending_dispatches->pdata[i])
+	SOURCE_UNREF ((GSource *)context->pending_dispatches->pdata[i], context);
+    }
+  g_ptr_array_set_size (context->pending_dispatches, 0);
+  
+  /* Prepare all sources */
+
+  context->timeout = -1;
+  
+  source = next_valid_source (context, NULL);
+  while (source)
+    {
+      gint source_timeout = -1;
+
+      if ((n_ready > 0) && (source->priority > current_priority))
+	{
+	  SOURCE_UNREF (source, context);
+	  break;
+	}
+      if (SOURCE_BLOCKED (source))
+	goto next;
+
+      if (!(source->flags & G_SOURCE_READY))
+	{
+	  gboolean result;
+	  gboolean (*prepare)  (GSource  *source, 
+				gint     *timeout);
+
+	  prepare = source->source_funcs->prepare;
+	  context->in_check_or_prepare++;
+	  UNLOCK_CONTEXT (context);
+
+	  result = (*prepare) (source, &source_timeout);
+
+	  LOCK_CONTEXT (context);
+	  context->in_check_or_prepare--;
+
+	  if (result)
+	    source->flags |= G_SOURCE_READY;
+	}
+
+      if (source->flags & G_SOURCE_READY)
+	{
+	  n_ready++;
+	  current_priority = source->priority;
+	  context->timeout = 0;
+	}
+      
+      if (source_timeout >= 0)
+	{
+	  if (context->timeout < 0)
+	    context->timeout = source_timeout;
+	  else
+	    context->timeout = MIN (context->timeout, source_timeout);
+	}
+
+    next:
+      source = next_valid_source (context, source);
+    }
+
+  UNLOCK_CONTEXT (context);
+  
+  if (priority)
+    *priority = current_priority;
+  
+  return (n_ready > 0);
+}
+
+/**
+ * g_main_context_query:
+ * @context: a #GMainContext
+ * @max_priority: maximum priority source to check
+ * @timeout_: location to store timeout to be used in polling
+ * @fds: location to store #GPollFD records that need to be polled.
+ * @n_fds: length of @fds.
+ * 
+ * Determines information necessary to poll this main loop.
+ * 
+ * Return value: the number of records actually stored in @fds,
+ *   or, if more than @n_fds records need to be stored, the number
+ *   of records that need to be stored.
+ **/
+gint
+g_main_context_query (GMainContext *context,
+		      gint          max_priority,
+		      gint         *timeout,
+		      GPollFD      *fds,
+		      gint          n_fds)
+{
+  gint n_poll;
+  GPollRec *pollrec;
+  
+  LOCK_CONTEXT (context);
+
+  pollrec = context->poll_records;
+  n_poll = 0;
+  while (pollrec && max_priority >= pollrec->priority)
+    {
+      /* We need to include entries with fd->events == 0 in the array because
+       * otherwise if the application changes fd->events behind our back and 
+       * makes it non-zero, we'll be out of sync when we check the fds[] array.
+       * (Changing fd->events after adding an FD wasn't an anticipated use of 
+       * this API, but it occurs in practice.) */
+      if (n_poll < n_fds)
+	{
+	  fds[n_poll].fd = pollrec->fd->fd;
+	  /* In direct contradiction to the Unix98 spec, IRIX runs into
+	   * difficulty if you pass in POLLERR, POLLHUP or POLLNVAL
+	   * flags in the events field of the pollfd while it should
+	   * just ignoring them. So we mask them out here.
+	   */
+	  fds[n_poll].events = pollrec->fd->events & ~(G_IO_ERR|G_IO_HUP|G_IO_NVAL);
+	  fds[n_poll].revents = 0;
+	}
+
+      pollrec = pollrec->next;
+      n_poll++;
+    }
+
+#ifdef G_THREADS_ENABLED
+  context->poll_changed = FALSE;
+#endif
+  
+  if (timeout)
+    {
+      *timeout = context->timeout;
+      if (*timeout != 0)
+	context->time_is_current = FALSE;
+    }
+  
+  UNLOCK_CONTEXT (context);
+
+  return n_poll;
+}
+
+/**
+ * g_main_context_check:
+ * @context: a #GMainContext
+ * @max_priority: the maximum numerical priority of sources to check
+ * @fds: array of #GPollFD's that was passed to the last call to
+ *       g_main_context_query()
+ * @n_fds: return value of g_main_context_query()
+ * 
+ * Passes the results of polling back to the main loop.
+ * 
+ * Return value: %TRUE if some sources are ready to be dispatched.
+ **/
+gboolean
+g_main_context_check (GMainContext *context,
+		      gint          max_priority,
+		      GPollFD      *fds,
+		      gint          n_fds)
+{
+  GSource *source;
+  GPollRec *pollrec;
+  gint n_ready = 0;
+  gint i;
+   
+  LOCK_CONTEXT (context);
+
+  if (context->in_check_or_prepare)
+    {
+      g_warning ("g_main_context_check() called recursively from within a source's check() or "
+		 "prepare() member.");
+      UNLOCK_CONTEXT (context);
+      return FALSE;
+    }
+  
+#ifdef G_THREADS_ENABLED
+  if (!context->poll_waiting)
+    {
+#ifndef G_OS_WIN32
+      gchar a;
+      read (context->wake_up_pipe[0], &a, 1);
+#endif
+    }
+  else
+    context->poll_waiting = FALSE;
+
+  /* If the set of poll file descriptors changed, bail out
+   * and let the main loop rerun
+   */
+  if (context->poll_changed)
+    {
+      UNLOCK_CONTEXT (context);
+      return FALSE;
+    }
+#endif /* G_THREADS_ENABLED */
+  
+  pollrec = context->poll_records;
+  i = 0;
+  while (i < n_fds)
+    {
+      if (pollrec->fd->events)
+	pollrec->fd->revents = fds[i].revents;
+
+      pollrec = pollrec->next;
+      i++;
+    }
+
+  source = next_valid_source (context, NULL);
+  while (source)
+    {
+      if ((n_ready > 0) && (source->priority > max_priority))
+	{
+	  SOURCE_UNREF (source, context);
+	  break;
+	}
+      if (SOURCE_BLOCKED (source))
+	goto next;
+
+      if (!(source->flags & G_SOURCE_READY))
+	{
+	  gboolean result;
+	  gboolean (*check) (GSource  *source);
+
+	  check = source->source_funcs->check;
+	  
+	  context->in_check_or_prepare++;
+	  UNLOCK_CONTEXT (context);
+	  
+	  result = (*check) (source);
+	  
+	  LOCK_CONTEXT (context);
+	  context->in_check_or_prepare--;
+	  
+	  if (result)
+	    source->flags |= G_SOURCE_READY;
+	}
+
+      if (source->flags & G_SOURCE_READY)
+	{
+	  source->ref_count++;
+	  g_ptr_array_add (context->pending_dispatches, source);
+
+	  n_ready++;
+
+          /* never dispatch sources with less priority than the first
+           * one we choose to dispatch
+           */
+          max_priority = source->priority;
+	}
+
+    next:
+      source = next_valid_source (context, source);
+    }
+
+  UNLOCK_CONTEXT (context);
+
+  return n_ready > 0;
+}
+
+/**
+ * g_main_context_dispatch:
+ * @context: a #GMainContext
+ * 
+ * Dispatches all pending sources.
+ **/
+void
+g_main_context_dispatch (GMainContext *context)
+{
+  LOCK_CONTEXT (context);
+
+  if (context->pending_dispatches->len > 0)
+    {
+      g_main_dispatch (context);
+    }
+
+  UNLOCK_CONTEXT (context);
+}
+
+/* HOLDS context lock */
+static gboolean
+g_main_context_iterate (GMainContext *context,
+			gboolean      block,
+			gboolean      dispatch,
+			GThread      *self)
+{
+  gint max_priority;
+  gint timeout;
+  gboolean some_ready;
+  gint nfds, allocated_nfds;
+  GPollFD *fds = NULL;
+
+  UNLOCK_CONTEXT (context);
+
+#ifdef G_THREADS_ENABLED
+  if (!g_main_context_acquire (context))
+    {
+      gboolean got_ownership;
+
+      LOCK_CONTEXT (context);
+
+      g_return_val_if_fail (g_thread_supported (), FALSE);
+
+      if (!block)
+	return FALSE;
+
+      if (!context->cond)
+	context->cond = g_cond_new ();
+
+      got_ownership = g_main_context_wait (context,
+					   context->cond,
+					   g_static_mutex_get_mutex (&context->mutex));
+
+      if (!got_ownership)
+	return FALSE;
+    }
+  else
+    LOCK_CONTEXT (context);
+#endif /* G_THREADS_ENABLED */
+  
+  if (!context->cached_poll_array)
+    {
+      context->cached_poll_array_size = context->n_poll_records;
+      context->cached_poll_array = g_new (GPollFD, context->n_poll_records);
+    }
+
+  allocated_nfds = context->cached_poll_array_size;
+  fds = context->cached_poll_array;
+  
+  UNLOCK_CONTEXT (context);
+
+  g_main_context_prepare (context, &max_priority); 
+  
+  while ((nfds = g_main_context_query (context, max_priority, &timeout, fds, 
+				       allocated_nfds)) > allocated_nfds)
+    {
+      LOCK_CONTEXT (context);
+      g_free (fds);
+      context->cached_poll_array_size = allocated_nfds = nfds;
+      context->cached_poll_array = fds = g_new (GPollFD, nfds);
+      UNLOCK_CONTEXT (context);
+    }
+
+  if (!block)
+    timeout = 0;
+  
+  g_main_context_poll (context, timeout, max_priority, fds, nfds);
+  
+  some_ready = g_main_context_check (context, max_priority, fds, nfds);
+  
+  if (dispatch)
+    g_main_context_dispatch (context);
+  
+#ifdef G_THREADS_ENABLED
+  g_main_context_release (context);
+#endif /* G_THREADS_ENABLED */    
+
+  LOCK_CONTEXT (context);
+
+  return some_ready;
+}
+
+/**
+ * g_main_context_pending:
+ * @context: a #GMainContext (if %NULL, the default context will be used)
+ *
+ * Checks if any sources have pending events for the given context.
+ * 
+ * Return value: %TRUE if events are pending.
+ **/
+gboolean 
+g_main_context_pending (GMainContext *context)
+{
+  gboolean retval;
+
+  if (!context)
+    context = g_main_context_default();
+
+  LOCK_CONTEXT (context);
+  retval = g_main_context_iterate (context, FALSE, FALSE, G_THREAD_SELF);
+  UNLOCK_CONTEXT (context);
+  
+  return retval;
+}
+
+/**
+ * g_main_context_iteration:
+ * @context: a #GMainContext (if %NULL, the default context will be used) 
+ * @may_block: whether the call may block.
+ * 
+ * Runs a single iteration for the given main loop. This involves
+ * checking to see if any event sources are ready to be processed,
+ * then if no events sources are ready and @may_block is %TRUE, waiting
+ * for a source to become ready, then dispatching the highest priority
+ * events sources that are ready. Otherwise, if @may_block is %FALSE 
+ * sources are not waited to become ready, only those highest priority 
+ * events sources will be dispatched (if any), that are ready at this 
+ * given moment without further waiting.
+ *
+ * Note that even when @may_block is %TRUE, it is still possible for 
+ * g_main_context_iteration() to return %FALSE, since the the wait may 
+ * be interrupted for other reasons than an event source becoming ready.
+ * 
+ * Return value: %TRUE if events were dispatched.
+ **/
+gboolean
+g_main_context_iteration (GMainContext *context, gboolean may_block)
+{
+  gboolean retval;
+
+  if (!context)
+    context = g_main_context_default();
+  
+  LOCK_CONTEXT (context);
+  retval = g_main_context_iterate (context, may_block, TRUE, G_THREAD_SELF);
+  UNLOCK_CONTEXT (context);
+  
+  return retval;
+}
+
+/**
+ * g_main_loop_new:
+ * @context: a #GMainContext  (if %NULL, the default context will be used).
+ * @is_running: set to %TRUE to indicate that the loop is running. This
+ * is not very important since calling g_main_loop_run() will set this to
+ * %TRUE anyway.
+ * 
+ * Creates a new #GMainLoop structure.
+ * 
+ * Return value: a new #GMainLoop.
+ **/
+GMainLoop *
+g_main_loop_new (GMainContext *context,
+		 gboolean      is_running)
+{
+  GMainLoop *loop;
+
+  if (!context)
+    context = g_main_context_default();
+  
+  g_main_context_ref (context);
+
+  loop = g_new0 (GMainLoop, 1);
+  loop->context = context;
+  loop->is_running = is_running != FALSE;
+  loop->ref_count = 1;
+  
+  return loop;
+}
+
+/**
+ * g_main_loop_ref:
+ * @loop: a #GMainLoop
+ * 
+ * Increases the reference count on a #GMainLoop object by one.
+ * 
+ * Return value: @loop
+ **/
+GMainLoop *
+g_main_loop_ref (GMainLoop *loop)
+{
+  g_return_val_if_fail (loop != NULL, NULL);
+  g_return_val_if_fail (g_atomic_int_get (&loop->ref_count) > 0, NULL);
+
+  g_atomic_int_inc (&loop->ref_count);
+
+  return loop;
+}
+
+/**
+ * g_main_loop_unref:
+ * @loop: a #GMainLoop
+ * 
+ * Decreases the reference count on a #GMainLoop object by one. If
+ * the result is zero, free the loop and free all associated memory.
+ **/
+void
+g_main_loop_unref (GMainLoop *loop)
+{
+  g_return_if_fail (loop != NULL);
+  g_return_if_fail (g_atomic_int_get (&loop->ref_count) > 0);
+
+  if (!g_atomic_int_dec_and_test (&loop->ref_count))
+    return;
+
+  g_main_context_unref (loop->context);
+  g_free (loop);
+}
+
+/**
+ * g_main_loop_run:
+ * @loop: a #GMainLoop
+ * 
+ * Runs a main loop until g_main_loop_quit() is called on the loop.
+ * If this is called for the thread of the loop's #GMainContext,
+ * it will process events from the loop, otherwise it will
+ * simply wait.
+ **/
+void 
+g_main_loop_run (GMainLoop *loop)
+{
+  GThread *self = G_THREAD_SELF;
+
+  g_return_if_fail (loop != NULL);
+  g_return_if_fail (g_atomic_int_get (&loop->ref_count) > 0);
+
+#ifdef G_THREADS_ENABLED
+  if (!g_main_context_acquire (loop->context))
+    {
+      gboolean got_ownership = FALSE;
+      
+      /* Another thread owns this context */
+      if (!g_thread_supported ())
+	{
+	  g_warning ("g_main_loop_run() was called from second thread but "
+		     "g_thread_init() was never called.");
+	  return;
+	}
+      
+      LOCK_CONTEXT (loop->context);
+
+      g_atomic_int_inc (&loop->ref_count);
+
+      if (!loop->is_running)
+	loop->is_running = TRUE;
+
+      if (!loop->context->cond)
+	loop->context->cond = g_cond_new ();
+          
+      while (loop->is_running && !got_ownership)
+	got_ownership = g_main_context_wait (loop->context,
+					     loop->context->cond,
+					     g_static_mutex_get_mutex (&loop->context->mutex));
+      
+      if (!loop->is_running)
+	{
+	  UNLOCK_CONTEXT (loop->context);
+	  if (got_ownership)
+	    g_main_context_release (loop->context);
+	  g_main_loop_unref (loop);
+	  return;
+	}
+
+      g_assert (got_ownership);
+    }
+  else
+    LOCK_CONTEXT (loop->context);
+#endif /* G_THREADS_ENABLED */ 
+
+  if (loop->context->in_check_or_prepare)
+    {
+      g_warning ("g_main_loop_run(): called recursively from within a source's "
+		 "check() or prepare() member, iteration not possible.");
+      return;
+    }
+
+  g_atomic_int_inc (&loop->ref_count);
+  loop->is_running = TRUE;
+  while (loop->is_running)
+    g_main_context_iterate (loop->context, TRUE, TRUE, self);
+
+  UNLOCK_CONTEXT (loop->context);
+  
+#ifdef G_THREADS_ENABLED
+  g_main_context_release (loop->context);
+#endif /* G_THREADS_ENABLED */    
+  
+  g_main_loop_unref (loop);
+}
+
+/**
+ * g_main_loop_quit:
+ * @loop: a #GMainLoop
+ * 
+ * Stops a #GMainLoop from running. Any calls to g_main_loop_run()
+ * for the loop will return. 
+ *
+ * Note that sources that have already been dispatched when 
+ * g_main_loop_quit() is called will still be executed.
+ **/
+void 
+g_main_loop_quit (GMainLoop *loop)
+{
+  g_return_if_fail (loop != NULL);
+  g_return_if_fail (g_atomic_int_get (&loop->ref_count) > 0);
+
+  LOCK_CONTEXT (loop->context);
+  loop->is_running = FALSE;
+  g_main_context_wakeup_unlocked (loop->context);
+
+#ifdef G_THREADS_ENABLED
+  if (loop->context->cond)
+    g_cond_broadcast (loop->context->cond);
+#endif /* G_THREADS_ENABLED */
+
+  UNLOCK_CONTEXT (loop->context);
+}
+
+/**
+ * g_main_loop_is_running:
+ * @loop: a #GMainLoop.
+ * 
+ * Checks to see if the main loop is currently being run via g_main_loop_run().
+ * 
+ * Return value: %TRUE if the mainloop is currently being run.
+ **/
+gboolean
+g_main_loop_is_running (GMainLoop *loop)
+{
+  g_return_val_if_fail (loop != NULL, FALSE);
+  g_return_val_if_fail (g_atomic_int_get (&loop->ref_count) > 0, FALSE);
+
+  return loop->is_running;
+}
+
+/**
+ * g_main_loop_get_context:
+ * @loop: a #GMainLoop.
+ * 
+ * Returns the #GMainContext of @loop.
+ * 
+ * Return value: the #GMainContext of @loop
+ **/
+GMainContext *
+g_main_loop_get_context (GMainLoop *loop)
+{
+  g_return_val_if_fail (loop != NULL, NULL);
+  g_return_val_if_fail (g_atomic_int_get (&loop->ref_count) > 0, NULL);
+ 
+  return loop->context;
+}
+
+/* HOLDS: context's lock */
+static void
+g_main_context_poll (GMainContext *context,
+		     gint          timeout,
+		     gint          priority,
+		     GPollFD      *fds,
+		     gint          n_fds)
+{
+#ifdef  G_MAIN_POLL_DEBUG
+  GTimer *poll_timer;
+  GPollRec *pollrec;
+  gint i;
+#endif
+
+  GPollFunc poll_func;
+
+  if (n_fds || timeout != 0)
+    {
+#ifdef	G_MAIN_POLL_DEBUG
+      if (_g_main_poll_debug)
+	{
+	  g_print ("polling context=%p n=%d timeout=%d\n",
+		   context, n_fds, timeout);
+	  poll_timer = g_timer_new ();
+	}
+#endif
+
+      LOCK_CONTEXT (context);
+
+      poll_func = context->poll_func;
+      
+      UNLOCK_CONTEXT (context);
+      if ((*poll_func) (fds, n_fds, timeout) < 0 && errno != EINTR)
+	{
+#ifndef G_OS_WIN32
+	  g_warning ("poll(2) failed due to: %s.",
+		     g_strerror (errno));
+#else
+	  /* If g_poll () returns -1, it has already called g_warning() */
+#endif
+	}
+      
+#ifdef	G_MAIN_POLL_DEBUG
+      if (_g_main_poll_debug)
+	{
+	  LOCK_CONTEXT (context);
+
+	  g_print ("g_main_poll(%d) timeout: %d - elapsed %12.10f seconds",
+		   n_fds,
+		   timeout,
+		   g_timer_elapsed (poll_timer, NULL));
+	  g_timer_destroy (poll_timer);
+	  pollrec = context->poll_records;
+
+	  while (pollrec != NULL)
+	    {
+	      i = 0;
+	      while (i < n_fds)
+		{
+		  if (fds[i].fd == pollrec->fd->fd &&
+		      pollrec->fd->events &&
+		      fds[i].revents)
+		    {
+		      g_print (" [" G_POLLFD_FORMAT " :", fds[i].fd);
+		      if (fds[i].revents & G_IO_IN)
+			g_print ("i");
+		      if (fds[i].revents & G_IO_OUT)
+			g_print ("o");
+		      if (fds[i].revents & G_IO_PRI)
+			g_print ("p");
+		      if (fds[i].revents & G_IO_ERR)
+			g_print ("e");
+		      if (fds[i].revents & G_IO_HUP)
+			g_print ("h");
+		      if (fds[i].revents & G_IO_NVAL)
+			g_print ("n");
+		      g_print ("]");
+		    }
+		  i++;
+		}
+	      pollrec = pollrec->next;
+	    }
+	  g_print ("\n");
+
+	  UNLOCK_CONTEXT (context);
+	}
+#endif
+    } /* if (n_fds || timeout != 0) */
+}
+
+/**
+ * g_main_context_add_poll:
+ * @context: a #GMainContext (or %NULL for the default context)
+ * @fd: a #GPollFD structure holding information about a file
+ *      descriptor to watch.
+ * @priority: the priority for this file descriptor which should be
+ *      the same as the priority used for g_source_attach() to ensure that the
+ *      file descriptor is polled whenever the results may be needed.
+ * 
+ * Adds a file descriptor to the set of file descriptors polled for
+ * this context. This will very seldomly be used directly. Instead
+ * a typical event source will use g_source_add_poll() instead.
+ **/
+void
+g_main_context_add_poll (GMainContext *context,
+			 GPollFD      *fd,
+			 gint          priority)
+{
+  if (!context)
+    context = g_main_context_default ();
+  
+  g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0);
+  g_return_if_fail (fd);
+
+  LOCK_CONTEXT (context);
+  g_main_context_add_poll_unlocked (context, priority, fd);
+  UNLOCK_CONTEXT (context);
+}
+
+/* HOLDS: main_loop_lock */
+static void 
+g_main_context_add_poll_unlocked (GMainContext *context,
+				  gint          priority,
+				  GPollFD      *fd)
+{
+  GPollRec *lastrec, *pollrec;
+  GPollRec *newrec = g_slice_new (GPollRec);
+
+  /* This file descriptor may be checked before we ever poll */
+  fd->revents = 0;
+  newrec->fd = fd;
+  newrec->priority = priority;
+
+  lastrec = NULL;
+  pollrec = context->poll_records;
+  while (pollrec && priority >= pollrec->priority)
+    {
+      lastrec = pollrec;
+      pollrec = pollrec->next;
+    }
+  
+  if (lastrec)
+    lastrec->next = newrec;
+  else
+    context->poll_records = newrec;
+
+  newrec->next = pollrec;
+
+  context->n_poll_records++;
+
+#ifdef G_THREADS_ENABLED
+  context->poll_changed = TRUE;
+
+  /* Now wake up the main loop if it is waiting in the poll() */
+  g_main_context_wakeup_unlocked (context);
+#endif
+}
+
+/**
+ * g_main_context_remove_poll:
+ * @context:a #GMainContext 
+ * @fd: a #GPollFD descriptor previously added with g_main_context_add_poll()
+ * 
+ * Removes file descriptor from the set of file descriptors to be
+ * polled for a particular context.
+ **/
+void
+g_main_context_remove_poll (GMainContext *context,
+			    GPollFD      *fd)
+{
+  if (!context)
+    context = g_main_context_default ();
+  
+  g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0);
+  g_return_if_fail (fd);
+
+  LOCK_CONTEXT (context);
+  g_main_context_remove_poll_unlocked (context, fd);
+  UNLOCK_CONTEXT (context);
+}
+
+static void
+g_main_context_remove_poll_unlocked (GMainContext *context,
+				     GPollFD      *fd)
+{
+  GPollRec *pollrec, *lastrec;
+
+  lastrec = NULL;
+  pollrec = context->poll_records;
+
+  while (pollrec)
+    {
+      if (pollrec->fd == fd)
+	{
+	  if (lastrec != NULL)
+	    lastrec->next = pollrec->next;
+	  else
+	    context->poll_records = pollrec->next;
+
+	  g_slice_free (GPollRec, pollrec);
+
+	  context->n_poll_records--;
+	  break;
+	}
+      lastrec = pollrec;
+      pollrec = pollrec->next;
+    }
+
+#ifdef G_THREADS_ENABLED
+  context->poll_changed = TRUE;
+  
+  /* Now wake up the main loop if it is waiting in the poll() */
+  g_main_context_wakeup_unlocked (context);
+#endif
+}
+
+/**
+ * g_source_get_current_time:
+ * @source:  a #GSource
+ * @timeval: #GTimeVal structure in which to store current time.
+ * 
+ * Gets the "current time" to be used when checking 
+ * this source. The advantage of calling this function over
+ * calling g_get_current_time() directly is that when 
+ * checking multiple sources, GLib can cache a single value
+ * instead of having to repeatedly get the system time.
+ **/
+void
+g_source_get_current_time (GSource  *source,
+			   GTimeVal *timeval)
+{
+  GMainContext *context;
+  
+  g_return_if_fail (source->context != NULL);
+ 
+  context = source->context;
+
+  LOCK_CONTEXT (context);
+
+  if (!context->time_is_current)
+    {
+      g_get_current_time (&context->current_time);
+      context->time_is_current = TRUE;
+    }
+  
+  *timeval = context->current_time;
+  
+  UNLOCK_CONTEXT (context);
+}
+
+/**
+ * g_main_context_set_poll_func:
+ * @context: a #GMainContext
+ * @func: the function to call to poll all file descriptors
+ * 
+ * Sets the function to use to handle polling of file descriptors. It
+ * will be used instead of the poll() system call 
+ * (or GLib's replacement function, which is used where 
+ * poll() isn't available).
+ *
+ * This function could possibly be used to integrate the GLib event
+ * loop with an external event loop.
+ **/
+void
+g_main_context_set_poll_func (GMainContext *context,
+			      GPollFunc     func)
+{
+  if (!context)
+    context = g_main_context_default ();
+  
+  g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0);
+
+  LOCK_CONTEXT (context);
+  
+  if (func)
+    context->poll_func = func;
+  else
+    context->poll_func = g_poll;
+
+  UNLOCK_CONTEXT (context);
+}
+
+/**
+ * g_main_context_get_poll_func:
+ * @context: a #GMainContext
+ * 
+ * Gets the poll function set by g_main_context_set_poll_func().
+ * 
+ * Return value: the poll function
+ **/
+GPollFunc
+g_main_context_get_poll_func (GMainContext *context)
+{
+  GPollFunc result;
+  
+  if (!context)
+    context = g_main_context_default ();
+  
+  g_return_val_if_fail (g_atomic_int_get (&context->ref_count) > 0, NULL);
+
+  LOCK_CONTEXT (context);
+  result = context->poll_func;
+  UNLOCK_CONTEXT (context);
+
+  return result;
+}
+
+/* HOLDS: context's lock */
+/* Wake the main loop up from a poll() */
+static void
+g_main_context_wakeup_unlocked (GMainContext *context)
+{
+#ifdef G_THREADS_ENABLED
+  if (g_thread_supported() && context->poll_waiting)
+    {
+      context->poll_waiting = FALSE;
+#ifndef G_OS_WIN32
+      write (context->wake_up_pipe[1], "A", 1);
+#else
+      ReleaseSemaphore (context->wake_up_semaphore, 1, NULL);
+#endif
+    }
+#endif
+}
+
+/**
+ * g_main_context_wakeup:
+ * @context: a #GMainContext
+ * 
+ * If @context is currently waiting in a poll(), interrupt
+ * the poll(), and continue the iteration process.
+ **/
+void
+g_main_context_wakeup (GMainContext *context)
+{
+  if (!context)
+    context = g_main_context_default ();
+  
+  g_return_if_fail (g_atomic_int_get (&context->ref_count) > 0);
+
+  LOCK_CONTEXT (context);
+  g_main_context_wakeup_unlocked (context);
+  UNLOCK_CONTEXT (context);
+}
+
+/**
+ * g_main_context_is_owner:
+ * @context: a #GMainContext
+ * 
+ * Determines whether this thread holds the (recursive)
+ * ownership of this #GMaincontext. This is useful to
+ * know before waiting on another thread that may be
+ * blocking to get ownership of @context.
+ *
+ * Returns: %TRUE if current thread is owner of @context.
+ *
+ * Since: 2.10
+ **/
+gboolean
+g_main_context_is_owner (GMainContext *context)
+{
+  gboolean is_owner;
+
+  if (!context)
+    context = g_main_context_default ();
+
+#ifdef G_THREADS_ENABLED
+  LOCK_CONTEXT (context);
+  is_owner = context->owner == G_THREAD_SELF;
+  UNLOCK_CONTEXT (context);
+#else
+  is_owner = TRUE;
+#endif
+
+  return is_owner;
+}
+
+/* Timeouts */
+
+static void
+g_timeout_set_expiration (GTimeoutSource *timeout_source,
+			  GTimeVal       *current_time)
+{
+  guint seconds = timeout_source->interval / 1000;
+  guint msecs = timeout_source->interval - seconds * 1000;
+
+  timeout_source->expiration.tv_sec = current_time->tv_sec + seconds;
+  timeout_source->expiration.tv_usec = current_time->tv_usec + msecs * 1000;
+  if (timeout_source->expiration.tv_usec >= 1000000)
+    {
+      timeout_source->expiration.tv_usec -= 1000000;
+      timeout_source->expiration.tv_sec++;
+    }
+  if (timer_perturb==-1)
+    {
+      /*
+       * we want a per machine/session unique 'random' value; try the dbus
+       * address first, that has a UUID in it. If there is no dbus, use the
+       * hostname for hashing.
+       */
+      const char *session_bus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS");
+      if (!session_bus_address)
+        session_bus_address = g_getenv ("HOSTNAME");
+      if (session_bus_address)
+        timer_perturb = ABS ((gint) g_str_hash (session_bus_address));
+      else
+        timer_perturb = 0;
+    }
+  if (timeout_source->granularity)
+    {
+      gint remainder;
+      gint gran; /* in usecs */
+      gint perturb;
+
+      gran = timeout_source->granularity * 1000;
+      perturb = timer_perturb % gran;
+      /*
+       * We want to give each machine a per machine pertubation;
+       * shift time back first, and forward later after the rounding
+       */
+
+      timeout_source->expiration.tv_usec -= perturb;
+      if (timeout_source->expiration.tv_usec < 0)
+        {
+          timeout_source->expiration.tv_usec += 1000000;
+          timeout_source->expiration.tv_sec--;
+        }
+
+      remainder = timeout_source->expiration.tv_usec % gran;
+      if (remainder >= gran/4) /* round up */
+        timeout_source->expiration.tv_usec += gran;
+      timeout_source->expiration.tv_usec -= remainder;
+      /* shift back */
+      timeout_source->expiration.tv_usec += perturb;
+
+      /* the rounding may have overflown tv_usec */
+      while (timeout_source->expiration.tv_usec > 1000000)
+        {
+          timeout_source->expiration.tv_usec -= 1000000;
+          timeout_source->expiration.tv_sec++;
+        }
+    }
+}
+
+static gboolean
+g_timeout_prepare (GSource *source,
+		   gint    *timeout)
+{
+  glong sec;
+  glong msec;
+  GTimeVal current_time;
+  
+  GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+
+  g_source_get_current_time (source, &current_time);
+
+  sec = timeout_source->expiration.tv_sec - current_time.tv_sec;
+  msec = (timeout_source->expiration.tv_usec - current_time.tv_usec) / 1000;
+
+  /* We do the following in a rather convoluted fashion to deal with
+   * the fact that we don't have an integral type big enough to hold
+   * the difference of two timevals in millseconds.
+   */
+  if (sec < 0 || (sec == 0 && msec < 0))
+    msec = 0;
+  else
+    {
+      glong interval_sec = timeout_source->interval / 1000;
+      glong interval_msec = timeout_source->interval % 1000;
+
+      if (msec < 0)
+	{
+	  msec += 1000;
+	  sec -= 1;
+	}
+      
+      if (sec > interval_sec ||
+	  (sec == interval_sec && msec > interval_msec))
+	{
+	  /* The system time has been set backwards, so we
+	   * reset the expiration time to now + timeout_source->interval;
+	   * this at least avoids hanging for long periods of time.
+	   */
+	  g_timeout_set_expiration (timeout_source, &current_time);
+	  msec = MIN (G_MAXINT, timeout_source->interval);
+	}
+      else
+	{
+	  msec = MIN (G_MAXINT, (guint)msec + 1000 * (guint)sec);
+	}
+    }
+
+  *timeout = (gint)msec;
+  
+  return msec == 0;
+}
+
+static gboolean 
+g_timeout_check (GSource *source)
+{
+  GTimeVal current_time;
+  GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+
+  g_source_get_current_time (source, &current_time);
+  
+  return ((timeout_source->expiration.tv_sec < current_time.tv_sec) ||
+	  ((timeout_source->expiration.tv_sec == current_time.tv_sec) &&
+	   (timeout_source->expiration.tv_usec <= current_time.tv_usec)));
+}
+
+static gboolean
+g_timeout_dispatch (GSource     *source,
+		    GSourceFunc  callback,
+		    gpointer     user_data)
+{
+  GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+
+  if (!callback)
+    {
+      g_warning ("Timeout source dispatched without callback\n"
+		 "You must call g_source_set_callback().");
+      return FALSE;
+    }
+ 
+  if (callback (user_data))
+    {
+      GTimeVal current_time;
+
+      g_source_get_current_time (source, &current_time);
+      g_timeout_set_expiration (timeout_source, &current_time);
+
+      return TRUE;
+    }
+  else
+    return FALSE;
+}
+
+/**
+ * g_timeout_source_new:
+ * @interval: the timeout interval in milliseconds.
+ * 
+ * Creates a new timeout source.
+ *
+ * The source will not initially be associated with any #GMainContext
+ * and must be added to one with g_source_attach() before it will be
+ * executed.
+ * 
+ * Return value: the newly-created timeout source
+ **/
+GSource *
+g_timeout_source_new (guint interval)
+{
+  GSource *source = g_source_new (&g_timeout_funcs, sizeof (GTimeoutSource));
+  GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+  GTimeVal current_time;
+
+  timeout_source->interval = interval;
+
+  g_get_current_time (&current_time);
+  g_timeout_set_expiration (timeout_source, &current_time);
+  
+  return source;
+}
+
+/**
+ * g_timeout_source_new_seconds:
+ * @interval: the timeout interval in seconds
+ *
+ * Creates a new timeout source.
+ *
+ * The source will not initially be associated with any #GMainContext
+ * and must be added to one with g_source_attach() before it will be
+ * executed.
+ *
+ * The scheduling granularity/accuracy of this timeout source will be
+ * in seconds.
+ *
+ * Return value: the newly-created timeout source
+ *
+ * Since: 2.14	
+ **/
+GSource *
+g_timeout_source_new_seconds (guint interval)
+{
+  GSource *source = g_source_new (&g_timeout_funcs, sizeof (GTimeoutSource));
+  GTimeoutSource *timeout_source = (GTimeoutSource *)source;
+  GTimeVal current_time;
+
+  timeout_source->interval = 1000*interval;
+  timeout_source->granularity = 1000;
+
+  g_get_current_time (&current_time);
+  g_timeout_set_expiration (timeout_source, &current_time);
+
+  return source;
+}
+
+
+/**
+ * g_timeout_add_full:
+ * @priority: the priority of the timeout source. Typically this will be in
+ *            the range between #G_PRIORITY_DEFAULT and #G_PRIORITY_HIGH.
+ * @interval: the time between calls to the function, in milliseconds
+ *             (1/1000ths of a second)
+ * @function: function to call
+ * @data:     data to pass to @function
+ * @notify:   function to call when the timeout is removed, or %NULL
+ * 
+ * Sets a function to be called at regular intervals, with the given
+ * priority.  The function is called repeatedly until it returns
+ * %FALSE, at which point the timeout is automatically destroyed and
+ * the function will not be called again.  The @notify function is
+ * called when the timeout is destroyed.  The first call to the
+ * function will be at the end of the first @interval.
+ *
+ * Note that timeout functions may be delayed, due to the processing of other
+ * event sources. Thus they should not be relied on for precise timing.
+ * After each call to the timeout function, the time of the next
+ * timeout is recalculated based on the current time and the given interval
+ * (it does not try to 'catch up' time lost in delays).
+ *
+ * This internally creates a main loop source using g_timeout_source_new()
+ * and attaches it to the main loop context using g_source_attach(). You can
+ * do these steps manually if you need greater control.
+ * 
+ * Return value: the ID (greater than 0) of the event source.
+ **/
+guint
+g_timeout_add_full (gint           priority,
+		    guint          interval,
+		    GSourceFunc    function,
+		    gpointer       data,
+		    GDestroyNotify notify)
+{
+  GSource *source;
+  guint id;
+  
+  g_return_val_if_fail (function != NULL, 0);
+
+  source = g_timeout_source_new (interval);
+
+  if (priority != G_PRIORITY_DEFAULT)
+    g_source_set_priority (source, priority);
+
+  g_source_set_callback (source, function, data, notify);
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  return id;
+}
+
+/**
+ * g_timeout_add:
+ * @interval: the time between calls to the function, in milliseconds
+ *             (1/1000ths of a second)
+ * @function: function to call
+ * @data:     data to pass to @function
+ * 
+ * Sets a function to be called at regular intervals, with the default
+ * priority, #G_PRIORITY_DEFAULT.  The function is called repeatedly
+ * until it returns %FALSE, at which point the timeout is automatically
+ * destroyed and the function will not be called again.  The first call
+ * to the function will be at the end of the first @interval.
+ *
+ * Note that timeout functions may be delayed, due to the processing of other
+ * event sources. Thus they should not be relied on for precise timing.
+ * After each call to the timeout function, the time of the next
+ * timeout is recalculated based on the current time and the given interval
+ * (it does not try to 'catch up' time lost in delays).
+ *
+ * If you want to have a timer in the "seconds" range and do not care
+ * about the exact time of the first call of the timer, use the
+ * g_timeout_add_seconds() function; this function allows for more
+ * optimizations and more efficient system power usage.
+ *
+ * This internally creates a main loop source using g_timeout_source_new()
+ * and attaches it to the main loop context using g_source_attach(). You can
+ * do these steps manually if you need greater control.
+ * 
+ * Return value: the ID (greater than 0) of the event source.
+ **/
+guint
+g_timeout_add (guint32        interval,
+	       GSourceFunc    function,
+	       gpointer       data)
+{
+  return g_timeout_add_full (G_PRIORITY_DEFAULT, 
+			     interval, function, data, NULL);
+}
+
+/**
+ * g_timeout_add_seconds_full:
+ * @priority: the priority of the timeout source. Typically this will be in
+ *            the range between #G_PRIORITY_DEFAULT and #G_PRIORITY_HIGH.
+ * @interval: the time between calls to the function, in seconds
+ * @function: function to call
+ * @data:     data to pass to @function
+ * @notify:   function to call when the timeout is removed, or %NULL
+ *
+ * Sets a function to be called at regular intervals, with @priority.
+ * The function is called repeatedly until it returns %FALSE, at which
+ * point the timeout is automatically destroyed and the function will
+ * not be called again.
+ *
+ * Unlike g_timeout_add(), this function operates at whole second granularity.
+ * The initial starting point of the timer is determined by the implementation
+ * and the implementation is expected to group multiple timers together so that
+ * they fire all at the same time.
+ * To allow this grouping, the @interval to the first timer is rounded
+ * and can deviate up to one second from the specified interval.
+ * Subsequent timer iterations will generally run at the specified interval.
+ *
+ * Note that timeout functions may be delayed, due to the processing of other
+ * event sources. Thus they should not be relied on for precise timing.
+ * After each call to the timeout function, the time of the next
+ * timeout is recalculated based on the current time and the given @interval
+ *
+ * If you want timing more precise than whole seconds, use g_timeout_add()
+ * instead.
+ *
+ * The grouping of timers to fire at the same time results in a more power
+ * and CPU efficient behavior so if your timer is in multiples of seconds
+ * and you don't require the first timer exactly one second from now, the
+ * use of g_timeout_add_seconds() is preferred over g_timeout_add().
+ *
+ * This internally creates a main loop source using 
+ * g_timeout_source_new_seconds() and attaches it to the main loop context 
+ * using g_source_attach(). You can do these steps manually if you need 
+ * greater control.
+ * 
+ * Return value: the ID (greater than 0) of the event source.
+ *
+ * Since: 2.14
+ **/
+guint
+g_timeout_add_seconds_full (gint           priority,
+                            guint32        interval,
+                            GSourceFunc    function,
+                            gpointer       data,
+                            GDestroyNotify notify)
+{
+  GSource *source;
+  guint id;
+
+  g_return_val_if_fail (function != NULL, 0);
+
+  source = g_timeout_source_new_seconds (interval);
+
+  if (priority != G_PRIORITY_DEFAULT)
+    g_source_set_priority (source, priority);
+
+  g_source_set_callback (source, function, data, notify);
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  return id;
+}
+
+/**
+ * g_timeout_add_seconds:
+ * @interval: the time between calls to the function, in seconds
+ * @function: function to call
+ * @data: data to pass to @function
+ *
+ * Sets a function to be called at regular intervals with the default
+ * priority, #G_PRIORITY_DEFAULT. The function is called repeatedly until
+ * it returns %FALSE, at which point the timeout is automatically destroyed
+ * and the function will not be called again.
+ *
+ * This internally creates a main loop source using 
+ * g_timeout_source_new_seconds() and attaches it to the main loop context 
+ * using g_source_attach(). You can do these steps manually if you need 
+ * greater control. Also see g_timout_add_seconds_full().
+ * 
+ * Return value: the ID (greater than 0) of the event source.
+ *
+ * Since: 2.14
+ **/
+guint
+g_timeout_add_seconds (guint       interval,
+                       GSourceFunc function,
+                       gpointer    data)
+{
+  g_return_val_if_fail (function != NULL, 0);
+
+  return g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, interval, function, data, NULL);
+}
+
+/* Child watch functions */
+
+#ifdef G_OS_WIN32
+
+static gboolean
+g_child_watch_prepare (GSource *source,
+		       gint    *timeout)
+{
+  *timeout = -1;
+  return FALSE;
+}
+
+
+static gboolean 
+g_child_watch_check (GSource  *source)
+{
+  GChildWatchSource *child_watch_source;
+  gboolean child_exited;
+
+  child_watch_source = (GChildWatchSource *) source;
+
+  child_exited = child_watch_source->poll.revents & G_IO_IN;
+
+  if (child_exited)
+    {
+      DWORD child_status;
+
+      /*
+       * Note: We do _not_ check for the special value of STILL_ACTIVE
+       * since we know that the process has exited and doing so runs into
+       * problems if the child process "happens to return STILL_ACTIVE(259)"
+       * as Microsoft's Platform SDK puts it.
+       */
+      if (!GetExitCodeProcess (child_watch_source->pid, &child_status))
+        {
+	  gchar *emsg = g_win32_error_message (GetLastError ());
+	  g_warning (G_STRLOC ": GetExitCodeProcess() failed: %s", emsg);
+	  g_free (emsg);
+
+	  child_watch_source->child_status = -1;
+	}
+      else
+	child_watch_source->child_status = child_status;
+    }
+
+  return child_exited;
+}
+
+#else /* G_OS_WIN32 */
+
+static gboolean
+check_for_child_exited (GSource *source)
+{
+  GChildWatchSource *child_watch_source;
+  gint count;
+
+  /* protect against another SIGCHLD in the middle of this call */
+  count = child_watch_count;
+
+  child_watch_source = (GChildWatchSource *) source;
+
+  if (child_watch_source->child_exited)
+    return TRUE;
+
+  if (child_watch_source->count < count)
+    {
+      gint child_status;
+
+      if (waitpid (child_watch_source->pid, &child_status, WNOHANG) > 0)
+	{
+	  child_watch_source->child_status = child_status;
+	  child_watch_source->child_exited = TRUE;
+	}
+      child_watch_source->count = count;
+    }
+
+  return child_watch_source->child_exited;
+}
+
+static gboolean
+g_child_watch_prepare (GSource *source,
+		       gint    *timeout)
+{
+  *timeout = -1;
+
+  return check_for_child_exited (source);
+}
+
+
+static gboolean 
+g_child_watch_check (GSource  *source)
+{
+  return check_for_child_exited (source);
+}
+
+#endif /* G_OS_WIN32 */
+
+static gboolean
+g_child_watch_dispatch (GSource    *source, 
+			GSourceFunc callback,
+			gpointer    user_data)
+{
+  GChildWatchSource *child_watch_source;
+  GChildWatchFunc child_watch_callback = (GChildWatchFunc) callback;
+
+  child_watch_source = (GChildWatchSource *) source;
+
+  if (!callback)
+    {
+      g_warning ("Child watch source dispatched without callback\n"
+		 "You must call g_source_set_callback().");
+      return FALSE;
+    }
+
+  (child_watch_callback) (child_watch_source->pid, child_watch_source->child_status, user_data);
+
+  /* We never keep a child watch source around as the child is gone */
+  return FALSE;
+}
+
+#ifndef G_OS_WIN32
+
+static void
+g_child_watch_signal_handler (int signum)
+{
+  child_watch_count ++;
+
+  if (child_watch_init_state == CHILD_WATCH_INITIALIZED_THREADED)
+    {
+      write (child_watch_wake_up_pipe[1], "B", 1);
+    }
+  else
+    {
+      /* We count on the signal interrupting the poll in the same thread.
+       */
+    }
+}
+ 
+static void
+g_child_watch_source_init_single (void)
+{
+  struct sigaction action;
+
+  g_assert (! g_thread_supported());
+  g_assert (child_watch_init_state == CHILD_WATCH_UNINITIALIZED);
+
+  child_watch_init_state = CHILD_WATCH_INITIALIZED_SINGLE;
+
+  action.sa_handler = g_child_watch_signal_handler;
+  sigemptyset (&action.sa_mask);
+  action.sa_flags = SA_NOCLDSTOP;
+  sigaction (SIGCHLD, &action, NULL);
+}
+
+#ifdef ANDROID_STUB
+G_GNUC_NORETURN static gpointer
+#else
+void
+#endif
+child_watch_helper_thread (gpointer data) 
+{
+  while (1)
+    {
+      gchar b[20];
+      GSList *list;
+
+      read (child_watch_wake_up_pipe[0], b, 20);
+
+      /* We were woken up.  Wake up all other contexts in all other threads */
+      G_LOCK (main_context_list);
+      for (list = main_context_list; list; list = list->next)
+	{
+	  GMainContext *context;
+
+	  context = list->data;
+	  if (g_atomic_int_get (&context->ref_count) > 0)
+	    /* Due to racing conditions we can find ref_count == 0, in
+	     * that case, however, the context is still not destroyed
+	     * and no poll can be active, otherwise the ref_count
+	     * wouldn't be 0 */
+	    g_main_context_wakeup (context);
+	}
+      G_UNLOCK (main_context_list);
+    }
+}
+
+static void
+g_child_watch_source_init_multi_threaded (void)
+{
+  GError *error = NULL;
+  struct sigaction action;
+
+  g_assert (g_thread_supported());
+
+  if (pipe (child_watch_wake_up_pipe) < 0)
+    g_error ("Cannot create wake up pipe: %s\n", g_strerror (errno));
+  fcntl (child_watch_wake_up_pipe[1], F_SETFL, O_NONBLOCK | fcntl (child_watch_wake_up_pipe[1], F_GETFL));
+
+  /* We create a helper thread that polls on the wakeup pipe indefinitely */
+  /* FIXME: Think this through for races */
+  if (g_thread_create (child_watch_helper_thread, NULL, FALSE, &error) == NULL)
+    g_error ("Cannot create a thread to monitor child exit status: %s\n", error->message);
+  child_watch_init_state = CHILD_WATCH_INITIALIZED_THREADED;
+ 
+  action.sa_handler = g_child_watch_signal_handler;
+  sigemptyset (&action.sa_mask);
+  action.sa_flags = SA_RESTART | SA_NOCLDSTOP;
+  sigaction (SIGCHLD, &action, NULL);
+}
+
+static void
+g_child_watch_source_init_promote_single_to_threaded (void)
+{
+  g_child_watch_source_init_multi_threaded ();
+}
+
+static void
+g_child_watch_source_init (void)
+{
+  if (g_thread_supported())
+    {
+      if (child_watch_init_state == CHILD_WATCH_UNINITIALIZED)
+	g_child_watch_source_init_multi_threaded ();
+      else if (child_watch_init_state == CHILD_WATCH_INITIALIZED_SINGLE)
+	g_child_watch_source_init_promote_single_to_threaded ();
+    }
+  else
+    {
+      if (child_watch_init_state == CHILD_WATCH_UNINITIALIZED)
+	g_child_watch_source_init_single ();
+    }
+}
+
+#endif /* !G_OS_WIN32 */
+
+/**
+ * g_child_watch_source_new:
+ * @pid: process to watch. On POSIX the pid of a child process. On
+ * Windows a handle for a process (which doesn't have to be a child).
+ * 
+ * Creates a new child_watch source.
+ *
+ * The source will not initially be associated with any #GMainContext
+ * and must be added to one with g_source_attach() before it will be
+ * executed.
+ * 
+ * Note that child watch sources can only be used in conjunction with
+ * <literal>g_spawn...</literal> when the %G_SPAWN_DO_NOT_REAP_CHILD
+ * flag is used.
+ *
+ * Note that on platforms where #GPid must be explicitly closed
+ * (see g_spawn_close_pid()) @pid must not be closed while the
+ * source is still active. Typically, you will want to call
+ * g_spawn_close_pid() in the callback function for the source.
+ *
+ * Note further that using g_child_watch_source_new() is not 
+ * compatible with calling <literal>waitpid(-1)</literal> in 
+ * the application. Calling waitpid() for individual pids will
+ * still work fine. 
+ * 
+ * Return value: the newly-created child watch source
+ *
+ * Since: 2.4
+ **/
+GSource *
+g_child_watch_source_new (GPid pid)
+{
+  GSource *source = g_source_new (&g_child_watch_funcs, sizeof (GChildWatchSource));
+  GChildWatchSource *child_watch_source = (GChildWatchSource *)source;
+
+#ifdef G_OS_WIN32
+  child_watch_source->poll.fd = (gintptr) pid;
+  child_watch_source->poll.events = G_IO_IN;
+
+  g_source_add_poll (source, &child_watch_source->poll);
+#else /* G_OS_WIN32 */
+  g_child_watch_source_init ();
+#endif /* G_OS_WIN32 */
+
+  child_watch_source->pid = pid;
+
+  return source;
+}
+
+/**
+ * g_child_watch_add_full:
+ * @priority: the priority of the idle source. Typically this will be in the
+ *            range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE.
+ * @pid:      process to watch. On POSIX the pid of a child process. On
+ * Windows a handle for a process (which doesn't have to be a child).
+ * @function: function to call
+ * @data:     data to pass to @function
+ * @notify:   function to call when the idle is removed, or %NULL
+ * 
+ * Sets a function to be called when the child indicated by @pid 
+ * exits, at the priority @priority.
+ *
+ * If you obtain @pid from g_spawn_async() or g_spawn_async_with_pipes() 
+ * you will need to pass #G_SPAWN_DO_NOT_REAP_CHILD as flag to 
+ * the spawn function for the child watching to work.
+ * 
+ * Note that on platforms where #GPid must be explicitly closed
+ * (see g_spawn_close_pid()) @pid must not be closed while the
+ * source is still active. Typically, you will want to call
+ * g_spawn_close_pid() in the callback function for the source.
+ * 
+ * GLib supports only a single callback per process id.
+ *
+ * This internally creates a main loop source using 
+ * g_child_watch_source_new() and attaches it to the main loop context 
+ * using g_source_attach(). You can do these steps manually if you 
+ * need greater control.
+ *
+ * Return value: the ID (greater than 0) of the event source.
+ *
+ * Since: 2.4
+ **/
+guint
+g_child_watch_add_full (gint            priority,
+			GPid            pid,
+			GChildWatchFunc function,
+			gpointer        data,
+			GDestroyNotify  notify)
+{
+  GSource *source;
+  guint id;
+  
+  g_return_val_if_fail (function != NULL, 0);
+
+  source = g_child_watch_source_new (pid);
+
+  if (priority != G_PRIORITY_DEFAULT)
+    g_source_set_priority (source, priority);
+
+  g_source_set_callback (source, (GSourceFunc) function, data, notify);
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  return id;
+}
+
+/**
+ * g_child_watch_add:
+ * @pid:      process id to watch. On POSIX the pid of a child process. On
+ * Windows a handle for a process (which doesn't have to be a child).
+ * @function: function to call
+ * @data:     data to pass to @function
+ * 
+ * Sets a function to be called when the child indicated by @pid 
+ * exits, at a default priority, #G_PRIORITY_DEFAULT.
+ * 
+ * If you obtain @pid from g_spawn_async() or g_spawn_async_with_pipes() 
+ * you will need to pass #G_SPAWN_DO_NOT_REAP_CHILD as flag to 
+ * the spawn function for the child watching to work.
+ * 
+ * Note that on platforms where #GPid must be explicitly closed
+ * (see g_spawn_close_pid()) @pid must not be closed while the
+ * source is still active. Typically, you will want to call
+ * g_spawn_close_pid() in the callback function for the source.
+ *
+ * GLib supports only a single callback per process id.
+ *
+ * This internally creates a main loop source using 
+ * g_child_watch_source_new() and attaches it to the main loop context 
+ * using g_source_attach(). You can do these steps manually if you 
+ * need greater control.
+ *
+ * Return value: the ID (greater than 0) of the event source.
+ *
+ * Since: 2.4
+ **/
+guint 
+g_child_watch_add (GPid            pid,
+		   GChildWatchFunc function,
+		   gpointer        data)
+{
+  return g_child_watch_add_full (G_PRIORITY_DEFAULT, pid, function, data, NULL);
+}
+
+
+/* Idle functions */
+
+static gboolean 
+g_idle_prepare  (GSource  *source,
+		 gint     *timeout)
+{
+  *timeout = 0;
+
+  return TRUE;
+}
+
+static gboolean 
+g_idle_check    (GSource  *source)
+{
+  return TRUE;
+}
+
+static gboolean
+g_idle_dispatch (GSource    *source, 
+		 GSourceFunc callback,
+		 gpointer    user_data)
+{
+  if (!callback)
+    {
+      g_warning ("Idle source dispatched without callback\n"
+		 "You must call g_source_set_callback().");
+      return FALSE;
+    }
+  
+  return callback (user_data);
+}
+
+/**
+ * g_idle_source_new:
+ * 
+ * Creates a new idle source.
+ *
+ * The source will not initially be associated with any #GMainContext
+ * and must be added to one with g_source_attach() before it will be
+ * executed. Note that the default priority for idle sources is
+ * %G_PRIORITY_DEFAULT_IDLE, as compared to other sources which
+ * have a default priority of %G_PRIORITY_DEFAULT.
+ * 
+ * Return value: the newly-created idle source
+ **/
+GSource *
+g_idle_source_new (void)
+{
+  GSource *source;
+
+  source = g_source_new (&g_idle_funcs, sizeof (GSource));
+  g_source_set_priority (source, G_PRIORITY_DEFAULT_IDLE);
+
+  return source;
+}
+
+/**
+ * g_idle_add_full:
+ * @priority: the priority of the idle source. Typically this will be in the
+ *            range between #G_PRIORITY_DEFAULT_IDLE and #G_PRIORITY_HIGH_IDLE.
+ * @function: function to call
+ * @data:     data to pass to @function
+ * @notify:   function to call when the idle is removed, or %NULL
+ * 
+ * Adds a function to be called whenever there are no higher priority
+ * events pending.  If the function returns %FALSE it is automatically
+ * removed from the list of event sources and will not be called again.
+ * 
+ * This internally creates a main loop source using g_idle_source_new()
+ * and attaches it to the main loop context using g_source_attach(). 
+ * You can do these steps manually if you need greater control.
+ * 
+ * Return value: the ID (greater than 0) of the event source.
+ **/
+guint 
+g_idle_add_full (gint           priority,
+		 GSourceFunc    function,
+		 gpointer       data,
+		 GDestroyNotify notify)
+{
+  GSource *source;
+  guint id;
+  
+  g_return_val_if_fail (function != NULL, 0);
+
+  source = g_idle_source_new ();
+
+  if (priority != G_PRIORITY_DEFAULT_IDLE)
+    g_source_set_priority (source, priority);
+
+  g_source_set_callback (source, function, data, notify);
+  id = g_source_attach (source, NULL);
+  g_source_unref (source);
+
+  return id;
+}
+
+/**
+ * g_idle_add:
+ * @function: function to call 
+ * @data: data to pass to @function.
+ * 
+ * Adds a function to be called whenever there are no higher priority
+ * events pending to the default main loop. The function is given the
+ * default idle priority, #G_PRIORITY_DEFAULT_IDLE.  If the function
+ * returns %FALSE it is automatically removed from the list of event
+ * sources and will not be called again.
+ * 
+ * This internally creates a main loop source using g_idle_source_new()
+ * and attaches it to the main loop context using g_source_attach(). 
+ * You can do these steps manually if you need greater control.
+ * 
+ * Return value: the ID (greater than 0) of the event source.
+ **/
+guint 
+g_idle_add (GSourceFunc    function,
+	    gpointer       data)
+{
+  return g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, function, data, NULL);
+}
+
+/**
+ * g_idle_remove_by_data:
+ * @data: the data for the idle source's callback.
+ * 
+ * Removes the idle function with the given data.
+ * 
+ * Return value: %TRUE if an idle source was found and removed.
+ **/
+gboolean
+g_idle_remove_by_data (gpointer data)
+{
+  return g_source_remove_by_funcs_user_data (&g_idle_funcs, data);
+}
+
+#define __G_MAIN_C__
+#include "galiasdef.c"
diff --git a/glib/gmain.h b/glib/gmain.h
new file mode 100644
index 0000000..3f0e9cd
--- /dev/null
+++ b/glib/gmain.h
@@ -0,0 +1,299 @@
+/* gmain.h - the GLib Main loop
+ * Copyright (C) 1998-2000 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_MAIN_H__
+#define __G_MAIN_H__
+
+#include <glib/gpoll.h>
+#include <glib/gslist.h>
+#include <glib/gthread.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GMainContext	        GMainContext;	/* Opaque */
+typedef struct _GMainLoop	        GMainLoop;	/* Opaque */
+typedef struct _GSource	                GSource;
+typedef struct _GSourceCallbackFuncs	GSourceCallbackFuncs;
+typedef struct _GSourceFuncs	        GSourceFuncs;
+
+typedef gboolean (*GSourceFunc)       (gpointer data);
+typedef void     (*GChildWatchFunc)   (GPid     pid,
+				       gint     status,
+				       gpointer data);
+struct _GSource
+{
+  /*< private >*/
+  gpointer callback_data;
+  GSourceCallbackFuncs *callback_funcs;
+
+  GSourceFuncs *source_funcs;
+  guint ref_count;
+
+  GMainContext *context;
+
+  gint priority;
+  guint flags;
+  guint source_id;
+
+  GSList *poll_fds;
+  
+  GSource *prev;
+  GSource *next;
+
+  gpointer reserved1;
+  gpointer reserved2;
+};
+
+struct _GSourceCallbackFuncs
+{
+  void (*ref)   (gpointer     cb_data);
+  void (*unref) (gpointer     cb_data);
+  void (*get)   (gpointer     cb_data,
+		 GSource     *source, 
+		 GSourceFunc *func,
+		 gpointer    *data);
+};
+
+typedef void (*GSourceDummyMarshal) (void);
+
+struct _GSourceFuncs
+{
+  gboolean (*prepare)  (GSource    *source,
+			gint       *timeout_);
+  gboolean (*check)    (GSource    *source);
+  gboolean (*dispatch) (GSource    *source,
+			GSourceFunc callback,
+			gpointer    user_data);
+  void     (*finalize) (GSource    *source); /* Can be NULL */
+
+  /* For use by g_source_set_closure */
+  GSourceFunc     closure_callback;	   
+  GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */
+};
+
+/* Standard priorities */
+
+#define G_PRIORITY_HIGH            -100
+#define G_PRIORITY_DEFAULT          0
+#define G_PRIORITY_HIGH_IDLE        100
+#define G_PRIORITY_DEFAULT_IDLE     200
+#define G_PRIORITY_LOW	            300
+
+/* GMainContext: */
+
+GMainContext *g_main_context_new       (void);
+GMainContext *g_main_context_ref       (GMainContext *context);
+void          g_main_context_unref     (GMainContext *context);
+GMainContext *g_main_context_default   (void);
+
+gboolean      g_main_context_iteration (GMainContext *context,
+					gboolean      may_block);
+gboolean      g_main_context_pending   (GMainContext *context);
+
+/* For implementation of legacy interfaces
+ */
+GSource      *g_main_context_find_source_by_id              (GMainContext *context,
+							     guint         source_id);
+GSource      *g_main_context_find_source_by_user_data       (GMainContext *context,
+							     gpointer      user_data);
+GSource      *g_main_context_find_source_by_funcs_user_data (GMainContext *context,
+ 							     GSourceFuncs *funcs,
+							     gpointer      user_data);
+
+/* Low level functions for implementing custom main loops.
+ */
+void     g_main_context_wakeup  (GMainContext *context);
+gboolean g_main_context_acquire (GMainContext *context);
+void     g_main_context_release (GMainContext *context);
+gboolean g_main_context_is_owner (GMainContext *context);
+gboolean g_main_context_wait    (GMainContext *context,
+				 GCond        *cond,
+				 GMutex       *mutex);
+
+gboolean g_main_context_prepare  (GMainContext *context,
+				  gint         *priority);
+gint     g_main_context_query    (GMainContext *context,
+				  gint          max_priority,
+				  gint         *timeout_,
+				  GPollFD      *fds,
+				  gint          n_fds);
+gint     g_main_context_check    (GMainContext *context,
+				  gint          max_priority,
+				  GPollFD      *fds,
+				  gint          n_fds);
+void     g_main_context_dispatch (GMainContext *context);
+
+void     g_main_context_set_poll_func (GMainContext *context,
+				       GPollFunc     func);
+GPollFunc g_main_context_get_poll_func (GMainContext *context);
+
+/* Low level functions for use by source implementations
+ */
+void     g_main_context_add_poll    (GMainContext *context,
+				     GPollFD      *fd,
+				     gint          priority);
+void     g_main_context_remove_poll (GMainContext *context,
+				     GPollFD      *fd);
+
+gint     g_main_depth               (void);
+GSource *g_main_current_source      (void);
+
+
+/* GMainLoop: */
+
+GMainLoop *g_main_loop_new        (GMainContext *context,
+			    	   gboolean      is_running);
+void       g_main_loop_run        (GMainLoop    *loop);
+void       g_main_loop_quit       (GMainLoop    *loop);
+GMainLoop *g_main_loop_ref        (GMainLoop    *loop);
+void       g_main_loop_unref      (GMainLoop    *loop);
+gboolean   g_main_loop_is_running (GMainLoop    *loop);
+GMainContext *g_main_loop_get_context (GMainLoop    *loop);
+
+/* GSource: */
+
+GSource *g_source_new             (GSourceFuncs   *source_funcs,
+				   guint           struct_size);
+GSource *g_source_ref             (GSource        *source);
+void     g_source_unref           (GSource        *source);
+
+guint    g_source_attach          (GSource        *source,
+				   GMainContext   *context);
+void     g_source_destroy         (GSource        *source);
+
+void     g_source_set_priority    (GSource        *source,
+				   gint            priority);
+gint     g_source_get_priority    (GSource        *source);
+void     g_source_set_can_recurse (GSource        *source,
+				   gboolean        can_recurse);
+gboolean g_source_get_can_recurse (GSource        *source);
+guint    g_source_get_id          (GSource        *source);
+
+GMainContext *g_source_get_context (GSource       *source);
+
+void     g_source_set_callback    (GSource        *source,
+				   GSourceFunc     func,
+				   gpointer        data,
+				   GDestroyNotify  notify);
+
+void     g_source_set_funcs       (GSource        *source,
+                                   GSourceFuncs   *funcs);
+gboolean g_source_is_destroyed    (GSource        *source);
+
+/* Used to implement g_source_connect_closure and internally*/
+void g_source_set_callback_indirect (GSource              *source,
+				     gpointer              callback_data,
+				     GSourceCallbackFuncs *callback_funcs);
+
+void     g_source_add_poll         (GSource        *source,
+				    GPollFD        *fd);
+void     g_source_remove_poll      (GSource        *source,
+				    GPollFD        *fd);
+
+void     g_source_get_current_time (GSource        *source,
+				    GTimeVal       *timeval);
+
+ /* void g_source_connect_closure (GSource        *source,
+                                  GClosure       *closure);
+ */
+
+/* Specific source types
+ */
+GSource *g_idle_source_new        (void);
+GSource *g_child_watch_source_new (GPid pid);
+GSource *g_timeout_source_new     (guint interval);
+GSource *g_timeout_source_new_seconds (guint interval);
+
+/* Miscellaneous functions
+ */
+void g_get_current_time		        (GTimeVal	*result);
+
+/* ============== Compat main loop stuff ================== */
+
+#ifndef G_DISABLE_DEPRECATED
+
+/* Legacy names for GMainLoop functions
+ */
+#define 	g_main_new(is_running)	g_main_loop_new (NULL, is_running);
+#define         g_main_run(loop)        g_main_loop_run(loop)
+#define         g_main_quit(loop)       g_main_loop_quit(loop)
+#define         g_main_destroy(loop)    g_main_loop_unref(loop)
+#define         g_main_is_running(loop) g_main_loop_is_running(loop)
+
+/* Functions to manipulate the default main loop
+ */
+
+#define	g_main_iteration(may_block) g_main_context_iteration      (NULL, may_block)
+#define g_main_pending()            g_main_context_pending        (NULL)
+
+#define g_main_set_poll_func(func)   g_main_context_set_poll_func (NULL, func)
+
+#endif /* G_DISABLE_DEPRECATED */
+
+/* Source manipulation by ID */
+gboolean g_source_remove                     (guint          tag);
+gboolean g_source_remove_by_user_data        (gpointer       user_data);
+gboolean g_source_remove_by_funcs_user_data  (GSourceFuncs  *funcs,
+					      gpointer       user_data);
+
+/* Idles, child watchers and timeouts */
+guint    g_timeout_add_full         (gint            priority,
+				     guint           interval,
+				     GSourceFunc     function,
+				     gpointer        data,
+				     GDestroyNotify  notify);
+guint    g_timeout_add              (guint           interval,
+				     GSourceFunc     function,
+				     gpointer        data);
+guint    g_timeout_add_seconds_full (gint            priority,
+                                     guint           interval,
+                                     GSourceFunc     function,
+                                     gpointer        data,
+                                     GDestroyNotify  notify);
+guint    g_timeout_add_seconds      (guint           interval,
+				     GSourceFunc     function,
+				     gpointer        data);
+guint    g_child_watch_add_full     (gint            priority,
+				     GPid            pid,
+				     GChildWatchFunc function,
+				     gpointer        data,
+				     GDestroyNotify  notify);
+guint    g_child_watch_add          (GPid            pid,
+				     GChildWatchFunc function,
+				     gpointer        data);
+guint    g_idle_add                 (GSourceFunc     function,
+				     gpointer        data);
+guint    g_idle_add_full            (gint            priority,
+				     GSourceFunc     function,
+				     gpointer        data,
+				     GDestroyNotify  notify);
+gboolean g_idle_remove_by_data      (gpointer        data);
+
+/* Hook for GClosure / GSource integration. Don't touch */
+GLIB_VAR GSourceFuncs g_timeout_funcs;
+GLIB_VAR GSourceFuncs g_child_watch_funcs;
+GLIB_VAR GSourceFuncs g_idle_funcs;
+
+G_END_DECLS
+
+#endif /* __G_MAIN_H__ */
diff --git a/glib/gmappedfile.h b/glib/gmappedfile.h
new file mode 100644
index 0000000..d27c4aa
--- /dev/null
+++ b/glib/gmappedfile.h
@@ -0,0 +1,44 @@
+/* GLIB - Library of useful routines for C programming
+ * gmappedfile.h: Simplified wrapper around the mmap function
+ *
+ * Copyright 2005 Matthias Clasen
+ *
+ * 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 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_MAPPED_FILE_H__
+#define __G_MAPPED_FILE_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GMappedFile GMappedFile;
+
+GMappedFile *g_mapped_file_new          (const gchar  *filename,
+				         gboolean      writable,
+				         GError      **error) G_GNUC_MALLOC;
+gsize        g_mapped_file_get_length   (GMappedFile  *file);
+gchar       *g_mapped_file_get_contents (GMappedFile  *file);
+void         g_mapped_file_free         (GMappedFile  *file);
+
+G_END_DECLS
+
+#endif /* __G_MAPPED_FILE_H__ */
diff --git a/glib/gmarkup.h b/glib/gmarkup.h
new file mode 100644
index 0000000..d5fb158
--- /dev/null
+++ b/glib/gmarkup.h
@@ -0,0 +1,163 @@
+/* gmarkup.h - Simple XML-like string parser/writer
+ *
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_MARKUP_H__
+#define __G_MARKUP_H__
+
+#include <stdarg.h>
+
+#include <glib/gerror.h>
+#include <glib/gslist.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+  G_MARKUP_ERROR_BAD_UTF8,
+  G_MARKUP_ERROR_EMPTY,
+  G_MARKUP_ERROR_PARSE,
+  /* The following are primarily intended for specific GMarkupParser
+   * implementations to set.
+   */
+  G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+  G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
+  G_MARKUP_ERROR_INVALID_CONTENT,
+  G_MARKUP_ERROR_MISSING_ATTRIBUTE
+} GMarkupError;
+
+#define G_MARKUP_ERROR g_markup_error_quark ()
+
+GQuark g_markup_error_quark (void);
+
+typedef enum
+{
+  G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
+  G_MARKUP_TREAT_CDATA_AS_TEXT              = 1 << 1,
+  G_MARKUP_PREFIX_ERROR_POSITION            = 1 << 2
+} GMarkupParseFlags;
+
+typedef struct _GMarkupParseContext GMarkupParseContext;
+typedef struct _GMarkupParser GMarkupParser;
+
+struct _GMarkupParser
+{
+  /* Called for open tags <foo bar="baz"> */
+  void (*start_element)  (GMarkupParseContext *context,
+                          const gchar         *element_name,
+                          const gchar        **attribute_names,
+                          const gchar        **attribute_values,
+                          gpointer             user_data,
+                          GError             **error);
+
+  /* Called for close tags </foo> */
+  void (*end_element)    (GMarkupParseContext *context,
+                          const gchar         *element_name,
+                          gpointer             user_data,
+                          GError             **error);
+
+  /* Called for character data */
+  /* text is not nul-terminated */
+  void (*text)           (GMarkupParseContext *context,
+                          const gchar         *text,
+                          gsize                text_len,  
+                          gpointer             user_data,
+                          GError             **error);
+
+  /* Called for strings that should be re-saved verbatim in this same
+   * position, but are not otherwise interpretable.  At the moment
+   * this includes comments and processing instructions.
+   */
+  /* text is not nul-terminated. */
+  void (*passthrough)    (GMarkupParseContext *context,
+                          const gchar         *passthrough_text,
+                          gsize                text_len,  
+                          gpointer             user_data,
+                          GError             **error);
+
+  /* Called on error, including one set by other
+   * methods in the vtable. The GError should not be freed.
+   */
+  void (*error)          (GMarkupParseContext *context,
+                          GError              *error,
+                          gpointer             user_data);
+};
+
+GMarkupParseContext *g_markup_parse_context_new   (const GMarkupParser *parser,
+                                                   GMarkupParseFlags    flags,
+                                                   gpointer             user_data,
+                                                   GDestroyNotify       user_data_dnotify);
+void                 g_markup_parse_context_free  (GMarkupParseContext *context);
+gboolean             g_markup_parse_context_parse (GMarkupParseContext *context,
+                                                   const gchar         *text,
+                                                   gssize               text_len,  
+                                                   GError             **error);
+void                 g_markup_parse_context_push  (GMarkupParseContext *context,
+                                                   GMarkupParser       *parser,
+                                                   gpointer             user_data);
+gpointer             g_markup_parse_context_pop   (GMarkupParseContext *context);
+                                                   
+gboolean             g_markup_parse_context_end_parse (GMarkupParseContext *context,
+                                                       GError             **error);
+G_CONST_RETURN gchar *g_markup_parse_context_get_element (GMarkupParseContext *context);
+G_CONST_RETURN GSList *g_markup_parse_context_get_element_stack (GMarkupParseContext *context);
+
+/* For user-constructed error messages, has no precise semantics */
+void                 g_markup_parse_context_get_position (GMarkupParseContext *context,
+                                                          gint                *line_number,
+                                                          gint                *char_number);
+gpointer             g_markup_parse_context_get_user_data (GMarkupParseContext *context);
+
+/* useful when saving */
+gchar* g_markup_escape_text (const gchar *text,
+                             gssize       length);  
+
+gchar *g_markup_printf_escaped (const char *format,
+				...) G_GNUC_PRINTF (1, 2);
+gchar *g_markup_vprintf_escaped (const char *format,
+				 va_list     args);
+
+typedef enum
+{
+  G_MARKUP_COLLECT_INVALID,
+  G_MARKUP_COLLECT_STRING,
+  G_MARKUP_COLLECT_STRDUP,
+  G_MARKUP_COLLECT_BOOLEAN,
+  G_MARKUP_COLLECT_TRISTATE,
+
+  G_MARKUP_COLLECT_OPTIONAL = (1 << 16)
+} GMarkupCollectType;
+
+
+/* useful from start_element */
+gboolean   g_markup_collect_attributes (const gchar         *element_name,
+                                        const gchar        **attribute_names,
+                                        const gchar        **attribute_values,
+                                        GError             **error,
+                                        GMarkupCollectType   first_type,
+                                        const gchar         *first_attr,
+                                        ...);
+
+G_END_DECLS
+
+#endif /* __G_MARKUP_H__ */
diff --git a/glib/gmem.c b/glib/gmem.c
new file mode 100644
index 0000000..b9ce0a6
--- /dev/null
+++ b/glib/gmem.c
@@ -0,0 +1,730 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include "glib.h"
+#include "gthreadprivate.h"
+#include "galias.h"
+
+#define MEM_PROFILE_TABLE_SIZE 4096
+
+
+/* notes on macros:
+ * having G_DISABLE_CHECKS defined disables use of glib_mem_profiler_table and
+ * g_mem_profile().
+ * REALLOC_0_WORKS is defined if g_realloc (NULL, x) works.
+ * SANE_MALLOC_PROTOS is defined if the systems malloc() and friends functions
+ * match the corresponding GLib prototypes, keep configure.in and gmem.h in sync here.
+ * g_mem_gc_friendly is TRUE, freed memory should be 0-wiped.
+ */
+
+/* --- prototypes --- */
+static gboolean g_mem_initialized = FALSE;
+static void     g_mem_init_nomessage (void);
+
+
+/* --- malloc wrappers --- */
+#ifndef	REALLOC_0_WORKS
+static gpointer
+standard_realloc (gpointer mem,
+		  gsize    n_bytes)
+{
+  if (!mem)
+    return malloc (n_bytes);
+  else
+    return realloc (mem, n_bytes);
+}
+#endif	/* !REALLOC_0_WORKS */
+
+#ifdef SANE_MALLOC_PROTOS
+#  define standard_malloc	malloc
+#  ifdef REALLOC_0_WORKS
+#    define standard_realloc	realloc
+#  endif /* REALLOC_0_WORKS */
+#  define standard_free		free
+#  define standard_calloc	calloc
+#  define standard_try_malloc	malloc
+#  define standard_try_realloc	realloc
+#else	/* !SANE_MALLOC_PROTOS */
+static gpointer
+standard_malloc (gsize n_bytes)
+{
+  return malloc (n_bytes);
+}
+#  ifdef REALLOC_0_WORKS
+static gpointer
+standard_realloc (gpointer mem,
+		  gsize    n_bytes)
+{
+  return realloc (mem, n_bytes);
+}
+#  endif /* REALLOC_0_WORKS */
+static void
+standard_free (gpointer mem)
+{
+  free (mem);
+}
+static gpointer
+standard_calloc (gsize n_blocks,
+		 gsize n_bytes)
+{
+  return calloc (n_blocks, n_bytes);
+}
+#define	standard_try_malloc	standard_malloc
+#define	standard_try_realloc	standard_realloc
+#endif	/* !SANE_MALLOC_PROTOS */
+
+
+/* --- variables --- */
+static GMemVTable glib_mem_vtable = {
+  standard_malloc,
+  standard_realloc,
+  standard_free,
+  standard_calloc,
+  standard_try_malloc,
+  standard_try_realloc,
+};
+
+
+/* --- functions --- */
+gpointer
+g_malloc (gsize n_bytes)
+{
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+  if (G_LIKELY (n_bytes))
+    {
+      gpointer mem;
+
+      mem = glib_mem_vtable.malloc (n_bytes);
+      if (mem)
+	return mem;
+
+      g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes",
+               G_STRLOC, n_bytes);
+    }
+
+  return NULL;
+}
+
+gpointer
+g_malloc0 (gsize n_bytes)
+{
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+  if (G_LIKELY (n_bytes))
+    {
+      gpointer mem;
+
+      mem = glib_mem_vtable.calloc (1, n_bytes);
+      if (mem)
+	return mem;
+
+      g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes",
+               G_STRLOC, n_bytes);
+    }
+
+  return NULL;
+}
+
+gpointer
+g_realloc (gpointer mem,
+	   gsize    n_bytes)
+{
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+  if (G_LIKELY (n_bytes))
+    {
+      mem = glib_mem_vtable.realloc (mem, n_bytes);
+      if (mem)
+	return mem;
+
+      g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes",
+               G_STRLOC, n_bytes);
+    }
+
+  if (mem)
+    glib_mem_vtable.free (mem);
+
+  return NULL;
+}
+
+void
+g_free (gpointer mem)
+{
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+  if (G_LIKELY (mem))
+    glib_mem_vtable.free (mem);
+}
+
+gpointer
+g_try_malloc (gsize n_bytes)
+{
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+  if (G_LIKELY (n_bytes))
+    return glib_mem_vtable.try_malloc (n_bytes);
+  else
+    return NULL;
+}
+
+gpointer
+g_try_malloc0 (gsize n_bytes)
+{ 
+  gpointer mem;
+
+  mem = g_try_malloc (n_bytes);
+  
+  if (mem)
+    memset (mem, 0, n_bytes);
+
+  return mem;
+}
+
+gpointer
+g_try_realloc (gpointer mem,
+	       gsize    n_bytes)
+{
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+  if (G_LIKELY (n_bytes))
+    return glib_mem_vtable.try_realloc (mem, n_bytes);
+
+  if (mem)
+    glib_mem_vtable.free (mem);
+
+  return NULL;
+}
+
+static gpointer
+fallback_calloc (gsize n_blocks,
+		 gsize n_block_bytes)
+{
+  gsize l = n_blocks * n_block_bytes;
+  gpointer mem = glib_mem_vtable.malloc (l);
+
+  if (mem)
+    memset (mem, 0, l);
+
+  return mem;
+}
+
+static gboolean vtable_set = FALSE;
+
+/**
+ * g_mem_is_system_malloc
+ * 
+ * Checks whether the allocator used by g_malloc() is the system's
+ * malloc implementation. If it returns %TRUE memory allocated with
+ * malloc() can be used interchangeable with memory allocated using g_malloc(). 
+ * This function is useful for avoiding an extra copy of allocated memory returned
+ * by a non-GLib-based API.
+ *
+ * A different allocator can be set using g_mem_set_vtable().
+ *
+ * Return value: if %TRUE, malloc() and g_malloc() can be mixed.
+ **/
+gboolean
+g_mem_is_system_malloc (void)
+{
+  return !vtable_set;
+}
+
+void
+g_mem_set_vtable (GMemVTable *vtable)
+{
+  if (!vtable_set)
+    {
+      if (vtable->malloc && vtable->realloc && vtable->free)
+	{
+	  glib_mem_vtable.malloc = vtable->malloc;
+	  glib_mem_vtable.realloc = vtable->realloc;
+	  glib_mem_vtable.free = vtable->free;
+	  glib_mem_vtable.calloc = vtable->calloc ? vtable->calloc : fallback_calloc;
+	  glib_mem_vtable.try_malloc = vtable->try_malloc ? vtable->try_malloc : glib_mem_vtable.malloc;
+	  glib_mem_vtable.try_realloc = vtable->try_realloc ? vtable->try_realloc : glib_mem_vtable.realloc;
+	  vtable_set = TRUE;
+	}
+      else
+	g_warning (G_STRLOC ": memory allocation vtable lacks one of malloc(), realloc() or free()");
+    }
+  else
+    g_warning (G_STRLOC ": memory allocation vtable can only be set once at startup");
+}
+
+
+/* --- memory profiling and checking --- */
+#ifdef	G_DISABLE_CHECKS
+GMemVTable *glib_mem_profiler_table = &glib_mem_vtable;
+void
+g_mem_profile (void)
+{
+}
+#else	/* !G_DISABLE_CHECKS */
+typedef enum {
+  PROFILER_FREE		= 0,
+  PROFILER_ALLOC	= 1,
+  PROFILER_RELOC	= 2,
+  PROFILER_ZINIT	= 4
+} ProfilerJob;
+static guint *profile_data = NULL;
+static gsize profile_allocs = 0;
+static gsize profile_zinit = 0;
+static gsize profile_frees = 0;
+static GMutex *gmem_profile_mutex = NULL;
+#ifdef  G_ENABLE_DEBUG
+static volatile gsize g_trap_free_size = 0;
+static volatile gsize g_trap_realloc_size = 0;
+static volatile gsize g_trap_malloc_size = 0;
+#endif  /* G_ENABLE_DEBUG */
+
+#define	PROFILE_TABLE(f1,f2,f3)   ( ( ((f3) << 2) | ((f2) << 1) | (f1) ) * (MEM_PROFILE_TABLE_SIZE + 1))
+
+static void
+profiler_log (ProfilerJob job,
+	      gsize       n_bytes,
+	      gboolean    success)
+{
+  g_mutex_lock (gmem_profile_mutex);
+  if (!profile_data)
+    {
+      profile_data = standard_calloc ((MEM_PROFILE_TABLE_SIZE + 1) * 8, 
+                                      sizeof (profile_data[0]));
+      if (!profile_data)	/* memory system kiddin' me, eh? */
+	{
+	  g_mutex_unlock (gmem_profile_mutex);
+	  return;
+	}
+    }
+
+  if (n_bytes < MEM_PROFILE_TABLE_SIZE)
+    profile_data[n_bytes + PROFILE_TABLE ((job & PROFILER_ALLOC) != 0,
+                                          (job & PROFILER_RELOC) != 0,
+                                          success != 0)] += 1;
+  else
+    profile_data[MEM_PROFILE_TABLE_SIZE + PROFILE_TABLE ((job & PROFILER_ALLOC) != 0,
+                                                         (job & PROFILER_RELOC) != 0,
+                                                         success != 0)] += 1;
+  if (success)
+    {
+      if (job & PROFILER_ALLOC)
+        {
+          profile_allocs += n_bytes;
+          if (job & PROFILER_ZINIT)
+            profile_zinit += n_bytes;
+        }
+      else
+        profile_frees += n_bytes;
+    }
+  g_mutex_unlock (gmem_profile_mutex);
+}
+
+static void
+profile_print_locked (guint   *local_data,
+		      gboolean success)
+{
+  gboolean need_header = TRUE;
+  guint i;
+
+  for (i = 0; i <= MEM_PROFILE_TABLE_SIZE; i++)
+    {
+      glong t_malloc = local_data[i + PROFILE_TABLE (1, 0, success)];
+      glong t_realloc = local_data[i + PROFILE_TABLE (1, 1, success)];
+      glong t_free = local_data[i + PROFILE_TABLE (0, 0, success)];
+      glong t_refree = local_data[i + PROFILE_TABLE (0, 1, success)];
+      
+      if (!t_malloc && !t_realloc && !t_free && !t_refree)
+	continue;
+      else if (need_header)
+	{
+	  need_header = FALSE;
+	  g_print (" blocks of | allocated  | freed      | allocated  | freed      | n_bytes   \n");
+	  g_print ("  n_bytes  | n_times by | n_times by | n_times by | n_times by | remaining \n");
+	  g_print ("           | malloc()   | free()     | realloc()  | realloc()  |           \n");
+	  g_print ("===========|============|============|============|============|===========\n");
+	}
+      if (i < MEM_PROFILE_TABLE_SIZE)
+	g_print ("%10u | %10ld | %10ld | %10ld | %10ld |%+11ld\n",
+		 i, t_malloc, t_free, t_realloc, t_refree,
+		 (t_malloc - t_free + t_realloc - t_refree) * i);
+      else if (i >= MEM_PROFILE_TABLE_SIZE)
+	g_print ("   >%6u | %10ld | %10ld | %10ld | %10ld |        ***\n",
+		 i, t_malloc, t_free, t_realloc, t_refree);
+    }
+  if (need_header)
+    g_print (" --- none ---\n");
+}
+
+void
+g_mem_profile (void)
+{
+  guint local_data[(MEM_PROFILE_TABLE_SIZE + 1) * 8 * sizeof (profile_data[0])];
+  gsize local_allocs;
+  gsize local_zinit;
+  gsize local_frees;
+
+  if (G_UNLIKELY (!g_mem_initialized))
+    g_mem_init_nomessage();
+
+  g_mutex_lock (gmem_profile_mutex);
+
+  local_allocs = profile_allocs;
+  local_zinit = profile_zinit;
+  local_frees = profile_frees;
+
+  if (!profile_data)
+    {
+      g_mutex_unlock (gmem_profile_mutex);
+      return;
+    }
+
+  memcpy (local_data, profile_data, 
+	  (MEM_PROFILE_TABLE_SIZE + 1) * 8 * sizeof (profile_data[0]));
+  
+  g_mutex_unlock (gmem_profile_mutex);
+
+  g_print ("GLib Memory statistics (successful operations):\n");
+  profile_print_locked (local_data, TRUE);
+  g_print ("GLib Memory statistics (failing operations):\n");
+  profile_print_locked (local_data, FALSE);
+  g_print ("Total bytes: allocated=%"G_GSIZE_FORMAT", "
+           "zero-initialized=%"G_GSIZE_FORMAT" (%.2f%%), "
+           "freed=%"G_GSIZE_FORMAT" (%.2f%%), "
+           "remaining=%"G_GSIZE_FORMAT"\n",
+	   local_allocs,
+	   local_zinit,
+	   ((gdouble) local_zinit) / local_allocs * 100.0,
+	   local_frees,
+	   ((gdouble) local_frees) / local_allocs * 100.0,
+	   local_allocs - local_frees);
+}
+
+static gpointer
+profiler_try_malloc (gsize n_bytes)
+{
+  gsize *p;
+
+#ifdef  G_ENABLE_DEBUG
+  if (g_trap_malloc_size == n_bytes)
+    G_BREAKPOINT ();
+#endif  /* G_ENABLE_DEBUG */
+
+  p = standard_malloc (sizeof (gsize) * 2 + n_bytes);
+
+  if (p)
+    {
+      p[0] = 0;		/* free count */
+      p[1] = n_bytes;	/* length */
+      profiler_log (PROFILER_ALLOC, n_bytes, TRUE);
+      p += 2;
+    }
+  else
+    profiler_log (PROFILER_ALLOC, n_bytes, FALSE);
+  
+  return p;
+}
+
+static gpointer
+profiler_malloc (gsize n_bytes)
+{
+  gpointer mem = profiler_try_malloc (n_bytes);
+
+  if (!mem)
+    g_mem_profile ();
+
+  return mem;
+}
+
+static gpointer
+profiler_calloc (gsize n_blocks,
+		 gsize n_block_bytes)
+{
+  gsize l = n_blocks * n_block_bytes;
+  gsize *p;
+
+#ifdef  G_ENABLE_DEBUG
+  if (g_trap_malloc_size == l)
+    G_BREAKPOINT ();
+#endif  /* G_ENABLE_DEBUG */
+  
+  p = standard_calloc (1, sizeof (gsize) * 2 + l);
+
+  if (p)
+    {
+      p[0] = 0;		/* free count */
+      p[1] = l;		/* length */
+      profiler_log (PROFILER_ALLOC | PROFILER_ZINIT, l, TRUE);
+      p += 2;
+    }
+  else
+    {
+      profiler_log (PROFILER_ALLOC | PROFILER_ZINIT, l, FALSE);
+      g_mem_profile ();
+    }
+
+  return p;
+}
+
+static void
+profiler_free (gpointer mem)
+{
+  gsize *p = mem;
+
+  p -= 2;
+  if (p[0])	/* free count */
+    {
+      g_warning ("free(%p): memory has been freed %"G_GSIZE_FORMAT" times already",
+                 p + 2, p[0]);
+      profiler_log (PROFILER_FREE,
+		    p[1],	/* length */
+		    FALSE);
+    }
+  else
+    {
+#ifdef  G_ENABLE_DEBUG
+      if (g_trap_free_size == p[1])
+	G_BREAKPOINT ();
+#endif  /* G_ENABLE_DEBUG */
+
+      profiler_log (PROFILER_FREE,
+		    p[1],	/* length */
+		    TRUE);
+      memset (p + 2, 0xaa, p[1]);
+
+      /* for all those that miss standard_free (p); in this place, yes,
+       * we do leak all memory when profiling, and that is intentional
+       * to catch double frees. patch submissions are futile.
+       */
+    }
+  p[0] += 1;
+}
+
+static gpointer
+profiler_try_realloc (gpointer mem,
+		      gsize    n_bytes)
+{
+  gsize *p = mem;
+
+  p -= 2;
+
+#ifdef  G_ENABLE_DEBUG
+  if (g_trap_realloc_size == n_bytes)
+    G_BREAKPOINT ();
+#endif  /* G_ENABLE_DEBUG */
+  
+  if (mem && p[0])	/* free count */
+    {
+      g_warning ("realloc(%p, %"G_GSIZE_FORMAT"): "
+                 "memory has been freed %"G_GSIZE_FORMAT" times already",
+                 p + 2, (gsize) n_bytes, p[0]);
+      profiler_log (PROFILER_ALLOC | PROFILER_RELOC, n_bytes, FALSE);
+
+      return NULL;
+    }
+  else
+    {
+      p = standard_realloc (mem ? p : NULL, sizeof (gsize) * 2 + n_bytes);
+
+      if (p)
+	{
+	  if (mem)
+	    profiler_log (PROFILER_FREE | PROFILER_RELOC, p[1], TRUE);
+	  p[0] = 0;
+	  p[1] = n_bytes;
+	  profiler_log (PROFILER_ALLOC | PROFILER_RELOC, p[1], TRUE);
+	  p += 2;
+	}
+      else
+	profiler_log (PROFILER_ALLOC | PROFILER_RELOC, n_bytes, FALSE);
+
+      return p;
+    }
+}
+
+static gpointer
+profiler_realloc (gpointer mem,
+		  gsize    n_bytes)
+{
+  mem = profiler_try_realloc (mem, n_bytes);
+
+  if (!mem)
+    g_mem_profile ();
+
+  return mem;
+}
+
+static GMemVTable profiler_table = {
+  profiler_malloc,
+  profiler_realloc,
+  profiler_free,
+  profiler_calloc,
+  profiler_try_malloc,
+  profiler_try_realloc,
+};
+GMemVTable *glib_mem_profiler_table = &profiler_table;
+
+#endif	/* !G_DISABLE_CHECKS */
+
+/* --- MemChunks --- */
+#ifndef G_ALLOC_AND_FREE
+typedef struct _GAllocator GAllocator;
+typedef struct _GMemChunk  GMemChunk;
+#define G_ALLOC_ONLY	  1
+#define G_ALLOC_AND_FREE  2
+#endif
+
+struct _GMemChunk {
+  guint alloc_size;           /* the size of an atom */
+};
+
+GMemChunk*
+g_mem_chunk_new (const gchar  *name,
+		 gint          atom_size,
+		 gsize         area_size,
+		 gint          type)
+{
+  GMemChunk *mem_chunk;
+  g_return_val_if_fail (atom_size > 0, NULL);
+
+  mem_chunk = g_slice_new (GMemChunk);
+  mem_chunk->alloc_size = atom_size;
+  return mem_chunk;
+}
+
+void
+g_mem_chunk_destroy (GMemChunk *mem_chunk)
+{
+  g_return_if_fail (mem_chunk != NULL);
+  
+  g_slice_free (GMemChunk, mem_chunk);
+}
+
+gpointer
+g_mem_chunk_alloc (GMemChunk *mem_chunk)
+{
+  g_return_val_if_fail (mem_chunk != NULL, NULL);
+  
+  return g_slice_alloc (mem_chunk->alloc_size);
+}
+
+gpointer
+g_mem_chunk_alloc0 (GMemChunk *mem_chunk)
+{
+  g_return_val_if_fail (mem_chunk != NULL, NULL);
+  
+  return g_slice_alloc0 (mem_chunk->alloc_size);
+}
+
+void
+g_mem_chunk_free (GMemChunk *mem_chunk,
+		  gpointer   mem)
+{
+  g_return_if_fail (mem_chunk != NULL);
+  
+  g_slice_free1 (mem_chunk->alloc_size, mem);
+}
+
+void	g_mem_chunk_clean	(GMemChunk *mem_chunk)	{}
+void	g_mem_chunk_reset	(GMemChunk *mem_chunk)	{}
+void	g_mem_chunk_print	(GMemChunk *mem_chunk)	{}
+void	g_mem_chunk_info	(void)			{}
+void	g_blow_chunks		(void)			{}
+
+GAllocator*
+g_allocator_new (const gchar *name,
+		 guint        n_preallocs)
+{
+  static struct _GAllocator {
+    gchar      *name;
+    guint16     n_preallocs;
+    guint       is_unused : 1;
+    guint       type : 4;
+    GAllocator *last;
+    GMemChunk  *mem_chunk;
+    gpointer    free_list;
+  } dummy = {
+    "GAllocator is deprecated", 1, TRUE, 0, NULL, NULL, NULL,
+  };
+  /* some (broken) GAllocator uses depend on non-NULL allocators */
+  return (void*) &dummy;
+}
+
+void
+g_allocator_free (GAllocator *allocator)
+{
+}
+
+#ifdef ENABLE_GC_FRIENDLY_DEFAULT
+gboolean g_mem_gc_friendly = TRUE;
+#else
+gboolean g_mem_gc_friendly = FALSE;
+#endif
+
+static void
+g_mem_init_nomessage (void)
+{
+  gchar buffer[1024];
+  const gchar *val;
+  const GDebugKey keys[] = {
+    { "gc-friendly", 1 },
+  };
+  gint flags;
+  if (g_mem_initialized)
+    return;
+  /* don't use g_malloc/g_message here */
+  val = _g_getenv_nomalloc ("G_DEBUG", buffer);
+  flags = !val ? 0 : g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+  if (flags & 1)        /* gc-friendly */
+    {
+      g_mem_gc_friendly = TRUE;
+    }
+  g_mem_initialized = TRUE;
+}
+
+void
+_g_mem_thread_init_noprivate_nomessage (void)
+{
+  /* we may only create mutexes here, locking/
+   * unlocking a mutex does not yet work.
+   */
+  g_mem_init_nomessage();
+#ifndef G_DISABLE_CHECKS
+  gmem_profile_mutex = g_mutex_new ();
+#endif
+}
+
+#define __G_MEM_C__
+#include "galiasdef.c"
diff --git a/glib/gmem.h b/glib/gmem.h
new file mode 100644
index 0000000..8cb050e
--- /dev/null
+++ b/glib/gmem.h
@@ -0,0 +1,152 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_MEM_H__
+#define __G_MEM_H__
+
+#include <glib/gslice.h>
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GMemVTable GMemVTable;
+
+
+#if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG
+#  define G_MEM_ALIGN	GLIB_SIZEOF_VOID_P
+#else	/* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */
+#  define G_MEM_ALIGN	GLIB_SIZEOF_LONG
+#endif	/* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */
+
+
+/* Memory allocation functions
+ */
+gpointer g_malloc         (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_malloc0        (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_realloc        (gpointer	 mem,
+			   gsize	 n_bytes) G_GNUC_WARN_UNUSED_RESULT;
+void	 g_free	          (gpointer	 mem);
+gpointer g_try_malloc     (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_try_malloc0    (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_try_realloc    (gpointer	 mem,
+			   gsize	 n_bytes) G_GNUC_WARN_UNUSED_RESULT;
+
+
+/* Convenience memory allocators
+ */
+#define g_new(struct_type, n_structs)		\
+    ((struct_type *) g_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
+#define g_new0(struct_type, n_structs)		\
+    ((struct_type *) g_malloc0 (((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
+#define g_renew(struct_type, mem, n_structs)	\
+    ((struct_type *) g_realloc ((mem), ((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
+
+#define g_try_new(struct_type, n_structs)		\
+    ((struct_type *) g_try_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
+#define g_try_new0(struct_type, n_structs)		\
+    ((struct_type *) g_try_malloc0 (((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
+#define g_try_renew(struct_type, mem, n_structs)	\
+    ((struct_type *) g_try_realloc ((mem), ((gsize) sizeof (struct_type)) * ((gsize) (n_structs))))
+
+
+/* Memory allocation virtualization for debugging purposes
+ * g_mem_set_vtable() has to be the very first GLib function called
+ * if being used
+ */
+struct _GMemVTable
+{
+  gpointer (*malloc)      (gsize    n_bytes);
+  gpointer (*realloc)     (gpointer mem,
+			   gsize    n_bytes);
+  void     (*free)        (gpointer mem);
+  /* optional; set to NULL if not used ! */
+  gpointer (*calloc)      (gsize    n_blocks,
+			   gsize    n_block_bytes);
+  gpointer (*try_malloc)  (gsize    n_bytes);
+  gpointer (*try_realloc) (gpointer mem,
+			   gsize    n_bytes);
+};
+void	 g_mem_set_vtable (GMemVTable	*vtable);
+gboolean g_mem_is_system_malloc (void);
+
+GLIB_VAR gboolean g_mem_gc_friendly;
+
+/* Memory profiler and checker, has to be enabled via g_mem_set_vtable()
+ */
+GLIB_VAR GMemVTable	*glib_mem_profiler_table;
+void	g_mem_profile	(void);
+
+
+/* deprecated memchunks and allocators */
+#if !defined (G_DISABLE_DEPRECATED) || defined (GTK_COMPILATION) || defined (GDK_COMPILATION)
+typedef struct _GAllocator GAllocator;
+typedef struct _GMemChunk  GMemChunk;
+#define g_mem_chunk_create(type, pre_alloc, alloc_type)	( \
+  g_mem_chunk_new (#type " mem chunks (" #pre_alloc ")", \
+		   sizeof (type), \
+		   sizeof (type) * (pre_alloc), \
+		   (alloc_type)) \
+)
+#define g_chunk_new(type, chunk)	( \
+  (type *) g_mem_chunk_alloc (chunk) \
+)
+#define g_chunk_new0(type, chunk)	( \
+  (type *) g_mem_chunk_alloc0 (chunk) \
+)
+#define g_chunk_free(mem, mem_chunk)	G_STMT_START { \
+  g_mem_chunk_free ((mem_chunk), (mem)); \
+} G_STMT_END
+#define G_ALLOC_ONLY	  1
+#define G_ALLOC_AND_FREE  2
+GMemChunk* g_mem_chunk_new     (const gchar *name,
+				gint         atom_size,
+				gsize        area_size,
+				gint         type);
+void       g_mem_chunk_destroy (GMemChunk   *mem_chunk);
+gpointer   g_mem_chunk_alloc   (GMemChunk   *mem_chunk);
+gpointer   g_mem_chunk_alloc0  (GMemChunk   *mem_chunk);
+void       g_mem_chunk_free    (GMemChunk   *mem_chunk,
+				gpointer     mem);
+void       g_mem_chunk_clean   (GMemChunk   *mem_chunk);
+void       g_mem_chunk_reset   (GMemChunk   *mem_chunk);
+void       g_mem_chunk_print   (GMemChunk   *mem_chunk);
+void       g_mem_chunk_info    (void);
+void	   g_blow_chunks       (void);
+GAllocator*g_allocator_new     (const gchar  *name,
+				guint         n_preallocs);
+void       g_allocator_free    (GAllocator   *allocator);
+#define	G_ALLOCATOR_LIST       (1)
+#define	G_ALLOCATOR_SLIST      (2)
+#define	G_ALLOCATOR_NODE       (3)
+#endif /* G_DISABLE_DEPRECATED */
+
+G_END_DECLS
+
+#endif /* __G_MEM_H__ */
diff --git a/glib/gmessages.c b/glib/gmessages.c
new file mode 100644
index 0000000..e080ad6
--- /dev/null
+++ b/glib/gmessages.c
@@ -0,0 +1,1123 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <signal.h>
+#include <locale.h>
+#include <errno.h>
+
+#include "glib.h"
+#include "gdebug.h"
+#include "gprintfint.h"
+#include "gthreadprivate.h"
+#include "galias.h"
+
+#ifdef G_OS_WIN32
+#include <process.h>		/* For getpid() */
+#include <io.h>
+#  define STRICT		/* Strict typing, please */
+#  define _WIN32_WINDOWS 0x0401 /* to get IsDebuggerPresent */
+#  include <windows.h>
+#  undef STRICT
+#endif
+
+/* --- structures --- */
+typedef struct _GLogDomain	GLogDomain;
+typedef struct _GLogHandler	GLogHandler;
+struct _GLogDomain
+{
+  gchar		*log_domain;
+  GLogLevelFlags fatal_mask;
+  GLogHandler	*handlers;
+  GLogDomain	*next;
+};
+struct _GLogHandler
+{
+  guint		 id;
+  GLogLevelFlags log_level;
+  GLogFunc	 log_func;
+  gpointer	 data;
+  GLogHandler	*next;
+};
+
+
+/* --- variables --- */
+static GMutex        *g_messages_lock = NULL;
+static GLogDomain    *g_log_domains = NULL;
+static GLogLevelFlags g_log_always_fatal = G_LOG_FATAL_MASK;
+static GPrintFunc     glib_print_func = NULL;
+static GPrintFunc     glib_printerr_func = NULL;
+static GPrivate	     *g_log_depth = NULL;
+static GLogLevelFlags g_log_msg_prefix = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_DEBUG;
+static GLogFunc       default_log_func = g_log_default_handler;
+static gpointer       default_log_data = NULL;
+
+/* --- functions --- */
+#ifdef G_OS_WIN32
+#  define STRICT
+#  include <windows.h>
+#  undef STRICT
+static gboolean win32_keep_fatal_message = FALSE;
+
+/* This default message will usually be overwritten. */
+/* Yes, a fixed size buffer is bad. So sue me. But g_error() is never
+ * called with huge strings, is it?
+ */
+static gchar  fatal_msg_buf[1000] = "Unspecified fatal error encountered, aborting.";
+static gchar *fatal_msg_ptr = fatal_msg_buf;
+
+#undef write
+static inline int
+dowrite (int          fd,
+	 const void  *buf,
+	 unsigned int len)
+{
+  if (win32_keep_fatal_message)
+    {
+      memcpy (fatal_msg_ptr, buf, len);
+      fatal_msg_ptr += len;
+      *fatal_msg_ptr = 0;
+      return len;
+    }
+
+  write (fd, buf, len);
+
+  return len;
+}
+#define write(fd, buf, len) dowrite(fd, buf, len)
+
+#endif
+
+static void
+write_string (int          fd,
+	      const gchar *string)
+{
+  write (fd, string, strlen (string));
+}
+
+static void
+g_messages_prefixed_init (void)
+{
+  static gboolean initialized = FALSE;
+
+  if (!initialized)
+    {
+      const gchar *val;
+
+      initialized = TRUE;
+      val = g_getenv ("G_MESSAGES_PREFIXED");
+      
+      if (val)
+	{
+	  const GDebugKey keys[] = {
+	    { "error", G_LOG_LEVEL_ERROR },
+	    { "critical", G_LOG_LEVEL_CRITICAL },
+	    { "warning", G_LOG_LEVEL_WARNING },
+	    { "message", G_LOG_LEVEL_MESSAGE },
+	    { "info", G_LOG_LEVEL_INFO },
+	    { "debug", G_LOG_LEVEL_DEBUG }
+	  };
+	  
+	  g_log_msg_prefix = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+	}
+    }
+}
+
+static GLogDomain*
+g_log_find_domain_L (const gchar *log_domain)
+{
+  register GLogDomain *domain;
+  
+  domain = g_log_domains;
+  while (domain)
+    {
+      if (strcmp (domain->log_domain, log_domain) == 0)
+	return domain;
+      domain = domain->next;
+    }
+  return NULL;
+}
+
+static GLogDomain*
+g_log_domain_new_L (const gchar *log_domain)
+{
+  register GLogDomain *domain;
+
+  domain = g_new (GLogDomain, 1);
+  domain->log_domain = g_strdup (log_domain);
+  domain->fatal_mask = G_LOG_FATAL_MASK;
+  domain->handlers = NULL;
+  
+  domain->next = g_log_domains;
+  g_log_domains = domain;
+  
+  return domain;
+}
+
+static void
+g_log_domain_check_free_L (GLogDomain *domain)
+{
+  if (domain->fatal_mask == G_LOG_FATAL_MASK &&
+      domain->handlers == NULL)
+    {
+      register GLogDomain *last, *work;
+      
+      last = NULL;  
+
+      work = g_log_domains;
+      while (work)
+	{
+	  if (work == domain)
+	    {
+	      if (last)
+		last->next = domain->next;
+	      else
+		g_log_domains = domain->next;
+	      g_free (domain->log_domain);
+	      g_free (domain);
+	      break;
+	    }
+	  last = work;
+	  work = last->next;
+	}  
+    }
+}
+
+static GLogFunc
+g_log_domain_get_handler_L (GLogDomain	*domain,
+			    GLogLevelFlags log_level,
+			    gpointer	*data)
+{
+  if (domain && log_level)
+    {
+      register GLogHandler *handler;
+      
+      handler = domain->handlers;
+      while (handler)
+	{
+	  if ((handler->log_level & log_level) == log_level)
+	    {
+	      *data = handler->data;
+	      return handler->log_func;
+	    }
+	  handler = handler->next;
+	}
+    }
+
+  *data = default_log_data;
+  return default_log_func;
+}
+
+GLogLevelFlags
+g_log_set_always_fatal (GLogLevelFlags fatal_mask)
+{
+  GLogLevelFlags old_mask;
+
+  /* restrict the global mask to levels that are known to glib
+   * since this setting applies to all domains
+   */
+  fatal_mask &= (1 << G_LOG_LEVEL_USER_SHIFT) - 1;
+  /* force errors to be fatal */
+  fatal_mask |= G_LOG_LEVEL_ERROR;
+  /* remove bogus flag */
+  fatal_mask &= ~G_LOG_FLAG_FATAL;
+
+  g_mutex_lock (g_messages_lock);
+  old_mask = g_log_always_fatal;
+  g_log_always_fatal = fatal_mask;
+  g_mutex_unlock (g_messages_lock);
+
+  return old_mask;
+}
+
+GLogLevelFlags
+g_log_set_fatal_mask (const gchar   *log_domain,
+		      GLogLevelFlags fatal_mask)
+{
+  GLogLevelFlags old_flags;
+  register GLogDomain *domain;
+  
+  if (!log_domain)
+    log_domain = "";
+  
+  /* force errors to be fatal */
+  fatal_mask |= G_LOG_LEVEL_ERROR;
+  /* remove bogus flag */
+  fatal_mask &= ~G_LOG_FLAG_FATAL;
+  
+  g_mutex_lock (g_messages_lock);
+
+  domain = g_log_find_domain_L (log_domain);
+  if (!domain)
+    domain = g_log_domain_new_L (log_domain);
+  old_flags = domain->fatal_mask;
+  
+  domain->fatal_mask = fatal_mask;
+  g_log_domain_check_free_L (domain);
+
+  g_mutex_unlock (g_messages_lock);
+
+  return old_flags;
+}
+
+guint
+g_log_set_handler (const gchar	 *log_domain,
+		   GLogLevelFlags log_levels,
+		   GLogFunc	  log_func,
+		   gpointer	  user_data)
+{
+  static guint handler_id = 0;
+  GLogDomain *domain;
+  GLogHandler *handler;
+  
+  g_return_val_if_fail ((log_levels & G_LOG_LEVEL_MASK) != 0, 0);
+  g_return_val_if_fail (log_func != NULL, 0);
+  
+  if (!log_domain)
+    log_domain = "";
+
+  handler = g_new (GLogHandler, 1);
+
+  g_mutex_lock (g_messages_lock);
+
+  domain = g_log_find_domain_L (log_domain);
+  if (!domain)
+    domain = g_log_domain_new_L (log_domain);
+  
+  handler->id = ++handler_id;
+  handler->log_level = log_levels;
+  handler->log_func = log_func;
+  handler->data = user_data;
+  handler->next = domain->handlers;
+  domain->handlers = handler;
+
+  g_mutex_unlock (g_messages_lock);
+  
+  return handler_id;
+}
+
+GLogFunc
+g_log_set_default_handler (GLogFunc log_func,
+			   gpointer user_data)
+{
+  GLogFunc old_log_func;
+  
+  g_mutex_lock (g_messages_lock);
+  old_log_func = default_log_func;
+  default_log_func = log_func;
+  default_log_data = user_data;
+  g_mutex_unlock (g_messages_lock);
+  
+  return old_log_func;
+}
+
+void
+g_log_remove_handler (const gchar *log_domain,
+		      guint	   handler_id)
+{
+  register GLogDomain *domain;
+  
+  g_return_if_fail (handler_id > 0);
+  
+  if (!log_domain)
+    log_domain = "";
+  
+  g_mutex_lock (g_messages_lock);
+  domain = g_log_find_domain_L (log_domain);
+  if (domain)
+    {
+      GLogHandler *work, *last;
+      
+      last = NULL;
+      work = domain->handlers;
+      while (work)
+	{
+	  if (work->id == handler_id)
+	    {
+	      if (last)
+		last->next = work->next;
+	      else
+		domain->handlers = work->next;
+	      g_log_domain_check_free_L (domain); 
+	      g_mutex_unlock (g_messages_lock);
+	      g_free (work);
+	      return;
+	    }
+	  last = work;
+	  work = last->next;
+	}
+    } 
+  g_mutex_unlock (g_messages_lock);
+  g_warning ("%s: could not find handler with id `%d' for domain \"%s\"",
+	     G_STRLOC, handler_id, log_domain);
+}
+
+void
+g_logv (const gchar   *log_domain,
+	GLogLevelFlags log_level,
+	const gchar   *format,
+	va_list	       args1)
+{
+  gboolean was_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
+  gboolean was_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0;
+  gint i;
+
+  log_level &= G_LOG_LEVEL_MASK;
+  if (!log_level)
+    return;
+  
+  for (i = g_bit_nth_msf (log_level, -1); i >= 0; i = g_bit_nth_msf (log_level, i))
+    {
+      register GLogLevelFlags test_level;
+      
+      test_level = 1 << i;
+      if (log_level & test_level)
+	{
+	  guint depth = GPOINTER_TO_UINT (g_private_get (g_log_depth));
+	  GLogDomain *domain;
+	  GLogFunc log_func;
+	  GLogLevelFlags domain_fatal_mask;
+	  gpointer data = NULL;
+
+	  if (was_fatal)
+	    test_level |= G_LOG_FLAG_FATAL;
+	  if (was_recursion)
+	    test_level |= G_LOG_FLAG_RECURSION;
+
+	  /* check recursion and lookup handler */
+	  g_mutex_lock (g_messages_lock);
+	  domain = g_log_find_domain_L (log_domain ? log_domain : "");
+	  if (depth)
+	    test_level |= G_LOG_FLAG_RECURSION;
+	  depth++;
+	  domain_fatal_mask = domain ? domain->fatal_mask : G_LOG_FATAL_MASK;
+	  if ((domain_fatal_mask | g_log_always_fatal) & test_level)
+	    test_level |= G_LOG_FLAG_FATAL;
+	  if (test_level & G_LOG_FLAG_RECURSION)
+	    log_func = _g_log_fallback_handler;
+	  else
+	    log_func = g_log_domain_get_handler_L (domain, test_level, &data);
+	  domain = NULL;
+	  g_mutex_unlock (g_messages_lock);
+
+	  g_private_set (g_log_depth, GUINT_TO_POINTER (depth));
+
+	  /* had to defer debug initialization until we can keep track of recursion */
+	  if (!(test_level & G_LOG_FLAG_RECURSION) && !_g_debug_initialized)
+	    {
+	      GLogLevelFlags orig_test_level = test_level;
+
+	      _g_debug_init ();
+	      if ((domain_fatal_mask | g_log_always_fatal) & test_level)
+		test_level |= G_LOG_FLAG_FATAL;
+	      if (test_level != orig_test_level)
+		{
+		  /* need a relookup, not nice, but not too bad either */
+		  g_mutex_lock (g_messages_lock);
+		  domain = g_log_find_domain_L (log_domain ? log_domain : "");
+		  log_func = g_log_domain_get_handler_L (domain, test_level, &data);
+		  domain = NULL;
+		  g_mutex_unlock (g_messages_lock);
+		}
+	    }
+
+	  if (test_level & G_LOG_FLAG_RECURSION)
+	    {
+	      /* we use a stack buffer of fixed size, since we're likely
+	       * in an out-of-memory situation
+	       */
+	      gchar buffer[1025];
+              gsize size;
+              va_list args2;
+
+              G_VA_COPY (args2, args1);
+	      size = _g_vsnprintf (buffer, 1024, format, args2);
+              va_end (args2);
+
+	      log_func (log_domain, test_level, buffer, data);
+	    }
+	  else
+	    {
+	      gchar *msg;
+              va_list args2;
+
+              G_VA_COPY (args2, args1);
+              msg = g_strdup_vprintf (format, args2);
+              va_end (args2);
+
+	      log_func (log_domain, test_level, msg, data);
+
+	      g_free (msg);
+	    }
+
+	  if (test_level & G_LOG_FLAG_FATAL)
+	    {
+#ifdef G_OS_WIN32
+	      gchar *locale_msg = g_locale_from_utf8 (fatal_msg_buf, -1, NULL, NULL, NULL);
+	      
+	      MessageBox (NULL, locale_msg, NULL,
+			  MB_ICONERROR|MB_SETFOREGROUND);
+	      if (IsDebuggerPresent () && !(test_level & G_LOG_FLAG_RECURSION))
+		G_BREAKPOINT ();
+	      else
+		abort ();
+#else
+#if defined (G_ENABLE_DEBUG) && defined (SIGTRAP)
+	      if (!(test_level & G_LOG_FLAG_RECURSION))
+		G_BREAKPOINT ();
+	      else
+		abort ();
+#else /* !G_ENABLE_DEBUG || !SIGTRAP */
+	      abort ();
+#endif /* !G_ENABLE_DEBUG || !SIGTRAP */
+#endif /* !G_OS_WIN32 */
+	    }
+	  
+	  depth--;
+	  g_private_set (g_log_depth, GUINT_TO_POINTER (depth));
+	}
+    }
+}
+
+void
+g_log (const gchar   *log_domain,
+       GLogLevelFlags log_level,
+       const gchar   *format,
+       ...)
+{
+  va_list args;
+  
+  va_start (args, format);
+  g_logv (log_domain, log_level, format, args);
+  va_end (args);
+}
+
+void
+g_return_if_fail_warning (const char *log_domain,
+			  const char *pretty_function,
+			  const char *expression)
+{
+  /*
+   * Omit the prefix used by the PLT-reduction
+   * technique used in GTK+. 
+   */
+  if (g_str_has_prefix (pretty_function, "IA__"))
+    pretty_function += 4;
+  g_log (log_domain,
+	 G_LOG_LEVEL_CRITICAL,
+	 "%s: assertion `%s' failed",
+	 pretty_function,
+	 expression);
+}
+
+void
+g_warn_message (const char     *domain,
+                const char     *file,
+                int             line,
+                const char     *func,
+                const char     *warnexpr)
+{
+  char *s, lstr[32];
+  g_snprintf (lstr, 32, "%d", line);
+  if (warnexpr)
+    s = g_strconcat ("(", file, ":", lstr, "):",
+                     func, func[0] ? ":" : "",
+                     " runtime check failed: (", warnexpr, ")", NULL);
+  else
+    s = g_strconcat ("(", file, ":", lstr, "):",
+                     func, func[0] ? ":" : "",
+                     " ", "code should not be reached", NULL);
+  g_log (domain, G_LOG_LEVEL_WARNING, "%s", s);
+  g_free (s);
+}
+
+void
+g_assert_warning (const char *log_domain,
+		  const char *file,
+		  const int   line,
+		  const char *pretty_function,
+		  const char *expression)
+{
+  /*
+   * Omit the prefix used by the PLT-reduction
+   * technique used in GTK+. 
+   */
+  if (g_str_has_prefix (pretty_function, "IA__"))
+    pretty_function += 4;
+  g_log (log_domain,
+	 G_LOG_LEVEL_ERROR,
+	 expression 
+	 ? "file %s: line %d (%s): assertion failed: (%s)"
+	 : "file %s: line %d (%s): should not be reached",
+	 file, 
+	 line, 
+	 pretty_function,
+	 expression);
+  abort ();
+}
+
+#define CHAR_IS_SAFE(wc) (!((wc < 0x20 && wc != '\t' && wc != '\n' && wc != '\r') || \
+			    (wc == 0x7f) || \
+			    (wc >= 0x80 && wc < 0xa0)))
+     
+static gchar*
+strdup_convert (const gchar *string,
+		const gchar *charset)
+{
+  if (!g_utf8_validate (string, -1, NULL))
+    {
+      GString *gstring = g_string_new ("[Invalid UTF-8] ");
+      guchar *p;
+
+      for (p = (guchar *)string; *p; p++)
+	{
+	  if (CHAR_IS_SAFE(*p) &&
+	      !(*p == '\r' && *(p + 1) != '\n') &&
+	      *p < 0x80)
+	    g_string_append_c (gstring, *p);
+	  else
+	    g_string_append_printf (gstring, "\\x%02x", (guint)(guchar)*p);
+	}
+      
+      return g_string_free (gstring, FALSE);
+    }
+  else
+    {
+      GError *err = NULL;
+      
+      gchar *result = g_convert_with_fallback (string, -1, charset, "UTF-8", "?", NULL, NULL, &err);
+      if (result)
+	return result;
+      else
+	{
+	  /* Not thread-safe, but doesn't matter if we print the warning twice
+	   */
+	  static gboolean warned = FALSE; 
+	  if (!warned)
+	    {
+	      warned = TRUE;
+	      _g_fprintf (stderr, "GLib: Cannot convert message: %s\n", err->message);
+	    }
+	  g_error_free (err);
+	  
+	  return g_strdup (string);
+	}
+    }
+}
+
+/* For a radix of 8 we need at most 3 output bytes for 1 input
+ * byte. Additionally we might need up to 2 output bytes for the
+ * readix prefix and 1 byte for the trailing NULL.
+ */
+#define FORMAT_UNSIGNED_BUFSIZE ((GLIB_SIZEOF_LONG * 3) + 3)
+
+static void
+format_unsigned (gchar  *buf,
+		 gulong  num,
+		 guint   radix)
+{
+  gulong tmp;
+  gchar c;
+  gint i, n;
+
+  /* we may not call _any_ GLib functions here (or macros like g_return_if_fail()) */
+
+  if (radix != 8 && radix != 10 && radix != 16)
+    {
+      *buf = '\000';
+      return;
+    }
+  
+  if (!num)
+    {
+      *buf++ = '0';
+      *buf = '\000';
+      return;
+    } 
+  
+  if (radix == 16)
+    {
+      *buf++ = '0';
+      *buf++ = 'x';
+    }
+  else if (radix == 8)
+    {
+      *buf++ = '0';
+    }
+	
+  n = 0;
+  tmp = num;
+  while (tmp)
+    {
+      tmp /= radix;
+      n++;
+    }
+
+  i = n;
+
+  /* Again we can't use g_assert; actually this check should _never_ fail. */
+  if (n > FORMAT_UNSIGNED_BUFSIZE - 3)
+    {
+      *buf = '\000';
+      return;
+    }
+
+  while (num)
+    {
+      i--;
+      c = (num % radix);
+      if (c < 10)
+	buf[i] = c + '0';
+      else
+	buf[i] = c + 'a' - 10;
+      num /= radix;
+    }
+  
+  buf[n] = '\000';
+}
+
+/* string size big enough to hold level prefix */
+#define	STRING_BUFFER_SIZE	(FORMAT_UNSIGNED_BUFSIZE + 32)
+
+#define	ALERT_LEVELS		(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING)
+
+static int
+mklevel_prefix (gchar          level_prefix[STRING_BUFFER_SIZE],
+		GLogLevelFlags log_level)
+{
+  gboolean to_stdout = TRUE;
+
+  /* we may not call _any_ GLib functions here */
+
+  switch (log_level & G_LOG_LEVEL_MASK)
+    {
+    case G_LOG_LEVEL_ERROR:
+      strcpy (level_prefix, "ERROR");
+      to_stdout = FALSE;
+      break;
+    case G_LOG_LEVEL_CRITICAL:
+      strcpy (level_prefix, "CRITICAL");
+      to_stdout = FALSE;
+      break;
+    case G_LOG_LEVEL_WARNING:
+      strcpy (level_prefix, "WARNING");
+      to_stdout = FALSE;
+      break;
+    case G_LOG_LEVEL_MESSAGE:
+      strcpy (level_prefix, "Message");
+      to_stdout = FALSE;
+      break;
+    case G_LOG_LEVEL_INFO:
+      strcpy (level_prefix, "INFO");
+      break;
+    case G_LOG_LEVEL_DEBUG:
+      strcpy (level_prefix, "DEBUG");
+      break;
+    default:
+      if (log_level)
+	{
+	  strcpy (level_prefix, "LOG-");
+	  format_unsigned (level_prefix + 4, log_level & G_LOG_LEVEL_MASK, 16);
+	}
+      else
+	strcpy (level_prefix, "LOG");
+      break;
+    }
+  if (log_level & G_LOG_FLAG_RECURSION)
+    strcat (level_prefix, " (recursed)");
+  if (log_level & ALERT_LEVELS)
+    strcat (level_prefix, " **");
+
+#ifdef G_OS_WIN32
+  win32_keep_fatal_message = (log_level & G_LOG_FLAG_FATAL) != 0;
+#endif
+  return to_stdout ? 1 : 2;
+}
+
+void
+_g_log_fallback_handler (const gchar   *log_domain,
+			 GLogLevelFlags log_level,
+			 const gchar   *message,
+			 gpointer       unused_data)
+{
+  gchar level_prefix[STRING_BUFFER_SIZE];
+#ifndef G_OS_WIN32
+  gchar pid_string[FORMAT_UNSIGNED_BUFSIZE];
+#endif
+  gboolean is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
+  int fd;
+
+  /* we can not call _any_ GLib functions in this fallback handler,
+   * which is why we skip UTF-8 conversion, etc.
+   * since we either recursed or ran out of memory, we're in a pretty
+   * pathologic situation anyways, what we can do is giving the
+   * the process ID unconditionally however.
+   */
+
+  fd = mklevel_prefix (level_prefix, log_level);
+  if (!message)
+    message = "(NULL) message";
+
+#ifndef G_OS_WIN32
+  format_unsigned (pid_string, getpid (), 10);
+#endif
+
+  if (log_domain)
+    write_string (fd, "\n");
+  else
+    write_string (fd, "\n** ");
+
+#ifndef G_OS_WIN32
+  write_string (fd, "(process:");
+  write_string (fd, pid_string);
+  write_string (fd, "): ");
+#endif
+
+  if (log_domain)
+    {
+      write_string (fd, log_domain);
+      write_string (fd, "-");
+    }
+  write_string (fd, level_prefix);
+  write_string (fd, ": ");
+  write_string (fd, message);
+  if (is_fatal)
+    write_string (fd, "\naborting...\n");
+  else
+    write_string (fd, "\n");
+}
+
+static void
+escape_string (GString *string)
+{
+  const char *p = string->str;
+  gunichar wc;
+
+  while (p < string->str + string->len)
+    {
+      gboolean safe;
+	    
+      wc = g_utf8_get_char_validated (p, -1);
+      if (wc == (gunichar)-1 || wc == (gunichar)-2)  
+	{
+	  gchar *tmp;
+	  guint pos;
+
+	  pos = p - string->str;
+
+	  /* Emit invalid UTF-8 as hex escapes 
+           */
+	  tmp = g_strdup_printf ("\\x%02x", (guint)(guchar)*p);
+	  g_string_erase (string, pos, 1);
+	  g_string_insert (string, pos, tmp);
+
+	  p = string->str + (pos + 4); /* Skip over escape sequence */
+
+	  g_free (tmp);
+	  continue;
+	}
+      if (wc == '\r')
+	{
+	  safe = *(p + 1) == '\n';
+	}
+      else
+	{
+	  safe = CHAR_IS_SAFE (wc);
+	}
+      
+      if (!safe)
+	{
+	  gchar *tmp;
+	  guint pos;
+
+	  pos = p - string->str;
+	  
+	  /* Largest char we escape is 0x0a, so we don't have to worry
+	   * about 8-digit \Uxxxxyyyy
+	   */
+	  tmp = g_strdup_printf ("\\u%04x", wc); 
+	  g_string_erase (string, pos, g_utf8_next_char (p) - p);
+	  g_string_insert (string, pos, tmp);
+	  g_free (tmp);
+
+	  p = string->str + (pos + 6); /* Skip over escape sequence */
+	}
+      else
+	p = g_utf8_next_char (p);
+    }
+}
+
+void
+g_log_default_handler (const gchar   *log_domain,
+		       GLogLevelFlags log_level,
+		       const gchar   *message,
+		       gpointer	      unused_data)
+{
+  gboolean is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
+  gchar level_prefix[STRING_BUFFER_SIZE], *string;
+  GString *gstring;
+  int fd;
+
+  /* we can be called externally with recursion for whatever reason */
+  if (log_level & G_LOG_FLAG_RECURSION)
+    {
+      _g_log_fallback_handler (log_domain, log_level, message, unused_data);
+      return;
+    }
+
+  g_messages_prefixed_init ();
+
+  fd = mklevel_prefix (level_prefix, log_level);
+
+  gstring = g_string_new (NULL);
+  if (log_level & ALERT_LEVELS)
+    g_string_append (gstring, "\n");
+  if (!log_domain)
+    g_string_append (gstring, "** ");
+
+  if ((g_log_msg_prefix & log_level) == log_level)
+    {
+      const gchar *prg_name = g_get_prgname ();
+      
+      if (!prg_name)
+	g_string_append_printf (gstring, "(process:%lu): ", (gulong)getpid ());
+      else
+	g_string_append_printf (gstring, "(%s:%lu): ", prg_name, (gulong)getpid ());
+    }
+
+  if (log_domain)
+    {
+      g_string_append (gstring, log_domain);
+      g_string_append_c (gstring, '-');
+    }
+  g_string_append (gstring, level_prefix);
+
+  g_string_append (gstring, ": ");
+  if (!message)
+    g_string_append (gstring, "(NULL) message");
+  else
+    {
+      GString *msg;
+      const gchar *charset;
+
+      msg = g_string_new (message);
+      escape_string (msg);
+
+      if (g_get_charset (&charset))
+	g_string_append (gstring, msg->str);	/* charset is UTF-8 already */
+      else
+	{
+	  string = strdup_convert (msg->str, charset);
+	  g_string_append (gstring, string);
+	  g_free (string);
+	}
+
+      g_string_free (msg, TRUE);
+    }
+  if (is_fatal)
+    g_string_append (gstring, "\naborting...\n");
+  else
+    g_string_append (gstring, "\n");
+
+  string = g_string_free (gstring, FALSE);
+
+  write_string (fd, string);
+  g_free (string);
+}
+
+GPrintFunc
+g_set_print_handler (GPrintFunc func)
+{
+  GPrintFunc old_print_func;
+  
+  g_mutex_lock (g_messages_lock);
+  old_print_func = glib_print_func;
+  glib_print_func = func;
+  g_mutex_unlock (g_messages_lock);
+  
+  return old_print_func;
+}
+
+void
+g_print (const gchar *format,
+	 ...)
+{
+  va_list args;
+  gchar *string;
+  GPrintFunc local_glib_print_func;
+  
+  g_return_if_fail (format != NULL);
+  
+  va_start (args, format);
+  string = g_strdup_vprintf (format, args);
+  va_end (args);
+  
+  g_mutex_lock (g_messages_lock);
+  local_glib_print_func = glib_print_func;
+  g_mutex_unlock (g_messages_lock);
+  
+  if (local_glib_print_func)
+    local_glib_print_func (string);
+  else
+    {
+      const gchar *charset;
+
+      if (g_get_charset (&charset))
+	fputs (string, stdout); /* charset is UTF-8 already */
+      else
+	{
+	  gchar *lstring = strdup_convert (string, charset);
+
+	  fputs (lstring, stdout);
+	  g_free (lstring);
+	}
+      fflush (stdout);
+    }
+  g_free (string);
+}
+
+GPrintFunc
+g_set_printerr_handler (GPrintFunc func)
+{
+  GPrintFunc old_printerr_func;
+  
+  g_mutex_lock (g_messages_lock);
+  old_printerr_func = glib_printerr_func;
+  glib_printerr_func = func;
+  g_mutex_unlock (g_messages_lock);
+  
+  return old_printerr_func;
+}
+
+void
+g_printerr (const gchar *format,
+	    ...)
+{
+  va_list args;
+  gchar *string;
+  GPrintFunc local_glib_printerr_func;
+  
+  g_return_if_fail (format != NULL);
+  
+  va_start (args, format);
+  string = g_strdup_vprintf (format, args);
+  va_end (args);
+  
+  g_mutex_lock (g_messages_lock);
+  local_glib_printerr_func = glib_printerr_func;
+  g_mutex_unlock (g_messages_lock);
+  
+  if (local_glib_printerr_func)
+    local_glib_printerr_func (string);
+  else
+    {
+      const gchar *charset;
+
+      if (g_get_charset (&charset))
+	fputs (string, stderr); /* charset is UTF-8 already */
+      else
+	{
+	  gchar *lstring = strdup_convert (string, charset);
+
+	  fputs (lstring, stderr);
+	  g_free (lstring);
+	}
+      fflush (stderr);
+    }
+  g_free (string);
+}
+
+gsize
+g_printf_string_upper_bound (const gchar *format,
+			     va_list      args)
+{
+  gchar c;
+  return _g_vsnprintf (&c, 1, format, args) + 1;
+}
+
+void
+_g_messages_thread_init_nomessage (void)
+{
+  g_messages_lock = g_mutex_new ();
+  g_log_depth = g_private_new (NULL);
+  g_messages_prefixed_init ();
+  _g_debug_init ();
+}
+
+gboolean _g_debug_initialized = FALSE;
+guint _g_debug_flags = 0;
+
+void
+_g_debug_init (void) 
+{
+  const gchar *val;
+  
+  _g_debug_initialized = TRUE;
+  
+  val = g_getenv ("G_DEBUG");
+  if (val != NULL)
+    {
+      const GDebugKey keys[] = {
+	{"fatal_warnings", G_DEBUG_FATAL_WARNINGS},
+	{"fatal_criticals", G_DEBUG_FATAL_CRITICALS}
+      };
+      
+      _g_debug_flags = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+    }
+  
+  if (_g_debug_flags & G_DEBUG_FATAL_WARNINGS) 
+    {
+      GLogLevelFlags fatal_mask;
+      
+      fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+      fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+      g_log_set_always_fatal (fatal_mask);
+    }
+  
+  if (_g_debug_flags & G_DEBUG_FATAL_CRITICALS) 
+    {
+      GLogLevelFlags fatal_mask;
+      
+      fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+      fatal_mask |= G_LOG_LEVEL_CRITICAL;
+      g_log_set_always_fatal (fatal_mask);
+    }
+}
+
+#define __G_MESSAGES_C__
+#include "galiasdef.c"
diff --git a/glib/gmessages.h b/glib/gmessages.h
new file mode 100644
index 0000000..af5a826
--- /dev/null
+++ b/glib/gmessages.h
@@ -0,0 +1,341 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_MESSAGES_H__
+#define __G_MESSAGES_H__
+
+#include <stdarg.h>
+#include <glib/gtypes.h>
+#include <glib/gmacros.h>
+
+/* Suppress warnings when GCC is in -pedantic mode and not -std=c99
+ */
+#if (__GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
+#pragma GCC system_header
+#endif
+
+G_BEGIN_DECLS
+
+/* calculate a string size, guaranteed to fit format + args.
+ */
+gsize	g_printf_string_upper_bound (const gchar* format,
+				     va_list	  args);
+
+/* Log level shift offset for user defined
+ * log levels (0-7 are used by GLib).
+ */
+#define G_LOG_LEVEL_USER_SHIFT  (8)
+
+/* Glib log levels and flags.
+ */
+typedef enum
+{
+  /* log flags */
+  G_LOG_FLAG_RECURSION          = 1 << 0,
+  G_LOG_FLAG_FATAL              = 1 << 1,
+
+  /* GLib log levels */
+  G_LOG_LEVEL_ERROR             = 1 << 2,       /* always fatal */
+  G_LOG_LEVEL_CRITICAL          = 1 << 3,
+  G_LOG_LEVEL_WARNING           = 1 << 4,
+  G_LOG_LEVEL_MESSAGE           = 1 << 5,
+  G_LOG_LEVEL_INFO              = 1 << 6,
+  G_LOG_LEVEL_DEBUG             = 1 << 7,
+
+  G_LOG_LEVEL_MASK              = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL)
+} GLogLevelFlags;
+
+/* GLib log levels that are considered fatal by default */
+#define G_LOG_FATAL_MASK        (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)
+
+typedef void            (*GLogFunc)             (const gchar   *log_domain,
+                                                 GLogLevelFlags log_level,
+                                                 const gchar   *message,
+                                                 gpointer       user_data);
+
+/* Logging mechanism
+ */
+guint           g_log_set_handler       (const gchar    *log_domain,
+                                         GLogLevelFlags  log_levels,
+                                         GLogFunc        log_func,
+                                         gpointer        user_data);
+void            g_log_remove_handler    (const gchar    *log_domain,
+                                         guint           handler_id);
+void            g_log_default_handler   (const gchar    *log_domain,
+                                         GLogLevelFlags  log_level,
+                                         const gchar    *message,
+                                         gpointer        unused_data);
+GLogFunc        g_log_set_default_handler (GLogFunc      log_func,
+					   gpointer      user_data);
+void            g_log                   (const gchar    *log_domain,
+                                         GLogLevelFlags  log_level,
+                                         const gchar    *format,
+                                         ...) G_GNUC_PRINTF (3, 4);
+void            g_logv                  (const gchar    *log_domain,
+                                         GLogLevelFlags  log_level,
+                                         const gchar    *format,
+                                         va_list         args);
+GLogLevelFlags  g_log_set_fatal_mask    (const gchar    *log_domain,
+                                         GLogLevelFlags  fatal_mask);
+GLogLevelFlags  g_log_set_always_fatal  (GLogLevelFlags  fatal_mask);
+
+/* internal */
+G_GNUC_INTERNAL void	_g_log_fallback_handler	(const gchar   *log_domain,
+						 GLogLevelFlags log_level,
+						 const gchar   *message,
+						 gpointer       unused_data);
+
+/* Internal functions, used to implement the following macros */
+void g_return_if_fail_warning (const char *log_domain,
+			       const char *pretty_function,
+			       const char *expression);
+void g_warn_message           (const char     *domain,
+                               const char     *file,
+                               int             line,
+                               const char     *func,
+                               const char     *warnexpr);
+#ifndef G_DISABLE_DEPRECATED
+void g_assert_warning         (const char *log_domain,
+			       const char *file,
+			       const int   line,
+		               const char *pretty_function,
+		               const char *expression) G_GNUC_NORETURN;
+#endif /* !G_DISABLE_DEPRECATED */
+
+
+#ifndef G_LOG_DOMAIN
+#define G_LOG_DOMAIN    ((gchar*) 0)
+#endif  /* G_LOG_DOMAIN */
+#ifdef G_HAVE_ISO_VARARGS
+/* for(;;); so that GCC knows that control doesn't go past g_error() */
+#define g_error(...)  G_STMT_START {                 \
+                        g_log (G_LOG_DOMAIN,         \
+                               G_LOG_LEVEL_ERROR,    \
+                               __VA_ARGS__);         \
+                        for (;;);                    \
+                      } G_STMT_END
+                        
+#define g_message(...)  g_log (G_LOG_DOMAIN,         \
+                               G_LOG_LEVEL_MESSAGE,  \
+                               __VA_ARGS__)
+#define g_critical(...) g_log (G_LOG_DOMAIN,         \
+                               G_LOG_LEVEL_CRITICAL, \
+                               __VA_ARGS__)
+#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
+                               G_LOG_LEVEL_WARNING,  \
+                               __VA_ARGS__)
+#define g_debug(...)    g_log (G_LOG_DOMAIN,         \
+                               G_LOG_LEVEL_DEBUG,    \
+                               __VA_ARGS__)
+#elif defined(G_HAVE_GNUC_VARARGS)
+#define g_error(format...)    G_STMT_START {                 \
+                                g_log (G_LOG_DOMAIN,         \
+                                       G_LOG_LEVEL_ERROR,    \
+                                       format);              \
+                                for (;;);                    \
+                              } G_STMT_END
+                              
+#define g_message(format...)    g_log (G_LOG_DOMAIN,         \
+                                       G_LOG_LEVEL_MESSAGE,  \
+                                       format)
+#define g_critical(format...)   g_log (G_LOG_DOMAIN,         \
+                                       G_LOG_LEVEL_CRITICAL, \
+                                       format)
+#define g_warning(format...)    g_log (G_LOG_DOMAIN,         \
+                                       G_LOG_LEVEL_WARNING,  \
+                                       format)
+#define g_debug(format...)      g_log (G_LOG_DOMAIN,         \
+                                       G_LOG_LEVEL_DEBUG,    \
+                                       format)
+#else   /* no varargs macros */
+static void
+g_error (const gchar *format,
+         ...)
+{
+  va_list args;
+  va_start (args, format);
+  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
+  va_end (args);
+
+  for(;;);
+}
+static void
+g_message (const gchar *format,
+           ...)
+{
+  va_list args;
+  va_start (args, format);
+  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args);
+  va_end (args);
+}
+static void
+g_critical (const gchar *format,
+            ...)
+{
+  va_list args;
+  va_start (args, format);
+  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, args);
+  va_end (args);
+}
+static void
+g_warning (const gchar *format,
+           ...)
+{
+  va_list args;
+  va_start (args, format);
+  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args);
+  va_end (args);
+}
+static void
+g_debug (const gchar *format,
+         ...)
+{
+  va_list args;
+  va_start (args, format);
+  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args);
+  va_end (args);
+}
+#endif  /* !__GNUC__ */
+
+typedef void    (*GPrintFunc)           (const gchar    *string);
+void            g_print                 (const gchar    *format,
+                                         ...) G_GNUC_PRINTF (1, 2);
+GPrintFunc      g_set_print_handler     (GPrintFunc      func);
+void            g_printerr              (const gchar    *format,
+                                         ...) G_GNUC_PRINTF (1, 2);
+GPrintFunc      g_set_printerr_handler  (GPrintFunc      func);
+
+
+/* Provide macros for graceful error handling.
+ * The "return" macros will return from the current function.
+ * Two different definitions are given for the macros in
+ * order to support gcc's __PRETTY_FUNCTION__ capability.
+ */
+
+#define g_warn_if_reached()     do { g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } while (0)
+#define g_warn_if_fail(expr)    do { if G_LIKELY (expr) ; else \
+                                       g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); } while (0)
+
+#ifdef G_DISABLE_CHECKS
+
+#define g_return_if_fail(expr)			G_STMT_START{ (void)0; }G_STMT_END
+#define g_return_val_if_fail(expr,val)		G_STMT_START{ (void)0; }G_STMT_END
+#define g_return_if_reached()			G_STMT_START{ return; }G_STMT_END
+#define g_return_val_if_reached(val)		G_STMT_START{ return (val); }G_STMT_END
+
+#else /* !G_DISABLE_CHECKS */
+
+#ifdef __GNUC__
+
+#define g_return_if_fail(expr)		G_STMT_START{			\
+     if G_LIKELY(expr) { } else       					\
+       {								\
+	 g_return_if_fail_warning (G_LOG_DOMAIN,			\
+		                   __PRETTY_FUNCTION__,		        \
+		                   #expr);				\
+	 return;							\
+       };				}G_STMT_END
+
+#define g_return_val_if_fail(expr,val)	G_STMT_START{			\
+     if G_LIKELY(expr) { } else						\
+       {								\
+	 g_return_if_fail_warning (G_LOG_DOMAIN,			\
+		                   __PRETTY_FUNCTION__,		        \
+		                   #expr);				\
+	 return (val);							\
+       };				}G_STMT_END
+
+#define g_return_if_reached()		G_STMT_START{			\
+     g_log (G_LOG_DOMAIN,						\
+	    G_LOG_LEVEL_CRITICAL,					\
+	    "file %s: line %d (%s): should not be reached",		\
+	    __FILE__,							\
+	    __LINE__,							\
+	    __PRETTY_FUNCTION__);					\
+     return;				}G_STMT_END
+
+#define g_return_val_if_reached(val)	G_STMT_START{			\
+     g_log (G_LOG_DOMAIN,						\
+	    G_LOG_LEVEL_CRITICAL,					\
+	    "file %s: line %d (%s): should not be reached",		\
+	    __FILE__,							\
+	    __LINE__,							\
+	    __PRETTY_FUNCTION__);					\
+     return (val);			}G_STMT_END
+
+#else /* !__GNUC__ */
+
+#define g_return_if_fail(expr)		G_STMT_START{		\
+     if (expr) { } else						\
+       {							\
+	 g_log (G_LOG_DOMAIN,					\
+		G_LOG_LEVEL_CRITICAL,				\
+		"file %s: line %d: assertion `%s' failed",	\
+		__FILE__,					\
+		__LINE__,					\
+		#expr);						\
+	 return;						\
+       };				}G_STMT_END
+
+#define g_return_val_if_fail(expr, val)	G_STMT_START{		\
+     if (expr) { } else						\
+       {							\
+	 g_log (G_LOG_DOMAIN,					\
+		G_LOG_LEVEL_CRITICAL,				\
+		"file %s: line %d: assertion `%s' failed",	\
+		__FILE__,					\
+		__LINE__,					\
+		#expr);						\
+	 return (val);						\
+       };				}G_STMT_END
+
+#define g_return_if_reached()		G_STMT_START{		\
+     g_log (G_LOG_DOMAIN,					\
+	    G_LOG_LEVEL_CRITICAL,				\
+	    "file %s: line %d: should not be reached",		\
+	    __FILE__,						\
+	    __LINE__);						\
+     return;				}G_STMT_END
+
+#define g_return_val_if_reached(val)	G_STMT_START{		\
+     g_log (G_LOG_DOMAIN,					\
+	    G_LOG_LEVEL_CRITICAL,				\
+	    "file %s: line %d: should not be reached",		\
+	    __FILE__,						\
+	    __LINE__);						\
+     return (val);			}G_STMT_END
+
+#endif /* !__GNUC__ */
+
+#endif /* !G_DISABLE_CHECKS */
+
+G_END_DECLS
+
+#endif /* __G_MESSAGES_H__ */
diff --git a/glib/gmirroringtable.h b/glib/gmirroringtable.h
new file mode 100644
index 0000000..dd8f18a
--- /dev/null
+++ b/glib/gmirroringtable.h
@@ -0,0 +1,901 @@
+/* gmirroringtable.h
+ * generated by gen-mirroring-tab 
+ * from the file BidiMirroring.txt of */
+
+#define PACKTAB_UINT8 guint8
+#define PACKTAB_UINT16 guint16
+#define PACKTAB_UINT32 guint32
+
+/*
+  generated by packtab.c version 3
+
+  use GLIB_GET_MIRRORING_DELTA(key) to access your table
+
+  assumed sizeof(gint16): 2
+  required memory: 1008
+  lookups: 4
+  partition shape: Mir[256][16][4][4]
+  different table entries: 1 14 56 38
+*/
+
+/* *INDENT-OFF* */
+
+static const gint16 MirLev3[4*38] = {
+#define MirLev3_0000 0x0
+  0,0,0,0,
+#define MirLev3_0028 0x4
+  1,-1,0,0,
+#define MirLev3_003C 0x8
+  2,0,-2,0,
+#define MirLev3_0058 0xC
+  0,0,0,2,
+#define MirLev3_005C 0x10
+  0,-2,0,0,
+#define MirLev3_00A8 0x14
+  0,0,0,16,
+#define MirLev3_00B8 0x18
+  0,0,0,-16,
+#define MirLev3_0F38 0x1C
+  0,0,1,-1,
+#define MirLev3_1698 0x20
+  0,0,0,1,
+#define MirLev3_169C 0x24
+  -1,0,0,0,
+#define MirLev3_2038 0x28
+  0,1,-1,0,
+#define MirLev3_2208 0x2C
+  3,3,3,-3,
+#define MirLev3_220C 0x30
+  -3,-3,0,0,
+#define MirLev3_2214 0x34
+  0,2016,0,0,
+#define MirLev3_2240 0x38
+  0,0,0,138,
+#define MirLev3_2264 0x3C
+  1,-1,1,-1,
+#define MirLev3_2290 0x40
+  -1,1,-1,0,
+#define MirLev3_2298 0x44
+  1824,0,0,0,
+#define MirLev3_22A4 0x48
+  0,0,2104,0,
+#define MirLev3_22A8 0x4C
+  2108,2106,0,2106,
+#define MirLev3_22C8 0x50
+  0,1,-1,1,
+#define MirLev3_22CC 0x54
+  -1,-138,0,0,
+#define MirLev3_22F0 0x58
+  1,-1,8,8,
+#define MirLev3_22F4 0x5C
+  8,0,7,7,
+#define MirLev3_22F8 0x60
+  0,0,-8,-8,
+#define MirLev3_22FC 0x64
+  -8,-7,-7,0,
+#define MirLev3_2984 0x68
+  -1,1,-1,1,
+#define MirLev3_298C 0x6C
+  -1,3,1,-1,
+#define MirLev3_2990 0x70
+  -3,1,-1,1,
+#define MirLev3_29B8 0x74
+  -1824,0,0,0,
+#define MirLev3_29F4 0x78
+  0,-2016,0,0,
+#define MirLev3_2AAC 0x7C
+  1,-1,0,1,
+#define MirLev3_2AB0 0x80
+  -1,0,0,1,
+#define MirLev3_2ADC 0x84
+  0,0,-2104,0,
+#define MirLev3_2AE0 0x88
+  0,0,0,-2106,
+#define MirLev3_2AE4 0x8C
+  -2108,-2106,0,0,
+#define MirLev3_FF5C 0x90
+  0,-2,0,1,
+#define MirLev3_FF60 0x94
+  -1,0,1,-1,
+};
+
+static const PACKTAB_UINT8 MirLev2[4*56] = {
+#define MirLev2_0000 0x0
+  MirLev3_0000,  /* 0000..0003 */
+  MirLev3_0000,  /* 0004..0007 */
+  MirLev3_0000,  /* 0008..000B */
+  MirLev3_0000,  /* 000C..000F */
+#define MirLev2_0020 0x4
+  MirLev3_0000,  /* 0020..0023 */
+  MirLev3_0000,  /* 0024..0027 */
+  MirLev3_0028,  /* 0028..002B */
+  MirLev3_0000,  /* 002C..002F */
+#define MirLev2_0030 0x8
+  MirLev3_0000,  /* 0030..0033 */
+  MirLev3_0000,  /* 0034..0037 */
+  MirLev3_0000,  /* 0038..003B */
+  MirLev3_003C,  /* 003C..003F */
+#define MirLev2_0050 0xC
+  MirLev3_0000,  /* 0050..0053 */
+  MirLev3_0000,  /* 0054..0057 */
+  MirLev3_0058,  /* 0058..005B */
+  MirLev3_005C,  /* 005C..005F */
+#define MirLev2_00A0 0x10
+  MirLev3_0000,  /* 00A0..00A3 */
+  MirLev3_0000,  /* 00A4..00A7 */
+  MirLev3_00A8,  /* 00A8..00AB */
+  MirLev3_0000,  /* 00AC..00AF */
+#define MirLev2_00B0 0x14
+  MirLev3_0000,  /* 00B0..00B3 */
+  MirLev3_0000,  /* 00B4..00B7 */
+  MirLev3_00B8,  /* 00B8..00BB */
+  MirLev3_0000,  /* 00BC..00BF */
+#define MirLev2_0F30 0x18
+  MirLev3_0000,  /* 0F30..0F33 */
+  MirLev3_0000,  /* 0F34..0F37 */
+  MirLev3_0F38,  /* 0F38..0F3B */
+  MirLev3_0028,  /* 0F3C..0F3F */
+#define MirLev2_1690 0x1C
+  MirLev3_0000,  /* 1690..1693 */
+  MirLev3_0000,  /* 1694..1697 */
+  MirLev3_1698,  /* 1698..169B */
+  MirLev3_169C,  /* 169C..169F */
+#define MirLev2_2030 0x20
+  MirLev3_0000,  /* 2030..2033 */
+  MirLev3_0000,  /* 2034..2037 */
+  MirLev3_2038,  /* 2038..203B */
+  MirLev3_0000,  /* 203C..203F */
+#define MirLev2_2040 0x24
+  MirLev3_0000,  /* 2040..2043 */
+  MirLev3_2038,  /* 2044..2047 */
+  MirLev3_0000,  /* 2048..204B */
+  MirLev3_0000,  /* 204C..204F */
+#define MirLev2_2070 0x28
+  MirLev3_0000,  /* 2070..2073 */
+  MirLev3_0000,  /* 2074..2077 */
+  MirLev3_0000,  /* 2078..207B */
+  MirLev3_2038,  /* 207C..207F */
+#define MirLev2_2200 0x2C
+  MirLev3_0000,  /* 2200..2203 */
+  MirLev3_0000,  /* 2204..2207 */
+  MirLev3_2208,  /* 2208..220B */
+  MirLev3_220C,  /* 220C..220F */
+#define MirLev2_2210 0x30
+  MirLev3_0000,  /* 2210..2213 */
+  MirLev3_2214,  /* 2214..2217 */
+  MirLev3_0000,  /* 2218..221B */
+  MirLev3_0000,  /* 221C..221F */
+#define MirLev2_2230 0x34
+  MirLev3_0000,  /* 2230..2233 */
+  MirLev3_0000,  /* 2234..2237 */
+  MirLev3_0000,  /* 2238..223B */
+  MirLev3_0028,  /* 223C..223F */
+#define MirLev2_2240 0x38
+  MirLev3_2240,  /* 2240..2243 */
+  MirLev3_0000,  /* 2244..2247 */
+  MirLev3_0000,  /* 2248..224B */
+  MirLev3_0000,  /* 224C..224F */
+#define MirLev2_2250 0x3C
+  MirLev3_0F38,  /* 2250..2253 */
+  MirLev3_0028,  /* 2254..2257 */
+  MirLev3_0000,  /* 2258..225B */
+  MirLev3_0000,  /* 225C..225F */
+#define MirLev2_2260 0x40
+  MirLev3_0000,  /* 2260..2263 */
+  MirLev3_2264,  /* 2264..2267 */
+  MirLev3_2264,  /* 2268..226B */
+  MirLev3_0F38,  /* 226C..226F */
+#define MirLev2_2270 0x44
+  MirLev3_2264,  /* 2270..2273 */
+  MirLev3_2264,  /* 2274..2277 */
+  MirLev3_2264,  /* 2278..227B */
+  MirLev3_2264,  /* 227C..227F */
+#define MirLev2_2280 0x48
+  MirLev3_2264,  /* 2280..2283 */
+  MirLev3_2264,  /* 2284..2287 */
+  MirLev3_2264,  /* 2288..228B */
+  MirLev3_1698,  /* 228C..228F */
+#define MirLev2_2290 0x4C
+  MirLev3_2290,  /* 2290..2293 */
+  MirLev3_0000,  /* 2294..2297 */
+  MirLev3_2298,  /* 2298..229B */
+  MirLev3_0000,  /* 229C..229F */
+#define MirLev2_22A0 0x50
+  MirLev3_0F38,  /* 22A0..22A3 */
+  MirLev3_22A4,  /* 22A4..22A7 */
+  MirLev3_22A8,  /* 22A8..22AB */
+  MirLev3_0000,  /* 22AC..22AF */
+#define MirLev2_22B0 0x54
+  MirLev3_2264,  /* 22B0..22B3 */
+  MirLev3_2264,  /* 22B4..22B7 */
+  MirLev3_0000,  /* 22B8..22BB */
+  MirLev3_0000,  /* 22BC..22BF */
+#define MirLev2_22C0 0x58
+  MirLev3_0000,  /* 22C0..22C3 */
+  MirLev3_0000,  /* 22C4..22C7 */
+  MirLev3_22C8,  /* 22C8..22CB */
+  MirLev3_22CC,  /* 22CC..22CF */
+#define MirLev2_22D0 0x5C
+  MirLev3_0028,  /* 22D0..22D3 */
+  MirLev3_0F38,  /* 22D4..22D7 */
+  MirLev3_2264,  /* 22D8..22DB */
+  MirLev3_2264,  /* 22DC..22DF */
+#define MirLev2_22E0 0x60
+  MirLev3_2264,  /* 22E0..22E3 */
+  MirLev3_2264,  /* 22E4..22E7 */
+  MirLev3_2264,  /* 22E8..22EB */
+  MirLev3_0028,  /* 22EC..22EF */
+#define MirLev2_22F0 0x64
+  MirLev3_22F0,  /* 22F0..22F3 */
+  MirLev3_22F4,  /* 22F4..22F7 */
+  MirLev3_22F8,  /* 22F8..22FB */
+  MirLev3_22FC,  /* 22FC..22FF */
+#define MirLev2_2300 0x68
+  MirLev3_0000,  /* 2300..2303 */
+  MirLev3_0000,  /* 2304..2307 */
+  MirLev3_2264,  /* 2308..230B */
+  MirLev3_0000,  /* 230C..230F */
+#define MirLev2_2760 0x6C
+  MirLev3_0000,  /* 2760..2763 */
+  MirLev3_0000,  /* 2764..2767 */
+  MirLev3_2264,  /* 2768..276B */
+  MirLev3_2264,  /* 276C..276F */
+#define MirLev2_2770 0x70
+  MirLev3_2264,  /* 2770..2773 */
+  MirLev3_0028,  /* 2774..2777 */
+  MirLev3_0000,  /* 2778..277B */
+  MirLev3_0000,  /* 277C..277F */
+#define MirLev2_27C0 0x74
+  MirLev3_1698,  /* 27C0..27C3 */
+  MirLev3_2290,  /* 27C4..27C7 */
+  MirLev3_0028,  /* 27C8..27CB */
+  MirLev3_0000,  /* 27CC..27CF */
+#define MirLev2_27D0 0x78
+  MirLev3_0000,  /* 27D0..27D3 */
+  MirLev3_2038,  /* 27D4..27D7 */
+  MirLev3_0000,  /* 27D8..27DB */
+  MirLev3_2038,  /* 27DC..27DF */
+#define MirLev2_27E0 0x7C
+  MirLev3_0F38,  /* 27E0..27E3 */
+  MirLev3_2264,  /* 27E4..27E7 */
+  MirLev3_2264,  /* 27E8..27EB */
+  MirLev3_2264,  /* 27EC..27EF */
+#define MirLev2_2980 0x80
+  MirLev3_1698,  /* 2980..2983 */
+  MirLev3_2984,  /* 2984..2987 */
+  MirLev3_2984,  /* 2988..298B */
+  MirLev3_298C,  /* 298C..298F */
+#define MirLev2_2990 0x84
+  MirLev3_2990,  /* 2990..2993 */
+  MirLev3_2984,  /* 2994..2997 */
+  MirLev3_169C,  /* 2998..299B */
+  MirLev3_0000,  /* 299C..299F */
+#define MirLev2_29B0 0x88
+  MirLev3_0000,  /* 29B0..29B3 */
+  MirLev3_0000,  /* 29B4..29B7 */
+  MirLev3_29B8,  /* 29B8..29BB */
+  MirLev3_0000,  /* 29BC..29BF */
+#define MirLev2_29C0 0x8C
+  MirLev3_0028,  /* 29C0..29C3 */
+  MirLev3_0028,  /* 29C4..29C7 */
+  MirLev3_0000,  /* 29C8..29CB */
+  MirLev3_1698,  /* 29CC..29CF */
+#define MirLev2_29D0 0x90
+  MirLev3_2290,  /* 29D0..29D3 */
+  MirLev3_0028,  /* 29D4..29D7 */
+  MirLev3_2264,  /* 29D8..29DB */
+  MirLev3_0000,  /* 29DC..29DF */
+#define MirLev2_29F0 0x94
+  MirLev3_0000,  /* 29F0..29F3 */
+  MirLev3_29F4,  /* 29F4..29F7 */
+  MirLev3_0028,  /* 29F8..29FB */
+  MirLev3_0028,  /* 29FC..29FF */
+#define MirLev2_2A20 0x98
+  MirLev3_0000,  /* 2A20..2A23 */
+  MirLev3_0000,  /* 2A24..2A27 */
+  MirLev3_1698,  /* 2A28..2A2B */
+  MirLev3_2290,  /* 2A2C..2A2F */
+#define MirLev2_2A30 0x9C
+  MirLev3_0000,  /* 2A30..2A33 */
+  MirLev3_0028,  /* 2A34..2A37 */
+  MirLev3_0000,  /* 2A38..2A3B */
+  MirLev3_0028,  /* 2A3C..2A3F */
+#define MirLev2_2A60 0xA0
+  MirLev3_0000,  /* 2A60..2A63 */
+  MirLev3_0028,  /* 2A64..2A67 */
+  MirLev3_0000,  /* 2A68..2A6B */
+  MirLev3_0000,  /* 2A6C..2A6F */
+#define MirLev2_2A70 0xA4
+  MirLev3_0000,  /* 2A70..2A73 */
+  MirLev3_0000,  /* 2A74..2A77 */
+  MirLev3_2038,  /* 2A78..2A7B */
+  MirLev3_22C8,  /* 2A7C..2A7F */
+#define MirLev2_2A80 0xA8
+  MirLev3_2984,  /* 2A80..2A83 */
+  MirLev3_169C,  /* 2A84..2A87 */
+  MirLev3_1698,  /* 2A88..2A8B */
+  MirLev3_169C,  /* 2A8C..2A8F */
+#define MirLev2_2A90 0xAC
+  MirLev3_22C8,  /* 2A90..2A93 */
+  MirLev3_2984,  /* 2A94..2A97 */
+  MirLev3_2984,  /* 2A98..2A9B */
+  MirLev3_169C,  /* 2A9C..2A9F */
+#define MirLev2_2AA0 0xB0
+  MirLev3_2038,  /* 2AA0..2AA3 */
+  MirLev3_0F38,  /* 2AA4..2AA7 */
+  MirLev3_2264,  /* 2AA8..2AAB */
+  MirLev3_2AAC,  /* 2AAC..2AAF */
+#define MirLev2_2AB0 0xB4
+  MirLev3_2AB0,  /* 2AB0..2AB3 */
+  MirLev3_169C,  /* 2AB4..2AB7 */
+  MirLev3_1698,  /* 2AB8..2ABB */
+  MirLev3_2984,  /* 2ABC..2ABF */
+#define MirLev2_2AC0 0xB8
+  MirLev3_2984,  /* 2AC0..2AC3 */
+  MirLev3_2290,  /* 2AC4..2AC7 */
+  MirLev3_0000,  /* 2AC8..2ACB */
+  MirLev3_22C8,  /* 2ACC..2ACF */
+#define MirLev2_2AD0 0xBC
+  MirLev3_2984,  /* 2AD0..2AD3 */
+  MirLev3_2290,  /* 2AD4..2AD7 */
+  MirLev3_0000,  /* 2AD8..2ADB */
+  MirLev3_2ADC,  /* 2ADC..2ADF */
+#define MirLev2_2AE0 0xC0
+  MirLev3_2AE0,  /* 2AE0..2AE3 */
+  MirLev3_2AE4,  /* 2AE4..2AE7 */
+  MirLev3_0000,  /* 2AE8..2AEB */
+  MirLev3_0028,  /* 2AEC..2AEF */
+#define MirLev2_2AF0 0xC4
+  MirLev3_0000,  /* 2AF0..2AF3 */
+  MirLev3_1698,  /* 2AF4..2AF7 */
+  MirLev3_2290,  /* 2AF8..2AFB */
+  MirLev3_0000,  /* 2AFC..2AFF */
+#define MirLev2_2E00 0xC8
+  MirLev3_0F38,  /* 2E00..2E03 */
+  MirLev3_0028,  /* 2E04..2E07 */
+  MirLev3_2038,  /* 2E08..2E0B */
+  MirLev3_0028,  /* 2E0C..2E0F */
+#define MirLev2_2E20 0xCC
+  MirLev3_2264,  /* 2E20..2E23 */
+  MirLev3_2264,  /* 2E24..2E27 */
+  MirLev3_0028,  /* 2E28..2E2B */
+  MirLev3_0000,  /* 2E2C..2E2F */
+#define MirLev2_3010 0xD0
+  MirLev3_0028,  /* 3010..3013 */
+  MirLev3_2264,  /* 3014..3017 */
+  MirLev3_2264,  /* 3018..301B */
+  MirLev3_0000,  /* 301C..301F */
+#define MirLev2_FE50 0xD4
+  MirLev3_0000,  /* FE50..FE53 */
+  MirLev3_0000,  /* FE54..FE57 */
+  MirLev3_22C8,  /* FE58..FE5B */
+  MirLev3_2290,  /* FE5C..FE5F */
+#define MirLev2_FF50 0xD8
+  MirLev3_0000,  /* FF50..FF53 */
+  MirLev3_0000,  /* FF54..FF57 */
+  MirLev3_0058,  /* FF58..FF5B */
+  MirLev3_FF5C,  /* FF5C..FF5F */
+#define MirLev2_FF60 0xDC
+  MirLev3_FF60,  /* FF60..FF63 */
+  MirLev3_0000,  /* FF64..FF67 */
+  MirLev3_0000,  /* FF68..FF6B */
+  MirLev3_0000,  /* FF6C..FF6F */
+};
+
+static const PACKTAB_UINT8 MirLev1[16*14] = {
+#define MirLev1_0000 0x0
+  MirLev2_0000,  /* 0000..000F */
+  MirLev2_0000,  /* 0010..001F */
+  MirLev2_0020,  /* 0020..002F */
+  MirLev2_0030,  /* 0030..003F */
+  MirLev2_0000,  /* 0040..004F */
+  MirLev2_0050,  /* 0050..005F */
+  MirLev2_0000,  /* 0060..006F */
+  MirLev2_0050,  /* 0070..007F */
+  MirLev2_0000,  /* 0080..008F */
+  MirLev2_0000,  /* 0090..009F */
+  MirLev2_00A0,  /* 00A0..00AF */
+  MirLev2_00B0,  /* 00B0..00BF */
+  MirLev2_0000,  /* 00C0..00CF */
+  MirLev2_0000,  /* 00D0..00DF */
+  MirLev2_0000,  /* 00E0..00EF */
+  MirLev2_0000,  /* 00F0..00FF */
+#define MirLev1_0100 0x10
+  MirLev2_0000,  /* 0100..010F */
+  MirLev2_0000,  /* 0110..011F */
+  MirLev2_0000,  /* 0120..012F */
+  MirLev2_0000,  /* 0130..013F */
+  MirLev2_0000,  /* 0140..014F */
+  MirLev2_0000,  /* 0150..015F */
+  MirLev2_0000,  /* 0160..016F */
+  MirLev2_0000,  /* 0170..017F */
+  MirLev2_0000,  /* 0180..018F */
+  MirLev2_0000,  /* 0190..019F */
+  MirLev2_0000,  /* 01A0..01AF */
+  MirLev2_0000,  /* 01B0..01BF */
+  MirLev2_0000,  /* 01C0..01CF */
+  MirLev2_0000,  /* 01D0..01DF */
+  MirLev2_0000,  /* 01E0..01EF */
+  MirLev2_0000,  /* 01F0..01FF */
+#define MirLev1_0F00 0x20
+  MirLev2_0000,  /* 0F00..0F0F */
+  MirLev2_0000,  /* 0F10..0F1F */
+  MirLev2_0000,  /* 0F20..0F2F */
+  MirLev2_0F30,  /* 0F30..0F3F */
+  MirLev2_0000,  /* 0F40..0F4F */
+  MirLev2_0000,  /* 0F50..0F5F */
+  MirLev2_0000,  /* 0F60..0F6F */
+  MirLev2_0000,  /* 0F70..0F7F */
+  MirLev2_0000,  /* 0F80..0F8F */
+  MirLev2_0000,  /* 0F90..0F9F */
+  MirLev2_0000,  /* 0FA0..0FAF */
+  MirLev2_0000,  /* 0FB0..0FBF */
+  MirLev2_0000,  /* 0FC0..0FCF */
+  MirLev2_0000,  /* 0FD0..0FDF */
+  MirLev2_0000,  /* 0FE0..0FEF */
+  MirLev2_0000,  /* 0FF0..0FFF */
+#define MirLev1_1600 0x30
+  MirLev2_0000,  /* 1600..160F */
+  MirLev2_0000,  /* 1610..161F */
+  MirLev2_0000,  /* 1620..162F */
+  MirLev2_0000,  /* 1630..163F */
+  MirLev2_0000,  /* 1640..164F */
+  MirLev2_0000,  /* 1650..165F */
+  MirLev2_0000,  /* 1660..166F */
+  MirLev2_0000,  /* 1670..167F */
+  MirLev2_0000,  /* 1680..168F */
+  MirLev2_1690,  /* 1690..169F */
+  MirLev2_0000,  /* 16A0..16AF */
+  MirLev2_0000,  /* 16B0..16BF */
+  MirLev2_0000,  /* 16C0..16CF */
+  MirLev2_0000,  /* 16D0..16DF */
+  MirLev2_0000,  /* 16E0..16EF */
+  MirLev2_0000,  /* 16F0..16FF */
+#define MirLev1_2000 0x40
+  MirLev2_0000,  /* 2000..200F */
+  MirLev2_0000,  /* 2010..201F */
+  MirLev2_0000,  /* 2020..202F */
+  MirLev2_2030,  /* 2030..203F */
+  MirLev2_2040,  /* 2040..204F */
+  MirLev2_0000,  /* 2050..205F */
+  MirLev2_0000,  /* 2060..206F */
+  MirLev2_2070,  /* 2070..207F */
+  MirLev2_2070,  /* 2080..208F */
+  MirLev2_0000,  /* 2090..209F */
+  MirLev2_0000,  /* 20A0..20AF */
+  MirLev2_0000,  /* 20B0..20BF */
+  MirLev2_0000,  /* 20C0..20CF */
+  MirLev2_0000,  /* 20D0..20DF */
+  MirLev2_0000,  /* 20E0..20EF */
+  MirLev2_0000,  /* 20F0..20FF */
+#define MirLev1_2200 0x50
+  MirLev2_2200,  /* 2200..220F */
+  MirLev2_2210,  /* 2210..221F */
+  MirLev2_0000,  /* 2220..222F */
+  MirLev2_2230,  /* 2230..223F */
+  MirLev2_2240,  /* 2240..224F */
+  MirLev2_2250,  /* 2250..225F */
+  MirLev2_2260,  /* 2260..226F */
+  MirLev2_2270,  /* 2270..227F */
+  MirLev2_2280,  /* 2280..228F */
+  MirLev2_2290,  /* 2290..229F */
+  MirLev2_22A0,  /* 22A0..22AF */
+  MirLev2_22B0,  /* 22B0..22BF */
+  MirLev2_22C0,  /* 22C0..22CF */
+  MirLev2_22D0,  /* 22D0..22DF */
+  MirLev2_22E0,  /* 22E0..22EF */
+  MirLev2_22F0,  /* 22F0..22FF */
+#define MirLev1_2300 0x60
+  MirLev2_2300,  /* 2300..230F */
+  MirLev2_0000,  /* 2310..231F */
+  MirLev2_2030,  /* 2320..232F */
+  MirLev2_0000,  /* 2330..233F */
+  MirLev2_0000,  /* 2340..234F */
+  MirLev2_0000,  /* 2350..235F */
+  MirLev2_0000,  /* 2360..236F */
+  MirLev2_0000,  /* 2370..237F */
+  MirLev2_0000,  /* 2380..238F */
+  MirLev2_0000,  /* 2390..239F */
+  MirLev2_0000,  /* 23A0..23AF */
+  MirLev2_0000,  /* 23B0..23BF */
+  MirLev2_0000,  /* 23C0..23CF */
+  MirLev2_0000,  /* 23D0..23DF */
+  MirLev2_0000,  /* 23E0..23EF */
+  MirLev2_0000,  /* 23F0..23FF */
+#define MirLev1_2700 0x70
+  MirLev2_0000,  /* 2700..270F */
+  MirLev2_0000,  /* 2710..271F */
+  MirLev2_0000,  /* 2720..272F */
+  MirLev2_0000,  /* 2730..273F */
+  MirLev2_0000,  /* 2740..274F */
+  MirLev2_0000,  /* 2750..275F */
+  MirLev2_2760,  /* 2760..276F */
+  MirLev2_2770,  /* 2770..277F */
+  MirLev2_0000,  /* 2780..278F */
+  MirLev2_0000,  /* 2790..279F */
+  MirLev2_0000,  /* 27A0..27AF */
+  MirLev2_0000,  /* 27B0..27BF */
+  MirLev2_27C0,  /* 27C0..27CF */
+  MirLev2_27D0,  /* 27D0..27DF */
+  MirLev2_27E0,  /* 27E0..27EF */
+  MirLev2_0000,  /* 27F0..27FF */
+#define MirLev1_2900 0x80
+  MirLev2_0000,  /* 2900..290F */
+  MirLev2_0000,  /* 2910..291F */
+  MirLev2_0000,  /* 2920..292F */
+  MirLev2_0000,  /* 2930..293F */
+  MirLev2_0000,  /* 2940..294F */
+  MirLev2_0000,  /* 2950..295F */
+  MirLev2_0000,  /* 2960..296F */
+  MirLev2_0000,  /* 2970..297F */
+  MirLev2_2980,  /* 2980..298F */
+  MirLev2_2990,  /* 2990..299F */
+  MirLev2_0000,  /* 29A0..29AF */
+  MirLev2_29B0,  /* 29B0..29BF */
+  MirLev2_29C0,  /* 29C0..29CF */
+  MirLev2_29D0,  /* 29D0..29DF */
+  MirLev2_0000,  /* 29E0..29EF */
+  MirLev2_29F0,  /* 29F0..29FF */
+#define MirLev1_2A00 0x90
+  MirLev2_0000,  /* 2A00..2A0F */
+  MirLev2_0000,  /* 2A10..2A1F */
+  MirLev2_2A20,  /* 2A20..2A2F */
+  MirLev2_2A30,  /* 2A30..2A3F */
+  MirLev2_0000,  /* 2A40..2A4F */
+  MirLev2_0000,  /* 2A50..2A5F */
+  MirLev2_2A60,  /* 2A60..2A6F */
+  MirLev2_2A70,  /* 2A70..2A7F */
+  MirLev2_2A80,  /* 2A80..2A8F */
+  MirLev2_2A90,  /* 2A90..2A9F */
+  MirLev2_2AA0,  /* 2AA0..2AAF */
+  MirLev2_2AB0,  /* 2AB0..2ABF */
+  MirLev2_2AC0,  /* 2AC0..2ACF */
+  MirLev2_2AD0,  /* 2AD0..2ADF */
+  MirLev2_2AE0,  /* 2AE0..2AEF */
+  MirLev2_2AF0,  /* 2AF0..2AFF */
+#define MirLev1_2E00 0xA0
+  MirLev2_2E00,  /* 2E00..2E0F */
+  MirLev2_2230,  /* 2E10..2E1F */
+  MirLev2_2E20,  /* 2E20..2E2F */
+  MirLev2_0000,  /* 2E30..2E3F */
+  MirLev2_0000,  /* 2E40..2E4F */
+  MirLev2_0000,  /* 2E50..2E5F */
+  MirLev2_0000,  /* 2E60..2E6F */
+  MirLev2_0000,  /* 2E70..2E7F */
+  MirLev2_0000,  /* 2E80..2E8F */
+  MirLev2_0000,  /* 2E90..2E9F */
+  MirLev2_0000,  /* 2EA0..2EAF */
+  MirLev2_0000,  /* 2EB0..2EBF */
+  MirLev2_0000,  /* 2EC0..2ECF */
+  MirLev2_0000,  /* 2ED0..2EDF */
+  MirLev2_0000,  /* 2EE0..2EEF */
+  MirLev2_0000,  /* 2EF0..2EFF */
+#define MirLev1_3000 0xB0
+  MirLev2_2760,  /* 3000..300F */
+  MirLev2_3010,  /* 3010..301F */
+  MirLev2_0000,  /* 3020..302F */
+  MirLev2_0000,  /* 3030..303F */
+  MirLev2_0000,  /* 3040..304F */
+  MirLev2_0000,  /* 3050..305F */
+  MirLev2_0000,  /* 3060..306F */
+  MirLev2_0000,  /* 3070..307F */
+  MirLev2_0000,  /* 3080..308F */
+  MirLev2_0000,  /* 3090..309F */
+  MirLev2_0000,  /* 30A0..30AF */
+  MirLev2_0000,  /* 30B0..30BF */
+  MirLev2_0000,  /* 30C0..30CF */
+  MirLev2_0000,  /* 30D0..30DF */
+  MirLev2_0000,  /* 30E0..30EF */
+  MirLev2_0000,  /* 30F0..30FF */
+#define MirLev1_FE00 0xC0
+  MirLev2_0000,  /* FE00..FE0F */
+  MirLev2_0000,  /* FE10..FE1F */
+  MirLev2_0000,  /* FE20..FE2F */
+  MirLev2_0000,  /* FE30..FE3F */
+  MirLev2_0000,  /* FE40..FE4F */
+  MirLev2_FE50,  /* FE50..FE5F */
+  MirLev2_2A60,  /* FE60..FE6F */
+  MirLev2_0000,  /* FE70..FE7F */
+  MirLev2_0000,  /* FE80..FE8F */
+  MirLev2_0000,  /* FE90..FE9F */
+  MirLev2_0000,  /* FEA0..FEAF */
+  MirLev2_0000,  /* FEB0..FEBF */
+  MirLev2_0000,  /* FEC0..FECF */
+  MirLev2_0000,  /* FED0..FEDF */
+  MirLev2_0000,  /* FEE0..FEEF */
+  MirLev2_0000,  /* FEF0..FEFF */
+#define MirLev1_FF00 0xD0
+  MirLev2_0020,  /* FF00..FF0F */
+  MirLev2_0030,  /* FF10..FF1F */
+  MirLev2_0000,  /* FF20..FF2F */
+  MirLev2_0050,  /* FF30..FF3F */
+  MirLev2_0000,  /* FF40..FF4F */
+  MirLev2_FF50,  /* FF50..FF5F */
+  MirLev2_FF60,  /* FF60..FF6F */
+  MirLev2_0000,  /* FF70..FF7F */
+  MirLev2_0000,  /* FF80..FF8F */
+  MirLev2_0000,  /* FF90..FF9F */
+  MirLev2_0000,  /* FFA0..FFAF */
+  MirLev2_0000,  /* FFB0..FFBF */
+  MirLev2_0000,  /* FFC0..FFCF */
+  MirLev2_0000,  /* FFD0..FFDF */
+  MirLev2_0000,  /* FFE0..FFEF */
+  MirLev2_0000,  /* FFF0..FFFF */
+};
+
+static const PACKTAB_UINT8 MirLev0[256*1] = {
+#define MirLev0_0000 0x0
+  MirLev1_0000,  /* 0000..00FF */
+  MirLev1_0100,  /* 0100..01FF */
+  MirLev1_0100,  /* 0200..02FF */
+  MirLev1_0100,  /* 0300..03FF */
+  MirLev1_0100,  /* 0400..04FF */
+  MirLev1_0100,  /* 0500..05FF */
+  MirLev1_0100,  /* 0600..06FF */
+  MirLev1_0100,  /* 0700..07FF */
+  MirLev1_0100,  /* 0800..08FF */
+  MirLev1_0100,  /* 0900..09FF */
+  MirLev1_0100,  /* 0A00..0AFF */
+  MirLev1_0100,  /* 0B00..0BFF */
+  MirLev1_0100,  /* 0C00..0CFF */
+  MirLev1_0100,  /* 0D00..0DFF */
+  MirLev1_0100,  /* 0E00..0EFF */
+  MirLev1_0F00,  /* 0F00..0FFF */
+  MirLev1_0100,  /* 1000..10FF */
+  MirLev1_0100,  /* 1100..11FF */
+  MirLev1_0100,  /* 1200..12FF */
+  MirLev1_0100,  /* 1300..13FF */
+  MirLev1_0100,  /* 1400..14FF */
+  MirLev1_0100,  /* 1500..15FF */
+  MirLev1_1600,  /* 1600..16FF */
+  MirLev1_0100,  /* 1700..17FF */
+  MirLev1_0100,  /* 1800..18FF */
+  MirLev1_0100,  /* 1900..19FF */
+  MirLev1_0100,  /* 1A00..1AFF */
+  MirLev1_0100,  /* 1B00..1BFF */
+  MirLev1_0100,  /* 1C00..1CFF */
+  MirLev1_0100,  /* 1D00..1DFF */
+  MirLev1_0100,  /* 1E00..1EFF */
+  MirLev1_0100,  /* 1F00..1FFF */
+  MirLev1_2000,  /* 2000..20FF */
+  MirLev1_0100,  /* 2100..21FF */
+  MirLev1_2200,  /* 2200..22FF */
+  MirLev1_2300,  /* 2300..23FF */
+  MirLev1_0100,  /* 2400..24FF */
+  MirLev1_0100,  /* 2500..25FF */
+  MirLev1_0100,  /* 2600..26FF */
+  MirLev1_2700,  /* 2700..27FF */
+  MirLev1_0100,  /* 2800..28FF */
+  MirLev1_2900,  /* 2900..29FF */
+  MirLev1_2A00,  /* 2A00..2AFF */
+  MirLev1_0100,  /* 2B00..2BFF */
+  MirLev1_0100,  /* 2C00..2CFF */
+  MirLev1_0100,  /* 2D00..2DFF */
+  MirLev1_2E00,  /* 2E00..2EFF */
+  MirLev1_0100,  /* 2F00..2FFF */
+  MirLev1_3000,  /* 3000..30FF */
+  MirLev1_0100,  /* 3100..31FF */
+  MirLev1_0100,  /* 3200..32FF */
+  MirLev1_0100,  /* 3300..33FF */
+  MirLev1_0100,  /* 3400..34FF */
+  MirLev1_0100,  /* 3500..35FF */
+  MirLev1_0100,  /* 3600..36FF */
+  MirLev1_0100,  /* 3700..37FF */
+  MirLev1_0100,  /* 3800..38FF */
+  MirLev1_0100,  /* 3900..39FF */
+  MirLev1_0100,  /* 3A00..3AFF */
+  MirLev1_0100,  /* 3B00..3BFF */
+  MirLev1_0100,  /* 3C00..3CFF */
+  MirLev1_0100,  /* 3D00..3DFF */
+  MirLev1_0100,  /* 3E00..3EFF */
+  MirLev1_0100,  /* 3F00..3FFF */
+  MirLev1_0100,  /* 4000..40FF */
+  MirLev1_0100,  /* 4100..41FF */
+  MirLev1_0100,  /* 4200..42FF */
+  MirLev1_0100,  /* 4300..43FF */
+  MirLev1_0100,  /* 4400..44FF */
+  MirLev1_0100,  /* 4500..45FF */
+  MirLev1_0100,  /* 4600..46FF */
+  MirLev1_0100,  /* 4700..47FF */
+  MirLev1_0100,  /* 4800..48FF */
+  MirLev1_0100,  /* 4900..49FF */
+  MirLev1_0100,  /* 4A00..4AFF */
+  MirLev1_0100,  /* 4B00..4BFF */
+  MirLev1_0100,  /* 4C00..4CFF */
+  MirLev1_0100,  /* 4D00..4DFF */
+  MirLev1_0100,  /* 4E00..4EFF */
+  MirLev1_0100,  /* 4F00..4FFF */
+  MirLev1_0100,  /* 5000..50FF */
+  MirLev1_0100,  /* 5100..51FF */
+  MirLev1_0100,  /* 5200..52FF */
+  MirLev1_0100,  /* 5300..53FF */
+  MirLev1_0100,  /* 5400..54FF */
+  MirLev1_0100,  /* 5500..55FF */
+  MirLev1_0100,  /* 5600..56FF */
+  MirLev1_0100,  /* 5700..57FF */
+  MirLev1_0100,  /* 5800..58FF */
+  MirLev1_0100,  /* 5900..59FF */
+  MirLev1_0100,  /* 5A00..5AFF */
+  MirLev1_0100,  /* 5B00..5BFF */
+  MirLev1_0100,  /* 5C00..5CFF */
+  MirLev1_0100,  /* 5D00..5DFF */
+  MirLev1_0100,  /* 5E00..5EFF */
+  MirLev1_0100,  /* 5F00..5FFF */
+  MirLev1_0100,  /* 6000..60FF */
+  MirLev1_0100,  /* 6100..61FF */
+  MirLev1_0100,  /* 6200..62FF */
+  MirLev1_0100,  /* 6300..63FF */
+  MirLev1_0100,  /* 6400..64FF */
+  MirLev1_0100,  /* 6500..65FF */
+  MirLev1_0100,  /* 6600..66FF */
+  MirLev1_0100,  /* 6700..67FF */
+  MirLev1_0100,  /* 6800..68FF */
+  MirLev1_0100,  /* 6900..69FF */
+  MirLev1_0100,  /* 6A00..6AFF */
+  MirLev1_0100,  /* 6B00..6BFF */
+  MirLev1_0100,  /* 6C00..6CFF */
+  MirLev1_0100,  /* 6D00..6DFF */
+  MirLev1_0100,  /* 6E00..6EFF */
+  MirLev1_0100,  /* 6F00..6FFF */
+  MirLev1_0100,  /* 7000..70FF */
+  MirLev1_0100,  /* 7100..71FF */
+  MirLev1_0100,  /* 7200..72FF */
+  MirLev1_0100,  /* 7300..73FF */
+  MirLev1_0100,  /* 7400..74FF */
+  MirLev1_0100,  /* 7500..75FF */
+  MirLev1_0100,  /* 7600..76FF */
+  MirLev1_0100,  /* 7700..77FF */
+  MirLev1_0100,  /* 7800..78FF */
+  MirLev1_0100,  /* 7900..79FF */
+  MirLev1_0100,  /* 7A00..7AFF */
+  MirLev1_0100,  /* 7B00..7BFF */
+  MirLev1_0100,  /* 7C00..7CFF */
+  MirLev1_0100,  /* 7D00..7DFF */
+  MirLev1_0100,  /* 7E00..7EFF */
+  MirLev1_0100,  /* 7F00..7FFF */
+  MirLev1_0100,  /* 8000..80FF */
+  MirLev1_0100,  /* 8100..81FF */
+  MirLev1_0100,  /* 8200..82FF */
+  MirLev1_0100,  /* 8300..83FF */
+  MirLev1_0100,  /* 8400..84FF */
+  MirLev1_0100,  /* 8500..85FF */
+  MirLev1_0100,  /* 8600..86FF */
+  MirLev1_0100,  /* 8700..87FF */
+  MirLev1_0100,  /* 8800..88FF */
+  MirLev1_0100,  /* 8900..89FF */
+  MirLev1_0100,  /* 8A00..8AFF */
+  MirLev1_0100,  /* 8B00..8BFF */
+  MirLev1_0100,  /* 8C00..8CFF */
+  MirLev1_0100,  /* 8D00..8DFF */
+  MirLev1_0100,  /* 8E00..8EFF */
+  MirLev1_0100,  /* 8F00..8FFF */
+  MirLev1_0100,  /* 9000..90FF */
+  MirLev1_0100,  /* 9100..91FF */
+  MirLev1_0100,  /* 9200..92FF */
+  MirLev1_0100,  /* 9300..93FF */
+  MirLev1_0100,  /* 9400..94FF */
+  MirLev1_0100,  /* 9500..95FF */
+  MirLev1_0100,  /* 9600..96FF */
+  MirLev1_0100,  /* 9700..97FF */
+  MirLev1_0100,  /* 9800..98FF */
+  MirLev1_0100,  /* 9900..99FF */
+  MirLev1_0100,  /* 9A00..9AFF */
+  MirLev1_0100,  /* 9B00..9BFF */
+  MirLev1_0100,  /* 9C00..9CFF */
+  MirLev1_0100,  /* 9D00..9DFF */
+  MirLev1_0100,  /* 9E00..9EFF */
+  MirLev1_0100,  /* 9F00..9FFF */
+  MirLev1_0100,  /* A000..A0FF */
+  MirLev1_0100,  /* A100..A1FF */
+  MirLev1_0100,  /* A200..A2FF */
+  MirLev1_0100,  /* A300..A3FF */
+  MirLev1_0100,  /* A400..A4FF */
+  MirLev1_0100,  /* A500..A5FF */
+  MirLev1_0100,  /* A600..A6FF */
+  MirLev1_0100,  /* A700..A7FF */
+  MirLev1_0100,  /* A800..A8FF */
+  MirLev1_0100,  /* A900..A9FF */
+  MirLev1_0100,  /* AA00..AAFF */
+  MirLev1_0100,  /* AB00..ABFF */
+  MirLev1_0100,  /* AC00..ACFF */
+  MirLev1_0100,  /* AD00..ADFF */
+  MirLev1_0100,  /* AE00..AEFF */
+  MirLev1_0100,  /* AF00..AFFF */
+  MirLev1_0100,  /* B000..B0FF */
+  MirLev1_0100,  /* B100..B1FF */
+  MirLev1_0100,  /* B200..B2FF */
+  MirLev1_0100,  /* B300..B3FF */
+  MirLev1_0100,  /* B400..B4FF */
+  MirLev1_0100,  /* B500..B5FF */
+  MirLev1_0100,  /* B600..B6FF */
+  MirLev1_0100,  /* B700..B7FF */
+  MirLev1_0100,  /* B800..B8FF */
+  MirLev1_0100,  /* B900..B9FF */
+  MirLev1_0100,  /* BA00..BAFF */
+  MirLev1_0100,  /* BB00..BBFF */
+  MirLev1_0100,  /* BC00..BCFF */
+  MirLev1_0100,  /* BD00..BDFF */
+  MirLev1_0100,  /* BE00..BEFF */
+  MirLev1_0100,  /* BF00..BFFF */
+  MirLev1_0100,  /* C000..C0FF */
+  MirLev1_0100,  /* C100..C1FF */
+  MirLev1_0100,  /* C200..C2FF */
+  MirLev1_0100,  /* C300..C3FF */
+  MirLev1_0100,  /* C400..C4FF */
+  MirLev1_0100,  /* C500..C5FF */
+  MirLev1_0100,  /* C600..C6FF */
+  MirLev1_0100,  /* C700..C7FF */
+  MirLev1_0100,  /* C800..C8FF */
+  MirLev1_0100,  /* C900..C9FF */
+  MirLev1_0100,  /* CA00..CAFF */
+  MirLev1_0100,  /* CB00..CBFF */
+  MirLev1_0100,  /* CC00..CCFF */
+  MirLev1_0100,  /* CD00..CDFF */
+  MirLev1_0100,  /* CE00..CEFF */
+  MirLev1_0100,  /* CF00..CFFF */
+  MirLev1_0100,  /* D000..D0FF */
+  MirLev1_0100,  /* D100..D1FF */
+  MirLev1_0100,  /* D200..D2FF */
+  MirLev1_0100,  /* D300..D3FF */
+  MirLev1_0100,  /* D400..D4FF */
+  MirLev1_0100,  /* D500..D5FF */
+  MirLev1_0100,  /* D600..D6FF */
+  MirLev1_0100,  /* D700..D7FF */
+  MirLev1_0100,  /* D800..D8FF */
+  MirLev1_0100,  /* D900..D9FF */
+  MirLev1_0100,  /* DA00..DAFF */
+  MirLev1_0100,  /* DB00..DBFF */
+  MirLev1_0100,  /* DC00..DCFF */
+  MirLev1_0100,  /* DD00..DDFF */
+  MirLev1_0100,  /* DE00..DEFF */
+  MirLev1_0100,  /* DF00..DFFF */
+  MirLev1_0100,  /* E000..E0FF */
+  MirLev1_0100,  /* E100..E1FF */
+  MirLev1_0100,  /* E200..E2FF */
+  MirLev1_0100,  /* E300..E3FF */
+  MirLev1_0100,  /* E400..E4FF */
+  MirLev1_0100,  /* E500..E5FF */
+  MirLev1_0100,  /* E600..E6FF */
+  MirLev1_0100,  /* E700..E7FF */
+  MirLev1_0100,  /* E800..E8FF */
+  MirLev1_0100,  /* E900..E9FF */
+  MirLev1_0100,  /* EA00..EAFF */
+  MirLev1_0100,  /* EB00..EBFF */
+  MirLev1_0100,  /* EC00..ECFF */
+  MirLev1_0100,  /* ED00..EDFF */
+  MirLev1_0100,  /* EE00..EEFF */
+  MirLev1_0100,  /* EF00..EFFF */
+  MirLev1_0100,  /* F000..F0FF */
+  MirLev1_0100,  /* F100..F1FF */
+  MirLev1_0100,  /* F200..F2FF */
+  MirLev1_0100,  /* F300..F3FF */
+  MirLev1_0100,  /* F400..F4FF */
+  MirLev1_0100,  /* F500..F5FF */
+  MirLev1_0100,  /* F600..F6FF */
+  MirLev1_0100,  /* F700..F7FF */
+  MirLev1_0100,  /* F800..F8FF */
+  MirLev1_0100,  /* F900..F9FF */
+  MirLev1_0100,  /* FA00..FAFF */
+  MirLev1_0100,  /* FB00..FBFF */
+  MirLev1_0100,  /* FC00..FCFF */
+  MirLev1_0100,  /* FD00..FDFF */
+  MirLev1_FE00,  /* FE00..FEFF */
+  MirLev1_FF00,  /* FF00..FFFF */
+};
+
+/* *INDENT-ON* */
+
+#define GLIB_GET_MIRRORING_DELTA(x) \
+	((x) >= 0x10000 ? 0 :  \
+	MirLev3[((x) & 0x03) + \
+	MirLev2[((x) >> 2 & 0x03) + \
+	MirLev1[((x) >> 4 & 0x0f) + \
+	MirLev0[((x) >> 8)]]]])
+
+#undef PACKTAB_UINT8
+#undef PACKTAB_UINT16
+#undef PACKTAB_UINT32
+
+#define GLIB_GET_MIRRORING(x) ((x) + GLIB_GET_MIRRORING_DELTA(x))
+
+/* End of generated gmirroringtable.h */
diff --git a/glib/gnode.h b/glib/gnode.h
new file mode 100644
index 0000000..f68e8b3
--- /dev/null
+++ b/glib/gnode.h
@@ -0,0 +1,288 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_NODE_H__
+#define __G_NODE_H__
+
+#include <glib/gmem.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GNode		GNode;
+
+/* Tree traverse flags */
+typedef enum
+{
+  G_TRAVERSE_LEAVES     = 1 << 0,
+  G_TRAVERSE_NON_LEAVES = 1 << 1,
+  G_TRAVERSE_ALL        = G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES,
+  G_TRAVERSE_MASK       = 0x03,
+  G_TRAVERSE_LEAFS      = G_TRAVERSE_LEAVES,
+  G_TRAVERSE_NON_LEAFS  = G_TRAVERSE_NON_LEAVES
+} GTraverseFlags;
+
+/* Tree traverse orders */
+typedef enum
+{
+  G_IN_ORDER,
+  G_PRE_ORDER,
+  G_POST_ORDER,
+  G_LEVEL_ORDER
+} GTraverseType;
+
+typedef gboolean	(*GNodeTraverseFunc)	(GNode	       *node,
+						 gpointer	data);
+typedef void		(*GNodeForeachFunc)	(GNode	       *node,
+						 gpointer	data);
+
+/**
+ * GCopyFunc:
+ * @src: A pointer to the data which should be copied
+ * @data: Additional data
+ *
+ * A function of this signature is used to copy the node data 
+ * when doing a deep-copy of a tree.
+ *
+ * Returns: A pointer to the copy
+ *
+ * Since: 2.4
+ */
+typedef gpointer	(*GCopyFunc)            (gconstpointer  src,
+                                                 gpointer       data);
+
+/* N-way tree implementation
+ */
+struct _GNode
+{
+  gpointer data;
+  GNode	  *next;
+  GNode	  *prev;
+  GNode	  *parent;
+  GNode	  *children;
+};
+
+/**
+ * G_NODE_IS_ROOT:
+ * @node: a #GNode
+ *
+ * Returns %TRUE if a #GNode is the root of a tree.
+ *
+ * Returns: %TRUE if the #GNode is the root of a tree 
+ *     (i.e. it has no parent or siblings)
+ */
+#define	 G_NODE_IS_ROOT(node)	(((GNode*) (node))->parent == NULL && \
+				 ((GNode*) (node))->prev == NULL && \
+				 ((GNode*) (node))->next == NULL)
+
+/**
+ * G_NODE_IS_LEAF:
+ * @node: a #GNode
+ *
+ * Returns %TRUE if a #GNode is a leaf node.
+ *
+ * Returns: %TRUE if the #GNode is a leaf node 
+ *     (i.e. it has no children)
+ */
+#define	 G_NODE_IS_LEAF(node)	(((GNode*) (node))->children == NULL)
+
+GNode*	 g_node_new		(gpointer	   data);
+void	 g_node_destroy		(GNode		  *root);
+void	 g_node_unlink		(GNode		  *node);
+GNode*   g_node_copy_deep       (GNode            *node,
+				 GCopyFunc         copy_func,
+				 gpointer          data);
+GNode*   g_node_copy            (GNode            *node);
+GNode*	 g_node_insert		(GNode		  *parent,
+				 gint		   position,
+				 GNode		  *node);
+GNode*	 g_node_insert_before	(GNode		  *parent,
+				 GNode		  *sibling,
+				 GNode		  *node);
+GNode*   g_node_insert_after    (GNode            *parent,
+				 GNode            *sibling,
+				 GNode            *node); 
+GNode*	 g_node_prepend		(GNode		  *parent,
+				 GNode		  *node);
+guint	 g_node_n_nodes		(GNode		  *root,
+				 GTraverseFlags	   flags);
+GNode*	 g_node_get_root	(GNode		  *node);
+gboolean g_node_is_ancestor	(GNode		  *node,
+				 GNode		  *descendant);
+guint	 g_node_depth		(GNode		  *node);
+GNode*	 g_node_find		(GNode		  *root,
+				 GTraverseType	   order,
+				 GTraverseFlags	   flags,
+				 gpointer	   data);
+
+/* convenience macros */
+/**
+ * g_node_append:
+ * @parent: the #GNode to place the new #GNode under
+ * @node: the #GNode to insert
+ *
+ * Inserts a #GNode as the last child of the given parent.
+ *
+ * Returns: the inserted #GNode
+ */
+#define g_node_append(parent, node)				\
+     g_node_insert_before ((parent), NULL, (node))
+
+/**
+ * g_node_insert_data:
+ * @parent: the #GNode to place the new #GNode under
+ * @position: the position to place the new #GNode at. If position is -1, 
+ *     the new #GNode is inserted as the last child of @parent
+ * @data: the data for the new #GNode
+ *
+ * Inserts a new #GNode at the given position.
+ *
+ * Returns: the new #GNode
+ */
+#define	g_node_insert_data(parent, position, data)		\
+     g_node_insert ((parent), (position), g_node_new (data))
+
+/**
+ * g_node_insert_data_before:
+ * @parent: the #GNode to place the new #GNode under
+ * @sibling: the sibling #GNode to place the new #GNode before
+ * @data: the data for the new #GNode
+ *
+ * Inserts a new #GNode before the given sibling.
+ *
+ * Returns: the new #GNode
+ */
+#define	g_node_insert_data_before(parent, sibling, data)	\
+     g_node_insert_before ((parent), (sibling), g_node_new (data))
+
+/**
+ * g_node_prepend_data:
+ * @parent: the #GNode to place the new #GNode under
+ * @data: the data for the new #GNode
+ *
+ * Inserts a new #GNode as the first child of the given parent.
+ *
+ * Returns: the new #GNode
+ */
+#define	g_node_prepend_data(parent, data)			\
+     g_node_prepend ((parent), g_node_new (data))
+
+/**
+ * g_node_append_data:
+ * @parent: the #GNode to place the new #GNode under
+ * @data: the data for the new #GNode
+ *
+ * Inserts a new #GNode as the last child of the given parent.
+ *
+ * Returns: the new #GNode
+ */
+#define	g_node_append_data(parent, data)			\
+     g_node_insert_before ((parent), NULL, g_node_new (data))
+
+/* traversal function, assumes that `node' is root
+ * (only traverses `node' and its subtree).
+ * this function is just a high level interface to
+ * low level traversal functions, optimized for speed.
+ */
+void	 g_node_traverse	(GNode		  *root,
+				 GTraverseType	   order,
+				 GTraverseFlags	   flags,
+				 gint		   max_depth,
+				 GNodeTraverseFunc func,
+				 gpointer	   data);
+
+/* return the maximum tree height starting with `node', this is an expensive
+ * operation, since we need to visit all nodes. this could be shortened by
+ * adding `guint height' to struct _GNode, but then again, this is not very
+ * often needed, and would make g_node_insert() more time consuming.
+ */
+guint	 g_node_max_height	 (GNode *root);
+
+void	 g_node_children_foreach (GNode		  *node,
+				  GTraverseFlags   flags,
+				  GNodeForeachFunc func,
+				  gpointer	   data);
+void	 g_node_reverse_children (GNode		  *node);
+guint	 g_node_n_children	 (GNode		  *node);
+GNode*	 g_node_nth_child	 (GNode		  *node,
+				  guint		   n);
+GNode*	 g_node_last_child	 (GNode		  *node);
+GNode*	 g_node_find_child	 (GNode		  *node,
+				  GTraverseFlags   flags,
+				  gpointer	   data);
+gint	 g_node_child_position	 (GNode		  *node,
+				  GNode		  *child);
+gint	 g_node_child_index	 (GNode		  *node,
+				  gpointer	   data);
+
+GNode*	 g_node_first_sibling	 (GNode		  *node);
+GNode*	 g_node_last_sibling	 (GNode		  *node);
+
+/**
+ * g_node_prev_sibling:
+ * @node: a #GNode
+ *
+ * Gets the previous sibling of a #GNode.
+ *
+ * Returns: the previous sibling of @node, or %NULL if @node is %NULL
+ */
+#define	 g_node_prev_sibling(node)	((node) ? \
+					 ((GNode*) (node))->prev : NULL)
+
+/**
+ * g_node_next_sibling:
+ * @node: a #GNode
+ *
+ * Gets the next sibling of a #GNode.
+ *
+ * Returns: the next sibling of @node, or %NULL if @node is %NULL
+ */
+#define	 g_node_next_sibling(node)	((node) ? \
+					 ((GNode*) (node))->next : NULL)
+
+/**
+ * g_node_first_child:
+ * @node: a #GNode
+ *
+ * Gets the first child of a #GNode.
+ *
+ * Returns: the first child of @node, or %NULL if @node is %NULL 
+ *     or has no children
+ */
+#define	 g_node_first_child(node)	((node) ? \
+					 ((GNode*) (node))->children : NULL)
+
+#ifndef G_DISABLE_DEPRECATED
+void     g_node_push_allocator  (gpointer          dummy);
+void     g_node_pop_allocator   (void);
+#endif
+
+G_END_DECLS
+
+#endif /* __G_NODE_H__ */
diff --git a/glib/gnulib/Makefile.am b/glib/gnulib/Makefile.am
new file mode 100644
index 0000000..5f5ef06
--- /dev/null
+++ b/glib/gnulib/Makefile.am
@@ -0,0 +1,22 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/glib -DG_LOG_DOMAIN=\"GLib\" \
+	$(GLIB_DEBUG_FLAGS) -DG_DISABLE_DEPRECATED -DGLIB_COMPILATION 
+
+noinst_LTLIBRARIES = libgnulib.la
+
+libgnulib_la_SOURCES = 	\
+	asnprintf.c \
+	printf-args.c \
+	printf-args.h \
+	printf-parse.c \
+	printf-parse.h \
+	vasnprintf.c \
+	vasnprintf.h \
+	printf.c \
+	printf.h \
+	g-gnulib.h
+
+
+EXTRA_DIST += makefile.msc
diff --git a/glib/gnulib/README b/glib/gnulib/README
new file mode 100644
index 0000000..78e09b9
--- /dev/null
+++ b/glib/gnulib/README
@@ -0,0 +1,44 @@
+The files
+ 
+ asnprintf.c 
+ printf-args.c
+ printf-args.h
+ printf-parse.c
+ printf-parse.h
+ vasnprintf.c
+ vasnprintf.h
+
+are taken from the vasnprintf module of the GNUlib package, which can
+be found at: 
+
+ http://www.gnu.org/software/gnulib/
+
+All files have been modified to include g-gnulib.h. 
+
+vasnprintf.c has also been modified to include support for long long 
+printing if the system printf doesn't. This code is protected by 
+#ifndef HAVE_LONG_LONG_FORMAT.
+
+Code has been added to printf-args.[ch], printf-parse.c and vasnprintf.c
+to support printing of __int64 values with the I64 format modifier. This
+is protected by #ifdef HAVE_INT64_AND_I64.
+
+The files
+
+ printf.h 
+ printf.c
+ g-gnulib.h
+
+have been written by me. printf.[hc] contain implementations of the  
+remaining functions in the printf family based on vasnprintf. 
+g-gnulib.h is included by all source files in order to move all
+exported functions to the _g_gnulib namespace, replace malloc by
+g_malloc and make sure that snprintf is only used if it implements 
+C99 return value semantics. 
+
+Matthias Clasen
+November 1, 2003
+
+
+
+
diff --git a/glib/gnulib/asnprintf.c b/glib/gnulib/asnprintf.c
new file mode 100644
index 0000000..765d98c
--- /dev/null
+++ b/glib/gnulib/asnprintf.c
@@ -0,0 +1,40 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "g-gnulib.h"
+
+/* Specification.  */
+#include "vasnprintf.h"
+
+#include <stdarg.h>
+
+char *
+asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+{
+  va_list args;
+  char *result;
+
+  va_start (args, format);
+  result = vasnprintf (resultbuf, lengthp, format, args);
+  va_end (args);
+  return result;
+}
diff --git a/glib/gnulib/g-gnulib.h b/glib/gnulib/g-gnulib.h
new file mode 100644
index 0000000..6dbf2e9
--- /dev/null
+++ b/glib/gnulib/g-gnulib.h
@@ -0,0 +1,50 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2003  Matthias Clasen
+ *
+ * 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 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.
+ */
+#ifndef __G_GNULIB_H__
+
+#include "config.h"
+#include <stdlib.h>
+#include "glib/glib.h"
+#include "glib/galias.h"
+
+/* Private namespace for gnulib functions */
+#define asnprintf        _g_gnulib_asnprintf
+#define vasnprintf       _g_gnulib_vasnprintf
+#define printf_parse     _g_gnulib_printf_parse
+#define printf_fetchargs _g_gnulib_printf_fetchargs
+
+/* Use GLib memory allocation */
+#undef malloc
+#undef realloc
+#undef free
+#define malloc  g_malloc
+#define realloc g_realloc
+#define free    g_free
+
+/* Ensure only C99 snprintf gets used */
+#undef HAVE_SNPRINTF
+#ifdef HAVE_C99_SNPRINTF
+#define HAVE_SNPRINTF 1
+#else
+#define HAVE_SNPRINTF 0
+#endif
+
+
+#endif  /* __G_GNULIB_H__ */
+
diff --git a/glib/gnulib/makefile.msc b/glib/gnulib/makefile.msc
new file mode 100644
index 0000000..da2b4cf
--- /dev/null
+++ b/glib/gnulib/makefile.msc
@@ -0,0 +1,18 @@
+TOP = ..\..\..
+!INCLUDE ..\..\build\win32\make.msc
+
+INCLUDES = -I ..\.. -I ..
+DEFINES = -DHAVE_CONFIG_H -DHAVE_LONG_LONG_FORMAT
+
+OBJECTS = \
+	asnprintf.obj \
+	printf.obj \
+	printf-args.obj \
+	printf-parse.obj \
+	vasnprintf.obj
+
+all : gnulib.lib
+
+gnulib.lib : $(OBJECTS)
+	lib -out:gnulib.lib $(OBJECTS)
+
diff --git a/glib/gnulib/printf-args.c b/glib/gnulib/printf-args.c
new file mode 100644
index 0000000..75a2a54
--- /dev/null
+++ b/glib/gnulib/printf-args.c
@@ -0,0 +1,133 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "g-gnulib.h"
+
+/* Specification.  */
+#include "printf-args.h"
+
+#ifdef STATIC
+STATIC
+#endif
+int
+printf_fetchargs (va_list args, arguments *a)
+{
+  unsigned int i;
+  argument *ap;
+
+  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+    switch (ap->type)
+      {
+      case TYPE_SCHAR:
+	ap->a.a_schar = va_arg (args, /*signed char*/ int);
+	break;
+      case TYPE_UCHAR:
+	ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+	break;
+      case TYPE_SHORT:
+	ap->a.a_short = va_arg (args, /*short*/ int);
+	break;
+      case TYPE_USHORT:
+	ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+	break;
+      case TYPE_INT:
+	ap->a.a_int = va_arg (args, int);
+	break;
+      case TYPE_UINT:
+	ap->a.a_uint = va_arg (args, unsigned int);
+	break;
+      case TYPE_LONGINT:
+	ap->a.a_longint = va_arg (args, long int);
+	break;
+      case TYPE_ULONGINT:
+	ap->a.a_ulongint = va_arg (args, unsigned long int);
+	break;
+#ifdef HAVE_LONG_LONG
+      case TYPE_LONGLONGINT:
+	ap->a.a_longlongint = va_arg (args, long long int);
+	break;
+      case TYPE_ULONGLONGINT:
+	ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+	break;
+#endif
+#ifdef HAVE_INT64_AND_I64
+      case TYPE_INT64:
+	ap->a.a_int64 = va_arg (args, __int64);
+	break;
+      case TYPE_UINT64:
+	ap->a.a_uint64 = va_arg (args, unsigned __int64);
+	break;
+#endif
+      case TYPE_DOUBLE:
+	ap->a.a_double = va_arg (args, double);
+	break;
+#ifdef HAVE_LONG_DOUBLE
+      case TYPE_LONGDOUBLE:
+	ap->a.a_longdouble = va_arg (args, long double);
+	break;
+#endif
+      case TYPE_CHAR:
+	ap->a.a_char = va_arg (args, int);
+	break;
+#ifdef HAVE_WINT_T
+      case TYPE_WIDE_CHAR:
+#ifdef _WIN32
+	ap->a.a_wide_char = va_arg (args, int);
+#else
+	ap->a.a_wide_char = va_arg (args, wint_t);
+#endif
+	break;
+#endif
+      case TYPE_STRING:
+	ap->a.a_string = va_arg (args, const char *);
+	break;
+#ifdef HAVE_WCHAR_T
+      case TYPE_WIDE_STRING:
+	ap->a.a_wide_string = va_arg (args, const wchar_t *);
+	break;
+#endif
+      case TYPE_POINTER:
+	ap->a.a_pointer = va_arg (args, void *);
+	break;
+      case TYPE_COUNT_SCHAR_POINTER:
+	ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+	break;
+      case TYPE_COUNT_SHORT_POINTER:
+	ap->a.a_count_short_pointer = va_arg (args, short *);
+	break;
+      case TYPE_COUNT_INT_POINTER:
+	ap->a.a_count_int_pointer = va_arg (args, int *);
+	break;
+      case TYPE_COUNT_LONGINT_POINTER:
+	ap->a.a_count_longint_pointer = va_arg (args, long int *);
+	break;
+#ifdef HAVE_LONG_LONG
+      case TYPE_COUNT_LONGLONGINT_POINTER:
+	ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+	break;
+#endif
+      default:
+	/* Unknown type.  */
+	return -1;
+      }
+  return 0;
+}
diff --git a/glib/gnulib/printf-args.h b/glib/gnulib/printf-args.h
new file mode 100644
index 0000000..0825675
--- /dev/null
+++ b/glib/gnulib/printf-args.h
@@ -0,0 +1,142 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* Get wchar_t.  */
+#ifdef HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t.  */
+#ifdef HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+  TYPE_NONE,
+  TYPE_SCHAR,
+  TYPE_UCHAR,
+  TYPE_SHORT,
+  TYPE_USHORT,
+  TYPE_INT,
+  TYPE_UINT,
+  TYPE_LONGINT,
+  TYPE_ULONGINT,
+#ifdef HAVE_LONG_LONG
+  TYPE_LONGLONGINT,
+  TYPE_ULONGLONGINT,
+#endif
+#ifdef HAVE_INT64_AND_I64
+  TYPE_INT64,
+  TYPE_UINT64,
+#endif
+  TYPE_DOUBLE,
+#ifdef HAVE_LONG_DOUBLE
+  TYPE_LONGDOUBLE,
+#endif
+  TYPE_CHAR,
+#ifdef HAVE_WINT_T
+  TYPE_WIDE_CHAR,
+#endif
+  TYPE_STRING,
+#ifdef HAVE_WCHAR_T
+  TYPE_WIDE_STRING,
+#endif
+  TYPE_POINTER,
+  TYPE_COUNT_SCHAR_POINTER,
+  TYPE_COUNT_SHORT_POINTER,
+  TYPE_COUNT_INT_POINTER,
+  TYPE_COUNT_LONGINT_POINTER
+#ifdef HAVE_LONG_LONG
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+  arg_type type;
+  union
+  {
+    signed char			a_schar;
+    unsigned char		a_uchar;
+    short			a_short;
+    unsigned short		a_ushort;
+    int				a_int;
+    unsigned int		a_uint;
+    long int			a_longint;
+    unsigned long int		a_ulongint;
+#ifdef HAVE_LONG_LONG
+    long long int		a_longlongint;
+    unsigned long long int	a_ulonglongint;
+#endif
+#ifdef HAVE_INT64_AND_I64
+    __int64                     a_int64;
+    unsigned __int64            a_uint64;
+#endif
+    float			a_float;
+    double			a_double;
+#ifdef HAVE_LONG_DOUBLE
+    long double			a_longdouble;
+#endif
+    int				a_char;
+#ifdef HAVE_WINT_T
+    wint_t			a_wide_char;
+#endif
+    const char*			a_string;
+#ifdef HAVE_WCHAR_T
+    const wchar_t*		a_wide_string;
+#endif
+    void*			a_pointer;
+    signed char *		a_count_schar_pointer;
+    short *			a_count_short_pointer;
+    int *			a_count_int_pointer;
+    long int *			a_count_longint_pointer;
+#ifdef HAVE_LONG_LONG
+    long long int *		a_count_longlongint_pointer;
+#endif
+  }
+  a;
+}
+argument;
+
+typedef struct
+{
+  unsigned int count;
+  argument *arg;
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_fetchargs (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/glib/gnulib/printf-parse.c b/glib/gnulib/printf-parse.c
new file mode 100644
index 0000000..961b081
--- /dev/null
+++ b/glib/gnulib/printf-parse.c
@@ -0,0 +1,498 @@
+/* Formatted output to strings.
+   Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "g-gnulib.h"
+
+/* Specification.  */
+#include "printf-parse.h"
+
+/* Get size_t, NULL.  */
+#include <stddef.h>
+
+/* Get intmax_t.  */
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+
+/* malloc(), realloc(), free().  */
+#include <stdlib.h>
+
+#ifdef STATIC
+STATIC
+#endif
+int
+printf_parse (const char *format, char_directives *d, arguments *a)
+{
+  const char *cp = format;		/* pointer into format */
+  int arg_posn = 0;		/* number of regular arguments consumed */
+  unsigned int d_allocated;		/* allocated elements of d->dir */
+  unsigned int a_allocated;		/* allocated elements of a->arg */
+  unsigned int max_width_length = 0;
+  unsigned int max_precision_length = 0;
+
+  d->count = 0;
+  d_allocated = 1;
+  d->dir = malloc (d_allocated * sizeof (char_directive));
+  if (d->dir == NULL)
+    /* Out of memory.  */
+    return -1;
+
+  a->count = 0;
+  a_allocated = 0;
+  a->arg = NULL;
+
+#define REGISTER_ARG(_index_,_type_) \
+  {									\
+    unsigned int n = (_index_);						\
+    if (n >= a_allocated)						\
+      {									\
+	argument *memory;						\
+	a_allocated = 2 * a_allocated;					\
+	if (a_allocated <= n)						\
+	  a_allocated = n + 1;						\
+	memory = (a->arg						\
+		  ? realloc (a->arg, a_allocated * sizeof (argument))	\
+		  : malloc (a_allocated * sizeof (argument)));		\
+	if (memory == NULL)						\
+	  /* Out of memory.  */						\
+	  goto error;							\
+	a->arg = memory;						\
+      }									\
+    while (a->count <= n)						\
+      a->arg[a->count++].type = TYPE_NONE;				\
+    if (a->arg[n].type == TYPE_NONE)					\
+      a->arg[n].type = (_type_);					\
+    else if (a->arg[n].type != (_type_))				\
+      /* Ambiguous type for positional argument.  */			\
+      goto error;							\
+  }
+
+  while (*cp != '\0')
+    {
+      char c = *cp++;
+      if (c == '%')
+	{
+	  int arg_index = -1;
+	  char_directive *dp = &d->dir[d->count];/* pointer to next directive */
+
+	  /* Initialize the next directive.  */
+	  dp->dir_start = cp - 1;
+	  dp->flags = 0;
+	  dp->width_start = NULL;
+	  dp->width_end = NULL;
+	  dp->width_arg_index = -1;
+	  dp->precision_start = NULL;
+	  dp->precision_end = NULL;
+	  dp->precision_arg_index = -1;
+	  dp->arg_index = -1;
+
+	  /* Test for positional argument.  */
+	  if (*cp >= '0' && *cp <= '9')
+	    {
+	      const char *np;
+
+	      for (np = cp; *np >= '0' && *np <= '9'; np++)
+		;
+	      if (*np == '$')
+		{
+		  unsigned int n = 0;
+
+		  for (np = cp; *np >= '0' && *np <= '9'; np++)
+		    n = 10 * n + (*np - '0');
+		  if (n == 0)
+		    /* Positional argument 0.  */
+		    goto error;
+		  arg_index = n - 1;
+		  cp = np + 1;
+		}
+	    }
+
+	  /* Read the flags.  */
+	  for (;;)
+	    {
+	      if (*cp == '\'')
+		{
+		  dp->flags |= FLAG_GROUP;
+		  cp++;
+		}
+	      else if (*cp == '-')
+		{
+		  dp->flags |= FLAG_LEFT;
+		  cp++;
+		}
+	      else if (*cp == '+')
+		{
+		  dp->flags |= FLAG_SHOWSIGN;
+		  cp++;
+		}
+	      else if (*cp == ' ')
+		{
+		  dp->flags |= FLAG_SPACE;
+		  cp++;
+		}
+	      else if (*cp == '#')
+		{
+		  dp->flags |= FLAG_ALT;
+		  cp++;
+		}
+	      else if (*cp == '0')
+		{
+		  dp->flags |= FLAG_ZERO;
+		  cp++;
+		}
+	      else
+		break;
+	    }
+
+	  /* Parse the field width.  */
+	  if (*cp == '*')
+	    {
+	      dp->width_start = cp;
+	      cp++;
+	      dp->width_end = cp;
+	      if (max_width_length < 1)
+		max_width_length = 1;
+
+	      /* Test for positional argument.  */
+	      if (*cp >= '0' && *cp <= '9')
+		{
+		  const char *np;
+
+		  for (np = cp; *np >= '0' && *np <= '9'; np++)
+		    ;
+		  if (*np == '$')
+		    {
+		      unsigned int n = 0;
+
+		      for (np = cp; *np >= '0' && *np <= '9'; np++)
+			n = 10 * n + (*np - '0');
+		      if (n == 0)
+			/* Positional argument 0.  */
+			goto error;
+		      dp->width_arg_index = n - 1;
+		      cp = np + 1;
+		    }
+		}
+	      if (dp->width_arg_index < 0)
+		dp->width_arg_index = arg_posn++;
+	      REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+	    }
+	  else if (*cp >= '0' && *cp <= '9')
+	    {
+	      unsigned int width_length;
+
+	      dp->width_start = cp;
+	      for (; *cp >= '0' && *cp <= '9'; cp++)
+		;
+	      dp->width_end = cp;
+	      width_length = dp->width_end - dp->width_start;
+	      if (max_width_length < width_length)
+		max_width_length = width_length;
+	    }
+
+	  /* Parse the precision.  */
+	  if (*cp == '.')
+	    {
+	      cp++;
+	      if (*cp == '*')
+		{
+		  dp->precision_start = cp - 1;
+		  cp++;
+		  dp->precision_end = cp;
+		  if (max_precision_length < 2)
+		    max_precision_length = 2;
+
+		  /* Test for positional argument.  */
+		  if (*cp >= '0' && *cp <= '9')
+		    {
+		      const char *np;
+
+		      for (np = cp; *np >= '0' && *np <= '9'; np++)
+			;
+		      if (*np == '$')
+			{
+			  unsigned int n = 0;
+
+			  for (np = cp; *np >= '0' && *np <= '9'; np++)
+			    n = 10 * n + (*np - '0');
+			  if (n == 0)
+			    /* Positional argument 0.  */
+			    goto error;
+			  dp->precision_arg_index = n - 1;
+			  cp = np + 1;
+			}
+		    }
+		  if (dp->precision_arg_index < 0)
+		    dp->precision_arg_index = arg_posn++;
+		  REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+		}
+	      else
+		{
+		  unsigned int precision_length;
+
+		  dp->precision_start = cp - 1;
+		  for (; *cp >= '0' && *cp <= '9'; cp++)
+		    ;
+		  dp->precision_end = cp;
+		  precision_length = dp->precision_end - dp->precision_start;
+		  if (max_precision_length < precision_length)
+		    max_precision_length = precision_length;
+		}
+	    }
+
+	  {
+	    arg_type type;
+
+	    /* Parse argument type/size specifiers.  */
+	    {
+	      int flags = 0;
+
+	      for (;;)
+		{
+		  if (*cp == 'h')
+		    {
+		      flags |= (1 << (flags & 1));
+		      cp++;
+		    }
+		  else if (*cp == 'L')
+		    {
+		      flags |= 4;
+		      cp++;
+		    }
+		  else if (*cp == 'l')
+		    {
+		      flags += 8;
+		      cp++;
+		    }
+#ifdef HAVE_INT64_AND_I64
+		  else if (cp[0] == 'I' && 
+			   cp[1] == '6' &&
+			   cp[2] == '4')
+		    {
+		      flags = 64;
+		      cp += 3;
+		    }
+#endif
+#ifdef HAVE_INTMAX_T
+		  else if (*cp == 'j')
+		    {
+		      if (sizeof (intmax_t) > sizeof (long))
+			{
+			  /* intmax_t = long long */
+			  flags += 16;
+			}
+		      else if (sizeof (intmax_t) > sizeof (int))
+			{
+			  /* intmax_t = long */
+			  flags += 8;
+			}
+		      cp++;
+		    }
+#endif
+		  else if (*cp == 'z' || *cp == 'Z')
+		    {
+		      /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+			 because the warning facility in gcc-2.95.2 understands
+			 only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
+		      if (sizeof (size_t) > sizeof (long))
+			{
+			  /* size_t = long long */
+			  flags += 16;
+			}
+		      else if (sizeof (size_t) > sizeof (int))
+			{
+			  /* size_t = long */
+			  flags += 8;
+			}
+		      cp++;
+		    }
+		  else if (*cp == 't')
+		    {
+		      if (sizeof (ptrdiff_t) > sizeof (long))
+			{
+			  /* ptrdiff_t = long long */
+			  flags += 16;
+			}
+		      else if (sizeof (ptrdiff_t) > sizeof (int))
+			{
+			  /* ptrdiff_t = long */
+			  flags += 8;
+			}
+		      cp++;
+		    }
+		  else
+		    break;
+		}
+
+	      /* Read the conversion character.  */
+	      c = *cp++;
+	      switch (c)
+		{
+		case 'd': case 'i':
+#ifdef HAVE_INT64_AND_I64
+		  if (flags == 64) 
+		    type = TYPE_INT64;
+		  else
+#endif
+#ifdef HAVE_LONG_LONG
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_LONGLONGINT;
+		  else
+#endif
+		  if (flags >= 8)
+		    type = TYPE_LONGINT;
+		  else if (flags & 2)
+		    type = TYPE_SCHAR;
+		  else if (flags & 1)
+		    type = TYPE_SHORT;
+		  else
+		    type = TYPE_INT;
+		  break;
+		case 'o': case 'u': case 'x': case 'X':
+#ifdef HAVE_INT64_AND_I64
+		  if (flags == 64)
+		    type = TYPE_UINT64;
+		  else
+#endif
+#ifdef HAVE_LONG_LONG
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_ULONGLONGINT;
+		  else
+#endif
+		  if (flags >= 8)
+		    type = TYPE_ULONGINT;
+		  else if (flags & 2)
+		    type = TYPE_UCHAR;
+		  else if (flags & 1)
+		    type = TYPE_USHORT;
+		  else
+		    type = TYPE_UINT;
+		  break;
+		case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+		case 'a': case 'A':
+#ifdef HAVE_LONG_DOUBLE
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_LONGDOUBLE;
+		  else
+#endif
+		  type = TYPE_DOUBLE;
+		  break;
+		case 'c':
+		  if (flags >= 8)
+#ifdef HAVE_WINT_T
+		    type = TYPE_WIDE_CHAR;
+#else
+		    goto error;
+#endif
+		  else
+		    type = TYPE_CHAR;
+		  break;
+#ifdef HAVE_WINT_T
+		case 'C':
+		  type = TYPE_WIDE_CHAR;
+		  c = 'c';
+		  break;
+#endif
+		case 's':
+		  if (flags >= 8)
+#ifdef HAVE_WCHAR_T
+		    type = TYPE_WIDE_STRING;
+#else
+		    goto error;
+#endif
+		  else
+		    type = TYPE_STRING;
+		  break;
+#ifdef HAVE_WCHAR_T
+		case 'S':
+		  type = TYPE_WIDE_STRING;
+		  c = 's';
+		  break;
+#endif
+		case 'p':
+		  type = TYPE_POINTER;
+		  break;
+		case 'n':
+#ifdef HAVE_LONG_LONG
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_COUNT_LONGLONGINT_POINTER;
+		  else
+#endif
+		  if (flags >= 8)
+		    type = TYPE_COUNT_LONGINT_POINTER;
+		  else if (flags & 2)
+		    type = TYPE_COUNT_SCHAR_POINTER;
+		  else if (flags & 1)
+		    type = TYPE_COUNT_SHORT_POINTER;
+		  else
+		    type = TYPE_COUNT_INT_POINTER;
+		  break;
+		case '%':
+		  type = TYPE_NONE;
+		  break;
+		default:
+		  /* Unknown conversion character.  */
+		  goto error;
+		}
+	    }
+
+	    if (type != TYPE_NONE)
+	      {
+		dp->arg_index = arg_index;
+		if (dp->arg_index < 0)
+		  dp->arg_index = arg_posn++;
+		REGISTER_ARG (dp->arg_index, type);
+	      }
+	    dp->conversion = c;
+	    dp->dir_end = cp;
+	  }
+
+	  d->count++;
+	  if (d->count >= d_allocated)
+	    {
+	      char_directive *memory;
+
+	      d_allocated = 2 * d_allocated;
+	      memory = realloc (d->dir, d_allocated * sizeof (char_directive));
+	      if (memory == NULL)
+		/* Out of memory.  */
+		goto error;
+	      d->dir = memory;
+	    }
+	}
+    }
+  d->dir[d->count].dir_start = cp;
+
+  d->max_width_length = max_width_length;
+  d->max_precision_length = max_precision_length;
+  return 0;
+
+error:
+  if (a->arg)
+    free (a->arg);
+  if (d->dir)
+    free (d->dir);
+  return -1;
+}
diff --git a/glib/gnulib/printf-parse.h b/glib/gnulib/printf-parse.h
new file mode 100644
index 0000000..ab41478
--- /dev/null
+++ b/glib/gnulib/printf-parse.h
@@ -0,0 +1,74 @@
+/* Parse printf format string.
+   Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+#include "printf-args.h"
+
+/* Private namespace for gnulib functions */
+#define printf_parse _g_gnulib_printf_parse
+
+/* Flags */
+#define FLAG_GROUP	 1	/* ' flag */
+#define FLAG_LEFT	 2	/* - flag */
+#define FLAG_SHOWSIGN	 4	/* + flag */
+#define FLAG_SPACE	 8	/* space flag */
+#define FLAG_ALT	16	/* # flag */
+#define FLAG_ZERO	32
+
+/* A parsed directive.  */
+typedef struct
+{
+  const char* dir_start;
+  const char* dir_end;
+  int flags;
+  const char* width_start;
+  const char* width_end;
+  int width_arg_index;
+  const char* precision_start;
+  const char* precision_end;
+  int precision_arg_index;
+  char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+  int arg_index;
+}
+char_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  unsigned int count;
+  char_directive *dir;
+  unsigned int max_width_length;
+  unsigned int max_precision_length;
+}
+char_directives;
+
+
+/* Parses the format string.  Fills in the number N of directives, and fills
+   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+   to the end of the format string.  Also fills in the arg_type fields of the
+   arguments and the needed count of arguments.  */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/glib/gnulib/printf.c b/glib/gnulib/printf.c
new file mode 100644
index 0000000..b339299
--- /dev/null
+++ b/glib/gnulib/printf.c
@@ -0,0 +1,154 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2003 Matthias Clasen
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 2003.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "g-gnulib.h"
+#include "vasnprintf.h"
+#include "printf.h"
+
+int _g_gnulib_printf (char const *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = _g_gnulib_vprintf (format, args);
+  va_end (args);
+
+  return retval;
+}
+
+int _g_gnulib_fprintf (FILE *file, char const *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = _g_gnulib_vfprintf (file, format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+int _g_gnulib_sprintf (char *string, char const *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = _g_gnulib_vsprintf (string, format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+int _g_gnulib_snprintf (char *string, size_t n, char const *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = _g_gnulib_vsnprintf (string, n, format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+int _g_gnulib_vprintf (char const *format, va_list args)         
+{
+  return _g_gnulib_vfprintf (stdout, format, args);
+}
+
+int _g_gnulib_vfprintf (FILE *file, char const *format, va_list args)
+{
+  char *result;
+  size_t length;
+
+  result = vasnprintf (NULL, &length, format, args);
+  if (result == NULL) 
+    return -1;
+
+  fwrite (result, 1, length, file);
+  free (result);
+  
+  return length;
+}
+
+int _g_gnulib_vsprintf (char *string, char const *format, va_list args)
+{
+  char *result;
+  size_t length;
+
+  result = vasnprintf (NULL, &length, format, args);
+  if (result == NULL) 
+    return -1;
+
+  memcpy (string, result, length + 1);
+  free (result);
+  
+  return length;  
+}
+
+int _g_gnulib_vsnprintf (char *string, size_t n, char const *format, va_list args)
+{
+  char *result;
+  size_t length;
+
+  result = vasnprintf (NULL, &length, format, args);
+  if (result == NULL) 
+    return -1;
+
+  if (n > 0) 
+    {
+      memcpy (string, result, MIN(length + 1, n));
+      string[n - 1] = 0;
+    }
+
+  free (result);
+  
+  return length;  
+}
+
+int _g_gnulib_vasprintf (char **result, char const *format, va_list args)
+{
+  size_t length;
+
+  *result = vasnprintf (NULL, &length, format, args);
+  if (*result == NULL) 
+    return -1;
+  
+  return length;  
+}
+
+
+
+
+
diff --git a/glib/gnulib/printf.h b/glib/gnulib/printf.h
new file mode 100644
index 0000000..a7be56f
--- /dev/null
+++ b/glib/gnulib/printf.h
@@ -0,0 +1,57 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2003  Matthias Clasen
+ *
+ * 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 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.
+ */
+#ifndef __GNULIB_PRINTF_H__
+#define __GNULIB_PRINTF_H__
+
+#include <stdarg.h>
+#include <stdio.h>
+
+int _g_gnulib_printf    (char const *format, 
+			 ...);
+int _g_gnulib_fprintf   (FILE        *file,
+			 char const *format, 
+			 ...);
+int _g_gnulib_sprintf   (char       *string,
+			 char const *format, 
+			 ...);
+int _g_gnulib_snprintf  (char       *string,
+			 size_t       n,
+			 char const *format, 
+			 ...);
+int _g_gnulib_vprintf   (char const *format,
+			 va_list      args);            
+int _g_gnulib_vfprintf  (FILE        *file,
+			 char const *format,
+			 va_list      args);
+int _g_gnulib_vsprintf  (char       *string,
+			 char const *format,
+			 va_list      args);
+int _g_gnulib_vsnprintf (char       *string,
+			 size_t       n,
+			 char const *format,
+			 va_list      args);
+int _g_gnulib_vasprintf (char       **result,
+			 char const *format,
+			 va_list      args);
+
+
+#endif /* __GNULIB_PRINTF_H__ */
+
+
+
diff --git a/glib/gnulib/vasnprintf.c b/glib/gnulib/vasnprintf.c
new file mode 100644
index 0000000..c981059
--- /dev/null
+++ b/glib/gnulib/vasnprintf.c
@@ -0,0 +1,1081 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifndef _WIN32
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "glib/galloca.h"
+
+#include "g-gnulib.h"
+
+/* Specification.  */
+#include "vasnprintf.h"
+
+#include <stdio.h>	/* snprintf(), sprintf() */
+#include <stdlib.h>	/* abort(), malloc(), realloc(), free() */
+#include <string.h>	/* memcpy(), strlen() */
+#include <errno.h>	/* errno */
+#include <limits.h>	/* CHAR_BIT */
+#include <float.h>	/* DBL_MAX_EXP, LDBL_MAX_EXP */
+#include "printf-parse.h"
+
+#ifdef HAVE_WCHAR_T
+# ifdef HAVE_WCSLEN
+#  define local_wcslen wcslen
+# else
+   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+      a dependency towards this library, here is a local substitute.
+      Define this substitute only once, even if this file is included
+      twice in the same compilation unit.  */
+#  ifndef local_wcslen_defined
+#   define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+/* For those losing systems which don't have 'alloca' we have to add
+   some additional code emulating it.  */ 
+#ifdef HAVE_ALLOCA 
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n) 
+# define freea(p) free (p) 
+#endif
+
+#ifndef HAVE_LONG_LONG_FORMAT
+static int
+print_long_long (char *buf, 
+		 int len, 
+		 int width,
+		 int precision,
+		 unsigned long flags,
+		 char conversion,
+		 unsigned long long number)
+{
+  int negative = FALSE;
+  char buffer[128];
+  char *bufferend;
+  char *pointer;
+  int base;
+  static const char *upper = "0123456789ABCDEFX";
+  static const char *lower = "0123456789abcdefx";
+  const char *digits;
+  int i;
+  char *p;
+  int count;
+
+#define EMIT(c)           \
+  if (p - buf == len - 1) \
+    {                     \
+      *p++ = '\0';        \
+      return len;         \
+    }                     \
+  else                    \
+    *p++ = c;
+  
+  p = buf;
+  
+  switch (conversion) 
+    {
+    case 'o':
+      base = 8;
+      digits = lower;
+      negative = FALSE;
+      break;
+    case 'x':
+      base = 16;
+      digits = lower;
+      negative = FALSE;
+      break;
+    case 'X':
+      base = 16;
+      digits = upper;
+      negative = FALSE;
+      break;
+    default:
+      base = 10;
+      digits = lower;
+      negative = (long long)number < 0;
+      if (negative) 
+	number = -((long long)number);
+      break;
+    }
+
+  /* Build number */
+  pointer = bufferend = &buffer[sizeof(buffer) - 1];
+  *pointer-- = '\0';
+  for (i = 1; i < (int)sizeof(buffer); i++)
+    {
+      *pointer-- = digits[number % base];
+      number /= base;
+      if (number == 0)
+	break;
+    }
+
+  /* Adjust width */
+  width -= (bufferend - pointer) - 1;
+
+  /* Adjust precision */
+  if (precision != -1)
+    {
+      precision -= (bufferend - pointer) - 1;
+      if (precision < 0)
+	precision = 0;
+      flags |= FLAG_ZERO;
+    }
+
+  /* Adjust width further */
+  if (negative || (flags & FLAG_SHOWSIGN) || (flags & FLAG_SPACE))
+    width--;
+  if (flags & FLAG_ALT)
+    {
+      switch (base)
+	{
+	case 16:
+	  width -= 2;
+	  break;
+	case 8:
+	  width--;
+	  break;
+        default:
+	  break;
+	}
+    }
+
+  /* Output prefixes spaces if needed */
+  if (! ((flags & FLAG_LEFT) ||
+	 ((flags & FLAG_ZERO) && (precision == -1))))
+    {
+      count = (precision == -1) ? 0 : precision;
+      while (width-- > count)
+	*p++ = ' ';
+    }
+
+  /* width has been adjusted for signs and alternatives */
+  if (negative) 
+    {
+      EMIT ('-');
+    }
+  else if (flags & FLAG_SHOWSIGN) 
+    {
+      EMIT('+');
+    }
+  else if (flags & FLAG_SPACE) 
+    {
+      EMIT(' ');
+    }
+  
+  if (flags & FLAG_ALT)
+    {
+      switch (base)
+	{
+	case 8:
+	  EMIT('0');
+	  break;
+	case 16:
+	  EMIT('0');
+	  EMIT(digits[16]);
+	  break;
+	default:
+	  break;
+	} /* switch base */
+    }
+  
+  /* Output prefixed zero padding if needed */
+  if (flags & FLAG_ZERO)
+    {
+      if (precision == -1)
+	precision = width;
+      while (precision-- > 0)
+	{
+	  EMIT('0');
+	  width--;
+	}
+    }
+  
+  /* Output the number itself */
+  while (*(++pointer))
+    {
+      EMIT(*pointer);
+    }
+  
+  /* Output trailing spaces if needed */
+  if (flags & FLAG_LEFT)
+    {
+      while (width-- > 0)
+	EMIT(' ');
+    }
+  
+  EMIT('\0');
+  
+  return p - buf - 1;
+}
+#endif
+
+char *
+vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+{
+  char_directives d;
+  arguments a;
+
+  if (printf_parse (format, &d, &a) < 0)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+
+#define CLEANUP() \
+  free (d.dir);								\
+  if (a.arg)								\
+    free (a.arg);
+
+  if (printf_fetchargs (args, &a) < 0)
+    {
+      CLEANUP ();
+      errno = EINVAL;
+      return NULL;
+    }
+
+  {
+    char *buf =
+      (char *) alloca (7 + d.max_width_length + d.max_precision_length + 6);
+    const char *cp;
+    unsigned int i;
+    char_directive *dp;
+    /* Output string accumulator.  */
+    char *result;
+    size_t allocated;
+    size_t length;
+
+    if (resultbuf != NULL)
+      {
+	result = resultbuf;
+	allocated = *lengthp;
+      }
+    else
+      {
+	result = NULL;
+	allocated = 0;
+      }
+    length = 0;
+    /* Invariants:
+       result is either == resultbuf or == NULL or malloc-allocated.
+       If length > 0, then result != NULL.  */
+
+#define ENSURE_ALLOCATION(needed) \
+    if ((needed) > allocated)						\
+      {									\
+	char *memory;							\
+									\
+	allocated = (allocated > 0 ? 2 * allocated : 12);		\
+	if ((needed) > allocated)					\
+	  allocated = (needed);						\
+	if (result == resultbuf || result == NULL)			\
+	  memory = (char *) malloc (allocated);				\
+	else								\
+	  memory = (char *) realloc (result, allocated);		\
+									\
+	if (memory == NULL)						\
+	  {								\
+	    if (!(result == resultbuf || result == NULL))		\
+	      free (result);						\
+	    freea (buf);						\
+	    CLEANUP ();							\
+	    errno = ENOMEM;						\
+	    return NULL;						\
+	  }								\
+	if (result == resultbuf && length > 0)				\
+	  memcpy (memory, result, length);				\
+	result = memory;						\
+      }
+
+    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+      {
+	if (cp != dp->dir_start)
+	  {
+	    size_t n = dp->dir_start - cp;
+
+	    ENSURE_ALLOCATION (length + n);
+	    memcpy (result + length, cp, n);
+	    length += n;
+	  }
+	if (i == d.count)
+	  break;
+
+	/* Execute a single directive.  */
+	if (dp->conversion == '%')
+	  {
+	    if (!(dp->arg_index < 0))
+	      abort ();
+	    ENSURE_ALLOCATION (length + 1);
+	    result[length] = '%';
+	    length += 1;
+	  }
+	else
+	  {
+	    if (!(dp->arg_index >= 0))
+	      abort ();
+
+	    if (dp->conversion == 'n')
+	      {
+		switch (a.arg[dp->arg_index].type)
+		  {
+		  case TYPE_COUNT_SCHAR_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+		    break;
+		  case TYPE_COUNT_SHORT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+		    break;
+		  case TYPE_COUNT_INT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+		    break;
+		  case TYPE_COUNT_LONGINT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+		    break;
+#ifdef HAVE_LONG_LONG
+		  case TYPE_COUNT_LONGLONGINT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+		    break;
+#endif
+		  default:
+		    abort ();
+		  }
+	      }
+	    else
+	      {
+		arg_type type = a.arg[dp->arg_index].type;
+		char *p;
+		unsigned int prefix_count;
+		int prefixes[2];
+#if !HAVE_SNPRINTF
+		unsigned int tmp_length;
+		char tmpbuf[700];
+		char *tmp;
+
+		/* Allocate a temporary buffer of sufficient size for calling
+		   sprintf.  */
+		{
+		  unsigned int width;
+		  unsigned int precision;
+
+		  width = 0;
+		  if (dp->width_start != dp->width_end)
+		    {
+		      if (dp->width_arg_index >= 0)
+			{
+			  int arg;
+
+			  if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+			    abort ();
+			  arg = a.arg[dp->width_arg_index].a.a_int;
+			  width = (arg < 0 ? -arg : arg);
+			}
+		      else
+			{
+			  const char *digitp = dp->width_start;
+
+			  do
+			    width = width * 10 + (*digitp++ - '0');
+			  while (digitp != dp->width_end);
+			}
+		    }
+
+		  precision = 6;
+		  if (dp->precision_start != dp->precision_end)
+		    {
+		      if (dp->precision_arg_index >= 0)
+			{
+			  int arg;
+
+			  if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+			    abort ();
+			  arg = a.arg[dp->precision_arg_index].a.a_int;
+			  precision = (arg < 0 ? 0 : arg);
+			}
+		      else
+			{
+			  const char *digitp = dp->precision_start + 1;
+
+			  precision = 0;
+			  while (digitp != dp->precision_end)
+			    precision = precision * 10 + (*digitp++ - '0');
+			}
+		    }
+
+		  switch (dp->conversion)
+		    {
+		    case 'd': case 'i': case 'u':
+# ifdef HAVE_LONG_LONG
+		      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 1; /* account for leading sign */
+		      else
+# endif
+		      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 1; /* account for leading sign */
+		      else
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 1; /* account for leading sign */
+		      break;
+
+		    case 'o':
+# ifdef HAVE_LONG_LONG
+		      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+					  * 0.333334 /* binary -> octal */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 1; /* account for leading sign */
+		      else
+# endif
+		      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+					  * 0.333334 /* binary -> octal */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 1; /* account for leading sign */
+		      else
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+					  * 0.333334 /* binary -> octal */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 1; /* account for leading sign */
+		      break;
+
+		    case 'x': case 'X':
+# ifdef HAVE_LONG_LONG
+		      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 2; /* account for leading sign or alternate form */
+		      else
+# endif
+# ifdef HAVE_INT64_AND_I64
+		      if (type == TYPE_INT64 || type == TYPE_UINT64)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned __int64) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					  )
+			  + 1 /* turn floor into ceil */
+			  + 2; /* account for leading sign or alternate form */
+		      else
+# endif
+		      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 2; /* account for leading sign or alternate form */
+		      else
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 2; /* account for leading sign or alternate form */
+		      break;
+
+		    case 'f': case 'F':
+# ifdef HAVE_LONG_DOUBLE
+		      if (type == TYPE_LONGDOUBLE)
+			tmp_length =
+			  (unsigned int) (LDBL_MAX_EXP
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + precision
+			  + 10; /* sign, decimal point etc. */
+		      else
+# endif
+			tmp_length =
+			  (unsigned int) (DBL_MAX_EXP
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + precision
+			  + 10; /* sign, decimal point etc. */
+		      break;
+
+		    case 'e': case 'E': case 'g': case 'G':
+		    case 'a': case 'A':
+		      tmp_length =
+			precision
+			+ 12; /* sign, decimal point, exponent etc. */
+		      break;
+
+		    case 'c':
+# ifdef HAVE_WINT_T
+		      if (type == TYPE_WIDE_CHAR)
+			tmp_length = MB_CUR_MAX;
+		      else
+# endif
+			tmp_length = 1;
+		      break;
+
+		    case 's':
+# ifdef HAVE_WCHAR_T
+		      if (type == TYPE_WIDE_STRING)
+			tmp_length =
+			  (a.arg[dp->arg_index].a.a_wide_string == NULL
+			  ? 6 /* wcslen(L"(null)") */
+			   : local_wcslen (a.arg[dp->arg_index].a.a_wide_string)) 
+			  * MB_CUR_MAX;
+		      else
+# endif
+			tmp_length = a.arg[dp->arg_index].a.a_string == NULL
+			  ? 6 /* strlen("(null)") */
+			  : strlen (a.arg[dp->arg_index].a.a_string);
+		      break;
+
+		    case 'p':
+		      tmp_length =
+			(unsigned int) (sizeof (void *) * CHAR_BIT
+					* 0.25 /* binary -> hexadecimal */
+				       )
+			  + 1 /* turn floor into ceil */
+			  + 2; /* account for leading 0x */
+		      break;
+
+		    default:
+		      abort ();
+		    }
+
+		  if (tmp_length < width)
+		    tmp_length = width;
+
+		  tmp_length++; /* account for trailing NUL */
+		}
+
+		if (tmp_length <= sizeof (tmpbuf))
+		  tmp = tmpbuf;
+		else
+		  {
+		    tmp = (char *) malloc (tmp_length);
+		    if (tmp == NULL)
+		      {
+			/* Out of memory.  */
+			if (!(result == resultbuf || result == NULL))
+			  free (result);
+			freea (buf);
+			CLEANUP ();
+			errno = ENOMEM;
+			return NULL;
+		      }
+		  }
+#endif
+
+		/* Construct the format string for calling snprintf or
+		   sprintf.  */
+		p = buf;
+		*p++ = '%';
+		if (dp->flags & FLAG_GROUP)
+		  *p++ = '\'';
+		if (dp->flags & FLAG_LEFT)
+		  *p++ = '-';
+		if (dp->flags & FLAG_SHOWSIGN)
+		  *p++ = '+';
+		if (dp->flags & FLAG_SPACE)
+		  *p++ = ' ';
+		if (dp->flags & FLAG_ALT)
+		  *p++ = '#';
+		if (dp->flags & FLAG_ZERO)
+		  *p++ = '0';
+		if (dp->width_start != dp->width_end)
+		  {
+		    size_t n = dp->width_end - dp->width_start;
+		    memcpy (p, dp->width_start, n);
+		    p += n;
+		  }
+		if (dp->precision_start != dp->precision_end)
+		  {
+		    size_t n = dp->precision_end - dp->precision_start;
+		    memcpy (p, dp->precision_start, n);
+		    p += n;
+		  }
+
+		switch (type)
+		  {
+#ifdef HAVE_INT64_AND_I64
+		  case TYPE_INT64:
+		  case TYPE_UINT64:
+		    *p++ = 'I';
+		    *p++ = '6';
+		    *p++ = '4';
+		    break;
+#endif
+#ifdef HAVE_LONG_LONG
+		  case TYPE_LONGLONGINT:
+		  case TYPE_ULONGLONGINT:
+#ifdef HAVE_INT64_AND_I64	/* The system (sn)printf uses %I64. Also assume
+				 * that long long == __int64.
+				 */
+		    *p++ = 'I';
+		    *p++ = '6';
+		    *p++ = '4';
+		    break;
+#else
+		    *p++ = 'l';
+		    /*FALLTHROUGH*/
+#endif
+#endif
+		  case TYPE_LONGINT:
+		  case TYPE_ULONGINT:
+#ifdef HAVE_WINT_T
+		  case TYPE_WIDE_CHAR:
+#endif
+#ifdef HAVE_WCHAR_T
+		  case TYPE_WIDE_STRING:
+#endif
+		    *p++ = 'l';
+		    break;
+#ifdef HAVE_LONG_DOUBLE
+		  case TYPE_LONGDOUBLE:
+		    *p++ = 'L';
+		    break;
+#endif
+		  default:
+		    break;
+		  }
+		*p = dp->conversion;
+#if HAVE_SNPRINTF
+		p[1] = '%';
+		p[2] = 'n';
+		p[3] = '\0';
+#else
+		p[1] = '\0';
+#endif
+
+		/* Construct the arguments for calling snprintf or sprintf.  */
+		prefix_count = 0;
+		if (dp->width_arg_index >= 0)
+		  {
+		    if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+		      abort ();
+		    prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+		  }
+		if (dp->precision_arg_index >= 0)
+		  {
+		    if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+		      abort ();
+		    prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+		  }
+
+#if HAVE_SNPRINTF
+		/* Prepare checking whether snprintf returns the count
+		   via %n.  */
+		ENSURE_ALLOCATION (length + 1);
+		result[length] = '\0';
+#endif
+
+		for (;;)
+		  {
+		    size_t maxlen;
+		    int count;
+		    int retcount;
+
+		    maxlen = allocated - length;
+		    count = -1;
+		    retcount = 0;
+
+#if HAVE_SNPRINTF
+#define SNPRINTF_BUF(arg) \
+		    switch (prefix_count)				    \
+		      {							    \
+		      case 0:						    \
+			retcount = snprintf (result + length, maxlen, buf,  \
+					     arg, &count);		    \
+			break;						    \
+		      case 1:						    \
+			retcount = snprintf (result + length, maxlen, buf,  \
+					     prefixes[0], arg, &count);	    \
+			break;						    \
+		      case 2:						    \
+			retcount = snprintf (result + length, maxlen, buf,  \
+					     prefixes[0], prefixes[1], arg, \
+					     &count);			    \
+			break;						    \
+		      default:						    \
+			abort ();					    \
+		      }
+#else
+#define SNPRINTF_BUF(arg) \
+		    switch (prefix_count)				    \
+		      {							    \
+		      case 0:						    \
+			count = sprintf (tmp, buf, arg);		    \
+			break;						    \
+		      case 1:						    \
+			count = sprintf (tmp, buf, prefixes[0], arg);	    \
+			break;						    \
+		      case 2:						    \
+			count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+					 arg);				    \
+			break;						    \
+		      default:						    \
+			abort ();					    \
+		      }
+#endif
+
+		    switch (type)
+		      {
+		      case TYPE_SCHAR:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_schar;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_UCHAR:
+			{
+			  unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_SHORT:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_short;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_USHORT:
+			{
+			  unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_INT:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_int;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_UINT:
+			{
+			  unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_LONGINT:
+			{
+			  long int arg = a.arg[dp->arg_index].a.a_longint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_ULONGINT:
+			{
+			  unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#ifdef HAVE_INT64_AND_I64
+		      case TYPE_INT64:
+			{
+			  __int64 arg = a.arg[dp->arg_index].a.a_int64;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_UINT64:
+			{
+			  unsigned __int64 arg = a.arg[dp->arg_index].a.a_uint64;
+			  SNPRINTF_BUF (arg);
+			}
+			break;			
+#endif
+#ifdef HAVE_LONG_LONG
+#ifndef HAVE_LONG_LONG_FORMAT
+		      case TYPE_LONGLONGINT:
+		      case TYPE_ULONGLONGINT:
+			{
+			  unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+			  int width;
+			  int precision;
+
+			  width = 0;
+			  if (dp->width_start != dp->width_end)
+			    {
+			      if (dp->width_arg_index >= 0)
+				{
+				  int arg;
+				  
+				  if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+				    abort ();
+				  arg = a.arg[dp->width_arg_index].a.a_int;
+				  width = (arg < 0 ? -arg : arg);
+				}
+			      else
+				{
+				  const char *digitp = dp->width_start;
+				  
+				  do
+				    width = width * 10 + (*digitp++ - '0');
+				  while (digitp != dp->width_end);
+				}
+			    }
+
+			  precision = -1;
+			  if (dp->precision_start != dp->precision_end)
+			    {
+			      if (dp->precision_arg_index >= 0)
+				{
+				  int arg;
+				  
+				  if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+				    abort ();
+				  arg = a.arg[dp->precision_arg_index].a.a_int;
+				  precision = (arg < 0 ? 0 : arg);
+				}
+			      else
+				{
+				  const char *digitp = dp->precision_start + 1;
+				  
+				  precision = 0;
+				  do
+				    precision = precision * 10 + (*digitp++ - '0');
+				  while (digitp != dp->precision_end);
+				}
+			    }
+			  
+#if HAVE_SNPRINTF
+ 			  count = print_long_long (result + length, maxlen,
+ 						   width, precision,
+ 						   dp->flags,
+ 						   dp->conversion,
+ 						   arg);
+#else
+			  count = print_long_long (tmp, tmp_length,
+						   width, precision,
+						   dp->flags,
+						   dp->conversion,
+						   arg);
+#endif
+			}
+			break;
+#else
+		      case TYPE_LONGLONGINT:
+			{
+			  long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_ULONGLONGINT:
+			{
+			  unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+#endif
+		      case TYPE_DOUBLE:
+			{
+			  double arg = a.arg[dp->arg_index].a.a_double;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#ifdef HAVE_LONG_DOUBLE
+		      case TYPE_LONGDOUBLE:
+			{
+			  long double arg = a.arg[dp->arg_index].a.a_longdouble;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+		      case TYPE_CHAR:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_char;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#ifdef HAVE_WINT_T
+		      case TYPE_WIDE_CHAR:
+			{
+			  wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+		      case TYPE_STRING:
+			{
+			  const char *arg = a.arg[dp->arg_index].a.a_string == NULL
+			    ? "(null)"
+			    : a.arg[dp->arg_index].a.a_string;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#ifdef HAVE_WCHAR_T
+		      case TYPE_WIDE_STRING:
+			{
+			  const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string == NULL
+			    ? L"(null)"
+			    : a.arg[dp->arg_index].a.a_wide_string;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+		      case TYPE_POINTER:
+			{
+			  void *arg = a.arg[dp->arg_index].a.a_pointer;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      default:
+			abort ();
+		      }
+
+#if HAVE_SNPRINTF
+		    /* Portability: Not all implementations of snprintf()
+		       are ISO C 99 compliant.  Determine the number of
+		       bytes that snprintf() has produced or would have
+		       produced.  */
+		    if (count >= 0)
+		      {
+			/* Verify that snprintf() has NUL-terminated its
+			   result.  */
+			if (count < maxlen && result[length + count] != '\0')
+			  abort ();
+			/* Portability hack.  */
+			if (retcount > count)
+			  count = retcount;
+		      }
+		    else
+		      {
+			/* snprintf() doesn't understand the '%n'
+			   directive.  */
+			if (p[1] != '\0')
+			  {
+			    /* Don't use the '%n' directive; instead, look
+			       at the snprintf() return value.  */
+			    p[1] = '\0';
+			    continue;
+			  }
+			count = retcount;
+		      }
+#endif
+
+		    /* Attempt to handle failure.  */
+		    if (count < 0)
+		      {
+			if (!(result == resultbuf || result == NULL))
+			  free (result);
+			freea (buf);
+			CLEANUP ();
+			errno = EINVAL;
+			return NULL;
+		      }
+
+#if !HAVE_SNPRINTF
+		    if (count >= tmp_length)
+		      /* tmp_length was incorrectly calculated - fix the
+			 code above!  */
+		      abort ();
+#endif
+
+		    /* Make room for the result.  */
+		    if (count >= maxlen)
+		      {
+			/* Need at least count bytes.  But allocate
+			   proportionally, to avoid looping eternally if
+			   snprintf() reports a too small count.  */
+			size_t n = length + count;
+
+			if (n < 2 * allocated)
+			  n = 2 * allocated;
+
+			ENSURE_ALLOCATION (n);
+#if HAVE_SNPRINTF
+			continue;
+#endif
+		      }
+
+#if HAVE_SNPRINTF
+		    /* The snprintf() result did fit.  */
+#else
+		    /* Append the sprintf() result.  */
+		    memcpy (result + length, tmp, count);
+		    if (tmp != tmpbuf)
+		      free (tmp);
+#endif
+
+		    length += count;
+		    break;
+		  }
+	      }
+	  }
+      }
+
+    /* Add the final NUL.  */
+    ENSURE_ALLOCATION (length + 1);
+    result[length] = '\0';
+
+    if (result != resultbuf && length + 1 < allocated)
+      {
+	/* Shrink the allocated memory if possible.  */
+	char *memory;
+
+	memory = (char *) realloc (result, length + 1);
+	if (memory != NULL)
+	  result = memory;
+      }
+
+    freea (buf);
+    CLEANUP ();
+    *lengthp = length;
+    return result;
+  }
+}
diff --git a/glib/gnulib/vasnprintf.h b/glib/gnulib/vasnprintf.h
new file mode 100644
index 0000000..65f1bc1
--- /dev/null
+++ b/glib/gnulib/vasnprintf.h
@@ -0,0 +1,61 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library 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.  */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+/* Get size_t.  */
+#include <stddef.h>
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+#  define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __format__ format
+#  define __printf__ printf
+# endif
+#endif
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+   You can pass a preallocated buffer for the result in RESULTBUF and its
+   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+   If successful, return the address of the string (this may be = RESULTBUF
+   if no dynamic memory allocation was necessary) and set *LENGTHP to the
+   number of resulting bytes, excluding the trailing NUL.  Upon error, set
+   errno and return NULL.  */
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+       __attribute__ ((__format__ (__printf__, 3, 4)));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+       __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/glib/goption.c b/glib/goption.c
new file mode 100644
index 0000000..fa39b79
--- /dev/null
+++ b/glib/goption.c
@@ -0,0 +1,2242 @@
+/* goption.c - Option parser
+ *
+ *  Copyright (C) 1999, 2003 Red Hat Software
+ *  Copyright (C) 2004       Anders Carlsson <andersca@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#include "config.h"
+
+#include "goption.h"
+#include "glib.h"
+#include "glibintl.h"
+#include "gprintf.h"
+
+#include "galias.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+#define TRANSLATE(group, str) (((group)->translate_func ? (* (group)->translate_func) ((str), (group)->translate_data) : (str)))
+
+#define NO_ARG(entry) ((entry)->arg == G_OPTION_ARG_NONE ||       \
+                       ((entry)->arg == G_OPTION_ARG_CALLBACK &&  \
+                        ((entry)->flags & G_OPTION_FLAG_NO_ARG)))
+
+#define OPTIONAL_ARG(entry) ((entry)->arg == G_OPTION_ARG_CALLBACK &&  \
+                       (entry)->flags & G_OPTION_FLAG_OPTIONAL_ARG)
+
+typedef struct 
+{
+  GOptionArg arg_type;
+  gpointer arg_data;  
+  union 
+  {
+    gboolean bool;
+    gint integer;
+    gchar *str;
+    gchar **array;
+    gdouble dbl;
+    gint64 int64;
+  } prev;
+  union 
+  {
+    gchar *str;
+    struct 
+    {
+      gint len;
+      gchar **data;
+    } array;
+  } allocated;
+} Change;
+
+typedef struct
+{
+  gchar **ptr;
+  gchar *value;
+} PendingNull;
+
+struct _GOptionContext
+{
+  GList           *groups;
+
+  gchar           *parameter_string;
+  gchar           *summary;
+  gchar           *description;
+
+  GTranslateFunc   translate_func;
+  GDestroyNotify   translate_notify;
+  gpointer	   translate_data;
+
+  guint            help_enabled   : 1;
+  guint            ignore_unknown : 1;
+  
+  GOptionGroup    *main_group;
+
+  /* We keep a list of change so we can revert them */
+  GList           *changes;
+  
+  /* We also keep track of all argv elements 
+   * that should be NULLed or modified.
+   */
+  GList           *pending_nulls;
+};
+
+struct _GOptionGroup
+{
+  gchar           *name;
+  gchar           *description;
+  gchar           *help_description;
+
+  GDestroyNotify   destroy_notify;
+  gpointer         user_data;
+
+  GTranslateFunc   translate_func;
+  GDestroyNotify   translate_notify;
+  gpointer	   translate_data;
+
+  GOptionEntry    *entries;
+  gint             n_entries;
+
+  GOptionParseFunc pre_parse_func;
+  GOptionParseFunc post_parse_func;
+  GOptionErrorFunc error_func;
+};
+
+static void free_changes_list (GOptionContext *context,
+			       gboolean        revert);
+static void free_pending_nulls (GOptionContext *context,
+				gboolean        perform_nulls);
+
+
+static int
+_g_unichar_get_width (gunichar c)
+{
+  if (G_UNLIKELY (g_unichar_iszerowidth (c)))
+    return 0;
+
+  /* we ignore the fact that we should call g_unichar_iswide_cjk() under
+   * some locales (legacy East Asian ones) */
+  if (g_unichar_iswide (c))
+    return 2;
+
+  return 1;
+}
+
+static glong
+_g_utf8_strwidth (const gchar *p,
+                  gssize       max)
+{
+  glong len = 0;
+  const gchar *start = p;
+  g_return_val_if_fail (p != NULL || max == 0, 0);
+
+  if (max < 0)
+    {
+      while (*p)
+        {
+          len += _g_unichar_get_width (g_utf8_get_char (p));
+          p = g_utf8_next_char (p);
+        }
+    }
+  else
+    {
+      if (max == 0 || !*p)
+        return 0;
+
+      /* this case may not be quite correct */
+      
+      len += _g_unichar_get_width (g_utf8_get_char (p));
+      p = g_utf8_next_char (p);          
+
+      while (p - start < max && *p)
+        {
+          len += _g_unichar_get_width (g_utf8_get_char (p));
+          p = g_utf8_next_char (p);          
+        }
+    }
+
+  return len;
+}
+
+
+GQuark
+g_option_error_quark (void)
+{
+  return g_quark_from_static_string ("g-option-context-error-quark");
+}
+
+/**
+ * g_option_context_new:
+ * @parameter_string: a string which is displayed in
+ *    the first line of <option>--help</option> output, after the
+ *    usage summary 
+ *    <literal><replaceable>programname</replaceable> [OPTION...]</literal>
+ *
+ * Creates a new option context. 
+ *
+ * The @parameter_string can serve multiple purposes. It can be used
+ * to add descriptions for "rest" arguments, which are not parsed by
+ * the #GOptionContext, typically something like "FILES" or
+ * "FILE1 FILE2...". If you are using #G_OPTION_REMAINING for
+ * collecting "rest" arguments, GLib handles this automatically by
+ * using the @arg_description of the corresponding #GOptionEntry in
+ * the usage summary.
+ *
+ * Another usage is to give a short summary of the program
+ * functionality, like " - frob the strings", which will be displayed
+ * in the same line as the usage. For a longer description of the
+ * program functionality that should be displayed as a paragraph
+ * below the usage line, use g_option_context_set_summary().
+ *
+ * Note that the @parameter_string is translated using the
+ * function set with g_option_context_set_translate_func(), so
+ * it should normally be passed untranslated.
+ *
+ * Returns: a newly created #GOptionContext, which must be
+ *    freed with g_option_context_free() after use.
+ *
+ * Since: 2.6
+ */
+GOptionContext *
+g_option_context_new (const gchar *parameter_string)
+
+{
+  GOptionContext *context;
+
+  context = g_new0 (GOptionContext, 1);
+
+  context->parameter_string = g_strdup (parameter_string);
+  context->help_enabled = TRUE;
+  context->ignore_unknown = FALSE;
+
+  return context;
+}
+
+/**
+ * g_option_context_free:
+ * @context: a #GOptionContext 
+ *
+ * Frees context and all the groups which have been 
+ * added to it.
+ *
+ * Since: 2.6
+ */
+void g_option_context_free (GOptionContext *context) 
+{
+  g_return_if_fail (context != NULL);
+
+  g_list_foreach (context->groups, (GFunc)g_option_group_free, NULL);
+  g_list_free (context->groups);
+
+  if (context->main_group) 
+    g_option_group_free (context->main_group);
+
+  free_changes_list (context, FALSE);
+  free_pending_nulls (context, FALSE);
+  
+  g_free (context->parameter_string);
+  g_free (context->summary);
+  g_free (context->description);
+  
+  if (context->translate_notify)
+    (* context->translate_notify) (context->translate_data);
+
+  g_free (context);
+}
+
+
+/**
+ * g_option_context_set_help_enabled:
+ * @context: a #GOptionContext
+ * @help_enabled: %TRUE to enable <option>--help</option>, %FALSE to disable it
+ *
+ * Enables or disables automatic generation of <option>--help</option> 
+ * output. By default, g_option_context_parse() recognizes
+ * <option>--help</option>, <option>-?</option>, <option>--help-all</option>
+ * and <option>--help-</option><replaceable>groupname</replaceable> and creates
+ * suitable output to stdout. 
+ *
+ * Since: 2.6
+ */
+void g_option_context_set_help_enabled (GOptionContext *context,
+                                        gboolean        help_enabled)
+
+{
+  g_return_if_fail (context != NULL);
+
+  context->help_enabled = help_enabled;
+}
+
+/**
+ * g_option_context_get_help_enabled:
+ * @context: a #GOptionContext
+ * 
+ * Returns whether automatic <option>--help</option> generation
+ * is turned on for @context. See g_option_context_set_help_enabled().
+ * 
+ * Returns: %TRUE if automatic help generation is turned on.
+ *
+ * Since: 2.6
+ */
+gboolean 
+g_option_context_get_help_enabled (GOptionContext *context) 
+{
+  g_return_val_if_fail (context != NULL, FALSE);
+  
+  return context->help_enabled;
+}
+
+/**
+ * g_option_context_set_ignore_unknown_options:
+ * @context: a #GOptionContext
+ * @ignore_unknown: %TRUE to ignore unknown options, %FALSE to produce
+ *    an error when unknown options are met
+ * 
+ * Sets whether to ignore unknown options or not. If an argument is 
+ * ignored, it is left in the @argv array after parsing. By default, 
+ * g_option_context_parse() treats unknown options as error.
+ * 
+ * This setting does not affect non-option arguments (i.e. arguments 
+ * which don't start with a dash). But note that GOption cannot reliably
+ * determine whether a non-option belongs to a preceding unknown option.
+ *
+ * Since: 2.6
+ **/
+void
+g_option_context_set_ignore_unknown_options (GOptionContext *context,
+					     gboolean	     ignore_unknown)
+{
+  g_return_if_fail (context != NULL);
+
+  context->ignore_unknown = ignore_unknown;
+}
+
+/**
+ * g_option_context_get_ignore_unknown_options:
+ * @context: a #GOptionContext
+ * 
+ * Returns whether unknown options are ignored or not. See
+ * g_option_context_set_ignore_unknown_options().
+ * 
+ * Returns: %TRUE if unknown options are ignored.
+ * 
+ * Since: 2.6
+ **/
+gboolean
+g_option_context_get_ignore_unknown_options (GOptionContext *context)
+{
+  g_return_val_if_fail (context != NULL, FALSE);
+
+  return context->ignore_unknown;
+}
+
+/**
+ * g_option_context_add_group:
+ * @context: a #GOptionContext
+ * @group: the group to add
+ * 
+ * Adds a #GOptionGroup to the @context, so that parsing with @context
+ * will recognize the options in the group. Note that the group will
+ * be freed together with the context when g_option_context_free() is
+ * called, so you must not free the group yourself after adding it
+ * to a context.
+ *
+ * Since: 2.6
+ **/
+void
+g_option_context_add_group (GOptionContext *context,
+			    GOptionGroup   *group)
+{
+  GList *list;
+
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (group != NULL);
+  g_return_if_fail (group->name != NULL);
+  g_return_if_fail (group->description != NULL);
+  g_return_if_fail (group->help_description != NULL);
+
+  for (list = context->groups; list; list = list->next)
+    {
+      GOptionGroup *g = (GOptionGroup *)list->data;
+
+      if ((group->name == NULL && g->name == NULL) ||
+	  (group->name && g->name && strcmp (group->name, g->name) == 0))
+	g_warning ("A group named \"%s\" is already part of this GOptionContext", 
+		   group->name);
+    }
+
+  context->groups = g_list_append (context->groups, group);
+}
+
+/**
+ * g_option_context_set_main_group:
+ * @context: a #GOptionContext
+ * @group: the group to set as main group
+ * 
+ * Sets a #GOptionGroup as main group of the @context. 
+ * This has the same effect as calling g_option_context_add_group(), 
+ * the only difference is that the options in the main group are 
+ * treated differently when generating <option>--help</option> output.
+ *
+ * Since: 2.6
+ **/
+void
+g_option_context_set_main_group (GOptionContext *context,
+				 GOptionGroup   *group)
+{
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (group != NULL);
+
+  if (context->main_group)
+    {
+      g_warning ("This GOptionContext already has a main group");
+
+      return;
+    }
+  
+  context->main_group = group;
+}
+
+/**
+ * g_option_context_get_main_group:
+ * @context: a #GOptionContext
+ * 
+ * Returns a pointer to the main group of @context.
+ * 
+ * Return value: the main group of @context, or %NULL if @context doesn't
+ *  have a main group. Note that group belongs to @context and should
+ *  not be modified or freed.
+ *
+ * Since: 2.6
+ **/
+GOptionGroup *
+g_option_context_get_main_group (GOptionContext *context)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return context->main_group;
+}
+
+/**
+ * g_option_context_add_main_entries:
+ * @context: a #GOptionContext
+ * @entries: a %NULL-terminated array of #GOptionEntry<!-- -->s
+ * @translation_domain: a translation domain to use for translating
+ *    the <option>--help</option> output for the options in @entries
+ *    with gettext(), or %NULL
+ * 
+ * A convenience function which creates a main group if it doesn't 
+ * exist, adds the @entries to it and sets the translation domain.
+ * 
+ * Since: 2.6
+ **/
+void
+g_option_context_add_main_entries (GOptionContext      *context,
+				   const GOptionEntry  *entries,
+				   const gchar         *translation_domain)
+{
+  g_return_if_fail (entries != NULL);
+
+  if (!context->main_group)
+    context->main_group = g_option_group_new (NULL, NULL, NULL, NULL, NULL);
+  
+  g_option_group_add_entries (context->main_group, entries);
+  g_option_group_set_translation_domain (context->main_group, translation_domain);
+}
+
+static gint
+calculate_max_length (GOptionGroup *group)
+{
+  GOptionEntry *entry;
+  gint i, len, max_length;
+
+  max_length = 0;
+
+  for (i = 0; i < group->n_entries; i++)
+    {
+      entry = &group->entries[i];
+
+      if (entry->flags & G_OPTION_FLAG_HIDDEN)
+	continue;
+
+      len = _g_utf8_strwidth (entry->long_name, -1);
+      
+      if (entry->short_name)
+	len += 4;
+      
+      if (!NO_ARG (entry) && entry->arg_description)
+	len += 1 + _g_utf8_strwidth (TRANSLATE (group, entry->arg_description), -1);
+      
+      max_length = MAX (max_length, len);
+    }
+
+  return max_length;
+}
+
+static void
+print_entry (GOptionGroup       *group,
+	     gint                max_length,
+	     const GOptionEntry *entry,
+             GString            *string)
+{
+  GString *str;
+  
+  if (entry->flags & G_OPTION_FLAG_HIDDEN)
+    return;
+
+  if (entry->long_name[0] == 0)
+    return;
+
+  str = g_string_new (NULL);
+  
+  if (entry->short_name)
+    g_string_append_printf (str, "  -%c, --%s", entry->short_name, entry->long_name);
+  else
+    g_string_append_printf (str, "  --%s", entry->long_name);
+  
+  if (entry->arg_description)
+    g_string_append_printf (str, "=%s", TRANSLATE (group, entry->arg_description));
+  
+  g_string_append_printf (string, "%s%*s %s\n", str->str,
+	                  (int) (max_length + 4 - _g_utf8_strwidth (str->str, -1)), "",
+	                  entry->description ? TRANSLATE (group, entry->description) : "");
+  g_string_free (str, TRUE);  
+}
+
+static gboolean
+group_has_visible_entries (GOptionContext *context,
+                           GOptionGroup *group,
+                           gboolean      main_entries)
+{
+  GOptionFlags reject_filter = G_OPTION_FLAG_HIDDEN;
+  GOptionEntry *entry;
+  gint i, l;
+  gboolean main_group = group == context->main_group;
+
+  if (!main_entries)
+    reject_filter |= G_OPTION_FLAG_IN_MAIN;
+
+  for (i = 0, l = (group ? group->n_entries : 0); i < l; i++)
+    {
+      entry = &group->entries[i];
+
+      if (main_entries && !main_group && !(entry->flags & G_OPTION_FLAG_IN_MAIN))
+        continue;
+      if (!(entry->flags & reject_filter))
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
+static gboolean
+group_list_has_visible_entires (GOptionContext *context,
+                                GList          *group_list,
+                                gboolean       main_entries)
+{
+  while (group_list)
+    {
+      if (group_has_visible_entries (context, group_list->data, main_entries))
+        return TRUE;
+
+      group_list = group_list->next;
+    }
+
+  return FALSE;
+}
+
+/**
+ * g_option_context_get_help: 
+ * @context: a #GOptionContext
+ * @main_help: if %TRUE, only include the main group 
+ * @group: the #GOptionGroup to create help for, or %NULL
+ *
+ * Returns a formatted, translated help text for the given context.
+ * To obtain the text produced by <option>--help</option>, call
+ * <literal>g_option_context_get_help (context, TRUE, NULL)</literal>.
+ * To obtain the text produced by <option>--help-all</option>, call
+ * <literal>g_option_context_get_help (context, FALSE, NULL)</literal>.
+ * To obtain the help text for an option group, call
+ * <literal>g_option_context_get_help (context, FALSE, group)</literal>.
+ *
+ * Returns: A newly allocated string containing the help text
+ *
+ * Since: 2.14
+ */
+gchar *
+g_option_context_get_help (GOptionContext *context,
+	                   gboolean        main_help,
+	                   GOptionGroup   *group)
+{
+  GList *list;
+  gint max_length, len;
+  gint i;
+  GOptionEntry *entry;
+  GHashTable *shadow_map;
+  gboolean seen[256];
+  const gchar *rest_description;
+  GString *string;
+
+  string = g_string_sized_new (1024);
+
+  rest_description = NULL;
+  if (context->main_group)
+    {
+
+      for (i = 0; i < context->main_group->n_entries; i++)
+	{
+	  entry = &context->main_group->entries[i];
+	  if (entry->long_name[0] == 0)
+	    {
+	      rest_description = TRANSLATE (context->main_group, entry->arg_description);
+	      break;
+	    }
+	}
+    }
+
+  g_string_append_printf (string, "%s\n  %s %s", 
+	                  _("Usage:"), g_get_prgname(), _("[OPTION...]"));
+
+  if (rest_description)
+    {
+      g_string_append (string, " ");
+      g_string_append (string, rest_description);
+    }
+
+  if (context->parameter_string)
+    {
+      g_string_append (string, " ");
+      g_string_append (string, TRANSLATE (context, context->parameter_string));
+    }
+
+  g_string_append (string, "\n\n");
+
+  if (context->summary)
+    {
+      g_string_append (string, TRANSLATE (context, context->summary));
+      g_string_append (string, "\n\n");
+    }
+
+  memset (seen, 0, sizeof (gboolean) * 256);
+  shadow_map = g_hash_table_new (g_str_hash, g_str_equal);
+
+  if (context->main_group)
+    {
+      for (i = 0; i < context->main_group->n_entries; i++)
+	{
+	  entry = &context->main_group->entries[i];
+	  g_hash_table_insert (shadow_map, 
+			       (gpointer)entry->long_name, 
+			       entry);
+	  
+	  if (seen[(guchar)entry->short_name])
+	    entry->short_name = 0;
+	  else
+	    seen[(guchar)entry->short_name] = TRUE;
+	}
+    }
+
+  list = context->groups;
+  while (list != NULL)
+    {
+      GOptionGroup *g = list->data;
+      for (i = 0; i < g->n_entries; i++)
+	{
+	  entry = &g->entries[i];
+	  if (g_hash_table_lookup (shadow_map, entry->long_name) && 
+	      !(entry->flags & G_OPTION_FLAG_NOALIAS))
+	    entry->long_name = g_strdup_printf ("%s-%s", g->name, entry->long_name);
+	  else  
+	    g_hash_table_insert (shadow_map, (gpointer)entry->long_name, entry);
+
+	  if (seen[(guchar)entry->short_name] && 
+	      !(entry->flags & G_OPTION_FLAG_NOALIAS))
+	    entry->short_name = 0;
+	  else
+	    seen[(guchar)entry->short_name] = TRUE;
+	}
+      list = list->next;
+    }
+
+  g_hash_table_destroy (shadow_map);
+
+  list = context->groups;
+
+  max_length = _g_utf8_strwidth ("-?, --help", -1);
+
+  if (list)
+    {
+      len = _g_utf8_strwidth ("--help-all", -1);
+      max_length = MAX (max_length, len);
+    }
+
+  if (context->main_group)
+    {
+      len = calculate_max_length (context->main_group);
+      max_length = MAX (max_length, len);
+    }
+
+  while (list != NULL)
+    {
+      GOptionGroup *g = list->data;
+      
+      /* First, we check the --help-<groupname> options */
+      len = _g_utf8_strwidth ("--help-", -1) + _g_utf8_strwidth (g->name, -1);
+      max_length = MAX (max_length, len);
+
+      /* Then we go through the entries */
+      len = calculate_max_length (g);
+      max_length = MAX (max_length, len);
+      
+      list = list->next;
+    }
+
+  /* Add a bit of padding */
+  max_length += 4;
+
+  if (!group)
+    {
+      list = context->groups;
+      
+      g_string_append_printf (string, "%s\n  -%c, --%-*s %s\n", 
+	                      _("Help Options:"), '?', max_length - 4, "help", 
+	                      _("Show help options"));
+      
+      /* We only want --help-all when there are groups */
+      if (list)
+	g_string_append_printf (string, "  --%-*s %s\n", 
+                                max_length, "help-all", 
+                                _("Show all help options"));
+      
+      while (list)
+	{
+	  GOptionGroup *g = list->data;
+
+	  if (group_has_visible_entries (context, g, FALSE))
+	    g_string_append_printf (string, "  --help-%-*s %s\n",
+				    max_length - 5, g->name,
+				    TRANSLATE (g, g->help_description));
+	  
+	  list = list->next;
+	}
+
+      g_string_append (string, "\n");
+    }
+
+  if (group)
+    {
+      /* Print a certain group */
+
+      if (group_has_visible_entries (context, group, FALSE))
+        {
+          g_string_append (string, TRANSLATE (group, group->description));
+          g_string_append (string, "\n");
+          for (i = 0; i < group->n_entries; i++)
+            print_entry (group, max_length, &group->entries[i], string);
+          g_string_append (string, "\n");
+        }
+    }
+  else if (!main_help)
+    {
+      /* Print all groups */
+
+      list = context->groups;
+
+      while (list)
+	{
+	  GOptionGroup *g = list->data;
+
+	  if (group_has_visible_entries (context, g, FALSE))
+	    {
+	      g_string_append (string, g->description);
+	      g_string_append (string, "\n");
+	      for (i = 0; i < g->n_entries; i++)
+		if (!(g->entries[i].flags & G_OPTION_FLAG_IN_MAIN))
+		  print_entry (g, max_length, &g->entries[i], string);
+	  
+	      g_string_append (string, "\n");
+	    }
+
+	  list = list->next;
+	}
+    }
+  
+  /* Print application options if --help or --help-all has been specified */
+  if ((main_help || !group) &&
+      (group_has_visible_entries (context, context->main_group, TRUE) ||
+       group_list_has_visible_entires (context, context->groups, TRUE)))
+    {
+      list = context->groups;
+
+      g_string_append (string,  _("Application Options:"));
+      g_string_append (string, "\n");
+      if (context->main_group)
+	for (i = 0; i < context->main_group->n_entries; i++) 
+	  print_entry (context->main_group, max_length, 
+		       &context->main_group->entries[i], string);
+
+      while (list != NULL)
+	{
+	  GOptionGroup *g = list->data;
+
+	  /* Print main entries from other groups */
+	  for (i = 0; i < g->n_entries; i++)
+	    if (g->entries[i].flags & G_OPTION_FLAG_IN_MAIN)
+	      print_entry (g, max_length, &g->entries[i], string);
+	  
+	  list = list->next;
+	}
+
+      g_string_append (string, "\n");
+    }
+ 
+  if (context->description)
+    {
+      g_string_append (string, TRANSLATE (context, context->description));
+      g_string_append (string, "\n");
+    }
+
+  return g_string_free (string, FALSE);
+}
+
+G_GNUC_NORETURN
+static void
+print_help (GOptionContext *context,
+	    gboolean        main_help,
+	    GOptionGroup   *group)
+{
+  gchar *help;
+
+  help = g_option_context_get_help (context, main_help, group);
+  g_print ("%s", help);
+  g_free (help);
+
+  exit (0);  
+}
+
+static gboolean
+parse_int (const gchar *arg_name,
+	   const gchar *arg,
+	   gint        *result,
+	   GError     **error)
+{
+  gchar *end;
+  glong tmp;
+
+  errno = 0;
+  tmp = strtol (arg, &end, 0);
+  
+  if (*arg == '\0' || *end != '\0')
+    {
+      g_set_error (error,
+		   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+		   _("Cannot parse integer value '%s' for %s"),
+		   arg, arg_name);
+      return FALSE;
+    }
+
+  *result = tmp;
+  if (*result != tmp || errno == ERANGE)
+    {
+      g_set_error (error,
+		   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+		   _("Integer value '%s' for %s out of range"),
+		   arg, arg_name);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+
+static gboolean
+parse_double (const gchar *arg_name,
+	   const gchar *arg,
+	   gdouble        *result,
+	   GError     **error)
+{
+  gchar *end;
+  gdouble tmp;
+
+  errno = 0;
+  tmp = g_strtod (arg, &end);
+  
+  if (*arg == '\0' || *end != '\0')
+    {
+      g_set_error (error,
+		   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+		   _("Cannot parse double value '%s' for %s"),
+		   arg, arg_name);
+      return FALSE;
+    }
+  if (errno == ERANGE)
+    {
+      g_set_error (error,
+		   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+		   _("Double value '%s' for %s out of range"),
+		   arg, arg_name);
+      return FALSE;
+    }
+
+  *result = tmp;
+  
+  return TRUE;
+}
+
+
+static gboolean
+parse_int64 (const gchar *arg_name,
+	     const gchar *arg,
+	     gint64      *result,
+	     GError     **error)
+{
+  gchar *end;
+  gint64 tmp;
+
+  errno = 0;
+  tmp = g_ascii_strtoll (arg, &end, 0);
+
+  if (*arg == '\0' || *end != '\0')
+    {
+      g_set_error (error,
+		   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+		   _("Cannot parse integer value '%s' for %s"),
+		   arg, arg_name);
+      return FALSE;
+    }
+  if (errno == ERANGE)
+    {
+      g_set_error (error,
+		   G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+		   _("Integer value '%s' for %s out of range"),
+		   arg, arg_name);
+      return FALSE;
+    }
+
+  *result = tmp;
+  
+  return TRUE;
+}
+
+
+static Change *
+get_change (GOptionContext *context,
+	    GOptionArg      arg_type,
+	    gpointer        arg_data)
+{
+  GList *list;
+  Change *change = NULL;
+  
+  for (list = context->changes; list != NULL; list = list->next)
+    {
+      change = list->data;
+
+      if (change->arg_data == arg_data)
+	goto found;
+    }
+
+  change = g_new0 (Change, 1);
+  change->arg_type = arg_type;
+  change->arg_data = arg_data;
+  
+  context->changes = g_list_prepend (context->changes, change);
+  
+ found:
+
+  return change;
+}
+
+static void
+add_pending_null (GOptionContext *context,
+		  gchar         **ptr,
+		  gchar          *value)
+{
+  PendingNull *n;
+
+  n = g_new0 (PendingNull, 1);
+  n->ptr = ptr;
+  n->value = value;
+
+  context->pending_nulls = g_list_prepend (context->pending_nulls, n);
+}
+		  
+static gboolean
+parse_arg (GOptionContext *context,
+	   GOptionGroup   *group,
+	   GOptionEntry   *entry,
+	   const gchar    *value,
+	   const gchar    *option_name,
+	   GError        **error)
+     
+{
+  Change *change;
+
+  g_assert (value || OPTIONAL_ARG (entry) || NO_ARG (entry));
+
+  switch (entry->arg)
+    {
+    case G_OPTION_ARG_NONE:
+      {
+	change = get_change (context, G_OPTION_ARG_NONE,
+			     entry->arg_data);
+
+	*(gboolean *)entry->arg_data = !(entry->flags & G_OPTION_FLAG_REVERSE);
+ 	break;
+      }	     
+    case G_OPTION_ARG_STRING:
+      {
+	gchar *data;
+	
+	data = g_locale_to_utf8 (value, -1, NULL, NULL, error);
+
+	if (!data)
+	  return FALSE;
+
+	change = get_change (context, G_OPTION_ARG_STRING,
+			     entry->arg_data);
+	g_free (change->allocated.str);
+	
+	change->prev.str = *(gchar **)entry->arg_data;
+	change->allocated.str = data;
+	
+	*(gchar **)entry->arg_data = data;
+	break;
+      }
+    case G_OPTION_ARG_STRING_ARRAY:
+      {
+	gchar *data;
+
+	data = g_locale_to_utf8 (value, -1, NULL, NULL, error);
+
+	if (!data)
+	  return FALSE;
+
+	change = get_change (context, G_OPTION_ARG_STRING_ARRAY,
+			     entry->arg_data);
+
+	if (change->allocated.array.len == 0)
+	  {
+	    change->prev.array = *(gchar ***)entry->arg_data;
+	    change->allocated.array.data = g_new (gchar *, 2);
+	  }
+	else
+	  change->allocated.array.data =
+	    g_renew (gchar *, change->allocated.array.data,
+		     change->allocated.array.len + 2);
+
+	change->allocated.array.data[change->allocated.array.len] = data;
+	change->allocated.array.data[change->allocated.array.len + 1] = NULL;
+
+	change->allocated.array.len ++;
+
+	*(gchar ***)entry->arg_data = change->allocated.array.data;
+
+	break;
+      }
+      
+    case G_OPTION_ARG_FILENAME:
+      {
+	gchar *data;
+
+#ifdef G_OS_WIN32
+	data = g_locale_to_utf8 (value, -1, NULL, NULL, error);
+	
+	if (!data)
+	  return FALSE;
+#else
+	data = g_strdup (value);
+#endif
+	change = get_change (context, G_OPTION_ARG_FILENAME,
+			     entry->arg_data);
+	g_free (change->allocated.str);
+	
+	change->prev.str = *(gchar **)entry->arg_data;
+	change->allocated.str = data;
+
+	*(gchar **)entry->arg_data = data;
+	break;
+      }
+
+    case G_OPTION_ARG_FILENAME_ARRAY:
+      {
+	gchar *data;
+	
+#ifdef G_OS_WIN32
+	data = g_locale_to_utf8 (value, -1, NULL, NULL, error);
+	
+	if (!data)
+	  return FALSE;
+#else
+	data = g_strdup (value);
+#endif
+	change = get_change (context, G_OPTION_ARG_STRING_ARRAY,
+			     entry->arg_data);
+
+	if (change->allocated.array.len == 0)
+	  {
+	    change->prev.array = *(gchar ***)entry->arg_data;
+	    change->allocated.array.data = g_new (gchar *, 2);
+	  }
+	else
+	  change->allocated.array.data =
+	    g_renew (gchar *, change->allocated.array.data,
+		     change->allocated.array.len + 2);
+
+	change->allocated.array.data[change->allocated.array.len] = data;
+	change->allocated.array.data[change->allocated.array.len + 1] = NULL;
+
+	change->allocated.array.len ++;
+
+	*(gchar ***)entry->arg_data = change->allocated.array.data;
+
+	break;
+      }
+      
+    case G_OPTION_ARG_INT:
+      {
+	gint data;
+
+	if (!parse_int (option_name, value,
+ 			&data,
+			error))
+	  return FALSE;
+
+	change = get_change (context, G_OPTION_ARG_INT,
+			     entry->arg_data);
+	change->prev.integer = *(gint *)entry->arg_data;
+	*(gint *)entry->arg_data = data;
+	break;
+      }
+    case G_OPTION_ARG_CALLBACK:
+      {
+	gchar *data;
+	gboolean retval;
+
+	if (!value && entry->flags & G_OPTION_FLAG_OPTIONAL_ARG)
+	  data = NULL;
+	else if (entry->flags & G_OPTION_FLAG_NO_ARG)
+	  data = NULL;
+	else if (entry->flags & G_OPTION_FLAG_FILENAME)
+	  {
+#ifdef G_OS_WIN32
+  	    data = g_locale_to_utf8 (value, -1, NULL, NULL, error);
+#else
+	    data = g_strdup (value);
+#endif
+	  }
+	else
+	  data = g_locale_to_utf8 (value, -1, NULL, NULL, error);
+
+	if (!(entry->flags & (G_OPTION_FLAG_NO_ARG|G_OPTION_FLAG_OPTIONAL_ARG)) && 
+	    !data)
+	  return FALSE;
+
+	retval = (* (GOptionArgFunc) entry->arg_data) (option_name, data, group->user_data, error);
+	
+	if (!retval && error != NULL && *error == NULL)
+	  g_set_error (error, 
+		       G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
+		       _("Error parsing option %s"), option_name);
+
+	g_free (data);
+	
+	return retval;
+	
+	break;
+      }
+    case G_OPTION_ARG_DOUBLE:
+      {
+	gdouble data;
+
+	if (!parse_double (option_name, value,
+ 			&data,
+			error))
+	  {
+	    return FALSE;
+	  }
+
+	change = get_change (context, G_OPTION_ARG_DOUBLE,
+			     entry->arg_data);
+	change->prev.dbl = *(gdouble *)entry->arg_data;
+	*(gdouble *)entry->arg_data = data;
+	break;
+      }
+    case G_OPTION_ARG_INT64:
+      {
+        gint64 data;
+
+	if (!parse_int64 (option_name, value,
+ 			 &data,
+			 error))
+	  {
+	    return FALSE;
+	  }
+
+	change = get_change (context, G_OPTION_ARG_INT64,
+			     entry->arg_data);
+	change->prev.int64 = *(gint64 *)entry->arg_data;
+	*(gint64 *)entry->arg_data = data;
+	break;
+      }
+    default:
+      g_assert_not_reached ();
+    }
+
+  return TRUE;
+}
+
+static gboolean
+parse_short_option (GOptionContext *context,
+		    GOptionGroup   *group,
+		    gint            idx,
+		    gint           *new_idx,
+		    gchar           arg,
+		    gint           *argc,
+		    gchar        ***argv,
+		    GError        **error,
+		    gboolean       *parsed)
+{
+  gint j;
+    
+  for (j = 0; j < group->n_entries; j++)
+    {
+      if (arg == group->entries[j].short_name)
+	{
+	  gchar *option_name;
+	  gchar *value = NULL;
+	  
+	  option_name = g_strdup_printf ("-%c", group->entries[j].short_name);
+
+	  if (NO_ARG (&group->entries[j]))
+	    value = NULL;
+	  else
+	    {
+	      if (*new_idx > idx)
+		{
+		  g_set_error (error, 
+			       G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
+			       _("Error parsing option %s"), option_name);
+		  g_free (option_name);
+		  return FALSE;
+		}
+
+	      if (idx < *argc - 1)
+		{
+		  if (!OPTIONAL_ARG (&group->entries[j]))	
+		    {    
+		      value = (*argv)[idx + 1];
+		      add_pending_null (context, &((*argv)[idx + 1]), NULL);
+		      *new_idx = idx + 1;
+		    }
+		  else
+		    {
+                      if ((*argv)[idx + 1][0] == '-') 
+			value = NULL;
+		      else
+		        {
+		          value = (*argv)[idx + 1];
+		          add_pending_null (context, &((*argv)[idx + 1]), NULL);
+		          *new_idx = idx + 1;
+			}
+	            }
+		}
+	      else if (idx >= *argc - 1 && OPTIONAL_ARG (&group->entries[j]))
+		value = NULL;
+	      else
+		{
+		  g_set_error (error, 
+			       G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+			       _("Missing argument for %s"), option_name);
+		  g_free (option_name);
+		  return FALSE;
+		}
+	    }
+
+	  if (!parse_arg (context, group, &group->entries[j], 
+			  value, option_name, error))
+	    {
+	      g_free (option_name);
+	      return FALSE;
+	    }
+	  
+	  g_free (option_name);
+	  *parsed = TRUE;
+	}
+    }
+
+  return TRUE;
+}
+
+static gboolean
+parse_long_option (GOptionContext *context,
+		   GOptionGroup   *group,
+		   gint           *idx,
+		   gchar          *arg,
+		   gboolean        aliased,
+		   gint           *argc,
+		   gchar        ***argv,
+		   GError        **error,
+		   gboolean       *parsed)
+{
+  gint j;
+
+  for (j = 0; j < group->n_entries; j++)
+    {
+      if (*idx >= *argc)
+	return TRUE;
+
+      if (aliased && (group->entries[j].flags & G_OPTION_FLAG_NOALIAS))
+	continue;
+
+      if (NO_ARG (&group->entries[j]) &&
+	  strcmp (arg, group->entries[j].long_name) == 0)
+	{
+	  gchar *option_name;
+	  gboolean retval;
+
+	  option_name = g_strconcat ("--", group->entries[j].long_name, NULL);
+	  retval = parse_arg (context, group, &group->entries[j],
+			      NULL, option_name, error);
+	  g_free(option_name);
+	  
+	  add_pending_null (context, &((*argv)[*idx]), NULL);
+	  *parsed = TRUE;
+
+	  return retval;
+	}
+      else
+	{
+	  gint len = strlen (group->entries[j].long_name);
+	  
+	  if (strncmp (arg, group->entries[j].long_name, len) == 0 &&
+	      (arg[len] == '=' || arg[len] == 0))
+	    {
+	      gchar *value = NULL;
+	      gchar *option_name;
+
+	      add_pending_null (context, &((*argv)[*idx]), NULL);
+	      option_name = g_strconcat ("--", group->entries[j].long_name, NULL);
+
+	      if (arg[len] == '=')
+		value = arg + len + 1;
+	      else if (*idx < *argc - 1) 
+		{
+		  if (!(group->entries[j].flags & G_OPTION_FLAG_OPTIONAL_ARG))	
+		    {    
+		      value = (*argv)[*idx + 1];
+		      add_pending_null (context, &((*argv)[*idx + 1]), NULL);
+		      (*idx)++;
+		    }
+		  else
+		    {
+                      if ((*argv)[*idx + 1][0] == '-') 
+		        {
+		          gboolean retval;
+		          retval = parse_arg (context, group, &group->entries[j],
+					      NULL, option_name, error);
+	  	          *parsed = TRUE;
+		          g_free (option_name);
+	   	          return retval;
+		        }
+		      else
+		        {
+		          value = (*argv)[*idx + 1];
+		          add_pending_null (context, &((*argv)[*idx + 1]), NULL);
+		          (*idx)++;
+			}
+	            }
+		}
+	      else if (*idx >= *argc - 1 &&
+		       group->entries[j].flags & G_OPTION_FLAG_OPTIONAL_ARG)
+		{
+		    gboolean retval;
+		    retval = parse_arg (context, group, &group->entries[j],
+					NULL, option_name, error);
+	  	    *parsed = TRUE;
+		    g_free (option_name);
+	   	    return retval;
+		}
+	      else
+		{
+		  g_set_error (error, 
+			       G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+			       _("Missing argument for %s"), option_name);
+		  g_free (option_name);
+		  return FALSE;
+		}
+
+	      if (!parse_arg (context, group, &group->entries[j], 
+			      value, option_name, error))
+		{
+		  g_free (option_name);
+		  return FALSE;
+		}
+
+	      g_free (option_name);
+	      *parsed = TRUE;
+	    } 
+	}
+    }
+  
+  return TRUE;
+}
+
+static gboolean
+parse_remaining_arg (GOptionContext *context,
+		     GOptionGroup   *group,
+		     gint           *idx,
+		     gint           *argc,
+		     gchar        ***argv,
+		     GError        **error,
+		     gboolean       *parsed)
+{
+  gint j;
+
+  for (j = 0; j < group->n_entries; j++)
+    {
+      if (*idx >= *argc)
+	return TRUE;
+
+      if (group->entries[j].long_name[0])
+	continue;
+
+      g_return_val_if_fail (group->entries[j].arg == G_OPTION_ARG_CALLBACK ||
+                            group->entries[j].arg == G_OPTION_ARG_STRING_ARRAY ||
+			    group->entries[j].arg == G_OPTION_ARG_FILENAME_ARRAY, FALSE);
+      
+      add_pending_null (context, &((*argv)[*idx]), NULL);
+      
+      if (!parse_arg (context, group, &group->entries[j], (*argv)[*idx], "", error))
+	return FALSE;
+      
+      *parsed = TRUE;
+      return TRUE;
+    }
+
+  return TRUE;
+}
+
+static void
+free_changes_list (GOptionContext *context,
+		   gboolean        revert)
+{
+  GList *list;
+
+  for (list = context->changes; list != NULL; list = list->next)
+    {
+      Change *change = list->data;
+
+      if (revert)
+	{
+	  switch (change->arg_type)
+	    {
+	    case G_OPTION_ARG_NONE:
+	      *(gboolean *)change->arg_data = change->prev.bool;
+	      break;
+	    case G_OPTION_ARG_INT:
+	      *(gint *)change->arg_data = change->prev.integer;
+	      break;
+	    case G_OPTION_ARG_STRING:
+	    case G_OPTION_ARG_FILENAME:
+              g_free (change->allocated.str);
+	      *(gchar **)change->arg_data = change->prev.str;
+	      break;
+	    case G_OPTION_ARG_STRING_ARRAY:
+	    case G_OPTION_ARG_FILENAME_ARRAY:
+	      g_strfreev (change->allocated.array.data);
+	      *(gchar ***)change->arg_data = change->prev.array;
+	      break;
+	    case G_OPTION_ARG_DOUBLE:
+	      *(gdouble *)change->arg_data = change->prev.dbl;
+	      break;
+	    case G_OPTION_ARG_INT64:
+	      *(gint64 *)change->arg_data = change->prev.int64;
+	      break;
+	    default:
+	      g_assert_not_reached ();
+	    }
+	}
+      
+      g_free (change);
+    }
+
+  g_list_free (context->changes);
+  context->changes = NULL;
+}
+
+static void
+free_pending_nulls (GOptionContext *context,
+		    gboolean        perform_nulls)
+{
+  GList *list;
+
+  for (list = context->pending_nulls; list != NULL; list = list->next)
+    {
+      PendingNull *n = list->data;
+
+      if (perform_nulls)
+	{
+	  if (n->value)
+	    {
+	      /* Copy back the short options */
+	      *(n->ptr)[0] = '-';	      
+	      strcpy (*n->ptr + 1, n->value);
+	    }
+	  else
+	    *n->ptr = NULL;
+	}
+      
+      g_free (n->value);
+      g_free (n);
+    }
+
+  g_list_free (context->pending_nulls);
+  context->pending_nulls = NULL;
+}
+
+/**
+ * g_option_context_parse:
+ * @context: a #GOptionContext
+ * @argc: a pointer to the number of command line arguments
+ * @argv: a pointer to the array of command line arguments
+ * @error: a return location for errors 
+ * 
+ * Parses the command line arguments, recognizing options
+ * which have been added to @context. A side-effect of 
+ * calling this function is that g_set_prgname() will be
+ * called.
+ *
+ * If the parsing is successful, any parsed arguments are
+ * removed from the array and @argc and @argv are updated 
+ * accordingly. A '--' option is stripped from @argv
+ * unless there are unparsed options before and after it, 
+ * or some of the options after it start with '-'. In case 
+ * of an error, @argc and @argv are left unmodified. 
+ *
+ * If automatic <option>--help</option> support is enabled
+ * (see g_option_context_set_help_enabled()), and the 
+ * @argv array contains one of the recognized help options,
+ * this function will produce help output to stdout and
+ * call <literal>exit (0)</literal>.
+ *
+ * Note that function depends on the 
+ * <link linkend="setlocale">current locale</link> for 
+ * automatic character set conversion of string and filename
+ * arguments.
+ * 
+ * Return value: %TRUE if the parsing was successful, 
+ *               %FALSE if an error occurred
+ *
+ * Since: 2.6
+ **/
+gboolean
+g_option_context_parse (GOptionContext   *context,
+			gint             *argc,
+			gchar          ***argv,
+			GError          **error)
+{
+  gint i, j, k;
+  GList *list;
+
+  /* Set program name */
+  if (!g_get_prgname())
+    {
+      if (argc && argv && *argc)
+	{
+	  gchar *prgname;
+	  
+	  prgname = g_path_get_basename ((*argv)[0]);
+	  g_set_prgname (prgname);
+	  g_free (prgname);
+	}
+      else
+	g_set_prgname ("<unknown>");
+    }
+
+  /* Call pre-parse hooks */
+  list = context->groups;
+  while (list)
+    {
+      GOptionGroup *group = list->data;
+      
+      if (group->pre_parse_func)
+	{
+	  if (!(* group->pre_parse_func) (context, group,
+					  group->user_data, error))
+	    goto fail;
+	}
+      
+      list = list->next;
+    }
+
+  if (context->main_group && context->main_group->pre_parse_func)
+    {
+      if (!(* context->main_group->pre_parse_func) (context, context->main_group,
+						    context->main_group->user_data, error))
+	goto fail;
+    }
+
+  if (argc && argv)
+    {
+      gboolean stop_parsing = FALSE;
+      gboolean has_unknown = FALSE;
+      gint separator_pos = 0;
+
+      for (i = 1; i < *argc; i++)
+	{
+	  gchar *arg, *dash;
+	  gboolean parsed = FALSE;
+
+	  if ((*argv)[i][0] == '-' && (*argv)[i][1] != '\0' && !stop_parsing)
+	    {
+	      if ((*argv)[i][1] == '-')
+		{
+		  /* -- option */
+
+		  arg = (*argv)[i] + 2;
+
+		  /* '--' terminates list of arguments */
+		  if (*arg == 0)
+		    {
+		      separator_pos = i;
+		      stop_parsing = TRUE;
+		      continue;
+		    }
+
+		  /* Handle help options */
+		  if (context->help_enabled)
+		    {
+		      if (strcmp (arg, "help") == 0)
+			print_help (context, TRUE, NULL);
+		      else if (strcmp (arg, "help-all") == 0)
+			print_help (context, FALSE, NULL);		      
+		      else if (strncmp (arg, "help-", 5) == 0)
+			{
+			  list = context->groups;
+			  
+			  while (list)
+			    {
+			      GOptionGroup *group = list->data;
+			      
+			      if (strcmp (arg + 5, group->name) == 0)
+				print_help (context, FALSE, group);		      			      
+			      
+			      list = list->next;
+			    }
+			}
+		    }
+
+		  if (context->main_group &&
+		      !parse_long_option (context, context->main_group, &i, arg,
+					  FALSE, argc, argv, error, &parsed))
+		    goto fail;
+
+		  if (parsed)
+		    continue;
+		  
+		  /* Try the groups */
+		  list = context->groups;
+		  while (list)
+		    {
+		      GOptionGroup *group = list->data;
+		      
+		      if (!parse_long_option (context, group, &i, arg, 
+					      FALSE, argc, argv, error, &parsed))
+			goto fail;
+		      
+		      if (parsed)
+			break;
+		      
+		      list = list->next;
+		    }
+		  
+		  if (parsed)
+		    continue;
+
+		  /* Now look for --<group>-<option> */
+		  dash = strchr (arg, '-');
+		  if (dash)
+		    {
+		      /* Try the groups */
+		      list = context->groups;
+		      while (list)
+			{
+			  GOptionGroup *group = list->data;
+			  
+			  if (strncmp (group->name, arg, dash - arg) == 0)
+			    {
+			      if (!parse_long_option (context, group, &i, dash + 1,
+						      TRUE, argc, argv, error, &parsed))
+				goto fail;
+			      
+			      if (parsed)
+				break;
+			    }
+			  
+			  list = list->next;
+			}
+		    }
+		  
+		  if (context->ignore_unknown)
+		    continue;
+		}
+	      else
+		{ /* short option */
+		  gint new_i = i, arg_length;
+		  gboolean *nulled_out = NULL;
+		  arg = (*argv)[i] + 1;
+                  arg_length = strlen (arg);
+                  nulled_out = g_newa (gboolean, arg_length);
+                  memset (nulled_out, 0, arg_length * sizeof (gboolean));
+		  for (j = 0; j < arg_length; j++)
+		    {
+		      if (context->help_enabled && arg[j] == '?')
+			print_help (context, TRUE, NULL);
+		      parsed = FALSE;
+		      if (context->main_group &&
+			  !parse_short_option (context, context->main_group,
+					       i, &new_i, arg[j],
+					       argc, argv, error, &parsed))
+                        goto fail;
+		      if (!parsed)
+			{
+			  /* Try the groups */
+			  list = context->groups;
+			  while (list)
+			    {
+			      GOptionGroup *group = list->data;
+			      if (!parse_short_option (context, group, i, &new_i, arg[j],
+						       argc, argv, error, &parsed))
+				goto fail;
+			      if (parsed)
+				break;
+			      list = list->next;
+			    }
+			}
+                      
+		      if (context->ignore_unknown && parsed)
+                        nulled_out[j] = TRUE;
+                      else if (context->ignore_unknown)
+                        continue;
+                      else if (!parsed)
+                        break;
+                      /* !context->ignore_unknown && parsed */
+		    }
+		  if (context->ignore_unknown)
+		    {
+		      gchar *new_arg = NULL; 
+		      gint arg_index = 0;
+		      for (j = 0; j < arg_length; j++)
+			{
+			  if (!nulled_out[j])
+			    {
+			      if (!new_arg)
+				new_arg = g_malloc (arg_length + 1);
+			      new_arg[arg_index++] = arg[j];
+			    }
+			}
+		      if (new_arg)
+			new_arg[arg_index] = '\0';
+		      add_pending_null (context, &((*argv)[i]), new_arg);
+		    }
+		  else if (parsed)
+		    {
+		      add_pending_null (context, &((*argv)[i]), NULL);
+		      i = new_i;
+		    }
+		}
+	      
+	      if (!parsed)
+		has_unknown = TRUE;
+
+	      if (!parsed && !context->ignore_unknown)
+		{
+		  g_set_error (error,
+			       G_OPTION_ERROR, G_OPTION_ERROR_UNKNOWN_OPTION,
+				   _("Unknown option %s"), (*argv)[i]);
+		  goto fail;
+		}
+	    }
+	  else
+	    {
+	      /* Collect remaining args */
+	      if (context->main_group &&
+		  !parse_remaining_arg (context, context->main_group, &i,
+					argc, argv, error, &parsed))
+		goto fail;
+	      
+	      if (!parsed && (has_unknown || (*argv)[i][0] == '-'))
+		separator_pos = 0;
+	    }
+	}
+
+      if (separator_pos > 0)
+	add_pending_null (context, &((*argv)[separator_pos]), NULL);
+	
+    }
+
+  /* Call post-parse hooks */
+  list = context->groups;
+  while (list)
+    {
+      GOptionGroup *group = list->data;
+      
+      if (group->post_parse_func)
+	{
+	  if (!(* group->post_parse_func) (context, group,
+					   group->user_data, error))
+	    goto fail;
+	}
+      
+      list = list->next;
+    }
+  
+  if (context->main_group && context->main_group->post_parse_func)
+    {
+      if (!(* context->main_group->post_parse_func) (context, context->main_group,
+						     context->main_group->user_data, error))
+	goto fail;
+    }
+  
+  if (argc && argv)
+    {
+      free_pending_nulls (context, TRUE);
+      
+      for (i = 1; i < *argc; i++)
+	{
+	  for (k = i; k < *argc; k++)
+	    if ((*argv)[k] != NULL)
+	      break;
+	  
+	  if (k > i)
+	    {
+	      k -= i;
+	      for (j = i + k; j < *argc; j++)
+		{
+		  (*argv)[j-k] = (*argv)[j];
+		  (*argv)[j] = NULL;
+		}
+	      *argc -= k;
+	    }
+	}      
+    }
+
+  return TRUE;
+
+ fail:
+  
+  /* Call error hooks */
+  list = context->groups;
+  while (list)
+    {
+      GOptionGroup *group = list->data;
+      
+      if (group->error_func)
+	(* group->error_func) (context, group,
+			       group->user_data, error);
+      
+      list = list->next;
+    }
+
+  if (context->main_group && context->main_group->error_func)
+    (* context->main_group->error_func) (context, context->main_group,
+					 context->main_group->user_data, error);
+  
+  free_changes_list (context, TRUE);
+  free_pending_nulls (context, FALSE);
+
+  return FALSE;
+}
+				   
+/**
+ * g_option_group_new:
+ * @name: the name for the option group, this is used to provide
+ *   help for the options in this group with <option>--help-</option>@name
+ * @description: a description for this group to be shown in 
+ *   <option>--help</option>. This string is translated using the translation
+ *   domain or translation function of the group
+ * @help_description: a description for the <option>--help-</option>@name option.
+ *   This string is translated using the translation domain or translation function
+ *   of the group
+ * @user_data: user data that will be passed to the pre- and post-parse hooks,
+ *   the error hook and to callbacks of %G_OPTION_ARG_CALLBACK options, or %NULL
+ * @destroy: a function that will be called to free @user_data, or %NULL
+ * 
+ * Creates a new #GOptionGroup.
+ * 
+ * Return value: a newly created option group. It should be added 
+ *   to a #GOptionContext or freed with g_option_group_free().
+ *
+ * Since: 2.6
+ **/
+GOptionGroup *
+g_option_group_new (const gchar    *name,
+		    const gchar    *description,
+		    const gchar    *help_description,
+		    gpointer        user_data,
+		    GDestroyNotify  destroy)
+
+{
+  GOptionGroup *group;
+
+  group = g_new0 (GOptionGroup, 1);
+  group->name = g_strdup (name);
+  group->description = g_strdup (description);
+  group->help_description = g_strdup (help_description);
+  group->user_data = user_data;
+  group->destroy_notify = destroy;
+  
+  return group;
+}
+
+
+/**
+ * g_option_group_free:
+ * @group: a #GOptionGroup
+ * 
+ * Frees a #GOptionGroup. Note that you must <emphasis>not</emphasis>
+ * free groups which have been added to a #GOptionContext.
+ *
+ * Since: 2.6
+ **/
+void
+g_option_group_free (GOptionGroup *group)
+{
+  g_return_if_fail (group != NULL);
+
+  g_free (group->name);
+  g_free (group->description);
+  g_free (group->help_description);
+
+  g_free (group->entries);
+  
+  if (group->destroy_notify)
+    (* group->destroy_notify) (group->user_data);
+
+  if (group->translate_notify)
+    (* group->translate_notify) (group->translate_data);
+  
+  g_free (group);
+}
+
+
+/**
+ * g_option_group_add_entries:
+ * @group: a #GOptionGroup
+ * @entries: a %NULL-terminated array of #GOptionEntry<!-- -->s
+ * 
+ * Adds the options specified in @entries to @group.
+ *
+ * Since: 2.6
+ **/
+void
+g_option_group_add_entries (GOptionGroup       *group,
+			    const GOptionEntry *entries)
+{
+  gint i, n_entries;
+  
+  g_return_if_fail (entries != NULL);
+
+  for (n_entries = 0; entries[n_entries].long_name != NULL; n_entries++) ;
+
+  group->entries = g_renew (GOptionEntry, group->entries, group->n_entries + n_entries);
+
+  memcpy (group->entries + group->n_entries, entries, sizeof (GOptionEntry) * n_entries);
+
+  for (i = group->n_entries; i < group->n_entries + n_entries; i++)
+    {
+      gchar c = group->entries[i].short_name;
+
+      if (c)
+	{
+	  if (c == '-' || !g_ascii_isprint (c))
+	    {
+	      g_warning (G_STRLOC": ignoring invalid short option '%c' (%d)", c, c);
+	      group->entries[i].short_name = 0;
+	    }
+	}
+    }
+
+  group->n_entries += n_entries;
+}
+
+/**
+ * g_option_group_set_parse_hooks:
+ * @group: a #GOptionGroup
+ * @pre_parse_func: a function to call before parsing, or %NULL
+ * @post_parse_func: a function to call after parsing, or %NULL
+ * 
+ * Associates two functions with @group which will be called 
+ * from g_option_context_parse() before the first option is parsed
+ * and after the last option has been parsed, respectively.
+ *
+ * Note that the user data to be passed to @pre_parse_func and
+ * @post_parse_func can be specified when constructing the group
+ * with g_option_group_new().
+ *
+ * Since: 2.6
+ **/
+void
+g_option_group_set_parse_hooks (GOptionGroup     *group,
+				GOptionParseFunc  pre_parse_func,
+				GOptionParseFunc  post_parse_func)
+{
+  g_return_if_fail (group != NULL);
+
+  group->pre_parse_func = pre_parse_func;
+  group->post_parse_func = post_parse_func;  
+}
+
+/**
+ * g_option_group_set_error_hook:
+ * @group: a #GOptionGroup
+ * @error_func: a function to call when an error occurs
+ * 
+ * Associates a function with @group which will be called 
+ * from g_option_context_parse() when an error occurs.
+ *
+ * Note that the user data to be passed to @error_func can be
+ * specified when constructing the group with g_option_group_new().
+ *
+ * Since: 2.6
+ **/
+void
+g_option_group_set_error_hook (GOptionGroup     *group,
+			       GOptionErrorFunc	 error_func)
+{
+  g_return_if_fail (group != NULL);
+
+  group->error_func = error_func;  
+}
+
+
+/**
+ * g_option_group_set_translate_func:
+ * @group: a #GOptionGroup
+ * @func: the #GTranslateFunc, or %NULL 
+ * @data: user data to pass to @func, or %NULL
+ * @destroy_notify: a function which gets called to free @data, or %NULL
+ * 
+ * Sets the function which is used to translate user-visible
+ * strings, for <option>--help</option> output. Different
+ * groups can use different #GTranslateFunc<!-- -->s. If @func
+ * is %NULL, strings are not translated.
+ *
+ * If you are using gettext(), you only need to set the translation
+ * domain, see g_option_group_set_translation_domain().
+ *
+ * Since: 2.6
+ **/
+void
+g_option_group_set_translate_func (GOptionGroup   *group,
+				   GTranslateFunc  func,
+				   gpointer        data,
+				   GDestroyNotify  destroy_notify)
+{
+  g_return_if_fail (group != NULL);
+  
+  if (group->translate_notify)
+    group->translate_notify (group->translate_data);
+      
+  group->translate_func = func;
+  group->translate_data = data;
+  group->translate_notify = destroy_notify;
+}
+
+static const gchar *
+dgettext_swapped (const gchar *msgid, 
+		  const gchar *domainname)
+{
+  return g_dgettext (domainname, msgid);
+}
+
+/**
+ * g_option_group_set_translation_domain:
+ * @group: a #GOptionGroup
+ * @domain: the domain to use
+ * 
+ * A convenience function to use gettext() for translating
+ * user-visible strings. 
+ * 
+ * Since: 2.6
+ **/
+void
+g_option_group_set_translation_domain (GOptionGroup *group,
+				       const gchar  *domain)
+{
+  g_return_if_fail (group != NULL);
+
+  g_option_group_set_translate_func (group, 
+				     (GTranslateFunc)dgettext_swapped,
+				     g_strdup (domain),
+				     g_free);
+} 
+
+/**
+ * g_option_context_set_translate_func:
+ * @context: a #GOptionContext
+ * @func: the #GTranslateFunc, or %NULL 
+ * @data: user data to pass to @func, or %NULL
+ * @destroy_notify: a function which gets called to free @data, or %NULL
+ * 
+ * Sets the function which is used to translate the contexts 
+ * user-visible strings, for <option>--help</option> output. 
+ * If @func is %NULL, strings are not translated.
+ *
+ * Note that option groups have their own translation functions, 
+ * this function only affects the @parameter_string (see g_option_context_new()), 
+ * the summary (see g_option_context_set_summary()) and the description 
+ * (see g_option_context_set_description()).
+ *
+ * If you are using gettext(), you only need to set the translation
+ * domain, see g_option_context_set_translation_domain().
+ *
+ * Since: 2.12
+ **/
+void
+g_option_context_set_translate_func (GOptionContext *context,
+				     GTranslateFunc func,
+				     gpointer       data,
+				     GDestroyNotify destroy_notify)
+{
+  g_return_if_fail (context != NULL);
+  
+  if (context->translate_notify)
+    context->translate_notify (context->translate_data);
+      
+  context->translate_func = func;
+  context->translate_data = data;
+  context->translate_notify = destroy_notify;
+}
+
+/**
+ * g_option_context_set_translation_domain:
+ * @context: a #GOptionContext
+ * @domain: the domain to use
+ * 
+ * A convenience function to use gettext() for translating
+ * user-visible strings. 
+ * 
+ * Since: 2.12
+ **/
+void
+g_option_context_set_translation_domain (GOptionContext *context,
+					 const gchar     *domain)
+{
+  g_return_if_fail (context != NULL);
+
+  g_option_context_set_translate_func (context, 
+				       (GTranslateFunc)dgettext_swapped,
+				       g_strdup (domain),
+				       g_free);
+}
+
+/**
+ * g_option_context_set_summary:
+ * @context: a #GOptionContext
+ * @summary: a string to be shown in <option>--help</option> output 
+ *  before the list of options, or %NULL
+ * 
+ * Adds a string to be displayed in <option>--help</option> output
+ * before the list of options. This is typically a summary of the
+ * program functionality. 
+ *
+ * Note that the summary is translated (see 
+ * g_option_context_set_translate_func() and
+ * g_option_context_set_translation_domain()).
+ *
+ * Since: 2.12
+ */
+void
+g_option_context_set_summary (GOptionContext *context,
+			      const gchar    *summary)
+{
+  g_return_if_fail (context != NULL);
+
+  g_free (context->summary);
+  context->summary = g_strdup (summary);
+}
+
+
+/**
+ * g_option_context_get_summary:
+ * @context: a #GOptionContext
+ * 
+ * Returns the summary. See g_option_context_set_summary().
+ *
+ * Returns: the summary
+ *
+ * Since: 2.12
+ */
+G_CONST_RETURN gchar *
+g_option_context_get_summary (GOptionContext *context)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return context->summary;
+}
+
+/**
+ * g_option_context_set_description:
+ * @context: a #GOptionContext
+ * @description: a string to be shown in <option>--help</option> output 
+ *   after the list of options, or %NULL
+ * 
+ * Adds a string to be displayed in <option>--help</option> output
+ * after the list of options. This text often includes a bug reporting
+ * address.
+ *
+ * Note that the summary is translated (see 
+ * g_option_context_set_translate_func()).
+ *
+ * Since: 2.12
+ */
+void
+g_option_context_set_description (GOptionContext *context,
+			          const gchar    *description)
+{
+  g_return_if_fail (context != NULL);
+
+  g_free (context->description);
+  context->description = g_strdup (description);
+}
+
+
+/**
+ * g_option_context_get_description:
+ * @context: a #GOptionContext
+ * 
+ * Returns the description. See g_option_context_set_description().
+ *
+ * Returns: the description
+ *
+ * Since: 2.12
+ */
+G_CONST_RETURN gchar *
+g_option_context_get_description (GOptionContext *context)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return context->description;
+}
+
+
+#define __G_OPTION_C__
+#include "galiasdef.c"
diff --git a/glib/goption.h b/glib/goption.h
new file mode 100644
index 0000000..86fc0cd
--- /dev/null
+++ b/glib/goption.h
@@ -0,0 +1,163 @@
+/* goption.h - Option parser
+ *
+ *  Copyright (C) 2004  Anders Carlsson <andersca@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_OPTION_H__
+#define __G_OPTION_H__
+
+#include <glib/gerror.h>
+#include <glib/gquark.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GOptionContext GOptionContext;
+typedef struct _GOptionGroup   GOptionGroup;
+typedef struct _GOptionEntry   GOptionEntry;
+
+typedef enum
+{
+  G_OPTION_FLAG_HIDDEN		= 1 << 0,
+  G_OPTION_FLAG_IN_MAIN		= 1 << 1,
+  G_OPTION_FLAG_REVERSE		= 1 << 2,
+  G_OPTION_FLAG_NO_ARG		= 1 << 3,
+  G_OPTION_FLAG_FILENAME	= 1 << 4,
+  G_OPTION_FLAG_OPTIONAL_ARG    = 1 << 5,
+  G_OPTION_FLAG_NOALIAS	        = 1 << 6
+} GOptionFlags;
+
+typedef enum
+{
+  G_OPTION_ARG_NONE,
+  G_OPTION_ARG_STRING,
+  G_OPTION_ARG_INT,
+  G_OPTION_ARG_CALLBACK,
+  G_OPTION_ARG_FILENAME,
+  G_OPTION_ARG_STRING_ARRAY,
+  G_OPTION_ARG_FILENAME_ARRAY,
+  G_OPTION_ARG_DOUBLE,
+  G_OPTION_ARG_INT64
+} GOptionArg;
+
+typedef gboolean (*GOptionArgFunc) (const gchar    *option_name,
+				    const gchar    *value,
+				    gpointer        data,
+				    GError        **error);
+
+typedef gboolean (*GOptionParseFunc) (GOptionContext *context,
+				      GOptionGroup   *group,
+				      gpointer	      data,
+				      GError        **error);
+
+typedef void (*GOptionErrorFunc) (GOptionContext *context,
+				  GOptionGroup   *group,
+				  gpointer        data,
+				  GError        **error);
+
+#define G_OPTION_ERROR (g_option_error_quark ())
+
+typedef enum
+{
+  G_OPTION_ERROR_UNKNOWN_OPTION,
+  G_OPTION_ERROR_BAD_VALUE,
+  G_OPTION_ERROR_FAILED
+} GOptionError;
+
+GQuark g_option_error_quark (void);
+
+
+struct _GOptionEntry
+{
+  const gchar *long_name;
+  gchar        short_name;
+  gint         flags;
+
+  GOptionArg   arg;
+  gpointer     arg_data;
+  
+  const gchar *description;
+  const gchar *arg_description;
+};
+
+#define G_OPTION_REMAINING ""
+
+GOptionContext *g_option_context_new              (const gchar         *parameter_string);
+void            g_option_context_set_summary      (GOptionContext      *context,
+                                                   const gchar         *summary);
+G_CONST_RETURN gchar *g_option_context_get_summary (GOptionContext     *context);
+void            g_option_context_set_description  (GOptionContext      *context,
+                                                   const gchar         *description);
+G_CONST_RETURN gchar *g_option_context_get_description (GOptionContext     *context);
+void            g_option_context_free             (GOptionContext      *context);
+void		g_option_context_set_help_enabled (GOptionContext      *context,
+						   gboolean		help_enabled);
+gboolean	g_option_context_get_help_enabled (GOptionContext      *context);
+void		g_option_context_set_ignore_unknown_options (GOptionContext *context,
+							     gboolean	     ignore_unknown);
+gboolean        g_option_context_get_ignore_unknown_options (GOptionContext *context);
+
+void            g_option_context_add_main_entries (GOptionContext      *context,
+						   const GOptionEntry  *entries,
+						   const gchar         *translation_domain);
+gboolean        g_option_context_parse            (GOptionContext      *context,
+						   gint                *argc,
+						   gchar             ***argv,
+						   GError             **error);
+void            g_option_context_set_translate_func (GOptionContext     *context,
+						     GTranslateFunc      func,
+						     gpointer            data,
+						     GDestroyNotify      destroy_notify);
+void            g_option_context_set_translation_domain (GOptionContext  *context,
+							 const gchar     *domain);
+
+void            g_option_context_add_group      (GOptionContext *context,
+						 GOptionGroup   *group);
+void          g_option_context_set_main_group (GOptionContext *context,
+					       GOptionGroup   *group);
+GOptionGroup *g_option_context_get_main_group (GOptionContext *context);
+gchar        *g_option_context_get_help       (GOptionContext *context,
+                                               gboolean        main_help,
+                                               GOptionGroup   *group);
+
+GOptionGroup *g_option_group_new                    (const gchar        *name,
+						     const gchar        *description,
+						     const gchar        *help_description,
+						     gpointer            user_data,
+						     GDestroyNotify      destroy);
+void	      g_option_group_set_parse_hooks	    (GOptionGroup       *group,
+						     GOptionParseFunc    pre_parse_func,
+						     GOptionParseFunc	 post_parse_func);
+void	      g_option_group_set_error_hook	    (GOptionGroup       *group,
+						     GOptionErrorFunc	 error_func);
+void          g_option_group_free                   (GOptionGroup       *group);
+void          g_option_group_add_entries            (GOptionGroup       *group,
+						     const GOptionEntry *entries);
+void          g_option_group_set_translate_func     (GOptionGroup       *group,
+						     GTranslateFunc      func,
+						     gpointer            data,
+						     GDestroyNotify      destroy_notify);
+void          g_option_group_set_translation_domain (GOptionGroup       *group,
+						     const gchar        *domain);
+
+G_END_DECLS
+
+#endif /* __G_OPTION_H__ */
diff --git a/glib/gpattern.c b/glib/gpattern.c
new file mode 100644
index 0000000..938083e
--- /dev/null
+++ b/glib/gpattern.c
@@ -0,0 +1,343 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 1999  Peter Mattis, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gpattern.h"
+
+#include "gmacros.h"
+#include "gmessages.h"
+#include "gmem.h"
+#include "gunicode.h"
+#include "gutils.h" 
+#include "galias.h"
+
+/* keep enum and structure of gpattern.c and patterntest.c in sync */
+typedef enum
+{
+  G_MATCH_ALL,       /* "*A?A*" */
+  G_MATCH_ALL_TAIL,  /* "*A?AA" */
+  G_MATCH_HEAD,      /* "AAAA*" */
+  G_MATCH_TAIL,      /* "*AAAA" */
+  G_MATCH_EXACT,     /* "AAAAA" */
+  G_MATCH_LAST
+} GMatchType;
+
+struct _GPatternSpec
+{
+  GMatchType match_type;
+  guint      pattern_length;
+  guint      min_length;
+  guint      max_length;
+  gchar     *pattern;
+};
+
+
+/* --- functions --- */
+static inline gboolean
+g_pattern_ph_match (const gchar *match_pattern,
+		    const gchar *match_string,
+		    gboolean    *wildcard_reached_p)
+{
+  register const gchar *pattern, *string;
+  register gchar ch;
+
+  pattern = match_pattern;
+  string = match_string;
+
+  ch = *pattern;
+  pattern++;
+  while (ch)
+    {
+      switch (ch)
+	{
+	case '?':
+	  if (!*string)
+	    return FALSE;
+	  string = g_utf8_next_char (string);
+	  break;
+
+	case '*':
+	  *wildcard_reached_p = TRUE;
+	  do
+	    {
+	      ch = *pattern;
+	      pattern++;
+	      if (ch == '?')
+		{
+		  if (!*string)
+		    return FALSE;
+		  string = g_utf8_next_char (string);
+		}
+	    }
+	  while (ch == '*' || ch == '?');
+	  if (!ch)
+	    return TRUE;
+	  do
+	    {
+              gboolean next_wildcard_reached = FALSE;
+	      while (ch != *string)
+		{
+		  if (!*string)
+		    return FALSE;
+		  string = g_utf8_next_char (string);
+		}
+	      string++;
+	      if (g_pattern_ph_match (pattern, string, &next_wildcard_reached))
+		return TRUE;
+              if (next_wildcard_reached)
+                /* the forthcoming pattern substring up to the next wildcard has
+                 * been matched, but a mismatch occoured for the rest of the
+                 * pattern, following the next wildcard.
+                 * there's no need to advance the current match position any
+                 * further if the rest pattern will not match.
+                 */
+		return FALSE;
+	    }
+	  while (*string);
+	  break;
+
+	default:
+	  if (ch == *string)
+	    string++;
+	  else
+	    return FALSE;
+	  break;
+	}
+
+      ch = *pattern;
+      pattern++;
+    }
+
+  return *string == 0;
+}
+
+gboolean
+g_pattern_match (GPatternSpec *pspec,
+		 guint         string_length,
+		 const gchar  *string,
+		 const gchar  *string_reversed)
+{
+  g_return_val_if_fail (pspec != NULL, FALSE);
+  g_return_val_if_fail (string != NULL, FALSE);
+
+  if (string_length < pspec->min_length ||
+      string_length > pspec->max_length)
+    return FALSE;
+
+  switch (pspec->match_type)
+    {
+      gboolean dummy;
+    case G_MATCH_ALL:
+      return g_pattern_ph_match (pspec->pattern, string, &dummy);
+    case G_MATCH_ALL_TAIL:
+      if (string_reversed)
+	return g_pattern_ph_match (pspec->pattern, string_reversed, &dummy);
+      else
+	{
+          gboolean result;
+          gchar *tmp;
+	  tmp = g_utf8_strreverse (string, string_length);
+	  result = g_pattern_ph_match (pspec->pattern, tmp, &dummy);
+	  g_free (tmp);
+	  return result;
+	}
+    case G_MATCH_HEAD:
+      if (pspec->pattern_length == string_length)
+	return strcmp (pspec->pattern, string) == 0;
+      else if (pspec->pattern_length)
+	return strncmp (pspec->pattern, string, pspec->pattern_length) == 0;
+      else
+	return TRUE;
+    case G_MATCH_TAIL:
+      if (pspec->pattern_length)
+        return strcmp (pspec->pattern, string + (string_length - pspec->pattern_length)) == 0;
+      else
+	return TRUE;
+    case G_MATCH_EXACT:
+      if (pspec->pattern_length != string_length)
+        return FALSE;
+      else
+        return strcmp (pspec->pattern, string) == 0;
+    default:
+      g_return_val_if_fail (pspec->match_type < G_MATCH_LAST, FALSE);
+      return FALSE;
+    }
+}
+
+GPatternSpec*
+g_pattern_spec_new (const gchar *pattern)
+{
+  GPatternSpec *pspec;
+  gboolean seen_joker = FALSE, seen_wildcard = FALSE, more_wildcards = FALSE;
+  gint hw_pos = -1, tw_pos = -1, hj_pos = -1, tj_pos = -1;
+  gboolean follows_wildcard = FALSE;
+  guint pending_jokers = 0;
+  const gchar *s;
+  gchar *d;
+  guint i;
+  
+  g_return_val_if_fail (pattern != NULL, NULL);
+
+  /* canonicalize pattern and collect necessary stats */
+  pspec = g_new (GPatternSpec, 1);
+  pspec->pattern_length = strlen (pattern);
+  pspec->min_length = 0;
+  pspec->max_length = 0;
+  pspec->pattern = g_new (gchar, pspec->pattern_length + 1);
+  d = pspec->pattern;
+  for (i = 0, s = pattern; *s != 0; s++)
+    {
+      switch (*s)
+	{
+	case '*':
+	  if (follows_wildcard)	/* compress multiple wildcards */
+	    {
+	      pspec->pattern_length--;
+	      continue;
+	    }
+	  follows_wildcard = TRUE;
+	  if (hw_pos < 0)
+	    hw_pos = i;
+	  tw_pos = i;
+	  break;
+	case '?':
+	  pending_jokers++;
+	  pspec->min_length++;
+	  pspec->max_length += 4; /* maximum UTF-8 character length */
+	  continue;
+	default:
+	  for (; pending_jokers; pending_jokers--, i++) {
+	    *d++ = '?';
+  	    if (hj_pos < 0)
+	     hj_pos = i;
+	    tj_pos = i;
+	  }
+	  follows_wildcard = FALSE;
+	  pspec->min_length++;
+	  pspec->max_length++;
+	  break;
+	}
+      *d++ = *s;
+      i++;
+    }
+  for (; pending_jokers; pending_jokers--) {
+    *d++ = '?';
+    if (hj_pos < 0)
+      hj_pos = i;
+    tj_pos = i;
+  }
+  *d++ = 0;
+  seen_joker = hj_pos >= 0;
+  seen_wildcard = hw_pos >= 0;
+  more_wildcards = seen_wildcard && hw_pos != tw_pos;
+  if (seen_wildcard)
+    pspec->max_length = G_MAXUINT;
+
+  /* special case sole head/tail wildcard or exact matches */
+  if (!seen_joker && !more_wildcards)
+    {
+      if (pspec->pattern[0] == '*')
+	{
+	  pspec->match_type = G_MATCH_TAIL;
+          memmove (pspec->pattern, pspec->pattern + 1, --pspec->pattern_length);
+	  pspec->pattern[pspec->pattern_length] = 0;
+	  return pspec;
+	}
+      if (pspec->pattern_length > 0 &&
+	  pspec->pattern[pspec->pattern_length - 1] == '*')
+	{
+	  pspec->match_type = G_MATCH_HEAD;
+	  pspec->pattern[--pspec->pattern_length] = 0;
+	  return pspec;
+	}
+      if (!seen_wildcard)
+	{
+	  pspec->match_type = G_MATCH_EXACT;
+	  return pspec;
+	}
+    }
+
+  /* now just need to distinguish between head or tail match start */
+  tw_pos = pspec->pattern_length - 1 - tw_pos;	/* last pos to tail distance */
+  tj_pos = pspec->pattern_length - 1 - tj_pos;	/* last pos to tail distance */
+  if (seen_wildcard)
+    pspec->match_type = tw_pos > hw_pos ? G_MATCH_ALL_TAIL : G_MATCH_ALL;
+  else /* seen_joker */
+    pspec->match_type = tj_pos > hj_pos ? G_MATCH_ALL_TAIL : G_MATCH_ALL;
+  if (pspec->match_type == G_MATCH_ALL_TAIL) {
+    gchar *tmp = pspec->pattern;
+    pspec->pattern = g_utf8_strreverse (pspec->pattern, pspec->pattern_length);
+    g_free (tmp);
+  }
+  return pspec;
+}
+
+void
+g_pattern_spec_free (GPatternSpec *pspec)
+{
+  g_return_if_fail (pspec != NULL);
+
+  g_free (pspec->pattern);
+  g_free (pspec);
+}
+
+gboolean
+g_pattern_spec_equal (GPatternSpec *pspec1,
+		      GPatternSpec *pspec2)
+{
+  g_return_val_if_fail (pspec1 != NULL, FALSE);
+  g_return_val_if_fail (pspec2 != NULL, FALSE);
+
+  return (pspec1->pattern_length == pspec2->pattern_length &&
+	  pspec1->match_type == pspec2->match_type &&
+	  strcmp (pspec1->pattern, pspec2->pattern) == 0);
+}
+
+gboolean
+g_pattern_match_string (GPatternSpec *pspec,
+			const gchar  *string)
+{
+  g_return_val_if_fail (pspec != NULL, FALSE);
+  g_return_val_if_fail (string != NULL, FALSE);
+
+  return g_pattern_match (pspec, strlen (string), string, NULL);
+}
+
+gboolean
+g_pattern_match_simple (const gchar *pattern,
+			const gchar *string)
+{
+  GPatternSpec *pspec;
+  gboolean ergo;
+
+  g_return_val_if_fail (pattern != NULL, FALSE);
+  g_return_val_if_fail (string != NULL, FALSE);
+
+  pspec = g_pattern_spec_new (pattern);
+  ergo = g_pattern_match (pspec, strlen (string), string, NULL);
+  g_pattern_spec_free (pspec);
+
+  return ergo;
+}
+
+#define __G_PATTERN_C__
+#include "galiasdef.c"
diff --git a/glib/gpattern.h b/glib/gpattern.h
new file mode 100644
index 0000000..b653d71
--- /dev/null
+++ b/glib/gpattern.h
@@ -0,0 +1,49 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 1999  Peter Mattis, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_PATTERN_H__
+#define __G_PATTERN_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _GPatternSpec    GPatternSpec;
+
+GPatternSpec* g_pattern_spec_new       (const gchar  *pattern);
+void          g_pattern_spec_free      (GPatternSpec *pspec);
+gboolean      g_pattern_spec_equal     (GPatternSpec *pspec1,
+					GPatternSpec *pspec2);
+gboolean      g_pattern_match          (GPatternSpec *pspec,
+					guint         string_length,
+					const gchar  *string,
+					const gchar  *string_reversed);
+gboolean      g_pattern_match_string   (GPatternSpec *pspec,
+					const gchar  *string);
+gboolean      g_pattern_match_simple   (const gchar  *pattern,
+					const gchar  *string);
+
+G_END_DECLS
+
+#endif /* __G_PATTERN_H__ */
diff --git a/glib/gpoll.c b/glib/gpoll.c
new file mode 100644
index 0000000..30e5429
--- /dev/null
+++ b/glib/gpoll.c
@@ -0,0 +1,430 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gpoll.c: poll(2) abstraction
+ * Copyright 1998 Owen Taylor
+ * Copyright 2008 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+/* Uncomment the next line (and the corresponding line in gmain.c) to
+ * enable debugging printouts if the environment variable
+ * G_MAIN_POLL_DEBUG is set to some value.
+ */
+/* #define G_MAIN_POLL_DEBUG */
+
+#ifdef _WIN32
+/* Always enable debugging printout on Windows, as it is more often
+ * needed there...
+ */
+#define G_MAIN_POLL_DEBUG
+#endif
+
+#include "glib.h"
+#include <sys/types.h>
+#include <time.h>
+#include <stdlib.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif /* HAVE_SYS_TIME_H */
+#ifdef GLIB_HAVE_SYS_POLL_H
+#  include <sys/poll.h>
+#  undef events	 /* AIX 4.1.5 & 4.3.2 define this for SVR3,4 compatibility */
+#  undef revents /* AIX 4.1.5 & 4.3.2 define this for SVR3,4 compatibility */
+
+/* The poll() emulation on OS/X doesn't handle fds=NULL, nfds=0,
+ * so we prefer our own poll emulation.
+ */
+#if defined(_POLL_EMUL_H_) || defined(BROKEN_POLL)
+#undef HAVE_POLL
+#endif
+
+#endif /* GLIB_HAVE_SYS_POLL_H */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include <errno.h>
+
+#ifdef G_OS_WIN32
+#define STRICT
+#include <windows.h>
+#endif /* G_OS_WIN32 */
+
+#include "galias.h"
+
+#ifdef G_MAIN_POLL_DEBUG
+extern gboolean _g_main_poll_debug;
+#endif
+
+#ifdef HAVE_POLL
+/* SunOS has poll, but doesn't provide a prototype. */
+#  if defined (sun) && !defined (__SVR4)
+extern gint poll (struct pollfd *fds, guint nfsd, gint timeout);
+#  endif  /* !sun */
+
+/**
+ * g_poll:
+ * @fds: file descriptors to poll
+ * @nfds: the number of file descriptors in @fds
+ * @timeout: amount of time to wait, in milliseconds, or -1 to wait forever
+ *
+ * Polls @fds, as with the poll() system call, but portably. (On
+ * systems that don't have poll(), it is emulated using select().)
+ * This is used internally by #GMainContext, but it can be called
+ * directly if you need to block until a file descriptor is ready, but
+ * don't want to run the full main loop.
+ *
+ * Each element of @fds is a #GPollFD describing a single file
+ * descriptor to poll. The %fd field indicates the file descriptor,
+ * and the %events field indicates the events to poll for. On return,
+ * the %revents fields will be filled with the events that actually
+ * occurred.
+ *
+ * On POSIX systems, the file descriptors in @fds can be any sort of
+ * file descriptor, but the situation is much more complicated on
+ * Windows. If you need to use g_poll() in code that has to run on
+ * Windows, the easiest solution is to construct all of your
+ * #GPollFD<!-- -->s with g_io_channel_win32_make_pollfd().
+ *
+ * Return value: the number of entries in @fds whose %revents fields
+ * were filled in, or 0 if the operation timed out, or -1 on error or
+ * if the call was interrupted.
+ *
+ * Since: 2.20
+ **/
+gint
+g_poll (GPollFD *fds,
+	guint    nfds,
+	gint     timeout)
+{
+  return poll ((struct pollfd *)fds, nfds, timeout);
+}
+
+#else	/* !HAVE_POLL */
+
+#ifdef G_OS_WIN32
+
+static int
+poll_rest (gboolean  poll_msgs,
+	   HANDLE   *handles,
+	   gint      nhandles,
+	   GPollFD  *fds,
+	   guint     nfds,
+	   gint      timeout)
+{
+  DWORD ready;
+  GPollFD *f;
+  int recursed_result;
+
+  if (poll_msgs)
+    {
+      /* Wait for either messages or handles
+       * -> Use MsgWaitForMultipleObjectsEx
+       */
+      if (_g_main_poll_debug)
+	g_print ("  MsgWaitForMultipleObjectsEx(%d, %d)\n", nhandles, timeout);
+
+      ready = MsgWaitForMultipleObjectsEx (nhandles, handles, timeout,
+					   QS_ALLINPUT, MWMO_ALERTABLE);
+
+      if (ready == WAIT_FAILED)
+	{
+	  gchar *emsg = g_win32_error_message (GetLastError ());
+	  g_warning ("MsgWaitForMultipleObjectsEx failed: %s", emsg);
+	  g_free (emsg);
+	}
+    }
+  else if (nhandles == 0)
+    {
+      /* No handles to wait for, just the timeout */
+      if (timeout == INFINITE)
+	ready = WAIT_FAILED;
+      else
+	{
+	  SleepEx (timeout, TRUE);
+	  ready = WAIT_TIMEOUT;
+	}
+    }
+  else
+    {
+      /* Wait for just handles
+       * -> Use WaitForMultipleObjectsEx
+       */
+      if (_g_main_poll_debug)
+	g_print ("  WaitForMultipleObjectsEx(%d, %d)\n", nhandles, timeout);
+
+      ready = WaitForMultipleObjectsEx (nhandles, handles, FALSE, timeout, TRUE);
+      if (ready == WAIT_FAILED)
+	{
+	  gchar *emsg = g_win32_error_message (GetLastError ());
+	  g_warning ("WaitForMultipleObjectsEx failed: %s", emsg);
+	  g_free (emsg);
+	}
+    }
+
+  if (_g_main_poll_debug)
+    g_print ("  wait returns %ld%s\n",
+	     ready,
+	     (ready == WAIT_FAILED ? " (WAIT_FAILED)" :
+	      (ready == WAIT_TIMEOUT ? " (WAIT_TIMEOUT)" :
+	       (poll_msgs && ready == WAIT_OBJECT_0 + nhandles ? " (msg)" : ""))));
+
+  if (ready == WAIT_FAILED)
+    return -1;
+  else if (ready == WAIT_TIMEOUT ||
+	   ready == WAIT_IO_COMPLETION)
+    return 0;
+  else if (poll_msgs && ready == WAIT_OBJECT_0 + nhandles)
+    {
+      for (f = fds; f < &fds[nfds]; ++f)
+	if (f->fd == G_WIN32_MSG_HANDLE && f->events & G_IO_IN)
+	  f->revents |= G_IO_IN;
+
+      /* If we have a timeout, or no handles to poll, be satisfied
+       * with just noticing we have messages waiting.
+       */
+      if (timeout != 0 || nhandles == 0)
+	return 1;
+
+      /* If no timeout and handles to poll, recurse to poll them,
+       * too.
+       */
+      recursed_result = poll_rest (FALSE, handles, nhandles, fds, nfds, 0);
+      return (recursed_result == -1) ? -1 : 1 + recursed_result;
+    }
+  else if (ready >= WAIT_OBJECT_0 && ready < WAIT_OBJECT_0 + nhandles)
+    {
+      for (f = fds; f < &fds[nfds]; ++f)
+	{
+	  if ((HANDLE) f->fd == handles[ready - WAIT_OBJECT_0])
+	    {
+	      f->revents = f->events;
+	      if (_g_main_poll_debug)
+		g_print ("  got event %p\n", (HANDLE) f->fd);
+	    }
+	}
+
+      /* If no timeout and polling several handles, recurse to poll
+       * the rest of them.
+       */
+      if (timeout == 0 && nhandles > 1)
+	{
+	  /* Remove the handle that fired */
+	  int i;
+	  if (ready < nhandles - 1)
+	    for (i = ready - WAIT_OBJECT_0 + 1; i < nhandles; i++)
+	      handles[i-1] = handles[i];
+	  nhandles--;
+	  recursed_result = poll_rest (FALSE, handles, nhandles, fds, nfds, 0);
+	  return (recursed_result == -1) ? -1 : 1 + recursed_result;
+	}
+      return 1;
+    }
+
+  return 0;
+}
+
+gint
+g_poll (GPollFD *fds,
+	guint    nfds,
+	gint     timeout)
+{
+  HANDLE handles[MAXIMUM_WAIT_OBJECTS];
+  gboolean poll_msgs = FALSE;
+  GPollFD *f;
+  gint nhandles = 0;
+  int retval;
+
+  if (_g_main_poll_debug)
+    g_print ("g_poll: waiting for");
+
+  for (f = fds; f < &fds[nfds]; ++f)
+    if (f->fd == G_WIN32_MSG_HANDLE && (f->events & G_IO_IN))
+      {
+	if (_g_main_poll_debug && !poll_msgs)
+	  g_print (" MSG");
+	poll_msgs = TRUE;
+      }
+    else if (f->fd > 0)
+      {
+	/* Don't add the same handle several times into the array, as
+	 * docs say that is not allowed, even if it actually does seem
+	 * to work.
+	 */
+	gint i;
+
+	for (i = 0; i < nhandles; i++)
+	  if (handles[i] == (HANDLE) f->fd)
+	    break;
+
+	if (i == nhandles)
+	  {
+	    if (nhandles == MAXIMUM_WAIT_OBJECTS)
+	      {
+		g_warning ("Too many handles to wait for!\n");
+		break;
+	      }
+	    else
+	      {
+		if (_g_main_poll_debug)
+		  g_print (" %p", (HANDLE) f->fd);
+		handles[nhandles++] = (HANDLE) f->fd;
+	      }
+	  }
+      }
+
+  if (_g_main_poll_debug)
+    g_print ("\n");
+
+  for (f = fds; f < &fds[nfds]; ++f)
+    f->revents = 0;
+
+  if (timeout == -1)
+    timeout = INFINITE;
+
+  /* Polling for several things? */
+  if (nhandles > 1 || (nhandles > 0 && poll_msgs))
+    {
+      /* First check if one or several of them are immediately
+       * available
+       */
+      retval = poll_rest (poll_msgs, handles, nhandles, fds, nfds, 0);
+
+      /* If not, and we have a significant timeout, poll again with
+       * timeout then. Note that this will return indication for only
+       * one event, or only for messages. We ignore timeouts less than
+       * ten milliseconds as they are mostly pointless on Windows, the
+       * MsgWaitForMultipleObjectsEx() call will timeout right away
+       * anyway.
+       */
+      if (retval == 0 && (timeout == INFINITE || timeout >= 10))
+	retval = poll_rest (poll_msgs, handles, nhandles, fds, nfds, timeout);
+    }
+  else
+    {
+      /* Just polling for one thing, so no need to check first if
+       * available immediately
+       */
+      retval = poll_rest (poll_msgs, handles, nhandles, fds, nfds, timeout);
+    }
+
+  if (retval == -1)
+    for (f = fds; f < &fds[nfds]; ++f)
+      f->revents = 0;
+
+  return retval;
+}
+
+#else  /* !G_OS_WIN32 */
+
+/* The following implementation of poll() comes from the GNU C Library.
+ * Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
+ */
+
+#include <string.h> /* for bzero on BSD systems */
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif /* HAVE_SYS_SELECT_H */
+
+#ifdef G_OS_BEOS
+#undef NO_FD_SET
+#endif /* G_OS_BEOS */
+
+#ifndef NO_FD_SET
+#  define SELECT_MASK fd_set
+#else /* !NO_FD_SET */
+#  ifndef _AIX
+typedef long fd_mask;
+#  endif /* _AIX */
+#  ifdef _IBMR2
+#    define SELECT_MASK void
+#  else /* !_IBMR2 */
+#    define SELECT_MASK int
+#  endif /* !_IBMR2 */
+#endif /* !NO_FD_SET */
+
+gint
+g_poll (GPollFD *fds,
+	guint    nfds,
+	gint     timeout)
+{
+  struct timeval tv;
+  SELECT_MASK rset, wset, xset;
+  GPollFD *f;
+  int ready;
+  int maxfd = 0;
+
+  FD_ZERO (&rset);
+  FD_ZERO (&wset);
+  FD_ZERO (&xset);
+
+  for (f = fds; f < &fds[nfds]; ++f)
+    if (f->fd >= 0)
+      {
+	if (f->events & G_IO_IN)
+	  FD_SET (f->fd, &rset);
+	if (f->events & G_IO_OUT)
+	  FD_SET (f->fd, &wset);
+	if (f->events & G_IO_PRI)
+	  FD_SET (f->fd, &xset);
+	if (f->fd > maxfd && (f->events & (G_IO_IN|G_IO_OUT|G_IO_PRI)))
+	  maxfd = f->fd;
+      }
+
+  tv.tv_sec = timeout / 1000;
+  tv.tv_usec = (timeout % 1000) * 1000;
+
+  ready = select (maxfd + 1, &rset, &wset, &xset,
+		  timeout == -1 ? NULL : &tv);
+  if (ready > 0)
+    for (f = fds; f < &fds[nfds]; ++f)
+      {
+	f->revents = 0;
+	if (f->fd >= 0)
+	  {
+	    if (FD_ISSET (f->fd, &rset))
+	      f->revents |= G_IO_IN;
+	    if (FD_ISSET (f->fd, &wset))
+	      f->revents |= G_IO_OUT;
+	    if (FD_ISSET (f->fd, &xset))
+	      f->revents |= G_IO_PRI;
+	  }
+      }
+
+  return ready;
+}
+
+#endif /* !G_OS_WIN32 */
+
+#endif	/* !HAVE_POLL */
+
+#define __G_POLL_C__
+#include "galiasdef.c"
diff --git a/glib/gpoll.h b/glib/gpoll.h
new file mode 100644
index 0000000..eec4723
--- /dev/null
+++ b/glib/gpoll.h
@@ -0,0 +1,93 @@
+/* gpoll.h - poll(2) support
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#if !defined (__GLIB_H_INSIDE__) && !defined (__G_MAIN_H__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_POLL_H__
+#define __G_POLL_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/* Any definitions using GPollFD or GPollFunc are primarily
+ * for Unix and not guaranteed to be the compatible on all
+ * operating systems on which GLib runs. Right now, the
+ * GLib does use these functions on Win32 as well, but interprets
+ * them in a fairly different way than on Unix. If you use
+ * these definitions, you are should be prepared to recode
+ * for different operating systems.
+ *
+ * Note that on systems with a working poll(2), that function is used
+ * in place of g_poll(). Thus g_poll() must have the same signature as
+ * poll(), meaning GPollFD must have the same layout as struct pollfd.
+ *
+ *
+ * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file
+ * descriptor as provided by the C runtime) that can be used by
+ * MsgWaitForMultipleObjects. This does *not* include file handles
+ * from CreateFile, SOCKETs, nor pipe handles. (But you can use
+ * WSAEventSelect to signal events when a SOCKET is readable).
+ *
+ * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to
+ * indicate polling for messages.
+ *
+ * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK
+ * (GTK) programs, as GDK itself wants to read messages and convert them
+ * to GDK events.
+ *
+ * So, unless you really know what you are doing, it's best not to try
+ * to use the main loop polling stuff for your own needs on
+ * Windows.
+ */
+typedef struct _GPollFD GPollFD;
+typedef gint	(*GPollFunc)	(GPollFD *ufds,
+				 guint	  nfsd,
+				 gint     timeout_);
+
+struct _GPollFD
+{
+#if defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8
+  gint64	fd;
+#else
+  gint		fd;
+#endif
+  gushort 	events;
+  gushort 	revents;
+};
+
+#ifdef G_OS_WIN32
+#if GLIB_SIZEOF_VOID_P == 8
+#define G_POLLFD_FORMAT "%#I64x"
+#else
+#define G_POLLFD_FORMAT "%#x"
+#endif
+#else
+#define G_POLLFD_FORMAT "%d"
+#endif
+
+gint g_poll (GPollFD *fds,
+	     guint    nfds,
+	     gint     timeout);
+
+G_END_DECLS
+
+#endif /* __G_POLL_H__ */
diff --git a/glib/gprimes.h b/glib/gprimes.h
new file mode 100644
index 0000000..af57286
--- /dev/null
+++ b/glib/gprimes.h
@@ -0,0 +1,51 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_PRIMES_H__
+#define __G_PRIMES_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/* Prime numbers.
+ */
+
+/* This function returns prime numbers spaced by approximately 1.5-2.0
+ * and is for use in resizing data structures which prefer
+ * prime-valued sizes.	The closest spaced prime function returns the
+ * next largest prime, or the highest it knows about which is about
+ * MAXINT/4.
+ */
+guint	   g_spaced_primes_closest (guint num) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __G_PRIMES_H__ */
diff --git a/glib/gprintf.c b/glib/gprintf.c
new file mode 100644
index 0000000..3528861
--- /dev/null
+++ b/glib/gprintf.c
@@ -0,0 +1,344 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 2002  Peter Mattis, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#ifndef _WIN32
+#define _GNU_SOURCE		/* For vasprintf */
+#endif
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "glib.h"
+#include "gprintf.h"
+#include "gprintfint.h"
+
+#include "galias.h"
+
+/**
+ * g_printf:
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @Varargs: the arguments to insert in the output.
+ *
+ * An implementation of the standard printf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.2
+ **/
+gint
+g_printf (gchar const *format,
+	  ...)
+{
+  va_list args;
+  gint retval;
+
+  va_start (args, format);
+  retval = g_vprintf (format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+/**
+ * g_fprintf:
+ * @file: the stream to write to.
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @Varargs: the arguments to insert in the output.
+ *
+ * An implementation of the standard fprintf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.2
+ **/
+gint
+g_fprintf (FILE        *file, 
+           gchar const *format,
+	   ...)
+{
+  va_list args;
+  gint retval;
+
+  va_start (args, format);
+  retval = g_vfprintf (file, format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+/**
+ * g_sprintf:
+ * @string: A pointer to a memory buffer to contain the resulting string. It 
+ *          is up to the caller to ensure that the allocated buffer is large 
+ *          enough to hold the formatted result
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @Varargs: the arguments to insert in the output.
+ *
+ * An implementation of the standard sprintf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.2
+ **/
+gint
+g_sprintf (gchar       *string,
+	   gchar const *format,
+	   ...)
+{
+  va_list args;
+  gint retval;
+
+  va_start (args, format);
+  retval = g_vsprintf (string, format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+/**
+ * g_snprintf:
+ * @string: the buffer to hold the output.
+ * @n: the maximum number of bytes to produce (including the 
+ *     terminating nul character).
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @Varargs: the arguments to insert in the output.
+ *
+ * A safer form of the standard sprintf() function. The output is guaranteed
+ * to not exceed @n characters (including the terminating nul character), so 
+ * it is easy to ensure that a buffer overflow cannot occur.
+ * 
+ * See also g_strdup_printf().
+ *
+ * In versions of GLib prior to 1.2.3, this function may return -1 if the 
+ * output was truncated, and the truncated string may not be nul-terminated. 
+ * In versions prior to 1.3.12, this function returns the length of the output 
+ * string.
+ *
+ * The return value of g_snprintf() conforms to the snprintf()
+ * function as standardized in ISO C99. Note that this is different from 
+ * traditional snprintf(), which returns the length of the output string.
+ *
+ * The format string may contain positional parameters, as specified in 
+ * the Single Unix Specification.
+ *
+ * Returns: the number of bytes which would be produced if the buffer 
+ *     was large enough.
+ **/
+gint
+g_snprintf (gchar	*string,
+	    gulong	 n,
+	    gchar const *format,
+	    ...)
+{
+  va_list args;
+  gint retval;
+
+  va_start (args, format);
+  retval = g_vsnprintf (string, n, format, args);
+  va_end (args);
+  
+  return retval;
+}
+
+/**
+ * g_vprintf:
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @args: the list of arguments to insert in the output.
+ *
+ * An implementation of the standard vprintf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.2
+ **/
+gint
+g_vprintf (gchar const *format,
+	   va_list      args)
+{
+  g_return_val_if_fail (format != NULL, -1);
+
+  return _g_vprintf (format, args);
+}
+
+/**
+ * g_vfprintf:
+ * @file: the stream to write to.
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @args: the list of arguments to insert in the output.
+ *
+ * An implementation of the standard fprintf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.2
+ **/
+gint
+g_vfprintf (FILE        *file,
+            gchar const *format,
+	    va_list      args)
+{
+  g_return_val_if_fail (format != NULL, -1);
+
+  return _g_vfprintf (file, format, args);
+}
+
+/**
+ * g_vsprintf:
+ * @string: the buffer to hold the output.
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @args: the list of arguments to insert in the output.
+ *
+ * An implementation of the standard vsprintf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.2
+ **/
+gint
+g_vsprintf (gchar	 *string,
+	    gchar const *format,
+	    va_list      args)
+{
+  g_return_val_if_fail (string != NULL, -1);
+  g_return_val_if_fail (format != NULL, -1);
+
+  return _g_vsprintf (string, format, args);
+}
+
+/** 
+ * g_vsnprintf:
+ * @string: the buffer to hold the output.
+ * @n: the maximum number of bytes to produce (including the 
+ *     terminating nul character).
+ * @format: a standard printf() format string, but notice 
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @args: the list of arguments to insert in the output.
+ *
+ * A safer form of the standard vsprintf() function. The output is guaranteed
+ * to not exceed @n characters (including the terminating nul character), so 
+ * it is easy to ensure that a buffer overflow cannot occur.
+ *
+ * See also g_strdup_vprintf().
+ *
+ * In versions of GLib prior to 1.2.3, this function may return -1 if the 
+ * output was truncated, and the truncated string may not be nul-terminated.
+ * In versions prior to 1.3.12, this function returns the length of the output 
+ * string.
+ *
+ * The return value of g_vsnprintf() conforms to the vsnprintf() function 
+ * as standardized in ISO C99. Note that this is different from traditional 
+ * vsnprintf(), which returns the length of the output string.
+ *
+ * The format string may contain positional parameters, as specified in 
+ * the Single Unix Specification.
+ *
+ * Returns: the number of bytes which would be produced if the buffer 
+ *  was large enough.
+ */
+gint
+g_vsnprintf (gchar	 *string,
+	     gulong	  n,
+	     gchar const *format,
+	     va_list      args)
+{
+  g_return_val_if_fail (n == 0 || string != NULL, -1);
+  g_return_val_if_fail (format != NULL, -1);
+
+  return _g_vsnprintf (string, n, format, args);
+}
+
+/**
+ * g_vasprintf:
+ * @string: the return location for the newly-allocated string.
+ * @format: a standard printf() format string, but notice
+ *          <link linkend="string-precision">string precision pitfalls</link>.
+ * @args: the list of arguments to insert in the output.
+ *
+ * An implementation of the GNU vasprintf() function which supports 
+ * positional parameters, as specified in the Single Unix Specification.
+ * This function is similar to g_vsprintf(), except that it allocates a 
+ * string to hold the output, instead of putting the output in a buffer 
+ * you allocate in advance.
+ *
+ * Returns: the number of bytes printed.
+ *
+ * Since: 2.4
+ **/
+gint 
+g_vasprintf (gchar      **string,
+	     gchar const *format,
+	     va_list      args)
+{
+  gint len;
+  g_return_val_if_fail (string != NULL, -1);
+
+#if !defined(HAVE_GOOD_PRINTF)
+
+  len = _g_gnulib_vasprintf (string, format, args);
+  if (len < 0)
+    *string = NULL;
+
+#elif defined (HAVE_VASPRINTF)
+
+  len = vasprintf (string, format, args);
+  if (len < 0)
+    *string = NULL;
+  else if (!g_mem_is_system_malloc ()) 
+    {
+      /* vasprintf returns malloc-allocated memory */
+      gchar *string1 = g_strndup (*string, len);
+      free (*string);
+      *string = string1;
+    }
+
+#else
+
+  {
+    va_list args2;
+
+    G_VA_COPY (args2, args);
+
+    *string = g_new (gchar, g_printf_string_upper_bound (format, args));
+
+    len = _g_vsprintf (*string, format, args2);
+    va_end (args2);
+  }
+#endif
+
+  return len;
+}
+
+#define __G_PRINTF_C__
+#include "galiasdef.c"
diff --git a/glib/gprintf.h b/glib/gprintf.h
new file mode 100644
index 0000000..d96870f
--- /dev/null
+++ b/glib/gprintf.h
@@ -0,0 +1,52 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997, 2002  Peter Mattis, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#ifndef __G_PRINTF_H__
+#define __G_PRINTF_H__
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+G_BEGIN_DECLS
+
+gint                  g_printf    (gchar const *format,
+                                   ...) G_GNUC_PRINTF (1, 2);
+gint                  g_fprintf   (FILE        *file,
+				   gchar const *format,
+				   ...) G_GNUC_PRINTF (2, 3);
+gint                  g_sprintf   (gchar       *string,
+				   gchar const *format,
+				   ...) G_GNUC_PRINTF (2, 3);
+
+gint                  g_vprintf   (gchar const *format,
+                                   va_list      args);
+gint                  g_vfprintf  (FILE        *file,
+				   gchar const *format,
+				   va_list      args);
+gint                  g_vsprintf  (gchar       *string,
+				   gchar const *format,
+				   va_list      args);
+gint                  g_vasprintf (gchar      **string,
+				   gchar const *format,
+				   va_list      args);
+
+G_END_DECLS
+
+#endif /* __G_PRINTF_H__ */
diff --git a/glib/gprintfint.h b/glib/gprintfint.h
new file mode 100644
index 0000000..0c975a1
--- /dev/null
+++ b/glib/gprintfint.h
@@ -0,0 +1,59 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 2002.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#ifndef __G_PRINTFINT_H__
+#define __G_PRINTFINT_H__
+
+#ifdef HAVE_GOOD_PRINTF
+
+#define _g_printf    printf
+#define _g_fprintf   fprintf
+#define _g_sprintf   sprintf
+#define _g_snprintf  snprintf
+
+#define _g_vprintf   vprintf
+#define _g_vfprintf  vfprintf
+#define _g_vsprintf  vsprintf
+#define _g_vsnprintf vsnprintf
+
+#else
+
+#include "gnulib/printf.h"
+
+#define _g_printf    _g_gnulib_printf
+#define _g_fprintf   _g_gnulib_fprintf
+#define _g_sprintf   _g_gnulib_sprintf
+#define _g_snprintf  _g_gnulib_snprintf
+
+#define _g_vprintf   _g_gnulib_vprintf
+#define _g_vfprintf  _g_gnulib_vfprintf
+#define _g_vsprintf  _g_gnulib_vsprintf
+#define _g_vsnprintf _g_gnulib_vsnprintf
+
+#endif
+
+#endif /* __G_PRINTF_H__ */
+
diff --git a/glib/gqsort.c b/glib/gqsort.c
new file mode 100644
index 0000000..176d44a
--- /dev/null
+++ b/glib/gqsort.c
@@ -0,0 +1,287 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1991, 1992, 1996, 1997,1999,2004 Free Software Foundation, Inc.
+ * Copyright (C) 2000 Eazel, Inc.
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * This file was originally part of the GNU C Library, and was modified to allow
+ * user data to be passed in to the sorting function.
+ *
+ * Written by Douglas C. Schmidt (schmidt@ics.uci.edu).
+ * Modified by Maciej Stachowiak (mjs@eazel.com)
+ *
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with GLib
+ * at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#include "config.h"
+
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "glib.h"
+#include "galias.h"
+
+/* Byte-wise swap two items of size SIZE. */
+#define SWAP(a, b, size)						      \
+  do									      \
+    {									      \
+      register size_t __size = (size);					      \
+      register char *__a = (a), *__b = (b);				      \
+      do								      \
+	{								      \
+	  char __tmp = *__a;						      \
+	  *__a++ = *__b;						      \
+	  *__b++ = __tmp;						      \
+	} while (--__size > 0);						      \
+    } while (0)
+
+/* Discontinue quicksort algorithm when partition gets below this size.
+   This particular magic number was chosen to work best on a Sun 4/260. */
+#define MAX_THRESH 4
+
+/* Stack node declarations used to store unfulfilled partition obligations. */
+typedef struct
+  {
+    char *lo;
+    char *hi;
+  } stack_node;
+
+/* The next 4 #defines implement a very fast in-line stack abstraction. */
+/* The stack needs log (total_elements) entries (we could even subtract
+   log(MAX_THRESH)).  Since total_elements has type size_t, we get as
+   upper bound for log (total_elements):
+   bits per byte (CHAR_BIT) * sizeof(size_t).  */
+#define STACK_SIZE	(CHAR_BIT * sizeof(size_t))
+#define PUSH(low, high)	((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#define	POP(low, high)	((void) (--top, (low = top->lo), (high = top->hi)))
+#define	STACK_NOT_EMPTY	(stack < top)
+
+
+/* Order size using quicksort.  This implementation incorporates
+   four optimizations discussed in Sedgewick:
+
+   1. Non-recursive, using an explicit stack of pointer that store the
+      next array partition to sort.  To save time, this maximum amount
+      of space required to store an array of SIZE_MAX is allocated on the
+      stack.  Assuming a 32-bit (64 bit) integer for size_t, this needs
+      only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+      Pretty cheap, actually.
+
+   2. Chose the pivot element using a median-of-three decision tree.
+      This reduces the probability of selecting a bad pivot value and
+      eliminates certain extraneous comparisons.
+
+   3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+      insertion sort to order the MAX_THRESH items within each partition.
+      This is a big win, since insertion sort is faster for small, mostly
+      sorted array segments.
+
+   4. The larger of the two sub-partitions is always pushed onto the
+      stack first, with the algorithm then concentrating on the
+      smaller partition.  This *guarantees* no more than log (total_elems)
+      stack size is needed (actually O(1) in this case)!  */
+
+/**
+ * g_qsort_with_data:
+ * @pbase: start of array to sort
+ * @total_elems: elements in the array
+ * @size: size of each element
+ * @compare_func: function to compare elements
+ * @user_data: data to pass to @compare_func
+ *
+ * This is just like the standard C qsort() function, but
+ * the comparison routine accepts a user data argument.
+ * 
+ **/
+void
+g_qsort_with_data (gconstpointer    pbase,
+		   gint             total_elems,
+		   gsize            size,
+		   GCompareDataFunc compare_func,
+		   gpointer         user_data)
+{
+  register char *base_ptr = (char *) pbase;
+
+  const size_t max_thresh = MAX_THRESH * size;
+
+  g_return_if_fail (total_elems >= 0);
+  g_return_if_fail (pbase != NULL || total_elems == 0);
+  g_return_if_fail (compare_func != NULL);
+
+  if (total_elems == 0)
+    /* Avoid lossage with unsigned arithmetic below.  */
+    return;
+
+  if (total_elems > MAX_THRESH)
+    {
+      char *lo = base_ptr;
+      char *hi = &lo[size * (total_elems - 1)];
+      stack_node stack[STACK_SIZE];
+      stack_node *top = stack;
+
+      PUSH (NULL, NULL);
+
+      while (STACK_NOT_EMPTY)
+        {
+          char *left_ptr;
+          char *right_ptr;
+
+	  /* Select median value from among LO, MID, and HI. Rearrange
+	     LO and HI so the three values are sorted. This lowers the
+	     probability of picking a pathological pivot value and
+	     skips a comparison for both the LEFT_PTR and RIGHT_PTR in
+	     the while loops. */
+
+	  char *mid = lo + size * ((hi - lo) / size >> 1);
+
+	  if ((*compare_func) ((void *) mid, (void *) lo, user_data) < 0)
+	    SWAP (mid, lo, size);
+	  if ((*compare_func) ((void *) hi, (void *) mid, user_data) < 0)
+	    SWAP (mid, hi, size);
+	  else
+	    goto jump_over;
+	  if ((*compare_func) ((void *) mid, (void *) lo, user_data) < 0)
+	    SWAP (mid, lo, size);
+	jump_over:;
+
+	  left_ptr  = lo + size;
+	  right_ptr = hi - size;
+
+	  /* Here's the famous ``collapse the walls'' section of quicksort.
+	     Gotta like those tight inner loops!  They are the main reason
+	     that this algorithm runs much faster than others. */
+	  do
+	    {
+	      while ((*compare_func) ((void *) left_ptr, (void *) mid, user_data) < 0)
+		left_ptr += size;
+
+	      while ((*compare_func) ((void *) mid, (void *) right_ptr, user_data) < 0)
+		right_ptr -= size;
+
+	      if (left_ptr < right_ptr)
+		{
+		  SWAP (left_ptr, right_ptr, size);
+		  if (mid == left_ptr)
+		    mid = right_ptr;
+		  else if (mid == right_ptr)
+		    mid = left_ptr;
+		  left_ptr += size;
+		  right_ptr -= size;
+		}
+	      else if (left_ptr == right_ptr)
+		{
+		  left_ptr += size;
+		  right_ptr -= size;
+		  break;
+		}
+	    }
+	  while (left_ptr <= right_ptr);
+
+          /* Set up pointers for next iteration.  First determine whether
+             left and right partitions are below the threshold size.  If so,
+             ignore one or both.  Otherwise, push the larger partition's
+             bounds on the stack and continue sorting the smaller one. */
+
+          if ((size_t) (right_ptr - lo) <= max_thresh)
+            {
+              if ((size_t) (hi - left_ptr) <= max_thresh)
+		/* Ignore both small partitions. */
+                POP (lo, hi);
+              else
+		/* Ignore small left partition. */
+                lo = left_ptr;
+            }
+          else if ((size_t) (hi - left_ptr) <= max_thresh)
+	    /* Ignore small right partition. */
+            hi = right_ptr;
+          else if ((right_ptr - lo) > (hi - left_ptr))
+            {
+	      /* Push larger left partition indices. */
+              PUSH (lo, right_ptr);
+              lo = left_ptr;
+            }
+          else
+            {
+	      /* Push larger right partition indices. */
+              PUSH (left_ptr, hi);
+              hi = right_ptr;
+            }
+        }
+    }
+
+  /* Once the BASE_PTR array is partially sorted by quicksort the rest
+     is completely sorted using insertion sort, since this is efficient
+     for partitions below MAX_THRESH size. BASE_PTR points to the beginning
+     of the array to sort, and END_PTR points at the very last element in
+     the array (*not* one beyond it!). */
+
+#define min(x, y) ((x) < (y) ? (x) : (y))
+
+  {
+    char *const end_ptr = &base_ptr[size * (total_elems - 1)];
+    char *tmp_ptr = base_ptr;
+    char *thresh = min(end_ptr, base_ptr + max_thresh);
+    register char *run_ptr;
+
+    /* Find smallest element in first threshold and place it at the
+       array's beginning.  This is the smallest array element,
+       and the operation speeds up insertion sort's inner loop. */
+
+    for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size)
+      if ((*compare_func) ((void *) run_ptr, (void *) tmp_ptr, user_data) < 0)
+        tmp_ptr = run_ptr;
+
+    if (tmp_ptr != base_ptr)
+      SWAP (tmp_ptr, base_ptr, size);
+
+    /* Insertion sort, running from left-hand-side up to right-hand-side.  */
+
+    run_ptr = base_ptr + size;
+    while ((run_ptr += size) <= end_ptr)
+      {
+	tmp_ptr = run_ptr - size;
+	while ((*compare_func) ((void *) run_ptr, (void *) tmp_ptr, user_data) < 0)
+	  tmp_ptr -= size;
+
+	tmp_ptr += size;
+        if (tmp_ptr != run_ptr)
+          {
+            char *trav;
+
+	    trav = run_ptr + size;
+	    while (--trav >= run_ptr)
+              {
+                char c = *trav;
+                char *hi, *lo;
+
+                for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+                  *hi = *lo;
+                *hi = c;
+              }
+          }
+      }
+  }
+}
+
+#define __G_QSORT_C__
+#include "galiasdef.c"
diff --git a/glib/gqsort.h b/glib/gqsort.h
new file mode 100644
index 0000000..3a47a58
--- /dev/null
+++ b/glib/gqsort.h
@@ -0,0 +1,46 @@
+ /* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_QSORT_H__
+#define __G_QSORT_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+void g_qsort_with_data (gconstpointer    pbase,
+			gint             total_elems,
+			gsize            size,
+			GCompareDataFunc compare_func,
+			gpointer         user_data);
+
+G_END_DECLS
+
+#endif /* __G_QSORT_H__ */
diff --git a/glib/gquark.h b/glib/gquark.h
new file mode 100644
index 0000000..a0cbe2f
--- /dev/null
+++ b/glib/gquark.h
@@ -0,0 +1,52 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_QUARK_H__
+#define __G_QUARK_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef guint32 GQuark;
+
+/* Quarks (string<->id association)
+ */
+GQuark                g_quark_try_string         (const gchar *string);
+GQuark                g_quark_from_static_string (const gchar *string);
+GQuark                g_quark_from_string        (const gchar *string);
+G_CONST_RETURN gchar* g_quark_to_string          (GQuark       quark) G_GNUC_CONST;
+
+G_CONST_RETURN gchar* g_intern_string            (const gchar *string);
+G_CONST_RETURN gchar* g_intern_static_string     (const gchar *string);
+
+G_END_DECLS
+
+#endif /* __G_QUARK_H__ */
diff --git a/glib/gqueue.h b/glib/gqueue.h
new file mode 100644
index 0000000..e78488f
--- /dev/null
+++ b/glib/gqueue.h
@@ -0,0 +1,127 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_QUEUE_H__
+#define __G_QUEUE_H__
+
+#include <glib/glist.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GQueue		GQueue;
+
+struct _GQueue
+{
+  GList *head;
+  GList *tail;
+  guint  length;
+};
+
+#define G_QUEUE_INIT { NULL, NULL, 0 }
+
+/* Queues
+ */
+GQueue*  g_queue_new            (void);
+void     g_queue_free           (GQueue           *queue);
+void     g_queue_init           (GQueue           *queue);
+void     g_queue_clear          (GQueue           *queue);
+gboolean g_queue_is_empty       (GQueue           *queue);
+guint    g_queue_get_length     (GQueue           *queue);
+void     g_queue_reverse        (GQueue           *queue);
+GQueue * g_queue_copy           (GQueue           *queue);
+void     g_queue_foreach        (GQueue           *queue,
+				 GFunc             func,
+				 gpointer          user_data);
+GList *  g_queue_find           (GQueue           *queue,
+				 gconstpointer     data);
+GList *  g_queue_find_custom    (GQueue           *queue,
+				 gconstpointer     data,
+				 GCompareFunc      func);
+void     g_queue_sort           (GQueue           *queue,
+				 GCompareDataFunc  compare_func,
+				 gpointer          user_data);
+
+void     g_queue_push_head      (GQueue           *queue,
+				 gpointer          data);
+void     g_queue_push_tail      (GQueue           *queue,
+				 gpointer          data);
+void     g_queue_push_nth       (GQueue           *queue,
+				 gpointer          data,
+				 gint              n);
+gpointer g_queue_pop_head       (GQueue           *queue);
+gpointer g_queue_pop_tail       (GQueue           *queue);
+gpointer g_queue_pop_nth        (GQueue           *queue,
+				 guint             n);
+gpointer g_queue_peek_head      (GQueue           *queue);
+gpointer g_queue_peek_tail      (GQueue           *queue);
+gpointer g_queue_peek_nth       (GQueue           *queue,
+				 guint             n);
+gint     g_queue_index          (GQueue           *queue,
+				 gconstpointer     data);
+void     g_queue_remove         (GQueue           *queue,
+				 gconstpointer     data);
+void     g_queue_remove_all     (GQueue           *queue,
+				 gconstpointer     data);
+void     g_queue_insert_before  (GQueue           *queue,
+				 GList            *sibling,
+				 gpointer          data);
+void     g_queue_insert_after   (GQueue           *queue,
+				 GList            *sibling,
+				 gpointer          data);
+void     g_queue_insert_sorted  (GQueue           *queue,
+				 gpointer          data,
+				 GCompareDataFunc  func,
+				 gpointer          user_data);
+
+void     g_queue_push_head_link (GQueue           *queue,
+				 GList            *link_);
+void     g_queue_push_tail_link (GQueue           *queue,
+				 GList            *link_);
+void     g_queue_push_nth_link  (GQueue           *queue,
+				 gint              n,
+				 GList            *link_);
+GList*   g_queue_pop_head_link  (GQueue           *queue);
+GList*   g_queue_pop_tail_link  (GQueue           *queue);
+GList*   g_queue_pop_nth_link   (GQueue           *queue,
+				 guint             n);
+GList*   g_queue_peek_head_link (GQueue           *queue);
+GList*   g_queue_peek_tail_link (GQueue           *queue);
+GList*   g_queue_peek_nth_link  (GQueue           *queue,
+				 guint             n);
+gint     g_queue_link_index     (GQueue           *queue,
+				 GList            *link_);
+void     g_queue_unlink         (GQueue           *queue,
+				 GList            *link_);
+void     g_queue_delete_link    (GQueue           *queue,
+				 GList            *link_);
+
+G_END_DECLS
+
+#endif /* __G_QUEUE_H__ */
diff --git a/glib/grand.c b/glib/grand.c
new file mode 100644
index 0000000..55f8970
--- /dev/null
+++ b/glib/grand.c
@@ -0,0 +1,635 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/* Originally developed and coded by Makoto Matsumoto and Takuji
+ * Nishimura.  Please mail <matumoto@math.keio.ac.jp>, if you're using
+ * code from this file in your own programs or libraries.
+ * Further information on the Mersenne Twister can be found at
+ * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
+ * This code was adapted to glib by Sebastian Wilhelmi.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.  
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <math.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "glib.h"
+#include "gthreadprivate.h"
+#include "galias.h"
+
+#ifdef G_OS_WIN32
+#include <process.h>		/* For getpid() */
+#endif
+
+G_LOCK_DEFINE_STATIC (global_random);
+static GRand* global_random = NULL;
+
+/* Period parameters */  
+#define N 624
+#define M 397
+#define MATRIX_A 0x9908b0df   /* constant vector a */
+#define UPPER_MASK 0x80000000 /* most significant w-r bits */
+#define LOWER_MASK 0x7fffffff /* least significant r bits */
+
+/* Tempering parameters */   
+#define TEMPERING_MASK_B 0x9d2c5680
+#define TEMPERING_MASK_C 0xefc60000
+#define TEMPERING_SHIFT_U(y)  (y >> 11)
+#define TEMPERING_SHIFT_S(y)  (y << 7)
+#define TEMPERING_SHIFT_T(y)  (y << 15)
+#define TEMPERING_SHIFT_L(y)  (y >> 18)
+
+static guint
+get_random_version (void)
+{
+  static gboolean initialized = FALSE;
+  static guint random_version;
+  
+  if (!initialized)
+    {
+      const gchar *version_string = g_getenv ("G_RANDOM_VERSION");
+      if (!version_string || version_string[0] == '\000' || 
+	  strcmp (version_string, "2.2") == 0)
+	random_version = 22;
+      else if (strcmp (version_string, "2.0") == 0)
+	random_version = 20;
+      else
+	{
+	  g_warning ("Unknown G_RANDOM_VERSION \"%s\". Using version 2.2.",
+		     version_string);
+	  random_version = 22;
+	}
+      initialized = TRUE;
+    }
+  
+  return random_version;
+}
+
+/* This is called from g_thread_init(). It's used to
+ * initialize some static data in a threadsafe way.
+ */
+void 
+_g_rand_thread_init (void)
+{
+  (void)get_random_version ();
+}
+
+struct _GRand
+{
+  guint32 mt[N]; /* the array for the state vector  */
+  guint mti; 
+};
+
+/**
+ * g_rand_new_with_seed:
+ * @seed: a value to initialize the random number generator.
+ * 
+ * Creates a new random number generator initialized with @seed.
+ * 
+ * Return value: the new #GRand.
+ **/
+GRand*
+g_rand_new_with_seed (guint32 seed)
+{
+  GRand *rand = g_new0 (GRand, 1);
+  g_rand_set_seed (rand, seed);
+  return rand;
+}
+
+/**
+ * g_rand_new_with_seed_array:
+ * @seed: an array of seeds to initialize the random number generator.
+ * @seed_length: an array of seeds to initialize the random number generator.
+ * 
+ * Creates a new random number generator initialized with @seed.
+ * 
+ * Return value: the new #GRand.
+ *
+ * Since: 2.4
+ **/
+GRand*
+g_rand_new_with_seed_array (const guint32 *seed, guint seed_length)
+{
+  GRand *rand = g_new0 (GRand, 1);
+  g_rand_set_seed_array (rand, seed, seed_length);
+  return rand;
+}
+
+/**
+ * g_rand_new:
+ * 
+ * Creates a new random number generator initialized with a seed taken
+ * either from <filename>/dev/urandom</filename> (if existing) or from 
+ * the current time (as a fallback).
+ * 
+ * Return value: the new #GRand.
+ **/
+GRand* 
+g_rand_new (void)
+{
+  guint32 seed[4];
+  GTimeVal now;
+#ifdef G_OS_UNIX
+  static gboolean dev_urandom_exists = TRUE;
+
+  if (dev_urandom_exists)
+    {
+      FILE* dev_urandom;
+
+      do
+        {
+	  errno = 0;
+	  dev_urandom = fopen("/dev/urandom", "rb");
+	}
+      while G_UNLIKELY (errno == EINTR);
+
+      if (dev_urandom)
+	{
+	  int r;
+
+	  do
+	    {
+	      errno = 0;
+	      r = fread (seed, sizeof (seed), 1, dev_urandom);
+	    }
+	  while G_UNLIKELY (errno == EINTR);
+
+	  if (r != 1)
+	    dev_urandom_exists = FALSE;
+
+	  fclose (dev_urandom);
+	}	
+      else
+	dev_urandom_exists = FALSE;
+    }
+#else
+  static gboolean dev_urandom_exists = FALSE;
+#endif
+
+  if (!dev_urandom_exists)
+    {  
+      g_get_current_time (&now);
+      seed[0] = now.tv_sec;
+      seed[1] = now.tv_usec;
+      seed[2] = getpid ();
+#ifdef G_OS_UNIX
+      seed[3] = getppid ();
+#else
+      seed[3] = 0;
+#endif
+    }
+
+  return g_rand_new_with_seed_array (seed, 4);
+}
+
+/**
+ * g_rand_free:
+ * @rand_: a #GRand.
+ *
+ * Frees the memory allocated for the #GRand.
+ **/
+void
+g_rand_free (GRand* rand)
+{
+  g_return_if_fail (rand != NULL);
+
+  g_free (rand);
+}
+
+/**
+ * g_rand_copy:
+ * @rand_: a #GRand.
+ *
+ * Copies a #GRand into a new one with the same exact state as before.
+ * This way you can take a snapshot of the random number generator for
+ * replaying later.
+ *
+ * Return value: the new #GRand.
+ *
+ * Since: 2.4
+ **/
+GRand *
+g_rand_copy (GRand* rand)
+{
+  GRand* new_rand;
+
+  g_return_val_if_fail (rand != NULL, NULL);
+
+  new_rand = g_new0 (GRand, 1);
+  memcpy (new_rand, rand, sizeof (GRand));
+
+  return new_rand;
+}
+
+/**
+ * g_rand_set_seed:
+ * @rand_: a #GRand.
+ * @seed: a value to reinitialize the random number generator.
+ *
+ * Sets the seed for the random number generator #GRand to @seed.
+ **/
+void
+g_rand_set_seed (GRand* rand, guint32 seed)
+{
+  g_return_if_fail (rand != NULL);
+
+  switch (get_random_version ())
+    {
+    case 20:
+      /* setting initial seeds to mt[N] using         */
+      /* the generator Line 25 of Table 1 in          */
+      /* [KNUTH 1981, The Art of Computer Programming */
+      /*    Vol. 2 (2nd Ed.), pp102]                  */
+      
+      if (seed == 0) /* This would make the PRNG procude only zeros */
+	seed = 0x6b842128; /* Just set it to another number */
+      
+      rand->mt[0]= seed;
+      for (rand->mti=1; rand->mti<N; rand->mti++)
+	rand->mt[rand->mti] = (69069 * rand->mt[rand->mti-1]);
+      
+      break;
+    case 22:
+      /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
+      /* In the previous version (see above), MSBs of the    */
+      /* seed affect only MSBs of the array mt[].            */
+      
+      rand->mt[0]= seed;
+      for (rand->mti=1; rand->mti<N; rand->mti++)
+	rand->mt[rand->mti] = 1812433253UL * 
+	  (rand->mt[rand->mti-1] ^ (rand->mt[rand->mti-1] >> 30)) + rand->mti; 
+      break;
+    default:
+      g_assert_not_reached ();
+    }
+}
+
+/**
+ * g_rand_set_seed_array:
+ * @rand_: a #GRand.
+ * @seed: array to initialize with
+ * @seed_length: length of array
+ *
+ * Initializes the random number generator by an array of
+ * longs.  Array can be of arbitrary size, though only the
+ * first 624 values are taken.  This function is useful
+ * if you have many low entropy seeds, or if you require more then
+ * 32bits of actual entropy for your application.
+ *
+ * Since: 2.4
+ **/
+void
+g_rand_set_seed_array (GRand* rand, const guint32 *seed, guint seed_length)
+{
+  int i, j, k;
+
+  g_return_if_fail (rand != NULL);
+  g_return_if_fail (seed_length >= 1);
+
+  g_rand_set_seed (rand, 19650218UL);
+
+  i=1; j=0;
+  k = (N>seed_length ? N : seed_length);
+  for (; k; k--)
+    {
+      rand->mt[i] = (rand->mt[i] ^
+		     ((rand->mt[i-1] ^ (rand->mt[i-1] >> 30)) * 1664525UL))
+	      + seed[j] + j; /* non linear */
+      rand->mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
+      i++; j++;
+      if (i>=N)
+        {
+	  rand->mt[0] = rand->mt[N-1];
+	  i=1;
+	}
+      if (j>=seed_length)
+	j=0;
+    }
+  for (k=N-1; k; k--)
+    {
+      rand->mt[i] = (rand->mt[i] ^
+		     ((rand->mt[i-1] ^ (rand->mt[i-1] >> 30)) * 1566083941UL))
+	      - i; /* non linear */
+      rand->mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
+      i++;
+      if (i>=N)
+        {
+	  rand->mt[0] = rand->mt[N-1];
+	  i=1;
+	}
+    }
+
+  rand->mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ 
+}
+
+/**
+ * g_rand_int:
+ * @rand_: a #GRand.
+ *
+ * Returns the next random #guint32 from @rand_ equally distributed over
+ * the range [0..2^32-1].
+ *
+ * Return value: A random number.
+ **/
+guint32
+g_rand_int (GRand* rand)
+{
+  guint32 y;
+  static const guint32 mag01[2]={0x0, MATRIX_A};
+  /* mag01[x] = x * MATRIX_A  for x=0,1 */
+
+  g_return_val_if_fail (rand != NULL, 0);
+
+  if (rand->mti >= N) { /* generate N words at one time */
+    int kk;
+    
+    for (kk=0;kk<N-M;kk++) {
+      y = (rand->mt[kk]&UPPER_MASK)|(rand->mt[kk+1]&LOWER_MASK);
+      rand->mt[kk] = rand->mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];
+    }
+    for (;kk<N-1;kk++) {
+      y = (rand->mt[kk]&UPPER_MASK)|(rand->mt[kk+1]&LOWER_MASK);
+      rand->mt[kk] = rand->mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];
+    }
+    y = (rand->mt[N-1]&UPPER_MASK)|(rand->mt[0]&LOWER_MASK);
+    rand->mt[N-1] = rand->mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1];
+    
+    rand->mti = 0;
+  }
+  
+  y = rand->mt[rand->mti++];
+  y ^= TEMPERING_SHIFT_U(y);
+  y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B;
+  y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C;
+  y ^= TEMPERING_SHIFT_L(y);
+  
+  return y; 
+}
+
+/* transform [0..2^32] -> [0..1] */
+#define G_RAND_DOUBLE_TRANSFORM 2.3283064365386962890625e-10
+
+/**
+ * g_rand_int_range:
+ * @rand_: a #GRand.
+ * @begin: lower closed bound of the interval.
+ * @end: upper open bound of the interval.
+ *
+ * Returns the next random #gint32 from @rand_ equally distributed over
+ * the range [@begin..@end-1].
+ *
+ * Return value: A random number.
+ **/
+gint32 
+g_rand_int_range (GRand* rand, gint32 begin, gint32 end)
+{
+  guint32 dist = end - begin;
+  guint32 random;
+
+  g_return_val_if_fail (rand != NULL, begin);
+  g_return_val_if_fail (end > begin, begin);
+
+  switch (get_random_version ())
+    {
+    case 20:
+      if (dist <= 0x10000L) /* 2^16 */
+	{
+	  /* This method, which only calls g_rand_int once is only good
+	   * for (end - begin) <= 2^16, because we only have 32 bits set
+	   * from the one call to g_rand_int (). */
+	  
+	  /* we are using (trans + trans * trans), because g_rand_int only
+	   * covers [0..2^32-1] and thus g_rand_int * trans only covers
+	   * [0..1-2^-32], but the biggest double < 1 is 1-2^-52. 
+	   */
+	  
+	  gdouble double_rand = g_rand_int (rand) * 
+	    (G_RAND_DOUBLE_TRANSFORM +
+	     G_RAND_DOUBLE_TRANSFORM * G_RAND_DOUBLE_TRANSFORM);
+	  
+	  random = (gint32) (double_rand * dist);
+	}
+      else
+	{
+	  /* Now we use g_rand_double_range (), which will set 52 bits for
+	     us, so that it is safe to round and still get a decent
+	     distribution */
+	  random = (gint32) g_rand_double_range (rand, 0, dist);
+	}
+      break;
+    case 22:
+      if (dist == 0)
+	random = 0;
+      else 
+	{
+	  /* maxvalue is set to the predecessor of the greatest
+	   * multiple of dist less or equal 2^32. */
+	  guint32 maxvalue;
+	  if (dist <= 0x80000000u) /* 2^31 */
+	    {
+	      /* maxvalue = 2^32 - 1 - (2^32 % dist) */
+	      guint32 leftover = (0x80000000u % dist) * 2;
+	      if (leftover >= dist) leftover -= dist;
+	      maxvalue = 0xffffffffu - leftover;
+	    }
+	  else
+	    maxvalue = dist - 1;
+	  
+	  do
+	    random = g_rand_int (rand);
+	  while (random > maxvalue);
+	  
+	  random %= dist;
+	}
+      break;
+    default:
+      random = 0;		/* Quiet GCC */
+      g_assert_not_reached ();
+    }      
+ 
+  return begin + random;
+}
+
+/**
+ * g_rand_double:
+ * @rand_: a #GRand.
+ *
+ * Returns the next random #gdouble from @rand_ equally distributed over
+ * the range [0..1).
+ *
+ * Return value: A random number.
+ **/
+gdouble 
+g_rand_double (GRand* rand)
+{    
+  /* We set all 52 bits after the point for this, not only the first
+     32. Thats why we need two calls to g_rand_int */
+  gdouble retval = g_rand_int (rand) * G_RAND_DOUBLE_TRANSFORM;
+  retval = (retval + g_rand_int (rand)) * G_RAND_DOUBLE_TRANSFORM;
+
+  /* The following might happen due to very bad rounding luck, but
+   * actually this should be more than rare, we just try again then */
+  if (retval >= 1.0) 
+    return g_rand_double (rand);
+
+  return retval;
+}
+
+/**
+ * g_rand_double_range:
+ * @rand_: a #GRand.
+ * @begin: lower closed bound of the interval.
+ * @end: upper open bound of the interval.
+ *
+ * Returns the next random #gdouble from @rand_ equally distributed over
+ * the range [@begin..@end).
+ *
+ * Return value: A random number.
+ **/
+gdouble 
+g_rand_double_range (GRand* rand, gdouble begin, gdouble end)
+{
+  return g_rand_double (rand) * (end - begin) + begin;
+}
+
+/**
+ * g_random_int:
+ *
+ * Return a random #guint32 equally distributed over the range
+ * [0..2^32-1].
+ *
+ * Return value: A random number.
+ **/
+guint32
+g_random_int (void)
+{
+  guint32 result;
+  G_LOCK (global_random);
+  if (!global_random)
+    global_random = g_rand_new ();
+  
+  result = g_rand_int (global_random);
+  G_UNLOCK (global_random);
+  return result;
+}
+
+/**
+ * g_random_int_range:
+ * @begin: lower closed bound of the interval.
+ * @end: upper open bound of the interval.
+ *
+ * Returns a random #gint32 equally distributed over the range
+ * [@begin..@end-1].
+ *
+ * Return value: A random number.
+ **/
+gint32 
+g_random_int_range (gint32 begin, gint32 end)
+{
+  gint32 result;
+  G_LOCK (global_random);
+  if (!global_random)
+    global_random = g_rand_new ();
+  
+  result = g_rand_int_range (global_random, begin, end);
+  G_UNLOCK (global_random);
+  return result;
+}
+
+/**
+ * g_random_double:
+ *
+ * Returns a random #gdouble equally distributed over the range [0..1).
+ *
+ * Return value: A random number.
+ **/
+gdouble 
+g_random_double (void)
+{
+  double result;
+  G_LOCK (global_random);
+  if (!global_random)
+    global_random = g_rand_new ();
+  
+  result = g_rand_double (global_random);
+  G_UNLOCK (global_random);
+  return result;
+}
+
+/**
+ * g_random_double_range:
+ * @begin: lower closed bound of the interval.
+ * @end: upper open bound of the interval.
+ *
+ * Returns a random #gdouble equally distributed over the range [@begin..@end).
+ *
+ * Return value: A random number.
+ **/
+gdouble 
+g_random_double_range (gdouble begin, gdouble end)
+{
+  double result;
+  G_LOCK (global_random);
+  if (!global_random)
+    global_random = g_rand_new ();
+ 
+  result = g_rand_double_range (global_random, begin, end);
+  G_UNLOCK (global_random);
+  return result;
+}
+
+/**
+ * g_random_set_seed:
+ * @seed: a value to reinitialize the global random number generator.
+ * 
+ * Sets the seed for the global random number generator, which is used
+ * by the <function>g_random_*</function> functions, to @seed.
+ **/
+void
+g_random_set_seed (guint32 seed)
+{
+  G_LOCK (global_random);
+  if (!global_random)
+    global_random = g_rand_new_with_seed (seed);
+  else
+    g_rand_set_seed (global_random, seed);
+  G_UNLOCK (global_random);
+}
+
+
+#define __G_RAND_C__
+#include "galiasdef.c"
diff --git a/glib/grand.h b/glib/grand.h
new file mode 100644
index 0000000..07907df
--- /dev/null
+++ b/glib/grand.h
@@ -0,0 +1,85 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_RAND_H__
+#define __G_RAND_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GRand           GRand;
+
+/* GRand - a good and fast random number generator: Mersenne Twister
+ * see http://www.math.keio.ac.jp/~matumoto/emt.html for more info.
+ * The range functions return a value in the intervall [begin, end).
+ * int          -> [0..2^32-1]
+ * int_range    -> [begin..end-1]
+ * double       -> [0..1)
+ * double_range -> [begin..end)
+ */
+
+GRand*  g_rand_new_with_seed  (guint32  seed);
+GRand*  g_rand_new_with_seed_array (const guint32 *seed,
+				    guint seed_length);
+GRand*  g_rand_new            (void);
+void    g_rand_free           (GRand   *rand_);
+GRand*  g_rand_copy           (GRand   *rand_);
+void    g_rand_set_seed       (GRand   *rand_,
+			       guint32  seed);
+void	g_rand_set_seed_array (GRand   *rand_,
+			       const guint32 *seed,
+			       guint    seed_length);
+
+#define g_rand_boolean(rand_) ((g_rand_int (rand_) & (1 << 15)) != 0)
+
+guint32 g_rand_int            (GRand   *rand_);
+gint32  g_rand_int_range      (GRand   *rand_,
+			       gint32   begin,
+			       gint32   end);
+gdouble g_rand_double         (GRand   *rand_);
+gdouble g_rand_double_range   (GRand   *rand_,
+			       gdouble  begin,
+			       gdouble  end);
+void    g_random_set_seed     (guint32  seed);
+
+#define g_random_boolean() ((g_random_int () & (1 << 15)) != 0)
+
+guint32 g_random_int          (void);
+gint32  g_random_int_range    (gint32   begin,
+			       gint32   end);
+gdouble g_random_double       (void);
+gdouble g_random_double_range (gdouble  begin,
+			       gdouble  end);
+
+
+G_END_DECLS
+
+#endif /* __G_RAND_H__ */
diff --git a/glib/gregex.h b/glib/gregex.h
new file mode 100644
index 0000000..a96fbda
--- /dev/null
+++ b/glib/gregex.h
@@ -0,0 +1,243 @@
+/* GRegex -- regular expression API wrapper around PCRE.
+ *
+ * Copyright (C) 1999, 2000 Scott Wimer
+ * Copyright (C) 2004, Matthias Clasen <mclasen@redhat.com>
+ * Copyright (C) 2005 - 2007, Marco Barisione <marco@barisione.org>
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_REGEX_H__
+#define __G_REGEX_H__
+
+#include <glib/gerror.h>
+#include <glib/gstring.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+  G_REGEX_ERROR_COMPILE,
+  G_REGEX_ERROR_OPTIMIZE,
+  G_REGEX_ERROR_REPLACE,
+  G_REGEX_ERROR_MATCH,
+  G_REGEX_ERROR_INTERNAL,
+
+  /* These are the error codes from PCRE + 100 */
+  G_REGEX_ERROR_STRAY_BACKSLASH = 101,
+  G_REGEX_ERROR_MISSING_CONTROL_CHAR = 102,
+  G_REGEX_ERROR_UNRECOGNIZED_ESCAPE = 103,
+  G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER = 104,
+  G_REGEX_ERROR_QUANTIFIER_TOO_BIG = 105,
+  G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS = 106,
+  G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS = 107,
+  G_REGEX_ERROR_RANGE_OUT_OF_ORDER = 108,
+  G_REGEX_ERROR_NOTHING_TO_REPEAT = 109,
+  G_REGEX_ERROR_UNRECOGNIZED_CHARACTER = 112,
+  G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS = 113,
+  G_REGEX_ERROR_UNMATCHED_PARENTHESIS = 114,
+  G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE = 115,
+  G_REGEX_ERROR_UNTERMINATED_COMMENT = 118,
+  G_REGEX_ERROR_EXPRESSION_TOO_LARGE = 120,
+  G_REGEX_ERROR_MEMORY_ERROR = 121,
+  G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND = 125,
+  G_REGEX_ERROR_MALFORMED_CONDITION = 126,
+  G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES = 127,
+  G_REGEX_ERROR_ASSERTION_EXPECTED = 128,
+  G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME = 130,
+  G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED = 131,
+  G_REGEX_ERROR_HEX_CODE_TOO_LARGE = 134,
+  G_REGEX_ERROR_INVALID_CONDITION = 135,
+  G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND = 136,
+  G_REGEX_ERROR_INFINITE_LOOP = 140,
+  G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR = 142,
+  G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME = 143,
+  G_REGEX_ERROR_MALFORMED_PROPERTY = 146,
+  G_REGEX_ERROR_UNKNOWN_PROPERTY = 147,
+  G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG = 148,
+  G_REGEX_ERROR_TOO_MANY_SUBPATTERNS = 149,
+  G_REGEX_ERROR_INVALID_OCTAL_VALUE = 151,
+  G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE = 154,
+  G_REGEX_ERROR_DEFINE_REPETION = 155,
+  G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS = 156,
+  G_REGEX_ERROR_MISSING_BACK_REFERENCE = 157
+} GRegexError;
+
+#define G_REGEX_ERROR g_regex_error_quark ()
+
+GQuark g_regex_error_quark (void);
+
+/* Remember to update G_REGEX_COMPILE_MASK in gregex.c after
+ * adding a new flag. */
+typedef enum
+{
+  G_REGEX_CASELESS          = 1 << 0,
+  G_REGEX_MULTILINE         = 1 << 1,
+  G_REGEX_DOTALL            = 1 << 2,
+  G_REGEX_EXTENDED          = 1 << 3,
+  G_REGEX_ANCHORED          = 1 << 4,
+  G_REGEX_DOLLAR_ENDONLY    = 1 << 5,
+  G_REGEX_UNGREEDY          = 1 << 9,
+  G_REGEX_RAW               = 1 << 11,
+  G_REGEX_NO_AUTO_CAPTURE   = 1 << 12,
+  G_REGEX_OPTIMIZE          = 1 << 13,
+  G_REGEX_DUPNAMES          = 1 << 19,
+  G_REGEX_NEWLINE_CR        = 1 << 20,
+  G_REGEX_NEWLINE_LF        = 1 << 21,
+  G_REGEX_NEWLINE_CRLF      = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF
+} GRegexCompileFlags;
+
+/* Remember to update G_REGEX_MATCH_MASK in gregex.c after
+ * adding a new flag. */
+typedef enum
+{
+  G_REGEX_MATCH_ANCHORED      = 1 << 4,
+  G_REGEX_MATCH_NOTBOL        = 1 << 7,
+  G_REGEX_MATCH_NOTEOL        = 1 << 8,
+  G_REGEX_MATCH_NOTEMPTY      = 1 << 10,
+  G_REGEX_MATCH_PARTIAL       = 1 << 15,
+  G_REGEX_MATCH_NEWLINE_CR    = 1 << 20,
+  G_REGEX_MATCH_NEWLINE_LF    = 1 << 21,
+  G_REGEX_MATCH_NEWLINE_CRLF  = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF,
+  G_REGEX_MATCH_NEWLINE_ANY   = 1 << 22
+} GRegexMatchFlags;
+
+typedef struct _GRegex		GRegex;
+typedef struct _GMatchInfo	GMatchInfo;
+
+typedef gboolean (*GRegexEvalCallback)		(const GMatchInfo *match_info,
+						 GString          *result,
+						 gpointer          user_data);
+
+
+GRegex		 *g_regex_new			(const gchar         *pattern,
+						 GRegexCompileFlags   compile_options,
+						 GRegexMatchFlags     match_options,
+						 GError             **error);
+GRegex           *g_regex_ref			(GRegex              *regex);
+void		  g_regex_unref			(GRegex              *regex);
+const gchar	 *g_regex_get_pattern		(const GRegex        *regex);
+gint		  g_regex_get_max_backref	(const GRegex        *regex);
+gint		  g_regex_get_capture_count	(const GRegex        *regex);
+gint		  g_regex_get_string_number	(const GRegex        *regex, 
+						 const gchar         *name);
+gchar		 *g_regex_escape_string		(const gchar         *string,
+						 gint                 length);
+
+/* Matching. */
+gboolean	  g_regex_match_simple		(const gchar         *pattern,
+						 const gchar         *string,
+						 GRegexCompileFlags   compile_options,
+						 GRegexMatchFlags     match_options);
+gboolean	  g_regex_match			(const GRegex        *regex,
+						 const gchar         *string,
+						 GRegexMatchFlags     match_options,
+						 GMatchInfo         **match_info);
+gboolean	  g_regex_match_full		(const GRegex        *regex,
+						 const gchar         *string,
+						 gssize               string_len,
+						 gint                 start_position,
+						 GRegexMatchFlags     match_options,
+						 GMatchInfo         **match_info,
+						 GError             **error);
+gboolean	  g_regex_match_all		(const GRegex        *regex,
+						 const gchar         *string,
+						 GRegexMatchFlags     match_options,
+						 GMatchInfo         **match_info);
+gboolean	  g_regex_match_all_full	(const GRegex        *regex,
+						 const gchar         *string,
+						 gssize               string_len,
+						 gint                 start_position,
+						 GRegexMatchFlags     match_options,
+						 GMatchInfo         **match_info,
+						 GError             **error);
+
+/* String splitting. */
+gchar		**g_regex_split_simple		(const gchar         *pattern,
+						 const gchar         *string,
+						 GRegexCompileFlags   compile_options,
+						 GRegexMatchFlags     match_options);
+gchar		**g_regex_split			(const GRegex        *regex,
+						 const gchar         *string,
+						 GRegexMatchFlags     match_options);
+gchar		**g_regex_split_full		(const GRegex        *regex,
+						 const gchar         *string,
+						 gssize               string_len,
+						 gint                 start_position,
+						 GRegexMatchFlags     match_options,
+						 gint                 max_tokens,
+						 GError             **error);
+
+/* String replacement. */
+gchar		 *g_regex_replace		(const GRegex        *regex,
+						 const gchar         *string,
+						 gssize               string_len,
+						 gint                 start_position,
+						 const gchar         *replacement,
+						 GRegexMatchFlags     match_options,
+						 GError             **error);
+gchar		 *g_regex_replace_literal	(const GRegex        *regex,
+						 const gchar         *string,
+						 gssize               string_len,
+						 gint                 start_position,
+						 const gchar         *replacement,
+						 GRegexMatchFlags     match_options,
+						 GError             **error);
+gchar		 *g_regex_replace_eval		(const GRegex        *regex,
+						 const gchar         *string,
+						 gssize               string_len,
+						 gint                 start_position,
+						 GRegexMatchFlags     match_options,
+						 GRegexEvalCallback   eval,
+						 gpointer             user_data,
+						 GError             **error);
+gboolean	  g_regex_check_replacement	(const gchar         *replacement,
+						 gboolean            *has_references,
+						 GError             **error);
+
+/* Match info */
+GRegex		 *g_match_info_get_regex	(const GMatchInfo    *match_info);
+const gchar      *g_match_info_get_string       (const GMatchInfo    *match_info);
+
+void		  g_match_info_free		(GMatchInfo          *match_info);
+gboolean	  g_match_info_next		(GMatchInfo          *match_info,
+						 GError             **error);
+gboolean	  g_match_info_matches		(const GMatchInfo    *match_info);
+gint		  g_match_info_get_match_count	(const GMatchInfo    *match_info);
+gboolean	  g_match_info_is_partial_match	(const GMatchInfo    *match_info);
+gchar		 *g_match_info_expand_references(const GMatchInfo    *match_info,
+						 const gchar         *string_to_expand,
+						 GError             **error);
+gchar		 *g_match_info_fetch		(const GMatchInfo    *match_info,
+						 gint                 match_num);
+gboolean	  g_match_info_fetch_pos	(const GMatchInfo    *match_info,
+						 gint                 match_num,
+						 gint                *start_pos,
+						 gint                *end_pos);
+gchar		 *g_match_info_fetch_named	(const GMatchInfo    *match_info,
+						 const gchar         *name);
+gboolean	  g_match_info_fetch_named_pos	(const GMatchInfo    *match_info,
+						 const gchar         *name,
+						 gint                *start_pos,
+						 gint                *end_pos);
+gchar		**g_match_info_fetch_all	(const GMatchInfo    *match_info);
+
+G_END_DECLS
+
+#endif  /*  __G_REGEX_H__ */
diff --git a/glib/grel.h b/glib/grel.h
new file mode 100644
index 0000000..e7c9291
--- /dev/null
+++ b/glib/grel.h
@@ -0,0 +1,97 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_REL_H__
+#define __G_REL_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GRelation       GRelation;
+typedef struct _GTuples         GTuples;
+
+struct _GTuples
+{
+  guint len;
+};
+
+/* GRelation
+ *
+ * Indexed Relations.  Imagine a really simple table in a
+ * database.  Relations are not ordered.  This data type is meant for
+ * maintaining a N-way mapping.
+ *
+ * g_relation_new() creates a relation with FIELDS fields
+ *
+ * g_relation_destroy() frees all resources
+ * g_tuples_destroy() frees the result of g_relation_select()
+ *
+ * g_relation_index() indexes relation FIELD with the provided
+ *   equality and hash functions.  this must be done before any
+ *   calls to insert are made.
+ *
+ * g_relation_insert() inserts a new tuple.  you are expected to
+ *   provide the right number of fields.
+ *
+ * g_relation_delete() deletes all relations with KEY in FIELD
+ * g_relation_select() returns ...
+ * g_relation_count() counts ...
+ */
+
+GRelation* g_relation_new     (gint         fields);
+void       g_relation_destroy (GRelation   *relation);
+void       g_relation_index   (GRelation   *relation,
+                               gint         field,
+                               GHashFunc    hash_func,
+                               GEqualFunc   key_equal_func);
+void       g_relation_insert  (GRelation   *relation,
+                               ...);
+gint       g_relation_delete  (GRelation   *relation,
+                               gconstpointer  key,
+                               gint         field);
+GTuples*   g_relation_select  (GRelation   *relation,
+                               gconstpointer  key,
+                               gint         field);
+gint       g_relation_count   (GRelation   *relation,
+                               gconstpointer  key,
+                               gint         field);
+gboolean   g_relation_exists  (GRelation   *relation,
+                               ...);
+void       g_relation_print   (GRelation   *relation);
+
+void       g_tuples_destroy   (GTuples     *tuples);
+gpointer   g_tuples_index     (GTuples     *tuples,
+                               gint         index_,
+                               gint         field);
+
+G_END_DECLS
+
+#endif /* __G_REL_H__ */
diff --git a/glib/gscanner.h b/glib/gscanner.h
new file mode 100644
index 0000000..3b7ad6f
--- /dev/null
+++ b/glib/gscanner.h
@@ -0,0 +1,278 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_SCANNER_H__
+#define __G_SCANNER_H__
+
+#include <glib/gdataset.h>
+#include <glib/ghash.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GScanner	GScanner;
+typedef struct _GScannerConfig	GScannerConfig;
+typedef union  _GTokenValue     GTokenValue;
+
+typedef void		(*GScannerMsgFunc)	(GScanner      *scanner,
+						 gchar	       *message,
+						 gboolean	error);
+
+/* GScanner: Flexible lexical scanner for general purpose.
+ */
+
+/* Character sets */
+#define G_CSET_A_2_Z	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+#define G_CSET_a_2_z	"abcdefghijklmnopqrstuvwxyz"
+#define G_CSET_DIGITS	"0123456789"
+#define G_CSET_LATINC	"\300\301\302\303\304\305\306"\
+			"\307\310\311\312\313\314\315\316\317\320"\
+			"\321\322\323\324\325\326"\
+			"\330\331\332\333\334\335\336"
+#define G_CSET_LATINS	"\337\340\341\342\343\344\345\346"\
+			"\347\350\351\352\353\354\355\356\357\360"\
+			"\361\362\363\364\365\366"\
+			"\370\371\372\373\374\375\376\377"
+
+/* Error types */
+typedef enum
+{
+  G_ERR_UNKNOWN,
+  G_ERR_UNEXP_EOF,
+  G_ERR_UNEXP_EOF_IN_STRING,
+  G_ERR_UNEXP_EOF_IN_COMMENT,
+  G_ERR_NON_DIGIT_IN_CONST,
+  G_ERR_DIGIT_RADIX,
+  G_ERR_FLOAT_RADIX,
+  G_ERR_FLOAT_MALFORMED
+} GErrorType;
+
+/* Token types */
+typedef enum
+{
+  G_TOKEN_EOF			=   0,
+  
+  G_TOKEN_LEFT_PAREN		= '(',
+  G_TOKEN_RIGHT_PAREN		= ')',
+  G_TOKEN_LEFT_CURLY		= '{',
+  G_TOKEN_RIGHT_CURLY		= '}',
+  G_TOKEN_LEFT_BRACE		= '[',
+  G_TOKEN_RIGHT_BRACE		= ']',
+  G_TOKEN_EQUAL_SIGN		= '=',
+  G_TOKEN_COMMA			= ',',
+  
+  G_TOKEN_NONE			= 256,
+  
+  G_TOKEN_ERROR,
+  
+  G_TOKEN_CHAR,
+  G_TOKEN_BINARY,
+  G_TOKEN_OCTAL,
+  G_TOKEN_INT,
+  G_TOKEN_HEX,
+  G_TOKEN_FLOAT,
+  G_TOKEN_STRING,
+  
+  G_TOKEN_SYMBOL,
+  G_TOKEN_IDENTIFIER,
+  G_TOKEN_IDENTIFIER_NULL,
+  
+  G_TOKEN_COMMENT_SINGLE,
+  G_TOKEN_COMMENT_MULTI,
+  G_TOKEN_LAST
+} GTokenType;
+
+union	_GTokenValue
+{
+  gpointer	v_symbol;
+  gchar		*v_identifier;
+  gulong	v_binary;
+  gulong	v_octal;
+  gulong	v_int;
+  guint64       v_int64;
+  gdouble	v_float;
+  gulong	v_hex;
+  gchar		*v_string;
+  gchar		*v_comment;
+  guchar	v_char;
+  guint		v_error;
+};
+
+struct	_GScannerConfig
+{
+  /* Character sets
+   */
+  gchar		*cset_skip_characters;		/* default: " \t\n" */
+  gchar		*cset_identifier_first;
+  gchar		*cset_identifier_nth;
+  gchar		*cpair_comment_single;		/* default: "#\n" */
+  
+  /* Should symbol lookup work case sensitive?
+   */
+  guint		case_sensitive : 1;
+  
+  /* Boolean values to be adjusted "on the fly"
+   * to configure scanning behaviour.
+   */
+  guint		skip_comment_multi : 1;		/* C like comment */
+  guint		skip_comment_single : 1;	/* single line comment */
+  guint		scan_comment_multi : 1;		/* scan multi line comments? */
+  guint		scan_identifier : 1;
+  guint		scan_identifier_1char : 1;
+  guint		scan_identifier_NULL : 1;
+  guint		scan_symbols : 1;
+  guint		scan_binary : 1;
+  guint		scan_octal : 1;
+  guint		scan_float : 1;
+  guint		scan_hex : 1;			/* `0x0ff0' */
+  guint		scan_hex_dollar : 1;		/* `$0ff0' */
+  guint		scan_string_sq : 1;		/* string: 'anything' */
+  guint		scan_string_dq : 1;		/* string: "\\-escapes!\n" */
+  guint		numbers_2_int : 1;		/* bin, octal, hex => int */
+  guint		int_2_float : 1;		/* int => G_TOKEN_FLOAT? */
+  guint		identifier_2_string : 1;
+  guint		char_2_token : 1;		/* return G_TOKEN_CHAR? */
+  guint		symbol_2_token : 1;
+  guint		scope_0_fallback : 1;		/* try scope 0 on lookups? */
+  guint		store_int64 : 1; 		/* use value.v_int64 rather than v_int */
+  guint		padding_dummy;
+};
+
+struct	_GScanner
+{
+  /* unused fields */
+  gpointer		user_data;
+  guint			max_parse_errors;
+  
+  /* g_scanner_error() increments this field */
+  guint			parse_errors;
+  
+  /* name of input stream, featured by the default message handler */
+  const gchar		*input_name;
+  
+  /* quarked data */
+  GData			*qdata;
+  
+  /* link into the scanner configuration */
+  GScannerConfig	*config;
+  
+  /* fields filled in after g_scanner_get_next_token() */
+  GTokenType		token;
+  GTokenValue		value;
+  guint			line;
+  guint			position;
+  
+  /* fields filled in after g_scanner_peek_next_token() */
+  GTokenType		next_token;
+  GTokenValue		next_value;
+  guint			next_line;
+  guint			next_position;
+  
+  /* to be considered private */
+  GHashTable		*symbol_table;
+  gint			input_fd;
+  const gchar		*text;
+  const gchar		*text_end;
+  gchar			*buffer;
+  guint			scope_id;
+  
+  /* handler function for _warn and _error */
+  GScannerMsgFunc	msg_handler;
+};
+
+GScanner*	g_scanner_new			(const GScannerConfig *config_templ);
+void		g_scanner_destroy		(GScanner	*scanner);
+void		g_scanner_input_file		(GScanner	*scanner,
+						 gint		input_fd);
+void		g_scanner_sync_file_offset	(GScanner	*scanner);
+void		g_scanner_input_text		(GScanner	*scanner,
+						 const	gchar	*text,
+						 guint		text_len);
+GTokenType	g_scanner_get_next_token	(GScanner	*scanner);
+GTokenType	g_scanner_peek_next_token	(GScanner	*scanner);
+GTokenType	g_scanner_cur_token		(GScanner	*scanner);
+GTokenValue	g_scanner_cur_value		(GScanner	*scanner);
+guint		g_scanner_cur_line		(GScanner	*scanner);
+guint		g_scanner_cur_position		(GScanner	*scanner);
+gboolean	g_scanner_eof			(GScanner	*scanner);
+guint		g_scanner_set_scope		(GScanner	*scanner,
+						 guint		 scope_id);
+void		g_scanner_scope_add_symbol	(GScanner	*scanner,
+						 guint		 scope_id,
+						 const gchar	*symbol,
+						 gpointer	value);
+void		g_scanner_scope_remove_symbol	(GScanner	*scanner,
+						 guint		 scope_id,
+						 const gchar	*symbol);
+gpointer	g_scanner_scope_lookup_symbol	(GScanner	*scanner,
+						 guint		 scope_id,
+						 const gchar	*symbol);
+void		g_scanner_scope_foreach_symbol	(GScanner	*scanner,
+						 guint		 scope_id,
+						 GHFunc		 func,
+						 gpointer	 user_data);
+gpointer	g_scanner_lookup_symbol		(GScanner	*scanner,
+						 const gchar	*symbol);
+void		g_scanner_unexp_token		(GScanner	*scanner,
+						 GTokenType	expected_token,
+						 const gchar	*identifier_spec,
+						 const gchar	*symbol_spec,
+						 const gchar	*symbol_name,
+						 const gchar	*message,
+						 gint		 is_error);
+void		g_scanner_error			(GScanner	*scanner,
+						 const gchar	*format,
+						 ...) G_GNUC_PRINTF (2,3);
+void		g_scanner_warn			(GScanner	*scanner,
+						 const gchar	*format,
+						 ...) G_GNUC_PRINTF (2,3);
+
+#ifndef G_DISABLE_DEPRECATED
+
+/* keep downward source compatibility */
+#define		g_scanner_add_symbol( scanner, symbol, value )	G_STMT_START { \
+  g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
+} G_STMT_END
+#define		g_scanner_remove_symbol( scanner, symbol )	G_STMT_START { \
+  g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
+} G_STMT_END
+#define		g_scanner_foreach_symbol( scanner, func, data )	G_STMT_START { \
+  g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \
+} G_STMT_END
+
+/* The following two functions are deprecated and will be removed in
+ * the next major release. They do no good. */
+#define g_scanner_freeze_symbol_table(scanner) ((void)0)
+#define g_scanner_thaw_symbol_table(scanner) ((void)0)
+
+#endif /* G_DISABLE_DEPRECATED */
+
+G_END_DECLS
+
+#endif /* __G_SCANNER_H__ */
diff --git a/glib/gscripttable.h b/glib/gscripttable.h
new file mode 100644
index 0000000..b63e2da
--- /dev/null
+++ b/glib/gscripttable.h
@@ -0,0 +1,3012 @@
+/* gscripttable.h: Generated by gen-script-table.pl
+ *
+ *  Date: Mon Apr  7 23:17:02 2008
+ *  Source: Scripts-5.1.0.txt
+ *
+ * Do not edit.
+ */
+
+#define G_EASY_SCRIPTS_RANGE 8192
+
+static const guchar g_script_easy_table[8192] = {
+
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC,
+  G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC,
+  G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC,
+  G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC,
+  G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC, G_UNICODE_SCRIPT_COPTIC,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARMENIAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_HEBREW,
+  G_UNICODE_SCRIPT_HEBREW, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC, G_UNICODE_SCRIPT_SYRIAC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC, G_UNICODE_SCRIPT_ARABIC,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA,
+  G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_THAANA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO, G_UNICODE_SCRIPT_NKO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI,
+  G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_DEVANAGARI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI,
+  G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_BENGALI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI,
+  G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_GURMUKHI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_GUJARATI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GUJARATI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA,
+  G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_ORIYA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_TAMIL,
+  G_UNICODE_SCRIPT_TAMIL, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU,
+  G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_TELUGU, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA, G_UNICODE_SCRIPT_KANNADA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM, G_UNICODE_SCRIPT_MALAYALAM,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA, G_UNICODE_SCRIPT_SINHALA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_THAI,
+  G_UNICODE_SCRIPT_THAI, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_LAO, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN, G_UNICODE_SCRIPT_TIBETAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_MYANMAR, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_GEORGIAN,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_GEORGIAN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL, G_UNICODE_SCRIPT_HANGUL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC,
+  G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_ETHIOPIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE, G_UNICODE_SCRIPT_CHEROKEE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM,
+  G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_OGHAM, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_RUNIC,
+  G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_RUNIC, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG,
+  G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_TAGALOG, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_HANUNOO,
+  G_UNICODE_SCRIPT_HANUNOO, G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID,
+  G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_BUHID, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAGBANWA,
+  G_UNICODE_SCRIPT_TAGBANWA, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_COMMON, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_COMMON,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN, G_UNICODE_SCRIPT_MONGOLIAN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU, G_UNICODE_SCRIPT_LIMBU,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_TAI_LE,
+  G_UNICODE_SCRIPT_TAI_LE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_NEW_TAI_LUE, G_UNICODE_SCRIPT_NEW_TAI_LUE,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER,
+  G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_KHMER, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BUGINESE,
+  G_UNICODE_SCRIPT_BUGINESE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE,
+  G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_BALINESE, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE, G_UNICODE_SCRIPT_SUNDANESE,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA, G_UNICODE_SCRIPT_LEPCHA,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI, G_UNICODE_SCRIPT_OL_CHIKI,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_CYRILLIC, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_CYRILLIC,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_INHERITED, G_UNICODE_SCRIPT_INHERITED,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_LATIN,
+  G_UNICODE_SCRIPT_LATIN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_UNKNOWN,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_UNKNOWN, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_GREEK,
+  G_UNICODE_SCRIPT_GREEK, G_UNICODE_SCRIPT_UNKNOWN,
+};
+
+static const struct {
+    gunichar    start;
+    guint16     chars;
+    guint16     script;
+} g_script_table[] = { 
+ { 0x2000,    12, G_UNICODE_SCRIPT_COMMON },
+ { 0x200c,     2, G_UNICODE_SCRIPT_INHERITED },
+ { 0x200e,    87, G_UNICODE_SCRIPT_COMMON },
+ { 0x206a,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0x2071,     1, G_UNICODE_SCRIPT_LATIN },
+ { 0x2074,    11, G_UNICODE_SCRIPT_COMMON },
+ { 0x207f,     1, G_UNICODE_SCRIPT_LATIN },
+ { 0x2080,    15, G_UNICODE_SCRIPT_COMMON },
+ { 0x2090,     5, G_UNICODE_SCRIPT_LATIN },
+ { 0x20a0,    22, G_UNICODE_SCRIPT_COMMON },
+ { 0x20d0,    33, G_UNICODE_SCRIPT_INHERITED },
+ { 0x2100,    38, G_UNICODE_SCRIPT_COMMON },
+ { 0x2126,     1, G_UNICODE_SCRIPT_GREEK },
+ { 0x2127,     3, G_UNICODE_SCRIPT_COMMON },
+ { 0x212a,     2, G_UNICODE_SCRIPT_LATIN },
+ { 0x212c,     6, G_UNICODE_SCRIPT_COMMON },
+ { 0x2132,     1, G_UNICODE_SCRIPT_LATIN },
+ { 0x2133,    27, G_UNICODE_SCRIPT_COMMON },
+ { 0x214e,     1, G_UNICODE_SCRIPT_LATIN },
+ { 0x214f,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x2153,    13, G_UNICODE_SCRIPT_COMMON },
+ { 0x2160,    41, G_UNICODE_SCRIPT_LATIN },
+ { 0x2190,   600, G_UNICODE_SCRIPT_COMMON },
+ { 0x2400,    39, G_UNICODE_SCRIPT_COMMON },
+ { 0x2440,    11, G_UNICODE_SCRIPT_COMMON },
+ { 0x2460,   574, G_UNICODE_SCRIPT_COMMON },
+ { 0x26a0,    29, G_UNICODE_SCRIPT_COMMON },
+ { 0x26c0,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x2701,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x2706,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x270c,    28, G_UNICODE_SCRIPT_COMMON },
+ { 0x2729,    35, G_UNICODE_SCRIPT_COMMON },
+ { 0x274d,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x274f,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x2756,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x2758,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0x2761,    52, G_UNICODE_SCRIPT_COMMON },
+ { 0x2798,    24, G_UNICODE_SCRIPT_COMMON },
+ { 0x27b1,    14, G_UNICODE_SCRIPT_COMMON },
+ { 0x27c0,    11, G_UNICODE_SCRIPT_COMMON },
+ { 0x27cc,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x27d0,    48, G_UNICODE_SCRIPT_COMMON },
+ { 0x2800,   256, G_UNICODE_SCRIPT_BRAILLE },
+ { 0x2900,   589, G_UNICODE_SCRIPT_COMMON },
+ { 0x2b50,     5, G_UNICODE_SCRIPT_COMMON },
+ { 0x2c00,    47, G_UNICODE_SCRIPT_GLAGOLITIC },
+ { 0x2c30,    47, G_UNICODE_SCRIPT_GLAGOLITIC },
+ { 0x2c60,    16, G_UNICODE_SCRIPT_LATIN },
+ { 0x2c71,    13, G_UNICODE_SCRIPT_LATIN },
+ { 0x2c80,   107, G_UNICODE_SCRIPT_COPTIC },
+ { 0x2cf9,     7, G_UNICODE_SCRIPT_COPTIC },
+ { 0x2d00,    38, G_UNICODE_SCRIPT_GEORGIAN },
+ { 0x2d30,    54, G_UNICODE_SCRIPT_TIFINAGH },
+ { 0x2d6f,     1, G_UNICODE_SCRIPT_TIFINAGH },
+ { 0x2d80,    23, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2da0,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2da8,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2db0,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2db8,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2dc0,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2dc8,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2dd0,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2dd8,     7, G_UNICODE_SCRIPT_ETHIOPIC },
+ { 0x2de0,    32, G_UNICODE_SCRIPT_CYRILLIC },
+ { 0x2e00,    49, G_UNICODE_SCRIPT_COMMON },
+ { 0x2e80,    26, G_UNICODE_SCRIPT_HAN },
+ { 0x2e9b,    89, G_UNICODE_SCRIPT_HAN },
+ { 0x2f00,   214, G_UNICODE_SCRIPT_HAN },
+ { 0x2ff0,    12, G_UNICODE_SCRIPT_COMMON },
+ { 0x3000,     5, G_UNICODE_SCRIPT_COMMON },
+ { 0x3005,     1, G_UNICODE_SCRIPT_HAN },
+ { 0x3006,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x3007,     1, G_UNICODE_SCRIPT_HAN },
+ { 0x3008,    25, G_UNICODE_SCRIPT_COMMON },
+ { 0x3021,     9, G_UNICODE_SCRIPT_HAN },
+ { 0x302a,     6, G_UNICODE_SCRIPT_INHERITED },
+ { 0x3030,     8, G_UNICODE_SCRIPT_COMMON },
+ { 0x3038,     4, G_UNICODE_SCRIPT_HAN },
+ { 0x303c,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x3041,    86, G_UNICODE_SCRIPT_HIRAGANA },
+ { 0x3099,     2, G_UNICODE_SCRIPT_INHERITED },
+ { 0x309b,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0x309d,     3, G_UNICODE_SCRIPT_HIRAGANA },
+ { 0x30a0,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x30a1,    90, G_UNICODE_SCRIPT_KATAKANA },
+ { 0x30fb,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0x30fd,     3, G_UNICODE_SCRIPT_KATAKANA },
+ { 0x3105,    41, G_UNICODE_SCRIPT_BOPOMOFO },
+ { 0x3131,    94, G_UNICODE_SCRIPT_HANGUL },
+ { 0x3190,    16, G_UNICODE_SCRIPT_COMMON },
+ { 0x31a0,    24, G_UNICODE_SCRIPT_BOPOMOFO },
+ { 0x31c0,    36, G_UNICODE_SCRIPT_COMMON },
+ { 0x31f0,    16, G_UNICODE_SCRIPT_KATAKANA },
+ { 0x3200,    31, G_UNICODE_SCRIPT_HANGUL },
+ { 0x3220,    36, G_UNICODE_SCRIPT_COMMON },
+ { 0x3250,    16, G_UNICODE_SCRIPT_COMMON },
+ { 0x3260,    31, G_UNICODE_SCRIPT_HANGUL },
+ { 0x327f,    81, G_UNICODE_SCRIPT_COMMON },
+ { 0x32d0,    47, G_UNICODE_SCRIPT_KATAKANA },
+ { 0x3300,    88, G_UNICODE_SCRIPT_KATAKANA },
+ { 0x3358,   168, G_UNICODE_SCRIPT_COMMON },
+ { 0x3400,  6582, G_UNICODE_SCRIPT_HAN },
+ { 0x4dc0,    64, G_UNICODE_SCRIPT_COMMON },
+ { 0x4e00, 20932, G_UNICODE_SCRIPT_HAN },
+ { 0xa000,  1165, G_UNICODE_SCRIPT_YI },
+ { 0xa490,    55, G_UNICODE_SCRIPT_YI },
+ { 0xa500,   300, G_UNICODE_SCRIPT_VAI },
+ { 0xa640,    32, G_UNICODE_SCRIPT_CYRILLIC },
+ { 0xa662,    18, G_UNICODE_SCRIPT_CYRILLIC },
+ { 0xa67c,    28, G_UNICODE_SCRIPT_CYRILLIC },
+ { 0xa700,    34, G_UNICODE_SCRIPT_COMMON },
+ { 0xa722,   102, G_UNICODE_SCRIPT_LATIN },
+ { 0xa788,     3, G_UNICODE_SCRIPT_COMMON },
+ { 0xa78b,     2, G_UNICODE_SCRIPT_LATIN },
+ { 0xa7fb,     5, G_UNICODE_SCRIPT_LATIN },
+ { 0xa800,    44, G_UNICODE_SCRIPT_SYLOTI_NAGRI },
+ { 0xa840,    56, G_UNICODE_SCRIPT_PHAGS_PA },
+ { 0xa880,    69, G_UNICODE_SCRIPT_SAURASHTRA },
+ { 0xa8ce,    12, G_UNICODE_SCRIPT_SAURASHTRA },
+ { 0xa900,    48, G_UNICODE_SCRIPT_KAYAH_LI },
+ { 0xa930,    36, G_UNICODE_SCRIPT_REJANG },
+ { 0xa95f,     1, G_UNICODE_SCRIPT_REJANG },
+ { 0xaa00,    55, G_UNICODE_SCRIPT_CHAM },
+ { 0xaa40,    14, G_UNICODE_SCRIPT_CHAM },
+ { 0xaa50,    10, G_UNICODE_SCRIPT_CHAM },
+ { 0xaa5c,     4, G_UNICODE_SCRIPT_CHAM },
+ { 0xac00, 11172, G_UNICODE_SCRIPT_HANGUL },
+ { 0xf900,   302, G_UNICODE_SCRIPT_HAN },
+ { 0xfa30,    59, G_UNICODE_SCRIPT_HAN },
+ { 0xfa70,   106, G_UNICODE_SCRIPT_HAN },
+ { 0xfb00,     7, G_UNICODE_SCRIPT_LATIN },
+ { 0xfb13,     5, G_UNICODE_SCRIPT_ARMENIAN },
+ { 0xfb1d,    26, G_UNICODE_SCRIPT_HEBREW },
+ { 0xfb38,     5, G_UNICODE_SCRIPT_HEBREW },
+ { 0xfb3e,     1, G_UNICODE_SCRIPT_HEBREW },
+ { 0xfb40,     2, G_UNICODE_SCRIPT_HEBREW },
+ { 0xfb43,     2, G_UNICODE_SCRIPT_HEBREW },
+ { 0xfb46,    10, G_UNICODE_SCRIPT_HEBREW },
+ { 0xfb50,    98, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfbd3,   363, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfd3e,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0xfd50,    64, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfd92,    54, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfdf0,    13, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfdfd,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0xfe00,    16, G_UNICODE_SCRIPT_INHERITED },
+ { 0xfe10,    10, G_UNICODE_SCRIPT_COMMON },
+ { 0xfe20,     7, G_UNICODE_SCRIPT_INHERITED },
+ { 0xfe30,    35, G_UNICODE_SCRIPT_COMMON },
+ { 0xfe54,    19, G_UNICODE_SCRIPT_COMMON },
+ { 0xfe68,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0xfe70,     5, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfe76,   135, G_UNICODE_SCRIPT_ARABIC },
+ { 0xfeff,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0xff01,    32, G_UNICODE_SCRIPT_COMMON },
+ { 0xff21,    26, G_UNICODE_SCRIPT_LATIN },
+ { 0xff3b,     6, G_UNICODE_SCRIPT_COMMON },
+ { 0xff41,    26, G_UNICODE_SCRIPT_LATIN },
+ { 0xff5b,    11, G_UNICODE_SCRIPT_COMMON },
+ { 0xff66,    10, G_UNICODE_SCRIPT_KATAKANA },
+ { 0xff70,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0xff71,    45, G_UNICODE_SCRIPT_KATAKANA },
+ { 0xff9e,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0xffa0,    31, G_UNICODE_SCRIPT_HANGUL },
+ { 0xffc2,     6, G_UNICODE_SCRIPT_HANGUL },
+ { 0xffca,     6, G_UNICODE_SCRIPT_HANGUL },
+ { 0xffd2,     6, G_UNICODE_SCRIPT_HANGUL },
+ { 0xffda,     3, G_UNICODE_SCRIPT_HANGUL },
+ { 0xffe0,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0xffe8,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0xfff9,     5, G_UNICODE_SCRIPT_COMMON },
+ { 0x10000,    12, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x1000d,    26, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x10028,    19, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x1003c,     2, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x1003f,    15, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x10050,    14, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x10080,   123, G_UNICODE_SCRIPT_LINEAR_B },
+ { 0x10100,     3, G_UNICODE_SCRIPT_COMMON },
+ { 0x10107,    45, G_UNICODE_SCRIPT_COMMON },
+ { 0x10137,     9, G_UNICODE_SCRIPT_COMMON },
+ { 0x10140,    75, G_UNICODE_SCRIPT_GREEK },
+ { 0x10190,    12, G_UNICODE_SCRIPT_COMMON },
+ { 0x101d0,    45, G_UNICODE_SCRIPT_COMMON },
+ { 0x101fd,     1, G_UNICODE_SCRIPT_INHERITED },
+ { 0x10280,    29, G_UNICODE_SCRIPT_LYCIAN },
+ { 0x102a0,    49, G_UNICODE_SCRIPT_CARIAN },
+ { 0x10300,    31, G_UNICODE_SCRIPT_OLD_ITALIC },
+ { 0x10320,     4, G_UNICODE_SCRIPT_OLD_ITALIC },
+ { 0x10330,    27, G_UNICODE_SCRIPT_GOTHIC },
+ { 0x10380,    30, G_UNICODE_SCRIPT_UGARITIC },
+ { 0x1039f,     1, G_UNICODE_SCRIPT_UGARITIC },
+ { 0x103a0,    36, G_UNICODE_SCRIPT_OLD_PERSIAN },
+ { 0x103c8,    14, G_UNICODE_SCRIPT_OLD_PERSIAN },
+ { 0x10400,    80, G_UNICODE_SCRIPT_DESERET },
+ { 0x10450,    48, G_UNICODE_SCRIPT_SHAVIAN },
+ { 0x10480,    30, G_UNICODE_SCRIPT_OSMANYA },
+ { 0x104a0,    10, G_UNICODE_SCRIPT_OSMANYA },
+ { 0x10800,     6, G_UNICODE_SCRIPT_CYPRIOT },
+ { 0x10808,     1, G_UNICODE_SCRIPT_CYPRIOT },
+ { 0x1080a,    44, G_UNICODE_SCRIPT_CYPRIOT },
+ { 0x10837,     2, G_UNICODE_SCRIPT_CYPRIOT },
+ { 0x1083c,     1, G_UNICODE_SCRIPT_CYPRIOT },
+ { 0x1083f,     1, G_UNICODE_SCRIPT_CYPRIOT },
+ { 0x10900,    26, G_UNICODE_SCRIPT_PHOENICIAN },
+ { 0x1091f,     1, G_UNICODE_SCRIPT_PHOENICIAN },
+ { 0x10920,    26, G_UNICODE_SCRIPT_LYDIAN },
+ { 0x1093f,     1, G_UNICODE_SCRIPT_LYDIAN },
+ { 0x10a00,     4, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a05,     2, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a0c,     8, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a15,     3, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a19,    27, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a38,     3, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a3f,     9, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x10a50,     9, G_UNICODE_SCRIPT_KHAROSHTHI },
+ { 0x12000,   879, G_UNICODE_SCRIPT_CUNEIFORM },
+ { 0x12400,    99, G_UNICODE_SCRIPT_CUNEIFORM },
+ { 0x12470,     4, G_UNICODE_SCRIPT_CUNEIFORM },
+ { 0x1d000,   246, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d100,    39, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d129,    62, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d167,     3, G_UNICODE_SCRIPT_INHERITED },
+ { 0x1d16a,    17, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d17b,     8, G_UNICODE_SCRIPT_INHERITED },
+ { 0x1d183,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d185,     7, G_UNICODE_SCRIPT_INHERITED },
+ { 0x1d18c,    30, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d1aa,     4, G_UNICODE_SCRIPT_INHERITED },
+ { 0x1d1ae,    48, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d200,    70, G_UNICODE_SCRIPT_GREEK },
+ { 0x1d300,    87, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d360,    18, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d400,    85, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d456,    71, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d49e,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4a2,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4a5,     2, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4a9,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4ae,    12, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4bb,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4bd,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d4c5,    65, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d507,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d50d,     8, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d516,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d51e,    28, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d53b,     4, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d540,     5, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d546,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d54a,     7, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d552,   340, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d6a8,   292, G_UNICODE_SCRIPT_COMMON },
+ { 0x1d7ce,    50, G_UNICODE_SCRIPT_COMMON },
+ { 0x1f000,    44, G_UNICODE_SCRIPT_COMMON },
+ { 0x1f030,   100, G_UNICODE_SCRIPT_COMMON },
+ { 0x20000, 42711, G_UNICODE_SCRIPT_HAN },
+ { 0x2f800,   542, G_UNICODE_SCRIPT_HAN },
+ { 0xe0001,     1, G_UNICODE_SCRIPT_COMMON },
+ { 0xe0020,    96, G_UNICODE_SCRIPT_COMMON },
+ { 0xe0100,   240, G_UNICODE_SCRIPT_INHERITED },
+};
diff --git a/glib/gsequence.h b/glib/gsequence.h
new file mode 100644
index 0000000..fa79066
--- /dev/null
+++ b/glib/gsequence.h
@@ -0,0 +1,128 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+ * Soeren Sandmann (sandmann@daimi.au.dk)
+ *
+ * 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 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_SEQUENCE_H__
+#define __G_SEQUENCE_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GSequence      GSequence;
+typedef struct _GSequenceNode  GSequenceIter;
+
+typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a,
+                                           GSequenceIter *b,
+                                           gpointer       data);
+
+
+/* GSequence */
+GSequence *    g_sequence_new                (GDestroyNotify            data_destroy);
+void           g_sequence_free               (GSequence                *seq);
+gint           g_sequence_get_length         (GSequence                *seq);
+void           g_sequence_foreach            (GSequence                *seq,
+                                              GFunc                     func,
+                                              gpointer                  user_data);
+void           g_sequence_foreach_range      (GSequenceIter            *begin,
+                                              GSequenceIter            *end,
+                                              GFunc                     func,
+                                              gpointer                  user_data);
+void           g_sequence_sort               (GSequence                *seq,
+                                              GCompareDataFunc          cmp_func,
+                                              gpointer                  cmp_data);
+void           g_sequence_sort_iter          (GSequence                *seq,
+                                              GSequenceIterCompareFunc  cmp_func,
+                                              gpointer                  cmp_data);
+
+
+/* Getting iters */
+GSequenceIter *g_sequence_get_begin_iter     (GSequence                *seq);
+GSequenceIter *g_sequence_get_end_iter       (GSequence                *seq);
+GSequenceIter *g_sequence_get_iter_at_pos    (GSequence                *seq,
+                                              gint                      pos);
+GSequenceIter *g_sequence_append             (GSequence                *seq,
+                                              gpointer                  data);
+GSequenceIter *g_sequence_prepend            (GSequence                *seq,
+                                              gpointer                  data);
+GSequenceIter *g_sequence_insert_before      (GSequenceIter            *iter,
+                                              gpointer                  data);
+void           g_sequence_move               (GSequenceIter            *src,
+                                              GSequenceIter            *dest);
+void           g_sequence_swap               (GSequenceIter            *a,
+                                              GSequenceIter            *b);
+GSequenceIter *g_sequence_insert_sorted      (GSequence                *seq,
+                                              gpointer                  data,
+                                              GCompareDataFunc          cmp_func,
+                                              gpointer                  cmp_data);
+GSequenceIter *g_sequence_insert_sorted_iter (GSequence                *seq,
+                                              gpointer                  data,
+                                              GSequenceIterCompareFunc  iter_cmp,
+                                              gpointer                  cmp_data);
+void           g_sequence_sort_changed       (GSequenceIter            *iter,
+                                              GCompareDataFunc          cmp_func,
+                                              gpointer                  cmp_data);
+void           g_sequence_sort_changed_iter  (GSequenceIter            *iter,
+                                              GSequenceIterCompareFunc  iter_cmp,
+                                              gpointer                  cmp_data);
+void           g_sequence_remove             (GSequenceIter            *iter);
+void           g_sequence_remove_range       (GSequenceIter            *begin,
+                                              GSequenceIter            *end);
+void           g_sequence_move_range         (GSequenceIter            *dest,
+                                              GSequenceIter            *begin,
+                                              GSequenceIter            *end);
+GSequenceIter *g_sequence_search             (GSequence                *seq,
+                                              gpointer                  data,
+                                              GCompareDataFunc          cmp_func,
+                                              gpointer                  cmp_data);
+GSequenceIter *g_sequence_search_iter        (GSequence                *seq,
+                                              gpointer                  data,
+                                              GSequenceIterCompareFunc  iter_cmp,
+                                              gpointer                  cmp_data);
+
+
+/* Dereferencing */
+gpointer       g_sequence_get                (GSequenceIter            *iter);
+void           g_sequence_set                (GSequenceIter            *iter,
+                                              gpointer                  data);
+
+/* Operations on GSequenceIter * */
+gboolean       g_sequence_iter_is_begin      (GSequenceIter            *iter);
+gboolean       g_sequence_iter_is_end        (GSequenceIter            *iter);
+GSequenceIter *g_sequence_iter_next          (GSequenceIter            *iter);
+GSequenceIter *g_sequence_iter_prev          (GSequenceIter            *iter);
+gint           g_sequence_iter_get_position  (GSequenceIter            *iter);
+GSequenceIter *g_sequence_iter_move          (GSequenceIter            *iter,
+                                              gint                      delta);
+GSequence *    g_sequence_iter_get_sequence  (GSequenceIter            *iter);
+
+
+/* Search */
+gint           g_sequence_iter_compare       (GSequenceIter            *a,
+                                              GSequenceIter            *b);
+GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter            *begin,
+                                              GSequenceIter            *end);
+
+G_END_DECLS
+
+#endif /* __G_SEQUENCE_H__ */
diff --git a/glib/gshell.h b/glib/gshell.h
new file mode 100644
index 0000000..130f100
--- /dev/null
+++ b/glib/gshell.h
@@ -0,0 +1,55 @@
+/* gshell.h - Shell-related utilities
+ *
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * GLib is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not, write
+ * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_SHELL_H__
+#define __G_SHELL_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+#define G_SHELL_ERROR g_shell_error_quark ()
+
+typedef enum
+{
+  /* mismatched or otherwise mangled quoting */
+  G_SHELL_ERROR_BAD_QUOTING,
+  /* string to be parsed was empty */
+  G_SHELL_ERROR_EMPTY_STRING,
+  G_SHELL_ERROR_FAILED
+} GShellError;
+
+GQuark g_shell_error_quark (void);
+
+gchar*   g_shell_quote      (const gchar   *unquoted_string);
+gchar*   g_shell_unquote    (const gchar   *quoted_string,
+                             GError       **error);
+gboolean g_shell_parse_argv (const gchar   *command_line,
+                             gint          *argcp,
+                             gchar       ***argvp,
+                             GError       **error);
+
+G_END_DECLS
+
+#endif /* __G_SHELL_H__ */
diff --git a/glib/gslice.c b/glib/gslice.c
new file mode 100644
index 0000000..70f9efa
--- /dev/null
+++ b/glib/gslice.c
@@ -0,0 +1,1476 @@
+/* GLIB sliced memory - fast concurrent memory chunk allocator
+ * Copyright (C) 2005 Tim Janik
+ *
+ * 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 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.
+ */
+/* MT safe */
+
+#include "config.h"
+
+#if     defined HAVE_POSIX_MEMALIGN && defined POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS
+#  define HAVE_COMPLIANT_POSIX_MEMALIGN 1
+#endif
+
+#ifdef HAVE_COMPLIANT_POSIX_MEMALIGN
+#define _XOPEN_SOURCE 600       /* posix_memalign() */
+#endif
+#include <stdlib.h>             /* posix_memalign() */
+#include <string.h>
+#include <errno.h>
+#include "gmem.h"               /* gslice.h */
+#include "gthreadprivate.h"
+#include "glib.h"
+#include "galias.h"
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>             /* sysconf() */
+#endif
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <process.h>
+#endif
+
+#include <stdio.h>              /* fputs/fprintf */
+
+
+/* the GSlice allocator is split up into 4 layers, roughly modelled after the slab
+ * allocator and magazine extensions as outlined in:
+ * + [Bonwick94] Jeff Bonwick, The slab allocator: An object-caching kernel
+ *   memory allocator. USENIX 1994, http://citeseer.ist.psu.edu/bonwick94slab.html
+ * + [Bonwick01] Bonwick and Jonathan Adams, Magazines and vmem: Extending the
+ *   slab allocator to many cpu's and arbitrary resources.
+ *   USENIX 2001, http://citeseer.ist.psu.edu/bonwick01magazines.html
+ * the layers are:
+ * - the thread magazines. for each (aligned) chunk size, a magazine (a list)
+ *   of recently freed and soon to be allocated chunks is maintained per thread.
+ *   this way, most alloc/free requests can be quickly satisfied from per-thread
+ *   free lists which only require one g_private_get() call to retrive the
+ *   thread handle.
+ * - the magazine cache. allocating and freeing chunks to/from threads only
+ *   occours at magazine sizes from a global depot of magazines. the depot
+ *   maintaines a 15 second working set of allocated magazines, so full
+ *   magazines are not allocated and released too often.
+ *   the chunk size dependent magazine sizes automatically adapt (within limits,
+ *   see [3]) to lock contention to properly scale performance across a variety
+ *   of SMP systems.
+ * - the slab allocator. this allocator allocates slabs (blocks of memory) close
+ *   to the system page size or multiples thereof which have to be page aligned.
+ *   the blocks are divided into smaller chunks which are used to satisfy
+ *   allocations from the upper layers. the space provided by the reminder of
+ *   the chunk size division is used for cache colorization (random distribution
+ *   of chunk addresses) to improve processor cache utilization. multiple slabs
+ *   with the same chunk size are kept in a partially sorted ring to allow O(1)
+ *   freeing and allocation of chunks (as long as the allocation of an entirely
+ *   new slab can be avoided).
+ * - the page allocator. on most modern systems, posix_memalign(3) or
+ *   memalign(3) should be available, so this is used to allocate blocks with
+ *   system page size based alignments and sizes or multiples thereof.
+ *   if no memalign variant is provided, valloc() is used instead and
+ *   block sizes are limited to the system page size (no multiples thereof).
+ *   as a fallback, on system without even valloc(), a malloc(3)-based page
+ *   allocator with alloc-only behaviour is used.
+ *
+ * NOTES:
+ * [1] some systems memalign(3) implementations may rely on boundary tagging for
+ *     the handed out memory chunks. to avoid excessive page-wise fragmentation,
+ *     we reserve 2 * sizeof (void*) per block size for the systems memalign(3),
+ *     specified in NATIVE_MALLOC_PADDING.
+ * [2] using the slab allocator alone already provides for a fast and efficient
+ *     allocator, it doesn't properly scale beyond single-threaded uses though.
+ *     also, the slab allocator implements eager free(3)-ing, i.e. does not
+ *     provide any form of caching or working set maintenance. so if used alone,
+ *     it's vulnerable to trashing for sequences of balanced (alloc, free) pairs
+ *     at certain thresholds.
+ * [3] magazine sizes are bound by an implementation specific minimum size and
+ *     a chunk size specific maximum to limit magazine storage sizes to roughly
+ *     16KB.
+ * [4] allocating ca. 8 chunks per block/page keeps a good balance between
+ *     external and internal fragmentation (<= 12.5%). [Bonwick94]
+ */
+
+/* --- macros and constants --- */
+#define LARGEALIGNMENT          (256)
+#define P2ALIGNMENT             (2 * sizeof (gsize))                            /* fits 2 pointers (assumed to be 2 * GLIB_SIZEOF_SIZE_T below) */
+#define ALIGN(size, base)       ((base) * (gsize) (((size) + (base) - 1) / (base)))
+#define NATIVE_MALLOC_PADDING   P2ALIGNMENT                                     /* per-page padding left for native malloc(3) see [1] */
+#define SLAB_INFO_SIZE          P2ALIGN (sizeof (SlabInfo) + NATIVE_MALLOC_PADDING)
+#define MAX_MAGAZINE_SIZE       (256)                                           /* see [3] and allocator_get_magazine_threshold() for this */
+#define MIN_MAGAZINE_SIZE       (4)
+#define MAX_STAMP_COUNTER       (7)                                             /* distributes the load of gettimeofday() */
+#define MAX_SLAB_CHUNK_SIZE(al) (((al)->max_page_size - SLAB_INFO_SIZE) / 8)    /* we want at last 8 chunks per page, see [4] */
+#define MAX_SLAB_INDEX(al)      (SLAB_INDEX (al, MAX_SLAB_CHUNK_SIZE (al)) + 1)
+#define SLAB_INDEX(al, asize)   ((asize) / P2ALIGNMENT - 1)                     /* asize must be P2ALIGNMENT aligned */
+#define SLAB_CHUNK_SIZE(al, ix) (((ix) + 1) * P2ALIGNMENT)
+#define SLAB_BPAGE_SIZE(al,csz) (8 * (csz) + SLAB_INFO_SIZE)
+
+/* optimized version of ALIGN (size, P2ALIGNMENT) */
+#if     GLIB_SIZEOF_SIZE_T * 2 == 8  /* P2ALIGNMENT */
+#define P2ALIGN(size)   (((size) + 0x7) & ~(gsize) 0x7)
+#elif   GLIB_SIZEOF_SIZE_T * 2 == 16 /* P2ALIGNMENT */
+#define P2ALIGN(size)   (((size) + 0xf) & ~(gsize) 0xf)
+#else
+#define P2ALIGN(size)   ALIGN (size, P2ALIGNMENT)
+#endif
+
+/* special helpers to avoid gmessage.c dependency */
+static void mem_error (const char *format, ...) G_GNUC_PRINTF (1,2);
+#define mem_assert(cond)    do { if (G_LIKELY (cond)) ; else mem_error ("assertion failed: %s", #cond); } while (0)
+
+/* --- structures --- */
+typedef struct _ChunkLink      ChunkLink;
+typedef struct _SlabInfo       SlabInfo;
+typedef struct _CachedMagazine CachedMagazine;
+struct _ChunkLink {
+  ChunkLink *next;
+  ChunkLink *data;
+};
+struct _SlabInfo {
+  ChunkLink *chunks;
+  guint n_allocated;
+  SlabInfo *next, *prev;
+};
+typedef struct {
+  ChunkLink *chunks;
+  gsize      count;                     /* approximative chunks list length */
+} Magazine;
+typedef struct {
+  Magazine   *magazine1;                /* array of MAX_SLAB_INDEX (allocator) */
+  Magazine   *magazine2;                /* array of MAX_SLAB_INDEX (allocator) */
+} ThreadMemory;
+typedef struct {
+  gboolean always_malloc;
+  gboolean bypass_magazines;
+  gboolean debug_blocks;
+  gsize    working_set_msecs;
+  guint    color_increment;
+} SliceConfig;
+typedef struct {
+  /* const after initialization */
+  gsize         min_page_size, max_page_size;
+  SliceConfig   config;
+  gsize         max_slab_chunk_size_for_magazine_cache;
+  /* magazine cache */
+  GMutex       *magazine_mutex;
+  ChunkLink   **magazines;                /* array of MAX_SLAB_INDEX (allocator) */
+  guint        *contention_counters;      /* array of MAX_SLAB_INDEX (allocator) */
+  gint          mutex_counter;
+  guint         stamp_counter;
+  guint         last_stamp;
+  /* slab allocator */
+  GMutex       *slab_mutex;
+  SlabInfo    **slab_stack;                /* array of MAX_SLAB_INDEX (allocator) */
+  guint        color_accu;
+} Allocator;
+
+/* --- g-slice prototypes --- */
+static gpointer     slab_allocator_alloc_chunk       (gsize      chunk_size);
+static void         slab_allocator_free_chunk        (gsize      chunk_size,
+                                                      gpointer   mem);
+static void         private_thread_memory_cleanup    (gpointer   data);
+static gpointer     allocator_memalign               (gsize      alignment,
+                                                      gsize      memsize);
+static void         allocator_memfree                (gsize      memsize,
+                                                      gpointer   mem);
+static inline void  magazine_cache_update_stamp      (void);
+static inline gsize allocator_get_magazine_threshold (Allocator *allocator,
+                                                      guint      ix);
+
+/* --- g-slice memory checker --- */
+static void     smc_notify_alloc  (void   *pointer,
+                                   size_t  size);
+static int      smc_notify_free   (void   *pointer,
+                                   size_t  size);
+
+/* --- variables --- */
+static GPrivate   *private_thread_memory = NULL;
+static gsize       sys_page_size = 0;
+static Allocator   allocator[1] = { { 0, }, };
+static SliceConfig slice_config = {
+  FALSE,        /* always_malloc */
+  FALSE,        /* bypass_magazines */
+  FALSE,        /* debug_blocks */
+  15 * 1000,    /* working_set_msecs */
+  1,            /* color increment, alt: 0x7fffffff */
+};
+static GMutex     *smc_tree_mutex = NULL; /* mutex for G_SLICE=debug-blocks */
+
+/* --- auxillary funcitons --- */
+void
+g_slice_set_config (GSliceConfig ckey,
+                    gint64       value)
+{
+  g_return_if_fail (sys_page_size == 0);
+  switch (ckey)
+    {
+    case G_SLICE_CONFIG_ALWAYS_MALLOC:
+      slice_config.always_malloc = value != 0;
+      break;
+    case G_SLICE_CONFIG_BYPASS_MAGAZINES:
+      slice_config.bypass_magazines = value != 0;
+      break;
+    case G_SLICE_CONFIG_WORKING_SET_MSECS:
+      slice_config.working_set_msecs = value;
+      break;
+    case G_SLICE_CONFIG_COLOR_INCREMENT:
+      slice_config.color_increment = value;
+    default: ;
+    }
+}
+
+gint64
+g_slice_get_config (GSliceConfig ckey)
+{
+  switch (ckey)
+    {
+    case G_SLICE_CONFIG_ALWAYS_MALLOC:
+      return slice_config.always_malloc;
+    case G_SLICE_CONFIG_BYPASS_MAGAZINES:
+      return slice_config.bypass_magazines;
+    case G_SLICE_CONFIG_WORKING_SET_MSECS:
+      return slice_config.working_set_msecs;
+    case G_SLICE_CONFIG_CHUNK_SIZES:
+      return MAX_SLAB_INDEX (allocator);
+    case G_SLICE_CONFIG_COLOR_INCREMENT:
+      return slice_config.color_increment;
+    default:
+      return 0;
+    }
+}
+
+gint64*
+g_slice_get_config_state (GSliceConfig ckey,
+                          gint64       address,
+                          guint       *n_values)
+{
+  guint i = 0;
+  g_return_val_if_fail (n_values != NULL, NULL);
+  *n_values = 0;
+  switch (ckey)
+    {
+      gint64 array[64];
+    case G_SLICE_CONFIG_CONTENTION_COUNTER:
+      array[i++] = SLAB_CHUNK_SIZE (allocator, address);
+      array[i++] = allocator->contention_counters[address];
+      array[i++] = allocator_get_magazine_threshold (allocator, address);
+      *n_values = i;
+      return g_memdup (array, sizeof (array[0]) * *n_values);
+    default:
+      return NULL;
+    }
+}
+
+static void
+slice_config_init (SliceConfig *config)
+{
+  /* don't use g_malloc/g_message here */
+  gchar buffer[1024];
+  const gchar *val = _g_getenv_nomalloc ("G_SLICE", buffer);
+  const GDebugKey keys[] = {
+    { "always-malloc", 1 << 0 },
+    { "debug-blocks",  1 << 1 },
+  };
+  gint flags = !val ? 0 : g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+  *config = slice_config;
+  if (flags & (1 << 0))         /* always-malloc */
+    config->always_malloc = TRUE;
+  if (flags & (1 << 1))         /* debug-blocks */
+    config->debug_blocks = TRUE;
+}
+
+static void
+g_slice_init_nomessage (void)
+{
+  /* we may not use g_error() or friends here */
+  mem_assert (sys_page_size == 0);
+  mem_assert (MIN_MAGAZINE_SIZE >= 4);
+
+#ifdef G_OS_WIN32
+  {
+    SYSTEM_INFO system_info;
+    GetSystemInfo (&system_info);
+    sys_page_size = system_info.dwPageSize;
+  }
+#else
+  sys_page_size = sysconf (_SC_PAGESIZE); /* = sysconf (_SC_PAGE_SIZE); = getpagesize(); */
+#endif
+  mem_assert (sys_page_size >= 2 * LARGEALIGNMENT);
+  mem_assert ((sys_page_size & (sys_page_size - 1)) == 0);
+  slice_config_init (&allocator->config);
+  allocator->min_page_size = sys_page_size;
+#if HAVE_COMPLIANT_POSIX_MEMALIGN || HAVE_MEMALIGN
+  /* allow allocation of pages up to 8KB (with 8KB alignment).
+   * this is useful because many medium to large sized structures
+   * fit less than 8 times (see [4]) into 4KB pages.
+   * we allow very small page sizes here, to reduce wastage in
+   * threads if only small allocations are required (this does
+   * bear the risk of incresing allocation times and fragmentation
+   * though).
+   */
+  allocator->min_page_size = MAX (allocator->min_page_size, 4096);
+  allocator->max_page_size = MAX (allocator->min_page_size, 8192);
+  allocator->min_page_size = MIN (allocator->min_page_size, 128);
+#else
+  /* we can only align to system page size */
+  allocator->max_page_size = sys_page_size;
+#endif
+  allocator->magazine_mutex = NULL;     /* _g_slice_thread_init_nomessage() */
+  allocator->magazines = g_new0 (ChunkLink*, MAX_SLAB_INDEX (allocator));
+  allocator->contention_counters = g_new0 (guint, MAX_SLAB_INDEX (allocator));
+  allocator->mutex_counter = 0;
+  allocator->stamp_counter = MAX_STAMP_COUNTER; /* force initial update */
+  allocator->last_stamp = 0;
+  allocator->slab_mutex = NULL;         /* _g_slice_thread_init_nomessage() */
+  allocator->slab_stack = g_new0 (SlabInfo*, MAX_SLAB_INDEX (allocator));
+  allocator->color_accu = 0;
+  magazine_cache_update_stamp();
+  /* values cached for performance reasons */
+  allocator->max_slab_chunk_size_for_magazine_cache = MAX_SLAB_CHUNK_SIZE (allocator);
+  if (allocator->config.always_malloc || allocator->config.bypass_magazines)
+    allocator->max_slab_chunk_size_for_magazine_cache = 0;      /* non-optimized cases */
+  /* at this point, g_mem_gc_friendly() should be initialized, this
+   * should have been accomplished by the above g_malloc/g_new calls
+   */
+}
+
+static inline guint
+allocator_categorize (gsize aligned_chunk_size)
+{
+  /* speed up the likely path */
+  if (G_LIKELY (aligned_chunk_size && aligned_chunk_size <= allocator->max_slab_chunk_size_for_magazine_cache))
+    return 1;           /* use magazine cache */
+
+  /* the above will fail (max_slab_chunk_size_for_magazine_cache == 0) if the
+   * allocator is still uninitialized, or if we are not configured to use the
+   * magazine cache.
+   */
+  if (!sys_page_size)
+    g_slice_init_nomessage ();
+  if (!allocator->config.always_malloc &&
+      aligned_chunk_size &&
+      aligned_chunk_size <= MAX_SLAB_CHUNK_SIZE (allocator))
+    {
+      if (allocator->config.bypass_magazines)
+        return 2;       /* use slab allocator, see [2] */
+      return 1;         /* use magazine cache */
+    }
+  return 0;             /* use malloc() */
+}
+
+void
+_g_slice_thread_init_nomessage (void)
+{
+  /* we may not use g_error() or friends here */
+  if (!sys_page_size)
+    g_slice_init_nomessage();
+  else
+    {
+      /* g_slice_init_nomessage() has been called already, probably due
+       * to a g_slice_alloc1() before g_thread_init().
+       */
+    }
+  private_thread_memory = g_private_new (private_thread_memory_cleanup);
+  allocator->magazine_mutex = g_mutex_new();
+  allocator->slab_mutex = g_mutex_new();
+  if (allocator->config.debug_blocks)
+    smc_tree_mutex = g_mutex_new();
+}
+
+static inline void
+g_mutex_lock_a (GMutex *mutex,
+                guint  *contention_counter)
+{
+  gboolean contention = FALSE;
+  if (!g_mutex_trylock (mutex))
+    {
+      g_mutex_lock (mutex);
+      contention = TRUE;
+    }
+  if (contention)
+    {
+      allocator->mutex_counter++;
+      if (allocator->mutex_counter >= 1)        /* quickly adapt to contention */
+        {
+          allocator->mutex_counter = 0;
+          *contention_counter = MIN (*contention_counter + 1, MAX_MAGAZINE_SIZE);
+        }
+    }
+  else /* !contention */
+    {
+      allocator->mutex_counter--;
+      if (allocator->mutex_counter < -11)       /* moderately recover magazine sizes */
+        {
+          allocator->mutex_counter = 0;
+          *contention_counter = MAX (*contention_counter, 1) - 1;
+        }
+    }
+}
+
+static inline ThreadMemory*
+thread_memory_from_self (void)
+{
+  ThreadMemory *tmem = g_private_get (private_thread_memory);
+  if (G_UNLIKELY (!tmem))
+    {
+      static ThreadMemory *single_thread_memory = NULL;   /* remember single-thread info for multi-threaded case */
+      if (single_thread_memory && g_thread_supported ())
+        {
+          g_mutex_lock (allocator->slab_mutex);
+          if (single_thread_memory)
+            {
+              /* GSlice has been used before g_thread_init(), and now
+               * we are running threaded. to cope with it, use the saved
+               * thread memory structure from when we weren't threaded.
+               */
+              tmem = single_thread_memory;
+              single_thread_memory = NULL;      /* slab_mutex protected when multi-threaded */
+            }
+          g_mutex_unlock (allocator->slab_mutex);
+        }
+      if (!tmem)
+	{
+          const guint n_magazines = MAX_SLAB_INDEX (allocator);
+	  tmem = g_malloc0 (sizeof (ThreadMemory) + sizeof (Magazine) * 2 * n_magazines);
+	  tmem->magazine1 = (Magazine*) (tmem + 1);
+	  tmem->magazine2 = &tmem->magazine1[n_magazines];
+	}
+      /* g_private_get/g_private_set works in the single-threaded xor the multi-
+       * threaded case. but not *across* g_thread_init(), after multi-thread
+       * initialization it returns NULL for previously set single-thread data.
+       */
+      g_private_set (private_thread_memory, tmem);
+      /* save single-thread thread memory structure, in case we need to
+       * pick it up again after multi-thread initialization happened.
+       */
+      if (!single_thread_memory && !g_thread_supported ())
+        single_thread_memory = tmem;            /* no slab_mutex created yet */
+    }
+  return tmem;
+}
+
+static inline ChunkLink*
+magazine_chain_pop_head (ChunkLink **magazine_chunks)
+{
+  /* magazine chains are linked via ChunkLink->next.
+   * each ChunkLink->data of the toplevel chain may point to a subchain,
+   * linked via ChunkLink->next. ChunkLink->data of the subchains just
+   * contains uninitialized junk.
+   */
+  ChunkLink *chunk = (*magazine_chunks)->data;
+  if (G_UNLIKELY (chunk))
+    {
+      /* allocating from freed list */
+      (*magazine_chunks)->data = chunk->next;
+    }
+  else
+    {
+      chunk = *magazine_chunks;
+      *magazine_chunks = chunk->next;
+    }
+  return chunk;
+}
+
+#if 0 /* useful for debugging */
+static guint
+magazine_count (ChunkLink *head)
+{
+  guint count = 0;
+  if (!head)
+    return 0;
+  while (head)
+    {
+      ChunkLink *child = head->data;
+      count += 1;
+      for (child = head->data; child; child = child->next)
+        count += 1;
+      head = head->next;
+    }
+  return count;
+}
+#endif
+
+static inline gsize
+allocator_get_magazine_threshold (Allocator *allocator,
+                                  guint      ix)
+{
+  /* the magazine size calculated here has a lower bound of MIN_MAGAZINE_SIZE,
+   * which is required by the implementation. also, for moderately sized chunks
+   * (say >= 64 bytes), magazine sizes shouldn't be much smaller then the number
+   * of chunks available per page/2 to avoid excessive traffic in the magazine
+   * cache for small to medium sized structures.
+   * the upper bound of the magazine size is effectively provided by
+   * MAX_MAGAZINE_SIZE. for larger chunks, this number is scaled down so that
+   * the content of a single magazine doesn't exceed ca. 16KB.
+   */
+  gsize chunk_size = SLAB_CHUNK_SIZE (allocator, ix);
+  guint threshold = MAX (MIN_MAGAZINE_SIZE, allocator->max_page_size / MAX (5 * chunk_size, 5 * 32));
+  guint contention_counter = allocator->contention_counters[ix];
+  if (G_UNLIKELY (contention_counter))  /* single CPU bias */
+    {
+      /* adapt contention counter thresholds to chunk sizes */
+      contention_counter = contention_counter * 64 / chunk_size;
+      threshold = MAX (threshold, contention_counter);
+    }
+  return threshold;
+}
+
+/* --- magazine cache --- */
+static inline void
+magazine_cache_update_stamp (void)
+{
+  if (allocator->stamp_counter >= MAX_STAMP_COUNTER)
+    {
+      GTimeVal tv;
+      g_get_current_time (&tv);
+      allocator->last_stamp = tv.tv_sec * 1000 + tv.tv_usec / 1000; /* milli seconds */
+      allocator->stamp_counter = 0;
+    }
+  else
+    allocator->stamp_counter++;
+}
+
+static inline ChunkLink*
+magazine_chain_prepare_fields (ChunkLink *magazine_chunks)
+{
+  ChunkLink *chunk1;
+  ChunkLink *chunk2;
+  ChunkLink *chunk3;
+  ChunkLink *chunk4;
+  /* checked upon initialization: mem_assert (MIN_MAGAZINE_SIZE >= 4); */
+  /* ensure a magazine with at least 4 unused data pointers */
+  chunk1 = magazine_chain_pop_head (&magazine_chunks);
+  chunk2 = magazine_chain_pop_head (&magazine_chunks);
+  chunk3 = magazine_chain_pop_head (&magazine_chunks);
+  chunk4 = magazine_chain_pop_head (&magazine_chunks);
+  chunk4->next = magazine_chunks;
+  chunk3->next = chunk4;
+  chunk2->next = chunk3;
+  chunk1->next = chunk2;
+  return chunk1;
+}
+
+/* access the first 3 fields of a specially prepared magazine chain */
+#define magazine_chain_prev(mc)         ((mc)->data)
+#define magazine_chain_stamp(mc)        ((mc)->next->data)
+#define magazine_chain_uint_stamp(mc)   GPOINTER_TO_UINT ((mc)->next->data)
+#define magazine_chain_next(mc)         ((mc)->next->next->data)
+#define magazine_chain_count(mc)        ((mc)->next->next->next->data)
+
+static void
+magazine_cache_trim (Allocator *allocator,
+                     guint      ix,
+                     guint      stamp)
+{
+  /* g_mutex_lock (allocator->mutex); done by caller */
+  /* trim magazine cache from tail */
+  ChunkLink *current = magazine_chain_prev (allocator->magazines[ix]);
+  ChunkLink *trash = NULL;
+  while (ABS (stamp - magazine_chain_uint_stamp (current)) >= allocator->config.working_set_msecs)
+    {
+      /* unlink */
+      ChunkLink *prev = magazine_chain_prev (current);
+      ChunkLink *next = magazine_chain_next (current);
+      magazine_chain_next (prev) = next;
+      magazine_chain_prev (next) = prev;
+      /* clear special fields, put on trash stack */
+      magazine_chain_next (current) = NULL;
+      magazine_chain_count (current) = NULL;
+      magazine_chain_stamp (current) = NULL;
+      magazine_chain_prev (current) = trash;
+      trash = current;
+      /* fixup list head if required */
+      if (current == allocator->magazines[ix])
+        {
+          allocator->magazines[ix] = NULL;
+          break;
+        }
+      current = prev;
+    }
+  g_mutex_unlock (allocator->magazine_mutex);
+  /* free trash */
+  if (trash)
+    {
+      const gsize chunk_size = SLAB_CHUNK_SIZE (allocator, ix);
+      g_mutex_lock (allocator->slab_mutex);
+      while (trash)
+        {
+          current = trash;
+          trash = magazine_chain_prev (current);
+          magazine_chain_prev (current) = NULL; /* clear special field */
+          while (current)
+            {
+              ChunkLink *chunk = magazine_chain_pop_head (&current);
+              slab_allocator_free_chunk (chunk_size, chunk);
+            }
+        }
+      g_mutex_unlock (allocator->slab_mutex);
+    }
+}
+
+static void
+magazine_cache_push_magazine (guint      ix,
+                              ChunkLink *magazine_chunks,
+                              gsize      count) /* must be >= MIN_MAGAZINE_SIZE */
+{
+  ChunkLink *current = magazine_chain_prepare_fields (magazine_chunks);
+  ChunkLink *next, *prev;
+  g_mutex_lock (allocator->magazine_mutex);
+  /* add magazine at head */
+  next = allocator->magazines[ix];
+  if (next)
+    prev = magazine_chain_prev (next);
+  else
+    next = prev = current;
+  magazine_chain_next (prev) = current;
+  magazine_chain_prev (next) = current;
+  magazine_chain_prev (current) = prev;
+  magazine_chain_next (current) = next;
+  magazine_chain_count (current) = (gpointer) count;
+  /* stamp magazine */
+  magazine_cache_update_stamp();
+  magazine_chain_stamp (current) = GUINT_TO_POINTER (allocator->last_stamp);
+  allocator->magazines[ix] = current;
+  /* free old magazines beyond a certain threshold */
+  magazine_cache_trim (allocator, ix, allocator->last_stamp);
+  /* g_mutex_unlock (allocator->mutex); was done by magazine_cache_trim() */
+}
+
+static ChunkLink*
+magazine_cache_pop_magazine (guint  ix,
+                             gsize *countp)
+{
+  g_mutex_lock_a (allocator->magazine_mutex, &allocator->contention_counters[ix]);
+  if (!allocator->magazines[ix])
+    {
+      guint magazine_threshold = allocator_get_magazine_threshold (allocator, ix);
+      gsize i, chunk_size = SLAB_CHUNK_SIZE (allocator, ix);
+      ChunkLink *chunk, *head;
+      g_mutex_unlock (allocator->magazine_mutex);
+      g_mutex_lock (allocator->slab_mutex);
+      head = slab_allocator_alloc_chunk (chunk_size);
+      head->data = NULL;
+      chunk = head;
+      for (i = 1; i < magazine_threshold; i++)
+        {
+          chunk->next = slab_allocator_alloc_chunk (chunk_size);
+          chunk = chunk->next;
+          chunk->data = NULL;
+        }
+      chunk->next = NULL;
+      g_mutex_unlock (allocator->slab_mutex);
+      *countp = i;
+      return head;
+    }
+  else
+    {
+      ChunkLink *current = allocator->magazines[ix];
+      ChunkLink *prev = magazine_chain_prev (current);
+      ChunkLink *next = magazine_chain_next (current);
+      /* unlink */
+      magazine_chain_next (prev) = next;
+      magazine_chain_prev (next) = prev;
+      allocator->magazines[ix] = next == current ? NULL : next;
+      g_mutex_unlock (allocator->magazine_mutex);
+      /* clear special fields and hand out */
+      *countp = (gsize) magazine_chain_count (current);
+      magazine_chain_prev (current) = NULL;
+      magazine_chain_next (current) = NULL;
+      magazine_chain_count (current) = NULL;
+      magazine_chain_stamp (current) = NULL;
+      return current;
+    }
+}
+
+/* --- thread magazines --- */
+static void
+private_thread_memory_cleanup (gpointer data)
+{
+  ThreadMemory *tmem = data;
+  const guint n_magazines = MAX_SLAB_INDEX (allocator);
+  guint ix;
+  for (ix = 0; ix < n_magazines; ix++)
+    {
+      Magazine *mags[2];
+      guint j;
+      mags[0] = &tmem->magazine1[ix];
+      mags[1] = &tmem->magazine2[ix];
+      for (j = 0; j < 2; j++)
+        {
+          Magazine *mag = mags[j];
+          if (mag->count >= MIN_MAGAZINE_SIZE)
+            magazine_cache_push_magazine (ix, mag->chunks, mag->count);
+          else
+            {
+              const gsize chunk_size = SLAB_CHUNK_SIZE (allocator, ix);
+              g_mutex_lock (allocator->slab_mutex);
+              while (mag->chunks)
+                {
+                  ChunkLink *chunk = magazine_chain_pop_head (&mag->chunks);
+                  slab_allocator_free_chunk (chunk_size, chunk);
+                }
+              g_mutex_unlock (allocator->slab_mutex);
+            }
+        }
+    }
+  g_free (tmem);
+}
+
+static void
+thread_memory_magazine1_reload (ThreadMemory *tmem,
+                                guint         ix)
+{
+  Magazine *mag = &tmem->magazine1[ix];
+  mem_assert (mag->chunks == NULL); /* ensure that we may reset mag->count */
+  mag->count = 0;
+  mag->chunks = magazine_cache_pop_magazine (ix, &mag->count);
+}
+
+static void
+thread_memory_magazine2_unload (ThreadMemory *tmem,
+                                guint         ix)
+{
+  Magazine *mag = &tmem->magazine2[ix];
+  magazine_cache_push_magazine (ix, mag->chunks, mag->count);
+  mag->chunks = NULL;
+  mag->count = 0;
+}
+
+static inline void
+thread_memory_swap_magazines (ThreadMemory *tmem,
+                              guint         ix)
+{
+  Magazine xmag = tmem->magazine1[ix];
+  tmem->magazine1[ix] = tmem->magazine2[ix];
+  tmem->magazine2[ix] = xmag;
+}
+
+static inline gboolean
+thread_memory_magazine1_is_empty (ThreadMemory *tmem,
+                                  guint         ix)
+{
+  return tmem->magazine1[ix].chunks == NULL;
+}
+
+static inline gboolean
+thread_memory_magazine2_is_full (ThreadMemory *tmem,
+                                 guint         ix)
+{
+  return tmem->magazine2[ix].count >= allocator_get_magazine_threshold (allocator, ix);
+}
+
+static inline gpointer
+thread_memory_magazine1_alloc (ThreadMemory *tmem,
+                               guint         ix)
+{
+  Magazine *mag = &tmem->magazine1[ix];
+  ChunkLink *chunk = magazine_chain_pop_head (&mag->chunks);
+  if (G_LIKELY (mag->count > 0))
+    mag->count--;
+  return chunk;
+}
+
+static inline void
+thread_memory_magazine2_free (ThreadMemory *tmem,
+                              guint         ix,
+                              gpointer      mem)
+{
+  Magazine *mag = &tmem->magazine2[ix];
+  ChunkLink *chunk = mem;
+  chunk->data = NULL;
+  chunk->next = mag->chunks;
+  mag->chunks = chunk;
+  mag->count++;
+}
+
+/* --- API functions --- */
+gpointer
+g_slice_alloc (gsize mem_size)
+{
+  gsize chunk_size;
+  gpointer mem;
+  guint acat;
+  chunk_size = P2ALIGN (mem_size);
+  acat = allocator_categorize (chunk_size);
+  if (G_LIKELY (acat == 1))     /* allocate through magazine layer */
+    {
+      ThreadMemory *tmem = thread_memory_from_self();
+      guint ix = SLAB_INDEX (allocator, chunk_size);
+      if (G_UNLIKELY (thread_memory_magazine1_is_empty (tmem, ix)))
+        {
+          thread_memory_swap_magazines (tmem, ix);
+          if (G_UNLIKELY (thread_memory_magazine1_is_empty (tmem, ix)))
+            thread_memory_magazine1_reload (tmem, ix);
+        }
+      mem = thread_memory_magazine1_alloc (tmem, ix);
+    }
+  else if (acat == 2)           /* allocate through slab allocator */
+    {
+      g_mutex_lock (allocator->slab_mutex);
+      mem = slab_allocator_alloc_chunk (chunk_size);
+      g_mutex_unlock (allocator->slab_mutex);
+    }
+  else                          /* delegate to system malloc */
+    mem = g_malloc (mem_size);
+  if (G_UNLIKELY (allocator->config.debug_blocks))
+    smc_notify_alloc (mem, mem_size);
+  return mem;
+}
+
+gpointer
+g_slice_alloc0 (gsize mem_size)
+{
+  gpointer mem = g_slice_alloc (mem_size);
+  if (mem)
+    memset (mem, 0, mem_size);
+  return mem;
+}
+
+gpointer
+g_slice_copy (gsize         mem_size,
+              gconstpointer mem_block)
+{
+  gpointer mem = g_slice_alloc (mem_size);
+  if (mem)
+    memcpy (mem, mem_block, mem_size);
+  return mem;
+}
+
+void
+g_slice_free1 (gsize    mem_size,
+               gpointer mem_block)
+{
+  gsize chunk_size = P2ALIGN (mem_size);
+  guint acat = allocator_categorize (chunk_size);
+  if (G_UNLIKELY (!mem_block))
+    return;
+  if (G_UNLIKELY (allocator->config.debug_blocks) &&
+      !smc_notify_free (mem_block, mem_size))
+    abort();
+  if (G_LIKELY (acat == 1))             /* allocate through magazine layer */
+    {
+      ThreadMemory *tmem = thread_memory_from_self();
+      guint ix = SLAB_INDEX (allocator, chunk_size);
+      if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
+        {
+          thread_memory_swap_magazines (tmem, ix);
+          if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
+            thread_memory_magazine2_unload (tmem, ix);
+        }
+      if (G_UNLIKELY (g_mem_gc_friendly))
+        memset (mem_block, 0, chunk_size);
+      thread_memory_magazine2_free (tmem, ix, mem_block);
+    }
+  else if (acat == 2)                   /* allocate through slab allocator */
+    {
+      if (G_UNLIKELY (g_mem_gc_friendly))
+        memset (mem_block, 0, chunk_size);
+      g_mutex_lock (allocator->slab_mutex);
+      slab_allocator_free_chunk (chunk_size, mem_block);
+      g_mutex_unlock (allocator->slab_mutex);
+    }
+  else                                  /* delegate to system malloc */
+    {
+      if (G_UNLIKELY (g_mem_gc_friendly))
+        memset (mem_block, 0, mem_size);
+      g_free (mem_block);
+    }
+}
+
+void
+g_slice_free_chain_with_offset (gsize    mem_size,
+                                gpointer mem_chain,
+                                gsize    next_offset)
+{
+  gpointer slice = mem_chain;
+  /* while the thread magazines and the magazine cache are implemented so that
+   * they can easily be extended to allow for free lists containing more free
+   * lists for the first level nodes, which would allow O(1) freeing in this
+   * function, the benefit of such an extension is questionable, because:
+   * - the magazine size counts will become mere lower bounds which confuses
+   *   the code adapting to lock contention;
+   * - freeing a single node to the thread magazines is very fast, so this
+   *   O(list_length) operation is multiplied by a fairly small factor;
+   * - memory usage histograms on larger applications seem to indicate that
+   *   the amount of released multi node lists is negligible in comparison
+   *   to single node releases.
+   * - the major performance bottle neck, namely g_private_get() or
+   *   g_mutex_lock()/g_mutex_unlock() has already been moved out of the
+   *   inner loop for freeing chained slices.
+   */
+  gsize chunk_size = P2ALIGN (mem_size);
+  guint acat = allocator_categorize (chunk_size);
+  if (G_LIKELY (acat == 1))             /* allocate through magazine layer */
+    {
+      ThreadMemory *tmem = thread_memory_from_self();
+      guint ix = SLAB_INDEX (allocator, chunk_size);
+      while (slice)
+        {
+          guint8 *current = slice;
+          slice = *(gpointer*) (current + next_offset);
+          if (G_UNLIKELY (allocator->config.debug_blocks) &&
+              !smc_notify_free (current, mem_size))
+            abort();
+          if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
+            {
+              thread_memory_swap_magazines (tmem, ix);
+              if (G_UNLIKELY (thread_memory_magazine2_is_full (tmem, ix)))
+                thread_memory_magazine2_unload (tmem, ix);
+            }
+          if (G_UNLIKELY (g_mem_gc_friendly))
+            memset (current, 0, chunk_size);
+          thread_memory_magazine2_free (tmem, ix, current);
+        }
+    }
+  else if (acat == 2)                   /* allocate through slab allocator */
+    {
+      g_mutex_lock (allocator->slab_mutex);
+      while (slice)
+        {
+          guint8 *current = slice;
+          slice = *(gpointer*) (current + next_offset);
+          if (G_UNLIKELY (allocator->config.debug_blocks) &&
+              !smc_notify_free (current, mem_size))
+            abort();
+          if (G_UNLIKELY (g_mem_gc_friendly))
+            memset (current, 0, chunk_size);
+          slab_allocator_free_chunk (chunk_size, current);
+        }
+      g_mutex_unlock (allocator->slab_mutex);
+    }
+  else                                  /* delegate to system malloc */
+    while (slice)
+      {
+        guint8 *current = slice;
+        slice = *(gpointer*) (current + next_offset);
+        if (G_UNLIKELY (allocator->config.debug_blocks) &&
+            !smc_notify_free (current, mem_size))
+          abort();
+        if (G_UNLIKELY (g_mem_gc_friendly))
+          memset (current, 0, mem_size);
+        g_free (current);
+      }
+}
+
+/* --- single page allocator --- */
+static void
+allocator_slab_stack_push (Allocator *allocator,
+                           guint      ix,
+                           SlabInfo  *sinfo)
+{
+  /* insert slab at slab ring head */
+  if (!allocator->slab_stack[ix])
+    {
+      sinfo->next = sinfo;
+      sinfo->prev = sinfo;
+    }
+  else
+    {
+      SlabInfo *next = allocator->slab_stack[ix], *prev = next->prev;
+      next->prev = sinfo;
+      prev->next = sinfo;
+      sinfo->next = next;
+      sinfo->prev = prev;
+    }
+  allocator->slab_stack[ix] = sinfo;
+}
+
+static gsize
+allocator_aligned_page_size (Allocator *allocator,
+                             gsize      n_bytes)
+{
+  gsize val = 1 << g_bit_storage (n_bytes - 1);
+  val = MAX (val, allocator->min_page_size);
+  return val;
+}
+
+static void
+allocator_add_slab (Allocator *allocator,
+                    guint      ix,
+                    gsize      chunk_size)
+{
+  ChunkLink *chunk;
+  SlabInfo *sinfo;
+  gsize addr, padding, n_chunks, color = 0;
+  gsize page_size = allocator_aligned_page_size (allocator, SLAB_BPAGE_SIZE (allocator, chunk_size));
+  /* allocate 1 page for the chunks and the slab */
+  gpointer aligned_memory = allocator_memalign (page_size, page_size - NATIVE_MALLOC_PADDING);
+  guint8 *mem = aligned_memory;
+  guint i;
+  if (!mem)
+    {
+      const gchar *syserr = "unknown error";
+#if HAVE_STRERROR
+      syserr = strerror (errno);
+#endif
+      mem_error ("failed to allocate %u bytes (alignment: %u): %s\n",
+                 (guint) (page_size - NATIVE_MALLOC_PADDING), (guint) page_size, syserr);
+    }
+  /* mask page adress */
+  addr = ((gsize) mem / page_size) * page_size;
+  /* assert alignment */
+  mem_assert (aligned_memory == (gpointer) addr);
+  /* basic slab info setup */
+  sinfo = (SlabInfo*) (mem + page_size - SLAB_INFO_SIZE);
+  sinfo->n_allocated = 0;
+  sinfo->chunks = NULL;
+  /* figure cache colorization */
+  n_chunks = ((guint8*) sinfo - mem) / chunk_size;
+  padding = ((guint8*) sinfo - mem) - n_chunks * chunk_size;
+  if (padding)
+    {
+      color = (allocator->color_accu * P2ALIGNMENT) % padding;
+      allocator->color_accu += allocator->config.color_increment;
+    }
+  /* add chunks to free list */
+  chunk = (ChunkLink*) (mem + color);
+  sinfo->chunks = chunk;
+  for (i = 0; i < n_chunks - 1; i++)
+    {
+      chunk->next = (ChunkLink*) ((guint8*) chunk + chunk_size);
+      chunk = chunk->next;
+    }
+  chunk->next = NULL;   /* last chunk */
+  /* add slab to slab ring */
+  allocator_slab_stack_push (allocator, ix, sinfo);
+}
+
+static gpointer
+slab_allocator_alloc_chunk (gsize chunk_size)
+{
+  ChunkLink *chunk;
+  guint ix = SLAB_INDEX (allocator, chunk_size);
+  /* ensure non-empty slab */
+  if (!allocator->slab_stack[ix] || !allocator->slab_stack[ix]->chunks)
+    allocator_add_slab (allocator, ix, chunk_size);
+  /* allocate chunk */
+  chunk = allocator->slab_stack[ix]->chunks;
+  allocator->slab_stack[ix]->chunks = chunk->next;
+  allocator->slab_stack[ix]->n_allocated++;
+  /* rotate empty slabs */
+  if (!allocator->slab_stack[ix]->chunks)
+    allocator->slab_stack[ix] = allocator->slab_stack[ix]->next;
+  return chunk;
+}
+
+static void
+slab_allocator_free_chunk (gsize    chunk_size,
+                           gpointer mem)
+{
+  ChunkLink *chunk;
+  gboolean was_empty;
+  guint ix = SLAB_INDEX (allocator, chunk_size);
+  gsize page_size = allocator_aligned_page_size (allocator, SLAB_BPAGE_SIZE (allocator, chunk_size));
+  gsize addr = ((gsize) mem / page_size) * page_size;
+  /* mask page adress */
+  guint8 *page = (guint8*) addr;
+  SlabInfo *sinfo = (SlabInfo*) (page + page_size - SLAB_INFO_SIZE);
+  /* assert valid chunk count */
+  mem_assert (sinfo->n_allocated > 0);
+  /* add chunk to free list */
+  was_empty = sinfo->chunks == NULL;
+  chunk = (ChunkLink*) mem;
+  chunk->next = sinfo->chunks;
+  sinfo->chunks = chunk;
+  sinfo->n_allocated--;
+  /* keep slab ring partially sorted, empty slabs at end */
+  if (was_empty)
+    {
+      /* unlink slab */
+      SlabInfo *next = sinfo->next, *prev = sinfo->prev;
+      next->prev = prev;
+      prev->next = next;
+      if (allocator->slab_stack[ix] == sinfo)
+        allocator->slab_stack[ix] = next == sinfo ? NULL : next;
+      /* insert slab at head */
+      allocator_slab_stack_push (allocator, ix, sinfo);
+    }
+  /* eagerly free complete unused slabs */
+  if (!sinfo->n_allocated)
+    {
+      /* unlink slab */
+      SlabInfo *next = sinfo->next, *prev = sinfo->prev;
+      next->prev = prev;
+      prev->next = next;
+      if (allocator->slab_stack[ix] == sinfo)
+        allocator->slab_stack[ix] = next == sinfo ? NULL : next;
+      /* free slab */
+      allocator_memfree (page_size, page);
+    }
+}
+
+/* --- memalign implementation --- */
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>             /* memalign() */
+#endif
+
+/* from config.h:
+ * define HAVE_POSIX_MEMALIGN           1 // if free(posix_memalign(3)) works, <stdlib.h>
+ * define HAVE_COMPLIANT_POSIX_MEMALIGN 1 // if free(posix_memalign(3)) works for sizes != 2^n, <stdlib.h>
+ * define HAVE_MEMALIGN                 1 // if free(memalign(3)) works, <malloc.h>
+ * define HAVE_VALLOC                   1 // if free(valloc(3)) works, <stdlib.h> or <malloc.h>
+ * if none is provided, we implement malloc(3)-based alloc-only page alignment
+ */
+
+#if !(HAVE_COMPLIANT_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC)
+static GTrashStack *compat_valloc_trash = NULL;
+#endif
+
+static gpointer
+allocator_memalign (gsize alignment,
+                    gsize memsize)
+{
+  gpointer aligned_memory = NULL;
+  gint err = ENOMEM;
+#if     HAVE_COMPLIANT_POSIX_MEMALIGN
+  err = posix_memalign (&aligned_memory, alignment, memsize);
+#elif   HAVE_MEMALIGN
+  errno = 0;
+  aligned_memory = memalign (alignment, memsize);
+  err = errno;
+#elif   HAVE_VALLOC
+  errno = 0;
+  aligned_memory = valloc (memsize);
+  err = errno;
+#else
+  /* simplistic non-freeing page allocator */
+  mem_assert (alignment == sys_page_size);
+  mem_assert (memsize <= sys_page_size);
+  if (!compat_valloc_trash)
+    {
+      const guint n_pages = 16;
+      guint8 *mem = malloc (n_pages * sys_page_size);
+      err = errno;
+      if (mem)
+        {
+          gint i = n_pages;
+          guint8 *amem = (guint8*) ALIGN ((gsize) mem, sys_page_size);
+          if (amem != mem)
+            i--;        /* mem wasn't page aligned */
+          while (--i >= 0)
+            g_trash_stack_push (&compat_valloc_trash, amem + i * sys_page_size);
+        }
+    }
+  aligned_memory = g_trash_stack_pop (&compat_valloc_trash);
+#endif
+  if (!aligned_memory)
+    errno = err;
+  return aligned_memory;
+}
+
+static void
+allocator_memfree (gsize    memsize,
+                   gpointer mem)
+{
+#if     HAVE_COMPLIANT_POSIX_MEMALIGN || HAVE_MEMALIGN || HAVE_VALLOC
+  free (mem);
+#else
+  mem_assert (memsize <= sys_page_size);
+  g_trash_stack_push (&compat_valloc_trash, mem);
+#endif
+}
+
+static void
+mem_error (const char *format,
+           ...)
+{
+  const char *pname;
+  va_list args;
+  /* at least, put out "MEMORY-ERROR", in case we segfault during the rest of the function */
+  fputs ("\n***MEMORY-ERROR***: ", stderr);
+  pname = g_get_prgname();
+  fprintf (stderr, "%s[%ld]: GSlice: ", pname ? pname : "", (long)getpid());
+  va_start (args, format);
+  vfprintf (stderr, format, args);
+  va_end (args);
+  fputs ("\n", stderr);
+  abort();
+  _exit (1);
+}
+
+/* --- g-slice memory checker tree --- */
+typedef size_t SmcKType;                /* key type */
+typedef size_t SmcVType;                /* value type */
+typedef struct {
+  SmcKType key;
+  SmcVType value;
+} SmcEntry;
+static void             smc_tree_insert      (SmcKType  key,
+                                              SmcVType  value);
+static gboolean         smc_tree_lookup      (SmcKType  key,
+                                              SmcVType *value_p);
+static gboolean         smc_tree_remove      (SmcKType  key);
+
+
+/* --- g-slice memory checker implementation --- */
+static void
+smc_notify_alloc (void   *pointer,
+                  size_t  size)
+{
+  size_t adress = (size_t) pointer;
+  if (pointer)
+    smc_tree_insert (adress, size);
+}
+
+#if 0
+static void
+smc_notify_ignore (void *pointer)
+{
+  size_t adress = (size_t) pointer;
+  if (pointer)
+    smc_tree_remove (adress);
+}
+#endif
+
+static int
+smc_notify_free (void   *pointer,
+                 size_t  size)
+{
+  size_t adress = (size_t) pointer;
+  SmcVType real_size;
+  gboolean found_one;
+
+  if (!pointer)
+    return 1; /* ignore */
+  found_one = smc_tree_lookup (adress, &real_size);
+  if (!found_one)
+    {
+      fprintf (stderr, "GSlice: MemChecker: attempt to release non-allocated block: %p size=%" G_GSIZE_FORMAT "\n", pointer, size);
+      return 0;
+    }
+  if (real_size != size && (real_size || size))
+    {
+      fprintf (stderr, "GSlice: MemChecker: attempt to release block with invalid size: %p size=%" G_GSIZE_FORMAT " invalid-size=%" G_GSIZE_FORMAT "\n", pointer, real_size, size);
+      return 0;
+    }
+  if (!smc_tree_remove (adress))
+    {
+      fprintf (stderr, "GSlice: MemChecker: attempt to release non-allocated block: %p size=%" G_GSIZE_FORMAT "\n", pointer, size);
+      return 0;
+    }
+  return 1; /* all fine */
+}
+
+/* --- g-slice memory checker tree implementation --- */
+#define SMC_TRUNK_COUNT     (4093 /* 16381 */)          /* prime, to distribute trunk collisions (big, allocated just once) */
+#define SMC_BRANCH_COUNT    (511)                       /* prime, to distribute branch collisions */
+#define SMC_TRUNK_EXTENT    (SMC_BRANCH_COUNT * 2039)   /* key adress space per trunk, should distribute uniformly across BRANCH_COUNT */
+#define SMC_TRUNK_HASH(k)   ((k / SMC_TRUNK_EXTENT) % SMC_TRUNK_COUNT)  /* generate new trunk hash per megabyte (roughly) */
+#define SMC_BRANCH_HASH(k)  (k % SMC_BRANCH_COUNT)
+
+typedef struct {
+  SmcEntry    *entries;
+  unsigned int n_entries;
+} SmcBranch;
+
+static SmcBranch     **smc_tree_root = NULL;
+
+static void
+smc_tree_abort (int errval)
+{
+  const char *syserr = "unknown error";
+#if HAVE_STRERROR
+  syserr = strerror (errval);
+#endif
+  mem_error ("MemChecker: failure in debugging tree: %s", syserr);
+}
+
+static inline SmcEntry*
+smc_tree_branch_grow_L (SmcBranch   *branch,
+                        unsigned int index)
+{
+  unsigned int old_size = branch->n_entries * sizeof (branch->entries[0]);
+  unsigned int new_size = old_size + sizeof (branch->entries[0]);
+  SmcEntry *entry;
+  mem_assert (index <= branch->n_entries);
+  branch->entries = (SmcEntry*) realloc (branch->entries, new_size);
+  if (!branch->entries)
+    smc_tree_abort (errno);
+  entry = branch->entries + index;
+  g_memmove (entry + 1, entry, (branch->n_entries - index) * sizeof (entry[0]));
+  branch->n_entries += 1;
+  return entry;
+}
+
+static inline SmcEntry*
+smc_tree_branch_lookup_nearest_L (SmcBranch *branch,
+                                  SmcKType   key)
+{
+  unsigned int n_nodes = branch->n_entries, offs = 0;
+  SmcEntry *check = branch->entries;
+  int cmp = 0;
+  while (offs < n_nodes)
+    {
+      unsigned int i = (offs + n_nodes) >> 1;
+      check = branch->entries + i;
+      cmp = key < check->key ? -1 : key != check->key;
+      if (cmp == 0)
+        return check;                   /* return exact match */
+      else if (cmp < 0)
+        n_nodes = i;
+      else /* (cmp > 0) */
+        offs = i + 1;
+    }
+  /* check points at last mismatch, cmp > 0 indicates greater key */
+  return cmp > 0 ? check + 1 : check;   /* return insertion position for inexact match */
+}
+
+static void
+smc_tree_insert (SmcKType key,
+                 SmcVType value)
+{
+  unsigned int ix0, ix1;
+  SmcEntry *entry;
+
+  g_mutex_lock (smc_tree_mutex);
+  ix0 = SMC_TRUNK_HASH (key);
+  ix1 = SMC_BRANCH_HASH (key);
+  if (!smc_tree_root)
+    {
+      smc_tree_root = calloc (SMC_TRUNK_COUNT, sizeof (smc_tree_root[0]));
+      if (!smc_tree_root)
+        smc_tree_abort (errno);
+    }
+  if (!smc_tree_root[ix0])
+    {
+      smc_tree_root[ix0] = calloc (SMC_BRANCH_COUNT, sizeof (smc_tree_root[0][0]));
+      if (!smc_tree_root[ix0])
+        smc_tree_abort (errno);
+    }
+  entry = smc_tree_branch_lookup_nearest_L (&smc_tree_root[ix0][ix1], key);
+  if (!entry ||                                                                         /* need create */
+      entry >= smc_tree_root[ix0][ix1].entries + smc_tree_root[ix0][ix1].n_entries ||   /* need append */
+      entry->key != key)                                                                /* need insert */
+    entry = smc_tree_branch_grow_L (&smc_tree_root[ix0][ix1], entry - smc_tree_root[ix0][ix1].entries);
+  entry->key = key;
+  entry->value = value;
+  g_mutex_unlock (smc_tree_mutex);
+}
+
+static gboolean
+smc_tree_lookup (SmcKType  key,
+                 SmcVType *value_p)
+{
+  SmcEntry *entry = NULL;
+  unsigned int ix0 = SMC_TRUNK_HASH (key), ix1 = SMC_BRANCH_HASH (key);
+  gboolean found_one = FALSE;
+  *value_p = 0;
+  g_mutex_lock (smc_tree_mutex);
+  if (smc_tree_root && smc_tree_root[ix0])
+    {
+      entry = smc_tree_branch_lookup_nearest_L (&smc_tree_root[ix0][ix1], key);
+      if (entry &&
+          entry < smc_tree_root[ix0][ix1].entries + smc_tree_root[ix0][ix1].n_entries &&
+          entry->key == key)
+        {
+          found_one = TRUE;
+          *value_p = entry->value;
+        }
+    }
+  g_mutex_unlock (smc_tree_mutex);
+  return found_one;
+}
+
+static gboolean
+smc_tree_remove (SmcKType key)
+{
+  unsigned int ix0 = SMC_TRUNK_HASH (key), ix1 = SMC_BRANCH_HASH (key);
+  gboolean found_one = FALSE;
+  g_mutex_lock (smc_tree_mutex);
+  if (smc_tree_root && smc_tree_root[ix0])
+    {
+      SmcEntry *entry = smc_tree_branch_lookup_nearest_L (&smc_tree_root[ix0][ix1], key);
+      if (entry &&
+          entry < smc_tree_root[ix0][ix1].entries + smc_tree_root[ix0][ix1].n_entries &&
+          entry->key == key)
+        {
+          unsigned int i = entry - smc_tree_root[ix0][ix1].entries;
+          smc_tree_root[ix0][ix1].n_entries -= 1;
+          g_memmove (entry, entry + 1, (smc_tree_root[ix0][ix1].n_entries - i) * sizeof (entry[0]));
+          if (!smc_tree_root[ix0][ix1].n_entries)
+            {
+              /* avoid useless pressure on the memory system */
+              free (smc_tree_root[ix0][ix1].entries);
+              smc_tree_root[ix0][ix1].entries = NULL;
+            }
+          found_one = TRUE;
+        }
+    }
+  g_mutex_unlock (smc_tree_mutex);
+  return found_one;
+}
+
+#ifdef G_ENABLE_DEBUG
+void
+g_slice_debug_tree_statistics (void)
+{
+  g_mutex_lock (smc_tree_mutex);
+  if (smc_tree_root)
+    {
+      unsigned int i, j, t = 0, o = 0, b = 0, su = 0, ex = 0, en = 4294967295u;
+      double tf, bf;
+      for (i = 0; i < SMC_TRUNK_COUNT; i++)
+        if (smc_tree_root[i])
+          {
+            t++;
+            for (j = 0; j < SMC_BRANCH_COUNT; j++)
+              if (smc_tree_root[i][j].n_entries)
+                {
+                  b++;
+                  su += smc_tree_root[i][j].n_entries;
+                  en = MIN (en, smc_tree_root[i][j].n_entries);
+                  ex = MAX (ex, smc_tree_root[i][j].n_entries);
+                }
+              else if (smc_tree_root[i][j].entries)
+                o++; /* formerly used, now empty */
+          }
+      en = b ? en : 0;
+      tf = MAX (t, 1.0); /* max(1) to be a valid divisor */
+      bf = MAX (b, 1.0); /* max(1) to be a valid divisor */
+      fprintf (stderr, "GSlice: MemChecker: %u trunks, %u branches, %u old branches\n", t, b, o);
+      fprintf (stderr, "GSlice: MemChecker: %f branches per trunk, %.2f%% utilization\n",
+               b / tf,
+               100.0 - (SMC_BRANCH_COUNT - b / tf) / (0.01 * SMC_BRANCH_COUNT));
+      fprintf (stderr, "GSlice: MemChecker: %f entries per branch, %u minimum, %u maximum\n",
+               su / bf, en, ex);
+    }
+  else
+    fprintf (stderr, "GSlice: MemChecker: root=NULL\n");
+  g_mutex_unlock (smc_tree_mutex);
+  
+  /* sample statistics (beast + GSLice + 24h scripted core & GUI activity):
+   *  PID %CPU %MEM   VSZ  RSS      COMMAND
+   * 8887 30.3 45.8 456068 414856   beast-0.7.1 empty.bse
+   * $ cat /proc/8887/statm # total-program-size resident-set-size shared-pages text/code data/stack library dirty-pages
+   * 114017 103714 2354 344 0 108676 0
+   * $ cat /proc/8887/status 
+   * Name:   beast-0.7.1
+   * VmSize:   456068 kB
+   * VmLck:         0 kB
+   * VmRSS:    414856 kB
+   * VmData:   434620 kB
+   * VmStk:        84 kB
+   * VmExe:      1376 kB
+   * VmLib:     13036 kB
+   * VmPTE:       456 kB
+   * Threads:        3
+   * (gdb) print g_slice_debug_tree_statistics ()
+   * GSlice: MemChecker: 422 trunks, 213068 branches, 0 old branches
+   * GSlice: MemChecker: 504.900474 branches per trunk, 98.81% utilization
+   * GSlice: MemChecker: 4.965039 entries per branch, 1 minimum, 37 maximum
+   */
+}
+#endif /* G_ENABLE_DEBUG */
+
+#define __G_SLICE_C__
+#include "galiasdef.c"
diff --git a/glib/gslice.h b/glib/gslice.h
new file mode 100644
index 0000000..f9cc644
--- /dev/null
+++ b/glib/gslice.h
@@ -0,0 +1,90 @@
+/* GLIB sliced memory - fast threaded memory chunk allocator
+ * Copyright (C) 2005 Tim Janik
+ *
+ * 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 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_SLICE_H__
+#define __G_SLICE_H__
+
+#ifndef __G_MEM_H__
+#error Include <glib.h> instead of <gslice.h>
+#endif
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/* slices - fast allocation/release of small memory blocks
+ */
+gpointer g_slice_alloc          	(gsize	       block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_slice_alloc0         	(gsize         block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+gpointer g_slice_copy                   (gsize         block_size,
+                                         gconstpointer mem_block) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
+void     g_slice_free1          	(gsize         block_size,
+					 gpointer      mem_block);
+void     g_slice_free_chain_with_offset (gsize         block_size,
+					 gpointer      mem_chain,
+					 gsize         next_offset);
+#define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
+#define  g_slice_new0(type)     ((type*) g_slice_alloc0 (sizeof (type)))
+/* MemoryBlockType *
+ *       g_slice_dup                    (MemoryBlockType,
+ *	                                 MemoryBlockType *mem_block);
+ *       g_slice_free                   (MemoryBlockType,
+ *	                                 MemoryBlockType *mem_block);
+ *       g_slice_free_chain             (MemoryBlockType,
+ *                                       MemoryBlockType *first_chain_block,
+ *                                       memory_block_next_field);
+ * pseudo prototypes for the macro
+ * definitions following below.
+ */
+
+/* we go through extra hoops to ensure type safety */
+#define g_slice_dup(type, mem)                                  \
+  (1 ? (type*) g_slice_copy (sizeof (type), (mem))              \
+     : ((void) ((type*) 0 == (mem)), (type*) 0))
+#define g_slice_free(type, mem)				do {	\
+  if (1) g_slice_free1 (sizeof (type), (mem));			\
+  else   (void) ((type*) 0 == (mem)); 				\
+} while (0)
+#define g_slice_free_chain(type, mem_chain, next)	do {	\
+  if (1) g_slice_free_chain_with_offset (sizeof (type),		\
+                 (mem_chain), G_STRUCT_OFFSET (type, next)); 	\
+  else   (void) ((type*) 0 == (mem_chain));			\
+} while (0)
+
+
+/* --- internal debugging API --- */
+typedef enum {
+  G_SLICE_CONFIG_ALWAYS_MALLOC = 1,
+  G_SLICE_CONFIG_BYPASS_MAGAZINES,
+  G_SLICE_CONFIG_WORKING_SET_MSECS,
+  G_SLICE_CONFIG_COLOR_INCREMENT,
+  G_SLICE_CONFIG_CHUNK_SIZES,
+  G_SLICE_CONFIG_CONTENTION_COUNTER
+} GSliceConfig;
+void     g_slice_set_config	   (GSliceConfig ckey, gint64 value);
+gint64   g_slice_get_config	   (GSliceConfig ckey);
+gint64*  g_slice_get_config_state  (GSliceConfig ckey, gint64 address, guint *n_values);
+
+G_END_DECLS
+
+#endif /* __G_SLICE_H__ */
diff --git a/glib/gslist.c b/glib/gslist.c
new file mode 100644
index 0000000..47c5041
--- /dev/null
+++ b/glib/gslist.c
@@ -0,0 +1,948 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include "glib.h"
+#include "galias.h"
+
+
+void g_slist_push_allocator (gpointer dummy) { /* present for binary compat only */ }
+void g_slist_pop_allocator  (void)           { /* present for binary compat only */ }
+
+#define _g_slist_alloc0()       g_slice_new0 (GSList)
+#define _g_slist_alloc()        g_slice_new (GSList)
+#define _g_slist_free1(slist)   g_slice_free (GSList, slist)
+
+GSList*
+g_slist_alloc (void)
+{
+  return _g_slist_alloc0 ();
+}
+
+/**
+ * g_slist_free:
+ * @list: a #GSList
+ *
+ * Frees all of the memory used by a #GSList.
+ * The freed elements are returned to the slice allocator.
+ */
+void
+g_slist_free (GSList *list)
+{
+  g_slice_free_chain (GSList, list, next);
+}
+
+/**
+ * g_slist_free_1:
+ * @list: a #GSList element
+ * 
+ * Frees one #GSList element.
+ * It is usually used after g_slist_remove_link().
+ */
+void
+g_slist_free_1 (GSList *list)
+{
+  _g_slist_free1 (list);
+}
+
+/**
+ * g_slist_append:
+ * @list: a #GSList
+ * @data: the data for the new element
+ *
+ * Adds a new element on to the end of the list.
+ *
+ * <note><para>
+ * The return value is the new start of the list, which may 
+ * have changed, so make sure you store the new value.
+ * </para></note>
+ *
+ * <note><para>
+ * Note that g_slist_append() has to traverse the entire list 
+ * to find the end, which is inefficient when adding multiple 
+ * elements. A common idiom to avoid the inefficiency is to prepend 
+ * the elements and reverse the list when all elements have been added.
+ * </para></note>
+ *
+ * |[
+ * /&ast; Notice that these are initialized to the empty list. &ast;/
+ * GSList *list = NULL, *number_list = NULL;
+ *
+ * /&ast; This is a list of strings. &ast;/
+ * list = g_slist_append (list, "first");
+ * list = g_slist_append (list, "second");
+ *
+ * /&ast; This is a list of integers. &ast;/
+ * number_list = g_slist_append (number_list, GINT_TO_POINTER (27));
+ * number_list = g_slist_append (number_list, GINT_TO_POINTER (14));
+ * ]|
+ *
+ * Returns: the new start of the #GSList
+ */
+GSList*
+g_slist_append (GSList   *list,
+		gpointer  data)
+{
+  GSList *new_list;
+  GSList *last;
+
+  new_list = _g_slist_alloc ();
+  new_list->data = data;
+  new_list->next = NULL;
+
+  if (list)
+    {
+      last = g_slist_last (list);
+      /* g_assert (last != NULL); */
+      last->next = new_list;
+
+      return list;
+    }
+  else
+    return new_list;
+}
+
+/**
+ * g_slist_prepend:
+ * @list: a #GSList
+ * @data: the data for the new element
+ *
+ * Adds a new element on to the start of the list.
+ *
+ * <note><para>
+ * The return value is the new start of the list, which 
+ * may have changed, so make sure you store the new value.
+ * </para></note>
+ *
+ * |[
+ * /&ast; Notice that it is initialized to the empty list. &ast;/
+ * GSList *list = NULL;
+ * list = g_slist_prepend (list, "last");
+ * list = g_slist_prepend (list, "first");
+ * ]|
+ *
+ * Returns: the new start of the #GSList
+ */
+GSList*
+g_slist_prepend (GSList   *list,
+		 gpointer  data)
+{
+  GSList *new_list;
+
+  new_list = _g_slist_alloc ();
+  new_list->data = data;
+  new_list->next = list;
+
+  return new_list;
+}
+
+/**
+ * g_slist_insert:
+ * @list: a #GSList
+ * @data: the data for the new element
+ * @position: the position to insert the element. 
+ *     If this is negative, or is larger than the number 
+ *     of elements in the list, the new element is added on
+ *     to the end of the list.
+ *
+ * Inserts a new element into the list at the given position.
+ *
+ * Returns: the new start of the #GSList
+ */
+GSList*
+g_slist_insert (GSList   *list,
+		gpointer  data,
+		gint      position)
+{
+  GSList *prev_list;
+  GSList *tmp_list;
+  GSList *new_list;
+
+  if (position < 0)
+    return g_slist_append (list, data);
+  else if (position == 0)
+    return g_slist_prepend (list, data);
+
+  new_list = _g_slist_alloc ();
+  new_list->data = data;
+
+  if (!list)
+    {
+      new_list->next = NULL;
+      return new_list;
+    }
+
+  prev_list = NULL;
+  tmp_list = list;
+
+  while ((position-- > 0) && tmp_list)
+    {
+      prev_list = tmp_list;
+      tmp_list = tmp_list->next;
+    }
+
+  if (prev_list)
+    {
+      new_list->next = prev_list->next;
+      prev_list->next = new_list;
+    }
+  else
+    {
+      new_list->next = list;
+      list = new_list;
+    }
+
+  return list;
+}
+
+/**
+ * g_slist_insert_before:
+ * @slist: a #GSList
+ * @sibling: node to insert @data before
+ * @data: data to put in the newly-inserted node
+ *
+ * Inserts a node before @sibling containing @data. 
+ * 
+ * Returns: the new head of the list.
+ */
+GSList*
+g_slist_insert_before (GSList  *slist,
+		       GSList  *sibling,
+		       gpointer data)
+{
+  if (!slist)
+    {
+      slist = _g_slist_alloc ();
+      slist->data = data;
+      slist->next = NULL;
+      g_return_val_if_fail (sibling == NULL, slist);
+      return slist;
+    }
+  else
+    {
+      GSList *node, *last = NULL;
+
+      for (node = slist; node; last = node, node = last->next)
+	if (node == sibling)
+	  break;
+      if (!last)
+	{
+	  node = _g_slist_alloc ();
+	  node->data = data;
+	  node->next = slist;
+
+	  return node;
+	}
+      else
+	{
+	  node = _g_slist_alloc ();
+	  node->data = data;
+	  node->next = last->next;
+	  last->next = node;
+
+	  return slist;
+	}
+    }
+}
+
+/**
+ * g_slist_concat:
+ * @list1: a #GSList
+ * @list2: the #GSList to add to the end of the first #GSList
+ *
+ * Adds the second #GSList onto the end of the first #GSList.
+ * Note that the elements of the second #GSList are not copied.
+ * They are used directly.
+ *
+ * Returns: the start of the new #GSList
+ */
+GSList *
+g_slist_concat (GSList *list1, GSList *list2)
+{
+  if (list2)
+    {
+      if (list1)
+	g_slist_last (list1)->next = list2;
+      else
+	list1 = list2;
+    }
+
+  return list1;
+}
+
+/**
+ * g_slist_remove:
+ * @list: a #GSList
+ * @data: the data of the element to remove
+ *
+ * Removes an element from a #GSList.
+ * If two elements contain the same data, only the first is removed.
+ * If none of the elements contain the data, the #GSList is unchanged.
+ *
+ * Returns: the new start of the #GSList
+ */
+GSList*
+g_slist_remove (GSList        *list,
+		gconstpointer  data)
+{
+  GSList *tmp, *prev = NULL;
+
+  tmp = list;
+  while (tmp)
+    {
+      if (tmp->data == data)
+	{
+	  if (prev)
+	    prev->next = tmp->next;
+	  else
+	    list = tmp->next;
+
+	  g_slist_free_1 (tmp);
+	  break;
+	}
+      prev = tmp;
+      tmp = prev->next;
+    }
+
+  return list;
+}
+
+/**
+ * g_slist_remove_all:
+ * @list: a #GSList
+ * @data: data to remove
+ *
+ * Removes all list nodes with data equal to @data. 
+ * Returns the new head of the list. Contrast with 
+ * g_slist_remove() which removes only the first node 
+ * matching the given data.
+ *
+ * Returns: new head of @list
+ */
+GSList*
+g_slist_remove_all (GSList        *list,
+		    gconstpointer  data)
+{
+  GSList *tmp, *prev = NULL;
+
+  tmp = list;
+  while (tmp)
+    {
+      if (tmp->data == data)
+	{
+	  GSList *next = tmp->next;
+
+	  if (prev)
+	    prev->next = next;
+	  else
+	    list = next;
+	  
+	  g_slist_free_1 (tmp);
+	  tmp = next;
+	}
+      else
+	{
+	  prev = tmp;
+	  tmp = prev->next;
+	}
+    }
+
+  return list;
+}
+
+static inline GSList*
+_g_slist_remove_link (GSList *list,
+		      GSList *link)
+{
+  GSList *tmp;
+  GSList *prev;
+
+  prev = NULL;
+  tmp = list;
+
+  while (tmp)
+    {
+      if (tmp == link)
+	{
+	  if (prev)
+	    prev->next = tmp->next;
+	  if (list == tmp)
+	    list = list->next;
+
+	  tmp->next = NULL;
+	  break;
+	}
+
+      prev = tmp;
+      tmp = tmp->next;
+    }
+
+  return list;
+}
+
+/**
+ * g_slist_remove_link:
+ * @list: a #GSList
+ * @link_: an element in the #GSList
+ *
+ * Removes an element from a #GSList, without 
+ * freeing the element. The removed element's next 
+ * link is set to %NULL, so that it becomes a
+ * self-contained list with one element.
+ *
+ * Returns: the new start of the #GSList, without the element
+ */
+GSList* 
+g_slist_remove_link (GSList *list,
+		     GSList *link_)
+{
+  return _g_slist_remove_link (list, link_);
+}
+
+/**
+ * g_slist_delete_link:
+ * @list: a #GSList
+ * @link_: node to delete
+ *
+ * Removes the node link_ from the list and frees it. 
+ * Compare this to g_slist_remove_link() which removes the node 
+ * without freeing it.
+ *
+ * Returns: the new head of @list
+ */
+GSList*
+g_slist_delete_link (GSList *list,
+		     GSList *link_)
+{
+  list = _g_slist_remove_link (list, link_);
+  _g_slist_free1 (link_);
+
+  return list;
+}
+
+/**
+ * g_slist_copy:
+ * @list: a #GSList
+ * 
+ * Copies a #GSList.
+ * 
+ * <note><para>
+ * Note that this is a "shallow" copy. If the list elements 
+ * consist of pointers to data, the pointers are copied but 
+ * the actual data isn't.
+ * </para></note>
+ *
+ * Returns: a copy of @list
+ */
+GSList*
+g_slist_copy (GSList *list)
+{
+  GSList *new_list = NULL;
+
+  if (list)
+    {
+      GSList *last;
+
+      new_list = _g_slist_alloc ();
+      new_list->data = list->data;
+      last = new_list;
+      list = list->next;
+      while (list)
+	{
+	  last->next = _g_slist_alloc ();
+	  last = last->next;
+	  last->data = list->data;
+	  list = list->next;
+	}
+      last->next = NULL;
+    }
+
+  return new_list;
+}
+
+/**
+ * g_slist_reverse:
+ * @list: a #GSList
+ *
+ * Reverses a #GSList.
+ *
+ * Returns: the start of the reversed #GSList
+ */
+GSList*
+g_slist_reverse (GSList *list)
+{
+  GSList *prev = NULL;
+  
+  while (list)
+    {
+      GSList *next = list->next;
+
+      list->next = prev;
+      
+      prev = list;
+      list = next;
+    }
+  
+  return prev;
+}
+
+/**
+ * g_slist_nth:
+ * @list: a #GSList
+ * @n: the position of the element, counting from 0
+ *
+ * Gets the element at the given position in a #GSList.
+ *
+ * Returns: the element, or %NULL if the position is off 
+ *     the end of the #GSList
+ */
+GSList*
+g_slist_nth (GSList *list,
+	     guint   n)
+{
+  while (n-- > 0 && list)
+    list = list->next;
+
+  return list;
+}
+
+/**
+ * g_slist_nth_data:
+ * @list: a #GSList
+ * @n: the position of the element
+ *
+ * Gets the data of the element at the given position.
+ *
+ * Returns: the element's data, or %NULL if the position 
+ *     is off the end of the #GSList
+ */
+gpointer
+g_slist_nth_data (GSList   *list,
+		  guint     n)
+{
+  while (n-- > 0 && list)
+    list = list->next;
+
+  return list ? list->data : NULL;
+}
+
+/**
+ * g_slist_find:
+ * @list: a #GSList
+ * @data: the element data to find
+ *
+ * Finds the element in a #GSList which 
+ * contains the given data.
+ *
+ * Returns: the found #GSList element, 
+ *     or %NULL if it is not found
+ */
+GSList*
+g_slist_find (GSList        *list,
+	      gconstpointer  data)
+{
+  while (list)
+    {
+      if (list->data == data)
+	break;
+      list = list->next;
+    }
+
+  return list;
+}
+
+
+/**
+ * g_slist_find_custom:
+ * @list: a #GSList
+ * @data: user data passed to the function
+ * @func: the function to call for each element. 
+ *     It should return 0 when the desired element is found
+ *
+ * Finds an element in a #GSList, using a supplied function to 
+ * find the desired element. It iterates over the list, calling 
+ * the given function which should return 0 when the desired 
+ * element is found. The function takes two #gconstpointer arguments, 
+ * the #GSList element's data as the first argument and the 
+ * given user data.
+ *
+ * Returns: the found #GSList element, or %NULL if it is not found
+ */
+GSList*
+g_slist_find_custom (GSList        *list,
+		     gconstpointer  data,
+		     GCompareFunc   func)
+{
+  g_return_val_if_fail (func != NULL, list);
+
+  while (list)
+    {
+      if (! func (list->data, data))
+	return list;
+      list = list->next;
+    }
+
+  return NULL;
+}
+
+/**
+ * g_slist_position:
+ * @list: a #GSList
+ * @llink: an element in the #GSList
+ *
+ * Gets the position of the given element 
+ * in the #GSList (starting from 0).
+ *
+ * Returns: the position of the element in the #GSList, 
+ *     or -1 if the element is not found
+ */
+gint
+g_slist_position (GSList *list,
+		  GSList *llink)
+{
+  gint i;
+
+  i = 0;
+  while (list)
+    {
+      if (list == llink)
+	return i;
+      i++;
+      list = list->next;
+    }
+
+  return -1;
+}
+
+/**
+ * g_slist_index:
+ * @list: a #GSList
+ * @data: the data to find
+ *
+ * Gets the position of the element containing 
+ * the given data (starting from 0).
+ *
+ * Returns: the index of the element containing the data, 
+ *     or -1 if the data is not found
+ */
+gint
+g_slist_index (GSList        *list,
+	       gconstpointer  data)
+{
+  gint i;
+
+  i = 0;
+  while (list)
+    {
+      if (list->data == data)
+	return i;
+      i++;
+      list = list->next;
+    }
+
+  return -1;
+}
+
+/**
+ * g_slist_last:
+ * @list: a #GSList 
+ *
+ * Gets the last element in a #GSList.
+ *  
+ * <note><para>
+ * This function iterates over the whole list.
+ * </para></note>
+ *
+ * Returns: the last element in the #GSList, 
+ *     or %NULL if the #GSList has no elements
+ */
+GSList*
+g_slist_last (GSList *list)
+{
+  if (list)
+    {
+      while (list->next)
+	list = list->next;
+    }
+
+  return list;
+}
+
+/**
+ * g_slist_length:
+ * @list: a #GSList
+ *
+ * Gets the number of elements in a #GSList.
+ *
+ * <note><para>
+ * This function iterates over the whole list to 
+ * count its elements.
+ * </para></note>
+ *
+ * Returns: the number of elements in the #GSList
+ */
+guint
+g_slist_length (GSList *list)
+{
+  guint length;
+
+  length = 0;
+  while (list)
+    {
+      length++;
+      list = list->next;
+    }
+
+  return length;
+}
+
+/**
+ * g_slist_foreach:
+ * @list: a #GSList
+ * @func: the function to call with each element's data
+ * @user_data: user data to pass to the function
+ *
+ * Calls a function for each element of a #GSList.
+ */
+void
+g_slist_foreach (GSList   *list,
+		 GFunc     func,
+		 gpointer  user_data)
+{
+  while (list)
+    {
+      GSList *next = list->next;
+      (*func) (list->data, user_data);
+      list = next;
+    }
+}
+
+static GSList*
+g_slist_insert_sorted_real (GSList   *list,
+			    gpointer  data,
+			    GFunc     func,
+			    gpointer  user_data)
+{
+  GSList *tmp_list = list;
+  GSList *prev_list = NULL;
+  GSList *new_list;
+  gint cmp;
+ 
+  g_return_val_if_fail (func != NULL, list);
+
+  if (!list)
+    {
+      new_list = _g_slist_alloc ();
+      new_list->data = data;
+      new_list->next = NULL;
+      return new_list;
+    }
+ 
+  cmp = ((GCompareDataFunc) func) (data, tmp_list->data, user_data);
+ 
+  while ((tmp_list->next) && (cmp > 0))
+    {
+      prev_list = tmp_list;
+      tmp_list = tmp_list->next;
+
+      cmp = ((GCompareDataFunc) func) (data, tmp_list->data, user_data);
+    }
+
+  new_list = _g_slist_alloc ();
+  new_list->data = data;
+
+  if ((!tmp_list->next) && (cmp > 0))
+    {
+      tmp_list->next = new_list;
+      new_list->next = NULL;
+      return list;
+    }
+  
+  if (prev_list)
+    {
+      prev_list->next = new_list;
+      new_list->next = tmp_list;
+      return list;
+    }
+  else
+    {
+      new_list->next = list;
+      return new_list;
+    }
+}
+
+/**
+ * g_slist_insert_sorted:
+ * @list: a #GSList
+ * @data: the data for the new element
+ * @func: the function to compare elements in the list. 
+ *     It should return a number > 0 if the first parameter 
+ *     comes after the second parameter in the sort order.
+ *
+ * Inserts a new element into the list, using the given 
+ * comparison function to determine its position.
+ *
+ * Returns: the new start of the #GSList
+ */
+GSList*
+g_slist_insert_sorted (GSList       *list,
+                       gpointer      data,
+                       GCompareFunc  func)
+{
+  return g_slist_insert_sorted_real (list, data, (GFunc) func, NULL);
+}
+
+/**
+ * g_slist_insert_sorted_with_data:
+ * @list: a #GSList
+ * @data: the data for the new element
+ * @func: the function to compare elements in the list. 
+ *     It should return a number > 0 if the first parameter 
+ *     comes after the second parameter in the sort order.
+ * @user_data: data to pass to comparison function
+ *
+ * Inserts a new element into the list, using the given 
+ * comparison function to determine its position.
+ *
+ * Returns: the new start of the #GSList
+ *
+ * Since: 2.10
+ */
+GSList*
+g_slist_insert_sorted_with_data (GSList           *list,
+				 gpointer          data,
+				 GCompareDataFunc  func,
+				 gpointer          user_data)
+{
+  return g_slist_insert_sorted_real (list, data, (GFunc) func, user_data);
+}
+
+static GSList *
+g_slist_sort_merge (GSList   *l1, 
+		    GSList   *l2,
+		    GFunc     compare_func,
+		    gpointer  user_data)
+{
+  GSList list, *l;
+  gint cmp;
+
+  l=&list;
+
+  while (l1 && l2)
+    {
+      cmp = ((GCompareDataFunc) compare_func) (l1->data, l2->data, user_data);
+
+      if (cmp <= 0)
+        {
+	  l=l->next=l1;
+	  l1=l1->next;
+        } 
+      else 
+	{
+	  l=l->next=l2;
+	  l2=l2->next;
+        }
+    }
+  l->next= l1 ? l1 : l2;
+  
+  return list.next;
+}
+
+static GSList *
+g_slist_sort_real (GSList   *list,
+		   GFunc     compare_func,
+		   gpointer  user_data)
+{
+  GSList *l1, *l2;
+
+  if (!list) 
+    return NULL;
+  if (!list->next) 
+    return list;
+
+  l1 = list; 
+  l2 = list->next;
+
+  while ((l2 = l2->next) != NULL)
+    {
+      if ((l2 = l2->next) == NULL) 
+	break;
+      l1=l1->next;
+    }
+  l2 = l1->next; 
+  l1->next = NULL;
+
+  return g_slist_sort_merge (g_slist_sort_real (list, compare_func, user_data),
+			     g_slist_sort_real (l2, compare_func, user_data),
+			     compare_func,
+			     user_data);
+}
+
+/**
+ * g_slist_sort:
+ * @list: a #GSList
+ * @compare_func: the comparison function used to sort the #GSList.
+ *     This function is passed the data from 2 elements of the #GSList 
+ *     and should return 0 if they are equal, a negative value if the 
+ *     first element comes before the second, or a positive value if 
+ *     the first element comes after the second.
+ *
+ * Sorts a #GSList using the given comparison function.
+ *
+ * Returns: the start of the sorted #GSList
+ */
+GSList *
+g_slist_sort (GSList       *list,
+	      GCompareFunc  compare_func)
+{
+  return g_slist_sort_real (list, (GFunc) compare_func, NULL);
+}
+
+/**
+ * g_slist_sort_with_data:
+ * @list: a #GSList
+ * @compare_func: comparison function
+ * @user_data: data to pass to comparison function
+ *
+ * Like g_slist_sort(), but the sort function accepts a user data argument.
+ *
+ * Returns: new head of the list
+ */
+GSList *
+g_slist_sort_with_data (GSList           *list,
+			GCompareDataFunc  compare_func,
+			gpointer          user_data)
+{
+  return g_slist_sort_real (list, (GFunc) compare_func, user_data);
+}
+
+#define __G_SLIST_C__
+#include "galiasdef.c"
diff --git a/glib/gslist.h b/glib/gslist.h
new file mode 100644
index 0000000..8b01faf
--- /dev/null
+++ b/glib/gslist.h
@@ -0,0 +1,114 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_SLIST_H__
+#define __G_SLIST_H__
+
+#include <glib/gmem.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GSList GSList;
+
+struct _GSList
+{
+  gpointer data;
+  GSList *next;
+};
+
+/* Singly linked lists
+ */
+GSList*  g_slist_alloc                   (void) G_GNUC_WARN_UNUSED_RESULT;
+void     g_slist_free                    (GSList           *list);
+void     g_slist_free_1                  (GSList           *list);
+#define	 g_slist_free1		         g_slist_free_1
+GSList*  g_slist_append                  (GSList           *list,
+					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_prepend                 (GSList           *list,
+					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_insert                  (GSList           *list,
+					  gpointer          data,
+					  gint              position) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_insert_sorted           (GSList           *list,
+					  gpointer          data,
+					  GCompareFunc      func) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_insert_sorted_with_data (GSList           *list,
+					  gpointer          data,
+					  GCompareDataFunc  func,
+					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_insert_before           (GSList           *slist,
+					  GSList           *sibling,
+					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_concat                  (GSList           *list1,
+					  GSList           *list2) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_remove                  (GSList           *list,
+					  gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_remove_all              (GSList           *list,
+					  gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_remove_link             (GSList           *list,
+					  GSList           *link_) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_delete_link             (GSList           *list,
+					  GSList           *link_) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_reverse                 (GSList           *list) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_copy                    (GSList           *list) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_nth                     (GSList           *list,
+					  guint             n);
+GSList*  g_slist_find                    (GSList           *list,
+					  gconstpointer     data);
+GSList*  g_slist_find_custom             (GSList           *list,
+					  gconstpointer     data,
+					  GCompareFunc      func);
+gint     g_slist_position                (GSList           *list,
+					  GSList           *llink);
+gint     g_slist_index                   (GSList           *list,
+					  gconstpointer     data);
+GSList*  g_slist_last                    (GSList           *list);
+guint    g_slist_length                  (GSList           *list);
+void     g_slist_foreach                 (GSList           *list,
+					  GFunc             func,
+					  gpointer          user_data);
+GSList*  g_slist_sort                    (GSList           *list,
+					  GCompareFunc      compare_func) G_GNUC_WARN_UNUSED_RESULT;
+GSList*  g_slist_sort_with_data          (GSList           *list,
+					  GCompareDataFunc  compare_func,
+					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
+gpointer g_slist_nth_data                (GSList           *list,
+					  guint             n);
+
+#define  g_slist_next(slist)	         ((slist) ? (((GSList *)(slist))->next) : NULL)
+
+#ifndef G_DISABLE_DEPRECATED
+void     g_slist_push_allocator          (gpointer	   dummy);
+void     g_slist_pop_allocator           (void);
+#endif
+
+G_END_DECLS
+
+#endif /* __G_SLIST_H__ */
diff --git a/glib/gspawn.h b/glib/gspawn.h
new file mode 100644
index 0000000..9836b34
--- /dev/null
+++ b/glib/gspawn.h
@@ -0,0 +1,139 @@
+/* gspawn.h - Process launching
+ *
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * GLib is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not, write
+ * to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_SPAWN_H__
+#define __G_SPAWN_H__
+
+#include <glib/gerror.h>
+
+G_BEGIN_DECLS
+
+/* I'm not sure I remember our proposed naming convention here. */
+#define G_SPAWN_ERROR g_spawn_error_quark ()
+
+typedef enum
+{
+  G_SPAWN_ERROR_FORK,   /* fork failed due to lack of memory */
+  G_SPAWN_ERROR_READ,   /* read or select on pipes failed */
+  G_SPAWN_ERROR_CHDIR,  /* changing to working dir failed */
+  G_SPAWN_ERROR_ACCES,  /* execv() returned EACCES */
+  G_SPAWN_ERROR_PERM,   /* execv() returned EPERM */
+  G_SPAWN_ERROR_2BIG,   /* execv() returned E2BIG */
+  G_SPAWN_ERROR_NOEXEC, /* execv() returned ENOEXEC */
+  G_SPAWN_ERROR_NAMETOOLONG, /* ""  "" ENAMETOOLONG */
+  G_SPAWN_ERROR_NOENT,       /* ""  "" ENOENT */
+  G_SPAWN_ERROR_NOMEM,       /* ""  "" ENOMEM */
+  G_SPAWN_ERROR_NOTDIR,      /* ""  "" ENOTDIR */
+  G_SPAWN_ERROR_LOOP,        /* ""  "" ELOOP   */
+  G_SPAWN_ERROR_TXTBUSY,     /* ""  "" ETXTBUSY */
+  G_SPAWN_ERROR_IO,          /* ""  "" EIO */
+  G_SPAWN_ERROR_NFILE,       /* ""  "" ENFILE */
+  G_SPAWN_ERROR_MFILE,       /* ""  "" EMFLE */
+  G_SPAWN_ERROR_INVAL,       /* ""  "" EINVAL */
+  G_SPAWN_ERROR_ISDIR,       /* ""  "" EISDIR */
+  G_SPAWN_ERROR_LIBBAD,      /* ""  "" ELIBBAD */
+  G_SPAWN_ERROR_FAILED       /* other fatal failure, error->message
+                              * should explain
+                              */
+} GSpawnError;
+
+typedef void (* GSpawnChildSetupFunc) (gpointer user_data);
+
+typedef enum
+{
+  G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0,
+  G_SPAWN_DO_NOT_REAP_CHILD      = 1 << 1,
+  /* look for argv[0] in the path i.e. use execvp() */
+  G_SPAWN_SEARCH_PATH            = 1 << 2,
+  /* Dump output to /dev/null */
+  G_SPAWN_STDOUT_TO_DEV_NULL     = 1 << 3,
+  G_SPAWN_STDERR_TO_DEV_NULL     = 1 << 4,
+  G_SPAWN_CHILD_INHERITS_STDIN   = 1 << 5,
+  G_SPAWN_FILE_AND_ARGV_ZERO     = 1 << 6
+} GSpawnFlags;
+
+GQuark g_spawn_error_quark (void);
+
+#ifdef G_OS_WIN32
+#define g_spawn_async g_spawn_async_utf8
+#define g_spawn_async_with_pipes g_spawn_async_with_pipes_utf8
+#define g_spawn_sync g_spawn_sync_utf8
+#define g_spawn_command_line_sync g_spawn_command_line_sync_utf8
+#define g_spawn_command_line_async g_spawn_command_line_async_utf8
+#endif
+
+gboolean g_spawn_async (const gchar           *working_directory,
+                        gchar                **argv,
+                        gchar                **envp,
+                        GSpawnFlags            flags,
+                        GSpawnChildSetupFunc   child_setup,
+                        gpointer               user_data,
+                        GPid                  *child_pid,
+                        GError               **error);
+
+
+/* Opens pipes for non-NULL standard_output, standard_input, standard_error,
+ * and returns the parent's end of the pipes.
+ */
+gboolean g_spawn_async_with_pipes (const gchar          *working_directory,
+                                   gchar               **argv,
+                                   gchar               **envp,
+                                   GSpawnFlags           flags,
+                                   GSpawnChildSetupFunc  child_setup,
+                                   gpointer              user_data,
+                                   GPid                 *child_pid,
+                                   gint                 *standard_input,
+                                   gint                 *standard_output,
+                                   gint                 *standard_error,
+                                   GError              **error);
+
+
+/* If standard_output or standard_error are non-NULL, the full
+ * standard output or error of the command will be placed there.
+ */
+
+gboolean g_spawn_sync         (const gchar          *working_directory,
+                               gchar               **argv,
+                               gchar               **envp,
+                               GSpawnFlags           flags,
+                               GSpawnChildSetupFunc  child_setup,
+                               gpointer              user_data,
+                               gchar               **standard_output,
+                               gchar               **standard_error,
+                               gint                 *exit_status,
+                               GError              **error);
+
+gboolean g_spawn_command_line_sync  (const gchar          *command_line,
+                                     gchar               **standard_output,
+                                     gchar               **standard_error,
+                                     gint                 *exit_status,
+                                     GError              **error);
+gboolean g_spawn_command_line_async (const gchar          *command_line,
+                                     GError              **error);
+
+void g_spawn_close_pid (GPid pid);
+
+G_END_DECLS
+
+#endif /* __G_SPAWN_H__ */
diff --git a/glib/gstdio.c b/glib/gstdio.c
new file mode 100644
index 0000000..4971d9b
--- /dev/null
+++ b/glib/gstdio.c
@@ -0,0 +1,811 @@
+/* gstdio.c - wrappers for C library functions
+ *
+ * Copyright 2004 Tor Lillqvist
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#define G_STDIO_NO_WRAP_ON_UNIX
+
+#include "glib.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <errno.h>
+#include <wchar.h>
+#include <direct.h>
+#include <io.h>
+#include <sys/utime.h>
+#else
+#include <utime.h>
+#endif
+
+#include "gstdio.h"
+
+#include "galias.h"
+
+#if !defined (G_OS_UNIX) && !defined (G_OS_WIN32) && !defined (G_OS_BEOS)
+#error Please port this to your operating system
+#endif
+
+
+/**
+ * g_access:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @mode: as in access()
+ *
+ * A wrapper for the POSIX access() function. This function is used to
+ * test a pathname for one or several of read, write or execute
+ * permissions, or just existence.
+ *
+ * On Windows, the file protection mechanism is not at all POSIX-like,
+ * and the underlying function in the C library only checks the
+ * FAT-style READONLY attribute, and does not look at the ACL of a
+ * file at all. This function is this in practise almost useless on
+ * Windows. Software that needs to handle file permissions on Windows
+ * more exactly should use the Win32 API.
+ *
+ * See your C library manual for more details about access().
+ *
+ * Returns: zero if the pathname refers to an existing file system
+ * object that has all the tested permissions, or -1 otherwise or on
+ * error.
+ * 
+ * Since: 2.8
+ */
+int
+g_access (const gchar *filename,
+	  int          mode)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+    
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+#ifndef X_OK
+#define X_OK 1
+#endif
+
+  retval = _waccess (wfilename, mode & ~X_OK);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return access (filename, mode);
+#endif
+}
+
+/**
+ * g_chmod:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @mode: as in chmod()
+ *
+ * A wrapper for the POSIX chmod() function. The chmod() function is
+ * used to set the permissions of a file system object.
+ * 
+ * On Windows the file protection mechanism is not at all POSIX-like,
+ * and the underlying chmod() function in the C library just sets or
+ * clears the FAT-style READONLY attribute. It does not touch any
+ * ACL. Software that needs to manage file permissions on Windows
+ * exactly should use the Win32 API.
+ *
+ * See your C library manual for more details about chmod().
+ *
+ * Returns: zero if the operation succeeded, -1 on error.
+ * 
+ * Since: 2.8
+ */
+int
+g_chmod (const gchar *filename,
+	 int          mode)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+    
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wchmod (wfilename, mode);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return chmod (filename, mode);
+#endif
+}
+/**
+ * g_open:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @flags: as in open()
+ * @mode: as in open()
+ *
+ * A wrapper for the POSIX open() function. The open() function is
+ * used to convert a pathname into a file descriptor.
+ *
+ * On POSIX systems file descriptors are implemented by the operating
+ * system. On Windows, it's the C library that implements open() and
+ * file descriptors. The actual Win32 API for opening files is quite
+ * different, see MSDN documentation for CreateFile(). The Win32 API
+ * uses file handles, which are more randomish integers, not small
+ * integers like file descriptors.
+ *
+ * Because file descriptors are specific to the C library on Windows,
+ * the file descriptor returned by this function makes sense only to
+ * functions in the same C library. Thus if the GLib-using code uses a
+ * different C library than GLib does, the file descriptor returned by
+ * this function cannot be passed to C library functions like write()
+ * or read().
+ *
+ * See your C library manual for more details about open().
+ *
+ * Returns: a new file descriptor, or -1 if an error occurred. The
+ * return value can be used exactly like the return value from open().
+ * 
+ * Since: 2.6
+ */
+int
+g_open (const gchar *filename,
+	int          flags,
+	int          mode)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+    
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wopen (wfilename, flags, mode);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return open (filename, flags, mode);
+#endif
+}
+
+/**
+ * g_creat:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @mode: as in creat()
+ *
+ * A wrapper for the POSIX creat() function. The creat() function is
+ * used to convert a pathname into a file descriptor, creating a file
+ * if necessary.
+
+ * On POSIX systems file descriptors are implemented by the operating
+ * system. On Windows, it's the C library that implements creat() and
+ * file descriptors. The actual Windows API for opening files is
+ * different, see MSDN documentation for CreateFile(). The Win32 API
+ * uses file handles, which are more randomish integers, not small
+ * integers like file descriptors.
+ *
+ * Because file descriptors are specific to the C library on Windows,
+ * the file descriptor returned by this function makes sense only to
+ * functions in the same C library. Thus if the GLib-using code uses a
+ * different C library than GLib does, the file descriptor returned by
+ * this function cannot be passed to C library functions like write()
+ * or read().
+ *
+ * See your C library manual for more details about creat().
+ *
+ * Returns: a new file descriptor, or -1 if an error occurred. The
+ * return value can be used exactly like the return value from creat().
+ * 
+ * Since: 2.8
+ */
+int
+g_creat (const gchar *filename,
+	 int          mode)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+    
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wcreat (wfilename, mode);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return creat (filename, mode);
+#endif
+}
+
+/**
+ * g_rename:
+ * @oldfilename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @newfilename: a pathname in the GLib file name encoding
+ *
+ * A wrapper for the POSIX rename() function. The rename() function 
+ * renames a file, moving it between directories if required.
+ * 
+ * See your C library manual for more details about how rename() works
+ * on your system. It is not possible in general on Windows to rename
+ * a file that is open to some process.
+ *
+ * Returns: 0 if the renaming succeeded, -1 if an error occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_rename (const gchar *oldfilename,
+	  const gchar *newfilename)
+{
+#ifdef G_OS_WIN32
+  wchar_t *woldfilename = g_utf8_to_utf16 (oldfilename, -1, NULL, NULL, NULL);
+  wchar_t *wnewfilename;
+  int retval;
+  int save_errno = 0;
+
+  if (woldfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  wnewfilename = g_utf8_to_utf16 (newfilename, -1, NULL, NULL, NULL);
+
+  if (wnewfilename == NULL)
+    {
+      g_free (woldfilename);
+      errno = EINVAL;
+      return -1;
+    }
+
+  if (MoveFileExW (woldfilename, wnewfilename, MOVEFILE_REPLACE_EXISTING))
+    retval = 0;
+  else
+    {
+      retval = -1;
+      switch (GetLastError ())
+	{
+#define CASE(a,b) case ERROR_##a: save_errno = b; break
+	  CASE (FILE_NOT_FOUND, ENOENT);
+	  CASE (PATH_NOT_FOUND, ENOENT);
+	  CASE (ACCESS_DENIED, EACCES);
+	  CASE (NOT_SAME_DEVICE, EXDEV);
+	  CASE (LOCK_VIOLATION, EACCES);
+	  CASE (SHARING_VIOLATION, EACCES);
+	  CASE (FILE_EXISTS, EEXIST);
+	  CASE (ALREADY_EXISTS, EEXIST);
+#undef CASE
+	default: save_errno = EIO;
+	}
+    }
+
+  g_free (woldfilename);
+  g_free (wnewfilename);
+    
+  errno = save_errno;
+  return retval;
+#else
+  return rename (oldfilename, newfilename);
+#endif
+}
+
+/**
+ * g_mkdir: 
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @mode: permissions to use for the newly created directory
+ *
+ * A wrapper for the POSIX mkdir() function. The mkdir() function 
+ * attempts to create a directory with the given name and permissions.
+ * The mode argument is ignored on Windows.
+ * 
+ * See your C library manual for more details about mkdir().
+ *
+ * Returns: 0 if the directory was successfully created, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_mkdir (const gchar *filename,
+	 int          mode)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wmkdir (wfilename);
+  save_errno = errno;
+
+  g_free (wfilename);
+    
+  errno = save_errno;
+  return retval;
+#else
+  return mkdir (filename, mode);
+#endif
+}
+
+/**
+ * g_chdir: 
+ * @path: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ *
+ * A wrapper for the POSIX chdir() function. The function changes the
+ * current directory of the process to @path.
+ * 
+ * See your C library manual for more details about chdir().
+ *
+ * Returns: 0 on success, -1 if an error occurred.
+ * 
+ * Since: 2.8
+ */
+int
+g_chdir (const gchar *path)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wpath = g_utf8_to_utf16 (path, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+
+  if (wpath == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wchdir (wpath);
+  save_errno = errno;
+
+  g_free (wpath);
+    
+  errno = save_errno;
+  return retval;
+#else
+  return chdir (path);
+#endif
+}
+
+/**
+ * g_stat: 
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @buf: a pointer to a <structname>stat</structname> struct, which
+ *    will be filled with the file information
+ *
+ * A wrapper for the POSIX stat() function. The stat() function
+ * returns information about a file. On Windows the stat() function in
+ * the C library checks only the FAT-style READONLY attribute and does
+ * not look at the ACL at all. Thus on Windows the protection bits in
+ * the st_mode field are a fabrication of little use.
+ * 
+ * See your C library manual for more details about stat().
+ *
+ * Returns: 0 if the information was successfully retrieved, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_stat (const gchar *filename,
+	struct stat *buf)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+  int len;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  len = wcslen (wfilename);
+  while (len > 0 && G_IS_DIR_SEPARATOR (wfilename[len-1]))
+    len--;
+  if (len > 0 &&
+      (!g_path_is_absolute (filename) || len > g_path_skip_root (filename) - filename))
+    wfilename[len] = '\0';
+
+  retval = _wstat (wfilename, (struct _stat *) buf);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return stat (filename, buf);
+#endif
+}
+
+/**
+ * g_lstat: 
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @buf: a pointer to a <structname>stat</structname> struct, which
+ *    will be filled with the file information
+ *
+ * A wrapper for the POSIX lstat() function. The lstat() function is
+ * like stat() except that in the case of symbolic links, it returns
+ * information about the symbolic link itself and not the file that it
+ * refers to. If the system does not support symbolic links g_lstat()
+ * is identical to g_stat().
+ * 
+ * See your C library manual for more details about lstat().
+ *
+ * Returns: 0 if the information was successfully retrieved, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_lstat (const gchar *filename,
+	 struct stat *buf)
+{
+#ifdef HAVE_LSTAT
+  /* This can't be Win32, so don't do the widechar dance. */
+  return lstat (filename, buf);
+#else
+  return g_stat (filename, buf);
+#endif
+}
+
+/**
+ * g_unlink:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ *
+ * A wrapper for the POSIX unlink() function. The unlink() function 
+ * deletes a name from the filesystem. If this was the last link to the 
+ * file and no processes have it opened, the diskspace occupied by the
+ * file is freed.
+ * 
+ * See your C library manual for more details about unlink(). Note
+ * that on Windows, it is in general not possible to delete files that
+ * are open to some process, or mapped into memory.
+ *
+ * Returns: 0 if the name was successfully deleted, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_unlink (const gchar *filename)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wunlink (wfilename);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return unlink (filename);
+#endif
+}
+
+/**
+ * g_remove:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ *
+ * A wrapper for the POSIX remove() function. The remove() function
+ * deletes a name from the filesystem.
+ * 
+ * See your C library manual for more details about how remove() works
+ * on your system. On Unix, remove() removes also directories, as it
+ * calls unlink() for files and rmdir() for directories. On Windows,
+ * although remove() in the C library only works for files, this
+ * function tries first remove() and then if that fails rmdir(), and
+ * thus works for both files and directories. Note however, that on
+ * Windows, it is in general not possible to remove a file that is
+ * open to some process, or mapped into memory.
+ *
+ * If this function fails on Windows you can't infer too much from the
+ * errno value. rmdir() is tried regardless of what caused remove() to
+ * fail. Any errno value set by remove() will be overwritten by that
+ * set by rmdir().
+ *
+ * Returns: 0 if the file was successfully removed, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_remove (const gchar *filename)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  retval = _wremove (wfilename);
+  if (retval == -1)
+    retval = _wrmdir (wfilename);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return remove (filename);
+#endif
+}
+
+/**
+ * g_rmdir:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ *
+ * A wrapper for the POSIX rmdir() function. The rmdir() function
+ * deletes a directory from the filesystem.
+ * 
+ * See your C library manual for more details about how rmdir() works
+ * on your system.
+ *
+ * Returns: 0 if the directory was successfully removed, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.6
+ */
+int
+g_rmdir (const gchar *filename)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  
+  retval = _wrmdir (wfilename);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return rmdir (filename);
+#endif
+}
+
+/**
+ * g_fopen:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @mode: a string describing the mode in which the file should be 
+ *   opened
+ *
+ * A wrapper for the stdio fopen() function. The fopen() function
+ * opens a file and associates a new stream with it.
+ * 
+ * Because file descriptors are specific to the C library on Windows,
+ * and a file descriptor is partof the <type>FILE</type> struct, the
+ * <type>FILE</type> pointer returned by this function makes sense
+ * only to functions in the same C library. Thus if the GLib-using
+ * code uses a different C library than GLib does, the
+ * <type>FILE</type> pointer returned by this function cannot be
+ * passed to C library functions like fprintf() or fread().
+ *
+ * See your C library manual for more details about fopen().
+ *
+ * Returns: A <type>FILE</type> pointer if the file was successfully
+ *    opened, or %NULL if an error occurred
+ * 
+ * Since: 2.6
+ */
+FILE *
+g_fopen (const gchar *filename,
+	 const gchar *mode)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  wchar_t *wmode;
+  FILE *retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+
+  wmode = g_utf8_to_utf16 (mode, -1, NULL, NULL, NULL);
+
+  if (wmode == NULL)
+    {
+      g_free (wfilename);
+      errno = EINVAL;
+      return NULL;
+    }
+
+  retval = _wfopen (wfilename, wmode);
+  save_errno = errno;
+
+  g_free (wfilename);
+  g_free (wmode);
+
+  errno = save_errno;
+  return retval;
+#else
+  return fopen (filename, mode);
+#endif
+}
+
+/**
+ * g_freopen:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @mode: a string describing the mode in which the file should be 
+ *   opened
+ * @stream: an existing stream which will be reused, or %NULL
+ *
+ * A wrapper for the POSIX freopen() function. The freopen() function
+ * opens a file and associates it with an existing stream.
+ * 
+ * See your C library manual for more details about freopen().
+ *
+ * Returns: A <type>FILE</type> pointer if the file was successfully
+ *    opened, or %NULL if an error occurred.
+ * 
+ * Since: 2.6
+ */
+FILE *
+g_freopen (const gchar *filename,
+	   const gchar *mode,
+	   FILE        *stream)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  wchar_t *wmode;
+  FILE *retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+  
+  wmode = g_utf8_to_utf16 (mode, -1, NULL, NULL, NULL);
+
+  if (wmode == NULL)
+    {
+      g_free (wfilename);
+      errno = EINVAL;
+      return NULL;
+    }
+  
+  retval = _wfreopen (wfilename, wmode, stream);
+  save_errno = errno;
+
+  g_free (wfilename);
+  g_free (wmode);
+
+  errno = save_errno;
+  return retval;
+#else
+  return freopen (filename, mode, stream);
+#endif
+}
+
+/**
+ * g_utime:
+ * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows)
+ * @utb: a pointer to a struct utimbuf.
+ *
+ * A wrapper for the POSIX utime() function. The utime() function
+ * sets the access and modification timestamps of a file.
+ * 
+ * See your C library manual for more details about how utime() works
+ * on your system.
+ *
+ * Returns: 0 if the operation was successful, -1 if an error 
+ *    occurred
+ * 
+ * Since: 2.18
+ */
+int
+g_utime (const gchar    *filename,
+	 struct utimbuf *utb)
+{
+#ifdef G_OS_WIN32
+  wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL);
+  int retval;
+  int save_errno;
+
+  if (wfilename == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  
+  retval = _wutime (wfilename, (struct _utimbuf*) utb);
+  save_errno = errno;
+
+  g_free (wfilename);
+
+  errno = save_errno;
+  return retval;
+#else
+  return utime (filename, utb);
+#endif
+}
+
+#define __G_STDIO_C__
+#include "galiasdef.c"
diff --git a/glib/gstdio.h b/glib/gstdio.h
new file mode 100644
index 0000000..f71a4e3
--- /dev/null
+++ b/glib/gstdio.h
@@ -0,0 +1,122 @@
+/* gstdio.h - GFilename wrappers for C library functions
+ *
+ * Copyright 2004 Tor Lillqvist
+ *
+ * GLib is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * GLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GLib; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __G_STDIO_H__
+#define __G_STDIO_H__
+
+#include <glib/gprintf.h>
+
+#include <sys/stat.h>
+
+G_BEGIN_DECLS
+
+#if defined(G_OS_UNIX) && !defined(G_STDIO_NO_WRAP_ON_UNIX)
+
+/* Just pass on to the system functions, so there's no potential for data
+ * format mismatches, especially with large file interfaces. 
+ * A few functions can't be handled in this way, since they are not defined
+ * in a portable system header that we could include here.
+ */
+
+#define g_chmod   chmod
+#define g_open    open
+#define g_creat   creat
+#define g_rename  rename
+#define g_mkdir   mkdir
+#define g_stat    stat
+#define g_lstat   lstat
+#define g_remove  remove
+#define g_fopen   fopen
+#define g_freopen freopen
+#define g_utime   utime
+
+int g_access (const gchar *filename,
+	      int          mode);
+
+int g_chdir  (const gchar *path);
+
+int g_unlink (const gchar *filename);
+
+int g_rmdir  (const gchar *filename);
+
+#else /* ! G_OS_UNIX */
+
+/* Wrappers for C library functions that take pathname arguments. On
+ * Unix, the pathname is a file name as it literally is in the file
+ * system. On well-maintained systems with consistent users who know
+ * what they are doing and no exchange of files with others this would
+ * be a well-defined encoding, preferrably UTF-8. On Windows, the
+ * pathname is always in UTF-8, even if that is not the on-disk
+ * encoding, and not the encoding accepted by the C library or Win32
+ * API.
+ */
+
+int g_access    (const gchar *filename,
+		 int          mode);
+
+int g_chmod     (const gchar *filename,
+		 int          mode);
+
+int g_open      (const gchar *filename,
+                 int          flags,
+                 int          mode);
+
+int g_creat     (const gchar *filename,
+                 int          mode);
+
+int g_rename    (const gchar *oldfilename,
+                 const gchar *newfilename);
+
+int g_mkdir     (const gchar *filename,
+                 int          mode);
+
+int g_chdir     (const gchar *path);
+
+int g_stat      (const gchar *filename,
+                 struct stat *buf);
+
+int g_lstat     (const gchar *filename,
+                 struct stat *buf);
+
+int g_unlink    (const gchar *filename);
+
+int g_remove    (const gchar *filename);
+
+int g_rmdir     (const gchar *filename);
+
+FILE *g_fopen   (const gchar *filename,
+                 const gchar *mode);
+
+FILE *g_freopen (const gchar *filename,
+                 const gchar *mode,
+                 FILE        *stream);
+
+struct utimbuf;			/* Don't need the real definition of struct utimbuf when just
+				 * including this header.
+				 */
+
+int g_utime     (const gchar    *filename,
+		 struct utimbuf *utb);
+
+#endif /* G_OS_UNIX */
+
+G_END_DECLS
+
+#endif /* __G_STDIO_H__ */
diff --git a/glib/gstrfuncs.c b/glib/gstrfuncs.c
new file mode 100644
index 0000000..b076aa9
--- /dev/null
+++ b/glib/gstrfuncs.c
@@ -0,0 +1,3253 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#define _GNU_SOURCE		/* For stpcpy */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <errno.h>
+#include <ctype.h>		/* For tolower() */
+#if !defined (HAVE_STRSIGNAL) || !defined(NO_SYS_SIGLIST_DECL)
+#include <signal.h>
+#endif
+
+#include "glib.h"
+#include "gprintf.h"
+#include "gprintfint.h"
+#include "glibintl.h"
+
+#include "galias.h"
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
+
+/* do not include <unistd.h> in this place since it
+ * interferes with g_strsignal() on some OSes
+ */
+
+static const guint16 ascii_table_data[256] = {
+  0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
+  0x004, 0x104, 0x104, 0x004, 0x104, 0x104, 0x004, 0x004,
+  0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
+  0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
+  0x140, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
+  0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
+  0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459,
+  0x459, 0x459, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
+  0x0d0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253,
+  0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253,
+  0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253,
+  0x253, 0x253, 0x253, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0,
+  0x0d0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073,
+  0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
+  0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
+  0x073, 0x073, 0x073, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x004
+  /* the upper 128 are all zeroes */
+};
+
+const guint16 * const g_ascii_table = ascii_table_data;
+
+/**
+ * g_strdup:
+ * @str: the string to duplicate
+ *
+ * Duplicates a string. If @str is %NULL it returns %NULL.
+ * The returned string should be freed with g_free() 
+ * when no longer needed.
+ * 
+ * Returns: a newly-allocated copy of @str
+ */
+gchar*
+g_strdup (const gchar *str)
+{
+  gchar *new_str;
+  gsize length;
+
+  if (str)
+    {
+      length = strlen (str) + 1;
+      new_str = g_new (char, length);
+      memcpy (new_str, str, length);
+    }
+  else
+    new_str = NULL;
+
+  return new_str;
+}
+
+gpointer
+g_memdup (gconstpointer mem,
+	  guint         byte_size)
+{
+  gpointer new_mem;
+
+  if (mem)
+    {
+      new_mem = g_malloc (byte_size);
+      memcpy (new_mem, mem, byte_size);
+    }
+  else
+    new_mem = NULL;
+
+  return new_mem;
+}
+
+/**
+ * g_strndup:
+ * @str: the string to duplicate
+ * @n: the maximum number of bytes to copy from @str
+ *
+ * Duplicates the first @n bytes of a string, returning a newly-allocated
+ * buffer @n + 1 bytes long which will always be nul-terminated.
+ * If @str is less than @n bytes long the buffer is padded with nuls.
+ * If @str is %NULL it returns %NULL.
+ * The returned value should be freed when no longer needed.
+ * 
+ * <note><para>
+ * To copy a number of characters from a UTF-8 encoded string, use
+ * g_utf8_strncpy() instead.
+ * </para></note>
+ * 
+ * Returns: a newly-allocated buffer containing the first @n bytes 
+ *          of @str, nul-terminated 
+ */
+gchar*
+g_strndup (const gchar *str,
+	   gsize        n)    
+{
+  gchar *new_str;
+
+  if (str)
+    {
+      new_str = g_new (gchar, n + 1);
+      strncpy (new_str, str, n);
+      new_str[n] = '\0';
+    }
+  else
+    new_str = NULL;
+
+  return new_str;
+}
+
+/**
+ * g_strnfill:
+ * @length: the length of the new string
+ * @fill_char: the byte to fill the string with
+ *
+ * Creates a new string @length bytes long filled with @fill_char.
+ * The returned string should be freed when no longer needed.
+ * 
+ * Returns: a newly-allocated string filled the @fill_char
+ */
+gchar*
+g_strnfill (gsize length,     
+	    gchar fill_char)
+{
+  gchar *str;
+
+  str = g_new (gchar, length + 1);
+  memset (str, (guchar)fill_char, length);
+  str[length] = '\0';
+
+  return str;
+}
+
+/**
+ * g_stpcpy:
+ * @dest: destination buffer.
+ * @src: source string.
+ * 
+ * Copies a nul-terminated string into the dest buffer, include the
+ * trailing nul, and return a pointer to the trailing nul byte.
+ * This is useful for concatenating multiple strings together
+ * without having to repeatedly scan for the end.
+ * 
+ * Return value: a pointer to trailing nul byte.
+ **/
+gchar *
+g_stpcpy (gchar       *dest,
+          const gchar *src)
+{
+#ifdef HAVE_STPCPY
+  g_return_val_if_fail (dest != NULL, NULL);
+  g_return_val_if_fail (src != NULL, NULL);
+  return stpcpy (dest, src);
+#else
+  register gchar *d = dest;
+  register const gchar *s = src;
+
+  g_return_val_if_fail (dest != NULL, NULL);
+  g_return_val_if_fail (src != NULL, NULL);
+  do
+    *d++ = *s;
+  while (*s++ != '\0');
+
+  return d - 1;
+#endif
+}
+
+/**
+ * g_strdup_vprintf:
+ * @format: a standard printf() format string, but notice
+ *     <link linkend="string-precision">string precision pitfalls</link>
+ * @args: the list of parameters to insert into the format string
+ * 
+ * Similar to the standard C vsprintf() function but safer, since it 
+ * calculates the maximum space required and allocates memory to hold 
+ * the result. The returned string should be freed with g_free() when 
+ * no longer needed.
+ *
+ * See also g_vasprintf(), which offers the same functionality, but 
+ * additionally returns the length of the allocated string.
+ *
+ * Returns: a newly-allocated string holding the result
+ */
+gchar*
+g_strdup_vprintf (const gchar *format,
+		  va_list      args)
+{
+  gchar *string = NULL;
+
+  g_vasprintf (&string, format, args);
+
+  return string;
+}
+
+/**
+ * g_strdup_printf:
+ * @format: a standard printf() format string, but notice
+ *     <link linkend="string-precision">string precision pitfalls</link>
+ * @Varargs: the parameters to insert into the format string
+ *
+ * Similar to the standard C sprintf() function but safer, since it 
+ * calculates the maximum space required and allocates memory to hold 
+ * the result. The returned string should be freed with g_free() when no 
+ * longer needed.
+ * 
+ * Returns: a newly-allocated string holding the result
+ */
+gchar*
+g_strdup_printf (const gchar *format,
+		 ...)
+{
+  gchar *buffer;
+  va_list args;
+
+  va_start (args, format);
+  buffer = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  return buffer;
+}
+
+/**
+ * g_strconcat:
+ * @string1: the first string to add, which must not be %NULL
+ * @Varargs: a %NULL-terminated list of strings to append to the string
+ * 
+ * Concatenates all of the given strings into one long string.
+ * The returned string should be freed with g_free() when no longer needed.
+ *
+ *
+ * <warning><para>The variable argument list <emphasis>must</emphasis> end 
+ * with %NULL. If you forget the %NULL, g_strconcat() will start appending
+ * random memory junk to your string.</para></warning>
+ *
+ * Returns: a newly-allocated string containing all the string arguments
+ */
+gchar*
+g_strconcat (const gchar *string1, ...)
+{
+  gsize	  l;     
+  va_list args;
+  gchar	  *s;
+  gchar	  *concat;
+  gchar   *ptr;
+
+  if (!string1)
+    return NULL;
+
+  l = 1 + strlen (string1);
+  va_start (args, string1);
+  s = va_arg (args, gchar*);
+  while (s)
+    {
+      l += strlen (s);
+      s = va_arg (args, gchar*);
+    }
+  va_end (args);
+
+  concat = g_new (gchar, l);
+  ptr = concat;
+
+  ptr = g_stpcpy (ptr, string1);
+  va_start (args, string1);
+  s = va_arg (args, gchar*);
+  while (s)
+    {
+      ptr = g_stpcpy (ptr, s);
+      s = va_arg (args, gchar*);
+    }
+  va_end (args);
+
+  return concat;
+}
+
+/**
+ * g_strtod:
+ * @nptr:    the string to convert to a numeric value.
+ * @endptr:  if non-%NULL, it returns the character after
+ *           the last character used in the conversion.
+ * 
+ * Converts a string to a #gdouble value.
+ * It calls the standard strtod() function to handle the conversion, but
+ * if the string is not completely converted it attempts the conversion
+ * again with g_ascii_strtod(), and returns the best match.
+ *
+ * This function should seldomly be used. The normal situation when reading
+ * numbers not for human consumption is to use g_ascii_strtod(). Only when
+ * you know that you must expect both locale formatted and C formatted numbers
+ * should you use this. Make sure that you don't pass strings such as comma
+ * separated lists of values, since the commas may be interpreted as a decimal
+ * point in some locales, causing unexpected results.
+ * 
+ * Return value: the #gdouble value.
+ **/
+gdouble
+g_strtod (const gchar *nptr,
+	  gchar      **endptr)
+{
+  gchar *fail_pos_1;
+  gchar *fail_pos_2;
+  gdouble val_1;
+  gdouble val_2 = 0;
+
+  g_return_val_if_fail (nptr != NULL, 0);
+
+  fail_pos_1 = NULL;
+  fail_pos_2 = NULL;
+
+  val_1 = strtod (nptr, &fail_pos_1);
+
+  if (fail_pos_1 && fail_pos_1[0] != 0)
+    val_2 = g_ascii_strtod (nptr, &fail_pos_2);
+
+  if (!fail_pos_1 || fail_pos_1[0] == 0 || fail_pos_1 >= fail_pos_2)
+    {
+      if (endptr)
+	*endptr = fail_pos_1;
+      return val_1;
+    }
+  else
+    {
+      if (endptr)
+	*endptr = fail_pos_2;
+      return val_2;
+    }
+}
+
+/**
+ * g_ascii_strtod:
+ * @nptr:    the string to convert to a numeric value.
+ * @endptr:  if non-%NULL, it returns the character after
+ *           the last character used in the conversion.
+ * 
+ * Converts a string to a #gdouble value.
+ *
+ * This function behaves like the standard strtod() function
+ * does in the C locale. It does this without actually changing 
+ * the current locale, since that would not be thread-safe. 
+ * A limitation of the implementation is that this function
+ * will still accept localized versions of infinities and NANs. 
+ *
+ * This function is typically used when reading configuration
+ * files or other non-user input that should be locale independent.
+ * To handle input from the user you should normally use the
+ * locale-sensitive system strtod() function.
+ *
+ * To convert from a #gdouble to a string in a locale-insensitive
+ * way, use g_ascii_dtostr().
+ *
+ * If the correct value would cause overflow, plus or minus %HUGE_VAL
+ * is returned (according to the sign of the value), and %ERANGE is
+ * stored in %errno. If the correct value would cause underflow,
+ * zero is returned and %ERANGE is stored in %errno.
+ * 
+ * This function resets %errno before calling strtod() so that
+ * you can reliably detect overflow and underflow.
+ *
+ * Return value: the #gdouble value.
+ **/
+gdouble
+g_ascii_strtod (const gchar *nptr,
+		gchar      **endptr)
+{
+  gchar *fail_pos;
+  gdouble val;
+  struct lconv *locale_data;
+  const char *decimal_point;
+  int decimal_point_len;
+  const char *p, *decimal_point_pos;
+  const char *end = NULL; /* Silence gcc */
+  int strtod_errno;
+
+  g_return_val_if_fail (nptr != NULL, 0);
+
+  fail_pos = NULL;
+
+#ifdef ANDROID_STUB
+  locale_data = localeconv ();
+
+  decimal_point = locale_data->decimal_point;
+  decimal_point_len = strlen (decimal_point);
+
+  g_assert (decimal_point_len != 0);
+  
+  decimal_point_pos = NULL;
+  end = NULL;
+
+  if (decimal_point[0] != '.' || 
+      decimal_point[1] != 0)
+    {
+      p = nptr;
+      /* Skip leading space */
+      while (g_ascii_isspace (*p))
+	p++;
+      
+      /* Skip leading optional sign */
+      if (*p == '+' || *p == '-')
+	p++;
+      
+      if (p[0] == '0' && 
+	  (p[1] == 'x' || p[1] == 'X'))
+	{
+	  p += 2;
+	  /* HEX - find the (optional) decimal point */
+	  
+	  while (g_ascii_isxdigit (*p))
+	    p++;
+	  
+	  if (*p == '.')
+	    decimal_point_pos = p++;
+	      
+	  while (g_ascii_isxdigit (*p))
+	    p++;
+	  
+	  if (*p == 'p' || *p == 'P')
+	    p++;
+	  if (*p == '+' || *p == '-')
+	    p++;
+	  while (g_ascii_isdigit (*p))
+	    p++;
+
+	  end = p;
+	}
+      else if (g_ascii_isdigit (*p) || *p == '.')
+	{
+	  while (g_ascii_isdigit (*p))
+	    p++;
+	  
+	  if (*p == '.')
+	    decimal_point_pos = p++;
+	  
+	  while (g_ascii_isdigit (*p))
+	    p++;
+	  
+	  if (*p == 'e' || *p == 'E')
+	    p++;
+	  if (*p == '+' || *p == '-')
+	    p++;
+	  while (g_ascii_isdigit (*p))
+	    p++;
+
+	  end = p;
+	}
+      /* For the other cases, we need not convert the decimal point */
+    }
+
+  if (decimal_point_pos)
+    {
+      char *copy, *c;
+
+      /* We need to convert the '.' to the locale specific decimal point */
+      copy = g_malloc (end - nptr + 1 + decimal_point_len);
+      
+      c = copy;
+      memcpy (c, nptr, decimal_point_pos - nptr);
+      c += decimal_point_pos - nptr;
+      memcpy (c, decimal_point, decimal_point_len);
+      c += decimal_point_len;
+      memcpy (c, decimal_point_pos + 1, end - (decimal_point_pos + 1));
+      c += end - (decimal_point_pos + 1);
+      *c = 0;
+
+      errno = 0;
+      val = strtod (copy, &fail_pos);
+      strtod_errno = errno;
+
+      if (fail_pos)
+	{
+	  if (fail_pos - copy > decimal_point_pos - nptr)
+	    fail_pos = (char *)nptr + (fail_pos - copy) - (decimal_point_len - 1);
+	  else
+	    fail_pos = (char *)nptr + (fail_pos - copy);
+	}
+      
+      g_free (copy);
+	  
+    }
+  else if (end)
+    {
+      char *copy;
+      
+      copy = g_malloc (end - (char *)nptr + 1);
+      memcpy (copy, nptr, end - nptr);
+      *(copy + (end - (char *)nptr)) = 0;
+      
+      errno = 0;
+      val = strtod (copy, &fail_pos);
+      strtod_errno = errno;
+
+      if (fail_pos)
+	{
+	  fail_pos = (char *)nptr + (fail_pos - copy);
+	}
+      
+      g_free (copy);
+    }
+  else
+#endif
+    {
+      errno = 0;
+      val = strtod (nptr, &fail_pos);
+      strtod_errno = errno;
+    }
+
+  if (endptr)
+    *endptr = fail_pos;
+
+  errno = strtod_errno;
+
+  return val;
+}
+
+/**
+ * g_ascii_dtostr:
+ * @buffer: A buffer to place the resulting string in
+ * @buf_len: The length of the buffer.
+ * @d: The #gdouble to convert
+ *
+ * Converts a #gdouble to a string, using the '.' as
+ * decimal point. 
+ * 
+ * This functions generates enough precision that converting
+ * the string back using g_ascii_strtod() gives the same machine-number
+ * (on machines with IEEE compatible 64bit doubles). It is
+ * guaranteed that the size of the resulting string will never
+ * be larger than @G_ASCII_DTOSTR_BUF_SIZE bytes.
+ *
+ * Return value: The pointer to the buffer with the converted string.
+ **/
+gchar *
+g_ascii_dtostr (gchar       *buffer,
+		gint         buf_len,
+		gdouble      d)
+{
+  return g_ascii_formatd (buffer, buf_len, "%.17g", d);
+}
+
+/**
+ * g_ascii_formatd:
+ * @buffer: A buffer to place the resulting string in
+ * @buf_len: The length of the buffer.
+ * @format: The printf()-style format to use for the
+ *          code to use for converting. 
+ * @d: The #gdouble to convert
+ *
+ * Converts a #gdouble to a string, using the '.' as
+ * decimal point. To format the number you pass in
+ * a printf()-style format string. Allowed conversion
+ * specifiers are 'e', 'E', 'f', 'F', 'g' and 'G'. 
+ * 
+ * If you just want to want to serialize the value into a
+ * string, use g_ascii_dtostr().
+ *
+ * Return value: The pointer to the buffer with the converted string.
+ */
+gchar *
+g_ascii_formatd (gchar       *buffer,
+		 gint         buf_len,
+		 const gchar *format,
+		 gdouble      d)
+{
+  struct lconv *locale_data;
+  const char *decimal_point;
+  int decimal_point_len;
+  gchar *p;
+  int rest_len;
+  gchar format_char;
+
+  g_return_val_if_fail (buffer != NULL, NULL);
+  g_return_val_if_fail (format[0] == '%', NULL);
+  g_return_val_if_fail (strpbrk (format + 1, "'l%") == NULL, NULL);
+ 
+  format_char = format[strlen (format) - 1];
+  
+  g_return_val_if_fail (format_char == 'e' || format_char == 'E' ||
+			format_char == 'f' || format_char == 'F' ||
+			format_char == 'g' || format_char == 'G',
+			NULL);
+
+  if (format[0] != '%')
+    return NULL;
+
+  if (strpbrk (format + 1, "'l%"))
+    return NULL;
+
+  if (!(format_char == 'e' || format_char == 'E' ||
+	format_char == 'f' || format_char == 'F' ||
+	format_char == 'g' || format_char == 'G'))
+    return NULL;
+
+      
+  _g_snprintf (buffer, buf_len, format, d);
+
+#ifdef ANDROID_STUB
+  locale_data = localeconv ();
+  decimal_point = locale_data->decimal_point;
+  decimal_point_len = strlen (decimal_point);
+
+  g_assert (decimal_point_len != 0);
+
+  if (decimal_point[0] != '.' ||
+      decimal_point[1] != 0)
+    {
+      p = buffer;
+
+      while (g_ascii_isspace (*p))
+	p++;
+
+      if (*p == '+' || *p == '-')
+	p++;
+
+      while (isdigit ((guchar)*p))
+	p++;
+
+      if (strncmp (p, decimal_point, decimal_point_len) == 0)
+	{
+	  *p = '.';
+	  p++;
+	  if (decimal_point_len > 1) 
+            {
+	      rest_len = strlen (p + (decimal_point_len-1));
+	      memmove (p, p + (decimal_point_len-1), rest_len);
+	      p[rest_len] = 0;
+	    }
+	}
+    }
+#endif
+  
+  return buffer;
+}
+
+static guint64
+g_parse_long_long (const gchar  *nptr,
+		   const gchar **endptr,
+		   guint         base,
+		   gboolean     *negative)
+{
+  /* this code is based on on the strtol(3) code from GNU libc released under
+   * the GNU Lesser General Public License.
+   *
+   * Copyright (C) 1991,92,94,95,96,97,98,99,2000,01,02
+   *        Free Software Foundation, Inc.
+   */
+#define ISSPACE(c)		((c) == ' ' || (c) == '\f' || (c) == '\n' || \
+				 (c) == '\r' || (c) == '\t' || (c) == '\v')
+#define ISUPPER(c)		((c) >= 'A' && (c) <= 'Z')
+#define ISLOWER(c)		((c) >= 'a' && (c) <= 'z')
+#define ISALPHA(c)		(ISUPPER (c) || ISLOWER (c))
+#define	TOUPPER(c)		(ISLOWER (c) ? (c) - 'a' + 'A' : (c))
+#define	TOLOWER(c)		(ISUPPER (c) ? (c) - 'A' + 'a' : (c))
+  gboolean overflow;
+  guint64 cutoff;
+  guint64 cutlim;
+  guint64 ui64;
+  const gchar *s, *save;
+  guchar c;
+  
+  g_return_val_if_fail (nptr != NULL, 0);
+  
+  *negative = FALSE;
+  if (base == 1 || base > 36)
+    {
+      errno = EINVAL;
+      if (endptr)
+	*endptr = nptr;
+      return 0;
+    }
+  
+  save = s = nptr;
+  
+  /* Skip white space.  */
+  while (ISSPACE (*s))
+    ++s;
+
+  if (G_UNLIKELY (!*s))
+    goto noconv;
+  
+  /* Check for a sign.  */
+  if (*s == '-')
+    {
+      *negative = TRUE;
+      ++s;
+    }
+  else if (*s == '+')
+    ++s;
+  
+  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */
+  if (*s == '0')
+    {
+      if ((base == 0 || base == 16) && TOUPPER (s[1]) == 'X')
+	{
+	  s += 2;
+	  base = 16;
+	}
+      else if (base == 0)
+	base = 8;
+    }
+  else if (base == 0)
+    base = 10;
+  
+  /* Save the pointer so we can check later if anything happened.  */
+  save = s;
+  cutoff = G_MAXUINT64 / base;
+  cutlim = G_MAXUINT64 % base;
+  
+  overflow = FALSE;
+  ui64 = 0;
+  c = *s;
+  for (; c; c = *++s)
+    {
+      if (c >= '0' && c <= '9')
+	c -= '0';
+      else if (ISALPHA (c))
+	c = TOUPPER (c) - 'A' + 10;
+      else
+	break;
+      if (c >= base)
+	break;
+      /* Check for overflow.  */
+      if (ui64 > cutoff || (ui64 == cutoff && c > cutlim))
+	overflow = TRUE;
+      else
+	{
+	  ui64 *= base;
+	  ui64 += c;
+	}
+    }
+  
+  /* Check if anything actually happened.  */
+  if (s == save)
+    goto noconv;
+  
+  /* Store in ENDPTR the address of one character
+     past the last character we converted.  */
+  if (endptr)
+    *endptr = s;
+  
+  if (G_UNLIKELY (overflow))
+    {
+      errno = ERANGE;
+      return G_MAXUINT64;
+    }
+
+  return ui64;
+  
+ noconv:
+  /* We must handle a special case here: the base is 0 or 16 and the
+     first two characters are '0' and 'x', but the rest are no
+     hexadecimal digits.  This is no error case.  We return 0 and
+     ENDPTR points to the `x`.  */
+  if (endptr)
+    {
+      if (save - nptr >= 2 && TOUPPER (save[-1]) == 'X'
+	  && save[-2] == '0')
+	*endptr = &save[-1];
+      else
+	/*  There was no number to convert.  */
+	*endptr = nptr;
+    }
+  return 0;
+}
+
+/**
+ * g_ascii_strtoull:
+ * @nptr:    the string to convert to a numeric value.
+ * @endptr:  if non-%NULL, it returns the character after
+ *           the last character used in the conversion.
+ * @base:    to be used for the conversion, 2..36 or 0
+ *
+ * Converts a string to a #guint64 value.
+ * This function behaves like the standard strtoull() function
+ * does in the C locale. It does this without actually
+ * changing the current locale, since that would not be
+ * thread-safe.
+ *
+ * This function is typically used when reading configuration
+ * files or other non-user input that should be locale independent.
+ * To handle input from the user you should normally use the
+ * locale-sensitive system strtoull() function.
+ *
+ * If the correct value would cause overflow, %G_MAXUINT64
+ * is returned, and %ERANGE is stored in %errno.  If the base is
+ * outside the valid range, zero is returned, and %EINVAL is stored
+ * in %errno.  If the string conversion fails, zero is returned, and
+ * @endptr returns @nptr (if @endptr is non-%NULL).
+ *
+ * Return value: the #guint64 value or zero on error.
+ *
+ * Since: 2.2
+ */
+guint64
+g_ascii_strtoull (const gchar *nptr,
+		  gchar      **endptr,
+		  guint        base)
+{
+  gboolean negative;
+  guint64 result;
+
+  result = g_parse_long_long (nptr, (const gchar **) endptr, base, &negative);
+
+  /* Return the result of the appropriate sign.  */
+  return negative ? -result : result;
+}
+
+/**
+ * g_ascii_strtoll:
+ * @nptr:    the string to convert to a numeric value.
+ * @endptr:  if non-%NULL, it returns the character after
+ *           the last character used in the conversion.
+ * @base:    to be used for the conversion, 2..36 or 0
+ *
+ * Converts a string to a #gint64 value.
+ * This function behaves like the standard strtoll() function
+ * does in the C locale. It does this without actually
+ * changing the current locale, since that would not be
+ * thread-safe.
+ *
+ * This function is typically used when reading configuration
+ * files or other non-user input that should be locale independent.
+ * To handle input from the user you should normally use the
+ * locale-sensitive system strtoll() function.
+ *
+ * If the correct value would cause overflow, %G_MAXINT64 or %G_MININT64
+ * is returned, and %ERANGE is stored in %errno.  If the base is
+ * outside the valid range, zero is returned, and %EINVAL is stored
+ * in %errno.  If the string conversion fails, zero is returned, and
+ * @endptr returns @nptr (if @endptr is non-%NULL).
+ *
+ * Return value: the #gint64 value or zero on error.
+ *
+ * Since: 2.12
+ */
+gint64 
+g_ascii_strtoll (const gchar *nptr,
+		 gchar      **endptr,
+		 guint        base)
+{
+  gboolean negative;
+  guint64 result;
+
+  result = g_parse_long_long (nptr, (const gchar **) endptr, base, &negative);
+
+  if (negative && result > (guint64) G_MININT64)
+    {
+      errno = ERANGE;
+      return G_MININT64;
+    }
+  else if (!negative && result > (guint64) G_MAXINT64)
+    {
+      errno = ERANGE;
+      return G_MAXINT64;
+    }
+  else if (negative)
+    return - (gint64) result;
+  else
+    return (gint64) result;
+}
+
+/**
+ * g_strerror:
+ * @errnum: the system error number. See the standard C %errno
+ *     documentation
+ * 
+ * Returns a string corresponding to the given error code, e.g. 
+ * "no such process". You should use this function in preference to 
+ * strerror(), because it returns a string in UTF-8 encoding, and since 
+ * not all platforms support the strerror() function.
+ *
+ * Returns: a UTF-8 string describing the error code. If the error code 
+ *     is unknown, it returns "unknown error (&lt;code&gt;)". The string 
+ *     can only be used until the next call to g_strerror()
+ */
+G_CONST_RETURN gchar*
+g_strerror (gint errnum)
+{
+  static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT;
+  char *msg;
+  int saved_errno = errno;
+
+#ifdef HAVE_STRERROR
+  const char *msg_locale;
+
+  msg_locale = strerror (errnum);
+  if (g_get_charset (NULL))
+    {
+      errno = saved_errno;
+      return msg_locale;
+    }
+  else
+    {
+      gchar *msg_utf8 = g_locale_to_utf8 (msg_locale, -1, NULL, NULL, NULL);
+      if (msg_utf8)
+	{
+	  /* Stick in the quark table so that we can return a static result
+	   */
+	  GQuark msg_quark = g_quark_from_string (msg_utf8);
+	  g_free (msg_utf8);
+	  
+	  msg_utf8 = (gchar *) g_quark_to_string (msg_quark);
+	  errno = saved_errno;
+	  return msg_utf8;
+	}
+    }
+#elif NO_SYS_ERRLIST
+  switch (errnum)
+    {
+#ifdef E2BIG
+    case E2BIG: return "argument list too long";
+#endif
+#ifdef EACCES
+    case EACCES: return "permission denied";
+#endif
+#ifdef EADDRINUSE
+    case EADDRINUSE: return "address already in use";
+#endif
+#ifdef EADDRNOTAVAIL
+    case EADDRNOTAVAIL: return "can't assign requested address";
+#endif
+#ifdef EADV
+    case EADV: return "advertise error";
+#endif
+#ifdef EAFNOSUPPORT
+    case EAFNOSUPPORT: return "address family not supported by protocol family";
+#endif
+#ifdef EAGAIN
+    case EAGAIN: return "try again";
+#endif
+#ifdef EALIGN
+    case EALIGN: return "EALIGN";
+#endif
+#ifdef EALREADY
+    case EALREADY: return "operation already in progress";
+#endif
+#ifdef EBADE
+    case EBADE: return "bad exchange descriptor";
+#endif
+#ifdef EBADF
+    case EBADF: return "bad file number";
+#endif
+#ifdef EBADFD
+    case EBADFD: return "file descriptor in bad state";
+#endif
+#ifdef EBADMSG
+    case EBADMSG: return "not a data message";
+#endif
+#ifdef EBADR
+    case EBADR: return "bad request descriptor";
+#endif
+#ifdef EBADRPC
+    case EBADRPC: return "RPC structure is bad";
+#endif
+#ifdef EBADRQC
+    case EBADRQC: return "bad request code";
+#endif
+#ifdef EBADSLT
+    case EBADSLT: return "invalid slot";
+#endif
+#ifdef EBFONT
+    case EBFONT: return "bad font file format";
+#endif
+#ifdef EBUSY
+    case EBUSY: return "mount device busy";
+#endif
+#ifdef ECHILD
+    case ECHILD: return "no children";
+#endif
+#ifdef ECHRNG
+    case ECHRNG: return "channel number out of range";
+#endif
+#ifdef ECOMM
+    case ECOMM: return "communication error on send";
+#endif
+#ifdef ECONNABORTED
+    case ECONNABORTED: return "software caused connection abort";
+#endif
+#ifdef ECONNREFUSED
+    case ECONNREFUSED: return "connection refused";
+#endif
+#ifdef ECONNRESET
+    case ECONNRESET: return "connection reset by peer";
+#endif
+#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
+    case EDEADLK: return "resource deadlock avoided";
+#endif
+#ifdef EDEADLOCK
+    case EDEADLOCK: return "resource deadlock avoided";
+#endif
+#ifdef EDESTADDRREQ
+    case EDESTADDRREQ: return "destination address required";
+#endif
+#ifdef EDIRTY
+    case EDIRTY: return "mounting a dirty fs w/o force";
+#endif
+#ifdef EDOM
+    case EDOM: return "math argument out of range";
+#endif
+#ifdef EDOTDOT
+    case EDOTDOT: return "cross mount point";
+#endif
+#ifdef EDQUOT
+    case EDQUOT: return "disk quota exceeded";
+#endif
+#ifdef EDUPPKG
+    case EDUPPKG: return "duplicate package name";
+#endif
+#ifdef EEXIST
+    case EEXIST: return "file already exists";
+#endif
+#ifdef EFAULT
+    case EFAULT: return "bad address in system call argument";
+#endif
+#ifdef EFBIG
+    case EFBIG: return "file too large";
+#endif
+#ifdef EHOSTDOWN
+    case EHOSTDOWN: return "host is down";
+#endif
+#ifdef EHOSTUNREACH
+    case EHOSTUNREACH: return "host is unreachable";
+#endif
+#ifdef EIDRM
+    case EIDRM: return "identifier removed";
+#endif
+#ifdef EINIT
+    case EINIT: return "initialization error";
+#endif
+#ifdef EINPROGRESS
+    case EINPROGRESS: return "operation now in progress";
+#endif
+#ifdef EINTR
+    case EINTR: return "interrupted system call";
+#endif
+#ifdef EINVAL
+    case EINVAL: return "invalid argument";
+#endif
+#ifdef EIO
+    case EIO: return "I/O error";
+#endif
+#ifdef EISCONN
+    case EISCONN: return "socket is already connected";
+#endif
+#ifdef EISDIR
+    case EISDIR: return "is a directory";
+#endif
+#ifdef EISNAME
+    case EISNAM: return "is a name file";
+#endif
+#ifdef ELBIN
+    case ELBIN: return "ELBIN";
+#endif
+#ifdef EL2HLT
+    case EL2HLT: return "level 2 halted";
+#endif
+#ifdef EL2NSYNC
+    case EL2NSYNC: return "level 2 not synchronized";
+#endif
+#ifdef EL3HLT
+    case EL3HLT: return "level 3 halted";
+#endif
+#ifdef EL3RST
+    case EL3RST: return "level 3 reset";
+#endif
+#ifdef ELIBACC
+    case ELIBACC: return "can not access a needed shared library";
+#endif
+#ifdef ELIBBAD
+    case ELIBBAD: return "accessing a corrupted shared library";
+#endif
+#ifdef ELIBEXEC
+    case ELIBEXEC: return "can not exec a shared library directly";
+#endif
+#ifdef ELIBMAX
+    case ELIBMAX: return "attempting to link in more shared libraries than system limit";
+#endif
+#ifdef ELIBSCN
+    case ELIBSCN: return ".lib section in a.out corrupted";
+#endif
+#ifdef ELNRNG
+    case ELNRNG: return "link number out of range";
+#endif
+#ifdef ELOOP
+    case ELOOP: return "too many levels of symbolic links";
+#endif
+#ifdef EMFILE
+    case EMFILE: return "too many open files";
+#endif
+#ifdef EMLINK
+    case EMLINK: return "too many links";
+#endif
+#ifdef EMSGSIZE
+    case EMSGSIZE: return "message too long";
+#endif
+#ifdef EMULTIHOP
+    case EMULTIHOP: return "multihop attempted";
+#endif
+#ifdef ENAMETOOLONG
+    case ENAMETOOLONG: return "file name too long";
+#endif
+#ifdef ENAVAIL
+    case ENAVAIL: return "not available";
+#endif
+#ifdef ENET
+    case ENET: return "ENET";
+#endif
+#ifdef ENETDOWN
+    case ENETDOWN: return "network is down";
+#endif
+#ifdef ENETRESET
+    case ENETRESET: return "network dropped connection on reset";
+#endif
+#ifdef ENETUNREACH
+    case ENETUNREACH: return "network is unreachable";
+#endif
+#ifdef ENFILE
+    case ENFILE: return "file table overflow";
+#endif
+#ifdef ENOANO
+    case ENOANO: return "anode table overflow";
+#endif
+#if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
+    case ENOBUFS: return "no buffer space available";
+#endif
+#ifdef ENOCSI
+    case ENOCSI: return "no CSI structure available";
+#endif
+#ifdef ENODATA
+    case ENODATA: return "no data available";
+#endif
+#ifdef ENODEV
+    case ENODEV: return "no such device";
+#endif
+#ifdef ENOENT
+    case ENOENT: return "no such file or directory";
+#endif
+#ifdef ENOEXEC
+    case ENOEXEC: return "exec format error";
+#endif
+#ifdef ENOLCK
+    case ENOLCK: return "no locks available";
+#endif
+#ifdef ENOLINK
+    case ENOLINK: return "link has be severed";
+#endif
+#ifdef ENOMEM
+    case ENOMEM: return "not enough memory";
+#endif
+#ifdef ENOMSG
+    case ENOMSG: return "no message of desired type";
+#endif
+#ifdef ENONET
+    case ENONET: return "machine is not on the network";
+#endif
+#ifdef ENOPKG
+    case ENOPKG: return "package not installed";
+#endif
+#ifdef ENOPROTOOPT
+    case ENOPROTOOPT: return "bad proocol option";
+#endif
+#ifdef ENOSPC
+    case ENOSPC: return "no space left on device";
+#endif
+#ifdef ENOSR
+    case ENOSR: return "out of stream resources";
+#endif
+#ifdef ENOSTR
+    case ENOSTR: return "not a stream device";
+#endif
+#ifdef ENOSYM
+    case ENOSYM: return "unresolved symbol name";
+#endif
+#ifdef ENOSYS
+    case ENOSYS: return "function not implemented";
+#endif
+#ifdef ENOTBLK
+    case ENOTBLK: return "block device required";
+#endif
+#ifdef ENOTCONN
+    case ENOTCONN: return "socket is not connected";
+#endif
+#ifdef ENOTDIR
+    case ENOTDIR: return "not a directory";
+#endif
+#ifdef ENOTEMPTY
+    case ENOTEMPTY: return "directory not empty";
+#endif
+#ifdef ENOTNAM
+    case ENOTNAM: return "not a name file";
+#endif
+#ifdef ENOTSOCK
+    case ENOTSOCK: return "socket operation on non-socket";
+#endif
+#ifdef ENOTTY
+    case ENOTTY: return "inappropriate device for ioctl";
+#endif
+#ifdef ENOTUNIQ
+    case ENOTUNIQ: return "name not unique on network";
+#endif
+#ifdef ENXIO
+    case ENXIO: return "no such device or address";
+#endif
+#ifdef EOPNOTSUPP
+    case EOPNOTSUPP: return "operation not supported on socket";
+#endif
+#ifdef EPERM
+    case EPERM: return "not owner";
+#endif
+#ifdef EPFNOSUPPORT
+    case EPFNOSUPPORT: return "protocol family not supported";
+#endif
+#ifdef EPIPE
+    case EPIPE: return "broken pipe";
+#endif
+#ifdef EPROCLIM
+    case EPROCLIM: return "too many processes";
+#endif
+#ifdef EPROCUNAVAIL
+    case EPROCUNAVAIL: return "bad procedure for program";
+#endif
+#ifdef EPROGMISMATCH
+    case EPROGMISMATCH: return "program version wrong";
+#endif
+#ifdef EPROGUNAVAIL
+    case EPROGUNAVAIL: return "RPC program not available";
+#endif
+#ifdef EPROTO
+    case EPROTO: return "protocol error";
+#endif
+#ifdef EPROTONOSUPPORT
+    case EPROTONOSUPPORT: return "protocol not suppored";
+#endif
+#ifdef EPROTOTYPE
+    case EPROTOTYPE: return "protocol wrong type for socket";
+#endif
+#ifdef ERANGE
+    case ERANGE: return "math result unrepresentable";
+#endif
+#if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
+    case EREFUSED: return "EREFUSED";
+#endif
+#ifdef EREMCHG
+    case EREMCHG: return "remote address changed";
+#endif
+#ifdef EREMDEV
+    case EREMDEV: return "remote device";
+#endif
+#ifdef EREMOTE
+    case EREMOTE: return "pathname hit remote file system";
+#endif
+#ifdef EREMOTEIO
+    case EREMOTEIO: return "remote i/o error";
+#endif
+#ifdef EREMOTERELEASE
+    case EREMOTERELEASE: return "EREMOTERELEASE";
+#endif
+#ifdef EROFS
+    case EROFS: return "read-only file system";
+#endif
+#ifdef ERPCMISMATCH
+    case ERPCMISMATCH: return "RPC version is wrong";
+#endif
+#ifdef ERREMOTE
+    case ERREMOTE: return "object is remote";
+#endif
+#ifdef ESHUTDOWN
+    case ESHUTDOWN: return "can't send afer socket shutdown";
+#endif
+#ifdef ESOCKTNOSUPPORT
+    case ESOCKTNOSUPPORT: return "socket type not supported";
+#endif
+#ifdef ESPIPE
+    case ESPIPE: return "invalid seek";
+#endif
+#ifdef ESRCH
+    case ESRCH: return "no such process";
+#endif
+#ifdef ESRMNT
+    case ESRMNT: return "srmount error";
+#endif
+#ifdef ESTALE
+    case ESTALE: return "stale remote file handle";
+#endif
+#ifdef ESUCCESS
+    case ESUCCESS: return "Error 0";
+#endif
+#ifdef ETIME
+    case ETIME: return "timer expired";
+#endif
+#ifdef ETIMEDOUT
+    case ETIMEDOUT: return "connection timed out";
+#endif
+#ifdef ETOOMANYREFS
+    case ETOOMANYREFS: return "too many references: can't splice";
+#endif
+#ifdef ETXTBSY
+    case ETXTBSY: return "text file or pseudo-device busy";
+#endif
+#ifdef EUCLEAN
+    case EUCLEAN: return "structure needs cleaning";
+#endif
+#ifdef EUNATCH
+    case EUNATCH: return "protocol driver not attached";
+#endif
+#ifdef EUSERS
+    case EUSERS: return "too many users";
+#endif
+#ifdef EVERSION
+    case EVERSION: return "version mismatch";
+#endif
+#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
+    case EWOULDBLOCK: return "operation would block";
+#endif
+#ifdef EXDEV
+    case EXDEV: return "cross-domain link";
+#endif
+#ifdef EXFULL
+    case EXFULL: return "message tables full";
+#endif
+    }
+#else /* NO_SYS_ERRLIST */
+  extern int sys_nerr;
+  extern char *sys_errlist[];
+
+  if ((errnum > 0) && (errnum <= sys_nerr))
+    return sys_errlist [errnum];
+#endif /* NO_SYS_ERRLIST */
+
+  msg = g_static_private_get (&msg_private);
+  if (!msg)
+    {
+      msg = g_new (gchar, 64);
+      g_static_private_set (&msg_private, msg, g_free);
+    }
+
+  _g_sprintf (msg, "unknown error (%d)", errnum);
+
+  errno = saved_errno;
+  return msg;
+}
+
+/**
+ * g_strsignal:
+ * @signum: the signal number. See the <literal>signal</literal>
+ *     documentation
+ *
+ * Returns a string describing the given signal, e.g. "Segmentation fault".
+ * You should use this function in preference to strsignal(), because it 
+ * returns a string in UTF-8 encoding, and since not all platforms support
+ * the strsignal() function.
+ *
+ * Returns: a UTF-8 string describing the signal. If the signal is unknown,
+ *     it returns "unknown signal (&lt;signum&gt;)". The string can only be 
+ *     used until the next call to g_strsignal()
+ */ 
+G_CONST_RETURN gchar*
+g_strsignal (gint signum)
+{
+  static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT;
+  char *msg;
+
+#ifdef HAVE_STRSIGNAL
+  const char *msg_locale;
+  
+#if defined(G_OS_BEOS) || defined(G_WITH_CYGWIN)
+extern const char *strsignal(int);
+#else
+  /* this is declared differently (const) in string.h on BeOS */
+  extern char *strsignal (int sig);
+#endif /* !G_OS_BEOS && !G_WITH_CYGWIN */
+  msg_locale = strsignal (signum);
+  if (g_get_charset (NULL))
+    return msg_locale;
+  else
+    {
+      gchar *msg_utf8 = g_locale_to_utf8 (msg_locale, -1, NULL, NULL, NULL);
+      if (msg_utf8)
+	{
+	  /* Stick in the quark table so that we can return a static result
+	   */
+	  GQuark msg_quark = g_quark_from_string (msg_utf8);
+	  g_free (msg_utf8);
+	  
+	  return g_quark_to_string (msg_quark);
+	}
+    }
+#elif NO_SYS_SIGLIST
+  switch (signum)
+    {
+#ifdef SIGHUP
+    case SIGHUP: return "Hangup";
+#endif
+#ifdef SIGINT
+    case SIGINT: return "Interrupt";
+#endif
+#ifdef SIGQUIT
+    case SIGQUIT: return "Quit";
+#endif
+#ifdef SIGILL
+    case SIGILL: return "Illegal instruction";
+#endif
+#ifdef SIGTRAP
+    case SIGTRAP: return "Trace/breakpoint trap";
+#endif
+#ifdef SIGABRT
+    case SIGABRT: return "IOT trap/Abort";
+#endif
+#ifdef SIGBUS
+    case SIGBUS: return "Bus error";
+#endif
+#ifdef SIGFPE
+    case SIGFPE: return "Floating point exception";
+#endif
+#ifdef SIGKILL
+    case SIGKILL: return "Killed";
+#endif
+#ifdef SIGUSR1
+    case SIGUSR1: return "User defined signal 1";
+#endif
+#ifdef SIGSEGV
+    case SIGSEGV: return "Segmentation fault";
+#endif
+#ifdef SIGUSR2
+    case SIGUSR2: return "User defined signal 2";
+#endif
+#ifdef SIGPIPE
+    case SIGPIPE: return "Broken pipe";
+#endif
+#ifdef SIGALRM
+    case SIGALRM: return "Alarm clock";
+#endif
+#ifdef SIGTERM
+    case SIGTERM: return "Terminated";
+#endif
+#ifdef SIGSTKFLT
+    case SIGSTKFLT: return "Stack fault";
+#endif
+#ifdef SIGCHLD
+    case SIGCHLD: return "Child exited";
+#endif
+#ifdef SIGCONT
+    case SIGCONT: return "Continued";
+#endif
+#ifdef SIGSTOP
+    case SIGSTOP: return "Stopped (signal)";
+#endif
+#ifdef SIGTSTP
+    case SIGTSTP: return "Stopped";
+#endif
+#ifdef SIGTTIN
+    case SIGTTIN: return "Stopped (tty input)";
+#endif
+#ifdef SIGTTOU
+    case SIGTTOU: return "Stopped (tty output)";
+#endif
+#ifdef SIGURG
+    case SIGURG: return "Urgent condition";
+#endif
+#ifdef SIGXCPU
+    case SIGXCPU: return "CPU time limit exceeded";
+#endif
+#ifdef SIGXFSZ
+    case SIGXFSZ: return "File size limit exceeded";
+#endif
+#ifdef SIGVTALRM
+    case SIGVTALRM: return "Virtual time alarm";
+#endif
+#ifdef SIGPROF
+    case SIGPROF: return "Profile signal";
+#endif
+#ifdef SIGWINCH
+    case SIGWINCH: return "Window size changed";
+#endif
+#ifdef SIGIO
+    case SIGIO: return "Possible I/O";
+#endif
+#ifdef SIGPWR
+    case SIGPWR: return "Power failure";
+#endif
+#ifdef SIGUNUSED
+    case SIGUNUSED: return "Unused signal";
+#endif
+    }
+#else /* NO_SYS_SIGLIST */
+
+#ifdef NO_SYS_SIGLIST_DECL
+  extern char *sys_siglist[];	/*(see Tue Jan 19 00:44:24 1999 in changelog)*/
+#endif
+
+  return (char*) /* this function should return const --josh */ sys_siglist [signum];
+#endif /* NO_SYS_SIGLIST */
+
+  msg = g_static_private_get (&msg_private);
+  if (!msg)
+    {
+      msg = g_new (gchar, 64);
+      g_static_private_set (&msg_private, msg, g_free);
+    }
+
+  _g_sprintf (msg, "unknown signal (%d)", signum);
+  
+  return msg;
+}
+
+/* Functions g_strlcpy and g_strlcat were originally developed by
+ * Todd C. Miller <Todd.Miller@courtesan.com> to simplify writing secure code.
+ * See ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3
+ * for more information.
+ */
+
+#ifdef HAVE_STRLCPY
+/* Use the native ones, if available; they might be implemented in assembly */
+gsize
+g_strlcpy (gchar       *dest,
+	   const gchar *src,
+	   gsize        dest_size)
+{
+  g_return_val_if_fail (dest != NULL, 0);
+  g_return_val_if_fail (src  != NULL, 0);
+  
+  return strlcpy (dest, src, dest_size);
+}
+
+gsize
+g_strlcat (gchar       *dest,
+	   const gchar *src,
+	   gsize        dest_size)
+{
+  g_return_val_if_fail (dest != NULL, 0);
+  g_return_val_if_fail (src  != NULL, 0);
+  
+  return strlcat (dest, src, dest_size);
+}
+
+#else /* ! HAVE_STRLCPY */
+/**
+ * g_strlcpy:
+ * @dest: destination buffer
+ * @src: source buffer
+ * @dest_size: length of @dest in bytes
+ * 
+ * Portability wrapper that calls strlcpy() on systems which have it, 
+ * and emulates strlcpy() otherwise. Copies @src to @dest; @dest is 
+ * guaranteed to be nul-terminated; @src must be nul-terminated; 
+ * @dest_size is the buffer size, not the number of chars to copy. 
+ *
+ * At most dest_size - 1 characters will be copied. Always nul-terminates
+ * (unless dest_size == 0). This function does <emphasis>not</emphasis> 
+ * allocate memory. Unlike strncpy(), this function doesn't pad dest (so 
+ * it's often faster). It returns the size of the attempted result, 
+ * strlen (src), so if @retval >= @dest_size, truncation occurred.
+ * 
+ * <note><para>Caveat: strlcpy() is supposedly more secure than
+ * strcpy() or strncpy(), but if you really want to avoid screwups, 
+ * g_strdup() is an even better idea.</para></note>
+ *
+ * Returns: length of @src
+ */
+gsize
+g_strlcpy (gchar       *dest,
+           const gchar *src,
+           gsize        dest_size)
+{
+  register gchar *d = dest;
+  register const gchar *s = src;
+  register gsize n = dest_size;
+  
+  g_return_val_if_fail (dest != NULL, 0);
+  g_return_val_if_fail (src  != NULL, 0);
+  
+  /* Copy as many bytes as will fit */
+  if (n != 0 && --n != 0)
+    do
+      {
+	register gchar c = *s++;
+	
+	*d++ = c;
+	if (c == 0)
+	  break;
+      }
+    while (--n != 0);
+  
+  /* If not enough room in dest, add NUL and traverse rest of src */
+  if (n == 0)
+    {
+      if (dest_size != 0)
+	*d = 0;
+      while (*s++)
+	;
+    }
+  
+  return s - src - 1;  /* count does not include NUL */
+}
+
+/**
+ * g_strlcat:
+ * @dest: destination buffer, already containing one nul-terminated string
+ * @src: source buffer
+ * @dest_size: length of @dest buffer in bytes (not length of existing string 
+ *     inside @dest)
+ *
+ * Portability wrapper that calls strlcat() on systems which have it, 
+ * and emulates it otherwise. Appends nul-terminated @src string to @dest, 
+ * guaranteeing nul-termination for @dest. The total size of @dest won't 
+ * exceed @dest_size. 
+ *
+ * At most dest_size - 1 characters will be copied.
+ * Unlike strncat, dest_size is the full size of dest, not the space left over.
+ * This function does NOT allocate memory.
+ * This always NUL terminates (unless siz == 0 or there were no NUL characters
+ * in the dest_size characters of dest to start with).
+ * Returns size of attempted result, which is
+ * MIN (dest_size, strlen (original dest)) + strlen (src),
+ * so if retval >= dest_size, truncation occurred.
+ *
+ * <note><para>Caveat: this is supposedly a more secure alternative to 
+ * strcat() or strncat(), but for real security g_strconcat() is harder 
+ * to mess up.</para></note>
+ *
+ */
+gsize
+g_strlcat (gchar       *dest,
+           const gchar *src,
+           gsize        dest_size)
+{
+  register gchar *d = dest;
+  register const gchar *s = src;
+  register gsize bytes_left = dest_size;
+  gsize dlength;  /* Logically, MIN (strlen (d), dest_size) */
+  
+  g_return_val_if_fail (dest != NULL, 0);
+  g_return_val_if_fail (src  != NULL, 0);
+  
+  /* Find the end of dst and adjust bytes left but don't go past end */
+  while (*d != 0 && bytes_left-- != 0)
+    d++;
+  dlength = d - dest;
+  bytes_left = dest_size - dlength;
+  
+  if (bytes_left == 0)
+    return dlength + strlen (s);
+  
+  while (*s != 0)
+    {
+      if (bytes_left != 1)
+	{
+	  *d++ = *s;
+	  bytes_left--;
+	}
+      s++;
+    }
+  *d = 0;
+  
+  return dlength + (s - src);  /* count does not include NUL */
+}
+#endif /* ! HAVE_STRLCPY */
+
+/**
+ * g_ascii_strdown:
+ * @str: a string.
+ * @len: length of @str in bytes, or -1 if @str is nul-terminated.
+ * 
+ * Converts all upper case ASCII letters to lower case ASCII letters.
+ * 
+ * Return value: a newly-allocated string, with all the upper case
+ *               characters in @str converted to lower case, with
+ *               semantics that exactly match g_ascii_tolower(). (Note
+ *               that this is unlike the old g_strdown(), which modified
+ *               the string in place.)
+ **/
+gchar*
+g_ascii_strdown (const gchar *str,
+		 gssize       len)
+{
+  gchar *result, *s;
+  
+  g_return_val_if_fail (str != NULL, NULL);
+
+  if (len < 0)
+    len = strlen (str);
+
+  result = g_strndup (str, len);
+  for (s = result; *s; s++)
+    *s = g_ascii_tolower (*s);
+  
+  return result;
+}
+
+/**
+ * g_ascii_strup:
+ * @str: a string.
+ * @len: length of @str in bytes, or -1 if @str is nul-terminated.
+ * 
+ * Converts all lower case ASCII letters to upper case ASCII letters.
+ * 
+ * Return value: a newly allocated string, with all the lower case
+ *               characters in @str converted to upper case, with
+ *               semantics that exactly match g_ascii_toupper(). (Note
+ *               that this is unlike the old g_strup(), which modified
+ *               the string in place.)
+ **/
+gchar*
+g_ascii_strup (const gchar *str,
+	       gssize       len)
+{
+  gchar *result, *s;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  if (len < 0)
+    len = strlen (str);
+
+  result = g_strndup (str, len);
+  for (s = result; *s; s++)
+    *s = g_ascii_toupper (*s);
+
+  return result;
+}
+
+/**
+ * g_strdown:
+ * @string: the string to convert.
+ * 
+ * Converts a string to lower case.  
+ * 
+ * Return value: the string 
+ *
+ * Deprecated:2.2: This function is totally broken for the reasons discussed 
+ * in the g_strncasecmp() docs - use g_ascii_strdown() or g_utf8_strdown() 
+ * instead.
+ **/
+gchar*
+g_strdown (gchar *string)
+{
+  register guchar *s;
+  
+  g_return_val_if_fail (string != NULL, NULL);
+  
+  s = (guchar *) string;
+  
+  while (*s)
+    {
+      if (isupper (*s))
+	*s = tolower (*s);
+      s++;
+    }
+  
+  return (gchar *) string;
+}
+
+/**
+ * g_strup:
+ * @string: the string to convert.
+ * 
+ * Converts a string to upper case. 
+ * 
+ * Return value: the string
+ *
+ * Deprecated:2.2: This function is totally broken for the reasons discussed 
+ * in the g_strncasecmp() docs - use g_ascii_strup() or g_utf8_strup() instead.
+ **/
+gchar*
+g_strup (gchar *string)
+{
+  register guchar *s;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  s = (guchar *) string;
+
+  while (*s)
+    {
+      if (islower (*s))
+	*s = toupper (*s);
+      s++;
+    }
+
+  return (gchar *) string;
+}
+
+/**
+ * g_strreverse:
+ * @string: the string to reverse 
+ *
+ * Reverses all of the bytes in a string. For example, 
+ * <literal>g_strreverse ("abcdef")</literal> will result 
+ * in "fedcba".
+ * 
+ * Note that g_strreverse() doesn't work on UTF-8 strings 
+ * containing multibyte characters. For that purpose, use 
+ * g_utf8_strreverse().
+ * 
+ * Returns: the same pointer passed in as @string
+ */
+gchar*
+g_strreverse (gchar *string)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+
+  if (*string)
+    {
+      register gchar *h, *t;
+
+      h = string;
+      t = string + strlen (string) - 1;
+
+      while (h < t)
+	{
+	  register gchar c;
+
+	  c = *h;
+	  *h = *t;
+	  h++;
+	  *t = c;
+	  t--;
+	}
+    }
+
+  return string;
+}
+
+/**
+ * g_ascii_tolower:
+ * @c: any character.
+ * 
+ * Convert a character to ASCII lower case.
+ *
+ * Unlike the standard C library tolower() function, this only
+ * recognizes standard ASCII letters and ignores the locale, returning
+ * all non-ASCII characters unchanged, even if they are lower case
+ * letters in a particular character set. Also unlike the standard
+ * library function, this takes and returns a char, not an int, so
+ * don't call it on %EOF but no need to worry about casting to #guchar
+ * before passing a possibly non-ASCII character in.
+ * 
+ * Return value: the result of converting @c to lower case.
+ *               If @c is not an ASCII upper case letter,
+ *               @c is returned unchanged.
+ **/
+gchar
+g_ascii_tolower (gchar c)
+{
+  return g_ascii_isupper (c) ? c - 'A' + 'a' : c;
+}
+
+/**
+ * g_ascii_toupper:
+ * @c: any character.
+ * 
+ * Convert a character to ASCII upper case.
+ *
+ * Unlike the standard C library toupper() function, this only
+ * recognizes standard ASCII letters and ignores the locale, returning
+ * all non-ASCII characters unchanged, even if they are upper case
+ * letters in a particular character set. Also unlike the standard
+ * library function, this takes and returns a char, not an int, so
+ * don't call it on %EOF but no need to worry about casting to #guchar
+ * before passing a possibly non-ASCII character in.
+ * 
+ * Return value: the result of converting @c to upper case.
+ *               If @c is not an ASCII lower case letter,
+ *               @c is returned unchanged.
+ **/
+gchar
+g_ascii_toupper (gchar c)
+{
+  return g_ascii_islower (c) ? c - 'a' + 'A' : c;
+}
+
+/**
+ * g_ascii_digit_value:
+ * @c: an ASCII character.
+ *
+ * Determines the numeric value of a character as a decimal
+ * digit. Differs from g_unichar_digit_value() because it takes
+ * a char, so there's no worry about sign extension if characters
+ * are signed.
+ *
+ * Return value: If @c is a decimal digit (according to
+ * g_ascii_isdigit()), its numeric value. Otherwise, -1.
+ **/
+int
+g_ascii_digit_value (gchar c)
+{
+  if (g_ascii_isdigit (c))
+    return c - '0';
+  return -1;
+}
+
+/**
+ * g_ascii_xdigit_value:
+ * @c: an ASCII character.
+ *
+ * Determines the numeric value of a character as a hexidecimal
+ * digit. Differs from g_unichar_xdigit_value() because it takes
+ * a char, so there's no worry about sign extension if characters
+ * are signed.
+ *
+ * Return value: If @c is a hex digit (according to
+ * g_ascii_isxdigit()), its numeric value. Otherwise, -1.
+ **/
+int
+g_ascii_xdigit_value (gchar c)
+{
+  if (c >= 'A' && c <= 'F')
+    return c - 'A' + 10;
+  if (c >= 'a' && c <= 'f')
+    return c - 'a' + 10;
+  return g_ascii_digit_value (c);
+}
+
+/**
+ * g_ascii_strcasecmp:
+ * @s1: string to compare with @s2.
+ * @s2: string to compare with @s1.
+ * 
+ * Compare two strings, ignoring the case of ASCII characters.
+ *
+ * Unlike the BSD strcasecmp() function, this only recognizes standard
+ * ASCII letters and ignores the locale, treating all non-ASCII
+ * bytes as if they are not letters.
+ *
+ * This function should be used only on strings that are known to be
+ * in encodings where the bytes corresponding to ASCII letters always
+ * represent themselves. This includes UTF-8 and the ISO-8859-*
+ * charsets, but not for instance double-byte encodings like the
+ * Windows Codepage 932, where the trailing bytes of double-byte
+ * characters include all ASCII letters. If you compare two CP932
+ * strings using this function, you will get false matches.
+ *
+ * Return value: 0 if the strings match, a negative value if @s1 &lt; @s2, 
+ *   or a positive value if @s1 &gt; @s2.
+ **/
+gint
+g_ascii_strcasecmp (const gchar *s1,
+		    const gchar *s2)
+{
+  gint c1, c2;
+
+  g_return_val_if_fail (s1 != NULL, 0);
+  g_return_val_if_fail (s2 != NULL, 0);
+
+  while (*s1 && *s2)
+    {
+      c1 = (gint)(guchar) TOLOWER (*s1);
+      c2 = (gint)(guchar) TOLOWER (*s2);
+      if (c1 != c2)
+	return (c1 - c2);
+      s1++; s2++;
+    }
+
+  return (((gint)(guchar) *s1) - ((gint)(guchar) *s2));
+}
+
+/**
+ * g_ascii_strncasecmp:
+ * @s1: string to compare with @s2.
+ * @s2: string to compare with @s1.
+ * @n:  number of characters to compare.
+ * 
+ * Compare @s1 and @s2, ignoring the case of ASCII characters and any
+ * characters after the first @n in each string.
+ *
+ * Unlike the BSD strcasecmp() function, this only recognizes standard
+ * ASCII letters and ignores the locale, treating all non-ASCII
+ * characters as if they are not letters.
+ * 
+ * The same warning as in g_ascii_strcasecmp() applies: Use this
+ * function only on strings known to be in encodings where bytes
+ * corresponding to ASCII letters always represent themselves.
+ *
+ * Return value: 0 if the strings match, a negative value if @s1 &lt; @s2, 
+ *   or a positive value if @s1 &gt; @s2.
+ **/
+gint
+g_ascii_strncasecmp (const gchar *s1,
+		     const gchar *s2,
+		     gsize n)
+{
+  gint c1, c2;
+
+  g_return_val_if_fail (s1 != NULL, 0);
+  g_return_val_if_fail (s2 != NULL, 0);
+
+  while (n && *s1 && *s2)
+    {
+      n -= 1;
+      c1 = (gint)(guchar) TOLOWER (*s1);
+      c2 = (gint)(guchar) TOLOWER (*s2);
+      if (c1 != c2)
+	return (c1 - c2);
+      s1++; s2++;
+    }
+
+  if (n)
+    return (((gint) (guchar) *s1) - ((gint) (guchar) *s2));
+  else
+    return 0;
+}
+
+/**
+ * g_strcasecmp:
+ * @s1: a string.
+ * @s2: a string to compare with @s1.
+ * 
+ * A case-insensitive string comparison, corresponding to the standard
+ * strcasecmp() function on platforms which support it.
+ *
+ * Return value: 0 if the strings match, a negative value if @s1 &lt; @s2, 
+ *   or a positive value if @s1 &gt; @s2.
+ *
+ * Deprecated:2.2: See g_strncasecmp() for a discussion of why this function 
+ *   is deprecated and how to replace it.
+ **/
+gint
+g_strcasecmp (const gchar *s1,
+	      const gchar *s2)
+{
+#ifdef HAVE_STRCASECMP
+  g_return_val_if_fail (s1 != NULL, 0);
+  g_return_val_if_fail (s2 != NULL, 0);
+
+  return strcasecmp (s1, s2);
+#else
+  gint c1, c2;
+
+  g_return_val_if_fail (s1 != NULL, 0);
+  g_return_val_if_fail (s2 != NULL, 0);
+
+  while (*s1 && *s2)
+    {
+      /* According to A. Cox, some platforms have islower's that
+       * don't work right on non-uppercase
+       */
+      c1 = isupper ((guchar)*s1) ? tolower ((guchar)*s1) : *s1;
+      c2 = isupper ((guchar)*s2) ? tolower ((guchar)*s2) : *s2;
+      if (c1 != c2)
+	return (c1 - c2);
+      s1++; s2++;
+    }
+
+  return (((gint)(guchar) *s1) - ((gint)(guchar) *s2));
+#endif
+}
+
+/**
+ * g_strncasecmp:
+ * @s1: a string.
+ * @s2: a string to compare with @s1.
+ * @n: the maximum number of characters to compare.
+ * 
+ * A case-insensitive string comparison, corresponding to the standard
+ * strncasecmp() function on platforms which support it.
+ * It is similar to g_strcasecmp() except it only compares the first @n 
+ * characters of the strings.
+ * 
+ * Return value: 0 if the strings match, a negative value if @s1 &lt; @s2, 
+ *   or a positive value if @s1 &gt; @s2.
+ *
+ * Deprecated:2.2: The problem with g_strncasecmp() is that it does the 
+ * comparison by calling toupper()/tolower(). These functions are
+ * locale-specific and operate on single bytes. However, it is impossible
+ * to handle things correctly from an I18N standpoint by operating on
+ * bytes, since characters may be multibyte. Thus g_strncasecmp() is
+ * broken if your string is guaranteed to be ASCII, since it's
+ * locale-sensitive, and it's broken if your string is localized, since
+ * it doesn't work on many encodings at all, including UTF-8, EUC-JP,
+ * etc.
+ *
+ * There are therefore two replacement functions: g_ascii_strncasecmp(),
+ * which only works on ASCII and is not locale-sensitive, and
+ * g_utf8_casefold(), which is good for case-insensitive sorting of UTF-8.
+ **/
+gint
+g_strncasecmp (const gchar *s1,
+	       const gchar *s2,
+	       guint n)     
+{
+#ifdef HAVE_STRNCASECMP
+  return strncasecmp (s1, s2, n);
+#else
+  gint c1, c2;
+
+  g_return_val_if_fail (s1 != NULL, 0);
+  g_return_val_if_fail (s2 != NULL, 0);
+
+  while (n && *s1 && *s2)
+    {
+      n -= 1;
+      /* According to A. Cox, some platforms have islower's that
+       * don't work right on non-uppercase
+       */
+      c1 = isupper ((guchar)*s1) ? tolower ((guchar)*s1) : *s1;
+      c2 = isupper ((guchar)*s2) ? tolower ((guchar)*s2) : *s2;
+      if (c1 != c2)
+	return (c1 - c2);
+      s1++; s2++;
+    }
+
+  if (n)
+    return (((gint) (guchar) *s1) - ((gint) (guchar) *s2));
+  else
+    return 0;
+#endif
+}
+
+gchar*
+g_strdelimit (gchar	  *string,
+	      const gchar *delimiters,
+	      gchar	   new_delim)
+{
+  register gchar *c;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  if (!delimiters)
+    delimiters = G_STR_DELIMITERS;
+
+  for (c = string; *c; c++)
+    {
+      if (strchr (delimiters, *c))
+	*c = new_delim;
+    }
+
+  return string;
+}
+
+gchar*
+g_strcanon (gchar       *string,
+	    const gchar *valid_chars,
+	    gchar        substitutor)
+{
+  register gchar *c;
+
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (valid_chars != NULL, NULL);
+
+  for (c = string; *c; c++)
+    {
+      if (!strchr (valid_chars, *c))
+	*c = substitutor;
+    }
+
+  return string;
+}
+
+gchar*
+g_strcompress (const gchar *source)
+{
+  const gchar *p = source, *octal;
+  gchar *dest = g_malloc (strlen (source) + 1);
+  gchar *q = dest;
+  
+  while (*p)
+    {
+      if (*p == '\\')
+	{
+	  p++;
+	  switch (*p)
+	    {
+	    case '\0':
+	      g_warning ("g_strcompress: trailing \\");
+	      goto out;
+	    case '0':  case '1':  case '2':  case '3':  case '4':
+	    case '5':  case '6':  case '7':
+	      *q = 0;
+	      octal = p;
+	      while ((p < octal + 3) && (*p >= '0') && (*p <= '7'))
+		{
+		  *q = (*q * 8) + (*p - '0');
+		  p++;
+		}
+	      q++;
+	      p--;
+	      break;
+	    case 'b':
+	      *q++ = '\b';
+	      break;
+	    case 'f':
+	      *q++ = '\f';
+	      break;
+	    case 'n':
+	      *q++ = '\n';
+	      break;
+	    case 'r':
+	      *q++ = '\r';
+	      break;
+	    case 't':
+	      *q++ = '\t';
+	      break;
+	    default:		/* Also handles \" and \\ */
+	      *q++ = *p;
+	      break;
+	    }
+	}
+      else
+	*q++ = *p;
+      p++;
+    }
+out:
+  *q = 0;
+  
+  return dest;
+}
+
+gchar *
+g_strescape (const gchar *source,
+	     const gchar *exceptions)
+{
+  const guchar *p;
+  gchar *dest;
+  gchar *q;
+  guchar excmap[256];
+  
+  g_return_val_if_fail (source != NULL, NULL);
+
+  p = (guchar *) source;
+  /* Each source byte needs maximally four destination chars (\777) */
+  q = dest = g_malloc (strlen (source) * 4 + 1);
+
+  memset (excmap, 0, 256);
+  if (exceptions)
+    {
+      guchar *e = (guchar *) exceptions;
+
+      while (*e)
+	{
+	  excmap[*e] = 1;
+	  e++;
+	}
+    }
+
+  while (*p)
+    {
+      if (excmap[*p])
+	*q++ = *p;
+      else
+	{
+	  switch (*p)
+	    {
+	    case '\b':
+	      *q++ = '\\';
+	      *q++ = 'b';
+	      break;
+	    case '\f':
+	      *q++ = '\\';
+	      *q++ = 'f';
+	      break;
+	    case '\n':
+	      *q++ = '\\';
+	      *q++ = 'n';
+	      break;
+	    case '\r':
+	      *q++ = '\\';
+	      *q++ = 'r';
+	      break;
+	    case '\t':
+	      *q++ = '\\';
+	      *q++ = 't';
+	      break;
+	    case '\\':
+	      *q++ = '\\';
+	      *q++ = '\\';
+	      break;
+	    case '"':
+	      *q++ = '\\';
+	      *q++ = '"';
+	      break;
+	    default:
+	      if ((*p < ' ') || (*p >= 0177))
+		{
+		  *q++ = '\\';
+		  *q++ = '0' + (((*p) >> 6) & 07);
+		  *q++ = '0' + (((*p) >> 3) & 07);
+		  *q++ = '0' + ((*p) & 07);
+		}
+	      else
+		*q++ = *p;
+	      break;
+	    }
+	}
+      p++;
+    }
+  *q = 0;
+  return dest;
+}
+
+gchar*
+g_strchug (gchar *string)
+{
+  guchar *start;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  for (start = (guchar*) string; *start && g_ascii_isspace (*start); start++)
+    ;
+
+  g_memmove (string, start, strlen ((gchar *) start) + 1);
+
+  return string;
+}
+
+gchar*
+g_strchomp (gchar *string)
+{
+  gsize len;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  len = strlen (string);
+  while (len--)
+    {
+      if (g_ascii_isspace ((guchar) string[len]))
+	string[len] = '\0';
+      else
+	break;
+    }
+
+  return string;
+}
+
+/**
+ * g_strsplit:
+ * @string: a string to split.
+ * @delimiter: a string which specifies the places at which to split the string.
+ *     The delimiter is not included in any of the resulting strings, unless
+ *     @max_tokens is reached.
+ * @max_tokens: the maximum number of pieces to split @string into. If this is
+ *              less than 1, the string is split completely.
+ * 
+ * Splits a string into a maximum of @max_tokens pieces, using the given
+ * @delimiter. If @max_tokens is reached, the remainder of @string is appended
+ * to the last token. 
+ *
+ * As a special case, the result of splitting the empty string "" is an empty
+ * vector, not a vector containing a single string. The reason for this
+ * special case is that being able to represent a empty vector is typically
+ * more useful than consistent handling of empty elements. If you do need
+ * to represent empty elements, you'll need to check for the empty string
+ * before calling g_strsplit().
+ * 
+ * Return value: a newly-allocated %NULL-terminated array of strings. Use 
+ *    g_strfreev() to free it.
+ **/
+gchar**
+g_strsplit (const gchar *string,
+	    const gchar *delimiter,
+	    gint         max_tokens)
+{
+  GSList *string_list = NULL, *slist;
+  gchar **str_array, *s;
+  guint n = 0;
+  const gchar *remainder;
+
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (delimiter != NULL, NULL);
+  g_return_val_if_fail (delimiter[0] != '\0', NULL);
+
+  if (max_tokens < 1)
+    max_tokens = G_MAXINT;
+
+  remainder = string;
+  s = strstr (remainder, delimiter);
+  if (s)
+    {
+      gsize delimiter_len = strlen (delimiter);   
+
+      while (--max_tokens && s)
+	{
+	  gsize len;     
+
+	  len = s - remainder;
+	  string_list = g_slist_prepend (string_list,
+					 g_strndup (remainder, len));
+	  n++;
+	  remainder = s + delimiter_len;
+	  s = strstr (remainder, delimiter);
+	}
+    }
+  if (*string)
+    {
+      n++;
+      string_list = g_slist_prepend (string_list, g_strdup (remainder));
+    }
+
+  str_array = g_new (gchar*, n + 1);
+
+  str_array[n--] = NULL;
+  for (slist = string_list; slist; slist = slist->next)
+    str_array[n--] = slist->data;
+
+  g_slist_free (string_list);
+
+  return str_array;
+}
+
+/**
+ * g_strsplit_set:
+ * @string: The string to be tokenized
+ * @delimiters: A nul-terminated string containing bytes that are used
+ *              to split the string.
+ * @max_tokens: The maximum number of tokens to split @string into. 
+ *              If this is less than 1, the string is split completely
+ * 
+ * Splits @string into a number of tokens not containing any of the characters
+ * in @delimiter. A token is the (possibly empty) longest string that does not
+ * contain any of the characters in @delimiters. If @max_tokens is reached, the
+ * remainder is appended to the last token.
+ *
+ * For example the result of g_strsplit_set ("abc:def/ghi", ":/", -1) is a
+ * %NULL-terminated vector containing the three strings "abc", "def", 
+ * and "ghi".
+ *
+ * The result if g_strsplit_set (":def/ghi:", ":/", -1) is a %NULL-terminated
+ * vector containing the four strings "", "def", "ghi", and "".
+ * 
+ * As a special case, the result of splitting the empty string "" is an empty
+ * vector, not a vector containing a single string. The reason for this
+ * special case is that being able to represent a empty vector is typically
+ * more useful than consistent handling of empty elements. If you do need
+ * to represent empty elements, you'll need to check for the empty string
+ * before calling g_strsplit_set().
+ *
+ * Note that this function works on bytes not characters, so it can't be used 
+ * to delimit UTF-8 strings for anything but ASCII characters.
+ * 
+ * Return value: a newly-allocated %NULL-terminated array of strings. Use 
+ *    g_strfreev() to free it.
+ * 
+ * Since: 2.4
+ **/
+gchar **
+g_strsplit_set (const gchar *string,
+	        const gchar *delimiters,
+	        gint         max_tokens)
+{
+  gboolean delim_table[256];
+  GSList *tokens, *list;
+  gint n_tokens;
+  const gchar *s;
+  const gchar *current;
+  gchar *token;
+  gchar **result;
+  
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (delimiters != NULL, NULL);
+
+  if (max_tokens < 1)
+    max_tokens = G_MAXINT;
+
+  if (*string == '\0')
+    {
+      result = g_new (char *, 1);
+      result[0] = NULL;
+      return result;
+    }
+  
+  memset (delim_table, FALSE, sizeof (delim_table));
+  for (s = delimiters; *s != '\0'; ++s)
+    delim_table[*(guchar *)s] = TRUE;
+
+  tokens = NULL;
+  n_tokens = 0;
+
+  s = current = string;
+  while (*s != '\0')
+    {
+      if (delim_table[*(guchar *)s] && n_tokens + 1 < max_tokens)
+	{
+	  token = g_strndup (current, s - current);
+	  tokens = g_slist_prepend (tokens, token);
+	  ++n_tokens;
+
+	  current = s + 1;
+	}
+      
+      ++s;
+    }
+
+  token = g_strndup (current, s - current);
+  tokens = g_slist_prepend (tokens, token);
+  ++n_tokens;
+
+  result = g_new (gchar *, n_tokens + 1);
+
+  result[n_tokens] = NULL;
+  for (list = tokens; list != NULL; list = list->next)
+    result[--n_tokens] = list->data;
+
+  g_slist_free (tokens);
+  
+  return result;
+}
+
+/**
+ * g_strfreev:
+ * @str_array: a %NULL-terminated array of strings to free.
+
+ * Frees a %NULL-terminated array of strings, and the array itself.
+ * If called on a %NULL value, g_strfreev() simply returns. 
+ **/
+void
+g_strfreev (gchar **str_array)
+{
+  if (str_array)
+    {
+      int i;
+
+      for (i = 0; str_array[i] != NULL; i++)
+	g_free (str_array[i]);
+
+      g_free (str_array);
+    }
+}
+
+/**
+ * g_strdupv:
+ * @str_array: %NULL-terminated array of strings.
+ * 
+ * Copies %NULL-terminated array of strings. The copy is a deep copy;
+ * the new array should be freed by first freeing each string, then
+ * the array itself. g_strfreev() does this for you. If called
+ * on a %NULL value, g_strdupv() simply returns %NULL.
+ * 
+ * Return value: a new %NULL-terminated array of strings.
+ **/
+gchar**
+g_strdupv (gchar **str_array)
+{
+  if (str_array)
+    {
+      gint i;
+      gchar **retval;
+
+      i = 0;
+      while (str_array[i])
+        ++i;
+          
+      retval = g_new (gchar*, i + 1);
+
+      i = 0;
+      while (str_array[i])
+        {
+          retval[i] = g_strdup (str_array[i]);
+          ++i;
+        }
+      retval[i] = NULL;
+
+      return retval;
+    }
+  else
+    return NULL;
+}
+
+/**
+ * g_strjoinv:
+ * @separator: a string to insert between each of the strings, or %NULL
+ * @str_array: a %NULL-terminated array of strings to join
+ * 
+ * Joins a number of strings together to form one long string, with the 
+ * optional @separator inserted between each of them. The returned string
+ * should be freed with g_free().
+ *
+ * Returns: a newly-allocated string containing all of the strings joined
+ *     together, with @separator between them
+ */
+gchar*
+g_strjoinv (const gchar  *separator,
+	    gchar       **str_array)
+{
+  gchar *string;
+  gchar *ptr;
+
+  g_return_val_if_fail (str_array != NULL, NULL);
+
+  if (separator == NULL)
+    separator = "";
+
+  if (*str_array)
+    {
+      gint i;
+      gsize len;
+      gsize separator_len;     
+
+      separator_len = strlen (separator);
+      /* First part, getting length */
+      len = 1 + strlen (str_array[0]);
+      for (i = 1; str_array[i] != NULL; i++)
+        len += strlen (str_array[i]);
+      len += separator_len * (i - 1);
+
+      /* Second part, building string */
+      string = g_new (gchar, len);
+      ptr = g_stpcpy (string, *str_array);
+      for (i = 1; str_array[i] != NULL; i++)
+	{
+          ptr = g_stpcpy (ptr, separator);
+          ptr = g_stpcpy (ptr, str_array[i]);
+	}
+      }
+  else
+    string = g_strdup ("");
+
+  return string;
+}
+
+/**
+ * g_strjoin:
+ * @separator: a string to insert between each of the strings, or %NULL
+ * @Varargs: a %NULL-terminated list of strings to join
+ *
+ * Joins a number of strings together to form one long string, with the 
+ * optional @separator inserted between each of them. The returned string
+ * should be freed with g_free().
+ *
+ * Returns: a newly-allocated string containing all of the strings joined
+ *     together, with @separator between them
+ */
+gchar*
+g_strjoin (const gchar  *separator,
+	   ...)
+{
+  gchar *string, *s;
+  va_list args;
+  gsize len;               
+  gsize separator_len;     
+  gchar *ptr;
+
+  if (separator == NULL)
+    separator = "";
+
+  separator_len = strlen (separator);
+
+  va_start (args, separator);
+
+  s = va_arg (args, gchar*);
+
+  if (s)
+    {
+      /* First part, getting length */
+      len = 1 + strlen (s);
+
+      s = va_arg (args, gchar*);
+      while (s)
+	{
+	  len += separator_len + strlen (s);
+	  s = va_arg (args, gchar*);
+	}
+      va_end (args);
+
+      /* Second part, building string */
+      string = g_new (gchar, len);
+
+      va_start (args, separator);
+
+      s = va_arg (args, gchar*);
+      ptr = g_stpcpy (string, s);
+
+      s = va_arg (args, gchar*);
+      while (s)
+	{
+	  ptr = g_stpcpy (ptr, separator);
+          ptr = g_stpcpy (ptr, s);
+	  s = va_arg (args, gchar*);
+	}
+    }
+  else
+    string = g_strdup ("");
+
+  va_end (args);
+
+  return string;
+}
+
+
+/**
+ * g_strstr_len:
+ * @haystack: a string.
+ * @haystack_len: the maximum length of @haystack. Note that -1 is
+ * a valid length, if @haystack is nul-terminated, meaning it will
+ * search through the whole string.
+ * @needle: the string to search for.
+ *
+ * Searches the string @haystack for the first occurrence
+ * of the string @needle, limiting the length of the search
+ * to @haystack_len. 
+ *
+ * Return value: a pointer to the found occurrence, or
+ *    %NULL if not found.
+ **/
+gchar *
+g_strstr_len (const gchar *haystack,
+	      gssize       haystack_len,
+	      const gchar *needle)
+{
+  g_return_val_if_fail (haystack != NULL, NULL);
+  g_return_val_if_fail (needle != NULL, NULL);
+
+  if (haystack_len < 0)
+    return strstr (haystack, needle);
+  else
+    {
+      const gchar *p = haystack;
+      gsize needle_len = strlen (needle);
+      const gchar *end;
+      gsize i;
+
+      if (needle_len == 0)
+	return (gchar *)haystack;
+
+      if (haystack_len < needle_len)
+	return NULL;
+      
+      end = haystack + haystack_len - needle_len;
+      
+      while (p <= end && *p)
+	{
+	  for (i = 0; i < needle_len; i++)
+	    if (p[i] != needle[i])
+	      goto next;
+	  
+	  return (gchar *)p;
+	  
+	next:
+	  p++;
+	}
+      
+      return NULL;
+    }
+}
+
+/**
+ * g_strrstr:
+ * @haystack: a nul-terminated string.
+ * @needle: the nul-terminated string to search for.
+ *
+ * Searches the string @haystack for the last occurrence
+ * of the string @needle.
+ *
+ * Return value: a pointer to the found occurrence, or
+ *    %NULL if not found.
+ **/
+gchar *
+g_strrstr (const gchar *haystack,
+	   const gchar *needle)
+{
+  gsize i;
+  gsize needle_len;
+  gsize haystack_len;
+  const gchar *p;
+      
+  g_return_val_if_fail (haystack != NULL, NULL);
+  g_return_val_if_fail (needle != NULL, NULL);
+
+  needle_len = strlen (needle);
+  haystack_len = strlen (haystack);
+
+  if (needle_len == 0)
+    return (gchar *)haystack;
+
+  if (haystack_len < needle_len)
+    return NULL;
+  
+  p = haystack + haystack_len - needle_len;
+
+  while (p >= haystack)
+    {
+      for (i = 0; i < needle_len; i++)
+	if (p[i] != needle[i])
+	  goto next;
+      
+      return (gchar *)p;
+      
+    next:
+      p--;
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_strrstr_len:
+ * @haystack: a nul-terminated string.
+ * @haystack_len: the maximum length of @haystack.
+ * @needle: the nul-terminated string to search for.
+ *
+ * Searches the string @haystack for the last occurrence
+ * of the string @needle, limiting the length of the search
+ * to @haystack_len. 
+ *
+ * Return value: a pointer to the found occurrence, or
+ *    %NULL if not found.
+ **/
+gchar *
+g_strrstr_len (const gchar *haystack,
+	       gssize        haystack_len,
+	       const gchar *needle)
+{
+  g_return_val_if_fail (haystack != NULL, NULL);
+  g_return_val_if_fail (needle != NULL, NULL);
+  
+  if (haystack_len < 0)
+    return g_strrstr (haystack, needle);
+  else
+    {
+      gsize needle_len = strlen (needle);
+      const gchar *haystack_max = haystack + haystack_len;
+      const gchar *p = haystack;
+      gsize i;
+
+      while (p < haystack_max && *p)
+	p++;
+
+      if (p < haystack + needle_len)
+	return NULL;
+	
+      p -= needle_len;
+
+      while (p >= haystack)
+	{
+	  for (i = 0; i < needle_len; i++)
+	    if (p[i] != needle[i])
+	      goto next;
+	  
+	  return (gchar *)p;
+	  
+	next:
+	  p--;
+	}
+
+      return NULL;
+    }
+}
+
+
+/**
+ * g_str_has_suffix:
+ * @str: a nul-terminated string.
+ * @suffix: the nul-terminated suffix to look for.
+ *
+ * Looks whether the string @str ends with @suffix.
+ *
+ * Return value: %TRUE if @str end with @suffix, %FALSE otherwise.
+ *
+ * Since: 2.2
+ **/
+gboolean
+g_str_has_suffix (const gchar  *str,
+		  const gchar  *suffix)
+{
+  int str_len;
+  int suffix_len;
+  
+  g_return_val_if_fail (str != NULL, FALSE);
+  g_return_val_if_fail (suffix != NULL, FALSE);
+
+  str_len = strlen (str);
+  suffix_len = strlen (suffix);
+
+  if (str_len < suffix_len)
+    return FALSE;
+
+  return strcmp (str + str_len - suffix_len, suffix) == 0;
+}
+
+/**
+ * g_str_has_prefix:
+ * @str: a nul-terminated string.
+ * @prefix: the nul-terminated prefix to look for.
+ *
+ * Looks whether the string @str begins with @prefix.
+ *
+ * Return value: %TRUE if @str begins with @prefix, %FALSE otherwise.
+ *
+ * Since: 2.2
+ **/
+gboolean
+g_str_has_prefix (const gchar  *str,
+		  const gchar  *prefix)
+{
+  int str_len;
+  int prefix_len;
+  
+  g_return_val_if_fail (str != NULL, FALSE);
+  g_return_val_if_fail (prefix != NULL, FALSE);
+
+  str_len = strlen (str);
+  prefix_len = strlen (prefix);
+
+  if (str_len < prefix_len)
+    return FALSE;
+  
+  return strncmp (str, prefix, prefix_len) == 0;
+}
+
+
+/**
+ * g_strip_context:
+ * @msgid: a string
+ * @msgval: another string
+ * 
+ * An auxiliary function for gettext() support (see Q_()).
+ * 
+ * Return value: @msgval, unless @msgval is identical to @msgid and contains
+ *   a '|' character, in which case a pointer to the substring of msgid after
+ *   the first '|' character is returned. 
+ *
+ * Since: 2.4
+ **/
+G_CONST_RETURN gchar *
+g_strip_context  (const gchar *msgid, 
+		  const gchar *msgval)
+{
+  if (msgval == msgid)
+    {
+      const char *c = strchr (msgid, '|');
+      if (c != NULL)
+	return c + 1;
+    }
+  
+  return msgval;
+}
+
+
+/**
+ * g_strv_length:
+ * @str_array: a %NULL-terminated array of strings.
+ * 
+ * Returns the length of the given %NULL-terminated 
+ * string array @str_array.
+ * 
+ * Return value: length of @str_array.
+ *
+ * Since: 2.6
+ **/
+guint
+g_strv_length (gchar **str_array)
+{
+  guint i = 0;
+
+  g_return_val_if_fail (str_array != NULL, 0);
+
+  while (str_array[i])
+    ++i;
+
+  return i;
+}
+
+
+/**
+ * g_dpgettext:
+ * @domain: the translation domain to use, or %NULL to use
+ *   the domain set with textdomain()
+ * @msgctxtid: a combined message context and message id, separated
+ *   by a \004 character
+ * @msgidoffset: the offset of the message id in @msgctxid
+ *
+ * This function is a variant of g_dgettext() which supports
+ * a disambiguating message context. GNU gettext uses the
+ * '\004' character to separate the message context and
+ * message id in @msgctxtid.
+ * If 0 is passed as @msgidoffset, this function will fall back to
+ * trying to use the deprecated convention of using "|" as a separation
+ * character.
+ *
+ * This uses g_dgettext() internally.  See that functions for differences
+ * with dgettext() proper.
+ *
+ * Applications should normally not use this function directly,
+ * but use the C_() macro for translations with context.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.16
+ */
+G_CONST_RETURN gchar *
+g_dpgettext (const gchar *domain, 
+             const gchar *msgctxtid, 
+             gsize        msgidoffset)
+{
+  const gchar *translation;
+  gchar *sep;
+
+  translation = g_dgettext (domain, msgctxtid);
+
+  if (translation == msgctxtid)
+    {
+      if (msgidoffset > 0)
+        return msgctxtid + msgidoffset;
+
+      sep = strchr (msgctxtid, '|');
+ 
+      if (sep)
+        {
+          /* try with '\004' instead of '|', in case
+           * xgettext -kQ_:1g was used
+           */
+          gchar *tmp = g_alloca (strlen (msgctxtid) + 1);
+          strcpy (tmp, msgctxtid);
+          tmp[sep - msgctxtid] = '\004';
+
+          translation = g_dgettext (domain, tmp);
+   
+          if (translation == tmp)
+            return sep + 1; 
+        }
+    }
+
+  return translation;
+}
+
+/* This function is taken from gettext.h 
+ * GNU gettext uses '\004' to separate context and msgid in .mo files.
+ */
+/**
+ * g_dpgettext2:
+ * @domain: the translation domain to use, or %NULL to use
+ *   the domain set with textdomain()
+ * @context: the message context
+ * @msgid: the message
+ *
+ * This function is a variant of g_dgettext() which supports
+ * a disambiguating message context. GNU gettext uses the
+ * '\004' character to separate the message context and
+ * message id in @msgctxtid.
+ *
+ * This uses g_dgettext() internally.  See that functions for differences
+ * with dgettext() proper.
+ *
+ * This function differs from C_() in that it is not a macro and 
+ * thus you may use non-string-literals as context and msgid arguments.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.18
+ */
+G_CONST_RETURN char *
+g_dpgettext2 (const char *domain,
+              const char *msgctxt,
+              const char *msgid)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+  char* msg_ctxt_id;
+
+  msg_ctxt_id = g_alloca (msgctxt_len + msgid_len);
+
+  memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+  msg_ctxt_id[msgctxt_len - 1] = '\004';
+  memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+
+  translation = g_dgettext (domain, msg_ctxt_id);
+
+  if (translation == msg_ctxt_id) 
+    {
+      /* try the old way of doing message contexts, too */
+      msg_ctxt_id[msgctxt_len - 1] = '|';
+      translation = g_dgettext (domain, msg_ctxt_id);
+
+      if (translation == msg_ctxt_id)
+        return msgid;
+    }
+
+  return translation;
+}
+
+static gboolean
+_g_dgettext_should_translate (void)
+{
+  static gsize translate = 0;
+  enum {
+    SHOULD_TRANSLATE = 1,
+    SHOULD_NOT_TRANSLATE = 2
+  };
+
+  if (G_UNLIKELY (g_once_init_enter (&translate)))
+    {
+      gboolean should_translate = TRUE;
+
+      const char *default_domain     = textdomain (NULL);
+      const char *translator_comment = gettext ("");
+#ifndef G_OS_WIN32
+      const char *translate_locale   = setlocale (LC_MESSAGES, NULL);
+#else
+      const char *translate_locale   = g_win32_getlocale ();
+#endif
+      /* We should NOT translate only if all the following hold:
+       *   - user has called textdomain() and set textdomain to non-default
+       *   - default domain has no translations
+       *   - locale does not start with "en_" and is not "C"
+       *
+       * Rationale:
+       *   - If text domain is still the default domain, maybe user calls
+       *     it later. Continue with old behavior of translating.
+       *   - If locale starts with "en_", we can continue using the
+       *     translations even if the app doesn't have translations for
+       *     this locale.  That is, en_UK and en_CA for example.
+       *   - If locale is "C", maybe user calls setlocale(LC_ALL,"") later.
+       *     Continue with old behavior of translating.
+       */
+      if (0 != strcmp (default_domain, "messages") &&
+	  '\0' == *translator_comment &&
+	  0 != strncmp (translate_locale, "en_", 3) &&
+	  0 != strcmp (translate_locale, "C"))
+        should_translate = FALSE;
+      
+      g_once_init_leave (&translate,
+			 should_translate ?
+			 SHOULD_TRANSLATE :
+			 SHOULD_NOT_TRANSLATE);
+    }
+
+  return translate == SHOULD_TRANSLATE;
+}
+
+/**
+ * g_dgettext:
+ * @domain: the translation domain to use, or %NULL to use
+ *   the domain set with textdomain()
+ * @msgid: message to translate
+ *
+ * This function is a wrapper of dgettext() which does not translate
+ * the message if the default domain as set with textdomain() has no
+ * translations for the current locale.
+ *
+ * The advantage of using this function over dgettext() proper is that
+ * libraries using this function (like GTK+) will not use translations
+ * if the application using the library does not have translations for
+ * the current locale.  This results in a consistent English-only
+ * interface instead of one having partial translations.  For this
+ * feature to work, the call to textdomain() and setlocale() should
+ * precede any g_dgettext() invocations.  For GTK+, it means calling
+ * textdomain() before gtk_init or its variants.
+ *
+ * This function disables translations if and only if upon its first
+ * call all the following conditions hold:
+ * <itemizedlist>
+ * <listitem>@domain is not %NULL</listitem>
+ * <listitem>textdomain() has been called to set a default text domain</listitem>
+ * <listitem>there is no translations available for the default text domain
+ *           and the current locale</listitem>
+ * <listitem>current locale is not "C" or any English locales (those
+ *           starting with "en_")</listitem>
+ * </itemizedlist>
+ *
+ * Note that this behavior may not be desired for example if an application
+ * has its untranslated messages in a language other than English.  In those
+ * cases the application should call textdomain() after initializing GTK+.
+ *
+ * Applications should normally not use this function directly,
+ * but use the _() macro for translations.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.18
+ */
+G_CONST_RETURN gchar *
+g_dgettext (const gchar *domain,
+            const gchar *msgid)
+{
+  if (domain && G_UNLIKELY (!_g_dgettext_should_translate ()))
+    return msgid;
+
+  return dgettext (domain, msgid);
+}
+
+/**
+ * g_dngettext:
+ * @domain: the translation domain to use, or %NULL to use
+ *   the domain set with textdomain()
+ * @msgid: message to translate
+ * @msgid_plural: plural form of the message
+ * @n: the quantity for which translation is needed
+ *
+ * This function is a wrapper of dngettext() which does not translate
+ * the message if the default domain as set with textdomain() has no
+ * translations for the current locale.
+ *
+ * See g_dgettext() for details of how this differs from dngettext()
+ * proper.
+ *
+ * Returns: The translated string
+ *
+ * Since: 2.18
+ */
+G_CONST_RETURN gchar *
+g_dngettext (const gchar *domain,
+             const gchar *msgid,
+             const gchar *msgid_plural,
+	     gulong       n)
+{
+  if (domain && G_UNLIKELY (!_g_dgettext_should_translate ()))
+    return n == 1 ? msgid : msgid_plural;
+
+  return dngettext (domain, msgid, msgid_plural, n);
+}
+
+
+#define __G_STRFUNCS_C__
+#include "galiasdef.c"
diff --git a/glib/gstrfuncs.h b/glib/gstrfuncs.h
new file mode 100644
index 0000000..ee291f8
--- /dev/null
+++ b/glib/gstrfuncs.h
@@ -0,0 +1,266 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_STRFUNCS_H__
+#define __G_STRFUNCS_H__
+
+#include <stdarg.h>
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/* Functions like the ones in <ctype.h> that are not affected by locale. */
+typedef enum {
+  G_ASCII_ALNUM  = 1 << 0,
+  G_ASCII_ALPHA  = 1 << 1,
+  G_ASCII_CNTRL  = 1 << 2,
+  G_ASCII_DIGIT  = 1 << 3,
+  G_ASCII_GRAPH  = 1 << 4,
+  G_ASCII_LOWER  = 1 << 5,
+  G_ASCII_PRINT  = 1 << 6,
+  G_ASCII_PUNCT  = 1 << 7,
+  G_ASCII_SPACE  = 1 << 8,
+  G_ASCII_UPPER  = 1 << 9,
+  G_ASCII_XDIGIT = 1 << 10
+} GAsciiType;
+
+GLIB_VAR const guint16 * const g_ascii_table;
+
+#define g_ascii_isalnum(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0)
+
+#define g_ascii_isalpha(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0)
+
+#define g_ascii_iscntrl(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_CNTRL) != 0)
+
+#define g_ascii_isdigit(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0)
+
+#define g_ascii_isgraph(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_GRAPH) != 0)
+
+#define g_ascii_islower(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0)
+
+#define g_ascii_isprint(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0)
+
+#define g_ascii_ispunct(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_PUNCT) != 0)
+
+#define g_ascii_isspace(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
+
+#define g_ascii_isupper(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0)
+
+#define g_ascii_isxdigit(c) \
+  ((g_ascii_table[(guchar) (c)] & G_ASCII_XDIGIT) != 0)
+
+gchar                 g_ascii_tolower  (gchar        c) G_GNUC_CONST;
+gchar                 g_ascii_toupper  (gchar        c) G_GNUC_CONST;
+
+gint                  g_ascii_digit_value  (gchar    c) G_GNUC_CONST;
+gint                  g_ascii_xdigit_value (gchar    c) G_GNUC_CONST;
+
+/* String utility functions that modify a string argument or
+ * return a constant string that must not be freed.
+ */
+#define	 G_STR_DELIMITERS	"_-|> <."
+gchar*	              g_strdelimit     (gchar	     *string,
+					const gchar  *delimiters,
+					gchar	      new_delimiter);
+gchar*	              g_strcanon       (gchar        *string,
+					const gchar  *valid_chars,
+					gchar         substitutor);
+G_CONST_RETURN gchar* g_strerror       (gint	      errnum) G_GNUC_CONST;
+G_CONST_RETURN gchar* g_strsignal      (gint	      signum) G_GNUC_CONST;
+gchar*	              g_strreverse     (gchar	     *string);
+gsize	              g_strlcpy	       (gchar	     *dest,
+					const gchar  *src,
+					gsize         dest_size);
+gsize	              g_strlcat        (gchar	     *dest,
+					const gchar  *src,
+					gsize         dest_size);
+gchar *               g_strstr_len     (const gchar  *haystack,
+					gssize        haystack_len,
+					const gchar  *needle);
+gchar *               g_strrstr        (const gchar  *haystack,
+					const gchar  *needle);
+gchar *               g_strrstr_len    (const gchar  *haystack,
+					gssize        haystack_len,
+					const gchar  *needle);
+
+gboolean              g_str_has_suffix (const gchar  *str,
+					const gchar  *suffix);
+gboolean              g_str_has_prefix (const gchar  *str,
+					const gchar  *prefix);
+
+/* String to/from double conversion functions */
+
+gdouble	              g_strtod         (const gchar  *nptr,
+					gchar	    **endptr);
+gdouble	              g_ascii_strtod   (const gchar  *nptr,
+					gchar	    **endptr);
+guint64		      g_ascii_strtoull (const gchar *nptr,
+					gchar      **endptr,
+					guint        base);
+gint64		      g_ascii_strtoll  (const gchar *nptr,
+					gchar      **endptr,
+					guint        base);
+/* 29 bytes should enough for all possible values that
+ * g_ascii_dtostr can produce.
+ * Then add 10 for good measure */
+#define G_ASCII_DTOSTR_BUF_SIZE (29 + 10)
+gchar *               g_ascii_dtostr   (gchar        *buffer,
+					gint          buf_len,
+					gdouble       d);
+gchar *               g_ascii_formatd  (gchar        *buffer,
+					gint          buf_len,
+					const gchar  *format,
+					gdouble       d);
+
+/* removes leading spaces */
+gchar*                g_strchug        (gchar        *string);
+/* removes trailing spaces */
+gchar*                g_strchomp       (gchar        *string);
+/* removes leading & trailing spaces */
+#define g_strstrip( string )	g_strchomp (g_strchug (string))
+
+gint                  g_ascii_strcasecmp  (const gchar *s1,
+					   const gchar *s2);
+gint                  g_ascii_strncasecmp (const gchar *s1,
+					   const gchar *s2,
+					   gsize        n);
+gchar*                g_ascii_strdown     (const gchar *str,
+					   gssize       len) G_GNUC_MALLOC;
+gchar*                g_ascii_strup       (const gchar *str,
+					   gssize       len) G_GNUC_MALLOC;
+
+#ifndef G_DISABLE_DEPRECATED
+
+/* The following four functions are deprecated and will be removed in
+ * the next major release. They use the locale-specific tolower and
+ * toupper, which is almost never the right thing.
+ */
+
+gint	              g_strcasecmp     (const gchar *s1,
+					const gchar *s2);
+gint	              g_strncasecmp    (const gchar *s1,
+					const gchar *s2,
+					guint        n);
+gchar*	              g_strdown	       (gchar	     *string);
+gchar*	              g_strup	       (gchar	     *string);
+
+#endif /* G_DISABLE_DEPRECATED */
+
+/* String utility functions that return a newly allocated string which
+ * ought to be freed with g_free from the caller at some point.
+ */
+gchar*	              g_strdup	       (const gchar *str) G_GNUC_MALLOC;
+gchar*	              g_strdup_printf  (const gchar *format,
+					...) G_GNUC_PRINTF (1, 2) G_GNUC_MALLOC;
+gchar*	              g_strdup_vprintf (const gchar *format,
+					va_list      args) G_GNUC_MALLOC;
+gchar*	              g_strndup	       (const gchar *str,
+					gsize        n) G_GNUC_MALLOC;  
+gchar*	              g_strnfill       (gsize        length,  
+					gchar        fill_char) G_GNUC_MALLOC;
+gchar*	              g_strconcat      (const gchar *string1,
+					...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+gchar*                g_strjoin	       (const gchar  *separator,
+					...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
+
+/* Make a copy of a string interpreting C string -style escape
+ * sequences. Inverse of g_strescape. The recognized sequences are \b
+ * \f \n \r \t \\ \" and the octal format.
+ */
+gchar*                g_strcompress    (const gchar *source) G_GNUC_MALLOC;
+
+/* Copy a string escaping nonprintable characters like in C strings.
+ * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
+ * to a string containing characters that are not to be escaped.
+ *
+ * Deprecated API: gchar* g_strescape (const gchar *source);
+ * Luckily this function wasn't used much, using NULL as second parameter
+ * provides mostly identical semantics.
+ */
+gchar*                g_strescape      (const gchar *source,
+					const gchar *exceptions) G_GNUC_MALLOC;
+
+gpointer              g_memdup	       (gconstpointer mem,
+					guint	       byte_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(2);
+
+/* NULL terminated string arrays.
+ * g_strsplit(), g_strsplit_set() split up string into max_tokens tokens
+ * at delim and return a newly allocated string array.
+ * g_strjoinv() concatenates all of str_array's strings, sliding in an
+ * optional separator, the returned string is newly allocated.
+ * g_strfreev() frees the array itself and all of its strings.
+ * g_strdupv() copies a NULL-terminated array of strings
+ * g_strv_length() returns the length of a NULL-terminated array of strings
+ */
+gchar**	              g_strsplit       (const gchar  *string,
+					const gchar  *delimiter,
+					gint          max_tokens) G_GNUC_MALLOC;
+gchar **	      g_strsplit_set   (const gchar *string,
+					const gchar *delimiters,
+					gint         max_tokens) G_GNUC_MALLOC;
+gchar*                g_strjoinv       (const gchar  *separator,
+					gchar       **str_array) G_GNUC_MALLOC;
+void                  g_strfreev       (gchar       **str_array);
+gchar**               g_strdupv        (gchar       **str_array) G_GNUC_MALLOC;
+guint                 g_strv_length    (gchar       **str_array);
+
+gchar*                g_stpcpy         (gchar        *dest,
+                                        const char   *src);
+
+G_CONST_RETURN gchar *g_strip_context  (const gchar *msgid, 
+					const gchar *msgval) G_GNUC_FORMAT(1);
+
+G_CONST_RETURN gchar *g_dgettext       (const gchar *domain,
+					const gchar *msgid) G_GNUC_FORMAT(2);
+
+G_CONST_RETURN gchar *g_dngettext      (const gchar *domain,
+					const gchar *msgid,
+					const gchar *msgid_plural,
+					gulong       n) G_GNUC_FORMAT(3);
+G_CONST_RETURN gchar *g_dpgettext      (const gchar *domain,
+                                        const gchar *msgctxtid,
+                                        gsize        msgidoffset) G_GNUC_FORMAT(2);
+G_CONST_RETURN gchar *g_dpgettext2     (const gchar *domain,
+                                        const gchar *context,
+                                        const gchar *msgid) G_GNUC_FORMAT(3);
+
+G_END_DECLS
+
+#endif /* __G_STRFUNCS_H__ */
diff --git a/glib/gstring.c b/glib/gstring.c
new file mode 100644
index 0000000..9f0198b
--- /dev/null
+++ b/glib/gstring.c
@@ -0,0 +1,1484 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "glib.h"
+#include "gprintf.h"
+
+#include "galias.h"
+
+struct _GStringChunk
+{
+  GHashTable *const_table;
+  GSList     *storage_list;
+  gsize       storage_next;    
+  gsize       this_size;       
+  gsize       default_size;    
+};
+
+/* Hash Functions.
+ */
+
+/**
+ * g_str_equal:
+ * @v1: a key
+ * @v2: a key to compare with @v1
+ * 
+ * Compares two strings for byte-by-byte equality and returns %TRUE 
+ * if they are equal. It can be passed to g_hash_table_new() as the 
+ * @key_equal_func parameter, when using strings as keys in a #GHashTable.
+ *
+ * Returns: %TRUE if the two keys match
+ */
+gboolean
+g_str_equal (gconstpointer v1,
+	     gconstpointer v2)
+{
+  const gchar *string1 = v1;
+  const gchar *string2 = v2;
+  
+  return strcmp (string1, string2) == 0;
+}
+
+/**
+ * g_str_hash:
+ * @v: a string key
+ *
+ * Converts a string to a hash value.
+ * It can be passed to g_hash_table_new() as the @hash_func 
+ * parameter, when using strings as keys in a #GHashTable.
+ *
+ * Returns: a hash value corresponding to the key
+ */
+guint
+g_str_hash (gconstpointer v)
+{
+  /* 31 bit hash function */
+  const signed char *p = v;
+  guint32 h = *p;
+
+  if (h)
+    for (p += 1; *p != '\0'; p++)
+      h = (h << 5) - h + *p;
+
+  return h;
+}
+
+#define MY_MAXSIZE ((gsize)-1)
+
+static inline gsize
+nearest_power (gsize base, gsize num)    
+{
+  if (num > MY_MAXSIZE / 2)
+    {
+      return MY_MAXSIZE;
+    }
+  else
+    {
+      gsize n = base;
+
+      while (n < num)
+	n <<= 1;
+      
+      return n;
+    }
+}
+
+/* String Chunks.
+ */
+
+/**
+ * g_string_chunk_new:
+ * @size: the default size of the blocks of memory which are 
+ *        allocated to store the strings. If a particular string 
+ *        is larger than this default size, a larger block of 
+ *        memory will be allocated for it.
+ * 
+ * Creates a new #GStringChunk. 
+ * 
+ * Returns: a new #GStringChunk
+ */
+GStringChunk*
+g_string_chunk_new (gsize size)    
+{
+  GStringChunk *new_chunk = g_new (GStringChunk, 1);
+  gsize actual_size = 1;    
+
+  actual_size = nearest_power (1, size);
+
+  new_chunk->const_table       = NULL;
+  new_chunk->storage_list      = NULL;
+  new_chunk->storage_next      = actual_size;
+  new_chunk->default_size      = actual_size;
+  new_chunk->this_size         = actual_size;
+
+  return new_chunk;
+}
+
+/**
+ * g_string_chunk_free:
+ * @chunk: a #GStringChunk 
+ * 
+ * Frees all memory allocated by the #GStringChunk.
+ * After calling g_string_chunk_free() it is not safe to
+ * access any of the strings which were contained within it.
+ */
+void
+g_string_chunk_free (GStringChunk *chunk)
+{
+  GSList *tmp_list;
+
+  g_return_if_fail (chunk != NULL);
+
+  if (chunk->storage_list)
+    {
+      for (tmp_list = chunk->storage_list; tmp_list; tmp_list = tmp_list->next)
+	g_free (tmp_list->data);
+
+      g_slist_free (chunk->storage_list);
+    }
+
+  if (chunk->const_table)
+    g_hash_table_destroy (chunk->const_table);
+
+  g_free (chunk);
+}
+
+/**
+ * g_string_chunk_clear:
+ * @chunk: a #GStringChunk
+ *
+ * Frees all strings contained within the #GStringChunk.
+ * After calling g_string_chunk_clear() it is not safe to
+ * access any of the strings which were contained within it.
+ *
+ * Since: 2.14
+ */
+void
+g_string_chunk_clear (GStringChunk *chunk)
+{
+  GSList *tmp_list;
+
+  g_return_if_fail (chunk != NULL);
+
+  if (chunk->storage_list)
+    {
+      for (tmp_list = chunk->storage_list; tmp_list; tmp_list = tmp_list->next)
+        g_free (tmp_list->data);
+
+      g_slist_free (chunk->storage_list);
+
+      chunk->storage_list       = NULL;
+      chunk->storage_next       = chunk->default_size;
+      chunk->this_size          = chunk->default_size;
+    }
+
+  if (chunk->const_table)
+      g_hash_table_remove_all (chunk->const_table);
+}
+
+/**
+ * g_string_chunk_insert:
+ * @chunk: a #GStringChunk
+ * @string: the string to add
+ * 
+ * Adds a copy of @string to the #GStringChunk.
+ * It returns a pointer to the new copy of the string 
+ * in the #GStringChunk. The characters in the string 
+ * can be changed, if necessary, though you should not 
+ * change anything after the end of the string.
+ *
+ * Unlike g_string_chunk_insert_const(), this function 
+ * does not check for duplicates. Also strings added 
+ * with g_string_chunk_insert() will not be searched 
+ * by g_string_chunk_insert_const() when looking for 
+ * duplicates.
+ * 
+ * Returns: a pointer to the copy of @string within 
+ *          the #GStringChunk
+ */
+gchar*
+g_string_chunk_insert (GStringChunk *chunk,
+		       const gchar  *string)
+{
+  g_return_val_if_fail (chunk != NULL, NULL);
+
+  return g_string_chunk_insert_len (chunk, string, -1);
+}
+
+/**
+ * g_string_chunk_insert_const:
+ * @chunk: a #GStringChunk
+ * @string: the string to add
+ * 
+ * Adds a copy of @string to the #GStringChunk, unless the same 
+ * string has already been added to the #GStringChunk with 
+ * g_string_chunk_insert_const().
+ * 
+ * This function is useful if you need to copy a large number 
+ * of strings but do not want to waste space storing duplicates. 
+ * But you must remember that there may be several pointers to 
+ * the same string, and so any changes made to the strings 
+ * should be done very carefully.
+ * 
+ * Note that g_string_chunk_insert_const() will not return a 
+ * pointer to a string added with g_string_chunk_insert(), even 
+ * if they do match.
+ * 
+ * Returns: a pointer to the new or existing copy of @string 
+ *          within the #GStringChunk
+ */
+gchar*
+g_string_chunk_insert_const (GStringChunk *chunk,
+			     const gchar  *string)
+{
+  char* lookup;
+
+  g_return_val_if_fail (chunk != NULL, NULL);
+
+  if (!chunk->const_table)
+    chunk->const_table = g_hash_table_new (g_str_hash, g_str_equal);
+
+  lookup = (char*) g_hash_table_lookup (chunk->const_table, (gchar *)string);
+
+  if (!lookup)
+    {
+      lookup = g_string_chunk_insert (chunk, string);
+      g_hash_table_insert (chunk->const_table, lookup, lookup);
+    }
+
+  return lookup;
+}
+
+/**
+ * g_string_chunk_insert_len:
+ * @chunk: a #GStringChunk
+ * @string: bytes to insert
+ * @len: number of bytes of @string to insert, or -1 to insert a 
+ *     nul-terminated string 
+ * 
+ * Adds a copy of the first @len bytes of @string to the #GStringChunk. 
+ * The copy is nul-terminated.
+ * 
+ * Since this function does not stop at nul bytes, it is the caller's
+ * responsibility to ensure that @string has at least @len addressable 
+ * bytes.
+ *
+ * The characters in the returned string can be changed, if necessary, 
+ * though you should not change anything after the end of the string.
+ * 
+ * Return value: a pointer to the copy of @string within the #GStringChunk
+ * 
+ * Since: 2.4
+ **/
+gchar*
+g_string_chunk_insert_len (GStringChunk *chunk,
+			   const gchar  *string, 
+			   gssize        len)
+{
+  gssize size;
+  gchar* pos;
+
+  g_return_val_if_fail (chunk != NULL, NULL);
+
+  if (len < 0)
+    size = strlen (string);
+  else
+    size = len;
+  
+  if ((chunk->storage_next + size + 1) > chunk->this_size)
+    {
+      gsize new_size = nearest_power (chunk->default_size, size + 1);
+
+      chunk->storage_list = g_slist_prepend (chunk->storage_list,
+					     g_new (gchar, new_size));
+
+      chunk->this_size = new_size;
+      chunk->storage_next = 0;
+    }
+
+  pos = ((gchar *) chunk->storage_list->data) + chunk->storage_next;
+
+  *(pos + size) = '\0';
+
+  strncpy (pos, string, size);
+  if (len > 0)
+    size = strlen (pos);
+
+  chunk->storage_next += size + 1;
+
+  return pos;
+}
+
+/* Strings.
+ */
+static void
+g_string_maybe_expand (GString* string,
+		       gsize    len) 
+{
+  if (string->len + len >= string->allocated_len)
+    {
+      string->allocated_len = nearest_power (1, string->len + len + 1);
+      string->str = g_realloc (string->str, string->allocated_len);
+    }
+}
+
+/**
+ * g_string_sized_new:
+ * @dfl_size: the default size of the space allocated to 
+ *            hold the string
+ *
+ * Creates a new #GString, with enough space for @dfl_size 
+ * bytes. This is useful if you are going to add a lot of 
+ * text to the string and don't want it to be reallocated 
+ * too often.
+ *
+ * Returns: the new #GString
+ */
+GString*
+g_string_sized_new (gsize dfl_size)    
+{
+  GString *string = g_slice_new (GString);
+
+  string->allocated_len = 0;
+  string->len   = 0;
+  string->str   = NULL;
+
+  g_string_maybe_expand (string, MAX (dfl_size, 2));
+  string->str[0] = 0;
+
+  return string;
+}
+
+/**
+ * g_string_new:
+ * @init: the initial text to copy into the string
+ * 
+ * Creates a new #GString, initialized with the given string.
+ *
+ * Returns: the new #GString
+ */
+GString*
+g_string_new (const gchar *init)
+{
+  GString *string;
+
+  if (init == NULL || *init == '\0')
+    string = g_string_sized_new (2);
+  else 
+    {
+      gint len;
+
+      len = strlen (init);
+      string = g_string_sized_new (len + 2);
+
+      g_string_append_len (string, init, len);
+    }
+
+  return string;
+}
+
+/**
+ * g_string_new_len:
+ * @init: initial contents of the string
+ * @len: length of @init to use
+ *
+ * Creates a new #GString with @len bytes of the @init buffer.  
+ * Because a length is provided, @init need not be nul-terminated,
+ * and can contain embedded nul bytes.
+ *
+ * Since this function does not stop at nul bytes, it is the caller's
+ * responsibility to ensure that @init has at least @len addressable 
+ * bytes.
+ *
+ * Returns: a new #GString
+ */
+GString*
+g_string_new_len (const gchar *init,
+                  gssize       len)    
+{
+  GString *string;
+
+  if (len < 0)
+    return g_string_new (init);
+  else
+    {
+      string = g_string_sized_new (len);
+      
+      if (init)
+        g_string_append_len (string, init, len);
+      
+      return string;
+    }
+}
+
+/**
+ * g_string_free:
+ * @string: a #GString
+ * @free_segment: if %TRUE the actual character data is freed as well
+ *
+ * Frees the memory allocated for the #GString.
+ * If @free_segment is %TRUE it also frees the character data.
+ *
+ * Returns: the character data of @string 
+ *          (i.e. %NULL if @free_segment is %TRUE)
+ */
+gchar*
+g_string_free (GString *string,
+	       gboolean free_segment)
+{
+  gchar *segment;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  if (free_segment)
+    {
+      g_free (string->str);
+      segment = NULL;
+    }
+  else
+    segment = string->str;
+
+  g_slice_free (GString, string);
+
+  return segment;
+}
+
+/**
+ * g_string_equal:
+ * @v: a #GString
+ * @v2: another #GString
+ *
+ * Compares two strings for equality, returning %TRUE if they are equal. 
+ * For use with #GHashTable.
+ *
+ * Returns: %TRUE if they strings are the same length and contain the 
+ *   same bytes
+ */
+gboolean
+g_string_equal (const GString *v,
+                const GString *v2)
+{
+  gchar *p, *q;
+  GString *string1 = (GString *) v;
+  GString *string2 = (GString *) v2;
+  gsize i = string1->len;    
+
+  if (i != string2->len)
+    return FALSE;
+
+  p = string1->str;
+  q = string2->str;
+  while (i)
+    {
+      if (*p != *q)
+	return FALSE;
+      p++;
+      q++;
+      i--;
+    }
+  return TRUE;
+}
+
+/**
+ * g_string_hash:
+ * @str: a string to hash
+ *
+ * Creates a hash code for @str; for use with #GHashTable.
+ *
+ * Returns: hash code for @str
+ */
+/* 31 bit hash function */
+guint
+g_string_hash (const GString *str)
+{
+  const gchar *p = str->str;
+  gsize n = str->len;    
+  guint h = 0;
+
+  while (n--)
+    {
+      h = (h << 5) - h + *p;
+      p++;
+    }
+
+  return h;
+}
+
+/**
+ * g_string_assign:
+ * @string: the destination #GString. Its current contents 
+ *          are destroyed.
+ * @rval: the string to copy into @string
+ *
+ * Copies the bytes from a string into a #GString, 
+ * destroying any previous contents. It is rather like 
+ * the standard strcpy() function, except that you do not 
+ * have to worry about having enough space to copy the string.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_assign (GString     *string,
+		 const gchar *rval)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (rval != NULL, string);
+
+  /* Make sure assigning to itself doesn't corrupt the string.  */
+  if (string->str != rval)
+    {
+      /* Assigning from substring should be ok since g_string_truncate
+	 does not realloc.  */
+      g_string_truncate (string, 0);
+      g_string_append (string, rval);
+    }
+
+  return string;
+}
+
+/**
+ * g_string_truncate:
+ * @string: a #GString
+ * @len: the new size of @string
+ *
+ * Cuts off the end of the GString, leaving the first @len bytes. 
+ *
+ * Returns: @string
+ */
+GString*
+g_string_truncate (GString *string,
+		   gsize    len)    
+{
+  g_return_val_if_fail (string != NULL, NULL);
+
+  string->len = MIN (len, string->len);
+  string->str[string->len] = 0;
+
+  return string;
+}
+
+/**
+ * g_string_set_size:
+ * @string: a #GString
+ * @len: the new length
+ * 
+ * Sets the length of a #GString. If the length is less than
+ * the current length, the string will be truncated. If the
+ * length is greater than the current length, the contents
+ * of the newly added area are undefined. (However, as
+ * always, string->str[string->len] will be a nul byte.) 
+ * 
+ * Return value: @string
+ **/
+GString*
+g_string_set_size (GString *string,
+		   gsize    len)    
+{
+  g_return_val_if_fail (string != NULL, NULL);
+
+  if (len >= string->allocated_len)
+    g_string_maybe_expand (string, len - string->len);
+  
+  string->len = len;
+  string->str[len] = 0;
+
+  return string;
+}
+
+/**
+ * g_string_insert_len:
+ * @string: a #GString
+ * @pos: position in @string where insertion should 
+ *       happen, or -1 for at the end
+ * @val: bytes to insert
+ * @len: number of bytes of @val to insert
+ * 
+ * Inserts @len bytes of @val into @string at @pos.  
+ * Because @len is provided, @val may contain embedded 
+ * nuls and need not be nul-terminated. If @pos is -1, 
+ * bytes are inserted at the end of the string.
+ *
+ * Since this function does not stop at nul bytes, it is 
+ * the caller's responsibility to ensure that @val has at 
+ * least @len addressable bytes.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_insert_len (GString     *string,
+		     gssize       pos,    
+		     const gchar *val,
+		     gssize       len)    
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (val != NULL, string);
+
+  if (len < 0)
+    len = strlen (val);
+
+  if (pos < 0)
+    pos = string->len;
+  else
+    g_return_val_if_fail (pos <= string->len, string);
+
+  /* Check whether val represents a substring of string.  This test
+     probably violates chapter and verse of the C standards, since
+     ">=" and "<=" are only valid when val really is a substring.
+     In practice, it will work on modern archs.  */
+  if (val >= string->str && val <= string->str + string->len)
+    {
+      gsize offset = val - string->str;
+      gsize precount = 0;
+
+      g_string_maybe_expand (string, len);
+      val = string->str + offset;
+      /* At this point, val is valid again.  */
+
+      /* Open up space where we are going to insert.  */
+      if (pos < string->len)
+	g_memmove (string->str + pos + len, string->str + pos, string->len - pos);
+
+      /* Move the source part before the gap, if any.  */
+      if (offset < pos)
+	{
+	  precount = MIN (len, pos - offset);
+	  memcpy (string->str + pos, val, precount);
+	}
+
+      /* Move the source part after the gap, if any.  */
+      if (len > precount)
+	memcpy (string->str + pos + precount,
+		val + /* Already moved: */ precount + /* Space opened up: */ len,
+		len - precount);
+    }
+  else
+    {
+      g_string_maybe_expand (string, len);
+
+      /* If we aren't appending at the end, move a hunk
+       * of the old string to the end, opening up space
+       */
+      if (pos < string->len)
+	g_memmove (string->str + pos + len, string->str + pos, string->len - pos);
+
+      /* insert the new string */
+      if (len == 1)
+        string->str[pos] = *val;
+      else
+        memcpy (string->str + pos, val, len);
+    }
+
+  string->len += len;
+
+  string->str[string->len] = 0;
+
+  return string;
+}
+
+#define SUB_DELIM_CHARS  "!$&'()*+,;="
+
+static gboolean
+is_valid (char c, const char *reserved_chars_allowed)
+{
+  if (g_ascii_isalnum (c) ||
+      c == '-' ||
+      c == '.' ||
+      c == '_' ||
+      c == '~')
+    return TRUE;
+
+  if (reserved_chars_allowed &&
+      strchr (reserved_chars_allowed, c) != NULL)
+    return TRUE;
+  
+  return FALSE;
+}
+
+static gboolean 
+gunichar_ok (gunichar c)
+{
+  return
+    (c != (gunichar) -2) &&
+    (c != (gunichar) -1);
+}
+
+/**
+ * g_string_append_uri_escaped:
+ * @string: a #GString
+ * @unescaped: a string
+ * @reserved_chars_allowed: a string of reserved characters allowed to be used
+ * @allow_utf8: set %TRUE if the escaped string may include UTF8 characters
+ * 
+ * Appends @unescaped to @string, escaped any characters that
+ * are reserved in URIs using URI-style escape sequences.
+ * 
+ * Returns: @string
+ *
+ * Since: 2.16
+ **/
+GString *
+g_string_append_uri_escaped (GString *string,
+			     const char *unescaped,
+			     const char *reserved_chars_allowed,
+			     gboolean allow_utf8)
+{
+  unsigned char c;
+  const char *end;
+  static const gchar hex[16] = "0123456789ABCDEF";
+
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (unescaped != NULL, NULL);
+
+  end = unescaped + strlen (unescaped);
+  
+  while ((c = *unescaped) != 0)
+    {
+      if (c >= 0x80 && allow_utf8 &&
+	  gunichar_ok (g_utf8_get_char_validated (unescaped, end - unescaped)))
+	{
+	  int len = g_utf8_skip [c];
+	  g_string_append_len (string, unescaped, len);
+	  unescaped += len;
+	}
+      else if (is_valid (c, reserved_chars_allowed))
+	{
+	  g_string_append_c (string, c);
+	  unescaped++;
+	}
+      else
+	{
+	  g_string_append_c (string, '%');
+	  g_string_append_c (string, hex[((guchar)c) >> 4]);
+	  g_string_append_c (string, hex[((guchar)c) & 0xf]);
+	  unescaped++;
+	}
+    }
+
+  return string;
+}
+
+/**
+ * g_string_append:
+ * @string: a #GString
+ * @val: the string to append onto the end of @string
+ * 
+ * Adds a string onto the end of a #GString, expanding 
+ * it if necessary.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_append (GString     *string,
+		 const gchar *val)
+{  
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (val != NULL, string);
+
+  return g_string_insert_len (string, -1, val, -1);
+}
+
+/**
+ * g_string_append_len:
+ * @string: a #GString
+ * @val: bytes to append
+ * @len: number of bytes of @val to use
+ * 
+ * Appends @len bytes of @val to @string. Because @len is 
+ * provided, @val may contain embedded nuls and need not 
+ * be nul-terminated.
+ * 
+ * Since this function does not stop at nul bytes, it is 
+ * the caller's responsibility to ensure that @val has at 
+ * least @len addressable bytes.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_append_len (GString	 *string,
+                     const gchar *val,
+                     gssize       len)    
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (val != NULL, string);
+
+  return g_string_insert_len (string, -1, val, len);
+}
+
+/**
+ * g_string_append_c:
+ * @string: a #GString
+ * @c: the byte to append onto the end of @string
+ *
+ * Adds a byte onto the end of a #GString, expanding 
+ * it if necessary.
+ * 
+ * Returns: @string
+ */
+#undef g_string_append_c
+GString*
+g_string_append_c (GString *string,
+		   gchar    c)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+
+  return g_string_insert_c (string, -1, c);
+}
+
+/**
+ * g_string_append_unichar:
+ * @string: a #GString
+ * @wc: a Unicode character
+ * 
+ * Converts a Unicode character into UTF-8, and appends it
+ * to the string.
+ * 
+ * Return value: @string
+ **/
+GString*
+g_string_append_unichar (GString  *string,
+			 gunichar  wc)
+{  
+  g_return_val_if_fail (string != NULL, NULL);
+  
+  return g_string_insert_unichar (string, -1, wc);
+}
+
+/**
+ * g_string_prepend:
+ * @string: a #GString
+ * @val: the string to prepend on the start of @string
+ *
+ * Adds a string on to the start of a #GString, 
+ * expanding it if necessary.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_prepend (GString     *string,
+		  const gchar *val)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (val != NULL, string);
+  
+  return g_string_insert_len (string, 0, val, -1);
+}
+
+/**
+ * g_string_prepend_len:
+ * @string: a #GString
+ * @val: bytes to prepend
+ * @len: number of bytes in @val to prepend
+ *
+ * Prepends @len bytes of @val to @string. 
+ * Because @len is provided, @val may contain 
+ * embedded nuls and need not be nul-terminated.
+ *
+ * Since this function does not stop at nul bytes, 
+ * it is the caller's responsibility to ensure that 
+ * @val has at least @len addressable bytes.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_prepend_len (GString	  *string,
+                      const gchar *val,
+                      gssize       len)    
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (val != NULL, string);
+
+  return g_string_insert_len (string, 0, val, len);
+}
+
+/**
+ * g_string_prepend_c:
+ * @string: a #GString
+ * @c: the byte to prepend on the start of the #GString
+ *
+ * Adds a byte onto the start of a #GString, 
+ * expanding it if necessary.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_prepend_c (GString *string,
+		    gchar    c)
+{  
+  g_return_val_if_fail (string != NULL, NULL);
+  
+  return g_string_insert_c (string, 0, c);
+}
+
+/**
+ * g_string_prepend_unichar:
+ * @string: a #GString
+ * @wc: a Unicode character
+ * 
+ * Converts a Unicode character into UTF-8, and prepends it
+ * to the string.
+ * 
+ * Return value: @string
+ **/
+GString*
+g_string_prepend_unichar (GString  *string,
+			  gunichar  wc)
+{  
+  g_return_val_if_fail (string != NULL, NULL);
+  
+  return g_string_insert_unichar (string, 0, wc);
+}
+
+/**
+ * g_string_insert:
+ * @string: a #GString
+ * @pos: the position to insert the copy of the string
+ * @val: the string to insert
+ *
+ * Inserts a copy of a string into a #GString, 
+ * expanding it if necessary.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_insert (GString     *string,
+		 gssize       pos,    
+		 const gchar *val)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (val != NULL, string);
+  if (pos >= 0)
+    g_return_val_if_fail (pos <= string->len, string);
+  
+  return g_string_insert_len (string, pos, val, -1);
+}
+
+/**
+ * g_string_insert_c:
+ * @string: a #GString
+ * @pos: the position to insert the byte
+ * @c: the byte to insert
+ *
+ * Inserts a byte into a #GString, expanding it if necessary.
+ * 
+ * Returns: @string
+ */
+GString*
+g_string_insert_c (GString *string,
+		   gssize   pos,    
+		   gchar    c)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+
+  g_string_maybe_expand (string, 1);
+
+  if (pos < 0)
+    pos = string->len;
+  else
+    g_return_val_if_fail (pos <= string->len, string);
+  
+  /* If not just an append, move the old stuff */
+  if (pos < string->len)
+    g_memmove (string->str + pos + 1, string->str + pos, string->len - pos);
+
+  string->str[pos] = c;
+
+  string->len += 1;
+
+  string->str[string->len] = 0;
+
+  return string;
+}
+
+/**
+ * g_string_insert_unichar:
+ * @string: a #GString
+ * @pos: the position at which to insert character, or -1 to
+ *       append at the end of the string
+ * @wc: a Unicode character
+ * 
+ * Converts a Unicode character into UTF-8, and insert it
+ * into the string at the given position.
+ * 
+ * Return value: @string
+ **/
+GString*
+g_string_insert_unichar (GString *string,
+			 gssize   pos,    
+			 gunichar wc)
+{
+  gint charlen, first, i;
+  gchar *dest;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  /* Code copied from g_unichar_to_utf() */
+  if (wc < 0x80)
+    {
+      first = 0;
+      charlen = 1;
+    }
+  else if (wc < 0x800)
+    {
+      first = 0xc0;
+      charlen = 2;
+    }
+  else if (wc < 0x10000)
+    {
+      first = 0xe0;
+      charlen = 3;
+    }
+   else if (wc < 0x200000)
+    {
+      first = 0xf0;
+      charlen = 4;
+    }
+  else if (wc < 0x4000000)
+    {
+      first = 0xf8;
+      charlen = 5;
+    }
+  else
+    {
+      first = 0xfc;
+      charlen = 6;
+    }
+  /* End of copied code */
+
+  g_string_maybe_expand (string, charlen);
+
+  if (pos < 0)
+    pos = string->len;
+  else
+    g_return_val_if_fail (pos <= string->len, string);
+
+  /* If not just an append, move the old stuff */
+  if (pos < string->len)
+    g_memmove (string->str + pos + charlen, string->str + pos, string->len - pos);
+
+  dest = string->str + pos;
+  /* Code copied from g_unichar_to_utf() */
+  for (i = charlen - 1; i > 0; --i)
+    {
+      dest[i] = (wc & 0x3f) | 0x80;
+      wc >>= 6;
+    }
+  dest[0] = wc | first;
+  /* End of copied code */
+  
+  string->len += charlen;
+
+  string->str[string->len] = 0;
+
+  return string;
+}
+
+/**
+ * g_string_overwrite:
+ * @string: a #GString
+ * @pos: the position at which to start overwriting
+ * @val: the string that will overwrite the @string starting at @pos
+ * 
+ * Overwrites part of a string, lengthening it if necessary.
+ * 
+ * Return value: @string
+ *
+ * Since: 2.14
+ **/
+GString *
+g_string_overwrite (GString     *string,
+		    gsize        pos,
+		    const gchar *val)
+{
+  g_return_val_if_fail (val != NULL, string);
+  return g_string_overwrite_len (string, pos, val, strlen (val));
+}
+
+/**
+ * g_string_overwrite_len:
+ * @string: a #GString
+ * @pos: the position at which to start overwriting
+ * @val: the string that will overwrite the @string starting at @pos
+ * @len: the number of bytes to write from @val
+ * 
+ * Overwrites part of a string, lengthening it if necessary. 
+ * This function will work with embedded nuls.
+ * 
+ * Return value: @string
+ *
+ * Since: 2.14
+ **/
+GString *
+g_string_overwrite_len (GString     *string,
+			gsize        pos,
+			const gchar *val,
+			gssize       len)
+{
+  gsize end;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  if (!len)
+    return string;
+
+  g_return_val_if_fail (val != NULL, string);
+  g_return_val_if_fail (pos <= string->len, string);
+
+  if (len < 0)
+    len = strlen (val);
+
+  end = pos + len;
+
+  if (end > string->len)
+    g_string_maybe_expand (string, end - string->len);
+
+  memcpy (string->str + pos, val, len);
+
+  if (end > string->len)
+    {
+      string->str[end] = '\0';
+      string->len = end;
+    }
+
+  return string;
+}
+
+/**
+ * g_string_erase:
+ * @string: a #GString
+ * @pos: the position of the content to remove
+ * @len: the number of bytes to remove, or -1 to remove all
+ *       following bytes
+ *
+ * Removes @len bytes from a #GString, starting at position @pos.
+ * The rest of the #GString is shifted down to fill the gap.
+ *
+ * Returns: @string
+ */
+GString*
+g_string_erase (GString *string,
+		gssize   pos,
+		gssize   len)
+{
+  g_return_val_if_fail (string != NULL, NULL);
+  g_return_val_if_fail (pos >= 0, string);
+  g_return_val_if_fail (pos <= string->len, string);
+
+  if (len < 0)
+    len = string->len - pos;
+  else
+    {
+      g_return_val_if_fail (pos + len <= string->len, string);
+
+      if (pos + len < string->len)
+	g_memmove (string->str + pos, string->str + pos + len, string->len - (pos + len));
+    }
+
+  string->len -= len;
+  
+  string->str[string->len] = 0;
+
+  return string;
+}
+
+/**
+ * g_string_ascii_down:
+ * @string: a GString
+ * 
+ * Converts all upper case ASCII letters to lower case ASCII letters.
+ * 
+ * Return value: passed-in @string pointer, with all the upper case
+ *               characters converted to lower case in place, with
+ *               semantics that exactly match g_ascii_tolower().
+ **/
+GString*
+g_string_ascii_down (GString *string)
+{
+  gchar *s;
+  gint n;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  n = string->len;
+  s = string->str;
+
+  while (n)
+    {
+      *s = g_ascii_tolower (*s);
+      s++;
+      n--;
+    }
+
+  return string;
+}
+
+/**
+ * g_string_ascii_up:
+ * @string: a GString
+ * 
+ * Converts all lower case ASCII letters to upper case ASCII letters.
+ * 
+ * Return value: passed-in @string pointer, with all the lower case
+ *               characters converted to upper case in place, with
+ *               semantics that exactly match g_ascii_toupper().
+ **/
+GString*
+g_string_ascii_up (GString *string)
+{
+  gchar *s;
+  gint n;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  n = string->len;
+  s = string->str;
+
+  while (n)
+    {
+      *s = g_ascii_toupper (*s);
+      s++;
+      n--;
+    }
+
+  return string;
+}
+
+/**
+ * g_string_down:
+ * @string: a #GString
+ *  
+ * Converts a #GString to lowercase.
+ *
+ * Returns: the #GString.
+ *
+ * Deprecated:2.2: This function uses the locale-specific 
+ *   tolower() function, which is almost never the right thing. 
+ *   Use g_string_ascii_down() or g_utf8_strdown() instead.
+ */
+GString*
+g_string_down (GString *string)
+{
+  guchar *s;
+  glong n;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  n = string->len;    
+  s = (guchar *) string->str;
+
+  while (n)
+    {
+      if (isupper (*s))
+	*s = tolower (*s);
+      s++;
+      n--;
+    }
+
+  return string;
+}
+
+/**
+ * g_string_up:
+ * @string: a #GString 
+ * 
+ * Converts a #GString to uppercase.
+ * 
+ * Return value: @string
+ *
+ * Deprecated:2.2: This function uses the locale-specific 
+ *   toupper() function, which is almost never the right thing. 
+ *   Use g_string_ascii_up() or g_utf8_strup() instead.
+ **/
+GString*
+g_string_up (GString *string)
+{
+  guchar *s;
+  glong n;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  n = string->len;
+  s = (guchar *) string->str;
+
+  while (n)
+    {
+      if (islower (*s))
+	*s = toupper (*s);
+      s++;
+      n--;
+    }
+
+  return string;
+}
+
+/**
+ * g_string_append_vprintf:
+ * @string: a #GString
+ * @format: the string format. See the printf() documentation
+ * @args: the list of arguments to insert in the output
+ *
+ * Appends a formatted string onto the end of a #GString.
+ * This function is similar to g_string_append_printf()
+ * except that the arguments to the format string are passed
+ * as a va_list.
+ *
+ * Since: 2.14
+ */
+void
+g_string_append_vprintf (GString     *string,
+			 const gchar *format,
+			 va_list      args)
+{
+  gchar *buf;
+  gint len;
+  
+  g_return_if_fail (string != NULL);
+  g_return_if_fail (format != NULL);
+
+  len = g_vasprintf (&buf, format, args);
+
+  if (len >= 0)
+    {
+      g_string_maybe_expand (string, len);
+      memcpy (string->str + string->len, buf, len + 1);
+      string->len += len;
+      g_free (buf);
+    }
+}
+
+/**
+ * g_string_vprintf:
+ * @string: a #GString
+ * @format: the string format. See the printf() documentation
+ * @args: the parameters to insert into the format string
+ *
+ * Writes a formatted string into a #GString. 
+ * This function is similar to g_string_printf() except that 
+ * the arguments to the format string are passed as a va_list.
+ *
+ * Since: 2.14
+ */
+void
+g_string_vprintf (GString     *string,
+		  const gchar *format,
+		  va_list      args)
+{
+  g_string_truncate (string, 0);
+  g_string_append_vprintf (string, format, args);
+}
+
+/**
+ * g_string_sprintf:
+ * @string: a #GString
+ * @format: the string format. See the sprintf() documentation
+ * @Varargs: the parameters to insert into the format string
+ *
+ * Writes a formatted string into a #GString.
+ * This is similar to the standard sprintf() function,
+ * except that the #GString buffer automatically expands 
+ * to contain the results. The previous contents of the 
+ * #GString are destroyed. 
+ *
+ * Deprecated: This function has been renamed to g_string_printf().
+ */
+
+/**
+ * g_string_printf:
+ * @string: a #GString
+ * @format: the string format. See the printf() documentation
+ * @Varargs: the parameters to insert into the format string
+ *
+ * Writes a formatted string into a #GString.
+ * This is similar to the standard sprintf() function,
+ * except that the #GString buffer automatically expands 
+ * to contain the results. The previous contents of the 
+ * #GString are destroyed.
+ */
+void
+g_string_printf (GString     *string,
+		 const gchar *format,
+		 ...)
+{
+  va_list args;
+
+  g_string_truncate (string, 0);
+
+  va_start (args, format);
+  g_string_append_vprintf (string, format, args);
+  va_end (args);
+}
+
+/**
+ * g_string_sprintfa:
+ * @string: a #GString
+ * @format: the string format. See the sprintf() documentation
+ * @Varargs: the parameters to insert into the format string
+ *
+ * Appends a formatted string onto the end of a #GString.
+ * This function is similar to g_string_sprintf() except that
+ * the text is appended to the #GString. 
+ *
+ * Deprecated: This function has been renamed to g_string_append_printf()
+ */
+
+/**
+ * g_string_append_printf:
+ * @string: a #GString
+ * @format: the string format. See the printf() documentation
+ * @Varargs: the parameters to insert into the format string
+ *
+ * Appends a formatted string onto the end of a #GString.
+ * This function is similar to g_string_printf() except 
+ * that the text is appended to the #GString.
+ */
+void
+g_string_append_printf (GString     *string,
+			const gchar *format,
+			...)
+{
+  va_list args;
+
+  va_start (args, format);
+  g_string_append_vprintf (string, format, args);
+  va_end (args);
+}
+
+#define __G_STRING_C__
+#include "galiasdef.c"
diff --git a/glib/gstring.h b/glib/gstring.h
new file mode 100644
index 0000000..2b1dd6e
--- /dev/null
+++ b/glib/gstring.h
@@ -0,0 +1,178 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_STRING_H__
+#define __G_STRING_H__
+
+#include <glib/gtypes.h>
+#include <glib/gunicode.h>
+#include <glib/gutils.h>  /* for G_CAN_INLINE */
+
+G_BEGIN_DECLS
+
+typedef struct _GString		GString;
+typedef struct _GStringChunk	GStringChunk;
+
+struct _GString
+{
+  gchar  *str;
+  gsize len;    
+  gsize allocated_len;
+};
+
+/* String Chunks
+ */
+GStringChunk* g_string_chunk_new	   (gsize size);  
+void	      g_string_chunk_free	   (GStringChunk *chunk);
+void	      g_string_chunk_clear	   (GStringChunk *chunk);
+gchar*	      g_string_chunk_insert	   (GStringChunk *chunk,
+					    const gchar	 *string);
+gchar*	      g_string_chunk_insert_len	   (GStringChunk *chunk,
+					    const gchar	 *string,
+					    gssize        len);
+gchar*	      g_string_chunk_insert_const  (GStringChunk *chunk,
+					    const gchar	 *string);
+
+
+/* Strings
+ */
+GString*     g_string_new	        (const gchar	 *init);
+GString*     g_string_new_len           (const gchar     *init,
+                                         gssize           len);   
+GString*     g_string_sized_new         (gsize            dfl_size);  
+gchar*	     g_string_free	        (GString	 *string,
+					 gboolean	  free_segment);
+gboolean     g_string_equal             (const GString	 *v,
+					 const GString 	 *v2);
+guint        g_string_hash              (const GString   *str);
+GString*     g_string_assign            (GString	 *string,
+					 const gchar	 *rval);
+GString*     g_string_truncate          (GString	 *string,
+					 gsize		  len);    
+GString*     g_string_set_size          (GString         *string,
+					 gsize            len);
+GString*     g_string_insert_len        (GString         *string,
+                                         gssize           pos,   
+                                         const gchar     *val,
+                                         gssize           len);  
+GString*     g_string_append            (GString	 *string,
+			                 const gchar	 *val);
+GString*     g_string_append_len        (GString	 *string,
+			                 const gchar	 *val,
+                                         gssize           len);  
+GString*     g_string_append_c          (GString	 *string,
+					 gchar		  c);
+GString*     g_string_append_unichar    (GString	 *string,
+					 gunichar	  wc);
+GString*     g_string_prepend           (GString	 *string,
+					 const gchar	 *val);
+GString*     g_string_prepend_c         (GString	 *string,
+					 gchar		  c);
+GString*     g_string_prepend_unichar   (GString	 *string,
+					 gunichar	  wc);
+GString*     g_string_prepend_len       (GString	 *string,
+			                 const gchar	 *val,
+                                         gssize           len);  
+GString*     g_string_insert            (GString	 *string,
+					 gssize		  pos,    
+					 const gchar	 *val);
+GString*     g_string_insert_c          (GString	 *string,
+					 gssize		  pos,    
+					 gchar		  c);
+GString*     g_string_insert_unichar    (GString	 *string,
+					 gssize		  pos,    
+					 gunichar	  wc);
+GString*     g_string_overwrite         (GString	 *string,
+					 gsize		  pos,    
+					 const gchar	 *val);
+GString*     g_string_overwrite_len     (GString	 *string,
+					 gsize		  pos,    
+					 const gchar	 *val,
+					 gssize           len);
+GString*     g_string_erase	        (GString	 *string,
+					 gssize		  pos,
+					 gssize		  len);
+GString*     g_string_ascii_down        (GString	 *string);
+GString*     g_string_ascii_up          (GString	 *string);
+void         g_string_vprintf           (GString	 *string,
+					 const gchar	 *format,
+					 va_list          args);
+void         g_string_printf            (GString	 *string,
+					 const gchar	 *format,
+					 ...) G_GNUC_PRINTF (2, 3);
+void         g_string_append_vprintf    (GString	 *string,
+					 const gchar	 *format,
+					 va_list          args);
+void         g_string_append_printf     (GString	 *string,
+					 const gchar	 *format,
+					 ...) G_GNUC_PRINTF (2, 3);
+GString *    g_string_append_uri_escaped(GString         *string,
+					 const char      *unescaped,
+					 const char      *reserved_chars_allowed,
+					 gboolean         allow_utf8);
+
+/* -- optimize g_strig_append_c --- */
+#ifdef G_CAN_INLINE
+static inline GString*
+g_string_append_c_inline (GString *gstring,
+                          gchar    c)
+{
+  if (gstring->len + 1 < gstring->allocated_len)
+    {
+      gstring->str[gstring->len++] = c;
+      gstring->str[gstring->len] = 0;
+    }
+  else
+    g_string_insert_c (gstring, -1, c);
+  return gstring;
+}
+#define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
+#endif /* G_CAN_INLINE */
+
+
+#ifndef G_DISABLE_DEPRECATED
+
+/* The following two functions are deprecated and will be removed in
+ * the next major release. They use the locale-specific tolower and
+ * toupper, which is almost never the right thing.
+ */
+
+GString*     g_string_down              (GString	 *string);
+GString*     g_string_up                (GString	 *string);
+
+/* These aliases are included for compatibility. */
+#define	g_string_sprintf	g_string_printf
+#define	g_string_sprintfa	g_string_append_printf
+
+#endif /* G_DISABLE_DEPRECATED */
+
+G_END_DECLS
+
+#endif /* __G_STRING_H__ */
diff --git a/glib/gtestutils.c b/glib/gtestutils.c
new file mode 100644
index 0000000..3f19fbc
--- /dev/null
+++ b/glib/gtestutils.c
@@ -0,0 +1,2012 @@
+/* GLib testing utilities
+ * Copyright (C) 2007 Imendio AB
+ * Authors: Tim Janik, Sven Herzberg
+ *
+ * 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 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.
+ */
+#include "config.h"
+#include "gtestutils.h"
+#include "galias.h"
+#include <sys/types.h>
+#ifdef G_OS_UNIX
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef G_OS_WIN32
+#include <io.h>
+#endif
+#include <errno.h>
+#include <signal.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif /* HAVE_SYS_SELECT_H */
+
+/* --- structures --- */
+struct GTestCase
+{
+  gchar  *name;
+  guint   fixture_size;
+  void   (*fixture_setup)    (void*, gconstpointer);
+  void   (*fixture_test)     (void*, gconstpointer);
+  void   (*fixture_teardown) (void*, gconstpointer);
+  gpointer test_data;
+};
+struct GTestSuite
+{
+  gchar  *name;
+  GSList *suites;
+  GSList *cases;
+};
+typedef struct DestroyEntry DestroyEntry;
+struct DestroyEntry
+{
+  DestroyEntry *next;
+  GDestroyNotify destroy_func;
+  gpointer       destroy_data;
+};
+
+/* --- prototypes --- */
+static void     test_run_seed                   (const gchar *rseed);
+static void     test_trap_clear                 (void);
+static guint8*  g_test_log_dump                 (GTestLogMsg *msg,
+                                                 guint       *len);
+static void     gtest_default_log_handler       (const gchar    *log_domain,
+                                                 GLogLevelFlags  log_level,
+                                                 const gchar    *message,
+                                                 gpointer        unused_data);
+
+
+/* --- variables --- */
+static int         test_log_fd = -1;
+static gboolean    test_mode_fatal = TRUE;
+static gboolean    g_test_run_once = TRUE;
+static gboolean    test_run_list = FALSE;
+static gchar      *test_run_seedstr = NULL;
+static GRand      *test_run_rand = NULL;
+static gchar      *test_run_name = "";
+static guint       test_run_forks = 0;
+static guint       test_run_count = 0;
+static guint       test_skip_count = 0;
+static GTimer     *test_user_timer = NULL;
+static double      test_user_stamp = 0;
+static GSList     *test_paths = NULL;
+static GTestSuite *test_suite_root = NULL;
+static int         test_trap_last_status = 0;
+static int         test_trap_last_pid = 0;
+static char       *test_trap_last_stdout = NULL;
+static char       *test_trap_last_stderr = NULL;
+static char       *test_uri_base = NULL;
+static gboolean    test_debug_log = FALSE;
+static DestroyEntry *test_destroy_queue = NULL;
+static GTestConfig mutable_test_config_vars = {
+  FALSE,        /* test_initialized */
+  TRUE,         /* test_quick */
+  FALSE,        /* test_perf */
+  FALSE,        /* test_verbose */
+  FALSE,        /* test_quiet */
+};
+const GTestConfig * const g_test_config_vars = &mutable_test_config_vars;
+
+/* --- functions --- */
+const char*
+g_test_log_type_name (GTestLogType log_type)
+{
+  switch (log_type)
+    {
+    case G_TEST_LOG_NONE:               return "none";
+    case G_TEST_LOG_ERROR:              return "error";
+    case G_TEST_LOG_START_BINARY:       return "binary";
+    case G_TEST_LOG_LIST_CASE:          return "list";
+    case G_TEST_LOG_SKIP_CASE:          return "skip";
+    case G_TEST_LOG_START_CASE:         return "start";
+    case G_TEST_LOG_STOP_CASE:          return "stop";
+    case G_TEST_LOG_MIN_RESULT:         return "minperf";
+    case G_TEST_LOG_MAX_RESULT:         return "maxperf";
+    case G_TEST_LOG_MESSAGE:            return "message";
+    }
+  return "???";
+}
+
+static void
+g_test_log_send (guint         n_bytes,
+                 const guint8 *buffer)
+{
+  if (test_log_fd >= 0)
+    {
+      int r;
+      do
+        r = write (test_log_fd, buffer, n_bytes);
+      while (r < 0 && errno == EINTR);
+    }
+  if (test_debug_log)
+    {
+      GTestLogBuffer *lbuffer = g_test_log_buffer_new ();
+      GTestLogMsg *msg;
+      guint ui;
+      g_test_log_buffer_push (lbuffer, n_bytes, buffer);
+      msg = g_test_log_buffer_pop (lbuffer);
+      g_warn_if_fail (msg != NULL);
+      g_warn_if_fail (lbuffer->data->len == 0);
+      g_test_log_buffer_free (lbuffer);
+      /* print message */
+      g_printerr ("{*LOG(%s)", g_test_log_type_name (msg->log_type));
+      for (ui = 0; ui < msg->n_strings; ui++)
+        g_printerr (":{%s}", msg->strings[ui]);
+      if (msg->n_nums)
+        {
+          g_printerr (":(");
+          for (ui = 0; ui < msg->n_nums; ui++)
+            g_printerr ("%s%.16Lg", ui ? ";" : "", msg->nums[ui]);
+          g_printerr (")");
+        }
+      g_printerr (":LOG*}\n");
+      g_test_log_msg_free (msg);
+    }
+}
+
+static void
+g_test_log (GTestLogType lbit,
+            const gchar *string1,
+            const gchar *string2,
+            guint        n_args,
+            long double *largs)
+{
+  gboolean fail = lbit == G_TEST_LOG_STOP_CASE && largs[0] != 0;
+  GTestLogMsg msg;
+  gchar *astrings[3] = { NULL, NULL, NULL };
+  guint8 *dbuffer;
+  guint32 dbufferlen;
+
+  switch (lbit)
+    {
+    case G_TEST_LOG_START_BINARY:
+      if (g_test_verbose())
+        g_print ("GTest: random seed: %s\n", string2);
+      break;
+    case G_TEST_LOG_STOP_CASE:
+      if (g_test_verbose())
+        g_print ("GTest: result: %s\n", fail ? "FAIL" : "OK");
+      else if (!g_test_quiet())
+        g_print ("%s\n", fail ? "FAIL" : "OK");
+      if (fail && test_mode_fatal)
+        abort();
+      break;
+    case G_TEST_LOG_MIN_RESULT:
+      if (g_test_verbose())
+        g_print ("(MINPERF:%s)\n", string1);
+      break;
+    case G_TEST_LOG_MAX_RESULT:
+      if (g_test_verbose())
+        g_print ("(MAXPERF:%s)\n", string1);
+      break;
+    case G_TEST_LOG_MESSAGE:
+      if (g_test_verbose())
+        g_print ("(MSG: %s)\n", string1);
+      break;
+    default: ;
+    }
+
+  msg.log_type = lbit;
+  msg.n_strings = (string1 != NULL) + (string1 && string2);
+  msg.strings = astrings;
+  astrings[0] = (gchar*) string1;
+  astrings[1] = astrings[0] ? (gchar*) string2 : NULL;
+  msg.n_nums = n_args;
+  msg.nums = largs;
+  dbuffer = g_test_log_dump (&msg, &dbufferlen);
+  g_test_log_send (dbufferlen, dbuffer);
+  g_free (dbuffer);
+
+  switch (lbit)
+    {
+    case G_TEST_LOG_START_CASE:
+      if (g_test_verbose())
+        g_print ("GTest: run: %s\n", string1);
+      else if (!g_test_quiet())
+        g_print ("%s: ", string1);
+      break;
+    default: ;
+    }
+}
+
+/* We intentionally parse the command line without GOptionContext
+ * because otherwise you would never be able to test it.
+ */
+static void
+parse_args (gint    *argc_p,
+            gchar ***argv_p)
+{
+  guint argc = *argc_p;
+  gchar **argv = *argv_p;
+  guint i, e;
+  /* parse known args */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], "--g-fatal-warnings") == 0)
+        {
+          GLogLevelFlags fatal_mask = (GLogLevelFlags) g_log_set_always_fatal ((GLogLevelFlags) G_LOG_FATAL_MASK);
+          fatal_mask = (GLogLevelFlags) (fatal_mask | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
+          g_log_set_always_fatal (fatal_mask);
+          argv[i] = NULL;
+        }
+      else if (strcmp (argv[i], "--keep-going") == 0 ||
+               strcmp (argv[i], "-k") == 0)
+        {
+          test_mode_fatal = FALSE;
+          argv[i] = NULL;
+        }
+      else if (strcmp (argv[i], "--debug-log") == 0)
+        {
+          test_debug_log = TRUE;
+          argv[i] = NULL;
+        }
+      else if (strcmp ("--GTestLogFD", argv[i]) == 0 || strncmp ("--GTestLogFD=", argv[i], 13) == 0)
+        {
+          gchar *equal = argv[i] + 12;
+          if (*equal == '=')
+            test_log_fd = g_ascii_strtoull (equal + 1, NULL, 0);
+          else if (i + 1 < argc)
+            {
+              argv[i++] = NULL;
+              test_log_fd = g_ascii_strtoull (argv[i], NULL, 0);
+            }
+          argv[i] = NULL;
+        }
+      else if (strcmp ("--GTestSkipCount", argv[i]) == 0 || strncmp ("--GTestSkipCount=", argv[i], 17) == 0)
+        {
+          gchar *equal = argv[i] + 16;
+          if (*equal == '=')
+            test_skip_count = g_ascii_strtoull (equal + 1, NULL, 0);
+          else if (i + 1 < argc)
+            {
+              argv[i++] = NULL;
+              test_skip_count = g_ascii_strtoull (argv[i], NULL, 0);
+            }
+          argv[i] = NULL;
+        }
+      else if (strcmp ("-p", argv[i]) == 0 || strncmp ("-p=", argv[i], 3) == 0)
+        {
+          gchar *equal = argv[i] + 2;
+          if (*equal == '=')
+            test_paths = g_slist_prepend (test_paths, equal + 1);
+          else if (i + 1 < argc)
+            {
+              argv[i++] = NULL;
+              test_paths = g_slist_prepend (test_paths, argv[i]);
+            }
+          argv[i] = NULL;
+        }
+      else if (strcmp ("-m", argv[i]) == 0 || strncmp ("-m=", argv[i], 3) == 0)
+        {
+          gchar *equal = argv[i] + 2;
+          const gchar *mode = "";
+          if (*equal == '=')
+            mode = equal + 1;
+          else if (i + 1 < argc)
+            {
+              argv[i++] = NULL;
+              mode = argv[i];
+            }
+          if (strcmp (mode, "perf") == 0)
+            mutable_test_config_vars.test_perf = TRUE;
+          else if (strcmp (mode, "slow") == 0)
+            mutable_test_config_vars.test_quick = FALSE;
+          else if (strcmp (mode, "thorough") == 0)
+            mutable_test_config_vars.test_quick = FALSE;
+          else if (strcmp (mode, "quick") == 0)
+            {
+              mutable_test_config_vars.test_quick = TRUE;
+              mutable_test_config_vars.test_perf = FALSE;
+            }
+          else
+            g_error ("unknown test mode: -m %s", mode);
+          argv[i] = NULL;
+        }
+      else if (strcmp ("-q", argv[i]) == 0 || strcmp ("--quiet", argv[i]) == 0)
+        {
+          mutable_test_config_vars.test_quiet = TRUE;
+          mutable_test_config_vars.test_verbose = FALSE;
+          argv[i] = NULL;
+        }
+      else if (strcmp ("--verbose", argv[i]) == 0)
+        {
+          mutable_test_config_vars.test_quiet = FALSE;
+          mutable_test_config_vars.test_verbose = TRUE;
+          argv[i] = NULL;
+        }
+      else if (strcmp ("-l", argv[i]) == 0)
+        {
+          test_run_list = TRUE;
+          argv[i] = NULL;
+        }
+      else if (strcmp ("--seed", argv[i]) == 0 || strncmp ("--seed=", argv[i], 7) == 0)
+        {
+          gchar *equal = argv[i] + 6;
+          if (*equal == '=')
+            test_run_seedstr = equal + 1;
+          else if (i + 1 < argc)
+            {
+              argv[i++] = NULL;
+              test_run_seedstr = argv[i];
+            }
+          argv[i] = NULL;
+        }
+      else if (strcmp ("-?", argv[i]) == 0 || strcmp ("--help", argv[i]) == 0)
+        {
+          printf ("Usage:\n"
+                  "  %s [OPTION...]\n\n"
+                  "Help Options:\n"
+                  "  -?, --help                     Show help options\n"
+                  "Test Options:\n"
+                  "  -l                             List test cases available in a test executable\n"
+                  "  -seed=RANDOMSEED               Provide a random seed to reproduce test\n"
+                  "                                 runs using random numbers\n"
+                  "  --verbose                      Run tests verbosely\n"
+                  "  -q, --quiet                    Run tests quietly\n"
+                  "  -p TESTPATH                    execute all tests matching TESTPATH\n"
+                  "  -m {perf|slow|thorough|quick}  Execute tests according modes\n"
+                  "  --debug-log                    debug test logging output\n"
+                  "  -k, --keep-going               gtester-specific argument\n"
+                  "  --GTestLogFD=N                 gtester-specific argument\n"
+                  "  --GTestSkipCount=N             gtester-specific argument\n",
+                  argv[0]);
+          exit (0);
+        }
+    }
+  /* collapse argv */
+  e = 1;
+  for (i = 1; i < argc; i++)
+    if (argv[i])
+      {
+        argv[e++] = argv[i];
+        if (i >= e)
+          argv[i] = NULL;
+      }
+  *argc_p = e;
+}
+
+/**
+ * g_test_init:
+ * @argc: Address of the @argc parameter of the main() function.
+ *        Changed if any arguments were handled.
+ * @argv: Address of the @argv parameter of main().
+ *        Any parameters understood by g_test_init() stripped before return.
+ * @Varargs: Reserved for future extension. Currently, you must pass %NULL.
+ *
+ * Initialize the GLib testing framework, e.g. by seeding the
+ * test random number generator, the name for g_get_prgname()
+ * and parsing test related command line args.
+ * So far, the following arguments are understood:
+ * <variablelist>
+ *   <varlistentry>
+ *     <term><option>-l</option></term>
+ *     <listitem><para>
+ *       list test cases available in a test executable.
+ *     </para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term><option>--seed=<replaceable>RANDOMSEED</replaceable></option></term>
+ *     <listitem><para>
+ *       provide a random seed to reproduce test runs using random numbers.
+ *     </para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>--verbose</option></term>
+ *       <listitem><para>run tests verbosely.</para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>-q</option>, <option>--quiet</option></term>
+ *       <listitem><para>run tests quietly.</para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>-p <replaceable>TESTPATH</replaceable></option></term>
+ *       <listitem><para>
+ *         execute all tests matching <replaceable>TESTPATH</replaceable>.
+ *       </para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>-m {perf|slow|thorough|quick}</option></term>
+ *       <listitem><para>
+ *         execute tests according to these test modes:
+ *         <variablelist>
+ *           <varlistentry>
+ *             <term>perf</term>
+ *             <listitem><para>
+ *               performance tests, may take long and report results.
+ *             </para></listitem>
+ *           </varlistentry>
+ *           <varlistentry>
+ *             <term>slow, thorough</term>
+ *             <listitem><para>
+ *               slow and thorough tests, may take quite long and 
+ *               maximize coverage.
+ *             </para></listitem>
+ *           </varlistentry>
+ *           <varlistentry>
+ *             <term>quick</term>
+ *             <listitem><para>
+ *               quick tests, should run really quickly and give good coverage.
+ *             </para></listitem>
+ *           </varlistentry>
+ *         </variablelist>
+ *       </para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>--debug-log</option></term>
+ *       <listitem><para>debug test logging output.</para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>-k</option>, <option>--keep-going</option></term>
+ *       <listitem><para>gtester-specific argument.</para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>--GTestLogFD <replaceable>N</replaceable></option></term>
+ *       <listitem><para>gtester-specific argument.</para></listitem>
+ *     </varlistentry>
+ *     <varlistentry>
+ *       <term><option>--GTestSkipCount <replaceable>N</replaceable></option></term>
+ *       <listitem><para>gtester-specific argument.</para></listitem>
+ *     </varlistentry>
+ *  </variablelist>
+ *
+ * Since: 2.16
+ */
+void
+g_test_init (int    *argc,
+             char ***argv,
+             ...)
+{
+  static char seedstr[4 + 4 * 8 + 1];
+  va_list args;
+  gpointer vararg1;
+  /* make warnings and criticals fatal for all test programs */
+  GLogLevelFlags fatal_mask = (GLogLevelFlags) g_log_set_always_fatal ((GLogLevelFlags) G_LOG_FATAL_MASK);
+  fatal_mask = (GLogLevelFlags) (fatal_mask | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
+  g_log_set_always_fatal (fatal_mask);
+  /* check caller args */
+  g_return_if_fail (argc != NULL);
+  g_return_if_fail (argv != NULL);
+  g_return_if_fail (g_test_config_vars->test_initialized == FALSE);
+  mutable_test_config_vars.test_initialized = TRUE;
+
+  va_start (args, argv);
+  vararg1 = va_arg (args, gpointer); /* reserved for future extensions */
+  va_end (args);
+  g_return_if_fail (vararg1 == NULL);
+
+  /* setup random seed string */
+  g_snprintf (seedstr, sizeof (seedstr), "R02S%08x%08x%08x%08x", g_random_int(), g_random_int(), g_random_int(), g_random_int());
+  test_run_seedstr = seedstr;
+
+  /* parse args, sets up mode, changes seed, etc. */
+  parse_args (argc, argv);
+  if (!g_get_prgname())
+    g_set_prgname ((*argv)[0]);
+
+  /* verify GRand reliability, needed for reliable seeds */
+  if (1)
+    {
+      GRand *rg = g_rand_new_with_seed (0xc8c49fb6);
+      guint32 t1 = g_rand_int (rg), t2 = g_rand_int (rg), t3 = g_rand_int (rg), t4 = g_rand_int (rg);
+      /* g_print ("GRand-current: 0x%x 0x%x 0x%x 0x%x\n", t1, t2, t3, t4); */
+      if (t1 != 0xfab39f9b || t2 != 0xb948fb0e || t3 != 0x3d31be26 || t4 != 0x43a19d66)
+        g_warning ("random numbers are not GRand-2.2 compatible, seeds may be broken (check $G_RANDOM_VERSION)");
+      g_rand_free (rg);
+    }
+
+  /* check rand seed */
+  test_run_seed (test_run_seedstr);
+
+  /* report program start */
+  g_log_set_default_handler (gtest_default_log_handler, NULL);
+  g_test_log (G_TEST_LOG_START_BINARY, g_get_prgname(), test_run_seedstr, 0, NULL);
+}
+
+static void
+test_run_seed (const gchar *rseed)
+{
+  guint seed_failed = 0;
+  if (test_run_rand)
+    g_rand_free (test_run_rand);
+  test_run_rand = NULL;
+  while (strchr (" \t\v\r\n\f", *rseed))
+    rseed++;
+  if (strncmp (rseed, "R02S", 4) == 0)  /* seed for random generator 02 (GRand-2.2) */
+    {
+      const char *s = rseed + 4;
+      if (strlen (s) >= 32)             /* require 4 * 8 chars */
+        {
+          guint32 seedarray[4];
+          gchar *p, hexbuf[9] = { 0, };
+          memcpy (hexbuf, s + 0, 8);
+          seedarray[0] = g_ascii_strtoull (hexbuf, &p, 16);
+          seed_failed += p != NULL && *p != 0;
+          memcpy (hexbuf, s + 8, 8);
+          seedarray[1] = g_ascii_strtoull (hexbuf, &p, 16);
+          seed_failed += p != NULL && *p != 0;
+          memcpy (hexbuf, s + 16, 8);
+          seedarray[2] = g_ascii_strtoull (hexbuf, &p, 16);
+          seed_failed += p != NULL && *p != 0;
+          memcpy (hexbuf, s + 24, 8);
+          seedarray[3] = g_ascii_strtoull (hexbuf, &p, 16);
+          seed_failed += p != NULL && *p != 0;
+          if (!seed_failed)
+            {
+              test_run_rand = g_rand_new_with_seed_array (seedarray, 4);
+              return;
+            }
+        }
+    }
+  g_error ("Unknown or invalid random seed: %s", rseed);
+}
+
+/**
+ * g_test_rand_int:
+ *
+ * Get a reproducible random integer number.
+ *
+ * The random numbers generated by the g_test_rand_*() family of functions
+ * change with every new test program start, unless the --seed option is
+ * given when starting test programs.
+ *
+ * For individual test cases however, the random number generator is
+ * reseeded, to avoid dependencies between tests and to make --seed
+ * effective for all test cases.
+ *
+ * Returns: a random number from the seeded random number generator.
+ *
+ * Since: 2.16
+ */
+gint32
+g_test_rand_int (void)
+{
+  return g_rand_int (test_run_rand);
+}
+
+/**
+ * g_test_rand_int_range:
+ * @begin: the minimum value returned by this function
+ * @end:   the smallest value not to be returned by this function
+ *
+ * Get a reproducible random integer number out of a specified range,
+ * see g_test_rand_int() for details on test case random numbers.
+ *
+ * Returns: a number with @begin <= number < @end.
+ * 
+ * Since: 2.16
+ */
+gint32
+g_test_rand_int_range (gint32          begin,
+                       gint32          end)
+{
+  return g_rand_int_range (test_run_rand, begin, end);
+}
+
+/**
+ * g_test_rand_double:
+ *
+ * Get a reproducible random floating point number,
+ * see g_test_rand_int() for details on test case random numbers.
+ *
+ * Returns: a random number from the seeded random number generator.
+ *
+ * Since: 2.16
+ */
+double
+g_test_rand_double (void)
+{
+  return g_rand_double (test_run_rand);
+}
+
+/**
+ * g_test_rand_double_range:
+ * @range_start: the minimum value returned by this function
+ * @range_end: the minimum value not returned by this function
+ *
+ * Get a reproducible random floating pointer number out of a specified range,
+ * see g_test_rand_int() for details on test case random numbers.
+ *
+ * Returns: a number with @range_start <= number < @range_end.
+ *
+ * Since: 2.16
+ */
+double
+g_test_rand_double_range (double          range_start,
+                          double          range_end)
+{
+  return g_rand_double_range (test_run_rand, range_start, range_end);
+}
+
+/**
+ * g_test_timer_start:
+ *
+ * Start a timing test. Call g_test_timer_elapsed() when the task is supposed
+ * to be done. Call this function again to restart the timer.
+ *
+ * Since: 2.16
+ */
+void
+g_test_timer_start (void)
+{
+  if (!test_user_timer)
+    test_user_timer = g_timer_new();
+  test_user_stamp = 0;
+  g_timer_start (test_user_timer);
+}
+
+/**
+ * g_test_timer_elapsed:
+ *
+ * Get the time since the last start of the timer with g_test_timer_start().
+ *
+ * Returns: the time since the last start of the timer, as a double
+ *
+ * Since: 2.16
+ */
+double
+g_test_timer_elapsed (void)
+{
+  test_user_stamp = test_user_timer ? g_timer_elapsed (test_user_timer, NULL) : 0;
+  return test_user_stamp;
+}
+
+/**
+ * g_test_timer_last:
+ *
+ * Report the last result of g_test_timer_elapsed().
+ *
+ * Returns: the last result of g_test_timer_elapsed(), as a double
+ *
+ * Since: 2.16
+ */
+double
+g_test_timer_last (void)
+{
+  return test_user_stamp;
+}
+
+/**
+ * g_test_minimized_result:
+ * @minimized_quantity: the reported value
+ * @format: the format string of the report message
+ * @Varargs: arguments to pass to the printf() function
+ *
+ * Report the result of a performance or measurement test.
+ * The test should generally strive to minimize the reported
+ * quantities (smaller values are better than larger ones),
+ * this and @minimized_quantity can determine sorting
+ * order for test result reports.
+ *
+ * Since: 2.16
+ */
+void
+g_test_minimized_result (double          minimized_quantity,
+                         const char     *format,
+                         ...)
+{
+  long double largs = minimized_quantity;
+  gchar *buffer;
+  va_list args;
+  va_start (args, format);
+  buffer = g_strdup_vprintf (format, args);
+  va_end (args);
+  g_test_log (G_TEST_LOG_MIN_RESULT, buffer, NULL, 1, &largs);
+  g_free (buffer);
+}
+
+/**
+ * g_test_maximized_result:
+ * @maximized_quantity: the reported value
+ * @format: the format string of the report message
+ * @Varargs: arguments to pass to the printf() function
+ *
+ * Report the result of a performance or measurement test.
+ * The test should generally strive to maximize the reported
+ * quantities (larger values are better than smaller ones),
+ * this and @maximized_quantity can determine sorting
+ * order for test result reports.
+ *
+ * Since: 2.16
+ */
+void
+g_test_maximized_result (double          maximized_quantity,
+                         const char     *format,
+                         ...)
+{
+  long double largs = maximized_quantity;
+  gchar *buffer;
+  va_list args;
+  va_start (args, format);
+  buffer = g_strdup_vprintf (format, args);
+  va_end (args);
+  g_test_log (G_TEST_LOG_MAX_RESULT, buffer, NULL, 1, &largs);
+  g_free (buffer);
+}
+
+/**
+ * g_test_message:
+ * @format: the format string
+ * @...:    printf-like arguments to @format
+ *
+ * Add a message to the test report.
+ *
+ * Since: 2.16
+ */
+void
+g_test_message (const char *format,
+                ...)
+{
+  gchar *buffer;
+  va_list args;
+  va_start (args, format);
+  buffer = g_strdup_vprintf (format, args);
+  va_end (args);
+  g_test_log (G_TEST_LOG_MESSAGE, buffer, NULL, 0, NULL);
+  g_free (buffer);
+}
+
+/**
+ * g_test_bug_base:
+ * @uri_pattern: the base pattern for bug URIs
+ *
+ * Specify the base URI for bug reports.
+ *
+ * The base URI is used to construct bug report messages for
+ * g_test_message() when g_test_bug() is called.
+ * Calling this function outside of a test case sets the
+ * default base URI for all test cases. Calling it from within
+ * a test case changes the base URI for the scope of the test
+ * case only.
+ * Bug URIs are constructed by appending a bug specific URI
+ * portion to @uri_pattern, or by replacing the special string
+ * '%s' within @uri_pattern if that is present.
+ *
+ * Since: 2.16
+ */
+void
+g_test_bug_base (const char *uri_pattern)
+{
+  g_free (test_uri_base);
+  test_uri_base = g_strdup (uri_pattern);
+}
+
+/**
+ * g_test_bug:
+ * @bug_uri_snippet: Bug specific bug tracker URI portion.
+ *
+ * This function adds a message to test reports that
+ * associates a bug URI with a test case.
+ * Bug URIs are constructed from a base URI set with g_test_bug_base()
+ * and @bug_uri_snippet.
+ *
+ * Since: 2.16
+ */
+void
+g_test_bug (const char *bug_uri_snippet)
+{
+  char *c;
+  g_return_if_fail (test_uri_base != NULL);
+  g_return_if_fail (bug_uri_snippet != NULL);
+  c = strstr (test_uri_base, "%s");
+  if (c)
+    {
+      char *b = g_strndup (test_uri_base, c - test_uri_base);
+      char *s = g_strconcat (b, bug_uri_snippet, c + 2, NULL);
+      g_free (b);
+      g_test_message ("Bug Reference: %s", s);
+      g_free (s);
+    }
+  else
+    g_test_message ("Bug Reference: %s%s", test_uri_base, bug_uri_snippet);
+}
+
+/**
+ * g_test_get_root:
+ *
+ * Get the toplevel test suite for the test path API.
+ *
+ * Returns: the toplevel #GTestSuite
+ *
+ * Since: 2.16
+ */
+GTestSuite*
+g_test_get_root (void)
+{
+  if (!test_suite_root)
+    {
+      test_suite_root = g_test_create_suite ("root");
+      g_free (test_suite_root->name);
+      test_suite_root->name = g_strdup ("");
+    }
+  return test_suite_root;
+}
+
+/**
+ * g_test_run:
+ *
+ * Runs all tests under the toplevel suite which can be retrieved
+ * with g_test_get_root(). Similar to g_test_run_suite(), the test
+ * cases to be run are filtered according to
+ * test path arguments (-p <replaceable>testpath</replaceable>) as 
+ * parsed by g_test_init().
+ * g_test_run_suite() or g_test_run() may only be called once
+ * in a program.
+ *
+ * Returns: 0 on success
+ *
+ * Since: 2.16
+ */
+int
+g_test_run (void)
+{
+  return g_test_run_suite (g_test_get_root());
+}
+
+/**
+ * g_test_create_case:
+ * @test_name:     the name for the test case
+ * @data_size:     the size of the fixture data structure
+ * @test_data:     test data argument for the test functions
+ * @data_setup:    the function to set up the fixture data
+ * @data_test:     the actual test function
+ * @data_teardown: the function to teardown the fixture data
+ *
+ * Create a new #GTestCase, named @test_name, this API is fairly
+ * low level, calling g_test_add() or g_test_add_func() is preferable.
+ * When this test is executed, a fixture structure of size @data_size
+ * will be allocated and filled with 0s. Then data_setup() is called
+ * to initialize the fixture. After fixture setup, the actual test
+ * function data_test() is called. Once the test run completed, the
+ * fixture structure is torn down  by calling data_teardown() and
+ * after that the memory is released.
+ *
+ * Splitting up a test run into fixture setup, test function and
+ * fixture teardown is most usful if the same fixture is used for
+ * multiple tests. In this cases, g_test_create_case() will be
+ * called with the same fixture, but varying @test_name and
+ * @data_test arguments.
+ *
+ * Returns: a newly allocated #GTestCase.
+ *
+ * Since: 2.16
+ */
+GTestCase*
+g_test_create_case (const char     *test_name,
+                    gsize           data_size,
+                    gconstpointer   test_data,
+                    void          (*data_setup) (void),
+                    void          (*data_test) (void),
+                    void          (*data_teardown) (void))
+{
+  GTestCase *tc;
+  g_return_val_if_fail (test_name != NULL, NULL);
+  g_return_val_if_fail (strchr (test_name, '/') == NULL, NULL);
+  g_return_val_if_fail (test_name[0] != 0, NULL);
+  g_return_val_if_fail (data_test != NULL, NULL);
+  tc = g_slice_new0 (GTestCase);
+  tc->name = g_strdup (test_name);
+  tc->test_data = (gpointer) test_data;
+  tc->fixture_size = data_size;
+  tc->fixture_setup = (void*) data_setup;
+  tc->fixture_test = (void*) data_test;
+  tc->fixture_teardown = (void*) data_teardown;
+  return tc;
+}
+
+void
+g_test_add_vtable (const char     *testpath,
+                   gsize           data_size,
+                   gconstpointer   test_data,
+                   void          (*data_setup)    (void),
+                   void          (*fixture_test_func) (void),
+                   void          (*data_teardown) (void))
+{
+  gchar **segments;
+  guint ui;
+  GTestSuite *suite;
+
+  g_return_if_fail (testpath != NULL);
+  g_return_if_fail (testpath[0] == '/');
+  g_return_if_fail (fixture_test_func != NULL);
+
+  suite = g_test_get_root();
+  segments = g_strsplit (testpath, "/", -1);
+  for (ui = 0; segments[ui] != NULL; ui++)
+    {
+      const char *seg = segments[ui];
+      gboolean islast = segments[ui + 1] == NULL;
+      if (islast && !seg[0])
+        g_error ("invalid test case path: %s", testpath);
+      else if (!seg[0])
+        continue;       /* initial or duplicate slash */
+      else if (!islast)
+        {
+          GTestSuite *csuite = g_test_create_suite (seg);
+          g_test_suite_add_suite (suite, csuite);
+          suite = csuite;
+        }
+      else /* islast */
+        {
+          GTestCase *tc = g_test_create_case (seg, data_size, test_data, data_setup, fixture_test_func, data_teardown);
+          g_test_suite_add (suite, tc);
+        }
+    }
+  g_strfreev (segments);
+}
+
+/**
+ * g_test_add_func:
+ * @testpath:   Slash-separated test case path name for the test.
+ * @test_func:  The test function to invoke for this test.
+ *
+ * Create a new test case, similar to g_test_create_case(). However
+ * the test is assumed to use no fixture, and test suites are automatically
+ * created on the fly and added to the root fixture, based on the
+ * slash-separated portions of @testpath.
+ *
+ * Since: 2.16
+ */
+void
+g_test_add_func (const char     *testpath,
+                 void          (*test_func) (void))
+{
+  g_return_if_fail (testpath != NULL);
+  g_return_if_fail (testpath[0] == '/');
+  g_return_if_fail (test_func != NULL);
+  g_test_add_vtable (testpath, 0, NULL, NULL, test_func, NULL);
+}
+
+/**
+ * g_test_add_data_func:
+ * @testpath:   Slash-separated test case path name for the test.
+ * @test_data:  Test data argument for the test function.
+ * @test_func:  The test function to invoke for this test.
+ *
+ * Create a new test case, similar to g_test_create_case(). However
+ * the test is assumed to use no fixture, and test suites are automatically
+ * created on the fly and added to the root fixture, based on the
+ * slash-separated portions of @testpath. The @test_data argument
+ * will be passed as first argument to @test_func.
+ *
+ * Since: 2.16
+ */
+void
+g_test_add_data_func (const char     *testpath,
+                      gconstpointer   test_data,
+                      void          (*test_func) (gconstpointer))
+{
+  g_return_if_fail (testpath != NULL);
+  g_return_if_fail (testpath[0] == '/');
+  g_return_if_fail (test_func != NULL);
+  g_test_add_vtable (testpath, 0, test_data, NULL, (void(*)(void)) test_func, NULL);
+}
+
+/**
+ * g_test_create_suite:
+ * @suite_name: a name for the suite
+ *
+ * Create a new test suite with the name @suite_name.
+ *
+ * Returns: A newly allocated #GTestSuite instance.
+ *
+ * Since: 2.16
+ */
+GTestSuite*
+g_test_create_suite (const char *suite_name)
+{
+  GTestSuite *ts;
+  g_return_val_if_fail (suite_name != NULL, NULL);
+  g_return_val_if_fail (strchr (suite_name, '/') == NULL, NULL);
+  g_return_val_if_fail (suite_name[0] != 0, NULL);
+  ts = g_slice_new0 (GTestSuite);
+  ts->name = g_strdup (suite_name);
+  return ts;
+}
+
+/**
+ * g_test_suite_add:
+ * @suite: a #GTestSuite
+ * @test_case: a #GTestCase
+ *
+ * Adds @test_case to @suite.
+ *
+ * Since: 2.16
+ */
+void
+g_test_suite_add (GTestSuite     *suite,
+                  GTestCase      *test_case)
+{
+  g_return_if_fail (suite != NULL);
+  g_return_if_fail (test_case != NULL);
+  suite->cases = g_slist_prepend (suite->cases, test_case);
+}
+
+/**
+ * g_test_suite_add_suite:
+ * @suite:       a #GTestSuite
+ * @nestedsuite: another #GTestSuite
+ *
+ * Adds @nestedsuite to @suite.
+ *
+ * Since: 2.16
+ */
+void
+g_test_suite_add_suite (GTestSuite     *suite,
+                        GTestSuite     *nestedsuite)
+{
+  g_return_if_fail (suite != NULL);
+  g_return_if_fail (nestedsuite != NULL);
+  suite->suites = g_slist_prepend (suite->suites, nestedsuite);
+}
+
+/**
+ * g_test_queue_free:
+ * @gfree_pointer: the pointer to be stored.
+ *
+ * Enqueue a pointer to be released with g_free() during the next
+ * teardown phase. This is equivalent to calling g_test_queue_destroy()
+ * with a destroy callback of g_free().
+ *
+ * Since: 2.16
+ */
+void
+g_test_queue_free (gpointer gfree_pointer)
+{
+  if (gfree_pointer)
+    g_test_queue_destroy (g_free, gfree_pointer);
+}
+
+/**
+ * g_test_queue_destroy:
+ * @destroy_func:       Destroy callback for teardown phase.
+ * @destroy_data:       Destroy callback data.
+ *
+ * This function enqueus a callback @destroy_func() to be executed
+ * during the next test case teardown phase. This is most useful
+ * to auto destruct allocted test resources at the end of a test run.
+ * Resources are released in reverse queue order, that means enqueueing
+ * callback A before callback B will cause B() to be called before
+ * A() during teardown.
+ *
+ * Since: 2.16
+ */
+void
+g_test_queue_destroy (GDestroyNotify destroy_func,
+                      gpointer       destroy_data)
+{
+  DestroyEntry *dentry;
+  g_return_if_fail (destroy_func != NULL);
+  dentry = g_slice_new0 (DestroyEntry);
+  dentry->destroy_func = destroy_func;
+  dentry->destroy_data = destroy_data;
+  dentry->next = test_destroy_queue;
+  test_destroy_queue = dentry;
+}
+
+static int
+test_case_run (GTestCase *tc)
+{
+  gchar *old_name = test_run_name, *old_base = g_strdup (test_uri_base);
+  test_run_name = g_strconcat (old_name, "/", tc->name, NULL);
+  if (++test_run_count <= test_skip_count)
+    g_test_log (G_TEST_LOG_SKIP_CASE, test_run_name, NULL, 0, NULL);
+  else if (test_run_list)
+    {
+      g_print ("%s\n", test_run_name);
+      g_test_log (G_TEST_LOG_LIST_CASE, test_run_name, NULL, 0, NULL);
+    }
+  else
+    {
+      GTimer *test_run_timer = g_timer_new();
+      long double largs[3];
+      void *fixture;
+      g_test_log (G_TEST_LOG_START_CASE, test_run_name, NULL, 0, NULL);
+      test_run_forks = 0;
+      g_timer_start (test_run_timer);
+      fixture = tc->fixture_size ? g_malloc0 (tc->fixture_size) : tc->test_data;
+      test_run_seed (test_run_seedstr);
+      if (tc->fixture_setup)
+        tc->fixture_setup (fixture, tc->test_data);
+      tc->fixture_test (fixture, tc->test_data);
+      test_trap_clear();
+      while (test_destroy_queue)
+        {
+          DestroyEntry *dentry = test_destroy_queue;
+          test_destroy_queue = dentry->next;
+          dentry->destroy_func (dentry->destroy_data);
+          g_slice_free (DestroyEntry, dentry);
+        }
+      if (tc->fixture_teardown)
+        tc->fixture_teardown (fixture, tc->test_data);
+      if (tc->fixture_size)
+        g_free (fixture);
+      g_timer_stop (test_run_timer);
+      largs[0] = 0; /* OK */
+      largs[1] = test_run_forks;
+      largs[2] = g_timer_elapsed (test_run_timer, NULL);
+      g_test_log (G_TEST_LOG_STOP_CASE, NULL, NULL, G_N_ELEMENTS (largs), largs);
+      g_timer_destroy (test_run_timer);
+    }
+  g_free (test_run_name);
+  test_run_name = old_name;
+  g_free (test_uri_base);
+  test_uri_base = old_base;
+  return 0;
+}
+
+static int
+g_test_run_suite_internal (GTestSuite *suite,
+                           const char *path)
+{
+  guint n_bad = 0, n_good = 0, bad_suite = 0, l;
+  gchar *rest, *old_name = test_run_name;
+  GSList *slist, *reversed;
+  g_return_val_if_fail (suite != NULL, -1);
+  while (path[0] == '/')
+    path++;
+  l = strlen (path);
+  rest = strchr (path, '/');
+  l = rest ? MIN (l, rest - path) : l;
+  test_run_name = suite->name[0] == 0 ? g_strdup (test_run_name) : g_strconcat (old_name, "/", suite->name, NULL);
+  reversed = g_slist_reverse (g_slist_copy (suite->cases));
+  for (slist = reversed; slist; slist = slist->next)
+    {
+      GTestCase *tc = slist->data;
+      guint n = l ? strlen (tc->name) : 0;
+      if (l == n && strncmp (path, tc->name, n) == 0)
+        {
+          n_good++;
+          n_bad += test_case_run (tc) != 0;
+        }
+    }
+  g_slist_free (reversed);
+  reversed = g_slist_reverse (g_slist_copy (suite->suites));
+  for (slist = reversed; slist; slist = slist->next)
+    {
+      GTestSuite *ts = slist->data;
+      guint n = l ? strlen (ts->name) : 0;
+      if (l == n && strncmp (path, ts->name, n) == 0)
+        bad_suite += g_test_run_suite_internal (ts, rest ? rest : "") != 0;
+    }
+  g_slist_free (reversed);
+  g_free (test_run_name);
+  test_run_name = old_name;
+  return n_bad || bad_suite;
+}
+
+/**
+ * g_test_run_suite:
+ * @suite: a #GTestSuite
+ *
+ * Execute the tests within @suite and all nested #GTestSuites.
+ * The test suites to be executed are filtered according to
+ * test path arguments (-p <replaceable>testpath</replaceable>) 
+ * as parsed by g_test_init().
+ * g_test_run_suite() or g_test_run() may only be called once
+ * in a program.
+ *
+ * Returns: 0 on success
+ *
+ * Since: 2.16
+ */
+int
+g_test_run_suite (GTestSuite *suite)
+{
+  guint n_bad = 0;
+  g_return_val_if_fail (g_test_config_vars->test_initialized, -1);
+  g_return_val_if_fail (g_test_run_once == TRUE, -1);
+  g_test_run_once = FALSE;
+  if (!test_paths)
+    test_paths = g_slist_prepend (test_paths, "");
+  while (test_paths)
+    {
+      const char *rest, *path = test_paths->data;
+      guint l, n = strlen (suite->name);
+      test_paths = g_slist_delete_link (test_paths, test_paths);
+      while (path[0] == '/')
+        path++;
+      if (!n) /* root suite, run unconditionally */
+        {
+          n_bad += 0 != g_test_run_suite_internal (suite, path);
+          continue;
+        }
+      /* regular suite, match path */
+      rest = strchr (path, '/');
+      l = strlen (path);
+      l = rest ? MIN (l, rest - path) : l;
+      if ((!l || l == n) && strncmp (path, suite->name, n) == 0)
+        n_bad += 0 != g_test_run_suite_internal (suite, rest ? rest : "");
+    }
+  return n_bad;
+}
+
+static void
+gtest_default_log_handler (const gchar    *log_domain,
+                           GLogLevelFlags  log_level,
+                           const gchar    *message,
+                           gpointer        unused_data)
+{
+  const gchar *strv[16];
+  gchar *msg;
+  guint i = 0;
+  if (log_domain)
+    {
+      strv[i++] = log_domain;
+      strv[i++] = "-";
+    }
+  if (log_level & G_LOG_FLAG_FATAL)
+    strv[i++] = "FATAL-";
+  if (log_level & G_LOG_FLAG_RECURSION)
+    strv[i++] = "RECURSIVE-";
+  if (log_level & G_LOG_LEVEL_ERROR)
+    strv[i++] = "ERROR";
+  if (log_level & G_LOG_LEVEL_CRITICAL)
+    strv[i++] = "CRITICAL";
+  if (log_level & G_LOG_LEVEL_WARNING)
+    strv[i++] = "WARNING";
+  if (log_level & G_LOG_LEVEL_MESSAGE)
+    strv[i++] = "MESSAGE";
+  if (log_level & G_LOG_LEVEL_INFO)
+    strv[i++] = "INFO";
+  if (log_level & G_LOG_LEVEL_DEBUG)
+    strv[i++] = "DEBUG";
+  strv[i++] = ": ";
+  strv[i++] = message;
+  strv[i++] = NULL;
+  msg = g_strjoinv ("", (gchar**) strv);
+  g_test_log (G_TEST_LOG_ERROR, msg, NULL, 0, NULL);
+  g_log_default_handler (log_domain, log_level, message, unused_data);
+  g_free (msg);
+}
+
+void
+g_assertion_message (const char     *domain,
+                     const char     *file,
+                     int             line,
+                     const char     *func,
+                     const char     *message)
+{
+  char lstr[32];
+  char *s;
+  if (!message)
+    message = "code should not be reached";
+  g_snprintf (lstr, 32, "%d", line);
+  s = g_strconcat (domain ? domain : "", domain && domain[0] ? ":" : "",
+                   "ERROR:", file, ":", lstr, ":",
+                   func, func[0] ? ":" : "",
+                   " ", message, NULL);
+  g_printerr ("**\n%s\n", s);
+  g_test_log (G_TEST_LOG_ERROR, s, NULL, 0, NULL);
+  g_free (s);
+  abort();
+}
+
+void
+g_assertion_message_expr (const char     *domain,
+                          const char     *file,
+                          int             line,
+                          const char     *func,
+                          const char     *expr)
+{
+  char *s = g_strconcat ("assertion failed: (", expr, ")", NULL);
+  g_assertion_message (domain, file, line, func, s);
+  g_free (s);
+}
+
+void
+g_assertion_message_cmpnum (const char     *domain,
+                            const char     *file,
+                            int             line,
+                            const char     *func,
+                            const char     *expr,
+                            long double     arg1,
+                            const char     *cmp,
+                            long double     arg2,
+                            char            numtype)
+{
+  char *s = NULL;
+  switch (numtype)
+    {
+    case 'i':   s = g_strdup_printf ("assertion failed (%s): (%.0Lf %s %.0Lf)", expr, arg1, cmp, arg2); break;
+    case 'x':   s = g_strdup_printf ("assertion failed (%s): (0x%08" G_GINT64_MODIFIER "x %s 0x%08" G_GINT64_MODIFIER "x)", expr, (guint64) arg1, cmp, (guint64) arg2); break;
+    case 'f':   s = g_strdup_printf ("assertion failed (%s): (%.9Lg %s %.9Lg)", expr, arg1, cmp, arg2); break;
+      /* ideally use: floats=%.7g double=%.17g */
+    }
+  g_assertion_message (domain, file, line, func, s);
+  g_free (s);
+}
+
+void
+g_assertion_message_cmpstr (const char     *domain,
+                            const char     *file,
+                            int             line,
+                            const char     *func,
+                            const char     *expr,
+                            const char     *arg1,
+                            const char     *cmp,
+                            const char     *arg2)
+{
+  char *a1, *a2, *s, *t1 = NULL, *t2 = NULL;
+  a1 = arg1 ? g_strconcat ("\"", t1 = g_strescape (arg1, NULL), "\"", NULL) : g_strdup ("NULL");
+  a2 = arg2 ? g_strconcat ("\"", t2 = g_strescape (arg2, NULL), "\"", NULL) : g_strdup ("NULL");
+  g_free (t1);
+  g_free (t2);
+  s = g_strdup_printf ("assertion failed (%s): (%s %s %s)", expr, a1, cmp, a2);
+  g_free (a1);
+  g_free (a2);
+  g_assertion_message (domain, file, line, func, s);
+  g_free (s);
+}
+
+void
+g_assertion_message_error (const char     *domain,
+			   const char     *file,
+			   int             line,
+			   const char     *func,
+			   const char     *expr,
+			   GError         *error,
+			   GQuark          error_domain,
+			   int             error_code)
+{
+  GString *gstring;
+
+  /* This is used by both g_assert_error() and g_assert_no_error(), so there
+   * are three cases: expected an error but got the wrong error, expected
+   * an error but got no error, and expected no error but got an error.
+   */
+
+  gstring = g_string_new ("assertion failed ");
+  if (error_domain)
+      g_string_append_printf (gstring, "(%s == (%s, %d)): ", expr,
+			      g_quark_to_string (error_domain), error_code);
+  else
+    g_string_append_printf (gstring, "(%s == NULL): ", expr);
+
+  if (error)
+      g_string_append_printf (gstring, "%s (%s, %d)", error->message,
+			      g_quark_to_string (error->domain), error->code);
+  else
+    g_string_append_printf (gstring, "%s is NULL", expr);
+
+  g_assertion_message (domain, file, line, func, gstring->str);
+  g_string_free (gstring, TRUE);
+}
+
+/**
+ * g_strcmp0:
+ * @str1: a C string or %NULL
+ * @str2: another C string or %NULL
+ *
+ * Compares @str1 and @str2 like strcmp(). Handles %NULL 
+ * gracefully by sorting it before non-%NULL strings.
+ *
+ * Returns: -1, 0 or 1, if @str1 is <, == or > than @str2.
+ *
+ * Since: 2.16
+ */
+int
+g_strcmp0 (const char     *str1,
+           const char     *str2)
+{
+  if (!str1)
+    return -(str1 != str2);
+  if (!str2)
+    return str1 != str2;
+  return strcmp (str1, str2);
+}
+
+#ifdef G_OS_UNIX
+static int /* 0 on success */
+kill_child (int  pid,
+            int *status,
+            int  patience)
+{
+  int wr;
+  if (patience >= 3)    /* try graceful reap */
+    {
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+    }
+  if (patience >= 2)    /* try SIGHUP */
+    {
+      kill (pid, SIGHUP);
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+      g_usleep (20 * 1000); /* give it some scheduling/shutdown time */
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+      g_usleep (50 * 1000); /* give it some scheduling/shutdown time */
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+      g_usleep (100 * 1000); /* give it some scheduling/shutdown time */
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+    }
+  if (patience >= 1)    /* try SIGTERM */
+    {
+      kill (pid, SIGTERM);
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+      g_usleep (200 * 1000); /* give it some scheduling/shutdown time */
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+      g_usleep (400 * 1000); /* give it some scheduling/shutdown time */
+      if (waitpid (pid, status, WNOHANG) > 0)
+        return 0;
+    }
+  /* finish it off */
+  kill (pid, SIGKILL);
+  do
+    wr = waitpid (pid, status, 0);
+  while (wr < 0 && errno == EINTR);
+  return wr;
+}
+#endif
+
+static inline int
+g_string_must_read (GString *gstring,
+                    int      fd)
+{
+#define STRING_BUFFER_SIZE     4096
+  char buf[STRING_BUFFER_SIZE];
+  gssize bytes;
+ again:
+  bytes = read (fd, buf, sizeof (buf));
+  if (bytes == 0)
+    return 0; /* EOF, calling this function assumes data is available */
+  else if (bytes > 0)
+    {
+      g_string_append_len (gstring, buf, bytes);
+      return 1;
+    }
+  else if (bytes < 0 && errno == EINTR)
+    goto again;
+  else /* bytes < 0 */
+    {
+      g_warning ("failed to read() from child process (%d): %s", test_trap_last_pid, g_strerror (errno));
+      return 1; /* ignore error after warning */
+    }
+}
+
+static inline void
+g_string_write_out (GString *gstring,
+                    int      outfd,
+                    int     *stringpos)
+{
+  if (*stringpos < gstring->len)
+    {
+      int r;
+      do
+        r = write (outfd, gstring->str + *stringpos, gstring->len - *stringpos);
+      while (r < 0 && errno == EINTR);
+      *stringpos += MAX (r, 0);
+    }
+}
+
+static void
+test_trap_clear (void)
+{
+  test_trap_last_status = 0;
+  test_trap_last_pid = 0;
+  g_free (test_trap_last_stdout);
+  test_trap_last_stdout = NULL;
+  g_free (test_trap_last_stderr);
+  test_trap_last_stderr = NULL;
+}
+
+#ifdef G_OS_UNIX
+
+static int
+sane_dup2 (int fd1,
+           int fd2)
+{
+  int ret;
+  do
+    ret = dup2 (fd1, fd2);
+  while (ret < 0 && errno == EINTR);
+  return ret;
+}
+
+static guint64
+test_time_stamp (void)
+{
+  GTimeVal tv;
+  guint64 stamp;
+  g_get_current_time (&tv);
+  stamp = tv.tv_sec;
+  stamp = stamp * 1000000 + tv.tv_usec;
+  return stamp;
+}
+
+#endif
+
+/**
+ * g_test_trap_fork:
+ * @usec_timeout:    Timeout for the forked test in micro seconds.
+ * @test_trap_flags: Flags to modify forking behaviour.
+ *
+ * Fork the current test program to execute a test case that might
+ * not return or that might abort. The forked test case is aborted
+ * and considered failing if its run time exceeds @usec_timeout.
+ *
+ * The forking behavior can be configured with the #GTestTrapFlags flags.
+ *
+ * In the following example, the test code forks, the forked child
+ * process produces some sample output and exits successfully.
+ * The forking parent process then asserts successful child program
+ * termination and validates child program outputs.
+ *
+ * |[
+ *   static void
+ *   test_fork_patterns (void)
+ *   {
+ *     if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
+ *       {
+ *         g_print ("some stdout text: somagic17\n");
+ *         g_printerr ("some stderr text: semagic43\n");
+ *         exit (0); /&ast; successful test run &ast;/
+ *       }
+ *     g_test_trap_assert_passed();
+ *     g_test_trap_assert_stdout ("*somagic17*");
+ *     g_test_trap_assert_stderr ("*semagic43*");
+ *   }
+ * ]|
+ *
+ * This function is implemented only on Unix platforms.
+ *
+ * Returns: %TRUE for the forked child and %FALSE for the executing parent process.
+ *
+ * Since: 2.16
+ */
+gboolean
+g_test_trap_fork (guint64        usec_timeout,
+                  GTestTrapFlags test_trap_flags)
+{
+#ifdef G_OS_UNIX
+  gboolean pass_on_forked_log = FALSE;
+  int stdout_pipe[2] = { -1, -1 };
+  int stderr_pipe[2] = { -1, -1 };
+  int stdtst_pipe[2] = { -1, -1 };
+  test_trap_clear();
+  if (pipe (stdout_pipe) < 0 || pipe (stderr_pipe) < 0 || pipe (stdtst_pipe) < 0)
+    g_error ("failed to create pipes to fork test program: %s", g_strerror (errno));
+  signal (SIGCHLD, SIG_DFL);
+  test_trap_last_pid = fork ();
+  if (test_trap_last_pid < 0)
+    g_error ("failed to fork test program: %s", g_strerror (errno));
+  if (test_trap_last_pid == 0)  /* child */
+    {
+      int fd0 = -1;
+      close (stdout_pipe[0]);
+      close (stderr_pipe[0]);
+      close (stdtst_pipe[0]);
+      if (!(test_trap_flags & G_TEST_TRAP_INHERIT_STDIN))
+        fd0 = open ("/dev/null", O_RDONLY);
+      if (sane_dup2 (stdout_pipe[1], 1) < 0 || sane_dup2 (stderr_pipe[1], 2) < 0 || (fd0 >= 0 && sane_dup2 (fd0, 0) < 0))
+        g_error ("failed to dup2() in forked test program: %s", g_strerror (errno));
+      if (fd0 >= 3)
+        close (fd0);
+      if (stdout_pipe[1] >= 3)
+        close (stdout_pipe[1]);
+      if (stderr_pipe[1] >= 3)
+        close (stderr_pipe[1]);
+      test_log_fd = stdtst_pipe[1];
+      return TRUE;
+    }
+  else                          /* parent */
+    {
+      GString *sout = g_string_new (NULL);
+      GString *serr = g_string_new (NULL);
+      guint64 sstamp;
+      int soutpos = 0, serrpos = 0, wr, need_wait = TRUE;
+      test_run_forks++;
+      close (stdout_pipe[1]);
+      close (stderr_pipe[1]);
+      close (stdtst_pipe[1]);
+      sstamp = test_time_stamp();
+      /* read data until we get EOF on all pipes */
+      while (stdout_pipe[0] >= 0 || stderr_pipe[0] >= 0 || stdtst_pipe[0] > 0)
+        {
+          fd_set fds;
+          struct timeval tv;
+          int ret;
+          FD_ZERO (&fds);
+          if (stdout_pipe[0] >= 0)
+            FD_SET (stdout_pipe[0], &fds);
+          if (stderr_pipe[0] >= 0)
+            FD_SET (stderr_pipe[0], &fds);
+          if (stdtst_pipe[0] >= 0)
+            FD_SET (stdtst_pipe[0], &fds);
+          tv.tv_sec = 0;
+          tv.tv_usec = MIN (usec_timeout ? usec_timeout : 1000000, 100 * 1000); /* sleep at most 0.5 seconds to catch clock skews, etc. */
+          ret = select (MAX (MAX (stdout_pipe[0], stderr_pipe[0]), stdtst_pipe[0]) + 1, &fds, NULL, NULL, &tv);
+          if (ret < 0 && errno != EINTR)
+            {
+              g_warning ("Unexpected error in select() while reading from child process (%d): %s", test_trap_last_pid, g_strerror (errno));
+              break;
+            }
+          if (stdout_pipe[0] >= 0 && FD_ISSET (stdout_pipe[0], &fds) &&
+              g_string_must_read (sout, stdout_pipe[0]) == 0)
+            {
+              close (stdout_pipe[0]);
+              stdout_pipe[0] = -1;
+            }
+          if (stderr_pipe[0] >= 0 && FD_ISSET (stderr_pipe[0], &fds) &&
+              g_string_must_read (serr, stderr_pipe[0]) == 0)
+            {
+              close (stderr_pipe[0]);
+              stderr_pipe[0] = -1;
+            }
+          if (stdtst_pipe[0] >= 0 && FD_ISSET (stdtst_pipe[0], &fds))
+            {
+              guint8 buffer[4096];
+              gint l, r = read (stdtst_pipe[0], buffer, sizeof (buffer));
+              if (r > 0 && test_log_fd > 0)
+                do
+                  l = write (pass_on_forked_log ? test_log_fd : -1, buffer, r);
+                while (l < 0 && errno == EINTR);
+              if (r == 0 || (r < 0 && errno != EINTR && errno != EAGAIN))
+                {
+                  close (stdtst_pipe[0]);
+                  stdtst_pipe[0] = -1;
+                }
+            }
+          if (!(test_trap_flags & G_TEST_TRAP_SILENCE_STDOUT))
+            g_string_write_out (sout, 1, &soutpos);
+          if (!(test_trap_flags & G_TEST_TRAP_SILENCE_STDERR))
+            g_string_write_out (serr, 2, &serrpos);
+          if (usec_timeout)
+            {
+              guint64 nstamp = test_time_stamp();
+              int status = 0;
+              sstamp = MIN (sstamp, nstamp); /* guard against backwards clock skews */
+              if (usec_timeout < nstamp - sstamp)
+                {
+                  /* timeout reached, need to abort the child now */
+                  kill_child (test_trap_last_pid, &status, 3);
+                  test_trap_last_status = 1024; /* timeout */
+                  if (0 && WIFSIGNALED (status))
+                    g_printerr ("%s: child timed out and received: %s\n", G_STRFUNC, g_strsignal (WTERMSIG (status)));
+                  need_wait = FALSE;
+                  break;
+                }
+            }
+        }
+      close (stdout_pipe[0]);
+      close (stderr_pipe[0]);
+      close (stdtst_pipe[0]);
+      if (need_wait)
+        {
+          int status = 0;
+          do
+            wr = waitpid (test_trap_last_pid, &status, 0);
+          while (wr < 0 && errno == EINTR);
+          if (WIFEXITED (status)) /* normal exit */
+            test_trap_last_status = WEXITSTATUS (status); /* 0..255 */
+          else if (WIFSIGNALED (status))
+            test_trap_last_status = (WTERMSIG (status) << 12); /* signalled */
+          else /* WCOREDUMP (status) */
+            test_trap_last_status = 512; /* coredump */
+        }
+      test_trap_last_stdout = g_string_free (sout, FALSE);
+      test_trap_last_stderr = g_string_free (serr, FALSE);
+      return FALSE;
+    }
+#else
+  g_message ("Not implemented: g_test_trap_fork");
+
+  return FALSE;
+#endif
+}
+
+/**
+ * g_test_trap_has_passed:
+ *
+ * Check the result of the last g_test_trap_fork() call.
+ *
+ * Returns: %TRUE if the last forked child terminated successfully.
+ *
+ * Since: 2.16
+ */
+gboolean
+g_test_trap_has_passed (void)
+{
+  return test_trap_last_status == 0; /* exit_status == 0 && !signal && !coredump */
+}
+
+/**
+ * g_test_trap_reached_timeout:
+ *
+ * Check the result of the last g_test_trap_fork() call.
+ *
+ * Returns: %TRUE if the last forked child got killed due to a fork timeout.
+ *
+ * Since: 2.16
+ */
+gboolean
+g_test_trap_reached_timeout (void)
+{
+  return 0 != (test_trap_last_status & 1024); /* timeout flag */
+}
+
+void
+g_test_trap_assertions (const char     *domain,
+                        const char     *file,
+                        int             line,
+                        const char     *func,
+                        guint64         assertion_flags, /* 0-pass, 1-fail, 2-outpattern, 4-errpattern */
+                        const char     *pattern)
+{
+#ifdef G_OS_UNIX
+  gboolean must_pass = assertion_flags == 0;
+  gboolean must_fail = assertion_flags == 1;
+  gboolean match_result = 0 == (assertion_flags & 1);
+  const char *stdout_pattern = (assertion_flags & 2) ? pattern : NULL;
+  const char *stderr_pattern = (assertion_flags & 4) ? pattern : NULL;
+  const char *match_error = match_result ? "failed to match" : "contains invalid match";
+  if (test_trap_last_pid == 0)
+    g_error ("child process failed to exit after g_test_trap_fork() and before g_test_trap_assert*()");
+  if (must_pass && !g_test_trap_has_passed())
+    {
+      char *msg = g_strdup_printf ("child process (%d) of test trap failed unexpectedly", test_trap_last_pid);
+      g_assertion_message (domain, file, line, func, msg);
+      g_free (msg);
+    }
+  if (must_fail && g_test_trap_has_passed())
+    {
+      char *msg = g_strdup_printf ("child process (%d) did not fail as expected", test_trap_last_pid);
+      g_assertion_message (domain, file, line, func, msg);
+      g_free (msg);
+    }
+  if (stdout_pattern && match_result == !g_pattern_match_simple (stdout_pattern, test_trap_last_stdout))
+    {
+      char *msg = g_strdup_printf ("stdout of child process (%d) %s: %s", test_trap_last_pid, match_error, stdout_pattern);
+      g_assertion_message (domain, file, line, func, msg);
+      g_free (msg);
+    }
+  if (stderr_pattern && match_result == !g_pattern_match_simple (stderr_pattern, test_trap_last_stderr))
+    {
+      char *msg = g_strdup_printf ("stderr of child process (%d) %s: %s", test_trap_last_pid, match_error, stderr_pattern);
+      g_assertion_message (domain, file, line, func, msg);
+      g_free (msg);
+    }
+#endif
+}
+
+static void
+gstring_overwrite_int (GString *gstring,
+                       guint    pos,
+                       guint32  vuint)
+{
+  vuint = g_htonl (vuint);
+  g_string_overwrite_len (gstring, pos, (const gchar*) &vuint, 4);
+}
+
+static void
+gstring_append_int (GString *gstring,
+                    guint32  vuint)
+{
+  vuint = g_htonl (vuint);
+  g_string_append_len (gstring, (const gchar*) &vuint, 4);
+}
+
+static void
+gstring_append_double (GString *gstring,
+                       double   vdouble)
+{
+  union { double vdouble; guint64 vuint64; } u;
+  u.vdouble = vdouble;
+  u.vuint64 = GUINT64_TO_BE (u.vuint64);
+  g_string_append_len (gstring, (const gchar*) &u.vuint64, 8);
+}
+
+static guint8*
+g_test_log_dump (GTestLogMsg *msg,
+                 guint       *len)
+{
+  GString *gstring = g_string_sized_new (1024);
+  guint ui;
+  gstring_append_int (gstring, 0);              /* message length */
+  gstring_append_int (gstring, msg->log_type);
+  gstring_append_int (gstring, msg->n_strings);
+  gstring_append_int (gstring, msg->n_nums);
+  gstring_append_int (gstring, 0);      /* reserved */
+  for (ui = 0; ui < msg->n_strings; ui++)
+    {
+      guint l = strlen (msg->strings[ui]);
+      gstring_append_int (gstring, l);
+      g_string_append_len (gstring, msg->strings[ui], l);
+    }
+  for (ui = 0; ui < msg->n_nums; ui++)
+    gstring_append_double (gstring, msg->nums[ui]);
+  *len = gstring->len;
+  gstring_overwrite_int (gstring, 0, *len);     /* message length */
+  return (guint8*) g_string_free (gstring, FALSE);
+}
+
+static inline long double
+net_double (const gchar **ipointer)
+{
+  union { guint64 vuint64; double vdouble; } u;
+  guint64 aligned_int64;
+  memcpy (&aligned_int64, *ipointer, 8);
+  *ipointer += 8;
+  u.vuint64 = GUINT64_FROM_BE (aligned_int64);
+  return u.vdouble;
+}
+
+static inline guint32
+net_int (const gchar **ipointer)
+{
+  guint32 aligned_int;
+  memcpy (&aligned_int, *ipointer, 4);
+  *ipointer += 4;
+  return g_ntohl (aligned_int);
+}
+
+static gboolean
+g_test_log_extract (GTestLogBuffer *tbuffer)
+{
+  const gchar *p = tbuffer->data->str;
+  GTestLogMsg msg;
+  guint mlength;
+  if (tbuffer->data->len < 4 * 5)
+    return FALSE;
+  mlength = net_int (&p);
+  if (tbuffer->data->len < mlength)
+    return FALSE;
+  msg.log_type = net_int (&p);
+  msg.n_strings = net_int (&p);
+  msg.n_nums = net_int (&p);
+  if (net_int (&p) == 0)
+    {
+      guint ui;
+      msg.strings = g_new0 (gchar*, msg.n_strings + 1);
+      msg.nums = g_new0 (long double, msg.n_nums);
+      for (ui = 0; ui < msg.n_strings; ui++)
+        {
+          guint sl = net_int (&p);
+          msg.strings[ui] = g_strndup (p, sl);
+          p += sl;
+        }
+      for (ui = 0; ui < msg.n_nums; ui++)
+        msg.nums[ui] = net_double (&p);
+      if (p <= tbuffer->data->str + mlength)
+        {
+          g_string_erase (tbuffer->data, 0, mlength);
+          tbuffer->msgs = g_slist_prepend (tbuffer->msgs, g_memdup (&msg, sizeof (msg)));
+          return TRUE;
+        }
+    }
+  g_free (msg.nums);
+  g_strfreev (msg.strings);
+  g_error ("corrupt log stream from test program");
+  return FALSE;
+}
+
+/**
+ * g_test_log_buffer_new:
+ *
+ * Internal function for gtester to decode test log messages, no ABI guarantees provided.
+ */
+GTestLogBuffer*
+g_test_log_buffer_new (void)
+{
+  GTestLogBuffer *tb = g_new0 (GTestLogBuffer, 1);
+  tb->data = g_string_sized_new (1024);
+  return tb;
+}
+
+/**
+ * g_test_log_buffer_free
+ *
+ * Internal function for gtester to free test log messages, no ABI guarantees provided.
+ */
+void
+g_test_log_buffer_free (GTestLogBuffer *tbuffer)
+{
+  g_return_if_fail (tbuffer != NULL);
+  while (tbuffer->msgs)
+    g_test_log_msg_free (g_test_log_buffer_pop (tbuffer));
+  g_string_free (tbuffer->data, TRUE);
+  g_free (tbuffer);
+}
+
+/**
+ * g_test_log_buffer_push
+ *
+ * Internal function for gtester to decode test log messages, no ABI guarantees provided.
+ */
+void
+g_test_log_buffer_push (GTestLogBuffer *tbuffer,
+                        guint           n_bytes,
+                        const guint8   *bytes)
+{
+  g_return_if_fail (tbuffer != NULL);
+  if (n_bytes)
+    {
+      gboolean more_messages;
+      g_return_if_fail (bytes != NULL);
+      g_string_append_len (tbuffer->data, (const gchar*) bytes, n_bytes);
+      do
+        more_messages = g_test_log_extract (tbuffer);
+      while (more_messages);
+    }
+}
+
+/**
+ * g_test_log_buffer_pop:
+ *
+ * Internal function for gtester to retrieve test log messages, no ABI guarantees provided.
+ */
+GTestLogMsg*
+g_test_log_buffer_pop (GTestLogBuffer *tbuffer)
+{
+  GTestLogMsg *msg = NULL;
+  g_return_val_if_fail (tbuffer != NULL, NULL);
+  if (tbuffer->msgs)
+    {
+      GSList *slist = g_slist_last (tbuffer->msgs);
+      msg = slist->data;
+      tbuffer->msgs = g_slist_delete_link (tbuffer->msgs, slist);
+    }
+  return msg;
+}
+
+/**
+ * g_test_log_msg_free:
+ *
+ * Internal function for gtester to free test log messages, no ABI guarantees provided.
+ */
+void
+g_test_log_msg_free (GTestLogMsg *tmsg)
+{
+  g_return_if_fail (tmsg != NULL);
+  g_strfreev (tmsg->strings);
+  g_free (tmsg->nums);
+  g_free (tmsg);
+}
+
+/* --- macros docs START --- */
+/**
+ * g_test_add:
+ * @testpath:  The test path for a new test case.
+ * @Fixture:   The type of a fixture data structure.
+ * @tdata:     Data argument for the test functions.
+ * @fsetup:    The function to set up the fixture data.
+ * @ftest:     The actual test function.
+ * @fteardown: The function to tear down the fixture data.
+ *
+ * Hook up a new test case at @testpath, similar to g_test_add_func().
+ * A fixture data structure with setup and teardown function may be provided
+ * though, similar to g_test_create_case().
+ * g_test_add() is implemented as a macro, so that the fsetup(), ftest() and
+ * fteardown() callbacks can expect a @Fixture pointer as first argument in
+ * a type safe manner.
+ *
+ * Since: 2.16
+ **/
+/* --- macros docs END --- */
+
+#define __G_TEST_UTILS_C__
+#include "galiasdef.c"
diff --git a/glib/gtestutils.h b/glib/gtestutils.h
new file mode 100644
index 0000000..4c47458
--- /dev/null
+++ b/glib/gtestutils.h
@@ -0,0 +1,267 @@
+/* GLib testing utilities
+ * Copyright (C) 2007 Imendio AB
+ * Authors: Tim Janik
+ *
+ * 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 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.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_TEST_UTILS_H__
+#define __G_TEST_UTILS_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct GTestCase  GTestCase;
+typedef struct GTestSuite GTestSuite;
+
+/* assertion API */
+#define g_assert_cmpstr(s1, cmp, s2)    do { const char *__s1 = (s1), *__s2 = (s2); \
+                                             if (g_strcmp0 (__s1, __s2) cmp 0) ; else \
+                                               g_assertion_message_cmpstr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #s1 " " #cmp " " #s2, __s1, #cmp, __s2); } while (0)
+#define g_assert_cmpint(n1, cmp, n2)    do { gint64 __n1 = (n1), __n2 = (n2); \
+                                             if (__n1 cmp __n2) ; else \
+                                               g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); } while (0)
+#define g_assert_cmpuint(n1, cmp, n2)   do { guint64 __n1 = (n1), __n2 = (n2); \
+                                             if (__n1 cmp __n2) ; else \
+                                               g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); } while (0)
+#define g_assert_cmphex(n1, cmp, n2)    do { guint64 __n1 = (n1), __n2 = (n2); \
+                                             if (__n1 cmp __n2) ; else \
+                                               g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'x'); } while (0)
+#define g_assert_cmpfloat(n1,cmp,n2)    do { long double __n1 = (n1), __n2 = (n2); \
+                                             if (__n1 cmp __n2) ; else \
+                                               g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'f'); } while (0)
+#define g_assert_no_error(err)          do { if (err) \
+                                               g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #err, err, 0, 0); } while (0)
+#define g_assert_error(err, dom, c)	do { if (!err || (err)->domain != dom || (err)->code != c) \
+                                               g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #err, err, dom, c); } while (0)
+#ifdef G_DISABLE_ASSERT
+#define g_assert_not_reached()          do { (void) 0; } while (0)
+#define g_assert(expr)                  do { (void) 0; } while (0)
+#else /* !G_DISABLE_ASSERT */
+#define g_assert_not_reached()          do { g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } while (0)
+#define g_assert(expr)                  do { if G_LIKELY (expr) ; else \
+                                               g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
+                                                 #expr); } while (0)
+#endif /* !G_DISABLE_ASSERT */
+
+int     g_strcmp0                       (const char     *str1,
+                                         const char     *str2);
+
+/* report performance results */
+void    g_test_minimized_result         (double          minimized_quantity,
+                                         const char     *format,
+                                         ...) G_GNUC_PRINTF (2, 3);
+void    g_test_maximized_result         (double          maximized_quantity,
+                                         const char     *format,
+                                         ...) G_GNUC_PRINTF (2, 3);
+
+/* initialize testing framework */
+void    g_test_init                     (int            *argc,
+                                         char         ***argv,
+                                         ...);
+/* query testing framework config */
+#define g_test_quick()                  (g_test_config_vars->test_quick)
+#define g_test_slow()                   (!g_test_config_vars->test_quick)
+#define g_test_thorough()               (!g_test_config_vars->test_quick)
+#define g_test_perf()                   (g_test_config_vars->test_perf)
+#define g_test_verbose()                (g_test_config_vars->test_verbose)
+#define g_test_quiet()                  (g_test_config_vars->test_quiet)
+/* run all tests under toplevel suite (path: /) */
+int     g_test_run                      (void);
+/* hook up a test functions under test path */
+void    g_test_add_func                 (const char     *testpath,
+                                         void          (*test_func) (void));
+void    g_test_add_data_func            (const char     *testpath,
+                                         gconstpointer   test_data,
+                                         void          (*test_func) (gconstpointer));
+/* hook up a test with fixture under test path */
+#define g_test_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \
+					G_STMT_START {			\
+                                         void (*add_vtable) (const char*,       \
+                                                    gsize,             \
+                                                    gconstpointer,     \
+                                                    void (*) (Fixture*, gconstpointer),   \
+                                                    void (*) (Fixture*, gconstpointer),   \
+                                                    void (*) (Fixture*, gconstpointer)) =  (void (*) (const gchar *, gsize, gconstpointer, void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer))) g_test_add_vtable; \
+                                         add_vtable \
+                                          (testpath, sizeof (Fixture), tdata, fsetup, ftest, fteardown); \
+					} G_STMT_END
+
+/* add test messages to the test report */
+void    g_test_message                  (const char *format,
+                                         ...) G_GNUC_PRINTF (1, 2);
+void    g_test_bug_base                 (const char *uri_pattern);
+void    g_test_bug                      (const char *bug_uri_snippet);
+/* measure test timings */
+void    g_test_timer_start              (void);
+double  g_test_timer_elapsed            (void); /* elapsed seconds */
+double  g_test_timer_last               (void); /* repeat last elapsed() result */
+
+/* automatically g_free or g_object_unref upon teardown */
+void    g_test_queue_free               (gpointer gfree_pointer);
+void    g_test_queue_destroy            (GDestroyNotify destroy_func,
+                                         gpointer       destroy_data);
+#define g_test_queue_unref(gobject)     g_test_queue_destroy (g_object_unref, gobject)
+
+/* test traps are guards used around forked tests */
+typedef enum {
+  G_TEST_TRAP_SILENCE_STDOUT    = 1 << 7,
+  G_TEST_TRAP_SILENCE_STDERR    = 1 << 8,
+  G_TEST_TRAP_INHERIT_STDIN     = 1 << 9
+} GTestTrapFlags;
+gboolean g_test_trap_fork               (guint64              usec_timeout,
+                                         GTestTrapFlags       test_trap_flags);
+gboolean g_test_trap_has_passed         (void);
+gboolean g_test_trap_reached_timeout    (void);
+#define  g_test_trap_assert_passed()                      g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 0, 0)
+#define  g_test_trap_assert_failed()                      g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 1, 0)
+#define  g_test_trap_assert_stdout(soutpattern)           g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 2, soutpattern)
+#define  g_test_trap_assert_stdout_unmatched(soutpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 3, soutpattern)
+#define  g_test_trap_assert_stderr(serrpattern)           g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 4, serrpattern)
+#define  g_test_trap_assert_stderr_unmatched(serrpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 5, serrpattern)
+
+/* provide seed-able random numbers for tests */
+#define  g_test_rand_bit()              (0 != (g_test_rand_int() & (1 << 15)))
+gint32   g_test_rand_int                (void);
+gint32   g_test_rand_int_range          (gint32          begin,
+                                         gint32          end);
+double   g_test_rand_double             (void);
+double   g_test_rand_double_range       (double          range_start,
+                                         double          range_end);
+
+/* semi-internal API */
+GTestCase*    g_test_create_case        (const char     *test_name,
+                                         gsize           data_size,
+                                         gconstpointer   test_data,
+                                         void          (*data_setup) (void),
+                                         void          (*data_test) (void),
+                                         void          (*data_teardown) (void));
+GTestSuite*   g_test_create_suite       (const char     *suite_name);
+GTestSuite*   g_test_get_root           (void);
+void          g_test_suite_add          (GTestSuite     *suite,
+                                         GTestCase      *test_case);
+void          g_test_suite_add_suite    (GTestSuite     *suite,
+                                         GTestSuite     *nestedsuite);
+int           g_test_run_suite          (GTestSuite     *suite);
+
+/* internal ABI */
+void    g_test_trap_assertions          (const char     *domain,
+                                         const char     *file,
+                                         int             line,
+                                         const char     *func,
+                                         guint64         assertion_flags, /* 0-pass, 1-fail, 2-outpattern, 4-errpattern */
+                                         const char     *pattern);
+void    g_assertion_message             (const char     *domain,
+                                         const char     *file,
+                                         int             line,
+                                         const char     *func,
+                                         const char     *message) G_GNUC_NORETURN;
+void    g_assertion_message_expr        (const char     *domain,
+                                         const char     *file,
+                                         int             line,
+                                         const char     *func,
+                                         const char     *expr) G_GNUC_NORETURN;
+void    g_assertion_message_cmpstr      (const char     *domain,
+                                         const char     *file,
+                                         int             line,
+                                         const char     *func,
+                                         const char     *expr,
+                                         const char     *arg1,
+                                         const char     *cmp,
+                                         const char     *arg2) G_GNUC_NORETURN;
+void    g_assertion_message_cmpnum      (const char     *domain,
+                                         const char     *file,
+                                         int             line,
+                                         const char     *func,
+                                         const char     *expr,
+                                         long double     arg1,
+                                         const char     *cmp,
+                                         long double     arg2,
+                                         char            numtype) G_GNUC_NORETURN;
+void    g_assertion_message_error       (const char     *domain,
+                                         const char     *file,
+                                         int             line,
+                                         const char     *func,
+                                         const char     *expr,
+                                         GError         *error,
+                                         GQuark          error_domain,
+                                         int             error_code) G_GNUC_NORETURN;
+void    g_test_add_vtable               (const char     *testpath,
+                                         gsize           data_size,
+                                         gconstpointer   test_data,
+                                         void          (*data_setup)    (void),
+                                         void          (*data_test)     (void),
+                                         void          (*data_teardown) (void));
+typedef struct {
+  gboolean      test_initialized;
+  gboolean      test_quick;     /* disable thorough tests */
+  gboolean      test_perf;      /* run performance tests */
+  gboolean      test_verbose;   /* extra info */
+  gboolean      test_quiet;     /* reduce output */
+} GTestConfig;
+GLIB_VAR const GTestConfig * const g_test_config_vars;
+
+/* internal logging API */
+typedef enum {
+  G_TEST_LOG_NONE,
+  G_TEST_LOG_ERROR,             /* s:msg */
+  G_TEST_LOG_START_BINARY,      /* s:binaryname s:seed */
+  G_TEST_LOG_LIST_CASE,         /* s:testpath */
+  G_TEST_LOG_SKIP_CASE,         /* s:testpath */
+  G_TEST_LOG_START_CASE,        /* s:testpath */
+  G_TEST_LOG_STOP_CASE,         /* d:status d:nforks d:elapsed */
+  G_TEST_LOG_MIN_RESULT,        /* s:blurb d:result */
+  G_TEST_LOG_MAX_RESULT,        /* s:blurb d:result */
+  G_TEST_LOG_MESSAGE            /* s:blurb */
+} GTestLogType;
+
+typedef struct {
+  GTestLogType  log_type;
+  guint         n_strings;
+  gchar       **strings; /* NULL terminated */
+  guint         n_nums;
+  long double  *nums;
+} GTestLogMsg;
+typedef struct {
+  /*< private >*/
+  GString     *data;
+  GSList      *msgs;
+} GTestLogBuffer;
+
+const char*     g_test_log_type_name    (GTestLogType    log_type);
+GTestLogBuffer* g_test_log_buffer_new   (void);
+void            g_test_log_buffer_free  (GTestLogBuffer *tbuffer);
+void            g_test_log_buffer_push  (GTestLogBuffer *tbuffer,
+                                         guint           n_bytes,
+                                         const guint8   *bytes);
+GTestLogMsg*    g_test_log_buffer_pop   (GTestLogBuffer *tbuffer);
+void            g_test_log_msg_free     (GTestLogMsg    *tmsg);
+
+G_END_DECLS
+
+#endif /* __G_TEST_UTILS_H__ */
diff --git a/glib/gthread.c b/glib/gthread.c
new file mode 100644
index 0000000..0903c7e
--- /dev/null
+++ b/glib/gthread.c
@@ -0,0 +1,993 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gthread.c: MT safety related functions
+ * Copyright 1998 Sebastian Wilhelmi; University of Karlsruhe
+ *                Owen Taylor
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
+/* implement gthread.h's inline functions */
+#define G_IMPLEMENT_INLINES 1
+#define __G_THREAD_C__
+
+#include "config.h"
+
+#include "glib.h"
+#include "gthreadprivate.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifndef G_OS_WIN32
+#include <sys/time.h>
+#include <time.h>
+#else
+#include <windows.h>
+#endif /* G_OS_WIN32 */
+
+#include <string.h>
+
+#include "galias.h"
+
+GQuark
+g_thread_error_quark (void)
+{
+  return g_quark_from_static_string ("g_thread_error");
+}
+
+/* Keep this in sync with GRealThread in gmain.c! */
+typedef struct _GRealThread GRealThread;
+struct  _GRealThread
+{
+  GThread thread;
+  gpointer private_data;
+  GRealThread *next;
+  gpointer retval;
+  GSystemThread system_thread;
+};
+
+typedef struct _GStaticPrivateNode GStaticPrivateNode;
+struct _GStaticPrivateNode
+{
+  gpointer       data;
+  GDestroyNotify destroy;
+};
+
+static void    g_thread_cleanup (gpointer data);
+static void    g_thread_fail (void);
+static guint64 gettime (void);
+
+guint64        (*g_thread_gettime) (void) = gettime;
+
+/* Global variables */
+
+static GSystemThread zero_thread; /* This is initialized to all zero */
+gboolean g_thread_use_default_impl = TRUE;
+gboolean g_threads_got_initialized = FALSE;
+
+GThreadFunctions g_thread_functions_for_glib_use = {
+  (GMutex*(*)())g_thread_fail,                 /* mutex_new */
+  NULL,                                        /* mutex_lock */
+  NULL,                                        /* mutex_trylock */
+  NULL,                                        /* mutex_unlock */
+  NULL,                                        /* mutex_free */
+  (GCond*(*)())g_thread_fail,                  /* cond_new */
+  NULL,                                        /* cond_signal */
+  NULL,                                        /* cond_broadcast */
+  NULL,                                        /* cond_wait */
+  NULL,                                        /* cond_timed_wait  */
+  NULL,                                        /* cond_free */
+  (GPrivate*(*)(GDestroyNotify))g_thread_fail, /* private_new */
+  NULL,                                        /* private_get */
+  NULL,                                        /* private_set */
+  (void(*)(GThreadFunc, gpointer, gulong,
+	   gboolean, gboolean, GThreadPriority,
+	   gpointer, GError**))g_thread_fail,  /* thread_create */
+  NULL,                                        /* thread_yield */
+  NULL,                                        /* thread_join */
+  NULL,                                        /* thread_exit */
+  NULL,                                        /* thread_set_priority */
+  NULL,                                        /* thread_self */
+  NULL                                         /* thread_equal */
+};
+
+/* Local data */
+
+static GMutex   *g_once_mutex = NULL;
+static GCond    *g_once_cond = NULL;
+static GPrivate *g_thread_specific_private = NULL;
+static GRealThread *g_thread_all_threads = NULL;
+static GSList   *g_thread_free_indeces = NULL;
+static GSList*   g_once_init_list = NULL;
+
+G_LOCK_DEFINE_STATIC (g_thread);
+
+#ifdef G_THREADS_ENABLED
+/* This must be called only once, before any threads are created.
+ * It will only be called from g_thread_init() in -lgthread.
+ */
+void
+g_thread_init_glib (void)
+{
+  /* We let the main thread (the one that calls g_thread_init) inherit
+   * the static_private data set before calling g_thread_init
+   */
+  GRealThread* main_thread = (GRealThread*) g_thread_self ();
+
+  /* mutex and cond creation works without g_threads_got_initialized */
+  g_once_mutex = g_mutex_new ();
+  g_once_cond = g_cond_new ();
+
+  /* we may only create mutex and cond in here */
+  _g_mem_thread_init_noprivate_nomessage ();
+
+  /* setup the basic threading system */
+  g_threads_got_initialized = TRUE;
+  g_thread_specific_private = g_private_new (g_thread_cleanup);
+  g_private_set (g_thread_specific_private, main_thread);
+  G_THREAD_UF (thread_self, (&main_thread->system_thread));
+
+  /* complete memory system initialization, g_private_*() works now */
+  _g_slice_thread_init_nomessage ();
+
+  /* accomplish log system initialization to enable messaging */
+  _g_messages_thread_init_nomessage ();
+
+  /* we may run full-fledged initializers from here */
+  _g_atomic_thread_init ();
+  _g_convert_thread_init ();
+  _g_rand_thread_init ();
+  _g_main_thread_init ();
+  _g_utils_thread_init ();
+#ifdef G_OS_WIN32
+  _g_win32_thread_init ();
+#endif
+}
+#endif /* G_THREADS_ENABLED */
+
+gpointer
+g_once_impl (GOnce       *once,
+	     GThreadFunc  func,
+	     gpointer     arg)
+{
+  g_mutex_lock (g_once_mutex);
+
+  while (once->status == G_ONCE_STATUS_PROGRESS)
+    g_cond_wait (g_once_cond, g_once_mutex);
+
+  if (once->status != G_ONCE_STATUS_READY)
+    {
+      once->status = G_ONCE_STATUS_PROGRESS;
+      g_mutex_unlock (g_once_mutex);
+
+      once->retval = func (arg);
+
+      g_mutex_lock (g_once_mutex);
+      once->status = G_ONCE_STATUS_READY;
+      g_cond_broadcast (g_once_cond);
+    }
+
+  g_mutex_unlock (g_once_mutex);
+
+  return once->retval;
+}
+
+gboolean
+g_once_init_enter_impl (volatile gsize *value_location)
+{
+  gboolean need_init = FALSE;
+  g_mutex_lock (g_once_mutex);
+  if (g_atomic_pointer_get (value_location) == NULL)
+    {
+      if (!g_slist_find (g_once_init_list, (void*) value_location))
+        {
+          need_init = TRUE;
+          g_once_init_list = g_slist_prepend (g_once_init_list, (void*) value_location);
+        }
+      else
+        do
+          g_cond_wait (g_once_cond, g_once_mutex);
+        while (g_slist_find (g_once_init_list, (void*) value_location));
+    }
+  g_mutex_unlock (g_once_mutex);
+  return need_init;
+}
+
+void
+g_once_init_leave (volatile gsize *value_location,
+                   gsize           initialization_value)
+{
+  g_return_if_fail (g_atomic_pointer_get (value_location) == NULL);
+  g_return_if_fail (initialization_value != 0);
+  g_return_if_fail (g_once_init_list != NULL);
+
+  g_atomic_pointer_set ((void**)value_location, (void*) initialization_value);
+  g_mutex_lock (g_once_mutex);
+  g_once_init_list = g_slist_remove (g_once_init_list, (void*) value_location);
+  g_cond_broadcast (g_once_cond);
+  g_mutex_unlock (g_once_mutex);
+}
+
+void
+g_static_mutex_init (GStaticMutex *mutex)
+{
+  static const GStaticMutex init_mutex = G_STATIC_MUTEX_INIT;
+
+  g_return_if_fail (mutex);
+
+  *mutex = init_mutex;
+}
+
+GMutex *
+g_static_mutex_get_mutex_impl (GMutex** mutex)
+{
+  if (!g_thread_supported ())
+    return NULL;
+
+  g_assert (g_once_mutex);
+
+  g_mutex_lock (g_once_mutex);
+
+  if (!(*mutex))
+    g_atomic_pointer_set (mutex, g_mutex_new());
+
+  g_mutex_unlock (g_once_mutex);
+
+  return *mutex;
+}
+
+void
+g_static_mutex_free (GStaticMutex* mutex)
+{
+  GMutex **runtime_mutex;
+
+  g_return_if_fail (mutex);
+
+  /* The runtime_mutex is the first (or only) member of GStaticMutex,
+   * see both versions (of glibconfig.h) in configure.in. Note, that
+   * this variable is NULL, if g_thread_init() hasn't been called or
+   * if we're using the default thread implementation and it provides
+   * static mutexes. */
+  runtime_mutex = ((GMutex**)mutex);
+
+  if (*runtime_mutex)
+    g_mutex_free (*runtime_mutex);
+
+  *runtime_mutex = NULL;
+}
+
+void
+g_static_rec_mutex_init (GStaticRecMutex *mutex)
+{
+  static const GStaticRecMutex init_mutex = G_STATIC_REC_MUTEX_INIT;
+
+  g_return_if_fail (mutex);
+
+  *mutex = init_mutex;
+}
+
+void
+g_static_rec_mutex_lock (GStaticRecMutex* mutex)
+{
+  GSystemThread self;
+
+  g_return_if_fail (mutex);
+
+  if (!g_thread_supported ())
+    return;
+
+  G_THREAD_UF (thread_self, (&self));
+
+  if (g_system_thread_equal (self, mutex->owner))
+    {
+      mutex->depth++;
+      return;
+    }
+  g_static_mutex_lock (&mutex->mutex);
+  g_system_thread_assign (mutex->owner, self);
+  mutex->depth = 1;
+}
+
+gboolean
+g_static_rec_mutex_trylock (GStaticRecMutex* mutex)
+{
+  GSystemThread self;
+
+  g_return_val_if_fail (mutex, FALSE);
+
+  if (!g_thread_supported ())
+    return TRUE;
+
+  G_THREAD_UF (thread_self, (&self));
+
+  if (g_system_thread_equal (self, mutex->owner))
+    {
+      mutex->depth++;
+      return TRUE;
+    }
+
+  if (!g_static_mutex_trylock (&mutex->mutex))
+    return FALSE;
+
+  g_system_thread_assign (mutex->owner, self);
+  mutex->depth = 1;
+  return TRUE;
+}
+
+void
+g_static_rec_mutex_unlock (GStaticRecMutex* mutex)
+{
+  g_return_if_fail (mutex);
+
+  if (!g_thread_supported ())
+    return;
+
+  if (mutex->depth > 1)
+    {
+      mutex->depth--;
+      return;
+    }
+  g_system_thread_assign (mutex->owner, zero_thread);
+  g_static_mutex_unlock (&mutex->mutex);
+}
+
+void
+g_static_rec_mutex_lock_full   (GStaticRecMutex *mutex,
+				guint            depth)
+{
+  GSystemThread self;
+  g_return_if_fail (mutex);
+
+  if (!g_thread_supported ())
+    return;
+
+  if (depth == 0)
+    return;
+
+  G_THREAD_UF (thread_self, (&self));
+
+  if (g_system_thread_equal (self, mutex->owner))
+    {
+      mutex->depth += depth;
+      return;
+    }
+  g_static_mutex_lock (&mutex->mutex);
+  g_system_thread_assign (mutex->owner, self);
+  mutex->depth = depth;
+}
+
+guint
+g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex)
+{
+  guint depth;
+
+  g_return_val_if_fail (mutex, 0);
+
+  if (!g_thread_supported ())
+    return 1;
+
+  depth = mutex->depth;
+
+  g_system_thread_assign (mutex->owner, zero_thread);
+  mutex->depth = 0;
+  g_static_mutex_unlock (&mutex->mutex);
+
+  return depth;
+}
+
+void
+g_static_rec_mutex_free (GStaticRecMutex *mutex)
+{
+  g_return_if_fail (mutex);
+
+  g_static_mutex_free (&mutex->mutex);
+}
+
+void
+g_static_private_init (GStaticPrivate *private_key)
+{
+  private_key->index = 0;
+}
+
+gpointer
+g_static_private_get (GStaticPrivate *private_key)
+{
+  GRealThread *self = (GRealThread*) g_thread_self ();
+  GArray *array;
+
+  array = self->private_data;
+  if (!array)
+    return NULL;
+
+  if (!private_key->index)
+    return NULL;
+  else if (private_key->index <= array->len)
+    return g_array_index (array, GStaticPrivateNode,
+			  private_key->index - 1).data;
+  else
+    return NULL;
+}
+
+void
+g_static_private_set (GStaticPrivate *private_key,
+		      gpointer        data,
+		      GDestroyNotify  notify)
+{
+  GRealThread *self = (GRealThread*) g_thread_self ();
+  GArray *array;
+  static guint next_index = 0;
+  GStaticPrivateNode *node;
+
+  array = self->private_data;
+  if (!array)
+    {
+      array = g_array_new (FALSE, TRUE, sizeof (GStaticPrivateNode));
+      self->private_data = array;
+    }
+
+  if (!private_key->index)
+    {
+      G_LOCK (g_thread);
+
+      if (!private_key->index)
+	{
+	  if (g_thread_free_indeces)
+	    {
+	      private_key->index =
+		GPOINTER_TO_UINT (g_thread_free_indeces->data);
+	      g_thread_free_indeces =
+		g_slist_delete_link (g_thread_free_indeces,
+				     g_thread_free_indeces);
+	    }
+	  else
+	    private_key->index = ++next_index;
+	}
+
+      G_UNLOCK (g_thread);
+    }
+
+  if (private_key->index > array->len)
+    g_array_set_size (array, private_key->index);
+
+  node = &g_array_index (array, GStaticPrivateNode, private_key->index - 1);
+  if (node->destroy)
+    {
+      gpointer ddata = node->data;
+      GDestroyNotify ddestroy = node->destroy;
+
+      node->data = data;
+      node->destroy = notify;
+
+      ddestroy (ddata);
+    }
+  else
+    {
+      node->data = data;
+      node->destroy = notify;
+    }
+}
+
+void
+g_static_private_free (GStaticPrivate *private_key)
+{
+  guint idx = private_key->index;
+  GRealThread *thread;
+
+  if (!idx)
+    return;
+
+  private_key->index = 0;
+
+  G_LOCK (g_thread);
+
+  thread = g_thread_all_threads;
+  while (thread)
+    {
+      GArray *array = thread->private_data;
+      thread = thread->next;
+
+      if (array && idx <= array->len)
+	{
+	  GStaticPrivateNode *node = &g_array_index (array,
+						     GStaticPrivateNode,
+						     idx - 1);
+	  gpointer ddata = node->data;
+	  GDestroyNotify ddestroy = node->destroy;
+
+	  node->data = NULL;
+	  node->destroy = NULL;
+
+          if (ddestroy)
+            {
+              G_UNLOCK (g_thread);
+              ddestroy (ddata);
+              G_LOCK (g_thread);
+            }
+	}
+    }
+  g_thread_free_indeces = g_slist_prepend (g_thread_free_indeces,
+					   GUINT_TO_POINTER (idx));
+  G_UNLOCK (g_thread);
+}
+
+static void
+g_thread_cleanup (gpointer data)
+{
+  if (data)
+    {
+      GRealThread* thread = data;
+      if (thread->private_data)
+	{
+	  GArray* array = thread->private_data;
+	  guint i;
+
+	  for (i = 0; i < array->len; i++ )
+	    {
+	      GStaticPrivateNode *node =
+		&g_array_index (array, GStaticPrivateNode, i);
+	      if (node->destroy)
+		node->destroy (node->data);
+	    }
+	  g_array_free (array, TRUE);
+	}
+
+      /* We only free the thread structure, if it isn't joinable. If
+         it is, the structure is freed in g_thread_join */
+      if (!thread->thread.joinable)
+	{
+	  GRealThread *t, *p;
+
+	  G_LOCK (g_thread);
+	  for (t = g_thread_all_threads, p = NULL; t; p = t, t = t->next)
+	    {
+	      if (t == thread)
+		{
+		  if (p)
+		    p->next = t->next;
+		  else
+		    g_thread_all_threads = t->next;
+		  break;
+		}
+	    }
+	  G_UNLOCK (g_thread);
+
+	  /* Just to make sure, this isn't used any more */
+	  g_system_thread_assign (thread->system_thread, zero_thread);
+          g_free (thread);
+	}
+    }
+}
+
+static void
+g_thread_fail (void)
+{
+  g_error ("The thread system is not yet initialized.");
+}
+
+#define G_NSEC_PER_SEC 1000000000
+
+static guint64
+gettime (void)
+{
+#ifdef G_OS_WIN32
+  guint64 v;
+
+  /* Returns 100s of nanoseconds since start of 1601 */
+  GetSystemTimeAsFileTime ((FILETIME *)&v);
+
+  /* Offset to Unix epoch */
+  v -= G_GINT64_CONSTANT (116444736000000000);
+  /* Convert to nanoseconds */
+  v *= 100;
+
+  return v;
+#else
+  struct timeval tv;
+
+  gettimeofday (&tv, NULL);
+
+  return (guint64) tv.tv_sec * G_NSEC_PER_SEC + tv.tv_usec * (G_NSEC_PER_SEC / G_USEC_PER_SEC); 
+#endif
+}
+
+static gpointer
+g_thread_create_proxy (gpointer data)
+{
+  GRealThread* thread = data;
+
+  g_assert (data);
+
+  /* This has to happen before G_LOCK, as that might call g_thread_self */
+  g_private_set (g_thread_specific_private, data);
+
+  /* the lock makes sure, that thread->system_thread is written,
+     before thread->thread.func is called. See g_thread_create. */
+  G_LOCK (g_thread);
+  G_UNLOCK (g_thread);
+
+  thread->retval = thread->thread.func (thread->thread.data);
+
+  return NULL;
+}
+
+GThread*
+g_thread_create_full (GThreadFunc       func,
+		      gpointer          data,
+		      gulong            stack_size,
+		      gboolean          joinable,
+		      gboolean 	        bound,
+		      GThreadPriority   priority,
+		      GError          **error)
+{
+  GRealThread* result;
+  GError *local_error = NULL;
+  g_return_val_if_fail (func, NULL);
+  g_return_val_if_fail (priority >= G_THREAD_PRIORITY_LOW, NULL);
+  g_return_val_if_fail (priority <= G_THREAD_PRIORITY_URGENT, NULL);
+
+  result = g_new0 (GRealThread, 1);
+
+  result->thread.joinable = joinable;
+  result->thread.priority = priority;
+  result->thread.func = func;
+  result->thread.data = data;
+  result->private_data = NULL;
+  G_LOCK (g_thread);
+  G_THREAD_UF (thread_create, (g_thread_create_proxy, result,
+			       stack_size, joinable, bound, priority,
+			       &result->system_thread, &local_error));
+  if (!local_error)
+    {
+      result->next = g_thread_all_threads;
+      g_thread_all_threads = result;
+    }
+  G_UNLOCK (g_thread);
+
+  if (local_error)
+    {
+      g_propagate_error (error, local_error);
+      g_free (result);
+      return NULL;
+    }
+
+  return (GThread*) result;
+}
+
+void
+g_thread_exit (gpointer retval)
+{
+  GRealThread* real = (GRealThread*) g_thread_self ();
+  real->retval = retval;
+  G_THREAD_CF (thread_exit, (void)0, ());
+}
+
+gpointer
+g_thread_join (GThread* thread)
+{
+  GRealThread* real = (GRealThread*) thread;
+  GRealThread *p, *t;
+  gpointer retval;
+
+  g_return_val_if_fail (thread, NULL);
+  g_return_val_if_fail (thread->joinable, NULL);
+  g_return_val_if_fail (!g_system_thread_equal (real->system_thread,
+						zero_thread), NULL);
+
+  G_THREAD_UF (thread_join, (&real->system_thread));
+
+  retval = real->retval;
+
+  G_LOCK (g_thread);
+  for (t = g_thread_all_threads, p = NULL; t; p = t, t = t->next)
+    {
+      if (t == (GRealThread*) thread)
+	{
+	  if (p)
+	    p->next = t->next;
+	  else
+	    g_thread_all_threads = t->next;
+	  break;
+	}
+    }
+  G_UNLOCK (g_thread);
+
+  /* Just to make sure, this isn't used any more */
+  thread->joinable = 0;
+  g_system_thread_assign (real->system_thread, zero_thread);
+
+  /* the thread structure for non-joinable threads is freed upon
+     thread end. We free the memory here. This will leave a loose end,
+     if a joinable thread is not joined. */
+
+  g_free (thread);
+
+  return retval;
+}
+
+void
+g_thread_set_priority (GThread* thread,
+		       GThreadPriority priority)
+{
+  GRealThread* real = (GRealThread*) thread;
+
+  g_return_if_fail (thread);
+  g_return_if_fail (!g_system_thread_equal (real->system_thread, zero_thread));
+  g_return_if_fail (priority >= G_THREAD_PRIORITY_LOW);
+  g_return_if_fail (priority <= G_THREAD_PRIORITY_URGENT);
+
+  thread->priority = priority;
+
+  G_THREAD_CF (thread_set_priority, (void)0,
+	       (&real->system_thread, priority));
+}
+
+GThread*
+g_thread_self (void)
+{
+  GRealThread* thread = g_private_get (g_thread_specific_private);
+
+  if (!thread)
+    {
+      /* If no thread data is available, provide and set one.  This
+         can happen for the main thread and for threads, that are not
+         created by GLib. */
+      thread = g_new0 (GRealThread, 1);
+      thread->thread.joinable = FALSE; /* This is a save guess */
+      thread->thread.priority = G_THREAD_PRIORITY_NORMAL; /* This is
+							     just a guess */
+      thread->thread.func = NULL;
+      thread->thread.data = NULL;
+      thread->private_data = NULL;
+
+      if (g_thread_supported ())
+	G_THREAD_UF (thread_self, (&thread->system_thread));
+
+      g_private_set (g_thread_specific_private, thread);
+
+      G_LOCK (g_thread);
+      thread->next = g_thread_all_threads;
+      g_thread_all_threads = thread;
+      G_UNLOCK (g_thread);
+    }
+
+  return (GThread*)thread;
+}
+
+void
+g_static_rw_lock_init (GStaticRWLock* lock)
+{
+  static const GStaticRWLock init_lock = G_STATIC_RW_LOCK_INIT;
+
+  g_return_if_fail (lock);
+
+  *lock = init_lock;
+}
+
+inline static void
+g_static_rw_lock_wait (GCond** cond, GStaticMutex* mutex)
+{
+  if (!*cond)
+      *cond = g_cond_new ();
+  g_cond_wait (*cond, g_static_mutex_get_mutex (mutex));
+}
+
+inline static void
+g_static_rw_lock_signal (GStaticRWLock* lock)
+{
+  if (lock->want_to_write && lock->write_cond)
+    g_cond_signal (lock->write_cond);
+  else if (lock->want_to_read && lock->read_cond)
+    g_cond_broadcast (lock->read_cond);
+}
+
+void
+g_static_rw_lock_reader_lock (GStaticRWLock* lock)
+{
+  g_return_if_fail (lock);
+
+  if (!g_threads_got_initialized)
+    return;
+
+  g_static_mutex_lock (&lock->mutex);
+  lock->want_to_read++;
+  while (lock->have_writer || lock->want_to_write)
+    g_static_rw_lock_wait (&lock->read_cond, &lock->mutex);
+  lock->want_to_read--;
+  lock->read_counter++;
+  g_static_mutex_unlock (&lock->mutex);
+}
+
+gboolean
+g_static_rw_lock_reader_trylock (GStaticRWLock* lock)
+{
+  gboolean ret_val = FALSE;
+
+  g_return_val_if_fail (lock, FALSE);
+
+  if (!g_threads_got_initialized)
+    return TRUE;
+
+  g_static_mutex_lock (&lock->mutex);
+  if (!lock->have_writer && !lock->want_to_write)
+    {
+      lock->read_counter++;
+      ret_val = TRUE;
+    }
+  g_static_mutex_unlock (&lock->mutex);
+  return ret_val;
+}
+
+void
+g_static_rw_lock_reader_unlock  (GStaticRWLock* lock)
+{
+  g_return_if_fail (lock);
+
+  if (!g_threads_got_initialized)
+    return;
+
+  g_static_mutex_lock (&lock->mutex);
+  lock->read_counter--;
+  if (lock->read_counter == 0)
+    g_static_rw_lock_signal (lock);
+  g_static_mutex_unlock (&lock->mutex);
+}
+
+void
+g_static_rw_lock_writer_lock (GStaticRWLock* lock)
+{
+  g_return_if_fail (lock);
+
+  if (!g_threads_got_initialized)
+    return;
+
+  g_static_mutex_lock (&lock->mutex);
+  lock->want_to_write++;
+  while (lock->have_writer || lock->read_counter)
+    g_static_rw_lock_wait (&lock->write_cond, &lock->mutex);
+  lock->want_to_write--;
+  lock->have_writer = TRUE;
+  g_static_mutex_unlock (&lock->mutex);
+}
+
+gboolean
+g_static_rw_lock_writer_trylock (GStaticRWLock* lock)
+{
+  gboolean ret_val = FALSE;
+
+  g_return_val_if_fail (lock, FALSE);
+
+  if (!g_threads_got_initialized)
+    return TRUE;
+
+  g_static_mutex_lock (&lock->mutex);
+  if (!lock->have_writer && !lock->read_counter)
+    {
+      lock->have_writer = TRUE;
+      ret_val = TRUE;
+    }
+  g_static_mutex_unlock (&lock->mutex);
+  return ret_val;
+}
+
+void
+g_static_rw_lock_writer_unlock (GStaticRWLock* lock)
+{
+  g_return_if_fail (lock);
+
+  if (!g_threads_got_initialized)
+    return;
+
+  g_static_mutex_lock (&lock->mutex);
+  lock->have_writer = FALSE;
+  g_static_rw_lock_signal (lock);
+  g_static_mutex_unlock (&lock->mutex);
+}
+
+void
+g_static_rw_lock_free (GStaticRWLock* lock)
+{
+  g_return_if_fail (lock);
+
+  if (lock->read_cond)
+    {
+      g_cond_free (lock->read_cond);
+      lock->read_cond = NULL;
+    }
+  if (lock->write_cond)
+    {
+      g_cond_free (lock->write_cond);
+      lock->write_cond = NULL;
+    }
+  g_static_mutex_free (&lock->mutex);
+}
+
+/**
+ * g_thread_foreach
+ * @thread_func: function to call for all GThread structures
+ * @user_data:   second argument to @thread_func
+ *
+ * Call @thread_func on all existing #GThread structures. Note that
+ * threads may decide to exit while @thread_func is running, so
+ * without intimate knowledge about the lifetime of foreign threads,
+ * @thread_func shouldn't access the GThread* pointer passed in as
+ * first argument. However, @thread_func will not be called for threads
+ * which are known to have exited already.
+ *
+ * Due to thread lifetime checks, this function has an execution complexity
+ * which is quadratic in the number of existing threads.
+ *
+ * Since: 2.10
+ */
+void
+g_thread_foreach (GFunc    thread_func,
+                  gpointer user_data)
+{
+  GSList *slist = NULL;
+  GRealThread *thread;
+  g_return_if_fail (thread_func != NULL);
+  /* snapshot the list of threads for iteration */
+  G_LOCK (g_thread);
+  for (thread = g_thread_all_threads; thread; thread = thread->next)
+    slist = g_slist_prepend (slist, thread);
+  G_UNLOCK (g_thread);
+  /* walk the list, skipping non-existant threads */
+  while (slist)
+    {
+      GSList *node = slist;
+      slist = node->next;
+      /* check whether the current thread still exists */
+      G_LOCK (g_thread);
+      for (thread = g_thread_all_threads; thread; thread = thread->next)
+        if (thread == node->data)
+          break;
+      G_UNLOCK (g_thread);
+      if (thread)
+        thread_func (thread, user_data);
+      g_slist_free_1 (node);
+    }
+}
+
+/**
+ * g_thread_get_initialized
+ *
+ * Indicates if g_thread_init() has been called.
+ *
+ * Returns: %TRUE if threads have been initialized.
+ *
+ * Since: 2.20
+ */
+gboolean
+g_thread_get_initialized ()
+{
+  return g_thread_supported ();
+}
+
+#define __G_THREAD_C__
+#include "galiasdef.c"
diff --git a/glib/gthread.h b/glib/gthread.h
new file mode 100644
index 0000000..019d0db
--- /dev/null
+++ b/glib/gthread.h
@@ -0,0 +1,404 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_THREAD_H__
+#define __G_THREAD_H__
+
+#include <glib/gerror.h>
+#include <glib/gtypes.h>
+#include <glib/gutils.h>        /* for G_INLINE_FUNC */
+#include <glib/gatomic.h>       /* for g_atomic_pointer_get */
+
+G_BEGIN_DECLS
+
+/* GLib Thread support
+ */
+
+extern GQuark g_thread_error_quark (void);
+#define G_THREAD_ERROR g_thread_error_quark ()
+
+typedef enum
+{
+  G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */
+} GThreadError;
+
+typedef gpointer (*GThreadFunc) (gpointer data);
+
+typedef enum
+{
+  G_THREAD_PRIORITY_LOW,
+  G_THREAD_PRIORITY_NORMAL,
+  G_THREAD_PRIORITY_HIGH,
+  G_THREAD_PRIORITY_URGENT
+} GThreadPriority;
+
+typedef struct _GThread         GThread;
+struct  _GThread
+{
+  /*< private >*/
+  GThreadFunc func;
+  gpointer data;
+  gboolean joinable;
+  GThreadPriority priority;
+};
+
+typedef struct _GMutex          GMutex;
+typedef struct _GCond           GCond;
+typedef struct _GPrivate        GPrivate;
+typedef struct _GStaticPrivate  GStaticPrivate;
+
+typedef struct _GThreadFunctions GThreadFunctions;
+struct _GThreadFunctions
+{
+  GMutex*  (*mutex_new)           (void);
+  void     (*mutex_lock)          (GMutex               *mutex);
+  gboolean (*mutex_trylock)       (GMutex               *mutex);
+  void     (*mutex_unlock)        (GMutex               *mutex);
+  void     (*mutex_free)          (GMutex               *mutex);
+  GCond*   (*cond_new)            (void);
+  void     (*cond_signal)         (GCond                *cond);
+  void     (*cond_broadcast)      (GCond                *cond);
+  void     (*cond_wait)           (GCond                *cond,
+                                   GMutex               *mutex);
+  gboolean (*cond_timed_wait)     (GCond                *cond,
+                                   GMutex               *mutex,
+                                   GTimeVal             *end_time);
+  void      (*cond_free)          (GCond                *cond);
+  GPrivate* (*private_new)        (GDestroyNotify        destructor);
+  gpointer  (*private_get)        (GPrivate             *private_key);
+  void      (*private_set)        (GPrivate             *private_key,
+                                   gpointer              data);
+  void      (*thread_create)      (GThreadFunc           func,
+                                   gpointer              data,
+                                   gulong                stack_size,
+                                   gboolean              joinable,
+                                   gboolean              bound,
+                                   GThreadPriority       priority,
+                                   gpointer              thread,
+                                   GError              **error);
+  void      (*thread_yield)       (void);
+  void      (*thread_join)        (gpointer              thread);
+  void      (*thread_exit)        (void);
+  void      (*thread_set_priority)(gpointer              thread,
+                                   GThreadPriority       priority);
+  void      (*thread_self)        (gpointer              thread);
+  gboolean  (*thread_equal)       (gpointer              thread1,
+				   gpointer              thread2);
+};
+
+GLIB_VAR GThreadFunctions       g_thread_functions_for_glib_use;
+GLIB_VAR gboolean               g_thread_use_default_impl;
+GLIB_VAR gboolean               g_threads_got_initialized;
+
+GLIB_VAR guint64   (*g_thread_gettime) (void);
+
+/* initializes the mutex/cond/private implementation for glib, might
+ * only be called once, and must not be called directly or indirectly
+ * from another glib-function, e.g. as a callback.
+ */
+void    g_thread_init   (GThreadFunctions       *vtable);
+
+/* Errorcheck mutexes. If you define G_ERRORCHECK_MUTEXES, then all
+ * mutexes will check for re-locking and re-unlocking */
+
+/* Initialize thread system with errorcheck mutexes. vtable must be
+ * NULL. Do not call directly. Use #define G_ERRORCHECK_MUTEXES
+ * instead.
+ */
+void    g_thread_init_with_errorcheck_mutexes (GThreadFunctions* vtable);
+
+/* Checks if thread support is initialized.  Identical to the
+ * g_thread_supported macro but provided for language bindings.
+ */
+gboolean g_thread_get_initialized (void);
+
+/* A random number to recognize debug calls to g_mutex_... */
+#define G_MUTEX_DEBUG_MAGIC 0xf8e18ad7
+
+#ifdef G_ERRORCHECK_MUTEXES
+#define g_thread_init(vtable) g_thread_init_with_errorcheck_mutexes (vtable)
+#endif
+
+/* internal function for fallback static mutex implementation */
+GMutex* g_static_mutex_get_mutex_impl   (GMutex **mutex);
+
+#define g_static_mutex_get_mutex_impl_shortcut(mutex) \
+  (g_atomic_pointer_get (mutex) ? *(mutex) : \
+   g_static_mutex_get_mutex_impl (mutex))
+
+/* shorthands for conditional and unconditional function calls */
+
+#define G_THREAD_UF(op, arglist)					\
+    (*g_thread_functions_for_glib_use . op) arglist
+#define G_THREAD_CF(op, fail, arg)					\
+    (g_thread_supported () ? G_THREAD_UF (op, arg) : (fail))
+#define G_THREAD_ECF(op, fail, mutex, type)				\
+    (g_thread_supported () ? 						\
+      ((type(*)(GMutex*, const gulong, gchar const*))			\
+      (*g_thread_functions_for_glib_use . op))				\
+     (mutex, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : (fail))
+
+#ifndef G_ERRORCHECK_MUTEXES
+# define g_mutex_lock(mutex)						\
+    G_THREAD_CF (mutex_lock,     (void)0, (mutex))
+# define g_mutex_trylock(mutex)						\
+    G_THREAD_CF (mutex_trylock,  TRUE,    (mutex))
+# define g_mutex_unlock(mutex)						\
+    G_THREAD_CF (mutex_unlock,   (void)0, (mutex))
+# define g_mutex_free(mutex)						\
+    G_THREAD_CF (mutex_free,     (void)0, (mutex))
+# define g_cond_wait(cond, mutex)					\
+    G_THREAD_CF (cond_wait,      (void)0, (cond, mutex))
+# define g_cond_timed_wait(cond, mutex, abs_time)			\
+    G_THREAD_CF (cond_timed_wait, TRUE,   (cond, mutex, abs_time))
+#else /* G_ERRORCHECK_MUTEXES */
+# define g_mutex_lock(mutex)						\
+    G_THREAD_ECF (mutex_lock,    (void)0, (mutex), void)
+# define g_mutex_trylock(mutex)						\
+    G_THREAD_ECF (mutex_trylock, TRUE,    (mutex), gboolean)
+# define g_mutex_unlock(mutex)						\
+    G_THREAD_ECF (mutex_unlock,  (void)0, (mutex), void)
+# define g_mutex_free(mutex)						\
+    G_THREAD_ECF (mutex_free,    (void)0, (mutex), void)
+# define g_cond_wait(cond, mutex)					\
+    (g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\
+      g_thread_functions_for_glib_use.cond_wait)			\
+        (cond, mutex, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : (void) 0)
+# define g_cond_timed_wait(cond, mutex, abs_time)			\
+    (g_thread_supported () ?						\
+      ((gboolean(*)(GCond*, GMutex*, GTimeVal*, gulong, gchar*))	\
+        g_thread_functions_for_glib_use.cond_timed_wait)		\
+          (cond, mutex, abs_time, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : TRUE)
+#endif /* G_ERRORCHECK_MUTEXES */
+
+#define g_thread_supported()    (g_threads_got_initialized)
+#define g_mutex_new()            G_THREAD_UF (mutex_new,      ())
+#define g_cond_new()             G_THREAD_UF (cond_new,       ())
+#define g_cond_signal(cond)      G_THREAD_CF (cond_signal,    (void)0, (cond))
+#define g_cond_broadcast(cond)   G_THREAD_CF (cond_broadcast, (void)0, (cond))
+#define g_cond_free(cond)        G_THREAD_CF (cond_free,      (void)0, (cond))
+#define g_private_new(destructor) G_THREAD_UF (private_new, (destructor))
+#define g_private_get(private_key) G_THREAD_CF (private_get, \
+                                                ((gpointer)private_key), \
+                                                (private_key))
+#define g_private_set(private_key, value) G_THREAD_CF (private_set, \
+                                                       (void) (private_key = \
+                                                        (GPrivate*) (value)), \
+                                                       (private_key, value))
+#define g_thread_yield()              G_THREAD_CF (thread_yield, (void)0, ())
+
+#define g_thread_create(func, data, joinable, error)			\
+  (g_thread_create_full (func, data, 0, joinable, FALSE, 		\
+                         G_THREAD_PRIORITY_NORMAL, error))
+
+GThread* g_thread_create_full  (GThreadFunc            func,
+                                gpointer               data,
+                                gulong                 stack_size,
+                                gboolean               joinable,
+                                gboolean               bound,
+                                GThreadPriority        priority,
+                                GError               **error);
+GThread* g_thread_self         (void);
+void     g_thread_exit         (gpointer               retval);
+gpointer g_thread_join         (GThread               *thread);
+
+void     g_thread_set_priority (GThread               *thread,
+                                GThreadPriority        priority);
+
+/* GStaticMutexes can be statically initialized with the value
+ * G_STATIC_MUTEX_INIT, and then they can directly be used, that is
+ * much easier, than having to explicitly allocate the mutex before
+ * use
+ */
+#define g_static_mutex_lock(mutex) \
+    g_mutex_lock (g_static_mutex_get_mutex (mutex))
+#define g_static_mutex_trylock(mutex) \
+    g_mutex_trylock (g_static_mutex_get_mutex (mutex))
+#define g_static_mutex_unlock(mutex) \
+    g_mutex_unlock (g_static_mutex_get_mutex (mutex))
+void g_static_mutex_init (GStaticMutex *mutex);
+void g_static_mutex_free (GStaticMutex *mutex);
+
+struct _GStaticPrivate
+{
+  /*< private >*/
+  guint index;
+};
+#define G_STATIC_PRIVATE_INIT { 0 }
+void     g_static_private_init           (GStaticPrivate   *private_key);
+gpointer g_static_private_get            (GStaticPrivate   *private_key);
+void     g_static_private_set            (GStaticPrivate   *private_key,
+					  gpointer          data,
+					  GDestroyNotify    notify);
+void     g_static_private_free           (GStaticPrivate   *private_key);
+
+typedef struct _GStaticRecMutex GStaticRecMutex;
+struct _GStaticRecMutex
+{
+  /*< private >*/
+  GStaticMutex mutex;
+  guint depth;
+  GSystemThread owner;
+};
+
+#define G_STATIC_REC_MUTEX_INIT { G_STATIC_MUTEX_INIT }
+void     g_static_rec_mutex_init        (GStaticRecMutex *mutex);
+void     g_static_rec_mutex_lock        (GStaticRecMutex *mutex);
+gboolean g_static_rec_mutex_trylock     (GStaticRecMutex *mutex);
+void     g_static_rec_mutex_unlock      (GStaticRecMutex *mutex);
+void     g_static_rec_mutex_lock_full   (GStaticRecMutex *mutex,
+                                         guint            depth);
+guint    g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex);
+void     g_static_rec_mutex_free        (GStaticRecMutex *mutex);
+
+typedef struct _GStaticRWLock GStaticRWLock;
+struct _GStaticRWLock
+{
+  /*< private >*/
+  GStaticMutex mutex;
+  GCond *read_cond;
+  GCond *write_cond;
+  guint read_counter;
+  gboolean have_writer;
+  guint want_to_read;
+  guint want_to_write;
+};
+
+#define G_STATIC_RW_LOCK_INIT { G_STATIC_MUTEX_INIT, NULL, NULL, 0, FALSE, 0, 0 }
+
+void      g_static_rw_lock_init           (GStaticRWLock* lock);
+void      g_static_rw_lock_reader_lock    (GStaticRWLock* lock);
+gboolean  g_static_rw_lock_reader_trylock (GStaticRWLock* lock);
+void      g_static_rw_lock_reader_unlock  (GStaticRWLock* lock);
+void      g_static_rw_lock_writer_lock    (GStaticRWLock* lock);
+gboolean  g_static_rw_lock_writer_trylock (GStaticRWLock* lock);
+void      g_static_rw_lock_writer_unlock  (GStaticRWLock* lock);
+void      g_static_rw_lock_free           (GStaticRWLock* lock);
+
+void	  g_thread_foreach         	  (GFunc    	  thread_func,
+					   gpointer 	  user_data);
+
+typedef enum
+{
+  G_ONCE_STATUS_NOTCALLED,
+  G_ONCE_STATUS_PROGRESS,
+  G_ONCE_STATUS_READY  
+} GOnceStatus;
+
+typedef struct _GOnce GOnce;
+struct _GOnce
+{
+  volatile GOnceStatus status;
+  volatile gpointer retval;
+};
+
+#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
+
+gpointer g_once_impl (GOnce *once, GThreadFunc func, gpointer arg);
+
+#ifdef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED
+# define g_once(once, func, arg) g_once_impl ((once), (func), (arg))
+#else /* !G_ATOMIC_OP_MEMORY_BARRIER_NEEDED*/
+# define g_once(once, func, arg) \
+  (((once)->status == G_ONCE_STATUS_READY) ? \
+   (once)->retval : \
+   g_once_impl ((once), (func), (arg)))
+#endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
+
+/* initialize-once guards, keyed by value_location */
+G_INLINE_FUNC gboolean  g_once_init_enter       (volatile gsize *value_location);
+gboolean                g_once_init_enter_impl  (volatile gsize *value_location);
+void                    g_once_init_leave       (volatile gsize *value_location,
+                                                 gsize           initialization_value);
+#if defined (G_CAN_INLINE) || defined (__G_THREAD_C__)
+G_INLINE_FUNC gboolean
+g_once_init_enter (volatile gsize *value_location)
+{
+  if G_LIKELY ((gpointer) g_atomic_pointer_get (value_location) != NULL)
+    return FALSE;
+  else
+    return g_once_init_enter_impl (value_location);
+}
+#endif /* G_CAN_INLINE || __G_THREAD_C__ */
+
+/* these are some convenience macros that expand to nothing if GLib
+ * was configured with --disable-threads. for using StaticMutexes,
+ * you define them with G_LOCK_DEFINE_STATIC (name) or G_LOCK_DEFINE (name)
+ * if you need to export the mutex. With G_LOCK_EXTERN (name) you can
+ * declare such an globally defined lock. name is a unique identifier
+ * for the protected varibale or code portion. locking, testing and
+ * unlocking of such mutexes can be done with G_LOCK(), G_UNLOCK() and
+ * G_TRYLOCK() respectively.
+ */
+extern void glib_dummy_decl (void);
+#define G_LOCK_NAME(name)               g__ ## name ## _lock
+#ifdef  G_THREADS_ENABLED
+#  define G_LOCK_DEFINE_STATIC(name)    static G_LOCK_DEFINE (name)
+#  define G_LOCK_DEFINE(name)           \
+    GStaticMutex G_LOCK_NAME (name) = G_STATIC_MUTEX_INIT
+#  define G_LOCK_EXTERN(name)           extern GStaticMutex G_LOCK_NAME (name)
+
+#  ifdef G_DEBUG_LOCKS
+#    define G_LOCK(name)                G_STMT_START{             \
+        g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,                   \
+               "file %s: line %d (%s): locking: %s ",             \
+               __FILE__,        __LINE__, G_STRFUNC,              \
+               #name);                                            \
+        g_static_mutex_lock (&G_LOCK_NAME (name));                \
+     }G_STMT_END
+#    define G_UNLOCK(name)              G_STMT_START{             \
+        g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,                   \
+               "file %s: line %d (%s): unlocking: %s ",           \
+               __FILE__,        __LINE__, G_STRFUNC,              \
+               #name);                                            \
+       g_static_mutex_unlock (&G_LOCK_NAME (name));               \
+     }G_STMT_END
+#    define G_TRYLOCK(name)                                       \
+        (g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,                  \
+               "file %s: line %d (%s): try locking: %s ",         \
+               __FILE__,        __LINE__, G_STRFUNC,              \
+               #name), g_static_mutex_trylock (&G_LOCK_NAME (name)))
+#  else  /* !G_DEBUG_LOCKS */
+#    define G_LOCK(name) g_static_mutex_lock       (&G_LOCK_NAME (name))
+#    define G_UNLOCK(name) g_static_mutex_unlock   (&G_LOCK_NAME (name))
+#    define G_TRYLOCK(name) g_static_mutex_trylock (&G_LOCK_NAME (name))
+#  endif /* !G_DEBUG_LOCKS */
+#else   /* !G_THREADS_ENABLED */
+#  define G_LOCK_DEFINE_STATIC(name)    extern void glib_dummy_decl (void)
+#  define G_LOCK_DEFINE(name)           extern void glib_dummy_decl (void)
+#  define G_LOCK_EXTERN(name)           extern void glib_dummy_decl (void)
+#  define G_LOCK(name)
+#  define G_UNLOCK(name)
+#  define G_TRYLOCK(name)               (TRUE)
+#endif  /* !G_THREADS_ENABLED */
+
+G_END_DECLS
+
+#endif /* __G_THREAD_H__ */
diff --git a/glib/gthreadpool.h b/glib/gthreadpool.h
new file mode 100644
index 0000000..d586424
--- /dev/null
+++ b/glib/gthreadpool.h
@@ -0,0 +1,114 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_THREADPOOL_H__
+#define __G_THREADPOOL_H__
+
+#include <glib/gthread.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GThreadPool     GThreadPool;
+
+/* Thread Pools
+ */
+
+/* The real GThreadPool is bigger, so you may only create a thread
+ * pool with the constructor function */
+struct _GThreadPool
+{
+  GFunc func;
+  gpointer user_data;
+  gboolean exclusive;
+};
+
+/* Get a thread pool with the function func, at most max_threads may
+ * run at a time (max_threads == -1 means no limit), exclusive == TRUE
+ * means, that the threads shouldn't be shared and that they will be
+ * prestarted (otherwise they are started as needed) user_data is the
+ * 2nd argument to the func */
+GThreadPool*    g_thread_pool_new             (GFunc            func,
+                                               gpointer         user_data,
+                                               gint             max_threads,
+                                               gboolean         exclusive,
+                                               GError         **error);
+
+/* Push new data into the thread pool. This task is assigned to a thread later
+ * (when the maximal number of threads is reached for that pool) or now
+ * (otherwise). If necessary a new thread will be started. The function
+ * returns immediatly */
+void            g_thread_pool_push            (GThreadPool     *pool,
+                                               gpointer         data,
+                                               GError         **error);
+
+/* Set the number of threads, which can run concurrently for that pool, -1
+ * means no limit. 0 means has the effect, that the pool won't process
+ * requests until the limit is set higher again */
+void            g_thread_pool_set_max_threads (GThreadPool     *pool,
+                                               gint             max_threads,
+                                               GError         **error);
+gint            g_thread_pool_get_max_threads (GThreadPool     *pool);
+
+/* Get the number of threads assigned to that pool. This number doesn't
+ * necessarily represent the number of working threads in that pool */
+guint           g_thread_pool_get_num_threads (GThreadPool     *pool);
+
+/* Get the number of unprocessed items in the pool */
+guint           g_thread_pool_unprocessed     (GThreadPool     *pool);
+
+/* Free the pool, immediate means, that all unprocessed items in the queue
+ * wont be processed, wait means, that the function doesn't return immediatly,
+ * but after all threads in the pool are ready processing items. immediate
+ * does however not mean, that threads are killed. */
+void            g_thread_pool_free            (GThreadPool     *pool,
+                                               gboolean         immediate,
+                                               gboolean         wait_);
+
+/* Set the maximal number of unused threads before threads will be stopped by
+ * GLib, -1 means no limit */
+void            g_thread_pool_set_max_unused_threads (gint      max_threads);
+gint            g_thread_pool_get_max_unused_threads (void);
+guint           g_thread_pool_get_num_unused_threads (void);
+
+/* Stop all currently unused threads, but leave the limit untouched */
+void            g_thread_pool_stop_unused_threads    (void);
+
+/* Set sort function for priority threading */
+void            g_thread_pool_set_sort_function      (GThreadPool      *pool,
+		                                      GCompareDataFunc  func,
+						      gpointer          user_data);
+
+/* Set maximum time a thread can be idle in the pool before it is stopped */
+void            g_thread_pool_set_max_idle_time      (guint             interval);
+guint           g_thread_pool_get_max_idle_time      (void);
+
+G_END_DECLS
+
+#endif /* __G_THREADPOOL_H__ */
diff --git a/glib/gthreadprivate.h b/glib/gthreadprivate.h
new file mode 100644
index 0000000..c9b5fa5
--- /dev/null
+++ b/glib/gthreadprivate.h
@@ -0,0 +1,68 @@
+/* GLIB - Library of useful routines for C programming
+ *
+ * gthreadprivate.h - GLib internal thread system related declarations.
+ *
+ *  Copyright (C) 2003 Sebastian Wilhelmi
+ *
+ * The Gnome 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 of the
+ * License, or (at your option) any later version.
+ *
+ * The Gnome 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 the Gnome Library; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __G_THREADPRIVATE_H__
+#define __G_THREADPRIVATE_H__
+
+G_BEGIN_DECLS
+
+/* System thread identifier comparision and assignment */
+#if GLIB_SIZEOF_SYSTEM_THREAD == SIZEOF_VOID_P
+# define g_system_thread_equal_simple(thread1, thread2)			\
+   ((thread1).dummy_pointer == (thread2).dummy_pointer)
+# define g_system_thread_assign(dest, src)				\
+   ((dest).dummy_pointer = (src).dummy_pointer)
+#else /* GLIB_SIZEOF_SYSTEM_THREAD != SIZEOF_VOID_P */
+# define g_system_thread_equal_simple(thread1, thread2)			\
+   (memcmp (&(thread1), &(thread2), GLIB_SIZEOF_SYSTEM_THREAD) == 0)
+# define g_system_thread_assign(dest, src)				\
+   (memcpy (&(dest), &(src), GLIB_SIZEOF_SYSTEM_THREAD))
+#endif /* GLIB_SIZEOF_SYSTEM_THREAD == SIZEOF_VOID_P */
+
+#define g_system_thread_equal(thread1, thread2)				\
+  (g_thread_functions_for_glib_use.thread_equal ? 			\
+   g_thread_functions_for_glib_use.thread_equal (&(thread1), &(thread2)) :\
+   g_system_thread_equal_simple((thread1), (thread2)))
+
+/* Is called from gthread/gthread-impl.c */
+void g_thread_init_glib (void);
+
+/* base initializers, may only use g_mutex_new(), g_cond_new() */
+G_GNUC_INTERNAL void _g_mem_thread_init_noprivate_nomessage (void);
+/* initializers that may also use g_private_new() */
+G_GNUC_INTERNAL void _g_slice_thread_init_nomessage	    (void);
+G_GNUC_INTERNAL void _g_messages_thread_init_nomessage      (void);
+
+/* full fledged initializers */
+G_GNUC_INTERNAL void _g_convert_thread_init (void);
+G_GNUC_INTERNAL void _g_rand_thread_init (void);
+G_GNUC_INTERNAL void _g_main_thread_init (void);
+G_GNUC_INTERNAL void _g_atomic_thread_init (void);
+G_GNUC_INTERNAL void _g_utils_thread_init (void);
+
+#ifdef G_OS_WIN32
+G_GNUC_INTERNAL void _g_win32_thread_init (void);
+#endif /* G_OS_WIN32 */
+
+G_END_DECLS
+
+#endif /* __G_THREADPRIVATE_H__ */
diff --git a/glib/gtimer.c b/glib/gtimer.c
new file mode 100644
index 0000000..c52eeb7
--- /dev/null
+++ b/glib/gtimer.c
@@ -0,0 +1,469 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+#include "glibconfig.h"
+
+#include <stdlib.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#ifndef G_OS_WIN32
+#include <sys/time.h>
+#include <time.h>
+#include <errno.h>
+#endif /* G_OS_WIN32 */
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif /* G_OS_WIN32 */
+
+#include "glib.h"
+#include "gthread.h"
+#include "galias.h"
+
+#define G_NSEC_PER_SEC 1000000000
+
+#define GETTIME(v) (v = g_thread_gettime ())
+
+struct _GTimer
+{
+  guint64 start;
+  guint64 end;
+
+  guint active : 1;
+};
+
+
+GTimer*
+g_timer_new (void)
+{
+  GTimer *timer;
+
+  timer = g_new (GTimer, 1);
+  timer->active = TRUE;
+
+  GETTIME (timer->start);
+
+  return timer;
+}
+
+void
+g_timer_destroy (GTimer *timer)
+{
+  g_return_if_fail (timer != NULL);
+
+  g_free (timer);
+}
+
+void
+g_timer_start (GTimer *timer)
+{
+  g_return_if_fail (timer != NULL);
+
+  timer->active = TRUE;
+
+  GETTIME (timer->start);
+}
+
+void
+g_timer_stop (GTimer *timer)
+{
+  g_return_if_fail (timer != NULL);
+
+  timer->active = FALSE;
+
+  GETTIME (timer->end);
+}
+
+void
+g_timer_reset (GTimer *timer)
+{
+  g_return_if_fail (timer != NULL);
+
+  GETTIME (timer->start);
+}
+
+void
+g_timer_continue (GTimer *timer)
+{
+  guint64 elapsed;
+
+  g_return_if_fail (timer != NULL);
+  g_return_if_fail (timer->active == FALSE);
+
+  /* Get elapsed time and reset timer start time
+   *  to the current time minus the previously
+   *  elapsed interval.
+   */
+
+  elapsed = timer->end - timer->start;
+
+  GETTIME (timer->start);
+
+  timer->start -= elapsed;
+
+  timer->active = TRUE;
+}
+
+gdouble
+g_timer_elapsed (GTimer *timer,
+		 gulong *microseconds)
+{
+  gdouble total;
+  gint64 elapsed;
+
+  g_return_val_if_fail (timer != NULL, 0);
+
+  if (timer->active)
+    GETTIME (timer->end);
+
+  elapsed = timer->end - timer->start;
+
+  total = elapsed / 1e9;
+
+  if (microseconds)
+    *microseconds = (elapsed / 1000) % 1000000;
+
+  return total;
+}
+
+void
+g_usleep (gulong microseconds)
+{
+#ifdef G_OS_WIN32
+  Sleep (microseconds / 1000);
+#else /* !G_OS_WIN32 */
+# ifdef HAVE_NANOSLEEP
+  struct timespec request, remaining;
+  request.tv_sec = microseconds / G_USEC_PER_SEC;
+  request.tv_nsec = 1000 * (microseconds % G_USEC_PER_SEC);
+  while (nanosleep (&request, &remaining) == -1 && errno == EINTR)
+    request = remaining;
+# else /* !HAVE_NANOSLEEP */
+#  ifdef HAVE_NSLEEP
+  /* on AIX, nsleep is analogous to nanosleep */
+  struct timespec request, remaining;
+  request.tv_sec = microseconds / G_USEC_PER_SEC;
+  request.tv_nsec = 1000 * (microseconds % G_USEC_PER_SEC);
+  while (nsleep (&request, &remaining) == -1 && errno == EINTR)
+    request = remaining;
+#  else /* !HAVE_NSLEEP */
+  if (g_thread_supported ())
+    {
+      static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
+      static GCond* cond = NULL;
+      GTimeVal end_time;
+      
+      g_get_current_time (&end_time);
+      if (microseconds > G_MAXLONG)
+	{
+	  microseconds -= G_MAXLONG;
+	  g_time_val_add (&end_time, G_MAXLONG);
+	}
+      g_time_val_add (&end_time, microseconds);
+
+      g_static_mutex_lock (&mutex);
+      
+      if (!cond)
+	cond = g_cond_new ();
+      
+      while (g_cond_timed_wait (cond, g_static_mutex_get_mutex (&mutex), 
+				&end_time))
+	/* do nothing */;
+      
+      g_static_mutex_unlock (&mutex);
+    }
+  else
+    {
+      struct timeval tv;
+      tv.tv_sec = microseconds / G_USEC_PER_SEC;
+      tv.tv_usec = microseconds % G_USEC_PER_SEC;
+      select(0, NULL, NULL, NULL, &tv);
+    }
+#  endif /* !HAVE_NSLEEP */
+# endif /* !HAVE_NANOSLEEP */
+#endif /* !G_OS_WIN32 */
+}
+
+/**
+ * g_time_val_add:
+ * @time_: a #GTimeVal
+ * @microseconds: number of microseconds to add to @time
+ *
+ * Adds the given number of microseconds to @time_. @microseconds can
+ * also be negative to decrease the value of @time_.
+ **/
+void 
+g_time_val_add (GTimeVal *time_, glong microseconds)
+{
+  g_return_if_fail (time_->tv_usec >= 0 && time_->tv_usec < G_USEC_PER_SEC);
+
+  if (microseconds >= 0)
+    {
+      time_->tv_usec += microseconds % G_USEC_PER_SEC;
+      time_->tv_sec += microseconds / G_USEC_PER_SEC;
+      if (time_->tv_usec >= G_USEC_PER_SEC)
+       {
+         time_->tv_usec -= G_USEC_PER_SEC;
+         time_->tv_sec++;
+       }
+    }
+  else
+    {
+      microseconds *= -1;
+      time_->tv_usec -= microseconds % G_USEC_PER_SEC;
+      time_->tv_sec -= microseconds / G_USEC_PER_SEC;
+      if (time_->tv_usec < 0)
+       {
+         time_->tv_usec += G_USEC_PER_SEC;
+         time_->tv_sec--;
+       }      
+    }
+}
+
+/* converts a broken down date representation, relative to UTC, to
+ * a timestamp; it uses timegm() if it's available.
+ */
+static time_t
+mktime_utc (struct tm *tm)
+{
+  time_t retval;
+  
+#ifndef HAVE_TIMEGM
+  static const gint days_before[] =
+  {
+    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
+  };
+#endif
+
+#ifndef HAVE_TIMEGM
+  if (tm->tm_mon < 0 || tm->tm_mon > 11)
+    return (time_t) -1;
+
+  retval = (tm->tm_year - 70) * 365;
+  retval += (tm->tm_year - 68) / 4;
+  retval += days_before[tm->tm_mon] + tm->tm_mday - 1;
+  
+  if (tm->tm_year % 4 == 0 && tm->tm_mon < 2)
+    retval -= 1;
+  
+  retval = ((((retval * 24) + tm->tm_hour) * 60) + tm->tm_min) * 60 + tm->tm_sec;
+#else
+  retval = timegm (tm);
+#endif /* !HAVE_TIMEGM */
+  
+  return retval;
+}
+
+/**
+ * g_time_val_from_iso8601:
+ * @iso_date: an ISO 8601 encoded date string
+ * @time_: a #GTimeVal
+ *
+ * Converts a string containing an ISO 8601 encoded date and time
+ * to a #GTimeVal and puts it into @time_.
+ *
+ * Return value: %TRUE if the conversion was successful.
+ *
+ * Since: 2.12
+ */
+gboolean
+g_time_val_from_iso8601 (const gchar *iso_date,
+			 GTimeVal    *time_)
+{
+  struct tm tm;
+  long val;
+
+  g_return_val_if_fail (iso_date != NULL, FALSE);
+  g_return_val_if_fail (time_ != NULL, FALSE);
+
+  /* Ensure that the first character is a digit,
+   * the first digit of the date, otherwise we don't
+   * have an ISO 8601 date */
+  while (g_ascii_isspace (*iso_date))
+    iso_date++;
+
+  if (*iso_date == '\0')
+    return FALSE;
+
+  if (!g_ascii_isdigit (*iso_date) && *iso_date != '-' && *iso_date != '+')
+    return FALSE;
+
+  val = strtoul (iso_date, (char **)&iso_date, 10);
+  if (*iso_date == '-')
+    {
+      /* YYYY-MM-DD */
+      tm.tm_year = val - 1900;
+      iso_date++;
+      tm.tm_mon = strtoul (iso_date, (char **)&iso_date, 10) - 1;
+      
+      if (*iso_date++ != '-')
+       	return FALSE;
+      
+      tm.tm_mday = strtoul (iso_date, (char **)&iso_date, 10);
+    }
+  else
+    {
+      /* YYYYMMDD */
+      tm.tm_mday = val % 100;
+      tm.tm_mon = (val % 10000) / 100 - 1;
+      tm.tm_year = val / 10000 - 1900;
+    }
+
+  if (*iso_date++ != 'T')
+    return FALSE;
+  
+  val = strtoul (iso_date, (char **)&iso_date, 10);
+  if (*iso_date == ':')
+    {
+      /* hh:mm:ss */
+      tm.tm_hour = val;
+      iso_date++;
+      tm.tm_min = strtoul (iso_date, (char **)&iso_date, 10);
+      
+      if (*iso_date++ != ':')
+        return FALSE;
+      
+      tm.tm_sec = strtoul (iso_date, (char **)&iso_date, 10);
+    }
+  else
+    {
+      /* hhmmss */
+      tm.tm_sec = val % 100;
+      tm.tm_min = (val % 10000) / 100;
+      tm.tm_hour = val / 10000;
+    }
+
+  time_->tv_sec = mktime_utc (&tm);
+  time_->tv_usec = 0;
+  
+  if (*iso_date == ',' || *iso_date == '.')
+    {
+      glong mul = 100000;
+
+      while (g_ascii_isdigit (*++iso_date))
+        {
+          time_->tv_usec += (*iso_date - '0') * mul;
+          mul /= 10;
+        }
+    }
+    
+  if (*iso_date == '+' || *iso_date == '-')
+    {
+      gint sign = (*iso_date == '+') ? -1 : 1;
+      
+      val = strtoul (iso_date + 1, (char **)&iso_date, 10);
+      
+      if (*iso_date == ':')
+	val = 60 * val + strtoul (iso_date + 1, (char **)&iso_date, 10);
+      else
+        val = 60 * (val / 100) + (val % 100);
+
+      time_->tv_sec += (time_t) (60 * val * sign);
+    }
+  else if (*iso_date++ != 'Z')
+    return FALSE;
+
+  while (g_ascii_isspace (*iso_date))
+    iso_date++;
+
+  return *iso_date == '\0';
+}
+
+/**
+ * g_time_val_to_iso8601:
+ * @time_: a #GTimeVal
+ * 
+ * Converts @time_ into an ISO 8601 encoded string, relative to the
+ * Coordinated Universal Time (UTC).
+ *
+ * Return value: a newly allocated string containing an ISO 8601 date
+ *
+ * Since: 2.12
+ */
+gchar *
+g_time_val_to_iso8601 (GTimeVal *time_)
+{
+  gchar *retval;
+  struct tm *tm;
+#ifdef HAVE_GMTIME_R
+  struct tm tm_;
+#endif
+  time_t secs;
+  
+  g_return_val_if_fail (time_->tv_usec >= 0 && time_->tv_usec < G_USEC_PER_SEC, NULL);
+
+ secs = time_->tv_sec;
+#ifdef _WIN32
+ tm = gmtime (&secs);
+#else
+#ifdef HAVE_GMTIME_R
+  tm = gmtime_r (&secs, &tm_);
+#else
+  tm = gmtime (&secs);
+#endif
+#endif
+
+  if (time_->tv_usec != 0)
+    {
+      /* ISO 8601 date and time format, with fractionary seconds:
+       *   YYYY-MM-DDTHH:MM:SS.MMMMMMZ
+       */
+      retval = g_strdup_printf ("%4d-%02d-%02dT%02d:%02d:%02d.%06ldZ",
+                                tm->tm_year + 1900,
+                                tm->tm_mon + 1,
+                                tm->tm_mday,
+                                tm->tm_hour,
+                                tm->tm_min,
+                                tm->tm_sec,
+                                time_->tv_usec);
+    }
+  else
+    {
+      /* ISO 8601 date and time format:
+       *   YYYY-MM-DDTHH:MM:SSZ
+       */
+      retval = g_strdup_printf ("%4d-%02d-%02dT%02d:%02d:%02dZ",
+                                tm->tm_year + 1900,
+                                tm->tm_mon + 1,
+                                tm->tm_mday,
+                                tm->tm_hour,
+                                tm->tm_min,
+                                tm->tm_sec);
+    }
+  
+  return retval;
+}
+
+#define __G_TIMER_C__
+#include "galiasdef.c"
diff --git a/glib/gtimer.h b/glib/gtimer.h
new file mode 100644
index 0000000..743eed1
--- /dev/null
+++ b/glib/gtimer.h
@@ -0,0 +1,65 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_TIMER_H__
+#define __G_TIMER_H__
+
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+/* Timer
+ */
+
+/* microseconds per second */
+typedef struct _GTimer		GTimer;
+
+#define G_USEC_PER_SEC 1000000
+
+GTimer*  g_timer_new	         (void);
+void	 g_timer_destroy         (GTimer      *timer);
+void	 g_timer_start	         (GTimer      *timer);
+void	 g_timer_stop	         (GTimer      *timer);
+void	 g_timer_reset	         (GTimer      *timer);
+void	 g_timer_continue        (GTimer      *timer);
+gdouble  g_timer_elapsed         (GTimer      *timer,
+				  gulong      *microseconds);
+
+void     g_usleep                (gulong       microseconds);
+
+void     g_time_val_add          (GTimeVal    *time_, 
+                                  glong        microseconds);
+gboolean g_time_val_from_iso8601 (const gchar *iso_date,
+				  GTimeVal    *time_);
+gchar*   g_time_val_to_iso8601   (GTimeVal    *time_) G_GNUC_MALLOC;
+
+G_END_DECLS
+
+#endif /* __G_TIMER_H__ */
diff --git a/glib/gtree.h b/glib/gtree.h
new file mode 100644
index 0000000..a8bbda8
--- /dev/null
+++ b/glib/gtree.h
@@ -0,0 +1,89 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_TREE_H__
+#define __G_TREE_H__
+
+#include <glib/gnode.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GTree  GTree;
+
+typedef gboolean (*GTraverseFunc) (gpointer  key,
+                                   gpointer  value,
+                                   gpointer  data);
+
+/* Balanced binary trees
+ */
+GTree*   g_tree_new             (GCompareFunc      key_compare_func);
+GTree*   g_tree_new_with_data   (GCompareDataFunc  key_compare_func,
+                                 gpointer          key_compare_data);
+GTree*   g_tree_new_full        (GCompareDataFunc  key_compare_func,
+                                 gpointer          key_compare_data,
+                                 GDestroyNotify    key_destroy_func,
+                                 GDestroyNotify    value_destroy_func);
+void     g_tree_destroy         (GTree            *tree);
+void     g_tree_insert          (GTree            *tree,
+                                 gpointer          key,
+                                 gpointer          value);
+void     g_tree_replace         (GTree            *tree,
+                                 gpointer          key,
+                                 gpointer          value);
+gboolean g_tree_remove          (GTree            *tree,
+                                 gconstpointer     key);
+gboolean g_tree_steal           (GTree            *tree,
+                                 gconstpointer     key);
+gpointer g_tree_lookup          (GTree            *tree,
+                                 gconstpointer     key);
+gboolean g_tree_lookup_extended (GTree            *tree,
+                                 gconstpointer     lookup_key,
+                                 gpointer         *orig_key,
+                                 gpointer         *value);
+void     g_tree_foreach         (GTree            *tree,
+                                 GTraverseFunc	   func,
+                                 gpointer	   user_data);
+
+#ifndef G_DISABLE_DEPRECATED
+void     g_tree_traverse        (GTree            *tree,
+                                 GTraverseFunc     traverse_func,
+                                 GTraverseType     traverse_type,
+                                 gpointer          user_data);
+#endif /* G_DISABLE_DEPRECATED */
+
+gpointer g_tree_search          (GTree            *tree,
+                                 GCompareFunc      search_func,
+                                 gconstpointer     user_data);
+gint     g_tree_height          (GTree            *tree);
+gint     g_tree_nnodes          (GTree            *tree);
+
+G_END_DECLS
+
+#endif /* __G_TREE_H__ */
diff --git a/glib/gtypes.h b/glib/gtypes.h
new file mode 100644
index 0000000..56cc648
--- /dev/null
+++ b/glib/gtypes.h
@@ -0,0 +1,433 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_TYPES_H__
+#define __G_TYPES_H__
+
+#include <glibconfig.h>
+#include <glib/gmacros.h>
+
+G_BEGIN_DECLS
+
+/* Provide type definitions for commonly used types.
+ *  These are useful because a "gint8" can be adjusted
+ *  to be 1 byte (8 bits) on all platforms. Similarly and
+ *  more importantly, "gint32" can be adjusted to be
+ *  4 bytes (32 bits) on all platforms.
+ */
+
+typedef char   gchar;
+typedef short  gshort;
+typedef long   glong;
+typedef int    gint;
+typedef gint   gboolean;
+
+typedef unsigned char   guchar;
+typedef unsigned short  gushort;
+typedef unsigned long   gulong;
+typedef unsigned int    guint;
+
+typedef float   gfloat;
+typedef double  gdouble;
+
+/* Define min and max constants for the fixed size numerical types */
+#define G_MININT8	((gint8)  0x80)
+#define G_MAXINT8	((gint8)  0x7f)
+#define G_MAXUINT8	((guint8) 0xff)
+
+#define G_MININT16	((gint16)  0x8000)
+#define G_MAXINT16	((gint16)  0x7fff)
+#define G_MAXUINT16	((guint16) 0xffff)
+
+#define G_MININT32	((gint32)  0x80000000)
+#define G_MAXINT32	((gint32)  0x7fffffff)
+#define G_MAXUINT32	((guint32) 0xffffffff)
+
+#define G_MININT64	((gint64) G_GINT64_CONSTANT(0x8000000000000000))
+#define G_MAXINT64	G_GINT64_CONSTANT(0x7fffffffffffffff)
+#define G_MAXUINT64	G_GINT64_CONSTANT(0xffffffffffffffffU)
+
+typedef void* gpointer;
+typedef const void *gconstpointer;
+
+typedef gint            (*GCompareFunc)         (gconstpointer  a,
+                                                 gconstpointer  b);
+typedef gint            (*GCompareDataFunc)     (gconstpointer  a,
+                                                 gconstpointer  b,
+						 gpointer       user_data);
+typedef gboolean        (*GEqualFunc)           (gconstpointer  a,
+                                                 gconstpointer  b);
+typedef void            (*GDestroyNotify)       (gpointer       data);
+typedef void            (*GFunc)                (gpointer       data,
+                                                 gpointer       user_data);
+typedef guint           (*GHashFunc)            (gconstpointer  key);
+typedef void            (*GHFunc)               (gpointer       key,
+                                                 gpointer       value,
+                                                 gpointer       user_data);
+typedef void            (*GFreeFunc)            (gpointer       data);
+typedef const gchar *   (*GTranslateFunc)       (const gchar   *str,
+						 gpointer       data);
+
+
+/* Define some mathematical constants that aren't available
+ * symbolically in some strict ISO C implementations.
+ *
+ * Note that the large number of digits used in these definitions
+ * doesn't imply that GLib or current computers in general would be
+ * able to handle floating point numbers with an accuracy like this.
+ * It's mostly an exercise in futility and future proofing. For
+ * extended precision floating point support, look somewhere else
+ * than GLib.
+ */
+#define G_E     2.7182818284590452353602874713526624977572470937000
+#define G_LN2   0.69314718055994530941723212145817656807550013436026
+#define G_LN10  2.3025850929940456840179914546843642076011014886288
+#define G_PI    3.1415926535897932384626433832795028841971693993751
+#define G_PI_2  1.5707963267948966192313216916397514420985846996876
+#define G_PI_4  0.78539816339744830961566084581987572104929234984378
+#define G_SQRT2 1.4142135623730950488016887242096980785696718753769
+
+/* Portable endian checks and conversions
+ *
+ * glibconfig.h defines G_BYTE_ORDER which expands to one of
+ * the below macros.
+ */
+#define G_LITTLE_ENDIAN 1234
+#define G_BIG_ENDIAN    4321
+#define G_PDP_ENDIAN    3412		/* unused, need specific PDP check */	
+
+
+/* Basic bit swapping functions
+ */
+#define GUINT16_SWAP_LE_BE_CONSTANT(val)	((guint16) ( \
+    (guint16) ((guint16) (val) >> 8) |	\
+    (guint16) ((guint16) (val) << 8)))
+
+#define GUINT32_SWAP_LE_BE_CONSTANT(val)	((guint32) ( \
+    (((guint32) (val) & (guint32) 0x000000ffU) << 24) | \
+    (((guint32) (val) & (guint32) 0x0000ff00U) <<  8) | \
+    (((guint32) (val) & (guint32) 0x00ff0000U) >>  8) | \
+    (((guint32) (val) & (guint32) 0xff000000U) >> 24)))
+
+#define GUINT64_SWAP_LE_BE_CONSTANT(val)	((guint64) ( \
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x00000000000000ffU)) << 56) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x000000000000ff00U)) << 40) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x0000000000ff0000U)) << 24) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x00000000ff000000U)) <<  8) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x000000ff00000000U)) >>  8) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x0000ff0000000000U)) >> 24) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0x00ff000000000000U)) >> 40) |	\
+      (((guint64) (val) &						\
+	(guint64) G_GINT64_CONSTANT (0xff00000000000000U)) >> 56)))
+
+/* Arch specific stuff for speed
+ */
+#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
+#  if defined (__i386__)
+#    define GUINT16_SWAP_LE_BE_IA32(val) \
+       (__extension__						\
+	({ register guint16 __v, __x = ((guint16) (val));	\
+	   if (__builtin_constant_p (__x))			\
+	     __v = GUINT16_SWAP_LE_BE_CONSTANT (__x);		\
+	   else							\
+	     __asm__ ("rorw $8, %w0"				\
+		      : "=r" (__v)				\
+		      : "0" (__x)				\
+		      : "cc");					\
+	    __v; }))
+#    if !defined (__i486__) && !defined (__i586__) \
+	&& !defined (__pentium__) && !defined (__i686__) \
+	&& !defined (__pentiumpro__) && !defined (__pentium4__)
+#       define GUINT32_SWAP_LE_BE_IA32(val) \
+	  (__extension__					\
+	   ({ register guint32 __v, __x = ((guint32) (val));	\
+	      if (__builtin_constant_p (__x))			\
+		__v = GUINT32_SWAP_LE_BE_CONSTANT (__x);	\
+	      else						\
+		__asm__ ("rorw $8, %w0\n\t"			\
+			 "rorl $16, %0\n\t"			\
+			 "rorw $8, %w0"				\
+			 : "=r" (__v)				\
+			 : "0" (__x)				\
+			 : "cc");				\
+	      __v; }))
+#    else /* 486 and higher has bswap */
+#       define GUINT32_SWAP_LE_BE_IA32(val) \
+	  (__extension__					\
+	   ({ register guint32 __v, __x = ((guint32) (val));	\
+	      if (__builtin_constant_p (__x))			\
+		__v = GUINT32_SWAP_LE_BE_CONSTANT (__x);	\
+	      else						\
+		__asm__ ("bswap %0"				\
+			 : "=r" (__v)				\
+			 : "0" (__x));				\
+	      __v; }))
+#    endif /* processor specific 32-bit stuff */
+#    define GUINT64_SWAP_LE_BE_IA32(val) \
+       (__extension__							\
+	({ union { guint64 __ll;					\
+		   guint32 __l[2]; } __w, __r;				\
+	   __w.__ll = ((guint64) (val));				\
+	   if (__builtin_constant_p (__w.__ll))				\
+	     __r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (__w.__ll);		\
+	   else								\
+	     {								\
+	       __r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]);		\
+	       __r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]);		\
+	     }								\
+	   __r.__ll; }))
+     /* Possibly just use the constant version and let gcc figure it out? */
+#    define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA32 (val))
+#    define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA32 (val))
+#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA32 (val))
+#  elif defined (__ia64__)
+#    define GUINT16_SWAP_LE_BE_IA64(val) \
+       (__extension__						\
+	({ register guint16 __v, __x = ((guint16) (val));	\
+	   if (__builtin_constant_p (__x))			\
+	     __v = GUINT16_SWAP_LE_BE_CONSTANT (__x);		\
+	   else							\
+	     __asm__ __volatile__ ("shl %0 = %1, 48 ;;"		\
+				   "mux1 %0 = %0, @rev ;;"	\
+				    : "=r" (__v)		\
+				    : "r" (__x));		\
+	    __v; }))
+#    define GUINT32_SWAP_LE_BE_IA64(val) \
+       (__extension__						\
+	 ({ register guint32 __v, __x = ((guint32) (val));	\
+	    if (__builtin_constant_p (__x))			\
+	      __v = GUINT32_SWAP_LE_BE_CONSTANT (__x);		\
+	    else						\
+	     __asm__ __volatile__ ("shl %0 = %1, 32 ;;"		\
+				   "mux1 %0 = %0, @rev ;;"	\
+				    : "=r" (__v)		\
+				    : "r" (__x));		\
+	    __v; }))
+#    define GUINT64_SWAP_LE_BE_IA64(val) \
+       (__extension__						\
+	({ register guint64 __v, __x = ((guint64) (val));	\
+	   if (__builtin_constant_p (__x))			\
+	     __v = GUINT64_SWAP_LE_BE_CONSTANT (__x);		\
+	   else							\
+	     __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;"	\
+				   : "=r" (__v)			\
+				   : "r" (__x));		\
+	   __v; }))
+#    define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA64 (val))
+#    define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA64 (val))
+#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA64 (val))
+#  elif defined (__x86_64__)
+#    define GUINT32_SWAP_LE_BE_X86_64(val) \
+       (__extension__						\
+	 ({ register guint32 __v, __x = ((guint32) (val));	\
+	    if (__builtin_constant_p (__x))			\
+	      __v = GUINT32_SWAP_LE_BE_CONSTANT (__x);		\
+	    else						\
+	     __asm__ ("bswapl %0"				\
+		      : "=r" (__v)				\
+		      : "0" (__x));				\
+	    __v; }))
+#    define GUINT64_SWAP_LE_BE_X86_64(val) \
+       (__extension__						\
+	({ register guint64 __v, __x = ((guint64) (val));	\
+	   if (__builtin_constant_p (__x))			\
+	     __v = GUINT64_SWAP_LE_BE_CONSTANT (__x);		\
+	   else							\
+	     __asm__ ("bswapq %0"				\
+		      : "=r" (__v)				\
+		      : "0" (__x));				\
+	   __v; }))
+     /* gcc seems to figure out optimal code for this on its own */
+#    define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
+#    define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86_64 (val))
+#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86_64 (val))
+#  else /* generic gcc */
+#    define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
+#    define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
+#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))
+#  endif
+#else /* generic */
+#  define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
+#  define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
+#  define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))
+#endif /* generic */
+
+#define GUINT16_SWAP_LE_PDP(val)	((guint16) (val))
+#define GUINT16_SWAP_BE_PDP(val)	(GUINT16_SWAP_LE_BE (val))
+#define GUINT32_SWAP_LE_PDP(val)	((guint32) ( \
+    (((guint32) (val) & (guint32) 0x0000ffffU) << 16) | \
+    (((guint32) (val) & (guint32) 0xffff0000U) >> 16)))
+#define GUINT32_SWAP_BE_PDP(val)	((guint32) ( \
+    (((guint32) (val) & (guint32) 0x00ff00ffU) << 8) | \
+    (((guint32) (val) & (guint32) 0xff00ff00U) >> 8)))
+
+/* The G*_TO_?E() macros are defined in glibconfig.h.
+ * The transformation is symmetric, so the FROM just maps to the TO.
+ */
+#define GINT16_FROM_LE(val)	(GINT16_TO_LE (val))
+#define GUINT16_FROM_LE(val)	(GUINT16_TO_LE (val))
+#define GINT16_FROM_BE(val)	(GINT16_TO_BE (val))
+#define GUINT16_FROM_BE(val)	(GUINT16_TO_BE (val))
+#define GINT32_FROM_LE(val)	(GINT32_TO_LE (val))
+#define GUINT32_FROM_LE(val)	(GUINT32_TO_LE (val))
+#define GINT32_FROM_BE(val)	(GINT32_TO_BE (val))
+#define GUINT32_FROM_BE(val)	(GUINT32_TO_BE (val))
+
+#define GINT64_FROM_LE(val)	(GINT64_TO_LE (val))
+#define GUINT64_FROM_LE(val)	(GUINT64_TO_LE (val))
+#define GINT64_FROM_BE(val)	(GINT64_TO_BE (val))
+#define GUINT64_FROM_BE(val)	(GUINT64_TO_BE (val))
+
+#define GLONG_FROM_LE(val)	(GLONG_TO_LE (val))
+#define GULONG_FROM_LE(val)	(GULONG_TO_LE (val))
+#define GLONG_FROM_BE(val)	(GLONG_TO_BE (val))
+#define GULONG_FROM_BE(val)	(GULONG_TO_BE (val))
+
+#define GINT_FROM_LE(val)	(GINT_TO_LE (val))
+#define GUINT_FROM_LE(val)	(GUINT_TO_LE (val))
+#define GINT_FROM_BE(val)	(GINT_TO_BE (val))
+#define GUINT_FROM_BE(val)	(GUINT_TO_BE (val))
+
+
+/* Portable versions of host-network order stuff
+ */
+#define g_ntohl(val) (GUINT32_FROM_BE (val))
+#define g_ntohs(val) (GUINT16_FROM_BE (val))
+#define g_htonl(val) (GUINT32_TO_BE (val))
+#define g_htons(val) (GUINT16_TO_BE (val))
+
+/* IEEE Standard 754 Single Precision Storage Format (gfloat):
+ *
+ *        31 30           23 22            0
+ * +--------+---------------+---------------+
+ * | s 1bit | e[30:23] 8bit | f[22:0] 23bit |
+ * +--------+---------------+---------------+
+ * B0------------------->B1------->B2-->B3-->
+ *
+ * IEEE Standard 754 Double Precision Storage Format (gdouble):
+ *
+ *        63 62            52 51            32   31            0
+ * +--------+----------------+----------------+ +---------------+
+ * | s 1bit | e[62:52] 11bit | f[51:32] 20bit | | f[31:0] 32bit |
+ * +--------+----------------+----------------+ +---------------+
+ * B0--------------->B1---------->B2--->B3---->  B4->B5->B6->B7->
+ */
+/* subtract from biased_exponent to form base2 exponent (normal numbers) */
+typedef union  _GDoubleIEEE754	GDoubleIEEE754;
+typedef union  _GFloatIEEE754	GFloatIEEE754;
+#define G_IEEE754_FLOAT_BIAS	(127)
+#define G_IEEE754_DOUBLE_BIAS	(1023)
+/* multiply with base2 exponent to get base10 exponent (normal numbers) */
+#define G_LOG_2_BASE_10		(0.30102999566398119521)
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+union _GFloatIEEE754
+{
+  gfloat v_float;
+  struct {
+    guint mantissa : 23;
+    guint biased_exponent : 8;
+    guint sign : 1;
+  } mpn;
+};
+union _GDoubleIEEE754
+{
+  gdouble v_double;
+  struct {
+    guint mantissa_low : 32;
+    guint mantissa_high : 20;
+    guint biased_exponent : 11;
+    guint sign : 1;
+  } mpn;
+};
+#elif G_BYTE_ORDER == G_BIG_ENDIAN
+union _GFloatIEEE754
+{
+  gfloat v_float;
+  struct {
+    guint sign : 1;
+    guint biased_exponent : 8;
+    guint mantissa : 23;
+  } mpn;
+};
+union _GDoubleIEEE754
+{
+  gdouble v_double;
+  struct {
+    guint sign : 1;
+    guint biased_exponent : 11;
+    guint mantissa_high : 20;
+    guint mantissa_low : 32;
+  } mpn;
+};
+#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
+#error unknown ENDIAN type
+#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
+
+typedef struct _GTimeVal                GTimeVal;
+
+struct _GTimeVal
+{
+  glong tv_sec;
+  glong tv_usec;
+};
+
+G_END_DECLS
+
+/* We prefix variable declarations so they can
+ * properly get exported in Windows DLLs.
+ */
+#ifndef GLIB_VAR
+#  ifdef G_PLATFORM_WIN32
+#    ifdef GLIB_STATIC_COMPILATION
+#      define GLIB_VAR extern
+#    else /* !GLIB_STATIC_COMPILATION */
+#      ifdef GLIB_COMPILATION
+#        ifdef DLL_EXPORT
+#          define GLIB_VAR __declspec(dllexport)
+#        else /* !DLL_EXPORT */
+#          define GLIB_VAR extern
+#        endif /* !DLL_EXPORT */
+#      else /* !GLIB_COMPILATION */
+#        define GLIB_VAR extern __declspec(dllimport)
+#      endif /* !GLIB_COMPILATION */
+#    endif /* !GLIB_STATIC_COMPILATION */
+#  else /* !G_PLATFORM_WIN32 */
+#    define GLIB_VAR extern
+#  endif /* !G_PLATFORM_WIN32 */
+#endif /* GLIB_VAR */
+
+#endif /* __G_TYPES_H__ */
diff --git a/glib/gunibreak.h b/glib/gunibreak.h
new file mode 100644
index 0000000..504ac47
--- /dev/null
+++ b/glib/gunibreak.h
@@ -0,0 +1,17919 @@
+/* This file is automatically generated.  DO NOT EDIT!
+   Instead, edit gen-unicode-tables.pl and re-run.  */
+
+#ifndef BREAKTABLES_H
+#define BREAKTABLES_H
+
+#define G_UNICODE_DATA_VERSION "5.1.0"
+
+#define G_UNICODE_LAST_CHAR 0x10FFFF
+
+#define G_UNICODE_MAX_TABLE_INDEX 10000
+
+/* the last code point that should be looked up in break_property_table_part1 */
+#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF
+
+static const gint8 break_property_data[][256] = {
+  { /* page 0, index 0 */
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_LINE_FEED, G_UNICODE_BREAK_MANDATORY, 
+    G_UNICODE_BREAK_MANDATORY, G_UNICODE_BREAK_CARRIAGE_RETURN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_SPACE, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_HYPHEN, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_SYMBOL, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_INFIX_SEPARATOR, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_NEXT_LINE, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 2, index 1 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 3, index 2 */
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 4, index 3 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 5, index 4 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_INFIX_SEPARATOR, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 6, index 5 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_INFIX_SEPARATOR, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 7, index 6 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 9, index 7 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 10, index 8 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 11, index 9 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 12, index 10 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 13, index 11 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 14, index 12 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 15, index 13 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 16, index 14 */
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 17, index 15 */
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_L_JAMO, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_HANGUL_L_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_HANGUL_V_JAMO, 
+    G_UNICODE_BREAK_HANGUL_V_JAMO, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_HANGUL_T_JAMO, G_UNICODE_BREAK_HANGUL_T_JAMO, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 18, index 16 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 19, index 17 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 20, index 18 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 22, index 19 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 23, index 20 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 24, index 21 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 25, index 22 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMPLEX_CONTEXT, G_UNICODE_BREAK_COMPLEX_CONTEXT, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 26, index 23 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 27, index 24 */
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 28, index 25 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 29, index 26 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK
+  },
+  { /* page 31, index 27 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 32, index 28 */
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_NON_BREAKING_GLUE, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ZERO_WIDTH_SPACE, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_BEFORE_AND_AFTER, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_INSEPARABLE, 
+    G_UNICODE_BREAK_INSEPARABLE, G_UNICODE_BREAK_INSEPARABLE, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_MANDATORY, 
+    G_UNICODE_BREAK_MANDATORY, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_NON_BREAKING_GLUE, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_INFIX_SEPARATOR, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_WORD_JOINER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 33, index 29 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 34, index 30 */
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 35, index 31 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 36, index 32 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 37, index 33 */
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 38, index 34 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 39, index 35 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_AMBIGUOUS, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 41, index 36 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 43, index 37 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 44, index 38 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_AFTER
+  },
+  { /* page 45, index 39 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK
+  },
+  { /* page 46, index 40 */
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_QUOTATION, 
+    G_UNICODE_BREAK_QUOTATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 47, index 41 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 48, index 42 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_IDEOGRAPHIC
+  },
+  { /* page 49, index 43 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER
+  },
+  { /* page 50, index 44 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 77, index 45 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 159, index 46 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 160, index 47 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC
+  },
+  { /* page 164, index 48 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 166, index 49 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 167, index 50 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 168, index 51 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_BEFORE, G_UNICODE_BREAK_BEFORE, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 169, index 52 */
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 170, index 53 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 172, index 54 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 173, index 55 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 174, index 56 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 175, index 57 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 176, index 58 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 177, index 59 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 178, index 60 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 179, index 61 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 180, index 62 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 181, index 63 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 182, index 64 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 183, index 65 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 184, index 66 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 185, index 67 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 186, index 68 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 187, index 69 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 188, index 70 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 189, index 71 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 190, index 72 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 191, index 73 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 192, index 74 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 193, index 75 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 194, index 76 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 195, index 77 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 196, index 78 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 197, index 79 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 198, index 80 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 199, index 81 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 200, index 82 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 201, index 83 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 202, index 84 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 203, index 85 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 204, index 86 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 205, index 87 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 206, index 88 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 207, index 89 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 208, index 90 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 209, index 91 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 210, index 92 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 211, index 93 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 212, index 94 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 213, index 95 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 214, index 96 */
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+  },
+  { /* page 215, index 97 */
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LV_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 250, index 98 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 251, index 99 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 253, index 100 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 254, index 101 */
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_INFIX_SEPARATOR, 
+    G_UNICODE_BREAK_INFIX_SEPARATOR, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_INSEPARABLE, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_EXCLAMATION, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_WORD_JOINER
+  },
+  { /* page 255, index 102 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_POSTFIX, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_EXCLAMATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_OPEN_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_OPEN_PUNCTUATION, G_UNICODE_BREAK_CLOSE_PUNCTUATION, 
+    G_UNICODE_BREAK_CLOSE_PUNCTUATION, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_NON_STARTER, G_UNICODE_BREAK_NON_STARTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_POSTFIX, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_PREFIX, 
+    G_UNICODE_BREAK_PREFIX, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_CONTINGENT, G_UNICODE_BREAK_AMBIGUOUS, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 256, index 103 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 257, index 104 */
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 258, index 105 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 259, index 106 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 260, index 107 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 264, index 108 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 265, index 109 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 266, index 110 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 291, index 111 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 292, index 112 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, G_UNICODE_BREAK_AFTER, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 464, index 113 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 465, index 114 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 466, index 115 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 467, index 116 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 468, index 117 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 469, index 118 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 470, index 119 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC
+  },
+  { /* page 471, index 120 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC, 
+    G_UNICODE_BREAK_NUMERIC, G_UNICODE_BREAK_NUMERIC
+  },
+  { /* page 496, index 121 */
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_ALPHABETIC, G_UNICODE_BREAK_ALPHABETIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 678, index 122 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 762, index 123 */
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_IDEOGRAPHIC, G_UNICODE_BREAK_IDEOGRAPHIC, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 3584, index 124 */
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  },
+  { /* page 3585, index 125 */
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_COMBINING_MARK, G_UNICODE_BREAK_COMBINING_MARK, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN, 
+    G_UNICODE_BREAK_UNKNOWN, G_UNICODE_BREAK_UNKNOWN
+  }
+};
+
+/* U+0000 through U+2FAFF */
+static const gint16 break_property_table_part1[763] = {
+  0 /* page 0 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  1 /* page 2 */,
+  2 /* page 3 */,
+  3 /* page 4 */,
+  4 /* page 5 */,
+  5 /* page 6 */,
+  6 /* page 7 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  7 /* page 9 */,
+  8 /* page 10 */,
+  9 /* page 11 */,
+  10 /* page 12 */,
+  11 /* page 13 */,
+  12 /* page 14 */,
+  13 /* page 15 */,
+  14 /* page 16 */,
+  15 /* page 17 */,
+  16 /* page 18 */,
+  17 /* page 19 */,
+  18 /* page 20 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  19 /* page 22 */,
+  20 /* page 23 */,
+  21 /* page 24 */,
+  22 /* page 25 */,
+  23 /* page 26 */,
+  24 /* page 27 */,
+  25 /* page 28 */,
+  26 /* page 29 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  27 /* page 31 */,
+  28 /* page 32 */,
+  29 /* page 33 */,
+  30 /* page 34 */,
+  31 /* page 35 */,
+  32 /* page 36 */,
+  33 /* page 37 */,
+  34 /* page 38 */,
+  35 /* page 39 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  36 /* page 41 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  37 /* page 43 */,
+  38 /* page 44 */,
+  39 /* page 45 */,
+  40 /* page 46 */,
+  41 /* page 47 */,
+  42 /* page 48 */,
+  43 /* page 49 */,
+  44 /* page 50 */,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  45 /* page 77 */,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  46 /* page 159 */,
+  47 /* page 160 */,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  48 /* page 164 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  49 /* page 166 */,
+  50 /* page 167 */,
+  51 /* page 168 */,
+  52 /* page 169 */,
+  53 /* page 170 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  54 /* page 172 */,
+  55 /* page 173 */,
+  56 /* page 174 */,
+  57 /* page 175 */,
+  58 /* page 176 */,
+  59 /* page 177 */,
+  60 /* page 178 */,
+  61 /* page 179 */,
+  62 /* page 180 */,
+  63 /* page 181 */,
+  64 /* page 182 */,
+  65 /* page 183 */,
+  66 /* page 184 */,
+  67 /* page 185 */,
+  68 /* page 186 */,
+  69 /* page 187 */,
+  70 /* page 188 */,
+  71 /* page 189 */,
+  72 /* page 190 */,
+  73 /* page 191 */,
+  74 /* page 192 */,
+  75 /* page 193 */,
+  76 /* page 194 */,
+  77 /* page 195 */,
+  78 /* page 196 */,
+  79 /* page 197 */,
+  80 /* page 198 */,
+  81 /* page 199 */,
+  82 /* page 200 */,
+  83 /* page 201 */,
+  84 /* page 202 */,
+  85 /* page 203 */,
+  86 /* page 204 */,
+  87 /* page 205 */,
+  88 /* page 206 */,
+  89 /* page 207 */,
+  90 /* page 208 */,
+  91 /* page 209 */,
+  92 /* page 210 */,
+  93 /* page 211 */,
+  94 /* page 212 */,
+  95 /* page 213 */,
+  96 /* page 214 */,
+  97 /* page 215 */,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  98 /* page 250 */,
+  99 /* page 251 */,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  100 /* page 253 */,
+  101 /* page 254 */,
+  102 /* page 255 */,
+  103 /* page 256 */,
+  104 /* page 257 */,
+  105 /* page 258 */,
+  106 /* page 259 */,
+  107 /* page 260 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  108 /* page 264 */,
+  109 /* page 265 */,
+  110 /* page 266 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_ALPHABETIC + G_UNICODE_MAX_TABLE_INDEX,
+  111 /* page 291 */,
+  112 /* page 292 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  113 /* page 464 */,
+  114 /* page 465 */,
+  115 /* page 466 */,
+  116 /* page 467 */,
+  117 /* page 468 */,
+  118 /* page 469 */,
+  119 /* page 470 */,
+  120 /* page 471 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  121 /* page 496 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  122 /* page 678 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_IDEOGRAPHIC + G_UNICODE_MAX_TABLE_INDEX,
+  123 /* page 762 */
+};
+
+/* U+E0000 through U+10FFFF */
+static const gint16 break_property_table_part2[768] = {
+  124 /* page 3584 */,
+  125 /* page 3585 */,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_BREAK_UNKNOWN + G_UNICODE_MAX_TABLE_INDEX
+};
+
+#endif /* BREAKTABLES_H */
diff --git a/glib/gunichartables.h b/glib/gunichartables.h
new file mode 100644
index 0000000..044a44f
--- /dev/null
+++ b/glib/gunichartables.h
@@ -0,0 +1,13060 @@
+/* This file is automatically generated.  DO NOT EDIT!
+   Instead, edit gen-unicode-tables.pl and re-run.  */
+
+#ifndef CHARTABLES_H
+#define CHARTABLES_H
+
+#define G_UNICODE_DATA_VERSION "5.1.0"
+
+#define G_UNICODE_LAST_CHAR 0x10ffff
+
+#define G_UNICODE_MAX_TABLE_INDEX 10000
+
+#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF
+
+#define G_UNICODE_LAST_PAGE_PART1 762
+
+static const char type_data[][256] = {
+  { /* page 0, index 0 */
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL, 
+    G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_FORMAT, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_FINAL_PUNCTUATION, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 1, index 1 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 2, index 2 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL
+  },
+  { /* page 3, index 3 */
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER
+  },
+  { /* page 4, index 4 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 5, index 5 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 6, index 6 */
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_FORMAT, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_LETTER
+  },
+  { /* page 7, index 7 */
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 9, index 8 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 10, index 9 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 11, index 10 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 12, index 11 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 13, index 12 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 14, index 13 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 15, index 14 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 16, index 15 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 17, index 16 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 18, index 17 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER
+  },
+  { /* page 19, index 18 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 20, index 19 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER
+  },
+  { /* page 22, index 20 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 23, index 21 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 24, index 22 */
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 25, index 23 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL
+  },
+  { /* page 26, index 24 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 27, index 25 */
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 28, index 26 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 29, index 27 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK
+  },
+  { /* page 30, index 28 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 31, index 29 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED
+  },
+  { /* page 32, index 30 */
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_LINE_SEPARATOR, G_UNICODE_PARAGRAPH_SEPARATOR, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_OTHER_NUMBER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 33, index 31 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL
+  },
+  { /* page 35, index 32 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 36, index 33 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER
+  },
+  { /* page 37, index 34 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL
+  },
+  { /* page 38, index 35 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 39, index 36 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL
+  },
+  { /* page 41, index 37 */
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL
+  },
+  { /* page 43, index 38 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 44, index 39 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION
+  },
+  { /* page 45, index 40 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK
+  },
+  { /* page 46, index 41 */
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION, 
+    G_UNICODE_FINAL_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 47, index 42 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 48, index 43 */
+    G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_LETTER
+  },
+  { /* page 49, index 44 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER
+  },
+  { /* page 50, index 45 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 77, index 46 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL
+  },
+  { /* page 159, index 47 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 160, index 48 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER
+  },
+  { /* page 164, index 49 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 166, index 50 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK, 
+    G_UNICODE_ENCLOSING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 167, index 51 */
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER
+  },
+  { /* page 168, index 52 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 169, index 53 */
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 170, index 54 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 215, index 55 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 250, index 56 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 251, index 57 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER
+  },
+  { /* page 253, index 58 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 254, index 59 */
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION, 
+    G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_DASH_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT
+  },
+  { /* page 255, index 60 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION, 
+    G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 256, index 61 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 257, index 62 */
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 258, index 63 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 259, index 64 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 260, index 65 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 264, index 66 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 265, index 67 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 266, index 68 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 291, index 69 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 292, index 70 */
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, 
+    G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION, 
+    G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 464, index 71 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 465, index 72 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, 
+    G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 466, index 73 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 467, index 74 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 468, index 75 */
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 469, index 76 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 470, index 77 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER
+  },
+  { /* page 471, index 78 */
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, 
+    G_UNICODE_DECIMAL_NUMBER
+  },
+  { /* page 496, index 79 */
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, 
+    G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 678, index 80 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 762, index 81 */
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 3584, index 82 */
+    G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+  },
+  { /* page 3585, index 83 */
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 4095, index 84 */
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  },
+  { /* page 4351, index 85 */
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, 
+    G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED, 
+    G_UNICODE_UNASSIGNED
+  }
+};
+
+/* U+0000 through U+2FAFF */
+static const gint16 type_table_part1[763] = {
+  0 /* page 0 */,
+  1 /* page 1 */,
+  2 /* page 2 */,
+  3 /* page 3 */,
+  4 /* page 4 */,
+  5 /* page 5 */,
+  6 /* page 6 */,
+  7 /* page 7 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  8 /* page 9 */,
+  9 /* page 10 */,
+  10 /* page 11 */,
+  11 /* page 12 */,
+  12 /* page 13 */,
+  13 /* page 14 */,
+  14 /* page 15 */,
+  15 /* page 16 */,
+  16 /* page 17 */,
+  17 /* page 18 */,
+  18 /* page 19 */,
+  19 /* page 20 */,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  20 /* page 22 */,
+  21 /* page 23 */,
+  22 /* page 24 */,
+  23 /* page 25 */,
+  24 /* page 26 */,
+  25 /* page 27 */,
+  26 /* page 28 */,
+  27 /* page 29 */,
+  28 /* page 30 */,
+  29 /* page 31 */,
+  30 /* page 32 */,
+  31 /* page 33 */,
+  G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+  32 /* page 35 */,
+  33 /* page 36 */,
+  34 /* page 37 */,
+  35 /* page 38 */,
+  36 /* page 39 */,
+  G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+  37 /* page 41 */,
+  G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+  38 /* page 43 */,
+  39 /* page 44 */,
+  40 /* page 45 */,
+  41 /* page 46 */,
+  42 /* page 47 */,
+  43 /* page 48 */,
+  44 /* page 49 */,
+  45 /* page 50 */,
+  G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  46 /* page 77 */,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  47 /* page 159 */,
+  48 /* page 160 */,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  49 /* page 164 */,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  50 /* page 166 */,
+  51 /* page 167 */,
+  52 /* page 168 */,
+  53 /* page 169 */,
+  54 /* page 170 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  55 /* page 215 */,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  56 /* page 250 */,
+  57 /* page 251 */,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  58 /* page 253 */,
+  59 /* page 254 */,
+  60 /* page 255 */,
+  61 /* page 256 */,
+  62 /* page 257 */,
+  63 /* page 258 */,
+  64 /* page 259 */,
+  65 /* page 260 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  66 /* page 264 */,
+  67 /* page 265 */,
+  68 /* page 266 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  69 /* page 291 */,
+  70 /* page 292 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  71 /* page 464 */,
+  72 /* page 465 */,
+  73 /* page 466 */,
+  74 /* page 467 */,
+  75 /* page 468 */,
+  76 /* page 469 */,
+  77 /* page 470 */,
+  78 /* page 471 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  79 /* page 496 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  80 /* page 678 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+  81 /* page 762 */
+};
+
+/* U+E0000 through U+10FFFF */
+static const gint16 type_table_part2[768] = {
+  82 /* page 3584 */,
+  83 /* page 3585 */,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  84 /* page 4095 */,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+  85 /* page 4351 */
+};
+
+static const gunichar attr_data[][256] = {
+  { /* page 0, index 0 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 
+    0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 
+    0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 
+    0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042, 
+    0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 
+    0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 
+    0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 
+    0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 
+    0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000, 
+    0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000, 
+    0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 
+    0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 
+    0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da, 
+    0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178
+  },
+  { /* page 1, index 1 */
+    0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109, 
+    0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110, 
+    0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b, 
+    0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122, 
+    0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d, 
+    0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135, 
+    0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e, 
+    0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145, 
+    0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f, 
+    0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156, 
+    0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161, 
+    0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168, 
+    0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173, 
+    0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c, 
+    0x017b, 0x017e, 0x017d, 0x0053, 0x0243, 0x0253, 0x0183, 0x0182, 0x0185, 
+    0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000, 
+    0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269, 
+    0x0268, 0x0199, 0x0198, 0x023d, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275, 
+    0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7, 
+    0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a, 
+    0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000, 
+    0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca, 
+    0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6, 
+    0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df, 
+    0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6, 
+    0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee, 
+    0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf, 
+    0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe
+  },
+  { /* page 2, index 2 */
+    0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209, 
+    0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210, 
+    0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b, 
+    0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222, 
+    0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d, 
+    0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x2c65, 0x023c, 0x023b, 0x019a, 0x2c66, 
+    0x0000, 0x0000, 0x0242, 0x0241, 0x0180, 0x0289, 0x028c, 0x0247, 0x0246, 
+    0x0249, 0x0248, 0x024b, 0x024a, 0x024d, 0x024c, 0x024f, 0x024e, 0x2c6f, 
+    0x2c6d, 0x0000, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f, 
+    0x0000, 0x0190, 0x0000, 0x0000, 0x0000, 0x0000, 0x0193, 0x0000, 0x0000, 
+    0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0197, 0x0196, 0x0000, 0x2c62, 
+    0x0000, 0x0000, 0x0000, 0x019c, 0x0000, 0x2c6e, 0x019d, 0x0000, 0x0000, 
+    0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c64, 
+    0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x01ae, 0x0244, 0x01b1, 0x01b2, 0x0245, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 3, index 3 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0371, 0x0370, 0x0373, 0x0372, 0x0000, 
+    0x0000, 0x0377, 0x0376, 0x0000, 0x0000, 0x0000, 0x03fd, 0x03fe, 0x03ff, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac, 
+    0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce, 
+    0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 
+    0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 
+    0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 
+    0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391, 
+    0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 
+    0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3, 
+    0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c, 
+    0x038e, 0x038f, 0x03d7, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6, 
+    0x03a0, 0x03cf, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df, 
+    0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6, 
+    0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a, 
+    0x03a1, 0x03f9, 0x0000, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2, 
+    0x03fb, 0x03fa, 0x0000, 0x037b, 0x037c, 0x037d
+  },
+  { /* page 4, index 4 */
+    0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 
+    0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431, 
+    0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 
+    0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 
+    0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 
+    0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 
+    0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 
+    0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+    0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400, 
+    0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 
+    0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463, 
+    0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a, 
+    0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475, 
+    0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c, 
+    0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e, 
+    0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499, 
+    0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0, 
+    0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab, 
+    0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2, 
+    0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd, 
+    0x04bc, 0x04bf, 0x04be, 0x04cf, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6, 
+    0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd, 
+    0x04c0, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6, 
+    0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1, 
+    0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8, 
+    0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3, 
+    0x04f2, 0x04f5, 0x04f4, 0x04f7, 0x04f6, 0x04f9, 0x04f8, 0x04fb, 0x04fa, 
+    0x04fd, 0x04fc, 0x04ff, 0x04fe
+  },
+  { /* page 5, index 5 */
+    0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509, 
+    0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0511, 0x0510, 
+    0x0513, 0x0512, 0x0515, 0x0514, 0x0517, 0x0516, 0x0519, 0x0518, 0x051b, 
+    0x051a, 0x051d, 0x051c, 0x051f, 0x051e, 0x0521, 0x0520, 0x0523, 0x0522, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 
+    0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 
+    0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, 
+    0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580, 
+    0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532, 
+    0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b, 
+    0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, 
+    0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d, 
+    0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, 
+    0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 6, index 6 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 
+    0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 
+    0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 7, index 7 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 9, index 8 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 10, index 9 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 11, index 10 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 12, index 11 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 13, index 12 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 14, index 13 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+    0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 15, index 14 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 16, index 15 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+    0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 
+    0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d00, 0x2d01, 
+    0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, 0x2d0a, 
+    0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d12, 0x2d13, 
+    0x2d14, 0x2d15, 0x2d16, 0x2d17, 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c, 
+    0x2d1d, 0x2d1e, 0x2d1f, 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 23, index 16 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 24, index 17 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 
+    0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 25, index 18 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 
+    0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+    0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 27, index 19 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 28, index 20 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+    0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 29, index 21 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0xa77d, 0x0000, 0x0000, 0x0000, 0x2c63, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 30, index 22 */
+    0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09, 
+    0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10, 
+    0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b, 
+    0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22, 
+    0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d, 
+    0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34, 
+    0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f, 
+    0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46, 
+    0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51, 
+    0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58, 
+    0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63, 
+    0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a, 
+    0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75, 
+    0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c, 
+    0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87, 
+    0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e, 
+    0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf, 
+    0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x00df, 0x0000, 
+    0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9, 
+    0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0, 
+    0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb, 
+    0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2, 
+    0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd, 
+    0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4, 
+    0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf, 
+    0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6, 
+    0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1, 
+    0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8, 
+    0x1efb, 0x1efa, 0x1efd, 0x1efc, 0x1eff, 0x1efe
+  },
+  { /* page 31, index 23 */
+    0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00, 
+    0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19, 
+    0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12, 
+    0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b, 
+    0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 
+    0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d, 
+    0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 
+    0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000, 
+    0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000, 
+    0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c, 
+    0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57, 
+    0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60, 
+    0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb, 
+    0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea, 
+    0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1, 
+    0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f, 
+    0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b, 
+    0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3, 
+    0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb, 
+    0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327, 
+    0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375, 
+    0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7, 
+    0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df, 
+    0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 
+    0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4, 
+    0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 
+    0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140, 
+    0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178, 
+    0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 
+    0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409, 
+    0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 
+    0x1000415, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 33, index 24 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x214e, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2132, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2184, 0x2183, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 44, index 25 */
+    0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38, 
+    0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40, 0x2c41, 
+    0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, 0x2c4a, 
+    0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c52, 0x2c53, 
+    0x2c54, 0x2c55, 0x2c56, 0x2c57, 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 
+    0x2c5d, 0x2c5e, 0x0000, 0x2c00, 0x2c01, 0x2c02, 0x2c03, 0x2c04, 0x2c05, 
+    0x2c06, 0x2c07, 0x2c08, 0x2c09, 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0d, 0x2c0e, 
+    0x2c0f, 0x2c10, 0x2c11, 0x2c12, 0x2c13, 0x2c14, 0x2c15, 0x2c16, 0x2c17, 
+    0x2c18, 0x2c19, 0x2c1a, 0x2c1b, 0x2c1c, 0x2c1d, 0x2c1e, 0x2c1f, 0x2c20, 
+    0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c27, 0x2c28, 0x2c29, 
+    0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x0000, 0x2c61, 0x2c60, 0x026b, 
+    0x1d7d, 0x027d, 0x023a, 0x023e, 0x2c68, 0x2c67, 0x2c6a, 0x2c69, 0x2c6c, 
+    0x2c6b, 0x0251, 0x0271, 0x0250, 0x0000, 0x0000, 0x2c73, 0x2c72, 0x0000, 
+    0x2c76, 0x2c75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x2c81, 0x2c80, 0x2c83, 0x2c82, 0x2c85, 0x2c84, 0x2c87, 
+    0x2c86, 0x2c89, 0x2c88, 0x2c8b, 0x2c8a, 0x2c8d, 0x2c8c, 0x2c8f, 0x2c8e, 
+    0x2c91, 0x2c90, 0x2c93, 0x2c92, 0x2c95, 0x2c94, 0x2c97, 0x2c96, 0x2c99, 
+    0x2c98, 0x2c9b, 0x2c9a, 0x2c9d, 0x2c9c, 0x2c9f, 0x2c9e, 0x2ca1, 0x2ca0, 
+    0x2ca3, 0x2ca2, 0x2ca5, 0x2ca4, 0x2ca7, 0x2ca6, 0x2ca9, 0x2ca8, 0x2cab, 
+    0x2caa, 0x2cad, 0x2cac, 0x2caf, 0x2cae, 0x2cb1, 0x2cb0, 0x2cb3, 0x2cb2, 
+    0x2cb5, 0x2cb4, 0x2cb7, 0x2cb6, 0x2cb9, 0x2cb8, 0x2cbb, 0x2cba, 0x2cbd, 
+    0x2cbc, 0x2cbf, 0x2cbe, 0x2cc1, 0x2cc0, 0x2cc3, 0x2cc2, 0x2cc5, 0x2cc4, 
+    0x2cc7, 0x2cc6, 0x2cc9, 0x2cc8, 0x2ccb, 0x2cca, 0x2ccd, 0x2ccc, 0x2ccf, 
+    0x2cce, 0x2cd1, 0x2cd0, 0x2cd3, 0x2cd2, 0x2cd5, 0x2cd4, 0x2cd7, 0x2cd6, 
+    0x2cd9, 0x2cd8, 0x2cdb, 0x2cda, 0x2cdd, 0x2cdc, 0x2cdf, 0x2cde, 0x2ce1, 
+    0x2ce0, 0x2ce3, 0x2ce2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 45, index 26 */
+    0x10a0, 0x10a1, 0x10a2, 0x10a3, 0x10a4, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 
+    0x10a9, 0x10aa, 0x10ab, 0x10ac, 0x10ad, 0x10ae, 0x10af, 0x10b0, 0x10b1, 
+    0x10b2, 0x10b3, 0x10b4, 0x10b5, 0x10b6, 0x10b7, 0x10b8, 0x10b9, 0x10ba, 
+    0x10bb, 0x10bc, 0x10bd, 0x10be, 0x10bf, 0x10c0, 0x10c1, 0x10c2, 0x10c3, 
+    0x10c4, 0x10c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 166, index 27 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 
+    0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0xa641, 0xa640, 0xa643, 0xa642, 0xa645, 0xa644, 0xa647, 0xa646, 
+    0xa649, 0xa648, 0xa64b, 0xa64a, 0xa64d, 0xa64c, 0xa64f, 0xa64e, 0xa651, 
+    0xa650, 0xa653, 0xa652, 0xa655, 0xa654, 0xa657, 0xa656, 0xa659, 0xa658, 
+    0xa65b, 0xa65a, 0xa65d, 0xa65c, 0xa65f, 0xa65e, 0x0000, 0x0000, 0xa663, 
+    0xa662, 0xa665, 0xa664, 0xa667, 0xa666, 0xa669, 0xa668, 0xa66b, 0xa66a, 
+    0xa66d, 0xa66c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0xa681, 0xa680, 0xa683, 0xa682, 0xa685, 0xa684, 0xa687, 
+    0xa686, 0xa689, 0xa688, 0xa68b, 0xa68a, 0xa68d, 0xa68c, 0xa68f, 0xa68e, 
+    0xa691, 0xa690, 0xa693, 0xa692, 0xa695, 0xa694, 0xa697, 0xa696, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 167, index 28 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa723, 0xa722, 
+    0xa725, 0xa724, 0xa727, 0xa726, 0xa729, 0xa728, 0xa72b, 0xa72a, 0xa72d, 
+    0xa72c, 0xa72f, 0xa72e, 0x0000, 0x0000, 0xa733, 0xa732, 0xa735, 0xa734, 
+    0xa737, 0xa736, 0xa739, 0xa738, 0xa73b, 0xa73a, 0xa73d, 0xa73c, 0xa73f, 
+    0xa73e, 0xa741, 0xa740, 0xa743, 0xa742, 0xa745, 0xa744, 0xa747, 0xa746, 
+    0xa749, 0xa748, 0xa74b, 0xa74a, 0xa74d, 0xa74c, 0xa74f, 0xa74e, 0xa751, 
+    0xa750, 0xa753, 0xa752, 0xa755, 0xa754, 0xa757, 0xa756, 0xa759, 0xa758, 
+    0xa75b, 0xa75a, 0xa75d, 0xa75c, 0xa75f, 0xa75e, 0xa761, 0xa760, 0xa763, 
+    0xa762, 0xa765, 0xa764, 0xa767, 0xa766, 0xa769, 0xa768, 0xa76b, 0xa76a, 
+    0xa76d, 0xa76c, 0xa76f, 0xa76e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0xa77a, 0xa779, 0xa77c, 0xa77b, 0x1d79, 
+    0xa77f, 0xa77e, 0xa781, 0xa780, 0xa783, 0xa782, 0xa785, 0xa784, 0xa787, 
+    0xa786, 0x0000, 0x0000, 0x0000, 0xa78c, 0xa78b, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 168, index 29 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+    0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 169, index 30 */
+    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 
+    0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 170, index 31 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 251, index 32 */
+    0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036, 
+    0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065, 
+    0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000
+  },
+  { /* page 255, index 33 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 
+    0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43, 
+    0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 
+    0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 
+    0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 
+    0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 
+    0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 
+    0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 260, index 34 */
+    0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f, 
+    0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, 
+    0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f, 
+    0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, 
+    0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f, 
+    0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 
+    0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 
+    0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 
+    0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, 
+    0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+  },
+  { /* page 471, index 35 */
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 
+    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 
+    0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 
+    0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 
+    0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 
+    0x0006, 0x0007, 0x0008, 0x0009
+  }
+};
+
+/* U+0000 through U+2FAFF */
+static const gint16 attr_table_part1[763] = {
+  0 /* page 0 */,
+  1 /* page 1 */,
+  2 /* page 2 */,
+  3 /* page 3 */,
+  4 /* page 4 */,
+  5 /* page 5 */,
+  6 /* page 6 */,
+  7 /* page 7 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  8 /* page 9 */,
+  9 /* page 10 */,
+  10 /* page 11 */,
+  11 /* page 12 */,
+  12 /* page 13 */,
+  13 /* page 14 */,
+  14 /* page 15 */,
+  15 /* page 16 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  16 /* page 23 */,
+  17 /* page 24 */,
+  18 /* page 25 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  19 /* page 27 */,
+  20 /* page 28 */,
+  21 /* page 29 */,
+  22 /* page 30 */,
+  23 /* page 31 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  24 /* page 33 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  25 /* page 44 */,
+  26 /* page 45 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  27 /* page 166 */,
+  28 /* page 167 */,
+  29 /* page 168 */,
+  30 /* page 169 */,
+  31 /* page 170 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  32 /* page 251 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  33 /* page 255 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  34 /* page 260 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  35 /* page 471 */,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX
+};
+
+/* U+E0000 through U+10FFFF */
+static const gint16 attr_table_part2[768] = {
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+  0x0000 + G_UNICODE_MAX_TABLE_INDEX
+};
+
+static const gunichar title_table[][3] = {
+  { 0x01c5, 0x01c4, 0x01c6 },
+  { 0x01c8, 0x01c7, 0x01c9 },
+  { 0x01cb, 0x01ca, 0x01cc },
+  { 0x01f2, 0x01f1, 0x01f3 },
+  { 0x1f88, 0x0000, 0x1f80 },
+  { 0x1f89, 0x0000, 0x1f81 },
+  { 0x1f8a, 0x0000, 0x1f82 },
+  { 0x1f8b, 0x0000, 0x1f83 },
+  { 0x1f8c, 0x0000, 0x1f84 },
+  { 0x1f8d, 0x0000, 0x1f85 },
+  { 0x1f8e, 0x0000, 0x1f86 },
+  { 0x1f8f, 0x0000, 0x1f87 },
+  { 0x1f98, 0x0000, 0x1f90 },
+  { 0x1f99, 0x0000, 0x1f91 },
+  { 0x1f9a, 0x0000, 0x1f92 },
+  { 0x1f9b, 0x0000, 0x1f93 },
+  { 0x1f9c, 0x0000, 0x1f94 },
+  { 0x1f9d, 0x0000, 0x1f95 },
+  { 0x1f9e, 0x0000, 0x1f96 },
+  { 0x1f9f, 0x0000, 0x1f97 },
+  { 0x1fa8, 0x0000, 0x1fa0 },
+  { 0x1fa9, 0x0000, 0x1fa1 },
+  { 0x1faa, 0x0000, 0x1fa2 },
+  { 0x1fab, 0x0000, 0x1fa3 },
+  { 0x1fac, 0x0000, 0x1fa4 },
+  { 0x1fad, 0x0000, 0x1fa5 },
+  { 0x1fae, 0x0000, 0x1fa6 },
+  { 0x1faf, 0x0000, 0x1fa7 },
+  { 0x1fbc, 0x0000, 0x1fb3 },
+  { 0x1fcc, 0x0000, 0x1fc3 },
+  { 0x1ffc, 0x0000, 0x1ff3 }
+};
+
+
+/* Table of special cases for case conversion; each record contains
+ * First, the best single character mapping to lowercase if Lu, 
+ * and to uppercase if Ll, followed by the output mapping for the two cases 
+ * other than the case of the codepoint, in the order [Ll],[Lu],[Lt],
+ * encoded in UTF-8, separated and terminated by a null character.
+ */
+static const gchar special_case_table[] = {
+ "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */
+ "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */
+ "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */
+ "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */
+ "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */
+ "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */
+ "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */
+ "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */
+ "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */
+ "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */
+ "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */
+ "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */
+ "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */
+ "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */
+ "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */
+ "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */
+ "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */
+ "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */
+ "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */
+ "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */
+ "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */
+ "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */
+ "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */
+ "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */
+ "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */
+ "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */
+ "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */
+ "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */
+ "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */
+ "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */
+ "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */
+ "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */
+ "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */
+ "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */
+ "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */
+ "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */
+ "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */
+ "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */
+ "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */
+ "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */
+ "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */
+ "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */
+ "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */
+ "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */
+ "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */
+ "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */
+ "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */
+ "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */
+ "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */
+ "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */
+ "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */
+ "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */
+ "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */
+ "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */
+ "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */
+ "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */
+ "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */
+ "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */
+ "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */
+ "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */
+ "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */
+ "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */
+ "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */
+ "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */
+ "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */
+ "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */
+ "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */
+ "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */
+ "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */
+ "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */
+ "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */
+ "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */
+ "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */
+ "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */
+ "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */
+ "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */
+ "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */
+ "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */
+ "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */
+ "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */
+ "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */
+ "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */
+ "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */
+ "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */
+ "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */
+ "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */
+ "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */
+ "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */
+ "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */
+ "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */
+ "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */
+ "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */
+ "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */
+ "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */
+ "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */
+ "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */
+ "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */
+ "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */
+ "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */
+ "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */
+ "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */
+ "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */
+ "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */
+};
+
+
+/* Table of casefolding cases that can't be derived by lowercasing
+ */
+static const struct {
+  guint16 ch;
+  gchar data[7];
+} casefold_table[] = {
+  { 0x00b5, "\xce\xbc" },
+  { 0x00df, "\x73\x73" },
+  { 0x0130, "\x69\xcc\x87" },
+  { 0x0149, "\xca\xbc\x6e" },
+  { 0x017f, "\x73" },
+  { 0x01f0, "\x6a\xcc\x8c" },
+  { 0x0345, "\xce\xb9" },
+  { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" },
+  { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" },
+  { 0x03c2, "\xcf\x83" },
+  { 0x03d0, "\xce\xb2" },
+  { 0x03d1, "\xce\xb8" },
+  { 0x03d5, "\xcf\x86" },
+  { 0x03d6, "\xcf\x80" },
+  { 0x03f0, "\xce\xba" },
+  { 0x03f1, "\xcf\x81" },
+  { 0x03f5, "\xce\xb5" },
+  { 0x0587, "\xd5\xa5\xd6\x82" },
+  { 0x1e96, "\x68\xcc\xb1" },
+  { 0x1e97, "\x74\xcc\x88" },
+  { 0x1e98, "\x77\xcc\x8a" },
+  { 0x1e99, "\x79\xcc\x8a" },
+  { 0x1e9a, "\x61\xca\xbe" },
+  { 0x1e9b, "\xe1\xb9\xa1" },
+  { 0x1e9e, "\x73\x73" },
+  { 0x1f50, "\xcf\x85\xcc\x93" },
+  { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" },
+  { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" },
+  { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" },
+  { 0x1f80, "\xe1\xbc\x80\xce\xb9" },
+  { 0x1f81, "\xe1\xbc\x81\xce\xb9" },
+  { 0x1f82, "\xe1\xbc\x82\xce\xb9" },
+  { 0x1f83, "\xe1\xbc\x83\xce\xb9" },
+  { 0x1f84, "\xe1\xbc\x84\xce\xb9" },
+  { 0x1f85, "\xe1\xbc\x85\xce\xb9" },
+  { 0x1f86, "\xe1\xbc\x86\xce\xb9" },
+  { 0x1f87, "\xe1\xbc\x87\xce\xb9" },
+  { 0x1f88, "\xe1\xbc\x80\xce\xb9" },
+  { 0x1f89, "\xe1\xbc\x81\xce\xb9" },
+  { 0x1f8a, "\xe1\xbc\x82\xce\xb9" },
+  { 0x1f8b, "\xe1\xbc\x83\xce\xb9" },
+  { 0x1f8c, "\xe1\xbc\x84\xce\xb9" },
+  { 0x1f8d, "\xe1\xbc\x85\xce\xb9" },
+  { 0x1f8e, "\xe1\xbc\x86\xce\xb9" },
+  { 0x1f8f, "\xe1\xbc\x87\xce\xb9" },
+  { 0x1f90, "\xe1\xbc\xa0\xce\xb9" },
+  { 0x1f91, "\xe1\xbc\xa1\xce\xb9" },
+  { 0x1f92, "\xe1\xbc\xa2\xce\xb9" },
+  { 0x1f93, "\xe1\xbc\xa3\xce\xb9" },
+  { 0x1f94, "\xe1\xbc\xa4\xce\xb9" },
+  { 0x1f95, "\xe1\xbc\xa5\xce\xb9" },
+  { 0x1f96, "\xe1\xbc\xa6\xce\xb9" },
+  { 0x1f97, "\xe1\xbc\xa7\xce\xb9" },
+  { 0x1f98, "\xe1\xbc\xa0\xce\xb9" },
+  { 0x1f99, "\xe1\xbc\xa1\xce\xb9" },
+  { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" },
+  { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" },
+  { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" },
+  { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" },
+  { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" },
+  { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" },
+  { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" },
+  { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" },
+  { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" },
+  { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" },
+  { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" },
+  { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" },
+  { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" },
+  { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" },
+  { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" },
+  { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" },
+  { 0x1faa, "\xe1\xbd\xa2\xce\xb9" },
+  { 0x1fab, "\xe1\xbd\xa3\xce\xb9" },
+  { 0x1fac, "\xe1\xbd\xa4\xce\xb9" },
+  { 0x1fad, "\xe1\xbd\xa5\xce\xb9" },
+  { 0x1fae, "\xe1\xbd\xa6\xce\xb9" },
+  { 0x1faf, "\xe1\xbd\xa7\xce\xb9" },
+  { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" },
+  { 0x1fb3, "\xce\xb1\xce\xb9" },
+  { 0x1fb4, "\xce\xac\xce\xb9" },
+  { 0x1fb6, "\xce\xb1\xcd\x82" },
+  { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" },
+  { 0x1fbc, "\xce\xb1\xce\xb9" },
+  { 0x1fbe, "\xce\xb9" },
+  { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" },
+  { 0x1fc3, "\xce\xb7\xce\xb9" },
+  { 0x1fc4, "\xce\xae\xce\xb9" },
+  { 0x1fc6, "\xce\xb7\xcd\x82" },
+  { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" },
+  { 0x1fcc, "\xce\xb7\xce\xb9" },
+  { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" },
+  { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" },
+  { 0x1fd6, "\xce\xb9\xcd\x82" },
+  { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" },
+  { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" },
+  { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" },
+  { 0x1fe4, "\xcf\x81\xcc\x93" },
+  { 0x1fe6, "\xcf\x85\xcd\x82" },
+  { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" },
+  { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" },
+  { 0x1ff3, "\xcf\x89\xce\xb9" },
+  { 0x1ff4, "\xcf\x8e\xce\xb9" },
+  { 0x1ff6, "\xcf\x89\xcd\x82" },
+  { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" },
+  { 0x1ffc, "\xcf\x89\xce\xb9" },
+  { 0x2160, "\xe2\x85\xb0" },
+  { 0x2161, "\xe2\x85\xb1" },
+  { 0x2162, "\xe2\x85\xb2" },
+  { 0x2163, "\xe2\x85\xb3" },
+  { 0x2164, "\xe2\x85\xb4" },
+  { 0x2165, "\xe2\x85\xb5" },
+  { 0x2166, "\xe2\x85\xb6" },
+  { 0x2167, "\xe2\x85\xb7" },
+  { 0x2168, "\xe2\x85\xb8" },
+  { 0x2169, "\xe2\x85\xb9" },
+  { 0x216a, "\xe2\x85\xba" },
+  { 0x216b, "\xe2\x85\xbb" },
+  { 0x216c, "\xe2\x85\xbc" },
+  { 0x216d, "\xe2\x85\xbd" },
+  { 0x216e, "\xe2\x85\xbe" },
+  { 0x216f, "\xe2\x85\xbf" },
+  { 0x24b6, "\xe2\x93\x90" },
+  { 0x24b7, "\xe2\x93\x91" },
+  { 0x24b8, "\xe2\x93\x92" },
+  { 0x24b9, "\xe2\x93\x93" },
+  { 0x24ba, "\xe2\x93\x94" },
+  { 0x24bb, "\xe2\x93\x95" },
+  { 0x24bc, "\xe2\x93\x96" },
+  { 0x24bd, "\xe2\x93\x97" },
+  { 0x24be, "\xe2\x93\x98" },
+  { 0x24bf, "\xe2\x93\x99" },
+  { 0x24c0, "\xe2\x93\x9a" },
+  { 0x24c1, "\xe2\x93\x9b" },
+  { 0x24c2, "\xe2\x93\x9c" },
+  { 0x24c3, "\xe2\x93\x9d" },
+  { 0x24c4, "\xe2\x93\x9e" },
+  { 0x24c5, "\xe2\x93\x9f" },
+  { 0x24c6, "\xe2\x93\xa0" },
+  { 0x24c7, "\xe2\x93\xa1" },
+  { 0x24c8, "\xe2\x93\xa2" },
+  { 0x24c9, "\xe2\x93\xa3" },
+  { 0x24ca, "\xe2\x93\xa4" },
+  { 0x24cb, "\xe2\x93\xa5" },
+  { 0x24cc, "\xe2\x93\xa6" },
+  { 0x24cd, "\xe2\x93\xa7" },
+  { 0x24ce, "\xe2\x93\xa8" },
+  { 0x24cf, "\xe2\x93\xa9" },
+  { 0xfb00, "\x66\x66" },
+  { 0xfb01, "\x66\x69" },
+  { 0xfb02, "\x66\x6c" },
+  { 0xfb03, "\x66\x66\x69" },
+  { 0xfb04, "\x66\x66\x6c" },
+  { 0xfb05, "\x73\x74" },
+  { 0xfb06, "\x73\x74" },
+  { 0xfb13, "\xd5\xb4\xd5\xb6" },
+  { 0xfb14, "\xd5\xb4\xd5\xa5" },
+  { 0xfb15, "\xd5\xb4\xd5\xab" },
+  { 0xfb16, "\xd5\xbe\xd5\xb6" },
+  { 0xfb17, "\xd5\xb4\xd5\xad" },
+};
+
+#endif /* CHARTABLES_H */
diff --git a/glib/gunicode.h b/glib/gunicode.h
new file mode 100644
index 0000000..78b259e
--- /dev/null
+++ b/glib/gunicode.h
@@ -0,0 +1,404 @@
+/* gunicode.h - Unicode manipulation functions
+ *
+ *  Copyright (C) 1999, 2000 Tom Tromey
+ *  Copyright 2000, 2005 Red Hat, Inc.
+ *
+ * The Gnome 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 of the
+ * License, or (at your option) any later version.
+ *
+ * The Gnome 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 the Gnome Library; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_UNICODE_H__
+#define __G_UNICODE_H__
+
+#include <glib/gerror.h>
+#include <glib/gtypes.h>
+
+G_BEGIN_DECLS
+
+typedef guint32 gunichar;
+typedef guint16 gunichar2;
+
+/* These are the possible character classifications.
+ * See http://www.unicode.org/Public/UNIDATA/UCD.html#General_Category_Values
+ */
+typedef enum
+{
+  G_UNICODE_CONTROL,
+  G_UNICODE_FORMAT,
+  G_UNICODE_UNASSIGNED,
+  G_UNICODE_PRIVATE_USE,
+  G_UNICODE_SURROGATE,
+  G_UNICODE_LOWERCASE_LETTER,
+  G_UNICODE_MODIFIER_LETTER,
+  G_UNICODE_OTHER_LETTER,
+  G_UNICODE_TITLECASE_LETTER,
+  G_UNICODE_UPPERCASE_LETTER,
+  G_UNICODE_COMBINING_MARK,
+  G_UNICODE_ENCLOSING_MARK,
+  G_UNICODE_NON_SPACING_MARK,
+  G_UNICODE_DECIMAL_NUMBER,
+  G_UNICODE_LETTER_NUMBER,
+  G_UNICODE_OTHER_NUMBER,
+  G_UNICODE_CONNECT_PUNCTUATION,
+  G_UNICODE_DASH_PUNCTUATION,
+  G_UNICODE_CLOSE_PUNCTUATION,
+  G_UNICODE_FINAL_PUNCTUATION,
+  G_UNICODE_INITIAL_PUNCTUATION,
+  G_UNICODE_OTHER_PUNCTUATION,
+  G_UNICODE_OPEN_PUNCTUATION,
+  G_UNICODE_CURRENCY_SYMBOL,
+  G_UNICODE_MODIFIER_SYMBOL,
+  G_UNICODE_MATH_SYMBOL,
+  G_UNICODE_OTHER_SYMBOL,
+  G_UNICODE_LINE_SEPARATOR,
+  G_UNICODE_PARAGRAPH_SEPARATOR,
+  G_UNICODE_SPACE_SEPARATOR
+} GUnicodeType;
+
+/* These are the possible line break classifications.
+ * Note that new types may be added in the future.
+ * Implementations may regard unknown values like G_UNICODE_BREAK_UNKNOWN
+ * See http://www.unicode.org/unicode/reports/tr14/
+ */
+typedef enum
+{
+  G_UNICODE_BREAK_MANDATORY,
+  G_UNICODE_BREAK_CARRIAGE_RETURN,
+  G_UNICODE_BREAK_LINE_FEED,
+  G_UNICODE_BREAK_COMBINING_MARK,
+  G_UNICODE_BREAK_SURROGATE,
+  G_UNICODE_BREAK_ZERO_WIDTH_SPACE,
+  G_UNICODE_BREAK_INSEPARABLE,
+  G_UNICODE_BREAK_NON_BREAKING_GLUE,
+  G_UNICODE_BREAK_CONTINGENT,
+  G_UNICODE_BREAK_SPACE,
+  G_UNICODE_BREAK_AFTER,
+  G_UNICODE_BREAK_BEFORE,
+  G_UNICODE_BREAK_BEFORE_AND_AFTER,
+  G_UNICODE_BREAK_HYPHEN,
+  G_UNICODE_BREAK_NON_STARTER,
+  G_UNICODE_BREAK_OPEN_PUNCTUATION,
+  G_UNICODE_BREAK_CLOSE_PUNCTUATION,
+  G_UNICODE_BREAK_QUOTATION,
+  G_UNICODE_BREAK_EXCLAMATION,
+  G_UNICODE_BREAK_IDEOGRAPHIC,
+  G_UNICODE_BREAK_NUMERIC,
+  G_UNICODE_BREAK_INFIX_SEPARATOR,
+  G_UNICODE_BREAK_SYMBOL,
+  G_UNICODE_BREAK_ALPHABETIC,
+  G_UNICODE_BREAK_PREFIX,
+  G_UNICODE_BREAK_POSTFIX,
+  G_UNICODE_BREAK_COMPLEX_CONTEXT,
+  G_UNICODE_BREAK_AMBIGUOUS,
+  G_UNICODE_BREAK_UNKNOWN,
+  G_UNICODE_BREAK_NEXT_LINE,
+  G_UNICODE_BREAK_WORD_JOINER,
+  G_UNICODE_BREAK_HANGUL_L_JAMO,
+  G_UNICODE_BREAK_HANGUL_V_JAMO,
+  G_UNICODE_BREAK_HANGUL_T_JAMO,
+  G_UNICODE_BREAK_HANGUL_LV_SYLLABLE,
+  G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+} GUnicodeBreakType;
+
+typedef enum 
+{                         /* ISO 15924 code */
+  G_UNICODE_SCRIPT_INVALID_CODE = -1,
+  G_UNICODE_SCRIPT_COMMON       = 0,   /* Zyyy */
+  G_UNICODE_SCRIPT_INHERITED,          /* Qaai */
+  G_UNICODE_SCRIPT_ARABIC,             /* Arab */
+  G_UNICODE_SCRIPT_ARMENIAN,           /* Armn */
+  G_UNICODE_SCRIPT_BENGALI,            /* Beng */
+  G_UNICODE_SCRIPT_BOPOMOFO,           /* Bopo */
+  G_UNICODE_SCRIPT_CHEROKEE,           /* Cher */
+  G_UNICODE_SCRIPT_COPTIC,             /* Qaac */
+  G_UNICODE_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
+  G_UNICODE_SCRIPT_DESERET,            /* Dsrt */
+  G_UNICODE_SCRIPT_DEVANAGARI,         /* Deva */
+  G_UNICODE_SCRIPT_ETHIOPIC,           /* Ethi */
+  G_UNICODE_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
+  G_UNICODE_SCRIPT_GOTHIC,             /* Goth */
+  G_UNICODE_SCRIPT_GREEK,              /* Grek */
+  G_UNICODE_SCRIPT_GUJARATI,           /* Gujr */
+  G_UNICODE_SCRIPT_GURMUKHI,           /* Guru */
+  G_UNICODE_SCRIPT_HAN,                /* Hani */
+  G_UNICODE_SCRIPT_HANGUL,             /* Hang */
+  G_UNICODE_SCRIPT_HEBREW,             /* Hebr */
+  G_UNICODE_SCRIPT_HIRAGANA,           /* Hira */
+  G_UNICODE_SCRIPT_KANNADA,            /* Knda */
+  G_UNICODE_SCRIPT_KATAKANA,           /* Kana */
+  G_UNICODE_SCRIPT_KHMER,              /* Khmr */
+  G_UNICODE_SCRIPT_LAO,                /* Laoo */
+  G_UNICODE_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
+  G_UNICODE_SCRIPT_MALAYALAM,          /* Mlym */
+  G_UNICODE_SCRIPT_MONGOLIAN,          /* Mong */
+  G_UNICODE_SCRIPT_MYANMAR,            /* Mymr */
+  G_UNICODE_SCRIPT_OGHAM,              /* Ogam */
+  G_UNICODE_SCRIPT_OLD_ITALIC,         /* Ital */
+  G_UNICODE_SCRIPT_ORIYA,              /* Orya */
+  G_UNICODE_SCRIPT_RUNIC,              /* Runr */
+  G_UNICODE_SCRIPT_SINHALA,            /* Sinh */
+  G_UNICODE_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
+  G_UNICODE_SCRIPT_TAMIL,              /* Taml */
+  G_UNICODE_SCRIPT_TELUGU,             /* Telu */
+  G_UNICODE_SCRIPT_THAANA,             /* Thaa */
+  G_UNICODE_SCRIPT_THAI,               /* Thai */
+  G_UNICODE_SCRIPT_TIBETAN,            /* Tibt */
+  G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
+  G_UNICODE_SCRIPT_YI,                 /* Yiii */
+  G_UNICODE_SCRIPT_TAGALOG,            /* Tglg */
+  G_UNICODE_SCRIPT_HANUNOO,            /* Hano */
+  G_UNICODE_SCRIPT_BUHID,              /* Buhd */
+  G_UNICODE_SCRIPT_TAGBANWA,           /* Tagb */
+
+  /* Unicode-4.0 additions */
+  G_UNICODE_SCRIPT_BRAILLE,            /* Brai */
+  G_UNICODE_SCRIPT_CYPRIOT,            /* Cprt */
+  G_UNICODE_SCRIPT_LIMBU,              /* Limb */
+  G_UNICODE_SCRIPT_OSMANYA,            /* Osma */
+  G_UNICODE_SCRIPT_SHAVIAN,            /* Shaw */
+  G_UNICODE_SCRIPT_LINEAR_B,           /* Linb */
+  G_UNICODE_SCRIPT_TAI_LE,             /* Tale */
+  G_UNICODE_SCRIPT_UGARITIC,           /* Ugar */
+      
+  /* Unicode-4.1 additions */
+  G_UNICODE_SCRIPT_NEW_TAI_LUE,        /* Talu */
+  G_UNICODE_SCRIPT_BUGINESE,           /* Bugi */
+  G_UNICODE_SCRIPT_GLAGOLITIC,         /* Glag */
+  G_UNICODE_SCRIPT_TIFINAGH,           /* Tfng */
+  G_UNICODE_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
+  G_UNICODE_SCRIPT_OLD_PERSIAN,        /* Xpeo */
+  G_UNICODE_SCRIPT_KHAROSHTHI,         /* Khar */
+
+  /* Unicode-5.0 additions */
+  G_UNICODE_SCRIPT_UNKNOWN,            /* Zzzz */
+  G_UNICODE_SCRIPT_BALINESE,           /* Bali */
+  G_UNICODE_SCRIPT_CUNEIFORM,          /* Xsux */
+  G_UNICODE_SCRIPT_PHOENICIAN,         /* Phnx */
+  G_UNICODE_SCRIPT_PHAGS_PA,           /* Phag */
+  G_UNICODE_SCRIPT_NKO,                /* Nkoo */
+
+  /* Unicode-5.1 additions */
+  G_UNICODE_SCRIPT_KAYAH_LI,           /* Kali */
+  G_UNICODE_SCRIPT_LEPCHA,             /* Lepc */
+  G_UNICODE_SCRIPT_REJANG,             /* Rjng */
+  G_UNICODE_SCRIPT_SUNDANESE,          /* Sund */
+  G_UNICODE_SCRIPT_SAURASHTRA,         /* Saur */
+  G_UNICODE_SCRIPT_CHAM,               /* Cham */
+  G_UNICODE_SCRIPT_OL_CHIKI,           /* Olck */
+  G_UNICODE_SCRIPT_VAI,                /* Vaii */
+  G_UNICODE_SCRIPT_CARIAN,             /* Cari */
+  G_UNICODE_SCRIPT_LYCIAN,             /* Lyci */
+  G_UNICODE_SCRIPT_LYDIAN              /* Lydi */
+} GUnicodeScript;
+
+/* Returns TRUE if current locale uses UTF-8 charset.  If CHARSET is
+ * not null, sets *CHARSET to the name of the current locale's
+ * charset.  This value is statically allocated, and should be copied
+ * in case the locale's charset will be changed later using setlocale()
+ * or in some other way.
+ */
+gboolean g_get_charset (G_CONST_RETURN char **charset);
+
+/* These are all analogs of the <ctype.h> functions.
+ */
+gboolean g_unichar_isalnum   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isalpha   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_iscntrl   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isdigit   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isgraph   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_islower   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isprint   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_ispunct   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isspace   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isupper   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isxdigit  (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_istitle   (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_isdefined (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_iswide    (gunichar c) G_GNUC_CONST;
+gboolean g_unichar_iswide_cjk(gunichar c) G_GNUC_CONST;
+gboolean g_unichar_iszerowidth(gunichar c) G_GNUC_CONST;
+gboolean g_unichar_ismark    (gunichar c) G_GNUC_CONST;
+
+/* More <ctype.h> functions.  These convert between the three cases.
+ * See the Unicode book to understand title case.  */
+gunichar g_unichar_toupper (gunichar c) G_GNUC_CONST;
+gunichar g_unichar_tolower (gunichar c) G_GNUC_CONST;
+gunichar g_unichar_totitle (gunichar c) G_GNUC_CONST;
+
+/* If C is a digit (according to `g_unichar_isdigit'), then return its
+   numeric value.  Otherwise return -1.  */
+gint g_unichar_digit_value (gunichar c) G_GNUC_CONST;
+
+gint g_unichar_xdigit_value (gunichar c) G_GNUC_CONST;
+
+/* Return the Unicode character type of a given character.  */
+GUnicodeType g_unichar_type (gunichar c) G_GNUC_CONST;
+
+/* Return the line break property for a given character */
+GUnicodeBreakType g_unichar_break_type (gunichar c) G_GNUC_CONST;
+
+/* Returns the combining class for a given character */
+gint g_unichar_combining_class (gunichar uc) G_GNUC_CONST;
+
+
+/* Compute canonical ordering of a string in-place.  This rearranges
+   decomposed characters in the string according to their combining
+   classes.  See the Unicode manual for more information.  */
+void g_unicode_canonical_ordering (gunichar *string,
+				   gsize     len);
+
+/* Compute canonical decomposition of a character.  Returns g_malloc()d
+   string of Unicode characters.  RESULT_LEN is set to the resulting
+   length of the string.  */
+gunichar *g_unicode_canonical_decomposition (gunichar  ch,
+					     gsize    *result_len) G_GNUC_MALLOC;
+
+/* Array of skip-bytes-per-initial character.
+ */
+GLIB_VAR const gchar * const g_utf8_skip;
+
+#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)])
+
+gunichar g_utf8_get_char           (const gchar  *p) G_GNUC_PURE;
+gunichar g_utf8_get_char_validated (const  gchar *p,
+				    gssize        max_len) G_GNUC_PURE;
+
+gchar*   g_utf8_offset_to_pointer (const gchar *str,
+                                   glong        offset) G_GNUC_PURE;
+glong    g_utf8_pointer_to_offset (const gchar *str,      
+				   const gchar *pos) G_GNUC_PURE;
+gchar*   g_utf8_prev_char         (const gchar *p) G_GNUC_PURE;
+gchar*   g_utf8_find_next_char    (const gchar *p,
+				   const gchar *end) G_GNUC_PURE;
+gchar*   g_utf8_find_prev_char    (const gchar *str,
+				   const gchar *p) G_GNUC_PURE;
+
+glong g_utf8_strlen (const gchar *p,  
+		     gssize       max) G_GNUC_PURE;
+
+/* Copies n characters from src to dest */
+gchar* g_utf8_strncpy (gchar       *dest,
+		       const gchar *src,
+		       gsize        n);
+
+/* Find the UTF-8 character corresponding to ch, in string p. These
+   functions are equivalants to strchr and strrchr */
+gchar* g_utf8_strchr  (const gchar *p,
+		       gssize       len,
+		       gunichar     c);
+gchar* g_utf8_strrchr (const gchar *p,
+		       gssize       len,
+		       gunichar     c);
+gchar* g_utf8_strreverse (const gchar *str,
+			  gssize len);
+
+gunichar2 *g_utf8_to_utf16     (const gchar      *str,
+				glong             len,            
+				glong            *items_read,     
+				glong            *items_written,  
+				GError          **error) G_GNUC_MALLOC;
+gunichar * g_utf8_to_ucs4      (const gchar      *str,
+				glong             len,            
+				glong            *items_read,     
+				glong            *items_written,  
+				GError          **error) G_GNUC_MALLOC;
+gunichar * g_utf8_to_ucs4_fast (const gchar      *str,
+				glong             len,            
+				glong            *items_written) G_GNUC_MALLOC; 
+gunichar * g_utf16_to_ucs4     (const gunichar2  *str,
+				glong             len,            
+				glong            *items_read,     
+				glong            *items_written,  
+				GError          **error) G_GNUC_MALLOC;
+gchar*     g_utf16_to_utf8     (const gunichar2  *str,
+				glong             len,            
+				glong            *items_read,     
+				glong            *items_written,  
+				GError          **error) G_GNUC_MALLOC;
+gunichar2 *g_ucs4_to_utf16     (const gunichar   *str,
+				glong             len,            
+				glong            *items_read,     
+				glong            *items_written,  
+				GError          **error) G_GNUC_MALLOC;
+gchar*     g_ucs4_to_utf8      (const gunichar   *str,
+				glong             len,            
+				glong            *items_read,     
+				glong            *items_written,  
+				GError          **error) G_GNUC_MALLOC;
+
+/* Convert a single character into UTF-8. outbuf must have at
+ * least 6 bytes of space. Returns the number of bytes in the
+ * result.
+ */
+gint      g_unichar_to_utf8 (gunichar    c,
+			     gchar      *outbuf);
+
+/* Validate a UTF8 string, return TRUE if valid, put pointer to
+ * first invalid char in **end
+ */
+
+gboolean g_utf8_validate (const gchar  *str,
+                          gssize        max_len,  
+                          const gchar **end);
+
+/* Validate a Unicode character */
+gboolean g_unichar_validate (gunichar ch) G_GNUC_CONST;
+
+gchar *g_utf8_strup   (const gchar *str,
+		       gssize       len) G_GNUC_MALLOC;
+gchar *g_utf8_strdown (const gchar *str,
+		       gssize       len) G_GNUC_MALLOC;
+gchar *g_utf8_casefold (const gchar *str,
+			gssize       len) G_GNUC_MALLOC;
+
+typedef enum {
+  G_NORMALIZE_DEFAULT,
+  G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT,
+  G_NORMALIZE_DEFAULT_COMPOSE,
+  G_NORMALIZE_NFC = G_NORMALIZE_DEFAULT_COMPOSE,
+  G_NORMALIZE_ALL,
+  G_NORMALIZE_NFKD = G_NORMALIZE_ALL,
+  G_NORMALIZE_ALL_COMPOSE,
+  G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE
+} GNormalizeMode;
+
+gchar *g_utf8_normalize (const gchar   *str,
+			 gssize         len,
+			 GNormalizeMode mode) G_GNUC_MALLOC;
+
+gint   g_utf8_collate     (const gchar *str1,
+			   const gchar *str2) G_GNUC_PURE;
+gchar *g_utf8_collate_key (const gchar *str,
+			   gssize       len) G_GNUC_MALLOC;
+gchar *g_utf8_collate_key_for_filename (const gchar *str,
+			                gssize       len) G_GNUC_MALLOC;
+
+gboolean g_unichar_get_mirror_char (gunichar ch,
+                                    gunichar *mirrored_ch);
+
+GUnicodeScript g_unichar_get_script (gunichar ch) G_GNUC_CONST;
+
+
+/* private */
+
+gchar *_g_utf8_make_valid (const gchar *name);
+
+G_END_DECLS
+
+#endif /* __G_UNICODE_H__ */
diff --git a/glib/gunicodeprivate.h b/glib/gunicodeprivate.h
new file mode 100644
index 0000000..70539d4
--- /dev/null
+++ b/glib/gunicodeprivate.h
@@ -0,0 +1,35 @@
+/* gunicodeprivate.h
+ *
+ * Copyright (C) 2003 Noah Levitt
+ *
+ * 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 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.
+ */
+
+#ifndef __G_UNICODE_PRIVATE_H__
+#define __G_UNICODE_PRIVATE_H__
+
+#include "glib.h"
+
+G_BEGIN_DECLS
+
+G_GNUC_INTERNAL gunichar *_g_utf8_normalize_wc
+				(const gchar    *str,
+				gssize          max_len,
+				GNormalizeMode  mode);
+
+G_END_DECLS
+
+#endif /* __G_UNICODE_PRIVATE_H__ */
diff --git a/glib/gunicomp.h b/glib/gunicomp.h
new file mode 100644
index 0000000..23a9087
--- /dev/null
+++ b/glib/gunicomp.h
@@ -0,0 +1,682 @@
+#define COMPOSE_FIRST_START 1
+#define COMPOSE_FIRST_SINGLE_START 147
+#define COMPOSE_SECOND_START 368
+#define COMPOSE_SECOND_SINGLE_START 399
+
+#define COMPOSE_TABLE_LAST 48
+
+static const guint16 compose_data[][256] = {
+  { /* page 0, index 0 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 148, 149, 0, 0, 1, 2, 3, 4, 5, 
+    150, 6, 7, 8, 151, 9, 10, 11, 12, 13, 14, 0, 15, 16, 17, 18, 19, 20, 21, 
+    22, 23, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 152, 29, 30, 31, 32, 33, 
+    34, 35, 36, 37, 38, 0, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 153, 154, 
+    50, 155, 0, 0, 51, 0, 0, 0, 0, 156, 0, 0, 0, 0, 52, 53, 157, 0, 158, 0, 
+    0, 0, 54, 0, 0, 0, 0, 0, 55, 0, 159, 160, 56, 161, 0, 0, 57, 0, 0, 0, 0, 
+    162, 0, 0, 0, 0, 58, 59, 163, 0, 164, 0, 0, 0, 60, 0, 0, 0
+  },
+  { /* page 1, index 1 */
+    0, 0, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 166, 0, 
+    0, 0, 0, 167, 168, 0, 0, 0, 0, 0, 0, 169, 170, 171, 172, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 
+    68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 174, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0
+  },
+  { /* page 2, index 2 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 0, 0, 0, 
+    181, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 3, index 3 */
+    368, 369, 370, 371, 372, 0, 373, 374, 375, 376, 377, 378, 379, 0, 0, 380, 
+    0, 381, 0, 382, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, 385, 
+    386, 387, 388, 389, 390, 0, 0, 0, 0, 391, 392, 0, 393, 394, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 395, 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 
+    72, 0, 73, 0, 74, 0, 0, 0, 0, 0, 75, 0, 184, 0, 0, 0, 76, 0, 0, 0, 77, 0, 
+    0, 185, 0, 186, 0, 0, 78, 0, 0, 0, 79, 0, 80, 0, 81, 0, 0, 0, 0, 0, 82, 
+    0, 83, 0, 0, 0, 84, 0, 0, 0, 85, 86, 87, 0, 0, 187, 0, 0, 0, 88, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 4, index 4 */
+    0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 189, 0, 90, 
+    91, 190, 92, 0, 191, 0, 0, 0, 192, 0, 0, 0, 0, 93, 0, 0, 0, 193, 0, 0, 0, 
+    194, 0, 195, 0, 0, 94, 0, 0, 196, 0, 95, 96, 197, 97, 0, 198, 0, 0, 0, 
+    199, 0, 0, 0, 0, 98, 0, 0, 0, 200, 0, 0, 0, 201, 0, 202, 0, 0, 0, 0, 0, 
+    0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 207, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 6, index 5 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    210, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 401, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 
+    0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 9, index 6 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 
+    216, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 
+    0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 11, index 7 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 
+    101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 406, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 407, 0, 0, 0, 0, 0, 0, 0, 102, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 12, index 8 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 
+    0, 0, 409, 0, 0, 0, 103, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 
+    411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 13, index 9 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 104, 
+    223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 105, 0, 0, 224, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 16, index 10 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 27, index 11 */
+    0, 0, 0, 0, 0, 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 0, 0, 231, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 0, 233, 0, 234, 235, 0, 0, 
+    236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 30, index 12 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 237, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 240, 0, 0, 
+    0, 0, 0, 0, 241, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 244, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 246, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 31, index 13 */
+    108, 109, 247, 248, 249, 250, 251, 252, 110, 111, 253, 254, 255, 256, 
+    257, 258, 112, 113, 0, 0, 0, 0, 0, 0, 114, 115, 0, 0, 0, 0, 0, 0, 116, 
+    117, 259, 260, 261, 262, 263, 264, 118, 119, 265, 266, 267, 268, 269, 
+    270, 120, 121, 0, 0, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 0, 0, 124, 125, 0, 
+    0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 0, 0, 0, 128, 129, 0, 0, 0, 0, 0, 0, 0, 
+    130, 0, 0, 0, 0, 0, 0, 131, 132, 271, 272, 273, 274, 275, 276, 133, 134, 
+    277, 278, 279, 280, 281, 282, 283, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 
+    285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 
+    0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 136, 0
+  },
+  { /* page 33, index 14 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    289, 0, 290, 0, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 293, 0, 
+    294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 34, index 15 */
+    0, 0, 0, 295, 0, 0, 0, 0, 296, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 299, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 301, 
+    0, 302, 0, 0, 303, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 308, 309, 0, 0, 310, 311, 0, 0, 312, 313, 314, 315, 0, 0, 0, 0, 
+    316, 317, 0, 0, 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, 321, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 323, 324, 0, 325, 
+    0, 0, 0, 0, 0, 0, 326, 327, 328, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 48, index 16 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 
+    0, 0, 0, 331, 0, 332, 0, 333, 0, 334, 0, 335, 0, 336, 0, 337, 0, 338, 0, 
+    339, 0, 340, 0, 341, 0, 342, 0, 0, 343, 0, 344, 0, 345, 0, 0, 0, 0, 0, 0, 
+    137, 0, 0, 138, 0, 0, 139, 0, 0, 140, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 398, 
+    0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 348, 0, 349, 0, 350, 
+    0, 351, 0, 352, 0, 353, 0, 354, 0, 355, 0, 356, 0, 357, 0, 358, 0, 359, 
+    0, 0, 360, 0, 361, 0, 362, 0, 0, 0, 0, 0, 0, 142, 0, 0, 143, 0, 0, 144, 
+    0, 0, 145, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 363, 364, 365, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0
+  }
+};
+
+static const gint16 compose_table[COMPOSE_TABLE_LAST + 1] = {
+  0 /* page 0 */,
+  1 /* page 1 */,
+  2 /* page 2 */,
+  3 /* page 3 */,
+  4 /* page 4 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  5 /* page 6 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  6 /* page 9 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  7 /* page 11 */,
+  8 /* page 12 */,
+  9 /* page 13 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  10 /* page 16 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  11 /* page 27 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  12 /* page 30 */,
+  13 /* page 31 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  14 /* page 33 */,
+  15 /* page 34 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  16 /* page 48 */
+};
+
+static const guint16 compose_first_single[][2] = {
+ { 0x0338, 0x226e },
+ { 0x0338, 0x2260 },
+ { 0x0338, 0x226f },
+ { 0x0307, 0x1e1e },
+ { 0x0302, 0x0134 },
+ { 0x0307, 0x1e1f },
+ { 0x0304, 0x01de },
+ { 0x0301, 0x01fa },
+ { 0x0301, 0x1e08 },
+ { 0x0301, 0x1e2e },
+ { 0x0304, 0x022a },
+ { 0x0301, 0x01fe },
+ { 0x0304, 0x01df },
+ { 0x0301, 0x01fb },
+ { 0x0301, 0x1e09 },
+ { 0x0301, 0x1e2f },
+ { 0x0304, 0x022b },
+ { 0x0301, 0x01ff },
+ { 0x0307, 0x1e64 },
+ { 0x0307, 0x1e65 },
+ { 0x0307, 0x1e66 },
+ { 0x0307, 0x1e67 },
+ { 0x0301, 0x1e78 },
+ { 0x0301, 0x1e79 },
+ { 0x0308, 0x1e7a },
+ { 0x0308, 0x1e7b },
+ { 0x0307, 0x1e9b },
+ { 0x030c, 0x01ee },
+ { 0x0304, 0x01ec },
+ { 0x0304, 0x01ed },
+ { 0x0304, 0x01e0 },
+ { 0x0304, 0x01e1 },
+ { 0x0306, 0x1e1c },
+ { 0x0306, 0x1e1d },
+ { 0x0304, 0x0230 },
+ { 0x0304, 0x0231 },
+ { 0x030c, 0x01ef },
+ { 0x0314, 0x1fec },
+ { 0x0345, 0x1fb4 },
+ { 0x0345, 0x1fc4 },
+ { 0x0345, 0x1ff4 },
+ { 0x0308, 0x0407 },
+ { 0x0301, 0x0403 },
+ { 0x0308, 0x04de },
+ { 0x0301, 0x040c },
+ { 0x0308, 0x04e6 },
+ { 0x0308, 0x04f4 },
+ { 0x0308, 0x04f8 },
+ { 0x0308, 0x04ec },
+ { 0x0301, 0x0453 },
+ { 0x0308, 0x04df },
+ { 0x0301, 0x045c },
+ { 0x0308, 0x04e7 },
+ { 0x0308, 0x04f5 },
+ { 0x0308, 0x04f9 },
+ { 0x0308, 0x04ed },
+ { 0x0308, 0x0457 },
+ { 0x030f, 0x0476 },
+ { 0x030f, 0x0477 },
+ { 0x0308, 0x04da },
+ { 0x0308, 0x04db },
+ { 0x0308, 0x04ea },
+ { 0x0308, 0x04eb },
+ { 0x0654, 0x0624 },
+ { 0x0654, 0x0626 },
+ { 0x0654, 0x06c2 },
+ { 0x0654, 0x06d3 },
+ { 0x0654, 0x06c0 },
+ { 0x093c, 0x0929 },
+ { 0x093c, 0x0931 },
+ { 0x093c, 0x0934 },
+ { 0x0bd7, 0x0b94 },
+ { 0x0bbe, 0x0bcb },
+ { 0x0c56, 0x0c48 },
+ { 0x0cd5, 0x0cc0 },
+ { 0x0cd5, 0x0ccb },
+ { 0x0d3e, 0x0d4b },
+ { 0x0dca, 0x0ddd },
+ { 0x102e, 0x1026 },
+ { 0x1b35, 0x1b06 },
+ { 0x1b35, 0x1b08 },
+ { 0x1b35, 0x1b0a },
+ { 0x1b35, 0x1b0c },
+ { 0x1b35, 0x1b0e },
+ { 0x1b35, 0x1b12 },
+ { 0x1b35, 0x1b3b },
+ { 0x1b35, 0x1b3d },
+ { 0x1b35, 0x1b40 },
+ { 0x1b35, 0x1b41 },
+ { 0x1b35, 0x1b43 },
+ { 0x0304, 0x1e38 },
+ { 0x0304, 0x1e39 },
+ { 0x0304, 0x1e5c },
+ { 0x0304, 0x1e5d },
+ { 0x0307, 0x1e68 },
+ { 0x0307, 0x1e69 },
+ { 0x0302, 0x1ec6 },
+ { 0x0302, 0x1ec7 },
+ { 0x0302, 0x1ed8 },
+ { 0x0302, 0x1ed9 },
+ { 0x0345, 0x1f82 },
+ { 0x0345, 0x1f83 },
+ { 0x0345, 0x1f84 },
+ { 0x0345, 0x1f85 },
+ { 0x0345, 0x1f86 },
+ { 0x0345, 0x1f87 },
+ { 0x0345, 0x1f8a },
+ { 0x0345, 0x1f8b },
+ { 0x0345, 0x1f8c },
+ { 0x0345, 0x1f8d },
+ { 0x0345, 0x1f8e },
+ { 0x0345, 0x1f8f },
+ { 0x0345, 0x1f92 },
+ { 0x0345, 0x1f93 },
+ { 0x0345, 0x1f94 },
+ { 0x0345, 0x1f95 },
+ { 0x0345, 0x1f96 },
+ { 0x0345, 0x1f97 },
+ { 0x0345, 0x1f9a },
+ { 0x0345, 0x1f9b },
+ { 0x0345, 0x1f9c },
+ { 0x0345, 0x1f9d },
+ { 0x0345, 0x1f9e },
+ { 0x0345, 0x1f9f },
+ { 0x0345, 0x1fa2 },
+ { 0x0345, 0x1fa3 },
+ { 0x0345, 0x1fa4 },
+ { 0x0345, 0x1fa5 },
+ { 0x0345, 0x1fa6 },
+ { 0x0345, 0x1fa7 },
+ { 0x0345, 0x1faa },
+ { 0x0345, 0x1fab },
+ { 0x0345, 0x1fac },
+ { 0x0345, 0x1fad },
+ { 0x0345, 0x1fae },
+ { 0x0345, 0x1faf },
+ { 0x0345, 0x1fb2 },
+ { 0x0345, 0x1fc2 },
+ { 0x0345, 0x1ff2 },
+ { 0x0345, 0x1fb7 },
+ { 0x0345, 0x1fc7 },
+ { 0x0345, 0x1ff7 },
+ { 0x0338, 0x219a },
+ { 0x0338, 0x219b },
+ { 0x0338, 0x21ae },
+ { 0x0338, 0x21cd },
+ { 0x0338, 0x21cf },
+ { 0x0338, 0x21ce },
+ { 0x0338, 0x2204 },
+ { 0x0338, 0x2209 },
+ { 0x0338, 0x220c },
+ { 0x0338, 0x2224 },
+ { 0x0338, 0x2226 },
+ { 0x0338, 0x2241 },
+ { 0x0338, 0x2244 },
+ { 0x0338, 0x2247 },
+ { 0x0338, 0x2249 },
+ { 0x0338, 0x226d },
+ { 0x0338, 0x2262 },
+ { 0x0338, 0x2270 },
+ { 0x0338, 0x2271 },
+ { 0x0338, 0x2274 },
+ { 0x0338, 0x2275 },
+ { 0x0338, 0x2278 },
+ { 0x0338, 0x2279 },
+ { 0x0338, 0x2280 },
+ { 0x0338, 0x2281 },
+ { 0x0338, 0x22e0 },
+ { 0x0338, 0x22e1 },
+ { 0x0338, 0x2284 },
+ { 0x0338, 0x2285 },
+ { 0x0338, 0x2288 },
+ { 0x0338, 0x2289 },
+ { 0x0338, 0x22e2 },
+ { 0x0338, 0x22e3 },
+ { 0x0338, 0x22ac },
+ { 0x0338, 0x22ad },
+ { 0x0338, 0x22ae },
+ { 0x0338, 0x22af },
+ { 0x0338, 0x22ea },
+ { 0x0338, 0x22eb },
+ { 0x0338, 0x22ec },
+ { 0x0338, 0x22ed },
+ { 0x3099, 0x3094 },
+ { 0x3099, 0x304c },
+ { 0x3099, 0x304e },
+ { 0x3099, 0x3050 },
+ { 0x3099, 0x3052 },
+ { 0x3099, 0x3054 },
+ { 0x3099, 0x3056 },
+ { 0x3099, 0x3058 },
+ { 0x3099, 0x305a },
+ { 0x3099, 0x305c },
+ { 0x3099, 0x305e },
+ { 0x3099, 0x3060 },
+ { 0x3099, 0x3062 },
+ { 0x3099, 0x3065 },
+ { 0x3099, 0x3067 },
+ { 0x3099, 0x3069 },
+ { 0x3099, 0x309e },
+ { 0x3099, 0x30f4 },
+ { 0x3099, 0x30ac },
+ { 0x3099, 0x30ae },
+ { 0x3099, 0x30b0 },
+ { 0x3099, 0x30b2 },
+ { 0x3099, 0x30b4 },
+ { 0x3099, 0x30b6 },
+ { 0x3099, 0x30b8 },
+ { 0x3099, 0x30ba },
+ { 0x3099, 0x30bc },
+ { 0x3099, 0x30be },
+ { 0x3099, 0x30c0 },
+ { 0x3099, 0x30c2 },
+ { 0x3099, 0x30c5 },
+ { 0x3099, 0x30c7 },
+ { 0x3099, 0x30c9 },
+ { 0x3099, 0x30f7 },
+ { 0x3099, 0x30f8 },
+ { 0x3099, 0x30f9 },
+ { 0x3099, 0x30fa },
+ { 0x3099, 0x30fe }
+};
+static const guint16 compose_second_single[][2] = {
+ { 0x0627, 0x0622 },
+ { 0x0627, 0x0623 },
+ { 0x0627, 0x0625 },
+ { 0x09c7, 0x09cb },
+ { 0x09c7, 0x09cc },
+ { 0x0b47, 0x0b4b },
+ { 0x0b47, 0x0b48 },
+ { 0x0b47, 0x0b4c },
+ { 0x0bc6, 0x0bca },
+ { 0x0bc6, 0x0bcc },
+ { 0x0cc6, 0x0cca },
+ { 0x0cc6, 0x0cc7 },
+ { 0x0cc6, 0x0cc8 },
+ { 0x0d46, 0x0d4a },
+ { 0x0d46, 0x0d4c },
+ { 0x0dd9, 0x0dda },
+ { 0x0dd9, 0x0ddc },
+ { 0x0dd9, 0x0dde }
+};
+static const guint16 compose_array[146][31] = {
+ { 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x0100, 0x0102, 0x0226, 0x00c4, 0x1ea2, 0x00c5,      0, 0x01cd, 0x0200, 0x0202,      0,      0,      0, 0x1ea0,      0, 0x1e00,      0,      0, 0x0104,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e02,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e04,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e06,      0,      0,      0,      0 },
+ {      0, 0x0106, 0x0108,      0,      0,      0, 0x010a,      0,      0,      0,      0, 0x010c,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x00c7,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e0a,      0,      0,      0,      0, 0x010e,      0,      0,      0,      0,      0, 0x1e0c,      0,      0,      0, 0x1e10,      0, 0x1e12,      0,      0, 0x1e0e,      0,      0,      0,      0 },
+ { 0x00c8, 0x00c9, 0x00ca, 0x1ebc, 0x0112, 0x0114, 0x0116, 0x00cb, 0x1eba,      0,      0, 0x011a, 0x0204, 0x0206,      0,      0,      0, 0x1eb8,      0,      0,      0, 0x0228, 0x0118, 0x1e18,      0, 0x1e1a,      0,      0,      0,      0,      0 },
+ {      0, 0x01f4, 0x011c,      0, 0x1e20, 0x011e, 0x0120,      0,      0,      0,      0, 0x01e6,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x0122,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0, 0x0124,      0,      0,      0, 0x1e22, 0x1e26,      0,      0,      0, 0x021e,      0,      0,      0,      0,      0, 0x1e24,      0,      0,      0, 0x1e28,      0,      0, 0x1e2a,      0,      0,      0,      0,      0,      0 },
+ { 0x00cc, 0x00cd, 0x00ce, 0x0128, 0x012a, 0x012c, 0x0130, 0x00cf, 0x1ec8,      0,      0, 0x01cf, 0x0208, 0x020a,      0,      0,      0, 0x1eca,      0,      0,      0,      0, 0x012e,      0,      0, 0x1e2c,      0,      0,      0,      0,      0 },
+ {      0, 0x1e30,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x01e8,      0,      0,      0,      0,      0, 0x1e32,      0,      0,      0, 0x0136,      0,      0,      0,      0, 0x1e34,      0,      0,      0,      0 },
+ {      0, 0x0139,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x013d,      0,      0,      0,      0,      0, 0x1e36,      0,      0,      0, 0x013b,      0, 0x1e3c,      0,      0, 0x1e3a,      0,      0,      0,      0 },
+ {      0, 0x1e3e,      0,      0,      0,      0, 0x1e40,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e42,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x01f8, 0x0143,      0, 0x00d1,      0,      0, 0x1e44,      0,      0,      0,      0, 0x0147,      0,      0,      0,      0,      0, 0x1e46,      0,      0,      0, 0x0145,      0, 0x1e4a,      0,      0, 0x1e48,      0,      0,      0,      0 },
+ { 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x014c, 0x014e, 0x022e, 0x00d6, 0x1ece,      0, 0x0150, 0x01d1, 0x020c, 0x020e,      0,      0, 0x01a0, 0x1ecc,      0,      0,      0,      0, 0x01ea,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x1e54,      0,      0,      0,      0, 0x1e56,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x0154,      0,      0,      0,      0, 0x1e58,      0,      0,      0,      0, 0x0158, 0x0210, 0x0212,      0,      0,      0, 0x1e5a,      0,      0,      0, 0x0156,      0,      0,      0,      0, 0x1e5e,      0,      0,      0,      0 },
+ {      0, 0x015a, 0x015c,      0,      0,      0, 0x1e60,      0,      0,      0,      0, 0x0160,      0,      0,      0,      0,      0, 0x1e62,      0,      0, 0x0218, 0x015e,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e6a,      0,      0,      0,      0, 0x0164,      0,      0,      0,      0,      0, 0x1e6c,      0,      0, 0x021a, 0x0162,      0, 0x1e70,      0,      0, 0x1e6e,      0,      0,      0,      0 },
+ { 0x00d9, 0x00da, 0x00db, 0x0168, 0x016a, 0x016c,      0, 0x00dc, 0x1ee6, 0x016e, 0x0170, 0x01d3, 0x0214, 0x0216,      0,      0, 0x01af, 0x1ee4, 0x1e72,      0,      0,      0, 0x0172, 0x1e76,      0, 0x1e74,      0,      0,      0,      0,      0 },
+ {      0,      0,      0, 0x1e7c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e7e,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1e80, 0x1e82, 0x0174,      0,      0,      0, 0x1e86, 0x1e84,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e88,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e8a, 0x1e8c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ef2, 0x00dd, 0x0176, 0x1ef8, 0x0232,      0, 0x1e8e, 0x0178, 0x1ef6,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ef4,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x0179, 0x1e90,      0,      0,      0, 0x017b,      0,      0,      0,      0, 0x017d,      0,      0,      0,      0,      0, 0x1e92,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e94,      0,      0,      0,      0 },
+ { 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x0101, 0x0103, 0x0227, 0x00e4, 0x1ea3, 0x00e5,      0, 0x01ce, 0x0201, 0x0203,      0,      0,      0, 0x1ea1,      0, 0x1e01,      0,      0, 0x0105,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e03,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e05,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e07,      0,      0,      0,      0 },
+ {      0, 0x0107, 0x0109,      0,      0,      0, 0x010b,      0,      0,      0,      0, 0x010d,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x00e7,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e0b,      0,      0,      0,      0, 0x010f,      0,      0,      0,      0,      0, 0x1e0d,      0,      0,      0, 0x1e11,      0, 0x1e13,      0,      0, 0x1e0f,      0,      0,      0,      0 },
+ { 0x00e8, 0x00e9, 0x00ea, 0x1ebd, 0x0113, 0x0115, 0x0117, 0x00eb, 0x1ebb,      0,      0, 0x011b, 0x0205, 0x0207,      0,      0,      0, 0x1eb9,      0,      0,      0, 0x0229, 0x0119, 0x1e19,      0, 0x1e1b,      0,      0,      0,      0,      0 },
+ {      0, 0x01f5, 0x011d,      0, 0x1e21, 0x011f, 0x0121,      0,      0,      0,      0, 0x01e7,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x0123,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0, 0x0125,      0,      0,      0, 0x1e23, 0x1e27,      0,      0,      0, 0x021f,      0,      0,      0,      0,      0, 0x1e25,      0,      0,      0, 0x1e29,      0,      0, 0x1e2b,      0, 0x1e96,      0,      0,      0,      0 },
+ { 0x00ec, 0x00ed, 0x00ee, 0x0129, 0x012b, 0x012d,      0, 0x00ef, 0x1ec9,      0,      0, 0x01d0, 0x0209, 0x020b,      0,      0,      0, 0x1ecb,      0,      0,      0,      0, 0x012f,      0,      0, 0x1e2d,      0,      0,      0,      0,      0 },
+ {      0,      0, 0x0135,      0,      0,      0,      0,      0,      0,      0,      0, 0x01f0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x1e31,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x01e9,      0,      0,      0,      0,      0, 0x1e33,      0,      0,      0, 0x0137,      0,      0,      0,      0, 0x1e35,      0,      0,      0,      0 },
+ {      0, 0x013a,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x013e,      0,      0,      0,      0,      0, 0x1e37,      0,      0,      0, 0x013c,      0, 0x1e3d,      0,      0, 0x1e3b,      0,      0,      0,      0 },
+ {      0, 0x1e3f,      0,      0,      0,      0, 0x1e41,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e43,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x01f9, 0x0144,      0, 0x00f1,      0,      0, 0x1e45,      0,      0,      0,      0, 0x0148,      0,      0,      0,      0,      0, 0x1e47,      0,      0,      0, 0x0146,      0, 0x1e4b,      0,      0, 0x1e49,      0,      0,      0,      0 },
+ { 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x014d, 0x014f, 0x022f, 0x00f6, 0x1ecf,      0, 0x0151, 0x01d2, 0x020d, 0x020f,      0,      0, 0x01a1, 0x1ecd,      0,      0,      0,      0, 0x01eb,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x1e55,      0,      0,      0,      0, 0x1e57,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x0155,      0,      0,      0,      0, 0x1e59,      0,      0,      0,      0, 0x0159, 0x0211, 0x0213,      0,      0,      0, 0x1e5b,      0,      0,      0, 0x0157,      0,      0,      0,      0, 0x1e5f,      0,      0,      0,      0 },
+ {      0, 0x015b, 0x015d,      0,      0,      0, 0x1e61,      0,      0,      0,      0, 0x0161,      0,      0,      0,      0,      0, 0x1e63,      0,      0, 0x0219, 0x015f,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e6b, 0x1e97,      0,      0,      0, 0x0165,      0,      0,      0,      0,      0, 0x1e6d,      0,      0, 0x021b, 0x0163,      0, 0x1e71,      0,      0, 0x1e6f,      0,      0,      0,      0 },
+ { 0x00f9, 0x00fa, 0x00fb, 0x0169, 0x016b, 0x016d,      0, 0x00fc, 0x1ee7, 0x016f, 0x0171, 0x01d4, 0x0215, 0x0217,      0,      0, 0x01b0, 0x1ee5, 0x1e73,      0,      0,      0, 0x0173, 0x1e77,      0, 0x1e75,      0,      0,      0,      0,      0 },
+ {      0,      0,      0, 0x1e7d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e7f,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1e81, 0x1e83, 0x0175,      0,      0,      0, 0x1e87, 0x1e85,      0, 0x1e98,      0,      0,      0,      0,      0,      0,      0, 0x1e89,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0, 0x1e8b, 0x1e8d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ef3, 0x00fd, 0x0177, 0x1ef9, 0x0233,      0, 0x1e8f, 0x00ff, 0x1ef7, 0x1e99,      0,      0,      0,      0,      0,      0,      0, 0x1ef5,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x017a, 0x1e91,      0,      0,      0, 0x017c,      0,      0,      0,      0, 0x017e,      0,      0,      0,      0,      0, 0x1e93,      0,      0,      0,      0,      0,      0,      0,      0, 0x1e95,      0,      0,      0,      0 },
+ { 0x1fed, 0x0385,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fc1,      0,      0,      0 },
+ { 0x1ea6, 0x1ea4,      0, 0x1eaa,      0,      0,      0,      0, 0x1ea8,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x01fc,      0,      0, 0x01e2,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ec0, 0x1ebe,      0, 0x1ec4,      0,      0,      0,      0, 0x1ec2,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ed2, 0x1ed0,      0, 0x1ed6,      0,      0,      0,      0, 0x1ed4,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x1e4c,      0,      0, 0x022c,      0,      0, 0x1e4e,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x01db, 0x01d7,      0,      0, 0x01d5,      0,      0,      0,      0,      0,      0, 0x01d9,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ea7, 0x1ea5,      0, 0x1eab,      0,      0,      0,      0, 0x1ea9,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x01fd,      0,      0, 0x01e3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ec1, 0x1ebf,      0, 0x1ec5,      0,      0,      0,      0, 0x1ec3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ed3, 0x1ed1,      0, 0x1ed7,      0,      0,      0,      0, 0x1ed5,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0, 0x1e4d,      0,      0, 0x022d,      0,      0, 0x1e4f,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x01dc, 0x01d8,      0,      0, 0x01d6,      0,      0,      0,      0,      0,      0, 0x01da,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1eb0, 0x1eae,      0, 0x1eb4,      0,      0,      0,      0, 0x1eb2,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1eb1, 0x1eaf,      0, 0x1eb5,      0,      0,      0,      0, 0x1eb3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1e14, 0x1e16,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1e15, 0x1e17,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1e50, 0x1e52,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1e51, 0x1e53,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1edc, 0x1eda,      0, 0x1ee0,      0,      0,      0,      0, 0x1ede,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ee2,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1edd, 0x1edb,      0, 0x1ee1,      0,      0,      0,      0, 0x1edf,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ee3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1eea, 0x1ee8,      0, 0x1eee,      0,      0,      0,      0, 0x1eec,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ef0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1eeb, 0x1ee9,      0, 0x1eef,      0,      0,      0,      0, 0x1eed,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ef1,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1fba, 0x0386,      0,      0, 0x1fb9, 0x1fb8,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f08, 0x1f09,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fbc,      0,      0 },
+ { 0x1fc8, 0x0388,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f18, 0x1f19,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1fca, 0x0389,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f28, 0x1f29,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fcc,      0,      0 },
+ { 0x1fda, 0x038a,      0,      0, 0x1fd9, 0x1fd8,      0, 0x03aa,      0,      0,      0,      0,      0,      0, 0x1f38, 0x1f39,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ff8, 0x038c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f48, 0x1f49,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1fea, 0x038e,      0,      0, 0x1fe9, 0x1fe8,      0, 0x03ab,      0,      0,      0,      0,      0,      0,      0, 0x1f59,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1ffa, 0x038f,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f68, 0x1f69,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ffc,      0,      0 },
+ { 0x1f70, 0x03ac,      0,      0, 0x1fb1, 0x1fb0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f00, 0x1f01,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fb6, 0x1fb3,      0,      0 },
+ { 0x1f72, 0x03ad,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f10, 0x1f11,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f74, 0x03ae,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f20, 0x1f21,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fc6, 0x1fc3,      0,      0 },
+ { 0x1f76, 0x03af,      0,      0, 0x1fd1, 0x1fd0,      0, 0x03ca,      0,      0,      0,      0,      0,      0, 0x1f30, 0x1f31,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fd6,      0,      0,      0 },
+ { 0x1f78, 0x03cc,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f40, 0x1f41,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fe4, 0x1fe5,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f7a, 0x03cd,      0,      0, 0x1fe1, 0x1fe0,      0, 0x03cb,      0,      0,      0,      0,      0,      0, 0x1f50, 0x1f51,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fe6,      0,      0,      0 },
+ { 0x1f7c, 0x03ce,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f60, 0x1f61,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1ff6, 0x1ff3,      0,      0 },
+ { 0x1fd2, 0x0390,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fd7,      0,      0,      0 },
+ { 0x1fe2, 0x03b0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fe7,      0,      0,      0 },
+ {      0, 0x03d3,      0,      0,      0,      0,      0, 0x03d4,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0, 0x04d0,      0, 0x04d2,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x0400,      0,      0,      0,      0, 0x04d6,      0, 0x0401,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0, 0x04c1,      0, 0x04dc,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x040d,      0,      0,      0, 0x04e2, 0x0419,      0, 0x04e4,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0, 0x04ee, 0x040e,      0, 0x04f0,      0,      0, 0x04f2,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0, 0x04d1,      0, 0x04d3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x0450,      0,      0,      0,      0, 0x04d7,      0, 0x0451,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0, 0x04c2,      0, 0x04dd,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x045d,      0,      0,      0, 0x04e3, 0x0439,      0, 0x04e5,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0, 0x04ef, 0x045e,      0, 0x04f1,      0,      0, 0x04f3,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0, 0x1eac,      0,      0, 0x1eb6,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ {      0,      0, 0x1ead,      0,      0, 0x1eb7,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f02, 0x1f04,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f06, 0x1f80,      0,      0 },
+ { 0x1f03, 0x1f05,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f07, 0x1f81,      0,      0 },
+ { 0x1f0a, 0x1f0c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f0e, 0x1f88,      0,      0 },
+ { 0x1f0b, 0x1f0d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f0f, 0x1f89,      0,      0 },
+ { 0x1f12, 0x1f14,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f13, 0x1f15,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f1a, 0x1f1c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f1b, 0x1f1d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f22, 0x1f24,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f26, 0x1f90,      0,      0 },
+ { 0x1f23, 0x1f25,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f27, 0x1f91,      0,      0 },
+ { 0x1f2a, 0x1f2c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f2e, 0x1f98,      0,      0 },
+ { 0x1f2b, 0x1f2d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f2f, 0x1f99,      0,      0 },
+ { 0x1f32, 0x1f34,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f36,      0,      0,      0 },
+ { 0x1f33, 0x1f35,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f37,      0,      0,      0 },
+ { 0x1f3a, 0x1f3c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f3e,      0,      0,      0 },
+ { 0x1f3b, 0x1f3d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f3f,      0,      0,      0 },
+ { 0x1f42, 0x1f44,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f43, 0x1f45,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f4a, 0x1f4c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f4b, 0x1f4d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 },
+ { 0x1f52, 0x1f54,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f56,      0,      0,      0 },
+ { 0x1f53, 0x1f55,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f57,      0,      0,      0 },
+ { 0x1f5b, 0x1f5d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f5f,      0,      0,      0 },
+ { 0x1f62, 0x1f64,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f66, 0x1fa0,      0,      0 },
+ { 0x1f63, 0x1f65,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f67, 0x1fa1,      0,      0 },
+ { 0x1f6a, 0x1f6c,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f6e, 0x1fa8,      0,      0 },
+ { 0x1f6b, 0x1f6d,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1f6f, 0x1fa9,      0,      0 },
+ { 0x1fcd, 0x1fce,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fcf,      0,      0,      0 },
+ { 0x1fdd, 0x1fde,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x1fdf,      0,      0,      0 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x3070, 0x3071 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x3073, 0x3074 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x3076, 0x3077 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x3079, 0x307a },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x307c, 0x307d },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x30d0, 0x30d1 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x30d3, 0x30d4 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x30d6, 0x30d7 },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x30d9, 0x30da },
+ {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0, 0x30dc, 0x30dd }
+};
diff --git a/glib/gunidecomp.c b/glib/gunidecomp.c
new file mode 100644
index 0000000..d0fa97e
--- /dev/null
+++ b/glib/gunidecomp.c
@@ -0,0 +1,535 @@
+/* decomp.c - Character decomposition.
+ *
+ *  Copyright (C) 1999, 2000 Tom Tromey
+ *  Copyright 2000 Red Hat, Inc.
+ *
+ * The Gnome 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 of the
+ * License, or (at your option) any later version.
+ *
+ * The Gnome 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 the Gnome Library; see the file COPYING.LIB.  If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ *   Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include "glib.h"
+#include "gunidecomp.h"
+#include "gunicomp.h"
+#include "gunicodeprivate.h"
+#include "galias.h"
+
+
+#define CC_PART1(Page, Char) \
+  ((combining_class_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+   ? (combining_class_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+   : (cclass_data[combining_class_table_part1[Page]][Char]))
+
+#define CC_PART2(Page, Char) \
+  ((combining_class_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+   ? (combining_class_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+   : (cclass_data[combining_class_table_part2[Page]][Char]))
+
+#define COMBINING_CLASS(Char) \
+  (((Char) <= G_UNICODE_LAST_CHAR_PART1) \
+   ? CC_PART1 ((Char) >> 8, (Char) & 0xff) \
+   : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \
+      ? CC_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
+      : 0))
+
+/**
+ * g_unichar_combining_class:
+ * @uc: a Unicode character
+ * 
+ * Determines the canonical combining class of a Unicode character.
+ * 
+ * Return value: the combining class of the character
+ *
+ * Since: 2.14
+ **/
+gint
+g_unichar_combining_class (gunichar uc)
+{
+  return COMBINING_CLASS (uc);
+}
+
+/* constants for hangul syllable [de]composition */
+#define SBase 0xAC00 
+#define LBase 0x1100 
+#define VBase 0x1161 
+#define TBase 0x11A7
+#define LCount 19 
+#define VCount 21
+#define TCount 28
+#define NCount (VCount * TCount)
+#define SCount (LCount * NCount)
+
+/**
+ * g_unicode_canonical_ordering:
+ * @string: a UCS-4 encoded string.
+ * @len: the maximum length of @string to use.
+ *
+ * Computes the canonical ordering of a string in-place.  
+ * This rearranges decomposed characters in the string 
+ * according to their combining classes.  See the Unicode 
+ * manual for more information. 
+ **/
+void
+g_unicode_canonical_ordering (gunichar *string,
+			      gsize     len)
+{
+  gsize i;
+  int swap = 1;
+
+  while (swap)
+    {
+      int last;
+      swap = 0;
+      last = COMBINING_CLASS (string[0]);
+      for (i = 0; i < len - 1; ++i)
+	{
+	  int next = COMBINING_CLASS (string[i + 1]);
+	  if (next != 0 && last > next)
+	    {
+	      gsize j;
+	      /* Percolate item leftward through string.  */
+	      for (j = i + 1; j > 0; --j)
+		{
+		  gunichar t;
+		  if (COMBINING_CLASS (string[j - 1]) <= next)
+		    break;
+		  t = string[j];
+		  string[j] = string[j - 1];
+		  string[j - 1] = t;
+		  swap = 1;
+		}
+	      /* We're re-entering the loop looking at the old
+		 character again.  */
+	      next = last;
+	    }
+	  last = next;
+	}
+    }
+}
+
+/* http://www.unicode.org/unicode/reports/tr15/#Hangul
+ * r should be null or have sufficient space. Calling with r == NULL will
+ * only calculate the result_len; however, a buffer with space for three
+ * characters will always be big enough. */
+static void
+decompose_hangul (gunichar s, 
+                  gunichar *r,
+                  gsize *result_len)
+{
+  gint SIndex = s - SBase;
+
+  /* not a hangul syllable */
+  if (SIndex < 0 || SIndex >= SCount)
+    {
+      if (r)
+        r[0] = s;
+      *result_len = 1;
+    }
+  else
+    {
+      gunichar L = LBase + SIndex / NCount;
+      gunichar V = VBase + (SIndex % NCount) / TCount;
+      gunichar T = TBase + SIndex % TCount;
+
+      if (r)
+        {
+          r[0] = L;
+          r[1] = V;
+        }
+
+      if (T != TBase) 
+        {
+          if (r)
+            r[2] = T;
+          *result_len = 3;
+        }
+      else
+        *result_len = 2;
+    }
+}
+
+/* returns a pointer to a null-terminated UTF-8 string */
+static const gchar *
+find_decomposition (gunichar ch,
+		    gboolean compat)
+{
+  int start = 0;
+  int end = G_N_ELEMENTS (decomp_table);
+  
+  if (ch >= decomp_table[start].ch &&
+      ch <= decomp_table[end - 1].ch)
+    {
+      while (TRUE)
+	{
+	  int half = (start + end) / 2;
+	  if (ch == decomp_table[half].ch)
+	    {
+	      int offset;
+
+	      if (compat)
+		{
+		  offset = decomp_table[half].compat_offset;
+		  if (offset == G_UNICODE_NOT_PRESENT_OFFSET)
+		    offset = decomp_table[half].canon_offset;
+		}
+	      else
+		{
+		  offset = decomp_table[half].canon_offset;
+		  if (offset == G_UNICODE_NOT_PRESENT_OFFSET)
+		    return NULL;
+		}
+	      
+	      return &(decomp_expansion_string[offset]);
+	    }
+	  else if (half == start)
+	    break;
+	  else if (ch > decomp_table[half].ch)
+	    start = half;
+	  else
+	    end = half;
+	}
+    }
+
+  return NULL;
+}
+
+/**
+ * g_unicode_canonical_decomposition:
+ * @ch: a Unicode character.
+ * @result_len: location to store the length of the return value.
+ *
+ * Computes the canonical decomposition of a Unicode character.  
+ * 
+ * Return value: a newly allocated string of Unicode characters.
+ *   @result_len is set to the resulting length of the string.
+ **/
+gunichar *
+g_unicode_canonical_decomposition (gunichar ch,
+				   gsize   *result_len)
+{
+  const gchar *decomp;
+  const gchar *p;
+  gunichar *r;
+
+  /* Hangul syllable */
+  if (ch >= 0xac00 && ch <= 0xd7a3)
+    {
+      decompose_hangul (ch, NULL, result_len);
+      r = g_malloc (*result_len * sizeof (gunichar));
+      decompose_hangul (ch, r, result_len);
+    }
+  else if ((decomp = find_decomposition (ch, FALSE)) != NULL)
+    {
+      /* Found it.  */
+      int i;
+      
+      *result_len = g_utf8_strlen (decomp, -1);
+      r = g_malloc (*result_len * sizeof (gunichar));
+      
+      for (p = decomp, i = 0; *p != '\0'; p = g_utf8_next_char (p), i++)
+        r[i] = g_utf8_get_char (p);
+    }
+  else
+    {
+      /* Not in our table.  */
+      r = g_malloc (sizeof (gunichar));
+      *r = ch;
+      *result_len = 1;
+    }
+
+  /* Supposedly following the Unicode 2.1.9 table means that the
+     decompositions come out in canonical order.  I haven't tested
+     this, but we rely on it here.  */
+  return r;
+}
+
+/* L,V => LV and LV,T => LVT  */
+static gboolean
+combine_hangul (gunichar a,
+                gunichar b,
+                gunichar *result)
+{
+  gint LIndex = a - LBase;
+  gint SIndex = a - SBase;
+
+  gint VIndex = b - VBase;
+  gint TIndex = b - TBase;
+
+  if (0 <= LIndex && LIndex < LCount
+      && 0 <= VIndex && VIndex < VCount)
+    {
+      *result = SBase + (LIndex * VCount + VIndex) * TCount;
+      return TRUE;
+    }
+  else if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0
+           && 0 < TIndex && TIndex < TCount)
+    {
+      *result = a + TIndex;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+#define CI(Page, Char) \
+  ((compose_table[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+   ? (compose_table[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+   : (compose_data[compose_table[Page]][Char]))
+
+#define COMPOSE_INDEX(Char) \
+     (((Char >> 8) > (COMPOSE_TABLE_LAST)) ? 0 : CI((Char) >> 8, (Char) & 0xff))
+
+static gboolean
+combine (gunichar  a,
+	 gunichar  b,
+	 gunichar *result)
+{
+  gushort index_a, index_b;
+
+  if (combine_hangul (a, b, result))
+    return TRUE;
+
+  index_a = COMPOSE_INDEX(a);
+
+  if (index_a >= COMPOSE_FIRST_SINGLE_START && index_a < COMPOSE_SECOND_START)
+    {
+      if (b == compose_first_single[index_a - COMPOSE_FIRST_SINGLE_START][0])
+	{
+	  *result = compose_first_single[index_a - COMPOSE_FIRST_SINGLE_START][1];
+	  return TRUE;
+	}
+      else
+        return FALSE;
+    }
+  
+  index_b = COMPOSE_INDEX(b);
+
+  if (index_b >= COMPOSE_SECOND_SINGLE_START)
+    {
+      if (a == compose_second_single[index_b - COMPOSE_SECOND_SINGLE_START][0])
+	{
+	  *result = compose_second_single[index_b - COMPOSE_SECOND_SINGLE_START][1];
+	  return TRUE;
+	}
+      else
+        return FALSE;
+    }
+
+  if (index_a >= COMPOSE_FIRST_START && index_a < COMPOSE_FIRST_SINGLE_START &&
+      index_b >= COMPOSE_SECOND_START && index_b < COMPOSE_SECOND_SINGLE_START)
+    {
+      gunichar res = compose_array[index_a - COMPOSE_FIRST_START][index_b - COMPOSE_SECOND_START];
+
+      if (res)
+	{
+	  *result = res;
+	  return TRUE;
+	}
+    }
+
+  return FALSE;
+}
+
+gunichar *
+_g_utf8_normalize_wc (const gchar    *str,
+		      gssize          max_len,
+		      GNormalizeMode  mode)
+{
+  gsize n_wc;
+  gunichar *wc_buffer;
+  const char *p;
+  gsize last_start;
+  gboolean do_compat = (mode == G_NORMALIZE_NFKC ||
+			mode == G_NORMALIZE_NFKD);
+  gboolean do_compose = (mode == G_NORMALIZE_NFC ||
+			 mode == G_NORMALIZE_NFKC);
+
+  n_wc = 0;
+  p = str;
+  while ((max_len < 0 || p < str + max_len) && *p)
+    {
+      const gchar *decomp;
+      gunichar wc = g_utf8_get_char (p);
+
+      if (wc >= 0xac00 && wc <= 0xd7a3)
+        {
+          gsize result_len;
+          decompose_hangul (wc, NULL, &result_len);
+          n_wc += result_len;
+        }
+      else 
+        {
+          decomp = find_decomposition (wc, do_compat);
+
+          if (decomp)
+            n_wc += g_utf8_strlen (decomp, -1);
+          else
+            n_wc++;
+        }
+
+      p = g_utf8_next_char (p);
+    }
+
+  wc_buffer = g_new (gunichar, n_wc + 1);
+
+  last_start = 0;
+  n_wc = 0;
+  p = str;
+  while ((max_len < 0 || p < str + max_len) && *p)
+    {
+      gunichar wc = g_utf8_get_char (p);
+      const gchar *decomp;
+      int cc;
+      gsize old_n_wc = n_wc;
+	  
+      if (wc >= 0xac00 && wc <= 0xd7a3)
+        {
+          gsize result_len;
+          decompose_hangul (wc, wc_buffer + n_wc, &result_len);
+          n_wc += result_len;
+        }
+      else
+        {
+          decomp = find_decomposition (wc, do_compat);
+          
+          if (decomp)
+            {
+              const char *pd;
+              for (pd = decomp; *pd != '\0'; pd = g_utf8_next_char (pd))
+                wc_buffer[n_wc++] = g_utf8_get_char (pd);
+            }
+          else
+            wc_buffer[n_wc++] = wc;
+        }
+
+      if (n_wc > 0)
+	{
+	  cc = COMBINING_CLASS (wc_buffer[old_n_wc]);
+
+	  if (cc == 0)
+	    {
+	      g_unicode_canonical_ordering (wc_buffer + last_start, n_wc - last_start);
+	      last_start = old_n_wc;
+	    }
+	}
+      
+      p = g_utf8_next_char (p);
+    }
+
+  if (n_wc > 0)
+    {
+      g_unicode_canonical_ordering (wc_buffer + last_start, n_wc - last_start);
+      last_start = n_wc;
+    }
+	  
+  wc_buffer[n_wc] = 0;
+
+  /* All decomposed and reordered */ 
+
+  if (do_compose && n_wc > 0)
+    {
+      gsize i, j;
+      int last_cc = 0;
+      last_start = 0;
+      
+      for (i = 0; i < n_wc; i++)
+	{
+	  int cc = COMBINING_CLASS (wc_buffer[i]);
+
+	  if (i > 0 &&
+	      (last_cc == 0 || last_cc < cc) &&
+	      combine (wc_buffer[last_start], wc_buffer[i],
+		       &wc_buffer[last_start]))
+	    {
+	      for (j = i + 1; j < n_wc; j++)
+		wc_buffer[j-1] = wc_buffer[j];
+	      n_wc--;
+	      i--;
+	      
+	      if (i == last_start)
+		last_cc = 0;
+	      else
+		last_cc = COMBINING_CLASS (wc_buffer[i-1]);
+	      
+	      continue;
+	    }
+
+	  if (cc == 0)
+	    last_start = i;
+
+	  last_cc = cc;
+	}
+    }
+
+  wc_buffer[n_wc] = 0;
+
+  return wc_buffer;
+}
+
+/**
+ * g_utf8_normalize:
+ * @str: a UTF-8 encoded string.
+ * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
+ * @mode: the type of normalization to perform.
+ *
+ * Converts a string into canonical form, standardizing
+ * such issues as whether a character with an accent
+ * is represented as a base character and combining
+ * accent or as a single precomposed character. The
+ * string has to be valid UTF-8, otherwise %NULL is
+ * returned. You should generally call g_utf8_normalize()
+ * before comparing two Unicode strings.
+ *
+ * The normalization mode %G_NORMALIZE_DEFAULT only
+ * standardizes differences that do not affect the
+ * text content, such as the above-mentioned accent
+ * representation. %G_NORMALIZE_ALL also standardizes
+ * the "compatibility" characters in Unicode, such
+ * as SUPERSCRIPT THREE to the standard forms
+ * (in this case DIGIT THREE). Formatting information
+ * may be lost but for most text operations such
+ * characters should be considered the same.
+ *
+ * %G_NORMALIZE_DEFAULT_COMPOSE and %G_NORMALIZE_ALL_COMPOSE
+ * are like %G_NORMALIZE_DEFAULT and %G_NORMALIZE_ALL,
+ * but returned a result with composed forms rather
+ * than a maximally decomposed form. This is often
+ * useful if you intend to convert the string to
+ * a legacy encoding or pass it to a system with
+ * less capable Unicode handling.
+ *
+ * Return value: a newly allocated string, that is the
+ *   normalized form of @str, or %NULL if @str is not
+ *   valid UTF-8.
+ **/
+gchar *
+g_utf8_normalize (const gchar    *str,
+		  gssize          len,
+		  GNormalizeMode  mode)
+{
+  gunichar *result_wc = _g_utf8_normalize_wc (str, len, mode);
+  gchar *result;
+
+  result = g_ucs4_to_utf8 (result_wc, -1, NULL, NULL, NULL);
+  g_free (result_wc);
+
+  return result;
+}
+
+#define __G_UNIDECOMP_C__
+#include "galiasdef.c"
diff --git a/glib/gunidecomp.h b/glib/gunidecomp.h
new file mode 100644
index 0000000..135d107
--- /dev/null
+++ b/glib/gunidecomp.h
@@ -0,0 +1,10870 @@
+/* This file is automatically generated.  DO NOT EDIT! */
+
+#ifndef DECOMP_H
+#define DECOMP_H
+
+#define G_UNICODE_LAST_CHAR 0x10ffff
+
+#define G_UNICODE_MAX_TABLE_INDEX (0x110000 / 256)
+
+#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF
+
+#define G_UNICODE_LAST_PAGE_PART1 762
+
+#define G_UNICODE_NOT_PRESENT_OFFSET 65535
+
+static const guchar cclass_data[][256] = {
+  { /* page 3, index 0 */
+    230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 
+    230, 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216, 
+    220, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220, 
+    220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220, 
+    220, 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220, 
+    220, 220, 230, 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220, 
+    230, 232, 220, 220, 230, 233, 234, 234, 233, 234, 234, 233, 230, 230, 
+    230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 4, index 1 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 5, index 2 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 220, 230, 230, 230, 230, 220, 230, 230, 230, 222, 220, 230, 230, 230, 
+    230, 230, 230, 220, 220, 220, 220, 220, 220, 230, 230, 220, 230, 230, 
+    222, 228, 230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 
+    23, 0, 24, 25, 0, 230, 220, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 6, index 3 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 
+    230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220, 220, 
+    230, 230, 230, 230, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 
+    0, 230, 230, 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230, 230, 220, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 7, index 4 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, 220, 230, 
+    220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 
+    220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 9, index 5 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 10, index 6 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 11, index 7 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 12, index 8 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 13, index 9 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 14, index 10 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 15, index 11 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, 
+    132, 0, 0, 0, 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0, 
+    230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0
+  },
+  { /* page 16, index 12 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 19, index 13 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 23, index 14 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 24, index 15 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 25, index 16 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 26, index 17 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 
+    220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 27, index 18 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 230, 230, 230, 230, 230, 230, 
+    230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 29, index 19 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    230, 230, 220, 230, 230, 230, 230, 230, 230, 230, 220, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220
+  },
+  { /* page 32, index 20 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 1, 1, 230, 230, 
+    230, 230, 1, 1, 1, 230, 230, 0, 0, 0, 0, 230, 0, 0, 0, 1, 1, 230, 220, 
+    230, 1, 1, 220, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0
+  },
+  { /* page 48, index 21 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 228, 232, 222, 
+    224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 168, index 22 */
+    0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 251, index 23 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 254, index 24 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 266, index 25 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 230, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 1, 220, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 465, index 26 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, 216, 216, 216, 
+    0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 220, 0, 0, 
+    230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0
+  },
+  { /* page 466, index 27 */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  }
+};
+
+static const gint16 combining_class_table_part1[763] = {
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 /* page 3 */,
+  1 /* page 4 */,
+  2 /* page 5 */,
+  3 /* page 6 */,
+  4 /* page 7 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  5 /* page 9 */,
+  6 /* page 10 */,
+  7 /* page 11 */,
+  8 /* page 12 */,
+  9 /* page 13 */,
+  10 /* page 14 */,
+  11 /* page 15 */,
+  12 /* page 16 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  13 /* page 19 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  14 /* page 23 */,
+  15 /* page 24 */,
+  16 /* page 25 */,
+  17 /* page 26 */,
+  18 /* page 27 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  19 /* page 29 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  20 /* page 32 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  21 /* page 48 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  22 /* page 168 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  23 /* page 251 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  24 /* page 254 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  25 /* page 266 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  26 /* page 465 */,
+  27 /* page 466 */,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX
+};
+
+static const gint16 combining_class_table_part2[768] = {
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX,
+  0 + G_UNICODE_MAX_TABLE_INDEX
+};
+
+typedef struct
+{
+  gunichar ch;
+  guint16 canon_offset;
+  guint16 compat_offset;
+} decomposition;
+
+static const decomposition decomp_table[] =
+{
+  { 0x00a0, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x00a8, G_UNICODE_NOT_PRESENT_OFFSET, 2 },
+  { 0x00aa, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x00af, G_UNICODE_NOT_PRESENT_OFFSET, 8 },
+  { 0x00b2, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x00b3, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x00b4, G_UNICODE_NOT_PRESENT_OFFSET, 16 },
+  { 0x00b5, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
+  { 0x00b8, G_UNICODE_NOT_PRESENT_OFFSET, 23 },
+  { 0x00b9, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x00ba, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x00bc, G_UNICODE_NOT_PRESENT_OFFSET, 31 },
+  { 0x00bd, G_UNICODE_NOT_PRESENT_OFFSET, 37 },
+  { 0x00be, G_UNICODE_NOT_PRESENT_OFFSET, 43 },
+  { 0x00c0, 49, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c1, 53, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c2, 57, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c3, 61, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c4, 65, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c5, 69, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c7, 73, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c8, 77, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00c9, 81, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ca, 85, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00cb, 89, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00cc, 93, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00cd, 97, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ce, 101, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00cf, 105, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d1, 109, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d2, 113, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d3, 117, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d4, 121, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d5, 125, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d6, 129, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00d9, 133, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00da, 137, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00db, 141, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00dc, 145, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00dd, 149, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e0, 153, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e1, 157, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e2, 161, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e3, 165, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e4, 169, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e5, 173, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e7, 177, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e8, 181, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00e9, 185, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ea, 189, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00eb, 193, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ec, 197, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ed, 201, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ee, 205, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ef, 209, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f1, 213, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f2, 217, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f3, 221, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f4, 225, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f5, 229, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f6, 233, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00f9, 237, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00fa, 241, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00fb, 245, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00fc, 249, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00fd, 253, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x00ff, 257, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0100, 261, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0101, 265, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0102, 269, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0103, 273, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0104, 277, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0105, 281, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0106, 285, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0107, 289, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0108, 293, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0109, 297, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x010a, 301, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x010b, 305, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x010c, 309, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x010d, 313, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x010e, 317, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x010f, 321, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0112, 325, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0113, 329, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0114, 333, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0115, 337, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0116, 341, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0117, 345, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0118, 349, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0119, 353, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x011a, 357, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x011b, 361, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x011c, 365, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x011d, 369, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x011e, 373, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x011f, 377, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0120, 381, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0121, 385, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0122, 389, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0123, 393, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0124, 397, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0125, 401, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0128, 405, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0129, 409, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x012a, 413, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x012b, 417, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x012c, 421, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x012d, 425, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x012e, 429, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x012f, 433, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0130, 437, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0132, G_UNICODE_NOT_PRESENT_OFFSET, 441 },
+  { 0x0133, G_UNICODE_NOT_PRESENT_OFFSET, 444 },
+  { 0x0134, 447, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0135, 451, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0136, 455, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0137, 459, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0139, 463, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x013a, 467, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x013b, 471, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x013c, 475, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x013d, 479, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x013e, 483, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x013f, G_UNICODE_NOT_PRESENT_OFFSET, 487 },
+  { 0x0140, G_UNICODE_NOT_PRESENT_OFFSET, 491 },
+  { 0x0143, 495, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0144, 499, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0145, 503, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0146, 507, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0147, 511, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0148, 515, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0149, G_UNICODE_NOT_PRESENT_OFFSET, 519 },
+  { 0x014c, 523, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x014d, 527, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x014e, 531, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x014f, 535, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0150, 539, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0151, 543, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0154, 547, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0155, 551, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0156, 555, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0157, 559, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0158, 563, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0159, 567, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x015a, 571, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x015b, 575, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x015c, 579, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x015d, 583, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x015e, 587, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x015f, 591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0160, 595, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0161, 599, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0162, 603, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0163, 607, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0164, 611, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0165, 615, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0168, 619, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0169, 623, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x016a, 627, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x016b, 631, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x016c, 635, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x016d, 639, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x016e, 643, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x016f, 647, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0170, 651, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0171, 655, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0172, 659, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0173, 663, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0174, 667, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0175, 671, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0176, 675, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0177, 679, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0178, 683, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0179, 687, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x017a, 691, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x017b, 695, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x017c, 699, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x017d, 703, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x017e, 707, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x017f, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x01a0, 713, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01a1, 717, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01af, 721, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01b0, 725, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01c4, G_UNICODE_NOT_PRESENT_OFFSET, 729 },
+  { 0x01c5, G_UNICODE_NOT_PRESENT_OFFSET, 734 },
+  { 0x01c6, G_UNICODE_NOT_PRESENT_OFFSET, 739 },
+  { 0x01c7, G_UNICODE_NOT_PRESENT_OFFSET, 744 },
+  { 0x01c8, G_UNICODE_NOT_PRESENT_OFFSET, 747 },
+  { 0x01c9, G_UNICODE_NOT_PRESENT_OFFSET, 750 },
+  { 0x01ca, G_UNICODE_NOT_PRESENT_OFFSET, 753 },
+  { 0x01cb, G_UNICODE_NOT_PRESENT_OFFSET, 756 },
+  { 0x01cc, G_UNICODE_NOT_PRESENT_OFFSET, 759 },
+  { 0x01cd, 762, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ce, 766, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01cf, 770, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d0, 774, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d1, 778, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d2, 782, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d3, 786, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d4, 790, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d5, 794, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d6, 800, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d7, 806, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d8, 812, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01d9, 818, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01da, 824, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01db, 830, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01dc, 836, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01de, 842, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01df, 848, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e0, 854, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e1, 860, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e2, 866, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e3, 871, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e6, 876, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e7, 880, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e8, 884, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01e9, 888, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ea, 892, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01eb, 896, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ec, 900, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ed, 906, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ee, 912, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ef, 917, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01f0, 922, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01f1, G_UNICODE_NOT_PRESENT_OFFSET, 926 },
+  { 0x01f2, G_UNICODE_NOT_PRESENT_OFFSET, 929 },
+  { 0x01f3, G_UNICODE_NOT_PRESENT_OFFSET, 932 },
+  { 0x01f4, 935, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01f5, 939, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01f8, 943, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01f9, 947, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01fa, 951, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01fb, 957, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01fc, 963, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01fd, 968, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01fe, 973, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x01ff, 978, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0200, 983, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0201, 987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0202, 991, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0203, 995, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0204, 999, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0205, 1003, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0206, 1007, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0207, 1011, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0208, 1015, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0209, 1019, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x020a, 1023, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x020b, 1027, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x020c, 1031, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x020d, 1035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x020e, 1039, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x020f, 1043, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0210, 1047, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0211, 1051, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0212, 1055, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0213, 1059, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0214, 1063, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0215, 1067, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0216, 1071, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0217, 1075, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0218, 1079, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0219, 1083, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x021a, 1087, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x021b, 1091, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x021e, 1095, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x021f, 1099, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0226, 1103, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0227, 1107, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0228, 1111, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0229, 1115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x022a, 1119, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x022b, 1125, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x022c, 1131, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x022d, 1137, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x022e, 1143, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x022f, 1147, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0230, 1151, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0231, 1157, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0232, 1163, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0233, 1167, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x02b0, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x02b1, G_UNICODE_NOT_PRESENT_OFFSET, 1173 },
+  { 0x02b2, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x02b3, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x02b4, G_UNICODE_NOT_PRESENT_OFFSET, 1180 },
+  { 0x02b5, G_UNICODE_NOT_PRESENT_OFFSET, 1183 },
+  { 0x02b6, G_UNICODE_NOT_PRESENT_OFFSET, 1186 },
+  { 0x02b7, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x02b8, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x02d8, G_UNICODE_NOT_PRESENT_OFFSET, 1193 },
+  { 0x02d9, G_UNICODE_NOT_PRESENT_OFFSET, 1197 },
+  { 0x02da, G_UNICODE_NOT_PRESENT_OFFSET, 1201 },
+  { 0x02db, G_UNICODE_NOT_PRESENT_OFFSET, 1205 },
+  { 0x02dc, G_UNICODE_NOT_PRESENT_OFFSET, 1209 },
+  { 0x02dd, G_UNICODE_NOT_PRESENT_OFFSET, 1213 },
+  { 0x02e0, G_UNICODE_NOT_PRESENT_OFFSET, 1217 },
+  { 0x02e1, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x02e2, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x02e3, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x02e4, G_UNICODE_NOT_PRESENT_OFFSET, 1224 },
+  { 0x0340, 1227, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0341, 1230, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0343, 1233, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0344, 1236, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0374, 1241, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x037a, G_UNICODE_NOT_PRESENT_OFFSET, 1244 },
+  { 0x037e, 1248, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0384, G_UNICODE_NOT_PRESENT_OFFSET, 16 },
+  { 0x0385, 1250, 1255 },
+  { 0x0386, 1261, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0387, 1266, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0388, 1269, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0389, 1274, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x038a, 1279, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x038c, 1284, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x038e, 1289, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x038f, 1294, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0390, 1299, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03aa, 1306, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03ab, 1311, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03ac, 1316, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03ad, 1321, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03ae, 1326, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03af, 1331, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03b0, 1336, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03ca, 1343, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03cb, 1348, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03cc, 1353, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03cd, 1358, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03ce, 1363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x03d0, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x03d1, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x03d2, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
+  { 0x03d3, 1377, 1289 },
+  { 0x03d4, 1382, 1311 },
+  { 0x03d5, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x03d6, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x03f0, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x03f1, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x03f2, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
+  { 0x03f4, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x03f5, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x03f9, G_UNICODE_NOT_PRESENT_OFFSET, 1408 },
+  { 0x0400, 1411, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0401, 1416, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0403, 1421, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0407, 1426, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x040c, 1431, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x040d, 1436, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x040e, 1441, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0419, 1446, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0439, 1451, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0450, 1456, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0451, 1461, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0453, 1466, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0457, 1471, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x045c, 1476, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x045d, 1481, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x045e, 1486, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0476, 1491, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0477, 1496, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04c1, 1501, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04c2, 1506, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04d0, 1511, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04d1, 1516, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04d2, 1521, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04d3, 1526, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04d6, 1531, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04d7, 1536, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04da, 1541, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04db, 1546, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04dc, 1551, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04dd, 1556, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04de, 1561, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04df, 1566, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04e2, 1571, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04e3, 1576, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04e4, 1581, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04e5, 1586, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04e6, 1591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04e7, 1596, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04ea, 1601, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04eb, 1606, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04ec, 1611, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04ed, 1616, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04ee, 1621, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04ef, 1626, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f0, 1631, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f1, 1636, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f2, 1641, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f3, 1646, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f4, 1651, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f5, 1656, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f8, 1661, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x04f9, 1666, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0587, G_UNICODE_NOT_PRESENT_OFFSET, 1671 },
+  { 0x0622, 1676, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0623, 1681, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0624, 1686, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0625, 1691, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0626, 1696, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0675, G_UNICODE_NOT_PRESENT_OFFSET, 1701 },
+  { 0x0676, G_UNICODE_NOT_PRESENT_OFFSET, 1706 },
+  { 0x0677, G_UNICODE_NOT_PRESENT_OFFSET, 1711 },
+  { 0x0678, G_UNICODE_NOT_PRESENT_OFFSET, 1716 },
+  { 0x06c0, 1721, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x06c2, 1726, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x06d3, 1731, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0929, 1736, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0931, 1743, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0934, 1750, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0958, 1757, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0959, 1764, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x095a, 1771, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x095b, 1778, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x095c, 1785, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x095d, 1792, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x095e, 1799, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x095f, 1806, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x09cb, 1813, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x09cc, 1820, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x09dc, 1827, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x09dd, 1834, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x09df, 1841, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0a33, 1848, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0a36, 1855, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0a59, 1862, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0a5a, 1869, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0a5b, 1876, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0a5e, 1883, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0b48, 1890, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0b4b, 1897, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0b4c, 1904, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0b5c, 1911, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0b5d, 1918, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0b94, 1925, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0bca, 1932, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0bcb, 1939, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0bcc, 1946, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0c48, 1953, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0cc0, 1960, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0cc7, 1967, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0cc8, 1974, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0cca, 1981, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0ccb, 1988, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0d4a, 1998, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0d4b, 2005, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0d4c, 2012, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0dda, 2019, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0ddc, 2026, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0ddd, 2033, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0dde, 2043, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0e33, G_UNICODE_NOT_PRESENT_OFFSET, 2050 },
+  { 0x0eb3, G_UNICODE_NOT_PRESENT_OFFSET, 2057 },
+  { 0x0edc, G_UNICODE_NOT_PRESENT_OFFSET, 2064 },
+  { 0x0edd, G_UNICODE_NOT_PRESENT_OFFSET, 2071 },
+  { 0x0f0c, G_UNICODE_NOT_PRESENT_OFFSET, 2078 },
+  { 0x0f43, 2082, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f4d, 2089, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f52, 2096, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f57, 2103, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f5c, 2110, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f69, 2117, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f73, 2124, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f75, 2131, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f76, 2138, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f77, G_UNICODE_NOT_PRESENT_OFFSET, 2145 },
+  { 0x0f78, 2155, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f79, G_UNICODE_NOT_PRESENT_OFFSET, 2162 },
+  { 0x0f81, 2172, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f93, 2179, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0f9d, 2186, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0fa2, 2193, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0fa7, 2200, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0fac, 2207, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x0fb9, 2214, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1026, 2221, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x10fc, G_UNICODE_NOT_PRESENT_OFFSET, 2228 },
+  { 0x1b06, 2232, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b08, 2239, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b0a, 2246, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b0c, 2253, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b0e, 2260, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b12, 2267, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b3b, 2274, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b3d, 2281, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b40, 2288, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b41, 2295, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1b43, 2302, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d2c, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d2d, G_UNICODE_NOT_PRESENT_OFFSET, 2311 },
+  { 0x1d2e, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d30, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d31, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d32, G_UNICODE_NOT_PRESENT_OFFSET, 2320 },
+  { 0x1d33, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d34, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d35, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d36, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d37, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d38, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d39, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d3a, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d3c, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d3d, G_UNICODE_NOT_PRESENT_OFFSET, 2341 },
+  { 0x1d3e, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d3f, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d40, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d41, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d42, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d43, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d44, G_UNICODE_NOT_PRESENT_OFFSET, 2354 },
+  { 0x1d45, G_UNICODE_NOT_PRESENT_OFFSET, 2357 },
+  { 0x1d46, G_UNICODE_NOT_PRESENT_OFFSET, 2360 },
+  { 0x1d47, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d48, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d49, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d4a, G_UNICODE_NOT_PRESENT_OFFSET, 2370 },
+  { 0x1d4b, G_UNICODE_NOT_PRESENT_OFFSET, 2373 },
+  { 0x1d4c, G_UNICODE_NOT_PRESENT_OFFSET, 2376 },
+  { 0x1d4d, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d4f, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d50, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d51, G_UNICODE_NOT_PRESENT_OFFSET, 2385 },
+  { 0x1d52, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d53, G_UNICODE_NOT_PRESENT_OFFSET, 2388 },
+  { 0x1d54, G_UNICODE_NOT_PRESENT_OFFSET, 2391 },
+  { 0x1d55, G_UNICODE_NOT_PRESENT_OFFSET, 2395 },
+  { 0x1d56, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d57, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d58, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d59, G_UNICODE_NOT_PRESENT_OFFSET, 2405 },
+  { 0x1d5a, G_UNICODE_NOT_PRESENT_OFFSET, 2409 },
+  { 0x1d5b, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d5c, G_UNICODE_NOT_PRESENT_OFFSET, 2414 },
+  { 0x1d5d, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d5e, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d5f, G_UNICODE_NOT_PRESENT_OFFSET, 2421 },
+  { 0x1d60, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d61, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d62, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d63, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d64, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d65, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d66, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d67, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d68, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d69, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d6a, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d78, G_UNICODE_NOT_PRESENT_OFFSET, 2429 },
+  { 0x1d9b, G_UNICODE_NOT_PRESENT_OFFSET, 2432 },
+  { 0x1d9c, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d9d, G_UNICODE_NOT_PRESENT_OFFSET, 2437 },
+  { 0x1d9e, G_UNICODE_NOT_PRESENT_OFFSET, 2440 },
+  { 0x1d9f, G_UNICODE_NOT_PRESENT_OFFSET, 2376 },
+  { 0x1da0, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1da1, G_UNICODE_NOT_PRESENT_OFFSET, 2445 },
+  { 0x1da2, G_UNICODE_NOT_PRESENT_OFFSET, 2448 },
+  { 0x1da3, G_UNICODE_NOT_PRESENT_OFFSET, 2451 },
+  { 0x1da4, G_UNICODE_NOT_PRESENT_OFFSET, 2454 },
+  { 0x1da5, G_UNICODE_NOT_PRESENT_OFFSET, 2457 },
+  { 0x1da6, G_UNICODE_NOT_PRESENT_OFFSET, 2460 },
+  { 0x1da7, G_UNICODE_NOT_PRESENT_OFFSET, 2463 },
+  { 0x1da8, G_UNICODE_NOT_PRESENT_OFFSET, 2467 },
+  { 0x1da9, G_UNICODE_NOT_PRESENT_OFFSET, 2470 },
+  { 0x1daa, G_UNICODE_NOT_PRESENT_OFFSET, 2473 },
+  { 0x1dab, G_UNICODE_NOT_PRESENT_OFFSET, 2477 },
+  { 0x1dac, G_UNICODE_NOT_PRESENT_OFFSET, 2480 },
+  { 0x1dad, G_UNICODE_NOT_PRESENT_OFFSET, 2483 },
+  { 0x1dae, G_UNICODE_NOT_PRESENT_OFFSET, 2486 },
+  { 0x1daf, G_UNICODE_NOT_PRESENT_OFFSET, 2489 },
+  { 0x1db0, G_UNICODE_NOT_PRESENT_OFFSET, 2492 },
+  { 0x1db1, G_UNICODE_NOT_PRESENT_OFFSET, 2495 },
+  { 0x1db2, G_UNICODE_NOT_PRESENT_OFFSET, 2498 },
+  { 0x1db3, G_UNICODE_NOT_PRESENT_OFFSET, 2501 },
+  { 0x1db4, G_UNICODE_NOT_PRESENT_OFFSET, 2504 },
+  { 0x1db5, G_UNICODE_NOT_PRESENT_OFFSET, 2507 },
+  { 0x1db6, G_UNICODE_NOT_PRESENT_OFFSET, 2510 },
+  { 0x1db7, G_UNICODE_NOT_PRESENT_OFFSET, 2513 },
+  { 0x1db8, G_UNICODE_NOT_PRESENT_OFFSET, 2516 },
+  { 0x1db9, G_UNICODE_NOT_PRESENT_OFFSET, 2520 },
+  { 0x1dba, G_UNICODE_NOT_PRESENT_OFFSET, 2523 },
+  { 0x1dbb, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1dbc, G_UNICODE_NOT_PRESENT_OFFSET, 2528 },
+  { 0x1dbd, G_UNICODE_NOT_PRESENT_OFFSET, 2531 },
+  { 0x1dbe, G_UNICODE_NOT_PRESENT_OFFSET, 2534 },
+  { 0x1dbf, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1e00, 2537, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e01, 2541, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e02, 2545, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e03, 2549, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e04, 2553, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e05, 2557, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e06, 2561, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e07, 2565, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e08, 2569, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e09, 2575, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e0a, 2581, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e0b, 2585, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e0c, 2589, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e0d, 2593, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e0e, 2597, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e0f, 2601, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e10, 2605, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e11, 2609, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e12, 2613, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e13, 2617, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e14, 2621, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e15, 2627, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e16, 2633, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e17, 2639, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e18, 2645, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e19, 2649, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e1a, 2653, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e1b, 2657, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e1c, 2661, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e1d, 2667, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e1e, 2673, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e1f, 2677, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e20, 2681, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e21, 2685, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e22, 2689, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e23, 2693, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e24, 2697, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e25, 2701, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e26, 2705, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e27, 2709, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e28, 2713, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e29, 2717, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e2a, 2721, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e2b, 2725, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e2c, 2729, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e2d, 2733, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e2e, 2737, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e2f, 2743, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e30, 2749, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e31, 2753, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e32, 2757, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e33, 2761, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e34, 2765, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e35, 2769, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e36, 2773, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e37, 2777, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e38, 2781, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e39, 2787, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e3a, 2793, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e3b, 2797, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e3c, 2801, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e3d, 2805, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e3e, 2809, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e3f, 2813, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e40, 2817, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e41, 2821, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e42, 2825, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e43, 2829, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e44, 2833, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e45, 2837, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e46, 2841, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e47, 2845, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e48, 2849, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e49, 2853, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e4a, 2857, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e4b, 2861, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e4c, 2865, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e4d, 2871, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e4e, 2877, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e4f, 2883, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e50, 2889, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e51, 2895, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e52, 2901, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e53, 2907, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e54, 2913, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e55, 2917, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e56, 2921, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e57, 2925, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e58, 2929, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e59, 2933, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e5a, 2937, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e5b, 2941, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e5c, 2945, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e5d, 2951, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e5e, 2957, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e5f, 2961, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e60, 2965, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e61, 2969, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e62, 2973, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e63, 2977, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e64, 2981, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e65, 2987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e66, 2993, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e67, 2999, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e68, 3005, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e69, 3011, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e6a, 3017, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e6b, 3021, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e6c, 3025, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e6d, 3029, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e6e, 3033, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e6f, 3037, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e70, 3041, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e71, 3045, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e72, 3049, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e73, 3053, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e74, 3057, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e75, 3061, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e76, 3065, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e77, 3069, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e78, 3073, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e79, 3079, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e7a, 3085, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e7b, 3091, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e7c, 3097, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e7d, 3101, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e7e, 3105, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e7f, 3109, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e80, 3113, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e81, 3117, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e82, 3121, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e83, 3125, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e84, 3129, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e85, 3133, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e86, 3137, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e87, 3141, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e88, 3145, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e89, 3149, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e8a, 3153, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e8b, 3157, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e8c, 3161, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e8d, 3165, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e8e, 3169, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e8f, 3173, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e90, 3177, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e91, 3181, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e92, 3185, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e93, 3189, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e94, 3193, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e95, 3197, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e96, 3201, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e97, 3205, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e98, 3209, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e99, 3213, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1e9a, G_UNICODE_NOT_PRESENT_OFFSET, 3217 },
+  { 0x1e9b, 3221, 2969 },
+  { 0x1ea0, 3226, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea1, 3230, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea2, 3234, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea3, 3238, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea4, 3242, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea5, 3248, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea6, 3254, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea7, 3260, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea8, 3266, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ea9, 3272, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eaa, 3278, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eab, 3284, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eac, 3290, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ead, 3296, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eae, 3302, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eaf, 3308, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb0, 3314, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb1, 3320, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb2, 3326, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb3, 3332, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb4, 3338, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb5, 3344, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb6, 3350, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb7, 3356, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb8, 3362, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eb9, 3366, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eba, 3370, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ebb, 3374, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ebc, 3378, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ebd, 3382, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ebe, 3386, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ebf, 3392, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec0, 3398, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec1, 3404, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec2, 3410, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec3, 3416, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec4, 3422, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec5, 3428, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec6, 3434, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec7, 3440, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec8, 3446, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ec9, 3450, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eca, 3454, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ecb, 3458, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ecc, 3462, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ecd, 3466, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ece, 3470, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ecf, 3474, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed0, 3478, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed1, 3484, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed2, 3490, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed3, 3496, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed4, 3502, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed5, 3508, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed6, 3514, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed7, 3520, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed8, 3526, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ed9, 3532, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eda, 3538, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1edb, 3544, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1edc, 3550, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1edd, 3556, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ede, 3562, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1edf, 3568, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee0, 3574, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee1, 3580, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee2, 3586, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee3, 3592, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee4, 3598, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee5, 3602, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee6, 3606, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee7, 3610, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee8, 3614, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ee9, 3620, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eea, 3626, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eeb, 3632, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eec, 3638, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eed, 3644, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eee, 3650, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1eef, 3656, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef0, 3662, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef1, 3668, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef2, 3674, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef3, 3678, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef4, 3682, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef5, 3686, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef6, 3690, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef7, 3694, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef8, 3698, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ef9, 3702, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f00, 3706, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f01, 3711, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f02, 3716, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f03, 3723, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f04, 3730, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f05, 3737, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f06, 3744, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f07, 3751, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f08, 3758, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f09, 3763, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f0a, 3768, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f0b, 3775, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f0c, 3782, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f0d, 3789, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f0e, 3796, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f0f, 3803, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f10, 3810, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f11, 3815, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f12, 3820, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f13, 3827, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f14, 3834, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f15, 3841, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f18, 3848, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f19, 3853, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f1a, 3858, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f1b, 3865, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f1c, 3872, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f1d, 3879, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f20, 3886, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f21, 3891, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f22, 3896, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f23, 3903, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f24, 3910, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f25, 3917, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f26, 3924, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f27, 3931, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f28, 3938, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f29, 3943, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f2a, 3948, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f2b, 3955, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f2c, 3962, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f2d, 3969, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f2e, 3976, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f2f, 3983, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f30, 3990, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f31, 3995, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f32, 4000, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f33, 4007, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f34, 4014, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f35, 4021, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f36, 4028, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f37, 4035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f38, 4042, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f39, 4047, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f3a, 4052, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f3b, 4059, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f3c, 4066, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f3d, 4073, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f3e, 4080, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f3f, 4087, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f40, 4094, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f41, 4099, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f42, 4104, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f43, 4111, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f44, 4118, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f45, 4125, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f48, 4132, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f49, 4137, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f4a, 4142, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f4b, 4149, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f4c, 4156, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f4d, 4163, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f50, 4170, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f51, 4175, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f52, 4180, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f53, 4187, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f54, 4194, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f55, 4201, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f56, 4208, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f57, 4215, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f59, 4222, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f5b, 4227, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f5d, 4234, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f5f, 4241, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f60, 4248, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f61, 4253, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f62, 4258, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f63, 4265, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f64, 4272, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f65, 4279, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f66, 4286, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f67, 4293, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f68, 4300, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f69, 4305, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f6a, 4310, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f6b, 4317, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f6c, 4324, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f6d, 4331, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f6e, 4338, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f6f, 4345, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f70, 4352, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f71, 1316, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f72, 4357, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f73, 1321, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f74, 4362, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f75, 1326, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f76, 4367, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f77, 1331, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f78, 4372, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f79, 1353, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f7a, 4377, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f7b, 1358, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f7c, 4382, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f7d, 1363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f80, 4387, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f81, 4394, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f82, 4401, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f83, 4410, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f84, 4419, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f85, 4428, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f86, 4437, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f87, 4446, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f88, 4455, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f89, 4462, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f8a, 4469, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f8b, 4478, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f8c, 4487, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f8d, 4496, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f8e, 4505, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f8f, 4514, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f90, 4523, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f91, 4530, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f92, 4537, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f93, 4546, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f94, 4555, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f95, 4564, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f96, 4573, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f97, 4582, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f98, 4591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f99, 4598, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f9a, 4605, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f9b, 4614, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f9c, 4623, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f9d, 4632, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f9e, 4641, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1f9f, 4650, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa0, 4659, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa1, 4666, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa2, 4673, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa3, 4682, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa4, 4691, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa5, 4700, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa6, 4709, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa7, 4718, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa8, 4727, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fa9, 4734, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1faa, 4741, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fab, 4750, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fac, 4759, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fad, 4768, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fae, 4777, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1faf, 4786, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb0, 4795, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb1, 4800, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb2, 4805, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb3, 4812, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb4, 4817, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb6, 4824, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb7, 4829, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb8, 4836, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fb9, 4841, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fba, 4846, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fbb, 1261, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fbc, 4851, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fbd, G_UNICODE_NOT_PRESENT_OFFSET, 4856 },
+  { 0x1fbe, 4860, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fbf, G_UNICODE_NOT_PRESENT_OFFSET, 4856 },
+  { 0x1fc0, G_UNICODE_NOT_PRESENT_OFFSET, 4863 },
+  { 0x1fc1, 4867, 4872 },
+  { 0x1fc2, 4878, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fc3, 4885, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fc4, 4890, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fc6, 4897, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fc7, 4902, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fc8, 4909, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fc9, 1269, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fca, 4914, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fcb, 1274, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fcc, 4919, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fcd, 4924, 4930 },
+  { 0x1fce, 4936, 4942 },
+  { 0x1fcf, 4948, 4954 },
+  { 0x1fd0, 4960, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd1, 4965, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd2, 4970, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd3, 1299, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd6, 4977, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd7, 4982, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd8, 4989, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fd9, 4994, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fda, 4999, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fdb, 1279, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fdd, 5004, 5010 },
+  { 0x1fde, 5016, 5022 },
+  { 0x1fdf, 5028, 5034 },
+  { 0x1fe0, 5040, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe1, 5045, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe2, 5050, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe3, 1336, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe4, 5057, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe5, 5062, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe6, 5067, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe7, 5072, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe8, 5079, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fe9, 5084, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fea, 5089, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1feb, 1289, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fec, 5094, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1fed, 5099, 5104 },
+  { 0x1fee, 1250, 1255 },
+  { 0x1fef, 5110, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff2, 5112, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff3, 5119, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff4, 5124, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff6, 5131, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff7, 5136, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff8, 5143, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ff9, 1284, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ffa, 5148, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ffb, 1294, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ffc, 5153, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1ffd, 5158, 16 },
+  { 0x1ffe, G_UNICODE_NOT_PRESENT_OFFSET, 5161 },
+  { 0x2000, 5165, 0 },
+  { 0x2001, 5169, 0 },
+  { 0x2002, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2003, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2004, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2005, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2006, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2007, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2008, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2009, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x200a, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2011, G_UNICODE_NOT_PRESENT_OFFSET, 5173 },
+  { 0x2017, G_UNICODE_NOT_PRESENT_OFFSET, 5177 },
+  { 0x2024, G_UNICODE_NOT_PRESENT_OFFSET, 5181 },
+  { 0x2025, G_UNICODE_NOT_PRESENT_OFFSET, 5183 },
+  { 0x2026, G_UNICODE_NOT_PRESENT_OFFSET, 5186 },
+  { 0x202f, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2033, G_UNICODE_NOT_PRESENT_OFFSET, 5190 },
+  { 0x2034, G_UNICODE_NOT_PRESENT_OFFSET, 5197 },
+  { 0x2036, G_UNICODE_NOT_PRESENT_OFFSET, 5207 },
+  { 0x2037, G_UNICODE_NOT_PRESENT_OFFSET, 5214 },
+  { 0x203c, G_UNICODE_NOT_PRESENT_OFFSET, 5224 },
+  { 0x203e, G_UNICODE_NOT_PRESENT_OFFSET, 5227 },
+  { 0x2047, G_UNICODE_NOT_PRESENT_OFFSET, 5231 },
+  { 0x2048, G_UNICODE_NOT_PRESENT_OFFSET, 5234 },
+  { 0x2049, G_UNICODE_NOT_PRESENT_OFFSET, 5237 },
+  { 0x2057, G_UNICODE_NOT_PRESENT_OFFSET, 5240 },
+  { 0x205f, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x2070, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x2071, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x2074, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x2075, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x2076, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x2077, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x2078, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x2079, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x207a, G_UNICODE_NOT_PRESENT_OFFSET, 5267 },
+  { 0x207b, G_UNICODE_NOT_PRESENT_OFFSET, 5269 },
+  { 0x207c, G_UNICODE_NOT_PRESENT_OFFSET, 5273 },
+  { 0x207d, G_UNICODE_NOT_PRESENT_OFFSET, 5275 },
+  { 0x207e, G_UNICODE_NOT_PRESENT_OFFSET, 5277 },
+  { 0x207f, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x2080, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x2081, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x2082, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x2083, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x2084, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x2085, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x2086, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x2087, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x2088, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x2089, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x208a, G_UNICODE_NOT_PRESENT_OFFSET, 5267 },
+  { 0x208b, G_UNICODE_NOT_PRESENT_OFFSET, 5269 },
+  { 0x208c, G_UNICODE_NOT_PRESENT_OFFSET, 5273 },
+  { 0x208d, G_UNICODE_NOT_PRESENT_OFFSET, 5275 },
+  { 0x208e, G_UNICODE_NOT_PRESENT_OFFSET, 5277 },
+  { 0x2090, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x2091, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x2092, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x2093, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x2094, G_UNICODE_NOT_PRESENT_OFFSET, 2370 },
+  { 0x20a8, G_UNICODE_NOT_PRESENT_OFFSET, 5281 },
+  { 0x2100, G_UNICODE_NOT_PRESENT_OFFSET, 5284 },
+  { 0x2101, G_UNICODE_NOT_PRESENT_OFFSET, 5288 },
+  { 0x2102, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x2103, G_UNICODE_NOT_PRESENT_OFFSET, 5294 },
+  { 0x2105, G_UNICODE_NOT_PRESENT_OFFSET, 5298 },
+  { 0x2106, G_UNICODE_NOT_PRESENT_OFFSET, 5302 },
+  { 0x2107, G_UNICODE_NOT_PRESENT_OFFSET, 5306 },
+  { 0x2109, G_UNICODE_NOT_PRESENT_OFFSET, 5309 },
+  { 0x210a, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x210b, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x210c, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x210d, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x210e, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x210f, G_UNICODE_NOT_PRESENT_OFFSET, 5313 },
+  { 0x2110, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x2111, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x2112, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x2113, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x2115, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x2116, G_UNICODE_NOT_PRESENT_OFFSET, 5316 },
+  { 0x2119, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x211a, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x211b, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x211c, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x211d, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x2120, G_UNICODE_NOT_PRESENT_OFFSET, 5321 },
+  { 0x2121, G_UNICODE_NOT_PRESENT_OFFSET, 5324 },
+  { 0x2122, G_UNICODE_NOT_PRESENT_OFFSET, 5328 },
+  { 0x2124, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x2126, 5333, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2128, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x212a, 2331, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x212b, 69, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x212c, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x212d, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x212f, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x2130, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x2131, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x2133, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x2134, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x2135, G_UNICODE_NOT_PRESENT_OFFSET, 5338 },
+  { 0x2136, G_UNICODE_NOT_PRESENT_OFFSET, 5341 },
+  { 0x2137, G_UNICODE_NOT_PRESENT_OFFSET, 5344 },
+  { 0x2138, G_UNICODE_NOT_PRESENT_OFFSET, 5347 },
+  { 0x2139, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x213b, G_UNICODE_NOT_PRESENT_OFFSET, 5350 },
+  { 0x213c, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x213d, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x213e, G_UNICODE_NOT_PRESENT_OFFSET, 5354 },
+  { 0x213f, G_UNICODE_NOT_PRESENT_OFFSET, 5357 },
+  { 0x2140, G_UNICODE_NOT_PRESENT_OFFSET, 5360 },
+  { 0x2145, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x2146, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x2147, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x2148, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x2149, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x2153, G_UNICODE_NOT_PRESENT_OFFSET, 5364 },
+  { 0x2154, G_UNICODE_NOT_PRESENT_OFFSET, 5370 },
+  { 0x2155, G_UNICODE_NOT_PRESENT_OFFSET, 5376 },
+  { 0x2156, G_UNICODE_NOT_PRESENT_OFFSET, 5382 },
+  { 0x2157, G_UNICODE_NOT_PRESENT_OFFSET, 5388 },
+  { 0x2158, G_UNICODE_NOT_PRESENT_OFFSET, 5394 },
+  { 0x2159, G_UNICODE_NOT_PRESENT_OFFSET, 5400 },
+  { 0x215a, G_UNICODE_NOT_PRESENT_OFFSET, 5406 },
+  { 0x215b, G_UNICODE_NOT_PRESENT_OFFSET, 5412 },
+  { 0x215c, G_UNICODE_NOT_PRESENT_OFFSET, 5418 },
+  { 0x215d, G_UNICODE_NOT_PRESENT_OFFSET, 5424 },
+  { 0x215e, G_UNICODE_NOT_PRESENT_OFFSET, 5430 },
+  { 0x215f, G_UNICODE_NOT_PRESENT_OFFSET, 5436 },
+  { 0x2160, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x2161, G_UNICODE_NOT_PRESENT_OFFSET, 5441 },
+  { 0x2162, G_UNICODE_NOT_PRESENT_OFFSET, 5444 },
+  { 0x2163, G_UNICODE_NOT_PRESENT_OFFSET, 5448 },
+  { 0x2164, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x2165, G_UNICODE_NOT_PRESENT_OFFSET, 5453 },
+  { 0x2166, G_UNICODE_NOT_PRESENT_OFFSET, 5456 },
+  { 0x2167, G_UNICODE_NOT_PRESENT_OFFSET, 5460 },
+  { 0x2168, G_UNICODE_NOT_PRESENT_OFFSET, 5465 },
+  { 0x2169, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x216a, G_UNICODE_NOT_PRESENT_OFFSET, 5470 },
+  { 0x216b, G_UNICODE_NOT_PRESENT_OFFSET, 5473 },
+  { 0x216c, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x216d, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x216e, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x216f, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x2170, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x2171, G_UNICODE_NOT_PRESENT_OFFSET, 5477 },
+  { 0x2172, G_UNICODE_NOT_PRESENT_OFFSET, 5480 },
+  { 0x2173, G_UNICODE_NOT_PRESENT_OFFSET, 5484 },
+  { 0x2174, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x2175, G_UNICODE_NOT_PRESENT_OFFSET, 5487 },
+  { 0x2176, G_UNICODE_NOT_PRESENT_OFFSET, 5490 },
+  { 0x2177, G_UNICODE_NOT_PRESENT_OFFSET, 5494 },
+  { 0x2178, G_UNICODE_NOT_PRESENT_OFFSET, 5499 },
+  { 0x2179, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x217a, G_UNICODE_NOT_PRESENT_OFFSET, 5502 },
+  { 0x217b, G_UNICODE_NOT_PRESENT_OFFSET, 5505 },
+  { 0x217c, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x217d, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x217e, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x217f, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x219a, 5509, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x219b, 5515, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x21ae, 5521, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x21cd, 5527, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x21ce, 5533, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x21cf, 5539, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2204, 5545, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2209, 5551, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x220c, 5557, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2224, 5563, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2226, 5569, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x222c, G_UNICODE_NOT_PRESENT_OFFSET, 5575 },
+  { 0x222d, G_UNICODE_NOT_PRESENT_OFFSET, 5582 },
+  { 0x222f, G_UNICODE_NOT_PRESENT_OFFSET, 5592 },
+  { 0x2230, G_UNICODE_NOT_PRESENT_OFFSET, 5599 },
+  { 0x2241, 5609, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2244, 5615, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2247, 5621, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2249, 5627, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2260, 5633, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2262, 5637, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x226d, 5643, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x226e, 5649, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x226f, 5653, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2270, 5657, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2271, 5663, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2274, 5669, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2275, 5675, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2278, 5681, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2279, 5687, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2280, 5693, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2281, 5699, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2284, 5705, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2285, 5711, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2288, 5717, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2289, 5723, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22ac, 5729, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22ad, 5735, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22ae, 5741, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22af, 5747, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22e0, 5753, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22e1, 5759, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22e2, 5765, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22e3, 5771, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22ea, 5777, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22eb, 5783, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22ec, 5789, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x22ed, 5795, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2329, 5801, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x232a, 5805, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2460, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x2461, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x2462, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x2463, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x2464, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x2465, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x2466, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x2467, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x2468, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x2469, G_UNICODE_NOT_PRESENT_OFFSET, 5809 },
+  { 0x246a, G_UNICODE_NOT_PRESENT_OFFSET, 5812 },
+  { 0x246b, G_UNICODE_NOT_PRESENT_OFFSET, 5815 },
+  { 0x246c, G_UNICODE_NOT_PRESENT_OFFSET, 5818 },
+  { 0x246d, G_UNICODE_NOT_PRESENT_OFFSET, 5821 },
+  { 0x246e, G_UNICODE_NOT_PRESENT_OFFSET, 5824 },
+  { 0x246f, G_UNICODE_NOT_PRESENT_OFFSET, 5827 },
+  { 0x2470, G_UNICODE_NOT_PRESENT_OFFSET, 5830 },
+  { 0x2471, G_UNICODE_NOT_PRESENT_OFFSET, 5833 },
+  { 0x2472, G_UNICODE_NOT_PRESENT_OFFSET, 5836 },
+  { 0x2473, G_UNICODE_NOT_PRESENT_OFFSET, 5839 },
+  { 0x2474, G_UNICODE_NOT_PRESENT_OFFSET, 5842 },
+  { 0x2475, G_UNICODE_NOT_PRESENT_OFFSET, 5846 },
+  { 0x2476, G_UNICODE_NOT_PRESENT_OFFSET, 5850 },
+  { 0x2477, G_UNICODE_NOT_PRESENT_OFFSET, 5854 },
+  { 0x2478, G_UNICODE_NOT_PRESENT_OFFSET, 5858 },
+  { 0x2479, G_UNICODE_NOT_PRESENT_OFFSET, 5862 },
+  { 0x247a, G_UNICODE_NOT_PRESENT_OFFSET, 5866 },
+  { 0x247b, G_UNICODE_NOT_PRESENT_OFFSET, 5870 },
+  { 0x247c, G_UNICODE_NOT_PRESENT_OFFSET, 5874 },
+  { 0x247d, G_UNICODE_NOT_PRESENT_OFFSET, 5878 },
+  { 0x247e, G_UNICODE_NOT_PRESENT_OFFSET, 5883 },
+  { 0x247f, G_UNICODE_NOT_PRESENT_OFFSET, 5888 },
+  { 0x2480, G_UNICODE_NOT_PRESENT_OFFSET, 5893 },
+  { 0x2481, G_UNICODE_NOT_PRESENT_OFFSET, 5898 },
+  { 0x2482, G_UNICODE_NOT_PRESENT_OFFSET, 5903 },
+  { 0x2483, G_UNICODE_NOT_PRESENT_OFFSET, 5908 },
+  { 0x2484, G_UNICODE_NOT_PRESENT_OFFSET, 5913 },
+  { 0x2485, G_UNICODE_NOT_PRESENT_OFFSET, 5918 },
+  { 0x2486, G_UNICODE_NOT_PRESENT_OFFSET, 5923 },
+  { 0x2487, G_UNICODE_NOT_PRESENT_OFFSET, 5928 },
+  { 0x2488, G_UNICODE_NOT_PRESENT_OFFSET, 5933 },
+  { 0x2489, G_UNICODE_NOT_PRESENT_OFFSET, 5936 },
+  { 0x248a, G_UNICODE_NOT_PRESENT_OFFSET, 5939 },
+  { 0x248b, G_UNICODE_NOT_PRESENT_OFFSET, 5942 },
+  { 0x248c, G_UNICODE_NOT_PRESENT_OFFSET, 5945 },
+  { 0x248d, G_UNICODE_NOT_PRESENT_OFFSET, 5948 },
+  { 0x248e, G_UNICODE_NOT_PRESENT_OFFSET, 5951 },
+  { 0x248f, G_UNICODE_NOT_PRESENT_OFFSET, 5954 },
+  { 0x2490, G_UNICODE_NOT_PRESENT_OFFSET, 5957 },
+  { 0x2491, G_UNICODE_NOT_PRESENT_OFFSET, 5960 },
+  { 0x2492, G_UNICODE_NOT_PRESENT_OFFSET, 5964 },
+  { 0x2493, G_UNICODE_NOT_PRESENT_OFFSET, 5968 },
+  { 0x2494, G_UNICODE_NOT_PRESENT_OFFSET, 5972 },
+  { 0x2495, G_UNICODE_NOT_PRESENT_OFFSET, 5976 },
+  { 0x2496, G_UNICODE_NOT_PRESENT_OFFSET, 5980 },
+  { 0x2497, G_UNICODE_NOT_PRESENT_OFFSET, 5984 },
+  { 0x2498, G_UNICODE_NOT_PRESENT_OFFSET, 5988 },
+  { 0x2499, G_UNICODE_NOT_PRESENT_OFFSET, 5992 },
+  { 0x249a, G_UNICODE_NOT_PRESENT_OFFSET, 5996 },
+  { 0x249b, G_UNICODE_NOT_PRESENT_OFFSET, 6000 },
+  { 0x249c, G_UNICODE_NOT_PRESENT_OFFSET, 6004 },
+  { 0x249d, G_UNICODE_NOT_PRESENT_OFFSET, 6008 },
+  { 0x249e, G_UNICODE_NOT_PRESENT_OFFSET, 6012 },
+  { 0x249f, G_UNICODE_NOT_PRESENT_OFFSET, 6016 },
+  { 0x24a0, G_UNICODE_NOT_PRESENT_OFFSET, 6020 },
+  { 0x24a1, G_UNICODE_NOT_PRESENT_OFFSET, 6024 },
+  { 0x24a2, G_UNICODE_NOT_PRESENT_OFFSET, 6028 },
+  { 0x24a3, G_UNICODE_NOT_PRESENT_OFFSET, 6032 },
+  { 0x24a4, G_UNICODE_NOT_PRESENT_OFFSET, 6036 },
+  { 0x24a5, G_UNICODE_NOT_PRESENT_OFFSET, 6040 },
+  { 0x24a6, G_UNICODE_NOT_PRESENT_OFFSET, 6044 },
+  { 0x24a7, G_UNICODE_NOT_PRESENT_OFFSET, 6048 },
+  { 0x24a8, G_UNICODE_NOT_PRESENT_OFFSET, 6052 },
+  { 0x24a9, G_UNICODE_NOT_PRESENT_OFFSET, 6056 },
+  { 0x24aa, G_UNICODE_NOT_PRESENT_OFFSET, 6060 },
+  { 0x24ab, G_UNICODE_NOT_PRESENT_OFFSET, 6064 },
+  { 0x24ac, G_UNICODE_NOT_PRESENT_OFFSET, 6068 },
+  { 0x24ad, G_UNICODE_NOT_PRESENT_OFFSET, 6072 },
+  { 0x24ae, G_UNICODE_NOT_PRESENT_OFFSET, 6076 },
+  { 0x24af, G_UNICODE_NOT_PRESENT_OFFSET, 6080 },
+  { 0x24b0, G_UNICODE_NOT_PRESENT_OFFSET, 6084 },
+  { 0x24b1, G_UNICODE_NOT_PRESENT_OFFSET, 6088 },
+  { 0x24b2, G_UNICODE_NOT_PRESENT_OFFSET, 6092 },
+  { 0x24b3, G_UNICODE_NOT_PRESENT_OFFSET, 6096 },
+  { 0x24b4, G_UNICODE_NOT_PRESENT_OFFSET, 6100 },
+  { 0x24b5, G_UNICODE_NOT_PRESENT_OFFSET, 6104 },
+  { 0x24b6, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x24b7, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x24b8, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x24b9, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x24ba, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x24bb, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x24bc, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x24bd, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x24be, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x24bf, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x24c0, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x24c1, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x24c2, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x24c3, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x24c4, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x24c5, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x24c6, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x24c7, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x24c8, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x24c9, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x24ca, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x24cb, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x24cc, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x24cd, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x24ce, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x24cf, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x24d0, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x24d1, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x24d2, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x24d3, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x24d4, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x24d5, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x24d6, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x24d7, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x24d8, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x24d9, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x24da, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x24db, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x24dc, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x24dd, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x24de, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x24df, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x24e0, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x24e1, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x24e2, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x24e3, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x24e4, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x24e5, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x24e6, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x24e7, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x24e8, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x24e9, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x24ea, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x2a0c, G_UNICODE_NOT_PRESENT_OFFSET, 6114 },
+  { 0x2a74, G_UNICODE_NOT_PRESENT_OFFSET, 6127 },
+  { 0x2a75, G_UNICODE_NOT_PRESENT_OFFSET, 6131 },
+  { 0x2a76, G_UNICODE_NOT_PRESENT_OFFSET, 6134 },
+  { 0x2adc, 6138, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2d6f, G_UNICODE_NOT_PRESENT_OFFSET, 6144 },
+  { 0x2e9f, G_UNICODE_NOT_PRESENT_OFFSET, 6148 },
+  { 0x2ef3, G_UNICODE_NOT_PRESENT_OFFSET, 6152 },
+  { 0x2f00, G_UNICODE_NOT_PRESENT_OFFSET, 6156 },
+  { 0x2f01, G_UNICODE_NOT_PRESENT_OFFSET, 6160 },
+  { 0x2f02, G_UNICODE_NOT_PRESENT_OFFSET, 6164 },
+  { 0x2f03, G_UNICODE_NOT_PRESENT_OFFSET, 6168 },
+  { 0x2f04, G_UNICODE_NOT_PRESENT_OFFSET, 6172 },
+  { 0x2f05, G_UNICODE_NOT_PRESENT_OFFSET, 6176 },
+  { 0x2f06, G_UNICODE_NOT_PRESENT_OFFSET, 6180 },
+  { 0x2f07, G_UNICODE_NOT_PRESENT_OFFSET, 6184 },
+  { 0x2f08, G_UNICODE_NOT_PRESENT_OFFSET, 6188 },
+  { 0x2f09, G_UNICODE_NOT_PRESENT_OFFSET, 6192 },
+  { 0x2f0a, G_UNICODE_NOT_PRESENT_OFFSET, 6196 },
+  { 0x2f0b, G_UNICODE_NOT_PRESENT_OFFSET, 6200 },
+  { 0x2f0c, G_UNICODE_NOT_PRESENT_OFFSET, 6204 },
+  { 0x2f0d, G_UNICODE_NOT_PRESENT_OFFSET, 6208 },
+  { 0x2f0e, G_UNICODE_NOT_PRESENT_OFFSET, 6212 },
+  { 0x2f0f, G_UNICODE_NOT_PRESENT_OFFSET, 6216 },
+  { 0x2f10, G_UNICODE_NOT_PRESENT_OFFSET, 6220 },
+  { 0x2f11, G_UNICODE_NOT_PRESENT_OFFSET, 6224 },
+  { 0x2f12, G_UNICODE_NOT_PRESENT_OFFSET, 6228 },
+  { 0x2f13, G_UNICODE_NOT_PRESENT_OFFSET, 6232 },
+  { 0x2f14, G_UNICODE_NOT_PRESENT_OFFSET, 6236 },
+  { 0x2f15, G_UNICODE_NOT_PRESENT_OFFSET, 6240 },
+  { 0x2f16, G_UNICODE_NOT_PRESENT_OFFSET, 6244 },
+  { 0x2f17, G_UNICODE_NOT_PRESENT_OFFSET, 6248 },
+  { 0x2f18, G_UNICODE_NOT_PRESENT_OFFSET, 6252 },
+  { 0x2f19, G_UNICODE_NOT_PRESENT_OFFSET, 6256 },
+  { 0x2f1a, G_UNICODE_NOT_PRESENT_OFFSET, 6260 },
+  { 0x2f1b, G_UNICODE_NOT_PRESENT_OFFSET, 6264 },
+  { 0x2f1c, G_UNICODE_NOT_PRESENT_OFFSET, 6268 },
+  { 0x2f1d, G_UNICODE_NOT_PRESENT_OFFSET, 6272 },
+  { 0x2f1e, G_UNICODE_NOT_PRESENT_OFFSET, 6276 },
+  { 0x2f1f, G_UNICODE_NOT_PRESENT_OFFSET, 6280 },
+  { 0x2f20, G_UNICODE_NOT_PRESENT_OFFSET, 6284 },
+  { 0x2f21, G_UNICODE_NOT_PRESENT_OFFSET, 6288 },
+  { 0x2f22, G_UNICODE_NOT_PRESENT_OFFSET, 6292 },
+  { 0x2f23, G_UNICODE_NOT_PRESENT_OFFSET, 6296 },
+  { 0x2f24, G_UNICODE_NOT_PRESENT_OFFSET, 6300 },
+  { 0x2f25, G_UNICODE_NOT_PRESENT_OFFSET, 6304 },
+  { 0x2f26, G_UNICODE_NOT_PRESENT_OFFSET, 6308 },
+  { 0x2f27, G_UNICODE_NOT_PRESENT_OFFSET, 6312 },
+  { 0x2f28, G_UNICODE_NOT_PRESENT_OFFSET, 6316 },
+  { 0x2f29, G_UNICODE_NOT_PRESENT_OFFSET, 6320 },
+  { 0x2f2a, G_UNICODE_NOT_PRESENT_OFFSET, 6324 },
+  { 0x2f2b, G_UNICODE_NOT_PRESENT_OFFSET, 6328 },
+  { 0x2f2c, G_UNICODE_NOT_PRESENT_OFFSET, 6332 },
+  { 0x2f2d, G_UNICODE_NOT_PRESENT_OFFSET, 6336 },
+  { 0x2f2e, G_UNICODE_NOT_PRESENT_OFFSET, 6340 },
+  { 0x2f2f, G_UNICODE_NOT_PRESENT_OFFSET, 6344 },
+  { 0x2f30, G_UNICODE_NOT_PRESENT_OFFSET, 6348 },
+  { 0x2f31, G_UNICODE_NOT_PRESENT_OFFSET, 6352 },
+  { 0x2f32, G_UNICODE_NOT_PRESENT_OFFSET, 6356 },
+  { 0x2f33, G_UNICODE_NOT_PRESENT_OFFSET, 6360 },
+  { 0x2f34, G_UNICODE_NOT_PRESENT_OFFSET, 6364 },
+  { 0x2f35, G_UNICODE_NOT_PRESENT_OFFSET, 6368 },
+  { 0x2f36, G_UNICODE_NOT_PRESENT_OFFSET, 6372 },
+  { 0x2f37, G_UNICODE_NOT_PRESENT_OFFSET, 6376 },
+  { 0x2f38, G_UNICODE_NOT_PRESENT_OFFSET, 6380 },
+  { 0x2f39, G_UNICODE_NOT_PRESENT_OFFSET, 6384 },
+  { 0x2f3a, G_UNICODE_NOT_PRESENT_OFFSET, 6388 },
+  { 0x2f3b, G_UNICODE_NOT_PRESENT_OFFSET, 6392 },
+  { 0x2f3c, G_UNICODE_NOT_PRESENT_OFFSET, 6396 },
+  { 0x2f3d, G_UNICODE_NOT_PRESENT_OFFSET, 6400 },
+  { 0x2f3e, G_UNICODE_NOT_PRESENT_OFFSET, 6404 },
+  { 0x2f3f, G_UNICODE_NOT_PRESENT_OFFSET, 6408 },
+  { 0x2f40, G_UNICODE_NOT_PRESENT_OFFSET, 6412 },
+  { 0x2f41, G_UNICODE_NOT_PRESENT_OFFSET, 6416 },
+  { 0x2f42, G_UNICODE_NOT_PRESENT_OFFSET, 6420 },
+  { 0x2f43, G_UNICODE_NOT_PRESENT_OFFSET, 6424 },
+  { 0x2f44, G_UNICODE_NOT_PRESENT_OFFSET, 6428 },
+  { 0x2f45, G_UNICODE_NOT_PRESENT_OFFSET, 6432 },
+  { 0x2f46, G_UNICODE_NOT_PRESENT_OFFSET, 6436 },
+  { 0x2f47, G_UNICODE_NOT_PRESENT_OFFSET, 6440 },
+  { 0x2f48, G_UNICODE_NOT_PRESENT_OFFSET, 6444 },
+  { 0x2f49, G_UNICODE_NOT_PRESENT_OFFSET, 6448 },
+  { 0x2f4a, G_UNICODE_NOT_PRESENT_OFFSET, 6452 },
+  { 0x2f4b, G_UNICODE_NOT_PRESENT_OFFSET, 6456 },
+  { 0x2f4c, G_UNICODE_NOT_PRESENT_OFFSET, 6460 },
+  { 0x2f4d, G_UNICODE_NOT_PRESENT_OFFSET, 6464 },
+  { 0x2f4e, G_UNICODE_NOT_PRESENT_OFFSET, 6468 },
+  { 0x2f4f, G_UNICODE_NOT_PRESENT_OFFSET, 6472 },
+  { 0x2f50, G_UNICODE_NOT_PRESENT_OFFSET, 6476 },
+  { 0x2f51, G_UNICODE_NOT_PRESENT_OFFSET, 6480 },
+  { 0x2f52, G_UNICODE_NOT_PRESENT_OFFSET, 6484 },
+  { 0x2f53, G_UNICODE_NOT_PRESENT_OFFSET, 6488 },
+  { 0x2f54, G_UNICODE_NOT_PRESENT_OFFSET, 6492 },
+  { 0x2f55, G_UNICODE_NOT_PRESENT_OFFSET, 6496 },
+  { 0x2f56, G_UNICODE_NOT_PRESENT_OFFSET, 6500 },
+  { 0x2f57, G_UNICODE_NOT_PRESENT_OFFSET, 6504 },
+  { 0x2f58, G_UNICODE_NOT_PRESENT_OFFSET, 6508 },
+  { 0x2f59, G_UNICODE_NOT_PRESENT_OFFSET, 6512 },
+  { 0x2f5a, G_UNICODE_NOT_PRESENT_OFFSET, 6516 },
+  { 0x2f5b, G_UNICODE_NOT_PRESENT_OFFSET, 6520 },
+  { 0x2f5c, G_UNICODE_NOT_PRESENT_OFFSET, 6524 },
+  { 0x2f5d, G_UNICODE_NOT_PRESENT_OFFSET, 6528 },
+  { 0x2f5e, G_UNICODE_NOT_PRESENT_OFFSET, 6532 },
+  { 0x2f5f, G_UNICODE_NOT_PRESENT_OFFSET, 6536 },
+  { 0x2f60, G_UNICODE_NOT_PRESENT_OFFSET, 6540 },
+  { 0x2f61, G_UNICODE_NOT_PRESENT_OFFSET, 6544 },
+  { 0x2f62, G_UNICODE_NOT_PRESENT_OFFSET, 6548 },
+  { 0x2f63, G_UNICODE_NOT_PRESENT_OFFSET, 6552 },
+  { 0x2f64, G_UNICODE_NOT_PRESENT_OFFSET, 6556 },
+  { 0x2f65, G_UNICODE_NOT_PRESENT_OFFSET, 6560 },
+  { 0x2f66, G_UNICODE_NOT_PRESENT_OFFSET, 6564 },
+  { 0x2f67, G_UNICODE_NOT_PRESENT_OFFSET, 6568 },
+  { 0x2f68, G_UNICODE_NOT_PRESENT_OFFSET, 6572 },
+  { 0x2f69, G_UNICODE_NOT_PRESENT_OFFSET, 6576 },
+  { 0x2f6a, G_UNICODE_NOT_PRESENT_OFFSET, 6580 },
+  { 0x2f6b, G_UNICODE_NOT_PRESENT_OFFSET, 6584 },
+  { 0x2f6c, G_UNICODE_NOT_PRESENT_OFFSET, 6588 },
+  { 0x2f6d, G_UNICODE_NOT_PRESENT_OFFSET, 6592 },
+  { 0x2f6e, G_UNICODE_NOT_PRESENT_OFFSET, 6596 },
+  { 0x2f6f, G_UNICODE_NOT_PRESENT_OFFSET, 6600 },
+  { 0x2f70, G_UNICODE_NOT_PRESENT_OFFSET, 6604 },
+  { 0x2f71, G_UNICODE_NOT_PRESENT_OFFSET, 6608 },
+  { 0x2f72, G_UNICODE_NOT_PRESENT_OFFSET, 6612 },
+  { 0x2f73, G_UNICODE_NOT_PRESENT_OFFSET, 6616 },
+  { 0x2f74, G_UNICODE_NOT_PRESENT_OFFSET, 6620 },
+  { 0x2f75, G_UNICODE_NOT_PRESENT_OFFSET, 6624 },
+  { 0x2f76, G_UNICODE_NOT_PRESENT_OFFSET, 6628 },
+  { 0x2f77, G_UNICODE_NOT_PRESENT_OFFSET, 6632 },
+  { 0x2f78, G_UNICODE_NOT_PRESENT_OFFSET, 6636 },
+  { 0x2f79, G_UNICODE_NOT_PRESENT_OFFSET, 6640 },
+  { 0x2f7a, G_UNICODE_NOT_PRESENT_OFFSET, 6644 },
+  { 0x2f7b, G_UNICODE_NOT_PRESENT_OFFSET, 6648 },
+  { 0x2f7c, G_UNICODE_NOT_PRESENT_OFFSET, 6652 },
+  { 0x2f7d, G_UNICODE_NOT_PRESENT_OFFSET, 6656 },
+  { 0x2f7e, G_UNICODE_NOT_PRESENT_OFFSET, 6660 },
+  { 0x2f7f, G_UNICODE_NOT_PRESENT_OFFSET, 6664 },
+  { 0x2f80, G_UNICODE_NOT_PRESENT_OFFSET, 6668 },
+  { 0x2f81, G_UNICODE_NOT_PRESENT_OFFSET, 6672 },
+  { 0x2f82, G_UNICODE_NOT_PRESENT_OFFSET, 6676 },
+  { 0x2f83, G_UNICODE_NOT_PRESENT_OFFSET, 6680 },
+  { 0x2f84, G_UNICODE_NOT_PRESENT_OFFSET, 6684 },
+  { 0x2f85, G_UNICODE_NOT_PRESENT_OFFSET, 6688 },
+  { 0x2f86, G_UNICODE_NOT_PRESENT_OFFSET, 6692 },
+  { 0x2f87, G_UNICODE_NOT_PRESENT_OFFSET, 6696 },
+  { 0x2f88, G_UNICODE_NOT_PRESENT_OFFSET, 6700 },
+  { 0x2f89, G_UNICODE_NOT_PRESENT_OFFSET, 6704 },
+  { 0x2f8a, G_UNICODE_NOT_PRESENT_OFFSET, 6708 },
+  { 0x2f8b, G_UNICODE_NOT_PRESENT_OFFSET, 6712 },
+  { 0x2f8c, G_UNICODE_NOT_PRESENT_OFFSET, 6716 },
+  { 0x2f8d, G_UNICODE_NOT_PRESENT_OFFSET, 6720 },
+  { 0x2f8e, G_UNICODE_NOT_PRESENT_OFFSET, 6724 },
+  { 0x2f8f, G_UNICODE_NOT_PRESENT_OFFSET, 6728 },
+  { 0x2f90, G_UNICODE_NOT_PRESENT_OFFSET, 6732 },
+  { 0x2f91, G_UNICODE_NOT_PRESENT_OFFSET, 6736 },
+  { 0x2f92, G_UNICODE_NOT_PRESENT_OFFSET, 6740 },
+  { 0x2f93, G_UNICODE_NOT_PRESENT_OFFSET, 6744 },
+  { 0x2f94, G_UNICODE_NOT_PRESENT_OFFSET, 6748 },
+  { 0x2f95, G_UNICODE_NOT_PRESENT_OFFSET, 6752 },
+  { 0x2f96, G_UNICODE_NOT_PRESENT_OFFSET, 6756 },
+  { 0x2f97, G_UNICODE_NOT_PRESENT_OFFSET, 6760 },
+  { 0x2f98, G_UNICODE_NOT_PRESENT_OFFSET, 6764 },
+  { 0x2f99, G_UNICODE_NOT_PRESENT_OFFSET, 6768 },
+  { 0x2f9a, G_UNICODE_NOT_PRESENT_OFFSET, 6772 },
+  { 0x2f9b, G_UNICODE_NOT_PRESENT_OFFSET, 6776 },
+  { 0x2f9c, G_UNICODE_NOT_PRESENT_OFFSET, 6780 },
+  { 0x2f9d, G_UNICODE_NOT_PRESENT_OFFSET, 6784 },
+  { 0x2f9e, G_UNICODE_NOT_PRESENT_OFFSET, 6788 },
+  { 0x2f9f, G_UNICODE_NOT_PRESENT_OFFSET, 6792 },
+  { 0x2fa0, G_UNICODE_NOT_PRESENT_OFFSET, 6796 },
+  { 0x2fa1, G_UNICODE_NOT_PRESENT_OFFSET, 6800 },
+  { 0x2fa2, G_UNICODE_NOT_PRESENT_OFFSET, 6804 },
+  { 0x2fa3, G_UNICODE_NOT_PRESENT_OFFSET, 6808 },
+  { 0x2fa4, G_UNICODE_NOT_PRESENT_OFFSET, 6812 },
+  { 0x2fa5, G_UNICODE_NOT_PRESENT_OFFSET, 6816 },
+  { 0x2fa6, G_UNICODE_NOT_PRESENT_OFFSET, 6820 },
+  { 0x2fa7, G_UNICODE_NOT_PRESENT_OFFSET, 6824 },
+  { 0x2fa8, G_UNICODE_NOT_PRESENT_OFFSET, 6828 },
+  { 0x2fa9, G_UNICODE_NOT_PRESENT_OFFSET, 6832 },
+  { 0x2faa, G_UNICODE_NOT_PRESENT_OFFSET, 6836 },
+  { 0x2fab, G_UNICODE_NOT_PRESENT_OFFSET, 6840 },
+  { 0x2fac, G_UNICODE_NOT_PRESENT_OFFSET, 6844 },
+  { 0x2fad, G_UNICODE_NOT_PRESENT_OFFSET, 6848 },
+  { 0x2fae, G_UNICODE_NOT_PRESENT_OFFSET, 6852 },
+  { 0x2faf, G_UNICODE_NOT_PRESENT_OFFSET, 6856 },
+  { 0x2fb0, G_UNICODE_NOT_PRESENT_OFFSET, 6860 },
+  { 0x2fb1, G_UNICODE_NOT_PRESENT_OFFSET, 6864 },
+  { 0x2fb2, G_UNICODE_NOT_PRESENT_OFFSET, 6868 },
+  { 0x2fb3, G_UNICODE_NOT_PRESENT_OFFSET, 6872 },
+  { 0x2fb4, G_UNICODE_NOT_PRESENT_OFFSET, 6876 },
+  { 0x2fb5, G_UNICODE_NOT_PRESENT_OFFSET, 6880 },
+  { 0x2fb6, G_UNICODE_NOT_PRESENT_OFFSET, 6884 },
+  { 0x2fb7, G_UNICODE_NOT_PRESENT_OFFSET, 6888 },
+  { 0x2fb8, G_UNICODE_NOT_PRESENT_OFFSET, 6892 },
+  { 0x2fb9, G_UNICODE_NOT_PRESENT_OFFSET, 6896 },
+  { 0x2fba, G_UNICODE_NOT_PRESENT_OFFSET, 6900 },
+  { 0x2fbb, G_UNICODE_NOT_PRESENT_OFFSET, 6904 },
+  { 0x2fbc, G_UNICODE_NOT_PRESENT_OFFSET, 6908 },
+  { 0x2fbd, G_UNICODE_NOT_PRESENT_OFFSET, 6912 },
+  { 0x2fbe, G_UNICODE_NOT_PRESENT_OFFSET, 6916 },
+  { 0x2fbf, G_UNICODE_NOT_PRESENT_OFFSET, 6920 },
+  { 0x2fc0, G_UNICODE_NOT_PRESENT_OFFSET, 6924 },
+  { 0x2fc1, G_UNICODE_NOT_PRESENT_OFFSET, 6928 },
+  { 0x2fc2, G_UNICODE_NOT_PRESENT_OFFSET, 6932 },
+  { 0x2fc3, G_UNICODE_NOT_PRESENT_OFFSET, 6936 },
+  { 0x2fc4, G_UNICODE_NOT_PRESENT_OFFSET, 6940 },
+  { 0x2fc5, G_UNICODE_NOT_PRESENT_OFFSET, 6944 },
+  { 0x2fc6, G_UNICODE_NOT_PRESENT_OFFSET, 6948 },
+  { 0x2fc7, G_UNICODE_NOT_PRESENT_OFFSET, 6952 },
+  { 0x2fc8, G_UNICODE_NOT_PRESENT_OFFSET, 6956 },
+  { 0x2fc9, G_UNICODE_NOT_PRESENT_OFFSET, 6960 },
+  { 0x2fca, G_UNICODE_NOT_PRESENT_OFFSET, 6964 },
+  { 0x2fcb, G_UNICODE_NOT_PRESENT_OFFSET, 6968 },
+  { 0x2fcc, G_UNICODE_NOT_PRESENT_OFFSET, 6972 },
+  { 0x2fcd, G_UNICODE_NOT_PRESENT_OFFSET, 6976 },
+  { 0x2fce, G_UNICODE_NOT_PRESENT_OFFSET, 6980 },
+  { 0x2fcf, G_UNICODE_NOT_PRESENT_OFFSET, 6984 },
+  { 0x2fd0, G_UNICODE_NOT_PRESENT_OFFSET, 6988 },
+  { 0x2fd1, G_UNICODE_NOT_PRESENT_OFFSET, 6992 },
+  { 0x2fd2, G_UNICODE_NOT_PRESENT_OFFSET, 6996 },
+  { 0x2fd3, G_UNICODE_NOT_PRESENT_OFFSET, 7000 },
+  { 0x2fd4, G_UNICODE_NOT_PRESENT_OFFSET, 7004 },
+  { 0x2fd5, G_UNICODE_NOT_PRESENT_OFFSET, 7008 },
+  { 0x3000, G_UNICODE_NOT_PRESENT_OFFSET, 0 },
+  { 0x3036, G_UNICODE_NOT_PRESENT_OFFSET, 7012 },
+  { 0x3038, G_UNICODE_NOT_PRESENT_OFFSET, 6248 },
+  { 0x3039, G_UNICODE_NOT_PRESENT_OFFSET, 7016 },
+  { 0x303a, G_UNICODE_NOT_PRESENT_OFFSET, 7020 },
+  { 0x304c, 7024, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x304e, 7031, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3050, 7038, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3052, 7045, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3054, 7052, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3056, 7059, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3058, 7066, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x305a, 7073, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x305c, 7080, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x305e, 7087, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3060, 7094, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3062, 7101, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3065, 7108, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3067, 7115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3069, 7122, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3070, 7129, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3071, 7136, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3073, 7143, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3074, 7150, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3076, 7157, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3077, 7164, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3079, 7171, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x307a, 7178, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x307c, 7185, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x307d, 7192, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x3094, 7199, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x309b, G_UNICODE_NOT_PRESENT_OFFSET, 7206 },
+  { 0x309c, G_UNICODE_NOT_PRESENT_OFFSET, 7211 },
+  { 0x309e, 7216, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x309f, G_UNICODE_NOT_PRESENT_OFFSET, 7223 },
+  { 0x30ac, 7230, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30ae, 7237, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30b0, 7244, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30b2, 7251, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30b4, 7258, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30b6, 7265, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30b8, 7272, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30ba, 7279, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30bc, 7286, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30be, 7293, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30c0, 7300, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30c2, 7307, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30c5, 7314, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30c7, 7321, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30c9, 7328, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d0, 7335, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d1, 7342, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d3, 7349, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d4, 7356, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d6, 7363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d7, 7370, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30d9, 7377, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30da, 7384, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30dc, 7391, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30dd, 7398, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30f4, 7405, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30f7, 7412, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30f8, 7419, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30f9, 7426, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30fa, 7433, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30fe, 7440, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x30ff, G_UNICODE_NOT_PRESENT_OFFSET, 7447 },
+  { 0x3131, G_UNICODE_NOT_PRESENT_OFFSET, 7454 },
+  { 0x3132, G_UNICODE_NOT_PRESENT_OFFSET, 7458 },
+  { 0x3133, G_UNICODE_NOT_PRESENT_OFFSET, 7462 },
+  { 0x3134, G_UNICODE_NOT_PRESENT_OFFSET, 7466 },
+  { 0x3135, G_UNICODE_NOT_PRESENT_OFFSET, 7470 },
+  { 0x3136, G_UNICODE_NOT_PRESENT_OFFSET, 7474 },
+  { 0x3137, G_UNICODE_NOT_PRESENT_OFFSET, 7478 },
+  { 0x3138, G_UNICODE_NOT_PRESENT_OFFSET, 7482 },
+  { 0x3139, G_UNICODE_NOT_PRESENT_OFFSET, 7486 },
+  { 0x313a, G_UNICODE_NOT_PRESENT_OFFSET, 7490 },
+  { 0x313b, G_UNICODE_NOT_PRESENT_OFFSET, 7494 },
+  { 0x313c, G_UNICODE_NOT_PRESENT_OFFSET, 7498 },
+  { 0x313d, G_UNICODE_NOT_PRESENT_OFFSET, 7502 },
+  { 0x313e, G_UNICODE_NOT_PRESENT_OFFSET, 7506 },
+  { 0x313f, G_UNICODE_NOT_PRESENT_OFFSET, 7510 },
+  { 0x3140, G_UNICODE_NOT_PRESENT_OFFSET, 7514 },
+  { 0x3141, G_UNICODE_NOT_PRESENT_OFFSET, 7518 },
+  { 0x3142, G_UNICODE_NOT_PRESENT_OFFSET, 7522 },
+  { 0x3143, G_UNICODE_NOT_PRESENT_OFFSET, 7526 },
+  { 0x3144, G_UNICODE_NOT_PRESENT_OFFSET, 7530 },
+  { 0x3145, G_UNICODE_NOT_PRESENT_OFFSET, 7534 },
+  { 0x3146, G_UNICODE_NOT_PRESENT_OFFSET, 7538 },
+  { 0x3147, G_UNICODE_NOT_PRESENT_OFFSET, 7542 },
+  { 0x3148, G_UNICODE_NOT_PRESENT_OFFSET, 7546 },
+  { 0x3149, G_UNICODE_NOT_PRESENT_OFFSET, 7550 },
+  { 0x314a, G_UNICODE_NOT_PRESENT_OFFSET, 7554 },
+  { 0x314b, G_UNICODE_NOT_PRESENT_OFFSET, 7558 },
+  { 0x314c, G_UNICODE_NOT_PRESENT_OFFSET, 7562 },
+  { 0x314d, G_UNICODE_NOT_PRESENT_OFFSET, 7566 },
+  { 0x314e, G_UNICODE_NOT_PRESENT_OFFSET, 7570 },
+  { 0x314f, G_UNICODE_NOT_PRESENT_OFFSET, 7574 },
+  { 0x3150, G_UNICODE_NOT_PRESENT_OFFSET, 7578 },
+  { 0x3151, G_UNICODE_NOT_PRESENT_OFFSET, 7582 },
+  { 0x3152, G_UNICODE_NOT_PRESENT_OFFSET, 7586 },
+  { 0x3153, G_UNICODE_NOT_PRESENT_OFFSET, 7590 },
+  { 0x3154, G_UNICODE_NOT_PRESENT_OFFSET, 7594 },
+  { 0x3155, G_UNICODE_NOT_PRESENT_OFFSET, 7598 },
+  { 0x3156, G_UNICODE_NOT_PRESENT_OFFSET, 7602 },
+  { 0x3157, G_UNICODE_NOT_PRESENT_OFFSET, 7606 },
+  { 0x3158, G_UNICODE_NOT_PRESENT_OFFSET, 7610 },
+  { 0x3159, G_UNICODE_NOT_PRESENT_OFFSET, 7614 },
+  { 0x315a, G_UNICODE_NOT_PRESENT_OFFSET, 7618 },
+  { 0x315b, G_UNICODE_NOT_PRESENT_OFFSET, 7622 },
+  { 0x315c, G_UNICODE_NOT_PRESENT_OFFSET, 7626 },
+  { 0x315d, G_UNICODE_NOT_PRESENT_OFFSET, 7630 },
+  { 0x315e, G_UNICODE_NOT_PRESENT_OFFSET, 7634 },
+  { 0x315f, G_UNICODE_NOT_PRESENT_OFFSET, 7638 },
+  { 0x3160, G_UNICODE_NOT_PRESENT_OFFSET, 7642 },
+  { 0x3161, G_UNICODE_NOT_PRESENT_OFFSET, 7646 },
+  { 0x3162, G_UNICODE_NOT_PRESENT_OFFSET, 7650 },
+  { 0x3163, G_UNICODE_NOT_PRESENT_OFFSET, 7654 },
+  { 0x3164, G_UNICODE_NOT_PRESENT_OFFSET, 7658 },
+  { 0x3165, G_UNICODE_NOT_PRESENT_OFFSET, 7662 },
+  { 0x3166, G_UNICODE_NOT_PRESENT_OFFSET, 7666 },
+  { 0x3167, G_UNICODE_NOT_PRESENT_OFFSET, 7670 },
+  { 0x3168, G_UNICODE_NOT_PRESENT_OFFSET, 7674 },
+  { 0x3169, G_UNICODE_NOT_PRESENT_OFFSET, 7678 },
+  { 0x316a, G_UNICODE_NOT_PRESENT_OFFSET, 7682 },
+  { 0x316b, G_UNICODE_NOT_PRESENT_OFFSET, 7686 },
+  { 0x316c, G_UNICODE_NOT_PRESENT_OFFSET, 7690 },
+  { 0x316d, G_UNICODE_NOT_PRESENT_OFFSET, 7694 },
+  { 0x316e, G_UNICODE_NOT_PRESENT_OFFSET, 7698 },
+  { 0x316f, G_UNICODE_NOT_PRESENT_OFFSET, 7702 },
+  { 0x3170, G_UNICODE_NOT_PRESENT_OFFSET, 7706 },
+  { 0x3171, G_UNICODE_NOT_PRESENT_OFFSET, 7710 },
+  { 0x3172, G_UNICODE_NOT_PRESENT_OFFSET, 7714 },
+  { 0x3173, G_UNICODE_NOT_PRESENT_OFFSET, 7718 },
+  { 0x3174, G_UNICODE_NOT_PRESENT_OFFSET, 7722 },
+  { 0x3175, G_UNICODE_NOT_PRESENT_OFFSET, 7726 },
+  { 0x3176, G_UNICODE_NOT_PRESENT_OFFSET, 7730 },
+  { 0x3177, G_UNICODE_NOT_PRESENT_OFFSET, 7734 },
+  { 0x3178, G_UNICODE_NOT_PRESENT_OFFSET, 7738 },
+  { 0x3179, G_UNICODE_NOT_PRESENT_OFFSET, 7742 },
+  { 0x317a, G_UNICODE_NOT_PRESENT_OFFSET, 7746 },
+  { 0x317b, G_UNICODE_NOT_PRESENT_OFFSET, 7750 },
+  { 0x317c, G_UNICODE_NOT_PRESENT_OFFSET, 7754 },
+  { 0x317d, G_UNICODE_NOT_PRESENT_OFFSET, 7758 },
+  { 0x317e, G_UNICODE_NOT_PRESENT_OFFSET, 7762 },
+  { 0x317f, G_UNICODE_NOT_PRESENT_OFFSET, 7766 },
+  { 0x3180, G_UNICODE_NOT_PRESENT_OFFSET, 7770 },
+  { 0x3181, G_UNICODE_NOT_PRESENT_OFFSET, 7774 },
+  { 0x3182, G_UNICODE_NOT_PRESENT_OFFSET, 7778 },
+  { 0x3183, G_UNICODE_NOT_PRESENT_OFFSET, 7782 },
+  { 0x3184, G_UNICODE_NOT_PRESENT_OFFSET, 7786 },
+  { 0x3185, G_UNICODE_NOT_PRESENT_OFFSET, 7790 },
+  { 0x3186, G_UNICODE_NOT_PRESENT_OFFSET, 7794 },
+  { 0x3187, G_UNICODE_NOT_PRESENT_OFFSET, 7798 },
+  { 0x3188, G_UNICODE_NOT_PRESENT_OFFSET, 7802 },
+  { 0x3189, G_UNICODE_NOT_PRESENT_OFFSET, 7806 },
+  { 0x318a, G_UNICODE_NOT_PRESENT_OFFSET, 7810 },
+  { 0x318b, G_UNICODE_NOT_PRESENT_OFFSET, 7814 },
+  { 0x318c, G_UNICODE_NOT_PRESENT_OFFSET, 7818 },
+  { 0x318d, G_UNICODE_NOT_PRESENT_OFFSET, 7822 },
+  { 0x318e, G_UNICODE_NOT_PRESENT_OFFSET, 7826 },
+  { 0x3192, G_UNICODE_NOT_PRESENT_OFFSET, 6156 },
+  { 0x3193, G_UNICODE_NOT_PRESENT_OFFSET, 6180 },
+  { 0x3194, G_UNICODE_NOT_PRESENT_OFFSET, 7830 },
+  { 0x3195, G_UNICODE_NOT_PRESENT_OFFSET, 7834 },
+  { 0x3196, G_UNICODE_NOT_PRESENT_OFFSET, 7838 },
+  { 0x3197, G_UNICODE_NOT_PRESENT_OFFSET, 7842 },
+  { 0x3198, G_UNICODE_NOT_PRESENT_OFFSET, 7846 },
+  { 0x3199, G_UNICODE_NOT_PRESENT_OFFSET, 7850 },
+  { 0x319a, G_UNICODE_NOT_PRESENT_OFFSET, 6172 },
+  { 0x319b, G_UNICODE_NOT_PRESENT_OFFSET, 7854 },
+  { 0x319c, G_UNICODE_NOT_PRESENT_OFFSET, 7858 },
+  { 0x319d, G_UNICODE_NOT_PRESENT_OFFSET, 7862 },
+  { 0x319e, G_UNICODE_NOT_PRESENT_OFFSET, 7866 },
+  { 0x319f, G_UNICODE_NOT_PRESENT_OFFSET, 6188 },
+  { 0x3200, G_UNICODE_NOT_PRESENT_OFFSET, 7870 },
+  { 0x3201, G_UNICODE_NOT_PRESENT_OFFSET, 7876 },
+  { 0x3202, G_UNICODE_NOT_PRESENT_OFFSET, 7882 },
+  { 0x3203, G_UNICODE_NOT_PRESENT_OFFSET, 7888 },
+  { 0x3204, G_UNICODE_NOT_PRESENT_OFFSET, 7894 },
+  { 0x3205, G_UNICODE_NOT_PRESENT_OFFSET, 7900 },
+  { 0x3206, G_UNICODE_NOT_PRESENT_OFFSET, 7906 },
+  { 0x3207, G_UNICODE_NOT_PRESENT_OFFSET, 7912 },
+  { 0x3208, G_UNICODE_NOT_PRESENT_OFFSET, 7918 },
+  { 0x3209, G_UNICODE_NOT_PRESENT_OFFSET, 7924 },
+  { 0x320a, G_UNICODE_NOT_PRESENT_OFFSET, 7930 },
+  { 0x320b, G_UNICODE_NOT_PRESENT_OFFSET, 7936 },
+  { 0x320c, G_UNICODE_NOT_PRESENT_OFFSET, 7942 },
+  { 0x320d, G_UNICODE_NOT_PRESENT_OFFSET, 7948 },
+  { 0x320e, G_UNICODE_NOT_PRESENT_OFFSET, 7954 },
+  { 0x320f, G_UNICODE_NOT_PRESENT_OFFSET, 7963 },
+  { 0x3210, G_UNICODE_NOT_PRESENT_OFFSET, 7972 },
+  { 0x3211, G_UNICODE_NOT_PRESENT_OFFSET, 7981 },
+  { 0x3212, G_UNICODE_NOT_PRESENT_OFFSET, 7990 },
+  { 0x3213, G_UNICODE_NOT_PRESENT_OFFSET, 7999 },
+  { 0x3214, G_UNICODE_NOT_PRESENT_OFFSET, 8008 },
+  { 0x3215, G_UNICODE_NOT_PRESENT_OFFSET, 8017 },
+  { 0x3216, G_UNICODE_NOT_PRESENT_OFFSET, 8026 },
+  { 0x3217, G_UNICODE_NOT_PRESENT_OFFSET, 8035 },
+  { 0x3218, G_UNICODE_NOT_PRESENT_OFFSET, 8044 },
+  { 0x3219, G_UNICODE_NOT_PRESENT_OFFSET, 8053 },
+  { 0x321a, G_UNICODE_NOT_PRESENT_OFFSET, 8062 },
+  { 0x321b, G_UNICODE_NOT_PRESENT_OFFSET, 8071 },
+  { 0x321c, G_UNICODE_NOT_PRESENT_OFFSET, 8080 },
+  { 0x321d, G_UNICODE_NOT_PRESENT_OFFSET, 8089 },
+  { 0x321e, G_UNICODE_NOT_PRESENT_OFFSET, 8107 },
+  { 0x3220, G_UNICODE_NOT_PRESENT_OFFSET, 8122 },
+  { 0x3221, G_UNICODE_NOT_PRESENT_OFFSET, 8128 },
+  { 0x3222, G_UNICODE_NOT_PRESENT_OFFSET, 8134 },
+  { 0x3223, G_UNICODE_NOT_PRESENT_OFFSET, 8140 },
+  { 0x3224, G_UNICODE_NOT_PRESENT_OFFSET, 8146 },
+  { 0x3225, G_UNICODE_NOT_PRESENT_OFFSET, 8152 },
+  { 0x3226, G_UNICODE_NOT_PRESENT_OFFSET, 8158 },
+  { 0x3227, G_UNICODE_NOT_PRESENT_OFFSET, 8164 },
+  { 0x3228, G_UNICODE_NOT_PRESENT_OFFSET, 8170 },
+  { 0x3229, G_UNICODE_NOT_PRESENT_OFFSET, 8176 },
+  { 0x322a, G_UNICODE_NOT_PRESENT_OFFSET, 8182 },
+  { 0x322b, G_UNICODE_NOT_PRESENT_OFFSET, 8188 },
+  { 0x322c, G_UNICODE_NOT_PRESENT_OFFSET, 8194 },
+  { 0x322d, G_UNICODE_NOT_PRESENT_OFFSET, 8200 },
+  { 0x322e, G_UNICODE_NOT_PRESENT_OFFSET, 8206 },
+  { 0x322f, G_UNICODE_NOT_PRESENT_OFFSET, 8212 },
+  { 0x3230, G_UNICODE_NOT_PRESENT_OFFSET, 8218 },
+  { 0x3231, G_UNICODE_NOT_PRESENT_OFFSET, 8224 },
+  { 0x3232, G_UNICODE_NOT_PRESENT_OFFSET, 8230 },
+  { 0x3233, G_UNICODE_NOT_PRESENT_OFFSET, 8236 },
+  { 0x3234, G_UNICODE_NOT_PRESENT_OFFSET, 8242 },
+  { 0x3235, G_UNICODE_NOT_PRESENT_OFFSET, 8248 },
+  { 0x3236, G_UNICODE_NOT_PRESENT_OFFSET, 8254 },
+  { 0x3237, G_UNICODE_NOT_PRESENT_OFFSET, 8260 },
+  { 0x3238, G_UNICODE_NOT_PRESENT_OFFSET, 8266 },
+  { 0x3239, G_UNICODE_NOT_PRESENT_OFFSET, 8272 },
+  { 0x323a, G_UNICODE_NOT_PRESENT_OFFSET, 8278 },
+  { 0x323b, G_UNICODE_NOT_PRESENT_OFFSET, 8284 },
+  { 0x323c, G_UNICODE_NOT_PRESENT_OFFSET, 8290 },
+  { 0x323d, G_UNICODE_NOT_PRESENT_OFFSET, 8296 },
+  { 0x323e, G_UNICODE_NOT_PRESENT_OFFSET, 8302 },
+  { 0x323f, G_UNICODE_NOT_PRESENT_OFFSET, 8308 },
+  { 0x3240, G_UNICODE_NOT_PRESENT_OFFSET, 8314 },
+  { 0x3241, G_UNICODE_NOT_PRESENT_OFFSET, 8320 },
+  { 0x3242, G_UNICODE_NOT_PRESENT_OFFSET, 8326 },
+  { 0x3243, G_UNICODE_NOT_PRESENT_OFFSET, 8332 },
+  { 0x3250, G_UNICODE_NOT_PRESENT_OFFSET, 8338 },
+  { 0x3251, G_UNICODE_NOT_PRESENT_OFFSET, 8342 },
+  { 0x3252, G_UNICODE_NOT_PRESENT_OFFSET, 8345 },
+  { 0x3253, G_UNICODE_NOT_PRESENT_OFFSET, 8348 },
+  { 0x3254, G_UNICODE_NOT_PRESENT_OFFSET, 8351 },
+  { 0x3255, G_UNICODE_NOT_PRESENT_OFFSET, 8354 },
+  { 0x3256, G_UNICODE_NOT_PRESENT_OFFSET, 8357 },
+  { 0x3257, G_UNICODE_NOT_PRESENT_OFFSET, 8360 },
+  { 0x3258, G_UNICODE_NOT_PRESENT_OFFSET, 8363 },
+  { 0x3259, G_UNICODE_NOT_PRESENT_OFFSET, 8366 },
+  { 0x325a, G_UNICODE_NOT_PRESENT_OFFSET, 8369 },
+  { 0x325b, G_UNICODE_NOT_PRESENT_OFFSET, 8372 },
+  { 0x325c, G_UNICODE_NOT_PRESENT_OFFSET, 8375 },
+  { 0x325d, G_UNICODE_NOT_PRESENT_OFFSET, 8378 },
+  { 0x325e, G_UNICODE_NOT_PRESENT_OFFSET, 8381 },
+  { 0x325f, G_UNICODE_NOT_PRESENT_OFFSET, 8384 },
+  { 0x3260, G_UNICODE_NOT_PRESENT_OFFSET, 7454 },
+  { 0x3261, G_UNICODE_NOT_PRESENT_OFFSET, 7466 },
+  { 0x3262, G_UNICODE_NOT_PRESENT_OFFSET, 7478 },
+  { 0x3263, G_UNICODE_NOT_PRESENT_OFFSET, 7486 },
+  { 0x3264, G_UNICODE_NOT_PRESENT_OFFSET, 7518 },
+  { 0x3265, G_UNICODE_NOT_PRESENT_OFFSET, 7522 },
+  { 0x3266, G_UNICODE_NOT_PRESENT_OFFSET, 7534 },
+  { 0x3267, G_UNICODE_NOT_PRESENT_OFFSET, 7542 },
+  { 0x3268, G_UNICODE_NOT_PRESENT_OFFSET, 7546 },
+  { 0x3269, G_UNICODE_NOT_PRESENT_OFFSET, 7554 },
+  { 0x326a, G_UNICODE_NOT_PRESENT_OFFSET, 7558 },
+  { 0x326b, G_UNICODE_NOT_PRESENT_OFFSET, 7562 },
+  { 0x326c, G_UNICODE_NOT_PRESENT_OFFSET, 7566 },
+  { 0x326d, G_UNICODE_NOT_PRESENT_OFFSET, 7570 },
+  { 0x326e, G_UNICODE_NOT_PRESENT_OFFSET, 8387 },
+  { 0x326f, G_UNICODE_NOT_PRESENT_OFFSET, 8394 },
+  { 0x3270, G_UNICODE_NOT_PRESENT_OFFSET, 8401 },
+  { 0x3271, G_UNICODE_NOT_PRESENT_OFFSET, 8408 },
+  { 0x3272, G_UNICODE_NOT_PRESENT_OFFSET, 8415 },
+  { 0x3273, G_UNICODE_NOT_PRESENT_OFFSET, 8422 },
+  { 0x3274, G_UNICODE_NOT_PRESENT_OFFSET, 8429 },
+  { 0x3275, G_UNICODE_NOT_PRESENT_OFFSET, 8436 },
+  { 0x3276, G_UNICODE_NOT_PRESENT_OFFSET, 8443 },
+  { 0x3277, G_UNICODE_NOT_PRESENT_OFFSET, 8450 },
+  { 0x3278, G_UNICODE_NOT_PRESENT_OFFSET, 8457 },
+  { 0x3279, G_UNICODE_NOT_PRESENT_OFFSET, 8464 },
+  { 0x327a, G_UNICODE_NOT_PRESENT_OFFSET, 8471 },
+  { 0x327b, G_UNICODE_NOT_PRESENT_OFFSET, 8478 },
+  { 0x327c, G_UNICODE_NOT_PRESENT_OFFSET, 8485 },
+  { 0x327d, G_UNICODE_NOT_PRESENT_OFFSET, 8501 },
+  { 0x327e, G_UNICODE_NOT_PRESENT_OFFSET, 8514 },
+  { 0x3280, G_UNICODE_NOT_PRESENT_OFFSET, 6156 },
+  { 0x3281, G_UNICODE_NOT_PRESENT_OFFSET, 6180 },
+  { 0x3282, G_UNICODE_NOT_PRESENT_OFFSET, 7830 },
+  { 0x3283, G_UNICODE_NOT_PRESENT_OFFSET, 7834 },
+  { 0x3284, G_UNICODE_NOT_PRESENT_OFFSET, 8521 },
+  { 0x3285, G_UNICODE_NOT_PRESENT_OFFSET, 8525 },
+  { 0x3286, G_UNICODE_NOT_PRESENT_OFFSET, 8529 },
+  { 0x3287, G_UNICODE_NOT_PRESENT_OFFSET, 6200 },
+  { 0x3288, G_UNICODE_NOT_PRESENT_OFFSET, 8533 },
+  { 0x3289, G_UNICODE_NOT_PRESENT_OFFSET, 6248 },
+  { 0x328a, G_UNICODE_NOT_PRESENT_OFFSET, 6448 },
+  { 0x328b, G_UNICODE_NOT_PRESENT_OFFSET, 6496 },
+  { 0x328c, G_UNICODE_NOT_PRESENT_OFFSET, 6492 },
+  { 0x328d, G_UNICODE_NOT_PRESENT_OFFSET, 6452 },
+  { 0x328e, G_UNICODE_NOT_PRESENT_OFFSET, 6820 },
+  { 0x328f, G_UNICODE_NOT_PRESENT_OFFSET, 6280 },
+  { 0x3290, G_UNICODE_NOT_PRESENT_OFFSET, 6440 },
+  { 0x3291, G_UNICODE_NOT_PRESENT_OFFSET, 8537 },
+  { 0x3292, G_UNICODE_NOT_PRESENT_OFFSET, 8541 },
+  { 0x3293, G_UNICODE_NOT_PRESENT_OFFSET, 8545 },
+  { 0x3294, G_UNICODE_NOT_PRESENT_OFFSET, 8549 },
+  { 0x3295, G_UNICODE_NOT_PRESENT_OFFSET, 8553 },
+  { 0x3296, G_UNICODE_NOT_PRESENT_OFFSET, 8557 },
+  { 0x3297, G_UNICODE_NOT_PRESENT_OFFSET, 8561 },
+  { 0x3298, G_UNICODE_NOT_PRESENT_OFFSET, 8565 },
+  { 0x3299, G_UNICODE_NOT_PRESENT_OFFSET, 8569 },
+  { 0x329a, G_UNICODE_NOT_PRESENT_OFFSET, 8573 },
+  { 0x329b, G_UNICODE_NOT_PRESENT_OFFSET, 6304 },
+  { 0x329c, G_UNICODE_NOT_PRESENT_OFFSET, 8577 },
+  { 0x329d, G_UNICODE_NOT_PRESENT_OFFSET, 8581 },
+  { 0x329e, G_UNICODE_NOT_PRESENT_OFFSET, 8585 },
+  { 0x329f, G_UNICODE_NOT_PRESENT_OFFSET, 8589 },
+  { 0x32a0, G_UNICODE_NOT_PRESENT_OFFSET, 8593 },
+  { 0x32a1, G_UNICODE_NOT_PRESENT_OFFSET, 8597 },
+  { 0x32a2, G_UNICODE_NOT_PRESENT_OFFSET, 8601 },
+  { 0x32a3, G_UNICODE_NOT_PRESENT_OFFSET, 8605 },
+  { 0x32a4, G_UNICODE_NOT_PRESENT_OFFSET, 7838 },
+  { 0x32a5, G_UNICODE_NOT_PRESENT_OFFSET, 7842 },
+  { 0x32a6, G_UNICODE_NOT_PRESENT_OFFSET, 7846 },
+  { 0x32a7, G_UNICODE_NOT_PRESENT_OFFSET, 8609 },
+  { 0x32a8, G_UNICODE_NOT_PRESENT_OFFSET, 8613 },
+  { 0x32a9, G_UNICODE_NOT_PRESENT_OFFSET, 8617 },
+  { 0x32aa, G_UNICODE_NOT_PRESENT_OFFSET, 8621 },
+  { 0x32ab, G_UNICODE_NOT_PRESENT_OFFSET, 8625 },
+  { 0x32ac, G_UNICODE_NOT_PRESENT_OFFSET, 8629 },
+  { 0x32ad, G_UNICODE_NOT_PRESENT_OFFSET, 8633 },
+  { 0x32ae, G_UNICODE_NOT_PRESENT_OFFSET, 8637 },
+  { 0x32af, G_UNICODE_NOT_PRESENT_OFFSET, 8641 },
+  { 0x32b0, G_UNICODE_NOT_PRESENT_OFFSET, 8645 },
+  { 0x32b1, G_UNICODE_NOT_PRESENT_OFFSET, 8649 },
+  { 0x32b2, G_UNICODE_NOT_PRESENT_OFFSET, 8652 },
+  { 0x32b3, G_UNICODE_NOT_PRESENT_OFFSET, 8655 },
+  { 0x32b4, G_UNICODE_NOT_PRESENT_OFFSET, 8658 },
+  { 0x32b5, G_UNICODE_NOT_PRESENT_OFFSET, 8661 },
+  { 0x32b6, G_UNICODE_NOT_PRESENT_OFFSET, 8664 },
+  { 0x32b7, G_UNICODE_NOT_PRESENT_OFFSET, 8667 },
+  { 0x32b8, G_UNICODE_NOT_PRESENT_OFFSET, 8670 },
+  { 0x32b9, G_UNICODE_NOT_PRESENT_OFFSET, 8673 },
+  { 0x32ba, G_UNICODE_NOT_PRESENT_OFFSET, 8676 },
+  { 0x32bb, G_UNICODE_NOT_PRESENT_OFFSET, 8679 },
+  { 0x32bc, G_UNICODE_NOT_PRESENT_OFFSET, 8682 },
+  { 0x32bd, G_UNICODE_NOT_PRESENT_OFFSET, 8685 },
+  { 0x32be, G_UNICODE_NOT_PRESENT_OFFSET, 8688 },
+  { 0x32bf, G_UNICODE_NOT_PRESENT_OFFSET, 8691 },
+  { 0x32c0, G_UNICODE_NOT_PRESENT_OFFSET, 8694 },
+  { 0x32c1, G_UNICODE_NOT_PRESENT_OFFSET, 8699 },
+  { 0x32c2, G_UNICODE_NOT_PRESENT_OFFSET, 8704 },
+  { 0x32c3, G_UNICODE_NOT_PRESENT_OFFSET, 8709 },
+  { 0x32c4, G_UNICODE_NOT_PRESENT_OFFSET, 8714 },
+  { 0x32c5, G_UNICODE_NOT_PRESENT_OFFSET, 8719 },
+  { 0x32c6, G_UNICODE_NOT_PRESENT_OFFSET, 8724 },
+  { 0x32c7, G_UNICODE_NOT_PRESENT_OFFSET, 8729 },
+  { 0x32c8, G_UNICODE_NOT_PRESENT_OFFSET, 8734 },
+  { 0x32c9, G_UNICODE_NOT_PRESENT_OFFSET, 8739 },
+  { 0x32ca, G_UNICODE_NOT_PRESENT_OFFSET, 8745 },
+  { 0x32cb, G_UNICODE_NOT_PRESENT_OFFSET, 8751 },
+  { 0x32cc, G_UNICODE_NOT_PRESENT_OFFSET, 8757 },
+  { 0x32cd, G_UNICODE_NOT_PRESENT_OFFSET, 8760 },
+  { 0x32ce, G_UNICODE_NOT_PRESENT_OFFSET, 8764 },
+  { 0x32cf, G_UNICODE_NOT_PRESENT_OFFSET, 8767 },
+  { 0x32d0, G_UNICODE_NOT_PRESENT_OFFSET, 8771 },
+  { 0x32d1, G_UNICODE_NOT_PRESENT_OFFSET, 8775 },
+  { 0x32d2, G_UNICODE_NOT_PRESENT_OFFSET, 8779 },
+  { 0x32d3, G_UNICODE_NOT_PRESENT_OFFSET, 8783 },
+  { 0x32d4, G_UNICODE_NOT_PRESENT_OFFSET, 8787 },
+  { 0x32d5, G_UNICODE_NOT_PRESENT_OFFSET, 8791 },
+  { 0x32d6, G_UNICODE_NOT_PRESENT_OFFSET, 8795 },
+  { 0x32d7, G_UNICODE_NOT_PRESENT_OFFSET, 8799 },
+  { 0x32d8, G_UNICODE_NOT_PRESENT_OFFSET, 8803 },
+  { 0x32d9, G_UNICODE_NOT_PRESENT_OFFSET, 8807 },
+  { 0x32da, G_UNICODE_NOT_PRESENT_OFFSET, 8811 },
+  { 0x32db, G_UNICODE_NOT_PRESENT_OFFSET, 8815 },
+  { 0x32dc, G_UNICODE_NOT_PRESENT_OFFSET, 8819 },
+  { 0x32dd, G_UNICODE_NOT_PRESENT_OFFSET, 8823 },
+  { 0x32de, G_UNICODE_NOT_PRESENT_OFFSET, 8827 },
+  { 0x32df, G_UNICODE_NOT_PRESENT_OFFSET, 8831 },
+  { 0x32e0, G_UNICODE_NOT_PRESENT_OFFSET, 8835 },
+  { 0x32e1, G_UNICODE_NOT_PRESENT_OFFSET, 8839 },
+  { 0x32e2, G_UNICODE_NOT_PRESENT_OFFSET, 8843 },
+  { 0x32e3, G_UNICODE_NOT_PRESENT_OFFSET, 8847 },
+  { 0x32e4, G_UNICODE_NOT_PRESENT_OFFSET, 8851 },
+  { 0x32e5, G_UNICODE_NOT_PRESENT_OFFSET, 8855 },
+  { 0x32e6, G_UNICODE_NOT_PRESENT_OFFSET, 8859 },
+  { 0x32e7, G_UNICODE_NOT_PRESENT_OFFSET, 8863 },
+  { 0x32e8, G_UNICODE_NOT_PRESENT_OFFSET, 8867 },
+  { 0x32e9, G_UNICODE_NOT_PRESENT_OFFSET, 8871 },
+  { 0x32ea, G_UNICODE_NOT_PRESENT_OFFSET, 8875 },
+  { 0x32eb, G_UNICODE_NOT_PRESENT_OFFSET, 8879 },
+  { 0x32ec, G_UNICODE_NOT_PRESENT_OFFSET, 8883 },
+  { 0x32ed, G_UNICODE_NOT_PRESENT_OFFSET, 8887 },
+  { 0x32ee, G_UNICODE_NOT_PRESENT_OFFSET, 8891 },
+  { 0x32ef, G_UNICODE_NOT_PRESENT_OFFSET, 8895 },
+  { 0x32f0, G_UNICODE_NOT_PRESENT_OFFSET, 8899 },
+  { 0x32f1, G_UNICODE_NOT_PRESENT_OFFSET, 8903 },
+  { 0x32f2, G_UNICODE_NOT_PRESENT_OFFSET, 8907 },
+  { 0x32f3, G_UNICODE_NOT_PRESENT_OFFSET, 8911 },
+  { 0x32f4, G_UNICODE_NOT_PRESENT_OFFSET, 8915 },
+  { 0x32f5, G_UNICODE_NOT_PRESENT_OFFSET, 8919 },
+  { 0x32f6, G_UNICODE_NOT_PRESENT_OFFSET, 8923 },
+  { 0x32f7, G_UNICODE_NOT_PRESENT_OFFSET, 8927 },
+  { 0x32f8, G_UNICODE_NOT_PRESENT_OFFSET, 8931 },
+  { 0x32f9, G_UNICODE_NOT_PRESENT_OFFSET, 8935 },
+  { 0x32fa, G_UNICODE_NOT_PRESENT_OFFSET, 8939 },
+  { 0x32fb, G_UNICODE_NOT_PRESENT_OFFSET, 8943 },
+  { 0x32fc, G_UNICODE_NOT_PRESENT_OFFSET, 8947 },
+  { 0x32fd, G_UNICODE_NOT_PRESENT_OFFSET, 8951 },
+  { 0x32fe, G_UNICODE_NOT_PRESENT_OFFSET, 8955 },
+  { 0x3300, G_UNICODE_NOT_PRESENT_OFFSET, 8959 },
+  { 0x3301, G_UNICODE_NOT_PRESENT_OFFSET, 8975 },
+  { 0x3302, G_UNICODE_NOT_PRESENT_OFFSET, 8988 },
+  { 0x3303, G_UNICODE_NOT_PRESENT_OFFSET, 9004 },
+  { 0x3304, G_UNICODE_NOT_PRESENT_OFFSET, 9014 },
+  { 0x3305, G_UNICODE_NOT_PRESENT_OFFSET, 9030 },
+  { 0x3306, G_UNICODE_NOT_PRESENT_OFFSET, 9040 },
+  { 0x3307, G_UNICODE_NOT_PRESENT_OFFSET, 9050 },
+  { 0x3308, G_UNICODE_NOT_PRESENT_OFFSET, 9069 },
+  { 0x3309, G_UNICODE_NOT_PRESENT_OFFSET, 9082 },
+  { 0x330a, G_UNICODE_NOT_PRESENT_OFFSET, 9092 },
+  { 0x330b, G_UNICODE_NOT_PRESENT_OFFSET, 9102 },
+  { 0x330c, G_UNICODE_NOT_PRESENT_OFFSET, 9112 },
+  { 0x330d, G_UNICODE_NOT_PRESENT_OFFSET, 9125 },
+  { 0x330e, G_UNICODE_NOT_PRESENT_OFFSET, 9138 },
+  { 0x330f, G_UNICODE_NOT_PRESENT_OFFSET, 9151 },
+  { 0x3310, G_UNICODE_NOT_PRESENT_OFFSET, 9164 },
+  { 0x3311, G_UNICODE_NOT_PRESENT_OFFSET, 9177 },
+  { 0x3312, G_UNICODE_NOT_PRESENT_OFFSET, 9190 },
+  { 0x3313, G_UNICODE_NOT_PRESENT_OFFSET, 9203 },
+  { 0x3314, G_UNICODE_NOT_PRESENT_OFFSET, 9222 },
+  { 0x3315, G_UNICODE_NOT_PRESENT_OFFSET, 9229 },
+  { 0x3316, G_UNICODE_NOT_PRESENT_OFFSET, 9248 },
+  { 0x3317, G_UNICODE_NOT_PRESENT_OFFSET, 9267 },
+  { 0x3318, G_UNICODE_NOT_PRESENT_OFFSET, 9283 },
+  { 0x3319, G_UNICODE_NOT_PRESENT_OFFSET, 9296 },
+  { 0x331a, G_UNICODE_NOT_PRESENT_OFFSET, 9315 },
+  { 0x331b, G_UNICODE_NOT_PRESENT_OFFSET, 9334 },
+  { 0x331c, G_UNICODE_NOT_PRESENT_OFFSET, 9347 },
+  { 0x331d, G_UNICODE_NOT_PRESENT_OFFSET, 9357 },
+  { 0x331e, G_UNICODE_NOT_PRESENT_OFFSET, 9367 },
+  { 0x331f, G_UNICODE_NOT_PRESENT_OFFSET, 9380 },
+  { 0x3320, G_UNICODE_NOT_PRESENT_OFFSET, 9393 },
+  { 0x3321, G_UNICODE_NOT_PRESENT_OFFSET, 9409 },
+  { 0x3322, G_UNICODE_NOT_PRESENT_OFFSET, 9425 },
+  { 0x3323, G_UNICODE_NOT_PRESENT_OFFSET, 9435 },
+  { 0x3324, G_UNICODE_NOT_PRESENT_OFFSET, 9445 },
+  { 0x3325, G_UNICODE_NOT_PRESENT_OFFSET, 9458 },
+  { 0x3326, G_UNICODE_NOT_PRESENT_OFFSET, 9468 },
+  { 0x3327, G_UNICODE_NOT_PRESENT_OFFSET, 9478 },
+  { 0x3328, G_UNICODE_NOT_PRESENT_OFFSET, 9485 },
+  { 0x3329, G_UNICODE_NOT_PRESENT_OFFSET, 9492 },
+  { 0x332a, G_UNICODE_NOT_PRESENT_OFFSET, 9502 },
+  { 0x332b, G_UNICODE_NOT_PRESENT_OFFSET, 9512 },
+  { 0x332c, G_UNICODE_NOT_PRESENT_OFFSET, 9531 },
+  { 0x332d, G_UNICODE_NOT_PRESENT_OFFSET, 9544 },
+  { 0x332e, G_UNICODE_NOT_PRESENT_OFFSET, 9560 },
+  { 0x332f, G_UNICODE_NOT_PRESENT_OFFSET, 9579 },
+  { 0x3330, G_UNICODE_NOT_PRESENT_OFFSET, 9592 },
+  { 0x3331, G_UNICODE_NOT_PRESENT_OFFSET, 9602 },
+  { 0x3332, G_UNICODE_NOT_PRESENT_OFFSET, 9612 },
+  { 0x3333, G_UNICODE_NOT_PRESENT_OFFSET, 9631 },
+  { 0x3334, G_UNICODE_NOT_PRESENT_OFFSET, 9644 },
+  { 0x3335, G_UNICODE_NOT_PRESENT_OFFSET, 9663 },
+  { 0x3336, G_UNICODE_NOT_PRESENT_OFFSET, 9673 },
+  { 0x3337, G_UNICODE_NOT_PRESENT_OFFSET, 9689 },
+  { 0x3338, G_UNICODE_NOT_PRESENT_OFFSET, 9699 },
+  { 0x3339, G_UNICODE_NOT_PRESENT_OFFSET, 9712 },
+  { 0x333a, G_UNICODE_NOT_PRESENT_OFFSET, 9722 },
+  { 0x333b, G_UNICODE_NOT_PRESENT_OFFSET, 9735 },
+  { 0x333c, G_UNICODE_NOT_PRESENT_OFFSET, 9751 },
+  { 0x333d, G_UNICODE_NOT_PRESENT_OFFSET, 9764 },
+  { 0x333e, G_UNICODE_NOT_PRESENT_OFFSET, 9780 },
+  { 0x333f, G_UNICODE_NOT_PRESENT_OFFSET, 9793 },
+  { 0x3340, G_UNICODE_NOT_PRESENT_OFFSET, 9800 },
+  { 0x3341, G_UNICODE_NOT_PRESENT_OFFSET, 9816 },
+  { 0x3342, G_UNICODE_NOT_PRESENT_OFFSET, 9826 },
+  { 0x3343, G_UNICODE_NOT_PRESENT_OFFSET, 9836 },
+  { 0x3344, G_UNICODE_NOT_PRESENT_OFFSET, 9849 },
+  { 0x3345, G_UNICODE_NOT_PRESENT_OFFSET, 9859 },
+  { 0x3346, G_UNICODE_NOT_PRESENT_OFFSET, 9869 },
+  { 0x3347, G_UNICODE_NOT_PRESENT_OFFSET, 9879 },
+  { 0x3348, G_UNICODE_NOT_PRESENT_OFFSET, 9895 },
+  { 0x3349, G_UNICODE_NOT_PRESENT_OFFSET, 9908 },
+  { 0x334a, G_UNICODE_NOT_PRESENT_OFFSET, 9915 },
+  { 0x334b, G_UNICODE_NOT_PRESENT_OFFSET, 9934 },
+  { 0x334c, G_UNICODE_NOT_PRESENT_OFFSET, 9944 },
+  { 0x334d, G_UNICODE_NOT_PRESENT_OFFSET, 9960 },
+  { 0x334e, G_UNICODE_NOT_PRESENT_OFFSET, 9973 },
+  { 0x334f, G_UNICODE_NOT_PRESENT_OFFSET, 9986 },
+  { 0x3350, G_UNICODE_NOT_PRESENT_OFFSET, 9996 },
+  { 0x3351, G_UNICODE_NOT_PRESENT_OFFSET, 10006 },
+  { 0x3352, G_UNICODE_NOT_PRESENT_OFFSET, 10019 },
+  { 0x3353, G_UNICODE_NOT_PRESENT_OFFSET, 10026 },
+  { 0x3354, G_UNICODE_NOT_PRESENT_OFFSET, 10039 },
+  { 0x3355, G_UNICODE_NOT_PRESENT_OFFSET, 10055 },
+  { 0x3356, G_UNICODE_NOT_PRESENT_OFFSET, 10062 },
+  { 0x3357, G_UNICODE_NOT_PRESENT_OFFSET, 10081 },
+  { 0x3358, G_UNICODE_NOT_PRESENT_OFFSET, 10091 },
+  { 0x3359, G_UNICODE_NOT_PRESENT_OFFSET, 10096 },
+  { 0x335a, G_UNICODE_NOT_PRESENT_OFFSET, 10101 },
+  { 0x335b, G_UNICODE_NOT_PRESENT_OFFSET, 10106 },
+  { 0x335c, G_UNICODE_NOT_PRESENT_OFFSET, 10111 },
+  { 0x335d, G_UNICODE_NOT_PRESENT_OFFSET, 10116 },
+  { 0x335e, G_UNICODE_NOT_PRESENT_OFFSET, 10121 },
+  { 0x335f, G_UNICODE_NOT_PRESENT_OFFSET, 10126 },
+  { 0x3360, G_UNICODE_NOT_PRESENT_OFFSET, 10131 },
+  { 0x3361, G_UNICODE_NOT_PRESENT_OFFSET, 10136 },
+  { 0x3362, G_UNICODE_NOT_PRESENT_OFFSET, 10141 },
+  { 0x3363, G_UNICODE_NOT_PRESENT_OFFSET, 10147 },
+  { 0x3364, G_UNICODE_NOT_PRESENT_OFFSET, 10153 },
+  { 0x3365, G_UNICODE_NOT_PRESENT_OFFSET, 10159 },
+  { 0x3366, G_UNICODE_NOT_PRESENT_OFFSET, 10165 },
+  { 0x3367, G_UNICODE_NOT_PRESENT_OFFSET, 10171 },
+  { 0x3368, G_UNICODE_NOT_PRESENT_OFFSET, 10177 },
+  { 0x3369, G_UNICODE_NOT_PRESENT_OFFSET, 10183 },
+  { 0x336a, G_UNICODE_NOT_PRESENT_OFFSET, 10189 },
+  { 0x336b, G_UNICODE_NOT_PRESENT_OFFSET, 10195 },
+  { 0x336c, G_UNICODE_NOT_PRESENT_OFFSET, 10201 },
+  { 0x336d, G_UNICODE_NOT_PRESENT_OFFSET, 10207 },
+  { 0x336e, G_UNICODE_NOT_PRESENT_OFFSET, 10213 },
+  { 0x336f, G_UNICODE_NOT_PRESENT_OFFSET, 10219 },
+  { 0x3370, G_UNICODE_NOT_PRESENT_OFFSET, 10225 },
+  { 0x3371, G_UNICODE_NOT_PRESENT_OFFSET, 10231 },
+  { 0x3372, G_UNICODE_NOT_PRESENT_OFFSET, 10235 },
+  { 0x3373, G_UNICODE_NOT_PRESENT_OFFSET, 10238 },
+  { 0x3374, G_UNICODE_NOT_PRESENT_OFFSET, 10241 },
+  { 0x3375, G_UNICODE_NOT_PRESENT_OFFSET, 10245 },
+  { 0x3376, G_UNICODE_NOT_PRESENT_OFFSET, 10248 },
+  { 0x3377, G_UNICODE_NOT_PRESENT_OFFSET, 10251 },
+  { 0x3378, G_UNICODE_NOT_PRESENT_OFFSET, 10254 },
+  { 0x3379, G_UNICODE_NOT_PRESENT_OFFSET, 10258 },
+  { 0x337a, G_UNICODE_NOT_PRESENT_OFFSET, 10262 },
+  { 0x337b, G_UNICODE_NOT_PRESENT_OFFSET, 10265 },
+  { 0x337c, G_UNICODE_NOT_PRESENT_OFFSET, 10272 },
+  { 0x337d, G_UNICODE_NOT_PRESENT_OFFSET, 10279 },
+  { 0x337e, G_UNICODE_NOT_PRESENT_OFFSET, 10286 },
+  { 0x337f, G_UNICODE_NOT_PRESENT_OFFSET, 10293 },
+  { 0x3380, G_UNICODE_NOT_PRESENT_OFFSET, 10306 },
+  { 0x3381, G_UNICODE_NOT_PRESENT_OFFSET, 10309 },
+  { 0x3382, G_UNICODE_NOT_PRESENT_OFFSET, 10312 },
+  { 0x3383, G_UNICODE_NOT_PRESENT_OFFSET, 10316 },
+  { 0x3384, G_UNICODE_NOT_PRESENT_OFFSET, 10319 },
+  { 0x3385, G_UNICODE_NOT_PRESENT_OFFSET, 10322 },
+  { 0x3386, G_UNICODE_NOT_PRESENT_OFFSET, 10325 },
+  { 0x3387, G_UNICODE_NOT_PRESENT_OFFSET, 10328 },
+  { 0x3388, G_UNICODE_NOT_PRESENT_OFFSET, 10331 },
+  { 0x3389, G_UNICODE_NOT_PRESENT_OFFSET, 10335 },
+  { 0x338a, G_UNICODE_NOT_PRESENT_OFFSET, 10340 },
+  { 0x338b, G_UNICODE_NOT_PRESENT_OFFSET, 10343 },
+  { 0x338c, G_UNICODE_NOT_PRESENT_OFFSET, 10346 },
+  { 0x338d, G_UNICODE_NOT_PRESENT_OFFSET, 10350 },
+  { 0x338e, G_UNICODE_NOT_PRESENT_OFFSET, 10354 },
+  { 0x338f, G_UNICODE_NOT_PRESENT_OFFSET, 10357 },
+  { 0x3390, G_UNICODE_NOT_PRESENT_OFFSET, 10360 },
+  { 0x3391, G_UNICODE_NOT_PRESENT_OFFSET, 10363 },
+  { 0x3392, G_UNICODE_NOT_PRESENT_OFFSET, 10367 },
+  { 0x3393, G_UNICODE_NOT_PRESENT_OFFSET, 10371 },
+  { 0x3394, G_UNICODE_NOT_PRESENT_OFFSET, 10375 },
+  { 0x3395, G_UNICODE_NOT_PRESENT_OFFSET, 10379 },
+  { 0x3396, G_UNICODE_NOT_PRESENT_OFFSET, 10383 },
+  { 0x3397, G_UNICODE_NOT_PRESENT_OFFSET, 10386 },
+  { 0x3398, G_UNICODE_NOT_PRESENT_OFFSET, 10389 },
+  { 0x3399, G_UNICODE_NOT_PRESENT_OFFSET, 10392 },
+  { 0x339a, G_UNICODE_NOT_PRESENT_OFFSET, 10395 },
+  { 0x339b, G_UNICODE_NOT_PRESENT_OFFSET, 10398 },
+  { 0x339c, G_UNICODE_NOT_PRESENT_OFFSET, 10402 },
+  { 0x339d, G_UNICODE_NOT_PRESENT_OFFSET, 10405 },
+  { 0x339e, G_UNICODE_NOT_PRESENT_OFFSET, 10408 },
+  { 0x339f, G_UNICODE_NOT_PRESENT_OFFSET, 10411 },
+  { 0x33a0, G_UNICODE_NOT_PRESENT_OFFSET, 10415 },
+  { 0x33a1, G_UNICODE_NOT_PRESENT_OFFSET, 10419 },
+  { 0x33a2, G_UNICODE_NOT_PRESENT_OFFSET, 10422 },
+  { 0x33a3, G_UNICODE_NOT_PRESENT_OFFSET, 10426 },
+  { 0x33a4, G_UNICODE_NOT_PRESENT_OFFSET, 10430 },
+  { 0x33a5, G_UNICODE_NOT_PRESENT_OFFSET, 10434 },
+  { 0x33a6, G_UNICODE_NOT_PRESENT_OFFSET, 10437 },
+  { 0x33a7, G_UNICODE_NOT_PRESENT_OFFSET, 10441 },
+  { 0x33a8, G_UNICODE_NOT_PRESENT_OFFSET, 10447 },
+  { 0x33a9, G_UNICODE_NOT_PRESENT_OFFSET, 10454 },
+  { 0x33aa, G_UNICODE_NOT_PRESENT_OFFSET, 10457 },
+  { 0x33ab, G_UNICODE_NOT_PRESENT_OFFSET, 10461 },
+  { 0x33ac, G_UNICODE_NOT_PRESENT_OFFSET, 10465 },
+  { 0x33ad, G_UNICODE_NOT_PRESENT_OFFSET, 10469 },
+  { 0x33ae, G_UNICODE_NOT_PRESENT_OFFSET, 10473 },
+  { 0x33af, G_UNICODE_NOT_PRESENT_OFFSET, 10481 },
+  { 0x33b0, G_UNICODE_NOT_PRESENT_OFFSET, 10490 },
+  { 0x33b1, G_UNICODE_NOT_PRESENT_OFFSET, 10493 },
+  { 0x33b2, G_UNICODE_NOT_PRESENT_OFFSET, 10496 },
+  { 0x33b3, G_UNICODE_NOT_PRESENT_OFFSET, 10500 },
+  { 0x33b4, G_UNICODE_NOT_PRESENT_OFFSET, 10503 },
+  { 0x33b5, G_UNICODE_NOT_PRESENT_OFFSET, 10506 },
+  { 0x33b6, G_UNICODE_NOT_PRESENT_OFFSET, 10509 },
+  { 0x33b7, G_UNICODE_NOT_PRESENT_OFFSET, 10513 },
+  { 0x33b8, G_UNICODE_NOT_PRESENT_OFFSET, 10516 },
+  { 0x33b9, G_UNICODE_NOT_PRESENT_OFFSET, 10519 },
+  { 0x33ba, G_UNICODE_NOT_PRESENT_OFFSET, 10522 },
+  { 0x33bb, G_UNICODE_NOT_PRESENT_OFFSET, 10525 },
+  { 0x33bc, G_UNICODE_NOT_PRESENT_OFFSET, 10528 },
+  { 0x33bd, G_UNICODE_NOT_PRESENT_OFFSET, 10532 },
+  { 0x33be, G_UNICODE_NOT_PRESENT_OFFSET, 10535 },
+  { 0x33bf, G_UNICODE_NOT_PRESENT_OFFSET, 10538 },
+  { 0x33c0, G_UNICODE_NOT_PRESENT_OFFSET, 10541 },
+  { 0x33c1, G_UNICODE_NOT_PRESENT_OFFSET, 10545 },
+  { 0x33c2, G_UNICODE_NOT_PRESENT_OFFSET, 10549 },
+  { 0x33c3, G_UNICODE_NOT_PRESENT_OFFSET, 10554 },
+  { 0x33c4, G_UNICODE_NOT_PRESENT_OFFSET, 10557 },
+  { 0x33c5, G_UNICODE_NOT_PRESENT_OFFSET, 10560 },
+  { 0x33c6, G_UNICODE_NOT_PRESENT_OFFSET, 10563 },
+  { 0x33c7, G_UNICODE_NOT_PRESENT_OFFSET, 10570 },
+  { 0x33c8, G_UNICODE_NOT_PRESENT_OFFSET, 10574 },
+  { 0x33c9, G_UNICODE_NOT_PRESENT_OFFSET, 10577 },
+  { 0x33ca, G_UNICODE_NOT_PRESENT_OFFSET, 10580 },
+  { 0x33cb, G_UNICODE_NOT_PRESENT_OFFSET, 10583 },
+  { 0x33cc, G_UNICODE_NOT_PRESENT_OFFSET, 10586 },
+  { 0x33cd, G_UNICODE_NOT_PRESENT_OFFSET, 10589 },
+  { 0x33ce, G_UNICODE_NOT_PRESENT_OFFSET, 10592 },
+  { 0x33cf, G_UNICODE_NOT_PRESENT_OFFSET, 10595 },
+  { 0x33d0, G_UNICODE_NOT_PRESENT_OFFSET, 10598 },
+  { 0x33d1, G_UNICODE_NOT_PRESENT_OFFSET, 10601 },
+  { 0x33d2, G_UNICODE_NOT_PRESENT_OFFSET, 10604 },
+  { 0x33d3, G_UNICODE_NOT_PRESENT_OFFSET, 10608 },
+  { 0x33d4, G_UNICODE_NOT_PRESENT_OFFSET, 10611 },
+  { 0x33d5, G_UNICODE_NOT_PRESENT_OFFSET, 10614 },
+  { 0x33d6, G_UNICODE_NOT_PRESENT_OFFSET, 10618 },
+  { 0x33d7, G_UNICODE_NOT_PRESENT_OFFSET, 10622 },
+  { 0x33d8, G_UNICODE_NOT_PRESENT_OFFSET, 10625 },
+  { 0x33d9, G_UNICODE_NOT_PRESENT_OFFSET, 10630 },
+  { 0x33da, G_UNICODE_NOT_PRESENT_OFFSET, 10634 },
+  { 0x33db, G_UNICODE_NOT_PRESENT_OFFSET, 10637 },
+  { 0x33dc, G_UNICODE_NOT_PRESENT_OFFSET, 10640 },
+  { 0x33dd, G_UNICODE_NOT_PRESENT_OFFSET, 10643 },
+  { 0x33de, G_UNICODE_NOT_PRESENT_OFFSET, 10646 },
+  { 0x33df, G_UNICODE_NOT_PRESENT_OFFSET, 10652 },
+  { 0x33e0, G_UNICODE_NOT_PRESENT_OFFSET, 10658 },
+  { 0x33e1, G_UNICODE_NOT_PRESENT_OFFSET, 10663 },
+  { 0x33e2, G_UNICODE_NOT_PRESENT_OFFSET, 10668 },
+  { 0x33e3, G_UNICODE_NOT_PRESENT_OFFSET, 10673 },
+  { 0x33e4, G_UNICODE_NOT_PRESENT_OFFSET, 10678 },
+  { 0x33e5, G_UNICODE_NOT_PRESENT_OFFSET, 10683 },
+  { 0x33e6, G_UNICODE_NOT_PRESENT_OFFSET, 10688 },
+  { 0x33e7, G_UNICODE_NOT_PRESENT_OFFSET, 10693 },
+  { 0x33e8, G_UNICODE_NOT_PRESENT_OFFSET, 10698 },
+  { 0x33e9, G_UNICODE_NOT_PRESENT_OFFSET, 10703 },
+  { 0x33ea, G_UNICODE_NOT_PRESENT_OFFSET, 10709 },
+  { 0x33eb, G_UNICODE_NOT_PRESENT_OFFSET, 10715 },
+  { 0x33ec, G_UNICODE_NOT_PRESENT_OFFSET, 10721 },
+  { 0x33ed, G_UNICODE_NOT_PRESENT_OFFSET, 10727 },
+  { 0x33ee, G_UNICODE_NOT_PRESENT_OFFSET, 10733 },
+  { 0x33ef, G_UNICODE_NOT_PRESENT_OFFSET, 10739 },
+  { 0x33f0, G_UNICODE_NOT_PRESENT_OFFSET, 10745 },
+  { 0x33f1, G_UNICODE_NOT_PRESENT_OFFSET, 10751 },
+  { 0x33f2, G_UNICODE_NOT_PRESENT_OFFSET, 10757 },
+  { 0x33f3, G_UNICODE_NOT_PRESENT_OFFSET, 10763 },
+  { 0x33f4, G_UNICODE_NOT_PRESENT_OFFSET, 10769 },
+  { 0x33f5, G_UNICODE_NOT_PRESENT_OFFSET, 10775 },
+  { 0x33f6, G_UNICODE_NOT_PRESENT_OFFSET, 10781 },
+  { 0x33f7, G_UNICODE_NOT_PRESENT_OFFSET, 10787 },
+  { 0x33f8, G_UNICODE_NOT_PRESENT_OFFSET, 10793 },
+  { 0x33f9, G_UNICODE_NOT_PRESENT_OFFSET, 10799 },
+  { 0x33fa, G_UNICODE_NOT_PRESENT_OFFSET, 10805 },
+  { 0x33fb, G_UNICODE_NOT_PRESENT_OFFSET, 10811 },
+  { 0x33fc, G_UNICODE_NOT_PRESENT_OFFSET, 10817 },
+  { 0x33fd, G_UNICODE_NOT_PRESENT_OFFSET, 10823 },
+  { 0x33fe, G_UNICODE_NOT_PRESENT_OFFSET, 10829 },
+  { 0x33ff, G_UNICODE_NOT_PRESENT_OFFSET, 10835 },
+  { 0xf900, 10839, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf901, 10843, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf902, 6788, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf903, 10847, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf904, 10851, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf905, 10855, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf906, 10859, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf907, 7004, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf908, 7004, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf909, 10863, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf90a, 6820, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf90b, 10867, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf90c, 10871, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf90d, 10875, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf90e, 10879, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf90f, 10883, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf910, 10887, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf911, 10891, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf912, 10895, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf913, 10899, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf914, 10903, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf915, 10907, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf916, 10911, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf917, 10915, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf918, 10919, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf919, 10923, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf91a, 10927, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf91b, 10931, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf91c, 10935, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf91d, 10939, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf91e, 10943, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf91f, 10947, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf920, 10951, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf921, 10955, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf922, 10959, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf923, 10963, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf924, 10967, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf925, 10971, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf926, 10975, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf927, 10979, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf928, 10983, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf929, 10987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf92a, 10991, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf92b, 10995, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf92c, 10999, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf92d, 11003, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf92e, 11007, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf92f, 11011, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf930, 11015, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf931, 11019, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf932, 11023, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf933, 11027, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf934, 6652, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf935, 11031, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf936, 11035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf937, 11039, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf938, 11043, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf939, 11047, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf93a, 11051, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf93b, 11055, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf93c, 11059, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf93d, 11063, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf93e, 11067, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf93f, 11071, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf940, 6944, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf941, 11075, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf942, 11079, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf943, 11083, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf944, 11087, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf945, 11091, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf946, 11095, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf947, 11099, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf948, 11103, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf949, 11107, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf94a, 11111, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf94b, 11115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf94c, 11119, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf94d, 11123, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf94e, 11127, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf94f, 11131, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf950, 11135, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf951, 11139, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf952, 11143, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf953, 11147, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf954, 11151, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf955, 11155, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf956, 11159, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf957, 11163, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf958, 11167, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf959, 11171, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf95a, 11175, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf95b, 11179, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf95c, 10903, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf95d, 11183, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf95e, 11187, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf95f, 11191, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf960, 11195, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf961, 11199, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf962, 11203, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf963, 11207, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf964, 11211, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf965, 11215, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf966, 11219, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf967, 11223, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf968, 11227, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf969, 11231, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf96a, 11235, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf96b, 11239, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf96c, 11243, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf96d, 11247, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf96e, 11251, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf96f, 11255, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf970, 11259, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf971, 6796, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf972, 11263, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf973, 11267, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf974, 11271, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf975, 11275, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf976, 11279, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf977, 11283, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf978, 11287, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf979, 11291, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf97a, 11295, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf97b, 11299, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf97c, 11303, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf97d, 11307, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf97e, 11311, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf97f, 11315, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf980, 11319, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf981, 6304, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf982, 11323, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf983, 11327, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf984, 11331, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf985, 11335, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf986, 11339, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf987, 11343, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf988, 11347, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf989, 11351, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf98a, 6228, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf98b, 11355, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf98c, 11359, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf98d, 11363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf98e, 11367, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf98f, 11371, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf990, 11375, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf991, 11379, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf992, 11383, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf993, 11387, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf994, 11391, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf995, 11395, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf996, 11399, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf997, 11403, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf998, 11407, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf999, 11411, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf99a, 11415, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf99b, 11419, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf99c, 11423, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf99d, 11427, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf99e, 11431, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf99f, 11435, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a0, 11439, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a1, 11255, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a2, 11443, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a3, 11447, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a4, 11451, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a5, 11455, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a6, 11459, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a7, 11463, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a8, 11467, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9a9, 11471, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9aa, 11191, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ab, 11475, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ac, 11479, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ad, 11483, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ae, 11487, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9af, 11491, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b0, 11495, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b1, 11499, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b2, 11503, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b3, 11507, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b4, 11511, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b5, 11515, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b6, 11519, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b7, 11523, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b8, 11527, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9b9, 11531, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ba, 11535, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9bb, 11539, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9bc, 11543, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9bd, 11547, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9be, 11551, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9bf, 10903, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c0, 11555, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c1, 11559, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c2, 11563, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c3, 11567, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c4, 7000, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c5, 11571, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c6, 11575, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c7, 11579, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c8, 11583, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9c9, 11587, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ca, 11591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9cb, 11595, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9cc, 11599, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9cd, 11603, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ce, 11607, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9cf, 11611, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d0, 11615, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d1, 8525, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d2, 11619, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d3, 11623, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d4, 11627, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d5, 11631, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d6, 11635, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d7, 11639, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d8, 11643, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9d9, 11647, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9da, 11651, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9db, 11199, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9dc, 11655, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9dd, 11659, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9de, 11663, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9df, 11667, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e0, 11671, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e1, 11675, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e2, 11679, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e3, 11683, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e4, 11687, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e5, 11691, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e6, 11695, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e7, 11699, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e8, 11703, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9e9, 6816, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ea, 11707, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9eb, 11711, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ec, 11715, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ed, 11719, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ee, 11723, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ef, 11727, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f0, 11731, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f1, 11735, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f2, 11739, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f3, 11743, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f4, 11747, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f5, 11751, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f6, 11755, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f7, 6620, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f8, 11759, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9f9, 11763, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9fa, 11767, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9fb, 11771, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9fc, 11775, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9fd, 11779, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9fe, 11783, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xf9ff, 11787, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa00, 11791, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa01, 11795, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa02, 11799, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa03, 11803, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa04, 11807, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa05, 11811, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa06, 11815, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa07, 11819, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa08, 6728, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa09, 11823, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa0a, 6740, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa0b, 11827, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa0c, 11831, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa0d, 11835, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa10, 11839, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa12, 11843, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa15, 11847, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa16, 11851, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa17, 11855, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa18, 11859, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa19, 11863, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa1a, 11867, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa1b, 11871, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa1c, 11875, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa1d, 11879, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa1e, 6648, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa20, 11883, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa22, 11887, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa25, 11891, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa26, 11895, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa2a, 11899, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa2b, 11903, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa2c, 11907, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa2d, 11911, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa30, 11915, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa31, 11919, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa32, 11923, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa33, 11927, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa34, 11931, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa35, 11935, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa36, 11939, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa37, 11943, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa38, 11947, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa39, 11951, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa3a, 11955, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa3b, 11959, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa3c, 6332, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa3d, 11963, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa3e, 11967, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa3f, 11971, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa40, 11975, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa41, 11979, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa42, 11983, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa43, 11987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa44, 11991, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa45, 11995, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa46, 11999, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa47, 12003, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa48, 12007, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa49, 12011, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa4a, 12015, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa4b, 12019, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa4c, 8545, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa4d, 12023, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa4e, 12027, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa4f, 12031, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa50, 12035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa51, 8561, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa52, 12039, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa53, 12043, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa54, 12047, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa55, 12051, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa56, 12055, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa57, 11399, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa58, 12059, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa59, 12063, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa5a, 12067, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa5b, 12071, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa5c, 12075, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa5d, 12079, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa5e, 12079, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa5f, 12083, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa60, 12087, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa61, 12091, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa62, 12095, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa63, 12099, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa64, 12103, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa65, 12107, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa66, 12111, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa67, 11891, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa68, 12115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa69, 12119, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa6a, 12123, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa70, 12127, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa71, 12131, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa72, 12135, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa73, 12139, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa74, 12143, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa75, 12147, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa76, 12151, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa77, 12155, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa78, 11939, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa79, 12159, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa7a, 12163, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa7b, 12167, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa7c, 11839, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa7d, 12171, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa7e, 12175, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa7f, 12179, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa80, 12183, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa81, 12187, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa82, 12191, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa83, 12195, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa84, 12199, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa85, 12203, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa86, 12207, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa87, 12211, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa88, 12215, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa89, 11971, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa8a, 12219, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa8b, 11975, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa8c, 12223, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa8d, 12227, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa8e, 12231, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa8f, 12235, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa90, 12239, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa91, 11843, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa92, 10987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa93, 12243, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa94, 12247, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa95, 6464, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa96, 11259, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa97, 11591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa98, 12251, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa99, 12255, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa9a, 12003, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa9b, 12259, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa9c, 12007, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa9d, 12263, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa9e, 12267, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfa9f, 12271, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa0, 11851, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa1, 12275, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa2, 12279, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa3, 12283, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa4, 12287, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa5, 12291, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa6, 11855, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa7, 12295, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa8, 12299, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaa9, 12303, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaaa, 12307, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaab, 12311, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaac, 12315, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaad, 12055, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaae, 12319, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaaf, 12323, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab0, 11399, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab1, 12327, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab2, 12071, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab3, 12331, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab4, 12335, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab5, 12339, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab6, 12343, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab7, 12347, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab8, 12091, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfab9, 12351, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaba, 11887, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfabb, 12355, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfabc, 12095, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfabd, 11183, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfabe, 12359, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfabf, 12099, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac0, 12363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac1, 12107, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac2, 12367, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac3, 12371, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac4, 12375, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac5, 12379, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac6, 12383, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac7, 12115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac8, 11875, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfac9, 12387, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfaca, 12119, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfacb, 12391, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfacc, 12123, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfacd, 12395, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xface, 7004, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfacf, 12399, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad0, 12404, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad1, 12409, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad2, 12414, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad3, 12418, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad4, 12422, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad5, 12426, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad6, 12431, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad7, 12436, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad8, 12441, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfad9, 12445, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb00, G_UNICODE_NOT_PRESENT_OFFSET, 12449 },
+  { 0xfb01, G_UNICODE_NOT_PRESENT_OFFSET, 12452 },
+  { 0xfb02, G_UNICODE_NOT_PRESENT_OFFSET, 12455 },
+  { 0xfb03, G_UNICODE_NOT_PRESENT_OFFSET, 12458 },
+  { 0xfb04, G_UNICODE_NOT_PRESENT_OFFSET, 12462 },
+  { 0xfb05, G_UNICODE_NOT_PRESENT_OFFSET, 12466 },
+  { 0xfb06, G_UNICODE_NOT_PRESENT_OFFSET, 12466 },
+  { 0xfb13, G_UNICODE_NOT_PRESENT_OFFSET, 12469 },
+  { 0xfb14, G_UNICODE_NOT_PRESENT_OFFSET, 12474 },
+  { 0xfb15, G_UNICODE_NOT_PRESENT_OFFSET, 12479 },
+  { 0xfb16, G_UNICODE_NOT_PRESENT_OFFSET, 12484 },
+  { 0xfb17, G_UNICODE_NOT_PRESENT_OFFSET, 12489 },
+  { 0xfb1d, 12494, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb1f, 12499, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb20, G_UNICODE_NOT_PRESENT_OFFSET, 12504 },
+  { 0xfb21, G_UNICODE_NOT_PRESENT_OFFSET, 5338 },
+  { 0xfb22, G_UNICODE_NOT_PRESENT_OFFSET, 5347 },
+  { 0xfb23, G_UNICODE_NOT_PRESENT_OFFSET, 12507 },
+  { 0xfb24, G_UNICODE_NOT_PRESENT_OFFSET, 12510 },
+  { 0xfb25, G_UNICODE_NOT_PRESENT_OFFSET, 12513 },
+  { 0xfb26, G_UNICODE_NOT_PRESENT_OFFSET, 12516 },
+  { 0xfb27, G_UNICODE_NOT_PRESENT_OFFSET, 12519 },
+  { 0xfb28, G_UNICODE_NOT_PRESENT_OFFSET, 12522 },
+  { 0xfb29, G_UNICODE_NOT_PRESENT_OFFSET, 5267 },
+  { 0xfb2a, 12525, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb2b, 12530, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb2c, 12535, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb2d, 12542, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb2e, 12549, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb2f, 12554, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb30, 12559, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb31, 12564, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb32, 12569, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb33, 12574, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb34, 12579, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb35, 12584, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb36, 12589, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb38, 12594, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb39, 12599, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb3a, 12604, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb3b, 12609, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb3c, 12614, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb3e, 12619, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb40, 12624, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb41, 12629, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb43, 12634, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb44, 12639, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb46, 12644, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb47, 12649, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb48, 12654, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb49, 12659, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb4a, 12664, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb4b, 12669, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb4c, 12674, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb4d, 12679, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb4e, 12684, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0xfb4f, G_UNICODE_NOT_PRESENT_OFFSET, 12689 },
+  { 0xfb50, G_UNICODE_NOT_PRESENT_OFFSET, 12694 },
+  { 0xfb51, G_UNICODE_NOT_PRESENT_OFFSET, 12694 },
+  { 0xfb52, G_UNICODE_NOT_PRESENT_OFFSET, 12697 },
+  { 0xfb53, G_UNICODE_NOT_PRESENT_OFFSET, 12697 },
+  { 0xfb54, G_UNICODE_NOT_PRESENT_OFFSET, 12697 },
+  { 0xfb55, G_UNICODE_NOT_PRESENT_OFFSET, 12697 },
+  { 0xfb56, G_UNICODE_NOT_PRESENT_OFFSET, 12700 },
+  { 0xfb57, G_UNICODE_NOT_PRESENT_OFFSET, 12700 },
+  { 0xfb58, G_UNICODE_NOT_PRESENT_OFFSET, 12700 },
+  { 0xfb59, G_UNICODE_NOT_PRESENT_OFFSET, 12700 },
+  { 0xfb5a, G_UNICODE_NOT_PRESENT_OFFSET, 12703 },
+  { 0xfb5b, G_UNICODE_NOT_PRESENT_OFFSET, 12703 },
+  { 0xfb5c, G_UNICODE_NOT_PRESENT_OFFSET, 12703 },
+  { 0xfb5d, G_UNICODE_NOT_PRESENT_OFFSET, 12703 },
+  { 0xfb5e, G_UNICODE_NOT_PRESENT_OFFSET, 12706 },
+  { 0xfb5f, G_UNICODE_NOT_PRESENT_OFFSET, 12706 },
+  { 0xfb60, G_UNICODE_NOT_PRESENT_OFFSET, 12706 },
+  { 0xfb61, G_UNICODE_NOT_PRESENT_OFFSET, 12706 },
+  { 0xfb62, G_UNICODE_NOT_PRESENT_OFFSET, 12709 },
+  { 0xfb63, G_UNICODE_NOT_PRESENT_OFFSET, 12709 },
+  { 0xfb64, G_UNICODE_NOT_PRESENT_OFFSET, 12709 },
+  { 0xfb65, G_UNICODE_NOT_PRESENT_OFFSET, 12709 },
+  { 0xfb66, G_UNICODE_NOT_PRESENT_OFFSET, 12712 },
+  { 0xfb67, G_UNICODE_NOT_PRESENT_OFFSET, 12712 },
+  { 0xfb68, G_UNICODE_NOT_PRESENT_OFFSET, 12712 },
+  { 0xfb69, G_UNICODE_NOT_PRESENT_OFFSET, 12712 },
+  { 0xfb6a, G_UNICODE_NOT_PRESENT_OFFSET, 12715 },
+  { 0xfb6b, G_UNICODE_NOT_PRESENT_OFFSET, 12715 },
+  { 0xfb6c, G_UNICODE_NOT_PRESENT_OFFSET, 12715 },
+  { 0xfb6d, G_UNICODE_NOT_PRESENT_OFFSET, 12715 },
+  { 0xfb6e, G_UNICODE_NOT_PRESENT_OFFSET, 12718 },
+  { 0xfb6f, G_UNICODE_NOT_PRESENT_OFFSET, 12718 },
+  { 0xfb70, G_UNICODE_NOT_PRESENT_OFFSET, 12718 },
+  { 0xfb71, G_UNICODE_NOT_PRESENT_OFFSET, 12718 },
+  { 0xfb72, G_UNICODE_NOT_PRESENT_OFFSET, 12721 },
+  { 0xfb73, G_UNICODE_NOT_PRESENT_OFFSET, 12721 },
+  { 0xfb74, G_UNICODE_NOT_PRESENT_OFFSET, 12721 },
+  { 0xfb75, G_UNICODE_NOT_PRESENT_OFFSET, 12721 },
+  { 0xfb76, G_UNICODE_NOT_PRESENT_OFFSET, 12724 },
+  { 0xfb77, G_UNICODE_NOT_PRESENT_OFFSET, 12724 },
+  { 0xfb78, G_UNICODE_NOT_PRESENT_OFFSET, 12724 },
+  { 0xfb79, G_UNICODE_NOT_PRESENT_OFFSET, 12724 },
+  { 0xfb7a, G_UNICODE_NOT_PRESENT_OFFSET, 12727 },
+  { 0xfb7b, G_UNICODE_NOT_PRESENT_OFFSET, 12727 },
+  { 0xfb7c, G_UNICODE_NOT_PRESENT_OFFSET, 12727 },
+  { 0xfb7d, G_UNICODE_NOT_PRESENT_OFFSET, 12727 },
+  { 0xfb7e, G_UNICODE_NOT_PRESENT_OFFSET, 12730 },
+  { 0xfb7f, G_UNICODE_NOT_PRESENT_OFFSET, 12730 },
+  { 0xfb80, G_UNICODE_NOT_PRESENT_OFFSET, 12730 },
+  { 0xfb81, G_UNICODE_NOT_PRESENT_OFFSET, 12730 },
+  { 0xfb82, G_UNICODE_NOT_PRESENT_OFFSET, 12733 },
+  { 0xfb83, G_UNICODE_NOT_PRESENT_OFFSET, 12733 },
+  { 0xfb84, G_UNICODE_NOT_PRESENT_OFFSET, 12736 },
+  { 0xfb85, G_UNICODE_NOT_PRESENT_OFFSET, 12736 },
+  { 0xfb86, G_UNICODE_NOT_PRESENT_OFFSET, 12739 },
+  { 0xfb87, G_UNICODE_NOT_PRESENT_OFFSET, 12739 },
+  { 0xfb88, G_UNICODE_NOT_PRESENT_OFFSET, 12742 },
+  { 0xfb89, G_UNICODE_NOT_PRESENT_OFFSET, 12742 },
+  { 0xfb8a, G_UNICODE_NOT_PRESENT_OFFSET, 12745 },
+  { 0xfb8b, G_UNICODE_NOT_PRESENT_OFFSET, 12745 },
+  { 0xfb8c, G_UNICODE_NOT_PRESENT_OFFSET, 12748 },
+  { 0xfb8d, G_UNICODE_NOT_PRESENT_OFFSET, 12748 },
+  { 0xfb8e, G_UNICODE_NOT_PRESENT_OFFSET, 12751 },
+  { 0xfb8f, G_UNICODE_NOT_PRESENT_OFFSET, 12751 },
+  { 0xfb90, G_UNICODE_NOT_PRESENT_OFFSET, 12751 },
+  { 0xfb91, G_UNICODE_NOT_PRESENT_OFFSET, 12751 },
+  { 0xfb92, G_UNICODE_NOT_PRESENT_OFFSET, 12754 },
+  { 0xfb93, G_UNICODE_NOT_PRESENT_OFFSET, 12754 },
+  { 0xfb94, G_UNICODE_NOT_PRESENT_OFFSET, 12754 },
+  { 0xfb95, G_UNICODE_NOT_PRESENT_OFFSET, 12754 },
+  { 0xfb96, G_UNICODE_NOT_PRESENT_OFFSET, 12757 },
+  { 0xfb97, G_UNICODE_NOT_PRESENT_OFFSET, 12757 },
+  { 0xfb98, G_UNICODE_NOT_PRESENT_OFFSET, 12757 },
+  { 0xfb99, G_UNICODE_NOT_PRESENT_OFFSET, 12757 },
+  { 0xfb9a, G_UNICODE_NOT_PRESENT_OFFSET, 12760 },
+  { 0xfb9b, G_UNICODE_NOT_PRESENT_OFFSET, 12760 },
+  { 0xfb9c, G_UNICODE_NOT_PRESENT_OFFSET, 12760 },
+  { 0xfb9d, G_UNICODE_NOT_PRESENT_OFFSET, 12760 },
+  { 0xfb9e, G_UNICODE_NOT_PRESENT_OFFSET, 12763 },
+  { 0xfb9f, G_UNICODE_NOT_PRESENT_OFFSET, 12763 },
+  { 0xfba0, G_UNICODE_NOT_PRESENT_OFFSET, 12766 },
+  { 0xfba1, G_UNICODE_NOT_PRESENT_OFFSET, 12766 },
+  { 0xfba2, G_UNICODE_NOT_PRESENT_OFFSET, 12766 },
+  { 0xfba3, G_UNICODE_NOT_PRESENT_OFFSET, 12766 },
+  { 0xfba4, G_UNICODE_NOT_PRESENT_OFFSET, 1721 },
+  { 0xfba5, G_UNICODE_NOT_PRESENT_OFFSET, 1721 },
+  { 0xfba6, G_UNICODE_NOT_PRESENT_OFFSET, 12769 },
+  { 0xfba7, G_UNICODE_NOT_PRESENT_OFFSET, 12769 },
+  { 0xfba8, G_UNICODE_NOT_PRESENT_OFFSET, 12769 },
+  { 0xfba9, G_UNICODE_NOT_PRESENT_OFFSET, 12769 },
+  { 0xfbaa, G_UNICODE_NOT_PRESENT_OFFSET, 12772 },
+  { 0xfbab, G_UNICODE_NOT_PRESENT_OFFSET, 12772 },
+  { 0xfbac, G_UNICODE_NOT_PRESENT_OFFSET, 12772 },
+  { 0xfbad, G_UNICODE_NOT_PRESENT_OFFSET, 12772 },
+  { 0xfbae, G_UNICODE_NOT_PRESENT_OFFSET, 12775 },
+  { 0xfbaf, G_UNICODE_NOT_PRESENT_OFFSET, 12775 },
+  { 0xfbb0, G_UNICODE_NOT_PRESENT_OFFSET, 1731 },
+  { 0xfbb1, G_UNICODE_NOT_PRESENT_OFFSET, 1731 },
+  { 0xfbd3, G_UNICODE_NOT_PRESENT_OFFSET, 12778 },
+  { 0xfbd4, G_UNICODE_NOT_PRESENT_OFFSET, 12778 },
+  { 0xfbd5, G_UNICODE_NOT_PRESENT_OFFSET, 12778 },
+  { 0xfbd6, G_UNICODE_NOT_PRESENT_OFFSET, 12778 },
+  { 0xfbd7, G_UNICODE_NOT_PRESENT_OFFSET, 12781 },
+  { 0xfbd8, G_UNICODE_NOT_PRESENT_OFFSET, 12781 },
+  { 0xfbd9, G_UNICODE_NOT_PRESENT_OFFSET, 12784 },
+  { 0xfbda, G_UNICODE_NOT_PRESENT_OFFSET, 12784 },
+  { 0xfbdb, G_UNICODE_NOT_PRESENT_OFFSET, 12787 },
+  { 0xfbdc, G_UNICODE_NOT_PRESENT_OFFSET, 12787 },
+  { 0xfbdd, G_UNICODE_NOT_PRESENT_OFFSET, 1711 },
+  { 0xfbde, G_UNICODE_NOT_PRESENT_OFFSET, 12790 },
+  { 0xfbdf, G_UNICODE_NOT_PRESENT_OFFSET, 12790 },
+  { 0xfbe0, G_UNICODE_NOT_PRESENT_OFFSET, 12793 },
+  { 0xfbe1, G_UNICODE_NOT_PRESENT_OFFSET, 12793 },
+  { 0xfbe2, G_UNICODE_NOT_PRESENT_OFFSET, 12796 },
+  { 0xfbe3, G_UNICODE_NOT_PRESENT_OFFSET, 12796 },
+  { 0xfbe4, G_UNICODE_NOT_PRESENT_OFFSET, 12799 },
+  { 0xfbe5, G_UNICODE_NOT_PRESENT_OFFSET, 12799 },
+  { 0xfbe6, G_UNICODE_NOT_PRESENT_OFFSET, 12799 },
+  { 0xfbe7, G_UNICODE_NOT_PRESENT_OFFSET, 12799 },
+  { 0xfbe8, G_UNICODE_NOT_PRESENT_OFFSET, 12802 },
+  { 0xfbe9, G_UNICODE_NOT_PRESENT_OFFSET, 12802 },
+  { 0xfbea, G_UNICODE_NOT_PRESENT_OFFSET, 12805 },
+  { 0xfbeb, G_UNICODE_NOT_PRESENT_OFFSET, 12805 },
+  { 0xfbec, G_UNICODE_NOT_PRESENT_OFFSET, 12812 },
+  { 0xfbed, G_UNICODE_NOT_PRESENT_OFFSET, 12812 },
+  { 0xfbee, G_UNICODE_NOT_PRESENT_OFFSET, 12819 },
+  { 0xfbef, G_UNICODE_NOT_PRESENT_OFFSET, 12819 },
+  { 0xfbf0, G_UNICODE_NOT_PRESENT_OFFSET, 12826 },
+  { 0xfbf1, G_UNICODE_NOT_PRESENT_OFFSET, 12826 },
+  { 0xfbf2, G_UNICODE_NOT_PRESENT_OFFSET, 12833 },
+  { 0xfbf3, G_UNICODE_NOT_PRESENT_OFFSET, 12833 },
+  { 0xfbf4, G_UNICODE_NOT_PRESENT_OFFSET, 12840 },
+  { 0xfbf5, G_UNICODE_NOT_PRESENT_OFFSET, 12840 },
+  { 0xfbf6, G_UNICODE_NOT_PRESENT_OFFSET, 12847 },
+  { 0xfbf7, G_UNICODE_NOT_PRESENT_OFFSET, 12847 },
+  { 0xfbf8, G_UNICODE_NOT_PRESENT_OFFSET, 12847 },
+  { 0xfbf9, G_UNICODE_NOT_PRESENT_OFFSET, 12854 },
+  { 0xfbfa, G_UNICODE_NOT_PRESENT_OFFSET, 12854 },
+  { 0xfbfb, G_UNICODE_NOT_PRESENT_OFFSET, 12854 },
+  { 0xfbfc, G_UNICODE_NOT_PRESENT_OFFSET, 12861 },
+  { 0xfbfd, G_UNICODE_NOT_PRESENT_OFFSET, 12861 },
+  { 0xfbfe, G_UNICODE_NOT_PRESENT_OFFSET, 12861 },
+  { 0xfbff, G_UNICODE_NOT_PRESENT_OFFSET, 12861 },
+  { 0xfc00, G_UNICODE_NOT_PRESENT_OFFSET, 12864 },
+  { 0xfc01, G_UNICODE_NOT_PRESENT_OFFSET, 12871 },
+  { 0xfc02, G_UNICODE_NOT_PRESENT_OFFSET, 12878 },
+  { 0xfc03, G_UNICODE_NOT_PRESENT_OFFSET, 12854 },
+  { 0xfc04, G_UNICODE_NOT_PRESENT_OFFSET, 12885 },
+  { 0xfc05, G_UNICODE_NOT_PRESENT_OFFSET, 12892 },
+  { 0xfc06, G_UNICODE_NOT_PRESENT_OFFSET, 12897 },
+  { 0xfc07, G_UNICODE_NOT_PRESENT_OFFSET, 12902 },
+  { 0xfc08, G_UNICODE_NOT_PRESENT_OFFSET, 12907 },
+  { 0xfc09, G_UNICODE_NOT_PRESENT_OFFSET, 12912 },
+  { 0xfc0a, G_UNICODE_NOT_PRESENT_OFFSET, 12917 },
+  { 0xfc0b, G_UNICODE_NOT_PRESENT_OFFSET, 12922 },
+  { 0xfc0c, G_UNICODE_NOT_PRESENT_OFFSET, 12927 },
+  { 0xfc0d, G_UNICODE_NOT_PRESENT_OFFSET, 12932 },
+  { 0xfc0e, G_UNICODE_NOT_PRESENT_OFFSET, 12937 },
+  { 0xfc0f, G_UNICODE_NOT_PRESENT_OFFSET, 12942 },
+  { 0xfc10, G_UNICODE_NOT_PRESENT_OFFSET, 12947 },
+  { 0xfc11, G_UNICODE_NOT_PRESENT_OFFSET, 12952 },
+  { 0xfc12, G_UNICODE_NOT_PRESENT_OFFSET, 12957 },
+  { 0xfc13, G_UNICODE_NOT_PRESENT_OFFSET, 12962 },
+  { 0xfc14, G_UNICODE_NOT_PRESENT_OFFSET, 12967 },
+  { 0xfc15, G_UNICODE_NOT_PRESENT_OFFSET, 12972 },
+  { 0xfc16, G_UNICODE_NOT_PRESENT_OFFSET, 12977 },
+  { 0xfc17, G_UNICODE_NOT_PRESENT_OFFSET, 12982 },
+  { 0xfc18, G_UNICODE_NOT_PRESENT_OFFSET, 12987 },
+  { 0xfc19, G_UNICODE_NOT_PRESENT_OFFSET, 12992 },
+  { 0xfc1a, G_UNICODE_NOT_PRESENT_OFFSET, 12997 },
+  { 0xfc1b, G_UNICODE_NOT_PRESENT_OFFSET, 13002 },
+  { 0xfc1c, G_UNICODE_NOT_PRESENT_OFFSET, 13007 },
+  { 0xfc1d, G_UNICODE_NOT_PRESENT_OFFSET, 13012 },
+  { 0xfc1e, G_UNICODE_NOT_PRESENT_OFFSET, 13017 },
+  { 0xfc1f, G_UNICODE_NOT_PRESENT_OFFSET, 13022 },
+  { 0xfc20, G_UNICODE_NOT_PRESENT_OFFSET, 13027 },
+  { 0xfc21, G_UNICODE_NOT_PRESENT_OFFSET, 13032 },
+  { 0xfc22, G_UNICODE_NOT_PRESENT_OFFSET, 13037 },
+  { 0xfc23, G_UNICODE_NOT_PRESENT_OFFSET, 13042 },
+  { 0xfc24, G_UNICODE_NOT_PRESENT_OFFSET, 13047 },
+  { 0xfc25, G_UNICODE_NOT_PRESENT_OFFSET, 13052 },
+  { 0xfc26, G_UNICODE_NOT_PRESENT_OFFSET, 13057 },
+  { 0xfc27, G_UNICODE_NOT_PRESENT_OFFSET, 13062 },
+  { 0xfc28, G_UNICODE_NOT_PRESENT_OFFSET, 13067 },
+  { 0xfc29, G_UNICODE_NOT_PRESENT_OFFSET, 13072 },
+  { 0xfc2a, G_UNICODE_NOT_PRESENT_OFFSET, 13077 },
+  { 0xfc2b, G_UNICODE_NOT_PRESENT_OFFSET, 13082 },
+  { 0xfc2c, G_UNICODE_NOT_PRESENT_OFFSET, 13087 },
+  { 0xfc2d, G_UNICODE_NOT_PRESENT_OFFSET, 13092 },
+  { 0xfc2e, G_UNICODE_NOT_PRESENT_OFFSET, 13097 },
+  { 0xfc2f, G_UNICODE_NOT_PRESENT_OFFSET, 13102 },
+  { 0xfc30, G_UNICODE_NOT_PRESENT_OFFSET, 13107 },
+  { 0xfc31, G_UNICODE_NOT_PRESENT_OFFSET, 13112 },
+  { 0xfc32, G_UNICODE_NOT_PRESENT_OFFSET, 13117 },
+  { 0xfc33, G_UNICODE_NOT_PRESENT_OFFSET, 13122 },
+  { 0xfc34, G_UNICODE_NOT_PRESENT_OFFSET, 13127 },
+  { 0xfc35, G_UNICODE_NOT_PRESENT_OFFSET, 13132 },
+  { 0xfc36, G_UNICODE_NOT_PRESENT_OFFSET, 13137 },
+  { 0xfc37, G_UNICODE_NOT_PRESENT_OFFSET, 13142 },
+  { 0xfc38, G_UNICODE_NOT_PRESENT_OFFSET, 13147 },
+  { 0xfc39, G_UNICODE_NOT_PRESENT_OFFSET, 13152 },
+  { 0xfc3a, G_UNICODE_NOT_PRESENT_OFFSET, 13157 },
+  { 0xfc3b, G_UNICODE_NOT_PRESENT_OFFSET, 13162 },
+  { 0xfc3c, G_UNICODE_NOT_PRESENT_OFFSET, 13167 },
+  { 0xfc3d, G_UNICODE_NOT_PRESENT_OFFSET, 13172 },
+  { 0xfc3e, G_UNICODE_NOT_PRESENT_OFFSET, 13177 },
+  { 0xfc3f, G_UNICODE_NOT_PRESENT_OFFSET, 13182 },
+  { 0xfc40, G_UNICODE_NOT_PRESENT_OFFSET, 13187 },
+  { 0xfc41, G_UNICODE_NOT_PRESENT_OFFSET, 13192 },
+  { 0xfc42, G_UNICODE_NOT_PRESENT_OFFSET, 13197 },
+  { 0xfc43, G_UNICODE_NOT_PRESENT_OFFSET, 13202 },
+  { 0xfc44, G_UNICODE_NOT_PRESENT_OFFSET, 13207 },
+  { 0xfc45, G_UNICODE_NOT_PRESENT_OFFSET, 13212 },
+  { 0xfc46, G_UNICODE_NOT_PRESENT_OFFSET, 13217 },
+  { 0xfc47, G_UNICODE_NOT_PRESENT_OFFSET, 13222 },
+  { 0xfc48, G_UNICODE_NOT_PRESENT_OFFSET, 13227 },
+  { 0xfc49, G_UNICODE_NOT_PRESENT_OFFSET, 13232 },
+  { 0xfc4a, G_UNICODE_NOT_PRESENT_OFFSET, 13237 },
+  { 0xfc4b, G_UNICODE_NOT_PRESENT_OFFSET, 13242 },
+  { 0xfc4c, G_UNICODE_NOT_PRESENT_OFFSET, 13247 },
+  { 0xfc4d, G_UNICODE_NOT_PRESENT_OFFSET, 13252 },
+  { 0xfc4e, G_UNICODE_NOT_PRESENT_OFFSET, 13257 },
+  { 0xfc4f, G_UNICODE_NOT_PRESENT_OFFSET, 13262 },
+  { 0xfc50, G_UNICODE_NOT_PRESENT_OFFSET, 13267 },
+  { 0xfc51, G_UNICODE_NOT_PRESENT_OFFSET, 13272 },
+  { 0xfc52, G_UNICODE_NOT_PRESENT_OFFSET, 13277 },
+  { 0xfc53, G_UNICODE_NOT_PRESENT_OFFSET, 13282 },
+  { 0xfc54, G_UNICODE_NOT_PRESENT_OFFSET, 13287 },
+  { 0xfc55, G_UNICODE_NOT_PRESENT_OFFSET, 13292 },
+  { 0xfc56, G_UNICODE_NOT_PRESENT_OFFSET, 13297 },
+  { 0xfc57, G_UNICODE_NOT_PRESENT_OFFSET, 13302 },
+  { 0xfc58, G_UNICODE_NOT_PRESENT_OFFSET, 13307 },
+  { 0xfc59, G_UNICODE_NOT_PRESENT_OFFSET, 13312 },
+  { 0xfc5a, G_UNICODE_NOT_PRESENT_OFFSET, 13317 },
+  { 0xfc5b, G_UNICODE_NOT_PRESENT_OFFSET, 13322 },
+  { 0xfc5c, G_UNICODE_NOT_PRESENT_OFFSET, 13327 },
+  { 0xfc5d, G_UNICODE_NOT_PRESENT_OFFSET, 13332 },
+  { 0xfc5e, G_UNICODE_NOT_PRESENT_OFFSET, 13337 },
+  { 0xfc5f, G_UNICODE_NOT_PRESENT_OFFSET, 13343 },
+  { 0xfc60, G_UNICODE_NOT_PRESENT_OFFSET, 13349 },
+  { 0xfc61, G_UNICODE_NOT_PRESENT_OFFSET, 13355 },
+  { 0xfc62, G_UNICODE_NOT_PRESENT_OFFSET, 13361 },
+  { 0xfc63, G_UNICODE_NOT_PRESENT_OFFSET, 13367 },
+  { 0xfc64, G_UNICODE_NOT_PRESENT_OFFSET, 13373 },
+  { 0xfc65, G_UNICODE_NOT_PRESENT_OFFSET, 13380 },
+  { 0xfc66, G_UNICODE_NOT_PRESENT_OFFSET, 12878 },
+  { 0xfc67, G_UNICODE_NOT_PRESENT_OFFSET, 13387 },
+  { 0xfc68, G_UNICODE_NOT_PRESENT_OFFSET, 12854 },
+  { 0xfc69, G_UNICODE_NOT_PRESENT_OFFSET, 12885 },
+  { 0xfc6a, G_UNICODE_NOT_PRESENT_OFFSET, 13394 },
+  { 0xfc6b, G_UNICODE_NOT_PRESENT_OFFSET, 13399 },
+  { 0xfc6c, G_UNICODE_NOT_PRESENT_OFFSET, 12907 },
+  { 0xfc6d, G_UNICODE_NOT_PRESENT_OFFSET, 13404 },
+  { 0xfc6e, G_UNICODE_NOT_PRESENT_OFFSET, 12912 },
+  { 0xfc6f, G_UNICODE_NOT_PRESENT_OFFSET, 12917 },
+  { 0xfc70, G_UNICODE_NOT_PRESENT_OFFSET, 13409 },
+  { 0xfc71, G_UNICODE_NOT_PRESENT_OFFSET, 13414 },
+  { 0xfc72, G_UNICODE_NOT_PRESENT_OFFSET, 12937 },
+  { 0xfc73, G_UNICODE_NOT_PRESENT_OFFSET, 13419 },
+  { 0xfc74, G_UNICODE_NOT_PRESENT_OFFSET, 12942 },
+  { 0xfc75, G_UNICODE_NOT_PRESENT_OFFSET, 12947 },
+  { 0xfc76, G_UNICODE_NOT_PRESENT_OFFSET, 13424 },
+  { 0xfc77, G_UNICODE_NOT_PRESENT_OFFSET, 13429 },
+  { 0xfc78, G_UNICODE_NOT_PRESENT_OFFSET, 12957 },
+  { 0xfc79, G_UNICODE_NOT_PRESENT_OFFSET, 13434 },
+  { 0xfc7a, G_UNICODE_NOT_PRESENT_OFFSET, 12962 },
+  { 0xfc7b, G_UNICODE_NOT_PRESENT_OFFSET, 12967 },
+  { 0xfc7c, G_UNICODE_NOT_PRESENT_OFFSET, 13112 },
+  { 0xfc7d, G_UNICODE_NOT_PRESENT_OFFSET, 13117 },
+  { 0xfc7e, G_UNICODE_NOT_PRESENT_OFFSET, 13132 },
+  { 0xfc7f, G_UNICODE_NOT_PRESENT_OFFSET, 13137 },
+  { 0xfc80, G_UNICODE_NOT_PRESENT_OFFSET, 13142 },
+  { 0xfc81, G_UNICODE_NOT_PRESENT_OFFSET, 13162 },
+  { 0xfc82, G_UNICODE_NOT_PRESENT_OFFSET, 13167 },
+  { 0xfc83, G_UNICODE_NOT_PRESENT_OFFSET, 13172 },
+  { 0xfc84, G_UNICODE_NOT_PRESENT_OFFSET, 13177 },
+  { 0xfc85, G_UNICODE_NOT_PRESENT_OFFSET, 13197 },
+  { 0xfc86, G_UNICODE_NOT_PRESENT_OFFSET, 13202 },
+  { 0xfc87, G_UNICODE_NOT_PRESENT_OFFSET, 13207 },
+  { 0xfc88, G_UNICODE_NOT_PRESENT_OFFSET, 13439 },
+  { 0xfc89, G_UNICODE_NOT_PRESENT_OFFSET, 13227 },
+  { 0xfc8a, G_UNICODE_NOT_PRESENT_OFFSET, 13444 },
+  { 0xfc8b, G_UNICODE_NOT_PRESENT_OFFSET, 13449 },
+  { 0xfc8c, G_UNICODE_NOT_PRESENT_OFFSET, 13257 },
+  { 0xfc8d, G_UNICODE_NOT_PRESENT_OFFSET, 13454 },
+  { 0xfc8e, G_UNICODE_NOT_PRESENT_OFFSET, 13262 },
+  { 0xfc8f, G_UNICODE_NOT_PRESENT_OFFSET, 13267 },
+  { 0xfc90, G_UNICODE_NOT_PRESENT_OFFSET, 13332 },
+  { 0xfc91, G_UNICODE_NOT_PRESENT_OFFSET, 13459 },
+  { 0xfc92, G_UNICODE_NOT_PRESENT_OFFSET, 13464 },
+  { 0xfc93, G_UNICODE_NOT_PRESENT_OFFSET, 13307 },
+  { 0xfc94, G_UNICODE_NOT_PRESENT_OFFSET, 13469 },
+  { 0xfc95, G_UNICODE_NOT_PRESENT_OFFSET, 13312 },
+  { 0xfc96, G_UNICODE_NOT_PRESENT_OFFSET, 13317 },
+  { 0xfc97, G_UNICODE_NOT_PRESENT_OFFSET, 12864 },
+  { 0xfc98, G_UNICODE_NOT_PRESENT_OFFSET, 12871 },
+  { 0xfc99, G_UNICODE_NOT_PRESENT_OFFSET, 13474 },
+  { 0xfc9a, G_UNICODE_NOT_PRESENT_OFFSET, 12878 },
+  { 0xfc9b, G_UNICODE_NOT_PRESENT_OFFSET, 13481 },
+  { 0xfc9c, G_UNICODE_NOT_PRESENT_OFFSET, 12892 },
+  { 0xfc9d, G_UNICODE_NOT_PRESENT_OFFSET, 12897 },
+  { 0xfc9e, G_UNICODE_NOT_PRESENT_OFFSET, 12902 },
+  { 0xfc9f, G_UNICODE_NOT_PRESENT_OFFSET, 12907 },
+  { 0xfca0, G_UNICODE_NOT_PRESENT_OFFSET, 13488 },
+  { 0xfca1, G_UNICODE_NOT_PRESENT_OFFSET, 12922 },
+  { 0xfca2, G_UNICODE_NOT_PRESENT_OFFSET, 12927 },
+  { 0xfca3, G_UNICODE_NOT_PRESENT_OFFSET, 12932 },
+  { 0xfca4, G_UNICODE_NOT_PRESENT_OFFSET, 12937 },
+  { 0xfca5, G_UNICODE_NOT_PRESENT_OFFSET, 13493 },
+  { 0xfca6, G_UNICODE_NOT_PRESENT_OFFSET, 12957 },
+  { 0xfca7, G_UNICODE_NOT_PRESENT_OFFSET, 12972 },
+  { 0xfca8, G_UNICODE_NOT_PRESENT_OFFSET, 12977 },
+  { 0xfca9, G_UNICODE_NOT_PRESENT_OFFSET, 12982 },
+  { 0xfcaa, G_UNICODE_NOT_PRESENT_OFFSET, 12987 },
+  { 0xfcab, G_UNICODE_NOT_PRESENT_OFFSET, 12992 },
+  { 0xfcac, G_UNICODE_NOT_PRESENT_OFFSET, 13002 },
+  { 0xfcad, G_UNICODE_NOT_PRESENT_OFFSET, 13007 },
+  { 0xfcae, G_UNICODE_NOT_PRESENT_OFFSET, 13012 },
+  { 0xfcaf, G_UNICODE_NOT_PRESENT_OFFSET, 13017 },
+  { 0xfcb0, G_UNICODE_NOT_PRESENT_OFFSET, 13022 },
+  { 0xfcb1, G_UNICODE_NOT_PRESENT_OFFSET, 13027 },
+  { 0xfcb2, G_UNICODE_NOT_PRESENT_OFFSET, 13498 },
+  { 0xfcb3, G_UNICODE_NOT_PRESENT_OFFSET, 13032 },
+  { 0xfcb4, G_UNICODE_NOT_PRESENT_OFFSET, 13037 },
+  { 0xfcb5, G_UNICODE_NOT_PRESENT_OFFSET, 13042 },
+  { 0xfcb6, G_UNICODE_NOT_PRESENT_OFFSET, 13047 },
+  { 0xfcb7, G_UNICODE_NOT_PRESENT_OFFSET, 13052 },
+  { 0xfcb8, G_UNICODE_NOT_PRESENT_OFFSET, 13057 },
+  { 0xfcb9, G_UNICODE_NOT_PRESENT_OFFSET, 13067 },
+  { 0xfcba, G_UNICODE_NOT_PRESENT_OFFSET, 13072 },
+  { 0xfcbb, G_UNICODE_NOT_PRESENT_OFFSET, 13077 },
+  { 0xfcbc, G_UNICODE_NOT_PRESENT_OFFSET, 13082 },
+  { 0xfcbd, G_UNICODE_NOT_PRESENT_OFFSET, 13087 },
+  { 0xfcbe, G_UNICODE_NOT_PRESENT_OFFSET, 13092 },
+  { 0xfcbf, G_UNICODE_NOT_PRESENT_OFFSET, 13097 },
+  { 0xfcc0, G_UNICODE_NOT_PRESENT_OFFSET, 13102 },
+  { 0xfcc1, G_UNICODE_NOT_PRESENT_OFFSET, 13107 },
+  { 0xfcc2, G_UNICODE_NOT_PRESENT_OFFSET, 13122 },
+  { 0xfcc3, G_UNICODE_NOT_PRESENT_OFFSET, 13127 },
+  { 0xfcc4, G_UNICODE_NOT_PRESENT_OFFSET, 13147 },
+  { 0xfcc5, G_UNICODE_NOT_PRESENT_OFFSET, 13152 },
+  { 0xfcc6, G_UNICODE_NOT_PRESENT_OFFSET, 13157 },
+  { 0xfcc7, G_UNICODE_NOT_PRESENT_OFFSET, 13162 },
+  { 0xfcc8, G_UNICODE_NOT_PRESENT_OFFSET, 13167 },
+  { 0xfcc9, G_UNICODE_NOT_PRESENT_OFFSET, 13182 },
+  { 0xfcca, G_UNICODE_NOT_PRESENT_OFFSET, 13187 },
+  { 0xfccb, G_UNICODE_NOT_PRESENT_OFFSET, 13192 },
+  { 0xfccc, G_UNICODE_NOT_PRESENT_OFFSET, 13197 },
+  { 0xfccd, G_UNICODE_NOT_PRESENT_OFFSET, 13503 },
+  { 0xfcce, G_UNICODE_NOT_PRESENT_OFFSET, 13212 },
+  { 0xfccf, G_UNICODE_NOT_PRESENT_OFFSET, 13217 },
+  { 0xfcd0, G_UNICODE_NOT_PRESENT_OFFSET, 13222 },
+  { 0xfcd1, G_UNICODE_NOT_PRESENT_OFFSET, 13227 },
+  { 0xfcd2, G_UNICODE_NOT_PRESENT_OFFSET, 13242 },
+  { 0xfcd3, G_UNICODE_NOT_PRESENT_OFFSET, 13247 },
+  { 0xfcd4, G_UNICODE_NOT_PRESENT_OFFSET, 13252 },
+  { 0xfcd5, G_UNICODE_NOT_PRESENT_OFFSET, 13257 },
+  { 0xfcd6, G_UNICODE_NOT_PRESENT_OFFSET, 13508 },
+  { 0xfcd7, G_UNICODE_NOT_PRESENT_OFFSET, 13272 },
+  { 0xfcd8, G_UNICODE_NOT_PRESENT_OFFSET, 13277 },
+  { 0xfcd9, G_UNICODE_NOT_PRESENT_OFFSET, 13513 },
+  { 0xfcda, G_UNICODE_NOT_PRESENT_OFFSET, 13292 },
+  { 0xfcdb, G_UNICODE_NOT_PRESENT_OFFSET, 13297 },
+  { 0xfcdc, G_UNICODE_NOT_PRESENT_OFFSET, 13302 },
+  { 0xfcdd, G_UNICODE_NOT_PRESENT_OFFSET, 13307 },
+  { 0xfcde, G_UNICODE_NOT_PRESENT_OFFSET, 13518 },
+  { 0xfcdf, G_UNICODE_NOT_PRESENT_OFFSET, 12878 },
+  { 0xfce0, G_UNICODE_NOT_PRESENT_OFFSET, 13481 },
+  { 0xfce1, G_UNICODE_NOT_PRESENT_OFFSET, 12907 },
+  { 0xfce2, G_UNICODE_NOT_PRESENT_OFFSET, 13488 },
+  { 0xfce3, G_UNICODE_NOT_PRESENT_OFFSET, 12937 },
+  { 0xfce4, G_UNICODE_NOT_PRESENT_OFFSET, 13493 },
+  { 0xfce5, G_UNICODE_NOT_PRESENT_OFFSET, 12957 },
+  { 0xfce6, G_UNICODE_NOT_PRESENT_OFFSET, 13523 },
+  { 0xfce7, G_UNICODE_NOT_PRESENT_OFFSET, 13022 },
+  { 0xfce8, G_UNICODE_NOT_PRESENT_OFFSET, 13528 },
+  { 0xfce9, G_UNICODE_NOT_PRESENT_OFFSET, 13533 },
+  { 0xfcea, G_UNICODE_NOT_PRESENT_OFFSET, 13538 },
+  { 0xfceb, G_UNICODE_NOT_PRESENT_OFFSET, 13162 },
+  { 0xfcec, G_UNICODE_NOT_PRESENT_OFFSET, 13167 },
+  { 0xfced, G_UNICODE_NOT_PRESENT_OFFSET, 13197 },
+  { 0xfcee, G_UNICODE_NOT_PRESENT_OFFSET, 13257 },
+  { 0xfcef, G_UNICODE_NOT_PRESENT_OFFSET, 13508 },
+  { 0xfcf0, G_UNICODE_NOT_PRESENT_OFFSET, 13307 },
+  { 0xfcf1, G_UNICODE_NOT_PRESENT_OFFSET, 13518 },
+  { 0xfcf2, G_UNICODE_NOT_PRESENT_OFFSET, 13543 },
+  { 0xfcf3, G_UNICODE_NOT_PRESENT_OFFSET, 13550 },
+  { 0xfcf4, G_UNICODE_NOT_PRESENT_OFFSET, 13557 },
+  { 0xfcf5, G_UNICODE_NOT_PRESENT_OFFSET, 13564 },
+  { 0xfcf6, G_UNICODE_NOT_PRESENT_OFFSET, 13569 },
+  { 0xfcf7, G_UNICODE_NOT_PRESENT_OFFSET, 13574 },
+  { 0xfcf8, G_UNICODE_NOT_PRESENT_OFFSET, 13579 },
+  { 0xfcf9, G_UNICODE_NOT_PRESENT_OFFSET, 13584 },
+  { 0xfcfa, G_UNICODE_NOT_PRESENT_OFFSET, 13589 },
+  { 0xfcfb, G_UNICODE_NOT_PRESENT_OFFSET, 13594 },
+  { 0xfcfc, G_UNICODE_NOT_PRESENT_OFFSET, 13599 },
+  { 0xfcfd, G_UNICODE_NOT_PRESENT_OFFSET, 13604 },
+  { 0xfcfe, G_UNICODE_NOT_PRESENT_OFFSET, 13609 },
+  { 0xfcff, G_UNICODE_NOT_PRESENT_OFFSET, 13614 },
+  { 0xfd00, G_UNICODE_NOT_PRESENT_OFFSET, 13619 },
+  { 0xfd01, G_UNICODE_NOT_PRESENT_OFFSET, 13624 },
+  { 0xfd02, G_UNICODE_NOT_PRESENT_OFFSET, 13629 },
+  { 0xfd03, G_UNICODE_NOT_PRESENT_OFFSET, 13634 },
+  { 0xfd04, G_UNICODE_NOT_PRESENT_OFFSET, 13639 },
+  { 0xfd05, G_UNICODE_NOT_PRESENT_OFFSET, 13644 },
+  { 0xfd06, G_UNICODE_NOT_PRESENT_OFFSET, 13649 },
+  { 0xfd07, G_UNICODE_NOT_PRESENT_OFFSET, 13654 },
+  { 0xfd08, G_UNICODE_NOT_PRESENT_OFFSET, 13659 },
+  { 0xfd09, G_UNICODE_NOT_PRESENT_OFFSET, 13664 },
+  { 0xfd0a, G_UNICODE_NOT_PRESENT_OFFSET, 13669 },
+  { 0xfd0b, G_UNICODE_NOT_PRESENT_OFFSET, 13674 },
+  { 0xfd0c, G_UNICODE_NOT_PRESENT_OFFSET, 13533 },
+  { 0xfd0d, G_UNICODE_NOT_PRESENT_OFFSET, 13679 },
+  { 0xfd0e, G_UNICODE_NOT_PRESENT_OFFSET, 13684 },
+  { 0xfd0f, G_UNICODE_NOT_PRESENT_OFFSET, 13689 },
+  { 0xfd10, G_UNICODE_NOT_PRESENT_OFFSET, 13694 },
+  { 0xfd11, G_UNICODE_NOT_PRESENT_OFFSET, 13564 },
+  { 0xfd12, G_UNICODE_NOT_PRESENT_OFFSET, 13569 },
+  { 0xfd13, G_UNICODE_NOT_PRESENT_OFFSET, 13574 },
+  { 0xfd14, G_UNICODE_NOT_PRESENT_OFFSET, 13579 },
+  { 0xfd15, G_UNICODE_NOT_PRESENT_OFFSET, 13584 },
+  { 0xfd16, G_UNICODE_NOT_PRESENT_OFFSET, 13589 },
+  { 0xfd17, G_UNICODE_NOT_PRESENT_OFFSET, 13594 },
+  { 0xfd18, G_UNICODE_NOT_PRESENT_OFFSET, 13599 },
+  { 0xfd19, G_UNICODE_NOT_PRESENT_OFFSET, 13604 },
+  { 0xfd1a, G_UNICODE_NOT_PRESENT_OFFSET, 13609 },
+  { 0xfd1b, G_UNICODE_NOT_PRESENT_OFFSET, 13614 },
+  { 0xfd1c, G_UNICODE_NOT_PRESENT_OFFSET, 13619 },
+  { 0xfd1d, G_UNICODE_NOT_PRESENT_OFFSET, 13624 },
+  { 0xfd1e, G_UNICODE_NOT_PRESENT_OFFSET, 13629 },
+  { 0xfd1f, G_UNICODE_NOT_PRESENT_OFFSET, 13634 },
+  { 0xfd20, G_UNICODE_NOT_PRESENT_OFFSET, 13639 },
+  { 0xfd21, G_UNICODE_NOT_PRESENT_OFFSET, 13644 },
+  { 0xfd22, G_UNICODE_NOT_PRESENT_OFFSET, 13649 },
+  { 0xfd23, G_UNICODE_NOT_PRESENT_OFFSET, 13654 },
+  { 0xfd24, G_UNICODE_NOT_PRESENT_OFFSET, 13659 },
+  { 0xfd25, G_UNICODE_NOT_PRESENT_OFFSET, 13664 },
+  { 0xfd26, G_UNICODE_NOT_PRESENT_OFFSET, 13669 },
+  { 0xfd27, G_UNICODE_NOT_PRESENT_OFFSET, 13674 },
+  { 0xfd28, G_UNICODE_NOT_PRESENT_OFFSET, 13533 },
+  { 0xfd29, G_UNICODE_NOT_PRESENT_OFFSET, 13679 },
+  { 0xfd2a, G_UNICODE_NOT_PRESENT_OFFSET, 13684 },
+  { 0xfd2b, G_UNICODE_NOT_PRESENT_OFFSET, 13689 },
+  { 0xfd2c, G_UNICODE_NOT_PRESENT_OFFSET, 13694 },
+  { 0xfd2d, G_UNICODE_NOT_PRESENT_OFFSET, 13664 },
+  { 0xfd2e, G_UNICODE_NOT_PRESENT_OFFSET, 13669 },
+  { 0xfd2f, G_UNICODE_NOT_PRESENT_OFFSET, 13674 },
+  { 0xfd30, G_UNICODE_NOT_PRESENT_OFFSET, 13533 },
+  { 0xfd31, G_UNICODE_NOT_PRESENT_OFFSET, 13528 },
+  { 0xfd32, G_UNICODE_NOT_PRESENT_OFFSET, 13538 },
+  { 0xfd33, G_UNICODE_NOT_PRESENT_OFFSET, 13062 },
+  { 0xfd34, G_UNICODE_NOT_PRESENT_OFFSET, 13007 },
+  { 0xfd35, G_UNICODE_NOT_PRESENT_OFFSET, 13012 },
+  { 0xfd36, G_UNICODE_NOT_PRESENT_OFFSET, 13017 },
+  { 0xfd37, G_UNICODE_NOT_PRESENT_OFFSET, 13664 },
+  { 0xfd38, G_UNICODE_NOT_PRESENT_OFFSET, 13669 },
+  { 0xfd39, G_UNICODE_NOT_PRESENT_OFFSET, 13674 },
+  { 0xfd3a, G_UNICODE_NOT_PRESENT_OFFSET, 13062 },
+  { 0xfd3b, G_UNICODE_NOT_PRESENT_OFFSET, 13067 },
+  { 0xfd3c, G_UNICODE_NOT_PRESENT_OFFSET, 13699 },
+  { 0xfd3d, G_UNICODE_NOT_PRESENT_OFFSET, 13699 },
+  { 0xfd50, G_UNICODE_NOT_PRESENT_OFFSET, 13704 },
+  { 0xfd51, G_UNICODE_NOT_PRESENT_OFFSET, 13711 },
+  { 0xfd52, G_UNICODE_NOT_PRESENT_OFFSET, 13711 },
+  { 0xfd53, G_UNICODE_NOT_PRESENT_OFFSET, 13718 },
+  { 0xfd54, G_UNICODE_NOT_PRESENT_OFFSET, 13725 },
+  { 0xfd55, G_UNICODE_NOT_PRESENT_OFFSET, 13732 },
+  { 0xfd56, G_UNICODE_NOT_PRESENT_OFFSET, 13739 },
+  { 0xfd57, G_UNICODE_NOT_PRESENT_OFFSET, 13746 },
+  { 0xfd58, G_UNICODE_NOT_PRESENT_OFFSET, 13753 },
+  { 0xfd59, G_UNICODE_NOT_PRESENT_OFFSET, 13753 },
+  { 0xfd5a, G_UNICODE_NOT_PRESENT_OFFSET, 13760 },
+  { 0xfd5b, G_UNICODE_NOT_PRESENT_OFFSET, 13767 },
+  { 0xfd5c, G_UNICODE_NOT_PRESENT_OFFSET, 13774 },
+  { 0xfd5d, G_UNICODE_NOT_PRESENT_OFFSET, 13781 },
+  { 0xfd5e, G_UNICODE_NOT_PRESENT_OFFSET, 13788 },
+  { 0xfd5f, G_UNICODE_NOT_PRESENT_OFFSET, 13795 },
+  { 0xfd60, G_UNICODE_NOT_PRESENT_OFFSET, 13795 },
+  { 0xfd61, G_UNICODE_NOT_PRESENT_OFFSET, 13802 },
+  { 0xfd62, G_UNICODE_NOT_PRESENT_OFFSET, 13809 },
+  { 0xfd63, G_UNICODE_NOT_PRESENT_OFFSET, 13809 },
+  { 0xfd64, G_UNICODE_NOT_PRESENT_OFFSET, 13816 },
+  { 0xfd65, G_UNICODE_NOT_PRESENT_OFFSET, 13816 },
+  { 0xfd66, G_UNICODE_NOT_PRESENT_OFFSET, 13823 },
+  { 0xfd67, G_UNICODE_NOT_PRESENT_OFFSET, 13830 },
+  { 0xfd68, G_UNICODE_NOT_PRESENT_OFFSET, 13830 },
+  { 0xfd69, G_UNICODE_NOT_PRESENT_OFFSET, 13837 },
+  { 0xfd6a, G_UNICODE_NOT_PRESENT_OFFSET, 13844 },
+  { 0xfd6b, G_UNICODE_NOT_PRESENT_OFFSET, 13844 },
+  { 0xfd6c, G_UNICODE_NOT_PRESENT_OFFSET, 13851 },
+  { 0xfd6d, G_UNICODE_NOT_PRESENT_OFFSET, 13851 },
+  { 0xfd6e, G_UNICODE_NOT_PRESENT_OFFSET, 13858 },
+  { 0xfd6f, G_UNICODE_NOT_PRESENT_OFFSET, 13865 },
+  { 0xfd70, G_UNICODE_NOT_PRESENT_OFFSET, 13865 },
+  { 0xfd71, G_UNICODE_NOT_PRESENT_OFFSET, 13872 },
+  { 0xfd72, G_UNICODE_NOT_PRESENT_OFFSET, 13872 },
+  { 0xfd73, G_UNICODE_NOT_PRESENT_OFFSET, 13879 },
+  { 0xfd74, G_UNICODE_NOT_PRESENT_OFFSET, 13886 },
+  { 0xfd75, G_UNICODE_NOT_PRESENT_OFFSET, 13893 },
+  { 0xfd76, G_UNICODE_NOT_PRESENT_OFFSET, 13900 },
+  { 0xfd77, G_UNICODE_NOT_PRESENT_OFFSET, 13900 },
+  { 0xfd78, G_UNICODE_NOT_PRESENT_OFFSET, 13907 },
+  { 0xfd79, G_UNICODE_NOT_PRESENT_OFFSET, 13914 },
+  { 0xfd7a, G_UNICODE_NOT_PRESENT_OFFSET, 13921 },
+  { 0xfd7b, G_UNICODE_NOT_PRESENT_OFFSET, 13928 },
+  { 0xfd7c, G_UNICODE_NOT_PRESENT_OFFSET, 13935 },
+  { 0xfd7d, G_UNICODE_NOT_PRESENT_OFFSET, 13935 },
+  { 0xfd7e, G_UNICODE_NOT_PRESENT_OFFSET, 13942 },
+  { 0xfd7f, G_UNICODE_NOT_PRESENT_OFFSET, 13949 },
+  { 0xfd80, G_UNICODE_NOT_PRESENT_OFFSET, 13956 },
+  { 0xfd81, G_UNICODE_NOT_PRESENT_OFFSET, 13963 },
+  { 0xfd82, G_UNICODE_NOT_PRESENT_OFFSET, 13970 },
+  { 0xfd83, G_UNICODE_NOT_PRESENT_OFFSET, 13977 },
+  { 0xfd84, G_UNICODE_NOT_PRESENT_OFFSET, 13977 },
+  { 0xfd85, G_UNICODE_NOT_PRESENT_OFFSET, 13984 },
+  { 0xfd86, G_UNICODE_NOT_PRESENT_OFFSET, 13984 },
+  { 0xfd87, G_UNICODE_NOT_PRESENT_OFFSET, 13991 },
+  { 0xfd88, G_UNICODE_NOT_PRESENT_OFFSET, 13991 },
+  { 0xfd89, G_UNICODE_NOT_PRESENT_OFFSET, 13998 },
+  { 0xfd8a, G_UNICODE_NOT_PRESENT_OFFSET, 14005 },
+  { 0xfd8b, G_UNICODE_NOT_PRESENT_OFFSET, 14012 },
+  { 0xfd8c, G_UNICODE_NOT_PRESENT_OFFSET, 14019 },
+  { 0xfd8d, G_UNICODE_NOT_PRESENT_OFFSET, 14026 },
+  { 0xfd8e, G_UNICODE_NOT_PRESENT_OFFSET, 14033 },
+  { 0xfd8f, G_UNICODE_NOT_PRESENT_OFFSET, 14040 },
+  { 0xfd92, G_UNICODE_NOT_PRESENT_OFFSET, 14047 },
+  { 0xfd93, G_UNICODE_NOT_PRESENT_OFFSET, 14054 },
+  { 0xfd94, G_UNICODE_NOT_PRESENT_OFFSET, 14061 },
+  { 0xfd95, G_UNICODE_NOT_PRESENT_OFFSET, 14068 },
+  { 0xfd96, G_UNICODE_NOT_PRESENT_OFFSET, 14075 },
+  { 0xfd97, G_UNICODE_NOT_PRESENT_OFFSET, 14082 },
+  { 0xfd98, G_UNICODE_NOT_PRESENT_OFFSET, 14082 },
+  { 0xfd99, G_UNICODE_NOT_PRESENT_OFFSET, 14089 },
+  { 0xfd9a, G_UNICODE_NOT_PRESENT_OFFSET, 14096 },
+  { 0xfd9b, G_UNICODE_NOT_PRESENT_OFFSET, 14103 },
+  { 0xfd9c, G_UNICODE_NOT_PRESENT_OFFSET, 14110 },
+  { 0xfd9d, G_UNICODE_NOT_PRESENT_OFFSET, 14110 },
+  { 0xfd9e, G_UNICODE_NOT_PRESENT_OFFSET, 14117 },
+  { 0xfd9f, G_UNICODE_NOT_PRESENT_OFFSET, 14124 },
+  { 0xfda0, G_UNICODE_NOT_PRESENT_OFFSET, 14131 },
+  { 0xfda1, G_UNICODE_NOT_PRESENT_OFFSET, 14138 },
+  { 0xfda2, G_UNICODE_NOT_PRESENT_OFFSET, 14145 },
+  { 0xfda3, G_UNICODE_NOT_PRESENT_OFFSET, 14152 },
+  { 0xfda4, G_UNICODE_NOT_PRESENT_OFFSET, 14159 },
+  { 0xfda5, G_UNICODE_NOT_PRESENT_OFFSET, 14166 },
+  { 0xfda6, G_UNICODE_NOT_PRESENT_OFFSET, 14173 },
+  { 0xfda7, G_UNICODE_NOT_PRESENT_OFFSET, 14180 },
+  { 0xfda8, G_UNICODE_NOT_PRESENT_OFFSET, 14187 },
+  { 0xfda9, G_UNICODE_NOT_PRESENT_OFFSET, 14194 },
+  { 0xfdaa, G_UNICODE_NOT_PRESENT_OFFSET, 14201 },
+  { 0xfdab, G_UNICODE_NOT_PRESENT_OFFSET, 14208 },
+  { 0xfdac, G_UNICODE_NOT_PRESENT_OFFSET, 14215 },
+  { 0xfdad, G_UNICODE_NOT_PRESENT_OFFSET, 14222 },
+  { 0xfdae, G_UNICODE_NOT_PRESENT_OFFSET, 14229 },
+  { 0xfdaf, G_UNICODE_NOT_PRESENT_OFFSET, 14236 },
+  { 0xfdb0, G_UNICODE_NOT_PRESENT_OFFSET, 14243 },
+  { 0xfdb1, G_UNICODE_NOT_PRESENT_OFFSET, 14250 },
+  { 0xfdb2, G_UNICODE_NOT_PRESENT_OFFSET, 14257 },
+  { 0xfdb3, G_UNICODE_NOT_PRESENT_OFFSET, 14264 },
+  { 0xfdb4, G_UNICODE_NOT_PRESENT_OFFSET, 13942 },
+  { 0xfdb5, G_UNICODE_NOT_PRESENT_OFFSET, 13956 },
+  { 0xfdb6, G_UNICODE_NOT_PRESENT_OFFSET, 14271 },
+  { 0xfdb7, G_UNICODE_NOT_PRESENT_OFFSET, 14278 },
+  { 0xfdb8, G_UNICODE_NOT_PRESENT_OFFSET, 14285 },
+  { 0xfdb9, G_UNICODE_NOT_PRESENT_OFFSET, 14292 },
+  { 0xfdba, G_UNICODE_NOT_PRESENT_OFFSET, 14299 },
+  { 0xfdbb, G_UNICODE_NOT_PRESENT_OFFSET, 14306 },
+  { 0xfdbc, G_UNICODE_NOT_PRESENT_OFFSET, 14299 },
+  { 0xfdbd, G_UNICODE_NOT_PRESENT_OFFSET, 14285 },
+  { 0xfdbe, G_UNICODE_NOT_PRESENT_OFFSET, 14313 },
+  { 0xfdbf, G_UNICODE_NOT_PRESENT_OFFSET, 14320 },
+  { 0xfdc0, G_UNICODE_NOT_PRESENT_OFFSET, 14327 },
+  { 0xfdc1, G_UNICODE_NOT_PRESENT_OFFSET, 14334 },
+  { 0xfdc2, G_UNICODE_NOT_PRESENT_OFFSET, 14341 },
+  { 0xfdc3, G_UNICODE_NOT_PRESENT_OFFSET, 14306 },
+  { 0xfdc4, G_UNICODE_NOT_PRESENT_OFFSET, 13893 },
+  { 0xfdc5, G_UNICODE_NOT_PRESENT_OFFSET, 13823 },
+  { 0xfdc6, G_UNICODE_NOT_PRESENT_OFFSET, 14348 },
+  { 0xfdc7, G_UNICODE_NOT_PRESENT_OFFSET, 14355 },
+  { 0xfdf0, G_UNICODE_NOT_PRESENT_OFFSET, 14362 },
+  { 0xfdf1, G_UNICODE_NOT_PRESENT_OFFSET, 14369 },
+  { 0xfdf2, G_UNICODE_NOT_PRESENT_OFFSET, 14376 },
+  { 0xfdf3, G_UNICODE_NOT_PRESENT_OFFSET, 14385 },
+  { 0xfdf4, G_UNICODE_NOT_PRESENT_OFFSET, 14394 },
+  { 0xfdf5, G_UNICODE_NOT_PRESENT_OFFSET, 14403 },
+  { 0xfdf6, G_UNICODE_NOT_PRESENT_OFFSET, 14412 },
+  { 0xfdf7, G_UNICODE_NOT_PRESENT_OFFSET, 14421 },
+  { 0xfdf8, G_UNICODE_NOT_PRESENT_OFFSET, 14430 },
+  { 0xfdf9, G_UNICODE_NOT_PRESENT_OFFSET, 14439 },
+  { 0xfdfa, G_UNICODE_NOT_PRESENT_OFFSET, 14446 },
+  { 0xfdfb, G_UNICODE_NOT_PRESENT_OFFSET, 14480 },
+  { 0xfdfc, G_UNICODE_NOT_PRESENT_OFFSET, 14496 },
+  { 0xfe10, G_UNICODE_NOT_PRESENT_OFFSET, 14505 },
+  { 0xfe11, G_UNICODE_NOT_PRESENT_OFFSET, 14507 },
+  { 0xfe12, G_UNICODE_NOT_PRESENT_OFFSET, 14511 },
+  { 0xfe13, G_UNICODE_NOT_PRESENT_OFFSET, 14515 },
+  { 0xfe14, G_UNICODE_NOT_PRESENT_OFFSET, 1248 },
+  { 0xfe15, G_UNICODE_NOT_PRESENT_OFFSET, 14517 },
+  { 0xfe16, G_UNICODE_NOT_PRESENT_OFFSET, 14519 },
+  { 0xfe17, G_UNICODE_NOT_PRESENT_OFFSET, 14521 },
+  { 0xfe18, G_UNICODE_NOT_PRESENT_OFFSET, 14525 },
+  { 0xfe19, G_UNICODE_NOT_PRESENT_OFFSET, 5186 },
+  { 0xfe30, G_UNICODE_NOT_PRESENT_OFFSET, 5183 },
+  { 0xfe31, G_UNICODE_NOT_PRESENT_OFFSET, 14529 },
+  { 0xfe32, G_UNICODE_NOT_PRESENT_OFFSET, 14533 },
+  { 0xfe33, G_UNICODE_NOT_PRESENT_OFFSET, 14537 },
+  { 0xfe34, G_UNICODE_NOT_PRESENT_OFFSET, 14537 },
+  { 0xfe35, G_UNICODE_NOT_PRESENT_OFFSET, 5275 },
+  { 0xfe36, G_UNICODE_NOT_PRESENT_OFFSET, 5277 },
+  { 0xfe37, G_UNICODE_NOT_PRESENT_OFFSET, 14539 },
+  { 0xfe38, G_UNICODE_NOT_PRESENT_OFFSET, 14541 },
+  { 0xfe39, G_UNICODE_NOT_PRESENT_OFFSET, 14543 },
+  { 0xfe3a, G_UNICODE_NOT_PRESENT_OFFSET, 14547 },
+  { 0xfe3b, G_UNICODE_NOT_PRESENT_OFFSET, 14551 },
+  { 0xfe3c, G_UNICODE_NOT_PRESENT_OFFSET, 14555 },
+  { 0xfe3d, G_UNICODE_NOT_PRESENT_OFFSET, 14559 },
+  { 0xfe3e, G_UNICODE_NOT_PRESENT_OFFSET, 14563 },
+  { 0xfe3f, G_UNICODE_NOT_PRESENT_OFFSET, 5801 },
+  { 0xfe40, G_UNICODE_NOT_PRESENT_OFFSET, 5805 },
+  { 0xfe41, G_UNICODE_NOT_PRESENT_OFFSET, 14567 },
+  { 0xfe42, G_UNICODE_NOT_PRESENT_OFFSET, 14571 },
+  { 0xfe43, G_UNICODE_NOT_PRESENT_OFFSET, 14575 },
+  { 0xfe44, G_UNICODE_NOT_PRESENT_OFFSET, 14579 },
+  { 0xfe47, G_UNICODE_NOT_PRESENT_OFFSET, 14583 },
+  { 0xfe48, G_UNICODE_NOT_PRESENT_OFFSET, 14585 },
+  { 0xfe49, G_UNICODE_NOT_PRESENT_OFFSET, 5227 },
+  { 0xfe4a, G_UNICODE_NOT_PRESENT_OFFSET, 5227 },
+  { 0xfe4b, G_UNICODE_NOT_PRESENT_OFFSET, 5227 },
+  { 0xfe4c, G_UNICODE_NOT_PRESENT_OFFSET, 5227 },
+  { 0xfe4d, G_UNICODE_NOT_PRESENT_OFFSET, 14537 },
+  { 0xfe4e, G_UNICODE_NOT_PRESENT_OFFSET, 14537 },
+  { 0xfe4f, G_UNICODE_NOT_PRESENT_OFFSET, 14537 },
+  { 0xfe50, G_UNICODE_NOT_PRESENT_OFFSET, 14505 },
+  { 0xfe51, G_UNICODE_NOT_PRESENT_OFFSET, 14507 },
+  { 0xfe52, G_UNICODE_NOT_PRESENT_OFFSET, 5181 },
+  { 0xfe54, G_UNICODE_NOT_PRESENT_OFFSET, 1248 },
+  { 0xfe55, G_UNICODE_NOT_PRESENT_OFFSET, 14515 },
+  { 0xfe56, G_UNICODE_NOT_PRESENT_OFFSET, 14519 },
+  { 0xfe57, G_UNICODE_NOT_PRESENT_OFFSET, 14517 },
+  { 0xfe58, G_UNICODE_NOT_PRESENT_OFFSET, 14529 },
+  { 0xfe59, G_UNICODE_NOT_PRESENT_OFFSET, 5275 },
+  { 0xfe5a, G_UNICODE_NOT_PRESENT_OFFSET, 5277 },
+  { 0xfe5b, G_UNICODE_NOT_PRESENT_OFFSET, 14539 },
+  { 0xfe5c, G_UNICODE_NOT_PRESENT_OFFSET, 14541 },
+  { 0xfe5d, G_UNICODE_NOT_PRESENT_OFFSET, 14543 },
+  { 0xfe5e, G_UNICODE_NOT_PRESENT_OFFSET, 14547 },
+  { 0xfe5f, G_UNICODE_NOT_PRESENT_OFFSET, 14587 },
+  { 0xfe60, G_UNICODE_NOT_PRESENT_OFFSET, 14589 },
+  { 0xfe61, G_UNICODE_NOT_PRESENT_OFFSET, 14591 },
+  { 0xfe62, G_UNICODE_NOT_PRESENT_OFFSET, 5267 },
+  { 0xfe63, G_UNICODE_NOT_PRESENT_OFFSET, 14593 },
+  { 0xfe64, G_UNICODE_NOT_PRESENT_OFFSET, 14595 },
+  { 0xfe65, G_UNICODE_NOT_PRESENT_OFFSET, 14597 },
+  { 0xfe66, G_UNICODE_NOT_PRESENT_OFFSET, 5273 },
+  { 0xfe68, G_UNICODE_NOT_PRESENT_OFFSET, 14599 },
+  { 0xfe69, G_UNICODE_NOT_PRESENT_OFFSET, 14601 },
+  { 0xfe6a, G_UNICODE_NOT_PRESENT_OFFSET, 14603 },
+  { 0xfe6b, G_UNICODE_NOT_PRESENT_OFFSET, 14605 },
+  { 0xfe70, G_UNICODE_NOT_PRESENT_OFFSET, 14607 },
+  { 0xfe71, G_UNICODE_NOT_PRESENT_OFFSET, 14611 },
+  { 0xfe72, G_UNICODE_NOT_PRESENT_OFFSET, 14616 },
+  { 0xfe74, G_UNICODE_NOT_PRESENT_OFFSET, 14620 },
+  { 0xfe76, G_UNICODE_NOT_PRESENT_OFFSET, 14624 },
+  { 0xfe77, G_UNICODE_NOT_PRESENT_OFFSET, 14628 },
+  { 0xfe78, G_UNICODE_NOT_PRESENT_OFFSET, 14633 },
+  { 0xfe79, G_UNICODE_NOT_PRESENT_OFFSET, 14637 },
+  { 0xfe7a, G_UNICODE_NOT_PRESENT_OFFSET, 14642 },
+  { 0xfe7b, G_UNICODE_NOT_PRESENT_OFFSET, 14646 },
+  { 0xfe7c, G_UNICODE_NOT_PRESENT_OFFSET, 14651 },
+  { 0xfe7d, G_UNICODE_NOT_PRESENT_OFFSET, 14655 },
+  { 0xfe7e, G_UNICODE_NOT_PRESENT_OFFSET, 14660 },
+  { 0xfe7f, G_UNICODE_NOT_PRESENT_OFFSET, 14664 },
+  { 0xfe80, G_UNICODE_NOT_PRESENT_OFFSET, 14669 },
+  { 0xfe81, G_UNICODE_NOT_PRESENT_OFFSET, 1676 },
+  { 0xfe82, G_UNICODE_NOT_PRESENT_OFFSET, 1676 },
+  { 0xfe83, G_UNICODE_NOT_PRESENT_OFFSET, 1681 },
+  { 0xfe84, G_UNICODE_NOT_PRESENT_OFFSET, 1681 },
+  { 0xfe85, G_UNICODE_NOT_PRESENT_OFFSET, 1686 },
+  { 0xfe86, G_UNICODE_NOT_PRESENT_OFFSET, 1686 },
+  { 0xfe87, G_UNICODE_NOT_PRESENT_OFFSET, 1691 },
+  { 0xfe88, G_UNICODE_NOT_PRESENT_OFFSET, 1691 },
+  { 0xfe89, G_UNICODE_NOT_PRESENT_OFFSET, 1696 },
+  { 0xfe8a, G_UNICODE_NOT_PRESENT_OFFSET, 1696 },
+  { 0xfe8b, G_UNICODE_NOT_PRESENT_OFFSET, 1696 },
+  { 0xfe8c, G_UNICODE_NOT_PRESENT_OFFSET, 1696 },
+  { 0xfe8d, G_UNICODE_NOT_PRESENT_OFFSET, 14672 },
+  { 0xfe8e, G_UNICODE_NOT_PRESENT_OFFSET, 14672 },
+  { 0xfe8f, G_UNICODE_NOT_PRESENT_OFFSET, 14675 },
+  { 0xfe90, G_UNICODE_NOT_PRESENT_OFFSET, 14675 },
+  { 0xfe91, G_UNICODE_NOT_PRESENT_OFFSET, 14675 },
+  { 0xfe92, G_UNICODE_NOT_PRESENT_OFFSET, 14675 },
+  { 0xfe93, G_UNICODE_NOT_PRESENT_OFFSET, 14678 },
+  { 0xfe94, G_UNICODE_NOT_PRESENT_OFFSET, 14678 },
+  { 0xfe95, G_UNICODE_NOT_PRESENT_OFFSET, 14681 },
+  { 0xfe96, G_UNICODE_NOT_PRESENT_OFFSET, 14681 },
+  { 0xfe97, G_UNICODE_NOT_PRESENT_OFFSET, 14681 },
+  { 0xfe98, G_UNICODE_NOT_PRESENT_OFFSET, 14681 },
+  { 0xfe99, G_UNICODE_NOT_PRESENT_OFFSET, 14684 },
+  { 0xfe9a, G_UNICODE_NOT_PRESENT_OFFSET, 14684 },
+  { 0xfe9b, G_UNICODE_NOT_PRESENT_OFFSET, 14684 },
+  { 0xfe9c, G_UNICODE_NOT_PRESENT_OFFSET, 14684 },
+  { 0xfe9d, G_UNICODE_NOT_PRESENT_OFFSET, 14687 },
+  { 0xfe9e, G_UNICODE_NOT_PRESENT_OFFSET, 14687 },
+  { 0xfe9f, G_UNICODE_NOT_PRESENT_OFFSET, 14687 },
+  { 0xfea0, G_UNICODE_NOT_PRESENT_OFFSET, 14687 },
+  { 0xfea1, G_UNICODE_NOT_PRESENT_OFFSET, 14690 },
+  { 0xfea2, G_UNICODE_NOT_PRESENT_OFFSET, 14690 },
+  { 0xfea3, G_UNICODE_NOT_PRESENT_OFFSET, 14690 },
+  { 0xfea4, G_UNICODE_NOT_PRESENT_OFFSET, 14690 },
+  { 0xfea5, G_UNICODE_NOT_PRESENT_OFFSET, 14693 },
+  { 0xfea6, G_UNICODE_NOT_PRESENT_OFFSET, 14693 },
+  { 0xfea7, G_UNICODE_NOT_PRESENT_OFFSET, 14693 },
+  { 0xfea8, G_UNICODE_NOT_PRESENT_OFFSET, 14693 },
+  { 0xfea9, G_UNICODE_NOT_PRESENT_OFFSET, 14696 },
+  { 0xfeaa, G_UNICODE_NOT_PRESENT_OFFSET, 14696 },
+  { 0xfeab, G_UNICODE_NOT_PRESENT_OFFSET, 14699 },
+  { 0xfeac, G_UNICODE_NOT_PRESENT_OFFSET, 14699 },
+  { 0xfead, G_UNICODE_NOT_PRESENT_OFFSET, 14702 },
+  { 0xfeae, G_UNICODE_NOT_PRESENT_OFFSET, 14702 },
+  { 0xfeaf, G_UNICODE_NOT_PRESENT_OFFSET, 14705 },
+  { 0xfeb0, G_UNICODE_NOT_PRESENT_OFFSET, 14705 },
+  { 0xfeb1, G_UNICODE_NOT_PRESENT_OFFSET, 14708 },
+  { 0xfeb2, G_UNICODE_NOT_PRESENT_OFFSET, 14708 },
+  { 0xfeb3, G_UNICODE_NOT_PRESENT_OFFSET, 14708 },
+  { 0xfeb4, G_UNICODE_NOT_PRESENT_OFFSET, 14708 },
+  { 0xfeb5, G_UNICODE_NOT_PRESENT_OFFSET, 14711 },
+  { 0xfeb6, G_UNICODE_NOT_PRESENT_OFFSET, 14711 },
+  { 0xfeb7, G_UNICODE_NOT_PRESENT_OFFSET, 14711 },
+  { 0xfeb8, G_UNICODE_NOT_PRESENT_OFFSET, 14711 },
+  { 0xfeb9, G_UNICODE_NOT_PRESENT_OFFSET, 14714 },
+  { 0xfeba, G_UNICODE_NOT_PRESENT_OFFSET, 14714 },
+  { 0xfebb, G_UNICODE_NOT_PRESENT_OFFSET, 14714 },
+  { 0xfebc, G_UNICODE_NOT_PRESENT_OFFSET, 14714 },
+  { 0xfebd, G_UNICODE_NOT_PRESENT_OFFSET, 14717 },
+  { 0xfebe, G_UNICODE_NOT_PRESENT_OFFSET, 14717 },
+  { 0xfebf, G_UNICODE_NOT_PRESENT_OFFSET, 14717 },
+  { 0xfec0, G_UNICODE_NOT_PRESENT_OFFSET, 14717 },
+  { 0xfec1, G_UNICODE_NOT_PRESENT_OFFSET, 14720 },
+  { 0xfec2, G_UNICODE_NOT_PRESENT_OFFSET, 14720 },
+  { 0xfec3, G_UNICODE_NOT_PRESENT_OFFSET, 14720 },
+  { 0xfec4, G_UNICODE_NOT_PRESENT_OFFSET, 14720 },
+  { 0xfec5, G_UNICODE_NOT_PRESENT_OFFSET, 14723 },
+  { 0xfec6, G_UNICODE_NOT_PRESENT_OFFSET, 14723 },
+  { 0xfec7, G_UNICODE_NOT_PRESENT_OFFSET, 14723 },
+  { 0xfec8, G_UNICODE_NOT_PRESENT_OFFSET, 14723 },
+  { 0xfec9, G_UNICODE_NOT_PRESENT_OFFSET, 14726 },
+  { 0xfeca, G_UNICODE_NOT_PRESENT_OFFSET, 14726 },
+  { 0xfecb, G_UNICODE_NOT_PRESENT_OFFSET, 14726 },
+  { 0xfecc, G_UNICODE_NOT_PRESENT_OFFSET, 14726 },
+  { 0xfecd, G_UNICODE_NOT_PRESENT_OFFSET, 14729 },
+  { 0xfece, G_UNICODE_NOT_PRESENT_OFFSET, 14729 },
+  { 0xfecf, G_UNICODE_NOT_PRESENT_OFFSET, 14729 },
+  { 0xfed0, G_UNICODE_NOT_PRESENT_OFFSET, 14729 },
+  { 0xfed1, G_UNICODE_NOT_PRESENT_OFFSET, 14732 },
+  { 0xfed2, G_UNICODE_NOT_PRESENT_OFFSET, 14732 },
+  { 0xfed3, G_UNICODE_NOT_PRESENT_OFFSET, 14732 },
+  { 0xfed4, G_UNICODE_NOT_PRESENT_OFFSET, 14732 },
+  { 0xfed5, G_UNICODE_NOT_PRESENT_OFFSET, 14735 },
+  { 0xfed6, G_UNICODE_NOT_PRESENT_OFFSET, 14735 },
+  { 0xfed7, G_UNICODE_NOT_PRESENT_OFFSET, 14735 },
+  { 0xfed8, G_UNICODE_NOT_PRESENT_OFFSET, 14735 },
+  { 0xfed9, G_UNICODE_NOT_PRESENT_OFFSET, 14738 },
+  { 0xfeda, G_UNICODE_NOT_PRESENT_OFFSET, 14738 },
+  { 0xfedb, G_UNICODE_NOT_PRESENT_OFFSET, 14738 },
+  { 0xfedc, G_UNICODE_NOT_PRESENT_OFFSET, 14738 },
+  { 0xfedd, G_UNICODE_NOT_PRESENT_OFFSET, 14741 },
+  { 0xfede, G_UNICODE_NOT_PRESENT_OFFSET, 14741 },
+  { 0xfedf, G_UNICODE_NOT_PRESENT_OFFSET, 14741 },
+  { 0xfee0, G_UNICODE_NOT_PRESENT_OFFSET, 14741 },
+  { 0xfee1, G_UNICODE_NOT_PRESENT_OFFSET, 14744 },
+  { 0xfee2, G_UNICODE_NOT_PRESENT_OFFSET, 14744 },
+  { 0xfee3, G_UNICODE_NOT_PRESENT_OFFSET, 14744 },
+  { 0xfee4, G_UNICODE_NOT_PRESENT_OFFSET, 14744 },
+  { 0xfee5, G_UNICODE_NOT_PRESENT_OFFSET, 14747 },
+  { 0xfee6, G_UNICODE_NOT_PRESENT_OFFSET, 14747 },
+  { 0xfee7, G_UNICODE_NOT_PRESENT_OFFSET, 14747 },
+  { 0xfee8, G_UNICODE_NOT_PRESENT_OFFSET, 14747 },
+  { 0xfee9, G_UNICODE_NOT_PRESENT_OFFSET, 14750 },
+  { 0xfeea, G_UNICODE_NOT_PRESENT_OFFSET, 14750 },
+  { 0xfeeb, G_UNICODE_NOT_PRESENT_OFFSET, 14750 },
+  { 0xfeec, G_UNICODE_NOT_PRESENT_OFFSET, 14750 },
+  { 0xfeed, G_UNICODE_NOT_PRESENT_OFFSET, 14753 },
+  { 0xfeee, G_UNICODE_NOT_PRESENT_OFFSET, 14753 },
+  { 0xfeef, G_UNICODE_NOT_PRESENT_OFFSET, 12802 },
+  { 0xfef0, G_UNICODE_NOT_PRESENT_OFFSET, 12802 },
+  { 0xfef1, G_UNICODE_NOT_PRESENT_OFFSET, 14756 },
+  { 0xfef2, G_UNICODE_NOT_PRESENT_OFFSET, 14756 },
+  { 0xfef3, G_UNICODE_NOT_PRESENT_OFFSET, 14756 },
+  { 0xfef4, G_UNICODE_NOT_PRESENT_OFFSET, 14756 },
+  { 0xfef5, G_UNICODE_NOT_PRESENT_OFFSET, 14759 },
+  { 0xfef6, G_UNICODE_NOT_PRESENT_OFFSET, 14759 },
+  { 0xfef7, G_UNICODE_NOT_PRESENT_OFFSET, 14766 },
+  { 0xfef8, G_UNICODE_NOT_PRESENT_OFFSET, 14766 },
+  { 0xfef9, G_UNICODE_NOT_PRESENT_OFFSET, 14773 },
+  { 0xfefa, G_UNICODE_NOT_PRESENT_OFFSET, 14773 },
+  { 0xfefb, G_UNICODE_NOT_PRESENT_OFFSET, 14780 },
+  { 0xfefc, G_UNICODE_NOT_PRESENT_OFFSET, 14780 },
+  { 0xff01, G_UNICODE_NOT_PRESENT_OFFSET, 14517 },
+  { 0xff02, G_UNICODE_NOT_PRESENT_OFFSET, 14785 },
+  { 0xff03, G_UNICODE_NOT_PRESENT_OFFSET, 14587 },
+  { 0xff04, G_UNICODE_NOT_PRESENT_OFFSET, 14601 },
+  { 0xff05, G_UNICODE_NOT_PRESENT_OFFSET, 14603 },
+  { 0xff06, G_UNICODE_NOT_PRESENT_OFFSET, 14589 },
+  { 0xff07, G_UNICODE_NOT_PRESENT_OFFSET, 14787 },
+  { 0xff08, G_UNICODE_NOT_PRESENT_OFFSET, 5275 },
+  { 0xff09, G_UNICODE_NOT_PRESENT_OFFSET, 5277 },
+  { 0xff0a, G_UNICODE_NOT_PRESENT_OFFSET, 14591 },
+  { 0xff0b, G_UNICODE_NOT_PRESENT_OFFSET, 5267 },
+  { 0xff0c, G_UNICODE_NOT_PRESENT_OFFSET, 14505 },
+  { 0xff0d, G_UNICODE_NOT_PRESENT_OFFSET, 14593 },
+  { 0xff0e, G_UNICODE_NOT_PRESENT_OFFSET, 5181 },
+  { 0xff0f, G_UNICODE_NOT_PRESENT_OFFSET, 14789 },
+  { 0xff10, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0xff11, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0xff12, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0xff13, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0xff14, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0xff15, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0xff16, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0xff17, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0xff18, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0xff19, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0xff1a, G_UNICODE_NOT_PRESENT_OFFSET, 14515 },
+  { 0xff1b, G_UNICODE_NOT_PRESENT_OFFSET, 1248 },
+  { 0xff1c, G_UNICODE_NOT_PRESENT_OFFSET, 14595 },
+  { 0xff1d, G_UNICODE_NOT_PRESENT_OFFSET, 5273 },
+  { 0xff1e, G_UNICODE_NOT_PRESENT_OFFSET, 14597 },
+  { 0xff1f, G_UNICODE_NOT_PRESENT_OFFSET, 14519 },
+  { 0xff20, G_UNICODE_NOT_PRESENT_OFFSET, 14605 },
+  { 0xff21, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0xff22, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0xff23, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0xff24, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0xff25, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0xff26, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0xff27, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0xff28, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0xff29, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0xff2a, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0xff2b, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0xff2c, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0xff2d, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0xff2e, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0xff2f, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0xff30, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0xff31, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0xff32, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0xff33, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0xff34, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0xff35, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0xff36, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0xff37, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0xff38, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0xff39, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0xff3a, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0xff3b, G_UNICODE_NOT_PRESENT_OFFSET, 14583 },
+  { 0xff3c, G_UNICODE_NOT_PRESENT_OFFSET, 14599 },
+  { 0xff3d, G_UNICODE_NOT_PRESENT_OFFSET, 14585 },
+  { 0xff3e, G_UNICODE_NOT_PRESENT_OFFSET, 14791 },
+  { 0xff3f, G_UNICODE_NOT_PRESENT_OFFSET, 14537 },
+  { 0xff40, G_UNICODE_NOT_PRESENT_OFFSET, 5110 },
+  { 0xff41, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0xff42, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0xff43, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0xff44, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0xff45, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0xff46, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0xff47, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0xff48, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0xff49, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0xff4a, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0xff4b, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0xff4c, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0xff4d, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0xff4e, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0xff4f, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0xff50, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0xff51, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0xff52, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0xff53, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0xff54, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0xff55, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0xff56, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0xff57, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0xff58, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0xff59, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0xff5a, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0xff5b, G_UNICODE_NOT_PRESENT_OFFSET, 14539 },
+  { 0xff5c, G_UNICODE_NOT_PRESENT_OFFSET, 14793 },
+  { 0xff5d, G_UNICODE_NOT_PRESENT_OFFSET, 14541 },
+  { 0xff5e, G_UNICODE_NOT_PRESENT_OFFSET, 14795 },
+  { 0xff5f, G_UNICODE_NOT_PRESENT_OFFSET, 14797 },
+  { 0xff60, G_UNICODE_NOT_PRESENT_OFFSET, 14801 },
+  { 0xff61, G_UNICODE_NOT_PRESENT_OFFSET, 14511 },
+  { 0xff62, G_UNICODE_NOT_PRESENT_OFFSET, 14567 },
+  { 0xff63, G_UNICODE_NOT_PRESENT_OFFSET, 14571 },
+  { 0xff64, G_UNICODE_NOT_PRESENT_OFFSET, 14507 },
+  { 0xff65, G_UNICODE_NOT_PRESENT_OFFSET, 14805 },
+  { 0xff66, G_UNICODE_NOT_PRESENT_OFFSET, 8955 },
+  { 0xff67, G_UNICODE_NOT_PRESENT_OFFSET, 14809 },
+  { 0xff68, G_UNICODE_NOT_PRESENT_OFFSET, 14813 },
+  { 0xff69, G_UNICODE_NOT_PRESENT_OFFSET, 14817 },
+  { 0xff6a, G_UNICODE_NOT_PRESENT_OFFSET, 14821 },
+  { 0xff6b, G_UNICODE_NOT_PRESENT_OFFSET, 14825 },
+  { 0xff6c, G_UNICODE_NOT_PRESENT_OFFSET, 14829 },
+  { 0xff6d, G_UNICODE_NOT_PRESENT_OFFSET, 14833 },
+  { 0xff6e, G_UNICODE_NOT_PRESENT_OFFSET, 14837 },
+  { 0xff6f, G_UNICODE_NOT_PRESENT_OFFSET, 14841 },
+  { 0xff70, G_UNICODE_NOT_PRESENT_OFFSET, 14845 },
+  { 0xff71, G_UNICODE_NOT_PRESENT_OFFSET, 8771 },
+  { 0xff72, G_UNICODE_NOT_PRESENT_OFFSET, 8775 },
+  { 0xff73, G_UNICODE_NOT_PRESENT_OFFSET, 8779 },
+  { 0xff74, G_UNICODE_NOT_PRESENT_OFFSET, 8783 },
+  { 0xff75, G_UNICODE_NOT_PRESENT_OFFSET, 8787 },
+  { 0xff76, G_UNICODE_NOT_PRESENT_OFFSET, 8791 },
+  { 0xff77, G_UNICODE_NOT_PRESENT_OFFSET, 8795 },
+  { 0xff78, G_UNICODE_NOT_PRESENT_OFFSET, 8799 },
+  { 0xff79, G_UNICODE_NOT_PRESENT_OFFSET, 8803 },
+  { 0xff7a, G_UNICODE_NOT_PRESENT_OFFSET, 8807 },
+  { 0xff7b, G_UNICODE_NOT_PRESENT_OFFSET, 8811 },
+  { 0xff7c, G_UNICODE_NOT_PRESENT_OFFSET, 8815 },
+  { 0xff7d, G_UNICODE_NOT_PRESENT_OFFSET, 8819 },
+  { 0xff7e, G_UNICODE_NOT_PRESENT_OFFSET, 8823 },
+  { 0xff7f, G_UNICODE_NOT_PRESENT_OFFSET, 8827 },
+  { 0xff80, G_UNICODE_NOT_PRESENT_OFFSET, 8831 },
+  { 0xff81, G_UNICODE_NOT_PRESENT_OFFSET, 8835 },
+  { 0xff82, G_UNICODE_NOT_PRESENT_OFFSET, 8839 },
+  { 0xff83, G_UNICODE_NOT_PRESENT_OFFSET, 8843 },
+  { 0xff84, G_UNICODE_NOT_PRESENT_OFFSET, 8847 },
+  { 0xff85, G_UNICODE_NOT_PRESENT_OFFSET, 8851 },
+  { 0xff86, G_UNICODE_NOT_PRESENT_OFFSET, 8855 },
+  { 0xff87, G_UNICODE_NOT_PRESENT_OFFSET, 8859 },
+  { 0xff88, G_UNICODE_NOT_PRESENT_OFFSET, 8863 },
+  { 0xff89, G_UNICODE_NOT_PRESENT_OFFSET, 8867 },
+  { 0xff8a, G_UNICODE_NOT_PRESENT_OFFSET, 8871 },
+  { 0xff8b, G_UNICODE_NOT_PRESENT_OFFSET, 8875 },
+  { 0xff8c, G_UNICODE_NOT_PRESENT_OFFSET, 8879 },
+  { 0xff8d, G_UNICODE_NOT_PRESENT_OFFSET, 8883 },
+  { 0xff8e, G_UNICODE_NOT_PRESENT_OFFSET, 8887 },
+  { 0xff8f, G_UNICODE_NOT_PRESENT_OFFSET, 8891 },
+  { 0xff90, G_UNICODE_NOT_PRESENT_OFFSET, 8895 },
+  { 0xff91, G_UNICODE_NOT_PRESENT_OFFSET, 8899 },
+  { 0xff92, G_UNICODE_NOT_PRESENT_OFFSET, 8903 },
+  { 0xff93, G_UNICODE_NOT_PRESENT_OFFSET, 8907 },
+  { 0xff94, G_UNICODE_NOT_PRESENT_OFFSET, 8911 },
+  { 0xff95, G_UNICODE_NOT_PRESENT_OFFSET, 8915 },
+  { 0xff96, G_UNICODE_NOT_PRESENT_OFFSET, 8919 },
+  { 0xff97, G_UNICODE_NOT_PRESENT_OFFSET, 8923 },
+  { 0xff98, G_UNICODE_NOT_PRESENT_OFFSET, 8927 },
+  { 0xff99, G_UNICODE_NOT_PRESENT_OFFSET, 8931 },
+  { 0xff9a, G_UNICODE_NOT_PRESENT_OFFSET, 8935 },
+  { 0xff9b, G_UNICODE_NOT_PRESENT_OFFSET, 8939 },
+  { 0xff9c, G_UNICODE_NOT_PRESENT_OFFSET, 8943 },
+  { 0xff9d, G_UNICODE_NOT_PRESENT_OFFSET, 14849 },
+  { 0xff9e, G_UNICODE_NOT_PRESENT_OFFSET, 14853 },
+  { 0xff9f, G_UNICODE_NOT_PRESENT_OFFSET, 14857 },
+  { 0xffa0, G_UNICODE_NOT_PRESENT_OFFSET, 7658 },
+  { 0xffa1, G_UNICODE_NOT_PRESENT_OFFSET, 7454 },
+  { 0xffa2, G_UNICODE_NOT_PRESENT_OFFSET, 7458 },
+  { 0xffa3, G_UNICODE_NOT_PRESENT_OFFSET, 7462 },
+  { 0xffa4, G_UNICODE_NOT_PRESENT_OFFSET, 7466 },
+  { 0xffa5, G_UNICODE_NOT_PRESENT_OFFSET, 7470 },
+  { 0xffa6, G_UNICODE_NOT_PRESENT_OFFSET, 7474 },
+  { 0xffa7, G_UNICODE_NOT_PRESENT_OFFSET, 7478 },
+  { 0xffa8, G_UNICODE_NOT_PRESENT_OFFSET, 7482 },
+  { 0xffa9, G_UNICODE_NOT_PRESENT_OFFSET, 7486 },
+  { 0xffaa, G_UNICODE_NOT_PRESENT_OFFSET, 7490 },
+  { 0xffab, G_UNICODE_NOT_PRESENT_OFFSET, 7494 },
+  { 0xffac, G_UNICODE_NOT_PRESENT_OFFSET, 7498 },
+  { 0xffad, G_UNICODE_NOT_PRESENT_OFFSET, 7502 },
+  { 0xffae, G_UNICODE_NOT_PRESENT_OFFSET, 7506 },
+  { 0xffaf, G_UNICODE_NOT_PRESENT_OFFSET, 7510 },
+  { 0xffb0, G_UNICODE_NOT_PRESENT_OFFSET, 7514 },
+  { 0xffb1, G_UNICODE_NOT_PRESENT_OFFSET, 7518 },
+  { 0xffb2, G_UNICODE_NOT_PRESENT_OFFSET, 7522 },
+  { 0xffb3, G_UNICODE_NOT_PRESENT_OFFSET, 7526 },
+  { 0xffb4, G_UNICODE_NOT_PRESENT_OFFSET, 7530 },
+  { 0xffb5, G_UNICODE_NOT_PRESENT_OFFSET, 7534 },
+  { 0xffb6, G_UNICODE_NOT_PRESENT_OFFSET, 7538 },
+  { 0xffb7, G_UNICODE_NOT_PRESENT_OFFSET, 7542 },
+  { 0xffb8, G_UNICODE_NOT_PRESENT_OFFSET, 7546 },
+  { 0xffb9, G_UNICODE_NOT_PRESENT_OFFSET, 7550 },
+  { 0xffba, G_UNICODE_NOT_PRESENT_OFFSET, 7554 },
+  { 0xffbb, G_UNICODE_NOT_PRESENT_OFFSET, 7558 },
+  { 0xffbc, G_UNICODE_NOT_PRESENT_OFFSET, 7562 },
+  { 0xffbd, G_UNICODE_NOT_PRESENT_OFFSET, 7566 },
+  { 0xffbe, G_UNICODE_NOT_PRESENT_OFFSET, 7570 },
+  { 0xffc2, G_UNICODE_NOT_PRESENT_OFFSET, 7574 },
+  { 0xffc3, G_UNICODE_NOT_PRESENT_OFFSET, 7578 },
+  { 0xffc4, G_UNICODE_NOT_PRESENT_OFFSET, 7582 },
+  { 0xffc5, G_UNICODE_NOT_PRESENT_OFFSET, 7586 },
+  { 0xffc6, G_UNICODE_NOT_PRESENT_OFFSET, 7590 },
+  { 0xffc7, G_UNICODE_NOT_PRESENT_OFFSET, 7594 },
+  { 0xffca, G_UNICODE_NOT_PRESENT_OFFSET, 7598 },
+  { 0xffcb, G_UNICODE_NOT_PRESENT_OFFSET, 7602 },
+  { 0xffcc, G_UNICODE_NOT_PRESENT_OFFSET, 7606 },
+  { 0xffcd, G_UNICODE_NOT_PRESENT_OFFSET, 7610 },
+  { 0xffce, G_UNICODE_NOT_PRESENT_OFFSET, 7614 },
+  { 0xffcf, G_UNICODE_NOT_PRESENT_OFFSET, 7618 },
+  { 0xffd2, G_UNICODE_NOT_PRESENT_OFFSET, 7622 },
+  { 0xffd3, G_UNICODE_NOT_PRESENT_OFFSET, 7626 },
+  { 0xffd4, G_UNICODE_NOT_PRESENT_OFFSET, 7630 },
+  { 0xffd5, G_UNICODE_NOT_PRESENT_OFFSET, 7634 },
+  { 0xffd6, G_UNICODE_NOT_PRESENT_OFFSET, 7638 },
+  { 0xffd7, G_UNICODE_NOT_PRESENT_OFFSET, 7642 },
+  { 0xffda, G_UNICODE_NOT_PRESENT_OFFSET, 7646 },
+  { 0xffdb, G_UNICODE_NOT_PRESENT_OFFSET, 7650 },
+  { 0xffdc, G_UNICODE_NOT_PRESENT_OFFSET, 7654 },
+  { 0xffe0, G_UNICODE_NOT_PRESENT_OFFSET, 14861 },
+  { 0xffe1, G_UNICODE_NOT_PRESENT_OFFSET, 14864 },
+  { 0xffe2, G_UNICODE_NOT_PRESENT_OFFSET, 14867 },
+  { 0xffe3, G_UNICODE_NOT_PRESENT_OFFSET, 8 },
+  { 0xffe4, G_UNICODE_NOT_PRESENT_OFFSET, 14870 },
+  { 0xffe5, G_UNICODE_NOT_PRESENT_OFFSET, 14873 },
+  { 0xffe6, G_UNICODE_NOT_PRESENT_OFFSET, 14876 },
+  { 0xffe8, G_UNICODE_NOT_PRESENT_OFFSET, 14880 },
+  { 0xffe9, G_UNICODE_NOT_PRESENT_OFFSET, 14884 },
+  { 0xffea, G_UNICODE_NOT_PRESENT_OFFSET, 14888 },
+  { 0xffeb, G_UNICODE_NOT_PRESENT_OFFSET, 14892 },
+  { 0xffec, G_UNICODE_NOT_PRESENT_OFFSET, 14896 },
+  { 0xffed, G_UNICODE_NOT_PRESENT_OFFSET, 14900 },
+  { 0xffee, G_UNICODE_NOT_PRESENT_OFFSET, 14904 },
+  { 0x1d15e, 14908, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d15f, 14917, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d160, 14926, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d161, 14939, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d162, 14952, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d163, 14965, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d164, 14978, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d1bb, 14991, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d1bc, 15000, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d1bd, 15009, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d1be, 15022, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d1bf, 15035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d1c0, 15048, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x1d400, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d401, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d402, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d403, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d404, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d405, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d406, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d407, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d408, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d409, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d40a, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d40b, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d40c, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d40d, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d40e, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d40f, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d410, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d411, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d412, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d413, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d414, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d415, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d416, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d417, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d418, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d419, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d41a, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d41b, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d41c, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d41d, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d41e, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d41f, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d420, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d421, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d422, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d423, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d424, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d425, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d426, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d427, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d428, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d429, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d42a, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d42b, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d42c, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d42d, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d42e, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d42f, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d430, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d431, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d432, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d433, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d434, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d435, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d436, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d437, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d438, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d439, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d43a, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d43b, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d43c, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d43d, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d43e, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d43f, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d440, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d441, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d442, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d443, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d444, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d445, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d446, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d447, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d448, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d449, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d44a, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d44b, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d44c, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d44d, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d44e, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d44f, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d450, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d451, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d452, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d453, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d454, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d456, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d457, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d458, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d459, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d45a, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d45b, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d45c, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d45d, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d45e, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d45f, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d460, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d461, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d462, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d463, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d464, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d465, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d466, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d467, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d468, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d469, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d46a, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d46b, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d46c, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d46d, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d46e, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d46f, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d470, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d471, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d472, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d473, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d474, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d475, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d476, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d477, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d478, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d479, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d47a, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d47b, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d47c, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d47d, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d47e, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d47f, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d480, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d481, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d482, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d483, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d484, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d485, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d486, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d487, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d488, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d489, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d48a, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d48b, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d48c, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d48d, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d48e, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d48f, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d490, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d491, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d492, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d493, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d494, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d495, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d496, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d497, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d498, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d499, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d49a, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d49b, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d49c, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d49e, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d49f, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d4a2, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d4a5, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d4a6, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d4a9, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d4aa, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d4ab, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d4ac, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d4ae, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d4af, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d4b0, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d4b1, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d4b2, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d4b3, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d4b4, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d4b5, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d4b6, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d4b7, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d4b8, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d4b9, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d4bb, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d4bd, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d4be, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d4bf, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d4c0, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d4c1, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d4c2, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d4c3, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d4c5, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d4c6, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d4c7, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d4c8, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d4c9, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d4ca, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d4cb, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d4cc, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d4cd, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d4ce, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d4cf, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d4d0, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d4d1, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d4d2, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d4d3, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d4d4, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d4d5, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d4d6, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d4d7, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d4d8, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d4d9, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d4da, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d4db, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d4dc, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d4dd, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d4de, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d4df, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d4e0, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d4e1, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d4e2, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d4e3, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d4e4, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d4e5, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d4e6, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d4e7, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d4e8, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d4e9, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d4ea, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d4eb, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d4ec, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d4ed, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d4ee, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d4ef, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d4f0, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d4f1, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d4f2, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d4f3, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d4f4, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d4f5, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d4f6, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d4f7, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d4f8, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d4f9, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d4fa, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d4fb, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d4fc, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d4fd, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d4fe, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d4ff, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d500, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d501, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d502, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d503, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d504, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d505, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d507, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d508, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d509, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d50a, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d50d, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d50e, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d50f, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d510, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d511, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d512, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d513, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d514, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d516, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d517, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d518, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d519, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d51a, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d51b, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d51c, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d51e, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d51f, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d520, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d521, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d522, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d523, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d524, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d525, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d526, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d527, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d528, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d529, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d52a, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d52b, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d52c, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d52d, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d52e, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d52f, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d530, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d531, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d532, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d533, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d534, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d535, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d536, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d537, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d538, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d539, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d53b, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d53c, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d53d, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d53e, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d540, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d541, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d542, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d543, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d544, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d546, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d54a, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d54b, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d54c, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d54d, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d54e, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d54f, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d550, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d552, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d553, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d554, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d555, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d556, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d557, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d558, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d559, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d55a, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d55b, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d55c, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d55d, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d55e, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d55f, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d560, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d561, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d562, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d563, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d564, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d565, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d566, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d567, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d568, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d569, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d56a, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d56b, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d56c, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d56d, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d56e, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d56f, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d570, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d571, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d572, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d573, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d574, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d575, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d576, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d577, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d578, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d579, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d57a, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d57b, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d57c, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d57d, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d57e, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d57f, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d580, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d581, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d582, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d583, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d584, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d585, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d586, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d587, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d588, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d589, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d58a, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d58b, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d58c, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d58d, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d58e, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d58f, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d590, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d591, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d592, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d593, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d594, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d595, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d596, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d597, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d598, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d599, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d59a, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d59b, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d59c, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d59d, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d59e, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d59f, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d5a0, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d5a1, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d5a2, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d5a3, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d5a4, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d5a5, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d5a6, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d5a7, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d5a8, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d5a9, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d5aa, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d5ab, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d5ac, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d5ad, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d5ae, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d5af, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d5b0, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d5b1, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d5b2, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d5b3, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d5b4, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d5b5, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d5b6, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d5b7, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d5b8, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d5b9, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d5ba, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d5bb, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d5bc, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d5bd, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d5be, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d5bf, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d5c0, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d5c1, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d5c2, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d5c3, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d5c4, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d5c5, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d5c6, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d5c7, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d5c8, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d5c9, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d5ca, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d5cb, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d5cc, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d5cd, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d5ce, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d5cf, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d5d0, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d5d1, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d5d2, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d5d3, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d5d4, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d5d5, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d5d6, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d5d7, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d5d8, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d5d9, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d5da, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d5db, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d5dc, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d5dd, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d5de, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d5df, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d5e0, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d5e1, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d5e2, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d5e3, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d5e4, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d5e5, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d5e6, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d5e7, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d5e8, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d5e9, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d5ea, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d5eb, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d5ec, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d5ed, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d5ee, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d5ef, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d5f0, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d5f1, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d5f2, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d5f3, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d5f4, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d5f5, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d5f6, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d5f7, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d5f8, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d5f9, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d5fa, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d5fb, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d5fc, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d5fd, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d5fe, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d5ff, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d600, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d601, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d602, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d603, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d604, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d605, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d606, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d607, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d608, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d609, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d60a, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d60b, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d60c, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d60d, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d60e, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d60f, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d610, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d611, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d612, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d613, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d614, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d615, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d616, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d617, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d618, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d619, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d61a, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d61b, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d61c, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d61d, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d61e, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d61f, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d620, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d621, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d622, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d623, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d624, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d625, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d626, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d627, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d628, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d629, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d62a, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d62b, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d62c, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d62d, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d62e, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d62f, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d630, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d631, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d632, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d633, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d634, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d635, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d636, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d637, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d638, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d639, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d63a, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d63b, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d63c, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d63d, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d63e, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d63f, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d640, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d641, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d642, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d643, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d644, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d645, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d646, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d647, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d648, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d649, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d64a, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d64b, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d64c, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d64d, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d64e, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d64f, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d650, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d651, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d652, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d653, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d654, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d655, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d656, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d657, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d658, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d659, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d65a, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d65b, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d65c, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d65d, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d65e, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d65f, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d660, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d661, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d662, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d663, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d664, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d665, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d666, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d667, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d668, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d669, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d66a, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d66b, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d66c, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d66d, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d66e, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d66f, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d670, G_UNICODE_NOT_PRESENT_OFFSET, 2309 },
+  { 0x1d671, G_UNICODE_NOT_PRESENT_OFFSET, 2314 },
+  { 0x1d672, G_UNICODE_NOT_PRESENT_OFFSET, 5292 },
+  { 0x1d673, G_UNICODE_NOT_PRESENT_OFFSET, 2316 },
+  { 0x1d674, G_UNICODE_NOT_PRESENT_OFFSET, 2318 },
+  { 0x1d675, G_UNICODE_NOT_PRESENT_OFFSET, 5336 },
+  { 0x1d676, G_UNICODE_NOT_PRESENT_OFFSET, 2323 },
+  { 0x1d677, G_UNICODE_NOT_PRESENT_OFFSET, 2325 },
+  { 0x1d678, G_UNICODE_NOT_PRESENT_OFFSET, 2327 },
+  { 0x1d679, G_UNICODE_NOT_PRESENT_OFFSET, 2329 },
+  { 0x1d67a, G_UNICODE_NOT_PRESENT_OFFSET, 2331 },
+  { 0x1d67b, G_UNICODE_NOT_PRESENT_OFFSET, 2333 },
+  { 0x1d67c, G_UNICODE_NOT_PRESENT_OFFSET, 2335 },
+  { 0x1d67d, G_UNICODE_NOT_PRESENT_OFFSET, 2337 },
+  { 0x1d67e, G_UNICODE_NOT_PRESENT_OFFSET, 2339 },
+  { 0x1d67f, G_UNICODE_NOT_PRESENT_OFFSET, 2344 },
+  { 0x1d680, G_UNICODE_NOT_PRESENT_OFFSET, 5319 },
+  { 0x1d681, G_UNICODE_NOT_PRESENT_OFFSET, 2346 },
+  { 0x1d682, G_UNICODE_NOT_PRESENT_OFFSET, 6108 },
+  { 0x1d683, G_UNICODE_NOT_PRESENT_OFFSET, 2348 },
+  { 0x1d684, G_UNICODE_NOT_PRESENT_OFFSET, 2350 },
+  { 0x1d685, G_UNICODE_NOT_PRESENT_OFFSET, 5451 },
+  { 0x1d686, G_UNICODE_NOT_PRESENT_OFFSET, 2352 },
+  { 0x1d687, G_UNICODE_NOT_PRESENT_OFFSET, 5468 },
+  { 0x1d688, G_UNICODE_NOT_PRESENT_OFFSET, 6110 },
+  { 0x1d689, G_UNICODE_NOT_PRESENT_OFFSET, 5331 },
+  { 0x1d68a, G_UNICODE_NOT_PRESENT_OFFSET, 6 },
+  { 0x1d68b, G_UNICODE_NOT_PRESENT_OFFSET, 2364 },
+  { 0x1d68c, G_UNICODE_NOT_PRESENT_OFFSET, 2435 },
+  { 0x1d68d, G_UNICODE_NOT_PRESENT_OFFSET, 2366 },
+  { 0x1d68e, G_UNICODE_NOT_PRESENT_OFFSET, 2368 },
+  { 0x1d68f, G_UNICODE_NOT_PRESENT_OFFSET, 2443 },
+  { 0x1d690, G_UNICODE_NOT_PRESENT_OFFSET, 2379 },
+  { 0x1d691, G_UNICODE_NOT_PRESENT_OFFSET, 1171 },
+  { 0x1d692, G_UNICODE_NOT_PRESENT_OFFSET, 2427 },
+  { 0x1d693, G_UNICODE_NOT_PRESENT_OFFSET, 1176 },
+  { 0x1d694, G_UNICODE_NOT_PRESENT_OFFSET, 2381 },
+  { 0x1d695, G_UNICODE_NOT_PRESENT_OFFSET, 1220 },
+  { 0x1d696, G_UNICODE_NOT_PRESENT_OFFSET, 2383 },
+  { 0x1d697, G_UNICODE_NOT_PRESENT_OFFSET, 5279 },
+  { 0x1d698, G_UNICODE_NOT_PRESENT_OFFSET, 29 },
+  { 0x1d699, G_UNICODE_NOT_PRESENT_OFFSET, 2399 },
+  { 0x1d69a, G_UNICODE_NOT_PRESENT_OFFSET, 6112 },
+  { 0x1d69b, G_UNICODE_NOT_PRESENT_OFFSET, 1178 },
+  { 0x1d69c, G_UNICODE_NOT_PRESENT_OFFSET, 711 },
+  { 0x1d69d, G_UNICODE_NOT_PRESENT_OFFSET, 2401 },
+  { 0x1d69e, G_UNICODE_NOT_PRESENT_OFFSET, 2403 },
+  { 0x1d69f, G_UNICODE_NOT_PRESENT_OFFSET, 2412 },
+  { 0x1d6a0, G_UNICODE_NOT_PRESENT_OFFSET, 1189 },
+  { 0x1d6a1, G_UNICODE_NOT_PRESENT_OFFSET, 1222 },
+  { 0x1d6a2, G_UNICODE_NOT_PRESENT_OFFSET, 1191 },
+  { 0x1d6a3, G_UNICODE_NOT_PRESENT_OFFSET, 2526 },
+  { 0x1d6a4, G_UNICODE_NOT_PRESENT_OFFSET, 15061 },
+  { 0x1d6a5, G_UNICODE_NOT_PRESENT_OFFSET, 15064 },
+  { 0x1d6a8, G_UNICODE_NOT_PRESENT_OFFSET, 15067 },
+  { 0x1d6a9, G_UNICODE_NOT_PRESENT_OFFSET, 15070 },
+  { 0x1d6aa, G_UNICODE_NOT_PRESENT_OFFSET, 5354 },
+  { 0x1d6ab, G_UNICODE_NOT_PRESENT_OFFSET, 15073 },
+  { 0x1d6ac, G_UNICODE_NOT_PRESENT_OFFSET, 15076 },
+  { 0x1d6ad, G_UNICODE_NOT_PRESENT_OFFSET, 15079 },
+  { 0x1d6ae, G_UNICODE_NOT_PRESENT_OFFSET, 15082 },
+  { 0x1d6af, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d6b0, G_UNICODE_NOT_PRESENT_OFFSET, 15085 },
+  { 0x1d6b1, G_UNICODE_NOT_PRESENT_OFFSET, 15088 },
+  { 0x1d6b2, G_UNICODE_NOT_PRESENT_OFFSET, 15091 },
+  { 0x1d6b3, G_UNICODE_NOT_PRESENT_OFFSET, 15094 },
+  { 0x1d6b4, G_UNICODE_NOT_PRESENT_OFFSET, 15097 },
+  { 0x1d6b5, G_UNICODE_NOT_PRESENT_OFFSET, 15100 },
+  { 0x1d6b6, G_UNICODE_NOT_PRESENT_OFFSET, 15103 },
+  { 0x1d6b7, G_UNICODE_NOT_PRESENT_OFFSET, 5357 },
+  { 0x1d6b8, G_UNICODE_NOT_PRESENT_OFFSET, 15106 },
+  { 0x1d6b9, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d6ba, G_UNICODE_NOT_PRESENT_OFFSET, 1408 },
+  { 0x1d6bb, G_UNICODE_NOT_PRESENT_OFFSET, 15109 },
+  { 0x1d6bc, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
+  { 0x1d6bd, G_UNICODE_NOT_PRESENT_OFFSET, 15112 },
+  { 0x1d6be, G_UNICODE_NOT_PRESENT_OFFSET, 15115 },
+  { 0x1d6bf, G_UNICODE_NOT_PRESENT_OFFSET, 15118 },
+  { 0x1d6c0, G_UNICODE_NOT_PRESENT_OFFSET, 5333 },
+  { 0x1d6c1, G_UNICODE_NOT_PRESENT_OFFSET, 15121 },
+  { 0x1d6c2, G_UNICODE_NOT_PRESENT_OFFSET, 15125 },
+  { 0x1d6c3, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d6c4, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d6c5, G_UNICODE_NOT_PRESENT_OFFSET, 2421 },
+  { 0x1d6c6, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d6c7, G_UNICODE_NOT_PRESENT_OFFSET, 15128 },
+  { 0x1d6c8, G_UNICODE_NOT_PRESENT_OFFSET, 15131 },
+  { 0x1d6c9, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d6ca, G_UNICODE_NOT_PRESENT_OFFSET, 4860 },
+  { 0x1d6cb, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d6cc, G_UNICODE_NOT_PRESENT_OFFSET, 15134 },
+  { 0x1d6cd, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
+  { 0x1d6ce, G_UNICODE_NOT_PRESENT_OFFSET, 15137 },
+  { 0x1d6cf, G_UNICODE_NOT_PRESENT_OFFSET, 15140 },
+  { 0x1d6d0, G_UNICODE_NOT_PRESENT_OFFSET, 15143 },
+  { 0x1d6d1, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d6d2, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d6d3, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
+  { 0x1d6d4, G_UNICODE_NOT_PRESENT_OFFSET, 15146 },
+  { 0x1d6d5, G_UNICODE_NOT_PRESENT_OFFSET, 15149 },
+  { 0x1d6d6, G_UNICODE_NOT_PRESENT_OFFSET, 15152 },
+  { 0x1d6d7, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d6d8, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d6d9, G_UNICODE_NOT_PRESENT_OFFSET, 15155 },
+  { 0x1d6da, G_UNICODE_NOT_PRESENT_OFFSET, 15158 },
+  { 0x1d6db, G_UNICODE_NOT_PRESENT_OFFSET, 15161 },
+  { 0x1d6dc, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d6dd, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d6de, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d6df, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d6e0, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d6e1, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d6e2, G_UNICODE_NOT_PRESENT_OFFSET, 15067 },
+  { 0x1d6e3, G_UNICODE_NOT_PRESENT_OFFSET, 15070 },
+  { 0x1d6e4, G_UNICODE_NOT_PRESENT_OFFSET, 5354 },
+  { 0x1d6e5, G_UNICODE_NOT_PRESENT_OFFSET, 15073 },
+  { 0x1d6e6, G_UNICODE_NOT_PRESENT_OFFSET, 15076 },
+  { 0x1d6e7, G_UNICODE_NOT_PRESENT_OFFSET, 15079 },
+  { 0x1d6e8, G_UNICODE_NOT_PRESENT_OFFSET, 15082 },
+  { 0x1d6e9, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d6ea, G_UNICODE_NOT_PRESENT_OFFSET, 15085 },
+  { 0x1d6eb, G_UNICODE_NOT_PRESENT_OFFSET, 15088 },
+  { 0x1d6ec, G_UNICODE_NOT_PRESENT_OFFSET, 15091 },
+  { 0x1d6ed, G_UNICODE_NOT_PRESENT_OFFSET, 15094 },
+  { 0x1d6ee, G_UNICODE_NOT_PRESENT_OFFSET, 15097 },
+  { 0x1d6ef, G_UNICODE_NOT_PRESENT_OFFSET, 15100 },
+  { 0x1d6f0, G_UNICODE_NOT_PRESENT_OFFSET, 15103 },
+  { 0x1d6f1, G_UNICODE_NOT_PRESENT_OFFSET, 5357 },
+  { 0x1d6f2, G_UNICODE_NOT_PRESENT_OFFSET, 15106 },
+  { 0x1d6f3, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d6f4, G_UNICODE_NOT_PRESENT_OFFSET, 1408 },
+  { 0x1d6f5, G_UNICODE_NOT_PRESENT_OFFSET, 15109 },
+  { 0x1d6f6, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
+  { 0x1d6f7, G_UNICODE_NOT_PRESENT_OFFSET, 15112 },
+  { 0x1d6f8, G_UNICODE_NOT_PRESENT_OFFSET, 15115 },
+  { 0x1d6f9, G_UNICODE_NOT_PRESENT_OFFSET, 15118 },
+  { 0x1d6fa, G_UNICODE_NOT_PRESENT_OFFSET, 5333 },
+  { 0x1d6fb, G_UNICODE_NOT_PRESENT_OFFSET, 15121 },
+  { 0x1d6fc, G_UNICODE_NOT_PRESENT_OFFSET, 15125 },
+  { 0x1d6fd, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d6fe, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d6ff, G_UNICODE_NOT_PRESENT_OFFSET, 2421 },
+  { 0x1d700, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d701, G_UNICODE_NOT_PRESENT_OFFSET, 15128 },
+  { 0x1d702, G_UNICODE_NOT_PRESENT_OFFSET, 15131 },
+  { 0x1d703, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d704, G_UNICODE_NOT_PRESENT_OFFSET, 4860 },
+  { 0x1d705, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d706, G_UNICODE_NOT_PRESENT_OFFSET, 15134 },
+  { 0x1d707, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
+  { 0x1d708, G_UNICODE_NOT_PRESENT_OFFSET, 15137 },
+  { 0x1d709, G_UNICODE_NOT_PRESENT_OFFSET, 15140 },
+  { 0x1d70a, G_UNICODE_NOT_PRESENT_OFFSET, 15143 },
+  { 0x1d70b, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d70c, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d70d, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
+  { 0x1d70e, G_UNICODE_NOT_PRESENT_OFFSET, 15146 },
+  { 0x1d70f, G_UNICODE_NOT_PRESENT_OFFSET, 15149 },
+  { 0x1d710, G_UNICODE_NOT_PRESENT_OFFSET, 15152 },
+  { 0x1d711, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d712, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d713, G_UNICODE_NOT_PRESENT_OFFSET, 15155 },
+  { 0x1d714, G_UNICODE_NOT_PRESENT_OFFSET, 15158 },
+  { 0x1d715, G_UNICODE_NOT_PRESENT_OFFSET, 15161 },
+  { 0x1d716, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d717, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d718, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d719, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d71a, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d71b, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d71c, G_UNICODE_NOT_PRESENT_OFFSET, 15067 },
+  { 0x1d71d, G_UNICODE_NOT_PRESENT_OFFSET, 15070 },
+  { 0x1d71e, G_UNICODE_NOT_PRESENT_OFFSET, 5354 },
+  { 0x1d71f, G_UNICODE_NOT_PRESENT_OFFSET, 15073 },
+  { 0x1d720, G_UNICODE_NOT_PRESENT_OFFSET, 15076 },
+  { 0x1d721, G_UNICODE_NOT_PRESENT_OFFSET, 15079 },
+  { 0x1d722, G_UNICODE_NOT_PRESENT_OFFSET, 15082 },
+  { 0x1d723, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d724, G_UNICODE_NOT_PRESENT_OFFSET, 15085 },
+  { 0x1d725, G_UNICODE_NOT_PRESENT_OFFSET, 15088 },
+  { 0x1d726, G_UNICODE_NOT_PRESENT_OFFSET, 15091 },
+  { 0x1d727, G_UNICODE_NOT_PRESENT_OFFSET, 15094 },
+  { 0x1d728, G_UNICODE_NOT_PRESENT_OFFSET, 15097 },
+  { 0x1d729, G_UNICODE_NOT_PRESENT_OFFSET, 15100 },
+  { 0x1d72a, G_UNICODE_NOT_PRESENT_OFFSET, 15103 },
+  { 0x1d72b, G_UNICODE_NOT_PRESENT_OFFSET, 5357 },
+  { 0x1d72c, G_UNICODE_NOT_PRESENT_OFFSET, 15106 },
+  { 0x1d72d, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d72e, G_UNICODE_NOT_PRESENT_OFFSET, 1408 },
+  { 0x1d72f, G_UNICODE_NOT_PRESENT_OFFSET, 15109 },
+  { 0x1d730, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
+  { 0x1d731, G_UNICODE_NOT_PRESENT_OFFSET, 15112 },
+  { 0x1d732, G_UNICODE_NOT_PRESENT_OFFSET, 15115 },
+  { 0x1d733, G_UNICODE_NOT_PRESENT_OFFSET, 15118 },
+  { 0x1d734, G_UNICODE_NOT_PRESENT_OFFSET, 5333 },
+  { 0x1d735, G_UNICODE_NOT_PRESENT_OFFSET, 15121 },
+  { 0x1d736, G_UNICODE_NOT_PRESENT_OFFSET, 15125 },
+  { 0x1d737, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d738, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d739, G_UNICODE_NOT_PRESENT_OFFSET, 2421 },
+  { 0x1d73a, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d73b, G_UNICODE_NOT_PRESENT_OFFSET, 15128 },
+  { 0x1d73c, G_UNICODE_NOT_PRESENT_OFFSET, 15131 },
+  { 0x1d73d, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d73e, G_UNICODE_NOT_PRESENT_OFFSET, 4860 },
+  { 0x1d73f, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d740, G_UNICODE_NOT_PRESENT_OFFSET, 15134 },
+  { 0x1d741, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
+  { 0x1d742, G_UNICODE_NOT_PRESENT_OFFSET, 15137 },
+  { 0x1d743, G_UNICODE_NOT_PRESENT_OFFSET, 15140 },
+  { 0x1d744, G_UNICODE_NOT_PRESENT_OFFSET, 15143 },
+  { 0x1d745, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d746, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d747, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
+  { 0x1d748, G_UNICODE_NOT_PRESENT_OFFSET, 15146 },
+  { 0x1d749, G_UNICODE_NOT_PRESENT_OFFSET, 15149 },
+  { 0x1d74a, G_UNICODE_NOT_PRESENT_OFFSET, 15152 },
+  { 0x1d74b, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d74c, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d74d, G_UNICODE_NOT_PRESENT_OFFSET, 15155 },
+  { 0x1d74e, G_UNICODE_NOT_PRESENT_OFFSET, 15158 },
+  { 0x1d74f, G_UNICODE_NOT_PRESENT_OFFSET, 15161 },
+  { 0x1d750, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d751, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d752, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d753, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d754, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d755, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d756, G_UNICODE_NOT_PRESENT_OFFSET, 15067 },
+  { 0x1d757, G_UNICODE_NOT_PRESENT_OFFSET, 15070 },
+  { 0x1d758, G_UNICODE_NOT_PRESENT_OFFSET, 5354 },
+  { 0x1d759, G_UNICODE_NOT_PRESENT_OFFSET, 15073 },
+  { 0x1d75a, G_UNICODE_NOT_PRESENT_OFFSET, 15076 },
+  { 0x1d75b, G_UNICODE_NOT_PRESENT_OFFSET, 15079 },
+  { 0x1d75c, G_UNICODE_NOT_PRESENT_OFFSET, 15082 },
+  { 0x1d75d, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d75e, G_UNICODE_NOT_PRESENT_OFFSET, 15085 },
+  { 0x1d75f, G_UNICODE_NOT_PRESENT_OFFSET, 15088 },
+  { 0x1d760, G_UNICODE_NOT_PRESENT_OFFSET, 15091 },
+  { 0x1d761, G_UNICODE_NOT_PRESENT_OFFSET, 15094 },
+  { 0x1d762, G_UNICODE_NOT_PRESENT_OFFSET, 15097 },
+  { 0x1d763, G_UNICODE_NOT_PRESENT_OFFSET, 15100 },
+  { 0x1d764, G_UNICODE_NOT_PRESENT_OFFSET, 15103 },
+  { 0x1d765, G_UNICODE_NOT_PRESENT_OFFSET, 5357 },
+  { 0x1d766, G_UNICODE_NOT_PRESENT_OFFSET, 15106 },
+  { 0x1d767, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d768, G_UNICODE_NOT_PRESENT_OFFSET, 1408 },
+  { 0x1d769, G_UNICODE_NOT_PRESENT_OFFSET, 15109 },
+  { 0x1d76a, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
+  { 0x1d76b, G_UNICODE_NOT_PRESENT_OFFSET, 15112 },
+  { 0x1d76c, G_UNICODE_NOT_PRESENT_OFFSET, 15115 },
+  { 0x1d76d, G_UNICODE_NOT_PRESENT_OFFSET, 15118 },
+  { 0x1d76e, G_UNICODE_NOT_PRESENT_OFFSET, 5333 },
+  { 0x1d76f, G_UNICODE_NOT_PRESENT_OFFSET, 15121 },
+  { 0x1d770, G_UNICODE_NOT_PRESENT_OFFSET, 15125 },
+  { 0x1d771, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d772, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d773, G_UNICODE_NOT_PRESENT_OFFSET, 2421 },
+  { 0x1d774, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d775, G_UNICODE_NOT_PRESENT_OFFSET, 15128 },
+  { 0x1d776, G_UNICODE_NOT_PRESENT_OFFSET, 15131 },
+  { 0x1d777, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d778, G_UNICODE_NOT_PRESENT_OFFSET, 4860 },
+  { 0x1d779, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d77a, G_UNICODE_NOT_PRESENT_OFFSET, 15134 },
+  { 0x1d77b, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
+  { 0x1d77c, G_UNICODE_NOT_PRESENT_OFFSET, 15137 },
+  { 0x1d77d, G_UNICODE_NOT_PRESENT_OFFSET, 15140 },
+  { 0x1d77e, G_UNICODE_NOT_PRESENT_OFFSET, 15143 },
+  { 0x1d77f, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d780, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d781, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
+  { 0x1d782, G_UNICODE_NOT_PRESENT_OFFSET, 15146 },
+  { 0x1d783, G_UNICODE_NOT_PRESENT_OFFSET, 15149 },
+  { 0x1d784, G_UNICODE_NOT_PRESENT_OFFSET, 15152 },
+  { 0x1d785, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d786, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d787, G_UNICODE_NOT_PRESENT_OFFSET, 15155 },
+  { 0x1d788, G_UNICODE_NOT_PRESENT_OFFSET, 15158 },
+  { 0x1d789, G_UNICODE_NOT_PRESENT_OFFSET, 15161 },
+  { 0x1d78a, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d78b, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d78c, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d78d, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d78e, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d78f, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d790, G_UNICODE_NOT_PRESENT_OFFSET, 15067 },
+  { 0x1d791, G_UNICODE_NOT_PRESENT_OFFSET, 15070 },
+  { 0x1d792, G_UNICODE_NOT_PRESENT_OFFSET, 5354 },
+  { 0x1d793, G_UNICODE_NOT_PRESENT_OFFSET, 15073 },
+  { 0x1d794, G_UNICODE_NOT_PRESENT_OFFSET, 15076 },
+  { 0x1d795, G_UNICODE_NOT_PRESENT_OFFSET, 15079 },
+  { 0x1d796, G_UNICODE_NOT_PRESENT_OFFSET, 15082 },
+  { 0x1d797, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d798, G_UNICODE_NOT_PRESENT_OFFSET, 15085 },
+  { 0x1d799, G_UNICODE_NOT_PRESENT_OFFSET, 15088 },
+  { 0x1d79a, G_UNICODE_NOT_PRESENT_OFFSET, 15091 },
+  { 0x1d79b, G_UNICODE_NOT_PRESENT_OFFSET, 15094 },
+  { 0x1d79c, G_UNICODE_NOT_PRESENT_OFFSET, 15097 },
+  { 0x1d79d, G_UNICODE_NOT_PRESENT_OFFSET, 15100 },
+  { 0x1d79e, G_UNICODE_NOT_PRESENT_OFFSET, 15103 },
+  { 0x1d79f, G_UNICODE_NOT_PRESENT_OFFSET, 5357 },
+  { 0x1d7a0, G_UNICODE_NOT_PRESENT_OFFSET, 15106 },
+  { 0x1d7a1, G_UNICODE_NOT_PRESENT_OFFSET, 1402 },
+  { 0x1d7a2, G_UNICODE_NOT_PRESENT_OFFSET, 1408 },
+  { 0x1d7a3, G_UNICODE_NOT_PRESENT_OFFSET, 15109 },
+  { 0x1d7a4, G_UNICODE_NOT_PRESENT_OFFSET, 1374 },
+  { 0x1d7a5, G_UNICODE_NOT_PRESENT_OFFSET, 15112 },
+  { 0x1d7a6, G_UNICODE_NOT_PRESENT_OFFSET, 15115 },
+  { 0x1d7a7, G_UNICODE_NOT_PRESENT_OFFSET, 15118 },
+  { 0x1d7a8, G_UNICODE_NOT_PRESENT_OFFSET, 5333 },
+  { 0x1d7a9, G_UNICODE_NOT_PRESENT_OFFSET, 15121 },
+  { 0x1d7aa, G_UNICODE_NOT_PRESENT_OFFSET, 15125 },
+  { 0x1d7ab, G_UNICODE_NOT_PRESENT_OFFSET, 1368 },
+  { 0x1d7ac, G_UNICODE_NOT_PRESENT_OFFSET, 2418 },
+  { 0x1d7ad, G_UNICODE_NOT_PRESENT_OFFSET, 2421 },
+  { 0x1d7ae, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d7af, G_UNICODE_NOT_PRESENT_OFFSET, 15128 },
+  { 0x1d7b0, G_UNICODE_NOT_PRESENT_OFFSET, 15131 },
+  { 0x1d7b1, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d7b2, G_UNICODE_NOT_PRESENT_OFFSET, 4860 },
+  { 0x1d7b3, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d7b4, G_UNICODE_NOT_PRESENT_OFFSET, 15134 },
+  { 0x1d7b5, G_UNICODE_NOT_PRESENT_OFFSET, 20 },
+  { 0x1d7b6, G_UNICODE_NOT_PRESENT_OFFSET, 15137 },
+  { 0x1d7b7, G_UNICODE_NOT_PRESENT_OFFSET, 15140 },
+  { 0x1d7b8, G_UNICODE_NOT_PRESENT_OFFSET, 15143 },
+  { 0x1d7b9, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d7ba, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d7bb, G_UNICODE_NOT_PRESENT_OFFSET, 1399 },
+  { 0x1d7bc, G_UNICODE_NOT_PRESENT_OFFSET, 15146 },
+  { 0x1d7bd, G_UNICODE_NOT_PRESENT_OFFSET, 15149 },
+  { 0x1d7be, G_UNICODE_NOT_PRESENT_OFFSET, 15152 },
+  { 0x1d7bf, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d7c0, G_UNICODE_NOT_PRESENT_OFFSET, 2424 },
+  { 0x1d7c1, G_UNICODE_NOT_PRESENT_OFFSET, 15155 },
+  { 0x1d7c2, G_UNICODE_NOT_PRESENT_OFFSET, 15158 },
+  { 0x1d7c3, G_UNICODE_NOT_PRESENT_OFFSET, 15161 },
+  { 0x1d7c4, G_UNICODE_NOT_PRESENT_OFFSET, 1405 },
+  { 0x1d7c5, G_UNICODE_NOT_PRESENT_OFFSET, 1371 },
+  { 0x1d7c6, G_UNICODE_NOT_PRESENT_OFFSET, 1393 },
+  { 0x1d7c7, G_UNICODE_NOT_PRESENT_OFFSET, 1387 },
+  { 0x1d7c8, G_UNICODE_NOT_PRESENT_OFFSET, 1396 },
+  { 0x1d7c9, G_UNICODE_NOT_PRESENT_OFFSET, 1390 },
+  { 0x1d7ca, G_UNICODE_NOT_PRESENT_OFFSET, 15165 },
+  { 0x1d7cb, G_UNICODE_NOT_PRESENT_OFFSET, 15168 },
+  { 0x1d7ce, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x1d7cf, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x1d7d0, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x1d7d1, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x1d7d2, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x1d7d3, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x1d7d4, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x1d7d5, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x1d7d6, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x1d7d7, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x1d7d8, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x1d7d9, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x1d7da, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x1d7db, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x1d7dc, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x1d7dd, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x1d7de, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x1d7df, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x1d7e0, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x1d7e1, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x1d7e2, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x1d7e3, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x1d7e4, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x1d7e5, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x1d7e6, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x1d7e7, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x1d7e8, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x1d7e9, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x1d7ea, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x1d7eb, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x1d7ec, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x1d7ed, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x1d7ee, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x1d7ef, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x1d7f0, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x1d7f1, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x1d7f2, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x1d7f3, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x1d7f4, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x1d7f5, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x1d7f6, G_UNICODE_NOT_PRESENT_OFFSET, 5253 },
+  { 0x1d7f7, G_UNICODE_NOT_PRESENT_OFFSET, 27 },
+  { 0x1d7f8, G_UNICODE_NOT_PRESENT_OFFSET, 12 },
+  { 0x1d7f9, G_UNICODE_NOT_PRESENT_OFFSET, 14 },
+  { 0x1d7fa, G_UNICODE_NOT_PRESENT_OFFSET, 5255 },
+  { 0x1d7fb, G_UNICODE_NOT_PRESENT_OFFSET, 5257 },
+  { 0x1d7fc, G_UNICODE_NOT_PRESENT_OFFSET, 5259 },
+  { 0x1d7fd, G_UNICODE_NOT_PRESENT_OFFSET, 5261 },
+  { 0x1d7fe, G_UNICODE_NOT_PRESENT_OFFSET, 5263 },
+  { 0x1d7ff, G_UNICODE_NOT_PRESENT_OFFSET, 5265 },
+  { 0x2f800, 15171, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f801, 15175, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f802, 15179, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f803, 15183, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f804, 15188, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f805, 11915, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f806, 15192, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f807, 15196, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f808, 15200, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f809, 15204, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f80a, 11919, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f80b, 15208, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f80c, 15212, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f80d, 15216, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f80e, 11923, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f80f, 15221, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f810, 15225, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f811, 15229, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f812, 15233, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f813, 15238, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f814, 15242, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f815, 15246, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f816, 15250, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f817, 15255, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f818, 15259, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f819, 15263, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f81a, 15267, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f81b, 12131, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f81c, 15271, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f81d, 6220, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f81e, 15276, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f81f, 15280, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f820, 15284, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f821, 15288, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f822, 15292, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f823, 15296, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f824, 15300, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f825, 12151, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f826, 11927, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f827, 11931, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f828, 12155, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f829, 15304, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f82a, 15308, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f82b, 11207, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f82c, 15312, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f82d, 11935, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f82e, 15316, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f82f, 15320, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f830, 15324, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f831, 15328, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f832, 15328, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f833, 15328, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f834, 15332, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f835, 15337, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f836, 15341, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f837, 15345, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f838, 15349, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f839, 15354, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f83a, 15358, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f83b, 15362, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f83c, 15366, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f83d, 15370, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f83e, 15374, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f83f, 15378, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f840, 15382, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f841, 15386, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f842, 15390, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f843, 15394, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f844, 15398, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f845, 15402, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f846, 15402, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f847, 12163, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f848, 15406, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f849, 15410, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f84a, 15414, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f84b, 15418, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f84c, 11943, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f84d, 15422, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f84e, 15426, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f84f, 15430, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f850, 11791, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f851, 15434, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f852, 15438, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f853, 15442, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f854, 15446, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f855, 15450, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f856, 15454, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f857, 15458, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f858, 15462, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f859, 15466, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f85a, 15471, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f85b, 15475, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f85c, 15479, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f85d, 15483, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f85e, 15487, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f85f, 15491, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f860, 15495, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f861, 15500, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f862, 15505, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f863, 15509, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f864, 15513, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f865, 15517, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f866, 15521, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f867, 15525, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f868, 15529, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f869, 15533, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f86a, 15537, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f86b, 15537, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f86c, 15541, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f86d, 15546, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f86e, 15550, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f86f, 11191, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f870, 15554, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f871, 15558, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f872, 15563, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f873, 15567, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f874, 15571, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f875, 6324, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f876, 15575, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f877, 15579, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f878, 6332, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f879, 15583, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f87a, 15587, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f87b, 15591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f87c, 15596, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f87d, 15600, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f87e, 15605, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f87f, 15609, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f880, 15613, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f881, 15617, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f882, 15621, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f883, 15625, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f884, 15629, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f885, 15633, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f886, 15637, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f887, 15641, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f888, 15645, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f889, 15649, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f88a, 15654, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f88b, 15658, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f88c, 15662, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f88d, 15666, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f88e, 10983, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f88f, 15670, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f890, 6372, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f891, 15675, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f892, 15675, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f893, 15680, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f894, 15684, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f895, 15684, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f896, 15688, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f897, 15692, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f898, 15697, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f899, 15702, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f89a, 15706, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f89b, 15710, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f89c, 15714, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f89d, 15718, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f89e, 15722, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f89f, 15726, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a0, 15730, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a1, 15734, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a2, 15738, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a3, 11963, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a4, 15742, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a5, 15747, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a6, 15751, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a7, 15755, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a8, 12211, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8a9, 15755, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8aa, 15759, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ab, 11971, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ac, 15763, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ad, 15767, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ae, 15771, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8af, 15775, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b0, 11975, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b1, 10875, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b2, 15779, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b3, 15783, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b4, 15787, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b5, 15791, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b6, 15795, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b7, 15799, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b8, 15803, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8b9, 15808, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ba, 15812, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8bb, 15816, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8bc, 15820, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8bd, 15824, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8be, 15828, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8bf, 15833, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c0, 15837, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c1, 15841, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c2, 15845, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c3, 15849, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c4, 15853, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c5, 15857, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c6, 15861, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c7, 15865, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c8, 11979, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8c9, 15869, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ca, 15873, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8cb, 15878, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8cc, 15882, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8cd, 15886, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ce, 15890, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8cf, 11987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d0, 15894, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d1, 15898, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d2, 15902, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d3, 15906, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d4, 15910, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d5, 15914, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d6, 15918, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d7, 15922, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d8, 10987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8d9, 12243, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8da, 15926, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8db, 15930, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8dc, 15934, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8dd, 15938, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8de, 15943, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8df, 15947, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e0, 15951, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e1, 15955, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e2, 11991, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e3, 15959, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e4, 15964, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e5, 15968, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e6, 15972, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e7, 12414, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e8, 15976, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8e9, 15980, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ea, 15984, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8eb, 15988, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ec, 15992, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ed, 15997, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ee, 16001, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ef, 16005, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f0, 16009, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f1, 16014, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f2, 16018, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f3, 16022, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f4, 16026, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f5, 11259, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f6, 16030, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f7, 16034, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f8, 16039, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8f9, 16044, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8fa, 16049, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8fb, 16053, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8fc, 16058, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8fd, 16062, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8fe, 16066, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f8ff, 16070, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f900, 16074, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f901, 11995, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f902, 11591, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f903, 16078, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f904, 16082, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f905, 16086, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f906, 16090, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f907, 16095, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f908, 16099, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f909, 16103, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f90a, 16107, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f90b, 12255, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f90c, 16111, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f90d, 16115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f90e, 16120, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f90f, 16124, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f910, 16128, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f911, 16133, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f912, 16138, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f913, 16142, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f914, 12259, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f915, 16146, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f916, 16150, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f917, 16154, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f918, 16158, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f919, 16162, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f91a, 16166, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f91b, 16170, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f91c, 16175, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f91d, 16179, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f91e, 16184, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f91f, 16188, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f920, 16193, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f921, 12267, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f922, 16197, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f923, 16201, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f924, 16206, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f925, 16210, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f926, 16214, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f927, 16219, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f928, 16224, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f929, 16228, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f92a, 16232, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f92b, 16236, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f92c, 16240, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f92d, 16240, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f92e, 16244, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f92f, 16248, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f930, 12275, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f931, 16252, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f932, 16256, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f933, 16260, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f934, 16264, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f935, 16268, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f936, 16273, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f937, 16277, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f938, 11203, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f939, 16282, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f93a, 16287, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f93b, 16291, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f93c, 16296, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f93d, 16301, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f93e, 16306, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f93f, 16310, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f940, 12299, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f941, 16314, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f942, 16319, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f943, 16324, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f944, 16329, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f945, 16334, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f946, 16338, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f947, 16338, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f948, 12303, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f949, 12422, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f94a, 16342, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f94b, 16346, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f94c, 16350, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f94d, 16354, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f94e, 16359, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f94f, 11055, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f950, 12311, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f951, 16363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f952, 16367, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f953, 12035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f954, 16372, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f955, 16377, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f956, 11871, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f957, 16382, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f958, 16386, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f959, 12047, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f95a, 16390, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f95b, 16394, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f95c, 16398, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f95d, 16403, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f95e, 16403, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f95f, 16408, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f960, 16412, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f961, 16416, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f962, 16421, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f963, 16425, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f964, 16429, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f965, 16433, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f966, 16438, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f967, 16442, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f968, 16446, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f969, 16450, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f96a, 16454, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f96b, 16458, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f96c, 16463, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f96d, 16467, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f96e, 16471, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f96f, 16475, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f970, 16479, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f971, 16483, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f972, 16487, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f973, 16492, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f974, 16497, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f975, 16501, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f976, 16506, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f977, 16510, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f978, 16515, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f979, 16519, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f97a, 12071, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f97b, 16523, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f97c, 16528, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f97d, 16533, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f97e, 16537, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f97f, 16542, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f980, 16546, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f981, 16551, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f982, 16555, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f983, 16559, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f984, 16563, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f985, 16567, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f986, 16571, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f987, 16575, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f988, 16580, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f989, 16585, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f98a, 16590, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f98b, 15680, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f98c, 16595, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f98d, 16599, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f98e, 16603, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f98f, 16607, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f990, 16611, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f991, 16615, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f992, 16619, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f993, 16623, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f994, 16627, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f995, 16631, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f996, 16635, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f997, 16639, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f998, 11271, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f999, 16644, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f99a, 16648, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f99b, 16652, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f99c, 16656, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f99d, 16660, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f99e, 16664, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f99f, 12083, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a0, 16668, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a1, 16672, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a2, 16676, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a3, 16680, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a4, 16684, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a5, 16689, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a6, 16694, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a7, 16699, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a8, 16703, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9a9, 16707, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9aa, 16711, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ab, 16715, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ac, 16720, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ad, 16724, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ae, 16729, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9af, 16733, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b0, 16737, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b1, 16742, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b2, 16747, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b3, 16751, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b4, 11035, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b5, 16755, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b6, 16759, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b7, 16763, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b8, 16767, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9b9, 16771, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ba, 16775, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9bb, 12339, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9bc, 16779, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9bd, 16783, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9be, 16787, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9bf, 16791, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c0, 16795, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c1, 16799, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c2, 16803, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c3, 16807, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c4, 6732, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c5, 16811, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c6, 16816, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c7, 16820, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c8, 16824, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9c9, 16828, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ca, 16832, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9cb, 16836, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9cc, 16841, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9cd, 16846, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ce, 16850, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9cf, 16854, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d0, 12359, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d1, 12363, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d2, 6760, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d3, 16858, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d4, 16863, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d5, 16867, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d6, 16871, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d7, 16875, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d8, 16879, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9d9, 16884, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9da, 16889, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9db, 16893, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9dc, 16897, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9dd, 16901, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9de, 16906, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9df, 12367, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e0, 16910, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e1, 16915, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e2, 16920, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e3, 16924, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e4, 16928, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e5, 16932, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e6, 16937, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e7, 16941, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e8, 16945, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9e9, 16949, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ea, 16953, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9eb, 16957, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ec, 16961, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ed, 16965, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ee, 16970, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ef, 16974, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f0, 16978, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f1, 16982, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f2, 16987, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f3, 16991, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f4, 16995, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f5, 16999, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f6, 17003, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f7, 17008, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f8, 17013, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9f9, 17017, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9fa, 17021, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9fb, 17025, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9fc, 17030, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9fd, 17034, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9fe, 12391, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2f9ff, 12391, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa00, 17039, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa01, 17043, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa02, 17048, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa03, 17052, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa04, 17056, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa05, 17060, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa06, 17064, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa07, 17068, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa08, 17072, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa09, 17076, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa0a, 12395, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa0b, 17081, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa0c, 17085, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa0d, 17089, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa0e, 17093, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa0f, 17097, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa10, 17101, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa11, 17106, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa12, 17110, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa13, 17115, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa14, 17120, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa15, 6952, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa16, 17125, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa17, 6968, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa18, 17129, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa19, 17133, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa1a, 17137, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa1b, 17141, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa1c, 6988, G_UNICODE_NOT_PRESENT_OFFSET },
+  { 0x2fa1d, 17145, G_UNICODE_NOT_PRESENT_OFFSET }
+};
+
+static const gchar decomp_expansion_string[] = 
+  "\x20\0" /* offset 0 */
+  "\x20\xcc\x88\0" /* offset 2 */
+  "\x61\0" /* offset 6 */
+  "\x20\xcc\x84\0" /* offset 8 */
+  "\x32\0" /* offset 12 */
+  "\x33\0" /* offset 14 */
+  "\x20\xcc\x81\0" /* offset 16 */
+  "\xce\xbc\0" /* offset 20 */
+  "\x20\xcc\xa7\0" /* offset 23 */
+  "\x31\0" /* offset 27 */
+  "\x6f\0" /* offset 29 */
+  "\x31\xe2\x81\x84\x34\0" /* offset 31 */
+  "\x31\xe2\x81\x84\x32\0" /* offset 37 */
+  "\x33\xe2\x81\x84\x34\0" /* offset 43 */
+  "\x41\xcc\x80\0" /* offset 49 */
+  "\x41\xcc\x81\0" /* offset 53 */
+  "\x41\xcc\x82\0" /* offset 57 */
+  "\x41\xcc\x83\0" /* offset 61 */
+  "\x41\xcc\x88\0" /* offset 65 */
+  "\x41\xcc\x8a\0" /* offset 69 */
+  "\x43\xcc\xa7\0" /* offset 73 */
+  "\x45\xcc\x80\0" /* offset 77 */
+  "\x45\xcc\x81\0" /* offset 81 */
+  "\x45\xcc\x82\0" /* offset 85 */
+  "\x45\xcc\x88\0" /* offset 89 */
+  "\x49\xcc\x80\0" /* offset 93 */
+  "\x49\xcc\x81\0" /* offset 97 */
+  "\x49\xcc\x82\0" /* offset 101 */
+  "\x49\xcc\x88\0" /* offset 105 */
+  "\x4e\xcc\x83\0" /* offset 109 */
+  "\x4f\xcc\x80\0" /* offset 113 */
+  "\x4f\xcc\x81\0" /* offset 117 */
+  "\x4f\xcc\x82\0" /* offset 121 */
+  "\x4f\xcc\x83\0" /* offset 125 */
+  "\x4f\xcc\x88\0" /* offset 129 */
+  "\x55\xcc\x80\0" /* offset 133 */
+  "\x55\xcc\x81\0" /* offset 137 */
+  "\x55\xcc\x82\0" /* offset 141 */
+  "\x55\xcc\x88\0" /* offset 145 */
+  "\x59\xcc\x81\0" /* offset 149 */
+  "\x61\xcc\x80\0" /* offset 153 */
+  "\x61\xcc\x81\0" /* offset 157 */
+  "\x61\xcc\x82\0" /* offset 161 */
+  "\x61\xcc\x83\0" /* offset 165 */
+  "\x61\xcc\x88\0" /* offset 169 */
+  "\x61\xcc\x8a\0" /* offset 173 */
+  "\x63\xcc\xa7\0" /* offset 177 */
+  "\x65\xcc\x80\0" /* offset 181 */
+  "\x65\xcc\x81\0" /* offset 185 */
+  "\x65\xcc\x82\0" /* offset 189 */
+  "\x65\xcc\x88\0" /* offset 193 */
+  "\x69\xcc\x80\0" /* offset 197 */
+  "\x69\xcc\x81\0" /* offset 201 */
+  "\x69\xcc\x82\0" /* offset 205 */
+  "\x69\xcc\x88\0" /* offset 209 */
+  "\x6e\xcc\x83\0" /* offset 213 */
+  "\x6f\xcc\x80\0" /* offset 217 */
+  "\x6f\xcc\x81\0" /* offset 221 */
+  "\x6f\xcc\x82\0" /* offset 225 */
+  "\x6f\xcc\x83\0" /* offset 229 */
+  "\x6f\xcc\x88\0" /* offset 233 */
+  "\x75\xcc\x80\0" /* offset 237 */
+  "\x75\xcc\x81\0" /* offset 241 */
+  "\x75\xcc\x82\0" /* offset 245 */
+  "\x75\xcc\x88\0" /* offset 249 */
+  "\x79\xcc\x81\0" /* offset 253 */
+  "\x79\xcc\x88\0" /* offset 257 */
+  "\x41\xcc\x84\0" /* offset 261 */
+  "\x61\xcc\x84\0" /* offset 265 */
+  "\x41\xcc\x86\0" /* offset 269 */
+  "\x61\xcc\x86\0" /* offset 273 */
+  "\x41\xcc\xa8\0" /* offset 277 */
+  "\x61\xcc\xa8\0" /* offset 281 */
+  "\x43\xcc\x81\0" /* offset 285 */
+  "\x63\xcc\x81\0" /* offset 289 */
+  "\x43\xcc\x82\0" /* offset 293 */
+  "\x63\xcc\x82\0" /* offset 297 */
+  "\x43\xcc\x87\0" /* offset 301 */
+  "\x63\xcc\x87\0" /* offset 305 */
+  "\x43\xcc\x8c\0" /* offset 309 */
+  "\x63\xcc\x8c\0" /* offset 313 */
+  "\x44\xcc\x8c\0" /* offset 317 */
+  "\x64\xcc\x8c\0" /* offset 321 */
+  "\x45\xcc\x84\0" /* offset 325 */
+  "\x65\xcc\x84\0" /* offset 329 */
+  "\x45\xcc\x86\0" /* offset 333 */
+  "\x65\xcc\x86\0" /* offset 337 */
+  "\x45\xcc\x87\0" /* offset 341 */
+  "\x65\xcc\x87\0" /* offset 345 */
+  "\x45\xcc\xa8\0" /* offset 349 */
+  "\x65\xcc\xa8\0" /* offset 353 */
+  "\x45\xcc\x8c\0" /* offset 357 */
+  "\x65\xcc\x8c\0" /* offset 361 */
+  "\x47\xcc\x82\0" /* offset 365 */
+  "\x67\xcc\x82\0" /* offset 369 */
+  "\x47\xcc\x86\0" /* offset 373 */
+  "\x67\xcc\x86\0" /* offset 377 */
+  "\x47\xcc\x87\0" /* offset 381 */
+  "\x67\xcc\x87\0" /* offset 385 */
+  "\x47\xcc\xa7\0" /* offset 389 */
+  "\x67\xcc\xa7\0" /* offset 393 */
+  "\x48\xcc\x82\0" /* offset 397 */
+  "\x68\xcc\x82\0" /* offset 401 */
+  "\x49\xcc\x83\0" /* offset 405 */
+  "\x69\xcc\x83\0" /* offset 409 */
+  "\x49\xcc\x84\0" /* offset 413 */
+  "\x69\xcc\x84\0" /* offset 417 */
+  "\x49\xcc\x86\0" /* offset 421 */
+  "\x69\xcc\x86\0" /* offset 425 */
+  "\x49\xcc\xa8\0" /* offset 429 */
+  "\x69\xcc\xa8\0" /* offset 433 */
+  "\x49\xcc\x87\0" /* offset 437 */
+  "\x49\x4a\0" /* offset 441 */
+  "\x69\x6a\0" /* offset 444 */
+  "\x4a\xcc\x82\0" /* offset 447 */
+  "\x6a\xcc\x82\0" /* offset 451 */
+  "\x4b\xcc\xa7\0" /* offset 455 */
+  "\x6b\xcc\xa7\0" /* offset 459 */
+  "\x4c\xcc\x81\0" /* offset 463 */
+  "\x6c\xcc\x81\0" /* offset 467 */
+  "\x4c\xcc\xa7\0" /* offset 471 */
+  "\x6c\xcc\xa7\0" /* offset 475 */
+  "\x4c\xcc\x8c\0" /* offset 479 */
+  "\x6c\xcc\x8c\0" /* offset 483 */
+  "\x4c\xc2\xb7\0" /* offset 487 */
+  "\x6c\xc2\xb7\0" /* offset 491 */
+  "\x4e\xcc\x81\0" /* offset 495 */
+  "\x6e\xcc\x81\0" /* offset 499 */
+  "\x4e\xcc\xa7\0" /* offset 503 */
+  "\x6e\xcc\xa7\0" /* offset 507 */
+  "\x4e\xcc\x8c\0" /* offset 511 */
+  "\x6e\xcc\x8c\0" /* offset 515 */
+  "\xca\xbc\x6e\0" /* offset 519 */
+  "\x4f\xcc\x84\0" /* offset 523 */
+  "\x6f\xcc\x84\0" /* offset 527 */
+  "\x4f\xcc\x86\0" /* offset 531 */
+  "\x6f\xcc\x86\0" /* offset 535 */
+  "\x4f\xcc\x8b\0" /* offset 539 */
+  "\x6f\xcc\x8b\0" /* offset 543 */
+  "\x52\xcc\x81\0" /* offset 547 */
+  "\x72\xcc\x81\0" /* offset 551 */
+  "\x52\xcc\xa7\0" /* offset 555 */
+  "\x72\xcc\xa7\0" /* offset 559 */
+  "\x52\xcc\x8c\0" /* offset 563 */
+  "\x72\xcc\x8c\0" /* offset 567 */
+  "\x53\xcc\x81\0" /* offset 571 */
+  "\x73\xcc\x81\0" /* offset 575 */
+  "\x53\xcc\x82\0" /* offset 579 */
+  "\x73\xcc\x82\0" /* offset 583 */
+  "\x53\xcc\xa7\0" /* offset 587 */
+  "\x73\xcc\xa7\0" /* offset 591 */
+  "\x53\xcc\x8c\0" /* offset 595 */
+  "\x73\xcc\x8c\0" /* offset 599 */
+  "\x54\xcc\xa7\0" /* offset 603 */
+  "\x74\xcc\xa7\0" /* offset 607 */
+  "\x54\xcc\x8c\0" /* offset 611 */
+  "\x74\xcc\x8c\0" /* offset 615 */
+  "\x55\xcc\x83\0" /* offset 619 */
+  "\x75\xcc\x83\0" /* offset 623 */
+  "\x55\xcc\x84\0" /* offset 627 */
+  "\x75\xcc\x84\0" /* offset 631 */
+  "\x55\xcc\x86\0" /* offset 635 */
+  "\x75\xcc\x86\0" /* offset 639 */
+  "\x55\xcc\x8a\0" /* offset 643 */
+  "\x75\xcc\x8a\0" /* offset 647 */
+  "\x55\xcc\x8b\0" /* offset 651 */
+  "\x75\xcc\x8b\0" /* offset 655 */
+  "\x55\xcc\xa8\0" /* offset 659 */
+  "\x75\xcc\xa8\0" /* offset 663 */
+  "\x57\xcc\x82\0" /* offset 667 */
+  "\x77\xcc\x82\0" /* offset 671 */
+  "\x59\xcc\x82\0" /* offset 675 */
+  "\x79\xcc\x82\0" /* offset 679 */
+  "\x59\xcc\x88\0" /* offset 683 */
+  "\x5a\xcc\x81\0" /* offset 687 */
+  "\x7a\xcc\x81\0" /* offset 691 */
+  "\x5a\xcc\x87\0" /* offset 695 */
+  "\x7a\xcc\x87\0" /* offset 699 */
+  "\x5a\xcc\x8c\0" /* offset 703 */
+  "\x7a\xcc\x8c\0" /* offset 707 */
+  "\x73\0" /* offset 711 */
+  "\x4f\xcc\x9b\0" /* offset 713 */
+  "\x6f\xcc\x9b\0" /* offset 717 */
+  "\x55\xcc\x9b\0" /* offset 721 */
+  "\x75\xcc\x9b\0" /* offset 725 */
+  "\x44\x5a\xcc\x8c\0" /* offset 729 */
+  "\x44\x7a\xcc\x8c\0" /* offset 734 */
+  "\x64\x7a\xcc\x8c\0" /* offset 739 */
+  "\x4c\x4a\0" /* offset 744 */
+  "\x4c\x6a\0" /* offset 747 */
+  "\x6c\x6a\0" /* offset 750 */
+  "\x4e\x4a\0" /* offset 753 */
+  "\x4e\x6a\0" /* offset 756 */
+  "\x6e\x6a\0" /* offset 759 */
+  "\x41\xcc\x8c\0" /* offset 762 */
+  "\x61\xcc\x8c\0" /* offset 766 */
+  "\x49\xcc\x8c\0" /* offset 770 */
+  "\x69\xcc\x8c\0" /* offset 774 */
+  "\x4f\xcc\x8c\0" /* offset 778 */
+  "\x6f\xcc\x8c\0" /* offset 782 */
+  "\x55\xcc\x8c\0" /* offset 786 */
+  "\x75\xcc\x8c\0" /* offset 790 */
+  "\x55\xcc\x88\xcc\x84\0" /* offset 794 */
+  "\x75\xcc\x88\xcc\x84\0" /* offset 800 */
+  "\x55\xcc\x88\xcc\x81\0" /* offset 806 */
+  "\x75\xcc\x88\xcc\x81\0" /* offset 812 */
+  "\x55\xcc\x88\xcc\x8c\0" /* offset 818 */
+  "\x75\xcc\x88\xcc\x8c\0" /* offset 824 */
+  "\x55\xcc\x88\xcc\x80\0" /* offset 830 */
+  "\x75\xcc\x88\xcc\x80\0" /* offset 836 */
+  "\x41\xcc\x88\xcc\x84\0" /* offset 842 */
+  "\x61\xcc\x88\xcc\x84\0" /* offset 848 */
+  "\x41\xcc\x87\xcc\x84\0" /* offset 854 */
+  "\x61\xcc\x87\xcc\x84\0" /* offset 860 */
+  "\xc3\x86\xcc\x84\0" /* offset 866 */
+  "\xc3\xa6\xcc\x84\0" /* offset 871 */
+  "\x47\xcc\x8c\0" /* offset 876 */
+  "\x67\xcc\x8c\0" /* offset 880 */
+  "\x4b\xcc\x8c\0" /* offset 884 */
+  "\x6b\xcc\x8c\0" /* offset 888 */
+  "\x4f\xcc\xa8\0" /* offset 892 */
+  "\x6f\xcc\xa8\0" /* offset 896 */
+  "\x4f\xcc\xa8\xcc\x84\0" /* offset 900 */
+  "\x6f\xcc\xa8\xcc\x84\0" /* offset 906 */
+  "\xc6\xb7\xcc\x8c\0" /* offset 912 */
+  "\xca\x92\xcc\x8c\0" /* offset 917 */
+  "\x6a\xcc\x8c\0" /* offset 922 */
+  "\x44\x5a\0" /* offset 926 */
+  "\x44\x7a\0" /* offset 929 */
+  "\x64\x7a\0" /* offset 932 */
+  "\x47\xcc\x81\0" /* offset 935 */
+  "\x67\xcc\x81\0" /* offset 939 */
+  "\x4e\xcc\x80\0" /* offset 943 */
+  "\x6e\xcc\x80\0" /* offset 947 */
+  "\x41\xcc\x8a\xcc\x81\0" /* offset 951 */
+  "\x61\xcc\x8a\xcc\x81\0" /* offset 957 */
+  "\xc3\x86\xcc\x81\0" /* offset 963 */
+  "\xc3\xa6\xcc\x81\0" /* offset 968 */
+  "\xc3\x98\xcc\x81\0" /* offset 973 */
+  "\xc3\xb8\xcc\x81\0" /* offset 978 */
+  "\x41\xcc\x8f\0" /* offset 983 */
+  "\x61\xcc\x8f\0" /* offset 987 */
+  "\x41\xcc\x91\0" /* offset 991 */
+  "\x61\xcc\x91\0" /* offset 995 */
+  "\x45\xcc\x8f\0" /* offset 999 */
+  "\x65\xcc\x8f\0" /* offset 1003 */
+  "\x45\xcc\x91\0" /* offset 1007 */
+  "\x65\xcc\x91\0" /* offset 1011 */
+  "\x49\xcc\x8f\0" /* offset 1015 */
+  "\x69\xcc\x8f\0" /* offset 1019 */
+  "\x49\xcc\x91\0" /* offset 1023 */
+  "\x69\xcc\x91\0" /* offset 1027 */
+  "\x4f\xcc\x8f\0" /* offset 1031 */
+  "\x6f\xcc\x8f\0" /* offset 1035 */
+  "\x4f\xcc\x91\0" /* offset 1039 */
+  "\x6f\xcc\x91\0" /* offset 1043 */
+  "\x52\xcc\x8f\0" /* offset 1047 */
+  "\x72\xcc\x8f\0" /* offset 1051 */
+  "\x52\xcc\x91\0" /* offset 1055 */
+  "\x72\xcc\x91\0" /* offset 1059 */
+  "\x55\xcc\x8f\0" /* offset 1063 */
+  "\x75\xcc\x8f\0" /* offset 1067 */
+  "\x55\xcc\x91\0" /* offset 1071 */
+  "\x75\xcc\x91\0" /* offset 1075 */
+  "\x53\xcc\xa6\0" /* offset 1079 */
+  "\x73\xcc\xa6\0" /* offset 1083 */
+  "\x54\xcc\xa6\0" /* offset 1087 */
+  "\x74\xcc\xa6\0" /* offset 1091 */
+  "\x48\xcc\x8c\0" /* offset 1095 */
+  "\x68\xcc\x8c\0" /* offset 1099 */
+  "\x41\xcc\x87\0" /* offset 1103 */
+  "\x61\xcc\x87\0" /* offset 1107 */
+  "\x45\xcc\xa7\0" /* offset 1111 */
+  "\x65\xcc\xa7\0" /* offset 1115 */
+  "\x4f\xcc\x88\xcc\x84\0" /* offset 1119 */
+  "\x6f\xcc\x88\xcc\x84\0" /* offset 1125 */
+  "\x4f\xcc\x83\xcc\x84\0" /* offset 1131 */
+  "\x6f\xcc\x83\xcc\x84\0" /* offset 1137 */
+  "\x4f\xcc\x87\0" /* offset 1143 */
+  "\x6f\xcc\x87\0" /* offset 1147 */
+  "\x4f\xcc\x87\xcc\x84\0" /* offset 1151 */
+  "\x6f\xcc\x87\xcc\x84\0" /* offset 1157 */
+  "\x59\xcc\x84\0" /* offset 1163 */
+  "\x79\xcc\x84\0" /* offset 1167 */
+  "\x68\0" /* offset 1171 */
+  "\xc9\xa6\0" /* offset 1173 */
+  "\x6a\0" /* offset 1176 */
+  "\x72\0" /* offset 1178 */
+  "\xc9\xb9\0" /* offset 1180 */
+  "\xc9\xbb\0" /* offset 1183 */
+  "\xca\x81\0" /* offset 1186 */
+  "\x77\0" /* offset 1189 */
+  "\x79\0" /* offset 1191 */
+  "\x20\xcc\x86\0" /* offset 1193 */
+  "\x20\xcc\x87\0" /* offset 1197 */
+  "\x20\xcc\x8a\0" /* offset 1201 */
+  "\x20\xcc\xa8\0" /* offset 1205 */
+  "\x20\xcc\x83\0" /* offset 1209 */
+  "\x20\xcc\x8b\0" /* offset 1213 */
+  "\xc9\xa3\0" /* offset 1217 */
+  "\x6c\0" /* offset 1220 */
+  "\x78\0" /* offset 1222 */
+  "\xca\x95\0" /* offset 1224 */
+  "\xcc\x80\0" /* offset 1227 */
+  "\xcc\x81\0" /* offset 1230 */
+  "\xcc\x93\0" /* offset 1233 */
+  "\xcc\x88\xcc\x81\0" /* offset 1236 */
+  "\xca\xb9\0" /* offset 1241 */
+  "\x20\xcd\x85\0" /* offset 1244 */
+  "\x3b\0" /* offset 1248 */
+  "\xc2\xa8\xcc\x81\0" /* offset 1250 */
+  "\x20\xcc\x88\xcc\x81\0" /* offset 1255 */
+  "\xce\x91\xcc\x81\0" /* offset 1261 */
+  "\xc2\xb7\0" /* offset 1266 */
+  "\xce\x95\xcc\x81\0" /* offset 1269 */
+  "\xce\x97\xcc\x81\0" /* offset 1274 */
+  "\xce\x99\xcc\x81\0" /* offset 1279 */
+  "\xce\x9f\xcc\x81\0" /* offset 1284 */
+  "\xce\xa5\xcc\x81\0" /* offset 1289 */
+  "\xce\xa9\xcc\x81\0" /* offset 1294 */
+  "\xce\xb9\xcc\x88\xcc\x81\0" /* offset 1299 */
+  "\xce\x99\xcc\x88\0" /* offset 1306 */
+  "\xce\xa5\xcc\x88\0" /* offset 1311 */
+  "\xce\xb1\xcc\x81\0" /* offset 1316 */
+  "\xce\xb5\xcc\x81\0" /* offset 1321 */
+  "\xce\xb7\xcc\x81\0" /* offset 1326 */
+  "\xce\xb9\xcc\x81\0" /* offset 1331 */
+  "\xcf\x85\xcc\x88\xcc\x81\0" /* offset 1336 */
+  "\xce\xb9\xcc\x88\0" /* offset 1343 */
+  "\xcf\x85\xcc\x88\0" /* offset 1348 */
+  "\xce\xbf\xcc\x81\0" /* offset 1353 */
+  "\xcf\x85\xcc\x81\0" /* offset 1358 */
+  "\xcf\x89\xcc\x81\0" /* offset 1363 */
+  "\xce\xb2\0" /* offset 1368 */
+  "\xce\xb8\0" /* offset 1371 */
+  "\xce\xa5\0" /* offset 1374 */
+  "\xcf\x92\xcc\x81\0" /* offset 1377 */
+  "\xcf\x92\xcc\x88\0" /* offset 1382 */
+  "\xcf\x86\0" /* offset 1387 */
+  "\xcf\x80\0" /* offset 1390 */
+  "\xce\xba\0" /* offset 1393 */
+  "\xcf\x81\0" /* offset 1396 */
+  "\xcf\x82\0" /* offset 1399 */
+  "\xce\x98\0" /* offset 1402 */
+  "\xce\xb5\0" /* offset 1405 */
+  "\xce\xa3\0" /* offset 1408 */
+  "\xd0\x95\xcc\x80\0" /* offset 1411 */
+  "\xd0\x95\xcc\x88\0" /* offset 1416 */
+  "\xd0\x93\xcc\x81\0" /* offset 1421 */
+  "\xd0\x86\xcc\x88\0" /* offset 1426 */
+  "\xd0\x9a\xcc\x81\0" /* offset 1431 */
+  "\xd0\x98\xcc\x80\0" /* offset 1436 */
+  "\xd0\xa3\xcc\x86\0" /* offset 1441 */
+  "\xd0\x98\xcc\x86\0" /* offset 1446 */
+  "\xd0\xb8\xcc\x86\0" /* offset 1451 */
+  "\xd0\xb5\xcc\x80\0" /* offset 1456 */
+  "\xd0\xb5\xcc\x88\0" /* offset 1461 */
+  "\xd0\xb3\xcc\x81\0" /* offset 1466 */
+  "\xd1\x96\xcc\x88\0" /* offset 1471 */
+  "\xd0\xba\xcc\x81\0" /* offset 1476 */
+  "\xd0\xb8\xcc\x80\0" /* offset 1481 */
+  "\xd1\x83\xcc\x86\0" /* offset 1486 */
+  "\xd1\xb4\xcc\x8f\0" /* offset 1491 */
+  "\xd1\xb5\xcc\x8f\0" /* offset 1496 */
+  "\xd0\x96\xcc\x86\0" /* offset 1501 */
+  "\xd0\xb6\xcc\x86\0" /* offset 1506 */
+  "\xd0\x90\xcc\x86\0" /* offset 1511 */
+  "\xd0\xb0\xcc\x86\0" /* offset 1516 */
+  "\xd0\x90\xcc\x88\0" /* offset 1521 */
+  "\xd0\xb0\xcc\x88\0" /* offset 1526 */
+  "\xd0\x95\xcc\x86\0" /* offset 1531 */
+  "\xd0\xb5\xcc\x86\0" /* offset 1536 */
+  "\xd3\x98\xcc\x88\0" /* offset 1541 */
+  "\xd3\x99\xcc\x88\0" /* offset 1546 */
+  "\xd0\x96\xcc\x88\0" /* offset 1551 */
+  "\xd0\xb6\xcc\x88\0" /* offset 1556 */
+  "\xd0\x97\xcc\x88\0" /* offset 1561 */
+  "\xd0\xb7\xcc\x88\0" /* offset 1566 */
+  "\xd0\x98\xcc\x84\0" /* offset 1571 */
+  "\xd0\xb8\xcc\x84\0" /* offset 1576 */
+  "\xd0\x98\xcc\x88\0" /* offset 1581 */
+  "\xd0\xb8\xcc\x88\0" /* offset 1586 */
+  "\xd0\x9e\xcc\x88\0" /* offset 1591 */
+  "\xd0\xbe\xcc\x88\0" /* offset 1596 */
+  "\xd3\xa8\xcc\x88\0" /* offset 1601 */
+  "\xd3\xa9\xcc\x88\0" /* offset 1606 */
+  "\xd0\xad\xcc\x88\0" /* offset 1611 */
+  "\xd1\x8d\xcc\x88\0" /* offset 1616 */
+  "\xd0\xa3\xcc\x84\0" /* offset 1621 */
+  "\xd1\x83\xcc\x84\0" /* offset 1626 */
+  "\xd0\xa3\xcc\x88\0" /* offset 1631 */
+  "\xd1\x83\xcc\x88\0" /* offset 1636 */
+  "\xd0\xa3\xcc\x8b\0" /* offset 1641 */
+  "\xd1\x83\xcc\x8b\0" /* offset 1646 */
+  "\xd0\xa7\xcc\x88\0" /* offset 1651 */
+  "\xd1\x87\xcc\x88\0" /* offset 1656 */
+  "\xd0\xab\xcc\x88\0" /* offset 1661 */
+  "\xd1\x8b\xcc\x88\0" /* offset 1666 */
+  "\xd5\xa5\xd6\x82\0" /* offset 1671 */
+  "\xd8\xa7\xd9\x93\0" /* offset 1676 */
+  "\xd8\xa7\xd9\x94\0" /* offset 1681 */
+  "\xd9\x88\xd9\x94\0" /* offset 1686 */
+  "\xd8\xa7\xd9\x95\0" /* offset 1691 */
+  "\xd9\x8a\xd9\x94\0" /* offset 1696 */
+  "\xd8\xa7\xd9\xb4\0" /* offset 1701 */
+  "\xd9\x88\xd9\xb4\0" /* offset 1706 */
+  "\xdb\x87\xd9\xb4\0" /* offset 1711 */
+  "\xd9\x8a\xd9\xb4\0" /* offset 1716 */
+  "\xdb\x95\xd9\x94\0" /* offset 1721 */
+  "\xdb\x81\xd9\x94\0" /* offset 1726 */
+  "\xdb\x92\xd9\x94\0" /* offset 1731 */
+  "\xe0\xa4\xa8\xe0\xa4\xbc\0" /* offset 1736 */
+  "\xe0\xa4\xb0\xe0\xa4\xbc\0" /* offset 1743 */
+  "\xe0\xa4\xb3\xe0\xa4\xbc\0" /* offset 1750 */
+  "\xe0\xa4\x95\xe0\xa4\xbc\0" /* offset 1757 */
+  "\xe0\xa4\x96\xe0\xa4\xbc\0" /* offset 1764 */
+  "\xe0\xa4\x97\xe0\xa4\xbc\0" /* offset 1771 */
+  "\xe0\xa4\x9c\xe0\xa4\xbc\0" /* offset 1778 */
+  "\xe0\xa4\xa1\xe0\xa4\xbc\0" /* offset 1785 */
+  "\xe0\xa4\xa2\xe0\xa4\xbc\0" /* offset 1792 */
+  "\xe0\xa4\xab\xe0\xa4\xbc\0" /* offset 1799 */
+  "\xe0\xa4\xaf\xe0\xa4\xbc\0" /* offset 1806 */
+  "\xe0\xa7\x87\xe0\xa6\xbe\0" /* offset 1813 */
+  "\xe0\xa7\x87\xe0\xa7\x97\0" /* offset 1820 */
+  "\xe0\xa6\xa1\xe0\xa6\xbc\0" /* offset 1827 */
+  "\xe0\xa6\xa2\xe0\xa6\xbc\0" /* offset 1834 */
+  "\xe0\xa6\xaf\xe0\xa6\xbc\0" /* offset 1841 */
+  "\xe0\xa8\xb2\xe0\xa8\xbc\0" /* offset 1848 */
+  "\xe0\xa8\xb8\xe0\xa8\xbc\0" /* offset 1855 */
+  "\xe0\xa8\x96\xe0\xa8\xbc\0" /* offset 1862 */
+  "\xe0\xa8\x97\xe0\xa8\xbc\0" /* offset 1869 */
+  "\xe0\xa8\x9c\xe0\xa8\xbc\0" /* offset 1876 */
+  "\xe0\xa8\xab\xe0\xa8\xbc\0" /* offset 1883 */
+  "\xe0\xad\x87\xe0\xad\x96\0" /* offset 1890 */
+  "\xe0\xad\x87\xe0\xac\xbe\0" /* offset 1897 */
+  "\xe0\xad\x87\xe0\xad\x97\0" /* offset 1904 */
+  "\xe0\xac\xa1\xe0\xac\xbc\0" /* offset 1911 */
+  "\xe0\xac\xa2\xe0\xac\xbc\0" /* offset 1918 */
+  "\xe0\xae\x92\xe0\xaf\x97\0" /* offset 1925 */
+  "\xe0\xaf\x86\xe0\xae\xbe\0" /* offset 1932 */
+  "\xe0\xaf\x87\xe0\xae\xbe\0" /* offset 1939 */
+  "\xe0\xaf\x86\xe0\xaf\x97\0" /* offset 1946 */
+  "\xe0\xb1\x86\xe0\xb1\x96\0" /* offset 1953 */
+  "\xe0\xb2\xbf\xe0\xb3\x95\0" /* offset 1960 */
+  "\xe0\xb3\x86\xe0\xb3\x95\0" /* offset 1967 */
+  "\xe0\xb3\x86\xe0\xb3\x96\0" /* offset 1974 */
+  "\xe0\xb3\x86\xe0\xb3\x82\0" /* offset 1981 */
+  "\xe0\xb3\x86\xe0\xb3\x82\xe0\xb3\x95\0" /* offset 1988 */
+  "\xe0\xb5\x86\xe0\xb4\xbe\0" /* offset 1998 */
+  "\xe0\xb5\x87\xe0\xb4\xbe\0" /* offset 2005 */
+  "\xe0\xb5\x86\xe0\xb5\x97\0" /* offset 2012 */
+  "\xe0\xb7\x99\xe0\xb7\x8a\0" /* offset 2019 */
+  "\xe0\xb7\x99\xe0\xb7\x8f\0" /* offset 2026 */
+  "\xe0\xb7\x99\xe0\xb7\x8f\xe0\xb7\x8a\0" /* offset 2033 */
+  "\xe0\xb7\x99\xe0\xb7\x9f\0" /* offset 2043 */
+  "\xe0\xb9\x8d\xe0\xb8\xb2\0" /* offset 2050 */
+  "\xe0\xbb\x8d\xe0\xba\xb2\0" /* offset 2057 */
+  "\xe0\xba\xab\xe0\xba\x99\0" /* offset 2064 */
+  "\xe0\xba\xab\xe0\xba\xa1\0" /* offset 2071 */
+  "\xe0\xbc\x8b\0" /* offset 2078 */
+  "\xe0\xbd\x82\xe0\xbe\xb7\0" /* offset 2082 */
+  "\xe0\xbd\x8c\xe0\xbe\xb7\0" /* offset 2089 */
+  "\xe0\xbd\x91\xe0\xbe\xb7\0" /* offset 2096 */
+  "\xe0\xbd\x96\xe0\xbe\xb7\0" /* offset 2103 */
+  "\xe0\xbd\x9b\xe0\xbe\xb7\0" /* offset 2110 */
+  "\xe0\xbd\x80\xe0\xbe\xb5\0" /* offset 2117 */
+  "\xe0\xbd\xb1\xe0\xbd\xb2\0" /* offset 2124 */
+  "\xe0\xbd\xb1\xe0\xbd\xb4\0" /* offset 2131 */
+  "\xe0\xbe\xb2\xe0\xbe\x80\0" /* offset 2138 */
+  "\xe0\xbe\xb2\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2145 */
+  "\xe0\xbe\xb3\xe0\xbe\x80\0" /* offset 2155 */
+  "\xe0\xbe\xb3\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2162 */
+  "\xe0\xbd\xb1\xe0\xbe\x80\0" /* offset 2172 */
+  "\xe0\xbe\x92\xe0\xbe\xb7\0" /* offset 2179 */
+  "\xe0\xbe\x9c\xe0\xbe\xb7\0" /* offset 2186 */
+  "\xe0\xbe\xa1\xe0\xbe\xb7\0" /* offset 2193 */
+  "\xe0\xbe\xa6\xe0\xbe\xb7\0" /* offset 2200 */
+  "\xe0\xbe\xab\xe0\xbe\xb7\0" /* offset 2207 */
+  "\xe0\xbe\x90\xe0\xbe\xb5\0" /* offset 2214 */
+  "\xe1\x80\xa5\xe1\x80\xae\0" /* offset 2221 */
+  "\xe1\x83\x9c\0" /* offset 2228 */
+  "\xe1\xac\x85\xe1\xac\xb5\0" /* offset 2232 */
+  "\xe1\xac\x87\xe1\xac\xb5\0" /* offset 2239 */
+  "\xe1\xac\x89\xe1\xac\xb5\0" /* offset 2246 */
+  "\xe1\xac\x8b\xe1\xac\xb5\0" /* offset 2253 */
+  "\xe1\xac\x8d\xe1\xac\xb5\0" /* offset 2260 */
+  "\xe1\xac\x91\xe1\xac\xb5\0" /* offset 2267 */
+  "\xe1\xac\xba\xe1\xac\xb5\0" /* offset 2274 */
+  "\xe1\xac\xbc\xe1\xac\xb5\0" /* offset 2281 */
+  "\xe1\xac\xbe\xe1\xac\xb5\0" /* offset 2288 */
+  "\xe1\xac\xbf\xe1\xac\xb5\0" /* offset 2295 */
+  "\xe1\xad\x82\xe1\xac\xb5\0" /* offset 2302 */
+  "\x41\0" /* offset 2309 */
+  "\xc3\x86\0" /* offset 2311 */
+  "\x42\0" /* offset 2314 */
+  "\x44\0" /* offset 2316 */
+  "\x45\0" /* offset 2318 */
+  "\xc6\x8e\0" /* offset 2320 */
+  "\x47\0" /* offset 2323 */
+  "\x48\0" /* offset 2325 */
+  "\x49\0" /* offset 2327 */
+  "\x4a\0" /* offset 2329 */
+  "\x4b\0" /* offset 2331 */
+  "\x4c\0" /* offset 2333 */
+  "\x4d\0" /* offset 2335 */
+  "\x4e\0" /* offset 2337 */
+  "\x4f\0" /* offset 2339 */
+  "\xc8\xa2\0" /* offset 2341 */
+  "\x50\0" /* offset 2344 */
+  "\x52\0" /* offset 2346 */
+  "\x54\0" /* offset 2348 */
+  "\x55\0" /* offset 2350 */
+  "\x57\0" /* offset 2352 */
+  "\xc9\x90\0" /* offset 2354 */
+  "\xc9\x91\0" /* offset 2357 */
+  "\xe1\xb4\x82\0" /* offset 2360 */
+  "\x62\0" /* offset 2364 */
+  "\x64\0" /* offset 2366 */
+  "\x65\0" /* offset 2368 */
+  "\xc9\x99\0" /* offset 2370 */
+  "\xc9\x9b\0" /* offset 2373 */
+  "\xc9\x9c\0" /* offset 2376 */
+  "\x67\0" /* offset 2379 */
+  "\x6b\0" /* offset 2381 */
+  "\x6d\0" /* offset 2383 */
+  "\xc5\x8b\0" /* offset 2385 */
+  "\xc9\x94\0" /* offset 2388 */
+  "\xe1\xb4\x96\0" /* offset 2391 */
+  "\xe1\xb4\x97\0" /* offset 2395 */
+  "\x70\0" /* offset 2399 */
+  "\x74\0" /* offset 2401 */
+  "\x75\0" /* offset 2403 */
+  "\xe1\xb4\x9d\0" /* offset 2405 */
+  "\xc9\xaf\0" /* offset 2409 */
+  "\x76\0" /* offset 2412 */
+  "\xe1\xb4\xa5\0" /* offset 2414 */
+  "\xce\xb3\0" /* offset 2418 */
+  "\xce\xb4\0" /* offset 2421 */
+  "\xcf\x87\0" /* offset 2424 */
+  "\x69\0" /* offset 2427 */
+  "\xd0\xbd\0" /* offset 2429 */
+  "\xc9\x92\0" /* offset 2432 */
+  "\x63\0" /* offset 2435 */
+  "\xc9\x95\0" /* offset 2437 */
+  "\xc3\xb0\0" /* offset 2440 */
+  "\x66\0" /* offset 2443 */
+  "\xc9\x9f\0" /* offset 2445 */
+  "\xc9\xa1\0" /* offset 2448 */
+  "\xc9\xa5\0" /* offset 2451 */
+  "\xc9\xa8\0" /* offset 2454 */
+  "\xc9\xa9\0" /* offset 2457 */
+  "\xc9\xaa\0" /* offset 2460 */
+  "\xe1\xb5\xbb\0" /* offset 2463 */
+  "\xca\x9d\0" /* offset 2467 */
+  "\xc9\xad\0" /* offset 2470 */
+  "\xe1\xb6\x85\0" /* offset 2473 */
+  "\xca\x9f\0" /* offset 2477 */
+  "\xc9\xb1\0" /* offset 2480 */
+  "\xc9\xb0\0" /* offset 2483 */
+  "\xc9\xb2\0" /* offset 2486 */
+  "\xc9\xb3\0" /* offset 2489 */
+  "\xc9\xb4\0" /* offset 2492 */
+  "\xc9\xb5\0" /* offset 2495 */
+  "\xc9\xb8\0" /* offset 2498 */
+  "\xca\x82\0" /* offset 2501 */
+  "\xca\x83\0" /* offset 2504 */
+  "\xc6\xab\0" /* offset 2507 */
+  "\xca\x89\0" /* offset 2510 */
+  "\xca\x8a\0" /* offset 2513 */
+  "\xe1\xb4\x9c\0" /* offset 2516 */
+  "\xca\x8b\0" /* offset 2520 */
+  "\xca\x8c\0" /* offset 2523 */
+  "\x7a\0" /* offset 2526 */
+  "\xca\x90\0" /* offset 2528 */
+  "\xca\x91\0" /* offset 2531 */
+  "\xca\x92\0" /* offset 2534 */
+  "\x41\xcc\xa5\0" /* offset 2537 */
+  "\x61\xcc\xa5\0" /* offset 2541 */
+  "\x42\xcc\x87\0" /* offset 2545 */
+  "\x62\xcc\x87\0" /* offset 2549 */
+  "\x42\xcc\xa3\0" /* offset 2553 */
+  "\x62\xcc\xa3\0" /* offset 2557 */
+  "\x42\xcc\xb1\0" /* offset 2561 */
+  "\x62\xcc\xb1\0" /* offset 2565 */
+  "\x43\xcc\xa7\xcc\x81\0" /* offset 2569 */
+  "\x63\xcc\xa7\xcc\x81\0" /* offset 2575 */
+  "\x44\xcc\x87\0" /* offset 2581 */
+  "\x64\xcc\x87\0" /* offset 2585 */
+  "\x44\xcc\xa3\0" /* offset 2589 */
+  "\x64\xcc\xa3\0" /* offset 2593 */
+  "\x44\xcc\xb1\0" /* offset 2597 */
+  "\x64\xcc\xb1\0" /* offset 2601 */
+  "\x44\xcc\xa7\0" /* offset 2605 */
+  "\x64\xcc\xa7\0" /* offset 2609 */
+  "\x44\xcc\xad\0" /* offset 2613 */
+  "\x64\xcc\xad\0" /* offset 2617 */
+  "\x45\xcc\x84\xcc\x80\0" /* offset 2621 */
+  "\x65\xcc\x84\xcc\x80\0" /* offset 2627 */
+  "\x45\xcc\x84\xcc\x81\0" /* offset 2633 */
+  "\x65\xcc\x84\xcc\x81\0" /* offset 2639 */
+  "\x45\xcc\xad\0" /* offset 2645 */
+  "\x65\xcc\xad\0" /* offset 2649 */
+  "\x45\xcc\xb0\0" /* offset 2653 */
+  "\x65\xcc\xb0\0" /* offset 2657 */
+  "\x45\xcc\xa7\xcc\x86\0" /* offset 2661 */
+  "\x65\xcc\xa7\xcc\x86\0" /* offset 2667 */
+  "\x46\xcc\x87\0" /* offset 2673 */
+  "\x66\xcc\x87\0" /* offset 2677 */
+  "\x47\xcc\x84\0" /* offset 2681 */
+  "\x67\xcc\x84\0" /* offset 2685 */
+  "\x48\xcc\x87\0" /* offset 2689 */
+  "\x68\xcc\x87\0" /* offset 2693 */
+  "\x48\xcc\xa3\0" /* offset 2697 */
+  "\x68\xcc\xa3\0" /* offset 2701 */
+  "\x48\xcc\x88\0" /* offset 2705 */
+  "\x68\xcc\x88\0" /* offset 2709 */
+  "\x48\xcc\xa7\0" /* offset 2713 */
+  "\x68\xcc\xa7\0" /* offset 2717 */
+  "\x48\xcc\xae\0" /* offset 2721 */
+  "\x68\xcc\xae\0" /* offset 2725 */
+  "\x49\xcc\xb0\0" /* offset 2729 */
+  "\x69\xcc\xb0\0" /* offset 2733 */
+  "\x49\xcc\x88\xcc\x81\0" /* offset 2737 */
+  "\x69\xcc\x88\xcc\x81\0" /* offset 2743 */
+  "\x4b\xcc\x81\0" /* offset 2749 */
+  "\x6b\xcc\x81\0" /* offset 2753 */
+  "\x4b\xcc\xa3\0" /* offset 2757 */
+  "\x6b\xcc\xa3\0" /* offset 2761 */
+  "\x4b\xcc\xb1\0" /* offset 2765 */
+  "\x6b\xcc\xb1\0" /* offset 2769 */
+  "\x4c\xcc\xa3\0" /* offset 2773 */
+  "\x6c\xcc\xa3\0" /* offset 2777 */
+  "\x4c\xcc\xa3\xcc\x84\0" /* offset 2781 */
+  "\x6c\xcc\xa3\xcc\x84\0" /* offset 2787 */
+  "\x4c\xcc\xb1\0" /* offset 2793 */
+  "\x6c\xcc\xb1\0" /* offset 2797 */
+  "\x4c\xcc\xad\0" /* offset 2801 */
+  "\x6c\xcc\xad\0" /* offset 2805 */
+  "\x4d\xcc\x81\0" /* offset 2809 */
+  "\x6d\xcc\x81\0" /* offset 2813 */
+  "\x4d\xcc\x87\0" /* offset 2817 */
+  "\x6d\xcc\x87\0" /* offset 2821 */
+  "\x4d\xcc\xa3\0" /* offset 2825 */
+  "\x6d\xcc\xa3\0" /* offset 2829 */
+  "\x4e\xcc\x87\0" /* offset 2833 */
+  "\x6e\xcc\x87\0" /* offset 2837 */
+  "\x4e\xcc\xa3\0" /* offset 2841 */
+  "\x6e\xcc\xa3\0" /* offset 2845 */
+  "\x4e\xcc\xb1\0" /* offset 2849 */
+  "\x6e\xcc\xb1\0" /* offset 2853 */
+  "\x4e\xcc\xad\0" /* offset 2857 */
+  "\x6e\xcc\xad\0" /* offset 2861 */
+  "\x4f\xcc\x83\xcc\x81\0" /* offset 2865 */
+  "\x6f\xcc\x83\xcc\x81\0" /* offset 2871 */
+  "\x4f\xcc\x83\xcc\x88\0" /* offset 2877 */
+  "\x6f\xcc\x83\xcc\x88\0" /* offset 2883 */
+  "\x4f\xcc\x84\xcc\x80\0" /* offset 2889 */
+  "\x6f\xcc\x84\xcc\x80\0" /* offset 2895 */
+  "\x4f\xcc\x84\xcc\x81\0" /* offset 2901 */
+  "\x6f\xcc\x84\xcc\x81\0" /* offset 2907 */
+  "\x50\xcc\x81\0" /* offset 2913 */
+  "\x70\xcc\x81\0" /* offset 2917 */
+  "\x50\xcc\x87\0" /* offset 2921 */
+  "\x70\xcc\x87\0" /* offset 2925 */
+  "\x52\xcc\x87\0" /* offset 2929 */
+  "\x72\xcc\x87\0" /* offset 2933 */
+  "\x52\xcc\xa3\0" /* offset 2937 */
+  "\x72\xcc\xa3\0" /* offset 2941 */
+  "\x52\xcc\xa3\xcc\x84\0" /* offset 2945 */
+  "\x72\xcc\xa3\xcc\x84\0" /* offset 2951 */
+  "\x52\xcc\xb1\0" /* offset 2957 */
+  "\x72\xcc\xb1\0" /* offset 2961 */
+  "\x53\xcc\x87\0" /* offset 2965 */
+  "\x73\xcc\x87\0" /* offset 2969 */
+  "\x53\xcc\xa3\0" /* offset 2973 */
+  "\x73\xcc\xa3\0" /* offset 2977 */
+  "\x53\xcc\x81\xcc\x87\0" /* offset 2981 */
+  "\x73\xcc\x81\xcc\x87\0" /* offset 2987 */
+  "\x53\xcc\x8c\xcc\x87\0" /* offset 2993 */
+  "\x73\xcc\x8c\xcc\x87\0" /* offset 2999 */
+  "\x53\xcc\xa3\xcc\x87\0" /* offset 3005 */
+  "\x73\xcc\xa3\xcc\x87\0" /* offset 3011 */
+  "\x54\xcc\x87\0" /* offset 3017 */
+  "\x74\xcc\x87\0" /* offset 3021 */
+  "\x54\xcc\xa3\0" /* offset 3025 */
+  "\x74\xcc\xa3\0" /* offset 3029 */
+  "\x54\xcc\xb1\0" /* offset 3033 */
+  "\x74\xcc\xb1\0" /* offset 3037 */
+  "\x54\xcc\xad\0" /* offset 3041 */
+  "\x74\xcc\xad\0" /* offset 3045 */
+  "\x55\xcc\xa4\0" /* offset 3049 */
+  "\x75\xcc\xa4\0" /* offset 3053 */
+  "\x55\xcc\xb0\0" /* offset 3057 */
+  "\x75\xcc\xb0\0" /* offset 3061 */
+  "\x55\xcc\xad\0" /* offset 3065 */
+  "\x75\xcc\xad\0" /* offset 3069 */
+  "\x55\xcc\x83\xcc\x81\0" /* offset 3073 */
+  "\x75\xcc\x83\xcc\x81\0" /* offset 3079 */
+  "\x55\xcc\x84\xcc\x88\0" /* offset 3085 */
+  "\x75\xcc\x84\xcc\x88\0" /* offset 3091 */
+  "\x56\xcc\x83\0" /* offset 3097 */
+  "\x76\xcc\x83\0" /* offset 3101 */
+  "\x56\xcc\xa3\0" /* offset 3105 */
+  "\x76\xcc\xa3\0" /* offset 3109 */
+  "\x57\xcc\x80\0" /* offset 3113 */
+  "\x77\xcc\x80\0" /* offset 3117 */
+  "\x57\xcc\x81\0" /* offset 3121 */
+  "\x77\xcc\x81\0" /* offset 3125 */
+  "\x57\xcc\x88\0" /* offset 3129 */
+  "\x77\xcc\x88\0" /* offset 3133 */
+  "\x57\xcc\x87\0" /* offset 3137 */
+  "\x77\xcc\x87\0" /* offset 3141 */
+  "\x57\xcc\xa3\0" /* offset 3145 */
+  "\x77\xcc\xa3\0" /* offset 3149 */
+  "\x58\xcc\x87\0" /* offset 3153 */
+  "\x78\xcc\x87\0" /* offset 3157 */
+  "\x58\xcc\x88\0" /* offset 3161 */
+  "\x78\xcc\x88\0" /* offset 3165 */
+  "\x59\xcc\x87\0" /* offset 3169 */
+  "\x79\xcc\x87\0" /* offset 3173 */
+  "\x5a\xcc\x82\0" /* offset 3177 */
+  "\x7a\xcc\x82\0" /* offset 3181 */
+  "\x5a\xcc\xa3\0" /* offset 3185 */
+  "\x7a\xcc\xa3\0" /* offset 3189 */
+  "\x5a\xcc\xb1\0" /* offset 3193 */
+  "\x7a\xcc\xb1\0" /* offset 3197 */
+  "\x68\xcc\xb1\0" /* offset 3201 */
+  "\x74\xcc\x88\0" /* offset 3205 */
+  "\x77\xcc\x8a\0" /* offset 3209 */
+  "\x79\xcc\x8a\0" /* offset 3213 */
+  "\x61\xca\xbe\0" /* offset 3217 */
+  "\xc5\xbf\xcc\x87\0" /* offset 3221 */
+  "\x41\xcc\xa3\0" /* offset 3226 */
+  "\x61\xcc\xa3\0" /* offset 3230 */
+  "\x41\xcc\x89\0" /* offset 3234 */
+  "\x61\xcc\x89\0" /* offset 3238 */
+  "\x41\xcc\x82\xcc\x81\0" /* offset 3242 */
+  "\x61\xcc\x82\xcc\x81\0" /* offset 3248 */
+  "\x41\xcc\x82\xcc\x80\0" /* offset 3254 */
+  "\x61\xcc\x82\xcc\x80\0" /* offset 3260 */
+  "\x41\xcc\x82\xcc\x89\0" /* offset 3266 */
+  "\x61\xcc\x82\xcc\x89\0" /* offset 3272 */
+  "\x41\xcc\x82\xcc\x83\0" /* offset 3278 */
+  "\x61\xcc\x82\xcc\x83\0" /* offset 3284 */
+  "\x41\xcc\xa3\xcc\x82\0" /* offset 3290 */
+  "\x61\xcc\xa3\xcc\x82\0" /* offset 3296 */
+  "\x41\xcc\x86\xcc\x81\0" /* offset 3302 */
+  "\x61\xcc\x86\xcc\x81\0" /* offset 3308 */
+  "\x41\xcc\x86\xcc\x80\0" /* offset 3314 */
+  "\x61\xcc\x86\xcc\x80\0" /* offset 3320 */
+  "\x41\xcc\x86\xcc\x89\0" /* offset 3326 */
+  "\x61\xcc\x86\xcc\x89\0" /* offset 3332 */
+  "\x41\xcc\x86\xcc\x83\0" /* offset 3338 */
+  "\x61\xcc\x86\xcc\x83\0" /* offset 3344 */
+  "\x41\xcc\xa3\xcc\x86\0" /* offset 3350 */
+  "\x61\xcc\xa3\xcc\x86\0" /* offset 3356 */
+  "\x45\xcc\xa3\0" /* offset 3362 */
+  "\x65\xcc\xa3\0" /* offset 3366 */
+  "\x45\xcc\x89\0" /* offset 3370 */
+  "\x65\xcc\x89\0" /* offset 3374 */
+  "\x45\xcc\x83\0" /* offset 3378 */
+  "\x65\xcc\x83\0" /* offset 3382 */
+  "\x45\xcc\x82\xcc\x81\0" /* offset 3386 */
+  "\x65\xcc\x82\xcc\x81\0" /* offset 3392 */
+  "\x45\xcc\x82\xcc\x80\0" /* offset 3398 */
+  "\x65\xcc\x82\xcc\x80\0" /* offset 3404 */
+  "\x45\xcc\x82\xcc\x89\0" /* offset 3410 */
+  "\x65\xcc\x82\xcc\x89\0" /* offset 3416 */
+  "\x45\xcc\x82\xcc\x83\0" /* offset 3422 */
+  "\x65\xcc\x82\xcc\x83\0" /* offset 3428 */
+  "\x45\xcc\xa3\xcc\x82\0" /* offset 3434 */
+  "\x65\xcc\xa3\xcc\x82\0" /* offset 3440 */
+  "\x49\xcc\x89\0" /* offset 3446 */
+  "\x69\xcc\x89\0" /* offset 3450 */
+  "\x49\xcc\xa3\0" /* offset 3454 */
+  "\x69\xcc\xa3\0" /* offset 3458 */
+  "\x4f\xcc\xa3\0" /* offset 3462 */
+  "\x6f\xcc\xa3\0" /* offset 3466 */
+  "\x4f\xcc\x89\0" /* offset 3470 */
+  "\x6f\xcc\x89\0" /* offset 3474 */
+  "\x4f\xcc\x82\xcc\x81\0" /* offset 3478 */
+  "\x6f\xcc\x82\xcc\x81\0" /* offset 3484 */
+  "\x4f\xcc\x82\xcc\x80\0" /* offset 3490 */
+  "\x6f\xcc\x82\xcc\x80\0" /* offset 3496 */
+  "\x4f\xcc\x82\xcc\x89\0" /* offset 3502 */
+  "\x6f\xcc\x82\xcc\x89\0" /* offset 3508 */
+  "\x4f\xcc\x82\xcc\x83\0" /* offset 3514 */
+  "\x6f\xcc\x82\xcc\x83\0" /* offset 3520 */
+  "\x4f\xcc\xa3\xcc\x82\0" /* offset 3526 */
+  "\x6f\xcc\xa3\xcc\x82\0" /* offset 3532 */
+  "\x4f\xcc\x9b\xcc\x81\0" /* offset 3538 */
+  "\x6f\xcc\x9b\xcc\x81\0" /* offset 3544 */
+  "\x4f\xcc\x9b\xcc\x80\0" /* offset 3550 */
+  "\x6f\xcc\x9b\xcc\x80\0" /* offset 3556 */
+  "\x4f\xcc\x9b\xcc\x89\0" /* offset 3562 */
+  "\x6f\xcc\x9b\xcc\x89\0" /* offset 3568 */
+  "\x4f\xcc\x9b\xcc\x83\0" /* offset 3574 */
+  "\x6f\xcc\x9b\xcc\x83\0" /* offset 3580 */
+  "\x4f\xcc\x9b\xcc\xa3\0" /* offset 3586 */
+  "\x6f\xcc\x9b\xcc\xa3\0" /* offset 3592 */
+  "\x55\xcc\xa3\0" /* offset 3598 */
+  "\x75\xcc\xa3\0" /* offset 3602 */
+  "\x55\xcc\x89\0" /* offset 3606 */
+  "\x75\xcc\x89\0" /* offset 3610 */
+  "\x55\xcc\x9b\xcc\x81\0" /* offset 3614 */
+  "\x75\xcc\x9b\xcc\x81\0" /* offset 3620 */
+  "\x55\xcc\x9b\xcc\x80\0" /* offset 3626 */
+  "\x75\xcc\x9b\xcc\x80\0" /* offset 3632 */
+  "\x55\xcc\x9b\xcc\x89\0" /* offset 3638 */
+  "\x75\xcc\x9b\xcc\x89\0" /* offset 3644 */
+  "\x55\xcc\x9b\xcc\x83\0" /* offset 3650 */
+  "\x75\xcc\x9b\xcc\x83\0" /* offset 3656 */
+  "\x55\xcc\x9b\xcc\xa3\0" /* offset 3662 */
+  "\x75\xcc\x9b\xcc\xa3\0" /* offset 3668 */
+  "\x59\xcc\x80\0" /* offset 3674 */
+  "\x79\xcc\x80\0" /* offset 3678 */
+  "\x59\xcc\xa3\0" /* offset 3682 */
+  "\x79\xcc\xa3\0" /* offset 3686 */
+  "\x59\xcc\x89\0" /* offset 3690 */
+  "\x79\xcc\x89\0" /* offset 3694 */
+  "\x59\xcc\x83\0" /* offset 3698 */
+  "\x79\xcc\x83\0" /* offset 3702 */
+  "\xce\xb1\xcc\x93\0" /* offset 3706 */
+  "\xce\xb1\xcc\x94\0" /* offset 3711 */
+  "\xce\xb1\xcc\x93\xcc\x80\0" /* offset 3716 */
+  "\xce\xb1\xcc\x94\xcc\x80\0" /* offset 3723 */
+  "\xce\xb1\xcc\x93\xcc\x81\0" /* offset 3730 */
+  "\xce\xb1\xcc\x94\xcc\x81\0" /* offset 3737 */
+  "\xce\xb1\xcc\x93\xcd\x82\0" /* offset 3744 */
+  "\xce\xb1\xcc\x94\xcd\x82\0" /* offset 3751 */
+  "\xce\x91\xcc\x93\0" /* offset 3758 */
+  "\xce\x91\xcc\x94\0" /* offset 3763 */
+  "\xce\x91\xcc\x93\xcc\x80\0" /* offset 3768 */
+  "\xce\x91\xcc\x94\xcc\x80\0" /* offset 3775 */
+  "\xce\x91\xcc\x93\xcc\x81\0" /* offset 3782 */
+  "\xce\x91\xcc\x94\xcc\x81\0" /* offset 3789 */
+  "\xce\x91\xcc\x93\xcd\x82\0" /* offset 3796 */
+  "\xce\x91\xcc\x94\xcd\x82\0" /* offset 3803 */
+  "\xce\xb5\xcc\x93\0" /* offset 3810 */
+  "\xce\xb5\xcc\x94\0" /* offset 3815 */
+  "\xce\xb5\xcc\x93\xcc\x80\0" /* offset 3820 */
+  "\xce\xb5\xcc\x94\xcc\x80\0" /* offset 3827 */
+  "\xce\xb5\xcc\x93\xcc\x81\0" /* offset 3834 */
+  "\xce\xb5\xcc\x94\xcc\x81\0" /* offset 3841 */
+  "\xce\x95\xcc\x93\0" /* offset 3848 */
+  "\xce\x95\xcc\x94\0" /* offset 3853 */
+  "\xce\x95\xcc\x93\xcc\x80\0" /* offset 3858 */
+  "\xce\x95\xcc\x94\xcc\x80\0" /* offset 3865 */
+  "\xce\x95\xcc\x93\xcc\x81\0" /* offset 3872 */
+  "\xce\x95\xcc\x94\xcc\x81\0" /* offset 3879 */
+  "\xce\xb7\xcc\x93\0" /* offset 3886 */
+  "\xce\xb7\xcc\x94\0" /* offset 3891 */
+  "\xce\xb7\xcc\x93\xcc\x80\0" /* offset 3896 */
+  "\xce\xb7\xcc\x94\xcc\x80\0" /* offset 3903 */
+  "\xce\xb7\xcc\x93\xcc\x81\0" /* offset 3910 */
+  "\xce\xb7\xcc\x94\xcc\x81\0" /* offset 3917 */
+  "\xce\xb7\xcc\x93\xcd\x82\0" /* offset 3924 */
+  "\xce\xb7\xcc\x94\xcd\x82\0" /* offset 3931 */
+  "\xce\x97\xcc\x93\0" /* offset 3938 */
+  "\xce\x97\xcc\x94\0" /* offset 3943 */
+  "\xce\x97\xcc\x93\xcc\x80\0" /* offset 3948 */
+  "\xce\x97\xcc\x94\xcc\x80\0" /* offset 3955 */
+  "\xce\x97\xcc\x93\xcc\x81\0" /* offset 3962 */
+  "\xce\x97\xcc\x94\xcc\x81\0" /* offset 3969 */
+  "\xce\x97\xcc\x93\xcd\x82\0" /* offset 3976 */
+  "\xce\x97\xcc\x94\xcd\x82\0" /* offset 3983 */
+  "\xce\xb9\xcc\x93\0" /* offset 3990 */
+  "\xce\xb9\xcc\x94\0" /* offset 3995 */
+  "\xce\xb9\xcc\x93\xcc\x80\0" /* offset 4000 */
+  "\xce\xb9\xcc\x94\xcc\x80\0" /* offset 4007 */
+  "\xce\xb9\xcc\x93\xcc\x81\0" /* offset 4014 */
+  "\xce\xb9\xcc\x94\xcc\x81\0" /* offset 4021 */
+  "\xce\xb9\xcc\x93\xcd\x82\0" /* offset 4028 */
+  "\xce\xb9\xcc\x94\xcd\x82\0" /* offset 4035 */
+  "\xce\x99\xcc\x93\0" /* offset 4042 */
+  "\xce\x99\xcc\x94\0" /* offset 4047 */
+  "\xce\x99\xcc\x93\xcc\x80\0" /* offset 4052 */
+  "\xce\x99\xcc\x94\xcc\x80\0" /* offset 4059 */
+  "\xce\x99\xcc\x93\xcc\x81\0" /* offset 4066 */
+  "\xce\x99\xcc\x94\xcc\x81\0" /* offset 4073 */
+  "\xce\x99\xcc\x93\xcd\x82\0" /* offset 4080 */
+  "\xce\x99\xcc\x94\xcd\x82\0" /* offset 4087 */
+  "\xce\xbf\xcc\x93\0" /* offset 4094 */
+  "\xce\xbf\xcc\x94\0" /* offset 4099 */
+  "\xce\xbf\xcc\x93\xcc\x80\0" /* offset 4104 */
+  "\xce\xbf\xcc\x94\xcc\x80\0" /* offset 4111 */
+  "\xce\xbf\xcc\x93\xcc\x81\0" /* offset 4118 */
+  "\xce\xbf\xcc\x94\xcc\x81\0" /* offset 4125 */
+  "\xce\x9f\xcc\x93\0" /* offset 4132 */
+  "\xce\x9f\xcc\x94\0" /* offset 4137 */
+  "\xce\x9f\xcc\x93\xcc\x80\0" /* offset 4142 */
+  "\xce\x9f\xcc\x94\xcc\x80\0" /* offset 4149 */
+  "\xce\x9f\xcc\x93\xcc\x81\0" /* offset 4156 */
+  "\xce\x9f\xcc\x94\xcc\x81\0" /* offset 4163 */
+  "\xcf\x85\xcc\x93\0" /* offset 4170 */
+  "\xcf\x85\xcc\x94\0" /* offset 4175 */
+  "\xcf\x85\xcc\x93\xcc\x80\0" /* offset 4180 */
+  "\xcf\x85\xcc\x94\xcc\x80\0" /* offset 4187 */
+  "\xcf\x85\xcc\x93\xcc\x81\0" /* offset 4194 */
+  "\xcf\x85\xcc\x94\xcc\x81\0" /* offset 4201 */
+  "\xcf\x85\xcc\x93\xcd\x82\0" /* offset 4208 */
+  "\xcf\x85\xcc\x94\xcd\x82\0" /* offset 4215 */
+  "\xce\xa5\xcc\x94\0" /* offset 4222 */
+  "\xce\xa5\xcc\x94\xcc\x80\0" /* offset 4227 */
+  "\xce\xa5\xcc\x94\xcc\x81\0" /* offset 4234 */
+  "\xce\xa5\xcc\x94\xcd\x82\0" /* offset 4241 */
+  "\xcf\x89\xcc\x93\0" /* offset 4248 */
+  "\xcf\x89\xcc\x94\0" /* offset 4253 */
+  "\xcf\x89\xcc\x93\xcc\x80\0" /* offset 4258 */
+  "\xcf\x89\xcc\x94\xcc\x80\0" /* offset 4265 */
+  "\xcf\x89\xcc\x93\xcc\x81\0" /* offset 4272 */
+  "\xcf\x89\xcc\x94\xcc\x81\0" /* offset 4279 */
+  "\xcf\x89\xcc\x93\xcd\x82\0" /* offset 4286 */
+  "\xcf\x89\xcc\x94\xcd\x82\0" /* offset 4293 */
+  "\xce\xa9\xcc\x93\0" /* offset 4300 */
+  "\xce\xa9\xcc\x94\0" /* offset 4305 */
+  "\xce\xa9\xcc\x93\xcc\x80\0" /* offset 4310 */
+  "\xce\xa9\xcc\x94\xcc\x80\0" /* offset 4317 */
+  "\xce\xa9\xcc\x93\xcc\x81\0" /* offset 4324 */
+  "\xce\xa9\xcc\x94\xcc\x81\0" /* offset 4331 */
+  "\xce\xa9\xcc\x93\xcd\x82\0" /* offset 4338 */
+  "\xce\xa9\xcc\x94\xcd\x82\0" /* offset 4345 */
+  "\xce\xb1\xcc\x80\0" /* offset 4352 */
+  "\xce\xb5\xcc\x80\0" /* offset 4357 */
+  "\xce\xb7\xcc\x80\0" /* offset 4362 */
+  "\xce\xb9\xcc\x80\0" /* offset 4367 */
+  "\xce\xbf\xcc\x80\0" /* offset 4372 */
+  "\xcf\x85\xcc\x80\0" /* offset 4377 */
+  "\xcf\x89\xcc\x80\0" /* offset 4382 */
+  "\xce\xb1\xcc\x93\xcd\x85\0" /* offset 4387 */
+  "\xce\xb1\xcc\x94\xcd\x85\0" /* offset 4394 */
+  "\xce\xb1\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4401 */
+  "\xce\xb1\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4410 */
+  "\xce\xb1\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4419 */
+  "\xce\xb1\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4428 */
+  "\xce\xb1\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4437 */
+  "\xce\xb1\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4446 */
+  "\xce\x91\xcc\x93\xcd\x85\0" /* offset 4455 */
+  "\xce\x91\xcc\x94\xcd\x85\0" /* offset 4462 */
+  "\xce\x91\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4469 */
+  "\xce\x91\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4478 */
+  "\xce\x91\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4487 */
+  "\xce\x91\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4496 */
+  "\xce\x91\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4505 */
+  "\xce\x91\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4514 */
+  "\xce\xb7\xcc\x93\xcd\x85\0" /* offset 4523 */
+  "\xce\xb7\xcc\x94\xcd\x85\0" /* offset 4530 */
+  "\xce\xb7\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4537 */
+  "\xce\xb7\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4546 */
+  "\xce\xb7\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4555 */
+  "\xce\xb7\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4564 */
+  "\xce\xb7\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4573 */
+  "\xce\xb7\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4582 */
+  "\xce\x97\xcc\x93\xcd\x85\0" /* offset 4591 */
+  "\xce\x97\xcc\x94\xcd\x85\0" /* offset 4598 */
+  "\xce\x97\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4605 */
+  "\xce\x97\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4614 */
+  "\xce\x97\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4623 */
+  "\xce\x97\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4632 */
+  "\xce\x97\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4641 */
+  "\xce\x97\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4650 */
+  "\xcf\x89\xcc\x93\xcd\x85\0" /* offset 4659 */
+  "\xcf\x89\xcc\x94\xcd\x85\0" /* offset 4666 */
+  "\xcf\x89\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4673 */
+  "\xcf\x89\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4682 */
+  "\xcf\x89\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4691 */
+  "\xcf\x89\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4700 */
+  "\xcf\x89\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4709 */
+  "\xcf\x89\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4718 */
+  "\xce\xa9\xcc\x93\xcd\x85\0" /* offset 4727 */
+  "\xce\xa9\xcc\x94\xcd\x85\0" /* offset 4734 */
+  "\xce\xa9\xcc\x93\xcc\x80\xcd\x85\0" /* offset 4741 */
+  "\xce\xa9\xcc\x94\xcc\x80\xcd\x85\0" /* offset 4750 */
+  "\xce\xa9\xcc\x93\xcc\x81\xcd\x85\0" /* offset 4759 */
+  "\xce\xa9\xcc\x94\xcc\x81\xcd\x85\0" /* offset 4768 */
+  "\xce\xa9\xcc\x93\xcd\x82\xcd\x85\0" /* offset 4777 */
+  "\xce\xa9\xcc\x94\xcd\x82\xcd\x85\0" /* offset 4786 */
+  "\xce\xb1\xcc\x86\0" /* offset 4795 */
+  "\xce\xb1\xcc\x84\0" /* offset 4800 */
+  "\xce\xb1\xcc\x80\xcd\x85\0" /* offset 4805 */
+  "\xce\xb1\xcd\x85\0" /* offset 4812 */
+  "\xce\xb1\xcc\x81\xcd\x85\0" /* offset 4817 */
+  "\xce\xb1\xcd\x82\0" /* offset 4824 */
+  "\xce\xb1\xcd\x82\xcd\x85\0" /* offset 4829 */
+  "\xce\x91\xcc\x86\0" /* offset 4836 */
+  "\xce\x91\xcc\x84\0" /* offset 4841 */
+  "\xce\x91\xcc\x80\0" /* offset 4846 */
+  "\xce\x91\xcd\x85\0" /* offset 4851 */
+  "\x20\xcc\x93\0" /* offset 4856 */
+  "\xce\xb9\0" /* offset 4860 */
+  "\x20\xcd\x82\0" /* offset 4863 */
+  "\xc2\xa8\xcd\x82\0" /* offset 4867 */
+  "\x20\xcc\x88\xcd\x82\0" /* offset 4872 */
+  "\xce\xb7\xcc\x80\xcd\x85\0" /* offset 4878 */
+  "\xce\xb7\xcd\x85\0" /* offset 4885 */
+  "\xce\xb7\xcc\x81\xcd\x85\0" /* offset 4890 */
+  "\xce\xb7\xcd\x82\0" /* offset 4897 */
+  "\xce\xb7\xcd\x82\xcd\x85\0" /* offset 4902 */
+  "\xce\x95\xcc\x80\0" /* offset 4909 */
+  "\xce\x97\xcc\x80\0" /* offset 4914 */
+  "\xce\x97\xcd\x85\0" /* offset 4919 */
+  "\xe1\xbe\xbf\xcc\x80\0" /* offset 4924 */
+  "\x20\xcc\x93\xcc\x80\0" /* offset 4930 */
+  "\xe1\xbe\xbf\xcc\x81\0" /* offset 4936 */
+  "\x20\xcc\x93\xcc\x81\0" /* offset 4942 */
+  "\xe1\xbe\xbf\xcd\x82\0" /* offset 4948 */
+  "\x20\xcc\x93\xcd\x82\0" /* offset 4954 */
+  "\xce\xb9\xcc\x86\0" /* offset 4960 */
+  "\xce\xb9\xcc\x84\0" /* offset 4965 */
+  "\xce\xb9\xcc\x88\xcc\x80\0" /* offset 4970 */
+  "\xce\xb9\xcd\x82\0" /* offset 4977 */
+  "\xce\xb9\xcc\x88\xcd\x82\0" /* offset 4982 */
+  "\xce\x99\xcc\x86\0" /* offset 4989 */
+  "\xce\x99\xcc\x84\0" /* offset 4994 */
+  "\xce\x99\xcc\x80\0" /* offset 4999 */
+  "\xe1\xbf\xbe\xcc\x80\0" /* offset 5004 */
+  "\x20\xcc\x94\xcc\x80\0" /* offset 5010 */
+  "\xe1\xbf\xbe\xcc\x81\0" /* offset 5016 */
+  "\x20\xcc\x94\xcc\x81\0" /* offset 5022 */
+  "\xe1\xbf\xbe\xcd\x82\0" /* offset 5028 */
+  "\x20\xcc\x94\xcd\x82\0" /* offset 5034 */
+  "\xcf\x85\xcc\x86\0" /* offset 5040 */
+  "\xcf\x85\xcc\x84\0" /* offset 5045 */
+  "\xcf\x85\xcc\x88\xcc\x80\0" /* offset 5050 */
+  "\xcf\x81\xcc\x93\0" /* offset 5057 */
+  "\xcf\x81\xcc\x94\0" /* offset 5062 */
+  "\xcf\x85\xcd\x82\0" /* offset 5067 */
+  "\xcf\x85\xcc\x88\xcd\x82\0" /* offset 5072 */
+  "\xce\xa5\xcc\x86\0" /* offset 5079 */
+  "\xce\xa5\xcc\x84\0" /* offset 5084 */
+  "\xce\xa5\xcc\x80\0" /* offset 5089 */
+  "\xce\xa1\xcc\x94\0" /* offset 5094 */
+  "\xc2\xa8\xcc\x80\0" /* offset 5099 */
+  "\x20\xcc\x88\xcc\x80\0" /* offset 5104 */
+  "\x60\0" /* offset 5110 */
+  "\xcf\x89\xcc\x80\xcd\x85\0" /* offset 5112 */
+  "\xcf\x89\xcd\x85\0" /* offset 5119 */
+  "\xcf\x89\xcc\x81\xcd\x85\0" /* offset 5124 */
+  "\xcf\x89\xcd\x82\0" /* offset 5131 */
+  "\xcf\x89\xcd\x82\xcd\x85\0" /* offset 5136 */
+  "\xce\x9f\xcc\x80\0" /* offset 5143 */
+  "\xce\xa9\xcc\x80\0" /* offset 5148 */
+  "\xce\xa9\xcd\x85\0" /* offset 5153 */
+  "\xc2\xb4\0" /* offset 5158 */
+  "\x20\xcc\x94\0" /* offset 5161 */
+  "\xe2\x80\x82\0" /* offset 5165 */
+  "\xe2\x80\x83\0" /* offset 5169 */
+  "\xe2\x80\x90\0" /* offset 5173 */
+  "\x20\xcc\xb3\0" /* offset 5177 */
+  "\x2e\0" /* offset 5181 */
+  "\x2e\x2e\0" /* offset 5183 */
+  "\x2e\x2e\x2e\0" /* offset 5186 */
+  "\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5190 */
+  "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5197 */
+  "\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 5207 */
+  "\xe2\x80\xb5\xe2\x80\xb5\xe2\x80\xb5\0" /* offset 5214 */
+  "\x21\x21\0" /* offset 5224 */
+  "\x20\xcc\x85\0" /* offset 5227 */
+  "\x3f\x3f\0" /* offset 5231 */
+  "\x3f\x21\0" /* offset 5234 */
+  "\x21\x3f\0" /* offset 5237 */
+  "\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\xe2\x80\xb2\0" /* offset 5240 */
+  "\x30\0" /* offset 5253 */
+  "\x34\0" /* offset 5255 */
+  "\x35\0" /* offset 5257 */
+  "\x36\0" /* offset 5259 */
+  "\x37\0" /* offset 5261 */
+  "\x38\0" /* offset 5263 */
+  "\x39\0" /* offset 5265 */
+  "\x2b\0" /* offset 5267 */
+  "\xe2\x88\x92\0" /* offset 5269 */
+  "\x3d\0" /* offset 5273 */
+  "\x28\0" /* offset 5275 */
+  "\x29\0" /* offset 5277 */
+  "\x6e\0" /* offset 5279 */
+  "\x52\x73\0" /* offset 5281 */
+  "\x61\x2f\x63\0" /* offset 5284 */
+  "\x61\x2f\x73\0" /* offset 5288 */
+  "\x43\0" /* offset 5292 */
+  "\xc2\xb0\x43\0" /* offset 5294 */
+  "\x63\x2f\x6f\0" /* offset 5298 */
+  "\x63\x2f\x75\0" /* offset 5302 */
+  "\xc6\x90\0" /* offset 5306 */
+  "\xc2\xb0\x46\0" /* offset 5309 */
+  "\xc4\xa7\0" /* offset 5313 */
+  "\x4e\x6f\0" /* offset 5316 */
+  "\x51\0" /* offset 5319 */
+  "\x53\x4d\0" /* offset 5321 */
+  "\x54\x45\x4c\0" /* offset 5324 */
+  "\x54\x4d\0" /* offset 5328 */
+  "\x5a\0" /* offset 5331 */
+  "\xce\xa9\0" /* offset 5333 */
+  "\x46\0" /* offset 5336 */
+  "\xd7\x90\0" /* offset 5338 */
+  "\xd7\x91\0" /* offset 5341 */
+  "\xd7\x92\0" /* offset 5344 */
+  "\xd7\x93\0" /* offset 5347 */
+  "\x46\x41\x58\0" /* offset 5350 */
+  "\xce\x93\0" /* offset 5354 */
+  "\xce\xa0\0" /* offset 5357 */
+  "\xe2\x88\x91\0" /* offset 5360 */
+  "\x31\xe2\x81\x84\x33\0" /* offset 5364 */
+  "\x32\xe2\x81\x84\x33\0" /* offset 5370 */
+  "\x31\xe2\x81\x84\x35\0" /* offset 5376 */
+  "\x32\xe2\x81\x84\x35\0" /* offset 5382 */
+  "\x33\xe2\x81\x84\x35\0" /* offset 5388 */
+  "\x34\xe2\x81\x84\x35\0" /* offset 5394 */
+  "\x31\xe2\x81\x84\x36\0" /* offset 5400 */
+  "\x35\xe2\x81\x84\x36\0" /* offset 5406 */
+  "\x31\xe2\x81\x84\x38\0" /* offset 5412 */
+  "\x33\xe2\x81\x84\x38\0" /* offset 5418 */
+  "\x35\xe2\x81\x84\x38\0" /* offset 5424 */
+  "\x37\xe2\x81\x84\x38\0" /* offset 5430 */
+  "\x31\xe2\x81\x84\0" /* offset 5436 */
+  "\x49\x49\0" /* offset 5441 */
+  "\x49\x49\x49\0" /* offset 5444 */
+  "\x49\x56\0" /* offset 5448 */
+  "\x56\0" /* offset 5451 */
+  "\x56\x49\0" /* offset 5453 */
+  "\x56\x49\x49\0" /* offset 5456 */
+  "\x56\x49\x49\x49\0" /* offset 5460 */
+  "\x49\x58\0" /* offset 5465 */
+  "\x58\0" /* offset 5468 */
+  "\x58\x49\0" /* offset 5470 */
+  "\x58\x49\x49\0" /* offset 5473 */
+  "\x69\x69\0" /* offset 5477 */
+  "\x69\x69\x69\0" /* offset 5480 */
+  "\x69\x76\0" /* offset 5484 */
+  "\x76\x69\0" /* offset 5487 */
+  "\x76\x69\x69\0" /* offset 5490 */
+  "\x76\x69\x69\x69\0" /* offset 5494 */
+  "\x69\x78\0" /* offset 5499 */
+  "\x78\x69\0" /* offset 5502 */
+  "\x78\x69\x69\0" /* offset 5505 */
+  "\xe2\x86\x90\xcc\xb8\0" /* offset 5509 */
+  "\xe2\x86\x92\xcc\xb8\0" /* offset 5515 */
+  "\xe2\x86\x94\xcc\xb8\0" /* offset 5521 */
+  "\xe2\x87\x90\xcc\xb8\0" /* offset 5527 */
+  "\xe2\x87\x94\xcc\xb8\0" /* offset 5533 */
+  "\xe2\x87\x92\xcc\xb8\0" /* offset 5539 */
+  "\xe2\x88\x83\xcc\xb8\0" /* offset 5545 */
+  "\xe2\x88\x88\xcc\xb8\0" /* offset 5551 */
+  "\xe2\x88\x8b\xcc\xb8\0" /* offset 5557 */
+  "\xe2\x88\xa3\xcc\xb8\0" /* offset 5563 */
+  "\xe2\x88\xa5\xcc\xb8\0" /* offset 5569 */
+  "\xe2\x88\xab\xe2\x88\xab\0" /* offset 5575 */
+  "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 5582 */
+  "\xe2\x88\xae\xe2\x88\xae\0" /* offset 5592 */
+  "\xe2\x88\xae\xe2\x88\xae\xe2\x88\xae\0" /* offset 5599 */
+  "\xe2\x88\xbc\xcc\xb8\0" /* offset 5609 */
+  "\xe2\x89\x83\xcc\xb8\0" /* offset 5615 */
+  "\xe2\x89\x85\xcc\xb8\0" /* offset 5621 */
+  "\xe2\x89\x88\xcc\xb8\0" /* offset 5627 */
+  "\x3d\xcc\xb8\0" /* offset 5633 */
+  "\xe2\x89\xa1\xcc\xb8\0" /* offset 5637 */
+  "\xe2\x89\x8d\xcc\xb8\0" /* offset 5643 */
+  "\x3c\xcc\xb8\0" /* offset 5649 */
+  "\x3e\xcc\xb8\0" /* offset 5653 */
+  "\xe2\x89\xa4\xcc\xb8\0" /* offset 5657 */
+  "\xe2\x89\xa5\xcc\xb8\0" /* offset 5663 */
+  "\xe2\x89\xb2\xcc\xb8\0" /* offset 5669 */
+  "\xe2\x89\xb3\xcc\xb8\0" /* offset 5675 */
+  "\xe2\x89\xb6\xcc\xb8\0" /* offset 5681 */
+  "\xe2\x89\xb7\xcc\xb8\0" /* offset 5687 */
+  "\xe2\x89\xba\xcc\xb8\0" /* offset 5693 */
+  "\xe2\x89\xbb\xcc\xb8\0" /* offset 5699 */
+  "\xe2\x8a\x82\xcc\xb8\0" /* offset 5705 */
+  "\xe2\x8a\x83\xcc\xb8\0" /* offset 5711 */
+  "\xe2\x8a\x86\xcc\xb8\0" /* offset 5717 */
+  "\xe2\x8a\x87\xcc\xb8\0" /* offset 5723 */
+  "\xe2\x8a\xa2\xcc\xb8\0" /* offset 5729 */
+  "\xe2\x8a\xa8\xcc\xb8\0" /* offset 5735 */
+  "\xe2\x8a\xa9\xcc\xb8\0" /* offset 5741 */
+  "\xe2\x8a\xab\xcc\xb8\0" /* offset 5747 */
+  "\xe2\x89\xbc\xcc\xb8\0" /* offset 5753 */
+  "\xe2\x89\xbd\xcc\xb8\0" /* offset 5759 */
+  "\xe2\x8a\x91\xcc\xb8\0" /* offset 5765 */
+  "\xe2\x8a\x92\xcc\xb8\0" /* offset 5771 */
+  "\xe2\x8a\xb2\xcc\xb8\0" /* offset 5777 */
+  "\xe2\x8a\xb3\xcc\xb8\0" /* offset 5783 */
+  "\xe2\x8a\xb4\xcc\xb8\0" /* offset 5789 */
+  "\xe2\x8a\xb5\xcc\xb8\0" /* offset 5795 */
+  "\xe3\x80\x88\0" /* offset 5801 */
+  "\xe3\x80\x89\0" /* offset 5805 */
+  "\x31\x30\0" /* offset 5809 */
+  "\x31\x31\0" /* offset 5812 */
+  "\x31\x32\0" /* offset 5815 */
+  "\x31\x33\0" /* offset 5818 */
+  "\x31\x34\0" /* offset 5821 */
+  "\x31\x35\0" /* offset 5824 */
+  "\x31\x36\0" /* offset 5827 */
+  "\x31\x37\0" /* offset 5830 */
+  "\x31\x38\0" /* offset 5833 */
+  "\x31\x39\0" /* offset 5836 */
+  "\x32\x30\0" /* offset 5839 */
+  "\x28\x31\x29\0" /* offset 5842 */
+  "\x28\x32\x29\0" /* offset 5846 */
+  "\x28\x33\x29\0" /* offset 5850 */
+  "\x28\x34\x29\0" /* offset 5854 */
+  "\x28\x35\x29\0" /* offset 5858 */
+  "\x28\x36\x29\0" /* offset 5862 */
+  "\x28\x37\x29\0" /* offset 5866 */
+  "\x28\x38\x29\0" /* offset 5870 */
+  "\x28\x39\x29\0" /* offset 5874 */
+  "\x28\x31\x30\x29\0" /* offset 5878 */
+  "\x28\x31\x31\x29\0" /* offset 5883 */
+  "\x28\x31\x32\x29\0" /* offset 5888 */
+  "\x28\x31\x33\x29\0" /* offset 5893 */
+  "\x28\x31\x34\x29\0" /* offset 5898 */
+  "\x28\x31\x35\x29\0" /* offset 5903 */
+  "\x28\x31\x36\x29\0" /* offset 5908 */
+  "\x28\x31\x37\x29\0" /* offset 5913 */
+  "\x28\x31\x38\x29\0" /* offset 5918 */
+  "\x28\x31\x39\x29\0" /* offset 5923 */
+  "\x28\x32\x30\x29\0" /* offset 5928 */
+  "\x31\x2e\0" /* offset 5933 */
+  "\x32\x2e\0" /* offset 5936 */
+  "\x33\x2e\0" /* offset 5939 */
+  "\x34\x2e\0" /* offset 5942 */
+  "\x35\x2e\0" /* offset 5945 */
+  "\x36\x2e\0" /* offset 5948 */
+  "\x37\x2e\0" /* offset 5951 */
+  "\x38\x2e\0" /* offset 5954 */
+  "\x39\x2e\0" /* offset 5957 */
+  "\x31\x30\x2e\0" /* offset 5960 */
+  "\x31\x31\x2e\0" /* offset 5964 */
+  "\x31\x32\x2e\0" /* offset 5968 */
+  "\x31\x33\x2e\0" /* offset 5972 */
+  "\x31\x34\x2e\0" /* offset 5976 */
+  "\x31\x35\x2e\0" /* offset 5980 */
+  "\x31\x36\x2e\0" /* offset 5984 */
+  "\x31\x37\x2e\0" /* offset 5988 */
+  "\x31\x38\x2e\0" /* offset 5992 */
+  "\x31\x39\x2e\0" /* offset 5996 */
+  "\x32\x30\x2e\0" /* offset 6000 */
+  "\x28\x61\x29\0" /* offset 6004 */
+  "\x28\x62\x29\0" /* offset 6008 */
+  "\x28\x63\x29\0" /* offset 6012 */
+  "\x28\x64\x29\0" /* offset 6016 */
+  "\x28\x65\x29\0" /* offset 6020 */
+  "\x28\x66\x29\0" /* offset 6024 */
+  "\x28\x67\x29\0" /* offset 6028 */
+  "\x28\x68\x29\0" /* offset 6032 */
+  "\x28\x69\x29\0" /* offset 6036 */
+  "\x28\x6a\x29\0" /* offset 6040 */
+  "\x28\x6b\x29\0" /* offset 6044 */
+  "\x28\x6c\x29\0" /* offset 6048 */
+  "\x28\x6d\x29\0" /* offset 6052 */
+  "\x28\x6e\x29\0" /* offset 6056 */
+  "\x28\x6f\x29\0" /* offset 6060 */
+  "\x28\x70\x29\0" /* offset 6064 */
+  "\x28\x71\x29\0" /* offset 6068 */
+  "\x28\x72\x29\0" /* offset 6072 */
+  "\x28\x73\x29\0" /* offset 6076 */
+  "\x28\x74\x29\0" /* offset 6080 */
+  "\x28\x75\x29\0" /* offset 6084 */
+  "\x28\x76\x29\0" /* offset 6088 */
+  "\x28\x77\x29\0" /* offset 6092 */
+  "\x28\x78\x29\0" /* offset 6096 */
+  "\x28\x79\x29\0" /* offset 6100 */
+  "\x28\x7a\x29\0" /* offset 6104 */
+  "\x53\0" /* offset 6108 */
+  "\x59\0" /* offset 6110 */
+  "\x71\0" /* offset 6112 */
+  "\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\xe2\x88\xab\0" /* offset 6114 */
+  "\x3a\x3a\x3d\0" /* offset 6127 */
+  "\x3d\x3d\0" /* offset 6131 */
+  "\x3d\x3d\x3d\0" /* offset 6134 */
+  "\xe2\xab\x9d\xcc\xb8\0" /* offset 6138 */
+  "\xe2\xb5\xa1\0" /* offset 6144 */
+  "\xe6\xaf\x8d\0" /* offset 6148 */
+  "\xe9\xbe\x9f\0" /* offset 6152 */
+  "\xe4\xb8\x80\0" /* offset 6156 */
+  "\xe4\xb8\xa8\0" /* offset 6160 */
+  "\xe4\xb8\xb6\0" /* offset 6164 */
+  "\xe4\xb8\xbf\0" /* offset 6168 */
+  "\xe4\xb9\x99\0" /* offset 6172 */
+  "\xe4\xba\x85\0" /* offset 6176 */
+  "\xe4\xba\x8c\0" /* offset 6180 */
+  "\xe4\xba\xa0\0" /* offset 6184 */
+  "\xe4\xba\xba\0" /* offset 6188 */
+  "\xe5\x84\xbf\0" /* offset 6192 */
+  "\xe5\x85\xa5\0" /* offset 6196 */
+  "\xe5\x85\xab\0" /* offset 6200 */
+  "\xe5\x86\x82\0" /* offset 6204 */
+  "\xe5\x86\x96\0" /* offset 6208 */
+  "\xe5\x86\xab\0" /* offset 6212 */
+  "\xe5\x87\xa0\0" /* offset 6216 */
+  "\xe5\x87\xb5\0" /* offset 6220 */
+  "\xe5\x88\x80\0" /* offset 6224 */
+  "\xe5\x8a\x9b\0" /* offset 6228 */
+  "\xe5\x8b\xb9\0" /* offset 6232 */
+  "\xe5\x8c\x95\0" /* offset 6236 */
+  "\xe5\x8c\x9a\0" /* offset 6240 */
+  "\xe5\x8c\xb8\0" /* offset 6244 */
+  "\xe5\x8d\x81\0" /* offset 6248 */
+  "\xe5\x8d\x9c\0" /* offset 6252 */
+  "\xe5\x8d\xa9\0" /* offset 6256 */
+  "\xe5\x8e\x82\0" /* offset 6260 */
+  "\xe5\x8e\xb6\0" /* offset 6264 */
+  "\xe5\x8f\x88\0" /* offset 6268 */
+  "\xe5\x8f\xa3\0" /* offset 6272 */
+  "\xe5\x9b\x97\0" /* offset 6276 */
+  "\xe5\x9c\x9f\0" /* offset 6280 */
+  "\xe5\xa3\xab\0" /* offset 6284 */
+  "\xe5\xa4\x82\0" /* offset 6288 */
+  "\xe5\xa4\x8a\0" /* offset 6292 */
+  "\xe5\xa4\x95\0" /* offset 6296 */
+  "\xe5\xa4\xa7\0" /* offset 6300 */
+  "\xe5\xa5\xb3\0" /* offset 6304 */
+  "\xe5\xad\x90\0" /* offset 6308 */
+  "\xe5\xae\x80\0" /* offset 6312 */
+  "\xe5\xaf\xb8\0" /* offset 6316 */
+  "\xe5\xb0\x8f\0" /* offset 6320 */
+  "\xe5\xb0\xa2\0" /* offset 6324 */
+  "\xe5\xb0\xb8\0" /* offset 6328 */
+  "\xe5\xb1\xae\0" /* offset 6332 */
+  "\xe5\xb1\xb1\0" /* offset 6336 */
+  "\xe5\xb7\x9b\0" /* offset 6340 */
+  "\xe5\xb7\xa5\0" /* offset 6344 */
+  "\xe5\xb7\xb1\0" /* offset 6348 */
+  "\xe5\xb7\xbe\0" /* offset 6352 */
+  "\xe5\xb9\xb2\0" /* offset 6356 */
+  "\xe5\xb9\xba\0" /* offset 6360 */
+  "\xe5\xb9\xbf\0" /* offset 6364 */
+  "\xe5\xbb\xb4\0" /* offset 6368 */
+  "\xe5\xbb\xbe\0" /* offset 6372 */
+  "\xe5\xbc\x8b\0" /* offset 6376 */
+  "\xe5\xbc\x93\0" /* offset 6380 */
+  "\xe5\xbd\x90\0" /* offset 6384 */
+  "\xe5\xbd\xa1\0" /* offset 6388 */
+  "\xe5\xbd\xb3\0" /* offset 6392 */
+  "\xe5\xbf\x83\0" /* offset 6396 */
+  "\xe6\x88\x88\0" /* offset 6400 */
+  "\xe6\x88\xb6\0" /* offset 6404 */
+  "\xe6\x89\x8b\0" /* offset 6408 */
+  "\xe6\x94\xaf\0" /* offset 6412 */
+  "\xe6\x94\xb4\0" /* offset 6416 */
+  "\xe6\x96\x87\0" /* offset 6420 */
+  "\xe6\x96\x97\0" /* offset 6424 */
+  "\xe6\x96\xa4\0" /* offset 6428 */
+  "\xe6\x96\xb9\0" /* offset 6432 */
+  "\xe6\x97\xa0\0" /* offset 6436 */
+  "\xe6\x97\xa5\0" /* offset 6440 */
+  "\xe6\x9b\xb0\0" /* offset 6444 */
+  "\xe6\x9c\x88\0" /* offset 6448 */
+  "\xe6\x9c\xa8\0" /* offset 6452 */
+  "\xe6\xac\xa0\0" /* offset 6456 */
+  "\xe6\xad\xa2\0" /* offset 6460 */
+  "\xe6\xad\xb9\0" /* offset 6464 */
+  "\xe6\xae\xb3\0" /* offset 6468 */
+  "\xe6\xaf\x8b\0" /* offset 6472 */
+  "\xe6\xaf\x94\0" /* offset 6476 */
+  "\xe6\xaf\x9b\0" /* offset 6480 */
+  "\xe6\xb0\x8f\0" /* offset 6484 */
+  "\xe6\xb0\x94\0" /* offset 6488 */
+  "\xe6\xb0\xb4\0" /* offset 6492 */
+  "\xe7\x81\xab\0" /* offset 6496 */
+  "\xe7\x88\xaa\0" /* offset 6500 */
+  "\xe7\x88\xb6\0" /* offset 6504 */
+  "\xe7\x88\xbb\0" /* offset 6508 */
+  "\xe7\x88\xbf\0" /* offset 6512 */
+  "\xe7\x89\x87\0" /* offset 6516 */
+  "\xe7\x89\x99\0" /* offset 6520 */
+  "\xe7\x89\x9b\0" /* offset 6524 */
+  "\xe7\x8a\xac\0" /* offset 6528 */
+  "\xe7\x8e\x84\0" /* offset 6532 */
+  "\xe7\x8e\x89\0" /* offset 6536 */
+  "\xe7\x93\x9c\0" /* offset 6540 */
+  "\xe7\x93\xa6\0" /* offset 6544 */
+  "\xe7\x94\x98\0" /* offset 6548 */
+  "\xe7\x94\x9f\0" /* offset 6552 */
+  "\xe7\x94\xa8\0" /* offset 6556 */
+  "\xe7\x94\xb0\0" /* offset 6560 */
+  "\xe7\x96\x8b\0" /* offset 6564 */
+  "\xe7\x96\x92\0" /* offset 6568 */
+  "\xe7\x99\xb6\0" /* offset 6572 */
+  "\xe7\x99\xbd\0" /* offset 6576 */
+  "\xe7\x9a\xae\0" /* offset 6580 */
+  "\xe7\x9a\xbf\0" /* offset 6584 */
+  "\xe7\x9b\xae\0" /* offset 6588 */
+  "\xe7\x9f\x9b\0" /* offset 6592 */
+  "\xe7\x9f\xa2\0" /* offset 6596 */
+  "\xe7\x9f\xb3\0" /* offset 6600 */
+  "\xe7\xa4\xba\0" /* offset 6604 */
+  "\xe7\xa6\xb8\0" /* offset 6608 */
+  "\xe7\xa6\xbe\0" /* offset 6612 */
+  "\xe7\xa9\xb4\0" /* offset 6616 */
+  "\xe7\xab\x8b\0" /* offset 6620 */
+  "\xe7\xab\xb9\0" /* offset 6624 */
+  "\xe7\xb1\xb3\0" /* offset 6628 */
+  "\xe7\xb3\xb8\0" /* offset 6632 */
+  "\xe7\xbc\xb6\0" /* offset 6636 */
+  "\xe7\xbd\x91\0" /* offset 6640 */
+  "\xe7\xbe\x8a\0" /* offset 6644 */
+  "\xe7\xbe\xbd\0" /* offset 6648 */
+  "\xe8\x80\x81\0" /* offset 6652 */
+  "\xe8\x80\x8c\0" /* offset 6656 */
+  "\xe8\x80\x92\0" /* offset 6660 */
+  "\xe8\x80\xb3\0" /* offset 6664 */
+  "\xe8\x81\xbf\0" /* offset 6668 */
+  "\xe8\x82\x89\0" /* offset 6672 */
+  "\xe8\x87\xa3\0" /* offset 6676 */
+  "\xe8\x87\xaa\0" /* offset 6680 */
+  "\xe8\x87\xb3\0" /* offset 6684 */
+  "\xe8\x87\xbc\0" /* offset 6688 */
+  "\xe8\x88\x8c\0" /* offset 6692 */
+  "\xe8\x88\x9b\0" /* offset 6696 */
+  "\xe8\x88\x9f\0" /* offset 6700 */
+  "\xe8\x89\xae\0" /* offset 6704 */
+  "\xe8\x89\xb2\0" /* offset 6708 */
+  "\xe8\x89\xb8\0" /* offset 6712 */
+  "\xe8\x99\x8d\0" /* offset 6716 */
+  "\xe8\x99\xab\0" /* offset 6720 */
+  "\xe8\xa1\x80\0" /* offset 6724 */
+  "\xe8\xa1\x8c\0" /* offset 6728 */
+  "\xe8\xa1\xa3\0" /* offset 6732 */
+  "\xe8\xa5\xbe\0" /* offset 6736 */
+  "\xe8\xa6\x8b\0" /* offset 6740 */
+  "\xe8\xa7\x92\0" /* offset 6744 */
+  "\xe8\xa8\x80\0" /* offset 6748 */
+  "\xe8\xb0\xb7\0" /* offset 6752 */
+  "\xe8\xb1\x86\0" /* offset 6756 */
+  "\xe8\xb1\x95\0" /* offset 6760 */
+  "\xe8\xb1\xb8\0" /* offset 6764 */
+  "\xe8\xb2\x9d\0" /* offset 6768 */
+  "\xe8\xb5\xa4\0" /* offset 6772 */
+  "\xe8\xb5\xb0\0" /* offset 6776 */
+  "\xe8\xb6\xb3\0" /* offset 6780 */
+  "\xe8\xba\xab\0" /* offset 6784 */
+  "\xe8\xbb\x8a\0" /* offset 6788 */
+  "\xe8\xbe\x9b\0" /* offset 6792 */
+  "\xe8\xbe\xb0\0" /* offset 6796 */
+  "\xe8\xbe\xb5\0" /* offset 6800 */
+  "\xe9\x82\x91\0" /* offset 6804 */
+  "\xe9\x85\x89\0" /* offset 6808 */
+  "\xe9\x87\x86\0" /* offset 6812 */
+  "\xe9\x87\x8c\0" /* offset 6816 */
+  "\xe9\x87\x91\0" /* offset 6820 */
+  "\xe9\x95\xb7\0" /* offset 6824 */
+  "\xe9\x96\x80\0" /* offset 6828 */
+  "\xe9\x98\x9c\0" /* offset 6832 */
+  "\xe9\x9a\xb6\0" /* offset 6836 */
+  "\xe9\x9a\xb9\0" /* offset 6840 */
+  "\xe9\x9b\xa8\0" /* offset 6844 */
+  "\xe9\x9d\x91\0" /* offset 6848 */
+  "\xe9\x9d\x9e\0" /* offset 6852 */
+  "\xe9\x9d\xa2\0" /* offset 6856 */
+  "\xe9\x9d\xa9\0" /* offset 6860 */
+  "\xe9\x9f\x8b\0" /* offset 6864 */
+  "\xe9\x9f\xad\0" /* offset 6868 */
+  "\xe9\x9f\xb3\0" /* offset 6872 */
+  "\xe9\xa0\x81\0" /* offset 6876 */
+  "\xe9\xa2\xa8\0" /* offset 6880 */
+  "\xe9\xa3\x9b\0" /* offset 6884 */
+  "\xe9\xa3\x9f\0" /* offset 6888 */
+  "\xe9\xa6\x96\0" /* offset 6892 */
+  "\xe9\xa6\x99\0" /* offset 6896 */
+  "\xe9\xa6\xac\0" /* offset 6900 */
+  "\xe9\xaa\xa8\0" /* offset 6904 */
+  "\xe9\xab\x98\0" /* offset 6908 */
+  "\xe9\xab\x9f\0" /* offset 6912 */
+  "\xe9\xac\xa5\0" /* offset 6916 */
+  "\xe9\xac\xaf\0" /* offset 6920 */
+  "\xe9\xac\xb2\0" /* offset 6924 */
+  "\xe9\xac\xbc\0" /* offset 6928 */
+  "\xe9\xad\x9a\0" /* offset 6932 */
+  "\xe9\xb3\xa5\0" /* offset 6936 */
+  "\xe9\xb9\xb5\0" /* offset 6940 */
+  "\xe9\xb9\xbf\0" /* offset 6944 */
+  "\xe9\xba\xa5\0" /* offset 6948 */
+  "\xe9\xba\xbb\0" /* offset 6952 */
+  "\xe9\xbb\x83\0" /* offset 6956 */
+  "\xe9\xbb\x8d\0" /* offset 6960 */
+  "\xe9\xbb\x91\0" /* offset 6964 */
+  "\xe9\xbb\xb9\0" /* offset 6968 */
+  "\xe9\xbb\xbd\0" /* offset 6972 */
+  "\xe9\xbc\x8e\0" /* offset 6976 */
+  "\xe9\xbc\x93\0" /* offset 6980 */
+  "\xe9\xbc\xa0\0" /* offset 6984 */
+  "\xe9\xbc\xbb\0" /* offset 6988 */
+  "\xe9\xbd\x8a\0" /* offset 6992 */
+  "\xe9\xbd\x92\0" /* offset 6996 */
+  "\xe9\xbe\x8d\0" /* offset 7000 */
+  "\xe9\xbe\x9c\0" /* offset 7004 */
+  "\xe9\xbe\xa0\0" /* offset 7008 */
+  "\xe3\x80\x92\0" /* offset 7012 */
+  "\xe5\x8d\x84\0" /* offset 7016 */
+  "\xe5\x8d\x85\0" /* offset 7020 */
+  "\xe3\x81\x8b\xe3\x82\x99\0" /* offset 7024 */
+  "\xe3\x81\x8d\xe3\x82\x99\0" /* offset 7031 */
+  "\xe3\x81\x8f\xe3\x82\x99\0" /* offset 7038 */
+  "\xe3\x81\x91\xe3\x82\x99\0" /* offset 7045 */
+  "\xe3\x81\x93\xe3\x82\x99\0" /* offset 7052 */
+  "\xe3\x81\x95\xe3\x82\x99\0" /* offset 7059 */
+  "\xe3\x81\x97\xe3\x82\x99\0" /* offset 7066 */
+  "\xe3\x81\x99\xe3\x82\x99\0" /* offset 7073 */
+  "\xe3\x81\x9b\xe3\x82\x99\0" /* offset 7080 */
+  "\xe3\x81\x9d\xe3\x82\x99\0" /* offset 7087 */
+  "\xe3\x81\x9f\xe3\x82\x99\0" /* offset 7094 */
+  "\xe3\x81\xa1\xe3\x82\x99\0" /* offset 7101 */
+  "\xe3\x81\xa4\xe3\x82\x99\0" /* offset 7108 */
+  "\xe3\x81\xa6\xe3\x82\x99\0" /* offset 7115 */
+  "\xe3\x81\xa8\xe3\x82\x99\0" /* offset 7122 */
+  "\xe3\x81\xaf\xe3\x82\x99\0" /* offset 7129 */
+  "\xe3\x81\xaf\xe3\x82\x9a\0" /* offset 7136 */
+  "\xe3\x81\xb2\xe3\x82\x99\0" /* offset 7143 */
+  "\xe3\x81\xb2\xe3\x82\x9a\0" /* offset 7150 */
+  "\xe3\x81\xb5\xe3\x82\x99\0" /* offset 7157 */
+  "\xe3\x81\xb5\xe3\x82\x9a\0" /* offset 7164 */
+  "\xe3\x81\xb8\xe3\x82\x99\0" /* offset 7171 */
+  "\xe3\x81\xb8\xe3\x82\x9a\0" /* offset 7178 */
+  "\xe3\x81\xbb\xe3\x82\x99\0" /* offset 7185 */
+  "\xe3\x81\xbb\xe3\x82\x9a\0" /* offset 7192 */
+  "\xe3\x81\x86\xe3\x82\x99\0" /* offset 7199 */
+  "\x20\xe3\x82\x99\0" /* offset 7206 */
+  "\x20\xe3\x82\x9a\0" /* offset 7211 */
+  "\xe3\x82\x9d\xe3\x82\x99\0" /* offset 7216 */
+  "\xe3\x82\x88\xe3\x82\x8a\0" /* offset 7223 */
+  "\xe3\x82\xab\xe3\x82\x99\0" /* offset 7230 */
+  "\xe3\x82\xad\xe3\x82\x99\0" /* offset 7237 */
+  "\xe3\x82\xaf\xe3\x82\x99\0" /* offset 7244 */
+  "\xe3\x82\xb1\xe3\x82\x99\0" /* offset 7251 */
+  "\xe3\x82\xb3\xe3\x82\x99\0" /* offset 7258 */
+  "\xe3\x82\xb5\xe3\x82\x99\0" /* offset 7265 */
+  "\xe3\x82\xb7\xe3\x82\x99\0" /* offset 7272 */
+  "\xe3\x82\xb9\xe3\x82\x99\0" /* offset 7279 */
+  "\xe3\x82\xbb\xe3\x82\x99\0" /* offset 7286 */
+  "\xe3\x82\xbd\xe3\x82\x99\0" /* offset 7293 */
+  "\xe3\x82\xbf\xe3\x82\x99\0" /* offset 7300 */
+  "\xe3\x83\x81\xe3\x82\x99\0" /* offset 7307 */
+  "\xe3\x83\x84\xe3\x82\x99\0" /* offset 7314 */
+  "\xe3\x83\x86\xe3\x82\x99\0" /* offset 7321 */
+  "\xe3\x83\x88\xe3\x82\x99\0" /* offset 7328 */
+  "\xe3\x83\x8f\xe3\x82\x99\0" /* offset 7335 */
+  "\xe3\x83\x8f\xe3\x82\x9a\0" /* offset 7342 */
+  "\xe3\x83\x92\xe3\x82\x99\0" /* offset 7349 */
+  "\xe3\x83\x92\xe3\x82\x9a\0" /* offset 7356 */
+  "\xe3\x83\x95\xe3\x82\x99\0" /* offset 7363 */
+  "\xe3\x83\x95\xe3\x82\x9a\0" /* offset 7370 */
+  "\xe3\x83\x98\xe3\x82\x99\0" /* offset 7377 */
+  "\xe3\x83\x98\xe3\x82\x9a\0" /* offset 7384 */
+  "\xe3\x83\x9b\xe3\x82\x99\0" /* offset 7391 */
+  "\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 7398 */
+  "\xe3\x82\xa6\xe3\x82\x99\0" /* offset 7405 */
+  "\xe3\x83\xaf\xe3\x82\x99\0" /* offset 7412 */
+  "\xe3\x83\xb0\xe3\x82\x99\0" /* offset 7419 */
+  "\xe3\x83\xb1\xe3\x82\x99\0" /* offset 7426 */
+  "\xe3\x83\xb2\xe3\x82\x99\0" /* offset 7433 */
+  "\xe3\x83\xbd\xe3\x82\x99\0" /* offset 7440 */
+  "\xe3\x82\xb3\xe3\x83\x88\0" /* offset 7447 */
+  "\xe1\x84\x80\0" /* offset 7454 */
+  "\xe1\x84\x81\0" /* offset 7458 */
+  "\xe1\x86\xaa\0" /* offset 7462 */
+  "\xe1\x84\x82\0" /* offset 7466 */
+  "\xe1\x86\xac\0" /* offset 7470 */
+  "\xe1\x86\xad\0" /* offset 7474 */
+  "\xe1\x84\x83\0" /* offset 7478 */
+  "\xe1\x84\x84\0" /* offset 7482 */
+  "\xe1\x84\x85\0" /* offset 7486 */
+  "\xe1\x86\xb0\0" /* offset 7490 */
+  "\xe1\x86\xb1\0" /* offset 7494 */
+  "\xe1\x86\xb2\0" /* offset 7498 */
+  "\xe1\x86\xb3\0" /* offset 7502 */
+  "\xe1\x86\xb4\0" /* offset 7506 */
+  "\xe1\x86\xb5\0" /* offset 7510 */
+  "\xe1\x84\x9a\0" /* offset 7514 */
+  "\xe1\x84\x86\0" /* offset 7518 */
+  "\xe1\x84\x87\0" /* offset 7522 */
+  "\xe1\x84\x88\0" /* offset 7526 */
+  "\xe1\x84\xa1\0" /* offset 7530 */
+  "\xe1\x84\x89\0" /* offset 7534 */
+  "\xe1\x84\x8a\0" /* offset 7538 */
+  "\xe1\x84\x8b\0" /* offset 7542 */
+  "\xe1\x84\x8c\0" /* offset 7546 */
+  "\xe1\x84\x8d\0" /* offset 7550 */
+  "\xe1\x84\x8e\0" /* offset 7554 */
+  "\xe1\x84\x8f\0" /* offset 7558 */
+  "\xe1\x84\x90\0" /* offset 7562 */
+  "\xe1\x84\x91\0" /* offset 7566 */
+  "\xe1\x84\x92\0" /* offset 7570 */
+  "\xe1\x85\xa1\0" /* offset 7574 */
+  "\xe1\x85\xa2\0" /* offset 7578 */
+  "\xe1\x85\xa3\0" /* offset 7582 */
+  "\xe1\x85\xa4\0" /* offset 7586 */
+  "\xe1\x85\xa5\0" /* offset 7590 */
+  "\xe1\x85\xa6\0" /* offset 7594 */
+  "\xe1\x85\xa7\0" /* offset 7598 */
+  "\xe1\x85\xa8\0" /* offset 7602 */
+  "\xe1\x85\xa9\0" /* offset 7606 */
+  "\xe1\x85\xaa\0" /* offset 7610 */
+  "\xe1\x85\xab\0" /* offset 7614 */
+  "\xe1\x85\xac\0" /* offset 7618 */
+  "\xe1\x85\xad\0" /* offset 7622 */
+  "\xe1\x85\xae\0" /* offset 7626 */
+  "\xe1\x85\xaf\0" /* offset 7630 */
+  "\xe1\x85\xb0\0" /* offset 7634 */
+  "\xe1\x85\xb1\0" /* offset 7638 */
+  "\xe1\x85\xb2\0" /* offset 7642 */
+  "\xe1\x85\xb3\0" /* offset 7646 */
+  "\xe1\x85\xb4\0" /* offset 7650 */
+  "\xe1\x85\xb5\0" /* offset 7654 */
+  "\xe1\x85\xa0\0" /* offset 7658 */
+  "\xe1\x84\x94\0" /* offset 7662 */
+  "\xe1\x84\x95\0" /* offset 7666 */
+  "\xe1\x87\x87\0" /* offset 7670 */
+  "\xe1\x87\x88\0" /* offset 7674 */
+  "\xe1\x87\x8c\0" /* offset 7678 */
+  "\xe1\x87\x8e\0" /* offset 7682 */
+  "\xe1\x87\x93\0" /* offset 7686 */
+  "\xe1\x87\x97\0" /* offset 7690 */
+  "\xe1\x87\x99\0" /* offset 7694 */
+  "\xe1\x84\x9c\0" /* offset 7698 */
+  "\xe1\x87\x9d\0" /* offset 7702 */
+  "\xe1\x87\x9f\0" /* offset 7706 */
+  "\xe1\x84\x9d\0" /* offset 7710 */
+  "\xe1\x84\x9e\0" /* offset 7714 */
+  "\xe1\x84\xa0\0" /* offset 7718 */
+  "\xe1\x84\xa2\0" /* offset 7722 */
+  "\xe1\x84\xa3\0" /* offset 7726 */
+  "\xe1\x84\xa7\0" /* offset 7730 */
+  "\xe1\x84\xa9\0" /* offset 7734 */
+  "\xe1\x84\xab\0" /* offset 7738 */
+  "\xe1\x84\xac\0" /* offset 7742 */
+  "\xe1\x84\xad\0" /* offset 7746 */
+  "\xe1\x84\xae\0" /* offset 7750 */
+  "\xe1\x84\xaf\0" /* offset 7754 */
+  "\xe1\x84\xb2\0" /* offset 7758 */
+  "\xe1\x84\xb6\0" /* offset 7762 */
+  "\xe1\x85\x80\0" /* offset 7766 */
+  "\xe1\x85\x87\0" /* offset 7770 */
+  "\xe1\x85\x8c\0" /* offset 7774 */
+  "\xe1\x87\xb1\0" /* offset 7778 */
+  "\xe1\x87\xb2\0" /* offset 7782 */
+  "\xe1\x85\x97\0" /* offset 7786 */
+  "\xe1\x85\x98\0" /* offset 7790 */
+  "\xe1\x85\x99\0" /* offset 7794 */
+  "\xe1\x86\x84\0" /* offset 7798 */
+  "\xe1\x86\x85\0" /* offset 7802 */
+  "\xe1\x86\x88\0" /* offset 7806 */
+  "\xe1\x86\x91\0" /* offset 7810 */
+  "\xe1\x86\x92\0" /* offset 7814 */
+  "\xe1\x86\x94\0" /* offset 7818 */
+  "\xe1\x86\x9e\0" /* offset 7822 */
+  "\xe1\x86\xa1\0" /* offset 7826 */
+  "\xe4\xb8\x89\0" /* offset 7830 */
+  "\xe5\x9b\x9b\0" /* offset 7834 */
+  "\xe4\xb8\x8a\0" /* offset 7838 */
+  "\xe4\xb8\xad\0" /* offset 7842 */
+  "\xe4\xb8\x8b\0" /* offset 7846 */
+  "\xe7\x94\xb2\0" /* offset 7850 */
+  "\xe4\xb8\x99\0" /* offset 7854 */
+  "\xe4\xb8\x81\0" /* offset 7858 */
+  "\xe5\xa4\xa9\0" /* offset 7862 */
+  "\xe5\x9c\xb0\0" /* offset 7866 */
+  "\x28\xe1\x84\x80\x29\0" /* offset 7870 */
+  "\x28\xe1\x84\x82\x29\0" /* offset 7876 */
+  "\x28\xe1\x84\x83\x29\0" /* offset 7882 */
+  "\x28\xe1\x84\x85\x29\0" /* offset 7888 */
+  "\x28\xe1\x84\x86\x29\0" /* offset 7894 */
+  "\x28\xe1\x84\x87\x29\0" /* offset 7900 */
+  "\x28\xe1\x84\x89\x29\0" /* offset 7906 */
+  "\x28\xe1\x84\x8b\x29\0" /* offset 7912 */
+  "\x28\xe1\x84\x8c\x29\0" /* offset 7918 */
+  "\x28\xe1\x84\x8e\x29\0" /* offset 7924 */
+  "\x28\xe1\x84\x8f\x29\0" /* offset 7930 */
+  "\x28\xe1\x84\x90\x29\0" /* offset 7936 */
+  "\x28\xe1\x84\x91\x29\0" /* offset 7942 */
+  "\x28\xe1\x84\x92\x29\0" /* offset 7948 */
+  "\x28\xe1\x84\x80\xe1\x85\xa1\x29\0" /* offset 7954 */
+  "\x28\xe1\x84\x82\xe1\x85\xa1\x29\0" /* offset 7963 */
+  "\x28\xe1\x84\x83\xe1\x85\xa1\x29\0" /* offset 7972 */
+  "\x28\xe1\x84\x85\xe1\x85\xa1\x29\0" /* offset 7981 */
+  "\x28\xe1\x84\x86\xe1\x85\xa1\x29\0" /* offset 7990 */
+  "\x28\xe1\x84\x87\xe1\x85\xa1\x29\0" /* offset 7999 */
+  "\x28\xe1\x84\x89\xe1\x85\xa1\x29\0" /* offset 8008 */
+  "\x28\xe1\x84\x8b\xe1\x85\xa1\x29\0" /* offset 8017 */
+  "\x28\xe1\x84\x8c\xe1\x85\xa1\x29\0" /* offset 8026 */
+  "\x28\xe1\x84\x8e\xe1\x85\xa1\x29\0" /* offset 8035 */
+  "\x28\xe1\x84\x8f\xe1\x85\xa1\x29\0" /* offset 8044 */
+  "\x28\xe1\x84\x90\xe1\x85\xa1\x29\0" /* offset 8053 */
+  "\x28\xe1\x84\x91\xe1\x85\xa1\x29\0" /* offset 8062 */
+  "\x28\xe1\x84\x92\xe1\x85\xa1\x29\0" /* offset 8071 */
+  "\x28\xe1\x84\x8c\xe1\x85\xae\x29\0" /* offset 8080 */
+  "\x28\xe1\x84\x8b\xe1\x85\xa9\xe1\x84\x8c\xe1\x85\xa5\xe1\x86\xab\x29\0" /* offset 8089 */
+  "\x28\xe1\x84\x8b\xe1\x85\xa9\xe1\x84\x92\xe1\x85\xae\x29\0" /* offset 8107 */
+  "\x28\xe4\xb8\x80\x29\0" /* offset 8122 */
+  "\x28\xe4\xba\x8c\x29\0" /* offset 8128 */
+  "\x28\xe4\xb8\x89\x29\0" /* offset 8134 */
+  "\x28\xe5\x9b\x9b\x29\0" /* offset 8140 */
+  "\x28\xe4\xba\x94\x29\0" /* offset 8146 */
+  "\x28\xe5\x85\xad\x29\0" /* offset 8152 */
+  "\x28\xe4\xb8\x83\x29\0" /* offset 8158 */
+  "\x28\xe5\x85\xab\x29\0" /* offset 8164 */
+  "\x28\xe4\xb9\x9d\x29\0" /* offset 8170 */
+  "\x28\xe5\x8d\x81\x29\0" /* offset 8176 */
+  "\x28\xe6\x9c\x88\x29\0" /* offset 8182 */
+  "\x28\xe7\x81\xab\x29\0" /* offset 8188 */
+  "\x28\xe6\xb0\xb4\x29\0" /* offset 8194 */
+  "\x28\xe6\x9c\xa8\x29\0" /* offset 8200 */
+  "\x28\xe9\x87\x91\x29\0" /* offset 8206 */
+  "\x28\xe5\x9c\x9f\x29\0" /* offset 8212 */
+  "\x28\xe6\x97\xa5\x29\0" /* offset 8218 */
+  "\x28\xe6\xa0\xaa\x29\0" /* offset 8224 */
+  "\x28\xe6\x9c\x89\x29\0" /* offset 8230 */
+  "\x28\xe7\xa4\xbe\x29\0" /* offset 8236 */
+  "\x28\xe5\x90\x8d\x29\0" /* offset 8242 */
+  "\x28\xe7\x89\xb9\x29\0" /* offset 8248 */
+  "\x28\xe8\xb2\xa1\x29\0" /* offset 8254 */
+  "\x28\xe7\xa5\x9d\x29\0" /* offset 8260 */
+  "\x28\xe5\x8a\xb4\x29\0" /* offset 8266 */
+  "\x28\xe4\xbb\xa3\x29\0" /* offset 8272 */
+  "\x28\xe5\x91\xbc\x29\0" /* offset 8278 */
+  "\x28\xe5\xad\xa6\x29\0" /* offset 8284 */
+  "\x28\xe7\x9b\xa3\x29\0" /* offset 8290 */
+  "\x28\xe4\xbc\x81\x29\0" /* offset 8296 */
+  "\x28\xe8\xb3\x87\x29\0" /* offset 8302 */
+  "\x28\xe5\x8d\x94\x29\0" /* offset 8308 */
+  "\x28\xe7\xa5\xad\x29\0" /* offset 8314 */
+  "\x28\xe4\xbc\x91\x29\0" /* offset 8320 */
+  "\x28\xe8\x87\xaa\x29\0" /* offset 8326 */
+  "\x28\xe8\x87\xb3\x29\0" /* offset 8332 */
+  "\x50\x54\x45\0" /* offset 8338 */
+  "\x32\x31\0" /* offset 8342 */
+  "\x32\x32\0" /* offset 8345 */
+  "\x32\x33\0" /* offset 8348 */
+  "\x32\x34\0" /* offset 8351 */
+  "\x32\x35\0" /* offset 8354 */
+  "\x32\x36\0" /* offset 8357 */
+  "\x32\x37\0" /* offset 8360 */
+  "\x32\x38\0" /* offset 8363 */
+  "\x32\x39\0" /* offset 8366 */
+  "\x33\x30\0" /* offset 8369 */
+  "\x33\x31\0" /* offset 8372 */
+  "\x33\x32\0" /* offset 8375 */
+  "\x33\x33\0" /* offset 8378 */
+  "\x33\x34\0" /* offset 8381 */
+  "\x33\x35\0" /* offset 8384 */
+  "\xe1\x84\x80\xe1\x85\xa1\0" /* offset 8387 */
+  "\xe1\x84\x82\xe1\x85\xa1\0" /* offset 8394 */
+  "\xe1\x84\x83\xe1\x85\xa1\0" /* offset 8401 */
+  "\xe1\x84\x85\xe1\x85\xa1\0" /* offset 8408 */
+  "\xe1\x84\x86\xe1\x85\xa1\0" /* offset 8415 */
+  "\xe1\x84\x87\xe1\x85\xa1\0" /* offset 8422 */
+  "\xe1\x84\x89\xe1\x85\xa1\0" /* offset 8429 */
+  "\xe1\x84\x8b\xe1\x85\xa1\0" /* offset 8436 */
+  "\xe1\x84\x8c\xe1\x85\xa1\0" /* offset 8443 */
+  "\xe1\x84\x8e\xe1\x85\xa1\0" /* offset 8450 */
+  "\xe1\x84\x8f\xe1\x85\xa1\0" /* offset 8457 */
+  "\xe1\x84\x90\xe1\x85\xa1\0" /* offset 8464 */
+  "\xe1\x84\x91\xe1\x85\xa1\0" /* offset 8471 */
+  "\xe1\x84\x92\xe1\x85\xa1\0" /* offset 8478 */
+  "\xe1\x84\x8e\xe1\x85\xa1\xe1\x86\xb7\xe1\x84\x80\xe1\x85\xa9\0" /* offset 8485 */
+  "\xe1\x84\x8c\xe1\x85\xae\xe1\x84\x8b\xe1\x85\xb4\0" /* offset 8501 */
+  "\xe1\x84\x8b\xe1\x85\xae\0" /* offset 8514 */
+  "\xe4\xba\x94\0" /* offset 8521 */
+  "\xe5\x85\xad\0" /* offset 8525 */
+  "\xe4\xb8\x83\0" /* offset 8529 */
+  "\xe4\xb9\x9d\0" /* offset 8533 */
+  "\xe6\xa0\xaa\0" /* offset 8537 */
+  "\xe6\x9c\x89\0" /* offset 8541 */
+  "\xe7\xa4\xbe\0" /* offset 8545 */
+  "\xe5\x90\x8d\0" /* offset 8549 */
+  "\xe7\x89\xb9\0" /* offset 8553 */
+  "\xe8\xb2\xa1\0" /* offset 8557 */
+  "\xe7\xa5\x9d\0" /* offset 8561 */
+  "\xe5\x8a\xb4\0" /* offset 8565 */
+  "\xe7\xa7\x98\0" /* offset 8569 */
+  "\xe7\x94\xb7\0" /* offset 8573 */
+  "\xe9\x81\xa9\0" /* offset 8577 */
+  "\xe5\x84\xaa\0" /* offset 8581 */
+  "\xe5\x8d\xb0\0" /* offset 8585 */
+  "\xe6\xb3\xa8\0" /* offset 8589 */
+  "\xe9\xa0\x85\0" /* offset 8593 */
+  "\xe4\xbc\x91\0" /* offset 8597 */
+  "\xe5\x86\x99\0" /* offset 8601 */
+  "\xe6\xad\xa3\0" /* offset 8605 */
+  "\xe5\xb7\xa6\0" /* offset 8609 */
+  "\xe5\x8f\xb3\0" /* offset 8613 */
+  "\xe5\x8c\xbb\0" /* offset 8617 */
+  "\xe5\xae\x97\0" /* offset 8621 */
+  "\xe5\xad\xa6\0" /* offset 8625 */
+  "\xe7\x9b\xa3\0" /* offset 8629 */
+  "\xe4\xbc\x81\0" /* offset 8633 */
+  "\xe8\xb3\x87\0" /* offset 8637 */
+  "\xe5\x8d\x94\0" /* offset 8641 */
+  "\xe5\xa4\x9c\0" /* offset 8645 */
+  "\x33\x36\0" /* offset 8649 */
+  "\x33\x37\0" /* offset 8652 */
+  "\x33\x38\0" /* offset 8655 */
+  "\x33\x39\0" /* offset 8658 */
+  "\x34\x30\0" /* offset 8661 */
+  "\x34\x31\0" /* offset 8664 */
+  "\x34\x32\0" /* offset 8667 */
+  "\x34\x33\0" /* offset 8670 */
+  "\x34\x34\0" /* offset 8673 */
+  "\x34\x35\0" /* offset 8676 */
+  "\x34\x36\0" /* offset 8679 */
+  "\x34\x37\0" /* offset 8682 */
+  "\x34\x38\0" /* offset 8685 */
+  "\x34\x39\0" /* offset 8688 */
+  "\x35\x30\0" /* offset 8691 */
+  "\x31\xe6\x9c\x88\0" /* offset 8694 */
+  "\x32\xe6\x9c\x88\0" /* offset 8699 */
+  "\x33\xe6\x9c\x88\0" /* offset 8704 */
+  "\x34\xe6\x9c\x88\0" /* offset 8709 */
+  "\x35\xe6\x9c\x88\0" /* offset 8714 */
+  "\x36\xe6\x9c\x88\0" /* offset 8719 */
+  "\x37\xe6\x9c\x88\0" /* offset 8724 */
+  "\x38\xe6\x9c\x88\0" /* offset 8729 */
+  "\x39\xe6\x9c\x88\0" /* offset 8734 */
+  "\x31\x30\xe6\x9c\x88\0" /* offset 8739 */
+  "\x31\x31\xe6\x9c\x88\0" /* offset 8745 */
+  "\x31\x32\xe6\x9c\x88\0" /* offset 8751 */
+  "\x48\x67\0" /* offset 8757 */
+  "\x65\x72\x67\0" /* offset 8760 */
+  "\x65\x56\0" /* offset 8764 */
+  "\x4c\x54\x44\0" /* offset 8767 */
+  "\xe3\x82\xa2\0" /* offset 8771 */
+  "\xe3\x82\xa4\0" /* offset 8775 */
+  "\xe3\x82\xa6\0" /* offset 8779 */
+  "\xe3\x82\xa8\0" /* offset 8783 */
+  "\xe3\x82\xaa\0" /* offset 8787 */
+  "\xe3\x82\xab\0" /* offset 8791 */
+  "\xe3\x82\xad\0" /* offset 8795 */
+  "\xe3\x82\xaf\0" /* offset 8799 */
+  "\xe3\x82\xb1\0" /* offset 8803 */
+  "\xe3\x82\xb3\0" /* offset 8807 */
+  "\xe3\x82\xb5\0" /* offset 8811 */
+  "\xe3\x82\xb7\0" /* offset 8815 */
+  "\xe3\x82\xb9\0" /* offset 8819 */
+  "\xe3\x82\xbb\0" /* offset 8823 */
+  "\xe3\x82\xbd\0" /* offset 8827 */
+  "\xe3\x82\xbf\0" /* offset 8831 */
+  "\xe3\x83\x81\0" /* offset 8835 */
+  "\xe3\x83\x84\0" /* offset 8839 */
+  "\xe3\x83\x86\0" /* offset 8843 */
+  "\xe3\x83\x88\0" /* offset 8847 */
+  "\xe3\x83\x8a\0" /* offset 8851 */
+  "\xe3\x83\x8b\0" /* offset 8855 */
+  "\xe3\x83\x8c\0" /* offset 8859 */
+  "\xe3\x83\x8d\0" /* offset 8863 */
+  "\xe3\x83\x8e\0" /* offset 8867 */
+  "\xe3\x83\x8f\0" /* offset 8871 */
+  "\xe3\x83\x92\0" /* offset 8875 */
+  "\xe3\x83\x95\0" /* offset 8879 */
+  "\xe3\x83\x98\0" /* offset 8883 */
+  "\xe3\x83\x9b\0" /* offset 8887 */
+  "\xe3\x83\x9e\0" /* offset 8891 */
+  "\xe3\x83\x9f\0" /* offset 8895 */
+  "\xe3\x83\xa0\0" /* offset 8899 */
+  "\xe3\x83\xa1\0" /* offset 8903 */
+  "\xe3\x83\xa2\0" /* offset 8907 */
+  "\xe3\x83\xa4\0" /* offset 8911 */
+  "\xe3\x83\xa6\0" /* offset 8915 */
+  "\xe3\x83\xa8\0" /* offset 8919 */
+  "\xe3\x83\xa9\0" /* offset 8923 */
+  "\xe3\x83\xaa\0" /* offset 8927 */
+  "\xe3\x83\xab\0" /* offset 8931 */
+  "\xe3\x83\xac\0" /* offset 8935 */
+  "\xe3\x83\xad\0" /* offset 8939 */
+  "\xe3\x83\xaf\0" /* offset 8943 */
+  "\xe3\x83\xb0\0" /* offset 8947 */
+  "\xe3\x83\xb1\0" /* offset 8951 */
+  "\xe3\x83\xb2\0" /* offset 8955 */
+  "\xe3\x82\xa2\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x88\0" /* offset 8959 */
+  "\xe3\x82\xa2\xe3\x83\xab\xe3\x83\x95\xe3\x82\xa1\0" /* offset 8975 */
+  "\xe3\x82\xa2\xe3\x83\xb3\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xa2\0" /* offset 8988 */
+  "\xe3\x82\xa2\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9004 */
+  "\xe3\x82\xa4\xe3\x83\x8b\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9014 */
+  "\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9030 */
+  "\xe3\x82\xa6\xe3\x82\xa9\xe3\x83\xb3\0" /* offset 9040 */
+  "\xe3\x82\xa8\xe3\x82\xb9\xe3\x82\xaf\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 9050 */
+  "\xe3\x82\xa8\xe3\x83\xbc\xe3\x82\xab\xe3\x83\xbc\0" /* offset 9069 */
+  "\xe3\x82\xaa\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9082 */
+  "\xe3\x82\xaa\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9092 */
+  "\xe3\x82\xab\xe3\x82\xa4\xe3\x83\xaa\0" /* offset 9102 */
+  "\xe3\x82\xab\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\0" /* offset 9112 */
+  "\xe3\x82\xab\xe3\x83\xad\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 9125 */
+  "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9138 */
+  "\xe3\x82\xab\xe3\x82\x99\xe3\x83\xb3\xe3\x83\x9e\0" /* offset 9151 */
+  "\xe3\x82\xad\xe3\x82\x99\xe3\x82\xab\xe3\x82\x99\0" /* offset 9164 */
+  "\xe3\x82\xad\xe3\x82\x99\xe3\x83\x8b\xe3\x83\xbc\0" /* offset 9177 */
+  "\xe3\x82\xad\xe3\x83\xa5\xe3\x83\xaa\xe3\x83\xbc\0" /* offset 9190 */
+  "\xe3\x82\xad\xe3\x82\x99\xe3\x83\xab\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\0" /* offset 9203 */
+  "\xe3\x82\xad\xe3\x83\xad\0" /* offset 9222 */
+  "\xe3\x82\xad\xe3\x83\xad\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 9229 */
+  "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9248 */
+  "\xe3\x82\xad\xe3\x83\xad\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 9267 */
+  "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\0" /* offset 9283 */
+  "\xe3\x82\xaf\xe3\x82\x99\xe3\x83\xa9\xe3\x83\xa0\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9296 */
+  "\xe3\x82\xaf\xe3\x83\xab\xe3\x82\xbb\xe3\x82\x99\xe3\x82\xa4\xe3\x83\xad\0" /* offset 9315 */
+  "\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xbc\xe3\x83\x8d\0" /* offset 9334 */
+  "\xe3\x82\xb1\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9347 */
+  "\xe3\x82\xb3\xe3\x83\xab\xe3\x83\x8a\0" /* offset 9357 */
+  "\xe3\x82\xb3\xe3\x83\xbc\xe3\x83\x9b\xe3\x82\x9a\0" /* offset 9367 */
+  "\xe3\x82\xb5\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9380 */
+  "\xe3\x82\xb5\xe3\x83\xb3\xe3\x83\x81\xe3\x83\xbc\xe3\x83\xa0\0" /* offset 9393 */
+  "\xe3\x82\xb7\xe3\x83\xaa\xe3\x83\xb3\xe3\x82\xaf\xe3\x82\x99\0" /* offset 9409 */
+  "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x81\0" /* offset 9425 */
+  "\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9435 */
+  "\xe3\x82\xbf\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xb9\0" /* offset 9445 */
+  "\xe3\x83\x86\xe3\x82\x99\xe3\x82\xb7\0" /* offset 9458 */
+  "\xe3\x83\x88\xe3\x82\x99\xe3\x83\xab\0" /* offset 9468 */
+  "\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9478 */
+  "\xe3\x83\x8a\xe3\x83\x8e\0" /* offset 9485 */
+  "\xe3\x83\x8e\xe3\x83\x83\xe3\x83\x88\0" /* offset 9492 */
+  "\xe3\x83\x8f\xe3\x82\xa4\xe3\x83\x84\0" /* offset 9502 */
+  "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xbb\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9512 */
+  "\xe3\x83\x8f\xe3\x82\x9a\xe3\x83\xbc\xe3\x83\x84\0" /* offset 9531 */
+  "\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xac\xe3\x83\xab\0" /* offset 9544 */
+  "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xa2\xe3\x82\xb9\xe3\x83\x88\xe3\x83\xab\0" /* offset 9560 */
+  "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xaf\xe3\x83\xab\0" /* offset 9579 */
+  "\xe3\x83\x92\xe3\x82\x9a\xe3\x82\xb3\0" /* offset 9592 */
+  "\xe3\x83\x92\xe3\x82\x99\xe3\x83\xab\0" /* offset 9602 */
+  "\xe3\x83\x95\xe3\x82\xa1\xe3\x83\xa9\xe3\x83\x83\xe3\x83\x88\xe3\x82\x99\0" /* offset 9612 */
+  "\xe3\x83\x95\xe3\x82\xa3\xe3\x83\xbc\xe3\x83\x88\0" /* offset 9631 */
+  "\xe3\x83\x95\xe3\x82\x99\xe3\x83\x83\xe3\x82\xb7\xe3\x82\xa7\xe3\x83\xab\0" /* offset 9644 */
+  "\xe3\x83\x95\xe3\x83\xa9\xe3\x83\xb3\0" /* offset 9663 */
+  "\xe3\x83\x98\xe3\x82\xaf\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9673 */
+  "\xe3\x83\x98\xe3\x82\x9a\xe3\x82\xbd\0" /* offset 9689 */
+  "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\x8b\xe3\x83\x92\0" /* offset 9699 */
+  "\xe3\x83\x98\xe3\x83\xab\xe3\x83\x84\0" /* offset 9712 */
+  "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xb3\xe3\x82\xb9\0" /* offset 9722 */
+  "\xe3\x83\x98\xe3\x82\x9a\xe3\x83\xbc\xe3\x82\xb7\xe3\x82\x99\0" /* offset 9735 */
+  "\xe3\x83\x98\xe3\x82\x99\xe3\x83\xbc\xe3\x82\xbf\0" /* offset 9751 */
+  "\xe3\x83\x9b\xe3\x82\x9a\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" /* offset 9764 */
+  "\xe3\x83\x9b\xe3\x82\x99\xe3\x83\xab\xe3\x83\x88\0" /* offset 9780 */
+  "\xe3\x83\x9b\xe3\x83\xb3\0" /* offset 9793 */
+  "\xe3\x83\x9b\xe3\x82\x9a\xe3\x83\xb3\xe3\x83\x88\xe3\x82\x99\0" /* offset 9800 */
+  "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9816 */
+  "\xe3\x83\x9b\xe3\x83\xbc\xe3\x83\xb3\0" /* offset 9826 */
+  "\xe3\x83\x9e\xe3\x82\xa4\xe3\x82\xaf\xe3\x83\xad\0" /* offset 9836 */
+  "\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xab\0" /* offset 9849 */
+  "\xe3\x83\x9e\xe3\x83\x83\xe3\x83\x8f\0" /* offset 9859 */
+  "\xe3\x83\x9e\xe3\x83\xab\xe3\x82\xaf\0" /* offset 9869 */
+  "\xe3\x83\x9e\xe3\x83\xb3\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" /* offset 9879 */
+  "\xe3\x83\x9f\xe3\x82\xaf\xe3\x83\xad\xe3\x83\xb3\0" /* offset 9895 */
+  "\xe3\x83\x9f\xe3\x83\xaa\0" /* offset 9908 */
+  "\xe3\x83\x9f\xe3\x83\xaa\xe3\x83\x8f\xe3\x82\x99\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9915 */
+  "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\0" /* offset 9934 */
+  "\xe3\x83\xa1\xe3\x82\xab\xe3\x82\x99\xe3\x83\x88\xe3\x83\xb3\0" /* offset 9944 */
+  "\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xab\0" /* offset 9960 */
+  "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\x88\xe3\x82\x99\0" /* offset 9973 */
+  "\xe3\x83\xa4\xe3\x83\xbc\xe3\x83\xab\0" /* offset 9986 */
+  "\xe3\x83\xa6\xe3\x82\xa2\xe3\x83\xb3\0" /* offset 9996 */
+  "\xe3\x83\xaa\xe3\x83\x83\xe3\x83\x88\xe3\x83\xab\0" /* offset 10006 */
+  "\xe3\x83\xaa\xe3\x83\xa9\0" /* offset 10019 */
+  "\xe3\x83\xab\xe3\x83\x92\xe3\x82\x9a\xe3\x83\xbc\0" /* offset 10026 */
+  "\xe3\x83\xab\xe3\x83\xbc\xe3\x83\x95\xe3\x82\x99\xe3\x83\xab\0" /* offset 10039 */
+  "\xe3\x83\xac\xe3\x83\xa0\0" /* offset 10055 */
+  "\xe3\x83\xac\xe3\x83\xb3\xe3\x83\x88\xe3\x82\xb1\xe3\x82\x99\xe3\x83\xb3\0" /* offset 10062 */
+  "\xe3\x83\xaf\xe3\x83\x83\xe3\x83\x88\0" /* offset 10081 */
+  "\x30\xe7\x82\xb9\0" /* offset 10091 */
+  "\x31\xe7\x82\xb9\0" /* offset 10096 */
+  "\x32\xe7\x82\xb9\0" /* offset 10101 */
+  "\x33\xe7\x82\xb9\0" /* offset 10106 */
+  "\x34\xe7\x82\xb9\0" /* offset 10111 */
+  "\x35\xe7\x82\xb9\0" /* offset 10116 */
+  "\x36\xe7\x82\xb9\0" /* offset 10121 */
+  "\x37\xe7\x82\xb9\0" /* offset 10126 */
+  "\x38\xe7\x82\xb9\0" /* offset 10131 */
+  "\x39\xe7\x82\xb9\0" /* offset 10136 */
+  "\x31\x30\xe7\x82\xb9\0" /* offset 10141 */
+  "\x31\x31\xe7\x82\xb9\0" /* offset 10147 */
+  "\x31\x32\xe7\x82\xb9\0" /* offset 10153 */
+  "\x31\x33\xe7\x82\xb9\0" /* offset 10159 */
+  "\x31\x34\xe7\x82\xb9\0" /* offset 10165 */
+  "\x31\x35\xe7\x82\xb9\0" /* offset 10171 */
+  "\x31\x36\xe7\x82\xb9\0" /* offset 10177 */
+  "\x31\x37\xe7\x82\xb9\0" /* offset 10183 */
+  "\x31\x38\xe7\x82\xb9\0" /* offset 10189 */
+  "\x31\x39\xe7\x82\xb9\0" /* offset 10195 */
+  "\x32\x30\xe7\x82\xb9\0" /* offset 10201 */
+  "\x32\x31\xe7\x82\xb9\0" /* offset 10207 */
+  "\x32\x32\xe7\x82\xb9\0" /* offset 10213 */
+  "\x32\x33\xe7\x82\xb9\0" /* offset 10219 */
+  "\x32\x34\xe7\x82\xb9\0" /* offset 10225 */
+  "\x68\x50\x61\0" /* offset 10231 */
+  "\x64\x61\0" /* offset 10235 */
+  "\x41\x55\0" /* offset 10238 */
+  "\x62\x61\x72\0" /* offset 10241 */
+  "\x6f\x56\0" /* offset 10245 */
+  "\x70\x63\0" /* offset 10248 */
+  "\x64\x6d\0" /* offset 10251 */
+  "\x64\x6d\x32\0" /* offset 10254 */
+  "\x64\x6d\x33\0" /* offset 10258 */
+  "\x49\x55\0" /* offset 10262 */
+  "\xe5\xb9\xb3\xe6\x88\x90\0" /* offset 10265 */
+  "\xe6\x98\xad\xe5\x92\x8c\0" /* offset 10272 */
+  "\xe5\xa4\xa7\xe6\xad\xa3\0" /* offset 10279 */
+  "\xe6\x98\x8e\xe6\xb2\xbb\0" /* offset 10286 */
+  "\xe6\xa0\xaa\xe5\xbc\x8f\xe4\xbc\x9a\xe7\xa4\xbe\0" /* offset 10293 */
+  "\x70\x41\0" /* offset 10306 */
+  "\x6e\x41\0" /* offset 10309 */
+  "\xce\xbc\x41\0" /* offset 10312 */
+  "\x6d\x41\0" /* offset 10316 */
+  "\x6b\x41\0" /* offset 10319 */
+  "\x4b\x42\0" /* offset 10322 */
+  "\x4d\x42\0" /* offset 10325 */
+  "\x47\x42\0" /* offset 10328 */
+  "\x63\x61\x6c\0" /* offset 10331 */
+  "\x6b\x63\x61\x6c\0" /* offset 10335 */
+  "\x70\x46\0" /* offset 10340 */
+  "\x6e\x46\0" /* offset 10343 */
+  "\xce\xbc\x46\0" /* offset 10346 */
+  "\xce\xbc\x67\0" /* offset 10350 */
+  "\x6d\x67\0" /* offset 10354 */
+  "\x6b\x67\0" /* offset 10357 */
+  "\x48\x7a\0" /* offset 10360 */
+  "\x6b\x48\x7a\0" /* offset 10363 */
+  "\x4d\x48\x7a\0" /* offset 10367 */
+  "\x47\x48\x7a\0" /* offset 10371 */
+  "\x54\x48\x7a\0" /* offset 10375 */
+  "\xce\xbc\x6c\0" /* offset 10379 */
+  "\x6d\x6c\0" /* offset 10383 */
+  "\x64\x6c\0" /* offset 10386 */
+  "\x6b\x6c\0" /* offset 10389 */
+  "\x66\x6d\0" /* offset 10392 */
+  "\x6e\x6d\0" /* offset 10395 */
+  "\xce\xbc\x6d\0" /* offset 10398 */
+  "\x6d\x6d\0" /* offset 10402 */
+  "\x63\x6d\0" /* offset 10405 */
+  "\x6b\x6d\0" /* offset 10408 */
+  "\x6d\x6d\x32\0" /* offset 10411 */
+  "\x63\x6d\x32\0" /* offset 10415 */
+  "\x6d\x32\0" /* offset 10419 */
+  "\x6b\x6d\x32\0" /* offset 10422 */
+  "\x6d\x6d\x33\0" /* offset 10426 */
+  "\x63\x6d\x33\0" /* offset 10430 */
+  "\x6d\x33\0" /* offset 10434 */
+  "\x6b\x6d\x33\0" /* offset 10437 */
+  "\x6d\xe2\x88\x95\x73\0" /* offset 10441 */
+  "\x6d\xe2\x88\x95\x73\x32\0" /* offset 10447 */
+  "\x50\x61\0" /* offset 10454 */
+  "\x6b\x50\x61\0" /* offset 10457 */
+  "\x4d\x50\x61\0" /* offset 10461 */
+  "\x47\x50\x61\0" /* offset 10465 */
+  "\x72\x61\x64\0" /* offset 10469 */
+  "\x72\x61\x64\xe2\x88\x95\x73\0" /* offset 10473 */
+  "\x72\x61\x64\xe2\x88\x95\x73\x32\0" /* offset 10481 */
+  "\x70\x73\0" /* offset 10490 */
+  "\x6e\x73\0" /* offset 10493 */
+  "\xce\xbc\x73\0" /* offset 10496 */
+  "\x6d\x73\0" /* offset 10500 */
+  "\x70\x56\0" /* offset 10503 */
+  "\x6e\x56\0" /* offset 10506 */
+  "\xce\xbc\x56\0" /* offset 10509 */
+  "\x6d\x56\0" /* offset 10513 */
+  "\x6b\x56\0" /* offset 10516 */
+  "\x4d\x56\0" /* offset 10519 */
+  "\x70\x57\0" /* offset 10522 */
+  "\x6e\x57\0" /* offset 10525 */
+  "\xce\xbc\x57\0" /* offset 10528 */
+  "\x6d\x57\0" /* offset 10532 */
+  "\x6b\x57\0" /* offset 10535 */
+  "\x4d\x57\0" /* offset 10538 */
+  "\x6b\xce\xa9\0" /* offset 10541 */
+  "\x4d\xce\xa9\0" /* offset 10545 */
+  "\x61\x2e\x6d\x2e\0" /* offset 10549 */
+  "\x42\x71\0" /* offset 10554 */
+  "\x63\x63\0" /* offset 10557 */
+  "\x63\x64\0" /* offset 10560 */
+  "\x43\xe2\x88\x95\x6b\x67\0" /* offset 10563 */
+  "\x43\x6f\x2e\0" /* offset 10570 */
+  "\x64\x42\0" /* offset 10574 */
+  "\x47\x79\0" /* offset 10577 */
+  "\x68\x61\0" /* offset 10580 */
+  "\x48\x50\0" /* offset 10583 */
+  "\x69\x6e\0" /* offset 10586 */
+  "\x4b\x4b\0" /* offset 10589 */
+  "\x4b\x4d\0" /* offset 10592 */
+  "\x6b\x74\0" /* offset 10595 */
+  "\x6c\x6d\0" /* offset 10598 */
+  "\x6c\x6e\0" /* offset 10601 */
+  "\x6c\x6f\x67\0" /* offset 10604 */
+  "\x6c\x78\0" /* offset 10608 */
+  "\x6d\x62\0" /* offset 10611 */
+  "\x6d\x69\x6c\0" /* offset 10614 */
+  "\x6d\x6f\x6c\0" /* offset 10618 */
+  "\x50\x48\0" /* offset 10622 */
+  "\x70\x2e\x6d\x2e\0" /* offset 10625 */
+  "\x50\x50\x4d\0" /* offset 10630 */
+  "\x50\x52\0" /* offset 10634 */
+  "\x73\x72\0" /* offset 10637 */
+  "\x53\x76\0" /* offset 10640 */
+  "\x57\x62\0" /* offset 10643 */
+  "\x56\xe2\x88\x95\x6d\0" /* offset 10646 */
+  "\x41\xe2\x88\x95\x6d\0" /* offset 10652 */
+  "\x31\xe6\x97\xa5\0" /* offset 10658 */
+  "\x32\xe6\x97\xa5\0" /* offset 10663 */
+  "\x33\xe6\x97\xa5\0" /* offset 10668 */
+  "\x34\xe6\x97\xa5\0" /* offset 10673 */
+  "\x35\xe6\x97\xa5\0" /* offset 10678 */
+  "\x36\xe6\x97\xa5\0" /* offset 10683 */
+  "\x37\xe6\x97\xa5\0" /* offset 10688 */
+  "\x38\xe6\x97\xa5\0" /* offset 10693 */
+  "\x39\xe6\x97\xa5\0" /* offset 10698 */
+  "\x31\x30\xe6\x97\xa5\0" /* offset 10703 */
+  "\x31\x31\xe6\x97\xa5\0" /* offset 10709 */
+  "\x31\x32\xe6\x97\xa5\0" /* offset 10715 */
+  "\x31\x33\xe6\x97\xa5\0" /* offset 10721 */
+  "\x31\x34\xe6\x97\xa5\0" /* offset 10727 */
+  "\x31\x35\xe6\x97\xa5\0" /* offset 10733 */
+  "\x31\x36\xe6\x97\xa5\0" /* offset 10739 */
+  "\x31\x37\xe6\x97\xa5\0" /* offset 10745 */
+  "\x31\x38\xe6\x97\xa5\0" /* offset 10751 */
+  "\x31\x39\xe6\x97\xa5\0" /* offset 10757 */
+  "\x32\x30\xe6\x97\xa5\0" /* offset 10763 */
+  "\x32\x31\xe6\x97\xa5\0" /* offset 10769 */
+  "\x32\x32\xe6\x97\xa5\0" /* offset 10775 */
+  "\x32\x33\xe6\x97\xa5\0" /* offset 10781 */
+  "\x32\x34\xe6\x97\xa5\0" /* offset 10787 */
+  "\x32\x35\xe6\x97\xa5\0" /* offset 10793 */
+  "\x32\x36\xe6\x97\xa5\0" /* offset 10799 */
+  "\x32\x37\xe6\x97\xa5\0" /* offset 10805 */
+  "\x32\x38\xe6\x97\xa5\0" /* offset 10811 */
+  "\x32\x39\xe6\x97\xa5\0" /* offset 10817 */
+  "\x33\x30\xe6\x97\xa5\0" /* offset 10823 */
+  "\x33\x31\xe6\x97\xa5\0" /* offset 10829 */
+  "\x67\x61\x6c\0" /* offset 10835 */
+  "\xe8\xb1\x88\0" /* offset 10839 */
+  "\xe6\x9b\xb4\0" /* offset 10843 */
+  "\xe8\xb3\x88\0" /* offset 10847 */
+  "\xe6\xbb\x91\0" /* offset 10851 */
+  "\xe4\xb8\xb2\0" /* offset 10855 */
+  "\xe5\x8f\xa5\0" /* offset 10859 */
+  "\xe5\xa5\x91\0" /* offset 10863 */
+  "\xe5\x96\x87\0" /* offset 10867 */
+  "\xe5\xa5\x88\0" /* offset 10871 */
+  "\xe6\x87\xb6\0" /* offset 10875 */
+  "\xe7\x99\xa9\0" /* offset 10879 */
+  "\xe7\xbe\x85\0" /* offset 10883 */
+  "\xe8\x98\xbf\0" /* offset 10887 */
+  "\xe8\x9e\xba\0" /* offset 10891 */
+  "\xe8\xa3\xb8\0" /* offset 10895 */
+  "\xe9\x82\x8f\0" /* offset 10899 */
+  "\xe6\xa8\x82\0" /* offset 10903 */
+  "\xe6\xb4\x9b\0" /* offset 10907 */
+  "\xe7\x83\x99\0" /* offset 10911 */
+  "\xe7\x8f\x9e\0" /* offset 10915 */
+  "\xe8\x90\xbd\0" /* offset 10919 */
+  "\xe9\x85\xaa\0" /* offset 10923 */
+  "\xe9\xa7\xb1\0" /* offset 10927 */
+  "\xe4\xba\x82\0" /* offset 10931 */
+  "\xe5\x8d\xb5\0" /* offset 10935 */
+  "\xe6\xac\x84\0" /* offset 10939 */
+  "\xe7\x88\x9b\0" /* offset 10943 */
+  "\xe8\x98\xad\0" /* offset 10947 */
+  "\xe9\xb8\x9e\0" /* offset 10951 */
+  "\xe5\xb5\x90\0" /* offset 10955 */
+  "\xe6\xbf\xab\0" /* offset 10959 */
+  "\xe8\x97\x8d\0" /* offset 10963 */
+  "\xe8\xa5\xa4\0" /* offset 10967 */
+  "\xe6\x8b\x89\0" /* offset 10971 */
+  "\xe8\x87\x98\0" /* offset 10975 */
+  "\xe8\xa0\x9f\0" /* offset 10979 */
+  "\xe5\xbb\x8a\0" /* offset 10983 */
+  "\xe6\x9c\x97\0" /* offset 10987 */
+  "\xe6\xb5\xaa\0" /* offset 10991 */
+  "\xe7\x8b\xbc\0" /* offset 10995 */
+  "\xe9\x83\x8e\0" /* offset 10999 */
+  "\xe4\xbe\x86\0" /* offset 11003 */
+  "\xe5\x86\xb7\0" /* offset 11007 */
+  "\xe5\x8b\x9e\0" /* offset 11011 */
+  "\xe6\x93\x84\0" /* offset 11015 */
+  "\xe6\xab\x93\0" /* offset 11019 */
+  "\xe7\x88\x90\0" /* offset 11023 */
+  "\xe7\x9b\xa7\0" /* offset 11027 */
+  "\xe8\x98\x86\0" /* offset 11031 */
+  "\xe8\x99\x9c\0" /* offset 11035 */
+  "\xe8\xb7\xaf\0" /* offset 11039 */
+  "\xe9\x9c\xb2\0" /* offset 11043 */
+  "\xe9\xad\xaf\0" /* offset 11047 */
+  "\xe9\xb7\xba\0" /* offset 11051 */
+  "\xe7\xa2\x8c\0" /* offset 11055 */
+  "\xe7\xa5\xbf\0" /* offset 11059 */
+  "\xe7\xb6\xa0\0" /* offset 11063 */
+  "\xe8\x8f\x89\0" /* offset 11067 */
+  "\xe9\x8c\x84\0" /* offset 11071 */
+  "\xe8\xab\x96\0" /* offset 11075 */
+  "\xe5\xa3\x9f\0" /* offset 11079 */
+  "\xe5\xbc\x84\0" /* offset 11083 */
+  "\xe7\xb1\xa0\0" /* offset 11087 */
+  "\xe8\x81\xbe\0" /* offset 11091 */
+  "\xe7\x89\xa2\0" /* offset 11095 */
+  "\xe7\xa3\x8a\0" /* offset 11099 */
+  "\xe8\xb3\x82\0" /* offset 11103 */
+  "\xe9\x9b\xb7\0" /* offset 11107 */
+  "\xe5\xa3\x98\0" /* offset 11111 */
+  "\xe5\xb1\xa2\0" /* offset 11115 */
+  "\xe6\xa8\x93\0" /* offset 11119 */
+  "\xe6\xb7\x9a\0" /* offset 11123 */
+  "\xe6\xbc\x8f\0" /* offset 11127 */
+  "\xe7\xb4\xaf\0" /* offset 11131 */
+  "\xe7\xb8\xb7\0" /* offset 11135 */
+  "\xe9\x99\x8b\0" /* offset 11139 */
+  "\xe5\x8b\x92\0" /* offset 11143 */
+  "\xe8\x82\x8b\0" /* offset 11147 */
+  "\xe5\x87\x9c\0" /* offset 11151 */
+  "\xe5\x87\x8c\0" /* offset 11155 */
+  "\xe7\xa8\x9c\0" /* offset 11159 */
+  "\xe7\xb6\xbe\0" /* offset 11163 */
+  "\xe8\x8f\xb1\0" /* offset 11167 */
+  "\xe9\x99\xb5\0" /* offset 11171 */
+  "\xe8\xae\x80\0" /* offset 11175 */
+  "\xe6\x8b\x8f\0" /* offset 11179 */
+  "\xe8\xab\xbe\0" /* offset 11183 */
+  "\xe4\xb8\xb9\0" /* offset 11187 */
+  "\xe5\xaf\xa7\0" /* offset 11191 */
+  "\xe6\x80\x92\0" /* offset 11195 */
+  "\xe7\x8e\x87\0" /* offset 11199 */
+  "\xe7\x95\xb0\0" /* offset 11203 */
+  "\xe5\x8c\x97\0" /* offset 11207 */
+  "\xe7\xa3\xbb\0" /* offset 11211 */
+  "\xe4\xbe\xbf\0" /* offset 11215 */
+  "\xe5\xbe\xa9\0" /* offset 11219 */
+  "\xe4\xb8\x8d\0" /* offset 11223 */
+  "\xe6\xb3\x8c\0" /* offset 11227 */
+  "\xe6\x95\xb8\0" /* offset 11231 */
+  "\xe7\xb4\xa2\0" /* offset 11235 */
+  "\xe5\x8f\x83\0" /* offset 11239 */
+  "\xe5\xa1\x9e\0" /* offset 11243 */
+  "\xe7\x9c\x81\0" /* offset 11247 */
+  "\xe8\x91\x89\0" /* offset 11251 */
+  "\xe8\xaa\xaa\0" /* offset 11255 */
+  "\xe6\xae\xba\0" /* offset 11259 */
+  "\xe6\xb2\x88\0" /* offset 11263 */
+  "\xe6\x8b\xbe\0" /* offset 11267 */
+  "\xe8\x8b\xa5\0" /* offset 11271 */
+  "\xe6\x8e\xa0\0" /* offset 11275 */
+  "\xe7\x95\xa5\0" /* offset 11279 */
+  "\xe4\xba\xae\0" /* offset 11283 */
+  "\xe5\x85\xa9\0" /* offset 11287 */
+  "\xe5\x87\x89\0" /* offset 11291 */
+  "\xe6\xa2\x81\0" /* offset 11295 */
+  "\xe7\xb3\xa7\0" /* offset 11299 */
+  "\xe8\x89\xaf\0" /* offset 11303 */
+  "\xe8\xab\x92\0" /* offset 11307 */
+  "\xe9\x87\x8f\0" /* offset 11311 */
+  "\xe5\x8b\xb5\0" /* offset 11315 */
+  "\xe5\x91\x82\0" /* offset 11319 */
+  "\xe5\xbb\xac\0" /* offset 11323 */
+  "\xe6\x97\x85\0" /* offset 11327 */
+  "\xe6\xbf\xbe\0" /* offset 11331 */
+  "\xe7\xa4\xaa\0" /* offset 11335 */
+  "\xe9\x96\xad\0" /* offset 11339 */
+  "\xe9\xa9\xaa\0" /* offset 11343 */
+  "\xe9\xba\x97\0" /* offset 11347 */
+  "\xe9\xbb\x8e\0" /* offset 11351 */
+  "\xe6\x9b\x86\0" /* offset 11355 */
+  "\xe6\xad\xb7\0" /* offset 11359 */
+  "\xe8\xbd\xa2\0" /* offset 11363 */
+  "\xe5\xb9\xb4\0" /* offset 11367 */
+  "\xe6\x86\x90\0" /* offset 11371 */
+  "\xe6\x88\x80\0" /* offset 11375 */
+  "\xe6\x92\x9a\0" /* offset 11379 */
+  "\xe6\xbc\xa3\0" /* offset 11383 */
+  "\xe7\x85\x89\0" /* offset 11387 */
+  "\xe7\x92\x89\0" /* offset 11391 */
+  "\xe7\xa7\x8a\0" /* offset 11395 */
+  "\xe7\xb7\xb4\0" /* offset 11399 */
+  "\xe8\x81\xaf\0" /* offset 11403 */
+  "\xe8\xbc\xa6\0" /* offset 11407 */
+  "\xe8\x93\xae\0" /* offset 11411 */
+  "\xe9\x80\xa3\0" /* offset 11415 */
+  "\xe9\x8d\x8a\0" /* offset 11419 */
+  "\xe5\x88\x97\0" /* offset 11423 */
+  "\xe5\x8a\xa3\0" /* offset 11427 */
+  "\xe5\x92\xbd\0" /* offset 11431 */
+  "\xe7\x83\x88\0" /* offset 11435 */
+  "\xe8\xa3\x82\0" /* offset 11439 */
+  "\xe5\xbb\x89\0" /* offset 11443 */
+  "\xe5\xbf\xb5\0" /* offset 11447 */
+  "\xe6\x8d\xbb\0" /* offset 11451 */
+  "\xe6\xae\xae\0" /* offset 11455 */
+  "\xe7\xb0\xbe\0" /* offset 11459 */
+  "\xe7\x8d\xb5\0" /* offset 11463 */
+  "\xe4\xbb\xa4\0" /* offset 11467 */
+  "\xe5\x9b\xb9\0" /* offset 11471 */
+  "\xe5\xb6\xba\0" /* offset 11475 */
+  "\xe6\x80\x9c\0" /* offset 11479 */
+  "\xe7\x8e\xb2\0" /* offset 11483 */
+  "\xe7\x91\xa9\0" /* offset 11487 */
+  "\xe7\xbe\x9a\0" /* offset 11491 */
+  "\xe8\x81\x86\0" /* offset 11495 */
+  "\xe9\x88\xb4\0" /* offset 11499 */
+  "\xe9\x9b\xb6\0" /* offset 11503 */
+  "\xe9\x9d\x88\0" /* offset 11507 */
+  "\xe9\xa0\x98\0" /* offset 11511 */
+  "\xe4\xbe\x8b\0" /* offset 11515 */
+  "\xe7\xa6\xae\0" /* offset 11519 */
+  "\xe9\x86\xb4\0" /* offset 11523 */
+  "\xe9\x9a\xb8\0" /* offset 11527 */
+  "\xe6\x83\xa1\0" /* offset 11531 */
+  "\xe4\xba\x86\0" /* offset 11535 */
+  "\xe5\x83\x9a\0" /* offset 11539 */
+  "\xe5\xaf\xae\0" /* offset 11543 */
+  "\xe5\xb0\xbf\0" /* offset 11547 */
+  "\xe6\x96\x99\0" /* offset 11551 */
+  "\xe7\x87\x8e\0" /* offset 11555 */
+  "\xe7\x99\x82\0" /* offset 11559 */
+  "\xe8\x93\xbc\0" /* offset 11563 */
+  "\xe9\x81\xbc\0" /* offset 11567 */
+  "\xe6\x9a\x88\0" /* offset 11571 */
+  "\xe9\x98\xae\0" /* offset 11575 */
+  "\xe5\x8a\x89\0" /* offset 11579 */
+  "\xe6\x9d\xbb\0" /* offset 11583 */
+  "\xe6\x9f\xb3\0" /* offset 11587 */
+  "\xe6\xb5\x81\0" /* offset 11591 */
+  "\xe6\xba\x9c\0" /* offset 11595 */
+  "\xe7\x90\x89\0" /* offset 11599 */
+  "\xe7\x95\x99\0" /* offset 11603 */
+  "\xe7\xa1\xab\0" /* offset 11607 */
+  "\xe7\xb4\x90\0" /* offset 11611 */
+  "\xe9\xa1\x9e\0" /* offset 11615 */
+  "\xe6\x88\xae\0" /* offset 11619 */
+  "\xe9\x99\xb8\0" /* offset 11623 */
+  "\xe5\x80\xab\0" /* offset 11627 */
+  "\xe5\xb4\x99\0" /* offset 11631 */
+  "\xe6\xb7\xaa\0" /* offset 11635 */
+  "\xe8\xbc\xaa\0" /* offset 11639 */
+  "\xe5\xbe\x8b\0" /* offset 11643 */
+  "\xe6\x85\x84\0" /* offset 11647 */
+  "\xe6\xa0\x97\0" /* offset 11651 */
+  "\xe9\x9a\x86\0" /* offset 11655 */
+  "\xe5\x88\xa9\0" /* offset 11659 */
+  "\xe5\x90\x8f\0" /* offset 11663 */
+  "\xe5\xb1\xa5\0" /* offset 11667 */
+  "\xe6\x98\x93\0" /* offset 11671 */
+  "\xe6\x9d\x8e\0" /* offset 11675 */
+  "\xe6\xa2\xa8\0" /* offset 11679 */
+  "\xe6\xb3\xa5\0" /* offset 11683 */
+  "\xe7\x90\x86\0" /* offset 11687 */
+  "\xe7\x97\xa2\0" /* offset 11691 */
+  "\xe7\xbd\xb9\0" /* offset 11695 */
+  "\xe8\xa3\x8f\0" /* offset 11699 */
+  "\xe8\xa3\xa1\0" /* offset 11703 */
+  "\xe9\x9b\xa2\0" /* offset 11707 */
+  "\xe5\x8c\xbf\0" /* offset 11711 */
+  "\xe6\xba\xba\0" /* offset 11715 */
+  "\xe5\x90\x9d\0" /* offset 11719 */
+  "\xe7\x87\x90\0" /* offset 11723 */
+  "\xe7\x92\x98\0" /* offset 11727 */
+  "\xe8\x97\xba\0" /* offset 11731 */
+  "\xe9\x9a\xa3\0" /* offset 11735 */
+  "\xe9\xb1\x97\0" /* offset 11739 */
+  "\xe9\xba\x9f\0" /* offset 11743 */
+  "\xe6\x9e\x97\0" /* offset 11747 */
+  "\xe6\xb7\x8b\0" /* offset 11751 */
+  "\xe8\x87\xa8\0" /* offset 11755 */
+  "\xe7\xac\xa0\0" /* offset 11759 */
+  "\xe7\xb2\x92\0" /* offset 11763 */
+  "\xe7\x8b\x80\0" /* offset 11767 */
+  "\xe7\x82\x99\0" /* offset 11771 */
+  "\xe8\xad\x98\0" /* offset 11775 */
+  "\xe4\xbb\x80\0" /* offset 11779 */
+  "\xe8\x8c\xb6\0" /* offset 11783 */
+  "\xe5\x88\xba\0" /* offset 11787 */
+  "\xe5\x88\x87\0" /* offset 11791 */
+  "\xe5\xba\xa6\0" /* offset 11795 */
+  "\xe6\x8b\x93\0" /* offset 11799 */
+  "\xe7\xb3\x96\0" /* offset 11803 */
+  "\xe5\xae\x85\0" /* offset 11807 */
+  "\xe6\xb4\x9e\0" /* offset 11811 */
+  "\xe6\x9a\xb4\0" /* offset 11815 */
+  "\xe8\xbc\xbb\0" /* offset 11819 */
+  "\xe9\x99\x8d\0" /* offset 11823 */
+  "\xe5\xbb\x93\0" /* offset 11827 */
+  "\xe5\x85\x80\0" /* offset 11831 */
+  "\xe5\x97\x80\0" /* offset 11835 */
+  "\xe5\xa1\x9a\0" /* offset 11839 */
+  "\xe6\x99\xb4\0" /* offset 11843 */
+  "\xe5\x87\x9e\0" /* offset 11847 */
+  "\xe7\x8c\xaa\0" /* offset 11851 */
+  "\xe7\x9b\x8a\0" /* offset 11855 */
+  "\xe7\xa4\xbc\0" /* offset 11859 */
+  "\xe7\xa5\x9e\0" /* offset 11863 */
+  "\xe7\xa5\xa5\0" /* offset 11867 */
+  "\xe7\xa6\x8f\0" /* offset 11871 */
+  "\xe9\x9d\x96\0" /* offset 11875 */
+  "\xe7\xb2\xbe\0" /* offset 11879 */
+  "\xe8\x98\x92\0" /* offset 11883 */
+  "\xe8\xab\xb8\0" /* offset 11887 */
+  "\xe9\x80\xb8\0" /* offset 11891 */
+  "\xe9\x83\xbd\0" /* offset 11895 */
+  "\xe9\xa3\xaf\0" /* offset 11899 */
+  "\xe9\xa3\xbc\0" /* offset 11903 */
+  "\xe9\xa4\xa8\0" /* offset 11907 */
+  "\xe9\xb6\xb4\0" /* offset 11911 */
+  "\xe4\xbe\xae\0" /* offset 11915 */
+  "\xe5\x83\xa7\0" /* offset 11919 */
+  "\xe5\x85\x8d\0" /* offset 11923 */
+  "\xe5\x8b\x89\0" /* offset 11927 */
+  "\xe5\x8b\xa4\0" /* offset 11931 */
+  "\xe5\x8d\x91\0" /* offset 11935 */
+  "\xe5\x96\x9d\0" /* offset 11939 */
+  "\xe5\x98\x86\0" /* offset 11943 */
+  "\xe5\x99\xa8\0" /* offset 11947 */
+  "\xe5\xa1\x80\0" /* offset 11951 */
+  "\xe5\xa2\xa8\0" /* offset 11955 */
+  "\xe5\xb1\xa4\0" /* offset 11959 */
+  "\xe6\x82\x94\0" /* offset 11963 */
+  "\xe6\x85\xa8\0" /* offset 11967 */
+  "\xe6\x86\x8e\0" /* offset 11971 */
+  "\xe6\x87\xb2\0" /* offset 11975 */
+  "\xe6\x95\x8f\0" /* offset 11979 */
+  "\xe6\x97\xa2\0" /* offset 11983 */
+  "\xe6\x9a\x91\0" /* offset 11987 */
+  "\xe6\xa2\x85\0" /* offset 11991 */
+  "\xe6\xb5\xb7\0" /* offset 11995 */
+  "\xe6\xb8\x9a\0" /* offset 11999 */
+  "\xe6\xbc\xa2\0" /* offset 12003 */
+  "\xe7\x85\xae\0" /* offset 12007 */
+  "\xe7\x88\xab\0" /* offset 12011 */
+  "\xe7\x90\xa2\0" /* offset 12015 */
+  "\xe7\xa2\x91\0" /* offset 12019 */
+  "\xe7\xa5\x89\0" /* offset 12023 */
+  "\xe7\xa5\x88\0" /* offset 12027 */
+  "\xe7\xa5\x90\0" /* offset 12031 */
+  "\xe7\xa5\x96\0" /* offset 12035 */
+  "\xe7\xa6\x8d\0" /* offset 12039 */
+  "\xe7\xa6\x8e\0" /* offset 12043 */
+  "\xe7\xa9\x80\0" /* offset 12047 */
+  "\xe7\xaa\x81\0" /* offset 12051 */
+  "\xe7\xaf\x80\0" /* offset 12055 */
+  "\xe7\xb8\x89\0" /* offset 12059 */
+  "\xe7\xb9\x81\0" /* offset 12063 */
+  "\xe7\xbd\xb2\0" /* offset 12067 */
+  "\xe8\x80\x85\0" /* offset 12071 */
+  "\xe8\x87\xad\0" /* offset 12075 */
+  "\xe8\x89\xb9\0" /* offset 12079 */
+  "\xe8\x91\x97\0" /* offset 12083 */
+  "\xe8\xa4\x90\0" /* offset 12087 */
+  "\xe8\xa6\x96\0" /* offset 12091 */
+  "\xe8\xac\x81\0" /* offset 12095 */
+  "\xe8\xac\xb9\0" /* offset 12099 */
+  "\xe8\xb3\x93\0" /* offset 12103 */
+  "\xe8\xb4\x88\0" /* offset 12107 */
+  "\xe8\xbe\xb6\0" /* offset 12111 */
+  "\xe9\x9b\xa3\0" /* offset 12115 */
+  "\xe9\x9f\xbf\0" /* offset 12119 */
+  "\xe9\xa0\xbb\0" /* offset 12123 */
+  "\xe4\xb8\xa6\0" /* offset 12127 */
+  "\xe5\x86\xb5\0" /* offset 12131 */
+  "\xe5\x85\xa8\0" /* offset 12135 */
+  "\xe4\xbe\x80\0" /* offset 12139 */
+  "\xe5\x85\x85\0" /* offset 12143 */
+  "\xe5\x86\x80\0" /* offset 12147 */
+  "\xe5\x8b\x87\0" /* offset 12151 */
+  "\xe5\x8b\xba\0" /* offset 12155 */
+  "\xe5\x95\x95\0" /* offset 12159 */
+  "\xe5\x96\x99\0" /* offset 12163 */
+  "\xe5\x97\xa2\0" /* offset 12167 */
+  "\xe5\xa2\xb3\0" /* offset 12171 */
+  "\xe5\xa5\x84\0" /* offset 12175 */
+  "\xe5\xa5\x94\0" /* offset 12179 */
+  "\xe5\xa9\xa2\0" /* offset 12183 */
+  "\xe5\xac\xa8\0" /* offset 12187 */
+  "\xe5\xbb\x92\0" /* offset 12191 */
+  "\xe5\xbb\x99\0" /* offset 12195 */
+  "\xe5\xbd\xa9\0" /* offset 12199 */
+  "\xe5\xbe\xad\0" /* offset 12203 */
+  "\xe6\x83\x98\0" /* offset 12207 */
+  "\xe6\x85\x8e\0" /* offset 12211 */
+  "\xe6\x84\x88\0" /* offset 12215 */
+  "\xe6\x85\xa0\0" /* offset 12219 */
+  "\xe6\x88\xb4\0" /* offset 12223 */
+  "\xe6\x8f\x84\0" /* offset 12227 */
+  "\xe6\x90\x9c\0" /* offset 12231 */
+  "\xe6\x91\x92\0" /* offset 12235 */
+  "\xe6\x95\x96\0" /* offset 12239 */
+  "\xe6\x9c\x9b\0" /* offset 12243 */
+  "\xe6\x9d\x96\0" /* offset 12247 */
+  "\xe6\xbb\x9b\0" /* offset 12251 */
+  "\xe6\xbb\x8b\0" /* offset 12255 */
+  "\xe7\x80\x9e\0" /* offset 12259 */
+  "\xe7\x9e\xa7\0" /* offset 12263 */
+  "\xe7\x88\xb5\0" /* offset 12267 */
+  "\xe7\x8a\xaf\0" /* offset 12271 */
+  "\xe7\x91\xb1\0" /* offset 12275 */
+  "\xe7\x94\x86\0" /* offset 12279 */
+  "\xe7\x94\xbb\0" /* offset 12283 */
+  "\xe7\x98\x9d\0" /* offset 12287 */
+  "\xe7\x98\x9f\0" /* offset 12291 */
+  "\xe7\x9b\x9b\0" /* offset 12295 */
+  "\xe7\x9b\xb4\0" /* offset 12299 */
+  "\xe7\x9d\x8a\0" /* offset 12303 */
+  "\xe7\x9d\x80\0" /* offset 12307 */
+  "\xe7\xa3\x8c\0" /* offset 12311 */
+  "\xe7\xaa\xb1\0" /* offset 12315 */
+  "\xe7\xb1\xbb\0" /* offset 12319 */
+  "\xe7\xb5\x9b\0" /* offset 12323 */
+  "\xe7\xbc\xbe\0" /* offset 12327 */
+  "\xe8\x8d\x92\0" /* offset 12331 */
+  "\xe8\x8f\xaf\0" /* offset 12335 */
+  "\xe8\x9d\xb9\0" /* offset 12339 */
+  "\xe8\xa5\x81\0" /* offset 12343 */
+  "\xe8\xa6\x86\0" /* offset 12347 */
+  "\xe8\xaa\xbf\0" /* offset 12351 */
+  "\xe8\xab\x8b\0" /* offset 12355 */
+  "\xe8\xab\xad\0" /* offset 12359 */
+  "\xe8\xae\x8a\0" /* offset 12363 */
+  "\xe8\xbc\xb8\0" /* offset 12367 */
+  "\xe9\x81\xb2\0" /* offset 12371 */
+  "\xe9\x86\x99\0" /* offset 12375 */
+  "\xe9\x89\xb6\0" /* offset 12379 */
+  "\xe9\x99\xbc\0" /* offset 12383 */
+  "\xe9\x9f\x9b\0" /* offset 12387 */
+  "\xe9\xa0\x8b\0" /* offset 12391 */
+  "\xe9\xac\x92\0" /* offset 12395 */
+  "\xf0\xa2\xa1\x8a\0" /* offset 12399 */
+  "\xf0\xa2\xa1\x84\0" /* offset 12404 */
+  "\xf0\xa3\x8f\x95\0" /* offset 12409 */
+  "\xe3\xae\x9d\0" /* offset 12414 */
+  "\xe4\x80\x98\0" /* offset 12418 */
+  "\xe4\x80\xb9\0" /* offset 12422 */
+  "\xf0\xa5\x89\x89\0" /* offset 12426 */
+  "\xf0\xa5\xb3\x90\0" /* offset 12431 */
+  "\xf0\xa7\xbb\x93\0" /* offset 12436 */
+  "\xe9\xbd\x83\0" /* offset 12441 */
+  "\xe9\xbe\x8e\0" /* offset 12445 */
+  "\x66\x66\0" /* offset 12449 */
+  "\x66\x69\0" /* offset 12452 */
+  "\x66\x6c\0" /* offset 12455 */
+  "\x66\x66\x69\0" /* offset 12458 */
+  "\x66\x66\x6c\0" /* offset 12462 */
+  "\x73\x74\0" /* offset 12466 */
+  "\xd5\xb4\xd5\xb6\0" /* offset 12469 */
+  "\xd5\xb4\xd5\xa5\0" /* offset 12474 */
+  "\xd5\xb4\xd5\xab\0" /* offset 12479 */
+  "\xd5\xbe\xd5\xb6\0" /* offset 12484 */
+  "\xd5\xb4\xd5\xad\0" /* offset 12489 */
+  "\xd7\x99\xd6\xb4\0" /* offset 12494 */
+  "\xd7\xb2\xd6\xb7\0" /* offset 12499 */
+  "\xd7\xa2\0" /* offset 12504 */
+  "\xd7\x94\0" /* offset 12507 */
+  "\xd7\x9b\0" /* offset 12510 */
+  "\xd7\x9c\0" /* offset 12513 */
+  "\xd7\x9d\0" /* offset 12516 */
+  "\xd7\xa8\0" /* offset 12519 */
+  "\xd7\xaa\0" /* offset 12522 */
+  "\xd7\xa9\xd7\x81\0" /* offset 12525 */
+  "\xd7\xa9\xd7\x82\0" /* offset 12530 */
+  "\xd7\xa9\xd6\xbc\xd7\x81\0" /* offset 12535 */
+  "\xd7\xa9\xd6\xbc\xd7\x82\0" /* offset 12542 */
+  "\xd7\x90\xd6\xb7\0" /* offset 12549 */
+  "\xd7\x90\xd6\xb8\0" /* offset 12554 */
+  "\xd7\x90\xd6\xbc\0" /* offset 12559 */
+  "\xd7\x91\xd6\xbc\0" /* offset 12564 */
+  "\xd7\x92\xd6\xbc\0" /* offset 12569 */
+  "\xd7\x93\xd6\xbc\0" /* offset 12574 */
+  "\xd7\x94\xd6\xbc\0" /* offset 12579 */
+  "\xd7\x95\xd6\xbc\0" /* offset 12584 */
+  "\xd7\x96\xd6\xbc\0" /* offset 12589 */
+  "\xd7\x98\xd6\xbc\0" /* offset 12594 */
+  "\xd7\x99\xd6\xbc\0" /* offset 12599 */
+  "\xd7\x9a\xd6\xbc\0" /* offset 12604 */
+  "\xd7\x9b\xd6\xbc\0" /* offset 12609 */
+  "\xd7\x9c\xd6\xbc\0" /* offset 12614 */
+  "\xd7\x9e\xd6\xbc\0" /* offset 12619 */
+  "\xd7\xa0\xd6\xbc\0" /* offset 12624 */
+  "\xd7\xa1\xd6\xbc\0" /* offset 12629 */
+  "\xd7\xa3\xd6\xbc\0" /* offset 12634 */
+  "\xd7\xa4\xd6\xbc\0" /* offset 12639 */
+  "\xd7\xa6\xd6\xbc\0" /* offset 12644 */
+  "\xd7\xa7\xd6\xbc\0" /* offset 12649 */
+  "\xd7\xa8\xd6\xbc\0" /* offset 12654 */
+  "\xd7\xa9\xd6\xbc\0" /* offset 12659 */
+  "\xd7\xaa\xd6\xbc\0" /* offset 12664 */
+  "\xd7\x95\xd6\xb9\0" /* offset 12669 */
+  "\xd7\x91\xd6\xbf\0" /* offset 12674 */
+  "\xd7\x9b\xd6\xbf\0" /* offset 12679 */
+  "\xd7\xa4\xd6\xbf\0" /* offset 12684 */
+  "\xd7\x90\xd7\x9c\0" /* offset 12689 */
+  "\xd9\xb1\0" /* offset 12694 */
+  "\xd9\xbb\0" /* offset 12697 */
+  "\xd9\xbe\0" /* offset 12700 */
+  "\xda\x80\0" /* offset 12703 */
+  "\xd9\xba\0" /* offset 12706 */
+  "\xd9\xbf\0" /* offset 12709 */
+  "\xd9\xb9\0" /* offset 12712 */
+  "\xda\xa4\0" /* offset 12715 */
+  "\xda\xa6\0" /* offset 12718 */
+  "\xda\x84\0" /* offset 12721 */
+  "\xda\x83\0" /* offset 12724 */
+  "\xda\x86\0" /* offset 12727 */
+  "\xda\x87\0" /* offset 12730 */
+  "\xda\x8d\0" /* offset 12733 */
+  "\xda\x8c\0" /* offset 12736 */
+  "\xda\x8e\0" /* offset 12739 */
+  "\xda\x88\0" /* offset 12742 */
+  "\xda\x98\0" /* offset 12745 */
+  "\xda\x91\0" /* offset 12748 */
+  "\xda\xa9\0" /* offset 12751 */
+  "\xda\xaf\0" /* offset 12754 */
+  "\xda\xb3\0" /* offset 12757 */
+  "\xda\xb1\0" /* offset 12760 */
+  "\xda\xba\0" /* offset 12763 */
+  "\xda\xbb\0" /* offset 12766 */
+  "\xdb\x81\0" /* offset 12769 */
+  "\xda\xbe\0" /* offset 12772 */
+  "\xdb\x92\0" /* offset 12775 */
+  "\xda\xad\0" /* offset 12778 */
+  "\xdb\x87\0" /* offset 12781 */
+  "\xdb\x86\0" /* offset 12784 */
+  "\xdb\x88\0" /* offset 12787 */
+  "\xdb\x8b\0" /* offset 12790 */
+  "\xdb\x85\0" /* offset 12793 */
+  "\xdb\x89\0" /* offset 12796 */
+  "\xdb\x90\0" /* offset 12799 */
+  "\xd9\x89\0" /* offset 12802 */
+  "\xd9\x8a\xd9\x94\xd8\xa7\0" /* offset 12805 */
+  "\xd9\x8a\xd9\x94\xdb\x95\0" /* offset 12812 */
+  "\xd9\x8a\xd9\x94\xd9\x88\0" /* offset 12819 */
+  "\xd9\x8a\xd9\x94\xdb\x87\0" /* offset 12826 */
+  "\xd9\x8a\xd9\x94\xdb\x86\0" /* offset 12833 */
+  "\xd9\x8a\xd9\x94\xdb\x88\0" /* offset 12840 */
+  "\xd9\x8a\xd9\x94\xdb\x90\0" /* offset 12847 */
+  "\xd9\x8a\xd9\x94\xd9\x89\0" /* offset 12854 */
+  "\xdb\x8c\0" /* offset 12861 */
+  "\xd9\x8a\xd9\x94\xd8\xac\0" /* offset 12864 */
+  "\xd9\x8a\xd9\x94\xd8\xad\0" /* offset 12871 */
+  "\xd9\x8a\xd9\x94\xd9\x85\0" /* offset 12878 */
+  "\xd9\x8a\xd9\x94\xd9\x8a\0" /* offset 12885 */
+  "\xd8\xa8\xd8\xac\0" /* offset 12892 */
+  "\xd8\xa8\xd8\xad\0" /* offset 12897 */
+  "\xd8\xa8\xd8\xae\0" /* offset 12902 */
+  "\xd8\xa8\xd9\x85\0" /* offset 12907 */
+  "\xd8\xa8\xd9\x89\0" /* offset 12912 */
+  "\xd8\xa8\xd9\x8a\0" /* offset 12917 */
+  "\xd8\xaa\xd8\xac\0" /* offset 12922 */
+  "\xd8\xaa\xd8\xad\0" /* offset 12927 */
+  "\xd8\xaa\xd8\xae\0" /* offset 12932 */
+  "\xd8\xaa\xd9\x85\0" /* offset 12937 */
+  "\xd8\xaa\xd9\x89\0" /* offset 12942 */
+  "\xd8\xaa\xd9\x8a\0" /* offset 12947 */
+  "\xd8\xab\xd8\xac\0" /* offset 12952 */
+  "\xd8\xab\xd9\x85\0" /* offset 12957 */
+  "\xd8\xab\xd9\x89\0" /* offset 12962 */
+  "\xd8\xab\xd9\x8a\0" /* offset 12967 */
+  "\xd8\xac\xd8\xad\0" /* offset 12972 */
+  "\xd8\xac\xd9\x85\0" /* offset 12977 */
+  "\xd8\xad\xd8\xac\0" /* offset 12982 */
+  "\xd8\xad\xd9\x85\0" /* offset 12987 */
+  "\xd8\xae\xd8\xac\0" /* offset 12992 */
+  "\xd8\xae\xd8\xad\0" /* offset 12997 */
+  "\xd8\xae\xd9\x85\0" /* offset 13002 */
+  "\xd8\xb3\xd8\xac\0" /* offset 13007 */
+  "\xd8\xb3\xd8\xad\0" /* offset 13012 */
+  "\xd8\xb3\xd8\xae\0" /* offset 13017 */
+  "\xd8\xb3\xd9\x85\0" /* offset 13022 */
+  "\xd8\xb5\xd8\xad\0" /* offset 13027 */
+  "\xd8\xb5\xd9\x85\0" /* offset 13032 */
+  "\xd8\xb6\xd8\xac\0" /* offset 13037 */
+  "\xd8\xb6\xd8\xad\0" /* offset 13042 */
+  "\xd8\xb6\xd8\xae\0" /* offset 13047 */
+  "\xd8\xb6\xd9\x85\0" /* offset 13052 */
+  "\xd8\xb7\xd8\xad\0" /* offset 13057 */
+  "\xd8\xb7\xd9\x85\0" /* offset 13062 */
+  "\xd8\xb8\xd9\x85\0" /* offset 13067 */
+  "\xd8\xb9\xd8\xac\0" /* offset 13072 */
+  "\xd8\xb9\xd9\x85\0" /* offset 13077 */
+  "\xd8\xba\xd8\xac\0" /* offset 13082 */
+  "\xd8\xba\xd9\x85\0" /* offset 13087 */
+  "\xd9\x81\xd8\xac\0" /* offset 13092 */
+  "\xd9\x81\xd8\xad\0" /* offset 13097 */
+  "\xd9\x81\xd8\xae\0" /* offset 13102 */
+  "\xd9\x81\xd9\x85\0" /* offset 13107 */
+  "\xd9\x81\xd9\x89\0" /* offset 13112 */
+  "\xd9\x81\xd9\x8a\0" /* offset 13117 */
+  "\xd9\x82\xd8\xad\0" /* offset 13122 */
+  "\xd9\x82\xd9\x85\0" /* offset 13127 */
+  "\xd9\x82\xd9\x89\0" /* offset 13132 */
+  "\xd9\x82\xd9\x8a\0" /* offset 13137 */
+  "\xd9\x83\xd8\xa7\0" /* offset 13142 */
+  "\xd9\x83\xd8\xac\0" /* offset 13147 */
+  "\xd9\x83\xd8\xad\0" /* offset 13152 */
+  "\xd9\x83\xd8\xae\0" /* offset 13157 */
+  "\xd9\x83\xd9\x84\0" /* offset 13162 */
+  "\xd9\x83\xd9\x85\0" /* offset 13167 */
+  "\xd9\x83\xd9\x89\0" /* offset 13172 */
+  "\xd9\x83\xd9\x8a\0" /* offset 13177 */
+  "\xd9\x84\xd8\xac\0" /* offset 13182 */
+  "\xd9\x84\xd8\xad\0" /* offset 13187 */
+  "\xd9\x84\xd8\xae\0" /* offset 13192 */
+  "\xd9\x84\xd9\x85\0" /* offset 13197 */
+  "\xd9\x84\xd9\x89\0" /* offset 13202 */
+  "\xd9\x84\xd9\x8a\0" /* offset 13207 */
+  "\xd9\x85\xd8\xac\0" /* offset 13212 */
+  "\xd9\x85\xd8\xad\0" /* offset 13217 */
+  "\xd9\x85\xd8\xae\0" /* offset 13222 */
+  "\xd9\x85\xd9\x85\0" /* offset 13227 */
+  "\xd9\x85\xd9\x89\0" /* offset 13232 */
+  "\xd9\x85\xd9\x8a\0" /* offset 13237 */
+  "\xd9\x86\xd8\xac\0" /* offset 13242 */
+  "\xd9\x86\xd8\xad\0" /* offset 13247 */
+  "\xd9\x86\xd8\xae\0" /* offset 13252 */
+  "\xd9\x86\xd9\x85\0" /* offset 13257 */
+  "\xd9\x86\xd9\x89\0" /* offset 13262 */
+  "\xd9\x86\xd9\x8a\0" /* offset 13267 */
+  "\xd9\x87\xd8\xac\0" /* offset 13272 */
+  "\xd9\x87\xd9\x85\0" /* offset 13277 */
+  "\xd9\x87\xd9\x89\0" /* offset 13282 */
+  "\xd9\x87\xd9\x8a\0" /* offset 13287 */
+  "\xd9\x8a\xd8\xac\0" /* offset 13292 */
+  "\xd9\x8a\xd8\xad\0" /* offset 13297 */
+  "\xd9\x8a\xd8\xae\0" /* offset 13302 */
+  "\xd9\x8a\xd9\x85\0" /* offset 13307 */
+  "\xd9\x8a\xd9\x89\0" /* offset 13312 */
+  "\xd9\x8a\xd9\x8a\0" /* offset 13317 */
+  "\xd8\xb0\xd9\xb0\0" /* offset 13322 */
+  "\xd8\xb1\xd9\xb0\0" /* offset 13327 */
+  "\xd9\x89\xd9\xb0\0" /* offset 13332 */
+  "\x20\xd9\x8c\xd9\x91\0" /* offset 13337 */
+  "\x20\xd9\x8d\xd9\x91\0" /* offset 13343 */
+  "\x20\xd9\x8e\xd9\x91\0" /* offset 13349 */
+  "\x20\xd9\x8f\xd9\x91\0" /* offset 13355 */
+  "\x20\xd9\x90\xd9\x91\0" /* offset 13361 */
+  "\x20\xd9\x91\xd9\xb0\0" /* offset 13367 */
+  "\xd9\x8a\xd9\x94\xd8\xb1\0" /* offset 13373 */
+  "\xd9\x8a\xd9\x94\xd8\xb2\0" /* offset 13380 */
+  "\xd9\x8a\xd9\x94\xd9\x86\0" /* offset 13387 */
+  "\xd8\xa8\xd8\xb1\0" /* offset 13394 */
+  "\xd8\xa8\xd8\xb2\0" /* offset 13399 */
+  "\xd8\xa8\xd9\x86\0" /* offset 13404 */
+  "\xd8\xaa\xd8\xb1\0" /* offset 13409 */
+  "\xd8\xaa\xd8\xb2\0" /* offset 13414 */
+  "\xd8\xaa\xd9\x86\0" /* offset 13419 */
+  "\xd8\xab\xd8\xb1\0" /* offset 13424 */
+  "\xd8\xab\xd8\xb2\0" /* offset 13429 */
+  "\xd8\xab\xd9\x86\0" /* offset 13434 */
+  "\xd9\x85\xd8\xa7\0" /* offset 13439 */
+  "\xd9\x86\xd8\xb1\0" /* offset 13444 */
+  "\xd9\x86\xd8\xb2\0" /* offset 13449 */
+  "\xd9\x86\xd9\x86\0" /* offset 13454 */
+  "\xd9\x8a\xd8\xb1\0" /* offset 13459 */
+  "\xd9\x8a\xd8\xb2\0" /* offset 13464 */
+  "\xd9\x8a\xd9\x86\0" /* offset 13469 */
+  "\xd9\x8a\xd9\x94\xd8\xae\0" /* offset 13474 */
+  "\xd9\x8a\xd9\x94\xd9\x87\0" /* offset 13481 */
+  "\xd8\xa8\xd9\x87\0" /* offset 13488 */
+  "\xd8\xaa\xd9\x87\0" /* offset 13493 */
+  "\xd8\xb5\xd8\xae\0" /* offset 13498 */
+  "\xd9\x84\xd9\x87\0" /* offset 13503 */
+  "\xd9\x86\xd9\x87\0" /* offset 13508 */
+  "\xd9\x87\xd9\xb0\0" /* offset 13513 */
+  "\xd9\x8a\xd9\x87\0" /* offset 13518 */
+  "\xd8\xab\xd9\x87\0" /* offset 13523 */
+  "\xd8\xb3\xd9\x87\0" /* offset 13528 */
+  "\xd8\xb4\xd9\x85\0" /* offset 13533 */
+  "\xd8\xb4\xd9\x87\0" /* offset 13538 */
+  "\xd9\x80\xd9\x8e\xd9\x91\0" /* offset 13543 */
+  "\xd9\x80\xd9\x8f\xd9\x91\0" /* offset 13550 */
+  "\xd9\x80\xd9\x90\xd9\x91\0" /* offset 13557 */
+  "\xd8\xb7\xd9\x89\0" /* offset 13564 */
+  "\xd8\xb7\xd9\x8a\0" /* offset 13569 */
+  "\xd8\xb9\xd9\x89\0" /* offset 13574 */
+  "\xd8\xb9\xd9\x8a\0" /* offset 13579 */
+  "\xd8\xba\xd9\x89\0" /* offset 13584 */
+  "\xd8\xba\xd9\x8a\0" /* offset 13589 */
+  "\xd8\xb3\xd9\x89\0" /* offset 13594 */
+  "\xd8\xb3\xd9\x8a\0" /* offset 13599 */
+  "\xd8\xb4\xd9\x89\0" /* offset 13604 */
+  "\xd8\xb4\xd9\x8a\0" /* offset 13609 */
+  "\xd8\xad\xd9\x89\0" /* offset 13614 */
+  "\xd8\xad\xd9\x8a\0" /* offset 13619 */
+  "\xd8\xac\xd9\x89\0" /* offset 13624 */
+  "\xd8\xac\xd9\x8a\0" /* offset 13629 */
+  "\xd8\xae\xd9\x89\0" /* offset 13634 */
+  "\xd8\xae\xd9\x8a\0" /* offset 13639 */
+  "\xd8\xb5\xd9\x89\0" /* offset 13644 */
+  "\xd8\xb5\xd9\x8a\0" /* offset 13649 */
+  "\xd8\xb6\xd9\x89\0" /* offset 13654 */
+  "\xd8\xb6\xd9\x8a\0" /* offset 13659 */
+  "\xd8\xb4\xd8\xac\0" /* offset 13664 */
+  "\xd8\xb4\xd8\xad\0" /* offset 13669 */
+  "\xd8\xb4\xd8\xae\0" /* offset 13674 */
+  "\xd8\xb4\xd8\xb1\0" /* offset 13679 */
+  "\xd8\xb3\xd8\xb1\0" /* offset 13684 */
+  "\xd8\xb5\xd8\xb1\0" /* offset 13689 */
+  "\xd8\xb6\xd8\xb1\0" /* offset 13694 */
+  "\xd8\xa7\xd9\x8b\0" /* offset 13699 */
+  "\xd8\xaa\xd8\xac\xd9\x85\0" /* offset 13704 */
+  "\xd8\xaa\xd8\xad\xd8\xac\0" /* offset 13711 */
+  "\xd8\xaa\xd8\xad\xd9\x85\0" /* offset 13718 */
+  "\xd8\xaa\xd8\xae\xd9\x85\0" /* offset 13725 */
+  "\xd8\xaa\xd9\x85\xd8\xac\0" /* offset 13732 */
+  "\xd8\xaa\xd9\x85\xd8\xad\0" /* offset 13739 */
+  "\xd8\xaa\xd9\x85\xd8\xae\0" /* offset 13746 */
+  "\xd8\xac\xd9\x85\xd8\xad\0" /* offset 13753 */
+  "\xd8\xad\xd9\x85\xd9\x8a\0" /* offset 13760 */
+  "\xd8\xad\xd9\x85\xd9\x89\0" /* offset 13767 */
+  "\xd8\xb3\xd8\xad\xd8\xac\0" /* offset 13774 */
+  "\xd8\xb3\xd8\xac\xd8\xad\0" /* offset 13781 */
+  "\xd8\xb3\xd8\xac\xd9\x89\0" /* offset 13788 */
+  "\xd8\xb3\xd9\x85\xd8\xad\0" /* offset 13795 */
+  "\xd8\xb3\xd9\x85\xd8\xac\0" /* offset 13802 */
+  "\xd8\xb3\xd9\x85\xd9\x85\0" /* offset 13809 */
+  "\xd8\xb5\xd8\xad\xd8\xad\0" /* offset 13816 */
+  "\xd8\xb5\xd9\x85\xd9\x85\0" /* offset 13823 */
+  "\xd8\xb4\xd8\xad\xd9\x85\0" /* offset 13830 */
+  "\xd8\xb4\xd8\xac\xd9\x8a\0" /* offset 13837 */
+  "\xd8\xb4\xd9\x85\xd8\xae\0" /* offset 13844 */
+  "\xd8\xb4\xd9\x85\xd9\x85\0" /* offset 13851 */
+  "\xd8\xb6\xd8\xad\xd9\x89\0" /* offset 13858 */
+  "\xd8\xb6\xd8\xae\xd9\x85\0" /* offset 13865 */
+  "\xd8\xb7\xd9\x85\xd8\xad\0" /* offset 13872 */
+  "\xd8\xb7\xd9\x85\xd9\x85\0" /* offset 13879 */
+  "\xd8\xb7\xd9\x85\xd9\x8a\0" /* offset 13886 */
+  "\xd8\xb9\xd8\xac\xd9\x85\0" /* offset 13893 */
+  "\xd8\xb9\xd9\x85\xd9\x85\0" /* offset 13900 */
+  "\xd8\xb9\xd9\x85\xd9\x89\0" /* offset 13907 */
+  "\xd8\xba\xd9\x85\xd9\x85\0" /* offset 13914 */
+  "\xd8\xba\xd9\x85\xd9\x8a\0" /* offset 13921 */
+  "\xd8\xba\xd9\x85\xd9\x89\0" /* offset 13928 */
+  "\xd9\x81\xd8\xae\xd9\x85\0" /* offset 13935 */
+  "\xd9\x82\xd9\x85\xd8\xad\0" /* offset 13942 */
+  "\xd9\x82\xd9\x85\xd9\x85\0" /* offset 13949 */
+  "\xd9\x84\xd8\xad\xd9\x85\0" /* offset 13956 */
+  "\xd9\x84\xd8\xad\xd9\x8a\0" /* offset 13963 */
+  "\xd9\x84\xd8\xad\xd9\x89\0" /* offset 13970 */
+  "\xd9\x84\xd8\xac\xd8\xac\0" /* offset 13977 */
+  "\xd9\x84\xd8\xae\xd9\x85\0" /* offset 13984 */
+  "\xd9\x84\xd9\x85\xd8\xad\0" /* offset 13991 */
+  "\xd9\x85\xd8\xad\xd8\xac\0" /* offset 13998 */
+  "\xd9\x85\xd8\xad\xd9\x85\0" /* offset 14005 */
+  "\xd9\x85\xd8\xad\xd9\x8a\0" /* offset 14012 */
+  "\xd9\x85\xd8\xac\xd8\xad\0" /* offset 14019 */
+  "\xd9\x85\xd8\xac\xd9\x85\0" /* offset 14026 */
+  "\xd9\x85\xd8\xae\xd8\xac\0" /* offset 14033 */
+  "\xd9\x85\xd8\xae\xd9\x85\0" /* offset 14040 */
+  "\xd9\x85\xd8\xac\xd8\xae\0" /* offset 14047 */
+  "\xd9\x87\xd9\x85\xd8\xac\0" /* offset 14054 */
+  "\xd9\x87\xd9\x85\xd9\x85\0" /* offset 14061 */
+  "\xd9\x86\xd8\xad\xd9\x85\0" /* offset 14068 */
+  "\xd9\x86\xd8\xad\xd9\x89\0" /* offset 14075 */
+  "\xd9\x86\xd8\xac\xd9\x85\0" /* offset 14082 */
+  "\xd9\x86\xd8\xac\xd9\x89\0" /* offset 14089 */
+  "\xd9\x86\xd9\x85\xd9\x8a\0" /* offset 14096 */
+  "\xd9\x86\xd9\x85\xd9\x89\0" /* offset 14103 */
+  "\xd9\x8a\xd9\x85\xd9\x85\0" /* offset 14110 */
+  "\xd8\xa8\xd8\xae\xd9\x8a\0" /* offset 14117 */
+  "\xd8\xaa\xd8\xac\xd9\x8a\0" /* offset 14124 */
+  "\xd8\xaa\xd8\xac\xd9\x89\0" /* offset 14131 */
+  "\xd8\xaa\xd8\xae\xd9\x8a\0" /* offset 14138 */
+  "\xd8\xaa\xd8\xae\xd9\x89\0" /* offset 14145 */
+  "\xd8\xaa\xd9\x85\xd9\x8a\0" /* offset 14152 */
+  "\xd8\xaa\xd9\x85\xd9\x89\0" /* offset 14159 */
+  "\xd8\xac\xd9\x85\xd9\x8a\0" /* offset 14166 */
+  "\xd8\xac\xd8\xad\xd9\x89\0" /* offset 14173 */
+  "\xd8\xac\xd9\x85\xd9\x89\0" /* offset 14180 */
+  "\xd8\xb3\xd8\xae\xd9\x89\0" /* offset 14187 */
+  "\xd8\xb5\xd8\xad\xd9\x8a\0" /* offset 14194 */
+  "\xd8\xb4\xd8\xad\xd9\x8a\0" /* offset 14201 */
+  "\xd8\xb6\xd8\xad\xd9\x8a\0" /* offset 14208 */
+  "\xd9\x84\xd8\xac\xd9\x8a\0" /* offset 14215 */
+  "\xd9\x84\xd9\x85\xd9\x8a\0" /* offset 14222 */
+  "\xd9\x8a\xd8\xad\xd9\x8a\0" /* offset 14229 */
+  "\xd9\x8a\xd8\xac\xd9\x8a\0" /* offset 14236 */
+  "\xd9\x8a\xd9\x85\xd9\x8a\0" /* offset 14243 */
+  "\xd9\x85\xd9\x85\xd9\x8a\0" /* offset 14250 */
+  "\xd9\x82\xd9\x85\xd9\x8a\0" /* offset 14257 */
+  "\xd9\x86\xd8\xad\xd9\x8a\0" /* offset 14264 */
+  "\xd8\xb9\xd9\x85\xd9\x8a\0" /* offset 14271 */
+  "\xd9\x83\xd9\x85\xd9\x8a\0" /* offset 14278 */
+  "\xd9\x86\xd8\xac\xd8\xad\0" /* offset 14285 */
+  "\xd9\x85\xd8\xae\xd9\x8a\0" /* offset 14292 */
+  "\xd9\x84\xd8\xac\xd9\x85\0" /* offset 14299 */
+  "\xd9\x83\xd9\x85\xd9\x85\0" /* offset 14306 */
+  "\xd8\xac\xd8\xad\xd9\x8a\0" /* offset 14313 */
+  "\xd8\xad\xd8\xac\xd9\x8a\0" /* offset 14320 */
+  "\xd9\x85\xd8\xac\xd9\x8a\0" /* offset 14327 */
+  "\xd9\x81\xd9\x85\xd9\x8a\0" /* offset 14334 */
+  "\xd8\xa8\xd8\xad\xd9\x8a\0" /* offset 14341 */
+  "\xd8\xb3\xd8\xae\xd9\x8a\0" /* offset 14348 */
+  "\xd9\x86\xd8\xac\xd9\x8a\0" /* offset 14355 */
+  "\xd8\xb5\xd9\x84\xdb\x92\0" /* offset 14362 */
+  "\xd9\x82\xd9\x84\xdb\x92\0" /* offset 14369 */
+  "\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\0" /* offset 14376 */
+  "\xd8\xa7\xd9\x83\xd8\xa8\xd8\xb1\0" /* offset 14385 */
+  "\xd9\x85\xd8\xad\xd9\x85\xd8\xaf\0" /* offset 14394 */
+  "\xd8\xb5\xd9\x84\xd8\xb9\xd9\x85\0" /* offset 14403 */
+  "\xd8\xb1\xd8\xb3\xd9\x88\xd9\x84\0" /* offset 14412 */
+  "\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\0" /* offset 14421 */
+  "\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 14430 */
+  "\xd8\xb5\xd9\x84\xd9\x89\0" /* offset 14439 */
+  "\xd8\xb5\xd9\x84\xd9\x89\x20\xd8\xa7\xd9\x84\xd9\x84\xd9\x87\x20\xd8\xb9\xd9\x84\xd9\x8a\xd9\x87\x20\xd9\x88\xd8\xb3\xd9\x84\xd9\x85\0" /* offset 14446 */
+  "\xd8\xac\xd9\x84\x20\xd8\xac\xd9\x84\xd8\xa7\xd9\x84\xd9\x87\0" /* offset 14480 */
+  "\xd8\xb1\xdb\x8c\xd8\xa7\xd9\x84\0" /* offset 14496 */
+  "\x2c\0" /* offset 14505 */
+  "\xe3\x80\x81\0" /* offset 14507 */
+  "\xe3\x80\x82\0" /* offset 14511 */
+  "\x3a\0" /* offset 14515 */
+  "\x21\0" /* offset 14517 */
+  "\x3f\0" /* offset 14519 */
+  "\xe3\x80\x96\0" /* offset 14521 */
+  "\xe3\x80\x97\0" /* offset 14525 */
+  "\xe2\x80\x94\0" /* offset 14529 */
+  "\xe2\x80\x93\0" /* offset 14533 */
+  "\x5f\0" /* offset 14537 */
+  "\x7b\0" /* offset 14539 */
+  "\x7d\0" /* offset 14541 */
+  "\xe3\x80\x94\0" /* offset 14543 */
+  "\xe3\x80\x95\0" /* offset 14547 */
+  "\xe3\x80\x90\0" /* offset 14551 */
+  "\xe3\x80\x91\0" /* offset 14555 */
+  "\xe3\x80\x8a\0" /* offset 14559 */
+  "\xe3\x80\x8b\0" /* offset 14563 */
+  "\xe3\x80\x8c\0" /* offset 14567 */
+  "\xe3\x80\x8d\0" /* offset 14571 */
+  "\xe3\x80\x8e\0" /* offset 14575 */
+  "\xe3\x80\x8f\0" /* offset 14579 */
+  "\x5b\0" /* offset 14583 */
+  "\x5d\0" /* offset 14585 */
+  "\x23\0" /* offset 14587 */
+  "\x26\0" /* offset 14589 */
+  "\x2a\0" /* offset 14591 */
+  "\x2d\0" /* offset 14593 */
+  "\x3c\0" /* offset 14595 */
+  "\x3e\0" /* offset 14597 */
+  "\x5c\0" /* offset 14599 */
+  "\x24\0" /* offset 14601 */
+  "\x25\0" /* offset 14603 */
+  "\x40\0" /* offset 14605 */
+  "\x20\xd9\x8b\0" /* offset 14607 */
+  "\xd9\x80\xd9\x8b\0" /* offset 14611 */
+  "\x20\xd9\x8c\0" /* offset 14616 */
+  "\x20\xd9\x8d\0" /* offset 14620 */
+  "\x20\xd9\x8e\0" /* offset 14624 */
+  "\xd9\x80\xd9\x8e\0" /* offset 14628 */
+  "\x20\xd9\x8f\0" /* offset 14633 */
+  "\xd9\x80\xd9\x8f\0" /* offset 14637 */
+  "\x20\xd9\x90\0" /* offset 14642 */
+  "\xd9\x80\xd9\x90\0" /* offset 14646 */
+  "\x20\xd9\x91\0" /* offset 14651 */
+  "\xd9\x80\xd9\x91\0" /* offset 14655 */
+  "\x20\xd9\x92\0" /* offset 14660 */
+  "\xd9\x80\xd9\x92\0" /* offset 14664 */
+  "\xd8\xa1\0" /* offset 14669 */
+  "\xd8\xa7\0" /* offset 14672 */
+  "\xd8\xa8\0" /* offset 14675 */
+  "\xd8\xa9\0" /* offset 14678 */
+  "\xd8\xaa\0" /* offset 14681 */
+  "\xd8\xab\0" /* offset 14684 */
+  "\xd8\xac\0" /* offset 14687 */
+  "\xd8\xad\0" /* offset 14690 */
+  "\xd8\xae\0" /* offset 14693 */
+  "\xd8\xaf\0" /* offset 14696 */
+  "\xd8\xb0\0" /* offset 14699 */
+  "\xd8\xb1\0" /* offset 14702 */
+  "\xd8\xb2\0" /* offset 14705 */
+  "\xd8\xb3\0" /* offset 14708 */
+  "\xd8\xb4\0" /* offset 14711 */
+  "\xd8\xb5\0" /* offset 14714 */
+  "\xd8\xb6\0" /* offset 14717 */
+  "\xd8\xb7\0" /* offset 14720 */
+  "\xd8\xb8\0" /* offset 14723 */
+  "\xd8\xb9\0" /* offset 14726 */
+  "\xd8\xba\0" /* offset 14729 */
+  "\xd9\x81\0" /* offset 14732 */
+  "\xd9\x82\0" /* offset 14735 */
+  "\xd9\x83\0" /* offset 14738 */
+  "\xd9\x84\0" /* offset 14741 */
+  "\xd9\x85\0" /* offset 14744 */
+  "\xd9\x86\0" /* offset 14747 */
+  "\xd9\x87\0" /* offset 14750 */
+  "\xd9\x88\0" /* offset 14753 */
+  "\xd9\x8a\0" /* offset 14756 */
+  "\xd9\x84\xd8\xa7\xd9\x93\0" /* offset 14759 */
+  "\xd9\x84\xd8\xa7\xd9\x94\0" /* offset 14766 */
+  "\xd9\x84\xd8\xa7\xd9\x95\0" /* offset 14773 */
+  "\xd9\x84\xd8\xa7\0" /* offset 14780 */
+  "\x22\0" /* offset 14785 */
+  "\x27\0" /* offset 14787 */
+  "\x2f\0" /* offset 14789 */
+  "\x5e\0" /* offset 14791 */
+  "\x7c\0" /* offset 14793 */
+  "\x7e\0" /* offset 14795 */
+  "\xe2\xa6\x85\0" /* offset 14797 */
+  "\xe2\xa6\x86\0" /* offset 14801 */
+  "\xe3\x83\xbb\0" /* offset 14805 */
+  "\xe3\x82\xa1\0" /* offset 14809 */
+  "\xe3\x82\xa3\0" /* offset 14813 */
+  "\xe3\x82\xa5\0" /* offset 14817 */
+  "\xe3\x82\xa7\0" /* offset 14821 */
+  "\xe3\x82\xa9\0" /* offset 14825 */
+  "\xe3\x83\xa3\0" /* offset 14829 */
+  "\xe3\x83\xa5\0" /* offset 14833 */
+  "\xe3\x83\xa7\0" /* offset 14837 */
+  "\xe3\x83\x83\0" /* offset 14841 */
+  "\xe3\x83\xbc\0" /* offset 14845 */
+  "\xe3\x83\xb3\0" /* offset 14849 */
+  "\xe3\x82\x99\0" /* offset 14853 */
+  "\xe3\x82\x9a\0" /* offset 14857 */
+  "\xc2\xa2\0" /* offset 14861 */
+  "\xc2\xa3\0" /* offset 14864 */
+  "\xc2\xac\0" /* offset 14867 */
+  "\xc2\xa6\0" /* offset 14870 */
+  "\xc2\xa5\0" /* offset 14873 */
+  "\xe2\x82\xa9\0" /* offset 14876 */
+  "\xe2\x94\x82\0" /* offset 14880 */
+  "\xe2\x86\x90\0" /* offset 14884 */
+  "\xe2\x86\x91\0" /* offset 14888 */
+  "\xe2\x86\x92\0" /* offset 14892 */
+  "\xe2\x86\x93\0" /* offset 14896 */
+  "\xe2\x96\xa0\0" /* offset 14900 */
+  "\xe2\x97\x8b\0" /* offset 14904 */
+  "\xf0\x9d\x85\x97\xf0\x9d\x85\xa5\0" /* offset 14908 */
+  "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\0" /* offset 14917 */
+  "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 14926 */
+  "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 14939 */
+  "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb0\0" /* offset 14952 */
+  "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb1\0" /* offset 14965 */
+  "\xf0\x9d\x85\x98\xf0\x9d\x85\xa5\xf0\x9d\x85\xb2\0" /* offset 14978 */
+  "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\0" /* offset 14991 */
+  "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\0" /* offset 15000 */
+  "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15009 */
+  "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xae\0" /* offset 15022 */
+  "\xf0\x9d\x86\xb9\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15035 */
+  "\xf0\x9d\x86\xba\xf0\x9d\x85\xa5\xf0\x9d\x85\xaf\0" /* offset 15048 */
+  "\xc4\xb1\0" /* offset 15061 */
+  "\xc8\xb7\0" /* offset 15064 */
+  "\xce\x91\0" /* offset 15067 */
+  "\xce\x92\0" /* offset 15070 */
+  "\xce\x94\0" /* offset 15073 */
+  "\xce\x95\0" /* offset 15076 */
+  "\xce\x96\0" /* offset 15079 */
+  "\xce\x97\0" /* offset 15082 */
+  "\xce\x99\0" /* offset 15085 */
+  "\xce\x9a\0" /* offset 15088 */
+  "\xce\x9b\0" /* offset 15091 */
+  "\xce\x9c\0" /* offset 15094 */
+  "\xce\x9d\0" /* offset 15097 */
+  "\xce\x9e\0" /* offset 15100 */
+  "\xce\x9f\0" /* offset 15103 */
+  "\xce\xa1\0" /* offset 15106 */
+  "\xce\xa4\0" /* offset 15109 */
+  "\xce\xa6\0" /* offset 15112 */
+  "\xce\xa7\0" /* offset 15115 */
+  "\xce\xa8\0" /* offset 15118 */
+  "\xe2\x88\x87\0" /* offset 15121 */
+  "\xce\xb1\0" /* offset 15125 */
+  "\xce\xb6\0" /* offset 15128 */
+  "\xce\xb7\0" /* offset 15131 */
+  "\xce\xbb\0" /* offset 15134 */
+  "\xce\xbd\0" /* offset 15137 */
+  "\xce\xbe\0" /* offset 15140 */
+  "\xce\xbf\0" /* offset 15143 */
+  "\xcf\x83\0" /* offset 15146 */
+  "\xcf\x84\0" /* offset 15149 */
+  "\xcf\x85\0" /* offset 15152 */
+  "\xcf\x88\0" /* offset 15155 */
+  "\xcf\x89\0" /* offset 15158 */
+  "\xe2\x88\x82\0" /* offset 15161 */
+  "\xcf\x9c\0" /* offset 15165 */
+  "\xcf\x9d\0" /* offset 15168 */
+  "\xe4\xb8\xbd\0" /* offset 15171 */
+  "\xe4\xb8\xb8\0" /* offset 15175 */
+  "\xe4\xb9\x81\0" /* offset 15179 */
+  "\xf0\xa0\x84\xa2\0" /* offset 15183 */
+  "\xe4\xbd\xa0\0" /* offset 15188 */
+  "\xe4\xbe\xbb\0" /* offset 15192 */
+  "\xe5\x80\x82\0" /* offset 15196 */
+  "\xe5\x81\xba\0" /* offset 15200 */
+  "\xe5\x82\x99\0" /* offset 15204 */
+  "\xe5\x83\x8f\0" /* offset 15208 */
+  "\xe3\x92\x9e\0" /* offset 15212 */
+  "\xf0\xa0\x98\xba\0" /* offset 15216 */
+  "\xe5\x85\x94\0" /* offset 15221 */
+  "\xe5\x85\xa4\0" /* offset 15225 */
+  "\xe5\x85\xb7\0" /* offset 15229 */
+  "\xf0\xa0\x94\x9c\0" /* offset 15233 */
+  "\xe3\x92\xb9\0" /* offset 15238 */
+  "\xe5\x85\xa7\0" /* offset 15242 */
+  "\xe5\x86\x8d\0" /* offset 15246 */
+  "\xf0\xa0\x95\x8b\0" /* offset 15250 */
+  "\xe5\x86\x97\0" /* offset 15255 */
+  "\xe5\x86\xa4\0" /* offset 15259 */
+  "\xe4\xbb\x8c\0" /* offset 15263 */
+  "\xe5\x86\xac\0" /* offset 15267 */
+  "\xf0\xa9\x87\x9f\0" /* offset 15271 */
+  "\xe5\x88\x83\0" /* offset 15276 */
+  "\xe3\x93\x9f\0" /* offset 15280 */
+  "\xe5\x88\xbb\0" /* offset 15284 */
+  "\xe5\x89\x86\0" /* offset 15288 */
+  "\xe5\x89\xb2\0" /* offset 15292 */
+  "\xe5\x89\xb7\0" /* offset 15296 */
+  "\xe3\x94\x95\0" /* offset 15300 */
+  "\xe5\x8c\x85\0" /* offset 15304 */
+  "\xe5\x8c\x86\0" /* offset 15308 */
+  "\xe5\x8d\x89\0" /* offset 15312 */
+  "\xe5\x8d\x9a\0" /* offset 15316 */
+  "\xe5\x8d\xb3\0" /* offset 15320 */
+  "\xe5\x8d\xbd\0" /* offset 15324 */
+  "\xe5\x8d\xbf\0" /* offset 15328 */
+  "\xf0\xa0\xa8\xac\0" /* offset 15332 */
+  "\xe7\x81\xb0\0" /* offset 15337 */
+  "\xe5\x8f\x8a\0" /* offset 15341 */
+  "\xe5\x8f\x9f\0" /* offset 15345 */
+  "\xf0\xa0\xad\xa3\0" /* offset 15349 */
+  "\xe5\x8f\xab\0" /* offset 15354 */
+  "\xe5\x8f\xb1\0" /* offset 15358 */
+  "\xe5\x90\x86\0" /* offset 15362 */
+  "\xe5\x92\x9e\0" /* offset 15366 */
+  "\xe5\x90\xb8\0" /* offset 15370 */
+  "\xe5\x91\x88\0" /* offset 15374 */
+  "\xe5\x91\xa8\0" /* offset 15378 */
+  "\xe5\x92\xa2\0" /* offset 15382 */
+  "\xe5\x93\xb6\0" /* offset 15386 */
+  "\xe5\x94\x90\0" /* offset 15390 */
+  "\xe5\x95\x93\0" /* offset 15394 */
+  "\xe5\x95\xa3\0" /* offset 15398 */
+  "\xe5\x96\x84\0" /* offset 15402 */
+  "\xe5\x96\xab\0" /* offset 15406 */
+  "\xe5\x96\xb3\0" /* offset 15410 */
+  "\xe5\x97\x82\0" /* offset 15414 */
+  "\xe5\x9c\x96\0" /* offset 15418 */
+  "\xe5\x9c\x97\0" /* offset 15422 */
+  "\xe5\x99\x91\0" /* offset 15426 */
+  "\xe5\x99\xb4\0" /* offset 15430 */
+  "\xe5\xa3\xae\0" /* offset 15434 */
+  "\xe5\x9f\x8e\0" /* offset 15438 */
+  "\xe5\x9f\xb4\0" /* offset 15442 */
+  "\xe5\xa0\x8d\0" /* offset 15446 */
+  "\xe5\x9e\x8b\0" /* offset 15450 */
+  "\xe5\xa0\xb2\0" /* offset 15454 */
+  "\xe5\xa0\xb1\0" /* offset 15458 */
+  "\xe5\xa2\xac\0" /* offset 15462 */
+  "\xf0\xa1\x93\xa4\0" /* offset 15466 */
+  "\xe5\xa3\xb2\0" /* offset 15471 */
+  "\xe5\xa3\xb7\0" /* offset 15475 */
+  "\xe5\xa4\x86\0" /* offset 15479 */
+  "\xe5\xa4\x9a\0" /* offset 15483 */
+  "\xe5\xa4\xa2\0" /* offset 15487 */
+  "\xe5\xa5\xa2\0" /* offset 15491 */
+  "\xf0\xa1\x9a\xa8\0" /* offset 15495 */
+  "\xf0\xa1\x9b\xaa\0" /* offset 15500 */
+  "\xe5\xa7\xac\0" /* offset 15505 */
+  "\xe5\xa8\x9b\0" /* offset 15509 */
+  "\xe5\xa8\xa7\0" /* offset 15513 */
+  "\xe5\xa7\x98\0" /* offset 15517 */
+  "\xe5\xa9\xa6\0" /* offset 15521 */
+  "\xe3\x9b\xae\0" /* offset 15525 */
+  "\xe3\x9b\xbc\0" /* offset 15529 */
+  "\xe5\xac\x88\0" /* offset 15533 */
+  "\xe5\xac\xbe\0" /* offset 15537 */
+  "\xf0\xa1\xa7\x88\0" /* offset 15541 */
+  "\xe5\xaf\x83\0" /* offset 15546 */
+  "\xe5\xaf\x98\0" /* offset 15550 */
+  "\xe5\xaf\xb3\0" /* offset 15554 */
+  "\xf0\xa1\xac\x98\0" /* offset 15558 */
+  "\xe5\xaf\xbf\0" /* offset 15563 */
+  "\xe5\xb0\x86\0" /* offset 15567 */
+  "\xe5\xbd\x93\0" /* offset 15571 */
+  "\xe3\x9e\x81\0" /* offset 15575 */
+  "\xe5\xb1\xa0\0" /* offset 15579 */
+  "\xe5\xb3\x80\0" /* offset 15583 */
+  "\xe5\xb2\x8d\0" /* offset 15587 */
+  "\xf0\xa1\xb7\xa4\0" /* offset 15591 */
+  "\xe5\xb5\x83\0" /* offset 15596 */
+  "\xf0\xa1\xb7\xa6\0" /* offset 15600 */
+  "\xe5\xb5\xae\0" /* offset 15605 */
+  "\xe5\xb5\xab\0" /* offset 15609 */
+  "\xe5\xb5\xbc\0" /* offset 15613 */
+  "\xe5\xb7\xa1\0" /* offset 15617 */
+  "\xe5\xb7\xa2\0" /* offset 15621 */
+  "\xe3\xa0\xaf\0" /* offset 15625 */
+  "\xe5\xb7\xbd\0" /* offset 15629 */
+  "\xe5\xb8\xa8\0" /* offset 15633 */
+  "\xe5\xb8\xbd\0" /* offset 15637 */
+  "\xe5\xb9\xa9\0" /* offset 15641 */
+  "\xe3\xa1\xa2\0" /* offset 15645 */
+  "\xf0\xa2\x86\x83\0" /* offset 15649 */
+  "\xe3\xa1\xbc\0" /* offset 15654 */
+  "\xe5\xba\xb0\0" /* offset 15658 */
+  "\xe5\xba\xb3\0" /* offset 15662 */
+  "\xe5\xba\xb6\0" /* offset 15666 */
+  "\xf0\xaa\x8e\x92\0" /* offset 15670 */
+  "\xf0\xa2\x8c\xb1\0" /* offset 15675 */
+  "\xe8\x88\x81\0" /* offset 15680 */
+  "\xe5\xbc\xa2\0" /* offset 15684 */
+  "\xe3\xa3\x87\0" /* offset 15688 */
+  "\xf0\xa3\x8a\xb8\0" /* offset 15692 */
+  "\xf0\xa6\x87\x9a\0" /* offset 15697 */
+  "\xe5\xbd\xa2\0" /* offset 15702 */
+  "\xe5\xbd\xab\0" /* offset 15706 */
+  "\xe3\xa3\xa3\0" /* offset 15710 */
+  "\xe5\xbe\x9a\0" /* offset 15714 */
+  "\xe5\xbf\x8d\0" /* offset 15718 */
+  "\xe5\xbf\x97\0" /* offset 15722 */
+  "\xe5\xbf\xb9\0" /* offset 15726 */
+  "\xe6\x82\x81\0" /* offset 15730 */
+  "\xe3\xa4\xba\0" /* offset 15734 */
+  "\xe3\xa4\x9c\0" /* offset 15738 */
+  "\xf0\xa2\x9b\x94\0" /* offset 15742 */
+  "\xe6\x83\x87\0" /* offset 15747 */
+  "\xe6\x85\x88\0" /* offset 15751 */
+  "\xe6\x85\x8c\0" /* offset 15755 */
+  "\xe6\x85\xba\0" /* offset 15759 */
+  "\xe6\x86\xb2\0" /* offset 15763 */
+  "\xe6\x86\xa4\0" /* offset 15767 */
+  "\xe6\x86\xaf\0" /* offset 15771 */
+  "\xe6\x87\x9e\0" /* offset 15775 */
+  "\xe6\x88\x90\0" /* offset 15779 */
+  "\xe6\x88\x9b\0" /* offset 15783 */
+  "\xe6\x89\x9d\0" /* offset 15787 */
+  "\xe6\x8a\xb1\0" /* offset 15791 */
+  "\xe6\x8b\x94\0" /* offset 15795 */
+  "\xe6\x8d\x90\0" /* offset 15799 */
+  "\xf0\xa2\xac\x8c\0" /* offset 15803 */
+  "\xe6\x8c\xbd\0" /* offset 15808 */
+  "\xe6\x8b\xbc\0" /* offset 15812 */
+  "\xe6\x8d\xa8\0" /* offset 15816 */
+  "\xe6\x8e\x83\0" /* offset 15820 */
+  "\xe6\x8f\xa4\0" /* offset 15824 */
+  "\xf0\xa2\xaf\xb1\0" /* offset 15828 */
+  "\xe6\x90\xa2\0" /* offset 15833 */
+  "\xe6\x8f\x85\0" /* offset 15837 */
+  "\xe6\x8e\xa9\0" /* offset 15841 */
+  "\xe3\xa8\xae\0" /* offset 15845 */
+  "\xe6\x91\xa9\0" /* offset 15849 */
+  "\xe6\x91\xbe\0" /* offset 15853 */
+  "\xe6\x92\x9d\0" /* offset 15857 */
+  "\xe6\x91\xb7\0" /* offset 15861 */
+  "\xe3\xa9\xac\0" /* offset 15865 */
+  "\xe6\x95\xac\0" /* offset 15869 */
+  "\xf0\xa3\x80\x8a\0" /* offset 15873 */
+  "\xe6\x97\xa3\0" /* offset 15878 */
+  "\xe6\x9b\xb8\0" /* offset 15882 */
+  "\xe6\x99\x89\0" /* offset 15886 */
+  "\xe3\xac\x99\0" /* offset 15890 */
+  "\xe3\xac\x88\0" /* offset 15894 */
+  "\xe3\xab\xa4\0" /* offset 15898 */
+  "\xe5\x86\x92\0" /* offset 15902 */
+  "\xe5\x86\x95\0" /* offset 15906 */
+  "\xe6\x9c\x80\0" /* offset 15910 */
+  "\xe6\x9a\x9c\0" /* offset 15914 */
+  "\xe8\x82\xad\0" /* offset 15918 */
+  "\xe4\x8f\x99\0" /* offset 15922 */
+  "\xe6\x9c\xa1\0" /* offset 15926 */
+  "\xe6\x9d\x9e\0" /* offset 15930 */
+  "\xe6\x9d\x93\0" /* offset 15934 */
+  "\xf0\xa3\x8f\x83\0" /* offset 15938 */
+  "\xe3\xad\x89\0" /* offset 15943 */
+  "\xe6\x9f\xba\0" /* offset 15947 */
+  "\xe6\x9e\x85\0" /* offset 15951 */
+  "\xe6\xa1\x92\0" /* offset 15955 */
+  "\xf0\xa3\x91\xad\0" /* offset 15959 */
+  "\xe6\xa2\x8e\0" /* offset 15964 */
+  "\xe6\xa0\x9f\0" /* offset 15968 */
+  "\xe6\xa4\x94\0" /* offset 15972 */
+  "\xe6\xa5\x82\0" /* offset 15976 */
+  "\xe6\xa6\xa3\0" /* offset 15980 */
+  "\xe6\xa7\xaa\0" /* offset 15984 */
+  "\xe6\xaa\xa8\0" /* offset 15988 */
+  "\xf0\xa3\x9a\xa3\0" /* offset 15992 */
+  "\xe6\xab\x9b\0" /* offset 15997 */
+  "\xe3\xb0\x98\0" /* offset 16001 */
+  "\xe6\xac\xa1\0" /* offset 16005 */
+  "\xf0\xa3\xa2\xa7\0" /* offset 16009 */
+  "\xe6\xad\x94\0" /* offset 16014 */
+  "\xe3\xb1\x8e\0" /* offset 16018 */
+  "\xe6\xad\xb2\0" /* offset 16022 */
+  "\xe6\xae\x9f\0" /* offset 16026 */
+  "\xe6\xae\xbb\0" /* offset 16030 */
+  "\xf0\xa3\xaa\x8d\0" /* offset 16034 */
+  "\xf0\xa1\xb4\x8b\0" /* offset 16039 */
+  "\xf0\xa3\xab\xba\0" /* offset 16044 */
+  "\xe6\xb1\x8e\0" /* offset 16049 */
+  "\xf0\xa3\xb2\xbc\0" /* offset 16053 */
+  "\xe6\xb2\xbf\0" /* offset 16058 */
+  "\xe6\xb3\x8d\0" /* offset 16062 */
+  "\xe6\xb1\xa7\0" /* offset 16066 */
+  "\xe6\xb4\x96\0" /* offset 16070 */
+  "\xe6\xb4\xbe\0" /* offset 16074 */
+  "\xe6\xb5\xa9\0" /* offset 16078 */
+  "\xe6\xb5\xb8\0" /* offset 16082 */
+  "\xe6\xb6\x85\0" /* offset 16086 */
+  "\xf0\xa3\xb4\x9e\0" /* offset 16090 */
+  "\xe6\xb4\xb4\0" /* offset 16095 */
+  "\xe6\xb8\xaf\0" /* offset 16099 */
+  "\xe6\xb9\xae\0" /* offset 16103 */
+  "\xe3\xb4\xb3\0" /* offset 16107 */
+  "\xe6\xbb\x87\0" /* offset 16111 */
+  "\xf0\xa3\xbb\x91\0" /* offset 16115 */
+  "\xe6\xb7\xb9\0" /* offset 16120 */
+  "\xe6\xbd\xae\0" /* offset 16124 */
+  "\xf0\xa3\xbd\x9e\0" /* offset 16128 */
+  "\xf0\xa3\xbe\x8e\0" /* offset 16133 */
+  "\xe6\xbf\x86\0" /* offset 16138 */
+  "\xe7\x80\xb9\0" /* offset 16142 */
+  "\xe7\x80\x9b\0" /* offset 16146 */
+  "\xe3\xb6\x96\0" /* offset 16150 */
+  "\xe7\x81\x8a\0" /* offset 16154 */
+  "\xe7\x81\xbd\0" /* offset 16158 */
+  "\xe7\x81\xb7\0" /* offset 16162 */
+  "\xe7\x82\xad\0" /* offset 16166 */
+  "\xf0\xa0\x94\xa5\0" /* offset 16170 */
+  "\xe7\x85\x85\0" /* offset 16175 */
+  "\xf0\xa4\x89\xa3\0" /* offset 16179 */
+  "\xe7\x86\x9c\0" /* offset 16184 */
+  "\xf0\xa4\x8e\xab\0" /* offset 16188 */
+  "\xe7\x88\xa8\0" /* offset 16193 */
+  "\xe7\x89\x90\0" /* offset 16197 */
+  "\xf0\xa4\x98\x88\0" /* offset 16201 */
+  "\xe7\x8a\x80\0" /* offset 16206 */
+  "\xe7\x8a\x95\0" /* offset 16210 */
+  "\xf0\xa4\x9c\xb5\0" /* offset 16214 */
+  "\xf0\xa4\xa0\x94\0" /* offset 16219 */
+  "\xe7\x8d\xba\0" /* offset 16224 */
+  "\xe7\x8e\x8b\0" /* offset 16228 */
+  "\xe3\xba\xac\0" /* offset 16232 */
+  "\xe7\x8e\xa5\0" /* offset 16236 */
+  "\xe3\xba\xb8\0" /* offset 16240 */
+  "\xe7\x91\x87\0" /* offset 16244 */
+  "\xe7\x91\x9c\0" /* offset 16248 */
+  "\xe7\x92\x85\0" /* offset 16252 */
+  "\xe7\x93\x8a\0" /* offset 16256 */
+  "\xe3\xbc\x9b\0" /* offset 16260 */
+  "\xe7\x94\xa4\0" /* offset 16264 */
+  "\xf0\xa4\xb0\xb6\0" /* offset 16268 */
+  "\xe7\x94\xbe\0" /* offset 16273 */
+  "\xf0\xa4\xb2\x92\0" /* offset 16277 */
+  "\xf0\xa2\x86\x9f\0" /* offset 16282 */
+  "\xe7\x98\x90\0" /* offset 16287 */
+  "\xf0\xa4\xbe\xa1\0" /* offset 16291 */
+  "\xf0\xa4\xbe\xb8\0" /* offset 16296 */
+  "\xf0\xa5\x81\x84\0" /* offset 16301 */
+  "\xe3\xbf\xbc\0" /* offset 16306 */
+  "\xe4\x80\x88\0" /* offset 16310 */
+  "\xf0\xa5\x83\xb3\0" /* offset 16314 */
+  "\xf0\xa5\x83\xb2\0" /* offset 16319 */
+  "\xf0\xa5\x84\x99\0" /* offset 16324 */
+  "\xf0\xa5\x84\xb3\0" /* offset 16329 */
+  "\xe7\x9c\x9e\0" /* offset 16334 */
+  "\xe7\x9c\x9f\0" /* offset 16338 */
+  "\xe7\x9e\x8b\0" /* offset 16342 */
+  "\xe4\x81\x86\0" /* offset 16346 */
+  "\xe4\x82\x96\0" /* offset 16350 */
+  "\xf0\xa5\x90\x9d\0" /* offset 16354 */
+  "\xe7\xa1\x8e\0" /* offset 16359 */
+  "\xe4\x83\xa3\0" /* offset 16363 */
+  "\xf0\xa5\x98\xa6\0" /* offset 16367 */
+  "\xf0\xa5\x9a\x9a\0" /* offset 16372 */
+  "\xf0\xa5\x9b\x85\0" /* offset 16377 */
+  "\xe7\xa7\xab\0" /* offset 16382 */
+  "\xe4\x84\xaf\0" /* offset 16386 */
+  "\xe7\xa9\x8a\0" /* offset 16390 */
+  "\xe7\xa9\x8f\0" /* offset 16394 */
+  "\xf0\xa5\xa5\xbc\0" /* offset 16398 */
+  "\xf0\xa5\xaa\xa7\0" /* offset 16403 */
+  "\xe7\xab\xae\0" /* offset 16408 */
+  "\xe4\x88\x82\0" /* offset 16412 */
+  "\xf0\xa5\xae\xab\0" /* offset 16416 */
+  "\xe7\xaf\x86\0" /* offset 16421 */
+  "\xe7\xaf\x89\0" /* offset 16425 */
+  "\xe4\x88\xa7\0" /* offset 16429 */
+  "\xf0\xa5\xb2\x80\0" /* offset 16433 */
+  "\xe7\xb3\x92\0" /* offset 16438 */
+  "\xe4\x8a\xa0\0" /* offset 16442 */
+  "\xe7\xb3\xa8\0" /* offset 16446 */
+  "\xe7\xb3\xa3\0" /* offset 16450 */
+  "\xe7\xb4\x80\0" /* offset 16454 */
+  "\xf0\xa5\xbe\x86\0" /* offset 16458 */
+  "\xe7\xb5\xa3\0" /* offset 16463 */
+  "\xe4\x8c\x81\0" /* offset 16467 */
+  "\xe7\xb7\x87\0" /* offset 16471 */
+  "\xe7\xb8\x82\0" /* offset 16475 */
+  "\xe7\xb9\x85\0" /* offset 16479 */
+  "\xe4\x8c\xb4\0" /* offset 16483 */
+  "\xf0\xa6\x88\xa8\0" /* offset 16487 */
+  "\xf0\xa6\x89\x87\0" /* offset 16492 */
+  "\xe4\x8d\x99\0" /* offset 16497 */
+  "\xf0\xa6\x8b\x99\0" /* offset 16501 */
+  "\xe7\xbd\xba\0" /* offset 16506 */
+  "\xf0\xa6\x8c\xbe\0" /* offset 16510 */
+  "\xe7\xbe\x95\0" /* offset 16515 */
+  "\xe7\xbf\xba\0" /* offset 16519 */
+  "\xf0\xa6\x93\x9a\0" /* offset 16523 */
+  "\xf0\xa6\x94\xa3\0" /* offset 16528 */
+  "\xe8\x81\xa0\0" /* offset 16533 */
+  "\xf0\xa6\x96\xa8\0" /* offset 16537 */
+  "\xe8\x81\xb0\0" /* offset 16542 */
+  "\xf0\xa3\x8d\x9f\0" /* offset 16546 */
+  "\xe4\x8f\x95\0" /* offset 16551 */
+  "\xe8\x82\xb2\0" /* offset 16555 */
+  "\xe8\x84\x83\0" /* offset 16559 */
+  "\xe4\x90\x8b\0" /* offset 16563 */
+  "\xe8\x84\xbe\0" /* offset 16567 */
+  "\xe5\xaa\xb5\0" /* offset 16571 */
+  "\xf0\xa6\x9e\xa7\0" /* offset 16575 */
+  "\xf0\xa6\x9e\xb5\0" /* offset 16580 */
+  "\xf0\xa3\x8e\x93\0" /* offset 16585 */
+  "\xf0\xa3\x8e\x9c\0" /* offset 16590 */
+  "\xe8\x88\x84\0" /* offset 16595 */
+  "\xe8\xbe\x9e\0" /* offset 16599 */
+  "\xe4\x91\xab\0" /* offset 16603 */
+  "\xe8\x8a\x91\0" /* offset 16607 */
+  "\xe8\x8a\x8b\0" /* offset 16611 */
+  "\xe8\x8a\x9d\0" /* offset 16615 */
+  "\xe5\x8a\xb3\0" /* offset 16619 */
+  "\xe8\x8a\xb1\0" /* offset 16623 */
+  "\xe8\x8a\xb3\0" /* offset 16627 */
+  "\xe8\x8a\xbd\0" /* offset 16631 */
+  "\xe8\x8b\xa6\0" /* offset 16635 */
+  "\xf0\xa6\xac\xbc\0" /* offset 16639 */
+  "\xe8\x8c\x9d\0" /* offset 16644 */
+  "\xe8\x8d\xa3\0" /* offset 16648 */
+  "\xe8\x8e\xad\0" /* offset 16652 */
+  "\xe8\x8c\xa3\0" /* offset 16656 */
+  "\xe8\x8e\xbd\0" /* offset 16660 */
+  "\xe8\x8f\xa7\0" /* offset 16664 */
+  "\xe8\x8d\x93\0" /* offset 16668 */
+  "\xe8\x8f\x8a\0" /* offset 16672 */
+  "\xe8\x8f\x8c\0" /* offset 16676 */
+  "\xe8\x8f\x9c\0" /* offset 16680 */
+  "\xf0\xa6\xb0\xb6\0" /* offset 16684 */
+  "\xf0\xa6\xb5\xab\0" /* offset 16689 */
+  "\xf0\xa6\xb3\x95\0" /* offset 16694 */
+  "\xe4\x94\xab\0" /* offset 16699 */
+  "\xe8\x93\xb1\0" /* offset 16703 */
+  "\xe8\x93\xb3\0" /* offset 16707 */
+  "\xe8\x94\x96\0" /* offset 16711 */
+  "\xf0\xa7\x8f\x8a\0" /* offset 16715 */
+  "\xe8\x95\xa4\0" /* offset 16720 */
+  "\xf0\xa6\xbc\xac\0" /* offset 16724 */
+  "\xe4\x95\x9d\0" /* offset 16729 */
+  "\xe4\x95\xa1\0" /* offset 16733 */
+  "\xf0\xa6\xbe\xb1\0" /* offset 16737 */
+  "\xf0\xa7\x83\x92\0" /* offset 16742 */
+  "\xe4\x95\xab\0" /* offset 16747 */
+  "\xe8\x99\x90\0" /* offset 16751 */
+  "\xe8\x99\xa7\0" /* offset 16755 */
+  "\xe8\x99\xa9\0" /* offset 16759 */
+  "\xe8\x9a\xa9\0" /* offset 16763 */
+  "\xe8\x9a\x88\0" /* offset 16767 */
+  "\xe8\x9c\x8e\0" /* offset 16771 */
+  "\xe8\x9b\xa2\0" /* offset 16775 */
+  "\xe8\x9c\xa8\0" /* offset 16779 */
+  "\xe8\x9d\xab\0" /* offset 16783 */
+  "\xe8\x9e\x86\0" /* offset 16787 */
+  "\xe4\x97\x97\0" /* offset 16791 */
+  "\xe8\x9f\xa1\0" /* offset 16795 */
+  "\xe8\xa0\x81\0" /* offset 16799 */
+  "\xe4\x97\xb9\0" /* offset 16803 */
+  "\xe8\xa1\xa0\0" /* offset 16807 */
+  "\xf0\xa7\x99\xa7\0" /* offset 16811 */
+  "\xe8\xa3\x97\0" /* offset 16816 */
+  "\xe8\xa3\x9e\0" /* offset 16820 */
+  "\xe4\x98\xb5\0" /* offset 16824 */
+  "\xe8\xa3\xba\0" /* offset 16828 */
+  "\xe3\x92\xbb\0" /* offset 16832 */
+  "\xf0\xa7\xa2\xae\0" /* offset 16836 */
+  "\xf0\xa7\xa5\xa6\0" /* offset 16841 */
+  "\xe4\x9a\xbe\0" /* offset 16846 */
+  "\xe4\x9b\x87\0" /* offset 16850 */
+  "\xe8\xaa\xa0\0" /* offset 16854 */
+  "\xf0\xa7\xb2\xa8\0" /* offset 16858 */
+  "\xe8\xb2\xab\0" /* offset 16863 */
+  "\xe8\xb3\x81\0" /* offset 16867 */
+  "\xe8\xb4\x9b\0" /* offset 16871 */
+  "\xe8\xb5\xb7\0" /* offset 16875 */
+  "\xf0\xa7\xbc\xaf\0" /* offset 16879 */
+  "\xf0\xa0\xa0\x84\0" /* offset 16884 */
+  "\xe8\xb7\x8b\0" /* offset 16889 */
+  "\xe8\xb6\xbc\0" /* offset 16893 */
+  "\xe8\xb7\xb0\0" /* offset 16897 */
+  "\xf0\xa0\xa3\x9e\0" /* offset 16901 */
+  "\xe8\xbb\x94\0" /* offset 16906 */
+  "\xf0\xa8\x97\x92\0" /* offset 16910 */
+  "\xf0\xa8\x97\xad\0" /* offset 16915 */
+  "\xe9\x82\x94\0" /* offset 16920 */
+  "\xe9\x83\xb1\0" /* offset 16924 */
+  "\xe9\x84\x91\0" /* offset 16928 */
+  "\xf0\xa8\x9c\xae\0" /* offset 16932 */
+  "\xe9\x84\x9b\0" /* offset 16937 */
+  "\xe9\x88\xb8\0" /* offset 16941 */
+  "\xe9\x8b\x97\0" /* offset 16945 */
+  "\xe9\x8b\x98\0" /* offset 16949 */
+  "\xe9\x89\xbc\0" /* offset 16953 */
+  "\xe9\x8f\xb9\0" /* offset 16957 */
+  "\xe9\x90\x95\0" /* offset 16961 */
+  "\xf0\xa8\xaf\xba\0" /* offset 16965 */
+  "\xe9\x96\x8b\0" /* offset 16970 */
+  "\xe4\xa6\x95\0" /* offset 16974 */
+  "\xe9\x96\xb7\0" /* offset 16978 */
+  "\xf0\xa8\xb5\xb7\0" /* offset 16982 */
+  "\xe4\xa7\xa6\0" /* offset 16987 */
+  "\xe9\x9b\x83\0" /* offset 16991 */
+  "\xe5\xb6\xb2\0" /* offset 16995 */
+  "\xe9\x9c\xa3\0" /* offset 16999 */
+  "\xf0\xa9\x85\x85\0" /* offset 17003 */
+  "\xf0\xa9\x88\x9a\0" /* offset 17008 */
+  "\xe4\xa9\xae\0" /* offset 17013 */
+  "\xe4\xa9\xb6\0" /* offset 17017 */
+  "\xe9\x9f\xa0\0" /* offset 17021 */
+  "\xf0\xa9\x90\x8a\0" /* offset 17025 */
+  "\xe4\xaa\xb2\0" /* offset 17030 */
+  "\xf0\xa9\x92\x96\0" /* offset 17034 */
+  "\xe9\xa0\xa9\0" /* offset 17039 */
+  "\xf0\xa9\x96\xb6\0" /* offset 17043 */
+  "\xe9\xa3\xa2\0" /* offset 17048 */
+  "\xe4\xac\xb3\0" /* offset 17052 */
+  "\xe9\xa4\xa9\0" /* offset 17056 */
+  "\xe9\xa6\xa7\0" /* offset 17060 */
+  "\xe9\xa7\x82\0" /* offset 17064 */
+  "\xe9\xa7\xbe\0" /* offset 17068 */
+  "\xe4\xaf\x8e\0" /* offset 17072 */
+  "\xf0\xa9\xac\xb0\0" /* offset 17076 */
+  "\xe9\xb1\x80\0" /* offset 17081 */
+  "\xe9\xb3\xbd\0" /* offset 17085 */
+  "\xe4\xb3\x8e\0" /* offset 17089 */
+  "\xe4\xb3\xad\0" /* offset 17093 */
+  "\xe9\xb5\xa7\0" /* offset 17097 */
+  "\xf0\xaa\x83\x8e\0" /* offset 17101 */
+  "\xe4\xb3\xb8\0" /* offset 17106 */
+  "\xf0\xaa\x84\x85\0" /* offset 17110 */
+  "\xf0\xaa\x88\x8e\0" /* offset 17115 */
+  "\xf0\xaa\x8a\x91\0" /* offset 17120 */
+  "\xe4\xb5\x96\0" /* offset 17125 */
+  "\xe9\xbb\xbe\0" /* offset 17129 */
+  "\xe9\xbc\x85\0" /* offset 17133 */
+  "\xe9\xbc\x8f\0" /* offset 17137 */
+  "\xe9\xbc\x96\0" /* offset 17141 */
+  "\xf0\xaa\x98\x80\0" /* offset 17145 */;
+
+#endif /* DECOMP_H */
diff --git a/glib/guniprop.c b/glib/guniprop.c
new file mode 100644
index 0000000..8a28513
--- /dev/null
+++ b/glib/guniprop.c
@@ -0,0 +1,1302 @@
+/* guniprop.c - Unicode character properties.
+ *
+ * Copyright (C) 1999 Tom Tromey
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <locale.h>
+
+#include "glib.h"
+#include "gunichartables.h"
+#include "gmirroringtable.h"
+#include "gscripttable.h"
+#include "gunicodeprivate.h"
+#include "galias.h"
+
+#define ATTR_TABLE(Page) (((Page) <= G_UNICODE_LAST_PAGE_PART1) \
+                          ? attr_table_part1[Page] \
+                          : attr_table_part2[(Page) - 0xe00])
+
+#define ATTTABLE(Page, Char) \
+  ((ATTR_TABLE(Page) == G_UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char]))
+
+#define TTYPE_PART1(Page, Char) \
+  ((type_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+   ? (type_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+   : (type_data[type_table_part1[Page]][Char]))
+
+#define TTYPE_PART2(Page, Char) \
+  ((type_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+   ? (type_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+   : (type_data[type_table_part2[Page]][Char]))
+
+#define TYPE(Char) \
+  (((Char) <= G_UNICODE_LAST_CHAR_PART1) \
+   ? TTYPE_PART1 ((Char) >> 8, (Char) & 0xff) \
+   : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \
+      ? TTYPE_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
+      : G_UNICODE_UNASSIGNED))
+
+
+#define IS(Type, Class)	(((guint)1 << (Type)) & (Class))
+#define OR(Type, Rest)	(((guint)1 << (Type)) | (Rest))
+
+
+
+#define ISALPHA(Type)	IS ((Type),				\
+			    OR (G_UNICODE_LOWERCASE_LETTER,	\
+			    OR (G_UNICODE_UPPERCASE_LETTER,	\
+			    OR (G_UNICODE_TITLECASE_LETTER,	\
+			    OR (G_UNICODE_MODIFIER_LETTER,	\
+			    OR (G_UNICODE_OTHER_LETTER,		0))))))
+
+#define ISALDIGIT(Type)	IS ((Type),				\
+			    OR (G_UNICODE_DECIMAL_NUMBER,	\
+			    OR (G_UNICODE_LETTER_NUMBER,	\
+			    OR (G_UNICODE_OTHER_NUMBER,		\
+			    OR (G_UNICODE_LOWERCASE_LETTER,	\
+			    OR (G_UNICODE_UPPERCASE_LETTER,	\
+			    OR (G_UNICODE_TITLECASE_LETTER,	\
+			    OR (G_UNICODE_MODIFIER_LETTER,	\
+			    OR (G_UNICODE_OTHER_LETTER,		0)))))))))
+
+#define ISMARK(Type)	IS ((Type),				\
+			    OR (G_UNICODE_NON_SPACING_MARK,	\
+			    OR (G_UNICODE_COMBINING_MARK,	\
+			    OR (G_UNICODE_ENCLOSING_MARK,	0))))
+
+#define ISZEROWIDTHTYPE(Type)	IS ((Type),			\
+			    OR (G_UNICODE_NON_SPACING_MARK,	\
+			    OR (G_UNICODE_ENCLOSING_MARK,	\
+			    OR (G_UNICODE_FORMAT,		0))))
+
+/**
+ * g_unichar_isalnum:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is alphanumeric.
+ * Given some UTF-8 text, obtain a character value
+ * with g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is an alphanumeric character
+ **/
+gboolean
+g_unichar_isalnum (gunichar c)
+{
+  return ISALDIGIT (TYPE (c)) ? TRUE : FALSE;
+}
+
+/**
+ * g_unichar_isalpha:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is alphabetic (i.e. a letter).
+ * Given some UTF-8 text, obtain a character value with
+ * g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is an alphabetic character
+ **/
+gboolean
+g_unichar_isalpha (gunichar c)
+{
+  return ISALPHA (TYPE (c)) ? TRUE : FALSE;
+}
+
+
+/**
+ * g_unichar_iscntrl:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is a control character.
+ * Given some UTF-8 text, obtain a character value with
+ * g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is a control character
+ **/
+gboolean
+g_unichar_iscntrl (gunichar c)
+{
+  return TYPE (c) == G_UNICODE_CONTROL;
+}
+
+/**
+ * g_unichar_isdigit:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is numeric (i.e. a digit).  This
+ * covers ASCII 0-9 and also digits in other languages/scripts.  Given
+ * some UTF-8 text, obtain a character value with g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is a digit
+ **/
+gboolean
+g_unichar_isdigit (gunichar c)
+{
+  return TYPE (c) == G_UNICODE_DECIMAL_NUMBER;
+}
+
+
+/**
+ * g_unichar_isgraph:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is printable and not a space
+ * (returns %FALSE for control characters, format characters, and
+ * spaces). g_unichar_isprint() is similar, but returns %TRUE for
+ * spaces. Given some UTF-8 text, obtain a character value with
+ * g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is printable unless it's a space
+ **/
+gboolean
+g_unichar_isgraph (gunichar c)
+{
+  return !IS (TYPE(c),
+	      OR (G_UNICODE_CONTROL,
+	      OR (G_UNICODE_FORMAT,
+	      OR (G_UNICODE_UNASSIGNED,
+	      OR (G_UNICODE_SURROGATE,
+	      OR (G_UNICODE_SPACE_SEPARATOR,
+	     0))))));
+}
+
+/**
+ * g_unichar_islower:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is a lowercase letter.
+ * Given some UTF-8 text, obtain a character value with
+ * g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is a lowercase letter
+ **/
+gboolean
+g_unichar_islower (gunichar c)
+{
+  return TYPE (c) == G_UNICODE_LOWERCASE_LETTER;
+}
+
+
+/**
+ * g_unichar_isprint:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is printable.
+ * Unlike g_unichar_isgraph(), returns %TRUE for spaces.
+ * Given some UTF-8 text, obtain a character value with
+ * g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is printable
+ **/
+gboolean
+g_unichar_isprint (gunichar c)
+{
+  return !IS (TYPE(c),
+	      OR (G_UNICODE_CONTROL,
+	      OR (G_UNICODE_FORMAT,
+	      OR (G_UNICODE_UNASSIGNED,
+	      OR (G_UNICODE_SURROGATE,
+	     0)))));
+}
+
+/**
+ * g_unichar_ispunct:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is punctuation or a symbol.
+ * Given some UTF-8 text, obtain a character value with
+ * g_utf8_get_char().
+ * 
+ * Return value: %TRUE if @c is a punctuation or symbol character
+ **/
+gboolean
+g_unichar_ispunct (gunichar c)
+{
+  return IS (TYPE(c),
+	     OR (G_UNICODE_CONNECT_PUNCTUATION,
+	     OR (G_UNICODE_DASH_PUNCTUATION,
+	     OR (G_UNICODE_CLOSE_PUNCTUATION,
+	     OR (G_UNICODE_FINAL_PUNCTUATION,
+	     OR (G_UNICODE_INITIAL_PUNCTUATION,
+	     OR (G_UNICODE_OTHER_PUNCTUATION,
+	     OR (G_UNICODE_OPEN_PUNCTUATION,
+	     OR (G_UNICODE_CURRENCY_SYMBOL,
+	     OR (G_UNICODE_MODIFIER_SYMBOL,
+	     OR (G_UNICODE_MATH_SYMBOL,
+	     OR (G_UNICODE_OTHER_SYMBOL,
+	    0)))))))))))) ? TRUE : FALSE;
+}
+
+/**
+ * g_unichar_isspace:
+ * @c: a Unicode character
+ * 
+ * Determines whether a character is a space, tab, or line separator
+ * (newline, carriage return, etc.).  Given some UTF-8 text, obtain a
+ * character value with g_utf8_get_char().
+ *
+ * (Note: don't use this to do word breaking; you have to use
+ * Pango or equivalent to get word breaking right, the algorithm
+ * is fairly complex.)
+ *  
+ * Return value: %TRUE if @c is a space character
+ **/
+gboolean
+g_unichar_isspace (gunichar c)
+{
+  switch (c)
+    {
+      /* special-case these since Unicode thinks they are not spaces */
+    case '\t':
+    case '\n':
+    case '\r':
+    case '\f':
+      return TRUE;
+      break;
+      
+    default:
+      {
+	return IS (TYPE(c),
+	           OR (G_UNICODE_SPACE_SEPARATOR,
+	           OR (G_UNICODE_LINE_SEPARATOR,
+                   OR (G_UNICODE_PARAGRAPH_SEPARATOR,
+		  0)))) ? TRUE : FALSE;
+      }
+      break;
+    }
+}
+
+/**
+ * g_unichar_ismark:
+ * @c: a Unicode character
+ *
+ * Determines whether a character is a mark (non-spacing mark,
+ * combining mark, or enclosing mark in Unicode speak).
+ * Given some UTF-8 text, obtain a character value
+ * with g_utf8_get_char().
+ *
+ * Note: in most cases where isalpha characters are allowed,
+ * ismark characters should be allowed to as they are essential
+ * for writing most European languages as well as many non-Latin
+ * scripts.
+ *
+ * Return value: %TRUE if @c is a mark character
+ *
+ * Since: 2.14
+ **/
+gboolean
+g_unichar_ismark (gunichar c)
+{
+  return ISMARK (TYPE (c));
+}
+
+/**
+ * g_unichar_isupper:
+ * @c: a Unicode character
+ * 
+ * Determines if a character is uppercase.
+ * 
+ * Return value: %TRUE if @c is an uppercase character
+ **/
+gboolean
+g_unichar_isupper (gunichar c)
+{
+  return TYPE (c) == G_UNICODE_UPPERCASE_LETTER;
+}
+
+/**
+ * g_unichar_istitle:
+ * @c: a Unicode character
+ * 
+ * Determines if a character is titlecase. Some characters in
+ * Unicode which are composites, such as the DZ digraph
+ * have three case variants instead of just two. The titlecase
+ * form is used at the beginning of a word where only the
+ * first letter is capitalized. The titlecase form of the DZ
+ * digraph is U+01F2 LATIN CAPITAL LETTTER D WITH SMALL LETTER Z.
+ * 
+ * Return value: %TRUE if the character is titlecase
+ **/
+gboolean
+g_unichar_istitle (gunichar c)
+{
+  unsigned int i;
+  for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+    if (title_table[i][0] == c)
+      return TRUE;
+  return FALSE;
+}
+
+/**
+ * g_unichar_isxdigit:
+ * @c: a Unicode character.
+ * 
+ * Determines if a character is a hexidecimal digit.
+ * 
+ * Return value: %TRUE if the character is a hexadecimal digit
+ **/
+gboolean
+g_unichar_isxdigit (gunichar c)
+{
+  return ((c >= 'a' && c <= 'f')
+	  || (c >= 'A' && c <= 'F')
+	  || (TYPE (c) == G_UNICODE_DECIMAL_NUMBER));
+}
+
+/**
+ * g_unichar_isdefined:
+ * @c: a Unicode character
+ * 
+ * Determines if a given character is assigned in the Unicode
+ * standard.
+ *
+ * Return value: %TRUE if the character has an assigned value
+ **/
+gboolean
+g_unichar_isdefined (gunichar c)
+{
+  return !IS (TYPE(c),
+	      OR (G_UNICODE_UNASSIGNED,
+	      OR (G_UNICODE_SURROGATE,
+	     0)));
+}
+
+/**
+ * g_unichar_iszerowidth:
+ * @c: a Unicode character
+ * 
+ * Determines if a given character typically takes zero width when rendered.
+ * The return value is %TRUE for all non-spacing and enclosing marks
+ * (e.g., combining accents), format characters, zero-width
+ * space, but not U+00AD SOFT HYPHEN.
+ *
+ * A typical use of this function is with one of g_unichar_iswide() or
+ * g_unichar_iswide_cjk() to determine the number of cells a string occupies
+ * when displayed on a grid display (terminals).  However, note that not all
+ * terminals support zero-width rendering of zero-width marks.
+ *
+ * Return value: %TRUE if the character has zero width
+ *
+ * Since: 2.14
+ **/
+gboolean
+g_unichar_iszerowidth (gunichar c)
+{
+  if (G_UNLIKELY (c == 0x00AD))
+    return FALSE;
+
+  if (G_UNLIKELY (ISZEROWIDTHTYPE (TYPE (c))))
+    return TRUE;
+
+  if (G_UNLIKELY ((c >= 0x1160 && c < 0x1200) ||
+		  c == 0x200B))
+    return TRUE;
+
+  return FALSE;
+}
+
+struct Interval
+{
+  gunichar start, end;
+};
+
+static int
+interval_compare (const void *key, const void *elt)
+{
+  gunichar c = GPOINTER_TO_UINT (key);
+  struct Interval *interval = (struct Interval *)elt;
+
+  if (c < interval->start)
+    return -1;
+  if (c > interval->end)
+    return +1;
+
+  return 0;
+}
+
+/**
+ * g_unichar_iswide:
+ * @c: a Unicode character
+ * 
+ * Determines if a character is typically rendered in a double-width
+ * cell.
+ * 
+ * Return value: %TRUE if the character is wide
+ **/
+gboolean
+g_unichar_iswide (gunichar c)
+{
+  /* sorted list of intervals of East_Asian_Width = W and F characters
+   * from Unicode 5.1.0.  produced by mungling output of:
+   * grep ';[FW]\>' EastAsianWidth.txt */
+  static const struct Interval wide[] = {
+    {0x1100, 0x1159}, {0x115F, 0x115F}, {0x2329, 0x232A}, {0x2E80, 0x2E99},
+    {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB}, {0x3000, 0x303E},
+    {0x3041, 0x3096}, {0x3099, 0x30FF}, {0x3105, 0x312D}, {0x3131, 0x318E},
+    {0x3190, 0x31B7}, {0x31C0, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3243},
+    {0x3250, 0x32FE}, {0x3300, 0x4DB5}, {0x4E00, 0x9FC3}, {0xA000, 0xA48C},
+    {0xA490, 0xA4C6}, {0xAC00, 0xD7A3}, {0xF900, 0xFA2D}, {0xFA30, 0xFA6A},
+    {0xFA70, 0xFAD9}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, {0xFE54, 0xFE66},
+    {0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x20000, 0x2FFFD},
+    {0x30000, 0x3FFFD}
+  };
+
+  if (bsearch (GUINT_TO_POINTER (c), wide, G_N_ELEMENTS (wide), sizeof wide[0],
+	       interval_compare))
+    return TRUE;
+
+  return FALSE;
+}
+
+
+/**
+ * g_unichar_iswide_cjk:
+ * @c: a Unicode character
+ * 
+ * Determines if a character is typically rendered in a double-width
+ * cell under legacy East Asian locales.  If a character is wide according to
+ * g_unichar_iswide(), then it is also reported wide with this function, but
+ * the converse is not necessarily true.  See the
+ * <ulink url="http://www.unicode.org/reports/tr11/">Unicode Standard
+ * Annex #11</ulink> for details.
+ *
+ * If a character passes the g_unichar_iswide() test then it will also pass
+ * this test, but not the other way around.  Note that some characters may
+ * pas both this test and g_unichar_iszerowidth().
+ * 
+ * Return value: %TRUE if the character is wide in legacy East Asian locales
+ *
+ * Since: 2.12
+ */
+gboolean
+g_unichar_iswide_cjk (gunichar c)
+{
+  /* sorted list of intervals of East_Asian_Width = A and F characters
+   * from Unicode 5.1.0.  produced by mungling output of:
+   * grep ';[A]\>' EastAsianWidth.txt */
+  static const struct Interval ambiguous[] = {
+    {0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8}, {0x00AA, 0x00AA},
+    {0x00AD, 0x00AE}, {0x00B0, 0x00B4}, {0x00B6, 0x00BA}, {0x00BC, 0x00BF},
+    {0x00C6, 0x00C6}, {0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
+    {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED}, {0x00F0, 0x00F0},
+    {0x00F2, 0x00F3}, {0x00F7, 0x00FA}, {0x00FC, 0x00FC}, {0x00FE, 0x00FE},
+    {0x0101, 0x0101}, {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
+    {0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133}, {0x0138, 0x0138},
+    {0x013F, 0x0142}, {0x0144, 0x0144}, {0x0148, 0x014B}, {0x014D, 0x014D},
+    {0x0152, 0x0153}, {0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
+    {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, {0x01D6, 0x01D6},
+    {0x01D8, 0x01D8}, {0x01DA, 0x01DA}, {0x01DC, 0x01DC}, {0x0251, 0x0251},
+    {0x0261, 0x0261}, {0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
+    {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB}, {0x02DD, 0x02DD},
+    {0x02DF, 0x02DF}, {0x0300, 0x036F}, {0x0391, 0x03A1}, {0x03A3, 0x03A9},
+    {0x03B1, 0x03C1}, {0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},
+    {0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016}, {0x2018, 0x2019},
+    {0x201C, 0x201D}, {0x2020, 0x2022}, {0x2024, 0x2027}, {0x2030, 0x2030},
+    {0x2032, 0x2033}, {0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},
+    {0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084}, {0x20AC, 0x20AC},
+    {0x2103, 0x2103}, {0x2105, 0x2105}, {0x2109, 0x2109}, {0x2113, 0x2113},
+    {0x2116, 0x2116}, {0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},
+    {0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B}, {0x2170, 0x2179},
+    {0x2190, 0x2199}, {0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},
+    {0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203}, {0x2207, 0x2208},
+    {0x220B, 0x220B}, {0x220F, 0x220F}, {0x2211, 0x2211}, {0x2215, 0x2215},
+    {0x221A, 0x221A}, {0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},
+    {0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237}, {0x223C, 0x223D},
+    {0x2248, 0x2248}, {0x224C, 0x224C}, {0x2252, 0x2252}, {0x2260, 0x2261},
+    {0x2264, 0x2267}, {0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},
+    {0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299}, {0x22A5, 0x22A5},
+    {0x22BF, 0x22BF}, {0x2312, 0x2312}, {0x2460, 0x24E9}, {0x24EB, 0x254B},
+    {0x2550, 0x2573}, {0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},
+    {0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7}, {0x25BC, 0x25BD},
+    {0x25C0, 0x25C1}, {0x25C6, 0x25C8}, {0x25CB, 0x25CB}, {0x25CE, 0x25D1},
+    {0x25E2, 0x25E5}, {0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},
+    {0x260E, 0x260F}, {0x2614, 0x2615}, {0x261C, 0x261C}, {0x261E, 0x261E},
+    {0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661}, {0x2663, 0x2665},
+    {0x2667, 0x266A}, {0x266C, 0x266D}, {0x266F, 0x266F}, {0x273D, 0x273D},
+    {0x2776, 0x277F}, {0xE000, 0xF8FF}, {0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD},
+    {0xE0100, 0xE01EF}, {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}
+  };
+
+  if (g_unichar_iswide (c))
+    return TRUE;
+
+  if (bsearch (GUINT_TO_POINTER (c), ambiguous, G_N_ELEMENTS (ambiguous), sizeof ambiguous[0],
+	       interval_compare))
+    return TRUE;
+
+  return FALSE;
+}
+
+
+/**
+ * g_unichar_toupper:
+ * @c: a Unicode character
+ * 
+ * Converts a character to uppercase.
+ * 
+ * Return value: the result of converting @c to uppercase.
+ *               If @c is not an lowercase or titlecase character,
+ *               or has no upper case equivalent @c is returned unchanged.
+ **/
+gunichar
+g_unichar_toupper (gunichar c)
+{
+  int t = TYPE (c);
+  if (t == G_UNICODE_LOWERCASE_LETTER)
+    {
+      gunichar val = ATTTABLE (c >> 8, c & 0xff);
+      if (val >= 0x1000000)
+	{
+	  const gchar *p = special_case_table + val - 0x1000000;
+          val = g_utf8_get_char (p);
+	}
+      /* Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
+       * do not have an uppercase equivalent, in which case val will be
+       * zero. 
+       */
+      return val ? val : c;
+    }
+  else if (t == G_UNICODE_TITLECASE_LETTER)
+    {
+      unsigned int i;
+      for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+	{
+	  if (title_table[i][0] == c)
+	    return title_table[i][1];
+	}
+    }
+  return c;
+}
+
+/**
+ * g_unichar_tolower:
+ * @c: a Unicode character.
+ * 
+ * Converts a character to lower case.
+ * 
+ * Return value: the result of converting @c to lower case.
+ *               If @c is not an upperlower or titlecase character,
+ *               or has no lowercase equivalent @c is returned unchanged.
+ **/
+gunichar
+g_unichar_tolower (gunichar c)
+{
+  int t = TYPE (c);
+  if (t == G_UNICODE_UPPERCASE_LETTER)
+    {
+      gunichar val = ATTTABLE (c >> 8, c & 0xff);
+      if (val >= 0x1000000)
+	{
+	  const gchar *p = special_case_table + val - 0x1000000;
+	  return g_utf8_get_char (p);
+	}
+      else
+	{
+	  /* Not all uppercase letters are guaranteed to have a lowercase
+	   * equivalent.  If this is the case, val will be zero. */
+	  return val ? val : c;
+	}
+    }
+  else if (t == G_UNICODE_TITLECASE_LETTER)
+    {
+      unsigned int i;
+      for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+	{
+	  if (title_table[i][0] == c)
+	    return title_table[i][2];
+	}
+    }
+  return c;
+}
+
+/**
+ * g_unichar_totitle:
+ * @c: a Unicode character
+ * 
+ * Converts a character to the titlecase.
+ * 
+ * Return value: the result of converting @c to titlecase.
+ *               If @c is not an uppercase or lowercase character,
+ *               @c is returned unchanged.
+ **/
+gunichar
+g_unichar_totitle (gunichar c)
+{
+  unsigned int i;
+  for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+    {
+      if (title_table[i][0] == c || title_table[i][1] == c
+	  || title_table[i][2] == c)
+	return title_table[i][0];
+    }
+    
+  if (TYPE (c) == G_UNICODE_LOWERCASE_LETTER)
+    return g_unichar_toupper (c);
+
+  return c;
+}
+
+/**
+ * g_unichar_digit_value:
+ * @c: a Unicode character
+ *
+ * Determines the numeric value of a character as a decimal
+ * digit.
+ *
+ * Return value: If @c is a decimal digit (according to
+ * g_unichar_isdigit()), its numeric value. Otherwise, -1.
+ **/
+int
+g_unichar_digit_value (gunichar c)
+{
+  if (TYPE (c) == G_UNICODE_DECIMAL_NUMBER)
+    return ATTTABLE (c >> 8, c & 0xff);
+  return -1;
+}
+
+/**
+ * g_unichar_xdigit_value:
+ * @c: a Unicode character
+ *
+ * Determines the numeric value of a character as a hexidecimal
+ * digit.
+ *
+ * Return value: If @c is a hex digit (according to
+ * g_unichar_isxdigit()), its numeric value. Otherwise, -1.
+ **/
+int
+g_unichar_xdigit_value (gunichar c)
+{
+  if (c >= 'A' && c <= 'F')
+    return c - 'A' + 10;
+  if (c >= 'a' && c <= 'f')
+    return c - 'a' + 10;
+  if (TYPE (c) == G_UNICODE_DECIMAL_NUMBER)
+    return ATTTABLE (c >> 8, c & 0xff);
+  return -1;
+}
+
+/**
+ * g_unichar_type:
+ * @c: a Unicode character
+ * 
+ * Classifies a Unicode character by type.
+ * 
+ * Return value: the type of the character.
+ **/
+GUnicodeType
+g_unichar_type (gunichar c)
+{
+  return TYPE (c);
+}
+
+/*
+ * Case mapping functions
+ */
+
+typedef enum {
+  LOCALE_NORMAL,
+  LOCALE_TURKIC,
+  LOCALE_LITHUANIAN
+} LocaleType;
+
+static LocaleType
+get_locale_type (void)
+{
+#ifdef G_OS_WIN32
+  char *tem = g_win32_getlocale ();
+  char locale[2];
+
+  locale[0] = tem[0];
+  locale[1] = tem[1];
+  g_free (tem);
+#else
+  const char *locale = setlocale (LC_CTYPE, NULL);
+#endif
+
+  switch (locale[0])
+    {
+   case 'a':
+      if (locale[1] == 'z')
+	return LOCALE_TURKIC;
+      break;
+    case 'l':
+      if (locale[1] == 't')
+	return LOCALE_LITHUANIAN;
+      break;
+    case 't':
+      if (locale[1] == 'r')
+	return LOCALE_TURKIC;
+      break;
+    }
+
+  return LOCALE_NORMAL;
+}
+
+static gint
+output_marks (const char **p_inout,
+	      char        *out_buffer,
+	      gboolean     remove_dot)
+{
+  const char *p = *p_inout;
+  gint len = 0;
+  
+  while (*p)
+    {
+      gunichar c = g_utf8_get_char (p);
+      
+      if (ISMARK (TYPE (c)))
+	{
+	  if (!remove_dot || c != 0x307 /* COMBINING DOT ABOVE */)
+	    len += g_unichar_to_utf8 (c, out_buffer ? out_buffer + len : NULL);
+	  p = g_utf8_next_char (p);
+	}
+      else
+	break;
+    }
+
+  *p_inout = p;
+  return len;
+}
+
+static gint
+output_special_case (gchar *out_buffer,
+		     int    offset,
+		     int    type,
+		     int    which)
+{
+  const gchar *p = special_case_table + offset;
+  gint len;
+
+  if (type != G_UNICODE_TITLECASE_LETTER)
+    p = g_utf8_next_char (p);
+
+  if (which == 1)
+    p += strlen (p) + 1;
+
+  len = strlen (p);
+  if (out_buffer)
+    memcpy (out_buffer, p, len);
+
+  return len;
+}
+
+static gsize
+real_toupper (const gchar *str,
+	      gssize       max_len,
+	      gchar       *out_buffer,
+	      LocaleType   locale_type)
+{
+  const gchar *p = str;
+  const char *last = NULL;
+  gsize len = 0;
+  gboolean last_was_i = FALSE;
+
+  while ((max_len < 0 || p < str + max_len) && *p)
+    {
+      gunichar c = g_utf8_get_char (p);
+      int t = TYPE (c);
+      gunichar val;
+
+      last = p;
+      p = g_utf8_next_char (p);
+
+      if (locale_type == LOCALE_LITHUANIAN)
+	{
+	  if (c == 'i')
+	    last_was_i = TRUE;
+	  else 
+	    {
+	      if (last_was_i)
+		{
+		  /* Nasty, need to remove any dot above. Though
+		   * I think only E WITH DOT ABOVE occurs in practice
+		   * which could simplify this considerably.
+		   */
+		  gsize decomp_len, i;
+		  gunichar *decomp;
+
+		  decomp = g_unicode_canonical_decomposition (c, &decomp_len);
+		  for (i=0; i < decomp_len; i++)
+		    {
+		      if (decomp[i] != 0x307 /* COMBINING DOT ABOVE */)
+			len += g_unichar_to_utf8 (g_unichar_toupper (decomp[i]), out_buffer ? out_buffer + len : NULL);
+		    }
+		  g_free (decomp);
+		  
+		  len += output_marks (&p, out_buffer ? out_buffer + len : NULL, TRUE);
+
+		  continue;
+		}
+
+	      if (!ISMARK (t))
+		last_was_i = FALSE;
+	    }
+	}
+      
+      if (locale_type == LOCALE_TURKIC && c == 'i')
+	{
+	  /* i => LATIN CAPITAL LETTER I WITH DOT ABOVE */
+	  len += g_unichar_to_utf8 (0x130, out_buffer ? out_buffer + len : NULL); 
+	}
+      else if (c == 0x0345)	/* COMBINING GREEK YPOGEGRAMMENI */
+	{
+	  /* Nasty, need to move it after other combining marks .. this would go away if
+	   * we normalized first.
+	   */
+	  len += output_marks (&p, out_buffer ? out_buffer + len : NULL, FALSE);
+
+	  /* And output as GREEK CAPITAL LETTER IOTA */
+	  len += g_unichar_to_utf8 (0x399, out_buffer ? out_buffer + len : NULL); 	  
+	}
+      else if (IS (t,
+		   OR (G_UNICODE_LOWERCASE_LETTER,
+		   OR (G_UNICODE_TITLECASE_LETTER,
+		  0))))
+	{
+	  val = ATTTABLE (c >> 8, c & 0xff);
+
+	  if (val >= 0x1000000)
+	    {
+	      len += output_special_case (out_buffer ? out_buffer + len : NULL, val - 0x1000000, t,
+					  t == G_UNICODE_LOWERCASE_LETTER ? 0 : 1);
+	    }
+	  else
+	    {
+	      if (t == G_UNICODE_TITLECASE_LETTER)
+		{
+		  unsigned int i;
+		  for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+		    {
+		      if (title_table[i][0] == c)
+			{
+			  val = title_table[i][1];
+			  break;
+			}
+		    }
+		}
+
+	      /* Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
+	       * do not have an uppercase equivalent, in which case val will be
+	       * zero. */
+	      len += g_unichar_to_utf8 (val ? val : c, out_buffer ? out_buffer + len : NULL);
+	    }
+	}
+      else
+	{
+	  gsize char_len = g_utf8_skip[*(guchar *)last];
+
+	  if (out_buffer)
+	    memcpy (out_buffer + len, last, char_len);
+
+	  len += char_len;
+	}
+
+    }
+
+  return len;
+}
+
+/**
+ * g_utf8_strup:
+ * @str: a UTF-8 encoded string
+ * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
+ * 
+ * Converts all Unicode characters in the string that have a case
+ * to uppercase. The exact manner that this is done depends
+ * on the current locale, and may result in the number of
+ * characters in the string increasing. (For instance, the
+ * German ess-zet will be changed to SS.)
+ * 
+ * Return value: a newly allocated string, with all characters
+ *    converted to uppercase.  
+ **/
+gchar *
+g_utf8_strup (const gchar *str,
+	      gssize       len)
+{
+  gsize result_len;
+  LocaleType locale_type;
+  gchar *result;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  locale_type = get_locale_type ();
+  
+  /*
+   * We use a two pass approach to keep memory management simple
+   */
+  result_len = real_toupper (str, len, NULL, locale_type);
+  result = g_malloc (result_len + 1);
+  real_toupper (str, len, result, locale_type);
+  result[result_len] = '\0';
+
+  return result;
+}
+
+/* traverses the string checking for characters with combining class == 230
+ * until a base character is found */
+static gboolean
+has_more_above (const gchar *str)
+{
+  const gchar *p = str;
+  gint combining_class;
+
+  while (*p)
+    {
+      combining_class = g_unichar_combining_class (g_utf8_get_char (p));
+      if (combining_class == 230)
+        return TRUE;
+      else if (combining_class == 0)
+        break;
+
+      p = g_utf8_next_char (p);
+    }
+
+  return FALSE;
+}
+
+static gsize
+real_tolower (const gchar *str,
+	      gssize       max_len,
+	      gchar       *out_buffer,
+	      LocaleType   locale_type)
+{
+  const gchar *p = str;
+  const char *last = NULL;
+  gsize len = 0;
+
+  while ((max_len < 0 || p < str + max_len) && *p)
+    {
+      gunichar c = g_utf8_get_char (p);
+      int t = TYPE (c);
+      gunichar val;
+
+      last = p;
+      p = g_utf8_next_char (p);
+
+      if (locale_type == LOCALE_TURKIC && c == 'I')
+	{
+          if (g_utf8_get_char (p) == 0x0307)
+            {
+              /* I + COMBINING DOT ABOVE => i (U+0069) */
+              len += g_unichar_to_utf8 (0x0069, out_buffer ? out_buffer + len : NULL); 
+              p = g_utf8_next_char (p);
+            }
+          else
+            {
+              /* I => LATIN SMALL LETTER DOTLESS I */
+              len += g_unichar_to_utf8 (0x131, out_buffer ? out_buffer + len : NULL); 
+            }
+        }
+      /* Introduce an explicit dot above when lowercasing capital I's and J's
+       * whenever there are more accents above. [SpecialCasing.txt] */
+      else if (locale_type == LOCALE_LITHUANIAN && 
+               (c == 0x00cc || c == 0x00cd || c == 0x0128))
+        {
+          len += g_unichar_to_utf8 (0x0069, out_buffer ? out_buffer + len : NULL); 
+          len += g_unichar_to_utf8 (0x0307, out_buffer ? out_buffer + len : NULL); 
+
+          switch (c)
+            {
+            case 0x00cc: 
+              len += g_unichar_to_utf8 (0x0300, out_buffer ? out_buffer + len : NULL); 
+              break;
+            case 0x00cd: 
+              len += g_unichar_to_utf8 (0x0301, out_buffer ? out_buffer + len : NULL); 
+              break;
+            case 0x0128: 
+              len += g_unichar_to_utf8 (0x0303, out_buffer ? out_buffer + len : NULL); 
+              break;
+            }
+        }
+      else if (locale_type == LOCALE_LITHUANIAN && 
+               (c == 'I' || c == 'J' || c == 0x012e) && 
+               has_more_above (p))
+        {
+          len += g_unichar_to_utf8 (g_unichar_tolower (c), out_buffer ? out_buffer + len : NULL); 
+          len += g_unichar_to_utf8 (0x0307, out_buffer ? out_buffer + len : NULL); 
+        }
+      else if (c == 0x03A3)	/* GREEK CAPITAL LETTER SIGMA */
+	{
+	  if ((max_len < 0 || p < str + max_len) && *p)
+	    {
+	      gunichar next_c = g_utf8_get_char (p);
+	      int next_type = TYPE(next_c);
+
+	      /* SIGMA mapps differently depending on whether it is
+	       * final or not. The following simplified test would
+	       * fail in the case of combining marks following the
+	       * sigma, but I don't think that occurs in real text.
+	       * The test here matches that in ICU.
+	       */
+	      if (ISALPHA (next_type)) /* Lu,Ll,Lt,Lm,Lo */
+		val = 0x3c3;	/* GREEK SMALL SIGMA */
+	      else
+		val = 0x3c2;	/* GREEK SMALL FINAL SIGMA */
+	    }
+	  else
+	    val = 0x3c2;	/* GREEK SMALL FINAL SIGMA */
+
+	  len += g_unichar_to_utf8 (val, out_buffer ? out_buffer + len : NULL);
+	}
+      else if (IS (t,
+		   OR (G_UNICODE_UPPERCASE_LETTER,
+		   OR (G_UNICODE_TITLECASE_LETTER,
+		  0))))
+	{
+	  val = ATTTABLE (c >> 8, c & 0xff);
+
+	  if (val >= 0x1000000)
+	    {
+	      len += output_special_case (out_buffer ? out_buffer + len : NULL, val - 0x1000000, t, 0);
+	    }
+	  else
+	    {
+	      if (t == G_UNICODE_TITLECASE_LETTER)
+		{
+		  unsigned int i;
+		  for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+		    {
+		      if (title_table[i][0] == c)
+			{
+			  val = title_table[i][2];
+			  break;
+			}
+		    }
+		}
+
+	      /* Not all uppercase letters are guaranteed to have a lowercase
+	       * equivalent.  If this is the case, val will be zero. */
+	      len += g_unichar_to_utf8 (val ? val : c, out_buffer ? out_buffer + len : NULL);
+	    }
+	}
+      else
+	{
+	  gsize char_len = g_utf8_skip[*(guchar *)last];
+
+	  if (out_buffer)
+	    memcpy (out_buffer + len, last, char_len);
+
+	  len += char_len;
+	}
+
+    }
+
+  return len;
+}
+
+/**
+ * g_utf8_strdown:
+ * @str: a UTF-8 encoded string
+ * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
+ * 
+ * Converts all Unicode characters in the string that have a case
+ * to lowercase. The exact manner that this is done depends
+ * on the current locale, and may result in the number of
+ * characters in the string changing.
+ * 
+ * Return value: a newly allocated string, with all characters
+ *    converted to lowercase.  
+ **/
+gchar *
+g_utf8_strdown (const gchar *str,
+		gssize       len)
+{
+  gsize result_len;
+  LocaleType locale_type;
+  gchar *result;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  locale_type = get_locale_type ();
+  
+  /*
+   * We use a two pass approach to keep memory management simple
+   */
+  result_len = real_tolower (str, len, NULL, locale_type);
+  result = g_malloc (result_len + 1);
+  real_tolower (str, len, result, locale_type);
+  result[result_len] = '\0';
+
+  return result;
+}
+
+/**
+ * g_utf8_casefold:
+ * @str: a UTF-8 encoded string
+ * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
+ * 
+ * Converts a string into a form that is independent of case. The
+ * result will not correspond to any particular case, but can be
+ * compared for equality or ordered with the results of calling
+ * g_utf8_casefold() on other strings.
+ * 
+ * Note that calling g_utf8_casefold() followed by g_utf8_collate() is
+ * only an approximation to the correct linguistic case insensitive
+ * ordering, though it is a fairly good one. Getting this exactly
+ * right would require a more sophisticated collation function that
+ * takes case sensitivity into account. GLib does not currently
+ * provide such a function.
+ * 
+ * Return value: a newly allocated string, that is a
+ *   case independent form of @str.
+ **/
+gchar *
+g_utf8_casefold (const gchar *str,
+		 gssize       len)
+{
+  GString *result;
+  const char *p;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  result = g_string_new (NULL);
+  p = str;
+  while ((len < 0 || p < str + len) && *p)
+    {
+      gunichar ch = g_utf8_get_char (p);
+
+      int start = 0;
+      int end = G_N_ELEMENTS (casefold_table);
+
+      if (ch >= casefold_table[start].ch &&
+          ch <= casefold_table[end - 1].ch)
+	{
+	  while (TRUE)
+	    {
+	      int half = (start + end) / 2;
+	      if (ch == casefold_table[half].ch)
+		{
+		  g_string_append (result, casefold_table[half].data);
+		  goto next;
+		}
+	      else if (half == start)
+		break;
+	      else if (ch > casefold_table[half].ch)
+		start = half;
+	      else
+		end = half;
+	    }
+	}
+
+      g_string_append_unichar (result, g_unichar_tolower (ch));
+      
+    next:
+      p = g_utf8_next_char (p);
+    }
+
+  return g_string_free (result, FALSE); 
+}
+
+/**
+ * g_unichar_get_mirror_char:
+ * @ch: a Unicode character
+ * @mirrored_ch: location to store the mirrored character
+ * 
+ * In Unicode, some characters are <firstterm>mirrored</firstterm>. This
+ * means that their images are mirrored horizontally in text that is laid
+ * out from right to left. For instance, "(" would become its mirror image,
+ * ")", in right-to-left text.
+ *
+ * If @ch has the Unicode mirrored property and there is another unicode
+ * character that typically has a glyph that is the mirror image of @ch's
+ * glyph and @mirrored_ch is set, it puts that character in the address
+ * pointed to by @mirrored_ch.  Otherwise the original character is put.
+ *
+ * Return value: %TRUE if @ch has a mirrored character, %FALSE otherwise
+ *
+ * Since: 2.4
+ **/
+gboolean
+g_unichar_get_mirror_char (gunichar ch,
+                           gunichar *mirrored_ch)
+{
+  gboolean found;
+  gunichar mirrored;
+
+  mirrored = GLIB_GET_MIRRORING(ch);
+
+  found = ch != mirrored;
+  if (mirrored_ch)
+    *mirrored_ch = mirrored;
+
+  return found;
+
+}
+
+#define G_SCRIPT_TABLE_MIDPOINT (G_N_ELEMENTS (g_script_table) / 2)
+
+static inline GUnicodeScript
+g_unichar_get_script_bsearch (gunichar ch)
+{
+  int lower = 0;
+  int upper = G_N_ELEMENTS (g_script_table) - 1;
+  static int saved_mid = G_SCRIPT_TABLE_MIDPOINT;
+  int mid = saved_mid;
+
+
+  do 
+    {
+      if (ch < g_script_table[mid].start)
+	upper = mid - 1;
+      else if (ch >= g_script_table[mid].start + g_script_table[mid].chars)
+	lower = mid + 1;
+      else
+	return g_script_table[saved_mid = mid].script;
+
+      mid = (lower + upper) / 2;
+    }
+  while (lower <= upper);
+
+  return G_UNICODE_SCRIPT_UNKNOWN;
+}
+
+/**
+ * g_unichar_get_script:
+ * @ch: a Unicode character
+ * 
+ * Looks up the #GUnicodeScript for a particular character (as defined 
+ * by Unicode Standard Annex #24). No check is made for @ch being a
+ * valid Unicode character; if you pass in invalid character, the
+ * result is undefined.
+ *
+ * This function is equivalent to pango_script_for_unichar() and the
+ * two are interchangeable.
+ * 
+ * Return value: the #GUnicodeScript for the character.
+ *
+ * Since: 2.14
+ */
+GUnicodeScript
+g_unichar_get_script (gunichar ch)
+{
+  if (ch < G_EASY_SCRIPTS_RANGE)
+    return g_script_easy_table[ch];
+  else 
+    return g_unichar_get_script_bsearch (ch); 
+}
+
+
+#define __G_UNIPROP_C__
+#include "galiasdef.c"
diff --git a/glib/gurifuncs.h b/glib/gurifuncs.h
new file mode 100644
index 0000000..bcdeed9
--- /dev/null
+++ b/glib/gurifuncs.h
@@ -0,0 +1,81 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright (C) 2006-2007 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * Author: Alexander Larsson <alexl@redhat.com>
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_URI_FUNCS_H__
+#define __G_URI_FUNCS_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * G_URI_RESERVED_CHARS_GENERIC_DELIMITERS:
+ * 
+ * Generic delimiters characters as defined in RFC 3986. Includes ":/?#[]@".
+ **/
+#define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@"
+
+/**
+ * G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS
+ * 
+ * Subcomponent delimiter characters as defined in RFC 3986. Includes "!$&'()*+,;=".
+ **/
+#define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
+
+/**
+ * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT:
+ * 
+ * Allowed characters in path elements. Includes "!$&'()*+,;=:@".
+ **/
+#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@"
+
+/**
+ * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH:
+ * 
+ * Allowed characters in a path. Includes "!$&'()*+,;=:@/".
+ **/
+#define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/"
+
+/**
+ * G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO:
+ * 
+ * Allowed characters in userinfo as defined in RFC 3986. Includes "!$&'()*+,;=:".
+ **/
+#define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":"
+
+char *   g_uri_unescape_string       (const char *escaped_string,
+				      const char *illegal_characters);
+char *   g_uri_unescape_segment      (const char *escaped_string,
+				      const char *escaped_string_end,
+				      const char *illegal_characters);
+char *   g_uri_parse_scheme          (const char *uri);
+char *   g_uri_escape_string         (const char *unescaped,
+				      const char *reserved_chars_allowed,
+				      gboolean    allow_utf8);
+
+G_END_DECLS
+
+#endif /* __G_URI_FUNCS_H__ */
diff --git a/glib/gutf8.c b/glib/gutf8.c
new file mode 100644
index 0000000..9f98cc1
--- /dev/null
+++ b/glib/gutf8.c
@@ -0,0 +1,1881 @@
+/* gutf8.c - Operations on UTF-8 strings.
+ *
+ * Copyright (C) 1999 Tom Tromey
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#ifdef ANDROID_STUB
+#ifdef HAVE_CODESET
+#include <langinfo.h>
+#endif
+#endif
+#include <string.h>
+
+#include "glib.h"
+
+#ifdef G_PLATFORM_WIN32
+#include <stdio.h>
+#define STRICT
+#include <windows.h>
+#undef STRICT
+#endif
+
+#ifdef ANDROID_STUB
+#include "libcharset/libcharset.h"
+#endif
+
+#include "glibintl.h"
+#include "galias.h"
+
+#define UTF8_COMPUTE(Char, Mask, Len)					      \
+  if (Char < 128)							      \
+    {									      \
+      Len = 1;								      \
+      Mask = 0x7f;							      \
+    }									      \
+  else if ((Char & 0xe0) == 0xc0)					      \
+    {									      \
+      Len = 2;								      \
+      Mask = 0x1f;							      \
+    }									      \
+  else if ((Char & 0xf0) == 0xe0)					      \
+    {									      \
+      Len = 3;								      \
+      Mask = 0x0f;							      \
+    }									      \
+  else if ((Char & 0xf8) == 0xf0)					      \
+    {									      \
+      Len = 4;								      \
+      Mask = 0x07;							      \
+    }									      \
+  else if ((Char & 0xfc) == 0xf8)					      \
+    {									      \
+      Len = 5;								      \
+      Mask = 0x03;							      \
+    }									      \
+  else if ((Char & 0xfe) == 0xfc)					      \
+    {									      \
+      Len = 6;								      \
+      Mask = 0x01;							      \
+    }									      \
+  else									      \
+    Len = -1;
+
+#define UTF8_LENGTH(Char)              \
+  ((Char) < 0x80 ? 1 :                 \
+   ((Char) < 0x800 ? 2 :               \
+    ((Char) < 0x10000 ? 3 :            \
+     ((Char) < 0x200000 ? 4 :          \
+      ((Char) < 0x4000000 ? 5 : 6)))))
+   
+
+#define UTF8_GET(Result, Chars, Count, Mask, Len)			      \
+  (Result) = (Chars)[0] & (Mask);					      \
+  for ((Count) = 1; (Count) < (Len); ++(Count))				      \
+    {									      \
+      if (((Chars)[(Count)] & 0xc0) != 0x80)				      \
+	{								      \
+	  (Result) = -1;						      \
+	  break;							      \
+	}								      \
+      (Result) <<= 6;							      \
+      (Result) |= ((Chars)[(Count)] & 0x3f);				      \
+    }
+
+#define UNICODE_VALID(Char)                   \
+    ((Char) < 0x110000 &&                     \
+     (((Char) & 0xFFFFF800) != 0xD800) &&     \
+     ((Char) < 0xFDD0 || (Char) > 0xFDEF) &&  \
+     ((Char) & 0xFFFE) != 0xFFFE)
+   
+     
+static const gchar utf8_skip_data[256] = {
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1
+};
+
+const gchar * const g_utf8_skip = utf8_skip_data;
+
+/**
+ * g_utf8_find_prev_char:
+ * @str: pointer to the beginning of a UTF-8 encoded string
+ * @p: pointer to some position within @str
+ * 
+ * Given a position @p with a UTF-8 encoded string @str, find the start
+ * of the previous UTF-8 character starting before @p. Returns %NULL if no
+ * UTF-8 characters are present in @str before @p.
+ *
+ * @p does not have to be at the beginning of a UTF-8 character. No check
+ * is made to see if the character found is actually valid other than
+ * it starts with an appropriate byte.
+ *
+ * Return value: a pointer to the found character or %NULL.
+ **/
+gchar *
+g_utf8_find_prev_char (const char *str,
+		       const char *p)
+{
+  for (--p; p >= str; --p)
+    {
+      if ((*p & 0xc0) != 0x80)
+	return (gchar *)p;
+    }
+  return NULL;
+}
+
+/**
+ * g_utf8_find_next_char:
+ * @p: a pointer to a position within a UTF-8 encoded string
+ * @end: a pointer to the byte following the end of the string,
+ * or %NULL to indicate that the string is nul-terminated.
+ *
+ * Finds the start of the next UTF-8 character in the string after @p.
+ *
+ * @p does not have to be at the beginning of a UTF-8 character. No check
+ * is made to see if the character found is actually valid other than
+ * it starts with an appropriate byte.
+ * 
+ * Return value: a pointer to the found character or %NULL
+ **/
+gchar *
+g_utf8_find_next_char (const gchar *p,
+		       const gchar *end)
+{
+  if (*p)
+    {
+      if (end)
+	for (++p; p < end && (*p & 0xc0) == 0x80; ++p)
+	  ;
+      else
+	for (++p; (*p & 0xc0) == 0x80; ++p)
+	  ;
+    }
+  return (p == end) ? NULL : (gchar *)p;
+}
+
+/**
+ * g_utf8_prev_char:
+ * @p: a pointer to a position within a UTF-8 encoded string
+ *
+ * Finds the previous UTF-8 character in the string before @p.
+ *
+ * @p does not have to be at the beginning of a UTF-8 character. No check
+ * is made to see if the character found is actually valid other than
+ * it starts with an appropriate byte. If @p might be the first
+ * character of the string, you must use g_utf8_find_prev_char() instead.
+ * 
+ * Return value: a pointer to the found character.
+ **/
+gchar *
+g_utf8_prev_char (const gchar *p)
+{
+  while (TRUE)
+    {
+      p--;
+      if ((*p & 0xc0) != 0x80)
+	return (gchar *)p;
+    }
+}
+
+/**
+ * g_utf8_strlen:
+ * @p: pointer to the start of a UTF-8 encoded string.
+ * @max: the maximum number of bytes to examine. If @max
+ *       is less than 0, then the string is assumed to be
+ *       nul-terminated. If @max is 0, @p will not be examined and 
+ *       may be %NULL.
+ * 
+ * Returns the length of the string in characters.
+ *
+ * Return value: the length of the string in characters
+ **/
+glong
+g_utf8_strlen (const gchar *p,
+               gssize       max)
+{
+  glong len = 0;
+  const gchar *start = p;
+  g_return_val_if_fail (p != NULL || max == 0, 0);
+
+  if (max < 0)
+    {
+      while (*p)
+        {
+          p = g_utf8_next_char (p);
+          ++len;
+        }
+    }
+  else
+    {
+      if (max == 0 || !*p)
+        return 0;
+      
+      p = g_utf8_next_char (p);          
+
+      while (p - start < max && *p)
+        {
+          ++len;
+          p = g_utf8_next_char (p);          
+        }
+
+      /* only do the last len increment if we got a complete
+       * char (don't count partial chars)
+       */
+      if (p - start <= max)
+        ++len;
+    }
+
+  return len;
+}
+
+/**
+ * g_utf8_get_char:
+ * @p: a pointer to Unicode character encoded as UTF-8
+ * 
+ * Converts a sequence of bytes encoded as UTF-8 to a Unicode character.
+ * If @p does not point to a valid UTF-8 encoded character, results are
+ * undefined. If you are not sure that the bytes are complete
+ * valid Unicode characters, you should use g_utf8_get_char_validated()
+ * instead.
+ * 
+ * Return value: the resulting character
+ **/
+gunichar
+g_utf8_get_char (const gchar *p)
+{
+  int i, mask = 0, len;
+  gunichar result;
+  unsigned char c = (unsigned char) *p;
+
+  UTF8_COMPUTE (c, mask, len);
+  if (len == -1)
+    return (gunichar)-1;
+  UTF8_GET (result, p, i, mask, len);
+
+  return result;
+}
+
+/**
+ * g_utf8_offset_to_pointer:
+ * @str: a UTF-8 encoded string
+ * @offset: a character offset within @str
+ *
+ * Converts from an integer character offset to a pointer to a position
+ * within the string.
+ *
+ * Since 2.10, this function allows to pass a negative @offset to
+ * step backwards. It is usually worth stepping backwards from the end
+ * instead of forwards if @offset is in the last fourth of the string,
+ * since moving forward is about 3 times faster than moving backward.
+ *
+ * <note><para>
+ * This function doesn't abort when reaching the end of @str. Therefore
+ * you should be sure that @offset is within string boundaries before
+ * calling that function. Call g_utf8_strlen() when unsure.
+ *
+ * This limitation exists as this function is called frequently during
+ * text rendering and therefore has to be as fast as possible.
+ * </para></note>
+ *
+ * Return value: the resulting pointer
+ **/
+gchar *
+g_utf8_offset_to_pointer  (const gchar *str,
+			   glong        offset)
+{
+  const gchar *s = str;
+
+  if (offset > 0) 
+    while (offset--)
+      s = g_utf8_next_char (s);
+  else
+    {
+      const char *s1;
+
+      /* This nice technique for fast backwards stepping 
+       * through a UTF-8 string was dubbed "stutter stepping" 
+       * by its inventor, Larry Ewing.
+       */
+      while (offset)
+	{
+	  s1 = s;
+	  s += offset;
+	  while ((*s & 0xc0) == 0x80)
+	    s--;
+
+	  offset += g_utf8_pointer_to_offset (s, s1);
+	}
+    }
+
+  return (gchar *)s;
+}
+
+/**
+ * g_utf8_pointer_to_offset:
+ * @str: a UTF-8 encoded string
+ * @pos: a pointer to a position within @str
+ * 
+ * Converts from a pointer to position within a string to a integer
+ * character offset.
+ *
+ * Since 2.10, this function allows @pos to be before @str, and returns
+ * a negative offset in this case.
+ * 
+ * Return value: the resulting character offset
+ **/
+glong    
+g_utf8_pointer_to_offset (const gchar *str,
+			  const gchar *pos)
+{
+  const gchar *s = str;
+  glong offset = 0;    
+
+  if (pos < str) 
+    offset = - g_utf8_pointer_to_offset (pos, str);
+  else
+    while (s < pos)
+      {
+	s = g_utf8_next_char (s);
+	offset++;
+      }
+  
+  return offset;
+}
+
+
+/**
+ * g_utf8_strncpy:
+ * @dest: buffer to fill with characters from @src
+ * @src: UTF-8 encoded string
+ * @n: character count
+ * 
+ * Like the standard C strncpy() function, but 
+ * copies a given number of characters instead of a given number of 
+ * bytes. The @src string must be valid UTF-8 encoded text. 
+ * (Use g_utf8_validate() on all text before trying to use UTF-8 
+ * utility functions with it.)
+ * 
+ * Return value: @dest
+ **/
+gchar *
+g_utf8_strncpy (gchar       *dest,
+		const gchar *src,
+		gsize        n)
+{
+  const gchar *s = src;
+  while (n && *s)
+    {
+      s = g_utf8_next_char(s);
+      n--;
+    }
+  strncpy(dest, src, s - src);
+  dest[s - src] = 0;
+  return dest;
+}
+
+G_LOCK_DEFINE_STATIC (aliases);
+
+static GHashTable *
+get_alias_hash (void)
+{
+  static GHashTable *alias_hash = NULL;
+  const char *aliases;
+
+  G_LOCK (aliases);
+
+  if (!alias_hash)
+    {
+      alias_hash = g_hash_table_new (g_str_hash, g_str_equal);
+      
+      aliases = _g_locale_get_charset_aliases ();
+      while (*aliases != '\0')
+	{
+	  const char *canonical;
+	  const char *alias;
+	  const char **alias_array;
+	  int count = 0;
+	  
+	  alias = aliases;
+	  aliases += strlen (aliases) + 1;
+	  canonical = aliases;
+	  aliases += strlen (aliases) + 1;
+	  
+	  alias_array = g_hash_table_lookup (alias_hash, canonical);
+	  if (alias_array)
+	    {
+	      while (alias_array[count])
+		count++;
+	    }
+	  
+	  alias_array = g_renew (const char *, alias_array, count + 2);
+	  alias_array[count] = alias;
+	  alias_array[count + 1] = NULL;
+	  
+	  g_hash_table_insert (alias_hash, (char *)canonical, alias_array);
+	}
+    }
+
+  G_UNLOCK (aliases);
+
+  return alias_hash;
+}
+
+/* As an abuse of the alias table, the following routines gets
+ * the charsets that are aliases for the canonical name.
+ */
+#ifdef ANDROID_STUB
+G_GNUC_INTERNAL const char ** 
+_g_charset_get_aliases (const char *canonical_name)
+{
+  GHashTable *alias_hash = get_alias_hash ();
+
+  return g_hash_table_lookup (alias_hash, canonical_name);
+}
+#endif
+
+static gboolean
+g_utf8_get_charset_internal (const char  *raw_data,
+			     const char **a)
+{
+  const char *charset = getenv("CHARSET");
+
+  if (charset && *charset)
+    {
+      *a = charset;
+
+      if (charset && strstr (charset, "UTF-8"))
+	return TRUE;
+      else
+	return FALSE;
+    }
+
+  /* The libcharset code tries to be thread-safe without
+   * a lock, but has a memory leak and a missing memory
+   * barrier, so we lock for it
+   */
+#ifdef ANDROID_STUB
+  G_LOCK (aliases);
+  charset = _g_locale_charset_unalias (raw_data);
+  G_UNLOCK (aliases);
+#endif
+  
+  if (charset && *charset)
+    {
+      *a = charset;
+      
+      if (charset && strstr (charset, "UTF-8"))
+	return TRUE;
+      else
+	return FALSE;
+    }
+
+  /* Assume this for compatibility at present.  */
+  *a = "US-ASCII";
+  
+  return FALSE;
+}
+
+typedef struct _GCharsetCache GCharsetCache;
+
+struct _GCharsetCache {
+  gboolean is_utf8;
+  gchar *raw;
+  gchar *charset;
+};
+
+static void
+charset_cache_free (gpointer data)
+{
+  GCharsetCache *cache = data;
+  g_free (cache->raw);
+  g_free (cache->charset);
+  g_free (cache);
+}
+
+/**
+ * g_get_charset:
+ * @charset: return location for character set name
+ * 
+ * Obtains the character set for the <link linkend="setlocale">current 
+ * locale</link>; you might use this character set as an argument to 
+ * g_convert(), to convert from the current locale's encoding to some 
+ * other encoding. (Frequently g_locale_to_utf8() and g_locale_from_utf8()
+ * are nice shortcuts, though.)
+ *
+ * On Windows the character set returned by this function is the
+ * so-called system default ANSI code-page. That is the character set
+ * used by the "narrow" versions of C library and Win32 functions that
+ * handle file names. It might be different from the character set
+ * used by the C library's current locale.
+ *
+ * The return value is %TRUE if the locale's encoding is UTF-8, in that
+ * case you can perhaps avoid calling g_convert().
+ *
+ * The string returned in @charset is not allocated, and should not be
+ * freed.
+ * 
+ * Return value: %TRUE if the returned charset is UTF-8
+ **/
+gboolean
+g_get_charset (G_CONST_RETURN char **charset) 
+{
+  static GStaticPrivate cache_private = G_STATIC_PRIVATE_INIT;
+  GCharsetCache *cache = g_static_private_get (&cache_private);
+  const gchar *raw;
+
+  if (!cache)
+    {
+      cache = g_new0 (GCharsetCache, 1);
+      g_static_private_set (&cache_private, cache, charset_cache_free);
+    }
+
+#ifdef ANDROID_STUB
+  raw = _g_locale_charset_raw ();
+  
+  if (!(cache->raw && strcmp (cache->raw, raw) == 0))
+    {
+      const gchar *new_charset;
+	    
+      g_free (cache->raw);
+      g_free (cache->charset);
+      cache->raw = g_strdup (raw);
+      cache->is_utf8 = g_utf8_get_charset_internal (raw, &new_charset);
+      cache->charset = g_strdup (new_charset);
+    }
+#endif
+  if (charset)
+    *charset = cache->charset;
+  
+  return cache->is_utf8;
+}
+
+/* unicode_strchr */
+
+/**
+ * g_unichar_to_utf8:
+ * @c: a Unicode character code
+ * @outbuf: output buffer, must have at least 6 bytes of space.
+ *       If %NULL, the length will be computed and returned
+ *       and nothing will be written to @outbuf.
+ * 
+ * Converts a single character to UTF-8.
+ * 
+ * Return value: number of bytes written
+ **/
+int
+g_unichar_to_utf8 (gunichar c,
+		   gchar   *outbuf)
+{
+  /* If this gets modified, also update the copy in g_string_insert_unichar() */
+  guint len = 0;    
+  int first;
+  int i;
+
+  if (c < 0x80)
+    {
+      first = 0;
+      len = 1;
+    }
+  else if (c < 0x800)
+    {
+      first = 0xc0;
+      len = 2;
+    }
+  else if (c < 0x10000)
+    {
+      first = 0xe0;
+      len = 3;
+    }
+   else if (c < 0x200000)
+    {
+      first = 0xf0;
+      len = 4;
+    }
+  else if (c < 0x4000000)
+    {
+      first = 0xf8;
+      len = 5;
+    }
+  else
+    {
+      first = 0xfc;
+      len = 6;
+    }
+
+  if (outbuf)
+    {
+      for (i = len - 1; i > 0; --i)
+	{
+	  outbuf[i] = (c & 0x3f) | 0x80;
+	  c >>= 6;
+	}
+      outbuf[0] = c | first;
+    }
+
+  return len;
+}
+
+/**
+ * g_utf8_strchr:
+ * @p: a nul-terminated UTF-8 encoded string
+ * @len: the maximum length of @p
+ * @c: a Unicode character
+ * 
+ * Finds the leftmost occurrence of the given Unicode character
+ * in a UTF-8 encoded string, while limiting the search to @len bytes.
+ * If @len is -1, allow unbounded search.
+ * 
+ * Return value: %NULL if the string does not contain the character, 
+ *   otherwise, a pointer to the start of the leftmost occurrence of 
+ *   the character in the string.
+ **/
+gchar *
+g_utf8_strchr (const char *p,
+	       gssize      len,
+	       gunichar    c)
+{
+  gchar ch[10];
+
+  gint charlen = g_unichar_to_utf8 (c, ch);
+  ch[charlen] = '\0';
+  
+  return g_strstr_len (p, len, ch);
+}
+
+
+/**
+ * g_utf8_strrchr:
+ * @p: a nul-terminated UTF-8 encoded string
+ * @len: the maximum length of @p
+ * @c: a Unicode character
+ * 
+ * Find the rightmost occurrence of the given Unicode character
+ * in a UTF-8 encoded string, while limiting the search to @len bytes.
+ * If @len is -1, allow unbounded search.
+ * 
+ * Return value: %NULL if the string does not contain the character, 
+ *   otherwise, a pointer to the start of the rightmost occurrence of the 
+ *   character in the string.
+ **/
+gchar *
+g_utf8_strrchr (const char *p,
+		gssize      len,
+		gunichar    c)
+{
+  gchar ch[10];
+
+  gint charlen = g_unichar_to_utf8 (c, ch);
+  ch[charlen] = '\0';
+  
+  return g_strrstr_len (p, len, ch);
+}
+
+
+/* Like g_utf8_get_char, but take a maximum length
+ * and return (gunichar)-2 on incomplete trailing character
+ */
+static inline gunichar
+g_utf8_get_char_extended (const  gchar *p,
+			  gssize max_len)  
+{
+  guint i, len;
+  gunichar wc = (guchar) *p;
+
+  if (wc < 0x80)
+    {
+      return wc;
+    }
+  else if (wc < 0xc0)
+    {
+      return (gunichar)-1;
+    }
+  else if (wc < 0xe0)
+    {
+      len = 2;
+      wc &= 0x1f;
+    }
+  else if (wc < 0xf0)
+    {
+      len = 3;
+      wc &= 0x0f;
+    }
+  else if (wc < 0xf8)
+    {
+      len = 4;
+      wc &= 0x07;
+    }
+  else if (wc < 0xfc)
+    {
+      len = 5;
+      wc &= 0x03;
+    }
+  else if (wc < 0xfe)
+    {
+      len = 6;
+      wc &= 0x01;
+    }
+  else
+    {
+      return (gunichar)-1;
+    }
+  
+  if (max_len >= 0 && len > max_len)
+    {
+      for (i = 1; i < max_len; i++)
+	{
+	  if ((((guchar *)p)[i] & 0xc0) != 0x80)
+	    return (gunichar)-1;
+	}
+      return (gunichar)-2;
+    }
+
+  for (i = 1; i < len; ++i)
+    {
+      gunichar ch = ((guchar *)p)[i];
+      
+      if ((ch & 0xc0) != 0x80)
+	{
+	  if (ch)
+	    return (gunichar)-1;
+	  else
+	    return (gunichar)-2;
+	}
+
+      wc <<= 6;
+      wc |= (ch & 0x3f);
+    }
+
+  if (UTF8_LENGTH(wc) != len)
+    return (gunichar)-1;
+  
+  return wc;
+}
+
+/**
+ * g_utf8_get_char_validated:
+ * @p: a pointer to Unicode character encoded as UTF-8
+ * @max_len: the maximum number of bytes to read, or -1, for no maximum or
+ *           if @p is nul-terminated
+ * 
+ * Convert a sequence of bytes encoded as UTF-8 to a Unicode character.
+ * This function checks for incomplete characters, for invalid characters
+ * such as characters that are out of the range of Unicode, and for
+ * overlong encodings of valid characters.
+ * 
+ * Return value: the resulting character. If @p points to a partial
+ *    sequence at the end of a string that could begin a valid 
+ *    character (or if @max_len is zero), returns (gunichar)-2; 
+ *    otherwise, if @p does not point to a valid UTF-8 encoded 
+ *    Unicode character, returns (gunichar)-1.
+ **/
+gunichar
+g_utf8_get_char_validated (const  gchar *p,
+			   gssize max_len)
+{
+  gunichar result;
+
+  if (max_len == 0)
+    return (gunichar)-2;
+
+  result = g_utf8_get_char_extended (p, max_len);
+
+  if (result & 0x80000000)
+    return result;
+  else if (!UNICODE_VALID (result))
+    return (gunichar)-1;
+  else
+    return result;
+}
+
+/**
+ * g_utf8_to_ucs4_fast:
+ * @str: a UTF-8 encoded string
+ * @len: the maximum length of @str to use, in bytes. If @len < 0,
+ *       then the string is nul-terminated.
+ * @items_written: location to store the number of characters in the
+ *                 result, or %NULL.
+ *
+ * Convert a string from UTF-8 to a 32-bit fixed width
+ * representation as UCS-4, assuming valid UTF-8 input.
+ * This function is roughly twice as fast as g_utf8_to_ucs4()
+ * but does no error checking on the input.
+ * 
+ * Return value: a pointer to a newly allocated UCS-4 string.
+ *               This value must be freed with g_free().
+ **/
+gunichar *
+g_utf8_to_ucs4_fast (const gchar *str,
+		     glong        len,              
+		     glong       *items_written)    
+{
+  gint j, charlen;
+  gunichar *result;
+  gint n_chars, i;
+  const gchar *p;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  p = str;
+  n_chars = 0;
+  if (len < 0)
+    {
+      while (*p)
+	{
+	  p = g_utf8_next_char (p);
+	  ++n_chars;
+	}
+    }
+  else
+    {
+      while (p < str + len && *p)
+	{
+	  p = g_utf8_next_char (p);
+	  ++n_chars;
+	}
+    }
+  
+  result = g_new (gunichar, n_chars + 1);
+  
+  p = str;
+  for (i=0; i < n_chars; i++)
+    {
+      gunichar wc = ((unsigned char *)p)[0];
+
+      if (wc < 0x80)
+	{
+	  result[i] = wc;
+	  p++;
+	}
+      else
+	{ 
+	  if (wc < 0xe0)
+	    {
+	      charlen = 2;
+	      wc &= 0x1f;
+	    }
+	  else if (wc < 0xf0)
+	    {
+	      charlen = 3;
+	      wc &= 0x0f;
+	    }
+	  else if (wc < 0xf8)
+	    {
+	      charlen = 4;
+	      wc &= 0x07;
+	    }
+	  else if (wc < 0xfc)
+	    {
+	      charlen = 5;
+	      wc &= 0x03;
+	    }
+	  else
+	    {
+	      charlen = 6;
+	      wc &= 0x01;
+	    }
+
+	  for (j = 1; j < charlen; j++)
+	    {
+	      wc <<= 6;
+	      wc |= ((unsigned char *)p)[j] & 0x3f;
+	    }
+
+	  result[i] = wc;
+	  p += charlen;
+	}
+    }
+  result[i] = 0;
+
+  if (items_written)
+    *items_written = i;
+
+  return result;
+}
+
+/**
+ * g_utf8_to_ucs4:
+ * @str: a UTF-8 encoded string
+ * @len: the maximum length of @str to use, in bytes. If @len < 0,
+ *       then the string is nul-terminated.
+ * @items_read: location to store number of bytes read, or %NULL.
+ *              If %NULL, then %G_CONVERT_ERROR_PARTIAL_INPUT will be
+ *              returned in case @str contains a trailing partial
+ *              character. If an error occurs then the index of the
+ *              invalid input is stored here.
+ * @items_written: location to store number of characters written or %NULL.
+ *                 The value here stored does not include the trailing 0
+ *                 character. 
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError other than
+ *         %G_CONVERT_ERROR_NO_CONVERSION may occur.
+ *
+ * Convert a string from UTF-8 to a 32-bit fixed width
+ * representation as UCS-4. A trailing 0 will be added to the
+ * string after the converted text.
+ * 
+ * Return value: a pointer to a newly allocated UCS-4 string.
+ *               This value must be freed with g_free(). If an
+ *               error occurs, %NULL will be returned and
+ *               @error set.
+ **/
+gunichar *
+g_utf8_to_ucs4 (const gchar *str,
+		glong        len,             
+		glong       *items_read,      
+		glong       *items_written,   
+		GError     **error)
+{
+  gunichar *result = NULL;
+  gint n_chars, i;
+  const gchar *in;
+  
+  in = str;
+  n_chars = 0;
+  while ((len < 0 || str + len - in > 0) && *in)
+    {
+      gunichar wc = g_utf8_get_char_extended (in, len < 0 ? 6 : str + len - in);
+      if (wc & 0x80000000)
+	{
+	  if (wc == (gunichar)-2)
+	    {
+	      if (items_read)
+		break;
+	      else
+		g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                                     _("Partial character sequence at end of input"));
+	    }
+	  else
+	    g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                 _("Invalid byte sequence in conversion input"));
+
+	  goto err_out;
+	}
+
+      n_chars++;
+
+      in = g_utf8_next_char (in);
+    }
+
+  result = g_new (gunichar, n_chars + 1);
+  
+  in = str;
+  for (i=0; i < n_chars; i++)
+    {
+      result[i] = g_utf8_get_char (in);
+      in = g_utf8_next_char (in);
+    }
+  result[i] = 0;
+
+  if (items_written)
+    *items_written = n_chars;
+
+ err_out:
+  if (items_read)
+    *items_read = in - str;
+
+  return result;
+}
+
+/**
+ * g_ucs4_to_utf8:
+ * @str: a UCS-4 encoded string
+ * @len: the maximum length (number of characters) of @str to use. 
+ *       If @len < 0, then the string is nul-terminated.
+ * @items_read: location to store number of characters read, or %NULL.
+ * @items_written: location to store number of bytes written or %NULL.
+ *                 The value here stored does not include the trailing 0
+ *                 byte. 
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError other than
+ *         %G_CONVERT_ERROR_NO_CONVERSION may occur.
+ *
+ * Convert a string from a 32-bit fixed width representation as UCS-4.
+ * to UTF-8. The result will be terminated with a 0 byte.
+ * 
+ * Return value: a pointer to a newly allocated UTF-8 string.
+ *               This value must be freed with g_free(). If an
+ *               error occurs, %NULL will be returned and
+ *               @error set. In that case, @items_read will be
+ *               set to the position of the first invalid input 
+ *               character.
+ **/
+gchar *
+g_ucs4_to_utf8 (const gunichar *str,
+		glong           len,              
+		glong          *items_read,       
+		glong          *items_written,    
+		GError        **error)
+{
+  gint result_length;
+  gchar *result = NULL;
+  gchar *p;
+  gint i;
+
+  result_length = 0;
+  for (i = 0; len < 0 || i < len ; i++)
+    {
+      if (!str[i])
+	break;
+
+      if (str[i] >= 0x80000000)
+	{
+	  g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Character out of range for UTF-8"));
+	  goto err_out;
+	}
+      
+      result_length += UTF8_LENGTH (str[i]);
+    }
+
+  result = g_malloc (result_length + 1);
+  p = result;
+
+  i = 0;
+  while (p < result + result_length)
+    p += g_unichar_to_utf8 (str[i++], p);
+  
+  *p = '\0';
+
+  if (items_written)
+    *items_written = p - result;
+
+ err_out:
+  if (items_read)
+    *items_read = i;
+
+  return result;
+}
+
+#define SURROGATE_VALUE(h,l) (((h) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000)
+
+/**
+ * g_utf16_to_utf8:
+ * @str: a UTF-16 encoded string
+ * @len: the maximum length (number of <type>gunichar2</type>) of @str to use. 
+ *       If @len < 0, then the string is nul-terminated.
+ * @items_read: location to store number of words read, or %NULL.
+ *              If %NULL, then %G_CONVERT_ERROR_PARTIAL_INPUT will be
+ *              returned in case @str contains a trailing partial
+ *              character. If an error occurs then the index of the
+ *              invalid input is stored here.
+ * @items_written: location to store number of bytes written, or %NULL.
+ *                 The value stored here does not include the trailing
+ *                 0 byte.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError other than
+ *         %G_CONVERT_ERROR_NO_CONVERSION may occur.
+ *
+ * Convert a string from UTF-16 to UTF-8. The result will be
+ * terminated with a 0 byte.
+ *
+ * Note that the input is expected to be already in native endianness,
+ * an initial byte-order-mark character is not handled specially.
+ * g_convert() can be used to convert a byte buffer of UTF-16 data of 
+ * ambiguous endianess.
+ * 
+ * Return value: a pointer to a newly allocated UTF-8 string.
+ *               This value must be freed with g_free(). If an
+ *               error occurs, %NULL will be returned and
+ *               @error set.
+ **/
+gchar *
+g_utf16_to_utf8 (const gunichar2  *str,
+		 glong             len,              
+		 glong            *items_read,       
+		 glong            *items_written,    
+		 GError          **error)
+{
+  /* This function and g_utf16_to_ucs4 are almost exactly identical - The lines that differ
+   * are marked.
+   */
+  const gunichar2 *in;
+  gchar *out;
+  gchar *result = NULL;
+  gint n_bytes;
+  gunichar high_surrogate;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  n_bytes = 0;
+  in = str;
+  high_surrogate = 0;
+  while ((len < 0 || in - str < len) && *in)
+    {
+      gunichar2 c = *in;
+      gunichar wc;
+
+      if (c >= 0xdc00 && c < 0xe000) /* low surrogate */
+	{
+	  if (high_surrogate)
+	    {
+	      wc = SURROGATE_VALUE (high_surrogate, c);
+	      high_surrogate = 0;
+	    }
+	  else
+	    {
+	      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                   _("Invalid sequence in conversion input"));
+	      goto err_out;
+	    }
+	}
+      else
+	{
+	  if (high_surrogate)
+	    {
+	      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                   _("Invalid sequence in conversion input"));
+	      goto err_out;
+	    }
+
+	  if (c >= 0xd800 && c < 0xdc00) /* high surrogate */
+	    {
+	      high_surrogate = c;
+	      goto next1;
+	    }
+	  else
+	    wc = c;
+	}
+
+      /********** DIFFERENT for UTF8/UCS4 **********/
+      n_bytes += UTF8_LENGTH (wc);
+
+    next1:
+      in++;
+    }
+
+  if (high_surrogate && !items_read)
+    {
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                           _("Partial character sequence at end of input"));
+      goto err_out;
+    }
+  
+  /* At this point, everything is valid, and we just need to convert
+   */
+  /********** DIFFERENT for UTF8/UCS4 **********/
+  result = g_malloc (n_bytes + 1);
+  
+  high_surrogate = 0;
+  out = result;
+  in = str;
+  while (out < result + n_bytes)
+    {
+      gunichar2 c = *in;
+      gunichar wc;
+
+      if (c >= 0xdc00 && c < 0xe000) /* low surrogate */
+	{
+	  wc = SURROGATE_VALUE (high_surrogate, c);
+	  high_surrogate = 0;
+	}
+      else if (c >= 0xd800 && c < 0xdc00) /* high surrogate */
+	{
+	  high_surrogate = c;
+	  goto next2;
+	}
+      else
+	wc = c;
+
+      /********** DIFFERENT for UTF8/UCS4 **********/
+      out += g_unichar_to_utf8 (wc, out);
+
+    next2:
+      in++;
+    }
+  
+  /********** DIFFERENT for UTF8/UCS4 **********/
+  *out = '\0';
+
+  if (items_written)
+    /********** DIFFERENT for UTF8/UCS4 **********/
+    *items_written = out - result;
+
+ err_out:
+  if (items_read)
+    *items_read = in - str;
+
+  return result;
+}
+
+/**
+ * g_utf16_to_ucs4:
+ * @str: a UTF-16 encoded string
+ * @len: the maximum length (number of <type>gunichar2</type>) of @str to use. 
+ *       If @len < 0, then the string is nul-terminated.
+ * @items_read: location to store number of words read, or %NULL.
+ *              If %NULL, then %G_CONVERT_ERROR_PARTIAL_INPUT will be
+ *              returned in case @str contains a trailing partial
+ *              character. If an error occurs then the index of the
+ *              invalid input is stored here.
+ * @items_written: location to store number of characters written, or %NULL.
+ *                 The value stored here does not include the trailing
+ *                 0 character.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError other than
+ *         %G_CONVERT_ERROR_NO_CONVERSION may occur.
+ *
+ * Convert a string from UTF-16 to UCS-4. The result will be
+ * nul-terminated.
+ * 
+ * Return value: a pointer to a newly allocated UCS-4 string.
+ *               This value must be freed with g_free(). If an
+ *               error occurs, %NULL will be returned and
+ *               @error set.
+ **/
+gunichar *
+g_utf16_to_ucs4 (const gunichar2  *str,
+		 glong             len,              
+		 glong            *items_read,       
+		 glong            *items_written,    
+		 GError          **error)
+{
+  const gunichar2 *in;
+  gchar *out;
+  gchar *result = NULL;
+  gint n_bytes;
+  gunichar high_surrogate;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  n_bytes = 0;
+  in = str;
+  high_surrogate = 0;
+  while ((len < 0 || in - str < len) && *in)
+    {
+      gunichar2 c = *in;
+      gunichar wc;
+
+      if (c >= 0xdc00 && c < 0xe000) /* low surrogate */
+	{
+	  if (high_surrogate)
+	    {
+	      wc = SURROGATE_VALUE (high_surrogate, c);
+	      high_surrogate = 0;
+	    }
+	  else
+	    {
+	      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                   _("Invalid sequence in conversion input"));
+	      goto err_out;
+	    }
+	}
+      else
+	{
+	  if (high_surrogate)
+	    {
+	      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                   _("Invalid sequence in conversion input"));
+	      goto err_out;
+	    }
+
+	  if (c >= 0xd800 && c < 0xdc00) /* high surrogate */
+	    {
+	      high_surrogate = c;
+	      goto next1;
+	    }
+	  else
+	    wc = c;
+	}
+
+      /********** DIFFERENT for UTF8/UCS4 **********/
+      n_bytes += sizeof (gunichar);
+
+    next1:
+      in++;
+    }
+
+  if (high_surrogate && !items_read)
+    {
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                           _("Partial character sequence at end of input"));
+      goto err_out;
+    }
+  
+  /* At this point, everything is valid, and we just need to convert
+   */
+  /********** DIFFERENT for UTF8/UCS4 **********/
+  result = g_malloc (n_bytes + 4);
+  
+  high_surrogate = 0;
+  out = result;
+  in = str;
+  while (out < result + n_bytes)
+    {
+      gunichar2 c = *in;
+      gunichar wc;
+
+      if (c >= 0xdc00 && c < 0xe000) /* low surrogate */
+	{
+	  wc = SURROGATE_VALUE (high_surrogate, c);
+	  high_surrogate = 0;
+	}
+      else if (c >= 0xd800 && c < 0xdc00) /* high surrogate */
+	{
+	  high_surrogate = c;
+	  goto next2;
+	}
+      else
+	wc = c;
+
+      /********** DIFFERENT for UTF8/UCS4 **********/
+      *(gunichar *)out = wc;
+      out += sizeof (gunichar);
+
+    next2:
+      in++;
+    }
+
+  /********** DIFFERENT for UTF8/UCS4 **********/
+  *(gunichar *)out = 0;
+
+  if (items_written)
+    /********** DIFFERENT for UTF8/UCS4 **********/
+    *items_written = (out - result) / sizeof (gunichar);
+
+ err_out:
+  if (items_read)
+    *items_read = in - str;
+
+  return (gunichar *)result;
+}
+
+/**
+ * g_utf8_to_utf16:
+ * @str: a UTF-8 encoded string
+ * @len: the maximum length (number of characters) of @str to use. 
+ *       If @len < 0, then the string is nul-terminated.
+ * @items_read: location to store number of bytes read, or %NULL.
+ *              If %NULL, then %G_CONVERT_ERROR_PARTIAL_INPUT will be
+ *              returned in case @str contains a trailing partial
+ *              character. If an error occurs then the index of the
+ *              invalid input is stored here.
+ * @items_written: location to store number of <type>gunichar2</type> written, 
+ *                 or %NULL.
+ *                 The value stored here does not include the trailing 0.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError other than
+ *         %G_CONVERT_ERROR_NO_CONVERSION may occur.
+ *
+ * Convert a string from UTF-8 to UTF-16. A 0 character will be
+ * added to the result after the converted text.
+ * 
+ * Return value: a pointer to a newly allocated UTF-16 string.
+ *               This value must be freed with g_free(). If an
+ *               error occurs, %NULL will be returned and
+ *               @error set.
+ **/
+gunichar2 *
+g_utf8_to_utf16 (const gchar *str,
+		 glong        len,              
+		 glong       *items_read,       
+		 glong       *items_written,    
+		 GError     **error)
+{
+  gunichar2 *result = NULL;
+  gint n16;
+  const gchar *in;
+  gint i;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  in = str;
+  n16 = 0;
+  while ((len < 0 || str + len - in > 0) && *in)
+    {
+      gunichar wc = g_utf8_get_char_extended (in, len < 0 ? 6 : str + len - in);
+      if (wc & 0x80000000)
+	{
+	  if (wc == (gunichar)-2)
+	    {
+	      if (items_read)
+		break;
+	      else
+		g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT,
+                                     _("Partial character sequence at end of input"));
+	    }
+	  else
+	    g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                                 _("Invalid byte sequence in conversion input"));
+
+	  goto err_out;
+	}
+
+      if (wc < 0xd800)
+	n16 += 1;
+      else if (wc < 0xe000)
+	{
+	  g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Invalid sequence in conversion input"));
+
+	  goto err_out;
+	}
+      else if (wc < 0x10000)
+	n16 += 1;
+      else if (wc < 0x110000)
+	n16 += 2;
+      else
+	{
+	  g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Character out of range for UTF-16"));
+
+	  goto err_out;
+	}
+      
+      in = g_utf8_next_char (in);
+    }
+
+  result = g_new (gunichar2, n16 + 1);
+  
+  in = str;
+  for (i = 0; i < n16;)
+    {
+      gunichar wc = g_utf8_get_char (in);
+
+      if (wc < 0x10000)
+	{
+	  result[i++] = wc;
+	}
+      else
+	{
+	  result[i++] = (wc - 0x10000) / 0x400 + 0xd800;
+	  result[i++] = (wc - 0x10000) % 0x400 + 0xdc00;
+	}
+      
+      in = g_utf8_next_char (in);
+    }
+
+  result[i] = 0;
+
+  if (items_written)
+    *items_written = n16;
+
+ err_out:
+  if (items_read)
+    *items_read = in - str;
+  
+  return result;
+}
+
+/**
+ * g_ucs4_to_utf16:
+ * @str: a UCS-4 encoded string
+ * @len: the maximum length (number of characters) of @str to use. 
+ *       If @len < 0, then the string is nul-terminated.
+ * @items_read: location to store number of bytes read, or %NULL.
+ *              If an error occurs then the index of the invalid input
+ *              is stored here.
+ * @items_written: location to store number of <type>gunichar2</type> 
+ *                 written, or %NULL. The value stored here does not 
+ *                 include the trailing 0.
+ * @error: location to store the error occuring, or %NULL to ignore
+ *         errors. Any of the errors in #GConvertError other than
+ *         %G_CONVERT_ERROR_NO_CONVERSION may occur.
+ *
+ * Convert a string from UCS-4 to UTF-16. A 0 character will be
+ * added to the result after the converted text.
+ * 
+ * Return value: a pointer to a newly allocated UTF-16 string.
+ *               This value must be freed with g_free(). If an
+ *               error occurs, %NULL will be returned and
+ *               @error set.
+ **/
+gunichar2 *
+g_ucs4_to_utf16 (const gunichar  *str,
+		 glong            len,              
+		 glong           *items_read,       
+		 glong           *items_written,    
+		 GError         **error)
+{
+  gunichar2 *result = NULL;
+  gint n16;
+  gint i, j;
+
+  n16 = 0;
+  i = 0;
+  while ((len < 0 || i < len) && str[i])
+    {
+      gunichar wc = str[i];
+
+      if (wc < 0xd800)
+	n16 += 1;
+      else if (wc < 0xe000)
+	{
+	  g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Invalid sequence in conversion input"));
+
+	  goto err_out;
+	}
+      else if (wc < 0x10000)
+	n16 += 1;
+      else if (wc < 0x110000)
+	n16 += 2;
+      else
+	{
+	  g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Character out of range for UTF-16"));
+
+	  goto err_out;
+	}
+
+      i++;
+    }
+  
+  result = g_new (gunichar2, n16 + 1);
+  
+  for (i = 0, j = 0; j < n16; i++)
+    {
+      gunichar wc = str[i];
+
+      if (wc < 0x10000)
+	{
+	  result[j++] = wc;
+	}
+      else
+	{
+	  result[j++] = (wc - 0x10000) / 0x400 + 0xd800;
+	  result[j++] = (wc - 0x10000) % 0x400 + 0xdc00;
+	}
+    }
+  result[j] = 0;
+
+  if (items_written)
+    *items_written = n16;
+  
+ err_out:
+  if (items_read)
+    *items_read = i;
+  
+  return result;
+}
+
+#define CONTINUATION_CHAR                           \
+ G_STMT_START {                                     \
+  if ((*(guchar *)p & 0xc0) != 0x80) /* 10xxxxxx */ \
+    goto error;                                     \
+  val <<= 6;                                        \
+  val |= (*(guchar *)p) & 0x3f;                     \
+ } G_STMT_END
+
+static const gchar *
+fast_validate (const char *str)
+
+{
+  gunichar val = 0;
+  gunichar min = 0;
+  const gchar *p;
+
+  for (p = str; *p; p++)
+    {
+      if (*(guchar *)p < 128)
+	/* done */;
+      else 
+	{
+	  const gchar *last;
+	  
+	  last = p;
+	  if ((*(guchar *)p & 0xe0) == 0xc0) /* 110xxxxx */
+	    {
+	      if (G_UNLIKELY ((*(guchar *)p & 0x1e) == 0))
+		goto error;
+	      p++;
+	      if (G_UNLIKELY ((*(guchar *)p & 0xc0) != 0x80)) /* 10xxxxxx */
+		goto error;
+	    }
+	  else
+	    {
+	      if ((*(guchar *)p & 0xf0) == 0xe0) /* 1110xxxx */
+		{
+		  min = (1 << 11);
+		  val = *(guchar *)p & 0x0f;
+		  goto TWO_REMAINING;
+		}
+	      else if ((*(guchar *)p & 0xf8) == 0xf0) /* 11110xxx */
+		{
+		  min = (1 << 16);
+		  val = *(guchar *)p & 0x07;
+		}
+	      else
+		goto error;
+	      
+	      p++;
+	      CONTINUATION_CHAR;
+	    TWO_REMAINING:
+	      p++;
+	      CONTINUATION_CHAR;
+	      p++;
+	      CONTINUATION_CHAR;
+	      
+	      if (G_UNLIKELY (val < min))
+		goto error;
+
+	      if (G_UNLIKELY (!UNICODE_VALID(val)))
+		goto error;
+	    } 
+	  
+	  continue;
+	  
+	error:
+	  return last;
+	}
+    }
+
+  return p;
+}
+
+static const gchar *
+fast_validate_len (const char *str,
+		   gssize      max_len)
+
+{
+  gunichar val = 0;
+  gunichar min = 0;
+  const gchar *p;
+
+  g_assert (max_len >= 0);
+
+  for (p = str; ((p - str) < max_len) && *p; p++)
+    {
+      if (*(guchar *)p < 128)
+	/* done */;
+      else 
+	{
+	  const gchar *last;
+	  
+	  last = p;
+	  if ((*(guchar *)p & 0xe0) == 0xc0) /* 110xxxxx */
+	    {
+	      if (G_UNLIKELY (max_len - (p - str) < 2))
+		goto error;
+	      
+	      if (G_UNLIKELY ((*(guchar *)p & 0x1e) == 0))
+		goto error;
+	      p++;
+	      if (G_UNLIKELY ((*(guchar *)p & 0xc0) != 0x80)) /* 10xxxxxx */
+		goto error;
+	    }
+	  else
+	    {
+	      if ((*(guchar *)p & 0xf0) == 0xe0) /* 1110xxxx */
+		{
+		  if (G_UNLIKELY (max_len - (p - str) < 3))
+		    goto error;
+		  
+		  min = (1 << 11);
+		  val = *(guchar *)p & 0x0f;
+		  goto TWO_REMAINING;
+		}
+ 	      else if ((*(guchar *)p & 0xf8) == 0xf0) /* 11110xxx */
+		{
+		  if (G_UNLIKELY (max_len - (p - str) < 4))
+		    goto error;
+		  
+		  min = (1 << 16);
+		  val = *(guchar *)p & 0x07;
+		}
+	      else
+		goto error;
+	      
+	      p++;
+	      CONTINUATION_CHAR;
+	    TWO_REMAINING:
+	      p++;
+	      CONTINUATION_CHAR;
+	      p++;
+	      CONTINUATION_CHAR;
+	      
+	      if (G_UNLIKELY (val < min))
+		goto error;
+	      if (G_UNLIKELY (!UNICODE_VALID(val)))
+		goto error;
+	    } 
+	  
+	  continue;
+	  
+	error:
+	  return last;
+	}
+    }
+
+  return p;
+}
+
+/**
+ * g_utf8_validate:
+ * @str: a pointer to character data
+ * @max_len: max bytes to validate, or -1 to go until NUL
+ * @end: return location for end of valid data
+ * 
+ * Validates UTF-8 encoded text. @str is the text to validate;
+ * if @str is nul-terminated, then @max_len can be -1, otherwise
+ * @max_len should be the number of bytes to validate.
+ * If @end is non-%NULL, then the end of the valid range
+ * will be stored there (i.e. the start of the first invalid 
+ * character if some bytes were invalid, or the end of the text 
+ * being validated otherwise).
+ *
+ * Note that g_utf8_validate() returns %FALSE if @max_len is 
+ * positive and NUL is met before @max_len bytes have been read.
+ *
+ * Returns %TRUE if all of @str was valid. Many GLib and GTK+
+ * routines <emphasis>require</emphasis> valid UTF-8 as input;
+ * so data read from a file or the network should be checked
+ * with g_utf8_validate() before doing anything else with it.
+ * 
+ * Return value: %TRUE if the text was valid UTF-8
+ **/
+gboolean
+g_utf8_validate (const char   *str,
+		 gssize        max_len,    
+		 const gchar **end)
+
+{
+  const gchar *p;
+
+  if (max_len < 0)
+    p = fast_validate (str);
+  else
+    p = fast_validate_len (str, max_len);
+
+  if (end)
+    *end = p;
+
+  if ((max_len >= 0 && p != str + max_len) ||
+      (max_len < 0 && *p != '\0'))
+    return FALSE;
+  else
+    return TRUE;
+}
+
+/**
+ * g_unichar_validate:
+ * @ch: a Unicode character
+ * 
+ * Checks whether @ch is a valid Unicode character. Some possible
+ * integer values of @ch will not be valid. 0 is considered a valid
+ * character, though it's normally a string terminator.
+ * 
+ * Return value: %TRUE if @ch is a valid Unicode character
+ **/
+gboolean
+g_unichar_validate (gunichar ch)
+{
+  return UNICODE_VALID (ch);
+}
+
+/**
+ * g_utf8_strreverse:
+ * @str: a UTF-8 encoded string
+ * @len: the maximum length of @str to use, in bytes. If @len < 0,
+ *       then the string is nul-terminated.
+ *
+ * Reverses a UTF-8 string. @str must be valid UTF-8 encoded text. 
+ * (Use g_utf8_validate() on all text before trying to use UTF-8 
+ * utility functions with it.)
+ *
+ * This function is intended for programmatic uses of reversed strings.
+ * It pays no attention to decomposed characters, combining marks, byte 
+ * order marks, directional indicators (LRM, LRO, etc) and similar 
+ * characters which might need special handling when reversing a string 
+ * for display purposes.
+ *
+ * Note that unlike g_strreverse(), this function returns
+ * newly-allocated memory, which should be freed with g_free() when
+ * no longer needed. 
+ *
+ * Returns: a newly-allocated string which is the reverse of @str.
+ *
+ * Since: 2.2
+ */
+gchar *
+g_utf8_strreverse (const gchar *str,
+		   gssize       len)
+{
+  gchar *r, *result;
+  const gchar *p;
+
+  if (len < 0)
+    len = strlen (str);
+
+  result = g_new (gchar, len + 1);
+  r = result + len;
+  p = str;
+  while (r > result)
+    {
+      gchar *m, skip = g_utf8_skip[*(guchar*) p];
+      r -= skip;
+      for (m = r; skip; skip--)
+        *m++ = *p++;
+    }
+  result[len] = 0;
+
+  return result;
+}
+
+
+gchar *
+_g_utf8_make_valid (const gchar *name)
+{
+  GString *string;
+  const gchar *remainder, *invalid;
+  gint remaining_bytes, valid_bytes;
+
+  g_return_val_if_fail (name != NULL, NULL);
+
+  string = NULL;
+  remainder = name;
+  remaining_bytes = strlen (name);
+
+  while (remaining_bytes != 0) 
+    {
+      if (g_utf8_validate (remainder, remaining_bytes, &invalid)) 
+	break;
+      valid_bytes = invalid - remainder;
+    
+      if (string == NULL) 
+	string = g_string_sized_new (remaining_bytes);
+
+      g_string_append_len (string, remainder, valid_bytes);
+      /* append U+FFFD REPLACEMENT CHARACTER */
+      g_string_append (string, "\357\277\275");
+      
+      remaining_bytes -= valid_bytes + 1;
+      remainder = invalid + 1;
+    }
+  
+  if (string == NULL)
+    return g_strdup (name);
+  
+  g_string_append (string, remainder);
+
+  g_assert (g_utf8_validate (string->str, -1, NULL));
+  
+  return g_string_free (string, FALSE);
+}
+
+
+#define __G_UTF8_C__
+#include "galiasdef.c"
diff --git a/glib/gutils.c b/glib/gutils.c
new file mode 100644
index 0000000..8228bab
--- /dev/null
+++ b/glib/gutils.c
@@ -0,0 +1,3447 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1998  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe for the unix part, FIXME: make the win32 part MT safe as well.
+ */
+
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <locale.h>
+#include <string.h>
+#include <ctype.h>		/* For tolower() */
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+#include <sys/types.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_CRT_EXTERNS_H 
+#include <crt_externs.h> /* for _NSGetEnviron */
+#endif
+
+/* implement gutils's inline functions
+ */
+#define	G_IMPLEMENT_INLINES 1
+#define	__G_UTILS_C__
+#include "glib.h"
+#include "gprintfint.h"
+#include "gthreadprivate.h"
+#include "glibintl.h"
+#include "galias.h"
+
+#ifdef	MAXPATHLEN
+#define	G_PATH_LENGTH	MAXPATHLEN
+#elif	defined (PATH_MAX)
+#define	G_PATH_LENGTH	PATH_MAX
+#elif   defined (_PC_PATH_MAX)
+#define	G_PATH_LENGTH	sysconf(_PC_PATH_MAX)
+#else	
+#define G_PATH_LENGTH   2048
+#endif
+
+#ifdef G_PLATFORM_WIN32
+#  define STRICT		/* Strict typing, please */
+#  include <windows.h>
+#  undef STRICT
+#  ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
+#    define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
+#    define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
+#  endif
+#  include <lmcons.h>		/* For UNLEN */
+#endif /* G_PLATFORM_WIN32 */
+
+#ifdef G_OS_WIN32
+#  include <direct.h>
+#  include <shlobj.h>
+   /* older SDK (e.g. msvc 5.0) does not have these*/
+#  ifndef CSIDL_MYMUSIC
+#    define CSIDL_MYMUSIC 13
+#  endif
+#  ifndef CSIDL_MYVIDEO
+#    define CSIDL_MYVIDEO 14
+#  endif
+#  ifndef CSIDL_INTERNET_CACHE
+#    define CSIDL_INTERNET_CACHE 32
+#  endif
+#  ifndef CSIDL_COMMON_APPDATA
+#    define CSIDL_COMMON_APPDATA 35
+#  endif
+#  ifndef CSIDL_MYPICTURES
+#    define CSIDL_MYPICTURES 0x27
+#  endif
+#  ifndef CSIDL_COMMON_DOCUMENTS
+#    define CSIDL_COMMON_DOCUMENTS 46
+#  endif
+#  ifndef CSIDL_PROFILE
+#    define CSIDL_PROFILE 40
+#  endif
+#  include <process.h>
+#endif
+
+#ifdef HAVE_CARBON
+#include <CoreServices/CoreServices.h>
+#endif
+
+#ifdef ANDROID_STUB
+#ifdef HAVE_CODESET
+#include <langinfo.h>
+#endif
+#endif
+
+const guint glib_major_version = GLIB_MAJOR_VERSION;
+const guint glib_minor_version = GLIB_MINOR_VERSION;
+const guint glib_micro_version = GLIB_MICRO_VERSION;
+const guint glib_interface_age = GLIB_INTERFACE_AGE;
+const guint glib_binary_age = GLIB_BINARY_AGE;
+
+#ifdef G_PLATFORM_WIN32
+
+static HMODULE glib_dll = NULL;
+
+#ifdef DLL_EXPORT
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+	 DWORD     fdwReason,
+	 LPVOID    lpvReserved)
+{
+  if (fdwReason == DLL_PROCESS_ATTACH)
+      glib_dll = hinstDLL;
+
+  return TRUE;
+}
+
+#endif
+
+gchar *
+_glib_get_dll_directory (void)
+{
+  gchar *retval;
+  gchar *p;
+  wchar_t wc_fn[MAX_PATH];
+
+#ifdef DLL_EXPORT
+  if (glib_dll == NULL)
+    return NULL;
+#endif
+
+  /* This code is different from that in
+   * g_win32_get_package_installation_directory_of_module() in that
+   * here we return the actual folder where the GLib DLL is. We don't
+   * do the check for it being in a "bin" or "lib" subfolder and then
+   * returning the parent of that.
+   *
+   * In a statically built GLib, glib_dll will be NULL and we will
+   * thus look up the application's .exe file's location.
+   */
+  if (!GetModuleFileNameW (glib_dll, wc_fn, MAX_PATH))
+    return NULL;
+
+  retval = g_utf16_to_utf8 (wc_fn, -1, NULL, NULL, NULL);
+
+  p = strrchr (retval, G_DIR_SEPARATOR);
+  if (p == NULL)
+    {
+      /* Wtf? */
+      return NULL;
+    }
+  *p = '\0';
+
+  return retval;
+}
+
+#endif
+
+/**
+ * glib_check_version:
+ * @required_major: the required major version.
+ * @required_minor: the required minor version.
+ * @required_micro: the required micro version.
+ *
+ * Checks that the GLib library in use is compatible with the
+ * given version. Generally you would pass in the constants
+ * #GLIB_MAJOR_VERSION, #GLIB_MINOR_VERSION, #GLIB_MICRO_VERSION
+ * as the three arguments to this function; that produces
+ * a check that the library in use is compatible with
+ * the version of GLib the application or module was compiled
+ * against.
+ *
+ * Compatibility is defined by two things: first the version
+ * of the running library is newer than the version
+ * @required_major.required_minor.@required_micro. Second
+ * the running library must be binary compatible with the
+ * version @required_major.required_minor.@required_micro
+ * (same major version.)
+ *
+ * Return value: %NULL if the GLib library is compatible with the
+ *   given version, or a string describing the version mismatch.
+ *   The returned string is owned by GLib and must not be modified
+ *   or freed.
+ *
+ * Since: 2.6
+ **/
+const gchar *
+glib_check_version (guint required_major,
+                    guint required_minor,
+                    guint required_micro)
+{
+  gint glib_effective_micro = 100 * GLIB_MINOR_VERSION + GLIB_MICRO_VERSION;
+  gint required_effective_micro = 100 * required_minor + required_micro;
+
+  if (required_major > GLIB_MAJOR_VERSION)
+    return "GLib version too old (major mismatch)";
+  if (required_major < GLIB_MAJOR_VERSION)
+    return "GLib version too new (major mismatch)";
+  if (required_effective_micro < glib_effective_micro - GLIB_BINARY_AGE)
+    return "GLib version too new (micro mismatch)";
+  if (required_effective_micro > glib_effective_micro)
+    return "GLib version too old (micro mismatch)";
+  return NULL;
+}
+
+#if !defined (HAVE_MEMMOVE) && !defined (HAVE_WORKING_BCOPY)
+/**
+ * g_memmove: 
+ * @dest: the destination address to copy the bytes to.
+ * @src: the source address to copy the bytes from.
+ * @len: the number of bytes to copy.
+ *
+ * Copies a block of memory @len bytes long, from @src to @dest.
+ * The source and destination areas may overlap.
+ *
+ * In order to use this function, you must include 
+ * <filename>string.h</filename> yourself, because this macro will 
+ * typically simply resolve to memmove() and GLib does not include 
+ * <filename>string.h</filename> for you.
+ */
+void 
+g_memmove (gpointer      dest, 
+	   gconstpointer src, 
+	   gulong        len)
+{
+  gchar* destptr = dest;
+  const gchar* srcptr = src;
+  if (src + len < dest || dest + len < src)
+    {
+      bcopy (src, dest, len);
+      return;
+    }
+  else if (dest <= src)
+    {
+      while (len--)
+	*(destptr++) = *(srcptr++);
+    }
+  else
+    {
+      destptr += len;
+      srcptr += len;
+      while (len--)
+	*(--destptr) = *(--srcptr);
+    }
+}
+#endif /* !HAVE_MEMMOVE && !HAVE_WORKING_BCOPY */
+
+#ifdef G_OS_WIN32
+#undef g_atexit
+#endif
+
+/**
+ * g_atexit:
+ * @func: the function to call on normal program termination.
+ * 
+ * Specifies a function to be called at normal program termination.
+ *
+ * Since GLib 2.8.2, on Windows g_atexit() actually is a preprocessor
+ * macro that maps to a call to the atexit() function in the C
+ * library. This means that in case the code that calls g_atexit(),
+ * i.e. atexit(), is in a DLL, the function will be called when the
+ * DLL is detached from the program. This typically makes more sense
+ * than that the function is called when the GLib DLL is detached,
+ * which happened earlier when g_atexit() was a function in the GLib
+ * DLL.
+ *
+ * The behaviour of atexit() in the context of dynamically loaded
+ * modules is not formally specified and varies wildly.
+ *
+ * On POSIX systems, calling g_atexit() (or atexit()) in a dynamically
+ * loaded module which is unloaded before the program terminates might
+ * well cause a crash at program exit.
+ *
+ * Some POSIX systems implement atexit() like Windows, and have each
+ * dynamically loaded module maintain an own atexit chain that is
+ * called when the module is unloaded.
+ *
+ * On other POSIX systems, before a dynamically loaded module is
+ * unloaded, the registered atexit functions (if any) residing in that
+ * module are called, regardless where the code that registered them
+ * resided. This is presumably the most robust approach.
+ *
+ * As can be seen from the above, for portability it's best to avoid
+ * calling g_atexit() (or atexit()) except in the main executable of a
+ * program.
+ */
+void
+g_atexit (GVoidFunc func)
+{
+  gint result;
+  const gchar *error = NULL;
+
+  /* keep this in sync with glib.h */
+
+#ifdef	G_NATIVE_ATEXIT
+  result = ATEXIT (func);
+  if (result)
+    error = g_strerror (errno);
+#elif defined (HAVE_ATEXIT)
+#  ifdef NeXT /* @#%@! NeXTStep */
+  result = !atexit ((void (*)(void)) func);
+  if (result)
+    error = g_strerror (errno);
+#  else
+  result = atexit ((void (*)(void)) func);
+  if (result)
+    error = g_strerror (errno);
+#  endif /* NeXT */
+#elif defined (HAVE_ON_EXIT)
+  result = on_exit ((void (*)(int, void *)) func, NULL);
+  if (result)
+    error = g_strerror (errno);
+#else
+  result = 0;
+  error = "no implementation";
+#endif /* G_NATIVE_ATEXIT */
+
+  if (error)
+    g_error ("Could not register atexit() function: %s", error);
+}
+
+/* Based on execvp() from GNU Libc.
+ * Some of this code is cut-and-pasted into gspawn.c
+ */
+
+static gchar*
+my_strchrnul (const gchar *str, 
+	      gchar        c)
+{
+  gchar *p = (gchar*)str;
+  while (*p && (*p != c))
+    ++p;
+
+  return p;
+}
+
+#ifdef G_OS_WIN32
+
+static gchar *inner_find_program_in_path (const gchar *program);
+
+gchar*
+g_find_program_in_path (const gchar *program)
+{
+  const gchar *last_dot = strrchr (program, '.');
+
+  if (last_dot == NULL ||
+      strchr (last_dot, '\\') != NULL ||
+      strchr (last_dot, '/') != NULL)
+    {
+      const gint program_length = strlen (program);
+      gchar *pathext = g_build_path (";",
+				     ".exe;.cmd;.bat;.com",
+				     g_getenv ("PATHEXT"),
+				     NULL);
+      gchar *p;
+      gchar *decorated_program;
+      gchar *retval;
+
+      p = pathext;
+      do
+	{
+	  gchar *q = my_strchrnul (p, ';');
+
+	  decorated_program = g_malloc (program_length + (q-p) + 1);
+	  memcpy (decorated_program, program, program_length);
+	  memcpy (decorated_program+program_length, p, q-p);
+	  decorated_program [program_length + (q-p)] = '\0';
+	  
+	  retval = inner_find_program_in_path (decorated_program);
+	  g_free (decorated_program);
+
+	  if (retval != NULL)
+	    {
+	      g_free (pathext);
+	      return retval;
+	    }
+	  p = q;
+	} while (*p++ != '\0');
+      g_free (pathext);
+      return NULL;
+    }
+  else
+    return inner_find_program_in_path (program);
+}
+
+#endif
+
+/**
+ * g_find_program_in_path:
+ * @program: a program name in the GLib file name encoding
+ * 
+ * Locates the first executable named @program in the user's path, in the
+ * same way that execvp() would locate it. Returns an allocated string
+ * with the absolute path name, or %NULL if the program is not found in
+ * the path. If @program is already an absolute path, returns a copy of
+ * @program if @program exists and is executable, and %NULL otherwise.
+ *  
+ * On Windows, if @program does not have a file type suffix, tries
+ * with the suffixes .exe, .cmd, .bat and .com, and the suffixes in
+ * the <envar>PATHEXT</envar> environment variable. 
+ * 
+ * On Windows, it looks for the file in the same way as CreateProcess() 
+ * would. This means first in the directory where the executing
+ * program was loaded from, then in the current directory, then in the
+ * Windows 32-bit system directory, then in the Windows directory, and
+ * finally in the directories in the <envar>PATH</envar> environment 
+ * variable. If the program is found, the return value contains the 
+ * full name including the type suffix.
+ *
+ * Return value: absolute path, or %NULL
+ **/
+#ifdef G_OS_WIN32
+static gchar *
+inner_find_program_in_path (const gchar *program)
+#else
+gchar*
+g_find_program_in_path (const gchar *program)
+#endif
+{
+  const gchar *path, *p;
+  gchar *name, *freeme;
+#ifdef G_OS_WIN32
+  const gchar *path_copy;
+  gchar *filename = NULL, *appdir = NULL;
+  gchar *sysdir = NULL, *windir = NULL;
+  int n;
+  wchar_t wfilename[MAXPATHLEN], wsysdir[MAXPATHLEN],
+    wwindir[MAXPATHLEN];
+#endif
+  gsize len;
+  gsize pathlen;
+
+  g_return_val_if_fail (program != NULL, NULL);
+
+  /* If it is an absolute path, or a relative path including subdirectories,
+   * don't look in PATH.
+   */
+  if (g_path_is_absolute (program)
+      || strchr (program, G_DIR_SEPARATOR) != NULL
+#ifdef G_OS_WIN32
+      || strchr (program, '/') != NULL
+#endif
+      )
+    {
+      if (g_file_test (program, G_FILE_TEST_IS_EXECUTABLE) &&
+	  !g_file_test (program, G_FILE_TEST_IS_DIR))
+        return g_strdup (program);
+      else
+        return NULL;
+    }
+  
+  path = g_getenv ("PATH");
+#if defined(G_OS_UNIX) || defined(G_OS_BEOS)
+  if (path == NULL)
+    {
+      /* There is no `PATH' in the environment.  The default
+       * search path in GNU libc is the current directory followed by
+       * the path `confstr' returns for `_CS_PATH'.
+       */
+      
+      /* In GLib we put . last, for security, and don't use the
+       * unportable confstr(); UNIX98 does not actually specify
+       * what to search if PATH is unset. POSIX may, dunno.
+       */
+      
+      path = "/bin:/usr/bin:.";
+    }
+#else
+  n = GetModuleFileNameW (NULL, wfilename, MAXPATHLEN);
+  if (n > 0 && n < MAXPATHLEN)
+    filename = g_utf16_to_utf8 (wfilename, -1, NULL, NULL, NULL);
+  
+  n = GetSystemDirectoryW (wsysdir, MAXPATHLEN);
+  if (n > 0 && n < MAXPATHLEN)
+    sysdir = g_utf16_to_utf8 (wsysdir, -1, NULL, NULL, NULL);
+  
+  n = GetWindowsDirectoryW (wwindir, MAXPATHLEN);
+  if (n > 0 && n < MAXPATHLEN)
+    windir = g_utf16_to_utf8 (wwindir, -1, NULL, NULL, NULL);
+  
+  if (filename)
+    {
+      appdir = g_path_get_dirname (filename);
+      g_free (filename);
+    }
+  
+  path = g_strdup (path);
+
+  if (windir)
+    {
+      const gchar *tem = path;
+      path = g_strconcat (windir, ";", path, NULL);
+      g_free ((gchar *) tem);
+      g_free (windir);
+    }
+  
+  if (sysdir)
+    {
+      const gchar *tem = path;
+      path = g_strconcat (sysdir, ";", path, NULL);
+      g_free ((gchar *) tem);
+      g_free (sysdir);
+    }
+  
+  {
+    const gchar *tem = path;
+    path = g_strconcat (".;", path, NULL);
+    g_free ((gchar *) tem);
+  }
+  
+  if (appdir)
+    {
+      const gchar *tem = path;
+      path = g_strconcat (appdir, ";", path, NULL);
+      g_free ((gchar *) tem);
+      g_free (appdir);
+    }
+
+  path_copy = path;
+#endif
+  
+  len = strlen (program) + 1;
+  pathlen = strlen (path);
+  freeme = name = g_malloc (pathlen + len + 1);
+  
+  /* Copy the file name at the top, including '\0'  */
+  memcpy (name + pathlen + 1, program, len);
+  name = name + pathlen;
+  /* And add the slash before the filename  */
+  *name = G_DIR_SEPARATOR;
+  
+  p = path;
+  do
+    {
+      char *startp;
+
+      path = p;
+      p = my_strchrnul (path, G_SEARCHPATH_SEPARATOR);
+
+      if (p == path)
+        /* Two adjacent colons, or a colon at the beginning or the end
+         * of `PATH' means to search the current directory.
+         */
+        startp = name + 1;
+      else
+        startp = memcpy (name - (p - path), path, p - path);
+
+      if (g_file_test (startp, G_FILE_TEST_IS_EXECUTABLE) &&
+	  !g_file_test (startp, G_FILE_TEST_IS_DIR))
+        {
+          gchar *ret;
+          ret = g_strdup (startp);
+          g_free (freeme);
+#ifdef G_OS_WIN32
+	  g_free ((gchar *) path_copy);
+#endif
+          return ret;
+        }
+    }
+  while (*p++ != '\0');
+  
+  g_free (freeme);
+#ifdef G_OS_WIN32
+  g_free ((gchar *) path_copy);
+#endif
+
+  return NULL;
+}
+
+static gboolean
+debug_key_matches (const gchar *key,
+		   const gchar *token,
+		   guint        length)
+{
+  for (; length; length--, key++, token++)
+    {
+      char k = (*key   == '_') ? '-' : tolower (*key  );
+      char t = (*token == '_') ? '-' : tolower (*token);
+
+      if (k != t)
+        return FALSE;
+    }
+
+  return *key == '\0';
+}
+
+/**
+ * g_parse_debug_string:
+ * @string: a list of debug options separated by colons, spaces, or
+ * commas, or %NULL.
+ * @keys: pointer to an array of #GDebugKey which associate 
+ *     strings with bit flags.
+ * @nkeys: the number of #GDebugKey<!-- -->s in the array.
+ *
+ * Parses a string containing debugging options
+ * into a %guint containing bit flags. This is used 
+ * within GDK and GTK+ to parse the debug options passed on the
+ * command line or through environment variables.
+ *
+ * If @string is equal to "all", all flags are set.  If @string
+ * is equal to "help", all the available keys in @keys are printed
+ * out to standard error.
+ *
+ * Returns: the combined set of bit flags.
+ */
+guint	     
+g_parse_debug_string  (const gchar     *string, 
+		       const GDebugKey *keys, 
+		       guint	        nkeys)
+{
+  guint i;
+  guint result = 0;
+  
+  if (string == NULL)
+    return 0;
+
+  /* this function is used by gmem.c/gslice.c initialization code,
+   * so introducing malloc dependencies here would require adaptions
+   * of those code portions.
+   */
+  
+  if (!g_ascii_strcasecmp (string, "all"))
+    {
+      for (i=0; i<nkeys; i++)
+	result |= keys[i].value;
+    }
+  else if (!g_ascii_strcasecmp (string, "help"))
+    {
+      /* using stdio directly for the reason stated above */
+      fprintf (stderr, "Supported debug values: ");
+      for (i=0; i<nkeys; i++)
+	fprintf (stderr, " %s", keys[i].key);
+      fprintf (stderr, "\n");
+    }
+  else
+    {
+      const gchar *p = string;
+      const gchar *q;
+      
+      while (*p)
+	{
+	  q = strpbrk (p, ":;, \t");
+	  if (!q)
+	    q = p + strlen(p);
+	  
+	  for (i = 0; i < nkeys; i++)
+	    if (debug_key_matches (keys[i].key, p, q - p))
+	      result |= keys[i].value;
+	  
+	  p = q;
+	  if (*p)
+	    p++;
+	}
+    }
+  
+  return result;
+}
+
+/**
+ * g_basename:
+ * @file_name: the name of the file.
+ * 
+ * Gets the name of the file without any leading directory components.  
+ * It returns a pointer into the given file name string.
+ * 
+ * Return value: the name of the file without any leading directory components.
+ *
+ * Deprecated:2.2: Use g_path_get_basename() instead, but notice that
+ * g_path_get_basename() allocates new memory for the returned string, unlike
+ * this function which returns a pointer into the argument.
+ **/
+G_CONST_RETURN gchar*
+g_basename (const gchar	   *file_name)
+{
+  register gchar *base;
+  
+  g_return_val_if_fail (file_name != NULL, NULL);
+  
+  base = strrchr (file_name, G_DIR_SEPARATOR);
+
+#ifdef G_OS_WIN32
+  {
+    gchar *q = strrchr (file_name, '/');
+    if (base == NULL || (q != NULL && q > base))
+	base = q;
+  }
+#endif
+
+  if (base)
+    return base + 1;
+
+#ifdef G_OS_WIN32
+  if (g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+    return (gchar*) file_name + 2;
+#endif /* G_OS_WIN32 */
+  
+  return (gchar*) file_name;
+}
+
+/**
+ * g_path_get_basename:
+ * @file_name: the name of the file.
+ *
+ * Gets the last component of the filename. If @file_name ends with a 
+ * directory separator it gets the component before the last slash. If 
+ * @file_name consists only of directory separators (and on Windows, 
+ * possibly a drive letter), a single separator is returned. If
+ * @file_name is empty, it gets ".".
+ *
+ * Return value: a newly allocated string containing the last component of 
+ *   the filename.
+ */
+gchar*
+g_path_get_basename (const gchar   *file_name)
+{
+  register gssize base;             
+  register gssize last_nonslash;    
+  gsize len;    
+  gchar *retval;
+ 
+  g_return_val_if_fail (file_name != NULL, NULL);
+
+  if (file_name[0] == '\0')
+    /* empty string */
+    return g_strdup (".");
+  
+  last_nonslash = strlen (file_name) - 1;
+
+  while (last_nonslash >= 0 && G_IS_DIR_SEPARATOR (file_name [last_nonslash]))
+    last_nonslash--;
+
+  if (last_nonslash == -1)
+    /* string only containing slashes */
+    return g_strdup (G_DIR_SEPARATOR_S);
+
+#ifdef G_OS_WIN32
+  if (last_nonslash == 1 && g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+    /* string only containing slashes and a drive */
+    return g_strdup (G_DIR_SEPARATOR_S);
+#endif /* G_OS_WIN32 */
+
+  base = last_nonslash;
+
+  while (base >=0 && !G_IS_DIR_SEPARATOR (file_name [base]))
+    base--;
+
+#ifdef G_OS_WIN32
+  if (base == -1 && g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+    base = 1;
+#endif /* G_OS_WIN32 */
+
+  len = last_nonslash - base;
+  retval = g_malloc (len + 1);
+  memcpy (retval, file_name + base + 1, len);
+  retval [len] = '\0';
+  return retval;
+}
+
+/**
+ * g_path_is_absolute:
+ * @file_name: a file name.
+ *
+ * Returns %TRUE if the given @file_name is an absolute file name,
+ * i.e. it contains a full path from the root directory such as "/usr/local"
+ * on UNIX or "C:\windows" on Windows systems.
+ *
+ * Returns: %TRUE if @file_name is an absolute path. 
+ */
+gboolean
+g_path_is_absolute (const gchar *file_name)
+{
+  g_return_val_if_fail (file_name != NULL, FALSE);
+  
+  if (G_IS_DIR_SEPARATOR (file_name[0]))
+    return TRUE;
+
+#ifdef G_OS_WIN32
+  /* Recognize drive letter on native Windows */
+  if (g_ascii_isalpha (file_name[0]) && 
+      file_name[1] == ':' && G_IS_DIR_SEPARATOR (file_name[2]))
+    return TRUE;
+#endif /* G_OS_WIN32 */
+
+  return FALSE;
+}
+
+/**
+ * g_path_skip_root:
+ * @file_name: a file name.
+ *
+ * Returns a pointer into @file_name after the root component, i.e. after
+ * the "/" in UNIX or "C:\" under Windows. If @file_name is not an absolute
+ * path it returns %NULL.
+ *
+ * Returns: a pointer into @file_name after the root component.
+ */
+G_CONST_RETURN gchar*
+g_path_skip_root (const gchar *file_name)
+{
+  g_return_val_if_fail (file_name != NULL, NULL);
+  
+#ifdef G_PLATFORM_WIN32
+  /* Skip \\server\share or //server/share */
+  if (G_IS_DIR_SEPARATOR (file_name[0]) &&
+      G_IS_DIR_SEPARATOR (file_name[1]) &&
+      file_name[2] &&
+      !G_IS_DIR_SEPARATOR (file_name[2]))
+    {
+      gchar *p;
+
+      p = strchr (file_name + 2, G_DIR_SEPARATOR);
+#ifdef G_OS_WIN32
+      {
+	gchar *q = strchr (file_name + 2, '/');
+	if (p == NULL || (q != NULL && q < p))
+	  p = q;
+      }
+#endif
+      if (p &&
+	  p > file_name + 2 &&
+	  p[1])
+	{
+	  file_name = p + 1;
+
+	  while (file_name[0] && !G_IS_DIR_SEPARATOR (file_name[0]))
+	    file_name++;
+
+	  /* Possibly skip a backslash after the share name */
+	  if (G_IS_DIR_SEPARATOR (file_name[0]))
+	    file_name++;
+
+	  return (gchar *)file_name;
+	}
+    }
+#endif
+  
+  /* Skip initial slashes */
+  if (G_IS_DIR_SEPARATOR (file_name[0]))
+    {
+      while (G_IS_DIR_SEPARATOR (file_name[0]))
+	file_name++;
+      return (gchar *)file_name;
+    }
+
+#ifdef G_OS_WIN32
+  /* Skip X:\ */
+  if (g_ascii_isalpha (file_name[0]) && file_name[1] == ':' && G_IS_DIR_SEPARATOR (file_name[2]))
+    return (gchar *)file_name + 3;
+#endif
+
+  return NULL;
+}
+
+/**
+ * g_path_get_dirname:
+ * @file_name: the name of the file.
+ *
+ * Gets the directory components of a file name.  If the file name has no
+ * directory components "." is returned.  The returned string should be
+ * freed when no longer needed.
+ * 
+ * Returns: the directory components of the file.
+ */
+gchar*
+g_path_get_dirname (const gchar	   *file_name)
+{
+  register gchar *base;
+  register gsize len;    
+  
+  g_return_val_if_fail (file_name != NULL, NULL);
+  
+  base = strrchr (file_name, G_DIR_SEPARATOR);
+#ifdef G_OS_WIN32
+  {
+    gchar *q = strrchr (file_name, '/');
+    if (base == NULL || (q != NULL && q > base))
+	base = q;
+  }
+#endif
+  if (!base)
+    {
+#ifdef G_OS_WIN32
+      if (g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+	{
+	  gchar drive_colon_dot[4];
+
+	  drive_colon_dot[0] = file_name[0];
+	  drive_colon_dot[1] = ':';
+	  drive_colon_dot[2] = '.';
+	  drive_colon_dot[3] = '\0';
+
+	  return g_strdup (drive_colon_dot);
+	}
+#endif
+    return g_strdup (".");
+    }
+
+  while (base > file_name && G_IS_DIR_SEPARATOR (*base))
+    base--;
+
+#ifdef G_OS_WIN32
+  /* base points to the char before the last slash.
+   *
+   * In case file_name is the root of a drive (X:\) or a child of the
+   * root of a drive (X:\foo), include the slash.
+   *
+   * In case file_name is the root share of an UNC path
+   * (\\server\share), add a slash, returning \\server\share\ .
+   *
+   * In case file_name is a direct child of a share in an UNC path
+   * (\\server\share\foo), include the slash after the share name,
+   * returning \\server\share\ .
+   */
+  if (base == file_name + 1 && g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+    base++;
+  else if (G_IS_DIR_SEPARATOR (file_name[0]) &&
+	   G_IS_DIR_SEPARATOR (file_name[1]) &&
+	   file_name[2] &&
+	   !G_IS_DIR_SEPARATOR (file_name[2]) &&
+	   base >= file_name + 2)
+    {
+      const gchar *p = file_name + 2;
+      while (*p && !G_IS_DIR_SEPARATOR (*p))
+	p++;
+      if (p == base + 1)
+	{
+	  len = (guint) strlen (file_name) + 1;
+	  base = g_new (gchar, len + 1);
+	  strcpy (base, file_name);
+	  base[len-1] = G_DIR_SEPARATOR;
+	  base[len] = 0;
+	  return base;
+	}
+      if (G_IS_DIR_SEPARATOR (*p))
+	{
+	  p++;
+	  while (*p && !G_IS_DIR_SEPARATOR (*p))
+	    p++;
+	  if (p == base + 1)
+	    base++;
+	}
+    }
+#endif
+
+  len = (guint) 1 + base - file_name;
+  
+  base = g_new (gchar, len + 1);
+  g_memmove (base, file_name, len);
+  base[len] = 0;
+  
+  return base;
+}
+
+/**
+ * g_get_current_dir:
+ *
+ * Gets the current directory.
+ * The returned string should be freed when no longer needed. The encoding 
+ * of the returned string is system defined. On Windows, it is always UTF-8.
+ * 
+ * Returns: the current directory.
+ */
+gchar*
+g_get_current_dir (void)
+{
+#ifdef G_OS_WIN32
+
+  gchar *dir = NULL;
+  wchar_t dummy[2], *wdir;
+  int len;
+
+  len = GetCurrentDirectoryW (2, dummy);
+  wdir = g_new (wchar_t, len);
+
+  if (GetCurrentDirectoryW (len, wdir) == len - 1)
+    dir = g_utf16_to_utf8 (wdir, -1, NULL, NULL, NULL);
+  
+  g_free (wdir);
+
+  if (dir == NULL)
+    dir = g_strdup ("\\");
+
+  return dir;
+
+#else
+
+  gchar *buffer = NULL;
+  gchar *dir = NULL;
+  static gulong max_len = 0;
+
+  if (max_len == 0) 
+    max_len = (G_PATH_LENGTH == -1) ? 2048 : G_PATH_LENGTH;
+  
+  /* We don't use getcwd(3) on SUNOS, because, it does a popen("pwd")
+   * and, if that wasn't bad enough, hangs in doing so.
+   */
+#if	(defined (sun) && !defined (__SVR4)) || !defined(HAVE_GETCWD)
+  buffer = g_new (gchar, max_len + 1);
+  *buffer = 0;
+  dir = getwd (buffer);
+#else	/* !sun || !HAVE_GETCWD */
+  while (max_len < G_MAXULONG / 2)
+    {
+      g_free (buffer);
+      buffer = g_new (gchar, max_len + 1);
+      *buffer = 0;
+      dir = getcwd (buffer, max_len);
+
+      if (dir || errno != ERANGE)
+	break;
+
+      max_len *= 2;
+    }
+#endif	/* !sun || !HAVE_GETCWD */
+  
+  if (!dir || !*buffer)
+    {
+      /* hm, should we g_error() out here?
+       * this can happen if e.g. "./" has mode \0000
+       */
+      buffer[0] = G_DIR_SEPARATOR;
+      buffer[1] = 0;
+    }
+
+  dir = g_strdup (buffer);
+  g_free (buffer);
+  
+  return dir;
+#endif /* !Win32 */
+}
+
+/**
+ * g_getenv:
+ * @variable: the environment variable to get, in the GLib file name encoding.
+ * 
+ * Returns the value of an environment variable. The name and value
+ * are in the GLib file name encoding. On UNIX, this means the actual
+ * bytes which might or might not be in some consistent character set
+ * and encoding. On Windows, it is in UTF-8. On Windows, in case the
+ * environment variable's value contains references to other
+ * environment variables, they are expanded.
+ * 
+ * Return value: the value of the environment variable, or %NULL if
+ * the environment variable is not found. The returned string may be
+ * overwritten by the next call to g_getenv(), g_setenv() or
+ * g_unsetenv().
+ **/
+G_CONST_RETURN gchar*
+g_getenv (const gchar *variable)
+{
+#ifndef G_OS_WIN32
+
+  g_return_val_if_fail (variable != NULL, NULL);
+
+  return getenv (variable);
+
+#else /* G_OS_WIN32 */
+
+  GQuark quark;
+  gchar *value;
+  wchar_t dummy[2], *wname, *wvalue;
+  int len;
+
+  g_return_val_if_fail (variable != NULL, NULL);
+  g_return_val_if_fail (g_utf8_validate (variable, -1, NULL), NULL);
+
+  /* On Windows NT, it is relatively typical that environment
+   * variables contain references to other environment variables. If
+   * so, use ExpandEnvironmentStrings(). (In an ideal world, such
+   * environment variables would be stored in the Registry as
+   * REG_EXPAND_SZ type values, and would then get automatically
+   * expanded before a program sees them. But there is broken software
+   * that stores environment variables as REG_SZ values even if they
+   * contain references to other environment variables.)
+   */
+
+  wname = g_utf8_to_utf16 (variable, -1, NULL, NULL, NULL);
+
+  len = GetEnvironmentVariableW (wname, dummy, 2);
+
+  if (len == 0)
+    {
+      g_free (wname);
+      return NULL;
+    }
+  else if (len == 1)
+    len = 2;
+
+  wvalue = g_new (wchar_t, len);
+
+  if (GetEnvironmentVariableW (wname, wvalue, len) != len - 1)
+    {
+      g_free (wname);
+      g_free (wvalue);
+      return NULL;
+    }
+
+  if (wcschr (wvalue, L'%') != NULL)
+    {
+      wchar_t *tem = wvalue;
+
+      len = ExpandEnvironmentStringsW (wvalue, dummy, 2);
+
+      if (len > 0)
+	{
+	  wvalue = g_new (wchar_t, len);
+
+	  if (ExpandEnvironmentStringsW (tem, wvalue, len) != len)
+	    {
+	      g_free (wvalue);
+	      wvalue = tem;
+	    }
+	  else
+	    g_free (tem);
+	}
+    }
+
+  value = g_utf16_to_utf8 (wvalue, -1, NULL, NULL, NULL);
+
+  g_free (wname);
+  g_free (wvalue);
+
+  quark = g_quark_from_string (value);
+  g_free (value);
+  
+  return g_quark_to_string (quark);
+
+#endif /* G_OS_WIN32 */
+}
+
+/* _g_getenv_nomalloc
+ * this function does a getenv() without doing any kind of allocation
+ * through glib. it's suitable for chars <= 127 only (both, for the
+ * variable name and the contents) and for contents < 1024 chars in
+ * length. also, it aliases "" to a NULL return value.
+ **/
+const gchar*
+_g_getenv_nomalloc (const gchar *variable,
+                    gchar        buffer[1024])
+{
+  const gchar *retval = getenv (variable);
+  if (retval && retval[0])
+    {
+      gint l = strlen (retval);
+      if (l < 1024)
+        {
+          strncpy (buffer, retval, l);
+          buffer[l] = 0;
+          return buffer;
+        }
+    }
+  return NULL;
+}
+
+/**
+ * g_setenv:
+ * @variable: the environment variable to set, must not contain '='.
+ * @value: the value for to set the variable to.
+ * @overwrite: whether to change the variable if it already exists.
+ *
+ * Sets an environment variable. Both the variable's name and value
+ * should be in the GLib file name encoding. On UNIX, this means that
+ * they can be any sequence of bytes. On Windows, they should be in
+ * UTF-8.
+ *
+ * Note that on some systems, when variables are overwritten, the memory 
+ * used for the previous variables and its value isn't reclaimed.
+ *
+ * Returns: %FALSE if the environment variable couldn't be set.
+ *
+ * Since: 2.4
+ */
+gboolean
+g_setenv (const gchar *variable, 
+	  const gchar *value, 
+	  gboolean     overwrite)
+{
+#ifndef G_OS_WIN32
+
+  gint result;
+#ifndef HAVE_SETENV
+  gchar *string;
+#endif
+
+  g_return_val_if_fail (variable != NULL, FALSE);
+  g_return_val_if_fail (strchr (variable, '=') == NULL, FALSE);
+
+#ifdef HAVE_SETENV
+  result = setenv (variable, value, overwrite);
+#else
+  if (!overwrite && getenv (variable) != NULL)
+    return TRUE;
+  
+  /* This results in a leak when you overwrite existing
+   * settings. It would be fairly easy to fix this by keeping
+   * our own parallel array or hash table.
+   */
+  string = g_strconcat (variable, "=", value, NULL);
+  result = putenv (string);
+#endif
+  return result == 0;
+
+#else /* G_OS_WIN32 */
+
+  gboolean retval;
+  wchar_t *wname, *wvalue, *wassignment;
+  gchar *tem;
+
+  g_return_val_if_fail (variable != NULL, FALSE);
+  g_return_val_if_fail (strchr (variable, '=') == NULL, FALSE);
+  g_return_val_if_fail (g_utf8_validate (variable, -1, NULL), FALSE);
+  g_return_val_if_fail (g_utf8_validate (value, -1, NULL), FALSE);
+
+  if (!overwrite && g_getenv (variable) != NULL)
+    return TRUE;
+
+  /* We want to (if possible) set both the environment variable copy
+   * kept by the C runtime and the one kept by the system.
+   *
+   * We can't use only the C runtime's putenv or _wputenv() as that
+   * won't work for arbitrary Unicode strings in a "non-Unicode" app
+   * (with main() and not wmain()). In a "main()" app the C runtime
+   * initializes the C runtime's environment table by converting the
+   * real (wide char) environment variables to system codepage, thus
+   * breaking those that aren't representable in the system codepage.
+   *
+   * As the C runtime's putenv() will also set the system copy, we do
+   * the putenv() first, then call SetEnvironmentValueW ourselves.
+   */
+
+  wname = g_utf8_to_utf16 (variable, -1, NULL, NULL, NULL);
+  wvalue = g_utf8_to_utf16 (value, -1, NULL, NULL, NULL);
+  tem = g_strconcat (variable, "=", value, NULL);
+  wassignment = g_utf8_to_utf16 (tem, -1, NULL, NULL, NULL);
+    
+  g_free (tem);
+  _wputenv (wassignment);
+  g_free (wassignment);
+
+  retval = (SetEnvironmentVariableW (wname, wvalue) != 0);
+
+  g_free (wname);
+  g_free (wvalue);
+
+  return retval;
+
+#endif /* G_OS_WIN32 */
+}
+
+#ifdef HAVE__NSGETENVIRON
+#define environ (*_NSGetEnviron())
+#elif !defined(G_OS_WIN32)
+
+/* According to the Single Unix Specification, environ is not in 
+ * any system header, although unistd.h often declares it.
+ */
+extern char **environ;
+#endif
+
+/**
+ * g_unsetenv:
+ * @variable: the environment variable to remove, must not contain '='.
+ * 
+ * Removes an environment variable from the environment.
+ *
+ * Note that on some systems, when variables are overwritten, the memory 
+ * used for the previous variables and its value isn't reclaimed.
+ * Furthermore, this function can't be guaranteed to operate in a 
+ * threadsafe way.
+ *
+ * Since: 2.4 
+ **/
+void
+g_unsetenv (const gchar *variable)
+{
+#ifndef G_OS_WIN32
+
+#ifdef HAVE_UNSETENV
+  g_return_if_fail (variable != NULL);
+  g_return_if_fail (strchr (variable, '=') == NULL);
+
+  unsetenv (variable);
+#else /* !HAVE_UNSETENV */
+  int len;
+  gchar **e, **f;
+
+  g_return_if_fail (variable != NULL);
+  g_return_if_fail (strchr (variable, '=') == NULL);
+
+  len = strlen (variable);
+  
+  /* Mess directly with the environ array.
+   * This seems to be the only portable way to do this.
+   *
+   * Note that we remove *all* environment entries for
+   * the variable name, not just the first.
+   */
+  e = f = environ;
+  while (*e != NULL) 
+    {
+      if (strncmp (*e, variable, len) != 0 || (*e)[len] != '=') 
+	{
+	  *f = *e;
+	  f++;
+	}
+      e++;
+    }
+  *f = NULL;
+#endif /* !HAVE_UNSETENV */
+
+#else  /* G_OS_WIN32 */
+
+  wchar_t *wname, *wassignment;
+  gchar *tem;
+
+  g_return_if_fail (variable != NULL);
+  g_return_if_fail (strchr (variable, '=') == NULL);
+  g_return_if_fail (g_utf8_validate (variable, -1, NULL));
+
+  wname = g_utf8_to_utf16 (variable, -1, NULL, NULL, NULL);
+  tem = g_strconcat (variable, "=", NULL);
+  wassignment = g_utf8_to_utf16 (tem, -1, NULL, NULL, NULL);
+    
+  g_free (tem);
+  _wputenv (wassignment);
+  g_free (wassignment);
+
+  SetEnvironmentVariableW (wname, NULL);
+
+  g_free (wname);
+
+#endif /* G_OS_WIN32 */
+}
+
+/**
+ * g_listenv:
+ *
+ * Gets the names of all variables set in the environment.
+ * 
+ * Returns: a %NULL-terminated list of strings which must be freed
+ * with g_strfreev().
+ *
+ * Programs that want to be portable to Windows should typically use
+ * this function and g_getenv() instead of using the environ array
+ * from the C library directly. On Windows, the strings in the environ
+ * array are in system codepage encoding, while in most of the typical
+ * use cases for environment variables in GLib-using programs you want
+ * the UTF-8 encoding that this function and g_getenv() provide.
+ *
+ * Since: 2.8
+ */
+gchar **
+g_listenv (void)
+{
+#ifndef G_OS_WIN32
+  gchar **result, *eq;
+  gint len, i, j;
+
+  len = g_strv_length (environ);
+  result = g_new0 (gchar *, len + 1);
+  
+  j = 0;
+  for (i = 0; i < len; i++)
+    {
+      eq = strchr (environ[i], '=');
+      if (eq)
+	result[j++] = g_strndup (environ[i], eq - environ[i]);
+    }
+
+  result[j] = NULL;
+
+  return result;
+#else
+  gchar **result, *eq;
+  gint len = 0, j;
+  wchar_t *p, *q;
+
+  p = (wchar_t *) GetEnvironmentStringsW ();
+  if (p != NULL)
+    {
+      q = p;
+      while (*q)
+	{
+	  q += wcslen (q) + 1;
+	  len++;
+	}
+    }
+  result = g_new0 (gchar *, len + 1);
+
+  j = 0;
+  q = p;
+  while (*q)
+    {
+      result[j] = g_utf16_to_utf8 (q, -1, NULL, NULL, NULL);
+      if (result[j] != NULL)
+	{
+	  eq = strchr (result[j], '=');
+	  if (eq && eq > result[j])
+	    {
+	      *eq = '\0';
+	      j++;
+	    }
+	  else
+	    g_free (result[j]);
+	}
+      q += wcslen (q) + 1;
+    }
+  result[j] = NULL;
+  FreeEnvironmentStringsW (p);
+
+  return result;
+#endif
+}
+
+G_LOCK_DEFINE_STATIC (g_utils_global);
+
+static	gchar	*g_tmp_dir = NULL;
+static	gchar	*g_user_name = NULL;
+static	gchar	*g_real_name = NULL;
+static	gchar	*g_home_dir = NULL;
+static	gchar	*g_host_name = NULL;
+
+#ifdef G_OS_WIN32
+/* System codepage versions of the above, kept at file level so that they,
+ * too, are produced only once.
+ */
+static	gchar	*g_tmp_dir_cp = NULL;
+static	gchar	*g_user_name_cp = NULL;
+static	gchar	*g_real_name_cp = NULL;
+static	gchar	*g_home_dir_cp = NULL;
+#endif
+
+static  gchar   *g_user_data_dir = NULL;
+static  gchar  **g_system_data_dirs = NULL;
+static  gchar   *g_user_cache_dir = NULL;
+static  gchar   *g_user_config_dir = NULL;
+static  gchar  **g_system_config_dirs = NULL;
+
+static  gchar  **g_user_special_dirs = NULL;
+
+/* fifteen minutes of fame for everybody */
+#define G_USER_DIRS_EXPIRE      15 * 60
+
+#ifdef G_OS_WIN32
+
+static gchar *
+get_special_folder (int csidl)
+{
+  wchar_t path[MAX_PATH+1];
+  HRESULT hr;
+  LPITEMIDLIST pidl = NULL;
+  BOOL b;
+  gchar *retval = NULL;
+
+  hr = SHGetSpecialFolderLocation (NULL, csidl, &pidl);
+  if (hr == S_OK)
+    {
+      b = SHGetPathFromIDListW (pidl, path);
+      if (b)
+	retval = g_utf16_to_utf8 (path, -1, NULL, NULL, NULL);
+      CoTaskMemFree (pidl);
+    }
+  return retval;
+}
+
+static char *
+get_windows_directory_root (void)
+{
+  wchar_t wwindowsdir[MAX_PATH];
+
+  if (GetWindowsDirectoryW (wwindowsdir, G_N_ELEMENTS (wwindowsdir)))
+    {
+      /* Usually X:\Windows, but in terminal server environments
+       * might be an UNC path, AFAIK.
+       */
+      char *windowsdir = g_utf16_to_utf8 (wwindowsdir, -1, NULL, NULL, NULL);
+      char *p;
+
+      if (windowsdir == NULL)
+	return g_strdup ("C:\\");
+
+      p = (char *) g_path_skip_root (windowsdir);
+      if (G_IS_DIR_SEPARATOR (p[-1]) && p[-2] != ':')
+	p--;
+      *p = '\0';
+      return windowsdir;
+    }
+  else
+    return g_strdup ("C:\\");
+}
+
+#endif
+
+/* HOLDS: g_utils_global_lock */
+static void
+g_get_any_init_do (void)
+{
+  gchar hostname[100];
+
+  g_tmp_dir = g_strdup (g_getenv ("TMPDIR"));
+  if (!g_tmp_dir)
+    g_tmp_dir = g_strdup (g_getenv ("TMP"));
+  if (!g_tmp_dir)
+    g_tmp_dir = g_strdup (g_getenv ("TEMP"));
+
+#ifdef G_OS_WIN32
+  if (!g_tmp_dir)
+    g_tmp_dir = get_windows_directory_root ();
+#else  
+#ifdef P_tmpdir
+  if (!g_tmp_dir)
+    {
+      gsize k;    
+      g_tmp_dir = g_strdup (P_tmpdir);
+      k = strlen (g_tmp_dir);
+      if (k > 1 && G_IS_DIR_SEPARATOR (g_tmp_dir[k - 1]))
+	g_tmp_dir[k - 1] = '\0';
+    }
+#endif
+  
+  if (!g_tmp_dir)
+    {
+      g_tmp_dir = g_strdup ("/tmp");
+    }
+#endif	/* !G_OS_WIN32 */
+  
+#ifdef G_OS_WIN32
+  /* We check $HOME first for Win32, though it is a last resort for Unix
+   * where we prefer the results of getpwuid().
+   */
+  g_home_dir = g_strdup (g_getenv ("HOME"));
+
+  /* Only believe HOME if it is an absolute path and exists */
+  if (g_home_dir)
+    {
+      if (!(g_path_is_absolute (g_home_dir) &&
+	    g_file_test (g_home_dir, G_FILE_TEST_IS_DIR)))
+	{
+	  g_free (g_home_dir);
+	  g_home_dir = NULL;
+	}
+    }
+  
+  /* In case HOME is Unix-style (it happens), convert it to
+   * Windows style.
+   */
+  if (g_home_dir)
+    {
+      gchar *p;
+      while ((p = strchr (g_home_dir, '/')) != NULL)
+	*p = '\\';
+    }
+
+  if (!g_home_dir)
+    {
+      /* USERPROFILE is probably the closest equivalent to $HOME? */
+      if (g_getenv ("USERPROFILE") != NULL)
+	g_home_dir = g_strdup (g_getenv ("USERPROFILE"));
+    }
+
+  if (!g_home_dir)
+    g_home_dir = get_special_folder (CSIDL_PROFILE);
+  
+  if (!g_home_dir)
+    g_home_dir = get_windows_directory_root ();
+#endif /* G_OS_WIN32 */
+  
+#ifdef HAVE_PWD_H
+  {
+    struct passwd *pw = NULL;
+    gpointer buffer = NULL;
+    gint error;
+    gchar *logname;
+
+#  if defined (HAVE_POSIX_GETPWUID_R) || defined (HAVE_NONPOSIX_GETPWUID_R)
+    struct passwd pwd;
+#    ifdef _SC_GETPW_R_SIZE_MAX  
+    /* This reurns the maximum length */
+    glong bufsize = sysconf (_SC_GETPW_R_SIZE_MAX);
+    
+    if (bufsize < 0)
+      bufsize = 64;
+#    else /* _SC_GETPW_R_SIZE_MAX */
+    glong bufsize = 64;
+#    endif /* _SC_GETPW_R_SIZE_MAX */
+
+    logname = (gchar *) g_getenv ("LOGNAME");
+        
+    do
+      {
+	g_free (buffer);
+	/* we allocate 6 extra bytes to work around a bug in 
+	 * Mac OS < 10.3. See #156446
+	 */
+	buffer = g_malloc (bufsize + 6);
+	errno = 0;
+	
+#    ifdef HAVE_POSIX_GETPWUID_R
+	if (logname) {
+	  error = getpwnam_r (logname, &pwd, buffer, bufsize, &pw);
+	  if (!pw || (pw->pw_uid != getuid ())) {
+	    /* LOGNAME is lying, fall back to looking up the uid */
+	    error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
+	  }
+	} else {
+	  error = getpwuid_r (getuid (), &pwd, buffer, bufsize, &pw);
+	}
+	error = error < 0 ? errno : error;
+#    else /* HAVE_NONPOSIX_GETPWUID_R */
+   /* HPUX 11 falls into the HAVE_POSIX_GETPWUID_R case */
+#      if defined(_AIX) || defined(__hpux)
+	error = getpwuid_r (getuid (), &pwd, buffer, bufsize);
+	pw = error == 0 ? &pwd : NULL;
+#      else /* !_AIX */
+	if (logname) {
+	  pw = getpwnam_r (logname, &pwd, buffer, bufsize);
+	  if (!pw || (pw->pw_uid != getuid ())) {
+	    /* LOGNAME is lying, fall back to looking up the uid */
+	    pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
+	  }
+	} else {
+	  pw = getpwuid_r (getuid (), &pwd, buffer, bufsize);
+	}
+	error = pw ? 0 : errno;
+#      endif /* !_AIX */            
+#    endif /* HAVE_NONPOSIX_GETPWUID_R */
+	
+	if (!pw)
+	  {
+	    /* we bail out prematurely if the user id can't be found
+	     * (should be pretty rare case actually), or if the buffer
+	     * should be sufficiently big and lookups are still not
+	     * successfull.
+	     */
+	    if (error == 0 || error == ENOENT)
+	      {
+		g_warning ("getpwuid_r(): failed due to unknown user id (%lu)",
+			   (gulong) getuid ());
+		break;
+	      }
+	    if (bufsize > 32 * 1024)
+	      {
+		g_warning ("getpwuid_r(): failed due to: %s.",
+			   g_strerror (error));
+		break;
+	      }
+	    
+	    bufsize *= 2;
+	  }
+      }
+    while (!pw);
+#  endif /* HAVE_POSIX_GETPWUID_R || HAVE_NONPOSIX_GETPWUID_R */
+    
+#ifdef ANDROID_STUB
+    if (!pw)
+      {
+	setpwent ();
+	pw = getpwuid (getuid ());
+	endpwent ();
+      }
+#endif
+    if (pw)
+      {
+	g_user_name = g_strdup (pw->pw_name);
+
+	#ifdef ANDROID_STUB
+	if (pw->pw_gecos && *pw->pw_gecos != '\0') 
+	  {
+	    gchar **gecos_fields;
+	    gchar **name_parts;
+
+	    /* split the gecos field and substitute '&' */
+	    gecos_fields = g_strsplit (pw->pw_gecos, ",", 0);
+	    name_parts = g_strsplit (gecos_fields[0], "&", 0);
+	    pw->pw_name[0] = g_ascii_toupper (pw->pw_name[0]);
+	    g_real_name = g_strjoinv (pw->pw_name, name_parts);
+	    g_strfreev (gecos_fields);
+	    g_strfreev (name_parts);
+	  }
+	#endif
+	if (!g_home_dir)
+	  g_home_dir = g_strdup (pw->pw_dir);
+      }
+    g_free (buffer);
+  }
+  
+#else /* !HAVE_PWD_H */
+  
+#ifdef G_OS_WIN32
+  {
+    guint len = UNLEN+1;
+    wchar_t buffer[UNLEN+1];
+    
+    if (GetUserNameW (buffer, (LPDWORD) &len))
+      {
+	g_user_name = g_utf16_to_utf8 (buffer, -1, NULL, NULL, NULL);
+	g_real_name = g_strdup (g_user_name);
+      }
+  }
+#endif /* G_OS_WIN32 */
+
+#endif /* !HAVE_PWD_H */
+
+#ifndef G_OS_WIN32
+  if (!g_home_dir)
+    g_home_dir = g_strdup (g_getenv ("HOME"));
+#endif
+
+#ifdef __EMX__
+  /* change '\\' in %HOME% to '/' */
+  g_strdelimit (g_home_dir, "\\",'/');
+#endif
+  if (!g_user_name)
+    g_user_name = g_strdup ("somebody");
+  if (!g_real_name)
+    g_real_name = g_strdup ("Unknown");
+
+  {
+#ifndef G_OS_WIN32
+    gboolean hostname_fail = (gethostname (hostname, sizeof (hostname)) == -1);
+#else
+    DWORD size = sizeof (hostname);
+    gboolean hostname_fail = (!GetComputerName (hostname, &size));
+#endif
+    g_host_name = g_strdup (hostname_fail ? "localhost" : hostname);
+  }
+
+#ifdef G_OS_WIN32
+  g_tmp_dir_cp = g_locale_from_utf8 (g_tmp_dir, -1, NULL, NULL, NULL);
+  g_user_name_cp = g_locale_from_utf8 (g_user_name, -1, NULL, NULL, NULL);
+  g_real_name_cp = g_locale_from_utf8 (g_real_name, -1, NULL, NULL, NULL);
+
+  if (!g_tmp_dir_cp)
+    g_tmp_dir_cp = g_strdup ("\\");
+  if (!g_user_name_cp)
+    g_user_name_cp = g_strdup ("somebody");
+  if (!g_real_name_cp)
+    g_real_name_cp = g_strdup ("Unknown");
+
+  /* home_dir might be NULL, unlike tmp_dir, user_name and
+   * real_name.
+   */
+  if (g_home_dir)
+    g_home_dir_cp = g_locale_from_utf8 (g_home_dir, -1, NULL, NULL, NULL);
+  else
+    g_home_dir_cp = NULL;
+#endif /* G_OS_WIN32 */
+}
+
+static inline void
+g_get_any_init (void)
+{
+  if (!g_tmp_dir)
+    g_get_any_init_do ();
+}
+
+static inline void
+g_get_any_init_locked (void)
+{
+  G_LOCK (g_utils_global);
+  g_get_any_init ();
+  G_UNLOCK (g_utils_global);
+}
+
+
+/**
+ * g_get_user_name:
+ *
+ * Gets the user name of the current user. The encoding of the returned
+ * string is system-defined. On UNIX, it might be the preferred file name
+ * encoding, or something else, and there is no guarantee that it is even
+ * consistent on a machine. On Windows, it is always UTF-8.
+ *
+ * Returns: the user name of the current user.
+ */
+G_CONST_RETURN gchar*
+g_get_user_name (void)
+{
+  g_get_any_init_locked ();
+  return g_user_name;
+}
+
+/**
+ * g_get_real_name:
+ *
+ * Gets the real name of the user. This usually comes from the user's entry 
+ * in the <filename>passwd</filename> file. The encoding of the returned 
+ * string is system-defined. (On Windows, it is, however, always UTF-8.) 
+ * If the real user name cannot be determined, the string "Unknown" is 
+ * returned.
+ *
+ * Returns: the user's real name.
+ */
+G_CONST_RETURN gchar*
+g_get_real_name (void)
+{
+  g_get_any_init_locked ();
+  return g_real_name;
+}
+
+/**
+ * g_get_home_dir:
+ *
+ * Gets the current user's home directory as defined in the 
+ * password database.
+ *
+ * Note that in contrast to traditional UNIX tools, this function 
+ * prefers <filename>passwd</filename> entries over the <envar>HOME</envar> 
+ * environment variable. 
+ *
+ * One of the reasons for this decision is that applications in many 
+ * cases need special handling to deal with the case where 
+ * <envar>HOME</envar> is
+ * <simplelist>
+ *   <member>Not owned by the user</member>
+ *   <member>Not writeable</member>
+ *   <member>Not even readable</member>
+ * </simplelist>
+ * Since applications are in general <emphasis>not</emphasis> written 
+ * to deal with these situations it was considered better to make 
+ * g_get_home_dir() not pay attention to <envar>HOME</envar> and to 
+ * return the real home directory for the user. If applications
+ * want to pay attention to <envar>HOME</envar>, they can do:
+ * |[
+ *  const char *homedir = g_getenv ("HOME");
+ *   if (!homedir)
+ *      homedir = g_get_home_dir (<!-- -->);
+ * ]|
+ *
+ * Returns: the current user's home directory
+ */
+G_CONST_RETURN gchar*
+g_get_home_dir (void)
+{
+  g_get_any_init_locked ();
+  return g_home_dir;
+}
+
+/**
+ * g_get_tmp_dir:
+ *
+ * Gets the directory to use for temporary files. This is found from 
+ * inspecting the environment variables <envar>TMPDIR</envar>, 
+ * <envar>TMP</envar>, and <envar>TEMP</envar> in that order. If none 
+ * of those are defined "/tmp" is returned on UNIX and "C:\" on Windows. 
+ * The encoding of the returned string is system-defined. On Windows, 
+ * it is always UTF-8. The return value is never %NULL.
+ *
+ * Returns: the directory to use for temporary files.
+ */
+G_CONST_RETURN gchar*
+g_get_tmp_dir (void)
+{
+  g_get_any_init_locked ();
+  return g_tmp_dir;
+}
+
+/**
+ * g_get_host_name:
+ *
+ * Return a name for the machine. 
+ *
+ * The returned name is not necessarily a fully-qualified domain name,
+ * or even present in DNS or some other name service at all. It need
+ * not even be unique on your local network or site, but usually it
+ * is. Callers should not rely on the return value having any specific
+ * properties like uniqueness for security purposes. Even if the name
+ * of the machine is changed while an application is running, the
+ * return value from this function does not change. The returned
+ * string is owned by GLib and should not be modified or freed. If no
+ * name can be determined, a default fixed string "localhost" is
+ * returned.
+ *
+ * Returns: the host name of the machine.
+ *
+ * Since: 2.8
+ */
+const gchar *
+g_get_host_name (void)
+{
+  g_get_any_init_locked ();
+  return g_host_name;
+}
+
+G_LOCK_DEFINE_STATIC (g_prgname);
+static gchar *g_prgname = NULL;
+
+/**
+ * g_get_prgname:
+ *
+ * Gets the name of the program. This name should <emphasis>not</emphasis> 
+ * be localized, contrast with g_get_application_name().
+ * (If you are using GDK or GTK+ the program name is set in gdk_init(), 
+ * which is called by gtk_init(). The program name is found by taking 
+ * the last component of <literal>argv[0]</literal>.)
+ *
+ * Returns: the name of the program. The returned string belongs 
+ * to GLib and must not be modified or freed.
+ */
+gchar*
+g_get_prgname (void)
+{
+  gchar* retval;
+
+  G_LOCK (g_prgname);
+#ifdef G_OS_WIN32
+  if (g_prgname == NULL)
+    {
+      static gboolean beenhere = FALSE;
+
+      if (!beenhere)
+	{
+	  gchar *utf8_buf = NULL;
+	  wchar_t buf[MAX_PATH+1];
+
+	  beenhere = TRUE;
+	  if (GetModuleFileNameW (GetModuleHandle (NULL),
+				  buf, G_N_ELEMENTS (buf)) > 0)
+	    utf8_buf = g_utf16_to_utf8 (buf, -1, NULL, NULL, NULL);
+
+	  if (utf8_buf)
+	    {
+	      g_prgname = g_path_get_basename (utf8_buf);
+	      g_free (utf8_buf);
+	    }
+	}
+    }
+#endif
+  retval = g_prgname;
+  G_UNLOCK (g_prgname);
+
+  return retval;
+}
+
+/**
+ * g_set_prgname:
+ * @prgname: the name of the program.
+ *
+ * Sets the name of the program. This name should <emphasis>not</emphasis> 
+ * be localized, contrast with g_set_application_name(). Note that for 
+ * thread-safety reasons this function can only be called once.
+ */
+void
+g_set_prgname (const gchar *prgname)
+{
+  G_LOCK (g_prgname);
+  g_free (g_prgname);
+  g_prgname = g_strdup (prgname);
+  G_UNLOCK (g_prgname);
+}
+
+G_LOCK_DEFINE_STATIC (g_application_name);
+static gchar *g_application_name = NULL;
+
+/**
+ * g_get_application_name:
+ * 
+ * Gets a human-readable name for the application, as set by
+ * g_set_application_name(). This name should be localized if
+ * possible, and is intended for display to the user.  Contrast with
+ * g_get_prgname(), which gets a non-localized name. If
+ * g_set_application_name() has not been called, returns the result of
+ * g_get_prgname() (which may be %NULL if g_set_prgname() has also not
+ * been called).
+ * 
+ * Return value: human-readable application name. may return %NULL
+ *
+ * Since: 2.2
+ **/
+G_CONST_RETURN gchar*
+g_get_application_name (void)
+{
+  gchar* retval;
+
+  G_LOCK (g_application_name);
+  retval = g_application_name;
+  G_UNLOCK (g_application_name);
+
+  if (retval == NULL)
+    return g_get_prgname ();
+  
+  return retval;
+}
+
+/**
+ * g_set_application_name:
+ * @application_name: localized name of the application
+ *
+ * Sets a human-readable name for the application. This name should be
+ * localized if possible, and is intended for display to the user.
+ * Contrast with g_set_prgname(), which sets a non-localized name.
+ * g_set_prgname() will be called automatically by gtk_init(),
+ * but g_set_application_name() will not.
+ *
+ * Note that for thread safety reasons, this function can only
+ * be called once.
+ *
+ * The application name will be used in contexts such as error messages,
+ * or when displaying an application's name in the task list.
+ * 
+ * Since: 2.2
+ **/
+void
+g_set_application_name (const gchar *application_name)
+{
+  gboolean already_set = FALSE;
+	
+  G_LOCK (g_application_name);
+  if (g_application_name)
+    already_set = TRUE;
+  else
+    g_application_name = g_strdup (application_name);
+  G_UNLOCK (g_application_name);
+
+  if (already_set)
+    g_warning ("g_set_application() name called multiple times");
+}
+
+/**
+ * g_get_user_data_dir:
+ * 
+ * Returns a base directory in which to access application data such
+ * as icons that is customized for a particular user.  
+ *
+ * On UNIX platforms this is determined using the mechanisms described in
+ * the <ulink url="http://www.freedesktop.org/Standards/basedir-spec">
+ * XDG Base Directory Specification</ulink>
+ * 
+ * Return value: a string owned by GLib that must not be modified 
+ *               or freed.
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar*
+g_get_user_data_dir (void)
+{
+  gchar *data_dir;  
+
+  G_LOCK (g_utils_global);
+
+  if (!g_user_data_dir)
+    {
+#ifdef G_OS_WIN32
+      data_dir = get_special_folder (CSIDL_PERSONAL);
+#else
+      data_dir = (gchar *) g_getenv ("XDG_DATA_HOME");
+
+      if (data_dir && data_dir[0])
+        data_dir = g_strdup (data_dir);
+#endif
+      if (!data_dir || !data_dir[0])
+	{
+	  g_get_any_init ();
+
+	  if (g_home_dir)
+	    data_dir = g_build_filename (g_home_dir, ".local", 
+					 "share", NULL);
+	  else
+	    data_dir = g_build_filename (g_tmp_dir, g_user_name, ".local", 
+					 "share", NULL);
+	}
+
+      g_user_data_dir = data_dir;
+    }
+  else
+    data_dir = g_user_data_dir;
+
+  G_UNLOCK (g_utils_global);
+
+  return data_dir;
+}
+
+static void
+g_init_user_config_dir (void)
+{
+  gchar *config_dir;
+
+  if (!g_user_config_dir)
+    {
+#ifdef G_OS_WIN32
+      config_dir = get_special_folder (CSIDL_APPDATA);
+#else
+      config_dir = (gchar *) g_getenv ("XDG_CONFIG_HOME");
+
+      if (config_dir && config_dir[0])
+	config_dir = g_strdup (config_dir);
+#endif
+      if (!config_dir || !config_dir[0])
+	{
+	  g_get_any_init ();
+
+	  if (g_home_dir)
+	    config_dir = g_build_filename (g_home_dir, ".config", NULL);
+	  else
+	    config_dir = g_build_filename (g_tmp_dir, g_user_name, ".config", NULL);
+	}
+
+      g_user_config_dir = config_dir;
+    }
+}
+
+/**
+ * g_get_user_config_dir:
+ * 
+ * Returns a base directory in which to store user-specific application 
+ * configuration information such as user preferences and settings. 
+ *
+ * On UNIX platforms this is determined using the mechanisms described in
+ * the <ulink url="http://www.freedesktop.org/Standards/basedir-spec">
+ * XDG Base Directory Specification</ulink>
+ * 
+ * Return value: a string owned by GLib that must not be modified 
+ *               or freed.
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar*
+g_get_user_config_dir (void)
+{
+  G_LOCK (g_utils_global);
+
+  g_init_user_config_dir ();
+
+  G_UNLOCK (g_utils_global);
+
+  return g_user_config_dir;
+}
+
+/**
+ * g_get_user_cache_dir:
+ * 
+ * Returns a base directory in which to store non-essential, cached
+ * data specific to particular user.
+ *
+ * On UNIX platforms this is determined using the mechanisms described in
+ * the <ulink url="http://www.freedesktop.org/Standards/basedir-spec">
+ * XDG Base Directory Specification</ulink>
+ * 
+ * Return value: a string owned by GLib that must not be modified 
+ *               or freed.
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar*
+g_get_user_cache_dir (void)
+{
+  gchar *cache_dir;  
+
+  G_LOCK (g_utils_global);
+
+  if (!g_user_cache_dir)
+    {
+#ifdef G_OS_WIN32
+      cache_dir = get_special_folder (CSIDL_INTERNET_CACHE); /* XXX correct? */
+#else
+      cache_dir = (gchar *) g_getenv ("XDG_CACHE_HOME");
+
+      if (cache_dir && cache_dir[0])
+          cache_dir = g_strdup (cache_dir);
+#endif
+      if (!cache_dir || !cache_dir[0])
+	{
+	  g_get_any_init ();
+	
+	  if (g_home_dir)
+	    cache_dir = g_build_filename (g_home_dir, ".cache", NULL);
+	  else
+	    cache_dir = g_build_filename (g_tmp_dir, g_user_name, ".cache", NULL);
+	}
+      g_user_cache_dir = cache_dir;
+    }
+  else
+    cache_dir = g_user_cache_dir;
+
+  G_UNLOCK (g_utils_global);
+
+  return cache_dir;
+}
+
+#ifdef HAVE_CARBON
+
+static gchar *
+find_folder (OSType type)
+{
+  gchar *filename = NULL;
+  FSRef  found;
+
+  if (FSFindFolder (kUserDomain, type, kDontCreateFolder, &found) == noErr)
+    {
+      CFURLRef url = CFURLCreateFromFSRef (kCFAllocatorSystemDefault, &found);
+
+      if (url)
+	{
+	  CFStringRef path = CFURLCopyFileSystemPath (url, kCFURLPOSIXPathStyle);
+
+	  if (path)
+	    {
+	      filename = g_strdup (CFStringGetCStringPtr (path, kCFStringEncodingUTF8));
+
+	      if (! filename)
+		{
+		  filename = g_new0 (gchar, CFStringGetLength (path) * 3 + 1);
+
+		  CFStringGetCString (path, filename,
+				      CFStringGetLength (path) * 3 + 1,
+				      kCFStringEncodingUTF8);
+		}
+
+	      CFRelease (path);
+	    }
+
+	  CFRelease (url);
+	}
+    }
+
+  return filename;
+}
+
+static void
+load_user_special_dirs (void)
+{
+  g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = find_folder (kDesktopFolderType);
+  g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = find_folder (kDocumentsFolderType);
+  g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = find_folder (kDesktopFolderType); /* XXX correct ? */
+  g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = find_folder (kMusicDocumentsFolderType);
+  g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = find_folder (kPictureDocumentsFolderType);
+  g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = NULL;
+  g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = NULL;
+  g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = find_folder (kMovieDocumentsFolderType);
+}
+
+#endif /* HAVE_CARBON */
+
+#if defined(G_OS_WIN32)
+static void
+load_user_special_dirs (void)
+{
+  typedef HRESULT (WINAPI *t_SHGetKnownFolderPath) (const GUID *rfid,
+						    DWORD dwFlags,
+						    HANDLE hToken,
+						    PWSTR *ppszPath);
+  t_SHGetKnownFolderPath p_SHGetKnownFolderPath;
+  static const GUID FOLDERID_Downloads =
+    { 0x374de290, 0x123f, 0x4565, { 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b } };
+  static const GUID FOLDERID_Public =
+    { 0xDFDF76A2, 0xC82A, 0x4D63, { 0x90, 0x6A, 0x56, 0x44, 0xAC, 0x45, 0x73, 0x85 } };
+  wchar_t *wcp;
+
+  p_SHGetKnownFolderPath = (t_SHGetKnownFolderPath) GetProcAddress (LoadLibrary ("shell32.dll"),
+								    "SHGetKnownFolderPath");
+
+  g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = get_special_folder (CSIDL_DESKTOPDIRECTORY);
+  g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = get_special_folder (CSIDL_PERSONAL);
+
+  if (p_SHGetKnownFolderPath == NULL)
+    {
+      g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = get_special_folder (CSIDL_DESKTOPDIRECTORY);
+    }
+  else
+    {
+      wcp = NULL;
+      (*p_SHGetKnownFolderPath) (&FOLDERID_Downloads, 0, NULL, &wcp);
+      g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = g_utf16_to_utf8 (wcp, -1, NULL, NULL, NULL);
+      if (g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] == NULL)
+	g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = get_special_folder (CSIDL_DESKTOPDIRECTORY);
+      CoTaskMemFree (wcp);
+    }
+
+  g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = get_special_folder (CSIDL_MYMUSIC);
+  g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = get_special_folder (CSIDL_MYPICTURES);
+
+  if (p_SHGetKnownFolderPath == NULL)
+    {
+      /* XXX */
+      g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = get_special_folder (CSIDL_COMMON_DOCUMENTS);
+    }
+  else
+    {
+      wcp = NULL;
+      (*p_SHGetKnownFolderPath) (&FOLDERID_Public, 0, NULL, &wcp);
+      g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = g_utf16_to_utf8 (wcp, -1, NULL, NULL, NULL);
+      if (g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] == NULL)
+	g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = get_special_folder (CSIDL_COMMON_DOCUMENTS);
+      CoTaskMemFree (wcp);
+    }
+  
+  g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = get_special_folder (CSIDL_TEMPLATES);
+  g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = get_special_folder (CSIDL_MYVIDEO);
+}
+#endif /* G_OS_WIN32 */
+
+static void g_init_user_config_dir (void);
+
+#if defined(G_OS_UNIX) && !defined(HAVE_CARBON)
+
+/* adapted from xdg-user-dir-lookup.c
+ *
+ * Copyright (C) 2007 Red Hat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions: 
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software. 
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+static void
+load_user_special_dirs (void)
+{
+  gchar *config_file;
+  gchar *data;
+  gchar **lines;
+  gint n_lines, i;
+  
+  g_init_user_config_dir ();
+  config_file = g_build_filename (g_user_config_dir,
+                                  "user-dirs.dirs",
+                                  NULL);
+  
+  if (!g_file_get_contents (config_file, &data, NULL, NULL))
+    {
+      g_free (config_file);
+      return;
+    }
+
+  lines = g_strsplit (data, "\n", -1);
+  n_lines = g_strv_length (lines);
+  g_free (data);
+  
+  for (i = 0; i < n_lines; i++)
+    {
+      gchar *buffer = lines[i];
+      gchar *d, *p;
+      gint len;
+      gboolean is_relative = FALSE;
+      GUserDirectory directory;
+
+      /* Remove newline at end */
+      len = strlen (buffer);
+      if (len > 0 && buffer[len - 1] == '\n')
+	buffer[len - 1] = 0;
+      
+      p = buffer;
+      while (*p == ' ' || *p == '\t')
+	p++;
+      
+      if (strncmp (p, "XDG_DESKTOP_DIR", strlen ("XDG_DESKTOP_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_DESKTOP;
+          p += strlen ("XDG_DESKTOP_DIR");
+        }
+      else if (strncmp (p, "XDG_DOCUMENTS_DIR", strlen ("XDG_DOCUMENTS_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_DOCUMENTS;
+          p += strlen ("XDG_DOCUMENTS_DIR");
+        }
+      else if (strncmp (p, "XDG_DOWNLOAD_DIR", strlen ("XDG_DOWNLOAD_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_DOWNLOAD;
+          p += strlen ("XDG_DOWNLOAD_DIR");
+        }
+      else if (strncmp (p, "XDG_MUSIC_DIR", strlen ("XDG_MUSIC_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_MUSIC;
+          p += strlen ("XDG_MUSIC_DIR");
+        }
+      else if (strncmp (p, "XDG_PICTURES_DIR", strlen ("XDG_PICTURES_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_PICTURES;
+          p += strlen ("XDG_PICTURES_DIR");
+        }
+      else if (strncmp (p, "XDG_PUBLICSHARE_DIR", strlen ("XDG_PUBLICSHARE_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_PUBLIC_SHARE;
+          p += strlen ("XDG_PUBLICSHARE_DIR");
+        }
+      else if (strncmp (p, "XDG_TEMPLATES_DIR", strlen ("XDG_TEMPLATES_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_TEMPLATES;
+          p += strlen ("XDG_TEMPLATES_DIR");
+        }
+      else if (strncmp (p, "XDG_VIDEOS_DIR", strlen ("XDG_VIDEOS_DIR")) == 0)
+        {
+          directory = G_USER_DIRECTORY_VIDEOS;
+          p += strlen ("XDG_VIDEOS_DIR");
+        }
+      else
+	continue;
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+
+      if (*p != '=')
+	continue;
+      p++;
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+
+      if (*p != '"')
+	continue;
+      p++;
+
+      if (strncmp (p, "$HOME", 5) == 0)
+	{
+	  p += 5;
+	  is_relative = TRUE;
+	}
+      else if (*p != '/')
+	continue;
+
+      d = strrchr (p, '"');
+      if (!d)
+        continue;
+      *d = 0;
+
+      d = p;
+      
+      /* remove trailing slashes */
+      len = strlen (d);
+      if (d[len - 1] == '/')
+        d[len - 1] = 0;
+      
+      if (is_relative)
+        {
+          g_get_any_init ();
+          g_user_special_dirs[directory] = g_build_filename (g_home_dir, d, NULL);
+        }
+      else
+	g_user_special_dirs[directory] = g_strdup (d);
+    }
+
+  g_strfreev (lines);
+  g_free (config_file);
+}
+
+#endif /* G_OS_UNIX && !HAVE_CARBON */
+
+/**
+ * g_get_user_special_dir:
+ * @directory: the logical id of special directory
+ *
+ * Returns the full path of a special directory using its logical id.
+ *
+ * On Unix this is done using the XDG special user directories.
+ * For compatibility with existing practise, %G_USER_DIRECTORY_DESKTOP
+ * falls back to <filename>$HOME/Desktop</filename> when XDG special
+ * user directories have not been set up. 
+ *
+ * Depending on the platform, the user might be able to change the path
+ * of the special directory without requiring the session to restart; GLib
+ * will not reflect any change once the special directories are loaded.
+ *
+ * Return value: the path to the specified special directory, or %NULL
+ *   if the logical id was not found. The returned string is owned by
+ *   GLib and should not be modified or freed.
+ *
+ * Since: 2.14
+ */
+G_CONST_RETURN gchar *
+g_get_user_special_dir (GUserDirectory directory)
+{
+  g_return_val_if_fail (directory >= G_USER_DIRECTORY_DESKTOP &&
+                        directory < G_USER_N_DIRECTORIES, NULL);
+
+  G_LOCK (g_utils_global);
+
+  if (G_UNLIKELY (g_user_special_dirs == NULL))
+    {
+      g_user_special_dirs = g_new0 (gchar *, G_USER_N_DIRECTORIES);
+
+      load_user_special_dirs ();
+
+      /* Special-case desktop for historical compatibility */
+      if (g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] == NULL)
+        {
+          g_get_any_init ();
+
+          g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] =
+            g_build_filename (g_home_dir, "Desktop", NULL);
+        }
+    }
+
+  G_UNLOCK (g_utils_global);
+
+  return g_user_special_dirs[directory];
+}
+
+#ifdef G_OS_WIN32
+
+#undef g_get_system_data_dirs
+
+static HMODULE
+get_module_for_address (gconstpointer address)
+{
+  /* Holds the g_utils_global lock */
+
+  static gboolean beenhere = FALSE;
+  typedef BOOL (WINAPI *t_GetModuleHandleExA) (DWORD, LPCTSTR, HMODULE *);
+  static t_GetModuleHandleExA p_GetModuleHandleExA = NULL;
+  HMODULE hmodule = NULL;
+
+  if (!address)
+    return NULL;
+
+  if (!beenhere)
+    {
+      p_GetModuleHandleExA =
+	(t_GetModuleHandleExA) GetProcAddress (LoadLibrary ("kernel32.dll"),
+					       "GetModuleHandleExA");
+      beenhere = TRUE;
+    }
+
+  if (p_GetModuleHandleExA == NULL ||
+      !(*p_GetModuleHandleExA) (GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT |
+				GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
+				address, &hmodule))
+    {
+      MEMORY_BASIC_INFORMATION mbi;
+      VirtualQuery (address, &mbi, sizeof (mbi));
+      hmodule = (HMODULE) mbi.AllocationBase;
+    }
+
+  return hmodule;
+}
+
+static gchar *
+get_module_share_dir (gconstpointer address)
+{
+  HMODULE hmodule;
+  gchar *filename;
+  gchar *retval;
+
+  hmodule = get_module_for_address (address);
+  if (hmodule == NULL)
+    return NULL;
+
+  filename = g_win32_get_package_installation_directory_of_module (hmodule);
+  retval = g_build_filename (filename, "share", NULL);
+  g_free (filename);
+
+  return retval;
+}
+
+G_CONST_RETURN gchar * G_CONST_RETURN *
+g_win32_get_system_data_dirs_for_module (void (*address_of_function)())
+{
+  GArray *data_dirs;
+  HMODULE hmodule;
+  static GHashTable *per_module_data_dirs = NULL;
+  gchar **retval;
+  gchar *p;
+  gchar *exe_root;
+      
+  if (address_of_function)
+    {
+      G_LOCK (g_utils_global);
+      hmodule = get_module_for_address (address_of_function);
+      if (hmodule != NULL)
+	{
+	  if (per_module_data_dirs == NULL)
+	    per_module_data_dirs = g_hash_table_new (NULL, NULL);
+	  else
+	    {
+	      retval = g_hash_table_lookup (per_module_data_dirs, hmodule);
+	      
+	      if (retval != NULL)
+		{
+		  G_UNLOCK (g_utils_global);
+		  return (G_CONST_RETURN gchar * G_CONST_RETURN *) retval;
+		}
+	    }
+	}
+    }
+
+  data_dirs = g_array_new (TRUE, TRUE, sizeof (char *));
+
+  /* Documents and Settings\All Users\Application Data */
+  p = get_special_folder (CSIDL_COMMON_APPDATA);
+  if (p)
+    g_array_append_val (data_dirs, p);
+  
+  /* Documents and Settings\All Users\Documents */
+  p = get_special_folder (CSIDL_COMMON_DOCUMENTS);
+  if (p)
+    g_array_append_val (data_dirs, p);
+	
+  /* Using the above subfolders of Documents and Settings perhaps
+   * makes sense from a Windows perspective.
+   *
+   * But looking at the actual use cases of this function in GTK+
+   * and GNOME software, what we really want is the "share"
+   * subdirectory of the installation directory for the package
+   * our caller is a part of.
+   *
+   * The address_of_function parameter, if non-NULL, points to a
+   * function in the calling module. Use that to determine that
+   * module's installation folder, and use its "share" subfolder.
+   *
+   * Additionally, also use the "share" subfolder of the installation
+   * locations of GLib and the .exe file being run.
+   *
+   * To guard against none of the above being what is really wanted,
+   * callers of this function should have Win32-specific code to look
+   * up their installation folder themselves, and handle a subfolder
+   * "share" of it in the same way as the folders returned from this
+   * function.
+   */
+
+  p = get_module_share_dir (address_of_function);
+  if (p)
+    g_array_append_val (data_dirs, p);
+    
+  if (glib_dll != NULL)
+    {
+      gchar *glib_root = g_win32_get_package_installation_directory_of_module (glib_dll);
+      p = g_build_filename (glib_root, "share", NULL);
+      if (p)
+	g_array_append_val (data_dirs, p);
+      g_free (glib_root);
+    }
+  
+  exe_root = g_win32_get_package_installation_directory_of_module (NULL);
+  p = g_build_filename (exe_root, "share", NULL);
+  if (p)
+    g_array_append_val (data_dirs, p);
+  g_free (exe_root);
+
+  retval = (gchar **) g_array_free (data_dirs, FALSE);
+
+  if (address_of_function)
+    {
+      if (hmodule != NULL)
+	g_hash_table_insert (per_module_data_dirs, hmodule, retval);
+      G_UNLOCK (g_utils_global);
+    }
+
+  return (G_CONST_RETURN gchar * G_CONST_RETURN *) retval;
+}
+
+#endif
+
+/**
+ * g_get_system_data_dirs:
+ * 
+ * Returns an ordered list of base directories in which to access 
+ * system-wide application data.
+ *
+ * On UNIX platforms this is determined using the mechanisms described in
+ * the <ulink url="http://www.freedesktop.org/Standards/basedir-spec">
+ * XDG Base Directory Specification</ulink>
+ * 
+ * On Windows the first elements in the list are the Application Data
+ * and Documents folders for All Users. (These can be determined only
+ * on Windows 2000 or later and are not present in the list on other
+ * Windows versions.) See documentation for CSIDL_COMMON_APPDATA and
+ * CSIDL_COMMON_DOCUMENTS.
+ *
+ * Then follows the "share" subfolder in the installation folder for
+ * the package containing the DLL that calls this function, if it can
+ * be determined.
+ * 
+ * Finally the list contains the "share" subfolder in the installation
+ * folder for GLib, and in the installation folder for the package the
+ * application's .exe file belongs to.
+ *
+ * The installation folders above are determined by looking up the
+ * folder where the module (DLL or EXE) in question is located. If the
+ * folder's name is "bin", its parent is used, otherwise the folder
+ * itself.
+ *
+ * Note that on Windows the returned list can vary depending on where
+ * this function is called.
+ *
+ * Return value: a %NULL-terminated array of strings owned by GLib that must 
+ *               not be modified or freed.
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar * G_CONST_RETURN * 
+g_get_system_data_dirs (void)
+{
+  gchar **data_dir_vector;
+
+  G_LOCK (g_utils_global);
+
+  if (!g_system_data_dirs)
+    {
+#ifdef G_OS_WIN32
+      data_dir_vector = (gchar **) g_win32_get_system_data_dirs_for_module (NULL);
+#else
+      gchar *data_dirs = (gchar *) g_getenv ("XDG_DATA_DIRS");
+
+      if (!data_dirs || !data_dirs[0])
+          data_dirs = "/usr/local/share/:/usr/share/";
+
+      data_dir_vector = g_strsplit (data_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+#endif
+
+      g_system_data_dirs = data_dir_vector;
+    }
+  else
+    data_dir_vector = g_system_data_dirs;
+
+  G_UNLOCK (g_utils_global);
+
+  return (G_CONST_RETURN gchar * G_CONST_RETURN *) data_dir_vector;
+}
+
+/**
+ * g_get_system_config_dirs:
+ * 
+ * Returns an ordered list of base directories in which to access 
+ * system-wide configuration information.
+ *
+ * On UNIX platforms this is determined using the mechanisms described in
+ * the <ulink url="http://www.freedesktop.org/Standards/basedir-spec">
+ * XDG Base Directory Specification</ulink>
+ * 
+ * Return value: a %NULL-terminated array of strings owned by GLib that must 
+ *               not be modified or freed.
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar * G_CONST_RETURN *
+g_get_system_config_dirs (void)
+{
+  gchar *conf_dirs, **conf_dir_vector;
+
+  G_LOCK (g_utils_global);
+
+  if (!g_system_config_dirs)
+    {
+#ifdef G_OS_WIN32
+      conf_dirs = get_special_folder (CSIDL_COMMON_APPDATA);
+      if (conf_dirs)
+	{
+	  conf_dir_vector = g_strsplit (conf_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+	  g_free (conf_dirs);
+	}
+      else
+	{
+	  /* Return empty list */
+	  conf_dir_vector = g_strsplit ("", G_SEARCHPATH_SEPARATOR_S, 0);
+	}
+#else
+      conf_dirs = (gchar *) g_getenv ("XDG_CONFIG_DIRS");
+
+      if (!conf_dirs || !conf_dirs[0])
+          conf_dirs = "/etc/xdg";
+
+      conf_dir_vector = g_strsplit (conf_dirs, G_SEARCHPATH_SEPARATOR_S, 0);
+#endif
+
+      g_system_config_dirs = conf_dir_vector;
+    }
+  else
+    conf_dir_vector = g_system_config_dirs;
+  G_UNLOCK (g_utils_global);
+
+  return (G_CONST_RETURN gchar * G_CONST_RETURN *) conf_dir_vector;
+}
+
+#ifndef G_OS_WIN32
+
+static GHashTable *alias_table = NULL;
+
+/* read an alias file for the locales */
+static void
+read_aliases (gchar *file)
+{
+  FILE *fp;
+  char buf[256];
+  
+  if (!alias_table)
+    alias_table = g_hash_table_new (g_str_hash, g_str_equal);
+  fp = fopen (file,"r");
+  if (!fp)
+    return;
+  while (fgets (buf, 256, fp))
+    {
+      char *p, *q;
+
+      g_strstrip (buf);
+
+      /* Line is a comment */
+      if ((buf[0] == '#') || (buf[0] == '\0'))
+	continue;
+
+      /* Reads first column */
+      for (p = buf, q = NULL; *p; p++) {
+	if ((*p == '\t') || (*p == ' ') || (*p == ':')) {
+	  *p = '\0';
+	  q = p+1;
+	  while ((*q == '\t') || (*q == ' ')) {
+	    q++;
+	  }
+	  break;
+	}
+      }
+      /* The line only had one column */
+      if (!q || *q == '\0')
+	continue;
+      
+      /* Read second column */
+      for (p = q; *p; p++) {
+	if ((*p == '\t') || (*p == ' ')) {
+	  *p = '\0';
+	  break;
+	}
+      }
+
+      /* Add to alias table if necessary */
+      if (!g_hash_table_lookup (alias_table, buf)) {
+	g_hash_table_insert (alias_table, g_strdup (buf), g_strdup (q));
+      }
+    }
+  fclose (fp);
+}
+
+#endif
+
+static char *
+unalias_lang (char *lang)
+{
+#ifndef G_OS_WIN32
+  char *p;
+  int i;
+
+  if (!alias_table)
+    read_aliases ("/usr/share/locale/locale.alias");
+
+  i = 0;
+  while ((p = g_hash_table_lookup (alias_table, lang)) && (strcmp (p, lang) != 0))
+    {
+      lang = p;
+      if (i++ == 30)
+        {
+          static gboolean said_before = FALSE;
+	  if (!said_before)
+            g_warning ("Too many alias levels for a locale, "
+		       "may indicate a loop");
+	  said_before = TRUE;
+	  return lang;
+	}
+    }
+#endif
+  return lang;
+}
+
+/* Mask for components of locale spec. The ordering here is from
+ * least significant to most significant
+ */
+enum
+{
+  COMPONENT_CODESET =   1 << 0,
+  COMPONENT_TERRITORY = 1 << 1,
+  COMPONENT_MODIFIER =  1 << 2
+};
+
+/* Break an X/Open style locale specification into components
+ */
+static guint
+explode_locale (const gchar *locale,
+		gchar      **language, 
+		gchar      **territory, 
+		gchar      **codeset, 
+		gchar      **modifier)
+{
+  const gchar *uscore_pos;
+  const gchar *at_pos;
+  const gchar *dot_pos;
+
+  guint mask = 0;
+
+  uscore_pos = strchr (locale, '_');
+  dot_pos = strchr (uscore_pos ? uscore_pos : locale, '.');
+  at_pos = strchr (dot_pos ? dot_pos : (uscore_pos ? uscore_pos : locale), '@');
+
+  if (at_pos)
+    {
+      mask |= COMPONENT_MODIFIER;
+      *modifier = g_strdup (at_pos);
+    }
+  else
+    at_pos = locale + strlen (locale);
+
+  if (dot_pos)
+    {
+      mask |= COMPONENT_CODESET;
+      *codeset = g_strndup (dot_pos, at_pos - dot_pos);
+    }
+  else
+    dot_pos = at_pos;
+
+  if (uscore_pos)
+    {
+      mask |= COMPONENT_TERRITORY;
+      *territory = g_strndup (uscore_pos, dot_pos - uscore_pos);
+    }
+  else
+    uscore_pos = dot_pos;
+
+  *language = g_strndup (locale, uscore_pos - locale);
+
+  return mask;
+}
+
+/*
+ * Compute all interesting variants for a given locale name -
+ * by stripping off different components of the value.
+ *
+ * For simplicity, we assume that the locale is in
+ * X/Open format: language[_territory][.codeset][@modifier]
+ *
+ * TODO: Extend this to handle the CEN format (see the GNUlibc docs)
+ *       as well. We could just copy the code from glibc wholesale
+ *       but it is big, ugly, and complicated, so I'm reluctant
+ *       to do so when this should handle 99% of the time...
+ */
+GSList *
+_g_compute_locale_variants (const gchar *locale)
+{
+  GSList *retval = NULL;
+
+  gchar *language = NULL;
+  gchar *territory = NULL;
+  gchar *codeset = NULL;
+  gchar *modifier = NULL;
+
+  guint mask;
+  guint i;
+
+  g_return_val_if_fail (locale != NULL, NULL);
+
+  mask = explode_locale (locale, &language, &territory, &codeset, &modifier);
+
+  /* Iterate through all possible combinations, from least attractive
+   * to most attractive.
+   */
+  for (i = 0; i <= mask; i++)
+    if ((i & ~mask) == 0)
+      {
+	gchar *val = g_strconcat (language,
+				  (i & COMPONENT_TERRITORY) ? territory : "",
+				  (i & COMPONENT_CODESET) ? codeset : "",
+				  (i & COMPONENT_MODIFIER) ? modifier : "",
+				  NULL);
+	retval = g_slist_prepend (retval, val);
+      }
+
+  g_free (language);
+  if (mask & COMPONENT_CODESET)
+    g_free (codeset);
+  if (mask & COMPONENT_TERRITORY)
+    g_free (territory);
+  if (mask & COMPONENT_MODIFIER)
+    g_free (modifier);
+
+  return retval;
+}
+
+/* The following is (partly) taken from the gettext package.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.  */
+
+static const gchar *
+guess_category_value (const gchar *category_name)
+{
+  const gchar *retval;
+
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  This is a GNU extension.  */
+  retval = g_getenv ("LANGUAGE");
+  if ((retval != NULL) && (retval[0] != '\0'))
+    return retval;
+
+  /* `LANGUAGE' is not set.  So we have to proceed with the POSIX
+     methods of looking to `LC_ALL', `LC_xxx', and `LANG'.  On some
+     systems this can be done by the `setlocale' function itself.  */
+
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = g_getenv ("LC_ALL");  
+  if ((retval != NULL) && (retval[0] != '\0'))
+    return retval;
+
+  /* Next comes the name of the desired category.  */
+  retval = g_getenv (category_name);
+  if ((retval != NULL) && (retval[0] != '\0'))
+    return retval;
+
+  /* Last possibility is the LANG environment variable.  */
+  retval = g_getenv ("LANG");
+  if ((retval != NULL) && (retval[0] != '\0'))
+    return retval;
+
+#ifdef G_PLATFORM_WIN32
+  /* g_win32_getlocale() first checks for LC_ALL, LC_MESSAGES and
+   * LANG, which we already did above. Oh well. The main point of
+   * calling g_win32_getlocale() is to get the thread's locale as used
+   * by Windows and the Microsoft C runtime (in the "English_United
+   * States" format) translated into the Unixish format.
+   */
+  retval = g_win32_getlocale ();
+  if ((retval != NULL) && (retval[0] != '\0'))
+    return retval;
+#endif  
+
+  return NULL;
+}
+
+typedef struct _GLanguageNamesCache GLanguageNamesCache;
+
+struct _GLanguageNamesCache {
+  gchar *languages;
+  gchar **language_names;
+};
+
+static void
+language_names_cache_free (gpointer data)
+{
+  GLanguageNamesCache *cache = data;
+  g_free (cache->languages);
+  g_strfreev (cache->language_names);
+  g_free (cache);
+}
+
+/**
+ * g_get_language_names:
+ * 
+ * Computes a list of applicable locale names, which can be used to 
+ * e.g. construct locale-dependent filenames or search paths. The returned 
+ * list is sorted from most desirable to least desirable and always contains 
+ * the default locale "C".
+ *
+ * For example, if LANGUAGE=de:en_US, then the returned list is
+ * "de", "en_US", "en", "C".
+ *
+ * This function consults the environment variables <envar>LANGUAGE</envar>, 
+ * <envar>LC_ALL</envar>, <envar>LC_MESSAGES</envar> and <envar>LANG</envar> 
+ * to find the list of locales specified by the user.
+ * 
+ * Return value: a %NULL-terminated array of strings owned by GLib 
+ *    that must not be modified or freed.
+ *
+ * Since: 2.6
+ **/
+G_CONST_RETURN gchar * G_CONST_RETURN * 
+g_get_language_names (void)
+{
+  static GStaticPrivate cache_private = G_STATIC_PRIVATE_INIT;
+  GLanguageNamesCache *cache = g_static_private_get (&cache_private);
+  const gchar *value;
+
+  if (!cache)
+    {
+      cache = g_new0 (GLanguageNamesCache, 1);
+      g_static_private_set (&cache_private, cache, language_names_cache_free);
+    }
+
+  value = guess_category_value ("LC_MESSAGES");
+  if (!value)
+    value = "C";
+
+  if (!(cache->languages && strcmp (cache->languages, value) == 0))
+    {
+      gchar **languages;
+      gchar **alist, **a;
+      GSList *list, *l;
+      gint i;
+
+      g_free (cache->languages);
+      g_strfreev (cache->language_names);
+      cache->languages = g_strdup (value);
+
+      alist = g_strsplit (value, ":", 0);
+      list = NULL;
+      for (a = alist; *a; a++)
+	{
+	  gchar *b = unalias_lang (*a);
+	  list = g_slist_concat (list, _g_compute_locale_variants (b));
+	}
+      g_strfreev (alist);
+      list = g_slist_append (list, g_strdup ("C"));
+
+      cache->language_names = languages = g_new (gchar *, g_slist_length (list) + 1);
+      for (l = list, i = 0; l; l = l->next, i++)
+	languages[i] = l->data;
+      languages[i] = NULL;
+
+      g_slist_free (list);
+    }
+
+  return (G_CONST_RETURN gchar * G_CONST_RETURN *) cache->language_names;
+}
+
+/**
+ * g_direct_hash:
+ * @v: a #gpointer key
+ *
+ * Converts a gpointer to a hash value.
+ * It can be passed to g_hash_table_new() as the @hash_func parameter, 
+ * when using pointers as keys in a #GHashTable.
+ *
+ * Returns: a hash value corresponding to the key.
+ */
+guint
+g_direct_hash (gconstpointer v)
+{
+  return GPOINTER_TO_UINT (v);
+}
+
+/**
+ * g_direct_equal:
+ * @v1: a key.
+ * @v2: a key to compare with @v1.
+ *
+ * Compares two #gpointer arguments and returns %TRUE if they are equal.
+ * It can be passed to g_hash_table_new() as the @key_equal_func
+ * parameter, when using pointers as keys in a #GHashTable.
+ * 
+ * Returns: %TRUE if the two keys match.
+ */
+gboolean
+g_direct_equal (gconstpointer v1,
+		gconstpointer v2)
+{
+  return v1 == v2;
+}
+
+/**
+ * g_int_equal:
+ * @v1: a pointer to a #gint key.
+ * @v2: a pointer to a #gint key to compare with @v1.
+ *
+ * Compares the two #gint values being pointed to and returns 
+ * %TRUE if they are equal.
+ * It can be passed to g_hash_table_new() as the @key_equal_func
+ * parameter, when using pointers to integers as keys in a #GHashTable.
+ * 
+ * Returns: %TRUE if the two keys match.
+ */
+gboolean
+g_int_equal (gconstpointer v1,
+	     gconstpointer v2)
+{
+  return *((const gint*) v1) == *((const gint*) v2);
+}
+
+/**
+ * g_int_hash:
+ * @v: a pointer to a #gint key
+ *
+ * Converts a pointer to a #gint to a hash value.
+ * It can be passed to g_hash_table_new() as the @hash_func parameter, 
+ * when using pointers to integers values as keys in a #GHashTable.
+ *
+ * Returns: a hash value corresponding to the key.
+ */
+guint
+g_int_hash (gconstpointer v)
+{
+  return *(const gint*) v;
+}
+
+/**
+ * g_nullify_pointer:
+ * @nullify_location: the memory address of the pointer.
+ * 
+ * Set the pointer at the specified location to %NULL.
+ **/
+void
+g_nullify_pointer (gpointer *nullify_location)
+{
+  g_return_if_fail (nullify_location != NULL);
+
+  *nullify_location = NULL;
+}
+
+/**
+ * g_get_codeset:
+ * 
+ * Get the codeset for the current locale.
+ * 
+ * Return value: a newly allocated string containing the name
+ * of the codeset. This string must be freed with g_free().
+ **/
+gchar *
+g_get_codeset (void)
+{
+  const gchar *charset;
+
+  g_get_charset (&charset);
+
+  return g_strdup (charset);
+}
+
+/* This is called from g_thread_init(). It's used to
+ * initialize some static data in a threadsafe way.
+ */
+void
+_g_utils_thread_init (void)
+{
+  g_get_language_names ();
+}
+
+#ifdef G_OS_WIN32
+
+/**
+ * _glib_get_locale_dir:
+ *
+ * Return the path to the share\locale or lib\locale subfolder of the
+ * GLib installation folder. The path is in the system codepage. We
+ * have to use system codepage as bindtextdomain() doesn't have a
+ * UTF-8 interface.
+ */
+static gchar *
+_glib_get_locale_dir (void)
+{
+  gchar *install_dir = NULL, *locale_dir;
+  gchar *retval = NULL;
+
+  if (glib_dll != NULL)
+    install_dir = g_win32_get_package_installation_directory_of_module (glib_dll);
+
+  if (install_dir)
+    {
+      /*
+       * Append "/share/locale" or "/lib/locale" depending on whether
+       * autoconfigury detected GNU gettext or not.
+       */
+      const char *p = GLIB_LOCALE_DIR + strlen (GLIB_LOCALE_DIR);
+      while (*--p != '/')
+	;
+      while (*--p != '/')
+	;
+
+      locale_dir = g_build_filename (install_dir, p, NULL);
+
+      retval = g_win32_locale_filename_from_utf8 (locale_dir);
+
+      g_free (install_dir);
+      g_free (locale_dir);
+    }
+
+  if (retval)
+    return retval;
+  else
+    return g_strdup ("");
+}
+
+#undef GLIB_LOCALE_DIR
+
+#endif /* G_OS_WIN32 */
+
+/**
+ * glib_gettext:
+ * @str: The string to be translated
+ *
+ * Returns the translated string from the glib translations.
+ * This is an internal function and should only be used by
+ * the internals of glib (such as libgio).
+ *
+ * Returns: the transation of @str to the current locale
+ */
+G_CONST_RETURN gchar *
+glib_gettext (const gchar *str)
+{
+  static gboolean _glib_gettext_initialized = FALSE;
+
+  if (!_glib_gettext_initialized)
+    {
+#ifdef G_OS_WIN32
+      gchar *tmp = _glib_get_locale_dir ();
+      bindtextdomain (GETTEXT_PACKAGE, tmp);
+      g_free (tmp);
+#else
+      bindtextdomain (GETTEXT_PACKAGE, GLIB_LOCALE_DIR);
+#endif
+#    ifdef HAVE_BIND_TEXTDOMAIN_CODESET
+      bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#    endif
+      _glib_gettext_initialized = TRUE;
+    }
+  
+  return g_dgettext (GETTEXT_PACKAGE, str);
+}
+
+#if defined (G_OS_WIN32) && !defined (_WIN64)
+
+/* Binary compatibility versions. Not for newly compiled code. */
+
+#undef g_find_program_in_path
+
+gchar*
+g_find_program_in_path (const gchar *program)
+{
+  gchar *utf8_program = g_locale_to_utf8 (program, -1, NULL, NULL, NULL);
+  gchar *utf8_retval = g_find_program_in_path_utf8 (utf8_program);
+  gchar *retval;
+
+  g_free (utf8_program);
+  if (utf8_retval == NULL)
+    return NULL;
+  retval = g_locale_from_utf8 (utf8_retval, -1, NULL, NULL, NULL);
+  g_free (utf8_retval);
+
+  return retval;
+}
+
+#undef g_get_current_dir
+
+gchar*
+g_get_current_dir (void)
+{
+  gchar *utf8_dir = g_get_current_dir_utf8 ();
+  gchar *dir = g_locale_from_utf8 (utf8_dir, -1, NULL, NULL, NULL);
+  g_free (utf8_dir);
+  return dir;
+}
+
+#undef g_getenv
+
+G_CONST_RETURN gchar*
+g_getenv (const gchar *variable)
+{
+  gchar *utf8_variable = g_locale_to_utf8 (variable, -1, NULL, NULL, NULL);
+  const gchar *utf8_value = g_getenv_utf8 (utf8_variable);
+  gchar *value;
+  GQuark quark;
+
+  g_free (utf8_variable);
+  if (!utf8_value)
+    return NULL;
+  value = g_locale_from_utf8 (utf8_value, -1, NULL, NULL, NULL);
+  quark = g_quark_from_string (value);
+  g_free (value);
+
+  return g_quark_to_string (quark);
+}
+
+#undef g_setenv
+
+gboolean
+g_setenv (const gchar *variable, 
+	  const gchar *value, 
+	  gboolean     overwrite)
+{
+  gchar *utf8_variable = g_locale_to_utf8 (variable, -1, NULL, NULL, NULL);
+  gchar *utf8_value = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
+  gboolean retval = g_setenv_utf8 (utf8_variable, utf8_value, overwrite);
+
+  g_free (utf8_variable);
+  g_free (utf8_value);
+
+  return retval;
+}
+
+#undef g_unsetenv
+
+void
+g_unsetenv (const gchar *variable)
+{
+  gchar *utf8_variable = g_locale_to_utf8 (variable, -1, NULL, NULL, NULL);
+
+  g_unsetenv_utf8 (utf8_variable);
+
+  g_free (utf8_variable);
+}
+
+#undef g_get_user_name
+
+G_CONST_RETURN gchar*
+g_get_user_name (void)
+{
+  g_get_any_init_locked ();
+  return g_user_name_cp;
+}
+
+#undef g_get_real_name
+
+G_CONST_RETURN gchar*
+g_get_real_name (void)
+{
+  g_get_any_init_locked ();
+  return g_real_name_cp;
+}
+
+#undef g_get_home_dir
+
+G_CONST_RETURN gchar*
+g_get_home_dir (void)
+{
+  g_get_any_init_locked ();
+  return g_home_dir_cp;
+}
+
+#undef g_get_tmp_dir
+
+G_CONST_RETURN gchar*
+g_get_tmp_dir (void)
+{
+  g_get_any_init_locked ();
+  return g_tmp_dir_cp;
+}
+
+#endif
+
+#define __G_UTILS_C__
+#include "galiasdef.c"
diff --git a/glib/gutils.h b/glib/gutils.h
new file mode 100644
index 0000000..68a27ed
--- /dev/null
+++ b/glib/gutils.h
@@ -0,0 +1,487 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_UTILS_H__
+#define __G_UTILS_H__
+
+#include <glib/gtypes.h>
+#include <stdarg.h>
+
+G_BEGIN_DECLS
+
+#ifdef G_OS_WIN32
+
+/* On Win32, the canonical directory separator is the backslash, and
+ * the search path separator is the semicolon. Note that also the
+ * (forward) slash works as directory separator.
+ */
+#define G_DIR_SEPARATOR '\\'
+#define G_DIR_SEPARATOR_S "\\"
+#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/')
+#define G_SEARCHPATH_SEPARATOR ';'
+#define G_SEARCHPATH_SEPARATOR_S ";"
+
+#else  /* !G_OS_WIN32 */
+
+/* Unix */
+
+#define G_DIR_SEPARATOR '/'
+#define G_DIR_SEPARATOR_S "/"
+#define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
+#define G_SEARCHPATH_SEPARATOR ':'
+#define G_SEARCHPATH_SEPARATOR_S ":"
+
+#endif /* !G_OS_WIN32 */
+
+/* Define G_VA_COPY() to do the right thing for copying va_list variables.
+ * glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy.
+ */
+#if !defined (G_VA_COPY)
+#  if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
+#    define G_VA_COPY(ap1, ap2)	  (*(ap1) = *(ap2))
+#  elif defined (G_VA_COPY_AS_ARRAY)
+#    define G_VA_COPY(ap1, ap2)	  g_memmove ((ap1), (ap2), sizeof (va_list))
+#  else /* va_list is a pointer */
+#    define G_VA_COPY(ap1, ap2)	  ((ap1) = (ap2))
+#  endif /* va_list is a pointer */
+#endif /* !G_VA_COPY */
+
+/* inlining hassle. for compilers that don't allow the `inline' keyword,
+ * mostly because of strict ANSI C compliance or dumbness, we try to fall
+ * back to either `__inline__' or `__inline'.
+ * G_CAN_INLINE is defined in glibconfig.h if the compiler seems to be 
+ * actually *capable* to do function inlining, in which case inline 
+ * function bodies do make sense. we also define G_INLINE_FUNC to properly 
+ * export the function prototypes if no inlining can be performed.
+ * inline function bodies have to be special cased with G_CAN_INLINE and a
+ * .c file specific macro to allow one compiled instance with extern linkage
+ * of the functions by defining G_IMPLEMENT_INLINES and the .c file macro.
+ */
+#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
+#  undef inline
+#  define inline __inline__
+#elif !defined (G_HAVE_INLINE)
+#  undef inline
+#  if defined (G_HAVE___INLINE__)
+#    define inline __inline__
+#  elif defined (G_HAVE___INLINE)
+#    define inline __inline
+#  else /* !inline && !__inline__ && !__inline */
+#    define inline  /* don't inline, then */
+#  endif
+#endif
+#ifdef G_IMPLEMENT_INLINES
+#  define G_INLINE_FUNC
+#  undef  G_CAN_INLINE
+#elif defined (__GNUC__) 
+#  define G_INLINE_FUNC static __inline __attribute__ ((unused))
+#elif defined (G_CAN_INLINE) 
+#  define G_INLINE_FUNC static inline
+#else /* can't inline */
+#  define G_INLINE_FUNC
+#endif /* !G_INLINE_FUNC */
+
+/* Retrive static string info
+ */
+#ifdef G_OS_WIN32
+#define g_get_user_name g_get_user_name_utf8
+#define g_get_real_name g_get_real_name_utf8
+#define g_get_home_dir g_get_home_dir_utf8
+#define g_get_tmp_dir g_get_tmp_dir_utf8
+#endif
+
+G_CONST_RETURN gchar* g_get_user_name        (void);
+G_CONST_RETURN gchar* g_get_real_name        (void);
+G_CONST_RETURN gchar* g_get_home_dir         (void);
+G_CONST_RETURN gchar* g_get_tmp_dir          (void);
+G_CONST_RETURN gchar* g_get_host_name	     (void);
+gchar*                g_get_prgname          (void);
+void                  g_set_prgname          (const gchar *prgname);
+G_CONST_RETURN gchar* g_get_application_name (void);
+void                  g_set_application_name (const gchar *application_name);
+
+G_CONST_RETURN gchar*    g_get_user_data_dir      (void);
+G_CONST_RETURN gchar*    g_get_user_config_dir    (void);
+G_CONST_RETURN gchar*    g_get_user_cache_dir     (void);
+G_CONST_RETURN gchar* G_CONST_RETURN * g_get_system_data_dirs   (void);
+
+#ifdef G_OS_WIN32
+/* This functions is not part of the public GLib API */
+G_CONST_RETURN gchar* G_CONST_RETURN * g_win32_get_system_data_dirs_for_module (void (*address_of_function)());
+#endif
+
+#if defined (G_OS_WIN32) && defined (G_CAN_INLINE) && !defined (__cplusplus)
+/* This function is not part of the public GLib API either. Just call
+ * g_get_system_data_dirs() in your code, never mind that that is
+ * actually a macro and you will in fact call this inline function.
+ */
+static inline G_CONST_RETURN gchar * G_CONST_RETURN *
+_g_win32_get_system_data_dirs (void)
+{
+  return g_win32_get_system_data_dirs_for_module ((void (*)()) &_g_win32_get_system_data_dirs);
+}
+#define g_get_system_data_dirs _g_win32_get_system_data_dirs
+#endif
+
+G_CONST_RETURN gchar* G_CONST_RETURN * g_get_system_config_dirs (void);
+
+G_CONST_RETURN gchar* G_CONST_RETURN * g_get_language_names (void);
+
+/**
+ * GUserDirectory:
+ * @G_USER_DIRECTORY_DESKTOP: the user's Desktop directory
+ * @G_USER_DIRECTORY_DOCUMENTS: the user's Documents directory
+ * @G_USER_DIRECTORY_DOWNLOAD: the user's Downloads directory
+ * @G_USER_DIRECTORY_MUSIC: the user's Music directory
+ * @G_USER_DIRECTORY_PICTURES: the user's Pictures directory
+ * @G_USER_DIRECTORY_PUBLIC_SHARE: the user's shared directory
+ * @G_USER_DIRECTORY_TEMPLATES: the user's Templates directory
+ * @G_USER_DIRECTORY_VIDEOS: the user's Movies directory
+ * @G_USER_N_DIRECTORIES: the number of enum values
+ *
+ * These are logical ids for special directories which are defined
+ * depending on the platform used. You should use g_get_user_special_dir()
+ * to retrieve the full path associated to the logical id.
+ *
+ * The #GUserDirectory enumeration can be extended at later date. Not
+ * every platform has a directory for every logical id in this
+ * enumeration.
+ *
+ * Since: 2.14
+ */
+typedef enum {
+  G_USER_DIRECTORY_DESKTOP,
+  G_USER_DIRECTORY_DOCUMENTS,
+  G_USER_DIRECTORY_DOWNLOAD,
+  G_USER_DIRECTORY_MUSIC,
+  G_USER_DIRECTORY_PICTURES,
+  G_USER_DIRECTORY_PUBLIC_SHARE,
+  G_USER_DIRECTORY_TEMPLATES,
+  G_USER_DIRECTORY_VIDEOS,
+
+  G_USER_N_DIRECTORIES
+} GUserDirectory;
+
+G_CONST_RETURN gchar* g_get_user_special_dir (GUserDirectory directory);
+
+typedef struct _GDebugKey	GDebugKey;
+struct _GDebugKey
+{
+  const gchar *key;
+  guint	       value;
+};
+
+/* Miscellaneous utility functions
+ */
+guint                 g_parse_debug_string (const gchar     *string,
+					    const GDebugKey *keys,
+					    guint            nkeys);
+
+gint                  g_snprintf           (gchar       *string,
+					    gulong       n,
+					    gchar const *format,
+					    ...) G_GNUC_PRINTF (3, 4);
+gint                  g_vsnprintf          (gchar       *string,
+					    gulong       n,
+					    gchar const *format,
+					    va_list      args);
+
+/* Check if a file name is an absolute path */
+gboolean              g_path_is_absolute   (const gchar *file_name);
+
+/* In case of absolute paths, skip the root part */
+G_CONST_RETURN gchar* g_path_skip_root     (const gchar *file_name);
+
+#ifndef G_DISABLE_DEPRECATED
+
+/* These two functions are deprecated and will be removed in the next
+ * major release of GLib. Use g_path_get_dirname/g_path_get_basename
+ * instead. Whatch out! The string returned by g_path_get_basename
+ * must be g_freed, while the string returned by g_basename must not.*/
+G_CONST_RETURN gchar* g_basename           (const gchar *file_name);
+#define g_dirname g_path_get_dirname
+
+#endif /* G_DISABLE_DEPRECATED */
+
+#ifdef G_OS_WIN32
+#define g_get_current_dir g_get_current_dir_utf8
+#endif
+
+/* The returned strings are newly allocated with g_malloc() */
+gchar*                g_get_current_dir    (void);
+gchar*                g_path_get_basename  (const gchar *file_name) G_GNUC_MALLOC;
+gchar*                g_path_get_dirname   (const gchar *file_name) G_GNUC_MALLOC;
+
+/* Set the pointer at the specified location to NULL */
+void                  g_nullify_pointer    (gpointer    *nullify_location);
+
+/* return the environment string for the variable. The returned memory
+ * must not be freed. */
+#ifdef G_OS_WIN32
+#define g_getenv g_getenv_utf8
+#define g_setenv g_setenv_utf8
+#define g_unsetenv g_unsetenv_utf8
+#define g_find_program_in_path g_find_program_in_path_utf8
+#endif
+
+G_CONST_RETURN gchar* g_getenv             (const gchar *variable);
+gboolean              g_setenv             (const gchar *variable,
+					    const gchar *value,
+					    gboolean     overwrite);
+void                  g_unsetenv           (const gchar *variable);
+gchar**               g_listenv            (void);
+
+/* private */
+const gchar*	     _g_getenv_nomalloc	   (const gchar	*variable,
+					    gchar        buffer[1024]);
+
+/* we try to provide a useful equivalent for ATEXIT if it is
+ * not defined, but use is actually abandoned. people should
+ * use g_atexit() instead.
+ */
+typedef	void		(*GVoidFunc)		(void);
+#ifndef ATEXIT
+# define ATEXIT(proc)	g_ATEXIT(proc)
+#else
+# define G_NATIVE_ATEXIT
+#endif /* ATEXIT */
+/* we use a GLib function as a replacement for ATEXIT, so
+ * the programmer is not required to check the return value
+ * (if there is any in the implementation) and doesn't encounter
+ * missing include files.
+ */
+void	g_atexit		(GVoidFunc    func);
+
+#ifdef G_OS_WIN32
+/* It's a bad idea to wrap atexit() on Windows. If the GLib DLL calls
+ * atexit(), the function will be called when the GLib DLL is detached
+ * from the program, which is not what the caller wants. The caller
+ * wants the function to be called when it *itself* exits (or is
+ * detached, in case the caller, too, is a DLL).
+ */
+int atexit (void (*)(void));
+#define g_atexit(func) atexit(func)
+#endif
+
+/* Look for an executable in PATH, following execvp() rules */
+gchar*  g_find_program_in_path  (const gchar *program);
+
+/* Bit tests
+ */
+G_INLINE_FUNC gint	g_bit_nth_lsf (gulong  mask,
+				       gint    nth_bit) G_GNUC_CONST;
+G_INLINE_FUNC gint	g_bit_nth_msf (gulong  mask,
+				       gint    nth_bit) G_GNUC_CONST;
+G_INLINE_FUNC guint	g_bit_storage (gulong  number) G_GNUC_CONST;
+
+/* Trash Stacks
+ * elements need to be >= sizeof (gpointer)
+ */
+typedef struct _GTrashStack     GTrashStack;
+struct _GTrashStack
+{
+  GTrashStack *next;
+};
+
+G_INLINE_FUNC void	g_trash_stack_push	(GTrashStack **stack_p,
+						 gpointer      data_p);
+G_INLINE_FUNC gpointer	g_trash_stack_pop	(GTrashStack **stack_p);
+G_INLINE_FUNC gpointer	g_trash_stack_peek	(GTrashStack **stack_p);
+G_INLINE_FUNC guint	g_trash_stack_height	(GTrashStack **stack_p);
+
+/* inline function implementations
+ */
+#if defined (G_CAN_INLINE) || defined (__G_UTILS_C__)
+G_INLINE_FUNC gint
+g_bit_nth_lsf (gulong mask,
+	       gint   nth_bit)
+{
+  if (G_UNLIKELY (nth_bit < -1))
+    nth_bit = -1;
+  while (nth_bit < ((GLIB_SIZEOF_LONG * 8) - 1))
+    {
+      nth_bit++;
+      if (mask & (1UL << nth_bit))
+	return nth_bit;
+    }
+  return -1;
+}
+G_INLINE_FUNC gint
+g_bit_nth_msf (gulong mask,
+	       gint   nth_bit)
+{
+  if (nth_bit < 0 || G_UNLIKELY (nth_bit > GLIB_SIZEOF_LONG * 8))
+    nth_bit = GLIB_SIZEOF_LONG * 8;
+  while (nth_bit > 0)
+    {
+      nth_bit--;
+      if (mask & (1UL << nth_bit))
+	return nth_bit;
+    }
+  return -1;
+}
+G_INLINE_FUNC guint
+g_bit_storage (gulong number)
+{
+#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
+  return G_LIKELY (number) ?
+	   ((GLIB_SIZEOF_LONG * 8 - 1) ^ __builtin_clzl(number)) + 1 : 1;
+#else
+  register guint n_bits = 0;
+  
+  do
+    {
+      n_bits++;
+      number >>= 1;
+    }
+  while (number);
+  return n_bits;
+#endif
+}
+G_INLINE_FUNC void
+g_trash_stack_push (GTrashStack **stack_p,
+		    gpointer      data_p)
+{
+  GTrashStack *data = (GTrashStack *) data_p;
+
+  data->next = *stack_p;
+  *stack_p = data;
+}
+G_INLINE_FUNC gpointer
+g_trash_stack_pop (GTrashStack **stack_p)
+{
+  GTrashStack *data;
+
+  data = *stack_p;
+  if (data)
+    {
+      *stack_p = data->next;
+      /* NULLify private pointer here, most platforms store NULL as
+       * subsequent 0 bytes
+       */
+      data->next = NULL;
+    }
+
+  return data;
+}
+G_INLINE_FUNC gpointer
+g_trash_stack_peek (GTrashStack **stack_p)
+{
+  GTrashStack *data;
+
+  data = *stack_p;
+
+  return data;
+}
+G_INLINE_FUNC guint
+g_trash_stack_height (GTrashStack **stack_p)
+{
+  GTrashStack *data;
+  guint i = 0;
+
+  for (data = *stack_p; data; data = data->next)
+    i++;
+
+  return i;
+}
+#endif  /* G_CAN_INLINE || __G_UTILS_C__ */
+
+/* Glib version.
+ * we prefix variable declarations so they can
+ * properly get exported in windows dlls.
+ */
+GLIB_VAR const guint glib_major_version;
+GLIB_VAR const guint glib_minor_version;
+GLIB_VAR const guint glib_micro_version;
+GLIB_VAR const guint glib_interface_age;
+GLIB_VAR const guint glib_binary_age;
+
+const gchar * glib_check_version (guint required_major,
+                                  guint required_minor,
+                                  guint required_micro);
+
+#define GLIB_CHECK_VERSION(major,minor,micro)    \
+    (GLIB_MAJOR_VERSION > (major) || \
+     (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION > (minor)) || \
+     (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION == (minor) && \
+      GLIB_MICRO_VERSION >= (micro)))
+
+G_END_DECLS
+
+#ifndef G_DISABLE_DEPRECATED
+
+/*
+ * This macro is deprecated. This DllMain() is too complex. It is
+ * recommended to write an explicit minimal DLlMain() that just saves
+ * the handle to the DLL and then use that handle instead, for
+ * instance passing it to
+ * g_win32_get_package_installation_directory_of_module().
+ *
+ * On Windows, this macro defines a DllMain function that stores the
+ * actual DLL name that the code being compiled will be included in.
+ * STATIC should be empty or 'static'. DLL_NAME is the name of the
+ * (pointer to the) char array where the DLL name will be stored. If
+ * this is used, you must also include <windows.h>. If you need a more complex
+ * DLL entry point function, you cannot use this.
+ *
+ * On non-Windows platforms, expands to nothing.
+ */
+
+#ifndef G_PLATFORM_WIN32
+# define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)
+#else
+# define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)			\
+static char *dll_name;							\
+									\
+BOOL WINAPI								\
+DllMain (HINSTANCE hinstDLL,						\
+	 DWORD     fdwReason,						\
+	 LPVOID    lpvReserved)						\
+{									\
+  wchar_t wcbfr[1000];							\
+  char *tem;								\
+  switch (fdwReason)							\
+    {									\
+    case DLL_PROCESS_ATTACH:						\
+      GetModuleFileNameW ((HMODULE) hinstDLL, wcbfr, G_N_ELEMENTS (wcbfr)); \
+      tem = g_utf16_to_utf8 (wcbfr, -1, NULL, NULL, NULL);		\
+      dll_name = g_path_get_basename (tem);				\
+      g_free (tem);							\
+      break;								\
+    }									\
+									\
+  return TRUE;								\
+}
+
+#endif	/* !G_DISABLE_DEPRECATED */
+
+#endif /* G_PLATFORM_WIN32 */
+
+#endif /* __G_UTILS_H__ */
diff --git a/glib/gwin32.h b/glib/gwin32.h
new file mode 100644
index 0000000..5793335
--- /dev/null
+++ b/glib/gwin32.h
@@ -0,0 +1,114 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(G_DISABLE_SINGLE_INCLUDES) && !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
+#error "Only <glib.h> can be included directly."
+#endif
+
+#ifndef __G_WIN32_H__
+#define __G_WIN32_H__
+
+#include <glib/gtypes.h>
+
+#ifdef G_PLATFORM_WIN32
+
+G_BEGIN_DECLS
+
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+#ifdef G_OS_WIN32
+
+/*
+ * To get prototypes for the following POSIXish functions, you have to
+ * include the indicated non-POSIX headers. The functions are defined
+ * in OLDNAMES.LIB (MSVC) or -lmoldname-msvc (mingw32). But note that
+ * for POSIX functions that take or return file names in the system
+ * codepage, in many cases you would want to use the GLib wrappers in
+ * gstdio.h and UTF-8 instead.
+ *
+ * getcwd: <direct.h> (MSVC), <io.h> (mingw32)
+ * getpid: <process.h>
+ * access: <io.h>
+ * unlink: <stdio.h> or <io.h>
+ * open, read, write, lseek, close: <io.h>
+ * rmdir: <io.h>
+ * pipe: <io.h> (actually, _pipe())
+ */
+
+/* For some POSIX functions that are not provided by the MS runtime,
+ * we provide emulation functions in glib, which are prefixed with
+ * g_win32_. Or that was the idea at some time, but there is just one
+ * of those:
+ */
+gint		g_win32_ftruncate	(gint		 f,
+					 guint		 size);
+#endif /* G_OS_WIN32 */
+
+/* The MS setlocale uses locale names of the form "English_United
+ * States.1252" etc. We want the Unixish standard form "en", "zh_TW"
+ * etc. This function gets the current thread locale from Windows and
+ * returns it as a string of the above form for use in forming file
+ * names etc. The returned string should be deallocated with g_free().
+ */
+gchar* 		g_win32_getlocale  (void);
+
+/* Translate a Win32 error code (as returned by GetLastError()) into
+ * the corresponding message. The returned string should be deallocated
+ * with g_free().
+ */
+gchar*          g_win32_error_message (gint error);
+
+#ifndef G_DISABLE_DEPRECATED
+
+#define g_win32_get_package_installation_directory g_win32_get_package_installation_directory_utf8
+#define g_win32_get_package_installation_subdirectory g_win32_get_package_installation_subdirectory_utf8
+
+gchar*          g_win32_get_package_installation_directory (const gchar *package,
+							    const gchar *dll_name);
+
+gchar*          g_win32_get_package_installation_subdirectory (const gchar *package,
+							       const gchar *dll_name,
+							       const gchar *subdir);
+
+#endif
+
+gchar*          g_win32_get_package_installation_directory_of_module (gpointer hmodule);
+
+guint		g_win32_get_windows_version (void);
+
+gchar*          g_win32_locale_filename_from_utf8 (const gchar *utf8filename);
+
+/* As of GLib 2.14 we only support NT-based Windows */
+#define G_WIN32_IS_NT_BASED() TRUE
+#define G_WIN32_HAVE_WIDECHAR_API() TRUE
+
+G_END_DECLS
+
+#endif	 /* G_PLATFORM_WIN32 */
+
+#endif /* __G_WIN32_H__ */
diff --git a/glibconfig.h b/glibconfig.h
new file mode 100644
index 0000000..ecae491
--- /dev/null
+++ b/glibconfig.h
@@ -0,0 +1,226 @@
+/* glibconfig.h
+ *
+ * This is a generated file.  Please modify 'configure.in'
+ */
+
+#ifndef __G_LIBCONFIG_H__
+#define __G_LIBCONFIG_H__
+
+#include <glib/gmacros.h>
+
+#include <limits.h>
+#include <float.h>
+#define GLIB_HAVE_ALLOCA_H
+#define GLIB_HAVE_SYS_POLL_H
+
+/* Specifies that GLib's g_print*() functions wrap the
+ * system printf functions.  This is useful to know, for example,
+ * when using glibc's register_printf_function().
+ */
+#define GLIB_USING_SYSTEM_PRINTF
+
+G_BEGIN_DECLS
+
+#define G_MINFLOAT	FLT_MIN
+#define G_MAXFLOAT	FLT_MAX
+#define G_MINDOUBLE	DBL_MIN
+#define G_MAXDOUBLE	DBL_MAX
+#define G_MINSHORT	SHRT_MIN
+#define G_MAXSHORT	SHRT_MAX
+#define G_MAXUSHORT	USHRT_MAX
+#define G_MININT	INT_MIN
+#define G_MAXINT	INT_MAX
+#define G_MAXUINT	UINT_MAX
+#define G_MINLONG	LONG_MIN
+#define G_MAXLONG	LONG_MAX
+#define G_MAXULONG	ULONG_MAX
+
+typedef signed char gint8;
+typedef unsigned char guint8;
+typedef signed short gint16;
+typedef unsigned short guint16;
+#define G_GINT16_MODIFIER "h"
+#define G_GINT16_FORMAT "hi"
+#define G_GUINT16_FORMAT "hu"
+typedef signed int gint32;
+typedef unsigned int guint32;
+#define G_GINT32_MODIFIER ""
+#define G_GINT32_FORMAT "i"
+#define G_GUINT32_FORMAT "u"
+#define G_HAVE_GINT64 1          /* deprecated, always true */
+
+typedef signed long gint64;
+typedef unsigned long guint64;
+
+#define G_GINT64_CONSTANT(val)	(val##L)
+#define G_GUINT64_CONSTANT(val)	(val##UL)
+#define G_GINT64_MODIFIER "l"
+#define G_GINT64_FORMAT "li"
+#define G_GUINT64_FORMAT "lu"
+
+#define GLIB_SIZEOF_VOID_P 8
+#define GLIB_SIZEOF_LONG   8
+#define GLIB_SIZEOF_SIZE_T 8
+
+typedef signed long gssize;
+typedef unsigned long gsize;
+#define G_GSIZE_MODIFIER "l"
+#define G_GSSIZE_FORMAT "li"
+#define G_GSIZE_FORMAT "lu"
+
+#define G_MAXSIZE	G_MAXULONG
+#define G_MINSSIZE	G_MINLONG
+#define G_MAXSSIZE	G_MAXLONG
+
+typedef gint64 goffset;
+#define G_MINOFFSET	G_MININT64
+#define G_MAXOFFSET	G_MAXINT64
+
+#define G_GOFFSET_MODIFIER      G_GINT64_MODIFIER
+#define G_GOFFSET_FORMAT        G_GINT64_FORMAT
+#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
+
+
+#define GPOINTER_TO_INT(p)	((gint)  (glong) (p))
+#define GPOINTER_TO_UINT(p)	((guint) (gulong) (p))
+
+#define GINT_TO_POINTER(i)	((gpointer) (glong) (i))
+#define GUINT_TO_POINTER(u)	((gpointer) (gulong) (u))
+
+typedef signed long gintptr;
+typedef unsigned long guintptr;
+
+#ifdef NeXT /* @#%@! NeXTStep */
+# define g_ATEXIT(proc)	(!atexit (proc))
+#else
+# define g_ATEXIT(proc)	(atexit (proc))
+#endif
+
+#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END
+
+#define GLIB_MAJOR_VERSION 2
+#define GLIB_MINOR_VERSION 20
+#define GLIB_MICRO_VERSION 0
+
+#define G_OS_UNIX
+
+
+#define G_VA_COPY	va_copy
+#define G_VA_COPY_AS_ARRAY 1
+
+#ifdef	__cplusplus
+#define	G_HAVE_INLINE	1
+#else	/* !__cplusplus */
+#define G_HAVE_INLINE 1
+#define G_HAVE___INLINE 1
+#define G_HAVE___INLINE__ 1
+#endif	/* !__cplusplus */
+
+#ifdef	__cplusplus
+#define G_CAN_INLINE	1
+#else	/* !__cplusplus */
+#define G_CAN_INLINE	1
+#endif
+
+#ifndef __cplusplus
+# define G_HAVE_ISO_VARARGS 1
+#endif
+#ifdef __cplusplus
+# define G_HAVE_ISO_VARARGS 1
+#endif
+
+/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
+ * is passed ISO vararg support is turned off, and there is no work
+ * around to turn it on, so we unconditionally turn it off.
+ */
+#if __GNUC__ == 2 && __GNUC_MINOR__ == 95
+#  undef G_HAVE_ISO_VARARGS
+#endif
+
+#define G_HAVE_GNUC_VARARGS 1
+#define G_HAVE_GROWING_STACK 0
+
+#define G_HAVE_GNUC_VISIBILITY 1
+#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
+#define G_GNUC_INTERNAL __hidden
+#elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
+#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
+#else
+#define G_GNUC_INTERNAL
+#endif
+
+#define G_THREADS_ENABLED
+#define G_THREADS_IMPL_POSIX
+typedef struct _GStaticMutex GStaticMutex;
+struct _GStaticMutex
+{
+  struct _GMutex *runtime_mutex;
+  union {
+    char   pad[40];
+    double dummy_double;
+    void  *dummy_pointer;
+    long   dummy_long;
+  } static_mutex;
+};
+#define	G_STATIC_MUTEX_INIT	{ NULL, { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} } }
+#define	g_static_mutex_get_mutex(mutex) \
+  (g_thread_use_default_impl ? ((GMutex*)(gpointer) ((mutex)->static_mutex.pad)) : \
+   g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex)))
+/* This represents a system thread as used by the implementation. An
+ * alien implementaion, as loaded by g_thread_init can only count on
+ * "sizeof (gpointer)" bytes to store their info. We however need more
+ * for some of our native implementations. */
+typedef union _GSystemThread GSystemThread;
+union _GSystemThread
+{
+  char   data[8];
+  double dummy_double;
+  void  *dummy_pointer;
+  long   dummy_long;
+};
+
+#define GINT16_TO_LE(val)	((gint16) (val))
+#define GUINT16_TO_LE(val)	((guint16) (val))
+#define GINT16_TO_BE(val)	((gint16) GUINT16_SWAP_LE_BE (val))
+#define GUINT16_TO_BE(val)	(GUINT16_SWAP_LE_BE (val))
+#define GINT32_TO_LE(val)	((gint32) (val))
+#define GUINT32_TO_LE(val)	((guint32) (val))
+#define GINT32_TO_BE(val)	((gint32) GUINT32_SWAP_LE_BE (val))
+#define GUINT32_TO_BE(val)	(GUINT32_SWAP_LE_BE (val))
+#define GINT64_TO_LE(val)	((gint64) (val))
+#define GUINT64_TO_LE(val)	((guint64) (val))
+#define GINT64_TO_BE(val)	((gint64) GUINT64_SWAP_LE_BE (val))
+#define GUINT64_TO_BE(val)	(GUINT64_SWAP_LE_BE (val))
+#define GLONG_TO_LE(val)	((glong) GINT64_TO_LE (val))
+#define GULONG_TO_LE(val)	((gulong) GUINT64_TO_LE (val))
+#define GLONG_TO_BE(val)	((glong) GINT64_TO_BE (val))
+#define GULONG_TO_BE(val)	((gulong) GUINT64_TO_BE (val))
+#define GINT_TO_LE(val)		((gint) GINT32_TO_LE (val))
+#define GUINT_TO_LE(val)	((guint) GUINT32_TO_LE (val))
+#define GINT_TO_BE(val)		((gint) GINT32_TO_BE (val))
+#define GUINT_TO_BE(val)	((guint) GUINT32_TO_BE (val))
+#define G_BYTE_ORDER G_LITTLE_ENDIAN
+
+#define GLIB_SYSDEF_POLLIN =1
+#define GLIB_SYSDEF_POLLOUT =4
+#define GLIB_SYSDEF_POLLPRI =2
+#define GLIB_SYSDEF_POLLHUP =16
+#define GLIB_SYSDEF_POLLERR =8
+#define GLIB_SYSDEF_POLLNVAL =32
+
+#define G_MODULE_SUFFIX "so"
+
+/* A GPid is an abstraction for a process "handle". It is *not* an
+ * abstraction for a process identifier in general. GPid is used in
+ * GLib only for descendant processes spawned with the g_spawn*
+ * functions. On POSIX there is no "process handle" concept as such,
+ * but on Windows a GPid is a handle to a process, a kind of pointer,
+ * not a process identifier.
+ */
+typedef int GPid;
+
+G_END_DECLS
+
+#endif /* GLIBCONFIG_H */
diff --git a/glibconfig.h.win32.in b/glibconfig.h.win32.in
new file mode 100644
index 0000000..92e8964
--- /dev/null
+++ b/glibconfig.h.win32.in
@@ -0,0 +1,255 @@
+/* glibconfig.h.win32.in Merged from two versions generated by configure for gcc and MSVC.  */
+/* glibconfig.h
+ *
+ * This is a generated file.  Please modify 'configure.in'
+ */
+
+#ifndef __G_LIBCONFIG_H__
+#define __G_LIBCONFIG_H__
+
+#include <glib/gmacros.h>
+
+#include <limits.h>
+#include <float.h>
+
+G_BEGIN_DECLS
+
+#define G_MINFLOAT	FLT_MIN
+#define G_MAXFLOAT	FLT_MAX
+#define G_MINDOUBLE	DBL_MIN
+#define G_MAXDOUBLE	DBL_MAX
+#define G_MINSHORT	SHRT_MIN
+#define G_MAXSHORT	SHRT_MAX
+#define G_MAXUSHORT	USHRT_MAX
+#define G_MININT	INT_MIN
+#define G_MAXINT	INT_MAX
+#define G_MAXUINT	UINT_MAX
+#define G_MINLONG	LONG_MIN
+#define G_MAXLONG	LONG_MAX
+#define G_MAXULONG	ULONG_MAX
+
+typedef signed char gint8;
+typedef unsigned char guint8;
+typedef signed short gint16;
+typedef unsigned short guint16;
+#define G_GINT16_MODIFIER "h"
+#define G_GINT16_FORMAT "hi"
+#define G_GUINT16_FORMAT "hu"
+typedef signed int gint32;
+typedef unsigned int guint32;
+#define G_GINT32_MODIFIER ""
+#define G_GINT32_FORMAT "i"
+#define G_GUINT32_FORMAT "u"
+#define G_HAVE_GINT64 1          /* deprecated, always true */
+
+#ifndef _MSC_VER
+G_GNUC_EXTENSION typedef signed long long gint64;
+G_GNUC_EXTENSION typedef unsigned long long guint64;
+#else /* _MSC_VER */
+typedef signed __int64 gint64;
+typedef unsigned __int64 guint64;
+#endif /* _MSC_VER */
+
+#ifndef _MSC_VER
+#define G_GINT64_CONSTANT(val)	(G_GNUC_EXTENSION (val##LL))
+#else /* _MSC_VER */
+#define G_GINT64_CONSTANT(val)	(val##i64)
+#endif /* _MSC_VER */
+#ifndef _MSC_VER
+#define G_GUINT64_CONSTANT(val)	(G_GNUC_EXTENSION (val##ULL))
+#else /* _MSC_VER */
+#define G_GUINT64_CONSTANT(val)	(val##Ui64)
+#endif /* _MSC_VER */
+#define G_GINT64_MODIFIER "I64"
+#define G_GINT64_FORMAT "I64i"
+#define G_GUINT64_FORMAT "I64u"
+
+#if defined(_WIN64) || defined(_M_X64) || defined(_M_AMD64)
+
+#define GLIB_SIZEOF_VOID_P 8
+#define GLIB_SIZEOF_LONG   4
+#define GLIB_SIZEOF_SIZE_T 8
+
+typedef signed long long gssize;
+typedef unsigned long long gsize;
+#define G_GSIZE_MODIFIER "I64"
+#define G_GSSIZE_FORMAT "I64d"
+#define G_GSIZE_FORMAT "I64u"
+
+#define G_MAXSIZE	G_MAXUINT64
+#define G_MINSSIZE	G_MININT64
+#define G_MAXSSIZE	G_MAXINT64
+
+#else
+
+#define GLIB_SIZEOF_VOID_P 4
+#define GLIB_SIZEOF_LONG   4
+#define GLIB_SIZEOF_SIZE_T 4
+
+typedef signed int gssize;
+typedef unsigned int gsize;
+#define G_GSIZE_MODIFIER ""
+#define G_GSSIZE_FORMAT "i"
+#define G_GSIZE_FORMAT "u"
+
+#define G_MAXSIZE	G_MAXUINT
+#define G_MINSSIZE	G_MININT
+#define G_MAXSSIZE	G_MAXINT
+
+#endif
+
+typedef gint64 goffset;
+#define G_MINOFFSET	G_MININT64
+#define G_MAXOFFSET	G_MAXINT64
+
+#ifndef _WIN64
+
+#define GPOINTER_TO_INT(p)	((gint)   (p))
+#define GPOINTER_TO_UINT(p)	((guint)  (p))
+
+#define GINT_TO_POINTER(i)	((gpointer)  (i))
+#define GUINT_TO_POINTER(u)	((gpointer)  (u))
+
+typedef signed int gintptr;
+typedef unsigned int guintptr;
+
+#else
+
+#define GPOINTER_TO_INT(p)	((gint)  (gint64) (p))
+#define GPOINTER_TO_UINT(p)	((guint) (guint64) (p))
+
+#define GINT_TO_POINTER(i)	((gpointer) (gint64) (i))
+#define GUINT_TO_POINTER(u)	((gpointer) (guint64) (u))
+
+#ifndef _MSC_VER
+typedef signed long long gintptr;
+typedef unsigned long long guintptr;
+#else
+typedef signed __int64 gintptr;
+typedef unsigned __int64 guintptr;
+#endif
+
+#endif
+
+#ifdef NeXT /* @#%@! NeXTStep */
+# define g_ATEXIT(proc)	(!atexit (proc))
+#else
+# define g_ATEXIT(proc)	(atexit (proc))
+#endif
+
+#define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END
+
+#define GLIB_MAJOR_VERSION @GLIB_MAJOR_VERSION@
+#define GLIB_MINOR_VERSION @GLIB_MINOR_VERSION@
+#define GLIB_MICRO_VERSION @GLIB_MICRO_VERSION@
+
+#define G_OS_WIN32
+#define G_PLATFORM_WIN32
+@GLIB_WIN32_STATIC_COMPILATION_DEFINE@
+
+#ifndef _MSC_VER
+#define G_VA_COPY	va_copy
+#endif /* not _MSC_VER */
+
+#ifdef	__cplusplus
+#define	G_HAVE_INLINE	1
+#else	/* !__cplusplus */
+#ifndef _MSC_VER
+#define G_HAVE_INLINE 1
+#endif /* _MSC_VER */
+#define G_HAVE___INLINE 1
+#if !defined(_MSC_VER) && !defined(__DMC__)
+#define G_HAVE___INLINE__ 1
+#endif /* !_MSC_VER and !__DMC__ */
+#endif	/* !__cplusplus */
+
+#define G_CAN_INLINE	1
+
+#ifndef _MSC_VER
+#define G_HAVE_ISO_VARARGS 1
+
+/* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
+ * is passed ISO vararg support is turned off, and there is no work
+ * around to turn it on, so we unconditionally turn it off.
+ */
+#if __GNUC__ == 2 && __GNUC_MINOR__ == 95
+#  undef G_HAVE_ISO_VARARGS
+#endif
+
+#define G_HAVE_GNUC_VARARGS 1
+#else /* _MSC_VER */
+/* varargs macros available since msvc8 (vs2005) */
+#  if _MSC_VER >= 1400
+#    define G_HAVE_ISO_VARARGS 1
+#   endif
+#endif /* not _MSC_VER */
+#define G_HAVE_GROWING_STACK 0
+
+#define G_GNUC_INTERNAL
+
+#define G_THREADS_ENABLED
+#define G_THREADS_IMPL_WIN32
+typedef struct _GMutex* GStaticMutex;
+#define G_STATIC_MUTEX_INIT NULL
+#define g_static_mutex_get_mutex(mutex) \
+  (g_static_mutex_get_mutex_impl_shortcut (mutex))
+/* This represents a system thread as used by the implementation. An
+ * alien implementaion, as loaded by g_thread_init can only count on
+ * "sizeof (gpointer)" bytes to store their info. We however need more
+ * for some of our native implementations. */
+typedef union _GSystemThread GSystemThread;
+union _GSystemThread
+{
+#ifndef _WIN64
+  char   data[4];
+#else
+  char   data[8];
+#endif
+  double dummy_double;
+  void  *dummy_pointer;
+  long   dummy_long;
+};
+
+#define GINT16_TO_LE(val)	((gint16) (val))
+#define GUINT16_TO_LE(val)	((guint16) (val))
+#define GINT16_TO_BE(val)	((gint16) GUINT16_SWAP_LE_BE (val))
+#define GUINT16_TO_BE(val)	(GUINT16_SWAP_LE_BE (val))
+#define GINT32_TO_LE(val)	((gint32) (val))
+#define GUINT32_TO_LE(val)	((guint32) (val))
+#define GINT32_TO_BE(val)	((gint32) GUINT32_SWAP_LE_BE (val))
+#define GUINT32_TO_BE(val)	(GUINT32_SWAP_LE_BE (val))
+#define GINT64_TO_LE(val)	((gint64) (val))
+#define GUINT64_TO_LE(val)	((guint64) (val))
+#define GINT64_TO_BE(val)	((gint64) GUINT64_SWAP_LE_BE (val))
+#define GUINT64_TO_BE(val)	(GUINT64_SWAP_LE_BE (val))
+#define GLONG_TO_LE(val)	((glong) GINT32_TO_LE (val))
+#define GULONG_TO_LE(val)	((gulong) GUINT32_TO_LE (val))
+#define GLONG_TO_BE(val)	((glong) GINT32_TO_BE (val))
+#define GULONG_TO_BE(val)	((gulong) GUINT32_TO_BE (val))
+#define GINT_TO_LE(val)		((gint) GINT32_TO_LE (val))
+#define GUINT_TO_LE(val)	((guint) GUINT32_TO_LE (val))
+#define GINT_TO_BE(val)		((gint) GINT32_TO_BE (val))
+#define GUINT_TO_BE(val)	((guint) GUINT32_TO_BE (val))
+#define G_BYTE_ORDER G_LITTLE_ENDIAN
+
+#define GLIB_SYSDEF_POLLIN =1
+#define GLIB_SYSDEF_POLLOUT =4
+#define GLIB_SYSDEF_POLLPRI =2
+#define GLIB_SYSDEF_POLLHUP =16
+#define GLIB_SYSDEF_POLLERR =8
+#define GLIB_SYSDEF_POLLNVAL =32
+
+#define G_MODULE_SUFFIX "dll"
+
+/* A GPid is an abstraction for a process "handle". It is *not* an
+ * abstraction for a process identifier in general. GPid is used in
+ * GLib only for descendant processes spawned with the g_spawn*
+ * functions. On POSIX there is no "process handle" concept as such,
+ * but on Windows a GPid is a handle to a process, a kind of pointer,
+ * not a process identifier.
+ */
+typedef void * GPid;
+
+G_END_DECLS
+
+#endif /* GLIBCONFIG_H */
diff --git a/gmodule-2.0-uninstalled.pc.in b/gmodule-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..9a0d8aa
--- /dev/null
+++ b/gmodule-2.0-uninstalled.pc.in
@@ -0,0 +1,8 @@
+gmodule_supported=@G_MODULE_SUPPORTED@
+
+Name: GModule Uninstalled
+Description: Dynamic module loader for GLib, Not Installed
+Requires: glib-2.0-uninstalled
+Version: @VERSION@
+Libs: @G_MODULE_LDFLAGS@ ${pc_top_builddir}/${pcfiledir}/gmodule/libgmodule-2.0.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@/gmodule
diff --git a/gmodule-2.0.pc.in b/gmodule-2.0.pc.in
new file mode 100644
index 0000000..7117b31
--- /dev/null
+++ b/gmodule-2.0.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+gmodule_supported=@G_MODULE_SUPPORTED@
+
+Name: GModule
+Description: Dynamic module loader for GLib
+Requires: glib-2.0
+Version: @VERSION@
+Libs: -L${libdir} @G_MODULE_LDFLAGS@ -lgmodule-2.0 
+Libs.private: @G_MODULE_LIBS@
+Cflags:
diff --git a/gmodule-export-2.0.pc.in b/gmodule-export-2.0.pc.in
new file mode 100644
index 0000000..4bf5597
--- /dev/null
+++ b/gmodule-export-2.0.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+gmodule_supported=@G_MODULE_SUPPORTED@
+
+Name: GModule
+Description: Dynamic module loader for GLib
+Requires: glib-2.0
+Version: @VERSION@
+Libs: -L${libdir} @G_MODULE_LDFLAGS@ -lgmodule-2.0
+Libs.private: @G_MODULE_LIBS@
+Cflags:
diff --git a/gmodule-no-export-2.0-uninstalled.pc.in b/gmodule-no-export-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..bd49e9d
--- /dev/null
+++ b/gmodule-no-export-2.0-uninstalled.pc.in
@@ -0,0 +1,14 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+gmodule_supported=true
+
+Name: GModule
+Description: Dynamic module loader for GLib
+Requires: glib-2.0
+Version: @VERSION@
+Libs: ${pc_top_builddir}/${pcfiledir}/gmodule/libgmodule-2.0.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@/gmodule
+
diff --git a/gmodule-no-export-2.0.pc.in b/gmodule-no-export-2.0.pc.in
new file mode 100644
index 0000000..6c4c231
--- /dev/null
+++ b/gmodule-no-export-2.0.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+gmodule_supported=@G_MODULE_SUPPORTED@
+
+Name: GModule
+Description: Dynamic module loader for GLib
+Requires: glib-2.0
+Version: @VERSION@
+Libs: -L${libdir} -lgmodule-2.0
+Libs.private: @G_MODULE_LIBS@
+Cflags:
diff --git a/gmodule/.gitignore b/gmodule/.gitignore
new file mode 100644
index 0000000..e44c5c6
--- /dev/null
+++ b/gmodule/.gitignore
@@ -0,0 +1 @@
+gmoduleconf.h
diff --git a/gmodule/AUTHORS b/gmodule/AUTHORS
new file mode 100644
index 0000000..3282695
--- /dev/null
+++ b/gmodule/AUTHORS
@@ -0,0 +1 @@
+Tim Janik <timj@gtk.org>
diff --git a/gmodule/COPYING b/gmodule/COPYING
new file mode 100644
index 0000000..bf50f20
--- /dev/null
+++ b/gmodule/COPYING
@@ -0,0 +1,482 @@
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 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 library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    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 Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the 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 a program 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.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  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, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+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 compile 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) 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.
+
+    c) 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.
+
+    d) 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 source code 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 to
+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 Library 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 Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 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
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library 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!
diff --git a/gmodule/ChangeLog b/gmodule/ChangeLog
new file mode 100644
index 0000000..fff7980
--- /dev/null
+++ b/gmodule/ChangeLog
@@ -0,0 +1,1042 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 71704 - Header file include order
+
+	* gmodule.c: Include gmodule.h before io.h.
+	Pointed out by Kazuki Iwamoto
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.3 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.0 ===
+
+2008-09-26  Tor Lillqvist  <tml@novell.com>
+
+	* gmodule-win32.c: Improve error reporting: When g_module_open()
+	fails, include the name of the module passed to LoadLibrary() in
+	what g_module_error() returns.
+
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.1 ===
+
+2008-09-08  Tor Lillqvist  <tml@novell.com>
+
+	Bug 551408 - gmodule.def generated to builddir, but required in srcdir
+
+	* Makefile.am: Use gmodule.def from builddir, not srcdir.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.0 ===
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.5 ===
+
+2008-08-01  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : adapt to gmodule.symbols usage
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* gmodule.symbols: New file.
+
+	* gmodule.c: Bypass the Windows ABI compatibility symbols on
+	64-bit Windows. Thus no need to keep the file name in system
+	codepage around on 64-bit Windows either.
+	
+	* Makefile.am: Produce gmodule.def from gmodule.symbols. Dist
+	gmodule.symbols instead of gmodule.def.
+
+	* gmodule.def: Drop from SVN.
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (gmodule-2.0.lib): Pass appropriate -machine flag to
+	lib.exe.
+
+2008-07-21  Matthias Clasen  <mclasen2redhat.com>
+
+	* === Released 2.17.4 ===
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.17.2 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.1 ===
+
+2008-05-28  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am: don't define G_DISABLE_SINGLE_INCLUDES, it's in
+	the global CPPFLAGS now.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.0 ===
+
+2008-05-05  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent
+	code from being checked in that breaks the build of applications
+	which use G_DISABLE_SINGLE_INCLUDES.
+
+	* gmodule.c: #include "glib.h" instead of "glibconfig.h"
+
+2008-03-16  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Define gmodule_def locally here instead of using an
+	Autoconf variable.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.16.1 ===
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.6 ===
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.15.5 ===
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.2 ===
+
+008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.1 ===
+
+2007-12-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c (g_module_open): Don't fail to load modules
+	with suffix .la.  (#480122, Andrey Tsyvarev)
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.0 ===
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* gmodule.c: Include glibconfig.h before checking G_OS_WIN32.
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* *.c: Make header include order consistent (#71704,
+	Diego Escalante Urrelo)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.14.3 ===
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.2 ===
+
+2007-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.1 ===
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.0 ===
+
+2007-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.7 ===
+
+2007-07-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c (g_module_open): Include the module file 
+	name to the error message given when module initialization 
+	fails.  (#445813, Gustavo Carneiro)
+
+Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.6 ===
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.5 ===
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.4 ===
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.13.3 ===
+
+2007-05-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.2 ===
+
+2007-05-03  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.13.1 ===
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.0 ===
+
+2007-01-19  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (gmodule-2.0.lib): Use $(srcdir) for builds outside
+	srcdir.
+
+2006-12-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c: Fix include order for win32. (#390943, 
+	Kazuki Iwamoto)
+
+2006-12-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c: Clean up includes.
+
+2006-12-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c (g_module_open):
+	* gmodule-dl.c (_g_module_symbol): Handle valid symbols
+	that are NULL correctly.  (#385388, Felix Kater)
+
+Mon Sep 11 14:58:56 2006  Tim Janik  <timj@imendio.com>
+
+	* gmodule.c: applied patch from Christian Persch to support
+	G_DEBUG flags resident-modules and bind-now-modules, bug #345099.
+
+2006-08-29  Tor Lillqvist  <tml@novell.com>
+
+	Remove support for Windows 9x/ME. GTK+ hasn't worked on Win9x
+	since 2.6. It's pointless to keep the Win9x code in here as it
+	isn't being maintained anyway. If somebody is interested, it is in
+	older GLib versions, and in CVS.
+
+	* gmodule-win32.c (_g_module_open): Remove the Win9x branch of if
+	statement.
+
+2006-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.2 ===
+
+2006-07-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.1 ===
+
+2006-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.0 ===
+
+2006-06-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.4 ===
+
+2006-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.3 ===
+
+2006-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.2 ===
+
+2006-05-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.1 ===
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.11.0 ===
+
+2006-03-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c (g_module_symbol): Make sure to
+	not return TRUE if symbol is NULL.  (#334440,
+	ITOH Yasufumi)
+
+2006-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* ===  Released 2.10.1 ===
+
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.10.0 ===
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.6 ===
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.5 ===
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.9.4 ===
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.3 ===
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.2 ===
+
+2005-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.1 ===
+
+2005-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule.c (parse_libtool_archive): Silence
+	compiler warnings.
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.0 ===
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.1 ===
+
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.0 ===
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.7 ===
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.6 ===
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.5 ===
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.4 ===
+
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.3 ===
+	
+2005-07-09  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Don't use the scripts in build/win32 to compile
+	gmodule.rc into a resource object file. (This means we lose the
+	build number increment magic, but I doubt it was that useful
+	anyway.) Instead use windres directly. To pass the normal .o file
+	produced by windres through libtool, which wants .lo files, pass
+	it directly to the linker using a -Wl option.
+
+	* gmodule.rc.in: Thus replace BUILDNUMBER with 0.
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.7.2 ===
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.1 ===
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* gmodule-ar.c: Include stdlib.h
+
+2005-06-26  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: libtool installs/uninstalls the import library, no
+	need to do it ourselves. Do still install/uninstall the .def file,
+	though.
+
+2005-06-24  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (install-libtool-import-lib): Current GNU tools do
+	understand the PRIVATE keyword.
+
+2005-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.0 ===
+
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.1 ===
+
+2004-12-31  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule.c (g_module_open): It's wrong to call g_file_test() with
+	more than one test (both G_FILE_TEST_EXISTS and _IS_REGULAR). (It
+	would succeed even if the pathname existed as a nonregular file.)
+	Just G_FILE_TEST_IS_REGULAR works fine. (#162594)
+
+2004-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.0 ===
+	
+2004-12-06  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am
+	* gmodule.def
+	* gmodule.[hc]: Win32 DLL ABI stability cruft like in ../glib.
+
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.7 ===
+	
+2004-11-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.6 ===
+	
+2004-11-04  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c (_g_module_open): Argument is in UTF-8. Use wide
+	character Win32 API if present.
+
+	* gmodule.c (parse_libtool_archive, g_module_open): Convert file
+	name to UTF-8 before storing in the error message string.
+
+	* gmodule.c (parse_libtool_archive): Use g_open().
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.5 ===
+
+2004-10-27 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.4 ===
+
+2004-09-18 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.3 ===
+
+2004-08-25 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.2 ===
+
+2004-08-01 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.1 ===
+
+Sun Jul 18 18:03:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* === Released 2.5.0 ===
+
+Mon May 31 00:09:10 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* Makefile.am (EXTRA_DIST): Add gmodule-ar.c. (#85930, Tomas Ögren)
+
+Tue May 11 23:23:21 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gmodule-ar.c (_g_module_open): Make it compile on AIX.  
+	(#141159, Michael Wilson)
+
+2004-03-31  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c (_g_module_build_path): On Cygwin, use the "cyg"
+	prefix, and accept also the normal "lib". (#138403, Roger Leigh)
+
+Tue Feb 24 14:09:21 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.3 ===
+
+Sun Feb 22 02:28:43 2004  Matthias Clasen  <maclas@gmx.de>
+
+	Bug #85930, Laurent Vivier:
+	
+	* gmodule-ar.c: Implementation of native module management for AIX.
+	* gmoduleconf.h.in: 
+	* gmodule.c: Support gmodule-ar.c 
+
+2003-01-01  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c (_g_module_build_path): Use g_ascii_strcasecmp().
+
+Tue Dec  3 20:56:19 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gmodule.c (g_module_open): Properly refcount the
+	main module if it is already open. (#98648)
+
+Sat Mar  2 14:46:17 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gmodule-beos.c (_g_module_build_path) * gmodule-dyld.c (_g_module_build_path) 
+	  gmodule-dl.c (_g_module_build_path): Use G_MODULE_SUFFIX rather than
+	a hardcoded ".so". (#72803)
+
+Sun Feb 17 18:15:22 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gmodule.c (g_module_open): Fix typo when checking
+	if file + module_suffix exists. (Miroslaw Dobrzanski-Neumann,
+	#71801)
+
+2001-11-24  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Remove rule for testgmodule.exp, too.
+
+2001-11-22  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c: Current w32api headers do include tlhelp32.h,
+	so no need to have an extract from it here.
+
+Mon Nov 19 16:12:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am makefile.msc.in makefile.mingw.in: Remove
+	testgmodule and associated plugin files; we don't need _both_ this
+	and ../tests/module-test.c
+
+2001-11-16  Michael Meeks  <michael@ximian.com>
+
+	* gmodule.c (parse_libtool_archive): fix leak.
+
+2001-10-30  Dan Winship  <danw@ximian.com>
+
+	* Makefile.am (EXTRA_DIST): Add gmodule-dyld.c
+
+2001-10-23  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: (Win32): If we have built the MSVC import library,
+	install it. Install the gcc import library. Also support
+	uninstall.
+
+2001-10-09  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c (_g_module_build_path): More Unix compatibility:
+	Add "lib" prefix in case the module name doesn't already have it,
+	except if it ends with ".dll" (in which case it probably already
+	is the name of an existing DLL). This is needed for instance for
+	the gdk-pixbuf loaders, which are called "lib*.dll", but
+	gdk-pixbuf-io calls g_module_build_path without the "lib" prefix.
+
+2001-10-03  jacob berkman  <jacob@ximian.com>
+
+	* libgplugin_a.c: (gplugin_a_module_func): 
+	* gmodule.h: s/retrive/retrieve/
+
+2001-09-25  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: Fix missing end @ in @LT_CURRENT@.
+
+	* makefile.msc.in: Use same DLL and import library names as
+	libtool.
+	
+2001-09-19  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule.rc.in: Correct InternalName and OriginalFilename to
+	match what we actually produce.
+
+2001-09-18  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: On Win32, pass a dummy -rpath flag to libtool when
+	building libgplugin_[ab].la, otherwise libtool doesn't create a
+	DLL, but a static archive.
+
+2001-07-20  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : reflect glib move
+
+2001-05-21  Mark Murnane  <Mark.Murnane@ireland.sun.com>
+
+	* gmodule.c (g_str_check_suffix):  Modified type of string_len
+	and suffix_len to be gsize.  Properly accommodates return from
+	strlen().
+
+2001-05-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmodule.c (g_module_set_error_unduped): Do not g_strdup, as
+	promised in the function name.
+
+Tue May 29 12:57:51 2001  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (g_module_symbol): erk, strconcat needs NULL as last arg.
+	make sure we pass module name with suffix into backend open.
+
+Mon May 28 20:19:25 2001  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (g_module_open): as a last resort, if we can't access()
+	the module, leave it up to the platform backends to find it.
+	(fixes implicit search patch loading i broke with my last
+	commit, spotted by Padraig O'Briain).
+
+Thu May 24 03:43:12 2001  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (g_module_open): reordered code so we have a single
+	module loading point (for reliable error messages). do access()
+	tests to figure plausible file names.
+	make error messages more verbose so users canfigure what's going on.
+
+2001-04-20  Dan Winship  <danw@ximian.com>
+
+	* gmodule-dyld.c: gmodule implementation for Darwin/Mac OS X
+
+	* gmodule.c: 
+	* gmoduleconf.h.in: Add gmodule-dyld support
+
+	* testgmodule.c (main): Fix spelling
+
+2001-03-13  Tor Lillqvist  <tml@iki.fi>
+
+	From Edward M. Lee  <tailbert@yahoo.com>:
+
+	* gmodule-win32.c (_g_module_build_path): use (cygwin friendly) dir
+	separator.
+
+2001-03-12  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (libgplugin_a_la_LIBADD, libgplugin_b_la_LIBADD):
+	Link with the libgmodule la only on Win32.
+
+2001-03-10  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Use the _LIBADD dependency on libglib only on the
+	Win32 platform (including Cygwin).
+
+2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am, makefile.mingw.in, makefile.msc.in: Set
+	G_LOG_DOMAIN to \"GModule\" instead of g_log_domain_gmodule.
+
+	* gmodule.def, gmodule.h, gmodule.c: Removed g_log_domain_gmodule.
+
+2001-02-21  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule.h: Use G_BEGIN_DECLS and G_END_DECLS. Define
+	G_MODULE_EXPORT correctly on Cygwin, too.
+
+	* gmodule-win32.c (_g_module_open): Convert path to Windows format
+	on Cygwin.
+
+	* Makefile.am (libglib): Use libglib-1.3.la from
+	top_builddir. Invoke libtool with -no-undefined for Win32 and
+	Cygwin.
+
+2001-02-17  Havoc Pennington  <hp@pobox.com>
+
+        Applied patch from Soeren Sandmann:
+	
+	* gmodule.c (g_module_error): G_CONST_RETURN
+	(g_module_name): G_CONST_RETURN
+
+Sat Feb 17 07:27:15 2001  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c: work around platforms that have broken RTLD_GLOBAL.
+
+2001-01-27  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule.c: (Win32) Need <io.h> for open() and close().
+
+2000-12-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmodule.c: Make g_module_open more tolerant wrt to the module
+	name. First it tries to open the module as named, if that fails,
+	it checks, whether it is a libtool archive and parses it, if that
+	fails it appends the systems shared library suffix
+	(i.e. ".so") (if not already found) and tries again and if that
+	fails it tries to append the ".la" libtool suffix (if not already
+	found) and parses it.
+
+	* gmodule.c: Lock recursive mutex during most module functions for
+	safety.
+
+	* gmodule-dl.c: Return an error from _g_module_symbol only, if
+	dlerror says so. All other functions return an error as well, if
+	dlerror returns NULL.
+
+	* testgmodule.c: Thanks to the above change the #ifdefs have
+	vanished.
+
+2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* Makefile.am (BUILT_EXTRA_DIST): New variable.
+	(dist-hook): Handle $(BUILT_EXTRA_DIST).
+
+2000-09-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmodule.h: Moved declaration of g_log_domain_gmodule up before
+	the inclusion of glib.h to make it compile on non-gcc compilers.
+
+2000-07-22  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: Remove leftover gmodule-win32res.o stuff. The
+	build-dll script automagically handles resources.
+
+2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* libgplugin_a.c, testgmodule.c: Use g_path_get_basename instead
+	of the deprecated g_basename.
+
+2000-07-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmodule.h: include glib.h before doing extern "C". Makes some C++
+	compiler happy. Reported by Denis Vakatov
+	<vakatov@peony.nlm.nih.gov>.
+
+2000-07-19  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c: Don't #include <tlhelp32.h> when compiling with
+	gcc, as it isn't provided. Declaration of a needed struct (from
+	www.microsoft.com) inserted instead.
+
+2000-05-13  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: New file, with gmodule stuff
+	moved from ../makefile.mingw.in.
+
+	* Makefile.am: Add to EXTRA_DIST, and add rule to make makefile.mingw.
+
+2000-05-02  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c: No need to include <psapi.h>
+
+2000-03-23  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c (_g_module_symbol): When looking for symbols in
+	the "main" module we must search both the main program and all
+	currently loaded DLLs. Not only the main program, or even just the
+	DLLs loaded as gmodules.  Libglade requires this.
+
+	Thus we need to get a list of all modules in the current
+	process. There are two alternative APIs to do this: PSAPI and
+	Toolhelp. The former is only available on NT (including Win2k),
+	the latter on Win9x and Win2k. Check which one works, and use
+	that.
+
+	First check for the symbol in the main program, and if not found
+	there, in all the modules.
+
+	Code for using PSAPI and Toolhelp was borrowed from the Dr. Mingw
+	tool written by José Fonseca <em96115@fe.up.pt>. Thanks.
+
+2000-03-04  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-win32.c: Call g_win32_error_message() to get the error
+	message strings.
+
+	* libgplugin_a.c
+	* libgplugin_b.c
+	* gmodule.c: Remove LibMain functions that were needed by LCC,
+	which is not a supported compiler.
+
+	* testgmodule.c (main): Test for G_MODULE_IMPL ==
+	G_MODULE_IMPL_WIN32, not G_OS_WIN32.
+
+	* gmoduleconf.h.win32: Remove LCC stuff from here, too. 
+
+Wed Mar  1 05:34:47 2000  Tim Janik  <timj@gtk.org>
+
+	* gmodule-beos.c (_g_module_symbol): do not return NULL symbols.
+
+	* gmodule-os2.c: removed NetBSD specific defines.
+	(_g_module_self): set an error message for unsupported behaviour.
+
+	* gmodule-beos.c: many coding style fixups.
+	(_g_module_open):
+	(_g_module_self):
+	(_g_module_close):
+	(_g_module_symbol): bunch of memory leaks plugged.
+
+	* gmodule-dl.c: make sure the error message returned from dlerror()
+	is always != NULL, by using a wrapper function fetch_dlerror(). based
+	on a patch to fix _g_module_symbol() for NetBSD from Scott Presnell
+	<srp@zgi.com>.
+
+	* gmodule-dld.c: minor indentation.
+
+	* gmodule-win32.c: minor cleanups.
+
+	* merges from glib-1-2.
+
+Sat Feb 19 19:43:29 2000  Tim Janik  <timj@gtk.org>
+
+	* testgmodule.c (main): added test to check that not yet bound symbols
+	in shared libraries of the main module are retrievable, from David Gero.
+
+2000-01-13  Martin Baulig  <martin@home-of-linux.org>
+
+	* gmodule.c (g_module_open): Check whether `check_init' is not NULL
+	before we attempt to call it.
+
+Sun Oct  3 19:30:52 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* gmodule.h
+	* testgmodule.c: use G_OS stuff
+
+Sat Jul 24 20:47:18 1999  Tim Janik  <timj@gtk.org>
+
+	* merged changes from GLib-1-2 branch.
+
+1999-05-06  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule.c: Remove LibMain.
+
+Sat May  1 10:58:57 PDT 1999 Manish Singh <yosh@gimp.org>
+
+	* Makefile.am: use -avoid-version and -module for test plugins
+
+Mon Apr 19 08:43:59 1999  ape@lrdpf.spacetec.no  (Asbjorn Pettersen)
+
+	* Makefile.am (EXTRA_DIST): Add gmodule-os2.c
+
+Wed Apr  7 20:12:58 1999  ape@lrdpf.spacetec.no  (Asbjorn Pettersen)
+
+	* gmodule-os2.c: OS/2 specific file for gmodule.
+	* gmodule.c (_g_module_open): Add gmodule-os2.c if G_MODULE_IMPL_OS2.
+	* gmoduleconf.h.in: Add G_MODULE_IMPL_OS2.
+
+Fri Apr 23 09:03:48 1999  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (g_module_symbol): removed inline variable assignment.
+	s/CHECK_ERROR/SUPPORT_OR_RETURN/ to make the code more self descriptive.
+
+Wed Feb 10 12:06:30 1999  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (CHECK_ERROR): be more descriptive on unsupported systems.
+
+Wed Feb 10 07:56:33 1999  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (g_module_error): fixed errernerous code wrt to thread
+	specific error string allocation handling.
+
+Thu Jan 21 12:40:11 EST 1999  Jeff Garzik  <jgarzik@pobox.com>
+
+	* gmodule-dl.c (_g_module_build_path):
+	Add braces to eliminate an ambiguous else warning.
+
+1999-01-16  Tor Lillqvist  <tml@iki.fi>
+
+	* gmodule-dl.c gmodule-dld.c: In
+ 	_g_module_build_path, don't add the "lib" prefix and
+ 	".so" or ".sl" suffix if already there.
+
+	* gmodule-win32.c: Likewise for the ".dll" suffix.
+
+1998-12-10  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gmodule.c: Made it MT safe, the g_module_error() is now thread
+	specific.
+
+Fri Nov 20 14:43:44 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (_g_module_build_path): added empty default imlementation
+	so gmodule.so compiles on systems that are not yet supported, fix from
+	Erik Bagfors <bagfors@hpc2n.umu.se>.
+
+1998-11-13  Nuno Ferreira  <nmrf@rnl.ist.utl.pt>
+
+	* Makefile.am (INCLUDES): The previous commit message is wrong
+	about the -I$(top_srcdir) being redundant. I put it back.
+
+Wed Nov 11 23:23:22 EST 1998 Jeff Garzik <jgarzik@pobox.com>
+
+	* Makefile.am : INCLUDES is the right way to add to CFLAGS, not 
+	DEFS.  Also there are bugs with '+=' in makefiles.
+	Got rid of DEFS line by moving G_LOG_DOMAIN setting into INCLUDES.
+	Removed redundant -I from INCLUDES.
+
+Tue Oct 27 04:00:11 1998  Tim Janik  <timj@gtk.org>
+
+	* testgmodule.c (main): changed the #ifdef WIN32 test to NATIVE_WIN32,
+	this needs to be more constistent throughout the code, do we go for
+	NATIVE_WIN32 or WIN32?
+
+	* gmodule.c (LibMain): special cased the #ifdef __LCC__ case for
+	NATIVE_WIN32, since lcc maybe used on other platforms as well.
+	* libgplugin_a.c (LibMain): 
+	* libgplugin_b.c (LibMain): 
+	likewise. not sure i like this special requirement for lcc in here.
+
+	* gmodule-dl.c (_g_module_build_path): 
+	feature empty "" directories and prepend the module name with "lib".
+
+	* gmodule-dld.c (_g_module_build_path): 
+	* gmodule-win32.c (_g_module_build_path): 
+	feature empty "" directories.
+
+	* we need some more magic in the _g_module_build_path variants
+	so we don't append/prepend lib and .so, .sl or .dll for those names
+	that already contain it.
+
+	* applied patch from Tor Lillqvist for g_module_build_path() and
+	windows support.
+
+1998-10-20: Tor Lillqvist <tml@iki.fi>
+
+	* gmodule/gmodule-win32.c:
+	New file.
+
+	* gmodule/gmodule.c gmodule/gmodule.h:
+	Added the funcion g_module_build_path that builds the path to
+	a module file, decorating the name according to the system's
+	conventions.  Added the Windows implementation.
+
+	* gmodule/libgplugin_a.c gmodule/libgplugin_b.c:
+	Added LibMain for LCC-Win32.
+
+	* gmodule/testgmodule.c:
+	Handle Windows dll names.
+
+1998-10-25  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* gmodule.h: Remove `#pragma }'.
+	* gmoduleconf.h.in: Likewise.
+
+Wed Oct 21 19:58:27 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c (g_module_symbol): fixed a string pointer bug that could
+ 	cause garbage error messages from g_module_symbol() for systems that
+	NEED_USCORE.
+
+Mon Sep 21 01:54:48 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.h: 
+	* gmodule.c: renamed old _de_init functionality to _unload.
+	modules are now expected to export:
+	G_MODULE_EXPORT const gchar* g_module_check_init (GModule *module);
+	and
+	G_MODULE_EXPORT void g_module_unload (GModule *module);
+	returning a string other than NULL from g_module_check_init() will
+ 	prevent the module from being loaded. a call to g_module_make_resident()
+	from g_module_unload() will prevent the module from being unloaded and
+	still make it resident.
+
+Thu Sep 17 06:34:22 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.h: 
+	* gmodule.c: implemented g_module_make_resident() which can be
+	used to make modules resident.
+	fixed a buglet about the optional "g_module_de_init" function in
+	modules, which could get invoked twice on very obscure occasions.
+
+Tue Sep 15 14:57:30 1998  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am: Update to libtool-1.2b,
+	change library versioning scheme to drop LT_RELEASE
+	from the -l line, while keeping it in the soname.
+
+Thu Aug 20 07:08:16 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c: provide no operation implementation for the underlying
+	_g_module_* functions, so we at least compile on systems that have
+ 	neither of G_MODULE_IMPL_DL or G_MODULE_IMPL_DLD.
+
+Mon Aug 17 03:41:52 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.h:
+	* gmodule.c (g_module_open): changed the return type for the
+	GModuleCheckInit function to be a string, describing the error
+	condition.
+	(g_module_symbol): show the failing symbol on error messages.
+
+Fri Aug 14 02:24:39 1998  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: feature the G_LOG_DOMAIN macro to set the log domain
+	to "GModule" upon compilation. we currently have to add this definition
+	to the DEFS variable.
+	* testgmodule.c: we need an ugly #undef G_LOG_DOMAIN at the start
+	of this file currently, since automake doesn't support per target
+	_CFLAGS yet.
+
+Mon Aug 10 03:35:57 1998  Tim Janik  <timj@gtk.org>
+
+	* gmodule.c: minor changes to internal interface.
+	* gmodule-dl.c: 
+	* gmodule-dld.c: put some comments into the files, and provided
+	better error checking for shl_findsym(). whish i had a system to
+ 	test this stuff on.
+
+Mon Aug 10 02:18:31 1998  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am (lib_LTLIBRARIES): for now, skip the dependency on
+	-lglib for libgmodule-1.1.la, libgplugin_a.la and libgplugin_b.la
+	since this clashes with inter-library-dependencies for not installed
+	libraries. glib-config takes care of this for the usuall case, but
+	there needs to be a better way...
+
+Sun Aug  9 15:57:38 1998  Tim Janik  <timj@gtk.org>
+
+	* testgmodule.c: test program for GModule.
+	* libgplugin_a.c: 
+	* libgplugin_b.c: test plugins for testgmodule.c.
+
+	* gmodule.h: 
+	* gmodule.c: GModule library implementation, which is basically
+	a wrapper about system specifc dynamic loading facilities.
+
+Sun Aug  9 10:31:05 1998  Tim Janik  <timj@gtk.org>
+
+	* ChangeLog start for gmodule.
diff --git a/gmodule/Makefile.am b/gmodule/Makefile.am
new file mode 100644
index 0000000..80a5605
--- /dev/null
+++ b/gmodule/Makefile.am
@@ -0,0 +1,118 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+AM_CPPFLAGS = 				\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gmodule 	\
+	-DG_LOG_DOMAIN=\"GModule\" 	\
+	@GLIB_DEBUG_FLAGS@ 		\
+	-DG_DISABLE_DEPRECATED
+
+gmodule.def: gmodule.symbols
+	(echo -e EXPORTS; $(CPP) -P - <$(srcdir)/gmodule.symbols | sed -e '/^$$/d' -e 's/^/	/') > gmodule.def
+
+EXTRA_DIST +=				\
+		makefile.msc.in 	\
+		gmoduleconf.h.in 	\
+		gmodule.symbols		\
+		gmodule-dl.c		\
+		gmodule-dld.c		\
+		gmodule-dyld.c		\
+		gmodule-os2.c		\
+		gmodule-win32.c		\
+		gmodule-beos.c		\
+		gmodule-ar.c		\
+		gmoduleconf.h.win32 	\
+		gmodule.rc.in
+
+BUILT_EXTRA_DIST = \
+		makefile.msc	\
+		gmodule.rc
+
+BUILT_SOURCES = gmoduleconf.h
+gmoduleconf.h:	gmoduleconf.h.in
+
+glibincludedir=$(includedir)/glib-2.0
+glibinclude_HEADERS = \
+		gmodule.h
+
+libglib = $(top_builddir)/glib/libglib-2.0.la
+
+top_builddir_full=`cd \$(top_builddir); pwd`
+
+lib_LTLIBRARIES = libgmodule-2.0.la
+
+if OS_WIN32_AND_DLL_COMPILATION
+if MS_LIB_AVAILABLE
+noinst_DATA = gmodule-2.0.lib
+
+install_ms_lib_cmd = $(INSTALL) gmodule-2.0.lib $(DESTDIR)$(libdir)
+uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/gmodule-2.0.lib
+endif
+endif
+
+install-ms-lib:
+	$(install_ms_lib_cmd)
+
+uninstall-ms-lib:
+	$(uninstall_ms_lib_cmd)
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+export_symbols = -export-symbols gmodule.def
+gmodule_def = gmodule.def
+
+gmodule_win32_res = gmodule-win32-res.o
+gmodule_win32_res_ldflag = -Wl,$(gmodule_win32_res)
+
+install-def-file:
+	$(INSTALL) gmodule.def $(DESTDIR)$(libdir)/gmodule-2.0.def
+
+uninstall-def-file:
+	-rm $(DESTDIR)$(libdir)/gmodule-2.0.def
+else
+install-def-file:
+uninstall-def-file:
+endif
+
+libgmodule_2_0_la_SOURCES = gmodule.c
+libgmodule_2_0_la_LDFLAGS = \
+	$(gmodule_win32_res_ldflag) \
+	$(G_MODULE_LDFLAGS) \
+	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+	-export-dynamic $(no_undefined) $(export_symbols)
+
+libgmodule_2_0_la_LIBADD = $(G_MODULE_LIBS_EXTRA) $(G_MODULE_LIBS) $(libglib)
+
+libgmodule_2_0_la_DEPENDENCIES = $(gmodule_win32_res) $(gmodule_def)
+
+gmodule-win32-res.o: gmodule.rc
+	$(WINDRES) gmodule.rc $@
+
+gmodule-2.0.lib: libgmodule-2.0.la gmodule.def
+	lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgmodule-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:gmodule.def -out:$@
+
+.PHONY: files release
+
+files:
+	@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
+	  echo $$p; \
+	done
+
+release:
+	$(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"`
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	@files='$(BUILT_EXTRA_DIST)'; \
+	for f in $$files; do \
+	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
+	  cp $$d/$$f $(distdir) || exit 1; done
+
+
+install-data-local: install-ms-lib install-def-file
+
+uninstall-local: uninstall-ms-lib uninstall-def-file
diff --git a/gmodule/gmodule-ar.c b/gmodule/gmodule-ar.c
new file mode 100644
index 0000000..8bc847d
--- /dev/null
+++ b/gmodule/gmodule-ar.c
@@ -0,0 +1,187 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik
+ *
+ * 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 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.
+ */
+
+/* 
+ * MT safe
+ */
+
+/* because we are compatible with archive format only since AIX 4.3 */
+
+#define __AR_BIG__
+
+#include "config.h"
+
+#include <ar.h>
+#include <stdlib.h>
+
+#include <dlfcn.h>
+
+/* --- functions --- */
+static gchar*
+fetch_dlerror (gboolean replace_null)
+{
+  gchar *msg = dlerror ();
+
+  /* make sure we always return an error message != NULL, if
+   * expected to do so. */
+
+  if (!msg && replace_null)
+    return "unknown dl-error";
+
+  return msg;
+}
+
+static gchar* _g_module_get_member(const gchar* file_name)
+{
+  gchar* member = NULL;
+  struct fl_hdr file_header;
+  struct ar_hdr ar_header;
+  long first_member;
+  long name_len;
+  int fd;
+
+  fd = open(file_name, O_RDONLY);
+  if (fd == -1)
+    return NULL;
+
+  if (read(fd, (void*)&file_header, FL_HSZ) != FL_HSZ)
+    goto exit;
+
+  if (strncmp(file_header.fl_magic, AIAMAGBIG, SAIAMAG) != 0)
+    goto exit;
+
+  /* read first archive file member header */
+
+  first_member = atol(file_header.fl_fstmoff);
+
+  if (lseek(fd, first_member, SEEK_SET) != first_member)
+    goto exit;
+
+  if (read(fd, (void*)&ar_header, AR_HSZ - 2) != AR_HSZ - 2)
+    goto exit;
+
+  /* read member name */
+
+  name_len = atol(ar_header.ar_namlen);
+
+  member = g_malloc(name_len+1);
+  if (!member)
+    goto exit;
+
+  if (read(fd, (void*)member, name_len) != name_len)
+    {
+      g_free(member);
+      member = NULL;
+      goto exit;
+    }
+
+  member[name_len] = 0;
+
+exit:
+  close(fd);
+
+  return member;
+}
+
+static gpointer
+_g_module_open (const gchar *file_name,
+		gboolean     bind_lazy,
+		gboolean     bind_local)
+{
+  gpointer handle;
+  gchar* member;
+  gchar* full_name;
+
+  /* extract name of first member of archive */
+
+  member = _g_module_get_member (file_name);
+  if (member != NULL)
+    {
+      full_name = g_strconcat (file_name, "(", member, ")", NULL);
+      g_free (member);
+    }
+  else
+    full_name = g_strdup (file_name);
+  
+  handle = dlopen (full_name, 
+		   (bind_local ? RTLD_LOCAL : RTLD_GLOBAL) | RTLD_MEMBER | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
+
+  g_free (full_name);
+
+  if (!handle)
+    g_module_set_error (fetch_dlerror (TRUE));
+  
+  return handle;
+}
+
+static gpointer
+_g_module_self (void)
+{
+  gpointer handle;
+
+  handle = dlopen (NULL, RTLD_GLOBAL | RTLD_LAZY);
+  if (!handle)
+    g_module_set_error (fetch_dlerror (TRUE));
+  
+  return handle;
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  /* are there any systems out there that have dlopen()/dlclose()
+   * without a reference count implementation?
+   */
+  is_unref |= 1;
+  
+  if (is_unref)
+    {
+      if (dlclose (handle) != 0)
+	g_module_set_error (fetch_dlerror (TRUE));
+    }
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  gpointer p;
+  
+  p = dlsym (handle, symbol_name);
+  if (!p)
+    g_module_set_error (fetch_dlerror (FALSE));
+  
+  return p;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  if (directory && *directory) {
+    if (strncmp (module_name, "lib", 3) == 0)
+      return g_strconcat (directory, "/", module_name, NULL);
+    else
+      return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL);
+  } else if (strncmp (module_name, "lib", 3) == 0)
+    return g_strdup (module_name);
+  else
+    return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL);
+}
diff --git a/gmodule/gmodule-beos.c b/gmodule/gmodule-beos.c
new file mode 100644
index 0000000..c54eed9
--- /dev/null
+++ b/gmodule/gmodule-beos.c
@@ -0,0 +1,204 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik  
+ *
+ * BeOS GMODULE implementation
+ * Copyright (C) 1999 Richard Offer and Shawn T. Amundson (amundson@gtk.org)
+ *
+ * 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 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.
+ */
+
+/* 
+ * MT safe
+ */
+#include "config.h"
+
+#include <be/kernel/image.h> /* image (aka DSO) handling functions... */
+
+/*
+ * The BeOS doesn't use the same symantics as Unix's dlopen....
+ * 
+ */
+#ifndef	RTLD_GLOBAL
+#define	RTLD_GLOBAL	0
+#endif	/* RTLD_GLOBAL */
+#ifndef	RTLD_LAZY
+#define	RTLD_LAZY	1
+#endif	/* RTLD_LAZY */
+#ifndef	RTLD_NOW
+#define	RTLD_NOW	0
+#endif	/* RTLD_NOW */
+
+
+/*
+ * Points to Ponder
+ * 
+ * You can load the same DSO more than once, in which case you'll have 
+ * different image_id's. While this means that we don't have to worry about 
+ * reference counts, it could lead to problems in the future....
+ * richard.
+ *
+ * load_add_on() apparently does not support lazy or local binding.  Need
+ * to confirm that the actual behavior is non-lazy/local.  --ds
+ */
+
+#include <Errors.h>
+#include <stdio.h>
+
+/* --- functions --- */
+static gpointer
+_g_module_open (const gchar *file_name,
+		gboolean     bind_lazy,
+		gboolean     bind_local)
+{
+  image_id handle;
+  
+  handle = load_add_on (file_name);
+  if (handle < B_OK)
+    {
+      gchar *msg = g_strdup_printf ("failed to load_add_on(%s): %s",
+				    file_name,
+				    strerror (handle));
+      
+      g_module_set_error (msg);
+      g_free (msg);
+      
+      return NULL;
+    }
+  
+  return (gpointer) handle;
+}
+
+static gpointer
+_g_module_self (void)
+{
+  image_info info;
+  int32 cookie = 0;
+  status_t status;
+  
+  /* Is it always the first one?  I'm guessing yes. */
+  status = get_next_image_info (0, &cookie, &info);
+  if (status == B_OK)
+    return (gpointer) info.id;
+  else
+    {
+      gchar *msg = g_strdup_printf ("failed to get_next_image_info(self): %s",
+				    strerror (status));
+      
+      g_module_set_error (msg);
+      g_free (msg);
+      
+      return NULL;
+    }
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  image_info info;
+  gchar *name;
+  
+  if (unload_add_on ((image_id) handle) != B_OK)
+    {
+      gchar *msg;
+      
+      /* Try and get the name of the image. */
+      if (get_image_info ((image_id) handle, &info) != B_OK)
+	name = g_strdup ("unknown");
+      else
+	name = g_strdup (info.name);
+      
+      msg = g_strdup_printf ("failed to unload_add_on(%s): %s", name, strerror (status));
+      g_module_set_error (msg);
+      g_free (msg);
+      g_free (name);
+    }
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  image_id id;
+  status_t status;
+  image_info info;
+  int32 type, name_len;
+  void *p;
+  gchar *msg, name[256];
+  gint n, l;
+  
+  id = (image_id) handle;
+  
+  status = get_image_info (id, &info);
+  if (status != B_OK)
+    {
+      msg = g_strdup_printf ("failed to get_image_info(): %s", strerror (status));
+      g_module_set_error (msg);
+      g_free (msg);
+      
+      return NULL;
+    }
+  
+  l = strlen (symbol_name);
+  name_len = 256;
+  type = B_SYMBOL_TYPE_ANY;
+  n = 0;
+  status = get_nth_image_symbol (id, n, name, &name_len, &type, &p);
+  while (status == B_OK)
+    {
+      if (p && strncmp (name, symbol_name, l) == 0)
+	return p;
+      
+      if (strcmp (name, "_end") == 0)
+        {
+	  msg = g_strdup_printf ("unmatched symbol name `%s'", symbol_name);
+          g_module_set_error (msg);
+	  g_free (msg);
+	  
+	  return NULL;
+        }
+      
+      name_len = 256;
+      type = B_SYMBOL_TYPE_ANY;
+      n++;
+      status = get_nth_image_symbol (id, n, name, &name_len, &type, &p);
+    }
+  
+  msg = g_strdup_printf ("failed to get_image_symbol(%s): %s", symbol_name, strerror (status));
+  g_module_set_error (msg);
+  g_free (msg);
+  
+  return NULL;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  g_warning ("_g_module_build_path() untested for BeOS!");
+  
+  if (directory && *directory)
+    {
+      if (strncmp (module_name, "lib", 3) == 0)
+	return g_strconcat (directory, "/", module_name, NULL);
+      else
+	return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL);
+    }
+  else if (strncmp (module_name, "lib", 3) == 0)
+    return g_strdup (module_name);
+  else
+    return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL);
+}
diff --git a/gmodule/gmodule-dl.c b/gmodule/gmodule-dl.c
new file mode 100644
index 0000000..035b2a9
--- /dev/null
+++ b/gmodule/gmodule-dl.c
@@ -0,0 +1,168 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+#include "config.h"
+
+#include <dlfcn.h>
+
+/* Perl includes <nlist.h> and <link.h> instead of <dlfcn.h> on some systmes? */
+
+
+/* dlerror() is not implemented on all systems
+ */
+#ifndef	G_MODULE_HAVE_DLERROR
+#  ifdef __NetBSD__
+#    define dlerror()	g_strerror (errno)
+#  else /* !__NetBSD__ */
+/* could we rely on errno's state here? */
+#    define dlerror()	"unknown dl-error"
+#  endif /* !__NetBSD__ */
+#endif	/* G_MODULE_HAVE_DLERROR */
+
+/* some flags are missing on some systems, so we provide
+ * harmless defaults.
+ * The Perl sources say, RTLD_LAZY needs to be defined as (1),
+ * at least for Solaris 1.
+ *
+ * Mandatory:
+ * RTLD_LAZY   - resolve undefined symbols as code from the dynamic library
+ *		 is executed.
+ * RTLD_NOW    - resolve all undefined symbols before dlopen returns, and fail
+ *		 if this cannot be done.
+ * Optionally:
+ * RTLD_GLOBAL - the external symbols defined in the library will be made
+ *		 available to subsequently loaded libraries.
+ */
+#ifndef	RTLD_LAZY
+#define	RTLD_LAZY	1
+#endif	/* RTLD_LAZY */
+#ifndef	RTLD_NOW
+#define	RTLD_NOW	0
+#endif	/* RTLD_NOW */
+/* some systems (OSF1 V5.0) have broken RTLD_GLOBAL linkage */
+#ifdef G_MODULE_BROKEN_RTLD_GLOBAL
+#undef	RTLD_GLOBAL
+#endif /* G_MODULE_BROKEN_RTLD_GLOBAL */
+#ifndef	RTLD_GLOBAL
+#define	RTLD_GLOBAL	0
+#endif	/* RTLD_GLOBAL */
+
+
+/* --- functions --- */
+static gchar*
+fetch_dlerror (gboolean replace_null)
+{
+  gchar *msg = dlerror ();
+
+  /* make sure we always return an error message != NULL, if
+   * expected to do so. */
+
+  if (!msg && replace_null)
+    return "unknown dl-error";
+
+  return msg;
+}
+
+static gpointer
+_g_module_open (const gchar *file_name,
+		gboolean     bind_lazy,
+		gboolean     bind_local)
+{
+  gpointer handle;
+  
+  handle = dlopen (file_name,
+		   (bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
+  if (!handle)
+    g_module_set_error (fetch_dlerror (TRUE));
+  
+  return handle;
+}
+
+static gpointer
+_g_module_self (void)
+{
+  gpointer handle;
+  
+  /* to query symbols from the program itself, special link options
+   * are required on some systems.
+   */
+  
+  handle = dlopen (NULL, RTLD_GLOBAL | RTLD_LAZY);
+  if (!handle)
+    g_module_set_error (fetch_dlerror (TRUE));
+  
+  return handle;
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  /* are there any systems out there that have dlopen()/dlclose()
+   * without a reference count implementation?
+   */
+  is_unref |= 1;
+  
+  if (is_unref)
+    {
+      if (dlclose (handle) != 0)
+	g_module_set_error (fetch_dlerror (TRUE));
+    }
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  gpointer p;
+  gchar *msg;
+
+  fetch_dlerror (FALSE);
+  p = dlsym (handle, symbol_name);
+  msg = fetch_dlerror (FALSE);
+  if (msg)
+    g_module_set_error (msg);
+  
+  return p;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  if (directory && *directory) {
+    if (strncmp (module_name, "lib", 3) == 0)
+      return g_strconcat (directory, "/", module_name, NULL);
+    else
+      return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL);
+  } else if (strncmp (module_name, "lib", 3) == 0)
+    return g_strdup (module_name);
+  else
+    return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL);
+}
diff --git a/gmodule/gmodule-dld.c b/gmodule/gmodule-dld.c
new file mode 100644
index 0000000..401b32f
--- /dev/null
+++ b/gmodule/gmodule-dld.c
@@ -0,0 +1,163 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+#include "config.h"
+
+#include <dl.h>
+
+
+/* some flags are missing on some systems, so we provide
+ * harmless defaults.
+ *
+ * Mandatory:
+ * BIND_IMMEDIATE  - Resolve symbol references when the library is loaded.
+ * BIND_DEFERRED   - Delay code symbol resolution until actual reference.
+ *
+ * Optionally:
+ * BIND_FIRST	   - Place the library at the head of the symbol search order.
+ * BIND_NONFATAL   - The default BIND_IMMEDIATE behavior is to treat all unsatisfied
+ *		     symbols as fatal.	This flag allows binding of unsatisfied code
+ *		     symbols to be deferred until use.
+ *		     [Perl: For certain libraries, like DCE, deferred binding often
+ *		     causes run time problems.	Adding BIND_NONFATAL to BIND_IMMEDIATE
+ *		     still allows unresolved references in situations like this.]
+ * BIND_NOSTART	   - Do not call the initializer for the shared library when the
+ *		     library is loaded, nor on a future call to shl_unload().
+ * BIND_VERBOSE	   - Print verbose messages concerning possible unsatisfied symbols.
+ *
+ * hp9000s700/hp9000s800:
+ * BIND_RESTRICTED - Restrict symbols visible by the library to those present at
+ *		     library load time.
+ * DYNAMIC_PATH	   - Allow the loader to dynamically search for the library specified
+ *		     by the path argument.
+ */
+#ifndef	DYNAMIC_PATH
+#define	DYNAMIC_PATH	0
+#endif	/* DYNAMIC_PATH */
+#ifndef	BIND_RESTRICTED
+#define	BIND_RESTRICTED	0
+#endif	/* BIND_RESTRICTED */
+
+#define	OPT_BIND_FLAGS	(BIND_NONFATAL | BIND_VERBOSE)
+
+
+/* --- functions --- */
+
+/*
+ * shl_load() does not appear to support making symbols invisible to
+ * the global namespace.  However, the default is to put the library
+ * last in the search order, which is approximately what we want,
+ * since it will cause symbols that conflict with existing symbols to
+ * be invisible.  It is unclear if BIND_FIRST should be used when
+ * bind_local==0, since it may cause the loaded symbols to be used
+ * preferentially to the application's symbols, which is Almost
+ * Always Wrong.  --ds
+ */
+static gpointer
+_g_module_open (const gchar *file_name,
+		gboolean     bind_lazy,
+		gboolean     bind_local)
+{
+  shl_t shl_handle;
+  
+  shl_handle = shl_load (file_name,
+			 (bind_lazy ? BIND_DEFERRED : BIND_IMMEDIATE) | OPT_BIND_FLAGS, 0);
+  if (!shl_handle)
+    {
+      /* the hp-docs say we should better abort() if errno==ENOSYM ;( */
+      g_module_set_error (g_strerror (errno));
+    }
+  
+  return (gpointer) shl_handle;
+}
+
+static gpointer
+_g_module_self (void)
+{
+  shl_t shl_handle;
+  
+  shl_handle = PROG_HANDLE;
+  if (!shl_handle)
+    g_module_set_error (g_strerror (errno));
+  
+  return shl_handle;
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  if (!is_unref)
+    {
+      if (shl_unload ((shl_t) handle) != 0)
+	g_module_set_error (g_strerror (errno));
+    }
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  gpointer p = NULL;
+  
+  /* should we restrict lookups to TYPE_PROCEDURE?
+   */
+  if (handle == PROG_HANDLE)
+    {
+      /* PROG_HANDLE will only lookup symbols in the program itself, not honouring
+       * libraries. passing NULL as a handle will also try to lookup the symbol
+       * in currently loaded libraries. fix pointed out and supplied by:
+       * David Gero <dgero@nortelnetworks.com>
+       */
+      handle = NULL;
+    }
+  if (shl_findsym ((shl_t*) &handle, symbol_name, TYPE_UNDEFINED, &p) != 0 ||
+      handle == NULL || p == NULL)
+    {
+      /* the hp-docs say we should better abort() if errno==ENOSYM ;( */
+      g_module_set_error (g_strerror (errno));
+    }
+  
+  return p;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  if (directory && *directory)
+    if (strncmp (module_name, "lib", 3) == 0)
+      return g_strconcat (directory, "/", module_name, NULL);
+    else
+      return g_strconcat (directory, "/lib", module_name, ".sl", NULL);
+  else if (strncmp (module_name, "lib", 3) == 0)
+    return g_strdup (module_name);
+  else
+    return g_strconcat ("lib", module_name, ".sl", NULL);
+}
diff --git a/gmodule/gmodule-dyld.c b/gmodule/gmodule-dyld.c
new file mode 100644
index 0000000..1896b43
--- /dev/null
+++ b/gmodule/gmodule-dyld.c
@@ -0,0 +1,154 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik
+ *
+ * dyld (Darwin) GMODULE implementation
+ * Copyright (C) 2001 Dan Winship
+ *
+ * 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 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.
+ */
+#include "config.h"
+
+#include <mach-o/dyld.h>
+
+static gpointer self_module = GINT_TO_POINTER (1);
+
+static gpointer
+_g_module_open (const gchar *file_name,
+		gboolean     bind_lazy,
+		gboolean     bind_local)
+{
+  NSObjectFileImage image;
+  NSObjectFileImageReturnCode ret;
+  NSModule module;
+  unsigned long options;
+  char *msg;
+
+  ret = NSCreateObjectFileImageFromFile (file_name, &image);
+  if (ret != NSObjectFileImageSuccess)
+    {
+      switch (ret)
+	{
+	case NSObjectFileImageInappropriateFile:
+	case NSObjectFileImageFormat:
+	  msg = g_strdup_printf ("%s is not a loadable module", file_name);
+	  break;
+
+	case NSObjectFileImageArch:
+	  msg = g_strdup_printf ("%s is not built for this architecture",
+				 file_name);
+	  break;
+
+	case NSObjectFileImageAccess:
+	  if (access (file_name, F_OK) == 0)
+	    msg = g_strdup_printf ("%s: permission denied", file_name);
+	  else
+	    msg = g_strdup_printf ("%s: no such file or directory", file_name);
+	  break;
+
+	default:
+	  msg = g_strdup_printf ("unknown error for %s", file_name);
+	  break;
+	}
+
+      g_module_set_error (msg);
+      g_free (msg);
+      return NULL;
+    }
+
+  options = NSLINKMODULE_OPTION_RETURN_ON_ERROR;
+  if (bind_local)
+    options |= NSLINKMODULE_OPTION_PRIVATE;
+  if (!bind_lazy)
+    options |= NSLINKMODULE_OPTION_BINDNOW;
+  module = NSLinkModule (image, file_name, options);
+  NSDestroyObjectFileImage (image);
+  if (!module)
+    {
+      NSLinkEditErrors c;
+      int error_number;
+      const char *file, *error;
+
+      NSLinkEditError (&c, &error_number, &file, &error);
+      msg = g_strdup_printf ("could not link %s: %s", file_name, error);
+      g_module_set_error (msg);
+      g_free (msg);
+      return NULL;
+    }
+
+  return module;
+}
+
+static gpointer
+_g_module_self (void)
+{
+  return &self_module;
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  if (handle == &self_module)
+    return;
+
+  if (!NSUnLinkModule (handle, 0))
+    g_module_set_error ("could not unlink module");
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  NSSymbol sym;
+  char *msg;
+
+  if (handle == &self_module)
+    {
+      if (NSIsSymbolNameDefined (symbol_name))
+	sym = NSLookupAndBindSymbol (symbol_name);
+      else
+	sym = NULL;
+    }
+  else
+    sym = NSLookupSymbolInModule (handle, symbol_name);
+
+  if (!sym)
+    {
+      msg = g_strdup_printf ("no such symbol %s", symbol_name);
+      g_module_set_error (msg);
+      g_free (msg);
+      return NULL;
+    }
+
+  return NSAddressOfSymbol (sym);
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  if (directory && *directory)
+    {
+      if (strncmp (module_name, "lib", 3) == 0)
+	return g_strconcat (directory, "/", module_name, NULL);
+      else
+	return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL);
+    }
+  else if (strncmp (module_name, "lib", 3) == 0)
+    return g_strdup (module_name);
+  else
+    return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL);
+}
diff --git a/gmodule/gmodule-os2.c b/gmodule/gmodule-os2.c
new file mode 100644
index 0000000..d074d8c
--- /dev/null
+++ b/gmodule/gmodule-os2.c
@@ -0,0 +1,144 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+#include "config.h"
+
+#include <dlfcn.h>
+
+/* Perl includes <nlist.h> and <link.h> instead of <dlfcn.h> on some systmes? */
+
+
+/* dlerror() is not implemented on all systems
+ */
+#ifndef	G_MODULE_HAVE_DLERROR
+/* could we rely on errno's state here? */
+#  define dlerror()	"unknown dl-error"
+#endif	/* G_MODULE_HAVE_DLERROR */
+
+/* some flags are missing on some systems, so we provide
+ * harmless defaults.
+ * The Perl sources say, RTLD_LAZY needs to be defined as (1),
+ * at least for Solaris 1.
+ *
+ * Mandatory:
+ * RTLD_LAZY   - resolve undefined symbols as code from the dynamic library
+ *		 is executed.
+ * RTLD_NOW    - resolve all undefined symbols before dlopen returns, and fail
+ *		 if this cannot be done.
+ * Optionally:
+ * RTLD_GLOBAL - the external symbols defined in the library will be made
+ *		 available to subsequently loaded libraries.
+ */
+#ifndef	RTLD_GLOBAL
+#define	RTLD_GLOBAL	0
+#endif	/* RTLD_GLOBAL */
+#ifndef	RTLD_LAZY
+#define	RTLD_LAZY	1
+#endif	/* RTLD_LAZY */
+#ifndef	RTLD_NOW
+#define	RTLD_NOW	0
+#endif	/* RTLD_NOW */
+
+
+/* --- functions --- */
+static gpointer
+_g_module_open (const gchar    *file_name,
+		gboolean	bind_lazy,
+		gboolean	bind_local)
+{
+  gpointer handle;
+  
+  handle = dlopen (file_name,
+	(bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
+  if (!handle)
+    g_module_set_error (dlerror ());
+  
+  return handle;
+}
+
+static gpointer
+_g_module_self (void)
+{
+  gpointer handle;
+  
+  /* to query symbols from the program itself, special link options
+   * are required on some systems.
+   */
+  
+  /* XXX, not supported */
+  handle = NULL;
+  g_module_set_error ("module handle for self not supported");
+  
+  return handle;
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  /* are there any systems out there that have dlopen()/dlclose()
+   * without a reference count implementation?
+   */
+  is_unref |= 1;
+  
+  if (is_unref)
+    {
+      /* XXX, no return code */
+      dlclose (handle);
+    }
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  gpointer p;
+  
+  p = dlsym (handle, symbol_name);
+  if (!p)
+    g_module_set_error (dlerror ());
+  
+  return p;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  gchar *suffix = strrchr(module_name, '.');
+  if (directory && *directory)
+    if (suffix && (stricmp (suffix, ".dll") == 0))
+      return g_strconcat (directory, "/", module_name, NULL);
+    else
+      return g_strconcat (directory, "/", module_name, ".dll", NULL);
+  else if (suffix && (stricmp (suffix, ".dll") == 0))
+    return g_strdup (module_name);
+  else
+    return g_strconcat (module_name, ".dll", NULL);
+}
diff --git a/gmodule/gmodule-win32.c b/gmodule/gmodule-win32.c
new file mode 100644
index 0000000..98d3fb9
--- /dev/null
+++ b/gmodule/gmodule-win32.c
@@ -0,0 +1,276 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998, 2000 Tim Janik
+ *
+ * Win32 GMODULE implementation
+ * Copyright (C) 1998 Tor Lillqvist
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+#include "config.h"
+
+#include <stdio.h>
+#include <windows.h>
+
+#include <tlhelp32.h>
+
+#ifdef G_WITH_CYGWIN
+#include <sys/cygwin.h>
+#endif
+
+static void
+set_error (const gchar *format,
+	   ...)
+{
+  gchar *error;
+  gchar *detail;
+  gchar *message;
+  va_list args;
+
+  error = g_win32_error_message (GetLastError ());
+
+  va_start (args, format);
+  detail = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  message = g_strconcat (detail, error, NULL);
+
+  g_module_set_error (message);
+  g_free (message);
+  g_free (detail);
+  g_free (error);
+}
+
+/* --- functions --- */
+static gpointer
+_g_module_open (const gchar *file_name,
+		gboolean     bind_lazy,
+		gboolean     bind_local)
+{
+  HINSTANCE handle;
+  wchar_t *wfilename;
+#ifdef G_WITH_CYGWIN
+  gchar tmp[MAX_PATH];
+
+  cygwin_conv_to_win32_path(file_name, tmp);
+  file_name = tmp;
+#endif
+  wfilename = g_utf8_to_utf16 (file_name, -1, NULL, NULL, NULL);
+
+  handle = LoadLibraryW (wfilename);
+  g_free (wfilename);
+      
+  if (!handle)
+    set_error ("`%s': ", file_name);
+
+  return handle;
+}
+
+static gint dummy;
+static gpointer null_module_handle = &dummy;
+  
+static gpointer
+_g_module_self (void)
+{
+  return null_module_handle;
+}
+
+static void
+_g_module_close (gpointer handle,
+		 gboolean is_unref)
+{
+  if (handle != null_module_handle)
+    if (!FreeLibrary (handle))
+      set_error ("");
+}
+
+static gpointer
+find_in_any_module_using_toolhelp (const gchar *symbol_name)
+{
+  typedef HANDLE (WINAPI *PFNCREATETOOLHELP32SNAPSHOT)(DWORD, DWORD);
+  static PFNCREATETOOLHELP32SNAPSHOT pfnCreateToolhelp32Snapshot = NULL;
+
+  typedef BOOL (WINAPI *PFNMODULE32FIRST)(HANDLE, MODULEENTRY32*);
+  static PFNMODULE32FIRST pfnModule32First= NULL;
+
+  typedef BOOL (WINAPI *PFNMODULE32NEXT)(HANDLE, MODULEENTRY32*);
+  static PFNMODULE32NEXT pfnModule32Next = NULL;
+
+  static HMODULE kernel32;
+
+  HANDLE snapshot; 
+  MODULEENTRY32 me32;
+
+  gpointer p;
+
+  if (!pfnCreateToolhelp32Snapshot || !pfnModule32First || !pfnModule32Next)
+    {
+      if (!kernel32)
+	if (!(kernel32 = GetModuleHandle ("kernel32.dll")))
+	  return NULL;
+
+      if (!(pfnCreateToolhelp32Snapshot = (PFNCREATETOOLHELP32SNAPSHOT) GetProcAddress (kernel32, "CreateToolhelp32Snapshot"))
+	  || !(pfnModule32First = (PFNMODULE32FIRST) GetProcAddress (kernel32, "Module32First"))
+	  || !(pfnModule32Next = (PFNMODULE32NEXT) GetProcAddress (kernel32, "Module32Next")))
+	return NULL;
+    }
+
+  if ((snapshot = (*pfnCreateToolhelp32Snapshot) (TH32CS_SNAPMODULE, 0)) == (HANDLE) -1)
+    return NULL;
+
+  me32.dwSize = sizeof (me32);
+  p = NULL;
+  if ((*pfnModule32First) (snapshot, &me32))
+    {
+      do {
+	if ((p = GetProcAddress (me32.hModule, symbol_name)) != NULL)
+	  break;
+      } while ((*pfnModule32Next) (snapshot, &me32));
+    }
+
+  CloseHandle (snapshot);
+
+  return p;
+}
+
+static gpointer
+find_in_any_module_using_psapi (const gchar *symbol_name)
+{
+  static HMODULE psapi = NULL;
+
+  typedef BOOL (WINAPI *PFNENUMPROCESSMODULES) (HANDLE, HMODULE *, DWORD, LPDWORD) ;
+  static PFNENUMPROCESSMODULES pfnEnumProcessModules = NULL;
+
+  HMODULE *modules;
+  HMODULE dummy;
+  gint i, size;
+  DWORD needed;
+  
+  gpointer p;
+
+  if (!pfnEnumProcessModules)
+    {
+      if (!psapi)
+	if ((psapi = LoadLibrary ("psapi.dll")) == NULL)
+	  return NULL;
+
+      if (!(pfnEnumProcessModules = (PFNENUMPROCESSMODULES) GetProcAddress (psapi, "EnumProcessModules")))
+	return NULL;
+    }
+
+  if (!(*pfnEnumProcessModules) (GetCurrentProcess (), &dummy,
+				 sizeof (HMODULE), &needed))
+    return NULL;
+
+  size = needed + 10 * sizeof (HMODULE);
+  modules = g_malloc (size);
+
+  if (!(*pfnEnumProcessModules) (GetCurrentProcess (), modules,
+				 size, &needed)
+      || needed > size)
+    {
+      g_free (modules);
+      return NULL;
+    }
+  
+  p = NULL;
+  for (i = 0; i < needed / sizeof (HMODULE); i++)
+    if ((p = GetProcAddress (modules[i], symbol_name)) != NULL)
+      break;
+
+  g_free (modules);
+
+  return p;
+}
+
+static gpointer
+find_in_any_module (const gchar *symbol_name)
+{
+  gpointer result;
+
+  if ((result = find_in_any_module_using_toolhelp (symbol_name)) == NULL
+      && (result = find_in_any_module_using_psapi (symbol_name)) == NULL)
+    return NULL;
+  else
+    return result;
+}
+
+static gpointer
+_g_module_symbol (gpointer     handle,
+		  const gchar *symbol_name)
+{
+  gpointer p;
+  
+  if (handle == null_module_handle)
+    {
+      if ((p = GetProcAddress (GetModuleHandle (NULL), symbol_name)) == NULL)
+	p = find_in_any_module (symbol_name);
+    }
+  else
+    p = GetProcAddress (handle, symbol_name);
+
+  if (!p)
+    set_error ("");
+
+  return p;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  gint k;
+
+  k = strlen (module_name);
+    
+  if (directory && *directory)
+    if (k > 4 && g_ascii_strcasecmp (module_name + k - 4, ".dll") == 0)
+      return g_strconcat (directory, G_DIR_SEPARATOR_S, module_name, NULL);
+#ifdef G_WITH_CYGWIN
+    else if (strncmp (module_name, "lib", 3) == 0 || strncmp (module_name, "cyg", 3) == 0)
+      return g_strconcat (directory, G_DIR_SEPARATOR_S, module_name, ".dll", NULL);
+    else
+      return g_strconcat (directory, G_DIR_SEPARATOR_S, "cyg", module_name, ".dll", NULL);
+#else
+    else if (strncmp (module_name, "lib", 3) == 0)
+      return g_strconcat (directory, G_DIR_SEPARATOR_S, module_name, ".dll", NULL);
+    else
+      return g_strconcat (directory, G_DIR_SEPARATOR_S, "lib", module_name, ".dll", NULL);
+#endif
+  else if (k > 4 && g_ascii_strcasecmp (module_name + k - 4, ".dll") == 0)
+    return g_strdup (module_name);
+#ifdef G_WITH_CYGWIN
+  else if (strncmp (module_name, "lib", 3) == 0 || strncmp (module_name, "cyg", 3) == 0)
+    return g_strconcat (module_name, ".dll", NULL);
+  else
+    return g_strconcat ("cyg", module_name, ".dll", NULL);
+#else
+  else if (strncmp (module_name, "lib", 3) == 0)
+    return g_strconcat (module_name, ".dll", NULL);
+  else
+    return g_strconcat ("lib", module_name, ".dll", NULL);
+#endif
+}
diff --git a/gmodule/gmodule.c b/gmodule/gmodule.c
new file mode 100644
index 0000000..2d7f410
--- /dev/null
+++ b/gmodule/gmodule.c
@@ -0,0 +1,686 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include "glib.h"
+#include "gmodule.h"
+
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef G_OS_WIN32
+#include <io.h>		/* For open() and close() prototypes. */
+#endif
+
+#include "gmoduleconf.h"
+#include "gstdio.h"
+
+/* We maintain a list of modules, so we can reference count them.
+ * That's needed because some platforms don't support refernce counts on
+ * modules e.g. the shl_* implementation of HP-UX
+ * (http://www.stat.umn.edu/~luke/xls/projects/dlbasics/dlbasics.html).
+ * Also, the module for the program itself is kept seperatedly for
+ * faster access and because it has special semantics.
+ */
+
+
+/* --- structures --- */
+struct _GModule
+{
+  gchar	*file_name;
+#if defined (G_OS_WIN32) && !defined(_WIN64)
+  gchar *cp_file_name;
+#endif
+  gpointer handle;
+  guint ref_count : 31;
+  guint is_resident : 1;
+  GModuleUnload unload;
+  GModule *next;
+};
+
+
+/* --- prototypes --- */
+static gpointer		_g_module_open		(const gchar	*file_name,
+						 gboolean	 bind_lazy,
+						 gboolean	 bind_local);
+static void		_g_module_close		(gpointer	 handle,
+						 gboolean	 is_unref);
+static gpointer		_g_module_self		(void);
+static gpointer		_g_module_symbol	(gpointer	 handle,
+						 const gchar	*symbol_name);
+static gchar*		_g_module_build_path	(const gchar	*directory,
+						 const gchar	*module_name);
+static inline void	g_module_set_error	(const gchar	*error);
+static inline GModule*	g_module_find_by_handle (gpointer	 handle);
+static inline GModule*	g_module_find_by_name	(const gchar	*name);
+
+
+/* --- variables --- */
+static GModule	     *modules = NULL;
+static GModule	     *main_module = NULL;
+static GStaticPrivate module_error_private = G_STATIC_PRIVATE_INIT;
+static gboolean	      module_debug_initialized = FALSE;
+static guint	      module_debug_flags = 0;
+
+
+/* --- inline functions --- */
+static inline GModule*
+g_module_find_by_handle (gpointer handle)
+{
+  GModule *module;
+  GModule *retval = NULL;
+  
+  if (main_module && main_module->handle == handle)
+    retval = main_module;
+  else
+    for (module = modules; module; module = module->next)
+      if (handle == module->handle)
+	{
+	  retval = module;
+	  break;
+	}
+
+  return retval;
+}
+
+static inline GModule*
+g_module_find_by_name (const gchar *name)
+{
+  GModule *module;
+  GModule *retval = NULL;
+  
+  for (module = modules; module; module = module->next)
+    if (strcmp (name, module->file_name) == 0)
+	{
+	  retval = module;
+	  break;
+	}
+
+  return retval;
+}
+
+static inline void
+g_module_set_error_unduped (gchar *error)
+{
+  g_static_private_set (&module_error_private, error, g_free);
+  errno = 0;
+}
+
+static inline void
+g_module_set_error (const gchar *error)
+{
+  g_module_set_error_unduped (g_strdup (error));
+}
+
+
+/* --- include platform specifc code --- */
+#define	SUPPORT_OR_RETURN(rv)	{ g_module_set_error (NULL); }
+#if	(G_MODULE_IMPL == G_MODULE_IMPL_DL)
+#include "gmodule-dl.c"
+#elif	(G_MODULE_IMPL == G_MODULE_IMPL_DLD)
+#include "gmodule-dld.c"
+#elif	(G_MODULE_IMPL == G_MODULE_IMPL_WIN32)
+#include "gmodule-win32.c"
+#elif	(G_MODULE_IMPL == G_MODULE_IMPL_DYLD)
+#include "gmodule-dyld.c"
+#elif	(G_MODULE_IMPL == G_MODULE_IMPL_AR)
+#include "gmodule-ar.c"
+#else
+#undef	SUPPORT_OR_RETURN
+#define	SUPPORT_OR_RETURN(rv)	{ g_module_set_error ("dynamic modules are " \
+                                              "not supported by this system"); return rv; }
+static gpointer
+_g_module_open (const gchar	*file_name,
+		gboolean	 bind_lazy,
+		gboolean	 bind_local)
+{
+  return NULL;
+}
+static void
+_g_module_close	(gpointer	 handle,
+		 gboolean	 is_unref)
+{
+}
+static gpointer
+_g_module_self (void)
+{
+  return NULL;
+}
+static gpointer
+_g_module_symbol (gpointer	 handle,
+		  const gchar	*symbol_name)
+{
+  return NULL;
+}
+static gchar*
+_g_module_build_path (const gchar *directory,
+		      const gchar *module_name)
+{
+  return NULL;
+}
+#endif	/* no implementation */
+
+/* --- functions --- */
+gboolean
+g_module_supported (void)
+{
+  SUPPORT_OR_RETURN (FALSE);
+  
+  return TRUE;
+}
+
+static gchar*
+parse_libtool_archive (const gchar* libtool_name)
+{
+  const guint TOKEN_DLNAME = G_TOKEN_LAST + 1;
+  const guint TOKEN_INSTALLED = G_TOKEN_LAST + 2;
+  const guint TOKEN_LIBDIR = G_TOKEN_LAST + 3;
+  gchar *lt_dlname = NULL;
+  gboolean lt_installed = TRUE;
+  gchar *lt_libdir = NULL;
+  gchar *name;
+  GTokenType token;
+  GScanner *scanner;
+  
+  int fd = g_open (libtool_name, O_RDONLY, 0);
+  if (fd < 0)
+    {
+      gchar *display_libtool_name = g_filename_display_name (libtool_name);
+      g_module_set_error_unduped (g_strdup_printf ("failed to open libtool archive \"%s\"", display_libtool_name));
+      g_free (display_libtool_name);
+      return NULL;
+    }
+  /* search libtool's dlname specification  */
+  scanner = g_scanner_new (NULL);
+  g_scanner_input_file (scanner, fd);
+  scanner->config->symbol_2_token = TRUE;
+  g_scanner_scope_add_symbol (scanner, 0, "dlname", 
+			      GUINT_TO_POINTER (TOKEN_DLNAME));
+  g_scanner_scope_add_symbol (scanner, 0, "installed", 
+			      GUINT_TO_POINTER (TOKEN_INSTALLED));
+  g_scanner_scope_add_symbol (scanner, 0, "libdir", 
+			      GUINT_TO_POINTER (TOKEN_LIBDIR));
+  while (!g_scanner_eof (scanner))
+    {
+      token = g_scanner_get_next_token (scanner);
+      if (token == TOKEN_DLNAME || token == TOKEN_INSTALLED || 
+	  token == TOKEN_LIBDIR)
+	{
+	  if (g_scanner_get_next_token (scanner) != '=' ||
+	      g_scanner_get_next_token (scanner) != 
+	      (token == TOKEN_INSTALLED ? 
+	       G_TOKEN_IDENTIFIER : G_TOKEN_STRING))
+	    {
+	      gchar *display_libtool_name = g_filename_display_name (libtool_name);
+	      g_module_set_error_unduped (g_strdup_printf ("unable to parse libtool archive \"%s\"", display_libtool_name));
+	      g_free (display_libtool_name);
+
+	      g_free (lt_dlname);
+	      g_free (lt_libdir);
+	      g_scanner_destroy (scanner);
+	      close (fd);
+
+	      return NULL;
+	    }
+	  else
+	    {
+	      if (token == TOKEN_DLNAME)
+		{
+		  g_free (lt_dlname);
+		  lt_dlname = g_strdup (scanner->value.v_string);
+		}
+	      else if (token == TOKEN_INSTALLED)
+		lt_installed = 
+		  strcmp (scanner->value.v_identifier, "yes") == 0;
+	      else /* token == TOKEN_LIBDIR */
+		{
+		  g_free (lt_libdir);
+		  lt_libdir = g_strdup (scanner->value.v_string);
+		}
+	    }
+	}      
+    }
+
+  if (!lt_installed)
+    {
+      gchar *dir = g_path_get_dirname (libtool_name);
+      g_free (lt_libdir);
+      lt_libdir = g_strconcat (dir, G_DIR_SEPARATOR_S ".libs", NULL);
+      g_free (dir);
+    }
+
+  name = g_strconcat (lt_libdir, G_DIR_SEPARATOR_S, lt_dlname, NULL);
+  
+  g_free (lt_dlname);
+  g_free (lt_libdir);
+  g_scanner_destroy (scanner);
+  close (fd);
+
+  return name;
+}
+
+static inline gboolean
+str_check_suffix (const gchar* string,
+		  const gchar* suffix)
+{
+  gsize string_len = strlen (string);    
+  gsize suffix_len = strlen (suffix);    
+
+  return string_len >= suffix_len && 
+    strcmp (string + string_len - suffix_len, suffix) == 0;
+}
+
+enum
+{
+  G_MODULE_DEBUG_RESIDENT_MODULES = 1 << 0,
+  G_MODULE_DEBUG_BIND_NOW_MODULES = 1 << 1
+};
+
+static void
+_g_module_debug_init (void)
+{
+  const GDebugKey keys[] = {
+    { "resident-modules", G_MODULE_DEBUG_RESIDENT_MODULES },
+    { "bind-now-modules", G_MODULE_DEBUG_BIND_NOW_MODULES }
+  };
+  const gchar *env;
+
+  env = g_getenv ("G_DEBUG");
+
+  module_debug_flags =
+    !env ? 0 : g_parse_debug_string (env, keys, G_N_ELEMENTS (keys));
+
+  module_debug_initialized = TRUE;
+}
+
+static GStaticRecMutex g_module_global_lock = G_STATIC_REC_MUTEX_INIT;
+
+GModule*
+g_module_open (const gchar    *file_name,
+	       GModuleFlags    flags)
+{
+  GModule *module;
+  gpointer handle = NULL;
+  gchar *name = NULL;
+  
+  SUPPORT_OR_RETURN (NULL);
+  
+  g_static_rec_mutex_lock (&g_module_global_lock);
+
+  if (G_UNLIKELY (!module_debug_initialized))
+    _g_module_debug_init ();
+
+  if (module_debug_flags & G_MODULE_DEBUG_BIND_NOW_MODULES)
+    flags &= ~G_MODULE_BIND_LAZY;
+
+  if (!file_name)
+    {      
+      if (!main_module)
+	{
+	  handle = _g_module_self ();
+	  if (handle)
+	    {
+	      main_module = g_new (GModule, 1);
+	      main_module->file_name = NULL;
+#if defined (G_OS_WIN32) && !defined(_WIN64)
+	      main_module->cp_file_name = NULL;
+#endif
+	      main_module->handle = handle;
+	      main_module->ref_count = 1;
+	      main_module->is_resident = TRUE;
+	      main_module->unload = NULL;
+	      main_module->next = NULL;
+	    }
+	}
+      else
+	main_module->ref_count++;
+
+      g_static_rec_mutex_unlock (&g_module_global_lock);
+      return main_module;
+    }
+  
+  /* we first search the module list by name */
+  module = g_module_find_by_name (file_name);
+  if (module)
+    {
+      module->ref_count++;
+      
+      g_static_rec_mutex_unlock (&g_module_global_lock);
+      return module;
+    }
+
+  /* check whether we have a readable file right away */
+  if (g_file_test (file_name, G_FILE_TEST_IS_REGULAR))
+    name = g_strdup (file_name);
+  /* try completing file name with standard library suffix */
+  if (!name)
+    {
+      name = g_strconcat (file_name, "." G_MODULE_SUFFIX, NULL);
+      if (!g_file_test (name, G_FILE_TEST_IS_REGULAR))
+	{
+	  g_free (name);
+	  name = NULL;
+	}
+    }
+  /* try completing by appending libtool suffix */
+  if (!name)
+    {
+      name = g_strconcat (file_name, ".la", NULL);
+      if (!g_file_test (name, G_FILE_TEST_IS_REGULAR))
+	{
+	  g_free (name);
+	  name = NULL;
+	}
+    }
+  /* we can't access() the file, lets hope the platform backends finds
+   * it via library paths
+   */
+  if (!name)
+    {
+      gchar *dot = strrchr (file_name, '.');
+      gchar *slash = strrchr (file_name, G_DIR_SEPARATOR);
+      
+      /* make sure the name has a suffix */
+      if (!dot || dot < slash)
+	name = g_strconcat (file_name, "." G_MODULE_SUFFIX, NULL);
+      else
+	name = g_strdup (file_name);
+    }
+
+  /* ok, try loading the module */
+  if (name)
+    {
+      /* if it's a libtool archive, figure library file to load */
+      if (str_check_suffix (name, ".la")) /* libtool archive? */
+	{
+	  gchar *real_name = parse_libtool_archive (name);
+
+	  /* real_name might be NULL, but then module error is already set */
+	  if (real_name)
+	    {
+	      g_free (name);
+	      name = real_name;
+            }
+	}
+      if (name)
+	handle = _g_module_open (name, (flags & G_MODULE_BIND_LAZY) != 0,
+			(flags & G_MODULE_BIND_LOCAL) != 0);
+    }
+  else
+    {
+      gchar *display_file_name = g_filename_display_name (file_name);
+      g_module_set_error_unduped (g_strdup_printf ("unable to access file \"%s\"", display_file_name));
+      g_free (display_file_name);
+    }
+  g_free (name);
+
+  if (handle)
+    {
+      gchar *saved_error;
+      GModuleCheckInit check_init;
+      const gchar *check_failed = NULL;
+      
+      /* search the module list by handle, since file names are not unique */
+      module = g_module_find_by_handle (handle);
+      if (module)
+	{
+	  _g_module_close (module->handle, TRUE);
+	  module->ref_count++;
+	  g_module_set_error (NULL);
+	  
+	  g_static_rec_mutex_unlock (&g_module_global_lock);
+	  return module;
+	}
+      
+      saved_error = g_strdup (g_module_error ());
+      g_module_set_error (NULL);
+      
+      module = g_new (GModule, 1);
+      module->file_name = g_strdup (file_name);
+#if defined (G_OS_WIN32) && !defined(_WIN64)
+      module->cp_file_name = g_locale_from_utf8 (file_name, -1,
+						 NULL, NULL, NULL);
+#endif
+      module->handle = handle;
+      module->ref_count = 1;
+      module->is_resident = FALSE;
+      module->unload = NULL;
+      module->next = modules;
+      modules = module;
+      
+      /* check initialization */
+      if (g_module_symbol (module, "g_module_check_init", (gpointer) &check_init) && check_init != NULL)
+	check_failed = check_init (module);
+      
+      /* we don't call unload() if the initialization check failed. */
+      if (!check_failed)
+	g_module_symbol (module, "g_module_unload", (gpointer) &module->unload);
+      
+      if (check_failed)
+	{
+	  gchar *error;
+
+	  error = g_strconcat ("GModule (", 
+                               file_name ? file_name : "NULL", 
+                               ") initialization check failed: ", 
+                               check_failed, NULL);
+	  g_module_close (module);
+	  module = NULL;
+	  g_module_set_error (error);
+	  g_free (error);
+	}
+      else
+	g_module_set_error (saved_error);
+
+      g_free (saved_error);
+    }
+
+  if (module != NULL &&
+      (module_debug_flags & G_MODULE_DEBUG_RESIDENT_MODULES))
+    g_module_make_resident (module);
+
+  g_static_rec_mutex_unlock (&g_module_global_lock);
+  return module;
+}
+
+#if defined (G_OS_WIN32) && !defined(_WIN64)
+
+#undef g_module_open
+
+GModule*
+g_module_open (const gchar    *file_name,
+	       GModuleFlags    flags)
+{
+  gchar *utf8_file_name = g_locale_to_utf8 (file_name, -1, NULL, NULL, NULL);
+  GModule *retval = g_module_open_utf8 (utf8_file_name, flags);
+
+  g_free (utf8_file_name);
+
+  return retval;
+}
+
+#endif
+
+gboolean
+g_module_close (GModule	       *module)
+{
+  SUPPORT_OR_RETURN (FALSE);
+  
+  g_return_val_if_fail (module != NULL, FALSE);
+  g_return_val_if_fail (module->ref_count > 0, FALSE);
+  
+  g_static_rec_mutex_lock (&g_module_global_lock);
+
+  module->ref_count--;
+  
+  if (!module->ref_count && !module->is_resident && module->unload)
+    {
+      GModuleUnload unload;
+
+      unload = module->unload;
+      module->unload = NULL;
+      unload (module);
+    }
+
+  if (!module->ref_count && !module->is_resident)
+    {
+      GModule *last;
+      GModule *node;
+      
+      last = NULL;
+      
+      node = modules;
+      while (node)
+	{
+	  if (node == module)
+	    {
+	      if (last)
+		last->next = node->next;
+	      else
+		modules = node->next;
+	      break;
+	    }
+	  last = node;
+	  node = last->next;
+	}
+      module->next = NULL;
+      
+      _g_module_close (module->handle, FALSE);
+      g_free (module->file_name);
+#if defined (G_OS_WIN32) && !defined(_WIN64)
+      g_free (module->cp_file_name);
+#endif
+      g_free (module);
+    }
+  
+  g_static_rec_mutex_unlock (&g_module_global_lock);
+  return g_module_error() == NULL;
+}
+
+void
+g_module_make_resident (GModule *module)
+{
+  g_return_if_fail (module != NULL);
+
+  module->is_resident = TRUE;
+}
+
+G_CONST_RETURN gchar*
+g_module_error (void)
+{
+  return g_static_private_get (&module_error_private);
+}
+
+gboolean
+g_module_symbol (GModule	*module,
+		 const gchar	*symbol_name,
+		 gpointer	*symbol)
+{
+  const gchar *module_error;
+
+  if (symbol)
+    *symbol = NULL;
+  SUPPORT_OR_RETURN (FALSE);
+  
+  g_return_val_if_fail (module != NULL, FALSE);
+  g_return_val_if_fail (symbol_name != NULL, FALSE);
+  g_return_val_if_fail (symbol != NULL, FALSE);
+  
+  g_static_rec_mutex_lock (&g_module_global_lock);
+
+#ifdef	G_MODULE_NEED_USCORE
+  {
+    gchar *name;
+
+    name = g_strconcat ("_", symbol_name, NULL);
+    *symbol = _g_module_symbol (module->handle, name);
+    g_free (name);
+  }
+#else	/* !G_MODULE_NEED_USCORE */
+  *symbol = _g_module_symbol (module->handle, symbol_name);
+#endif	/* !G_MODULE_NEED_USCORE */
+  
+  module_error = g_module_error ();
+  if (module_error)
+    {
+      gchar *error;
+
+      error = g_strconcat ("`", symbol_name, "': ", module_error, NULL);
+      g_module_set_error (error);
+      g_free (error);
+      *symbol = NULL;
+    }
+  
+  g_static_rec_mutex_unlock (&g_module_global_lock);
+  return !module_error;
+}
+
+G_CONST_RETURN gchar*
+g_module_name (GModule *module)
+{
+  g_return_val_if_fail (module != NULL, NULL);
+  
+  if (module == main_module)
+    return "main";
+  
+  return module->file_name;
+}
+
+#if defined (G_OS_WIN32) && !defined(_WIN64)
+
+#undef g_module_name
+
+G_CONST_RETURN gchar*
+g_module_name (GModule *module)
+{
+  g_return_val_if_fail (module != NULL, NULL);
+  
+  if (module == main_module)
+    return "main";
+  
+  return module->cp_file_name;
+}
+
+#endif
+
+gchar*
+g_module_build_path (const gchar *directory,
+		     const gchar *module_name)
+{
+  g_return_val_if_fail (module_name != NULL, NULL);
+  
+  return _g_module_build_path (directory, module_name);
+}
diff --git a/gmodule/gmodule.h b/gmodule/gmodule.h
new file mode 100644
index 0000000..ae7f8e5
--- /dev/null
+++ b/gmodule/gmodule.h
@@ -0,0 +1,101 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#ifndef __GMODULE_H__
+#define __GMODULE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/* exporting and importing functions, this is special cased
+ * to feature Windows dll stubs.
+ */
+#define	G_MODULE_IMPORT		extern
+#ifdef G_PLATFORM_WIN32
+#  define	G_MODULE_EXPORT		__declspec(dllexport)
+#else /* !G_PLATFORM_WIN32 */
+#  define	G_MODULE_EXPORT
+#endif /* !G_PLATFORM_WIN32 */
+
+typedef enum
+{
+  G_MODULE_BIND_LAZY	= 1 << 0,
+  G_MODULE_BIND_LOCAL	= 1 << 1,
+  G_MODULE_BIND_MASK	= 0x03
+} GModuleFlags;
+
+typedef	struct _GModule			 GModule;
+typedef const gchar* (*GModuleCheckInit) (GModule	*module);
+typedef void	     (*GModuleUnload)	 (GModule	*module);
+
+#ifdef G_OS_WIN32
+#define g_module_open g_module_open_utf8
+#define g_module_name g_module_name_utf8
+#endif
+
+/* return TRUE if dynamic module loading is supported */
+gboolean	g_module_supported	   (void) G_GNUC_CONST;
+
+/* open a module `file_name' and return handle, which is NULL on error */
+GModule*              g_module_open          (const gchar  *file_name,
+					      GModuleFlags  flags);
+
+/* close a previously opened module, returns TRUE on success */
+gboolean              g_module_close         (GModule      *module);
+
+/* make a module resident so g_module_close on it will be ignored */
+void                  g_module_make_resident (GModule      *module);
+
+/* query the last module error as a string */
+G_CONST_RETURN gchar* g_module_error         (void);
+
+/* retrieve a symbol pointer from `module', returns TRUE on success */
+gboolean              g_module_symbol        (GModule      *module,
+					      const gchar  *symbol_name,
+					      gpointer     *symbol);
+
+/* retrieve the file name from an existing module */
+G_CONST_RETURN gchar* g_module_name          (GModule      *module);
+
+/* Build the actual file name containing a module. `directory' is the
+ * directory where the module file is supposed to be, or NULL or empty
+ * in which case it should either be in the current directory or, on
+ * some operating systems, in some standard place, for instance on the
+ * PATH. Hence, to be absoultely sure to get the correct module,
+ * always pass in a directory. The file name consists of the directory,
+ * if supplied, and `module_name' suitably decorated accoring to
+ * the operating system's conventions (for instance lib*.so or *.dll).
+ *
+ * No checks are made that the file exists, or is of correct type.
+ */
+gchar*                g_module_build_path    (const gchar  *directory,
+					      const gchar  *module_name);
+
+
+G_END_DECLS
+
+#endif /* __GMODULE_H__ */
diff --git a/gmodule/gmodule.rc.in b/gmodule/gmodule.rc.in
new file mode 100644
index 0000000..cc49014
--- /dev/null
+++ b/gmodule/gmodule.rc.in
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @GLIB_MAJOR_VERSION@,@GLIB_MINOR_VERSION@,@GLIB_MICRO_VERSION@,0
+  PRODUCTVERSION @GLIB_MAJOR_VERSION@,@GLIB_MINOR_VERSION@,@GLIB_MICRO_VERSION@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+	VALUE "CompanyName", "The GLib developer community"
+	VALUE "FileDescription", "GModule"
+	VALUE "FileVersion", "@GLIB_VERSION@.0"
+	VALUE "InternalName", "libgmodule-2.0-@LT_CURRENT_MINUS_AGE@"
+	VALUE "LegalCopyright", "Copyright © 1998-2000 Tim Janik. Modified by the GLib Team and others 1998-2004."
+	VALUE "OriginalFilename", "libgmodule-2.0-@LT_CURRENT_MINUS_AGE@.dll"
+	VALUE "ProductName", "GLib"
+	VALUE "ProductVersion", "@GLIB_VERSION@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/gmodule/gmodule.symbols b/gmodule/gmodule.symbols
new file mode 100644
index 0000000..1d5b6e3
--- /dev/null
+++ b/gmodule/gmodule.symbols
@@ -0,0 +1,14 @@
+g_module_build_path
+g_module_close
+g_module_error
+g_module_make_resident
+#ifndef _WIN64
+g_module_name PRIVATE
+#endif
+g_module_name_utf8
+#ifndef _WIN64
+g_module_open PRIVATE
+#endif
+g_module_open_utf8
+g_module_supported
+g_module_symbol
diff --git a/gmodule/gmoduleconf.h.in b/gmodule/gmoduleconf.h.in
new file mode 100644
index 0000000..168cf23
--- /dev/null
+++ b/gmodule/gmoduleconf.h.in
@@ -0,0 +1,54 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+#ifndef __G_MODULE_CONF_H__
+#define __G_MODULE_CONF_H__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#define	G_MODULE_IMPL_NONE	0
+#define	G_MODULE_IMPL_DL	1
+#define	G_MODULE_IMPL_DLD	2
+#define	G_MODULE_IMPL_WIN32	3
+#define	G_MODULE_IMPL_OS2	4
+#define	G_MODULE_IMPL_BEOS	5
+#define	G_MODULE_IMPL_DYLD	6
+#define	G_MODULE_IMPL_AR	7
+
+#define	G_MODULE_IMPL		@G_MODULE_IMPL@
+#undef	G_MODULE_HAVE_DLERROR
+#if	(@G_MODULE_HAVE_DLERROR@)
+#define	G_MODULE_HAVE_DLERROR
+#endif
+#if	(@G_MODULE_NEED_USCORE@) || defined (hp9000s300) || defined (__hp9000s300) || defined (__hp9000s300__)
+#define	G_MODULE_NEED_USCORE
+#endif
+#if	(@G_MODULE_BROKEN_RTLD_GLOBAL@)
+#define G_MODULE_BROKEN_RTLD_GLOBAL
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __G_MODULE_CONF_H__ */
diff --git a/gmodule/gmoduleconf.h.win32 b/gmodule/gmoduleconf.h.win32
new file mode 100644
index 0000000..18bee9b
--- /dev/null
+++ b/gmodule/gmoduleconf.h.win32
@@ -0,0 +1,44 @@
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+#ifndef __G_MODULE_CONF_H__
+#define __G_MODULE_CONF_H__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#define	G_MODULE_IMPL_NONE	0
+#define	G_MODULE_IMPL_DL	1
+#define	G_MODULE_IMPL_DLD	2
+#define	G_MODULE_IMPL_WIN32	3
+#define	G_MODULE_IMPL_OS2	4
+#define	G_MODULE_IMPL_BEOS	5
+#define	G_MODULE_IMPL_DYLD	6
+
+#define	G_MODULE_IMPL		G_MODULE_IMPL_WIN32
+#undef	G_MODULE_HAVE_DLERROR
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __G_MODULE_CONF_H__ */
diff --git a/gmodule/makefile.msc.in b/gmodule/makefile.msc.in
new file mode 100644
index 0000000..431dd50
--- /dev/null
+++ b/gmodule/makefile.msc.in
@@ -0,0 +1,37 @@
+## Makefile for building the gmodule dll with Microsoft C
+## Use: nmake -f makefile.msc install
+
+TOP = ..\..
+
+!INCLUDE ..\build\win32\make.msc
+
+################################################################
+
+INCLUDES = -FImsvc_recommended_pragmas.h -I .. -I . -I ..\glib
+DEFINES = -DHAVE_CONFIG_H -DG_LOG_DOMAIN=\"GModule\"
+
+all : \
+	gmoduleconf.h \
+	libgmodule-2.0-@LT_CURRENT_MINUS_AGE@.dll
+
+gmodule_OBJECTS = \
+	gmodule.obj
+gmodule.def: gmodule.symbols

+	echo EXPORTS > gmodule.def

+	cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DINCLUDE_INTERNAL_SYMBOLS -DALL_FILES \

+		-DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= \

+		-DG_GNUC_PRINTF=;G_GNUC_PRINTF gmodule.symbols >> gmodule.def

+

+
+gmoduleconf.h: gmoduleconf.h.win32
+	copy gmoduleconf.h.win32 gmoduleconf.h
+
+gmodule.res : gmodule.rc
+	rc -DBUILDNUMBER=0 -r -fo gmodule.res gmodule.rc
+
+libgmodule-2.0-@LT_CURRENT_MINUS_AGE@.dll : $(gmodule_OBJECTS) gmodule.def gmodule.res
+	$(CC) $(CFLAGS) -LD -Fe$@ $(gmodule_OBJECTS) gmodule.res \
+	..\glib\glib-2.0.lib $(LDFLAGS) /implib:gmodule-2.0.lib /def:gmodule.def
+
+clean::
+	del gmoduleconf.h
diff --git a/gobject-2.0-uninstalled.pc.in b/gobject-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..1aab1b5
--- /dev/null
+++ b/gobject-2.0-uninstalled.pc.in
@@ -0,0 +1,7 @@
+Name: GObject Uninstalled
+Description: Object/type system for GLib, Not Installed
+Requires: glib-2.0-uninstalled
+Version: @VERSION@
+Libs: ${pc_top_builddir}/${pcfiledir}/gobject/libgobject-2.0.la
+## cflags contains builddir in addition to srcdir because of gmarshal.h
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@ -I${pc_top_builddir}/${pcfiledir}
diff --git a/gobject-2.0.pc.in b/gobject-2.0.pc.in
new file mode 100644
index 0000000..31fe34d
--- /dev/null
+++ b/gobject-2.0.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: GObject
+Description: GLib Type, Object, Parameter and Signal Library
+Requires: glib-2.0
+Version: @VERSION@
+Libs: -L${libdir} -lgobject-2.0
+Cflags:
diff --git a/gobject/.gitignore b/gobject/.gitignore
new file mode 100644
index 0000000..7276c34
--- /dev/null
+++ b/gobject/.gitignore
@@ -0,0 +1,8 @@
+glib-genmarshal
+glib-mkenums
+gmarshal.[ch]
+gmarshal.strings
+gobject-query
+gobjectalias.h
+gobjectaliasdef.c
+testgobject
diff --git a/gobject/ChangeLog b/gobject/ChangeLog
new file mode 100644
index 0000000..61b8c53
--- /dev/null
+++ b/gobject/ChangeLog
@@ -0,0 +1,3973 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-13  Kristian Rietveld  <kris@imendio.com>
+
+	* gsignal.c (signal_lookup_closure): when defaulting to the only
+	item in the array, check if this is indeed the default closure.
+	(patch by Tim Janik).
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 556706 – Inconsistent help arguments -h, -?
+
+	* glib-genmarshal.c:
+	* glib-mkenums.in: Adjust help output, accept -?, capitalize.
+	Patch by Christian Dywan
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.c: Remove (now) unnecessary cases from g_atomic_int_get 
+	calls.
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+	Bug 565136 – Gobject's "notify" signal parameters are wrong in gtk-doc
+	Patch from  Andrzej Zaborowski
+
+	* gobject.c (g_object_do_class_init): Fix param order in docs.
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.3 ===
+
+2008-12-12  Dan Winship  <danw@gnome.org>
+
+	* pltcheck.sh: make this work on x86_64
+
+2008-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 473150 – g_type_module_use inconsistently increases the use
+	counter in case of error
+
+	* gtypemodule.c (g_type_module_use): Always reset the use count
+	to its previous value before returning FALSE. Pointed out by
+	Johan Billien.
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+2008-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 559456 – GObject Reference Manual (typo)
+
+	* gsignal.c (g_signal_newv): Fix a typo in the docs, pointed out
+	by Andrew Feren
+
+2008-11-03  Matthias Clasen <mclasen@redhat.com>
+
+	Bug 555935 – Clear the mechanism of overwriting properties
+
+	* gobject.c: Expand the docs of g_object_class_install_property.
+	Proposed by Maciej Piechotka
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.0 ===
+
+2008-09-26  Dan Winship  <danw@gnome.org>
+
+	* gobject.c (g_object_ref, g_object_unref)
+	(g_object_freeze_notify, g_object_notify, g_object_thaw_notify):
+	* gparam.c (g_param_spec_ref, g_param_spec_unref):
+	* gsignal.c (handler_ref, handler_unref_R): add uint* -> int*
+	casts in g_atomic_int calls to avoid gcc warnings
+
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.1 ===
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.0 ===
+
+2008-08-21  Johan Dahlin  <johan@gnome.org>
+
+	* gobject.h:
+	Mark g_object_get_type function as const, it's
+	a fundamental type and can safely marked as const,
+	as opposed to traditionally *_get_type functions.
+
+2008-08-21  Johan Dahlin  <johan@gnome.org>
+
+	Bug 548800 – Missing a g_object_get_type function
+
+	* gobject.c (g_object_get_type):
+	* gobject.h:
+	* gobject.symbols:
+	Add g_object_get_type
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.5 ===
+
+2008-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 545395 – Language tweak for g_value_set_string* docs
+
+	* gvaluetypes.c: Clarify the docs of some GValue setters.
+	Proposed by Erik Walthinsen
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* gtype.h
+	* gtype.c: Revert my change from 2008-07-24. No G_TYPE_FORMAT is
+	needed. Just use G_GSIZE_FORMAT always when printing GType values.
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (gobject-2.0.lib): Pass appropriate -machine flag to lib.exe.
+
+2008-07-24  Tor Lillqvist  <tml@novell.com>
+
+	* gtype.h: Define G_TYPE_FORMAT as the printf format for a GType
+	value. Either G_GSIZE_FORMAT or "lu".
+
+	* gtype.c: Use it instead of the C99 zu.
+
+2008-07-23  Matthias Clasen  <mclasen2redhat.com>
+
+	544177 - Fix trivial cut and paste error in documentation
+
+	* gtype.h: Fix a typo. Pointed out by Paul Bolle.
+
+2008-07-21  Matthias Clasen  <mclasen2redhat.com>
+
+	* === Released 2.17.4 ===
+
+2008-07-21  Michael Natterer  <mitch@imendio.com>
+
+	Reviewed by Tim Janik:
+
+	* gsignal.c (g_signal_chain_from_overridden_handler): allocate
+	the temp GValue array with GSLice.
+
+	(g_signal_emit_valist): dito. Remove optimization/obfuscation of
+	allocating up to 16 GValues on the stack and always use GSLice.
+
+2008-07-05  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 539229 – gobject-query calls itself query
+
+	* gobject-query.c: Use the right binary name in help output.
+	Patch by Hiroyuki Ikezoe.
+
+2008-07-04  Michael Natterer  <mitch@imendio.com>
+
+	* gobject.c: remove unused #define PREALLOC_CPARAMS.
+
+2008-07-04  Michael Natterer  <mitch@imendio.com>
+
+	Bug 541208 – Functions to easily install and use signals without
+	class struct slot
+
+	* gobject.symbols
+	* gsignal.[ch] (g_signal_new_class_handler): the same as
+	_gtk_binding_signal_new(), to install signals with a callback
+	instead of a class struct slot as class closure.
+
+	The next two functions are C convenience and much easier to use
+	than the generic overriding and chaining APIs which are intended
+	primarily for language bindings:
+
+	(g_signal_override_class_handler): to override a signal with a
+	callback instead of a class struct slot.
+
+	(g_signal_chain_from_overridden_handler): to chain up from a
+	signal without class struct slot. The API is similar to
+	g_signal_emit().
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-07-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* *.c: Fix up section comments far enough to avoid regressions.
+
+2008-06-27  Hans Breuer  <hans@breuer.org>
+
+	* glib-genmarshal.c : move G_OS_WIN32 inclusion of <io.h> down to
+	where G_OS_WIN32 will be defined (#540047, Kazuki IWAMOTO)
+
+2008-06-22  Michael Natterer  <mitch@imendio.com>
+
+	* *.c: remove trailing whitespace from newly added gtk-doc
+	comments and reformatted some where they contained overly long or
+	ill-formatted lines.
+
+2008-06-22  Michael Natterer  <mitch@imendio.com>
+
+	* *.c: moved includes back to the top of the files (before gtk-doc
+	SECTION comments). Add "config.h" in all files and move system
+	included before glib includes. Remove trailing whitespace from
+	SECTION comments and did some reformatting where lines were overly
+	long, no documentation content was changed.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gobject-unused.sgml:
+	* gobject/gobject.h:
+	* gobject/gtype.c:
+	* gobject/gtype.h:
+	  Move some content for gobject-unused.sgml and cleared empty entries.
+	  The remaining 4 ones should be checked by some else. If they are not
+	  needed. The file can be removed.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/value_collection.sgml:
+	* gobject/gvaluecollector.h:
+	  Migrating docs.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/value_arrays.sgml:
+	* gobject/gvaluearray.c:
+	* gobject/gvaluearray.h:
+	  Migrating docs.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/gsignal.c:
+	  Fix compiler warning in format string check.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/signals.sgml:
+	* gobject/gclosure.c:
+	* gobject/gobject.c:
+	* gobject/gsignal.c:
+	* gobject/gsignal.h:
+	  Migrating docs.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/Makefile.am:
+	  Help poor little gtkdoc a bit and tell that it can ignore
+	  G_GNUC_INTERNAL. Also disable including the unit-test header as this
+	  causes warnings and we don't need it here.
+
+2008-06-22  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/param_value_types.sgml:
+	* gobject/gboxed.c:
+	* gobject/gboxed.h:
+	* gobject/genums.c:
+	* gobject/genums.h:
+	* gobject/gobject.c:
+	* gobject/gobject.h:
+	* gobject/gparam.c:
+	* gobject/gparam.h:
+	* gobject/gparamspecs.c:
+	* gobject/gparamspecs.h:
+	* gobject/gvaluetypes.c:
+	* gobject/gvaluetypes.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/objects.sgml:
+	* gobject/gobject.c:
+	* gobject/gobject.h:
+	* gobject/gparam.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gtypeplugin.sgml:
+	* gobject/gtypeplugin.c:
+	* gobject/gtypeplugin.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/Makefile.am:
+	  Add --sgml-mode to allow sgml in doc-fragments (which somehow works
+	  before already).
+
+	* gobject/gboxed.h:
+	* gobject/gclosure.c:
+	* gobject/gparam.c:
+	* gobject/gparam.h:
+	* gobject/gtype.h:
+	  Convert character entities back. Fix some broken sgml.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gtypemodule.sgml:
+	* gobject/gtypemodule.c:
+	* gobject/gtypemodule.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/gboxed.c:
+	* gobject/gclosure.c:
+	* gobject/genums.c:
+	* gobject/gparam.c:
+	* gobject/gvalue.c:
+	  Add titles back from tmpl.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gtype.sgml:
+	* gobject/gtype.c:
+	* gobject/gtype.h:
+	* gobject/gvaluetypes.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/gclosure.h:
+	* gobject/gparam.h:
+	  Add one missing ':' and reformate GParamFlags docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gparamspec.sgml:
+	* gobject/gparam.c:
+	* gobject/gparam.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/gboxed.c:
+	* gobject/gclosure.c:
+	* gobject/genums.c:
+	* gobject/gvalue.c:
+	  Use file-names from the section file for SECTION: comments.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/generic_values.sgml:
+	* gobject/gboxed.h:
+	* gobject/gtype.h:
+	* gobject/gvalue.c:
+	* gobject/gvalue.h:
+	* gobject/gvaluetypes.c:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* gobject/genums.h:
+	  Fix documentation for return values.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gclosure.sgml:
+	* gobject/gboxed.h:
+	* gobject/gclosure.c:
+	* gobject/gclosure.h:
+	* gobject/gobject.c:
+	* gobject/gsourceclosure.c:
+	* gobject/gsourceclosure.h:
+	  Migrating docs.
+
+2008-06-21  Tor Lillqvist  <tml@novell.com>
+
+	* glib/gstdio.c: Improve Windows-specific parts of
+	documentation. Mention the different C library issue in more
+	places.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/gobject-sections.txt:
+	  Remove duplicated entries. They are documented and should be shown.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/enumerations_flags.sgml:
+	* gobject/genums.c:
+	* gobject/genums.h:
+	  Migrating docs.
+
+2008-06-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* docs/reference/gobject/tmpl/gboxed.sgml:
+	* gobject/gboxed.c:
+	* gobject/gboxed.h:
+	* gobject/gvaluetypes.c:
+	  Migrating docs.
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.17.2 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.1 ===
+
+2008-06-10 13:34:01  Tim Janik  <timj@imendio.com>
+
+	* tests/threadtests.c: added race condition tester from Michael Meeks
+	with a couple fixes so it's not triggering development warnings. From:
+	Bug 537555 - GObject instantiation not thread safe ...
+
+2008-06-10 13:15:29  Tim Janik  <timj@imendio.com>
+
+	* gtype.c (g_type_class_ref): fixed race condition where references to
+	partially initialized classes could be handed out.
+
+2008-05-28  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am: don't define G_DISABLE_SINGLE_INCLUDES, it's in
+	the global CPPFLAGS now.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.0 ===
+
+2008-05-05  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent
+	code from being checked in that breaks the build of applications
+	which use G_DISABLE_SINGLE_INCLUDES.
+
+2008-03-16  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Define gobject_def locally here instead of using an
+	Autoconf variable.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.16.1 ===
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.6 ===
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.15.5 ===
+
+2008-02-06  Benjamin Otte  <otte@gnome.org>
+
+	* gparamspecs.c: (param_gtype_set_default), (param_gtype_validate):
+	make GParamGType require the set type during construction instead of
+	using G_TYPE_NONE, which causes issues when setting.
+	Bug 513073 - g_param_spec_gtype breaks with G_PARAM_CONSTRUCT
+
+2008-02-05 18:52:07  Tim Janik  <timj@imendio.com>
+
+	* gtype.c: added recursive mutex to protect class initialization,
+	default interface initialization and per-class interface construction.
+	a lock to this recursive mutex is held during user callback invocations
+	such as initializers or finalizers, effectively allowing only one thread
+	to run class/interface initializers/finalizers at a time.
+	also made misc fixups. this fixes:
+	Bug 64764 - Class initialization isn't thread safe.
+
+2008-02-05 18:41:22  Tim Janik  <timj@imendio.com>
+
+	* Makefile.am: integrate tests/.
+
+	* tests/: new directory for libgobject tests.
+
+	* tests/Makefile.am: build and run threadtests.
+
+	* tests/threadtests.c: test multi-threaded initializers for
+	object classes and interfaces.
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.2 ===
+
+008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.1 ===
+
+2007-12-26  Behdad Esfahbod  <behdad@gnome.org>
+
+	* gclosure.h (G_CCLOSURE_SWAP_DATA): Fix macro argument.
+	(#505674, Areg Beketovski)
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.0 ===
+
+2007-11-11  Mathias Hasselmann  <mathias@openismus.com>
+
+	Always exit with non-zero error code when printing warnings.
+
+	* gobject/glib-genmarshal.c: Add global exit_status variable, and use
+	it in pad() and process_signature() to return with non-zero error code
+	when printing warnings. (#495294)
+
+2007-11-08  Matthias Clasen <mclasen@redhat.com>
+
+	* glib-mkenums.in: Don't shift ARGV[0] to undefined. 
+	(#466557, Aidan Delaney)
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.14.3 ===
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.2 ===
+
+2007-09-20  Carlos Garnacho  <carlos@imendio.com>
+
+	* gtypemodule.h: make sure we define GType g_define_type_id in
+	G_G_DEFINE_DYNAMIC_TYPE_EXTENDED so it works together with
+	G_IMPLEMENT_INTERFACE. (#478459)
+
+2007-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.1 ===
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.0 ===
+
+2007-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.7 ===
+
+Tue Jul 10 12:31:50 2007  Tim Janik  <timj@imendio.com>
+
+	* gtype.h: use g_once_init_enter/g_once_init_leave to guard critical
+	initialization section of *_get_type implementations in G_DEFINE_TYPE,
+	bug #65041.
+
+Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.6 ===
+
+Fri Jun 22 11:31:27 2007  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: reintroduce typedef gulong GType; for C++, to avoid
+	C++ specific ABI breakage.
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.5 ===
+
+Thu Jun 14 23:32:00 2007  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: always define GType unconditionally in terms of gsize,
+	there's no need to jump through a glong hoop ever and this fixes
+	the printf modifier to %zu.
+
+Thu Jun 14 22:33:11 2007  Tim Janik  <timj@imendio.com>
+
+	* gparamspecs.c (g_param_spec_types_init): work around SGI IDO cc,
+	fixes #363986.
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.4 ===
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.13.3 ===
+
+2007-05-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.2 ===
+
+2007-05-17  Matthias Clasen <mclasen@redhat.com>
+
+	* gtype.h: Move G_GNUC_INTERNAL before function
+	declarations to fix compilation with sun studio.  (#438873,
+	Damien Carbery)
+
+2007-05-03  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.13.1 ===
+
+2007-04-25  Michael Natterer  <mitch@imendio.com>
+
+	* gparamspecs.c (param_string_validate): also clear the
+	NOCOPY_CONTENTS flag when replacing NULL with the empty string.
+
+2007-04-24  Michael Natterer  <mitch@imendio.com>
+
+        * gparamspecs.c (param_string_validate): don't free or modify
+	static strings, dup them when needed and clear the
+	G_VALUE_NOCOPY_CONTENTS flag. Fixes bug #432895.
+
+Tue Apr  3 12:34:14 2007  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: invoke GObjectClass.constructed() only for newly
+	constructed objects, and invoke it while the notify queue is
+	still being frozen, after all CONSTRUCT* properties have been
+	set and before random other properties are being set.
+
+	* applied modified patch from Ryan Lortie to implement
+	GObjectClass.constructed() to fix #425324.
+
+2007-04-02  Ryan Lortie  <desrt@desrt.ca>
+
+	* gobject/gobject.h: Add 'constructed' vcall to GObjectClass.
+	* gobject/gobject.c (g_object_newv): call ->constructed() as last
+	step of object construction.
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.0 ===
+
+2007-03-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* gvaluearray.c: Use  g_slice.  (#404430, Chris Wilson)
+
+2007-03-14  Stefan Kost  <ensonic@users.sf.net>
+
+	* gparam.h:
+	  Add G_PARAM_STATIC_STRINGS define (fixes #418021).
+
+Mon Mar 12 13:30:20 2007  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: marked purely functional g_type accessors as PURE or CONST,
+	closes #305100.
+
+2007-01-02  Tor Lillqvist  <tml@novell.com>
+
+	* glib-genmarshal.c (main): Handle "/dev/stdin" by dup()ing fd 0
+	so that it works on Win32 and other systems without
+	/dev/stdin. (#407431)
+
+2006-12-29 Matthias Clasen  <mclasen@redhat.com>
+
+	* gtypemodule.h: Define G_DEFINE_DYNAMIC_TYPE and
+	and _EXTENDED variant.  (#334437)
+
+Fri Dec 15 2006  Matthias Clasen  <mclasen@redhat.com>
+
+	* gtype.c (instance_real_class_get): Dereference the pointer 
+	before dropping the lock.  (#378078, Jonathan Matthew)
+
+Tue Oct 10 12:06:08 2006  Tim Janik  <timj@gtk.org>
+
+	* glib-mkenums.in: 
+	* glib-mkenums.1: applied patch from David Necas which introduces
+	an underscore_name option and fixes #358734.
+
+Mon Oct  2 15:50:16 2006  Tim Janik  <timj@gtk.org>
+
+	* gvalue.c (g_value_peek_pointer): reverted a change to have an
+	assert instead of a g_return_val_if_fail() here. libraries (and
+	programs) should only ever g_assert or g_error if there is no way
+	to carry on with the current program state. that's clearly not 
+	the case here.
+
+	* ChangeLog: added missing changelog entry for 2003-12-30.
+
+Sat Sep 30 2006  Matthias Clasen  <mclasen@redhat.com>
+
+	* pltcheck.sh: Script to check PLT entries.
+
+	* Makefile.am (TESTS): Run pltcheck.sh
+
+	* gtype.c:
+	* gsignal.c:
+	* gobject.c:
+	* gvaluetypes.c: Move all includes before gobjectalias.h.
+	(#3545422, Behdad Esfahbod)
+
+Fri Sep 22 13:41:02 2006  Tim Janik  <timj@imendio.com>
+
+	* gtype.h: applied patch from Behdad with slight optimization, 
+	fixes #356175.
+
+	* gobjectnotifyqueue.c: fixed include-guard macro name.
+
+Mon Sep 11 12:12:45 2006  Tim Janik  <timj@imendio.com>
+
+	* gparam.c (g_param_spec_sink): reimplemented floating flag handling by
+	atomically accessing a reserved GData bit, fixes #330556.
+
+Tue Aug 29 13:27:33 2006  Tim Janik  <timj@gtk.org>
+
+	* glib-mkenums.in: fixed to print usage and version info on STDOUT
+	(#322502).
+
+	* gobject.c (g_initially_unowned_init): restore ; after G_DEFINE_TYPE.
+
+2006-08-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.c: Remove ; after G_DEFINE_TYPE.  (#351741, Kjartan Maraas)
+
+Wed Aug 23 10:35:32 2006  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: changed return value of g_value_dup_object(), fixes #343292.
+
+2006-08-23  Sven Neumann  <sven@gimp.org>
+
+	* gobject/glib-genmarshal.[c1]: added new command-line option
+	"--internal" that can be used to let glib-genmarshal generate
+	internal functions using the G_GNUC_INTERNAL attribute (bug #346647).
+
+Wed Aug 16 13:55:08 2006  Tim Janik  <timj@imendio.com>
+
+	* gobject.c: conditionally thaw the notify queue after construction,
+	so we don't trigger warnings when trying to thaw an unfrozen singleton.
+
+2006-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.2 ===
+
+2006-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gparamspecs.c (g_param_spec_types_init): Don't initialize
+	struct members with function calls.  (#349952)
+
+2006-07-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.1 ===
+
+2006-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* gtypemodule.c (g_type_module_register_type): Copy the complete
+	value table, not just the first 4 bytes.  (#348136, Coverity)
+
+2006-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.0 ===
+
+2006-06-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.4 ===
+
+2006-06-15  Federico Mena Quintero  <federico@novell.com>
+
+	* gtype.c (g_type_instance_get_private): Fix the error message so
+	that it mentions the right functions:
+	"g_type_instance_get_private() requires a prior call to
+	g_type_class_add_private()".
+
+2006-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.3 ===
+
+2006-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.2 ===
+
+2006-06-02  Behdad Esfahbod  <behdad@gnome.org>
+
+	* gobject/genum.h: Make value_name and value_nick const in structs
+	_GEnumValue and _GFlagValue.  (#317793)
+
+Tue May 16 14:01:43 2006  Tim Janik  <timj@imendio.com>
+
+	* gtype.h (G_IMPLEMENT_INTERFACE): turn off compiler warnings, #337129.
+
+2006-05-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.1 ===
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.11.0 ===
+
+Tue May  2 14:51:03 2006  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: split up G_DEFINE_*TYPE macro definitions so C CODE arguments
+	are not passed on to nested macro calls. patch mostly courtesy of Behdad
+	Esfahbod, fixes #337128.
+
+2006-04-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols: Fix a typo.
+
+	* gtype.c: (g_type_register_static_simple): Add a 
+	missing return.
+
+	* gtype.h: Silence warnings from G_DEFINE_TYPE.
+	
+2006-04-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols:
+	* gtype.[hc]: Add a g_type_register_static_simple
+	variant of g_type_register_static that does not take 
+	a relocation-causing GTypeInfo struct, and use it 
+	in G_DEFINE_TYPE.
+
+2006-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* ===  Released 2.10.1 ===
+
+Tue Mar  7 17:09:07 2006  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_object_compat_control): added case3 to hand out the
+	original floating flag handler. required by gtk+ >= 2.10.
+
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.10.0 ===
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.6 ===
+
+2006-01-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* gclosure.c: Remove C++ comment.
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.5 ===
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.9.4 ===
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.h: Make g_object_compat_control() visible
+	for GTK+ compilation, to avoid segfaults on 64bit
+	platforms.
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.3 ===
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.2 ===
+
+2006-01-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols: Add g_initially_unowned_get_type.
+
+2005-12-30  Matthias Clasen  <mclasen@redhat.com>
+	
+	* gsignal.c: Remove the handler trash stack, which
+	is now unused.
+	(g_signal_init): Remove the restriction that HandlerMatch
+	must be the same size as GList, and obsolete comments 
+	referring to mem chunks.
+
+2005-12-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols: Add new functions.
+
+Thu Dec 22 18:53:14 2005  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: renamed GUnowned to GInitiallyUnowned.
+
+Thu Dec 22 14:59:24 2005  Tim Janik  <timj@imendio.com>
+
+	* gvaluetypes.[hc]: implemented G_TYPE_GTPYE. applied patch
+	from matthias which implements GType accessors for GValue.
+
+	* gparamspecs.[hc]: applied patch from matthias which 
+	implements G_TYPE_PARAM_GTYPE.
+
+	* gobject.[hc]:
+	GUnowned: introduced a new object type that has an initially
+	floating reference.
+	g_object_compat_control(): allow setting of a floating flag handler.
+
+2005-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.1 ===
+
+2005-12-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* genums.h (G_FLAGS_CLASS_TYPE_NAME): Use G_FLAGS_CLASS_TYPE.
+	(#323273, Kalle Vahlman)
+	
+Thu Dec  1 12:53:26 2005  Tim Janik  <timj@imendio.com>
+
+	* gtype.c: use g_slic_* for all object allocations.
+
+2005-11-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobjectnotifyqueue.c (g_object_notify_queue_thaw): 
+	* gobject-query.c (main): Silence compiler warnings.
+
+	* glib-genmarshal.c (main): Use G_N_ELEMENTS.
+
+2005-11-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gboxed.h: Declare g_hash_table_get_type.
+
+Wed Nov 23 18:01:46 2005  Tim Janik  <timj@imendio.com>
+
+	* gobject.[hc]: added floating reference count.
+	g_object_is_floating():
+	g_object_ref_sink(): new functions to deal with floating references.
+	g_object_force_floating(): new funciton for object implementations
+	to set the floating flag.
+
+	* gobject.c (g_object_init): make objects initially floating.
+
+Wed Nov 23 17:58:13 2005  Tim Janik  <timj@gtk.org>
+
+	* gparam.[hc]: added g_param_spec_ref_sink().
+
+Wed Nov 23 13:36:02 2005  Tim Janik  <timj@gtk.org>
+
+	* gboxed.[hc]: minor cleanups, implemented G_TYPE_HASH_TABLE.
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.0 ===
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-genmarshal.c: const correctness fixes, found
+	by Arjan van de Ven and gcc.
+	
+Tue Nov  1 17:07:43 2005  Tim Janik  <timj@imendio.com>
+
+	* gsignal.c: allocate signal handlers and handler match structures
+	via the new g_slice_*() API (get's rid of GList allocation hack).
+
+	* gtype.c: got rid of per-type memchunks. if GTypeInfo.n_preallocs
+	is > 0, objects are allocated via g_slice_*() instead of g_malloc().
+
+2005-10-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-mkenums.in: Really fix #314890.
+
+2005-09-28  Michael Natterer  <mitch@gimp.org>
+
+	* gtype.h (G_IMPLEMENT_INTERFACE): revert last change, it breaks
+	all users of G_IMPLEMENT_INTERFACE() inside
+	G_DEFINE_TYPE_WITH_CODE(), since apparently GCC doesn't like
+	commas enclosed in {}, not (), in nested macro calls.
+
+2005-09-26  DindinX  <dindinx@gimp.org>
+
+	* gobject/gtype.h: initialize all the fields of GInterfaceInfo in the
+	G_IMPLEMENT_INTERFACE macro, to shut up a warning when compiling at -W
+
+2005-09-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-mkenums.in: Don't hang on '{' following a trigraph comment
+	in the same line.  (#314890, Mathias Hasselmann)
+
+Thu Sep 22 12:42:12 2005  Tim Janik  <timj@gtk.org>
+
+	* gparam.c (g_param_spec_internal): fix pspec->name assignment which
+	needs to be strdup()ed for non G_PARAM_STATIC_NAME pspecs. this fixes
+	recently introduced crashes during plugin unloading.
+	also, ensure that static pspec names are canonicalized.
+
+	* gsignal.h: reverted last change from matthias, we don't guarantee
+	that type ids aren't mangled with G_SIGNAL_TYPE_STATIC_SCOPE anywhere.
+
+2005-09-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gsignal.h (struct _GSignalQuery): Remove the misleading comment
+	about G_SIGNAL_TYPE_STATIC_SCOPE, since we don't allow that 
+	on return types.
+
+2005-09-08  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* gclosure.c: (g_closure_set_meta_marshal): Remove some unused
+	code.
+	* gsignal.c: (g_signal_emitv): Same here
+	* gtype.c: (g_type_register_fundamental): And here
+	* testgobject.c: Mark some functions static.
+
+2005-09-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* gsignal.c (struct _SignalNode): Make the name field const.
+	(g_signal_newv): Don't keep an unnecessary extra copy of the 
+	signal name around, and don't forget to free the name if
+	an existing node is reused.	
+
+2005-08-31  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.c (g_object_do_class_init): Intern the signal name.
+
+	* gparam.c (g_param_spec_internal): Intern the name here,
+	since we need the quark anyway when sending change notification.
+
+	* gboxed.c: 
+	* gparamspecs.c: 
+	* gtype.c (g_type_init_with_debug_flags): Intern type name
+	before registering the types.
+
+	* gtype.h (G_DEFINE_TYPE_EXTENDED): Intern type name
+	before registering the type.
+
+	* gvaluetypes.c (g_value_types_init): 
+	* gtypeplugin.c (g_type_plugin_get_type): 
+	* gtypemodule.c (g_type_module_get_type): 
+	* gparam.c (g_param_type_init): 
+	* gobject.c (g_object_type_init): 
+	* genums.c (g_enum_types_init): 
+	* gboxed.c (g_boxed_type_init): Intern type names
+	before registering the type to avoid unnecessary
+	copies.
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.1 ===
+
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.0 ===
+
+2005-08-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* gvaluetransform.c: Access enum and flags
+	values as v_long/v_ulong, not v_int/v_uint,
+	to make value transformation of such types
+	work on bigendian 64bit machines.  (#312485,
+	Michael Lorenz)
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+	
+	* abicheck.sh: Also check exported variables
+
+	* === Released 2.7.7 ===
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.6 ===
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* gclosure.c (union ClosureInt): Mark the vint member as
+	volatile, which seems to be necessary to make atomic operations
+	work on s390.
+
+	* === Released 2.7.5 ===
+
+Mon Aug  1 23:00:42 2005  Tim Janik  <timj@imendio.com>
+
+	* gclosure.c: turned all modifications to the first 32 integer bits in a 
+	closure into atomic accesses. wrapped write accesses into special macros
+	to keep the atomic modification logic in a single place. comment cleanups.
+
+	* gclosure.h: made all atomicly accessed closure fields volatile.
+
+	* gobject.h: made ref_count field volatile.
+
+Sun Jul 31 02:04:23 2005  Tim Janik  <timj@gtk.org>
+
+	* gobject.c: use g_datalist_set_flags() and g_datalist_unset_flags() to
+	allow proper locking around &qdata modifications.
+
+Sat Jul 30 21:10:26 2005  Tim Janik  <timj@gtk.org>
+
+	* gobject.c: reverted notify_mutex introduction, since this prevents
+	parallelized setting of object properties on different objects, and
+	serves no apparent purpose (to me at least).
+	g_object_real_dispose(): removed non-atomic reference count 
+	modifications.
+	g_object_unref(): make sure the closures array is destroyed when
+	destroying signal handlers.
+
+	* gparam.c: cosmetic changes.
+
+	* gsignal.c: comment fixup. allow 16bit blocking count.
+
+	* gsignal.c: reverted GClosure related changes.
+
+	* gclosure.c: reverted premature commit of atomic reference
+	counting attempt.
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.4 ===
+
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.3 ===
+	
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	Make refcounting threadsafe by using atomic 
+	operations.  (#166020, Wim Taymans)
+	
+	* gobject.c: Use a recursive lock to protect the 
+	notify queue.
+	(g_object_unref): Get rid of g_object_last_unref and
+	do the last unref handling in g_object_unref.
+	(g_object_ref, g_object_unref): Use atomic operations.
+
+	* gsignal.c (struct _HandlerMatch): Use a full integer
+	for the ref_count field.
+	(handler_ref, handler_unref_R): Use atomic operations.
+
+	* gparam.c (g_param_spec_ref, g_param_spec_unref): 
+	Use atomic operations instead of a lock to make the
+	refcounting threadsafe.
+
+	* gclosure.c (g_closure_ref, g_closure_unref): Use atomic
+	operations. This is more complicated here, since the
+	refcount is stored in a bitfield, so we also have
+	to access all other bitfield members atomically.
+
+	* gsignal.c (handlers_find): Read the meta_marshal flag
+	of the closure atomically.
+
+2005-07-11  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.h: 
+	* gobject.symbols: Remove G_GNUC_NULL_TERMINATED from
+	g_object_new again, since that makes gcc warn on calls of 
+	the form g_object_new (some_type, NULL)
+
+2005-07-09  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Don't use the scripts in build/win32 to compile
+	gobject.rc into a resource object file. (This means we lose the
+	build number increment magic, but I doubt it was that useful
+	anyway.) Instead use windres directly. To pass the normal .o file
+	produced by windres through libtool, which wants .lo files, pass
+	it directly to the linker using a -Wl option.
+
+	* gobject.rc.in: Thus replace BUILDNUMBER with 0.
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.7.2 ===
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.1 ===
+
+2005-06-26  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: libtool installs/uninstalls the import library, no
+	need to do it ourselves. Do still install/uninstall the .def file,
+	though.
+
+2005-06-24  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (install-libtool-import-lib): Current GNU tools do
+	understand the PRIVATE keyword.
+
+2005-06-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* gparam.h (GParamFlags): Avoid a warning.  (#308295,
+	Murray Cumming).
+
+2005-06-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* gparam.h (GParamFlags): Re-add G_PARAM_PRIVATE as a 
+	deprecated name for bit 5, since some language bindings
+	have it bound.
+
+2005-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.0 ===
+
+2005-05-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gvaluetypes.c (g_value_set_string): dup the new value
+	before freeing the old, just in case.  (#172142, Morten
+	Welinder)
+
+2005-05-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-genmarshal.1: Mention 64bit integer types.
+
+2005-05-05  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.[ch] gobject.symbols: Add
+	g_object_add/remove_toggle_ref() functions to get notification
+	when a reference count is the last remaining reference; this
+	enables better memory management for language bindings.
+	(http://mail.gnome.org/archives/gtk-devel-list/2005-April/msg00095.html)
+
+2005-04-29  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols: 
+	* gboxed.h (G_TYPE_DATE): 
+	* gboxed.c: Add a boxed type for GDate. (#301787, Tim-Philipp 
+	Müller)
+
+2005-03-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* gparam.c (param_spec_ht_lookup): Don't do the second
+	lookup if the name was already canonical.  (#171502, Morten
+	Welinder)
+
+Tue Mar 22 14:15:23 2005  Manish Singh <yosh@gimp.org>
+
+	* gparam.c (g_param_spec_internal): cast away any constness on
+	assignment.
+
+2005-03-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-mkenums.in: Avoid forcing extra newlines when using
+	template files.  (#171005)
+
+2005-03-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* gparam.c (g_param_spec_internal): Don't copy strings
+	which are marked as static. Don't allow non-canonical static 
+	names.
+
+	* gparam.h (GParamFlags): Add G_PARAM_STATIC_{NAME,NICK,BLURB}
+	flags.  (#160655, Ben Maurer)
+	
+2005-03-18  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : handle gobjectaliasdef.c
+
+2005-03-14  Matthias Clasen  <mclasen@redhat.com>
+
+	Make PLT-reduction work with gcc4, and don't include
+	everything in gobjectalias.h:
+	
+	* gobject.symbols: Group symbols by header and source 
+	file.
+	* makegobjectalias.pl: Protect definitions by the same 
+	preprocessor symbols used to guard the headers. Move
+	the alias declarations to a separate file which is 
+	produced when calling makegalias.pl -def
+	* Makefile.am (gobjectaliasdef.c): Add a rule to 
+	build this file.
+	* *.c: Include gobjectalias.h after the other i
+	GLib headers, include gobjectaliasdef.c at the bottom.
+
+2005-03-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols: Add the new attributes here, too.
+
+	* gobject.h: Use G_GNUC_NULL_TERMINATED where
+	appropriate.  (#164706, Marc Meissner)
+
+	* gvaluearray.h: Small cleanup (use G_BEGIN/END_DECLS).
+	(#168474, Fabricio Barros Cabral)
+
+2005-02-24  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (EXTRA_DIST): Don't distribute
+	gobject.def. (#167496, J. Ali Harlow)
+
+Sun Feb  6 22:00:46 2005  Manish Singh  <yosh@gimp.org>
+
+	* abicheck.sh: feed the contents of config.h and glibconfig.h
+	into the preprocessor, since glib.symbols could need #defines
+	from them.
+
+2005-01-12  Matthias Clasen  <mclasen@redhat.com>
+
+	Cosmetic fixes (#163792, Benoît Carpentier):
+	
+	* gobject-query.c (main): Remove duplicate lines.
+
+	* gvaluetransform.c: Remove duplicate definitions of
+	value_transform_[u]int64_[u]int64.
+
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.1 ===
+
+2004-12-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.am: Only check the ABI on linux, since
+	the shell script is not portable.  (#161734, Adrian Bunk)
+
+2004-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.0 ===
+	
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.7 ===
+	
+2004-11-30  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (gobject.def): gcc -E complains "linker input file
+	unused because linking not done" if told to preprocess the
+	gobject.symbols file. Use '-' and redirection to pass it as
+	standard input instead.
+
+Sun Nov 28 13:21:12 2004  Manish Singh  <yosh@gimp.org>
+
+	* abicheck.sh: filter G_GNUC before PRIVATE so $ is still true.
+
+Sun Nov 28 01:37:54 2004    <timj@birnet.org>
+
+	* gsignal.c: applied patch by sven@gimp.org (#153727) to reduce
+	signal connection complexity from O(n_handlers) to O(1).
+
+Thu Nov 25 14:09:41 2004  Manish Singh  <yosh@gimp.org>
+
+	* abicheck.sh: filter out G_GNUC stuff when doing the compare.
+
+2004-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gobject.symbols: Typo fix.
+
+	Fix a problem with the PLT reduction changes which caused the
+	internal aliases to lose all attributes.
+	
+	* gobject.symbols: Add attribute annotations.
+	* makegobjectalias.pl: Keep attribute annotations, but strip PRIVATE.
+	* Makefile.am (gobject.def): Strip attribute annotations, but keep 
+	PRIVATE.
+
+	* gtypemodule.h (g_type_module_get_type): Mark as const,
+	like all other get_type() functions.
+
+2004-11-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.6 ===
+	
+Mon Nov  8 10:47:41 2004  Manish Singh  <yosh@gimp.org>
+
+	* gobject/gsourceclosure.c: removed wrap_g_io_channel_ref() hack,
+	since g_io_channel_ref() has a compatible API now.
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.5 ===
+
+2004-10-27 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.4 ===
+
+2004-10-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* abicheck.sh: Strip Win32 specific defs file syntax.
+
+	* Makefile.am (gobjectalias.h): Fix srcdir != builddir 
+	builds.  (#156447, Thomas Fitzsimmons)
+
+2004-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+	* abicheck.sh: Don't include symbols which are just in the 
+	symbols list for .defs file compatibility.
+
+2004-10-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* gtype.h (GTypeInterfaceCheckFunc): Rename first parameter to 
+	check_data, since apparently the system headers on AIX leak a
+	macro named func_data.  (#155178, Andrea Campi)
+
+Wed Oct  6 02:12:44 2004    <timj@birnet.org>
+
+	* gtype.c (g_type_instance_get_private): applied patch from Jean-Yves 
+	Lefort <jylefort@brutele.be> to not access the instance_real_class_bsa
+	pointer without holding the instance_real_class lock.
+
+2004-10-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* gsignal.c (g_signal_add_emission_hook): Improve the warning 
+	if G_SIGNAL_NO_HOOKS is set.  (#154299, Nickolay V. Shmyrev)
+
+2004-09-22  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (install-libtool-import-lib): [Win32] Add code to
+	remove the bug-compatibility entries (see #134813, and related
+	comments below) from the import library. The PRIVATE keyword in
+	the .def file is supposed to mean that, but it isn't implemented
+	yet by GNU ld.
+
+	* makegobjectalias.pl: In case the symbol is followed by some
+	stuff ("PRIVATE") that's intended for the .def file, use just the
+	actual symbol.
+
+	* gobject.symbols: For binary bug compatibility on Win32, add the
+	g_slist_remove_all and g_unichar_validate symbols inside #ifdef
+	INCLUDE_INTERNAL_SYMBOLS. (See #134813 and log entries from March
+	below.)
+
+2004-09-18 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.3 ===
+
+Thu Sep 16 18:42:46 2004  Manish Singh  <yosh@gimp.org>
+
+	* abicheck.sh: don't hardcode lengths for cut, instead split on
+	the third field.
+
+2004-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Implement the same PLT reduction technique used in GTK+:
+
+	* Makefile.am: Generate gobjectalias.h from gobject.symbols.
+	(BUILT_SOURCES): Add gobjectalias.h.
+
+	* makegobjectalias.pl: Script to generate gobjectalias.h.
+
+	* *.c: Include gobjectalias.h
+
+2004-09-16  Matthias Clasen  <mclasen@redhat.com>
+
+	Add ABI control using the same technique that is used in GTK+.
+	
+	* gobject.symbols: Master list of symbols.
+
+	* gobject.def: Removed. It is now generated from gobject.symbols.
+
+	* Makefile.am: Generate gobject.def from gobject.symbols.
+	(TESTS): Add abicheck.sh
+	(EXTRA_DIST): Add abicheck.sh
+	(export_symbols): Don't export _-prefixed symbols.
+
+	* gtype.h: 
+	* gtype.c: Move the declarations of the various _init() functions
+	to the header, and mark them as G_GNUC_INTERNAL.
+
+2004-08-25 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.2 ===
+
+2004-08-01 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.1 ===
+
+2004-07-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* gtype.c (g_type_instance_get_private): Catch cases of 
+	forgotten g_type_add_private().  (#148368, Tommi Komulainen) 
+
+2004-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-genmarshal.c (put_marshal_value_getters): Use the 
+	correct fields for enums and flags.  (#145015, Tommi Komulainen) 
+
+Sun Jul 18 18:03:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* === Released 2.5.0 ===
+
+2004-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* gsignal.c (g_signal_handler_is_connected): Don't
+	choke on a zero handler_id.
+
+Tue Jul  6 00:46:43 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gtypemodule.h: 
+	* gtypemodule.c: Fix the declarations of the new 
+	functions to return GType, not void. 
+	Also add missing includes.  (#145508, Morten Welinder)
+
+Tue Jul  6 00:46:43 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gtypemodule.h: 
+	* gtypemodule.c (g_type_module_register_flags): 
+	* gtypemodule.c (g_type_module_register_enum): New 
+	functions to register enum and flags types from a 
+	GTypeModule.  (#145396, Sven Neumann)
+
+Wed Jun 23 12:55:34 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gtype.h (G_DEFINE_TYPE_EXTENDED): Add an initializer for
+	the g_define_type_info.value_table.  (#144678, Mariano 
+	Suárez-Alvarez) 
+
+Tue Jun 22 21:50:47 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gsignal.c: Fix a couple of typos.
+
+Fri Jun 18 22:53:13 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gsourceclosure.h (__G_SOURCECLOSURE_H__): Actually 
+	define the guard after checking for it.  (#108038, 
+	Morten Welinder)
+
+2004-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.4.1 ===
+
+2004-04-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* glib-mkenums.in: Actually convert escape chars in 
+	--vprod.   (#139058, Christophe Saout)
+
+2004-04-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* gparamspecs.c (param_float_init): Correct the initial 
+	minimal value to be -G_MAXFLOAT. The initial values were 
+	inconsistant before, with the initial default being smaller 
+	than the inital minimum.	
+	(param_double_init): Correct the initial minimal value 
+	to be -G_MAXDOUBLE.
+
+Tue Mar  9 09:16:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.4.0 ===
+
+2004-03-10  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Mark the two entries that shouldn't be in the
+	import library (see below) as PRIVATE.
+
+Tue Mar  9 09:16:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.6 ===
+
+2004-03-04  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Another of the glib DLL's functions was erronously
+	present in the stable branch's gobject.def: g_unichar_validate,
+	and nobody noticed until too late. Thus there are applications
+	deployed that expect it to be found in the gobject DLL, and to
+	keep ABI compatibility, we must keep it there forever. Argh.
+
+Mon Mar  1 16:49:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.5 ===
+
+2004-03-01  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add g_slist_remove_all back for ABI
+	compatibility. That entry point actually is in the glib DLL, but
+	it was at some time many years ago by mistake added to
+	gobject.def. Thus there presumably are executables out there that
+	expect it to be exported from the gobject DLL. We don't want to
+	break those. (#134813, J. Ali Harlow)
+
+Fri Feb 27 01:49:22 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib-mkenums.in: Support parsing of intializers containing
+	macros with arguments.  (#129717)
+
+2003-02-28  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : added g_strv_get_type
+
+Tue Feb 24 14:09:21 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.3 ===
+
+Fri Feb 20 02:44:54 2004  Tim Janik  <timj@gtk.org>
+
+	* gtype.h (G_DEFINE_TYPE_EXTENDED): added (GTypeFlags) cast needed by C++.
+
+Tue Feb  3 21:24:01 2004  Tim Janik  <timj@gtk.org>
+
+	* gtype.h (_G_TYPE_CVH): provide a short-cut version for
+	this macro in case value->g_type==checked_type for gcc, similar
+	to instance and class check short-cuts. this speeds up code that
+	makes frequent use of G_VALUE_HOLDS_*() (e.g. setters/getters).
+
+	* gtype.c (type_data_last_unref_Wm): don't call class-cache functions
+	for the uncached case, this rendered g_type_class_unref_uncached()
+	useless. pointed out by Stefan Westerfeld.
+
+Sat Jan 24 18:20:13 2004  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: prefixed the parent_class variable defined by G_DEFINE_TYPE()
+	with type_name. removed type_parent_class argument
+	from G_DEFINE_TYPE_EXTENDED().
+
+2004-01-24  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add a missing entry.
+
+Sun Jan 11 15:34:35 2004  Manish Singh  <yosh@gimp.org>
+
+	* gsourceclosure.c: wrap g_io_channel_ref in a function that returns
+	the passed in GIOChannel, so we aren't abusing GBoxedCopyFunc
+	semantics. Fixes bug #131076.
+
+Sat Jan 10 23:55:42 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* glib-mkenums.1: Document the lowercase_name trigraph option.
+
+Sat Jan 10 02:43:20 2004  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: made G_DEFINE_TYPE_INTERNAL() public by renaming it to
+	G_DEFINE_TYPE_EXTENDED() and moving it into the appropriate section.
+
+Fri Jan  9 23:41:00 2004  Matthias Clasen  <maclas@gmx.de>
+
+	* gboxed.h:
+	* gboxed.c (g_strv_get_type): Add a boxed type for nul-terminated
+	string arrays.  (#110528)
+
+Fri Jan  9 15:34:15 2004  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: added convenience macros G_IMPLEMENT_INTERFACE() and
+	G_DEFINE_TYPE() plus variants.
+
+2003-12-30  Murray Cumming  <murrayc@usa.net>
+  
+        * gobject/glib-mkenums.in: Added a lowercase_name option, to be used
+        next to the enum declaration, where the flag option is already used,
+        when it is not possible to guess where to put the underscores in the
+        _get_type() function name, for instance for GNOMEVFSURIHide.
+
+Fri Dec 26 01:34:01 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gtype.c (g_type_class_peek_parent): Don't acquire a read lock 
+	here.  (#106433, Owen Taylor)
+
+Wed Dec 17 23:29:17 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gvalue.c (g_value_peek_pointer): Use g_assert() instead of
+	g_return_val_if_fail(), suggested by Sheldon Simms.
+
+2003-12-13  Hans Breuer  <hans@breuer.org>
+
+	gobject.def : update externals
+
+Sat Nov 29 14:57:20 2003  Tim Janik  <timj@gtk.org>
+
+	* gobject.c: fix g_object_set() within _init() implementations
+	not working for construct-only properties.
+	(g_object_init): make the object enter a construct_objects list.
+	(g_object_newv): remove object from construct_objects after creation.
+	(g_object_set_valist):
+	(g_object_set_property): allow construct-only properties for
+	objects which are in construct_objects.
+
+Thu Nov 27 17:53:52 2003  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]:
+	(g_type_class_peek_static): variant of class_peek() which works for
+	static types only.
+
+	* gobject.c:
+	(g_object_do_class_init): make ::notify a run-action signal.
+	(g_object_newv): use g_type_class_peek_static() by default to
+	speed up common code path (trades two write-locks for one read-lock).
+	(g_object_disconnect):
+	(g_object_connect): allow signal specification words to be
+	seperated by '-'.
+	(g_object_set_valist):
+	(g_object_new_valist): don't leak values.
+	(g_object_get_property): check property for readability.
+	(g_object_set_property): check property for writability and to
+	not be construct-only.
+	(g_object_set_valist): check property to not be construct-only.
+
+Sat Oct 25 01:09:17 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gparam.h (struct _GParamSpecClass): Add /*< private >*/ 
+	marker for documentation purposes.
+
+Tue Oct 21 23:17:06 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* genums.h (struct _GEnumClass): 
+	* genums.h (struct _GFlagsClass): 
+	* gtypemodule.h (struct _GTypeModuleClass):
+	* gtypemodule.h (struct _GTypeModule): Add /*< public >*/ 
+	and /*< private >*/ markers for documentation purposes.
+
+Tue Oct 14 17:40:19 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gparamspecs.[ch]: Add a new GParamSpecOverride type
+	that is a pointer to a different paramspec in a parent
+	class or interface.
+
+	* gparam.[ch]: Add g_paramspec_get_redirect_target()
+	which follows GParamSpecOverride to the real property.
+	Make g_param_spec_pool_list() hand redirections, 
+	properties on interfaces.
+
+	* gobject.[ch] gobjectnotifyqueue.c: Add
+	g_object_interface_install_property,
+	g_object_interface_find_property,
+	g_object_interface_list_properties(). Redirect virtually all
+	publically exposed GParamSpec's to the redirect target if
+	any. (->constructor is the exception.)
+	(#105894)
+
+Mon Oct 20 22:06:12 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject.h (struct  _GObjectClass): Add /*< public >*/
+	and /*< private >*/ markers for documentation purposes.
+
+Sat Oct 18 01:24:14 2003  Matthias Clasen  <maclas@gmx.de>
+
+	* gtypeplugin.h (struct _GTypePluginClass): Add /*< public >*/
+	and /*< private >*/ markers for documentation purposes.
+
+Thu Oct  2 07:37:12 2003  Tim Janik  <timj@gtk.org>
+
+	* gtype.c: fix post class_init interface initialization logic
+	for child types.
+
+Thu Oct  2 01:16:50 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.[ch]: Add g_type_add/remove_interface_check(),
+	which allows inserting a post-interface-initialization
+	check.
+
+	* testgobject.c: Fix a deprecated usage.
+
+Mon Sep 29 10:51:01 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.[ch]: Add g_type_default_interface_ref/peek/unref
+	for accessing the default vtable of an interface.
+
+Fri Sep 26 17:24:53 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.c (g_type_instance_get_private): You can
+	have instance_real_class_bsa be non-NULL, but still 
+	the class not be in the bsa. (Found by Kris Rietveld)
+
+2003-09-15  Matthias Clasen  <maclas@gmx.de>
+
+	* glib-genmarshal.c (complete_out_arg): Don't generate code 
+	using deprecated APIs.  (#122292, Christian Persch)
+
+Fri Sep 12 16:31:40 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gsignal.[ch]: Add g_signal_accumulator_true_handled(), to
+	do TRUE-stops-emit signals. (#80487, Ron Steinke)
+
+	* Makefile.am: Move testoverride.c and testifaceinit.c to
+	tests/gobject.
+
+2003-09-12  Matthias Clasen  <maclas@gmx.de>
+
+	Make the g_value_set_x_take_ownership() functions "official"
+	part of the API (#100948):
+	
+	* gvaluetypes.[hc]: Add g_value_take_string() (synonym to the
+	now deprecated g_value_set_string_take_ownership()).  
+
+	* gparam.[hc]: Add g_value_take_param() (synonym to the
+	now deprecated g_value_set_param_take_ownership()).  
+
+	* gobject.[hc]: Add g_value_take_object() (synonym to the
+	now deprecated g_value_set_object_take_ownership()).  
+
+	* gboxed.[hc]: Add g_value_take_boxed() (synonym to the
+	now deprecated g_value_set_boxed_take_ownership()).  
+
+Tue Sep  2 19:37:21 2003  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: added support for a "default vtable" per interface,
+	that interface vtables are initialized from.
+	the default vtable is initialized and finalized through class_init,
+	class_finalize and class_data from the interfaces GTypeInfo struct.
+	(type_data_last_unref_Wm): unload child plugin before unreffing
+	parent type.
+
+	testifaceinit.c: minor fixups. fixed up base_init() assertions, since
+	with a default vtable, base_init() may be called multiple times.
+	added default initializer to iface1.
+
+Tue Sep  2 14:53:41 2003  Tim Janik  <timj@gtk.org>
+
+	* gobject-query.c (main): fix iterating over fundamental types.
+
+	* gtype.c: applied patch from owen which keeps internal
+	class initialization state to maintain class and interface
+	initialization happen in the order of:
+	1. class' base_init
+	2. interface' base_init
+	=  interfaces added after here are immediately base_init-ialized
+	3. class_init
+	4. Interface_init
+	=  interfaces added here are immediately Interface_init-ialized
+
+Wed Aug 27 19:53:26 2003  Manish Singh  <yosh@gimp.org>
+
+	* gobject.c: removed stray change from previous commit.
+
+Wed Aug 27 01:25:40 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am testifaceinit.c: Add a detailed test case
+	for interface initialization, testing the ability to
+	add interfaces during class initialization and the ordering
+	of interface base_init, class init, and interface_init.
+	(Expected to fail at the moment.)
+
+Mon Aug 25 14:51:46 2003  Manish Singh  <yosh@gimp.org>
+
+	* gtypemodule.c (g_type_module_register_type): fix typo in last
+	commit, cast to GTypeValueTable * to get rid of const warning.
+
+Mon Aug 25 14:16:48 2003  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* gtypemodule.c (g_type_module_register_type): Clarify
+ 	docs on the return. Fix a memory leak if a type with a
+ 	value table is reloaded. (#112439, Daniel Yacob)
+ 
+Tue Aug 19 05:21:04 2003  Tim Janik  <timj@gtk.org>
+
+	* testgobject.c (main): check private instance data after
+	initialization.
+
+	* gtype.c: for instances with private data, store the real class
+	pointer in a bsearch array during class initialization.
+	(g_type_instance_get_private): fetch the real class of
+	an instance from the bsearch array if necessary.
+
+Tue Aug 19 04:08:14 2003  Tim Janik  <timj@gtk.org>
+
+	* gvalue.c: adapt to new gbsearcharray.h code.
+	(g_value_register_transform_func): turn transform function
+	replacement into a valid operation.
+
+        * gsignal.c: adapt to new gbsearcharray.h code.
+	
+	* gboxed.c: adapt to new gbsearcharray.h code.
+
+Tue Aug 19 01:31:28 2003  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c: added optimizations to skip NOP signal emissions.
+
+2003-08-08  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject.c (object_set_property): Improve the wording of the warning for invalid 
+	values.  (#117246, Mariano Suarez-Alvarez)
+	
+Wed Aug  6 09:57:14 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* testgobject.c (test_signal_accumulator): Add check
+	for instance private usage within in instance_init.
+	(Currently will fail.)
+
+2003-07-20  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated externals
+
+Tue Jul  8 22:29:31 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* gtype.c (type_class_init_Wm): Only access node->data->instance
+	when the node is instantiable.
+
+Tue Jul  8 14:55:27 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.c (type_class_init_Wm): Initialize
+	node->data->instance.private_size here rather than
+	in type_data_make_W() since the class init for the parent
+        class may have changed pnode->data->instance.private_size.
+	(#116921, reported by Soeren Sandmann)
+
+2003-06-18  Matthias Clasen  <maclas@gmx.de>
+
+	* Makefile.am (man_MANS): Removed, these are now installed from
+	docs/reference/gobject.
+
+Fri May 30 14:42:24 2003  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* gobject.c (g_value_set_object): Order refs/unrefs
+ 	so setting the same object back is safe. (#112861,
+ 	Morten Welinder)
+ 
+2003-03-24  Sven Neumann  <sven@gimp.org>
+
+	* gtype.c (type_data_finalize_class_ifaces_Wm): removed leftover
+	debugging message (bug #109093).
+
+Thu Feb 27 17:33:19 2003  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.[ch] testgobject.c: Add support for instance-private data. 
+	g_type_class_add_private(), g_type_instance_get_private(),
+	G_TYPE_INSTANCE_GET_PRIVATE(). (#101959, patch partly by
+	Mark McLoughlin, extensive feedback from Tim Janik.)
+
+2003-03-06  Matthias Clasen  <maclas@gmx.de>
+
+	* gsignal.c (g_signal_handlers_block_matched): 
+	(g_signal_handlers_unblock_matched): 
+	(g_signal_handlers_disconnect_matched): Fix 0/FALSE confusion.
+	(#107662, Morten Welinder)
+
+Mon Feb 17 20:59:47 2003  Tim Janik  <timj@gtk.org>
+
+	* gvalue.c (g_value_register_transform_func): don't assert the types
+	passed in to have value tables. this prevents dynamic types from
+	registering transform functions.
+
+Sun Feb  9 13:44:01 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* gboxed.c (boxed_proxy_value_init): remove lookup of unused
+	BoxedNode.
+
+2003-02-07  Matthias Clasen  <maclas@gmx.de>
+
+	* gtypemodule.c: 
+	* gtype.c: 
+	* gsourceclosure.c: 
+	* gparamspecs.c: 
+	* gparam.c: 
+	* gobject.c: 
+	* gsignal.c: Remove all docs from gobject at Tims
+	request. Documentation is only for weenies anyway...	
+
+2003-01-12  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add g_type_interface_prerequisites. Thanks to
+	Kenichi SUTO.
+
+2002-12-18  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject.c: Add docs.
+
+2002-12-18  Michael Natterer  <mitch@gimp.org>
+
+	* gobject/gtype.c (type_data_finalize_class_ifaces_Wm): applied
+	patch I got from Tim Janik for testing which fixes bug #101521.
+	(restart iterating the interface enties each time we finalized one
+	because they might have been modified).
+
+2002-12-17  Matthias Clasen  <maclas@gmx.de>
+
+	* gparam.c (g_param_spec_internal): Remove markup from doc
+	comment, as GObject doesn't use --sgml-mode yet.
+
+2002-12-15  Matthias Clasen  <maclas@gmx.de>
+
+	* gsignal.c (g_signal_new): Typo fix.
+
+	* gparamspecs.c:  
+	* gparam.c (g_param_spec_internal): 
+	* gobject.c (g_object_class_install_property): Add docs.
+
+2002-12-13  Matthias Clasen  <maclas@gmx.de>
+
+	* glib-genmarshal.c, gobject-query.c: Use g_printf() instead of 
+	system printf.  (#99319)
+
+Thu Dec 12 15:00:10 2002  Manish Singh  <yosh@gimp.org>
+
+	* gvaluetransform.c: use G_G[U]INT64_FORMAT unconditionally,
+	since we'll always have it now.
+
+2002-12-07  Matthias Clasen  <maclas@gmx.de>
+
+	* gparam.c (canonalize_key): Rename to canonicalize_key. Adjust
+	all callers.
+
+2002-12-05  Matthias Clasen  <maclas@gmx.de>
+
+	* gsignal.c (g_signal_new): Explain allowed signal names in more
+	detail.
+
+2002-12-04  Matthias Clasen  <maclas@gmx.de>
+
+	* gsignal.h (g_signal_add_emission_hook): 
+	* gtype.h (g_type_interface_get_plugin): Sync parameter names with
+	docs and implementation.
+
+	* gtype.c (g_type_add_interface_dynamic): 
+	(g_type_interface_get_plugin): 
+	(g_type_interface_peek_parent): 
+	(g_type_query): Add docs.
+
+2002-12-03  Matthias Clasen  <maclas@gmx.de>
+
+	* gtype.c (g_type_get_qdata): 
+	(g_type_set_qdata): 
+	(g_type_interface_add_prerequisite): Add docs.
+
+2002-12-02  Matthias Clasen  <maclas@gmx.de>
+
+	* gobject.c (g_signal_connect_object): Add docs.
+
+2002-11-30  Matthias Clasen  <maclas@gmx.de>
+
+	* gsignal.c: More docs.
+
+2002-11-28  Matthias Clasen  <maclas@gmx.de>
+
+	* gtype.c (g_type_interface_prerequisites): Document as 2.2 
+	API addition.
+
+Thu Nov 21 16:05:50 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.c (g_type_check_instance_cast): Allow
+	NULL to be cast to any type. (Frequently requested,
+	most recently #99023, Lars Clausen.)
+
+Mon Nov  4 14:42:36 2002  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* gtype.c gsignal.c gvaluearray.c: Include config.h
+ 	so DISABLE_MEMPOOLS actually has an effect.
+ 	(#96437, Morten Welinder)
+ 
+ 	* gsignal.c: Conditionalize definition of g_handler_ts
+ 	on DISABLE_MEM_POOLS (#96437)
+	
+2002-10-20  Matthias Clasen  <maclas@gmx.de>
+
+	* gtype.c (g_type_interface_prerequisites): Report only the most
+	specific instantiatable prerequisite, filter out all supertypes of
+	this one (the supertypes are added to the prerequisites array for
+	technical reasons).
+
+2002-10-16  Matthias Clasen  <maclas@gmx.de>
+
+	* glib-mkenums.in: Support for template files.
+	
+	* glib-mkenums.1: Document --template.
+
+2002-10-15  Matthias Clasen  <maclas@gmx.de>
+
+	* gtype.c (g_type_interface_prerequisites): New function to obtain
+	the prerequisites of an interface type.
+
+Sat Oct 12 22:02:32 2002  Tim Janik  <timj@gtk.org>
+
+	* merged up from 2.0:
+
+        * testgobject.c: test creation of new fundamental types.
+
+        * gtype.c (g_type_fundamental_next), (type_node_fundamental_new_W):
+        account for static_fundamental_next storing non-shifted fundamental
+        IDs. this fixes g_type_fundamental_next() not returning a new usable
+        fundamental ID.
+
+Wed Sep 11 16:50:20 2002  Dom Lachowicz <cinamod@hotmail.com>
+
+	* gtype.h: Fix problems with excessive C++ warnings: "ISO C++ forbids nested groups within expressions"
+	
+Fri Jul 26 15:46:36 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gvaluetransform.c: Fix problems with excess ';'
+	by addition of strategic 'extern void glib_dummy_decl (void)'
+	(#83272, David L. Cooper II)
+
+Thu Jul 25 20:34:39 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.c (g_type_interface_add_prerequisite): When
+	adding ancestral prerequisites, add the grandparents,
+	not the siblings. (Problem found by Jon Trowbridge, patch from 
+	Dave Camp, #86879)
+
+2002-07-05  Anders Carlsson  <andersca@gnu.org>
+
+	* gobject.c (g_object_base_class_finalize): Remove debugging
+	message, approved by Tim Janik.
+
+2002-06-11  Anders Carlsson  <andersca@gnu.org>
+
+	* gtypemodule.c: (g_type_module_complete_interface_info):
+	* gtypeplugin.h:
+	Fix argument order. Fixes #82806.
+	
+Mon May 20 15:57:47 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gsignal.c: When printing errors, handle NULL
+	returns from g_type_debug(). (#73559, Laszlo Peter)
+
+	* gtype.c (type_descriptive_name_I): De-inline,
+	since it's only used for debugging.
+
+Tue May  7 15:03:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+        * glib-genmarshal.c: Fix include order for config.h (#71704,
+        Morten Welinder)
+
+2002-05-07  Michael Natterer  <mitch@gimp.org>
+
+	* Makefile.am: use the glib-genmarshal found at configure time
+	if CROSS_COMPILING is set, use the one which was just built
+	otherwise.
+
+Mon May  6 16:06:23 2002  Owen Taylor  <otaylor@redhat.com>
+
+	[ merged from stable ]
+
+	* gobject.c: Remove PROPERTIES_CHANGED enumeration
+	value that wasn't used any more. (#78833, 
+	Matthias Clasen)
+
+	* gboxed.c (g_boxed_copy): Remove check on data[2]
+	that no longer exists. (#80814, Daniel Elstner)
+
+Tue Mar 26 15:21:47 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gsignal.h (g_signal_handlers_*_by_func): Add explicit
+	cast of G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA to
+	GSignalMatchType so that these macros work for C++.
+	(#76454, Damien Sandras)
+
+Mon Mar 25 17:51:05 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-mkenums.in (parse_entries): Fix various bugs and
+	excessive stack usage that crept in the conversion from
+	gtk-mkenums. (#74431)
+
+Mon Mar 25 17:25:57 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.c (g_type_free_instance): Wrap setting freed instance
+	memory to 0xaa in #ifdef G_ENABLE_DEBUG
+
+Thu Mar 21 01:28:14 2002  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc]:
+	* gobject.[hc]: fix extraneous include.
+
+Tue Mar 19 18:57:12 2002  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (check_add_interface_L): applied patch from Matthias Clasen
+	<maclas@gmx.de> to check for prerequisite of interfaces, fixes #74427.
+	fixed mutex recursion in his patch (we can't call g_type_is_a() while
+	holding a read lock).
+
+	* gparam.c (canonalize_key): cleanup.
+
+2002-03-13  Alexander Larsson  <alla@lysator.liu.se>
+
+	* gparam.c (canonalize_key):
+	Function to canonicalize parameter names. Faster than
+	using g_strcanon().
+	(g_param_spec_internal, param_spec_ht_lookup):
+	Use canonalize_key.
+
+2002-03-13  Erwann Chenede  <erwann.chenede@sun.com>
+        * gobject/gclosure.c  
+	* gobject/gobject.c 
+	* gobject/gsignal.c: fixed cast problems with function pointer
+	to avoid warnings (with forte compiler) (#73898)
+	
+2002-03-05  Sven Neumann  <sven@gimp.org>
+
+	* gvaluetransform.c (g_value_transforms_init): don't try to 
+	register undeclared value transform functions if G_GINT64_FORMAT
+	or G_GUINT64_FORMAT are undefined (#73586).
+
+2002-03-03  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.msc.in
+	* makefile.mingw.in: Rename testgruntime to testgobject here, too.
+
+Sun Mar  3 04:11:58 2002  Tim Janik  <timj@gtk.org>
+
+	* gobject.c: placed a comment about not changing CArray until we have
+	g_object_list_watched_closures().
+
+	* gparam.h (struct _GParamSpecClass): added padding.
+
+	* gobjectnotifyqueue.c (struct _GObjectNotifyQueue): abuse
+	g_list_alloc() to allocate GObjectNotifyQueue to et rid
+	of locking issues.
+
+Tue Feb 26 10:51:00 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (testgobject_LDADD): Rename testgruntime
+	to testgobject.
+
+Sun Feb 24 22:08:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gtypemodule.[ch] (g_type_module_add_interface): Make
+	GInterfaceInfo paramter const to correspond to the
+	conventions for the g_type_add_interface() functions.
+	(#72461, Miroslaw Dobrzanski-Neumann)
+
+Sat Feb 23 13:28:56 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gtypeplugin.h (struct _GTypePluginClass): Add some
+	padding to the class.
+
+	* gclosure.h (struct _GClosure): Fix typo in comment.
+
+2002-02-20  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add g_value_set_object_take_ownership and
+	g_value_set_param_take_ownership.
+
+Wed Feb 20 22:55:15 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.c: Fix implicit conversions between void * and 
+	function pointer (Miroslaw Dobrzanski-Neumann, #71963)
+
+Sun Feb 16 22:08:48 2002  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]:
+	* gparam.[hc]: provide marshaller specific value_set_*_take_ownership()
+	variants.
+
+	* gvalue.h: shrink GValue's data contents to 2 unions.
+
+	* glib-genmarshal.c: fix release and realeas_check hackage by always
+	using _take_ownership() variants. directly access value contents if
+	G_ENABLE_DEBUG is not defined.
+
+	* gobject.h: add padding pointers to the class struct.
+
+Wed Feb 13 17:22:37 2002  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (g_type_value_table_peek): fixed a check for node not being NULL.
+
+Wed Feb 13 06:53:50 2002  Tim Janik  <timj@gtk.org>
+
+	* gparam.c: remove extraneous redefinition of G_PARAM_SPEC_CLASS().
+
+Wed Feb 13 06:29:51 2002  Tim Janik  <timj@gtk.org>
+
+	* gvaluetransform.c: cosmetic cleanups, fixed [u]int64->string
+	conversions.
+
+	* ChangeLog: added entry from owen which went into the wrong
+	file.
+
+Fri Feb  8 23:52:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+        * gobject/gvaluetransform.c: Register transformations for
+        gint64, guint64. (#70780, patch from Andy Wingo)
+
+2002-02-10  Hans Breuer  <hans@breuer.org>
+
+	* gvaluetransform.c : msvc 5.0 can't cast from uint64 to
+	double. Disable respective transform_func than.
+
+	* makefile.msc.in : build test programs
+
+Thu Jan 24 07:39:56 2002  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_signal_connect_object): return gulong instead
+	of guint.
+
+Fri Jan 11 12:26:36 2002  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.c: fixed param_value_array_values_cmp(),
+	param_value_array_validate() and
+	param_value_array_set_default() to deal with NULL value
+	arrays.
+
+Wed Jan  9 05:23:27 2002  Tim Janik  <timj@gtk.org>
+
+	* gobject.h (G_OBJECT_WARN_INVALID_PROPERTY_ID): cosmetic fix.
+
+2002-01-05  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : use -FImsvc_recommended_pragmas.h
+
+Fri Jan  4 04:36:46 2002  Tim Janik  <timj@gtk.org>
+
+	* gtype.h (G_TYPE_FLAG_RESERVED_ID_BIT): turn this into a GType,
+	so negating it works on 64bit platforms.
+
+2001-12-21  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add g_signal_get_invocation_hint.
+
+Tue Dec 18 21:39:57 2001  Tim Janik  <timj@gtk.org>
+
+	* testoverride.c: added some assertions to test
+	g_signal_get_invocation_hint().
+
+	* gsignal.[hc]: remove signal_id argument from
+	g_signal_chain_from_overridden(), the parameters are assumed to match
+	the innermost signal currently in emission for this instance.
+	added g_signal_get_invocation_hint() to figure the invocation hint
+	of the innermost signal emission of an instance.
+
+	* gsignal.c (g_signal_list_ids): fix G_BSEARCH_ARRAY_NODES() to
+	access a bsearch array and not a pointer to it (discovered by
+	Sven Neumann).
+
+2001-12-17  Anders Carlsson  <andersca@gnu.org>
+
+	* gtype.h (G_TYPE_FLAG_RESERVED_ID_BIT): Set the reserved bit
+	to (1 << 0) instead of (1 << 30). 
+
+2001-12-14  James Henstridge  <james@daa.com.au>
+
+	* Makefile.am: add rules to build it.
+
+	* testoverride.c: test program for closure override/chaining.
+
+Thu Dec 13 08:03:17 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c: implemented closure chaining.
+
+2001-12-08  Christopher Blizzard  <blizzard@redhat.com>
+
+	* gsignal.h (g_signal_connect): Explicitly add a cast to the last
+	argument so that the macro will work from C++.
+
+2001-12-06  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in (gobject_OBJECTS): Add gsourceclosure.o.
+
+Mon Nov 26 09:55:12 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: typedef GType to gulong instead of gsize, if possible.
+
+	* gtype.c: fixups for GType being sizeof(long) wide (changed
+	UINT casts).
+	* gsignal.c:
+	* gclosure.c:
+	* gparam.c: likewise.
+
+Sun Nov 25 22:33:32 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: removed enum GTypeFundamentals. use macros
+	to provide the constant fundamental type IDs, so they
+	all return numbers of type GType, and not int.
+	sizeof(GTypeFundamentals) < sizeof(GType) problem reported
+	and fix sugegsted by Havoc.
+
+2001-11-23  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated externals
+
+Mon Nov 19 14:35:56 2001  Owen Taylor  <otaylor@redhat.com>
+ 
+ 	* *.h: Improve the detection of invalid includes by moving
+ 	the test outside the duplicate include guards.
+ 
+	* gsourceclosure.c (g_source_set_closure): Doc fix.
+
+Thu Nov 22 03:30:57 2001  Tim Janik  <timj@gtk.org>
+
+	* gvalue.h (G_TYPE_IS_VALUE): use g_type_check_is_value_type()
+	instead of g_type_value_table_peek().
+
+	* gtype.[hc] (type_check_is_value_type_U): speed up check
+	LOCK-less by caching lookups in node->mutatable_has_value_table.
+
+	* gtype.[hc]: removed locks where possible. partly based on
+	patches from owen and alex.
+
+Thu Nov 22 00:26:26 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: provide G_TYPE_FUNDAMENTAL_SHIFT and
+	g_type_fundamental_next() to return next usable fundamental
+	type. use TypeNode pointers as type IDs.
+	
+2001-11-22  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in (DEFINES): Set G_LOG_DOMAIN as in Makefile.am.
+
+	* gparamspecs.h (GOBJECT_VAR): Can't use GLIB_VAR here, as that
+	makes sense only when building libglib. GOBJECT_VAR is similar for
+	libgobject.
+
+	* gobject.def: Add g_param_spec_types, remove
+	g_type_fundamental_branch_last.
+
+Wed Nov 21 17:23:33 2001  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.[hc]: put newly created param spec types into a
+	global array.
+
+	* gboxed.[hc]: moved boxed types with _get_type() function here,
+	for: G_TYPE_CLOSURE, G_TYPE_VALUE, G_TYPE_VALUE_ARRAY,
+	G_TYPE_GSTRING.
+
+	* gtype.h: removed fundamental branch APIs and derived enum
+	values. define GType as gsize.
+
+2001-11-19  jacob berkman  <jacob@ximian.com>
+
+	* gobjectnotifyqueue.c: include glib-object.h rather than
+	gobject/gobject.h
+
+2001-11-16  Mark McLoughlin  <mark@skynet.ie>
+
+	* glib-mkenums.in: allow the enums name to not be on the same
+	line as the trailing '}'. (#64714)
+
+2001-11-18  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : remove g_log_domain_gruntime usage
+
+Sat Nov 17 18:14:40 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-genmarshal.c: Exit with non-zero exit status if
+	any errors were encountered.
+
+	* glib-genmarshal.c: Instead of generating gobject/gmarshal.h
+	#include only for the header, generate glib-object.h 
+	#include for both the header and body. (#63834)
+
+	* glib-genmarshal.c: Generate include guards around the 
+	content unless --nostdinc is specified.
+
+2001-11-17  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add g_pointer_type_register_static.
+
+2001-11-15  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Reflect recent changes.
+
+Tue Nov 13 23:18:10 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc]: add API for chaining:
+	g_signal_chain_from_overridden() and g_signal_override_class_closure(),
+	implementation yet to come.
+
+	* gtype.[hc], Makefile.am: provide G_LOG_DOMAIN as compile flag.
+	
+	* gparam.[hc]: s/g_param_get/g_param_spec_get/ for get_nick,
+	get_name and get_blurb, to be consistent with the rest of the
+	g_param_spec_*() functions.
+	
+	* gparamspecs.[hc]: got rid of bogus GClosure paramspec.
+	G_TYPE_CLOSURE is a boxed type already.
+	
+Tue Nov 13 22:16:41 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: API cleanups.
+	remove g_type_check_flags(), provide g_type_test_flags() as
+	a *private* function.
+	s/g_type_check_is_a/g_type_check_class_is_a/, private function.
+	s/g_type_instance_is_a/g_type_check_instance_is_a/, also private.
+
+Tue Nov 13 20:02:47 2001  Tim Janik  <timj@gtk.org>
+
+	* gparam.h: fix standard type macros.
+
+Wed Nov  7 00:56:00 2001  Tim Janik  <timj@gtk.org>
+
+	* gclosure.h: provide G_CLOSURE_N_NOTIFIERS() for people that need
+	to walk the notifier list (puhh, black magic, stay-away-warning ;).
+
+Mon Nov  5 18:59:08 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.h: 
+	* gsignal.h: we need signal.h for G_BREAKPOINT().
+
+Sun Nov  4 14:01:23 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gvaluetypes.[ch]: Add a function g_pointer_type_register_static()
+	to register a type derived from G_TYPE_POINTER.
+
+2001-11-03  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : gobject-query needs gmarshal.[hc,stings]
+	so build it after them. Add gsourceclosure.obj. 
+
+	* gobject.def : removed duplicates, added mising
+
+Mon Oct 29 11:05:15 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-mkenums.in: Generate glib-mkenums from glib-mkenums.in, 
+	substituting in path to perl.  (#63093, Dan Winship)
+
+	* Makefile.am (bin_SCRIPTS): Remove hack to copy glib-mkenums
+	from srcdir.
+
+2001-10-26  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: When running glib-genmarshal, set PATH to
+	include ../glib.
+
+2001-10-23  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: (Win32): If we have built the MSVC import library,
+	install it. Install the gcc import library. Also support
+	uninstall.
+
+2001-10-13  Matthias Clasen  <matthiasc@poet.de>
+
+	* glib-genmarshal.1, glib-mkenums.1: Typo fixes.
+
+Fri Oct 12 18:40:18 2001  Tim Janik  <timj@gtk.org>
+
+	* cosmetic fixups.
+
+Wed Oct 10 17:25:22 2001  Joshua N Pritikin  <vishnu@pobox.com>
+
+	* glib-genmarshal.c gparamspecs.[ch] gtype.[ch] gvalue.h
+	gvaluecollector.h gvaluetypes.[ch]: Fill in missing support for
+	gint64 & guint64 (#59254).
+	
+	* Unconditionalize same (compile with or without G_HAVE_INT64).
+
+Wed Oct 10 15:38:58 2001  Joshua N Pritikin  <vishnu@pobox.com>
+
+	* gparamspecs.h (G_IS_PARAM_SPEC_FLAGS): Fix order of
+	*_PARAM_SPEC_ULONG defines.
+
+Thu Oct  4 01:10:52 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gparamspecs.h: Add missing G_HAVE_GINT64 conditionalization.
+
+Wed Oct  3 16:02:24 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* glib-genmarshal.c gparamspecs.[ch] gvalue.h 
+        gobject/gvaluetypes.[ch]: Add support for G_TYPE_INT64
+	and storing it in GValue (Patch from Mathieu Lacage, #59254.)
+
+2001-10-03  jacob berkman  <jacob@ximian.com>
+
+	* gtype.c (type_iface_retrieve_holder_info_Wm): 
+	(type_iface_vtable_init_Wm): 
+	(type_iface_vtable_finalize_Wm): 
+	(g_type_class_ref): 
+
+	* gobject.c (g_object_get_property): s/retrive/retrieve/
+
+2001-09-25  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Use new macros for .def file, and check for
+	MS_LIB_AVAILABLE, new rule to build MS import library.
+
+	* makefile.msc.in: Use same DLL and import library names as
+	libtool.
+	
+2001-09-21  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated externals
+
+2001-09-19  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.rc.in: Correct InternalName and OriginalFilename to
+	match what we actually produce.
+
+Tue Sep 18 23:09:02 2001  Tim Janik  <timj@gtk.org>
+
+	* gparam.[hc]: rename *nick and *blurb fields to catch
+	direct accesses in third party code.
+	provide g_param_get_nick(), g_param_get_blurb() and
+	g_param_get_name() accessors.
+
+Mon Sep 10 20:31:37 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: removed extraneous GObject* returns from a
+	couple functions that are very unlikely to be used in nested.
+	changed gpointer->GObject* for a couple return values/arguments.
+	this fixes #50206.
+
+Mon Sep 10 19:27:47 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]:
+	g_type_add_interface*(): implement the ability to add an interface to
+	a type whose parents already conform to this interface.
+	such "overriding" interfaces, when initialized, are not just initialized
+	with 0, but with a copy of the interface they override.
+	g_type_interface_peek_parent(): new function, return the interface
+	that this interface "overrides", if any.
+
+	* testgruntime.c: test new interface stuff.
+
+2001-09-10  Alex Larsson  <alexl@redhat.com>
+
+        * gobject/gboxed.[ch]:
+        * gobject/gsourceclosure.c:
+        Removed is_refcounted and GBoxedInitFunc from
+        g_boxed_type_register_static().
+
+Sat Sep  8 14:13:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject/Makefile.am: Move gbsearcharray.[ch] to glib
+	as a private ininstalled header.
+
+Tue Sep  4 22:24:48 2001  Matthias Clasen  <matthiasc@poet.de>
+
+	* gobject.c (g_object_base_class_finalize): typo fix.
+
+Tue Sep  4 01:49:18 2001  Tim Janik  <timj@gtk.org>
+
+	* gsourceclosure.c: make closure_callback_funcs static,
+	added some g_return_if_fail() statements.
+
+Mon Aug 27 14:55:27 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gsourceclosure.[ch] (g_source_set_closure): Implement.
+
+	* gsourceclosure.[ch]: Add GType's for GIOChannel, GIOCondition.
+
+2001-08-17  James Henstridge  <james@daa.com.au>
+
+	* gobject.c (WeakRefStack): add an object member to the structure.
+	(weak_refs_notify): pass wstack->object as extra argument to
+	notify functions.
+	(g_object_weak_ref): set wstack->object when initialising
+	WeakRefStack.
+
+	* gobject.h (GWeakNotify): add second argument to prototype which
+	gives the pointer to where the object that is being disposed of
+	was.
+
+Wed Jul 18 19:42:31 2001  Tim Janik  <timj@gtk.org>
+
+        * gtype.h: if __GNUC__ is defined, inline a test for an exact type
+        match for instances and classes in G_TYPE_CHECK_INSTANCE_TYPE() and
+        G_TYPE_CHECK_CLASS_TYPE() before calling g_type_instance_is_a().
+
+Sun Aug 12 02:07:10 2001  Tim Janik  <timj@gtk.org>
+
+	* gvaluearray.[hc]: fix preallocation logic, support DISABLE_MEM_POOLS
+	properly, group value allocations.
+	(g_value_array_new): fix semantic of n_prealloced argument, so it's
+	really just about preallocation space.
+
+2001-07-23  Padraig O'Briain <Padraig.Obriain@Sun.COM>
+	
+	* gobject/gobjectnotifyqueue.c: fix unconditional check of
+	first GParamSpec in g_object_notify_queue_thaw(); to prevent
+	property notification being lost.
+
+2001-08-06  Sven Neumann  <sven@gimp.org>
+
+	* gobject.[ch]: 
+	added new functions g_object_[add|remove]_weak_pointer().
+
+2001-08-01  Sven Neumann  <sven@gimp.org>
+
+	* gsignal.h: added convenience macro g_signal_connect_after().
+
+2001-07-29  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated externals
+
+2001-07-20  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated externals
+
+	* makefile.msc.in : reflect glib move
+
+Tue Jul 10 18:50:16 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.h (struct _GSignalQuery): fix misplaced comment.
+
+Mon Jul  2 07:17:47 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_object_weak_ref): 
+	(g_object_watch_closure): congrats tim, introducing of-by-one
+	errors like on my very first day of C programming.
+
+Sat Jun 30 11:07:00 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: provide weak_ref/weak_unref functions,
+	invoked from ->dispose. renamed ->shutdown() to ->dispose(),
+	provide "public" API entry here: g_object_run_dispose(), this
+	fucntion should _only_ be called from object system implementations
+	(e.g. gtkobject.c) if at all.
+
+	* gtypemodule.c (g_type_module_dispose): s/shutdown/dispose/
+
+	* gsignal.h: removed compat aliases.
+
+	* gobject.c (g_object_connect): support data objects.
+	
+Sat Jun 30 13:17:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* testgruntime.c (test_object_class_init)
+	  gobject.c (g_object_do_class_init): 
+	  g_signal_newc() => g_signal_new().
+
+Thu Jun 28 22:49:40 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gtype.[ch] gobject-query.c testgruntime.c: Remove
+	debug flag argument to g_type_init() and add
+	g_type_init_with_debug_flags().
+
+Thu Jun 28 16:42:49 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c (g_signal_lookup): 
+	(g_signal_list_ids): give elaborate warnings about invalid types,
+	non-instantiatable types and unloaded types that we can't operate on.
+
+	* gparam.[hc]: g_param_spec_pool_belongings() ->
+	g_param_spec_pool_list_owned().
+
+	* gsignal.[hc]: renamed:
+	g_signal_newc -> g_signal_new
+	g_signal_disconnect_by_func -> g_signal_handlers_disconnect_by_func
+	g_signal_block_by_func -> g_signal_handlers_block_by_func
+	g_signal_unblock_by_func -> g_signal_handlers_unblock_by_func
+	added GConnectType to simplify (..gboolean swapped, gboolean after)
+	args.
+
+	* gobject.[hc]: changed prototypes accordingly.
+
+2001-06-22  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated externals
+
+	* gobjectnotifyqueue.c : include <string.h> for memset ()
+
+Thu Jun 21 02:43:10 2001  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.h: s/long/int/ for default_value in enum and flags
+	pspecs.
+
+Wed Jun 20 03:59:42 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: added debugging variants g_type_name_from_class(),
+	g_type_name_from_instance().
+
+Mon Jun 11 17:07:06 2001  Tim Janik  <timj@gtk.org>
+
+	* gboxed.[hc]: remove left-over usages of an anonymous GBoxed typedef.
+
+	* gobjectnotifyqueue.c: moved property notify queue implementation
+	bits into this function.
+
+	* gparam.[hc]: added g_param_spec_pool_belongings(), completed
+	g_param_spec_pool_list(). added GParameter for _setv() functions.
+
+	* gobject.[hc]: use gobjectnotifyqueue.h implementation now.
+	got rid of properties_changed signal.
+	new functions g_object_newv(), g_object_class_list_properties().
+	removed "properties_changed" signal.
+
+	* gtype.[hc]: added g_type_depth() to figure number of parent
+	types + 1 for a type.
+
+	* gsignal.h: add g_signal_connect() (as per owen's request) and
+	g_signal_connect_swapped().
+
+2001-06-13  Havoc Pennington  <hp@redhat.com>
+
+	* Makefile.am (progs_LDADD): link to ./libgobject-1.3.la
+	since an installed libgobject was somehow being found; think 
+	it's a libtool bug, but this workaround should do for now.
+
+2001-06-12  Havoc Pennington  <hp@redhat.com>
+
+	* Makefile.am (glib-mkenums): don't put $(srcdir)/glib-mkenums in
+	bin_SCRIPTS, that breaks make install. Instead put 'glib-mkenums'
+	in bin_SCRIPTS and cp it into builddir
+
+Thu May 31 17:56:47 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject-query.c: Fix mispelling in help output.
+	(#53952, Skip Montanaro)
+
+2001-05-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am (EXTRA_DIST): Really distribute glib-mkenums, now
+	that bin_SCRIPTS doesn't seem to care about doing so anymore.
+
+Mon May 28 06:51:24 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c (signal_emit_unlocked_R): fixed bad faux-pass, forgot
+	to release signal lock when restarting emissions.
+
+Sun May 27 04:52:28 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc] (g_signal_stop_emission_by_name): added variant
+	to stop signal emissions through a detailed_signal string.
+
+	* gsignal.c (signal_emit_R) (g_signal_emit_valist): account for
+	the fact that g_value_* functions may cause signal emissons by
+	unlocking the global signal system lock around g_value_* functions.
+	(signal_emit_unlocked_R): renamed this from signal_emit_R() to reflect
+	that this functions acquires the lock on its own now.
+
+2001-05-24  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : changed depndencies to build glib-genmarshal
+	first and statically linked with glib, which makes it independent
+	from the installed glib version. Added new object files to build.
+
+	* gobject.def : updated
+
+Thu May 24 08:52:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.[ch] (g_value_set_object): gpointer, not
+	gpointer *.
+
+2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am (bin_SCRIPTS): made 'make distcheck' happy.
+
+	* gobject.def: Removed g_param_spec_stringc.
+
+Tue May 22 02:46:13 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_value_set_object): make g_value_set_object()
+	take a gpointer v_object so people don't need to G_OBJECT()
+	cast NULL pointers (C code convenience).
+
+Mon May 14 01:49:01 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc] (g_signal_handler_is_connected): new function
+	to check whether a handler is still connected to an instance
+	(by handler id).
+
+Thu May 10 14:00:48 2001  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.[hc]: removed g_param_spec_stringc() in lack of
+	evidence of public need.
+
+	* gsignal.h: added g_signal_disconnect_by_func(),
+	g_signal_block_by_func() and g_signal_unblock_by_func() convenience
+	macros as per owen's request.
+
+	* gtype.c (SIZEOF_FUNDAMENTAL_INFO): align sizeof (GTypeFundamentalInfo)
+	to size of longs and pointers.
+
+2001-05-05  James Henstridge  <james@daa.com.au>
+
+	* Makefile.am: glib-mkenums is not a compiled program, so shouldn't
+	be in the bin_PROGRAMS primary.  Put it in bin_SCRIPTS instead, and
+	removed the glib_mkenums_SOURCES var.
+
+Thu May  3 06:10:23 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.c (g_object_set_[q]data_full): Make types of ternary
+	operator correspond. (Fixes compilation errors with Sun CC,
+	#52230)
+
+Mon Apr 30 20:03:56 2001  Tim Janik  <timj@gtk.org>
+
+	* glib-mkenums (usage): removed \v escaping, newer perl versions don't
+	support this, and it'S probably useless anyways.
+
+Sat Apr 28 23:39:42 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc]: made signal handler and emission hook ids gulongs.
+	(signal_handlers_foreach_matched_R): only invoke callback for handlers
+	that are not disconnected (id>0).
+	(signal_emit_R): prevent invocation of signal handlers during the
+	emission they were connected within.
+	
+	* glib-mkenums: publically installed perl-script to parse C code
+	enums and generate descriptions thereof.
+	* glib-mkenums.1: assorted man page.
+	
+2001-04-19  Havoc Pennington  <hp@redhat.com>
+
+	* gobject.c (g_object_get_valist): We were returning junk memory
+	here, because we didn't copy the value (G_VALUE_NOCOPY_CONTENTS
+	passed to G_VALUE_LCOPY) and then we freed the GValue immediately
+	after. Removed G_VALUE_NOCOPY_CONTENTS from here; need a
+	G_VALUE_STEAL_CONTENTS or the like if we want this optimization.
+
+Wed Apr 18 09:46:56 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.c gsignal.c: Change C++ comments for FIXME's to
+	C comments. (Patch from Andres Salomon)
+
+2001-04-14  Hans Breuer  <hans@breuer.org>
+
+	* gobject.def : updated
+
+Mon Apr  9 18:56:15 2001  Tim Janik  <timj@gtk.org>
+
+	* gclosure.c (g_closure_invoke): only require marshal/meta_marshal if
+	we're valid (about to actually do marshalling).
+
+Tue Apr  3 20:23:24 2001  Tim Janik  <timj@gtk.org>
+
+	* NEWS: updates.
+
+Tue Apr  3 14:06:00 2001  Tim Janik  <timj@gtk.org>
+
+	* gparam.[hc]: added g_param_spec_pool_list() to list pspecs per
+	owner_type. the pspecs are not referenced, so the caller is
+	supposed to have some idea about owner_type not randomly
+	nuking his pspec's. if this is going to provide problems in
+	the future, we can either auto-ref the pspecs, or add a
+	_foreach variant, though the latter would have to invoke
+	the callback while pspec's mutex is acquired, so i just
+	went for the _list variant for now.
+
+	* gclosure.h (G_CALLBACK): made GCallback a void (*) (void) fucntion.
+
+Sat Mar 31 23:55:58 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.h:
+	* gparamspecs.[hc]: applied patch from owen to implement
+	GParamSpecUnichar.
+
+Fri Mar 30 07:34:02 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (type_iface_retrive_holder_info_Wm): 
+	* gtypeplugin.c (g_type_plugin_complete_interface_info): 
+	* gtypemodule.c (g_type_module_complete_interface_info): 
+	change order of instance_type and interface_type so they match
+	the g_type_add_interface_*() API.
+
+	* gsignal.c (g_signal_emit_valist): always assign C return value
+	location, people depending on unaltered return values after emissions
+	that had no handlers to run need to use g_signal_emitv().
+
+	* gtype.[hc] (g_type_query): new function to allow querying of
+	class and object size (semantics like g_signal_query()).
+	currently the implementation is better held conservative so as to
+	only support types that are classed and static.
+
+2001-03-29  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Updates.
+
+Wed Mar 28 17:04:06 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (object_queue_property): only queue readable properties
+	for notification changes.
+
+Thu Mar 22 13:36:50 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c (g_signal_newv): catch G_SIGNAL_RUN_FIRST with a return value.
+
+2001-03-21  Martin Baulig  <baulig@suse.de>
+
+	* gboxed.[ch] (g_value_dup_boxed): This takes a `const GValue *'
+	argument.
+
+2001-03-18  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Correct some renamed functions.
+
+Sat Mar 17 23:18:36 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_object_get_property): minor bug-fix.
+
+	* gbsearcharray.[hc]: provide a macro for static initialization and
+	functions g_bsearch_array_new() and g_bsearch_array_destroy() for
+	dynamic allocations.
+	
+	* gboxed.c: introduce G_TYPE_GSTRING, boxed type for GString.
+	
+	* gclosure.[hc]: naming corrections.
+
+Fri Mar  9 16:42:08 2001  Tim Janik  <timj@gtk.org>
+
+	* gvaluetypes.[hc]: moved g_strdup_value_contents() into this file as
+	a public function (was static in gobject.c before). it's a bit odd
+	to have that function here, especially since it requires extra includes,
+	but then it doesn't very well fit somewhere else either.
+
+	* gparamspecs.c: added default/max/min checks to param spec creation
+	functions.
+
+2001-03-10  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add a couple of missing entries.
+
+	* Makefile.am (libgobject_1_3_la_LIBADD): Use only on Win32.
+
+Fri Mar  9 14:57:17 2001  Tim Janik  <timj@gtk.org>
+
+	* testgruntime.c: test program. covers run first/last/cleanup signal
+	handlers, return value accumulator, signal string returns, and
+	interface types in signal arguments.
+
+	* gtype.c (g_type_value_table_peek): for interface types without
+	value table, try looking up a value table from an instantiatable
+	prerequisite type (this is safe as an interface may only have
+	one instantiatable prerequisiste).
+	(type_check_is_value_type_U): same here.
+
+	* gsignal.c (g_signal_newv): assert that return types never have
+	G_SIGNAL_TYPE_STATIC_SCOPE set.
+	(g_signal_newc): only create class closure if the class_offset is not
+	0.
+
+Fri Mar  9 10:14:00 2001  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.c (g_param_spec_object): use g_type_is_a() to check
+	for object_type being a G_TYPE_OBJECT, not G_TYPE_IS_OBJECT(), since
+	that wouldn't allow interface types.
+
+	* gtype.c (g_type_interface_add_prerequisite): arg, fixed small cnp bug
+	with bad implications and an off-by-one error.
+
+Thu Mar  8 16:34:22 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* gvaluetransform.c: Include <string.h> for memcpy.
+
+	* gvaluetransform.c (DEFINE_SPRINTF): Remove unnecessary
+	and ANSI-illegal ## token pasting.
+
+Thu Mar  8 18:11:52 2001  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c: eek, fixed old hook detail storage code.
+
+Thu Mar  8 16:35:48 2001  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.[hc]: s/g_param_spec_string_c/g_param_spec_stringc/.
+
+	* gsignal.[hc]: fixed accumulator invocation, implemented emission
+	hooks. and no, neither of these callbacks are called via a closure,
+	language bindings can wrap the accumulator and emission hook
+	interface, they already get parameters marshalled into a GValue array.
+	(g_signal_connect): removed this function as its C specific, doesn't
+	cover the swapped argument, is too close to its broken original
+	gtk_signal_connect() and creates demand for _swapped, _after and
+	_swapped_after variants <brrr>.
+	(g_signal_connectc): convenience macro to connect a C handler
+	func with data, like the old g_signal_connect() plus swapped
+	argument.
+
+	* gtype.h:
+	* gboxed.c: added G_TYPE_VALUE boxed type.
+
+Wed Mar  7 19:02:51 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (type_node_add_iface_entry_W): catch when adding an interface
+	to an ancestor of a child that already conforms to this interface.
+	currently we spew a warning here, should we be silent?
+	(g_type_interface_add_prerequisite): new function to add a prerequisite
+	type to an interface, that must succeed an instance is_a prerequisite
+	type check before the interface can be added to an instance. the
+	prerequisite types are also suuported in is_a checks of the interface.
+	(g_type_instance_is_a):
+	(g_type_check_instance_cast):
+	(g_type_check_instance): cleanups and optimizations.
+	(g_type_class_is_a):
+	(g_type_check_class_cast): same, also prevented these from accepting
+	interface types, as class structures don't nest interfaces.
+
+2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am: Avoid rebuilding everything everytime.
+
+Wed Mar  7 09:36:33 2001  Tim Janik  <timj@gtk.org>
+
+	* gboxed.[hc]: changed prototype of g_boxed_type_register_static()
+	to contain an optional init function and a hint at whether the
+	boxed structure uses ref counting internally.
+	added g_value_set_boxed_take_ownership().
+	made G_TYPE_BOXED an abstract value type.
+
+	* genums.[hc]: made G_TYPE_ENUM and G_TYPE_FLAGS abstract value
+	types.
+
+	* glib-genmarshal.c: argument type changes, preparation for third-party
+	arg specification.
+
+	* gobject.[hc]: cleaned up get/set property code.
+	added g_strdup_value_contents() to improve warnings.
+
+	* gparam.[hc]: added g_param_value_convert(), taking over responsibility
+	of the old g_value_convert(). added G_PARAM_LAX_VALIDATION flag so
+	validation alterations may be valid a part of the property setting
+	process.
+
+	* gparamspecs.[hc]: made value comparisons stable (for sort applications).
+	added GParamSpecValueArray, a param spec for value arrays and
+	GParamSpecClosure. nuked the value exchange functions and
+	GParamSpecCCallback.
+
+	* gtype.[hc]: catch unintialized usages of the type system with
+	g_return_val_if_uninitialized(). introduced G_TYPE_FLAG_VALUE_ABSTRACT
+	to flag types that introduce a value table, but can't be used for
+	g_value_init(). cleaned up reserved type ids.
+
+	* gvalue.[hc]: code cleanups and saner checking.
+	nuked the value exchange API. implemented value transformations, we
+	can't really "convert" values, rather transforms are an anylogy to
+	C casts, real conversions need a param spec for validation, which is
+	why g_param_value_convert() does real conversions now.
+
+	* gvaluearray.[hc]: new files that implement a GValueArray, a struct
+	that can hold inhomogeneous arrays of value (to that extend that it
+	also allowes undefined values, i.e. G_VALUE_TYPE(value)==0).
+	this is exposed to the type system as a boxed type.
+
+	* gvaluetransform.c: new file implementing most of the former value
+	exchange functions as single-sided transformations.
+
+	* gvaluetypes.[hc]: nuked G_TYPE_CCALLBACK, added
+	g_value_set_string_take_ownership().
+
+	* *.h: s/G_IS_VALUE_/G_VALUE_HOLDS_/.
+
+	* *.[hc]: many fixes and cleanups.
+
+	* many warning improvements.
+
+Tue Feb 27 18:35:15 2001  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_object_get_valist): urg, pass G_VALUE_NOCOPY_CONTENTS
+	into G_VALUE_LCOPY(), this needs proper documenting.
+
+	* gparam.c: fixed G_PARAM_USER_MASK.
+
+	* gtype.c (type_data_make_W): 
+	(type_data_last_unref_Wm): fixed invalid memory freeing.
+
+	* gobject.c (g_object_last_unref): destroy signal handlers associated
+	with object, right before finalization.
+
+	* gsignal.c (g_signal_parse_name): catch destroyed nodes or signals
+	that don't actually support details.
+
+	* gobject.[hc]: got rid of property trailers. nuked GObject
+	properties "data" and the "signal" variants.
+	(g_object_connect): new convenience function to do multiple
+	signal connections at once.
+	(g_object_disconnect): likewise, for disconnections.
+
+	* gparam.[hc] (g_param_spec_pool_lookup): took out trailer support.
+
+	* gvalue.[hc]: marked g_value_fits_pointer() and g_value_peek_pointer()
+	as private (the latter got renamed from g_value_get_as_pointer()).
+
+2001-02-21  Tor Lillqvist  <tml@iki.fi>
+
+	* *.h: Use G_BEGIN_DECLS and G_END_DECLS.
+
+	* Makefile.am: Use libglib-1.3.la from top_builddir. Invoke
+	libtool with -no-undefined for Win32 and Cygwin.
+
+Wed Feb 21 18:31:46 2001  Jonathan Blandford  <jrb@redhat.com>
+
+	* gsignal.h (g_signal_connect): Add g_signal_connect define to
+	make porting from gtk_signal_connect easy.
+
+	* gsignal.c (g_signal_emit_valist): Use G_TYPE_FROM_INSTANCE
+	(instance) instead of node->itype when initting the value.
+
+2001-02-17  Havoc Pennington  <hp@pobox.com>
+
+        Applied patch from Soeren Sandmann:
+	
+	* gvaluetypes.c (g_value_get_string): G_CONST_RETURN
+
+	* gtype.c (g_type_name): G_CONST_RETURN
+
+	* gsignal.c (g_signal_name): G_CONST_RETURN
+
+	* gobject-query.c (main): const fix
+
+Sat Feb 17 07:58:46 2001  Tim Janik  <timj@gtk.org>
+
+	* genums.h (G_TYPE_IS_FLAGS): patch from sven to fixup
+	G_ENUM_CLASS_TYPE() macro.
+
+Sat Feb 17 04:55:35 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: changed collect_format, collect_value() and lcopy_format,
+	lcopy_value() in the GTypeValueTable. the collect functions are now
+	called only once per value, collect_format/lcopy_format are strings
+	that enlist all necessary GTypeCValues to be varargs-collected.
+
+	* gvalue.h: ranamed STATIC_TAG to G_VALUE_NOCOPY_CONTENTS to indicate that
+	a value shouldn't copy its contents.
+
+	* gvaluecollector.h: changed G_VALUE_COLLECT() and G_VALUE_LCOPY()
+	macros to carry an additional argument (flags) that can be used
+	to pass G_VALUE_NOCOPY_CONTENTS along to the collection functions.
+
+	* *.c: adapted collect_value() and lcopy_value() functions to the new
+	prototypes, support G_VALUE_NOCOPY_CONTENTS where apropriate.
+
+	* gsignal.[hc]: introduced a G_SIGNAL_TYPE_STATIC_SCOPE flag that can
+	be passed along (ORed) with the parameter types, indicating that the
+	emission arguments are to be considered static for the scope of the
+	emission. should be used with care and only if the caller knows that
+	a parameter cannot be destroyed/freed from signal handlers connected
+	to an emission.
+
+Fri Feb 16 07:10:44 2001  Tim Janik  <timj@gtk.org>
+
+	* gclosure.c:
+	(g_closure_ref):
+	(g_closure_sink): make closure sinking explicit.
+
+	* gsignal.c:
+	(g_signal_connect_data): 
+	(g_signal_connect_closure): 
+	(g_signal_connect_closure_by_id): 
+	(g_signal_newv): perform explicit closure sinking.
+
+Thu Feb  8 00:31:45 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: added G_TYPE_DEBUG_NONE for/from Eric Lemings ;)
+
+2001-02-04  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Remove glib_debug_objects.
+
+Sun Feb  4 07:30:53 2001  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: changed g_type_init() to take debugging flags
+	initially, a combination of G_TYPE_DEBUG_OBJECTS and
+	G_TYPE_DEBUG_SIGNALS. using the G_TYPE_ prefix is a bit odd
+	here, but basically g_type_int() serves as initialization
+	fucntion for all of GType, GObject, GSignal, so what the heck.
+
+	* gobject.c: special case debugging code properly.
+	changed glib_trap_object_ref to g_trap_object_ref.
+
+	* gsignal.c: add signal emission debugging abilities, along with
+	a new trap object g_trap_instance_signals.
+
+2001-02-04  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (progs_LDADD): Change order of libs to libgobject
+	first, then libglib. Needed for cygwin, says jbdoll@kepri.re.kr.
+
+Wed Jan 31 06:19:49 2001  Tim Janik  <timj@gtk.org>
+
+	* gparam.h: gtk-doc sucks for not dealing with #define inside enums.
+
+	* gtype.[hc]: added G_TYPE_FLAG_RESERVED_ID_BIT, a bit in the type
+	number that's supposed to be left untouched (preserved mainly
+	for the signal code).
+
+	* *.c: added thread safety code, based on an old patch from sebastian.
+	the remaining thread safety issues are now datalists on pspecs (to be
+	solved im gdataset.c) and gvalue.c where locking concerns value exchange
+	functionality only, and that's soon to be revised.
+
+2001-01-27  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.msc.in: Don't try to compile gmarshal.c on its own.
+
+2001-01-24    <alexl@redhat.com>
+
+	* gclosure.c (g_closure_unref):
+	Don't leak closure->notifiers.
+
+2001-01-05  Havoc Pennington  <hp@redhat.com>
+
+	* gparamspecs.c (g_param_spec_enum): set the value_type in the
+	param spec; closes bug 40210
+	(g_param_spec_flags): ditto for flags
+
+2001-01-03  Alexander Larsson  <alexl@redhat.com>
+
+	* gobject.c:
+	Move glib_debug_objects out of the G_ENABLE_DEBUG #ifdef.
+
+Thu Dec 28 11:36:44 2000  Tim Janik  <timj@gtk.org>
+
+	* gbsearcharray.c (upper_power2): disable G_BSEARCH_ALIGN_POWER2
+	fucntionality if DISABLE_MEM_POOLS is defined.
+
+	* gtype.c: honour DISABLE_MEM_POOLS.
+
+	* gsignal.c (g_signal_init): flag signal key bsearch array with
+	G_BSEARCH_ALIGN_POWER2 to avoid excessive growth time. honour
+	DISABLE_MEM_POOLS.
+
+	* gparam.h: added G_PARAM_READWRITE alias for (G_PARAM_READABLE |
+	                                               G_PARAM_WRITABLE).
+
+2000-12-15  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Update.
+
+2000-12-15  Havoc Pennington  <hp@pobox.com>
+
+	* gobject.c (g_object_do_class_init): use g_signal_newc
+
+	* gsignal.c (g_signal_newc): convenience function for signals
+	created from C
+	(g_signal_new_valist): added
+	(g_signal_new): removed
+
+Fri Dec 15 04:40:23 2000  Tim Janik  <timj@gtk.org>
+
+	* gparam.[hc]: add an instance member value_type so the default
+	value of the pspec class can be overridden.
+
+2000-12-14  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: Update, include parts from Makefile.am to
+	build gmarshal.[ch]. Some day, we won't need these separate
+	makefiles for Win32 compilation. I hope.
+
+	* makefile.msc.in: Update. No use trying to build gmarshal.[ch]
+	here, it would require Unixish tools. MSVC users building from CVS
+	sources are out of luck.
+	
+	* gobject.def: Update.
+
+Wed Dec 13 09:31:26 2000  Tim Janik  <timj@gtk.org>
+
+	* gparamspecs.[hc]: add G_TYPE_PARAM_BOXED implementation.
+
+	* gobject.[hc]: minor fixes.
+
+Tue Dec 12 23:38:02 2000  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: _never_ touch oldest-source-stamp.
+	
+	* gobject.[hc]: construct property handling fixes/improvements.
+	fixed trailer handling in get/set property.
+	
+	* gparam.[hc]: implement param spec pool, got rid of param spec
+	hashtable. the most prominent change is that e deal with type
+	prefixes here.
+	
+2000-12-12  Elliot Lee  <sopwith@redhat.com>
+
+	* Makefile.am:
+	  . You have to 'touch oldest-source-stamp' if you want to avoid having
+	  the Makefile constantly rebuild itself.
+	  . Fix marshaller generation rules to work with srcdir != builddir
+	    (there were issues with trying to run "./glib-genmarshal", etc.)
+
+Mon Dec 11 04:44:11 2000  Tim Janik  <timj@gtk.org>
+
+	* gboxed.c: fixed dealing with collection/lcopy of NULL values.
+	
+	* gclosure.h: removed insane ramblings, added G_CALLBACK() a casting
+	convenience macro.
+	
+	* Makefile.am: cleanups, marshaller generation rules.
+	
+	* gmarshal.[hc]: new files with GRuntime standard marshallers.
+	
+	* glib-genmarshal.c: fix log domain, support gruntime standard 
+	marshallers, suport G_TYPE_PARAM, come with extern "C" and
+	#include gmarshal.h.
+	
+	* glib-genmarshal.1: reflect glib-genmarshal.c updates.
+	
+	* gobject.[hc]: implement object constructor. rework parameter
+	changed notification queueing, we support queue freezes now and
+	don't dispatch from an idle handler anymore.
+	parameter->property rename hassle.
+	implemented ::properties_changed and ::notify::* signals for
+	property change notification (the later supports property names
+	as details). added signal connection and named data properties.
+	(g_signal_connect_object): new function to setup while_alive
+	connections.
+	(g_object_class_install_property): sink properties now, since they
+	are initially floating.
+	(g_object_steal_data):
+	(g_object_set_data_full):
+	(g_object_set_data):
+	(g_object_get_data): set/get data by using g_datalist_*() functions
+	directly.
+	(g_object_queue_param_changed): nuked.
+	(g_object_freeze_notify): start queueing of property changes (freeze/
+	thaw calls stack).
+	(g_object_notify): announce changes of a certain property directly.
+	(g_object_thaw_notify): process queue of property changes, therefore
+	emitting GObject::notify::detail with detail being the changed
+	properties names.
+	(G_OBJECT_WARN_INVALID_PROPERTY_ID): saner macro variant of former
+	G_WARN_INVALID_PARAM_ID().
+	
+	* gparam.[hc]: param specs are now initially floating and need to be
+	sunken with g_param_spec_sink(), support G_TYPE_PARAM values.
+	added G_PARAM_CONSTRUCT and G_PARAM_CONSTRUCT_ONLY parameter flags,
+	required by GObjectClass.constructor().
+	
+	* gparamspecs.[hc]: added GParamSpecParam, GParamSpecPointer and
+	GParamSpecCCallback, param specs for G_TYPE_PARAM, G_TYPE_POINTER
+	and G_TYPE_CCALLBACK respectively.
+	
+	* gsignal.[hc]: cleanups.
+	(signal_id_lookup): after walking the anchestry, try interfaces as well.
+	(g_signal_new): new function to create signals from varargs type list.
+	(g_signal_connect_closure): closure connection variant that works from
+	signal name+detail.
+	(g_signal_connect_data): c handler connection variant that works from
+	signal name+detail.
+	(g_signal_emit_valist): emit signal for an instance with paraneters
+	collected from a va_list.
+	(g_signal_emit): emit signal, taking parameters from varargs list.
+	(g_signal_emit_by_name): same as g_signal_emit, working from
+	signal name+detail.
+	(signal_emit_R): return whether return_value needs to be altered.
+	
+	* gtype.[hc]: set log-domain to GRuntime, i'm slowly getting to all
+	the points that need to reflect the upcoming rename.
+	melt g_type_conforms_to() functionality into g_type_is_a(), as that
+	is what we really want (liskov substitution principle).
+	assorted changes to other files due to conforms_to->is_a.
+
+	* gvalue.[hc]: implemented g_value_set_instance() that sets a value
+	from an instantiatable type via the value_table's collect_value()
+	function (based on an idea from James Henstridge <james@daa.com.au>).
+	cleanups/fixes.
+	
+	* gvaluetypes.[hc]: implement G_TYPE_CCALLBACK and G_TYPE_PARAM.
+
+Wed Nov 29 13:30:05 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c (handlers_find): fix elliots "logic fix" that dereferences
+	NULL nodes if C handlers are searched for specific signals.
+
+2000-11-28  Elliot Lee  <sopwith@redhat.com>
+
+	* gsignal.c: Fix warnings about possible use of uninitialized
+	variables, and fix logic that would leave 'node' unset in cases
+	that it might be used in.
+
+	* glib-genmarshal.c: Fix warning about printf format.
+
+2000-11-28  Tor Lillqvist  <tml@iki.fi>
+
+	* gboxed.c: Include <string.h> for memset ().
+
+2000-11-22  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Update.
+
+2000-11-20  Havoc Pennington  <hp@redhat.com>
+
+	* gobject.c (g_object_get_data)
+	(g_object_set_data)
+	(g_object_set_data_full)
+	(g_object_steal_data): More convenient data-setting functions
+
+Wed Nov 15 20:58:05 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gtypemodule.c (g_type_module_use): If loading the
+	module fails, don't increment the use count.
+
+Thu Nov  9 01:49:43 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject.h (G_WARN_INVALID_PARAM_ID): doh,
+	s/BSE_OBJECT_TYPE_NAME/G_OBJECT_TYPE_NAME/; reported by Maas-Maarten
+	Zeeman <maas@wanadoo.nl>.
+
+Mon Nov 13 00:48:39 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): Add glib-genmarshal.1
+
+2000-11-11  Tor Lillqvist  <tml@iki.fi>
+
+	* gtypemodule.c: Include stdlib.h for exit().
+
+	* makefile.{mingw,msc}.in (gobject_OBJECTS): Add gtypemodule.
+
+	* gobject.def: Add missing functions.
+
+Sun Nov  5 13:21:28 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am gtypemodule.[ch]: New basic implementation of
+	GTypePlugin interface as a GObject. Dynamically loaded modules can
+	register any number of types and interface on the module.
+
+Sun Nov  5 10:25:40 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gsignal.c (handlers_find): When appending handlers and
+	not matching on signal_id, use hlist->signal_id instead of 
+	signal_id. Having the correct signal_id when unreffing
+	the handlers makes things work a lot better.
+
+2000-11-05  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{mingw,msc}.in (gobject_OBJECTS): Add gtypeplugin.
+
+	* gobject.def: Update.
+
+Sun Nov  5 05:22:55 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c:
+	fixed a bag full of subtle bugs of immensive screw-up potential in
+	handlers_find(), luckily no one found out about them yet ;)
+	fixed signal_handlers_foreach_matched_R() so it operates on an
+	initial handler list snapshot provided by handlers_find() to work
+	around general reentrancy problems and to avoid multiple callback()
+	invocations on the same handlers.
+	this code is now officially 80% bug free (10% remaining for interface
+	types, and 10% remaining for destroyed signals ;)
+	
+Sat Nov  4 02:01:33 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c (_g_signals_destroy): valid signal nodes start out at 1.
+
+	* gtypeplugin.[hc]: new files holding a GTypePlugin interface
+	implementation that provides the API required by GType to deal with
+	dynamically loadable types.
+
+	* gtype.[hc]: displace any GTypePlugin business to gtypeplugin.h.
+
+Fri Nov  3 07:35:00 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc]: prefix internal functions with '_'. renamed
+	g_signal_connect_closure() to g_signal_connect_closure_by_id().
+	added g_signal_parse_name() to retrive signal_id and detail quark
+	from a signal name (internal).
+
+Wed Nov  1 03:36:54 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_object_base_class_finalize): destroy all signals that
+	the finalized obejct type introduced.
+
+	* gsignal.c (g_signals_destroy): don't require itype to have
+	signals.
+
+	* gobject.c (g_object_do_finalize): make sure all signal handlers
+	are destroyed.
+
+	* gsignal.[hc]:
+	(g_signal_handler_find): only match on non-0 masks.
+	(g_signal_handlers_block_matched):
+	(g_signal_handlers_unblock_matched):
+	(g_signal_handlers_disconnect_matched): new functions to block/unblock
+	or disconnect handlers in groups.
+
+2000-10-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gvalue.c (exchange_entries_equal), gparam.c (param_spec_equals):
+	made both functions return gboolean just for the little extra
+	standard conformance now that GEqualFunc is introduced.
+
+Mon Oct 30 05:52:45 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.c (g_signal_list_ids): get rid of inline documentation owen
+	added, the doc system would ignore it anyways (for some reason not
+	aparent to me).
+
+Mon Oct 30 03:00:07 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc] (g_signal_list_ids): renamed owen's g_type_signals(),
+	added required mutex locks.
+
+Sun Oct 29 02:31:03 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gsignal.c (g_type_signals): Fix problem where signals
+	with "_" in them appeared twice in the result array.
+
+Sun Oct 29 01:58:44 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gsignal.h: Add g_type_signals() - a function to list
+	all signals for a given type.
+
+Sat Oct 28 00:28:09 2000  Tim Janik  <timj@gtk.org>
+
+	* gclosure.c (g_closure_add_marshal_guards): fixed notifier position
+	for post_marshal guard which was off at 0.
+
+Fri Oct 27 21:49:31 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: doh, fix argument order in for
+	g_cclosure_new_object_swap and g_cclosure_new_object.
+
+2000-10-28  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.{mingw,msc}.in: Make glib-genmarshal.exe.
+
+	* glib-genmarshal.c: Conditionalise include of unistd.h.
+	Include <io.h> on Win32.
+
+	* gobject.def: Add some missing entry points.
+
+Fri Oct 27 16:33:41 2000  Tim Janik  <timj@gtk.org>
+
+	* gsignal.[hc]: publically define GSignalInvocationHint structure
+	that gets passed in to closure invocations. added signal details.
+	renamed GSignalType to GSignalFlags to comply with conventions.
+	quite some cleanups and minor fixes. avoid uneccessary handler list
+	walks upon invocation of after handlers. relookup handler list for
+	restarted emissions. preliminary abort normal handler invocation if
+	after handler is encountered.
+
+	* glib-genmarshal.c:
+	* gclosure.[hc]: moved invocation_hint to the end of the
+	g_closure_invoke() arguments as sugegsted by kenelson.
+	also made it a gpointer to be more generic. the invocation_hint
+	is a caller specific thing that can be used to pass additional
+	data in to closure invocations as documented with the caller
+	invoking the closure.
+
+Fri Oct 27 05:35:14 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject.c (g_object_watch_closure): fixed realloc bug, reported
+	by havoc.
+
+	* gsignal.c (g_signal_newv): fixed deadlock scenarion where
+	g_signal_lookup() would be called with the signal lock being
+	held. reported by james henstridge.
+
+	* gclosure.c (g_closure_set_meta_marshal): fixed memcpy/overwrite bug
+	reported by owen.
+
+2000-10-26  Tor Lillqvist  <tml@iki.fi>
+
+	* gbsearcharray.c (bsearch_array_insert): Fix gccisms (pointer
+	arithmetic on void pointer, label without statement following.
+
+	* gtype.c (type_node_fundamental_info): Don't apply unary minus to
+	result of sizeof operator, it can be unsigned. Cast first to
+	gssize.
+
+	* gobject.def: Add new functions.
+
+	* makefile.{mingw,msc}.in: Add new objects.
+
+2000-10-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am: Remove empty SUBDIRS line _again_, as that _still_
+	prevents 'make dist' from working.
+
+Wed Oct 25 19:11:03 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gbsearcharray.h (g_bsearch_array_get_nth): Don't use implicit
+	casts from void * since this will get included from C++ too
+	at times.
+	
+Thu Oct 26 00:30:27 2000  Tim Janik  <timj@gtk.org>
+
+	* gvaluetypes.[hc]: added g_value_set_static_string().
+
+	* gboxed.[hc]: const corrections. added g_value_set_static_boxed().
+
+Wed Oct 25 20:27:02 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (g_type_free_instance): for the moment, freeing object
+	structures will fill their memory portion with 0xAA. there's a
+	FIXME there, remove this line at a later point.
+
+Tue Oct 24 23:10:26 2000  Tim Janik  <timj@gtk.org>
+
+	* glib-genmarshal.1:
+	* glib-genmarshal.c: added publically installed marshaller generator.
+
+	* gtype.h: added G_TYPE_INSTANCE_GET_INTERFACE() to retrive a certain
+	interface VTable from instances.
+
+Mon Oct 23 08:28:15 2000  Tim Janik  <timj@gtk.org>
+
+	* gobject.[hc]: new functions for closure maintenance:
+	(g_object_watch_closure): maintain validity of the object and
+	the closure for objects that are used as data part of a closure.
+	(g_cclosure_new_object): convenience function to create C closures
+	that have an object as data argument.
+	(g_closure_new_object): convenience function to create closures
+	that have an object as data argument.
+
+	* gclosure.[hc]: implementation of GClosure mechanism.
+	a closure is basically an encapsulation of a callback function
+	and its environment. ideally, most places supporting callback
+	functions will simply take a GClosure* pointer and thus unify
+	callback environments wrg destroy notification etc.
+	GClosure provides destroy notifiers for arbitrary data pointers,
+	reference counting, invalidation notification (it can be invalidated
+	which is merely a deactivate state) and a marshallinbg abstraction.
+	GCClosure is also provided in these files, they present a specialized
+	GClosure implementation for C language callbacks.
+
+	* genum.c: macro cleanups.
+	
+	* gboxed.[hc]: new files, for boxed type abstraction.
+	(g_boxed_copy): copy a boxed structure
+	(g_boxed_free): free a boxed structure
+	(g_value_set_boxed):
+	(g_value_get_boxed): standard GValue functions for boxed types
+	(g_boxed_type_register_static): convenience function for easy
+	introduction of new G_TYPE_BOXED derivatives.
+
+	* gparam.[hc]: introduced g_param_type_register_static(), a short hand
+	for creation of new GParamSpec derived types.
+
+	* gtype.[hc]: many fixes, introduced ability to flag individual
+	type nodes as ABSTRACT upon registration, added value_peek_pointer()
+	to the value table to peek at GValue contents as a pointer for types
+	that support this. fixed up GValue checks.
+
+	* gvalue.[hc]: added g_value_fits_pointer() and g_value_get_as_pointer()
+	to peek at the value contents as pointer.
+
+	* *.[hc]: adaptions to type macro fixes and changes in the type
+	registration API.
+
+	* many const corrections over the place.
+
+Sat Oct 21 02:49:56 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (g_type_conforms_to): this function basically behaves like
+	and is_a check, except that it _additionally_ features interfaces
+	for instantiatable types. enforce this in the second branch as well
+	(`type' conforms_to `type') even if `type' is not an interface type.
+
+Fri Oct 20 15:31:04 2000  Tim Janik  <timj@gtk.org>
+
+	* gvaluetypes.[hc]: added G_TYPE_POINTER implementation from jrb.
+
+	* gtype.[hc]:
+	* gobject.c:
+	* gvaluetypes.c: added GTypeValueTable.value_peek_pointer and
+	suitable implementations of this for G_TYPE_STRING, G_TYPE_OBJECT
+	and G_TYPE_POINTER.
+
+Mon Aug 21 04:13:37 2000  Tim Janik  <timj@gtk.org>
+
+	* gbsearcharray.[hc]: long standing needed generic implementation
+	of a binary searchable, sorted and dynamically sized array.
+
+2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* Makefile.am (BUILT_EXTRA_DIST): New variable.
+	(dist-hook): Handle $(BUILT_EXTRA_DIST).
+	(*): Remove traces of @STRIP_{BEGIN,END}@.
+	
+2000-09-29  Martin Baulig  <baulig@suse.de>
+	
+	Several minor ANSI C fixes.
+
+	Added missing casts:
+	* gtype.c (type_class_init): 
+	`(gpointer) bnode->data->class.class_init_base'
+	in call to g_slist_prepend() and
+	'GBaseInitFunc class_init_base = (GBaseInitFunc) slist->data'.
+
+	* gobject.c: Put text following #endif into comments.
+
+2000-09-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am: Remove empty SUBDIRS line, as that prevents make
+	dist from working.
+
+Sat Sep  9 20:04:13 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.c (g_object_last_unref): Move call to
+	g_type_free_instance() here from g_object_do_finalize,
+	since g_type_free_instance() can unload the object's
+	implementation.
+
+2000-07-27  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.c: No, don't mark glib_debug_objects for export here,
+	it's handled specially in gtktypeutils.c.
+
+	* gobject.def: Export g_type_fundamental_last (the function).
+
+2000-07-26  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def
+	* gobject.c: Mark glib_debug_objects for export/import as it is
+	used by GTK+.
+
+Sun Jul 23 17:23:35 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: make g_type_fundamental_last() a function, avoiding all
+	that extern variable clutter and avoiding further problems with thread
+	safety.
+
+2000-07-19  Tor Lillqvist  <tml@iki.fi>
+
+	* gparam.h
+	* gvalue.h
+	* gparam.c
+	* gtype.c: Shut up Sun's picky compiler.
+
+2000-07-14  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Add g_type_get_plugin.
+
+Thu Jul 13 02:07:54 2000  Tim Janik  <timj@gtk.org>
+
+	* gparam.c (g_param_value_defaults): default initialize the temporary
+	default value, instead of nuking the caller's value contents.
+
+2000-07-11  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* gtype.c (g_type_get_plugin): Don't return just 0 or 1.
+
+Tue Jul 11 02:48:13 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: removed g_type_is_dynamic() and added g_type_get_plugin().
+
+2000-07-10  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject-query.c: Include ../config.h for HAVE_UNISTD_H. Use it
+	to guard inclusion of <unistd.h>.
+
+	* gtype.h: Fix copy-paste errors in the ifdefs on how to declare a
+	variable for export. Call the macro GOBJECT_VAR.
+
+	* gtype.c: Declare _g_type_fundamental_last for export here, too.
+	(type_node_any_new): Use only constant expressions for sizeof
+	operator (for instance MSVC requires this).
+
+	* makefile.mingw.in: Define GOBJECT_COMPILATION.
+
+Sun Jul  9 21:21:46 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* genums.c: Move string.h include into the .c file
+	instead of where it was in the .h file by mistake.
+
+Thu Jul  6 15:30:27 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): dist fixes.
+
+	* gobject.c: Add a global variable glib_debug_objects
+	(not in header file) to control object tracing.
+
+2000-07-01  Tor Lillqvist  <tml@iki.fi>
+
+	* gobject.def: Update added and renamed entry points.
+
+	* makefile.mingw.in: Add gvaluetypes.o.
+
+Thu Jun 29 16:02:07 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* gobject.c:include string.h for memset
+	* genums.h: include string.h for strcpy
+	* gvalue.c: include string.h for memset, memcpy.
+
+Sat Jun 24 23:03:04 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.[hc]: provide G_TYPE_CHAR, G_TYPE_UCHAR, G_TYPE_BOOLEAN,
+	G_TYPE_INT, G_TYPE_UINT, G_TYPE_LONG, G_TYPE_ULONG, G_TYPE_FLOAT,
+	G_TYPE_DOUBLE and G_TYPE_STRING fundamental types.
+	added a GTypeValueTable* pointer to GTypeInfo structure for types
+	to implement GValue handling functions.
+	GTypeValueTable contains the following members:
+	  value_init(): initialize a GValue structure.
+	  value_free(): free GValue structure contents (optional).
+	  value_copy(): copy one GValue contents to another GValue structure of
+	  collect_type: varargs collection type for the first variable argument
+	  to be collected by collect_value().
+	  collect_value(): variable arguments collection function (optional).
+	  lcopy_type: varargs collection type for the first variable argument
+	  to be location copyied by lcopy_value().
+	  lcopy_value(): variable arguments location copy function (optional).
+	g_type_value_table_peek(): new function to retrive the GTypeValueTable*
+	for a type node. ValueTables get inherited from parent types, unless
+	overridden through the GTypeInfo structure. internally, GTypeValueTable
+	support means an added overhead of one pointer per static or used
+	dynamic type node.
+	g_type_add_class_cache_func(): provide a cache_func/data pair to be
+	called 	prior to a type nodes last_unref() function, this can be used
+	to prevent premature class destruction. multiple installed cache_func()
+	will be chained upon last_unref() untill one of them returns TRUE.
+	the cache_func()s have to check the class id passed in to figure whether
+	they actually want to cache the class of this type (since all classes
+	are routed through the cache_func() chain).
+	g_type_remove_class_cache_func(): remove a previously installed
+	cache_func/data pair. the cache maintained by this function has to be
+	clear when calling g_type_remove_class_cache_func() to avoid leaks.
+	g_type_class_unref_uncached(): class unref function for cache_func()
+	implementations, unreferences a class omitting the cache chain (and
+	therefore unref->cache->unref->... loops).
+
+	* gvaluetypes.[hc]: provide the value setters/getters for the primitive
+	fundamental types boolean, char, uchar, int, uint, long, ulong, float,
+	double and string.
+
+	* gvalue.[hc]: provide G_TYPE_IS_VALUE() in terms of whether a
+	GTypeValueTable is provided for this type.
+	removed g_value_init_default(), g_value_validate(), g_value_defaults(),
+	g_value_set_default() and g_values_cmp() as these are supplied by the
+	GParamSpec API now.
+	moved g_values_exchange() into the "implementation details" section,
+	since it just provides the underlying functionality for
+	g_value_convert().
+
+	* gvaluecollector.h: renamed the varargs value container from
+	GParamCValue to GTypeCValue as the value collection methods are
+	supplied by the type system now.
+	G_PARAM_COLLECT_VALUE() and G_PARAM_LCOPY_VALUE() got renamed to
+	G_VALUE_COLLECT() and G_VALUE_LCOPY() and operate without a
+	GParamSpec structure now.
+
+	* genums.h: macros cleanups/fixes.
+
+	* genum.c: provide G_TYPE_ENUM and G_TYPE_FLAGS type
+	and assorted g_value_{s|g}et_{enum|flags}() implementations.
+
+	* gobject.[hc]:
+	provide G_IS_VALUE_OBJECT(), G_TYPE_OBJECT ValueTable methods
+	and g_value_{s|g}et_object().
+
+	* gparam.[hc]: reduced class to value_set_default(),
+	value_validate() and values_cmp(). also parameters now need to fill
+	in a GType value_type; field to indicate the GValue type they
+	are handling. provide g_param_value_set_default(),
+	g_param_value_defaults(), g_param_value_validate() and
+	g_param_values_cmp().
+
+	* gparamspecs.[hc]: got rid of the g_value_* functions and
+	the G_IS_VALUE_* macros. adapted param spec implementations
+	according to the GParamSpecClass changes.
+
+Sat Jun 10 08:38:27 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.c (type_class_init): fetch the nth iface entry of the
+	type node in the nth loop iteration, not alwys the first.
+	bug discovered by Walt Pohl <cher@suitware.com>.
+	(type_data_finalize_class_ifaces): same here, cut and paste
+	rulez.
+
+Wed Jun  7 09:21:05 2000  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.am (INCLUDES): Add top_builddir so glibconfig.h
+	is found properly when build srcdir != builddir. (Patch from
+	Eric Lemings)
+
+2000-05-13  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in
+	* gobject.def
+	* gobject.rc.in: New files, for Win32 (mingw) build.
+
+	* Makefile.am: Add to EXTRA_DIST. Add rules to produce the
+	corresponding non-*.in files.
+
+	* gtype.h: (Win32:) Mark _g_type_fundamental_last for
+	export/import from DLL.
+
+Fri May  5 01:15:48 2000  Tim Janik  <timj@gtk.org>
+
+	* gtype.h: add reserved fundamental ids for gtk types (for transition
+	time). added G_TYPE_FUNDAMENTAL_MAX for gtk.
+
+Mon Apr 17 20:45:50 2000  Tim Janik  <timj@gtk.org>
+
+	* glib-gobject.c (g_object_base_class_finalize): oops, don't unset
+	n_params prior to destructing them.
+
+Tue Apr 11 04:28:10 2000  Tim Janik  <timj@gtk.org>
+
+	* fixed a couple of bugs in the initial parameter/object
+	implementations, after getting beast running on GObject and GValue.
+
+Fri Apr  7 04:27:49 2000  Tim Janik  <timj@gtk.org>
+
+	* glib-gobject.[hc]: completed parameter set/get implementations,
+	along with asyncronous parameter changed notification queue.
+
+Sun Apr  2 04:54:36 2000  Tim Janik  <timj@gtk.org>
+
+	* glib-gobject.[hc]: GObject implementation, that is facilities
+	for setting/getting quarked data and reference counting.
+
+	* glib-gparamspecs.[hc]: first actuall parameter implementations
+	for GLib, so far we have: char, uchar, bool, int, uint, long,
+	ulong, enum, flags, float, double, string and object. each of these
+	GParamSpecs is a new instantiatable type in its own respect,
+	so the .c file derives 13 new types from G_TYPE_PARAM and
+	defines over 50 (*2) conversion facilities.
+
+	* glib-gvaluecollector.h: generic varargs handling stubs for
+	GParamSpecs, private header file (does get installed for
+	inclusion into user code though).
+
+	* glib-gvalue.[hc]: GValue functionality implementation.
+
+	* glib-gparam.[hc]: basis GParamSpec implementation for
+	the virtual base type G_TYPE_PARAM.
+
+        * glib-genums.[hc]: enum/flags type implementation, based on
+	bseenum.[hc].
+
+	* glib-gtype.[hc]: GLib Type System implementation, heavily
+	based on BSE's dynamic type system.
diff --git a/gobject/Makefile.am b/gobject/Makefile.am
new file mode 100644
index 0000000..f8a7de4
--- /dev/null
+++ b/gobject/Makefile.am
@@ -0,0 +1,262 @@
+# GObject - GLib Type, Object, Parameter and Signal Library
+# Copyright (C) 1997,98,99,2000 Tim Janik and Red Hat, Inc.
+#
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+SUBDIRS = . tests
+
+AM_CPPFLAGS = 					\
+	-DG_LOG_DOMAIN=\"GLib-GObject\"		\
+	-I$(top_srcdir)				\
+	-I$(top_srcdir)/glib			\
+	-I$(top_builddir)			\
+	$(GLIB_DEBUG_FLAGS)			\
+	-DG_DISABLE_DEPRECATED			\
+	-DGOBJECT_COMPILATION			\
+	-DG_DISABLE_CONST_RETURNS
+
+gobject.def: gobject.symbols
+	(echo -e EXPORTS; $(CPP) -P -DINCLUDE_VARIABLES -DINCLUDE_INTERNAL_SYMBOLS -DG_OS_WIN32 -DALL_FILES - <$(srcdir)/gobject.symbols | sed -e '/^$$/d' -e 's/^/	/' -e 's/G_GNUC_[^ ]*//g' | sort) > gobject.def
+
+gobjectalias.h: gobject.symbols
+	$(PERL) $(srcdir)/makegobjectalias.pl < $(srcdir)/gobject.symbols > gobjectalias.h
+
+gobjectaliasdef.c: gobject.symbols
+	$(PERL) $(srcdir)/makegobjectalias.pl -def < $(srcdir)/gobject.symbols > gobjectaliasdef.c
+
+if OS_LINUX
+if HAVE_GNUC_VISIBILITY
+TESTS = abicheck.sh pltcheck.sh
+endif
+endif
+
+libglib = $(top_builddir)/glib/libglib-2.0.la
+
+# libraries to compile and install
+lib_LTLIBRARIES = libgobject-2.0.la
+
+if OS_WIN32_AND_DLL_COMPILATION
+if MS_LIB_AVAILABLE
+noinst_DATA = gobject-2.0.lib
+
+install_ms_lib_cmd = $(INSTALL) gobject-2.0.lib $(DESTDIR)$(libdir)
+uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/gobject-2.0.lib
+endif
+endif
+
+install-ms-lib:
+	$(install_ms_lib_cmd)
+
+uninstall-ms-lib:
+	$(uninstall_ms_lib_cmd)
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+export_symbols = -export-symbols gobject.def
+gobject_def = gobject.def
+
+gobject_win32_res = gobject-win32-res.o
+gobject_win32_res_ldflag = -Wl,$(gobject_win32_res)
+
+install-def-file:
+	$(INSTALL) gobject.def $(DESTDIR)$(libdir)/gobject-2.0.def
+
+uninstall-def-file:
+	-rm $(DESTDIR)$(libdir)/gobject-2.0.def
+else
+install-def-file:
+uninstall-def-file:
+
+export_symbols = $(LIBTOOL_EXPORT_OPTIONS)
+endif
+
+# libtool stuff: set version and export symbols for resolving
+libgobjectincludedir = $(includedir)/glib-2.0/gobject
+libgobject_2_0_la_LDFLAGS = \
+  $(gobject_win32_res_ldflag) \
+  -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+  -export-dynamic $(no_undefined) $(export_symbols)
+
+libgobject_2_0_la_LIBADD = $(libglib)
+
+libgobject_2_0_la_DEPENDENCIES = $(gobject_win32_res) $(gobject_def)
+
+#
+# setup source file variables
+#
+# GObject library header files for public installation
+gobject_public_h_sources = \
+	gboxed.h		\
+	gclosure.h		\
+	genums.h		\
+	gobject.h		\
+	gparam.h		\
+	gparamspecs.h		\
+	gsignal.h		\
+	gsourceclosure.h	\
+	gtype.h			\
+	gtypemodule.h		\
+	gtypeplugin.h		\
+	gvalue.h		\
+	gvaluearray.h		\
+	gvaluecollector.h	\
+	gvaluetypes.h		\
+	gobjectnotifyqueue.c	\
+	gmarshal.h
+
+# GObject library header files that don't get installed
+gobject_private_h_sources = 
+# GObject library C sources to build the library from
+gobject_c_sources = \
+	gboxed.c		\
+	gclosure.c		\
+	genums.c		\
+	gobject.c		\
+	gparam.c		\
+	gparamspecs.c		\
+	gsignal.c		\
+	gsourceclosure.c	\
+	gtype.c			\
+	gtypemodule.c		\
+	gtypeplugin.c		\
+	gvalue.c		\
+	gvaluearray.c		\
+	gvaluetransform.c	\
+	gvaluetypes.c
+
+# these sources (also mentioned above) are generated.
+BUILT_SOURCES = gmarshal.h gmarshal.c gobjectalias.h gobjectaliasdef.c
+
+# non-header sources (headers should be specified in the above variables)
+# that don't serve as direct make target sources, i.e. they don't have
+# their own .lo rules and don't get publically installed
+gobject_extra_sources = \
+	gmarshal.list		\
+	gmarshal.strings	\
+	gobject.symbols
+
+
+#
+# setup GObject library sources and their dependancies
+#
+gobject_target_headers = $(gobject_public_h_sources)
+gobject_target_sources = $(gobject_c_sources)
+EXTRA_HEADERS =
+EXTRA_DIST += \
+	$(gobject_private_h_sources) 	\
+	$(gobject_extra_sources) 	\
+	makegobjectalias.pl		\
+	marshal-genstrings.pl
+
+#
+# rules to generate built sources
+#
+# setup autogeneration dependancies
+gen_sources = xgen-gmh xgen-gmc xgen-gms
+CLEANFILES = $(gen_sources)
+
+# normal autogeneration rules
+# all autogenerated files need to be generated in the srcdir,
+# so old versions get remade and are not confused with newer
+# versions in the build dir. thus a development setup requires
+# srcdir to be writable, passing --disable-rebuilds to
+# ../configure will supress all autogeneration rules.
+
+if CROSS_COMPILING
+  glib_genmarshal=$(GLIB_GENMARSHAL)
+else
+  glib_genmarshal=./glib-genmarshal
+endif
+
+gmarshal.h: stamp-gmarshal.h
+	@true
+stamp-gmarshal.h: @REBUILD@ gmarshal.list glib-genmarshal$(EXEEXT)
+	$(MAKE) glib-genmarshal$(EXEEXT)
+	echo "#ifndef __G_MARSHAL_H__" > xgen-gmh \
+	&& echo "#define __G_MARSHAL_H__" >> xgen-gmh \
+	&& $(glib_genmarshal) --nostdinc --prefix=g_cclosure_marshal $(srcdir)/gmarshal.list --header >> xgen-gmh \
+	&& echo "#endif /* __G_MARSHAL_H__ */" >> xgen-gmh \
+	&& (cmp -s xgen-gmh gmarshal.h 2>/dev/null || cp xgen-gmh gmarshal.h) \
+	&& rm -f xgen-gmh xgen-gmh~ \
+	&& echo timestamp > $@
+
+gmarshal.c: @REBUILD@ stamp-gmarshal.h
+	$(glib_genmarshal) --nostdinc --prefix=g_cclosure_marshal $(srcdir)/gmarshal.list --body >> xgen-gmc \
+	&& cp xgen-gmc gmarshal.c \
+	&& rm -f xgen-gmc xgen-gmc~
+
+gmarshal.strings: @REBUILD@ $(srcdir)/gmarshal.list
+	grep '^[A-Z]' $(srcdir)/gmarshal.list \
+	| sed -e 's/^/"g_cclosure_marshal_/' -e 's/:/__/' -e 's/,/_/g' -e 's/$$/",/' > xgen-gms \
+	&& cp xgen-gms gmarshal.strings \
+	&& rm -f xgen-gms xgen-gms~
+
+glib-genmarshal.o: gmarshal.strings
+gsignal.lo: gmarshal.c
+
+
+# target platform:
+libgobjectinclude_HEADERS = $(gobject_target_headers)
+libgobject_2_0_la_SOURCES = $(gobject_target_sources)
+
+#
+# programs to compile and install
+#
+bin_PROGRAMS = gobject-query glib-genmarshal
+bin_SCRIPTS = glib-mkenums
+noinst_PROGRAMS = testgobject
+# source files
+gobject_query_SOURCES = gobject-query.c
+glib_genmarshal_SOURCES = glib-genmarshal.c
+testgobject_SOURCES = testgobject.c
+# link programs against libgobject
+progs_LDADD = ./libgobject-2.0.la $(libglib)
+glib_genmarshal_LDADD = $(libglib)
+gobject_query_LDADD = $(progs_LDADD)
+testgobject_LDADD = $(progs_LDADD)
+
+#
+# auxillary files
+#
+EXTRA_DIST += 			\
+	makefile.msc.in 	\
+	gobject.rc.in		\
+	glib-genmarshal.1	\
+	glib-mkenums.in		\
+	glib-mkenums.1		\
+	abicheck.sh		\
+	pltcheck.sh
+
+BUILT_EXTRA_DIST = \
+	makefile.msc		\
+	gobject.rc		\
+	gmarshal.h		\
+	gmarshal.c		\
+	stamp-gmarshal.h	\
+	gobjectalias.h		\
+	gobjectaliasdef.c
+
+gobject-win32-res.o: gobject.rc
+	$(WINDRES) gobject.rc $@
+
+gobject-2.0.lib: libgobject-2.0.la gobject.def
+	lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgobject-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:gobject.def -out:$@
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)'; \
+	for f in $$files; do \
+	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
+	  cp $$d/$$f $(distdir) || exit 1; done
+
+install-data-local: install-ms-lib install-def-file
+
+uninstall-local: uninstall-ms-lib uninstall-def-file
+
+distclean-local:
+	if test $(srcdir) = .; then :; else \
+	    rm -f $(BUILT_EXTRA_DIST); \
+	fi
diff --git a/gobject/abicheck.sh b/gobject/abicheck.sh
new file mode 100755
index 0000000..74391cd
--- /dev/null
+++ b/gobject/abicheck.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+egrep '^#([^i]|if).*[^\]$' "${top_builddir:-..}/glibconfig.h" > glibconfig.cpp
+
+INCLUDES="-include ${top_builddir:-..}/config.h"
+INCLUDES="$INCLUDES -include glibconfig.cpp"
+
+cpp -DINCLUDE_VARIABLES -P $INCLUDES -DALL_FILES ${srcdir:-.}/gobject.symbols | sed -e '/^$/d' -e 's/ G_GNUC.*$//' -e 's/ PRIVATE$//' | sort > expected-abi
+rm glibconfig.cpp
+
+nm -D -g --defined-only .libs/libgobject-2.0.so | cut -d ' ' -f 3 | sort > actual-abi
+
+diff -u expected-abi actual-abi && rm expected-abi actual-abi
diff --git a/gobject/gboxed.c b/gobject/gboxed.c
new file mode 100644
index 0000000..8cdcd1e
--- /dev/null
+++ b/gobject/gboxed.c
@@ -0,0 +1,696 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gboxed.h"
+#include "gbsearcharray.h"
+#include "gvalue.h"
+#include "gvaluearray.h"
+#include "gclosure.h"
+#include "gvaluecollector.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:gboxed
+ * @short_description: A mechanism to wrap opaque C structures registered
+ *     by the type system
+ * @see_also: #GParamSpecBoxed, g_param_spec_boxed()
+ * @title: Boxed Types
+ *
+ * GBoxed is a generic wrapper mechanism for arbitrary C structures. The only
+ * thing the type system needs to know about the structures is how to copy and
+ * free them, beyond that they are treated as opaque chunks of memory.
+ *
+ * Boxed types are useful for simple value-holder structures like rectangles or
+ * points. They can also be used for wrapping structures defined in non-GObject
+ * based libraries.
+ */
+
+/* --- typedefs & structures --- */
+typedef struct
+{
+  GType		 type;
+  GBoxedCopyFunc copy;
+  GBoxedFreeFunc free;
+} BoxedNode;
+
+
+/* --- prototypes --- */
+static gint	boxed_nodes_cmp		(gconstpointer	p1,
+					 gconstpointer	p2);
+
+
+/* --- variables --- */
+static GBSearchArray *boxed_bsa = NULL;
+static const GBSearchConfig boxed_bconfig = {
+  sizeof (BoxedNode),
+  boxed_nodes_cmp,
+  0,
+};
+
+
+/* --- functions --- */
+static gint
+boxed_nodes_cmp	(gconstpointer p1,
+		 gconstpointer p2)
+{
+  const BoxedNode *node1 = p1, *node2 = p2;
+
+  return G_BSEARCH_ARRAY_CMP (node1->type, node2->type);
+}
+
+static inline void              /* keep this function in sync with gvalue.c */
+value_meminit (GValue *value,
+	       GType   value_type)
+{
+  value->g_type = value_type;
+  memset (value->data, 0, sizeof (value->data));
+}
+
+static gpointer
+value_copy (gpointer boxed)
+{
+  const GValue *src_value = boxed;
+  GValue *dest_value = g_new0 (GValue, 1);
+
+  if (G_VALUE_TYPE (src_value))
+    {
+      g_value_init (dest_value, G_VALUE_TYPE (src_value));
+      g_value_copy (src_value, dest_value);
+    }
+  return dest_value;
+}
+
+static void
+value_free (gpointer boxed)
+{
+  GValue *value = boxed;
+
+  if (G_VALUE_TYPE (value))
+    g_value_unset (value);
+  g_free (value);
+}
+
+void
+g_boxed_type_init (void)
+{
+  static const GTypeInfo info = {
+    0,                          /* class_size */
+    NULL,                       /* base_init */
+    NULL,                       /* base_destroy */
+    NULL,                       /* class_init */
+    NULL,                       /* class_destroy */
+    NULL,                       /* class_data */
+    0,                          /* instance_size */
+    0,                          /* n_preallocs */
+    NULL,                       /* instance_init */
+    NULL,                       /* value_table */
+  };
+  const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
+  GType type;
+
+  boxed_bsa = g_bsearch_array_create (&boxed_bconfig);
+
+  /* G_TYPE_BOXED
+   */
+  type = g_type_register_fundamental (G_TYPE_BOXED, g_intern_static_string ("GBoxed"), &info, &finfo,
+				      G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
+  g_assert (type == G_TYPE_BOXED);
+}
+
+GType
+g_closure_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GClosure"),
+					    (GBoxedCopyFunc) g_closure_ref,
+					    (GBoxedFreeFunc) g_closure_unref);
+  return type_id;
+}
+
+GType
+g_value_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GValue"),
+					    value_copy,
+					    value_free);
+  return type_id;
+}
+
+GType
+g_value_array_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GValueArray"),
+					    (GBoxedCopyFunc) g_value_array_copy,
+					    (GBoxedFreeFunc) g_value_array_free);
+  return type_id;
+}
+
+static gpointer
+gdate_copy (gpointer boxed)
+{
+  const GDate *date = (const GDate*) boxed;
+
+  return g_date_new_julian (g_date_get_julian (date));
+}
+
+GType
+g_date_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GDate"),
+					    (GBoxedCopyFunc) gdate_copy,
+					    (GBoxedFreeFunc) g_date_free);
+  return type_id;
+}
+
+GType
+g_strv_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GStrv"),
+					    (GBoxedCopyFunc) g_strdupv,
+					    (GBoxedFreeFunc) g_strfreev);
+  return type_id;
+}
+
+static gpointer
+gstring_copy (gpointer boxed)
+{
+  const GString *src_gstring = boxed;
+
+  return g_string_new_len (src_gstring->str, src_gstring->len);
+}
+
+static void
+gstring_free (gpointer boxed)
+{
+  GString *gstring = boxed;
+
+  g_string_free (gstring, TRUE);
+}
+
+GType
+g_gstring_get_type (void)
+{
+  static GType type_id = 0;
+
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GString"),
+                                            /* the naming is a bit odd, but GString is obviously not G_TYPE_STRING */
+					    gstring_copy,
+					    gstring_free);
+  return type_id;
+}
+
+static gpointer
+hash_table_copy (gpointer boxed)
+{
+  GHashTable *hash_table = boxed;
+  return g_hash_table_ref (hash_table);
+}
+
+static void
+hash_table_free (gpointer boxed)
+{
+  GHashTable *hash_table = boxed;
+  g_hash_table_unref (hash_table);
+}
+
+GType
+g_hash_table_get_type (void)
+{
+  static GType type_id = 0;
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GHashTable"),
+					    hash_table_copy, hash_table_free);
+  return type_id;
+}
+
+GType
+g_regex_get_type (void)
+{
+  static GType type_id = 0;
+
+#ifdef ENABLE_REGEX
+  if (!type_id)
+    type_id = g_boxed_type_register_static (g_intern_static_string ("GRegex"),
+					    (GBoxedCopyFunc) g_regex_ref,
+					    (GBoxedFreeFunc) g_regex_unref);
+#endif
+
+  return type_id;
+}
+
+static void
+boxed_proxy_value_init (GValue *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static void
+boxed_proxy_value_free (GValue *value)
+{
+  if (value->data[0].v_pointer && !(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+    {
+      BoxedNode key, *node;
+
+      key.type = G_VALUE_TYPE (value);
+      node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+      node->free (value->data[0].v_pointer);
+    }
+}
+
+static void
+boxed_proxy_value_copy (const GValue *src_value,
+			GValue       *dest_value)
+{
+  if (src_value->data[0].v_pointer)
+    {
+      BoxedNode key, *node;
+
+      key.type = G_VALUE_TYPE (src_value);
+      node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+      dest_value->data[0].v_pointer = node->copy (src_value->data[0].v_pointer);
+    }
+  else
+    dest_value->data[0].v_pointer = src_value->data[0].v_pointer;
+}
+
+static gpointer
+boxed_proxy_value_peek_pointer (const GValue *value)
+{
+  return value->data[0].v_pointer;
+}
+
+static gchar*
+boxed_proxy_collect_value (GValue      *value,
+			   guint        n_collect_values,
+			   GTypeCValue *collect_values,
+			   guint        collect_flags)
+{
+  BoxedNode key, *node;
+
+  key.type = G_VALUE_TYPE (value);
+  node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+
+  if (!collect_values[0].v_pointer)
+    value->data[0].v_pointer = NULL;
+  else
+    {
+      if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+	{
+	  value->data[0].v_pointer = collect_values[0].v_pointer;
+	  value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
+	}
+      else
+	value->data[0].v_pointer = node->copy (collect_values[0].v_pointer);
+    }
+
+  return NULL;
+}
+
+static gchar*
+boxed_proxy_lcopy_value (const GValue *value,
+			 guint         n_collect_values,
+			 GTypeCValue  *collect_values,
+			 guint         collect_flags)
+{
+  gpointer *boxed_p = collect_values[0].v_pointer;
+
+  if (!boxed_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+
+  if (!value->data[0].v_pointer)
+    *boxed_p = NULL;
+  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+    *boxed_p = value->data[0].v_pointer;
+  else
+    {
+      BoxedNode key, *node;
+
+      key.type = G_VALUE_TYPE (value);
+      node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+      *boxed_p = node->copy (value->data[0].v_pointer);
+    }
+
+  return NULL;
+}
+
+/**
+ * g_boxed_type_register_static:
+ * @name: Name of the new boxed type.
+ * @boxed_copy: Boxed structure copy function.
+ * @boxed_free: Boxed structure free function.
+ *
+ * This function creates a new %G_TYPE_BOXED derived type id for a new
+ * boxed type with name @name. Boxed type handling functions have to be
+ * provided to copy and free opaque boxed structures of this type.
+ *
+ * Returns: New %G_TYPE_BOXED derived type id for @name.
+ */
+GType
+g_boxed_type_register_static (const gchar   *name,
+			      GBoxedCopyFunc boxed_copy,
+			      GBoxedFreeFunc boxed_free)
+{
+  static const GTypeValueTable vtable = {
+    boxed_proxy_value_init,
+    boxed_proxy_value_free,
+    boxed_proxy_value_copy,
+    boxed_proxy_value_peek_pointer,
+    "p",
+    boxed_proxy_collect_value,
+    "p",
+    boxed_proxy_lcopy_value,
+  };
+  static const GTypeInfo type_info = {
+    0,			/* class_size */
+    NULL,		/* base_init */
+    NULL,		/* base_finalize */
+    NULL,		/* class_init */
+    NULL,		/* class_finalize */
+    NULL,		/* class_data */
+    0,			/* instance_size */
+    0,			/* n_preallocs */
+    NULL,		/* instance_init */
+    &vtable,		/* value_table */
+  };
+  GType type;
+
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (boxed_copy != NULL, 0);
+  g_return_val_if_fail (boxed_free != NULL, 0);
+  g_return_val_if_fail (g_type_from_name (name) == 0, 0);
+
+  type = g_type_register_static (G_TYPE_BOXED, name, &type_info, 0);
+
+  /* install proxy functions upon successfull registration */
+  if (type)
+    {
+      BoxedNode key;
+
+      key.type = type;
+      key.copy = boxed_copy;
+      key.free = boxed_free;
+      boxed_bsa = g_bsearch_array_insert (boxed_bsa, &boxed_bconfig, &key);
+    }
+
+  return type;
+}
+
+/**
+ * g_boxed_copy:
+ * @boxed_type: The type of @src_boxed.
+ * @src_boxed: The boxed structure to be copied.
+ * 
+ * Provide a copy of a boxed structure @src_boxed which is of type @boxed_type.
+ * 
+ * Returns: The newly created copy of the boxed structure.
+ */
+gpointer
+g_boxed_copy (GType         boxed_type,
+	      gconstpointer src_boxed)
+{
+  GTypeValueTable *value_table;
+  gpointer dest_boxed;
+
+  g_return_val_if_fail (G_TYPE_IS_BOXED (boxed_type), NULL);
+  g_return_val_if_fail (G_TYPE_IS_ABSTRACT (boxed_type) == FALSE, NULL);
+  g_return_val_if_fail (src_boxed != NULL, NULL);
+
+  value_table = g_type_value_table_peek (boxed_type);
+  if (!value_table)
+    g_return_val_if_fail (G_TYPE_IS_VALUE_TYPE (boxed_type), NULL);
+
+  /* check if our proxying implementation is used, we can short-cut here */
+  if (value_table->value_copy == boxed_proxy_value_copy)
+    {
+      BoxedNode key, *node;
+
+      key.type = boxed_type;
+      node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+      dest_boxed = node->copy ((gpointer) src_boxed);
+    }
+  else
+    {
+      GValue src_value, dest_value;
+
+      /* we heavily rely on third-party boxed type value vtable
+       * implementations to follow normal boxed value storage
+       * (data[0].v_pointer is the boxed struct, and
+       * data[1].v_uint holds the G_VALUE_NOCOPY_CONTENTS flag,
+       * rest zero).
+       * but then, we can expect that since we layed out the
+       * g_boxed_*() API.
+       * data[1].v_uint&G_VALUE_NOCOPY_CONTENTS shouldn't be set
+       * after a copy.
+       */
+      /* equiv. to g_value_set_static_boxed() */
+      value_meminit (&src_value, boxed_type);
+      src_value.data[0].v_pointer = (gpointer) src_boxed;
+      src_value.data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
+
+      /* call third-party code copy function, fingers-crossed */
+      value_meminit (&dest_value, boxed_type);
+      value_table->value_copy (&src_value, &dest_value);
+
+      /* double check and grouse if things went wrong */
+      if (dest_value.data[1].v_ulong)
+	g_warning ("the copy_value() implementation of type `%s' seems to make use of reserved GValue fields",
+		   g_type_name (boxed_type));
+
+      dest_boxed = dest_value.data[0].v_pointer;
+    }
+
+  return dest_boxed;
+}
+
+/**
+ * g_boxed_free:
+ * @boxed_type: The type of @boxed.
+ * @boxed: The boxed structure to be freed.
+ *
+ * Free the boxed structure @boxed which is of type @boxed_type.
+ */
+void
+g_boxed_free (GType    boxed_type,
+	      gpointer boxed)
+{
+  GTypeValueTable *value_table;
+
+  g_return_if_fail (G_TYPE_IS_BOXED (boxed_type));
+  g_return_if_fail (G_TYPE_IS_ABSTRACT (boxed_type) == FALSE);
+  g_return_if_fail (boxed != NULL);
+
+  value_table = g_type_value_table_peek (boxed_type);
+  if (!value_table)
+    g_return_if_fail (G_TYPE_IS_VALUE_TYPE (boxed_type));
+
+  /* check if our proxying implementation is used, we can short-cut here */
+  if (value_table->value_free == boxed_proxy_value_free)
+    {
+      BoxedNode key, *node;
+
+      key.type = boxed_type;
+      node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+      node->free (boxed);
+    }
+  else
+    {
+      GValue value;
+
+      /* see g_boxed_copy() on why we think we can do this */
+      value_meminit (&value, boxed_type);
+      value.data[0].v_pointer = boxed;
+      value_table->value_free (&value);
+    }
+}
+
+/**
+ * g_value_get_boxed:
+ * @value: a valid #GValue of %G_TYPE_BOXED derived type
+ *
+ * Get the contents of a %G_TYPE_BOXED derived #GValue.
+ *
+ * Returns: boxed contents of @value
+ */
+gpointer
+g_value_get_boxed (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), NULL);
+  g_return_val_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)), NULL);
+
+  return value->data[0].v_pointer;
+}
+
+/**
+ * g_value_dup_boxed:
+ * @value: a valid #GValue of %G_TYPE_BOXED derived type
+ *
+ * Get the contents of a %G_TYPE_BOXED derived #GValue.  Upon getting,
+ * the boxed value is duplicated and needs to be later freed with
+ * g_boxed_free(), e.g. like: g_boxed_free (G_VALUE_TYPE (@value),
+ * return_value);
+ *
+ * Returns: boxed contents of @value
+ */
+gpointer
+g_value_dup_boxed (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), NULL);
+  g_return_val_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)), NULL);
+
+  return value->data[0].v_pointer ? g_boxed_copy (G_VALUE_TYPE (value), value->data[0].v_pointer) : NULL;
+}
+
+static inline void
+value_set_boxed_internal (GValue       *value,
+			  gconstpointer const_boxed,
+			  gboolean      need_copy,
+			  gboolean      need_free)
+{
+  BoxedNode key, *node;
+  gpointer boxed = (gpointer) const_boxed;
+
+  if (!boxed)
+    {
+      /* just resetting to NULL might not be desired, need to
+       * have value reinitialized also (for values defaulting
+       * to other default value states than a NULL data pointer),
+       * g_value_reset() will handle this
+       */
+      g_value_reset (value);
+      return;
+    }
+
+  key.type = G_VALUE_TYPE (value);
+  node = g_bsearch_array_lookup (boxed_bsa, &boxed_bconfig, &key);
+
+  if (node)
+    {
+      /* we proxy this type, free contents and copy right away */
+      if (value->data[0].v_pointer && !(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+	node->free (value->data[0].v_pointer);
+      value->data[1].v_uint = need_free ? 0 : G_VALUE_NOCOPY_CONTENTS;
+      value->data[0].v_pointer = need_copy ? node->copy (boxed) : boxed;
+    }
+  else
+    {
+      /* we don't handle this type, free contents and let g_boxed_copy()
+       * figure what's required
+       */
+      if (value->data[0].v_pointer && !(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+	g_boxed_free (G_VALUE_TYPE (value), value->data[0].v_pointer);
+      value->data[1].v_uint = need_free ? 0 : G_VALUE_NOCOPY_CONTENTS;
+      value->data[0].v_pointer = need_copy ? g_boxed_copy (G_VALUE_TYPE (value), boxed) : boxed;
+    }
+}
+
+/**
+ * g_value_set_boxed:
+ * @value: a valid #GValue of %G_TYPE_BOXED derived type
+ * @v_boxed: boxed value to be set
+ *
+ * Set the contents of a %G_TYPE_BOXED derived #GValue to @v_boxed.
+ */
+void
+g_value_set_boxed (GValue       *value,
+		   gconstpointer boxed)
+{
+  g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
+  g_return_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)));
+
+  value_set_boxed_internal (value, boxed, TRUE, TRUE);
+}
+
+/**
+ * g_value_set_static_boxed:
+ * @value: a valid #GValue of %G_TYPE_BOXED derived type
+ * @v_boxed: static boxed value to be set
+ *
+ * Set the contents of a %G_TYPE_BOXED derived #GValue to @v_boxed.
+ * The boxed value is assumed to be static, and is thus not duplicated
+ * when setting the #GValue.
+ */
+void
+g_value_set_static_boxed (GValue       *value,
+			  gconstpointer boxed)
+{
+  g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
+  g_return_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)));
+
+  value_set_boxed_internal (value, boxed, FALSE, FALSE);
+}
+
+/**
+ * g_value_set_boxed_take_ownership:
+ * @value: a valid #GValue of %G_TYPE_BOXED derived type
+ * @v_boxed: duplicated unowned boxed value to be set
+ *
+ * This is an internal function introduced mainly for C marshallers.
+ *
+ * Deprecated: 2.4: Use g_value_take_boxed() instead.
+ */
+void
+g_value_set_boxed_take_ownership (GValue       *value,
+				  gconstpointer boxed)
+{
+  g_value_take_boxed (value, boxed);
+}
+
+/**
+ * g_value_take_boxed:
+ * @value: a valid #GValue of %G_TYPE_BOXED derived type
+ * @v_boxed: duplicated unowned boxed value to be set
+ *
+ * Sets the contents of a %G_TYPE_BOXED derived #GValue to @v_boxed
+ * and takes over the ownership of the callers reference to @v_boxed;
+ * the caller doesn't have to unref it any more.
+ *
+ * Since: 2.4
+ */
+void
+g_value_take_boxed (GValue       *value,
+		    gconstpointer boxed)
+{
+  g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
+  g_return_if_fail (G_TYPE_IS_VALUE (G_VALUE_TYPE (value)));
+
+  value_set_boxed_internal (value, boxed, FALSE, TRUE);
+}
+
+#define __G_BOXED_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gboxed.h b/gobject/gboxed.h
new file mode 100644
index 0000000..75a5193
--- /dev/null
+++ b/gobject/gboxed.h
@@ -0,0 +1,191 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_BOXED_H__
+#define __G_BOXED_H__
+
+#include        <gobject/gtype.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+#define G_TYPE_IS_BOXED(type)	   (G_TYPE_FUNDAMENTAL (type) == G_TYPE_BOXED)
+/**
+ * G_VALUE_HOLDS_BOXED:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values derived from type %G_TYPE_BOXED.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_BOXED(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOXED))
+
+
+/* --- typedefs --- */
+/**
+ * GBoxedCopyFunc:
+ * @boxed: The boxed structure to be copied.
+ * 
+ * This function is provided by the user and should produce a copy of the passed
+ * in boxed structure.
+ * 
+ * Returns: The newly created copy of the boxed structure.
+ */
+typedef gpointer (*GBoxedCopyFunc) (gpointer boxed);
+
+/**
+ * GBoxedFreeFunc:
+ * @boxed: The boxed structure to be freed.
+ * 
+ * This function is provided by the user and should free the boxed
+ * structure passed.
+ */
+typedef void (*GBoxedFreeFunc) (gpointer boxed);
+
+
+/* --- prototypes --- */
+gpointer	g_boxed_copy			(GType		 boxed_type,
+						 gconstpointer	 src_boxed);
+void		g_boxed_free			(GType		 boxed_type,
+						 gpointer	 boxed);
+void		g_value_set_boxed		(GValue		*value,
+						 gconstpointer	 v_boxed);
+void		g_value_set_static_boxed	(GValue		*value,
+						 gconstpointer	 v_boxed);
+gpointer	g_value_get_boxed		(const GValue	*value);
+gpointer	g_value_dup_boxed		(const GValue	*value);
+
+
+/* --- convenience --- */
+GType	g_boxed_type_register_static		(const gchar	*name,
+						 GBoxedCopyFunc	 boxed_copy,
+						 GBoxedFreeFunc	 boxed_free);
+
+
+/* --- GLib boxed types --- */
+/**
+ * G_TYPE_CLOSURE:
+ * 
+ * The #GType for #GClosure.
+ */
+#define	G_TYPE_CLOSURE		(g_closure_get_type ())
+/**
+ * G_TYPE_VALUE:
+ * 
+ * The type ID of the "GValue" type which is a boxed type,
+ * used to pass around pointers to GValues.
+ */
+#define	G_TYPE_VALUE		(g_value_get_type ())
+/**
+ * G_TYPE_VALUE_ARRAY:
+ * 
+ * The type ID of the "GValueArray" type which is a boxed type,
+ * used to pass around pointers to GValueArrays.
+ */
+#define	G_TYPE_VALUE_ARRAY	(g_value_array_get_type ())
+/**
+ * G_TYPE_DATE:
+ * 
+ * The #GType for #GDate.
+ */
+#define	G_TYPE_DATE	        (g_date_get_type ())
+/**
+ * G_TYPE_STRV:
+ * 
+ * The #GType for a boxed type holding a %NULL-terminated array of strings.
+ * 
+ * The code fragments in the following example show the use of a property of
+ * type #G_TYPE_STRV with g_object_class_install_property(), g_object_set()
+ * and g_object_get().
+ * 
+ * |[
+ * g_object_class_install_property (object_class,
+ *                                  PROP_AUTHORS,
+ *                                  g_param_spec_boxed ("authors",
+ *                                                      _("Authors"),
+ *                                                      _("List of authors"),
+ *                                                      G_TYPE_STRV,
+ *                                                      G_PARAM_READWRITE));
+ * 
+ * 
+ * gchar *authors[] = { "Owen", "Tim", NULL };
+ * g_object_set (obj, "authors", authors, NULL);
+ * 
+ * 
+ * gchar *writers[];
+ * g_object_get (obj, "authors", &writers, NULL);
+ * // do something with writers
+ * g_strfreev (writers);
+ * ]|
+ * 
+ * Since: 2.4
+ */
+#define	G_TYPE_STRV	        (g_strv_get_type ())
+/**
+ * G_TYPE_GSTRING:
+ * 
+ * The #GType for #GString.
+ */
+#define	G_TYPE_GSTRING		(g_gstring_get_type ())
+/**
+ * G_TYPE_HASH_TABLE:
+ * 
+ * The #GType for a boxed type holding a #GHashTable reference.
+ * 
+ * Since: 2.10
+ */
+#define	G_TYPE_HASH_TABLE (g_hash_table_get_type ())
+/**
+ * G_TYPE_REGEX:
+ * 
+ * The #GType for a boxed type holding a #GRegex reference.
+ * 
+ * Since: 2.14
+ */
+#define	G_TYPE_REGEX (g_regex_get_type ())
+
+
+void    g_value_take_boxed      (GValue		*value,
+				 gconstpointer	 v_boxed);
+#ifndef G_DISABLE_DEPRECATED
+void	g_value_set_boxed_take_ownership	(GValue		*value,
+						 gconstpointer	 v_boxed);
+#endif
+GType	g_closure_get_type	(void)	G_GNUC_CONST;
+GType	g_value_get_type	(void)	G_GNUC_CONST;
+GType	g_value_array_get_type	(void)	G_GNUC_CONST;
+GType	g_date_get_type	        (void)	G_GNUC_CONST;
+GType	g_strv_get_type	        (void)	G_GNUC_CONST;
+GType	g_gstring_get_type      (void)	G_GNUC_CONST;
+GType   g_hash_table_get_type   (void)  G_GNUC_CONST;
+GType   g_regex_get_type        (void)  G_GNUC_CONST;
+
+/**
+ * GStrv:
+ * 
+ * A C representable type name for #G_TYPE_STRV.
+ */
+typedef gchar** GStrv;
+     
+G_END_DECLS
+
+#endif	/* __G_BOXED_H__ */
diff --git a/gobject/gclosure.c b/gobject/gclosure.c
new file mode 100644
index 0000000..eaa7e09
--- /dev/null
+++ b/gobject/gclosure.c
@@ -0,0 +1,1226 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ * Copyright (C) 2005 Imendio AB
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe with regards to reference counting.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gclosure.h"
+#include "gvalue.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:gclosure
+ * @short_description: Functions as first-class objects
+ * @title: Closures
+ *
+ * A #GClosure represents a callback supplied by the programmer. It
+ * will generally comprise a function of some kind and a marshaller
+ * used to call it. It is the reponsibility of the marshaller to
+ * convert the arguments for the invocation from #GValue<!-- -->s into
+ * a suitable form, perform the callback on the converted arguments,
+ * and transform the return value back into a #GValue.
+ *
+ * In the case of C programs, a closure usually just holds a pointer
+ * to a function and maybe a data argument, and the marshaller
+ * converts between #GValue<!-- --> and native C types. The GObject
+ * library provides the #GCClosure type for this purpose. Bindings for
+ * other languages need marshallers which convert between #GValue<!--
+ * -->s and suitable representations in the runtime of the language in
+ * order to use functions written in that languages as callbacks.
+ *
+ * Within GObject, closures play an important role in the
+ * implementation of signals. When a signal is registered, the
+ * @c_marshaller argument to g_signal_new() specifies the default C
+ * marshaller for any closure which is connected to this
+ * signal. GObject provides a number of C marshallers for this
+ * purpose, see the g_cclosure_marshal_*() functions. Additional C
+ * marshallers can be generated with the <link
+ * linkend="glib-genmarshal">glib-genmarshal</link> utility.  Closures
+ * can be explicitly connected to signals with
+ * g_signal_connect_closure(), but it usually more convenient to let
+ * GObject create a closure automatically by using one of the
+ * g_signal_connect_*() functions which take a callback function/user
+ * data pair.
+ *
+ * Using closures has a number of important advantages over a simple
+ * callback function/data pointer combination:
+ * <itemizedlist>
+ * <listitem><para>
+ * Closures allow the callee to get the types of the callback parameters,
+ * which means that language bindings don't have to write individual glue
+ * for each callback type.
+ * </para></listitem>
+ * <listitem><para>
+ * The reference counting of #GClosure makes it easy to handle reentrancy
+ * right; if a callback is removed while it is being invoked, the closure
+ * and its parameters won't be freed until the invocation finishes.
+ * </para></listitem>
+ * <listitem><para>
+ * g_closure_invalidate() and invalidation notifiers allow callbacks to be
+ * automatically removed when the objects they point to go away.
+ * </para></listitem>
+ * </itemizedlist>
+ */
+
+
+#define	CLOSURE_MAX_REF_COUNT		((1 << 15) - 1)
+#define	CLOSURE_MAX_N_GUARDS		((1 << 1) - 1)
+#define	CLOSURE_MAX_N_FNOTIFIERS	((1 << 2) - 1)
+#define	CLOSURE_MAX_N_INOTIFIERS	((1 << 8) - 1)
+#define	CLOSURE_N_MFUNCS(cl)		((cl)->meta_marshal + \
+                                         ((cl)->n_guards << 1L))
+/* same as G_CLOSURE_N_NOTIFIERS() (keep in sync) */
+#define	CLOSURE_N_NOTIFIERS(cl)		(CLOSURE_N_MFUNCS (cl) + \
+                                         (cl)->n_fnotifiers + \
+                                         (cl)->n_inotifiers)
+
+typedef union {
+  GClosure closure;
+  volatile gint vint;
+} ClosureInt;
+
+#define CHANGE_FIELD(_closure, _field, _OP, _value, _must_set, _SET_OLD, _SET_NEW)      \
+G_STMT_START {                                                                          \
+  ClosureInt *cunion = (ClosureInt*) _closure;                 		                \
+  gint new_int, old_int, success;                              		                \
+  do                                                    		                \
+    {                                                   		                \
+      ClosureInt tmp;                                   		                \
+      tmp.vint = old_int = cunion->vint;                		                \
+      _SET_OLD tmp.closure._field;                                                      \
+      tmp.closure._field _OP _value;                      		                \
+      _SET_NEW tmp.closure._field;                                                      \
+      new_int = tmp.vint;                               		                \
+      success = g_atomic_int_compare_and_exchange (&cunion->vint, old_int, new_int);    \
+    }                                                   		                \
+  while (!success && _must_set);                                                        \
+} G_STMT_END
+
+#define SWAP(_closure, _field, _value, _oldv)   CHANGE_FIELD (_closure, _field, =, _value, TRUE, *(_oldv) =,     (void) )
+#define SET(_closure, _field, _value)           CHANGE_FIELD (_closure, _field, =, _value, TRUE,     (void),     (void) )
+#define INC(_closure, _field)                   CHANGE_FIELD (_closure, _field, +=,     1, TRUE,     (void),     (void) )
+#define INC_ASSIGN(_closure, _field, _newv)     CHANGE_FIELD (_closure, _field, +=,     1, TRUE,     (void), *(_newv) = )
+#define DEC(_closure, _field)                   CHANGE_FIELD (_closure, _field, -=,     1, TRUE,     (void),     (void) )
+#define DEC_ASSIGN(_closure, _field, _newv)     CHANGE_FIELD (_closure, _field, -=,     1, TRUE,     (void), *(_newv) = )
+
+#if 0   /* for non-thread-safe closures */
+#define SWAP(cl,f,v,o)     (void) (*(o) = cl->f, cl->f = v)
+#define SET(cl,f,v)        (void) (cl->f = v)
+#define INC(cl,f)          (void) (cl->f += 1)
+#define INC_ASSIGN(cl,f,n) (void) (cl->f += 1, *(n) = cl->f)
+#define DEC(cl,f)          (void) (cl->f -= 1)
+#define DEC_ASSIGN(cl,f,n) (void) (cl->f -= 1, *(n) = cl->f)
+#endif
+
+enum {
+  FNOTIFY,
+  INOTIFY,
+  PRE_NOTIFY,
+  POST_NOTIFY
+};
+
+
+/* --- functions --- */
+/**
+ * g_closure_new_simple:
+ * @sizeof_closure: the size of the structure to allocate, must be at least
+ *                  <literal>sizeof (GClosure)</literal>
+ * @data: data to store in the @data field of the newly allocated #GClosure
+ *
+ * Allocates a struct of the given size and initializes the initial
+ * part as a #GClosure. This function is mainly useful when
+ * implementing new types of closures.
+ *
+ * |[
+ * typedef struct _MyClosure MyClosure;
+ * struct _MyClosure
+ * {
+ *   GClosure closure;
+ *   // extra data goes here
+ * };
+ *
+ * static void
+ * my_closure_finalize (gpointer  notify_data,
+ *                      GClosure *closure)
+ * {
+ *   MyClosure *my_closure = (MyClosure *)closure;
+ *
+ *   // free extra data here
+ * }
+ *
+ * MyClosure *my_closure_new (gpointer data)
+ * {
+ *   GClosure *closure;
+ *   MyClosure *my_closure;
+ *
+ *   closure = g_closure_new_simple (sizeof (MyClosure), data);
+ *   my_closure = (MyClosure *) closure;
+ *
+ *   // initialize extra data here
+ *
+ *   g_closure_add_finalize_notifier (closure, notify_data,
+ *                                    my_closure_finalize);
+ *   return my_closure;
+ * }
+ * ]|
+ *
+ * Returns: a newly allocated #GClosure
+ */
+GClosure*
+g_closure_new_simple (guint           sizeof_closure,
+		      gpointer        data)
+{
+  GClosure *closure;
+
+  g_return_val_if_fail (sizeof_closure >= sizeof (GClosure), NULL);
+
+  closure = g_malloc0 (sizeof_closure);
+  SET (closure, ref_count, 1);
+  SET (closure, meta_marshal, 0);
+  SET (closure, n_guards, 0);
+  SET (closure, n_fnotifiers, 0);
+  SET (closure, n_inotifiers, 0);
+  SET (closure, in_inotify, FALSE);
+  SET (closure, floating, TRUE);
+  SET (closure, derivative_flag, 0);
+  SET (closure, in_marshal, FALSE);
+  SET (closure, is_invalid, FALSE);
+  closure->marshal = NULL;
+  closure->data = data;
+  closure->notifiers = NULL;
+  memset (G_STRUCT_MEMBER_P (closure, sizeof (*closure)), 0, sizeof_closure - sizeof (*closure));
+
+  return closure;
+}
+
+static inline void
+closure_invoke_notifiers (GClosure *closure,
+			  guint     notify_type)
+{
+  /* notifier layout:
+   *     meta_marshal  n_guards    n_guards     n_fnotif.  n_inotifiers
+   * ->[[meta_marshal][pre_guards][post_guards][fnotifiers][inotifiers]]
+   *
+   * CLOSURE_N_MFUNCS(cl)    = meta_marshal + n_guards + n_guards;
+   * CLOSURE_N_NOTIFIERS(cl) = CLOSURE_N_MFUNCS(cl) + n_fnotifiers + n_inotifiers
+   *
+   * constrains/catches:
+   * - closure->notifiers may be reloacted during callback
+   * - closure->n_fnotifiers and closure->n_inotifiers may change during callback
+   * - i.e. callbacks can be removed/added during invocation
+   * - must prepare for callback removal during FNOTIFY and INOTIFY (done via ->marshal= & ->data=)
+   * - must distinguish (->marshal= & ->data=) for INOTIFY vs. FNOTIFY (via ->in_inotify)
+   * + closure->n_guards is const during PRE_NOTIFY & POST_NOTIFY
+   * + closure->meta_marshal is const for all cases
+   * + none of the callbacks can cause recursion
+   * + closure->n_inotifiers is const 0 during FNOTIFY
+   */
+  switch (notify_type)
+    {
+      GClosureNotifyData *ndata;
+      guint i, offs;
+    case FNOTIFY:
+      while (closure->n_fnotifiers)
+	{
+          guint n;
+	  DEC_ASSIGN (closure, n_fnotifiers, &n);
+
+	  ndata = closure->notifiers + CLOSURE_N_MFUNCS (closure) + n;
+	  closure->marshal = (GClosureMarshal) ndata->notify;
+	  closure->data = ndata->data;
+	  ndata->notify (ndata->data, closure);
+	}
+      closure->marshal = NULL;
+      closure->data = NULL;
+      break;
+    case INOTIFY:
+      SET (closure, in_inotify, TRUE);
+      while (closure->n_inotifiers)
+	{
+          guint n;
+          DEC_ASSIGN (closure, n_inotifiers, &n);
+
+	  ndata = closure->notifiers + CLOSURE_N_MFUNCS (closure) + closure->n_fnotifiers + n;
+	  closure->marshal = (GClosureMarshal) ndata->notify;
+	  closure->data = ndata->data;
+	  ndata->notify (ndata->data, closure);
+	}
+      closure->marshal = NULL;
+      closure->data = NULL;
+      SET (closure, in_inotify, FALSE);
+      break;
+    case PRE_NOTIFY:
+      i = closure->n_guards;
+      offs = closure->meta_marshal;
+      while (i--)
+	{
+	  ndata = closure->notifiers + offs + i;
+	  ndata->notify (ndata->data, closure);
+	}
+      break;
+    case POST_NOTIFY:
+      i = closure->n_guards;
+      offs = closure->meta_marshal + i;
+      while (i--)
+	{
+	  ndata = closure->notifiers + offs + i;
+	  ndata->notify (ndata->data, closure);
+	}
+      break;
+    }
+}
+
+/**
+ * g_closure_set_meta_marshal:
+ * @closure: a #GClosure
+ * @marshal_data: context-dependent data to pass to @meta_marshal
+ * @meta_marshal: a #GClosureMarshal function
+ *
+ * Sets the meta marshaller of @closure.  A meta marshaller wraps
+ * @closure->marshal and modifies the way it is called in some
+ * fashion. The most common use of this facility is for C callbacks.
+ * The same marshallers (generated by <link
+ * linkend="glib-genmarshal">glib-genmarshal</link>) are used
+ * everywhere, but the way that we get the callback function
+ * differs. In most cases we want to use @closure->callback, but in
+ * other cases we want to use some different technique to retrieve the
+ * callback function.
+ *
+ * For example, class closures for signals (see
+ * g_signal_type_cclosure_new()) retrieve the callback function from a
+ * fixed offset in the class structure.  The meta marshaller retrieves
+ * the right callback and passes it to the marshaller as the
+ * @marshal_data argument.
+ */
+void
+g_closure_set_meta_marshal (GClosure       *closure,
+			    gpointer        marshal_data,
+			    GClosureMarshal meta_marshal)
+{
+  GClosureNotifyData *notifiers;
+
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (meta_marshal != NULL);
+  g_return_if_fail (closure->is_invalid == FALSE);
+  g_return_if_fail (closure->in_marshal == FALSE);
+  g_return_if_fail (closure->meta_marshal == 0);
+
+  notifiers = closure->notifiers;
+  closure->notifiers = g_renew (GClosureNotifyData, NULL, CLOSURE_N_NOTIFIERS (closure) + 1);
+  if (notifiers)
+    {
+      /* usually the meta marshal will be setup right after creation, so the
+       * g_memmove() should be rare-case scenario
+       */
+      g_memmove (closure->notifiers + 1, notifiers, CLOSURE_N_NOTIFIERS (closure) * sizeof (notifiers[0]));
+      g_free (notifiers);
+    }
+  closure->notifiers[0].data = marshal_data;
+  closure->notifiers[0].notify = (GClosureNotify) meta_marshal;
+  SET (closure, meta_marshal, 1);
+}
+
+/**
+ * g_closure_add_marshal_guards:
+ * @closure: a #GClosure
+ * @pre_marshal_data: data to pass to @pre_marshal_notify
+ * @pre_marshal_notify: a function to call before the closure callback
+ * @post_marshal_data: data to pass to @post_marshal_notify
+ * @post_marshal_notify: a function to call after the closure callback
+ *
+ * Adds a pair of notifiers which get invoked before and after the
+ * closure callback, respectively. This is typically used to protect
+ * the extra arguments for the duration of the callback. See
+ * g_object_watch_closure() for an example of marshal guards.
+ */
+void
+g_closure_add_marshal_guards (GClosure      *closure,
+			      gpointer       pre_marshal_data,
+			      GClosureNotify pre_marshal_notify,
+			      gpointer       post_marshal_data,
+			      GClosureNotify post_marshal_notify)
+{
+  guint i;
+
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (pre_marshal_notify != NULL);
+  g_return_if_fail (post_marshal_notify != NULL);
+  g_return_if_fail (closure->is_invalid == FALSE);
+  g_return_if_fail (closure->in_marshal == FALSE);
+  g_return_if_fail (closure->n_guards < CLOSURE_MAX_N_GUARDS);
+
+  closure->notifiers = g_renew (GClosureNotifyData, closure->notifiers, CLOSURE_N_NOTIFIERS (closure) + 2);
+  if (closure->n_inotifiers)
+    closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+			closure->n_fnotifiers +
+			closure->n_inotifiers + 1)] = closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+									  closure->n_fnotifiers + 0)];
+  if (closure->n_inotifiers > 1)
+    closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+			closure->n_fnotifiers +
+			closure->n_inotifiers)] = closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+								      closure->n_fnotifiers + 1)];
+  if (closure->n_fnotifiers)
+    closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+			closure->n_fnotifiers + 1)] = closure->notifiers[CLOSURE_N_MFUNCS (closure) + 0];
+  if (closure->n_fnotifiers > 1)
+    closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+			closure->n_fnotifiers)] = closure->notifiers[CLOSURE_N_MFUNCS (closure) + 1];
+  if (closure->n_guards)
+    closure->notifiers[(closure->meta_marshal +
+			closure->n_guards +
+			closure->n_guards + 1)] = closure->notifiers[closure->meta_marshal + closure->n_guards];
+  i = closure->n_guards;
+  closure->notifiers[closure->meta_marshal + i].data = pre_marshal_data;
+  closure->notifiers[closure->meta_marshal + i].notify = pre_marshal_notify;
+  closure->notifiers[closure->meta_marshal + i + 1].data = post_marshal_data;
+  closure->notifiers[closure->meta_marshal + i + 1].notify = post_marshal_notify;
+  INC (closure, n_guards);
+}
+
+/**
+ * g_closure_add_finalize_notifier:
+ * @closure: a #GClosure
+ * @notify_data: data to pass to @notify_func
+ * @notify_func: the callback function to register
+ *
+ * Registers a finalization notifier which will be called when the
+ * reference count of @closure goes down to 0. Multiple finalization
+ * notifiers on a single closure are invoked in unspecified order. If
+ * a single call to g_closure_unref() results in the closure being
+ * both invalidated and finalized, then the invalidate notifiers will
+ * be run before the finalize notifiers.
+ */
+void
+g_closure_add_finalize_notifier (GClosure      *closure,
+				 gpointer       notify_data,
+				 GClosureNotify notify_func)
+{
+  guint i;
+
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (notify_func != NULL);
+  g_return_if_fail (closure->n_fnotifiers < CLOSURE_MAX_N_FNOTIFIERS);
+
+  closure->notifiers = g_renew (GClosureNotifyData, closure->notifiers, CLOSURE_N_NOTIFIERS (closure) + 1);
+  if (closure->n_inotifiers)
+    closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+			closure->n_fnotifiers +
+			closure->n_inotifiers)] = closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+								      closure->n_fnotifiers + 0)];
+  i = CLOSURE_N_MFUNCS (closure) + closure->n_fnotifiers;
+  closure->notifiers[i].data = notify_data;
+  closure->notifiers[i].notify = notify_func;
+  INC (closure, n_fnotifiers);
+}
+
+/**
+ * g_closure_add_invalidate_notifier:
+ * @closure: a #GClosure
+ * @notify_data: data to pass to @notify_func
+ * @notify_func: the callback function to register
+ *
+ * Registers an invalidation notifier which will be called when the
+ * @closure is invalidated with g_closure_invalidate(). Invalidation
+ * notifiers are invoked before finalization notifiers, in an
+ * unspecified order.
+ */
+void
+g_closure_add_invalidate_notifier (GClosure      *closure,
+				   gpointer       notify_data,
+				   GClosureNotify notify_func)
+{
+  guint i;
+
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (notify_func != NULL);
+  g_return_if_fail (closure->is_invalid == FALSE);
+  g_return_if_fail (closure->n_inotifiers < CLOSURE_MAX_N_INOTIFIERS);
+
+  closure->notifiers = g_renew (GClosureNotifyData, closure->notifiers, CLOSURE_N_NOTIFIERS (closure) + 1);
+  i = CLOSURE_N_MFUNCS (closure) + closure->n_fnotifiers + closure->n_inotifiers;
+  closure->notifiers[i].data = notify_data;
+  closure->notifiers[i].notify = notify_func;
+  INC (closure, n_inotifiers);
+}
+
+static inline gboolean
+closure_try_remove_inotify (GClosure       *closure,
+			    gpointer       notify_data,
+			    GClosureNotify notify_func)
+{
+  GClosureNotifyData *ndata, *nlast;
+
+  nlast = closure->notifiers + CLOSURE_N_NOTIFIERS (closure) - 1;
+  for (ndata = nlast + 1 - closure->n_inotifiers; ndata <= nlast; ndata++)
+    if (ndata->notify == notify_func && ndata->data == notify_data)
+      {
+	DEC (closure, n_inotifiers);
+	if (ndata < nlast)
+	  *ndata = *nlast;
+
+	return TRUE;
+      }
+  return FALSE;
+}
+
+static inline gboolean
+closure_try_remove_fnotify (GClosure       *closure,
+			    gpointer       notify_data,
+			    GClosureNotify notify_func)
+{
+  GClosureNotifyData *ndata, *nlast;
+
+  nlast = closure->notifiers + CLOSURE_N_NOTIFIERS (closure) - closure->n_inotifiers - 1;
+  for (ndata = nlast + 1 - closure->n_fnotifiers; ndata <= nlast; ndata++)
+    if (ndata->notify == notify_func && ndata->data == notify_data)
+      {
+	DEC (closure, n_fnotifiers);
+	if (ndata < nlast)
+	  *ndata = *nlast;
+	if (closure->n_inotifiers)
+	  closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+			      closure->n_fnotifiers)] = closure->notifiers[(CLOSURE_N_MFUNCS (closure) +
+									    closure->n_fnotifiers +
+									    closure->n_inotifiers)];
+	return TRUE;
+      }
+  return FALSE;
+}
+
+/**
+ * g_closure_ref:
+ * @closure: #GClosure to increment the reference count on
+ *
+ * Increments the reference count on a closure to force it staying
+ * alive while the caller holds a pointer to it.
+ *
+ * Returns: The @closure passed in, for convenience
+ */
+GClosure*
+g_closure_ref (GClosure *closure)
+{
+  guint new_ref_count;
+  g_return_val_if_fail (closure != NULL, NULL);
+  g_return_val_if_fail (closure->ref_count > 0, NULL);
+  g_return_val_if_fail (closure->ref_count < CLOSURE_MAX_REF_COUNT, NULL);
+
+  INC_ASSIGN (closure, ref_count, &new_ref_count);
+  g_return_val_if_fail (new_ref_count > 1, NULL);
+
+  return closure;
+}
+
+/**
+ * g_closure_invalidate:
+ * @closure: GClosure to invalidate
+ *
+ * Sets a flag on the closure to indicate that its calling
+ * environment has become invalid, and thus causes any future
+ * invocations of g_closure_invoke() on this @closure to be
+ * ignored. Also, invalidation notifiers installed on the closure will
+ * be called at this point. Note that unless you are holding a
+ * reference to the closure yourself, the invalidation notifiers may
+ * unref the closure and cause it to be destroyed, so if you need to
+ * access the closure after calling g_closure_invalidate(), make sure
+ * that you've previously called g_closure_ref().
+ *
+ * Note that g_closure_invalidate() will also be called when the
+ * reference count of a closure drops to zero (unless it has already
+ * been invalidated before).
+ */
+void
+g_closure_invalidate (GClosure *closure)
+{
+  g_return_if_fail (closure != NULL);
+
+  if (!closure->is_invalid)
+    {
+      gboolean was_invalid;
+      g_closure_ref (closure);           /* preserve floating flag */
+      SWAP (closure, is_invalid, TRUE, &was_invalid);
+      /* invalidate only once */
+      if (!was_invalid)
+        closure_invoke_notifiers (closure, INOTIFY);
+      g_closure_unref (closure);
+    }
+}
+
+/**
+ * g_closure_unref:
+ * @closure: #GClosure to decrement the reference count on
+ *
+ * Decrements the reference count of a closure after it was previously
+ * incremented by the same caller. If no other callers are using the
+ * closure, then the closure will be destroyed and freed.
+ */
+void
+g_closure_unref (GClosure *closure)
+{
+  guint new_ref_count;
+
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (closure->ref_count > 0);
+
+  if (closure->ref_count == 1)	/* last unref, invalidate first */
+    g_closure_invalidate (closure);
+
+  DEC_ASSIGN (closure, ref_count, &new_ref_count);
+
+  if (new_ref_count == 0)
+    {
+      closure_invoke_notifiers (closure, FNOTIFY);
+      g_free (closure->notifiers);
+      g_free (closure);
+    }
+}
+
+/**
+ * g_closure_sink:
+ * @closure: #GClosure to decrement the initial reference count on, if it's
+ *           still being held
+ *
+ * Takes over the initial ownership of a closure.  Each closure is
+ * initially created in a <firstterm>floating</firstterm> state, which
+ * means that the initial reference count is not owned by any caller.
+ * g_closure_sink() checks to see if the object is still floating, and
+ * if so, unsets the floating state and decreases the reference
+ * count. If the closure is not floating, g_closure_sink() does
+ * nothing. The reason for the existance of the floating state is to
+ * prevent cumbersome code sequences like:
+ * |[
+ * closure = g_cclosure_new (cb_func, cb_data);
+ * g_source_set_closure (source, closure);
+ * g_closure_unref (closure); // XXX GObject doesn't really need this
+ * ]|
+ * Because g_source_set_closure() (and similar functions) take ownership of the
+ * initial reference count, if it is unowned, we instead can write:
+ * |[
+ * g_source_set_closure (source, g_cclosure_new (cb_func, cb_data));
+ * ]|
+ *
+ * Generally, this function is used together with g_closure_ref(). Ane example
+ * of storing a closure for later notification looks like:
+ * |[
+ * static GClosure *notify_closure = NULL;
+ * void
+ * foo_notify_set_closure (GClosure *closure)
+ * {
+ *   if (notify_closure)
+ *     g_closure_unref (notify_closure);
+ *   notify_closure = closure;
+ *   if (notify_closure)
+ *     {
+ *       g_closure_ref (notify_closure);
+ *       g_closure_sink (notify_closure);
+ *     }
+ * }
+ * ]|
+ *
+ * Because g_closure_sink() may decrement the reference count of a closure
+ * (if it hasn't been called on @closure yet) just like g_closure_unref(),
+ * g_closure_ref() should be called prior to this function.
+ */
+void
+g_closure_sink (GClosure *closure)
+{
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (closure->ref_count > 0);
+
+  /* floating is basically a kludge to avoid creating closures
+   * with a ref_count of 0. so the intial ref_count a closure has
+   * is unowned. with invoking g_closure_sink() code may
+   * indicate that it takes over that intiial ref_count.
+   */
+  if (closure->floating)
+    {
+      gboolean was_floating;
+      SWAP (closure, floating, FALSE, &was_floating);
+      /* unref floating flag only once */
+      if (was_floating)
+        g_closure_unref (closure);
+    }
+}
+
+/**
+ * g_closure_remove_invalidate_notifier:
+ * @closure: a #GClosure
+ * @notify_data: data which was passed to g_closure_add_invalidate_notifier()
+ *               when registering @notify_func
+ * @notify_func: the callback function to remove
+ *
+ * Removes an invalidation notifier.
+ *
+ * Notice that notifiers are automatically removed after they are run.
+ */
+void
+g_closure_remove_invalidate_notifier (GClosure      *closure,
+				      gpointer       notify_data,
+				      GClosureNotify notify_func)
+{
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (notify_func != NULL);
+
+  if (closure->is_invalid && closure->in_inotify && /* account removal of notify_func() while it's called */
+      ((gpointer) closure->marshal) == ((gpointer) notify_func) &&
+      closure->data == notify_data)
+    closure->marshal = NULL;
+  else if (!closure_try_remove_inotify (closure, notify_data, notify_func))
+    g_warning (G_STRLOC ": unable to remove uninstalled invalidation notifier: %p (%p)",
+	       notify_func, notify_data);
+}
+
+/**
+ * g_closure_remove_finalize_notifier:
+ * @closure: a #GClosure
+ * @notify_data: data which was passed to g_closure_add_finalize_notifier()
+ *  when registering @notify_func
+ * @notify_func: the callback function to remove
+ *
+ * Removes a finalization notifier.
+ *
+ * Notice that notifiers are automatically removed after they are run.
+ */
+void
+g_closure_remove_finalize_notifier (GClosure      *closure,
+				    gpointer       notify_data,
+				    GClosureNotify notify_func)
+{
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (notify_func != NULL);
+
+  if (closure->is_invalid && !closure->in_inotify && /* account removal of notify_func() while it's called */
+      ((gpointer) closure->marshal) == ((gpointer) notify_func) &&
+      closure->data == notify_data)
+    closure->marshal = NULL;
+  else if (!closure_try_remove_fnotify (closure, notify_data, notify_func))
+    g_warning (G_STRLOC ": unable to remove uninstalled finalization notifier: %p (%p)",
+               notify_func, notify_data);
+}
+
+/**
+ * g_closure_invoke:
+ * @closure: a #GClosure
+ * @return_value: a #GValue to store the return value. May be %NULL if the
+ *                callback of @closure doesn't return a value.
+ * @n_param_values: the length of the @param_values array
+ * @param_values: an array of #GValue<!-- -->s holding the arguments on
+ *                which to invoke the callback of @closure
+ * @invocation_hint: a context-dependent invocation hint
+ *
+ * Invokes the closure, i.e. executes the callback represented by the @closure.
+ */
+void
+g_closure_invoke (GClosure       *closure,
+		  GValue /*out*/ *return_value,
+		  guint           n_param_values,
+		  const GValue   *param_values,
+		  gpointer        invocation_hint)
+{
+  g_return_if_fail (closure != NULL);
+
+  g_closure_ref (closure);      /* preserve floating flag */
+  if (!closure->is_invalid)
+    {
+      GClosureMarshal marshal;
+      gpointer marshal_data;
+      gboolean in_marshal = closure->in_marshal;
+
+      g_return_if_fail (closure->marshal || closure->meta_marshal);
+
+      SET (closure, in_marshal, TRUE);
+      if (closure->meta_marshal)
+	{
+	  marshal_data = closure->notifiers[0].data;
+	  marshal = (GClosureMarshal) closure->notifiers[0].notify;
+	}
+      else
+	{
+	  marshal_data = NULL;
+	  marshal = closure->marshal;
+	}
+      if (!in_marshal)
+	closure_invoke_notifiers (closure, PRE_NOTIFY);
+      marshal (closure,
+	       return_value,
+	       n_param_values, param_values,
+	       invocation_hint,
+	       marshal_data);
+      if (!in_marshal)
+	closure_invoke_notifiers (closure, POST_NOTIFY);
+      SET (closure, in_marshal, in_marshal);
+    }
+  g_closure_unref (closure);
+}
+
+/**
+ * g_closure_set_marshal:
+ * @closure: a #GClosure
+ * @marshal: a #GClosureMarshal function
+ *
+ * Sets the marshaller of @closure. The <literal>marshal_data</literal>
+ * of @marshal provides a way for a meta marshaller to provide additional
+ * information to the marshaller. (See g_closure_set_meta_marshal().) For
+ * GObject's C predefined marshallers (the g_cclosure_marshal_*()
+ * functions), what it provides is a callback function to use instead of
+ * @closure->callback.
+ */
+void
+g_closure_set_marshal (GClosure       *closure,
+		       GClosureMarshal marshal)
+{
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (marshal != NULL);
+
+  if (closure->marshal && closure->marshal != marshal)
+    g_warning ("attempt to override closure->marshal (%p) with new marshal (%p)",
+	       closure->marshal, marshal);
+  else
+    closure->marshal = marshal;
+}
+
+/**
+ * g_cclosure_new:
+ * @callback_func: the function to invoke
+ * @user_data: user data to pass to @callback_func
+ * @destroy_data: destroy notify to be called when @user_data is no longer used
+ *
+ * Creates a new closure which invokes @callback_func with @user_data as
+ * the last parameter.
+ *
+ * Returns: a new #GCClosure
+ */
+GClosure*
+g_cclosure_new (GCallback      callback_func,
+		gpointer       user_data,
+		GClosureNotify destroy_data)
+{
+  GClosure *closure;
+  
+  g_return_val_if_fail (callback_func != NULL, NULL);
+  
+  closure = g_closure_new_simple (sizeof (GCClosure), user_data);
+  if (destroy_data)
+    g_closure_add_finalize_notifier (closure, user_data, destroy_data);
+  ((GCClosure*) closure)->callback = (gpointer) callback_func;
+  
+  return closure;
+}
+
+/**
+ * g_cclosure_new_swap:
+ * @callback_func: the function to invoke
+ * @user_data: user data to pass to @callback_func
+ * @destroy_data: destroy notify to be called when @user_data is no longer used
+ *
+ * Creates a new closure which invokes @callback_func with @user_data as
+ * the first parameter.
+ *
+ * Returns: a new #GCClosure
+ */
+GClosure*
+g_cclosure_new_swap (GCallback      callback_func,
+		     gpointer       user_data,
+		     GClosureNotify destroy_data)
+{
+  GClosure *closure;
+  
+  g_return_val_if_fail (callback_func != NULL, NULL);
+  
+  closure = g_closure_new_simple (sizeof (GCClosure), user_data);
+  if (destroy_data)
+    g_closure_add_finalize_notifier (closure, user_data, destroy_data);
+  ((GCClosure*) closure)->callback = (gpointer) callback_func;
+  SET (closure, derivative_flag, TRUE);
+  
+  return closure;
+}
+
+static void
+g_type_class_meta_marshal (GClosure       *closure,
+			   GValue /*out*/ *return_value,
+			   guint           n_param_values,
+			   const GValue   *param_values,
+			   gpointer        invocation_hint,
+			   gpointer        marshal_data)
+{
+  GTypeClass *class;
+  gpointer callback;
+  /* GType itype = (GType) closure->data; */
+  guint offset = GPOINTER_TO_UINT (marshal_data);
+  
+  class = G_TYPE_INSTANCE_GET_CLASS (g_value_peek_pointer (param_values + 0), itype, GTypeClass);
+  callback = G_STRUCT_MEMBER (gpointer, class, offset);
+  if (callback)
+    closure->marshal (closure,
+		      return_value,
+		      n_param_values, param_values,
+		      invocation_hint,
+		      callback);
+}
+
+static void
+g_type_iface_meta_marshal (GClosure       *closure,
+			   GValue /*out*/ *return_value,
+			   guint           n_param_values,
+			   const GValue   *param_values,
+			   gpointer        invocation_hint,
+			   gpointer        marshal_data)
+{
+  GTypeClass *class;
+  gpointer callback;
+  GType itype = (GType) closure->data;
+  guint offset = GPOINTER_TO_UINT (marshal_data);
+  
+  class = G_TYPE_INSTANCE_GET_INTERFACE (g_value_peek_pointer (param_values + 0), itype, GTypeClass);
+  callback = G_STRUCT_MEMBER (gpointer, class, offset);
+  if (callback)
+    closure->marshal (closure,
+		      return_value,
+		      n_param_values, param_values,
+		      invocation_hint,
+		      callback);
+}
+
+/**
+ * g_signal_type_cclosure_new:
+ * @itype: the #GType identifier of an interface or classed type
+ * @struct_offset: the offset of the member function of @itype's class
+ *  structure which is to be invoked by the new closure
+ *
+ * Creates a new closure which invokes the function found at the offset
+ * @struct_offset in the class structure of the interface or classed type
+ * identified by @itype.
+ *
+ * Returns: a new #GCClosure
+ */
+GClosure*
+g_signal_type_cclosure_new (GType    itype,
+			    guint    struct_offset)
+{
+  GClosure *closure;
+  
+  g_return_val_if_fail (G_TYPE_IS_CLASSED (itype) || G_TYPE_IS_INTERFACE (itype), NULL);
+  g_return_val_if_fail (struct_offset >= sizeof (GTypeClass), NULL);
+  
+  closure = g_closure_new_simple (sizeof (GClosure), (gpointer) itype);
+  if (G_TYPE_IS_INTERFACE (itype))
+    g_closure_set_meta_marshal (closure, GUINT_TO_POINTER (struct_offset), g_type_iface_meta_marshal);
+  else
+    g_closure_set_meta_marshal (closure, GUINT_TO_POINTER (struct_offset), g_type_class_meta_marshal);
+  
+  return closure;
+}
+
+
+/**
+ * g_cclosure_marshal_VOID__VOID:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 1
+ * @param_values: a #GValue array holding only the instance
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__BOOLEAN:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gboolean parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gboolean arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__CHAR:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gchar parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gchar arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__UCHAR:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #guchar parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, guchar arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__INT:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gint parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gint arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__UINT:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #guint parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, guint arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__LONG:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #glong parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, glong arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__ULONG:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gulong parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gulong arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__ENUM:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the enumeration parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gint arg1, gpointer user_data)</literal> where the #gint parameter denotes an enumeration type..
+ */
+
+/**
+ * g_cclosure_marshal_VOID__FLAGS:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the flags parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gint arg1, gpointer user_data)</literal> where the #gint parameter denotes a flags type.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__FLOAT:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gfloat parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gfloat arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__DOUBLE:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gdouble parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gdouble arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__STRING:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gchar* parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, const gchar *arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__PARAM:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #GParamSpec* parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, GParamSpec *arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__BOXED:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #GBoxed* parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, GBoxed *arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__POINTER:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #gpointer parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, gpointer arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__OBJECT:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding the instance and the #GObject* parameter
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, GOBject *arg1, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_VOID__UINT_POINTER:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: ignored
+ * @n_param_values: 3
+ * @param_values: a #GValue array holding instance, arg1 and arg2
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>void (*callback) (gpointer instance, guint arg1, gpointer arg2, gpointer user_data)</literal>.
+ */
+
+/**
+ * g_cclosure_marshal_BOOLEAN__FLAGS:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: a #GValue which can store the returned #gboolean
+ * @n_param_values: 2
+ * @param_values: a #GValue array holding instance and arg1
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>gboolean (*callback) (gpointer instance, gint arg1, gpointer user_data)</literal> where the #gint parameter
+ * denotes a flags type.
+ */
+
+/**
+ * g_cclosure_marshal_BOOL__FLAGS:
+ *
+ * Another name for g_cclosure_marshal_BOOLEAN__FLAGS().
+ */
+/**
+ * g_cclosure_marshal_STRING__OBJECT_POINTER:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: a #GValue, which can store the returned string
+ * @n_param_values: 3
+ * @param_values: a #GValue array holding instance, arg1 and arg2
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller
+ *
+ * A marshaller for a #GCClosure with a callback of type
+ * <literal>gchar* (*callback) (gpointer instance, GObject *arg1, gpointer arg2, gpointer user_data)</literal>.
+ */
+
+#define __G_CLOSURE_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gclosure.h b/gobject/gclosure.h
new file mode 100644
index 0000000..fc0cb47
--- /dev/null
+++ b/gobject/gclosure.h
@@ -0,0 +1,251 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ * Copyright (C) 2005 Imendio AB
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_CLOSURE_H__
+#define __G_CLOSURE_H__
+
+#include        <gobject/gtype.h>
+
+G_BEGIN_DECLS
+
+/* --- defines --- */
+/**
+ * G_CLOSURE_NEEDS_MARSHAL:
+ * @closure: a #GClosure
+ * 
+ * Check if the closure still needs a marshaller. See g_closure_set_marshal().
+ *
+ * Returns: %TRUE if a #GClosureMarshal marshaller has not yet been set on 
+ * @closure.
+ */
+#define	G_CLOSURE_NEEDS_MARSHAL(closure) (((GClosure*) (closure))->marshal == NULL)
+/**
+ * G_CLOSURE_N_NOTIFIERS:
+ * @cl: a #GClosure
+ * 
+ * Get the total number of notifiers connected with the closure @cl. 
+ * The count includes the meta marshaller, the finalize and invalidate notifiers 
+ * and the marshal guards. Note that each guard counts as two notifiers. 
+ * See g_closure_set_meta_marshal(), g_closure_add_finalize_notifier(),
+ * g_closure_add_invalidate_notifier() and g_closure_add_marshal_guards().
+ *
+ * Returns: number of notifiers
+ */
+#define	G_CLOSURE_N_NOTIFIERS(cl)	 ((cl)->meta_marshal + ((cl)->n_guards << 1L) + \
+                                          (cl)->n_fnotifiers + (cl)->n_inotifiers)
+/**
+ * G_CCLOSURE_SWAP_DATA:
+ * @cclosure: a #GCClosure
+ * 
+ * Checks whether the user data of the #GCClosure should be passed as the
+ * first parameter to the callback. See g_cclosure_new_swap().
+ *
+ * Returns: %TRUE if data has to be swapped.
+ */
+#define	G_CCLOSURE_SWAP_DATA(cclosure)	 (((GClosure*) (cclosure))->derivative_flag)
+/**
+ * G_CALLBACK:
+ * @f: a function pointer.
+ * 
+ * Cast a function pointer to a #GCallback.
+ */
+#define	G_CALLBACK(f)			 ((GCallback) (f))
+
+
+/* -- typedefs --- */
+typedef struct _GClosure		 GClosure;
+typedef struct _GClosureNotifyData	 GClosureNotifyData;
+
+/**
+ * GCallback:
+ * 
+ * The type used for callback functions in structure definitions and function 
+ * signatures. This doesn't mean that all callback functions must take no 
+ * parameters and return void. The required signature of a callback function 
+ * is determined by the context in which is used (e.g. the signal to which it 
+ * is connected). Use G_CALLBACK() to cast the callback function to a #GCallback. 
+ */
+typedef void  (*GCallback)              (void);
+/**
+ * GClosureNotify:
+ * @data: data specified when registering the notification callback
+ * @closure: the #GClosure on which the notification is emitted
+ * 
+ * The type used for the various notification callbacks which can be registered
+ * on closures.
+ */
+typedef void  (*GClosureNotify)		(gpointer	 data,
+					 GClosure	*closure);
+/**
+ * GClosureMarshal:
+ * @closure: the #GClosure to which the marshaller belongs
+ * @return_value: a #GValue to store the return value. May be %NULL if the
+ *  callback of @closure doesn't return a value.
+ * @n_param_values: the length of the @param_values array
+ * @param_values: an array of #GValue<!-- -->s holding the arguments on
+ *  which to invoke the callback of @closure
+ * @invocation_hint: the invocation hint given as the last argument
+ *  to g_closure_invoke()
+ * @marshal_data: additional data specified when registering the marshaller,
+ *  see g_closure_set_marshal() and g_closure_set_meta_marshal()
+ * 
+ * The type used for marshaller functions.
+ */
+typedef void  (*GClosureMarshal)	(GClosure	*closure,
+					 GValue         *return_value,
+					 guint           n_param_values,
+					 const GValue   *param_values,
+					 gpointer        invocation_hint,
+					 gpointer	 marshal_data);
+/**
+ * GCClosure:
+ * @closure: the #GClosure
+ * @callback: the callback function
+ * 
+ * A #GCClosure is a specialization of #GClosure for C function callbacks.
+ */
+typedef struct _GCClosure		 GCClosure;
+
+
+/* --- structures --- */
+struct _GClosureNotifyData
+{
+  gpointer       data;
+  GClosureNotify notify;
+};
+/**
+ * GClosure:
+ * @in_marshal: Indicates whether the closure is currently being invoked with 
+ *  g_closure_invoke()
+ * @is_invalid: Indicates whether the closure has been invalidated by 
+ *  g_closure_invalidate()
+ * 
+ * A #GClosure represents a callback supplied by the programmer.
+ */
+struct _GClosure
+{
+  /*< private >*/
+  volatile      	guint	 ref_count : 15;
+  volatile       	guint	 meta_marshal : 1;
+  volatile       	guint	 n_guards : 1;
+  volatile       	guint	 n_fnotifiers : 2;	/* finalization notifiers */
+  volatile       	guint	 n_inotifiers : 8;	/* invalidation notifiers */
+  volatile       	guint	 in_inotify : 1;
+  volatile       	guint	 floating : 1;
+  /*< protected >*/
+  volatile         	guint	 derivative_flag : 1;
+  /*< public >*/
+  volatile       	guint	 in_marshal : 1;
+  volatile       	guint	 is_invalid : 1;
+
+  /*< private >*/	void   (*marshal)  (GClosure       *closure,
+					    GValue /*out*/ *return_value,
+					    guint           n_param_values,
+					    const GValue   *param_values,
+					    gpointer        invocation_hint,
+					    gpointer	    marshal_data);
+  /*< protected >*/	gpointer data;
+
+  /*< private >*/	GClosureNotifyData *notifiers;
+
+  /* invariants/constrains:
+   * - ->marshal and ->data are _invalid_ as soon as ->is_invalid==TRUE
+   * - invocation of all inotifiers occours prior to fnotifiers
+   * - order of inotifiers is random
+   *   inotifiers may _not_ free/invalidate parameter values (e.g. ->data)
+   * - order of fnotifiers is random
+   * - each notifier may only be removed before or during its invocation
+   * - reference counting may only happen prior to fnotify invocation
+   *   (in that sense, fnotifiers are really finalization handlers)
+   */
+};
+/* closure for C function calls, callback() is the user function
+ */
+struct _GCClosure
+{
+  GClosure	closure;
+  gpointer	callback;
+};
+
+
+/* --- prototypes --- */
+GClosure* g_cclosure_new			(GCallback	callback_func,
+						 gpointer	user_data,
+						 GClosureNotify destroy_data);
+GClosure* g_cclosure_new_swap			(GCallback	callback_func,
+						 gpointer	user_data,
+						 GClosureNotify destroy_data);
+GClosure* g_signal_type_cclosure_new		(GType          itype,
+						 guint          struct_offset);
+
+
+/* --- prototypes --- */
+GClosure* g_closure_ref				(GClosure	*closure);
+void	  g_closure_sink			(GClosure	*closure);
+void	  g_closure_unref			(GClosure	*closure);
+/* intimidating */
+GClosure* g_closure_new_simple			(guint		 sizeof_closure,
+						 gpointer	 data);
+void	  g_closure_add_finalize_notifier	(GClosure       *closure,
+						 gpointer	 notify_data,
+						 GClosureNotify	 notify_func);
+void	  g_closure_remove_finalize_notifier	(GClosure       *closure,
+						 gpointer	 notify_data,
+						 GClosureNotify	 notify_func);
+void	  g_closure_add_invalidate_notifier	(GClosure       *closure,
+						 gpointer	 notify_data,
+						 GClosureNotify	 notify_func);
+void	  g_closure_remove_invalidate_notifier	(GClosure       *closure,
+						 gpointer	 notify_data,
+						 GClosureNotify	 notify_func);
+void	  g_closure_add_marshal_guards		(GClosure	*closure,
+						 gpointer        pre_marshal_data,
+						 GClosureNotify	 pre_marshal_notify,
+						 gpointer        post_marshal_data,
+						 GClosureNotify	 post_marshal_notify);
+void	  g_closure_set_marshal			(GClosure	*closure,
+						 GClosureMarshal marshal);
+void	  g_closure_set_meta_marshal		(GClosure       *closure,
+						 gpointer	 marshal_data,
+						 GClosureMarshal meta_marshal);
+void	  g_closure_invalidate			(GClosure	*closure);
+void	  g_closure_invoke			(GClosure 	*closure,
+						 GValue	/*out*/	*return_value,
+						 guint		 n_param_values,
+						 const GValue	*param_values,
+						 gpointer	 invocation_hint);
+
+/* FIXME:
+   OK:  data_object::destroy		-> closure_invalidate();
+   MIS:	closure_invalidate()		-> disconnect(closure);
+   MIS:	disconnect(closure)		-> (unlink) closure_unref();
+   OK:	closure_finalize()		-> g_free (data_string);
+
+   random remarks:
+   - need marshaller repo with decent aliasing to base types
+   - provide marshaller collection, virtually covering anything out there
+*/
+
+G_END_DECLS
+
+#endif /* __G_CLOSURE_H__ */
diff --git a/gobject/genums.c b/gobject/genums.c
new file mode 100644
index 0000000..b49cae5
--- /dev/null
+++ b/gobject/genums.c
@@ -0,0 +1,626 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "genums.h"
+#include "gvalue.h"
+#include "gvaluecollector.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:enumerations_flags
+ * @short_description: Enumeration and flags types
+ * @see_also:#GParamSpecEnum, #GParamSpecFlags, g_param_spec_enum(),
+ * g_param_spec_flags(),
+ *
+ * <link linkend="glib-mkenums">glib-mkenums</link>
+ * @title: Enumeration and Flag Types
+ *
+ * The GLib type system provides fundamental types for enumeration and
+ * flags types. (Flags types are like enumerations, but allow their
+ * values to be combined by bitwise or). A registered enumeration or
+ * flags type associates a name and a nickname with each allowed
+ * value, and the methods g_enum_get_value_by_name(),
+ * g_enum_get_value_by_nick(), g_flags_get_value_by_name() and
+ * g_flags_get_value_by_nick() can look up values by their name or
+ * nickname.  When an enumeration or flags type is registered with the
+ * GLib type system, it can be used as value type for object
+ * properties, using g_param_spec_enum() or g_param_spec_flags().
+ *
+ * GObject ships with a utility called <link
+ * linkend="glib-mkenums">glib-mkenums</link> that can construct
+ * suitable type registration functions from C enumeration
+ * definitions.
+ */
+
+
+/* --- prototypes --- */
+static void	g_enum_class_init		(GEnumClass	*class,
+						 gpointer	 class_data);
+static void	g_flags_class_init		(GFlagsClass	*class,
+						 gpointer	 class_data);
+static void	value_flags_enum_init		(GValue		*value);
+static void	value_flags_enum_copy_value	(const GValue	*src_value,
+						 GValue		*dest_value);
+static gchar*	value_flags_enum_collect_value  (GValue		*value,
+						 guint           n_collect_values,
+						 GTypeCValue    *collect_values,
+						 guint           collect_flags);
+static gchar*	value_flags_enum_lcopy_value	(const GValue	*value,
+						 guint           n_collect_values,
+						 GTypeCValue    *collect_values,
+						 guint           collect_flags);
+
+/* --- functions --- */
+void
+g_enum_types_init (void)
+{
+  static gboolean initialized = FALSE;
+  static const GTypeValueTable flags_enum_value_table = {
+    value_flags_enum_init,	    /* value_init */
+    NULL,			    /* value_free */
+    value_flags_enum_copy_value,    /* value_copy */
+    NULL,			    /* value_peek_pointer */
+    "i",			    /* collect_format */
+    value_flags_enum_collect_value, /* collect_value */
+    "p",			    /* lcopy_format */
+    value_flags_enum_lcopy_value,   /* lcopy_value */
+  };
+  static GTypeInfo info = {
+    0,                          /* class_size */
+    NULL,                       /* base_init */
+    NULL,                       /* base_destroy */
+    NULL,                       /* class_init */
+    NULL,                       /* class_destroy */
+    NULL,                       /* class_data */
+    0,                          /* instance_size */
+    0,                          /* n_preallocs */
+    NULL,                       /* instance_init */
+    &flags_enum_value_table,    /* value_table */
+  };
+  static const GTypeFundamentalInfo finfo = {
+    G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_DERIVABLE,
+  };
+  GType type;
+  
+  g_return_if_fail (initialized == FALSE);
+  initialized = TRUE;
+  
+  /* G_TYPE_ENUM
+   */
+  info.class_size = sizeof (GEnumClass);
+  type = g_type_register_fundamental (G_TYPE_ENUM, g_intern_static_string ("GEnum"), &info, &finfo,
+				      G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
+  g_assert (type == G_TYPE_ENUM);
+  
+  /* G_TYPE_FLAGS
+   */
+  info.class_size = sizeof (GFlagsClass);
+  type = g_type_register_fundamental (G_TYPE_FLAGS, g_intern_static_string ("GFlags"), &info, &finfo,
+				      G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT);
+  g_assert (type == G_TYPE_FLAGS);
+}
+
+static void
+value_flags_enum_init (GValue *value)
+{
+  value->data[0].v_long = 0;
+}
+
+static void
+value_flags_enum_copy_value (const GValue *src_value,
+			     GValue	  *dest_value)
+{
+  dest_value->data[0].v_long = src_value->data[0].v_long;
+}
+
+static gchar*
+value_flags_enum_collect_value (GValue      *value,
+				guint        n_collect_values,
+				GTypeCValue *collect_values,
+				guint        collect_flags)
+{
+  value->data[0].v_long = collect_values[0].v_int;
+
+  return NULL;
+}
+
+static gchar*
+value_flags_enum_lcopy_value (const GValue *value,
+			      guint         n_collect_values,
+			      GTypeCValue  *collect_values,
+			      guint         collect_flags)
+{
+  gint *int_p = collect_values[0].v_pointer;
+  
+  if (!int_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *int_p = value->data[0].v_long;
+  
+  return NULL;
+}
+
+/**
+ * g_enum_register_static:
+ * @name: A nul-terminated string used as the name of the new type.
+ * @const_static_values: An array of #GEnumValue structs for the possible
+ *  enumeration values. The array is terminated by a struct with all
+ *  members being 0. GObject keeps a reference to the data, so it cannot
+ *  be stack-allocated.
+ *
+ * Registers a new static enumeration type with the name @name.
+ *
+ * It is normally more convenient to let <link
+ * linkend="glib-mkenums">glib-mkenums</link> generate a
+ * my_enum_get_type() function from a usual C enumeration definition
+ * than to write one yourself using g_enum_register_static().
+ *
+ * Returns: The new type identifier.
+ */
+GType
+g_enum_register_static (const gchar	 *name,
+			const GEnumValue *const_static_values)
+{
+  GTypeInfo enum_type_info = {
+    sizeof (GEnumClass), /* class_size */
+    NULL,                /* base_init */
+    NULL,                /* base_finalize */
+    (GClassInitFunc) g_enum_class_init,
+    NULL,                /* class_finalize */
+    NULL,                /* class_data */
+    0,                   /* instance_size */
+    0,                   /* n_preallocs */
+    NULL,                /* instance_init */
+    NULL,		 /* value_table */
+  };
+  GType type;
+  
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (const_static_values != NULL, 0);
+  
+  enum_type_info.class_data = const_static_values;
+  
+  type = g_type_register_static (G_TYPE_ENUM, name, &enum_type_info, 0);
+  
+  return type;
+}
+
+/**
+ * g_flags_register_static:
+ * @name: A nul-terminated string used as the name of the new type.
+ * @const_static_values: An array of #GFlagsValue structs for the possible
+ *  flags values. The array is terminated by a struct with all members being 0.
+ *  GObject keeps a reference to the data, so it cannot be stack-allocated.
+ *
+ * Registers a new static flags type with the name @name.
+ *
+ * It is normally more convenient to let <link
+ * linkend="glib-mkenums">glib-mkenums</link> generate a
+ * my_flags_get_type() function from a usual C enumeration definition
+ * than to write one yourself using g_flags_register_static().
+ *
+ * Returns: The new type identifier.
+ */
+GType
+g_flags_register_static (const gchar	   *name,
+			 const GFlagsValue *const_static_values)
+{
+  GTypeInfo flags_type_info = {
+    sizeof (GFlagsClass), /* class_size */
+    NULL,                 /* base_init */
+    NULL,                 /* base_finalize */
+    (GClassInitFunc) g_flags_class_init,
+    NULL,                 /* class_finalize */
+    NULL,                 /* class_data */
+    0,                    /* instance_size */
+    0,                    /* n_preallocs */
+    NULL,                 /* instance_init */
+    NULL,		  /* value_table */
+  };
+  GType type;
+  
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (const_static_values != NULL, 0);
+  
+  flags_type_info.class_data = const_static_values;
+  
+  type = g_type_register_static (G_TYPE_FLAGS, name, &flags_type_info, 0);
+  
+  return type;
+}
+
+/**
+ * g_enum_complete_type_info:
+ * @g_enum_type: the type identifier of the type being completed
+ * @info: the #GTypeInfo struct to be filled in
+ * @const_values: An array of #GEnumValue structs for the possible
+ *  enumeration values. The array is terminated by a struct with all
+ *  members being 0.
+ *
+ * This function is meant to be called from the complete_type_info()
+ * function of a #GTypePlugin implementation, as in the following
+ * example:
+ *
+ * |[
+ * static void
+ * my_enum_complete_type_info (GTypePlugin     *plugin,
+ *                             GType            g_type,
+ *                             GTypeInfo       *info,
+ *                             GTypeValueTable *value_table)
+ * {
+ *   static const GEnumValue values[] = {
+ *     { MY_ENUM_FOO, "MY_ENUM_FOO", "foo" },
+ *     { MY_ENUM_BAR, "MY_ENUM_BAR", "bar" },
+ *     { 0, NULL, NULL }
+ *   };
+ *
+ *   g_enum_complete_type_info (type, info, values);
+ * }
+ * ]|
+ */
+void
+g_enum_complete_type_info (GType	     g_enum_type,
+			   GTypeInfo	    *info,
+			   const GEnumValue *const_values)
+{
+  g_return_if_fail (G_TYPE_IS_ENUM (g_enum_type));
+  g_return_if_fail (info != NULL);
+  g_return_if_fail (const_values != NULL);
+  
+  info->class_size = sizeof (GEnumClass);
+  info->base_init = NULL;
+  info->base_finalize = NULL;
+  info->class_init = (GClassInitFunc) g_enum_class_init;
+  info->class_finalize = NULL;
+  info->class_data = const_values;
+}
+
+/**
+ * g_flags_complete_type_info:
+ * @g_flags_type: the type identifier of the type being completed
+ * @info: the #GTypeInfo struct to be filled in
+ * @const_values: An array of #GFlagsValue structs for the possible
+ *  enumeration values. The array is terminated by a struct with all
+ *  members being 0.
+ *
+ * This function is meant to be called from the complete_type_info()
+ * function of a #GTypePlugin implementation, see the example for
+ * g_enum_complete_type_info() above.
+ */
+void
+g_flags_complete_type_info (GType	       g_flags_type,
+			    GTypeInfo	      *info,
+			    const GFlagsValue *const_values)
+{
+  g_return_if_fail (G_TYPE_IS_FLAGS (g_flags_type));
+  g_return_if_fail (info != NULL);
+  g_return_if_fail (const_values != NULL);
+  
+  info->class_size = sizeof (GFlagsClass);
+  info->base_init = NULL;
+  info->base_finalize = NULL;
+  info->class_init = (GClassInitFunc) g_flags_class_init;
+  info->class_finalize = NULL;
+  info->class_data = const_values;
+}
+
+static void
+g_enum_class_init (GEnumClass *class,
+		   gpointer    class_data)
+{
+  g_return_if_fail (G_IS_ENUM_CLASS (class));
+  
+  class->minimum = 0;
+  class->maximum = 0;
+  class->n_values = 0;
+  class->values = class_data;
+  
+  if (class->values)
+    {
+      GEnumValue *values;
+      
+      class->minimum = class->values->value;
+      class->maximum = class->values->value;
+      for (values = class->values; values->value_name; values++)
+	{
+	  class->minimum = MIN (class->minimum, values->value);
+	  class->maximum = MAX (class->maximum, values->value);
+	  class->n_values++;
+	}
+    }
+}
+
+static void
+g_flags_class_init (GFlagsClass *class,
+		    gpointer	 class_data)
+{
+  g_return_if_fail (G_IS_FLAGS_CLASS (class));
+  
+  class->mask = 0;
+  class->n_values = 0;
+  class->values = class_data;
+  
+  if (class->values)
+    {
+      GFlagsValue *values;
+      
+      for (values = class->values; values->value_name; values++)
+	{
+	  class->mask |= values->value;
+	  class->n_values++;
+	}
+    }
+}
+
+/**
+ * g_enum_get_value_by_name:
+ * @enum_class: a #GEnumClass
+ * @name: the name to look up
+ *
+ * Looks up a #GEnumValue by name.
+ *
+ * Returns: the #GEnumValue with name @name, or %NULL if the
+ *          enumeration doesn't have a member with that name
+ */
+GEnumValue*
+g_enum_get_value_by_name (GEnumClass  *enum_class,
+			  const gchar *name)
+{
+  g_return_val_if_fail (G_IS_ENUM_CLASS (enum_class), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+  
+  if (enum_class->n_values)
+    {
+      GEnumValue *enum_value;
+      
+      for (enum_value = enum_class->values; enum_value->value_name; enum_value++)
+	if (strcmp (name, enum_value->value_name) == 0)
+	  return enum_value;
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_flags_get_value_by_name:
+ * @flags_class: a #GFlagsClass
+ * @name: the name to look up
+ *
+ * Looks up a #GFlagsValue by name.
+ *
+ * Returns: the #GFlagsValue with name @name, or %NULL if there is no
+ *          flag with that name
+ */
+GFlagsValue*
+g_flags_get_value_by_name (GFlagsClass *flags_class,
+			   const gchar *name)
+{
+  g_return_val_if_fail (G_IS_FLAGS_CLASS (flags_class), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+  
+  if (flags_class->n_values)
+    {
+      GFlagsValue *flags_value;
+      
+      for (flags_value = flags_class->values; flags_value->value_name; flags_value++)
+	if (strcmp (name, flags_value->value_name) == 0)
+	  return flags_value;
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_enum_get_value_by_nick:
+ * @enum_class: a #GEnumClass
+ * @nick: the nickname to look up
+ *
+ * Looks up a #GEnumValue by nickname.
+ *
+ * Returns: the #GEnumValue with nickname @nick, or %NULL if the
+ *          enumeration doesn't have a member with that nickname
+ */
+GEnumValue*
+g_enum_get_value_by_nick (GEnumClass  *enum_class,
+			  const gchar *nick)
+{
+  g_return_val_if_fail (G_IS_ENUM_CLASS (enum_class), NULL);
+  g_return_val_if_fail (nick != NULL, NULL);
+  
+  if (enum_class->n_values)
+    {
+      GEnumValue *enum_value;
+      
+      for (enum_value = enum_class->values; enum_value->value_name; enum_value++)
+	if (enum_value->value_nick && strcmp (nick, enum_value->value_nick) == 0)
+	  return enum_value;
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_flags_get_value_by_nick:
+ * @flags_class: a #GFlagsClass
+ * @nick: the nickname to look up
+ *
+ * Looks up a #GFlagsValue by nickname.
+ *
+ * Returns: the #GFlagsValue with nickname @nick, or %NULL if there is
+ *          no flag with that nickname
+ */
+GFlagsValue*
+g_flags_get_value_by_nick (GFlagsClass *flags_class,
+			   const gchar *nick)
+{
+  g_return_val_if_fail (G_IS_FLAGS_CLASS (flags_class), NULL);
+  g_return_val_if_fail (nick != NULL, NULL);
+  
+  if (flags_class->n_values)
+    {
+      GFlagsValue *flags_value;
+      
+      for (flags_value = flags_class->values; flags_value->value_nick; flags_value++)
+	if (flags_value->value_nick && strcmp (nick, flags_value->value_nick) == 0)
+	  return flags_value;
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_enum_get_value:
+ * @enum_class: a #GEnumClass
+ * @value: the value to look up
+ *
+ * Returns the #GEnumValue for a value.
+ *
+ * Returns: the #GEnumValue for @value, or %NULL if @value is not a
+ *          member of the enumeration
+ */
+GEnumValue*
+g_enum_get_value (GEnumClass *enum_class,
+		  gint	      value)
+{
+  g_return_val_if_fail (G_IS_ENUM_CLASS (enum_class), NULL);
+  
+  if (enum_class->n_values)
+    {
+      GEnumValue *enum_value;
+      
+      for (enum_value = enum_class->values; enum_value->value_name; enum_value++)
+	if (enum_value->value == value)
+	  return enum_value;
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_flags_get_first_value:
+ * @flags_class: a #GFlagsClass
+ * @value: the value
+ *
+ * Returns the first #GFlagsValue which is set in @value.
+ *
+ * Returns: the first #GFlagsValue which is set in @value, or %NULL if
+ *          none is set
+ */
+GFlagsValue*
+g_flags_get_first_value (GFlagsClass *flags_class,
+			 guint	      value)
+{
+  g_return_val_if_fail (G_IS_FLAGS_CLASS (flags_class), NULL);
+  
+  if (flags_class->n_values)
+    {
+      GFlagsValue *flags_value;
+
+      if (value == 0)
+        {
+          for (flags_value = flags_class->values; flags_value->value_name; flags_value++)
+            if (flags_value->value == 0)
+              return flags_value;
+        }
+      else
+        {
+          for (flags_value = flags_class->values; flags_value->value_name; flags_value++)
+            if (flags_value->value != 0 && (flags_value->value & value) == flags_value->value)
+              return flags_value;
+        }      
+    }
+  
+  return NULL;
+}
+
+/**
+ * g_value_set_enum:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_ENUM
+ * @v_enum: enum value to be set
+ *
+ * Set the contents of a %G_TYPE_ENUM #GValue to @v_enum.
+ */
+void
+g_value_set_enum (GValue *value,
+		  gint    v_enum)
+{
+  g_return_if_fail (G_VALUE_HOLDS_ENUM (value));
+  
+  value->data[0].v_long = v_enum;
+}
+
+/**
+ * g_value_get_enum:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_ENUM
+ *
+ * Get the contents of a %G_TYPE_ENUM #GValue.
+ *
+ * Returns: enum contents of @value
+ */
+gint
+g_value_get_enum (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_ENUM (value), 0);
+  
+  return value->data[0].v_long;
+}
+
+/**
+ * g_value_set_flags:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_FLAGS
+ * @v_flags: flags value to be set
+ *
+ * Set the contents of a %G_TYPE_FLAGS #GValue to @v_flags.
+ */
+void
+g_value_set_flags (GValue *value,
+		   guint   v_flags)
+{
+  g_return_if_fail (G_VALUE_HOLDS_FLAGS (value));
+  
+  value->data[0].v_ulong = v_flags;
+}
+
+/**
+ * g_value_get_flags:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_FLAGS
+ *
+ * Get the contents of a %G_TYPE_FLAGS #GValue.
+ *
+ * Returns: flags contents of @value
+ */
+guint
+g_value_get_flags (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_FLAGS (value), 0);
+  
+  return value->data[0].v_ulong;
+}
+
+#define __G_ENUMS_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/genums.h b/gobject/genums.h
new file mode 100644
index 0000000..bf8a419
--- /dev/null
+++ b/gobject/genums.h
@@ -0,0 +1,261 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_ENUMS_H__
+#define __G_ENUMS_H__
+
+#include <gobject/gtype.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+/**
+ * G_TYPE_IS_ENUM:
+ * @type: a #GType ID.
+ * 
+ * Checks whether @type "is a" %G_TYPE_ENUM.
+ *
+ * Returns: %TRUE if @type "is a" %G_TYPE_ENUM.
+ */
+#define G_TYPE_IS_ENUM(type)	       (G_TYPE_FUNDAMENTAL (type) == G_TYPE_ENUM)
+/**
+ * G_ENUM_CLASS:
+ * @class: a valid #GEnumClass
+ * 
+ * Casts a derived #GEnumClass structure into a #GEnumClass structure.
+ */
+#define G_ENUM_CLASS(class)	       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_ENUM, GEnumClass))
+/**
+ * G_IS_ENUM_CLASS:
+ * @class: a #GEnumClass
+ * 
+ * Checks whether @class "is a" valid #GEnumClass structure of type %G_TYPE_ENUM
+ * or derived.
+ */
+#define G_IS_ENUM_CLASS(class)	       (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_ENUM))
+/**
+ * G_ENUM_CLASS_TYPE:
+ * @class: a #GEnumClass
+ * 
+ * Get the type identifier from a given #GEnumClass structure.
+ *
+ * Returns: the #GType
+ */
+#define G_ENUM_CLASS_TYPE(class)       (G_TYPE_FROM_CLASS (class))
+/**
+ * G_ENUM_CLASS_TYPE_NAME:
+ * @class: a #GEnumClass
+ * 
+ * Get the static type name from a given #GEnumClass structure.
+ *
+ * Returns: the type name.
+ */
+#define G_ENUM_CLASS_TYPE_NAME(class)  (g_type_name (G_ENUM_CLASS_TYPE (class)))
+
+
+/**
+ * G_TYPE_IS_FLAGS:
+ * @type: a #GType ID.
+ *
+ * Checks whether @type "is a" %G_TYPE_FLAGS. 
+ *
+ * Returns: %TRUE if @type "is a" %G_TYPE_FLAGS.
+ */
+#define G_TYPE_IS_FLAGS(type)	       (G_TYPE_FUNDAMENTAL (type) == G_TYPE_FLAGS)
+/**
+ * G_FLAGS_CLASS:
+ * @class: a valid #GFlagsClass
+ * 
+ * Casts a derived #GFlagsClass structure into a #GFlagsClass structure.
+ */
+#define G_FLAGS_CLASS(class)	       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_FLAGS, GFlagsClass))
+/**
+ * G_IS_FLAGS_CLASS:
+ * @class: a #GFlagsClass
+ * 
+ * Checks whether @class "is a" valid #GFlagsClass structure of type %G_TYPE_FLAGS
+ * or derived.
+ */
+#define G_IS_FLAGS_CLASS(class)        (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_FLAGS))
+/**
+ * G_FLAGS_CLASS_TYPE:
+ * @class: a #GFlagsClass
+ * 
+ * Get the type identifier from a given #GFlagsClass structure.
+ *
+ * Returns: the #GType
+ */
+#define G_FLAGS_CLASS_TYPE(class)      (G_TYPE_FROM_CLASS (class))
+/**
+ * G_FLAGS_CLASS_TYPE_NAME:
+ * @class: a #GFlagsClass
+ * 
+ * Get the static type name from a given #GFlagsClass structure.
+ *
+ * Returns: the type name.
+ */
+#define G_FLAGS_CLASS_TYPE_NAME(class) (g_type_name (G_FLAGS_CLASS_TYPE (class)))
+
+
+/**
+ * G_VALUE_HOLDS_ENUM:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values derived from type %G_TYPE_ENUM.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_ENUM(value)      (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ENUM))
+/**
+ * G_VALUE_HOLDS_FLAGS:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values derived from type %G_TYPE_FLAGS.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_FLAGS(value)     (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLAGS))
+
+
+/* --- enum/flag values & classes --- */
+typedef struct _GEnumClass  GEnumClass;
+typedef struct _GFlagsClass GFlagsClass;
+typedef struct _GEnumValue  GEnumValue;
+typedef struct _GFlagsValue GFlagsValue;
+
+/**
+ * GEnumClass:
+ * @g_type_class: the parent class
+ * @minimum: the smallest possible value.
+ * @maximum: the largest possible value.
+ * @n_values: the number of possible values.
+ * @values: an array of #GEnumValue structs describing the 
+ *  individual values.
+ * 
+ * The class of an enumeration type holds information about its 
+ * possible values.
+ */
+struct	_GEnumClass
+{
+  GTypeClass  g_type_class;
+
+  /*< public >*/  
+  gint	      minimum;
+  gint	      maximum;
+  guint	      n_values;
+  GEnumValue *values;
+};
+/**
+ * GFlagsClass:
+ * @g_type_class: the parent class
+ * @mask: a mask covering all possible values.
+ * @n_values: the number of possible values.
+ * @values: an array of #GFlagsValue structs describing the 
+ *  individual values.
+ * 
+ * The class of a flags type holds information about its 
+ * possible values.
+ */
+struct	_GFlagsClass
+{
+  GTypeClass   g_type_class;
+  
+  /*< public >*/  
+  guint	       mask;
+  guint	       n_values;
+  GFlagsValue *values;
+};
+/**
+ * GEnumValue:
+ * @value: the enum value
+ * @value_name: the name of the value
+ * @value_nick: the nickname of the value
+ * 
+ * A structure which contains a single enum value, its name, and its
+ * nickname.
+ */
+struct _GEnumValue
+{
+  gint	 value;
+  const gchar *value_name;
+  const gchar *value_nick;
+};
+/**
+ * GFlagsValue:
+ * @value: the flags value
+ * @value_name: the name of the value
+ * @value_nick: the nickname of the value
+ * 
+ * A structure which contains a single flags value, its name, and its
+ * nickname.
+ */
+struct _GFlagsValue
+{
+  guint	 value;
+  const gchar *value_name;
+  const gchar *value_nick;
+};
+
+
+/* --- prototypes --- */
+GEnumValue*	g_enum_get_value		(GEnumClass	*enum_class,
+						 gint		 value);
+GEnumValue*	g_enum_get_value_by_name	(GEnumClass	*enum_class,
+						 const gchar	*name);
+GEnumValue*	g_enum_get_value_by_nick	(GEnumClass	*enum_class,
+						 const gchar	*nick);
+GFlagsValue*	g_flags_get_first_value		(GFlagsClass	*flags_class,
+						 guint		 value);
+GFlagsValue*	g_flags_get_value_by_name	(GFlagsClass	*flags_class,
+						 const gchar	*name);
+GFlagsValue*	g_flags_get_value_by_nick	(GFlagsClass	*flags_class,
+						 const gchar	*nick);
+void            g_value_set_enum        	(GValue         *value,
+						 gint            v_enum);
+gint            g_value_get_enum        	(const GValue   *value);
+void            g_value_set_flags       	(GValue         *value,
+						 guint           v_flags);
+guint           g_value_get_flags       	(const GValue   *value);
+
+
+
+/* --- registration functions --- */
+/* const_static_values is a NULL terminated array of enum/flags
+ * values that is taken over!
+ */
+GType	g_enum_register_static	   (const gchar	      *name,
+				    const GEnumValue  *const_static_values);
+GType	g_flags_register_static	   (const gchar	      *name,
+				    const GFlagsValue *const_static_values);
+/* functions to complete the type information
+ * for enums/flags implemented by plugins
+ */
+void	g_enum_complete_type_info  (GType	       g_enum_type,
+				    GTypeInfo	      *info,
+				    const GEnumValue  *const_values);
+void	g_flags_complete_type_info (GType	       g_flags_type,
+				    GTypeInfo	      *info,
+				    const GFlagsValue *const_values);
+
+G_END_DECLS
+
+#endif /* __G_ENUMS_H__ */
diff --git a/gobject/glib-genmarshal.1 b/gobject/glib-genmarshal.1
new file mode 100644
index 0000000..f0adfaa
--- /dev/null
+++ b/gobject/glib-genmarshal.1
@@ -0,0 +1,212 @@
+.TH GLIB-GENMARSHAL 1 "18 Oct 2000"
+.SH NAME
+glib-genmarshal \- C code marshaller generation utility for GLib closures
+.SH SYNOPSIS
+
+\fBglib-genmarshal\fP [\fIoptions\fP] [\fIfiles...\fP]
+
+.SH DESCRIPTION
+\fBglib-genmarshal\fP is a small utility that generates C code marshallers
+for callback functions of the GClosure mechanism in the GObject sublibrary
+of GLib. The marshaller functions have a standard signature, they get passed
+in the invoking closure, an array of value structures holding the callback
+function parameters and a value structure for the return value of the
+callback. The marshaller is then responsible to call the respective C code
+function of the closure with all the parameters on the stack and to collect
+its return value.
+
+.SH INVOCATION
+
+\fBglib-genmarshal\fP takes a list of marshallers to generate as input.
+The marshaller list is either read from standard input or from files
+passed as additional arguments on the command line.
+
+.SS Options
+.TP
+\fI--header
+Generate header file contents of the marshallers.
+.TP
+\fI--body
+Generate C code file contents of the marshallers.
+.TP
+\fI--prefix=string, --prefix string
+Specify marshaller prefix. The default prefix is `\fIg_cclosure_marshal\fP'.
+.TP
+\fI--skip-source
+Skip source location remarks in generated comments.
+.TP
+\fI--nostdinc
+Do not use the standard marshallers of the GObject library, and skip
+gmarshal.h include directive in generated header files.
+.TP
+\fI--internal
+Mark generated function as internal by using the G_GNUC_INTERNAL macro.
+.TP
+\fI--g-fatal-warnings
+Make warnings fatal, that is, exit immediately once a warning occurs.
+.TP
+\fI-h, --help\fP 
+Print brief help and exit.
+.TP
+\fI-v, --version\fP 
+Print version and exit.
+.PP
+
+.SS Marshaller list format
+.PP
+The marshaller lists are processed line by line, a line can contain a
+comment in the form of
+.RS
+.PP
+# this is a comment
+.PP
+.RE
+or a marshaller specification of the form
+.RS
+.PP
+\fIRTYPE\fP:\fBPTYPE\fP
+.PP
+\fIRTYPE\fP:\fBPTYPE\fP,\fBPTYPE\fP
+.PP
+\fIRTYPE\fP:\fBPTYPE\fP,\fBPTYPE\fP,\fBPTYPE\fP
+.PP
+# up to 16 \fBPTYPE\fPs may be present
+.PP
+.RE
+The \fIRTYPE\fP part specifies the callback's return type and
+the \fBPTYPE\fPs right to the colon specify the callback's
+parameter list, except for the first and the last arguments which
+are always pointers.
+.PP
+
+.SS Parameter types
+Currently, the following types are supported:
+.TP 12
+\fIVOID
+indicates no return type, or no extra parameters. if \fIVOID\fP is used as
+the parameter list, no additional parameters may be present.
+.TP 12
+\fIBOOLEAN
+for boolean types (gboolean)
+.TP 12
+\fICHAR
+for signed char types (gchar)
+.TP 12
+\fIUCHAR
+for unsigned char types (guchar)
+.TP 12
+\fIINT
+for signed integer types (gint)
+.TP 12
+\fIUINT
+for unsigned integer types (guint)
+.TP 12
+\fILONG
+for signed long integer types (glong)
+.TP 12
+\fIULONG
+for unsigned long integer types (gulong)
+.TP 12
+\fIINT64
+for signed 64bit integer types (gint64)
+.TP 12
+\fIUINT64
+for unsigned 64bit integer types (guint64)
+.TP 12
+\fIENUM
+for enumeration types (gint)
+.TP 12
+\fIFLAGS
+for flag enumeration types (guint)
+.TP 12
+\fIFLOAT
+for single-precision float types (gfloat)
+.TP 12
+\fIDOUBLE
+for double-precision float types (gdouble)
+.TP 12
+\fISTRING
+for string types (gchar*)
+.TP 12
+\fIBOXED
+for boxed (anonymous but reference counted) types (GBoxed*)
+.TP 12
+\fIPARAM
+for GParamSpec or derived types (GParamSpec*)
+.TP 12
+\fIPOINTER
+for anonymous pointer types (gpointer)
+.TP 12
+\fIOBJECT
+for GObject or derived types (GObject*)
+.TP 12
+\fINONE
+deprecated alias for \fIVOID\fP
+.TP 12
+\fIBOOL
+deprecated alias for \fIBOOLEAN\fP
+
+.SH EXAMPLE
+To generate marshallers for the following callback functions:
+.PP
+.RS
+.nf
+void   foo (gpointer data1,
+            gpointer data2);
+void   bar (gpointer data1,
+            gint     param1,
+            gpointer data2);
+gfloat baz (gpointer data1,
+            gboolean param1,
+            guchar   param2,
+            gpointer data2);
+.fi
+.RE
+.PP
+The marshaller list has to look like this:
+.PP
+.RS
+.nf
+VOID:VOID
+VOID:INT
+FLOAT:BOOLEAN,UCHAR
+.fi
+.RE
+.PP
+The generated marshallers have the arguments encoded
+in their function name. For this particular list, they
+are
+g_cclosure_marshal_VOID__VOID(),
+g_cclosure_marshal_VOID__INT(), 
+g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR().
+.PP
+They can be used directly for GClosures or be passed in as
+the GSignalCMarshaller c_marshaller; argument upon creation
+of signals:
+.PP
+.nf
+GClosure *cc_foo, *cc_bar, *cc_baz;
+
+cc_foo = g_cclosure_new (NULL, foo, NULL);
+g_closure_set_marshal (cc_foo, g_cclosure_marshal_VOID__VOID);
+cc_bar = g_cclosure_new (NULL, bar, NULL);
+g_closure_set_marshal (cc_bar, g_cclosure_marshal_VOID__INT);
+cc_baz = g_cclosure_new (NULL, baz, NULL);
+g_closure_set_marshal (cc_baz, g_cclosure_marshal_FLOAT__BOOLEAN_UCHAR);
+.fi
+.PP
+
+
+.SH SEE ALSO
+\fB
+glib-mkenums(1)
+\fP
+
+.SH BUGS 
+None known yet.
+
+.SH AUTHOR
+.B glib-genmarshal
+has been written by Tim Janik <timj@gtk.org>.
+.PP
+This manual page was provided by Tim Janik <timj@gtk.org>.
diff --git a/gobject/glib-genmarshal.c b/gobject/glib-genmarshal.c
new file mode 100644
index 0000000..f96f466
--- /dev/null
+++ b/gobject/glib-genmarshal.c
@@ -0,0 +1,892 @@
+/* GLIB-GenMarshal - Marshaller generator for GObject library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN "GLib-Genmarshal"
+#include <glib.h>
+#include <glib/gprintf.h>
+
+#ifdef G_OS_WIN32
+#include <io.h>
+#endif
+
+/* --- defines --- */
+#define	PRG_NAME	"glib-genmarshal"
+#define	PKG_NAME	"GLib"
+#define PKG_HTTP_HOME	"http://www.gtk.org"
+
+
+/* --- typedefs & structures --- */
+typedef struct
+{
+  gchar	      *keyword;		/* marhaller list keyword [MY_STRING] */
+  const gchar *sig_name;	/* signature name [STRING] */
+  const gchar *ctype;		/* C type name [gchar*] */
+  const gchar *getter;		/* value getter function [g_value_get_string] */
+} InArgument;
+typedef struct
+{
+  gchar	      *keyword;		/* marhaller list keyword [MY_STRING] */
+  const gchar *sig_name;	/* signature name [STRING] */
+  const gchar *ctype;		/* C type name [gchar*] */
+  const gchar *setter;		/* value setter function [g_value_set_string] */
+} OutArgument;
+typedef struct
+{
+  gchar       *ploc;
+  OutArgument *rarg;
+  GList       *args;	/* of type InArgument* */
+} Signature;
+
+
+/* --- prototypes --- */
+static void	parse_args	(gint	   	*argc_p,
+				 gchar	     ***argv_p);
+static void	print_blurb	(FILE	       	*bout,
+				 gboolean	 print_help);
+
+
+/* --- variables --- */
+static const GScannerConfig scanner_config_template =
+{
+  (
+   " \t\r"		/* "\n" is statement delimiter */
+   )                    /* cset_skip_characters */,
+  (
+   G_CSET_a_2_z
+   "_"
+   G_CSET_A_2_Z
+   )                    /* cset_identifier_first */,
+  (
+   G_CSET_a_2_z
+   "_0123456789"
+   G_CSET_A_2_Z
+   )                    /* cset_identifier_nth */,
+  ( "#\n" )             /* cpair_comment_single */,
+
+  FALSE                 /* case_sensitive */,
+
+  TRUE                  /* skip_comment_multi */,
+  TRUE                  /* skip_comment_single */,
+  TRUE                  /* scan_comment_multi */,
+  TRUE                  /* scan_identifier */,
+  FALSE                 /* scan_identifier_1char */,
+  FALSE                 /* scan_identifier_NULL */,
+  TRUE                  /* scan_symbols */,
+  FALSE                 /* scan_binary */,
+  TRUE                  /* scan_octal */,
+  TRUE                  /* scan_float */,
+  TRUE                  /* scan_hex */,
+  FALSE                 /* scan_hex_dollar */,
+  TRUE                  /* scan_string_sq */,
+  TRUE                  /* scan_string_dq */,
+  TRUE                  /* numbers_2_int */,
+  FALSE                 /* int_2_float */,
+  FALSE                 /* identifier_2_string */,
+  TRUE                  /* char_2_token */,
+  FALSE                 /* symbol_2_token */,
+  FALSE                 /* scope_0_fallback */,
+};
+static gchar		* const std_marshaller_prefix = "g_cclosure_marshal";
+static gchar		*marshaller_prefix = "g_cclosure_user_marshal";
+static GHashTable	*marshallers = NULL;
+static FILE             *fout = NULL;
+static gboolean		 gen_cheader = FALSE;
+static gboolean		 gen_cbody = FALSE;
+static gboolean          gen_internal = FALSE;
+static gboolean		 skip_ploc = FALSE;
+static gboolean		 std_includes = TRUE;
+static gint              exit_status = 0;
+
+
+/* --- functions --- */
+static void
+put_marshal_value_getters (void)
+{
+  fputs ("\n", fout);
+  fputs ("#ifdef G_ENABLE_DEBUG\n", fout);
+  fputs ("#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_char(v)     g_value_get_char (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_int(v)      g_value_get_int (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_long(v)     g_value_get_long (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_float(v)    g_value_get_float (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_double(v)   g_value_get_double (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_param(v)    g_value_get_param (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)\n", fout);
+  fputs ("#define g_marshal_value_peek_object(v)   g_value_get_object (v)\n", fout);
+  fputs ("#else /* !G_ENABLE_DEBUG */\n", fout);
+  fputs ("/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.\n", fout);
+  fputs (" *          Do not access GValues directly in your code. Instead, use the\n", fout);
+  fputs (" *          g_value_get_*() functions\n", fout);
+  fputs (" */\n", fout);
+  fputs ("#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int\n", fout);
+  fputs ("#define g_marshal_value_peek_char(v)     (v)->data[0].v_int\n", fout);
+  fputs ("#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint\n", fout);
+  fputs ("#define g_marshal_value_peek_int(v)      (v)->data[0].v_int\n", fout);
+  fputs ("#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint\n", fout);
+  fputs ("#define g_marshal_value_peek_long(v)     (v)->data[0].v_long\n", fout);
+  fputs ("#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong\n", fout);
+  fputs ("#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64\n", fout);
+  fputs ("#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64\n", fout);
+  fputs ("#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long\n", fout);
+  fputs ("#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong\n", fout);
+  fputs ("#define g_marshal_value_peek_float(v)    (v)->data[0].v_float\n", fout);
+  fputs ("#define g_marshal_value_peek_double(v)   (v)->data[0].v_double\n", fout);
+  fputs ("#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer\n", fout);
+  fputs ("#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer\n", fout);
+  fputs ("#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer\n", fout);
+  fputs ("#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer\n", fout);
+  fputs ("#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer\n", fout);
+  fputs ("#endif /* !G_ENABLE_DEBUG */\n", fout);
+  fputs ("\n", fout);
+}
+
+static gboolean
+complete_in_arg (InArgument *iarg)
+{
+  static const InArgument args[] = {
+    /* keyword		sig_name	ctype		getter			*/
+    { "VOID",		"VOID",		"void",		NULL,			},
+    { "BOOLEAN",	"BOOLEAN",	"gboolean",	"g_marshal_value_peek_boolean",	},
+    { "CHAR",		"CHAR",		"gchar",	"g_marshal_value_peek_char",	},
+    { "UCHAR",		"UCHAR",	"guchar",	"g_marshal_value_peek_uchar",	},
+    { "INT",		"INT",		"gint",		"g_marshal_value_peek_int",	},
+    { "UINT",		"UINT",		"guint",	"g_marshal_value_peek_uint",	},
+    { "LONG",		"LONG",		"glong",	"g_marshal_value_peek_long",	},
+    { "ULONG",		"ULONG",	"gulong",	"g_marshal_value_peek_ulong",	},
+    { "INT64",		"INT64",	"gint64",       "g_marshal_value_peek_int64",	},
+    { "UINT64",		"UINT64",	"guint64",	"g_marshal_value_peek_uint64",	},
+    { "ENUM",		"ENUM",		"gint",		"g_marshal_value_peek_enum",	},
+    { "FLAGS",		"FLAGS",	"guint",	"g_marshal_value_peek_flags",	},
+    { "FLOAT",		"FLOAT",	"gfloat",	"g_marshal_value_peek_float",	},
+    { "DOUBLE",		"DOUBLE",	"gdouble",	"g_marshal_value_peek_double",	},
+    { "STRING",		"STRING",	"gpointer",	"g_marshal_value_peek_string",	},
+    { "PARAM",		"PARAM",	"gpointer",	"g_marshal_value_peek_param",	},
+    { "BOXED",		"BOXED",	"gpointer",	"g_marshal_value_peek_boxed",	},
+    { "POINTER",	"POINTER",	"gpointer",	"g_marshal_value_peek_pointer",	},
+    { "OBJECT",		"OBJECT",	"gpointer",	"g_marshal_value_peek_object",	},
+    /* deprecated: */
+    { "NONE",		"VOID",		"void",		NULL,			},
+    { "BOOL",		"BOOLEAN",	"gboolean",	"g_marshal_value_peek_boolean",	},
+  };
+  guint i;
+
+  g_return_val_if_fail (iarg != NULL, FALSE);
+
+  for (i = 0; i < G_N_ELEMENTS (args); i++)
+    if (strcmp (args[i].keyword, iarg->keyword) == 0)
+      {
+	iarg->sig_name = args[i].sig_name;
+	iarg->ctype = args[i].ctype;
+	iarg->getter = args[i].getter;
+
+	return TRUE;
+      }
+  return FALSE;
+}
+
+static gboolean
+complete_out_arg (OutArgument *oarg)
+{
+  static const OutArgument args[] = {
+    /* keyword		sig_name	ctype		setter			*/
+    { "VOID",		"VOID",		"void",		NULL,					     },
+    { "BOOLEAN",	"BOOLEAN",	"gboolean",	"g_value_set_boolean",			     },
+    { "CHAR",		"CHAR",		"gchar",	"g_value_set_char",			     },
+    { "UCHAR",		"UCHAR",	"guchar",	"g_value_set_uchar",			     },
+    { "INT",		"INT",		"gint",		"g_value_set_int",			     },
+    { "UINT",		"UINT",		"guint",	"g_value_set_uint",			     },
+    { "LONG",		"LONG",		"glong",	"g_value_set_long",			     },
+    { "ULONG",		"ULONG",	"gulong",	"g_value_set_ulong",			     },
+    { "INT64",		"INT64",	"gint64",	"g_value_set_int64",			     },
+    { "UINT64",		"UINT64",	"guint64",	"g_value_set_uint64",			     },
+    { "ENUM",		"ENUM",		"gint",		"g_value_set_enum",			     },
+    { "FLAGS",		"FLAGS",	"guint",	"g_value_set_flags",			     },
+    { "FLOAT",		"FLOAT",	"gfloat",	"g_value_set_float",			     },
+    { "DOUBLE",		"DOUBLE",	"gdouble",	"g_value_set_double",			     },
+    { "STRING",		"STRING",	"gchar*",	"g_value_take_string",			     },
+    { "PARAM",		"PARAM",	"GParamSpec*",	"g_value_take_param",			     },
+    { "BOXED",		"BOXED",	"gpointer",	"g_value_take_boxed",			     },
+    { "POINTER",	"POINTER",	"gpointer",	"g_value_set_pointer",			     },
+    { "OBJECT",		"OBJECT",	"GObject*",	"g_value_take_object",			     },
+    /* deprecated: */
+    { "NONE",		"VOID",		"void",		NULL,					     },
+    { "BOOL",		"BOOLEAN",	"gboolean",	"g_value_set_boolean",			     },
+  };
+  guint i;
+
+  g_return_val_if_fail (oarg != NULL, FALSE);
+
+  for (i = 0; i < G_N_ELEMENTS (args); i++)
+    if (strcmp (args[i].keyword, oarg->keyword) == 0)
+      {
+	oarg->sig_name = args[i].sig_name;
+	oarg->ctype = args[i].ctype;
+	oarg->setter = args[i].setter;
+
+	return TRUE;
+      }
+  return FALSE;
+}
+
+static const gchar*
+pad (const gchar *string)
+{
+#define PAD_LENGTH	12
+  static gchar *buffer = NULL;
+  gint i;
+
+  g_return_val_if_fail (string != NULL, NULL);
+
+  if (!buffer)
+    buffer = g_new (gchar, PAD_LENGTH + 1);
+
+  /* paranoid check */
+  if (strlen (string) >= PAD_LENGTH)
+    {
+      g_free (buffer);
+      buffer = g_strdup_printf ("%s ", string);
+      g_warning ("overfull string (%u bytes) for padspace",
+                 (guint) strlen (string));
+      exit_status |= 2;
+
+      return buffer;
+    }
+
+  for (i = 0; i < PAD_LENGTH; i++)
+    {
+      gboolean done = *string == 0;
+
+      buffer[i] = done ? ' ' : *string++;
+    }
+  buffer[i] = 0;
+
+  return buffer;
+}
+
+static const gchar*
+indent (guint n_spaces)
+{
+  static gchar *buffer = NULL;
+  static guint blength = 0;
+
+  if (blength <= n_spaces)
+    {
+      blength = n_spaces + 1;
+      g_free (buffer);
+      buffer = g_new (gchar, blength);
+    }
+  memset (buffer, ' ', n_spaces);
+  buffer[n_spaces] = 0;
+
+  return buffer;
+}
+
+static void
+generate_marshal (const gchar *signame,
+		  Signature   *sig)
+{
+  guint ind, a;
+  GList *node;
+  gchar *tmp = g_strconcat (marshaller_prefix, "_", signame, NULL);
+  gboolean have_std_marshaller = FALSE;
+
+  /* here we have to make sure a marshaller named <marshaller_prefix>_<signame>
+   * exists. we might have put it out already, can revert to a standard
+   * marshaller provided by glib, or need to generate one.
+   */
+
+  if (g_hash_table_lookup (marshallers, tmp))
+    {
+      /* done, marshaller already generated */
+      g_free (tmp);
+      return;
+    }
+  else
+    {
+      /* need to alias/generate marshaller, register name */
+      g_hash_table_insert (marshallers, tmp, tmp);
+    }
+
+  /* can we revert to a standard marshaller? */
+  if (std_includes)
+    {
+      tmp = g_strconcat (std_marshaller_prefix, "_", signame, NULL);
+      have_std_marshaller = g_hash_table_lookup (marshallers, tmp) != NULL;
+      g_free (tmp);
+    }
+
+  if (gen_cheader && have_std_marshaller)
+    {
+      g_fprintf (fout, "#define %s_%s\t%s_%s\n", marshaller_prefix, signame, std_marshaller_prefix, signame);
+    }
+  if (gen_cheader && !have_std_marshaller)
+    {
+      ind = g_fprintf (fout, gen_internal ? "G_GNUC_INTERNAL " : "extern ");
+      ind += g_fprintf (fout, "void ");
+      ind += g_fprintf (fout, "%s_%s (", marshaller_prefix, signame);
+      g_fprintf (fout,   "GClosure     *closure,\n");
+      g_fprintf (fout, "%sGValue       *return_value,\n", indent (ind));
+      g_fprintf (fout, "%sguint         n_param_values,\n", indent (ind));
+      g_fprintf (fout, "%sconst GValue *param_values,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      invocation_hint,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      marshal_data);\n",
+                 indent (ind));
+    }
+  if (gen_cbody && !have_std_marshaller)
+    {
+      /* cfile marshal header */
+      g_fprintf (fout, "void\n");
+      ind = g_fprintf (fout, "%s_%s (", marshaller_prefix, signame);
+      g_fprintf (fout,   "GClosure     *closure,\n");
+      g_fprintf (fout, "%sGValue       *return_value G_GNUC_UNUSED,\n", indent (ind));
+      g_fprintf (fout, "%sguint         n_param_values,\n", indent (ind));
+      g_fprintf (fout, "%sconst GValue *param_values,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      invocation_hint G_GNUC_UNUSED,\n", indent (ind));
+      g_fprintf (fout, "%sgpointer      marshal_data)\n", indent (ind));
+      g_fprintf (fout, "{\n");
+
+      /* cfile GMarshalFunc typedef */
+      ind = g_fprintf (fout, "  typedef %s (*GMarshalFunc_%s) (", sig->rarg->ctype, signame);
+      g_fprintf (fout, "%s data1,\n", pad ("gpointer"));
+      for (a = 1, node = sig->args; node; node = node->next)
+	{
+	  InArgument *iarg = node->data;
+
+	  if (iarg->getter)
+	    g_fprintf (fout, "%s%s arg_%d,\n", indent (ind), pad (iarg->ctype), a++);
+	}
+      g_fprintf (fout, "%s%s data2);\n", indent (ind), pad ("gpointer"));
+
+      /* cfile marshal variables */
+      g_fprintf (fout, "  register GMarshalFunc_%s callback;\n", signame);
+      g_fprintf (fout, "  register GCClosure *cc = (GCClosure*) closure;\n");
+      g_fprintf (fout, "  register gpointer data1, data2;\n");
+      if (sig->rarg->setter)
+	g_fprintf (fout, "  %s v_return;\n", sig->rarg->ctype);
+
+      if (sig->args || sig->rarg->setter)
+	{
+	  g_fprintf (fout, "\n");
+
+	  if (sig->rarg->setter)
+	    g_fprintf (fout, "  g_return_if_fail (return_value != NULL);\n");
+	  if (sig->args)
+	    {
+	      for (a = 0, node = sig->args; node; node = node->next)
+		{
+		  InArgument *iarg = node->data;
+
+		  if (iarg->getter)
+		    a++;
+		}
+	      g_fprintf (fout, "  g_return_if_fail (n_param_values == %u);\n", 1 + a);
+	    }
+	}
+
+      /* cfile marshal data1, data2 and callback setup */
+      g_fprintf (fout, "\n");
+      g_fprintf (fout, "  if (G_CCLOSURE_SWAP_DATA (closure))\n    {\n");
+      g_fprintf (fout, "      data1 = closure->data;\n");
+      g_fprintf (fout, "      data2 = g_value_peek_pointer (param_values + 0);\n");
+      g_fprintf (fout, "    }\n  else\n    {\n");
+      g_fprintf (fout, "      data1 = g_value_peek_pointer (param_values + 0);\n");
+      g_fprintf (fout, "      data2 = closure->data;\n");
+      g_fprintf (fout, "    }\n");
+      g_fprintf (fout, "  callback = (GMarshalFunc_%s) (marshal_data ? marshal_data : cc->callback);\n", signame);
+
+      /* cfile marshal callback action */
+      g_fprintf (fout, "\n");
+      ind = g_fprintf (fout, " %s callback (", sig->rarg->setter ? " v_return =" : "");
+      g_fprintf (fout, "data1,\n");
+      for (a = 1, node = sig->args; node; node = node->next)
+	{
+	  InArgument *iarg = node->data;
+
+	  if (iarg->getter)
+	    g_fprintf (fout, "%s%s (param_values + %d),\n", indent (ind), iarg->getter, a++);
+	}
+      g_fprintf (fout, "%sdata2);\n", indent (ind));
+
+      /* cfile marshal return value storage */
+      if (sig->rarg->setter)
+	{
+	  g_fprintf (fout, "\n");
+	  g_fprintf (fout, "  %s (return_value, v_return);\n", sig->rarg->setter);
+	}
+
+      /* cfile marshal footer */
+      g_fprintf (fout, "}\n");
+    }
+}
+
+static void
+process_signature (Signature *sig)
+{
+  gchar *pname, *sname, *tmp;
+  GList *node;
+
+  /* lookup and complete info on arguments */
+  if (!complete_out_arg (sig->rarg))
+    {
+      g_warning ("unknown type: %s", sig->rarg->keyword);
+      exit_status |= 1;
+      return;
+    }
+  for (node = sig->args; node; node = node->next)
+    {
+      InArgument *iarg = node->data;
+
+      if (!complete_in_arg (iarg))
+	{
+	  g_warning ("unknown type: %s", iarg->keyword);
+          exit_status |= 1;
+	  return;
+	}
+    }
+
+  /* construct requested marshaller name and technical marshaller name */
+  pname = g_strconcat (sig->rarg->keyword, "_", NULL);
+  sname = g_strconcat (sig->rarg->sig_name, "_", NULL);
+  for (node = sig->args; node; node = node->next)
+    {
+      InArgument *iarg = node->data;
+      gchar *tmp;
+
+      tmp = sname;
+      sname = g_strconcat (tmp, "_", iarg->sig_name, NULL);
+      g_free (tmp);
+      tmp = pname;
+      pname = g_strconcat (tmp, "_", iarg->keyword, NULL);
+      g_free (tmp);
+    }
+
+  /* introductionary comment */
+  g_fprintf (fout, "\n/* %s", sig->rarg->keyword);
+  for (node = sig->args; node; node = node->next)
+    {
+      InArgument *iarg = node->data;
+
+      g_fprintf (fout, "%c%s", node->prev ? ',' : ':', iarg->keyword);
+    }
+  if (!skip_ploc)
+    g_fprintf (fout, " (%s)", sig->ploc);
+  g_fprintf (fout, " */\n");
+
+  /* ensure technical marshaller exists (<marshaller_prefix>_<sname>) */
+  generate_marshal (sname, sig);
+
+  /* put out marshaller alias for requested name if required (<marshaller_prefix>_<pname>) */
+  tmp = g_strconcat (marshaller_prefix, "_", pname, NULL);
+  if (gen_cheader && !g_hash_table_lookup (marshallers, tmp))
+    {
+      g_fprintf (fout, "#define %s_%s\t%s_%s\n", marshaller_prefix, pname, marshaller_prefix, sname);
+
+      g_hash_table_insert (marshallers, tmp, tmp);
+    }
+  else
+    g_free (tmp);
+
+  g_free (pname);
+  g_free (sname);
+}
+
+static InArgument*
+new_in_arg (const gchar *pname)
+{
+  InArgument *iarg = g_new0 (InArgument, 1);
+
+  iarg->keyword = g_strdup (pname);
+
+  return iarg;
+}
+
+static OutArgument*
+new_out_arg (const gchar *pname)
+{
+  OutArgument *oarg = g_new0 (OutArgument, 1);
+
+  oarg->keyword = g_strdup (pname);
+
+  return oarg;
+}
+
+static guint
+parse_line (GScanner  *scanner,
+	    Signature *sig)
+{
+  /* parse identifier for return value */
+  if (g_scanner_get_next_token (scanner) != G_TOKEN_IDENTIFIER)
+    return G_TOKEN_IDENTIFIER;
+  sig->rarg = new_out_arg (scanner->value.v_identifier);
+
+  /* keep a note on the location */
+  sig->ploc = g_strdup_printf ("%s:%u", scanner->input_name, scanner->line);
+
+  /* expect ':' */
+  if (g_scanner_get_next_token (scanner) != ':')
+    return ':';
+
+  /* parse first argument */
+  if (g_scanner_get_next_token (scanner) != G_TOKEN_IDENTIFIER)
+    return G_TOKEN_IDENTIFIER;
+  sig->args = g_list_append (sig->args, new_in_arg (scanner->value.v_identifier));
+
+  /* parse rest of argument list */
+  while (g_scanner_peek_next_token (scanner) == ',')
+    {
+      /* eat comma */
+      g_scanner_get_next_token (scanner);
+
+      /* parse arg identifier */
+      if (g_scanner_get_next_token (scanner) != G_TOKEN_IDENTIFIER)
+	return G_TOKEN_IDENTIFIER;
+      sig->args = g_list_append (sig->args, new_in_arg (scanner->value.v_identifier));
+    }
+
+  /* expect end of line, done */
+  if (g_scanner_get_next_token (scanner) != '\n')
+    return '\n';
+
+  /* success */
+  return G_TOKEN_NONE;
+}
+
+static gboolean
+string_key_destroy (gpointer key,
+		    gpointer value,
+		    gpointer user_data)
+{
+  g_free (key);
+
+  return TRUE;
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  const gchar *gobject_marshallers[] = {
+#include	"gmarshal.strings"
+  };
+  GScanner *scanner;
+  GSList *slist, *files = NULL;
+  gint i;
+
+  /* parse args and do fast exits */
+  parse_args (&argc, &argv);
+
+  /* list input files */
+  for (i = 1; i < argc; i++)
+    files = g_slist_prepend (files, argv[i]);
+  if (files)
+    files = g_slist_reverse (files);
+  else
+    files = g_slist_prepend (files, "/dev/stdin");
+
+  /* setup auxillary structs */
+  scanner = g_scanner_new (&scanner_config_template);
+  fout = stdout;
+  marshallers = g_hash_table_new (g_str_hash, g_str_equal);
+
+  /* add standard marshallers of the GObject library */
+  if (std_includes)
+    for (i = 0; i < G_N_ELEMENTS (gobject_marshallers); i++)
+      {
+	gchar *tmp = g_strdup (gobject_marshallers[i]);
+
+	g_hash_table_insert (marshallers, tmp, tmp);
+      }
+
+  /* put out initial heading */
+  g_fprintf (fout, "\n");
+
+  if (gen_cheader && std_includes)
+    {
+      g_fprintf (fout, "#ifndef __%s_MARSHAL_H__\n", marshaller_prefix);
+      g_fprintf (fout, "#define __%s_MARSHAL_H__\n\n", marshaller_prefix);
+    }
+
+  if ((gen_cheader || gen_cbody) && std_includes)
+    g_fprintf (fout, "#include\t<glib-object.h>\n\n");
+
+  if (gen_cheader)
+    g_fprintf (fout, "G_BEGIN_DECLS\n");
+
+  /* generate necessary preprocessor directives */
+  if (gen_cbody)
+    put_marshal_value_getters ();
+
+  /* process input files */
+  for (slist = files; slist; slist = slist->next)
+    {
+      gchar *file = slist->data;
+      gint fd;
+
+      if (strcmp (file, "/dev/stdin") == 0)
+	/* Mostly for Win32. This is equivalent to opening /dev/stdin */
+	fd = dup (0);
+      else
+	fd = open (file, O_RDONLY);
+
+      if (fd < 0)
+	{
+	  g_warning ("failed to open \"%s\": %s", file, g_strerror (errno));
+	  exit_status |= 1;
+	  continue;
+	}
+
+      /* set file name for error reports */
+      scanner->input_name = file;
+
+      /* parse & process file */
+      g_scanner_input_file (scanner, fd);
+
+      /* scanning loop, we parse the input until its end is reached,
+       * or our sub routine came across invalid syntax
+       */
+      do
+	{
+	  guint expected_token = G_TOKEN_NONE;
+
+	  switch (g_scanner_peek_next_token (scanner))
+	    {
+	    case '\n':
+	      /* eat newline and restart */
+	      g_scanner_get_next_token (scanner);
+	      continue;
+	    case G_TOKEN_EOF:
+	      /* done */
+	      break;
+	    default:
+	      /* parse and process signatures */
+	      {
+		Signature signature = { NULL, NULL, NULL };
+		GList *node;
+
+		expected_token = parse_line (scanner, &signature);
+
+		/* once we got a valid signature, process it */
+		if (expected_token == G_TOKEN_NONE)
+		  process_signature (&signature);
+
+		/* clean up signature contents */
+		g_free (signature.ploc);
+		if (signature.rarg)
+		  g_free (signature.rarg->keyword);
+		g_free (signature.rarg);
+		for (node = signature.args; node; node = node->next)
+		  {
+		    InArgument *iarg = node->data;
+
+		    g_free (iarg->keyword);
+		    g_free (iarg);
+		  }
+		g_list_free (signature.args);
+	      }
+	      break;
+	    }
+
+	  /* bail out on errors */
+	  if (expected_token != G_TOKEN_NONE)
+	    {
+	      g_scanner_unexp_token (scanner, expected_token, "type name", NULL, NULL, NULL, TRUE);
+	      exit_status |= 1;
+	      break;
+	    }
+
+	  g_scanner_peek_next_token (scanner);
+	}
+      while (scanner->next_token != G_TOKEN_EOF);
+
+      close (fd);
+    }
+
+  /* put out trailer */
+  if (gen_cheader)
+    {
+      g_fprintf (fout, "\nG_END_DECLS\n");
+
+      if (std_includes)
+	g_fprintf (fout, "\n#endif /* __%s_MARSHAL_H__ */\n", marshaller_prefix);
+    }
+  g_fprintf (fout, "\n");
+
+  /* clean up */
+  g_slist_free (files);
+  g_scanner_destroy (scanner);
+  g_hash_table_foreach_remove (marshallers, string_key_destroy, NULL);
+  g_hash_table_destroy (marshallers);
+
+  return exit_status;
+}
+
+static void
+parse_args (gint    *argc_p,
+	    gchar ***argv_p)
+{
+  guint argc = *argc_p;
+  gchar **argv = *argv_p;
+  guint i, e;
+
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp ("--header", argv[i]) == 0)
+	{
+	  gen_cheader = TRUE;
+	  argv[i] = NULL;
+	}
+      else if (strcmp ("--body", argv[i]) == 0)
+	{
+	  gen_cbody = TRUE;
+	  argv[i] = NULL;
+	}
+      else if (strcmp ("--skip-source", argv[i]) == 0)
+	{
+	  skip_ploc = TRUE;
+	  argv[i] = NULL;
+	}
+      else if (strcmp ("--nostdinc", argv[i]) == 0)
+	{
+	  std_includes = FALSE;
+	  argv[i] = NULL;
+	}
+      else if (strcmp ("--stdinc", argv[i]) == 0)
+	{
+	  std_includes = TRUE;
+	  argv[i] = NULL;
+	}
+      else if (strcmp ("--internal", argv[i]) == 0)
+	{
+	  gen_internal = TRUE;
+	  argv[i] = NULL;
+	}
+      else if ((strcmp ("--prefix", argv[i]) == 0) ||
+	       (strncmp ("--prefix=", argv[i], 9) == 0))
+	{
+          gchar *equal = argv[i] + 8;
+
+	  if (*equal == '=')
+	    marshaller_prefix = g_strdup (equal + 1);
+	  else if (i + 1 < argc)
+	    {
+	      marshaller_prefix = g_strdup (argv[i + 1]);
+	      argv[i] = NULL;
+	      i += 1;
+	    }
+	  argv[i] = NULL;
+	}
+      else if (strcmp ("-h", argv[i]) == 0 ||
+          strcmp ("-?", argv[i]) == 0 ||
+	  strcmp ("--help", argv[i]) == 0)
+	{
+	  print_blurb (stderr, TRUE);
+	  argv[i] = NULL;
+	  exit (0);
+	}
+      else if (strcmp ("-v", argv[i]) == 0 ||
+	       strcmp ("--version", argv[i]) == 0)
+	{
+	  print_blurb (stderr, FALSE);
+	  argv[i] = NULL;
+	  exit (0);
+	}
+      else if (strcmp (argv[i], "--g-fatal-warnings") == 0)
+	{
+	  GLogLevelFlags fatal_mask;
+
+	  fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+	  fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+	  g_log_set_always_fatal (fatal_mask);
+
+	  argv[i] = NULL;
+	}
+    }
+
+  e = 0;
+  for (i = 1; i < argc; i++)
+    {
+      if (e)
+	{
+	  if (argv[i])
+	    {
+	      argv[e++] = argv[i];
+	      argv[i] = NULL;
+	    }
+	}
+      else if (!argv[i])
+	e = i;
+    }
+  if (e)
+    *argc_p = e;
+}
+
+static void
+print_blurb (FILE    *bout,
+	     gboolean print_help)
+{
+  if (!print_help)
+    {
+      g_fprintf (bout, "%s version ", PRG_NAME);
+      g_fprintf (bout, "%u.%u.%u", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+      g_fprintf (bout, "\n");
+      g_fprintf (bout, "%s comes with ABSOLUTELY NO WARRANTY.\n", PRG_NAME);
+      g_fprintf (bout, "You may redistribute copies of %s under the terms of\n", PRG_NAME);
+      g_fprintf (bout, "the GNU General Public License which can be found in the\n");
+      g_fprintf (bout, "%s source package. Sources, examples and contact\n", PKG_NAME);
+      g_fprintf (bout, "information are available at %s\n", PKG_HTTP_HOME);
+    }
+  else
+    {
+      g_fprintf (bout, "Usage:\n");
+      g_fprintf (bout, "  %s [OPTION...] [FILES...]\n\n", PRG_NAME);
+      g_fprintf (bout, "Help Options:\n");
+      g_fprintf (bout, "  -h, --help                 Show this help message\n\n");
+      g_fprintf (bout, "Utility Options:\n");
+      g_fprintf (bout, "  --header                   Generate C headers\n");
+      g_fprintf (bout, "  --body                     Generate C code\n");
+      g_fprintf (bout, "  --prefix=string            Specify marshaller prefix\n");
+      g_fprintf (bout, "  --skip-source              Skip source location comments\n");
+      g_fprintf (bout, "  --stdinc, --nostdinc       Include/use standard marshallers\n");
+      g_fprintf (bout, "  --internal                 Mark generated functions as internal\n");
+      g_fprintf (bout, "  -v, --version              Print version informations\n");
+      g_fprintf (bout, "  --g-fatal-warnings         Make warnings fatal (abort)\n");
+    }
+}
diff --git a/gobject/glib-mkenums.1 b/gobject/glib-mkenums.1
new file mode 100644
index 0000000..0837d08
--- /dev/null
+++ b/gobject/glib-mkenums.1
@@ -0,0 +1,166 @@
+.TH GLIB-MKENUMS 1 "27 Jul 2002"
+.SH NAME
+glib-mkenums \- C language enum description generation utility
+.SH SYNOPSIS
+
+\fBglib-mkenums\fP [\fIoptions\fP] [\fIfiles...\fP]
+
+.SH DESCRIPTION
+\fBglib-mkenums\fP is a small perl-script utility that parses C code to extract enum
+definitions and produces enum descriptions based on text templates specified
+by the user. Most frequently this script is used to produce C code that contains
+enum values as strings so programs can provide value name strings for introspection.
+
+.SH INVOCATION
+
+\fBglib-mkenums\fP takes a list of valid C code files as input. The options
+specified control the text that is output, certain substitutions are performed
+on the text templates for keywords enclosed in @ characters.
+
+
+.SS Options
+.TP
+\fI--fhead <text>
+Put out <text> prior to processing input files.
+.TP
+\fI--fprod <text>
+Put out <text> everytime a new input file is being processed.
+.TP
+\fI--ftail <text>
+Put out <text> after all input files have been processed.
+.TP
+\fI--eprod <text>
+Put out <text> everytime an enum is encountered in the input files.
+.TP
+\fI--vhead <text>
+Put out <text> before iterating over the set of values of an enum.
+.TP
+\fI--vprod <text>
+Put out <text> for every value of an enum.
+.TP
+\fI--vtail <text>
+Put out <text> after iterating over all values of an enum.
+.TP
+\fI--comments <text>
+Template for auto-generated comments, the default (for C code generations) is
+"/* @comment@ */".
+.TP
+\fI--template file
+Read templates from the given file. The templates are enclosed in
+specially-formatted C comments
+.PP
+.RS
+.nf
+/*** BEGIN section ***/ 
+/*** END section ***/
+.fi
+.PP
+where section may be file-header, file-production, file-tail,
+enumeration-production, value-header, value-production, value-tail or
+comment.
+.TP
+\fI-h, --help\fP 
+Print brief help and exit.
+.TP
+\fI-v, --version\fP 
+Print version and exit.
+.PP
+
+
+.SS Production text substitutions
+Certain keywords enclosed in @ characters will be substituted in the outputted
+text. For the substitution examples of the keywords below, the following example
+enum definition is assumed:
+.PP
+.RS
+.nf
+typedef enum
+{
+  PREFIX_THE_XVALUE    = 1 << 3,
+  PREFIX_ANOTHER_VALUE = 1 << 4
+} PrefixTheXEnum;
+.fi
+.RE
+
+.TP 12
+\fI@EnumName@
+The name of the enum currently being processed, enum names are assumed to be
+properly namespaced and to use mixed capitalization to separate
+words (e.g. PrefixTheXEnum).
+.TP 12
+\fI@enum_name@
+The enum name with words lowercase and word-separated by underscores (e.g. prefix_the_xenum).
+.TP 12
+\fI@ENUMNAME@
+The enum name with words uppercase and word-separated by underscores (e.g. PREFIX_THE_XENUM).
+.TP 12
+\fI@ENUMSHORT@
+The enum name with words uppercase and word-separated by underscores, prefix stripped (e.g. THE_XENUM).
+.TP 12
+\fI@VALUENAME@
+The enum value name currently being processed with words uppercase and word-separated by underscores,
+this is the assumed literal notation of enum values in the C sources (e.g. PREFIX_THE_XVALUE).
+.TP 12
+\fI@valuenick@
+A nick name for the enum value currently being processed, this is usually generated by stripping
+common prefix words of all the enum values of the current enum, the words are lowercase and
+underscores are substituted by a minus (e.g. the-xvalue).
+.TP 12
+\fI@type@
+This is substituted either by "enum" or "flags", depending on whether the enum value definitions
+contained bit-shift operators or not (e.g. flags).
+.TP 12
+\fI@Type@
+The same as \fI@type@\fP with the first letter capitalized (e.g. Flags).
+.TP 12
+\fI@TYPE@
+The same as \fI@type@\fP with all letters uppercased (e.g. FLAGS).
+.TP 12
+\fI@filename@
+The name of the input file currently being processed (e.g. foo.h).
+
+.SS Trigraph extensions
+Some C comments are treated specially in the parsed enum definitions, such comments
+start out with the trigraph sequence "/*<" and end with the trigraph sequence ">*/".
+.PP
+Per enum definition, the options "skip" and "flags" can be specified, to indicate
+this enum definition to be skipped, or for it to be treated as a flags definition, or
+to specify the common prefix to be stripped from all values to generate value nicknames,
+respectively. The "underscore_name" option can be used to specify the underscorized name
+variant used in the *_get_type() function and *_TYPE_* macro.  For instance,
+/*< underscore_name=gnome_vfs_uri_hide_options >*/.
+.PP
+Per value definition, the options "skip" and "nick" are supported. The former causes the
+value to be skipped, and the latter can be used to specify the otherwise auto-generated
+nickname.
+Examples:
+.PP
+.RS
+.nf
+typedef enum /*< skip >*/
+{
+  PREFIX_FOO
+} PrefixThisEnumWillBeSkipped;
+typedef enum /*< flags,prefix=PREFIX >*/
+{
+  PREFIX_THE_ZEROTH_VALUE,	/*< skip >*/
+  PREFIX_THE_FIRST_VALUE,
+  PREFIX_THE_SECOND_VALUE,
+  PREFIX_THE_THIRD_VALUE,	/*< nick=the-last-value >*/
+} PrefixTheFlagsEnum;
+.fi
+.RE
+
+.SH SEE ALSO
+\fB
+glib-genmarshal(1)
+\fP
+
+.SH BUGS 
+None known yet.
+
+.SH AUTHOR
+.B glib-mkenums
+was written by Tim Janik <timj@gtk.org> and Owen Taylor <otaylor@redhat.com>.
+.PP
+This manual page was provided by Tim Janik <timj@gtk.org>.
diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in
new file mode 100755
index 0000000..9bb5aa9
--- /dev/null
+++ b/gobject/glib-mkenums.in
@@ -0,0 +1,502 @@
+#!@PERL_PATH@ -w
+
+# glib-mkenums.pl 
+# Information about the current enumeration
+my $flags;			# Is enumeration a bitmask?
+my $option_underscore_name;	# Overriden underscore variant of the enum name
+				# for example to fix the cases we don't get the
+				# mixed-case -> underscorized transform right.
+my $option_lowercase_name;	# DEPRECATED.  A lower case name to use as part
+				# of the *_get_type() function, instead of the
+				# one that we guess. For instance, when an enum
+				# uses abnormal capitalization and we can not
+				# guess where to put the underscores.
+my $seenbitshift;		# Have we seen bitshift operators?
+my $enum_prefix;		# Prefix for this enumeration
+my $enumname;			# Name for this enumeration
+my $enumshort;			# $enumname without prefix
+my $enumname_prefix;		# prefix of $enumname
+my $enumindex = 0;		# Global enum counter
+my $firstenum = 1;		# Is this the first enumeration per file?
+my @entries;			# [ $name, $val ] for each entry
+
+sub parse_trigraph {
+    my $opts = shift;
+    my @opts;
+
+    for $opt (split /\s*,\s*/, $opts) {
+	$opt =~ s/^\s*//;
+	$opt =~ s/\s*$//;
+        my ($key,$val) = $opt =~ /(\w+)(?:=(.+))?/;
+	defined $val or $val = 1;
+	push @opts, $key, $val;
+    }
+    @opts;
+}
+sub parse_entries {
+    my $file = shift;
+    my $file_name = shift;
+    my $looking_for_name = 0;
+    
+    while (<$file>) {
+	# read lines until we have no open comments
+	while (m@/\*([^*]|\*(?!/))*$@) {
+	    my $new;
+	    defined ($new = <$file>) || die "Unmatched comment in $ARGV";
+	    $_ .= $new;
+	}
+	# strip comments w/o options
+	s@/\*(?!<)
+	    ([^*]+|\*(?!/))*
+	   \*/@@gx;
+	
+	# strip newlines
+	s@\n@ @;
+	
+	# skip empty lines
+	next if m@^\s*$@;
+	
+	if ($looking_for_name) {
+	    if (/^\s*(\w+)/) {
+		$enumname = $1;
+		return 1;
+	    }
+	}
+	
+	# Handle include files
+	if (/^\#include\s*<([^>]*)>/ ) {
+            my $file= "../$1";
+	    open NEWFILE, $file or die "Cannot open include file $file: $!\n";
+	    
+	    if (parse_entries (\*NEWFILE, $NEWFILE)) {
+		return 1;
+	    } else {
+		next;
+	    }
+	}
+	
+	if (/^\s*\}\s*(\w+)/) {
+	    $enumname = $1;
+	    $enumindex++;
+	    return 1;
+	}
+	
+	if (/^\s*\}/) {
+	    $enumindex++;
+	    $looking_for_name = 1;
+	    next;
+	}
+
+        if (m@^\s*
+              (\w+)\s*                   # name
+              (?:=(                      # value
+		   \s*\w+\s*\(.*\)\s*       # macro with multiple args
+		   |                        # OR
+                   (?:[^,/]|/(?!\*))*       # anything but a comma or comment
+                  ))?,?\s*
+              (?:/\*<                    # options
+                (([^*]|\*(?!/))*)
+               >\s*\*/)?,?
+              \s*$
+             @x) {
+            my ($name, $value, $options) = ($1,$2,$3);
+
+	    if (!defined $flags && defined $value && $value =~ /<</) {
+		$seenbitshift = 1;
+	    }
+
+	    if (defined $options) {
+		my %options = parse_trigraph($options);
+		if (!defined $options{skip}) {
+		    push @entries, [ $name, $options{nick} ];
+		}
+	    } else {
+		push @entries, [ $name ];
+	    }
+	} elsif (m@^\s*\#@) {
+	    # ignore preprocessor directives
+	} else {
+	    print STDERR "$0: $file_name:$.: Failed to parse `$_'\n";
+	}
+    }
+
+    return 0;
+}
+
+sub version {
+    print "glib-mkenums version glib-@GLIB_VERSION@\n";
+    print "glib-mkenums comes with ABSOLUTELY NO WARRANTY.\n";
+    print "You may redistribute copies of glib-mkenums under the terms of\n";
+    print "the GNU General Public License which can be found in the\n";
+    print "GLib source package. Sources, examples and contact\n";
+    print "information are available at http://www.gtk.org\n";
+    exit 0;
+}
+sub usage {
+    print "Usage:\n";
+    print "  glib-mkenums [OPTION...] [FILES...]\n\n";
+    print "Help Options:\n";
+    print "  -h, --help            Show this help message\n\n";
+    print "Utility Options:\n";
+    print "  --fhead <text>        Output file header\n";
+    print "  --fprod <text>        Per input file production\n";
+    print "  --ftail <text>        Output file trailer\n";
+    print "  --eprod <text>        Per enum text (produced prior to value itarations)\n";
+    print "  --vhead <text>        Value header, produced before iterating over enum values\n";
+    print "  --vprod <text>        Value text, produced for each enum value\n";
+    print "  --vtail <text>        Value tail, produced after iterating over enum values\n";
+    print "  --comments <text>     Comment structure\n";
+    print "  --template file       Template file\n";
+    print "  -v, --version         Print version informations\n\n";
+    print "Production text substitutions:\n";
+    print "  \@EnumName\@            PrefixTheXEnum\n";
+    print "  \@enum_name\@           prefix_the_xenum\n";
+    print "  \@ENUMNAME\@            PREFIX_THE_XENUM\n";
+    print "  \@ENUMSHORT\@           THE_XENUM\n";
+    print "  \@ENUMPREFIX\@          PREFIX\n";
+    print "  \@VALUENAME\@           PREFIX_THE_XVALUE\n";
+    print "  \@valuenick\@           the-xvalue\n";
+    print "  \@type\@                either enum or flags\n";
+    print "  \@Type\@                either Enum or Flags\n";
+    print "  \@TYPE\@                either ENUM or FLAGS\n";
+    print "  \@filename\@            name of current input file\n";
+    exit 0;
+}
+
+# production variables:
+my $fhead = "";   # output file header
+my $fprod = "";   # per input file production
+my $ftail = "";   # output file trailer
+my $eprod = "";   # per enum text (produced prior to value itarations)
+my $vhead = "";   # value header, produced before iterating over enum values
+my $vprod = "";   # value text, produced for each enum value
+my $vtail = "";   # value tail, produced after iterating over enum values
+# other options
+my $comment_tmpl = "/* \@comment\@ */";
+
+sub read_template_file {
+  my ($file) = @_;
+  my %tmpl = ('file-header', $fhead, 
+	      'file-production', $fprod, 
+	      'file-tail', $ftail, 
+	      'enumeration-production', $eprod,
+	      'value-header', $vhead,
+	      'value-production', $vprod,
+	      'value-tail', $vtail,
+	      'comment', $comment_tmpl);
+  my $in = 'junk';
+  open (FILE, $file) || die "Can't open $file: $!\n";
+  while (<FILE>) {
+    if (/^\/\*\*\*\s+(BEGIN|END)\s+([\w-]+)\s+\*\*\*\//) {
+      if (($in eq 'junk') && ($1 eq 'BEGIN') && (exists($tmpl{$2}))) {
+	$in = $2;
+	next;
+      }
+      elsif (($in eq $2) && ($1 eq 'END') && (exists($tmpl{$2}))) {
+	$in = 'junk';
+	next;
+      } else {
+	  die "Malformed template file $file\n";
+      }
+    }
+    if (!($in eq 'junk')) {
+	$tmpl{$in} .= $_;
+    }
+  }
+  close (FILE);
+  if (!($in eq 'junk')) {
+      die "Malformed template file $file\n";
+  }
+  $fhead = $tmpl{'file-header'};
+  $fprod = $tmpl{'file-production'};
+  $ftail = $tmpl{'file-tail'};
+  $eprod = $tmpl{'enumeration-production'};
+  $vhead = $tmpl{'value-header'};
+  $vprod = $tmpl{'value-production'};
+  $vtail = $tmpl{'value-tail'};
+  $comment_tmpl = $tmpl{'comment'};
+}
+
+if (!defined $ARGV[0]) {
+    usage;
+}
+while ($_=$ARGV[0],/^-/) {
+    shift;
+    last if /^--$/;
+    if (/^--template$/)                      { read_template_file (shift); }
+    elsif (/^--fhead$/)                      { $fhead = $fhead . shift }
+    elsif (/^--fprod$/)                      { $fprod = $fprod . shift }
+    elsif (/^--ftail$/)                      { $ftail = $ftail . shift }
+    elsif (/^--eprod$/)                      { $eprod = $eprod . shift }
+    elsif (/^--vhead$/)                      { $vhead = $vhead . shift }
+    elsif (/^--vprod$/)                      { $vprod = $vprod . shift }
+    elsif (/^--vtail$/)                      { $vtail = $vtail . shift }
+    elsif (/^--comments$/)                   { $comment_tmpl = shift }
+    elsif (/^--help$/ || /^-h$/ || /^-h$/)   { usage; }
+    elsif (/^--version$/ || /^-v$/)          { version; }
+    else { usage; }
+    last if not defined($ARGV[0]);
+}
+
+# put auto-generation comment
+{
+    my $comment = $comment_tmpl;
+    $comment =~ s/\@comment\@/Generated data (by glib-mkenums)/;
+    print "\n" . $comment . "\n\n";
+}
+
+if (length($fhead)) {
+    my $prod = $fhead;
+
+    $prod =~ s/\@filename\@/$ARGV[0]/g;
+    $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+    $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+    chomp ($prod);
+		
+    print "$prod\n";
+}
+
+while (<>) {
+    if (eof) {
+	close (ARGV);		# reset line numbering
+	$firstenum = 1;		# Flag to print filename at next enum
+    }
+
+    # read lines until we have no open comments
+    while (m@/\*([^*]|\*(?!/))*$@) {
+	my $new;
+	defined ($new = <>) || die "Unmatched comment in $ARGV";
+	$_ .= $new;
+    }
+    # strip comments w/o options
+    s@/\*(?!<)
+       ([^*]+|\*(?!/))*
+       \*/@@gx;
+	
+    if (m@^\s*typedef\s+enum\s*
+           ({)?\s*
+           (?:/\*<
+             (([^*]|\*(?!/))*)
+            >\s*\*/)?
+           \s*({)?
+         @x) {
+	if (defined $2) {
+	    my %options = parse_trigraph ($2);
+	    next if defined $options{skip};
+	    $enum_prefix = $options{prefix};
+	    $flags = $options{flags};
+	    $option_lowercase_name = $options{lowercase_name};
+	    $option_underscore_name = $options{underscore_name};
+	} else {
+	    $enum_prefix = undef;
+	    $flags = undef;
+	    $option_lowercase_name = undef;
+	    $option_underscore_name = undef;
+	}
+	if (defined $option_lowercase_name) {
+	    if (defined $option_underscore_name) {
+		print STDERR "$0: $ARGV:$.: lowercase_name overriden with underscore_name\n";
+		$option_lowercase_name = undef;
+	    } else {
+		print STDERR "$0: $ARGV:$.: lowercase_name is deprecated, use underscore_name\n";
+	    }
+	}
+	# Didn't have trailing '{' look on next lines
+	if (!defined $1 && !defined $4) {
+	    while (<>) {
+		if (s/^\s*\{//) {
+		    last;
+		}
+	    }
+	}
+
+	$seenbitshift = 0;
+	@entries = ();
+
+	# Now parse the entries
+	parse_entries (\*ARGV, $ARGV);
+
+	# figure out if this was a flags or enums enumeration
+	if (!defined $flags) {
+	    $flags = $seenbitshift;
+	}
+
+	# Autogenerate a prefix
+	if (!defined $enum_prefix) {
+	    for (@entries) {
+		my $nick = $_->[1];
+		if (!defined $nick) {
+		    my $name = $_->[0];
+		    if (defined $enum_prefix) {
+			my $tmp = ~ ($name ^ $enum_prefix);
+			($tmp) = $tmp =~ /(^\xff*)/;
+			$enum_prefix = $enum_prefix & $tmp;
+		    } else {
+			$enum_prefix = $name;
+		    }
+		}
+	    }
+	    if (!defined $enum_prefix) {
+		$enum_prefix = "";
+	    } else {
+		# Trim so that it ends in an underscore
+		$enum_prefix =~ s/_[^_]*$/_/;
+	    }
+	} else {
+	    # canonicalize user defined prefixes
+	    $enum_prefix = uc($enum_prefix);
+	    $enum_prefix =~ s/-/_/g;
+	    $enum_prefix =~ s/(.*)([^_])$/$1$2_/;
+	}
+	
+	for $entry (@entries) {
+	    my ($name,$nick) = @{$entry};
+            if (!defined $nick) {
+ 	        ($nick = $name) =~ s/^$enum_prefix//;
+	        $nick =~ tr/_/-/;
+	        $nick = lc($nick);
+	        @{$entry} = ($name, $nick);
+            }
+	}
+	
+
+	# Spit out the output
+	if (defined $option_underscore_name) {
+	    $enumlong = uc $option_underscore_name;
+	    $enumsym = lc $option_underscore_name;
+	    $enumshort = $enumlong;
+	    $enumshort =~ s/^[A-Z][A-Z0-9]*_//;
+
+	    $enumname_prefix = $enumlong;
+	    $enumname_prefix =~ s/$enumshort$//;
+	} else {
+	    # enumname is e.g. GMatchType
+	    $enspace = $enumname;
+	    $enspace =~ s/^([A-Z][a-z]*).*$/$1/;
+
+	    $enumshort = $enumname;
+	    $enumshort =~ s/^[A-Z][a-z]*//;
+	    $enumshort =~ s/([^A-Z])([A-Z])/$1_$2/g;
+	    $enumshort =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
+	    $enumshort = uc($enumshort);
+
+	    $enumname_prefix = $enumname;
+	    $enumname_prefix =~ s/^([A-Z][a-z]*).*$/$1/;
+	    $enumname_prefix = uc($enumname_prefix);
+
+	    $enumlong = uc($enspace) . "_" . $enumshort;
+	    $enumsym = lc($enspace) . "_" . lc($enumshort);
+
+	    if (defined($option_lowercase_name)) {
+		$enumsym = $option_lowercase_name;
+	    }
+	}
+
+	if ($firstenum) {
+	    $firstenum = 0;
+	    
+	    if (length($fprod)) {
+		my $prod = $fprod;
+
+		$prod =~ s/\@filename\@/$ARGV/g;
+		$prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+		$prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+	        chomp ($prod);
+		
+		print "$prod\n";
+	    }
+	}
+	
+	if (length($eprod)) {
+	    my $prod = $eprod;
+
+	    $prod =~ s/\@enum_name\@/$enumsym/g;
+	    $prod =~ s/\@EnumName\@/$enumname/g;
+	    $prod =~ s/\@ENUMSHORT\@/$enumshort/g;
+	    $prod =~ s/\@ENUMNAME\@/$enumlong/g;
+	    $prod =~ s/\@ENUMPREFIX\@/$enumname_prefix/g;
+	    if ($flags) { $prod =~ s/\@type\@/flags/g; } else { $prod =~ s/\@type\@/enum/g; }
+	    if ($flags) { $prod =~ s/\@Type\@/Flags/g; } else { $prod =~ s/\@Type\@/Enum/g; }
+	    if ($flags) { $prod =~ s/\@TYPE\@/FLAGS/g; } else { $prod =~ s/\@TYPE\@/ENUM/g; }
+	    $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+	    $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+            chomp ($prod);
+
+	    print "$prod\n";
+	}
+
+	if (length($vhead)) {
+	    my $prod = $vhead;
+
+	    $prod =~ s/\@enum_name\@/$enumsym/g;
+            $prod =~ s/\@EnumName\@/$enumname/g;
+            $prod =~ s/\@ENUMSHORT\@/$enumshort/g;
+            $prod =~ s/\@ENUMNAME\@/$enumlong/g;
+	    $prod =~ s/\@ENUMPREFIX\@/$enumname_prefix/g;
+	    if ($flags) { $prod =~ s/\@type\@/flags/g; } else { $prod =~ s/\@type\@/enum/g; }
+	    if ($flags) { $prod =~ s/\@Type\@/Flags/g; } else { $prod =~ s/\@Type\@/Enum/g; }
+	    if ($flags) { $prod =~ s/\@TYPE\@/FLAGS/g; } else { $prod =~ s/\@TYPE\@/ENUM/g; }
+            $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+            $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+            chomp ($prod);
+	    
+            print "$prod\n";
+	}
+
+	if (length($vprod)) {
+	    my $prod = $vprod;
+	    
+	    $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+	    $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+	    for (@entries) {
+		my ($name,$nick) = @{$_};
+		my $tmp_prod = $prod;
+
+		$tmp_prod =~ s/\@VALUENAME\@/$name/g;
+		$tmp_prod =~ s/\@valuenick\@/$nick/g;
+		if ($flags) { $tmp_prod =~ s/\@type\@/flags/g; } else { $tmp_prod =~ s/\@type\@/enum/g; }
+		if ($flags) { $tmp_prod =~ s/\@Type\@/Flags/g; } else { $tmp_prod =~ s/\@Type\@/Enum/g; }
+		if ($flags) { $tmp_prod =~ s/\@TYPE\@/FLAGS/g; } else { $tmp_prod =~ s/\@TYPE\@/ENUM/g; }
+		chomp ($tmp_prod);
+
+		print "$tmp_prod\n";
+	    }
+	}
+
+	if (length($vtail)) {
+	    my $prod = $vtail;
+
+	    $prod =~ s/\@enum_name\@/$enumsym/g;
+            $prod =~ s/\@EnumName\@/$enumname/g;
+            $prod =~ s/\@ENUMSHORT\@/$enumshort/g;
+            $prod =~ s/\@ENUMNAME\@/$enumlong/g;
+	    $prod =~ s/\@ENUMPREFIX\@/$enumname_prefix/g;
+	    if ($flags) { $prod =~ s/\@type\@/flags/g; } else { $prod =~ s/\@type\@/enum/g; }
+	    if ($flags) { $prod =~ s/\@Type\@/Flags/g; } else { $prod =~ s/\@Type\@/Enum/g; }
+	    if ($flags) { $prod =~ s/\@TYPE\@/FLAGS/g; } else { $prod =~ s/\@TYPE\@/ENUM/g; }
+            $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+            $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+            chomp ($prod);
+	    
+            print "$prod\n";
+	}
+    }
+}
+
+if (length($ftail)) {
+    my $prod = $ftail;
+
+    $prod =~ s/\@filename\@/$ARGV/g;
+    $prod =~ s/\\a/\a/g; $prod =~ s/\\b/\b/g; $prod =~ s/\\t/\t/g; $prod =~ s/\\n/\n/g;
+    $prod =~ s/\\f/\f/g; $prod =~ s/\\r/\r/g;
+    chomp ($prod);
+		
+    print "$prod\n";
+}
+
+# put auto-generation comment
+{
+    my $comment = $comment_tmpl;
+    $comment =~ s/\@comment\@/Generated data ends here/;
+    print "\n" . $comment . "\n\n";
+}
diff --git a/gobject/gmarshal.list b/gobject/gmarshal.list
new file mode 100644
index 0000000..f3844a1
--- /dev/null
+++ b/gobject/gmarshal.list
@@ -0,0 +1,47 @@
+# see glib-genmarshal(1) for a detailed description of the file format,
+# possible parameter types are:
+#   VOID        indicates   no   return   type,  or  no  extra
+#               parameters. if VOID is used as  the  parameter
+#               list, no additional parameters may be present.
+#   BOOLEAN     for boolean types (gboolean)
+#   CHAR        for signed char types (gchar)
+#   UCHAR       for unsigned char types (guchar)
+#   INT         for signed integer types (gint)
+#   UINT        for unsigned integer types (guint)
+#   LONG        for signed long integer types (glong)
+#   ULONG       for unsigned long integer types (gulong)
+#   ENUM        for enumeration types (gint)
+#   FLAGS       for flag enumeration types (guint)
+#   FLOAT       for single-precision float types (gfloat)
+#   DOUBLE      for double-precision float types (gdouble)
+#   STRING      for string types (gchar*)
+#   PARAM       for GParamSpec or derived types  (GParamSpec*)
+#   BOXED       for boxed (anonymous but reference counted) types (GBoxed*)
+#   POINTER     for anonymous pointer types (gpointer)
+#   OBJECT      for GObject or derived types (GObject*)
+#   NONE        deprecated alias for VOID
+#   BOOL        deprecated alias for BOOLEAN
+
+# standard VOID return marshallers
+VOID:VOID
+VOID:BOOLEAN
+VOID:CHAR
+VOID:UCHAR
+VOID:INT
+VOID:UINT
+VOID:LONG
+VOID:ULONG
+VOID:ENUM
+VOID:FLAGS
+VOID:FLOAT
+VOID:DOUBLE
+VOID:STRING
+VOID:PARAM
+VOID:BOXED
+VOID:POINTER
+VOID:OBJECT
+
+# GRuntime specific marshallers
+VOID:UINT,POINTER
+BOOL:FLAGS
+STRING:OBJECT,POINTER
diff --git a/gobject/gobject-query.c b/gobject/gobject-query.c
new file mode 100644
index 0000000..7f208ed
--- /dev/null
+++ b/gobject/gobject-query.c
@@ -0,0 +1,230 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <glib-object.h>
+#include <glib/gprintf.h>
+
+
+static gchar *indent_inc = NULL;
+static guint spacing = 1;
+static FILE *f_out = NULL;
+static GType root = 0;
+static gboolean recursion = TRUE;
+
+#if 0
+#  define	O_SPACE	"\\as"
+#  define	O_ESPACE " "
+#  define	O_BRANCH "\\aE"
+#  define	O_VLINE "\\al"
+#  define	O_LLEAF	"\\aL"
+#  define	O_KEY_FILL "_"
+#else
+#  define	O_SPACE	" "
+#  define	O_ESPACE ""
+#  define	O_BRANCH "+"
+#  define	O_VLINE "|"
+#  define	O_LLEAF	"`"
+#  define	O_KEY_FILL "_"
+#endif
+
+static void
+show_nodes (GType        type,
+	    GType        sibling,
+	    const gchar *indent)
+{
+  GType   *children;
+  guint i;
+  
+  if (!type)
+    return;
+  
+  children = g_type_children (type, NULL);
+  
+  if (type != root)
+    for (i = 0; i < spacing; i++)
+      g_fprintf (f_out, "%s%s\n", indent, O_VLINE);
+  
+  g_fprintf (f_out, "%s%s%s%s",
+	   indent,
+	   sibling ? O_BRANCH : (type != root ? O_LLEAF : O_SPACE),
+	   O_ESPACE,
+	   g_type_name (type));
+  
+  for (i = strlen (g_type_name (type)); i <= strlen (indent_inc); i++)
+    fputs (O_KEY_FILL, f_out);
+  
+  fputc ('\n', f_out);
+  
+  if (children && recursion)
+    {
+      gchar *new_indent;
+      GType   *child;
+      
+      if (sibling)
+	new_indent = g_strconcat (indent, O_VLINE, indent_inc, NULL);
+      else
+	new_indent = g_strconcat (indent, O_SPACE, indent_inc, NULL);
+      
+      for (child = children; *child; child++)
+	show_nodes (child[0], child[1], new_indent);
+      
+      g_free (new_indent);
+    }
+  
+  g_free (children);
+}
+
+static gint
+help (gchar *arg)
+{
+  g_fprintf (stderr, "usage: gobject-query <qualifier> [-r <type>] [-{i|b} \"\"] [-s #] [-{h|x|y}]\n");
+  g_fprintf (stderr, "       -r       specifiy root type\n");
+  g_fprintf (stderr, "       -n       don't descend type tree\n");
+  g_fprintf (stderr, "       -h       guess what ;)\n");
+  g_fprintf (stderr, "       -b       specify indent string\n");
+  g_fprintf (stderr, "       -i       specify incremental indent string\n");
+  g_fprintf (stderr, "       -s       specify line spacing\n");
+  g_fprintf (stderr, "qualifiers:\n");
+  g_fprintf (stderr, "       froots   iterate over fundamental roots\n");
+  g_fprintf (stderr, "       tree     print type tree\n");
+  
+  return arg != NULL;
+}
+
+int
+main (gint   argc,
+      gchar *argv[])
+{
+  GLogLevelFlags fatal_mask;
+  gboolean gen_froots = 0;
+  gboolean gen_tree = 0;
+  gint i;
+  gchar *iindent = "";
+
+  f_out = stdout;
+  
+  fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+  fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+  g_log_set_always_fatal (fatal_mask);
+  
+  root = G_TYPE_OBJECT;
+
+  g_type_init ();
+  
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp ("-s", argv[i]) == 0)
+	{
+	  i++;
+	  if (i < argc)
+	    spacing = atoi (argv[i]);
+	}
+      else if (strcmp ("-i", argv[i]) == 0)
+	{
+	  i++;
+	  if (i < argc)
+	    {
+	      char *p;
+	      guint n;
+	      
+	      p = argv[i];
+	      while (*p)
+		p++;
+	      n = p - argv[i];
+	      indent_inc = g_new (gchar, n * strlen (O_SPACE) + 1);
+	      *indent_inc = 0;
+	      while (n)
+		{
+		  n--;
+		  strcpy (indent_inc, O_SPACE);
+		}
+	    }
+	}
+      else if (strcmp ("-b", argv[i]) == 0)
+	{
+	  i++;
+	  if (i < argc)
+	    iindent = argv[i];
+	}
+      else if (strcmp ("-r", argv[i]) == 0)
+	{
+	  i++;
+	  if (i < argc)
+	    root = g_type_from_name (argv[i]);
+	}
+      else if (strcmp ("-n", argv[i]) == 0)
+	{
+	  recursion = FALSE;
+	}
+      else if (strcmp ("froots", argv[i]) == 0)
+	{
+	  gen_froots = 1;
+	}
+      else if (strcmp ("tree", argv[i]) == 0)
+	{
+	  gen_tree = 1;
+	}
+      else if (strcmp ("-h", argv[i]) == 0)
+	{
+	  return help (NULL);
+	}
+      else if (strcmp ("--help", argv[i]) == 0)
+	{
+	  return help (NULL);
+	}
+      else
+	return help (argv[i]);
+    }
+  
+  if (!gen_froots && !gen_tree)
+    return help (argv[i-1]);
+  
+  if (!indent_inc)
+    {
+      indent_inc = g_new (gchar, strlen (O_SPACE) + 1);
+      *indent_inc = 0;
+      strcpy (indent_inc, O_SPACE);
+    }
+  
+  if (gen_tree)
+    show_nodes (root, 0, iindent);
+  if (gen_froots)
+    {
+      root = ~0;
+      for (i = 0; i <= G_TYPE_FUNDAMENTAL_MAX; i += G_TYPE_MAKE_FUNDAMENTAL (1))
+	{
+	  const gchar *name = g_type_name (i);
+	  
+	  if (name)
+	    show_nodes (i, 0, iindent);
+	}
+    }
+  
+  return 0;
+}
diff --git a/gobject/gobject.c b/gobject/gobject.c
new file mode 100644
index 0000000..454d8c2
--- /dev/null
+++ b/gobject/gobject.c
@@ -0,0 +1,3168 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe with regards to reference counting.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <signal.h>
+
+#include "glib/gdatasetprivate.h"
+
+#include "gobject.h"
+#include "gvaluecollector.h"
+#include "gsignal.h"
+#include "gparamspecs.h"
+#include "gvaluetypes.h"
+#include "gobjectalias.h"
+
+/* This should be included after gobjectalias.h (or pltcheck.sh will fail) */
+#include "gobjectnotifyqueue.c"
+
+
+/**
+ * SECTION:objects
+ * @short_description: The base object type
+ * @see_also: #GParamSpecObject, g_param_spec_object()
+ * @title: The Base Object Type
+ *
+ * GObject is the fundamental type providing the common attributes and
+ * methods for all object types in GTK+, Pango and other libraries
+ * based on GObject.  The GObject class provides methods for object
+ * construction and destruction, property access methods, and signal
+ * support.  Signals are described in detail in <xref
+ * linkend="gobject-Signals"/>.
+ *
+ * <para id="floating-ref">
+ * #GInitiallyUnowned is derived from #GObject. The only difference between
+ * the two is that the initial reference of a #GInitiallyUnowned is flagged
+ * as a <firstterm>floating</firstterm> reference.
+ * This means that it is not specifically claimed to be "owned" by
+ * any code portion. The main motivation for providing floating references is
+ * C convenience. In particular, it allows code to be written as:
+ * |[
+ * container = create_container();
+ * container_add_child (container, create_child());
+ * ]|
+ * If <function>container_add_child()</function> will g_object_ref_sink() the
+ * passed in child, no reference of the newly created child is leaked.
+ * Without floating references, <function>container_add_child()</function>
+ * can only g_object_ref() the new child, so to implement this code without
+ * reference leaks, it would have to be written as:
+ * |[
+ * Child *child;
+ * container = create_container();
+ * child = create_child();
+ * container_add_child (container, child);
+ * g_object_unref (child);
+ * ]|
+ * The floating reference can be converted into
+ * an ordinary reference by calling g_object_ref_sink().
+ * For already sunken objects (objects that don't have a floating reference
+ * anymore), g_object_ref_sink() is equivalent to g_object_ref() and returns
+ * a new reference.
+ * Since floating references are useful almost exclusively for C convenience,
+ * language bindings that provide automated reference and memory ownership
+ * maintenance (such as smart pointers or garbage collection) therefore don't
+ * need to expose floating references in their API.
+ * </para>
+ *
+ * Some object implementations may need to save an objects floating state
+ * across certain code portions (an example is #GtkMenu), to achive this, the
+ * following sequence can be used:
+ *
+ * |[
+ * // save floating state
+ * gboolean was_floating = g_object_is_floating (object);
+ * g_object_ref_sink (object);
+ * // protected code portion
+ * ...;
+ * // restore floating state
+ * if (was_floating)
+ *   g_object_force_floating (object);
+ * g_obejct_unref (object); // release previously acquired reference
+ * ]|
+ */
+
+
+/* --- macros --- */
+#define PARAM_SPEC_PARAM_ID(pspec)		((pspec)->param_id)
+#define	PARAM_SPEC_SET_PARAM_ID(pspec, id)	((pspec)->param_id = (id))
+
+#define OBJECT_HAS_TOGGLE_REF_FLAG 0x1
+#define OBJECT_HAS_TOGGLE_REF(object) \
+    ((G_DATALIST_GET_FLAGS (&(object)->qdata) & OBJECT_HAS_TOGGLE_REF_FLAG) != 0)
+#define OBJECT_FLOATING_FLAG 0x2
+
+
+/* --- signals --- */
+enum {
+  NOTIFY,
+  LAST_SIGNAL
+};
+
+
+/* --- properties --- */
+enum {
+  PROP_NONE
+};
+
+
+/* --- prototypes --- */
+static void	g_object_base_class_init		(GObjectClass	*class);
+static void	g_object_base_class_finalize		(GObjectClass	*class);
+static void	g_object_do_class_init			(GObjectClass	*class);
+static void	g_object_init				(GObject	*object);
+static GObject*	g_object_constructor			(GType                  type,
+							 guint                  n_construct_properties,
+							 GObjectConstructParam *construct_params);
+static void	g_object_real_dispose			(GObject	*object);
+static void	g_object_finalize			(GObject	*object);
+static void	g_object_do_set_property		(GObject        *object,
+							 guint           property_id,
+							 const GValue   *value,
+							 GParamSpec     *pspec);
+static void	g_object_do_get_property		(GObject        *object,
+							 guint           property_id,
+							 GValue         *value,
+							 GParamSpec     *pspec);
+static void	g_value_object_init			(GValue		*value);
+static void	g_value_object_free_value		(GValue		*value);
+static void	g_value_object_copy_value		(const GValue	*src_value,
+							 GValue		*dest_value);
+static void	g_value_object_transform_value		(const GValue	*src_value,
+							 GValue		*dest_value);
+static gpointer g_value_object_peek_pointer             (const GValue   *value);
+static gchar*	g_value_object_collect_value		(GValue		*value,
+							 guint           n_collect_values,
+							 GTypeCValue    *collect_values,
+							 guint           collect_flags);
+static gchar*	g_value_object_lcopy_value		(const GValue	*value,
+							 guint           n_collect_values,
+							 GTypeCValue    *collect_values,
+							 guint           collect_flags);
+static void	g_object_dispatch_properties_changed	(GObject	*object,
+							 guint		 n_pspecs,
+							 GParamSpec    **pspecs);
+static inline void         object_get_property		(GObject        *object,
+							 GParamSpec     *pspec,
+							 GValue         *value);
+static inline void	   object_set_property		(GObject        *object,
+							 GParamSpec     *pspec,
+							 const GValue   *value,
+							 GObjectNotifyQueue *nqueue);
+static guint               object_floating_flag_handler (GObject        *object,
+                                                         gint            job);
+
+static void object_interface_check_properties           (gpointer        func_data,
+							 gpointer        g_iface);
+
+
+/* --- variables --- */
+static GQuark	            quark_closure_array = 0;
+static GQuark	            quark_weak_refs = 0;
+static GQuark	            quark_toggle_refs = 0;
+static GParamSpecPool      *pspec_pool = NULL;
+static GObjectNotifyContext property_notify_context = { 0, };
+static gulong	            gobject_signals[LAST_SIGNAL] = { 0, };
+static guint (*floating_flag_handler) (GObject*, gint) = object_floating_flag_handler;
+G_LOCK_DEFINE_STATIC (construction_mutex);
+static GSList *construction_objects = NULL;
+
+/* --- functions --- */
+#ifdef	G_ENABLE_DEBUG
+#define	IF_DEBUG(debug_type)	if (_g_type_debug_flags & G_TYPE_DEBUG_ ## debug_type)
+G_LOCK_DEFINE_STATIC     (debug_objects);
+static volatile GObject *g_trap_object_ref = NULL;
+static guint		 debug_objects_count = 0;
+static GHashTable	*debug_objects_ht = NULL;
+
+static void
+debug_objects_foreach (gpointer key,
+		       gpointer value,
+		       gpointer user_data)
+{
+  GObject *object = value;
+
+  g_message ("[%p] stale %s\tref_count=%u",
+	     object,
+	     G_OBJECT_TYPE_NAME (object),
+	     object->ref_count);
+}
+
+static void
+debug_objects_atexit (void)
+{
+  IF_DEBUG (OBJECTS)
+    {
+      G_LOCK (debug_objects);
+      g_message ("stale GObjects: %u", debug_objects_count);
+      g_hash_table_foreach (debug_objects_ht, debug_objects_foreach, NULL);
+      G_UNLOCK (debug_objects);
+    }
+}
+#endif	/* G_ENABLE_DEBUG */
+
+void
+g_object_type_init (void)
+{
+  static gboolean initialized = FALSE;
+  static const GTypeFundamentalInfo finfo = {
+    G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE,
+  };
+  static GTypeInfo info = {
+    sizeof (GObjectClass),
+    (GBaseInitFunc) g_object_base_class_init,
+    (GBaseFinalizeFunc) g_object_base_class_finalize,
+    (GClassInitFunc) g_object_do_class_init,
+    NULL	/* class_destroy */,
+    NULL	/* class_data */,
+    sizeof (GObject),
+    0		/* n_preallocs */,
+    (GInstanceInitFunc) g_object_init,
+    NULL,	/* value_table */
+  };
+  static const GTypeValueTable value_table = {
+    g_value_object_init,	  /* value_init */
+    g_value_object_free_value,	  /* value_free */
+    g_value_object_copy_value,	  /* value_copy */
+    g_value_object_peek_pointer,  /* value_peek_pointer */
+    "p",			  /* collect_format */
+    g_value_object_collect_value, /* collect_value */
+    "p",			  /* lcopy_format */
+    g_value_object_lcopy_value,	  /* lcopy_value */
+  };
+  GType type;
+  
+  g_return_if_fail (initialized == FALSE);
+  initialized = TRUE;
+  
+  /* G_TYPE_OBJECT
+   */
+  info.value_table = &value_table;
+  type = g_type_register_fundamental (G_TYPE_OBJECT, g_intern_static_string ("GObject"), &info, &finfo, 0);
+  g_assert (type == G_TYPE_OBJECT);
+  g_value_register_transform_func (G_TYPE_OBJECT, G_TYPE_OBJECT, g_value_object_transform_value);
+  
+#ifdef	G_ENABLE_DEBUG
+  IF_DEBUG (OBJECTS)
+    {
+      debug_objects_ht = g_hash_table_new (g_direct_hash, NULL);
+      g_atexit (debug_objects_atexit);
+    }
+#endif	/* G_ENABLE_DEBUG */
+}
+
+static void
+g_object_base_class_init (GObjectClass *class)
+{
+  GObjectClass *pclass = g_type_class_peek_parent (class);
+
+  /* reset instance specific fields and methods that don't get inherited */
+  class->construct_properties = pclass ? g_slist_copy (pclass->construct_properties) : NULL;
+  class->get_property = NULL;
+  class->set_property = NULL;
+}
+
+static void
+g_object_base_class_finalize (GObjectClass *class)
+{
+  GList *list, *node;
+  
+  _g_signals_destroy (G_OBJECT_CLASS_TYPE (class));
+
+  g_slist_free (class->construct_properties);
+  class->construct_properties = NULL;
+  list = g_param_spec_pool_list_owned (pspec_pool, G_OBJECT_CLASS_TYPE (class));
+  for (node = list; node; node = node->next)
+    {
+      GParamSpec *pspec = node->data;
+      
+      g_param_spec_pool_remove (pspec_pool, pspec);
+      PARAM_SPEC_SET_PARAM_ID (pspec, 0);
+      g_param_spec_unref (pspec);
+    }
+  g_list_free (list);
+}
+
+static void
+g_object_notify_dispatcher (GObject     *object,
+			    guint        n_pspecs,
+			    GParamSpec **pspecs)
+{
+  G_OBJECT_GET_CLASS (object)->dispatch_properties_changed (object, n_pspecs, pspecs);
+}
+
+static void
+g_object_do_class_init (GObjectClass *class)
+{
+  /* read the comment about typedef struct CArray; on why not to change this quark */
+  quark_closure_array = g_quark_from_static_string ("GObject-closure-array");
+
+  quark_weak_refs = g_quark_from_static_string ("GObject-weak-references");
+  quark_toggle_refs = g_quark_from_static_string ("GObject-toggle-references");
+  pspec_pool = g_param_spec_pool_new (TRUE);
+  property_notify_context.quark_notify_queue = g_quark_from_static_string ("GObject-notify-queue");
+  property_notify_context.dispatcher = g_object_notify_dispatcher;
+  
+  class->constructor = g_object_constructor;
+  class->set_property = g_object_do_set_property;
+  class->get_property = g_object_do_get_property;
+  class->dispose = g_object_real_dispose;
+  class->finalize = g_object_finalize;
+  class->dispatch_properties_changed = g_object_dispatch_properties_changed;
+  class->notify = NULL;
+
+  /**
+   * GObject::notify:
+   * @gobject: the object which received the signal.
+   * @pspec: the #GParamSpec of the property which changed.
+   *
+   * The notify signal is emitted on an object when one of its
+   * properties has been changed. Note that getting this signal
+   * doesn't guarantee that the value of the property has actually
+   * changed, it may also be emitted when the setter for the property
+   * is called to reinstate the previous value.
+   *
+   * This signal is typically used to obtain change notification for a
+   * single property, by specifying the property name as a detail in the
+   * g_signal_connect() call, like this:
+   * |[
+   * g_signal_connect (text_view->buffer, "notify::paste-target-list",
+   *                   G_CALLBACK (gtk_text_view_target_list_notify),
+   *                   text_view)
+   * ]|
+   * It is important to note that you must use
+   * <link linkend="canonical-parameter-name">canonical</link> parameter names as
+   * detail strings for the notify signal.
+   */
+  gobject_signals[NOTIFY] =
+    g_signal_new (g_intern_static_string ("notify"),
+		  G_TYPE_FROM_CLASS (class),
+		  G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED | G_SIGNAL_NO_HOOKS | G_SIGNAL_ACTION,
+		  G_STRUCT_OFFSET (GObjectClass, notify),
+		  NULL, NULL,
+		  g_cclosure_marshal_VOID__PARAM,
+		  G_TYPE_NONE,
+		  1, G_TYPE_PARAM);
+
+  /* Install a check function that we'll use to verify that classes that
+   * implement an interface implement all properties for that interface
+   */
+  g_type_add_interface_check (NULL, object_interface_check_properties);
+}
+
+static void
+install_property_internal (GType       g_type,
+			   guint       property_id,
+			   GParamSpec *pspec)
+{
+  if (g_param_spec_pool_lookup (pspec_pool, pspec->name, g_type, FALSE))
+    {
+      g_warning ("When installing property: type `%s' already has a property named `%s'",
+		 g_type_name (g_type),
+		 pspec->name);
+      return;
+    }
+
+  g_param_spec_ref (pspec);
+  g_param_spec_sink (pspec);
+  PARAM_SPEC_SET_PARAM_ID (pspec, property_id);
+  g_param_spec_pool_insert (pspec_pool, pspec, g_type);
+}
+
+/**
+ * g_object_class_install_property:
+ * @oclass: a #GObjectClass
+ * @property_id: the id for the new property
+ * @pspec: the #GParamSpec for the new property
+ *
+ * Installs a new property. This is usually done in the class initializer.
+ *
+ * Note that it is possible to redefine a property in a derived class,
+ * by installing a property with the same name. This can be useful at times,
+ * e.g. to change the range of allowed values or the default value.
+ */
+void
+g_object_class_install_property (GObjectClass *class,
+				 guint	       property_id,
+				 GParamSpec   *pspec)
+{
+  g_return_if_fail (G_IS_OBJECT_CLASS (class));
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  if (pspec->flags & G_PARAM_WRITABLE)
+    g_return_if_fail (class->set_property != NULL);
+  if (pspec->flags & G_PARAM_READABLE)
+    g_return_if_fail (class->get_property != NULL);
+  g_return_if_fail (property_id > 0);
+  g_return_if_fail (PARAM_SPEC_PARAM_ID (pspec) == 0);	/* paranoid */
+  if (pspec->flags & G_PARAM_CONSTRUCT)
+    g_return_if_fail ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
+  if (pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))
+    g_return_if_fail (pspec->flags & G_PARAM_WRITABLE);
+
+  install_property_internal (G_OBJECT_CLASS_TYPE (class), property_id, pspec);
+
+  if (pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))
+    class->construct_properties = g_slist_prepend (class->construct_properties, pspec);
+
+  /* for property overrides of construct poperties, we have to get rid
+   * of the overidden inherited construct property
+   */
+  pspec = g_param_spec_pool_lookup (pspec_pool, pspec->name, g_type_parent (G_OBJECT_CLASS_TYPE (class)), TRUE);
+  if (pspec && pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))
+    class->construct_properties = g_slist_remove (class->construct_properties, pspec);
+}
+
+/**
+ * g_object_interface_install_property:
+ * @g_iface: any interface vtable for the interface, or the default
+ *  vtable for the interface.
+ * @pspec: the #GParamSpec for the new property
+ *
+ * Add a property to an interface; this is only useful for interfaces
+ * that are added to GObject-derived types. Adding a property to an
+ * interface forces all objects classes with that interface to have a
+ * compatible property. The compatible property could be a newly
+ * created #GParamSpec, but normally
+ * g_object_class_override_property() will be used so that the object
+ * class only needs to provide an implementation and inherits the
+ * property description, default value, bounds, and so forth from the
+ * interface property.
+ *
+ * This function is meant to be called from the interface's default
+ * vtable initialization function (the @class_init member of
+ * #GTypeInfo.) It must not be called after after @class_init has
+ * been called for any object types implementing this interface.
+ *
+ * Since: 2.4
+ */
+void
+g_object_interface_install_property (gpointer      g_iface,
+				     GParamSpec   *pspec)
+{
+  GTypeInterface *iface_class = g_iface;
+	
+  g_return_if_fail (G_TYPE_IS_INTERFACE (iface_class->g_type));
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  g_return_if_fail (!G_IS_PARAM_SPEC_OVERRIDE (pspec)); /* paranoid */
+  g_return_if_fail (PARAM_SPEC_PARAM_ID (pspec) == 0);	/* paranoid */
+		    
+  install_property_internal (iface_class->g_type, 0, pspec);
+}
+
+/**
+ * g_object_class_find_property:
+ * @oclass: a #GObjectClass
+ * @property_name: the name of the property to look up
+ *
+ * Looks up the #GParamSpec for a property of a class.
+ *
+ * Returns: the #GParamSpec for the property, or %NULL if the class
+ *          doesn't have a property of that name
+ */
+GParamSpec*
+g_object_class_find_property (GObjectClass *class,
+			      const gchar  *property_name)
+{
+  GParamSpec *pspec;
+  GParamSpec *redirect;
+	
+  g_return_val_if_fail (G_IS_OBJECT_CLASS (class), NULL);
+  g_return_val_if_fail (property_name != NULL, NULL);
+  
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+				    property_name,
+				    G_OBJECT_CLASS_TYPE (class),
+				    TRUE);
+  if (pspec)
+    {
+      redirect = g_param_spec_get_redirect_target (pspec);
+      if (redirect)
+	return redirect;
+      else
+	return pspec;
+    }
+  else
+    return NULL;
+}
+
+/**
+ * g_object_interface_find_property:
+ * @g_iface: any interface vtable for the interface, or the default
+ *  vtable for the interface
+ * @property_name: name of a property to lookup.
+ *
+ * Find the #GParamSpec with the given name for an
+ * interface. Generally, the interface vtable passed in as @g_iface
+ * will be the default vtable from g_type_default_interface_ref(), or,
+ * if you know the interface has already been loaded,
+ * g_type_default_interface_peek().
+ *
+ * Since: 2.4
+ *
+ * Returns: the #GParamSpec for the property of the interface with the
+ *          name @property_name, or %NULL if no such property exists.
+ */
+GParamSpec*
+g_object_interface_find_property (gpointer      g_iface,
+				  const gchar  *property_name)
+{
+  GTypeInterface *iface_class = g_iface;
+	
+  g_return_val_if_fail (G_TYPE_IS_INTERFACE (iface_class->g_type), NULL);
+  g_return_val_if_fail (property_name != NULL, NULL);
+  
+  return g_param_spec_pool_lookup (pspec_pool,
+				   property_name,
+				   iface_class->g_type,
+				   FALSE);
+}
+
+/**
+ * g_object_class_override_property:
+ * @oclass: a #GObjectClass
+ * @property_id: the new property ID
+ * @name: the name of a property registered in a parent class or
+ *  in an interface of this class.
+ *
+ * Registers @property_id as referring to a property with the
+ * name @name in a parent class or in an interface implemented
+ * by @oclass. This allows this class to <firstterm>override</firstterm>
+ * a property implementation in a parent class or to provide
+ * the implementation of a property from an interface.
+ *
+ * <note>
+ * Internally, overriding is implemented by creating a property of type
+ * #GParamSpecOverride; generally operations that query the properties of
+ * the object class, such as g_object_class_find_property() or
+ * g_object_class_list_properties() will return the overridden
+ * property. However, in one case, the @construct_properties argument of
+ * the @constructor virtual function, the #GParamSpecOverride is passed
+ * instead, so that the @param_id field of the #GParamSpec will be
+ * correct.  For virtually all uses, this makes no difference. If you
+ * need to get the overridden property, you can call
+ * g_param_spec_get_redirect_target().
+ * </note>
+ *
+ * Since: 2.4
+ */
+void
+g_object_class_override_property (GObjectClass *oclass,
+				  guint         property_id,
+				  const gchar  *name)
+{
+  GParamSpec *overridden = NULL;
+  GParamSpec *new;
+  GType parent_type;
+  
+  g_return_if_fail (G_IS_OBJECT_CLASS (oclass));
+  g_return_if_fail (property_id > 0);
+  g_return_if_fail (name != NULL);
+
+  /* Find the overridden property; first check parent types
+   */
+  parent_type = g_type_parent (G_OBJECT_CLASS_TYPE (oclass));
+  if (parent_type != G_TYPE_NONE)
+    overridden = g_param_spec_pool_lookup (pspec_pool,
+					   name,
+					   parent_type,
+					   TRUE);
+  if (!overridden)
+    {
+      GType *ifaces;
+      guint n_ifaces;
+      
+      /* Now check interfaces
+       */
+      ifaces = g_type_interfaces (G_OBJECT_CLASS_TYPE (oclass), &n_ifaces);
+      while (n_ifaces-- && !overridden)
+	{
+	  overridden = g_param_spec_pool_lookup (pspec_pool,
+						 name,
+						 ifaces[n_ifaces],
+						 FALSE);
+	}
+      
+      g_free (ifaces);
+    }
+
+  if (!overridden)
+    {
+      g_warning ("%s: Can't find property to override for '%s::%s'",
+		 G_STRFUNC, G_OBJECT_CLASS_NAME (oclass), name);
+      return;
+    }
+
+  new = g_param_spec_override (name, overridden);
+  g_object_class_install_property (oclass, property_id, new);
+}
+
+/**
+ * g_object_class_list_properties:
+ * @oclass: a #GObjectClass
+ * @n_properties: return location for the length of the returned array
+ *
+ * Get an array of #GParamSpec* for all properties of a class.
+ *
+ * Returns: an array of #GParamSpec* which should be freed after use
+ */
+GParamSpec** /* free result */
+g_object_class_list_properties (GObjectClass *class,
+				guint        *n_properties_p)
+{
+  GParamSpec **pspecs;
+  guint n;
+
+  g_return_val_if_fail (G_IS_OBJECT_CLASS (class), NULL);
+
+  pspecs = g_param_spec_pool_list (pspec_pool,
+				   G_OBJECT_CLASS_TYPE (class),
+				   &n);
+  if (n_properties_p)
+    *n_properties_p = n;
+
+  return pspecs;
+}
+
+/**
+ * g_object_interface_list_properties:
+ * @g_iface: any interface vtable for the interface, or the default
+ *  vtable for the interface
+ * @n_properties_p: location to store number of properties returned.
+ *
+ * Lists the properties of an interface.Generally, the interface
+ * vtable passed in as @g_iface will be the default vtable from
+ * g_type_default_interface_ref(), or, if you know the interface has
+ * already been loaded, g_type_default_interface_peek().
+ *
+ * Since: 2.4
+ *
+ * Returns: a pointer to an array of pointers to #GParamSpec
+ *          structures. The paramspecs are owned by GLib, but the
+ *          array should be freed with g_free() when you are done with
+ *          it.
+ */
+GParamSpec**
+g_object_interface_list_properties (gpointer      g_iface,
+				    guint        *n_properties_p)
+{
+  GTypeInterface *iface_class = g_iface;
+  GParamSpec **pspecs;
+  guint n;
+
+  g_return_val_if_fail (G_TYPE_IS_INTERFACE (iface_class->g_type), NULL);
+
+  pspecs = g_param_spec_pool_list (pspec_pool,
+				   iface_class->g_type,
+				   &n);
+  if (n_properties_p)
+    *n_properties_p = n;
+
+  return pspecs;
+}
+
+static void
+g_object_init (GObject *object)
+{
+  object->ref_count = 1;
+  g_datalist_init (&object->qdata);
+  
+  /* freeze object's notification queue, g_object_newv() preserves pairedness */
+  g_object_notify_queue_freeze (object, &property_notify_context);
+  /* enter construction list for notify_queue_thaw() and to allow construct-only properties */
+  G_LOCK (construction_mutex);
+  construction_objects = g_slist_prepend (construction_objects, object);
+  G_UNLOCK (construction_mutex);
+
+#ifdef	G_ENABLE_DEBUG
+  IF_DEBUG (OBJECTS)
+    {
+      G_LOCK (debug_objects);
+      debug_objects_count++;
+      g_hash_table_insert (debug_objects_ht, object, object);
+      G_UNLOCK (debug_objects);
+    }
+#endif	/* G_ENABLE_DEBUG */
+}
+
+static void
+g_object_do_set_property (GObject      *object,
+			  guint         property_id,
+			  const GValue *value,
+			  GParamSpec   *pspec)
+{
+  switch (property_id)
+    {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+g_object_do_get_property (GObject     *object,
+			  guint        property_id,
+			  GValue      *value,
+			  GParamSpec  *pspec)
+{
+  switch (property_id)
+    {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+    }
+}
+
+static void
+g_object_real_dispose (GObject *object)
+{
+  g_signal_handlers_destroy (object);
+  g_datalist_id_set_data (&object->qdata, quark_closure_array, NULL);
+  g_datalist_id_set_data (&object->qdata, quark_weak_refs, NULL);
+}
+
+static void
+g_object_finalize (GObject *object)
+{
+  g_datalist_clear (&object->qdata);
+  
+#ifdef	G_ENABLE_DEBUG
+  IF_DEBUG (OBJECTS)
+    {
+      G_LOCK (debug_objects);
+      g_assert (g_hash_table_lookup (debug_objects_ht, object) == object);
+      g_hash_table_remove (debug_objects_ht, object);
+      debug_objects_count--;
+      G_UNLOCK (debug_objects);
+    }
+#endif	/* G_ENABLE_DEBUG */
+}
+
+
+static void
+g_object_dispatch_properties_changed (GObject     *object,
+				      guint        n_pspecs,
+				      GParamSpec **pspecs)
+{
+  guint i;
+
+  for (i = 0; i < n_pspecs; i++)
+    g_signal_emit (object, gobject_signals[NOTIFY], g_quark_from_string (pspecs[i]->name), pspecs[i]);
+}
+
+/**
+ * g_object_run_dispose:
+ * @object: a #GObject
+ *
+ * Releases all references to other objects. This can be used to break
+ * reference cycles.
+ *
+ * This functions should only be called from object system implementations.
+ */
+void
+g_object_run_dispose (GObject *object)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (object->ref_count > 0);
+
+  g_object_ref (object);
+  G_OBJECT_GET_CLASS (object)->dispose (object);
+  g_object_unref (object);
+}
+
+/**
+ * g_object_freeze_notify:
+ * @object: a #GObject
+ *
+ * Increases the freeze count on @object. If the freeze count is
+ * non-zero, the emission of "notify" signals on @object is
+ * stopped. The signals are queued until the freeze count is decreased
+ * to zero.
+ *
+ * This is necessary for accessors that modify multiple properties to prevent
+ * premature notification while the object is still being modified.
+ */
+void
+g_object_freeze_notify (GObject *object)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+
+  if (g_atomic_int_get (&object->ref_count) == 0)
+    return;
+
+  g_object_ref (object);
+  g_object_notify_queue_freeze (object, &property_notify_context);
+  g_object_unref (object);
+}
+
+/**
+ * g_object_notify:
+ * @object: a #GObject
+ * @property_name: the name of a property installed on the class of @object.
+ *
+ * Emits a "notify" signal for the property @property_name on @object.
+ */
+void
+g_object_notify (GObject     *object,
+		 const gchar *property_name)
+{
+  GParamSpec *pspec;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (property_name != NULL);
+  if (g_atomic_int_get (&object->ref_count) == 0)
+    return;
+  
+  g_object_ref (object);
+  /* We don't need to get the redirect target
+   * (by, e.g. calling g_object_class_find_property())
+   * because g_object_notify_queue_add() does that
+   */
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+				    property_name,
+				    G_OBJECT_TYPE (object),
+				    TRUE);
+
+  if (!pspec)
+    g_warning ("%s: object class `%s' has no property named `%s'",
+	       G_STRFUNC,
+	       G_OBJECT_TYPE_NAME (object),
+	       property_name);
+  else
+    {
+      GObjectNotifyQueue *nqueue;
+      
+      nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+      g_object_notify_queue_add (object, nqueue, pspec);
+      g_object_notify_queue_thaw (object, nqueue);
+    }
+  g_object_unref (object);
+}
+
+/**
+ * g_object_thaw_notify:
+ * @object: a #GObject
+ *
+ * Reverts the effect of a previous call to
+ * g_object_freeze_notify(). The freeze count is decreased on @object
+ * and when it reaches zero, all queued "notify" signals are emitted.
+ *
+ * It is an error to call this function when the freeze count is zero.
+ */
+void
+g_object_thaw_notify (GObject *object)
+{
+  GObjectNotifyQueue *nqueue;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  if (g_atomic_int_get (&object->ref_count) == 0)
+    return;
+  
+  g_object_ref (object);
+  nqueue = g_object_notify_queue_from_object (object, &property_notify_context);
+  if (!nqueue || !nqueue->freeze_count)
+    g_warning ("%s: property-changed notification for %s(%p) is not frozen",
+	       G_STRFUNC, G_OBJECT_TYPE_NAME (object), object);
+  else
+    g_object_notify_queue_thaw (object, nqueue);
+  g_object_unref (object);
+}
+
+static inline void
+object_get_property (GObject     *object,
+		     GParamSpec  *pspec,
+		     GValue      *value)
+{
+  GObjectClass *class = g_type_class_peek (pspec->owner_type);
+  guint param_id = PARAM_SPEC_PARAM_ID (pspec);
+  GParamSpec *redirect;
+
+  redirect = g_param_spec_get_redirect_target (pspec);
+  if (redirect)
+    pspec = redirect;    
+  
+  class->get_property (object, param_id, value, pspec);
+}
+
+static inline void
+object_set_property (GObject             *object,
+		     GParamSpec          *pspec,
+		     const GValue        *value,
+		     GObjectNotifyQueue  *nqueue)
+{
+  GValue tmp_value = { 0, };
+  GObjectClass *class = g_type_class_peek (pspec->owner_type);
+  guint param_id = PARAM_SPEC_PARAM_ID (pspec);
+  GParamSpec *redirect;
+
+  redirect = g_param_spec_get_redirect_target (pspec);
+  if (redirect)
+    pspec = redirect;
+
+  /* provide a copy to work from, convert (if necessary) and validate */
+  g_value_init (&tmp_value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+  if (!g_value_transform (value, &tmp_value))
+    g_warning ("unable to set property `%s' of type `%s' from value of type `%s'",
+	       pspec->name,
+	       g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)),
+	       G_VALUE_TYPE_NAME (value));
+  else if (g_param_value_validate (pspec, &tmp_value) && !(pspec->flags & G_PARAM_LAX_VALIDATION))
+    {
+      gchar *contents = g_strdup_value_contents (value);
+
+      g_warning ("value \"%s\" of type `%s' is invalid or out of range for property `%s' of type `%s'",
+		 contents,
+		 G_VALUE_TYPE_NAME (value),
+		 pspec->name,
+		 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)));
+      g_free (contents);
+    }
+  else
+    {
+      class->set_property (object, param_id, &tmp_value, pspec);
+      g_object_notify_queue_add (object, nqueue, pspec);
+    }
+  g_value_unset (&tmp_value);
+}
+
+static void
+object_interface_check_properties (gpointer func_data,
+				   gpointer g_iface)
+{
+  GTypeInterface *iface_class = g_iface;
+  GObjectClass *class = g_type_class_peek (iface_class->g_instance_type);
+  GType iface_type = iface_class->g_type;
+  GParamSpec **pspecs;
+  guint n;
+
+  if (!G_IS_OBJECT_CLASS (class))
+    return;
+
+  pspecs = g_param_spec_pool_list (pspec_pool, iface_type, &n);
+
+  while (n--)
+    {
+      GParamSpec *class_pspec = g_param_spec_pool_lookup (pspec_pool,
+							  pspecs[n]->name,
+							  G_OBJECT_CLASS_TYPE (class),
+							  TRUE);
+      
+      if (!class_pspec)
+	{
+	  g_critical ("Object class %s doesn't implement property "
+		      "'%s' from interface '%s'",
+		      g_type_name (G_OBJECT_CLASS_TYPE (class)),
+		      pspecs[n]->name,
+		      g_type_name (iface_type));
+
+	  continue;
+	}
+
+      /* The implementation paramspec must have a less restrictive
+       * type than the interface parameter spec for set() and a
+       * more restrictive type for get(). We just require equality,
+       * rather than doing something more complicated checking
+       * the READABLE and WRITABLE flags. We also simplify here
+       * by only checking the value type, not the G_PARAM_SPEC_TYPE.
+       */
+      if (class_pspec &&
+	  !g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (pspecs[n]),
+			G_PARAM_SPEC_VALUE_TYPE (class_pspec)))
+	{
+	  g_critical ("Property '%s' on class '%s' has type '%s' "
+		      "which is different from the type '%s', "
+		      "of the property on interface '%s'\n",
+		      pspecs[n]->name,
+		      g_type_name (G_OBJECT_CLASS_TYPE (class)),
+		      g_type_name (G_PARAM_SPEC_VALUE_TYPE (class_pspec)),
+		      g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspecs[n])),
+		      g_type_name (iface_type));
+	}
+      
+#define SUBSET(a,b,mask) (((a) & ~(b) & (mask)) == 0)
+      
+      /* CONSTRUCT and CONSTRUCT_ONLY add restrictions.
+       * READABLE and WRITABLE remove restrictions. The implementation
+       * paramspec must have less restrictive flags.
+       */
+      if (class_pspec &&
+	  (!SUBSET (class_pspec->flags,
+		    pspecs[n]->flags,
+		    G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY) ||
+	   !SUBSET (pspecs[n]->flags,
+		    class_pspec->flags,
+		    G_PARAM_READABLE | G_PARAM_WRITABLE)))
+	{
+	  g_critical ("Flags for property '%s' on class '%s' "
+		      "are not compatible with the property on"
+		      "interface '%s'\n",
+		      pspecs[n]->name,
+		      g_type_name (G_OBJECT_CLASS_TYPE (class)),
+		      g_type_name (iface_type));
+	}
+#undef SUBSET	  
+    }
+  
+  g_free (pspecs);
+}
+
+GType
+g_object_get_type (void)
+{
+    return G_TYPE_OBJECT;
+}
+
+/**
+ * g_object_new:
+ * @object_type: the type id of the #GObject subtype to instantiate
+ * @first_property_name: the name of the first property
+ * @...: the value of the first property, followed optionally by more
+ *  name/value pairs, followed by %NULL
+ *
+ * Creates a new instance of a #GObject subtype and sets its properties.
+ *
+ * Construction parameters (see #G_PARAM_CONSTRUCT, #G_PARAM_CONSTRUCT_ONLY)
+ * which are not explicitly specified are set to their default values.
+ *
+ * Returns: a new instance of @object_type
+ */
+gpointer
+g_object_new (GType	   object_type,
+	      const gchar *first_property_name,
+	      ...)
+{
+  GObject *object;
+  va_list var_args;
+  
+  g_return_val_if_fail (G_TYPE_IS_OBJECT (object_type), NULL);
+  
+  va_start (var_args, first_property_name);
+  object = g_object_new_valist (object_type, first_property_name, var_args);
+  va_end (var_args);
+  
+  return object;
+}
+
+static gboolean
+slist_maybe_remove (GSList       **slist,
+                    gconstpointer  data)
+{
+  GSList *last = NULL, *node = *slist;
+  while (node)
+    {
+      if (node->data == data)
+        {
+          if (last)
+            last->next = node->next;
+          else
+            *slist = node->next;
+          g_slist_free_1 (node);
+          return TRUE;
+        }
+      last = node;
+      node = last->next;
+    }
+  return FALSE;
+}
+
+static inline gboolean
+object_in_construction_list (GObject *object)
+{
+  gboolean in_construction;
+  G_LOCK (construction_mutex);
+  in_construction = g_slist_find (construction_objects, object) != NULL;
+  G_UNLOCK (construction_mutex);
+  return in_construction;
+}
+
+/**
+ * g_object_newv:
+ * @object_type: the type id of the #GObject subtype to instantiate
+ * @n_parameters: the length of the @parameters array
+ * @parameters: an array of #GParameter
+ *
+ * Creates a new instance of a #GObject subtype and sets its properties.
+ *
+ * Construction parameters (see #G_PARAM_CONSTRUCT, #G_PARAM_CONSTRUCT_ONLY)
+ * which are not explicitly specified are set to their default values.
+ *
+ * Returns: a new instance of @object_type
+ */
+gpointer
+g_object_newv (GType       object_type,
+	       guint       n_parameters,
+	       GParameter *parameters)
+{
+  GObjectConstructParam *cparams, *oparams;
+  GObjectNotifyQueue *nqueue = NULL; /* shouldn't be initialized, just to silence compiler */
+  GObject *object;
+  GObjectClass *class, *unref_class = NULL;
+  GSList *slist;
+  guint n_total_cparams = 0, n_cparams = 0, n_oparams = 0, n_cvalues;
+  GValue *cvalues;
+  GList *clist = NULL;
+  gboolean newly_constructed;
+  guint i;
+
+  g_return_val_if_fail (G_TYPE_IS_OBJECT (object_type), NULL);
+
+  class = g_type_class_peek_static (object_type);
+  if (!class)
+    class = unref_class = g_type_class_ref (object_type);
+  for (slist = class->construct_properties; slist; slist = slist->next)
+    {
+      clist = g_list_prepend (clist, slist->data);
+      n_total_cparams += 1;
+    }
+
+  /* collect parameters, sort into construction and normal ones */
+  oparams = g_new (GObjectConstructParam, n_parameters);
+  cparams = g_new (GObjectConstructParam, n_total_cparams);
+  for (i = 0; i < n_parameters; i++)
+    {
+      GValue *value = &parameters[i].value;
+      GParamSpec *pspec = g_param_spec_pool_lookup (pspec_pool,
+						    parameters[i].name,
+						    object_type,
+						    TRUE);
+      if (!pspec)
+	{
+	  g_warning ("%s: object class `%s' has no property named `%s'",
+		     G_STRFUNC,
+		     g_type_name (object_type),
+		     parameters[i].name);
+	  continue;
+	}
+      if (!(pspec->flags & G_PARAM_WRITABLE))
+	{
+	  g_warning ("%s: property `%s' of object class `%s' is not writable",
+		     G_STRFUNC,
+		     pspec->name,
+		     g_type_name (object_type));
+	  continue;
+	}
+      if (pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))
+	{
+	  GList *list = g_list_find (clist, pspec);
+
+	  if (!list)
+	    {
+	      g_warning ("%s: construct property \"%s\" for object `%s' can't be set twice",
+                         G_STRFUNC, pspec->name, g_type_name (object_type));
+	      continue;
+	    }
+	  cparams[n_cparams].pspec = pspec;
+	  cparams[n_cparams].value = value;
+	  n_cparams++;
+	  if (!list->prev)
+	    clist = list->next;
+	  else
+	    list->prev->next = list->next;
+	  if (list->next)
+	    list->next->prev = list->prev;
+	  g_list_free_1 (list);
+	}
+      else
+	{
+	  oparams[n_oparams].pspec = pspec;
+	  oparams[n_oparams].value = value;
+	  n_oparams++;
+	}
+    }
+
+  /* set remaining construction properties to default values */
+  n_cvalues = n_total_cparams - n_cparams;
+  cvalues = g_new (GValue, n_cvalues);
+  while (clist)
+    {
+      GList *tmp = clist->next;
+      GParamSpec *pspec = clist->data;
+      GValue *value = cvalues + n_total_cparams - n_cparams - 1;
+
+      value->g_type = 0;
+      g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+      g_param_value_set_default (pspec, value);
+
+      cparams[n_cparams].pspec = pspec;
+      cparams[n_cparams].value = value;
+      n_cparams++;
+
+      g_list_free_1 (clist);
+      clist = tmp;
+    }
+
+  /* construct object from construction parameters */
+  object = class->constructor (object_type, n_total_cparams, cparams);
+  /* free construction values */
+  g_free (cparams);
+  while (n_cvalues--)
+    g_value_unset (cvalues + n_cvalues);
+  g_free (cvalues);
+
+  /* adjust freeze_count according to g_object_init() and remaining properties */
+  G_LOCK (construction_mutex);
+  newly_constructed = slist_maybe_remove (&construction_objects, object);
+  G_UNLOCK (construction_mutex);
+  if (newly_constructed || n_oparams)
+    nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+  if (newly_constructed)
+    g_object_notify_queue_thaw (object, nqueue);
+
+  /* run 'constructed' handler if there is one */
+  if (newly_constructed && class->constructed)
+    class->constructed (object);
+
+  /* set remaining properties */
+  for (i = 0; i < n_oparams; i++)
+    object_set_property (object, oparams[i].pspec, oparams[i].value, nqueue);
+  g_free (oparams);
+
+  /* release our own freeze count and handle notifications */
+  if (newly_constructed || n_oparams)
+    g_object_notify_queue_thaw (object, nqueue);
+
+  if (unref_class)
+    g_type_class_unref (unref_class);
+
+  return object;
+}
+
+/**
+ * g_object_new_valist:
+ * @object_type: the type id of the #GObject subtype to instantiate
+ * @first_property_name: the name of the first property
+ * @var_args: the value of the first property, followed optionally by more
+ *  name/value pairs, followed by %NULL
+ *
+ * Creates a new instance of a #GObject subtype and sets its properties.
+ *
+ * Construction parameters (see #G_PARAM_CONSTRUCT, #G_PARAM_CONSTRUCT_ONLY)
+ * which are not explicitly specified are set to their default values.
+ *
+ * Returns: a new instance of @object_type
+ */
+GObject*
+g_object_new_valist (GType	  object_type,
+		     const gchar *first_property_name,
+		     va_list	  var_args)
+{
+  GObjectClass *class;
+  GParameter *params;
+  const gchar *name;
+  GObject *object;
+  guint n_params = 0, n_alloced_params = 16;
+  
+  g_return_val_if_fail (G_TYPE_IS_OBJECT (object_type), NULL);
+
+  if (!first_property_name)
+    return g_object_newv (object_type, 0, NULL);
+
+  class = g_type_class_ref (object_type);
+
+  params = g_new (GParameter, n_alloced_params);
+  name = first_property_name;
+  while (name)
+    {
+      gchar *error = NULL;
+      GParamSpec *pspec = g_param_spec_pool_lookup (pspec_pool,
+						    name,
+						    object_type,
+						    TRUE);
+      if (!pspec)
+	{
+	  g_warning ("%s: object class `%s' has no property named `%s'",
+		     G_STRFUNC,
+		     g_type_name (object_type),
+		     name);
+	  break;
+	}
+      if (n_params >= n_alloced_params)
+	{
+	  n_alloced_params += 16;
+	  params = g_renew (GParameter, params, n_alloced_params);
+	}
+      params[n_params].name = name;
+      params[n_params].value.g_type = 0;
+      g_value_init (&params[n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+      G_VALUE_COLLECT (&params[n_params].value, var_args, 0, &error);
+      if (error)
+	{
+	  g_warning ("%s: %s", G_STRFUNC, error);
+	  g_free (error);
+          g_value_unset (&params[n_params].value);
+	  break;
+	}
+      n_params++;
+      name = va_arg (var_args, gchar*);
+    }
+
+  object = g_object_newv (object_type, n_params, params);
+
+  while (n_params--)
+    g_value_unset (&params[n_params].value);
+  g_free (params);
+
+  g_type_class_unref (class);
+
+  return object;
+}
+
+static GObject*
+g_object_constructor (GType                  type,
+		      guint                  n_construct_properties,
+		      GObjectConstructParam *construct_params)
+{
+  GObject *object;
+
+  /* create object */
+  object = (GObject*) g_type_create_instance (type);
+  
+  /* set construction parameters */
+  if (n_construct_properties)
+    {
+      GObjectNotifyQueue *nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+      
+      /* set construct properties */
+      while (n_construct_properties--)
+	{
+	  GValue *value = construct_params->value;
+	  GParamSpec *pspec = construct_params->pspec;
+
+	  construct_params++;
+	  object_set_property (object, pspec, value, nqueue);
+	}
+      g_object_notify_queue_thaw (object, nqueue);
+      /* the notification queue is still frozen from g_object_init(), so
+       * we don't need to handle it here, g_object_newv() takes
+       * care of that
+       */
+    }
+
+  return object;
+}
+
+/**
+ * g_object_set_valist:
+ * @object: a #GObject
+ * @first_property_name: name of the first property to set
+ * @var_args: value for the first property, followed optionally by more
+ *  name/value pairs, followed by %NULL
+ *
+ * Sets properties on an object.
+ */
+void
+g_object_set_valist (GObject	 *object,
+		     const gchar *first_property_name,
+		     va_list	  var_args)
+{
+  GObjectNotifyQueue *nqueue;
+  const gchar *name;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  
+  g_object_ref (object);
+  nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+  
+  name = first_property_name;
+  while (name)
+    {
+      GValue value = { 0, };
+      GParamSpec *pspec;
+      gchar *error = NULL;
+      
+      pspec = g_param_spec_pool_lookup (pspec_pool,
+					name,
+					G_OBJECT_TYPE (object),
+					TRUE);
+      if (!pspec)
+	{
+	  g_warning ("%s: object class `%s' has no property named `%s'",
+		     G_STRFUNC,
+		     G_OBJECT_TYPE_NAME (object),
+		     name);
+	  break;
+	}
+      if (!(pspec->flags & G_PARAM_WRITABLE))
+	{
+	  g_warning ("%s: property `%s' of object class `%s' is not writable",
+		     G_STRFUNC,
+		     pspec->name,
+		     G_OBJECT_TYPE_NAME (object));
+	  break;
+	}
+      if ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) && !object_in_construction_list (object))
+        {
+          g_warning ("%s: construct property \"%s\" for object `%s' can't be set after construction",
+                     G_STRFUNC, pspec->name, G_OBJECT_TYPE_NAME (object));
+          break;
+        }
+
+      g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+      
+      G_VALUE_COLLECT (&value, var_args, 0, &error);
+      if (error)
+	{
+	  g_warning ("%s: %s", G_STRFUNC, error);
+	  g_free (error);
+          g_value_unset (&value);
+	  break;
+	}
+      
+      object_set_property (object, pspec, &value, nqueue);
+      g_value_unset (&value);
+      
+      name = va_arg (var_args, gchar*);
+    }
+
+  g_object_notify_queue_thaw (object, nqueue);
+  g_object_unref (object);
+}
+
+/**
+ * g_object_get_valist:
+ * @object: a #GObject
+ * @first_property_name: name of the first property to get
+ * @var_args: return location for the first property, followed optionally by more
+ *  name/return location pairs, followed by %NULL
+ *
+ * Gets properties of an object.
+ *
+ * In general, a copy is made of the property contents and the caller
+ * is responsible for freeing the memory in the appropriate manner for
+ * the type, for instance by calling g_free() or g_object_unref().
+ *
+ * See g_object_get().
+ */
+void
+g_object_get_valist (GObject	 *object,
+		     const gchar *first_property_name,
+		     va_list	  var_args)
+{
+  const gchar *name;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  
+  g_object_ref (object);
+  
+  name = first_property_name;
+  
+  while (name)
+    {
+      GValue value = { 0, };
+      GParamSpec *pspec;
+      gchar *error;
+      
+      pspec = g_param_spec_pool_lookup (pspec_pool,
+					name,
+					G_OBJECT_TYPE (object),
+					TRUE);
+      if (!pspec)
+	{
+	  g_warning ("%s: object class `%s' has no property named `%s'",
+		     G_STRFUNC,
+		     G_OBJECT_TYPE_NAME (object),
+		     name);
+	  break;
+	}
+      if (!(pspec->flags & G_PARAM_READABLE))
+	{
+	  g_warning ("%s: property `%s' of object class `%s' is not readable",
+		     G_STRFUNC,
+		     pspec->name,
+		     G_OBJECT_TYPE_NAME (object));
+	  break;
+	}
+      
+      g_value_init (&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+      
+      object_get_property (object, pspec, &value);
+      
+      G_VALUE_LCOPY (&value, var_args, 0, &error);
+      if (error)
+	{
+	  g_warning ("%s: %s", G_STRFUNC, error);
+	  g_free (error);
+	  g_value_unset (&value);
+	  break;
+	}
+      
+      g_value_unset (&value);
+      
+      name = va_arg (var_args, gchar*);
+    }
+  
+  g_object_unref (object);
+}
+
+/**
+ * g_object_set:
+ * @object: a #GObject
+ * @first_property_name: name of the first property to set
+ * @...: value for the first property, followed optionally by more
+ *  name/value pairs, followed by %NULL
+ *
+ * Sets properties on an object.
+ */
+void
+g_object_set (gpointer     _object,
+	      const gchar *first_property_name,
+	      ...)
+{
+  GObject *object = _object;
+  va_list var_args;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  
+  va_start (var_args, first_property_name);
+  g_object_set_valist (object, first_property_name, var_args);
+  va_end (var_args);
+}
+
+/**
+ * g_object_get:
+ * @object: a #GObject
+ * @first_property_name: name of the first property to get
+ * @...: return location for the first property, followed optionally by more
+ *  name/return location pairs, followed by %NULL
+ *
+ * Gets properties of an object.
+ *
+ * In general, a copy is made of the property contents and the caller
+ * is responsible for freeing the memory in the appropriate manner for
+ * the type, for instance by calling g_free() or g_object_unref().
+ *
+ * <example>
+ * <title>Using g_object_get(<!-- -->)</title>
+ * An example of using g_object_get() to get the contents
+ * of three properties - one of type #G_TYPE_INT,
+ * one of type #G_TYPE_STRING, and one of type #G_TYPE_OBJECT:
+ * <programlisting>
+ *  gint intval;
+ *  gchar *strval;
+ *  GObject *objval;
+ *
+ *  g_object_get (my_object,
+ *                "int-property", &intval,
+ *                "str-property", &strval,
+ *                "obj-property", &objval,
+ *                NULL);
+ *
+ *  // Do something with intval, strval, objval
+ *
+ *  g_free (strval);
+ *  g_object_unref (objval);
+ * </programlisting>
+ * </example>
+ */
+void
+g_object_get (gpointer     _object,
+	      const gchar *first_property_name,
+	      ...)
+{
+  GObject *object = _object;
+  va_list var_args;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  
+  va_start (var_args, first_property_name);
+  g_object_get_valist (object, first_property_name, var_args);
+  va_end (var_args);
+}
+
+/**
+ * g_object_set_property:
+ * @object: a #GObject
+ * @property_name: the name of the property to set
+ * @value: the value
+ *
+ * Sets a property on an object.
+ */
+void
+g_object_set_property (GObject	    *object,
+		       const gchar  *property_name,
+		       const GValue *value)
+{
+  GObjectNotifyQueue *nqueue;
+  GParamSpec *pspec;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (property_name != NULL);
+  g_return_if_fail (G_IS_VALUE (value));
+  
+  g_object_ref (object);
+  nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
+  
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+				    property_name,
+				    G_OBJECT_TYPE (object),
+				    TRUE);
+  if (!pspec)
+    g_warning ("%s: object class `%s' has no property named `%s'",
+	       G_STRFUNC,
+	       G_OBJECT_TYPE_NAME (object),
+	       property_name);
+  else if (!(pspec->flags & G_PARAM_WRITABLE))
+    g_warning ("%s: property `%s' of object class `%s' is not writable",
+               G_STRFUNC,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object));
+  else if ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) && !object_in_construction_list (object))
+    g_warning ("%s: construct property \"%s\" for object `%s' can't be set after construction",
+               G_STRFUNC, pspec->name, G_OBJECT_TYPE_NAME (object));
+  else
+    object_set_property (object, pspec, value, nqueue);
+  
+  g_object_notify_queue_thaw (object, nqueue);
+  g_object_unref (object);
+}
+
+/**
+ * g_object_get_property:
+ * @object: a #GObject
+ * @property_name: the name of the property to get
+ * @value: return location for the property value
+ *
+ * Gets a property of an object.
+ *
+ * In general, a copy is made of the property contents and the caller is
+ * responsible for freeing the memory by calling g_value_unset().
+ *
+ * Note that g_object_get_property() is really intended for language
+ * bindings, g_object_get() is much more convenient for C programming.
+ */
+void
+g_object_get_property (GObject	   *object,
+		       const gchar *property_name,
+		       GValue	   *value)
+{
+  GParamSpec *pspec;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (property_name != NULL);
+  g_return_if_fail (G_IS_VALUE (value));
+  
+  g_object_ref (object);
+  
+  pspec = g_param_spec_pool_lookup (pspec_pool,
+				    property_name,
+				    G_OBJECT_TYPE (object),
+				    TRUE);
+  if (!pspec)
+    g_warning ("%s: object class `%s' has no property named `%s'",
+	       G_STRFUNC,
+	       G_OBJECT_TYPE_NAME (object),
+	       property_name);
+  else if (!(pspec->flags & G_PARAM_READABLE))
+    g_warning ("%s: property `%s' of object class `%s' is not readable",
+               G_STRFUNC,
+               pspec->name,
+               G_OBJECT_TYPE_NAME (object));
+  else
+    {
+      GValue *prop_value, tmp_value = { 0, };
+      
+      /* auto-conversion of the callers value type
+       */
+      if (G_VALUE_TYPE (value) == G_PARAM_SPEC_VALUE_TYPE (pspec))
+	{
+	  g_value_reset (value);
+	  prop_value = value;
+	}
+      else if (!g_value_type_transformable (G_PARAM_SPEC_VALUE_TYPE (pspec), G_VALUE_TYPE (value)))
+	{
+	  g_warning ("%s: can't retrieve property `%s' of type `%s' as value of type `%s'",
+		     G_STRFUNC, pspec->name,
+		     g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)),
+		     G_VALUE_TYPE_NAME (value));
+	  g_object_unref (object);
+	  return;
+	}
+      else
+	{
+	  g_value_init (&tmp_value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+	  prop_value = &tmp_value;
+	}
+      object_get_property (object, pspec, prop_value);
+      if (prop_value != value)
+	{
+	  g_value_transform (prop_value, value);
+	  g_value_unset (&tmp_value);
+	}
+    }
+  
+  g_object_unref (object);
+}
+
+/**
+ * g_object_connect:
+ * @object: a #GObject
+ * @signal_spec: the spec for the first signal
+ * @...: #GCallback for the first signal, followed by data for the
+ *       first signal, followed optionally by more signal
+ *       spec/callback/data triples, followed by %NULL
+ *
+ * A convenience function to connect multiple signals at once.
+ *
+ * The signal specs expected by this function have the form
+ * "modifier::signal_name", where modifier can be one of the following:
+ * <variablelist>
+ * <varlistentry>
+ * <term>signal</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_data (..., NULL, 0)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>object_signal</term>
+ * <term>object-signal</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_object (..., 0)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>swapped_signal</term>
+ * <term>swapped-signal</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_data (..., NULL, G_CONNECT_SWAPPED)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>swapped_object_signal</term>
+ * <term>swapped-object-signal</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_object (..., G_CONNECT_SWAPPED)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>signal_after</term>
+ * <term>signal-after</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_data (..., NULL, G_CONNECT_AFTER)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>object_signal_after</term>
+ * <term>object-signal-after</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_object (..., G_CONNECT_AFTER)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>swapped_signal_after</term>
+ * <term>swapped-signal-after</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_data (..., NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>swapped_object_signal_after</term>
+ * <term>swapped-object-signal-after</term>
+ * <listitem><para>
+ * equivalent to <literal>g_signal_connect_object (..., G_CONNECT_SWAPPED | G_CONNECT_AFTER)</literal>
+ * </para></listitem>
+ * </varlistentry>
+ * </variablelist>
+ *
+ * |[
+ *   menu->toplevel = g_object_connect (g_object_new (GTK_TYPE_WINDOW,
+ * 						   "type", GTK_WINDOW_POPUP,
+ * 						   "child", menu,
+ * 						   NULL),
+ * 				     "signal::event", gtk_menu_window_event, menu,
+ * 				     "signal::size_request", gtk_menu_window_size_request, menu,
+ * 				     "signal::destroy", gtk_widget_destroyed, &amp;menu-&gt;toplevel,
+ * 				     NULL);
+ * ]|
+ *
+ * Returns: @object
+ */
+gpointer
+g_object_connect (gpointer     _object,
+		  const gchar *signal_spec,
+		  ...)
+{
+  GObject *object = _object;
+  va_list var_args;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (object->ref_count > 0, object);
+
+  va_start (var_args, signal_spec);
+  while (signal_spec)
+    {
+      GCallback callback = va_arg (var_args, GCallback);
+      gpointer data = va_arg (var_args, gpointer);
+      gulong sid;
+
+      if (strncmp (signal_spec, "signal::", 8) == 0)
+	sid = g_signal_connect_data (object, signal_spec + 8,
+				     callback, data, NULL,
+				     0);
+      else if (strncmp (signal_spec, "object_signal::", 15) == 0 ||
+               strncmp (signal_spec, "object-signal::", 15) == 0)
+	sid = g_signal_connect_object (object, signal_spec + 15,
+				       callback, data,
+				       0);
+      else if (strncmp (signal_spec, "swapped_signal::", 16) == 0 ||
+               strncmp (signal_spec, "swapped-signal::", 16) == 0)
+	sid = g_signal_connect_data (object, signal_spec + 16,
+				     callback, data, NULL,
+				     G_CONNECT_SWAPPED);
+      else if (strncmp (signal_spec, "swapped_object_signal::", 23) == 0 ||
+               strncmp (signal_spec, "swapped-object-signal::", 23) == 0)
+	sid = g_signal_connect_object (object, signal_spec + 23,
+				       callback, data,
+				       G_CONNECT_SWAPPED);
+      else if (strncmp (signal_spec, "signal_after::", 14) == 0 ||
+               strncmp (signal_spec, "signal-after::", 14) == 0)
+	sid = g_signal_connect_data (object, signal_spec + 14,
+				     callback, data, NULL,
+				     G_CONNECT_AFTER);
+      else if (strncmp (signal_spec, "object_signal_after::", 21) == 0 ||
+               strncmp (signal_spec, "object-signal-after::", 21) == 0)
+	sid = g_signal_connect_object (object, signal_spec + 21,
+				       callback, data,
+				       G_CONNECT_AFTER);
+      else if (strncmp (signal_spec, "swapped_signal_after::", 22) == 0 ||
+               strncmp (signal_spec, "swapped-signal-after::", 22) == 0)
+	sid = g_signal_connect_data (object, signal_spec + 22,
+				     callback, data, NULL,
+				     G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+      else if (strncmp (signal_spec, "swapped_object_signal_after::", 29) == 0 ||
+               strncmp (signal_spec, "swapped-object-signal-after::", 29) == 0)
+	sid = g_signal_connect_object (object, signal_spec + 29,
+				       callback, data,
+				       G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+      else
+	{
+	  g_warning ("%s: invalid signal spec \"%s\"", G_STRFUNC, signal_spec);
+	  break;
+	}
+      signal_spec = va_arg (var_args, gchar*);
+    }
+  va_end (var_args);
+
+  return object;
+}
+
+/**
+ * g_object_disconnect:
+ * @object: a #GObject
+ * @signal_spec: the spec for the first signal
+ * @...: #GCallback for the first signal, followed by data for the first signal,
+ *  followed optionally by more signal spec/callback/data triples,
+ *  followed by %NULL
+ *
+ * A convenience function to disconnect multiple signals at once.
+ *
+ * The signal specs expected by this function have the form
+ * "any_signal", which means to disconnect any signal with matching
+ * callback and data, or "any_signal::signal_name", which only
+ * disconnects the signal named "signal_name".
+ */
+void
+g_object_disconnect (gpointer     _object,
+		     const gchar *signal_spec,
+		     ...)
+{
+  GObject *object = _object;
+  va_list var_args;
+
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (object->ref_count > 0);
+
+  va_start (var_args, signal_spec);
+  while (signal_spec)
+    {
+      GCallback callback = va_arg (var_args, GCallback);
+      gpointer data = va_arg (var_args, gpointer);
+      guint sid = 0, detail = 0, mask = 0;
+
+      if (strncmp (signal_spec, "any_signal::", 12) == 0 ||
+          strncmp (signal_spec, "any-signal::", 12) == 0)
+	{
+	  signal_spec += 12;
+	  mask = G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA;
+	}
+      else if (strcmp (signal_spec, "any_signal") == 0 ||
+               strcmp (signal_spec, "any-signal") == 0)
+	{
+	  signal_spec += 10;
+	  mask = G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA;
+	}
+      else
+	{
+	  g_warning ("%s: invalid signal spec \"%s\"", G_STRFUNC, signal_spec);
+	  break;
+	}
+
+      if ((mask & G_SIGNAL_MATCH_ID) &&
+	  !g_signal_parse_name (signal_spec, G_OBJECT_TYPE (object), &sid, &detail, FALSE))
+	g_warning ("%s: invalid signal name \"%s\"", G_STRFUNC, signal_spec);
+      else if (!g_signal_handlers_disconnect_matched (object, mask | (detail ? G_SIGNAL_MATCH_DETAIL : 0),
+						      sid, detail,
+						      NULL, (gpointer)callback, data))
+	g_warning ("%s: signal handler %p(%p) is not connected", G_STRFUNC, callback, data);
+      signal_spec = va_arg (var_args, gchar*);
+    }
+  va_end (var_args);
+}
+
+typedef struct {
+  GObject *object;
+  guint n_weak_refs;
+  struct {
+    GWeakNotify notify;
+    gpointer    data;
+  } weak_refs[1];  /* flexible array */
+} WeakRefStack;
+
+static void
+weak_refs_notify (gpointer data)
+{
+  WeakRefStack *wstack = data;
+  guint i;
+
+  for (i = 0; i < wstack->n_weak_refs; i++)
+    wstack->weak_refs[i].notify (wstack->weak_refs[i].data, wstack->object);
+  g_free (wstack);
+}
+
+/**
+ * g_object_weak_ref:
+ * @object: #GObject to reference weakly
+ * @notify: callback to invoke before the object is freed
+ * @data: extra data to pass to notify
+ *
+ * Adds a weak reference callback to an object. Weak references are
+ * used for notification when an object is finalized. They are called
+ * "weak references" because they allow you to safely hold a pointer
+ * to an object without calling g_object_ref() (g_object_ref() adds a
+ * strong reference, that is, forces the object to stay alive).
+ */
+void
+g_object_weak_ref (GObject    *object,
+		   GWeakNotify notify,
+		   gpointer    data)
+{
+  WeakRefStack *wstack;
+  guint i;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (notify != NULL);
+  g_return_if_fail (object->ref_count >= 1);
+
+  wstack = g_datalist_id_remove_no_notify (&object->qdata, quark_weak_refs);
+  if (wstack)
+    {
+      i = wstack->n_weak_refs++;
+      wstack = g_realloc (wstack, sizeof (*wstack) + sizeof (wstack->weak_refs[0]) * i);
+    }
+  else
+    {
+      wstack = g_renew (WeakRefStack, NULL, 1);
+      wstack->object = object;
+      wstack->n_weak_refs = 1;
+      i = 0;
+    }
+  wstack->weak_refs[i].notify = notify;
+  wstack->weak_refs[i].data = data;
+  g_datalist_id_set_data_full (&object->qdata, quark_weak_refs, wstack, weak_refs_notify);
+}
+
+/**
+ * g_object_weak_unref:
+ * @object: #GObject to remove a weak reference from
+ * @notify: callback to search for
+ * @data: data to search for
+ *
+ * Removes a weak reference callback to an object.
+ */
+void
+g_object_weak_unref (GObject    *object,
+		     GWeakNotify notify,
+		     gpointer    data)
+{
+  WeakRefStack *wstack;
+  gboolean found_one = FALSE;
+
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (notify != NULL);
+
+  wstack = g_datalist_id_get_data (&object->qdata, quark_weak_refs);
+  if (wstack)
+    {
+      guint i;
+
+      for (i = 0; i < wstack->n_weak_refs; i++)
+	if (wstack->weak_refs[i].notify == notify &&
+	    wstack->weak_refs[i].data == data)
+	  {
+	    found_one = TRUE;
+	    wstack->n_weak_refs -= 1;
+	    if (i != wstack->n_weak_refs)
+	      wstack->weak_refs[i] = wstack->weak_refs[wstack->n_weak_refs];
+
+	    break;
+	  }
+    }
+  if (!found_one)
+    g_warning ("%s: couldn't find weak ref %p(%p)", G_STRFUNC, notify, data);
+}
+
+/**
+ * g_object_add_weak_pointer:
+ * @object: The object that should be weak referenced.
+ * @weak_pointer_location: The memory address of a pointer.
+ *
+ * Adds a weak reference from weak_pointer to @object to indicate that
+ * the pointer located at @weak_pointer_location is only valid during
+ * the lifetime of @object. When the @object is finalized,
+ * @weak_pointer will be set to %NULL.
+ */
+void
+g_object_add_weak_pointer (GObject  *object, 
+                           gpointer *weak_pointer_location)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (weak_pointer_location != NULL);
+
+  g_object_weak_ref (object, 
+                     (GWeakNotify) g_nullify_pointer, 
+                     weak_pointer_location);
+}
+
+/**
+ * g_object_remove_weak_pointer:
+ * @object: The object that is weak referenced.
+ * @weak_pointer_location: The memory address of a pointer.
+ *
+ * Removes a weak reference from @object that was previously added
+ * using g_object_add_weak_pointer(). The @weak_pointer_location has
+ * to match the one used with g_object_add_weak_pointer().
+ */
+void
+g_object_remove_weak_pointer (GObject  *object, 
+                              gpointer *weak_pointer_location)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (weak_pointer_location != NULL);
+
+  g_object_weak_unref (object, 
+                       (GWeakNotify) g_nullify_pointer, 
+                       weak_pointer_location);
+}
+
+static guint
+object_floating_flag_handler (GObject        *object,
+                              gint            job)
+{
+  switch (job)
+    {
+      gpointer oldvalue;
+    case +1:    /* force floating if possible */
+      do
+        oldvalue = g_atomic_pointer_get (&object->qdata);
+      while (!g_atomic_pointer_compare_and_exchange ((void**) &object->qdata, oldvalue,
+                                                     (gpointer) ((gsize) oldvalue | OBJECT_FLOATING_FLAG)));
+      return (gsize) oldvalue & OBJECT_FLOATING_FLAG;
+    case -1:    /* sink if possible */
+      do
+        oldvalue = g_atomic_pointer_get (&object->qdata);
+      while (!g_atomic_pointer_compare_and_exchange ((void**) &object->qdata, oldvalue,
+                                                     (gpointer) ((gsize) oldvalue & ~(gsize) OBJECT_FLOATING_FLAG)));
+      return (gsize) oldvalue & OBJECT_FLOATING_FLAG;
+    default:    /* check floating */
+      return 0 != ((gsize) g_atomic_pointer_get (&object->qdata) & OBJECT_FLOATING_FLAG);
+    }
+}
+
+/**
+ * g_object_is_floating:
+ * @object: a #GObject
+ *
+ * Checks wether @object has a <link linkend="floating-ref">floating</link>
+ * reference.
+ *
+ * Since: 2.10
+ *
+ * Returns: %TRUE if @object has a floating reference
+ */
+gboolean
+g_object_is_floating (gpointer _object)
+{
+  GObject *object = _object;
+  g_return_val_if_fail (G_IS_OBJECT (object), FALSE);
+  return floating_flag_handler (object, 0);
+}
+
+/**
+ * g_object_ref_sink:
+ * @object: a #GObject
+ *
+ * Increase the reference count of @object, and possibly remove the
+ * <link linkend="floating-ref">floating</link> reference, if @object
+ * has a floating reference.
+ *
+ * In other words, if the object is floating, then this call "assumes
+ * ownership" of the floating reference, converting it to a normal
+ * reference by clearing the floating flag while leaving the reference
+ * count unchanged.  If the object is not floating, then this call
+ * adds a new normal reference increasing the reference count by one.
+ *
+ * Since: 2.10
+ *
+ * Returns: @object
+ */
+gpointer
+g_object_ref_sink (gpointer _object)
+{
+  GObject *object = _object;
+  gboolean was_floating;
+  g_return_val_if_fail (G_IS_OBJECT (object), object);
+  g_return_val_if_fail (object->ref_count >= 1, object);
+  g_object_ref (object);
+  was_floating = floating_flag_handler (object, -1);
+  if (was_floating)
+    g_object_unref (object);
+  return object;
+}
+
+/**
+ * g_object_force_floating:
+ * @object: a #GObject
+ *
+ * This function is intended for #GObject implementations to re-enforce a
+ * <link linkend="floating-ref">floating</link> object reference.
+ * Doing this is seldomly required, all
+ * #GInitiallyUnowned<!-- -->s are created with a floating reference which
+ * usually just needs to be sunken by calling g_object_ref_sink().
+ *
+ * Since: 2.10
+ */
+void
+g_object_force_floating (GObject *object)
+{
+  gboolean was_floating;
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (object->ref_count >= 1);
+
+  was_floating = floating_flag_handler (object, +1);
+}
+
+typedef struct {
+  GObject *object;
+  guint n_toggle_refs;
+  struct {
+    GToggleNotify notify;
+    gpointer    data;
+  } toggle_refs[1];  /* flexible array */
+} ToggleRefStack;
+
+static void
+toggle_refs_notify (GObject *object,
+		    gboolean is_last_ref)
+{
+  ToggleRefStack *tstack = g_datalist_id_get_data (&object->qdata, quark_toggle_refs);
+
+  /* Reentrancy here is not as tricky as it seems, because a toggle reference
+   * will only be notified when there is exactly one of them.
+   */
+  g_assert (tstack->n_toggle_refs == 1);
+  tstack->toggle_refs[0].notify (tstack->toggle_refs[0].data, tstack->object, is_last_ref);
+}
+
+/**
+ * g_object_add_toggle_ref:
+ * @object: a #GObject
+ * @notify: a function to call when this reference is the
+ *  last reference to the object, or is no longer
+ *  the last reference.
+ * @data: data to pass to @notify
+ *
+ * Increases the reference count of the object by one and sets a
+ * callback to be called when all other references to the object are
+ * dropped, or when this is already the last reference to the object
+ * and another reference is established.
+ *
+ * This functionality is intended for binding @object to a proxy
+ * object managed by another memory manager. This is done with two
+ * paired references: the strong reference added by
+ * g_object_add_toggle_ref() and a reverse reference to the proxy
+ * object which is either a strong reference or weak reference.
+ *
+ * The setup is that when there are no other references to @object,
+ * only a weak reference is held in the reverse direction from @object
+ * to the proxy object, but when there are other references held to
+ * @object, a strong reference is held. The @notify callback is called
+ * when the reference from @object to the proxy object should be
+ * <firstterm>toggled</firstterm> from strong to weak (@is_last_ref
+ * true) or weak to strong (@is_last_ref false).
+ *
+ * Since a (normal) reference must be held to the object before
+ * calling g_object_toggle_ref(), the initial state of the reverse
+ * link is always strong.
+ *
+ * Multiple toggle references may be added to the same gobject,
+ * however if there are multiple toggle references to an object, none
+ * of them will ever be notified until all but one are removed.  For
+ * this reason, you should only ever use a toggle reference if there
+ * is important state in the proxy object.
+ *
+ * Since: 2.8
+ */
+void
+g_object_add_toggle_ref (GObject       *object,
+			 GToggleNotify  notify,
+			 gpointer       data)
+{
+  ToggleRefStack *tstack;
+  guint i;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (notify != NULL);
+  g_return_if_fail (object->ref_count >= 1);
+
+  g_object_ref (object);
+
+  tstack = g_datalist_id_remove_no_notify (&object->qdata, quark_toggle_refs);
+  if (tstack)
+    {
+      i = tstack->n_toggle_refs++;
+      /* allocate i = tstate->n_toggle_refs - 1 positions beyond the 1 declared
+       * in tstate->toggle_refs */
+      tstack = g_realloc (tstack, sizeof (*tstack) + sizeof (tstack->toggle_refs[0]) * i);
+    }
+  else
+    {
+      tstack = g_renew (ToggleRefStack, NULL, 1);
+      tstack->object = object;
+      tstack->n_toggle_refs = 1;
+      i = 0;
+    }
+
+  /* Set a flag for fast lookup after adding the first toggle reference */
+  if (tstack->n_toggle_refs == 1)
+    g_datalist_set_flags (&object->qdata, OBJECT_HAS_TOGGLE_REF_FLAG);
+  
+  tstack->toggle_refs[i].notify = notify;
+  tstack->toggle_refs[i].data = data;
+  g_datalist_id_set_data_full (&object->qdata, quark_toggle_refs, tstack,
+			       (GDestroyNotify)g_free);
+}
+
+/**
+ * g_object_remove_toggle_ref:
+ * @object: a #GObject
+ * @notify: a function to call when this reference is the
+ *  last reference to the object, or is no longer
+ *  the last reference.
+ * @data: data to pass to @notify
+ *
+ * Removes a reference added with g_object_add_toggle_ref(). The
+ * reference count of the object is decreased by one.
+ *
+ * Since: 2.8
+ */
+void
+g_object_remove_toggle_ref (GObject       *object,
+			    GToggleNotify  notify,
+			    gpointer       data)
+{
+  ToggleRefStack *tstack;
+  gboolean found_one = FALSE;
+
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (notify != NULL);
+
+  tstack = g_datalist_id_get_data (&object->qdata, quark_toggle_refs);
+  if (tstack)
+    {
+      guint i;
+
+      for (i = 0; i < tstack->n_toggle_refs; i++)
+	if (tstack->toggle_refs[i].notify == notify &&
+	    tstack->toggle_refs[i].data == data)
+	  {
+	    found_one = TRUE;
+	    tstack->n_toggle_refs -= 1;
+	    if (i != tstack->n_toggle_refs)
+	      tstack->toggle_refs[i] = tstack->toggle_refs[tstack->n_toggle_refs];
+
+	    if (tstack->n_toggle_refs == 0)
+	      g_datalist_unset_flags (&object->qdata, OBJECT_HAS_TOGGLE_REF_FLAG);
+
+	    g_object_unref (object);
+	    
+	    break;
+	  }
+    }
+  
+  if (!found_one)
+    g_warning ("%s: couldn't find toggle ref %p(%p)", G_STRFUNC, notify, data);
+}
+
+/**
+ * g_object_ref:
+ * @object: a #GObject
+ *
+ * Increases the reference count of @object.
+ *
+ * Returns: the same @object
+ */
+gpointer
+g_object_ref (gpointer _object)
+{
+  GObject *object = _object;
+  gint old_val;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (object->ref_count > 0, NULL);
+  
+#ifdef  G_ENABLE_DEBUG
+  if (g_trap_object_ref == object)
+    G_BREAKPOINT ();
+#endif  /* G_ENABLE_DEBUG */
+
+
+  old_val = g_atomic_int_exchange_and_add ((int *)&object->ref_count, 1);
+
+  if (old_val == 1 && OBJECT_HAS_TOGGLE_REF (object))
+    toggle_refs_notify (object, FALSE);
+  
+  return object;
+}
+
+/**
+ * g_object_unref:
+ * @object: a #GObject
+ *
+ * Decreases the reference count of @object. When its reference count
+ * drops to 0, the object is finalized (i.e. its memory is freed).
+ */
+void
+g_object_unref (gpointer _object)
+{
+  GObject *object = _object;
+  gint old_ref;
+  gboolean is_zero;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (object->ref_count > 0);
+  
+#ifdef  G_ENABLE_DEBUG
+  if (g_trap_object_ref == object)
+    G_BREAKPOINT ();
+#endif  /* G_ENABLE_DEBUG */
+
+  /* here we want to atomically do: if (ref_count>1) { ref_count--; return; } */
+ retry_atomic_decrement1:
+  old_ref = g_atomic_int_get (&object->ref_count);
+  if (old_ref > 1)
+    {
+      if (!g_atomic_int_compare_and_exchange ((int *)&object->ref_count, old_ref, old_ref - 1))
+	goto retry_atomic_decrement1;
+
+      /* if we went from 2->1 we need to notify toggle refs if any */
+      if (old_ref == 2 && OBJECT_HAS_TOGGLE_REF (object))
+	toggle_refs_notify (object, TRUE);
+    }
+  else
+    {
+      /* we are about tp remove the last reference */
+      G_OBJECT_GET_CLASS (object)->dispose (object);
+
+      /* may have been re-referenced meanwhile */
+    retry_atomic_decrement2:
+      old_ref = g_atomic_int_get ((int *)&object->ref_count);
+      if (old_ref > 1)
+        {
+          if (!g_atomic_int_compare_and_exchange ((int *)&object->ref_count, old_ref, old_ref - 1))
+	    goto retry_atomic_decrement2;
+
+          /* if we went from 2->1 we need to notify toggle refs if any */
+          if (old_ref == 2 && OBJECT_HAS_TOGGLE_REF (object))
+	    toggle_refs_notify (object, TRUE);
+          
+	  return;
+	}
+      
+      /* we are still in the process of taking away the last ref */
+      g_datalist_id_set_data (&object->qdata, quark_closure_array, NULL);
+      g_signal_handlers_destroy (object);
+      g_datalist_id_set_data (&object->qdata, quark_weak_refs, NULL);
+      
+      /* decrement the last reference */
+      is_zero = g_atomic_int_dec_and_test ((int *)&object->ref_count);
+      
+      /* may have been re-referenced meanwhile */
+      if (G_LIKELY (is_zero)) 
+	{
+          G_OBJECT_GET_CLASS (object)->finalize (object);
+#ifdef	G_ENABLE_DEBUG
+          IF_DEBUG (OBJECTS)
+	    {
+	      /* catch objects not chaining finalize handlers */
+	      G_LOCK (debug_objects);
+	      g_assert (g_hash_table_lookup (debug_objects_ht, object) == NULL);
+	      G_UNLOCK (debug_objects);
+	    }
+#endif	/* G_ENABLE_DEBUG */
+          g_type_free_instance ((GTypeInstance*) object);
+	}
+    }
+}
+
+/**
+ * g_object_get_qdata:
+ * @object: The GObject to get a stored user data pointer from
+ * @quark: A #GQuark, naming the user data pointer
+ * 
+ * This function gets back user data pointers stored via
+ * g_object_set_qdata().
+ * 
+ * Returns: The user data pointer set, or %NULL
+ */
+gpointer
+g_object_get_qdata (GObject *object,
+		    GQuark   quark)
+{
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  
+  return quark ? g_datalist_id_get_data (&object->qdata, quark) : NULL;
+}
+
+/**
+ * g_object_set_qdata:
+ * @object: The GObject to set store a user data pointer
+ * @quark: A #GQuark, naming the user data pointer
+ * @data: An opaque user data pointer
+ *
+ * This sets an opaque, named pointer on an object.
+ * The name is specified through a #GQuark (retrived e.g. via
+ * g_quark_from_static_string()), and the pointer
+ * can be gotten back from the @object with g_object_get_qdata()
+ * until the @object is finalized.
+ * Setting a previously set user data pointer, overrides (frees)
+ * the old pointer set, using #NULL as pointer essentially
+ * removes the data stored.
+ */
+void
+g_object_set_qdata (GObject *object,
+		    GQuark   quark,
+		    gpointer data)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (quark > 0);
+  
+  g_datalist_id_set_data (&object->qdata, quark, data);
+}
+
+/**
+ * g_object_set_qdata_full:
+ * @object: The GObject to set store a user data pointer
+ * @quark: A #GQuark, naming the user data pointer
+ * @data: An opaque user data pointer
+ * @destroy: Function to invoke with @data as argument, when @data
+ *           needs to be freed
+ *
+ * This function works like g_object_set_qdata(), but in addition,
+ * a void (*destroy) (gpointer) function may be specified which is
+ * called with @data as argument when the @object is finalized, or
+ * the data is being overwritten by a call to g_object_set_qdata()
+ * with the same @quark.
+ */
+void
+g_object_set_qdata_full (GObject       *object,
+			 GQuark		quark,
+			 gpointer	data,
+			 GDestroyNotify destroy)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (quark > 0);
+  
+  g_datalist_id_set_data_full (&object->qdata, quark, data,
+			       data ? destroy : (GDestroyNotify) NULL);
+}
+
+/**
+ * g_object_steal_qdata:
+ * @object: The GObject to get a stored user data pointer from
+ * @quark: A #GQuark, naming the user data pointer
+ *
+ * This function gets back user data pointers stored via
+ * g_object_set_qdata() and removes the @data from object
+ * without invoking its destroy() function (if any was
+ * set).
+ * Usually, calling this function is only required to update
+ * user data pointers with a destroy notifier, for example:
+ * |[
+ * void
+ * object_add_to_user_list (GObject     *object,
+ *                          const gchar *new_string)
+ * {
+ *   // the quark, naming the object data
+ *   GQuark quark_string_list = g_quark_from_static_string ("my-string-list");
+ *   // retrive the old string list
+ *   GList *list = g_object_steal_qdata (object, quark_string_list);
+ *
+ *   // prepend new string
+ *   list = g_list_prepend (list, g_strdup (new_string));
+ *   // this changed 'list', so we need to set it again
+ *   g_object_set_qdata_full (object, quark_string_list, list, free_string_list);
+ * }
+ * static void
+ * free_string_list (gpointer data)
+ * {
+ *   GList *node, *list = data;
+ *
+ *   for (node = list; node; node = node->next)
+ *     g_free (node->data);
+ *   g_list_free (list);
+ * }
+ * ]|
+ * Using g_object_get_qdata() in the above example, instead of
+ * g_object_steal_qdata() would have left the destroy function set,
+ * and thus the partial string list would have been freed upon
+ * g_object_set_qdata_full().
+ *
+ * Returns: The user data pointer set, or %NULL
+ */
+gpointer
+g_object_steal_qdata (GObject *object,
+		      GQuark   quark)
+{
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (quark > 0, NULL);
+  
+  return g_datalist_id_remove_no_notify (&object->qdata, quark);
+}
+
+/**
+ * g_object_get_data:
+ * @object: #GObject containing the associations
+ * @key: name of the key for that association
+ * 
+ * Gets a named field from the objects table of associations (see g_object_set_data()).
+ * 
+ * Returns: the data if found, or %NULL if no such data exists.
+ */
+gpointer
+g_object_get_data (GObject     *object,
+                   const gchar *key)
+{
+  GQuark quark;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  quark = g_quark_try_string (key);
+
+  return quark ? g_datalist_id_get_data (&object->qdata, quark) : NULL;
+}
+
+/**
+ * g_object_set_data:
+ * @object: #GObject containing the associations.
+ * @key: name of the key
+ * @data: data to associate with that key
+ *
+ * Each object carries around a table of associations from
+ * strings to pointers.  This function lets you set an association.
+ *
+ * If the object already had an association with that name,
+ * the old association will be destroyed.
+ */
+void
+g_object_set_data (GObject     *object,
+                   const gchar *key,
+                   gpointer     data)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (key != NULL);
+
+  g_datalist_id_set_data (&object->qdata, g_quark_from_string (key), data);
+}
+
+/**
+ * g_object_set_data_full:
+ * @object: #GObject containing the associations
+ * @key: name of the key
+ * @data: data to associate with that key
+ * @destroy: function to call when the association is destroyed
+ *
+ * Like g_object_set_data() except it adds notification
+ * for when the association is destroyed, either by setting it
+ * to a different value or when the object is destroyed.
+ *
+ * Note that the @destroy callback is not called if @data is %NULL.
+ */
+void
+g_object_set_data_full (GObject       *object,
+                        const gchar   *key,
+                        gpointer       data,
+                        GDestroyNotify destroy)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (key != NULL);
+
+  g_datalist_id_set_data_full (&object->qdata, g_quark_from_string (key), data,
+			       data ? destroy : (GDestroyNotify) NULL);
+}
+
+/**
+ * g_object_steal_data:
+ * @object: #GObject containing the associations
+ * @key: name of the key
+ *
+ * Remove a specified datum from the object's data associations,
+ * without invoking the association's destroy handler.
+ *
+ * Returns: the data if found, or %NULL if no such data exists.
+ */
+gpointer
+g_object_steal_data (GObject     *object,
+                     const gchar *key)
+{
+  GQuark quark;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  quark = g_quark_try_string (key);
+
+  return quark ? g_datalist_id_remove_no_notify (&object->qdata, quark) : NULL;
+}
+
+static void
+g_value_object_init (GValue *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static void
+g_value_object_free_value (GValue *value)
+{
+  if (value->data[0].v_pointer)
+    g_object_unref (value->data[0].v_pointer);
+}
+
+static void
+g_value_object_copy_value (const GValue *src_value,
+			   GValue	*dest_value)
+{
+  if (src_value->data[0].v_pointer)
+    dest_value->data[0].v_pointer = g_object_ref (src_value->data[0].v_pointer);
+  else
+    dest_value->data[0].v_pointer = NULL;
+}
+
+static void
+g_value_object_transform_value (const GValue *src_value,
+				GValue       *dest_value)
+{
+  if (src_value->data[0].v_pointer && g_type_is_a (G_OBJECT_TYPE (src_value->data[0].v_pointer), G_VALUE_TYPE (dest_value)))
+    dest_value->data[0].v_pointer = g_object_ref (src_value->data[0].v_pointer);
+  else
+    dest_value->data[0].v_pointer = NULL;
+}
+
+static gpointer
+g_value_object_peek_pointer (const GValue *value)
+{
+  return value->data[0].v_pointer;
+}
+
+static gchar*
+g_value_object_collect_value (GValue	  *value,
+			      guint        n_collect_values,
+			      GTypeCValue *collect_values,
+			      guint        collect_flags)
+{
+  if (collect_values[0].v_pointer)
+    {
+      GObject *object = collect_values[0].v_pointer;
+      
+      if (object->g_type_instance.g_class == NULL)
+	return g_strconcat ("invalid unclassed object pointer for value type `",
+			    G_VALUE_TYPE_NAME (value),
+			    "'",
+			    NULL);
+      else if (!g_value_type_compatible (G_OBJECT_TYPE (object), G_VALUE_TYPE (value)))
+	return g_strconcat ("invalid object type `",
+			    G_OBJECT_TYPE_NAME (object),
+			    "' for value type `",
+			    G_VALUE_TYPE_NAME (value),
+			    "'",
+			    NULL);
+      /* never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types */
+      value->data[0].v_pointer = g_object_ref (object);
+    }
+  else
+    value->data[0].v_pointer = NULL;
+  
+  return NULL;
+}
+
+static gchar*
+g_value_object_lcopy_value (const GValue *value,
+			    guint        n_collect_values,
+			    GTypeCValue *collect_values,
+			    guint        collect_flags)
+{
+  GObject **object_p = collect_values[0].v_pointer;
+  
+  if (!object_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+
+  if (!value->data[0].v_pointer)
+    *object_p = NULL;
+  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+    *object_p = value->data[0].v_pointer;
+  else
+    *object_p = g_object_ref (value->data[0].v_pointer);
+  
+  return NULL;
+}
+
+/**
+ * g_value_set_object:
+ * @value: a valid #GValue of %G_TYPE_OBJECT derived type
+ * @v_object: object value to be set
+ *
+ * Set the contents of a %G_TYPE_OBJECT derived #GValue to @v_object.
+ *
+ * g_value_set_object() increases the reference count of @v_object
+ * (the #GValue holds a reference to @v_object).  If you do not wish
+ * to increase the reference count of the object (i.e. you wish to
+ * pass your current reference to the #GValue because you no longer
+ * need it), use g_value_take_object() instead.
+ *
+ * It is important that your #GValue holds a reference to @v_object (either its
+ * own, or one it has taken) to ensure that the object won't be destroyed while
+ * the #GValue still exists).
+ */
+void
+g_value_set_object (GValue   *value,
+		    gpointer  v_object)
+{
+  GObject *old;
+	
+  g_return_if_fail (G_VALUE_HOLDS_OBJECT (value));
+
+  old = value->data[0].v_pointer;
+  
+  if (v_object)
+    {
+      g_return_if_fail (G_IS_OBJECT (v_object));
+      g_return_if_fail (g_value_type_compatible (G_OBJECT_TYPE (v_object), G_VALUE_TYPE (value)));
+
+      value->data[0].v_pointer = v_object;
+      g_object_ref (value->data[0].v_pointer);
+    }
+  else
+    value->data[0].v_pointer = NULL;
+  
+  if (old)
+    g_object_unref (old);
+}
+
+/**
+ * g_value_set_object_take_ownership:
+ * @value: a valid #GValue of %G_TYPE_OBJECT derived type
+ * @v_object: object value to be set
+ *
+ * This is an internal function introduced mainly for C marshallers.
+ *
+ * Deprecated: 2.4: Use g_value_take_object() instead.
+ */
+void
+g_value_set_object_take_ownership (GValue  *value,
+				   gpointer v_object)
+{
+  g_value_take_object (value, v_object);
+}
+
+/**
+ * g_value_take_object:
+ * @value: a valid #GValue of %G_TYPE_OBJECT derived type
+ * @v_object: object value to be set
+ *
+ * Sets the contents of a %G_TYPE_OBJECT derived #GValue to @v_object
+ * and takes over the ownership of the callers reference to @v_object;
+ * the caller doesn't have to unref it any more (i.e. the reference
+ * count of the object is not increased).
+ *
+ * If you want the #GValue to hold its own reference to @v_object, use
+ * g_value_set_object() instead.
+ *
+ * Since: 2.4
+ */
+void
+g_value_take_object (GValue  *value,
+		     gpointer v_object)
+{
+  g_return_if_fail (G_VALUE_HOLDS_OBJECT (value));
+
+  if (value->data[0].v_pointer)
+    {
+      g_object_unref (value->data[0].v_pointer);
+      value->data[0].v_pointer = NULL;
+    }
+
+  if (v_object)
+    {
+      g_return_if_fail (G_IS_OBJECT (v_object));
+      g_return_if_fail (g_value_type_compatible (G_OBJECT_TYPE (v_object), G_VALUE_TYPE (value)));
+
+      value->data[0].v_pointer = v_object; /* we take over the reference count */
+    }
+}
+
+/**
+ * g_value_get_object:
+ * @value: a valid #GValue of %G_TYPE_OBJECT derived type
+ * 
+ * Get the contents of a %G_TYPE_OBJECT derived #GValue.
+ * 
+ * Returns: object contents of @value
+ */
+gpointer
+g_value_get_object (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_OBJECT (value), NULL);
+  
+  return value->data[0].v_pointer;
+}
+
+/**
+ * g_value_dup_object:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_OBJECT
+ *
+ * Get the contents of a %G_TYPE_OBJECT derived #GValue, increasing
+ * its reference count.
+ *
+ * Returns: object content of @value, should be unreferenced when no
+ *          longer needed.
+ */
+gpointer
+g_value_dup_object (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_OBJECT (value), NULL);
+  
+  return value->data[0].v_pointer ? g_object_ref (value->data[0].v_pointer) : NULL;
+}
+
+/**
+ * g_signal_connect_object:
+ * @instance: the instance to connect to.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @c_handler: the #GCallback to connect.
+ * @gobject: the object to pass as data to @c_handler.
+ * @connect_flags: a combination of #GConnnectFlags.
+ *
+ * This is similar to g_signal_connect_data(), but uses a closure which
+ * ensures that the @gobject stays alive during the call to @c_handler
+ * by temporarily adding a reference count to @gobject.
+ *
+ * Note that there is a bug in GObject that makes this function
+ * much less useful than it might seem otherwise. Once @gobject is
+ * disposed, the callback will no longer be called, but, the signal
+ * handler is <emphasis>not</emphasis> currently disconnected. If the
+ * @instance is itself being freed at the same time than this doesn't
+ * matter, since the signal will automatically be removed, but
+ * if @instance persists, then the signal handler will leak. You
+ * should not remove the signal yourself because in a future versions of
+ * GObject, the handler <emphasis>will</emphasis> automatically
+ * be disconnected.
+ *
+ * It's possible to work around this problem in a way that will
+ * continue to work with future versions of GObject by checking
+ * that the signal handler is still connected before disconnected it:
+ * <informalexample><programlisting>
+ *  if (g_signal_handler_is_connected (instance, id))
+ *    g_signal_handler_disconnect (instance, id);
+ * </programlisting></informalexample>
+ *
+ * Returns: the handler id.
+ */
+gulong
+g_signal_connect_object (gpointer      instance,
+			 const gchar  *detailed_signal,
+			 GCallback     c_handler,
+			 gpointer      gobject,
+			 GConnectFlags connect_flags)
+{
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail (detailed_signal != NULL, 0);
+  g_return_val_if_fail (c_handler != NULL, 0);
+
+  if (gobject)
+    {
+      GClosure *closure;
+
+      g_return_val_if_fail (G_IS_OBJECT (gobject), 0);
+
+      closure = ((connect_flags & G_CONNECT_SWAPPED) ? g_cclosure_new_object_swap : g_cclosure_new_object) (c_handler, gobject);
+
+      return g_signal_connect_closure (instance, detailed_signal, closure, connect_flags & G_CONNECT_AFTER);
+    }
+  else
+    return g_signal_connect_data (instance, detailed_signal, c_handler, NULL, NULL, connect_flags);
+}
+
+typedef struct {
+  GObject  *object;
+  guint     n_closures;
+  GClosure *closures[1]; /* flexible array */
+} CArray;
+/* don't change this structure without supplying an accessor for
+ * watched closures, e.g.:
+ * GSList* g_object_list_watched_closures (GObject *object)
+ * {
+ *   CArray *carray;
+ *   g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+ *   carray = g_object_get_data (object, "GObject-closure-array");
+ *   if (carray)
+ *     {
+ *       GSList *slist = NULL;
+ *       guint i;
+ *       for (i = 0; i < carray->n_closures; i++)
+ *         slist = g_slist_prepend (slist, carray->closures[i]);
+ *       return slist;
+ *     }
+ *   return NULL;
+ * }
+ */
+
+static void
+object_remove_closure (gpointer  data,
+		       GClosure *closure)
+{
+  GObject *object = data;
+  CArray *carray = g_object_get_qdata (object, quark_closure_array);
+  guint i;
+  
+  for (i = 0; i < carray->n_closures; i++)
+    if (carray->closures[i] == closure)
+      {
+	carray->n_closures--;
+	if (i < carray->n_closures)
+	  carray->closures[i] = carray->closures[carray->n_closures];
+	return;
+      }
+  g_assert_not_reached ();
+}
+
+static void
+destroy_closure_array (gpointer data)
+{
+  CArray *carray = data;
+  GObject *object = carray->object;
+  guint i, n = carray->n_closures;
+  
+  for (i = 0; i < n; i++)
+    {
+      GClosure *closure = carray->closures[i];
+      
+      /* removing object_remove_closure() upfront is probably faster than
+       * letting it fiddle with quark_closure_array which is empty anyways
+       */
+      g_closure_remove_invalidate_notifier (closure, object, object_remove_closure);
+      g_closure_invalidate (closure);
+    }
+  g_free (carray);
+}
+
+/**
+ * g_object_watch_closure:
+ * @object: GObject restricting lifetime of @closure
+ * @closure: GClosure to watch
+ *
+ * This function essentially limits the life time of the @closure to
+ * the life time of the object. That is, when the object is finalized,
+ * the @closure is invalidated by calling g_closure_invalidate() on
+ * it, in order to prevent invocations of the closure with a finalized
+ * (nonexisting) object. Also, g_object_ref() and g_object_unref() are
+ * added as marshal guards to the @closure, to ensure that an extra
+ * reference count is held on @object during invocation of the
+ * @closure.  Usually, this function will be called on closures that
+ * use this @object as closure data.
+ */
+void
+g_object_watch_closure (GObject  *object,
+			GClosure *closure)
+{
+  CArray *carray;
+  guint i;
+  
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (closure != NULL);
+  g_return_if_fail (closure->is_invalid == FALSE);
+  g_return_if_fail (closure->in_marshal == FALSE);
+  g_return_if_fail (object->ref_count > 0);	/* this doesn't work on finalizing objects */
+  
+  g_closure_add_invalidate_notifier (closure, object, object_remove_closure);
+  g_closure_add_marshal_guards (closure,
+				object, (GClosureNotify) g_object_ref,
+				object, (GClosureNotify) g_object_unref);
+  carray = g_datalist_id_remove_no_notify (&object->qdata, quark_closure_array);
+  if (!carray)
+    {
+      carray = g_renew (CArray, NULL, 1);
+      carray->object = object;
+      carray->n_closures = 1;
+      i = 0;
+    }
+  else
+    {
+      i = carray->n_closures++;
+      carray = g_realloc (carray, sizeof (*carray) + sizeof (carray->closures[0]) * i);
+    }
+  carray->closures[i] = closure;
+  g_datalist_id_set_data_full (&object->qdata, quark_closure_array, carray, destroy_closure_array);
+}
+
+/**
+ * g_closure_new_object:
+ * @sizeof_closure: the size of the structure to allocate, must be at least
+ *  <literal>sizeof (GClosure)</literal>
+ * @object: a #GObject pointer to store in the @data field of the newly
+ *  allocated #GClosure
+ *
+ * A variant of g_closure_new_simple() which stores @object in the
+ * @data field of the closure and calls g_object_watch_closure() on
+ * @object and the created closure. This function is mainly useful
+ * when implementing new types of closures.
+ *
+ * Returns: a newly allocated #GClosure
+ */
+GClosure*
+g_closure_new_object (guint    sizeof_closure,
+		      GObject *object)
+{
+  GClosure *closure;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (object->ref_count > 0, NULL);     /* this doesn't work on finalizing objects */
+
+  closure = g_closure_new_simple (sizeof_closure, object);
+  g_object_watch_closure (object, closure);
+
+  return closure;
+}
+
+/**
+ * g_cclosure_new_object:
+ * @callback_func: the function to invoke
+ * @object: a #GObject pointer to pass to @callback_func
+ *
+ * A variant of g_cclosure_new() which uses @object as @user_data and
+ * calls g_object_watch_closure() on @object and the created
+ * closure. This function is useful when you have a callback closely
+ * associated with a #GObject, and want the callback to no longer run
+ * after the object is is freed.
+ *
+ * Returns: a new #GCClosure
+ */
+GClosure*
+g_cclosure_new_object (GCallback callback_func,
+		       GObject  *object)
+{
+  GClosure *closure;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (object->ref_count > 0, NULL);     /* this doesn't work on finalizing objects */
+  g_return_val_if_fail (callback_func != NULL, NULL);
+
+  closure = g_cclosure_new (callback_func, object, NULL);
+  g_object_watch_closure (object, closure);
+
+  return closure;
+}
+
+/**
+ * g_cclosure_new_object_swap:
+ * @callback_func: the function to invoke
+ * @object: a #GObject pointer to pass to @callback_func
+ *
+ * A variant of g_cclosure_new_swap() which uses @object as @user_data
+ * and calls g_object_watch_closure() on @object and the created
+ * closure. This function is useful when you have a callback closely
+ * associated with a #GObject, and want the callback to no longer run
+ * after the object is is freed.
+ *
+ * Returns: a new #GCClosure
+ */
+GClosure*
+g_cclosure_new_object_swap (GCallback callback_func,
+			    GObject  *object)
+{
+  GClosure *closure;
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (object->ref_count > 0, NULL);     /* this doesn't work on finalizing objects */
+  g_return_val_if_fail (callback_func != NULL, NULL);
+
+  closure = g_cclosure_new_swap (callback_func, object, NULL);
+  g_object_watch_closure (object, closure);
+
+  return closure;
+}
+
+gsize
+g_object_compat_control (gsize           what,
+                         gpointer        data)
+{
+  switch (what)
+    {
+      gpointer *pp;
+    case 1:     /* floating base type */
+      return G_TYPE_INITIALLY_UNOWNED;
+    case 2:     /* FIXME: remove this once GLib/Gtk+ break ABI again */
+      floating_flag_handler = (guint(*)(GObject*,gint)) data;
+      return 1;
+    case 3:     /* FIXME: remove this once GLib/Gtk+ break ABI again */
+      pp = data;
+      *pp = floating_flag_handler;
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+G_DEFINE_TYPE (GInitiallyUnowned, g_initially_unowned, G_TYPE_OBJECT);
+
+static void
+g_initially_unowned_init (GInitiallyUnowned *object)
+{
+  g_object_force_floating (object);
+}
+
+static void
+g_initially_unowned_class_init (GInitiallyUnownedClass *klass)
+{
+}
+
+#define __G_OBJECT_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gobject.h b/gobject/gobject.h
new file mode 100644
index 0000000..a75f03c
--- /dev/null
+++ b/gobject/gobject.h
@@ -0,0 +1,560 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_OBJECT_H__
+#define __G_OBJECT_H__
+
+#include        <gobject/gtype.h>
+#include        <gobject/gvalue.h>
+#include        <gobject/gparam.h>
+#include        <gobject/gclosure.h>
+#include        <gobject/gsignal.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+/**
+ * G_TYPE_IS_OBJECT:
+ * @type: Type id to check
+ * 
+ * Check if the passed in type id is a %G_TYPE_OBJECT or derived from it.
+ * 
+ * Returns: %FALSE or %TRUE, indicating whether @type is a %G_TYPE_OBJECT.
+ */
+#define G_TYPE_IS_OBJECT(type)      (G_TYPE_FUNDAMENTAL (type) == G_TYPE_OBJECT)
+/**
+ * G_OBJECT:
+ * @object: Object which is subject to casting.
+ * 
+ * Casts a #GObject or derived pointer into a (GObject*) pointer.
+ * Depending on the current debugging level, this function may invoke
+ * certain runtime checks to identify invalid casts.
+ */
+#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
+/**
+ * G_OBJECT_CLASS:
+ * @class: a valid #GObjectClass
+ * 
+ * Casts a derived #GObjectClass structure into a #GObjectClass structure.
+ */
+#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
+/**
+ * G_IS_OBJECT:
+ * @object: Instance to check for being a %G_TYPE_OBJECT.
+ * 
+ * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT.
+ */
+#define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT))
+/**
+ * G_IS_OBJECT_CLASS:
+ * @class: a #GObjectClass
+ * 
+ * Checks whether @class "is a" valid #GObjectClass structure of type
+ * %G_TYPE_OBJECT or derived.
+ */
+#define G_IS_OBJECT_CLASS(class)    (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_OBJECT))
+/**
+ * G_OBJECT_GET_CLASS:
+ * @object: a #GObject instance.
+ * 
+ * Get the class structure associated to a #GObject instance.
+ *
+ * Returns: pointer to object class structure.
+ */
+#define G_OBJECT_GET_CLASS(object)  (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass))
+/**
+ * G_OBJECT_TYPE:
+ * @object: Object to return the type id for.
+ * 
+ * Get the type id of an object.
+ * 
+ * Returns: Type id of @object.
+ */
+#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
+/**
+ * G_OBJECT_TYPE_NAME:
+ * @object: Object to return the type name for.
+ * 
+ * Get the name of an object's type.
+ * 
+ * Returns: Type name of @object. The string is owned by the type system and 
+ *  should not be freed.
+ */
+#define G_OBJECT_TYPE_NAME(object)  (g_type_name (G_OBJECT_TYPE (object)))
+/**
+ * G_OBJECT_CLASS_TYPE:
+ * @class: a valid #GObjectClass
+ * 
+ * Get the type id of a class structure.
+ * 
+ * Returns: Type id of @class.
+ */
+#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
+/**
+ * G_OBJECT_CLASS_NAME:
+ * @class: a valid #GObjectClass
+ * 
+ * Return the name of a class structure's type.
+ * 
+ * Returns: Type name of @class. The string is owned by the type system and 
+ *  should not be freed.
+ */
+#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
+/**
+ * G_VALUE_HOLDS_OBJECT:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values derived from type %G_TYPE_OBJECT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_OBJECT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_OBJECT))
+
+/* --- type macros --- */
+/**
+ * G_TYPE_INITIALLY_UNOWNED:
+ * 
+ * The type for #GInitiallyUnowned.
+ */
+#define G_TYPE_INITIALLY_UNOWNED	      (g_initially_unowned_get_type())
+/**
+ * G_INITIALLY_UNOWNED:
+ * @object: Object which is subject to casting.
+ * 
+ * Casts a #GInitiallyUnowned or derived pointer into a (GInitiallyUnowned*) 
+ * pointer. Depending on the current debugging level, this function may invoke
+ * certain runtime checks to identify invalid casts.
+ */
+#define G_INITIALLY_UNOWNED(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnowned))
+/**
+ * G_INITIALLY_UNOWNED_CLASS:
+ * @class: a valid #GInitiallyUnownedClass
+ * 
+ * Casts a derived #GInitiallyUnownedClass structure into a
+ * #GInitiallyUnownedClass structure.
+ */
+#define G_INITIALLY_UNOWNED_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
+/**
+ * G_IS_INITIALLY_UNOWNED:
+ * @object: Instance to check for being a %G_TYPE_INITIALLY_UNOWNED.
+ * 
+ * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_INITIALLY_UNOWNED.
+ */
+#define G_IS_INITIALLY_UNOWNED(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_INITIALLY_UNOWNED))
+/**
+ * G_IS_INITIALLY_UNOWNED_CLASS:
+ * @class: a #GInitiallyUnownedClass
+ * 
+ * Checks whether @class "is a" valid #GInitiallyUnownedClass structure of type
+ * %G_TYPE_INITIALLY_UNOWNED or derived.
+ */
+#define G_IS_INITIALLY_UNOWNED_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_INITIALLY_UNOWNED))
+/**
+ * G_INITIALLY_UNOWNED_GET_CLASS:
+ * @object: a #GInitiallyUnowned instance.
+ * 
+ * Get the class structure associated to a #GInitiallyUnowned instance.
+ *
+ * Returns: pointer to object class structure.
+ */
+#define G_INITIALLY_UNOWNED_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
+/* GInitiallyUnowned ia a GObject with initially floating reference count */
+
+
+/* --- typedefs & structures --- */
+typedef struct _GObject                  GObject;
+typedef struct _GObjectClass             GObjectClass;
+typedef struct _GObject                  GInitiallyUnowned;
+typedef struct _GObjectClass             GInitiallyUnownedClass;
+typedef struct _GObjectConstructParam    GObjectConstructParam;
+/**
+ * GObjectGetPropertyFunc:
+ * @object: a #GObject
+ * @property_id: the numeric id under which the property was registered with
+ *  g_object_class_install_property().
+ * @value: a #GValue to return the property value in
+ * @pspec: the #GParamSpec describing the property
+ * 
+ * The type of the @get_property function of #GObjectClass. 
+ */
+typedef void (*GObjectGetPropertyFunc)  (GObject      *object,
+                                         guint         property_id,
+                                         GValue       *value,
+                                         GParamSpec   *pspec);
+/**
+ * GObjectSetPropertyFunc:
+ * @object: a #GObject
+ * @property_id: the numeric id under which the property was registered with
+ *  g_object_class_install_property().
+ * @value: the new value for the property
+ * @pspec: the #GParamSpec describing the property
+ * 
+ * The type of the @set_property function of #GObjectClass. 
+ */
+typedef void (*GObjectSetPropertyFunc)  (GObject      *object,
+                                         guint         property_id,
+                                         const GValue *value,
+                                         GParamSpec   *pspec);
+/**
+ * GObjectFinalizeFunc:
+ * @object: the #GObject being finalized
+ * 
+ * The type of the @finalize function of #GObjectClass.
+ */
+typedef void (*GObjectFinalizeFunc)     (GObject      *object);
+/**
+ * GWeakNotify:
+ * @data: data that was provided when the weak reference was established
+ * @where_the_object_was: the object being finalized
+ * 
+ * A #GWeakNotify function can be added to an object as a callback that gets
+ * triggered when the object is finalized. Since the object is already being
+ * finalized when the #GWeakNotify is called, there's not much you could do 
+ * with the object, apart from e.g. using its adress as hash-index or the like. 
+ */
+typedef void (*GWeakNotify)		(gpointer      data,
+					 GObject      *where_the_object_was);
+/**
+ * GObject:
+ * 
+ * All the fields in the <structname>GObject</structname> structure are private 
+ * to the #GObject implementation and should never be accessed directly.
+ */
+struct  _GObject
+{
+  GTypeInstance  g_type_instance;
+  
+  /*< private >*/
+  volatile guint ref_count;
+  GData         *qdata;
+};
+/**
+ * GObjectClass:
+ * @g_type_class: the parent class
+ * @constructor: the @constructor function is called by g_object_new () to 
+ *  complete the object initialization after all the construction properties are
+ *  set. The first thing a @constructor implementation must do is chain up to the
+ *  @constructor of the parent class. Overriding @constructor should be rarely 
+ *  needed, e.g. to handle construct properties, or to implement singletons.
+ * @set_property: the generic setter for all properties of this type. Should be
+ *  overridden for every type with properties. Implementations of @set_property
+ *  don't need to emit property change notification explicitly, this is handled
+ *  by the type system.
+ * @get_property: the generic getter for all properties of this type. Should be
+ *  overridden for every type with properties.
+ * @dispose: the @dispose function is supposed to drop all references to other 
+ *  objects, but keep the instance otherwise intact, so that client method 
+ *  invocations still work. It may be run multiple times (due to reference 
+ *  loops). Before returning, @dispose should chain up to the @dispose method 
+ *  of the parent class.
+ * @finalize: instance finalization function, should finish the finalization of 
+ *  the instance begun in @dispose and chain up to the @finalize method of the 
+ *  parent class.
+ * @dispatch_properties_changed: emits property change notification for a bunch
+ *  of properties. Overriding @dispatch_properties_changed should be rarely 
+ *  needed.
+ * @notify: the class closure for the notify signal
+ * @constructed: the @constructed function is called by g_object_new() as the
+ *  final step of the object creation process.  At the point of the call, all
+ *  construction properties have been set on the object.  The purpose of this
+ *  call is to allow for object initialisation steps that can only be performed
+ *  after construction properties have been set.  @constructed implementors
+ *  should chain up to the @constructed call of their parent class to allow it
+ *  to complete its initialisation.
+ * 
+ * The class structure for the <structname>GObject</structname> type.
+ * 
+ * <example>
+ * <title>Implementing singletons using a constructor</title>
+ * <programlisting>
+ * static MySingleton *the_singleton = NULL;
+ * 
+ * static GObject*
+ * my_singleton_constructor (GType                  type,
+ *                           guint                  n_construct_params,
+ *                           GObjectConstructParam *construct_params)
+ * {
+ *   GObject *object;
+ *   
+ *   if (!the_singleton)
+ *     {
+ *       object = G_OBJECT_CLASS (parent_class)->constructor (type,
+ *                                                            n_construct_params,
+ *                                                            construct_params);
+ *       the_singleton = MY_SINGLETON (object);
+ *     }
+ *   else
+ *     object = g_object_ref (G_OBJECT (the_singleton));
+ * 
+ *   return object;
+ * }
+ * </programlisting></example>
+ */
+struct  _GObjectClass
+{
+  GTypeClass   g_type_class;
+
+  /*< private >*/
+  GSList      *construct_properties;
+
+  /*< public >*/
+  /* seldomly overidden */
+  GObject*   (*constructor)     (GType                  type,
+                                 guint                  n_construct_properties,
+                                 GObjectConstructParam *construct_properties);
+  /* overridable methods */
+  void       (*set_property)		(GObject        *object,
+                                         guint           property_id,
+                                         const GValue   *value,
+                                         GParamSpec     *pspec);
+  void       (*get_property)		(GObject        *object,
+                                         guint           property_id,
+                                         GValue         *value,
+                                         GParamSpec     *pspec);
+  void       (*dispose)			(GObject        *object);
+  void       (*finalize)		(GObject        *object);
+  /* seldomly overidden */
+  void       (*dispatch_properties_changed) (GObject      *object,
+					     guint	   n_pspecs,
+					     GParamSpec  **pspecs);
+  /* signals */
+  void	     (*notify)			(GObject	*object,
+					 GParamSpec	*pspec);
+
+  /* called when done constructing */
+  void	     (*constructed)		(GObject	*object);
+
+  /*< private >*/
+  /* padding */
+  gpointer	pdummy[7];
+};
+/**
+ * GObjectConstructParam:
+ * @pspec: the #GParamSpec of the construct parameter
+ * @value: the value to set the parameter to
+ * 
+ * The <structname>GObjectConstructParam</structname> struct is an auxiliary 
+ * structure used to hand #GParamSpec/#GValue pairs to the @constructor of
+ * a #GObjectClass.
+ */
+struct _GObjectConstructParam
+{
+  GParamSpec *pspec;
+  GValue     *value;
+};
+
+/**
+ * GInitiallyUnowned:
+ * 
+ * All the fields in the <structname>GInitiallyUnowned</structname> structure 
+ * are private to the #GInitiallyUnowned implementation and should never be 
+ * accessed directly.
+ */
+/**
+ * GInitiallyUnownedClass:
+ * 
+ * The class structure for the <structname>GInitiallyUnowned</structname> type.
+ */
+
+
+/* --- prototypes --- */
+GType       g_initially_unowned_get_type      (void);
+void        g_object_class_install_property   (GObjectClass   *oclass,
+					       guint           property_id,
+					       GParamSpec     *pspec);
+GParamSpec* g_object_class_find_property      (GObjectClass   *oclass,
+					       const gchar    *property_name);
+GParamSpec**g_object_class_list_properties    (GObjectClass   *oclass,
+					       guint	      *n_properties);
+void        g_object_class_override_property  (GObjectClass   *oclass,
+					       guint           property_id,
+					       const gchar    *name);
+
+void        g_object_interface_install_property (gpointer     g_iface,
+						 GParamSpec  *pspec);
+GParamSpec* g_object_interface_find_property    (gpointer     g_iface,
+						 const gchar *property_name);
+GParamSpec**g_object_interface_list_properties  (gpointer     g_iface,
+						 guint       *n_properties_p);
+
+GType       g_object_get_type                 (void) G_GNUC_CONST;
+gpointer    g_object_new                      (GType           object_type,
+					       const gchar    *first_property_name,
+					       ...);
+gpointer    g_object_newv		      (GType           object_type,
+					       guint	       n_parameters,
+					       GParameter     *parameters);
+GObject*    g_object_new_valist               (GType           object_type,
+					       const gchar    *first_property_name,
+					       va_list         var_args);
+void	    g_object_set                      (gpointer	       object,
+					       const gchar    *first_property_name,
+					       ...) G_GNUC_NULL_TERMINATED;
+void        g_object_get                      (gpointer        object,
+					       const gchar    *first_property_name,
+					       ...) G_GNUC_NULL_TERMINATED;
+gpointer    g_object_connect                  (gpointer	       object,
+					       const gchar    *signal_spec,
+					       ...) G_GNUC_NULL_TERMINATED;
+void	    g_object_disconnect               (gpointer	       object,
+					       const gchar    *signal_spec,
+					       ...) G_GNUC_NULL_TERMINATED;
+void        g_object_set_valist               (GObject        *object,
+					       const gchar    *first_property_name,
+					       va_list         var_args);
+void        g_object_get_valist               (GObject        *object,
+					       const gchar    *first_property_name,
+					       va_list         var_args);
+void        g_object_set_property             (GObject        *object,
+					       const gchar    *property_name,
+					       const GValue   *value);
+void        g_object_get_property             (GObject        *object,
+					       const gchar    *property_name,
+					       GValue         *value);
+void        g_object_freeze_notify            (GObject        *object);
+void        g_object_notify                   (GObject        *object,
+					       const gchar    *property_name);
+void        g_object_thaw_notify              (GObject        *object);
+gboolean    g_object_is_floating    	      (gpointer        object);
+gpointer    g_object_ref_sink       	      (gpointer	       object);
+gpointer    g_object_ref                      (gpointer        object);
+void        g_object_unref                    (gpointer        object);
+void	    g_object_weak_ref		      (GObject	      *object,
+					       GWeakNotify     notify,
+					       gpointer	       data);
+void	    g_object_weak_unref		      (GObject	      *object,
+					       GWeakNotify     notify,
+					       gpointer	       data);
+void        g_object_add_weak_pointer         (GObject        *object, 
+                                               gpointer       *weak_pointer_location);
+void        g_object_remove_weak_pointer      (GObject        *object, 
+                                               gpointer       *weak_pointer_location);
+
+/**
+ * GToggleNotify:
+ * @data: Callback data passed to g_object_add_toggle_ref()
+ * @object: The object on which g_object_add_toggle_ref() was called.
+ * @is_last_ref: %TRUE if the toggle reference is now the
+ *  last reference to the object. %FALSE if the toggle
+ *  reference was the last reference and there are now other
+ *  references.
+ * 
+ * A callback function used for notification when the state
+ * of a toggle reference changes. See g_object_add_toggle_ref().
+ */
+typedef void (*GToggleNotify) (gpointer      data,
+			       GObject      *object,
+			       gboolean      is_last_ref);
+
+void g_object_add_toggle_ref    (GObject       *object,
+				 GToggleNotify  notify,
+				 gpointer       data);
+void g_object_remove_toggle_ref (GObject       *object,
+				 GToggleNotify  notify,
+				 gpointer       data);
+
+gpointer    g_object_get_qdata                (GObject        *object,
+					       GQuark          quark);
+void        g_object_set_qdata                (GObject        *object,
+					       GQuark          quark,
+					       gpointer        data);
+void        g_object_set_qdata_full           (GObject        *object,
+					       GQuark          quark,
+					       gpointer        data,
+					       GDestroyNotify  destroy);
+gpointer    g_object_steal_qdata              (GObject        *object,
+					       GQuark          quark);
+gpointer    g_object_get_data                 (GObject        *object,
+					       const gchar    *key);
+void        g_object_set_data                 (GObject        *object,
+					       const gchar    *key,
+					       gpointer        data);
+void        g_object_set_data_full            (GObject        *object,
+					       const gchar    *key,
+					       gpointer        data,
+					       GDestroyNotify  destroy);
+gpointer    g_object_steal_data               (GObject        *object,
+					       const gchar    *key);
+void        g_object_watch_closure            (GObject        *object,
+					       GClosure       *closure);
+GClosure*   g_cclosure_new_object             (GCallback       callback_func,
+					       GObject	      *object);
+GClosure*   g_cclosure_new_object_swap        (GCallback       callback_func,
+					       GObject	      *object);
+GClosure*   g_closure_new_object              (guint           sizeof_closure,
+					       GObject        *object);
+void        g_value_set_object                (GValue         *value,
+					       gpointer        v_object);
+gpointer    g_value_get_object                (const GValue   *value);
+gpointer    g_value_dup_object                (const GValue   *value);
+gulong	    g_signal_connect_object           (gpointer	       instance,
+					       const gchar    *detailed_signal,
+					       GCallback       c_handler,
+					       gpointer	       gobject,
+					       GConnectFlags   connect_flags);
+
+/*< protected >*/
+void        g_object_force_floating           (GObject        *object);
+void        g_object_run_dispose	      (GObject	      *object);
+
+
+void        g_value_take_object               (GValue         *value,
+					       gpointer        v_object);
+#ifndef G_DISABLE_DEPRECATED
+void        g_value_set_object_take_ownership (GValue         *value,
+					       gpointer        v_object);
+#endif
+
+#if !defined(G_DISABLE_DEPRECATED) || defined(GTK_COMPILATION)
+gsize	    g_object_compat_control	      (gsize	       what,
+					       gpointer	       data);
+#endif
+
+/* --- implementation macros --- */
+#define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \
+G_STMT_START { \
+  GObject *_object = (GObject*) (object); \
+  GParamSpec *_pspec = (GParamSpec*) (pspec); \
+  guint _property_id = (property_id); \
+  g_warning ("%s: invalid %s id %u for \"%s\" of type `%s' in `%s'", \
+             G_STRLOC, \
+             (pname), \
+             _property_id, \
+             _pspec->name, \
+             g_type_name (G_PARAM_SPEC_TYPE (_pspec)), \
+             G_OBJECT_TYPE_NAME (_object)); \
+} G_STMT_END
+/**
+ * G_OBJECT_WARN_INVALID_PROPERTY_ID:
+ * @object: the #GObject on which set_property() or get_property() was called
+ * @property_id: the numeric id of the property
+ * @pspec: the #GParamSpec of the property
+ * 
+ * This macro should be used to emit a standard warning about unexpected 
+ * properties in set_property() and get_property() implementations.
+ */
+#define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \
+    G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec))
+
+G_END_DECLS
+
+#endif /* __G_OBJECT_H__ */
diff --git a/gobject/gobject.rc.in b/gobject/gobject.rc.in
new file mode 100644
index 0000000..0c819b8
--- /dev/null
+++ b/gobject/gobject.rc.in
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @GLIB_MAJOR_VERSION@,@GLIB_MINOR_VERSION@,@GLIB_MICRO_VERSION@,0
+  PRODUCTVERSION @GLIB_MAJOR_VERSION@,@GLIB_MINOR_VERSION@,@GLIB_MICRO_VERSION@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+	VALUE "CompanyName", "The GLib developer community"
+	VALUE "FileDescription", "GObject"
+	VALUE "FileVersion", "@GLIB_VERSION@.0"
+	VALUE "InternalName", "libgobject-2.0-@LT_CURRENT_MINUS_AGE@"
+	VALUE "LegalCopyright", "Copyright © 1998-2004 Tim Janik and Red Hat, Inc."
+	VALUE "OriginalFilename", "libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll"
+	VALUE "ProductName", "GLib"
+	VALUE "ProductVersion", "@GLIB_VERSION@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/gobject/gobject.symbols b/gobject/gobject.symbols
new file mode 100644
index 0000000..7a98dc3
--- /dev/null
+++ b/gobject/gobject.symbols
@@ -0,0 +1,441 @@
+/* This file lists all exported symbols. It is used to generate
+ * the gobject.def file used to control exports on Windows and the
+ * gobjectalias.h/gobjectaliasdef.c files used to avoid PLT entries for 
+ * internal uses of exported functions (see makegobjectalias.pl).
+ * 
+ * Every symbol must be included in the right
+ * #ifdef IN_HEADER(sym) #endif and
+ * #ifdef IN_FILE(sym) #endif sections. 
+ */
+#ifdef ALL_FILES
+#define IN_FILE(x) 1
+#define IN_HEADER(x) 1
+#endif
+#if IN_HEADER(__G_BOXED_H__)
+#if IN_FILE(__G_BOXED_C__)
+g_boxed_copy
+g_boxed_free
+g_boxed_type_register_static
+g_date_get_type G_GNUC_CONST
+g_gstring_get_type G_GNUC_CONST
+g_strv_get_type G_GNUC_CONST
+g_hash_table_get_type G_GNUC_CONST
+g_regex_get_type G_GNUC_CONST
+g_closure_get_type G_GNUC_CONST
+g_value_get_type G_GNUC_CONST
+g_value_array_get_type G_GNUC_CONST
+g_value_set_boxed
+g_value_take_boxed
+g_value_dup_boxed
+g_value_get_boxed
+g_value_set_static_boxed
+#ifndef G_DISABLE_DEPRECATED
+g_value_set_boxed_take_ownership
+#endif
+#endif
+#endif
+
+#if IN_HEADER(__G_MARSHAL_H__)
+#if IN_FILE(__G_SIGNAL_C__)
+g_cclosure_marshal_BOOLEAN__FLAGS
+g_cclosure_marshal_STRING__OBJECT_POINTER
+g_cclosure_marshal_VOID__BOOLEAN
+g_cclosure_marshal_VOID__BOXED
+g_cclosure_marshal_VOID__CHAR
+g_cclosure_marshal_VOID__DOUBLE
+g_cclosure_marshal_VOID__ENUM
+g_cclosure_marshal_VOID__FLAGS
+g_cclosure_marshal_VOID__FLOAT
+g_cclosure_marshal_VOID__INT
+g_cclosure_marshal_VOID__LONG
+g_cclosure_marshal_VOID__OBJECT
+g_cclosure_marshal_VOID__PARAM
+g_cclosure_marshal_VOID__POINTER
+g_cclosure_marshal_VOID__STRING
+g_cclosure_marshal_VOID__UCHAR
+g_cclosure_marshal_VOID__UINT
+g_cclosure_marshal_VOID__UINT_POINTER
+g_cclosure_marshal_VOID__ULONG
+g_cclosure_marshal_VOID__VOID
+#endif
+#endif
+
+#if IN_HEADER(__G_CLOSURE_H__)
+#if IN_FILE(__G_CLOSURE_C__)
+g_cclosure_new
+g_cclosure_new_swap
+g_closure_add_finalize_notifier
+g_closure_add_invalidate_notifier
+g_closure_add_marshal_guards
+g_closure_invalidate
+g_closure_invoke
+g_closure_new_simple
+g_closure_ref
+g_closure_remove_finalize_notifier
+g_closure_remove_invalidate_notifier
+g_closure_set_marshal
+g_closure_set_meta_marshal
+g_closure_sink
+g_closure_unref
+g_signal_type_cclosure_new
+#endif
+#endif
+
+#if IN_HEADER(__G_ENUMS_H__)
+#if IN_FILE(__G_ENUMS_C__)
+g_enum_complete_type_info
+g_enum_get_value
+g_enum_get_value_by_name
+g_enum_get_value_by_nick
+g_enum_register_static
+g_flags_complete_type_info
+g_flags_get_first_value
+g_flags_get_value_by_name
+g_flags_get_value_by_nick
+g_flags_register_static
+g_value_set_enum
+g_value_set_flags
+g_value_get_enum
+g_value_get_flags
+#endif
+#endif
+
+#if IN_HEADER(__G_SOURCECLOSURE_H__)
+#if IN_FILE(__G_SOURCECLOSURE_C__)
+g_io_channel_get_type
+g_io_condition_get_type
+g_source_set_closure
+#endif
+#endif
+
+#if IN_HEADER(__G_OBJECT_H__)
+#if IN_FILE(__G_OBJECT_C__)
+g_cclosure_new_object
+g_cclosure_new_object_swap
+g_closure_new_object
+g_initially_unowned_get_type
+g_object_add_weak_pointer
+g_object_class_find_property
+g_object_class_install_property
+g_object_class_list_properties
+g_object_class_override_property
+g_object_connect G_GNUC_NULL_TERMINATED
+g_object_disconnect G_GNUC_NULL_TERMINATED
+g_object_freeze_notify
+g_object_get G_GNUC_NULL_TERMINATED
+g_object_get_data
+g_object_get_property
+g_object_get_qdata
+g_object_get_type
+g_object_get_valist
+g_object_interface_find_property
+g_object_interface_install_property
+g_object_interface_list_properties
+g_object_new
+g_object_newv
+g_object_new_valist
+g_object_notify
+g_object_is_floating
+g_object_ref_sink
+g_object_force_floating
+g_object_ref
+g_object_unref
+g_object_remove_weak_pointer
+g_object_run_dispose
+g_object_set G_GNUC_NULL_TERMINATED
+g_object_set_data
+g_object_set_data_full
+g_object_set_property
+g_object_set_qdata
+g_object_set_qdata_full
+g_object_set_valist
+g_object_steal_data
+g_object_steal_qdata
+g_object_thaw_notify
+g_object_watch_closure
+g_object_weak_ref
+g_object_weak_unref
+g_object_add_toggle_ref
+g_object_remove_toggle_ref
+g_value_get_object
+g_value_set_object
+g_value_dup_object
+g_value_take_object
+#ifndef G_DISABLE_DEPRECATED
+g_value_set_object_take_ownership
+g_object_compat_control
+#endif
+g_signal_connect_object
+#endif
+#endif
+
+#if IN_HEADER(__G_PARAMSPECS_H__)
+#if IN_FILE(__G_PARAMSPECS_C__)
+g_param_spec_boolean
+g_param_spec_boxed
+g_param_spec_char
+g_param_spec_double
+g_param_spec_enum
+g_param_spec_flags
+g_param_spec_float
+g_param_spec_int
+g_param_spec_int64
+g_param_spec_long
+g_param_spec_object
+g_param_spec_override
+g_param_spec_gtype
+g_param_spec_param
+g_param_spec_pointer
+g_param_spec_string
+g_param_spec_uchar
+g_param_spec_uint
+g_param_spec_uint64
+g_param_spec_ulong
+g_param_spec_unichar
+g_param_spec_value_array
+#endif
+#endif
+
+#if IN_HEADER(__G_PARAM_H__)
+#if IN_FILE(__G_PARAM_C__) 
+g_param_spec_get_blurb
+g_param_spec_get_name
+g_param_spec_get_nick
+g_param_spec_get_redirect_target
+g_param_spec_internal
+g_param_type_register_static
+g_param_spec_ref
+g_param_spec_ref_sink
+g_param_spec_unref
+g_param_spec_sink
+g_param_spec_steal_qdata
+g_param_spec_set_qdata
+g_param_spec_set_qdata_full
+g_param_spec_get_qdata
+g_param_value_convert
+g_param_value_defaults
+g_param_values_cmp
+g_param_value_set_default
+g_param_value_validate
+g_param_spec_pool_insert
+g_param_spec_pool_list
+g_param_spec_pool_list_owned
+g_param_spec_pool_lookup
+g_param_spec_pool_new
+g_param_spec_pool_remove
+g_value_get_param
+g_value_set_param
+g_value_dup_param
+g_value_take_param
+#ifndef G_DISABLE_DEPRECATED
+g_value_set_param_take_ownership
+#endif
+#endif
+#endif
+
+#if IN_HEADER(__G_VALUETYPES_H__)
+#if IN_FILE(__G_VALUETYPES_C__)
+g_pointer_type_register_static
+g_strdup_value_contents
+g_value_set_boolean
+g_value_set_char
+g_value_set_double
+g_value_set_float
+g_value_set_int
+g_value_set_int64
+g_value_set_long
+g_value_set_pointer
+g_value_set_static_string
+g_value_set_string
+#ifndef G_DISABLE_DEPRECATED
+g_value_set_string_take_ownership
+#endif
+g_value_set_uchar
+g_value_set_uint
+g_value_set_uint64
+g_value_set_ulong
+g_value_dup_string
+g_value_get_boolean
+g_value_get_char
+g_value_get_double
+g_value_get_float
+g_value_get_int
+g_value_get_int64
+g_value_get_long
+g_value_get_pointer
+g_value_get_string
+g_value_get_uchar
+g_value_get_uint
+g_value_get_uint64
+g_value_get_ulong
+g_value_take_string
+g_gtype_get_type
+g_value_set_gtype
+g_value_get_gtype
+#endif
+#endif
+
+#if IN_HEADER(__G_SIGNAL_H__)
+#if IN_FILE(__G_SIGNAL_C__)
+g_signal_accumulator_true_handled
+g_signal_add_emission_hook
+g_signal_chain_from_overridden
+g_signal_chain_from_overridden_handler
+g_signal_connect_closure
+g_signal_connect_closure_by_id
+g_signal_connect_data
+g_signal_emit
+g_signal_emit_by_name
+g_signal_emitv
+g_signal_emit_valist
+g_signal_get_invocation_hint
+g_signal_handler_block
+g_signal_handler_disconnect
+g_signal_handler_find
+g_signal_handler_is_connected
+g_signal_handlers_block_matched
+g_signal_handlers_destroy
+g_signal_handlers_disconnect_matched
+g_signal_handlers_unblock_matched
+g_signal_handler_unblock
+g_signal_has_handler_pending
+g_signal_list_ids
+g_signal_lookup
+g_signal_name
+g_signal_new
+g_signal_newv
+g_signal_new_valist
+g_signal_new_class_handler
+g_signal_override_class_closure
+g_signal_override_class_handler
+g_signal_parse_name
+g_signal_query
+g_signal_remove_emission_hook
+g_signal_stop_emission
+g_signal_stop_emission_by_name
+#endif
+#endif
+
+#if IN_HEADER(__G_TYPE_H__)
+#if IN_FILE(__G_TYPE_C__)
+g_type_add_class_cache_func
+g_type_add_interface_check
+g_type_add_interface_dynamic
+g_type_add_interface_static
+g_type_check_class_cast
+g_type_check_class_is_a
+g_type_check_instance 
+g_type_check_instance_cast
+g_type_check_instance_is_a
+g_type_check_is_value_type
+g_type_check_value
+g_type_check_value_holds
+g_type_children
+g_type_class_add_private
+g_type_class_peek
+g_type_class_peek_parent
+g_type_class_peek_static
+g_type_class_ref
+g_type_class_unref
+g_type_class_unref_uncached
+g_type_create_instance
+g_type_default_interface_peek
+g_type_default_interface_ref
+g_type_default_interface_unref
+g_type_depth
+g_type_free_instance
+g_type_from_name
+g_type_fundamental
+g_type_fundamental_next
+g_type_get_plugin
+g_type_get_qdata
+g_type_init
+g_type_init_with_debug_flags
+g_type_instance_get_private
+g_type_interface_add_prerequisite
+g_type_interface_get_plugin
+g_type_interface_peek
+g_type_interface_peek_parent
+g_type_interface_prerequisites
+g_type_interfaces
+g_type_is_a
+g_type_name
+g_type_name_from_class
+g_type_name_from_instance
+g_type_next_base
+g_type_parent
+g_type_qname
+g_type_query
+g_type_register_dynamic
+g_type_register_fundamental
+g_type_register_static
+g_type_register_static_simple
+g_type_remove_class_cache_func
+g_type_remove_interface_check
+g_type_set_qdata
+g_type_test_flags
+g_type_value_table_peek
+#endif
+#endif
+
+#if IN_HEADER(__G_TYPE_MODULE_H__)
+#if IN_FILE(__G_TYPE_MODULE_C__)
+g_type_module_add_interface
+g_type_module_get_type G_GNUC_CONST
+g_type_module_register_enum
+g_type_module_register_flags
+g_type_module_register_type
+g_type_module_set_name
+g_type_module_unuse
+g_type_module_use
+#endif
+#endif
+
+#if IN_HEADER(__G_VALUE_ARRAY_H__)
+#if IN_FILE(__G_VALUE_ARRAY_C__)
+g_value_array_append
+g_value_array_copy
+g_value_array_free
+g_value_array_get_nth
+g_value_array_insert
+g_value_array_new
+g_value_array_prepend
+g_value_array_remove
+g_value_array_sort
+g_value_array_sort_with_data
+#endif
+#endif
+
+#if IN_HEADER(__G_TYPE_PLUGIN_H__)
+#if IN_FILE(__G_TYPE_PLUGIN_C__)
+g_type_plugin_complete_interface_info
+g_type_plugin_complete_type_info
+g_type_plugin_get_type G_GNUC_CONST
+g_type_plugin_unuse
+g_type_plugin_use
+#endif
+#endif
+
+#if IN_HEADER(__G_VALUE_H__)
+#if IN_FILE(__G_VALUE_C__)
+g_value_copy
+g_value_fits_pointer
+g_value_init
+g_value_peek_pointer
+g_value_register_transform_func
+g_value_reset
+g_value_transform
+g_value_type_compatible
+g_value_type_transformable
+g_value_unset
+g_value_set_instance
+#endif
+#endif
+
+#ifdef INCLUDE_VARIABLES
+g_param_spec_types
+#endif
+#ifdef INCLUDE_INTERNAL_SYMBOLS
+g_slist_remove_all PRIVATE
+g_unichar_validate PRIVATE
+#endif
diff --git a/gobject/gobjectnotifyqueue.c b/gobject/gobjectnotifyqueue.c
new file mode 100644
index 0000000..1d5787b
--- /dev/null
+++ b/gobject/gobjectnotifyqueue.c
@@ -0,0 +1,171 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#ifndef __G_OBJECT_NOTIFY_QUEUE_H__
+#define __G_OBJECT_NOTIFY_QUEUE_H__
+
+#include <string.h> /* memset */
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+
+/* --- typedefs --- */
+typedef struct _GObjectNotifyContext          GObjectNotifyContext;
+typedef struct _GObjectNotifyQueue            GObjectNotifyQueue;
+typedef void (*GObjectNotifyQueueDispatcher) (GObject     *object,
+					      guint        n_pspecs,
+					      GParamSpec **pspecs);
+
+
+/* --- structures --- */
+struct _GObjectNotifyContext
+{
+  GQuark                       quark_notify_queue;
+  GObjectNotifyQueueDispatcher dispatcher;
+  GTrashStack                 *_nqueue_trash; /* unused */
+};
+struct _GObjectNotifyQueue
+{
+  GObjectNotifyContext *context;
+  GSList               *pspecs;
+  guint16               n_pspecs;
+  guint16               freeze_count;
+  /* currently, this structure abuses the GList allocation chain and thus
+   * must be <= sizeof (GList)
+   */
+};
+
+
+/* --- functions --- */
+static void
+g_object_notify_queue_free (gpointer data)
+{
+  GObjectNotifyQueue *nqueue = data;
+
+  g_slist_free (nqueue->pspecs);
+  g_list_free_1 ((void*) nqueue);
+}
+
+static inline GObjectNotifyQueue*
+g_object_notify_queue_freeze (GObject		   *object,
+			      GObjectNotifyContext *context)
+{
+  GObjectNotifyQueue *nqueue;
+
+  nqueue = g_datalist_id_get_data (&object->qdata, context->quark_notify_queue);
+  if (!nqueue)
+    {
+      nqueue = (void*) g_list_alloc ();
+      memset (nqueue, 0, sizeof (*nqueue));
+      nqueue->context = context;
+      g_datalist_id_set_data_full (&object->qdata, context->quark_notify_queue,
+				   nqueue, g_object_notify_queue_free);
+    }
+
+  g_return_val_if_fail (nqueue->freeze_count < 65535, nqueue);
+  nqueue->freeze_count++;
+
+  return nqueue;
+}
+
+static inline void
+g_object_notify_queue_thaw (GObject            *object,
+			    GObjectNotifyQueue *nqueue)
+{
+  GObjectNotifyContext *context = nqueue->context;
+  GParamSpec *pspecs_mem[16], **pspecs, **free_me = NULL;
+  GSList *slist;
+  guint n_pspecs = 0;
+
+  g_return_if_fail (nqueue->freeze_count > 0);
+
+  nqueue->freeze_count--;
+  if (nqueue->freeze_count)
+    return;
+  g_return_if_fail (object->ref_count > 0);
+
+  pspecs = nqueue->n_pspecs > 16 ? free_me = g_new (GParamSpec*, nqueue->n_pspecs) : pspecs_mem;
+  /* set first entry to NULL since it's checked unconditionally */
+  pspecs[0] = NULL;
+  for (slist = nqueue->pspecs; slist; slist = slist->next)
+    {
+      GParamSpec *pspec = slist->data;
+      guint i = 0;
+
+      /* dedup, make pspecs in the list unique */
+    redo_dedup_check:
+      if (pspecs[i] == pspec)
+	continue;
+      if (++i < n_pspecs)
+	goto redo_dedup_check;
+
+      pspecs[n_pspecs++] = pspec;
+    }
+  g_datalist_id_set_data (&object->qdata, context->quark_notify_queue, NULL);
+
+  if (n_pspecs)
+    context->dispatcher (object, n_pspecs, pspecs);
+  g_free (free_me);
+}
+
+static inline void
+g_object_notify_queue_clear (GObject            *object,
+			     GObjectNotifyQueue *nqueue)
+{
+  g_return_if_fail (nqueue->freeze_count > 0);
+
+  g_slist_free (nqueue->pspecs);
+  nqueue->pspecs = NULL;
+  nqueue->n_pspecs = 0;
+}
+
+static inline void
+g_object_notify_queue_add (GObject            *object,
+			   GObjectNotifyQueue *nqueue,
+			   GParamSpec	      *pspec)
+{
+  if (pspec->flags & G_PARAM_READABLE)
+    {
+      GParamSpec *redirect;
+
+      g_return_if_fail (nqueue->n_pspecs < 65535);
+
+      redirect = g_param_spec_get_redirect_target (pspec);
+      if (redirect)
+	pspec = redirect;
+	    
+      /* we do the deduping in _thaw */
+      nqueue->pspecs = g_slist_prepend (nqueue->pspecs, pspec);
+      nqueue->n_pspecs++;
+    }
+}
+
+static inline GObjectNotifyQueue*
+g_object_notify_queue_from_object (GObject              *object,
+				   GObjectNotifyContext *context)
+{
+  return g_datalist_id_get_data (&object->qdata, context->quark_notify_queue);
+}
+
+
+G_END_DECLS
+
+#endif /* __G_OBJECT_NOTIFY_QUEUE_H__ */
diff --git a/gobject/gparam.c b/gobject/gparam.c
new file mode 100644
index 0000000..139baa0
--- /dev/null
+++ b/gobject/gparam.c
@@ -0,0 +1,1501 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gparam.h"
+#include "gparamspecs.h"
+#include "gvaluecollector.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:gparamspec
+ * @short_description: Metadata for parameter specifications
+ * @see_also: g_object_class_install_property(), g_object_set(),
+ *     g_object_get(), g_object_set_property(), g_object_get_property(),
+ *     g_value_register_transform_func()
+ * @title: GParamSpec
+ *
+ * #GParamSpec is an object structure that encapsulates the metadata
+ * required to specify parameters, such as e.g. #GObject properties.
+ *
+ * <para id="canonical-parameter-name">
+ * Parameter names need to start with a letter (a-z or A-Z). Subsequent
+ * characters can be letters, numbers or a '-'.
+ * All other characters are replaced by a '-' during construction.
+ * The result of this replacement is called the canonical name of the
+ * parameter.
+ * </para>
+ */
+
+
+/* --- defines --- */
+#define PARAM_FLOATING_FLAG                     0x2
+#define	G_PARAM_USER_MASK			(~0 << G_PARAM_USER_SHIFT)
+#define PSPEC_APPLIES_TO_VALUE(pspec, value)	(G_TYPE_CHECK_VALUE_TYPE ((value), G_PARAM_SPEC_VALUE_TYPE (pspec)))
+#define	G_SLOCK(mutex)				g_static_mutex_lock (mutex)
+#define	G_SUNLOCK(mutex)			g_static_mutex_unlock (mutex)
+
+
+/* --- prototypes --- */
+static void	g_param_spec_class_base_init	 (GParamSpecClass	*class);
+static void	g_param_spec_class_base_finalize (GParamSpecClass	*class);
+static void	g_param_spec_class_init		 (GParamSpecClass	*class,
+						  gpointer               class_data);
+static void	g_param_spec_init		 (GParamSpec		*pspec,
+						  GParamSpecClass	*class);
+static void	g_param_spec_finalize		 (GParamSpec		*pspec);
+static void	value_param_init		(GValue		*value);
+static void	value_param_free_value		(GValue		*value);
+static void	value_param_copy_value		(const GValue	*src_value,
+						 GValue		*dest_value);
+static void	value_param_transform_value	(const GValue	*src_value,
+						 GValue		*dest_value);
+static gpointer	value_param_peek_pointer	(const GValue	*value);
+static gchar*	value_param_collect_value	(GValue		*value,
+						 guint           n_collect_values,
+						 GTypeCValue    *collect_values,
+						 guint           collect_flags);
+static gchar*	value_param_lcopy_value		(const GValue	*value,
+						 guint           n_collect_values,
+						 GTypeCValue    *collect_values,
+						 guint           collect_flags);
+
+
+/* --- functions --- */
+void
+g_param_type_init (void)
+{
+  static const GTypeFundamentalInfo finfo = {
+    (G_TYPE_FLAG_CLASSED |
+     G_TYPE_FLAG_INSTANTIATABLE |
+     G_TYPE_FLAG_DERIVABLE |
+     G_TYPE_FLAG_DEEP_DERIVABLE),
+  };
+  static const GTypeValueTable param_value_table = {
+    value_param_init,           /* value_init */
+    value_param_free_value,     /* value_free */
+    value_param_copy_value,     /* value_copy */
+    value_param_peek_pointer,   /* value_peek_pointer */
+    "p",			/* collect_format */
+    value_param_collect_value,  /* collect_value */
+    "p",			/* lcopy_format */
+    value_param_lcopy_value,    /* lcopy_value */
+  };
+  static const GTypeInfo param_spec_info = {
+    sizeof (GParamSpecClass),
+
+    (GBaseInitFunc) g_param_spec_class_base_init,
+    (GBaseFinalizeFunc) g_param_spec_class_base_finalize,
+    (GClassInitFunc) g_param_spec_class_init,
+    (GClassFinalizeFunc) NULL,
+    NULL,	/* class_data */
+
+    sizeof (GParamSpec),
+    0,		/* n_preallocs */
+    (GInstanceInitFunc) g_param_spec_init,
+
+    &param_value_table,
+  };
+  GType type;
+
+  /* This should be registred as GParamSpec instead of GParam, for
+   * consistency sake, so that type name can be mapped to struct name,
+   * However, some language bindings, most noticable the python ones
+   * depends on the "GParam" identifier, see #548689
+   */
+  type = g_type_register_fundamental (G_TYPE_PARAM, g_intern_static_string ("GParam"), &param_spec_info, &finfo, G_TYPE_FLAG_ABSTRACT);
+  g_assert (type == G_TYPE_PARAM);
+  g_value_register_transform_func (G_TYPE_PARAM, G_TYPE_PARAM, value_param_transform_value);
+}
+
+static void
+g_param_spec_class_base_init (GParamSpecClass *class)
+{
+}
+
+static void
+g_param_spec_class_base_finalize (GParamSpecClass *class)
+{
+}
+
+static void
+g_param_spec_class_init (GParamSpecClass *class,
+			 gpointer         class_data)
+{
+  class->value_type = G_TYPE_NONE;
+  class->finalize = g_param_spec_finalize;
+  class->value_set_default = NULL;
+  class->value_validate = NULL;
+  class->values_cmp = NULL;
+}
+
+static void
+g_param_spec_init (GParamSpec      *pspec,
+		   GParamSpecClass *class)
+{
+  pspec->name = NULL;
+  pspec->_nick = NULL;
+  pspec->_blurb = NULL;
+  pspec->flags = 0;
+  pspec->value_type = class->value_type;
+  pspec->owner_type = 0;
+  pspec->qdata = NULL;
+  g_datalist_init (&pspec->qdata);
+  g_datalist_set_flags (&pspec->qdata, PARAM_FLOATING_FLAG);
+  pspec->ref_count = 1;
+  pspec->param_id = 0;
+}
+
+static void
+g_param_spec_finalize (GParamSpec *pspec)
+{
+  g_datalist_clear (&pspec->qdata);
+
+  if (!(pspec->flags & G_PARAM_STATIC_NAME))
+    g_free (pspec->name);
+  
+  if (!(pspec->flags & G_PARAM_STATIC_NICK))
+    g_free (pspec->_nick);
+
+  if (!(pspec->flags & G_PARAM_STATIC_BLURB))
+    g_free (pspec->_blurb);
+
+  g_type_free_instance ((GTypeInstance*) pspec);
+}
+
+/**
+ * g_param_spec_ref:
+ * @pspec: a valid #GParamSpec
+ *
+ * Increments the reference count of @pspec.
+ *
+ * Returns: the #GParamSpec that was passed into this function
+ */
+GParamSpec*
+g_param_spec_ref (GParamSpec *pspec)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+  g_return_val_if_fail (pspec->ref_count > 0, NULL);
+
+  g_atomic_int_inc ((int *)&pspec->ref_count);
+
+  return pspec;
+}
+
+/**
+ * g_param_spec_unref:
+ * @pspec: a valid #GParamSpec
+ *
+ * Decrements the reference count of a @pspec.
+ */
+void
+g_param_spec_unref (GParamSpec *pspec)
+{
+  gboolean is_zero;
+
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  g_return_if_fail (pspec->ref_count > 0);
+
+  is_zero = g_atomic_int_dec_and_test ((int *)&pspec->ref_count);
+
+  if (G_UNLIKELY (is_zero))
+    {
+      G_PARAM_SPEC_GET_CLASS (pspec)->finalize (pspec);
+    }
+}
+
+/**
+ * g_param_spec_sink:
+ * @pspec: a valid #GParamSpec
+ *
+ * The initial reference count of a newly created #GParamSpec is 1,
+ * even though no one has explicitly called g_param_spec_ref() on it
+ * yet. So the initial reference count is flagged as "floating", until
+ * someone calls <literal>g_param_spec_ref (pspec); g_param_spec_sink
+ * (pspec);</literal> in sequence on it, taking over the initial
+ * reference count (thus ending up with a @pspec that has a reference
+ * count of 1 still, but is not flagged "floating" anymore).
+ */
+void
+g_param_spec_sink (GParamSpec *pspec)
+{
+  gpointer oldvalue;
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  g_return_if_fail (pspec->ref_count > 0);
+
+  do
+    oldvalue = g_atomic_pointer_get (&pspec->qdata);
+  while (!g_atomic_pointer_compare_and_exchange ((void**) &pspec->qdata, oldvalue,
+                                                 (gpointer) ((gsize) oldvalue & ~(gsize) PARAM_FLOATING_FLAG)));
+  if ((gsize) oldvalue & PARAM_FLOATING_FLAG)
+    g_param_spec_unref (pspec);
+}
+
+/**
+ * g_param_spec_ref_sink:
+ * @pspec: a valid #GParamSpec
+ *
+ * Convenience function to ref and sink a #GParamSpec.
+ *
+ * Since: 2.10
+ * Returns: the #GParamSpec that was passed into this function
+ */
+GParamSpec*
+g_param_spec_ref_sink (GParamSpec *pspec)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+  g_return_val_if_fail (pspec->ref_count > 0, NULL);
+
+  g_param_spec_ref (pspec);
+  g_param_spec_sink (pspec);
+  return pspec;
+}
+
+/**
+ * g_param_spec_get_name:
+ * @pspec: a valid #GParamSpec
+ *
+ * Get the name of a #GParamSpec.
+ *
+ * Returns: the name of @pspec.
+ */
+G_CONST_RETURN gchar*
+g_param_spec_get_name (GParamSpec *pspec)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+
+  return pspec->name;
+}
+
+/**
+ * g_param_spec_get_nick:
+ * @pspec: a valid #GParamSpec
+ *
+ * Get the nickname of a #GParamSpec.
+ *
+ * Returns: the nickname of @pspec.
+ */
+G_CONST_RETURN gchar*
+g_param_spec_get_nick (GParamSpec *pspec)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+
+  if (pspec->_nick)
+    return pspec->_nick;
+  else
+    {
+      GParamSpec *redirect_target;
+
+      redirect_target = g_param_spec_get_redirect_target (pspec);
+      if (redirect_target && redirect_target->_nick)
+	return redirect_target->_nick;
+    }
+
+  return pspec->name;
+}
+
+/**
+ * g_param_spec_get_blurb:
+ * @pspec: a valid #GParamSpec
+ *
+ * Get the short description of a #GParamSpec.
+ *
+ * Returns: the short description of @pspec.
+ */
+G_CONST_RETURN gchar*
+g_param_spec_get_blurb (GParamSpec *pspec)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+
+  if (pspec->_blurb)
+    return pspec->_blurb;
+  else
+    {
+      GParamSpec *redirect_target;
+
+      redirect_target = g_param_spec_get_redirect_target (pspec);
+      if (redirect_target && redirect_target->_blurb)
+	return redirect_target->_blurb;
+    }
+
+  return NULL;
+}
+
+static void
+canonicalize_key (gchar *key)
+{
+  gchar *p;
+  
+  for (p = key; *p != 0; p++)
+    {
+      gchar c = *p;
+      
+      if (c != '-' &&
+	  (c < '0' || c > '9') &&
+	  (c < 'A' || c > 'Z') &&
+	  (c < 'a' || c > 'z'))
+	*p = '-';
+    }
+}
+
+static gboolean
+is_canonical (const gchar *key)
+{
+  const gchar *p;
+
+  for (p = key; *p != 0; p++)
+    {
+      gchar c = *p;
+      
+      if (c != '-' &&
+	  (c < '0' || c > '9') &&
+	  (c < 'A' || c > 'Z') &&
+	  (c < 'a' || c > 'z'))
+	return FALSE;
+    }
+
+  return TRUE;
+}
+
+/**
+ * g_param_spec_internal:
+ * @param_type: the #GType for the property; must be derived from #G_TYPE_PARAM
+ * @name: the canonical name of the property
+ * @nick: the nickname of the property
+ * @blurb: a short description of the property
+ * @flags: a combination of #GParamFlags
+ *
+ * Creates a new #GParamSpec instance.
+ *
+ * A property name consists of segments consisting of ASCII letters and
+ * digits, separated by either the '-' or '_' character. The first
+ * character of a property name must be a letter. Names which violate these
+ * rules lead to undefined behaviour.
+ *
+ * When creating and looking up a #GParamSpec, either separator can be
+ * used, but they cannot be mixed. Using '-' is considerably more
+ * efficient and in fact required when using property names as detail
+ * strings for signals.
+ *
+ * Beyond the name, #GParamSpec<!-- -->s have two more descriptive
+ * strings associated with them, the @nick, which should be suitable
+ * for use as a label for the property in a property editor, and the
+ * @blurb, which should be a somewhat longer description, suitable for
+ * e.g. a tooltip. The @nick and @blurb should ideally be localized.
+ *
+ * Returns: a newly allocated #GParamSpec instance
+ */
+gpointer
+g_param_spec_internal (GType        param_type,
+		       const gchar *name,
+		       const gchar *nick,
+		       const gchar *blurb,
+		       GParamFlags  flags)
+{
+  GParamSpec *pspec;
+  
+  g_return_val_if_fail (G_TYPE_IS_PARAM (param_type) && param_type != G_TYPE_PARAM, NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+  g_return_val_if_fail ((name[0] >= 'A' && name[0] <= 'Z') || (name[0] >= 'a' && name[0] <= 'z'), NULL);
+  g_return_val_if_fail (!(flags & G_PARAM_STATIC_NAME) || is_canonical (name), NULL);
+  
+  pspec = (gpointer) g_type_create_instance (param_type);
+
+  if (flags & G_PARAM_STATIC_NAME)
+    {
+      pspec->name = g_intern_static_string (name);
+      if (!is_canonical (pspec->name))
+        g_warning ("G_PARAM_STATIC_NAME used with non-canonical pspec name: %s", pspec->name);
+    }
+  else
+    {
+      pspec->name = g_strdup (name);
+      canonicalize_key (pspec->name);
+      g_intern_string (pspec->name);
+    }
+
+  if (flags & G_PARAM_STATIC_NICK)
+    pspec->_nick = (gchar*) nick;
+  else
+    pspec->_nick = g_strdup (nick);
+
+  if (flags & G_PARAM_STATIC_BLURB)
+    pspec->_blurb = (gchar*) blurb;
+  else
+    pspec->_blurb = g_strdup (blurb);
+
+  pspec->flags = (flags & G_PARAM_USER_MASK) | (flags & G_PARAM_MASK);
+  
+  return pspec;
+}
+
+/**
+ * g_param_spec_get_qdata:
+ * @pspec: a valid #GParamSpec
+ * @quark: a #GQuark, naming the user data pointer
+ *
+ * Gets back user data pointers stored via g_param_spec_set_qdata().
+ *
+ * Returns: the user data pointer set, or %NULL
+ */
+gpointer
+g_param_spec_get_qdata (GParamSpec *pspec,
+			GQuark      quark)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+  
+  return quark ? g_datalist_id_get_data (&pspec->qdata, quark) : NULL;
+}
+
+/**
+ * g_param_spec_set_qdata:
+ * @pspec: the #GParamSpec to set store a user data pointer
+ * @quark: a #GQuark, naming the user data pointer
+ * @data: an opaque user data pointer
+ *
+ * Sets an opaque, named pointer on a #GParamSpec. The name is
+ * specified through a #GQuark (retrieved e.g. via
+ * g_quark_from_static_string()), and the pointer can be gotten back
+ * from the @pspec with g_param_spec_get_qdata().  Setting a
+ * previously set user data pointer, overrides (frees) the old pointer
+ * set, using %NULL as pointer essentially removes the data stored.
+ */
+void
+g_param_spec_set_qdata (GParamSpec *pspec,
+			GQuark      quark,
+			gpointer    data)
+{
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  g_return_if_fail (quark > 0);
+
+  g_datalist_id_set_data (&pspec->qdata, quark, data);
+}
+
+/**
+ * g_param_spec_set_qdata_full:
+ * @pspec: the #GParamSpec to set store a user data pointer
+ * @quark: a #GQuark, naming the user data pointer
+ * @data: an opaque user data pointer
+ * @destroy: function to invoke with @data as argument, when @data needs to
+ *  be freed
+ *
+ * This function works like g_param_spec_set_qdata(), but in addition,
+ * a <literal>void (*destroy) (gpointer)</literal> function may be
+ * specified which is called with @data as argument when the @pspec is
+ * finalized, or the data is being overwritten by a call to
+ * g_param_spec_set_qdata() with the same @quark.
+ */
+void
+g_param_spec_set_qdata_full (GParamSpec    *pspec,
+			     GQuark         quark,
+			     gpointer       data,
+			     GDestroyNotify destroy)
+{
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  g_return_if_fail (quark > 0);
+
+  g_datalist_id_set_data_full (&pspec->qdata, quark, data, data ? destroy : (GDestroyNotify) NULL);
+}
+
+/**
+ * g_param_spec_steal_qdata:
+ * @pspec: the #GParamSpec to get a stored user data pointer from
+ * @quark: a #GQuark, naming the user data pointer
+ *
+ * Gets back user data pointers stored via g_param_spec_set_qdata()
+ * and removes the @data from @pspec without invoking its destroy()
+ * function (if any was set).  Usually, calling this function is only
+ * required to update user data pointers with a destroy notifier.
+ *
+ * Returns: the user data pointer set, or %NULL
+ */
+gpointer
+g_param_spec_steal_qdata (GParamSpec *pspec,
+			  GQuark      quark)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+  g_return_val_if_fail (quark > 0, NULL);
+  
+  return g_datalist_id_remove_no_notify (&pspec->qdata, quark);
+}
+
+/**
+ * g_param_spec_get_redirect_target:
+ * @pspec: a #GParamSpec
+ *
+ * If the paramspec redirects operations to another paramspec,
+ * returns that paramspec. Redirect is used typically for
+ * providing a new implementation of a property in a derived
+ * type while preserving all the properties from the parent
+ * type. Redirection is established by creating a property
+ * of type #GParamSpecOverride. See g_object_class_override_property()
+ * for an example of the use of this capability.
+ *
+ * Since: 2.4
+ *
+ * Returns: paramspec to which requests on this paramspec should
+ *          be redirected, or %NULL if none.
+ */
+GParamSpec*
+g_param_spec_get_redirect_target (GParamSpec *pspec)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), NULL);
+
+  if (G_IS_PARAM_SPEC_OVERRIDE (pspec))
+    {
+      GParamSpecOverride *ospec = G_PARAM_SPEC_OVERRIDE (pspec);
+
+      return ospec->overridden;
+    }
+  else
+    return NULL;
+}
+
+/**
+ * g_param_value_set_default:
+ * @pspec: a valid #GParamSpec
+ * @value: a #GValue of correct type for @pspec
+ *
+ * Sets @value to its default value as specified in @pspec.
+ */
+void
+g_param_value_set_default (GParamSpec *pspec,
+			   GValue     *value)
+{
+  g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+  g_return_if_fail (G_IS_VALUE (value));
+  g_return_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value));
+
+  g_value_reset (value);
+  G_PARAM_SPEC_GET_CLASS (pspec)->value_set_default (pspec, value);
+}
+
+/**
+ * g_param_value_defaults:
+ * @pspec: a valid #GParamSpec
+ * @value: a #GValue of correct type for @pspec
+ *
+ * Checks whether @value contains the default value as specified in @pspec.
+ *
+ * Returns: whether @value contains the canonical default for this @pspec
+ */
+gboolean
+g_param_value_defaults (GParamSpec *pspec,
+			GValue     *value)
+{
+  GValue dflt_value = { 0, };
+  gboolean defaults;
+
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), FALSE);
+  g_return_val_if_fail (G_IS_VALUE (value), FALSE);
+  g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value), FALSE);
+
+  g_value_init (&dflt_value, G_PARAM_SPEC_VALUE_TYPE (pspec));
+  G_PARAM_SPEC_GET_CLASS (pspec)->value_set_default (pspec, &dflt_value);
+  defaults = G_PARAM_SPEC_GET_CLASS (pspec)->values_cmp (pspec, value, &dflt_value) == 0;
+  g_value_unset (&dflt_value);
+
+  return defaults;
+}
+
+/**
+ * g_param_value_validate:
+ * @pspec: a valid #GParamSpec
+ * @value: a #GValue of correct type for @pspec
+ *
+ * Ensures that the contents of @value comply with the specifications
+ * set out by @pspec. For example, a #GParamSpecInt might require
+ * that integers stored in @value may not be smaller than -42 and not be
+ * greater than +42. If @value contains an integer outside of this range,
+ * it is modified accordingly, so the resulting value will fit into the
+ * range -42 .. +42.
+ *
+ * Returns: whether modifying @value was necessary to ensure validity
+ */
+gboolean
+g_param_value_validate (GParamSpec *pspec,
+			GValue     *value)
+{
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), FALSE);
+  g_return_val_if_fail (G_IS_VALUE (value), FALSE);
+  g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value), FALSE);
+
+  if (G_PARAM_SPEC_GET_CLASS (pspec)->value_validate)
+    {
+      GValue oval = *value;
+
+      if (G_PARAM_SPEC_GET_CLASS (pspec)->value_validate (pspec, value) ||
+	  memcmp (&oval.data, &value->data, sizeof (oval.data)))
+	return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * g_param_value_convert:
+ * @pspec: a valid #GParamSpec
+ * @src_value: souce #GValue
+ * @dest_value: destination #GValue of correct type for @pspec
+ * @strict_validation: %TRUE requires @dest_value to conform to @pspec
+ * without modifications
+ *
+ * Transforms @src_value into @dest_value if possible, and then
+ * validates @dest_value, in order for it to conform to @pspec.  If
+ * @strict_validation is %TRUE this function will only succeed if the
+ * transformed @dest_value complied to @pspec without modifications.
+ *
+ * See also g_value_type_transformable(), g_value_transform() and
+ * g_param_value_validate().
+ *
+ * Returns: %TRUE if transformation and validation were successful,
+ *  %FALSE otherwise and @dest_value is left untouched.
+ */
+gboolean
+g_param_value_convert (GParamSpec   *pspec,
+		       const GValue *src_value,
+		       GValue       *dest_value,
+		       gboolean	     strict_validation)
+{
+  GValue tmp_value = { 0, };
+
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), FALSE);
+  g_return_val_if_fail (G_IS_VALUE (src_value), FALSE);
+  g_return_val_if_fail (G_IS_VALUE (dest_value), FALSE);
+  g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, dest_value), FALSE);
+
+  /* better leave dest_value untouched when returning FALSE */
+
+  g_value_init (&tmp_value, G_VALUE_TYPE (dest_value));
+  if (g_value_transform (src_value, &tmp_value) &&
+      (!g_param_value_validate (pspec, &tmp_value) || !strict_validation))
+    {
+      g_value_unset (dest_value);
+      
+      /* values are relocatable */
+      memcpy (dest_value, &tmp_value, sizeof (tmp_value));
+      
+      return TRUE;
+    }
+  else
+    {
+      g_value_unset (&tmp_value);
+      
+      return FALSE;
+    }
+}
+
+/**
+ * g_param_values_cmp:
+ * @pspec: a valid #GParamSpec
+ * @value1: a #GValue of correct type for @pspec
+ * @value2: a #GValue of correct type for @pspec
+ *
+ * Compares @value1 with @value2 according to @pspec, and return -1, 0 or +1,
+ * if @value1 is found to be less than, equal to or greater than @value2,
+ * respectively.
+ *
+ * Returns: -1, 0 or +1, for a less than, equal to or greater than result
+ */
+gint
+g_param_values_cmp (GParamSpec   *pspec,
+		    const GValue *value1,
+		    const GValue *value2)
+{
+  gint cmp;
+
+  /* param_values_cmp() effectively does: value1 - value2
+   * so the return values are:
+   * -1)  value1 < value2
+   *  0)  value1 == value2
+   *  1)  value1 > value2
+   */
+  g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), 0);
+  g_return_val_if_fail (G_IS_VALUE (value1), 0);
+  g_return_val_if_fail (G_IS_VALUE (value2), 0);
+  g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value1), 0);
+  g_return_val_if_fail (PSPEC_APPLIES_TO_VALUE (pspec, value2), 0);
+
+  cmp = G_PARAM_SPEC_GET_CLASS (pspec)->values_cmp (pspec, value1, value2);
+
+  return CLAMP (cmp, -1, 1);
+}
+
+static void
+value_param_init (GValue *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static void
+value_param_free_value (GValue *value)
+{
+  if (value->data[0].v_pointer)
+    g_param_spec_unref (value->data[0].v_pointer);
+}
+
+static void
+value_param_copy_value (const GValue *src_value,
+			GValue       *dest_value)
+{
+  if (src_value->data[0].v_pointer)
+    dest_value->data[0].v_pointer = g_param_spec_ref (src_value->data[0].v_pointer);
+  else
+    dest_value->data[0].v_pointer = NULL;
+}
+
+static void
+value_param_transform_value (const GValue *src_value,
+			     GValue       *dest_value)
+{
+  if (src_value->data[0].v_pointer &&
+      g_type_is_a (G_PARAM_SPEC_TYPE (dest_value->data[0].v_pointer), G_VALUE_TYPE (dest_value)))
+    dest_value->data[0].v_pointer = g_param_spec_ref (src_value->data[0].v_pointer);
+  else
+    dest_value->data[0].v_pointer = NULL;
+}
+
+static gpointer
+value_param_peek_pointer (const GValue *value)
+{
+  return value->data[0].v_pointer;
+}
+
+static gchar*
+value_param_collect_value (GValue      *value,
+			   guint        n_collect_values,
+			   GTypeCValue *collect_values,
+			   guint        collect_flags)
+{
+  if (collect_values[0].v_pointer)
+    {
+      GParamSpec *param = collect_values[0].v_pointer;
+
+      if (param->g_type_instance.g_class == NULL)
+	return g_strconcat ("invalid unclassed param spec pointer for value type `",
+			    G_VALUE_TYPE_NAME (value),
+			    "'",
+			    NULL);
+      else if (!g_value_type_compatible (G_PARAM_SPEC_TYPE (param), G_VALUE_TYPE (value)))
+	return g_strconcat ("invalid param spec type `",
+			    G_PARAM_SPEC_TYPE_NAME (param),
+			    "' for value type `",
+			    G_VALUE_TYPE_NAME (value),
+			    "'",
+			    NULL);
+      value->data[0].v_pointer = g_param_spec_ref (param);
+    }
+  else
+    value->data[0].v_pointer = NULL;
+
+  return NULL;
+}
+
+static gchar*
+value_param_lcopy_value (const GValue *value,
+			 guint         n_collect_values,
+			 GTypeCValue  *collect_values,
+			 guint         collect_flags)
+{
+  GParamSpec **param_p = collect_values[0].v_pointer;
+
+  if (!param_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+
+  if (!value->data[0].v_pointer)
+    *param_p = NULL;
+  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+    *param_p = value->data[0].v_pointer;
+  else
+    *param_p = g_param_spec_ref (value->data[0].v_pointer);
+
+  return NULL;
+}
+
+
+/* --- param spec pool --- */
+/**
+ * GParamSpecPool:
+ *
+ * A #GParamSpecPool maintains a collection of #GParamSpec<!-- -->s which can be
+ * quickly accessed by owner and name. The implementation of the #GObject property
+ * system uses such a pool to store the #GParamSpecs of the properties all object
+ * types.
+ */
+struct _GParamSpecPool
+{
+  GStaticMutex smutex;
+  gboolean     type_prefixing;
+  GHashTable  *hash_table;
+};
+
+static guint
+param_spec_pool_hash (gconstpointer key_spec)
+{
+  const GParamSpec *key = key_spec;
+  const gchar *p;
+  guint h = key->owner_type;
+
+  for (p = key->name; *p; p++)
+    h = (h << 5) - h + *p;
+
+  return h;
+}
+
+static gboolean
+param_spec_pool_equals (gconstpointer key_spec_1,
+			gconstpointer key_spec_2)
+{
+  const GParamSpec *key1 = key_spec_1;
+  const GParamSpec *key2 = key_spec_2;
+
+  return (key1->owner_type == key2->owner_type &&
+	  strcmp (key1->name, key2->name) == 0);
+}
+
+/**
+ * g_param_spec_pool_new:
+ * @type_prefixing: Whether the pool will support type-prefixed property names.
+ *
+ * Creates a new #GParamSpecPool.
+ *
+ * If @type_prefixing is %TRUE, lookups in the newly created pool will
+ * allow to specify the owner as a colon-separated prefix of the
+ * property name, like "GtkContainer:border-width". This feature is
+ * deprecated, so you should always set @type_prefixing to %FALSE.
+ *
+ * Returns: a newly allocated #GParamSpecPool.
+ */
+GParamSpecPool*
+g_param_spec_pool_new (gboolean type_prefixing)
+{
+  static GStaticMutex init_smutex = G_STATIC_MUTEX_INIT;
+  GParamSpecPool *pool = g_new (GParamSpecPool, 1);
+
+  memcpy (&pool->smutex, &init_smutex, sizeof (init_smutex));
+  pool->type_prefixing = type_prefixing != FALSE;
+  pool->hash_table = g_hash_table_new (param_spec_pool_hash, param_spec_pool_equals);
+
+  return pool;
+}
+
+/**
+ * g_param_spec_pool_insert:
+ * @pool: a #GParamSpecPool.
+ * @pspec: the #GParamSpec to insert
+ * @owner_type: a #GType identifying the owner of @pspec
+ *
+ * Inserts a #GParamSpec in the pool.
+ */
+void
+g_param_spec_pool_insert (GParamSpecPool *pool,
+			  GParamSpec     *pspec,
+			  GType           owner_type)
+{
+  gchar *p;
+  
+  if (pool && pspec && owner_type > 0 && pspec->owner_type == 0)
+    {
+      G_SLOCK (&pool->smutex);
+      for (p = pspec->name; *p; p++)
+	{
+	  if (!strchr (G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-_", *p))
+	    {
+	      g_warning (G_STRLOC ": pspec name \"%s\" contains invalid characters", pspec->name);
+	      G_SUNLOCK (&pool->smutex);
+	      return;
+	    }
+	}
+      
+      pspec->owner_type = owner_type;
+      g_param_spec_ref (pspec);
+      g_hash_table_insert (pool->hash_table, pspec, pspec);
+      G_SUNLOCK (&pool->smutex);
+    }
+  else
+    {
+      g_return_if_fail (pool != NULL);
+      g_return_if_fail (pspec);
+      g_return_if_fail (owner_type > 0);
+      g_return_if_fail (pspec->owner_type == 0);
+    }
+}
+
+/**
+ * g_param_spec_pool_remove:
+ * @pool: a #GParamSpecPool
+ * @pspec: the #GParamSpec to remove
+ *
+ * Removes a #GParamSpec from the pool.
+ */
+void
+g_param_spec_pool_remove (GParamSpecPool *pool,
+			  GParamSpec     *pspec)
+{
+  if (pool && pspec)
+    {
+      G_SLOCK (&pool->smutex);
+      if (g_hash_table_remove (pool->hash_table, pspec))
+	g_param_spec_unref (pspec);
+      else
+	g_warning (G_STRLOC ": attempt to remove unknown pspec `%s' from pool", pspec->name);
+      G_SUNLOCK (&pool->smutex);
+    }
+  else
+    {
+      g_return_if_fail (pool != NULL);
+      g_return_if_fail (pspec);
+    }
+}
+
+static inline GParamSpec*
+param_spec_ht_lookup (GHashTable  *hash_table,
+		      const gchar *param_name,
+		      GType        owner_type,
+		      gboolean     walk_ancestors)
+{
+  GParamSpec key, *pspec;
+
+  key.owner_type = owner_type;
+  key.name = (gchar*) param_name;
+  if (walk_ancestors)
+    do
+      {
+	pspec = g_hash_table_lookup (hash_table, &key);
+	if (pspec)
+	  return pspec;
+	key.owner_type = g_type_parent (key.owner_type);
+      }
+    while (key.owner_type);
+  else
+    pspec = g_hash_table_lookup (hash_table, &key);
+
+  if (!pspec && !is_canonical (param_name))
+    {
+      /* try canonicalized form */
+      key.name = g_strdup (param_name);
+      key.owner_type = owner_type;
+      
+      canonicalize_key (key.name);
+      if (walk_ancestors)
+	do
+	  {
+	    pspec = g_hash_table_lookup (hash_table, &key);
+	    if (pspec)
+	      {
+		g_free (key.name);
+		return pspec;
+	      }
+	    key.owner_type = g_type_parent (key.owner_type);
+	  }
+	while (key.owner_type);
+      else
+	pspec = g_hash_table_lookup (hash_table, &key);
+      g_free (key.name);
+    }
+
+  return pspec;
+}
+
+/**
+ * g_param_spec_pool_lookup:
+ * @pool: a #GParamSpecPool
+ * @param_name: the name to look for
+ * @owner_type: the owner to look for
+ * @walk_ancestors: If %TRUE, also try to find a #GParamSpec with @param_name
+ *  owned by an ancestor of @owner_type.
+ *
+ * Looks up a #GParamSpec in the pool.
+ *
+ * Returns: The found #GParamSpec, or %NULL if no matching #GParamSpec was found.
+ */
+GParamSpec*
+g_param_spec_pool_lookup (GParamSpecPool *pool,
+			  const gchar    *param_name,
+			  GType           owner_type,
+			  gboolean        walk_ancestors)
+{
+  GParamSpec *pspec;
+  gchar *delim;
+
+  if (!pool || !param_name)
+    {
+      g_return_val_if_fail (pool != NULL, NULL);
+      g_return_val_if_fail (param_name != NULL, NULL);
+    }
+
+  G_SLOCK (&pool->smutex);
+
+  delim = pool->type_prefixing ? strchr (param_name, ':') : NULL;
+
+  /* try quick and away, i.e. without prefix */
+  if (!delim)
+    {
+      pspec = param_spec_ht_lookup (pool->hash_table, param_name, owner_type, walk_ancestors);
+      G_SUNLOCK (&pool->smutex);
+
+      return pspec;
+    }
+
+  /* strip type prefix */
+  if (pool->type_prefixing && delim[1] == ':')
+    {
+      guint l = delim - param_name;
+      gchar stack_buffer[32], *buffer = l < 32 ? stack_buffer : g_new (gchar, l + 1);
+      GType type;
+      
+      strncpy (buffer, param_name, delim - param_name);
+      buffer[l] = 0;
+      type = g_type_from_name (buffer);
+      if (l >= 32)
+	g_free (buffer);
+      if (type)		/* type==0 isn't a valid type pefix */
+	{
+	  /* sanity check, these cases don't make a whole lot of sense */
+	  if ((!walk_ancestors && type != owner_type) || !g_type_is_a (owner_type, type))
+	    {
+	      G_SUNLOCK (&pool->smutex);
+
+	      return NULL;
+	    }
+	  owner_type = type;
+	  param_name += l + 2;
+	  pspec = param_spec_ht_lookup (pool->hash_table, param_name, owner_type, walk_ancestors);
+	  G_SUNLOCK (&pool->smutex);
+
+	  return pspec;
+	}
+    }
+  /* malformed param_name */
+
+  G_SUNLOCK (&pool->smutex);
+
+  return NULL;
+}
+
+static void
+pool_list (gpointer key,
+	   gpointer value,
+	   gpointer user_data)
+{
+  GParamSpec *pspec = value;
+  gpointer *data = user_data;
+  GType owner_type = (GType) data[1];
+
+  if (owner_type == pspec->owner_type)
+    data[0] = g_list_prepend (data[0], pspec);
+}
+
+/**
+ * g_param_spec_pool_list_owned:
+ * @pool: a #GParamSpecPool
+ * @owner_type: the owner to look for
+ *
+ * Gets an #GList of all #GParamSpec<!-- -->s owned by @owner_type in
+ * the pool.
+ *
+ * Returns: a #GList of all #GParamSpec<!-- -->s owned by @owner_type
+ *          in the pool#GParamSpec<!-- -->s.
+ */
+GList*
+g_param_spec_pool_list_owned (GParamSpecPool *pool,
+			      GType           owner_type)
+{
+  gpointer data[2];
+
+  g_return_val_if_fail (pool != NULL, NULL);
+  g_return_val_if_fail (owner_type > 0, NULL);
+  
+  G_SLOCK (&pool->smutex);
+  data[0] = NULL;
+  data[1] = (gpointer) owner_type;
+  g_hash_table_foreach (pool->hash_table, pool_list, &data);
+  G_SUNLOCK (&pool->smutex);
+
+  return data[0];
+}
+
+static gint
+pspec_compare_id (gconstpointer a,
+		  gconstpointer b)
+{
+  const GParamSpec *pspec1 = a, *pspec2 = b;
+
+  return pspec1->param_id < pspec2->param_id ? -1 : pspec1->param_id > pspec2->param_id;
+}
+
+static inline GSList*
+pspec_list_remove_overridden_and_redirected (GSList     *plist,
+					     GHashTable *ht,
+					     GType       owner_type,
+					     guint      *n_p)
+{
+  GSList *rlist = NULL;
+
+  while (plist)
+    {
+      GSList *tmp = plist->next;
+      GParamSpec *pspec = plist->data;
+      GParamSpec *found;
+      gboolean remove = FALSE;
+
+      /* Remove paramspecs that are redirected, and also paramspecs
+       * that have are overridden by non-redirected properties.
+       * The idea is to get the single paramspec for each name that
+       * best corresponds to what the application sees.
+       */
+      if (g_param_spec_get_redirect_target (pspec))
+	remove = TRUE;
+      else
+	{
+	  found = param_spec_ht_lookup (ht, pspec->name, owner_type, TRUE);
+	  if (found != pspec)
+	    {
+	      GParamSpec *redirect = g_param_spec_get_redirect_target (found);
+	      if (redirect != pspec)
+		remove = TRUE;
+	    }
+	}
+
+      if (remove)
+	{
+	  g_slist_free_1 (plist);
+	}
+      else
+	{
+	  plist->next = rlist;
+	  rlist = plist;
+	  *n_p += 1;
+	}
+      plist = tmp;
+    }
+  return rlist;
+}
+
+static void
+pool_depth_list (gpointer key,
+		 gpointer value,
+		 gpointer user_data)
+{
+  GParamSpec *pspec = value;
+  gpointer *data = user_data;
+  GSList **slists = data[0];
+  GType owner_type = (GType) data[1];
+
+  if (g_type_is_a (owner_type, pspec->owner_type))
+    {
+      if (G_TYPE_IS_INTERFACE (pspec->owner_type))
+	{
+	  slists[0] = g_slist_prepend (slists[0], pspec);
+	}
+      else
+	{
+	  guint d = g_type_depth (pspec->owner_type);
+
+	  slists[d - 1] = g_slist_prepend (slists[d - 1], pspec);
+	}
+    }
+}
+
+/* We handle interfaces specially since we don't want to
+ * count interface prerequisites like normal inheritance;
+ * the property comes from the direct inheritance from
+ * the prerequisite class, not from the interface that
+ * prerequires it.
+ * 
+ * also 'depth' isn't a meaningful concept for interface
+ * prerequites.
+ */
+static void
+pool_depth_list_for_interface (gpointer key,
+			       gpointer value,
+			       gpointer user_data)
+{
+  GParamSpec *pspec = value;
+  gpointer *data = user_data;
+  GSList **slists = data[0];
+  GType owner_type = (GType) data[1];
+
+  if (pspec->owner_type == owner_type)
+    slists[0] = g_slist_prepend (slists[0], pspec);
+}
+
+/**
+ * g_param_spec_pool_list:
+ * @pool: a #GParamSpecPool
+ * @owner_type: the owner to look for
+ * @n_pspecs_p: return location for the length of the returned array
+ *
+ * Gets an array of all #GParamSpec<!-- -->s owned by @owner_type in
+ * the pool.
+ *
+ * Returns: a newly allocated array containing pointers to all
+ *          #GParamSpec<!-- -->s owned by @owner_type in the pool
+ */
+GParamSpec**
+g_param_spec_pool_list (GParamSpecPool *pool,
+			GType           owner_type,
+			guint          *n_pspecs_p)
+{
+  GParamSpec **pspecs, **p;
+  GSList **slists, *node;
+  gpointer data[2];
+  guint d, i;
+
+  g_return_val_if_fail (pool != NULL, NULL);
+  g_return_val_if_fail (owner_type > 0, NULL);
+  g_return_val_if_fail (n_pspecs_p != NULL, NULL);
+  
+  G_SLOCK (&pool->smutex);
+  *n_pspecs_p = 0;
+  d = g_type_depth (owner_type);
+  slists = g_new0 (GSList*, d);
+  data[0] = slists;
+  data[1] = (gpointer) owner_type;
+
+  g_hash_table_foreach (pool->hash_table,
+			G_TYPE_IS_INTERFACE (owner_type) ?
+			   pool_depth_list_for_interface :
+			   pool_depth_list,
+			&data);
+  
+  for (i = 0; i < d; i++)
+    slists[i] = pspec_list_remove_overridden_and_redirected (slists[i], pool->hash_table, owner_type, n_pspecs_p);
+  pspecs = g_new (GParamSpec*, *n_pspecs_p + 1);
+  p = pspecs;
+  for (i = 0; i < d; i++)
+    {
+      slists[i] = g_slist_sort (slists[i], pspec_compare_id);
+      for (node = slists[i]; node; node = node->next)
+	*p++ = node->data;
+      g_slist_free (slists[i]);
+    }
+  *p++ = NULL;
+  g_free (slists);
+  G_SUNLOCK (&pool->smutex);
+
+  return pspecs;
+}
+
+
+/* --- auxillary functions --- */
+typedef struct
+{
+  /* class portion */
+  GType           value_type;
+  void          (*finalize)             (GParamSpec   *pspec);
+  void          (*value_set_default)    (GParamSpec   *pspec,
+					 GValue       *value);
+  gboolean      (*value_validate)       (GParamSpec   *pspec,
+					 GValue       *value);
+  gint          (*values_cmp)           (GParamSpec   *pspec,
+					 const GValue *value1,
+					 const GValue *value2);
+} ParamSpecClassInfo;
+
+static void
+param_spec_generic_class_init (gpointer g_class,
+			       gpointer class_data)
+{
+  GParamSpecClass *class = g_class;
+  ParamSpecClassInfo *info = class_data;
+
+  class->value_type = info->value_type;
+  if (info->finalize)
+    class->finalize = info->finalize;			/* optional */
+  class->value_set_default = info->value_set_default;
+  if (info->value_validate)
+    class->value_validate = info->value_validate;	/* optional */
+  class->values_cmp = info->values_cmp;
+  g_free (class_data);
+}
+
+static void
+default_value_set_default (GParamSpec *pspec,
+			   GValue     *value)
+{
+  /* value is already zero initialized */
+}
+
+static gint
+default_values_cmp (GParamSpec   *pspec,
+		    const GValue *value1,
+		    const GValue *value2)
+{
+  return memcmp (&value1->data, &value2->data, sizeof (value1->data));
+}
+
+/**
+ * g_param_type_register_static:
+ * @name: 0-terminated string used as the name of the new #GParamSpec type.
+ * @pspec_info: The #GParamSpecTypeInfo for this #GParamSpec type.
+ *
+ * Registers @name as the name of a new static type derived from
+ * #G_TYPE_PARAM. The type system uses the information contained in
+ * the #GParamSpecTypeInfo structure pointed to by @info to manage the
+ * #GParamSpec type and its instances.
+ *
+ * Returns: The new type identifier.
+ */
+GType
+g_param_type_register_static (const gchar              *name,
+			      const GParamSpecTypeInfo *pspec_info)
+{
+  GTypeInfo info = {
+    sizeof (GParamSpecClass),      /* class_size */
+    NULL,                          /* base_init */
+    NULL,                          /* base_destroy */
+    param_spec_generic_class_init, /* class_init */
+    NULL,                          /* class_destroy */
+    NULL,                          /* class_data */
+    0,                             /* instance_size */
+    16,                            /* n_preallocs */
+    NULL,                          /* instance_init */
+  };
+  ParamSpecClassInfo *cinfo;
+
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (pspec_info != NULL, 0);
+  g_return_val_if_fail (g_type_from_name (name) == 0, 0);
+  g_return_val_if_fail (pspec_info->instance_size >= sizeof (GParamSpec), 0);
+  g_return_val_if_fail (g_type_name (pspec_info->value_type) != NULL, 0);
+  /* default: g_return_val_if_fail (pspec_info->value_set_default != NULL, 0); */
+  /* optional: g_return_val_if_fail (pspec_info->value_validate != NULL, 0); */
+  /* default: g_return_val_if_fail (pspec_info->values_cmp != NULL, 0); */
+
+  info.instance_size = pspec_info->instance_size;
+  info.n_preallocs = pspec_info->n_preallocs;
+  info.instance_init = (GInstanceInitFunc) pspec_info->instance_init;
+  cinfo = g_new (ParamSpecClassInfo, 1);
+  cinfo->value_type = pspec_info->value_type;
+  cinfo->finalize = pspec_info->finalize;
+  cinfo->value_set_default = pspec_info->value_set_default ? pspec_info->value_set_default : default_value_set_default;
+  cinfo->value_validate = pspec_info->value_validate;
+  cinfo->values_cmp = pspec_info->values_cmp ? pspec_info->values_cmp : default_values_cmp;
+  info.class_data = cinfo;
+
+  return g_type_register_static (G_TYPE_PARAM, name, &info, 0);
+}
+
+/**
+ * g_value_set_param:
+ * @value: a valid #GValue of type %G_TYPE_PARAM
+ * @param: the #GParamSpec to be set
+ *
+ * Set the contents of a %G_TYPE_PARAM #GValue to @param.
+ */
+void
+g_value_set_param (GValue     *value,
+		   GParamSpec *param)
+{
+  g_return_if_fail (G_VALUE_HOLDS_PARAM (value));
+  if (param)
+    g_return_if_fail (G_IS_PARAM_SPEC (param));
+
+  if (value->data[0].v_pointer)
+    g_param_spec_unref (value->data[0].v_pointer);
+  value->data[0].v_pointer = param;
+  if (value->data[0].v_pointer)
+    g_param_spec_ref (value->data[0].v_pointer);
+}
+
+/**
+ * g_value_set_param_take_ownership:
+ * @value: a valid #GValue of type %G_TYPE_PARAM
+ * @param: the #GParamSpec to be set
+ *
+ * This is an internal function introduced mainly for C marshallers.
+ *
+ * Deprecated: 2.4: Use g_value_take_param() instead.
+ */
+void
+g_value_set_param_take_ownership (GValue     *value,
+				  GParamSpec *param)
+{
+  g_value_take_param (value, param);
+}
+
+/**
+ * g_value_take_param:
+ * @value: a valid #GValue of type %G_TYPE_PARAM
+ * @param: the #GParamSpec to be set
+ *
+ * Sets the contents of a %G_TYPE_PARAM #GValue to @param and takes
+ * over the ownership of the callers reference to @param; the caller
+ * doesn't have to unref it any more.
+ *
+ * Since: 2.4
+ */
+void
+g_value_take_param (GValue     *value,
+		    GParamSpec *param)
+{
+  g_return_if_fail (G_VALUE_HOLDS_PARAM (value));
+  if (param)
+    g_return_if_fail (G_IS_PARAM_SPEC (param));
+
+  if (value->data[0].v_pointer)
+    g_param_spec_unref (value->data[0].v_pointer);
+  value->data[0].v_pointer = param; /* we take over the reference count */
+}
+
+/**
+ * g_value_get_param:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_PARAM
+ *
+ * Get the contents of a %G_TYPE_PARAM #GValue.
+ *
+ * Returns: #GParamSpec content of @value
+ */
+GParamSpec*
+g_value_get_param (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_PARAM (value), NULL);
+
+  return value->data[0].v_pointer;
+}
+
+/**
+ * g_value_dup_param:
+ * @value: a valid #GValue whose type is derived from %G_TYPE_PARAM
+ *
+ * Get the contents of a %G_TYPE_PARAM #GValue, increasing its
+ * reference count.
+ *
+ * Returns: #GParamSpec content of @value, should be unreferenced when
+ *          no longer needed.
+ */
+GParamSpec*
+g_value_dup_param (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_PARAM (value), NULL);
+
+  return value->data[0].v_pointer ? g_param_spec_ref (value->data[0].v_pointer) : NULL;
+}
+
+#define __G_PARAM_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gparam.h b/gobject/gparam.h
new file mode 100644
index 0000000..d377876
--- /dev/null
+++ b/gobject/gparam.h
@@ -0,0 +1,410 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * gparam.h: GParamSpec base class implementation
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_PARAM_H__
+#define __G_PARAM_H__
+
+#include	<gobject/gvalue.h>
+
+G_BEGIN_DECLS
+
+/* --- standard type macros --- */
+/**
+ * G_TYPE_IS_PARAM:
+ * @type: a #GType ID
+ * 
+ * Checks whether @type "is a" %G_TYPE_PARAM.
+ */
+#define G_TYPE_IS_PARAM(type)		(G_TYPE_FUNDAMENTAL (type) == G_TYPE_PARAM)
+/**
+ * G_PARAM_SPEC:
+ * @pspec: a valid #GParamSpec
+ * 
+ * Casts a derived #GParamSpec object (e.g. of type #GParamSpecInt) into
+ * a #GParamSpec object.
+ */
+#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
+/**
+ * G_IS_PARAM_SPEC:
+ * @pspec: a #GParamSpec
+ * 
+ * Checks whether @pspec "is a" valid #GParamSpec structure of type %G_TYPE_PARAM
+ * or derived.
+ */
+#define G_IS_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM))
+/**
+ * G_PARAM_SPEC_CLASS:
+ * @pclass: a valid #GParamSpecClass
+ * 
+ * Casts a derived #GParamSpecClass structure into a #GParamSpecClass structure.
+ */
+#define G_PARAM_SPEC_CLASS(pclass)      (G_TYPE_CHECK_CLASS_CAST ((pclass), G_TYPE_PARAM, GParamSpecClass))
+/**
+ * G_IS_PARAM_SPEC_CLASS:
+ * @pclass: a #GParamSpecClass
+ * 
+ * Checks whether @pclass "is a" valid #GParamSpecClass structure of type 
+ * %G_TYPE_PARAM or derived.
+ */
+#define G_IS_PARAM_SPEC_CLASS(pclass)   (G_TYPE_CHECK_CLASS_TYPE ((pclass), G_TYPE_PARAM))
+/**
+ * G_PARAM_SPEC_GET_CLASS:
+ * @pspec: a valid #GParamSpec
+ * 
+ * Retrieves the #GParamSpecClass of a #GParamSpec.
+ */
+#define G_PARAM_SPEC_GET_CLASS(pspec)	(G_TYPE_INSTANCE_GET_CLASS ((pspec), G_TYPE_PARAM, GParamSpecClass))
+
+
+/* --- convenience macros --- */
+/**
+ * G_PARAM_SPEC_TYPE:
+ * @pspec: a valid #GParamSpec
+ * 
+ * Retrieves the #GType of this @pspec.
+ */
+#define G_PARAM_SPEC_TYPE(pspec)	(G_TYPE_FROM_INSTANCE (pspec))
+/**
+ * G_PARAM_SPEC_TYPE_NAME:
+ * @pspec: a valid #GParamSpec
+ * 
+ * Retrieves the #GType name of this @pspec.
+ */
+#define G_PARAM_SPEC_TYPE_NAME(pspec)	(g_type_name (G_PARAM_SPEC_TYPE (pspec)))
+/**
+ * G_PARAM_SPEC_VALUE_TYPE:
+ * @pspec: a valid #GParamSpec
+ * 
+ * Retrieves the #GType to initialize a #GValue for this parameter.
+ */
+#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
+/**
+ * G_VALUE_HOLDS_PARAM:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values derived from type %G_TYPE_PARAM.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_PARAM(value)	(G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_PARAM))
+       
+
+/* --- flags --- */
+/**
+ * GParamFlags:
+ * @G_PARAM_READABLE: the parameter is readable
+ * @G_PARAM_WRITABLE: the parameter is writable
+ * @G_PARAM_CONSTRUCT: the parameter will be set upon object construction
+ * @G_PARAM_CONSTRUCT_ONLY: the parameter will only be set upon object construction
+ * @G_PARAM_LAX_VALIDATION: upon parameter conversion (see g_param_value_convert())
+ *  strict validation is not required
+ * @G_PARAM_STATIC_NAME: the string used as name when constructing the 
+ *  parameter is guaranteed to remain valid and
+ *  unmodified for the lifetime of the parameter. 
+ *  Since 2.8
+ * @G_PARAM_STATIC_NICK: the string used as nick when constructing the
+ *  parameter is guaranteed to remain valid and
+ *  unmmodified for the lifetime of the parameter.
+ *  Since 2.8
+ * @G_PARAM_STATIC_BLURB: the string used as blurb when constructing the 
+ *  parameter is guaranteed to remain valid and 
+ *  unmodified for the lifetime of the parameter. 
+ *  Since 2.8
+ * @G_PARAM_PRIVATE: internal
+ * 
+ * Through the #GParamFlags flag values, certain aspects of parameters
+ * can be configured.
+ */
+typedef enum
+{
+  G_PARAM_READABLE            = 1 << 0,
+  G_PARAM_WRITABLE            = 1 << 1,
+  G_PARAM_CONSTRUCT	      = 1 << 2,
+  G_PARAM_CONSTRUCT_ONLY      = 1 << 3,
+  G_PARAM_LAX_VALIDATION      = 1 << 4,
+  G_PARAM_STATIC_NAME	      = 1 << 5,
+#ifndef G_DISABLE_DEPRECATED
+  G_PARAM_PRIVATE	      = G_PARAM_STATIC_NAME,
+#endif
+  G_PARAM_STATIC_NICK	      = 1 << 6,
+  G_PARAM_STATIC_BLURB	      = 1 << 7
+} GParamFlags;
+/**
+ * G_PARAM_READWRITE:
+ * 
+ * #GParamFlags value alias for %G_PARAM_READABLE | %G_PARAM_WRITABLE.
+ */
+#define	G_PARAM_READWRITE	(G_PARAM_READABLE | G_PARAM_WRITABLE)
+/**
+ * G_PARAM_STATIC_STRINGS:
+ * 
+ * #GParamFlags value alias for %G_PARAM_STATIC_NAME | %G_PARAM_STATIC_NICK | %G_PARAM_STATIC_BLURB.
+ * 
+ * Since 2.13.0
+ */
+#define	G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)
+/* bits in the range 0xffffff00 are reserved for 3rd party usage */
+/**
+ * G_PARAM_MASK:
+ * 
+ * Mask containing the bits of #GParamSpec.flags which are reserved for GLib.
+ */
+#define	G_PARAM_MASK		(0x000000ff)
+/**
+ * G_PARAM_USER_SHIFT:
+ * 
+ * Minimum shift count to be used for user defined flags, to be stored in
+ * #GParamSpec.flags.
+ */
+#define	G_PARAM_USER_SHIFT	(8)
+
+
+/* --- typedefs & structures --- */
+typedef struct _GParamSpec      GParamSpec;
+typedef struct _GParamSpecClass GParamSpecClass;
+typedef struct _GParameter	GParameter;
+typedef struct _GParamSpecPool  GParamSpecPool;
+/**
+ * GParamSpec:
+ * @g_type_instance: private #GTypeInstance portion
+ * @name: name of this parameter
+ * @flags: #GParamFlags flags for this parameter
+ * @value_type: the #GValue type for this parameter
+ * @owner_type: #GType type that uses (introduces) this paremeter
+ * 
+ * All other fields of the <structname>GParamSpec</structname> struct are private and
+ * should not be used directly.
+ */
+struct _GParamSpec
+{
+  GTypeInstance  g_type_instance;
+
+  gchar         *name;
+  GParamFlags    flags;
+  GType		 value_type;
+  GType		 owner_type;	/* class or interface using this property */
+
+  /*< private >*/
+  gchar         *_nick;
+  gchar         *_blurb;
+  GData		*qdata;
+  guint          ref_count;
+  guint		 param_id;	/* sort-criteria */
+};
+/**
+ * GParamSpecClass:
+ * @g_type_class: the parent class
+ * @value_type: the #GValue type for this parameter
+ * @finalize: The instance finalization function (optional), should chain 
+ *  up to the finalize method of the parent class.
+ * @value_set_default: Resets a @value to the default value for this type
+ *  (recommended, the default is g_value_reset()), see 
+ *  g_param_value_set_default().
+ * @value_validate: Ensures that the contents of @value comply with the 
+ *  specifications set out by this type (optional), see 
+ *  g_param_value_set_validate().
+ * @values_cmp: Compares @value1 with @value2 according to this type
+ *  (recommended, the default is memcmp()), see g_param_values_cmp().
+ * 
+ * The class structure for the <structname>GParamSpec</structname> type.
+ * Normally, <structname>GParamSpec</structname> classes are filled by
+ * g_param_type_register_static().
+ */
+struct _GParamSpecClass
+{
+  GTypeClass      g_type_class;
+
+  GType		  value_type;
+
+  void	        (*finalize)		(GParamSpec   *pspec);
+
+  /* GParam methods */
+  void          (*value_set_default)    (GParamSpec   *pspec,
+					 GValue       *value);
+  gboolean      (*value_validate)       (GParamSpec   *pspec,
+					 GValue       *value);
+  gint          (*values_cmp)           (GParamSpec   *pspec,
+					 const GValue *value1,
+					 const GValue *value2);
+  /*< private >*/
+  gpointer	  dummy[4];
+};
+/**
+ * GParameter:
+ * @name: the parameter name
+ * @value: the parameter value
+ * 
+ * The <structname>GParameter</structname> struct is an auxiliary structure used
+ * to hand parameter name/value pairs to g_object_newv().
+ */
+struct _GParameter /* auxillary structure for _setv() variants */
+{
+  const gchar *name;
+  GValue       value;
+};
+
+
+/* --- prototypes --- */
+GParamSpec*	g_param_spec_ref		(GParamSpec    *pspec);
+void		g_param_spec_unref		(GParamSpec    *pspec);
+void		g_param_spec_sink		(GParamSpec    *pspec);
+GParamSpec*	g_param_spec_ref_sink   	(GParamSpec    *pspec);
+gpointer        g_param_spec_get_qdata		(GParamSpec    *pspec,
+						 GQuark         quark);
+void            g_param_spec_set_qdata		(GParamSpec    *pspec,
+						 GQuark         quark,
+						 gpointer       data);
+void            g_param_spec_set_qdata_full	(GParamSpec    *pspec,
+						 GQuark         quark,
+						 gpointer       data,
+						 GDestroyNotify destroy);
+gpointer        g_param_spec_steal_qdata	(GParamSpec    *pspec,
+						 GQuark         quark);
+GParamSpec*     g_param_spec_get_redirect_target (GParamSpec   *pspec);
+
+void		g_param_value_set_default	(GParamSpec    *pspec,
+						 GValue	       *value);
+gboolean	g_param_value_defaults		(GParamSpec    *pspec,
+						 GValue	       *value);
+gboolean	g_param_value_validate		(GParamSpec    *pspec,
+						 GValue	       *value);
+gboolean	g_param_value_convert		(GParamSpec    *pspec,
+						 const GValue  *src_value,
+						 GValue	       *dest_value,
+						 gboolean	strict_validation);
+gint		g_param_values_cmp		(GParamSpec    *pspec,
+						 const GValue  *value1,
+						 const GValue  *value2);
+G_CONST_RETURN gchar*	g_param_spec_get_name	(GParamSpec    *pspec);
+G_CONST_RETURN gchar*	g_param_spec_get_nick	(GParamSpec    *pspec);
+G_CONST_RETURN gchar*	g_param_spec_get_blurb	(GParamSpec    *pspec);
+void            g_value_set_param               (GValue	       *value,
+						 GParamSpec    *param);
+GParamSpec*     g_value_get_param               (const GValue  *value);
+GParamSpec*     g_value_dup_param               (const GValue  *value);
+
+
+void           g_value_take_param               (GValue        *value,
+					         GParamSpec    *param);
+#ifndef G_DISABLE_DEPRECATED
+void           g_value_set_param_take_ownership (GValue        *value,
+					         GParamSpec    *param);
+#endif
+
+/* --- convenience functions --- */
+typedef struct _GParamSpecTypeInfo GParamSpecTypeInfo;
+/**
+ * GParamSpecTypeInfo:
+ * @instance_size: Size of the instance (object) structure.
+ * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the <link linkend="glib-Memory-Slices">slice allocator</link> now.
+ * @instance_init: Location of the instance initialization function (optional).
+ * @value_type: The #GType of values conforming to this #GParamSpec
+ * @finalize: The instance finalization function (optional).
+ * @value_set_default: Resets a @value to the default value for @pspec 
+ *  (recommended, the default is g_value_reset()), see 
+ *  g_param_value_set_default().
+ * @value_validate: Ensures that the contents of @value comply with the 
+ *  specifications set out by @pspec (optional), see 
+ *  g_param_value_set_validate().
+ * @values_cmp: Compares @value1 with @value2 according to @pspec 
+ *  (recommended, the default is memcmp()), see g_param_values_cmp().
+ * 
+ * This structure is used to provide the type system with the information
+ * required to initialize and destruct (finalize) a parameter's class and
+ * instances thereof.
+ * The initialized structure is passed to the g_param_type_register_static() 
+ * The type system will perform a deep copy of this structure, so its memory 
+ * does not need to be persistent across invocation of 
+ * g_param_type_register_static().
+ */
+struct _GParamSpecTypeInfo
+{
+  /* type system portion */
+  guint16         instance_size;                               /* obligatory */
+  guint16         n_preallocs;                                 /* optional */
+  void		(*instance_init)	(GParamSpec   *pspec); /* optional */
+
+  /* class portion */
+  GType           value_type;				       /* obligatory */
+  void          (*finalize)             (GParamSpec   *pspec); /* optional */
+  void          (*value_set_default)    (GParamSpec   *pspec,  /* recommended */
+					 GValue       *value);
+  gboolean      (*value_validate)       (GParamSpec   *pspec,  /* optional */
+					 GValue       *value);
+  gint          (*values_cmp)           (GParamSpec   *pspec,  /* recommended */
+					 const GValue *value1,
+					 const GValue *value2);
+};
+GType	g_param_type_register_static	(const gchar		  *name,
+					 const GParamSpecTypeInfo *pspec_info);
+
+/* For registering builting types */
+GType  _g_param_type_register_static_constant (const gchar              *name,
+					       const GParamSpecTypeInfo *pspec_info,
+					       GType                     opt_type);
+
+
+/* --- protected --- */
+gpointer	g_param_spec_internal		(GType	        param_type,
+						 const gchar   *name,
+						 const gchar   *nick,
+						 const gchar   *blurb,
+						 GParamFlags    flags);
+GParamSpecPool* g_param_spec_pool_new		(gboolean	type_prefixing);
+void		g_param_spec_pool_insert	(GParamSpecPool	*pool,
+						 GParamSpec	*pspec,
+						 GType		 owner_type);
+void		g_param_spec_pool_remove	(GParamSpecPool	*pool,
+						 GParamSpec	*pspec);
+GParamSpec*	g_param_spec_pool_lookup	(GParamSpecPool	*pool,
+						 const gchar	*param_name,
+						 GType		 owner_type,
+						 gboolean	 walk_ancestors);
+GList*		g_param_spec_pool_list_owned	(GParamSpecPool	*pool,
+						 GType		 owner_type);
+GParamSpec**	g_param_spec_pool_list		(GParamSpecPool	*pool,
+						 GType		 owner_type,
+						 guint		*n_pspecs_p);
+
+
+
+/* contracts:
+ *
+ * gboolean value_validate (GParamSpec *pspec,
+ *                          GValue     *value):
+ *	modify value contents in the least destructive way, so
+ *	that it complies with pspec's requirements (i.e.
+ *	according to minimum/maximum ranges etc...). return
+ *	whether modification was necessary.
+ *
+ * gint values_cmp (GParamSpec   *pspec,
+ *                  const GValue *value1,
+ *                  const GValue *value2):
+ *	return value1 - value2, i.e. (-1) if value1 < value2,
+ *	(+1) if value1 > value2, and (0) otherwise (equality)
+ */
+
+G_END_DECLS
+
+#endif /* __G_PARAM_H__ */
diff --git a/gobject/gparamspecs.c b/gobject/gparamspecs.c
new file mode 100644
index 0000000..2f49824
--- /dev/null
+++ b/gobject/gparamspecs.c
@@ -0,0 +1,2397 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gparamspecs.h"
+#include "gvaluecollector.h"
+#include "gvaluearray.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:param_value_types
+ * @short_description: Standard Parameter and Value Types
+ * @see_also: #GParamSpec, #GValue, g_object_class_install_property().
+ * @title: Parameters and Values
+ *
+ * #GValue provides an abstract container structure which can be
+ * copied, transformed and compared while holding a value of any
+ * (derived) type, which is registered as a #GType with a
+ * #GTypeValueTable in its #GTypeInfo structure.  Parameter
+ * specifications for most value types can be created as #GParamSpec
+ * derived instances, to implement e.g. #GObject properties which
+ * operate on #GValue containers.
+ *
+ * Parameter names need to start with a letter (a-z or A-Z). Subsequent
+ * characters can be letters, numbers or a '-'.
+ * All other characters are replaced by a '-' during construction.
+ */
+
+
+#define	G_FLOAT_EPSILON		(1e-30)
+#define	G_DOUBLE_EPSILON	(1e-90)
+
+
+/* --- param spec functions --- */
+static void
+param_char_init (GParamSpec *pspec)
+{
+  GParamSpecChar *cspec = G_PARAM_SPEC_CHAR (pspec);
+  
+  cspec->minimum = 0x7f;
+  cspec->maximum = 0x80;
+  cspec->default_value = 0;
+}
+
+static void
+param_char_set_default (GParamSpec *pspec,
+			GValue	   *value)
+{
+  value->data[0].v_int = G_PARAM_SPEC_CHAR (pspec)->default_value;
+}
+
+static gboolean
+param_char_validate (GParamSpec *pspec,
+		     GValue     *value)
+{
+  GParamSpecChar *cspec = G_PARAM_SPEC_CHAR (pspec);
+  gint oval = value->data[0].v_int;
+  
+  value->data[0].v_int = CLAMP (value->data[0].v_int, cspec->minimum, cspec->maximum);
+  
+  return value->data[0].v_int != oval;
+}
+
+static void
+param_uchar_init (GParamSpec *pspec)
+{
+  GParamSpecUChar *uspec = G_PARAM_SPEC_UCHAR (pspec);
+  
+  uspec->minimum = 0;
+  uspec->maximum = 0xff;
+  uspec->default_value = 0;
+}
+
+static void
+param_uchar_set_default (GParamSpec *pspec,
+			 GValue	    *value)
+{
+  value->data[0].v_uint = G_PARAM_SPEC_UCHAR (pspec)->default_value;
+}
+
+static gboolean
+param_uchar_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecUChar *uspec = G_PARAM_SPEC_UCHAR (pspec);
+  guint oval = value->data[0].v_uint;
+  
+  value->data[0].v_uint = CLAMP (value->data[0].v_uint, uspec->minimum, uspec->maximum);
+  
+  return value->data[0].v_uint != oval;
+}
+
+static void
+param_boolean_set_default (GParamSpec *pspec,
+			   GValue     *value)
+{
+  value->data[0].v_int = G_PARAM_SPEC_BOOLEAN (pspec)->default_value;
+}
+
+static gboolean
+param_boolean_validate (GParamSpec *pspec,
+			GValue     *value)
+{
+  gint oval = value->data[0].v_int;
+  
+  value->data[0].v_int = value->data[0].v_int != FALSE;
+  
+  return value->data[0].v_int != oval;
+}
+
+static void
+param_int_init (GParamSpec *pspec)
+{
+  GParamSpecInt *ispec = G_PARAM_SPEC_INT (pspec);
+  
+  ispec->minimum = 0x7fffffff;
+  ispec->maximum = 0x80000000;
+  ispec->default_value = 0;
+}
+
+static void
+param_int_set_default (GParamSpec *pspec,
+		       GValue     *value)
+{
+  value->data[0].v_int = G_PARAM_SPEC_INT (pspec)->default_value;
+}
+
+static gboolean
+param_int_validate (GParamSpec *pspec,
+		    GValue     *value)
+{
+  GParamSpecInt *ispec = G_PARAM_SPEC_INT (pspec);
+  gint oval = value->data[0].v_int;
+  
+  value->data[0].v_int = CLAMP (value->data[0].v_int, ispec->minimum, ispec->maximum);
+  
+  return value->data[0].v_int != oval;
+}
+
+static gint
+param_int_values_cmp (GParamSpec   *pspec,
+		      const GValue *value1,
+		      const GValue *value2)
+{
+  if (value1->data[0].v_int < value2->data[0].v_int)
+    return -1;
+  else
+    return value1->data[0].v_int > value2->data[0].v_int;
+}
+
+static void
+param_uint_init (GParamSpec *pspec)
+{
+  GParamSpecUInt *uspec = G_PARAM_SPEC_UINT (pspec);
+  
+  uspec->minimum = 0;
+  uspec->maximum = 0xffffffff;
+  uspec->default_value = 0;
+}
+
+static void
+param_uint_set_default (GParamSpec *pspec,
+			GValue     *value)
+{
+  value->data[0].v_uint = G_PARAM_SPEC_UINT (pspec)->default_value;
+}
+
+static gboolean
+param_uint_validate (GParamSpec *pspec,
+		     GValue     *value)
+{
+  GParamSpecUInt *uspec = G_PARAM_SPEC_UINT (pspec);
+  guint oval = value->data[0].v_uint;
+  
+  value->data[0].v_uint = CLAMP (value->data[0].v_uint, uspec->minimum, uspec->maximum);
+  
+  return value->data[0].v_uint != oval;
+}
+
+static gint
+param_uint_values_cmp (GParamSpec   *pspec,
+		       const GValue *value1,
+		       const GValue *value2)
+{
+  if (value1->data[0].v_uint < value2->data[0].v_uint)
+    return -1;
+  else
+    return value1->data[0].v_uint > value2->data[0].v_uint;
+}
+
+static void
+param_long_init (GParamSpec *pspec)
+{
+  GParamSpecLong *lspec = G_PARAM_SPEC_LONG (pspec);
+  
+#if SIZEOF_LONG == 4
+  lspec->minimum = 0x7fffffff;
+  lspec->maximum = 0x80000000;
+#else /* SIZEOF_LONG != 4 (8) */
+  lspec->minimum = 0x7fffffffffffffff;
+  lspec->maximum = 0x8000000000000000;
+#endif
+  lspec->default_value = 0;
+}
+
+static void
+param_long_set_default (GParamSpec *pspec,
+			GValue     *value)
+{
+  value->data[0].v_long = G_PARAM_SPEC_LONG (pspec)->default_value;
+}
+
+static gboolean
+param_long_validate (GParamSpec *pspec,
+		     GValue     *value)
+{
+  GParamSpecLong *lspec = G_PARAM_SPEC_LONG (pspec);
+  glong oval = value->data[0].v_long;
+  
+  value->data[0].v_long = CLAMP (value->data[0].v_long, lspec->minimum, lspec->maximum);
+  
+  return value->data[0].v_long != oval;
+}
+
+static gint
+param_long_values_cmp (GParamSpec   *pspec,
+		       const GValue *value1,
+		       const GValue *value2)
+{
+  if (value1->data[0].v_long < value2->data[0].v_long)
+    return -1;
+  else
+    return value1->data[0].v_long > value2->data[0].v_long;
+}
+
+static void
+param_ulong_init (GParamSpec *pspec)
+{
+  GParamSpecULong *uspec = G_PARAM_SPEC_ULONG (pspec);
+  
+  uspec->minimum = 0;
+#if SIZEOF_LONG == 4
+  uspec->maximum = 0xffffffff;
+#else /* SIZEOF_LONG != 4 (8) */
+  uspec->maximum = 0xffffffffffffffff;
+#endif
+  uspec->default_value = 0;
+}
+
+static void
+param_ulong_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_ulong = G_PARAM_SPEC_ULONG (pspec)->default_value;
+}
+
+static gboolean
+param_ulong_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecULong *uspec = G_PARAM_SPEC_ULONG (pspec);
+  gulong oval = value->data[0].v_ulong;
+  
+  value->data[0].v_ulong = CLAMP (value->data[0].v_ulong, uspec->minimum, uspec->maximum);
+  
+  return value->data[0].v_ulong != oval;
+}
+
+static gint
+param_ulong_values_cmp (GParamSpec   *pspec,
+			const GValue *value1,
+			const GValue *value2)
+{
+  if (value1->data[0].v_ulong < value2->data[0].v_ulong)
+    return -1;
+  else
+    return value1->data[0].v_ulong > value2->data[0].v_ulong;
+}
+
+static void
+param_int64_init (GParamSpec *pspec)
+{
+  GParamSpecInt64 *lspec = G_PARAM_SPEC_INT64 (pspec);
+  
+  lspec->minimum = G_MININT64;
+  lspec->maximum = G_MAXINT64;
+  lspec->default_value = 0;
+}
+
+static void
+param_int64_set_default (GParamSpec *pspec,
+			GValue     *value)
+{
+  value->data[0].v_int64 = G_PARAM_SPEC_INT64 (pspec)->default_value;
+}
+
+static gboolean
+param_int64_validate (GParamSpec *pspec,
+		     GValue     *value)
+{
+  GParamSpecInt64 *lspec = G_PARAM_SPEC_INT64 (pspec);
+  gint64 oval = value->data[0].v_int64;
+  
+  value->data[0].v_int64 = CLAMP (value->data[0].v_int64, lspec->minimum, lspec->maximum);
+  
+  return value->data[0].v_int64 != oval;
+}
+
+static gint
+param_int64_values_cmp (GParamSpec   *pspec,
+		       const GValue *value1,
+		       const GValue *value2)
+{
+  if (value1->data[0].v_int64 < value2->data[0].v_int64)
+    return -1;
+  else
+    return value1->data[0].v_int64 > value2->data[0].v_int64;
+}
+
+static void
+param_uint64_init (GParamSpec *pspec)
+{
+  GParamSpecUInt64 *uspec = G_PARAM_SPEC_UINT64 (pspec);
+  
+  uspec->minimum = 0;
+  uspec->maximum = G_MAXUINT64;
+  uspec->default_value = 0;
+}
+
+static void
+param_uint64_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_uint64 = G_PARAM_SPEC_UINT64 (pspec)->default_value;
+}
+
+static gboolean
+param_uint64_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecUInt64 *uspec = G_PARAM_SPEC_UINT64 (pspec);
+  guint64 oval = value->data[0].v_uint64;
+  
+  value->data[0].v_uint64 = CLAMP (value->data[0].v_uint64, uspec->minimum, uspec->maximum);
+  
+  return value->data[0].v_uint64 != oval;
+}
+
+static gint
+param_uint64_values_cmp (GParamSpec   *pspec,
+			const GValue *value1,
+			const GValue *value2)
+{
+  if (value1->data[0].v_uint64 < value2->data[0].v_uint64)
+    return -1;
+  else
+    return value1->data[0].v_uint64 > value2->data[0].v_uint64;
+}
+
+static void
+param_unichar_init (GParamSpec *pspec)
+{
+  GParamSpecUnichar *uspec = G_PARAM_SPEC_UNICHAR (pspec);
+  
+  uspec->default_value = 0;
+}
+
+static void
+param_unichar_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_uint = G_PARAM_SPEC_UNICHAR (pspec)->default_value;
+}
+
+static gboolean
+param_unichar_validate (GParamSpec *pspec,
+		        GValue     *value)
+{
+  gunichar oval = value->data[0].v_uint;
+  gboolean changed = FALSE;
+
+  if (!g_unichar_validate (oval))
+    {
+      value->data[0].v_uint = 0;
+      changed = TRUE;
+    }
+
+  return changed;
+}
+
+static gint
+param_unichar_values_cmp (GParamSpec   *pspec,
+			const GValue *value1,
+			const GValue *value2)
+{
+  if (value1->data[0].v_uint < value2->data[0].v_uint)
+    return -1;
+  else
+    return value1->data[0].v_uint > value2->data[0].v_uint;
+}
+
+static void
+param_enum_init (GParamSpec *pspec)
+{
+  GParamSpecEnum *espec = G_PARAM_SPEC_ENUM (pspec);
+  
+  espec->enum_class = NULL;
+  espec->default_value = 0;
+}
+
+static void
+param_enum_finalize (GParamSpec *pspec)
+{
+  GParamSpecEnum *espec = G_PARAM_SPEC_ENUM (pspec);
+  GParamSpecClass *parent_class = g_type_class_peek (g_type_parent (G_TYPE_PARAM_ENUM));
+  
+  if (espec->enum_class)
+    {
+      g_type_class_unref (espec->enum_class);
+      espec->enum_class = NULL;
+    }
+  
+  parent_class->finalize (pspec);
+}
+
+static void
+param_enum_set_default (GParamSpec *pspec,
+			GValue     *value)
+{
+  value->data[0].v_long = G_PARAM_SPEC_ENUM (pspec)->default_value;
+}
+
+static gboolean
+param_enum_validate (GParamSpec *pspec,
+		     GValue     *value)
+{
+  GParamSpecEnum *espec = G_PARAM_SPEC_ENUM (pspec);
+  glong oval = value->data[0].v_long;
+  
+  if (!espec->enum_class ||
+      !g_enum_get_value (espec->enum_class, value->data[0].v_long))
+    value->data[0].v_long = espec->default_value;
+  
+  return value->data[0].v_long != oval;
+}
+
+static void
+param_flags_init (GParamSpec *pspec)
+{
+  GParamSpecFlags *fspec = G_PARAM_SPEC_FLAGS (pspec);
+  
+  fspec->flags_class = NULL;
+  fspec->default_value = 0;
+}
+
+static void
+param_flags_finalize (GParamSpec *pspec)
+{
+  GParamSpecFlags *fspec = G_PARAM_SPEC_FLAGS (pspec);
+  GParamSpecClass *parent_class = g_type_class_peek (g_type_parent (G_TYPE_PARAM_FLAGS));
+  
+  if (fspec->flags_class)
+    {
+      g_type_class_unref (fspec->flags_class);
+      fspec->flags_class = NULL;
+    }
+  
+  parent_class->finalize (pspec);
+}
+
+static void
+param_flags_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_ulong = G_PARAM_SPEC_FLAGS (pspec)->default_value;
+}
+
+static gboolean
+param_flags_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecFlags *fspec = G_PARAM_SPEC_FLAGS (pspec);
+  gulong oval = value->data[0].v_ulong;
+  
+  if (fspec->flags_class)
+    value->data[0].v_ulong &= fspec->flags_class->mask;
+  else
+    value->data[0].v_ulong = fspec->default_value;
+  
+  return value->data[0].v_ulong != oval;
+}
+
+static void
+param_float_init (GParamSpec *pspec)
+{
+  GParamSpecFloat *fspec = G_PARAM_SPEC_FLOAT (pspec);
+  
+  fspec->minimum = -G_MAXFLOAT;
+  fspec->maximum = G_MAXFLOAT;
+  fspec->default_value = 0;
+  fspec->epsilon = G_FLOAT_EPSILON;
+}
+
+static void
+param_float_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_float = G_PARAM_SPEC_FLOAT (pspec)->default_value;
+}
+
+static gboolean
+param_float_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecFloat *fspec = G_PARAM_SPEC_FLOAT (pspec);
+  gfloat oval = value->data[0].v_float;
+  
+  value->data[0].v_float = CLAMP (value->data[0].v_float, fspec->minimum, fspec->maximum);
+  
+  return value->data[0].v_float != oval;
+}
+
+static gint
+param_float_values_cmp (GParamSpec   *pspec,
+			const GValue *value1,
+			const GValue *value2)
+{
+  gfloat epsilon = G_PARAM_SPEC_FLOAT (pspec)->epsilon;
+  
+  if (value1->data[0].v_float < value2->data[0].v_float)
+    return - (value2->data[0].v_float - value1->data[0].v_float > epsilon);
+  else
+    return value1->data[0].v_float - value2->data[0].v_float > epsilon;
+}
+
+static void
+param_double_init (GParamSpec *pspec)
+{
+  GParamSpecDouble *dspec = G_PARAM_SPEC_DOUBLE (pspec);
+  
+  dspec->minimum = -G_MAXDOUBLE;
+  dspec->maximum = G_MAXDOUBLE;
+  dspec->default_value = 0;
+  dspec->epsilon = G_DOUBLE_EPSILON;
+}
+
+static void
+param_double_set_default (GParamSpec *pspec,
+			  GValue     *value)
+{
+  value->data[0].v_double = G_PARAM_SPEC_DOUBLE (pspec)->default_value;
+}
+
+static gboolean
+param_double_validate (GParamSpec *pspec,
+		       GValue     *value)
+{
+  GParamSpecDouble *dspec = G_PARAM_SPEC_DOUBLE (pspec);
+  gdouble oval = value->data[0].v_double;
+  
+  value->data[0].v_double = CLAMP (value->data[0].v_double, dspec->minimum, dspec->maximum);
+  
+  return value->data[0].v_double != oval;
+}
+
+static gint
+param_double_values_cmp (GParamSpec   *pspec,
+			 const GValue *value1,
+			 const GValue *value2)
+{
+  gdouble epsilon = G_PARAM_SPEC_DOUBLE (pspec)->epsilon;
+  
+  if (value1->data[0].v_double < value2->data[0].v_double)
+    return - (value2->data[0].v_double - value1->data[0].v_double > epsilon);
+  else
+    return value1->data[0].v_double - value2->data[0].v_double > epsilon;
+}
+
+static void
+param_string_init (GParamSpec *pspec)
+{
+  GParamSpecString *sspec = G_PARAM_SPEC_STRING (pspec);
+  
+  sspec->default_value = NULL;
+  sspec->cset_first = NULL;
+  sspec->cset_nth = NULL;
+  sspec->substitutor = '_';
+  sspec->null_fold_if_empty = FALSE;
+  sspec->ensure_non_null = FALSE;
+}
+
+static void
+param_string_finalize (GParamSpec *pspec)
+{
+  GParamSpecString *sspec = G_PARAM_SPEC_STRING (pspec);
+  GParamSpecClass *parent_class = g_type_class_peek (g_type_parent (G_TYPE_PARAM_STRING));
+  
+  g_free (sspec->default_value);
+  g_free (sspec->cset_first);
+  g_free (sspec->cset_nth);
+  sspec->default_value = NULL;
+  sspec->cset_first = NULL;
+  sspec->cset_nth = NULL;
+  
+  parent_class->finalize (pspec);
+}
+
+static void
+param_string_set_default (GParamSpec *pspec,
+			  GValue     *value)
+{
+  value->data[0].v_pointer = g_strdup (G_PARAM_SPEC_STRING (pspec)->default_value);
+}
+
+static gboolean
+param_string_validate (GParamSpec *pspec,
+		       GValue     *value)
+{
+  GParamSpecString *sspec = G_PARAM_SPEC_STRING (pspec);
+  gchar *string = value->data[0].v_pointer;
+  guint changed = 0;
+  
+  if (string && string[0])
+    {
+      gchar *s;
+      
+      if (sspec->cset_first && !strchr (sspec->cset_first, string[0]))
+	{
+          if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)
+            {
+              value->data[0].v_pointer = g_strdup (string);
+              string = value->data[0].v_pointer;
+              value->data[1].v_uint &= ~G_VALUE_NOCOPY_CONTENTS;
+            }
+	  string[0] = sspec->substitutor;
+	  changed++;
+	}
+      if (sspec->cset_nth)
+	for (s = string + 1; *s; s++)
+	  if (!strchr (sspec->cset_nth, *s))
+	    {
+              if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)
+                {
+                  value->data[0].v_pointer = g_strdup (string);
+                  s = (gchar*) value->data[0].v_pointer + (s - string);
+                  string = value->data[0].v_pointer;
+                  value->data[1].v_uint &= ~G_VALUE_NOCOPY_CONTENTS;
+                }
+	      *s = sspec->substitutor;
+	      changed++;
+	    }
+    }
+  if (sspec->null_fold_if_empty && string && string[0] == 0)
+    {
+      if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+        g_free (value->data[0].v_pointer);
+      else
+        value->data[1].v_uint &= ~G_VALUE_NOCOPY_CONTENTS;
+      value->data[0].v_pointer = NULL;
+      changed++;
+      string = value->data[0].v_pointer;
+    }
+  if (sspec->ensure_non_null && !string)
+    {
+      value->data[1].v_uint &= ~G_VALUE_NOCOPY_CONTENTS;
+      value->data[0].v_pointer = g_strdup ("");
+      changed++;
+      string = value->data[0].v_pointer;
+    }
+
+  return changed;
+}
+
+static gint
+param_string_values_cmp (GParamSpec   *pspec,
+			 const GValue *value1,
+			 const GValue *value2)
+{
+  if (!value1->data[0].v_pointer)
+    return value2->data[0].v_pointer != NULL ? -1 : 0;
+  else if (!value2->data[0].v_pointer)
+    return value1->data[0].v_pointer != NULL;
+  else
+    return strcmp (value1->data[0].v_pointer, value2->data[0].v_pointer);
+}
+
+static void
+param_param_init (GParamSpec *pspec)
+{
+  /* GParamSpecParam *spec = G_PARAM_SPEC_PARAM (pspec); */
+}
+
+static void
+param_param_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static gboolean
+param_param_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  /* GParamSpecParam *spec = G_PARAM_SPEC_PARAM (pspec); */
+  GParamSpec *param = value->data[0].v_pointer;
+  guint changed = 0;
+  
+  if (param && !g_value_type_compatible (G_PARAM_SPEC_TYPE (param), G_PARAM_SPEC_VALUE_TYPE (pspec)))
+    {
+      g_param_spec_unref (param);
+      value->data[0].v_pointer = NULL;
+      changed++;
+    }
+  
+  return changed;
+}
+
+static void
+param_boxed_init (GParamSpec *pspec)
+{
+  /* GParamSpecBoxed *bspec = G_PARAM_SPEC_BOXED (pspec); */
+}
+
+static void
+param_boxed_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static gboolean
+param_boxed_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  /* GParamSpecBoxed *bspec = G_PARAM_SPEC_BOXED (pspec); */
+  guint changed = 0;
+
+  /* can't do a whole lot here since we haven't even G_BOXED_TYPE() */
+  
+  return changed;
+}
+
+static gint
+param_boxed_values_cmp (GParamSpec    *pspec,
+			 const GValue *value1,
+			 const GValue *value2)
+{
+  guint8 *p1 = value1->data[0].v_pointer;
+  guint8 *p2 = value2->data[0].v_pointer;
+
+  /* not much to compare here, try to at least provide stable lesser/greater result */
+
+  return p1 < p2 ? -1 : p1 > p2;
+}
+
+static void
+param_pointer_init (GParamSpec *pspec)
+{
+  /* GParamSpecPointer *spec = G_PARAM_SPEC_POINTER (pspec); */
+}
+
+static void
+param_pointer_set_default (GParamSpec *pspec,
+			   GValue     *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static gboolean
+param_pointer_validate (GParamSpec *pspec,
+			GValue     *value)
+{
+  /* GParamSpecPointer *spec = G_PARAM_SPEC_POINTER (pspec); */
+  guint changed = 0;
+  
+  return changed;
+}
+
+static gint
+param_pointer_values_cmp (GParamSpec   *pspec,
+			  const GValue *value1,
+			  const GValue *value2)
+{
+  guint8 *p1 = value1->data[0].v_pointer;
+  guint8 *p2 = value2->data[0].v_pointer;
+
+  /* not much to compare here, try to at least provide stable lesser/greater result */
+
+  return p1 < p2 ? -1 : p1 > p2;
+}
+
+static void
+param_value_array_init (GParamSpec *pspec)
+{
+  GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
+
+  aspec->element_spec = NULL;
+  aspec->fixed_n_elements = 0; /* disable */
+}
+
+static inline guint
+value_array_ensure_size (GValueArray *value_array,
+			 guint        fixed_n_elements)
+{
+  guint changed = 0;
+
+  if (fixed_n_elements)
+    {
+      while (value_array->n_values < fixed_n_elements)
+	{
+	  g_value_array_append (value_array, NULL);
+	  changed++;
+	}
+      while (value_array->n_values > fixed_n_elements)
+	{
+	  g_value_array_remove (value_array, value_array->n_values - 1);
+	  changed++;
+	}
+    }
+  return changed;
+}
+
+static void
+param_value_array_finalize (GParamSpec *pspec)
+{
+  GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
+  GParamSpecClass *parent_class = g_type_class_peek (g_type_parent (G_TYPE_PARAM_VALUE_ARRAY));
+
+  if (aspec->element_spec)
+    {
+      g_param_spec_unref (aspec->element_spec);
+      aspec->element_spec = NULL;
+    }
+
+  parent_class->finalize (pspec);
+}
+
+static void
+param_value_array_set_default (GParamSpec *pspec,
+			       GValue     *value)
+{
+  GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
+
+  if (!value->data[0].v_pointer && aspec->fixed_n_elements)
+    value->data[0].v_pointer = g_value_array_new (aspec->fixed_n_elements);
+
+  if (value->data[0].v_pointer)
+    {
+      /* g_value_reset (value);  already done */
+      value_array_ensure_size (value->data[0].v_pointer, aspec->fixed_n_elements);
+    }
+}
+
+static gboolean
+param_value_array_validate (GParamSpec *pspec,
+			    GValue     *value)
+{
+  GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
+  GValueArray *value_array = value->data[0].v_pointer;
+  guint changed = 0;
+
+  if (!value->data[0].v_pointer && aspec->fixed_n_elements)
+    value->data[0].v_pointer = g_value_array_new (aspec->fixed_n_elements);
+
+  if (value->data[0].v_pointer)
+    {
+      /* ensure array size validity */
+      changed += value_array_ensure_size (value_array, aspec->fixed_n_elements);
+      
+      /* ensure array values validity against a present element spec */
+      if (aspec->element_spec)
+	{
+	  GParamSpec *element_spec = aspec->element_spec;
+	  guint i;
+	  
+	  for (i = 0; i < value_array->n_values; i++)
+	    {
+	      GValue *element = value_array->values + i;
+	      
+	      /* need to fixup value type, or ensure that the array value is initialized at all */
+	      if (!g_value_type_compatible (G_VALUE_TYPE (element), G_PARAM_SPEC_VALUE_TYPE (element_spec)))
+		{
+		  if (G_VALUE_TYPE (element) != 0)
+		    g_value_unset (element);
+		  g_value_init (element, G_PARAM_SPEC_VALUE_TYPE (element_spec));
+		  g_param_value_set_default (element_spec, element);
+		  changed++;
+		}
+	      /* validate array value against element_spec */
+	      changed += g_param_value_validate (element_spec, element);
+	    }
+	}
+    }
+
+  return changed;
+}
+
+static gint
+param_value_array_values_cmp (GParamSpec   *pspec,
+			      const GValue *value1,
+			      const GValue *value2)
+{
+  GParamSpecValueArray *aspec = G_PARAM_SPEC_VALUE_ARRAY (pspec);
+  GValueArray *value_array1 = value1->data[0].v_pointer;
+  GValueArray *value_array2 = value2->data[0].v_pointer;
+
+  if (!value_array1 || !value_array2)
+    return value_array2 ? -1 : value_array1 != value_array2;
+
+  if (value_array1->n_values != value_array2->n_values)
+    return value_array1->n_values < value_array2->n_values ? -1 : 1;
+  else if (!aspec->element_spec)
+    {
+      /* we need an element specification for comparisons, so there's not much
+       * to compare here, try to at least provide stable lesser/greater result
+       */
+      return value_array1->n_values < value_array2->n_values ? -1 : value_array1->n_values > value_array2->n_values;
+    }
+  else /* value_array1->n_values == value_array2->n_values */
+    {
+      guint i;
+
+      for (i = 0; i < value_array1->n_values; i++)
+	{
+	  GValue *element1 = value_array1->values + i;
+	  GValue *element2 = value_array2->values + i;
+	  gint cmp;
+
+	  /* need corresponding element types, provide stable result otherwise */
+	  if (G_VALUE_TYPE (element1) != G_VALUE_TYPE (element2))
+	    return G_VALUE_TYPE (element1) < G_VALUE_TYPE (element2) ? -1 : 1;
+	  cmp = g_param_values_cmp (aspec->element_spec, element1, element2);
+	  if (cmp)
+	    return cmp;
+	}
+      return 0;
+    }
+}
+
+static void
+param_object_init (GParamSpec *pspec)
+{
+  /* GParamSpecObject *ospec = G_PARAM_SPEC_OBJECT (pspec); */
+}
+
+static void
+param_object_set_default (GParamSpec *pspec,
+			  GValue     *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static gboolean
+param_object_validate (GParamSpec *pspec,
+		       GValue     *value)
+{
+  GParamSpecObject *ospec = G_PARAM_SPEC_OBJECT (pspec);
+  GObject *object = value->data[0].v_pointer;
+  guint changed = 0;
+  
+  if (object && !g_value_type_compatible (G_OBJECT_TYPE (object), G_PARAM_SPEC_VALUE_TYPE (ospec)))
+    {
+      g_object_unref (object);
+      value->data[0].v_pointer = NULL;
+      changed++;
+    }
+  
+  return changed;
+}
+
+static gint
+param_object_values_cmp (GParamSpec   *pspec,
+			 const GValue *value1,
+			 const GValue *value2)
+{
+  guint8 *p1 = value1->data[0].v_pointer;
+  guint8 *p2 = value2->data[0].v_pointer;
+
+  /* not much to compare here, try to at least provide stable lesser/greater result */
+
+  return p1 < p2 ? -1 : p1 > p2;
+}
+
+static void
+param_override_init (GParamSpec *pspec)
+{
+  /* GParamSpecOverride *ospec = G_PARAM_SPEC_OVERRIDE (pspec); */
+}
+
+static void
+param_override_finalize (GParamSpec *pspec)
+{
+  GParamSpecOverride *ospec = G_PARAM_SPEC_OVERRIDE (pspec);
+  GParamSpecClass *parent_class = g_type_class_peek (g_type_parent (G_TYPE_PARAM_OVERRIDE));
+  
+  if (ospec->overridden)
+    {
+      g_param_spec_unref (ospec->overridden);
+      ospec->overridden = NULL;
+    }
+  
+  parent_class->finalize (pspec);
+}
+
+static void
+param_override_set_default (GParamSpec *pspec,
+			    GValue     *value)
+{
+  GParamSpecOverride *ospec = G_PARAM_SPEC_OVERRIDE (pspec);
+
+  g_param_value_set_default (ospec->overridden, value);
+}
+
+static gboolean
+param_override_validate (GParamSpec *pspec,
+			 GValue     *value)
+{
+  GParamSpecOverride *ospec = G_PARAM_SPEC_OVERRIDE (pspec);
+  
+  return g_param_value_validate (ospec->overridden, value);
+}
+
+static gint
+param_override_values_cmp (GParamSpec   *pspec,
+			   const GValue *value1,
+			   const GValue *value2)
+{
+  GParamSpecOverride *ospec = G_PARAM_SPEC_OVERRIDE (pspec);
+
+  return g_param_values_cmp (ospec->overridden, value1, value2);
+}
+
+static void
+param_gtype_init (GParamSpec *pspec)
+{
+}
+
+static void
+param_gtype_set_default (GParamSpec *pspec,
+			 GValue     *value)
+{
+  GParamSpecGType *tspec = G_PARAM_SPEC_GTYPE (pspec);
+
+  value->data[0].v_long = tspec->is_a_type;
+}
+
+static gboolean
+param_gtype_validate (GParamSpec *pspec,
+		      GValue     *value)
+{
+  GParamSpecGType *tspec = G_PARAM_SPEC_GTYPE (pspec);
+  GType gtype = value->data[0].v_long;
+  guint changed = 0;
+  
+  if (tspec->is_a_type != G_TYPE_NONE && !g_type_is_a (gtype, tspec->is_a_type))
+    {
+      value->data[0].v_long = tspec->is_a_type;
+      changed++;
+    }
+  
+  return changed;
+}
+
+static gint
+param_gtype_values_cmp (GParamSpec   *pspec,
+			const GValue *value1,
+			const GValue *value2)
+{
+  GType p1 = value1->data[0].v_long;
+  GType p2 = value2->data[0].v_long;
+
+  /* not much to compare here, try to at least provide stable lesser/greater result */
+
+  return p1 < p2 ? -1 : p1 > p2;
+}
+
+/* --- type initialization --- */
+GType *g_param_spec_types = NULL;
+
+void
+g_param_spec_types_init (void)	
+{
+  const guint n_types = 22;
+  GType type, *spec_types, *spec_types_bound;
+
+  g_param_spec_types = g_new0 (GType, n_types);
+  spec_types = g_param_spec_types;
+  spec_types_bound = g_param_spec_types + n_types;
+  
+  /* G_TYPE_PARAM_CHAR
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecChar),	/* instance_size */
+      16,			/* n_preallocs */
+      param_char_init,		/* instance_init */
+      G_TYPE_CHAR,		/* value_type */
+      NULL,			/* finalize */
+      param_char_set_default,	/* value_set_default */
+      param_char_validate,	/* value_validate */
+      param_int_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamChar"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_CHAR);
+  }
+  
+  /* G_TYPE_PARAM_UCHAR
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecUChar), /* instance_size */
+      16,                       /* n_preallocs */
+      param_uchar_init,         /* instance_init */
+      G_TYPE_UCHAR,		/* value_type */
+      NULL,			/* finalize */
+      param_uchar_set_default,	/* value_set_default */
+      param_uchar_validate,	/* value_validate */
+      param_uint_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamUChar"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_UCHAR);
+  }
+  
+  /* G_TYPE_PARAM_BOOLEAN
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecBoolean), /* instance_size */
+      16,                         /* n_preallocs */
+      NULL,			  /* instance_init */
+      G_TYPE_BOOLEAN,             /* value_type */
+      NULL,                       /* finalize */
+      param_boolean_set_default,  /* value_set_default */
+      param_boolean_validate,     /* value_validate */
+      param_int_values_cmp,       /* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamBoolean"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_BOOLEAN);
+  }
+  
+  /* G_TYPE_PARAM_INT
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecInt),   /* instance_size */
+      16,                       /* n_preallocs */
+      param_int_init,           /* instance_init */
+      G_TYPE_INT,		/* value_type */
+      NULL,			/* finalize */
+      param_int_set_default,	/* value_set_default */
+      param_int_validate,	/* value_validate */
+      param_int_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamInt"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_INT);
+  }
+  
+  /* G_TYPE_PARAM_UINT
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecUInt),  /* instance_size */
+      16,                       /* n_preallocs */
+      param_uint_init,          /* instance_init */
+      G_TYPE_UINT,		/* value_type */
+      NULL,			/* finalize */
+      param_uint_set_default,	/* value_set_default */
+      param_uint_validate,	/* value_validate */
+      param_uint_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamUInt"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_UINT);
+  }
+  
+  /* G_TYPE_PARAM_LONG
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecLong),  /* instance_size */
+      16,                       /* n_preallocs */
+      param_long_init,          /* instance_init */
+      G_TYPE_LONG,		/* value_type */
+      NULL,			/* finalize */
+      param_long_set_default,	/* value_set_default */
+      param_long_validate,	/* value_validate */
+      param_long_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamLong"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_LONG);
+  }
+  
+  /* G_TYPE_PARAM_ULONG
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecULong), /* instance_size */
+      16,                       /* n_preallocs */
+      param_ulong_init,         /* instance_init */
+      G_TYPE_ULONG,		/* value_type */
+      NULL,			/* finalize */
+      param_ulong_set_default,	/* value_set_default */
+      param_ulong_validate,	/* value_validate */
+      param_ulong_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamULong"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_ULONG);
+  }
+
+  /* G_TYPE_PARAM_INT64
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecInt64),  /* instance_size */
+      16,                       /* n_preallocs */
+      param_int64_init,         /* instance_init */
+      G_TYPE_INT64,		/* value_type */
+      NULL,			/* finalize */
+      param_int64_set_default,	/* value_set_default */
+      param_int64_validate,	/* value_validate */
+      param_int64_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamInt64"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_INT64);
+  }
+  
+  /* G_TYPE_PARAM_UINT64
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecUInt64), /* instance_size */
+      16,                       /* n_preallocs */
+      param_uint64_init,        /* instance_init */
+      G_TYPE_UINT64,		/* value_type */
+      NULL,			/* finalize */
+      param_uint64_set_default,	/* value_set_default */
+      param_uint64_validate,	/* value_validate */
+      param_uint64_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamUInt64"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_UINT64);
+  }
+
+  /* G_TYPE_PARAM_UNICHAR
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecUnichar), /* instance_size */
+      16,                        /* n_preallocs */
+      param_unichar_init,	 /* instance_init */
+      G_TYPE_UINT,		 /* value_type */
+      NULL,			 /* finalize */
+      param_unichar_set_default, /* value_set_default */
+      param_unichar_validate,	 /* value_validate */
+      param_unichar_values_cmp,	 /* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamUnichar"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_UNICHAR);
+  }
+
+ /* G_TYPE_PARAM_ENUM
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecEnum),  /* instance_size */
+      16,                       /* n_preallocs */
+      param_enum_init,          /* instance_init */
+      G_TYPE_ENUM,		/* value_type */
+      param_enum_finalize,	/* finalize */
+      param_enum_set_default,	/* value_set_default */
+      param_enum_validate,	/* value_validate */
+      param_long_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamEnum"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_ENUM);
+  }
+  
+  /* G_TYPE_PARAM_FLAGS
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecFlags),	/* instance_size */
+      16,			/* n_preallocs */
+      param_flags_init,		/* instance_init */
+      G_TYPE_FLAGS,		/* value_type */
+      param_flags_finalize,	/* finalize */
+      param_flags_set_default,	/* value_set_default */
+      param_flags_validate,	/* value_validate */
+      param_ulong_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamFlags"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_FLAGS);
+  }
+  
+  /* G_TYPE_PARAM_FLOAT
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecFloat), /* instance_size */
+      16,                       /* n_preallocs */
+      param_float_init,         /* instance_init */
+      G_TYPE_FLOAT,		/* value_type */
+      NULL,			/* finalize */
+      param_float_set_default,	/* value_set_default */
+      param_float_validate,	/* value_validate */
+      param_float_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamFloat"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_FLOAT);
+  }
+  
+  /* G_TYPE_PARAM_DOUBLE
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecDouble),	/* instance_size */
+      16,				/* n_preallocs */
+      param_double_init,		/* instance_init */
+      G_TYPE_DOUBLE,			/* value_type */
+      NULL,				/* finalize */
+      param_double_set_default,		/* value_set_default */
+      param_double_validate,		/* value_validate */
+      param_double_values_cmp,		/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamDouble"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_DOUBLE);
+  }
+  
+  /* G_TYPE_PARAM_STRING
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecString),	/* instance_size */
+      16,				/* n_preallocs */
+      param_string_init,		/* instance_init */
+      G_TYPE_STRING,			/* value_type */
+      param_string_finalize,		/* finalize */
+      param_string_set_default,		/* value_set_default */
+      param_string_validate,		/* value_validate */
+      param_string_values_cmp,		/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamString"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_STRING);
+  }
+  
+  /* G_TYPE_PARAM_PARAM
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecParam),	/* instance_size */
+      16,			/* n_preallocs */
+      param_param_init,		/* instance_init */
+      G_TYPE_PARAM,		/* value_type */
+      NULL,			/* finalize */
+      param_param_set_default,	/* value_set_default */
+      param_param_validate,	/* value_validate */
+      param_pointer_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamParam"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_PARAM);
+  }
+  
+  /* G_TYPE_PARAM_BOXED
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecBoxed),	/* instance_size */
+      4,			/* n_preallocs */
+      param_boxed_init,		/* instance_init */
+      G_TYPE_BOXED,		/* value_type */
+      NULL,			/* finalize */
+      param_boxed_set_default,	/* value_set_default */
+      param_boxed_validate,	/* value_validate */
+      param_boxed_values_cmp,	/* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamBoxed"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_BOXED);
+  }
+
+  /* G_TYPE_PARAM_POINTER
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecPointer),  /* instance_size */
+      0,                           /* n_preallocs */
+      param_pointer_init,	   /* instance_init */
+      G_TYPE_POINTER,  		   /* value_type */
+      NULL,			   /* finalize */
+      param_pointer_set_default,   /* value_set_default */
+      param_pointer_validate,	   /* value_validate */
+      param_pointer_values_cmp,	   /* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamPointer"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_POINTER);
+  }
+  
+  /* G_TYPE_PARAM_VALUE_ARRAY
+   */
+  {
+    static /* const */ GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecValueArray),	/* instance_size */
+      0,				/* n_preallocs */
+      param_value_array_init,		/* instance_init */
+      0xdeadbeef,			/* value_type, assigned further down */
+      param_value_array_finalize,	/* finalize */
+      param_value_array_set_default,	/* value_set_default */
+      param_value_array_validate,	/* value_validate */
+      param_value_array_values_cmp,	/* values_cmp */
+    };
+    pspec_info.value_type = G_TYPE_VALUE_ARRAY;
+    type = g_param_type_register_static (g_intern_static_string ("GParamValueArray"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_VALUE_ARRAY);
+  }
+
+  /* G_TYPE_PARAM_OBJECT
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecObject), /* instance_size */
+      16,                        /* n_preallocs */
+      param_object_init,	 /* instance_init */
+      G_TYPE_OBJECT,		 /* value_type */
+      NULL,			 /* finalize */
+      param_object_set_default,	 /* value_set_default */
+      param_object_validate,	 /* value_validate */
+      param_object_values_cmp,	 /* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamObject"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_OBJECT);
+  }
+
+  /* G_TYPE_PARAM_OVERRIDE
+   */
+  {
+    static const GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecOverride), /* instance_size */
+      16,                        /* n_preallocs */
+      param_override_init,	 /* instance_init */
+      G_TYPE_NONE,		 /* value_type */
+      param_override_finalize,	 /* finalize */
+      param_override_set_default, /* value_set_default */
+      param_override_validate,	  /* value_validate */
+      param_override_values_cmp,  /* values_cmp */
+    };
+    type = g_param_type_register_static (g_intern_static_string ("GParamOverride"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_OVERRIDE);
+  }
+
+  /* G_TYPE_PARAM_GTYPE
+   */
+  {
+    GParamSpecTypeInfo pspec_info = {
+      sizeof (GParamSpecGType),	/* instance_size */
+      0,			/* n_preallocs */
+      param_gtype_init,		/* instance_init */
+      0xdeadbeef,		/* value_type, assigned further down */
+      NULL,			/* finalize */
+      param_gtype_set_default,	/* value_set_default */
+      param_gtype_validate,	/* value_validate */
+      param_gtype_values_cmp,	/* values_cmp */
+    };
+    pspec_info.value_type = G_TYPE_GTYPE;
+    type = g_param_type_register_static (g_intern_static_string ("GParamGType"), &pspec_info);
+    *spec_types++ = type;
+    g_assert (type == G_TYPE_PARAM_GTYPE);
+  }
+
+  g_assert (spec_types == spec_types_bound);
+}
+
+/* --- GParamSpec initialization --- */
+
+/**
+ * g_param_spec_char:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecChar instance specifying a %G_TYPE_CHAR property.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_char (const gchar *name,
+		   const gchar *nick,
+		   const gchar *blurb,
+		   gint8	minimum,
+		   gint8	maximum,
+		   gint8	default_value,
+		   GParamFlags	flags)
+{
+  GParamSpecChar *cspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  cspec = g_param_spec_internal (G_TYPE_PARAM_CHAR,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  cspec->minimum = minimum;
+  cspec->maximum = maximum;
+  cspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (cspec);
+}
+
+/**
+ * g_param_spec_uchar:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecUChar instance specifying a %G_TYPE_UCHAR property.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_uchar (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    guint8	 minimum,
+		    guint8	 maximum,
+		    guint8	 default_value,
+		    GParamFlags	 flags)
+{
+  GParamSpecUChar *uspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  uspec = g_param_spec_internal (G_TYPE_PARAM_UCHAR,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  uspec->minimum = minimum;
+  uspec->maximum = maximum;
+  uspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (uspec);
+}
+
+/**
+ * g_param_spec_boolean:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecBoolean instance specifying a %G_TYPE_BOOLEAN
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_boolean (const gchar *name,
+		      const gchar *nick,
+		      const gchar *blurb,
+		      gboolean	   default_value,
+		      GParamFlags  flags)
+{
+  GParamSpecBoolean *bspec;
+
+  g_return_val_if_fail (default_value == TRUE || default_value == FALSE, NULL);
+
+  bspec = g_param_spec_internal (G_TYPE_PARAM_BOOLEAN,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  bspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (bspec);
+}
+
+/**
+ * g_param_spec_int:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecInt instance specifying a %G_TYPE_INT property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_int (const gchar *name,
+		  const gchar *nick,
+		  const gchar *blurb,
+		  gint	       minimum,
+		  gint	       maximum,
+		  gint	       default_value,
+		  GParamFlags  flags)
+{
+  GParamSpecInt *ispec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  ispec = g_param_spec_internal (G_TYPE_PARAM_INT,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  ispec->minimum = minimum;
+  ispec->maximum = maximum;
+  ispec->default_value = default_value;
+  
+  return G_PARAM_SPEC (ispec);
+}
+
+/**
+ * g_param_spec_uint:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecUInt instance specifying a %G_TYPE_UINT property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_uint (const gchar *name,
+		   const gchar *nick,
+		   const gchar *blurb,
+		   guint	minimum,
+		   guint	maximum,
+		   guint	default_value,
+		   GParamFlags	flags)
+{
+  GParamSpecUInt *uspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  uspec = g_param_spec_internal (G_TYPE_PARAM_UINT,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  uspec->minimum = minimum;
+  uspec->maximum = maximum;
+  uspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (uspec);
+}
+
+/**
+ * g_param_spec_long:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecLong instance specifying a %G_TYPE_LONG property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_long (const gchar *name,
+		   const gchar *nick,
+		   const gchar *blurb,
+		   glong	minimum,
+		   glong	maximum,
+		   glong	default_value,
+		   GParamFlags	flags)
+{
+  GParamSpecLong *lspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  lspec = g_param_spec_internal (G_TYPE_PARAM_LONG,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  lspec->minimum = minimum;
+  lspec->maximum = maximum;
+  lspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (lspec);
+}
+
+/**
+ * g_param_spec_ulong:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecULong instance specifying a %G_TYPE_ULONG
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_ulong (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    gulong	 minimum,
+		    gulong	 maximum,
+		    gulong	 default_value,
+		    GParamFlags	 flags)
+{
+  GParamSpecULong *uspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  uspec = g_param_spec_internal (G_TYPE_PARAM_ULONG,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  uspec->minimum = minimum;
+  uspec->maximum = maximum;
+  uspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (uspec);
+}
+
+/**
+ * g_param_spec_int64:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecInt64 instance specifying a %G_TYPE_INT64 property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_int64 (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    gint64	 minimum,
+		    gint64	 maximum,
+		    gint64	 default_value,
+		    GParamFlags	 flags)
+{
+  GParamSpecInt64 *lspec;
+  
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  lspec = g_param_spec_internal (G_TYPE_PARAM_INT64,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  lspec->minimum = minimum;
+  lspec->maximum = maximum;
+  lspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (lspec);
+}
+
+/**
+ * g_param_spec_uint64:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecUInt64 instance specifying a %G_TYPE_UINT64
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_uint64 (const gchar *name,
+		     const gchar *nick,
+		     const gchar *blurb,
+		     guint64	  minimum,
+		     guint64	  maximum,
+		     guint64	  default_value,
+		     GParamFlags  flags)
+{
+  GParamSpecUInt64 *uspec;
+  
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+  
+  uspec = g_param_spec_internal (G_TYPE_PARAM_UINT64,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  uspec->minimum = minimum;
+  uspec->maximum = maximum;
+  uspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (uspec);
+}
+
+/**
+ * g_param_spec_unichar:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecUnichar instance specifying a %G_TYPE_UINT
+ * property. #GValue structures for this property can be accessed with
+ * g_value_set_uint() and g_value_get_uint().
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_unichar (const gchar *name,
+		      const gchar *nick,
+		      const gchar *blurb,
+		      gunichar	   default_value,
+		      GParamFlags  flags)
+{
+  GParamSpecUnichar *uspec;
+
+  uspec = g_param_spec_internal (G_TYPE_PARAM_UNICHAR,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  uspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (uspec);
+}
+
+/**
+ * g_param_spec_enum:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @enum_type: a #GType derived from %G_TYPE_ENUM
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecEnum instance specifying a %G_TYPE_ENUM
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_enum (const gchar *name,
+		   const gchar *nick,
+		   const gchar *blurb,
+		   GType	enum_type,
+		   gint		default_value,
+		   GParamFlags	flags)
+{
+  GParamSpecEnum *espec;
+  GEnumClass *enum_class;
+  
+  g_return_val_if_fail (G_TYPE_IS_ENUM (enum_type), NULL);
+
+  enum_class = g_type_class_ref (enum_type);
+
+  g_return_val_if_fail (g_enum_get_value (enum_class, default_value) != NULL, NULL);
+  
+  espec = g_param_spec_internal (G_TYPE_PARAM_ENUM,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  espec->enum_class = enum_class;
+  espec->default_value = default_value;
+  G_PARAM_SPEC (espec)->value_type = enum_type;
+  
+  return G_PARAM_SPEC (espec);
+}
+
+/**
+ * g_param_spec_flags:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @flags_type: a #GType derived from %G_TYPE_FLAGS
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecFlags instance specifying a %G_TYPE_FLAGS
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_flags (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    GType	 flags_type,
+		    guint	 default_value,
+		    GParamFlags	 flags)
+{
+  GParamSpecFlags *fspec;
+  GFlagsClass *flags_class;
+  
+  g_return_val_if_fail (G_TYPE_IS_FLAGS (flags_type), NULL);
+
+  flags_class = g_type_class_ref (flags_type);
+
+  g_return_val_if_fail ((default_value & flags_class->mask) == default_value, NULL);
+  
+  fspec = g_param_spec_internal (G_TYPE_PARAM_FLAGS,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  fspec->flags_class = flags_class;
+  fspec->default_value = default_value;
+  G_PARAM_SPEC (fspec)->value_type = flags_type;
+  
+  return G_PARAM_SPEC (fspec);
+}
+
+/**
+ * g_param_spec_float:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecFloat instance specifying a %G_TYPE_FLOAT property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_float (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    gfloat	 minimum,
+		    gfloat	 maximum,
+		    gfloat	 default_value,
+		    GParamFlags	 flags)
+{
+  GParamSpecFloat *fspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  fspec = g_param_spec_internal (G_TYPE_PARAM_FLOAT,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  fspec->minimum = minimum;
+  fspec->maximum = maximum;
+  fspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (fspec);
+}
+
+/**
+ * g_param_spec_double:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecDouble instance specifying a %G_TYPE_DOUBLE
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_double (const gchar *name,
+		     const gchar *nick,
+		     const gchar *blurb,
+		     gdouble	  minimum,
+		     gdouble	  maximum,
+		     gdouble	  default_value,
+		     GParamFlags  flags)
+{
+  GParamSpecDouble *dspec;
+
+  g_return_val_if_fail (default_value >= minimum && default_value <= maximum, NULL);
+
+  dspec = g_param_spec_internal (G_TYPE_PARAM_DOUBLE,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  
+  dspec->minimum = minimum;
+  dspec->maximum = maximum;
+  dspec->default_value = default_value;
+  
+  return G_PARAM_SPEC (dspec);
+}
+
+/**
+ * g_param_spec_string:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @default_value: default value for the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecString instance.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_string (const gchar *name,
+		     const gchar *nick,
+		     const gchar *blurb,
+		     const gchar *default_value,
+		     GParamFlags  flags)
+{
+  GParamSpecString *sspec = g_param_spec_internal (G_TYPE_PARAM_STRING,
+						   name,
+						   nick,
+						   blurb,
+						   flags);
+  g_free (sspec->default_value);
+  sspec->default_value = g_strdup (default_value);
+  
+  return G_PARAM_SPEC (sspec);
+}
+
+/**
+ * g_param_spec_param:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @param_type: a #GType derived from %G_TYPE_PARAM
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecParam instance specifying a %G_TYPE_PARAM
+ * property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_param (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    GType	 param_type,
+		    GParamFlags  flags)
+{
+  GParamSpecParam *pspec;
+  
+  g_return_val_if_fail (G_TYPE_IS_PARAM (param_type), NULL);
+  
+  pspec = g_param_spec_internal (G_TYPE_PARAM_PARAM,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  G_PARAM_SPEC (pspec)->value_type = param_type;
+  
+  return G_PARAM_SPEC (pspec);
+}
+
+/**
+ * g_param_spec_boxed:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @boxed_type: %G_TYPE_BOXED derived type of this property
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecBoxed instance specifying a %G_TYPE_BOXED
+ * derived property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_boxed (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    GType	 boxed_type,
+		    GParamFlags  flags)
+{
+  GParamSpecBoxed *bspec;
+  
+  g_return_val_if_fail (G_TYPE_IS_BOXED (boxed_type), NULL);
+  g_return_val_if_fail (G_TYPE_IS_VALUE_TYPE (boxed_type), NULL);
+  
+  bspec = g_param_spec_internal (G_TYPE_PARAM_BOXED,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  G_PARAM_SPEC (bspec)->value_type = boxed_type;
+  
+  return G_PARAM_SPEC (bspec);
+}
+
+/**
+ * g_param_spec_pointer:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecPoiner instance specifying a pointer property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_pointer (const gchar *name,
+		      const gchar *nick,
+		      const gchar *blurb,
+		      GParamFlags  flags)
+{
+  GParamSpecPointer *pspec;
+  
+  pspec = g_param_spec_internal (G_TYPE_PARAM_POINTER,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  return G_PARAM_SPEC (pspec);
+}
+
+/**
+ * g_param_spec_gtype:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @is_a_type: a #GType whose subtypes are allowed as values
+ *  of the property (use %G_TYPE_NONE for any type)
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecGType instance specifying a
+ * %G_TYPE_GTYPE property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Since: 2.10
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_gtype (const gchar *name,
+		    const gchar *nick,
+		    const gchar *blurb,
+		    GType        is_a_type,
+		    GParamFlags  flags)
+{
+  GParamSpecGType *tspec;
+  
+  tspec = g_param_spec_internal (G_TYPE_PARAM_GTYPE,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+
+  tspec->is_a_type = is_a_type;
+
+  return G_PARAM_SPEC (tspec);
+}
+
+/**
+ * g_param_spec_value_array:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @element_spec: a #GParamSpec describing the elements contained in
+ *  arrays of this property, may be %NULL
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecValueArray instance specifying a
+ * %G_TYPE_VALUE_ARRAY property. %G_TYPE_VALUE_ARRAY is a
+ * %G_TYPE_BOXED type, as such, #GValue structures for this property
+ * can be accessed with g_value_set_boxed() and g_value_get_boxed().
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_value_array (const gchar *name,
+			  const gchar *nick,
+			  const gchar *blurb,
+			  GParamSpec  *element_spec,
+			  GParamFlags  flags)
+{
+  GParamSpecValueArray *aspec;
+  
+  if (element_spec)
+    g_return_val_if_fail (G_IS_PARAM_SPEC (element_spec), NULL);
+  
+  aspec = g_param_spec_internal (G_TYPE_PARAM_VALUE_ARRAY,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  if (element_spec)
+    {
+      aspec->element_spec = g_param_spec_ref (element_spec);
+      g_param_spec_sink (element_spec);
+    }
+
+  return G_PARAM_SPEC (aspec);
+}
+
+/**
+ * g_param_spec_object:
+ * @name: canonical name of the property specified
+ * @nick: nick name for the property specified
+ * @blurb: description of the property specified
+ * @object_type: %G_TYPE_OBJECT derived type of this property
+ * @flags: flags for the property specified
+ *
+ * Creates a new #GParamSpecBoxed instance specifying a %G_TYPE_OBJECT
+ * derived property.
+ *
+ * See g_param_spec_internal() for details on property names.
+ *
+ * Returns: a newly created parameter specification
+ */
+GParamSpec*
+g_param_spec_object (const gchar *name,
+		     const gchar *nick,
+		     const gchar *blurb,
+		     GType	  object_type,
+		     GParamFlags  flags)
+{
+  GParamSpecObject *ospec;
+  
+  g_return_val_if_fail (g_type_is_a (object_type, G_TYPE_OBJECT), NULL);
+  
+  ospec = g_param_spec_internal (G_TYPE_PARAM_OBJECT,
+				 name,
+				 nick,
+				 blurb,
+				 flags);
+  G_PARAM_SPEC (ospec)->value_type = object_type;
+  
+  return G_PARAM_SPEC (ospec);
+}
+
+/**
+ * g_param_spec_override:
+ * @name: the name of the property.
+ * @overridden: The property that is being overridden
+ *
+ * Creates a new property of type #GParamSpecOverride. This is used
+ * to direct operations to another paramspec, and will not be directly
+ * useful unless you are implementing a new base type similar to GObject.
+ *
+ * Since: 2.4
+ *
+ * Returns: the newly created #GParamSpec
+ */
+GParamSpec*
+g_param_spec_override (const gchar *name,
+		       GParamSpec  *overridden)
+{
+  GParamSpec *pspec;
+  
+  g_return_val_if_fail (name != NULL, NULL);
+  g_return_val_if_fail (G_IS_PARAM_SPEC (overridden), NULL);
+  
+  /* Dereference further redirections for property that was passed in
+   */
+  while (TRUE)
+    {
+      GParamSpec *indirect = g_param_spec_get_redirect_target (overridden);
+      if (indirect)
+	overridden = indirect;
+      else
+	break;
+    }
+
+  pspec = g_param_spec_internal (G_TYPE_PARAM_OVERRIDE,
+				 name, NULL, NULL,
+				 overridden->flags);
+  
+  pspec->value_type = G_PARAM_SPEC_VALUE_TYPE (overridden);
+  G_PARAM_SPEC_OVERRIDE (pspec)->overridden = g_param_spec_ref (overridden);
+
+  return pspec;
+}
+
+#define __G_PARAMSPECS_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gparamspecs.h b/gobject/gparamspecs.h
new file mode 100644
index 0000000..345db03
--- /dev/null
+++ b/gobject/gparamspecs.h
@@ -0,0 +1,1083 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * gparamspecs.h: GLib default param specs
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_PARAMSPECS_H__
+#define __G_PARAMSPECS_H__
+
+#include        <gobject/gvalue.h>
+#include        <gobject/genums.h>
+#include        <gobject/gboxed.h>
+#include        <gobject/gobject.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+/**
+ * G_TYPE_PARAM_CHAR:
+ * 
+ * The #GType of #GParamSpecChar.
+ */
+#define	G_TYPE_PARAM_CHAR		   (g_param_spec_types[0])
+/**
+ * G_IS_PARAM_SPEC_CHAR:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_CHAR.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_CHAR(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_CHAR))
+/**
+ * G_PARAM_SPEC_CHAR:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecChar.
+ */
+#define G_PARAM_SPEC_CHAR(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_CHAR, GParamSpecChar))
+
+/**
+ * G_TYPE_PARAM_UCHAR:
+ * 
+ * The #GType of #GParamSpecUChar.
+ */
+#define	G_TYPE_PARAM_UCHAR		   (g_param_spec_types[1])
+/**
+ * G_IS_PARAM_SPEC_UCHAR:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UCHAR.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_UCHAR(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UCHAR))
+/**
+ * G_PARAM_SPEC_UCHAR:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecUChar.
+ */
+#define G_PARAM_SPEC_UCHAR(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UCHAR, GParamSpecUChar))
+
+/**
+ * G_TYPE_PARAM_BOOLEAN:
+ * 
+ * The #GType of #GParamSpecBoolean.
+ */
+#define	G_TYPE_PARAM_BOOLEAN		   (g_param_spec_types[2])
+/**
+ * G_IS_PARAM_SPEC_BOOLEAN:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOOLEAN.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
+/**
+ * G_PARAM_SPEC_BOOLEAN:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecBoolean.
+ */
+#define G_PARAM_SPEC_BOOLEAN(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOOLEAN, GParamSpecBoolean))
+
+/**
+ * G_TYPE_PARAM_INT:
+ * 
+ * The #GType of #GParamSpecInt.
+ */
+#define	G_TYPE_PARAM_INT		   (g_param_spec_types[3])
+/**
+ * G_IS_PARAM_SPEC_INT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_INT(pspec)         (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT))
+/**
+ * G_PARAM_SPEC_INT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecInt.
+ */
+#define G_PARAM_SPEC_INT(pspec)            (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT, GParamSpecInt))
+
+/**
+ * G_TYPE_PARAM_UINT:
+ * 
+ * The #GType of #GParamSpecUInt.
+ */
+#define	G_TYPE_PARAM_UINT		   (g_param_spec_types[4])
+/**
+ * G_IS_PARAM_SPEC_UINT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_UINT(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT))
+/**
+ * G_PARAM_SPEC_UINT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecUInt.
+ */
+#define G_PARAM_SPEC_UINT(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT, GParamSpecUInt))
+
+/**
+ * G_TYPE_PARAM_LONG:
+ * 
+ * The #GType of #GParamSpecLong.
+ */
+#define	G_TYPE_PARAM_LONG		   (g_param_spec_types[5])
+/**
+ * G_IS_PARAM_SPEC_LONG:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_LONG.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_LONG(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_LONG))
+/**
+ * G_PARAM_SPEC_LONG:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecLong.
+ */
+#define G_PARAM_SPEC_LONG(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_LONG, GParamSpecLong))
+
+/**
+ * G_TYPE_PARAM_ULONG:
+ * 
+ * The #GType of #GParamSpecULong.
+ */
+#define	G_TYPE_PARAM_ULONG		   (g_param_spec_types[6])
+/**
+ * G_IS_PARAM_SPEC_ULONG:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ULONG.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_ULONG(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ULONG))
+/**
+ * G_PARAM_SPEC_ULONG:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecULong.
+ */
+#define G_PARAM_SPEC_ULONG(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ULONG, GParamSpecULong))
+
+/**
+ * G_TYPE_PARAM_INT64:
+ * 
+ * The #GType of #GParamSpecInt64.
+ */
+#define	G_TYPE_PARAM_INT64		   (g_param_spec_types[7])
+/**
+ * G_IS_PARAM_SPEC_INT64:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT64.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_INT64(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT64))
+/**
+ * G_PARAM_SPEC_INT64:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecInt64.
+ */
+#define G_PARAM_SPEC_INT64(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT64, GParamSpecInt64))
+
+/**
+ * G_TYPE_PARAM_UINT64:
+ * 
+ * The #GType of #GParamSpecUInt64.
+ */
+#define	G_TYPE_PARAM_UINT64		   (g_param_spec_types[8])
+/**
+ * G_IS_PARAM_SPEC_UINT64:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT64.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_UINT64(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64))
+/**
+ * G_PARAM_SPEC_UINT64:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecUInt64.
+ */
+#define G_PARAM_SPEC_UINT64(pspec)         (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT64, GParamSpecUInt64))
+
+/**
+ * G_TYPE_PARAM_UNICHAR:
+ * 
+ * The #GType of #GParamSpecUnichar.
+ */
+#define	G_TYPE_PARAM_UNICHAR		   (g_param_spec_types[9])
+/**
+ * G_PARAM_SPEC_UNICHAR:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecUnichar.
+ */
+#define G_PARAM_SPEC_UNICHAR(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UNICHAR, GParamSpecUnichar))
+/**
+ * G_IS_PARAM_SPEC_UNICHAR:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UNICHAR.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_UNICHAR(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UNICHAR))
+
+/**
+ * G_TYPE_PARAM_ENUM:
+ * 
+ * The #GType of #GParamSpecEnum.
+ */
+#define	G_TYPE_PARAM_ENUM		   (g_param_spec_types[10])
+/**
+ * G_IS_PARAM_SPEC_ENUM:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ENUM.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_ENUM(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
+/**
+ * G_PARAM_SPEC_ENUM:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecEnum.
+ */
+#define G_PARAM_SPEC_ENUM(pspec)           (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ENUM, GParamSpecEnum))
+
+/**
+ * G_TYPE_PARAM_FLAGS:
+ * 
+ * The #GType of #GParamSpecFlags.
+ */
+#define	G_TYPE_PARAM_FLAGS		   (g_param_spec_types[11])
+/**
+ * G_IS_PARAM_SPEC_FLAGS:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLAGS.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_FLAGS(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
+/**
+ * G_PARAM_SPEC_FLAGS:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecFlags.
+ */
+#define G_PARAM_SPEC_FLAGS(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLAGS, GParamSpecFlags))
+
+/**
+ * G_TYPE_PARAM_FLOAT:
+ * 
+ * The #GType of #GParamSpecFloat.
+ */
+#define	G_TYPE_PARAM_FLOAT		   (g_param_spec_types[12])
+/**
+ * G_IS_PARAM_SPEC_FLOAT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLOAT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_FLOAT(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLOAT))
+/**
+ * G_PARAM_SPEC_FLOAT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecFloat.
+ */
+#define G_PARAM_SPEC_FLOAT(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLOAT, GParamSpecFloat))
+
+/**
+ * G_TYPE_PARAM_DOUBLE:
+ * 
+ * The #GType of #GParamSpecDouble.
+ */
+#define	G_TYPE_PARAM_DOUBLE		   (g_param_spec_types[13])
+/**
+ * G_IS_PARAM_SPEC_DOUBLE:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_DOUBLE.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_DOUBLE(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE))
+/**
+ * G_PARAM_SPEC_DOUBLE:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecDouble.
+ */
+#define G_PARAM_SPEC_DOUBLE(pspec)         (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_DOUBLE, GParamSpecDouble))
+
+/**
+ * G_TYPE_PARAM_STRING:
+ * 
+ * The #GType of #GParamSpecString.
+ */
+#define	G_TYPE_PARAM_STRING		   (g_param_spec_types[14])
+/**
+ * G_IS_PARAM_SPEC_STRING:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_STRING.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
+/**
+ * G_PARAM_SPEC_STRING:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Casts a #GParamSpec instance into a #GParamSpecString.
+ */
+#define G_PARAM_SPEC_STRING(pspec)         (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_STRING, GParamSpecString))
+
+/**
+ * G_TYPE_PARAM_PARAM:
+ * 
+ * The #GType of #GParamSpecParam.
+ */
+#define	G_TYPE_PARAM_PARAM		   (g_param_spec_types[15])
+/**
+ * G_IS_PARAM_SPEC_PARAM:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_PARAM.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_PARAM(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_PARAM))
+/**
+ * G_PARAM_SPEC_PARAM:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Casts a #GParamSpec instance into a #GParamSpecParam.
+ */
+#define G_PARAM_SPEC_PARAM(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_PARAM, GParamSpecParam))
+
+/**
+ * G_TYPE_PARAM_BOXED:
+ * 
+ * The #GType of #GParamSpecBoxed.
+ */
+#define	G_TYPE_PARAM_BOXED		   (g_param_spec_types[16])
+/**
+ * G_IS_PARAM_SPEC_BOXED:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOXED.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
+/**
+ * G_PARAM_SPEC_BOXED:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecBoxed.
+ */
+#define G_PARAM_SPEC_BOXED(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOXED, GParamSpecBoxed))
+
+/**
+ * G_TYPE_PARAM_POINTER:
+ * 
+ * The #GType of #GParamSpecPointer.
+ */
+#define	G_TYPE_PARAM_POINTER		   (g_param_spec_types[17])
+/**
+ * G_IS_PARAM_SPEC_POINTER:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_POINTER.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
+/**
+ * G_PARAM_SPEC_POINTER:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Casts a #GParamSpec instance into a #GParamSpecPointer.
+ */
+#define G_PARAM_SPEC_POINTER(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_POINTER, GParamSpecPointer))
+
+/**
+ * G_TYPE_PARAM_VALUE_ARRAY:
+ * 
+ * The #GType of #GParamSpecValueArray.
+ */
+#define	G_TYPE_PARAM_VALUE_ARRAY	   (g_param_spec_types[18])
+/**
+ * G_IS_PARAM_SPEC_VALUE_ARRAY:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VALUE_ARRAY.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_VALUE_ARRAY(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VALUE_ARRAY))
+/**
+ * G_PARAM_SPEC_VALUE_ARRAY:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Cast a #GParamSpec instance into a #GParamSpecValueArray.
+ */
+#define G_PARAM_SPEC_VALUE_ARRAY(pspec)    (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VALUE_ARRAY, GParamSpecValueArray))
+
+/**
+ * G_TYPE_PARAM_OBJECT:
+ * 
+ * The #GType of #GParamSpecObject.
+ */
+#define	G_TYPE_PARAM_OBJECT		   (g_param_spec_types[19])
+/**
+ * G_IS_PARAM_SPEC_OBJECT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OBJECT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
+/**
+ * G_PARAM_SPEC_OBJECT:
+ * @pspec: a valid #GParamSpec instance
+ * 
+ * Casts a #GParamSpec instance into a #GParamSpecObject.
+ */
+#define G_PARAM_SPEC_OBJECT(pspec)         (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OBJECT, GParamSpecObject))
+
+/**
+ * G_TYPE_PARAM_OVERRIDE:
+ * 
+ * The #GType of #GParamSpecOverride.
+ * 
+ * Since: 2.4
+ */
+#define	G_TYPE_PARAM_OVERRIDE		   (g_param_spec_types[20])
+/**
+ * G_IS_PARAM_SPEC_OVERRIDE:
+ * @pspec: a #GParamSpec
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OVERRIDE.
+ * 
+ * Since: 2.4
+ * Returns: %TRUE on success.
+ */
+#define G_IS_PARAM_SPEC_OVERRIDE(pspec)    (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OVERRIDE))
+/**
+ * G_PARAM_SPEC_OVERRIDE:
+ * @pspec: a #GParamSpec
+ * 
+ * Casts a #GParamSpec into a #GParamSpecOverride.
+ * 
+ * Since: 2.4
+ */
+#define G_PARAM_SPEC_OVERRIDE(pspec)       (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OVERRIDE, GParamSpecOverride))
+
+/**
+ * G_TYPE_PARAM_GTYPE:
+ * 
+ * The #GType of #GParamSpecGType.
+ * 
+ * Since: 2.10
+ */
+#define	G_TYPE_PARAM_GTYPE		   (g_param_spec_types[21])
+/**
+ * G_IS_PARAM_SPEC_GTYPE:
+ * @pspec: a #GParamSpec
+ * 
+ * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_GTYPE.
+ * 
+ * Since: 2.10
+ * Returns: %TRUE on success. 
+ */
+#define G_IS_PARAM_SPEC_GTYPE(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_GTYPE))
+/**
+ * G_PARAM_SPEC_GTYPE:
+ * @pspec: a #GParamSpec
+ * 
+ * Casts a #GParamSpec into a #GParamSpecGType.
+ * 
+ * Since: 2.10
+ */
+#define G_PARAM_SPEC_GTYPE(pspec)          (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_GTYPE, GParamSpecGType))
+
+
+/* --- typedefs & structures --- */
+typedef struct _GParamSpecChar       GParamSpecChar;
+typedef struct _GParamSpecUChar      GParamSpecUChar;
+typedef struct _GParamSpecBoolean    GParamSpecBoolean;
+typedef struct _GParamSpecInt        GParamSpecInt;
+typedef struct _GParamSpecUInt       GParamSpecUInt;
+typedef struct _GParamSpecLong       GParamSpecLong;
+typedef struct _GParamSpecULong      GParamSpecULong;
+typedef struct _GParamSpecInt64      GParamSpecInt64;
+typedef struct _GParamSpecUInt64     GParamSpecUInt64;
+typedef struct _GParamSpecUnichar    GParamSpecUnichar;
+typedef struct _GParamSpecEnum       GParamSpecEnum;
+typedef struct _GParamSpecFlags      GParamSpecFlags;
+typedef struct _GParamSpecFloat      GParamSpecFloat;
+typedef struct _GParamSpecDouble     GParamSpecDouble;
+typedef struct _GParamSpecString     GParamSpecString;
+typedef struct _GParamSpecParam      GParamSpecParam;
+typedef struct _GParamSpecBoxed      GParamSpecBoxed;
+typedef struct _GParamSpecPointer    GParamSpecPointer;
+typedef struct _GParamSpecValueArray GParamSpecValueArray;
+typedef struct _GParamSpecObject     GParamSpecObject;
+typedef struct _GParamSpecOverride   GParamSpecOverride;
+typedef struct _GParamSpecGType      GParamSpecGType;
+
+/**
+ * GParamSpecChar:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for character properties.
+ */
+struct _GParamSpecChar
+{
+  GParamSpec    parent_instance;
+  
+  gint8         minimum;
+  gint8         maximum;
+  gint8         default_value;
+};
+/**
+ * GParamSpecUChar:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for unsigned character properties.
+ */
+struct _GParamSpecUChar
+{
+  GParamSpec    parent_instance;
+  
+  guint8        minimum;
+  guint8        maximum;
+  guint8        default_value;
+};
+/**
+ * GParamSpecBoolean:
+ * @parent_instance: private #GParamSpec portion
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for boolean properties.
+ */
+struct _GParamSpecBoolean
+{
+  GParamSpec    parent_instance;
+  
+  gboolean      default_value;
+};
+/**
+ * GParamSpecInt:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for integer properties.
+ */
+struct _GParamSpecInt
+{
+  GParamSpec    parent_instance;
+  
+  gint          minimum;
+  gint          maximum;
+  gint          default_value;
+};
+/**
+ * GParamSpecUInt:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for unsigned integer properties.
+ */
+struct _GParamSpecUInt
+{
+  GParamSpec    parent_instance;
+  
+  guint         minimum;
+  guint         maximum;
+  guint         default_value;
+};
+/**
+ * GParamSpecLong:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for long integer properties.
+ */
+struct _GParamSpecLong
+{
+  GParamSpec    parent_instance;
+  
+  glong         minimum;
+  glong         maximum;
+  glong         default_value;
+};
+/**
+ * GParamSpecULong:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for unsigned long integer properties.
+ */
+struct _GParamSpecULong
+{
+  GParamSpec    parent_instance;
+  
+  gulong        minimum;
+  gulong        maximum;
+  gulong        default_value;
+};
+/**
+ * GParamSpecInt64:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for 64bit integer properties.
+ */
+struct _GParamSpecInt64
+{
+  GParamSpec    parent_instance;
+  
+  gint64        minimum;
+  gint64        maximum;
+  gint64        default_value;
+};
+/**
+ * GParamSpecUInt64:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for unsigned 64bit integer properties.
+ */
+struct _GParamSpecUInt64
+{
+  GParamSpec    parent_instance;
+  
+  guint64       minimum;
+  guint64       maximum;
+  guint64       default_value;
+};
+/**
+ * GParamSpecUnichar:
+ * @parent_instance: private #GParamSpec portion
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for unichar (unsigned integer) properties.
+ */
+struct _GParamSpecUnichar
+{
+  GParamSpec    parent_instance;
+  
+  gunichar      default_value;
+};
+/**
+ * GParamSpecEnum:
+ * @parent_instance: private #GParamSpec portion
+ * @enum_class: the #GEnumClass for the enum
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for enum 
+ * properties.
+ */
+struct _GParamSpecEnum
+{
+  GParamSpec    parent_instance;
+  
+  GEnumClass   *enum_class;
+  gint          default_value;
+};
+/**
+ * GParamSpecFlags:
+ * @parent_instance: private #GParamSpec portion
+ * @flags_class: the #GFlagsClass for the flags
+ * @default_value: default value for the property specified
+ * 
+ * A #GParamSpec derived structure that contains the meta data for flags
+ * properties.
+ */
+struct _GParamSpecFlags
+{
+  GParamSpec    parent_instance;
+  
+  GFlagsClass  *flags_class;
+  guint         default_value;
+};
+/**
+ * GParamSpecFloat:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @epsilon: values closer than @epsilon will be considered identical
+ *  by g_param_values_cmp(); the default value is 1e-30.
+ * 
+ * A #GParamSpec derived structure that contains the meta data for float properties.
+ */
+struct _GParamSpecFloat
+{
+  GParamSpec    parent_instance;
+  
+  gfloat        minimum;
+  gfloat        maximum;
+  gfloat        default_value;
+  gfloat        epsilon;
+};
+/**
+ * GParamSpecDouble:
+ * @parent_instance: private #GParamSpec portion
+ * @minimum: minimum value for the property specified
+ * @maximum: maximum value for the property specified
+ * @default_value: default value for the property specified
+ * @epsilon: values closer than @epsilon will be considered identical
+ *  by g_param_values_cmp(); the default value is 1e-90.
+ * 
+ * A #GParamSpec derived structure that contains the meta data for double properties.
+ */
+struct _GParamSpecDouble
+{
+  GParamSpec    parent_instance;
+  
+  gdouble       minimum;
+  gdouble       maximum;
+  gdouble       default_value;
+  gdouble       epsilon;
+};
+/**
+ * GParamSpecString:
+ * @parent_instance: private #GParamSpec portion
+ * @default_value: default value for the property specified
+ * @cset_first: a string containing the allowed values for the first byte
+ * @cset_nth: a string containing the allowed values for the subsequent bytes
+ * @substitutor: the replacement byte for bytes which don't match @cset_first or @cset_nth.
+ * @null_fold_if_empty: replace empty string by %NULL
+ * @ensure_non_null: replace %NULL strings by an empty string
+ * 
+ * A #GParamSpec derived structure that contains the meta data for string
+ * properties.
+ */
+struct _GParamSpecString
+{
+  GParamSpec    parent_instance;
+  
+  gchar        *default_value;
+  gchar        *cset_first;
+  gchar        *cset_nth;
+  gchar         substitutor;
+  guint         null_fold_if_empty : 1;
+  guint         ensure_non_null : 1;
+};
+/**
+ * GParamSpecParam:
+ * @parent_instance: private #GParamSpec portion
+ * 
+ * A #GParamSpec derived structure that contains the meta data for %G_TYPE_PARAM
+ * properties.
+ */
+struct _GParamSpecParam
+{
+  GParamSpec    parent_instance;
+};
+/**
+ * GParamSpecBoxed:
+ * @parent_instance: private #GParamSpec portion
+ * 
+ * A #GParamSpec derived structure that contains the meta data for boxed properties.
+ */
+struct _GParamSpecBoxed
+{
+  GParamSpec    parent_instance;
+};
+/**
+ * GParamSpecPointer:
+ * @parent_instance: private #GParamSpec portion
+ * 
+ * A #GParamSpec derived structure that contains the meta data for pointer properties.
+ */
+struct _GParamSpecPointer
+{
+  GParamSpec    parent_instance;
+};
+/**
+ * GParamSpecValueArray:
+ * @parent_instance: private #GParamSpec portion
+ * @element_spec: a #GParamSpec describing the elements contained in arrays of this property, may be %NULL
+ * @fixed_n_elements: if greater than 0, arrays of this property will always have this many elements
+ * 
+ * A #GParamSpec derived structure that contains the meta data for #GValueArray properties.
+ */
+struct _GParamSpecValueArray
+{
+  GParamSpec    parent_instance;
+  GParamSpec   *element_spec;
+  guint		fixed_n_elements;
+};
+/**
+ * GParamSpecObject:
+ * @parent_instance: private #GParamSpec portion
+ * 
+ * A #GParamSpec derived structure that contains the meta data for object properties.
+ */
+struct _GParamSpecObject
+{
+  GParamSpec    parent_instance;
+};
+/**
+ * GParamSpecOverride:
+ * 
+ * This is a type of #GParamSpec type that simply redirects operations to
+ * another paramspec.  All operations other than getting or
+ * setting the value are redirected, including accessing the nick and
+ * blurb, validating a value, and so forth. See
+ * g_param_spec_get_redirect_target() for retrieving the overidden
+ * property. #GParamSpecOverride is used in implementing
+ * g_object_class_override_property(), and will not be directly useful
+ * unless you are implementing a new base type similar to GObject.
+ * 
+ * Since: 2.4
+ */
+struct _GParamSpecOverride
+{
+  /*< private >*/
+  GParamSpec    parent_instance;
+  GParamSpec   *overridden;
+};
+/**
+ * GParamSpecGType:
+ * @parent_instance: private #GParamSpec portion
+ * @is_a_type: a #GType whose subtypes can occur as values
+ * 
+ * A #GParamSpec derived structure that contains the meta data for #GType properties.
+ * 
+ * Since: 2.10
+ */
+struct _GParamSpecGType
+{
+  GParamSpec    parent_instance;
+  GType         is_a_type;
+};
+
+/* --- GParamSpec prototypes --- */
+GParamSpec*	g_param_spec_char	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gint8		  minimum,
+					  gint8		  maximum,
+					  gint8		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_uchar	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  guint8	  minimum,
+					  guint8	  maximum,
+					  guint8	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_boolean	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gboolean	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_int	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gint		  minimum,
+					  gint		  maximum,
+					  gint		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_uint	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  guint		  minimum,
+					  guint		  maximum,
+					  guint		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_long	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  glong		  minimum,
+					  glong		  maximum,
+					  glong		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_ulong	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gulong	  minimum,
+					  gulong	  maximum,
+					  gulong	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_int64	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gint64       	  minimum,
+					  gint64       	  maximum,
+					  gint64       	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_uint64	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  guint64	  minimum,
+					  guint64	  maximum,
+					  guint64	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_unichar      (const gchar    *name,
+				          const gchar    *nick,
+				          const gchar    *blurb,
+				          gunichar	  default_value,
+				          GParamFlags     flags);
+GParamSpec*	g_param_spec_enum	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GType		  enum_type,
+					  gint		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_flags	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GType		  flags_type,
+					  guint		  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_float	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gfloat	  minimum,
+					  gfloat	  maximum,
+					  gfloat	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_double	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  gdouble	  minimum,
+					  gdouble	  maximum,
+					  gdouble	  default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_string	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  const gchar	 *default_value,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_param	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GType		  param_type,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_boxed	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GType		  boxed_type,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_pointer	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_value_array (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GParamSpec	 *element_spec,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_object	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GType		  object_type,
+					  GParamFlags	  flags);
+GParamSpec*	g_param_spec_override    (const gchar    *name,
+					  GParamSpec     *overridden);
+GParamSpec*	g_param_spec_gtype	 (const gchar	 *name,
+					  const gchar	 *nick,
+					  const gchar	 *blurb,
+					  GType           is_a_type,
+					  GParamFlags	  flags);
+
+/* --- internal --- */
+/* We prefix variable declarations so they can
+ * properly get exported in windows dlls.
+ */
+#ifndef GOBJECT_VAR
+#  ifdef G_PLATFORM_WIN32
+#    ifdef GOBJECT_STATIC_COMPILATION
+#      define GOBJECT_VAR extern
+#    else /* !GOBJECT_STATIC_COMPILATION */
+#      ifdef GOBJECT_COMPILATION
+#        ifdef DLL_EXPORT
+#          define GOBJECT_VAR __declspec(dllexport)
+#        else /* !DLL_EXPORT */
+#          define GOBJECT_VAR extern
+#        endif /* !DLL_EXPORT */
+#      else /* !GOBJECT_COMPILATION */
+#        define GOBJECT_VAR extern __declspec(dllimport)
+#      endif /* !GOBJECT_COMPILATION */
+#    endif /* !GOBJECT_STATIC_COMPILATION */
+#  else /* !G_PLATFORM_WIN32 */
+#    define GOBJECT_VAR extern
+#  endif /* !G_PLATFORM_WIN32 */
+#endif /* GOBJECT_VAR */
+
+GOBJECT_VAR GType *g_param_spec_types;
+
+G_END_DECLS
+
+#endif /* __G_PARAMSPECS_H__ */
diff --git a/gobject/gsignal.c b/gobject/gsignal.c
new file mode 100644
index 0000000..d69b880
--- /dev/null
+++ b/gobject/gsignal.c
@@ -0,0 +1,3439 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * this code is based on the original GtkSignal implementation
+ * for the Gtk+ library by Peter Mattis <petm@xcf.berkeley.edu>
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <signal.h>
+
+#include "gsignal.h"
+#include "gbsearcharray.h"
+#include "gvaluecollector.h"
+#include "gvaluetypes.h"
+#include "gboxed.h"
+#include "gobject.h"
+#include "genums.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:signals
+ * @short_description: A means for customization of object behaviour
+ *     and a general purpose notification mechanism
+ * @title: Signals
+ *
+ * The basic concept of the signal system is that of the
+ * <emphasis>emission</emphasis> of a signal. Signals are introduced
+ * per-type and are identified through strings.  Signals introduced
+ * for a parent type are available in derived types as well, so
+ * basically they are a per-type facility that is inherited.  A signal
+ * emission mainly involves invocation of a certain set of callbacks
+ * in precisely defined manner. There are two main categories of such
+ * callbacks, per-object 
+ * <footnote><para>Although signals can deal with any kind of instantiatable 
+ * type, i'm referring to those types as "object types" in the following, 
+ * simply because that is the context most users will encounter signals in.
+ * </para></footnote>
+ * ones and user provided ones.
+ * The per-object callbacks are most often referred to as "object method
+ * handler" or "default (signal) handler", while user provided callbacks are
+ * usually just called "signal handler".
+ * The object method handler is provided at signal creation time (this most
+ * frequently happens at the end of an object class' creation), while user
+ * provided handlers are frequently connected and disconnected to/from a certain
+ * signal on certain object instances.
+ *
+ * A signal emission consists of five stages, unless prematurely stopped:
+ * <variablelist>
+ * <varlistentry><term></term><listitem><para>
+ * 	1 - Invocation of the object method handler for %G_SIGNAL_RUN_FIRST signals
+ * </para></listitem></varlistentry>
+ * <varlistentry><term></term><listitem><para>
+ * 	2 - Invocation of normal user-provided signal handlers (<emphasis>after</emphasis> flag %FALSE)
+ * </para></listitem></varlistentry>
+ * <varlistentry><term></term><listitem><para>
+ * 	3 - Invocation of the object method handler for %G_SIGNAL_RUN_LAST signals
+ * </para></listitem></varlistentry>
+ * <varlistentry><term></term><listitem><para>
+ * 	4 - Invocation of user provided signal handlers, connected with an <emphasis>after</emphasis> flag of %TRUE
+ * </para></listitem></varlistentry>
+ * <varlistentry><term></term><listitem><para>
+ * 	5 - Invocation of the object method handler for %G_SIGNAL_RUN_CLEANUP signals
+ * </para></listitem></varlistentry>
+ * </variablelist>
+ * The user-provided signal handlers are called in the order they were
+ * connected in.
+ * All handlers may prematurely stop a signal emission, and any number of
+ * handlers may be connected, disconnected, blocked or unblocked during
+ * a signal emission.
+ * There are certain criteria for skipping user handlers in stages 2 and 4
+ * of a signal emission.
+ * First, user handlers may be <emphasis>blocked</emphasis>, blocked handlers are omitted
+ * during callback invocation, to return from the "blocked" state, a
+ * handler has to get unblocked exactly the same amount of times
+ * it has been blocked before.
+ * Second, upon emission of a %G_SIGNAL_DETAILED signal, an additional
+ * "detail" argument passed in to g_signal_emit() has to match the detail
+ * argument of the signal handler currently subject to invocation.
+ * Specification of no detail argument for signal handlers (omission of the
+ * detail part of the signal specification upon connection) serves as a
+ * wildcard and matches any detail argument passed in to emission.
+ */
+
+
+#define REPORT_BUG      "please report occurrence circumstances to gtk-devel-list@gnome.org"
+#ifdef	G_ENABLE_DEBUG
+#define IF_DEBUG(debug_type, cond)	if ((_g_type_debug_flags & G_TYPE_DEBUG_ ## debug_type) || cond)
+static volatile gpointer g_trace_instance_signals = NULL;
+static volatile gpointer g_trap_instance_signals = NULL;
+#endif	/* G_ENABLE_DEBUG */
+
+
+/* --- typedefs --- */
+typedef struct _SignalNode   SignalNode;
+typedef struct _SignalKey    SignalKey;
+typedef struct _Emission     Emission;
+typedef struct _Handler      Handler;
+typedef struct _HandlerList  HandlerList;
+typedef struct _HandlerMatch HandlerMatch;
+typedef enum
+{
+  EMISSION_STOP,
+  EMISSION_RUN,
+  EMISSION_HOOK,
+  EMISSION_RESTART
+} EmissionState;
+
+
+/* --- prototypes --- */
+static inline guint		signal_id_lookup	(GQuark		  quark,
+							 GType		  itype);
+static	      void		signal_destroy_R	(SignalNode	 *signal_node);
+static inline HandlerList*	handler_list_ensure	(guint		  signal_id,
+							 gpointer	  instance);
+static inline HandlerList*	handler_list_lookup	(guint		  signal_id,
+							 gpointer	  instance);
+static inline Handler*		handler_new		(gboolean	  after);
+static	      void		handler_insert		(guint		  signal_id,
+							 gpointer	  instance,
+							 Handler	 *handler);
+static	      Handler*		handler_lookup		(gpointer	  instance,
+							 gulong		  handler_id,
+							 guint		 *signal_id_p);
+static inline HandlerMatch*	handler_match_prepend	(HandlerMatch	 *list,
+							 Handler	 *handler,
+							 guint		  signal_id);
+static inline HandlerMatch*	handler_match_free1_R	(HandlerMatch	 *node,
+							 gpointer	  instance);
+static	      HandlerMatch*	handlers_find		(gpointer	  instance,
+							 GSignalMatchType mask,
+							 guint		  signal_id,
+							 GQuark		  detail,
+							 GClosure	 *closure,
+							 gpointer	  func,
+							 gpointer	  data,
+							 gboolean	  one_and_only);
+static inline void		handler_ref		(Handler	 *handler);
+static inline void		handler_unref_R		(guint		  signal_id,
+							 gpointer	  instance,
+							 Handler	 *handler);
+static gint			handler_lists_cmp	(gconstpointer	  node1,
+							 gconstpointer	  node2);
+static inline void		emission_push		(Emission	**emission_list_p,
+							 Emission	 *emission);
+static inline void		emission_pop		(Emission	**emission_list_p,
+							 Emission	 *emission);
+static inline Emission*		emission_find		(Emission	 *emission_list,
+							 guint		  signal_id,
+							 GQuark		  detail,
+							 gpointer	  instance);
+static gint			class_closures_cmp	(gconstpointer	  node1,
+							 gconstpointer	  node2);
+static gint			signal_key_cmp		(gconstpointer	  node1,
+							 gconstpointer	  node2);
+static	      gboolean		signal_emit_unlocked_R	(SignalNode	 *node,
+							 GQuark		  detail,
+							 gpointer	  instance,
+							 GValue		 *return_value,
+							 const GValue	 *instance_and_params);
+static const gchar *            type_debug_name         (GType            type);
+
+
+/* --- structures --- */
+typedef struct
+{
+  GSignalAccumulator func;
+  gpointer           data;
+} SignalAccumulator;
+typedef struct
+{
+  GHook hook;
+  GQuark detail;
+} SignalHook;
+#define	SIGNAL_HOOK(hook)	((SignalHook*) (hook))
+
+struct _SignalNode
+{
+  /* permanent portion */
+  guint              signal_id;
+  GType              itype;
+  const gchar       *name;
+  guint              destroyed : 1;
+  
+  /* reinitializable portion */
+  guint		     test_class_offset : 12;
+  guint              flags : 8;
+  guint              n_params : 8;
+  GType		    *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
+  GType		     return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
+  GBSearchArray     *class_closure_bsa;
+  SignalAccumulator *accumulator;
+  GSignalCMarshaller c_marshaller;
+  GHookList         *emission_hooks;
+};
+#define	MAX_TEST_CLASS_OFFSET	(4096)	/* 2^12, 12 bits for test_class_offset */
+#define	TEST_CLASS_MAGIC	(1)	/* indicates NULL class closure, candidate for NOP optimization */
+
+struct _SignalKey
+{
+  GType  itype;
+  GQuark quark;
+  guint  signal_id;
+};
+
+struct _Emission
+{
+  Emission             *next;
+  gpointer              instance;
+  GSignalInvocationHint ihint;
+  EmissionState         state;
+  GType			chain_type;
+};
+
+struct _HandlerList
+{
+  guint    signal_id;
+  Handler *handlers;
+  Handler *tail_before;  /* normal signal handlers are appended here  */
+  Handler *tail_after;   /* CONNECT_AFTER handlers are appended here  */
+};
+
+struct _Handler
+{
+  gulong        sequential_number;
+  Handler      *next;
+  Handler      *prev;
+  GQuark	detail;
+  guint         ref_count;
+  guint         block_count : 16;
+#define HANDLER_MAX_BLOCK_COUNT (1 << 16)
+  guint         after : 1;
+  GClosure     *closure;
+};
+struct _HandlerMatch
+{
+  Handler      *handler;
+  HandlerMatch *next;
+  guint         signal_id;
+};
+
+typedef struct
+{
+  GType     instance_type; /* 0 for default closure */
+  GClosure *closure;
+} ClassClosure;
+
+
+/* --- variables --- */
+static GBSearchArray *g_signal_key_bsa = NULL;
+static const GBSearchConfig g_signal_key_bconfig = {
+  sizeof (SignalKey),
+  signal_key_cmp,
+  G_BSEARCH_ARRAY_ALIGN_POWER2,
+};
+static GBSearchConfig g_signal_hlbsa_bconfig = {
+  sizeof (HandlerList),
+  handler_lists_cmp,
+  0,
+};
+static GBSearchConfig g_class_closure_bconfig = {
+  sizeof (ClassClosure),
+  class_closures_cmp,
+  0,
+};
+static GHashTable    *g_handler_list_bsa_ht = NULL;
+static Emission      *g_recursive_emissions = NULL;
+static Emission      *g_restart_emissions = NULL;
+static gulong         g_handler_sequential_number = 1;
+G_LOCK_DEFINE_STATIC (g_signal_mutex);
+#define	SIGNAL_LOCK()		G_LOCK (g_signal_mutex)
+#define	SIGNAL_UNLOCK()		G_UNLOCK (g_signal_mutex)
+
+
+/* --- signal nodes --- */
+static guint          g_n_signal_nodes = 0;
+static SignalNode   **g_signal_nodes = NULL;
+
+static inline SignalNode*
+LOOKUP_SIGNAL_NODE (register guint signal_id)
+{
+  if (signal_id < g_n_signal_nodes)
+    return g_signal_nodes[signal_id];
+  else
+    return NULL;
+}
+
+
+/* --- functions --- */
+static inline guint
+signal_id_lookup (GQuark quark,
+		  GType  itype)
+{
+  GType *ifaces, type = itype;
+  SignalKey key;
+  guint n_ifaces;
+
+  key.quark = quark;
+
+  /* try looking up signals for this type and its ancestors */
+  do
+    {
+      SignalKey *signal_key;
+      
+      key.itype = type;
+      signal_key = g_bsearch_array_lookup (g_signal_key_bsa, &g_signal_key_bconfig, &key);
+      
+      if (signal_key)
+	return signal_key->signal_id;
+      
+      type = g_type_parent (type);
+    }
+  while (type);
+
+  /* no luck, try interfaces it exports */
+  ifaces = g_type_interfaces (itype, &n_ifaces);
+  while (n_ifaces--)
+    {
+      SignalKey *signal_key;
+
+      key.itype = ifaces[n_ifaces];
+      signal_key = g_bsearch_array_lookup (g_signal_key_bsa, &g_signal_key_bconfig, &key);
+
+      if (signal_key)
+	{
+	  g_free (ifaces);
+	  return signal_key->signal_id;
+	}
+    }
+  g_free (ifaces);
+  
+  return 0;
+}
+
+static gint
+class_closures_cmp (gconstpointer node1,
+		    gconstpointer node2)
+{
+  const ClassClosure *c1 = node1, *c2 = node2;
+  
+  return G_BSEARCH_ARRAY_CMP (c1->instance_type, c2->instance_type);
+}
+
+static gint
+handler_lists_cmp (gconstpointer node1,
+                   gconstpointer node2)
+{
+  const HandlerList *hlist1 = node1, *hlist2 = node2;
+  
+  return G_BSEARCH_ARRAY_CMP (hlist1->signal_id, hlist2->signal_id);
+}
+
+static inline HandlerList*
+handler_list_ensure (guint    signal_id,
+		     gpointer instance)
+{
+  GBSearchArray *hlbsa = g_hash_table_lookup (g_handler_list_bsa_ht, instance);
+  HandlerList key;
+  
+  key.signal_id = signal_id;
+  key.handlers    = NULL;
+  key.tail_before = NULL;
+  key.tail_after  = NULL;
+  if (!hlbsa)
+    {
+      hlbsa = g_bsearch_array_create (&g_signal_hlbsa_bconfig);
+      hlbsa = g_bsearch_array_insert (hlbsa, &g_signal_hlbsa_bconfig, &key);
+      g_hash_table_insert (g_handler_list_bsa_ht, instance, hlbsa);
+    }
+  else
+    {
+      GBSearchArray *o = hlbsa;
+
+      hlbsa = g_bsearch_array_insert (o, &g_signal_hlbsa_bconfig, &key);
+      if (hlbsa != o)
+	g_hash_table_insert (g_handler_list_bsa_ht, instance, hlbsa);
+    }
+  return g_bsearch_array_lookup (hlbsa, &g_signal_hlbsa_bconfig, &key);
+}
+
+static inline HandlerList*
+handler_list_lookup (guint    signal_id,
+		     gpointer instance)
+{
+  GBSearchArray *hlbsa = g_hash_table_lookup (g_handler_list_bsa_ht, instance);
+  HandlerList key;
+  
+  key.signal_id = signal_id;
+  
+  return hlbsa ? g_bsearch_array_lookup (hlbsa, &g_signal_hlbsa_bconfig, &key) : NULL;
+}
+
+static Handler*
+handler_lookup (gpointer instance,
+		gulong   handler_id,
+		guint   *signal_id_p)
+{
+  GBSearchArray *hlbsa = g_hash_table_lookup (g_handler_list_bsa_ht, instance);
+  
+  if (hlbsa)
+    {
+      guint i;
+      
+      for (i = 0; i < hlbsa->n_nodes; i++)
+        {
+          HandlerList *hlist = g_bsearch_array_get_nth (hlbsa, &g_signal_hlbsa_bconfig, i);
+          Handler *handler;
+          
+          for (handler = hlist->handlers; handler; handler = handler->next)
+            if (handler->sequential_number == handler_id)
+              {
+                if (signal_id_p)
+                  *signal_id_p = hlist->signal_id;
+		
+                return handler;
+              }
+        }
+    }
+  
+  return NULL;
+}
+
+static inline HandlerMatch*
+handler_match_prepend (HandlerMatch *list,
+		       Handler      *handler,
+		       guint	     signal_id)
+{
+  HandlerMatch *node;
+  
+  node = g_slice_new (HandlerMatch);
+  node->handler = handler;
+  node->next = list;
+  node->signal_id = signal_id;
+  handler_ref (handler);
+  
+  return node;
+}
+static inline HandlerMatch*
+handler_match_free1_R (HandlerMatch *node,
+		       gpointer      instance)
+{
+  HandlerMatch *next = node->next;
+  
+  handler_unref_R (node->signal_id, instance, node->handler);
+  g_slice_free (HandlerMatch, node);
+  
+  return next;
+}
+
+static HandlerMatch*
+handlers_find (gpointer         instance,
+	       GSignalMatchType mask,
+	       guint            signal_id,
+	       GQuark           detail,
+	       GClosure        *closure,
+	       gpointer         func,
+	       gpointer         data,
+	       gboolean         one_and_only)
+{
+  HandlerMatch *mlist = NULL;
+  
+  if (mask & G_SIGNAL_MATCH_ID)
+    {
+      HandlerList *hlist = handler_list_lookup (signal_id, instance);
+      Handler *handler;
+      SignalNode *node = NULL;
+      
+      if (mask & G_SIGNAL_MATCH_FUNC)
+	{
+	  node = LOOKUP_SIGNAL_NODE (signal_id);
+	  if (!node || !node->c_marshaller)
+	    return NULL;
+	}
+      
+      mask = ~mask;
+      for (handler = hlist ? hlist->handlers : NULL; handler; handler = handler->next)
+        if (handler->sequential_number &&
+	    ((mask & G_SIGNAL_MATCH_DETAIL) || handler->detail == detail) &&
+	    ((mask & G_SIGNAL_MATCH_CLOSURE) || handler->closure == closure) &&
+            ((mask & G_SIGNAL_MATCH_DATA) || handler->closure->data == data) &&
+	    ((mask & G_SIGNAL_MATCH_UNBLOCKED) || handler->block_count == 0) &&
+	    ((mask & G_SIGNAL_MATCH_FUNC) || (handler->closure->marshal == node->c_marshaller &&
+					      handler->closure->meta_marshal == 0 &&
+					      ((GCClosure*) handler->closure)->callback == func)))
+	  {
+	    mlist = handler_match_prepend (mlist, handler, signal_id);
+	    if (one_and_only)
+	      return mlist;
+	  }
+    }
+  else
+    {
+      GBSearchArray *hlbsa = g_hash_table_lookup (g_handler_list_bsa_ht, instance);
+      
+      mask = ~mask;
+      if (hlbsa)
+        {
+          guint i;
+          
+          for (i = 0; i < hlbsa->n_nodes; i++)
+            {
+              HandlerList *hlist = g_bsearch_array_get_nth (hlbsa, &g_signal_hlbsa_bconfig, i);
+	      SignalNode *node = NULL;
+              Handler *handler;
+              
+	      if (!(mask & G_SIGNAL_MATCH_FUNC))
+		{
+		  node = LOOKUP_SIGNAL_NODE (hlist->signal_id);
+		  if (!node->c_marshaller)
+		    continue;
+		}
+	      
+              for (handler = hlist->handlers; handler; handler = handler->next)
+		if (handler->sequential_number &&
+		    ((mask & G_SIGNAL_MATCH_DETAIL) || handler->detail == detail) &&
+                    ((mask & G_SIGNAL_MATCH_CLOSURE) || handler->closure == closure) &&
+                    ((mask & G_SIGNAL_MATCH_DATA) || handler->closure->data == data) &&
+		    ((mask & G_SIGNAL_MATCH_UNBLOCKED) || handler->block_count == 0) &&
+		    ((mask & G_SIGNAL_MATCH_FUNC) || (handler->closure->marshal == node->c_marshaller &&
+						      handler->closure->meta_marshal == 0 &&
+						      ((GCClosure*) handler->closure)->callback == func)))
+		  {
+		    mlist = handler_match_prepend (mlist, handler, hlist->signal_id);
+		    if (one_and_only)
+		      return mlist;
+		  }
+            }
+        }
+    }
+  
+  return mlist;
+}
+
+static inline Handler*
+handler_new (gboolean after)
+{
+  Handler *handler = g_slice_new (Handler);
+#ifndef G_DISABLE_CHECKS
+  if (g_handler_sequential_number < 1)
+    g_error (G_STRLOC ": handler id overflow, %s", REPORT_BUG);
+#endif
+  
+  handler->sequential_number = g_handler_sequential_number++;
+  handler->prev = NULL;
+  handler->next = NULL;
+  handler->detail = 0;
+  handler->ref_count = 1;
+  handler->block_count = 0;
+  handler->after = after != FALSE;
+  handler->closure = NULL;
+  
+  return handler;
+}
+
+static inline void
+handler_ref (Handler *handler)
+{
+  g_return_if_fail (handler->ref_count > 0);
+  
+  g_atomic_int_inc ((int *)&handler->ref_count);
+}
+
+static inline void
+handler_unref_R (guint    signal_id,
+		 gpointer instance,
+		 Handler *handler)
+{
+  gboolean is_zero;
+
+  g_return_if_fail (handler->ref_count > 0);
+  
+  is_zero = g_atomic_int_dec_and_test ((int *)&handler->ref_count);
+
+  if (G_UNLIKELY (is_zero))
+    {
+      HandlerList *hlist = NULL;
+
+      if (handler->next)
+        handler->next->prev = handler->prev;
+      if (handler->prev)    /* watch out for g_signal_handlers_destroy()! */
+        handler->prev->next = handler->next;
+      else
+        {
+          hlist = handler_list_lookup (signal_id, instance);
+          hlist->handlers = handler->next;
+        }
+
+      if (instance)
+        {
+          /*  check if we are removing the handler pointed to by tail_before  */
+          if (!handler->after && (!handler->next || handler->next->after))
+            {
+              if (!hlist)
+                hlist = handler_list_lookup (signal_id, instance);
+              if (hlist)
+                {
+                  g_assert (hlist->tail_before == handler); /* paranoid */
+                  hlist->tail_before = handler->prev;
+                }
+            }
+
+          /*  check if we are removing the handler pointed to by tail_after  */
+          if (!handler->next)
+            {
+              if (!hlist)
+                hlist = handler_list_lookup (signal_id, instance);
+              if (hlist)
+                {
+                  g_assert (hlist->tail_after == handler); /* paranoid */
+                  hlist->tail_after = handler->prev;
+                }
+            }
+        }
+
+      SIGNAL_UNLOCK ();
+      g_closure_unref (handler->closure);
+      SIGNAL_LOCK ();
+      g_slice_free (Handler, handler);
+    }
+}
+
+static void
+handler_insert (guint    signal_id,
+		gpointer instance,
+		Handler  *handler)
+{
+  HandlerList *hlist;
+  
+  g_assert (handler->prev == NULL && handler->next == NULL); /* paranoid */
+  
+  hlist = handler_list_ensure (signal_id, instance);
+  if (!hlist->handlers)
+    {
+      hlist->handlers = handler;
+      if (!handler->after)
+        hlist->tail_before = handler;
+    }
+  else if (handler->after)
+    {
+      handler->prev = hlist->tail_after;
+      hlist->tail_after->next = handler;
+    }
+  else
+    {
+      if (hlist->tail_before)
+        {
+          handler->next = hlist->tail_before->next;
+          if (handler->next)
+            handler->next->prev = handler;
+          handler->prev = hlist->tail_before;
+          hlist->tail_before->next = handler;
+        }
+      else /* insert !after handler into a list of only after handlers */
+        {
+          handler->next = hlist->handlers;
+          if (handler->next)
+            handler->next->prev = handler;
+          hlist->handlers = handler;
+        }
+      hlist->tail_before = handler;
+    }
+
+  if (!handler->next)
+    hlist->tail_after = handler;
+}
+
+static inline void
+emission_push (Emission **emission_list_p,
+	       Emission  *emission)
+{
+  emission->next = *emission_list_p;
+  *emission_list_p = emission;
+}
+
+static inline void
+emission_pop (Emission **emission_list_p,
+	      Emission  *emission)
+{
+  Emission *node, *last = NULL;
+
+  for (node = *emission_list_p; node; last = node, node = last->next)
+    if (node == emission)
+      {
+	if (last)
+	  last->next = node->next;
+	else
+	  *emission_list_p = node->next;
+	return;
+      }
+  g_assert_not_reached ();
+}
+
+static inline Emission*
+emission_find (Emission *emission_list,
+	       guint     signal_id,
+	       GQuark    detail,
+	       gpointer  instance)
+{
+  Emission *emission;
+  
+  for (emission = emission_list; emission; emission = emission->next)
+    if (emission->instance == instance &&
+	emission->ihint.signal_id == signal_id &&
+	emission->ihint.detail == detail)
+      return emission;
+  return NULL;
+}
+
+static inline Emission*
+emission_find_innermost (gpointer instance)
+{
+  Emission *emission, *s = NULL, *c = NULL;
+  
+  for (emission = g_restart_emissions; emission; emission = emission->next)
+    if (emission->instance == instance)
+      {
+	s = emission;
+	break;
+      }
+  for (emission = g_recursive_emissions; emission; emission = emission->next)
+    if (emission->instance == instance)
+      {
+	c = emission;
+	break;
+      }
+  if (!s)
+    return c;
+  else if (!c)
+    return s;
+  else
+    return G_HAVE_GROWING_STACK ? MAX (c, s) : MIN (c, s);
+}
+
+static gint
+signal_key_cmp (gconstpointer node1,
+                gconstpointer node2)
+{
+  const SignalKey *key1 = node1, *key2 = node2;
+  
+  if (key1->itype == key2->itype)
+    return G_BSEARCH_ARRAY_CMP (key1->quark, key2->quark);
+  else
+    return G_BSEARCH_ARRAY_CMP (key1->itype, key2->itype);
+}
+
+void
+g_signal_init (void)
+{
+  SIGNAL_LOCK ();
+  if (!g_n_signal_nodes)
+    {
+      /* setup handler list binary searchable array hash table (in german, that'd be one word ;) */
+      g_handler_list_bsa_ht = g_hash_table_new (g_direct_hash, NULL);
+      g_signal_key_bsa = g_bsearch_array_create (&g_signal_key_bconfig);
+      
+      /* invalid (0) signal_id */
+      g_n_signal_nodes = 1;
+      g_signal_nodes = g_renew (SignalNode*, g_signal_nodes, g_n_signal_nodes);
+      g_signal_nodes[0] = NULL;
+    }
+  SIGNAL_UNLOCK ();
+}
+
+void
+_g_signals_destroy (GType itype)
+{
+  guint i;
+  
+  SIGNAL_LOCK ();
+  for (i = 1; i < g_n_signal_nodes; i++)
+    {
+      SignalNode *node = g_signal_nodes[i];
+      
+      if (node->itype == itype)
+        {
+          if (node->destroyed)
+            g_warning (G_STRLOC ": signal \"%s\" of type `%s' already destroyed",
+                       node->name,
+                       type_debug_name (node->itype));
+          else
+	    signal_destroy_R (node);
+        }
+    }
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_stop_emission:
+ * @instance: the object whose signal handlers you wish to stop.
+ * @signal_id: the signal identifier, as returned by g_signal_lookup().
+ * @detail: the detail which the signal was emitted with.
+ *
+ * Stops a signal's current emission.
+ *
+ * This will prevent the default method from running, if the signal was
+ * %G_SIGNAL_RUN_LAST and you connected normally (i.e. without the "after"
+ * flag).
+ *
+ * Prints a warning if used on a signal which isn't being emitted.
+ */
+void
+g_signal_stop_emission (gpointer instance,
+                        guint    signal_id,
+			GQuark   detail)
+{
+  SignalNode *node;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (signal_id > 0);
+  
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (node && detail && !(node->flags & G_SIGNAL_DETAILED))
+    {
+      g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
+      SIGNAL_UNLOCK ();
+      return;
+    }
+  if (node && g_type_is_a (G_TYPE_FROM_INSTANCE (instance), node->itype))
+    {
+      Emission *emission_list = node->flags & G_SIGNAL_NO_RECURSE ? g_restart_emissions : g_recursive_emissions;
+      Emission *emission = emission_find (emission_list, signal_id, detail, instance);
+      
+      if (emission)
+        {
+          if (emission->state == EMISSION_HOOK)
+            g_warning (G_STRLOC ": emission of signal \"%s\" for instance `%p' cannot be stopped from emission hook",
+                       node->name, instance);
+          else if (emission->state == EMISSION_RUN)
+            emission->state = EMISSION_STOP;
+        }
+      else
+        g_warning (G_STRLOC ": no emission of signal \"%s\" to stop for instance `%p'",
+                   node->name, instance);
+    }
+  else
+    g_warning ("%s: signal id `%u' is invalid for instance `%p'", G_STRLOC, signal_id, instance);
+  SIGNAL_UNLOCK ();
+}
+
+static void
+signal_finalize_hook (GHookList *hook_list,
+		      GHook     *hook)
+{
+  GDestroyNotify destroy = hook->destroy;
+
+  if (destroy)
+    {
+      hook->destroy = NULL;
+      SIGNAL_UNLOCK ();
+      destroy (hook->data);
+      SIGNAL_LOCK ();
+    }
+}
+
+/**
+ * g_signal_add_emission_hook:
+ * @signal_id: the signal identifier, as returned by g_signal_lookup().
+ * @detail: the detail on which to call the hook.
+ * @hook_func: a #GSignalEmissionHook function.
+ * @hook_data: user data for @hook_func.
+ * @data_destroy: a #GDestroyNotify for @hook_data.
+ *
+ * Adds an emission hook for a signal, which will get called for any emission
+ * of that signal, independent of the instance. This is possible only
+ * for signals which don't have #G_SIGNAL_NO_HOOKS flag set.
+ *
+ * Returns: the hook id, for later use with g_signal_remove_emission_hook().
+ */
+gulong
+g_signal_add_emission_hook (guint               signal_id,
+			    GQuark              detail,
+			    GSignalEmissionHook hook_func,
+			    gpointer            hook_data,
+			    GDestroyNotify      data_destroy)
+{
+  static gulong seq_hook_id = 1;
+  SignalNode *node;
+  GHook *hook;
+  SignalHook *signal_hook;
+
+  g_return_val_if_fail (signal_id > 0, 0);
+  g_return_val_if_fail (hook_func != NULL, 0);
+
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (!node || node->destroyed)
+    {
+      g_warning ("%s: invalid signal id `%u'", G_STRLOC, signal_id);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  if (node->flags & G_SIGNAL_NO_HOOKS) 
+    {
+      g_warning ("%s: signal id `%u' does not support emission hooks (G_SIGNAL_NO_HOOKS flag set)", G_STRLOC, signal_id);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  if (detail && !(node->flags & G_SIGNAL_DETAILED))
+    {
+      g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  if (!node->emission_hooks)
+    {
+      node->emission_hooks = g_new (GHookList, 1);
+      g_hook_list_init (node->emission_hooks, sizeof (SignalHook));
+      node->emission_hooks->finalize_hook = signal_finalize_hook;
+    }
+  hook = g_hook_alloc (node->emission_hooks);
+  hook->data = hook_data;
+  hook->func = (gpointer) hook_func;
+  hook->destroy = data_destroy;
+  signal_hook = SIGNAL_HOOK (hook);
+  signal_hook->detail = detail;
+  node->emission_hooks->seq_id = seq_hook_id;
+  g_hook_append (node->emission_hooks, hook);
+  seq_hook_id = node->emission_hooks->seq_id;
+  SIGNAL_UNLOCK ();
+
+  return hook->hook_id;
+}
+
+/**
+ * g_signal_remove_emission_hook:
+ * @signal_id: the id of the signal
+ * @hook_id: the id of the emission hook, as returned by
+ *  g_signal_add_emission_hook()
+ *
+ * Deletes an emission hook.
+ */
+void
+g_signal_remove_emission_hook (guint  signal_id,
+			       gulong hook_id)
+{
+  SignalNode *node;
+
+  g_return_if_fail (signal_id > 0);
+  g_return_if_fail (hook_id > 0);
+
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (!node || node->destroyed)
+    g_warning ("%s: invalid signal id `%u'", G_STRLOC, signal_id);
+  else if (!node->emission_hooks || !g_hook_destroy (node->emission_hooks, hook_id))
+    g_warning ("%s: signal \"%s\" had no hook (%lu) to remove", G_STRLOC, node->name, hook_id);
+  SIGNAL_UNLOCK ();
+}
+
+static inline guint
+signal_parse_name (const gchar *name,
+		   GType        itype,
+		   GQuark      *detail_p,
+		   gboolean     force_quark)
+{
+  const gchar *colon = strchr (name, ':');
+  guint signal_id;
+  
+  if (!colon)
+    {
+      signal_id = signal_id_lookup (g_quark_try_string (name), itype);
+      if (signal_id && detail_p)
+	*detail_p = 0;
+    }
+  else if (colon[1] == ':')
+    {
+      gchar buffer[32];
+      guint l = colon - name;
+      
+      if (l < 32)
+	{
+	  memcpy (buffer, name, l);
+	  buffer[l] = 0;
+	  signal_id = signal_id_lookup (g_quark_try_string (buffer), itype);
+	}
+      else
+	{
+	  gchar *signal = g_new (gchar, l + 1);
+	  
+	  memcpy (signal, name, l);
+	  signal[l] = 0;
+	  signal_id = signal_id_lookup (g_quark_try_string (signal), itype);
+	  g_free (signal);
+	}
+      
+      if (signal_id && detail_p)
+	*detail_p = colon[2] ? (force_quark ? g_quark_from_string : g_quark_try_string) (colon + 2) : 0;
+    }
+  else
+    signal_id = 0;
+  return signal_id;
+}
+
+/**
+ * g_signal_parse_name:
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @itype: The interface/instance type that introduced "signal-name".
+ * @signal_id_p: Location to store the signal id.
+ * @detail_p: Location to store the detail quark.
+ * @force_detail_quark: %TRUE forces creation of a #GQuark for the detail.
+ *
+ * Internal function to parse a signal name into its @signal_id
+ * and @detail quark.
+ *
+ * Returns: Whether the signal name could successfully be parsed and @signal_id_p and @detail_p contain valid return values.
+ */
+gboolean
+g_signal_parse_name (const gchar *detailed_signal,
+		     GType        itype,
+		     guint       *signal_id_p,
+		     GQuark      *detail_p,
+		     gboolean	  force_detail_quark)
+{
+  SignalNode *node;
+  GQuark detail = 0;
+  guint signal_id;
+  
+  g_return_val_if_fail (detailed_signal != NULL, FALSE);
+  g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), FALSE);
+  
+  SIGNAL_LOCK ();
+  signal_id = signal_parse_name (detailed_signal, itype, &detail, force_detail_quark);
+  SIGNAL_UNLOCK ();
+
+  node = signal_id ? LOOKUP_SIGNAL_NODE (signal_id) : NULL;
+  if (!node || node->destroyed ||
+      (detail && !(node->flags & G_SIGNAL_DETAILED)))
+    return FALSE;
+
+  if (signal_id_p)
+    *signal_id_p = signal_id;
+  if (detail_p)
+    *detail_p = detail;
+  
+  return TRUE;
+}
+
+/**
+ * g_signal_stop_emission_by_name:
+ * @instance: the object whose signal handlers you wish to stop.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ *
+ * Stops a signal's current emission.
+ *
+ * This is just like g_signal_stop_emission() except it will look up the
+ * signal id for you.
+ */
+void
+g_signal_stop_emission_by_name (gpointer     instance,
+				const gchar *detailed_signal)
+{
+  guint signal_id;
+  GQuark detail = 0;
+  GType itype;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (detailed_signal != NULL);
+  
+  SIGNAL_LOCK ();
+  itype = G_TYPE_FROM_INSTANCE (instance);
+  signal_id = signal_parse_name (detailed_signal, itype, &detail, TRUE);
+  if (signal_id)
+    {
+      SignalNode *node = LOOKUP_SIGNAL_NODE (signal_id);
+      
+      if (detail && !(node->flags & G_SIGNAL_DETAILED))
+	g_warning ("%s: signal `%s' does not support details", G_STRLOC, detailed_signal);
+      else if (!g_type_is_a (itype, node->itype))
+	g_warning ("%s: signal `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+      else
+	{
+	  Emission *emission_list = node->flags & G_SIGNAL_NO_RECURSE ? g_restart_emissions : g_recursive_emissions;
+	  Emission *emission = emission_find (emission_list, signal_id, detail, instance);
+	  
+	  if (emission)
+	    {
+	      if (emission->state == EMISSION_HOOK)
+		g_warning (G_STRLOC ": emission of signal \"%s\" for instance `%p' cannot be stopped from emission hook",
+			   node->name, instance);
+	      else if (emission->state == EMISSION_RUN)
+		emission->state = EMISSION_STOP;
+	    }
+	  else
+	    g_warning (G_STRLOC ": no emission of signal \"%s\" to stop for instance `%p'",
+		       node->name, instance);
+	}
+    }
+  else
+    g_warning ("%s: signal `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_lookup:
+ * @name: the signal's name.
+ * @itype: the type that the signal operates on.
+ *
+ * Given the name of the signal and the type of object it connects to, gets
+ * the signal's identifying integer. Emitting the signal by number is
+ * somewhat faster than using the name each time.
+ *
+ * Also tries the ancestors of the given type.
+ *
+ * See g_signal_new() for details on allowed signal names.
+ *
+ * Returns: the signal's identifying number, or 0 if no signal was found.
+ */
+guint
+g_signal_lookup (const gchar *name,
+                 GType        itype)
+{
+  guint signal_id;
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), 0);
+  
+  SIGNAL_LOCK ();
+  signal_id = signal_id_lookup (g_quark_try_string (name), itype);
+  SIGNAL_UNLOCK ();
+  if (!signal_id)
+    {
+      /* give elaborate warnings */
+      if (!g_type_name (itype))
+	g_warning (G_STRLOC ": unable to lookup signal \"%s\" for invalid type id `%"G_GSIZE_FORMAT"'",
+		   name, itype);
+      else if (!G_TYPE_IS_INSTANTIATABLE (itype))
+	g_warning (G_STRLOC ": unable to lookup signal \"%s\" for non instantiatable type `%s'",
+		   name, g_type_name (itype));
+      else if (!g_type_class_peek (itype))
+	g_warning (G_STRLOC ": unable to lookup signal \"%s\" of unloaded type `%s'",
+		   name, g_type_name (itype));
+    }
+  
+  return signal_id;
+}
+
+/**
+ * g_signal_list_ids:
+ * @itype: Instance or interface type.
+ * @n_ids: Location to store the number of signal ids for @itype.
+ *
+ * Lists the signals by id that a certain instance or interface type
+ * created. Further information about the signals can be acquired through
+ * g_signal_query().
+ *
+ * Returns: Newly allocated array of signal IDs.
+ */
+guint*
+g_signal_list_ids (GType  itype,
+		   guint *n_ids)
+{
+  SignalKey *keys;
+  GArray *result;
+  guint n_nodes;
+  guint i;
+  
+  g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), NULL);
+  g_return_val_if_fail (n_ids != NULL, NULL);
+  
+  SIGNAL_LOCK ();
+  keys = g_bsearch_array_get_nth (g_signal_key_bsa, &g_signal_key_bconfig, 0);
+  n_nodes = g_bsearch_array_get_n_nodes (g_signal_key_bsa);
+  result = g_array_new (FALSE, FALSE, sizeof (guint));
+  
+  for (i = 0; i < n_nodes; i++)
+    if (keys[i].itype == itype)
+      {
+	const gchar *name = g_quark_to_string (keys[i].quark);
+	
+	/* Signal names with "_" in them are aliases to the same
+	 * name with "-" instead of "_".
+	 */
+	if (!strchr (name, '_'))
+	  g_array_append_val (result, keys[i].signal_id);
+      }
+  *n_ids = result->len;
+  SIGNAL_UNLOCK ();
+  if (!n_nodes)
+    {
+      /* give elaborate warnings */
+      if (!g_type_name (itype))
+	g_warning (G_STRLOC ": unable to list signals for invalid type id `%"G_GSIZE_FORMAT"'",
+		   itype);
+      else if (!G_TYPE_IS_INSTANTIATABLE (itype) && !G_TYPE_IS_INTERFACE (itype))
+	g_warning (G_STRLOC ": unable to list signals of non instantiatable type `%s'",
+		   g_type_name (itype));
+      else if (!g_type_class_peek (itype) && !G_TYPE_IS_INTERFACE (itype))
+	g_warning (G_STRLOC ": unable to list signals of unloaded type `%s'",
+		   g_type_name (itype));
+    }
+  
+  return (guint*) g_array_free (result, FALSE);
+}
+
+/**
+ * g_signal_name:
+ * @signal_id: the signal's identifying number.
+ *
+ * Given the signal's identifier, finds its name.
+ *
+ * Two different signals may have the same name, if they have differing types.
+ *
+ * Returns: the signal name, or %NULL if the signal number was invalid.
+ */
+G_CONST_RETURN gchar*
+g_signal_name (guint signal_id)
+{
+  SignalNode *node;
+  const gchar *name;
+  
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  name = node ? node->name : NULL;
+  SIGNAL_UNLOCK ();
+  
+  return (char*) name;
+}
+
+/**
+ * g_signal_query:
+ * @signal_id: The signal id of the signal to query information for.
+ * @query: A user provided structure that is filled in with constant
+ *  values upon success.
+ *
+ * Queries the signal system for in-depth information about a
+ * specific signal. This function will fill in a user-provided
+ * structure to hold signal-specific information. If an invalid
+ * signal id is passed in, the @signal_id member of the #GSignalQuery
+ * is 0. All members filled into the #GSignalQuery structure should
+ * be considered constant and have to be left untouched.
+ */
+void
+g_signal_query (guint         signal_id,
+		GSignalQuery *query)
+{
+  SignalNode *node;
+  
+  g_return_if_fail (query != NULL);
+  
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (!node || node->destroyed)
+    query->signal_id = 0;
+  else
+    {
+      query->signal_id = node->signal_id;
+      query->signal_name = node->name;
+      query->itype = node->itype;
+      query->signal_flags = node->flags;
+      query->return_type = node->return_type;
+      query->n_params = node->n_params;
+      query->param_types = node->param_types;
+    }
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_new:
+ * @signal_name: the name for the signal
+ * @itype: the type this signal pertains to. It will also pertain to
+ *  types which are derived from this type.
+ * @signal_flags: a combination of #GSignalFlags specifying detail of when
+ *  the default handler is to be invoked. You should at least specify
+ *  %G_SIGNAL_RUN_FIRST or %G_SIGNAL_RUN_LAST.
+ * @class_offset: The offset of the function pointer in the class structure
+ *  for this type. Used to invoke a class method generically. Pass 0 to
+ *  not associate a class method with this signal.
+ * @accumulator: the accumulator for this signal; may be %NULL.
+ * @accu_data: user data for the @accumulator.
+ * @c_marshaller: the function to translate arrays of parameter values to
+ *  signal emissions into C language callback invocations.
+ * @return_type: the type of return value, or #G_TYPE_NONE for a signal
+ *  without a return value.
+ * @n_params: the number of parameter types to follow.
+ * @...: a list of types, one for each parameter.
+ *
+ * Creates a new signal. (This is usually done in the class initializer.)
+ *
+ * A signal name consists of segments consisting of ASCII letters and
+ * digits, separated by either the '-' or '_' character. The first
+ * character of a signal name must be a letter. Names which violate these
+ * rules lead to undefined behaviour of the GSignal system.
+ *
+ * When registering a signal and looking up a signal, either separator can
+ * be used, but they cannot be mixed.
+ *
+ * Returns: the signal id
+ */
+guint
+g_signal_new (const gchar	 *signal_name,
+	      GType		  itype,
+	      GSignalFlags	  signal_flags,
+	      guint               class_offset,
+	      GSignalAccumulator  accumulator,
+	      gpointer		  accu_data,
+	      GSignalCMarshaller  c_marshaller,
+	      GType		  return_type,
+	      guint		  n_params,
+	      ...)
+{
+  va_list args;
+  guint signal_id;
+
+  g_return_val_if_fail (signal_name != NULL, 0);
+  
+  va_start (args, n_params);
+
+  signal_id = g_signal_new_valist (signal_name, itype, signal_flags,
+                                   class_offset ? g_signal_type_cclosure_new (itype, class_offset) : NULL,
+				   accumulator, accu_data, c_marshaller,
+                                   return_type, n_params, args);
+
+  va_end (args);
+
+  /* optimize NOP emissions with NULL class handlers */
+  if (signal_id && G_TYPE_IS_INSTANTIATABLE (itype) && return_type == G_TYPE_NONE &&
+      class_offset && class_offset < MAX_TEST_CLASS_OFFSET)
+    {
+      SignalNode *node;
+
+      SIGNAL_LOCK ();
+      node = LOOKUP_SIGNAL_NODE (signal_id);
+      node->test_class_offset = class_offset;
+      SIGNAL_UNLOCK ();
+    }
+ 
+  return signal_id;
+}
+
+/**
+ * g_signal_new_class_handler:
+ * @signal_name: the name for the signal
+ * @itype: the type this signal pertains to. It will also pertain to
+ *  types which are derived from this type.
+ * @signal_flags: a combination of #GSignalFlags specifying detail of when
+ *  the default handler is to be invoked. You should at least specify
+ *  %G_SIGNAL_RUN_FIRST or %G_SIGNAL_RUN_LAST.
+ * @class_handler: a #GCallback which acts as class implementation of
+ *  this signal. Used to invoke a class method generically. Pass %NULL to
+ *  not associate a class method with this signal.
+ * @accumulator: the accumulator for this signal; may be %NULL.
+ * @accu_data: user data for the @accumulator.
+ * @c_marshaller: the function to translate arrays of parameter values to
+ *  signal emissions into C language callback invocations.
+ * @return_type: the type of return value, or #G_TYPE_NONE for a signal
+ *  without a return value.
+ * @n_params: the number of parameter types to follow.
+ * @...: a list of types, one for each parameter.
+ *
+ * Creates a new signal. (This is usually done in the class initializer.)
+ *
+ * This is a variant of g_signal_new() that takes a C callback instead
+ * off a class offset for the signal's class handler. This function
+ * doesn't need a function pointer exposed in the class structure of
+ * an object definition, instead the function pointer is passed
+ * directly and can be overriden by derived classes with
+ * g_signal_override_class_closure() or
+ * g_signal_override_class_handler()and chained to with
+ * g_signal_chain_from_overridden() or
+ * g_signal_chain_from_overridden_handler().
+ *
+ * See g_signal_new() for information about signal names.
+ *
+ * Returns: the signal id
+ *
+ * Since: 2.18
+ */
+guint
+g_signal_new_class_handler (const gchar        *signal_name,
+                            GType               itype,
+                            GSignalFlags        signal_flags,
+                            GCallback           class_handler,
+                            GSignalAccumulator  accumulator,
+                            gpointer            accu_data,
+                            GSignalCMarshaller  c_marshaller,
+                            GType               return_type,
+                            guint               n_params,
+                            ...)
+{
+  va_list args;
+  guint signal_id;
+
+  g_return_val_if_fail (signal_name != NULL, 0);
+
+  va_start (args, n_params);
+
+  signal_id = g_signal_new_valist (signal_name, itype, signal_flags,
+                                   class_handler ? g_cclosure_new (class_handler, NULL, NULL) : NULL,
+                                   accumulator, accu_data, c_marshaller,
+                                   return_type, n_params, args);
+
+  va_end (args);
+
+  return signal_id;
+}
+
+static inline ClassClosure*
+signal_find_class_closure (SignalNode *node,
+			   GType       itype)
+{
+  GBSearchArray *bsa = node->class_closure_bsa;
+  ClassClosure *cc;
+
+  if (bsa)
+    {
+      ClassClosure key;
+
+      /* cc->instance_type is 0 for default closure */
+      
+      key.instance_type = itype;
+      cc = g_bsearch_array_lookup (bsa, &g_class_closure_bconfig, &key);
+      while (!cc && key.instance_type)
+	{
+	  key.instance_type = g_type_parent (key.instance_type);
+	  cc = g_bsearch_array_lookup (bsa, &g_class_closure_bconfig, &key);
+	}
+    }
+  else
+    cc = NULL;
+  return cc;
+}
+
+static inline GClosure*
+signal_lookup_closure (SignalNode    *node,
+		       GTypeInstance *instance)
+{
+  ClassClosure *cc;
+
+  if (node->class_closure_bsa && g_bsearch_array_get_n_nodes (node->class_closure_bsa) == 1)
+    {
+      cc = g_bsearch_array_get_nth (node->class_closure_bsa, &g_class_closure_bconfig, 0);
+      if (cc && cc->instance_type == 0) /* check for default closure */
+        return cc->closure;
+    }
+  cc = signal_find_class_closure (node, G_TYPE_FROM_INSTANCE (instance));
+  return cc ? cc->closure : NULL;
+}
+
+static void
+signal_add_class_closure (SignalNode *node,
+			  GType       itype,
+			  GClosure   *closure)
+{
+  ClassClosure key;
+
+  /* can't optimize NOP emissions with overridden class closures */
+  node->test_class_offset = 0;
+
+  if (!node->class_closure_bsa)
+    node->class_closure_bsa = g_bsearch_array_create (&g_class_closure_bconfig);
+  key.instance_type = itype;
+  key.closure = g_closure_ref (closure);
+  node->class_closure_bsa = g_bsearch_array_insert (node->class_closure_bsa,
+						    &g_class_closure_bconfig,
+						    &key);
+  g_closure_sink (closure);
+  if (node->c_marshaller && closure && G_CLOSURE_NEEDS_MARSHAL (closure))
+    g_closure_set_marshal (closure, node->c_marshaller);
+}
+
+/**
+ * g_signal_newv:
+ * @signal_name: the name for the signal
+ * @itype: the type this signal pertains to. It will also pertain to
+ *     types which are derived from this type
+ * @signal_flags: a combination of #GSignalFlags specifying detail of when
+ *     the default handler is to be invoked. You should at least specify
+ *     %G_SIGNAL_RUN_FIRST or %G_SIGNAL_RUN_LAST
+ * @class_closure: The closure to invoke on signal emission; may be %NULL
+ * @accumulator: the accumulator for this signal; may be %NULL
+ * @accu_data: user data for the @accumulator
+ * @c_marshaller: the function to translate arrays of parameter values to
+ *     signal emissions into C language callback invocations
+ * @return_type: the type of return value, or #G_TYPE_NONE for a signal
+ *     without a return value
+ * @n_params: the length of @param_types
+ * @param_types: an array of types, one for each parameter
+ *
+ * Creates a new signal. (This is usually done in the class initializer.)
+ *
+ * See g_signal_new() for details on allowed signal names.
+ *
+ * Returns: the signal id
+ */
+guint
+g_signal_newv (const gchar       *signal_name,
+               GType              itype,
+               GSignalFlags       signal_flags,
+               GClosure          *class_closure,
+               GSignalAccumulator accumulator,
+	       gpointer		  accu_data,
+               GSignalCMarshaller c_marshaller,
+               GType		  return_type,
+               guint              n_params,
+               GType		 *param_types)
+{
+  gchar *name;
+  guint signal_id, i;
+  SignalNode *node;
+  
+  g_return_val_if_fail (signal_name != NULL, 0);
+  g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), 0);
+  if (n_params)
+    g_return_val_if_fail (param_types != NULL, 0);
+  g_return_val_if_fail ((return_type & G_SIGNAL_TYPE_STATIC_SCOPE) == 0, 0);
+  if (return_type == (G_TYPE_NONE & ~G_SIGNAL_TYPE_STATIC_SCOPE))
+    g_return_val_if_fail (accumulator == NULL, 0);
+  if (!accumulator)
+    g_return_val_if_fail (accu_data == NULL, 0);
+
+  name = g_strdup (signal_name);
+  g_strdelimit (name, G_STR_DELIMITERS ":^", '_');  /* FIXME do character checks like for types */
+  
+  SIGNAL_LOCK ();
+  
+  signal_id = signal_id_lookup (g_quark_try_string (name), itype);
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (node && !node->destroyed)
+    {
+      g_warning (G_STRLOC ": signal \"%s\" already exists in the `%s' %s",
+                 name,
+                 type_debug_name (node->itype),
+                 G_TYPE_IS_INTERFACE (node->itype) ? "interface" : "class ancestry");
+      g_free (name);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  if (node && node->itype != itype)
+    {
+      g_warning (G_STRLOC ": signal \"%s\" for type `%s' was previously created for type `%s'",
+                 name,
+                 type_debug_name (itype),
+                 type_debug_name (node->itype));
+      g_free (name);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  for (i = 0; i < n_params; i++)
+    if (!G_TYPE_IS_VALUE (param_types[i] & ~G_SIGNAL_TYPE_STATIC_SCOPE))
+      {
+	g_warning (G_STRLOC ": parameter %d of type `%s' for signal \"%s::%s\" is not a value type",
+		   i + 1, type_debug_name (param_types[i]), type_debug_name (itype), name);
+	g_free (name);
+	SIGNAL_UNLOCK ();
+	return 0;
+      }
+  if (return_type != G_TYPE_NONE && !G_TYPE_IS_VALUE (return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE))
+    {
+      g_warning (G_STRLOC ": return value of type `%s' for signal \"%s::%s\" is not a value type",
+		 type_debug_name (return_type), type_debug_name (itype), name);
+      g_free (name);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  if (return_type != G_TYPE_NONE &&
+      (signal_flags & (G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST | G_SIGNAL_RUN_CLEANUP)) == G_SIGNAL_RUN_FIRST)
+    {
+      g_warning (G_STRLOC ": signal \"%s::%s\" has return type `%s' and is only G_SIGNAL_RUN_FIRST",
+		 type_debug_name (itype), name, type_debug_name (return_type));
+      g_free (name);
+      SIGNAL_UNLOCK ();
+      return 0;
+    }
+  
+  /* setup permanent portion of signal node */
+  if (!node)
+    {
+      SignalKey key;
+      
+      signal_id = g_n_signal_nodes++;
+      node = g_new (SignalNode, 1);
+      node->signal_id = signal_id;
+      g_signal_nodes = g_renew (SignalNode*, g_signal_nodes, g_n_signal_nodes);
+      g_signal_nodes[signal_id] = node;
+      node->itype = itype;
+      node->name = name;
+      key.itype = itype;
+      key.quark = g_quark_from_string (node->name);
+      key.signal_id = signal_id;
+      g_signal_key_bsa = g_bsearch_array_insert (g_signal_key_bsa, &g_signal_key_bconfig, &key);
+      g_strdelimit (name, "_", '-');
+      node->name = g_intern_string (name);
+      key.quark = g_quark_from_string (name);
+      g_signal_key_bsa = g_bsearch_array_insert (g_signal_key_bsa, &g_signal_key_bconfig, &key);
+    }
+  node->destroyed = FALSE;
+  node->test_class_offset = 0;
+
+  /* setup reinitializable portion */
+  node->flags = signal_flags & G_SIGNAL_FLAGS_MASK;
+  node->n_params = n_params;
+  node->param_types = g_memdup (param_types, sizeof (GType) * n_params);
+  node->return_type = return_type;
+  node->class_closure_bsa = NULL;
+  if (accumulator)
+    {
+      node->accumulator = g_new (SignalAccumulator, 1);
+      node->accumulator->func = accumulator;
+      node->accumulator->data = accu_data;
+    }
+  else
+    node->accumulator = NULL;
+  node->c_marshaller = c_marshaller;
+  node->emission_hooks = NULL;
+  if (class_closure)
+    signal_add_class_closure (node, 0, class_closure);
+  else if (G_TYPE_IS_INSTANTIATABLE (itype) && return_type == G_TYPE_NONE)
+    {
+      /* optimize NOP emissions */
+      node->test_class_offset = TEST_CLASS_MAGIC;
+    }
+  SIGNAL_UNLOCK ();
+
+  g_free (name);
+
+  return signal_id;
+}
+
+/**
+ * g_signal_new_valist:
+ * @signal_name: the name for the signal
+ * @itype: the type this signal pertains to. It will also pertain to
+ *  types which are derived from this type.
+ * @signal_flags: a combination of #GSignalFlags specifying detail of when
+ *  the default handler is to be invoked. You should at least specify
+ *  %G_SIGNAL_RUN_FIRST or %G_SIGNAL_RUN_LAST.
+ * @class_closure: The closure to invoke on signal emission; may be %NULL.
+ * @accumulator: the accumulator for this signal; may be %NULL.
+ * @accu_data: user data for the @accumulator.
+ * @c_marshaller: the function to translate arrays of parameter values to
+ *  signal emissions into C language callback invocations.
+ * @return_type: the type of return value, or #G_TYPE_NONE for a signal
+ *  without a return value.
+ * @n_params: the number of parameter types in @args.
+ * @args: va_list of #GType, one for each parameter.
+ *
+ * Creates a new signal. (This is usually done in the class initializer.)
+ *
+ * See g_signal_new() for details on allowed signal names.
+ *
+ * Returns: the signal id
+ */
+guint
+g_signal_new_valist (const gchar       *signal_name,
+                     GType              itype,
+                     GSignalFlags       signal_flags,
+                     GClosure          *class_closure,
+                     GSignalAccumulator accumulator,
+		     gpointer		accu_data,
+                     GSignalCMarshaller c_marshaller,
+                     GType              return_type,
+                     guint              n_params,
+                     va_list            args)
+{
+  GType *param_types;
+  guint i;
+  guint signal_id;
+
+  if (n_params > 0)
+    {
+      param_types = g_new (GType, n_params);
+
+      for (i = 0; i < n_params; i++)
+	param_types[i] = va_arg (args, GType);
+    }
+  else
+    param_types = NULL;
+
+  signal_id = g_signal_newv (signal_name, itype, signal_flags,
+			     class_closure, accumulator, accu_data, c_marshaller,
+			     return_type, n_params, param_types);
+  g_free (param_types);
+
+  return signal_id;
+}
+
+static void
+signal_destroy_R (SignalNode *signal_node)
+{
+  SignalNode node = *signal_node;
+
+  signal_node->destroyed = TRUE;
+  
+  /* reentrancy caution, zero out real contents first */
+  signal_node->test_class_offset = 0;
+  signal_node->n_params = 0;
+  signal_node->param_types = NULL;
+  signal_node->return_type = 0;
+  signal_node->class_closure_bsa = NULL;
+  signal_node->accumulator = NULL;
+  signal_node->c_marshaller = NULL;
+  signal_node->emission_hooks = NULL;
+  
+#ifdef	G_ENABLE_DEBUG
+  /* check current emissions */
+  {
+    Emission *emission;
+    
+    for (emission = (node.flags & G_SIGNAL_NO_RECURSE) ? g_restart_emissions : g_recursive_emissions;
+         emission; emission = emission->next)
+      if (emission->ihint.signal_id == node.signal_id)
+        g_critical (G_STRLOC ": signal \"%s\" being destroyed is currently in emission (instance `%p')",
+                    node.name, emission->instance);
+  }
+#endif
+  
+  /* free contents that need to
+   */
+  SIGNAL_UNLOCK ();
+  g_free (node.param_types);
+  if (node.class_closure_bsa)
+    {
+      guint i;
+
+      for (i = 0; i < node.class_closure_bsa->n_nodes; i++)
+	{
+	  ClassClosure *cc = g_bsearch_array_get_nth (node.class_closure_bsa, &g_class_closure_bconfig, i);
+
+	  g_closure_unref (cc->closure);
+	}
+      g_bsearch_array_free (node.class_closure_bsa, &g_class_closure_bconfig);
+    }
+  g_free (node.accumulator);
+  if (node.emission_hooks)
+    {
+      g_hook_list_clear (node.emission_hooks);
+      g_free (node.emission_hooks);
+    }
+  SIGNAL_LOCK ();
+}
+
+/**
+ * g_signal_override_class_closure:
+ * @signal_id: the signal id
+ * @instance_type: the instance type on which to override the class closure
+ *  for the signal.
+ * @class_closure: the closure.
+ *
+ * Overrides the class closure (i.e. the default handler) for the given signal
+ * for emissions on instances of @instance_type. @instance_type must be derived
+ * from the type to which the signal belongs.
+ *
+ * See g_signal_chain_from_overridden() and
+ * g_signal_chain_from_overridden_handler() for how to chain up to the
+ * parent class closure from inside the overridden one.
+ */
+void
+g_signal_override_class_closure (guint     signal_id,
+				 GType     instance_type,
+				 GClosure *class_closure)
+{
+  SignalNode *node;
+  
+  g_return_if_fail (signal_id > 0);
+  g_return_if_fail (class_closure != NULL);
+  
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (!g_type_is_a (instance_type, node->itype))
+    g_warning ("%s: type `%s' cannot be overridden for signal id `%u'", G_STRLOC, type_debug_name (instance_type), signal_id);
+  else
+    {
+      ClassClosure *cc = signal_find_class_closure (node, instance_type);
+      
+      if (cc && cc->instance_type == instance_type)
+	g_warning ("%s: type `%s' is already overridden for signal id `%u'", G_STRLOC, type_debug_name (instance_type), signal_id);
+      else
+	signal_add_class_closure (node, instance_type, class_closure);
+    }
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_override_class_handler:
+ * @signal_name: the name for the signal
+ * @instance_type: the instance type on which to override the class handler
+ *  for the signal.
+ * @class_handler: the handler.
+ *
+ * Overrides the class closure (i.e. the default handler) for the
+ * given signal for emissions on instances of @instance_type with
+ * callabck @class_handler. @instance_type must be derived from the
+ * type to which the signal belongs.
+ *
+ * See g_signal_chain_from_overridden() and
+ * g_signal_chain_from_overridden_handler() for how to chain up to the
+ * parent class closure from inside the overridden one.
+ *
+ * Since: 2.18
+ */
+void
+g_signal_override_class_handler (const gchar *signal_name,
+				 GType        instance_type,
+				 GCallback    class_handler)
+{
+  guint signal_id;
+
+  g_return_if_fail (signal_name != NULL);
+  g_return_if_fail (instance_type != G_TYPE_NONE);
+  g_return_if_fail (class_handler != NULL);
+
+  signal_id = g_signal_lookup (signal_name, instance_type);
+
+  if (signal_id)
+    g_signal_override_class_closure (signal_id, instance_type,
+                                     g_cclosure_new (class_handler, NULL, NULL));
+  else
+    g_warning ("%s: signal name '%s' is invalid for type id '%"G_GSIZE_FORMAT"'",
+               G_STRLOC, signal_name, instance_type);
+
+}
+
+/**
+ * g_signal_chain_from_overridden:
+ * @instance_and_params: the argument list of the signal emission. The first
+ *  element in the array is a #GValue for the instance the signal is being
+ *  emitted on. The rest are any arguments to be passed to the signal.
+ * @return_value: Location for the return value.
+ *
+ * Calls the original class closure of a signal. This function should only
+ * be called from an overridden class closure; see
+ * g_signal_override_class_closure() and
+ * g_signal_override_class_handler().
+ */
+void
+g_signal_chain_from_overridden (const GValue *instance_and_params,
+				GValue       *return_value)
+{
+  GType chain_type = 0, restore_type = 0;
+  Emission *emission = NULL;
+  GClosure *closure = NULL;
+  guint n_params = 0;
+  gpointer instance;
+  
+  g_return_if_fail (instance_and_params != NULL);
+  instance = g_value_peek_pointer (instance_and_params);
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  
+  SIGNAL_LOCK ();
+  emission = emission_find_innermost (instance);
+  if (emission)
+    {
+      SignalNode *node = LOOKUP_SIGNAL_NODE (emission->ihint.signal_id);
+      
+      g_assert (node != NULL);	/* paranoid */
+      
+      /* we should probably do the same parameter checks as g_signal_emit() here.
+       */
+      if (emission->chain_type != G_TYPE_NONE)
+	{
+	  ClassClosure *cc = signal_find_class_closure (node, emission->chain_type);
+	  
+	  g_assert (cc != NULL);	/* closure currently in call stack */
+
+	  n_params = node->n_params;
+	  restore_type = cc->instance_type;
+	  cc = signal_find_class_closure (node, g_type_parent (cc->instance_type));
+	  if (cc && cc->instance_type != restore_type)
+	    {
+	      closure = cc->closure;
+	      chain_type = cc->instance_type;
+	    }
+	}
+      else
+	g_warning ("%s: signal id `%u' cannot be chained from current emission stage for instance `%p'", G_STRLOC, node->signal_id, instance);
+    }
+  else
+    g_warning ("%s: no signal is currently being emitted for instance `%p'", G_STRLOC, instance);
+
+  if (closure)
+    {
+      emission->chain_type = chain_type;
+      SIGNAL_UNLOCK ();
+      g_closure_invoke (closure,
+			return_value,
+			n_params + 1,
+			instance_and_params,
+			&emission->ihint);
+      SIGNAL_LOCK ();
+      emission->chain_type = restore_type;
+    }
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_chain_from_overridden_handler:
+ * @instance: the instance the signal is being emitted on.
+ * @...: parameters to be passed to the parent class closure, followed by a
+ *  location for the return value. If the return type of the signal
+ *  is #G_TYPE_NONE, the return value location can be omitted.
+ *
+ * Calls the original class closure of a signal. This function should
+ * only be called from an overridden class closure; see
+ * g_signal_override_class_closure() and
+ * g_signal_override_class_handler().
+ *
+ * Since: 2.18
+ */
+void
+g_signal_chain_from_overridden_handler (gpointer instance,
+                                        ...)
+{
+  GType chain_type = 0, restore_type = 0;
+  Emission *emission = NULL;
+  GClosure *closure = NULL;
+  SignalNode *node;
+  guint n_params = 0;
+
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+
+  SIGNAL_LOCK ();
+  emission = emission_find_innermost (instance);
+  if (emission)
+    {
+      node = LOOKUP_SIGNAL_NODE (emission->ihint.signal_id);
+
+      g_assert (node != NULL);	/* paranoid */
+
+      /* we should probably do the same parameter checks as g_signal_emit() here.
+       */
+      if (emission->chain_type != G_TYPE_NONE)
+	{
+	  ClassClosure *cc = signal_find_class_closure (node, emission->chain_type);
+
+	  g_assert (cc != NULL);	/* closure currently in call stack */
+
+	  n_params = node->n_params;
+	  restore_type = cc->instance_type;
+	  cc = signal_find_class_closure (node, g_type_parent (cc->instance_type));
+	  if (cc && cc->instance_type != restore_type)
+	    {
+	      closure = cc->closure;
+	      chain_type = cc->instance_type;
+	    }
+	}
+      else
+	g_warning ("%s: signal id `%u' cannot be chained from current emission stage for instance `%p'", G_STRLOC, node->signal_id, instance);
+    }
+  else
+    g_warning ("%s: no signal is currently being emitted for instance `%p'", G_STRLOC, instance);
+
+  if (closure)
+    {
+      GValue *instance_and_params;
+      GType signal_return_type;
+      GValue *param_values;
+      va_list var_args;
+      guint i;
+
+      va_start (var_args, instance);
+
+      signal_return_type = node->return_type;
+      instance_and_params = g_slice_alloc (sizeof (GValue) * (n_params + 1));
+      param_values = instance_and_params + 1;
+
+      for (i = 0; i < node->n_params; i++)
+        {
+          gchar *error;
+          GType ptype = node->param_types[i] & ~G_SIGNAL_TYPE_STATIC_SCOPE;
+          gboolean static_scope = node->param_types[i] & G_SIGNAL_TYPE_STATIC_SCOPE;
+
+          param_values[i].g_type = 0;
+          SIGNAL_UNLOCK ();
+          g_value_init (param_values + i, ptype);
+          G_VALUE_COLLECT (param_values + i,
+                           var_args,
+                           static_scope ? G_VALUE_NOCOPY_CONTENTS : 0,
+                           &error);
+          if (error)
+            {
+              g_warning ("%s: %s", G_STRLOC, error);
+              g_free (error);
+
+              /* we purposely leak the value here, it might not be
+               * in a sane state if an error condition occoured
+               */
+              while (i--)
+                g_value_unset (param_values + i);
+
+              g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
+              va_end (var_args);
+              return;
+            }
+          SIGNAL_LOCK ();
+        }
+
+      SIGNAL_UNLOCK ();
+      instance_and_params->g_type = 0;
+      g_value_init (instance_and_params, G_TYPE_FROM_INSTANCE (instance));
+      g_value_set_instance (instance_and_params, instance);
+      SIGNAL_LOCK ();
+
+      emission->chain_type = chain_type;
+      SIGNAL_UNLOCK ();
+
+      if (signal_return_type == G_TYPE_NONE)
+        {
+          g_closure_invoke (closure,
+                            NULL,
+                            n_params + 1,
+                            instance_and_params,
+                            &emission->ihint);
+        }
+      else
+        {
+          GValue return_value = { 0, };
+          gchar *error = NULL;
+          GType rtype = signal_return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE;
+          gboolean static_scope = signal_return_type & G_SIGNAL_TYPE_STATIC_SCOPE;
+
+          g_value_init (&return_value, rtype);
+
+          g_closure_invoke (closure,
+                            &return_value,
+                            n_params + 1,
+                            instance_and_params,
+                            &emission->ihint);
+
+          G_VALUE_LCOPY (&return_value,
+                         var_args,
+                         static_scope ? G_VALUE_NOCOPY_CONTENTS : 0,
+                         &error);
+          if (!error)
+            {
+              g_value_unset (&return_value);
+            }
+          else
+            {
+              g_warning ("%s: %s", G_STRLOC, error);
+              g_free (error);
+
+              /* we purposely leak the value here, it might not be
+               * in a sane state if an error condition occured
+               */
+            }
+        }
+
+      for (i = 0; i < n_params; i++)
+        g_value_unset (param_values + i);
+      g_value_unset (instance_and_params);
+      g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
+
+      va_end (var_args);
+
+      SIGNAL_LOCK ();
+      emission->chain_type = restore_type;
+    }
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_get_invocation_hint:
+ * @instance: the instance to query
+ *
+ * Returns the invocation hint of the innermost signal emission of instance.
+ *
+ * Returns: the invocation hint of the innermost signal emission.
+ */
+GSignalInvocationHint*
+g_signal_get_invocation_hint (gpointer instance)
+{
+  Emission *emission = NULL;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), NULL);
+
+  SIGNAL_LOCK ();
+  emission = emission_find_innermost (instance);
+  SIGNAL_UNLOCK ();
+  
+  return emission ? &emission->ihint : NULL;
+}
+
+/**
+ * g_signal_connect_closure_by_id:
+ * @instance: the instance to connect to.
+ * @signal_id: the id of the signal.
+ * @detail: the detail.
+ * @closure: the closure to connect.
+ * @after: whether the handler should be called before or after the
+ *  default handler of the signal.
+ *
+ * Connects a closure to a signal for a particular object.
+ *
+ * Returns: the handler id
+ */
+gulong
+g_signal_connect_closure_by_id (gpointer  instance,
+				guint     signal_id,
+				GQuark    detail,
+				GClosure *closure,
+				gboolean  after)
+{
+  SignalNode *node;
+  gulong handler_seq_no = 0;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail (signal_id > 0, 0);
+  g_return_val_if_fail (closure != NULL, 0);
+  
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (node)
+    {
+      if (detail && !(node->flags & G_SIGNAL_DETAILED))
+	g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
+      else if (!g_type_is_a (G_TYPE_FROM_INSTANCE (instance), node->itype))
+	g_warning ("%s: signal id `%u' is invalid for instance `%p'", G_STRLOC, signal_id, instance);
+      else
+	{
+	  Handler *handler = handler_new (after);
+	  
+	  handler_seq_no = handler->sequential_number;
+	  handler->detail = detail;
+	  handler->closure = g_closure_ref (closure);
+	  g_closure_sink (closure);
+	  handler_insert (signal_id, instance, handler);
+	  if (node->c_marshaller && G_CLOSURE_NEEDS_MARSHAL (closure))
+	    g_closure_set_marshal (closure, node->c_marshaller);
+	}
+    }
+  else
+    g_warning ("%s: signal id `%u' is invalid for instance `%p'", G_STRLOC, signal_id, instance);
+  SIGNAL_UNLOCK ();
+  
+  return handler_seq_no;
+}
+
+/**
+ * g_signal_connect_closure:
+ * @instance: the instance to connect to.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @closure: the closure to connect.
+ * @after: whether the handler should be called before or after the
+ *  default handler of the signal.
+ *
+ * Connects a closure to a signal for a particular object.
+ *
+ * Returns: the handler id
+ */
+gulong
+g_signal_connect_closure (gpointer     instance,
+			  const gchar *detailed_signal,
+			  GClosure    *closure,
+			  gboolean     after)
+{
+  guint signal_id;
+  gulong handler_seq_no = 0;
+  GQuark detail = 0;
+  GType itype;
+
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail (detailed_signal != NULL, 0);
+  g_return_val_if_fail (closure != NULL, 0);
+
+  SIGNAL_LOCK ();
+  itype = G_TYPE_FROM_INSTANCE (instance);
+  signal_id = signal_parse_name (detailed_signal, itype, &detail, TRUE);
+  if (signal_id)
+    {
+      SignalNode *node = LOOKUP_SIGNAL_NODE (signal_id);
+
+      if (detail && !(node->flags & G_SIGNAL_DETAILED))
+	g_warning ("%s: signal `%s' does not support details", G_STRLOC, detailed_signal);
+      else if (!g_type_is_a (itype, node->itype))
+	g_warning ("%s: signal `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+      else
+	{
+	  Handler *handler = handler_new (after);
+
+	  handler_seq_no = handler->sequential_number;
+	  handler->detail = detail;
+	  handler->closure = g_closure_ref (closure);
+	  g_closure_sink (closure);
+	  handler_insert (signal_id, instance, handler);
+	  if (node->c_marshaller && G_CLOSURE_NEEDS_MARSHAL (handler->closure))
+	    g_closure_set_marshal (handler->closure, node->c_marshaller);
+	}
+    }
+  else
+    g_warning ("%s: signal `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+  SIGNAL_UNLOCK ();
+
+  return handler_seq_no;
+}
+
+/**
+ * g_signal_connect_data:
+ * @instance: the instance to connect to.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @c_handler: the #GCallback to connect.
+ * @data: data to pass to @c_handler calls.
+ * @destroy_data: a #GClosureNotify for @data.
+ * @connect_flags: a combination of #GConnectFlags.
+ *
+ * Connects a #GCallback function to a signal for a particular object. Similar
+ * to g_signal_connect(), but allows to provide a #GClosureNotify for the data
+ * which will be called when the signal handler is disconnected and no longer
+ * used. Specify @connect_flags if you need <literal>..._after()</literal> or
+ * <literal>..._swapped()</literal> variants of this function.
+ *
+ * Returns: the handler id
+ */
+gulong
+g_signal_connect_data (gpointer       instance,
+		       const gchar   *detailed_signal,
+		       GCallback      c_handler,
+		       gpointer       data,
+		       GClosureNotify destroy_data,
+		       GConnectFlags  connect_flags)
+{
+  guint signal_id;
+  gulong handler_seq_no = 0;
+  GQuark detail = 0;
+  GType itype;
+  gboolean swapped, after;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail (detailed_signal != NULL, 0);
+  g_return_val_if_fail (c_handler != NULL, 0);
+
+  swapped = (connect_flags & G_CONNECT_SWAPPED) != FALSE;
+  after = (connect_flags & G_CONNECT_AFTER) != FALSE;
+
+  SIGNAL_LOCK ();
+  itype = G_TYPE_FROM_INSTANCE (instance);
+  signal_id = signal_parse_name (detailed_signal, itype, &detail, TRUE);
+  if (signal_id)
+    {
+      SignalNode *node = LOOKUP_SIGNAL_NODE (signal_id);
+
+      if (detail && !(node->flags & G_SIGNAL_DETAILED))
+	g_warning ("%s: signal `%s' does not support details", G_STRLOC, detailed_signal);
+      else if (!g_type_is_a (itype, node->itype))
+	g_warning ("%s: signal `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+      else
+	{
+	  Handler *handler = handler_new (after);
+
+	  handler_seq_no = handler->sequential_number;
+	  handler->detail = detail;
+	  handler->closure = g_closure_ref ((swapped ? g_cclosure_new_swap : g_cclosure_new) (c_handler, data, destroy_data));
+	  g_closure_sink (handler->closure);
+	  handler_insert (signal_id, instance, handler);
+	  if (node->c_marshaller && G_CLOSURE_NEEDS_MARSHAL (handler->closure))
+	    g_closure_set_marshal (handler->closure, node->c_marshaller);
+	}
+    }
+  else
+    g_warning ("%s: signal `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+  SIGNAL_UNLOCK ();
+
+  return handler_seq_no;
+}
+
+/**
+ * g_signal_handler_block:
+ * @instance: The instance to block the signal handler of.
+ * @handler_id: Handler id of the handler to be blocked.
+ *
+ * Blocks a handler of an instance so it will not be called during any
+ * signal emissions unless it is unblocked again. Thus "blocking" a
+ * signal handler means to temporarily deactive it, a signal handler
+ * has to be unblocked exactly the same amount of times it has been
+ * blocked before to become active again.
+ *
+ * The @handler_id has to be a valid signal handler id, connected to a
+ * signal of @instance.
+ */
+void
+g_signal_handler_block (gpointer instance,
+                        gulong   handler_id)
+{
+  Handler *handler;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (handler_id > 0);
+  
+  SIGNAL_LOCK ();
+  handler = handler_lookup (instance, handler_id, NULL);
+  if (handler)
+    {
+#ifndef G_DISABLE_CHECKS
+      if (handler->block_count >= HANDLER_MAX_BLOCK_COUNT - 1)
+        g_error (G_STRLOC ": handler block_count overflow, %s", REPORT_BUG);
+#endif
+      handler->block_count += 1;
+    }
+  else
+    g_warning ("%s: instance `%p' has no handler with id `%lu'", G_STRLOC, instance, handler_id);
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_handler_unblock:
+ * @instance: The instance to unblock the signal handler of.
+ * @handler_id: Handler id of the handler to be unblocked.
+ *
+ * Undoes the effect of a previous g_signal_handler_block() call.  A
+ * blocked handler is skipped during signal emissions and will not be
+ * invoked, unblocking it (for exactly the amount of times it has been
+ * blocked before) reverts its "blocked" state, so the handler will be
+ * recognized by the signal system and is called upon future or
+ * currently ongoing signal emissions (since the order in which
+ * handlers are called during signal emissions is deterministic,
+ * whether the unblocked handler in question is called as part of a
+ * currently ongoing emission depends on how far that emission has
+ * proceeded yet).
+ *
+ * The @handler_id has to be a valid id of a signal handler that is
+ * connected to a signal of @instance and is currently blocked.
+ */
+void
+g_signal_handler_unblock (gpointer instance,
+                          gulong   handler_id)
+{
+  Handler *handler;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (handler_id > 0);
+  
+  SIGNAL_LOCK ();
+  handler = handler_lookup (instance, handler_id, NULL);
+  if (handler)
+    {
+      if (handler->block_count)
+        handler->block_count -= 1;
+      else
+        g_warning (G_STRLOC ": handler `%lu' of instance `%p' is not blocked", handler_id, instance);
+    }
+  else
+    g_warning ("%s: instance `%p' has no handler with id `%lu'", G_STRLOC, instance, handler_id);
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_handler_disconnect:
+ * @instance: The instance to remove the signal handler from.
+ * @handler_id: Handler id of the handler to be disconnected.
+ *
+ * Disconnects a handler from an instance so it will not be called during
+ * any future or currently ongoing emissions of the signal it has been
+ * connected to. The @handler_id becomes invalid and may be reused.
+ *
+ * The @handler_id has to be a valid signal handler id, connected to a
+ * signal of @instance.
+ */
+void
+g_signal_handler_disconnect (gpointer instance,
+                             gulong   handler_id)
+{
+  Handler *handler;
+  guint signal_id;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (handler_id > 0);
+  
+  SIGNAL_LOCK ();
+  handler = handler_lookup (instance, handler_id, &signal_id);
+  if (handler)
+    {
+      handler->sequential_number = 0;
+      handler->block_count = 1;
+      handler_unref_R (signal_id, instance, handler);
+    }
+  else
+    g_warning ("%s: instance `%p' has no handler with id `%lu'", G_STRLOC, instance, handler_id);
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_handler_is_connected:
+ * @instance: The instance where a signal handler is sought.
+ * @handler_id: the handler id.
+ *
+ * Returns whether @handler_id is the id of a handler connected to @instance.
+ *
+ * Returns: whether @handler_id identifies a handler connected to @instance.
+ */
+gboolean
+g_signal_handler_is_connected (gpointer instance,
+			       gulong   handler_id)
+{
+  Handler *handler;
+  gboolean connected;
+
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), FALSE);
+
+  SIGNAL_LOCK ();
+  handler = handler_lookup (instance, handler_id, NULL);
+  connected = handler != NULL;
+  SIGNAL_UNLOCK ();
+
+  return connected;
+}
+
+void
+g_signal_handlers_destroy (gpointer instance)
+{
+  GBSearchArray *hlbsa;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  
+  SIGNAL_LOCK ();
+  hlbsa = g_hash_table_lookup (g_handler_list_bsa_ht, instance);
+  if (hlbsa)
+    {
+      guint i;
+      
+      /* reentrancy caution, delete instance trace first */
+      g_hash_table_remove (g_handler_list_bsa_ht, instance);
+      
+      for (i = 0; i < hlbsa->n_nodes; i++)
+        {
+          HandlerList *hlist = g_bsearch_array_get_nth (hlbsa, &g_signal_hlbsa_bconfig, i);
+          Handler *handler = hlist->handlers;
+	  
+          while (handler)
+            {
+              Handler *tmp = handler;
+	      
+              handler = tmp->next;
+              tmp->block_count = 1;
+              /* cruel unlink, this works because _all_ handlers vanish */
+              tmp->next = NULL;
+              tmp->prev = tmp;
+              if (tmp->sequential_number)
+		{
+		  tmp->sequential_number = 0;
+		  handler_unref_R (0, NULL, tmp);
+		}
+            }
+        }
+      g_bsearch_array_free (hlbsa, &g_signal_hlbsa_bconfig);
+    }
+  SIGNAL_UNLOCK ();
+}
+
+/**
+ * g_signal_handler_find:
+ * @instance: The instance owning the signal handler to be found.
+ * @mask: Mask indicating which of @signal_id, @detail, @closure, @func
+ *  and/or @data the handler has to match.
+ * @signal_id: Signal the handler has to be connected to.
+ * @detail: Signal detail the handler has to be connected to.
+ * @closure: The closure the handler will invoke.
+ * @func: The C closure callback of the handler (useless for non-C closures).
+ * @data: The closure data of the handler's closure.
+ *
+ * Finds the first signal handler that matches certain selection criteria.
+ * The criteria mask is passed as an OR-ed combination of #GSignalMatchType
+ * flags, and the criteria values are passed as arguments.
+ * The match @mask has to be non-0 for successful matches.
+ * If no handler was found, 0 is returned.
+ *
+ * Returns: A valid non-0 signal handler id for a successful match.
+ */
+gulong
+g_signal_handler_find (gpointer         instance,
+                       GSignalMatchType mask,
+                       guint            signal_id,
+		       GQuark		detail,
+                       GClosure        *closure,
+                       gpointer         func,
+                       gpointer         data)
+{
+  gulong handler_seq_no = 0;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, 0);
+  
+  if (mask & G_SIGNAL_MATCH_MASK)
+    {
+      HandlerMatch *mlist;
+      
+      SIGNAL_LOCK ();
+      mlist = handlers_find (instance, mask, signal_id, detail, closure, func, data, TRUE);
+      if (mlist)
+	{
+	  handler_seq_no = mlist->handler->sequential_number;
+	  handler_match_free1_R (mlist, instance);
+	}
+      SIGNAL_UNLOCK ();
+    }
+  
+  return handler_seq_no;
+}
+
+static guint
+signal_handlers_foreach_matched_R (gpointer         instance,
+				   GSignalMatchType mask,
+				   guint            signal_id,
+				   GQuark           detail,
+				   GClosure        *closure,
+				   gpointer         func,
+				   gpointer         data,
+				   void		  (*callback) (gpointer instance,
+							       gulong   handler_seq_no))
+{
+  HandlerMatch *mlist;
+  guint n_handlers = 0;
+  
+  mlist = handlers_find (instance, mask, signal_id, detail, closure, func, data, FALSE);
+  while (mlist)
+    {
+      n_handlers++;
+      if (mlist->handler->sequential_number)
+	{
+	  SIGNAL_UNLOCK ();
+	  callback (instance, mlist->handler->sequential_number);
+	  SIGNAL_LOCK ();
+	}
+      mlist = handler_match_free1_R (mlist, instance);
+    }
+  
+  return n_handlers;
+}
+
+/**
+ * g_signal_handlers_block_matched:
+ * @instance: The instance to block handlers from.
+ * @mask: Mask indicating which of @signal_id, @detail, @closure, @func
+ *  and/or @data the handlers have to match.
+ * @signal_id: Signal the handlers have to be connected to.
+ * @detail: Signal detail the handlers have to be connected to.
+ * @closure: The closure the handlers will invoke.
+ * @func: The C closure callback of the handlers (useless for non-C closures).
+ * @data: The closure data of the handlers' closures.
+ *
+ * Blocks all handlers on an instance that match a certain selection criteria.
+ * The criteria mask is passed as an OR-ed combination of #GSignalMatchType
+ * flags, and the criteria values are passed as arguments.
+ * Passing at least one of the %G_SIGNAL_MATCH_CLOSURE, %G_SIGNAL_MATCH_FUNC
+ * or %G_SIGNAL_MATCH_DATA match flags is required for successful matches.
+ * If no handlers were found, 0 is returned, the number of blocked handlers
+ * otherwise.
+ *
+ * Returns: The number of handlers that matched.
+ */
+guint
+g_signal_handlers_block_matched (gpointer         instance,
+				 GSignalMatchType mask,
+				 guint            signal_id,
+				 GQuark           detail,
+				 GClosure        *closure,
+				 gpointer         func,
+				 gpointer         data)
+{
+  guint n_handlers = 0;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, 0);
+  
+  if (mask & (G_SIGNAL_MATCH_CLOSURE | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA))
+    {
+      SIGNAL_LOCK ();
+      n_handlers = signal_handlers_foreach_matched_R (instance, mask, signal_id, detail,
+						      closure, func, data,
+						      g_signal_handler_block);
+      SIGNAL_UNLOCK ();
+    }
+  
+  return n_handlers;
+}
+
+/**
+ * g_signal_handlers_unblock_matched:
+ * @instance: The instance to unblock handlers from.
+ * @mask: Mask indicating which of @signal_id, @detail, @closure, @func
+ *  and/or @data the handlers have to match.
+ * @signal_id: Signal the handlers have to be connected to.
+ * @detail: Signal detail the handlers have to be connected to.
+ * @closure: The closure the handlers will invoke.
+ * @func: The C closure callback of the handlers (useless for non-C closures).
+ * @data: The closure data of the handlers' closures.
+ *
+ * Unblocks all handlers on an instance that match a certain selection
+ * criteria. The criteria mask is passed as an OR-ed combination of
+ * #GSignalMatchType flags, and the criteria values are passed as arguments.
+ * Passing at least one of the %G_SIGNAL_MATCH_CLOSURE, %G_SIGNAL_MATCH_FUNC
+ * or %G_SIGNAL_MATCH_DATA match flags is required for successful matches.
+ * If no handlers were found, 0 is returned, the number of unblocked handlers
+ * otherwise. The match criteria should not apply to any handlers that are
+ * not currently blocked.
+ *
+ * Returns: The number of handlers that matched.
+ */
+guint
+g_signal_handlers_unblock_matched (gpointer         instance,
+				   GSignalMatchType mask,
+				   guint            signal_id,
+				   GQuark           detail,
+				   GClosure        *closure,
+				   gpointer         func,
+				   gpointer         data)
+{
+  guint n_handlers = 0;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, 0);
+  
+  if (mask & (G_SIGNAL_MATCH_CLOSURE | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA))
+    {
+      SIGNAL_LOCK ();
+      n_handlers = signal_handlers_foreach_matched_R (instance, mask, signal_id, detail,
+						      closure, func, data,
+						      g_signal_handler_unblock);
+      SIGNAL_UNLOCK ();
+    }
+  
+  return n_handlers;
+}
+
+/**
+ * g_signal_handlers_disconnect_matched:
+ * @instance: The instance to remove handlers from.
+ * @mask: Mask indicating which of @signal_id, @detail, @closure, @func
+ *  and/or @data the handlers have to match.
+ * @signal_id: Signal the handlers have to be connected to.
+ * @detail: Signal detail the handlers have to be connected to.
+ * @closure: The closure the handlers will invoke.
+ * @func: The C closure callback of the handlers (useless for non-C closures).
+ * @data: The closure data of the handlers' closures.
+ *
+ * Disconnects all handlers on an instance that match a certain
+ * selection criteria. The criteria mask is passed as an OR-ed
+ * combination of #GSignalMatchType flags, and the criteria values are
+ * passed as arguments.  Passing at least one of the
+ * %G_SIGNAL_MATCH_CLOSURE, %G_SIGNAL_MATCH_FUNC or
+ * %G_SIGNAL_MATCH_DATA match flags is required for successful
+ * matches.  If no handlers were found, 0 is returned, the number of
+ * disconnected handlers otherwise.
+ *
+ * Returns: The number of handlers that matched.
+ */
+guint
+g_signal_handlers_disconnect_matched (gpointer         instance,
+				      GSignalMatchType mask,
+				      guint            signal_id,
+				      GQuark           detail,
+				      GClosure        *closure,
+				      gpointer         func,
+				      gpointer         data)
+{
+  guint n_handlers = 0;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0);
+  g_return_val_if_fail ((mask & ~G_SIGNAL_MATCH_MASK) == 0, 0);
+  
+  if (mask & (G_SIGNAL_MATCH_CLOSURE | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA))
+    {
+      SIGNAL_LOCK ();
+      n_handlers = signal_handlers_foreach_matched_R (instance, mask, signal_id, detail,
+						      closure, func, data,
+						      g_signal_handler_disconnect);
+      SIGNAL_UNLOCK ();
+    }
+  
+  return n_handlers;
+}
+
+/**
+ * g_signal_has_handler_pending:
+ * @instance: the object whose signal handlers are sought.
+ * @signal_id: the signal id.
+ * @detail: the detail.
+ * @may_be_blocked: whether blocked handlers should count as match.
+ *
+ * Returns whether there are any handlers connected to @instance for the
+ * given signal id and detail.
+ *
+ * One example of when you might use this is when the arguments to the
+ * signal are difficult to compute. A class implementor may opt to not
+ * emit the signal if no one is attached anyway, thus saving the cost
+ * of building the arguments.
+ *
+ * Returns: %TRUE if a handler is connected to the signal, %FALSE
+ *          otherwise.
+ */
+gboolean
+g_signal_has_handler_pending (gpointer instance,
+			      guint    signal_id,
+			      GQuark   detail,
+			      gboolean may_be_blocked)
+{
+  HandlerMatch *mlist;
+  gboolean has_pending;
+  
+  g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), FALSE);
+  g_return_val_if_fail (signal_id > 0, FALSE);
+  
+  SIGNAL_LOCK ();
+  if (detail)
+    {
+      SignalNode *node = LOOKUP_SIGNAL_NODE (signal_id);
+      
+      if (!(node->flags & G_SIGNAL_DETAILED))
+	{
+	  g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
+	  SIGNAL_UNLOCK ();
+	  return FALSE;
+	}
+    }
+  mlist = handlers_find (instance,
+			 (G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DETAIL | (may_be_blocked ? 0 : G_SIGNAL_MATCH_UNBLOCKED)),
+			 signal_id, detail, NULL, NULL, NULL, TRUE);
+  if (mlist)
+    {
+      has_pending = TRUE;
+      handler_match_free1_R (mlist, instance);
+    }
+  else
+    has_pending = FALSE;
+  SIGNAL_UNLOCK ();
+  
+  return has_pending;
+}
+
+static inline gboolean
+signal_check_skip_emission (SignalNode *node,
+			    gpointer    instance,
+			    GQuark      detail)
+{
+  HandlerList *hlist;
+
+  /* are we able to check for NULL class handlers? */
+  if (!node->test_class_offset)
+    return FALSE;
+
+  /* are there emission hooks pending? */
+  if (node->emission_hooks && node->emission_hooks->hooks)
+    return FALSE;
+
+  /* is there a non-NULL class handler? */
+  if (node->test_class_offset != TEST_CLASS_MAGIC)
+    {
+      GTypeClass *class = G_TYPE_INSTANCE_GET_CLASS (instance, G_TYPE_FROM_INSTANCE (instance), GTypeClass);
+
+      if (G_STRUCT_MEMBER (gpointer, class, node->test_class_offset))
+	return FALSE;
+    }
+
+  /* are signals being debugged? */
+#ifdef  G_ENABLE_DEBUG
+  IF_DEBUG (SIGNALS, g_trace_instance_signals || g_trap_instance_signals)
+    return FALSE;
+#endif /* G_ENABLE_DEBUG */
+
+  /* is this a no-recurse signal already in emission? */
+  if (node->flags & G_SIGNAL_NO_RECURSE &&
+      emission_find (g_restart_emissions, node->signal_id, detail, instance))
+    return FALSE;
+
+  /* do we have pending handlers? */
+  hlist = handler_list_lookup (node->signal_id, instance);
+  if (hlist && hlist->handlers)
+    return FALSE;
+
+  /* none of the above, no emission required */
+  return TRUE;
+}
+
+/**
+ * g_signal_emitv:
+ * @instance_and_params: argument list for the signal emission. The first
+ *  element in the array is a #GValue for the instance the signal is
+ *  being emitted on. The rest are any arguments to be passed to the
+ *  signal.
+ * @signal_id: the signal id
+ * @detail: the detail
+ * @return_value: Location to store the return value of the signal emission.
+ *
+ * Emits a signal.
+ *
+ * Note that g_signal_emitv() doesn't change @return_value if no handlers are
+ * connected, in contrast to g_signal_emit() and g_signal_emit_valist().
+ */
+void
+g_signal_emitv (const GValue *instance_and_params,
+		guint         signal_id,
+		GQuark	      detail,
+		GValue       *return_value)
+{
+  gpointer instance;
+  SignalNode *node;
+#ifdef G_ENABLE_DEBUG
+  const GValue *param_values;
+  guint i;
+#endif
+  
+  g_return_if_fail (instance_and_params != NULL);
+  instance = g_value_peek_pointer (instance_and_params);
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (signal_id > 0);
+
+#ifdef G_ENABLE_DEBUG
+  param_values = instance_and_params + 1;
+#endif
+
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (!node || !g_type_is_a (G_TYPE_FROM_INSTANCE (instance), node->itype))
+    {
+      g_warning ("%s: signal id `%u' is invalid for instance `%p'", G_STRLOC, signal_id, instance);
+      SIGNAL_UNLOCK ();
+      return;
+    }
+#ifdef G_ENABLE_DEBUG
+  if (detail && !(node->flags & G_SIGNAL_DETAILED))
+    {
+      g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
+      SIGNAL_UNLOCK ();
+      return;
+    }
+  for (i = 0; i < node->n_params; i++)
+    if (!G_TYPE_CHECK_VALUE_TYPE (param_values + i, node->param_types[i] & ~G_SIGNAL_TYPE_STATIC_SCOPE))
+      {
+	g_critical ("%s: value for `%s' parameter %u for signal \"%s\" is of type `%s'",
+		    G_STRLOC,
+		    type_debug_name (node->param_types[i]),
+		    i,
+		    node->name,
+		    G_VALUE_TYPE_NAME (param_values + i));
+	SIGNAL_UNLOCK ();
+	return;
+      }
+  if (node->return_type != G_TYPE_NONE)
+    {
+      if (!return_value)
+	{
+	  g_critical ("%s: return value `%s' for signal \"%s\" is (NULL)",
+		      G_STRLOC,
+		      type_debug_name (node->return_type),
+		      node->name);
+	  SIGNAL_UNLOCK ();
+	  return;
+	}
+      else if (!node->accumulator && !G_TYPE_CHECK_VALUE_TYPE (return_value, node->return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE))
+	{
+	  g_critical ("%s: return value `%s' for signal \"%s\" is of type `%s'",
+		      G_STRLOC,
+		      type_debug_name (node->return_type),
+		      node->name,
+		      G_VALUE_TYPE_NAME (return_value));
+	  SIGNAL_UNLOCK ();
+	  return;
+	}
+    }
+  else
+    return_value = NULL;
+#endif	/* G_ENABLE_DEBUG */
+
+  /* optimize NOP emissions */
+  if (signal_check_skip_emission (node, instance, detail))
+    {
+      /* nothing to do to emit this signal */
+      SIGNAL_UNLOCK ();
+      /* g_printerr ("omitting emission of \"%s\"\n", node->name); */
+      return;
+    }
+
+  SIGNAL_UNLOCK ();
+  signal_emit_unlocked_R (node, detail, instance, return_value, instance_and_params);
+}
+
+/**
+ * g_signal_emit_valist:
+ * @instance: the instance the signal is being emitted on.
+ * @signal_id: the signal id
+ * @detail: the detail
+ * @var_args: a list of parameters to be passed to the signal, followed by a
+ *  location for the return value. If the return type of the signal
+ *  is #G_TYPE_NONE, the return value location can be omitted.
+ *
+ * Emits a signal.
+ *
+ * Note that g_signal_emit_valist() resets the return value to the default
+ * if no handlers are connected, in contrast to g_signal_emitv().
+ */
+void
+g_signal_emit_valist (gpointer instance,
+		      guint    signal_id,
+		      GQuark   detail,
+		      va_list  var_args)
+{
+  GValue *instance_and_params;
+  GType signal_return_type;
+  GValue *param_values;
+  SignalNode *node;
+  guint i, n_params;
+  
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (signal_id > 0);
+
+  SIGNAL_LOCK ();
+  node = LOOKUP_SIGNAL_NODE (signal_id);
+  if (!node || !g_type_is_a (G_TYPE_FROM_INSTANCE (instance), node->itype))
+    {
+      g_warning ("%s: signal id `%u' is invalid for instance `%p'", G_STRLOC, signal_id, instance);
+      SIGNAL_UNLOCK ();
+      return;
+    }
+#ifndef G_DISABLE_CHECKS
+  if (detail && !(node->flags & G_SIGNAL_DETAILED))
+    {
+      g_warning ("%s: signal id `%u' does not support detail (%u)", G_STRLOC, signal_id, detail);
+      SIGNAL_UNLOCK ();
+      return;
+    }
+#endif  /* !G_DISABLE_CHECKS */
+
+  /* optimize NOP emissions */
+  if (signal_check_skip_emission (node, instance, detail))
+    {
+      /* nothing to do to emit this signal */
+      SIGNAL_UNLOCK ();
+      /* g_printerr ("omitting emission of \"%s\"\n", node->name); */
+      return;
+    }
+
+  n_params = node->n_params;
+  signal_return_type = node->return_type;
+  instance_and_params = g_slice_alloc (sizeof (GValue) * (n_params + 1));
+  param_values = instance_and_params + 1;
+
+  for (i = 0; i < node->n_params; i++)
+    {
+      gchar *error;
+      GType ptype = node->param_types[i] & ~G_SIGNAL_TYPE_STATIC_SCOPE;
+      gboolean static_scope = node->param_types[i] & G_SIGNAL_TYPE_STATIC_SCOPE;
+
+      param_values[i].g_type = 0;
+      SIGNAL_UNLOCK ();
+      g_value_init (param_values + i, ptype);
+      G_VALUE_COLLECT (param_values + i,
+		       var_args,
+		       static_scope ? G_VALUE_NOCOPY_CONTENTS : 0,
+		       &error);
+      if (error)
+	{
+	  g_warning ("%s: %s", G_STRLOC, error);
+	  g_free (error);
+
+	  /* we purposely leak the value here, it might not be
+	   * in a sane state if an error condition occoured
+	   */
+	  while (i--)
+	    g_value_unset (param_values + i);
+
+	  g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
+	  return;
+	}
+      SIGNAL_LOCK ();
+    }
+  SIGNAL_UNLOCK ();
+  instance_and_params->g_type = 0;
+  g_value_init (instance_and_params, G_TYPE_FROM_INSTANCE (instance));
+  g_value_set_instance (instance_and_params, instance);
+  if (signal_return_type == G_TYPE_NONE)
+    signal_emit_unlocked_R (node, detail, instance, NULL, instance_and_params);
+  else
+    {
+      GValue return_value = { 0, };
+      gchar *error = NULL;
+      GType rtype = signal_return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE;
+      gboolean static_scope = signal_return_type & G_SIGNAL_TYPE_STATIC_SCOPE;
+      
+      g_value_init (&return_value, rtype);
+
+      signal_emit_unlocked_R (node, detail, instance, &return_value, instance_and_params);
+
+      G_VALUE_LCOPY (&return_value,
+		     var_args,
+		     static_scope ? G_VALUE_NOCOPY_CONTENTS : 0,
+		     &error);
+      if (!error)
+	g_value_unset (&return_value);
+      else
+	{
+	  g_warning ("%s: %s", G_STRLOC, error);
+	  g_free (error);
+	  
+	  /* we purposely leak the value here, it might not be
+	   * in a sane state if an error condition occured
+	   */
+	}
+    }
+  for (i = 0; i < n_params; i++)
+    g_value_unset (param_values + i);
+  g_value_unset (instance_and_params);
+  g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
+}
+
+/**
+ * g_signal_emit:
+ * @instance: the instance the signal is being emitted on.
+ * @signal_id: the signal id
+ * @detail: the detail
+ * @...: parameters to be passed to the signal, followed by a
+ *  location for the return value. If the return type of the signal
+ *  is #G_TYPE_NONE, the return value location can be omitted.
+ *
+ * Emits a signal.
+ *
+ * Note that g_signal_emit() resets the return value to the default
+ * if no handlers are connected, in contrast to g_signal_emitv().
+ */
+void
+g_signal_emit (gpointer instance,
+	       guint    signal_id,
+	       GQuark   detail,
+	       ...)
+{
+  va_list var_args;
+
+  va_start (var_args, detail);
+  g_signal_emit_valist (instance, signal_id, detail, var_args);
+  va_end (var_args);
+}
+
+/**
+ * g_signal_emit_by_name:
+ * @instance: the instance the signal is being emitted on.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @...: parameters to be passed to the signal, followed by a
+ *  location for the return value. If the return type of the signal
+ *  is #G_TYPE_NONE, the return value location can be omitted.
+ *
+ * Emits a signal.
+ *
+ * Note that g_signal_emit_by_name() resets the return value to the default
+ * if no handlers are connected, in contrast to g_signal_emitv().
+ */
+void
+g_signal_emit_by_name (gpointer     instance,
+		       const gchar *detailed_signal,
+		       ...)
+{
+  GQuark detail = 0;
+  guint signal_id;
+
+  g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+  g_return_if_fail (detailed_signal != NULL);
+
+  SIGNAL_LOCK ();
+  signal_id = signal_parse_name (detailed_signal, G_TYPE_FROM_INSTANCE (instance), &detail, TRUE);
+  SIGNAL_UNLOCK ();
+
+  if (signal_id)
+    {
+      va_list var_args;
+
+      va_start (var_args, detailed_signal);
+      g_signal_emit_valist (instance, signal_id, detail, var_args);
+      va_end (var_args);
+    }
+  else
+    g_warning ("%s: signal name `%s' is invalid for instance `%p'", G_STRLOC, detailed_signal, instance);
+}
+
+static inline gboolean
+accumulate (GSignalInvocationHint *ihint,
+	    GValue                *return_accu,
+	    GValue	          *handler_return,
+	    SignalAccumulator     *accumulator)
+{
+  gboolean continue_emission;
+
+  if (!accumulator)
+    return TRUE;
+
+  continue_emission = accumulator->func (ihint, return_accu, handler_return, accumulator->data);
+  g_value_reset (handler_return);
+
+  return continue_emission;
+}
+
+static gboolean
+signal_emit_unlocked_R (SignalNode   *node,
+			GQuark	      detail,
+			gpointer      instance,
+			GValue	     *emission_return,
+			const GValue *instance_and_params)
+{
+  SignalAccumulator *accumulator;
+  Emission emission;
+  GClosure *class_closure;
+  HandlerList *hlist;
+  Handler *handler_list = NULL;
+  GValue *return_accu, accu = { 0, };
+  guint signal_id;
+  gulong max_sequential_handler_number;
+  gboolean return_value_altered = FALSE;
+  
+#ifdef	G_ENABLE_DEBUG
+  IF_DEBUG (SIGNALS, g_trace_instance_signals == instance || g_trap_instance_signals == instance)
+    {
+      g_message ("%s::%s(%u) emitted (instance=%p, signal-node=%p)",
+		 g_type_name (G_TYPE_FROM_INSTANCE (instance)),
+		 node->name, detail,
+		 instance, node);
+      if (g_trap_instance_signals == instance)
+	G_BREAKPOINT ();
+    }
+#endif	/* G_ENABLE_DEBUG */
+  
+  SIGNAL_LOCK ();
+  signal_id = node->signal_id;
+  if (node->flags & G_SIGNAL_NO_RECURSE)
+    {
+      Emission *node = emission_find (g_restart_emissions, signal_id, detail, instance);
+      
+      if (node)
+	{
+	  node->state = EMISSION_RESTART;
+	  SIGNAL_UNLOCK ();
+	  return return_value_altered;
+	}
+    }
+  accumulator = node->accumulator;
+  if (accumulator)
+    {
+      SIGNAL_UNLOCK ();
+      g_value_init (&accu, node->return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE);
+      return_accu = &accu;
+      SIGNAL_LOCK ();
+    }
+  else
+    return_accu = emission_return;
+  emission.instance = instance;
+  emission.ihint.signal_id = node->signal_id;
+  emission.ihint.detail = detail;
+  emission.ihint.run_type = 0;
+  emission.state = 0;
+  emission.chain_type = G_TYPE_NONE;
+  emission_push ((node->flags & G_SIGNAL_NO_RECURSE) ? &g_restart_emissions : &g_recursive_emissions, &emission);
+  class_closure = signal_lookup_closure (node, instance);
+  
+ EMIT_RESTART:
+  
+  if (handler_list)
+    handler_unref_R (signal_id, instance, handler_list);
+  max_sequential_handler_number = g_handler_sequential_number;
+  hlist = handler_list_lookup (signal_id, instance);
+  handler_list = hlist ? hlist->handlers : NULL;
+  if (handler_list)
+    handler_ref (handler_list);
+  
+  emission.ihint.run_type = G_SIGNAL_RUN_FIRST;
+  
+  if ((node->flags & G_SIGNAL_RUN_FIRST) && class_closure)
+    {
+      emission.state = EMISSION_RUN;
+
+      emission.chain_type = G_TYPE_FROM_INSTANCE (instance);
+      SIGNAL_UNLOCK ();
+      g_closure_invoke (class_closure,
+			return_accu,
+			node->n_params + 1,
+			instance_and_params,
+			&emission.ihint);
+      if (!accumulate (&emission.ihint, emission_return, &accu, accumulator) &&
+	  emission.state == EMISSION_RUN)
+	emission.state = EMISSION_STOP;
+      SIGNAL_LOCK ();
+      emission.chain_type = G_TYPE_NONE;
+      return_value_altered = TRUE;
+      
+      if (emission.state == EMISSION_STOP)
+	goto EMIT_CLEANUP;
+      else if (emission.state == EMISSION_RESTART)
+	goto EMIT_RESTART;
+    }
+  
+  if (node->emission_hooks)
+    {
+      gboolean need_destroy, was_in_call, may_recurse = TRUE;
+      GHook *hook;
+
+      emission.state = EMISSION_HOOK;
+      hook = g_hook_first_valid (node->emission_hooks, may_recurse);
+      while (hook)
+	{
+	  SignalHook *signal_hook = SIGNAL_HOOK (hook);
+	  
+	  if (!signal_hook->detail || signal_hook->detail == detail)
+	    {
+	      GSignalEmissionHook hook_func = (GSignalEmissionHook) hook->func;
+	      
+	      was_in_call = G_HOOK_IN_CALL (hook);
+	      hook->flags |= G_HOOK_FLAG_IN_CALL;
+              SIGNAL_UNLOCK ();
+	      need_destroy = !hook_func (&emission.ihint, node->n_params + 1, instance_and_params, hook->data);
+	      SIGNAL_LOCK ();
+	      if (!was_in_call)
+		hook->flags &= ~G_HOOK_FLAG_IN_CALL;
+	      if (need_destroy)
+		g_hook_destroy_link (node->emission_hooks, hook);
+	    }
+	  hook = g_hook_next_valid (node->emission_hooks, hook, may_recurse);
+	}
+      
+      if (emission.state == EMISSION_RESTART)
+	goto EMIT_RESTART;
+    }
+  
+  if (handler_list)
+    {
+      Handler *handler = handler_list;
+      
+      emission.state = EMISSION_RUN;
+      handler_ref (handler);
+      do
+	{
+	  Handler *tmp;
+	  
+	  if (handler->after)
+	    {
+	      handler_unref_R (signal_id, instance, handler_list);
+	      handler_list = handler;
+	      break;
+	    }
+	  else if (!handler->block_count && (!handler->detail || handler->detail == detail) &&
+		   handler->sequential_number < max_sequential_handler_number)
+	    {
+	      SIGNAL_UNLOCK ();
+	      g_closure_invoke (handler->closure,
+				return_accu,
+				node->n_params + 1,
+				instance_and_params,
+				&emission.ihint);
+	      if (!accumulate (&emission.ihint, emission_return, &accu, accumulator) &&
+		  emission.state == EMISSION_RUN)
+		emission.state = EMISSION_STOP;
+	      SIGNAL_LOCK ();
+	      return_value_altered = TRUE;
+	      
+	      tmp = emission.state == EMISSION_RUN ? handler->next : NULL;
+	    }
+	  else
+	    tmp = handler->next;
+	  
+	  if (tmp)
+	    handler_ref (tmp);
+	  handler_unref_R (signal_id, instance, handler_list);
+	  handler_list = handler;
+	  handler = tmp;
+	}
+      while (handler);
+      
+      if (emission.state == EMISSION_STOP)
+	goto EMIT_CLEANUP;
+      else if (emission.state == EMISSION_RESTART)
+	goto EMIT_RESTART;
+    }
+  
+  emission.ihint.run_type = G_SIGNAL_RUN_LAST;
+  
+  if ((node->flags & G_SIGNAL_RUN_LAST) && class_closure)
+    {
+      emission.state = EMISSION_RUN;
+      
+      emission.chain_type = G_TYPE_FROM_INSTANCE (instance);
+      SIGNAL_UNLOCK ();
+      g_closure_invoke (class_closure,
+			return_accu,
+			node->n_params + 1,
+			instance_and_params,
+			&emission.ihint);
+      if (!accumulate (&emission.ihint, emission_return, &accu, accumulator) &&
+	  emission.state == EMISSION_RUN)
+	emission.state = EMISSION_STOP;
+      SIGNAL_LOCK ();
+      emission.chain_type = G_TYPE_NONE;
+      return_value_altered = TRUE;
+      
+      if (emission.state == EMISSION_STOP)
+	goto EMIT_CLEANUP;
+      else if (emission.state == EMISSION_RESTART)
+	goto EMIT_RESTART;
+    }
+  
+  if (handler_list)
+    {
+      Handler *handler = handler_list;
+      
+      emission.state = EMISSION_RUN;
+      handler_ref (handler);
+      do
+	{
+	  Handler *tmp;
+	  
+	  if (handler->after && !handler->block_count && (!handler->detail || handler->detail == detail) &&
+	      handler->sequential_number < max_sequential_handler_number)
+	    {
+	      SIGNAL_UNLOCK ();
+	      g_closure_invoke (handler->closure,
+				return_accu,
+				node->n_params + 1,
+				instance_and_params,
+				&emission.ihint);
+	      if (!accumulate (&emission.ihint, emission_return, &accu, accumulator) &&
+		  emission.state == EMISSION_RUN)
+		emission.state = EMISSION_STOP;
+	      SIGNAL_LOCK ();
+	      return_value_altered = TRUE;
+	      
+	      tmp = emission.state == EMISSION_RUN ? handler->next : NULL;
+	    }
+	  else
+	    tmp = handler->next;
+	  
+	  if (tmp)
+	    handler_ref (tmp);
+	  handler_unref_R (signal_id, instance, handler);
+	  handler = tmp;
+	}
+      while (handler);
+      
+      if (emission.state == EMISSION_STOP)
+	goto EMIT_CLEANUP;
+      else if (emission.state == EMISSION_RESTART)
+	goto EMIT_RESTART;
+    }
+  
+ EMIT_CLEANUP:
+  
+  emission.ihint.run_type = G_SIGNAL_RUN_CLEANUP;
+  
+  if ((node->flags & G_SIGNAL_RUN_CLEANUP) && class_closure)
+    {
+      gboolean need_unset = FALSE;
+      
+      emission.state = EMISSION_STOP;
+      
+      emission.chain_type = G_TYPE_FROM_INSTANCE (instance);
+      SIGNAL_UNLOCK ();
+      if (node->return_type != G_TYPE_NONE && !accumulator)
+	{
+	  g_value_init (&accu, node->return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE);
+	  need_unset = TRUE;
+	}
+      g_closure_invoke (class_closure,
+			node->return_type != G_TYPE_NONE ? &accu : NULL,
+			node->n_params + 1,
+			instance_and_params,
+			&emission.ihint);
+      if (need_unset)
+	g_value_unset (&accu);
+      SIGNAL_LOCK ();
+      emission.chain_type = G_TYPE_NONE;
+      
+      if (emission.state == EMISSION_RESTART)
+	goto EMIT_RESTART;
+    }
+  
+  if (handler_list)
+    handler_unref_R (signal_id, instance, handler_list);
+  
+  emission_pop ((node->flags & G_SIGNAL_NO_RECURSE) ? &g_restart_emissions : &g_recursive_emissions, &emission);
+  SIGNAL_UNLOCK ();
+  if (accumulator)
+    g_value_unset (&accu);
+  
+  return return_value_altered;
+}
+
+static const gchar*
+type_debug_name (GType type)
+{
+  if (type)
+    {
+      const char *name = g_type_name (type & ~G_SIGNAL_TYPE_STATIC_SCOPE);
+      return name ? name : "<unknown>";
+    }
+  else
+    return "<invalid>";
+}
+
+/**
+ * g_signal_accumulator_true_handled:
+ * @ihint: standard #GSignalAccumulator parameter
+ * @return_accu: standard #GSignalAccumulator parameter
+ * @handler_return: standard #GSignalAccumulator parameter
+ * @dummy: standard #GSignalAccumulator parameter
+ *
+ * A predefined #GSignalAccumulator for signals that return a
+ * boolean values. The behavior that this accumulator gives is
+ * that a return of %TRUE stops the signal emission: no further
+ * callbacks will be invoked, while a return of %FALSE allows
+ * the emission to coninue. The idea here is that a %TRUE return
+ * indicates that the callback <emphasis>handled</emphasis> the signal,
+ * and no further handling is needed.
+ *
+ * Since: 2.4
+ *
+ * Returns: standard #GSignalAccumulator result
+ */
+gboolean
+g_signal_accumulator_true_handled (GSignalInvocationHint *ihint,
+				   GValue                *return_accu,
+				   const GValue          *handler_return,
+				   gpointer               dummy)
+{
+  gboolean continue_emission;
+  gboolean signal_handled;
+  
+  signal_handled = g_value_get_boolean (handler_return);
+  g_value_set_boolean (return_accu, signal_handled);
+  continue_emission = !signal_handled;
+  
+  return continue_emission;
+}
+
+/* --- compile standard marshallers --- */
+#include "gmarshal.c"
+
+#define __G_SIGNAL_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gsignal.h b/gobject/gsignal.h
new file mode 100644
index 0000000..d612901
--- /dev/null
+++ b/gobject/gsignal.h
@@ -0,0 +1,509 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000-2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_SIGNAL_H__
+#define __G_SIGNAL_H__
+
+#include	<gobject/gclosure.h>
+#include	<gobject/gvalue.h>
+#include	<gobject/gparam.h>
+#include	<gobject/gmarshal.h>
+
+G_BEGIN_DECLS
+
+/* --- typedefs --- */
+typedef struct _GSignalQuery		 GSignalQuery;
+typedef struct _GSignalInvocationHint	 GSignalInvocationHint;
+/**
+ * GSignalCMarshaller:
+ * 
+ * This is the signature of marshaller functions, required to marshall
+ * arrays of parameter values to signal emissions into C language callback
+ * invocations. It is merely an alias to #GClosureMarshal since the #GClosure
+ * mechanism takes over responsibility of actual function invocation for the
+ * signal system.
+ */
+typedef GClosureMarshal			 GSignalCMarshaller;
+/**
+ * GSignalEmissionHook:
+ * @ihint: Signal invocation hint, see #GSignalInvocationHint.
+ * @n_param_values: the number of parameters to the function, including
+ *  the instance on which the signal was emitted.
+ * @param_values: the instance on which the signal was emitted, followed by the 
+ *  parameters of the emission.
+ * @data: user data associated with the hook.
+ * 
+ * A simple function pointer to get invoked when the signal is emitted. This 
+ * allows you to tie a hook to the signal type, so that it will trap all 
+ * emissions of that signal, from any object.
+ * 
+ * You may not attach these to signals created with the #G_SIGNAL_NO_HOOKS flag.
+ * 
+ * Returns: whether it wants to stay connected. If it returns %FALSE, the signal 
+ *  hook is disconnected (and destroyed).
+ */
+typedef gboolean (*GSignalEmissionHook) (GSignalInvocationHint *ihint,
+					 guint			n_param_values,
+					 const GValue	       *param_values,
+					 gpointer		data);
+/**
+ * GSignalAccumulator:
+ * @ihint: Signal invocation hint, see #GSignalInvocationHint.
+ * @return_accu: Accumulator to collect callback return values in, this
+ *  is the return value of the current signal emission.
+ * @handler_return: A #GValue holding the return value of the signal handler.
+ * @data: Callback data that was specified when creating the signal.
+ * 
+ * The signal accumulator is a special callback function that can be used
+ * to collect return values of the various callbacks that are called
+ * during a signal emission. The signal accumulator is specified at signal
+ * creation time, if it is left %NULL, no accumulation of callback return
+ * values is performed. The return value of signal emissions is then the
+ * value returned by the last callback.
+ * 
+ * Returns: The accumulator function returns whether the signal emission
+ *  should be aborted. Returning %FALSE means to abort the
+ *  current emission and %TRUE is returned for continuation.
+ */
+typedef gboolean (*GSignalAccumulator)	(GSignalInvocationHint *ihint,
+					 GValue		       *return_accu,
+					 const GValue	       *handler_return,
+					 gpointer               data);
+
+
+/* --- run, match and connect types --- */
+/**
+ * GSignalFlags:
+ * @G_SIGNAL_RUN_FIRST: Invoke the object method handler in the first emission stage.
+ * @G_SIGNAL_RUN_LAST: Invoke the object method handler in the third emission stage.
+ * @G_SIGNAL_RUN_CLEANUP: Invoke the object method handler in the last emission stage.
+ * @G_SIGNAL_NO_RECURSE: Signals being emitted for an object while currently being in
+ *  emission for this very object will not be emitted recursively,
+ *  but instead cause the first emission to be restarted.
+ * @G_SIGNAL_DETAILED: This signal supports "::detail" appendices to the signal name
+ *  upon handler connections and emissions.
+ * @G_SIGNAL_ACTION: Action signals are signals that may freely be emitted on alive
+ *  objects from user code via g_signal_emit() and friends, without
+ *  the need of being embedded into extra code that performs pre or
+ *  post emission adjustments on the object. They can also be thought
+ *  of as object methods which can be called generically by 
+ *  third-party code.
+ * @G_SIGNAL_NO_HOOKS: No emissions hooks are supported for this signal.
+ * 
+ * The signal flags are used to specify a signal's behaviour, the overall
+ * signal description outlines how especially the RUN flags control the
+ * stages of a signal emission.
+ */
+typedef enum
+{
+  G_SIGNAL_RUN_FIRST	= 1 << 0,
+  G_SIGNAL_RUN_LAST	= 1 << 1,
+  G_SIGNAL_RUN_CLEANUP	= 1 << 2,
+  G_SIGNAL_NO_RECURSE	= 1 << 3,
+  G_SIGNAL_DETAILED	= 1 << 4,
+  G_SIGNAL_ACTION	= 1 << 5,
+  G_SIGNAL_NO_HOOKS	= 1 << 6
+} GSignalFlags;
+/**
+ * G_SIGNAL_FLAGS_MASK:
+ * 
+ * A mask for all #GSignalFlags bits.
+ */
+#define G_SIGNAL_FLAGS_MASK  0x7f
+/**
+ * GConnectFlags:
+ * @G_CONNECT_AFTER: whether the handler should be called before or after the 
+ *  default handler of the signal.
+ * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when
+ *  calling the handler.
+ * 
+ * The connection flags are used to specify the behaviour of a signal's 
+ * connection.
+ */
+typedef enum
+{
+  G_CONNECT_AFTER	= 1 << 0,
+  G_CONNECT_SWAPPED	= 1 << 1
+} GConnectFlags;
+/**
+ * GSignalMatchType:
+ * @G_SIGNAL_MATCH_ID: The signal id must be equal.
+ * @G_SIGNAL_MATCH_DETAIL: The signal detail be equal.
+ * @G_SIGNAL_MATCH_CLOSURE: The closure must be the same.
+ * @G_SIGNAL_MATCH_FUNC: The C closure callback must be the same.
+ * @G_SIGNAL_MATCH_DATA: The closure data must be the same.
+ * @G_SIGNAL_MATCH_UNBLOCKED: Only unblocked signals may matched.
+ * 
+ * The match types specify what g_signal_handlers_block_matched(),
+ * g_signal_handlers_unblock_matched() and g_signal_handlers_disconnect_matched()
+ * match signals by.
+ */
+typedef enum
+{
+  G_SIGNAL_MATCH_ID	   = 1 << 0,
+  G_SIGNAL_MATCH_DETAIL	   = 1 << 1,
+  G_SIGNAL_MATCH_CLOSURE   = 1 << 2,
+  G_SIGNAL_MATCH_FUNC	   = 1 << 3,
+  G_SIGNAL_MATCH_DATA	   = 1 << 4,
+  G_SIGNAL_MATCH_UNBLOCKED = 1 << 5
+} GSignalMatchType;
+/**
+ * G_SIGNAL_MATCH_MASK:
+ * 
+ * A mask for all #GSignalMatchType bits.
+ */
+#define G_SIGNAL_MATCH_MASK  0x3f
+/**
+ * G_SIGNAL_TYPE_STATIC_SCOPE:
+ * 
+ * This macro flags signal argument types for which the signal system may 
+ * assume that instances thereof remain persistent across all signal emissions
+ * they are used in. This is only useful for non ref-counted, value-copy types.
+ * 
+ * To flag a signal argument in this way, add 
+ * <literal>| G_SIGNAL_TYPE_STATIC_SCOPE</literal> to the corresponding argument
+ * of g_signal_new().
+ * |[
+ * g_signal_new ("size_request",
+ *   G_TYPE_FROM_CLASS (gobject_class),
+ * 	 G_SIGNAL_RUN_FIRST,
+ * 	 G_STRUCT_OFFSET (GtkWidgetClass, size_request),
+ * 	 NULL, NULL,
+ * 	 _gtk_marshal_VOID__BOXED,
+ * 	 G_TYPE_NONE, 1,
+ * 	 GTK_TYPE_REQUISITION | G_SIGNAL_TYPE_STATIC_SCOPE);
+ * ]|
+ */
+#define	G_SIGNAL_TYPE_STATIC_SCOPE (G_TYPE_FLAG_RESERVED_ID_BIT)
+
+
+/* --- signal information --- */
+/**
+ * GSignalInvocationHint:
+ * @signal_id: The signal id of the signal invoking the callback
+ * @detail: The detail passed on for this emission
+ * @run_type: The stage the signal emission is currently in, this
+ *  field will contain one of %G_SIGNAL_RUN_FIRST,
+ *  %G_SIGNAL_RUN_LAST or %G_SIGNAL_RUN_CLEANUP.
+ * 
+ * The #GSignalInvocationHint structure is used to pass on additional information
+ * to callbacks during a signal emission.
+ */
+struct _GSignalInvocationHint
+{
+  guint		signal_id;
+  GQuark	detail;
+  GSignalFlags	run_type;
+};
+/**
+ * GSignalQuery:
+ * @signal_id: The signal id of the signal being queried, or 0 if the
+ *  signal to be queried was unknown.
+ * @signal_name: The signal name.
+ * @itype: The interface/instance type that this signal can be emitted for.
+ * @signal_flags: The signal flags as passed in to g_signal_new().
+ * @return_type: The return type for user callbacks.
+ * @n_params: The number of parameters that user callbacks take.
+ * @param_types: The individual parameter types for user callbacks, note that the
+ *  effective callback signature is:
+ *  <programlisting>
+ *  @return_type callback (#gpointer     data1,
+ *  [#param_types param_names,]
+ *  #gpointer     data2);
+ *  </programlisting>
+ * 
+ * A structure holding in-depth information for a specific signal. It is
+ * filled in by the g_signal_query() function.
+ */
+struct _GSignalQuery
+{
+  guint		signal_id;
+  const gchar  *signal_name;
+  GType		itype;
+  GSignalFlags	signal_flags;
+  GType		return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
+  guint		n_params;
+  const GType  *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
+};
+
+
+/* --- signals --- */
+guint                 g_signal_newv         (const gchar        *signal_name,
+					     GType               itype,
+					     GSignalFlags        signal_flags,
+					     GClosure           *class_closure,
+					     GSignalAccumulator	 accumulator,
+					     gpointer		 accu_data,
+					     GSignalCMarshaller  c_marshaller,
+					     GType               return_type,
+					     guint               n_params,
+					     GType              *param_types);
+guint                 g_signal_new_valist   (const gchar        *signal_name,
+					     GType               itype,
+					     GSignalFlags        signal_flags,
+					     GClosure           *class_closure,
+					     GSignalAccumulator	 accumulator,
+					     gpointer		 accu_data,
+					     GSignalCMarshaller  c_marshaller,
+					     GType               return_type,
+					     guint               n_params,
+					     va_list             args);
+guint                 g_signal_new          (const gchar        *signal_name,
+					     GType               itype,
+					     GSignalFlags        signal_flags,
+					     guint               class_offset,
+					     GSignalAccumulator	 accumulator,
+					     gpointer		 accu_data,
+					     GSignalCMarshaller  c_marshaller,
+					     GType               return_type,
+					     guint               n_params,
+					     ...);
+guint            g_signal_new_class_handler (const gchar        *signal_name,
+                                             GType               itype,
+                                             GSignalFlags        signal_flags,
+                                             GCallback           class_handler,
+                                             GSignalAccumulator  accumulator,
+                                             gpointer            accu_data,
+                                             GSignalCMarshaller  c_marshaller,
+                                             GType               return_type,
+                                             guint               n_params,
+                                             ...);
+
+void                  g_signal_emitv        (const GValue       *instance_and_params,
+					     guint               signal_id,
+					     GQuark              detail,
+					     GValue             *return_value);
+void                  g_signal_emit_valist  (gpointer            instance,
+					     guint               signal_id,
+					     GQuark              detail,
+					     va_list             var_args);
+void                  g_signal_emit         (gpointer            instance,
+					     guint               signal_id,
+					     GQuark              detail,
+					     ...);
+void                  g_signal_emit_by_name (gpointer            instance,
+					     const gchar        *detailed_signal,
+					     ...);
+guint                 g_signal_lookup       (const gchar        *name,
+					     GType               itype);
+G_CONST_RETURN gchar* g_signal_name         (guint               signal_id);
+void                  g_signal_query        (guint               signal_id,
+					     GSignalQuery       *query);
+guint*                g_signal_list_ids     (GType               itype,
+					     guint              *n_ids);
+gboolean	      g_signal_parse_name   (const gchar	*detailed_signal,
+					     GType		 itype,
+					     guint		*signal_id_p,
+					     GQuark		*detail_p,
+					     gboolean		 force_detail_quark);
+GSignalInvocationHint* g_signal_get_invocation_hint (gpointer    instance);
+
+
+/* --- signal emissions --- */
+void	g_signal_stop_emission		    (gpointer		  instance,
+					     guint		  signal_id,
+					     GQuark		  detail);
+void	g_signal_stop_emission_by_name	    (gpointer		  instance,
+					     const gchar	 *detailed_signal);
+gulong	g_signal_add_emission_hook	    (guint		  signal_id,
+					     GQuark		  detail,
+					     GSignalEmissionHook  hook_func,
+					     gpointer	       	  hook_data,
+					     GDestroyNotify	  data_destroy);
+void	g_signal_remove_emission_hook	    (guint		  signal_id,
+					     gulong		  hook_id);
+
+
+/* --- signal handlers --- */
+gboolean g_signal_has_handler_pending	      (gpointer		  instance,
+					       guint		  signal_id,
+					       GQuark		  detail,
+					       gboolean		  may_be_blocked);
+gulong	 g_signal_connect_closure_by_id	      (gpointer		  instance,
+					       guint		  signal_id,
+					       GQuark		  detail,
+					       GClosure		 *closure,
+					       gboolean		  after);
+gulong	 g_signal_connect_closure	      (gpointer		  instance,
+					       const gchar       *detailed_signal,
+					       GClosure		 *closure,
+					       gboolean		  after);
+gulong	 g_signal_connect_data		      (gpointer		  instance,
+					       const gchar	 *detailed_signal,
+					       GCallback	  c_handler,
+					       gpointer		  data,
+					       GClosureNotify	  destroy_data,
+					       GConnectFlags	  connect_flags);
+void	 g_signal_handler_block		      (gpointer		  instance,
+					       gulong		  handler_id);
+void	 g_signal_handler_unblock	      (gpointer		  instance,
+					       gulong		  handler_id);
+void	 g_signal_handler_disconnect	      (gpointer		  instance,
+					       gulong		  handler_id);
+gboolean g_signal_handler_is_connected	      (gpointer		  instance,
+					       gulong		  handler_id);
+gulong	 g_signal_handler_find		      (gpointer		  instance,
+					       GSignalMatchType	  mask,
+					       guint		  signal_id,
+					       GQuark		  detail,
+					       GClosure		 *closure,
+					       gpointer		  func,
+					       gpointer		  data);
+guint	 g_signal_handlers_block_matched      (gpointer		  instance,
+					       GSignalMatchType	  mask,
+					       guint		  signal_id,
+					       GQuark		  detail,
+					       GClosure		 *closure,
+					       gpointer		  func,
+					       gpointer		  data);
+guint	 g_signal_handlers_unblock_matched    (gpointer		  instance,
+					       GSignalMatchType	  mask,
+					       guint		  signal_id,
+					       GQuark		  detail,
+					       GClosure		 *closure,
+					       gpointer		  func,
+					       gpointer		  data);
+guint	 g_signal_handlers_disconnect_matched (gpointer		  instance,
+					       GSignalMatchType	  mask,
+					       guint		  signal_id,
+					       GQuark		  detail,
+					       GClosure		 *closure,
+					       gpointer		  func,
+					       gpointer		  data);
+
+
+/* --- overriding and chaining --- */
+void    g_signal_override_class_closure       (guint              signal_id,
+                                               GType              instance_type,
+                                               GClosure          *class_closure);
+void    g_signal_override_class_handler       (const gchar       *signal_name,
+                                               GType              instance_type,
+                                               GCallback          class_handler);
+void    g_signal_chain_from_overridden        (const GValue      *instance_and_params,
+                                               GValue            *return_value);
+void   g_signal_chain_from_overridden_handler (gpointer           instance,
+                                               ...);
+
+
+/* --- convenience --- */
+/**
+ * g_signal_connect:
+ * @instance: the instance to connect to.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @c_handler: the #GCallback to connect.
+ * @data: data to pass to @c_handler calls.
+ * 
+ * Connects a #GCallback function to a signal for a particular object.
+ * 
+ * The handler will be called before the default handler of the signal.
+ * 
+ * Returns: the handler id
+ */
+#define g_signal_connect(instance, detailed_signal, c_handler, data) \
+    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
+/**
+ * g_signal_connect_after:
+ * @instance: the instance to connect to.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @c_handler: the #GCallback to connect.
+ * @data: data to pass to @c_handler calls.
+ * 
+ * Connects a #GCallback function to a signal for a particular object.
+ * 
+ * The handler will be called after the default handler of the signal.
+ * 
+ * Returns: the handler id
+ */
+#define g_signal_connect_after(instance, detailed_signal, c_handler, data) \
+    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_AFTER)
+/**
+ * g_signal_connect_swapped:
+ * @instance: the instance to connect to.
+ * @detailed_signal: a string of the form "signal-name::detail".
+ * @c_handler: the #GCallback to connect.
+ * @data: data to pass to @c_handler calls.
+ * 
+ * Connects a #GCallback function to a signal for a particular object.
+ * 
+ * The instance on which the signal is emitted and @data will be swapped when 
+ * calling the handler.
+ * 
+ * Returns: the handler id
+ */
+#define g_signal_connect_swapped(instance, detailed_signal, c_handler, data) \
+    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_SWAPPED)
+/**
+ * g_signal_handlers_disconnect_by_func:
+ * @instance: The instance to remove handlers from.
+ * @func: The C closure callback of the handlers (useless for non-C closures).
+ * @data: The closure data of the handlers' closures.
+ * 
+ * Disconnects all handlers on an instance that match @func and @data.
+ * 
+ * Returns: The number of handlers that matched.
+ */
+#define	g_signal_handlers_disconnect_by_func(instance, func, data)						\
+    g_signal_handlers_disconnect_matched ((instance),								\
+					  (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),	\
+					  0, 0, NULL, (func), (data))
+/**
+ * g_signal_handlers_block_by_func:
+ * @instance: The instance to block handlers from.
+ * @func: The C closure callback of the handlers (useless for non-C closures).
+ * @data: The closure data of the handlers' closures.
+ * 
+ * Blocks all handlers on an instance that match @func and @data.
+ * 
+ * Returns: The number of handlers that matched.
+ */
+#define	g_signal_handlers_block_by_func(instance, func, data)							\
+    g_signal_handlers_block_matched      ((instance),								\
+				          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),	\
+				          0, 0, NULL, (func), (data))
+/**
+ * g_signal_handlers_unblock_by_func:
+ * @instance: The instance to unblock handlers from.
+ * @func: The C closure callback of the handlers (useless for non-C closures).
+ * @data: The closure data of the handlers' closures.
+ * 
+ * Unblocks all handlers on an instance that match @func and @data.
+ * 
+ * Returns: The number of handlers that matched.
+ */
+#define	g_signal_handlers_unblock_by_func(instance, func, data)							\
+    g_signal_handlers_unblock_matched    ((instance),								\
+				          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),	\
+				          0, 0, NULL, (func), (data))
+
+
+gboolean g_signal_accumulator_true_handled (GSignalInvocationHint *ihint,
+					    GValue                *return_accu,
+					    const GValue          *handler_return,
+					    gpointer               dummy);
+
+/*< private >*/
+void	 g_signal_handlers_destroy	      (gpointer		  instance);
+void	 _g_signals_destroy		      (GType		  itype);
+
+G_END_DECLS
+
+#endif /* __G_SIGNAL_H__ */
diff --git a/gobject/gsourceclosure.c b/gobject/gsourceclosure.c
new file mode 100644
index 0000000..508961c
--- /dev/null
+++ b/gobject/gsourceclosure.c
@@ -0,0 +1,209 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include "gsourceclosure.h"
+#include "gboxed.h"
+#include "genums.h"
+#include "gmarshal.h"
+#include "gvalue.h"
+#include "gvaluetypes.h"
+#include "gobjectalias.h"
+
+
+GType
+g_io_channel_get_type (void)
+{
+  static GType our_type = 0;
+  
+  if (our_type == 0)
+    our_type = g_boxed_type_register_static ("GIOChannel",
+					     (GBoxedCopyFunc) g_io_channel_ref,
+					     (GBoxedFreeFunc) g_io_channel_unref);
+
+  return our_type;
+}
+
+GType
+g_io_condition_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0)
+    {
+      static const GFlagsValue values[] = {
+	{ G_IO_IN,   "G_IO_IN",   "in" },
+	{ G_IO_OUT,  "G_IO_OUT",  "out" },
+	{ G_IO_PRI,  "G_IO_PRI",  "pri" },
+	{ G_IO_ERR,  "G_IO_ERR",  "err" },
+	{ G_IO_HUP,  "G_IO_HUP",  "hup" },
+	{ G_IO_NVAL, "G_IO_NVAL", "nval" },
+	{ 0, NULL, NULL }
+      };
+      etype = g_flags_register_static ("GIOCondition", values);
+    }
+  return etype;
+}
+
+/* We need to hand-write this marshaler, since it doesn't have an
+ * instance object.
+ */
+static void
+source_closure_marshal_BOOLEAN__VOID (GClosure     *closure,
+				      GValue       *return_value,
+				      guint         n_param_values,
+				      const GValue *param_values,
+				      gpointer      invocation_hint,
+				      gpointer      marshal_data)
+{
+  GSourceFunc callback;
+  GCClosure *cc = (GCClosure*) closure;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 0);
+
+  callback = (GSourceFunc) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (closure->data);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+static gboolean
+io_watch_closure_callback (GIOChannel   *channel,
+			   GIOCondition  condition,
+			   gpointer      data)
+{
+  GClosure *closure = data;
+
+  GValue params[2] = { { 0, }, { 0, } };
+  GValue result_value = { 0, };
+  gboolean result;
+
+  g_value_init (&result_value, G_TYPE_BOOLEAN);
+  g_value_init (&params[0], G_TYPE_IO_CHANNEL);
+  g_value_set_boxed (&params[0], channel);
+		     
+  g_value_init (&params[1], G_TYPE_IO_CONDITION);
+  g_value_set_flags (&params[1], condition);
+
+  g_closure_invoke (closure, &result_value, 2, params, NULL);
+
+  result = g_value_get_boolean (&result_value);
+  g_value_unset (&result_value);
+  g_value_unset (&params[0]);
+  g_value_unset (&params[1]);
+
+  return result;
+}
+
+static gboolean
+source_closure_callback (gpointer data)
+{
+  GClosure *closure = data;
+  GValue result_value = { 0, };
+  gboolean result;
+
+  g_value_init (&result_value, G_TYPE_BOOLEAN);
+  
+  g_closure_invoke (closure, &result_value, 0, NULL, NULL);
+
+  result = g_value_get_boolean (&result_value);
+  g_value_unset (&result_value);
+
+  return result;
+}
+
+static void
+closure_callback_get (gpointer     cb_data,
+		      GSource     *source,
+		      GSourceFunc *func,
+		      gpointer    *data)
+{
+  GSourceFunc closure_callback = source->source_funcs->closure_callback;
+
+  if (!closure_callback)
+    {
+      if (source->source_funcs == &g_io_watch_funcs)
+	closure_callback = (GSourceFunc)io_watch_closure_callback;
+      else if (source->source_funcs == &g_timeout_funcs ||
+	       source->source_funcs == &g_idle_funcs)
+	closure_callback = source_closure_callback;
+    }
+
+  *func = closure_callback;
+  *data = cb_data;
+}
+
+static GSourceCallbackFuncs closure_callback_funcs = {
+  (void (*) (gpointer)) g_closure_ref,
+  (void (*) (gpointer)) g_closure_unref,
+  closure_callback_get
+};
+
+/**
+ * g_source_set_closure:
+ * @source: the source
+ * @closure: a #GClosure
+ *
+ * Set the callback for a source as a #GClosure.
+ *
+ * If the source is not one of the standard GLib types, the @closure_callback
+ * and @closure_marshal fields of the #GSourceFuncs structure must have been
+ * filled in with pointers to appropriate functions.
+ */
+void
+g_source_set_closure (GSource  *source,
+		      GClosure *closure)
+{
+  g_return_if_fail (source != NULL);
+  g_return_if_fail (closure != NULL);
+
+  if (!source->source_funcs->closure_callback &&
+      source->source_funcs != &g_io_watch_funcs &&
+      source->source_funcs != &g_timeout_funcs &&
+      source->source_funcs != &g_idle_funcs)
+    {
+      g_critical (G_STRLOC "closure can not be set on closure without GSourceFuncs::closure_callback\n");
+      return;
+    }
+
+  g_closure_ref (closure);
+  g_closure_sink (closure);
+  g_source_set_callback_indirect (source, closure, &closure_callback_funcs);
+
+  if (G_CLOSURE_NEEDS_MARSHAL (closure))
+    {
+      GClosureMarshal marshal = (GClosureMarshal)source->source_funcs->closure_marshal;
+      if (!marshal)
+	{
+	  if (source->source_funcs == &g_idle_funcs ||
+	      source->source_funcs == &g_timeout_funcs)
+	    marshal = source_closure_marshal_BOOLEAN__VOID;
+	  else if (source->source_funcs == &g_io_watch_funcs)
+	    marshal = g_cclosure_marshal_BOOLEAN__FLAGS;
+	}
+      if (marshal)
+	g_closure_set_marshal (closure, marshal);
+    }
+}
+
+#define __G_SOURCECLOSURE_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gsourceclosure.h b/gobject/gsourceclosure.h
new file mode 100644
index 0000000..e7f5594
--- /dev/null
+++ b/gobject/gsourceclosure.h
@@ -0,0 +1,51 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_SOURCECLOSURE_H__
+#define __G_SOURCECLOSURE_H__
+
+#include <gobject/gclosure.h>
+
+G_BEGIN_DECLS
+
+void g_source_set_closure (GSource  *source,
+			   GClosure *closure);
+
+GType g_io_channel_get_type   (void);
+GType g_io_condition_get_type (void);
+
+/**
+ * G_TYPE_IO_CHANNEL:
+ * 
+ * The #GType for #GIOChannel.
+ */
+#define G_TYPE_IO_CHANNEL (g_io_channel_get_type ())
+/**
+ * G_TYPE_IO_CONDITION:
+ * 
+ * The #GType for #GIOCondition.
+ */
+#define G_TYPE_IO_CONDITION (g_io_condition_get_type ())
+
+G_END_DECLS
+
+#endif /* __G_SOURCECLOSURE_H__ */
diff --git a/gobject/gtype.c b/gobject/gtype.c
new file mode 100644
index 0000000..f2442ea
--- /dev/null
+++ b/gobject/gtype.c
@@ -0,0 +1,4235 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gtype.h"
+#include "gtypeplugin.h"
+#include "gvaluecollector.h"
+#include "gbsearcharray.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:gtype
+ * @short_description: The GLib Runtime type identification and
+ *     management system
+ * @title:Type Information
+ *
+ * The GType API is the foundation of the GObject system.  It provides the
+ * facilities for registering and managing all fundamental data types,
+ * user-defined object and interface types.  Before using any GType
+ * or GObject functions, g_type_init() must be called to initialize the
+ * type system.
+ *
+ * For type creation and registration purposes, all types fall into one of
+ * two categories: static or dynamic.  Static types are never loaded or
+ * unloaded at run-time as dynamic types may be.  Static types are created
+ * with g_type_register_static() that gets type specific information passed
+ * in via a #GTypeInfo structure.
+ * Dynamic types are created with g_type_register_dynamic() which takes a
+ * #GTypePlugin structure instead. The remaining type information (the
+ * #GTypeInfo structure) is retrieved during runtime through #GTypePlugin
+ * and the g_type_plugin_*() API.
+ * These registration functions are usually called only once from a
+ * function whose only purpose is to return the type identifier for a
+ * specific class.  Once the type (or class or interface) is registered,
+ * it may be instantiated, inherited, or implemented depending on exactly
+ * what sort of type it is.
+ * There is also a third registration function for registering fundamental
+ * types called g_type_register_fundamental() which requires both a #GTypeInfo
+ * structure and a #GTypeFundamentalInfo structure but it is seldom used
+ * since most fundamental types are predefined rather than user-defined.
+ *
+ * A final word about type names.
+ * Such an identifier needs to be at least three characters long. There is no
+ * upper length limit. The first character needs to be a letter (a-z or A-Z)
+ * or an underscore '_'. Subsequent characters can be letters, numbers or
+ * any of '-_+'.
+ */
+
+
+/* NOTE: some functions (some internal variants and exported ones)
+ * invalidate data portions of the TypeNodes. if external functions/callbacks
+ * are called, pointers to memory maintained by TypeNodes have to be looked up
+ * again. this affects most of the struct TypeNode fields, e.g. ->children or
+ * CLASSED_NODE_IFACES_ENTRIES() respectively IFACE_NODE_PREREQUISITES() (but
+ * not ->supers[]), as all those memory portions can get realloc()ed during
+ * callback invocation.
+ *
+ * TODO:
+ * - g_type_from_name() should do an ordered array lookup after fetching the
+ *   the quark, instead of a second hashtable lookup.
+ *
+ * LOCKING:
+ * lock handling issues when calling static functions are indicated by
+ * uppercase letter postfixes, all static functions have to have
+ * one of the below postfixes:
+ * - _I:	[Indifferent about locking]
+ *   function doesn't care about locks at all
+ * - _U:	[Unlocked invocation]
+ *   no read or write lock has to be held across function invocation
+ *   (locks may be acquired and released during invocation though)
+ * - _L:	[Locked invocation]
+ *   a write lock or more than 0 read locks have to be held across
+ *   function invocation
+ * - _W:	[Write-locked invocation]
+ *   a write lock has to be held across function invocation
+ * - _Wm:	[Write-locked invocation, mutatable]
+ *   like _W, but the write lock might be released and reacquired
+ *   during invocation, watch your pointers
+ * - _WmREC:    [Write-locked invocation, mutatable, recursive]
+ *   like _Wm, but also acquires recursive mutex class_init_rec_mutex
+ */
+
+#ifdef LOCK_DEBUG
+#define G_READ_LOCK(rw_lock)    do { g_printerr (G_STRLOC ": readL++\n"); g_static_rw_lock_reader_lock (rw_lock); } while (0)
+#define G_READ_UNLOCK(rw_lock)  do { g_printerr (G_STRLOC ": readL--\n"); g_static_rw_lock_reader_unlock (rw_lock); } while (0)
+#define G_WRITE_LOCK(rw_lock)   do { g_printerr (G_STRLOC ": writeL++\n"); g_static_rw_lock_writer_lock (rw_lock); } while (0)
+#define G_WRITE_UNLOCK(rw_lock) do { g_printerr (G_STRLOC ": writeL--\n"); g_static_rw_lock_writer_unlock (rw_lock); } while (0)
+#else
+#define G_READ_LOCK(rw_lock)    g_static_rw_lock_reader_lock (rw_lock)
+#define G_READ_UNLOCK(rw_lock)  g_static_rw_lock_reader_unlock (rw_lock)
+#define G_WRITE_LOCK(rw_lock)   g_static_rw_lock_writer_lock (rw_lock)
+#define G_WRITE_UNLOCK(rw_lock) g_static_rw_lock_writer_unlock (rw_lock)
+#endif
+#define	INVALID_RECURSION(func, arg, type_name) G_STMT_START{ \
+    static const gchar _action[] = " invalidly modified type ";  \
+    gpointer _arg = (gpointer) (arg); const gchar *_tname = (type_name), *_fname = (func); \
+    if (_arg) \
+      g_error ("%s(%p)%s`%s'", _fname, _arg, _action, _tname); \
+    else \
+      g_error ("%s()%s`%s'", _fname, _action, _tname); \
+}G_STMT_END
+#define	g_return_val_if_uninitialized(condition, init_function, return_value) G_STMT_START{	\
+  if (!(condition))										\
+    {												\
+      g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,						\
+	     "%s: initialization assertion failed, use %s() prior to this function",		\
+	     G_STRLOC, G_STRINGIFY (init_function));						\
+      return (return_value);									\
+    }												\
+}G_STMT_END
+
+#ifdef  G_ENABLE_DEBUG
+#define DEBUG_CODE(debug_type, code_block)  G_STMT_START {    \
+    if (_g_type_debug_flags & G_TYPE_DEBUG_ ## debug_type) \
+      { code_block; }                                     \
+} G_STMT_END
+#else /* !G_ENABLE_DEBUG */
+#define DEBUG_CODE(debug_type, code_block)  /* code_block */
+#endif  /* G_ENABLE_DEBUG */
+
+#define TYPE_FUNDAMENTAL_FLAG_MASK (G_TYPE_FLAG_CLASSED | \
+				    G_TYPE_FLAG_INSTANTIATABLE | \
+				    G_TYPE_FLAG_DERIVABLE | \
+				    G_TYPE_FLAG_DEEP_DERIVABLE)
+#define	TYPE_FLAG_MASK		   (G_TYPE_FLAG_ABSTRACT | G_TYPE_FLAG_VALUE_ABSTRACT)
+#define	SIZEOF_FUNDAMENTAL_INFO	   ((gssize) MAX (MAX (sizeof (GTypeFundamentalInfo), \
+						       sizeof (gpointer)), \
+                                                  sizeof (glong)))
+
+/* The 2*sizeof(size_t) alignment here is borrowed from
+ * GNU libc, so it should be good most everywhere.
+ * It is more conservative than is needed on some 64-bit
+ * platforms, but ia64 does require a 16-byte alignment.
+ * The SIMD extensions for x86 and ppc32 would want a
+ * larger alignment than this, but we don't need to
+ * do better than malloc.
+ */
+#define STRUCT_ALIGNMENT (2 * sizeof (gsize))
+#define ALIGN_STRUCT(offset) \
+      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
+
+
+/* --- typedefs --- */
+typedef struct _TypeNode        TypeNode;
+typedef struct _CommonData      CommonData;
+typedef struct _IFaceData       IFaceData;
+typedef struct _ClassData       ClassData;
+typedef struct _InstanceData    InstanceData;
+typedef union  _TypeData        TypeData;
+typedef struct _IFaceEntry      IFaceEntry;
+typedef struct _IFaceHolder	IFaceHolder;
+
+
+/* --- prototypes --- */
+static inline GTypeFundamentalInfo*	type_node_fundamental_info_I	(TypeNode		*node);
+static	      void			type_add_flags_W		(TypeNode		*node,
+									 GTypeFlags		 flags);
+static	      void			type_data_make_W		(TypeNode		*node,
+									 const GTypeInfo	*info,
+									 const GTypeValueTable	*value_table);
+static inline void			type_data_ref_Wm		(TypeNode		*node);
+static inline void			type_data_unref_WmREC		(TypeNode		*node,
+									 gboolean		 uncached);
+static void				type_data_last_unref_Wm		(GType			 type,
+									 gboolean		 uncached);
+static inline gpointer			type_get_qdata_L		(TypeNode		*node,
+									 GQuark			 quark);
+static inline void			type_set_qdata_W		(TypeNode		*node,
+									 GQuark			 quark,
+									 gpointer		 data);
+static IFaceHolder*			type_iface_peek_holder_L	(TypeNode		*iface,
+									 GType			 instance_type);
+static gboolean                         type_iface_vtable_base_init_Wm  (TypeNode               *iface,
+                                                                         TypeNode               *node);
+static void                             type_iface_vtable_iface_init_Wm (TypeNode               *iface,
+                                                                         TypeNode               *node);
+static gboolean				type_node_is_a_L		(TypeNode		*node,
+									 TypeNode		*iface_node);
+
+
+/* --- enumeration --- */
+
+/* The InitState enumeration is used to track the progress of initializing
+ * both classes and interface vtables. Keeping the state of initialization
+ * is necessary to handle new interfaces being added while we are initializing
+ * the class or other interfaces.
+ */
+typedef enum
+{
+  UNINITIALIZED,
+  BASE_CLASS_INIT,
+  BASE_IFACE_INIT,
+  CLASS_INIT,
+  IFACE_INIT,
+  INITIALIZED
+} InitState;
+
+/* --- structures --- */
+struct _TypeNode
+{
+  GTypePlugin *plugin;
+  guint        n_children : 12;
+  guint        n_supers : 8;
+  guint        _prot_n_ifaces_prerequisites : 9;
+  guint        is_classed : 1;
+  guint        is_instantiatable : 1;
+  guint        mutatable_check_cache : 1;	/* combines some common path checks */
+  GType       *children;
+  TypeData * volatile data;
+  GQuark       qname;
+  GData       *global_gdata;
+  union {
+    IFaceEntry  *iface_entries;		/* for !iface types */
+    GType       *prerequisistes;
+  } _prot;
+  GType        supers[1]; /* flexible array */
+};
+
+#define SIZEOF_BASE_TYPE_NODE()			(G_STRUCT_OFFSET (TypeNode, supers))
+#define MAX_N_SUPERS				(255)
+#define MAX_N_CHILDREN				(4095)
+#define MAX_N_IFACES				(511)
+#define	MAX_N_PREREQUISITES			(MAX_N_IFACES)
+#define NODE_TYPE(node)				(node->supers[0])
+#define NODE_PARENT_TYPE(node)			(node->supers[1])
+#define NODE_FUNDAMENTAL_TYPE(node)		(node->supers[node->n_supers])
+#define NODE_NAME(node)				(g_quark_to_string (node->qname))
+#define	NODE_IS_IFACE(node)			(NODE_FUNDAMENTAL_TYPE (node) == G_TYPE_INTERFACE)
+#define	CLASSED_NODE_N_IFACES(node)		((node)->_prot_n_ifaces_prerequisites)
+#define	CLASSED_NODE_IFACES_ENTRIES(node)	((node)->_prot.iface_entries)
+#define	IFACE_NODE_N_PREREQUISITES(node)	((node)->_prot_n_ifaces_prerequisites)
+#define	IFACE_NODE_PREREQUISITES(node)		((node)->_prot.prerequisistes)
+#define	iface_node_get_holders_L(node)		((IFaceHolder*) type_get_qdata_L ((node), static_quark_iface_holder))
+#define	iface_node_set_holders_W(node, holders)	(type_set_qdata_W ((node), static_quark_iface_holder, (holders)))
+#define	iface_node_get_dependants_array_L(n)	((GType*) type_get_qdata_L ((n), static_quark_dependants_array))
+#define	iface_node_set_dependants_array_W(n,d)	(type_set_qdata_W ((n), static_quark_dependants_array, (d)))
+#define	TYPE_ID_MASK				((GType) ((1 << G_TYPE_FUNDAMENTAL_SHIFT) - 1))
+
+#define NODE_IS_ANCESTOR(ancestor, node)                                                    \
+        ((ancestor)->n_supers <= (node)->n_supers &&                                        \
+	 (node)->supers[(node)->n_supers - (ancestor)->n_supers] == NODE_TYPE (ancestor))
+
+
+struct _IFaceHolder
+{
+  GType           instance_type;
+  GInterfaceInfo *info;
+  GTypePlugin    *plugin;
+  IFaceHolder    *next;
+};
+
+struct _IFaceEntry
+{
+  GType           iface_type;
+  GTypeInterface *vtable;
+  InitState       init_state;
+};
+
+struct _CommonData
+{
+  guint             ref_count;
+  GTypeValueTable  *value_table;
+};
+
+struct _IFaceData
+{
+  CommonData         common;
+  guint16            vtable_size;
+  GBaseInitFunc      vtable_init_base;
+  GBaseFinalizeFunc  vtable_finalize_base;
+  GClassInitFunc     dflt_init;
+  GClassFinalizeFunc dflt_finalize;
+  gconstpointer      dflt_data;
+  gpointer           dflt_vtable;
+};
+
+struct _ClassData
+{
+  CommonData         common;
+  guint16            class_size;
+  guint              init_state : 4;
+  GBaseInitFunc      class_init_base;
+  GBaseFinalizeFunc  class_finalize_base;
+  GClassInitFunc     class_init;
+  GClassFinalizeFunc class_finalize;
+  gconstpointer      class_data;
+  gpointer           class;
+};
+
+struct _InstanceData
+{
+  CommonData         common;
+  guint16            class_size;
+  guint              init_state : 4;
+  GBaseInitFunc      class_init_base;
+  GBaseFinalizeFunc  class_finalize_base;
+  GClassInitFunc     class_init;
+  GClassFinalizeFunc class_finalize;
+  gconstpointer      class_data;
+  gpointer           class;
+  guint16            instance_size;
+  guint16            private_size;
+  guint16            n_preallocs;
+  GInstanceInitFunc  instance_init;
+};
+
+union _TypeData
+{
+  CommonData         common;
+  IFaceData          iface;
+  ClassData          class;
+  InstanceData       instance;
+};
+
+typedef struct {
+  gpointer            cache_data;
+  GTypeClassCacheFunc cache_func;
+} ClassCacheFunc;
+
+typedef struct {
+  gpointer                check_data;
+  GTypeInterfaceCheckFunc check_func;
+} IFaceCheckFunc;
+
+
+/* --- variables --- */
+static GStaticRWLock   type_rw_lock = G_STATIC_RW_LOCK_INIT;
+static GStaticRecMutex class_init_rec_mutex = G_STATIC_REC_MUTEX_INIT;
+static guint           static_n_class_cache_funcs = 0;
+static ClassCacheFunc *static_class_cache_funcs = NULL;
+static guint           static_n_iface_check_funcs = 0;
+static IFaceCheckFunc *static_iface_check_funcs = NULL;
+static GQuark          static_quark_type_flags = 0;
+static GQuark          static_quark_iface_holder = 0;
+static GQuark          static_quark_dependants_array = 0;
+GTypeDebugFlags	       _g_type_debug_flags = 0;
+
+
+/* --- type nodes --- */
+static GHashTable       *static_type_nodes_ht = NULL;
+static TypeNode		*static_fundamental_type_nodes[(G_TYPE_FUNDAMENTAL_MAX >> G_TYPE_FUNDAMENTAL_SHIFT) + 1] = { NULL, };
+static GType		 static_fundamental_next = G_TYPE_RESERVED_USER_FIRST;
+
+static inline TypeNode*
+lookup_type_node_I (register GType utype)
+{
+  if (utype > G_TYPE_FUNDAMENTAL_MAX)
+    return (TypeNode*) (utype & ~TYPE_ID_MASK);
+  else
+    return static_fundamental_type_nodes[utype >> G_TYPE_FUNDAMENTAL_SHIFT];
+}
+
+static TypeNode*
+type_node_any_new_W (TypeNode             *pnode,
+		     GType                 ftype,
+		     const gchar          *name,
+		     GTypePlugin          *plugin,
+		     GTypeFundamentalFlags type_flags)
+{
+  guint n_supers;
+  GType type;
+  TypeNode *node;
+  guint i, node_size = 0;
+  
+  n_supers = pnode ? pnode->n_supers + 1 : 0;
+  
+  if (!pnode)
+    node_size += SIZEOF_FUNDAMENTAL_INFO;	      /* fundamental type info */
+  node_size += SIZEOF_BASE_TYPE_NODE ();	      /* TypeNode structure */
+  node_size += (sizeof (GType) * (1 + n_supers + 1)); /* self + ancestors + (0) for ->supers[] */
+  node = g_malloc0 (node_size);
+  if (!pnode)					      /* offset fundamental types */
+    {
+      node = G_STRUCT_MEMBER_P (node, SIZEOF_FUNDAMENTAL_INFO);
+      static_fundamental_type_nodes[ftype >> G_TYPE_FUNDAMENTAL_SHIFT] = node;
+      type = ftype;
+    }
+  else
+    type = (GType) node;
+  
+  g_assert ((type & TYPE_ID_MASK) == 0);
+  
+  node->n_supers = n_supers;
+  if (!pnode)
+    {
+      node->supers[0] = type;
+      node->supers[1] = 0;
+      
+      node->is_classed = (type_flags & G_TYPE_FLAG_CLASSED) != 0;
+      node->is_instantiatable = (type_flags & G_TYPE_FLAG_INSTANTIATABLE) != 0;
+      
+      if (NODE_IS_IFACE (node))
+	{
+          IFACE_NODE_N_PREREQUISITES (node) = 0;
+	  IFACE_NODE_PREREQUISITES (node) = NULL;
+	}
+      else
+	{
+	  CLASSED_NODE_N_IFACES (node) = 0;
+	  CLASSED_NODE_IFACES_ENTRIES (node) = NULL;
+	}
+    }
+  else
+    {
+      node->supers[0] = type;
+      memcpy (node->supers + 1, pnode->supers, sizeof (GType) * (1 + pnode->n_supers + 1));
+      
+      node->is_classed = pnode->is_classed;
+      node->is_instantiatable = pnode->is_instantiatable;
+      
+      if (NODE_IS_IFACE (node))
+	{
+	  IFACE_NODE_N_PREREQUISITES (node) = 0;
+	  IFACE_NODE_PREREQUISITES (node) = NULL;
+	}
+      else
+	{
+	  guint j;
+	  
+	  CLASSED_NODE_N_IFACES (node) = CLASSED_NODE_N_IFACES (pnode);
+	  CLASSED_NODE_IFACES_ENTRIES (node) = g_memdup (CLASSED_NODE_IFACES_ENTRIES (pnode),
+							 sizeof (CLASSED_NODE_IFACES_ENTRIES (pnode)[0]) *
+							 CLASSED_NODE_N_IFACES (node));
+	  for (j = 0; j < CLASSED_NODE_N_IFACES (node); j++)
+	    {
+	      CLASSED_NODE_IFACES_ENTRIES (node)[j].vtable = NULL;
+	      CLASSED_NODE_IFACES_ENTRIES (node)[j].init_state = UNINITIALIZED;
+	    }
+	}
+      
+      i = pnode->n_children++;
+      pnode->children = g_renew (GType, pnode->children, pnode->n_children);
+      pnode->children[i] = type;
+    }
+  
+  node->plugin = plugin;
+  node->n_children = 0;
+  node->children = NULL;
+  node->data = NULL;
+  node->qname = g_quark_from_string (name);
+  node->global_gdata = NULL;
+  
+  g_hash_table_insert (static_type_nodes_ht,
+		       GUINT_TO_POINTER (node->qname),
+		       (gpointer) type);
+  return node;
+}
+
+static inline GTypeFundamentalInfo*
+type_node_fundamental_info_I (TypeNode *node)
+{
+  GType ftype = NODE_FUNDAMENTAL_TYPE (node);
+  
+  if (ftype != NODE_TYPE (node))
+    node = lookup_type_node_I (ftype);
+  
+  return node ? G_STRUCT_MEMBER_P (node, -SIZEOF_FUNDAMENTAL_INFO) : NULL;
+}
+
+static TypeNode*
+type_node_fundamental_new_W (GType                 ftype,
+			     const gchar          *name,
+			     GTypeFundamentalFlags type_flags)
+{
+  GTypeFundamentalInfo *finfo;
+  TypeNode *node;
+  
+  g_assert ((ftype & TYPE_ID_MASK) == 0);
+  g_assert (ftype <= G_TYPE_FUNDAMENTAL_MAX);
+  
+  if (ftype >> G_TYPE_FUNDAMENTAL_SHIFT == static_fundamental_next)
+    static_fundamental_next++;
+  
+  type_flags &= TYPE_FUNDAMENTAL_FLAG_MASK;
+  
+  node = type_node_any_new_W (NULL, ftype, name, NULL, type_flags);
+  
+  finfo = type_node_fundamental_info_I (node);
+  finfo->type_flags = type_flags;
+  
+  return node;
+}
+
+static TypeNode*
+type_node_new_W (TypeNode    *pnode,
+		 const gchar *name,
+		 GTypePlugin *plugin)
+     
+{
+  g_assert (pnode);
+  g_assert (pnode->n_supers < MAX_N_SUPERS);
+  g_assert (pnode->n_children < MAX_N_CHILDREN);
+  
+  return type_node_any_new_W (pnode, NODE_FUNDAMENTAL_TYPE (pnode), name, plugin, 0);
+}
+
+static inline IFaceEntry*
+type_lookup_iface_entry_L (TypeNode *node,
+			   TypeNode *iface_node)
+{
+  if (NODE_IS_IFACE (iface_node) && CLASSED_NODE_N_IFACES (node))
+    {
+      IFaceEntry *ifaces = CLASSED_NODE_IFACES_ENTRIES (node) - 1;
+      guint n_ifaces = CLASSED_NODE_N_IFACES (node);
+      GType iface_type = NODE_TYPE (iface_node);
+      
+      do
+	{
+	  guint i;
+	  IFaceEntry *check;
+	  
+	  i = (n_ifaces + 1) >> 1;
+	  check = ifaces + i;
+	  if (iface_type == check->iface_type)
+	    return check;
+	  else if (iface_type > check->iface_type)
+	    {
+	      n_ifaces -= i;
+	      ifaces = check;
+	    }
+	  else /* if (iface_type < check->iface_type) */
+	    n_ifaces = i - 1;
+	}
+      while (n_ifaces);
+    }
+  
+  return NULL;
+}
+
+static inline gboolean
+type_lookup_prerequisite_L (TypeNode *iface,
+			    GType     prerequisite_type)
+{
+  if (NODE_IS_IFACE (iface) && IFACE_NODE_N_PREREQUISITES (iface))
+    {
+      GType *prerequisites = IFACE_NODE_PREREQUISITES (iface) - 1;
+      guint n_prerequisites = IFACE_NODE_N_PREREQUISITES (iface);
+      
+      do
+	{
+	  guint i;
+	  GType *check;
+	  
+	  i = (n_prerequisites + 1) >> 1;
+	  check = prerequisites + i;
+	  if (prerequisite_type == *check)
+	    return TRUE;
+	  else if (prerequisite_type > *check)
+	    {
+	      n_prerequisites -= i;
+	      prerequisites = check;
+	    }
+	  else /* if (prerequisite_type < *check) */
+	    n_prerequisites = i - 1;
+	}
+      while (n_prerequisites);
+    }
+  return FALSE;
+}
+
+static gchar*
+type_descriptive_name_I (GType type)
+{
+  if (type)
+    {
+      TypeNode *node = lookup_type_node_I (type);
+      
+      return node ? NODE_NAME (node) : "<unknown>";
+    }
+  else
+    return "<invalid>";
+}
+
+
+/* --- type consistency checks --- */
+static gboolean
+check_plugin_U (GTypePlugin *plugin,
+		gboolean     need_complete_type_info,
+		gboolean     need_complete_interface_info,
+		const gchar *type_name)
+{
+  /* G_IS_TYPE_PLUGIN() and G_TYPE_PLUGIN_GET_CLASS() are external calls: _U 
+   */
+  if (!plugin)
+    {
+      g_warning ("plugin handle for type `%s' is NULL",
+		 type_name);
+      return FALSE;
+    }
+  if (!G_IS_TYPE_PLUGIN (plugin))
+    {
+      g_warning ("plugin pointer (%p) for type `%s' is invalid",
+		 plugin, type_name);
+      return FALSE;
+    }
+  if (need_complete_type_info && !G_TYPE_PLUGIN_GET_CLASS (plugin)->complete_type_info)
+    {
+      g_warning ("plugin for type `%s' has no complete_type_info() implementation",
+		 type_name);
+      return FALSE;
+    }
+  if (need_complete_interface_info && !G_TYPE_PLUGIN_GET_CLASS (plugin)->complete_interface_info)
+    {
+      g_warning ("plugin for type `%s' has no complete_interface_info() implementation",
+		 type_name);
+      return FALSE;
+    }
+  return TRUE;
+}
+
+static gboolean
+check_type_name_I (const gchar *type_name)
+{
+  static const gchar extra_chars[] = "-_+";
+  const gchar *p = type_name;
+  gboolean name_valid;
+  
+  if (!type_name[0] || !type_name[1] || !type_name[2])
+    {
+      g_warning ("type name `%s' is too short", type_name);
+      return FALSE;
+    }
+  /* check the first letter */
+  name_valid = (p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z') || p[0] == '_';
+  for (p = type_name + 1; *p; p++)
+    name_valid &= ((p[0] >= 'A' && p[0] <= 'Z') ||
+		   (p[0] >= 'a' && p[0] <= 'z') ||
+		   (p[0] >= '0' && p[0] <= '9') ||
+		   strchr (extra_chars, p[0]));
+  if (!name_valid)
+    {
+      g_warning ("type name `%s' contains invalid characters", type_name);
+      return FALSE;
+    }
+  if (g_type_from_name (type_name))
+    {
+      g_warning ("cannot register existing type `%s'", type_name);
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static gboolean
+check_derivation_I (GType        parent_type,
+		    const gchar *type_name)
+{
+  TypeNode *pnode;
+  GTypeFundamentalInfo* finfo;
+  
+  pnode = lookup_type_node_I (parent_type);
+  if (!pnode)
+    {
+      g_warning ("cannot derive type `%s' from invalid parent type `%s'",
+		 type_name,
+		 type_descriptive_name_I (parent_type));
+      return FALSE;
+    }
+  finfo = type_node_fundamental_info_I (pnode);
+  /* ensure flat derivability */
+  if (!(finfo->type_flags & G_TYPE_FLAG_DERIVABLE))
+    {
+      g_warning ("cannot derive `%s' from non-derivable parent type `%s'",
+		 type_name,
+		 NODE_NAME (pnode));
+      return FALSE;
+    }
+  /* ensure deep derivability */
+  if (parent_type != NODE_FUNDAMENTAL_TYPE (pnode) &&
+      !(finfo->type_flags & G_TYPE_FLAG_DEEP_DERIVABLE))
+    {
+      g_warning ("cannot derive `%s' from non-fundamental parent type `%s'",
+		 type_name,
+		 NODE_NAME (pnode));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+static gboolean
+check_collect_format_I (const gchar *collect_format)
+{
+  const gchar *p = collect_format;
+  gchar valid_format[] = { G_VALUE_COLLECT_INT, G_VALUE_COLLECT_LONG,
+			   G_VALUE_COLLECT_INT64, G_VALUE_COLLECT_DOUBLE,
+			   G_VALUE_COLLECT_POINTER, 0 };
+  
+  while (*p)
+    if (!strchr (valid_format, *p++))
+      return FALSE;
+  return p - collect_format <= G_VALUE_COLLECT_FORMAT_MAX_LENGTH;
+}
+
+static gboolean
+check_value_table_I (const gchar           *type_name,
+		     const GTypeValueTable *value_table)
+{
+  if (!value_table)
+    return FALSE;
+  else if (value_table->value_init == NULL)
+    {
+      if (value_table->value_free || value_table->value_copy ||
+	  value_table->value_peek_pointer ||
+	  value_table->collect_format || value_table->collect_value ||
+	  value_table->lcopy_format || value_table->lcopy_value)
+	g_warning ("cannot handle uninitializable values of type `%s'",
+		   type_name);
+      return FALSE;
+    }
+  else /* value_table->value_init != NULL */
+    {
+      if (!value_table->value_free)
+	{
+	  /* +++ optional +++
+	   * g_warning ("missing `value_free()' for type `%s'", type_name);
+	   * return FALSE;
+	   */
+	}
+      if (!value_table->value_copy)
+	{
+	  g_warning ("missing `value_copy()' for type `%s'", type_name);
+	  return FALSE;
+	}
+      if ((value_table->collect_format || value_table->collect_value) &&
+	  (!value_table->collect_format || !value_table->collect_value))
+	{
+	  g_warning ("one of `collect_format' and `collect_value()' is unspecified for type `%s'",
+		     type_name);
+	  return FALSE;
+	}
+      if (value_table->collect_format && !check_collect_format_I (value_table->collect_format))
+	{
+	  g_warning ("the `%s' specification for type `%s' is too long or invalid",
+		     "collect_format",
+		     type_name);
+	  return FALSE;
+	}
+      if ((value_table->lcopy_format || value_table->lcopy_value) &&
+	  (!value_table->lcopy_format || !value_table->lcopy_value))
+	{
+	  g_warning ("one of `lcopy_format' and `lcopy_value()' is unspecified for type `%s'",
+		     type_name);
+	  return FALSE;
+	}
+      if (value_table->lcopy_format && !check_collect_format_I (value_table->lcopy_format))
+	{
+	  g_warning ("the `%s' specification for type `%s' is too long or invalid",
+		     "lcopy_format",
+		     type_name);
+	  return FALSE;
+	}
+    }
+  return TRUE;
+}
+
+static gboolean
+check_type_info_I (TypeNode        *pnode,
+		   GType            ftype,
+		   const gchar     *type_name,
+		   const GTypeInfo *info)
+{
+  GTypeFundamentalInfo *finfo = type_node_fundamental_info_I (lookup_type_node_I (ftype));
+  gboolean is_interface = ftype == G_TYPE_INTERFACE;
+  
+  g_assert (ftype <= G_TYPE_FUNDAMENTAL_MAX && !(ftype & TYPE_ID_MASK));
+  
+  /* check instance members */
+  if (!(finfo->type_flags & G_TYPE_FLAG_INSTANTIATABLE) &&
+      (info->instance_size || info->n_preallocs || info->instance_init))
+    {
+      if (pnode)
+	g_warning ("cannot instantiate `%s', derived from non-instantiatable parent type `%s'",
+		   type_name,
+		   NODE_NAME (pnode));
+      else
+	g_warning ("cannot instantiate `%s' as non-instantiatable fundamental",
+		   type_name);
+      return FALSE;
+    }
+  /* check class & interface members */
+  if (!((finfo->type_flags & G_TYPE_FLAG_CLASSED) || is_interface) &&
+      (info->class_init || info->class_finalize || info->class_data ||
+       info->class_size || info->base_init || info->base_finalize))
+    {
+      if (pnode)
+	g_warning ("cannot create class for `%s', derived from non-classed parent type `%s'",
+		   type_name,
+                   NODE_NAME (pnode));
+      else
+	g_warning ("cannot create class for `%s' as non-classed fundamental",
+		   type_name);
+      return FALSE;
+    }
+  /* check interface size */
+  if (is_interface && info->class_size < sizeof (GTypeInterface))
+    {
+      g_warning ("specified interface size for type `%s' is smaller than `GTypeInterface' size",
+		 type_name);
+      return FALSE;
+    }
+  /* check class size */
+  if (finfo->type_flags & G_TYPE_FLAG_CLASSED)
+    {
+      if (info->class_size < sizeof (GTypeClass))
+	{
+	  g_warning ("specified class size for type `%s' is smaller than `GTypeClass' size",
+		     type_name);
+	  return FALSE;
+	}
+      if (pnode && info->class_size < pnode->data->class.class_size)
+	{
+	  g_warning ("specified class size for type `%s' is smaller "
+		     "than the parent type's `%s' class size",
+		     type_name,
+		     NODE_NAME (pnode));
+	  return FALSE;
+	}
+    }
+  /* check instance size */
+  if (finfo->type_flags & G_TYPE_FLAG_INSTANTIATABLE)
+    {
+      if (info->instance_size < sizeof (GTypeInstance))
+	{
+	  g_warning ("specified instance size for type `%s' is smaller than `GTypeInstance' size",
+		     type_name);
+	  return FALSE;
+	}
+      if (pnode && info->instance_size < pnode->data->instance.instance_size)
+	{
+	  g_warning ("specified instance size for type `%s' is smaller "
+		     "than the parent type's `%s' instance size",
+		     type_name,
+		     NODE_NAME (pnode));
+	  return FALSE;
+	}
+    }
+  
+  return TRUE;
+}
+
+static TypeNode*
+find_conforming_child_type_L (TypeNode *pnode,
+			      TypeNode *iface)
+{
+  TypeNode *node = NULL;
+  guint i;
+  
+  if (type_lookup_iface_entry_L (pnode, iface))
+    return pnode;
+  
+  for (i = 0; i < pnode->n_children && !node; i++)
+    node = find_conforming_child_type_L (lookup_type_node_I (pnode->children[i]), iface);
+  
+  return node;
+}
+
+static gboolean
+check_add_interface_L (GType instance_type,
+		       GType iface_type)
+{
+  TypeNode *node = lookup_type_node_I (instance_type);
+  TypeNode *iface = lookup_type_node_I (iface_type);
+  IFaceEntry *entry;
+  TypeNode *tnode;
+  GType *prerequisites;
+  guint i;
+
+  
+  if (!node || !node->is_instantiatable)
+    {
+      g_warning ("cannot add interfaces to invalid (non-instantiatable) type `%s'",
+		 type_descriptive_name_I (instance_type));
+      return FALSE;
+    }
+  if (!iface || !NODE_IS_IFACE (iface))
+    {
+      g_warning ("cannot add invalid (non-interface) type `%s' to type `%s'",
+		 type_descriptive_name_I (iface_type),
+		 NODE_NAME (node));
+      return FALSE;
+    }
+  tnode = lookup_type_node_I (NODE_PARENT_TYPE (iface));
+  if (NODE_PARENT_TYPE (tnode) && !type_lookup_iface_entry_L (node, tnode))
+    {
+      /* 2001/7/31:timj: erk, i guess this warning is junk as interface derivation is flat */
+      g_warning ("cannot add sub-interface `%s' to type `%s' which does not conform to super-interface `%s'",
+		 NODE_NAME (iface),
+		 NODE_NAME (node),
+		 NODE_NAME (tnode));
+      return FALSE;
+    }
+  /* allow overriding of interface type introduced for parent type */
+  entry = type_lookup_iface_entry_L (node, iface);
+  if (entry && entry->vtable == NULL && !type_iface_peek_holder_L (iface, NODE_TYPE (node)))
+    {
+      /* ok, we do conform to this interface already, but the interface vtable was not
+       * yet intialized, and we just conform to the interface because it got added to
+       * one of our parents. so we allow overriding of holder info here.
+       */
+      return TRUE;
+    }
+  /* check whether one of our children already conforms (or whether the interface
+   * got added to this node already)
+   */
+  tnode = find_conforming_child_type_L (node, iface);  /* tnode is_a node */
+  if (tnode)
+    {
+      g_warning ("cannot add interface type `%s' to type `%s', since type `%s' already conforms to interface",
+		 NODE_NAME (iface),
+		 NODE_NAME (node),
+		 NODE_NAME (tnode));
+      return FALSE;
+    }
+  prerequisites = IFACE_NODE_PREREQUISITES (iface);
+  for (i = 0; i < IFACE_NODE_N_PREREQUISITES (iface); i++)
+    {
+      tnode = lookup_type_node_I (prerequisites[i]);
+      if (!type_node_is_a_L (node, tnode))
+	{
+	  g_warning ("cannot add interface type `%s' to type `%s' which does not conform to prerequisite `%s'",
+		     NODE_NAME (iface),
+		     NODE_NAME (node),
+		     NODE_NAME (tnode));
+	  return FALSE;
+	}
+    }
+  return TRUE;
+}
+
+static gboolean
+check_interface_info_I (TypeNode             *iface,
+			GType                 instance_type,
+			const GInterfaceInfo *info)
+{
+  if ((info->interface_finalize || info->interface_data) && !info->interface_init)
+    {
+      g_warning ("interface type `%s' for type `%s' comes without initializer",
+		 NODE_NAME (iface),
+		 type_descriptive_name_I (instance_type));
+      return FALSE;
+    }
+  
+  return TRUE;
+}
+
+/* --- type info (type node data) --- */
+static void
+type_data_make_W (TypeNode              *node,
+		  const GTypeInfo       *info,
+		  const GTypeValueTable *value_table)
+{
+  TypeData *data;
+  GTypeValueTable *vtable = NULL;
+  guint vtable_size = 0;
+  
+  g_assert (node->data == NULL && info != NULL);
+  
+  if (!value_table)
+    {
+      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
+      
+      if (pnode)
+	vtable = pnode->data->common.value_table;
+      else
+	{
+	  static const GTypeValueTable zero_vtable = { NULL, };
+	  
+	  value_table = &zero_vtable;
+	}
+    }
+  if (value_table)
+    {
+      /* need to setup vtable_size since we have to allocate it with data in one chunk */
+      vtable_size = sizeof (GTypeValueTable);
+      if (value_table->collect_format)
+	vtable_size += strlen (value_table->collect_format);
+      if (value_table->lcopy_format)
+	vtable_size += strlen (value_table->lcopy_format);
+      vtable_size += 2;
+    }
+   
+  if (node->is_instantiatable) /* carefull, is_instantiatable is also is_classed */
+    {
+      data = g_malloc0 (sizeof (InstanceData) + vtable_size);
+      if (vtable_size)
+	vtable = G_STRUCT_MEMBER_P (data, sizeof (InstanceData));
+      data->instance.class_size = info->class_size;
+      data->instance.class_init_base = info->base_init;
+      data->instance.class_finalize_base = info->base_finalize;
+      data->instance.class_init = info->class_init;
+      data->instance.class_finalize = info->class_finalize;
+      data->instance.class_data = info->class_data;
+      data->instance.class = NULL;
+      data->instance.init_state = UNINITIALIZED;
+      data->instance.instance_size = info->instance_size;
+      /* We'll set the final value for data->instance.private size
+       * after the parent class has been initialized
+       */
+      data->instance.private_size = 0;
+#ifdef	DISABLE_MEM_POOLS
+      data->instance.n_preallocs = 0;
+#else	/* !DISABLE_MEM_POOLS */
+      data->instance.n_preallocs = MIN (info->n_preallocs, 1024);
+#endif	/* !DISABLE_MEM_POOLS */
+      data->instance.instance_init = info->instance_init;
+    }
+  else if (node->is_classed) /* only classed */
+    {
+      data = g_malloc0 (sizeof (ClassData) + vtable_size);
+      if (vtable_size)
+	vtable = G_STRUCT_MEMBER_P (data, sizeof (ClassData));
+      data->class.class_size = info->class_size;
+      data->class.class_init_base = info->base_init;
+      data->class.class_finalize_base = info->base_finalize;
+      data->class.class_init = info->class_init;
+      data->class.class_finalize = info->class_finalize;
+      data->class.class_data = info->class_data;
+      data->class.class = NULL;
+      data->class.init_state = UNINITIALIZED;
+    }
+  else if (NODE_IS_IFACE (node))
+    {
+      data = g_malloc0 (sizeof (IFaceData) + vtable_size);
+      if (vtable_size)
+	vtable = G_STRUCT_MEMBER_P (data, sizeof (IFaceData));
+      data->iface.vtable_size = info->class_size;
+      data->iface.vtable_init_base = info->base_init;
+      data->iface.vtable_finalize_base = info->base_finalize;
+      data->iface.dflt_init = info->class_init;
+      data->iface.dflt_finalize = info->class_finalize;
+      data->iface.dflt_data = info->class_data;
+      data->iface.dflt_vtable = NULL;
+    }
+  else
+    {
+      data = g_malloc0 (sizeof (CommonData) + vtable_size);
+      if (vtable_size)
+	vtable = G_STRUCT_MEMBER_P (data, sizeof (CommonData));
+    }
+  
+  node->data = data;
+  node->data->common.ref_count = 1;
+  
+  if (vtable_size)
+    {
+      gchar *p;
+      
+      /* we allocate the vtable and its strings together with the type data, so
+       * children can take over their parent's vtable pointer, and we don't
+       * need to worry freeing it or not when the child data is destroyed
+       */
+      *vtable = *value_table;
+      p = G_STRUCT_MEMBER_P (vtable, sizeof (*vtable));
+      p[0] = 0;
+      vtable->collect_format = p;
+      if (value_table->collect_format)
+	{
+	  strcat (p, value_table->collect_format);
+	  p += strlen (value_table->collect_format);
+	}
+      p++;
+      p[0] = 0;
+      vtable->lcopy_format = p;
+      if (value_table->lcopy_format)
+	strcat  (p, value_table->lcopy_format);
+    }
+  node->data->common.value_table = vtable;
+  node->mutatable_check_cache = (node->data->common.value_table->value_init != NULL &&
+				 !((G_TYPE_FLAG_VALUE_ABSTRACT | G_TYPE_FLAG_ABSTRACT) &
+				   GPOINTER_TO_UINT (type_get_qdata_L (node, static_quark_type_flags))));
+  
+  g_assert (node->data->common.value_table != NULL); /* paranoid */
+}
+
+static inline void
+type_data_ref_Wm (TypeNode *node)
+{
+  if (!node->data)
+    {
+      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
+      GTypeInfo tmp_info;
+      GTypeValueTable tmp_value_table;
+      
+      g_assert (node->plugin != NULL);
+      
+      if (pnode)
+	{
+	  type_data_ref_Wm (pnode);
+	  if (node->data)
+	    INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
+	}
+      
+      memset (&tmp_info, 0, sizeof (tmp_info));
+      memset (&tmp_value_table, 0, sizeof (tmp_value_table));
+      
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_type_plugin_use (node->plugin);
+      g_type_plugin_complete_type_info (node->plugin, NODE_TYPE (node), &tmp_info, &tmp_value_table);
+      G_WRITE_LOCK (&type_rw_lock);
+      if (node->data)
+	INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
+      
+      check_type_info_I (pnode, NODE_FUNDAMENTAL_TYPE (node), NODE_NAME (node), &tmp_info);
+      type_data_make_W (node, &tmp_info,
+			check_value_table_I (NODE_NAME (node),
+					     &tmp_value_table) ? &tmp_value_table : NULL);
+    }
+  else
+    {
+      g_assert (node->data->common.ref_count > 0);
+      
+      node->data->common.ref_count += 1;
+    }
+}
+
+static inline void
+type_data_unref_WmREC (TypeNode *node,
+                       gboolean  uncached)
+{
+  g_assert (node->data && node->data->common.ref_count);
+  if (node->data->common.ref_count > 1)
+    node->data->common.ref_count -= 1;
+  else
+    {
+      GType node_type = NODE_TYPE (node);
+      if (!node->plugin)
+	{
+	  g_warning ("static type `%s' unreferenced too often",
+		     NODE_NAME (node));
+	  return;
+	}
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_static_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
+      G_WRITE_LOCK (&type_rw_lock);
+      type_data_last_unref_Wm (node_type, uncached);
+      g_static_rec_mutex_unlock (&class_init_rec_mutex);
+    }
+}
+
+static void
+type_node_add_iface_entry_W (TypeNode   *node,
+			     GType       iface_type,
+                             IFaceEntry *parent_entry)
+{
+  IFaceEntry *entries;
+  guint i;
+  
+  g_assert (node->is_instantiatable && CLASSED_NODE_N_IFACES (node) < MAX_N_IFACES);
+  
+  entries = CLASSED_NODE_IFACES_ENTRIES (node);
+  for (i = 0; i < CLASSED_NODE_N_IFACES (node); i++)
+    if (entries[i].iface_type == iface_type)
+      {
+	/* this can happen in two cases:
+         * - our parent type already conformed to iface_type and node
+         *   got its own holder info. here, our children already have
+         *   entries and NULL vtables, since this will only work for
+         *   uninitialized classes.
+	 * - an interface type is added to an ancestor after it was
+         *   added to a child type.
+	 */
+        if (!parent_entry)
+          g_assert (entries[i].vtable == NULL && entries[i].init_state == UNINITIALIZED);
+        else
+          {
+            /* sick, interface is added to ancestor *after* child type;
+             * nothing todo, the entry and our children were already setup correctly
+             */
+          }
+        return;
+      }
+    else if (entries[i].iface_type > iface_type)
+      break;
+  CLASSED_NODE_N_IFACES (node) += 1;
+  CLASSED_NODE_IFACES_ENTRIES (node) = g_renew (IFaceEntry,
+						CLASSED_NODE_IFACES_ENTRIES (node),
+						CLASSED_NODE_N_IFACES (node));
+  entries = CLASSED_NODE_IFACES_ENTRIES (node);
+  g_memmove (entries + i + 1, entries + i, sizeof (entries[0]) * (CLASSED_NODE_N_IFACES (node) - i - 1));
+  entries[i].iface_type = iface_type;
+  entries[i].vtable = NULL;
+  entries[i].init_state = UNINITIALIZED;
+
+  if (parent_entry)
+    {
+      if (node->data && node->data->class.init_state >= BASE_IFACE_INIT)
+        {
+          entries[i].init_state = INITIALIZED;
+          entries[i].vtable = parent_entry->vtable;
+        }
+      for (i = 0; i < node->n_children; i++)
+        type_node_add_iface_entry_W (lookup_type_node_I (node->children[i]), iface_type, &entries[i]);
+    }
+}
+
+static void
+type_add_interface_Wm (TypeNode             *node,
+                       TypeNode             *iface,
+                       const GInterfaceInfo *info,
+                       GTypePlugin          *plugin)
+{
+  IFaceHolder *iholder = g_new0 (IFaceHolder, 1);
+  IFaceEntry *entry;
+  guint i;
+  
+  g_assert (node->is_instantiatable && NODE_IS_IFACE (iface) && ((info && !plugin) || (!info && plugin)));
+  
+  iholder->next = iface_node_get_holders_L (iface);
+  iface_node_set_holders_W (iface, iholder);
+  iholder->instance_type = NODE_TYPE (node);
+  iholder->info = info ? g_memdup (info, sizeof (*info)) : NULL;
+  iholder->plugin = plugin;
+
+  /* create an iface entry for this type */
+  type_node_add_iface_entry_W (node, NODE_TYPE (iface), NULL);
+  
+  /* if the class is already (partly) initialized, we may need to base
+   * initalize and/or initialize the new interface.
+   */
+  if (node->data)
+    {
+      InitState class_state = node->data->class.init_state;
+      
+      if (class_state >= BASE_IFACE_INIT)
+        type_iface_vtable_base_init_Wm (iface, node);
+      
+      if (class_state >= IFACE_INIT)
+        type_iface_vtable_iface_init_Wm (iface, node);
+    }
+  
+  /* create iface entries for children of this type */
+  entry = type_lookup_iface_entry_L (node, iface);
+  for (i = 0; i < node->n_children; i++)
+    type_node_add_iface_entry_W (lookup_type_node_I (node->children[i]), NODE_TYPE (iface), entry);
+}
+
+static void
+type_iface_add_prerequisite_W (TypeNode *iface,
+			       TypeNode *prerequisite_node)
+{
+  GType prerequisite_type = NODE_TYPE (prerequisite_node);
+  GType *prerequisites, *dependants;
+  guint n_dependants, i;
+  
+  g_assert (NODE_IS_IFACE (iface) &&
+	    IFACE_NODE_N_PREREQUISITES (iface) < MAX_N_PREREQUISITES &&
+	    (prerequisite_node->is_instantiatable || NODE_IS_IFACE (prerequisite_node)));
+  
+  prerequisites = IFACE_NODE_PREREQUISITES (iface);
+  for (i = 0; i < IFACE_NODE_N_PREREQUISITES (iface); i++)
+    if (prerequisites[i] == prerequisite_type)
+      return;			/* we already have that prerequisiste */
+    else if (prerequisites[i] > prerequisite_type)
+      break;
+  IFACE_NODE_N_PREREQUISITES (iface) += 1;
+  IFACE_NODE_PREREQUISITES (iface) = g_renew (GType,
+					      IFACE_NODE_PREREQUISITES (iface),
+					      IFACE_NODE_N_PREREQUISITES (iface));
+  prerequisites = IFACE_NODE_PREREQUISITES (iface);
+  g_memmove (prerequisites + i + 1, prerequisites + i,
+	     sizeof (prerequisites[0]) * (IFACE_NODE_N_PREREQUISITES (iface) - i - 1));
+  prerequisites[i] = prerequisite_type;
+  
+  /* we want to get notified when prerequisites get added to prerequisite_node */
+  if (NODE_IS_IFACE (prerequisite_node))
+    {
+      dependants = iface_node_get_dependants_array_L (prerequisite_node);
+      n_dependants = dependants ? dependants[0] : 0;
+      n_dependants += 1;
+      dependants = g_renew (GType, dependants, n_dependants + 1);
+      dependants[n_dependants] = NODE_TYPE (iface);
+      dependants[0] = n_dependants;
+      iface_node_set_dependants_array_W (prerequisite_node, dependants);
+    }
+  
+  /* we need to notify all dependants */
+  dependants = iface_node_get_dependants_array_L (iface);
+  n_dependants = dependants ? dependants[0] : 0;
+  for (i = 1; i <= n_dependants; i++)
+    type_iface_add_prerequisite_W (lookup_type_node_I (dependants[i]), prerequisite_node);
+}
+
+/**
+ * g_type_interface_add_prerequisite:
+ * @interface_type: #GType value of an interface type.
+ * @prerequisite_type: #GType value of an interface or instantiatable type.
+ *
+ * Adds @prerequisite_type to the list of prerequisites of @interface_type.
+ * This means that any type implementing @interface_type must also implement
+ * @prerequisite_type. Prerequisites can be thought of as an alternative to
+ * interface derivation (which GType doesn't support). An interface can have
+ * at most one instantiatable prerequisite type.
+ */
+void
+g_type_interface_add_prerequisite (GType interface_type,
+				   GType prerequisite_type)
+{
+  TypeNode *iface, *prerequisite_node;
+  IFaceHolder *holders;
+  
+  g_return_if_fail (G_TYPE_IS_INTERFACE (interface_type));	/* G_TYPE_IS_INTERFACE() is an external call: _U */
+  g_return_if_fail (!g_type_is_a (interface_type, prerequisite_type));
+  g_return_if_fail (!g_type_is_a (prerequisite_type, interface_type));
+  
+  iface = lookup_type_node_I (interface_type);
+  prerequisite_node = lookup_type_node_I (prerequisite_type);
+  if (!iface || !prerequisite_node || !NODE_IS_IFACE (iface))
+    {
+      g_warning ("interface type `%s' or prerequisite type `%s' invalid",
+		 type_descriptive_name_I (interface_type),
+		 type_descriptive_name_I (prerequisite_type));
+      return;
+    }
+  G_WRITE_LOCK (&type_rw_lock);
+  holders = iface_node_get_holders_L (iface);
+  if (holders)
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_warning ("unable to add prerequisite `%s' to interface `%s' which is already in use for `%s'",
+		 type_descriptive_name_I (prerequisite_type),
+		 type_descriptive_name_I (interface_type),
+		 type_descriptive_name_I (holders->instance_type));
+      return;
+    }
+  if (prerequisite_node->is_instantiatable)
+    {
+      guint i;
+      
+      /* can have at most one publically installable instantiatable prerequisite */
+      for (i = 0; i < IFACE_NODE_N_PREREQUISITES (iface); i++)
+	{
+	  TypeNode *prnode = lookup_type_node_I (IFACE_NODE_PREREQUISITES (iface)[i]);
+	  
+	  if (prnode->is_instantiatable)
+	    {
+	      G_WRITE_UNLOCK (&type_rw_lock);
+	      g_warning ("adding prerequisite `%s' to interface `%s' conflicts with existing prerequisite `%s'",
+			 type_descriptive_name_I (prerequisite_type),
+			 type_descriptive_name_I (interface_type),
+			 type_descriptive_name_I (NODE_TYPE (prnode)));
+	      return;
+	    }
+	}
+      
+      for (i = 0; i < prerequisite_node->n_supers + 1; i++)
+	type_iface_add_prerequisite_W (iface, lookup_type_node_I (prerequisite_node->supers[i]));
+      G_WRITE_UNLOCK (&type_rw_lock);
+    }
+  else if (NODE_IS_IFACE (prerequisite_node))
+    {
+      GType *prerequisites;
+      guint i;
+      
+      prerequisites = IFACE_NODE_PREREQUISITES (prerequisite_node);
+      for (i = 0; i < IFACE_NODE_N_PREREQUISITES (prerequisite_node); i++)
+	type_iface_add_prerequisite_W (iface, lookup_type_node_I (prerequisites[i]));
+      type_iface_add_prerequisite_W (iface, prerequisite_node);
+      G_WRITE_UNLOCK (&type_rw_lock);
+    }
+  else
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_warning ("prerequisite `%s' for interface `%s' is neither instantiatable nor interface",
+		 type_descriptive_name_I (prerequisite_type),
+		 type_descriptive_name_I (interface_type));
+    }
+}
+
+/**
+ * g_type_interface_prerequisites:
+ * @interface_type: an interface type
+ * @n_prerequisites: location to return the number of prerequisites, or %NULL
+ *
+ * Returns the prerequisites of an interfaces type.
+ *
+ * Since: 2.2
+ *
+ * Returns: a newly-allocated zero-terminated array of #GType containing
+ *  the prerequisites of @interface_type
+ */
+GType*
+g_type_interface_prerequisites (GType  interface_type,
+				guint *n_prerequisites)
+{
+  TypeNode *iface;
+  
+  g_return_val_if_fail (G_TYPE_IS_INTERFACE (interface_type), NULL);
+
+  iface = lookup_type_node_I (interface_type);
+  if (iface)
+    {
+      GType *types;
+      TypeNode *inode = NULL;
+      guint i, n = 0;
+      
+      G_READ_LOCK (&type_rw_lock);
+      types = g_new0 (GType, IFACE_NODE_N_PREREQUISITES (iface) + 1);
+      for (i = 0; i < IFACE_NODE_N_PREREQUISITES (iface); i++)
+	{
+	  GType prerequisite = IFACE_NODE_PREREQUISITES (iface)[i];
+	  TypeNode *node = lookup_type_node_I (prerequisite);
+	  if (node->is_instantiatable &&
+	      (!inode || type_node_is_a_L (node, inode)))
+	    inode = node;
+	  else
+	    types[n++] = NODE_TYPE (node);
+	}
+      if (inode)
+	types[n++] = NODE_TYPE (inode);
+      
+      if (n_prerequisites)
+	*n_prerequisites = n;
+      G_READ_UNLOCK (&type_rw_lock);
+      
+      return types;
+    }
+  else
+    {
+      if (n_prerequisites)
+	*n_prerequisites = 0;
+      
+      return NULL;
+    }
+}
+
+
+static IFaceHolder*
+type_iface_peek_holder_L (TypeNode *iface,
+			  GType     instance_type)
+{
+  IFaceHolder *iholder;
+  
+  g_assert (NODE_IS_IFACE (iface));
+  
+  iholder = iface_node_get_holders_L (iface);
+  while (iholder && iholder->instance_type != instance_type)
+    iholder = iholder->next;
+  return iholder;
+}
+
+static IFaceHolder*
+type_iface_retrieve_holder_info_Wm (TypeNode *iface,
+				    GType     instance_type,
+				    gboolean  need_info)
+{
+  IFaceHolder *iholder = type_iface_peek_holder_L (iface, instance_type);
+  
+  if (iholder && !iholder->info && need_info)
+    {
+      GInterfaceInfo tmp_info;
+      
+      g_assert (iholder->plugin != NULL);
+      
+      type_data_ref_Wm (iface);
+      if (iholder->info)
+	INVALID_RECURSION ("g_type_plugin_*", iface->plugin, NODE_NAME (iface));
+      
+      memset (&tmp_info, 0, sizeof (tmp_info));
+      
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_type_plugin_use (iholder->plugin);
+      g_type_plugin_complete_interface_info (iholder->plugin, instance_type, NODE_TYPE (iface), &tmp_info);
+      G_WRITE_LOCK (&type_rw_lock);
+      if (iholder->info)
+        INVALID_RECURSION ("g_type_plugin_*", iholder->plugin, NODE_NAME (iface));
+      
+      check_interface_info_I (iface, instance_type, &tmp_info);
+      iholder->info = g_memdup (&tmp_info, sizeof (tmp_info));
+    }
+  
+  return iholder;	/* we don't modify write lock upon returning NULL */
+}
+
+static void
+type_iface_blow_holder_info_Wm (TypeNode *iface,
+				GType     instance_type)
+{
+  IFaceHolder *iholder = iface_node_get_holders_L (iface);
+  
+  g_assert (NODE_IS_IFACE (iface));
+  
+  while (iholder->instance_type != instance_type)
+    iholder = iholder->next;
+  
+  if (iholder->info && iholder->plugin)
+    {
+      g_free (iholder->info);
+      iholder->info = NULL;
+      
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_type_plugin_unuse (iholder->plugin);
+      G_WRITE_LOCK (&type_rw_lock);
+      
+      type_data_unref_WmREC (iface, FALSE);
+    }
+}
+
+/* Assumes type's class already exists
+ */
+static inline size_t
+type_total_instance_size_I (TypeNode *node)
+{
+  gsize total_instance_size;
+
+  total_instance_size = node->data->instance.instance_size;
+  if (node->data->instance.private_size != 0)
+    total_instance_size = ALIGN_STRUCT (total_instance_size) + node->data->instance.private_size;
+
+  return total_instance_size;
+}
+
+/* --- type structure creation/destruction --- */
+typedef struct {
+  gpointer instance;
+  gpointer class;
+} InstanceRealClass;
+
+static gint
+instance_real_class_cmp (gconstpointer p1,
+                         gconstpointer p2)
+{
+  const InstanceRealClass *irc1 = p1;
+  const InstanceRealClass *irc2 = p2;
+  guint8 *i1 = irc1->instance;
+  guint8 *i2 = irc2->instance;
+  return G_BSEARCH_ARRAY_CMP (i1, i2);
+}
+
+G_LOCK_DEFINE_STATIC (instance_real_class);
+static GBSearchArray *instance_real_class_bsa = NULL;
+static GBSearchConfig instance_real_class_bconfig = {
+  sizeof (InstanceRealClass),
+  instance_real_class_cmp,
+  0,
+};
+
+static inline void
+instance_real_class_set (gpointer    instance,
+                         GTypeClass *class)
+{
+  InstanceRealClass key;
+  key.instance = instance;
+  key.class = class;
+  G_LOCK (instance_real_class);
+  if (!instance_real_class_bsa)
+    instance_real_class_bsa = g_bsearch_array_create (&instance_real_class_bconfig);
+  instance_real_class_bsa = g_bsearch_array_replace (instance_real_class_bsa, &instance_real_class_bconfig, &key);
+  G_UNLOCK (instance_real_class);
+}
+
+static inline void
+instance_real_class_remove (gpointer instance)
+{
+  InstanceRealClass key, *node;
+  guint index;
+  key.instance = instance;
+  G_LOCK (instance_real_class);
+  node = g_bsearch_array_lookup (instance_real_class_bsa, &instance_real_class_bconfig, &key);
+  index = g_bsearch_array_get_index (instance_real_class_bsa, &instance_real_class_bconfig, node);
+  instance_real_class_bsa = g_bsearch_array_remove (instance_real_class_bsa, &instance_real_class_bconfig, index);
+  if (!g_bsearch_array_get_n_nodes (instance_real_class_bsa))
+    {
+      g_bsearch_array_free (instance_real_class_bsa, &instance_real_class_bconfig);
+      instance_real_class_bsa = NULL;
+    }
+  G_UNLOCK (instance_real_class);
+}
+
+static inline GTypeClass*
+instance_real_class_get (gpointer instance)
+{
+  InstanceRealClass key, *node;
+  GTypeClass *class;
+  key.instance = instance;
+  G_LOCK (instance_real_class);
+  node = instance_real_class_bsa ? g_bsearch_array_lookup (instance_real_class_bsa, &instance_real_class_bconfig, &key) : NULL;
+  class = node ? node->class : NULL;
+  G_UNLOCK (instance_real_class);
+  return class;
+}
+
+/**
+ * g_type_create_instance:
+ * @type: An instantiatable type to create an instance for.
+ *
+ * Creates and initializes an instance of @type if @type is valid and
+ * can be instantiated. The type system only performs basic allocation
+ * and structure setups for instances: actual instance creation should
+ * happen through functions supplied by the type's fundamental type
+ * implementation.  So use of g_type_create_instance() is reserved for
+ * implementators of fundamental types only. E.g. instances of the
+ * #GObject hierarchy should be created via g_object_new() and
+ * <emphasis>never</emphasis> directly through
+ * g_type_create_instance() which doesn't handle things like singleton
+ * objects or object construction.  Note: Do <emphasis>not</emphasis>
+ * use this function, unless you're implementing a fundamental
+ * type. Also language bindings should <emphasis>not</emphasis> use
+ * this function but g_object_new() instead.
+ *
+ * Returns: An allocated and initialized instance, subject to further
+ *  treatment by the fundamental type implementation.
+ */
+GTypeInstance*
+g_type_create_instance (GType type)
+{
+  TypeNode *node;
+  GTypeInstance *instance;
+  GTypeClass *class;
+  guint i, total_size;
+  
+  node = lookup_type_node_I (type);
+  if (!node || !node->is_instantiatable)
+    {
+      g_warning ("cannot create new instance of invalid (non-instantiatable) type `%s'",
+		 type_descriptive_name_I (type));
+      return NULL;
+    }
+  /* G_TYPE_IS_ABSTRACT() is an external call: _U */
+  if (!node->mutatable_check_cache && G_TYPE_IS_ABSTRACT (type))
+    {
+      g_warning ("cannot create instance of abstract (non-instantiatable) type `%s'",
+		 type_descriptive_name_I (type));
+      return NULL;
+    }
+  
+  class = g_type_class_ref (type);
+  total_size = type_total_instance_size_I (node);
+
+  instance = g_slice_alloc0 (total_size);
+
+  if (node->data->instance.private_size)
+    instance_real_class_set (instance, class);
+  for (i = node->n_supers; i > 0; i--)
+    {
+      TypeNode *pnode;
+      
+      pnode = lookup_type_node_I (node->supers[i]);
+      if (pnode->data->instance.instance_init)
+	{
+	  instance->g_class = pnode->data->instance.class;
+	  pnode->data->instance.instance_init (instance, class);
+	}
+    }
+  if (node->data->instance.private_size)
+    instance_real_class_remove (instance);
+
+  instance->g_class = class;
+  if (node->data->instance.instance_init)
+    node->data->instance.instance_init (instance, class);
+  
+  return instance;
+}
+
+/**
+ * g_type_free_instance:
+ * @instance: an instance of a type.
+ *
+ * Frees an instance of a type, returning it to the instance pool for
+ * the type, if there is one.
+ *
+ * Like g_type_create_instance(), this function is reserved for
+ * implementors of fundamental types.
+ */
+void
+g_type_free_instance (GTypeInstance *instance)
+{
+  TypeNode *node;
+  GTypeClass *class;
+  
+  g_return_if_fail (instance != NULL && instance->g_class != NULL);
+  
+  class = instance->g_class;
+  node = lookup_type_node_I (class->g_type);
+  if (!node || !node->is_instantiatable || !node->data || node->data->class.class != (gpointer) class)
+    {
+      g_warning ("cannot free instance of invalid (non-instantiatable) type `%s'",
+		 type_descriptive_name_I (class->g_type));
+      return;
+    }
+  /* G_TYPE_IS_ABSTRACT() is an external call: _U */
+  if (!node->mutatable_check_cache && G_TYPE_IS_ABSTRACT (NODE_TYPE (node)))
+    {
+      g_warning ("cannot free instance of abstract (non-instantiatable) type `%s'",
+		 NODE_NAME (node));
+      return;
+    }
+  
+  instance->g_class = NULL;
+#ifdef G_ENABLE_DEBUG  
+  memset (instance, 0xaa, type_total_instance_size_I (node));
+#endif
+  g_slice_free1 (type_total_instance_size_I (node), instance);
+
+  g_type_class_unref (class);
+}
+
+static void
+type_iface_ensure_dflt_vtable_Wm (TypeNode *iface)
+{
+  g_assert (iface->data);
+
+  if (!iface->data->iface.dflt_vtable)
+    {
+      GTypeInterface *vtable = g_malloc0 (iface->data->iface.vtable_size);
+      iface->data->iface.dflt_vtable = vtable;
+      vtable->g_type = NODE_TYPE (iface);
+      vtable->g_instance_type = 0;
+      if (iface->data->iface.vtable_init_base ||
+          iface->data->iface.dflt_init)
+        {
+          G_WRITE_UNLOCK (&type_rw_lock);
+          if (iface->data->iface.vtable_init_base)
+            iface->data->iface.vtable_init_base (vtable);
+          if (iface->data->iface.dflt_init)
+            iface->data->iface.dflt_init (vtable, (gpointer) iface->data->iface.dflt_data);
+          G_WRITE_LOCK (&type_rw_lock);
+        }
+    }
+}
+
+
+/* This is called to allocate and do the first part of initializing
+ * the interface vtable; type_iface_vtable_iface_init_Wm() does the remainder.
+ *
+ * A FALSE return indicates that we didn't find an init function for
+ * this type/iface pair, so the vtable from the parent type should
+ * be used. Note that the write lock is not modified upon a FALSE
+ * return.
+ */
+static gboolean
+type_iface_vtable_base_init_Wm (TypeNode *iface,
+				TypeNode *node)
+{
+  IFaceEntry *entry;
+  IFaceHolder *iholder;
+  GTypeInterface *vtable = NULL;
+  TypeNode *pnode;
+  
+  /* type_iface_retrieve_holder_info_Wm() doesn't modify write lock for returning NULL */
+  iholder = type_iface_retrieve_holder_info_Wm (iface, NODE_TYPE (node), TRUE);
+  if (!iholder)
+    return FALSE;	/* we don't modify write lock upon FALSE */
+
+  type_iface_ensure_dflt_vtable_Wm (iface);
+
+  entry = type_lookup_iface_entry_L (node, iface);
+
+  g_assert (iface->data && entry && entry->vtable == NULL && iholder && iholder->info);
+  
+  entry->init_state = IFACE_INIT;
+
+  pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
+  if (pnode)	/* want to copy over parent iface contents */
+    {
+      IFaceEntry *pentry = type_lookup_iface_entry_L (pnode, iface);
+      
+      if (pentry)
+	vtable = g_memdup (pentry->vtable, iface->data->iface.vtable_size);
+    }
+  if (!vtable)
+    vtable = g_memdup (iface->data->iface.dflt_vtable, iface->data->iface.vtable_size);
+  entry->vtable = vtable;
+  vtable->g_type = NODE_TYPE (iface);
+  vtable->g_instance_type = NODE_TYPE (node);
+  
+  if (iface->data->iface.vtable_init_base)
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      iface->data->iface.vtable_init_base (vtable);
+      G_WRITE_LOCK (&type_rw_lock);
+    }
+  return TRUE;	/* initialized the vtable */
+}
+
+/* Finishes what type_iface_vtable_base_init_Wm started by
+ * calling the interface init function.
+ * this function may only be called for types with their
+ * own interface holder info, i.e. types for which
+ * g_type_add_interface*() was called and not children thereof.
+ */
+static void
+type_iface_vtable_iface_init_Wm (TypeNode *iface,
+				 TypeNode *node)
+{
+  IFaceEntry *entry = type_lookup_iface_entry_L (node, iface);
+  IFaceHolder *iholder = type_iface_peek_holder_L (iface, NODE_TYPE (node));
+  GTypeInterface *vtable = NULL;
+  guint i;
+  
+  /* iholder->info should have been filled in by type_iface_vtable_base_init_Wm() */
+  g_assert (iface->data && entry && iholder && iholder->info);
+  g_assert (entry->init_state == IFACE_INIT); /* assert prior base_init() */
+  
+  entry->init_state = INITIALIZED;
+      
+  vtable = entry->vtable;
+
+  if (iholder->info->interface_init)
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      if (iholder->info->interface_init)
+	iholder->info->interface_init (vtable, iholder->info->interface_data);
+      G_WRITE_LOCK (&type_rw_lock);
+    }
+  
+  for (i = 0; i < static_n_iface_check_funcs; i++)
+    {
+      GTypeInterfaceCheckFunc check_func = static_iface_check_funcs[i].check_func;
+      gpointer check_data = static_iface_check_funcs[i].check_data;
+
+      G_WRITE_UNLOCK (&type_rw_lock);
+      check_func (check_data, (gpointer)vtable);
+      G_WRITE_LOCK (&type_rw_lock);      
+    }
+}
+
+static gboolean
+type_iface_vtable_finalize_Wm (TypeNode       *iface,
+			       TypeNode       *node,
+			       GTypeInterface *vtable)
+{
+  IFaceEntry *entry = type_lookup_iface_entry_L (node, iface);
+  IFaceHolder *iholder;
+  
+  /* type_iface_retrieve_holder_info_Wm() doesn't modify write lock for returning NULL */
+  iholder = type_iface_retrieve_holder_info_Wm (iface, NODE_TYPE (node), FALSE);
+  if (!iholder)
+    return FALSE;	/* we don't modify write lock upon FALSE */
+  
+  g_assert (entry && entry->vtable == vtable && iholder->info);
+  
+  entry->vtable = NULL;
+  entry->init_state = UNINITIALIZED;
+  if (iholder->info->interface_finalize || iface->data->iface.vtable_finalize_base)
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      if (iholder->info->interface_finalize)
+	iholder->info->interface_finalize (vtable, iholder->info->interface_data);
+      if (iface->data->iface.vtable_finalize_base)
+	iface->data->iface.vtable_finalize_base (vtable);
+      G_WRITE_LOCK (&type_rw_lock);
+    }
+  vtable->g_type = 0;
+  vtable->g_instance_type = 0;
+  g_free (vtable);
+  
+  type_iface_blow_holder_info_Wm (iface, NODE_TYPE (node));
+  
+  return TRUE;	/* write lock modified */
+}
+
+static void
+type_class_init_Wm (TypeNode   *node,
+		    GTypeClass *pclass)
+{
+  GSList *slist, *init_slist = NULL;
+  GTypeClass *class;
+  IFaceEntry *entry;
+  TypeNode *bnode, *pnode;
+  guint i;
+  
+  g_assert (node->is_classed && node->data &&
+	    node->data->class.class_size &&
+	    !node->data->class.class &&
+	    node->data->class.init_state == UNINITIALIZED);
+
+  class = g_malloc0 (node->data->class.class_size);
+  node->data->class.class = class;
+  node->data->class.init_state = BASE_CLASS_INIT;
+  
+  if (pclass)
+    {
+      TypeNode *pnode = lookup_type_node_I (pclass->g_type);
+      
+      memcpy (class, pclass, pnode->data->class.class_size);
+
+      if (node->is_instantiatable)
+	{
+	  /* We need to initialize the private_size here rather than in
+	   * type_data_make_W() since the class init for the parent
+	   * class may have changed pnode->data->instance.private_size.
+	   */
+	  node->data->instance.private_size = pnode->data->instance.private_size;
+	}
+    }
+  class->g_type = NODE_TYPE (node);
+  
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  /* stack all base class initialization functions, so we
+   * call them in ascending order.
+   */
+  for (bnode = node; bnode; bnode = lookup_type_node_I (NODE_PARENT_TYPE (bnode)))
+    if (bnode->data->class.class_init_base)
+      init_slist = g_slist_prepend (init_slist, (gpointer) bnode->data->class.class_init_base);
+  for (slist = init_slist; slist; slist = slist->next)
+    {
+      GBaseInitFunc class_init_base = (GBaseInitFunc) slist->data;
+      
+      class_init_base (class);
+    }
+  g_slist_free (init_slist);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+
+  node->data->class.init_state = BASE_IFACE_INIT;
+  
+  /* Before we initialize the class, base initialize all interfaces, either
+   * from parent, or through our holder info
+   */
+  pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
+
+  i = 0;
+  while (i < CLASSED_NODE_N_IFACES (node))
+    {
+      entry = &CLASSED_NODE_IFACES_ENTRIES (node)[i];
+      while (i < CLASSED_NODE_N_IFACES (node) &&
+	     entry->init_state == IFACE_INIT)
+	{
+	  entry++;
+	  i++;
+	}
+
+      if (i == CLASSED_NODE_N_IFACES (node))
+	break;
+
+      if (!type_iface_vtable_base_init_Wm (lookup_type_node_I (entry->iface_type), node))
+	{
+	  guint j;
+	  
+	  /* need to get this interface from parent, type_iface_vtable_base_init_Wm()
+	   * doesn't modify write lock upon FALSE, so entry is still valid; 
+	   */
+	  g_assert (pnode != NULL);
+	  
+	  for (j = 0; j < CLASSED_NODE_N_IFACES (pnode); j++)
+	    {
+	      IFaceEntry *pentry = CLASSED_NODE_IFACES_ENTRIES (pnode) + j;
+	      
+	      if (pentry->iface_type == entry->iface_type)
+		{
+		  entry->vtable = pentry->vtable;
+		  entry->init_state = INITIALIZED;
+		  break;
+		}
+	    }
+	  g_assert (entry->vtable != NULL);
+	}
+
+      /* If the write lock was released, additional interface entries might
+       * have been inserted into CLASSED_NODE_IFACES_ENTRIES (node); they'll
+       * be base-initialized when inserted, so we don't have to worry that
+       * we might miss them. Uninitialized entries can only be moved higher
+       * when new ones are inserted.
+       */
+      i++;
+    }
+  
+  node->data->class.init_state = CLASS_INIT;
+  
+  G_WRITE_UNLOCK (&type_rw_lock);
+
+  if (node->data->class.class_init)
+    node->data->class.class_init (class, (gpointer) node->data->class.class_data);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  
+  node->data->class.init_state = IFACE_INIT;
+  
+  /* finish initializing the interfaces through our holder info.
+   * inherited interfaces are already init_state == INITIALIZED, because
+   * they either got setup in the above base_init loop, or during
+   * class_init from within type_add_interface_Wm() for this or
+   * an anchestor type.
+   */
+  i = 0;
+  while (TRUE)
+    {
+      entry = &CLASSED_NODE_IFACES_ENTRIES (node)[i];
+      while (i < CLASSED_NODE_N_IFACES (node) &&
+	     entry->init_state == INITIALIZED)
+	{
+	  entry++;
+	  i++;
+	}
+
+      if (i == CLASSED_NODE_N_IFACES (node))
+	break;
+
+      type_iface_vtable_iface_init_Wm (lookup_type_node_I (entry->iface_type), node);
+      
+      /* As in the loop above, additional initialized entries might be inserted
+       * if the write lock is released, but that's harmless because the entries
+       * we need to initialize only move higher in the list.
+       */
+      i++;
+    }
+  
+  node->data->class.init_state = INITIALIZED;
+}
+
+static void
+type_data_finalize_class_ifaces_Wm (TypeNode *node)
+{
+  guint i;
+
+  g_assert (node->is_instantiatable && node->data && node->data->class.class && node->data->common.ref_count == 0);
+
+ reiterate:
+  for (i = 0; i < CLASSED_NODE_N_IFACES (node); i++)
+    {
+      IFaceEntry *entry = CLASSED_NODE_IFACES_ENTRIES (node) + i;
+      if (entry->vtable)
+	{
+          if (type_iface_vtable_finalize_Wm (lookup_type_node_I (entry->iface_type), node, entry->vtable))
+            {
+              /* refetch entries, IFACES_ENTRIES might be modified */
+              goto reiterate;
+            }
+          else
+            {
+              /* type_iface_vtable_finalize_Wm() doesn't modify write lock upon FALSE,
+               * iface vtable came from parent
+               */
+              entry->vtable = NULL;
+              entry->init_state = UNINITIALIZED;
+            }
+	}
+    }
+}
+
+static void
+type_data_finalize_class_U (TypeNode  *node,
+			    ClassData *cdata)
+{
+  GTypeClass *class = cdata->class;
+  TypeNode *bnode;
+  
+  g_assert (cdata->class && cdata->common.ref_count == 0);
+  
+  if (cdata->class_finalize)
+    cdata->class_finalize (class, (gpointer) cdata->class_data);
+  
+  /* call all base class destruction functions in descending order
+   */
+  if (cdata->class_finalize_base)
+    cdata->class_finalize_base (class);
+  for (bnode = lookup_type_node_I (NODE_PARENT_TYPE (node)); bnode; bnode = lookup_type_node_I (NODE_PARENT_TYPE (bnode)))
+    if (bnode->data->class.class_finalize_base)
+      bnode->data->class.class_finalize_base (class);
+  
+  g_free (cdata->class);
+}
+
+static void
+type_data_last_unref_Wm (GType    type,
+			 gboolean uncached)
+{
+  TypeNode *node = lookup_type_node_I (type);
+  
+  g_return_if_fail (node != NULL && node->plugin != NULL);
+  
+  if (!node->data || node->data->common.ref_count == 0)
+    {
+      g_warning ("cannot drop last reference to unreferenced type `%s'",
+		 type_descriptive_name_I (type));
+      return;
+    }
+
+  /* call class cache hooks */
+  if (node->is_classed && node->data && node->data->class.class && static_n_class_cache_funcs && !uncached)
+    {
+      guint i;
+      
+      G_WRITE_UNLOCK (&type_rw_lock);
+      G_READ_LOCK (&type_rw_lock);
+      for (i = 0; i < static_n_class_cache_funcs; i++)
+	{
+	  GTypeClassCacheFunc cache_func = static_class_cache_funcs[i].cache_func;
+	  gpointer cache_data = static_class_cache_funcs[i].cache_data;
+	  gboolean need_break;
+	  
+	  G_READ_UNLOCK (&type_rw_lock);
+	  need_break = cache_func (cache_data, node->data->class.class);
+	  G_READ_LOCK (&type_rw_lock);
+	  if (!node->data || node->data->common.ref_count == 0)
+	    INVALID_RECURSION ("GType class cache function ", cache_func, NODE_NAME (node));
+	  if (need_break)
+	    break;
+	}
+      G_READ_UNLOCK (&type_rw_lock);
+      G_WRITE_LOCK (&type_rw_lock);
+    }
+  
+  if (node->data->common.ref_count > 1)	/* may have been re-referenced meanwhile */
+    node->data->common.ref_count -= 1;
+  else
+    {
+      GType ptype = NODE_PARENT_TYPE (node);
+      TypeData *tdata;
+      
+      node->data->common.ref_count = 0;
+      
+      if (node->is_instantiatable)
+	{
+	  /* destroy node->data->instance.mem_chunk */
+	}
+      
+      tdata = node->data;
+      if (node->is_classed && tdata->class.class)
+	{
+	  if (CLASSED_NODE_N_IFACES (node))
+	    type_data_finalize_class_ifaces_Wm (node);
+	  node->mutatable_check_cache = FALSE;
+	  node->data = NULL;
+	  G_WRITE_UNLOCK (&type_rw_lock);
+	  type_data_finalize_class_U (node, &tdata->class);
+	  G_WRITE_LOCK (&type_rw_lock);
+	}
+      else if (NODE_IS_IFACE (node) && tdata->iface.dflt_vtable)
+        {
+          node->mutatable_check_cache = FALSE;
+          node->data = NULL;
+          if (tdata->iface.dflt_finalize || tdata->iface.vtable_finalize_base)
+            {
+              G_WRITE_UNLOCK (&type_rw_lock);
+              if (tdata->iface.dflt_finalize)
+                tdata->iface.dflt_finalize (tdata->iface.dflt_vtable, (gpointer) tdata->iface.dflt_data);
+              if (tdata->iface.vtable_finalize_base)
+                tdata->iface.vtable_finalize_base (tdata->iface.dflt_vtable);
+              G_WRITE_LOCK (&type_rw_lock);
+            }
+          g_free (tdata->iface.dflt_vtable);
+        }
+      else
+        {
+          node->mutatable_check_cache = FALSE;
+          node->data = NULL;
+        }
+
+      /* freeing tdata->common.value_table and its contents is taken care of
+       * by allocating it in one chunk with tdata
+       */
+      g_free (tdata);
+      
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_type_plugin_unuse (node->plugin);
+      G_WRITE_LOCK (&type_rw_lock);
+      if (ptype)
+	type_data_unref_WmREC (lookup_type_node_I (ptype), FALSE);
+    }
+}
+
+/**
+ * g_type_add_class_cache_func:
+ * @cache_data: data to be passed to @cache_func
+ * @cache_func: a #GTypeClassCacheFunc
+ *
+ * Adds a #GTypeClassCacheFunc to be called before the reference count of a
+ * class goes from one to zero. This can be used to prevent premature class
+ * destruction. All installed #GTypeClassCacheFunc functions will be chained
+ * until one of them returns %TRUE. The functions have to check the class id
+ * passed in to figure whether they actually want to cache the class of this
+ * type, since all classes are routed through the same #GTypeClassCacheFunc
+ * chain.
+ */
+void
+g_type_add_class_cache_func (gpointer            cache_data,
+			     GTypeClassCacheFunc cache_func)
+{
+  guint i;
+  
+  g_return_if_fail (cache_func != NULL);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  i = static_n_class_cache_funcs++;
+  static_class_cache_funcs = g_renew (ClassCacheFunc, static_class_cache_funcs, static_n_class_cache_funcs);
+  static_class_cache_funcs[i].cache_data = cache_data;
+  static_class_cache_funcs[i].cache_func = cache_func;
+  G_WRITE_UNLOCK (&type_rw_lock);
+}
+
+/**
+ * g_type_remove_class_cache_func:
+ * @cache_data: data that was given when adding @cache_func
+ * @cache_func: a #GTypeClassCacheFunc
+ *
+ * Removes a previously installed #GTypeClassCacheFunc. The cache
+ * maintained by @cache_func has to be empty when calling
+ * g_type_remove_class_cache_func() to avoid leaks.
+ */
+void
+g_type_remove_class_cache_func (gpointer            cache_data,
+				GTypeClassCacheFunc cache_func)
+{
+  gboolean found_it = FALSE;
+  guint i;
+  
+  g_return_if_fail (cache_func != NULL);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  for (i = 0; i < static_n_class_cache_funcs; i++)
+    if (static_class_cache_funcs[i].cache_data == cache_data &&
+	static_class_cache_funcs[i].cache_func == cache_func)
+      {
+	static_n_class_cache_funcs--;
+	g_memmove (static_class_cache_funcs + i,
+		   static_class_cache_funcs + i + 1,
+		   sizeof (static_class_cache_funcs[0]) * (static_n_class_cache_funcs - i));
+	static_class_cache_funcs = g_renew (ClassCacheFunc, static_class_cache_funcs, static_n_class_cache_funcs);
+	found_it = TRUE;
+	break;
+      }
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  if (!found_it)
+    g_warning (G_STRLOC ": cannot remove unregistered class cache func %p with data %p",
+	       cache_func, cache_data);
+}
+
+
+/**
+ * g_type_add_interface_check:
+ * @check_data: data to pass to @check_func
+ * @check_func: function to be called after each interface
+ *              is initialized.
+ *
+ * Adds a function to be called after an interface vtable is
+ * initialized for any class (i.e. after the @interface_init member of
+ * #GInterfaceInfo has been called).
+ *
+ * This function is useful when you want to check an invariant that
+ * depends on the interfaces of a class. For instance, the
+ * implementation of #GObject uses this facility to check that an
+ * object implements all of the properties that are defined on its
+ * interfaces.
+ *
+ * Since: 2.4
+ */
+void
+g_type_add_interface_check (gpointer	            check_data,
+			    GTypeInterfaceCheckFunc check_func)
+{
+  guint i;
+  
+  g_return_if_fail (check_func != NULL);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  i = static_n_iface_check_funcs++;
+  static_iface_check_funcs = g_renew (IFaceCheckFunc, static_iface_check_funcs, static_n_iface_check_funcs);
+  static_iface_check_funcs[i].check_data = check_data;
+  static_iface_check_funcs[i].check_func = check_func;
+  G_WRITE_UNLOCK (&type_rw_lock);
+}
+
+/**
+ * g_type_remove_interface_check:
+ * @check_data: callback data passed to g_type_add_interface_check()
+ * @check_func: callback function passed to g_type_add_interface_check()
+ *
+ * Removes an interface check function added with
+ * g_type_add_interface_check().
+ *
+ * Since: 2.4
+ */
+void
+g_type_remove_interface_check (gpointer                check_data,
+			       GTypeInterfaceCheckFunc check_func)
+{
+  gboolean found_it = FALSE;
+  guint i;
+  
+  g_return_if_fail (check_func != NULL);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  for (i = 0; i < static_n_iface_check_funcs; i++)
+    if (static_iface_check_funcs[i].check_data == check_data &&
+	static_iface_check_funcs[i].check_func == check_func)
+      {
+	static_n_iface_check_funcs--;
+	g_memmove (static_iface_check_funcs + i,
+		   static_iface_check_funcs + i + 1,
+		   sizeof (static_iface_check_funcs[0]) * (static_n_iface_check_funcs - i));
+	static_iface_check_funcs = g_renew (IFaceCheckFunc, static_iface_check_funcs, static_n_iface_check_funcs);
+	found_it = TRUE;
+	break;
+      }
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  if (!found_it)
+    g_warning (G_STRLOC ": cannot remove unregistered class check func %p with data %p",
+	       check_func, check_data);
+}
+
+/* --- type registration --- */
+/**
+ * g_type_register_fundamental:
+ * @type_id: A predefined type identifier.
+ * @type_name: 0-terminated string used as the name of the new type.
+ * @info: The #GTypeInfo structure for this type.
+ * @finfo: The #GTypeFundamentalInfo structure for this type.
+ * @flags: Bitwise combination of #GTypeFlags values.
+ *
+ * Registers @type_id as the predefined identifier and @type_name as the
+ * name of a fundamental type.  The type system uses the information
+ * contained in the #GTypeInfo structure pointed to by @info and the
+ * #GTypeFundamentalInfo structure pointed to by @finfo to manage the
+ * type and its instances.  The value of @flags determines additional
+ * characteristics of the fundamental type.
+ *
+ * Returns: The predefined type identifier.
+ */
+GType
+g_type_register_fundamental (GType                       type_id,
+			     const gchar                *type_name,
+			     const GTypeInfo            *info,
+			     const GTypeFundamentalInfo *finfo,
+			     GTypeFlags			 flags)
+{
+  TypeNode *node;
+  
+  g_return_val_if_uninitialized (static_quark_type_flags, g_type_init, 0);
+  g_return_val_if_fail (type_id > 0, 0);
+  g_return_val_if_fail (type_name != NULL, 0);
+  g_return_val_if_fail (info != NULL, 0);
+  g_return_val_if_fail (finfo != NULL, 0);
+  
+  if (!check_type_name_I (type_name))
+    return 0;
+  if ((type_id & TYPE_ID_MASK) ||
+      type_id > G_TYPE_FUNDAMENTAL_MAX)
+    {
+      g_warning ("attempt to register fundamental type `%s' with invalid type id (%" G_GSIZE_FORMAT ")",
+		 type_name,
+		 type_id);
+      return 0;
+    }
+  if ((finfo->type_flags & G_TYPE_FLAG_INSTANTIATABLE) &&
+      !(finfo->type_flags & G_TYPE_FLAG_CLASSED))
+    {
+      g_warning ("cannot register instantiatable fundamental type `%s' as non-classed",
+		 type_name);
+      return 0;
+    }
+  if (lookup_type_node_I (type_id))
+    {
+      g_warning ("cannot register existing fundamental type `%s' (as `%s')",
+		 type_descriptive_name_I (type_id),
+		 type_name);
+      return 0;
+    }
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  node = type_node_fundamental_new_W (type_id, type_name, finfo->type_flags);
+  type_add_flags_W (node, flags);
+  
+  if (check_type_info_I (NULL, NODE_FUNDAMENTAL_TYPE (node), type_name, info))
+    type_data_make_W (node, info,
+		      check_value_table_I (type_name, info->value_table) ? info->value_table : NULL);
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  return NODE_TYPE (node);
+}
+
+/**
+ * g_type_register_static_simple:
+ * @parent_type: Type from which this type will be derived.
+ * @type_name: 0-terminated string used as the name of the new type.
+ * @class_size: Size of the class structure (see #GTypeInfo)
+ * @class_init: Location of the class initialization function (see #GTypeInfo)
+ * @instance_size: Size of the instance structure (see #GTypeInfo)
+ * @instance_init: Location of the instance initialization function (see #GTypeInfo)
+ * @flags: Bitwise combination of #GTypeFlags values.
+ *
+ * Registers @type_name as the name of a new static type derived from
+ * @parent_type.  The value of @flags determines the nature (e.g.
+ * abstract or not) of the type. It works by filling a #GTypeInfo
+ * struct and calling g_type_register_static().
+ *
+ * Since: 2.12
+ *
+ * Returns: The new type identifier.
+ */
+GType
+g_type_register_static_simple (GType             parent_type,
+			       const gchar      *type_name,
+			       guint             class_size,
+			       GClassInitFunc    class_init,
+			       guint             instance_size,
+			       GInstanceInitFunc instance_init,
+			       GTypeFlags	 flags)
+{
+  GTypeInfo info;
+
+  info.class_size = class_size;
+  info.base_init = NULL;
+  info.base_finalize = NULL;
+  info.class_init = class_init;
+  info.class_finalize = NULL;
+  info.class_data = NULL;
+  info.instance_size = instance_size;
+  info.n_preallocs = 0;
+  info.instance_init = instance_init;
+  info.value_table = NULL;
+
+  return g_type_register_static (parent_type, type_name, &info, flags);
+}
+
+/**
+ * g_type_register_static:
+ * @parent_type: Type from which this type will be derived.
+ * @type_name: 0-terminated string used as the name of the new type.
+ * @info: The #GTypeInfo structure for this type.
+ * @flags: Bitwise combination of #GTypeFlags values.
+ *
+ * Registers @type_name as the name of a new static type derived from
+ * @parent_type.  The type system uses the information contained in the
+ * #GTypeInfo structure pointed to by @info to manage the type and its
+ * instances (if not abstract).  The value of @flags determines the nature
+ * (e.g. abstract or not) of the type.
+ *
+ * Returns: The new type identifier.
+ */
+GType
+g_type_register_static (GType            parent_type,
+			const gchar     *type_name,
+			const GTypeInfo *info,
+			GTypeFlags	 flags)
+{
+  TypeNode *pnode, *node;
+  GType type = 0;
+  
+  g_return_val_if_uninitialized (static_quark_type_flags, g_type_init, 0);
+  g_return_val_if_fail (parent_type > 0, 0);
+  g_return_val_if_fail (type_name != NULL, 0);
+  g_return_val_if_fail (info != NULL, 0);
+  
+  if (!check_type_name_I (type_name) ||
+      !check_derivation_I (parent_type, type_name))
+    return 0;
+  if (info->class_finalize)
+    {
+      g_warning ("class finalizer specified for static type `%s'",
+		 type_name);
+      return 0;
+    }
+  
+  pnode = lookup_type_node_I (parent_type);
+  G_WRITE_LOCK (&type_rw_lock);
+  type_data_ref_Wm (pnode);
+  if (check_type_info_I (pnode, NODE_FUNDAMENTAL_TYPE (pnode), type_name, info))
+    {
+      node = type_node_new_W (pnode, type_name, NULL);
+      type_add_flags_W (node, flags);
+      type = NODE_TYPE (node);
+      type_data_make_W (node, info,
+			check_value_table_I (type_name, info->value_table) ? info->value_table : NULL);
+    }
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  return type;
+}
+
+/**
+ * g_type_register_dynamic:
+ * @parent_type: Type from which this type will be derived.
+ * @type_name: 0-terminated string used as the name of the new type.
+ * @plugin: The #GTypePlugin structure to retrieve the #GTypeInfo from.
+ * @flags: Bitwise combination of #GTypeFlags values.
+ *
+ * Registers @type_name as the name of a new dynamic type derived from
+ * @parent_type.  The type system uses the information contained in the
+ * #GTypePlugin structure pointed to by @plugin to manage the type and its
+ * instances (if not abstract).  The value of @flags determines the nature
+ * (e.g. abstract or not) of the type.
+ *
+ * Returns: The new type identifier or #G_TYPE_INVALID if registration failed.
+ */
+GType
+g_type_register_dynamic (GType        parent_type,
+			 const gchar *type_name,
+			 GTypePlugin *plugin,
+			 GTypeFlags   flags)
+{
+  TypeNode *pnode, *node;
+  GType type;
+  
+  g_return_val_if_uninitialized (static_quark_type_flags, g_type_init, 0);
+  g_return_val_if_fail (parent_type > 0, 0);
+  g_return_val_if_fail (type_name != NULL, 0);
+  g_return_val_if_fail (plugin != NULL, 0);
+  
+  if (!check_type_name_I (type_name) ||
+      !check_derivation_I (parent_type, type_name) ||
+      !check_plugin_U (plugin, TRUE, FALSE, type_name))
+    return 0;
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  pnode = lookup_type_node_I (parent_type);
+  node = type_node_new_W (pnode, type_name, plugin);
+  type_add_flags_W (node, flags);
+  type = NODE_TYPE (node);
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  return type;
+}
+
+/**
+ * g_type_add_interface_static:
+ * @instance_type: #GType value of an instantiable type.
+ * @interface_type: #GType value of an interface type.
+ * @info: The #GInterfaceInfo structure for this
+ *        (@instance_type, @interface_type) combination.
+ *
+ * Adds the static @interface_type to @instantiable_type.  The information
+ * contained in the #GTypeInterfaceInfo structure pointed to by @info
+ * is used to manage the relationship.
+ */
+void
+g_type_add_interface_static (GType                 instance_type,
+			     GType                 interface_type,
+			     const GInterfaceInfo *info)
+{
+  /* G_TYPE_IS_INSTANTIATABLE() is an external call: _U */
+  g_return_if_fail (G_TYPE_IS_INSTANTIATABLE (instance_type));
+  g_return_if_fail (g_type_parent (interface_type) == G_TYPE_INTERFACE);
+
+  /* we only need to lock class_init_rec_mutex if instance_type already has its
+   * class initialized, however this function is rarely enough called to take
+   * the simple route and always acquire class_init_rec_mutex.
+   */
+  g_static_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
+  G_WRITE_LOCK (&type_rw_lock);
+  if (check_add_interface_L (instance_type, interface_type))
+    {
+      TypeNode *node = lookup_type_node_I (instance_type);
+      TypeNode *iface = lookup_type_node_I (interface_type);
+      if (check_interface_info_I (iface, NODE_TYPE (node), info))
+        type_add_interface_Wm (node, iface, info, NULL);
+    }
+  G_WRITE_UNLOCK (&type_rw_lock);
+  g_static_rec_mutex_unlock (&class_init_rec_mutex);
+}
+
+/**
+ * g_type_add_interface_dynamic:
+ * @instance_type: the #GType value of an instantiable type.
+ * @interface_type: the #GType value of an interface type.
+ * @plugin: the #GTypePlugin structure to retrieve the #GInterfaceInfo from.
+ *
+ * Adds the dynamic @interface_type to @instantiable_type. The information
+ * contained in the #GTypePlugin structure pointed to by @plugin
+ * is used to manage the relationship.
+ */
+void
+g_type_add_interface_dynamic (GType        instance_type,
+			      GType        interface_type,
+			      GTypePlugin *plugin)
+{
+  TypeNode *node;
+  /* G_TYPE_IS_INSTANTIATABLE() is an external call: _U */
+  g_return_if_fail (G_TYPE_IS_INSTANTIATABLE (instance_type));
+  g_return_if_fail (g_type_parent (interface_type) == G_TYPE_INTERFACE);
+
+  node = lookup_type_node_I (instance_type);
+  if (!check_plugin_U (plugin, FALSE, TRUE, NODE_NAME (node)))
+    return;
+
+  /* see comment in g_type_add_interface_static() about class_init_rec_mutex */
+  g_static_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
+  G_WRITE_LOCK (&type_rw_lock);
+  if (check_add_interface_L (instance_type, interface_type))
+    {
+      TypeNode *iface = lookup_type_node_I (interface_type);
+      type_add_interface_Wm (node, iface, NULL, plugin);
+    }
+  G_WRITE_UNLOCK (&type_rw_lock);
+  g_static_rec_mutex_unlock (&class_init_rec_mutex);
+}
+
+
+/* --- public API functions --- */
+/**
+ * g_type_class_ref:
+ * @type: Type ID of a classed type.
+ *
+ * Increments the reference count of the class structure belonging to
+ * @type. This function will demand-create the class if it doesn't
+ * exist already.
+ *
+ * Returns: The #GTypeClass structure for the given type ID.
+ */
+gpointer
+g_type_class_ref (GType type)
+{
+  TypeNode *node;
+  GType ptype;
+
+  /* optimize for common code path */
+  G_WRITE_LOCK (&type_rw_lock);
+  node = lookup_type_node_I (type);
+  if (node && node->is_classed && node->data &&
+      node->data->class.class &&
+      node->data->class.init_state == INITIALIZED)
+    {
+      type_data_ref_Wm (node);
+      G_WRITE_UNLOCK (&type_rw_lock);
+      return node->data->class.class;
+    }
+  if (!node || !node->is_classed ||
+      (node->data && node->data->common.ref_count < 1))
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_warning ("cannot retrieve class for invalid (unclassed) type `%s'",
+		 type_descriptive_name_I (type));
+      return NULL;
+    }
+  type_data_ref_Wm (node);
+  ptype = NODE_PARENT_TYPE (node);
+  G_WRITE_UNLOCK (&type_rw_lock);
+
+  g_static_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
+  /* here, we either have node->data->class.class == NULL, or a recursive
+   * call to g_type_class_ref() with a partly initialized class, or
+   * node->data->class.init_state == INITIALIZED, because any
+   * concurrently running initialization was guarded by class_init_rec_mutex.
+   */
+  if (!node->data->class.class) /* class uninitialized */
+    {
+      /* acquire reference on parent class */
+      GTypeClass *pclass = ptype ? g_type_class_ref (ptype) : NULL;
+      G_WRITE_LOCK (&type_rw_lock);
+      if (node->data->class.class) /* class was initialized during parent class initialization? */
+        INVALID_RECURSION ("g_type_plugin_*", node->plugin, NODE_NAME (node));
+      type_class_init_Wm (node, pclass);
+      G_WRITE_UNLOCK (&type_rw_lock);
+    }
+  g_static_rec_mutex_unlock (&class_init_rec_mutex);
+
+  return node->data->class.class;
+}
+
+/**
+ * g_type_class_unref:
+ * @g_class: The #GTypeClass structure to unreference.
+ *
+ * Decrements the reference count of the class structure being passed in.
+ * Once the last reference count of a class has been released, classes
+ * may be finalized by the type system, so further dereferencing of a
+ * class pointer after g_type_class_unref() are invalid.
+ */
+void
+g_type_class_unref (gpointer g_class)
+{
+  TypeNode *node;
+  GTypeClass *class = g_class;
+  
+  g_return_if_fail (g_class != NULL);
+  
+  node = lookup_type_node_I (class->g_type);
+  G_WRITE_LOCK (&type_rw_lock);
+  if (node && node->is_classed && node->data &&
+      node->data->class.class == class && node->data->common.ref_count > 0)
+    type_data_unref_WmREC (node, FALSE);
+  else
+    g_warning ("cannot unreference class of invalid (unclassed) type `%s'",
+	       type_descriptive_name_I (class->g_type));
+  G_WRITE_UNLOCK (&type_rw_lock);
+}
+
+/**
+ * g_type_class_unref_uncached:
+ * @g_class: The #GTypeClass structure to unreference.
+ *
+ * A variant of g_type_class_unref() for use in #GTypeClassCacheFunc
+ * implementations. It unreferences a class without consulting the chain
+ * of #GTypeClassCacheFunc<!-- -->s, avoiding the recursion which would occur
+ * otherwise.
+ */
+void
+g_type_class_unref_uncached (gpointer g_class)
+{
+  TypeNode *node;
+  GTypeClass *class = g_class;
+  
+  g_return_if_fail (g_class != NULL);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  node = lookup_type_node_I (class->g_type);
+  if (node && node->is_classed && node->data &&
+      node->data->class.class == class && node->data->common.ref_count > 0)
+    type_data_unref_WmREC (node, TRUE);
+  else
+    g_warning ("cannot unreference class of invalid (unclassed) type `%s'",
+	       type_descriptive_name_I (class->g_type));
+  G_WRITE_UNLOCK (&type_rw_lock);
+}
+
+/**
+ * g_type_class_peek:
+ * @type: Type ID of a classed type.
+ *
+ * This function is essentially the same as g_type_class_ref(), except that
+ * the classes reference count isn't incremented. As a consequence, this function
+ * may return %NULL if the class of the type passed in does not currently
+ * exist (hasn't been referenced before).
+ *
+ * Returns: The #GTypeClass structure for the given type ID or %NULL
+ *  if the class does not currently exist.
+ */
+gpointer
+g_type_class_peek (GType type)
+{
+  TypeNode *node;
+  gpointer class;
+  
+  node = lookup_type_node_I (type);
+  G_READ_LOCK (&type_rw_lock);
+  if (node && node->is_classed && node->data && node->data->class.class) /* common.ref_count _may_ be 0 */
+    class = node->data->class.class;
+  else
+    class = NULL;
+  G_READ_UNLOCK (&type_rw_lock);
+  
+  return class;
+}
+
+/**
+ * g_type_class_peek_static:
+ * @type: Type ID of a classed type.
+ *
+ * A more efficient version of g_type_class_peek() which works only for
+ * static types.
+ * 
+ * Since: 2.4
+ * Returns: The #GTypeClass structure for the given type ID or %NULL
+ *  if the class does not currently exist or is dynamically loaded.
+ */
+gpointer
+g_type_class_peek_static (GType type)
+{
+  TypeNode *node;
+  gpointer class;
+  
+  node = lookup_type_node_I (type);
+  G_READ_LOCK (&type_rw_lock);
+  if (node && node->is_classed && node->data &&
+      /* peek only static types: */ node->plugin == NULL &&
+      node->data->class.class) /* common.ref_count _may_ be 0 */
+    class = node->data->class.class;
+  else
+    class = NULL;
+  G_READ_UNLOCK (&type_rw_lock);
+  
+  return class;
+}
+
+/**
+ * g_type_class_peek_parent:
+ * @g_class: The #GTypeClass structure to retrieve the parent class for.
+ *
+ * This is a convenience function often needed in class initializers.
+ * It returns the class structure of the immediate parent type of the
+ * class passed in.  Since derived classes hold a reference count on
+ * their parent classes as long as they are instantiated, the returned
+ * class will always exist. This function is essentially equivalent
+ * to:
+ *
+ * <programlisting>
+ * g_type_class_peek (g_type_parent (G_TYPE_FROM_CLASS (g_class)));
+ * </programlisting>
+ *
+ * Returns: The parent class of @g_class.
+ */
+gpointer
+g_type_class_peek_parent (gpointer g_class)
+{
+  TypeNode *node;
+  gpointer class = NULL;
+  
+  g_return_val_if_fail (g_class != NULL, NULL);
+  
+  node = lookup_type_node_I (G_TYPE_FROM_CLASS (g_class));
+  /* We used to acquire a read lock here. That is not necessary, since 
+   * parent->data->class.class is constant as long as the derived class
+   * exists. 
+   */
+  if (node && node->is_classed && node->data && NODE_PARENT_TYPE (node))
+    {
+      node = lookup_type_node_I (NODE_PARENT_TYPE (node));
+      class = node->data->class.class;
+    }
+  else if (NODE_PARENT_TYPE (node))
+    g_warning (G_STRLOC ": invalid class pointer `%p'", g_class);
+  
+  return class;
+}
+
+/**
+ * g_type_interface_peek:
+ * @instance_class: A #GTypeClass structure.
+ * @iface_type: An interface ID which this class conforms to.
+ *
+ * Returns the #GTypeInterface structure of an interface to which the
+ * passed in class conforms.
+ *
+ * Returns: The GTypeInterface structure of iface_type if implemented
+ *          by @instance_class, %NULL otherwise
+ */
+gpointer
+g_type_interface_peek (gpointer instance_class,
+		       GType    iface_type)
+{
+  TypeNode *node;
+  TypeNode *iface;
+  gpointer vtable = NULL;
+  GTypeClass *class = instance_class;
+  
+  g_return_val_if_fail (instance_class != NULL, NULL);
+  
+  node = lookup_type_node_I (class->g_type);
+  iface = lookup_type_node_I (iface_type);
+  if (node && node->is_instantiatable && iface)
+    {
+      IFaceEntry *entry;
+      
+      G_READ_LOCK (&type_rw_lock);
+      
+      entry = type_lookup_iface_entry_L (node, iface);
+      if (entry && entry->vtable)	/* entry is relocatable */
+	vtable = entry->vtable;
+      
+      G_READ_UNLOCK (&type_rw_lock);
+    }
+  else
+    g_warning (G_STRLOC ": invalid class pointer `%p'", class);
+  
+  return vtable;
+}
+
+/**
+ * g_type_interface_peek_parent:
+ * @g_iface: A #GTypeInterface structure.
+ *
+ * Returns the corresponding #GTypeInterface structure of the parent type
+ * of the instance type to which @g_iface belongs. This is useful when
+ * deriving the implementation of an interface from the parent type and
+ * then possibly overriding some methods.
+ *
+ * Returns: The corresponding #GTypeInterface structure of the parent
+ *          type of the instance type to which @g_iface belongs, or
+ *          %NULL if the parent type doesn't conform to the interface.
+ */
+gpointer
+g_type_interface_peek_parent (gpointer g_iface)
+{
+  TypeNode *node;
+  TypeNode *iface;
+  gpointer vtable = NULL;
+  GTypeInterface *iface_class = g_iface;
+  
+  g_return_val_if_fail (g_iface != NULL, NULL);
+  
+  iface = lookup_type_node_I (iface_class->g_type);
+  node = lookup_type_node_I (iface_class->g_instance_type);
+  if (node)
+    node = lookup_type_node_I (NODE_PARENT_TYPE (node));
+  if (node && node->is_instantiatable && iface)
+    {
+      IFaceEntry *entry;
+      
+      G_READ_LOCK (&type_rw_lock);
+      
+      entry = type_lookup_iface_entry_L (node, iface);
+      if (entry && entry->vtable)	/* entry is relocatable */
+	vtable = entry->vtable;
+      
+      G_READ_UNLOCK (&type_rw_lock);
+    }
+  else if (node)
+    g_warning (G_STRLOC ": invalid interface pointer `%p'", g_iface);
+  
+  return vtable;
+}
+
+/**
+ * g_type_default_interface_ref:
+ * @g_type: an interface type
+ *
+ * Increments the reference count for the interface type @g_type,
+ * and returns the default interface vtable for the type.
+ *
+ * If the type is not currently in use, then the default vtable
+ * for the type will be created and initalized by calling
+ * the base interface init and default vtable init functions for
+ * the type (the @<structfield>base_init</structfield>
+ * and <structfield>class_init</structfield> members of #GTypeInfo).
+ * Calling g_type_default_interface_ref() is useful when you
+ * want to make sure that signals and properties for an interface
+ * have been installed.
+ *
+ * Since: 2.4
+ *
+ * Returns: the default vtable for the interface; call
+ *          g_type_default_interface_unref() when you are done using
+ *          the interface.
+ */
+gpointer
+g_type_default_interface_ref (GType g_type)
+{
+  TypeNode *node;
+  gpointer dflt_vtable;
+
+  G_WRITE_LOCK (&type_rw_lock);
+
+  node = lookup_type_node_I (g_type);
+  if (!node || !NODE_IS_IFACE (node) ||
+      (node->data && node->data->common.ref_count < 1))
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_warning ("cannot retrieve default vtable for invalid or non-interface type '%s'",
+		 type_descriptive_name_I (g_type));
+      return NULL;
+    }
+
+  if (!node->data || !node->data->iface.dflt_vtable)
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      g_static_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */
+      G_WRITE_LOCK (&type_rw_lock);
+      node = lookup_type_node_I (g_type);
+      type_data_ref_Wm (node);
+      type_iface_ensure_dflt_vtable_Wm (node);
+      g_static_rec_mutex_unlock (&class_init_rec_mutex);
+    }
+  else
+    type_data_ref_Wm (node); /* ref_count >= 1 already */
+
+  dflt_vtable = node->data->iface.dflt_vtable;
+  G_WRITE_UNLOCK (&type_rw_lock);
+
+  return dflt_vtable;
+}
+
+/**
+ * g_type_default_interface_peek:
+ * @g_type: an interface type
+ *
+ * If the interface type @g_type is currently in use, returns its
+ * default interface vtable.
+ *
+ * Since: 2.4
+ *
+ * Returns: the default vtable for the interface, or %NULL
+ *          if the type is not currently in use.
+ */
+gpointer
+g_type_default_interface_peek (GType g_type)
+{
+  TypeNode *node;
+  gpointer vtable;
+  
+  node = lookup_type_node_I (g_type);
+  G_READ_LOCK (&type_rw_lock);
+  if (node && NODE_IS_IFACE (node) && node->data && node->data->iface.dflt_vtable)
+    vtable = node->data->iface.dflt_vtable;
+  else
+    vtable = NULL;
+  G_READ_UNLOCK (&type_rw_lock);
+  
+  return vtable;
+}
+
+/**
+ * g_type_default_interface_unref:
+ * @g_iface: the default vtable structure for a interface, as
+ *           returned by g_type_default_interface_ref()
+ *
+ * Decrements the reference count for the type corresponding to the
+ * interface default vtable @g_iface. If the type is dynamic, then
+ * when no one is using the interface and all references have
+ * been released, the finalize function for the interface's default
+ * vtable (the <structfield>class_finalize</structfield> member of
+ * #GTypeInfo) will be called.
+ *
+ * Since: 2.4
+ */
+void
+g_type_default_interface_unref (gpointer g_iface)
+{
+  TypeNode *node;
+  GTypeInterface *vtable = g_iface;
+  
+  g_return_if_fail (g_iface != NULL);
+  
+  node = lookup_type_node_I (vtable->g_type);
+  G_WRITE_LOCK (&type_rw_lock);
+  if (node && NODE_IS_IFACE (node) &&
+      node->data->iface.dflt_vtable == g_iface &&
+      node->data->common.ref_count > 0)
+    type_data_unref_WmREC (node, FALSE);
+  else
+    g_warning ("cannot unreference invalid interface default vtable for '%s'",
+	       type_descriptive_name_I (vtable->g_type));
+  G_WRITE_UNLOCK (&type_rw_lock);
+}
+
+/**
+ * g_type_name:
+ * @type: Type to return name for.
+ *
+ * Get the unique name that is assigned to a type ID.  Note that this
+ * function (like all other GType API) cannot cope with invalid type
+ * IDs. %G_TYPE_INVALID may be passed to this function, as may be any
+ * other validly registered type ID, but randomized type IDs should
+ * not be passed in and will most likely lead to a crash.
+ *
+ * Returns: Static type name or %NULL.
+ */
+G_CONST_RETURN gchar*
+g_type_name (GType type)
+{
+  TypeNode *node;
+  
+  g_return_val_if_uninitialized (static_quark_type_flags, g_type_init, NULL);
+  
+  node = lookup_type_node_I (type);
+  
+  return node ? NODE_NAME (node) : NULL;
+}
+
+/**
+ * g_type_qname:
+ * @type: Type to return quark of type name for.
+ *
+ * Get the corresponding quark of the type IDs name.
+ *
+ * Returns: The type names quark or 0.
+ */
+GQuark
+g_type_qname (GType type)
+{
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  
+  return node ? node->qname : 0;
+}
+
+/**
+ * g_type_from_name:
+ * @name: Type name to lookup.
+ *
+ * Lookup the type ID from a given type name, returning 0 if no type
+ * has been registered under this name (this is the preferred method
+ * to find out by name whether a specific type has been registered
+ * yet).
+ *
+ * Returns: Corresponding type ID or 0.
+ */
+GType
+g_type_from_name (const gchar *name)
+{
+  GType type = 0;
+  GQuark quark;
+  
+  g_return_val_if_fail (name != NULL, 0);
+  
+  quark = g_quark_try_string (name);
+  if (quark)
+    {
+      G_READ_LOCK (&type_rw_lock);
+      type = (GType) g_hash_table_lookup (static_type_nodes_ht, GUINT_TO_POINTER (quark));
+      G_READ_UNLOCK (&type_rw_lock);
+    }
+  
+  return type;
+}
+
+/**
+ * g_type_parent:
+ * @type: The derived type.
+ *
+ * Return the direct parent type of the passed in type.  If the passed
+ * in type has no parent, i.e. is a fundamental type, 0 is returned.
+ *
+ * Returns: The parent type.
+ */
+GType
+g_type_parent (GType type)
+{
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  
+  return node ? NODE_PARENT_TYPE (node) : 0;
+}
+
+/**
+ * g_type_depth:
+ * @type: A #GType value.
+ *
+ * Returns the length of the ancestry of the passed in type. This
+ * includes the type itself, so that e.g. a fundamental type has depth 1.
+ *
+ * Returns: The depth of @type.
+ */
+guint
+g_type_depth (GType type)
+{
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  
+  return node ? node->n_supers + 1 : 0;
+}
+
+/**
+ * g_type_next_base:
+ * @leaf_type: Descendant of @root_type and the type to be returned.
+ * @root_type: Immediate parent of the returned type.
+ *
+ * Given a @leaf_type and a @root_type which is contained in its
+ * anchestry, return the type that @root_type is the immediate parent
+ * of.  In other words, this function determines the type that is
+ * derived directly from @root_type which is also a base class of
+ * @leaf_type.  Given a root type and a leaf type, this function can
+ * be used to determine the types and order in which the leaf type is
+ * descended from the root type.
+ *
+ * Returns: Immediate child of @root_type and anchestor of @leaf_type.
+ */
+GType
+g_type_next_base (GType type,
+		  GType base_type)
+{
+  GType atype = 0;
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  if (node)
+    {
+      TypeNode *base_node = lookup_type_node_I (base_type);
+      
+      if (base_node && base_node->n_supers < node->n_supers)
+	{
+	  guint n = node->n_supers - base_node->n_supers;
+	  
+	  if (node->supers[n] == base_type)
+	    atype = node->supers[n - 1];
+	}
+    }
+  
+  return atype;
+}
+
+static inline gboolean
+type_node_check_conformities_UorL (TypeNode *node,
+				   TypeNode *iface_node,
+				   /*        support_inheritance */
+				   gboolean  support_interfaces,
+				   gboolean  support_prerequisites,
+				   gboolean  have_lock)
+{
+  gboolean match;
+  
+  if (/* support_inheritance && */
+      NODE_IS_ANCESTOR (iface_node, node))
+    return TRUE;
+  
+  support_interfaces = support_interfaces && node->is_instantiatable && NODE_IS_IFACE (iface_node);
+  support_prerequisites = support_prerequisites && NODE_IS_IFACE (node);
+  match = FALSE;
+  if (support_interfaces || support_prerequisites)
+    {
+      if (!have_lock)
+	G_READ_LOCK (&type_rw_lock);
+      if (support_interfaces && type_lookup_iface_entry_L (node, iface_node))
+	match = TRUE;
+      else if (support_prerequisites && type_lookup_prerequisite_L (node, NODE_TYPE (iface_node)))
+	match = TRUE;
+      if (!have_lock)
+	G_READ_UNLOCK (&type_rw_lock);
+    }
+  return match;
+}
+
+static gboolean
+type_node_is_a_L (TypeNode *node,
+		  TypeNode *iface_node)
+{
+  return type_node_check_conformities_UorL (node, iface_node, TRUE, TRUE, TRUE);
+}
+
+static inline gboolean
+type_node_conforms_to_U (TypeNode *node,
+			 TypeNode *iface_node,
+			 gboolean  support_interfaces,
+			 gboolean  support_prerequisites)
+{
+  return type_node_check_conformities_UorL (node, iface_node, support_interfaces, support_prerequisites, FALSE);
+}
+
+/**
+ * g_type_is_a:
+ * @type: Type to check anchestry for.
+ * @is_a_type: Possible anchestor of @type or interface @type could conform to.
+ *
+ * If @is_a_type is a derivable type, check whether @type is a
+ * descendant of @is_a_type.  If @is_a_type is an interface, check
+ * whether @type conforms to it.
+ *
+ * Returns: %TRUE if @type is_a @is_a_type holds true.
+ */
+gboolean
+g_type_is_a (GType type,
+	     GType iface_type)
+{
+  TypeNode *node, *iface_node;
+  gboolean is_a;
+  
+  node = lookup_type_node_I (type);
+  iface_node = lookup_type_node_I (iface_type);
+  is_a = node && iface_node && type_node_conforms_to_U (node, iface_node, TRUE, TRUE);
+  
+  return is_a;
+}
+
+/**
+ * g_type_children:
+ * @type: The parent type.
+ * @n_children: Optional #guint pointer to contain the number of child types.
+ *
+ * Return a newly allocated and 0-terminated array of type IDs, listing the
+ * child types of @type. The return value has to be g_free()ed after use.
+ *
+ * Returns: Newly allocated and 0-terminated array of child types.
+ */
+GType*
+g_type_children (GType  type,
+		 guint *n_children)
+{
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  if (node)
+    {
+      GType *children;
+      
+      G_READ_LOCK (&type_rw_lock);	/* ->children is relocatable */
+      children = g_new (GType, node->n_children + 1);
+      memcpy (children, node->children, sizeof (GType) * node->n_children);
+      children[node->n_children] = 0;
+      
+      if (n_children)
+	*n_children = node->n_children;
+      G_READ_UNLOCK (&type_rw_lock);
+      
+      return children;
+    }
+  else
+    {
+      if (n_children)
+	*n_children = 0;
+      
+      return NULL;
+    }
+}
+
+/**
+ * g_type_interfaces:
+ * @type: The type to list interface types for.
+ * @n_interfaces: Optional #guint pointer to contain the number of
+ *                interface types.
+ *
+ * Return a newly allocated and 0-terminated array of type IDs, listing the
+ * interface types that @type conforms to. The return value has to be
+ * g_free()ed after use.
+ *
+ * Returns: Newly allocated and 0-terminated array of interface types.
+ */
+GType*
+g_type_interfaces (GType  type,
+		   guint *n_interfaces)
+{
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  if (node && node->is_instantiatable)
+    {
+      GType *ifaces;
+      guint i;
+      
+      G_READ_LOCK (&type_rw_lock);
+      ifaces = g_new (GType, CLASSED_NODE_N_IFACES (node) + 1);
+      for (i = 0; i < CLASSED_NODE_N_IFACES (node); i++)
+	ifaces[i] = CLASSED_NODE_IFACES_ENTRIES (node)[i].iface_type;
+      ifaces[i] = 0;
+      
+      if (n_interfaces)
+	*n_interfaces = CLASSED_NODE_N_IFACES (node);
+      G_READ_UNLOCK (&type_rw_lock);
+      
+      return ifaces;
+    }
+  else
+    {
+      if (n_interfaces)
+	*n_interfaces = 0;
+      
+      return NULL;
+    }
+}
+
+typedef struct _QData QData;
+struct _GData
+{
+  guint  n_qdatas;
+  QData *qdatas;
+};
+struct _QData
+{
+  GQuark   quark;
+  gpointer data;
+};
+
+static inline gpointer
+type_get_qdata_L (TypeNode *node,
+		  GQuark    quark)
+{
+  GData *gdata = node->global_gdata;
+  
+  if (quark && gdata && gdata->n_qdatas)
+    {
+      QData *qdatas = gdata->qdatas - 1;
+      guint n_qdatas = gdata->n_qdatas;
+      
+      do
+	{
+	  guint i;
+	  QData *check;
+	  
+	  i = (n_qdatas + 1) / 2;
+	  check = qdatas + i;
+	  if (quark == check->quark)
+	    return check->data;
+	  else if (quark > check->quark)
+	    {
+	      n_qdatas -= i;
+	      qdatas = check;
+	    }
+	  else /* if (quark < check->quark) */
+	    n_qdatas = i - 1;
+	}
+      while (n_qdatas);
+    }
+  return NULL;
+}
+
+/**
+ * g_type_get_qdata:
+ * @type: a #GType
+ * @quark: a #GQuark id to identify the data
+ *
+ * Obtains data which has previously been attached to @type
+ * with g_type_set_qdata().
+ *
+ * Returns: the data, or %NULL if no data was found
+ */
+gpointer
+g_type_get_qdata (GType  type,
+		  GQuark quark)
+{
+  TypeNode *node;
+  gpointer data;
+  
+  node = lookup_type_node_I (type);
+  if (node)
+    {
+      G_READ_LOCK (&type_rw_lock);
+      data = type_get_qdata_L (node, quark);
+      G_READ_UNLOCK (&type_rw_lock);
+    }
+  else
+    {
+      g_return_val_if_fail (node != NULL, NULL);
+      data = NULL;
+    }
+  return data;
+}
+
+static inline void
+type_set_qdata_W (TypeNode *node,
+		  GQuark    quark,
+		  gpointer  data)
+{
+  GData *gdata;
+  QData *qdata;
+  guint i;
+  
+  /* setup qdata list if necessary */
+  if (!node->global_gdata)
+    node->global_gdata = g_new0 (GData, 1);
+  gdata = node->global_gdata;
+  
+  /* try resetting old data */
+  qdata = gdata->qdatas;
+  for (i = 0; i < gdata->n_qdatas; i++)
+    if (qdata[i].quark == quark)
+      {
+	qdata[i].data = data;
+	return;
+      }
+  
+  /* add new entry */
+  gdata->n_qdatas++;
+  gdata->qdatas = g_renew (QData, gdata->qdatas, gdata->n_qdatas);
+  qdata = gdata->qdatas;
+  for (i = 0; i < gdata->n_qdatas - 1; i++)
+    if (qdata[i].quark > quark)
+      break;
+  g_memmove (qdata + i + 1, qdata + i, sizeof (qdata[0]) * (gdata->n_qdatas - i - 1));
+  qdata[i].quark = quark;
+  qdata[i].data = data;
+}
+
+/**
+ * g_type_set_qdata:
+ * @type: a #GType
+ * @quark: a #GQuark id to identify the data
+ * @data: the data
+ *
+ * Attaches arbitrary data to a type.
+ */
+void
+g_type_set_qdata (GType    type,
+		  GQuark   quark,
+		  gpointer data)
+{
+  TypeNode *node;
+  
+  g_return_if_fail (quark != 0);
+  
+  node = lookup_type_node_I (type);
+  if (node)
+    {
+      G_WRITE_LOCK (&type_rw_lock);
+      type_set_qdata_W (node, quark, data);
+      G_WRITE_UNLOCK (&type_rw_lock);
+    }
+  else
+    g_return_if_fail (node != NULL);
+}
+
+static void
+type_add_flags_W (TypeNode  *node,
+		  GTypeFlags flags)
+{
+  guint dflags;
+  
+  g_return_if_fail ((flags & ~TYPE_FLAG_MASK) == 0);
+  g_return_if_fail (node != NULL);
+  
+  if ((flags & TYPE_FLAG_MASK) && node->is_classed && node->data && node->data->class.class)
+    g_warning ("tagging type `%s' as abstract after class initialization", NODE_NAME (node));
+  dflags = GPOINTER_TO_UINT (type_get_qdata_L (node, static_quark_type_flags));
+  dflags |= flags;
+  type_set_qdata_W (node, static_quark_type_flags, GUINT_TO_POINTER (dflags));
+}
+
+/**
+ * g_type_query:
+ * @type: the #GType value of a static, classed type.
+ * @query: A user provided structure that is filled in with constant values
+ *  upon success.
+ *
+ * Queries the type system for information about a specific type.
+ * This function will fill in a user-provided structure to hold
+ * type-specific information. If an invalid #GType is passed in, the
+ * @type member of the #GTypeQuery is 0. All members filled into the
+ * #GTypeQuery structure should be considered constant and have to be
+ * left untouched.
+ */
+void
+g_type_query (GType       type,
+	      GTypeQuery *query)
+{
+  TypeNode *node;
+  
+  g_return_if_fail (query != NULL);
+  
+  /* if node is not static and classed, we won't allow query */
+  query->type = 0;
+  node = lookup_type_node_I (type);
+  if (node && node->is_classed && !node->plugin)
+    {
+      /* type is classed and probably even instantiatable */
+      G_READ_LOCK (&type_rw_lock);
+      if (node->data)	/* type is static or referenced */
+	{
+	  query->type = NODE_TYPE (node);
+	  query->type_name = NODE_NAME (node);
+	  query->class_size = node->data->class.class_size;
+	  query->instance_size = node->is_instantiatable ? node->data->instance.instance_size : 0;
+	}
+      G_READ_UNLOCK (&type_rw_lock);
+    }
+}
+
+
+/* --- implementation details --- */
+gboolean
+g_type_test_flags (GType type,
+		   guint flags)
+{
+  TypeNode *node;
+  gboolean result = FALSE;
+  
+  node = lookup_type_node_I (type);
+  if (node)
+    {
+      guint fflags = flags & TYPE_FUNDAMENTAL_FLAG_MASK;
+      guint tflags = flags & TYPE_FLAG_MASK;
+      
+      if (fflags)
+	{
+	  GTypeFundamentalInfo *finfo = type_node_fundamental_info_I (node);
+	  
+	  fflags = (finfo->type_flags & fflags) == fflags;
+	}
+      else
+	fflags = TRUE;
+      
+      if (tflags)
+	{
+	  G_READ_LOCK (&type_rw_lock);
+	  tflags = (tflags & GPOINTER_TO_UINT (type_get_qdata_L (node, static_quark_type_flags))) == tflags;
+	  G_READ_UNLOCK (&type_rw_lock);
+	}
+      else
+	tflags = TRUE;
+      
+      result = tflags && fflags;
+    }
+  
+  return result;
+}
+
+/**
+ * g_type_get_plugin:
+ * @type: The #GType to retrieve the plugin for.
+ *
+ * Returns the #GTypePlugin structure for @type or
+ * %NULL if @type does not have a #GTypePlugin structure.
+ *
+ * Returns: The corresponding plugin if @type is a dynamic type,
+ *  %NULL otherwise.
+ */
+GTypePlugin*
+g_type_get_plugin (GType type)
+{
+  TypeNode *node;
+  
+  node = lookup_type_node_I (type);
+  
+  return node ? node->plugin : NULL;
+}
+
+/**
+ * g_type_interface_get_plugin:
+ * @instance_type: the #GType value of an instantiatable type.
+ * @interface_type: the #GType value of an interface type.
+ *
+ * Returns the #GTypePlugin structure for the dynamic interface
+ * @interface_type which has been added to @instance_type, or %NULL if
+ * @interface_type has not been added to @instance_type or does not
+ * have a #GTypePlugin structure. See g_type_add_interface_dynamic().
+ *
+ * Returns: the #GTypePlugin for the dynamic interface @interface_type
+ *  of @instance_type.
+ */
+GTypePlugin*
+g_type_interface_get_plugin (GType instance_type,
+			     GType interface_type)
+{
+  TypeNode *node;
+  TypeNode *iface;
+  
+  g_return_val_if_fail (G_TYPE_IS_INTERFACE (interface_type), NULL);	/* G_TYPE_IS_INTERFACE() is an external call: _U */
+  
+  node = lookup_type_node_I (instance_type);  
+  iface = lookup_type_node_I (interface_type);
+  if (node && iface)
+    {
+      IFaceHolder *iholder;
+      GTypePlugin *plugin;
+      
+      G_READ_LOCK (&type_rw_lock);
+      
+      iholder = iface_node_get_holders_L (iface);
+      while (iholder && iholder->instance_type != instance_type)
+	iholder = iholder->next;
+      plugin = iholder ? iholder->plugin : NULL;
+      
+      G_READ_UNLOCK (&type_rw_lock);
+      
+      return plugin;
+    }
+  
+  g_return_val_if_fail (node == NULL, NULL);
+  g_return_val_if_fail (iface == NULL, NULL);
+  
+  g_warning (G_STRLOC ": attempt to look up plugin for invalid instance/interface type pair.");
+  
+  return NULL;
+}
+
+/**
+ * g_type_fundamental_next:
+ *
+ * Returns the next free fundamental type id which can be used to
+ * register a new fundamental type with g_type_register_fundamental().
+ * The returned type ID represents the highest currently registered
+ * fundamental type identifier.
+ *
+ * Returns: The nextmost fundamental type ID to be registered,
+ *          or 0 if the type system ran out of fundamental type IDs.
+ */
+GType
+g_type_fundamental_next (void)
+{
+  GType type;
+  
+  G_READ_LOCK (&type_rw_lock);
+  type = static_fundamental_next;
+  G_READ_UNLOCK (&type_rw_lock);
+  type = G_TYPE_MAKE_FUNDAMENTAL (type);
+  return type <= G_TYPE_FUNDAMENTAL_MAX ? type : 0;
+}
+
+/**
+ * g_type_fundamental:
+ * @type_id: valid type ID
+ * 
+ * Internal function, used to extract the fundamental type ID portion.
+ * use G_TYPE_FUNDAMENTAL() instead.
+ * 
+ * Returns: fundamental type ID
+ */
+GType
+g_type_fundamental (GType type_id)
+{
+  TypeNode *node = lookup_type_node_I (type_id);
+  
+  return node ? NODE_FUNDAMENTAL_TYPE (node) : 0;
+}
+
+gboolean
+g_type_check_instance_is_a (GTypeInstance *type_instance,
+			    GType          iface_type)
+{
+  TypeNode *node, *iface;
+  gboolean check;
+  
+  if (!type_instance || !type_instance->g_class)
+    return FALSE;
+  
+  node = lookup_type_node_I (type_instance->g_class->g_type);
+  iface = lookup_type_node_I (iface_type);
+  check = node && node->is_instantiatable && iface && type_node_conforms_to_U (node, iface, TRUE, FALSE);
+  
+  return check;
+}
+
+gboolean
+g_type_check_class_is_a (GTypeClass *type_class,
+			 GType       is_a_type)
+{
+  TypeNode *node, *iface;
+  gboolean check;
+  
+  if (!type_class)
+    return FALSE;
+  
+  node = lookup_type_node_I (type_class->g_type);
+  iface = lookup_type_node_I (is_a_type);
+  check = node && node->is_classed && iface && type_node_conforms_to_U (node, iface, FALSE, FALSE);
+  
+  return check;
+}
+
+GTypeInstance*
+g_type_check_instance_cast (GTypeInstance *type_instance,
+			    GType          iface_type)
+{
+  if (type_instance)
+    {
+      if (type_instance->g_class)
+	{
+	  TypeNode *node, *iface;
+	  gboolean is_instantiatable, check;
+	  
+	  node = lookup_type_node_I (type_instance->g_class->g_type);
+	  is_instantiatable = node && node->is_instantiatable;
+	  iface = lookup_type_node_I (iface_type);
+	  check = is_instantiatable && iface && type_node_conforms_to_U (node, iface, TRUE, FALSE);
+	  if (check)
+	    return type_instance;
+	  
+	  if (is_instantiatable)
+	    g_warning ("invalid cast from `%s' to `%s'",
+		       type_descriptive_name_I (type_instance->g_class->g_type),
+		       type_descriptive_name_I (iface_type));
+	  else
+	    g_warning ("invalid uninstantiatable type `%s' in cast to `%s'",
+		       type_descriptive_name_I (type_instance->g_class->g_type),
+		       type_descriptive_name_I (iface_type));
+	}
+      else
+	g_warning ("invalid unclassed pointer in cast to `%s'",
+		   type_descriptive_name_I (iface_type));
+    }
+  
+  return type_instance;
+}
+
+GTypeClass*
+g_type_check_class_cast (GTypeClass *type_class,
+			 GType       is_a_type)
+{
+  if (type_class)
+    {
+      TypeNode *node, *iface;
+      gboolean is_classed, check;
+      
+      node = lookup_type_node_I (type_class->g_type);
+      is_classed = node && node->is_classed;
+      iface = lookup_type_node_I (is_a_type);
+      check = is_classed && iface && type_node_conforms_to_U (node, iface, FALSE, FALSE);
+      if (check)
+	return type_class;
+      
+      if (is_classed)
+	g_warning ("invalid class cast from `%s' to `%s'",
+		   type_descriptive_name_I (type_class->g_type),
+		   type_descriptive_name_I (is_a_type));
+      else
+	g_warning ("invalid unclassed type `%s' in class cast to `%s'",
+		   type_descriptive_name_I (type_class->g_type),
+		   type_descriptive_name_I (is_a_type));
+    }
+  else
+    g_warning ("invalid class cast from (NULL) pointer to `%s'",
+	       type_descriptive_name_I (is_a_type));
+  return type_class;
+}
+
+/**
+ * g_type_check_instance:
+ * @instance: A valid #GTypeInstance structure.
+ *
+ * Private helper function to aid implementation of the G_TYPE_CHECK_INSTANCE()
+ * macro.
+ *
+ * @Returns:  #TRUE if @instance is valid, #FALSE otherwise.
+ */
+gboolean
+g_type_check_instance (GTypeInstance *type_instance)
+{
+  /* this function is just here to make the signal system
+   * conveniently elaborated on instance checks
+   */
+  if (type_instance)
+    {
+      if (type_instance->g_class)
+	{
+	  TypeNode *node = lookup_type_node_I (type_instance->g_class->g_type);
+	  
+	  if (node && node->is_instantiatable)
+	    return TRUE;
+	  
+	  g_warning ("instance of invalid non-instantiatable type `%s'",
+		     type_descriptive_name_I (type_instance->g_class->g_type));
+	}
+      else
+	g_warning ("instance with invalid (NULL) class pointer");
+    }
+  else
+    g_warning ("invalid (NULL) pointer instance");
+  
+  return FALSE;
+}
+
+static inline gboolean
+type_check_is_value_type_U (GType type)
+{
+  GTypeFlags tflags = G_TYPE_FLAG_VALUE_ABSTRACT;
+  TypeNode *node;
+  
+  /* common path speed up */
+  node = lookup_type_node_I (type);
+  if (node && node->mutatable_check_cache)
+    return TRUE;
+  
+  G_READ_LOCK (&type_rw_lock);
+ restart_check:
+  if (node)
+    {
+      if (node->data && node->data->common.ref_count > 0 &&
+	  node->data->common.value_table->value_init)
+	tflags = GPOINTER_TO_UINT (type_get_qdata_L (node, static_quark_type_flags));
+      else if (NODE_IS_IFACE (node))
+	{
+	  guint i;
+	  
+	  for (i = 0; i < IFACE_NODE_N_PREREQUISITES (node); i++)
+	    {
+	      GType prtype = IFACE_NODE_PREREQUISITES (node)[i];
+	      TypeNode *prnode = lookup_type_node_I (prtype);
+	      
+	      if (prnode->is_instantiatable)
+		{
+		  type = prtype;
+		  node = lookup_type_node_I (type);
+		  goto restart_check;
+		}
+	    }
+	}
+    }
+  G_READ_UNLOCK (&type_rw_lock);
+  
+  return !(tflags & G_TYPE_FLAG_VALUE_ABSTRACT);
+}
+
+gboolean
+g_type_check_is_value_type (GType type)
+{
+  return type_check_is_value_type_U (type);
+}
+
+gboolean
+g_type_check_value (GValue *value)
+{
+  return value && type_check_is_value_type_U (value->g_type);
+}
+
+gboolean
+g_type_check_value_holds (GValue *value,
+			  GType   type)
+{
+  return value && type_check_is_value_type_U (value->g_type) && g_type_is_a (value->g_type, type);
+}
+
+/**
+ * g_type_value_table_peek:
+ * @type: A #GType value.
+ *
+ * Returns the location of the #GTypeValueTable associated with @type.
+ * <emphasis>Note that this function should only be used from source code
+ * that implements or has internal knowledge of the implementation of
+ * @type.</emphasis>
+ *
+ * Returns: Location of the #GTypeValueTable associated with @type or
+ *  %NULL if there is no #GTypeValueTable associated with @type.
+ */
+GTypeValueTable*
+g_type_value_table_peek (GType type)
+{
+  GTypeValueTable *vtable = NULL;
+  TypeNode *node = lookup_type_node_I (type);
+  gboolean has_refed_data, has_table;
+  TypeData *data;
+
+  /* speed up common code path, we're not 100% safe here,
+   * but we should only get called with referenced types anyway
+   */
+  data = node ? node->data : NULL;
+  if (node && node->mutatable_check_cache)
+    return data->common.value_table;
+
+  G_READ_LOCK (&type_rw_lock);
+  
+ restart_table_peek:
+  has_refed_data = node && node->data && node->data->common.ref_count;
+  has_table = has_refed_data && node->data->common.value_table->value_init;
+  if (has_refed_data)
+    {
+      if (has_table)
+	vtable = node->data->common.value_table;
+      else if (NODE_IS_IFACE (node))
+	{
+	  guint i;
+	  
+	  for (i = 0; i < IFACE_NODE_N_PREREQUISITES (node); i++)
+	    {
+	      GType prtype = IFACE_NODE_PREREQUISITES (node)[i];
+	      TypeNode *prnode = lookup_type_node_I (prtype);
+	      
+	      if (prnode->is_instantiatable)
+		{
+		  type = prtype;
+		  node = lookup_type_node_I (type);
+		  goto restart_table_peek;
+		}
+	    }
+	}
+    }
+  
+  G_READ_UNLOCK (&type_rw_lock);
+  
+  if (vtable)
+    return vtable;
+  
+  if (!node)
+    g_warning (G_STRLOC ": type id `%" G_GSIZE_FORMAT "' is invalid", type);
+  if (!has_refed_data)
+    g_warning ("can't peek value table for type `%s' which is not currently referenced",
+	       type_descriptive_name_I (type));
+  
+  return NULL;
+}
+
+G_CONST_RETURN gchar*
+g_type_name_from_instance (GTypeInstance *instance)
+{
+  if (!instance)
+    return "<NULL-instance>";
+  else
+    return g_type_name_from_class (instance->g_class);
+}
+
+G_CONST_RETURN gchar*
+g_type_name_from_class (GTypeClass *g_class)
+{
+  if (!g_class)
+    return "<NULL-class>";
+  else
+    return g_type_name (g_class->g_type);
+}
+
+
+/* --- initialization --- */
+/**
+ * g_type_init_with_debug_flags:
+ * @debug_flags: Bitwise combination of #GTypeDebugFlags values for
+ *               debugging purposes.
+ *
+ * Similar to g_type_init(), but additionally sets debug flags.
+ */
+void
+g_type_init_with_debug_flags (GTypeDebugFlags debug_flags)
+{
+  G_LOCK_DEFINE_STATIC (type_init_lock);
+  const gchar *env_string;
+  GTypeInfo info;
+  TypeNode *node;
+  volatile GType votype;
+  
+  G_LOCK (type_init_lock);
+  
+  G_WRITE_LOCK (&type_rw_lock);
+  
+  if (static_quark_type_flags)
+    {
+      G_WRITE_UNLOCK (&type_rw_lock);
+      G_UNLOCK (type_init_lock);
+      return;
+    }
+  
+  /* setup GObject library wide debugging flags */
+  _g_type_debug_flags = debug_flags & G_TYPE_DEBUG_MASK;
+  env_string = g_getenv ("GOBJECT_DEBUG");
+  if (env_string != NULL)
+    {
+      static GDebugKey debug_keys[] = {
+	{ "objects", G_TYPE_DEBUG_OBJECTS },
+	{ "signals", G_TYPE_DEBUG_SIGNALS },
+      };
+      
+      _g_type_debug_flags |= g_parse_debug_string (env_string,
+						   debug_keys,
+						   sizeof (debug_keys) / sizeof (debug_keys[0]));
+      env_string = NULL;
+    }
+  
+  /* quarks */
+  static_quark_type_flags = g_quark_from_static_string ("-g-type-private--GTypeFlags");
+  static_quark_iface_holder = g_quark_from_static_string ("-g-type-private--IFaceHolder");
+  static_quark_dependants_array = g_quark_from_static_string ("-g-type-private--dependants-array");
+  
+  /* type qname hash table */
+  static_type_nodes_ht = g_hash_table_new (g_direct_hash, g_direct_equal);
+  
+  /* invalid type G_TYPE_INVALID (0)
+   */
+  static_fundamental_type_nodes[0] = NULL;
+  
+  /* void type G_TYPE_NONE
+   */
+  node = type_node_fundamental_new_W (G_TYPE_NONE, g_intern_static_string ("void"), 0);
+  votype = NODE_TYPE (node);
+  g_assert (votype == G_TYPE_NONE);
+  
+  /* interface fundamental type G_TYPE_INTERFACE (!classed)
+   */
+  memset (&info, 0, sizeof (info));
+  node = type_node_fundamental_new_W (G_TYPE_INTERFACE, g_intern_static_string ("GInterface"), G_TYPE_FLAG_DERIVABLE);
+  votype = NODE_TYPE (node);
+  type_data_make_W (node, &info, NULL);
+  g_assert (votype == G_TYPE_INTERFACE);
+  
+  G_WRITE_UNLOCK (&type_rw_lock);
+  
+  g_value_c_init ();
+
+  /* G_TYPE_TYPE_PLUGIN
+   */
+  votype = g_type_plugin_get_type ();
+  
+  /* G_TYPE_* value types
+   */
+  g_value_types_init ();
+  
+  /* G_TYPE_ENUM & G_TYPE_FLAGS
+   */
+  g_enum_types_init ();
+  
+  /* G_TYPE_BOXED
+   */
+  g_boxed_type_init ();
+  
+  /* G_TYPE_PARAM
+   */
+  g_param_type_init ();
+  
+  /* G_TYPE_OBJECT
+   */
+  g_object_type_init ();
+  
+  /* G_TYPE_PARAM_* pspec types
+   */
+  g_param_spec_types_init ();
+  
+  /* Value Transformations
+   */
+  g_value_transforms_init ();
+  
+  /* Signal system
+   */
+  g_signal_init ();
+  
+  G_UNLOCK (type_init_lock);
+}
+
+/**
+ * g_type_init:
+ *
+ * Prior to any use of the type system, g_type_init() has to be called
+ * to initialize the type system and assorted other code portions
+ * (such as the various fundamental type implementations or the signal
+ * system).
+ */
+void
+g_type_init (void)
+{
+  g_type_init_with_debug_flags (0);
+}
+
+/**
+ * g_type_class_add_private:
+ * @g_class: class structure for an instantiatable type
+ * @private_size: size of private structure.
+ *
+ * Registers a private structure for an instantiatable type;
+ * when an object is allocated, the private structures for
+ * the type and all of its parent types are allocated
+ * sequentially in the same memory block as the public
+ * structures. This function should be called in the
+ * type's class_init() function. The private structure can
+ * be retrieved using the G_TYPE_INSTANCE_GET_PRIVATE() macro.
+ * The following example shows attaching a private structure
+ * <structname>MyObjectPrivate</structname> to an object
+ * <structname>MyObject</structname> defined in the standard GObject
+ * fashion.
+ *
+ * |[
+ * typedef struct _MyObjectPrivate MyObjectPrivate;
+ *
+ * struct _MyObjectPrivate {
+ *   int some_field;
+ * };
+ *
+ * #define MY_OBJECT_GET_PRIVATE(o)  \
+ *    (G_TYPE_INSTANCE_GET_PRIVATE ((o), MY_TYPE_OBJECT, MyObjectPrivate))
+ *
+ * static void
+ * my_object_class_init (MyObjectClass *klass)
+ * {
+ *   g_type_class_add_private (klass, sizeof (MyObjectPrivate));
+ * }
+ *
+ * static int
+ * my_object_get_some_field (MyObject *my_object)
+ * {
+ *   MyObjectPrivate *priv = MY_OBJECT_GET_PRIVATE (my_object);
+ *
+ *   return priv->some_field;
+ * }
+ * ]|
+ *
+ * Since: 2.4
+ */
+void
+g_type_class_add_private (gpointer g_class,
+			  gsize    private_size)
+{
+  GType instance_type = ((GTypeClass *)g_class)->g_type;
+  TypeNode *node = lookup_type_node_I (instance_type);
+  gsize offset;
+
+  g_return_if_fail (private_size > 0);
+
+  if (!node || !node->is_instantiatable || !node->data || node->data->class.class != g_class)
+    {
+      g_warning ("cannot add private field to invalid (non-instantiatable) type '%s'",
+		 type_descriptive_name_I (instance_type));
+      return;
+    }
+
+  if (NODE_PARENT_TYPE (node))
+    {
+      TypeNode *pnode = lookup_type_node_I (NODE_PARENT_TYPE (node));
+      if (node->data->instance.private_size != pnode->data->instance.private_size)
+	{
+	  g_warning ("g_type_add_private() called multiple times for the same type");
+	  return;
+	}
+    }
+  
+  G_WRITE_LOCK (&type_rw_lock);
+
+  offset = ALIGN_STRUCT (node->data->instance.private_size);
+  node->data->instance.private_size = offset + private_size;
+  
+  G_WRITE_UNLOCK (&type_rw_lock);
+}
+
+gpointer
+g_type_instance_get_private (GTypeInstance *instance,
+			     GType          private_type)
+{
+  TypeNode *instance_node;
+  TypeNode *private_node;
+  TypeNode *parent_node;
+  GTypeClass *class;
+  gsize offset;
+
+  g_return_val_if_fail (instance != NULL && instance->g_class != NULL, NULL);
+
+  /* while instances are initialized, their class pointers change,
+   * so figure the instances real class first
+   */
+  class = instance_real_class_get (instance);
+  if (!class)
+    class = instance->g_class;
+
+  instance_node = lookup_type_node_I (class->g_type);
+  if (G_UNLIKELY (!instance_node || !instance_node->is_instantiatable))
+    {
+      g_warning ("instance of invalid non-instantiatable type `%s'",
+		 type_descriptive_name_I (instance->g_class->g_type));
+      return NULL;
+    }
+
+  private_node = lookup_type_node_I (private_type);
+  if (G_UNLIKELY (!private_node || !NODE_IS_ANCESTOR (private_node, instance_node)))
+    {
+      g_warning ("attempt to retrieve private data for invalid type '%s'",
+		 type_descriptive_name_I (private_type));
+      return NULL;
+    }
+
+  /* Note that we don't need a read lock, since instance existing
+   * means that the instance class and all parent classes
+   * exist, so the node->data, node->data->instance.instance_size,
+   * and node->data->instance.private_size are not going to be changed.
+   * for any of the relevant types.
+   */
+
+  offset = ALIGN_STRUCT (instance_node->data->instance.instance_size);
+
+  if (NODE_PARENT_TYPE (private_node))
+    {
+      parent_node = lookup_type_node_I (NODE_PARENT_TYPE (private_node));
+      g_assert (parent_node->data && parent_node->data->common.ref_count);
+
+      if (G_UNLIKELY (private_node->data->instance.private_size == parent_node->data->instance.private_size))
+	{
+	  g_warning ("g_type_instance_get_private() requires a prior call to g_type_class_add_private()");
+	  return NULL;
+	}
+
+      offset += ALIGN_STRUCT (parent_node->data->instance.private_size);
+    }
+
+  return G_STRUCT_MEMBER_P (instance, offset);
+}
+
+#define __G_TYPE_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gtype.h b/gobject/gtype.h
new file mode 100644
index 0000000..1eeccde
--- /dev/null
+++ b/gobject/gtype.h
@@ -0,0 +1,1515 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_TYPE_H__
+#define __G_TYPE_H__
+
+#include        <glib.h>
+
+G_BEGIN_DECLS
+
+/* Basic Type Macros
+ */
+/**
+ * G_TYPE_FUNDAMENTAL:
+ * @type: A #GType value.
+ * 
+ * The fundamental type which is the ancestor of @type.
+ * Fundamental types are types that serve as ultimate bases for the derived types, 
+ * thus they are the roots of distinct inheritance hierarchies.
+ */
+#define G_TYPE_FUNDAMENTAL(type)	(g_type_fundamental (type))
+/**
+ * G_TYPE_FUNDAMENTAL_MAX:
+ * 
+ * An integer constant that represents the number of identifiers reserved
+ * for types that are assigned at compile-time.
+ */
+#define	G_TYPE_FUNDAMENTAL_MAX		(255 << G_TYPE_FUNDAMENTAL_SHIFT)
+
+/* Constant fundamental types,
+ * introduced by g_type_init().
+ */
+/**
+ * G_TYPE_INVALID:
+ * 
+ * An invalid #GType used as error return value in some functions which return
+ * a #GType. 
+ */
+#define G_TYPE_INVALID			G_TYPE_MAKE_FUNDAMENTAL (0)
+/**
+ * G_TYPE_NONE:
+ * 
+ * A fundamental type which is used as a replacement for the C
+ * <literal>void</literal> return type.
+ */
+#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
+/**
+ * G_TYPE_INTERFACE:
+ * 
+ * The fundamental type from which all interfaces are derived.
+ */
+#define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
+/**
+ * G_TYPE_CHAR:
+ * 
+ * The fundamental type corresponding to #gchar.
+ * The type designated by G_TYPE_CHAR is unconditionally an 8-bit signed integer.
+ * This may or may not be the same type a the C type "gchar".
+ */
+#define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
+/**
+ * G_TYPE_UCHAR:
+ * 
+ * The fundamental type corresponding to #guchar.
+ */
+#define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
+/**
+ * G_TYPE_BOOLEAN:
+ * 
+ * The fundamental type corresponding to #gboolean.
+ */
+#define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
+/**
+ * G_TYPE_INT:
+ * 
+ * The fundamental type corresponding to #gint.
+ */
+#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
+/**
+ * G_TYPE_UINT:
+ * 
+ * The fundamental type corresponding to #guint.
+ */
+#define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
+/**
+ * G_TYPE_LONG:
+ * 
+ * The fundamental type corresponding to #glong.
+ */
+#define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
+/**
+ * G_TYPE_ULONG:
+ * 
+ * The fundamental type corresponding to #gulong.
+ */
+#define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
+/**
+ * G_TYPE_INT64:
+ * 
+ * The fundamental type corresponding to #gint64.
+ */
+#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
+/**
+ * G_TYPE_UINT64:
+ * 
+ * The fundamental type corresponding to #guint64.
+ */
+#define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
+/**
+ * G_TYPE_ENUM:
+ * 
+ * The fundamental type from which all enumeration types are derived.
+ */
+#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
+/**
+ * G_TYPE_FLAGS:
+ * 
+ * The fundamental type from which all flags types are derived.
+ */
+#define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
+/**
+ * G_TYPE_FLOAT:
+ * 
+ * The fundamental type corresponding to #gfloat.
+ */
+#define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
+/**
+ * G_TYPE_DOUBLE:
+ * 
+ * The fundamental type corresponding to #gdouble.
+ */
+#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
+/**
+ * G_TYPE_STRING:
+ * 
+ * The fundamental type corresponding to nul-terminated C strings.
+ */
+#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
+/**
+ * G_TYPE_POINTER:
+ * 
+ * The fundamental type corresponding to #gpointer.
+ */
+#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
+/**
+ * G_TYPE_BOXED:
+ * 
+ * The fundamental type from which all boxed types are derived.
+ */
+#define G_TYPE_BOXED			G_TYPE_MAKE_FUNDAMENTAL (18)
+/**
+ * G_TYPE_PARAM:
+ * 
+ * The fundamental type from which all #GParamSpec types are derived.
+ */
+#define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
+/**
+ * G_TYPE_OBJECT:
+ * 
+ * The fundamental type for #GObject.
+ */
+#define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
+
+
+/* Reserved fundamental type numbers to create new fundamental
+ * type IDs with G_TYPE_MAKE_FUNDAMENTAL().
+ * Send email to gtk-devel-list@gnome.org for reservations.
+ */
+/**
+ * G_TYPE_FUNDAMENTAL_SHIFT:
+ *
+ * Shift value used in converting numbers to type IDs.
+ */
+#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
+/**
+ * G_TYPE_MAKE_FUNDAMENTAL:
+ * @x: the fundamental type number.
+ * 
+ * Get the type ID for the fundamental type number @x.
+ * Use g_type_fundamental_next() instead of this macro to create new fundamental 
+ * types.
+ *
+ * Returns: the GType
+ */
+#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
+/**
+ * G_TYPE_RESERVED_GLIB_FIRST:
+ * 
+ * First fundamental type number to create a new fundamental type id with
+ * G_TYPE_MAKE_FUNDAMENTAL() reserved for GLib.
+ */
+#define G_TYPE_RESERVED_GLIB_FIRST	(21)
+/**
+ * G_TYPE_RESERVED_GLIB_LAST:
+ * 
+ * Last fundamental type number reserved for GLib.
+ */
+#define G_TYPE_RESERVED_GLIB_LAST	(31)
+/**
+ * G_TYPE_RESERVED_BSE_FIRST:
+ * 
+ * First fundamental type number to create a new fundamental type id with
+ * G_TYPE_MAKE_FUNDAMENTAL() reserved for BSE.
+ */
+#define G_TYPE_RESERVED_BSE_FIRST	(32)
+/**
+ * G_TYPE_RESERVED_BSE_LAST:
+ * 
+ * Last fundamental type number reserved for BSE.
+ */
+#define G_TYPE_RESERVED_BSE_LAST	(48)
+/**
+ * G_TYPE_RESERVED_USER_FIRST:
+ * 
+ * First available fundamental type number to create new fundamental 
+ * type id with G_TYPE_MAKE_FUNDAMENTAL().
+ */
+#define G_TYPE_RESERVED_USER_FIRST	(49)
+
+
+/* Type Checking Macros
+ */
+/**
+ * G_TYPE_IS_FUNDAMENTAL:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is a fundamental type.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_FUNDAMENTAL(type)             ((type) <= G_TYPE_FUNDAMENTAL_MAX)
+/**
+ * G_TYPE_IS_DERIVED:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is derived (or in object-oriented terminology:
+ * inherited) from another type (this holds true for all non-fundamental
+ * types).
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_DERIVED(type)                 ((type) > G_TYPE_FUNDAMENTAL_MAX)
+/**
+ * G_TYPE_IS_INTERFACE:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is an interface type.
+ * An interface type provides a pure API, the implementation
+ * of which is provided by another type (which is then said to conform
+ * to the interface).  GLib interfaces are somewhat analogous to Java
+ * interfaces and C++ classes containing only pure virtual functions, 
+ * with the difference that GType interfaces are not derivable (but see
+ * g_type_interface_add_prerequisite() for an alternative).
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_INTERFACE(type)               (G_TYPE_FUNDAMENTAL (type) == G_TYPE_INTERFACE)
+/**
+ * G_TYPE_IS_CLASSED:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is a classed type.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_CLASSED(type)                 (g_type_test_flags ((type), G_TYPE_FLAG_CLASSED))
+/**
+ * G_TYPE_IS_INSTANTIATABLE:
+ * @type: A #GType value.
+ * 
+ * Checks if @type can be instantiated.  Instantiation is the
+ * process of creating an instance (object) of this type.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_INSTANTIATABLE(type)          (g_type_test_flags ((type), G_TYPE_FLAG_INSTANTIATABLE))
+/**
+ * G_TYPE_IS_DERIVABLE:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is a derivable type.  A derivable type can
+ * be used as the base class of a flat (single-level) class hierarchy.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_DERIVABLE(type)               (g_type_test_flags ((type), G_TYPE_FLAG_DERIVABLE))
+/**
+ * G_TYPE_IS_DEEP_DERIVABLE:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is a deep derivable type.  A deep derivable type
+ * can be used as the base class of a deep (multi-level) class hierarchy.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_DEEP_DERIVABLE(type)          (g_type_test_flags ((type), G_TYPE_FLAG_DEEP_DERIVABLE))
+/**
+ * G_TYPE_IS_ABSTRACT:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is an abstract type.  An abstract type can not be
+ * instantiated and is normally used as an abstract base class for
+ * derived classes.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
+/**
+ * G_TYPE_IS_VALUE_ABSTRACT:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is an abstract value type.  An abstract value type introduces
+ * a value table, but can't be used for g_value_init() and is normally used as
+ * an abstract base type for derived value types.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_VALUE_ABSTRACT(type)          (g_type_test_flags ((type), G_TYPE_FLAG_VALUE_ABSTRACT))
+/**
+ * G_TYPE_IS_VALUE_TYPE:
+ * @type: A #GType value.
+ * 
+ * Checks if @type is a value type and can be used with g_value_init(). 
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_IS_VALUE_TYPE(type)              (g_type_check_is_value_type (type))
+/**
+ * G_TYPE_HAS_VALUE_TABLE:
+ * @type: A #GType value.
+ * 
+ * Checks if @type has a #GTypeValueTable.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_HAS_VALUE_TABLE(type)            (g_type_value_table_peek (type) != NULL)
+
+
+/* Typedefs
+ */
+/**
+ * GType:
+ * 
+ * A numerical value which represents the unique identifier of a registered
+ * type.
+ */
+#if     GLIB_SIZEOF_SIZE_T != GLIB_SIZEOF_LONG || !defined __cplusplus
+typedef gsize                           GType;
+#else   /* for historic reasons, C++ links against gulong GTypes */
+typedef gulong                          GType;
+#endif
+typedef struct _GValue                  GValue;
+typedef union  _GTypeCValue             GTypeCValue;
+typedef struct _GTypePlugin             GTypePlugin;
+typedef struct _GTypeClass              GTypeClass;
+typedef struct _GTypeInterface          GTypeInterface;
+typedef struct _GTypeInstance           GTypeInstance;
+typedef struct _GTypeInfo               GTypeInfo;
+typedef struct _GTypeFundamentalInfo    GTypeFundamentalInfo;
+typedef struct _GInterfaceInfo          GInterfaceInfo;
+typedef struct _GTypeValueTable         GTypeValueTable;
+typedef struct _GTypeQuery		GTypeQuery;
+
+
+/* Basic Type Structures
+ */
+/**
+ * GTypeClass:
+ * 
+ * An opaque structure used as the base of all classes.
+ */
+struct _GTypeClass
+{
+  /*< private >*/
+  GType g_type;
+};
+/**
+ * GTypeInstance:
+ * 
+ * An opaque structure used as the base of all type instances.
+ */
+struct _GTypeInstance
+{
+  /*< private >*/
+  GTypeClass *g_class;
+};
+/**
+ * GTypeInterface:
+ * 
+ * An opaque structure used as the base of all interface types.
+ */
+struct _GTypeInterface
+{
+  /*< private >*/
+  GType g_type;         /* iface type */
+  GType g_instance_type;
+};
+/**
+ * GTypeQuery:
+ * @type: the #GType value of the type.
+ * @type_name: the name of the type.
+ * @class_size: the size of the class structure.
+ * @instance_size: the size of the instance structure.
+ * 
+ * A structure holding information for a specific type. It is
+ * filled in by the g_type_query() function.
+ */
+struct _GTypeQuery
+{
+  GType		type;
+  const gchar  *type_name;
+  guint		class_size;
+  guint		instance_size;
+};
+
+
+/* Casts, checks and accessors for structured types
+ * usage of these macros is reserved to type implementations only
+ */
+/*< protected >*/
+/**
+ * G_TYPE_CHECK_INSTANCE:
+ * @instance: Location of a #GTypeInstance structure.
+ * 
+ * Checks if @instance is a valid #GTypeInstance structure,
+ * otherwise issues a warning and returns %FALSE.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_CHECK_INSTANCE(instance)				(_G_TYPE_CHI ((GTypeInstance*) (instance)))
+/**
+ * G_TYPE_CHECK_INSTANCE_CAST:
+ * @instance: Location of a #GTypeInstance structure.
+ * @g_type: The type to be returned.
+ * @c_type: The corresponding C type of @g_type.
+ * 
+ * Checks that @instance is an instance of the type identified by @g_type
+ * and issues a warning if this is not the case. Returns @instance casted 
+ * to a pointer to @c_type.
+ * 
+ * This macro should only be used in type implementations.
+ */
+#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
+/**
+ * G_TYPE_CHECK_INSTANCE_TYPE:
+ * @instance: Location of a #GTypeInstance structure.
+ * @g_type: The type to be checked
+ * 
+ * Checks if @instance is an instance of the type identified by @g_type.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
+/**
+ * G_TYPE_INSTANCE_GET_CLASS:
+ * @instance: Location of the #GTypeInstance structure.
+ * @g_type: The #GType of the class to be returned.
+ * @c_type: The C type of the class structure.
+ * 
+ * Get the class structure of a given @instance, casted
+ * to a specified ancestor type @g_type of the instance.
+ * 
+ * Note that while calling a GInstanceInitFunc(), the class pointer gets
+ * modified, so it might not always return the expected pointer.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: a pointer to the class structure
+ */
+#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
+/**
+ * G_TYPE_INSTANCE_GET_INTERFACE:
+ * @instance: Location of the #GTypeInstance structure.
+ * @g_type: The #GType of the interface to be returned.
+ * @c_type: The C type of the interface structure.
+ * 
+ * Get the interface structure for interface @g_type of a given @instance.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: a pointer to the interface structure
+ */
+#define G_TYPE_INSTANCE_GET_INTERFACE(instance, g_type, c_type) (_G_TYPE_IGI ((instance), (g_type), c_type))
+/**
+ * G_TYPE_CHECK_CLASS_CAST:
+ * @g_class: Location of a #GTypeClass structure.
+ * @g_type: The type to be returned.
+ * @c_type: The corresponding C type of class structure of @g_type.
+ * 
+ * Checks that @g_class is a class structure of the type identified by @g_type
+ * and issues a warning if this is not the case. Returns @g_class casted 
+ * to a pointer to @c_type.
+ * 
+ * This macro should only be used in type implementations.
+ */
+#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
+/**
+ * G_TYPE_CHECK_CLASS_TYPE:
+ * @g_class: Location of a #GTypeClass structure.
+ * @g_type: The type to be checked.
+ * 
+ * Checks if @g_class is a class structure of the type identified by 
+ * @g_type.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_CHECK_CLASS_TYPE(g_class, g_type)                (_G_TYPE_CCT ((g_class), (g_type)))
+/**
+ * G_TYPE_CHECK_VALUE:
+ * @value: a #GValue
+ * 
+ * Checks if @value has been initialized to hold values
+ * of a value type.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_CHECK_VALUE(value)				(_G_TYPE_CHV ((value)))
+/**
+ * G_TYPE_CHECK_VALUE_TYPE:
+ * @value: a #GValue
+ * @g_type: The type to be checked.
+ * 
+ * Checks if @value has been initialized to hold values
+ * of type @g_type. 
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: %TRUE on success.
+ */
+#define G_TYPE_CHECK_VALUE_TYPE(value, g_type)			(_G_TYPE_CVH ((value), (g_type)))
+/**
+ * G_TYPE_FROM_INSTANCE:
+ * @instance: Location of a valid #GTypeInstance structure.
+ * 
+ * Get the type identifier from a given @instance structure. 
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: the #GType
+ */
+#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
+/**
+ * G_TYPE_FROM_CLASS:
+ * @g_class: Location of a valid #GTypeClass structure.
+ * 
+ * Get the type identifier from a given @class structure.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: the #GType
+ */
+#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
+/**
+ * G_TYPE_FROM_INTERFACE:
+ * @g_iface: Location of a valid #GTypeInterface structure.
+ * 
+ * Get the type identifier from a given @interface structure.
+ * 
+ * This macro should only be used in type implementations.
+ *
+ * Returns: the #GType
+ */
+#define G_TYPE_FROM_INTERFACE(g_iface)                          (((GTypeInterface*) (g_iface))->g_type)
+
+/**
+ * G_TYPE_INSTANCE_GET_PRIVATE:
+ * @instance: the instance of a type deriving from @private_type.
+ * @g_type: the type identifying which private data to retrieve.
+ * @c_type: The C type for the private structure.
+ * 
+ * Gets the private structure for a particular type.
+ * The private structure must have been registered in the
+ * class_init function with g_type_class_add_private().
+ * 
+ * This macro should only be used in type implementations.
+ * 
+ * Since: 2.4
+ * Returns: a pointer to the private data structure.
+ */
+#define G_TYPE_INSTANCE_GET_PRIVATE(instance, g_type, c_type)   ((c_type*) g_type_instance_get_private ((GTypeInstance*) (instance), (g_type)))
+
+
+/**
+ * GTypeDebugFlags:
+ * @G_TYPE_DEBUG_NONE: Print no messages.
+ * @G_TYPE_DEBUG_OBJECTS: Print messages about object bookkeeping.
+ * @G_TYPE_DEBUG_SIGNALS: Print messages about signal emissions.
+ * @G_TYPE_DEBUG_MASK: Mask covering all debug flags.
+ * 
+ * The <type>GTypeDebugFlags</type> enumeration values can be passed to
+ * g_type_init_with_debug_flags() to trigger debugging messages during runtime.
+ * Note that the messages can also be triggered by setting the
+ * <envar>GOBJECT_DEBUG</envar> environment variable to a ':'-separated list of 
+ * "objects" and "signals".
+ */
+typedef enum	/*< skip >*/
+{
+  G_TYPE_DEBUG_NONE	= 0,
+  G_TYPE_DEBUG_OBJECTS	= 1 << 0,
+  G_TYPE_DEBUG_SIGNALS	= 1 << 1,
+  G_TYPE_DEBUG_MASK	= 0x03
+} GTypeDebugFlags;
+
+
+/* --- prototypes --- */
+void                  g_type_init                    (void);
+void                  g_type_init_with_debug_flags   (GTypeDebugFlags  debug_flags);
+G_CONST_RETURN gchar* g_type_name                    (GType            type);
+GQuark                g_type_qname                   (GType            type);
+GType                 g_type_from_name               (const gchar     *name);
+GType                 g_type_parent                  (GType            type);
+guint                 g_type_depth                   (GType            type);
+GType                 g_type_next_base               (GType            leaf_type,
+						      GType            root_type);
+gboolean              g_type_is_a                    (GType            type,
+						      GType            is_a_type);
+gpointer              g_type_class_ref               (GType            type);
+gpointer              g_type_class_peek              (GType            type);
+gpointer              g_type_class_peek_static       (GType            type);
+void                  g_type_class_unref             (gpointer         g_class);
+gpointer              g_type_class_peek_parent       (gpointer         g_class);
+gpointer              g_type_interface_peek          (gpointer         instance_class,
+						      GType            iface_type);
+gpointer              g_type_interface_peek_parent   (gpointer         g_iface);
+
+gpointer              g_type_default_interface_ref   (GType            g_type);
+gpointer              g_type_default_interface_peek  (GType            g_type);
+void                  g_type_default_interface_unref (gpointer         g_iface);
+
+/* g_free() the returned arrays */
+GType*                g_type_children                (GType            type,
+						      guint           *n_children);
+GType*                g_type_interfaces              (GType            type,
+						      guint           *n_interfaces);
+
+/* per-type _static_ data */
+void                  g_type_set_qdata               (GType            type,
+						      GQuark           quark,
+						      gpointer         data);
+gpointer              g_type_get_qdata               (GType            type,
+						      GQuark           quark);
+void		      g_type_query		     (GType	       type,
+						      GTypeQuery      *query);
+
+
+/* --- type registration --- */
+/**
+ * GBaseInitFunc:
+ * @g_class: The #GTypeClass structure to initialize.
+ * 
+ * A callback function used by the type system to do base initialization
+ * of the class structures of derived types. It is called as part of the
+ * initialization process of all derived classes and should reallocate
+ * or reset all dynamic class members copied over from the parent class.
+ * For example, class members (such as strings) that are not sufficiently
+ * handled by a plain memory copy of the parent class into the derived class
+ * have to be altered. See GClassInitFunc() for a discussion of the class
+ * intialization process.
+ */
+typedef void   (*GBaseInitFunc)              (gpointer         g_class);
+/**
+ * GBaseFinalizeFunc:
+ * @g_class: The #GTypeClass structure to finalize.
+ * 
+ * A callback function used by the type system to finalize those portions
+ * of a derived types class structure that were setup from the corresponding
+ * GBaseInitFunc() function. Class finalization basically works the inverse
+ * way in which class intialization is performed.
+ * See GClassInitFunc() for a discussion of the class intialization process.
+ */
+typedef void   (*GBaseFinalizeFunc)          (gpointer         g_class);
+/**
+ * GClassInitFunc:
+ * @g_class: The #GTypeClass structure to initialize.
+ * @class_data: The @class_data member supplied via the #GTypeInfo structure.
+ * 
+ * A callback function used by the type system to initialize the class
+ * of a specific type. This function should initialize all static class
+ * members.
+ * The initialization process of a class involves:
+ * <itemizedlist>
+ * <listitem><para>
+ * 	1 - Copying common members from the parent class over to the
+ * 	derived class structure.
+ * </para></listitem>
+ * <listitem><para>
+ * 	2 -  Zero initialization of the remaining members not copied
+ * 	over from the parent class.
+ * </para></listitem>
+ * <listitem><para>
+ * 	3 - Invocation of the GBaseInitFunc() initializers of all parent
+ * 	types and the class' type.
+ * </para></listitem>
+ * <listitem><para>
+ * 	4 - Invocation of the class' GClassInitFunc() initializer.
+ * </para></listitem>
+ * </itemizedlist>
+ * Since derived classes are partially initialized through a memory copy
+ * of the parent class, the general rule is that GBaseInitFunc() and
+ * GBaseFinalizeFunc() should take care of necessary reinitialization
+ * and release of those class members that were introduced by the type
+ * that specified these GBaseInitFunc()/GBaseFinalizeFunc().
+ * GClassInitFunc() should only care about initializing static
+ * class members, while dynamic class members (such as allocated strings
+ * or reference counted resources) are better handled by a GBaseInitFunc()
+ * for this type, so proper initialization of the dynamic class members
+ * is performed for class initialization of derived types as well.
+ * An example may help to correspond the intend of the different class
+ * initializers:
+ * 
+ * |[
+ * typedef struct {
+ *   GObjectClass parent_class;
+ *   gint         static_integer;
+ *   gchar       *dynamic_string;
+ * } TypeAClass;
+ * static void
+ * type_a_base_class_init (TypeAClass *class)
+ * {
+ *   class->dynamic_string = g_strdup ("some string");
+ * }
+ * static void
+ * type_a_base_class_finalize (TypeAClass *class)
+ * {
+ *   g_free (class->dynamic_string);
+ * }
+ * static void
+ * type_a_class_init (TypeAClass *class)
+ * {
+ *   class->static_integer = 42;
+ * }
+ * 
+ * typedef struct {
+ *   TypeAClass   parent_class;
+ *   gfloat       static_float;
+ *   GString     *dynamic_gstring;
+ * } TypeBClass;
+ * static void
+ * type_b_base_class_init (TypeBClass *class)
+ * {
+ *   class->dynamic_gstring = g_string_new ("some other string");
+ * }
+ * static void
+ * type_b_base_class_finalize (TypeBClass *class)
+ * {
+ *   g_string_free (class->dynamic_gstring);
+ * }
+ * static void
+ * type_b_class_init (TypeBClass *class)
+ * {
+ *   class->static_float = 3.14159265358979323846;
+ * }
+ * ]|
+ * Initialization of TypeBClass will first cause initialization of
+ * TypeAClass (derived classes reference their parent classes, see
+ * g_type_class_ref() on this).
+ * Initialization of TypeAClass roughly involves zero-initializing its fields,
+ * then calling its GBaseInitFunc() type_a_base_class_init() to allocate
+ * its dynamic members (dynamic_string), and finally calling its GClassInitFunc()
+ * type_a_class_init() to initialize its static members (static_integer).
+ * The first step in the initialization process of TypeBClass is then
+ * a plain memory copy of the contents of TypeAClass into TypeBClass and 
+ * zero-initialization of the remaining fields in TypeBClass.
+ * The dynamic members of TypeAClass within TypeBClass now need
+ * reinitialization which is performed by calling type_a_base_class_init()
+ * with an argument of TypeBClass.
+ * After that, the GBaseInitFunc() of TypeBClass, type_b_base_class_init()
+ * is called to allocate the dynamic members of TypeBClass (dynamic_gstring),
+ * and finally the GClassInitFunc() of TypeBClass, type_b_class_init(),
+ * is called to complete the initialization process with the static members
+ * (static_float).
+ * Corresponding finalization counter parts to the GBaseInitFunc() functions
+ * have to be provided to release allocated resources at class finalization
+ * time.
+ */
+typedef void   (*GClassInitFunc)             (gpointer         g_class,
+					      gpointer         class_data);
+/**
+ * GClassFinalizeFunc:
+ * @g_class: The #GTypeClass structure to finalize.
+ * @class_data: The @class_data member supplied via the #GTypeInfo structure.
+ * 
+ * A callback function used by the type system to finalize a class.
+ * This function is rarely needed, as dynamically allocated class resources
+ * should be handled by GBaseInitFunc() and GBaseFinalizeFunc().
+ * Also, specification of a GClassFinalizeFunc() in the #GTypeInfo
+ * structure of a static type is invalid, because classes of static types
+ * will never be finalized (they are artificially kept alive when their
+ * reference count drops to zero).
+ */
+typedef void   (*GClassFinalizeFunc)         (gpointer         g_class,
+					      gpointer         class_data);
+/**
+ * GInstanceInitFunc:
+ * @instance: The instance to initialize.
+ * @g_class: The class of the type the instance is created for.
+ * 
+ * A callback function used by the type system to initialize a new
+ * instance of a type. This function initializes all instance members and
+ * allocates any resources required by it.
+ * Initialization of a derived instance involves calling all its parent
+ * types instance initializers, so the class member of the instance
+ * is altered during its initialization to always point to the class that
+ * belongs to the type the current initializer was introduced for.
+ */
+typedef void   (*GInstanceInitFunc)          (GTypeInstance   *instance,
+					      gpointer         g_class);
+/**
+ * GInterfaceInitFunc:
+ * @g_iface: The interface structure to initialize.
+ * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure.
+ * 
+ * A callback function used by the type system to initialize a new
+ * interface.  This function should initialize all internal data and
+ * allocate any resources required by the interface.
+ */
+typedef void   (*GInterfaceInitFunc)         (gpointer         g_iface,
+					      gpointer         iface_data);
+/**
+ * GInterfaceFinalizeFunc:
+ * @g_iface: The interface structure to finalize.
+ * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure.
+ * 
+ * A callback function used by the type system to finalize an interface.
+ * This function should destroy any internal data and release any resources
+ * allocated by the corresponding GInterfaceInitFunc() function.
+ */
+typedef void   (*GInterfaceFinalizeFunc)     (gpointer         g_iface,
+					      gpointer         iface_data);
+/**
+ * GTypeClassCacheFunc:
+ * @cache_data: data that was given to the g_type_add_class_cache_func() call
+ * @g_class: The #GTypeClass structure which is unreferenced
+ * 
+ * A callback function which is called when the reference count of a class 
+ * drops to zero. It may use g_type_class_ref() to prevent the class from
+ * being freed. You should not call g_type_class_unref() from a 
+ * #GTypeClassCacheFunc function to prevent infinite recursion, use 
+ * g_type_class_unref_uncached() instead.
+ * 
+ * The functions have to check the class id passed in to figure 
+ * whether they actually want to cache the class of this type, since all
+ * classes are routed through the same #GTypeClassCacheFunc chain.
+ * 
+ * Returns: %TRUE to stop further #GTypeClassCacheFunc<!-- -->s from being 
+ *  called, %FALSE to continue.
+ */
+typedef gboolean (*GTypeClassCacheFunc)	     (gpointer	       cache_data,
+					      GTypeClass      *g_class);
+/**
+ * GTypeInterfaceCheckFunc:
+ * @check_data: data passed to g_type_add_interface_check().
+ * @g_iface: the interface that has been initialized
+ * 
+ * A callback called after an interface vtable is initialized.
+ * See g_type_add_interface_check().
+ * 
+ * Since: 2.4
+ */
+typedef void     (*GTypeInterfaceCheckFunc)  (gpointer	       check_data,
+					      gpointer         g_iface);
+/**
+ * GTypeFundamentalFlags:
+ * @G_TYPE_FLAG_CLASSED: Indicates a classed type.
+ * @G_TYPE_FLAG_INSTANTIATABLE: Indicates an instantiable type (implies classed).
+ * @G_TYPE_FLAG_DERIVABLE: Indicates a flat derivable type.
+ * @G_TYPE_FLAG_DEEP_DERIVABLE: Indicates a deep derivable type (implies derivable).
+ * 
+ * Bit masks used to check or determine specific characteristics of a
+ * fundamental type.
+ */
+typedef enum    /*< skip >*/
+{
+  G_TYPE_FLAG_CLASSED           = (1 << 0),
+  G_TYPE_FLAG_INSTANTIATABLE    = (1 << 1),
+  G_TYPE_FLAG_DERIVABLE         = (1 << 2),
+  G_TYPE_FLAG_DEEP_DERIVABLE    = (1 << 3)
+} GTypeFundamentalFlags;
+/**
+ * GTypeFlags:
+ * @G_TYPE_FLAG_ABSTRACT: Indicates an abstract type. No instances can be
+ *  created for an abstract type.
+ * @G_TYPE_FLAG_VALUE_ABSTRACT: Indicates an abstract value type, i.e. a type
+ *  that introduces a value table, but can't be used for
+ *  g_value_init().
+ * 
+ * Bit masks used to check or determine characteristics of a type.
+ */
+typedef enum    /*< skip >*/
+{
+  G_TYPE_FLAG_ABSTRACT		= (1 << 4),
+  G_TYPE_FLAG_VALUE_ABSTRACT	= (1 << 5)
+} GTypeFlags;
+/**
+ * GTypeInfo:
+ * @class_size: Size of the class structure (required for interface, classed and instantiatable types).
+ * @base_init: Location of the base initialization function (optional).
+ * @base_finalize: Location of the base finalization function (optional).
+ * @class_init: Location of the class initialization function for
+ *  classed and instantiatable types. Location of the default vtable 
+ *  inititalization function for interface types. (optional) This function 
+ *  is used both to fill in virtual functions in the class or default vtable, 
+ *  and to do type-specific setup such as registering signals and object
+ *  properties.
+ * @class_finalize: Location of the class finalization function for
+ *  classed and instantiatable types. Location fo the default vtable 
+ *  finalization function for interface types. (optional)
+ * @class_data: User-supplied data passed to the class init/finalize functions.
+ * @instance_size: Size of the instance (object) structure (required for instantiatable types only).
+ * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the <link linkend="glib-Memory-Slices">slice allocator</link> now.
+ * @instance_init: Location of the instance initialization function (optional, for instantiatable types only).
+ * @value_table: A #GTypeValueTable function table for generic handling of GValues of this type (usually only
+ *  useful for fundamental types).
+ * 
+ * This structure is used to provide the type system with the information
+ * required to initialize and destruct (finalize) a type's class and
+ * its instances.
+ * The initialized structure is passed to the g_type_register_static() function
+ * (or is copied into the provided #GTypeInfo structure in the
+ * g_type_plugin_complete_type_info()). The type system will perform a deep
+ * copy of this structure, so its memory does not need to be persistent
+ * across invocation of g_type_register_static().
+ */
+struct _GTypeInfo
+{
+  /* interface types, classed types, instantiated types */
+  guint16                class_size;
+  
+  GBaseInitFunc          base_init;
+  GBaseFinalizeFunc      base_finalize;
+  
+  /* interface types, classed types, instantiated types */
+  GClassInitFunc         class_init;
+  GClassFinalizeFunc     class_finalize;
+  gconstpointer          class_data;
+  
+  /* instantiated types */
+  guint16                instance_size;
+  guint16                n_preallocs;
+  GInstanceInitFunc      instance_init;
+  
+  /* value handling */
+  const GTypeValueTable	*value_table;
+};
+/**
+ * GTypeFundamentalInfo:
+ * @type_flags: #GTypeFundamentalFlags describing the characteristics of the fundamental type
+ * 
+ * A structure that provides information to the type system which is
+ * used specifically for managing fundamental types.  
+ */
+struct _GTypeFundamentalInfo
+{
+  GTypeFundamentalFlags  type_flags;
+};
+/**
+ * GInterfaceInfo:
+ * @interface_init: location of the interface initialization function
+ * @interface_finalize: location of the interface finalization function
+ * @interface_data: user-supplied data passed to the interface init/finalize functions
+ * 
+ * A structure that provides information to the type system which is
+ * used specifically for managing interface types.
+ */
+struct _GInterfaceInfo
+{
+  GInterfaceInitFunc     interface_init;
+  GInterfaceFinalizeFunc interface_finalize;
+  gpointer               interface_data;
+};
+/**
+ * GTypeValueTable:
+ * @value_init: Default initialize @values contents by poking values
+ *  directly into the value->data array. The data array of
+ *  the #GValue passed into this function was zero-filled
+ *  with <function>memset()</function>, so no care has to
+ *  be taken to free any
+ *  old contents. E.g. for the implementation of a string
+ *  value that may never be %NULL, the implementation might
+ *  look like:
+ *  |[
+ *  value->data[0].v_pointer = g_strdup ("");
+ *  ]|
+ * @value_free: Free any old contents that might be left in the
+ *  data array of the passed in @value. No resources may
+ *  remain allocated through the #GValue contents after
+ *  this function returns. E.g. for our above string type:
+ *  |[
+ *  // only free strings without a specific flag for static storage
+ *  if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+ *    g_free (value->data[0].v_pointer);
+ *  ]|
+ * @value_copy: @dest_value is a #GValue with zero-filled data section
+ *  and @src_value is a properly setup #GValue of same or
+ *  derived type.
+ *  The purpose of this function is to copy the contents of
+ *  @src_value into @dest_value in a way, that even after
+ *  @src_value has been freed, the contents of @dest_value
+ *  remain valid. String type example:
+ *  |[
+ *  dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer);
+ *  ]|
+ * @value_peek_pointer: If the value contents fit into a pointer, such as objects
+ *  or strings, return this pointer, so the caller can peek at
+ *  the current contents. To extend on our above string example:
+ *  |[
+ *  return value->data[0].v_pointer;
+ *  ]|
+ * @collect_format: A string format describing how to collect the contents of
+ *  this value bit-by-bit. Each character in the format represents
+ *  an argument to be collected, and the characters themselves indicate
+ *  the type of the argument. Currently supported arguments are:
+ *  <variablelist>
+ *  <varlistentry><term /><listitem><para>
+ *  'i' - Integers. passed as collect_values[].v_int.
+ *  </para></listitem></varlistentry>
+ *  <varlistentry><term /><listitem><para>
+ *  'l' - Longs. passed as collect_values[].v_long.
+ *  </para></listitem></varlistentry>
+ *  <varlistentry><term /><listitem><para>
+ *  'd' - Doubles. passed as collect_values[].v_double.
+ *  </para></listitem></varlistentry>
+ *  <varlistentry><term /><listitem><para>
+ *  'p' - Pointers. passed as collect_values[].v_pointer.
+ *  </para></listitem></varlistentry>
+ *  </variablelist>
+ *  It should be noted that for variable argument list construction,
+ *  ANSI C promotes every type smaller than an integer to an int, and
+ *  floats to doubles. So for collection of short int or char, 'i'
+ *  needs to be used, and for collection of floats 'd'.
+ * @collect_value: The collect_value() function is responsible for converting the
+ *  values collected from a variable argument list into contents
+ *  suitable for storage in a GValue. This function should setup
+ *  @value similar to value_init(); e.g. for a string value that
+ *  does not allow %NULL pointers, it needs to either spew an error,
+ *  or do an implicit conversion by storing an empty string.
+ *  The @value passed in to this function has a zero-filled data
+ *  array, so just like for value_init() it is guaranteed to not
+ *  contain any old contents that might need freeing.
+ *  @n_collect_values is exactly the string length of @collect_format,
+ *  and @collect_values is an array of unions #GTypeCValue with
+ *  length @n_collect_values, containing the collected values
+ *  according to @collect_format.
+ *  @collect_flags is an argument provided as a hint by the caller.
+ *  It may contain the flag %G_VALUE_NOCOPY_CONTENTS indicating,
+ *  that the collected value contents may be considered "static"
+ *  for the duration of the @value lifetime.
+ *  Thus an extra copy of the contents stored in @collect_values is
+ *  not required for assignment to @value.
+ *  For our above string example, we continue with:
+ *  |[
+ *  if (!collect_values[0].v_pointer)
+ *    value->data[0].v_pointer = g_strdup ("");
+ *  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+ *  {
+ *    value->data[0].v_pointer = collect_values[0].v_pointer;
+ *    // keep a flag for the value_free() implementation to not free this string
+ *    value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
+ *  }
+ *  else
+ *    value->data[0].v_pointer = g_strdup (collect_values[0].v_pointer);
+ *  return NULL;
+ *  ]|
+ *  It should be noted, that it is generally a bad idea to follow the
+ *  #G_VALUE_NOCOPY_CONTENTS hint for reference counted types. Due to
+ *  reentrancy requirements and reference count assertions performed
+ *  by the #GSignal code, reference counts should always be incremented
+ *  for reference counted contents stored in the value->data array.
+ *  To deviate from our string example for a moment, and taking a look
+ *  at an exemplary implementation for collect_value() of #GObject:
+ *  |[
+ *  if (collect_values[0].v_pointer)
+ *  {
+ *    GObject *object = G_OBJECT (collect_values[0].v_pointer);
+ *    // never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types
+ *    value->data[0].v_pointer = g_object_ref (object);
+ *    return NULL;
+ *  }
+ *  else
+ *    return g_strdup_printf ("Object passed as invalid NULL pointer");
+ *  }
+ *  ]|
+ *  The reference count for valid objects is always incremented,
+ *  regardless of @collect_flags. For invalid objects, the example
+ *  returns a newly allocated string without altering @value.
+ *  Upon success, collect_value() needs to return %NULL. If, however,
+ *  an error condition occurred, collect_value() may spew an
+ *  error by returning a newly allocated non-%NULL string, giving
+ *  a suitable description of the error condition.
+ *  The calling code makes no assumptions about the @value
+ *  contents being valid upon error returns, @value
+ *  is simply thrown away without further freeing. As such, it is
+ *  a good idea to not allocate #GValue contents, prior to returning
+ *  an error, however, collect_values() is not obliged to return
+ *  a correctly setup @value for error returns, simply because
+ *  any non-%NULL return is considered a fatal condition so further
+ *  program behaviour is undefined.
+ * @lcopy_format: Format description of the arguments to collect for @lcopy_value,
+ *  analogous to @collect_format. Usually, @lcopy_format string consists
+ *  only of 'p's to provide lcopy_value() with pointers to storage locations.
+ * @lcopy_value: This function is responsible for storing the @value contents into
+ *  arguments passed through a variable argument list which got
+ *  collected into @collect_values according to @lcopy_format.
+ *  @n_collect_values equals the string length of @lcopy_format,
+ *  and @collect_flags may contain %G_VALUE_NOCOPY_CONTENTS.
+ *  In contrast to collect_value(), lcopy_value() is obliged to
+ *  always properly support %G_VALUE_NOCOPY_CONTENTS.
+ *  Similar to collect_value() the function may prematurely abort
+ *  by returning a newly allocated string describing an error condition.
+ *  To complete the string example:
+ *  |[
+ *  gchar **string_p = collect_values[0].v_pointer;
+ *  if (!string_p)
+ *    return g_strdup_printf ("string location passed as NULL");
+ *  if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+ *    *string_p = value->data[0].v_pointer;
+ *  else
+ *    *string_p = g_strdup (value->data[0].v_pointer);
+ *  ]|
+ *  And an illustrative version of lcopy_value() for
+ *  reference-counted types:
+ *  |[
+ *  GObject **object_p = collect_values[0].v_pointer;
+ *  if (!object_p)
+ *    return g_strdup_printf ("object location passed as NULL");
+ *  if (!value->data[0].v_pointer)
+ *    *object_p = NULL;
+ *  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) // always honour
+ *    *object_p = value->data[0].v_pointer;
+ *  else
+ *    *object_p = g_object_ref (value->data[0].v_pointer);
+ *  return NULL;
+ *  ]|
+ * 
+ * The #GTypeValueTable provides the functions required by the #GValue implementation,
+ * to serve as a container for values of a type.
+ */
+
+struct _GTypeValueTable
+{
+  void     (*value_init)         (GValue       *value);
+  void     (*value_free)         (GValue       *value);
+  void     (*value_copy)         (const GValue *src_value,
+				  GValue       *dest_value);
+  /* varargs functionality (optional) */
+  gpointer (*value_peek_pointer) (const GValue *value);
+  gchar	    *collect_format;
+  gchar*   (*collect_value)      (GValue       *value,
+				  guint         n_collect_values,
+				  GTypeCValue  *collect_values,
+				  guint		collect_flags);
+  gchar	    *lcopy_format;
+  gchar*   (*lcopy_value)        (const GValue *value,
+				  guint         n_collect_values,
+				  GTypeCValue  *collect_values,
+				  guint		collect_flags);
+};
+GType g_type_register_static		(GType			     parent_type,
+					 const gchar		    *type_name,
+					 const GTypeInfo	    *info,
+					 GTypeFlags		     flags);
+GType g_type_register_static_simple     (GType                       parent_type,
+					 const gchar                *type_name,
+					 guint                       class_size,
+					 GClassInitFunc              class_init,
+					 guint                       instance_size,
+					 GInstanceInitFunc           instance_init,
+					 GTypeFlags	             flags);
+  
+GType g_type_register_dynamic		(GType			     parent_type,
+					 const gchar		    *type_name,
+					 GTypePlugin		    *plugin,
+					 GTypeFlags		     flags);
+GType g_type_register_fundamental	(GType			     type_id,
+					 const gchar		    *type_name,
+					 const GTypeInfo	    *info,
+					 const GTypeFundamentalInfo *finfo,
+					 GTypeFlags		     flags);
+void  g_type_add_interface_static	(GType			     instance_type,
+					 GType			     interface_type,
+					 const GInterfaceInfo	    *info);
+void  g_type_add_interface_dynamic	(GType			     instance_type,
+					 GType			     interface_type,
+					 GTypePlugin		    *plugin);
+void  g_type_interface_add_prerequisite (GType			     interface_type,
+					 GType			     prerequisite_type);
+GType*g_type_interface_prerequisites    (GType                       interface_type,
+					 guint                      *n_prerequisites);
+void     g_type_class_add_private       (gpointer                    g_class,
+                                         gsize                       private_size);
+gpointer g_type_instance_get_private    (GTypeInstance              *instance,
+                                         GType                       private_type);
+
+
+/* --- GType boilerplate --- */
+/**
+ * G_DEFINE_TYPE:
+ * @TN: The name of the new type, in Camel case.
+ * @t_n: The name of the new type, in lowercase, with words 
+ *  separated by '_'.
+ * @T_P: The #GType of the parent type.
+ * 
+ * A convenience macro for type implementations, which declares a 
+ * class initialization function, an instance initialization function (see #GTypeInfo for information about 
+ * these) and a static variable named @t_n<!-- -->_parent_class pointing to the parent class. Furthermore, it defines 
+ * a *_get_type() function. See G_DEFINE_TYPE_EXTENDED() for an example.
+ * 
+ * Since: 2.4
+ */
+#define G_DEFINE_TYPE(TN, t_n, T_P)			    G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
+/**
+ * G_DEFINE_TYPE_WITH_CODE:
+ * @TN: The name of the new type, in Camel case.
+ * @t_n: The name of the new type in lowercase, with words separated by '_'.
+ * @T_P: The #GType of the parent type.
+ * @_C_: Custom code that gets inserted in the *_get_type() function.
+ * 
+ * A convenience macro for type implementations.  
+ * Similar to G_DEFINE_TYPE(), but allows to insert custom code into the 
+ * *_get_type() function, e.g. interface implementations via G_IMPLEMENT_INTERFACE().
+ * See G_DEFINE_TYPE_EXTENDED() for an example.
+ * 
+ * Since: 2.4
+ */
+#define G_DEFINE_TYPE_WITH_CODE(TN, t_n, T_P, _C_)	    _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, 0) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
+/**
+ * G_DEFINE_ABSTRACT_TYPE:
+ * @TN: The name of the new type, in Camel case.
+ * @t_n: The name of the new type, in lowercase, with words 
+ *  separated by '_'.
+ * @T_P: The #GType of the parent type.
+ * 
+ * A convenience macro for type implementations. 
+ * Similar to G_DEFINE_TYPE(), but defines an abstract type. 
+ * See G_DEFINE_TYPE_EXTENDED() for an example.
+ * 
+ * Since: 2.4
+ */
+#define G_DEFINE_ABSTRACT_TYPE(TN, t_n, T_P)		    G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {})
+/**
+ * G_DEFINE_ABSTRACT_TYPE_WITH_CODE:
+ * @TN: The name of the new type, in Camel case.
+ * @t_n: The name of the new type, in lowercase, with words 
+ *  separated by '_'.
+ * @T_P: The #GType of the parent type.
+ * @_C_: Custom code that gets inserted in the @type_name_get_type() function.
+ * 
+ * A convenience macro for type implementations.
+ * Similar to G_DEFINE_TYPE_WITH_CODE(), but defines an abstract type and allows to 
+ * insert custom code into the *_get_type() function, e.g. interface implementations 
+ * via G_IMPLEMENT_INTERFACE(). See G_DEFINE_TYPE_EXTENDED() for an example.
+ * 
+ * Since: 2.4
+ */
+#define G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
+/**
+ * G_DEFINE_TYPE_EXTENDED:
+ * @TN: The name of the new type, in Camel case.
+ * @t_n: The name of the new type, in lowercase, with words
+ *    separated by '_'.
+ * @T_P: The #GType of the parent type.
+ * @_f_: #GTypeFlags to pass to g_type_register_static()
+ * @_C_: Custom code that gets inserted in the *_get_type() function.
+ *
+ * The most general convenience macro for type implementations, on which
+ * G_DEFINE_TYPE(), etc are based.
+ *
+ * |[
+ * G_DEFINE_TYPE_EXTENDED (GtkGadget,
+ *                         gtk_gadget,
+ *                         GTK_TYPE_WIDGET,
+ *                         0,
+ *                         G_IMPLEMENT_INTERFACE (TYPE_GIZMO,
+ *                                                gtk_gadget_gizmo_init));
+ * ]|
+ * expands to
+ * |[
+ * static void     gtk_gadget_init       (GtkGadget      *self);
+ * static void     gtk_gadget_class_init (GtkGadgetClass *klass);
+ * static gpointer gtk_gadget_parent_class = NULL;
+ * static void     gtk_gadget_class_intern_init (gpointer klass)
+ * {
+ *   gtk_gadget_parent_class = g_type_class_peek_parent (klass);
+ *   gtk_gadget_class_init ((GtkGadgetClass*) klass);
+ * }
+ *
+ * GType
+ * gtk_gadget_get_type (void)
+ * {
+ *   static volatile gsize g_define_type_id__volatile = 0;
+ *   if (g_once_init_enter (&g_define_type_id__volatile))
+ *     {
+ *       GType g_define_type_id =
+ *         g_type_register_static_simple (GTK_TYPE_WIDGET,
+ *                                        g_intern_static_string ("GtkGadget"),
+ *                                        sizeof (GtkGadgetClass),
+ *                                        (GClassInitFunc) gtk_gadget_class_intern_init,
+ *                                        sizeof (GtkGadget),
+ *                                        (GInstanceInitFunc) gtk_gadget_init,
+ *                                        (GTypeFlags) flags);
+ *       {
+ *         static const GInterfaceInfo g_implement_interface_info = {
+ *           (GInterfaceInitFunc) gtk_gadget_gizmo_init
+ *         };
+ *         g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
+ *       }
+ *       g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ *     }
+ *   return g_define_type_id__volatile;
+ * }
+ * ]|
+ * The only pieces which have to be manually provided are the definitions of
+ * the instance and class structure and the definitions of the instance and
+ * class init functions.
+ *
+ * Since: 2.4
+ */
+#define G_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_)	    _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
+
+/**
+ * G_IMPLEMENT_INTERFACE:
+ * @TYPE_IFACE: The #GType of the interface to add
+ * @iface_init: The interface init function
+ *
+ * A convenience macro to ease interface addition in the @_C_ section
+ * of G_DEFINE_TYPE_WITH_CODE() or G_DEFINE_ABSTRACT_TYPE_WITH_CODE().
+ * See G_DEFINE_TYPE_EXTENDED() for an example.
+ *
+ * Note that this macro can only be used together with the G_DEFINE_TYPE_*
+ * macros, since it depends on variable names from those macros.
+ *
+ * Since: 2.4
+ */
+#define G_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init)       { \
+  const GInterfaceInfo g_implement_interface_info = { \
+    (GInterfaceInitFunc) iface_init, NULL, NULL \
+  }; \
+  g_type_add_interface_static (g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
+}
+
+#define _G_DEFINE_TYPE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PARENT, flags) \
+\
+static void     type_name##_init              (TypeName        *self); \
+static void     type_name##_class_init        (TypeName##Class *klass); \
+static gpointer type_name##_parent_class = NULL; \
+static void     type_name##_class_intern_init (gpointer klass) \
+{ \
+  type_name##_parent_class = g_type_class_peek_parent (klass); \
+  type_name##_class_init ((TypeName##Class*) klass); \
+} \
+\
+GType \
+type_name##_get_type (void) \
+{ \
+  static volatile gsize g_define_type_id__volatile = 0; \
+  if (g_once_init_enter (&g_define_type_id__volatile))  \
+    { \
+      GType g_define_type_id = \
+        g_type_register_static_simple (TYPE_PARENT, \
+                                       g_intern_static_string (#TypeName), \
+                                       sizeof (TypeName##Class), \
+                                       (GClassInitFunc) type_name##_class_intern_init, \
+                                       sizeof (TypeName), \
+                                       (GInstanceInitFunc) type_name##_init, \
+                                       (GTypeFlags) flags); \
+      { /* custom code follows */
+#define _G_DEFINE_TYPE_EXTENDED_END()	\
+        /* following custom code */	\
+      }					\
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+    }					\
+  return g_define_type_id__volatile;	\
+} /* closes type_name##_get_type() */
+
+
+/* --- protected (for fundamental type implementations) --- */
+GTypePlugin*	 g_type_get_plugin		(GType		     type);
+GTypePlugin*	 g_type_interface_get_plugin	(GType		     instance_type,
+						 GType               interface_type);
+GType		 g_type_fundamental_next	(void);
+GType		 g_type_fundamental		(GType		     type_id);
+GTypeInstance*   g_type_create_instance         (GType               type);
+void             g_type_free_instance           (GTypeInstance      *instance);
+
+void		 g_type_add_class_cache_func    (gpointer	     cache_data,
+						 GTypeClassCacheFunc cache_func);
+void		 g_type_remove_class_cache_func (gpointer	     cache_data,
+						 GTypeClassCacheFunc cache_func);
+void             g_type_class_unref_uncached    (gpointer            g_class);
+
+void             g_type_add_interface_check     (gpointer	         check_data,
+						 GTypeInterfaceCheckFunc check_func);
+void             g_type_remove_interface_check  (gpointer	         check_data,
+						 GTypeInterfaceCheckFunc check_func);
+
+GTypeValueTable* g_type_value_table_peek        (GType		     type);
+
+
+/*< private >*/
+gboolean	 g_type_check_instance          (GTypeInstance      *instance) G_GNUC_PURE;
+GTypeInstance*   g_type_check_instance_cast     (GTypeInstance      *instance,
+						 GType               iface_type);
+gboolean         g_type_check_instance_is_a	(GTypeInstance      *instance,
+						 GType               iface_type) G_GNUC_PURE;
+GTypeClass*      g_type_check_class_cast        (GTypeClass         *g_class,
+						 GType               is_a_type);
+gboolean         g_type_check_class_is_a        (GTypeClass         *g_class,
+						 GType               is_a_type) G_GNUC_PURE;
+gboolean	 g_type_check_is_value_type     (GType		     type) G_GNUC_CONST;
+gboolean	 g_type_check_value             (GValue		    *value) G_GNUC_PURE;
+gboolean	 g_type_check_value_holds	(GValue		    *value,
+						 GType		     type) G_GNUC_PURE;
+gboolean         g_type_test_flags              (GType               type,
+						 guint               flags) G_GNUC_CONST;
+
+
+/* --- debugging functions --- */
+G_CONST_RETURN gchar* g_type_name_from_instance	(GTypeInstance	*instance);
+G_CONST_RETURN gchar* g_type_name_from_class	(GTypeClass	*g_class);
+
+
+/* --- internal functions --- */
+G_GNUC_INTERNAL void    g_value_c_init          (void); /* sync with gvalue.c */
+G_GNUC_INTERNAL void    g_value_types_init      (void); /* sync with gvaluetypes.c */
+G_GNUC_INTERNAL void    g_enum_types_init       (void); /* sync with genums.c */
+G_GNUC_INTERNAL void    g_param_type_init       (void); /* sync with gparam.c */
+G_GNUC_INTERNAL void    g_boxed_type_init       (void); /* sync with gboxed.c */
+G_GNUC_INTERNAL void    g_object_type_init      (void); /* sync with gobject.c */
+G_GNUC_INTERNAL void    g_param_spec_types_init (void); /* sync with gparamspecs.c */
+G_GNUC_INTERNAL void    g_value_transforms_init (void); /* sync with gvaluetransform.c */
+G_GNUC_INTERNAL void    g_signal_init           (void); /* sync with gsignal.c */
+
+
+/* --- implementation bits --- */
+#ifndef G_DISABLE_CAST_CHECKS
+#  define _G_TYPE_CIC(ip, gt, ct) \
+    ((ct*) g_type_check_instance_cast ((GTypeInstance*) ip, gt))
+#  define _G_TYPE_CCC(cp, gt, ct) \
+    ((ct*) g_type_check_class_cast ((GTypeClass*) cp, gt))
+#else /* G_DISABLE_CAST_CHECKS */
+#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
+#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
+#endif /* G_DISABLE_CAST_CHECKS */
+#define _G_TYPE_CHI(ip)			(g_type_check_instance ((GTypeInstance*) ip))
+#define _G_TYPE_CHV(vl)			(g_type_check_value ((GValue*) vl))
+#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
+#define _G_TYPE_IGI(ip, gt, ct)         ((ct*) g_type_interface_peek (((GTypeInstance*) ip)->g_class, gt))
+#ifdef	__GNUC__
+#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
+  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
+  if (__inst && __inst->g_class && __inst->g_class->g_type == __t) \
+    __r = TRUE; \
+  else \
+    __r = g_type_check_instance_is_a (__inst, __t); \
+  __r; \
+}))
+#  define _G_TYPE_CCT(cp, gt)             (G_GNUC_EXTENSION ({ \
+  GTypeClass *__class = (GTypeClass*) cp; GType __t = gt; gboolean __r; \
+  if (__class && __class->g_type == __t) \
+    __r = TRUE; \
+  else \
+    __r = g_type_check_class_is_a (__class, __t); \
+  __r; \
+}))
+#  define _G_TYPE_CVH(vl, gt)             (G_GNUC_EXTENSION ({ \
+  GValue *__val = (GValue*) vl; GType __t = gt; gboolean __r; \
+  if (__val && __val->g_type == __t) \
+    __r = TRUE; \
+  else \
+    __r = g_type_check_value_holds (__val, __t); \
+  __r; \
+}))
+#else  /* !__GNUC__ */
+#  define _G_TYPE_CIT(ip, gt)             (g_type_check_instance_is_a ((GTypeInstance*) ip, gt))
+#  define _G_TYPE_CCT(cp, gt)             (g_type_check_class_is_a ((GTypeClass*) cp, gt))
+#  define _G_TYPE_CVH(vl, gt)             (g_type_check_value_holds ((GValue*) vl, gt))
+#endif /* !__GNUC__ */
+/**
+ * G_TYPE_FLAG_RESERVED_ID_BIT:
+ * 
+ * A bit in the type number that's supposed to be left untouched.
+ */
+#define	G_TYPE_FLAG_RESERVED_ID_BIT	((GType) (1 << 0))
+extern GTypeDebugFlags			_g_type_debug_flags;
+
+G_END_DECLS
+
+#endif /* __G_TYPE_H__ */
diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
new file mode 100644
index 0000000..1ba64ad
--- /dev/null
+++ b/gobject/gtypemodule.c
@@ -0,0 +1,586 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include "gtypeplugin.h"
+#include "gtypemodule.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:gtypemodule
+ * @short_description: Type loading modules
+ * @see_also:<variablelist>
+ * <varlistentry>
+ * <term>#GTypePlugin</term>
+ * <listitem><para>The abstract type loader interface.</para></listitem>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#GModule</term>
+ * <listitem><para>Portable mechanism for dynamically loaded modules.</para></listitem>
+ * </varlistentry>
+ * </variablelist>
+ * @title: GTypeModule
+ *
+ * #GTypeModule provides a simple implementation of the #GTypePlugin
+ * interface. The model of #GTypeModule is a dynamically loaded module
+ * which implements some number of types and interface
+ * implementations. When the module is loaded, it registers its types
+ * and interfaces using g_type_module_register_type() and
+ * g_type_module_add_interface().  As long as any instances of these
+ * types and interface implementations are in use, the module is kept
+ * loaded. When the types and interfaces are gone, the module may be
+ * unloaded. If the types and interfaces become used again, the module
+ * will be reloaded. Note that the last unref can not happen in module
+ * code, since that would lead to the caller's code being unloaded before
+ * g_object_unref() returns to it.
+ *
+ * Keeping track of whether the module should be loaded or not is done by
+ * using a use count - it starts at zero, and whenever it is greater than
+ * zero, the module is loaded. The use count is maintained internally by
+ * the type system, but also can be explicitly controlled by
+ * g_type_module_use() and g_type_module_unuse(). Typically, when loading
+ * a module for the first type, g_type_module_use() will be used to load
+ * it so that it can initialize its types. At some later point, when the
+ * module no longer needs to be loaded except for the type
+ * implementations it contains, g_type_module_unuse() is called.
+ *
+ * #GTypeModule does not actually provide any implementation of module
+ * loading and unloading. To create a particular module type you must
+ * derive from #GTypeModule and implement the load and unload functions
+ * in #GTypeModuleClass.
+ */
+
+
+typedef struct _ModuleTypeInfo ModuleTypeInfo;
+typedef struct _ModuleInterfaceInfo ModuleInterfaceInfo;
+
+struct _ModuleTypeInfo 
+{
+  gboolean  loaded;
+  GType     type;
+  GType     parent_type;
+  GTypeInfo info;
+};
+
+struct _ModuleInterfaceInfo 
+{
+  gboolean       loaded;
+  GType          instance_type;
+  GType          interface_type;
+  GInterfaceInfo info;
+};
+
+static void g_type_module_use_plugin              (GTypePlugin     *plugin);
+static void g_type_module_complete_type_info      (GTypePlugin     *plugin,
+						   GType            g_type,
+						   GTypeInfo       *info,
+						   GTypeValueTable *value_table);
+static void g_type_module_complete_interface_info (GTypePlugin     *plugin,
+						   GType            instance_type,
+						   GType            interface_type,
+						   GInterfaceInfo  *info);
+ 
+static gpointer parent_class = NULL;
+
+static void
+g_type_module_dispose (GObject *object)
+{
+  GTypeModule *module = G_TYPE_MODULE (object);
+  
+  if (module->type_infos || module->interface_infos)
+    {
+      g_warning (G_STRLOC ": unsolicitated invocation of g_object_dispose() on GTypeModule");
+	     
+      g_object_ref (object);
+    }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+g_type_module_finalize (GObject *object)
+{
+  GTypeModule *module = G_TYPE_MODULE (object);
+
+  g_free (module->name);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+g_type_module_class_init (GTypeModuleClass *class)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (class));
+  
+  gobject_class->dispose = g_type_module_dispose;
+  gobject_class->finalize = g_type_module_finalize;
+}
+
+static void
+g_type_module_iface_init (GTypePluginClass *iface)
+{
+  iface->use_plugin = g_type_module_use_plugin;
+  iface->unuse_plugin = (void (*) (GTypePlugin *))g_type_module_unuse;
+  iface->complete_type_info = g_type_module_complete_type_info;
+  iface->complete_interface_info = g_type_module_complete_interface_info;
+}
+
+GType
+g_type_module_get_type (void)
+{
+  static GType type_module_type = 0;
+
+  if (!type_module_type)
+    {
+      static const GTypeInfo type_module_info = {
+        sizeof (GTypeModuleClass),
+        NULL,           /* base_init */
+        NULL,           /* base_finalize */
+        (GClassInitFunc) g_type_module_class_init,
+        NULL,           /* class_finalize */
+        NULL,           /* class_data */
+        sizeof (GTypeModule),
+        0,              /* n_preallocs */
+        NULL,           /* instance_init */
+      };
+      static const GInterfaceInfo iface_info = {
+        (GInterfaceInitFunc) g_type_module_iface_init,
+        NULL,               /* interface_finalize */
+        NULL,               /* interface_data */
+      };
+
+      type_module_type = g_type_register_static (G_TYPE_OBJECT, g_intern_static_string ("GTypeModule"), &type_module_info, G_TYPE_FLAG_ABSTRACT);
+
+      g_type_add_interface_static (type_module_type, G_TYPE_TYPE_PLUGIN, &iface_info);
+    }
+  
+  return type_module_type;
+}
+
+/**
+ * g_type_module_set_name:
+ * @module: a #GTypeModule.
+ * @name: a human-readable name to use in error messages.
+ * 
+ * Sets the name for a #GTypeModule 
+ */
+void
+g_type_module_set_name (GTypeModule  *module,
+			const gchar  *name)
+{
+  g_return_if_fail (G_IS_TYPE_MODULE (module));
+
+  g_free (module->name);
+  module->name = g_strdup (name);
+}
+
+static ModuleTypeInfo *
+g_type_module_find_type_info (GTypeModule *module,
+			      GType        type)
+{
+  GSList *tmp_list = module->type_infos;
+  while (tmp_list)
+    {
+      ModuleTypeInfo *type_info = tmp_list->data;
+      if (type_info->type == type)
+	return type_info;
+      
+      tmp_list = tmp_list->next;
+    }
+
+  return NULL;
+}
+
+static ModuleInterfaceInfo *
+g_type_module_find_interface_info (GTypeModule *module,
+				   GType        instance_type,
+				   GType        interface_type)
+{
+  GSList *tmp_list = module->interface_infos;
+  while (tmp_list)
+    {
+      ModuleInterfaceInfo *interface_info = tmp_list->data;
+      if (interface_info->instance_type == instance_type &&
+	  interface_info->interface_type == interface_type)
+	return interface_info;
+      
+      tmp_list = tmp_list->next;
+    }
+
+  return NULL;
+}
+
+/**
+ * g_type_module_use:
+ * @module: a #GTypeModule
+ * 
+ * Increases the use count of a #GTypeModule by one. If the
+ * use count was zero before, the plugin will be loaded.
+ * If loading the plugin fails, the use count is reset to 
+ * its prior value. 
+ * 
+ * Returns: %FALSE if the plugin needed to be loaded and
+ *  loading the plugin failed.
+ */
+gboolean
+g_type_module_use (GTypeModule *module)
+{
+  g_return_val_if_fail (G_IS_TYPE_MODULE (module), FALSE);
+
+  module->use_count++;
+  if (module->use_count == 1)
+    {
+      GSList *tmp_list;
+      
+      if (!G_TYPE_MODULE_GET_CLASS (module)->load (module))
+	{
+	  module->use_count--;
+	  return FALSE;
+	}
+
+      tmp_list = module->type_infos;
+      while (tmp_list)
+	{
+	  ModuleTypeInfo *type_info = tmp_list->data;
+	  if (!type_info->loaded)
+	    {
+	      g_warning ("plugin '%s' failed to register type '%s'\n",
+			 module->name ? module->name : "(unknown)",
+			 g_type_name (type_info->type));
+	      module->use_count--;
+	      return FALSE;
+	    }
+	  
+	  tmp_list = tmp_list->next;
+	}
+    }
+ 
+  return TRUE;
+}
+
+/**
+ * g_type_module_unuse:
+ * @module: a #GTypeModule
+ *
+ * Decreases the use count of a #GTypeModule by one. If the
+ * result is zero, the module will be unloaded. (However, the
+ * #GTypeModule will not be freed, and types associated with the
+ * #GTypeModule are not unregistered. Once a #GTypeModule is
+ * initialized, it must exist forever.)
+ */
+void
+g_type_module_unuse (GTypeModule *module)
+{
+  g_return_if_fail (G_IS_TYPE_MODULE (module));
+  g_return_if_fail (module->use_count > 0);
+
+  module->use_count--;
+
+  if (module->use_count == 0)
+    {
+      GSList *tmp_list;
+
+      G_TYPE_MODULE_GET_CLASS (module)->unload (module);
+
+      tmp_list = module->type_infos;
+      while (tmp_list)
+	{
+	  ModuleTypeInfo *type_info = tmp_list->data;
+	  type_info->loaded = FALSE;
+
+	  tmp_list = tmp_list->next;
+	}
+    }
+}
+	
+static void
+g_type_module_use_plugin (GTypePlugin *plugin)
+{
+  GTypeModule *module = G_TYPE_MODULE (plugin);
+
+  if (!g_type_module_use (module))
+    {
+      g_warning ("Fatal error - Could not reload previously loaded plugin '%s'\n",
+		 module->name ? module->name : "(unknown)");
+      exit (1);
+    }
+}
+
+static void
+g_type_module_complete_type_info (GTypePlugin     *plugin,
+				  GType            g_type,
+				  GTypeInfo       *info,
+				  GTypeValueTable *value_table)
+{
+  GTypeModule *module = G_TYPE_MODULE (plugin);
+  ModuleTypeInfo *module_type_info = g_type_module_find_type_info (module, g_type);
+
+  *info = module_type_info->info;
+  
+  if (module_type_info->info.value_table)
+    *value_table = *module_type_info->info.value_table;
+}
+
+static void 
+g_type_module_complete_interface_info (GTypePlugin    *plugin,
+				       GType           instance_type,
+				       GType           interface_type,
+				       GInterfaceInfo *info)
+{
+  GTypeModule *module = G_TYPE_MODULE (plugin);
+  ModuleInterfaceInfo *module_interface_info = g_type_module_find_interface_info (module, instance_type, interface_type);
+
+  *info = module_interface_info->info;
+}
+
+/**
+ * g_type_module_register_type:
+ * @module: a #GTypeModule
+ * @parent_type: the type for the parent class
+ * @type_name: name for the type
+ * @type_info: type information structure
+ * @flags: flags field providing details about the type
+ *
+ * Looks up or registers a type that is implemented with a particular
+ * type plugin. If a type with name @type_name was previously registered,
+ * the #GType identifier for the type is returned, otherwise the type
+ * is newly registered, and the resulting #GType identifier returned.
+ *
+ * When reregistering a type (typically because a module is unloaded
+ * then reloaded, and reinitialized), @module and @parent_type must
+ * be the same as they were previously.
+ *
+ * As long as any instances of the type exist, the type plugin will
+ * not be unloaded.
+ *
+ * Returns: the new or existing type ID
+ */
+GType
+g_type_module_register_type (GTypeModule     *module,
+			     GType            parent_type,
+			     const gchar     *type_name,
+			     const GTypeInfo *type_info,
+			     GTypeFlags       flags)
+{
+  ModuleTypeInfo *module_type_info = NULL;
+  GType type;
+  
+  g_return_val_if_fail (module != NULL, 0);
+  g_return_val_if_fail (type_name != NULL, 0);
+  g_return_val_if_fail (type_info != NULL, 0);
+
+  type = g_type_from_name (type_name);
+  if (type)
+    {
+      GTypePlugin *old_plugin = g_type_get_plugin (type);
+
+      if (old_plugin != G_TYPE_PLUGIN (module))
+	{
+	  g_warning ("Two different plugins tried to register '%s'.", type_name);
+	  return 0;
+	}
+    }
+
+  if (type)
+    {
+      module_type_info = g_type_module_find_type_info (module, type);
+
+      if (module_type_info->parent_type != parent_type)
+	{
+	  const gchar *parent_type_name = g_type_name (parent_type);
+	  
+	  g_warning ("Type '%s' recreated with different parent type.\n"
+		     "(was '%s', now '%s')", type_name,
+		     g_type_name (module_type_info->parent_type),
+		     parent_type_name ? parent_type_name : "(unknown)");
+	  return 0;
+	}
+
+      if (module_type_info->info.value_table)
+	g_free ((GTypeValueTable *) module_type_info->info.value_table);
+    }
+  else
+    {
+      module_type_info = g_new (ModuleTypeInfo, 1);
+      
+      module_type_info->parent_type = parent_type;
+      module_type_info->type = g_type_register_dynamic (parent_type, type_name, G_TYPE_PLUGIN (module), flags);
+      
+      module->type_infos = g_slist_prepend (module->type_infos, module_type_info);
+    }
+
+  module_type_info->loaded = TRUE;
+  module_type_info->info = *type_info;
+  if (type_info->value_table)
+    module_type_info->info.value_table = g_memdup (type_info->value_table,
+						   sizeof (GTypeValueTable));
+
+  return module_type_info->type;
+}
+
+/**
+ * g_type_module_add_interface:
+ * @module: a #GTypeModule
+ * @instance_type: type to which to add the interface.
+ * @interface_type: interface type to add
+ * @interface_info: type information structure
+ *
+ * Registers an additional interface for a type, whose interface lives
+ * in the given type plugin. If the interface was already registered
+ * for the type in this plugin, nothing will be done.
+ *
+ * As long as any instances of the type exist, the type plugin will
+ * not be unloaded.
+ */
+void
+g_type_module_add_interface (GTypeModule          *module,
+			     GType                 instance_type,
+			     GType                 interface_type,
+			     const GInterfaceInfo *interface_info)
+{
+  ModuleInterfaceInfo *module_interface_info = NULL;
+  
+  g_return_if_fail (module != NULL);
+  g_return_if_fail (interface_info != NULL);
+
+  if (g_type_is_a (instance_type, interface_type))
+    {
+      GTypePlugin *old_plugin = g_type_interface_get_plugin (instance_type,
+							     interface_type);
+
+      if (!old_plugin)
+	{
+	  g_warning ("Interface '%s' for '%s' was previously registered statically or for a parent type.",
+		     g_type_name (interface_type), g_type_name (instance_type));
+	  return;
+	}
+      else if (old_plugin != G_TYPE_PLUGIN (module))
+	{
+	  g_warning ("Two different plugins tried to register interface '%s' for '%s'.",
+		     g_type_name (interface_type), g_type_name (instance_type));
+	  return;
+	}
+      
+      module_interface_info = g_type_module_find_interface_info (module, instance_type, interface_type);
+
+      g_assert (module_interface_info);
+    }
+  else
+    {
+      module_interface_info = g_new (ModuleInterfaceInfo, 1);
+      
+      module_interface_info->instance_type = instance_type;
+      module_interface_info->interface_type = interface_type;
+      
+      g_type_add_interface_dynamic (instance_type, interface_type, G_TYPE_PLUGIN (module));
+      
+      module->interface_infos = g_slist_prepend (module->interface_infos, module_interface_info);
+    }
+  
+  module_interface_info->loaded = TRUE;
+  module_interface_info->info = *interface_info;
+}
+
+/**
+ * g_type_module_register_enum:
+ * @module: a #GTypeModule
+ * @name: name for the type
+ * @const_static_values: an array of #GEnumValue structs for the
+ *                       possible enumeration values. The array is
+ *                       terminated by a struct with all members being
+ *                       0.
+ *
+ * Looks up or registers an enumeration that is implemented with a particular
+ * type plugin. If a type with name @type_name was previously registered,
+ * the #GType identifier for the type is returned, otherwise the type
+ * is newly registered, and the resulting #GType identifier returned.
+ *
+ * As long as any instances of the type exist, the type plugin will
+ * not be unloaded.
+ *
+ * Since: 2.6
+ *
+ * Returns: the new or existing type ID
+ */
+GType
+g_type_module_register_enum (GTypeModule      *module,
+                             const gchar      *name,
+                             const GEnumValue *const_static_values)
+{
+  GTypeInfo enum_type_info = { 0, };
+
+  g_return_val_if_fail (G_IS_TYPE_MODULE (module), 0);
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (const_static_values != NULL, 0);
+
+  g_enum_complete_type_info (G_TYPE_ENUM,
+                             &enum_type_info, const_static_values);
+
+  return g_type_module_register_type (G_TYPE_MODULE (module),
+                                      G_TYPE_ENUM, name, &enum_type_info, 0);
+}
+
+/**
+ * g_type_module_register_flags:
+ * @module: a #GTypeModule
+ * @name: name for the type
+ * @const_static_values: an array of #GFlagsValue structs for the
+ *                       possible flags values. The array is
+ *                       terminated by a struct with all members being
+ *                       0.
+ *
+ * Looks up or registers a flags type that is implemented with a particular
+ * type plugin. If a type with name @type_name was previously registered,
+ * the #GType identifier for the type is returned, otherwise the type
+ * is newly registered, and the resulting #GType identifier returned.
+ *
+ * As long as any instances of the type exist, the type plugin will
+ * not be unloaded.
+ *
+ * Since: 2.6
+ *
+ * Returns: the new or existing type ID
+ */
+GType
+g_type_module_register_flags (GTypeModule      *module,
+                             const gchar       *name,
+                             const GFlagsValue *const_static_values)
+{
+  GTypeInfo flags_type_info = { 0, };
+
+  g_return_val_if_fail (G_IS_TYPE_MODULE (module), 0);
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (const_static_values != NULL, 0);
+
+  g_flags_complete_type_info (G_TYPE_FLAGS,
+                             &flags_type_info, const_static_values);
+
+  return g_type_module_register_type (G_TYPE_MODULE (module),
+                                      G_TYPE_FLAGS, name, &flags_type_info, 0);
+}
+
+
+#define __G_TYPE_MODULE_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gtypemodule.h b/gobject/gtypemodule.h
new file mode 100644
index 0000000..a7c3cf9
--- /dev/null
+++ b/gobject/gtypemodule.h
@@ -0,0 +1,242 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_TYPE_MODULE_H__
+#define __G_TYPE_MODULE_H__
+
+#include <gobject/gobject.h>
+#include <gobject/genums.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GTypeModule      GTypeModule;
+typedef struct _GTypeModuleClass GTypeModuleClass;
+
+#define G_TYPE_TYPE_MODULE              (g_type_module_get_type ())
+#define G_TYPE_MODULE(module)           (G_TYPE_CHECK_INSTANCE_CAST ((module), G_TYPE_TYPE_MODULE, GTypeModule))
+#define G_TYPE_MODULE_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TYPE_MODULE, GTypeModuleClass))
+#define G_IS_TYPE_MODULE(module)        (G_TYPE_CHECK_INSTANCE_TYPE ((module), G_TYPE_TYPE_MODULE))
+#define G_IS_TYPE_MODULE_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TYPE_MODULE))
+#define G_TYPE_MODULE_GET_CLASS(module) (G_TYPE_INSTANCE_GET_CLASS ((module), G_TYPE_TYPE_MODULE, GTypeModuleClass))
+
+/**
+ * GTypeModule:
+ * @name: the name of the module
+ * 
+ * The members of the <structname>GTypeModule</structname> structure should not 
+ * be accessed directly, except for the @name field.
+ */
+struct _GTypeModule 
+{
+  GObject parent_instance;
+
+  guint use_count;
+  GSList *type_infos;
+  GSList *interface_infos;
+
+  /*< public >*/
+  gchar *name;
+};
+
+/**
+ * GTypeModuleClass:
+ * @parent_class: the parent class
+ * @load: loads the module and registers one or more types using
+ *  g_type_module_register_type().
+ * @unload: unloads the module
+ * 
+ * In order to implement dynamic loading of types based on #GTypeModule, 
+ * the @load and @unload functions in #GTypeModuleClass must be implemented.
+ */
+struct _GTypeModuleClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+  gboolean (* load)   (GTypeModule *module);
+  void     (* unload) (GTypeModule *module);
+
+  /*< private >*/
+  /* Padding for future expansion */
+  void (*reserved1) (void);
+  void (*reserved2) (void);
+  void (*reserved3) (void);
+  void (*reserved4) (void);
+};
+
+/**
+ * G_DEFINE_DYNAMIC_TYPE:
+ * @TN: The name of the new type, in Camel case.
+ * @t_n: The name of the new type, in lowercase, with words
+ *  separated by '_'.
+ * @T_P: The #GType of the parent type.
+ * 
+ * A convenience macro for dynamic type implementations, which declares a
+ * class initialization function, an instance initialization function (see 
+ * #GTypeInfo for information about these) and a static variable named 
+ * @t_n<!-- -->_parent_class pointing to the parent class. Furthermore, 
+ * it defines a <function>*_get_type()</function> and a static 
+ * <function>*_register_type()</function> function for use in your
+ * <function>module_init()</function>.
+ * See G_DEFINE_DYNAMIC_TYPE_EXTENDED() for an example.
+ * 
+ * Since: 2.14
+ */
+#define G_DEFINE_DYNAMIC_TYPE(TN, t_n, T_P)          G_DEFINE_DYNAMIC_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
+/**
+ * G_DEFINE_DYNAMIC_TYPE_EXTENDED:
+ * @TypeName: The name of the new type, in Camel case.
+ * @type_name: The name of the new type, in lowercase, with words
+ *  separated by '_'.
+ * @TYPE_PARENT: The #GType of the parent type.
+ * @flags: #GTypeFlags to pass to g_type_module_register_type()
+ * @CODE: Custom code that gets inserted in the *_get_type() function.
+ * 
+ * A more general version of G_DEFINE_DYNAMIC_TYPE() which
+ * allows to specify #GTypeFlags and custom code.
+ * 
+ * |[
+ * G_DEFINE_DYNAMIC_TYPE_EXTENDED (GtkGadget,
+ *                                 gtk_gadget,
+ *                                 GTK_TYPE_THING,
+ *                                 0,
+ *                                 G_IMPLEMENT_INTERFACE (TYPE_GIZMO,
+ *                                                        gtk_gadget_gizmo_init));
+ * ]|
+ * expands to
+ * |[
+ * static void     gtk_gadget_init              (GtkGadget      *self);
+ * static void     gtk_gadget_class_init        (GtkGadgetClass *klass);
+ * static void     gtk_gadget_class_finalize    (GtkGadgetClass *klass);
+ * 
+ * static gpointer gtk_gadget_parent_class = NULL;
+ * static GType    gtk_gadget_type_id = 0;
+ * 
+ * static void     gtk_gadget_class_intern_init (gpointer klass)
+ * {
+ *   gtk_gadget_parent_class = g_type_class_peek_parent (klass); 
+ *   gtk_gadget_class_init ((GtkGadgetClass*) klass); 
+ * }
+ * 
+ * GType
+ * gtk_gadget_get_type (void)
+ * {
+ *   return gtk_gadget_type_id;
+ * }
+ * 
+ * static void
+ * gtk_gadget_register_type (GTypeModule *type_module)
+ * {
+ *   const GTypeInfo g_define_type_info = {
+ *     sizeof (GtkGadgetClass),
+ *     (GBaseInitFunc) NULL,
+ *     (GBaseFinalizeFunc) NULL,
+ *     (GClassInitFunc) gtk_gadget_class_intern_init,
+ *     (GClassFinalizeFunc) gtk_gadget_class_finalize,
+ *     NULL,   // class_data
+ *     sizeof (GtkGadget),
+ *     0,      // n_preallocs
+ *     (GInstanceInitFunc) gtk_gadget_init, 
+ *     NULL    // value_table
+ *   };
+ *   gtk_gadget_type_id = g_type_module_register_type (type_module,
+ *                                                     GTK_TYPE_THING,
+ *                                                     GtkGadget,
+ *                                                     &g_define_type_info,
+ *                                                     (GTypeFlags) flags);
+ *   {
+ *     const GInterfaceInfo g_implement_interface_info = {
+ *       (GInterfaceInitFunc) gtk_gadget_gizmo_init
+ *     };
+ *     g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
+ *   }
+ * }
+ * ]|
+ * 
+ * Since: 2.14
+ */
+#define G_DEFINE_DYNAMIC_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \
+static void     type_name##_init              (TypeName        *self); \
+static void     type_name##_class_init        (TypeName##Class *klass); \
+static void     type_name##_class_finalize    (TypeName##Class *klass); \
+static gpointer type_name##_parent_class = NULL; \
+static GType    type_name##_type_id = 0; \
+static void     type_name##_class_intern_init (gpointer klass) \
+{ \
+  type_name##_parent_class = g_type_class_peek_parent (klass); \
+  type_name##_class_init ((TypeName##Class*) klass); \
+} \
+GType \
+type_name##_get_type (void) \
+{ \
+  return type_name##_type_id; \
+} \
+static void \
+type_name##_register_type (GTypeModule *type_module) \
+{ \
+  GType g_define_type_id; \
+  const GTypeInfo g_define_type_info = { \
+    sizeof (TypeName##Class), \
+    (GBaseInitFunc) NULL, \
+    (GBaseFinalizeFunc) NULL, \
+    (GClassInitFunc) type_name##_class_intern_init, \
+    (GClassFinalizeFunc) type_name##_class_finalize, \
+    NULL,   /* class_data */ \
+    sizeof (TypeName), \
+    0,      /* n_preallocs */ \
+    (GInstanceInitFunc) type_name##_init, \
+    NULL    /* value_table */ \
+  }; \
+  type_name##_type_id = g_type_module_register_type (type_module, \
+						     TYPE_PARENT, \
+						     #TypeName, \
+						     &g_define_type_info, \
+						     (GTypeFlags) flags); \
+  g_define_type_id = type_name##_type_id; \
+  { CODE ; } \
+}
+
+
+GType    g_type_module_get_type       (void) G_GNUC_CONST;
+gboolean g_type_module_use            (GTypeModule          *module);
+void     g_type_module_unuse          (GTypeModule          *module);
+void     g_type_module_set_name       (GTypeModule          *module,
+                                       const gchar          *name);
+GType    g_type_module_register_type  (GTypeModule          *module,
+                                       GType                 parent_type,
+                                       const gchar          *type_name,
+                                       const GTypeInfo      *type_info,
+                                       GTypeFlags            flags);
+void     g_type_module_add_interface  (GTypeModule          *module,
+                                       GType                 instance_type,
+                                       GType                 interface_type,
+                                       const GInterfaceInfo *interface_info);
+GType    g_type_module_register_enum  (GTypeModule          *module,
+                                       const gchar          *name,
+                                       const GEnumValue     *const_static_values);
+GType    g_type_module_register_flags (GTypeModule          *module,
+                                       const gchar          *name,
+                                       const GFlagsValue    *const_static_values);
+
+G_END_DECLS
+
+#endif /* __G_TYPE_MODULE_H__ */
diff --git a/gobject/gtypeplugin.c b/gobject/gtypeplugin.c
new file mode 100644
index 0000000..3dbd13e
--- /dev/null
+++ b/gobject/gtypeplugin.c
@@ -0,0 +1,210 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include "gtypeplugin.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:gtypeplugin
+ * @short_description: An interface for dynamically loadable types
+ * @see_also: #GTypeModule and g_type_register_dynamic().
+ * @title: GTypePlugin
+ *
+ * The GObject type system supports dynamic loading of types. The
+ * #GTypePlugin interface is used to handle the lifecycle of
+ * dynamically loaded types.  It goes as follows:
+ *
+ * <orderedlist>
+ * <listitem><para>
+ *   The type is initially introduced (usually upon loading the module
+ *   the first time, or by your main application that knows what modules
+ *   introduces what types), like this:
+ *   |[
+ *   new_type_id = g_type_register_dynamic (parent_type_id,
+ *                                                 "TypeName",
+ *                                                 new_type_plugin,
+ *                                                 type_flags);
+ *   ]|
+ *   where <literal>new_type_plugin</literal> is an implementation of the
+ *   #GTypePlugin interface.
+ * </para></listitem>
+ * <listitem><para>
+ *    The type's implementation is referenced, e.g. through
+ *    g_type_class_ref() or through g_type_create_instance() (this is
+ *    being called by g_object_new()) or through one of the above done on
+ *    a type derived from <literal>new_type_id</literal>.
+ * </para></listitem>
+ * <listitem><para>
+ *    This causes the type system to load the type's implementation by calling
+ *    g_type_plugin_use() and g_type_plugin_complete_type_info() on
+ *    <literal>new_type_plugin</literal>.
+ * </para></listitem>
+ * <listitem><para>
+ *    At some point the type's implementation isn't required anymore, e.g. after
+ *    g_type_class_unref() or g_type_free_instance() (called when the reference
+ *    count of an instance drops to zero).
+ * </para></listitem>
+ * <listitem><para>
+ *    This causes the type system to throw away the information retrieved from
+ *    g_type_plugin_complete_type_info() and then it calls
+ *    g_type_plugin_unuse() on <literal>new_type_plugin</literal>.
+ * </para></listitem>
+ * <listitem><para>
+ *    Things may repeat from the second step.
+ * </para></listitem>
+ * </orderedlist>
+ *
+ * So basically, you need to implement a #GTypePlugin type that
+ * carries a use_count, once use_count goes from zero to one, you need
+ * to load the implementation to successfully handle the upcoming
+ * g_type_plugin_complete_type_info() call. Later, maybe after
+ * succeeding use/unuse calls, once use_count drops to zero, you can
+ * unload the implementation again. The type system makes sure to call
+ * g_type_plugin_use() and g_type_plugin_complete_type_info() again
+ * when the type is needed again.
+ *
+ * #GTypeModule is an implementation of #GTypePlugin that already
+ * implements most of this except for the actual module loading and
+ * unloading. It even handles multiple registered types per module.
+ */
+
+
+/* --- functions --- */
+GType
+g_type_plugin_get_type (void)
+{
+  static GType type_plugin_type = 0;
+  
+  if (!type_plugin_type)
+    {
+      static const GTypeInfo type_plugin_info = {
+	sizeof (GTypePluginClass),
+	NULL,           /* base_init */
+	NULL,           /* base_finalize */
+      };
+      
+      type_plugin_type = g_type_register_static (G_TYPE_INTERFACE, g_intern_static_string ("GTypePlugin"), &type_plugin_info, 0);
+    }
+  
+  return type_plugin_type;
+}
+
+/**
+ * g_type_plugin_use:
+ * @plugin: a #GTypePlugin
+ *
+ * Calls the @use_plugin function from the #GTypePluginClass of
+ * @plugin.  There should be no need to use this function outside of
+ * the GObject type system itself.
+ */
+void
+g_type_plugin_use (GTypePlugin *plugin)
+{
+  GTypePluginClass *iface;
+  
+  g_return_if_fail (G_IS_TYPE_PLUGIN (plugin));
+  
+  iface = G_TYPE_PLUGIN_GET_CLASS (plugin);
+  iface->use_plugin (plugin);
+}
+
+/**
+ * g_type_plugin_unuse:
+ * @plugin: a #GTypePlugin
+ *
+ * Calls the @unuse_plugin function from the #GTypePluginClass of
+ * @plugin.  There should be no need to use this function outside of
+ * the GObject type system itself.
+ */
+void
+g_type_plugin_unuse (GTypePlugin *plugin)
+{
+  GTypePluginClass *iface;
+  
+  g_return_if_fail (G_IS_TYPE_PLUGIN (plugin));
+  
+  iface = G_TYPE_PLUGIN_GET_CLASS (plugin);
+  iface->unuse_plugin (plugin);
+}
+
+/**
+ * g_type_plugin_complete_type_info:
+ * @plugin: a #GTypePlugin
+ * @g_type: the #GType whose info is completed
+ * @info: the #GTypeInfo struct to fill in
+ * @value_table: the #GTypeValueTable to fill in
+ * 
+ * Calls the @complete_type_info function from the #GTypePluginClass of @plugin.
+ * There should be no need to use this function outside of the GObject 
+ * type system itself.
+ */
+void
+g_type_plugin_complete_type_info (GTypePlugin     *plugin,
+				  GType            g_type,
+				  GTypeInfo       *info,
+				  GTypeValueTable *value_table)
+{
+  GTypePluginClass *iface;
+  
+  g_return_if_fail (G_IS_TYPE_PLUGIN (plugin));
+  g_return_if_fail (info != NULL);
+  g_return_if_fail (value_table != NULL);
+  
+  iface = G_TYPE_PLUGIN_GET_CLASS (plugin);
+  iface->complete_type_info (plugin,
+			     g_type,
+			     info,
+			     value_table);
+}
+
+/**
+ * g_type_plugin_complete_interface_info:
+ * @plugin: the #GTypePlugin
+ * @instance_type: the #GType of an instantiable type to which the interface
+ *  is added
+ * @interface_type: the #GType of the interface whose info is completed
+ * @info: the #GInterfaceInfo to fill in
+ *
+ * Calls the @complete_interface_info function from the
+ * #GTypePluginClass of @plugin. There should be no need to use this
+ * function outside of the GObject type system itself.
+ */
+void
+g_type_plugin_complete_interface_info (GTypePlugin    *plugin,
+				       GType           instance_type,
+				       GType           interface_type,
+				       GInterfaceInfo *info)
+{
+  GTypePluginClass *iface;
+  
+  g_return_if_fail (G_IS_TYPE_PLUGIN (plugin));
+  g_return_if_fail (info != NULL);
+  
+  iface = G_TYPE_PLUGIN_GET_CLASS (plugin);
+  iface->complete_interface_info (plugin,
+				  instance_type,
+				  interface_type,
+				  info);
+}
+
+#define __G_TYPE_PLUGIN_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gtypeplugin.h b/gobject/gtypeplugin.h
new file mode 100644
index 0000000..ff87a70
--- /dev/null
+++ b/gobject/gtypeplugin.h
@@ -0,0 +1,134 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_TYPE_PLUGIN_H__
+#define __G_TYPE_PLUGIN_H__
+
+#include	<gobject/gtype.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+#define G_TYPE_TYPE_PLUGIN		(g_type_plugin_get_type ())
+#define G_TYPE_PLUGIN(inst)		(G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TYPE_PLUGIN, GTypePlugin))
+#define G_TYPE_PLUGIN_CLASS(vtable)	(G_TYPE_CHECK_CLASS_CAST ((vtable), G_TYPE_TYPE_PLUGIN, GTypePluginClass))
+#define G_IS_TYPE_PLUGIN(inst)		(G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TYPE_PLUGIN))
+#define G_IS_TYPE_PLUGIN_CLASS(vtable)	(G_TYPE_CHECK_CLASS_TYPE ((vtable), G_TYPE_TYPE_PLUGIN))
+#define G_TYPE_PLUGIN_GET_CLASS(inst)	(G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TYPE_PLUGIN, GTypePluginClass))
+
+
+/* --- typedefs & structures --- */
+typedef struct _GTypePluginClass		   GTypePluginClass;
+/**
+ * GTypePluginUse:
+ * @plugin: the #GTypePlugin whose use count should be increased
+ * 
+ * The type of the @use_plugin function of #GTypePluginClass, which gets called
+ * to increase the use count of @plugin.
+ */
+typedef void  (*GTypePluginUse)			  (GTypePlugin     *plugin);
+/**
+ * GTypePluginUnuse:
+ * @plugin: the #GTypePlugin whose use count should be decreased
+ * 
+ * The type of the @unuse_plugin function of #GTypePluginClass.
+ */
+typedef void  (*GTypePluginUnuse)		  (GTypePlugin     *plugin);
+/**
+ * GTypePluginCompleteTypeInfo:
+ * @plugin: the #GTypePlugin
+ * @g_type: the #GType whose info is completed
+ * @info: the #GTypeInfo struct to fill in
+ * @value_table: the #GTypeValueTable to fill in
+ * 
+ * The type of the @complete_type_info function of #GTypePluginClass.
+ */
+typedef void  (*GTypePluginCompleteTypeInfo)	  (GTypePlugin     *plugin,
+						   GType            g_type,
+						   GTypeInfo       *info,
+						   GTypeValueTable *value_table);
+/**
+ * GTypePluginCompleteInterfaceInfo:
+ * @plugin: the #GTypePlugin
+ * @instance_type: the #GType of an instantiable type to which the interface
+ *  is added
+ * @interface_type: the #GType of the interface whose info is completed
+ * @info: the #GInterfaceInfo to fill in
+ * 
+ * The type of the @complete_interface_info function of #GTypePluginClass.
+ */
+typedef void  (*GTypePluginCompleteInterfaceInfo) (GTypePlugin     *plugin,
+						   GType            instance_type,
+						   GType            interface_type,
+						   GInterfaceInfo  *info);
+/**
+ * GTypePlugin:
+ * 
+ * The <structname>GTypePlugin</structname> typedef is used as a placeholder 
+ * for objects that implement the <structname>GTypePlugin</structname> 
+ * interface.
+ */
+/**
+ * GTypePluginClass:
+ * @use_plugin: Increases the use count of the plugin.
+ * @unuse_plugin: Decreases the use count of the plugin.
+ * @complete_type_info: Fills in the #GTypeInfo and 
+ *  #GTypeValueTable structs for the type. The structs are initialized
+ *  with <literal>memset(s, 0, sizeof (s))</literal> before calling 
+ *  this function.
+ * @complete_interface_info: Fills in missing parts of the #GInterfaceInfo 
+ *  for the interface. The structs is initialized with 
+ *  <literal>memset(s, 0, sizeof (s))</literal> before calling
+ *  this function.
+ * 
+ * The #GTypePlugin interface is used by the type system in order to handle
+ * the lifecycle of dynamically loaded types.
+ */
+struct _GTypePluginClass
+{
+  /*< private >*/
+  GTypeInterface		   base_iface;
+  
+  /*< public >*/
+  GTypePluginUse		   use_plugin;
+  GTypePluginUnuse		   unuse_plugin;
+  GTypePluginCompleteTypeInfo	   complete_type_info;
+  GTypePluginCompleteInterfaceInfo complete_interface_info;
+};
+
+
+/* --- prototypes --- */
+GType	g_type_plugin_get_type			(void)	G_GNUC_CONST;
+void	g_type_plugin_use			(GTypePlugin	 *plugin);
+void	g_type_plugin_unuse			(GTypePlugin	 *plugin);
+void	g_type_plugin_complete_type_info	(GTypePlugin     *plugin,
+						 GType            g_type,
+						 GTypeInfo       *info,
+						 GTypeValueTable *value_table);
+void	g_type_plugin_complete_interface_info	(GTypePlugin     *plugin,
+						 GType            instance_type,
+						 GType            interface_type,
+						 GInterfaceInfo  *info);
+
+G_END_DECLS
+
+#endif /* __G_TYPE_PLUGIN_H__ */
diff --git a/gobject/gvalue.c b/gobject/gvalue.c
new file mode 100644
index 0000000..85187b7
--- /dev/null
+++ b/gobject/gvalue.c
@@ -0,0 +1,559 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * FIXME: MT-safety
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gvalue.h"
+#include "gvaluecollector.h"
+#include "gbsearcharray.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:generic_values
+ * @short_description: A polymorphic type that can hold values of any
+ *     other type
+ * @see_also: The fundamental types which all support #GValue
+ *     operations and thus can be used as a type initializer for
+ *     g_value_init() are defined by a separate interface.  See the <link
+ *     linkend="gobject-Standard-Parameter-and-Value-Types">Standard
+ *     Values API</link> for details.
+ * @title: Generic values
+ *
+ * The #GValue structure is basically a variable container that consists
+ * of a type identifier and a specific value of that type.
+ * The type identifier within a #GValue structure always determines the
+ * type of the associated value.
+ * To create a undefined #GValue structure, simply create a zero-filled
+ * #GValue structure. To initialize the #GValue, use the g_value_init()
+ * function. A #GValue cannot be used until it is initialized.
+ * The basic type operations (such as freeing and copying) are determined
+ * by the #GTypeValueTable associated with the type ID stored in the #GValue.
+ * Other #GValue operations (such as converting values between types) are
+ * provided by this interface.
+ *
+ * The code in the example program below demonstrates #GValue's
+ * features.
+ *
+ * |[
+ * #include &lt;glib-object.h&gt;
+ *
+ * static void
+ * int2string (const GValue *src_value,
+ *             GValue       *dest_value)
+ * {
+ *   if (g_value_get_int (src_value) == 42)
+ *     g_value_set_static_string (dest_value, "An important number");
+ *   else
+ *     g_value_set_static_string (dest_value, "What's that?");
+ * }
+ *
+ * int
+ * main (int   argc,
+ *       char *argv[])
+ * {
+ *   /&ast; GValues must start zero-filled &ast;/
+ *   GValue a = {0};
+ *   GValue b = {0};
+ *   const gchar *message;
+ *
+ *   g_type_init ();
+ *
+ *   /&ast; The GValue starts empty &ast;/
+ *   g_assert (!G_VALUE_HOLDS_STRING (&amp;a));
+ *
+ *   /&ast; Put a string in it &ast;/
+ *   g_value_init (&amp;a, G_TYPE_STRING);
+ *   g_assert (G_VALUE_HOLDS_STRING (&amp;a));
+ *   g_value_set_static_string (&amp;a, "Hello, world!");
+ *   g_printf ("%s\n", g_value_get_string (&amp;a));
+ *
+ *   /&ast; Reset it to its pristine state &ast;/
+ *   g_value_unset (&amp;a);
+ *
+ *   /&ast; It can then be reused for another type &ast;/
+ *   g_value_init (&amp;a, G_TYPE_INT);
+ *   g_value_set_int (&amp;a, 42);
+ *
+ *   /&ast; Attempt to transform it into a GValue of type STRING &ast;/
+ *   g_value_init (&amp;b, G_TYPE_STRING);
+ *
+ *   /&ast; An INT is transformable to a STRING &ast;/
+ *   g_assert (g_value_type_transformable (G_TYPE_INT, G_TYPE_STRING));
+ *
+ *   g_value_transform (&amp;a, &amp;b);
+ *   g_printf ("%s\n", g_value_get_string (&amp;b));
+ *
+ *   /&ast; Attempt to transform it again using a custom transform function &ast;/
+ *   g_value_register_transform_func (G_TYPE_INT, G_TYPE_STRING, int2string);
+ *   g_value_transform (&amp;a, &amp;b);
+ *   g_printf ("%s\n", g_value_get_string (&amp;b));
+ *   return 0;
+ * }
+ * ]|
+ */
+
+
+/* --- typedefs & structures --- */
+typedef struct {
+  GType src_type;
+  GType dest_type;
+  GValueTransform func;
+} TransformEntry;
+
+
+/* --- prototypes --- */
+static gint	transform_entries_cmp	(gconstpointer bsearch_node1,
+					 gconstpointer bsearch_node2);
+
+
+/* --- variables --- */
+static GBSearchArray *transform_array = NULL;
+static GBSearchConfig transform_bconfig = {
+  sizeof (TransformEntry),
+  transform_entries_cmp,
+  0,
+};
+
+
+/* --- functions --- */
+void
+g_value_c_init (void)
+{
+  transform_array = g_bsearch_array_create (&transform_bconfig);
+}
+
+static inline void		/* keep this function in sync with gvaluecollector.h and gboxed.c */
+value_meminit (GValue *value,
+	       GType   value_type)
+{
+  value->g_type = value_type;
+  memset (value->data, 0, sizeof (value->data));
+}
+
+/**
+ * g_value_init:
+ * @value: A zero-filled (uninitialized) #GValue structure.
+ * @g_type: Type the #GValue should hold values of.
+ *
+ * Initializes @value with the default value of @type.
+ *
+ * Returns: the #GValue structure that has been passed in
+ */
+GValue*
+g_value_init (GValue *value,
+	      GType   g_type)
+{
+  /* g_return_val_if_fail (G_TYPE_IS_VALUE (g_type), NULL);	be more elaborate below */
+  g_return_val_if_fail (value != NULL, NULL);
+  /* g_return_val_if_fail (G_VALUE_TYPE (value) == 0, NULL);	be more elaborate below */
+
+  if (G_TYPE_IS_VALUE (g_type) && G_VALUE_TYPE (value) == 0)
+    {
+      GTypeValueTable *value_table = g_type_value_table_peek (g_type);
+
+      /* setup and init */
+      value_meminit (value, g_type);
+      value_table->value_init (value);
+    }
+  else if (G_VALUE_TYPE (value))
+    g_warning ("%s: cannot initialize GValue with type `%s', the value has already been initialized as `%s'",
+	       G_STRLOC,
+	       g_type_name (g_type),
+	       g_type_name (G_VALUE_TYPE (value)));
+  else /* !G_TYPE_IS_VALUE (g_type) */
+    g_warning ("%s: cannot initialize GValue with type `%s', %s",
+	       G_STRLOC,
+	       g_type_name (g_type),
+	       g_type_value_table_peek (g_type) ?
+	       "this type is abstract with regards to GValue use, use a more specific (derived) type" :
+	       "this type has no GTypeValueTable implementation");
+  return value;
+}
+
+/**
+ * g_value_copy:
+ * @src_value: An initialized #GValue structure.
+ * @dest_value: An initialized #GValue structure of the same type as @src_value.
+ *
+ * Copies the value of @src_value into @dest_value.
+ */
+void
+g_value_copy (const GValue *src_value,
+	      GValue       *dest_value)
+{
+  g_return_if_fail (G_IS_VALUE (src_value));
+  g_return_if_fail (G_IS_VALUE (dest_value));
+  g_return_if_fail (g_value_type_compatible (G_VALUE_TYPE (src_value), G_VALUE_TYPE (dest_value)));
+  
+  if (src_value != dest_value)
+    {
+      GType dest_type = G_VALUE_TYPE (dest_value);
+      GTypeValueTable *value_table = g_type_value_table_peek (dest_type);
+
+      /* make sure dest_value's value is free()d */
+      if (value_table->value_free)
+	value_table->value_free (dest_value);
+
+      /* setup and copy */
+      value_meminit (dest_value, dest_type);
+      value_table->value_copy (src_value, dest_value);
+    }
+}
+
+/**
+ * g_value_reset:
+ * @value: An initialized #GValue structure.
+ *
+ * Clears the current value in @value and resets it to the default value
+ * (as if the value had just been initialized).
+ *
+ * Returns: the #GValue structure that has been passed in
+ */
+GValue*
+g_value_reset (GValue *value)
+{
+  GTypeValueTable *value_table;
+  GType g_type;
+  
+  g_return_val_if_fail (G_IS_VALUE (value), NULL);
+  
+  g_type = G_VALUE_TYPE (value);
+  value_table = g_type_value_table_peek (g_type);
+
+  /* make sure value's value is free()d */
+  if (value_table->value_free)
+    value_table->value_free (value);
+
+  /* setup and init */
+  value_meminit (value, g_type);
+  value_table->value_init (value);
+
+  return value;
+}
+
+/**
+ * g_value_unset:
+ * @value: An initialized #GValue structure.
+ *
+ * Clears the current value in @value and "unsets" the type,
+ * this releases all resources associated with this GValue.
+ * An unset value is the same as an uninitialized (zero-filled)
+ * #GValue structure.
+ */
+void
+g_value_unset (GValue *value)
+{
+  GTypeValueTable *value_table;
+  
+  g_return_if_fail (G_IS_VALUE (value));
+
+  value_table = g_type_value_table_peek (G_VALUE_TYPE (value));
+
+  if (value_table->value_free)
+    value_table->value_free (value);
+  memset (value, 0, sizeof (*value));
+}
+
+/**
+ * g_value_fits_pointer:
+ * @value: An initialized #GValue structure.
+ *
+ * Determines if @value will fit inside the size of a pointer value.
+ * This is an internal function introduced mainly for C marshallers.
+ *
+ * Returns: %TRUE if @value will fit inside a pointer value.
+ */
+gboolean
+g_value_fits_pointer (const GValue *value)
+{
+  GTypeValueTable *value_table;
+
+  g_return_val_if_fail (G_IS_VALUE (value), FALSE);
+
+  value_table = g_type_value_table_peek (G_VALUE_TYPE (value));
+
+  return value_table->value_peek_pointer != NULL;
+}
+
+/**
+ * g_value_peek_pointer:
+ * @value: An initialized #GValue structure.
+ *
+ * Return the value contents as pointer. This function asserts that
+ * g_value_fits_pointer() returned %TRUE for the passed in value.
+ * This is an internal function introduced mainly for C marshallers.
+ *
+ * Returns: %TRUE if @value will fit inside a pointer value.
+ */
+gpointer
+g_value_peek_pointer (const GValue *value)
+{
+  GTypeValueTable *value_table;
+
+  g_return_val_if_fail (G_IS_VALUE (value), NULL);
+
+  value_table = g_type_value_table_peek (G_VALUE_TYPE (value));
+  if (!value_table->value_peek_pointer)
+    {
+      g_return_val_if_fail (g_value_fits_pointer (value) == TRUE, NULL);
+      return NULL;
+    }
+
+  return value_table->value_peek_pointer (value);
+}
+
+/**
+ * g_value_set_instance:
+ * @value: An initialized #GValue structure.
+ * @instance: the instance
+ *
+ * Sets @value from an instantiatable type via the
+ * value_table's collect_value() function.
+ */
+void
+g_value_set_instance (GValue  *value,
+		      gpointer instance)
+{
+  GType g_type;
+  GTypeValueTable *value_table;
+  GTypeCValue cvalue;
+  gchar *error_msg;
+  
+  g_return_if_fail (G_IS_VALUE (value));
+  if (instance)
+    {
+      g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance));
+      g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (instance), G_VALUE_TYPE (value)));
+    }
+  
+  g_type = G_VALUE_TYPE (value);
+  value_table = g_type_value_table_peek (g_type);
+  
+  g_return_if_fail (strcmp (value_table->collect_format, "p") == 0);
+  
+  memset (&cvalue, 0, sizeof (cvalue));
+  cvalue.v_pointer = instance;
+  
+  /* make sure value's value is free()d */
+  if (value_table->value_free)
+    value_table->value_free (value);
+
+  /* setup and collect */
+  value_meminit (value, g_type);
+  error_msg = value_table->collect_value (value, 1, &cvalue, 0);
+  if (error_msg)
+    {
+      g_warning ("%s: %s", G_STRLOC, error_msg);
+      g_free (error_msg);
+      
+      /* we purposely leak the value here, it might not be
+       * in a sane state if an error condition occoured
+       */
+      value_meminit (value, g_type);
+      value_table->value_init (value);
+    }
+}
+
+static GValueTransform
+transform_func_lookup (GType src_type,
+		       GType dest_type)
+{
+  TransformEntry entry;
+
+  entry.src_type = src_type;
+  do
+    {
+      entry.dest_type = dest_type;
+      do
+	{
+	  TransformEntry *e;
+	  
+	  e = g_bsearch_array_lookup (transform_array, &transform_bconfig, &entry);
+	  if (e)
+	    {
+	      /* need to check that there hasn't been a change in value handling */
+	      if (g_type_value_table_peek (entry.dest_type) == g_type_value_table_peek (dest_type) &&
+		  g_type_value_table_peek (entry.src_type) == g_type_value_table_peek (src_type))
+		return e->func;
+	    }
+	  entry.dest_type = g_type_parent (entry.dest_type);
+	}
+      while (entry.dest_type);
+      
+      entry.src_type = g_type_parent (entry.src_type);
+    }
+  while (entry.src_type);
+
+  return NULL;
+}
+
+static gint
+transform_entries_cmp (gconstpointer bsearch_node1,
+		       gconstpointer bsearch_node2)
+{
+  const TransformEntry *e1 = bsearch_node1;
+  const TransformEntry *e2 = bsearch_node2;
+  gint cmp = G_BSEARCH_ARRAY_CMP (e1->src_type, e2->src_type);
+
+  if (cmp)
+    return cmp;
+  else
+    return G_BSEARCH_ARRAY_CMP (e1->dest_type, e2->dest_type);
+}
+
+/**
+ * g_value_register_transform_func:
+ * @src_type: Source type.
+ * @dest_type: Target type.
+ * @transform_func: a function which transforms values of type @src_type
+ *  into value of type @dest_type
+ *
+ * Registers a value transformation function for use in g_value_transform().
+ * A previously registered transformation function for @src_type and @dest_type
+ * will be replaced.
+ */
+void
+g_value_register_transform_func (GType           src_type,
+				 GType           dest_type,
+				 GValueTransform transform_func)
+{
+  TransformEntry entry;
+
+  /* these checks won't pass for dynamic types.
+   * g_return_if_fail (G_TYPE_HAS_VALUE_TABLE (src_type));
+   * g_return_if_fail (G_TYPE_HAS_VALUE_TABLE (dest_type));
+   */
+  g_return_if_fail (transform_func != NULL);
+
+  entry.src_type = src_type;
+  entry.dest_type = dest_type;
+
+#if 0 /* let transform function replacement be a valid operation */
+  if (g_bsearch_array_lookup (transform_array, &transform_bconfig, &entry))
+    g_warning ("reregistering value transformation function (%p) for `%s' to `%s'",
+	       transform_func,
+	       g_type_name (src_type),
+	       g_type_name (dest_type));
+#endif
+
+  entry.func = transform_func;
+  transform_array = g_bsearch_array_replace (transform_array, &transform_bconfig, &entry);
+}
+
+/**
+ * g_value_type_transformable:
+ * @src_type: Source type.
+ * @dest_type: Target type.
+ *
+ * Check whether g_value_transform() is able to transform values
+ * of type @src_type into values of type @dest_type.
+ *
+ * Returns: %TRUE if the transformation is possible, %FALSE otherwise.
+ */
+gboolean
+g_value_type_transformable (GType src_type,
+			    GType dest_type)
+{
+  g_return_val_if_fail (G_TYPE_IS_VALUE (src_type), FALSE);
+  g_return_val_if_fail (G_TYPE_IS_VALUE (dest_type), FALSE);
+
+  return (g_value_type_compatible (src_type, dest_type) ||
+	  transform_func_lookup (src_type, dest_type) != NULL);
+}
+
+/**
+ * g_value_type_compatible:
+ * @src_type: source type to be copied.
+ * @dest_type: destination type for copying.
+ *
+ * Returns whether a #GValue of type @src_type can be copied into
+ * a #GValue of type @dest_type.
+ *
+ * Returns: %TRUE if g_value_copy() is possible with @src_type and @dest_type.
+ */
+gboolean
+g_value_type_compatible (GType src_type,
+			 GType dest_type)
+{
+  g_return_val_if_fail (G_TYPE_IS_VALUE (src_type), FALSE);
+  g_return_val_if_fail (G_TYPE_IS_VALUE (dest_type), FALSE);
+
+  return (g_type_is_a (src_type, dest_type) &&
+	  g_type_value_table_peek (dest_type) == g_type_value_table_peek (src_type));
+}
+
+/**
+ * g_value_transform:
+ * @src_value: Source value.
+ * @dest_value: Target value.
+ *
+ * Tries to cast the contents of @src_value into a type appropriate
+ * to store in @dest_value, e.g. to transform a %G_TYPE_INT value
+ * into a %G_TYPE_FLOAT value. Performing transformations between
+ * value types might incur precision lossage. Especially
+ * transformations into strings might reveal seemingly arbitrary
+ * results and shouldn't be relied upon for production code (such
+ * as rcfile value or object property serialization).
+ *
+ * Returns: Whether a transformation rule was found and could be applied.
+ *  Upon failing transformations, @dest_value is left untouched.
+ */
+gboolean
+g_value_transform (const GValue *src_value,
+		   GValue       *dest_value)
+{
+  GType dest_type;
+
+  g_return_val_if_fail (G_IS_VALUE (src_value), FALSE);
+  g_return_val_if_fail (G_IS_VALUE (dest_value), FALSE);
+
+  dest_type = G_VALUE_TYPE (dest_value);
+  if (g_value_type_compatible (G_VALUE_TYPE (src_value), dest_type))
+    {
+      g_value_copy (src_value, dest_value);
+      
+      return TRUE;
+    }
+  else
+    {
+      GValueTransform transform = transform_func_lookup (G_VALUE_TYPE (src_value), dest_type);
+
+      if (transform)
+	{
+	  g_value_unset (dest_value);
+	  
+	  /* setup and transform */
+	  value_meminit (dest_value, dest_type);
+	  transform (src_value, dest_value);
+	  
+	  return TRUE;
+	}
+    }
+  return FALSE;
+}
+
+#define __G_VALUE_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gvalue.h b/gobject/gvalue.h
new file mode 100644
index 0000000..b3f2872
--- /dev/null
+++ b/gobject/gvalue.h
@@ -0,0 +1,159 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * gvalue.h: generic GValue functions
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_VALUE_H__
+#define __G_VALUE_H__
+
+#include	<gobject/gtype.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+/**
+ * G_TYPE_IS_VALUE:
+ * @type: A #GType value.
+ * 
+ * Checks whether the passed in type ID can be used for g_value_init().
+ * That is, this macro checks whether this type provides an implementation
+ * of the #GTypeValueTable functions required for a type to create a #GValue of.
+ * 
+ * Returns: Whether @type is suitable as a #GValue type.
+ */
+#define	G_TYPE_IS_VALUE(type)		(g_type_check_is_value_type (type))
+/**
+ * G_IS_VALUE:
+ * @value: A #GValue structure.
+ * 
+ * Checks if @value is a valid and initialized #GValue structure.
+ *
+ * Returns: %TRUE on success.
+ */
+#define	G_IS_VALUE(value)		(G_TYPE_CHECK_VALUE (value))
+/**
+ * G_VALUE_TYPE:
+ * @value: A #GValue structure.
+ * 
+ * Get the type identifier of @value.
+ *
+ * Returns: the #GType.
+ */
+#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
+/**
+ * G_VALUE_TYPE_NAME:
+ * @value: A #GValue structure.
+ *
+ * Gets the the type name of @value. 
+ *
+ * Returns: the type name.
+ */
+#define	G_VALUE_TYPE_NAME(value)	(g_type_name (G_VALUE_TYPE (value)))
+/**
+ * G_VALUE_HOLDS:
+ * @value: A #GValue structure.
+ * @type: A #GType value.
+ * 
+ * Checks if @value holds (or contains) a value of @type.
+ * This macro will also check for @value != %NULL and issue a
+ * warning if the check fails.
+ *
+ * Returns: %TRUE if @value holds the @type.
+ */
+#define G_VALUE_HOLDS(value,type)	(G_TYPE_CHECK_VALUE_TYPE ((value), (type)))
+
+
+/* --- typedefs & structures --- */
+/**
+ * GValueTransform:
+ * @src_value: Source value.
+ * @dest_value: Target value.
+ * 
+ * The type of value transformation functions which can be registered with
+ * g_value_register_transform_func().
+ */
+typedef void (*GValueTransform) (const GValue *src_value,
+				 GValue       *dest_value);
+/**
+ * GValue:
+ * 
+ * An opaque structure used to hold different types of values.
+ * The data within the structure has protected scope: it is accessible only
+ * to functions within a #GTypeValueTable structure, or implementations of
+ * the g_value_*() API. That is, code portions which implement new fundamental
+ * types.
+ * #GValue users can not make any assumptions about how data is stored
+ * within the 2 element @data union, and the @g_type member should
+ * only be accessed through the G_VALUE_TYPE() macro.
+ */
+struct _GValue
+{
+  /*< private >*/
+  GType		g_type;
+
+  /* public for GTypeValueTable methods */
+  union {
+    gint	v_int;
+    guint	v_uint;
+    glong	v_long;
+    gulong	v_ulong;
+    gint64      v_int64;
+    guint64     v_uint64;
+    gfloat	v_float;
+    gdouble	v_double;
+    gpointer	v_pointer;
+  } data[2];
+};
+
+
+/* --- prototypes --- */
+GValue*         g_value_init	   	(GValue       *value,
+					 GType         g_type);
+void            g_value_copy    	(const GValue *src_value,
+					 GValue       *dest_value);
+GValue*         g_value_reset   	(GValue       *value);
+void            g_value_unset   	(GValue       *value);
+void		g_value_set_instance	(GValue	      *value,
+					 gpointer      instance);
+
+
+/* --- private --- */
+gboolean	g_value_fits_pointer	(const GValue *value);
+gpointer	g_value_peek_pointer	(const GValue *value);
+
+
+/* --- implementation details --- */
+gboolean g_value_type_compatible	(GType		 src_type,
+					 GType		 dest_type);
+gboolean g_value_type_transformable	(GType           src_type,
+					 GType           dest_type);
+gboolean g_value_transform		(const GValue   *src_value,
+					 GValue         *dest_value);
+void	g_value_register_transform_func	(GType		 src_type,
+					 GType		 dest_type,
+					 GValueTransform transform_func);
+#define G_VALUE_NOCOPY_CONTENTS		(1 << 27)
+
+
+G_END_DECLS
+
+#endif /* __G_VALUE_H__ */
diff --git a/gobject/gvaluearray.c b/gobject/gvaluearray.c
new file mode 100644
index 0000000..889a7f5
--- /dev/null
+++ b/gobject/gvaluearray.c
@@ -0,0 +1,345 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>  /* qsort() */
+
+#include "gvaluearray.h"
+#include "gobjectalias.h"
+
+
+/**
+ * SECTION:value_arrays
+ * @short_description: A container structure to maintain an array of
+ *     generic values
+ * @see_also: #GValue, #GParamSpecValueArray, g_param_spec_value_array()
+ * @title: Value arrays
+ *
+ * The prime purpose of a #GValueArray is for it to be used as an
+ * object property that holds an array of values. A #GValueArray wraps
+ * an array of #GValue elements in order for it to be used as a boxed
+ * type through %G_TYPE_VALUE_ARRAY.
+ */
+
+
+#ifdef	DISABLE_MEM_POOLS
+#  define	GROUP_N_VALUES	(1)	/* power of 2 !! */
+#else
+#  define	GROUP_N_VALUES	(8)	/* power of 2 !! */
+#endif
+
+
+/* --- functions --- */
+/**
+ * g_value_array_get_nth:
+ * @value_array: #GValueArray to get a value from
+ * @index_: index of the value of interest
+ *
+ * Return a pointer to the value at @index_ containd in @value_array.
+ *
+ * Returns: pointer to a value at @index_ in @value_array
+ */
+GValue*
+g_value_array_get_nth (GValueArray *value_array,
+		       guint        index)
+{
+  g_return_val_if_fail (value_array != NULL, NULL);
+  g_return_val_if_fail (index < value_array->n_values, NULL);
+
+  return value_array->values + index;
+}
+
+static inline void
+value_array_grow (GValueArray *value_array,
+		  guint        n_values,
+		  gboolean     zero_init)
+{
+  g_return_if_fail (n_values >= value_array->n_values);
+
+  value_array->n_values = n_values;
+  if (value_array->n_values > value_array->n_prealloced)
+    {
+      guint i = value_array->n_prealloced;
+
+      value_array->n_prealloced = (value_array->n_values + GROUP_N_VALUES - 1) & ~(GROUP_N_VALUES - 1);
+      value_array->values = g_renew (GValue, value_array->values, value_array->n_prealloced);
+      if (!zero_init)
+	i = value_array->n_values;
+      memset (value_array->values + i, 0,
+	      (value_array->n_prealloced - i) * sizeof (value_array->values[0]));
+    }
+}
+
+static inline void
+value_array_shrink (GValueArray *value_array)
+{
+#ifdef  DISABLE_MEM_POOLS
+  if (value_array->n_prealloced >= value_array->n_values + GROUP_N_VALUES)
+    {
+      value_array->n_prealloced = (value_array->n_values + GROUP_N_VALUES - 1) & ~(GROUP_N_VALUES - 1);
+      value_array->values = g_renew (GValue, value_array->values, value_array->n_prealloced);
+    }
+#endif
+}
+
+/**
+ * g_value_array_new:
+ * @n_prealloced: number of values to preallocate space for
+ *
+ * Allocate and initialize a new #GValueArray, optionally preserve space
+ * for @n_prealloced elements. New arrays always contain 0 elements,
+ * regardless of the value of @n_prealloced.
+ *
+ * Returns: a newly allocated #GValueArray with 0 values
+ */
+GValueArray*
+g_value_array_new (guint n_prealloced)
+{
+  GValueArray *value_array = g_slice_new (GValueArray);
+
+  value_array->n_values = 0;
+  value_array->n_prealloced = 0;
+  value_array->values = NULL;
+  value_array_grow (value_array, n_prealloced, TRUE);
+  value_array->n_values = 0;
+
+  return value_array;
+}
+
+/**
+ * g_value_array_free:
+ * @value_array: #GValueArray to free
+ *
+ * Free a #GValueArray including its contents.
+ */
+void
+g_value_array_free (GValueArray *value_array)
+{
+  guint i;
+
+  g_return_if_fail (value_array != NULL);
+
+  for (i = 0; i < value_array->n_values; i++)
+    {
+      GValue *value = value_array->values + i;
+
+      if (G_VALUE_TYPE (value) != 0) /* we allow unset values in the array */
+	g_value_unset (value);
+    }
+  g_free (value_array->values);
+  g_slice_free (GValueArray, value_array);
+}
+
+/**
+ * g_value_array_copy:
+ * @value_array: #GValueArray to copy
+ *
+ * Construct an exact copy of a #GValueArray by duplicating all its
+ * contents.
+ *
+ * Returns: Newly allocated copy of #GValueArray
+ */
+GValueArray*
+g_value_array_copy (const GValueArray *value_array)
+{
+  GValueArray *new_array;
+  guint i;
+
+  g_return_val_if_fail (value_array != NULL, NULL);
+
+  new_array = g_slice_new (GValueArray);
+  new_array->n_values = 0;
+  new_array->values = NULL;
+  new_array->n_prealloced = 0;
+  value_array_grow (new_array, value_array->n_values, TRUE);
+  for (i = 0; i < new_array->n_values; i++)
+    if (G_VALUE_TYPE (value_array->values + i) != 0)
+      {
+	GValue *value = new_array->values + i;
+	
+	g_value_init (value, G_VALUE_TYPE (value_array->values + i));
+	g_value_copy (value_array->values + i, value);
+      }
+  return new_array;
+}
+
+/**
+ * g_value_array_prepend:
+ * @value_array: #GValueArray to add an element to
+ * @value: #GValue to copy into #GValueArray
+ *
+ * Insert a copy of @value as first element of @value_array.
+ *
+ * Returns: the #GValueArray passed in as @value_array
+ */
+GValueArray*
+g_value_array_prepend (GValueArray  *value_array,
+		       const GValue *value)
+{
+  g_return_val_if_fail (value_array != NULL, NULL);
+
+  return g_value_array_insert (value_array, 0, value);
+}
+
+/**
+ * g_value_array_append:
+ * @value_array: #GValueArray to add an element to
+ * @value: #GValue to copy into #GValueArray
+ *
+ * Insert a copy of @value as last element of @value_array.
+ *
+ * Returns: the #GValueArray passed in as @value_array
+ */
+GValueArray*
+g_value_array_append (GValueArray  *value_array,
+		      const GValue *value)
+{
+  g_return_val_if_fail (value_array != NULL, NULL);
+
+  return g_value_array_insert (value_array, value_array->n_values, value);
+}
+
+/**
+ * g_value_array_insert:
+ * @value_array: #GValueArray to add an element to
+ * @index_: insertion position, must be &lt;= value_array-&gt;n_values
+ * @value: #GValue to copy into #GValueArray
+ *
+ * Insert a copy of @value at specified position into @value_array.
+ *
+ * Returns: the #GValueArray passed in as @value_array
+ */
+GValueArray*
+g_value_array_insert (GValueArray  *value_array,
+		      guint         index,
+		      const GValue *value)
+{
+  guint i;
+
+  g_return_val_if_fail (value_array != NULL, NULL);
+  g_return_val_if_fail (index <= value_array->n_values, value_array);
+
+  /* we support NULL for "value" as a shortcut for an unset value */
+
+  i = value_array->n_values;
+  value_array_grow (value_array, value_array->n_values + 1, FALSE);
+  if (index + 1 < value_array->n_values)
+    g_memmove (value_array->values + index + 1, value_array->values + index,
+	       (i - index) * sizeof (value_array->values[0]));
+  memset (value_array->values + index, 0, sizeof (value_array->values[0]));
+  if (value)
+    {
+      g_value_init (value_array->values + index, G_VALUE_TYPE (value));
+      g_value_copy (value, value_array->values + index);
+    }
+  return value_array;
+}
+
+/**
+ * g_value_array_remove:
+ * @value_array: #GValueArray to remove an element from
+ * @index_: position of value to remove, must be &lt; value_array->n_values
+ *
+ * Remove the value at position @index_ from @value_array.
+ *
+ * Returns: the #GValueArray passed in as @value_array
+ */
+GValueArray*
+g_value_array_remove (GValueArray *value_array,
+		      guint        index)
+{
+  g_return_val_if_fail (value_array != NULL, NULL);
+  g_return_val_if_fail (index < value_array->n_values, value_array);
+
+  if (G_VALUE_TYPE (value_array->values + index) != 0)
+    g_value_unset (value_array->values + index);
+  value_array->n_values--;
+  if (index < value_array->n_values)
+    g_memmove (value_array->values + index, value_array->values + index + 1,
+	       (value_array->n_values - index) * sizeof (value_array->values[0]));
+  value_array_shrink (value_array);
+  if (value_array->n_prealloced > value_array->n_values)
+    memset (value_array->values + value_array->n_values, 0, sizeof (value_array->values[0]));
+
+  return value_array;
+}
+
+/**
+ * g_value_array_sort:
+ * @value_array: #GValueArray to sort
+ * @compare_func: function to compare elements
+ *
+ * Sort @value_array using @compare_func to compare the elements accoring to
+ * the semantics of #GCompareFunc.
+ *
+ * The current implementation uses Quick-Sort as sorting algorithm.
+ *
+ * Returns: the #GValueArray passed in as @value_array
+ */
+GValueArray*
+g_value_array_sort (GValueArray *value_array,
+		    GCompareFunc compare_func)
+{
+  g_return_val_if_fail (compare_func != NULL, NULL);
+
+  if (value_array->n_values)
+    qsort (value_array->values,
+	   value_array->n_values,
+	   sizeof (value_array->values[0]),
+	   compare_func);
+  return value_array;
+}
+
+/**
+ * g_value_array_sort_with_data:
+ * @value_array: #GValueArray to sort
+ * @compare_func: function to compare elements
+ * @user_data: extra data argument provided for @compare_func
+ *
+ * Sort @value_array using @compare_func to compare the elements accoring
+ * to the semantics of #GCompareDataFunc.
+ *
+ * The current implementation uses Quick-Sort as sorting algorithm.
+ *
+ * Returns: the #GValueArray passed in as @value_array
+ */
+GValueArray*
+g_value_array_sort_with_data (GValueArray     *value_array,
+			      GCompareDataFunc compare_func,
+			      gpointer         user_data)
+{
+  g_return_val_if_fail (value_array != NULL, NULL);
+  g_return_val_if_fail (compare_func != NULL, NULL);
+
+  if (value_array->n_values)
+    g_qsort_with_data (value_array->values,
+		       value_array->n_values,
+		       sizeof (value_array->values[0]),
+		       compare_func, user_data);
+  return value_array;
+}
+
+#define __G_VALUE_ARRAY_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gvaluearray.h b/gobject/gvaluearray.h
new file mode 100644
index 0000000..524dc9f
--- /dev/null
+++ b/gobject/gvaluearray.h
@@ -0,0 +1,77 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * gvaluearray.h: GLib array type holding GValues
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_VALUE_ARRAY_H__
+#define __G_VALUE_ARRAY_H__
+
+#include	<gobject/gvalue.h>
+
+
+G_BEGIN_DECLS
+
+
+/* --- typedefs & structs --- */
+typedef struct _GValueArray GValueArray;
+/**
+ * GValueArray:
+ * @n_values: number of values contained in the array
+ * @values: array of values
+ * 
+ * A #GValueArray contains an array of #GValue elements.
+ */
+struct _GValueArray
+{
+  guint   n_values;
+  GValue *values;
+
+  /*< private >*/
+  guint   n_prealloced;
+};
+
+
+/* --- prototypes --- */
+GValue*		g_value_array_get_nth	     (GValueArray	*value_array,
+					      guint		 index_);
+GValueArray*	g_value_array_new	     (guint		 n_prealloced);
+void		g_value_array_free	     (GValueArray	*value_array);
+GValueArray*	g_value_array_copy	     (const GValueArray *value_array);
+GValueArray*	g_value_array_prepend	     (GValueArray	*value_array,
+					      const GValue	*value);
+GValueArray*	g_value_array_append	     (GValueArray	*value_array,
+					      const GValue	*value);
+GValueArray*	g_value_array_insert	     (GValueArray	*value_array,
+					      guint		 index_,
+					      const GValue	*value);
+GValueArray*	g_value_array_remove	     (GValueArray	*value_array,
+					      guint		 index_);
+GValueArray*	g_value_array_sort	     (GValueArray	*value_array,
+					      GCompareFunc	 compare_func);
+GValueArray*	g_value_array_sort_with_data (GValueArray	*value_array,
+					      GCompareDataFunc	 compare_func,
+					      gpointer		 user_data);
+
+
+G_END_DECLS
+
+#endif /* __G_VALUE_ARRAY_H__ */
diff --git a/gobject/gvaluecollector.h b/gobject/gvaluecollector.h
new file mode 100644
index 0000000..bad9b55
--- /dev/null
+++ b/gobject/gvaluecollector.h
@@ -0,0 +1,195 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * gvaluecollector.h: GValue varargs stubs
+ */
+/**
+ * SECTION:value_collection
+ * @Short_description: Converting varargs to generic values
+ * @See_also:#GValueTable
+ * @Title: Varargs Value Collection
+ * 
+ * The macros in this section provide the varargs parsing support needed
+ * in variadic GObject functions such as g_object_new() or g_object_set().
+ * They currently support the collection of integral types, floating point 
+ * types and pointers.
+ */
+#ifndef __G_VALUE_COLLECTOR_H__
+#define __G_VALUE_COLLECTOR_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* we may want to add aggregate types here some day, if requested
+ * by users. the basic C types are covered already, everything
+ * smaller than an int is promoted to an integer and floats are
+ * always promoted to doubles for varargs call constructions.
+ */
+enum	/*< skip >*/
+{
+  G_VALUE_COLLECT_INT		= 'i',
+  G_VALUE_COLLECT_LONG		= 'l',
+  G_VALUE_COLLECT_INT64         = 'q',
+  G_VALUE_COLLECT_DOUBLE	= 'd',
+  G_VALUE_COLLECT_POINTER	= 'p'
+};
+
+
+/* vararg union holding actuall values collected
+ */
+/**
+ * GTypeCValue:
+ * 
+ * A union holding one collected value.
+ */
+union _GTypeCValue
+{
+  gint     v_int;
+  glong    v_long;
+  gint64   v_int64;
+  gdouble  v_double;
+  gpointer v_pointer;
+};
+
+/**
+ * G_VALUE_COLLECT:
+ * @value: a #GValue return location. @value is supposed to be initialized 
+ *  according to the value type to be collected
+ * @var_args: the va_list variable; it may be evaluated multiple times
+ * @flags: flags which are passed on to the collect_value() function of
+ *  the #GTypeValueTable of @value.
+ * @__error: a #gchar** variable that will be modified to hold a g_new()
+ *  allocated error messages if something fails
+ * 
+ * Collects a variable argument value from a va_list. We have to
+ * implement the varargs collection as a macro, because on some systems
+ * va_list variables cannot be passed by reference.
+ */
+#define G_VALUE_COLLECT(value, var_args, flags, __error)				\
+G_STMT_START {										\
+  GValue *_value = (value);								\
+  guint _flags = (flags);								\
+  GType _value_type = G_VALUE_TYPE (_value);						\
+  GTypeValueTable *_vtable = g_type_value_table_peek (_value_type);			\
+  gchar *_collect_format = _vtable->collect_format;					\
+  GTypeCValue _cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
+  guint _n_values = 0;									\
+                                                                                        \
+  if (_vtable->value_free)								\
+    _vtable->value_free (_value);							\
+  _value->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
+  memset (_value->data, 0, sizeof (_value->data));					\
+  while (*_collect_format)								\
+    {											\
+      GTypeCValue *_cvalue = _cvalues + _n_values++;					\
+                                                                                        \
+      switch (*_collect_format++)							\
+	{										\
+	case G_VALUE_COLLECT_INT:							\
+	  _cvalue->v_int = va_arg ((var_args), gint);					\
+	  break;									\
+	case G_VALUE_COLLECT_LONG:							\
+	  _cvalue->v_long = va_arg ((var_args), glong);					\
+	  break;									\
+	case G_VALUE_COLLECT_INT64:							\
+	  _cvalue->v_int64 = va_arg ((var_args), gint64);				\
+	  break;									\
+	case G_VALUE_COLLECT_DOUBLE:							\
+	  _cvalue->v_double = va_arg ((var_args), gdouble);				\
+	  break;									\
+	case G_VALUE_COLLECT_POINTER:							\
+	  _cvalue->v_pointer = va_arg ((var_args), gpointer);				\
+	  break;									\
+	default:									\
+	  g_assert_not_reached ();							\
+	}										\
+    }											\
+  *(__error) = _vtable->collect_value (_value,						\
+				       _n_values,					\
+				       _cvalues,					\
+				       _flags);						\
+} G_STMT_END
+
+
+/**
+ * G_VALUE_LCOPY:
+ * @value: a #GValue return location. @value is supposed to be initialized 
+ *  according to the value type to be collected
+ * @var_args: the va_list variable; it may be evaluated multiple times
+ * @flags: flags which are passed on to the lcopy_value() function of
+ *  the #GTypeValueTable of @value.
+ * @__error: a #gchar** variable that will be modified to hold a g_new()
+ *  allocated error messages if something fails
+ * 
+ * Collects a value's variable argument locations from a va_list. Usage is
+ * analogous to G_VALUE_COLLECT().
+ */
+#define G_VALUE_LCOPY(value, var_args, flags, __error)					\
+G_STMT_START {										\
+  const GValue *_value = (value);							\
+  guint _flags = (flags);								\
+  GType _value_type = G_VALUE_TYPE (_value);						\
+  GTypeValueTable *_vtable = g_type_value_table_peek (_value_type);			\
+  gchar *_lcopy_format = _vtable->lcopy_format;						\
+  GTypeCValue _cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
+  guint _n_values = 0;									\
+                                                                                        \
+  while (*_lcopy_format)								\
+    {											\
+      GTypeCValue *_cvalue = _cvalues + _n_values++;					\
+                                                                                        \
+      switch (*_lcopy_format++)								\
+	{										\
+	case G_VALUE_COLLECT_INT:							\
+	  _cvalue->v_int = va_arg ((var_args), gint);					\
+	  break;									\
+	case G_VALUE_COLLECT_LONG:							\
+	  _cvalue->v_long = va_arg ((var_args), glong);					\
+	  break;									\
+	case G_VALUE_COLLECT_INT64:							\
+	  _cvalue->v_int64 = va_arg ((var_args), gint64);				\
+	  break;									\
+	case G_VALUE_COLLECT_DOUBLE:							\
+	  _cvalue->v_double = va_arg ((var_args), gdouble);				\
+	  break;									\
+	case G_VALUE_COLLECT_POINTER:							\
+	  _cvalue->v_pointer = va_arg ((var_args), gpointer);				\
+	  break;									\
+	default:									\
+	  g_assert_not_reached ();							\
+	}										\
+    }											\
+  *(__error) = _vtable->lcopy_value (_value,						\
+				     _n_values,						\
+				     _cvalues,						\
+				     _flags);						\
+} G_STMT_END
+
+
+/**
+ * G_VALUE_COLLECT_FORMAT_MAX_LENGTH:
+ * 
+ * The maximal number of #GTypeCValue<!-- -->s which can be collected for a 
+ * single #GValue.
+ */
+#define	G_VALUE_COLLECT_FORMAT_MAX_LENGTH	(8)
+
+G_END_DECLS
+
+#endif /* __G_VALUE_COLLECTOR_H__ */
diff --git a/gobject/gvaluetransform.c b/gobject/gvaluetransform.c
new file mode 100644
index 0000000..e1c3bba
--- /dev/null
+++ b/gobject/gvaluetransform.c
@@ -0,0 +1,443 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "gvalue.h"
+#include "genums.h"
+#include "gobjectalias.h"
+
+
+/* same type transforms
+ */
+static void
+value_transform_memcpy_data0 (const GValue *src_value,
+                              GValue       *dest_value)
+{
+  memcpy (&dest_value->data[0], &src_value->data[0], sizeof (src_value->data[0]));
+}
+#define value_transform_int_int         value_transform_memcpy_data0
+#define value_transform_uint_uint       value_transform_memcpy_data0
+#define value_transform_long_long       value_transform_memcpy_data0
+#define value_transform_ulong_ulong     value_transform_memcpy_data0
+#define value_transform_int64_int64     value_transform_memcpy_data0
+#define value_transform_uint64_uint64   value_transform_memcpy_data0
+#define value_transform_float_float     value_transform_memcpy_data0
+#define value_transform_double_double   value_transform_memcpy_data0
+
+
+/* numeric casts
+ */
+#define DEFINE_CAST(func_name, from_member, ctype, to_member)               \
+static void                                                                 \
+value_transform_##func_name (const GValue *src_value,                       \
+                             GValue       *dest_value)                      \
+{                                                                           \
+  ctype c_value = src_value->data[0].from_member;                           \
+  dest_value->data[0].to_member = c_value;                                  \
+} extern void glib_dummy_decl (void)
+DEFINE_CAST (int_s8,            v_int,    gint8,   v_int);
+DEFINE_CAST (int_u8,            v_int,    guint8,  v_uint);
+DEFINE_CAST (int_uint,          v_int,    guint,   v_uint);
+DEFINE_CAST (int_long,          v_int,    glong,   v_long);
+DEFINE_CAST (int_ulong,         v_int,    gulong,  v_ulong);
+DEFINE_CAST (int_int64,         v_int,    gint64,  v_int64);
+DEFINE_CAST (int_uint64,        v_int,    guint64, v_uint64);
+DEFINE_CAST (int_float,         v_int,    gfloat,  v_float);
+DEFINE_CAST (int_double,        v_int,    gdouble, v_double);
+DEFINE_CAST (uint_s8,           v_uint,   gint8,   v_int);
+DEFINE_CAST (uint_u8,           v_uint,   guint8,  v_uint);
+DEFINE_CAST (uint_int,          v_uint,   gint,    v_int);
+DEFINE_CAST (uint_long,         v_uint,   glong,   v_long);
+DEFINE_CAST (uint_ulong,        v_uint,   gulong,  v_ulong);
+DEFINE_CAST (uint_int64,        v_uint,   gint64,  v_int64);
+DEFINE_CAST (uint_uint64,       v_uint,   guint64, v_uint64);
+DEFINE_CAST (uint_float,        v_uint,   gfloat,  v_float);
+DEFINE_CAST (uint_double,       v_uint,   gdouble, v_double);
+DEFINE_CAST (long_s8,           v_long,   gint8,   v_int);
+DEFINE_CAST (long_u8,           v_long,   guint8,  v_uint);
+DEFINE_CAST (long_int,          v_long,   gint,    v_int);
+DEFINE_CAST (long_uint,         v_long,   guint,   v_uint);
+DEFINE_CAST (long_ulong,        v_long,   gulong,  v_ulong);
+DEFINE_CAST (long_int64,        v_long,   gint64,  v_int64);
+DEFINE_CAST (long_uint64,       v_long,   guint64, v_uint64);
+DEFINE_CAST (long_float,        v_long,   gfloat,  v_float);
+DEFINE_CAST (long_double,       v_long,   gdouble, v_double);
+DEFINE_CAST (ulong_s8,          v_ulong,  gint8,   v_int);
+DEFINE_CAST (ulong_u8,          v_ulong,  guint8,  v_uint);
+DEFINE_CAST (ulong_int,         v_ulong,  gint,    v_int);
+DEFINE_CAST (ulong_uint,        v_ulong,  guint,   v_uint);
+DEFINE_CAST (ulong_int64,       v_ulong,  gint64,  v_int64);
+DEFINE_CAST (ulong_uint64,      v_ulong,  guint64, v_uint64);
+DEFINE_CAST (ulong_long,        v_ulong,  glong,   v_long);
+DEFINE_CAST (ulong_float,       v_ulong,  gfloat,  v_float);
+DEFINE_CAST (ulong_double,      v_ulong,  gdouble, v_double);
+DEFINE_CAST (int64_s8,          v_int64,  gint8,   v_int);
+DEFINE_CAST (int64_u8,          v_int64,  guint8,  v_uint);
+DEFINE_CAST (int64_int,         v_int64,  gint,    v_int);
+DEFINE_CAST (int64_uint,        v_int64,  guint,   v_uint);
+DEFINE_CAST (int64_long,        v_int64,  glong,   v_long);
+DEFINE_CAST (int64_uint64,      v_int64,  guint64, v_uint64);
+DEFINE_CAST (int64_ulong,       v_int64,  gulong,  v_ulong);
+DEFINE_CAST (int64_float,       v_int64,  gfloat,  v_float);
+DEFINE_CAST (int64_double,      v_int64,  gdouble, v_double);
+DEFINE_CAST (uint64_s8,         v_uint64, gint8,   v_int);
+DEFINE_CAST (uint64_u8,         v_uint64, guint8,  v_uint);
+DEFINE_CAST (uint64_int,        v_uint64, gint,    v_int);
+DEFINE_CAST (uint64_uint,       v_uint64, guint,   v_uint);
+DEFINE_CAST (uint64_long,       v_uint64, glong,   v_long);
+DEFINE_CAST (uint64_ulong,      v_uint64, gulong,  v_ulong);
+DEFINE_CAST (uint64_int64,      v_uint64, gint64,  v_int64);
+#ifdef _MSC_VER
+/* work around error C2520: conversion from unsigned __int64 to double
+ * not implemented, use signed __int64
+ * If it is supported don't miss to g_value_register_transform_func() below
+ */
+#pragma message ("Check if cast from uint64 to double is supported with msvc 6.0")
+#else
+DEFINE_CAST (uint64_float,      v_uint64, gfloat,  v_float);
+DEFINE_CAST (uint64_double,     v_uint64, gdouble, v_double);
+#endif
+DEFINE_CAST (float_s8,          v_float,  gint8,   v_int);
+DEFINE_CAST (float_u8,          v_float,  guint8,  v_uint);
+DEFINE_CAST (float_int,         v_float,  gint,    v_int);
+DEFINE_CAST (float_uint,        v_float,  guint,   v_uint);
+DEFINE_CAST (float_long,        v_float,  glong,   v_long);
+DEFINE_CAST (float_ulong,       v_float,  gulong,  v_ulong);
+DEFINE_CAST (float_int64,       v_float,  gint64,  v_int64);
+DEFINE_CAST (float_uint64,      v_float,  guint64, v_uint64);
+DEFINE_CAST (float_double,      v_float,  gdouble, v_double);
+DEFINE_CAST (double_s8,         v_double, gint8,   v_int);
+DEFINE_CAST (double_u8,         v_double, guint8,  v_uint);
+DEFINE_CAST (double_int,        v_double, gint,    v_int);
+DEFINE_CAST (double_uint,       v_double, guint,   v_uint);
+DEFINE_CAST (double_long,       v_double, glong,   v_long);
+DEFINE_CAST (double_ulong,      v_double, gulong,  v_ulong);
+DEFINE_CAST (double_int64,      v_double, gint64,  v_int64);
+DEFINE_CAST (double_uint64,     v_double, guint64, v_uint64);
+DEFINE_CAST (double_float,      v_double, gfloat,  v_float);
+
+
+/* boolean assignments
+ */
+#define DEFINE_BOOL_CHECK(func_name, from_member)                           \
+static void                                                                 \
+value_transform_##func_name (const GValue *src_value,                       \
+                             GValue       *dest_value)                      \
+{                                                                           \
+  dest_value->data[0].v_int = src_value->data[0].from_member != 0;  \
+} extern void glib_dummy_decl (void)
+DEFINE_BOOL_CHECK (int_bool,    v_int);
+DEFINE_BOOL_CHECK (uint_bool,   v_uint);
+DEFINE_BOOL_CHECK (long_bool,   v_long);
+DEFINE_BOOL_CHECK (ulong_bool,  v_uint);
+DEFINE_BOOL_CHECK (int64_bool,  v_int64);
+DEFINE_BOOL_CHECK (uint64_bool, v_uint64);
+
+
+/* string printouts
+ */
+#define DEFINE_SPRINTF(func_name, from_member, format)                      \
+static void                                                                 \
+value_transform_##func_name (const GValue *src_value,                       \
+                             GValue       *dest_value)                      \
+{                                                                           \
+  dest_value->data[0].v_pointer = g_strdup_printf ((format),                \
+						   src_value->data[0].from_member);             \
+} extern void glib_dummy_decl (void)
+DEFINE_SPRINTF (int_string,     v_int,    "%d");
+DEFINE_SPRINTF (uint_string,    v_uint,   "%u");
+DEFINE_SPRINTF (long_string,    v_long,   "%ld");
+DEFINE_SPRINTF (ulong_string,   v_ulong,  "%lu");
+DEFINE_SPRINTF (int64_string,   v_int64,  "%" G_GINT64_FORMAT);
+DEFINE_SPRINTF (uint64_string,  v_uint64, "%" G_GUINT64_FORMAT);
+DEFINE_SPRINTF (float_string,   v_float,  "%f");
+DEFINE_SPRINTF (double_string,  v_double, "%f");
+
+
+/* special cases
+ */
+static void
+value_transform_bool_string (const GValue *src_value,
+                             GValue       *dest_value)
+{
+  dest_value->data[0].v_pointer = g_strdup_printf ("%s",
+                                                   src_value->data[0].v_int ?
+                                                   "TRUE" : "FALSE");
+}
+static void
+value_transform_string_string (const GValue *src_value,
+                               GValue       *dest_value)
+{
+  dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer);
+}
+static void
+value_transform_enum_string (const GValue *src_value,
+                             GValue       *dest_value)
+{
+  GEnumClass *class = g_type_class_ref (G_VALUE_TYPE (src_value));
+  GEnumValue *enum_value = g_enum_get_value (class, src_value->data[0].v_long);
+  
+  if (enum_value)
+    dest_value->data[0].v_pointer = g_strdup (enum_value->value_name);
+  else
+    dest_value->data[0].v_pointer = g_strdup_printf ("%ld", src_value->data[0].v_long);
+  
+  g_type_class_unref (class);
+}
+static void
+value_transform_flags_string (const GValue *src_value,
+                              GValue       *dest_value)
+{
+  GFlagsClass *class = g_type_class_ref (G_VALUE_TYPE (src_value));
+  GFlagsValue *flags_value = g_flags_get_first_value (class, src_value->data[0].v_ulong);
+  
+  if (flags_value)
+    {
+      GString *gstring = g_string_new (NULL);
+      guint v_flags = src_value->data[0].v_ulong;
+      
+      do
+        {
+          v_flags &= ~flags_value->value;
+          
+          if (gstring->str[0])
+            g_string_append (gstring, " | ");
+          g_string_append (gstring, flags_value->value_name);
+          flags_value = g_flags_get_first_value (class, v_flags);
+        }
+      while (flags_value);
+      
+      if (v_flags)
+        dest_value->data[0].v_pointer = g_strdup_printf ("%s | %u",
+                                                         gstring->str,
+                                                         v_flags);
+      else
+        dest_value->data[0].v_pointer = g_strdup (gstring->str);
+      g_string_free (gstring, TRUE);
+    }
+  else
+    dest_value->data[0].v_pointer = g_strdup_printf ("%lu", src_value->data[0].v_ulong);
+  
+  g_type_class_unref (class);
+}
+
+
+/* registration
+ */
+void
+g_value_transforms_init (void)
+{
+  /* some transformations are a bit questionable,
+   * we currently skip those
+   */
+#define SKIP____register_transform_func(type1,type2,transform_func)     /* skip questionable transforms */ \
+  (void)0
+  
+  /* numeric types (plus to string) */
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_CHAR,            value_transform_int_int);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UCHAR,           value_transform_int_u8);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_BOOLEAN,         value_transform_int_bool);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT,             value_transform_int_int);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UINT,            value_transform_int_uint);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_LONG,            value_transform_int_long);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_ULONG,           value_transform_int_ulong);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_INT64,           value_transform_int_int64);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_UINT64,          value_transform_int_uint64);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_ENUM,            value_transform_int_long);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_FLAGS,           value_transform_int_ulong);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_FLOAT,           value_transform_int_float);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_DOUBLE,          value_transform_int_double);
+  g_value_register_transform_func (G_TYPE_CHAR,         G_TYPE_STRING,          value_transform_int_string);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_CHAR,            value_transform_uint_s8);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UCHAR,           value_transform_uint_uint);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_BOOLEAN,         value_transform_uint_bool);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_INT,             value_transform_uint_int);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT,            value_transform_uint_uint);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_LONG,            value_transform_uint_long);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_ULONG,           value_transform_uint_ulong);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_INT64,           value_transform_uint_int64);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_UINT64,          value_transform_uint_uint64);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_ENUM,            value_transform_uint_long);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_FLAGS,           value_transform_uint_ulong);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_FLOAT,           value_transform_uint_float);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_DOUBLE,          value_transform_uint_double);
+  g_value_register_transform_func (G_TYPE_UCHAR,        G_TYPE_STRING,          value_transform_uint_string);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_CHAR,            value_transform_int_s8);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UCHAR,           value_transform_int_u8);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_BOOLEAN,         value_transform_int_int);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT,             value_transform_int_int);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UINT,            value_transform_int_uint);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_LONG,            value_transform_int_long);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_ULONG,           value_transform_int_ulong);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_INT64,           value_transform_int_int64);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_UINT64,          value_transform_int_uint64);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_ENUM,            value_transform_int_long);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_FLAGS,           value_transform_int_ulong);
+  SKIP____register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_FLOAT,           value_transform_int_float);
+  SKIP____register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_DOUBLE,          value_transform_int_double);
+  g_value_register_transform_func (G_TYPE_BOOLEAN,      G_TYPE_STRING,          value_transform_bool_string);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_CHAR,            value_transform_int_s8);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UCHAR,           value_transform_int_u8);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_BOOLEAN,         value_transform_int_bool);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT,             value_transform_int_int);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UINT,            value_transform_int_uint);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_LONG,            value_transform_int_long);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_ULONG,           value_transform_int_ulong);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_INT64,           value_transform_int_int64);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_UINT64,          value_transform_int_uint64);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_ENUM,            value_transform_int_long);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_FLAGS,           value_transform_int_ulong);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_FLOAT,           value_transform_int_float);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_DOUBLE,          value_transform_int_double);
+  g_value_register_transform_func (G_TYPE_INT,          G_TYPE_STRING,          value_transform_int_string);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_CHAR,            value_transform_uint_s8);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UCHAR,           value_transform_uint_u8);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_BOOLEAN,         value_transform_uint_bool);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_INT,             value_transform_uint_int);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT,            value_transform_uint_uint);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_LONG,            value_transform_uint_long);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_ULONG,           value_transform_uint_ulong);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_INT64,           value_transform_uint_int64);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_UINT64,          value_transform_uint_uint64);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_ENUM,            value_transform_uint_long);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_FLAGS,           value_transform_uint_ulong);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_FLOAT,           value_transform_uint_float);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_DOUBLE,          value_transform_uint_double);
+  g_value_register_transform_func (G_TYPE_UINT,         G_TYPE_STRING,          value_transform_uint_string);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_CHAR,            value_transform_long_s8);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UCHAR,           value_transform_long_u8);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_BOOLEAN,         value_transform_long_bool);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_INT,             value_transform_long_int);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UINT,            value_transform_long_uint);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_LONG,            value_transform_long_long);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ULONG,           value_transform_long_ulong);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_INT64,           value_transform_long_int64);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_UINT64,          value_transform_long_uint64);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_ENUM,            value_transform_long_long);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_FLAGS,           value_transform_long_ulong);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_FLOAT,           value_transform_long_float);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_DOUBLE,          value_transform_long_double);
+  g_value_register_transform_func (G_TYPE_LONG,         G_TYPE_STRING,          value_transform_long_string);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_CHAR,            value_transform_ulong_s8);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UCHAR,           value_transform_ulong_u8);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_BOOLEAN,         value_transform_ulong_bool);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_INT,             value_transform_ulong_int);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UINT,            value_transform_ulong_uint);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_LONG,            value_transform_ulong_long);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ULONG,           value_transform_ulong_ulong);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_INT64,           value_transform_ulong_int64);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_UINT64,          value_transform_ulong_uint64);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_ENUM,            value_transform_ulong_long);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_FLOAT,           value_transform_ulong_float);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_DOUBLE,          value_transform_ulong_double);
+  g_value_register_transform_func (G_TYPE_ULONG,        G_TYPE_STRING,          value_transform_ulong_string);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_CHAR,            value_transform_int64_s8);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UCHAR,           value_transform_int64_u8);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_BOOLEAN,         value_transform_int64_bool);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT,             value_transform_int64_int);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UINT,            value_transform_int64_uint);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_LONG,            value_transform_int64_long);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_ULONG,           value_transform_int64_ulong);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_INT64,           value_transform_int64_int64);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_UINT64,          value_transform_int64_uint64);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_ENUM,            value_transform_int64_long);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_FLAGS,           value_transform_int64_ulong);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_FLOAT,           value_transform_int64_float);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_DOUBLE,          value_transform_int64_double);
+  g_value_register_transform_func (G_TYPE_INT64,        G_TYPE_STRING,          value_transform_int64_string);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_CHAR,            value_transform_uint64_s8);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UCHAR,           value_transform_uint64_u8);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_BOOLEAN,         value_transform_uint64_bool);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_INT,             value_transform_uint64_int);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT,            value_transform_uint64_uint);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_LONG,            value_transform_uint64_long);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_ULONG,           value_transform_uint64_ulong);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_INT64,           value_transform_uint64_int64);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_UINT64,          value_transform_uint64_uint64);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_ENUM,            value_transform_uint64_long);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_FLAGS,           value_transform_uint64_ulong);
+#ifndef _MSC_VER
+  /* required casts unsupported with msvc 5.0 */
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_FLOAT,           value_transform_uint64_float);
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_DOUBLE,          value_transform_uint64_double);
+#endif
+  g_value_register_transform_func (G_TYPE_UINT64,       G_TYPE_STRING,          value_transform_uint64_string);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_CHAR,            value_transform_long_s8);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UCHAR,           value_transform_long_u8);
+  SKIP____register_transform_func (G_TYPE_ENUM,         G_TYPE_BOOLEAN,         value_transform_long_bool);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_INT,             value_transform_long_int);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UINT,            value_transform_long_uint);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_LONG,            value_transform_long_long);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ULONG,           value_transform_long_ulong);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_INT64,           value_transform_long_int64);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_UINT64,          value_transform_long_uint64);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_ENUM,            value_transform_long_long);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_FLAGS,           value_transform_long_ulong);
+  SKIP____register_transform_func (G_TYPE_ENUM,         G_TYPE_FLOAT,           value_transform_long_float);
+  SKIP____register_transform_func (G_TYPE_ENUM,         G_TYPE_DOUBLE,          value_transform_long_double);
+  g_value_register_transform_func (G_TYPE_ENUM,         G_TYPE_STRING,          value_transform_enum_string);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_CHAR,            value_transform_ulong_s8);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UCHAR,           value_transform_ulong_u8);
+  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_BOOLEAN,         value_transform_ulong_bool);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_INT,             value_transform_ulong_int);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UINT,            value_transform_ulong_uint);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_LONG,            value_transform_ulong_long);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_ULONG,           value_transform_ulong_ulong);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_INT64,           value_transform_ulong_int64);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_UINT64,          value_transform_ulong_uint64);
+  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_ENUM,            value_transform_ulong_long);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_FLAGS,           value_transform_ulong_ulong);
+  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_FLOAT,           value_transform_ulong_float);
+  SKIP____register_transform_func (G_TYPE_FLAGS,        G_TYPE_DOUBLE,          value_transform_ulong_double);
+  g_value_register_transform_func (G_TYPE_FLAGS,        G_TYPE_STRING,          value_transform_flags_string);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_CHAR,            value_transform_float_s8);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UCHAR,           value_transform_float_u8);
+  SKIP____register_transform_func (G_TYPE_FLOAT,        G_TYPE_BOOLEAN,         value_transform_float_bool);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_INT,             value_transform_float_int);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UINT,            value_transform_float_uint);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_LONG,            value_transform_float_long);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_ULONG,           value_transform_float_ulong);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_INT64,           value_transform_float_int64);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_UINT64,          value_transform_float_uint64);
+  SKIP____register_transform_func (G_TYPE_FLOAT,        G_TYPE_ENUM,            value_transform_float_long);
+  SKIP____register_transform_func (G_TYPE_FLOAT,        G_TYPE_FLAGS,           value_transform_float_ulong);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_FLOAT,           value_transform_float_float);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_DOUBLE,          value_transform_float_double);
+  g_value_register_transform_func (G_TYPE_FLOAT,        G_TYPE_STRING,          value_transform_float_string);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_CHAR,            value_transform_double_s8);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UCHAR,           value_transform_double_u8);
+  SKIP____register_transform_func (G_TYPE_DOUBLE,       G_TYPE_BOOLEAN,         value_transform_double_bool);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_INT,             value_transform_double_int);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UINT,            value_transform_double_uint);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_LONG,            value_transform_double_long);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_ULONG,           value_transform_double_ulong);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_INT64,           value_transform_double_int64);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_UINT64,          value_transform_double_uint64);
+  SKIP____register_transform_func (G_TYPE_DOUBLE,       G_TYPE_ENUM,            value_transform_double_long);
+  SKIP____register_transform_func (G_TYPE_DOUBLE,       G_TYPE_FLAGS,           value_transform_double_ulong);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_FLOAT,           value_transform_double_float);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_DOUBLE,          value_transform_double_double);
+  g_value_register_transform_func (G_TYPE_DOUBLE,       G_TYPE_STRING,          value_transform_double_string);
+  /* string types */
+  g_value_register_transform_func (G_TYPE_STRING,       G_TYPE_STRING,          value_transform_string_string);
+}
diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c
new file mode 100644
index 0000000..5713e48
--- /dev/null
+++ b/gobject/gvaluetypes.c
@@ -0,0 +1,1212 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h> /* qsort() */
+
+#include "gvaluetypes.h"
+#include "gvaluecollector.h"
+#include "gobject.h"
+#include "gparam.h"
+#include "gboxed.h"
+#include "genums.h"
+#include "gobjectalias.h"
+
+
+/* --- value functions --- */
+static void
+value_init_long0 (GValue *value)
+{
+  value->data[0].v_long = 0;
+}
+
+static void
+value_copy_long0 (const GValue *src_value,
+		  GValue       *dest_value)
+{
+  dest_value->data[0].v_long = src_value->data[0].v_long;
+}
+
+static gchar*
+value_lcopy_char (const GValue *value,
+		  guint         n_collect_values,
+		  GTypeCValue  *collect_values,
+		  guint         collect_flags)
+{
+  gint8 *int8_p = collect_values[0].v_pointer;
+  
+  if (!int8_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *int8_p = value->data[0].v_int;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_boolean (const GValue *value,
+		     guint         n_collect_values,
+		     GTypeCValue  *collect_values,
+		     guint         collect_flags)
+{
+  gboolean *bool_p = collect_values[0].v_pointer;
+  
+  if (!bool_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *bool_p = value->data[0].v_int;
+  
+  return NULL;
+}
+
+static gchar*
+value_collect_int (GValue      *value,
+		   guint        n_collect_values,
+		   GTypeCValue *collect_values,
+		   guint        collect_flags)
+{
+  value->data[0].v_int = collect_values[0].v_int;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_int (const GValue *value,
+		 guint         n_collect_values,
+		 GTypeCValue  *collect_values,
+		 guint         collect_flags)
+{
+  gint *int_p = collect_values[0].v_pointer;
+  
+  if (!int_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *int_p = value->data[0].v_int;
+  
+  return NULL;
+}
+
+static gchar*
+value_collect_long (GValue      *value,
+		    guint        n_collect_values,
+		    GTypeCValue *collect_values,
+		    guint        collect_flags)
+{
+  value->data[0].v_long = collect_values[0].v_long;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_long (const GValue *value,
+		  guint         n_collect_values,
+		  GTypeCValue  *collect_values,
+		  guint         collect_flags)
+{
+  glong *long_p = collect_values[0].v_pointer;
+  
+  if (!long_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *long_p = value->data[0].v_long;
+  
+  return NULL;
+}
+
+static void
+value_init_int64 (GValue *value)
+{
+  value->data[0].v_int64 = 0;
+}
+
+static void
+value_copy_int64 (const GValue *src_value,
+		  GValue       *dest_value)
+{
+  dest_value->data[0].v_int64 = src_value->data[0].v_int64;
+}
+
+static gchar*
+value_collect_int64 (GValue      *value,
+		     guint        n_collect_values,
+		     GTypeCValue *collect_values,
+		     guint        collect_flags)
+{
+  value->data[0].v_int64 = collect_values[0].v_int64;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_int64 (const GValue *value,
+		   guint         n_collect_values,
+		   GTypeCValue  *collect_values,
+		   guint         collect_flags)
+{
+  gint64 *int64_p = collect_values[0].v_pointer;
+  
+  if (!int64_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *int64_p = value->data[0].v_int64;
+  
+  return NULL;
+}
+
+static void
+value_init_float (GValue *value)
+{
+  value->data[0].v_float = 0.0;
+}
+
+static void
+value_copy_float (const GValue *src_value,
+		  GValue       *dest_value)
+{
+  dest_value->data[0].v_float = src_value->data[0].v_float;
+}
+
+static gchar*
+value_collect_float (GValue      *value,
+		     guint        n_collect_values,
+		     GTypeCValue *collect_values,
+		     guint        collect_flags)
+{
+  value->data[0].v_float = collect_values[0].v_double;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_float (const GValue *value,
+		   guint         n_collect_values,
+		   GTypeCValue  *collect_values,
+		   guint         collect_flags)
+{
+  gfloat *float_p = collect_values[0].v_pointer;
+  
+  if (!float_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *float_p = value->data[0].v_float;
+  
+  return NULL;
+}
+
+static void
+value_init_double (GValue *value)
+{
+  value->data[0].v_double = 0.0;
+}
+
+static void
+value_copy_double (const GValue *src_value,
+		   GValue	*dest_value)
+{
+  dest_value->data[0].v_double = src_value->data[0].v_double;
+}
+
+static gchar*
+value_collect_double (GValue	  *value,
+		      guint        n_collect_values,
+		      GTypeCValue *collect_values,
+		      guint        collect_flags)
+{
+  value->data[0].v_double = collect_values[0].v_double;
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_double (const GValue *value,
+		    guint         n_collect_values,
+		    GTypeCValue  *collect_values,
+		    guint         collect_flags)
+{
+  gdouble *double_p = collect_values[0].v_pointer;
+  
+  if (!double_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  *double_p = value->data[0].v_double;
+  
+  return NULL;
+}
+
+static void
+value_init_string (GValue *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static void
+value_free_string (GValue *value)
+{
+  if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+    g_free (value->data[0].v_pointer);
+}
+
+static void
+value_copy_string (const GValue *src_value,
+		   GValue	*dest_value)
+{
+  dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer);
+}
+
+static gchar*
+value_collect_string (GValue	  *value,
+		      guint        n_collect_values,
+		      GTypeCValue *collect_values,
+		      guint        collect_flags)
+{
+  if (!collect_values[0].v_pointer)
+    value->data[0].v_pointer = NULL;
+  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+    {
+      value->data[0].v_pointer = collect_values[0].v_pointer;
+      value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
+    }
+  else
+    value->data[0].v_pointer = g_strdup (collect_values[0].v_pointer);
+  
+  return NULL;
+}
+
+static gchar*
+value_lcopy_string (const GValue *value,
+		    guint         n_collect_values,
+		    GTypeCValue  *collect_values,
+		    guint         collect_flags)
+{
+  gchar **string_p = collect_values[0].v_pointer;
+  
+  if (!string_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+  
+  if (!value->data[0].v_pointer)
+    *string_p = NULL;
+  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
+    *string_p = value->data[0].v_pointer;
+  else
+    *string_p = g_strdup (value->data[0].v_pointer);
+  
+  return NULL;
+}
+
+static void
+value_init_pointer (GValue *value)
+{
+  value->data[0].v_pointer = NULL;
+}
+
+static void
+value_copy_pointer (const GValue *src_value,
+		    GValue       *dest_value)
+{
+  dest_value->data[0].v_pointer = src_value->data[0].v_pointer;
+}
+
+static gpointer
+value_peek_pointer0 (const GValue *value)
+{
+  return value->data[0].v_pointer;
+}
+
+static gchar*
+value_collect_pointer (GValue      *value,
+		       guint        n_collect_values,
+		       GTypeCValue *collect_values,
+		       guint        collect_flags)
+{
+  value->data[0].v_pointer = collect_values[0].v_pointer;
+
+  return NULL;
+}
+
+static gchar*
+value_lcopy_pointer (const GValue *value,
+		     guint         n_collect_values,
+		     GTypeCValue  *collect_values,
+		     guint         collect_flags)
+{
+  gpointer *pointer_p = collect_values[0].v_pointer;
+
+  if (!pointer_p)
+    return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+
+  *pointer_p = value->data[0].v_pointer;
+
+  return NULL;
+}
+
+
+/* --- type initialization --- */
+void
+g_value_types_init (void)
+{
+  GTypeInfo info = {
+    0,				/* class_size */
+    NULL,			/* base_init */
+    NULL,			/* base_destroy */
+    NULL,			/* class_init */
+    NULL,			/* class_destroy */
+    NULL,			/* class_data */
+    0,				/* instance_size */
+    0,				/* n_preallocs */
+    NULL,			/* instance_init */
+    NULL,			/* value_table */
+  };
+  const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
+  GType type;
+  
+  /* G_TYPE_CHAR / G_TYPE_UCHAR
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_long0,		/* value_init */
+      NULL,			/* value_free */
+      value_copy_long0,		/* value_copy */
+      NULL,			/* value_peek_pointer */
+      "i",			/* collect_format */
+      value_collect_int,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_char,		/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_CHAR, g_intern_static_string ("gchar"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_CHAR);
+    type = g_type_register_fundamental (G_TYPE_UCHAR, g_intern_static_string ("guchar"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_UCHAR);
+  }
+
+  /* G_TYPE_BOOLEAN
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_long0,		 /* value_init */
+      NULL,			 /* value_free */
+      value_copy_long0,		 /* value_copy */
+      NULL,                      /* value_peek_pointer */
+      "i",			 /* collect_format */
+      value_collect_int,	 /* collect_value */
+      "p",			 /* lcopy_format */
+      value_lcopy_boolean,	 /* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_BOOLEAN, g_intern_static_string ("gboolean"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_BOOLEAN);
+  }
+  
+  /* G_TYPE_INT / G_TYPE_UINT
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_long0,		/* value_init */
+      NULL,			/* value_free */
+      value_copy_long0,		/* value_copy */
+      NULL,                     /* value_peek_pointer */
+      "i",			/* collect_format */
+      value_collect_int,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_int,		/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_INT, g_intern_static_string ("gint"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_INT);
+    type = g_type_register_fundamental (G_TYPE_UINT, g_intern_static_string ("guint"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_UINT);
+  }
+
+  /* G_TYPE_LONG / G_TYPE_ULONG
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_long0,		/* value_init */
+      NULL,			/* value_free */
+      value_copy_long0,		/* value_copy */
+      NULL,                     /* value_peek_pointer */
+      "l",			/* collect_format */
+      value_collect_long,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_long,		/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_LONG, g_intern_static_string ("glong"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_LONG);
+    type = g_type_register_fundamental (G_TYPE_ULONG, g_intern_static_string ("gulong"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_ULONG);
+  }
+  
+  /* G_TYPE_INT64 / G_TYPE_UINT64
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_int64,		/* value_init */
+      NULL,			/* value_free */
+      value_copy_int64,		/* value_copy */
+      NULL,                     /* value_peek_pointer */
+      "q",			/* collect_format */
+      value_collect_int64,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_int64,	/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_INT64, g_intern_static_string ("gint64"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_INT64);
+    type = g_type_register_fundamental (G_TYPE_UINT64, g_intern_static_string ("guint64"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_UINT64);
+  }
+  
+  /* G_TYPE_FLOAT
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_float,		 /* value_init */
+      NULL,			 /* value_free */
+      value_copy_float,		 /* value_copy */
+      NULL,                      /* value_peek_pointer */
+      "d",			 /* collect_format */
+      value_collect_float,	 /* collect_value */
+      "p",			 /* lcopy_format */
+      value_lcopy_float,	 /* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_FLOAT, g_intern_static_string ("gfloat"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_FLOAT);
+  }
+  
+  /* G_TYPE_DOUBLE
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_double,	/* value_init */
+      NULL,			/* value_free */
+      value_copy_double,	/* value_copy */
+      NULL,                     /* value_peek_pointer */
+      "d",			/* collect_format */
+      value_collect_double,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_double,	/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_DOUBLE, g_intern_static_string ("gdouble"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_DOUBLE);
+  }
+
+  /* G_TYPE_STRING
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_string,	/* value_init */
+      value_free_string,	/* value_free */
+      value_copy_string,	/* value_copy */
+      value_peek_pointer0,	/* value_peek_pointer */
+      "p",			/* collect_format */
+      value_collect_string,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_string,	/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_STRING, g_intern_static_string ("gchararray"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_STRING);
+  }
+
+  /* G_TYPE_POINTER
+   */
+  {
+    static const GTypeValueTable value_table = {
+      value_init_pointer,	/* value_init */
+      NULL,			/* value_free */
+      value_copy_pointer,	/* value_copy */
+      value_peek_pointer0,	/* value_peek_pointer */
+      "p",			/* collect_format */
+      value_collect_pointer,	/* collect_value */
+      "p",			/* lcopy_format */
+      value_lcopy_pointer,	/* lcopy_value */
+    };
+    info.value_table = &value_table;
+    type = g_type_register_fundamental (G_TYPE_POINTER, g_intern_static_string ("gpointer"), &info, &finfo, 0);
+    g_assert (type == G_TYPE_POINTER);
+  }
+}
+
+
+/* --- GValue functions --- */
+/**
+ * g_value_set_char:
+ * @value: a valid #GValue of type %G_TYPE_CHAR
+ * @v_char: character value to be set
+ *
+ * Set the contents of a %G_TYPE_CHAR #GValue to @v_char.
+ */
+void
+g_value_set_char (GValue *value,
+		  gchar	  v_char)
+{
+  g_return_if_fail (G_VALUE_HOLDS_CHAR (value));
+  
+  value->data[0].v_int = v_char;
+}
+
+/**
+ * g_value_get_char:
+ * @value: a valid #GValue of type %G_TYPE_CHAR
+ *
+ * Get the contents of a %G_TYPE_CHAR #GValue.
+ * 
+ * Returns: character contents of @value
+ */
+gchar
+g_value_get_char (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_CHAR (value), 0);
+  
+  return value->data[0].v_int;
+}
+
+/**
+ * g_value_set_uchar:
+ * @value: a valid #GValue of type %G_TYPE_UCHAR
+ * @v_uchar: unsigned character value to be set
+ *
+ * Set the contents of a %G_TYPE_UCHAR #GValue to @v_uchar.
+ */
+void
+g_value_set_uchar (GValue *value,
+		   guchar  v_uchar)
+{
+  g_return_if_fail (G_VALUE_HOLDS_UCHAR (value));
+  
+  value->data[0].v_uint = v_uchar;
+}
+
+/**
+ * g_value_get_uchar:
+ * @value: a valid #GValue of type %G_TYPE_UCHAR
+ *
+ * Get the contents of a %G_TYPE_UCHAR #GValue.
+ *
+ * Returns: unsigned character contents of @value
+ */
+guchar
+g_value_get_uchar (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_UCHAR (value), 0);
+  
+  return value->data[0].v_uint;
+}
+
+/**
+ * g_value_set_boolean:
+ * @value: a valid #GValue of type %G_TYPE_BOOLEAN
+ * @v_boolean: boolean value to be set
+ *
+ * Set the contents of a %G_TYPE_BOOLEAN #GValue to @v_boolean.
+ */
+void
+g_value_set_boolean (GValue  *value,
+		     gboolean v_boolean)
+{
+  g_return_if_fail (G_VALUE_HOLDS_BOOLEAN (value));
+  
+  value->data[0].v_int = v_boolean != FALSE;
+}
+
+/**
+ * g_value_get_boolean:
+ * @value: a valid #GValue of type %G_TYPE_BOOLEAN
+ *
+ * Get the contents of a %G_TYPE_BOOLEAN #GValue.
+ *
+ * Returns: boolean contents of @value
+ */
+gboolean
+g_value_get_boolean (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (value), 0);
+  
+  return value->data[0].v_int;
+}
+
+/**
+ * g_value_set_int:
+ * @value: a valid #GValue of type %G_TYPE_INT
+ * @v_int: integer value to be set
+ *
+ * Set the contents of a %G_TYPE_INT #GValue to @v_int.
+ */
+void
+g_value_set_int (GValue *value,
+		 gint	 v_int)
+{
+  g_return_if_fail (G_VALUE_HOLDS_INT (value));
+  
+  value->data[0].v_int = v_int;
+}
+
+/**
+ * g_value_get_int:
+ * @value: a valid #GValue of type %G_TYPE_INT
+ *
+ * Get the contents of a %G_TYPE_INT #GValue.
+ *
+ * Returns: integer contents of @value
+ */
+gint
+g_value_get_int (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_INT (value), 0);
+  
+  return value->data[0].v_int;
+}
+
+/**
+ * g_value_set_uint:
+ * @value: a valid #GValue of type %G_TYPE_UINT
+ * @v_uint: unsigned integer value to be set
+ *
+ * Set the contents of a %G_TYPE_UINT #GValue to @v_uint.
+ */
+void
+g_value_set_uint (GValue *value,
+		  guint	  v_uint)
+{
+  g_return_if_fail (G_VALUE_HOLDS_UINT (value));
+  
+  value->data[0].v_uint = v_uint;
+}
+
+/**
+ * g_value_get_uint:
+ * @value: a valid #GValue of type %G_TYPE_UINT
+ *
+ * Get the contents of a %G_TYPE_UINT #GValue.
+ *
+ * Returns: unsigned integer contents of @value
+ */
+guint
+g_value_get_uint (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_UINT (value), 0);
+  
+  return value->data[0].v_uint;
+}
+
+/**
+ * g_value_set_long:
+ * @value: a valid #GValue of type %G_TYPE_LONG
+ * @v_long: long integer value to be set
+ *
+ * Set the contents of a %G_TYPE_LONG #GValue to @v_long.
+ */
+void
+g_value_set_long (GValue *value,
+		  glong	  v_long)
+{
+  g_return_if_fail (G_VALUE_HOLDS_LONG (value));
+  
+  value->data[0].v_long = v_long;
+}
+
+/**
+ * g_value_get_long:
+ * @value: a valid #GValue of type %G_TYPE_LONG
+ *
+ * Get the contents of a %G_TYPE_LONG #GValue.
+ *
+ * Returns: long integer contents of @value
+ */
+glong
+g_value_get_long (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_LONG (value), 0);
+  
+  return value->data[0].v_long;
+}
+
+/**
+ * g_value_set_ulong:
+ * @value: a valid #GValue of type %G_TYPE_ULONG
+ * @v_ulong: unsigned long integer value to be set
+ *
+ * Set the contents of a %G_TYPE_ULONG #GValue to @v_ulong.
+ */
+void
+g_value_set_ulong (GValue *value,
+		   gulong  v_ulong)
+{
+  g_return_if_fail (G_VALUE_HOLDS_ULONG (value));
+  
+  value->data[0].v_ulong = v_ulong;
+}
+
+/**
+ * g_value_get_ulong:
+ * @value: a valid #GValue of type %G_TYPE_ULONG
+ *
+ * Get the contents of a %G_TYPE_ULONG #GValue.
+ *
+ * Returns: unsigned long integer contents of @value
+ */
+gulong
+g_value_get_ulong (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_ULONG (value), 0);
+  
+  return value->data[0].v_ulong;
+}
+
+/**
+ * g_value_get_int64:
+ * @value: a valid #GValue of type %G_TYPE_INT64
+ *
+ * Get the contents of a %G_TYPE_INT64 #GValue.
+ *
+ * Returns: 64bit integer contents of @value
+ */
+void
+g_value_set_int64 (GValue *value,
+		   gint64  v_int64)
+{
+  g_return_if_fail (G_VALUE_HOLDS_INT64 (value));
+  
+  value->data[0].v_int64 = v_int64;
+}
+
+/**
+ * g_value_set_int64:
+ * @value: a valid #GValue of type %G_TYPE_INT64
+ * @v_int64: 64bit integer value to be set
+ *
+ * Set the contents of a %G_TYPE_INT64 #GValue to @v_int64.
+ */
+gint64
+g_value_get_int64 (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_INT64 (value), 0);
+  
+  return value->data[0].v_int64;
+}
+
+/**
+ * g_value_set_uint64:
+ * @value: a valid #GValue of type %G_TYPE_UINT64
+ * @v_uint64: unsigned 64bit integer value to be set
+ *
+ * Set the contents of a %G_TYPE_UINT64 #GValue to @v_uint64.
+ */
+void
+g_value_set_uint64 (GValue *value,
+		    guint64 v_uint64)
+{
+  g_return_if_fail (G_VALUE_HOLDS_UINT64 (value));
+  
+  value->data[0].v_uint64 = v_uint64;
+}
+
+/**
+ * g_value_get_uint64:
+ * @value: a valid #GValue of type %G_TYPE_UINT64
+ *
+ * Get the contents of a %G_TYPE_UINT64 #GValue.
+ *
+ * Returns: unsigned 64bit integer contents of @value
+ */
+guint64
+g_value_get_uint64 (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_UINT64 (value), 0);
+  
+  return value->data[0].v_uint64;
+}
+
+/**
+ * g_value_set_float:
+ * @value: a valid #GValue of type %G_TYPE_FLOAT
+ * @v_float: float value to be set
+ *
+ * Set the contents of a %G_TYPE_FLOAT #GValue to @v_float.
+ */
+void
+g_value_set_float (GValue *value,
+		   gfloat  v_float)
+{
+  g_return_if_fail (G_VALUE_HOLDS_FLOAT (value));
+  
+  value->data[0].v_float = v_float;
+}
+
+/**
+ * g_value_get_float:
+ * @value: a valid #GValue of type %G_TYPE_FLOAT
+ *
+ * Get the contents of a %G_TYPE_FLOAT #GValue.
+ *
+ * Returns: float contents of @value
+ */
+gfloat
+g_value_get_float (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_FLOAT (value), 0);
+  
+  return value->data[0].v_float;
+}
+
+/**
+ * g_value_set_double:
+ * @value: a valid #GValue of type %G_TYPE_DOUBLE
+ * @v_double: double value to be set
+ *
+ * Set the contents of a %G_TYPE_DOUBLE #GValue to @v_double.
+ */
+void
+g_value_set_double (GValue *value,
+		    gdouble v_double)
+{
+  g_return_if_fail (G_VALUE_HOLDS_DOUBLE (value));
+  
+  value->data[0].v_double = v_double;
+}
+
+/**
+ * g_value_get_double:
+ * @value: a valid #GValue of type %G_TYPE_DOUBLE
+ *
+ * Get the contents of a %G_TYPE_DOUBLE #GValue.
+ *
+ * Returns: double contents of @value
+ */
+gdouble
+g_value_get_double (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_DOUBLE (value), 0);
+  
+  return value->data[0].v_double;
+}
+
+/**
+ * g_value_set_string:
+ * @value: a valid #GValue of type %G_TYPE_STRING
+ * @v_string: caller-owned string to be duplicated for the #GValue
+ *
+ * Set the contents of a %G_TYPE_STRING #GValue to @v_string.
+ */
+void
+g_value_set_string (GValue	*value,
+		    const gchar *v_string)
+{
+  gchar *new_val;
+
+  g_return_if_fail (G_VALUE_HOLDS_STRING (value));
+
+  new_val = g_strdup (v_string);
+
+  if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)
+    value->data[1].v_uint = 0;
+  else
+    g_free (value->data[0].v_pointer);
+
+  value->data[0].v_pointer = new_val;
+}
+
+/**
+ * g_value_set_static_string:
+ * @value: a valid #GValue of type %G_TYPE_STRING
+ * @v_string: static string to be set
+ *
+ * Set the contents of a %G_TYPE_STRING #GValue to @v_string.
+ * The string is assumed to be static, and is thus not duplicated
+ * when setting the #GValue.
+ */
+void
+g_value_set_static_string (GValue      *value,
+			   const gchar *v_string)
+{
+  g_return_if_fail (G_VALUE_HOLDS_STRING (value));
+  
+  if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
+    g_free (value->data[0].v_pointer);
+  value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
+  value->data[0].v_pointer = (gchar*) v_string;
+}
+
+/**
+ * g_value_set_string_take_ownership:
+ * @value: a valid #GValue of type %G_TYPE_STRING
+ * @v_string: duplicated unowned string to be set
+ *
+ * This is an internal function introduced mainly for C marshallers.
+ *
+ * Deprecated: 2.4: Use g_value_take_string() instead.
+ */
+void
+g_value_set_string_take_ownership (GValue *value,
+				   gchar  *v_string)
+{
+  g_value_take_string (value, v_string);
+}
+
+/**
+ * g_value_take_string:
+ * @value: a valid #GValue of type %G_TYPE_STRING
+ * @v_string: string to take ownership of
+ *
+ * Sets the contents of a %G_TYPE_STRING #GValue to @v_string.
+ *
+ * Since: 2.4
+ */
+void
+g_value_take_string (GValue *value,
+		     gchar  *v_string)
+{
+  g_return_if_fail (G_VALUE_HOLDS_STRING (value));
+  
+  if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)
+    value->data[1].v_uint = 0;
+  else
+    g_free (value->data[0].v_pointer);
+  value->data[0].v_pointer = v_string;
+}
+
+/**
+ * g_value_get_string:
+ * @value: a valid #GValue of type %G_TYPE_STRING
+ *
+ * Get the contents of a %G_TYPE_STRING #GValue.
+ *
+ * Returns: string content of @value
+ */
+G_CONST_RETURN gchar*
+g_value_get_string (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL);
+  
+  return value->data[0].v_pointer;
+}
+
+/**
+ * g_value_dup_string:
+ * @value: a valid #GValue of type %G_TYPE_STRING
+ *
+ * Get a copy the contents of a %G_TYPE_STRING #GValue.
+ *
+ * Returns: a newly allocated copy of the string content of @value
+ */
+gchar*
+g_value_dup_string (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL);
+  
+  return g_strdup (value->data[0].v_pointer);
+}
+
+/**
+ * g_value_set_pointer:
+ * @value: a valid #GValue of %G_TYPE_POINTER
+ * @v_pointer: pointer value to be set
+ *
+ * Set the contents of a pointer #GValue to @v_pointer.
+ */
+void
+g_value_set_pointer (GValue  *value,
+		     gpointer v_pointer)
+{
+  g_return_if_fail (G_VALUE_HOLDS_POINTER (value));
+
+  value->data[0].v_pointer = v_pointer;
+}
+
+/**
+ * g_value_get_pointer:
+ * @value: a valid #GValue of %G_TYPE_POINTER
+ *
+ * Get the contents of a pointer #GValue.
+ *
+ * Returns: pointer contents of @value
+ */
+gpointer
+g_value_get_pointer (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_POINTER (value), NULL);
+
+  return value->data[0].v_pointer;
+}
+
+GType
+g_gtype_get_type (void)
+{
+  static const GTypeInfo type_info = { 0, };
+  static GType type;
+  if (!type)
+    type = g_type_register_static (G_TYPE_POINTER, g_intern_static_string ("GType"), &type_info, 0);
+  return type;
+}
+
+/**
+ * g_value_set_gtype:
+ * @value: a valid #GValue of type %G_TYPE_GTYPE
+ * @v_gtype: #GType to be set
+ *
+ * Set the contents of a %G_TYPE_GTYPE #GValue to @v_gtype.
+ *
+ * Since: 2.12
+ */
+void
+g_value_set_gtype (GValue *value,
+		   GType   v_gtype)
+{
+  g_return_if_fail (G_VALUE_HOLDS_GTYPE (value));
+
+  value->data[0].v_long = v_gtype;
+  
+}
+
+/**
+ * g_value_get_gtype:
+ * @value: a valid #GValue of type %G_TYPE_GTYPE
+ *
+ * Get the contents of a %G_TYPE_GTYPE #GValue.
+ *
+ * Since: 2.12
+ *
+ * Returns: the #GType stored in @value
+ */
+GType
+g_value_get_gtype (const GValue *value)
+{
+  g_return_val_if_fail (G_VALUE_HOLDS_GTYPE (value), 0);
+
+  return value->data[0].v_long;
+}
+
+/**
+ * g_strdup_value_contents:
+ * @value: #GValue which contents are to be described.
+ *
+ * Return a newly allocated string, which describes the contents of a
+ * #GValue.  The main purpose of this function is to describe #GValue
+ * contents for debugging output, the way in which the contents are
+ * described may change between different GLib versions.
+ *
+ * Returns: Newly allocated string.
+ */
+gchar*
+g_strdup_value_contents (const GValue *value)
+{
+  const gchar *src;
+  gchar *contents;
+
+  g_return_val_if_fail (G_IS_VALUE (value), NULL);
+  
+  if (G_VALUE_HOLDS_STRING (value))
+    {
+      src = g_value_get_string (value);
+      
+      if (!src)
+	contents = g_strdup ("NULL");
+      else
+	{
+	  gchar *s = g_strescape (src, NULL);
+
+	  contents = g_strdup_printf ("\"%s\"", s);
+	  g_free (s);
+	}
+    }
+  else if (g_value_type_transformable (G_VALUE_TYPE (value), G_TYPE_STRING))
+    {
+      GValue tmp_value = { 0, };
+      gchar *s;
+
+      g_value_init (&tmp_value, G_TYPE_STRING);
+      g_value_transform (value, &tmp_value);
+      s = g_strescape (g_value_get_string (&tmp_value), NULL);
+      g_value_unset (&tmp_value);
+      if (G_VALUE_HOLDS_ENUM (value) || G_VALUE_HOLDS_FLAGS (value))
+	contents = g_strdup_printf ("((%s) %s)",
+				    g_type_name (G_VALUE_TYPE (value)),
+				    s);
+      else
+	contents = g_strdup (s ? s : "NULL");
+      g_free (s);
+    }
+  else if (g_value_fits_pointer (value))
+    {
+      gpointer p = g_value_peek_pointer (value);
+
+      if (!p)
+	contents = g_strdup ("NULL");
+      else if (G_VALUE_HOLDS_OBJECT (value))
+	contents = g_strdup_printf ("((%s*) %p)", G_OBJECT_TYPE_NAME (p), p);
+      else if (G_VALUE_HOLDS_PARAM (value))
+	contents = g_strdup_printf ("((%s*) %p)", G_PARAM_SPEC_TYPE_NAME (p), p);
+      else if (G_VALUE_HOLDS_BOXED (value))
+	contents = g_strdup_printf ("((%s*) %p)", g_type_name (G_VALUE_TYPE (value)), p);
+      else if (G_VALUE_HOLDS_POINTER (value))
+	contents = g_strdup_printf ("((gpointer) %p)", p);
+      else
+	contents = g_strdup ("???");
+    }
+  else
+    contents = g_strdup ("???");
+
+  return contents;
+}
+
+/**
+ * g_pointer_type_register_static:
+ * @name: the name of the new pointer type.
+ *
+ * Creates a new %G_TYPE_POINTER derived type id for a new
+ * pointer type with name @name.
+ *
+ * Returns: a new %G_TYPE_POINTER derived type id for @name.
+ */
+GType
+g_pointer_type_register_static (const gchar *name)
+{
+  static const GTypeInfo type_info = {
+    0,			/* class_size */
+    NULL,		/* base_init */
+    NULL,		/* base_finalize */
+    NULL,		/* class_init */
+    NULL,		/* class_finalize */
+    NULL,		/* class_data */
+    0,			/* instance_size */
+    0,			/* n_preallocs */
+    NULL,		/* instance_init */
+    NULL		/* value_table */
+  };
+  GType type;
+
+  g_return_val_if_fail (name != NULL, 0);
+  g_return_val_if_fail (g_type_from_name (name) == 0, 0);
+
+  type = g_type_register_static (G_TYPE_POINTER, name, &type_info, 0);
+
+  return type;
+}
+
+#define __G_VALUETYPES_C__
+#include "gobjectaliasdef.c"
diff --git a/gobject/gvaluetypes.h b/gobject/gvaluetypes.h
new file mode 100644
index 0000000..6385783
--- /dev/null
+++ b/gobject/gvaluetypes.h
@@ -0,0 +1,243 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
+ *
+ * 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 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.
+ *
+ * gvaluetypes.h: GLib default values
+ */
+#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
+#error "Only <glib-object.h> can be included directly."
+#endif
+
+#ifndef __G_VALUETYPES_H__
+#define __G_VALUETYPES_H__
+
+#include	<gobject/gvalue.h>
+
+G_BEGIN_DECLS
+
+/* --- type macros --- */
+/**
+ * G_VALUE_HOLDS_CHAR:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_CHAR.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_CHAR(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_CHAR))
+/**
+ * G_VALUE_HOLDS_UCHAR:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_UCHAR.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_UCHAR(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UCHAR))
+/**
+ * G_VALUE_HOLDS_BOOLEAN:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_BOOLEAN.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_BOOLEAN(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOOLEAN))
+/**
+ * G_VALUE_HOLDS_INT:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_INT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_INT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT))
+/**
+ * G_VALUE_HOLDS_UINT:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_UINT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_UINT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT))
+/**
+ * G_VALUE_HOLDS_LONG:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_LONG.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_LONG(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_LONG))
+/**
+ * G_VALUE_HOLDS_ULONG:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_ULONG.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_ULONG(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ULONG))
+/**
+ * G_VALUE_HOLDS_INT64:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_INT64.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_INT64(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT64))
+/**
+ * G_VALUE_HOLDS_UINT64:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_UINT64.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_UINT64(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT64))
+/**
+ * G_VALUE_HOLDS_FLOAT:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_FLOAT.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_FLOAT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLOAT))
+/**
+ * G_VALUE_HOLDS_DOUBLE:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_DOUBLE.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_DOUBLE(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_DOUBLE))
+/**
+ * G_VALUE_HOLDS_STRING:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_STRING.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_STRING(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_STRING))
+/**
+ * G_VALUE_HOLDS_POINTER:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_POINTER.
+ * 
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_POINTER(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_POINTER))
+/**
+ * G_TYPE_GTYPE:
+ * 
+ * The type for #GType.
+ */
+#define	G_TYPE_GTYPE			 (g_gtype_get_type())
+/**
+ * G_VALUE_HOLDS_GTYPE:
+ * @value: a valid #GValue structure
+ * 
+ * Checks whether the given #GValue can hold values of type %G_TYPE_GTYPE.
+ * 
+ * Since: 2.12
+ * Returns: %TRUE on success.
+ */
+#define G_VALUE_HOLDS_GTYPE(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_GTYPE))
+
+
+/* --- prototypes --- */
+void		      g_value_set_char		(GValue	      *value,
+						 gchar	       v_char);
+gchar		      g_value_get_char		(const GValue *value);
+void		      g_value_set_uchar		(GValue	      *value,
+						 guchar	       v_uchar);
+guchar		      g_value_get_uchar		(const GValue *value);
+void		      g_value_set_boolean	(GValue	      *value,
+						 gboolean      v_boolean);
+gboolean	      g_value_get_boolean	(const GValue *value);
+void		      g_value_set_int		(GValue	      *value,
+						 gint	       v_int);
+gint		      g_value_get_int		(const GValue *value);
+void		      g_value_set_uint		(GValue	      *value,
+						 guint	       v_uint);
+guint		      g_value_get_uint		(const GValue *value);
+void		      g_value_set_long		(GValue	      *value,
+						 glong	       v_long);
+glong		      g_value_get_long		(const GValue *value);
+void		      g_value_set_ulong		(GValue	      *value,
+						 gulong	       v_ulong);
+gulong		      g_value_get_ulong		(const GValue *value);
+void		      g_value_set_int64		(GValue	      *value,
+						 gint64	       v_int64);
+gint64		      g_value_get_int64		(const GValue *value);
+void		      g_value_set_uint64	(GValue	      *value,
+						 guint64      v_uint64);
+guint64		      g_value_get_uint64	(const GValue *value);
+void		      g_value_set_float		(GValue	      *value,
+						 gfloat	       v_float);
+gfloat		      g_value_get_float		(const GValue *value);
+void		      g_value_set_double	(GValue	      *value,
+						 gdouble       v_double);
+gdouble		      g_value_get_double	(const GValue *value);
+void		      g_value_set_string	(GValue	      *value,
+						 const gchar  *v_string);
+void		      g_value_set_static_string (GValue	      *value,
+						 const gchar  *v_string);
+G_CONST_RETURN gchar* g_value_get_string	(const GValue *value);
+gchar*		      g_value_dup_string	(const GValue *value);
+void		      g_value_set_pointer	(GValue	      *value,
+						 gpointer      v_pointer);
+gpointer	      g_value_get_pointer	(const GValue *value);
+GType		      g_gtype_get_type		(void);
+void		      g_value_set_gtype	        (GValue	      *value,
+						 GType         v_gtype);
+GType	              g_value_get_gtype	        (const GValue *value);
+
+
+/* Convenience for registering new pointer types */
+GType                 g_pointer_type_register_static (const gchar *name);
+
+/* debugging aid, describe value contents as string */
+gchar*                g_strdup_value_contents   (const GValue *value);
+
+
+void g_value_take_string		        (GValue		   *value,
+						 gchar		   *v_string);
+#ifndef G_DISABLE_DEPRECATED
+void g_value_set_string_take_ownership		(GValue		   *value,
+						 gchar		   *v_string);
+#endif
+
+
+/* humpf, need a C representable type name for G_TYPE_STRING */
+/**
+ * gchararray:
+ * 
+ * A C representable type name for #G_TYPE_STRING.
+ */
+typedef gchar* gchararray;
+
+
+G_END_DECLS
+
+#endif /* __G_VALUETYPES_H__ */
diff --git a/gobject/makefile.msc.in b/gobject/makefile.msc.in
new file mode 100644
index 0000000..f518232
--- /dev/null
+++ b/gobject/makefile.msc.in
@@ -0,0 +1,91 @@
+## Makefile for building the gobject dll with Microsoft C
+## Use: nmake -f makefile.msc install
+
+TOP = ..\..
+
+!INCLUDE ..\build\win32\make.msc
+
+################################################################
+
+INCLUDES = -FImsvc_recommended_pragmas.h -I .. -I . -I ..\glib
+DEFINES = -DHAVE_CONFIG_H -DGOBJECT_COMPILATION -DG_LOG_DOMAIN=\"GLib-GObject\" \
+		-DG_ENABLE_DEBUG
+#		-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS
+#		-DG_DISABLE_CAST_CHECKS
+
+all :				\
+	glib-genmarshal.exe     \
+	gmarshal.h              \
+	gmarshal.c              \
+	gobjectalias.h	\
+	gobjectaliasdef.c \
+	gmarshal.strings \
+	gobject-query.exe \
+	libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll	\
+	gobject-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@s.lib \
+	testgobject.exe
+
+gobject_OBJECTS =		\
+	gboxed.obj		\
+	gclosure.obj		\
+	genums.obj		\
+	gobject.obj		\
+	gparam.obj		\
+	gparamspecs.obj		\
+	gsignal.obj		\
+	gsourceclosure.obj	\
+	gtype.obj		\
+	gtypemodule.obj		\
+	gtypeplugin.obj		\
+	gvalue.obj		\
+	gvaluearray.obj		\
+	gvaluetypes.obj	\
+	gvaluetransform.obj
+
+gobjectalias.h: gobject.symbols
+	perl makegobjectalias.pl < gobject.symbols > gobjectalias.h
+
+gobjectaliasdef.c: gobject.symbols
+	perl makegobjectalias.pl -def < gobject.symbols > gobjectaliasdef.c
+
+gobject.def: gobject.symbols
+	echo EXPORTS > gobject.def
+	cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES \
+		-DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= \
+		-DG_GNUC_PRINTF=;G_GNUC_PRINTF gobject.symbols >> gobject.def
+
+gobject.res : gobject.rc
+	rc -DBUILDNUMBER=0 -r -fo gobject.res gobject.rc
+
+gmarshal.h : gmarshal.list glib-genmarshal.exe
+	echo #ifndef __G_MARSHAL_H__ > xgen-gmh
+	echo #define __G_MARSHAL_H__ >> xgen-gmh
+	glib-genmarshal --nostdinc --prefix=g_cclosure_marshal gmarshal.list --header >> xgen-gmh
+	echo #endif /* __G_MARSHAL_H__ */ >> xgen-gmh
+	copy xgen-gmh gmarshal.h
+
+gmarshal.c: gmarshal.list gmarshal.h glib-genmarshal.exe
+	glib-genmarshal --nostdinc --prefix=g_cclosure_marshal gmarshal.list --body > gmarshal.c
+
+libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll : $(gobject_OBJECTS) gobject.def gobject.res
+	$(CC) $(CFLAGS) -Fm -LD -Fe$@ $(gobject_OBJECTS) gobject.res \
+	..\glib\glib-2.0.lib $(LDFLAGS) /implib:gobject-2.0.lib /def:gobject.def || del $@
+
+gobject-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@s.lib : $(gobject_OBJECTS) 
+	lib /out:$@ $(gobject_OBJECTS)
+
+# link glib's static version to avoid installing 
+glib-genmarshal.exe : glib-genmarshal.c gmarshal.strings
+	$(CC) -Fe$@ $(CFLAGS) -UGOBJECT_COMPILATION glib-genmarshal.c \
+	..\glib\glib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@s.lib user32.lib advapi32.lib ole32.lib shell32.lib $(INTL_LIBS) 
+
+gobject-query.exe : gobject-query.c libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll
+	$(CC) -Fe$@ $(CFLAGS) -UGOBJECT_COMPILATION gobject-query.c \
+	..\glib\glib-2.0.lib gobject-2.0.lib user32.lib advapi32.lib $(INTL_LIBS)
+
+gmarshal.strings : gmarshal.list
+	perl marshal-genstrings.pl > gmarshal.strings
+
+.c.exe :
+	$(CC) $(CFLAGS) -c $<
+	$(CC) $(CFLAGS) -Fe$@ $< gobject-2.0.lib ..\glib\glib-2.0.lib ..\gmodule\gmodule-2.0.lib $(LDFLAGS) user32.lib /subsystem:console
diff --git a/gobject/makegobjectalias.pl b/gobject/makegobjectalias.pl
new file mode 100755
index 0000000..9094222
--- /dev/null
+++ b/gobject/makegobjectalias.pl
@@ -0,0 +1,137 @@
+#!/usr/bin/perl -w
+
+my $do_def = 0;
+
+if (($#ARGV >= 0) && ($ARGV[0] eq "-def")) {
+    shift;
+    $do_def = 1;
+}
+
+print <<EOF;
+/* Generated by makegobjectalias.pl */
+
+#ifndef DISABLE_VISIBILITY
+
+#include "glibconfig.h"
+
+#ifdef G_HAVE_GNUC_VISIBILITY
+
+EOF
+
+if ($do_def) {
+    print <<EOF
+#undef IN_FILE
+#define IN_FILE defined
+
+#undef IN_HEADER
+#define IN_HEADER(x) 1
+
+EOF
+} 
+else { 
+    print <<EOF
+#define IN_FILE(x) 1
+#define IN_HEADER defined
+
+EOF
+}
+
+my $in_comment = 0;
+my $in_skipped_section = 0;
+
+while (<>) {
+
+  # ignore empty lines
+  next if /^\s*$/;
+
+  # skip comments
+  if ($_ =~ /^\s*\/\*/)
+  {
+      $in_comment = 1;
+  }
+  
+  if ($in_comment)
+  {
+      if ($_ =~  /\*\/\s$/)
+      {
+	  $in_comment = 0;
+      }
+      
+      next;
+  }
+
+  # handle ifdefs
+  if ($_ =~ /^\#endif/)
+  {
+      if (!$in_skipped_section)
+      {
+	  print $_;
+      }
+
+      $in_skipped_section = 0;
+
+      next;
+  }
+
+  if ($_ =~ /^\#ifdef\s+(INCLUDE_VARIABLES|INCLUDE_INTERNAL_SYMBOLS|ALL_FILES)/)
+  {
+      $in_skipped_section = 1;
+  }
+
+  if ($in_skipped_section)
+  {
+      next;
+  }
+
+  if ($_ =~ /^\#ifn?def\s+G/)
+  {
+      print $_;
+      
+      next;
+  }
+ 
+  if ($_ =~ /^\#if.*(IN_FILE|IN_HEADER)/)
+  {
+      print $_;
+      
+      next;
+  }
+
+  chop;
+  my $str = $_;
+  my @words;
+  my $attributes = "";
+
+  @words = split(/ /, $str);
+  $str = shift(@words);
+  chomp($str);
+  my $alias = "IA__".$str;
+  
+  # Drop any Win32 specific .def file syntax,  but keep attributes
+  foreach $word (@words) {
+      $attributes = "$attributes $word" unless $word eq "PRIVATE";
+  }
+  
+  if (!$do_def) {
+    print <<EOF
+extern __typeof ($str) $alias __attribute((visibility("hidden")))$attributes;
+\#define $str $alias
+
+EOF
+  }
+  else {
+    print <<EOF
+\#undef $str 
+extern __typeof ($str) $str __attribute((alias("$alias"), visibility("default")));
+
+EOF
+  }
+}
+
+print <<EOF;
+
+#endif /* G_HAVE_GNUC_VISIBILITY */
+#endif /* DISABLE_VISIBILITY */
+EOF
+
+
diff --git a/gobject/marshal-genstrings.pl b/gobject/marshal-genstrings.pl
new file mode 100644
index 0000000..93fceb4
--- /dev/null
+++ b/gobject/marshal-genstrings.pl
@@ -0,0 +1,9 @@
+#!/usr/bin/perl
+
+open (List, "gmarshal.list");
+
+while (<List>) {
+    next unless /^[A-Z]/;
+    s/^/"g_cclosure_marshal_/; s/:/__/; s/,/_/g; s/$/",/;
+    print;
+}
diff --git a/gobject/pltcheck.sh b/gobject/pltcheck.sh
new file mode 100755
index 0000000..00d9e9d
--- /dev/null
+++ b/gobject/pltcheck.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+LANG=C
+
+status=0
+
+if ! which readelf 2>/dev/null >/dev/null; then
+	echo "'readelf' not found; skipping test"
+	exit 0
+fi
+
+for so in .libs/lib*.so; do
+	echo Checking $so for local PLT entries
+	readelf -r $so | grep 'JU\?MP_SLOT\?' | grep '\<g_type_\|\<g_boxed_\|\<g_value_\|\<g_cclosure_\|\<g_closure_\|\<g_signal\|\<g_enum_\|\<g_flags_\|\<g_io_\|\<g_object_\|\<g_param_' && status=1
+done
+
+exit $status
diff --git a/gobject/testgobject.c b/gobject/testgobject.c
new file mode 100644
index 0000000..2723764
--- /dev/null
+++ b/gobject/testgobject.c
@@ -0,0 +1,428 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include <string.h>
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestObject"
+#include	<glib-object.h>
+
+/* --- TestIface --- */
+#define TEST_TYPE_IFACE           (test_iface_get_type ())
+#define TEST_IFACE(obj)		  (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_IFACE, TestIface))
+#define TEST_IS_IFACE(obj)	  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_IFACE))
+#define TEST_IFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE, TestIfaceClass))
+typedef struct _TestIface      TestIface;
+typedef struct _TestIfaceClass TestIfaceClass;
+struct _TestIfaceClass
+{
+  GTypeInterface base_iface;
+  void	(*print_string)	(TestIface	*tiobj,
+			 const gchar	*string);
+};
+static void	iface_base_init		(TestIfaceClass	*iface);
+static void	iface_base_finalize	(TestIfaceClass	*iface);
+static void	print_foo		(TestIface	*tiobj,
+					 const gchar	*string);
+static GType
+test_iface_get_type (void)
+{
+  static GType test_iface_type = 0;
+
+  if (!test_iface_type)
+    {
+      static const GTypeInfo test_iface_info =
+      {
+	sizeof (TestIfaceClass),
+	(GBaseInitFunc)	iface_base_init,		/* base_init */
+	(GBaseFinalizeFunc) iface_base_finalize,	/* base_finalize */
+      };
+
+      test_iface_type = g_type_register_static (G_TYPE_INTERFACE, "TestIface", &test_iface_info, 0);
+      g_type_interface_add_prerequisite (test_iface_type, G_TYPE_OBJECT);
+    }
+
+  return test_iface_type;
+}
+static guint iface_base_init_count = 0;
+static void
+iface_base_init (TestIfaceClass *iface)
+{
+  iface_base_init_count++;
+  if (iface_base_init_count == 1)
+    {
+      /* add signals here */
+    }
+}
+static void
+iface_base_finalize (TestIfaceClass *iface)
+{
+  iface_base_init_count--;
+  if (iface_base_init_count == 0)
+    {
+      /* destroy signals here */
+    }
+}
+static void
+print_foo (TestIface   *tiobj,
+	   const gchar *string)
+{
+  if (!string)
+    string = "<NULL>";
+  g_print ("Iface-FOO: \"%s\" from %p\n", string, tiobj);
+}
+static void
+test_object_test_iface_init (gpointer giface,
+			     gpointer iface_data)
+{
+  TestIfaceClass *iface = giface;
+
+  g_assert (iface_data == GUINT_TO_POINTER (42));
+
+  g_assert (G_TYPE_FROM_INTERFACE (iface) == TEST_TYPE_IFACE);
+
+  /* assert iface_base_init() was already called */
+  g_assert (iface_base_init_count > 0);
+
+  /* initialize stuff */
+  iface->print_string = print_foo;
+}
+static void
+iface_print_string (TestIface   *tiobj,
+		    const gchar *string)
+{
+  TestIfaceClass *iface;
+
+  g_return_if_fail (TEST_IS_IFACE (tiobj));
+  g_return_if_fail (G_IS_OBJECT (tiobj)); /* ensured through prerequisite */
+
+  iface = TEST_IFACE_GET_CLASS (tiobj);
+  g_object_ref (tiobj);
+  iface->print_string (tiobj, string);
+  g_object_unref (tiobj);
+}
+
+
+/* --- TestObject --- */
+#define TEST_TYPE_OBJECT            (test_object_get_type ())
+#define TEST_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject))
+#define TEST_OBJECT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass))
+#define TEST_IS_OBJECT(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT))
+#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT))
+#define TEST_OBJECT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass))
+#define TEST_OBJECT_GET_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), TEST_TYPE_OBJECT, TestObjectPrivate))
+typedef struct _TestObject        TestObject;
+typedef struct _TestObjectClass   TestObjectClass;
+typedef struct _TestObjectPrivate TestObjectPrivate;
+struct _TestObject
+{
+  GObject parent_instance;
+};
+struct _TestObjectClass
+{
+  GObjectClass parent_class;
+
+  gchar* (*test_signal) (TestObject *tobject,
+			 TestIface  *iface_object,
+			 gpointer    tdata);
+};
+struct _TestObjectPrivate
+{
+  int     dummy1;
+  gdouble dummy2;
+};
+static void	test_object_class_init	(TestObjectClass	*class);
+static void	test_object_init	(TestObject		*tobject);
+static gboolean	test_signal_accumulator	(GSignalInvocationHint	*ihint,
+					 GValue            	*return_accu,
+					 const GValue       	*handler_return,
+					 gpointer                data);
+static gchar*	test_object_test_signal	(TestObject		*tobject,
+					 TestIface		*iface_object,
+					 gpointer		 tdata);
+static GType
+test_object_get_type (void)
+{
+  static GType test_object_type = 0;
+
+  if (!test_object_type)
+    {
+      static const GTypeInfo test_object_info =
+      {
+	sizeof (TestObjectClass),
+	NULL,           /* base_init */
+	NULL,           /* base_finalize */
+	(GClassInitFunc) test_object_class_init,
+	NULL,           /* class_finalize */
+	NULL,           /* class_data */
+	sizeof (TestObject),
+	5,              /* n_preallocs */
+	(GInstanceInitFunc) test_object_init,
+      };
+      GInterfaceInfo iface_info = { test_object_test_iface_init, NULL, GUINT_TO_POINTER (42) };
+
+      test_object_type = g_type_register_static (G_TYPE_OBJECT, "TestObject", &test_object_info, 0);
+      g_type_add_interface_static (test_object_type, TEST_TYPE_IFACE, &iface_info);
+    }
+
+  return test_object_type;
+}
+static void
+test_object_class_init (TestObjectClass *class)
+{
+  /*  GObjectClass *gobject_class = G_OBJECT_CLASS (class); */
+
+  class->test_signal = test_object_test_signal;
+
+  g_signal_new ("test-signal",
+		G_OBJECT_CLASS_TYPE (class),
+		G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST | G_SIGNAL_RUN_CLEANUP,
+		G_STRUCT_OFFSET (TestObjectClass, test_signal),
+		test_signal_accumulator, NULL,
+		g_cclosure_marshal_STRING__OBJECT_POINTER,
+		G_TYPE_STRING, 2, TEST_TYPE_IFACE, G_TYPE_POINTER);
+
+  g_type_class_add_private (class, sizeof (TestObjectPrivate));
+}
+static void
+test_object_init (TestObject *tobject)
+{
+  TestObjectPrivate *priv;
+
+  priv = TEST_OBJECT_GET_PRIVATE (tobject);
+
+  g_assert (priv);
+  g_assert ((gchar *)priv >= (gchar *)tobject + sizeof (TestObject));
+
+  priv->dummy1 = 54321;
+}
+/* Check to see if private data initialization in the
+ * instance init function works.
+ */
+static void
+test_object_check_private_init (TestObject *tobject)
+{
+  TestObjectPrivate *priv;
+
+  priv = TEST_OBJECT_GET_PRIVATE (tobject);
+
+  g_print ("private data during initialization: %u == %u\n", priv->dummy1, 54321);
+  g_assert (priv->dummy1 == 54321);
+}
+static gboolean
+test_signal_accumulator (GSignalInvocationHint *ihint,
+			 GValue                *return_accu,
+			 const GValue          *handler_return,
+			 gpointer               data)
+{
+  gchar *accu_string = g_value_get_string (return_accu);
+  gchar *new_string = g_value_get_string (handler_return);
+  gchar *result_string;
+
+  if (accu_string)
+    result_string = g_strconcat (accu_string, new_string, NULL);
+  else if (new_string)
+    result_string = g_strdup (new_string);
+  else
+    result_string = NULL;
+
+  g_value_take_string (return_accu, result_string);
+
+  return TRUE;
+}
+static gchar*
+test_object_test_signal (TestObject *tobject,
+			 TestIface  *iface_object,
+			 gpointer    tdata)
+{
+  g_message ("::test_signal default_handler called");
+
+  g_return_val_if_fail (TEST_IS_IFACE (iface_object), NULL);
+  
+  return g_strdup ("<default_handler>");
+}
+
+
+/* --- TestIface for DerivedObject --- */
+static void
+print_bar (TestIface   *tiobj,
+	   const gchar *string)
+{
+  TestIfaceClass *parent_iface;
+
+  g_return_if_fail (TEST_IS_IFACE (tiobj));
+
+  if (!string)
+    string = "<NULL>";
+  g_print ("Iface-BAR: \"%s\" from %p\n", string, tiobj);
+
+  g_print ("chaining: ");
+  parent_iface = g_type_interface_peek_parent (TEST_IFACE_GET_CLASS (tiobj));
+  parent_iface->print_string (tiobj, string);
+
+  g_assert (g_type_interface_peek_parent (parent_iface) == NULL);
+}
+
+static void
+derived_object_test_iface_init (gpointer giface,
+				gpointer iface_data)
+{
+  TestIfaceClass *iface = giface;
+
+  g_assert (iface_data == GUINT_TO_POINTER (87));
+
+  g_assert (G_TYPE_FROM_INTERFACE (iface) == TEST_TYPE_IFACE);
+
+  /* assert test_object_test_iface_init() was already called */
+  g_assert (iface->print_string == print_foo);
+
+  /* override stuff */
+  iface->print_string = print_bar;
+}
+
+
+/* --- DerivedObject --- */
+#define DERIVED_TYPE_OBJECT            (derived_object_get_type ())
+#define DERIVED_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), DERIVED_TYPE_OBJECT, DerivedObject))
+#define DERIVED_OBJECT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), DERIVED_TYPE_OBJECT, DerivedObjectClass))
+#define DERIVED_IS_OBJECT(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), DERIVED_TYPE_OBJECT))
+#define DERIVED_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DERIVED_TYPE_OBJECT))
+#define DERIVED_OBJECT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), DERIVED_TYPE_OBJECT, DerivedObjectClass))
+#define DERIVED_OBJECT_GET_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), DERIVED_TYPE_OBJECT, DerivedObjectPrivate))
+typedef struct _DerivedObject        DerivedObject;
+typedef struct _TestObjectClass      DerivedObjectClass;
+typedef struct _DerivedObjectPrivate DerivedObjectPrivate;
+struct _DerivedObject
+{
+  TestObject parent_instance;
+  int  dummy1;
+  int  dummy2;
+};
+struct _DerivedObjectPrivate
+{
+  char dummy;
+};
+static void derived_object_class_init (DerivedObjectClass *class);
+static void derived_object_init       (DerivedObject      *dobject);
+GType
+derived_object_get_type (void)
+{
+  static GType derived_object_type = 0;
+
+  if (!derived_object_type)
+    {
+      static const GTypeInfo derived_object_info =
+      {
+	sizeof (DerivedObjectClass),
+	NULL,           /* base_init */
+	NULL,           /* base_finalize */
+	(GClassInitFunc) derived_object_class_init,
+	NULL,           /* class_finalize */
+	NULL,           /* class_data */
+	sizeof (DerivedObject),
+	5,              /* n_preallocs */
+	(GInstanceInitFunc) derived_object_init,
+      };
+      GInterfaceInfo iface_info = { derived_object_test_iface_init, NULL, GUINT_TO_POINTER (87) };
+
+      derived_object_type = g_type_register_static (TEST_TYPE_OBJECT, "DerivedObject", &derived_object_info, 0);
+      g_type_add_interface_static (derived_object_type, TEST_TYPE_IFACE, &iface_info);
+    }
+
+  return derived_object_type;
+}
+static void
+derived_object_class_init (DerivedObjectClass *class)
+{
+  g_type_class_add_private (class, sizeof (DerivedObjectPrivate));
+}
+static void
+derived_object_init (DerivedObject *dobject)
+{
+  TestObjectPrivate *test_priv;
+  DerivedObjectPrivate *derived_priv;
+
+  derived_priv = DERIVED_OBJECT_GET_PRIVATE (dobject);
+
+  g_assert (derived_priv);
+  g_assert ((gchar *)derived_priv >= (gchar *)TEST_OBJECT_GET_PRIVATE (dobject) + sizeof (TestObjectPrivate));
+
+  test_priv = TEST_OBJECT_GET_PRIVATE (dobject);
+  
+  g_assert (test_priv);
+  g_assert ((gchar *)test_priv >= (gchar *)dobject + sizeof (TestObject));
+
+}
+
+/* --- main --- */
+int
+main (int   argc,
+      char *argv[])
+{
+  GTypeInfo info = { 0, };
+  GTypeFundamentalInfo finfo = { 0, };
+  GType type;
+  TestObject *sigarg;
+  DerivedObject *dobject;
+  TestObjectPrivate *priv;
+  gchar *string = NULL;
+
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init_with_debug_flags (G_TYPE_DEBUG_OBJECTS | G_TYPE_DEBUG_SIGNALS);
+
+  /* test new fundamentals */
+  g_assert (G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST) == g_type_fundamental_next ());
+  type = g_type_register_fundamental (g_type_fundamental_next (), "FooShadow1", &info, &finfo, 0);
+  g_assert (G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST + 1) == g_type_fundamental_next ());
+  type = g_type_register_fundamental (g_type_fundamental_next (), "FooShadow2", &info, &finfo, 0);
+  g_assert (G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST + 2) == g_type_fundamental_next ());
+  g_assert (g_type_from_name ("FooShadow1") == G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST));
+  g_assert (g_type_from_name ("FooShadow2") == G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_USER_FIRST + 1));
+
+  /* to test past class initialization interface setups, create the class here */
+  g_type_class_ref (TEST_TYPE_OBJECT);
+
+  dobject = g_object_new (DERIVED_TYPE_OBJECT, NULL);
+  test_object_check_private_init (TEST_OBJECT (dobject));
+
+  sigarg = g_object_new (TEST_TYPE_OBJECT, NULL);
+
+  g_print ("MAIN: emit test-signal:\n");
+  g_signal_emit_by_name (dobject, "test-signal", sigarg, NULL, &string);
+  g_message ("signal return: \"%s\"", string);
+  g_assert (strcmp (string, "<default_handler><default_handler>") == 0);
+  g_free (string);
+
+  g_print ("MAIN: call iface print-string on test and derived object:\n");
+  iface_print_string (TEST_IFACE (sigarg), "iface-string-from-test-type");
+  iface_print_string (TEST_IFACE (dobject), "iface-string-from-derived-type");
+
+  priv = TEST_OBJECT_GET_PRIVATE (dobject);
+  g_print ("private data after initialization: %u == %u\n", priv->dummy1, 54321);
+  g_assert (priv->dummy1 == 54321);
+  
+  g_object_unref (sigarg);
+  g_object_unref (dobject);
+
+  g_message ("%s done", argv[0]);
+
+  return 0;
+}
diff --git a/gobject/tests/.gitignore b/gobject/tests/.gitignore
new file mode 100644
index 0000000..32dc007
--- /dev/null
+++ b/gobject/tests/.gitignore
@@ -0,0 +1 @@
+threadtests
diff --git a/gobject/tests/Makefile.am b/gobject/tests/Makefile.am
new file mode 100644
index 0000000..ed63a82
--- /dev/null
+++ b/gobject/tests/Makefile.am
@@ -0,0 +1,10 @@
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES = -g -I$(top_srcdir) -I$(top_srcdir)/glib $(GLIB_DEBUG_FLAGS)
+
+noinst_PROGRAMS  = $(TEST_PROGS)
+libgobject_LDADD = ../libgobject-2.0.la $(top_builddir)/gthread/libgthread-2.0.la $(top_builddir)/glib/libglib-2.0.la
+
+TEST_PROGS             += threadtests
+threadtests_SOURCES	= threadtests.c
+threadtests_LDADD	= $(libgobject_LDADD)
diff --git a/gobject/tests/threadtests.c b/gobject/tests/threadtests.c
new file mode 100644
index 0000000..eabbe05
--- /dev/null
+++ b/gobject/tests/threadtests.c
@@ -0,0 +1,245 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Imendio AB
+ * Authors: Tim Janik
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+#include <glib.h>
+#include <glib-object.h>
+
+#define G_DEFINE_INTERFACE(TN, t_n, T_P)                   G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, ;)
+#define G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, _C_)     _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TN, t_n, T_P) {_C_;} _G_DEFINE_INTERFACE_EXTENDED_END()
+/* _default_init, ##Interface, if(TYPE_PREREQ); */
+#define _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PREREQ) \
+static void type_name##_default_init  (TypeName##Interface *klass); \
+GType \
+type_name##_get_type (void) \
+{ \
+  static volatile gsize g_define_type_id__volatile = 0; \
+  if (g_once_init_enter (&g_define_type_id__volatile))  \
+    { \
+      GType g_define_type_id = \
+        g_type_register_static_simple (G_TYPE_INTERFACE, \
+                                       g_intern_static_string (#TypeName), \
+                                       sizeof (TypeName##Interface), \
+                                       (GClassInitFunc) type_name##_default_init, \
+                                       0, \
+                                       (GInstanceInitFunc) NULL, \
+                                       (GTypeFlags) 0); \
+      if (TYPE_PREREQ) \
+        g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \
+ { /* custom code follows */
+#define _G_DEFINE_INTERFACE_EXTENDED_END()        \
+        /* following custom code */             \
+ }                                              \
+      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ }                                               \
+  return g_define_type_id__volatile;                 \
+} /* closes type_name##_get_type() */
+
+static volatile int mtsafe_call_counter = 0; /* multi thread safe call counter */
+static int          unsafe_call_counter = 0; /* single-threaded call counter */
+
+#define NUM_COUNTER_INCREMENTS 100000
+
+static void
+call_counter_init (gpointer tclass)
+{
+  int i;
+  for (i = 0; i < NUM_COUNTER_INCREMENTS; i++)
+    {
+      int saved_unsafe_call_counter = unsafe_call_counter;
+      g_atomic_int_add (&mtsafe_call_counter, 1); // real call count update
+      g_thread_yield(); // let concurrent threads corrupt the unsafe_call_counter state
+      unsafe_call_counter = 1 + saved_unsafe_call_counter; // non-atomic counter update
+    }
+}
+
+static void interface_per_class_init () { call_counter_init (NULL); }
+
+/* define 3 test interfaces */
+typedef GTypeInterface MyFace0Interface;
+G_DEFINE_INTERFACE (MyFace0, my_face0, G_TYPE_OBJECT);
+static void my_face0_default_init (MyFace0Interface *iface) { call_counter_init (iface); }
+typedef GTypeInterface MyFace1Interface;
+G_DEFINE_INTERFACE (MyFace1, my_face1, G_TYPE_OBJECT);
+static void my_face1_default_init (MyFace1Interface *iface) { call_counter_init (iface); }
+typedef GTypeInterface MyFace2Interface;
+G_DEFINE_INTERFACE (MyFace2, my_face2, G_TYPE_OBJECT);
+static void my_face2_default_init (MyFace2Interface *iface) { call_counter_init (iface); }
+
+/* define 3 test objects, adding interfaces 0 & 1, and adding interface 2 after class initialization */
+typedef GObject         MyTester0;
+typedef GObjectClass    MyTester0Class;
+G_DEFINE_TYPE_WITH_CODE (MyTester0, my_tester0, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (my_face0_get_type(), interface_per_class_init);
+                         G_IMPLEMENT_INTERFACE (my_face1_get_type(), interface_per_class_init);
+                         );
+static void my_tester0_init (MyTester0*t) {}
+static void my_tester0_class_init (MyTester0Class*c) { call_counter_init (c); }
+typedef GObject         MyTester1;
+typedef GObjectClass    MyTester1Class;
+G_DEFINE_TYPE_WITH_CODE (MyTester1, my_tester1, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (my_face0_get_type(), interface_per_class_init);
+                         G_IMPLEMENT_INTERFACE (my_face1_get_type(), interface_per_class_init);
+                         );
+static void my_tester1_init (MyTester1*t) {}
+static void my_tester1_class_init (MyTester1Class*c) { call_counter_init (c); }
+typedef GObject         MyTester2;
+typedef GObjectClass    MyTester2Class;
+G_DEFINE_TYPE_WITH_CODE (MyTester2, my_tester2, G_TYPE_OBJECT,
+                         G_IMPLEMENT_INTERFACE (my_face0_get_type(), interface_per_class_init);
+                         G_IMPLEMENT_INTERFACE (my_face1_get_type(), interface_per_class_init);
+                         );
+static void my_tester2_init (MyTester2*t) {}
+static void my_tester2_class_init (MyTester2Class*c) { call_counter_init (c); }
+
+static GCond *sync_cond = NULL;
+static GMutex *sync_mutex = NULL;
+
+static gpointer
+tester_init_thread (gpointer data)
+{
+  const GInterfaceInfo face2_interface_info = { (GInterfaceInitFunc) interface_per_class_init, NULL, NULL };
+  gpointer klass;
+  /* first, syncronize with other threads,
+   * then run interface and class initializers,
+   * using unsafe_call_counter concurrently
+   */
+  g_mutex_lock (sync_mutex);
+  g_mutex_unlock (sync_mutex);
+  /* test default interface initialization for face0 */
+  g_type_default_interface_unref (g_type_default_interface_ref (my_face0_get_type()));
+  /* test class initialization, face0 per-class initializer, face1 default and per-class initializer */
+  klass = g_type_class_ref ((GType) data);
+  /* test face2 default and per-class initializer, after class_init */
+  g_type_add_interface_static (G_TYPE_FROM_CLASS (klass), my_face2_get_type(), &face2_interface_info);
+  /* cleanups */
+  g_type_class_unref (klass);
+  return NULL;
+}
+
+static void
+test_threaded_class_init (void)
+{
+  GThread *threads[3] = { NULL, };
+  /* pause newly created threads */
+  g_mutex_lock (sync_mutex);
+  /* create threads */
+  threads[0] = g_thread_create (tester_init_thread, (gpointer) my_tester0_get_type(), TRUE, NULL);
+  threads[1] = g_thread_create (tester_init_thread, (gpointer) my_tester1_get_type(), TRUE, NULL);
+  threads[2] = g_thread_create (tester_init_thread, (gpointer) my_tester2_get_type(), TRUE, NULL);
+  /* execute threads */
+  g_mutex_unlock (sync_mutex);
+  while (g_atomic_int_get (&mtsafe_call_counter) < (3 + 3 + 3 * 3) * NUM_COUNTER_INCREMENTS)
+    {
+      if (g_test_verbose())
+        g_print ("Initializers counted: %u\n", g_atomic_int_get (&mtsafe_call_counter));
+      g_usleep (50 * 1000); /* wait for threads to complete */
+    }
+  if (g_test_verbose())
+    g_print ("Total initializers: %u\n", g_atomic_int_get (&mtsafe_call_counter));
+  /* ensure non-corrupted counter updates */
+  g_assert_cmpint (g_atomic_int_get (&mtsafe_call_counter), ==, unsafe_call_counter);
+}
+
+typedef struct {
+  GObject parent;
+  char   *name;
+} PropTester;
+typedef GObjectClass    PropTesterClass;
+G_DEFINE_TYPE (PropTester, prop_tester, G_TYPE_OBJECT);
+#define PROP_NAME 1
+static void
+prop_tester_init (PropTester* t)
+{
+  if (t->name == NULL)
+    ; // neds unit test framework initialization: g_test_bug ("race initializing properties");
+}
+static void
+prop_tester_set_property (GObject        *object,
+                          guint           property_id,
+                          const GValue   *value,
+                          GParamSpec     *pspec)
+{}
+static void
+prop_tester_class_init (PropTesterClass *c)
+{
+  int i;
+  GParamSpec *param;
+  GObjectClass *gobject_class = G_OBJECT_CLASS (c);
+
+  gobject_class->set_property = prop_tester_set_property; /* silence GObject checks */
+
+  g_mutex_lock (sync_mutex);
+  g_cond_signal (sync_cond);
+  g_mutex_unlock (sync_mutex);
+
+  for (i = 0; i < 100; i++) /* wait a bit. */
+    g_thread_yield();
+
+  call_counter_init (c);
+  param = g_param_spec_string ("name", "name_i18n",
+			       "yet-more-wasteful-i18n",
+			       NULL,
+			       G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE |
+			       G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB |
+			       G_PARAM_STATIC_NICK);
+  g_object_class_install_property (gobject_class, PROP_NAME, param);
+}
+
+static gpointer
+object_create (gpointer data)
+{
+  GObject *obj = g_object_new (prop_tester_get_type(), "name", "fish", NULL);
+  g_object_unref (obj);
+  return NULL;
+}
+
+static void
+test_threaded_object_init (void)
+{
+  GThread *creator;
+  g_mutex_lock (sync_mutex);
+
+  creator = g_thread_create (object_create, NULL, TRUE, NULL);
+  /* really provoke the race */
+  g_cond_wait (sync_cond, sync_mutex);
+
+  object_create (NULL);
+  g_mutex_unlock (sync_mutex);
+
+  g_thread_join (creator);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_thread_init (NULL);
+  g_test_init (&argc, &argv, NULL);
+  g_type_init ();
+
+  sync_cond = g_cond_new();
+  sync_mutex = g_mutex_new();
+
+  g_test_add_func ("/GObject/threaded-class-init", test_threaded_class_init);
+  g_test_add_func ("/GObject/threaded-object-init", test_threaded_object_init);
+
+  return g_test_run();
+}
diff --git a/gthread-2.0-uninstalled.pc.in b/gthread-2.0-uninstalled.pc.in
new file mode 100644
index 0000000..a7285da
--- /dev/null
+++ b/gthread-2.0-uninstalled.pc.in
@@ -0,0 +1,6 @@
+Name: GThread Uninstalled
+Description: Thread support for GLib, Not Installed
+Requires: glib-2.0-uninstalled
+Version: @VERSION@
+Libs: ${pc_top_builddir}/${pcfiledir}/gthread/libgthread-2.0.la @G_THREAD_LIBS@
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@ @G_THREAD_CFLAGS@
diff --git a/gthread-2.0.pc.in b/gthread-2.0.pc.in
new file mode 100644
index 0000000..419df1f
--- /dev/null
+++ b/gthread-2.0.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: GThread
+Description: Thread support for GLib
+Requires: glib-2.0
+Version: @VERSION@
+Libs: -L${libdir} -lgthread-2.0 @G_THREAD_LIBS@
+Cflags: @G_THREAD_CFLAGS@
diff --git a/gthread/ChangeLog b/gthread/ChangeLog
new file mode 100644
index 0000000..b833c1e
--- /dev/null
+++ b/gthread/ChangeLog
@@ -0,0 +1,837 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.3 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.0 ===
+
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.1 ===
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.0 ===
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 460920 – build fix for --disable-threads
+
+	* gthread-impl.c: Implement g_thread_init_with_errorcheck_mutexes
+	in the !G_THREAD_ENABLED case. Pointed out by Jan Nieuwenhuizen
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.5 ===
+
+2008-07-27  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (gthread-2.0.lib): Pass appropriate -machine flag to lib.exe.
+
+2008-07-21  Matthias Clasen  <mclasen2redhat.com>
+
+	* === Released 2.17.4 ===
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.17.2 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.1 ===
+
+2008-05-28  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am: don't define G_DISABLE_SINGLE_INCLUDES, it's in
+	the global CPPFLAGS now.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.0 ===
+
+2008-05-05  Michael Natterer  <mitch@imendio.com>
+
+	* Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent
+	code from being checked in that breaks the build of applications
+	which use G_DISABLE_SINGLE_INCLUDES.
+
+2008-03-16  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Define gthread_def locally here instead of using an
+	Autoconf variable.
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.16.1 ===
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.6 ===
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.15.5 ===
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+2008-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* gthread-posix.c:
+	* gthread-win32.c: Replace uses of G_GNUC_PRETTY_FUNCTION
+	by __FUNCTION__.
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.2 ===
+
+008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.1 ===
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.0 ===
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.14.3 ===
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.2 ===
+
+2007-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.1 ===
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.0 ===
+
+2007-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.7 ===
+
+Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.6 ===
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.5 ===
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.4 ===
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.13.3 ===
+
+2007-05-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.2 ===
+
+2007-05-03  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.13.1 ===
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.0 ===
+
+2007-01-19  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am (gthread-2.0.lib): Use $(srcdir) for builds outside
+	srcdir.
+
+2007-01-16  Tor Lillqvist  <tml@novell.com>
+
+	* gthread-win32.c (g_gettime_win32_impl):
+	GetSystemTimeAsFileTime() returns 100s of nanoseconds since 1601,
+	so offset to Unix epoch (1970) and multiply by 100 to get
+	nanoseconds which is what we want.
+
+2006-12-28  Tor Lillqvist  <tml@novell.com>
+
+	* gthread-win32.c (g_thread_impl_init): Correct link to discussion
+	about CRITICAL_SECTIONs vs. mutexes. Thanks to Felix Kater for
+	pointing this out.
+
+2006-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.2 ===
+
+2006-07-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.1 ===
+
+2006-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.0 ===
+
+2006-06-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.4 ===
+
+2006-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.3 ===
+
+2006-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.2 ===
+
+2006-05-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.1 ===
+
+2006-05-03  Tor Lillqvist  <tml@novell.com>
+
+	* gthread-win32.c (g_thread_exit_win32_impl): Free with free() and
+	not g_free() what has been allocated with calloc(). (#340530, Jake
+	Goulding)
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.11.0 ===
+
+2006-03-11  Tor Lillqvist  <tml@novell.com>
+
+	* gthread-win32.c: #define _WIN32_WINDOWS as 0x0401 to get
+	declaration for IsDebuggerPresent() when using MSVC6. (#333879,
+	Kazuki Iwamoto)
+
+2006-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* ===  Released 2.10.1 ===
+
+2006-03-02  Tor Lillqvist  <tml@novell.com>
+
+	* gthread-win32.c (G_PRIVATE_MAX): Increase to 100. 16 was rather
+	low.
+	(g_private_new_win32_impl): Can't use g_error() here as
+	g_private_new() is called a few times by GLib internally before
+	the messaging system that g_error() requires is ready. Thanks to
+	Tim Janik for noticing. Just display a MessageBox() and abort()
+	instead.
+
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.10.0 ===
+
+2006-02-20  Tor Lillqvist  <tml@novell.com>
+
+	* gthread-win32.c (g_thread_exit_win32_impl): Make the
+	implementation of GPrivate behave more closely as in POSIX
+	threads: The value associacted with a GPrivate must be set to NULL
+	before calling the destructor. (The destructor gets the original
+	value as argument.)  A destructor might re-associate a non-NULL
+	value with some GPrivate. To deal with this, if after all
+	destructors have been called, there still are some non-NULL
+	values, the process is repeated. (#331367)
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.6 ===
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.5 ===
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.9.4 ===
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.3 ===
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.2 ===
+
+2005-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.1 ===
+
+2005-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.am: Remove gthread-solaris.c
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.0 ===
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.1 ===
+
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.0 ===
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.7 ===
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.6 ===
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.5 ===
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.4 ===
+
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.3 ===
+	
+2005-07-09  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: Don't use the scripts in build/win32 to compile
+	gthread.rc into a resource object file. (This means we lose the
+	build number increment magic, but I doubt it was that useful
+	anyway.) Instead use windres directly. To pass the normal .o file
+	produced by windres through libtool, which wants .lo files, pass
+	it directly to the linker using a -Wl option.
+
+	* gthread.rc.in: Thus replace BUILDNUMBER with 0.
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+	
+	* === Released 2.7.2 ===
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.1 ===
+
+2005-06-26  Tor Lillqvist  <tml@novell.com>
+
+	* Makefile.am: libtool installs/uninstalls the import library, no
+	need to do it ourselves. Do still install/uninstall the .def file,
+	though.
+
+2005-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.0 ===
+
+2005-06-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* gthread-posix.c (g_thread_create_posix_impl): Allow
+	setstacksize to fail.  (#304790, Michael Banck)
+
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.1 ===
+
+2004-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.0 ===
+	
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.7 ===
+	
+2004-11-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.6 ===
+	
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.5 ===
+
+2004-10-27 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.4 ===
+
+2004-09-18 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.3 ===
+
+2004-08-25 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.2 ===
+
+2004-08-01 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.1 ===
+
+Sun Jul 18 18:03:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* === Released 2.5.0 ===
+
+2002-11-23  Tor Lillqvist  <tml@iki.fi>
+
+	* gthread-win32.c (g_cond_timed_wait_win32_impl): Fix two bugs: 1)
+	If abs_time is NULL, should use infinite time. 2) Check for
+	current time already being past abs_time. (#99294, Christopher
+	R. Palmer, fix by Sebastian Wilhelmi)
+
+Mon Nov  4 14:45:24 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* gthread-posix.c gthread-solaris.c: Include <config.h>
+
+2002-03-10  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c (g_thread_create_posix_impl): Do a comparison,
+	not an assignment, stupid! Spotted by Daniel Elstner
+	<daniel.elstner@gmx.net>.
+
+2002-02-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c: Only compile most of this file, if
+	G_THREADS_ENABLED is set.
+
+	* Fixed typo in G_THREADS_ENABLED. 
+
+2002-01-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-solaris.c: Use g_free instead of free. Pointed out by
+	Sam O'Connor <sam@panviva.com>.
+
+2001-10-23  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: (Win32): If we have built the MSVC import library,
+	install it. Install the gcc import library. Also support
+	uninstall.
+
+2001-09-28  Tor Lillqvist  <tml@iki.fi>
+
+	* gthread-win32.c: Use an extra level of indirection for GMutex.
+	It is now a pointer either to a pointer to a CRITICAL_SECTION
+	struct, or to a mutex HANDLE. This is needed in case the user
+	defines G_ERRORCHECK_MUTEXES. G_MUTEX_SIZE must correctly reflect
+	the size of *GMutex, but this used to vary depending on whether we
+	at run-time chose to use CRITICAL_SECTIONs or mutexes.
+	(g_mutex_free_win32_cs_impl, g_cond_free_win32_impl): Call
+	DeleteCriticalSection() when done with it.
+
+	* gthread-impl.c (g_thread_init_with_errorcheck_mutexes): Call
+	g_thread_impl_init() before accessing
+	g_thread_functions_for_glib_use_default, as the
+	g_thread_impl_init() function might modify it.
+	
+2001-09-26  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: Fix couple of typos.
+
+	* gthread.def: Add g_thread_init_with_errorcheck_mutexes.
+
+2001-09-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c: Corrected the array size (cough, cough). Pointed
+	out by gpablo@intersystems.com.ar. Fixes #61065.
+
+2001-09-25  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Use new macros for .def file, and check for
+	MS_LIB_AVAILABLE, new rule to build MS import library.
+
+	* makefile.msc.in: Use same DLL and import library names as
+	libtool.
+	
+2001-09-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Add g_thread_equal_posix_impl and add to the
+	function vector g_thread_functions_for_glib_use_default.
+	
+	* gthread-solaris.c, gthread-win32.c: Add NULL as equal function,
+	as on those two platforms you don't need an equal function.
+
+2001-09-19  Tor Lillqvist  <tml@iki.fi>
+
+	* gthread.rc.in: Correct InternalName and OriginalFilename to
+	match what we actually produce.
+
+2001-07-20  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : reflect glib move
+
+2001-06-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-win32.c: Use g_win32_error_message to beautify error
+	messages.
+
+2001-05-24  Hans Breuer  <hans@breuer.org>
+
+	* makefile.msc.in : pthread isn't required anymore
+
+2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-win32.c (g_cond_wait_internal): Also return TRUE for
+	late arrived signals. Thanks to Steven Brooks
+	<umbrook0@cs.umanitoba.ca> for pointing out.
+
+	* gthread-impl.c (g_thread_init): Move the thread implementation
+	initialization to before assigning GThreadFuncs, which now is just
+	struct assigned and not memcpy'ed. Completed check for zero
+	members of GThreadFuncs. 
+
+	* makefile.mingw: Don't link to pthread anymore.
+
+	* gthread-win32.c: New file for native thread support for
+	win32. Thanks to Hans Breuer <hans@breuer.org> to got me
+	kickstarted.
+
+	* Makefile.am: Also distribute gthread-win32.c.
+
+Fri May  4 04:14:45 2001  Tim Janik  <timj@gtk.org>
+
+	* gthread-posix.c (g_cond_timed_wait_posix_impl): don't g_assert()
+	the user specified time, but g_return_val_if_fail() here.
+
+2001-04-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Added special case for priorities on
+	  FreeBSD. Thanks to David Reid <dreid@jetnet.co.uk> for the info.
+
+	* gthread-impl.c: Made two macros safe with ().
+
+2001-03-10  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Use the _LIBADD dependency on libglib only on
+	Win32.
+
+2001-02-21  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am: Use libglib-1.3.la from top_builddir. Invoke
+	libtool with -no-undefined for Win32 and Cygwin.
+
+	* gthread-impl.c (g_thread_init): Win32 code snippet used also on
+	Cygwin.
+
+2001-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Removed the G_THREAD_USE_PID_SURROGATE
+	implementation, which is now in gthread.c.
+
+2001-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c (g_thread_init_with_errorcheck_mutexes): Call
+	g_thread_impl_init(), as g_thread_init won't call it.
+
+	* gthread-impl.c (g_mutex_free_errorcheck_impl): Fixed it for
+	real. Sorry for this mess. It looked like a real obvious fix, so I
+	didn't check. Bad boy. Added some casts to quiet the compiler.
+
+2001-01-29  Havoc Pennington  <hp@redhat.com>
+
+	* gthread-impl.c (g_mutex_free_errorcheck_impl): hack this so it
+	compiles, needs fixing for real.
+
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c (g_mutex_free_errorcheck_impl): Add new check to
+	errorcheck mutexes to abort, if a locked mutex is freed.
+
+2001-01-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-solaris.c, gthread-posix.c: Made g_thread_min_stack_size
+	static.
+
+2000-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c: Revamped errorcheck mutexes and added errorcheck
+	cond_wait() and cond_timed_wait() funtions. This makes he whole
+	thing work. Now we only show the location of the locking/unlocking
+	for -DG_ERRORCHECK_MUTEXES and not the name of the mutex.
+
+2000-11-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c, gthread-posix.c, gthread-solaris.c: Removed
+	g_thread_map_priority function in favour of the
+	g_thread_priority_map array.  Initialize the array with
+	PRIORITY_{...}_VALUE, if available and interpolate beetween the
+	bounds if .._NORMAL_.. and .._HIGH_.. are not available.
+
+	* gthread-posix.c: If we should use the PID niceness as a
+	surrogate for thread priorities (G_THREAD_USE_PID_SURROGATE is
+	defined), then disable normal priority handling and use PIDs and
+	setpriority() instead. Depends on the thread to write its PID into
+	the place after the thread id right after thread creation.
+
+2000-11-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Include <sched.h> if available.
+
+2000-11-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-none.c: Add G_MUTEX_SIZE as needed for gthread-impl.c
+
+2000-10-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am : Add @GLIB_DEBUG_FLAGS@ to INCLUDES for accessing
+	-DG_ENABLE_DEBUG as needed in gthread-posix.c.
+
+	* gthread-posix.c: Revamped error handling for native thread
+	function calls. Now EPERM errors are ignored for some commands and
+	only a warning message is output once (at first occurrence).
+
+2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>
+
+	* Makefile.am (BUILT_EXTRA_DIST): New variable.
+	(dist-hook): Handle $(BUILT_EXTRA_DIST).
+
+2000-09-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-impl.c: Added errorcheck mutexes. New exported function
+	g_thread_init_with_errorcheck_mutexes, which is called instead of
+	g_thread_init, when compiled with -DG_ERRORCHECK_MUTEXES. New
+	static functions
+	g_mutex_(new|lock|trylock|unlock|free)_errorcheck_impl to
+	implement errorcheck mutexes.
+
+	* gthread-posix.impl.c, gthread-solaris-impl.c: Define the size of
+	a mutex.
+
+2000-09-21  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: Use pthreads macros from ../build.
+
+2000-09-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c, gthread-solaris.c:
+	s/G_MICROSEC/G_USEC_PER_SEC/ and s/G_NANOSEC/G_NSEC_PER_SEC/	
+
+2000-09-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c (g_thread_create_posix_impl): Use GError to
+	report errors.
+
+	* gthread-solaris.c (g_thread_create_solaris_impl): Use GError to
+	report errors as well.
+	
+2000-05-13  Tor Lillqvist  <tml@iki.fi>
+
+	* makefile.mingw.in: New file, with gthread stuff moved from
+	../makefile.mingw.in.
+
+	* Makefile.am: Add to EXTRA_DIST, add rule to build makefile.mingw.
+
+2000-04-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-solaris.c (g_mutex_new_solaris_impl): Changed the scope
+	of the initialized mutex to USYNC_THREAD. Thanks to Soeren
+	Sandmann <sandmann@daimi.au.dk> for pointing that out.
+
+2000-03-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c (posix_check_for_error): Forgot a '}' in a macro
+	for DCE-threads. Thanks to Karl Nelson <kenelson@ece.ucdavis.edu>
+	for pointing that out.
+
+2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Don't use priorities for threads, when the
+	minimal/maximal priorities couldn't be determined at configure
+	time.
+
+	* gthread-posix.c: Don't check for errors, when setting the scope
+	of a tread to system, as some posix implementations can't do that
+	and we don't want the thing to fail because of that.
+
+2000-02-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c, gthread-solaris.c: check for sysconf
+	(_SC_THREAD_STACK_MIN), which returns the minimal stack size for
+	new threads. Patch from Soeren Sandmann <sandmann@daimi.au.dk>.
+
+1999-11-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c, gthread-solaris.c: Changed the prototype of
+	thread_create and thread_self to return the system thread into
+	provided memory instead of a return value. This is necessary, as
+	HPUX has a pthread_t, that is bigger than the biggest integral
+	type there. Made some more functions static.
+
+	* gthread-posix.c: Small fixes for DCE threads: Detaching has to
+	be done after thread creation for DCE.
+
+1999-06-21  Tor Lillqvist  <tml@iki.fi>
+
+	* gthread-posix.c: Guard pthread_attr_setscope call with test
+	for _POSIX_THREAD_PRIORITY_SCHEDULING, which should be defined
+	in a <pthread.h> that supports that feature.
+	
+1999-06-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c, gthread-solaris.c: Added the native
+	implementations for the GLib's extended thread support.
+
+	* gthread-nspr.c: Removed for good. NSPR is nothing we would want
+	to build upon.
+
+	* gthread.c: Renamed to gthread-impl.c to avoid confusion with
+	../gthread.c (Formerly known as the file called gmutex.c)
+
+	* testgthread.c: Removed. The new and much extended tests are in
+	../tests/thread-test.c.
+
+	* Makefile.am: Changed to reflect the changes above.
+
+1999-03-31  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Use the right default arguments for the
+	construction of mutexes and conds for dce threads, these are
+	&pthread_(cond|mutex)attr_default instead of NULL. Hint from
+	D. Emilio Grimaldo Tunon <emilio_tunon@nl.compuware.com>.
+
+1999-03-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am (INCLUDES): Added @GTHREAD_COMPILE_IMPL_DEFINES@.
+
+1999-03-12  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c (g_private_get_posix_impl): Fixed typo for DCE
+	implementation.
+
+1999-03-11  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Now handle both dce and posix threads. They are
+	sufficently equal. Please do not commit my change to
+	glib-1-2/gthread/gthread-posix.c from 1999-03-03, as the current
+	change will take care of that too.
+
+1999-03-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c: Fixed broken mutex_trylock and slightly broken
+	cond_timed_wait functions.
+
+1999-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* testgthread.c (test_mutexes): Use new signature of
+	g_static_mutex* functions.
+
+1999-02-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* gthread-posix.c (g_private_get_posix_impl): Use the
+	HAVE_PTHREAD_GETSPECIFIC_POSIX macro to determine, which signature
+	to use for pthread_getspecific.
+
+Tue Jan 19 20:56:02 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* Makefile.am (EXTRA_DIST): Added gthread.def.
+
+Sun Jan 17 10:58:19 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* gthread.def: New file.
+
+1999-01-16 1999  Tor Lillqvist  <tml@iki.fi>
+
+	* gthread-posix.c: Conditionalize <sys/time.h> inclusion.
+
+1999-01-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* testgthread.c: conditionally compile according to the
+	G_THREADS_IMPL_??? macros.
+	(test_private_func): use rand_r instead of rand to make it
+	thread safe.
+
+1998-12-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* testgthread.c (new_thread): As a joinable thread seems to be the
+	default on posix, leave the explicit setting out, as it causes
+	problems on some older platforms.
+
+Wed Dec 16 22:21:33 CST 1998 Shawn T. Amundson <amundson@gtk.org>
+
+	* gthread-posix.c: use g_free in mutex_free (from Tim Janik)
+
+Thu Dec 17 03:38:57 1998  Tim Janik  <timj@gtk.org>
+
+	* Makefile.am: -DG_LOG_DOMAIN="GThread", we don't need an extern
+	variable for that (noticed by Joel Becker <jlbec@ocala.cs.miami.edu>)
+
+Wed Dec 16 03:16:16 1998  Tim Janik  <timj@gtk.org>
+
+	* testgthread.c: s/g_thread_supported/g_thread_supported ()/
+	* gthread.c: s/g_thread_supported/g_threads_got_initialized/
+	(g_thread_init): bail out if G_THREADS_ENABLED is not defined.
+
+1998-12-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+	* Makefile.am (EXTRA_DIST): updated.
+
+	* testgthread.c, gthread-*.c: Changed private to private_key to
+	avoid problems when compiling with under C++.
+
+	* gthread-none.c: 
+	s/g_mutex_functions_for_glib_use/g_thread_functions_for_glib_use/
+
+	* ChangeLog: from now on there is an extra ChangeLog for gthread
+	
+
diff --git a/gthread/Makefile.am b/gthread/Makefile.am
new file mode 100644
index 0000000..a7b53cf
--- /dev/null
+++ b/gthread/Makefile.am
@@ -0,0 +1,94 @@
+## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
+
+AM_CPPFLAGS = 				\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gthread 	\
+	-DG_LOG_DOMAIN=\"GThread\" 	\
+	@GTHREAD_COMPILE_IMPL_DEFINES@ 	\
+	@GLIB_DEBUG_FLAGS@ 		\
+	-DG_DISABLE_DEPRECATED
+
+EXTRA_DIST +=				\
+		makefile.msc.in		\
+		gthread-posix.c		\
+		gthread-win32.c		\
+		gthread-none.c		\
+		gthread.def		\
+		gthread.rc.in
+
+BUILT_EXTRA_DIST = 			\
+		makefile.msc		\
+		gthread.rc
+
+libglib = $(top_builddir)/glib/libglib-2.0.la
+
+top_builddir_full=`cd \$(top_builddir); pwd`
+
+lib_LTLIBRARIES = libgthread-2.0.la
+
+if OS_WIN32_AND_DLL_COMPILATION
+if MS_LIB_AVAILABLE
+noinst_DATA = gthread-2.0.lib
+
+install_ms_lib_cmd = $(INSTALL) gthread-2.0.lib $(DESTDIR)$(libdir)
+uninstall_ms_lib_cmd = -rm $(DESTDIR)$(libdir)/gthread-2.0.lib
+endif
+endif
+
+install-ms-lib:
+	$(install_ms_lib_cmd)
+
+uninstall-ms-lib:
+	$(uninstall_ms_lib_cmd)
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+export_symbols = -export-symbols $(srcdir)/gthread.def
+gthread_def = gthread.def
+
+install-def-file:
+	$(INSTALL) $(srcdir)/gthread.def $(DESTDIR)$(libdir)/gthread-2.0.def
+
+uninstall-def-file:
+	-rm $(DESTDIR)$(libdir)/gthread-2.0.def
+else
+install-def-file:
+uninstall-def-file:
+endif
+
+if OS_WIN32_AND_DLL_COMPILATION
+gthread_win32_res = gthread-win32-res.o
+gthread_win32_res_ldflag = -Wl,$(gthread_win32_res)
+endif
+
+libgthread_2_0_la_SOURCES = gthread-impl.c
+libgthread_2_0_la_LDFLAGS = \
+	$(gthread_win32_res_ldflag) \
+	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+	-export-dynamic $(no_undefined) $(export_symbols)
+
+libgthread_2_0_la_LIBADD = $(G_THREAD_LIBS_EXTRA) $(G_THREAD_LIBS_FOR_GTHREAD) $(libglib)
+
+libgthread_2_0_la_DEPENDENCIES = $(gthread_win32_res) $(gthread_def)
+
+gthread-win32-res.o: gthread.rc
+	$(WINDRES) gthread.rc $@
+
+gthread-2.0.lib: libgthread-2.0.la gthread.def
+	lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgthread-2.0-$(LT_CURRENT_MINUS_AGE).dll -def:$(srcdir)/gthread.def -out:$@
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)'; \
+	for f in $$files; do \
+	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
+	  cp $$d/$$f $(distdir) || exit 1; done
+
+install-data-local: install-ms-lib install-def-file
+
+uninstall-local: uninstall-ms-lib uninstall-def-file
+
diff --git a/gthread/gthread-impl.c b/gthread/gthread-impl.c
new file mode 100644
index 0000000..24eb3c4
--- /dev/null
+++ b/gthread/gthread-impl.c
@@ -0,0 +1,372 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gthread.c: thread related functions
+ * Copyright 1998 Sebastian Wilhelmi; University of Karlsruhe
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include "glib.h"
+#include "gthreadprivate.h"
+
+#ifdef G_THREADS_ENABLED
+
+static GSystemThread zero_thread; /* This is initialized to all zero */
+static gboolean thread_system_already_initialized = FALSE;
+static gint g_thread_priority_map [G_THREAD_PRIORITY_URGENT + 1];
+
+#include G_THREAD_SOURCE
+
+#ifndef PRIORITY_LOW_VALUE
+# define PRIORITY_LOW_VALUE 0
+#endif
+
+#ifndef PRIORITY_URGENT_VALUE
+# define PRIORITY_URGENT_VALUE 0
+#endif
+
+#ifndef PRIORITY_NORMAL_VALUE
+# define PRIORITY_NORMAL_VALUE						\
+  ((PRIORITY_LOW_VALUE * 6 + PRIORITY_URGENT_VALUE * 4) / 10)
+#endif /* PRIORITY_NORMAL_VALUE */
+
+#ifndef PRIORITY_HIGH_VALUE
+# define PRIORITY_HIGH_VALUE						\
+  ((PRIORITY_NORMAL_VALUE + PRIORITY_URGENT_VALUE * 2) / 3)
+#endif /* PRIORITY_HIGH_VALUE */
+
+void g_mutex_init (void);
+void g_mem_init (void);
+void g_messages_init (void);
+void g_convert_init (void);
+void g_rand_init (void);
+void g_main_thread_init (void);
+
+typedef struct _GMutexDebugInfo GMutexDebugInfo;
+struct _GMutexDebugInfo
+{
+  gchar *location;
+  GSystemThread owner;
+};
+
+#define G_MUTEX_DEBUG_INFO(mutex) 					\
+  (((GMutexDebugInfo*)(((char*)mutex)+G_MUTEX_SIZE)))
+
+static GMutex *
+g_mutex_new_errorcheck_impl (void)
+{
+  GMutex *retval = g_thread_functions_for_glib_use_default.mutex_new ();
+  GMutexDebugInfo *info;
+  retval = g_realloc (retval, G_MUTEX_SIZE + sizeof (GMutexDebugInfo));
+
+  info = G_MUTEX_DEBUG_INFO (retval);
+  g_system_thread_assign (info->owner, zero_thread);
+  info->location = "invalid";
+
+  return retval;
+}
+
+static void
+g_mutex_lock_errorcheck_impl (GMutex *mutex,
+			      const gulong magic,
+			      gchar * const location)
+{
+  GMutexDebugInfo *info = G_MUTEX_DEBUG_INFO (mutex);
+  gchar *loc = (magic == G_MUTEX_DEBUG_MAGIC) ? location : "unknown";
+
+  GSystemThread self;
+  g_thread_functions_for_glib_use.thread_self (&self);
+
+  if (g_system_thread_equal (info->owner, self))
+    g_error ("Trying to recursivly lock a mutex at '%s', "
+	     "previously locked at '%s'",
+	     loc, info->location);
+
+  g_thread_functions_for_glib_use_default.mutex_lock (mutex);
+
+  g_system_thread_assign (info->owner, self);
+  info->location = loc;
+}
+
+static gboolean
+g_mutex_trylock_errorcheck_impl (GMutex *mutex,
+				 const gulong magic,
+				 gchar * const location)
+{
+  GMutexDebugInfo *info = G_MUTEX_DEBUG_INFO (mutex);
+  gchar *loc = (magic == G_MUTEX_DEBUG_MAGIC) ? location : "unknown";
+
+  GSystemThread self;
+  g_thread_functions_for_glib_use.thread_self (&self);
+
+  if (g_system_thread_equal (info->owner, self))
+    g_error ("Trying to recursivly lock a mutex at '%s', "
+	     "previously locked at '%s'",
+	     loc, info->location);
+
+  if (!g_thread_functions_for_glib_use_default.mutex_trylock (mutex))
+    return FALSE;
+
+  g_system_thread_assign (info->owner, self);
+  info->location = loc;
+
+  return TRUE;
+}
+
+static void
+g_mutex_unlock_errorcheck_impl (GMutex *mutex,
+				const gulong magic,
+				gchar * const location)
+{
+  GMutexDebugInfo *info = G_MUTEX_DEBUG_INFO (mutex);
+  gchar *loc = (magic == G_MUTEX_DEBUG_MAGIC) ? location : "unknown";
+
+  GSystemThread self;
+  g_thread_functions_for_glib_use.thread_self (&self);
+
+  if (g_system_thread_equal (info->owner, zero_thread))
+    g_error ("Trying to unlock an unlocked mutex at '%s'", loc);
+
+  if (!g_system_thread_equal (info->owner, self))
+    g_warning ("Trying to unlock a mutex at '%s', "
+	       "previously locked by a different thread at '%s'",
+	       loc, info->location);
+
+  g_system_thread_assign (info->owner, zero_thread);
+  info->location = NULL;
+
+  g_thread_functions_for_glib_use_default.mutex_unlock (mutex);
+}
+
+static void
+g_mutex_free_errorcheck_impl (GMutex *mutex,
+			      const gulong magic,
+			      gchar * const location)
+{
+  GMutexDebugInfo *info = G_MUTEX_DEBUG_INFO (mutex);
+  gchar *loc = (magic == G_MUTEX_DEBUG_MAGIC) ? location : "unknown";
+
+  if (info && !g_system_thread_equal (info->owner, zero_thread))
+    g_error ("Trying to free a locked mutex at '%s', "
+	     "which was previously locked at '%s'",
+	     loc, info->location);
+
+  g_thread_functions_for_glib_use_default.mutex_free (mutex);
+}
+
+static void
+g_cond_wait_errorcheck_impl (GCond *cond,
+			     GMutex *mutex,
+			     const gulong magic,
+			     gchar * const location)
+{
+  GMutexDebugInfo *info = G_MUTEX_DEBUG_INFO (mutex);
+  gchar *loc = (magic == G_MUTEX_DEBUG_MAGIC) ? location : "unknown";
+
+  GSystemThread self;
+  g_thread_functions_for_glib_use.thread_self (&self);
+
+  if (g_system_thread_equal (info->owner, zero_thread))
+    g_error ("Trying to use an unlocked mutex in g_cond_wait() at '%s'", loc);
+
+  if (!g_system_thread_equal (info->owner, self))
+    g_error ("Trying to use a mutex locked by another thread in "
+	     "g_cond_wait() at '%s'", loc);
+
+  g_system_thread_assign (info->owner, zero_thread);
+  loc = info->location;
+
+  g_thread_functions_for_glib_use_default.cond_wait (cond, mutex);
+
+  g_system_thread_assign (info->owner, self);
+  info->location = loc;
+}
+
+
+static gboolean
+g_cond_timed_wait_errorcheck_impl (GCond *cond,
+                                   GMutex *mutex,
+                                   GTimeVal *end_time,
+				   const gulong magic,
+				   gchar * const location)
+{
+  GMutexDebugInfo *info = G_MUTEX_DEBUG_INFO (mutex);
+  gchar *loc = (magic == G_MUTEX_DEBUG_MAGIC) ? location : "unknown";
+  gboolean retval;
+
+  GSystemThread self;
+  g_thread_functions_for_glib_use.thread_self (&self);
+
+  if (g_system_thread_equal (info->owner, zero_thread))
+    g_error ("Trying to use an unlocked mutex in g_cond_timed_wait() at '%s'",
+	     loc);
+
+  if (!g_system_thread_equal (info->owner, self))
+    g_error ("Trying to use a mutex locked by another thread in "
+	     "g_cond_timed_wait() at '%s'", loc);
+
+  g_system_thread_assign (info->owner, zero_thread);
+  loc = info->location;
+
+  retval = g_thread_functions_for_glib_use_default.cond_timed_wait (cond,
+								    mutex,
+								    end_time);
+
+  g_system_thread_assign (info->owner, self);
+  info->location = loc;
+
+  return retval;
+}
+
+
+/* unshadow function declaration. See gthread.h */
+#undef g_thread_init
+
+void
+g_thread_init_with_errorcheck_mutexes (GThreadFunctions* init)
+{
+  GThreadFunctions errorcheck_functions;
+  if (init)
+    g_error ("Errorcheck mutexes can only be used for native "
+	     "thread implementations. Sorry." );
+
+#ifdef HAVE_G_THREAD_IMPL_INIT
+  /* This isn't called in g_thread_init, as it doesn't think to get
+   * the default implementation, so we have to call it on our own.
+   *
+   * We must call this before copying
+   * g_thread_functions_for_glib_use_default as the
+   * implementation-specific init function might modify the contents
+   * of g_thread_functions_for_glib_use_default based on operating
+   * system version, C library version, or whatever. */
+  g_thread_impl_init();
+#endif /* HAVE_G_THREAD_IMPL_INIT */
+
+  errorcheck_functions = g_thread_functions_for_glib_use_default;
+  errorcheck_functions.mutex_new = g_mutex_new_errorcheck_impl;
+  errorcheck_functions.mutex_lock =
+    (void (*)(GMutex *)) g_mutex_lock_errorcheck_impl;
+  errorcheck_functions.mutex_trylock =
+    (gboolean (*)(GMutex *)) g_mutex_trylock_errorcheck_impl;
+  errorcheck_functions.mutex_unlock =
+    (void (*)(GMutex *)) g_mutex_unlock_errorcheck_impl;
+  errorcheck_functions.mutex_free =
+    (void (*)(GMutex *)) g_mutex_free_errorcheck_impl;
+  errorcheck_functions.cond_wait =
+    (void (*)(GCond *, GMutex *)) g_cond_wait_errorcheck_impl;
+  errorcheck_functions.cond_timed_wait =
+    (gboolean (*)(GCond *, GMutex *, GTimeVal *))
+    g_cond_timed_wait_errorcheck_impl;
+
+  g_thread_init (&errorcheck_functions);
+}
+
+void
+g_thread_init (GThreadFunctions* init)
+{
+  gboolean supported;
+
+  if (thread_system_already_initialized)
+    g_error ("GThread system may only be initialized once.");
+
+  thread_system_already_initialized = TRUE;
+
+  if (init == NULL)
+    {
+#ifdef HAVE_G_THREAD_IMPL_INIT
+      /* now do any initialization stuff required by the
+       * implementation, but only if called with a NULL argument, of
+       * course. Otherwise it's up to the user to do so. */
+      g_thread_impl_init();
+#endif /* HAVE_G_THREAD_IMPL_INIT */
+      init = &g_thread_functions_for_glib_use_default;
+    }
+  else
+    g_thread_use_default_impl = FALSE;
+
+  g_thread_functions_for_glib_use = *init;
+  if (g_thread_gettime_impl)
+    g_thread_gettime = g_thread_gettime_impl;
+
+  supported = (init->mutex_new &&
+	       init->mutex_lock &&
+	       init->mutex_trylock &&
+	       init->mutex_unlock &&
+	       init->mutex_free &&
+	       init->cond_new &&
+	       init->cond_signal &&
+	       init->cond_broadcast &&
+	       init->cond_wait &&
+	       init->cond_timed_wait &&
+	       init->cond_free &&
+	       init->private_new &&
+	       init->private_get &&
+	       init->private_set &&
+	       init->thread_create &&
+	       init->thread_yield &&
+	       init->thread_join &&
+	       init->thread_exit &&
+	       init->thread_set_priority &&
+	       init->thread_self);
+
+  /* if somebody is calling g_thread_init (), it means that he wants to
+   * have thread support, so check this
+   */
+  if (!supported)
+    {
+      if (g_thread_use_default_impl)
+	g_error ("Threads are not supported on this platform.");
+      else
+	g_error ("The supplied thread function vector is invalid.");
+    }
+
+  g_thread_priority_map [G_THREAD_PRIORITY_LOW] = PRIORITY_LOW_VALUE;
+  g_thread_priority_map [G_THREAD_PRIORITY_NORMAL] = PRIORITY_NORMAL_VALUE;
+  g_thread_priority_map [G_THREAD_PRIORITY_HIGH] = PRIORITY_HIGH_VALUE;
+  g_thread_priority_map [G_THREAD_PRIORITY_URGENT] = PRIORITY_URGENT_VALUE;
+
+  g_thread_init_glib ();
+}
+
+#else /* !G_THREADS_ENABLED */
+
+void
+g_thread_init (GThreadFunctions* init)
+{
+  g_error ("GLib thread support is disabled.");
+}
+
+void
+g_thread_init_with_errorcheck_mutexes (GThreadFunctions* init)
+{
+  g_error ("GLib thread support is disabled.");
+}
+
+#endif /* !G_THREADS_ENABLED */
diff --git a/gthread/gthread-none.c b/gthread/gthread-none.c
new file mode 100644
index 0000000..6fbeff1
--- /dev/null
+++ b/gthread/gthread-none.c
@@ -0,0 +1,39 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gthread.c: fallback thread system implementation
+ * Copyright 1998 Sebastian Wilhelmi; University of Karlsruhe
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+static GThreadFunctions
+g_thread_functions_for_glib_use_default; /* is NULLified */
+
+static guint64 (*g_thread_gettime_impl) (void) = NULL;
+ 
+#define G_MUTEX_SIZE 0
diff --git a/gthread/gthread-posix.c b/gthread/gthread-posix.c
new file mode 100644
index 0000000..9188f84
--- /dev/null
+++ b/gthread/gthread-posix.c
@@ -0,0 +1,467 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gthread.c: posix thread system implementation
+ * Copyright 1998 Sebastian Wilhelmi; University of Karlsruhe
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <pthread.h>
+#include <errno.h>
+#include <stdlib.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef HAVE_SCHED_H
+#include <sched.h>
+#endif
+
+#define posix_check_err(err, name) G_STMT_START{			\
+  int error = (err); 							\
+  if (error)	 		 		 			\
+    g_error ("file %s: line %d (%s): error '%s' during '%s'",		\
+           __FILE__, __LINE__, G_STRFUNC,				\
+           g_strerror (error), name);					\
+  }G_STMT_END
+
+#define posix_check_cmd(cmd) posix_check_err (posix_error (cmd), #cmd)
+
+#ifdef G_ENABLE_DEBUG
+static gboolean posix_check_cmd_prio_warned = FALSE;
+# define posix_check_cmd_prio(cmd) G_STMT_START{			\
+    int err = posix_error (cmd);					\
+    if (err == EPERM)		 		 			\
+      { 	 			 				\
+        if (!posix_check_cmd_prio_warned) 		 		\
+          { 	 				 			\
+            posix_check_cmd_prio_warned = TRUE;		 		\
+            g_warning ("Priorities can only be changed " 		\
+                        "(resp. increased) by root."); 			\
+          }			 					\
+      }			 						\
+    else  		 						\
+      posix_check_err (err, #cmd);					\
+     }G_STMT_END
+#else /* G_ENABLE_DEBUG */
+# define posix_check_cmd_prio(cmd) G_STMT_START{			\
+    int err = posix_error (cmd);					\
+    if (err != EPERM)		 		 			\
+      posix_check_err (err, #cmd);					\
+     }G_STMT_END
+#endif /* G_ENABLE_DEBUG */
+
+#if defined(G_THREADS_IMPL_POSIX)
+# define posix_error(what) (what)
+# define mutexattr_default NULL
+# define condattr_default NULL
+#elif defined(G_THREADS_IMPL_DCE)
+# define posix_error(what) ((what) == -1 ? errno : 0)
+# define pthread_key_create(a, b) pthread_keycreate (a, b)
+# define pthread_attr_init(a) pthread_attr_create (a)
+# define pthread_attr_destroy(a) pthread_attr_delete (a)
+# define pthread_create(a, b, c, d) pthread_create (a, *b, c, d)
+# define mutexattr_default (pthread_mutexattr_default)
+# define condattr_default (pthread_condattr_default)
+#else /* neither G_THREADS_IMPL_POSIX nor G_THREADS_IMPL_DCE are defined */
+# error This should not happen. Contact the GLib team.
+#endif
+
+#if defined (POSIX_MIN_PRIORITY) && defined (POSIX_MAX_PRIORITY)
+# define HAVE_PRIORITIES 1
+static gint priority_normal_value;
+# ifdef __FreeBSD__
+   /* FreeBSD threads use different priority values from the POSIX_
+    * defines so we just set them here. The corresponding macros
+    * PTHREAD_MIN_PRIORITY and PTHREAD_MAX_PRIORITY are implied to be
+    * exported by the docs, but they aren't.
+    */
+#  define PRIORITY_LOW_VALUE      0
+#  define PRIORITY_URGENT_VALUE   31
+# else /* !__FreeBSD__ */
+#  define PRIORITY_LOW_VALUE      POSIX_MIN_PRIORITY
+#  define PRIORITY_URGENT_VALUE   POSIX_MAX_PRIORITY
+# endif /* !__FreeBSD__ */
+# define PRIORITY_NORMAL_VALUE    priority_normal_value
+#endif /* POSIX_MIN_PRIORITY && POSIX_MAX_PRIORITY */
+
+static gulong g_thread_min_stack_size = 0;
+
+#define G_MUTEX_SIZE (sizeof (pthread_mutex_t))
+
+#if defined(HAVE_CLOCK_GETTIME) && defined(HAVE_MONOTONIC_CLOCK) 
+#define USE_CLOCK_GETTIME 1
+static gint posix_clock = 0;
+#endif
+
+#if defined(_SC_THREAD_STACK_MIN) || defined (HAVE_PRIORITIES) || defined (USE_CLOCK_GETTIME)
+#define HAVE_G_THREAD_IMPL_INIT
+static void
+g_thread_impl_init(void)
+{
+#ifdef _SC_THREAD_STACK_MIN
+  g_thread_min_stack_size = MAX (sysconf (_SC_THREAD_STACK_MIN), 0);
+#endif /* _SC_THREAD_STACK_MIN */
+#ifdef HAVE_PRIORITIES
+# ifdef G_THREADS_IMPL_POSIX
+  {
+    struct sched_param sched;
+    int policy;
+    posix_check_cmd (pthread_getschedparam (pthread_self(), &policy, &sched));
+    priority_normal_value = sched.sched_priority;
+  }
+# else /* G_THREADS_IMPL_DCE */
+  posix_check_cmd (priority_normal_value =
+		   pthread_getprio (*(pthread_t*)thread,
+				    g_thread_priority_map [priority]));
+# endif
+#endif /* HAVE_PRIORITIES */
+
+#ifdef USE_CLOCK_GETTIME
+ if (sysconf (_SC_MONOTONIC_CLOCK) >= 0)
+   posix_clock = CLOCK_MONOTONIC;
+ else
+   posix_clock = CLOCK_REALTIME;
+#endif
+}
+#endif /* _SC_THREAD_STACK_MIN || HAVE_PRIORITIES */
+
+static GMutex *
+g_mutex_new_posix_impl (void)
+{
+  GMutex *result = (GMutex *) g_new (pthread_mutex_t, 1);
+  posix_check_cmd (pthread_mutex_init ((pthread_mutex_t *) result,
+				       mutexattr_default));
+  return result;
+}
+
+static void
+g_mutex_free_posix_impl (GMutex * mutex)
+{
+  posix_check_cmd (pthread_mutex_destroy ((pthread_mutex_t *) mutex));
+  g_free (mutex);
+}
+
+/* NOTE: the functions g_mutex_lock and g_mutex_unlock may not use
+   functions from gmem.c and gmessages.c; */
+
+/* pthread_mutex_lock, pthread_mutex_unlock can be taken directly, as
+   signature and semantic are right, but without error check then!!!!,
+   we might want to change this therefore. */
+
+static gboolean
+g_mutex_trylock_posix_impl (GMutex * mutex)
+{
+  int result;
+
+  result = pthread_mutex_trylock ((pthread_mutex_t *) mutex);
+
+#ifdef G_THREADS_IMPL_POSIX
+  if (result == EBUSY)
+    return FALSE;
+#else /* G_THREADS_IMPL_DCE */
+  if (result == 0)
+    return FALSE;
+#endif
+
+  posix_check_err (posix_error (result), "pthread_mutex_trylock");
+  return TRUE;
+}
+
+static GCond *
+g_cond_new_posix_impl (void)
+{
+  GCond *result = (GCond *) g_new (pthread_cond_t, 1);
+  posix_check_cmd (pthread_cond_init ((pthread_cond_t *) result,
+				      condattr_default));
+  return result;
+}
+
+/* pthread_cond_signal, pthread_cond_broadcast and pthread_cond_wait
+   can be taken directly, as signature and semantic are right, but
+   without error check then!!!!, we might want to change this
+   therefore. */
+
+#define G_NSEC_PER_SEC 1000000000
+
+static gboolean
+g_cond_timed_wait_posix_impl (GCond * cond,
+			      GMutex * entered_mutex,
+			      GTimeVal * abs_time)
+{
+  int result;
+  struct timespec end_time;
+  gboolean timed_out;
+
+  g_return_val_if_fail (cond != NULL, FALSE);
+  g_return_val_if_fail (entered_mutex != NULL, FALSE);
+
+  if (!abs_time)
+    {
+      result = pthread_cond_wait ((pthread_cond_t *)cond,
+                                  (pthread_mutex_t *) entered_mutex);
+      timed_out = FALSE;
+    }
+  else
+    {
+      end_time.tv_sec = abs_time->tv_sec;
+      end_time.tv_nsec = abs_time->tv_usec * (G_NSEC_PER_SEC / G_USEC_PER_SEC);
+
+      g_return_val_if_fail (end_time.tv_nsec < G_NSEC_PER_SEC, TRUE);
+
+      result = pthread_cond_timedwait ((pthread_cond_t *) cond,
+                                       (pthread_mutex_t *) entered_mutex,
+                                       &end_time);
+#ifdef G_THREADS_IMPL_POSIX
+      timed_out = (result == ETIMEDOUT);
+#else /* G_THREADS_IMPL_DCE */
+      timed_out = (result == -1) && (errno == EAGAIN);
+#endif
+    }
+
+  if (!timed_out)
+    posix_check_err (posix_error (result), "pthread_cond_timedwait");
+
+  return !timed_out;
+}
+
+static void
+g_cond_free_posix_impl (GCond * cond)
+{
+  posix_check_cmd (pthread_cond_destroy ((pthread_cond_t *) cond));
+  g_free (cond);
+}
+
+static GPrivate *
+g_private_new_posix_impl (GDestroyNotify destructor)
+{
+  GPrivate *result = (GPrivate *) g_new (pthread_key_t, 1);
+  posix_check_cmd (pthread_key_create ((pthread_key_t *) result, destructor));
+  return result;
+}
+
+/* NOTE: the functions g_private_get and g_private_set may not use
+   functions from gmem.c and gmessages.c */
+
+static void
+g_private_set_posix_impl (GPrivate * private_key, gpointer value)
+{
+  if (!private_key)
+    return;
+  pthread_setspecific (*(pthread_key_t *) private_key, value);
+}
+
+static gpointer
+g_private_get_posix_impl (GPrivate * private_key)
+{
+  if (!private_key)
+    return NULL;
+#ifdef G_THREADS_IMPL_POSIX
+  return pthread_getspecific (*(pthread_key_t *) private_key);
+#else /* G_THREADS_IMPL_DCE */
+  {
+    void* data;
+    posix_check_cmd (pthread_getspecific (*(pthread_key_t *) private_key,
+					  &data));
+    return data;
+  }
+#endif
+}
+
+static void
+g_thread_create_posix_impl (GThreadFunc thread_func,
+			    gpointer arg,
+			    gulong stack_size,
+			    gboolean joinable,
+			    gboolean bound,
+			    GThreadPriority priority,
+			    gpointer thread,
+			    GError **error)
+{
+  pthread_attr_t attr;
+  gint ret;
+
+  g_return_if_fail (thread_func);
+  g_return_if_fail (priority >= G_THREAD_PRIORITY_LOW);
+  g_return_if_fail (priority <= G_THREAD_PRIORITY_URGENT);
+
+  posix_check_cmd (pthread_attr_init (&attr));
+
+#ifdef HAVE_PTHREAD_ATTR_SETSTACKSIZE
+  if (stack_size)
+    {
+      stack_size = MAX (g_thread_min_stack_size, stack_size);
+      /* No error check here, because some systems can't do it and
+       * we simply don't want threads to fail because of that. */
+      pthread_attr_setstacksize (&attr, stack_size);
+    }
+#endif /* HAVE_PTHREAD_ATTR_SETSTACKSIZE */
+
+#ifdef PTHREAD_SCOPE_SYSTEM
+  if (bound)
+    /* No error check here, because some systems can't do it and we
+     * simply don't want threads to fail because of that. */
+    pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
+#endif /* PTHREAD_SCOPE_SYSTEM */
+
+#ifdef G_THREADS_IMPL_POSIX
+  posix_check_cmd (pthread_attr_setdetachstate (&attr,
+          joinable ? PTHREAD_CREATE_JOINABLE : PTHREAD_CREATE_DETACHED));
+#endif /* G_THREADS_IMPL_POSIX */
+
+#ifdef HAVE_PRIORITIES
+# ifdef G_THREADS_IMPL_POSIX
+  {
+    struct sched_param sched;
+    posix_check_cmd (pthread_attr_getschedparam (&attr, &sched));
+    sched.sched_priority = g_thread_priority_map [priority];
+    posix_check_cmd_prio (pthread_attr_setschedparam (&attr, &sched));
+  }
+# else /* G_THREADS_IMPL_DCE */
+  posix_check_cmd_prio
+    (pthread_attr_setprio (&attr, g_thread_priority_map [priority]));
+# endif /* G_THREADS_IMPL_DCE */
+#endif /* HAVE_PRIORITIES */
+  ret = posix_error (pthread_create (thread, &attr,
+				     (void* (*)(void*))thread_func, arg));
+
+  posix_check_cmd (pthread_attr_destroy (&attr));
+
+  if (ret == EAGAIN)
+    {
+      g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN, 
+		   "Error creating thread: %s", g_strerror (ret));
+      return;
+    }
+
+  posix_check_err (ret, "pthread_create");
+
+#ifdef G_THREADS_IMPL_DCE
+  if (!joinable)
+    posix_check_cmd (pthread_detach (thread));
+#endif /* G_THREADS_IMPL_DCE */
+}
+
+static void
+g_thread_yield_posix_impl (void)
+{
+  POSIX_YIELD_FUNC;
+}
+
+static void
+g_thread_join_posix_impl (gpointer thread)
+{
+  gpointer ignore;
+  posix_check_cmd (pthread_join (*(pthread_t*)thread, &ignore));
+}
+
+static void
+g_thread_exit_posix_impl (void)
+{
+  pthread_exit (NULL);
+}
+
+static void
+g_thread_set_priority_posix_impl (gpointer thread, GThreadPriority priority)
+{
+  g_return_if_fail (priority >= G_THREAD_PRIORITY_LOW);
+  g_return_if_fail (priority <= G_THREAD_PRIORITY_URGENT);
+#ifdef HAVE_PRIORITIES
+# ifdef G_THREADS_IMPL_POSIX
+  {
+    struct sched_param sched;
+    int policy;
+    posix_check_cmd (pthread_getschedparam (*(pthread_t*)thread, &policy,
+					    &sched));
+    sched.sched_priority = g_thread_priority_map [priority];
+    posix_check_cmd_prio (pthread_setschedparam (*(pthread_t*)thread, policy,
+						 &sched));
+  }
+# else /* G_THREADS_IMPL_DCE */
+  posix_check_cmd_prio (pthread_setprio (*(pthread_t*)thread,
+					 g_thread_priority_map [priority]));
+# endif
+#endif /* HAVE_PRIORITIES */
+}
+
+static void
+g_thread_self_posix_impl (gpointer thread)
+{
+  *(pthread_t*)thread = pthread_self();
+}
+
+static gboolean
+g_thread_equal_posix_impl (gpointer thread1, gpointer thread2)
+{
+  return (pthread_equal (*(pthread_t*)thread1, *(pthread_t*)thread2) != 0);
+}
+
+#ifdef USE_CLOCK_GETTIME 
+static guint64
+gettime (void)
+{
+  struct timespec tv;
+
+  clock_gettime (posix_clock, &tv);
+
+  return (guint64) tv.tv_sec * G_NSEC_PER_SEC + tv.tv_nsec;
+}
+static guint64 (*g_thread_gettime_impl)(void) = gettime;
+#else
+static guint64 (*g_thread_gettime_impl)(void) = 0;
+#endif
+
+static GThreadFunctions g_thread_functions_for_glib_use_default =
+{
+  g_mutex_new_posix_impl,
+  (void (*)(GMutex *)) pthread_mutex_lock,
+  g_mutex_trylock_posix_impl,
+  (void (*)(GMutex *)) pthread_mutex_unlock,
+  g_mutex_free_posix_impl,
+  g_cond_new_posix_impl,
+  (void (*)(GCond *)) pthread_cond_signal,
+  (void (*)(GCond *)) pthread_cond_broadcast,
+  (void (*)(GCond *, GMutex *)) pthread_cond_wait,
+  g_cond_timed_wait_posix_impl,
+  g_cond_free_posix_impl,
+  g_private_new_posix_impl,
+  g_private_get_posix_impl,
+  g_private_set_posix_impl,
+  g_thread_create_posix_impl,
+  g_thread_yield_posix_impl,
+  g_thread_join_posix_impl,
+  g_thread_exit_posix_impl,
+  g_thread_set_priority_posix_impl,
+  g_thread_self_posix_impl,
+  g_thread_equal_posix_impl
+};
diff --git a/gthread/gthread-win32.c b/gthread/gthread-win32.c
new file mode 100644
index 0000000..465b205
--- /dev/null
+++ b/gthread/gthread-win32.c
@@ -0,0 +1,639 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * gthread.c: solaris thread system implementation
+ * Copyright 1998-2001 Sebastian Wilhelmi; University of Karlsruhe
+ * Copyright 2001 Hans Breuer
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/*
+ * MT safe
+ */
+
+#include "config.h"
+
+#include "glib.h"
+
+#define STRICT
+#define _WIN32_WINDOWS 0x0401 /* to get IsDebuggerPresent */
+#include <windows.h>
+#undef STRICT
+
+#include <process.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define win32_check_for_error(what) G_STMT_START{			\
+  if (!(what))								\
+    g_error ("file %s: line %d (%s): error %s during %s",		\
+	     __FILE__, __LINE__, G_STRFUNC,				\
+	     g_win32_error_message (GetLastError ()), #what);		\
+  }G_STMT_END
+
+#define G_MUTEX_SIZE (sizeof (gpointer))
+
+#define PRIORITY_LOW_VALUE    THREAD_PRIORITY_BELOW_NORMAL
+#define PRIORITY_NORMAL_VALUE THREAD_PRIORITY_NORMAL
+#define PRIORITY_HIGH_VALUE   THREAD_PRIORITY_ABOVE_NORMAL
+#define PRIORITY_URGENT_VALUE THREAD_PRIORITY_HIGHEST
+
+static DWORD g_thread_self_tls;
+static DWORD g_private_tls;
+static DWORD g_cond_event_tls;
+static CRITICAL_SECTION g_thread_global_spinlock;
+
+typedef BOOL (__stdcall *GTryEnterCriticalSectionFunc) (CRITICAL_SECTION *);
+
+static GTryEnterCriticalSectionFunc try_enter_critical_section = NULL;
+
+/* As noted in the docs, GPrivate is a limited resource, here we take
+ * a rather low maximum to save memory, use GStaticPrivate instead. */
+#define G_PRIVATE_MAX 100
+
+static GDestroyNotify g_private_destructors[G_PRIVATE_MAX];
+
+static guint g_private_next = 0;
+
+/* A "forward" declaration of this structure */
+static GThreadFunctions g_thread_functions_for_glib_use_default;
+
+typedef struct _GThreadData GThreadData;
+struct _GThreadData
+{
+  GThreadFunc func;
+  gpointer data;
+  HANDLE thread;
+  gboolean joinable;
+};
+
+struct _GCond
+{
+  GPtrArray *array;
+  CRITICAL_SECTION lock;
+};
+
+static GMutex *
+g_mutex_new_win32_cs_impl (void)
+{
+  CRITICAL_SECTION *cs = g_new (CRITICAL_SECTION, 1);
+  gpointer *retval = g_new (gpointer, 1);
+
+  InitializeCriticalSection (cs);
+  *retval = cs;
+  return (GMutex *) retval;
+}
+
+static void
+g_mutex_free_win32_cs_impl (GMutex *mutex)
+{
+  gpointer *ptr = (gpointer *) mutex;
+  CRITICAL_SECTION *cs = (CRITICAL_SECTION *) *ptr;
+
+  DeleteCriticalSection (cs);
+  g_free (cs);
+  g_free (mutex);
+}
+
+/* NOTE: the functions g_mutex_lock and g_mutex_unlock may not use
+   functions from gmem.c and gmessages.c; */
+
+static void
+g_mutex_lock_win32_cs_impl (GMutex *mutex)
+{
+  EnterCriticalSection (*(CRITICAL_SECTION **)mutex);
+}
+
+static gboolean
+g_mutex_trylock_win32_cs_impl (GMutex * mutex)
+{
+  return try_enter_critical_section (*(CRITICAL_SECTION **)mutex);
+}
+
+static void
+g_mutex_unlock_win32_cs_impl (GMutex *mutex)
+{
+  LeaveCriticalSection (*(CRITICAL_SECTION **)mutex);
+}
+
+static GMutex *
+g_mutex_new_win32_impl (void)
+{
+  HANDLE handle;
+  HANDLE *retval;
+  win32_check_for_error (handle = CreateMutex (NULL, FALSE, NULL));
+  retval = g_new (HANDLE, 1);
+  *retval = handle;
+  return (GMutex *) retval;
+}
+
+static void
+g_mutex_free_win32_impl (GMutex *mutex)
+{
+  win32_check_for_error (CloseHandle (*(HANDLE *) mutex));
+  g_free (mutex);
+}
+
+/* NOTE: the functions g_mutex_lock and g_mutex_unlock may not use
+   functions from gmem.c and gmessages.c; */
+
+static void
+g_mutex_lock_win32_impl (GMutex *mutex)
+{
+  WaitForSingleObject (*(HANDLE *) mutex, INFINITE);
+}
+
+static gboolean
+g_mutex_trylock_win32_impl (GMutex * mutex)
+{
+  DWORD result;
+  win32_check_for_error (WAIT_FAILED !=
+			 (result = WaitForSingleObject (*(HANDLE *)mutex, 0)));
+  return result != WAIT_TIMEOUT;
+}
+
+static void
+g_mutex_unlock_win32_impl (GMutex *mutex)
+{
+  ReleaseMutex (*(HANDLE *) mutex);
+}
+
+static GCond *
+g_cond_new_win32_impl (void)
+{
+  GCond *retval = g_new (GCond, 1);
+
+  retval->array = g_ptr_array_new ();
+  InitializeCriticalSection (&retval->lock);
+
+  return retval;
+}
+
+static void
+g_cond_signal_win32_impl (GCond * cond)
+{
+  EnterCriticalSection (&cond->lock);
+
+  if (cond->array->len > 0)
+    {
+      SetEvent (g_ptr_array_index (cond->array, 0));
+      g_ptr_array_remove_index (cond->array, 0);
+    }
+
+  LeaveCriticalSection (&cond->lock);
+}
+
+static void
+g_cond_broadcast_win32_impl (GCond * cond)
+{
+  guint i;
+  EnterCriticalSection (&cond->lock);
+
+  for (i = 0; i < cond->array->len; i++)
+    SetEvent (g_ptr_array_index (cond->array, i));
+
+  g_ptr_array_set_size (cond->array, 0);
+  LeaveCriticalSection (&cond->lock);
+}
+
+static gboolean
+g_cond_wait_internal (GCond *cond,
+		      GMutex *entered_mutex,
+		      gulong milliseconds)
+{
+  gulong retval;
+  HANDLE event = TlsGetValue (g_cond_event_tls);
+
+  if (!event)
+    {
+      win32_check_for_error (event = CreateEvent (0, FALSE, FALSE, NULL));
+      TlsSetValue (g_cond_event_tls, event);
+    }
+
+  EnterCriticalSection (&cond->lock);
+
+  /* The event must not be signaled. Check this */
+  g_assert (WaitForSingleObject (event, 0) == WAIT_TIMEOUT);
+
+  g_ptr_array_add (cond->array, event);
+  LeaveCriticalSection (&cond->lock);
+
+  g_thread_functions_for_glib_use_default.mutex_unlock (entered_mutex);
+
+  win32_check_for_error (WAIT_FAILED !=
+			 (retval = WaitForSingleObject (event, milliseconds)));
+
+  g_thread_functions_for_glib_use_default.mutex_lock (entered_mutex);
+
+  if (retval == WAIT_TIMEOUT)
+    {
+      EnterCriticalSection (&cond->lock);
+      g_ptr_array_remove (cond->array, event);
+
+      /* In the meantime we could have been signaled, so we must again
+       * wait for the signal, this time with no timeout, to reset
+       * it. retval is set again to honour the late arrival of the
+       * signal */
+      win32_check_for_error (WAIT_FAILED !=
+			     (retval = WaitForSingleObject (event, 0)));
+
+      LeaveCriticalSection (&cond->lock);
+    }
+
+#ifndef G_DISABLE_ASSERT
+  EnterCriticalSection (&cond->lock);
+
+  /* Now event must not be inside the array, check this */
+  g_assert (g_ptr_array_remove (cond->array, event) == FALSE);
+
+  LeaveCriticalSection (&cond->lock);
+#endif /* !G_DISABLE_ASSERT */
+
+  return retval != WAIT_TIMEOUT;
+}
+
+static void
+g_cond_wait_win32_impl (GCond *cond,
+			GMutex *entered_mutex)
+{
+  g_return_if_fail (cond != NULL);
+  g_return_if_fail (entered_mutex != NULL);
+
+  g_cond_wait_internal (cond, entered_mutex, INFINITE);
+}
+
+static gboolean
+g_cond_timed_wait_win32_impl (GCond *cond,
+			      GMutex *entered_mutex,
+			      GTimeVal *abs_time)
+{
+  GTimeVal current_time;
+  gulong to_wait;
+
+  g_return_val_if_fail (cond != NULL, FALSE);
+  g_return_val_if_fail (entered_mutex != NULL, FALSE);
+
+  if (!abs_time)
+    to_wait = INFINITE;
+  else
+    {
+      g_get_current_time (&current_time);
+      if (abs_time->tv_sec < current_time.tv_sec ||
+	  (abs_time->tv_sec == current_time.tv_sec &&
+	   abs_time->tv_usec <= current_time.tv_usec))
+	to_wait = 0;
+      else
+	to_wait = (abs_time->tv_sec - current_time.tv_sec) * 1000 +
+	  (abs_time->tv_usec - current_time.tv_usec) / 1000;
+    }
+
+  return g_cond_wait_internal (cond, entered_mutex, to_wait);
+}
+
+static void
+g_cond_free_win32_impl (GCond * cond)
+{
+  DeleteCriticalSection (&cond->lock);
+  g_ptr_array_free (cond->array, TRUE);
+  g_free (cond);
+}
+
+static GPrivate *
+g_private_new_win32_impl (GDestroyNotify destructor)
+{
+  GPrivate *result;
+  EnterCriticalSection (&g_thread_global_spinlock);
+  if (g_private_next >= G_PRIVATE_MAX)
+    {
+      char buf[100];
+      sprintf (buf,
+	       "Too many GPrivate allocated. Their number is limited to %d.",
+	       G_PRIVATE_MAX);
+      MessageBox (NULL, buf, NULL, MB_ICONERROR|MB_SETFOREGROUND);
+      if (IsDebuggerPresent ())
+	G_BREAKPOINT ();
+      abort ();
+    }
+  g_private_destructors[g_private_next] = destructor;
+  result = GUINT_TO_POINTER (g_private_next);
+  g_private_next++;
+  LeaveCriticalSection (&g_thread_global_spinlock);
+
+  return result;
+}
+
+/* NOTE: the functions g_private_get and g_private_set may not use
+   functions from gmem.c and gmessages.c */
+
+static void
+g_private_set_win32_impl (GPrivate * private_key, gpointer value)
+{
+  gpointer* array = TlsGetValue (g_private_tls);
+  guint index = GPOINTER_TO_UINT (private_key);
+
+  if (index >= G_PRIVATE_MAX)
+      return;
+
+  if (!array)
+    {
+      array = (gpointer*) calloc (G_PRIVATE_MAX, sizeof (gpointer));
+      TlsSetValue (g_private_tls, array);
+    }
+
+  array[index] = value;
+}
+
+static gpointer
+g_private_get_win32_impl (GPrivate * private_key)
+{
+  gpointer* array = TlsGetValue (g_private_tls);
+  guint index = GPOINTER_TO_UINT (private_key);
+
+  if (index >= G_PRIVATE_MAX || !array)
+    return NULL;
+
+  return array[index];
+}
+
+static void
+g_thread_set_priority_win32_impl (gpointer thread, GThreadPriority priority)
+{
+  GThreadData *target = *(GThreadData **)thread;
+
+  g_return_if_fail (priority >= G_THREAD_PRIORITY_LOW);
+  g_return_if_fail (priority <= G_THREAD_PRIORITY_URGENT);
+
+  win32_check_for_error (SetThreadPriority (target->thread,
+					    g_thread_priority_map [priority]));
+}
+
+static void
+g_thread_self_win32_impl (gpointer thread)
+{
+  GThreadData *self = TlsGetValue (g_thread_self_tls);
+
+  if (!self)
+    {
+      /* This should only happen for the main thread! */
+      HANDLE handle = GetCurrentThread ();
+      HANDLE process = GetCurrentProcess ();
+      self = g_new (GThreadData, 1);
+      win32_check_for_error (DuplicateHandle (process, handle, process,
+					      &self->thread, 0, FALSE,
+					      DUPLICATE_SAME_ACCESS));
+      win32_check_for_error (TlsSetValue (g_thread_self_tls, self));
+      self->func = NULL;
+      self->data = NULL;
+      self->joinable = FALSE;
+    }
+
+  *(GThreadData **)thread = self;
+}
+
+static void
+g_thread_exit_win32_impl (void)
+{
+  GThreadData *self = TlsGetValue (g_thread_self_tls);
+  guint i, private_max;
+  gpointer *array = TlsGetValue (g_private_tls);
+  HANDLE event = TlsGetValue (g_cond_event_tls);
+
+  EnterCriticalSection (&g_thread_global_spinlock);
+  private_max = g_private_next;
+  LeaveCriticalSection (&g_thread_global_spinlock);
+
+  if (array)
+    {
+      gboolean some_data_non_null;
+
+      do {
+	some_data_non_null = FALSE;
+	for (i = 0; i < private_max; i++)
+	  {
+	    GDestroyNotify destructor = g_private_destructors[i];
+	    GDestroyNotify data = array[i];
+
+	    if (data)
+	      some_data_non_null = TRUE;
+
+	    array[i] = NULL;
+
+	    if (destructor && data)
+	      destructor (data);
+	  }
+      } while (some_data_non_null);
+
+      free (array);
+
+      win32_check_for_error (TlsSetValue (g_private_tls, NULL));
+    }
+
+  if (self)
+    {
+      if (!self->joinable)
+	{
+	  win32_check_for_error (CloseHandle (self->thread));
+	  g_free (self);
+	}
+      win32_check_for_error (TlsSetValue (g_thread_self_tls, NULL));
+    }
+
+  if (event)
+    {
+      CloseHandle (event);
+      win32_check_for_error (TlsSetValue (g_cond_event_tls, NULL));
+    }
+
+  _endthreadex (0);
+}
+
+static guint __stdcall
+g_thread_proxy (gpointer data)
+{
+  GThreadData *self = (GThreadData*) data;
+
+  win32_check_for_error (TlsSetValue (g_thread_self_tls, self));
+
+  self->func (self->data);
+
+  g_thread_exit_win32_impl ();
+
+  g_assert_not_reached ();
+
+  return 0;
+}
+
+static void
+g_thread_create_win32_impl (GThreadFunc func,
+			    gpointer data,
+			    gulong stack_size,
+			    gboolean joinable,
+			    gboolean bound,
+			    GThreadPriority priority,
+			    gpointer thread,
+			    GError **error)
+{
+  guint ignore;
+  GThreadData *retval;
+
+  g_return_if_fail (func);
+  g_return_if_fail (priority >= G_THREAD_PRIORITY_LOW);
+  g_return_if_fail (priority <= G_THREAD_PRIORITY_URGENT);
+
+  retval = g_new(GThreadData, 1);
+  retval->func = func;
+  retval->data = data;
+
+  retval->joinable = joinable;
+
+  retval->thread = (HANDLE) _beginthreadex (NULL, stack_size, g_thread_proxy,
+					    retval, 0, &ignore);
+
+  if (retval->thread == NULL)
+    {
+      gchar *win_error = g_win32_error_message (GetLastError ());
+      g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN,
+                   "Error creating thread: %s", win_error);
+      g_free (retval);
+      g_free (win_error);
+      return;
+    }
+
+  *(GThreadData **)thread = retval;
+
+  g_thread_set_priority_win32_impl (thread, priority);
+}
+
+static void
+g_thread_yield_win32_impl (void)
+{
+  Sleep(0);
+}
+
+static void
+g_thread_join_win32_impl (gpointer thread)
+{
+  GThreadData *target = *(GThreadData **)thread;
+
+  g_return_if_fail (target->joinable);
+
+  win32_check_for_error (WAIT_FAILED !=
+			 WaitForSingleObject (target->thread, INFINITE));
+
+  win32_check_for_error (CloseHandle (target->thread));
+  g_free (target);
+}
+
+static guint64
+g_thread_gettime_impl (void)
+{
+  guint64 v;
+
+  /* Returns 100s of nanoseconds since start of 1601 */
+  GetSystemTimeAsFileTime ((FILETIME *)&v);
+
+  /* Offset to Unix epoch */
+  v -= G_GINT64_CONSTANT (116444736000000000);
+  /* Convert to nanoseconds */
+  v *= 100;
+
+  return v;
+}
+
+static GThreadFunctions g_thread_functions_for_glib_use_default =
+{
+  g_mutex_new_win32_impl,           /* mutex */
+  g_mutex_lock_win32_impl,
+  g_mutex_trylock_win32_impl,
+  g_mutex_unlock_win32_impl,
+  g_mutex_free_win32_impl,
+  g_cond_new_win32_impl,            /* condition */
+  g_cond_signal_win32_impl,
+  g_cond_broadcast_win32_impl,
+  g_cond_wait_win32_impl,
+  g_cond_timed_wait_win32_impl,
+  g_cond_free_win32_impl,
+  g_private_new_win32_impl,         /* private thread data */
+  g_private_get_win32_impl,
+  g_private_set_win32_impl,
+  g_thread_create_win32_impl,       /* thread */
+  g_thread_yield_win32_impl,
+  g_thread_join_win32_impl,
+  g_thread_exit_win32_impl,
+  g_thread_set_priority_win32_impl,
+  g_thread_self_win32_impl,
+  NULL                             /* no equal function necessary */
+};
+
+#define HAVE_G_THREAD_IMPL_INIT
+static void
+g_thread_impl_init ()
+{
+  static gboolean beenhere = FALSE;
+  HMODULE kernel32;
+
+  if (beenhere)
+    return;
+
+  beenhere = TRUE;
+
+  win32_check_for_error (TLS_OUT_OF_INDEXES !=
+			 (g_thread_self_tls = TlsAlloc ()));
+  win32_check_for_error (TLS_OUT_OF_INDEXES !=
+			 (g_private_tls = TlsAlloc ()));
+  win32_check_for_error (TLS_OUT_OF_INDEXES !=
+			 (g_cond_event_tls = TlsAlloc ()));
+  InitializeCriticalSection (&g_thread_global_spinlock);
+
+  /* Here we are looking for TryEnterCriticalSection in KERNEL32.DLL,
+   * if it is found, we can use the in general faster critical
+   * sections instead of mutexes. See
+   * http://world.std.com/~jmhart/csmutx.htm for some discussion.
+   */
+  kernel32 = GetModuleHandle ("KERNEL32.DLL");
+  if (kernel32)
+    {
+      try_enter_critical_section = (GTryEnterCriticalSectionFunc)
+	GetProcAddress(kernel32, "TryEnterCriticalSection");
+
+      /* Even if TryEnterCriticalSection is found, it is not
+       * necessarily working..., we have to check it */
+      if (try_enter_critical_section &&
+	  try_enter_critical_section (&g_thread_global_spinlock))
+	{
+	  LeaveCriticalSection (&g_thread_global_spinlock);
+
+	  g_thread_functions_for_glib_use_default.mutex_new =
+	    g_mutex_new_win32_cs_impl;
+	  g_thread_functions_for_glib_use_default.mutex_lock =
+	    g_mutex_lock_win32_cs_impl;
+	  g_thread_functions_for_glib_use_default.mutex_trylock =
+	    g_mutex_trylock_win32_cs_impl;
+	  g_thread_functions_for_glib_use_default.mutex_unlock =
+	    g_mutex_unlock_win32_cs_impl;
+	  g_thread_functions_for_glib_use_default.mutex_free =
+	    g_mutex_free_win32_cs_impl;
+	}
+    }
+}
diff --git a/gthread/gthread.def b/gthread/gthread.def
new file mode 100644
index 0000000..200b043
--- /dev/null
+++ b/gthread/gthread.def
@@ -0,0 +1,3 @@
+EXPORTS
+	g_thread_init
+	g_thread_init_with_errorcheck_mutexes
diff --git a/gthread/gthread.rc.in b/gthread/gthread.rc.in
new file mode 100644
index 0000000..b70f871
--- /dev/null
+++ b/gthread/gthread.rc.in
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @GLIB_MAJOR_VERSION@,@GLIB_MINOR_VERSION@,@GLIB_MICRO_VERSION@,0
+  PRODUCTVERSION @GLIB_MAJOR_VERSION@,@GLIB_MINOR_VERSION@,@GLIB_MICRO_VERSION@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+	VALUE "CompanyName", "The GLib developer community"
+	VALUE "FileDescription", "GThread"
+	VALUE "FileVersion", "@GLIB_VERSION@.0"
+	VALUE "InternalName", "libgthread-2.0-@LT_CURRENT_MINUS_AGE@"
+	VALUE "LegalCopyright", "Copyright © 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald. Copyright © 1998 Sebastian Wilhelmi. Modified by the GLib Team and others 1997-2004."
+	VALUE "OriginalFilename", "libgthread-2.0-@LT_CURRENT_MINUS_AGE@.dll"
+	VALUE "ProductName", "GLib"
+	VALUE "ProductVersion", "@GLIB_VERSION@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/gthread/makefile.msc.in b/gthread/makefile.msc.in
new file mode 100644
index 0000000..226bf9c
--- /dev/null
+++ b/gthread/makefile.msc.in
@@ -0,0 +1,26 @@
+## Makefile for building the gthread dll with Microsoft C
+## Use: nmake -f makefile.msc install
+
+TOP = ..\..
+
+!INCLUDE ..\build\win32\make.msc
+
+################################################################
+
+INCLUDES = -FImsvc_recommended_pragmas.h -I .. -I . -I ..\glib
+DEFINES = -DHAVE_CONFIG_H -DG_LOG_DOMAIN=\"GThread\"
+all : \
+	libgthread-2.0-@LT_CURRENT_MINUS_AGE@.dll
+
+gthread_OBJECTS = \
+	gthread-impl.obj
+
+gthread-impl.obj : gthread-impl.c gthread-win32.c
+	$(CC) -c $(CFLAGS) gthread-impl.c
+
+gthread.res : gthread.rc
+	rc -DBUILDNUMBER=0 -r -fo gthread.res gthread.rc
+
+libgthread-2.0-@LT_CURRENT_MINUS_AGE@.dll : $(gthread_OBJECTS) gthread.def gthread.res
+	$(CC) $(CFLAGS) -LD -Fe$@ $(gthread_OBJECTS) gthread.res \
+	..\glib\glib-2.0.lib $(DEPCLIBS) user32.lib $(LDFLAGS) /implib:gthread-2.0.lib /def:gthread.def
diff --git a/m4macros/Makefile.am b/m4macros/Makefile.am
new file mode 100644
index 0000000..0284b4e
--- /dev/null
+++ b/m4macros/Makefile.am
@@ -0,0 +1,8 @@
+include $(top_srcdir)/Makefile.decl
+
+installed_m4= glib-2.0.m4 glib-gettext.m4
+
+EXTRA_DIST+=$(installed_m4)
+
+m4datadir = $(datadir)/aclocal
+m4data_DATA = $(installed_m4)
diff --git a/m4macros/glib-2.0.m4 b/m4macros/glib-2.0.m4
new file mode 100644
index 0000000..c620123
--- /dev/null
+++ b/m4macros/glib-2.0.m4
@@ -0,0 +1,212 @@
+# Configure paths for GLIB
+# Owen Taylor     1997-2001
+
+dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
+dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject,
+dnl gthread, or gio is specified in MODULES, pass to pkg-config
+dnl
+AC_DEFUN([AM_PATH_GLIB_2_0],
+[dnl 
+dnl Get the cflags and libraries from pkg-config
+dnl
+AC_ARG_ENABLE(glibtest, [  --disable-glibtest      do not try to compile and run a test GLIB program],
+		    , enable_glibtest=yes)
+
+  pkg_config_args=glib-2.0
+  for module in . $4
+  do
+      case "$module" in
+         gmodule) 
+             pkg_config_args="$pkg_config_args gmodule-2.0"
+         ;;
+         gmodule-no-export) 
+             pkg_config_args="$pkg_config_args gmodule-no-export-2.0"
+         ;;
+         gobject) 
+             pkg_config_args="$pkg_config_args gobject-2.0"
+         ;;
+         gthread) 
+             pkg_config_args="$pkg_config_args gthread-2.0"
+         ;;
+         gio*) 
+             pkg_config_args="$pkg_config_args $module-2.0"
+         ;;
+      esac
+  done
+
+  PKG_PROG_PKG_CONFIG([0.16])
+
+  no_glib=""
+
+  if test "x$PKG_CONFIG" = x ; then
+    no_glib=yes
+    PKG_CONFIG=no
+  fi
+
+  min_glib_version=ifelse([$1], ,2.0.0,$1)
+  AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
+
+  if test x$PKG_CONFIG != xno ; then
+    ## don't try to run the test against uninstalled libtool libs
+    if $PKG_CONFIG --uninstalled $pkg_config_args; then
+	  echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
+	  enable_glibtest=no
+    fi
+
+    if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
+	  :
+    else
+	  no_glib=yes
+    fi
+  fi
+
+  if test x"$no_glib" = x ; then
+    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+    GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
+    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+
+    GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
+    GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
+    glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test "x$enable_glibtest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $GLIB_CFLAGS"
+      LIBS="$GLIB_LIBS $LIBS"
+dnl
+dnl Now check if the installed GLIB is sufficiently new. (Also sanity
+dnl checks the results of pkg-config to some extent)
+dnl
+      rm -f conf.glibtest
+      AC_TRY_RUN([
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int 
+main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+  int ignored;
+
+  ignored = system ("touch conf.glibtest");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = g_strdup("$min_glib_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_glib_version");
+     exit(1);
+   }
+
+  if ((glib_major_version != $glib_config_major_version) ||
+      (glib_minor_version != $glib_config_minor_version) ||
+      (glib_micro_version != $glib_config_micro_version))
+    {
+      printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
+             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
+             glib_major_version, glib_minor_version, glib_micro_version);
+      printf ("*** was found! If pkg-config was correct, then it is best\n");
+      printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
+      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+      printf("*** required on your system.\n");
+      printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
+      printf("*** to point to the correct configuration files\n");
+    } 
+  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
+	   (glib_minor_version != GLIB_MINOR_VERSION) ||
+           (glib_micro_version != GLIB_MICRO_VERSION))
+    {
+      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
+	     GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+      printf("*** library (version %d.%d.%d)\n",
+	     glib_major_version, glib_minor_version, glib_micro_version);
+    }
+  else
+    {
+      if ((glib_major_version > major) ||
+        ((glib_major_version == major) && (glib_minor_version > minor)) ||
+        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
+      {
+        return 0;
+       }
+     else
+      {
+        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
+               glib_major_version, glib_minor_version, glib_micro_version);
+        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
+	       major, minor, micro);
+        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
+        printf("***\n");
+        printf("*** If you have already installed a sufficiently new version, this error\n");
+        printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
+        printf("*** being found. The easiest way to fix this is to remove the old version\n");
+        printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
+        printf("*** correct copy of pkg-config. (In this case, you will have to\n");
+        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+        printf("*** so that the correct libraries are found at run-time))\n");
+      }
+    }
+  return 1;
+}
+],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_glib" = x ; then
+     AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
+     ifelse([$2], , :, [$2])     
+  else
+     AC_MSG_RESULT(no)
+     if test "$PKG_CONFIG" = "no" ; then
+       echo "*** A new enough version of pkg-config was not found."
+       echo "*** See http://www.freedesktop.org/software/pkgconfig/"
+     else
+       if test -f conf.glibtest ; then
+        :
+       else
+          echo "*** Could not run GLIB test program, checking why..."
+          ac_save_CFLAGS="$CFLAGS"
+          ac_save_LIBS="$LIBS"
+          CFLAGS="$CFLAGS $GLIB_CFLAGS"
+          LIBS="$LIBS $GLIB_LIBS"
+          AC_TRY_LINK([
+#include <glib.h>
+#include <stdio.h>
+],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
+        [ echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
+          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+	  echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
+        [ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     GLIB_CFLAGS=""
+     GLIB_LIBS=""
+     GLIB_GENMARSHAL=""
+     GOBJECT_QUERY=""
+     GLIB_MKENUMS=""
+     ifelse([$3], , :, [$3])
+  fi
+  AC_SUBST(GLIB_CFLAGS)
+  AC_SUBST(GLIB_LIBS)
+  AC_SUBST(GLIB_GENMARSHAL)
+  AC_SUBST(GOBJECT_QUERY)
+  AC_SUBST(GLIB_MKENUMS)
+  rm -f conf.glibtest
+])
diff --git a/m4macros/glib-gettext.m4 b/m4macros/glib-gettext.m4
new file mode 100644
index 0000000..68b08b3
--- /dev/null
+++ b/m4macros/glib-gettext.m4
@@ -0,0 +1,432 @@
+# Copyright (C) 1995-2002 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003,2004 Red Hat, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+#
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995, 1996
+#
+# Modified to never use included libintl. 
+# Owen Taylor <otaylor@redhat.com>, 12/15/1998
+#
+# Major rework to remove unused code
+# Owen Taylor <otaylor@redhat.com>, 12/11/2002
+#
+# Added better handling of ALL_LINGUAS from GNU gettext version 
+# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
+#
+# Modified to require ngettext
+# Matthias Clasen <mclasen@redhat.com> 08/06/2004
+#
+# We need this here as well, since someone might use autoconf-2.5x
+# to configure GLib then an older version to configure a package
+# using AM_GLIB_GNU_GETTEXT
+AC_PREREQ(2.53)
+
+dnl
+dnl We go to great lengths to make sure that aclocal won't 
+dnl try to pull in the installed version of these macros
+dnl when running aclocal in the glib directory.
+dnl
+m4_copy([AC_DEFUN],[glib_DEFUN])
+m4_copy([AC_REQUIRE],[glib_REQUIRE])
+dnl
+dnl At the end, if we're not within glib, we'll define the public
+dnl definitions in terms of our private definitions.
+dnl
+
+# GLIB_LC_MESSAGES
+#--------------------
+glib_DEFUN([GLIB_LC_MESSAGES],
+  [AC_CHECK_HEADERS([locale.h])
+    if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+# GLIB_PATH_PROG_WITH_TEST
+#----------------------------
+dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+	ac_cv_path_$1="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# GLIB_WITH_NLS
+#-----------------
+glib_DEFUN([GLIB_WITH_NLS],
+  dnl NLS is obligatory
+  [USE_NLS=yes
+    AC_SUBST(USE_NLS)
+
+    gt_cv_have_gettext=no
+
+    CATOBJEXT=NONE
+    XGETTEXT=:
+    INTLLIBS=
+
+    AC_CHECK_HEADER(libintl.h,
+     [gt_cv_func_dgettext_libintl="no"
+      libintl_extra_libs=""
+
+      #
+      # First check in libc
+      #
+      AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc,
+        [AC_TRY_LINK([
+#include <libintl.h>
+],
+         [return !ngettext ("","", 1)],
+	  gt_cv_func_ngettext_libc=yes,
+          gt_cv_func_ngettext_libc=no)
+        ])
+  
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+	      AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
+        	[AC_TRY_LINK([
+#include <libintl.h>
+],
+	          [return !dgettext ("","")],
+		  gt_cv_func_dgettext_libc=yes,
+	          gt_cv_func_dgettext_libc=no)
+        	])
+      fi
+  
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+        AC_CHECK_FUNCS(bind_textdomain_codeset)
+      fi
+
+      #
+      # If we don't have everything we want, check in libintl
+      #
+      if test "$gt_cv_func_dgettext_libc" != "yes" \
+	 || test "$gt_cv_func_ngettext_libc" != "yes" \
+         || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
+        
+        AC_CHECK_LIB(intl, bindtextdomain,
+	    [AC_CHECK_LIB(intl, ngettext,
+		    [AC_CHECK_LIB(intl, dgettext,
+			          gt_cv_func_dgettext_libintl=yes)])])
+
+	if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
+	  AC_MSG_CHECKING([if -liconv is needed to use gettext])
+	  AC_MSG_RESULT([])
+  	  AC_CHECK_LIB(intl, ngettext,
+          	[AC_CHECK_LIB(intl, dcgettext,
+		       [gt_cv_func_dgettext_libintl=yes
+			libintl_extra_libs=-liconv],
+			:,-liconv)],
+		:,-liconv)
+        fi
+
+        #
+        # If we found libintl, then check in it for bind_textdomain_codeset();
+        # we'll prefer libc if neither have bind_textdomain_codeset(),
+        # and both have dgettext and ngettext
+        #
+        if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS -lintl $libintl_extra_libs"
+          unset ac_cv_func_bind_textdomain_codeset
+          AC_CHECK_FUNCS(bind_textdomain_codeset)
+          LIBS="$glib_save_LIBS"
+
+          if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
+            gt_cv_func_dgettext_libc=no
+          else
+            if test "$gt_cv_func_dgettext_libc" = "yes" \
+		&& test "$gt_cv_func_ngettext_libc" = "yes"; then
+              gt_cv_func_dgettext_libintl=no
+            fi
+          fi
+        fi
+      fi
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" \
+	|| test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        gt_cv_have_gettext=yes
+      fi
+  
+      if test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        INTLLIBS="-lintl $libintl_extra_libs"
+      fi
+  
+      if test "$gt_cv_have_gettext" = "yes"; then
+	AC_DEFINE(HAVE_GETTEXT,1,
+	  [Define if the GNU gettext() function is already present or preinstalled.])
+	GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+	  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+	if test "$MSGFMT" != "no"; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS $INTLLIBS"
+	  AC_CHECK_FUNCS(dcgettext)
+	  MSGFMT_OPTS=
+	  AC_MSG_CHECKING([if msgfmt accepts -c])
+	  GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: test 1.0\n"
+"PO-Revision-Date: 2007-02-15 12:01+0100\n"
+"Last-Translator: test <foo@bar.xx>\n"
+"Language-Team: C <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
+	  AC_SUBST(MSGFMT_OPTS)
+	  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+	  GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+	    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+	  AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
+			 return _nl_msg_cat_cntr],
+	    [CATOBJEXT=.gmo 
+             DATADIRNAME=share],
+	    [case $host in
+	    *-*-solaris*)
+	    dnl On Solaris, if bind_textdomain_codeset is in libc,
+	    dnl GNU format message catalog is always supported,
+            dnl since both are added to the libc all together.
+	    dnl Hence, we'd like to go with DATADIRNAME=share and
+	    dnl and CATOBJEXT=.gmo in this case.
+            AC_CHECK_FUNC(bind_textdomain_codeset,
+	      [CATOBJEXT=.gmo 
+               DATADIRNAME=share],
+	      [CATOBJEXT=.mo
+               DATADIRNAME=lib])
+	    ;;
+	    *)
+	    CATOBJEXT=.mo
+            DATADIRNAME=lib
+	    ;;
+	    esac])
+          LIBS="$glib_save_LIBS"
+	  INSTOBJEXT=.mo
+	else
+	  gt_cv_have_gettext=no
+	fi
+      fi
+    ])
+
+    if test "$gt_cv_have_gettext" = "yes" ; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [always defined to indicate that i18n is enabled])
+    fi
+
+    dnl Test whether we really found GNU xgettext.
+    if test "$XGETTEXT" != ":"; then
+      dnl If it is not GNU xgettext we define it as : so that the
+      dnl Makefiles still can work.
+      if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+        : ;
+      else
+        AC_MSG_RESULT(
+	  [found xgettext program is not GNU xgettext; ignore it])
+        XGETTEXT=":"
+      fi
+    fi
+
+    # We need to process the po/ directory.
+    POSUB=po
+
+    AC_OUTPUT_COMMANDS(
+      [case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac])
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(DATADIRNAME)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INSTOBJEXT)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(PO_IN_DATADIR_TRUE)
+    AC_SUBST(PO_IN_DATADIR_FALSE)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+  ])
+
+# AM_GLIB_GNU_GETTEXT
+# -------------------
+# Do checks necessary for use of gettext. If a suitable implementation 
+# of gettext is found in either in libintl or in the C library,
+# it will set INTLLIBS to the libraries needed for use of gettext
+# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
+# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
+# on various variables needed by the Makefile.in.in installed by 
+# glib-gettextize.
+dnl
+glib_DEFUN([GLIB_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   
+   GLIB_LC_MESSAGES
+   GLIB_WITH_NLS
+
+   if test "$gt_cv_have_gettext" = "yes"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
+           desiredlanguages="$LINGUAS"
+         else
+           desiredlanguages="$ALL_LINGUAS"
+         fi
+         for desiredlang in $desiredlanguages; do
+ 	   # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl Generate list of files to be processed by xgettext which will
+   dnl be included in po/Makefile.
+   test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+	< $srcdir/po/POTFILES.in > po/POTFILES
+  ])
+
+# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
+# -------------------------------
+# Define VARIABLE to the location where catalog files will
+# be installed by po/Makefile.
+glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
+[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
+glib_save_prefix="$prefix"
+glib_save_exec_prefix="$exec_prefix"
+glib_save_datarootdir="$datarootdir"
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+datarootdir=`eval echo "${datarootdir}"`
+if test "x$CATOBJEXT" = "x.mo" ; then
+  localedir=`eval echo "${libdir}/locale"`
+else
+  localedir=`eval echo "${datadir}/locale"`
+fi
+prefix="$glib_save_prefix"
+exec_prefix="$glib_save_exec_prefix"
+datarootdir="$glib_save_datarootdir"
+AC_DEFINE_UNQUOTED($1, "$localedir",
+  [Define the location where the catalogs will be installed])
+])
+
+dnl
+dnl Now the definitions that aclocal will find
+dnl
+ifdef(glib_configure_in,[],[
+AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
+AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
+])dnl
+
+# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL])
+# 
+# Create a temporary file with TEST-FILE as its contents and pass the
+# file name to PROGRAM.  Perform ACTION-IF-PASS if PROGRAM exits with
+# 0 and perform ACTION-IF-FAIL for any other exit status.
+AC_DEFUN([GLIB_RUN_PROG],
+[cat >conftest.foo <<_ACEOF
+$2
+_ACEOF
+if AC_RUN_LOG([$1 conftest.foo]); then
+  m4_ifval([$3], [$3], [:])
+m4_ifvaln([$4], [else $4])dnl
+echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
+sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
+fi])
+
diff --git a/makefile.msc b/makefile.msc
new file mode 100644
index 0000000..52e07f6
--- /dev/null
+++ b/makefile.msc
@@ -0,0 +1,28 @@
+## Makefile for building the GLib dlls with Microsoft C
+## Use: nmake -f makefile.msc
+
+PARTS = glib gmodule gthread gobject gio tests
+
+all : \
+	config.h \
+	glibconfig.h \
+	sub-all
+
+sub-all: 
+	for %d in ($(PARTS)) do nmake -nologo -f makefile.msc sub-one THIS=%d TARGET=all
+
+clean : sub-clean
+
+sub-clean:
+	for %d in ($(PARTS)) do nmake -nologo -f makefile.msc sub-one THIS=%d TARGET=clean
+
+sub-one:
+	@cd $(THIS)
+	@nmake -nologo -f makefile.msc $(TARGET)
+	@cd ..
+
+config.h: config.h.win32
+	copy config.h.win32 config.h
+
+glibconfig.h: glibconfig.h.win32
+	copy glibconfig.h.win32 glibconfig.h
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..d2d5f21
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+  	errstatus=$lasterr
+      else
+  	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+    	  lasterr=""
+  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+  	  if test ! -z "$lasterr"; then
+  	    errstatus=$lasterr
+  	  fi
+  	fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here
diff --git a/msvc_recommended_pragmas.h b/msvc_recommended_pragmas.h
new file mode 100644
index 0000000..cb9370c
--- /dev/null
+++ b/msvc_recommended_pragmas.h
@@ -0,0 +1,31 @@
+#ifndef _MSC_VER
+#pragma error "This header is for Microsoft VC only."
+#endif /* _MSC_VER */
+
+/* Make MSVC more pedantic, this is a recommended pragma list
+ * from _Win32_Programming_ by Rector and Newcomer.
+ */
+#pragma warning(error:4002) /* too many actual parameters for macro */
+#pragma warning(error:4003) /* not enough actual parameters for macro */
+#pragma warning(1:4010)     /* single-line comment contains line-continuation character */
+#pragma warning(error:4013) /* 'function' undefined; assuming extern returning int */
+#pragma warning(1:4016)     /* no function return type; using int as default */
+#pragma warning(error:4020) /* too many actual parameters */
+#pragma warning(error:4021) /* too few actual parameters */
+#pragma warning(error:4027) /* function declared without formal parameter list */
+#pragma warning(error:4029) /* declared formal parameter list different from definition */
+#pragma warning(error:4033) /* 'function' must return a value */
+#pragma warning(error:4035) /* 'function' : no return value */
+#pragma warning(error:4045) /* array bounds overflow */
+#pragma warning(error:4047) /* different levels of indirection */
+#pragma warning(error:4049) /* terminating line number emission */
+#pragma warning(error:4053) /* An expression of type void was used as an operand */
+#pragma warning(error:4071) /* no function prototype given */
+#pragma warning(disable:4101) /* unreferenced local variable */
+#pragma warning(error:4150)
+
+#pragma warning(disable:4244)	/* No possible loss of data warnings */
+#pragma warning(disable:4305)   /* No truncation from int to char warnings */
+
+/* work around Microsoft's premature attempt to deprecate the C-Library */
+#pragma warning(disable:4996)   /* This function or variable may be unsafe. */
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644
index 0000000..68c54d2
--- /dev/null
+++ b/po/.gitignore
@@ -0,0 +1,2 @@
+POTFILES
+*.gmo
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 0000000..408bee6
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,4771 @@
+=== ChangeLog discontinued ===
+
+	With the move to git, GLib is switching from a ChangeLog file
+	to relying on commit messages to provide change history. Please
+	see README.commits for guidance on the expected message format.
+
+2009-03-30  Manoj Kumar Giri  <mgiri@redhat.com>
+
+	* or.po: Updated Oriya Translation.
+
+2009-03-26  Gintautas Miliauskas  <gintautas@miliauskas.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2009-03-26  Shankar Prasad  <svenkate@redhat.com>
+
+        * kn.po: Updated Kannada translations.
+
+2009-03-21  Nickolay V. Shmyrev <nshmyrev@yandex.ru>
+
+	* ru.po: Updated Russian translation.
+
+2009-03-18  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated Greek Translation by Fotis Tsamis.
+
+2009-03-18  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic translation by Anas Afif Emad.
+
+2009-03-18  Amitakhya Phukan <amitakhya@svn.gnome.org>
+
+	* as.po: Updated Assamese translations.
+
+2009-03-18  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+	
+2009-03-17  Tomasz Dominikowski  <tdominikowski@aviary.pl>
+
+	* pl.po: Updated Polish translation
+
+2009-03-17  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2009-03-17  Ani Peter <apeter@redhat.com>
+
+	* ml.po: Updated Malayalam Translations
+
+2009-03-17  Ignacio Casal Quinteiro  <icq@gnome.org>
+
+	 * gl.po: Updated Galician translation
+
+2009-03-17  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2009-03-17  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Update Japanese translation.
+
+2009-03-17  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2009-03-17  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2009-03-17  Claude Paroz  <claude@2xlibre.net>
+
+	* fr.po: Updated French translation.
+
+2009-03-17  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2009-03-16  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2009-03-16  Milo Casagrande  <milo@ubuntu.com>
+
+	* it.po: Updated Italian translation.
+
+2009-03-16 Og Maciel <ogmaciel@gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation by
+	Vladimir Melo.
+
+2009-03-16  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2009-03-16  Philip Withnall  <philip@tecnocode.co.uk>
+
+	* en_GB.po: Updated British English translation.
+
+2009-03-14  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated Greek Translation by Fotis Tsamis.
+
+2009-03-16  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2009-03-16  Shankar Prasad  <svenkate@redhat.com>
+
+        * kn.po: Updated Kannada translations.
+
+2009-03-15  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2009-03-15 felix@redhat.com>
+
+	* ta.po:  Tamil Translation updated
+
+2009-03-14  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
+
+	* ru.po: Updated Russian translation by Yuriy Penkin.
+
+2009-03-14  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated Greek Translation by Jennie Petoumenou.
+
+2009-03-14 Kenneth Nielsen <k.nielsen81@gmail.com>
+
+	* da.po: Updated Danish translation by Ask H. Larsen
+
+2009-03-13  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	 * gl.po: Updated Galician translation
+
+2009-03-13  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.20.0 ===
+
+2009-03-11  Ani Peter <apeter@redhat.com>
+
+	* ml.po: Updated Malayalam Translations
+
+2009-03-10  Amitakhya Phukan  <amitakhya@svn.gnome.org>
+
+	* as.po: Updated Assamese translations.
+
+2009-03-09  Sandeep Shedmake  <sshedmak@redhat.com>
+
+	* mr.po: Updated Marathi Translations.
+
+2009-03-09  Sandeep Shedmake  <sshedmak@redhat.com>
+
+	* mr.po: Updated Marathi Translations.
+
+2009-03-09  Runa Bhattacharjee  <runab@redhat.com>
+
+	* bn_IN.po: Updated Bengali India Translation
+
+2009-03-08  Petr Kovar  <pknbe@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2009-03-05  Gintautas Miliauskas  <gintas@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2009-03-05  Rajesh Ranjan <rrnajan@redhat.com>
+
+	* hi.po: Updated Hindi Translation.
+	
+2009-03-04  Wadim Dziedzic  <wdziedzic@aviary.pl>
+
+	* pl.po: Updated Polish translation
+
+2009-03-04  Mișu Moldovan  <dumol@gnome.org>
+
+	* ro.po: Updated Romanian Translation.
+
+2009-03-04  Manoj Kumar Giri  <mgiri@redhat.com>
+
+	* or.po: Updated Oriya Translation.
+
+2009-03-03  Krishnababu K <kkrothap@redhat.com>
+
+	* te.po: Updated Telugu Translation
+
+2009-03-02  Milo Casagrande <milo@ubuntu.com>
+
+	* it.po: Updated Italian translation by Luca Ferretti
+
+2009-03-03  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.10 ===
+
+2009-03-02  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.9 ===
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.in.in: Don't use obsolete calling convention for
+	config.status.
+
+2009-03-01  Matthias Clasen  <mclasen@redhat.com>
+
+	Bug 573527 – Wrong shell to run config.status in Makefile.in.in
+
+	* Makefile.in.in: Don't hardcode /bin/sh as shell.
+	Reported by Loïc Minier
+
+2009-02-28  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+	
+2009-02-28  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2009-02-27  Claude Paroz  <claude@2xlibre.net>
+
+	* fr.po: Updated French translation.
+
+2009-02-27  Rajesh Ranjan  <rranjan@redhat.com>
+
+	* mai.po: updated for maithili Translation.
+	
+2009-02-26  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2009-02-26  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2009-02-25  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+        * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+        * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2009-02-25  Sweta Kothari  <swkothar@redhat.com>
+
+	* gu.po: Committed Gujarati Translation.
+
+2009-02-25  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2009-02-24  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2009-02-23  Philip Withnall  <philip@tecnocode.co.uk>
+
+	* en_GB.po: Updated British English translation.
+
+2009-02-23  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2009-02-23  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2009-02-20  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2009-02-19  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2009-02-19  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2009-02-19  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2009-02-19  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2009-02-19  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2009-02-19  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2009-02-18  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2009-02-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.8 ===
+
+2009-02-17  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Fixed wrong translations.
+
+2009-02-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.7 ===
+
+2009-02-14  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2009-02-13  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2009-02-10  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2009-02-07   Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2009-02-06  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2009-02-06  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2009-02-05  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2009-02-04  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* nl.po: Dutch translation updated by Wouter Bolsterlee.
+
+2009-02-04  Sweta Kothari  <swkothar@redhat.com>
+
+	* gu.po: Committed Gujarati Translation.
+
+2009-02-03  Sweta Kothari  <swkothar@redhat.com>
+
+	* gu.po: Committed Gujarati Translation.
+
+2009-02-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.6 ===
+
+2009-02-01  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2009-01-30  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2009-01-30  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+	* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2009-01-28  Manoj Kumar Giri <mgiri@redhat.com>
+
+	* or.po: Updated Oriya Translation
+
+2009-01-27  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2009-01-26  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2009-01-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.5 ===
+
+2009-01-17  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2009-01-16  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2009-01-14  Luca Ferretti  <elle.uca@libero.it>
+
+	* POTFILES.in: Added missing gio/gemblemedicon.c
+
+2009-01-08  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2009-01-06  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2009-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.4 ===
+
+2009-01-05  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2009-01-04  Leonardo Ferreira Fontenelle  <leonardof@gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation.
+
+2009-01-04  甘露(Gan Lu) <rhythm.gan@gmail.com>
+
+	* zh_CN.po: Updated Chinese Simplified translation by
+	Deng Xiyue <manphiz@gmail.com>.
+
+2008-12-15  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-12-15  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-12-15  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.3 ===
+
+2008-12-10  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-12-09  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-12-08  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-12-06  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.2 ===
+
+2008-12-01  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.19.1 ===
+
+2008-11-13 Maxim Dziumanenko <dziumanenko@gmail.com>
+
+	* uk.po: Update Ukrainian translation.
+
+2008-11-08  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-10-16  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.19.0 ===
+
+2008-10-04 Og Maciel <ogmaciel@gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation by Vladimir Melo.
+
+2008-09-22 Kenneth Nielsen <k.nielsen81@gmail.com>
+
+	* da.po: Updated Danish translation by Kenneth Nielsen
+
+2008-09-22 Kenneth Nielsen <k.nielsen81@gmail.com>
+
+	* da.po: Updated Danish translation by Kenneth Nielsen
+
+2008-09-21  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
+
+	* ru.po: Updated Russian translation.
+
+2008-09-21  Wadim Dziedzic  <wdziedzic@aviary.pl>
+
+	* pl.po: Updated Polish translation
+
+2008-09-19  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@gnome.ro>
+
+2008-09-18  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Anas Afif Emad.
+
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.1 ===
+
+2008-09-17  Krishnababu K  <kkrothap@redhat.com>
+
+	* te.po: Updated Telugu Translation.
+
+2008-09-15  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-09-13  Baris Cicek  <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish Translation.
+
+2008-09-11  Rajesh Ranjan <rajeshkajha@yahoo.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2008-09-09  Manoj Kumar Giri  <mgiri@redhat.com>
+
+	* or.po: Updated Oriya Translation
+
+2008-09-09  Runa Bhattacharjee  <runab@redhat.com>
+
+	* bn_IN.po: Updated Bengali India Translation
+
+2008-09-08  Robert Sedak  <robert.sedak@sk.t-com.hr>
+
+	* hr.po: Updated Croatian translation.
+
+2008-09-04  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2008-09-03  Philip Withnall  <philip@tecnocode.co.uk>
+
+	* en_GB.po: Updated British English translation.
+
+2008-09-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.18.0 ===
+
+2008-09-02  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2008-09-02  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* nl.po: Updated Dutch translation by Tino Meinen.
+
+2008-08-30  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2008-08-28  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2008-08-28  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2008-08-28  Rajesh Ranjan  <rajeshkajha@yahoo.com>
+
+	* mai.po: Added Maithili translation.
+
+2008-08-27  Petr Kovar  <pknbe@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2008-08-25  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-08-25  Goran Rakic  <grakic@devbase.net>
+
+	* LINGUAS, sr@latin.po, sr@Latn.po: Conversion from sr@Latn to sr@latin.
+
+2008-08-24  Gintautas Miliauskas  <gintas@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2008-08-24 Maxim Dziumanenko <dziumanenko@gmail.com>
+
+	* uk.po: Update Ukrainian translation.
+
+2008-08-23  Priit Laes  <plaes at svn dot gnome dot org>
+
+	* et.po: Translation updated by Ivar Smolin
+
+2008-08-23  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-08-23  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2008-08-22  Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
+
+	* vi.po: Updated Vietnamese translation
+
+2008-08-21  Robert-André Mauchin  <zebob.m@pengzone.org>
+
+	* fr.po: Updated French translation.
+
+2008-08-19  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-08-18  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-08-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.7 ===
+
+=======
+2008-08-18  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian Translation.
+
+2008-08-15  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* POTFILES.in: Add missing file.
+	* nb.po: Update.
+
+2008-08-15  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-08-14  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2008-08-13  Leonardo Ferreira Fontenelle  <leonardof@gnome.org>
+
+	* pt_BR.po: Brazilian Portuguese translation updated by Henrique P.
+	Machado and Leonardo F. Fontenelle.
+
+2008-08-13  Sandeep Shedmake  <sshedmak@redhat.com>
+
+	* mr.po: Updated Marathi translations
+
+2008-08-12  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-08-12  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-08-12  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2008-08-10  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-08-10  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2008-08-09  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2008-08-08  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician translation
+
+2008-08-6  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-08-05  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+	* POTFILES.in: Added missing file.
+
+2008-08-05  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-08-05  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-08-04  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.6 ===
+
+2008-08-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.5 ===
+
+2008-08-04  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2008-07-31  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2008-07-29  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2008-07-29  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-07-28  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-07-26  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2008-07-23  Gil Forcada  <gforcada@gnome.org>
+
+	* ps.po: Minor update to Pashto by Zabeeh Khan.
+
+2008-07-23  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+wpV862008-07-22  Priit Laes  <plaes at svn dot gnome dot org>
+
+	* et.po: Translation updated by Ivar Smolin
+
+2008-07-21  Matthias Clasen  <mclasen2redhat.com>
+
+	* === Released 2.17.4 ===
+
+2008-07-20  Leonardo Ferreira Fontenelle  <leonardof@gnome.org>
+
+	* pt_BR.po: Brazilian Portuguese translation improvements.
+
+2008-07-20  Andre Klapper  <a9016009@gmx.de>
+
+	* de.po: Updated German translation
+
+2008-07-16  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian Translation.
+
+2008-07-15  Runa Bhattacharjee <runabh@gmail.com>
+
+	* ps.po: Added Pashto (ps) Translations by Zabeeh Khan.
+	* LINGUAS: Added Pashto (ps) to the List of Languages
+
+2008-07-14  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+	* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2008-07-13  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+	* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2008-07-10  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-07-04  Priit Laes  <plaes at svn dot gnome dot org>
+
+	* et.po: Translation updated by Ivar Smolin
+
+2008-07-03  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation, fix #540762.
+
+2008-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.3 ===
+
+2008-07-02  Yannig Marchegay <yannig@marchegay.org>
+
+	* oc.po: Updated Occitan translation.
+
+2008-06-23  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.2 ===
+
+2008-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.1 ===
+
+2008-06-11  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-06-10  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-06-07  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-05-31  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-05-31  Philipp Kerling  <k.philipp@gmail.com>
+
+	* de.po: Updated German translation.
+
+2008-05-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.17.0 ===
+
+2008-05-22  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-05-08  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2008-04-23  Yannig Marchegay  <yannig@marchegay.org>
+
+	* oc.po: Updated Occitan translation.
+
+2008-04-22  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2008-04-20  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-04-19  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-04-15  Philip Withnall  <pwithnall@svn.gnome.org>
+
+	* en_GB.po: Fixed British English translation.
+
+2008-04-02  Petr Kovar  <pknbe@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2008-03-23  Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
+
+	* vi.po: Update Vietnamese translation
+
+2008-03-20  Priit Laes  <plaes at svn dot gnome dot org>
+
+	* et.po: Translation updated by Ivar Smolin
+
+2008-03-18  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian Translation.
+
+2008-03-18  Simos Xenitellis  <simos@gnome.org>
+
+	* el.po: Updated Greek translation by Giannis Katsampiris.
+
+2008-03-18  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian Translation.
+
+2008-03-16  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated
+
+2008-03-15  Yuri Kozlov <kozlov.y@gmail.com>
+
+	* ru.po: Updated Russian translation.
+
+2008-03-15  Marcel Telka  <marcel@telka.sk>
+
+	* sk.po: Updated Slovak translation.
+
+2008-03-12  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+	* nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2008-03-12  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2008-03-11  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-03-11  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2008-03-11  Philip Withnall  <pwithnall@svn.gnome.org>
+
+	* en_GB.po: Updated British English translation.
+
+2008-03-11 Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish translation
+
+2008-03-11  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2008-03-11  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2008-03-11  Gintautas Miliauskas  <gintas@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2008-03-11  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2008-03-11  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.1 ===
+
+2008-03-10  Kenneth Nielsen  <k.nielsen81@gmail.com>
+
+	* da.po: Updated Danish translation
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.16.0 ===
+
+2008-03-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* uk.po: Mark a string as fuzzy to fix the build
+
+2008-03-10  Runa Bhattacharjee <runab@fedoraproject.org>
+
+	* bn_IN.po: Updated Bengali India Translation
+
+2008-03-09  Marcel Telka  <marcel@telka.sk>
+
+	* sk.po: Updated Slovak translation.
+
+2008-03-09  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-03-09  Yuri Kozlov  <kozlov.y@gmail.com>
+
+	* ru.po: Updated Russian translation.
+
+2008-03-07  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation
+
+2008-03-07  Gintautas Miliauskas  <gintas@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2008-03-05  Rahul Bhalerao <b.rahul.pm@gmail.com>
+
+	* mr.po: Updated Marathi Translations by Sandeep Shedmake.
+
+2008-03-05  Priit Laes  <plaes at svn dot gnome dot org>
+
+	* et.po: Translation updated by Ivar Smolin
+
+2008-03-05  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2008-03-04  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2008-03-04  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-03-03  Petr Kovar  <pknbe@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2008-03-03  Ani Peter <peter.ani@gmail.com>
+
+	* ml.po: Updated Malayalam Translation
+
+2008-03-03  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2008-03-02  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-03-02  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-02-29  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Estonian translation update by Ivar Smolin.
+
+2008-02-28  Stéphane Raimbault  <stephane.raimbault@gmail.com>
+
+	* fr.po: Updated French translation by Claude Paroz.
+
+2008-02-28  Amitakhya Phukan <amitakhya@svn.gnome.org>
+
+	* as.po: Updated Assamese translations.
+
+2008-02-26  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-02-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.6 ===
+
+2008-02-25  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2008-02-25  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-02-24  Åsmund Skjæveland  <aasmunds@ulrik.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2008-02-24  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Fix typo reported by Akom C.
+
+2008-02-23  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated
+
+2008-02-23  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Estonian translation update by Ivar Smolin.
+
+2008-02-22  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-02-22  Jonh Wendell  <jwendell@gnome.org>
+
+	* pt_BR.po: Brazilian Portuguese translation updated by Og Maciel.
+
+2008-02-22  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2008-02-19  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2008-02-18  Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
+
+	* vi.po: Updated Vietnamese translation
+
+2008-02-18  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2008-02-17  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-02-17  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-02-17  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2008-02-17  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated British English translation
+
+2008-02-16  Ihar Hrachyshka <booxter@lacinka.org>
+
+	* be@latin.po: Updated Belarusian Latin translation.
+
+2008-02-14  Runa Bhattacharjee <runabh@gmail.com>
+
+	* kn.po: Updated Kannada Translations by Shankar Prasad.
+
+2008-02-14  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2008-02-14  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2008-02-13  Ilkka Tuohela <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2008-02-11  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.15.5 ===
+
+2008-02-08  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2008-02-07  Gil Forcada  <gforcada@gnome.org>
+
+	* ca.po: Updated Catalan translation.
+
+2008-02-07  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2008-02-6  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-02-06  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-02-04  Jovan Naumovski  <jovan@lugola.net>
+
+	* mk.po: Updated Macedonian translation.
+
+2008-02-03  Leonardo Ferreira Fontenelle  <leonardof@svn.gnome.org>
+
+	* pt_BR.po: Brazilian Portuguese translation updated by Vladimir Melo
+	and Luiz Armesto.
+
+2008-02-01  Yannig Marchegay <yannig@marchegay.org>
+
+	* oc.po: Updated Occitan translation.
+
+2008-02-01  Runa Bhattacharjee <runabh@gmail.com>
+
+	* kn.po: Updated Kannada Translations by Shankar Prasad.
+
+2008-02-01  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-01-31  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Abou Manal.
+
+2008-01-30  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2008-01-30  Yannig Marchegay <yannig@marchegay.org>
+
+	* oc.po: Updated Occitan translation.
+
+2008-01-30  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2008-01-29  Yannig Marchegay <yannig@marchegay.org>
+
+	* oc.po: Updated Occitan translation.
+
+2008-01-29  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Abou Manal.
+
+2008-01-29  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-01-29  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-01-28  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.4 ===
+
+2008-01-28  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-01-27  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-01-26  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-01-26  Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
+
+	* be.po: Updated Belarusian translation.
+
+2008-01-25  Petr Kovar <pknbe@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2008-01-25  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-01-25  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2008-01-24  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2008-01-24  Vasiliy Faronov <qvvx@yandex.ru>
+
+	* ru.po: Updated Russian translation.
+
+2008-01-23  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2008-01-21  Stéphane Raimbault  <stephane.raimbault@gmail.com>
+
+	* fr.po: Updated French translation by Claude Paroz.
+
+2008-01-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.3 ===
+
+2008-01-21  Tor Lillqvist  <tml@novell.com>
+
+	* el.po: Fix syntax error.
+
+2007-01-21  Kostas Papadimas  <pkst@gnome.org>
+
+	* el.po: Updated Greek translation.
+
+2008-01-17 Maxim Dziumanenko <dziumanenko@gmail.com>
+
+	* uk.po: Update Ukrainian translation.
+
+2008-01-16  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2008-01-16  Rahul Bhalerao <b.rahul.pm@gmail.com>
+
+	* mr.po: Updated Marathi translations given by Sandeep Shedmake.
+
+2008-01-15  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2008-01-14  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.2 ===
+
+2008-01-14  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2008-01-13  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2008-01-12  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2008-01-12  Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish translation
+
+2008-01-12  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2008-01-09  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-01-09  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+008-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.1 ===
+
+2008-01-07  Luca Ferretti  <elle.uca@libero.it>
+
+	* POTFILES.in: remove deleted file gio/gdirectorymonitor.c
+
+	* it.po: Updated Italian translation.
+
+2008-01-07  Priit Laes  <plaes at svn dot gnome dot org>
+
+	* et.po: Translation updated by Ivar Smolin
+
+2008-01-06  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2008-01-06  Ihar Hrachyshka <booxter@lacinka.org>
+
+	* be@latin.po: Updated Belarusian Latin translation.
+
+2008-01-04  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2008-01-02  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2007-12-31  Yannig Marchegay <yannig@marchegay.org>
+
+	* oc.po: Updated Occitan translation.
+
+2007-12-27  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2007-12-23  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-23  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-12-20  Seán de Búrca  <sdeburca@svn.gnome.org>
+
+	* ga.po: Updated Irish translation.
+
+2007-12-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.15.0 ===
+
+2007-12-19  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-12-17  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-15  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-15  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* POTFILES.in: Add gio-ls.c
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-12-14  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-14  Stéphane Raimbault  <stephane.raimbault@gmail.com>
+
+	* POTFILES.in: Updated file list (gio).
+	* fr.po: Updated French translation by Robert-André Mauchin and
+	Stéphane Raimbault.
+
+2007-12-13  Matej Urbančič <mateju@svn.gnome.org>
+
+	* sl.po: Updated Slovenian Translation.
+
+2007-12-13  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-11  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-11 Rahul Bhalerao <b.rahul.pm@gmail.com>
+
+	* mr.po: Added Marathi translations
+
+2007-12-09  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-09  Espen Stefansen  <espens@svn.gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-12-08  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-12-08  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* POTFILES.in: Add missing file.
+
+2007-12-08  Jakub Friedl  <jfriedl@suse.cz>
+
+	* cs.po: Czech Translation updated by Petr Kovar.
+
+2007-12-07  Leonardo Ferreira Fontenelle  <leonardof@svn.gnome.org>
+
+	* pt_BR.po: Brazilian Portuguese translation updated by Vladimir Melo.
+
+2007-12-08  Ihar Hrachyshka <booxter@lacinka.org>
+
+	* be@latin.po: Updated Belarusian Latin translation.
+
+2007-12-06  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-12-04  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2007-12-03  Andre Klapper  <a9016009@gmx.de>
+
+	* de.po: Updated German translation
+
+2007-12-01  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-12-01  Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
+
+	* be@latin.po: Updated Belarusian Latin translation.
+
+2007-11-29  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-11-28  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-11-27  Andre Klapper  <a9016009@gmx.de>
+
+	* POTFILES.in: Updated gio sources.
+
+2007-11-26  Alexander Larsson  <alexl@redhat.com>
+
+	* POTFILES.in:
+	Added gio sources
+
+2007-11-24  Claude Paroz  <claude@2xlibre.net>
+
+	* fr.po: Updated French translation.
+
+2007-11-23  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2007-11-19  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2007-11-18  Jorge Gonzalez  <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-11-13  Matej Urbančič <mateju@svn.gnome.org>
+
+	* sl.po: Updated Slovenian Translation.
+
+2007-11-07  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.14.3 ===
+
+2007-10-29  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Translation updated by Priit Laes.
+
+2007-10-21  Matej Urbančič  <mateju@svn.gnome.org>
+
+	* sl.po: Updated Slovenian translation.
+
+2007-10-23  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-10-21  Seán de Búrca  <sdeburca@svn.gnome.org>
+
+	* ga.po: Updated Irish translation.
+
+2007-10-21  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-10-19  Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
+
+	* be@latin.po: Updated Belarusian Latin translation.
+
+2007-10-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.2 ===
+
+2007-10-15  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2007-09-30  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2007-09-29  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2007-09-17  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-09-19  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.1 ===
+
+2007-09-16  Inaki Larranaga Murgoitio  <dooteo@zundan.com>
+
+	* eu.po: Updated Basque translation.
+
+2007-09-16  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2007-09-15  Artur Flinta  <aflinta@svn.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2007-09-14  Vladimer Sichinava  <vsichi@gnome.org>
+
+	* ka.po: Updated Georgian translation.
+
+2007-09-14 Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2007-09-14  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated British English translation
+
+2007-09-13  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation
+	by Mişu Moldovan <dumol@gnome.ro>
+
+2007-09-12  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2007-09-10  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2007-09-07 Maxim Dziumanenko <dziumanenko@gmail.com>
+
+	* Update Ukrainian translation.
+
+2007-09-07  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
+
+	* ru.po: Updated Russian translation
+
+2007-09-06  Goran Rakić  <grakic@devbase.net>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation.
+
+2007-09-05  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2007-09-04  Kenneth Nielsen  <k.nielsen81@gmail.com>
+
+	* da.po: Updated Danish translation
+
+2007-09-03  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2007-09-03  Stéphane Raimbault  <stephane.raimbault@gmail.com>
+
+	* fr.po: Fixed French translation.
+
+2007-08-31  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2007-08-31  Pramod Raghavendra <pramodleo@yahoo.co.uk>
+
+	* kn.po: Updated Kannada translation by Shankar Prasad.
+
+2007-08-30  Stéphane Raimbault  <stephane.raimbault@gmail.com>
+
+	* fr.po: Updated French translation by Stéphane Raimbault and
+	Claude Paroz.
+
+2007-08-26  Josep Puigdemont i Casamajó  <josep.puigdemont@gmail.com>
+
+	* ca.po: Updated Catalan translation.
+
+2007-08-26  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2007-08-26  Raphael Higino  <raphaelh@svn.gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation
+	by Vladimir Melo <vladimirmelo@foresightlinux.org>.
+
+2007-08-20  Claude Paroz  <claude@2xlibre.net>
+
+	* kn.po: Make 2 strings fuzzy to make msgfmt pass (and glib compile again!)
+
+2007-08-20  Pramod Raghavendra <pramodleo@yahoo.co.uk>
+
+	* kn.po: Updated Kannada translation by Shankar Prasad.
+
+2007-08-19  Duarte Loreto <happyguy_pt@hotmail,com>
+
+	* pt.po: Updated Portuguese translation.
+
+2007-08-16  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Estonian translation update by Ivar Smolin.
+
+2007-08-15  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2007-08-14  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2007-08-14  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2007-08-13  Žygimantas Beručka  <zygis@gnome.org>
+
+	* lt.po: Updated Lithuanian translation.
+
+2007-08-13  I. Felix <ifelix@svn.gnome.org>
+
+	* ta.po:  Tamil Translation updated by Tirumurthi Vasudevan
+
+2007-08-12  Jovan Naumovski  <jovan@lugola.net>
+
+	* mk.po: Updated Macedonian translation.
+
+2007-08-11  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2007-08-10  Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-08-10  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2007-08-10  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2007-08-09  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated translation.
+
+2007-08-09  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2007-08-06  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2007-08-05  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.14.0 ===
+
+2007-08-03  Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish translation
+
+2007-08-03  Ani Peter  <peter.ani@gmail.com>
+
+	* ml.po: Updated Malayalam Translation
+
+2007-08-02  Wadim Dziedzic  <wadimd@svn.gnome.org>
+
+	* pl.po: Updated polish translation
+
+2007-07-25  Inaki Larranaga Murgoitio
+
+	* eu.po: Updated Basque translation.
+
+2007-07-25  Amitakhya Phukan <amitakhya@svn.gnome.org>
+
+	* as.po:  Updated Assamese Translation.
+
+2007-07-21  Leonardo Ferreira Fontenelle  <leonardof@svn.gnome.org>
+
+	* pt_BR.po: Brazilian Portuguese translation updated.
+
+2007-07-18  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated.
+
+2007-07-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.7 ===
+
+2007-07-11  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation
+
+2007-07-10  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation
+
+2007-07-10 Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2007-07-10  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2007-07-10  Runa Bhattacharjee <runabh@gmail.com>
+
+	* bn _IN.po: Updated Bengali India Translation.
+
+2007-07-06  Amitakhya Phukan <amitakhya@svn.gnome.org>
+
+	* as.po:  Updated Assamese Translation.
+	* LINGUAS: Added Assamese (as) to the list of languages.
+
+2007-07-05  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2007-07-04  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation by Eunju Kim.
+
+2007-07-03  Jovan Naumovski  <jovan@lugola.net>
+
+	* mk.po: Updated Macedonian translation.
+
+2007-06-30  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2007-06-29  Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+	* Added missing files to POTFILES.in
+
+Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.6 ===
+
+2007-06-23  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-06-22  I. Felix <ifelix@svn.gnome.org>
+
+	* si.po:  Sinhala Translation updated by Danishka Navin
+	* LINGUAS: Added Sinhala (si) to The List of Languages.
+
+2007-06-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.5 ===
+
+2007-06-17  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Estonian translation update by Ivar Smolin.
+
+2007-06-15  Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-06-13  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2007-06-11  Subhransu Behera  <arya_subhransu@yahoo.co.in>
+
+	* or.po: Updated Oriya Translation.
+
+2007-06-10  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2007-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.4 ===
+
+2007-06-04  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.3 ===
+
+2007-06-04  Matthias Clasen <mclasen@redhat.com>
+
+	* nb.po: Comment out one translation that breaks the build
+
+2007-06-04  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-05-24  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Updated Estonian translation by Ivar Smolin <okul@linux.ee>.
+
+2007-05-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.2 ===
+
+2007-05-22  Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-05-21  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2007-05-19  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2007-05-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* POTFILES.in: Add gregex.c (#436955, Philip Withnall)
+
+2007-05-17  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2007-05-15  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated British English translation
+
+2007-05-15  Subhransu Behera  <arya_subhransu@yahoo.co.in>
+
+	* or.po: Updated Oriya Translation.
+
+2007-05-06  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-05-06  Ihar Hrachyshka <iharh@gnome.org>
+
+	* be@latin.po: Updated Belarusian Latin translation.
+
+2007-05-03  Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+	* es.po: Updated Spanish translation
+
+2007-05-03  Matthias Clasen <mclasen@redhat.com>
+
+	* === Released 2.13.1 ===
+
+2007-05-2  Djihed Afifi <djihed@gmail.com>
+
+	* ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-04-15  Funda Wang  <fundawang@gmail.com>
+
+	* zh_CN.po: Updated Simplified Chinese translation from Yang Zhang.
+
+2007-03-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.13.0 ===
+
+2007-03-11  Goran Rakić  <grakic@devbase.net>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation.
+
+2007-03-11  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@gnome.ro>
+
+2007-03-08  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2007-03-06  Jovan Naumovski  <jovan@lugola.net>
+
+	* mk.po: Updated Macedonian translation.
+
+2007-03-03  Thierry Randrianiriana  <randrianiriana@gmail.com>
+
+	* mg.po: Added Malagasy translation.
+
+2007-03-01  Ihar Hrachyshka <iharh@gnome.org>
+	* be.po: Added new Belarusian Latin translation.
+
+2007-02-27  Abel Cheung  <abelcheung@gmail.com>
+
+	* zh_HK.po, zh_TW.po: Updated traditional Chinese translation by
+	Woodman Tuen <wmtuen@gmail.com>.
+
+2007-02-27  Gintautas Miliauskas  <gintas@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2007-02-22  Gintautas Miliauskas  <gintas@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2007-02-17  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2007-01-19  Maxim Dziumanenko <dziumanenko@gmail.com>
+
+	* uk.po: Updated Ukrainian translation.
+
+2007-01-10  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2007-01-10  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2007-01-09  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated English (British) translation
+
+2007-01-08  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2007-01-07  Priit Laes  <plaes@svn.gnome.org>
+
+	* et.po: Estonian translation update by Ivar Smolin.
+
+2007-01-05  Jakub Friedl  <jfriedl@suse.cz>
+
+	* cs.po: Updated Czech translation.
+
+2007-01-05  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2007-01-04  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2007-01-04  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2006-12-28  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated English (British) translation
+
+2006-12-17 Matthias Clasen <mclasen@redhat.com>
+
+	* Makefile.in.in: Define datarootdir, to silence autoconf 2.60
+
+2006-12-07  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2006-10-31  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po:  Updated Hebrew translation.
+
+2006-10-04  Jakub Friedl  <jfriedl@suse.cz>
+
+	* cs.po: Updated Czech translation.
+
+2006-09-09  David Lodge
+
+	* en_GB.po: Updated British English translation.
+
+2006-09-05  Pawan Chitrakar  <pchitrakar@gmail.com>
+
+	* ne.po: Updated Nepali Translation
+
+2006-09-04  Roozbeh Pournader  <roozbeh@farsiweb.info>
+
+	* fa.po: Updated Persian translation by Meelad Zakaria.
+
+2006-09-04  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@gnome.ro>
+
+2006-09-03  Lucas Rocha  <lucasr@gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation
+	by Leonardo Ferreira Fontenelle <leo.fontenelle@gmail.com>
+
+2006-09-02  Åsmund Skjæveland  <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2006-08-31  Khandakar Mujahidul Islam  <suzan@bengalinux.org>
+
+	* bn.po: Updated Bengali translation
+
+2006-08-30  I. Felix  <ifelix25@gmail.com>
+
+	* ta.po: Translation updated.
+
+2006-08-26  Žygimantas Beručka  <zygis@gnome.org>
+
+	* lt.po: Updated Lithuanian translation.
+
+2006-08-26  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation from
+	Robert-André Mauchin <zebob.m@gmail.com>.
+
+2006-08-26  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2006-08-24  Josep Puigdemont i Casamajó  <josep.puigdemont@gmail.com>
+
+	* ca.po: Updated Catalan translation (rebased from 2-12 branch).
+
+2006-08-23  Khandakar Mujahdul Islam <suzan@bengalinux.org>
+
+	* bn.po: Updated Bengali translation
+
+2006-08-20  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2006-08-20  Ani Peter <peter.ani@gmail.com>
+
+	* ml.po: Updated Malayalam translation
+
+2006-08-18  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2006-08-18  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2006-08-17  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2006-08-16  Satoru SATOH <ss@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2006-08-16  Erdal Ronahi  <erdal.ronahi@gmail.com>
+
+	* ku.po: Updated Kurdish translation.
+
+2006-08-16  Daniel Nylander <po@danielnylander.se>
+
+	* sv.po: Updated Swedish translation.
+
+2006-08-16  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Translation updated.
+
+2006-08-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.2 ===
+
+2006-08-16  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2006-08-16  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2006-08-15  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2006-08-11  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2006-08-10  Josep Puigdemont i Casamajó  <josep.puigdemont@gmail.com>
+
+	* ca.po: Updated Catalan translation.
+
+2006-08-10  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* dz.po: Updated Dzongkha translation by
+	Dzongkhalinux team, DIT
+
+2006-08-09  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2006-08-09	Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish Translation from Onur Can Cakmak
+
+2006-08-09  Wouter Bolsterlee  <uws+gnome@xs4all.nl>
+
+	* nl.po: Translation updated by Wouter Bolsterlee.
+
+2006-08-08  Inaki Larranaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2006-08-07  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2006-08-06  Francisco Javier F. Serrador  <serrador@openshine.com>
+
+	* es.po: Updated Spanish translation.
+
+2006-08-06  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2006-08-05  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+	* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2006-08-03  Jakub Friedl <jfriedlo@suse.cz>
+
+	* cs.po: Updated Czech translation.
+
+2006-07-31  Maxim Dziumanenko <dziumanenko@gmail.com>
+
+	* uk.po: Updated Ukrainian translation.
+
+2006-07-22  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.1 ===
+
+2006-07-22  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2006-07-21  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2006-07-21  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation from
+	Jonathan Ernst <jonathan@ernstfamily.ch>.
+
+2006-07-21  Josep Puigdemont i Casamajó  <josep.puigdemont@gmail.com>
+
+	* ca.po: Updated Catalan translation.
+
+2006-07-18  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* dz.po: Updated Dzongkha translation by
+	Dzongkhalinux team, DIT
+
+2006-07-17  Runa Bhattacharjee <runabh@gmail.com>
+
+	* bn_IN.po:Updated Bengali India Translation.
+
+2006-07-11  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2006-07-08  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Fixed a typo.
+
+2006-07-07  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2006-07-06  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2006-07-05  Inaki Larranaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2006-07-05  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2006-07-05  Jovan Naumovski  <jovan@lugola.net>
+
+	* mk.po: Updated Macedonian translation.
+
+2006-07-03  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2006-07-03  Subhransu Behera  <arya_subhransu@yahoo.co.in>
+
+	* or.po: Updated Oriya Translation
+
+2006-07-03  Runa Bhattacharjee <runabh@gmail.com>
+
+	* bn_IN.po: Added Bengali India Translation.
+
+2006-07-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.12.0 ===
+
+2006-06-29  Rhys Jones  <rhys@sucs.org>
+
+	* cy.po: Updated Welsh translation.
+
+2006-06-26  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2006-06-25  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2006-06-20  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.4 ===
+
+2006-06-20  Rajesh Ranjan <rajeshkajha@yahoo.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2006-06-19  Hendrik Richter  <hendrikr@gnome.org>
+
+	* de.po: Updated German translation.
+
+2006-06-19  Benoît Dejean  <benoit@placenet.org>
+
+	* fr.po: Updated French translation.
+
+2006-06-19  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2006-06-19  Francisco Javier F. Serrador  <serrador@openshine.com>
+
+	* es.po: Updated Spanish translation.
+
+2006-06-17  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2006-06-17  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2006-06-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.3 ===
+
+2006-06-06  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2006-06-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.2 ===
+
+2006-06-06  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2006-05-28  Pema Geyleg  <pema.geyleg@gmail.com>
+
+	* dz.po: Updated Dzongkha translation.
+
+2006-05-25  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2006-05-25  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2006-05-24  Inaki Larranaga  <doteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2006-05-23  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2006-05-21  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation
+	by Alexander Shopov  <ash@contact.bg>
+
+2006-05-17  Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+	* ja.po: Updated Japanese translation.
+
+2006-05-16  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2006-05-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.1 ===
+
+2006-05-06  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2006-05-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.11.0 ===
+
+2006-05-02  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2006-05-02  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2006-04-30  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* POTFILES.in: Add gbookmarkfile.c
+	* nb.po: Adjust accordingly.
+
+2006-04-30  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+
+2006-04-23  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2006-04-23  Åsmund Skjæveland  <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2006-04-21  David Lodge  <dave@cirt.net>
+
+	* en_GB.po: Translation updated by David Lodge.
+
+2006-04-21  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2006-04-21  Rajesh Ranjan <rajeshkajha@yahoo.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2006-04-19  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2006-04-18  Rajesh Ranjan <rajeshkajha@yahoo.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2006-04-18  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2006-04-17  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2006-04-11  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2006-04-10  Vladimer Sichinava  <vlsichinava@gmail.com>
+
+	* ka.po: Updated Georgian translation.
+
+2006-04-07  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2006-04-07  Priit Laes  <amd@store20.com>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2006-04-02  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2006-03-27  Yair Hershkovitz  <yairhr@gmail.com>
+
+	* he.po: Updated Hebrew translation.
+
+2006-03-13  Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish Translation
+
+2006-03-13  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@gnome.ro>
+
+2006-03-10  Guilherme de S. Pastore  <gpastore@gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation from Leandro
+	A. F. Pereira <leandro@linuxmag.com.br>.
+
+2006-03-06  Rajesh Ranjan <rranjan@redhat.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2006-03-06  Rajesh Ranjan <rranjan@redhat.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2006-03-06  Rajesh Ranjan <rranjan@redhat.com>
+
+	* hi.po: Updated Hindi Translation.
+
+2006-03-10  Subhransu Behera <sbehera@redhat.com>
+
+	* or.po: Updated Oriya translation
+
+2006-03-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* ===  Released 2.10.1 ===
+
+2006-03-07  Daniel Nylander  <po@danielnylander.se>
+
+	* sv.po: Swedish translation updated.
+
+2006-03-03  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Hungarian translation updated.
+
+2006-02-25  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2006-02-25  Benoît Dejean  <benoit@placenet.org>
+
+	* fr.po: Updated French translation.
+
+2006-02-25  Žygimantas Beručka  <zygis@gnome.org>
+
+	* lt.po: Updated Lithuanian translation.
+
+2006-02-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.10.0 ===
+
+2006-02-23  Clytie Siddall <clytie@riverland.net.au>
+
+	* ka.po: Added Georgian translation by Gia Shervashidze <giasher@telenet.ge>.
+
+2006-02-21  Inaki Larranaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2006-02-20  Kostas Papadimas  <pkst@gnome.org>
+
+	* el.po: Updated Greek translation.
+
+2006-02-16  Maxim Dziumanenko <mvd@mylinux.ua>
+
+	* uk.po: Updated Ukrainian translation
+
+2006-02-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.6 ===
+
+2006-02-08  Luca Ferretti  <elle.uca@libero.it>
+
+	* it.po: Updated Italian translation.
+
+2006-02-07  Lukas Novotny  <lukasnov@cvs.gnome.org>
+
+	* cs.po: Updated Czech translation.
+
+2006-02-04  Rhys Jones  <rhys@sucs.org>
+
+	* cy.po: Updated Welsh translation.
+
+2006-02-03  Rhys Jones  <rhys@sucs.org>
+
+	* cy.po: Updated Welsh translation.
+
+2006-02-01  Leonid Kanter <leon@asplinux.ru>
+
+	* ru.po: Updated Russian translation
+
+2006-01-31  Slobodan D, Sredojevic  <slobo@akrep.be>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation
+
+2006-01-30  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2006-01-28  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2006-01-28  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2006-01-27  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.5 ===
+
+2006-01-24  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2006-01-21  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2006-01-18  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation.
+
+2006-01-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.4 ===
+
+2006-01-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.3 ===
+
+2006-01-16  Hendrik Richter  <hendi@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2006-01-16  Hendrik Brandt  <heb@gnome-de.org>
+
+	* de.po: Updated translation, Bugfixes, closed Bug #327196
+
+2006-01-12  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2006-01-09  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2005-01-09  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2006-01-08  Takeshi AIHANA <aihana@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2006-01-07  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2006-01-07  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2006-01-06  Josep Puigdemont i Casamajó  <josep.puigdemont@gmail.com>
+
+	* ca.po: Updated Catalan translation.
+
+2006-01-07  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2006-01-07  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2006-01-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.2 ===
+
+2006-01-04  Abel Cheung  <maddog@linuxhall.org>
+
+	* zh_HK.po: New Chinese (Hong Kong) translation
+	* zh_TW.po: Updated Chinese (Taiwan) translation
+
+2006-01-02  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+	* no.po: Same
+
+2005-12-26  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2005-12-25  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-12-19  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2005-12-18  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2005-12-09  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.1 ===
+
+2005-12-01  Christian Rose  <menthos@menthos.com>
+
+	* tl.po: Updated Tagalog translation by
+	Eric Pareja <xenos@upm.edu.ph>.
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.9.0 ===
+
+2005-11-16  Ales Nyakhaychyk  <nab@mail.by>
+
+	* be.po: Updated Belarusian translation by Vital Khilko
+
+2005-11-10  Simos Xenitellis  <simos@gnome.org>
+
+	* tt.po: Added Tatar translation by Albert Fazlí.
+
+2005-11-02  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2005-11-01  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2005-10-27  Erdal Ronahi  <erdal.ronahi@gmail.com>
+
+	* ku.po: Added Kurdish translation.
+
+2005-10-26  Takeshi AIHANA <aihana@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation and
+		Fixed typos reported by kano@na.rim.or.jp.
+
+2005-10-25  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2005-10-20  Runa Bhattacharjee  <runa@bengalinux.org>
+
+	* bn.po: Updated Bengali(bn) Translation
+	by Mahay Alam Khan <makl10n@yahoo.com>
+
+2005-10-20  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician Translation.
+
+2005-10-17  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2005-10-17 Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_TW.po: Updated Traditional Chinese translation.
+
+2005-10-16  Marcel Telka  <marcel@telka.sk>
+
+	* sk.po: Updated Slovak translation.
+
+2005-09-30  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-09-26  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2005-09-25  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2005-09-06  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.in.in: Tell xgettext about all the
+	printf-like functions we use.
+
+2005-09-05  Iñaki Larrañaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2005-09-04  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2005-09-03  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_TW.po: Updated Traditional Chinese translation.
+
+2005-09-02  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2005-09-01  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2005-09-01  Raphael Higino  <raphaelh@cvs.gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation.
+
+2005-09-01  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2005-08-31  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation
+	for Mişu Moldovan <dumol@gnome.ro>
+
+2005-08-30  Mohammad DAMT  <mdamt@gnome.org>
+
+	* id.po: Updated Indonesian translation.
+
+2005-08-29  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2005-08-28  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-08-28  Maxim Dziumanenko <mvd@mylinux.ua>
+
+	* uk.po: Updated Ukrainian translation
+
+2008-08-28  Josep Puigdemont  <josep.puigdemont@gmail.com>
+
+	* ca.po: Updated Catalan translation.
+
+2005-08-28  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2005-08-27  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-08-27  Terance Sola  <terance@lyse.net>
+
+	* nb.po: Updated Norwegian bokmål translation.
+	* no.po: Same.
+
+2005-08-27  Clytie Siddall <clytie@riverland.net.au>
+
+	* vi.po: Updated Vietnamese translation.
+
+2005-08-27  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2005-08-27 Ankit Patel <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2005-08-27  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@gnome.ro>
+
+2005-08-27  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-08-26  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2005-08-26  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+2005-08-26  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+=======
+2005-09-01  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2005-09-01  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-08-31  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-09-01  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@gnome.ro>
+
+2005-08-31  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2005-08-31  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated the Greek translation>
+
+2005-08-31  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Updated Norwegian bokmål translation.
+	* no.po: Same
+
+2005-08-31  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Hungarian translation updated.
+
+2005-08-30  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2005-08-30  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2005-08-30  Leonid Kanter <leon@asplinux.ru>
+
+	* ru.po: Updated Russian translation
+
+2005-08-30  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2005-08-30  Jordi Mallach  <jordi@sindominio.net>
+
+* ca.po: Updated Catalan translation.
+
+2005-08-30  Ankit Patel  <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2005-08-29  Alessio Frusciante  <algol@firenze.linux.it>
+
+	* it.po: Updated Italian translation by
+	Luca Ferretti <elle.uca@infinito.it>.
+
+2005-08-28  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-08-27  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2005-08-23  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.1 ===
+
+2005-08-22  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2005-08-18  Rhys Jones  <rhys@sucs.org>
+
+	* cy.po: Updated Welsh translation.
+
+2005-08-15  Maxim Dziumanenko <mvd@mylinux.com.ua>
+
+	* uk.po: Updated Ukrainian translation
+
+2005-08-15  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+2005-08-15  Mugurel Tudor  <mugurelu@gnome.ro>
+
+	* ro.po: Updated Romanian translation
+	by Mişu Moldovan <dumol@gnome.ro>
+
+2005-08-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.8.0 ===
+
+2005-08-12  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated the Greek translation>
+
+2005-08-08  Sunil Mohan Adapa  <sunil@atc.tcs.co.in>
+
+	* te.po: Added Telugu translation done by
+	Vikram Phaneendra <vikramphaneendra@yahoo.co.in>
+	Dandu Prasad <dandu_prasad2000@yahoo.com>
+	Ramana Sai <rmn_sai@yahoo.co.in>
+
+2005-08-05  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.7 ===
+
+2005-08-03  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.6 ===
+
+2005-08-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.5 ===
+
+2005-07-25  Matthias Clasen  <mclasen@redhat.com>
+
+	* Makefile.in.in: Call msgfmt with -c to catch
+	format errors.
+
+2005-07-28  Ilkka Tuohela  <hile@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2005-07-27  Christian Neumair  <chris@gnome-de.org>
+
+	* de.po: Fixed format specifiers. Thanks to Murray Cumming for
+	pointing this out.
+
+2005-07-26  Hendrik Brandt  <heb@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2005-07-26  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2005-07-25 Ankit Patel <ankit644@yahoo.com>
+
+	* gu.po: Updated Gujarati Translation.
+
+2005-07-24  Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish Translation from Onur Can Cakmak
+
+2005-07-22  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_TW.po Updated Traditional Chinese translation.
+
+2005-07-22  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.4 ===
+
+2005-07-18  Matthias Clasen  <mclasen@redhat.com>
+
+	* de.po: Fix some printf formatting in the German
+	translation.  (#310731, Max Horn)
+
+2005-07-18  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2005-07-17  Žygimantas Beručka  <zygis@gnome.org>
+
+	* lt.po: Updated Lithuanian translation.
+
+2005-07-16  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2005-07-15  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.3 ===
+
+2005-07-13  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Update some
+	* no.po: Update
+
+2005-07-12  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Hungarian translation updated.
+
+2005-07-10  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2005-07-09  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2005-07-09  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2005-07-08  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.2 ===
+
+2005-07-08  Danilo Šegan  <danilo@gnome.org>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation.
+
+2005-07-06  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-07-03  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-07-02  Takeshi AIHANA <aihana@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2005-07-02  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated.
+
+2005-07-01  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
+
+	* zh_TW.po: Updated Traditional Chinese translation.
+
+2005-06-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.1 ===
+
+2005-06-28  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Updated Thai translation.
+
+2005-06-25  Marcel Telka  <marcel@telka.sk>
+
+	* sk.po: Updated Slovak translation.
+
+2005-06-24  Matthias Clasen  <mclasen@redhat.com>
+
+	* POTFILES.in: Add gmappedfile.c
+
+2005-06-22  Abel Cheung  <maddog@linuxhall.org>
+
+	* zh_TW.po: Fix language team reference.
+
+2005-06-21  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated.
+
+2005-06-17  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-06-16  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2005-06-15  Marcel Telka  <marcel@telka.sk>
+
+	* sk.po: Updated Slovak translation.
+
+2005-06-14  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+	* th.po: Added Thai translation.
+
+2005-06-13  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-06-13  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation by
+	Alexander Shopov <ash@contact.bg>
+
+2005-06-13  Terance Sola  <terance@lyse.net>
+
+	* nb.po: Updated Norwegian translation.
+	* no.po: Same as above.
+
+2005-06-12  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2005-06-11  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2005-06-10  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated.
+
+2005-06-10  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.7.0 ===
+
+2005-06-08  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2005-06-06  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2005-06-05  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
+
+	* gl.po: Updated Galician translation.
+
+2005-05-30  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2005-05-30  Sanlig Badral  <badral@openmn.org>
+
+	* mn.po: Updated Mongolian translation.
+
+2005-05-29  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2005-05-28  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-05-21  Pawan Chitrakar  <pawan@nplinux.org>
+
+	* ne.po: Updated Translation
+
+2005-05-15  Pawan Chitrakar  <pawan@nplinux.org>
+
+	* ne.po: Updated Translation
+
+2005-05-14  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2005-05-14  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2005-05-02  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Ivar Smolin.
+
+2005-04-30  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2005-04-27  Gabor Kelemen  <kelemeng@gnome.hu>
+
+	* hu.po: Hungarian translation added.
+
+2005-04-23  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-04-18  David Lodge  <dave@cirt.net>
+
+	* en_GB.po: Updated British English translation.
+
+2005-04-17  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-04-12  Iaki Larraaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2005-04-12  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2005-04-07  Gareth Owen  <gowen72@yahoo.com>
+
+	* en_GB.po: Updated British English translation
+
+2005-03-31  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2005-03-30  Steve Murphy  <murf@e-tools.com>
+
+	* rw.po: Added Kinyarwanda translation.
+
+2005-03-30  Estêvão Samuel Procópio <tevaum@ig.com.br>
+
+	* pt_BR.po: Updated Brazilian Portuguese Translation.
+
+2005-03-15  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2005-03-13  Roozbeh Pournader  <roozbeh@farsiweb.info>
+
+	* fa.po: Updated Persian translation by
+	Hamed Malek <hamed@farsiweb.info>.
+
+2005-03-09  Ahmad Riza H Nst  <ari@160c.afraid.org>
+
+	* id.po: Updated Indonesian Translation
+
+2005-03-05  Dan Damian  <dand@gnome.ro>
+
+	* ro.po: Updated Romanian translation by
+	Mişu Moldovan <dumol@go.ro>.
+
+2005-02-28  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated the Greek translation>
+
+2005-02-20  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2005-02-16  Adi Attar  <aattar@cvs.gnome.org>
+
+	* xh.po: Added Xhosa translation
+
+2005-02-15  Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish Translation by Onur Can Cakmak
+
+2005-02-13  Benoît Dejean  <TazForEver@dlfp.org>
+
+	* fr.po: Updated French translation.
+
+2005-02-11  Danilo Šegan  <dsegan@gmx.net>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation.
+
+2005-02-09  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2005-02-09  Maxim Dziumanenko <mvd@mylinux.com.ua>
+
+	* uk.po: Updated Ukrainian translation
+
+2005-02-06  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated  Greek translation.
+
+2005-02-01  Raphael Higino  <raphaelh@cvs.gnome.org>
+
+	* pt_BR.po: Updated Brazilian Portuguese translation.
+
+2005-01-31  Žygimantas Beručka  <uid0@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2005-01-30  Alessio Frusciante  <algol@firenze.linux.it>
+
+	* it.po: Updated Italian translation by
+	Luca Ferretti <elle.uca@infinito.it>.
+
+2005-01-28  Christian Rose  <menthos@menthos.com>
+
+	* tl.po: Added Tagalog translation by
+	Eric Pareja <xenos@upm.edu.ph>.
+
+2005-01-14  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+2005-01-14  Marcel Telka  <marcel@telka.sk>
+
+	* sk.po: Updated Slovak translation.
+
+2005-01-10  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2005-01-10  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2005-01-09  Alessio Frusciante  <algol@firenze.linux.it>
+
+	* it.po: Updated Italian translation by
+	Luca Ferretti <elle.uca@infinito.it>.
+
+2005-01-07  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.1 ===
+
+2005-01-06  Rhys Jones <rhys@sucs.org>
+
+	* cy.po: Updated Welsh translation.
+
+2004-12-18  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2004-12-18  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2004-12-18  Hendrik Brandt  <heb@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2004-12-17  Leonid Kanter <leon@asplinux.ru>
+
+	* ru.po: Updated Russian translation
+
+2004-12-17  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-12-16  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.6.0 ===
+
+2004-12-13  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated British translation.
+
+2004-12-12  Alexander Shopov  <ash@contact.bg>
+
+	* bg.po: Updated Bulgarian translation
+
+2004-12-07  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2004-12-04  Žygimantas Beručka  <uid0@akl.lt>
+
+	* lt.po: Updated Lithuanian translation.
+
+2004-12-04  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2004-12-04  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2004-12-03  Takeshi AIHANA <aihana@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2004-12-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.7 ===
+
+2004-12-01  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2004-11-30  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2004-11-29  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2004-11-29  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2004-11-24  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2004-11-22  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2004-11-22  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2004-11-21  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated British translation.
+
+2004-11-20  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-11-18  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2004-11-18  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2004-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+	* POTFILES.in: Add gkeyfile.c
+
+2004-11-15  Hendrik Richter  <hendrik@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2004-11-12  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.6 ===
+
+2004-11-09  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2004-11-08  Baris Cicek <baris@teamforce.name.tr>
+
+	* tr.po: Updated Turkish Translation by Onur Can Cakmak
+
+2004-11-04  Martin Willemoes Hansen  <mwh@sysrq.dk>
+
+	* da.po: Updated Danish translation.
+
+2004-11-03  Takeshi AIHANA <aihana@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2004-11-02  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.5 ===
+
+2004-10-27 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.4 ===
+
+2004-10-27  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Update Norwegian bokmål translation.
+
+2004-10-26  Gora Mohanty  <gmohanty@cvs.gnome.org>
+
+	* or.po: Updated Oriya translation.
+
+2004-10-25  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nb.po: Update.
+
+2004-10-19  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-10-15  Danilo Šegan  <dsegan@gmx.net>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation.
+
+2004-10-04  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2004-10-03  David Lodge <dave@cirt.net>
+
+	* en_GB.po: Updated British English translation.
+
+2004-10-03  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2004-10-03  Ryoichi INAGAKI  <ryo1@bc.wakwak.com>
+
+	* ja.po: Updated Japanese translation.
+
+2004-09-24  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2004-09-18 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.3 ===
+
+2004-09-06  Åsmund Skjæveland <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2004-09-05  Marius Andreiana <marius galuna.ro>
+
+	* ro.po: updated by Misu Moldovan
+
+2004-08-31  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanih translation.
+
+2004-08-25 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.2 ===
+
+2004-08-24  Pawan Chitrakar  <pawan@nplinux.org>
+
+	* ne.po: Update Nepali Translation
+
+2004-08-23  Iñaki Larrañaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.

+2004-08-16  Christian Rose  <menthos@menthos.com>
+
+	* bs.po: Added Bosnian translation by
+	Kenan Hadžiavdić <kenanh@frisurf.no>.
+
+2004-08-13  Tommi Vainikainen  <thv@iki.fi>
+
+	* fi.po: Unified some fields in po headers for Finnish team.
+
+2004-08-09  Ankit Patel <ankit@redhat.com>
+
+	* gu.po: Updated Gujarati translation.
+
+2004-08-09  Amanpreet Singh Alam  <aalam@redhat.com>
+
+	* pa.po: Updated Panjabi translation.
+
+2004-08-01 Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.5.1 ===
+
+2004-07-29  Iñaki Larrañaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2004-07-21  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* hi.po: Updated Hindi translation.
+
+Sun Jul 18 18:03:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+	* === Released 2.5.0 ===
+
+2004-06-09  Pawan Chitrakar  <pawan@nplinux.org>
+
+	* ne.po: Updated Translation
+
+2004-06-06  Pawan Chitrakar  <pawan@nplinux.org>
+
+	* ne.po: Added "ne.po" Nepali translation.
+
+
+2004-05-04  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian translation.
+
+2004-05-03  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* wa.po: Added Walloon file
+
+2004-05-01  Takeshi AIHANA <aihana@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2004-04-30  Matthias Clasen  <mclasen@redhat.com>
+
+	* === Released 2.4.1 ===
+
+2004-04-30  Telsa Gwynne  <hobbit@aloss.ukuu.org.uk>
+
+	* cy.po: Updated Welsh translation from Rhys Jones.
+
+2004-04-30  Yuriy Syrota  <rasta@cvs.gnome.org>
+
+	* uk.po: Updated Ukrainian translation.
+
+2004-04-29  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* ru.po: Updated Russian translation
+	from Russian team <gnome-cyr@gnome.org>.
+
+2004-04-29  Danilo Šegan  <dsegan@gmx.net>
+
+	* sr.po, sr@Latn.po, sr@ije.po: Updated Serbian translation.
+
+2004-04-27  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+2004-04-27  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Translation updated by Tino Meinen.
+
+2004-04-26  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2004-04-25  Gareth Owen  <gowen72@yahoo.com>
+
+	* en_GB.po: Updated British English translation
+
+2004-04-25  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated  Greek translation.
+
+2004-04-25  Sami Pesonen  <sampeson@iki.fi>
+
+	* fi.po: Updated Finnish translation.
+
+2004-04-24  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation by GNOME PL Team.
+
+2004-04-24  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2004-04-24  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2004-04-24  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanih translation.
+
+2004-04-24  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Updated Canadian English translation.
+
+2004-04-23  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2004-04-08  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* gu.po: Added Gujurati translation by
+	Gujarati Team <magnet@magnet-i.com>.
+
+2004-04-07  Iñaki Larrañaga  <dooteo@euskalgnu.org>
+
+	* eu.po: Updated Basque translation.
+
+2004-03-31  Mohammad DAMT  <mdamt@bisnisweb.com>
+
+	* id.po: Updated Indonesian translation
+
+2004-03-30  Adam Weinberger  <adamw@gnome.org>
+
+	* en_CA.po: Added Canadian English translation.
+
+2004-03-25  Gil Osher  <dolfin@rpg.org.il>
+
+	* he.po: Updated Hebrew translation.
+
+2004-03-18  Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2004-03-16  Gareth Owen  <gowen72@yahoo.com>
+
+	* en_GB.po: Added British translation
+
+Tue Mar 16 11:53:29 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.4.0 ===
+
+2004-03-15  Mugurel Tudor  <mugurelu@go.ro>
+
+	* ro.po: Updated Romanian translation by
+		Mişu Moldovan <dumol@go.ro>
+
+2004-03-14  Robert Sedak  <robert.sedak@sk.htnet.hr>
+
+	* hr.po: Updated Croatian translation.
+
+Tue Mar  9 09:22:02 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.6 ===
+
+2004-03-08 Alastair McKinstry <mckinstry@computer.org>
+
+	* ga.po: Updated Irish translation.
+
+2004-03-08  Ales Nyakhaychyk  <nab@mail.by>
+
+	* be.po: Updated Belarusian translation.
+
+2004-03-07  Danilo Šegan  <dsegan@gmx.net>
+
+	* sr@ije.po: Added Serbian Jekavian translation by Bojan Suzić
+	<bojans@teol.net>.
+
+2004-03-06  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>
+
+	* es.po: Updated Spanish translation.
+
+2004-03-04  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* pa.po: Added Punjabi translation by
+	Amanpreet Singh Alam <amanlinux@netscape.net>.
+
+2004-03-04  Funda Wang  <fundawang@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2004-03-03  Pauli Virtanen  <pauli.virtanen@hut.fi>
+
+	* fi.po: Updated Finnish translation.
+
+Mon Mar  1 16:49:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+	* === Released 2.3.5 ===
+
+2004-03-01  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-02-27  Priit Laes  <plaes@cvs.gnome.org>
+
+	* et.po: Translation updated by Allan Sims.
+
+2004-02-24 Alastair McKinstry <mckinstry@debian.org>
+
+	* ga.po: Corrections.
+
+2004-02-24  Dafydd Harries  <daf@muse.19inch.net>
+
+	* cy.po: Updated Welsh translation by Rhys Jones and myself.
+
+2004-02-23  Kostas Papadimas <pkst@gnome.org>
+
+	* el.po: Updated  Greek translation.
+
+2004-02-23  Guntupalli Karunakar  <karunakar@freedomink.org>
+
+	* ta.po: Updated Tamil translation by
+	Dinesh Nadarajah <dinesh_list@sbcglobal.net>
+
+2004-02-20  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Fixed Albanian translation.
+
+2004-02-12  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-02-12  Danilo Šegan  <dsegan@gmx.net>
+
+	* sr.po, sr@Latn.po: Reviewed by myself.
+
+2004-02-09  Maxim Dziumanenko <mvd@mylinux.com.ua>
+
+	* uk.po: Updated Ukrainian translation
+
+2004-02-05  Robert Sedak  <robert.sedak@sk.htnet.hr>
+
+	* hr.po: Updated Croatian translation.
+
+2004-02-05  Mətin Əmirov  <metin@karegen.com>
+
+	* az.po: Translation updated.
+
+2004-02-01  Hasbullah Bin Pit <sebol@my-penguin.org>
+
+	* ms.po: Updated Malay translation.
+
+2004-01-31  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-01-30  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2004-01-29  Alessio Frusciante  <algol@firenze.linux.it>
+
+	* it.po: Updated Italian translation.
+
+2004-01-28  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Fixed Czech translation.
+
+2004-01-27  Åsmund Skjæveland  <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2004-01-16 Alastair McKinstry <mckinstry@computer.org>
+
+	* ga.po: Updated Irish translation.
+
+2004-01-16  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2004-01-13 Alastair McKinstry <mckinstry@computer.org>
+
+	* ga.po: Irish translation.
+
+2004-01-13  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian translation.
+
+2004-01-07  Sanlig Badral  <badral@openmn.org>
+
+	* mn.po; Updated Mongolian translation.
+
+2004-01-06  Christian Neumair  <chris@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2004-01-01  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+	* fa.po: Updated Persian translation.
+
+2004-01-01  Åsmund Skjæveland  <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2003-12-27  Åsmund Skjæveland  <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2003-12-20  Arafat Medini  <lumina@silverpen.de>
+
+	* ar.po: Updated Arabic translation.
+
+2003-12-03  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* ru.po: Updated Russian translation
+	from Russian team <gnome-cyr@gnome.org>.
+
+2003-12-03  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated and revised Portuguese translation.
+
+2003-11-22  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2003-11-20  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation.
+
+2003-11-19  Åsmund Skjæveland  <aasmunds@fys.uio.no>
+
+	* nn.po: Updated Norwegian Nynorsk translation.
+
+2003-11-18  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Updated Czech translation.
+
+2003-11-13  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+2003-11-10  Pablo Gonzalo del Campo  <pablodc@bigfoot.com>
+
+	* es.po: Updated Spanish translation by
+	Francisco Javier F. Serrador <serrador@arrakis.es>.
+
+2003-10-31  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian translation.
+
+2003-10-28  KAMAGASAKO Masatoshi  <emerald@gnome.gr.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2003-10-19  Vincent van Adrighem  <adrighem@gnome.org>
+
+	* nl.po: Dutch translation updated by Tino Meinen.
+
+2003-10-08  Artur Flinta  <aflinta@cvs.gnome.org>
+
+	* pl.po: Updated Polish translation.
+
+2003-10-04  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2003-09-29  Gustavo Maciel Dias Vieira  <gdvieira@zaz.com.br>
+
+	* pt_BR.po: Applied revision by Augusta Marques da Silva
+	<augusta.marques@gmx.net>.
+
+2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt>
+
+	* lt.po: Added Lithuanian translation by Tomas Kuliavas.
+
+2003-08-20  Richard Allen <ra@ra.is>
+
+	* is.po: Added Icelandic translation.
+
+2003-08-18  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Update Norwegian translation.
+
+2003-08-18  Metin Amiroff <metin@karegen.com>
+
+	* az.po: Updated Azerbaijani translation.
+
+2003-08-16  Danilo Šegan  <dsegan@gmx.net>
+
+	* sr.po, sr@Latn.po: Updated Serbian translation.
+
+2003-07-10  Joel Brich <joel.brich@laposte.net>
+
+	* eo.po: Added Esperanto translation
+	from Charles Voelger <cvoelger@dweasel.com>
+
+2003-06-22  Metin Amiroff <metin@karegen.com>
+
+	* az.po: Updated Azerbaijani translation.
+
+2003-06-04  Abel Cheung  <maddog@linux.org.hk>
+
+	* ta.po: Fix broken encoding.
+
+2003-05-27  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation.
+
+2003-05-19 Arafat Medini <lumina@silverpen.de>
+
+	* ar.po: Added Arabic translation from
+	Arabeyes team <doc@arabeyes.org>
+
+
+2003-05-17  Telsa Gwynne  <hobbit@aloss.ukuu.org.uk>
+
+	* cy.po: Added Welsh translation from
+	Dafydd Harries <daf@parnassus.ath.cx>
+
+2003-05-08  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2003-05-05  Christian Rose  <menthos@menthos.com>
+
+	* sr.po, sr@Latn.po: Added Serbian translation by
+	Danilo Šegan <dsegan@gmx.net>.
+
+2003-03-26  Christian Rose  <menthos@menthos.com>
+
+	* yi.po: Added Yiddish translation by
+	Raphael Finkel <raphael@cs.uky.edu>.
+
+2003-02-27  James Henstridge  <james@daa.com.au>
+
+	* Makefile.in.in (uninstall): fix uninstall target so that it
+	correctly removes the installed Makefile.in.in if PACKAGE==glib.
+	(update-po): update to use logic more similar to new gettexts,
+	which should pass readonly srcdir distcheck.
+
+2003-02-24  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+	* fa.po: Updated Persian translation.
+
+2003-02-21  Metin Amiroff  <metin@karegen.com>
+
+	* az.po: some fixes in Azerbaijani translation.
+
+2003-02-11  Fatih Demir <kabalak@gtranslator.org>
+
+	* tr.po: Take over from stable branch.
+
+2003-02-10  Mohammad DAMT  <mdamt@bisnisweb.com>
+
+	* id.po: Added Indonesian translation
+
+2003-01-29  Tõivo Leedjärv  <toivo@linux.ee>
+
+	* et.po: Fixed a small bug in Estonian translation.
+
+2003-01-22  Paisa Seeluangsawat  <paisa@colorado.edu>
+
+	* th.po: Added Thai file
+
+2003-01-22  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* bn.po: Added Bengali file
+
+2003-01-22  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation.
+
+2003-01-21  Christian Rose  <menthos@menthos.com>
+
+	* mn.po: Added Mongolian translation by
+	Sanlig Badral <badral@chinggis.com>.
+
+2003-01-20  Christian Neumair  <chris@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2003-01-20  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* vi.po: Updated Vietnamese file
+
+2003-01-20  Christian Neumair  <chris@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2003-01-16  Daniel Yacob <locales@geez.org>
+
+	* am.po: Added Amharic translation.
+
+2003-01-15  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* ru.po: updated Russian translation
+	from Russian team <gnome-cyr@gnome.org>.
+
+2003-01-14  Yanko Kaneti <yaneti@declera.com>
+
+	* bg.po: Updated Bulgarian translation (style) by
+	Alexander Shopov <al_shopov@yahoo.com>.
+
+2003-01-06  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* ru.po: updated Russian translation
+	from Russian team <gnome-cyr@gnome.org>.
+
+2003-01-05  Pauli Virtanen <pauli.virtanen@hut.fi>
+
+	* fi.po: Updated Finnish translation from Lauri Nurmi.
+
+2003-01-02  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* pl.po: Updated Polish translation by
+	GNOME PL Team <translators@gnome.pl>.
+
+2003-01-02  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation.
+
+2002-12-28  Vincent van Adrighem  <V.vanAdrighem@dirck.mine.nu>
+
+	* nl.po: Dutch translation updated by Tino Meinen.
+
+2002-12-28  Tõivo Leedjärv  <toivo@linux.ee>
+
+	* et.po: Added Estonian translation
+	by Allan Sims <allsi@eau.ee>.
+
+2002-12-27  Vincent van Adrighem  <V.vanAdrighem@dirck.mine.nu>
+
+	* nl.po: Dutch translation updated by Tino Meinen.
+
+2002-12-19  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+2002-12-19  Yanko Kaneti <yaneti@declera.com>
+
+	* bg.po: Updated Bulgarian translation (style) by
+	Alexander Shopov <al_shopov@yahoo.com>.
+
+2002-12-18  Artis Trops  <hornet@navigator.lv>
+
+	* lv.po: Updated Latvian translation.
+
+2002-12-18  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation.
+
+2002-12-18  Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2002-12-18  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* ru.po: updated Russian translation
+	* from Russian team <gnome-cyr@gnome.org>.
+
+2002-12-17  German Poo-Caaman~o
+
+	* es.po: Updated Spanish translation
+
+2002-12-16  Tor Lillqvist  <tml@iki.fi>
+
+	* fi.po: In the admittedly strangely worded "Channel set flags
+	unsupported" message, "set" is a verb.
+
+2002-12-15  Christian neumair  <chris@gnome-de.org>
+
+	* de.po: Updated German translation.
+
+2002-12-15  Christophe Merlet  <redfox@redfoxcenter.org>
+
+	* fr.po: Updated French translation.
+
+2002-12-12  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2002-12-12  Yanko Kaneti <yaneti@declera.com>
+
+	* bg.po: Updated Bulgarian translation.
+
+2002-12-11  Pauli Virtanen <pauli.virtanen@hut.fi>
+
+	* fi.po: Added Finnish translation from Lauri Nurmi.
+
+Wed Dec 11 14:06:50 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* po/Makefile.in.in: Fix problem from recent commit where
+	non GNU-format message catalogs would be installed in
+	datadir. Remove some leftover setting of PATH=../src:$PATH.
+
+2002-12-11  Gil Osher  <dolfin@rpg.org.il>
+
+	* he.po: Added Hebrew translation.
+
+2002-12-09  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokmal) translation.
+	* nn.po: Updated Norwegian (nynorsk) translation from Gaute
+	Hope <gautikk@c2i.net>
+
+2002-12-09  Artis Trops  <hornet@navigator.lv>
+
+	* lv.po: sync with gnome-2-0 branch.
+
+2002-12-05  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Updated Japanese translation.
+
+Tue Dec  3 20:40:56 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* Makefile.in.in: Use datadir, not $(prefix)/share. (#89339)
+
+2002-12-03  Kostas Papadimas <pkst@gmx.net>
+
+	* el.po: updated Greek translation
+
+2002-12-03  Miloslav Trmac  <mitr@volny.cz>
+
+	* cs.po: Merged Czech translation from gnome-2-0.
+
+2002-12-03  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* ru.po: updated Russian translation
+	* from Russian team <gnome-cyr@gnome.org>.
+
+2002-11-30  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation.
+
+2002-11-26  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2002-11-25  Vincent van Adrighem  <V.vanAdrighem@dirck.mine.nu>
+
+	* nl.po: Massive copy-paste from stable branch.
+
+2002-11-25  Hasbullah Bin Pit <sebol@ikhlas.com>
+
+	* ms.po: Updated Malay Translation.
+
+2002-11-22  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokmal) translation.
+
+2002-11-22  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* be.po: Updated Belarusian translation
+	* from Belarusian team <i18n@infonet.by>.
+
+2002-11-13  Laurent Dhima <laurenti@alblinux.net>
+
+	* sq.po: Updated Albanian translation.
+
+2002-11-04  Hasbullah Bin Pit <sebol@ikhlas.com>
+
+	* ms.po: Updated Malay Translation.
+
+2002-11-03  Dmitry G. Mastrukov  <dmitry@taurussoft.org>
+
+	* be.po: Added Belarusian translation
+	* from Belarusian team <i18n@infonet.by>.
+
+2002-10-13  Laurent Dhima  <laurenti@alblinux.net>
+
+	* sq.po:  added albanian translation
+
+2002-10-04  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2002-09-22  Christopher R. Gabriel  <cgabriel@cgabriel.org>
+
+	* it.po:  added italian translation
+
+2002-08-24  Fatih Demir <kabalak@gtranslator.org>
+
+	* ta.po: Committed.
+
+2002-08-23  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+	* fa.po: Updated Persian translation.
+
+2002-08-20  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+	* fa.po: Update Persian translation.
+
+2002-08-20  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+	* fa.po: Added Persian translation.
+
+2002-08-10  Gustavo Noronha Silva  <kov@debian.org>
+
+	* pt_BR: new translation
+
+2002-06-26  Yanko Kaneti <yaneti@declera.com>
+
+	* bg.po (added): Bulgarian translation by
+	Borislav Aleksandrov <B.Aleksandrov@cnsys.bg>.
+
+2002-06-05  Christophe Merlet  <christophe@merlet.net>
+
+	* fr.po: Updated French translation.
+
+2002-06-04  Jordi Mallach  <jordi@sindominio.net>
+
+	* ca.po: Updated Catalan translation.
+
+Wed May 22 15:24:04 2002  Owen Taylor  <otaylor@redhat.com>
+
+	* README.translators: Add from GTK+.
+
+	* *.po: Convert all po files to UTF-8.
+
+2002-05-18  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2002-05-16  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2002-05-12  Christophe Merlet  <christophe@merlet.net>
+
+	* fr.po: Updated French translation.
+
+2002-05-10  Naba Kumar  <kh_naba@users.sourceforge.net>
+
+	* hi.po: New Hindi translation added.
+
+2002-05-06  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* vi.po: Updated Vietnamese file
+
+2002-04-30  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Converted Portuguese translation to UTF-8.
+
+2002-04-29  Pablo Saratxaga  <pablo@mandrakesoft.com>
+
+	* vi.po: Added Vietnamese file
+	* az.po,cs.po,ko.po,lv.po,nn.po: fixed syntax errors
+
+2002-04-28  Christophe Merlet  <christophe@merlet.net>
+
+	* fr.po: Updated French translation.
+
+2002-04-18  Vincent van Adrighem <V.vanAdrighem@dirck.mine.nu>
+
+	* nl.po: Updated Dutch translation by Ronald Hummelink.
+
+2002-04-07  Stanislav Brabec  <utx@penguin.cz>
+
+	* cs.po: Added Czech translation from Petr Pytelka
+	<pyta@lightcomp.cz>.
+
+2002-03-31  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation, and removed
+	all positional parameters :(
+
+2002-03-28  Valek Filippov <frob@df.ru>
+
+	* ru.po: Updated russian translation.
+
+2002-03-17  Valek Filippov <frob@df.ru>
+
+	* ru.po: Updated russian translation.
+
+2002-03-17  Wang Jian  <lark@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation.
+
+2002-03-16  Christian Meyer  <chrisime@gnome.org>
+
+	* de.po: Updated German translation.
+
+2002-03-15  Christophe Merlet  <christophe@merlet.net>
+
+	* fr.po: Updated French translation.
+
+2002-03-10  Valek Filippov <frob@df.ru>
+
+	* ru.po: Updated russian translation.
+
+2002-03-06  Germ� Poo-Caamao <gpoo@ubiobio.cl>
+
+	* es.po: Updated spanish translation.
+
+2002-03-04  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Updated Portuguese translation.
+
+2002-03-03  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2002-03-02  Hasbullah Bin Pit <sebol@ikhlas.com>
+
+	* ms.po: Updated Malay Translation.
+
+2002-03-02  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Updated Korean translation.
+
+2002-03-01  Sven Neumann  <sven@gimp.org>
+
+	* de.po: fixed typo in german translation.
+
+2002-02-28  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation.
+
+2002-02-28  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* pl.po: Updated Polish translation by
+	GNOME PL Team <translators@gnome.pl>.
+
+2002-02-28  Christian Meyer  <chrisime@gnome.org>
+
+	* de.po: Updated German translation.
+
+2002-02-27  Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2002-02-26  Christophe Merlet  <christophe@merlet.net>
+
+	* fr.po: Updated French translation and
+	converted to UTF-8.
+
+2002-02-27  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2002-02-26  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2002-02-25  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Fixed Swedish translation.
+
+2002-02-25  Hasbullah Bin Pit <sebol@ikhlas.com>
+
+	* ms.po: Updated Malay Translation.
+
+2002-02-25  Valek Filippov <frob@df.ru>
+
+	* ru.po: Updated russian translation.
+
+2002-02-25  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2002-02-23  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation.
+
+2002-02-20  Simos Xenitellis  <simos@hellug.gr>
+
+	* el.po: Added Greek translation.
+
+2002-02-19  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2002-02-17  Wang Jian  <lark@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation by
+	Wang Jian.
+
+2002-02-12  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2002-02-10  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2002-02-07  Changwoo Ryu  <cwryu@debian.org>
+
+	* ko.po: Added Korean translation.
+
+2002-02-07  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation.
+
+2002-02-05  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Converted to UTF-8.
+
+2002-01-31  jacob berkman  <jacob@ximian.com>
+
+	* Makefile.in.in: remove cat-id-tbl.c references (this really
+	fixes this build)
+
+	* Makefile.in.in (DISTFILES): remove stamp-cat-id
+
+	* Makefile.in.in: remove references to po2tbl.sed.in
+
+2002-01-31  Roy-Magne Mo  <rmo@sunnmore.net>
+
+	* nn.po: Update Norwegian (nynorsk) translation.
+
+2002-01-29  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* pl.po: Updated Polish translation by
+	GNOME PL Team <translators@gnome.pl>.
+
+2002-01-28  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* pl.po: Updated Polish translation by
+	GNOME PL Team <translators@gnome.pl>.
+
+2002-01-28  Roy-Magne Mo <rmo@sunnmore.net>
+
+	* nn.po: Updated Norwegian (nynorsk) translation and
+	switched to UTF-8.
+
+2002-01-28  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated and converted to UTF-8.
+
+2002-01-27  Dirk-Jan Binnema <djcb@djcbsoftware.nl>
+
+	* nl.po: Updated dutch translation
+
+2002-01-25  Ole Laursen  <olau@hardworking.dk>
+
+	* da.po: Updated Danish translation and switched to UTF-8.
+
+2002-01-23  ERDI Gergo  <cactus@cactus.rulez.org>
+
+	* Makefile.in.in (POTFILES): Remove inlttool [] tags from
+	POTFILE.in
+
+2002-01-21  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* pl.po: Updated Polish translation by
+	GNOME PL Team <translators@gnome.pl>.
+
+2002-01-15  Peteris Krisjanis <peteris.krisjanis@ttc.lv>
+
+	* lv.po: Added Latvian translation.
+
+2002-01-13  Hasbullah Bin Pit  <sebol@ikhlas.com>
+
+	* ms.po: Added Malay (Bahasa Melayu) translation.
+
+2002-01-11  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2002-01-09  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Remove %m$ notation that can't be used with
+	g_set_error().
+
+2002-01-07  Zbigniew Chyla  <cyba@gnome.pl>
+
+	* pl.po: Updated Polish translation by
+	GNOME PL Team <translators@gnome.pl>.
+
+2002-01-04  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2001-12-27  Duarte Loreto <happyguy_pt@hotmail.com>
+
+	* pt.po: Added portuguese translation
+
+2001-12-27  Jesus Bravo Alvarez  <jba@pobox.com>
+
+	* gl.po: Updated Galician translation from
+	Manuel A. Fernandez Montecelo <manuel@sindominio.net>
+
+2001-12-24  Vasif Ismailogu MD  <azerb_linux@hotmail.com>
+
+	* az:po updating Azerbaijani translation file
+
+2001-12-21  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2001-12-19  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2001-12-18  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2001-12-15  Valek Filippov <frob@df.ru>
+
+	* ru.po: Updated russian translation.
+
+2001-12-15  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2001-12-13  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2001-12-11  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2001-12-11  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation.
+
+2001-12-10  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Updated Japanese translation.
+
+2001-12-08  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2001-12-04  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+	* POTFILES.in: Added glib/gdir.c.
+
+2001-12-03  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2001-11-26  Jesus Bravo Alvarez  <jba@pobox.com>
+
+	* gl.po: Added Galician translation from
+	Manuel A. Fern�dez Montecelo <manuel@sindominio.net>
+
+2001-11-23 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
+
+	* nl.po: Added Dutch translation.
+
+2001-11-20  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Updated traditional Chinese translation.
+
+2001-11-15  Takayuki KUSANO  <AE5T-KSN@asahi-net.or.jp>
+
+	* ja.po: Added Japanese translation.
+
+2001-11-14  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2001-11-07  Wang Jian  <lark@linux.net.cn>
+
+	* zh_CN.po: Updated Simplified Chinese translation by
+	Wang Jian.
+
+2001-11-06  Wang Jian  <lark@linux.net.cn>
+
+	* zh_CN.po: Added Simplified Chinese translation by
+	He Qiangqiang <carton@263.net>.
+
+2001-11-01  Marius Andreiana  <mandreiana@yahoo.com>
+
+	* ro.po: added
+
+2001-10-28  jacob berkman  <jacob@ximian.com>
+
+	* Makefile.in.in: install Makefile.in.in and po2tbl.sed.in for use
+	with glib-gettextize by other packages
+
+2001-10-13  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: More updates.
+
+2001-10-13  Valek Filippov <frob@df.ru>
+
+	* ru.po: Added russian translation.
+
+2001-10-12  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2001-10-08  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* ca.po: Updated Catalan file
+
+2001-10-05  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* az.po: Updated Azeri file
+	* eu.po: Updated Basque file
+
+2001-09-29  Fatih Demir <kabalak@gtranslator.org>
+
+	* ta.po: Committed updated Tamil translation by Dinesh.
+
+2001-09-28  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Updated Slovak translation.
+
+2001-09-28  Tor Lillqvist  <tml@iki.fi>
+
+	* POTFILES.in: Add iochannel.c and giowin32.c.
+
+	* sv.po: Remove a bogus fuzziness indicator.
+
+2001-09-25  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* ca.po: Updated Catalan file
+
+2001-09-24  Stanislav Visnovsky  <visnovsky@nenya.ms.mff.cuni.cz>
+
+	* sk.po: Added Slovak translation.
+
+2001-09-23  Fatih Demir <kabalak@gtranslator.org>
+
+	* ta.po: Committed updated Tamil translation by Dinesh.
+
+2001-09-23  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* az.po: Updated Azeri file
+
+2001-09-19  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Updated Norwegian (bokm�) translation.
+
+2001-09-11  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2001-09-06  Roy-Magne Mo  <rmo@sunnmore.net>
+
+	* nn.po: Updated Norwegian nynorsk translation
+
+2001-09-05  Ross Golder  <rossg@golder.org>
+
+	* Makefile.in.in (install-data-yes): Take DESTDIR into account
+
+Wed Sep  5 09:27:34 2001  Owen Taylor  <otaylor@redhat.com>
+
+	* Revert last change to Makefile.in.in - no this
+	is not the Makefile.in.in from gettext.
+
+2001-09-05  Ross Golder  <ross@golder.org>
+
+	* Makefile.in.in: Updated from more recent gettext to fix
+	problem with DESTDIR.
+
+2001-09-02  Carlos Perell Mar� <carlos@gnome-db.org>
+
+	* es.po: Added Spanish translation by jos�antonio salgueiro
+	<joseantsa@retemail.es>
+
+2001-08-21  Abel Cheung  <maddog@linux.org.hk>
+
+	* zh_TW.po: Preliminary traditional Chinese translation.
+
+2001-08-19  Fatih Demir <kabalak@gtranslator.org>
+
+	* ta.po: Added Tamil translation by.
+
+2001-07-29  Christian Meyer  <chrisime@gnome.org>
+
+	* de.po: Removed one fuzzy.
+
+2001-07-17  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* nn.po: Added Norwegian (nynorsk) translation.
+
+2001-07-06  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Updated Swedish translation.
+
+2001-07-06  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* eu.po: Added Basque file
+
+2001-06-27  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Completed Norwegian translation.
+	* POTFILES.in: Adjusted to fit the move of the .c files.
+
+2001-06-08  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* az.po: Added Azeri file
+
+2001-05-15  Matthias Warkus  <mawarkus@gnome.org>
+
+	* de.po: Brought this up to date.
+
+2001-04-30  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+	* ca.po: Added Catalan file
+
+2001-04-05  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: And other fixes. Thanks to Gran Uddeborg
+	<goeran@uddeborg.pp.se>.
+
+2001-04-05  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Fixed another message in the Swedish translation. Thanks to
+	Jrgen Tegn� <teg@post.utfors.se>.
+
+2001-04-05  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Fixed Swedish translation, thanks to Veronica Loell
+	<info@nakawe.se> and Martin Norb�k <d95mback@dtek.chalmers.se>.
+
+2001-04-05  Christian Rose  <menthos@menthos.com>
+
+	* sv.po: Added Swedish translation.
+
+2001-30-03  Christian Meyer  <chrisime@gnome.org>
+
+	* de.po: Updated German translation.
+
+2001-07-03  Christian Meyer  <chrisime@gnome.org>
+
+	* de.po: Added German translation.
+
+2001-03-02  Christophe Merlet  <christophe@merlet.net>
+
+	* fr.po: Added French translation.
+
+2001-02-19  Valek Filippov <frob@df.ru>
+
+	* ru.po: Added russian translation.
+
+2001-02-08  Fatih Demir	<kabalak@kabalak.net>
+
+	* tr.po: Added the Turkish translation by
+	Kemal Yilmaz.
+
+2001-01-18  Kjartan Maraas  <kmaraas@gnome.org>
+
+	* no.po: Added Norwegian translation.
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..9b08579
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,90 @@
+# please keep this list sorted alphabetically
+#
+am
+ar
+as
+az
+be
+be@latin
+bg
+bn
+bn_IN
+bs
+ca
+ca@valencia
+cs
+cy
+da
+de
+dz
+el
+en_CA
+en_GB
+eo
+es
+et
+eu
+fa
+fi
+fr
+ga
+gl
+gu
+he
+hi
+hr
+hu
+hy
+id
+is
+it
+ja
+ka
+kn
+ko
+ku
+lt
+lv
+mai
+mg
+mk
+ml
+mn
+mr
+ms
+nb
+ne
+nl
+nn
+oc
+or
+pa
+pl
+ps
+pt
+pt_BR
+ro
+ru
+rw
+si
+sk
+sl
+sq
+sr
+sr@latin
+sr@ije
+sv
+ta
+te
+th
+tl
+tr
+tt
+uk
+vi
+wa
+xh
+yi
+zh_CN
+zh_HK
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..15d6a20
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,270 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+#
+# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+#   instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob@ximian.com> to install
+#   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = @SHELL@
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+libdir = @libdir@
+localedir = $(libdir)/locale
+gnulocaledir = $(datadir)/locale
+gettextsrcdir = $(datadir)/glib-2.0/gettext/po
+subdir = po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+XGETTEXT = @XGETTEXT@
+MSGMERGE = msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = 
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \
+$(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+	$(COMPILE) $<
+
+.po.pox:
+	$(MAKE) $(GETTEXT_PACKAGE).pot
+	$(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox
+
+.po.mo:
+	$(MSGFMT) -o $@ $<
+
+.po.gmo:
+	file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+	  && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $<
+
+.po.cat:
+	sed -f ../intl/po2msg.sed < $< > $*.msg \
+	  && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+$(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES)
+	$(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) --directory=$(top_srcdir) \
+	  --add-comments --keyword=_ --keyword=N_ \
+          --flag=g_strdup_printf:1:c-format \
+          --flag=g_string_printf:2:c-format \
+          --flag=g_string_append_printf:2:c-format \
+          --flag=g_error_new:3:c-format \
+          --flag=g_set_error:4:c-format \
+          --flag=g_markup_printf_escaped:1:c-format \
+          --flag=g_log:3:c-format \
+          --flag=g_print:1:c-format \
+          --flag=g_printerr:1:c-format \
+          --flag=g_printf:1:c-format \
+          --flag=g_fprintf:2:c-format \
+          --flag=g_sprintf:2:c-format \
+          --flag=g_snprintf:3:c-format \
+          --flag=g_scanner_error:2:c-format \
+          --flag=g_scanner_warn:2:c-format \
+	  --files-from=$(srcdir)/POTFILES.in \
+	&& test ! -f $(GETTEXT_PACKAGE).po \
+	   || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \
+		&& mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot )
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+	if test -r "$(MKINSTALLDIRS)"; then \
+	  $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
+	else \
+	  $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
+	fi
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  case "$$cat" in \
+	    *.gmo) destdir=$(gnulocaledir);; \
+	    *)     destdir=$(localedir);; \
+	  esac; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
+	  if test -r "$(MKINSTALLDIRS)"; then \
+	    $(MKINSTALLDIRS) $$dir; \
+	  else \
+	    $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+	  fi; \
+	  if test -r $$cat; then \
+	    $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	    echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
+	  else \
+	    $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	    echo "installing $(srcdir)/$$cat as" \
+		 "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
+	  fi; \
+	  if test -r $$cat.m; then \
+	    $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	    echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \
+	  else \
+	    if test -r $(srcdir)/$$cat.m ; then \
+	      $(INSTALL_DATA) $(srcdir)/$$cat.m \
+		$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	      echo "installing $(srcdir)/$$cat as" \
+		   "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \
+	    else \
+	      true; \
+	    fi; \
+	  fi; \
+	done
+	if test "$(PACKAGE)" = "glib"; then \
+	  if test -r "$(MKINSTALLDIRS)"; then \
+	    $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
+	  else \
+	    $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
+	  fi; \
+	  $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+			  $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+	else \
+	  : ; \
+	fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	  rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+	  rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+	done
+	if test "$(PACKAGE)" = "glib"; then \
+	  rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+	fi
+
+check: all
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+	rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f $(GMOFILES)
+
+distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	for file in $$dists; do \
+	  ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+	    || cp -p $(srcdir)/$$file $(distdir); \
+	done
+
+update-po: Makefile
+	$(MAKE) $(GETTEXT_PACKAGE).pot
+	tmpdir=`pwd`; \
+	cd $(srcdir); \
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+	  echo "$$lang:"; \
+	  if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \
+	    if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	      rm -f $$tmpdir/$$lang.new.po; \
+            else \
+	      if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	        :; \
+	      else \
+	        echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	        rm -f $$tmpdir/$$lang.new.po; \
+	        exit 1; \
+	      fi; \
+	    fi; \
+	  else \
+	    echo "msgmerge for $$cat failed!"; \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  fi; \
+	done
+
+# POTFILES is created from POTFILES.in by stripping comments, empty lines
+# and Intltool tags (enclosed in square brackets), and appending a full
+# relative path to them
+POTFILES: POTFILES.in
+	( if test 'x$(srcdir)' != 'x.'; then \
+	    posrcprefix='$(top_srcdir)/'; \
+	  else \
+	    posrcprefix="../"; \
+	  fi; \
+	  rm -f $@-t $@ \
+	    && (sed -e '/^#/d' 						\
+		    -e "s/^\[.*\] +//" 					\
+		    -e '/^[ 	]*$$/d' 				\
+		    -e "s@.*@	$$posrcprefix& \\\\@" < $(srcdir)/$@.in	\
+		| sed -e '$$s/\\$$//') > $@-t \
+	    && chmod a-w $@-t \
+	    && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+	cd .. \
+	  && $(SHELL) ./config.status $(subdir)/$@.in
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..cd9ef43
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,78 @@
+glib/gatomic.c
+glib/gbookmarkfile.c
+glib/gconvert.c
+glib/gdir.c
+glib/gfileutils.c
+glib/giochannel.c
+glib/giowin32.c
+glib/gmappedfile.c
+glib/gmarkup.c
+glib/gregex.c
+glib/gshell.c
+glib/gspawn-win32.c
+glib/gspawn.c
+glib/gutf8.c
+glib/goption.c
+glib/gkeyfile.c
+gio/gappinfo.c
+gio/gasynchelper.c
+gio/gasyncresult.c
+gio/gbufferedinputstream.c
+gio/gbufferedoutputstream.c
+gio/gcancellable.c
+gio/gcontenttype.c
+gio/gdatainputstream.c
+gio/gdataoutputstream.c
+gio/gdesktopappinfo.c
+gio/gdrive.c
+gio/gdummyfile.c
+gio/gemblem.c
+gio/gemblemedicon.c
+gio/gfileattribute.c
+gio/gfile.c
+gio/gfileenumerator.c
+gio/gfileicon.c
+gio/gfileinfo.c
+gio/gfileinputstream.c
+gio/gfilemonitor.c
+gio/gfilenamecompleter.c
+gio/gfileoutputstream.c
+gio/gfilterinputstream.c
+gio/gfilteroutputstream.c
+gio/gicon.c
+gio/ginputstream.c
+gio/gioerror.c
+gio/giomodule.c
+gio/gioscheduler.c
+gio/gloadableicon.c
+gio/glocaldirectorymonitor.c
+gio/glocalfile.c
+gio/glocalfileenumerator.c
+gio/glocalfileinfo.c
+gio/glocalfileinputstream.c
+gio/glocalfilemonitor.c
+gio/glocalfileoutputstream.c
+gio/glocalvfs.c
+gio/gmemoryinputstream.c
+gio/gmemoryoutputstream.c
+gio/gmount.c
+gio/gmountoperation.c
+gio/gnativevolumemonitor.c
+gio/goutputstream.c
+gio/gpollfilemonitor.c
+gio/gseekable.c
+gio/gsimpleasyncresult.c
+gio/gthemedicon.c
+gio/gunionvolumemonitor.c
+gio/gunixinputstream.c
+gio/gunixmount.c
+gio/gunixmounts.c
+gio/gunixoutputstream.c
+gio/gunixvolume.c
+gio/gunixvolumemonitor.c
+gio/gvfs.c
+gio/gvolume.c
+gio/gvolumemonitor.c
+gio/gwin32appinfo.c
+gio/win32/gwinhttpfile.c
+tests/gio-ls.c
diff --git a/po/README.translators b/po/README.translators
new file mode 100644
index 0000000..984392c
--- /dev/null
+++ b/po/README.translators
@@ -0,0 +1,25 @@
+All the .po files are now in UTF-8!
+
+For information on editing UTF-8 files on Unix, see
+<http://www.cl.cam.ac.uk/~mgk25/unicode.html>
+
+If you just want to convert it back to your native encoding to
+edit and then convert again to UTF-8 to commit, please see the
+scripts in gnome-i18n/UTF-8, for example
+
+  export ENCODING_TO=ISO-8859-15
+  utftopo fi.po
+  emacs fi.po
+  potoutf.sh fi.po
+  cvs commit fi.po
+
+Alternatively, you can use the gettext package (>= 0.11) to convert
+your translation to and from your native encoding:
+
+msgconv -t ISO-8859-15 fi.po > fi.native.po
+emacs fi.native.po
+msgconv -t UTF-8 fi.native.po > fi.po
+cvs commit fi.po
+
+If you need help with this, ask, but please don't commit
+non-UTF-8 files here.
diff --git a/po/am.po b/po/am.po
new file mode 100644
index 0000000..c6427ca
--- /dev/null
+++ b/po/am.po
@@ -0,0 +1,1798 @@
+# Translations into the Amharic Language.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Ge'ez Frontier Foundation <locales@geez.org>, 2002.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2003-01-16 08:39+EDT\n"
+"Last-Translator: Ge'ez Frontier Foundation <locales@geez.org>\n"
+"Language-Team: Amharic <locales@geez.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr ""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr ""
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s'ን ተቀብሏል"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr ""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr ""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr ""
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr ""
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr ""
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr ""
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "የማይሰራ የUTF-8 ጽሑፍ"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "የማይሰራ የUTF-8 ጽሑፍ"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "የማይሰራ የUTF-8 ጽሑፍ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr ""
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr ""
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr ""
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "የእንግዳ ተቀባይ ስም ተቀብሏል"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr ""
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "ፋይል '%s'ን ለማንበብ ስህተት አለ፦ %s"
+
+#~ msgid "Socket error"
+#~ msgstr "የሶከት ስህተት"
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..4abf0ea
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,1816 @@
+# translation of glib.HEAD.po to Arabic
+# translation of glib.po to
+# Copyright (C) 2001,2002,2003, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# Isam Bayazidi <bayazidi@arabeyes.org>, 2001,2002.
+# Arafat Medini <lumina@silverpen.de>, 2003.
+# Djihed Afifi <djihed@gmail.com>, 2006, 2007.
+# Khaled Hosny <khaledhosny@eglug.org>, 2006, 2007, 2008.
+# Anas Afif Emad <anas.e87@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-09-17 05:06+0300\n"
+"Last-Translator: Anas Afif Emad <anas.e87@gmail.com>\n"
+"Language-Team: Arabic <doc@arabeyes.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "صفة غير متوقّعة '%s' للعنصر '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "الصفة '%s' للعنصر '%s' غير موجودة"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "وسْم غير متوقع '%s'، توقّعت الوسْم '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "وسْم غير متوقّع '%s' داخل '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "لا يوجد ملف علامات سليم في أدلّة البيانات"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "توجد بالفعل علامة للمسار '%s'"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "لا توجد علامة للمسار '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "لم يعرّف نوع MIME في علامة المسار '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "لم يعرف علم خاص في العلامات للمسار '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "لم تحدد أي مجموعات في علامة '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "لم يسجل أي تطبيق بالاسم '%s' علامة '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "فشل تمديد سطر exec '%s' بالمسار '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "التحويل من مجموعة المحارف '%s' إلى '%s' غير مدعوم"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "تعذّر فتح المُحوِّل من '%s' إلى '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "سلسلة بايتات غير سليمة في دخْل التحويل"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "خطأ أثناء التحويل: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "تتابع محارف جزئي عند نهاية الدخْل"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "تعذّر تحويل fallback '%s' إلى مجموعة المحارف '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "المسار '%s' ليس مسارا مطلقا باستخدام المخطط \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "ملف المسار المحلي '%s' لا يمكن أن يحتوي على '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "المسار '%s' غير سليم"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "اسم مستضيف المسار '%s' غير سليم"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "المسار '%s' يحتوي على محارف خلوص غير سليمة "
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "اسم المسار '%s' ليس مسارا كاملا"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "اسم المستضيف غير سليم"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "خطأ أثناء فتح الدليل '%s'‏: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "تعذّر تحصيص %Ilu بايتات لقرائة الملف \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "خطأ عند قراءة الملف '%s'‏: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "الملف \"%s\" كبير جدا"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "فشلت القراءة من الملف '%s'‏: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "فشل فتح الملف '%s'‏: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "فشلت في أخذ صفات الملف '%s': فشل fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "فشل فتح الملف '%s': فشل fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "فشل إعادة تسمية الملف '%s' إلى '%s': فشل g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "فشل إنشاء الملف '%s'‏: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "فشل فتح الملف '%s' للكتابة: فشل fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "فشلت في كتابة الملف '%s': فشل fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "فشلت في كتابة الملف '%s': فشل fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "فشلت في كتابة الملف '%s': فشل fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "فشلت في غلق الملف '%s': فشل fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "لا يمكن حذف الملف الموجود مسبقا '%s': فشل g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "القالب '%s' غير سليم، لا يجب أن يحتوي على '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "لا يحتوي القالب '%s' على XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%I.1f ك.بايت"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%I.1f م.بايت"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%I.1f ج.بايت"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "فشلت قراءة الوصلة الرمزية '%s'‏: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "الوصلات الرمزية غير مدعومة"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "تعذّر فتح المُحوِّل من '%s' إلى '%s'‏: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "لا يمكن عمل قراءة خام في g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "بيانات غير مُحوّلة باقية في حاجز القراءة الخلفي"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "تنتهي القناة عند محرف جزئي"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "لا يمكن عمل قراءة خام في g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "فشل فتح الملف '%s': فشل open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "فشل في مقابلة الملف '%s'‏: mmap() فشل: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "خطأ في السطر %Id الرمز %Id: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "خطأ في السطر %Id‏: ‎%s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "رُؤي كيان فارغ '&;'، الكيانات السليمة هي:&amp; &quot; &lt; &gt; &apos; "
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"المحرف '%s' غير سليم عند بداية اسم الكيان؛ المحرف & يبدأ كيانا، ان كان علامة "
+"اﻻمبارساند هذه غير موضوعة على انها كيان، تخطاها باعتبارها &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "المحرف '%s' غير موجود داخل اسم أي كيان"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "اسم الكيان '%s' غير معروف"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"اسم الكيان لم ينته بفاصلة منقوطة؛ الأرجح أنك استخدمت علامة & دون أن تنوي بدء "
+"كيان - تخطى العلامة عن طريق اعتبارها &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"فشل في تحليل '%-.*s'، والتي كان لابد من كتبتها بالأرقام داخل مرجع محرف "
+"(&#234; كمثال) - ربما الرقم كبير جدًا"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "مرجع المحرف '%-.*s'  لا يقوم بترميز محرف مسموح به"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "مرجع محرف فارغ؛ يجب أن يتضمن رقما مثل &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"مرجع المحرف لم ينته بفاصلة منقوطة؛ الأرجح أنك استخدمت علامة امبارساند دون أن "
+"تنوي بدء كيان - تخطا العلامت عن طريق اعتبارها &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "مرجع كيان غير مكتمل"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "مرجع محرف غير مكتمل"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "نص مرمّز بـ UTF-8 غير سليم - سلسة طويلة جدا"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "نص مرمّز بـ UTF-8 غير سليم - ليس محرف بداية"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "نص مرمّز بـ UTF-8 غير سليم - غير سليم '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "يجب أن يبدأ المستند بعنصر (<book> مثلا)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'%s' محرف غير سليم بعد المحرف '<'؛  ربما لا يبدأ هذا المحرف اسم عنصر"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "محرف غريب '%s'،  توقعت محرف '>' لإنهاء بداية وسم العنصر '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "محرف غريب '%s'، توقعت '=' بعد اسم الصفة  '%s' للعنصر '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"محرف غريب '%s'، توقعت المحرف '>' أو '/' لإنهاء علامة البداية للعنصر '%s'، أو "
+"بشكل اختياري صفة؛ ربما استخدمت محرفًا غير صالح في اسم صفة"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"محرف غريب '%s'، توقعت علامة اقتباس مفتوحة بعد علامة التساوي عند إعطاء قيمة "
+"من الصفة '%s' للعنصر '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "‏'%s' محرف غير صالح بعد الرموز ‪'</'; '%s'‬ ربما لن يبدأ اسم عنصر"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "'%s' محرف غير صالح بعد اغلاق اسم العنصر '%s'؛ المحرف المسموح به هو '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "العنصر '%s' كان مغلقا، لا عنصر مفتوح حاليا"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "العنصر '%s' كان مغلقا، لكن العنصر المفتوح حاليا هو '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "المستند كان فارغا أو كان يحتوي فقط على مساحات فارغة"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "انتهى المستند بشكل غير متوقع بعد قوس بزاوية ‪'<'‬"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"انتهى المستند بشكل غير متوقع مع عناصر لا زالت مفتوحة - '%s' كان آخر عنصر "
+"مفتوح"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"انتهى المستند بشكل غير متوقع، توقعت رؤية قوس ذا زاوية لينهي العلامة‪<%s/>‬"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "انتهى المستند بشكل غير متوقع داخل اسم عنصر"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "انتهى المستند بشكل غير متوقع داخل اسم صفة"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "انتهى المستند بشكل غير متوقع بعد علامة فتح عنصر."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"انتهى المستند بشكل غير متوقع بعد علامة التساوي اثر اسم صفة؛ لا توجد قيمة "
+"للصفة"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "انتهى المستند بشكل غير متوقع وهو داخلَ قيمة صفة"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "انتهى المستند بشكل غير متوقع داخل علامة انهاء للعنصر '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "انتهى المستند بشكل غير متوقع داخل تعليق أو تعليمات معالجة"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "كائن تالف"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "خطأ داخلي أو كائن تالف"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "نفذت الذّاكرة"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "وُصِلَ للحد المسموح به من أمكنة الرجوع للوراء"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "المثال يحتوي على عناصر لا تحتمل التطابق الجزئي"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "خطأ داخلي"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "المراجع الرجعية غير مدعومة كشرط للتطابق الجزئي"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "وُصِلَ للحد المسموح به من التواتر"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "وُصِلَ للحد المسموح به لمساحة العمل بالسلاسل الجزئية الفارغة"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ائتلاف غير صحيح لأعلمة السطر الجديد"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "خطأ مجهول"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ في نهاية النمط"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "‏\\c في نهاية النمط"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "رمز غير معروف بعد \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "خلوصات تغيير المحارف (\\l, \\L, \\u, \\U) غير مسموح بها هنا"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "الأعداد خارج التغطية في المكمم {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "العدد كبير جدا في المكمم {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "الرمز  ] غير موجود"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "سلسلة غير سليمة"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "مجال خارج التغطية في نوع الرموز"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "لا شيئ للإعادة"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "رمز غير معروف بعد (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "رمز غير معروف بعد (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "رمز غير معروف بعد (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "أصناف POSIX المسماة مدعومة فقط داخل صنف"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "القوس الغالق غير موجود )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") بلا قوس فاتح ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "‏(?R  أو  (?[+-] أرقام يجب أن تتبع ب  )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "إشارة لقالب داخلي غير موجود"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "الرمز ) غير موجود بعد التعليق"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "قالب كبير جدًّا"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "فشل تلقي الذاكرة"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "مصادقة العثور الخلفي ليست بحجم واحد"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "اسم أو عدد غير صحيح بعد (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "المجموعة الشرطية تحتوي على أكثر من فرعين"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "مصادقة منتظرة بعد (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "اسم نوع POSIX غير معروف"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "عناصر الترتيب POSIX غير مدعومة"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "قيمة الرمز في سلسلة  \\x{...} كبيرة جدًا"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "شرط غير صحيح (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "‏\\C غير مسموحة له عند العثور الخلفي"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "الوظيفة التكرارية يمكن أن تستمر إلى ما لا نهاية"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "منهي غير موجود في اسم القالب الداخلي"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "هناك قالبان داخليان لهما نفس الاسم"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "سلسلة \\P أو  \\p سيئة التركيب"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "اسم خاصية غير معروفة بعد \\P أو \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "اسم القالب الداخلي كبير جدا"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "هناك عدد كبير جدا من اسماء القوالب الداخلية (الأقصى 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "القيمة الثمانية أكبر من \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "مجموعة DEFINE تحتوي على أكثر من فرع واحد"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "إعادة مجموعة DEFINE غير مسموحة"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "خيارات NEWLINE غير صحيحة "
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "‏\\g  غير متبوعة باسم قوس أو عدد بقوس"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "إعادة غير متوقعة"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "فيضان الرموز"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "خطأ تركيب مساحة العمل"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "القالب الداخلى المراقب مسبقا غير موجود"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "خطأ عند تطابق جملة المقارنة %s: ‏%s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "تم تجميع مكتبة PCRE من دون دعم UTF8 "
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "تم تجميع مكتبة PCRE من دون دعم خصائص UTF8 "
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "خطأ عند تجميع جملة المقارنة %s عند المحرف %Id: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "خطأ عند تحسين جملة المقارنة %s: ‏%s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "رقم من نظام 16 أو '}' متوقع"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "رقم من نظام 16 متوقع"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "'<' غير موجود في المرجع الرمزي"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "مرجع كيان غير مكتمل"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "مرجع رمزي معدوم الطول"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "رقم متوقع"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "مرجع كيان غير صحيح"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "نتيجة نهائية '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "سلسلة خروج غير معروفة"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "خطأ عند قراءة نص الإستبدال \"%s\" عند المحرف %Ilu: ‏%s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "النص المقتبس لا يبدأ بعلامة اقتباس"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "علامة اقتباس غير مطابقة في سطر الأوامر أو نص منقول من الصدفة"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "انتهى النص بعد المحرف '\\' (النص كان '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "انتهى النص قبل ايجاد المُقتَبَس لـ%c (النص كان '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "كان النص فارغا (أو كان يحتوي على فراغ أبيض)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "فشلت قراءة البيانات من العملية الإبنة"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "فشل عمل أنبوب للاتصال بالعملية الإبنة (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "فشلت القراءة من الأنبوب الإبن (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "فشل التغيير إلى الدليل '%s' ‏(%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "فشل تنفيذ العملية الإبنة (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "اسم برنامج غير صحيح: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "سلسلة غير صالحة في متجه الأحجية عند %Id: ‏%s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "سلسلة غير صالحة في البيئة: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "دليل عمل غير سليم: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "فشل تنفيذ البرنامج المساعد (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "خطأ غير متوقع في g_io_channel_win32_poll() أثناء القراءة من عملية ابنة"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "فشلت قراءة البيانات من العملية الإبنة (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "خطأ غير متوقع في select() أثناء قراءة البيانات من العملية الإبنة (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "خطأ غير متوقع في waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "فشل تشعيب (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "فشل تنفيذ العملية الإبنة \"%s\" ‏(%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "فشل اعادة توجيه الخرْج أو الدخْل للعملية الإبنة (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "فشل تشعيب العملية الإبنة (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "خطأ غير معروف أثناء تنفيذ العملية الإبنة \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "فشلت قراءة بيانات كافية من أنبوب child pid ‏(%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "محرف خارج حدود UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "تتابع غير سليم في دخْل التحويل"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "محرف خارج حدود UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "الاستخدام:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "خيارات المساعدة:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "اعرض خيارات المساعدة"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "اعرض كل خيارات المساعدة"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "خيارات التطبيق:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "تعذّر تحليل قيمة العدد الصحيح '%s' ل %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "قيمة الرقم الصحيح '%s' ل %s خارج المجال"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "تعذّر تحليل القيمة المزدوجة '%s' ل %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "القيمة المزدوجة '%s' ل %s خارج المجال"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "خطأ أثناء تحليل الخيار %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "معامل %s مفقود"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "خيار مجهول %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "لا يمكن إيجاد ملف مفتاح صحيح في دلائل البحث"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ليس ملفا اعتياديا"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "الملف فارغ"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"ملف المفتاح يحتوي على سطر '%s' والذي ليس زوج قيمة مفاتيح ، مجموعة ، أو تعليق"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "اسم مجموعة غير صحيح: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "لا يبدأ ملف المفتاح بمجموعة"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "اسم مفتاح غير صحيح: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "يحتوي ملف المفتاع على ترميز غير مدعوم '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "لا يحتوي ملف المفتاح على المجموعة '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "لا يحتوي ملف المفتاح على المفتاح '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "يحتوي ملف المفتاح على المفتاح '%s' ذو القيمة '%s' التي ليست UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "ملف المفتاح يحتوي على مفتاح '%s' والذي لديه قيمة لايمكن تفسيرها."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"ملف المفتاح يحتوي على مفتاح '%s'في المجموعة '%s'والتي لديها قيمة لايمكن "
+"تفسيرها."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "لا يحتوي ملف المفتاح على مفتاح '%s' في المجموعة '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "ملف المفتاح يحتوي على محرف الخلوص في آخر السطر"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "ملف المفتاح يحتوي على تتابع خلوص غير صالح '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "لا يمكن تفسير القيمة '%s' كعدد."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "قيمة عدد صحيح '%s' خارج المدى"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "لا يمكن تفسير القيمة '%s' كعدد عشري."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "لا يمكن تفسير القيمة '%s' كعدد منطقي."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "مُرِّرت قيمة كبيرة جدّا إلى %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "سبق إغلاق الدَفق "
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "أُلغيت العملية "
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "نوع مجهول"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "نوع ملفّ %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "نوع %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "نهاية دَفق غير متوقّعة وغير متوقعة "
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "غير مسمّى"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ملف سطح المكتب لم يحدد الحقل التنفيدي"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "تعذّر إيجاد الطرفية المطلوبة للتطبيق"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "تعذّر إنشاء مجلد التهيئة الخاص بتطبيق المستخدم %s: ‏%s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "لا يمكن إنشاء مجلد التهيئة MIME %s للمستخدم: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "لا يمكن إنشاء الملف %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "تعريف مخصص لِ %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "محرك الأقراص لا ينفذ القذف"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "محرك الأقراص لا ينفذ جسّ الوسائط"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "عمليّة غير مدعومة"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "الوصل الحاوي غير موجود"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "لا يمكنك نقل دليل على دليل"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "لا يمكنك نسخ دليل على دليل"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "الملف الهدف موجود مسبّقا"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr " لا يمكنك النسخ التكراري للدليل "
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "لا يمكنك نقل دليل على دليل"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "  قيمة الوصلة الرمزية المُعطاة غير سليمة"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "المهملات غير مدعومة"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "لا يمكن  لأسماء الملفات أن تحتوي على '%c'  "
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "الجهاز لا ينفذ الوَصل"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "لم يسجل أي تطبيق كمعالج لهذا الملف"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "المُعدِّد مغلق"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "مُعدد الملف له عملية عالقة"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "مُعدد الملف سبق إغلاقه"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ملف"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "الملف الذي يحتوي على الأيقونة"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "الدَفق لا يدعم query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "عملية السعي البحث غير مُدعمة على الدَفق"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "البَتْرُ غير مسموح به على دَفق الإدخال"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "البَتْرُ غير مدعم على الدَفق"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "دَفق الإدخال لا يُنَفذ القراءة"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr " للدَفق عملية عالقة"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "تعذّر ايجاد نوع المراقبة للدليل المحلي الافتراضي "
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "اسم ملف غير صالح %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "خطأ أثناء تلقي معلومات نظام الملفات: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr " لا يمكنك إعادة تسمية الدليل الجذري  "
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "خطأ عند إعادة تسمية الملف: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "لا يمكنك إعادة تسمية الملف، اسم الملف موجود بالفعل"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "اسم ملف غير صالح"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "خطأ عند فتح الملف: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "لا يمكن فتح الدّليل"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "خطأ عند حذف الملف: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "خطأ عند ارسال الملف للمهملات: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "تعذّر إنشاء مجلد سلة المهملات %s: ‏%s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "تعذّر إيجاد دليل المستوى الأعلى للمهملات"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "تعذّر ايجاد أو إنشاء دليل المهملات"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "تعذّر إنشاء ملف المُهْملات: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "تعذّر نقل الملف: %s إلى المهملات "
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "خطأ أثناء إنشاء الدليل: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "خطأ أثناء تشكيل الوصلة الرمزية: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "خطأ عندنقل الملف: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "لا يمكنك نقل دليل على دليل"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "فشل إنشاء ملف النسخة الاحتياطية"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "خطأ في إزالة الملف الهدف: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "النقل بين الوصلات غير مدعوم"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "قيمة الخاصية لا بد أن تكون غير منعدمة"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "نوع الخاصية غير سليم ( يُفترض أن يكون مقطعا )"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "اسم غير سليم للخاصية الممتدة"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "خطأ عند تعيين الخاصية الممتدة '%s'‏: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "خطأ عند تناول الملف '%s'‏: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr "  (ترميز غير سليم)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "خطأ فى تناول واصف الملف: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "نوع الخاصية غير سليم ( يُفترض uint32 )"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "نوع الخاصية غير سليم ( يُفترض uint64 )"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "نوع الخاصية غير سليم ( يُنتضر مقطع بايت )"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "خطأ تعيين الأذونات: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "خطأ تعيين المالك: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "يجب أن يكون فهرس القائمة غير سلبي"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "خطأ أثناء تعيين الوصلة الرمزية: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "خطأ في تعيين الوصلة الرمزية: الملف ليس وصلة رمزية"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "يجب ألا يكون سياق SELinux صفرا"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "خطأ في ضبط سياق SELinux: ‏%s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "‏SELinux ليس مفعلا على هذا النظام"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "تعيين الصفة %s غير مُدَعَّم"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "خطأ أثناء القراءة من الملف: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "خطأ أثناء تصفح الملف: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "خطأ عند غلق الملف: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "تعذّر إيجاد نوع المراقبة للملف المحلي الافتراضي "
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "خطأ في الكتابة للملف: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "خطأ أثناء إزالة وصلة النسخة الاحتياطية القديمة: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "خطأ أثناء إنشاء النسخة الاحتياطية: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "خطأ عند إعادة تسمية الملف المؤقت: %s "
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "خطأ أثناء بَتْر الملف: %s "
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "خطأ عند فتح الملف '%s'‏: %s "
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "الملف الهدف هو دليل"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "الملف الهدف هو ليس ملفًا عاديًا"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "تمّ تعديل الملف خارجيّا"
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "خطأ عند حذف الملف: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "تم تقديم GSeekType غير سليم"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "طلب بحث غير سليم"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "تعذر بَتْرُ GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "تَمَّ بُلوغ أقصى حد لمصفوفة المعطيات"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "دَفْقُ الاخراج للذاكرة غير قابل لتغيير القياس"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "فشل تغيير قياس دَفْقُ الاخراج للذاكرة"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "نقطة الوصل لا تدعم الفصل"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "نقطو الوصْل لا يتدعم الإخراج"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "نقطة الوصل لا تدعم إعادة الوصل"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "نقطة الوصل لا تدعم تخمين نوع المحتوى"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "نقطة الوصل لا تدعم التخمين المتزامن لنوع المحتوى"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "دَفْقُ الاخراج لا يدعم الكتابة"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "دَفْقُ المَصدر سبق إغلاقه"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "اسم"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "اسم الأيقونة"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "أسماء"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "مصفوفة تحتوي أسماء الأيقونات"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "استخدم الاحتياط المبدئي"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"ما إذا سيستخدم الاحتياط المبدئي الموجود بقص الأسماء عند محارف '-'. تجاهل "
+"الأسماء بعد الأول إذا خدد أكثر من اسم."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "خطأ فى تناول واصف الملف: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "خطأ عند القراءة من يونكس: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "خطأ عند غلق يونكس: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "جذر نظام الملفّات"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "خطأ أثناء الكتابة إلى يونكس: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "الجزء لا يدعم الإخراج"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "تعذّر العثور على التّطبيق"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "خطأ عند تشغيل التطبيق: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "المسارات غير مدعومة"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "تغيير الترابطات غير مدعوم على win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "إنشاء الترابط غير مدعوم على win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "لا تخفِ العناصر"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "استخدم تهيئة العرض المسترسل"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ملف...]"
diff --git a/po/as.po b/po/as.po
new file mode 100644
index 0000000..fe590b4
--- /dev/null
+++ b/po/as.po
@@ -0,0 +1,1819 @@
+# translation of as.po to Assamese
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Amitakhya Phukan <amitakhya@svn.gnome.org>, 2007, 2008.
+# Amitakhya Phukan <aphukan@fedoraproject.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: as\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-18 11:59+0530\n"
+"Last-Translator: Amitakhya Phukan <aphukan@fedoraproject.org>\n"
+"Language-Team: Assamese <fedora-trans-as@redhat.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n!=1)\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "অপ্ৰত্যাশিত গুণ '%s' পদাৰ্থ '%s' ৰ বাবে"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' গুণ '%s' পদাৰ্থৰ পোৱা ন'গ'ল"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "অপ্ৰত্যাশিত চিহ্ন '%s', '%s' চিহ্ন আশা কৰা হৈছিল"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "অপ্ৰত্যাশিত চিহ্ন '%s', '%s' ৰ ভিতৰত"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "তথ্য পঞ্জিকাত কোনো বৈধ পত্ৰচিহ্নৰ নথিপত্ৰ পোৱা ন'গ'ল"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' ৰ বাবে পত্ৰচিহ্ন ইতিমধ্যে আছে"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' ৰ বাবে পত্ৰচিহ্ন পোৱা ন'গ'ল"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' ৰ পত্ৰচিহ্নৰ বাবে কোনো MIME ৰ ধৰণ সংজ্ঞা দিয়া হোৱা নাই"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' ৰ পত্ৰচিহ্নত কোনো ব্যক্তিগত চিহ্নৰ সংজ্ঞা দিয়া হোৱা নাই"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' ৰ পত্ৰচিহ্নৰ বাবে কোনো সমষ্টি প্ৰতিষ্ঠা কৰা হোৱা নাই"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' নামৰ কোনো অনুপ্ৰয়োগে '%s' ৰ বাবে কোনো পত্ৰচিহ্ন পঞ্জীভূক্ত কৰা নাই"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec শাৰী '%s', য'ত URI '%s' আছে, বিস্তৃত কৰাত বিফল"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "আখৰৰ গোট '%s' ৰ পৰা '%s' লৈ সলনি কৰাৰ সমৰ্থন নাই"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' ৰ পৰা '%s' লৈ সলনি কৰা যন্ত্ৰক খুলিব নোৱাৰি"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "সলনি কৰাৰ নিবেশত অৱৈধ byte ক্ৰম"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "সলনি কৰাৰ সময়ত ভুল: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "নিবেশৰ অন্তত অসম্পূৰ্ণ আখৰৰ গোট"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "fallback '%s' ক codeset '%s' লৈ সলনি কৰিব নোৱাৰি"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "\"file\" আঁচনি ব্যৱহাৰ কৰি URI '%s' এটা সম্পূৰ্ণ URI নহয়"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "স্থানিক নথিপত্ৰৰ URI '%s' ত এটা '#' থাকিব নোৱাৰে"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' অৱৈধ"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s' ৰ গৃহস্থৰনাম অৱৈধ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' ত অৱৈধভাবে মুক্তি পোৱা আখৰ আছে"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' পথৰ নাম এটা সম্পূৰ্ণ পথৰ নাম নহয়"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "অৱৈধ গৃহস্থৰনাম"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' পঞ্জিকা খোলোঁতে ভুল: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu bytes বিতৰণ কৰিব পৰা ন'গ'ল নথিপত্ৰ \"%s\" পঢ়িবলৈ "
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "নথিপত্ৰ '%s' পঢ়োঁতে ভুল: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "\"%s\" নথিপত্ৰ বৰ ডাঙৰ"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' নথিপত্ৰৰ পৰা পঢ়োঁতে বিফল: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' নথিপত্ৰ খোলোঁতে ভুল: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' নথিপত্ৰৰ গুণ পাওঁতে বিফল: fstat() বিফল: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' নথিপত্ৰ খোলোঁতে ভুল: fdopen() বিফল: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' নথিপত্ৰক '%s' লৈ পুনঃনামকৰণ কৰোঁতে বিফল: g_rename() বিফল: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' নথিপত্ৰ সৃষ্টি কৰোঁতে বিফল: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "'%s' নথিপত্ৰ লিখিবৰ বাবে খোলাত বিফল: fdopen() বিফল: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' নথিপত্ৰ লিখাত বিফল: fwrite() বিফল: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' নথিপত্ৰ লিখাত বিফল: fflush() বিফল: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' নথিপত্ৰ লিখাত বিফল: fsync() বিফল: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' নথিপত্ৰ বন্ধ কৰাত বিফল: fclose() বিফল: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "বৰ্ত্তমানে থকা নথিপত্ৰ '%s' আঁতৰাব পৰা ন'গ'ল: g_unlink() বিফল: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' টেমপ্লেট অৱৈধ, এটা '%s' থাকিব নালাগে"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' টেমপ্লেটত XXXXXX নাই"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "সাঙ্কেতিক সংযোগ পঢ়াত বিফল '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "সাঙ্কেতিক সংযোগ সমৰ্থিত নহয়"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' ৰ পৰা '%s' লৈ সলনি কৰা যন্ত্ৰ খুলিব পৰা ন'গ'ল: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string ত raw read কৰিব নোৱাৰি"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "read প্ৰশমকত অৱশিষ্ট অপৰিবৰ্ত্তিত তথ্য আছে"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "ছেনেল অসম্পূৰ্ণ আখৰত অন্ত হয়"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end ত এটা raw read কৰিব নোৱাৰি"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' নথিপত্ৰ খোলোঁতে বিফল: open() বিফল: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' নথিপত্ৰ map কৰোঁতে বিফল: mmap() বিফল: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d শাৰীৰ %d আখৰত ভুল:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d শাৰীত ভুল: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"ৰিক্ত পদাৰ্থ '&;' দেখা গ'ল; বৈধ পদাৰ্থসমূহ হ'ল: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"'%s' আখৰ পদাৰ্থৰ নামৰ আৰম্ভনিৰ বাবে বৈধ নহয়; & আখৰে এটা পদাৰ্থ আৰম্ভ কৰে; যদি এই "
+"এম্পাৰছেন্দ এটা পদাৰ্থ ন'হ'বলাগে, তাক &amp; হিচাপে নিৰ্গমন কৰক"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "'%s' আখৰ পদাৰ্থৰ নামৰ ভিতৰত বৈধ নহয়"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "পদাৰ্থৰ নাম '%s' অজ্ঞাত"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"পদাৰ্থ এটা ছেমিকলনেৰে অন্ত ন'হ'ল; পদাৰ্থ এটা আৰম্ভ কৰিব নিবিচাৰিও অতি সম্ভৱ আপুনি "
+"এটা এম্পাৰছেন্দ আখৰ ব্যৱহাৰ কৰিছে - এম্পাৰছেন্দক &amp; হিচাপে নিৰ্গমন কৰক"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' বিশ্লেষণ কৰোঁতে ভুল, যি কোনো আখৰৰ উল্লেখৰ ভিতৰৰ এটা সংখ্যা হ'ব লাগিছিল "
+"(&#২৩৪; যেনে) - হয়তো সংখ্যাটো বৰ ডাঙৰ"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+"আখৰৰ উল্লেখ থকা '%-.*s' এ এটা আজ্ঞা থকা আখৰক সাঙ্কেতিক লিপিলৈ পৰিবৰ্তিত নকৰে"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ৰিক্ত আখৰৰ সঙ্কেত; এটা সংখ্যা থাকিব লাগে যেনে &#৪৫৪;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"আখৰৰ উল্লেখ এটা ছেমিকলনেৰে অন্ত ন'হ'ল; পদাৰ্থ এটা আৰম্ভ কৰিব নিবিচাৰিও অতি সম্ভৱ "
+"আপুনি এটা এম্পাৰছেন্দ আখৰ ব্যৱহাৰ কৰিছে - এম্পাৰছেন্দক &amp; হিচাপে নিৰ্গমন কৰক"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "অসম্পূৰ্ণ পদাৰ্থৰ উল্লেখ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "অসম্পূৰ্ণ আখৰৰ উল্লেখ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "অৱৈধ UTF-8 সাঙ্কেতিক লিপি - overlong ক্ৰম"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "অৱৈধ UTF-8 সাঙ্কেতিক লিপি - এটা আৰম্ভৰ আখৰ নহয়"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "অৱৈধ UTF-8 সাঙ্কেতিক লিপি - অৱৈধ '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "প্ৰলেক্ষ এটা পদাৰ্থৰ সৈতে আৰম্ভ হ'ব লাগিব (যেনে <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' এটা বৈধ আখৰ নহয় '<' আখৰৰ পিছত; ইয়াৰ দ্বাৰা পদাৰ্থৰ নাম আৰম্ভ ন'হ'বও পাৰে"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "ভুল আখৰ '%s', এটা '>' আখৰ প্ৰত্যাশিত ৰিক্ত পদাৰ্থৰ টেগ '%s' শেষ কৰিবলৈ"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"'%s' অক্ষৰ প্ৰত্যাশিত নহয়, এটা '=' চিহ্ন প্ৰত্যাশিত গুণৰ নাম '%s', পদাৰ্থ '%s' ৰ, "
+"পিছত"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' অক্ষৰ প্ৰত্যাশিত নহয়, '%s' পদাৰ্থৰ প্ৰাৰম্ভিক টেগ সমাপ্ত কৰাৰ উদ্দেশ্যে '>' বা "
+"'/' চিহ্ন বা কোনো বৈশিষ্ট্যৰ উপস্থিতি কাম্য; সম্ভৱতঃ কোনো বৈশিষ্ট্যৰ নামত অৱৈধ অক্ষৰ "
+"ব্যৱহৃত হৈছে"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"'%s' অক্ষৰ অপ্ৰত্যাশিত, '%s' গুণৰ, পদাৰ্থ '%s' ৰ, মান নিৰ্ধাৰণৰ উদ্দেশ্যে সমান চিহ্নৰ "
+"পিছত এটা উদ্ধৃতি চিহ্নৰ প্ৰাৰম্ভিক অংশ উপস্থিতি প্ৰত্যাশিত"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' অক্ষৰৰ ব্যৱহাৰ '</' ৰ পিছত বৈধ নহয়; '%s' দ্বাৰা কোনো পদাৰ্থৰ নাম আৰম্ভ কৰা "
+"নাযাব"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' অক্ষৰৰ ব্যৱহাৰ বৈধ নহয় '%s' বদ্ধ পদাৰ্থৰ নামৰ পিছত; অনুমোদিত অক্ষৰ হ'ল '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' পদাৰ্থ বদ্ধ অৱস্থাত, বৰ্তমানে কোনো পদাৰ্থ খোলা অৱস্থাত নাই"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' পদাৰ্থ বদ্ধ অৱস্থাত, বৰ্তমানে '%s' পদাৰ্থ খোলা অৱস্থাত আছে"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "প্ৰলেক্ষ ৰিক্ত বা অকল ৰিক্ত স্থান আছিলে"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "খোলা বন্ধনীৰ প্ৰাৰম্ভিক চিহ্নৰ '<' ঠিক পিছত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"খোলা পদাৰ্থসহ আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে - '%s' পদাৰ্থ সৰ্বশেষ খোলা হৈছিল"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"নথি অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে, <%s/> টেগ সমাপ্তিৰ বাবে খোলা বন্ধনী চিহ্নৰ অন্তিম "
+"অংশৰ উপস্থিতি প্ৰত্যাশিত"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "পদাৰ্থৰ নামত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "বৈশিষ্ট্যৰ নামত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "পদাৰ্থৰ প্ৰাৰম্ভিক টেগত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"বৈশিষ্ট্যৰ নামৰ পিছত উপস্থিত সমান চিহ্নৰ পিছত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে; "
+"বৈশিষ্ট্যৰ মান অনুপস্থিত"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "বৈশিষ্ট্যৰ মানত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "'%s' পদাৰ্থৰ অন্তিম টেগত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "কোনো মন্তব্য বা প্ৰক্ৰিয়াকৰণৰ নিৰ্দেশত আলেখ্যন অপ্ৰত্যাশিতৰূপে সমাপ্ত হৈছে"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ক্ষতিগ্ৰস্ত অৱজেক্ট"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "অভ্যন্তৰীণ সমস্যা বা ক্ষতিগ্ৰস্ত অৱজেক্ট"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "স্মৃতিশক্তি অৱশিষ্ট নাই"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "backtracking ৰ সুনিৰ্দিষ্ট সীমা পূৰ্ণ"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "উল্লিখিত বিন্যাসত অন্তৰ্ভুক্ত সামগ্ৰী, আংশিক মিল অনুসন্ধানত সমৰ্থিত নহয়"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "অভ্যন্তৰীণ সমস্যা"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "আংশিক মিল অনুসন্ধানৰ সময় বেক ৰেফাৰেন্স সমৰ্থিত নহয়"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "পুনৰাবৃত্তিৰ সীমা পূৰ্ণ"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ৰিক্ত চাব-স্ট্ৰিং ৰ কৰ্মক্ষেত্ৰৰ সীমা পূৰ্ণ"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "নতুন পংক্তি চিহ্নকাৰী ফ্লেগৰ অৱৈধ সমষ্টি"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "অজ্ঞাত সমস্যা"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "পংক্তিৰ শেষত \\ উপস্থিত"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "পংক্তিৰ শেষত \\c উপস্থিত"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "\\ ৰ পিছত অজ্ঞাত অক্ষৰ উপস্থিত"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "কেছ সলনি কৰা escapes (\\l, \\L, \\u, \\U) ৰ ইয়াত অনুমতি নাই"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} quantifier ত সংখ্যা ক্ৰমত নাই"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} quantifier ৰ সংখ্যা অত্যাধিক ডাঙৰ"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "অক্ষৰৰ শ্ৰেণীৰ শেষত ] চিহ্ন অনুপস্থিত"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "অক্ষৰৰ শ্ৰেণীত অৱৈধ escape ক্ৰম"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "অক্ষৰৰ শ্ৰেণীৰ অঞ্চল সীমাৰ বাহিৰত"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "পুনৰাবৃত্তিৰ বাবে কিছু উপস্থিত নাই"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? চিহ্নৰ পিছত অজ্ঞাত অক্ষৰ উপস্থিত"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< চিহ্নৰ পিছত অজ্ঞাত অক্ষৰ উপস্থিত"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P চিহ্নৰ পিছত অজ্ঞাত অক্ষৰ উপস্থিত"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named শ্ৰেণীসমূহ অকল শ্ৰেণীত সমৰ্থিত হ'ব"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "শেষত ) অনুপস্থিত"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "( চিহ্ন নোহোৱাকে ) চিহ্ন প্ৰয়োগ কৰা হৈছে"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R বা (?[+-]সংখ্যা ৰ পিছত ) চিহ্ন ব্যৱহাৰ কৰা আৱশ্যক"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "অনুপস্থিত subpattern নিৰ্দেশ কৰা হৈছে"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "বক্তব্যৰ পিছত ) চিহ্ন অনুপস্থিত"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "ৰেগুলাৰ এক্সপ্ৰেছন অত্যাধিক দীঘল"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "স্মৃতিশক্তি প্ৰাপ্ত কৰিবলৈ ব্যৰ্থ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind assertion সীমিত দৈৰ্ঘ্যৰ নহয়"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( ৰ পিছত ত্ৰুটিপূৰ্ণ সংখ্যা বা নাম উপস্থিত আছে"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "conditional সমষ্টিত দুটাতকৈ অধিক branche আছে"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( ৰ পিছত assertion প্ৰত্যাশিত"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "অজ্ঞাত POSIX শ্ৰেণীৰ নাম"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX collating পদাৰ্থ সমৰ্থিত নহয়"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} শাৰীত আখৰৰ মান বৰ ডাঙৰ"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "অৱৈধ কন্ডিছন (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "lookbehind assertion ত \\C ৰ অনুমতি নাই"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "ৰিকাৰ্ছিভ কল অনিশ্চিত কাললৈ লুপ কৰিব পাৰে"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "subpattern নামত হেৰুৱা terminator"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "দুটা নাম দিয়া subpatterns ৰ একে নাম"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ত্ৰুটিপূৰ্ণ \\P বা \\p ক্ৰম"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P বা \\p ৰ পিছত অজ্ঞাত গুণৰ নাম"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "subpattern নাম বৰ দীঘল (সৰ্বাধিক ৩২ টা আখৰ)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "বহুত নাম দিয়া subpatterns (সৰবাধিক ১০,০০০)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "অক্টাল মান \\377 ৰ অধিক"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE দলত একাধিক ব্ৰাঞ্চ উপস্থিত আছে"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "কোনো DEFINE দলৰ পুনৰাবৃত্তি কৰা নাযাব"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "বিসংগত NEWLINE বিকল্প"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g ৰ পিছত এটা brace থকা নাম বা এটা বৈকল্পিক brace থকা শুণ্য নোহোৱা সংখ্যা নাই"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "অপ্ৰত্যাশিত পুনৰাবৃত্তি"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "কোড overflow"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran compiling workspace"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "আগতে পৰীক্ষা কৰা সন্দৰ্ভ থকা subpattern পোৱা ন'গ'ল"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "ৰেগুলাৰ এক্সপ্ৰেশন %s ৰ মিল অনুসন্ধানত সমস্যা: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE লাইব্ৰেৰি UTF8 সমৰ্থন নোহোৱাকে কম্পাইল কৰা হৈছে"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE লাইব্ৰেৰি UTF8 বৈশিষ্ট্যৰ সমৰ্থন নোহোৱাকে কম্পাইল কৰা হৈছে"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "ৰেগুলাৰ এক্সপ্ৰেশন %s, %d অক্ষৰত কম্পাইল কৰিবলৈ সমস্যা: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "ৰেগুলাৰ এক্সপ্ৰেশন %s ৰ সৰ্বোত্তম ব্যৱহাৰত সমস্যা: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimal সংখ্যা বা '}' প্ৰত্যাশিত"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimal সংখ্যা প্ৰত্যাশিত"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "সাঙ্কেতিক ৰেফাৰেন্সত '<' অনুপস্থিত"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "সাঙ্কেতিক ৰেফাৰেন্স অসম্পূৰ্ণ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "সাঙ্কেতিক ৰেফাৰেন্সত অক্ষৰ সংখ্যা শূণ্য"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "সংখ্যা প্ৰত্যাশিত"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "অৱৈধ সাঙ্কেতিক ৰেফাৰেন্স"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "অন্তত অপ্ৰত্যাশিত '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "অজ্ঞাত এস্কেপ ক্ৰম"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "প্ৰতিস্থাপনৰ টেক্সট \"%s\", %lu অক্ষৰত বিশ্লেষণ কৰিবলৈ সমস্যা: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "উদ্ধৃতিৰ অংশ উদ্ধিতি চিহ্ন দ্বাৰা আৰম্ভ কৰা নহয়"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "আদেশ শাৰী বা শ্বেল ৰ উদ্ধৃতিত অসংগত উদ্ধৃতি চিহ্ন"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "'\\' অক্ষৰৰ পিছত টেক্সট সমাপ্ত হৈছে । (সংশ্লিষ্ট টেক্সট হ'ল '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c ৰ ক্ষেত্ৰত সুসংগত উদ্ধৃতি চিহ্ন পোৱা নাযায় । (সংশ্লিষ্ট টেক্সট হ'ল '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "টেক্সট ৰিক্ত (বা অকল শূণ্যস্থানসহ)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "চাইল্ড প্ৰক্ৰিয়াৰ পৰা তথ্য পঢ়িবলৈ ব্যৰ্থ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়াৰ সৈতে যোগাযোগৰ উদ্দেশ্যে পাইপ নিৰ্মাণত ব্যৰ্থ (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "চাইল্ড পাইপৰ পৰা পঢ়িবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' পঞ্জিকালৈ পৰিবৰ্তন কৰিবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়া প্ৰণয়ন কৰিবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "অনুপ্ৰয়োগৰ নাম অৱৈধ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d ত তৰ্ক ভেক্টৰত উল্লিখিত পংক্তি বৈধ নহয়: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "পৰিবেশত উল্লিখিত পংক্তি বৈধ নহয়: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "সক্ৰিয় পঞ্জিকা বৈধ নহয়: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "সহায়ক প্ৰোগ্ৰাম চলাওঁতে ব্যৰ্থ (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"চাইল্ড প্ৰক্ৰিয়াৰ পৰা তথ্য পড়াৰ সময়ত g_io_channel_win32_poll() ত অপ্ৰত্যাশিত ত্ৰুটি"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়াৰ পৰা তথ্য পঢ়িবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়াৰ পৰা তথ্য পড়াৰ সময়ত select() সংক্ৰান্ত অপ্ৰত্যাশিত ত্ৰুটি (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() ত অপ্ৰত্যাশিত ত্ৰুটি (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork কৰিবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়া \"%s\" চলাওঁতে ব্যৰ্থ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়াৰ নিৰ্গম বা নিবেশ ৰি-ডাইৰেক্ট কৰিবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "চাইল্ড প্ৰক্ৰিয়া fork কৰিবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "চাইল্ড প্ৰক্ৰিয়া \"%s\" প্ৰণয়ন কৰিবলৈ অজ্ঞাত সমস্যা"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "চাইল্ড pid পাইপৰ পৰা পৰ্যাপ্ত তথ্য পঢ়িবলৈ ব্যৰ্থ (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "অক্ষৰ UTF-8 ৰ আয়ত্বৰ বাহিৰত"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "ৰূপান্তৰ কৰাৰ উদ্দেশ্যে প্ৰদত্ত তথ্যত অৱৈধ ধাৰা"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "অক্ষৰ UTF-16 ৰ আয়ত্বৰ বাহিৰত"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ব্যৱহাৰপ্ৰণালী:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "সহায়তা সংক্ৰান্ত বিকল্প:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "সহায়তা সংক্ৰান্ত বিকল্প প্ৰদৰ্শন কৰা হ'ব"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "সহায়তা সংক্ৰান্ত সমস্ত বিকল্প প্ৰদৰ্শন কৰা হ'ব"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "অনুপ্ৰয়োগ সংক্ৰান্ত বিকল্প:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "'%s' পূৰ্ণসংখ্যাৰ মান %s ৰ বাবে বিশ্লেষণ কৰিবলৈ ব্যৰ্থ"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "'%s' পূৰ্ণসংখ্যাৰ মান %s ৰ বাবে সীমাৰ বহিৰ্ভূত"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%s' ৰ দ্বীগুণ মান %s ৰ বাবে বিশ্লেষণ কৰিবলৈ ব্যৰ্থ"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "'%s' ৰ দ্বীগুণ মান %s ৰ বাবে সীমা বহিৰ্ভূত"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s বিকল্প বিশ্লেষণ কৰিবলৈ ব্যৰ্থ"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s ৰ তৰ্ক অনুপস্থিত"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "অজ্ঞাত বিকল্প %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "অনুসন্ধানৰ dirs ত বৈধ চাবি নথিপত্ৰ পোৱা নাযায়"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "সাধাৰণ নথিপত্ৰ নহয়"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "নথিপত্ৰ ৰিক্ত"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "চাবি নথিপত্ৰত '%s' পংক্তি আছে যি চাবি-মানৰ জোৰা, সমষ্টি বা মন্তব্য নহয়"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "দলৰ নাম অৱৈধ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "চাবি-নথিপত্ৰৰ আৰম্ভত কোনো সমষ্টি উল্লিখিত নাই"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "চাবিৰ নাম অৱৈধ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "চাবি নথিপত্ৰত অসমৰ্থিত এনকোডিং '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "চাবি নথিপত্ৰত কোনো সমষ্টি অনুপস্থিত '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "চাবি নথিপত্ৰত কোনো চাবি উপস্থিত নাই '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "চাবি নথিপত্ৰত '%s' চাবি আছে '%s' মান সহ যি UTF-8 বিন্যাসত  নাই ।"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "চাবি নথিপত্ৰত '%s' চাবি উপস্থিত আছে যাৰ মান বুজিব পৰা নাযায় ।"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "চাবি নথিপত্ৰত '%s'  চাবি আছে '%s' সমষ্টিত যাৰ মান বুজিব পৰা নাযায় ।"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "চাবি নথিপত্ৰত '%s' চাবি '%s' সমষ্টিত নাই"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "চাবি নথিপত্ৰত পংক্তিৰ অৱশেষত এস্কেপ অক্ষৰ উপস্থিত আছে"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "চাবি নথিপত্ৰত অৱৈধ এস্কেপ ধাৰা উপস্থিত আছে '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' মান কোনো সংখ্যাৰূপে বুজিব পৰা নাযায় ।"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "'%s' পূৰ্ণসংখ্যা মান সীমা বহিৰ্ভূত"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' মান float সংখ্যা ৰূপে বুজিব পৰা নাযায় ।"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' মান বুলিয়েন ৰূপে বুজিব পৰা নাযায় ।"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s লৈ বহুত ডাঙৰ count মান দিয়া হৈছে"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "স্ৰোত ইতিমধ্যে বন্ধ"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "কৰ্ম বাতিল কৰা হৈছে"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "অজ্ঞাত প্ৰকৃতি"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s নথিপত্ৰৰ ধৰন"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s ধৰন"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "স্ৰোতৰ অপ্ৰত্যাশিত আগতীয়া অন্ত ।"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "নামবিহীন"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ডেস্কটপ নথিপত্ৰত Exec ক্ষেত্ৰ নিৰ্ধাৰিত নহয়"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "অনুপ্ৰয়োগৰ বাবে আৱশ্যক টাৰ্মিনেল পোৱা নাযায়"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ব্যৱহাৰকৰ্তা অনুপ্ৰয়োগৰ বিন্যাস ফোল্ডাৰ %s নিৰ্মাণ কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ব্যৱহাৰকৰ্তা MIME বিন্যাস ফোল্ডাৰ %s নিৰ্মাণ কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ব্যৱহাৰকৰ্তা ডেস্কটপ নথিপত্ৰ %s নিৰ্মাণ কৰিবলৈ ব্যৰ্থ"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s ৰ বাবে স্বনিৰ্ধাৰত ব্যাখ্যা"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ড্ৰাইভ দ্বাৰা ইজেক্ট কৰ্ম সঞ্চালিত নহয়"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ড্ৰাইভত মিডিয়াৰ বাবে প'ল কৰাৰ কাৰ্যক্ষমতা নাই"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem encoding ৰ %d সংস্কৰণ পৰিচালন কৰিব নোৱাৰি"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem encoding ত ট'কেনৰ ভুল সংখ্যা (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon encoding ৰ %d সংস্কৰণ পৰিচালন কৰিব নোৱাৰি"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon encoding ত ট'কেনৰ ভুল সংখ্যা (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon ৰ কাৰণে এটা GEmblem প্ৰত্যাশিত"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "কাৰ্য্য সমৰ্থিত নহয়"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "ধাৰণকাৰী মাউন্ট উপস্থিত নাই"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "পঞ্জিকাৰ ওপৰতত নকল কৰা নাযাব"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "পঞ্জিকাৰ ওপৰত পঞ্জিকা নকল কৰা নাযায়"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "লক্ষ্য নথিপত্ৰ উপস্থিত আছে"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ৰিকাৰ্ছিভ ভাবে পঞ্জিকা নকল কৰা নাযাব"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "বিশেষ নথিপত্ৰ নকল কৰিব নোৱাৰি"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "অৱৈধ সিম-সংযোগ মান উপলব্ধ কৰা হৈছে"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "আবৰ্জনা সমৰ্থিত নহয়"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "নথিপত্ৰৰ নামত '%c' ব্যৱহাৰ কৰা নাযাব"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ভলিউম দ্বাৰা mount প্ৰয়োগ কৰা নহয়"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "চিহ্নিত নথিপত্ৰ ব্যৱস্থাপনাৰ উদ্দেশ্যে কোনো অনুপ্ৰয়োগ নিবন্ধিত নহয়"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator বন্ধ"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "নথিপত্ৰ enumerator-ত অসমাপ্ত কৰ্ম উপস্থিত"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "নথিপত্ৰ enumerator ৰ বন্ধ"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "নথিপত্ৰ"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "আইকন ধাৰণকাৰী নথিপত্ৰ"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon encoding ৰ %d সংস্কৰণ পৰিচালন কৰিব নোৱাৰি"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon ৰ কাৰণে ভুল নিবেশ তথ্য"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "স্ৰোত দ্বাৰা query_info সমৰ্থিত নহয়"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "স্ৰোত দ্বাৰা Seek সমৰ্থিত নহয়"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "নিবেশ স্ৰোতত Truncate ৰ অনুমতি নাই"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "স্ৰোতত Truncate ৰ সমৰ্থন নাই"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "ট'কেনৰ ভুল সংখ্যা (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "শ্ৰেণীৰ নাম %s ৰ ধৰণ নাই"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "%s ধৰনে GIcon সংযোগমাধ্যম প্ৰণয়ন নকৰে"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "%s ধৰণক class কৰা হোৱা নাই"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "ভুল সংস্কৰণ সংখ্যা: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "%s ধৰণে from_tokens() প্ৰণয়ন নকৰে GIcon সংযোগমাধ্যমত"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "আইকন এন্‌কোডিংৰ দিয়া সংস্কৰণৰ পৰিচালন কৰিব নোৱাৰি"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "নিবেশ স্ৰোতে পঢ়া কাৰ্য ৰূপায়ন নকৰে"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "স্ৰোতৰ ক্ষেত্ৰত অসমাপ্ত কৰ্ম উপস্থিত আছে"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "অবিকল্পিত স্থানীয় পঞ্জিকাৰ মনিটৰৰ ধৰন পোৱা ন'গ'ল"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "নথিপত্ৰৰ নাম অৱৈধ: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "নথিপত্ৰপ্ৰণালী সংক্ৰান্ত তথ্য প্ৰাপ্ত কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "root পঞ্জিকাৰ নাম পৰিবৰ্তন কৰা সম্ভৱ নহয়"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "নথিপত্ৰৰ নাম পৰিবৰ্তনত সমস্যা: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+"নথিপত্ৰৰ নাম পৰিবৰ্তন কৰা নাযায়, নতুন নামৰ এটা নথিপত্ৰৰ নাম বৰ্তমানে উপস্থিত আছে"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "নথিপত্ৰৰ নাম অবৈধ"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "নথিপত্ৰ খুলিবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "পঞ্জিকা খুলিবলৈ সমস্যা"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "নথিপত্ৰ আঁতৰাবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "নথিপত্ৰ আবৰ্জনালৈ স্থানান্তৰ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "আবৰ্জনাৰ পঞ্জিকা %s নিৰ্মাণ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "আবৰ্জনাৰ ঊৰ্ধ্বতন পঞ্জিকা সনাক্ত কৰিবলৈ ব্যৰ্থ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "আবৰ্জনাৰ পঞ্জিকা সনাক্ত বা নিৰ্মাণ কৰিবলৈ ব্যৰ্থ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "trashing তথ্যৰ নথিপত্ৰ সৃষ্টি কৰিব নোৱাৰি: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "নথিপত্ৰ বৰ্জন কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "পঞ্জিকা নিৰ্মাণ কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "সাঙ্কেতিক সংযোগ নিৰ্মাণ কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "নথিপত্ৰ স্থানান্তৰ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "পঞ্জিকাৰ ওপৰত পঞ্জিকা স্থানান্তৰ কৰা নাযাব"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "বেক-আপ নথিপত্ৰ নিৰ্মাণ কৰিবলৈ ব্যৰ্থ"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "লক্ষ্য নথিপত্ৰ আঁতৰাবলৈ সমস্যা: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "মাউন্ট কৰা অৱস্থানত স্থানান্তৰ কৰা সম্ভৱ নহয়"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "গুণৰ মান NULL ন'হ'বলাগে"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "অবৈধ গুণৰ ধৰণ (স্ট্ৰিং প্ৰত্যাশিত)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "অবৈধ সম্প্ৰসাৰিত গুণৰ নাম"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "সম্প্ৰসাৰিত গুণ নিৰ্ধাৰণ কৰোঁতে ভুল '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "নথিপত্ৰ '%s' stat কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (অৱৈধ এনকোডিং)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "নথিপত্ৰৰ দেস্ক্ৰিপ্টৰ stat কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "গুণৰ ধৰন বৈধ নহয় (প্ৰত্যাশিত uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "গুণৰ ধৰন বৈধ নহয় (প্ৰত্যাশিত uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "গুণৰ ধৰন বৈধ নহয় (প্ৰত্যাশিত byte স্ট্ৰিং)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "অনুমতি নিৰ্ধাৰণ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "গৰাকী নিৰ্ধাৰণ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "সাঙ্কেতিক সংযোগ NULL হ'ব নোৱাৰে"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "সাঙ্কেতিক সংযোগ নিৰ্ধাৰণ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "সাঙ্কেতিক সংযোগ নিৰ্ধাৰণ কৰিবলৈ ত্ৰুটি: নথিপত্ৰ সাঙ্কেতিক সংযোগ নহয়"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux ৰ সন্দৰ্ভ NULL হ'ব নোৱাৰে"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux ৰ সন্দৰ্ভ নিৰ্ধাৰণ কৰিবলৈ ব্যৰ্থ: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "এই ব্যৱস্থাপ্ৰণালীত SELinux সক্ৰিয় কৰা নহয়"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s গুণৰ মান নিৰ্ধাৰণ সমৰ্থিত নহয়"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "নথিপত্ৰৰ পৰা পঢ়িবলৈ সমস্যা: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "নথিপত্ৰত seek কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "নথিপত্ৰ বন্ধ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "অবিকল্পিত স্থানীয় নথিপত্ৰৰ মনিটৰৰ ধৰন পোৱা ন'গ'ল"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "নথিপত্ৰলৈ লিখিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "পুৰনি বেক-আপ সংযোগ আঁতৰাবলৈ সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "বেক-আপ প্ৰতিলিপি নিৰ্মাণ কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "অস্থায়ী নথিপত্ৰৰ নাম পৰিবৰ্তন কৰিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "নথিপত্ৰ সৰু কৰিবলৈ ভুল: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "নথিপত্ৰ '%s' খুলিবলৈ সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "লক্ষ্য নথিপত্ৰ এটা পঞ্জিকা"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "লক্ষ্য নথিপত্ৰ সাধাৰণ নথিপত্ৰ নহয়"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "নথিপত্ৰ স্বতন্ত্ৰৰূপে পৰিবৰ্তন কৰা হৈছে"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "পুৰনি নথিপত্ৰ আঁতৰাবলৈ সমস্যা: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "অৱৈধ GSeekType উল্লিখিত হৈছে"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "অৱৈধ seek ৰ অনুৰোধ"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream ক truncate কৰিব নোৱাৰি"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "সৰ্বাধিক তথ্য শাৰীৰ সীমা পোৱা গ'ল"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "স্মৃতিশক্তিৰ নিৰ্গমৰ স্ৰোতক পুনঃ আকাৰ দিব নোৱাৰি"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "স্মৃতিশক্তিৰ নিৰ্গমৰ স্ৰোতক পুনঃ আকাৰ দিবলৈ বিফল"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount ৰ দ্বাৰা unmount প্ৰয়োগ কৰা নহয়"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount ৰ দ্বাৰা ইজেক্ট কৰ্ম সঞ্চালিত নহয়"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount ৰ দ্বাৰা remount প্ৰয়োগ কৰা নহয়"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount দ্বাৰা সামগ্ৰীৰ ধৰন অনুমান কৰা সম্ভৱ নহয়"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount দ্বাৰা সুসংগতভাবে সামগ্ৰীৰ ধৰন অনুমান কৰা সম্ভৱ নহয়"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "নিৰ্গমৰ স্ৰোতে লিখা কাৰ্য ৰূপায়ন নকৰে"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "উৎসৰ স্ৰোত ইতিমধ্যে বন্ধ"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "নাম"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "আইকনৰ নাম"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "নাম"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "আইকনৰ নাম ধাৰণকাৰী এটা শাৰী"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "অবিকল্পিত fallbacks ব্যৱহাৰ কৰক"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' আখৰত নাম সৰু কৰি পোৱা অবিকল্পিত fallbacks ব্যৱহাৰ কৰা হ'ব নে নহয় । বহুত নাম "
+"দিলে প্ৰথম নামৰ পিছৰ নাম আওকাণ কৰা হয় ।"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon encoding ৰ %d সংস্কৰণ পৰিচালন কৰিব নোৱাৰি"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "নথিপত্ৰৰ দেস্ক্ৰিপ্টৰ"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "পঢ়িব লগা নথিপত্ৰৰ দেস্ক্ৰিপ্টৰ"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "নথিপত্ৰৰ দেস্ক্ৰিপ্টৰ নিৰ্ব্বাচন কৰক"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "স্ৰোত বন্ধ কৰিলে নথিপত্ৰৰ দেস্ক্ৰিপ্টৰ বন্ধ কৰা হ'ব নে নহয়"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix ৰ পৰা পঢ়িবলৈ সমস্যা: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix বন্ধ কৰিবলৈ সমস্যা: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "নথিপত্ৰপ্ৰণালীৰ root"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "নথিপত্ৰ দেস্ক্ৰিপ্টৰ য'ত লিখিব লাগে"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unix লৈ লিখিবলৈ সমস্যা: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ভলিউম দ্বাৰা ইজেক্ট প্ৰয়োগ কৰা নহয়"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "অনুপ্ৰয়োগ পোৱা নাযায়"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "অনুপ্ৰয়োগ আৰম্ভ কৰিবলৈ সমস্যা: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI সমৰ্থিত নহয়"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 ত অনুপ্ৰয়োগৰ সম্বন্ধৰ সলনি সমৰ্থিত নহয়"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 ত অনুপ্ৰয়োগৰ সম্বন্ধৰ সৃষ্টি সমৰ্থিত নহয়"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "নিবেশ লুকুৱা কৰা ন'হ'ব"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "দীঘল তালিকাৰ আকৃতি ব্যৱহাৰ কৰক"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/az.po b/po/az.po
new file mode 100644
index 0000000..5de6ef4
--- /dev/null
+++ b/po/az.po
@@ -0,0 +1,1861 @@
+# translation of glib.HEAD.az.po to Azerbaijani Turkish
+# Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+# KEMAL YILMAZ <kyilmaz@uekae.tubitak.gov.tr>, 2001.
+# Mətin Əmirov <metin@karegen.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.az\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2004-02-02 12:12+0200\n"
+"Last-Translator: Mətin Əmirov <metin@karegen.com>\n"
+"Language-Team: Azerbaijani Turkish <gnome@azitt.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Tək hərf '%s', xüsusiyyət adı '%s' olan element '%s' dən sonra '=' gözlənilir"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "'%s' simvolik körpüsü oxuna bilmədi: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "`%s' hərf dəstəsindən `%s' hərf dəstəsinə dönüşdürmə dəstəklənmir"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "`%s' dən `%s' ə dönüşdürücü açıla bilmir: %s"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "dönüşdürmə girişində hökmsüz bayt qatarı"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Girişin sonunda parçalı hərf qatarı"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "fallback '%s' hərf dəstəsi '%s' ə dönüşdürülə bilmir"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "`%s' URI-si fayl sxemini işlədən mütləq URI deyildir"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Yerli fayl uRI-si `%s' `#' daxil edə bilməz"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "`%s' URI-si səhvdir"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "`%s' URI-sinin qovşaq adı səhv qaçırılmış"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "`%s'in URİ-si səhv qaçırılmış xarakterlər daxil edir"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "`%s'in cığır adı mütləq cığır deyildir"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Hökmsüz qovşaq adı"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Cərgə açma xətası: '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "\"%2$s\" faylını oxumaq üçün %1$lu bayt ayrıla bilmir"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Fayldan oxuma iflası '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Fayl açma iflası '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Faylın xüsusiyyətlərini əldə etmə iflası '%s': fstat() iflası: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Fayl yaratma iflası '%s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Nümunə '%s' hökmsüzdür, '%s' daxil etməməlidir"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Şablon '%s' XXXXXX ilə qurtarmır"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' simvolik körpüsü oxuna bilmədi: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Simvolik körpülər dəstəklənmir"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "`%s' dən `%s' ə dönüşdürücü açıla bilmir: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Can't do a raw read in g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Oxuna buferdə dönüşdürülməmiş verilənlər var"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal qismi xarakterlə bitir"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Can't do a raw read in g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d. sətir %d. xarakterində xəta: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d sətirində xəta : %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Boş element '&;' tapldı; hökmlü elementlər: &amp; &quot; &lt; &qt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Element adının başındakı hərf '%s' hökmlü deyil; & hərf bir elementlə "
+"başlayar; əgər bu ampersand bir element olaraq var sayılmazsa, &amp olaraq "
+"işlədə bilərsiniz"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Xarakter '%s' bir element adının içində hökmlü deyildir"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Element adı '%s' bilinmir"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Element nöqtəli vergül ilə qurtarmır; böyük ehtimalla bir ampersand "
+"işlətdiniz bir element başlanğıcı ola bilməyən hərf üçün ampersandı &amp "
+"olaraq işlədin"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%s' i şərhləndirmə xətası, hərf içində bir rəqəm olmalıdır referens (məs; "
+"&#234) - belki rəqəm çok böyükdür"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Xarakter referens '%s' icazə verilən xarakteri kodlaya bilmir"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Boş hərf referens; &#454 kimi bir rəqəm daxil etməlidir;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Xarakter referens nöqtəli vergül ilə qurtarmır; böyük ehtimalla ampersand "
+"xarakteri elementə başlamaq üçün işlətmədiniz - ampersand yerinə &amp işlədə "
+"bilərsiniz"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Bitirilməmiş varlıq mə'lumatı"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Bitirilməmiş xarakter mə'lumatı"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Hökmsüz UTF-8 kodlanmış mətn"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Hökmsüz UTF-8 kodlanmış mətn"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Hökmsüz UTF-8 kodlanmış mətn"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Sənəd bir element ilə başlamalıdır (məs. <kitab>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' xarakterindən sonra gələn '%s' hökmlü bir xarakter deyil; bir element "
+"adı olmaya bilər"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Tək hərf '%s', Elementın başlanğıç etiketinin sonuna '>' xarakteri "
+"gözlənilir '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Tək hərf '%s', xüsusiyyət adı '%s' olan element '%s' dən sonra '=' gözlənilir"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Tək hərf '%s', '%s' elementin başlanğıç etiketinin sonuna '>' və ya '/' "
+"gözlənilir, və ya bir xüsusiyyət; xüsusiyyət adında hökmsüz bir hərf "
+"işlədilmiş ola bilərsiniz"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Tək hərf '%s',element '%s'in xüsusiyyəti '%s''ə qiymət verilirkən bərabərdir "
+"işarətindən sonra açıq alıntı işarəti gözlənilir"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'</' xarakterlərini təqib edən '%s' hökmlü bir xarakter deyildir; '%s' bir "
+"element adı ilə başlamır dəyəsən"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Bağlı element '%s' dən sonra gələn '%s' hökmlü bir hərf deyildir; icazə "
+"verilən hərf isə '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' bağlanıb, heç bir element açıq deyildir"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' bağlanıb, fəqət indi açıq element '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Sənəd boşdur və ya təkcə boşluq xarakteri daxil etməkdədir"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Sənəd açıq üçbucaq mötərizə '<'den sonra gözlənilməz bir şəkildə qurtardı"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Sənəd elementləri hələ açıq olaraq gözlənilməz bir şəkildə qurtardı - son "
+"element '%s' açıq idi"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Sənəd gözlənilməz bir şəkildə qurtardı, etiket <%s/> ilə qurtaran qapalı "
+"üçbucaq mötərizə gözlənilir"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Sənəd bir elementin içində gözlənilməz bir şəkildə qurtardı"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Sənəd bir xüsusiyyət adı içində gözlənilməz bir şəkildə qurtardı"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Sənəd bir element-açma etiketi içində gözlənilməz bir şəkildə qurtardı"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Sənəd xüsusiyyət adını təqib edən bərabərdir işarətindən sonra gözlənilməz "
+"bir şəkildə qurtardı: xüsusiyyət qiyməti yoxdur"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Sənəd bir xüsusiyyət qiyməti içində ikən gözlənilməz bir şəkildə qurtardı"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Sənəd bağlı etiket '%s' içində gözlənilməz bir şəkildə qurtardı"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Sənəd bir şərh və ya gedişat göstərişi içində ikən gözlənilməz bir şəkildə "
+"qurtarır"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Kanal qismi xarakterlə bitir"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "dönüşdürmə girişində hökmsüz bayt qatarı"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Bitirilməmiş xarakter mə'lumatı"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Bitirilməmiş xarakter mə'lumatı"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Bitirilməmiş xarakter mə'lumatı"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Simvolik körpülər dəstəklənmir"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "%d. sətir %d. xarakterində xəta: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Bitirilməmiş varlıq mə'lumatı"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "alıntılı mətn alıntı işarəti ilə başlamır"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Əmr sətirində və ya digər shell-quoted mətndə uyğunsuz alıntı işarəti"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Mətn '\\' xarakterindən həmən sonra qurtardı. (Mətn '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c üçün uyğunluq alıntısı tapılmadan mətn qurtardı. (Mətn '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Mətn boş idi (və ya təkcə boşluq daxil edirdi)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Törəmə gedişatdan mə'lumat oxuma iflası"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Törəmə gedişatların xəbərləşməyi üçün pipe yaratma iflası (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Törəmə pipe-dan oxuma iflası (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Qovluq dəyişdirmə iflası '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Törəmə gedişat icra iflası (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Hökmsüz qovşaq adı"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "dönüşdürmə girişi içində hökmsüz qatar"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Cərgə açma xətası: '%s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Yardımcı proqram icra edilə bilmədi"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"g_io_channel_win32_poll() törəmə gedişatdan mə'lumat oxumada gözlənilməz xəta"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Törəmə gedişatdan mə'lumat oxuma iflası (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "törəmə gedişatdan mə'lumat oxuma select()'də namə'lum xəta (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid()'də namə'lum xəta (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork iflası (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "\"%s\" törəmə gedişat icra iflası (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Törəmə gedişat giriş və ya yekun istiqamətləndirmə xətası (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Törəmə gedişat fork xətası (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "\"%s\" törəmə gedişat işində namə'lum xəta"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Törəmə pid pipe dan kifayət qədər mə'lumat oxuma iflası (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 üçün hərf sərhədinin xaricində"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "dönüşdürmə girişi içində hökmsüz qatar"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 üçün hərf sərhədinin xaricindədir"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Hökmsüz qovşaq adı"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Hökmsüz qovşaq adı"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "`%s'in URİ-si səhv qaçırılmış xarakterlər daxil edir"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Simvolik körpülər dəstəklənmir"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Simvolik körpülər dəstəklənmir"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "`%s' URI-sinin qovşaq adı səhv qaçırılmış"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Hökmsüz qovşaq adı"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Hökmsüz qovşaq adı"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Fayl yaratma iflası '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Fayl yaratma iflası '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Fayl yaratma iflası '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Cərgə açma xətası: '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Sənəd bir xüsusiyyət adı içində gözlənilməz bir şəkildə qurtardı"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Cərgə açma xətası: '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "%d sətirində xəta : %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Simvolik körpülər dəstəklənmir"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Hökmsüz qovşaq adı"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "`%s' URI-sinin qovşaq adı səhv qaçırılmış"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Fayl oxuma xətası: '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "%d sətirində xəta : %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Simvolik körpülər dəstəklənmir"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Dönüşdürmə sırasında xəta yarandı: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "\"%2$s\" faylını oxumaq üçün %1$lu bayt ayrıla bilmir"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Fayl açma iflası '%s': fdopen() iflası: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "`%s' hərf dəstəsindən `%s' hərf dəstəsinə dönüşdürmə dəstəklənmir"
diff --git a/po/be.po b/po/be.po
new file mode 100644
index 0000000..1899d86
--- /dev/null
+++ b/po/be.po
@@ -0,0 +1,2059 @@
+# Беларускі пераклад glib.HEAD.

+# Copyright (C) 2002, 2004 Free Software Foundation, Inc.

+# Vital Khilko <dojlid@mova.org>, 2002, 2005.

+# Ales Nyakhaychyk <nab@mail.by>, 2004.

+# 

+# 

+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-11-16 11:21+0200\n"
+"Last-Translator: Vital Khilko <vk@altlinux.ru>\n"
+"Language-Team: Belarusian <i18n@mova.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+# glib/gmarkup.c:1120

+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Дзіўны сымбаль \"%s\", чакаўся сымбаль \"=\" пасьля назвы атрыбута \"%s\" "
+"элемэнту \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "Дапушчальны файл ключу не адшуканы ў каталёгу даньняў"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+# glib/gfileutils.c:745

+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Немагчыма прачытаць сымбалічную спасылку \"%s\": %s"
+
+# glib/gconvert.c:390

+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Пераўтварэньне з набору знакаў \"%s\" у \"%s\" не падтрымліваецца"
+
+# glib/gconvert.c:394

+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не атрымалася адкрыць пераўтваральнік з \"%s\" у \"%s\""
+
+# glib/gconvert.c:592 glib/gconvert.c:882 glib/giochannel.c:1282

+# glib/giochannel.c:1324 glib/giochannel.c:2163 glib/gutf8.c:875

+# glib/gutf8.c:1320

+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Недапушчальная пасьлядоўнасьць байтаў на ўваходзе пераўтварэньня"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+# glib/gconvert.c:615 glib/gutf8.c:871 glib/gutf8.c:1071 glib/gutf8.c:1212

+# glib/gutf8.c:1316

+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Няпоўны сымбаль у канцы ўваходнага радку"
+
+# glib/gconvert.c:788

+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Немагчыма пераўтвараць знак \"%s\" у знак са збору \"%s\""
+
+# glib/gconvert.c:1593

+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI \"%s\" не зьяўляюцца абсалютным URI выкарыстаньня схемы \"file\""
+
+# glib/gconvert.c:1603

+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI \"%s\" мясцовага файлу ня можа ўключаць \"#\""
+
+# glib/gconvert.c:1620

+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI \"%s\" недапушчальная"
+
+# glib/gconvert.c:1632

+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Назва вузлу ў URI \"%s\" недапушчальная"
+
+# glib/gconvert.c:1648

+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI \"%s\" утрымлівае недапушчальны кіравальны сымбаль"
+
+# glib/gconvert.c:1719

+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Шлях \"%s\" не зьяўляецца абсалютным"
+
+# glib/gconvert.c:1729

+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Недапушчальная назва вузла"
+
+# glib/gdir.c:79

+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Памылка ў часе адкрыцьця каталёгу \"%s\": %s"
+
+# glib/gfileutils.c:337 glib/gfileutils.c:402

+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Не атрымалася разьмеркаваць %lu байтаў для чытаньня файлу \"%s\""
+
+# glib/gfileutils.c:348

+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+# glib/gfileutils.c:426

+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Збой чытаньня з файлу \"%s\": %s"
+
+# glib/gfileutils.c:465 glib/gfileutils.c:533

+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Збой адкрыцьця файлу \"%s\": %s"
+
+# glib/gfileutils.c:479

+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Збой атрыманьня атрыбутаў файлу \"%s\": збой fstat(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Збой адкрыцьця файлу \"%s\": збой fdopen(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Збой зьмены назвы файлу \"%s\" на '%s': збой g_rename(): %s"
+
+# glib/gfileutils.c:745

+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Збой стварэньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Збой адкрыцьця файла %s' для запісу: збой fdopen(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Збой запісу файлу '%s': збой fwrite(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Збой запісу файлу '%s': збой fwrite(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Збой запісу файлу '%s': збой fwrite(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Збой закрыцьця файлу %s': збой fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Наяўны файл '%s' не можа быць выдалены: збой g_unlink(): %s"
+
+# glib/gfileutils.c:712

+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Шаблён \"%s\" недапушчальны, не павінны ўтрымліваць \"%s\""
+
+# glib/gfileutils.c:724

+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Шаблён \"%s\" канчацца не на XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+# glib/gfileutils.c:745

+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Немагчыма прачытаць сымбалічную спасылку \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Сымбалічныя спасылкі не падтрымліваюцца"
+
+# glib/giochannel.c:1114

+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не атрымалася адкрыць пераўтваральнік з \"%s\" у \"%s\": %s"
+
+# glib/giochannel.c:1460

+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Не магчыма выканаць непасрэднае чытаньне ў функцыі "
+"g_io_channel_read_line_string"
+
+# glib/giochannel.c:1507 glib/giochannel.c:1761 glib/giochannel.c:1847

+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "У буфэры чытаньня засталіся непераўтвораныя даньні"
+
+# glib/giochannel.c:1587 glib/giochannel.c:1661

+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Канал закрываецца на няпоўным сымбалі"
+
+# glib/giochannel.c:1647

+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Немагчыма выканаць непасрэднае чытаньне ў функцыі g_io_channel_read_to_end"
+
+# glib/gfileutils.c:505

+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Збой адкрыцьця файлу \"%s\": збой open(): %s"
+
+# glib/gfileutils.c:505

+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Збой мапаваньня файлу  '%s': збой mmap(): %s"
+
+# glib/gmarkup.c:219

+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Памылка ў радку %d сымбаль %d: %s"
+
+# glib/gmarkup.c:303

+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Памылка ў радку %d: %s"
+
+# glib/gmarkup.c:382

+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Пусты запіс \"&;\" адшуканы; дапушчальныя: &amp; &quot; &lt; &gt; &apos;"
+
+# glib/gmarkup.c:392

+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Сымбаль \"%s\" ня зьяўляецца дапушчальным напачатку назвы сутнасьці; сымбаль "
+"& пачынае пасьлядоўнасьць;  калі гэты сымбаль ня мусіць быць часткай запісу, "
+"тады экрануйце яго запісам &amp;"
+
+# glib/gmarkup.c:428

+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Сымбаль \"%s\" недапушчальны ўнутры назвы сутнасьці"
+
+# glib/gmarkup.c:472

+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Невядомая назва сутнасьці \"%s\""
+
+# glib/gmarkup.c:482

+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Запіс не канчаецца кропкай з коскай; здаецца, што сымбаль & быў выкарыстаны "
+"не для пазначэньня пачатку сутнасьці - экрануйце яго як &amp;"
+
+# glib/gmarkup.c:528

+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Збой разбору \"%-.*s\", дзе мусіць быць нумар унутры лучыва да сымбалю "
+"(&#234; напрыклад) - мажліва, нумар завялікі"
+
+# glib/gmarkup.c:553

+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Лучыва на сымбаль '%-.*s' не вызначае дазволены сымбаль"
+
+# glib/gmarkup.c:570

+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Пустое лучыва да сымбалю: мусіць уключаць нумар, напрыклад &#454;"
+
+# glib/gmarkup.c:580

+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Лучыва да сымбалю не канчаецца кропкай з коскай; здаецца, што сымбаль & быў "
+"выкарыстаны ня для пазначэньня пачатка сутнасьці - экрануйце яго як &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Незавершанае лучыва сутнасьці"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Незавершанае лучыва сымбалю"
+
+# glib/gmarkup.c:837 glib/gmarkup.c:865 glib/gmarkup.c:896

+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Недапушчальна закадаваны тэкст UTF-8"
+
+# glib/gmarkup.c:837 glib/gmarkup.c:865 glib/gmarkup.c:896

+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Недапушчальна закадаваны тэкст UTF-8"
+
+# glib/gmarkup.c:837 glib/gmarkup.c:865 glib/gmarkup.c:896

+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Недапушчальна закадаваны тэкст UTF-8"
+
+# glib/gmarkup.c:932

+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Дакумэнт мусіць пачынацца з элемэнту (напрыклад <book>)"
+
+# glib/gmarkup.c:970

+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"\"%s\" не зьяўляецца дапушчальным сымбалем, які ідзе за сымбалем \"<\"; гэты "
+"сымбаль ня можа пачынаць назву элемэнту"
+
+# glib/gmarkup.c:1033

+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Дзіўны сымбаль \"%s\", чакаецца сымбаль \">\" для закрыцьця тэга элемэнту\"%s"
+"\""
+
+# glib/gmarkup.c:1120

+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Дзіўны сымбаль \"%s\", чакаўся сымбаль \"=\" пасьля назвы атрыбута \"%s\" "
+"элемэнту \"%s\""
+
+# glib/gmarkup.c:1161

+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Дзіўны сымбаль \"%s\", чакаліся сымбалі \">\" ці \"/\" для закрыцьця "
+"пачатковага тэгу элемэнта \"%s\" ці дадаткова атрыбут; магчыма, быў "
+"выкарыстаны недапушчальны сымбаль у назве атрыбуту"
+
+# glib/gmarkup.c:1244

+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Дзіўны сымбаль \"%s\", чакалася падвойная дужка пасьля знаку роўнасьці, калі "
+"надаецца значэньне атрыбуту \"%s\" элемэнту \"%s\""
+
+# glib/gmarkup.c:1384

+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"\"%s\" не зьяўляецца дапушчальным сымбалем, які ідзе за сымбалямі \"</\"; \"%"
+"s\" ня можа пачынаць назву элемэнту"
+
+# glib/gmarkup.c:1422

+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"\"%s\" ня зьяўляецца дапушчальным сымбалем, які закрывае назву элемэнту \"%s"
+"\"; дапушчальным сымбалем зьяўляецца \">\""
+
+# glib/gmarkup.c:1433

+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+"Элемэнт \"%s\" быў закрыты, аніводны элемэнт у бягучы момант не адкрыты"
+
+# glib/gmarkup.c:1442

+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Элемэнт \"%s\" быў закрыты, але ў гэты час адкрыты \"%s\""
+
+# glib/gmarkup.c:1574

+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Дакумэнт быў пусты ці утрымліваў толькі прагалы"
+
+# glib/gmarkup.c:1588

+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Дакумэнт нечакана скончыўся адразу пасьля вуглавой дужкі \"<\""
+
+# glib/gmarkup.c:1596 glib/gmarkup.c:1640

+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Дакумэнт нечакана скончыўся, калі элемэнты былі яшчэ адкрытыя - \"%s\" быў "
+"апошнім адкрытым элемэнтам"
+
+# glib/gmarkup.c:1604

+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Дакумэнт нечакана скончыўся, чакаецца вуглавая дужка якая закрывае тэг <%s/>"
+
+# glib/gmarkup.c:1610

+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Дакумэнт нечакана скончыўся ўнутры назвы элемэнту"
+
+# glib/gmarkup.c:1615

+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Дакумэнт нечакана скончыўся ўнутры назвы атрыбуту"
+
+# glib/gmarkup.c:1620

+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Дакумэнт нечакана скончыўся  ўнутры элемэнту які адкрывае тэг."
+
+# glib/gmarkup.c:1626

+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Дакумэнт нечакана скончыўся пасьля знаку роўнасьці, які ішоў за назвай "
+"атрыбуту: не пазначана значэньне атрыбуту"
+
+# glib/gmarkup.c:1633

+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Дакумэнт нечакана скончыўся ўнутры значэньня атрыбуту"
+
+# glib/gmarkup.c:1648

+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Дакумэнт нечакана скончыўся ўнутры элемэнту \"%s\" які закрывае тэг"
+
+# glib/gmarkup.c:1654

+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Дакумэнт нечакана скончыўся ўнутры камэнтару ці інструкцыі"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+# glib/giochannel.c:1587 glib/giochannel.c:1661

+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Канал закрываецца на няпоўным сымбалі"
+
+# glib/gconvert.c:592 glib/gconvert.c:882 glib/giochannel.c:1282

+# glib/giochannel.c:1324 glib/giochannel.c:2163 glib/gutf8.c:875

+# glib/gutf8.c:1320

+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Недапушчальная пасьлядоўнасьць байтаў на ўваходзе пераўтварэньня"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Незавершанае лучыва сымбалю"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Незавершанае лучыва сымбалю"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Незавершанае лучыва сымбалю"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Сымбалічныя спасылкі не падтрымліваюцца"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+# glib/gmarkup.c:219

+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Памылка ў радку %d сымбаль %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Незавершанае лучыва сутнасьці"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+# glib/gshell.c:71

+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Тэкст у дужках не пачынаецца з сымбалю дужкі"
+
+# glib/gshell.c:161

+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Неадпаведная дужка ў камандным радку ці іншым тэксьце абалонкі"
+
+# glib/gshell.c:529

+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Тэкст скончыўся адразу пасьля сымбалю \"\\\". (Тэкст быў \"%s\")"
+
+# glib/gshell.c:536

+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Тэкст скончыўся перад адпаведнай дужкай для %c. (Тэкст быў \"%s\")"
+
+# glib/gshell.c:548

+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Тэкст быў пусты (ці утрымліваў толькі прагалы)"
+
+# glib/gspawn-win32.c:214

+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Збой чытаньня даньняў з працэсу-нашчадка"
+
+# glib/gspawn-win32.c:981 glib/gspawn.c:1228

+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Збой стварэньня канала для абмену з працэсам-нашчадкам (%s)"
+
+# glib/gspawn-win32.c:843 glib/gspawn.c:914

+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Збой чытаньня даньняў з каналу нашчадка (%s)"
+
+# glib/gspawn-win32.c:931 glib/gspawn.c:1119

+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Збой зьмены каталёга \"%s\" (%s)"
+
+# glib/gspawn-win32.c:940

+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Збой выкананьня працэсу-нашчадка (%s)"
+
+# glib/gconvert.c:1729

+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Недапушчальная назва праграмы: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Недапушчальны радок у вэктары аргумэнту ў %d: %s"
+
+# glib/gutf8.c:1039 glib/gutf8.c:1048 glib/gutf8.c:1180 glib/gutf8.c:1189

+# glib/gutf8.c:1330 glib/gutf8.c:1426

+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Недапушчальны радок у асяродзьдзі: %s"
+
+# glib/gdir.c:79

+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Недапушчальны працоўны каталёг: %s"
+
+# glib/gspawn-win32.c:940

+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Збой выкананьня праграмы дапамогі (%s)"
+
+# glib/gspawn-win32.c:365

+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Непрадбачаная памылка ў функцыі g_io_channel_win32_poll()  чытаньня даньняў "
+"з працэсу-нашчадка"
+
+# glib/gspawn.c:161

+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Збой чытаньня даньняў з працэсу-нашчадка (%s)"
+
+# glib/gspawn.c:293

+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Непрадбачаная памылка у select() чытаньня даньняў з працэсу-нашчадка (%s)"
+
+# glib/gspawn.c:376

+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Непрадбачаная памылка ў waitpid() (%s)"
+
+# glib/gspawn.c:979

+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Збой разгалінаваньня  fork() (%s)"
+
+# glib/gspawn.c:1129

+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Збой выкананьня працэсу-нашчадка \"%s\" (%s)"
+
+# glib/gspawn.c:1139

+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Збой перанакіраваньня вываду ці ўводу працэсу-нашчадка (%s)"
+
+# glib/gspawn.c:1148

+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Збой разгалінаваньня fork() працэсу-нашчадка (%s)"
+
+# glib/gspawn.c:1156

+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Невядомая памылка выкананьня працэсу-нашчадка \"%s\""
+
+# glib/gspawn.c:1178

+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Збой чытаньня патрэбнае колькасьці даньняў з pid канала нашчадку (%s)"
+
+# glib/gutf8.c:950

+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Сымбаль па-за дыяпазонам UTF-8"
+
+# glib/gutf8.c:1039 glib/gutf8.c:1048 glib/gutf8.c:1180 glib/gutf8.c:1189

+# glib/gutf8.c:1330 glib/gutf8.c:1426

+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Недапушчальная пасьлядоўнасьць на ўваходзе пераўтварэньня"
+
+# glib/gutf8.c:1341 glib/gutf8.c:1437

+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Сымбаль па-за дыяпазонам UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Выкарыстаньне:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[МОЖНАСЬЦЬ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Можнасьці дапамогі:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Адлюстраваць можнасьці дапамогі"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Адлюстраваць усе можнасьці дапамогі"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Можнасьці дастасаваньня:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Немагчыма разабраць цэлае значэньне '%s' для %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Цэлае значэньне '%s' для %s па-за межамі"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Немагчыма разабраць цэлае значэньне '%s' для %s"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Цэлае значэньне '%s' для %s па-за межамі"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Нестае аргумэнту для %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Невядомая можнасьць %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "Дапушчальны файл ключу не адшуканы ў каталёгу даньняў"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Не зьяўляецца звычайным файлам"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Файл пусты"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Файл ключу ўтрымлівае радок '%s' які не зьяўляецца парай ключ-значэньне, "
+"групай, ці камэнтарам"
+
+# glib/gconvert.c:1729

+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Недапушчальная назва праграмы: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Файл ключу не пачынаецца з групы"
+
+# glib/gconvert.c:1729

+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Недапушчальная назва праграмы: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Файл ключу ўтрымлівае кадаваньне якое не падтрымліваецца '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Файл ключу не мае групу '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Файл ключу не мае ключ '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Файл ключу утрымлівае ключ '%s' са значэньнем '%s' які не закадаваны UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Файл ключу утрымлівае ключ '%s' які мае значэньне што не можа быць "
+"інтэрпрэтаванае."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Файл ключу утрымлівае ключ '%s' у групе '%s' які мае значэньне што не можа "
+"быць інтэрпрэтаванае."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Файл ключу не мае ключ '%s' у групе '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Файл ключу ўтрымлівае пасьлядоўнасьць завяршэньня ў канцы радку"
+
+# glib/gconvert.c:1648

+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Файл ключу утрымлівае недапушчальную пасьлядоўнасьць завяршэньня '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Значэньне '%s' не можа быць інтэрпрэтаванае як лік."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Цэлае значэньне '%s' па-за межамі"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Значэньне '%s' не можа быць інтэрпрэтаванае як лік."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Значэньне '%s' не можа быць інтэрпрэтаванае як булева."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Невядомая можнасьць %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Сымбалічныя спасылкі не падтрымліваюцца"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Сымбалічныя спасылкі не падтрымліваюцца"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+# glib/gconvert.c:1632

+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Назва вузлу ў URI \"%s\" недапушчальная"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+# glib/gconvert.c:1729

+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Недапушчальная назва праграмы: %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+# glib/gconvert.c:1729

+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Недапушчальная назва вузла"
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:745

+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Збой стварэньня файлу \"%s\": %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+# glib/gfileutils.c:745

+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Збой стварэньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:745

+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Збой стварэньня файлу \"%s\": %s"
+
+# glib/gdir.c:79

+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Памылка ў часе адкрыцьця каталёгу \"%s\": %s"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+# glib/gmarkup.c:1615

+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Дакумэнт нечакана скончыўся ўнутры назвы атрыбуту"
+
+# glib/gdir.c:79

+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Памылка ў часе адкрыцьця каталёгу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+# glib/gmarkup.c:303

+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Памылка ў радку %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Сымбалічныя спасылкі не падтрымліваюцца"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gfileutils.c:348

+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Не зьяўляецца звычайным файлам"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+# glib/gconvert.c:1729

+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Недапушчальная назва праграмы: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+# glib/gconvert.c:1632

+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Назва вузлу ў URI \"%s\" недапушчальная"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+# glib/gfileutils.c:348

+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Памылка чытаньня файлу \"%s\": %s"
+
+# glib/gmarkup.c:303

+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Памылка ў радку %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Памылка ў часе пераўтварэньня: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Сымбалічныя спасылкі не падтрымліваюцца"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[МОЖНАСЬЦЬ...]"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289

+# glib/giochannel.c:2175

+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Памылка ў часе пераўтварэньня: %s"
+
+# glib/gfileutils.c:505

+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Не магчыма зьмяніць рэжым файлу: збой fork(): %s"
+
+# glib/gfileutils.c:337 glib/gfileutils.c:402

+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Немагчыма зьмяніць рэжым файлу: збой waitpid(): %s"
+
+# glib/gfileutils.c:505

+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Не магчыма зьмяніць рэжым файлу: збой chmod(): %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Не магчыма зьмяніць рэжым файлу: Нашчадак забіты сыгналам: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Не магчыма зьмяніць рэжым файлу: Нашчадак ненармальна завяршыўся "
+
+# glib/giochannel.c:1110

+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Пераўтварэньне з набору сымбаляў \"%s\" у \"%s\" не падтрымліваецца"
+
+# glib/giowin32.c:704 glib/giowin32.c:733

+#~ msgid "Incorrect message size"
+#~ msgstr "Памылковы памер паведамленьня"
+
+# glib/giowin32.c:1037 glib/giowin32.c:1090

+#~ msgid "Socket error"
+#~ msgstr "Памылка сокету"
+
+# glib/giowin32.c:1290

+#~ msgid "Channel set flags unsupported"
+#~ msgstr "Набор сьцягоў каналу ня падтрымліваецца"
diff --git a/po/be@latin.po b/po/be@latin.po
new file mode 100644
index 0000000..9449d6c
--- /dev/null
+++ b/po/be@latin.po
@@ -0,0 +1,2059 @@
+# Pierakład glib.HEAD.
+# Copyright (C) 2007 THE glib.HEAD'S COPYRIGHT HOLDER
+# Alaksandar Navicki <zolak@lacinka.org>, 2007. www.lacinka.org
+# www.lacinka.org
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-02-16 23:33+0200\n"
+"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n"
+"Language-Team: Belarusian Latin <i18n@mova.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+# glib/gmarkup.c:1120
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Niečakany atrybut '%s' dla elementu '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Atrybut '%s' elementu '%s' nia znojdzieny"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Niečakany značnik '%s', spadziavalisia značnika '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Niečakany značnik '%s' unutry '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Niemahčyma znajści pravilnaha fajłu zakładak u katalohach źviestak"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Zakładka dla URI '%s' užo isnuje"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Dla URI '%s' nia znojdziena zakładak"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Nie akreśleny typ MIME ŭ zakładcy dla URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Nie akreślili pryvatnaha ściažka ŭ zakładcy dla URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nie akreślili hrup u zakładcy dla URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Nivodnaja aplikacyja pad nazvaj '%s' nie zarehistravała zakładki dla '%s'"
+
+# glib/gfileutils.c:745
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Prablema z razhortvańniem radka zapusku '%s' z URI '%s'"
+
+# glib/gconvert.c:390
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Kanversija naboru znakaŭ '%s' na '%s' nie padtrymlivajecca"
+
+# glib/gconvert.c:394
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Niemahčyma adčynić kanverter z  '%s' na '%s'"
+
+# glib/gconvert.c:592 glib/gconvert.c:882 glib/giochannel.c:1282
+# glib/giochannel.c:1324 glib/giochannel.c:2163 glib/gutf8.c:875
+# glib/gutf8.c:1320
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Niapravilnaja paśladoŭnaść bajtaŭ na ŭvachodzie kanversii"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Pamyłka padčas kanversii: %s"
+
+# glib/gconvert.c:615 glib/gutf8.c:871 glib/gutf8.c:1071 glib/gutf8.c:1212
+# glib/gutf8.c:1316
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Niapoŭny znak u kancy ŭvachodnaha radka"
+
+# glib/gconvert.c:788
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Niemahčyma pierakanvertavać surahat znaku '%s' na nabor znakaŭ '%s'"
+
+# glib/gconvert.c:1593
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"URI '%s' nie źjaŭlajucca absalutnym URI vykarystańnia \"fajłavaj\" schiemy"
+
+# glib/gconvert.c:1603
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI '%s' miascovaha fajłu nia moža ŭklučać '#'"
+
+# glib/gconvert.c:1620
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' niapravilny"
+
+# glib/gconvert.c:1632
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Niapravilnaja nazva hostu ŭ URI '%s' "
+
+# glib/gconvert.c:1648
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' utrymlivaje nieadpaviedna cytavanyja znaki"
+
+# glib/gconvert.c:1719
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Ściežka '%s nie źjaŭlajecca absalutnaj"
+
+# glib/gconvert.c:1729
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Niapravilnaja nazva kamputara"
+
+# glib/gdir.c:79
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Pamyłka pry adčynieńni katalohu '%s': %s"
+
+# glib/gfileutils.c:337 glib/gfileutils.c:402
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nie atrymałasia raźmierkavać %lu bajtaŭ dla adčytańnia fajłu \"%s\""
+
+# glib/gfileutils.c:348
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Pamyłka adčytańnia fajłu '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+# glib/gfileutils.c:426
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Pamyłka čytańnia z fajłu '%s': %s"
+
+# glib/gfileutils.c:465 glib/gfileutils.c:533
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Niemahčyma adčynić fajł '%s': %s"
+
+# glib/gfileutils.c:479
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Niemahčyma atrymać atrybuty fajłu '%s': funkcyja fstat() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Niemahčyma adčynić fajł '%s': funkcyja fdopen() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Niemahčyma źmianic nazvu fajłu '%s' na '%s': funkcyja g_rename() vyvieła "
+"pamyłku: %s"
+
+# glib/gfileutils.c:745
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Niemahčyma stvaryć fajł '%s': %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Niemahčyma adčynic fajł %s' dla zapisu: funkcyja fdopen() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Niemahčyma zapisać fajł '%s': funkcyja fwrite() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Niemahčyma zapisać fajł '%s': funkcyja fwrite() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Niemahčyma zapisać fajł '%s': funkcyja fwrite() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Niemahčyma začynić fajł %s': funkcyja fclose() vyvieła pamyłku: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Niemahčyma vydalić najaŭny fajł '%s': funkcyja g_unlink() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:712
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Šablon '%s' niapravilny, u im nie pavinna być '%s'"
+
+# glib/gfileutils.c:724
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "U šablonie '%s' niama XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+# glib/gfileutils.c:745
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Niemahčyma pračytać symbalnuju spasyłku '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbalnyja spasyłki nie padtrymlivajucca"
+
+# glib/giochannel.c:1114
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nielha adčynić kanverter z '%s' na '%s': %s"
+
+# glib/giochannel.c:1460
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Niemahčyma vykanać niepasrednaje čytańnie ŭ funkcyi "
+"g_io_channel_read_line_string"
+
+# glib/giochannel.c:1507 glib/giochannel.c:1761 glib/giochannel.c:1847
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "U bufery čytańnia zastalisia niepieraŭtvoranyja źviestki"
+
+# glib/giochannel.c:1587 glib/giochannel.c:1661
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Na kancy kanału isnuje paśladoŭnaść, jakaja adpaviadaje častcy znaku"
+
+# glib/giochannel.c:1647
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Niemahčyma vykanać niepasrednaje čytańnie ŭ funkcyi g_io_channel_read_to_end"
+
+# glib/gfileutils.c:505
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Niemahčyma adčynić fajł '%s': funkcyja open() vyvieła pamyłku: %s"
+
+# glib/gfileutils.c:505
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Niemahčyma zmapavać fajł '%s': funkcyja mmap() vyvieła: %s"
+
+# glib/gmarkup.c:219
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Pamyłka ŭ %d radku pry znaku %d: "
+
+# glib/gmarkup.c:303
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Pamyłka ŭ radku %d: %s"
+
+# glib/gmarkup.c:382
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "Pusty zapis '&;' adšukany; dapuščalnyja: &amp; &quot; &lt; &gt; &apos;"
+
+# glib/gmarkup.c:392
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak '%s' niedapuščalny na pačatku nazvy adzinki; znak & pačynaje adzinku; "
+"kali hety znak nie pavinien pačynać adzinki, zamianicie jaho na znak &amp;"
+
+# glib/gmarkup.c:428
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak '%s' niedapuščalny ŭnutry nazvy adzinki"
+
+# glib/gmarkup.c:472
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nieviadomaja nazva adzinki '%s'"
+
+# glib/gmarkup.c:482
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Zapis nie kančajecca kropkaj z koskaj; zdajecca, vykarystali znak &, jaki "
+"nia mieŭ aznačać pačatku adzinki — zamianicie jaho na &amp;"
+
+# glib/gmarkup.c:528
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Niemahčyma pierapracavać '%-.*s', dzie musić być ličba unutry łučyva da "
+"znaku (naprykład &#234;) — mahčyma, ličba zavialikaja"
+
+# glib/gmarkup.c:553
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Spasyłka na znak '%-.*s' nie źjaŭlajecca zapisam dazvolenaha znaku"
+
+# glib/gmarkup.c:570
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Pustaja spasyłka na znak: u joj pavinien być numar, naprykład &#454;"
+
+# glib/gmarkup.c:580
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Spasyłka na znak nie kančajecca kropkaj z koskaj; mahčyma znak & vykarystany "
+"nie dla paznačeńnia pačatku adzinki — u takim vypadku zamianicie jaho jak "
+"&amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Niezavieršanaja spasyłka na adzinku"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Niezavieršanaja spasyłka na znak"
+
+# glib/gmarkup.c:837 glib/gmarkup.c:865 glib/gmarkup.c:896
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Niapravilna kadavany tekst UTF-8 - zadoŭhaja paśladoŭnaść"
+
+# glib/gmarkup.c:837 glib/gmarkup.c:865 glib/gmarkup.c:896
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Niapravilna kadavany tekst UTF-8 - nie pačatkovy znak"
+
+# glib/gmarkup.c:837 glib/gmarkup.c:865 glib/gmarkup.c:896
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Niapravilna kadavany tekst UTF-8 - niapravilny \"%s\""
+
+# glib/gmarkup.c:932
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dakument musić pačynacca z elementu (naprykład <book>)"
+
+# glib/gmarkup.c:970
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' nie źjaŭlajecca dapuščalnym znakam, paśla znaku '<'; hety znak nia moža "
+"pačynać nazvy adzinki"
+
+# glib/gmarkup.c:1033
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Dziŭny znak '%s', čakaŭsia znak '>' dla zakančeńnia značnika elementu '%s'"
+
+# glib/gmarkup.c:1120
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Dziŭny znak '%s', čakaŭsia znak '=' paśla nazvy atrybutu '%s' elementu '%s'"
+
+# glib/gmarkup.c:1161
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Dziŭny znak '%s', čakali znaku '>' albo '/' dla zakryćcia pačatkovaha "
+"značnika elementu '%s' ci dadatkova atrybutu; mahčyma, byŭ vykarystany "
+"niedapuščalny znak u nazovie atrybutu"
+
+# glib/gmarkup.c:1244
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Dziŭny znak '%s', čakałasia padvojnaja dužka paśla znaku roŭnaści, kali "
+"nadajecca značeńnie atrybutu '%s' elementu '%s'"
+
+# glib/gmarkup.c:1384
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' nie źjaŭlajecca dapuščalnym znakam paśla znakaŭ '</'; '%s' nia moža "
+"pačynać nazovu elementu"
+
+# glib/gmarkup.c:1422
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' nia źjaŭlajecca dapuščalnym znakam zakančeńnia nazvy elementu '%s'; "
+"dapuščalnym znakam źjaŭlajecca '>'"
+
+# glib/gmarkup.c:1433
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' byŭ začynieny, dziejna niama adčynienych elementaŭ"
+
+# glib/gmarkup.c:1442
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' byŭ začynieny, ale dziejna adčynieny '%s'"
+
+# glib/gmarkup.c:1574
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dakument byŭ pusty albo ŭtrymlivaŭ tolki prabieły"
+
+# glib/gmarkup.c:1588
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Adrazu paśla znaku '%s' dakument niečakana skončyŭsia"
+
+# glib/gmarkup.c:1596 glib/gmarkup.c:1640
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dakument niečakana skončyŭsia, kali peŭnyja elementy byli jašče adčynienyja "
+"— '%s' byŭ apošnim adčynienym elementam"
+
+# glib/gmarkup.c:1604
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dakument niečakana skončyŭsia, čakałasia vuhłavaja dužka, jakaja začyniaje "
+"značnik <%s/>"
+
+# glib/gmarkup.c:1610
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dakument niečakana skončyŭsia ŭnutry nazvy elementu"
+
+# glib/gmarkup.c:1615
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dakument niečakana skončyŭsia ŭnutry nazvy atrybutu"
+
+# glib/gmarkup.c:1620
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dakument niečakana skončyŭsia ŭnutry elementu, jaki adkryvaje značnik."
+
+# glib/gmarkup.c:1626
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dakument niečakana skončyŭsia paśla znaku roŭnaści, jaki išoŭ za nazvaj "
+"atrybutu: niama vartaści atrybutu"
+
+# glib/gmarkup.c:1633
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dakument niečakana skončyŭsia ŭnutry vartaści atrybutu"
+
+# glib/gmarkup.c:1648
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dakument niečakana skončyŭsia ŭnutry značnika zamykańnia elementu '%s'"
+
+# glib/gmarkup.c:1654
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Dakument niečakana skončyŭsia ŭnutry kamentara albo instrukcyi"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "sapsavany abjekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "unutranaja pamyłka ci sapsavany abjekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "nie chapiła pamiaci"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "limit viartańnia (backtracking) dasiahnutaja"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"šablon utrymlivaje elementy, jakija nie padtrymvajucca dla častkovaj "
+"adpaviadnaści"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "unutranaja pamyłka"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"advarotnyja spasyłki jak umovy nie padtrymvajucca dla častkovaj adpaviadnaści"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "limit rekursii dasiahnuty"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "limit rabočaj prastory dla pustych padradkoŭ dasiahnuty"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "niapravilnaja kambinacyja ściažkoŭ novych radkoŭ"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "nieviadomaja pamyłka"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ u kancy šablonu"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c u kancy šablonu"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "za \\ śleduje nieviadomy znak"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"escapy, jakija źmianiajuć rehistar (\\l, \\L, \\u, \\U), tut nie dazvolenyja"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "niečarhovyja liki ŭ quantyfikatary {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "zavialiki lik u quantyfikatary {}"
+
+# glib/giochannel.c:1587 glib/giochannel.c:1661
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "nie staje kancavoj [ dziela znakavaj klasy"
+
+# glib/gconvert.c:592 glib/gconvert.c:882 glib/giochannel.c:1282
+# glib/giochannel.c:1324 glib/giochannel.c:2163 glib/gutf8.c:875
+# glib/gutf8.c:1320
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "niapravilnaja paśladoŭnaść escape ŭ znakavaj klasie"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "dyjapazon nie ŭ paradku ŭ klasie znakaŭ"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "niama čaho paŭtarać"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "nieviadomy znak paśla (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "nieviadomy znak paśla (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "nieviadomy znak paśla (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "Nazvanyja klasy POSIX padtrymlivajucca tolki ŭ klasach"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "nie staje kancavoha )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") biaz pačatkovaj ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ci (?[+-]ličby musić zakančvacca na )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "spasyłka na niaisny padšablon"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "nie staje ) paśla kamentara"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "rehularny vyraz zavialiki"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "niemahčyma atrymać pamiaci"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "assertacyja lookbehind niastałaj daŭžyni"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "nierečaisny lik ci nazva paśla (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "umoŭnaja hrupa maje bolej za dźvie haliny"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "čakaŭsia assert paśla (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nieviadomaja nazva klasy POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "elementy paradkavańnia POSIX nie padtrymlivajucca"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "znakavaja vartaść u paśladoŭnaści \\x{...} zavialikaja"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "niapravilnaja ŭmova (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C nie dazvoleny ŭ assertacyi lookbehind"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursiŭny vyklik moža zacyklicca niapeŭnym čynam"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "nie staje terminatara ŭ naźvie padšablonu"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dva nazvanyja padšablony adnolkava nazyvajucca"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "nierečaisnaja paśladoŭnaść \\P ci \\p"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nazva nieviadomaj ułaścivaści paśla \\P ci \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "nazva padšablonu zavialikaja (maksymalna 32 znakaŭ)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "zašmat nazvanych padšablonaŭ (maksymalna 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "vaśmiarkovaja vartaść bolšaja za \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "Hrupa DEFINE źmiaščaje bolš za adnu halinu"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "paŭtor hrupy DEFINE nie dazvoleny"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "niapoŭnyja opcyi NEWLINE"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"paśla \\g nie padadziena nazvy ŭ dužkach ci nienulavoha liku ŭ "
+"nieabaviazkovych dužkach"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "niečakany paŭtor"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "pierapaŭnieńnie kodu"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "rabočy abšar dla kampilavańnia pierapaŭnieńnia"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "raniej pravierany padšablon sa spasyłkami nia znojdzieny"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Pamyłka padčas pošuku adpaviednikaŭ dla rehularnaha vyrazu %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Biblijateka PCRE skampilavanaja biez padtrymki UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Biblijateka PCRE skampilavanaja biez padtrymki ŭłaścivaściaŭ UTF8"
+
+# glib/gmarkup.c:219
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Pamyłka padčas kampilavańnia rehularnaha vyrazu %s pry znaku %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Pamyłka padčas aptymizacyi rehularnaha vyrazu %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "šasnaccatkovaja ličba ci \"}\" čakalisia"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "šasnaccatkovaja ličba čakałasia"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "nie staje \"<\" u symbalnaj spasyłcy"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "niezavieršanaja symbalnaja spasyłka"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "symbalnaja spasyłka nulavoj daŭžyni"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "čakałasia ličba"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "zabaronienaja symbalnaja spasyłka"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "zabłukaŭšy kancavy \"\\\""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "nieviadomaja cytavanaja paśladoŭnaść"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Pamyłka padčas razboru tekstu zamieny \"%s\" pry znaku %lu: %s"
+
+# glib/gshell.c:71
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Cytavany znak nie pačynajecca znakam dvukośsia"
+
+# glib/gshell.c:161
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"U zahadnym radku albo inšym cytavanym, jak u abałoncy, tekście pajaviŭsia "
+"adzinočny znak cytavańnia"
+
+# glib/gshell.c:529
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst skončyŭsia adrazu paśla znaku '\\'. (Tekst byŭ '%s')"
+
+# glib/gshell.c:536
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Tekst skončyŭsia pierad adpaviednym dvukośsiem dla %c. (Tekst byŭ '%s')"
+
+# glib/gshell.c:548
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekst byŭ pusty (albo ŭ im byli tolki prabieły)"
+
+# glib/gspawn-win32.c:214
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Niemahčyma adčytać źviestki pracesu-naščadka"
+
+# glib/gspawn-win32.c:981 glib/gspawn.c:1228
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Nielha stvaryć płyniu dziela kamunikacyi z pracesam-naščadkam (%s)"
+
+# glib/gspawn-win32.c:843 glib/gspawn.c:914
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Niemahčyma adčytać płyniu naščadka (%s)"
+
+# glib/gspawn-win32.c:931 glib/gspawn.c:1119
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Niemahčyma źmianić kataloh na '%s' (%s)"
+
+# glib/gspawn-win32.c:940
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Niemahčyma vykanać praces-naščadka (%s)"
+
+# glib/gconvert.c:1729
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Niapravilnaja nazva prahramy: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Niapravilny paradak u arhumencie %d: %s"
+
+# glib/gutf8.c:1039 glib/gutf8.c:1048 glib/gutf8.c:1180 glib/gutf8.c:1189
+# glib/gutf8.c:1330 glib/gutf8.c:1426
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Niapravilny radok u asiarodździ: %s"
+
+# glib/gdir.c:79
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Niapravilny rabočy kataloh: %s"
+
+# glib/gspawn-win32.c:940
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Niemahčyma ŭklučyć prahramu dapamohi (%s)"
+
+# glib/gspawn-win32.c:365
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Pry adčytvańni źviestak pracesu-naščadka ŭ funkcyi g_io_channel_win32_poll() "
+"adbyłasia nieviadomaja pamyłka"
+
+# glib/gspawn.c:161
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Niemahčyma adčytać źviestki pracesu-naščadka (%s)"
+
+# glib/gspawn.c:293
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Niečakanaja pamyłka ŭ funkcyi select() padčas čytańnia źviestak pracesu-"
+"naščadka (%s)"
+
+# glib/gspawn.c:376
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Niečakanaja pamyłka ŭ waitpid() (%s)"
+
+# glib/gspawn.c:979
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Niemahčyma stvaryć praces (%s)"
+
+# glib/gspawn.c:1129
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Niemahvyma vykanać praces-naščadka \"%s\" (%s)"
+
+# glib/gspawn.c:1139
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Niemahčyma pierakiravać uvachod albo vyjście pracesu-naščadka (%s)"
+
+# glib/gspawn.c:1148
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Niemahčyma stvaryć praces-naščadka (%s)"
+
+# glib/gspawn.c:1156
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nieviadomaja pamyłka vykanańnia pracesu-naščadka \"%s\""
+
+# glib/gspawn.c:1178
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Niemahčyma adčytać adpaviednuju kolkaść źviestak ź PID kanału naščadka (%s)"
+
+# glib/gutf8.c:950
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak pa-za dyjapazonam UTF-8"
+
+# glib/gutf8.c:1039 glib/gutf8.c:1048 glib/gutf8.c:1180 glib/gutf8.c:1189
+# glib/gutf8.c:1330 glib/gutf8.c:1426
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Niapravilny paradak na ŭvachodzie kanversii"
+
+# glib/gutf8.c:1341 glib/gutf8.c:1437
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak pa-za dyjapazonam UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Vykarystańnie:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCYJA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcyi dapamohi:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Pakažy opcyi dapamohi"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Pakažy ŭsie opcyi dapamohi"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcyi aplikacyi:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Niemahčyma pierapracavać ličbavaj vartaści '%s' dla %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Ličbavaja vartaść '%s' dla %s pa-za dapuščalnymi miežami"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nielha pierapracavać padvojnuju ličbavuju vartaść '%s' dla %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Padvojnaja ličbavaja vartaść '%s' dla %s pa-za dapuščalnymi miežami"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Pamyłka padčas pierapracoŭki %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Adsutny parametar dla %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Nieviadomaja opcyja %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Niemahčyma znajści pravilnaha fajłu kluča ŭ katalohach pošuku"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Heta nie zvyčajny fajł"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Fajł pusty"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Fajł kluču ŭtrymlivaje radok '%s', jaki nie źjaŭlajecca paraj kluč-vartaść, "
+"hrupaj, albo kamentarom"
+
+# glib/gconvert.c:1729
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Niapravilnaja nazva hrupy: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Fajł kluča nie pačynajecca ad hrupy"
+
+# glib/gconvert.c:1729
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Niapravilnaja nazva kluča: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Fajł kluča ŭtrymlivaje kadavańnie '%s', jakoje nie absłuhoŭvajecca"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Fajł kluča nie ŭklučaje ŭ siabie hrupy '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Fajł kluča nie ŭklučaje ŭ siabie kluča '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Fajł kluča ŭklučaje ŭ siabie kluč '%s' z vartaściu '%s', nie zapisanaj jak "
+"UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Fajł kluča ŭklučaje ŭ siabie kluč '%s' ź nieinterpretavalnaj vartaściu."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Fajł kluča ŭklučaje ŭ siabie kluč '%s' u hrupie '%s', jaki maje "
+"nieinterpretavalnuju vartaść."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Fajł kluča nia maje kluča '%s' u hrupie '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Fajł kluča maje ŭ sabie cytavany znak na kancy radka"
+
+# glib/gconvert.c:1648
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Fajł kluča maje ŭ sabie niedapuščalny cytavalny łancužok '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Nielha interpretavać '%s' jak ličbavuju vartaść."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Ličbavaja vartaść '%s' pa-za dapuščalnymi miežami"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+"Niemahčyma interpretavać značeńnie '%s' jak ličbavuju vartaść ź "
+"niefiksavanaj koskaj."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Ličbavuju vartaść '%s' niemahčyma interpretavać jak lahičnuju vartaść."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Funkcyi %s pieradadzieny nadta vialiki ličylnik"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Płyń užo začynienaja"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Aperacyja anulavanaja"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Nieviadomy typ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "typ fajłaŭ %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "typ %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Zaŭčasny kaniec płyni"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Nienazvany"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Fajł stała nie akreślivaje pola Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Niemahčyma znajści terminału, vymahanaha dla aplikacyi"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Niemahčyma stvaryć kanfihuracyjny kataloh %s karystalnika dla aplikacyi: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Niemahčyma stvaryć kanfihuracyjny kataloh MIME %s dla karystalnika: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Niemahčyma stvaryć fajł stała %s dla karystalnika"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Asablivaje aznačeńnie dla %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "pryłada nie zaimplementavała vysoŭvańnia (eject)"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "pryłada nie zaimplementavała apytańnia nośbitaŭ (poll)"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Aperacyja nie padtrymlivajecca"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Źmiaščalnaje mantavańnie nie isnuje"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Niemahčyma skapijavać zamiest katalohu"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Niemahčyma skapijavać kataloh zamiest inšaha katalohu"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Metavy fajł isnuje"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Niemahčyma rekursiŭna skapijavać kataloh"
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "Niemahčyma skapijavać zamiest katalohu"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Padadzienaja niapravilnaja vartaść symbalnaj spasyłki"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Śmietnica nie padtrymlivajacca"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Nazvy fajłaŭ nia mohuć utrymlivać \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "masiŭ nie zaimplementavaŭ mantavańnia (mount)"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Nivodnaja aplikacyja nie zarehistravanaja dla pracy z hetym fajłam"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Ličylnik začynieny"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "U fajłavaha ličylnika jość važkaja aperacyja"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Fajłavy ličylnik užo začynieny"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+# glib/gconvert.c:1632
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Niapravilnaja nazva hostu ŭ URI '%s' "
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Płyń nie padtrymlivaje query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Dla płyni nie padtrymlivajecca zruch"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Dla ŭvachodnaj płyni nie dazvolenaje abcinańnie"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Dla płyni nie padtrymlivajecca abcinańnie"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Uvachodnaja płyń nie zaimplementavała čytańnia (read)"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Dla płyni jość važkaja aperacyja"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Niemahčyma znajści zmoŭčany typ manitora dla lakalnaha katalohu"
+
+# glib/gconvert.c:1729
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Niapravilnaja nazva fajłu %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Pamyłka atrymańnia źviestak ab fajłavaj systemie: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Niemahčyma źmianić nazvu dla karaniovaha katalohu"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Pamyłka adčytańnia fajłu: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Niemahčyma źmianić nazvu dla fajłu, taki fajł užo isnuje"
+
+# glib/gconvert.c:1729
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Niapravilnaja nazva fajłu"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Pamyłka adčynieńnia fajłu: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Niemahčyma adčynić kataloh"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Pamyłka vydaleńnia fajłu: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Pamyłka vykidańnia ŭ śmietnicu fajłu: %s"
+
+# glib/gfileutils.c:745
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Niemahčyma stvaryć kataloh śmietnicy %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Niemahčyma znajści najvyšejšy kataloh dziela śmiećcia"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Niemahčyma znajści ci stvaryć kataloh dziela śmiećcia"
+
+# glib/gfileutils.c:745
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Niemahčyma stvaryć śmiaćciovy fajł źviestak: %s"
+
+# glib/gfileutils.c:745
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Niemahčyma vykinuć u śmietnicu fajł: %s"
+
+# glib/gdir.c:79
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Pamyłka pry adčynieńni katalohu '%s': %s"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Pamyłka stvareńnia symbalnaj spasyłki: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Pamyłka pieranosu fajłu: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Niemahčyma pieranieści kataloh zamiest inšaha katalohu"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Niaŭdałaje stvareńnie zapasnoha fajłu"
+
+# glib/gfileutils.c:348
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Pamyłka vydaleńnia metavaha fajłu: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Pieranos pamiž punktami mantavańnia nie padtrymlivajecca"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Vartaść atrybutu musić być nia-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Niapravilny typ atrybutu (čakaŭsia tekstavy radok)"
+
+# glib/gmarkup.c:1615
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Niapravilnaja nazva pašyranaha atrybutu"
+
+# glib/gdir.c:79
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Pamyłka akreśleńnia pašyranaha atrybutu '%s': %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Pamyłka atrymańnia stat() dla fajłu '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (niapravilnaje kadavańnie)"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Pamyłka atrymańnia stat() dla fajłavaha deskryptara: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Niapravilny typ atrybutu (čakaŭsia uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Niapravilny typ atrybutu (čakaŭsia uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Niapravilny typ atrybutu (čakaŭsia bajtavy radok)"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Pamyłka akreśleńnia pravoŭ: %s"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Pamyłka akreśleńnia ŭładalnika: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbalnaja spasyłka musić być nia-NULL"
+
+# glib/gmarkup.c:303
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Pamyłka akreśleńnia symbalnaj spasyłki: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Pamyłka akreśleńnia symbalnaj spasyłki: fajł nie źjaŭlajecca symbalnaj "
+"spasyłkaj"
+
+#: gio/glocalfileinfo.c:2074
+#, fuzzy
+msgid "SELinux context must be non-NULL"
+msgstr "symbalnaja spasyłka musić być nia-NULL"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Pamyłka akreśleńnia ŭładalnika: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Akreśleńnie atrybutu %s nie padtrymlivajecca"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Pamyłka adčytańnia z fajłu: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Pamyłka zruchu ŭ fajle: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Pamyłka začynieńnia fajłu: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Niemahčyma znajści zmoŭčany typ manitora dla lakalnaha fajłu"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Pamyłka zapisu ŭ fajł: %s"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Pamyłka vydaleńnia staroj zapasnoj spasyłki: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Pamyłka stvareńnia zapasnoj kopii: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Pamyłka źmieny nazy časovaha fajłu: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Pamyłka abcinańnia fajłu: %s"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Pamyłka adčynieńnia fajłu '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Metavy fajł źjaŭlajecca kataloham"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Metavy fajł nia prosty"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Fajł byŭ źmienieny zvonku"
+
+# glib/gfileutils.c:348
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Pamyłka vydaleńnia fajłu: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Akreśleny niapravilny GSeekType"
+
+# glib/gconvert.c:1729
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Niapravilnaja zapyt pieraskoku ŭ fajle"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Niemahčyma padrezać GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Dasiahnuta maksymalnaje abmiežavańnie masiva źviestak"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Nielha źmianiać pamier płyni vyjścia ŭ pamiaci"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Nie ŭdałosia źmianić pamier płyni vyjścia ŭ pamiaci"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mantavańnie nie zaimplementavała admantavańnia (unmount)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mantavańnie nie zaimplementavała vysoŭvańnia (eject)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mantavańnie nie zaimplementavała pieramantavańnia (remount)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+#, fuzzy
+msgid "mount doesn't implement content type guessing"
+msgstr "mantavańnie nie zaimplementavała admantavańnia (unmount)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+#, fuzzy
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mantavańnie nie zaimplementavała admantavańnia (unmount)"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Vyjściovaja płyń nie zaimplementavała zapisu (write)"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Kryničnaja płyń užo začynienaja"
+
+#: gio/gthemedicon.c:211
+#, fuzzy
+msgid "name"
+msgstr "Nienazvany"
+
+# glib/gconvert.c:1632
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Niapravilnaja nazva hostu ŭ URI '%s' "
+
+#: gio/gthemedicon.c:223
+#, fuzzy
+msgid "names"
+msgstr "Nienazvany"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+# glib/gfileutils.c:348
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Pamyłka atrymańnia stat() dla fajłavaha deskryptara: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+# glib/gfileutils.c:348
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Pamyłka adčytańnia z unix: %s"
+
+# glib/gmarkup.c:303
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Pamyłka začynieńnia unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Korań fajłavaj systemy"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Pamyłka zapisu ŭ unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "masiŭ nie zaimplementavaŭ vysoŭvańnia (eject)"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Niemahčyma znajści aplikacyju"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Pamyłka ŭklučeńnia aplikacyi: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Adrasy URI nie padtrymlivajucca"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "źmieny asacyjacyjaŭ nie padtrymlivajucca dla win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Stvareńnie asacyjacyjaŭ nie padtrymlivajecca dla win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "nie chavaj elementaŭ"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "užyj daŭhi śpiskavy farmat"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FAJŁ...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u bajt"
+#~ msgstr[1] "%u bajty"
+#~ msgstr[2] "%u bajtaŭ"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "Niemahčyma zahruzić tolki što stvorany fajł stała"
+
+# glib/gconvert.c:597 glib/gconvert.c:813 glib/giochannel.c:1289
+# glib/giochannel.c:2175
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Pamyłka stvareńnia zapasnoj spasyłki: %s"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr ""
+#~ "Funkcyi g_input_stream_read_async pieradadzieny nadta vialiki ličylnik"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "Funkcyi g_input_stream_skip pieradadzieny nadta vialiki ličylnik"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr ""
+#~ "Funkcyi g_input_stream_skip_async pieradadzieny nadta vialiki ličylnik"
+
+#~ msgid "Target file already exists"
+#~ msgstr "Metavy fajł užo isnuje"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "Funkcyi g_output_stream_write pieradadzieny nadta vialiki ličylnik"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr ""
+#~ "Funkcyi g_output_stream_write_async pieradadzieny nadta vialiki ličylnik"
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..7c7d7cf
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,1862 @@
+# Bulgarian translation for glib po-file.
+# Copyright (C) 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+# Borislav Aleksandrov <B.Aleksandrov@cnsys.bg>, 2002.
+# Alexander Shopov <ash@contact.bg>, 2002, 2005, 2006, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib trunk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 14:06+0200\n"
+"Last-Translator: Alexander Shopov <ash@contact.bg>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Неочакван атрибут „%s“ на елемента „%s“"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Атрибутът „%s“ на елемента „%s“ не е открит"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Неочакван етикет „%s“, очакваше се „%s“"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Неочакван етикет „%s“ вътре в „%s“"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Не може да се открие валиден файл с отметки в папките с данни"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Вече съществува отметка за адреса „%s“"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Не е открита отметка за адреса „%s“"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Не е указан видът MIME в отметката за адреса „%s“"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Не е зададен флаг за лични данни в отметката за адреса „%s“"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Не са зададени групи в отметката за адреса „%s“"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Никоя програма „%s“ не е регистрирала отметка за „%s“"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Неуспех при дописването на реда за изпълнение „%s“ с адреса „%s“"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Преобразуването от набора знаци „%s“ към „%s“ не се поддържа"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не може да се отвори конвертор от „%s“ към „%s“"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Грешна байтова последователност на входа за преобразуване"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Грешка по време на преобразуване: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Непълна знакова последователност в края на входните данни"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+"Заместващият знак „%s“ не може да бъде преобразуван към знак от набора „%s“"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"Адресът „%s“ не е абсолютен при използване на схемата „file“ (файлова "
+"система)"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Адресът „%s“ на локален файл не може да включва „#“"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Адресът „%s“ е неправилен"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Името на хоста в адреса „%s“ е неправилно"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Адресът „%s“ съдържа грешни екраниращи последователности"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Пътят „%s“ не е абсолютен"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Неправилно име на хост"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Грешка при отваряне на папка „%s“: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Неуспех при заделянето на %lu байта за четене на файла „%s“"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Грешка при четене на файл „%s“: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Файлът „%s“ е прекалено голям"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Неуспех при четене от файл „%s“: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Неуспех при отваряне на файл „%s“: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Неуспех при получаване на атрибутите на файл „%s“: неуспешно изпълнение на "
+"fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr ""
+"Неуспех при отваряне на файл „%s“: неуспешно изпълнение на fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Неуспех при преименуване на файл „%s“ на „%s“: неуспешно изпълнение на "
+"g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Неуспех при създаване на файл „%s“: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Неуспех при отваряне на файл „%s“ за писане: неуспешно изпълнение на fdopen"
+"(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Неуспех при запис на файл „%s“: неуспешно изпълнение на fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Неуспех при запис на файл „%s“: неуспешно изпълнение на fflush(): %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Неуспех при запис на файл „%s“: неуспешно изпълнение на fsync(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr ""
+"Неуспех при затваряне на файл „%s“: неуспешно изпълнение на fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Неуспех при изтриването на съществуващия файл „%s“: неуспешно изпълнение на "
+"g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Шаблонът „%s“ е неправилен, не трябва да съдържа „%s“"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Шаблонът „%s“ не съдържа XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Неуспех при четене на символната връзка „%s“: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Символни връзки не се поддържат"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не може да се отвори конвертор от „%s“ към „%s“: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Не може да се чете от g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "В буфера за четене останаха непреобразувани данни"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Каналът прекъсна на непълен знак"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Не може да се чете от g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Неуспех при отваряне на файл „%s“: неуспешно изпълнение на open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+"Неуспех при отваряне на файл в паметта „%s“: неуспешно изпълнение на mmap(): "
+"%s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Грешка на ред %d, знак %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Грешка на ред %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Намерена е празна заместваща последователност: „&;“. Валидни "
+"последователности са: „&amp;“, „&quot;“, „&lt;“, „&gt;“, „&apos;“"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Заместваща последователност не може да започва със знака „%s“. Тя трябва да "
+"започва със знака „&“. Ако той не трябва да започва заместваща "
+"последователност, той може да се екранира така: „&amp;“"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Знакът „%s“ не може да се съдържа в заместваща последователност"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Заместващата последователност „%s“ е неизвестна"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Заместващата последователност не завършва с „;“. Най-вероятно сте използвали "
+"амперсанд, без той да е начало на заместваща последователност. Представете "
+"амперсанда чрез „&amp;“"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Грешка при анализ на „%-.*s“, което трябва да е число в указател на знак "
+"(напр. &#234;). Вероятно числото е твърде голямо"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Указателят на знак „%-.*s“ не представя разрешен знак при декодиране"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Празен указател на знак. Трябва да включва число, напр. &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Указателят на знак не завършва с „;“. Най-вероятно сте използвали амперсанд, "
+"без той да е начало на заместваща последователност. Представете амперсанда "
+"чрез „&amp;“"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Незавършена заместваща последователност"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Незавършен указател на знак"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Неправилно кодиран текст в UTF-8 — прекалено дълга последователност"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Неправилно кодиран текст в UTF-8 — не може да се започва с този знак"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Неправилно кодиран текст в UTF-8 — „%s“ е грешен"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Документът трябва да започва с елемент (напр. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s“ е неправилен знак след „<“. Името на елемент не може да започне с него"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Неподходящ знак „%s“, очаква се етикетът на празния елемент „%s“ да завърши "
+"с „>“"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Неподходящ знак „%s“, очаква се „=“ след името на атрибут „%s“ на елемент „%"
+"s“"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Неподходящ знак „%s“, очаква се или отварящият етикет на елемента „%s“ да "
+"завърши със знак „>“ или „/“, или евентуално да продължи с атрибут. Най-"
+"вероятно използвате неправилен знак в името на атрибут"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Неподходящ знак „%s“, очаква се знакът „\"“ след знака за равенство, когато "
+"се присвоява стойност на атрибута „%s“ на елемент „%s“"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s“ е неправилен знак след „</“. Името на елемент не може да започва с „%s“"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s“ е неправилен знак при завършването на затварящ етикет с име „%s“. "
+"Позволен е знакът „>“"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Елементът „%s“ е затворен, няма текущо отворен елемент"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Елементът „%s“ е затворен, но текущо е отворен елемент „%s“"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Документът е празен или съдържа само празни знаци"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Документът завършва неочаквано веднага след отваряща счупена скоба — „<“"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Документът завършва неочаквано — има отворени елементи. Последно отворен е „%"
+"s“"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Документът завършва неочаквано, очаква се затваряща счупена скоба да завърши "
+"етикета <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Документът завършва неочаквано в името на елемент"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Документът завършва неочаквано в името на атрибут"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Документът завършва неочаквано в отварящ етикет на елемент "
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Документът завършва неочаквано след знака за равенство следващ името на "
+"атрибута. Атрибутът няма стойност"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Документът завършва неочаквано вътре в стойността на атрибут"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Документът завършва неочаквано в затварящия етикет на елемент „%s“"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Документът завършва неочаквано в коментар или инструкция за обработка"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "повреден обект"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "вътрешна грешка или повреден обект"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "недостатъчно памет"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "достигната е границата на обратното връщане"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"шаблонът съдържа елементи, които не се поддържат при частично съвпадение"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "вътрешна грешка"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"обратните указатели не се поддържат като условие при частично съвпадение"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "прекалено дълбока рекурсия"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "границата на работното пространство за празни поднизове е достигната"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "неправилна комбинация от флагове за нов ред"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "непозната грешка"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "„\\“ в края на шаблон"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "„\\c“ в края на шаблон"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "след „\\“ следва непознат знак"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"тук не са позволени екранирания за промяна на регистъра („\\l“, „\\L“, "
+"„\\u“, „\\U“)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "числата не са в правилен ред в определението за брой с „{}“"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "прекалено голямо число в определението за брой с „{}“"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "липсва завършващ знак „]“ за клас от знаци"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "грешна екранираща последователност в класа от знаци"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "знаците са в неправилен ред в класа от знаци"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "няма какво да се повтори"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "непознат знак след „(?“"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "непознат знак след „(?<“"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "непознат знак след „(?P“"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "именованите класове от POSIX се поддържат само в клас"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "липсва завършваща „)“"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "„)“ без отваряща „(“"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "„(?R“ или „(?[+-]цифри“ трябва да се следват от „)“"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "указател към несъществуващ подшаблон"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "липсваща „)“ след коментар"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "регулярният израз е прекалено голям"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "неуспех при получаването на памет"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "предположението за преглед назад не е с постоянна дължина"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "неправилен номер или име след „(?(“"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "условната група съдържа повече от две разклонения"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "очаква се предположение след „(?(“"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "непознато име на клас по POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "не се поддържат елементи на POSIX за подредба"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "знаковата стойност в последователността „\\x{…}“ е прекалено голяма"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "неправилно условие „(?(0)“"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "предположението за преглед назад не може да съдържа „\\C“"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "рекурсивно извикване може да доведе до безкраен цикъл"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "липсва краен знак в име на подшаблон"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "два именовани подшаблона са с еднакво име"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "неправилни последователности „\\P“ или „\\p“"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "непознато име на свойство след „\\P“ или „\\p“"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "името на подшаблон е прекалено дълго (максимално е 32 знака)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "прекалено много именовани подшаблони (максимумът е 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "осмичната стойност е по-голяма от „\\377“"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "групата DEFINE съдържа повече от едно разклонение"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "не можете да повторите група DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "несъвместими опции за нов ред"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"„\\g“ не е последвано от име във фигурни скоби или число различно от „0“ "
+"евентуално във фигурни скоби"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "неочаквано повторение"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "препълване на кода"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "надхвърлено е работното пространство за компилация"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "не е открит указан предварително проверен подшаблон"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Грешка %2$s при напасването на регулярния израз — %1$s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Библиотеката PCRE е компилирана без поддръжка на UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Библиотеката PCRE е компилирана без поддръжка на настройки в UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Грешка при компилирането на регулярния израз %s, знак %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Грешка при оптимизирането на регулярния израз %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "очаква се шестнайсетично число или „}“"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "очаква се шестнайсетично число"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "в символния указател липсва „<“"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "незавършен символен указател"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "символен указател с нулева дължина"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "очаква се цифра"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "неправилен символен указател"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "в края има един знак „\\“ в повече"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "непозната екранираща последователност"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Грешка при анализа на текста за замяна „%s“, знак %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Цитиран текст не започва със знака „\"“"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Липсват затварящи кавички в команден ред или друг текст цитиран за обвивката"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Текстът свърши веднага след знака „\\“. (Текстът е „%s“)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Текстът свърши преди откриването на затварящи кавички за %c. (Текстът е „%s“)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Текстът е празен (или съдържа само празни знаци)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Неуспех при четене на данни от дъщерен процес"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Неуспех при създаването на канал за комуникация с дъщерен процес (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Неуспех при четене от дъщерен канал (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Неуспех при промяна към папка „%s“ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Неуспех при изпълнение на дъщерен процес (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Неправилно име на програма: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Невалиден низ във вектора с аргументи на позиция %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Неправилен низ в средата: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Неправилна работна папка: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Неуспех при изпълнение на програмата за помощта (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Неочаквана грешка в g_io_channel_win32_poll() при четене на данни от дъщерен "
+"процес"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Неуспех при четене на данни от дъщерен процес (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Неочаквана грешка в select() при четене на данни от дъщерен процес (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Неочаквана грешка в waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Неуспешно разклоняване (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Неуспех при изпълнение на дъщерен процес „%s“ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Неуспех при пренасочване на изхода или входа на дъщерен процес (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Неуспех при разклоняване на дъщерен процес (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Неизвестна грешка при изпълнение на дъщерен процес „%s“"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Неуспех при четенето на достатъчно данни от канала на дъщерен процес (с "
+"идентификатор %s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Знак извън обхвата на UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Неправилна последователност на входа за преобразуване"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Знак извън обхвата на UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Употреба:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ОПЦИЯ…]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Настройки на помощта:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Показване на настройките на помощта"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Показване на всички настройки на помощта"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Настройки на приложението:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Не може да се анализира целочислената стойност „%s“ за %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+"Целочислената стойност „%s“ за %s е извън интервала на допустимите стойности"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+"Не може да се анализира стойността с повишена точност double „%s“ за %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+"Стойността с повишена точност — double „%s“ за %s е извън интервала на "
+"допустимите стойности"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Грешка при анализа на опцията: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Липсва аргумент за %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Непозната опция %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Не може да се открие валиден файл с ключове в папките с данни"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Не е обикновен файл"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Файлът е празен"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Ключовият файл съдържа реда „%s“, който не е нито двойка ключ-стойност, нито "
+"група, нито коментар"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Неправилно име на група: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Ключовият файл не започва с група"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Неправилно име на ключ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Ключовият файл съдържа неподдържаното кодиране „%s“"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Ключовият файл не съдържа групата „%s“"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Ключовият файл не съдържа ключа „%s“"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Ключовият файл съдържа ключ „%s“ със стойност „%s“, която не е в UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Ключовият файл съдържа ключа „%s“, чиято стойност не може да бъде "
+"анализирана."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Ключовият файл съдържа ключа „%s“ в групата „%s“, чиято стойност не може да "
+"бъде анализирана."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Ключовият файл не съдържа ключа „%s“ в групата „%s“"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Ключовият файл съдържа екранираща последователност в край на ред"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Ключовият файл съдържа грешна екранираща последователност — „%s“"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Стойността „%s“ не може да се интерпретира като число."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Целочислената стойност „%s“ е извън интервала на допустими стойности"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+"Стойността „%s“ не може да се интерпретира като число с плаваща запетая."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Стойността „%s“ не може да се интерпретира като булева."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Подадена е прекалено голяма стойност на %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Потокът вече е затворен"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Действието е прекратено"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Непознат вид"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "Вид на файла %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "Вид на %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Неочаквано ранен край на поток"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Без име"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Във файла .desktop липсва поле за изпълнение"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Не може да се открие терминал за приложението"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Не може да се създаде папката с потребителските настройки %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Не може да се създаде папката с настройките за MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Не може да се създаде файл .desktop — „%s“"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Потребителска дефиниция за %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "устройството не поддържа изваждане"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "устройството не поддържа следене за носител"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Версия %d на кодирането GEmblem не се поддържа"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Неправилен брой лексеми (%d) в кодирането GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Версия %d на кодирането GEmblemedIcon не се поддържа"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Неправилен брой лексеми (%d) в кодирането GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Очакваше се GEmblem за GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Действието не се поддържа"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Съдържащият монтиран обект не съществува"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Не може да се копира върху папка"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Папка не може да се копира върху папка"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Целевият файл съществува"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Папката не може да се копира рекурсивно"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Не може да се копира специален файл"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Зададена е неправилна стойност на символна връзка"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Не се поддържа кошче"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Файловите имена не могат да съдържат „%c“"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "томът не поддържа монтиране"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Не е регистрирано приложение за обработка на този вид файлове"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Броячът е затворен"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Файловият брояч все още е е привършил"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Файловият брояч вече е затворен"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "файл"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Файлът съдържащ иконата"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Версия %d на кодирането GFileIcon не се поддържа"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Неправилни входни данни за GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Потокът не поддържа запитване за информация"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Търсенето не се поддържа от потока"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Входният поток не може да се съкращава"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Потокът не може да се съкращава"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Неправилен брой лексеми (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Липсва тип за името на клас %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Типът „%s“ не поддържа интерфейса GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Типът „%s“ не е класов"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Неправилен номер на версия: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Типът „%s“ не поддържа from_tokens() от интерфейса GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Подадената версия на кодирането на икони не се поддържа"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Входният поток не поддържа четене"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Действията върху потока не са привършили"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"Стандартният датчик за монтиране на локални папки не може да се открие "
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Неправилно име на файл: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Грешка при получаване на информация за файловата система: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Кореновата папка не може да се преименува"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Грешка при преименуване на файл: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Файлът не може да се преименува — съществува друг файл с такова име"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Неправилно име на файл"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Грешка при отваряне на файл: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Папката не може да бъде отворена"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Грешка при изтриване на файл: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Грешка при преместване на файл в кошчето: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Неуспех при създаване на папката за кошче „%s“: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Не може да се открие най-горната папка за кошче"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Не може да се създаде папката за кошче"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Неуспех при създаване на файл с информация за кошчето: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Неуспех при преместване на файл в кошчето: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Грешка при създаване на папка: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Грешка при създаване на символна връзка: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Грешка при преместване на файл: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Папка не може да бъде преместена върху папка"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Неуспешно създаване на резервен файл"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Грешка при премахване на целевия файл: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Не се поддържа местене между монтирани местоположения"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Стойността на атрибут не трябва да е NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Неправилен вид на атрибут (очакваше се низ)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Неправилно име на допълнителен атрибут"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Грешка при задаване на допълнителен атрибут „%s“: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Грешка при получаване на състоянието на файл „%s“: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (неправилно кодиране)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Грешка при получаване на състоянието на файловия дескриптор: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Неправилен вид на атрибут (очакваше се uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Неправилен вид на атрибут (очакваше се uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Неправилен вид на атрибут (очакваше се низ от байтове)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Грешка при задаване на правата за достъп: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Грешка при задаване на собственик: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "символната връзка трябва да не е NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Грешка при задаване на символна връзка: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Грешка при задаване на символна връзка: файлът не е такава"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Контекстът на SELinux трябва да не е NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Грешка при задаване на контекста на SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux не е включен на тази система"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Не се поддържа задаването на атрибута %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Грешка при четене от файл: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Грешка при търсене във файл: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Грешка при затваряне на файл: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Стандартният датчик за локални файлове не може да се открие "
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Грешка при запис във файл: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Грешка при премахване на стара, резервна връзка: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Грешка при създаване на резервно копие: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Грешка при преименуване на временен файл: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Грешка при съкращаване на файл: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Грешка при отваряне на файла „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Целевият файл е папка"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Целевият файл не е обикновен файл"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Файлът бе променен от външно приложение"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Грешка при изтриване на стар файл: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Зададен е неправилен GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Неправилна заявка за търсене"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream не може да се съкрати"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Стигнат е максималният размер на масив за данни"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Изходящият поток в паметта не може да бъде преоразмерен"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Неуспех при преоразмеряването на изходящия поток в паметта"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "монтираният обект не поддържа демонтиране"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "монтираният обект не поддържа изваждане"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "монтираният обект не поддържа повторно монтиране"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "монтираният обект не поддържа откриване на вида"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "монтираният обект не поддържа синхронно откриване на вида"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Изходният поток не поддържа запис"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Изходният поток вече е затворен"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "име"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Името на иконата"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "имена"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Масив с имена на икони"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "използване на стандартните резервни настройки"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Дали да се използват стандартните резервни настройки, които се намират при "
+"съкращаване на името при знаците „-“. Ако са дадени множество имена, се "
+"взема само първото."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Версия %d на кодирането GThemedIcon не се поддържа"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Файлов дескриптор"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Файловият дескриптор от който да се чете"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Затваряне на файловия дескриптор"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Дали файловият дескриптор да се затваря със затварянето на потока"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Грешка при четене от ЮНИКС: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Грешка при затваряне на ЮНИКС: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Коренова папка на файловата система"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Дескрипторът на файла, в който да се записва"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Грешка при запис към ЮНИКС: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "томът не поддържа изваждане"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Приложението не може да бъде открито"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Грешка при стартиране на приложение: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Не се поддържат такива адреси"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "не се поддържа промяна на асоциациите при win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Не се поддържа създаването на асоциации при win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "елементите да не се скриват"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "ползване на дълъг формат"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ФАЙЛ…]"
diff --git a/po/bn.po b/po/bn.po
new file mode 100644
index 0000000..78675c8
--- /dev/null
+++ b/po/bn.po
@@ -0,0 +1,1865 @@
+# The Bengali translation for glib.
+# Copyright (C) 2002
+# This file is distributed under the same license as the glib package.
+# Taneem Ahmed <taneem@eyetap.org>, 2002.
+# Mahay Alam Khan <makl10n@yahoo.com>, 2005.
+# Samia Niamatullah <mailsamia2001@yahoo.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-08-31 21:21+0600\n"
+"Last-Translator: Khandakar Mujahidul Islam <suzan@bengalinux.org>\n"
+"Language-Team: Bengali <gnome-translation@bengalinux.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "অপ্রত্যাশিত '%s' বৈশিষ্ট্য '%s' বস্তুর জন্য উল্লিখিত হয়েছে"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "%s' বৈশিষ্ট্য '%s' বস্তুর ক্ষেত্রে পাওয়া যায়নি"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "অপ্রত্যাশিত ট্যাগ '%s', ট্যাগ '%s' প্রত্যাশিত"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "অপ্রত্যাশিত '%s' ট্যাগ '%s'-র মধ্যে"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "data dir'র মধ্যে বৈধ বুকমার্ক ফাইল পাওয়া যায় নি"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s'-র জন্য বুকমার্ক বর্তমানে উপস্থিত রয়েছে"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s'-র জন্য বুকমার্ক পাওয়া যায় নি"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s'-র বুকমার্কের ক্ষেত্রে MIME'র ধরন নির্ধারিত হয় নি"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s'-র বুকমার্কের ক্ষেত্রে ব্যক্তিগত ফ্ল্যাগ চিহ্ন দেওয়া হয় নি"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s'-র বুকমার্কের ক্ষেত্রে দল নির্ধারণ করা হয় নি"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' নামক কোনো অ্যাপ্লিকেশনের দ্বারা '%s' বুকমার্ক নিবন্ধিত হয় নি"
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "প্রতীকি লিংক '%s' পড়তে ব্যর্থ: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' থেকে '%s' এ অক্ষর সমূহ পরিবর্তন করা সম্ভব নয়"
+
+# sam: রুপান্তরকারক
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' থেকে '%s' তে কনভার্টার খোলা যায়নি"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "পরিবর্তন করার জন্য দেয়া বাইট সমুহ সঠিক নয়"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "পরিবর্তন সময়কালীন ভুল: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "প্রদত্ত তথ্যের শেষে আংশিক অক্ষর সমুহ"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ফলব্যাক '%s' থেকে কোডসেট '%s' এ পরিবর্তন করা যায়নি"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "\"ফাইল\" স্কীম অনুযায়ী URI '%s' একটি পরিপূর্ণ আপেক্ষিক URI নয়"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "স্থানীয় ফাইল ইউআরআই '%s' এর মধ্যে '#' থাকা বৈধ নয়"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "ইউআরআই '%s' গ্রহনযোগ্য নয়"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "ইউআরআই '%s' এর হোস্ট নাম গ্রহনযোগ্য নয়"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "ইউআরআই '%s' এর মধ্যে অগ্রহণীয় এস্কেপ অক্ষর আছে"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "পথনাম '%s' একটি আপেক্ষিক পথ"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ভুল হোস্ট নাম"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "ডাইরেক্টরি '%s' খুলতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu বাইট, ফাইল \"%s\" পড়ার জন্য বরাদ্দ করা যায়নি"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "ফাইল \"%s\" থেকে পড়াতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "ফাইল \"%s\" খুলতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "ফাইল \"%s\" এর বৈশিষ্ট্য পেতে ব্যর্থ: fstat() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "ফাইল \"%s\" খুলতে ব্যর্থ: fdopen() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' ফাইলের নাম '%s' তে পরিবর্তন করা যায়নি: g_rename() failed: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ফাইল \"%s\" সৃষ্টি করতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "লেখার জন্য ফাইল \"%s\" খুলতে ব্যর্থ: fdopen() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "\"%s\" ফাইলে লিখতে ব্যর্থ: fwrite() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "\"%s\" ফাইলে লিখতে ব্যর্থ: fwrite() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "\"%s\" ফাইলে লিখতে ব্যর্থ: fwrite() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' ফাইল বন্ধ করতে ব্যর্থ: fclose() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "বিদ্যমান ফাইল '%s' অপসারিত করা যায়নি: g_unlink() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "নমুনা '%s' সঠিক নয়, '%s' থাকা উচিত্‌ নয়"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' টেমপ্লেটের মধ্যে XXXXXX অন্তর্ভুক্ত নেই"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "প্রতীকি লিংক '%s' পড়তে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "প্রতীকী লিঙ্ক সমর্থিত নয়"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' থেকে '%s' পরিবর্তন ব্যবস্থা খোলা সম্ভব হয়নি: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string এ সরাসরি পড়া যায়নি"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "পড়ার বাফারে অপরিবর্তিত তথ্য"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "চ্যানেল আংশিক অ"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end এ সরাসরি পড়া যায়নি"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ফাইল '%s' খুলতে ব্যর্থ: open() ব্যর্থ: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ফাইল '%s' ম্যাপ করতে ব্যর্থ: mmap() ব্যর্থ: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "লাইন %d ক্যর %d এ ভুল: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "লাইন %d এ ভুল: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "শূন্য '&;' দেখা গিয়েছে; গ্রহনযোগ্য হচ্ছে: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"কোন বস্তু (entity) এর নামের শুরুতে '%s' অক্ষরটি গ্রহনযোগ্য নয়; & অক্ষরটি একটি বস্তুর "
+"নাম শুরু করে; এই এমপারস্যান্ড যদি কোনো বস্তু না হয়, তাহলে এটাকে &amp হিসাবে লিখুন"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "'%s' অক্ষরটি কোনো বস্তুর মাঝখানে গ্রহনযোগ্য নয়"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "'%s' নামের বস্তুটি অজানা"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"একটি বস্তু (entity) সেমিকোলন দিয়ে শেষ হয়নি; আপনি সম্ভবত এমপারস্যান্ড অক্ষরটি কোন "
+"বস্তু শুরু করার জন্য ব্যবহার করেনি - সেক্ষেত্রে এস্কেপ এমপারস্যান্ড কে লিখুন &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"পার্স করতে অক্ষম '%-.*s', যা অক্ষর তথ্যসূত্র অভ্যন্তরে একটি অংক (উদাহরণ সরূপ; &#234) "
+"- হয়তোবা অংকটি অতি দীর্ঘ"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "অক্ষর তথ্যসূত্র '%-.*s' অনুমতিপ্রাপ্ত অক্ষর এনকোড করেনা"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "শূন্য অক্ষরের রেফারেন্স; &#454 এর মত সংখা থাকতে হবে"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"অক্ষরের রেফারেন্স সেমিকোলন দিয়ে শেষ হয়নি; আপনি সম্ভবত এমপারস্যান্ড অক্ষরটি কোন বস্তু "
+"শুরু করার জন্য ব্যবহার করেনি - সেক্ষেত্রে এস্কেপ এমপারস্যান্ড কে লিখুন &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "অসম্পূর্ণ বস্তুর রেফারেন্স"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "অসম্পূর্ণ অক্ষরের রেফারেন্স"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "অগ্রহনযোগ্য ইউটিএফ-৮ টেক্সট"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "অগ্রহনযোগ্য ইউটিএফ-৮ টেক্সট"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "অগ্রহনযোগ্য ইউটিএফ-৮ টেক্সট"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ডকুউমেন্ট একটি এলিমেন্ট দিয়ে শুরু "
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'<' অক্ষরটির পরে '%s' গ্রহনযোগ্য নয়; এটি কোন এলিমেন্টের নাম শুরু করতে পারেনা"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"অসামঞ্জস্যকর অক্ষর '%s', এলিমেন্ট '%s' এর ট্যগ শেষ করার জন্য '>' অক্ষরটি আশা করা হয়"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"বেজোড় অক্ষর '%1$s', এলিমেন্ট '%3$s' এর অ্যাট্রিবিউট নাম '%2$s' এর পর একটি '=' "
+"প্রত্যাশিত"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"বেজোড় অক্ষর '%s', এলিমেন্ট '%s' এর প্রথম ট্যাগকে শেষ করতে একটি '>' বা '/' "
+"প্রত্যাশিত, অথবা একটি ঐচ্ছিক অ্যাট্রিবিউট; সম্ভবত আপনি বৈশিষ্ট্য নামে অবৈধ অক্ষর "
+"ব্যবহার করেছেন"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"বেজোড় অক্ষর '%1$s', এলিমেন্ট '%3$s' এর অ্যাট্রিবিউট নাম '%2$s' এর মান দেয়ার সময়, "
+"'=' চিহ্নটির পর একটি খোলা উদ্ধৃতি চিহ্ন আব্যশক"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"অক্ষর '</' কে অনুসরণকারী '%s' একটি বৈধ অক্ষর নয়; '%s' দিয়ে কোনো এলিমেন্টের নাম "
+"শুরু করা বৈধ নয়"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"বন্ধ এলিমেন্ট নাম '%2$s' কে অনুসরণকারী '%1$s' একটি বৈধ অক্ষর নয়; সমর্থিত অক্ষর "
+"হচ্ছে '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' এলিমেন্টটি বন্ধ ছিল, এখন খোলা এলিমেন্ট নেই"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' এলিমেন্টটি বন্ধ ছিল, কিন্তু এখন '%s' এলিমেন্টটি খোলা"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ডকুউমেন্ট শূণ্য ছিল অথবা সুধু ওয়াইটস্পেইস ছিল"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "একটি কোণ বন্ধনী '<' খোলা থাকায় নথী অপ্রত্যাশিতভাবে শেষ হয়েছে"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"উপাদান খোলা অবস্থায় নথী অপ্রত্যাশিতভাবে শেষ হয়েছে - '%s' ছিল শেষ খোলা উপাদান"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"নথী অপ্রত্যাশিতভাবে শেষ হয়েছে, প্রত্যাশিতভাবে দৃষ্ট কারণ একটি কোণ বন্ধনী যার শেষে <%"
+"s/> ট্যাগ রয়েছে"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "একটি এলিমেন্ট নাম অভ্যন্তরে নথী অপ্রত্যাশিতভাবে শেষ হয়েছে"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "একটি বৈশিষ্ট্য নাম অভ্যন্তরে নথী অপ্রত্যাশিতভাবে শেষ হয়েছে"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "একটি এলিমেন্ট-ওপেনিং ট্যাগ অভ্যন্তরে নথী অপ্রত্যাশিতভাবে শেষ হয়েছে"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"বৈশিষ্ট্য নাম অনুসরণকরী সমান চিহ্নের পর নথী অপ্রত্যাশিতভাবে শেষ হয়েছে; কোন বৈশিষ্ট্য "
+"মান নয়"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "একটি বৈশিষ্ট্য মান এর অভ্যন্তরে নথী অপ্রত্যাশিতভাবে শেষ হয়েছে"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "নথী অপ্রত্যাশিতভাবে শেষ হয়েছে উপাদান '%s' এর বন্ধ ট্যাগ এর অভ্যন্তরে"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "নথী অপ্রত্যাশিতভাবে শেষ হয়েছে একটি মন্তব্য বা প্রসেসরত নির্দেশের অভ্যন্তরে"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "চ্যানেল আংশিক অ"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "পরিবর্তন করার জন্য দেয়া বাইট সমুহ সঠিক নয়"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "অসম্পূর্ণ অক্ষরের রেফারেন্স"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "অসম্পূর্ণ অক্ষরের রেফারেন্স"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "অসম্পূর্ণ অক্ষরের রেফারেন্স"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "প্রতীকী লিঙ্ক সমর্থিত নয়"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "লাইন %d ক্যর %d এ ভুল: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "অসম্পূর্ণ বস্তুর রেফারেন্স"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "কোওটেড টেক্সট কোওটেসন মার্ক দিয়ে শুরু হয়নি"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "কমান্ড লাইন অথবা শেল-কোওটেড টেক্সট এর মাঝে কোওটেসন মার্ক মিলেনি "
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "একটি '\\' অক্ষরের ঠিক পরেই টেক্সট শেষ হয়েছে (টেক্সটি ছিল '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c এর জন্য মিলানো কোওট পাবার আগে টেক্সট শেষ হয়েছে (টেক্সটি ছিল '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "টেক্সট শূণ্য ছিল (অথবা সুধু ওয়াইটস্পেইস ছিল)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "চাইল্ড প্রসেস থেকে তথ্য পড়তে ব্যর্থ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "চাইল্ড প্রসেস (%s) এর সাথে যোগাযোগ করার জন্য পাইপ সৃষ্টি করতে ব্যর্থ"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "চাইল্ড পাইপ (%s) থেকে পড়তে ব্যর্থ"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "ডাইরেক্টরি '%s' (%s) তে বদলাতে ব্যর্থ"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "চাইল্ড প্রসেস (%s) কার্যকর করতে ব্যর্থ"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "প্রোগ্রামের নাম অবৈধ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d এ আর্গুমেন্ট ভেক্টরে উল্লিখিত পংক্তি বৈধ নয়: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "পরিবেশের মধ্যে উল্লিখিত পংক্তি বৈধ নয়: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "সক্রিয় ডিরেক্টরি বৈধ নয়: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "সাহায্যকারী প্রোগ্রাম চলাতে ব্যর্থ (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"চাইল্ড প্রসেস থেকে তথ্য পড়ার সময় g_io_channel_win32_poll()'এ অপ্রত্যাশিত ত্রুটি"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "চাইল্ড প্রসেস (%s) থেকে তথ্য পড়তে ব্যর্থ"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "চাইল্ড প্রসেস (%s) থেকে তথ্য পড়াকালীন সময় select() এ অনাকাঙ্ক্ষিত ভুল"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() (%s) এ অনাকাঙ্ক্ষিত ভুল"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "ফোর্ক (%s) সৃষ্টি করতে ব্যর্থ"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "চাইল্ড প্রসেস \"%s\" (%s) কার্যকর করতে ব্যর্থ"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "চাইল্ড প্রসেস (%s) এর ইনপুট অথবা আউটপুট রিডায়রেক্ট করতে ব্যর্থ"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "চাইল্ড প্রসেস (%s) সৃষ্টি করতে ব্যর্থ"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "চাইল্ড প্রসেস \"%s\" কার্যকর করার সময় অজানা ভুল"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "চাইল্ড পিয়াইডি পাইপ (%s) থেকে যথেস্ট তথ্য পড়তে ব্যর্থ"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "অক্ষর ইউটিএফ-৮ আয়তার বাইরে"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "পরিবর্তন করার জন্য দেয়া তথ্য সঠিক নয়"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "অক্ষর ইউটিএফ-১৬ আয়তার বাইরে"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ব্যবহার:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[অপশন]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "সহায়ক তথ্যের অপশন:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "সহায়ক তথ্যের অপশন দেখাও"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "সমস্ত সহায়ক তথ্যের অপশন দেখাও"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "অ্যাপলিকেশন অপশন:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "ইন্টিজার মান %s এর জন্য '%s' পার্স করতে পারেনা"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "ইন্টিজার মান %s এর জন্য '%s' সীমার বাহিরে"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%2$s-র জন্য '%1$s'-র দ্বীগুণ মান পার্স করতে ব্যর্থ"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s-র জন্য '%1$s'-র দ্বীগুণ মান সীমা বহির্ভূত"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s এর জন্য প্রেরিত মান নিরুদ্দেশ"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "অজানা অপশন %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "বৈধ কী ফাইল ডাটা dirs পাওয়া যায়নি"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "একটি নিয়মিত ফাইল নহে"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ফাইল ফাঁকা"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "কী ফাইল ধারণ করে '%s' লাইন, যা কী-মান এর জোড়া, গ্রুপ বা মন্তব্য নহে"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "প্রোগ্রামের নাম অবৈধ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "কী ফাইল গ্রুপের সঙ্গে আরম্ভ করে না"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "প্রোগ্রামের নাম অবৈধ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "কী ফাইল অসমর্থিত এনকোডিং '%s' ধারণ করছে"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "কী ফাইলের গ্রুপ '%s' নেই"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "কী ফাইলের কী '%s' নেই"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "কী ফাইলে '%s' কী এর মান '%s', যা UTF-8 নয়"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "কী ফাইল '%s' কী ধারণ করে যার মান ইন্টারপ্রেট করা যাবেনা।"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "কী ফাইল '%2$s' গ্রুপে '%1$s' কী ধারণ করছে যার মান ইন্টারপ্রেট করা যাবেনা।"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "কী ফাইলের '%2$s' গ্রুপ এ অন্তর্ভুক্ত '%1$s' কী টি নেই"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "কী ফাইল লাইনের শেষে এস্কেপ অক্ষর ধারণ করছে"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "কী ফাইলে অবৈধ এস্কেপ সিকোয়েন্স '%s' আছে"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "মান '%s' কে সংখ্যা হিসেবে ইন্টারপ্রেট করা যায় না।"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ইন্টিজার মান '%s' সীমার বাহিরে"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' মান float সংখ্যা রূপে ব্যাখ্যা করা সম্ভব নয়।"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "মান '%s' কে বুলিয়ান হিসেবে ইন্টারপ্রেট করা যায় না।"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "অজানা অপশন %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "প্রতীকী লিঙ্ক সমর্থিত নয়"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "প্রতীকী লিঙ্ক সমর্থিত নয়"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "'%s' নামক কোনো অ্যাপ্লিকেশনের দ্বারা '%s' বুকমার্ক নিবন্ধিত হয় নি"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "ইউআরআই '%s' এর হোস্ট নাম গ্রহনযোগ্য নয়"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "প্রোগ্রামের নাম অবৈধ: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "ভুল হোস্ট নাম"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ফাইল \"%s\" সৃষ্টি করতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ফাইল \"%s\" সৃষ্টি করতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "ফাইল \"%s\" সৃষ্টি করতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "ডাইরেক্টরি '%s' খুলতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "একটি বৈশিষ্ট্য নাম অভ্যন্তরে নথী অপ্রত্যাশিতভাবে শেষ হয়েছে"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "ডাইরেক্টরি '%s' খুলতে ব্যর্থ: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "পরিবর্তন সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "পরিবর্তন সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "লাইন %d এ ভুল: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "পরিবর্তন সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "প্রতীকী লিঙ্ক সমর্থিত নয়"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "একটি নিয়মিত ফাইল নহে"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "প্রোগ্রামের নাম অবৈধ: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "ইউআরআই '%s' এর হোস্ট নাম গ্রহনযোগ্য নয়"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "ফাইল \"%s\" পড়ার সময়কালীন ভুল: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "লাইন %d এ ভুল: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "প্রতীকী লিঙ্ক সমর্থিত নয়"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[অপশন]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "ফাইল মোড পরিবর্তন করা যায়নি: fork() ব্যর্থ: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "ফাইল মোড পরিবর্তন করা যায়নি: waitpid() ব্যর্থ: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "ফাইল মোড পরিবর্তন করা যায়নি: chmod() ব্যর্থ: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "ফাইল মোড পরিবর্তন করতে পারেনি: সংকেত: %s দ্বারা চাইল্ড সমাপ্তকৃত"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "ফাইল মোড পরিবর্তন করতে পারেনি: চাইল্ড সমাপ্তকৃত অস্বাভাবিকভাবে"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "ক্যরেকটার সেট `%s' থেকে `%s' পরিবর্তন করার সামর্থ নেই"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "বেঠিক সাইজের তথ্য"
+
+#~ msgid "Socket error"
+#~ msgstr "সকেেট ভুল"
diff --git a/po/bn_IN.po b/po/bn_IN.po
new file mode 100644
index 0000000..6aaad6a
--- /dev/null
+++ b/po/bn_IN.po
@@ -0,0 +1,1834 @@
+# translation of bn_IN.po to Bengali INDIA
+# The Bengali India translation for glib.
+# Copyright (C) 2002
+# This file is distributed under the same license as the glib package.
+#
+# Taneem Ahmed <taneem@eyetap.org>, 2002.
+# Mahay Alam Khan <makl10n@yahoo.com>, 2005.
+# Samia Niamatullah <mailsamia2001@yahoo.com>, 2005.
+# Runa Bhattacharjee <runabh@gmail.com>, 2007.
+# Runa Bhattacharjee <runab@fedoraproject.org>, 2008.
+# Runa Bhattacharjee <runab@redhat.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: bn_IN\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-09 12:38+0530\n"
+"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
+"Language-Team: Bengali INDIA <discuss@lists.ankur.org.in>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "অপ্রত্যাশিত '%s' বৈশিষ্ট্য '%s' বস্তুর জন্য উল্লিখিত হয়েছে"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' বৈশিষ্ট্য '%s' বস্তুর ক্ষেত্রে পাওয়া যায়নি"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "অপ্রত্যাশিত ট্যাগ '%s', ট্যাগ '%s' প্রত্যাশিত"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "অপ্রত্যাশিত '%s' ট্যাগ '%s'-র মধ্যে"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "data dir'র মধ্যে বৈধ বুকমার্ক ফাইল পাওয়া যায়নি"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s'-র জন্য বুকমার্ক বর্তমানে উপস্থিত রয়েছে"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s'-র জন্য বুকমার্ক পাওয়া যায়নি"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s'-র বুকমার্কের ক্ষেত্রে MIME'র ধরন নির্ধারিত হয়নি"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s'-র বুকমার্কের ক্ষেত্রে ব্যক্তিগত ফ্ল্যাগ চিহ্ন দেওয়া হয়নি"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s'-র বুকমার্কের ক্ষেত্রে দল নির্ধারণ করা হয়নি"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' নামক কোনো অ্যাপ্লিকেশনের দ্বারা '%s' বুকমার্ক নিবন্ধিত হয়নি"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec পংক্তি '%s'-টি URI '%s' সহ প্রসারণ করতে ব্যর্থ"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' অক্ষরমালা থেকে '%s'-এ রূপান্তর করা যাবে না"
+
+# sam: রুপান্তরকারক
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' থেকে '%s' রূপান্তর ব্যবস্থা খোলা যায়নি"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "রূপান্তর করার জন্য প্রদত্ত ইনপুটের মধ্যে বাইটের অনুক্রম সঠিক নয়"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "রূপান্তর কর্ম সঞ্চালনকালের উৎপন্ন সমস্যা: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "প্রদত্ত ইনপুটের অন্তে আংশিক অক্ষর অনুক্রম"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ফলব্যাক '%s' থেকে '%s' কোড-সেটে পরিবর্তন করা যায়নি"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s'-টি \"file\" স্কিম প্রয়োগকারী সুনিশ্চিত URI নয়"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "স্থানীয় ফাইল URI '%s'-র মধ্যে '#' চিহ্ন অন্তর্ভুক্ত করা যাবে না"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' বৈধ নয়"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s'-র হোস্ট-নেম বৈধ নয়"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s'-র মধ্যে অবৈধরূপে এস্কেপ অক্ষর প্রয়োগ করা হয়েছে"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' পাথটি সুনিশ্চিত নয়"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "হোস্ট-নেম বৈধ নয়"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' ডিরেক্টরি খুলতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu বাইট, \"%s\" ফাইল পড়ার জন্য বরাদ্দ করা যায়নি"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ফাইল পড়তে সমস্যা: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "\"%s\" ফাইল অত্যাধিক বড়"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' ফাইল থেকে পড়তে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' ফাইল খুলতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' ফাইলের বৈশিষ্ট্য প্রাপ্ত করতে ব্যর্থ: fstat() বিফল: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' ফাইল খুলতে ব্যর্থ: fdopen() বিফল: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' ফাইলের নাম '%s'-এ পরিবর্তন করতে ব্যর্থ: g_rename() বিফল: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' ফাইল নির্মাণ করতে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "লেখার উদ্দেশ্যে '%s' খুলতে ব্যর্থ: fdopen() বিফল: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' ফাইলে লিখতে ব্যর্থ: fwrite() বিফল: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' ফাইলে লিখতে ব্যর্থ: fwrite() বিফল: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' ফাইলে লিখতে ব্যর্থ: fwrite() বিফল: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' ফাইল বন্ধ করতে ব্যর্থ: fclose() বিফল: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "বিদ্যমান ফাইল '%s' অপসারিত করা যায়নি: g_unlink() ব্যর্থ: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "নমুনা '%s' সঠিক নয়, '%s' থাকা উচিত নয়"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' টেমপ্লেটের মধ্যে XXXXXX অন্তর্ভুক্ত নেই"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f কিলোবাইট"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f মেগাবাইট"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f গিগাবাইট"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' সিম্বোলিঙ্ক লিঙ্ক পড়তে ব্যর্থ: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "সিম্বোলিক লিঙ্ক সমর্থিত হয় না"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' থেকে '%s' পরিবর্তন ব্যবস্থা খোলা সম্ভব হয়নি: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string'র উপর raw read করা সম্ভব নয়"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "read বাফারের মধ্যে অরূপান্তরিত তথ্য অবশিষ্ট রয়েছে"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "আংশিক অক্ষর দ্বারা চ্যানেলের সমাপ্তি"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end'এ raw read করা যায়নি"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' খুলতে ব্যর্থ: open() বিফল: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' ফাইল ম্যাপ করতে ব্যর্থ: mmap() বিফল: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "পংক্তি %d অক্ষর %d'এ ত্রুটি: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "পংক্তি %d'এ ত্রুটি: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"তথ্যবিহীন স্বত্বা '&;' প্রদর্শিত; বৈধ স্বত্বা হল: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"স্বত্বার নামের প্রারম্ভে '%s'-র ব্যবহার বৈধ নয়; & অক্ষর দ্বারা স্বত্বা আরম্ভ করা হয়; "
+"এই অ্যাম্পারসেন্ড চিহ্নটি স্বত্বার ক্ষেত্রে ব্যবহৃত না হলে &amp; রূপে এটিকে এস্কেপ করানো "
+"যাবে"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "স্বতার নামে '%s' অক্ষরের ব্যবহার বৈধ নয়"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "'%s' নামের স্বত্বা অজানা"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"স্বত্বার নাম সেমিকোলোন চিহ্ন দ্বারা সমাপ্ত হয়নি; সম্ভবত আপনি স্বত্বা হিসাবে ব্যবহারের "
+"উদ্দেশ্যে এম্পারসেন্ড চিহ্ন প্রয়োগ করেননি - &amp; রূপে এম্পারসেন্ড এস্কেপ করানো যাবে"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' পার্স করতে ব্যর্থ, এটি কোনো অক্ষরের রেফারেন্সের মধ্যে একটি সংখ্যা হওয়া উচিত "
+"(উদাহরণস্বরূপ &#234;) - সম্ভবত সংখ্যাটি অত্যাধিক বড়"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "'%-.*s' অক্ষরের রেফারেন্সের মধ্যে অনুমোদিত অক্ষর এনকোড করা হয়নি"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "অক্ষর রেফারেন্স ফাঁকা; &#454;'র অনুরূপ সংখ্যা উপস্থিত আবশ্যক"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"অক্ষরের রেফারেন্স সেমি-কোলন চিহ্ন দ্বারা সমাপ্ত হয়নি; সম্ভবত আপনি স্বত্বা হিসাবে "
+"ব্যবহারের উদ্দেশ্যে এম্পারসেন্ড চিহ্ন প্রয়োগ করেননি - &amp; রূপে এম্পারসেন্ড এস্কেপ "
+"করানো যাবে"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "স্বত্বার রেফারেন্স অসম্পূর্ণ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "অক্ষরের রেফারেন্স অসম্পূর্ণ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "অবৈধ UTF-8 এনকোডিং সহ টেক্সট - অত্যাধিক লম্বা পংক্তি"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "অবৈধ UTF-8 এনকোডিং সহ টেক্সট - প্রারম্ভিক অক্ষর নয়"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "অবৈধ UTF-8 এনকোডিং সহ টেক্সট - বৈধ '%s' নয়"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "নথি কোনো এলিমেন্ট দ্বারা আরম্ভ হওয়া আবশ্যক (উদাহরণস্বরূপ <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' অক্ষরের পরে '%s'-র ব্যবহার বৈধ নয়; এর দ্বারা এলিমেন্টের নাম আরম্ভ করা যাবে না"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"'%s' অক্ষর প্রত্যাশিত নয়, '%s' ফাঁকা এলিমেন্টের প্রারম্ভিক ট্যাগ সমাপ্ত করার উদ্দেশ্যে "
+"'>' চিহ্ন প্রত্যাশিত"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"'%1$s' অক্ষর প্রত্যাশিত নয়, '%3$s' এলিমেন্টের '%2$s' নামক বৈশিষ্ট্যের নামের পরে "
+"একটি '=' চিহ্ন প্রত্যাশিত"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' অক্ষর প্রত্যাশিত নয়, '%s' এলিমেন্টের প্রারম্ভিক ট্যাগ সমাপ্ত করার উদ্দেশ্যে '>' "
+"অথবা '/' চিহ্ন অথবা কোনো বৈশিষ্ট্যর উপস্থিতি কাম্য; সম্ভবত কোনো বৈশিষ্ট্যের নামের "
+"মধ্যে অবৈধ অক্ষর ব্যবহৃত হয়েছে"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"'%1$s' অক্ষর অপ্রত্যাশিত, '%3$s' এলিমেন্টের '%2$s' বৈশিষ্ট্যের মান নির্ধারণের "
+"উদ্দেশ্যে সমান চিহ্নের (=) পরে একটি উদ্ধৃতি চিহ্নের প্রারম্ভিক অংশ উপস্থিতি প্রত্যাশিত"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' অক্ষরের ব্যবহার '</'-র পশ্চাত বৈধ নয়; '%s' দ্বারা কোনো এলিমেন্টের নাম আরম্ভ "
+"করা যাবে না"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%2$s' বদ্ধ এলিমেন্টের নামের পশ্চাত '%1$s' অক্ষরের ব্যবহার বৈধ নয়; অনুমোদিত অক্ষর "
+"হল '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' এলিমেন্ট বদ্ধ অবস্থায়, বর্তমানে কোনো এলিমেন্ট খোলা অবস্থায় নেই"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' এলিমেন্ট বদ্ধ অবস্থায়, বর্তমানে '%s' এলিমেন্ট খোলা অবস্থায় রয়েছে"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ডকুমেন্ট সম্ভবত ফাঁকা অথবা শুধুমাত্র শূণ্যস্থান উপস্থিত"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"তেরছা বন্ধনীর প্রারম্ভিক চিহ্নের '<' ঠিক পরে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"খোলা এলিমেন্টসহ ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে - '%s' এলিমেন্ট সর্বশেষ খোলা "
+"হয়েছিল"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"নথি অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে, <%s/> ট্যাগ সমাপ্তির জন্য তেরছা বন্ধনী চিহ্নের "
+"অন্তিম অংশের উপস্থিতি প্রত্যাশিত"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "এলিমেন্টের নামের মধ্যে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "বৈশিষ্ট্যের নামের মধ্যে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "এলিমেন্টের প্রারম্ভিক ট্যাগের মধ্যে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"বৈশিষ্ট্যের নামের পরে উপস্থিত সমান চিহ্নের (=) পরে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত "
+"হয়েছে; বৈশিষ্ট্যের মান অনুপস্থিত"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "বৈশিষ্ট্যের মানের মধ্যে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "'%s' এলিমেন্টের অন্তিম ট্যাগের মধ্যে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"কোনো মন্তব্য অথবা প্রক্রিয়াকরণের নির্দেশের মধ্যে ডকুমেন্ট অপ্রত্যাশিতরূপে সমাপ্ত হয়েছে"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ক্ষতিগ্রস্ত অবজেক্ট"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "অভ্যন্তরীণ সমস্যা অথবা ক্ষতিগ্রস্ত অবজেক্ট"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "মেমরি অবশিষ্ট নেই"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "ব্যাক-ট্যাক করার সুনির্দিষ্ট সীমা পূর্ণ"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "উল্লিখিত বিন্যাসটির মধ্যে অন্তর্ভুক্ত সামগ্রী, আংশিক মিল অনুসন্ধানে সমর্থিত নয়"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "অভ্যন্তরীণ সমস্যা"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "আংশিক মিল অনুসন্ধানের সময় ব্যাক রেফারেন্স সমর্থিত নয়"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "পুনরাবৃত্তির সীমা পূর্ণ"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ফাঁকা সাব-স্ট্রিং-র কর্মক্ষেত্রের সীমা পূর্ণ"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "নতুন পংক্তি চিহ্নকারী ফ্ল্যাগের অবৈধ সমষ্টি"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "অজানা সমস্যা"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "পংক্তির শেষে \\ উপস্থিত"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "পংক্তির শেষে \\c উপস্থিত"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "\\-র পরে অজ্ঞাত অক্ষর উপস্থিত"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"হরফের ছাঁদ পরিবর্তনকারী এস্কেপ অক্ষর (\\l, \\L, \\u, \\U) এখানে ব্যবহার করা সম্ভব "
+"নয়"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} সংখ্যা নির্দেশকের মধ্যে উল্লিখিত সংখ্যাগুল ক্রমবিহীন"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} কোয়ান্টিফায়ারের সংখ্যা অত্যাধিক বড়"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "অক্ষরের ক্লাসের শেষে ] চিহ্ন অনুপস্থিত"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "অক্ষরের ক্লাসের মধ্যে অবৈধ এস্কেপ সিকোয়েন্স"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "অক্ষরের ক্লাসের মধ্যে উল্লিখিত সীমা ক্রমবহির্ভূত"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "পুনরাবৃত্তির জন্য কিছু উপস্থিত নেই"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? চিহ্নের পরে অজ্ঞাত অক্ষর উপস্থিত"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< চিহ্নের পরে অজ্ঞাত অক্ষর উপস্থিত"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P চিহ্নের পরে অজ্ঞাত অক্ষর উপস্থিত"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named ক্লাসগুলি শুধুমাত্র ক্লাসের মধ্যে সমর্থিত হবে"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "শেষে ) অনুপস্থিত"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "( চিহ্ন বিনা ) চিহ্ন প্রয়োগ করা হয়েছে"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R অথবা (?[+-]সংখ্যা-র পরে ) চিহ্ন ব্যবহার করা আবশ্যক"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "অনুপস্থিত সাব-প্যাটার্ন নির্দেশ করা হয়েছে"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "বক্তব্যের পরে ) চিহ্ন অনুপস্থিত"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "রেগুলার এক্সপ্রেশনটি অত্যাধিক লম্বা"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "মেমরি প্রাপ্ত করতে ব্যর্থ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?(-র পরে ত্রুটিপূর্ণ সংখ্যা অথবা নাম উপস্থিত রয়েছে"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "অজানা POSIX ক্লাসের নাম"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX কোলেটিং এলিমেন্ট সমর্থিত নয়"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "অবৈধ কন্ডিশন (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "সাব-প্যাটার্ন নামের মধ্যে সমাপ্তি নির্দেশক অনুপস্থিত"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ত্রুটিপূর্ণ \\P অথবা \\p সিকোয়েন্স"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P অথবা \\p-র পরে অজানা প্রপার্টির নাম"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "সাব-প্যাটার্নের নাম অত্যাধিক লম্বা (সর্বাধিক ৩২-টি অক্ষর)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "নামসহ অত্যাধিক সাব-প্যাটার্ন (সর্বাধিক ১০,০০০)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "অক্টাল মান \\377-র অধিক"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE দলের মধ্যে একাধিক ব্রাঞ্চ উপস্থিত রয়েছে"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "কোনো DEFINE দলের পুনরাবৃত্তি করা যাবে না"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "বিসংগত NEWLINE বিকল্প"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "অপ্রত্যাশিত পুনরাবৃত্তি"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "কোড ওভার-ফ্লো"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "রেগুলার এক্সপ্রেশন %s-র মিল অনুসন্ধানে সমস্যা: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE লাইব্রেরি UTF8 সমর্থন বিনা কম্পাইল করা হয়েছে"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE লাইব্রেরি UTF8 বৈশিষ্ট্যের সমর্থন বিনা কম্পাইল করা হয়েছে"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "রেগুলার এক্সপ্রেশন %s, %d অক্ষরে কম্পাইল করতে সমস্যা: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "রেগুলার এক্সপ্রেশন %s-র সর্বোত্তম ব্যবহারে সমস্যা: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "হেক্সাডেসিমাল সংখ্যা অথবা '}' প্রত্যাশিত"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "হেক্সাডেসিমাল সংখ্যা প্রত্যাশিত"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "সিম্বলিক রেফারেন্সের মধ্যে '<' অনুপস্থিত"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "সিম্বলিক রেফারেন্স অসম্পূর্ণ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "সিম্বলিক রেফারেন্সের মধ্যে অক্ষর সংখ্যা শূণ্য"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "সংখ্যা প্রত্যাশিত"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "অবৈধ সিম্বলিক রেফারেন্স"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "অন্তে অপ্রত্যাশিত '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "অজানা এস্কেপ সিকোয়েন্স"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "প্রতিস্থাপনার টেক্সট \"%s\", %lu অক্ষরে পার্স করতে সমস্যা: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "উদ্ধৃতির অংশ উদ্ধিতি চিহ্ন দ্বারা আরম্ভ করা হয়নি"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "কমান্ড-লাইন অথবা শেল'র উদ্ধৃতির মধ্যে অসংগত উদ্ধৃতি চিহ্ন"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "'\\' অক্ষরের পরে টেক্সট সমাপ্ত হয়েছে। (সংশ্লিষ্ট টেক্সট হল '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c'র ক্ষেত্রে সুসংগত উদ্ধৃতি চিহ্ন পাওয়া যায়নি। (সংশ্লিষ্ট টেক্সট হল '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "টেক্সট ফাঁকা (অথবা শুধুমাত্র শূণ্যস্থানসহ)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "চাইল্ড প্রসেস থেকে তথ্য পড়তে ব্যর্থ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "চাইল্ড প্রসেসের সাথে যোগাযোগের উদ্দেশ্যে পাইপ নির্মাণে ব্যর্থ (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "চাইল্ড পাইপ থেকে পড়তে ব্যর্থ (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' ডিরেক্টরিতে পরিবর্তন করতে ব্যর্থ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "চাইল্ড প্রসেস কার্যকর করতে ব্যর্থ (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "প্রোগ্রামের নাম অবৈধ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d'এ আর্গুমেন্ট ভেক্টর'এ উল্লিখিত পংক্তি বৈধ নয়: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "পরিবেশের মধ্যে উল্লিখিত পংক্তি বৈধ নয়: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "সক্রিয় ডিরেক্টরি বৈধ নয়: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "সহায়ক প্রোগ্রাম চালাতে ব্যর্থ (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"চাইল্ড প্রসেস থেকে তথ্য পড়ার সময় g_io_channel_win32_poll()'এ অপ্রত্যাশিত ত্রুটি"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "চাইল্ড প্রসেস থেকে তথ্য পড়তে ব্যর্থ (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "চাইল্ড প্রসেস থেকে তথ্য পড়ার সময় select() সংক্রান্ত অপ্রত্যাশিত ত্রুটি (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid()'এ অপ্রত্যাশিত ত্রুটি (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork করতে ব্যর্থ (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "চাইল্ড প্রসেস \"%s\" চালাতে ব্যর্থ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "চাইল্ড প্রসেসের আউটপুট অথবা ইনপুট রি-ডাইরেক্ট করতে ব্যর্থ (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "চাইল্ড প্রসেস fork করতে ব্যর্থ (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "চাইল্ড প্রসেস \"%s\" কার্যকর করতে অজানা সমস্যা"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "চাইল্ড pid পাইপ থেকে পর্যাপ্ত তথ্য পড়তে ব্যর্থ (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "অক্ষরটি UTF-8'র আয়ত্বের বাইরে"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "রূপান্তর করার উদ্দেশ্যে প্রদত্ত তথ্যের মধ্যে অবৈধ ধারা"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "অক্ষরটি UTF-16'র আয়ত্বের বাইরে"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ব্যবহারপ্রণালী:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "সহায়তা সংক্রান্ত বিকল্প:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "সহায়তা সংক্রান্ত বিকল্প প্রদর্শন করা হবে"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "সহায়তা সংক্রান্ত সমস্ত বিকল্প প্রদর্শন করা হবে"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "অ্যাপ্লিকেশন সংক্রান্ত বিকল্প:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%2$s-র জন্য '%1$s'-র পূর্ণসংখ্যা মান পার্স করতে ব্যর্থ"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s-র জন্য '%1$s'-র পূর্ণসংখ্যা মান সীমা বহির্ভূত"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%2$s-র জন্য '%1$s'-র দ্বীগুণ মান পার্স করতে ব্যর্থ"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s-র জন্য '%1$s'-র দ্বীগুণ মান সীমা বহির্ভূত"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s বিকল্প পার্স করতে ব্যর্থ"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s'র আর্গুমেন্ট অনুপস্থিত"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "অজানা বিকল্প %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "অনুসন্ধানের dirs-র মধ্যে বৈধ কি-ফাইল পাওয়া যায়নি"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "সাধারণ ফাইল নয়"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ফাইল ফাঁকা"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "কি-ফাইলের মধ্যে '%s' পংক্তিটি রয়েছে, এটি কি-মান জুটি, সংকলন অথবা মন্তব্য নয়"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "দলের নাম অবৈধ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "কি-ফাইলের প্রারম্ভে কোনো সংকলন উল্লিখিত নেই"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "কি-র নাম অবৈধ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "কি-ফাইলের মধ্যে অসমর্থিত এনকোডিং '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "কি-ফাইলের মধ্যে কোনো সংকলন অনুপস্থিত '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "কি-ফাইলের মধ্যে কোনো কি উপস্থিত নেই '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"কি-ফাইলের মধ্যে '%2$s' মান সহ  '%1$s' কি উপস্থিত রয়েছে যা UTF-8 বিন্যাসে নেই।"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "কি-ফাইলের মধ্যে '%s' কি উপস্থিত রয়েছে যার মান ব্যাখ্যা করা সম্ভব নয়।"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"কি-ফাইলের মধ্যে '%2$s' সংকলনে '%1$s' কি উপস্থিত রয়েছে যার মান ব্যাখ্যা করা সম্ভব "
+"নয়।"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "কি-ফাইলের মধ্যে '%2$s' সংকলনে '%1$s' কি উপস্থিত নেই"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "কি-ফাইলের মধ্যে পংক্তির অবশেষে এস্কেপ অক্ষর উপস্থিত রয়েছে"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "কি-ফাইলের মধ্যে অবৈধ এস্কেপ ধারা উপস্থিত রয়েছে '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' মান কোনো সংখ্যারূপে ব্যাখ্যা করা সম্ভব নয়।"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "'%s' পূর্ণসংখ্যা মান সীমা বহির্ভূত"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' মান float সংখ্যা রূপে ব্যাখ্যা করা সম্ভব নয়।"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' মান বুলিয়ান রূপে ব্যাখ্যা করা সম্ভব নয়।"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "স্ট্রিম বর্তমান বন্ধ হয়েছে"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "কর্ম বাতিল করা হয়েছে"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "অজানা প্রকৃতি"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s ফাইলের ধরন"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s ধরন"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "নামবিহীন"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ডেস্কটপ ফাইলের মধ্যে Exec ফিল্ড"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "অ্যাপ্লিকেশনের জন্য আবশ্যক টার্মিনাল পাওয়া যায়নি"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "উইজার অ্যাপ্লিকেশনের কনফিগারেশন ফোল্ডার %s নির্মাণ করতে ব্যর্থ: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ইউজার MIME কনফিগারেশন ফোল্ডার %s নির্মাণ করতে ব্যর্থ: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ইউজার ডেস্কটপ ফাইল %s নির্মাণ করতে ব্যর্থ"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s-র জন্য স্বনির্ধারত ব্যাখ্যা"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ড্রাইভ দ্বারা ইজেক্ট কর্ম সঞ্চালিত হয় না"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem এনকোডিং-র %d সংস্করণ ব্যবস্থাপনা করা সম্ভব নয়"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem এনকোডিং-র মধ্যে উপস্থিত ক্ষতিগ্রস্ত টোকেনের সংখ্যা (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon এনকোডিং-র %d সংস্করণ ব্যবস্থাপনা করা সম্ভব নয়"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon এনকোডিং-র মধ্যে উপস্থিত ক্ষতিগ্রস্ত টোকেনের সংখ্যা (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon-র জন্য একটি GEmblem প্রত্যাশিত"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "কর্ম সমর্থিত হয় না"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "ধারণকারী মাউন্ট উপস্থিত নেই"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ডিরেক্টরির উপরে কপি করা যাবে না"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ডিরেক্টরির উপর ডিরেক্টরি কপি করা যায়নি"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "উদ্দিষ্ট ফাইল উপস্থিত রয়েছে"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "রিকার্সিভ ভাবে ডিরেক্টরি কপি করা যাবে না"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "বিশেষ ফাইল কপি করা যাবে না"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "অবৈধ সিম-লিঙ্ক মান উপলব্ধ করা হয়েছে"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "আবর্জনা সমর্থিত হয় না"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ফাইলের নামের মধ্যে '%c' ব্যবহার করা যাবে না"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ভলিউম দ্বারা mount প্রয়োগ করা হয় না"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "চিহ্নিত ফাইল ব্যবস্থাপনার উদ্দেশ্যে কোনো অ্যাপ্লিকেশন নিবন্ধিত হয়নি"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator বন্ধ"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ফাইল enumerator-র মধ্যে অসমাপ্ত কর্ম উপস্থিত"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ফাইল enumerator-র বন্ধ"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ফাইল"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "আইকন ধারণকারী ফাইল"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon এনকোডিং-র %d সংস্করণ ব্যবস্থাপনা করা সম্ভব নয়"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon-র জন্য ক্ষতিগ্রস্ত ইনপুট তথ্য উপস্থিত"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "স্ট্রিম দ্বারা query_info সমর্থিত হয় না"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "স্ট্রিম দ্বারা Seek সমর্থিত হয় না"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "টোকেনের সংখ্যা সঠিক নয় (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "%s ক্লাসের নামের জন্য কোনো ধরন নির্ধারিত হয়নি"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "%s ধরন দ্বারা GIcon ইন্টারফেস বাস্তবায়িত হয় না"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "%s ধরন কোনো শ্রেণীর মধ্যে অন্তর্ভুক্ত নয়"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "সংস্করণ সংখ্যা সটিকরূপে গঠিত হয়নি: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "%s ধরন দ্বারা GIcon ইন্টারফেসের মধ্যে from_tokens() বাস্তবায়িত হয় না"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "উপলব্ধ আইকন এনকোডিং-র সংস্করণ ব্যবস্থাপনা করা সম্ভব নয়"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ইনপুট স্ট্রিম দ্বারা read বাস্তবায়িত হয় না"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "স্ট্রিমের ক্ষেত্রে অসমাপ্ত কর্ম উপস্থিত রয়েছে"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "স্থানীয় ডিরেক্টরি নিয়ন্ত্রণের ডিফল্ট ধরন সন্ধান করতে ব্যর্থ"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "ফাইলের নাম অবৈধ: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ফাইল-সিস্টেম সংক্রান্ত তথ্য প্রাপ্ত করতে সমস্যা: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "root ডিরেক্টরির নাম পরিবর্তন করা সম্ভব নয়"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ফাইলের নাম পরিবর্তনে সমস্যা: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+"ফাইলের নাম পরিবর্তন করা যায়নি, নতুন নামের একটি ফাইলের নাম বর্তমানে উপস্থিত রয়েছে"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "ফাইলের নাম বৈধ নয়"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ফাইল খুলতে সমস্যা: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ডিরেক্টরি খুলতে সমস্যা"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ফাইল মুছে ফেলতে সমস্যা: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ফাইলটি আবর্জনায় স্থানান্তর করতে সমস্যা: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "আবর্জনার ডিরেক্টরি %s নির্মাণ করতে সমস্যা: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "আবর্জনার ঊর্ধ্বতন ডিরেক্টরি সনাক্ত করতে ব্যর্থ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "আবর্জনার ডিরেক্টরি সনাক্ত অথবা নির্মাণ করতে ব্যর্থ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ফাইল বর্জন করতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ডিরেক্টরি নির্মাণ করতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "সিম্‌বলিক লিঙ্ক নির্মাণ করতে ব্যর্থ: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ফাইল স্থানান্তর করতে সমস্যা: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ডিরেক্টরির উপর ডিরেক্টরি স্থানান্তর করা যাবে না"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "ব্যাক-আপ ফাইল নির্মাণ করতে ব্যর্থ"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "উদ্দিষ্ট ফাইল মুছে ফেলতে সমস্যা: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "মাউন্ট করা অবস্থানের মধ্যে স্থানান্তর করা সম্ভব নয়"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "অ্যাট্রিবিউটের ক্ষেত্রে NULL-ব্যতীত অন্য মান নির্ধারণ করা আবশ্যক"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "অ্যাট্রিবিউটের ধরন বৈধ নয় (string প্রত্যাশিত)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ফাইল '%s' stat করতে ব্যর্থ: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (অবৈধ এনকোডিং)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ফাইলের বিবরণ stat করতে সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "অ্যাট্রিবিউটের ধরন বৈধ নয় (প্রত্যাশিত uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "অ্যাট্রিবিউটের ধরন বৈধ নয় (প্রত্যাশিত uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "অ্যাট্রিবিউটের ধরন বৈধ নয় (byte string প্রত্যাশিত)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "অনুমতি নির্ধারণ করতে সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "মালিকানা নির্ধারণ করতে সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "সিম্‌-লিঙ্ক NULL-ব্যাতীত মান হওয়া আবশ্যক"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "সিম্‌-লিঙ্ক নির্ধারণ করতে সমস্যা: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "সিম্‌-লিঙ্ক নির্ধারণ করতে ত্রুটি: ফাইলটি সিম্‌-লিঙ্ক নয়"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux কনটেক্সটের NULL-ব্যাতীত মান হওয়া আবশ্যক"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux কনটেক্সট নির্ধারণ করতে ব্যর্থ: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "এই সিস্টেমে SELinux সক্রিয় করা হয়নি"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s অ্যাট্রিবিউটের মান নির্ধারণ সমর্থিত নয়"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ফাইল থেকে পড়তে সমস্যা: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ফাইলের মধ্যে seek করতে সমস্যা: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ফাইল বন্ধ করতে সমস্যা: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "স্থানীয় ডিরেক্টরি নিয়ন্ত্রণের ডিফল্ট ধরন সন্ধান করতে ব্যর্থ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ফাইলে লিখতে সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "পুরোনো ব্যাক-আপের লিংক মুছে ফেলতে ত্রুটি: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ব্যাক-আপ প্রতিলিপি নির্মাণ করতে সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "অস্থায়ী ফাইলের নাম পরিবর্তন করতে সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ফাইল '%s' খুলতে সমস্যা: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "উদ্দিষ্ট ফাইলটি একটি ডিরেক্টরি"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "উদ্দিষ্ট ফাইলটি সাধারণ ফাইল নয়"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ফাইলটি স্বতন্ত্ররূপে পরিবর্তন করা হয়েছে"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "পুরোনো ফাইল মুছে ফেলতে সমস্যা: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "অবৈধ GSeekType উল্লিখিত হয়েছে"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "অবৈধ seek-র অনুরোধ"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "ডাটা অ্যারের সর্বাধিক সীমা উপস্থিত হয়েছে"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "মেমরি আউটপুট স্ট্রিমের মাপ পরিবর্তনযোগ্য নয়"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "মেমরি আউটপুট স্ট্রিমের মাপ পরিবর্তন করতে ব্যর্থ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount করা বস্তুর ক্ষেত্রে unmount প্রয়োগ করা সম্ভব হয়নি"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount করা বস্তুর ক্ষেত্রে eject প্রয়োগ করা সম্ভব হয়নি"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount করা বস্তুর ক্ষেত্রে remount প্রয়োগ করা সম্ভব হয়নি"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount দ্বারা সামগ্রীর ধরন অনুমান করা সম্ভব নয়"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount দ্বারা সুসংগতভাবে সামগ্রীর ধরন অনুমান করা সম্ভব নয়"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "আউটপুট স্ট্রিম দ্বারা write বাস্তবায়িত হয় না"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "মূল স্ট্রিম বর্তমানে বন্ধ করা হয়েছে"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "নাম"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "আইকনের নাম"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "নাম"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "আইকনের নাম ধারণকারী একটি অ্যারে"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "ডিফল্ট ফল-ব্যাক ব্যবহার করা হবে"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GEmblemedIcon এনকোডিং-র %d সংস্করণ ব্যবস্থাপনা করা সম্ভব নয়"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ফাইল ডেসক্রিপটর"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "যে ফাইল ডেসক্রিপটর থেকে পড়া হবে"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ফাইল ডিস্ক্রিপটর বন্ধ করা হবে"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "স্ট্রিম বন্ধ করা হলে ফাইল ডেসক্রিপটর বন্ধ করা হবে কি না"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix থেকে পড়তে সমস্যা: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix বন্ধ করতে সমস্যা: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ফাইল-সিস্টেমের root"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "যে ফাইল ডেসক্রিপটরে লেখা হবে"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unix-এ লিখতে সমস্যা: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ভলিউম দ্বারা eject প্রয়োগ করা সম্ভব নয়"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "অ্যাপ্লিকেশন পাওয়া যায়নি"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "অ্যাপ্লিকেশন আরম্ভ করতে সমস্যা: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI সমর্থিত নয়"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "এন্ট্রি আড়াল করা হবে না"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "লং লিস্টিং বিন্যাস ব্যবহার করা হবে"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/bs.po b/po/bs.po
new file mode 100644
index 0000000..3703f23
--- /dev/null
+++ b/po/bs.po
@@ -0,0 +1,1860 @@
+# translation of glib to Bosnian
+# This file is distributed under the same license as the glib package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER, 2004.
+# Kenan Hadžiavdić <kenanh@frisurf.no>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.glib-2-4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2004-05-17 01:30+0000\n"
+"Last-Translator: Kenan Hadžiavdić <kenanh@frisurf.no>\n"
+"Language-Team: Bosnian <lokal@lugbih.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Čudan znak '%s', očekivan znak '=' nakon osobine '%s' elementa '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Neuspješno čitanje simboličkog linka '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Pretvaranje iz skupa znakova '%s' u '%s' nije podržano"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nisam mogao pokrenuti pretvaranje iz '%s' u '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Nevažeći niz bajtova u ulaznim podacima za pretvaranje"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Djelimičan niz znakova na kraju ulaznih podataka"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ne mogu pretvoriti '%s' u znakovni skup '%s'"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' nije apsolutni URI koristeći šemu datoteka"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI lokalne datoteke '%s' ne smije sadržavati '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' je nevažeći"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Ime računara URI-ja '%s' je nevažeće"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' sadrži nevažeće escape znakove"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Putanja '%s' nije absolutna putanja"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nevažeće ime računara"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Greška tokom otvaranja direktorija '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nisam mogao dodijeliti %lu bajtova za čitanje datoteke \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Neuspješno čitanje datoteke '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Neuspješno otvaranje datoteke '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Neuspješno preuzimanje osobina datoteke '%s': fstat() neuspješan: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Neuspješno pravljenje datoteke '%s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Nevažeći šablon '%s', ne bi trebao sadržavati '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Šablon '%s' ne završava sa XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Neuspješno čitanje simboličkog linka '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Simbolički linkovi nisu podržani"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nisam mogao pokrenuti pretvaranje iz `%s' u `%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ne mogu čitati sirovo u g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Preostali nepretvoreni podaci u baferu za čitanje"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal završava djelimičnim znakom"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ne mogu čitati sirovo u g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Greška u %d. redu, znak %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Greška u %d. redu: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Primijećen prazan entitet '&;'; važeći entiteti su: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak '%s' je nevažeći na početku imena entiteta; znak & započinje entitet; "
+"ako znak & ovdje ne označava početak entiteta, koristite &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak '%s' je nevažeći u imenu entiteta"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nepoznato ime entiteta '%s'"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Znak na kraju entiteta nije tačka-zarez; vjerovatno je korišten znak & bez "
+"namjere započinjanja entiteta - izbjegnite korištenje znaka & upisivanjem "
+"&amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Neuspješno tumačenje '%s', što je trebalo biti cifra unutar reference znaka "
+"(na primjer: &#234;) - možda je broj prevelik"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Referenca znaka '%s' ne kodira dopušteni znak"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Prazna referenca znaka; trebala bi sadržavati broj kao npr. &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Referenca znaka se ne završava tačka-zarezom; vjerovatno je korišten znak & "
+"bez namjere započinjanja entiteta - izbjegnite korištenje znaka & "
+"upisivanjem &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nedovršena referenca entiteta"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nedovršena referenca znaka"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Neispravno UTF-8 kodirani tekst"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Neispravno UTF-8 kodirani tekst"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Neispravno UTF-8 kodirani tekst"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument mora početi elementom (npr. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' je nevažeći prateći znak nakon znaka '<'; ne može započeti naziv "
+"elementa"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Čudan znak '%s', očekivan znak '>' radi okončanja početne oznake elementa '%"
+"s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "Čudan znak '%s', očekivan znak '=' nakon osobine '%s' elementa '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Čudan znak '%s', očekivan znak '>' ili '/' radi okončanja početne oznake "
+"elementa '%s' ili eventualno osobine; možda je korišten nevažeći znak u "
+"imenu osobine"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Čudan znak '%s', očekivan navodni znak nakon znaka jednakosti pri davanju "
+"vrijednosti osobini '%s' elementa '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' je nevažeći prateći znak nakon znakova '</'; '%s' ne može započeti "
+"naziv elementa"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' je nevažeći prateći znak nakon zatvaranja elementa '%s'; dopušteni znak "
+"je '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' je zatvoren, trenutno nema otvorenih elemenata"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' je zatvoren ali trenutno je otvoren element '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument je bio prazan ili je sadržavao samo prazna polja"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Neočekivan kraj dokumenta nakon otvorene zagrade '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Neočekivan kraj dokumenta uz još otvorene elemente - element '%s' je otvoren "
+"posljednji"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Neočekivan kraj dokumenta, očekivano zatvaranje zagrade radi okončanja "
+"oznake <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Neočekivan kraj dokumenta unutar imena elementa"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Neočekivan kraj dokumenta unutar imena osobine"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Neočekivan kraj dokumenta unutar oznake za otvaranje elementa"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Neočekivan kraj dokumenta nakon pratećeg znaka jednakosti iza naziva  "
+"osobine; nedostaje vrijednost osobine"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Neočekivan kraj dokumenta unutar vrijednosti atributa"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Neočekivan kraj dokumenta unutar oznake za zatvaranje elementa '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Neočekivan kraj dokumenta unutar komentara ili instrukcije procesiranja"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Kanal završava djelimičnim znakom"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Nevažeći niz bajtova u ulaznim podacima za pretvaranje"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Nedovršena referenca znaka"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Nedovršena referenca znaka"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Nedovršena referenca znaka"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Simbolički linkovi nisu podržani"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Greška u %d. redu, znak %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Nedovršena referenca entiteta"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Citat ne počinje navodnim znakom"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Neuparen navodni znak u naredbi ili drugom citatu iz shella"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst se završio nakon znaka '\\'. (Tekst je bio '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Tekst se završio bez uparenog navodnog znaka %c. (Teskt je bio '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekst je bio prazan (ili je sadržavao samo prazna polja)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Neuspješno čitanje podataka iz podređenog procesa"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Neuspješno stvaranje cijevi za komuniciranje sa podređenim procesom (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Neuspješno čitanje iz podređene cijevi (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Neuspješan prelazak u direktorij '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Neuspješno pokretanje podređenog procesa (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Nevažeće ime računara"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Nevažeći niz u unosu za pretvaranje"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Greška tokom otvaranja direktorija '%s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Neuspješno pokretanje pomoćnog programa"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Neočekivana greška u g_io_channel_win32_poll() tokom čitanja podataka iz "
+"podređenog procesa"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Neuspješno čitanje podataka iz podređenog procesa (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Neočekivana greška u select() tokom čitanja podataka iz podređenog procesa (%"
+"s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Neočekivana greška u waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Neuspješan fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Neuspješno izvršavanje podređenog procesa \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Neuspješno preusmjeravanje ulaza ili izlaza podređenog procesa (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Neuspješno pokretanje fork() za podređeni proces (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nepoznata greška tokom izvršenja podređenog procesa \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Neuspješno čitanje dovoljno podataka iz podređene pid cijevi (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak izvan raspona za UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Nevažeći niz u unosu za pretvaranje"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak izvan raspona za UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Nevažeće ime računara"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Nevažeće ime računara"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "URI '%s' sadrži nevažeće escape znakove"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Simbolički linkovi nisu podržani"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Simbolički linkovi nisu podržani"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Ime računara URI-ja '%s' je nevažeće"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Nevažeće ime računara"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Nevažeće ime računara"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Neuspješno pravljenje datoteke '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Neuspješno pravljenje datoteke '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Neuspješno pravljenje datoteke '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Greška tokom otvaranja direktorija '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Neočekivan kraj dokumenta unutar imena osobine"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Greška tokom otvaranja direktorija '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Greška u %d. redu: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Simbolički linkovi nisu podržani"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Nevažeće ime računara"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Ime računara URI-ja '%s' je nevažeće"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Greška tokom čitanja datoteke '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Greška u %d. redu: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Greška tokom pretvaranja: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Simbolički linkovi nisu podržani"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Greška tokom pretvaranja: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Nisam mogao dodijeliti %lu bajtova za čitanje datoteke \"%s\""
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Neuspješno otvaranje datoteke '%s': fdopen() neuspješan: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Pretvaranje iz skupa znakova `%s' u `%s' nije podržano"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..30a9dac
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,1934 @@
+# glib translation to Catalan.
+# Copyright © 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Softcatalà <info@softcatala.org>, 2001.
+# Jordi Mallach <jordi@sindominio.net>, 2002, 2003, 2004, 2005, 2006.
+# Josep Puigdemont <josep.puigdemont@gmail.com>, 2006.
+# Gil Forcada <gilforcada@guifi.net>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-04-26 20:15+0200\n"
+"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
+"Language-Team: Catalan <tradgnome@softcatala.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "No s'esperava l'atribut «%s» per a l'element «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "No s'ha trobat l'atribut «%s» de l'element «%s»"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "No s'esperava l'etiqueta «%s», s'esperava «%s»"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "No s'esperava l'etiqueta «%s» dins «%s»"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"No s'ha trobat cap fitxer d'adreces d'interès dins dels directoris de dades"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Ja existeix una adreça d'interès per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "No s'ha trobat cap adreça d'interès per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "No hi ha cap tipus MIME definit a l'adreça d'interès per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+"No hi ha cap senyalador privat definit a l'adreça d'interès per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "No hi ha cap grup establert a l'adreça d'interès per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"No hi ha cap aplicació amb el nom «%s» que hagi registrat l'adreça d'interès «%"
+"s»"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "No s'ha pogut expandir la línia d'execució «%s» amb URI «%s»"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "No es permet la conversió entre els jocs de caràcters «%s» a «%s»"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "No s'ha pogut obrir el convertidor de «%s» a «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "La seqüència de bytes a l'entrada de conversió no és vàlida"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "S'ha produït un error durant la conversió: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Seqüència de caràcters parcial al final de l'entrada"
+
+# FIXME: fallback
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "No es pot convertir el «fallback» «%s» al joc de codis «%s»"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "L'URI «%s» no és un URI absolut que utilitzi l'esquema «file»"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Pot ser que l'URI del fitxer local «%s» no inclogui cap «#»"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "L'URI «%s» no és vàlid"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "El nom de l'ordinador de l'URI «%s» no és vàlid"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "L'URI «%s» conté caràcters d'escapada invàlids"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "El nom de camí «%s» no és un camí absolut"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "El nom de l'ordinador no és vàlid"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "S'ha produït un error en obrir el directori «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "No s'ha pogut assignar %lu bytes per a llegir el fitxer «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "S'ha produït un error en llegir el fitxer «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "El fitxer «%s» és massa gran"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "No s'ha pogut llegir del fitxer «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "No s'ha pogut obrir el fitxer «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"No s'ha pogut obtenir els atributs del fitxer «%s»: ha fallat la funció fstat"
+"(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "No s'ha pogut obrir el fitxer «%s»: ha fallat la funció fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"No s'ha pogut canviar el nom del fitxer «%s» a «%s»: ha fallat la funció "
+"g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "No s'ha pogut crear el fitxer «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"No s'ha pogut obrir el fitxer «%s» per a escriptura: ha fallat la funció "
+"fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "No s'ha pogut escriure el fitxer «%s»: ha fallat la funció fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "No s'ha pogut escriure el fitxer «%s»: ha fallat la funció fflush(): %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "No s'ha pogut escriure el fitxer «%s»: ha fallat la funció fsync(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "No s'ha pogut tancar el fitxer «%s»: ha fallat la funció fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"No s'ha pogut suprimir el fitxer existent «%s»: ha fallat la funció g_unlink"
+"(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "La plantilla «%s» no és vàlida, no hauria de tenir cap «%s»"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "La plantilla «%s» no conté XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "No s'ha pogut llegir l'enllaç simbòlic «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "No es poden utilitzar els enllaços simbòlics"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "No s'ha pogut obrir el convertidor de «%s» a «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "No es pot fer una lectura bàsica a g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "A la memòria intermèdia de lectura hi ha dades sobrants no convertides"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "El canal acaba en un caràcter parcial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "No es pot fer una lectura bàsica a g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "No s'ha pogut obrir el fitxer «%s»: ha fallat la funció open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "No s'ha pogut mapejar el fitxer «%s»: ha fallat la funció mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "S'ha produït un error a la línia %d caràcter %d:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "S'ha produït un error a la línia %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"S'ha vist una entitat buida «&;». Les entitats vàlides són: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"El caràcter «%s» no és vàlid a l'inici d'un nom d'entitat. Les entitats "
+"comencen amb el caràcter &. Si amb aquest signe no es vol indicar una "
+"entitat, substituïu-lo per &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "El caràcter «%s» no és vàlid dins d'un nom d'entitat"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "No es coneix el nom de l'entitat «%s»"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"L'entitat no acaba amb un punt i coma. Segurament heu utilitzat un caràcter "
+"«&» sense intenció d'iniciar una entitat. Substituïu el caràcter «&» per &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"No s'ha pogut analitzar «%-.*s», hi hauria d'haver hagut un dígit dins un "
+"caràcter de referència (per exemple &#234;) - potser el dígit és massa llarg"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "El caràcter de referència «%-.*s» no codifica un caràcter permès"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"El caràcter de referència és buit. Hauria d'incloure un dígit com ara &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"La referència del caràcter no acaba amb un punt i coma. Segurament heu "
+"utilitzat un caràcter «&» sense intenció d'iniciar una entitat. Substituïu el "
+"caràcter «&» per &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referència a una entitat no acabada"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referència a un caràcter no acabada"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+"El text no està codificat correctament a UTF-8 - la seqüència és massa llarga"
+
+# FIXME: "caràcter estrella" (josep)
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+"El text no està codificat correctament a UTF-8 - no és un caràcter estrella"
+
+# FIXME: això no funcionarà en català (josep)
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "El text no està codificat correctament a UTF-8 - no és un vàlid «%s»"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "El document ha de començar amb un element (p.ex. <llibre>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"«%s» no és un caràcter vàlid després d'un caràcter «<». No pot començar un nom "
+"d'element"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperava el caràcter «>» per acabar "
+"l'etiqueta d'element buit «%s»"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperava un «=» després del nom "
+"d'atribut «%s» de l'element «%s»"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperava un caràcter «>» o «/» per "
+"finalitzar l'etiqueta d'inici de l'element «%s», o opcionalment un atribut. "
+"Potser heu utilitzat un caràcter no vàlid en un nom d'atribut"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperaven unes cometes d'obertura "
+"després del signe «=» en donar valor a l'atribut «%s» de l'element «%s»"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"«%s» no és un caràcter vàlid després dels caracters «</»; «%s» no hauria "
+"d'iniciar un nom d'element"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"«%s» no és un caràcter vàlid després del nom d'element de tancament «%s». El "
+"caràcter permès és «>»"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "L'element «%s» estava tancat. Actualment no hi ha cap element obert"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "L'element «%s» estava tancat. L'element obert actualment és «%s»"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "El document era buit o només contenia espais en blanc"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"El document ha acabat de manera inesperada immediatament després del símbol "
+"«<»"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"El document ha acabat de manera inesperada amb elements encara oberts. «%s» "
+"era l'últim element obert"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"El document ha acabat de manera inesperada. S'esperava trobar un símbol «>» "
+"que acabés l'etiqueta <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "El document ha acabat de manera inesperada enmig d'un nom d'element"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "El document ha acabat de manera inesperada enmig d'un nom d'atribut"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"El document ha acabat de manera inesperada enmig d'una etiqueta d'obertura "
+"d'un element."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"El document ha acabat de manera inesperada després d'un signe d'igual "
+"després d'un nom d'atribut. No hi ha cap valor d'atribut"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "El document ha acabat de manera inesperada enmig d'un valor d'atribut"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"El document ha acabat de manera inesperada enmig de l'etiqueta de tancament "
+"de l'element «%s»"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"El document ha acabat de manera inesperada enmig d'un comentari o una "
+"instrucció de processament"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objecte malmès"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "error intern o objecte malmès"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "no hi ha prou memòria"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "s'ha arribat al límit de tornades enrere"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"el patró conté elements que no estan implementats en les concordances "
+"parcials"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "error intern"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"no s'ha implementat l'ús de referències anteriors per a coincidències "
+"parcials"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "s'ha arribat al límit de recurrències"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "s'ha arribat al límit d'espais de treball per a subcadenes buides"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "la combinació de senyaladors de línia nova no és vàlida"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "error desconegut"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ al final del patró"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c al final del patró"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "caràcter no reconegut després de \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "aquí no es permeten els escapaments (\\l,\\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "nombres fora del rang en el quantificador {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "nombre massa gran en el quantificador {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "falta el «]» per a la classe de caràcter"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "la seqüència d'escapada en la classe de caràcter no és vàlida"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "s'ha sortit del rang en la classe de caràcter"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "no hi ha res a repetir"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "no es reconeix el caràcter després de «(?»"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "no es reconeix el caràcter després de «(?<»"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "no es reconeix el caràcter després de «(?P»"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+"només es permeten les classes amb nom de POSIX dins de la pròpia classe"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "falta un «)»"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "hi ha un «)» sense el corresponent «(»"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "«(?R» o «(?[+-]dígits» han d'anar seguits per «)»"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referència a un subpatró que no existeix"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "falta un «)» després del comentari"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "l'expressió regular és massa llarga"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "no s'ha pogut obtenir memòria"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "l'asserció cap enrera no té llargada fixa"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "nombre o nom malformats després de «(?(»"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "el grup condicional conté més de dues branques"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "s'esperava una asserció després de «(?(»"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nom de classe POSIX desconeguda"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "no es poden utilitzar els elements d'ordenació de POSIX"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "el valor del caràcter a la seqüència «\\x{...}» és massa llarg"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condició «(?(0)» no vàlida"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "no es permet \\C en assercions cap enrera"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "la crida recursiva podria entrar en bucle indefinidament"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "falta la finalització en el nom del subpatró"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dos noms de subpatró tenen el mateix nom"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "la seqüència «\\P» o «\\p» és malformada"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "es desconeix el nom de la propietat després de «\\P» o «\\p»"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "el nom del subpatró és massa llarg (32 caràcters com a màxim)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "hi ha massa subpatrons amb nom (màxim de 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "el valor octal és més gran que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "el grup «DEFINE» conté més d'una branca"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "no es permet repetir un grup «DEFINE»"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opcions «NEWLINE» inconsistents"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"«\\g» no és seguit per un nom entre claus o un nombre opcional diferent de "
+"zero entre claus"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetició no esperada"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "desbordament del codi"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "s'ha produït un desbordament en compilar l'espai de treball"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "no s'ha trobat el subpatró referenciat comprovat anteriorment"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "S'ha produït un error en fer coincidir l'expressió regular %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "La biblioteca PCRE no està compilada per a interpretar UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"La biblioteca PCRE no està compilada per a interpretar les propietats UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"S'ha produït un error en compilar l'expressió regular %s al caràcter %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "S'ha produït un error en optimitzar l'expressió regular %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "s'esperava un dígit hexadecimal o bé «}»"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "s'esperava un dígit hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "falta un «<» en la referència simbòlica"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "la referència simbòlica no està acabada"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referència simbòlica de longitud zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "s'esperava un dígit"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "la referència simbòlica no és vàlida"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "«\\» final extraviat"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "no es reconeix la seqüència d'escapament"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"S'ha produït un error en analitzar el text de reemplaçament «%s» al caràcter %"
+"lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "El text citat no comença amb cometes"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"S'han trobat unes cometes desaparellades en una línia d'ordres o en un altre "
+"text entre cometes"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "El text acaba just després d'un caràcter «\\». (El text era «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"El text ha acabat abans de trobar les cometes corresponents a %c. (El text "
+"era «%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "El text era buit (o només contenia espais en blanc)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "No s'ha pogut llegir dades del procés fill"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"No s'ha pogut crear el conducte per comunicar-se amb el procés fill (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "No s'ha pogut llegir des del conducte fill (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "No s'ha pogut canviar al directori «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "No s'ha pogut executar el procés fill (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "El nom del programa no és vàlid: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "La cadena en el vector d'argument no és vàlida a %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Cadena no vàlida a l'entorn: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "El directori de treball no és vàlid: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "No s'ha pogut executar el programa d'ajuda (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"S'ha produït un error inesperat a g_io_chanel_win32_poll() en llegir dades "
+"d'un procés fill"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "No s'ha pogut llegir dades des del procés fill (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"S'ha produït un error inesperat a select() en llegir dades des d'un procés "
+"fill (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "S'ha produït un error inesperat en waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "No s'ha pogut bifurcar-se (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "No s'ha pogut executar el procés fill «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "No s'ha pogut redirigir l'entrada o la sortida del procés fill (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "No s'ha pogut bifurcar el procés fill (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "S'ha produït un error desconegut en executar el procés fill «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"No s'han pogut llegir prou dades del conducte de l'identificador del procés "
+"fill (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "El caràcter és fora del rang per a UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Seqüència no vàlida a l'entrada de la conversió"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "El caràcter és fora del rang per a UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Forma d'ús:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCIÓ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcions d'ajuda:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Mostra les opcions d'ajuda"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Mostra totes les opcions d'ajuda"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcions de l'aplicació:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "No es pot analitzar el valor enter «%s» per a %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "El valor enter «%s» per a %s és fora del rang"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "No es pot analitzar el valor doble «%s» per a %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "El valor doble «%s» per a %s és fora del rang"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "S'ha produït un error en analitzar l'opció %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Manca un argument per a %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Es desconeix l'opció %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "No s'ha pogut trobar cap fitxer de claus vàlid als directoris de cerca"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "No és un fitxer regular"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "El fitxer és buit"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"El fitxer de claus conté la línia «%s» que no és una parella clau-valor, grup "
+"o comentari"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "El nom del grup no és vàlid: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "El fitxer de claus no comença amb un grup"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "El nom de la clau no és vàlid: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "El fitxer de claus conté la codificació no implementada «%s»"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "El fitxer de claus no té el grup «%s»"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "El fitxer de claus no té la clau «%s»"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "El fitxer de claus conté la clau «%s» amb el valor «%s» que no és UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"El fitxer de claus conté la clau «%s» que té un valor que no és interpretable."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"El fitxer de claus conté la clau «%s» en el grup «%s», que té un valor no "
+"interpretable."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "El fitxer de claus no conté una clau «%s» en el grup «%s»"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "El fitxer de claus conté un caràcter d'escapada al final de línia"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "El fitxer de claus conté una seqüència d'escapada no vàlida «%s»"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "El valor «%s» no es pot interpretar com a un nombre."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "El valor enter «%s» és fora del rang"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "El valor «%s» no es pot interpretar com a un nombre en coma flotant."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "El valor «%s» no es pot interpretar com un booleà."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "El valor de comptatge passat a %s és massa llarg"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Ja està tancat el flux"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "S'ha cancel·lat l'operació"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipus desconegut"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "tipus de fitxer %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "tipus %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "No s'esperava un final de flux tant aviat"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sense nom"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "El fitxer d'escriptori no especificava el camp d'execució"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "No s'ha pogut trobar el terminal que demanava l'aplicació"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"No s'ha pogut crear el directori de configuració de l'aplicació de l'usuari %"
+"s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+"No s'ha pogut crear el directori de configuració MIME de l'usuari %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "No s'ha pogut crear el fitxer d'escriptori de l'usuari %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definició personalitzada per a %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "la unitat no implementa l'expulsió"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "la unitat no implementa l'enquesta per si hi ha un medi"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+"Un nombre de testimonis (%d) de la codificació del GEmblem no són formats "
+"correctament"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+"Un nombre de testimonis (%d) en la codificació del GEmblemedIcon no són "
+"formats correctament"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "S'esperava un GEmblem per a un GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "L'operació no està implementada"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "No existeix el punt de muntatge contenidor"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "No es pot copiar al directori"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "No es pot copiar el directori al directori"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Ja existeix el fitxer de destinació"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "No es pot copiar el directori de forma recursiva"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "No es pot copiar el fitxer especial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "El valor donat per a l'enllaç simbòlic no és vàlid"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "No es pot utilitzar la paperera"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "En els noms de fitxers no pot haver-hi «%c»"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "el volum no implementa el muntatge"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+"No hi ha cap aplicació que s'hagi registrat per a gestionar aquest fitxer"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "L'enumerador està tancat"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "L'enumerador de fitxer té una operació pendent"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Ja està tancat l'enumerador de fitxer"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fitxer"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "El fitxer que conté la icona"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Les dades d'entrada pel GFileIcon no són formades correctament"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "El flux no implementa «query_info»"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "No està implementada la cerca en el flux"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "No es permet truncar en els fluxs d'entrada"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "No es permet trucar en els fluxs"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Nombre de testimonis erroni (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "El nom de classe %s no té tipus"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "El tipus %s no implementa la interfície GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "El tipus %s no té classe"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "El número de versió no és format correctament: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "El tipus %s no implementa «from_tokens()» a la interfície GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+"No es pot gestionar la versió proporcionada de la codificació de la icona"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "El flux d'entrada no té implementada la lectura"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "El flux té una operació pendent"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"No s'ha pogut trobar el tipus de seguiment de directoris locals predeterminat"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "El nom del fitxer no és vàlid: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr ""
+"S'ha produït un error en obtenir la informació del sistema de fitxers: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "No es pot canviar el nom del directori arrel"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "S'ha produït un error en canviar el nom del fitxer: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "No es pot canviar el nom del fitxer, ja existeix aquest nom"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nom de fitxer no vàlid"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "S'ha produït un error en obrir el fitxer: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "No s'ha pogut obrir el directori"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "S'ha produït un error en suprimir el fitxer: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "S'ha produït un error en enviar el fitxer a la paperera: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "No s'ha pogut crear el directori de la paperera %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "No s'ha pogut trobar el directori superior per a la paperera"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "No s'ha pogut trobar o crear el directori de la paperera"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "No s'ha pogut crear el fitxer d'informació d'enviar a la paperera: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "No s'ha pogut enviar el fitxer a la paperera: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "S'ha produït un error en crear el directori: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "S'ha produït un error en fer l'enllaç simbòlic: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "S'ha produït un error en moure el fitxer: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "No s'ha pogut moure el directori al directori"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Ha fallat la creació del fitxer de còpia de seguretat"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "S'ha produït un error en suprimir el fitxer objectiu: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "No està implementat el moure entre muntatges"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "El valor de l'atribut no pot ser nul"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava una cadena)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "El nom de l'atribut estés no és vàlid"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "S'ha produït un error en establir l'atribut estés «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr ""
+"S'ha produït un error en executar la funció «stat()» en el fitxer «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codificació no vàlida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr ""
+"S'ha produït un error en executar la funció «stat()» al descriptor de fitxer: "
+"%s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava un uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava un uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava una cadena de bytes)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "S'ha produït un error en establir els permisos: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "S'ha produït un error en establir el propietari: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "l'enllaç simbòlic no pot ser nul"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "S'ha produït un error en establir l'enllaç simbòlic: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"S'ha produït un error en establir l'enllaç simbòlic: el fitxer no és un "
+"enllaç simbòlic"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "El context del SELinux no pot ser nul"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "S'ha produït un error en establir el context del SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "Aquest sistema no té habilitat el SELinux"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "No està implementat establir l'atribut %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "S'ha produït un error en llegir des del fitxer: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "S'ha produït un error en cercar en el fitxer: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "S'ha produït un error en tancar el fitxer: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+"No s'ha pogut trobar el tipus de monitorització de fitxer local predeterminat"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "S'ha produït un error en escriure al fitxer: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr ""
+"S'ha produït un error en suprimir l'enllaç de còpia de seguretat antic: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "S'ha produït un error en crear la còpia de seguretat: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "S'ha produït un error en canviar el nom del fitxer temporal: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "S'ha produït un error en truncar el fitxer: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "S'ha produït un error en obrir el fitxer «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "El fitxer objectiu és un directori"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "El fitxer objectiu no és un fitxer regular"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "El fitxer ha estat modificat des d'alguna aplicació externa"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "S'ha produït un error en suprimir el fitxer vell: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "El GSeekType proporcionat no és vàlid"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "La sol·licitud de cerca és invàlida"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "No es pot truncar el GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "S'ha arribat al màxim del límit de la matriu de dades"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "El flux de sortida de memòria no és modificable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Ha fallat el redimensionament de la memòria del flux de sortida"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "el muntatge no implementa el desmuntatge"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "el muntatge no implementa l'expulsió"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "el muntatge no implementa el tornar-se a muntar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "el muntatge no implementa l'estimació de tipus de contingut"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "el muntatge no implementa l'estimació de tipus de contingut síncron"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "El flux de sortida no implementa l'escriptura"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "El flux font ja està tancat"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nom"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "El nom de la icona"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "noms"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Una llista amb els noms de les icones"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "utilitza les alternatives predeterminades"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Si s'han d'utilitzar les alternatives predeterminades que es trobin en "
+"escurçar el nom a «-» caràcters. Ignora els noms després del primer si es "
+"donen més múltiples noms."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descriptor de fitxer"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "El descriptor de fitxer del qual llegir"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Tanca el descriptor de fitxer"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Si s'ha de tancar el descriptor de fitxer quan es tanqui el flux"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "S'ha produït un error en llegir des de UNIX: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "S'ha produït un error en tancar des de UNIX: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Arrel del sistema de fitxers"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "El descriptor de fitxer al qual escriure"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "S'ha produït un error en escriure a UNIX: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "el volum no implementa l'expulsió"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "No es pot trobar l'aplicació"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "S'ha produït un error en executar l'aplicació: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "No estan implementats els URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "els canvis associatius no estan implementats a win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "La creació associativa no està implementada a win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "no amaguis les entrades"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "utilitza un format de llistat llarg"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FITXER...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "S'ha produït un error en crear l'enllaç de còpia de seguretat: %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "No s'ha pogut canviar el mode del fitxer fork() ha fallat: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "No s'ha pogut canviar el mode del fitxer: waitpid() ha fallat: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "No s'ha pogut canviar el mode del fitxer: chmod() ha fallat: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "No s'ha pogut canviar el mode del fitxer: el fill ha estat finalitzat pel "
+#~ "senyal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr ""
+#~ "No s'ha pogut canviar el mode del fitxer: el fill ha finalitzat "
+#~ "anormalment"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "No se es pot fer la conversió del joc de caràcters «%s» a «%s»"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Mida incorrecta del missatge"
+
+#~ msgid "Socket error"
+#~ msgstr "Error de sòcol"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "No es permet l'ús dels indicadors de definició del canal"
diff --git a/po/ca@valencia.po b/po/ca@valencia.po
new file mode 100644
index 0000000..32313e1
--- /dev/null
+++ b/po/ca@valencia.po
@@ -0,0 +1,1935 @@
+# glib translation to Valencian (southern Catalan).
+# Copyright © 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Softcatalà <info@softcatala.org>, 2001.
+# Jordi Mallach <jordi@sindominio.net>, 2002, 2003, 2004, 2005, 2006.
+# Josep Puigdemont <josep.puigdemont@gmail.com>, 2006.
+# Gil Forcada <gilforcada@guifi.net>, 2008.
+# Miquel Esplà <miquelespla@gmail.com>, 2009 [valencian variant adaptation].
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-19 20:27+0100\n"
+"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
+"Language-Team: Catalan <tradgnome@softcatala.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "No s'esperava l'atribut «%s» per a l'element «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "No s'ha trobat l'atribut «%s» de l'element «%s»"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "No s'esperava l'etiqueta «%s», s'esperava «%s»"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "No s'esperava l'etiqueta «%s» dins «%s»"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"No s'ha trobat cap fitxer d'adreces d'interés dins dels directoris de dades"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Ja existeix una adreça d'interés per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "No s'ha trobat cap adreça d'interés per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "No hi ha cap tipus MIME definit a l'adreça d'interés per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+"No hi ha cap senyalador privat definit a l'adreça d'interés per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "No hi ha cap grup establert a l'adreça d'interés per a l'URI «%s»"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"No hi ha cap aplicació amb el nom «%s» que haja registrat l'adreça d'interés «%"
+"s»"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "No s'ha pogut expandir la línia d'execució «%s» amb URI «%s»"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "No es permet la conversió entre els jocs de caràcters «%s» a «%s»"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "No s'ha pogut obrir el convertidor de «%s» a «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "La seqüència de bytes a l'entrada de conversió no és vàlida"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "S'ha produït un error durant la conversió: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Seqüència de caràcters parcial al final de l'entrada"
+
+# FIXME: fallback
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "No es pot convertir el «fallback» «%s» al joc de codis «%s»"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "L'URI «%s» no és un URI absolut que utilitze l'esquema «file»"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Pot ser que l'URI del fitxer local «%s» no incloga cap «#»"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "L'URI «%s» no és vàlid"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "El nom de l'ordinador de l'URI «%s» no és vàlid"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "L'URI «%s» conté caràcters d'escapada invàlids"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "El nom de camí «%s» no és un camí absolut"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "El nom de l'ordinador no és vàlid"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "S'ha produït un error en obrir el directori «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "No s'ha pogut assignar %lu bytes per a llegir el fitxer «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "S'ha produït un error en llegir el fitxer «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "El fitxer «%s» és massa gran"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "No s'ha pogut llegir del fitxer «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "No s'ha pogut obrir el fitxer «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"No s'ha pogut obtindre els atributs del fitxer «%s»: ha fallat la funció fstat"
+"(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "No s'ha pogut obrir el fitxer «%s»: ha fallat la funció fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"No s'ha pogut canviar el nom del fitxer «%s» a «%s»: ha fallat la funció "
+"g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "No s'ha pogut crear el fitxer «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"No s'ha pogut obrir el fitxer «%s» per a escriptura: ha fallat la funció "
+"fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "No s'ha pogut escriure el fitxer «%s»: ha fallat la funció fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "No s'ha pogut escriure el fitxer «%s»: ha fallat la funció fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "No s'ha pogut escriure el fitxer «%s»: ha fallat la funció fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "No s'ha pogut tancar el fitxer «%s»: ha fallat la funció fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"No s'ha pogut suprimir el fitxer existent «%s»: ha fallat la funció g_unlink"
+"(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "La plantilla «%s» no és vàlida, no hauria de tindre cap «%s»"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "La plantilla «%s» no conté XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "No s'ha pogut llegir l'enllaç simbòlic «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "No es poden utilitzar els enllaços simbòlics"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "No s'ha pogut obrir el convertidor de «%s» a «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "No es pot fer una lectura bàsica a g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "A la memòria intermèdia de lectura hi ha dades sobrants no convertides"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "El canal acaba en un caràcter parcial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "No es pot fer una lectura bàsica a g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "No s'ha pogut obrir el fitxer «%s»: ha fallat la funció open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "No s'ha pogut mapejar el fitxer «%s»: ha fallat la funció mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "S'ha produït un error a la línia %d caràcter %d:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "S'ha produït un error a la línia %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"S'ha vist una entitat buida «&;». Les entitats vàlides són: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"El caràcter «%s» no és vàlid a l'inici d'un nom d'entitat. Les entitats "
+"comencen amb el caràcter &. Si amb este signe no es vol indicar una entitat, "
+"substituïu-lo per &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "El caràcter «%s» no és vàlid dins d'un nom d'entitat"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "No es coneix el nom de l'entitat «%s»"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"L'entitat no acaba amb un punt i coma. Segurament heu utilitzat un caràcter "
+"«&» sense intenció d'iniciar una entitat. Substituïu el caràcter «&» per &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"No s'ha pogut analitzar «%-.*s», hi hauria d'haver hagut un dígit dins un "
+"caràcter de referència (per exemple &#234;) - potser el dígit és massa llarg"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "El caràcter de referència «%-.*s» no codifica un caràcter permès"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"El caràcter de referència és buit. Hauria d'incloure un dígit com ara &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"La referència del caràcter no acaba amb un punt i coma. Segurament heu "
+"utilitzat un caràcter «&» sense intenció d'iniciar una entitat. Substituïu el "
+"caràcter «&» per &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referència a una entitat no acabada"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referència a un caràcter no acabada"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+"El text no està codificat correctament a UTF-8 - la seqüència és massa llarga"
+
+# FIXME: "caràcter estrella" (josep)
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+"El text no està codificat correctament a UTF-8 - no és un caràcter estrella"
+
+# FIXME: això no funcionarà en català (josep)
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "El text no està codificat correctament a UTF-8 - no és un vàlid «%s»"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "El document ha de començar amb un element (p.ex. <llibre>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"«%s» no és un caràcter vàlid després d'un caràcter «<». No pot començar un nom "
+"d'element"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperava el caràcter «>» per acabar "
+"l'etiqueta d'element buit «%s»"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperava un «=» després del nom "
+"d'atribut «%s» de l'element «%s»"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperava un caràcter «>» o «/» per "
+"finalitzar l'etiqueta d'inici de l'element «%s», o opcionalment un atribut. "
+"Potser heu utilitzat un caràcter no vàlid en un nom d'atribut"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"S'ha trobat un caràcter estrany «%s». S'esperaven unes cometes d'obertura "
+"després del signe «=» en donar valor a l'atribut «%s» de l'element «%s»"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"«%s» no és un caràcter vàlid després dels caracters «</»; «%s» no hauria "
+"d'iniciar un nom d'element"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"«%s» no és un caràcter vàlid després del nom d'element de tancament «%s». El "
+"caràcter permès és «>»"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "L'element «%s» estava tancat. Actualment no hi ha cap element obert"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "L'element «%s» estava tancat. L'element obert actualment és «%s»"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "El document era buit o només contenia espais en blanc"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"El document ha acabat de manera inesperada immediatament després del símbol "
+"«<»"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"El document ha acabat de manera inesperada amb elements encara oberts. «%s» "
+"era l'últim element obert"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"El document ha acabat de manera inesperada. S'esperava trobar un símbol «>» "
+"que acabés l'etiqueta <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "El document ha acabat de manera inesperada enmig d'un nom d'element"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "El document ha acabat de manera inesperada enmig d'un nom d'atribut"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"El document ha acabat de manera inesperada enmig d'una etiqueta d'obertura "
+"d'un element."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"El document ha acabat de manera inesperada després d'un signe d'igual "
+"després d'un nom d'atribut. No hi ha cap valor d'atribut"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "El document ha acabat de manera inesperada enmig d'un valor d'atribut"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"El document ha acabat de manera inesperada enmig de l'etiqueta de tancament "
+"de l'element «%s»"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"El document ha acabat de manera inesperada enmig d'un comentari o una "
+"instrucció de processament"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objecte malmés"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "error intern o objecte malmés"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "no hi ha prou memòria"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "s'ha arribat al límit de tornades arrere"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"el patró conté elements que no estan implementats en les concordances "
+"parcials"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "error intern"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"no s'ha implementat l'ús de referències anteriors per a coincidències "
+"parcials"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "s'ha arribat al límit de recurrències"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "s'ha arribat al límit d'espais de treball per a subcadenes buides"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "la combinació de senyaladors de línia nova no és vàlida"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "error desconegut"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ al final del patró"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c al final del patró"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "caràcter no reconegut després de \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "ací no es permeten els escapaments (\\l,\\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "nombres fora del rang en el quantificador {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "nombre massa gran en el quantificador {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "falta el «]» per a la classe de caràcter"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "la seqüència d'escapada en la classe de caràcter no és vàlida"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "s'ha eixit del rang en la classe de caràcter"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "no hi ha res a repetir"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "no es reconeix el caràcter després de «(?»"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "no es reconeix el caràcter després de «(?<»"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "no es reconeix el caràcter després de «(?P»"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+"només es permeten les classes amb nom de POSIX dins de la pròpia classe"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "falta un «)»"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "hi ha un «)» sense el corresponent «(»"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "«(?R» o «(?[+-]digits» han d'anar seguits per «)»"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referència a un subpatró que no existeix"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "falta un «)» després del comentari"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "l'expressió regular és massa llarga"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "no s'ha pogut obtindre memòria"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "l'asserció cap arrere no té llargada fixa"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "nombre o nom malformats després de «(?(»"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "el grup condicional conté més de dues branques"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "s'esperava una asserció després de «(?(»"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nom de classe POSIX desconeguda"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "no es poden utilitzar els elements d'ordenació de POSIX"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "el valor del caràcter a la seqüència «\\x{...}» és massa llarg"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condició «(?(0)» no vàlida"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "no es permet \\C en assercions cap arrere"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "la crida recursiva podria buclar-se indefinidament"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "falta la finalització en el nom del subpatró"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dos noms de subpatró tenen el mateix nom"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "la seqüència «\\P» o «\\p» és malformada"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "es desconeix el nom de la propietat després de «\\P» o «\\p»"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "el nom del subpatró és massa llarg (32 caràcters com a màxim)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "hi ha massa subpatrons amb nom (màxim de 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "el valor octal és més gran que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "el grup «DEFINE» conté més d'una branca"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "no es permet repetir un grup «DEFINE»"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opcions «NEWLINE» inconsistents"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"«\\g» no és seguit per un nom entre claus o un nombre opcional diferent de "
+"zero entre claus"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetició no esperada"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "desbordament del codi"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "s'ha produït un desbordament en compilar l'espai de treball"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "no s'ha trobat el subpatró referenciat comprovat anteriorment"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "S'ha produït un error en fer coincidir l'expressió regular %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "La biblioteca PCRE no està compilada per a interpretar UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"La biblioteca PCRE no està compilada per a interpretar les propietats UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"S'ha produït un error en compilar l'expressió regular %s al caràcter %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "S'ha produït un error en optimitzar l'expressió regular %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "s'esperava un dígit hexadecimal o bé «}»"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "s'esperava un dígit hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "falta un «<» en la referència simbòlica"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "la referència simbòlica no està acabada"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referència simbòlica de longitud zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "s'esperava un dígit"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "la referència simbòlica no és vàlida"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "«\\» final extraviat"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "no es reconeix la seqüència d'escapament"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"S'ha produït un error en analitzar el text de reemplaçament «%s» al caràcter %"
+"lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "El text citat no comença amb cometes"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"S'han trobat unes cometes desaparellades en una línia d'ordes o en un altre "
+"text entre cometes"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "El text acaba just després d'un caràcter «\\». (El text era «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"El text ha acabat abans de trobar les cometes corresponents a %c. (El text "
+"era «%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "El text era buit (o només contenia espais en blanc)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "No s'ha pogut llegir dades del procés fill"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"No s'ha pogut crear el conducte per comunicar-se amb el procés fill (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "No s'ha pogut llegir des del conducte fill (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "No s'ha pogut canviar al directori «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "No s'ha pogut executar el procés fill (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "El nom del programa no és vàlid: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "La cadena en el vector d'argument no és vàlida a %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Cadena no vàlida a l'entorn: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "El directori de treball no és vàlid: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "No s'ha pogut executar el programa d'ajuda (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"S'ha produït un error inesperat a g_io_chanel_win32_poll() en llegir dades "
+"d'un procés fill"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "No s'ha pogut llegir dades des del procés fill (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"S'ha produït un error inesperat a select() en llegir dades des d'un procés "
+"fill (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "S'ha produït un error inesperat en waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "No s'ha pogut bifurcar-se (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "No s'ha pogut executar el procés fill «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "No s'ha pogut redirigir l'entrada o l'eixida del procés fill (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "No s'ha pogut bifurcar el procés fill (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "S'ha produït un error desconegut en executar el procés fill «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"No s'han pogut llegir prou dades del conducte de l'identificador del procés "
+"fill (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "El caràcter és fora del rang per a UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Seqüència no vàlida a l'entrada de la conversió"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "El caràcter és fora del rang per a UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Forma d'ús:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCIÓ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcions d'ajuda:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Mostra les opcions d'ajuda"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Mostra totes les opcions d'ajuda"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcions de l'aplicació:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "No es pot analitzar el valor enter «%s» per a %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "El valor enter «%s» per a %s és fora del rang"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "No es pot analitzar el valor doble «%s» per a %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "El valor doble «%s» per a %s és fora del rang"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "S'ha produït un error en analitzar l'opció %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Manca un argument per a %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Es desconeix l'opció %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "No s'ha pogut trobar cap fitxer de claus vàlid als directoris de cerca"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "No és un fitxer regular"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "El fitxer és buit"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"El fitxer de claus conté la línia «%s» que no és una parella clau-valor, grup "
+"o comentari"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "El nom del grup no és vàlid: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "El fitxer de claus no comença amb un grup"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "El nom de la clau no és vàlid: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "El fitxer de claus conté la codificació no implementada «%s»"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "El fitxer de claus no té el grup «%s»"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "El fitxer de claus no té la clau «%s»"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "El fitxer de claus conté la clau «%s» amb el valor «%s» que no és UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"El fitxer de claus conté la clau «%s» que té un valor que no és interpretable."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"El fitxer de claus conté la clau «%s» en el grup «%s», que té un valor no "
+"interpretable."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "El fitxer de claus no conté una clau «%s» en el grup «%s»"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "El fitxer de claus conté un caràcter d'escapada al final de línia"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "El fitxer de claus conté una seqüència d'escapada no vàlida «%s»"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "El valor «%s» no es pot interpretar com a un nombre."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "El valor enter «%s» és fora del rang"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "El valor «%s» no es pot interpretar com a un nombre en coma flotant."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "El valor «%s» no es pot interpretar com un booleà."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "El valor de comptatge passat a %s és massa llarg"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Ja està tancat el flux"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "S'ha cancel·lat l'operació"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipus desconegut"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "tipus de tixer %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "tipus %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "No s'esperava un final de flux tant aviat"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sense nom"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "El fitxer d'escriptori no especificava el camp d'execucció"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "No s'ha pogut trobar el terminal que demanava l'aplicació"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"No s'ha pogut crear el directori de configuració de l'aplicació de l'usuari %"
+"s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+"No s'ha pogut crear el directori de configuració MIME de l'usuari %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "No s'ha pogut crear el fitxer d'escriptori de l'usuari %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definició personalitzada per a %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "la unitat no implementa l'expulsió"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "la unitat no implementa l'enquesta per si hi ha un medi"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+"Un nombre de testimonis (%d) de la codificació del GEmblem no són formats "
+"correctament"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+"Un nombre de testimonis (%d) en la codificació del GEmblemedIcon no són "
+"formats correctament"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "S'esperava un GEmblem per a un GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "L'operació no està implementada"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "No existeix el punt de muntatge contenidor"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "No es pot copiar al directori"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "No es pot copiar el directori al directori"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Ja existeix el fitxer de destinació"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "No es pot copiar el directori de forma recursiva"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "No es pot copiar el fitxer especial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "El valor donat per a l'enllaç simbòlic no és vàlid"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "No es pot utilitzar la paperera"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "En els noms de fitxers no pot haver-hi «%c»"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "el volum no implementa el muntatge"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+"No hi ha cap aplicació que s'haja registrat per a gestionar este fitxer"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "L'enumerador està tancat"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "L'enumerador de fitxer té una operació pendent"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Ja està tancat l'enumerador de fitxer"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fitxer"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "El fitxer que conté la icona"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Les dades d'entrada pel GFileIcon no són formades correctament"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "El flux no implementa «query_info»"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "No està implementada la cerca en el flux"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "No es permet truncar en els fluxs d'entrada"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "No es permet trucar en els fluxs"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Nombre de testimonis erroni (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "El nom de classe %s no té tipus"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "El tipus %s no implementa la interfície GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "El tipus %s no té classe"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "El número de versió no és format correctament: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "El tipus %s no implementa «from_tokens()» a la interfície GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+"No es pot gestionar la versió proporcionada de la codificació de la icona"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "El flux d'entrada no té implementada la lectura"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "El flux té una operació pendent"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"No s'ha pogut trobar el tipus de seguiment de directoris locals predeterminat"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "El nom del fitxer no és vàlid: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr ""
+"S'ha produït un error en obtindre la informació del sistema de fitxers: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "No es pot canviar el nom del directori arrel"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "S'ha produït un error en canviar el nom del fitxer: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "No es pot canviar el nom del fitxer, ja existeix este nom"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nom de fitxer no vàlid"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "S'ha produït un error en obrir el fitxer: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "No s'ha pogut obrir el directori"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "S'ha produït un error en suprimir el fitxer: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "S'ha produït un error en enviar el fitxer a la paperera: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "No s'ha pogut crear el directori de la paperera %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "No s'ha pogut trobar el directori superior per a la paperera"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "No s'ha pogut trobar o crear el directori de la paperera"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "No s'ha pogut crear el fitxer d'informació d'enviar a la paperera: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "No s'ha pogut enviar el fitxer a la paperera: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "S'ha produït un error en crear el directori: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "S'ha produït un error en fer l'enllaç simbòlic: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "S'ha produït un error en moure el fitxer: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "No s'ha pogut moure el directori al directori"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Ha fallat la creació del fitxer de còpia de seguretat"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "S'ha produït un error en suprimir el fitxer objectiu: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "No està implementat el moure entre muntatges"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "El valor de l'atribut no pot ser nul"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava una cadena)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "El nom de l'atribut estés no és vàlid"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "S'ha produït un error en establir l'atribut estés «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr ""
+"S'ha produït un error en executar la funció «stat()» en el fitxer «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codificació no vàlida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr ""
+"S'ha produït un error en executar la funció «stat()» al descriptor de fitxer: "
+"%s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava un uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava un uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipus d'atribut no vàlid (s'esperava una cadena de bytes)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "S'ha produït un error en establir els permisos: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "S'ha produït un error en establir el propietari: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "l'enllaç simbòlic no pot ser nul"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "S'ha produït un error en establir l'enllaç simbòlic: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"S'ha produït un error en establir l'enllaç simbòlic: el fitxer no és un "
+"enllaç simbòlic"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "El context del SELinux no pot ser nul"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "S'ha produït un error en establir el context del SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "Este sistema no té habilitat el SELinux"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "No està implementat establir l'atribut %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "S'ha produït un error en llegir des del fitxer: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "S'ha produït un error en cercar en el fitxer: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "S'ha produït un error en tancar el fitxer: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+"No s'ha pogut trobar el tipus de monitorització de fitxer local predeterminat"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "S'ha produït un error en escriure al fitxer: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr ""
+"S'ha produït un error en suprimir l'enllaç de còpia de seguretat antic: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "S'ha produït un error en crear la còpia de seguretat: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "S'ha produït un error en canviar el nom del fitxer temporal: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "S'ha produït un error en truncar el fitxer: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "S'ha produït un error en obrir el fitxer «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "El fitxer objectiu és un directori"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "El fitxer objectiu no és un fitxer regular"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "El fitxer ha estat modificat des d'alguna aplicació externa"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "S'ha produït un error en suprimir el fitxer vell: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "El GSeekType proporcionat no és vàlid"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "La sol·licitud de cerca és invàlida"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "No es pot truncar el GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "S'ha arribat al màxim del límit de la matriu de dades"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "El flux d'eixida de memòria no és modificable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Ha fallat el redimensionament de la memòria del flux d'eixida"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "el muntatge no implementa el desmuntatge"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "el muntatge no implementa l'expulsió"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "el muntatge no implementa el tornar-se a muntar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "el muntatge no implementa l'estimació de tipus de contingut"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "el muntatge no implementa l'estimació de tipus de contingut síncron"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "El flux d'eixida no implementa l'escriptura"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "El flux font ja està tancat"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nom"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "El nom de la icona"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "noms"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Una llista amb els noms de les icones"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "utilitza les alternatives predeterminades"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Si s'han d'utilitzar les alternatives predeterminades que es troben en "
+"escurçar el nom a «-» caràcters. Ignora els noms després del primer si es "
+"donen més múltiples noms."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "No es pot gestionar la versió %d de la codificació del GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descriptor de fitxer"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "El descriptor de fitxer del qual llegir"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Tanca el descriptor de fitxer"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Si s'ha de tancar el descriptor de fitxer quan es tanque el flux"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "S'ha produït un error en llegir des de UNIX: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "S'ha produït un error en tancar des de UNIX: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Arrel del sistema de fitxers"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "El descriptor de fitxer al qual escriure"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "S'ha produït un error en escriure a UNIX: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "el volum no implementa l'expulsió"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "No es pot trobar l'aplicació"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "S'ha produït un error en executar l'aplicació: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "No estan implementats els URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "els canvis associatius no estan implementats a win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "La creació associativa no està implementada a win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "no amaguis les entrades"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "utilitza un format de llistat llarg"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FITXER...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "S'ha produït un error en crear l'enllaç de còpia de seguretat: %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "No s'ha pogut canviar el mode del fitxer fork() ha fallat: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "No s'ha pogut canviar el mode del fitxer: waitpid() ha fallat: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "No s'ha pogut canviar el mode del fitxer: chmod() ha fallat: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "No s'ha pogut canviar el mode del fitxer: el fill ha estat finalitzat pel "
+#~ "senyal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr ""
+#~ "No s'ha pogut canviar el mode del fitxer: el fill ha finalitzat "
+#~ "anormalment"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "No se es pot fer la conversió del joc de caràcters «%s» a «%s»"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Mida incorrecta del missatge"
+
+#~ msgid "Socket error"
+#~ msgstr "Error de sòcol"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "No es permet l'ús dels indicadors de definició del canal"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..fc2c158
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,1840 @@
+# Czech translation of glib.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 the author(s) of glib.
+# Copyright (C) 2004, 2005 Miloslav Trmac <mitr@volny.cz>.
+# Copyright (C) 2006 Lukas Novotny <lukasnov@cvs.gnome.org>.
+# This file is distributed under the same license as the glib package.
+# Petr Pytelka <pyta@lightcomp.cz>, 2002.
+# Miloslav Trmac <mitr@volny.cz>, 2002, 2004, 2005.
+# Lukas Novotny <lukasnov@cvs.gnome.org>, 2006.
+# Jakub Friedl <jfriedl@suse.cz>, 2006, 2007.
+# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-05-03 18:30+0200\n"
+"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
+"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Neočekávaný atribut \"%s\" prvku \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Atribut \"%s\" prvku \"%s\" nenalezen"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Neočekávaná značka \"%s\", byla očekávána značka \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Neočekávaná značka \"%s\" v \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "V datových adresářích nebyl nalezen platný soubor záložek"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Záložka URI \"%s\" již existuje"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Nebyla nalezena záložka URI \"%s\""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "V záložce URI \"%s\" není definován žádný typ MIME"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "V záložce URI \"%s\" definován žádný soukromý příznak"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Žádné skupiny nenastaveny v záložce URI \"%s\""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Žádná aplikace s názvem \"%s\" nezaregistrovala záložku \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Nelze rozšířit řádek exec \"%s\" pomocí URI \"%s\""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Převod ze znakové sady \"%s\" do \"%s\" není podporován"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nelze otevřít převaděč z \"%s\" do \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Neplatná posloupnost bajtů na vstupu převodu"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Chyba při převodu: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Částečná posloupnost znaků na konci vstupu"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Nelze převést ukončení \"%s\" do znakové sady \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI \"%s\" není absolutní URI používající schéma \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI \"%s\" místního souboru nesmí obsahovat \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI \"%s\" je neplatné"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Název počítače v URI \"%s\" je neplatný"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI \"%s\" obsahuje nesprávně změněné znaky"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "\"%s\" není absolutní cestou"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Neplatný název počítače"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Chyba při otevírání adresáře \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nelze alokovat %lu bajtů k přečtení souboru \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Chyba čtení souboru \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Soubor \"%s\" je příliš velký"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Chyba při čtení ze souboru \"%s\": %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nelze otevřít soubor \"%s\": %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Nelze získat atributy souboru \"%s\": fstat() selhalo: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nelze otevřít soubor \"%s\": fdopen() selhalo: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Nelze přejmenovat soubor \"%s\" na \"%s\": g_rename() selhalo: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Nelze vytvořit soubor \"%s\": %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Nelze otevřít soubor \"%s\" k zápisu: fdopen() selhalo: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nelze zapisovat do souboru \"%s\": fwrite() selhalo: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nelze zapisovat do souboru \"%s\": fflush() selhalo: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nelze zapisovat do souboru \"%s\": fsync() selhalo: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nelze zavřít soubor \"%s\": fclose() selhalo: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Existující soubor \"%s\" nelze odstranit: g_unlink() selhalo: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Šablona \"%s\" je neplatná, neměla by obsahovat \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Šablona \"%s\" neobsahuje XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Nelze přečíst symbolický odkaz \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolické odkazy nejsou podporovány"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nelze otevřít převodník z \"%s\" do \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Nelze přímo číst v g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Ve vstupní vyrovnávací paměti zbyla nepřevedená data"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanál ukončen částí znaku"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Nelze přímo číst v g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nelze otevřít soubor \"%s\": open() selhalo: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nelze otevřít soubor \"%s\": mmap() selhalo: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Chyba na řádku %d, znak %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Chyba na řádku %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Nalezena prázdná entita \"&;\", platnými entitami jsou: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak \"%s\" není platný na začátku názvu entity; počátečním znakem entity je "
+"&; v případě, že nemá být entitou, je zapotřebí ho napsat jako &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak \"%s\" je v názvu entity neplatný"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Název entity \"%s\" není znám"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entita nekončí středníkem; pravděpodobně jste použili znak & bez úmyslu "
+"začít entitu - zapište prosím ligaturu et jako &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nelze zpracovat \"%-.*s\", což by mělo být číslo v odkazu na znak (například "
+"&#234) - číslo je možná příliš velké"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Odkaz na znak \"%-.*s\" nekóduje povolený znak"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Prázdný odkaz na znak. Odkaz by měl obsahovat číslice, například &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Odkaz na znak nekončí středníkem; pravděpodobně jste použili znak & bez "
+"úmyslu začít entitu - zapište prosím ligaturu et jako &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Neukončený odkaz na entitu"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Neukončený odkaz na znak"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Neplatný text v kódování UTF-8 - příliš dlouhá posloupnost"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Neplatný text v kódování UTF-8 - není počátečním znakem"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Neplatný text v kódování UTF-8 - není platné \"%s\""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument musí začínat prvkem (například: <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"\"%s\" není platný znak po znaku \"<\"; nesmí s ním začínat název prvku"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Zvláštní znak \"%s\", byl očekáván znak \">\" k ukončení značky empty-"
+"element \"%s\""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Zvláštní znak \"%s\", po názvu atributu \"%s\" prvku \"%s\" bylo očekáváno "
+"\"=\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Zvláštní znak \"%s\", bylo očekáváno \">\" nebo \"/\" k ukončení počáteční "
+"značky prvku \"%s\", nebo případně atribut; pravděpodobně jste použili "
+"neplatný znak v názvu atributu"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Zvláštní znak \"%s\", po znaku rovnítka při udávání hodnoty atributu \"%s\" "
+"prvku \"%s\" byly očekávány uvozovky"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"\"%s\" není platný znak po znacích \"</\"; znakem \"%s\" nesmí začínat název "
+"prvku"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"\"%s\" není povoleným znakem po ukončovacím názvu prvku \"%s\"; povoleným "
+"znakem je \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Prvek \"%s\" byl uzavřen, žádný prvek není momentálně otevřen"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Byl uzavřen prvek \"%s\", ale aktuálně je otevřen prvek \"%s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument je prázdný nebo obsahuje pouze mezery"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument neočekávaně skončil ihned po otevírací značce \"<\""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument neočekávaně skončil, prvky jsou stále otevřeny - poslední otevřený "
+"prvek byl \"%s\""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument neočekávaně skončil, byla očekávána uzavírací závorka značky <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument neočekávaně skončil uvnitř názvu prvku"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument neočekávaně skončil uvnitř názvu atributu"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument neočekávaně skončil ve značce otevírající prvek."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument neočekávaně skončil po znaku přiřazení následujícím za názvem "
+"atributu; chybí hodnota atributu"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument neočekávaně skončil uvnitř hodnoty atributu"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokument neočekávaně skončil uvnitř uzavírací značky prvku \"%s\""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokument neočekávaně skončil uvnitř komentáře nebo instrukce pro zpracování"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "poškozený objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "vnitřní chyba nebo poškozený objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "nedostatek paměti"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "dosažen limit zpětného vyhledávání"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "vzorek obsahuje položky nepodporované u částečného porovnávání"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "vnitřní chyba"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"zpětné odkazy coby podmínky nejsou podporované u částečného porovnávání"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "dosažen limit rekurze"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "dosažen limit pracovního prostoru prázdných dílčích řetězců"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "neplatná kombinace příznaků nového řádku"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "neznámá chyba"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ na konci vzorku"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c na konci vzorku"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "nerozpoznaný znak následuje po \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "změny velikosti písmen (\\l, \\L, \\u, \\U) zde nejsou povoleny"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "čísla v {} quantifier nejsou v pořádku"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "číslo v {} quantifier je příliš vysoké"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "schází koncový znak ] znakové třídy"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "neplatná posloupnost pro změnu ve znakové třídě"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "rozsah ve znakové třídě není v pořádku"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nic k opakování"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "nerozpoznaný znak po (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "nerozpoznaný znak před (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "nerozpoznaný znak pře (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "třídy nazvané po POSIX nejsou uvnitř třídy podporovány"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "schází koncový znak )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "znak ) bez počátečního znaku ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R či (?[+-]číslice musí být následovány znakem )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "odkaz na neexistující podřazený vzorek"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "po komentáři schází znak )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regulární výraz je příliš dlouhý"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "nelze získat paměť"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "zpětný výrok není pevné délky"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "nesprávně utvořené číslo nebo název po (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "podmínková skupina obsahuje více než dvě větve"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "po (?( očekáván výrok"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "neplatný název třídy POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "Porovnávací prvky POSIX nejsou podporovány"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "znaková hodnota v posloupnosti \\x{...} je příliš vysoká"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "neplatná podmínka (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C není dovoleno ve zpětném výroku"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekurzivní volání by se mohlo dostat do nekonečné smyčky"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "schází ukončovací člen v názvu podřazeného vzorku"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dva nazvané podřazené vzorky mají stejný název"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "chybně utvořená posloupnost \\P nebo \\p"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "neznámý název vlastnosti po \\P či \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "název podřazeného vzorku je příliš dlouhý (maximem je 32 znaků)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "příliš mnoho nazvaných podřazených vzorků (maximem je 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "osmičková hodnota je větší než \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "skupina DEFINE obsahuje více než jednu větev"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "opakování skupiny DEFINE není povoleno"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "neslučitelné volby NEWLINE"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"po \\g nenásleduje název ve složené závorce nebo nenulové číslo volitelně ve "
+"složené závorce"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "nepředpokládané opakování"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "přetečení kódu"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "přetečení přijímaných informací překládaného pracovního prostoru"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "v předchozím kroku kontrolovaný odkazovaný podřazený vzorek nenalezen"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Chyba při porovnávání regulárního výrazu %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Knihovna PCRE byla přeložena bez podpory UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Knihovna PCRE byla přeložena bez podpory vlastností UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Chyba při kompilaci regulárního výrazu %s na znaku %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Chyba při optimalizaci regulárního výrazu %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "očekáváno číslo nebo \"}\""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "očekáváno šestnáctkové číslo"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "v symbolickém odkazu chybí \"<\""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "neukončený symbolický odkaz"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "symbolický odkaz o nulové délce"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "očekáváno číslo"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "nedovolený symbolický odkaz"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "osamocené koncové \"\\\""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "neznámá posloupnost pro změnu"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Chyba při analyzování náhradního textu \"%s\" na znaku %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Text v uvozovkách nezačíná uvozovkami"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Nenalezena uzavírací uvozovka v příkazovém řádku nebo jiném uvozeném textu"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Text skončil právě za znakem \"\\\". (Text zněl \"%s\")"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Text skončil před nalezením odpovídajících uvozovek znakem %c. (Text zněl \"%"
+"s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Text je prázdný (nebo obsahuje pouze mezery)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nelze číst data z procesu potomka"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Nelze vytvořit rouru ke komunikaci s procesem potomka (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nelze číst z roury potomka (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nelze přejít do adresáře \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nelze spustit proces potomka (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Neplatný název programu: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Neplatný řetězec v poli argumentů v %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Neplatný řetězec v prostředí: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Neplatný aktuální adresář: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nelze spustit pomocný program (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Neočekávaná chyba v g_io_channel_win32_poll() při čtení dat z procesu potomka"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nelze číst data z procesu potomka (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Neočekávaná chyba v select() při čtení dat z procesu potomka (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Neočekávaná chyba v waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Nelze rozvětvit (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nelze spustit proces potomka \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nelze přesměrovat vstup nebo výstup procesu potomka (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nelze rozvětvit proces potomka (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Neznámá chyba při běhu procesu potomka \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Nelze přečíst dostatek dat z roury pid potomka (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak je mimo rozsah UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Neplatná posloupnost na vstupu převodu"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak je mimo rozsah UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Použití:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[PŘEPÍNAČ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Přepínače nápovědy:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Zobrazí přepínače nápovědy"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Zobrazí všechny přepínače nápovědy"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Přepínače aplikace:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Nelze zpracovat celočíselnou hodnotu \"%s\" u %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Celočíselná hodnota \"%s\" u %s mimo rozsah"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nelze zpracovat celočíselnou (double) hodnotu \"%s\" u %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Celočíselná (double) hodnota \"%s\" u %s mimo rozsah"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Chyba volby %s při syntaktické analýze"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Chybí parametr %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Neznámý přepínač %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "V adresářích hledání nelze najít platný soubor klíče"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Není obyčejným souborem"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Soubor je prázdný"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Soubor klíče obsahuje \"%s\", což není dvojice klíč-hodnota, skupina ani "
+"komentář"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Neplatný název skupiny: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Soubor klíče nezačíná skupinou"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Neplatný název klíče: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Soubor klíče obsahuje nepodporované kódování \"%s\""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Soubor klíče nemá skupinu \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Soubor klíče nemá klíč \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Soubor klíče obsahuje klíč \"%s\" s hodnotou \"%s\", která není v UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Soubor klíče obsahuje klíč \"%s\", který má neinterpretovatelnou hodnotu."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Soubor klíče obsahuje klíč \"%s\" ve skupině \"%s\", který má "
+"neinterpretovatelnou hodnotu."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Soubor klíče nemá klíč \"%s\" ve skupině \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Soubor klíče obsahuje na konci řádku znak změny"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Soubor klíče obsahuje neplatnou posloupnost pro změnu \"%s\""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Hodnotu \"%s\" nelze interpretovat jako číslo."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Celočíselná hodnota \"%s\" mimo rozsah"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Hodnotu \"%s\" nelze interpretovat jako reálné (float) číslo."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Hodnotu \"%s\" nelze interpretovat jako booleovskou hodnotu."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s poskytnut příliš vysoký počet"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Proud je již uzavřen"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operace byla zrušena"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Neznámý typ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "typ souboru %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "typ %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Neočekávaný časný konec proudu"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Bez názvu"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "V souboru desktop nezadáno pole Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Nelze nalézt terminál vyžadovaný pro aplikaci"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Nelze vytvořit uživatelskou konfigurační složku aplikace %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Nelze vytvořit uživatelskou konfigurační složku MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Nelze vytvořit uživatelský soubor desktop %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Vlastní definice %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "mechanika neprovádí vysouvání"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "mechanika neprovádí dotazování na média"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Nelze zpracovat verzi %d kódování GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Chybný počet tokenů (%d) v kódování GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Nelze zpracovat verzi %d kódování GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Chybný počet tokenů (%d) v kódování GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Očekáváno GEmblem u GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operace není podporována"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Obsahující připojené neexistuje"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Nelze kopírovat nad adresář"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Nelze kopírovat adresář nad adresář"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Cílový soubor existuje"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Adresář nelze kopírovat rekurzivně"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Nelze kopírovat zvláštní soubor"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Zadaný symbolický odkaz je neplatný"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Zahozené není podporováno"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Názvy souborů nemohou obsahovat \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "svazek neprovádí připojení"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Žádná aplikace není zaregistrována k obsluze tohoto souboru"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator je uzavřen"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Souborový enumerator má nevykonanou operaci"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Souborový enumerator je již uzavřen"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "soubor"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Soubor obsahující ikonu"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Nelze zpracovat verzi %d kódování GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Chybná vstupní data u GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Proud nepodporuje query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Hledání není v proudu podporováno"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Zkrácení nepodporováno ve vstupním proudu"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Zkrácení není v proudu podporováno"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Chybný počet tokenů (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Název třídy %s nemá typ"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Typ %s neimplementuje rozhraní GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Typ %s není mezi třídami"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Chybné číslo verze: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Typ %s neimplementuje from_tokens() v rozhraní GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Nelze zpracovat poskytnutou verzi kódování ikony"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Vstupní proud neprovádí čtení"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Proud má otevřenou operaci"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Nelze nalézt výchozí typ sledování místního adresáře"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Neplatný název souboru %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Chyba při získávání informace o systému souborů: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Nelze přejmenovat kořenový adresář"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Chyba při přejmenovávání souboru: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Soubor nelze přejmenovat, název souboru již existuje"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Neplatný název souboru"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Chyba při otevírání souboru: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Nelze otevřít adresář"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Chyba při odstraňování souboru: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Chyba při zahazování souboru: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Nelze vytvořit adresář koše %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Ke koši nelze nalézt adresář nejvyšší úrovně"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Nelze nalézt nebo vytvořit adresář koše"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Nelze vytvořit informační soubor o zahozeném: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Nelze zahodit soubor: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Chyba při vytváření adresáře: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Chyba při vytváření symbolického odkazu: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Chyba při přesunování souboru: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Adresář nelze přesunout nad adresář"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Vytvoření záložního souboru selhalo"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Chyba při odstraňování cílového souboru: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Přesunování mezi připojeními není podporováno"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Hodnota atributu nesmí být prázdná"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Neplatný typ atributu (očekáván řetězec)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Neplatný název rozšířeného atributu"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Chyba při nastavování rozšířeného atributu \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Chyba při prohledávání souboru \"%s\" s fstat(): %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (neplatné kódování)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Chyba při prohledávání popisovače souboru s fstat(): %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Neplatný typ atributu (očekáván uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Neplatný typ atributu (očekáván uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Neplatný typ atributu (očekáván bajtový řetězec)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Chyba při nastavování oprávnění: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Chyba při nastavování vlastníka: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolický odkaz nesmí být prázdný"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Chyba při nastavování symbolického odkazu: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Chyba při nastavování symbolického odkazu: soubor není symbolickým odkazem"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Kontext SELinux nesmí být prázdný"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Chyba při nastavování kontextu SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "V tomto systému není SELinux povolen"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Nastavení atributu %s není podporováno"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Chyba při čtení ze souboru: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Chyba při hledání v souboru: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Chyba při zavírání souboru: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Nelze nalézt výchozí typ sledování místního souboru"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Chyba při zápisu do souboru: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Chyba při odstraňování starého záložního odkazu: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Chyba při vytváření záložní kopie: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Chyba při přejmenovávání dočasného souboru: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Chyba při zkracování souboru: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Chyba při otevírání souboru \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Cílový soubor je adresářem"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Cílový soubor není obyčejným souborem"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Soubor byl externě pozměněn"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Chyba při odstraňování starého souboru: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Poskytnut neplatný GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Neplatný požadavek na hledání"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Nelze zkrátit GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Dosažen maximální limit datového pole"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Nelze měnit velikost výstupního proudu paměti"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Nelze změnit velikost výstupního proudu paměti"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "připojené neprovádí odpojení"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "připojené neprovádí vysouvání"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "připojené neprovádí opakované připojení"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "připojené neprovádí odhad typu obsahu"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "připojené neprovádí synchronní odhad typu obsahu"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Výstupní proud neprovádí zápis"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Zdrojový proud je již ukončen"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "název"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Název ikony"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "názvy"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Pole obsahující názvy ikon"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "použít výchozí zálohy"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Zda používat výchozí zálohy nalezené zkrácením názvu u znaků \"-\". Je-li "
+"zadáno více názvů, ignorují se názvy po prvním zadaném."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Nelze zpracovat verzi %d kódování GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Popisovač souboru"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Popisovač souboru, ze kterého se má číst"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Zavřít popisovač souboru"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Zda zavřít popisovač souboru, je-li proud uzavřen"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Chyba při čtení z datového proudu Unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Chyba při zavírání datového proudu Unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Kořen systému souborů"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Popisovač souboru, do kterého se má zapisovat"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Chyba při zápisu do datového proudu Unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "svazek neprovádí vysouvání"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Nelze nalézt aplikaci"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Chyba při spouštění aplikace: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI nejsou podporovány"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "změny asociací nepodporovány na Win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Vytváření asociací nepodporováno na Win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "neskrývat položky"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "použít dlouhý formát výpisu"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[SOUBOR...]"
diff --git a/po/cy.po b/po/cy.po
new file mode 100644
index 0000000..1a07e47
--- /dev/null
+++ b/po/cy.po
@@ -0,0 +1,1880 @@
+# glib yn Gymraeg.
+# This file is distributed under the same license as the libgnome package.
+# Kyfieithu (http://www.kyfieithu.co.uk), 2003.
+# Dafydd Harries <daf@parnassus.ath.cx>, 2003 2004.
+# Rhys Jones <rhys@sucs.org>, 2003-2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-06-29 19:38+0100\n"
+"Last-Translator: Rhys Jones <rhys@sucs.org>\n"
+"Language-Team: Welsh <gnome-cy@pengwyn.linux.org.uk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Priodwedd annisgwyl '%s' i'r elfen '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Priodwedd '%s' o elfen '%s' heb ei chanfod"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Tag annisgwyl '%s'; disgwyliwyd y tag '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Tag annisgwyl '%s' o fewn '%s'"
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "Ni ddarganfuwyd ffeil llyfrnodau ddilys yn y cyfeiriaduron data"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Llyfrnod ar gyfer yr URI '%s' yn bodoli eisoes"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Dim llyfrnod wedi ei ganfod ar gyfer yr URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Dim math MIME wedi'i ddiffinio yn y llyfrnod ar gyfer yr URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Dim baner breifat wedi'i diffinio yn y llyfrnod ar gyfer yr URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Dim grwpiau wedi'u gosod yn y llyfrnod ar gyfer yr URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Does dim un rhaglen o'r enw '%s' wedi cofrestru llyfrnod ar gyfer '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Methwyd darllen y cyswllt symbolaidd '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Ni chynhelir trawsnewidiad o set nodau '%s' i '%s'"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Methwyd agor trawsnewidydd rhwng '%s' a '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Dilyniant beit annilys ym mewnbwn trawsnewid"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Gwall wrth drawsnewid: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Dilyniant nod rhannol ar ddiwedd y mewnbwn"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Methu trawsnewid '%s' wrth gefn i'r set godau '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Nid yw'r LAU '%s' yn LAU absoliwt yn y cynllun \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Ni chaniateir i'r LAU ffeil lleol '%s' gynnwys '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Mae'r LAU '%s' yn annilys"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Mae'r enw gwesteiwr yn y LAU '%s' yn annilys"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Mae'r LAU '%s' yn cynnwys nodau wedi eu dianc mewn modd annilys"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Nid yw'r llwybr '%s' yn llwybr gosodedig"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Enw gwesteiwr annilys"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Gwall y cyfeiriadur '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Methwyd canfod %lu beit er mwyn darllen y ffeil \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Methwyd darllen o'r ffeil '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Methwyd agor y ffeil '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Methwyd darllen agweddau ffeil '%s': methiant fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Methwyd agor y ffeil '%s': methiant yn fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Methwyd ail-enwi'r ffeil'%s' i '%s': methodd g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Methwyd creu'r ffeil '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Methu agor y ffeil '%s' er mwyn ysgrifennu iddi: methodd fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Methwyd ysgrifennu i'r ffeil '%s': methodd fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Methwyd ysgrifennu i'r ffeil '%s': methodd fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Methwyd ysgrifennu i'r ffeil '%s': methodd fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Methwyd cau'r ffeil '%s': methodd fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Methu tynnu'r ffeil '%s' oedd eisoes yn bodoli: methodd g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Mae'r patrymlun '%s' yn annilys: ni ddylai gynnwys '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Nid yw'r patrymlun '%s' yn cynnwys XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Methwyd darllen y cyswllt symbolaidd '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Ni chynhelir cysylltion symbolaidd"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Methwyd agor trawsnewidydd o '%s' i '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Methu gwneud darlleniad crau yn g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Data dros ben heb ei drawsnewid yn y byffer ddarllen"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Mae'r sianel yn gorffen a nod rhannol"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Methu gwneud darlleniad crai yn g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Methwyd agor y ffeil '%s': methodd open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Methwyd mapio'r ffeil '%s': methodd mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Gwall ar linell %d golofn %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Gwall ar linell %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Gwelwyd endid gwag '&;'; mae &amp; &quot; &lt; &gt; a &apos; yn endidau dilys"
+
+# c-format
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Mae'r nod '%s' yn annilys ar ddechrau endid; mae'r nod & yn dechrau endid; "
+"os nad yw'r & yma i fod yn endid, defnyddiwch &amp; yn ei le"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Nid yw'r nod '%s' yn ddilys o fewn enw endid"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Mae'r enw endid '%s' yn anhysbys"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Ni orffennwyd yr endid gyda hanner-colon - mwy na thebyg y defnyddiwyd "
+"ampersand heb fwriadu dechrau endid - dylid defnyddio &amp; yn lle"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Methwyd adnabod '%-.*s', a ddylai fod yn ddigid o fewn cyfeiriant nod "
+"(&#234; er enghraifft) - hwyrach fod y digid yn rhy fawr"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Nid yw'r cyfeiriant nod '%-.*s' yn amgodio nod a ganiateir"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Cyfeiriant nod gwag; dylai gynnwys digid megis &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Ni orffennwyd cyfeiriant nod gyda hanner-colon - mwy na thebyg y defnyddiwyd "
+"ampersand heb fwriadu dechrau endid - dylid defnyddio &amp; yn lle"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Cyfeiriant endid heb ei orffen"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Cyfeiriant nod heb ei orffen"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Testun annilys wedi ei amgodio fel UTF-8"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Testun annilys wedi ei amgodio fel UTF-8"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Testun annilys wedi ei amgodio fel UTF-8"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Rhaid i'r ddogfen ddechrau gydag elfen (e.e. <llyfr>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Nid yw '%s' yn nod dilys yn dilyn '<'; nid yw'n gallu dechrau enw elfen"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "Nod od '%s', disgwyliwyd '>' er mwyn gorffen tag dechrau'r elfen '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Nod od '%s', disgwyliwyd '=' ar ôl yr enw priodoledd '%s' o'r elfen '%s'"
+
+# c-format
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Nod od '%s', disgwyliwyd '>' neu '/' er mwyn gorffen tag dechrau'r elfen '%"
+"s', neu briodoledd ddewisol; efallai defnyddiwyd nod annilys mewn enw "
+"priodoledd"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Nod od '%s', disgwyliwyd dyfynnod agored ar ôl y '=' wrth roi gwerth i'r "
+"priodoledd '%s' o'r elfen '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Nid yw '%s' yn nod ddilys yn dilyn y nodau '</'; nid yw '%s' yn gallu "
+"dechrau enw elfen."
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Nid yw '%s' yn nod ddilys yn dilyn y nodau '</'; nid yw '%s' yn gallu "
+"dechrau enw elfen."
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Cafodd yr elfen '%s' ei gau, nid oes elfen ar agor ar hyn o bryd"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Cafodd yr elfen '%s' ei gau, ond yr elfen sydd ar agor ar hyn o bryd yw '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Roedd y ddogfen yn wag neu'n cynnwys gofod yn unig"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Gorffennodd y ddogfen yn annisgwyl ar ôl '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Gorffennodd y ddogfen yn annisgwyl tra roedd elfennau ar agor - '%s' oedd yr "
+"elfen ddiwethaf a agorwyd"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Gorffennodd y ddogfen yn annisgwyl, disgwyliwyd ongl-fraced caeedig i "
+"ddiweddu'r tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Gorffennodd y ddogfen yn annisgwyl y tu fewn i enw elfen"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Gorffennodd y ddogfen yn annisgwyl y tu fewn i enw priodoledd"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Gorffennodd y ddogfen yn annisgwyl y tu fewn i dag agor elfen"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Gorffennodd y ddogfen yn annisgwyl ar ôl yr hafalnod yn dilyn enw "
+"priodoledd; dim gwerth priodoledd"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Gorffennodd y ddogfen yn annisgwyl y tu fewn i werth priodoledd"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Gorffennodd y ddogfen yn annisgwyl y tu fewn i dag cau'r elfen '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Gorffennodd y ddogfen yn annisgwyl y tu fewn i sylw neu gyfarwyddiad brosesu"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Mae'r sianel yn gorffen a nod rhannol"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Dilyniant beit annilys ym mewnbwn trawsnewid"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Cyfeiriant nod heb ei orffen"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Cyfeiriant nod heb ei orffen"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Cyfeiriant nod heb ei orffen"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Ni chynhelir cysylltion symbolaidd"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Gwall ar linell %d golofn %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Cyfeiriant endid heb ei orffen"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Nid yw'r testun dyfynedig yn dechrau gyda dyfynnod"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Dyfynnod heb ei gydweddu mewn llinell orchymyn neu destun arall wedi ei "
+"gragen-ddyfynnu"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Gorffennodd y testun ar ôl '\\'. ('%s' oedd y testun.)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Gorffennodd y testun cyn y darganfuwyd dyfynnod i gydweddu %c. ('%s' oedd y "
+"testun.)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Roedd y testun yn wag, neu'n cynnwys gofodnodau'n unig"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Methwyd darllen data o broses plentyn"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Methwyd creu pibell er mwyn cyfathrebu â phroses plentyn (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Methwyd darllen o bibell plentyn (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Methwyd newid i'r cyfeiriadur '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Methwyd gweithredu proses plentyn (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Enw rhaglen annilys: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Arg ar goll yn y fector argiau yn %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Llinyn annilys yn yr amgylchedd: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Cyfeiriadur gweithio annilys: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Methwyd gweithredu proses cymorth (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Gwall annisgwyl yn g_io_channel_win32_poll() wrth ddarllen data o broses "
+"plentyn"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Methwyd darllen data o broses plentyn (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Gwall annisgwyl yn select() wrth ddarllen o broses plentyn (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Gwall annisgwyl yn waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Methwyd fforcio (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Methwyd gweithredu proses plentyn \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Methwyd ailgyrchu mewnbwn neu allbwn proses blentyn (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Methwyd fforcio proses plentyn (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Gwall anhysbys wrth weithredu proses blentyn \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Methwyd darllen digon o ddata o bibell plentyn (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Nod y tu allan i ystod ddilys UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Dilyniant annilys ym mewnbwn trawsnewidiad"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Nod y tu allan i ystod ddilys UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Defnydd:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPSIWN...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Cymorth Opsiynau:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Dangos opsiynau cymorth"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Dangos bob opsiwn cymorth"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opsiynau Rhaglen:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Methu gramadegu'r gwerth cyfanrif '%s' ar gyfer %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Mae'r gwerth cyfanrif '%s' ar gyfer %s y tu allan i'r cwmpas"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Methu gramadegu'r gwerth dwbl '%s' ar gyfer %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Mae'r gwerth dwbl '%s' ar gyfer %s y tu allan i'r cwmpas"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Gwall wrth ramadegu opsiwn %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Arg ar goll ar gyfer %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opsiwn anhysbys %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "Ni ddarganfuwyd ffeil allwedd ddilys yn y cyfeiriaduron data"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ddim yn ffeil cyffredin"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Ffeil yn wag"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Ffeil allwedd yn cynnwys y llinell '%s' sydd ddim yn bâr allwedd-gwerth, "
+"na'n grŵp, na'n sylw"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Enw rhaglen annilys: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Nid yw'r ffeil allwedd yn dechrau gyda grŵp"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Enw rhaglen annilys: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Ffeil allwedd yn cynnwys yr amgodiad '%s', na gynhelir"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Nid oes gan y ffeil allwedd y grŵp '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Ffeil allwedd heb fod yn cynnwys yr allwedd '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Ffeil allwedd yn cynnwys yr allwedd '%s' gyda'r gwerth '%s' nad yw'n UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Ffeil allwedd yn cynnwys yr allwedd '%s' sydd â gwerth na ellir ei ddirnad."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Ffeil allwedd yn cynnwys yr allwedd '%s' yng ngrŵp '%s' sydd â gwerth na "
+"ellir ei ddirnad."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Ffeil allwedd heb fod ganddi'r allwedd '%s' yn y grŵp '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Ffeil allwedd yn cynnwys nod dianc ar ddiwedd llinell"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Ffeil allwedd yn cynnwys '%s', sy'n ddilyniant dianc annilys"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Ni ellir darllen y gwerth '%s' fel rhif."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Gwerth cyfanrif '%s' y tu allan i'r ystod"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Ni ellir darllen y gwerth '%s' fel rhif arnawf."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Ni ellir darllen '%s' fel gwerth Boole."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Opsiwn anhysbys %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Ni chynhelir cysylltion symbolaidd"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Ni chynhelir cysylltion symbolaidd"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "Does dim un rhaglen o'r enw '%s' wedi cofrestru llyfrnod ar gyfer '%s'"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Mae'r enw gwesteiwr yn y LAU '%s' yn annilys"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Enw rhaglen annilys: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Enw gwesteiwr annilys"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Methwyd creu'r ffeil '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Methwyd creu'r ffeil '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Methwyd creu'r ffeil '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Gwall y cyfeiriadur '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Gwall wrth ramadegu opsiwn %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Gorffennodd y ddogfen yn annisgwyl y tu fewn i enw priodoledd"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Gwall y cyfeiriadur '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Gwall wrth drawsnewid: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Gwall wrth drawsnewid: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Gwall ar linell %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Gwall wrth drawsnewid: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Ni chynhelir cysylltion symbolaidd"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Gwall wrth ramadegu opsiwn %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Ddim yn ffeil cyffredin"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Enw rhaglen annilys: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Mae'r enw gwesteiwr yn y LAU '%s' yn annilys"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Gwall wrth ddarllen ffeil '%s': %s "
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Gwall ar linell %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Gwall wrth ramadegu opsiwn %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Gwall wrth ramadegu opsiwn %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Ni chynhelir cysylltion symbolaidd"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPSIWN...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Gwall wrth ramadegu opsiwn %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Methu newid modd ffeil: methodd fork(): %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Methu newid modd ffeil: methodd waitpid(): %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Methu newid modd ffeil: methodd chmod(): %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Methu newid modd ffeil: Plentyn wedi'i derfynu gan signal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Methu newid modd ffeil: Plentyn wedi'i derfynu'n anarferol"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Ni chynhelir trawsnewid o'r set nodau `%s' i `%s'"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Maint neges anghywir"
+
+#~ msgid "Socket error"
+#~ msgstr "Gwall soced"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..6f9056e
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,1892 @@
+# Danish translation of glib.
+# Copyright (C) 2001-2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+#
+# Keld Simonsen <keld@dkuug.dk>, 2001.
+# Kjartan Maraas <kmaraas@gnome.org>, 2001.
+# Ole Laursen <olau@hardworking.dk>, 2002 - 2003.
+# Martin Willemoes Hansen <mwh@sysrq.dk>, 2004 - 2005
+# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 08, 09
+#
+# Konventioner:
+#
+#   attribute -> egenskab
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-04-09 13:36+0200\n"
+"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Uventet egenskab \"%s\" for elementet \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Egenskaben \"%s\" for elementet \"%s\" blev ikke fundet"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Uventet mærke \"%s\", forventede mærket \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Uventet mærke \"%s\" inden i \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Ingen gyldig bogmærkefil blev fundet i datakatalogerne"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Et bogmærke for URI'en \"%s\" findes allerede"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Der blev intet bogmærke fundet for URI'en \"%s\""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Ingen MIME-type er defineret i bogmærket for URI'en \"%s\""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Intet privat flag er defineret i bogmærket for URI'en \"%s\""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Ingen grupper er sat i bogmærket for URI'en \"%s\""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Intet program med navnet \"%s\" har registreret et bogmærke for \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Kunne ikke udvide eksekveringslinjen \"%s\" med URI'en \"%s\""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konvertering fra tegnsæt \"%s\" til \"%s\" er ikke understøttet"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Kunne ikke konvertere fra \"%s\" til \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ugyldig bytesekvens i konverteringsinddata"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Fejl under konvertering: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Delvis tegnsekvens ved slutningen af inddata"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Kan ikke konvertere tilbagefaldet \"%s\" til tegnsæt \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI'en \"%s\" er ikke en absolut URI, ved brug af \"fil\"-metoden"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Den lokale fil-URI \"%s\" må ikke indeholde en \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI'en \"%s\" er ugyldig"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Værtsnavnet for URI'en \"%s\" er ugyldig"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI'en \"%s\" indeholder ugyldigt beskyttede tegn"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Stinavnet \"%s\" er ikke en absolut sti"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ugyldigt værtsnavn"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Fejl ved åbning af mappen \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Kunne ikke allokere %lu byte til at læse filen \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Fejl ved læsning af filen \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Filen \"%s\" er for stor"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Kunne ikke læse fra filen \"%s\": %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Kunne ikke åbne filen \"%s\": %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Kunne ikke læse egenskaber for filen \"%s\": fstat() mislykkedes: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Kunne ikke åbne filen \"%s\": fdopen() mislykkedes: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Kunne ikke omdøbe filen \"%s\" til \"%s\": g_rename() mislykkedes: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Fejl under oprettelse af filen \"%s\": %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Kunne ikke åbne filen \"%s\" til skrivning: fdopen() mislykkedes: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Kunne ikke skrive filen \"%s\": fwrite() mislykkedes: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Kunne ikke skrive filen \"%s\": fflush() mislykkedes: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Kunne ikke skrive filen \"%s\": fsync() mislykkedes: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Kunne ikke lukke filen \"%s\": fclose() mislykkedes: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Den eksisterende fil \"%s\" kunne ikke fjernes: g_unlink() mislykkedes: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Skabelonen \"%s\" er ugyldig, må ikke indeholde en \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Skabelonen \"%s\" indeholder ikke XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Kunne ikke læse den symbolske henvisning \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolske henvisninger er ikke understøttet"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Kunne ikke åbne konverterer fra \"%s\" til \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Kan ikke foretage en rå læsning i g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Resterende ukonverterede data i læsemellemlager"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal afslutter med et ufuldendt tegn"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Kan ikke foretage en rå læsning i g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Kunne ikke åbne filen \"%s\": open() mislykkedes: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Kunne ikke kortlægge filen \"%s\": mmap() mislykkedes: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Fejl på linje %d tegn %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Fejl på linje %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Tom entitet \"&;\" fundet; gyldige entiteter er: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Tegnet \"%s\" er ikke gyldigt ved starten af et entitetnavn; &-tegnet "
+"starter en entitet; hvis dette og-tegn ikke er beregnet på at være en "
+"entitet, så undgå dette ved at bruge &amp; i stedet"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Tegnet \"%s\" er ikke gyldigt inde i et entitetsnavn"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entitetsnavnet \"%s\" er ikke kendt"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteten sluttede ikke med et semikolon; du har sandsynligvis brugt et og-"
+"tegn uden at det var beregnet på at starte en entitet - dette undgås ved at "
+"bruge &amp; i stedet"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Fejl ved fortolkning af \"%-.*s\" som skulle have været et ciffer i en "
+"tegnreference (&#234; for eksempel) - måske er cifret for stort"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Tegnreferencen \"%-.*s\" koder ikke et tilladt tegn"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tom tegnreference; skulle indeholde et tal såsom &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Tegnreferencen sluttede ikke med et semikolon; du har sandsynligvis brugt et "
+"og-tegn uden at det var beregnet på at starte en entitet - undgå dette ved "
+"at bruge &amp; i stedet"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Ufærdig entitetsreference"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Ufærdig tegnreference"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ugyldig UTF-8-kodet tekst - for lang sekvens"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ugyldig UTF-8-kodet tekst - ikke et starttegn"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ugyldig UTF-8-kodet tekst - ikke gyldig \"%s\""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentet skal begynde med et element (f.eks <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"\"%s\" er ikke et gyldigt tegn efter et \"<\"-tegn; det kan ikke være "
+"begyndelsen på et elementnavn"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Mærkeligt tegn \"%s\", forventede et \">\"-tegn for at afslutte det tomme "
+"elementmærke \"%s\""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Mærkeligt tegn \"%s\", forventede et \"=\" efter egenskabsnavn \"%s\" for "
+"elementet \"%s\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Mærkeligt tegn \"%s\", forventede tegnet \">\" eller \"/\" for at afslutte "
+"begyndelsesmærket til elementet \"%s\" eller alternativt en egenskab; måske "
+"brugte du et ugyldigt tegn i egenskabsnavnet"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Mærkeligt tegn \"%s\", forventede et åbningsanførselstegn efter "
+"lighedstegnet når værdien for egenskaben \"%s\" for elementet \"%s\" angives"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"\"%s\" er ikke et gyldigt tegn efter tegnene \"</\"; \"%s\" er måske ikke "
+"begyndelsen på et elementnavn"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"\"%s\" er ikke et gyldigt tegn efter det lukkende elementnavn \"%s\"; "
+"tilladt tegn er \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element \"%s\" blev lukket, ingen åbne elementer nu"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element \"%s\" blev lukket, men aktivt åbent element er \"%s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumentet var tomt eller indeholdt kun blanke tegn"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumentet sluttede uventet lige efter en åben vinkelparantes \"<\""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumentet sluttede uventet med åbne elementer - \"%s\" var sidste åbne "
+"element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumentet sluttede uventet, forventede at se en vinkelparantes for at "
+"afslutte det sidste mærke <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumentet sluttede uventet inden i et elementnavn"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumentet sluttede uventet inden i et egenskabsnavn"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumentet sluttede uventet inden i et element-åbnende mærke."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumentet sluttede uventet efter lighedstegnet efter et egenskabsnavn; "
+"ingen egenskabsværdi"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumentet sluttede uventet inden i en egenskabsværdi"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Dokumentet sluttede uventet inden i lukningsmærket for elementet \"%s\""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumentet sluttede uventet inden i en kommentar eller behandlingsinstruktion"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ødelagt objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "intern fejl eller ødelagt objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "utilstrækkelig hukommelse"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "grænse for bagudlæsning nået"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"mønsteret indeholder elementer der ikke understøttes i forbindelse med "
+"partiel træfning"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "intern fejl"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"baglæns referencer som betingelser understøttes ikke i forbindelse med "
+"partiel træfning"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "rekursionsgrænse nået"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "arbejdsområdets grænse for tomme delstrenge er blevet nået"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ugyldig kombination af linjeskift-flag"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ukendt fejl"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ sidst i mønster"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c sidst i mønster"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ukendt tegn følger \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"versal-ændrende undvigesekvenser (\\l, \\L, \\u, \\U) er ikke tilladt her"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "tal er ude af rækkefølge i {}-kvantor"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "for stort tal i {}-kvantor"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "manglende afsluttende ] for tegnklasse"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ugyldig undvigesekvens i tegnklasse"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "følgen er ikke ordnet i tegnklassen"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "intet at gentage"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "ukendt tegn efter (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "ukendt tegn efter (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "ukendt tegn efter (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX-navngivne klasser understøttes kun inden i en klasse"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "manglende afsluttende )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") uden åbnende ("
+
+# Gad vide hvad kommentaren betyder
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R eller (?[+-]cifre skal efterfølges af )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "reference til ikke-eksisterende undermønster"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "manglende ) efter kommentar"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regulært udtryk for stort"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "kunne ikke hente hukommelse"
+
+# ???
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind-assert-erklæring har ikke fast længde"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "fejlformet tal eller navn efter (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "betinget gruppe indeholder mere end to grene"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assert-erklæring forventet efter (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ukendt POSIX-klassenavn"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-arrangerende elementer understøttes ikke"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "tegnværdi i \\x{..}-sekvens er for stor"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ugyldig betingelse (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C ikke tillad i lookbehind-assert-erklæring"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursive kald kan danne uendelig løkke"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "manglende terminator i undermønsters navn"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "to navngivne undermønstre har samme navn"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "fejlformet \\P- eller \\p-sekvens"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "ukendt egenskabsnavn efter \\P eller \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "undermønsters navn er for langt (maksimal 32 tegn)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "for mange navngivne undermønstre (maksimalt 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "oktal værdi er større end \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-gruppe indeholder mere end én gren"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "gentagelse af en DEFINE-gruppe er ikke tilladt"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inkonsistente NEWLINE-indstillinger"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g følges ikke af et navn indeholdt i klammer eller et tal forskelligt fra "
+"nul eventuelt indeholdt i klammer"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "uventet gentagelse"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kodeoverløb"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overløb kompileringsarbejdspladsen"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "tidligere kontrolleret, refereret undermønster blev ikke fundet"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Fejl under søgning med det regulære udtryk %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-biblioteket er kompileret uden UTF8-understøttelse"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE-biblioteket er kompileret uden understøttelse af UTF8-egenskaber"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Fejl under kompilering af det regulære udtryk %s ved tegn %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Fejl under optimering af det regulære udtryk %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimalt ciffer eller \"}\" forventet"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimalt ciffer forventet"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "manglende \"<\" i symbolsk reference"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "ufærdig symbolsk reference"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "symbolsk reference med længde nul"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "ciffer forventet"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ugyldig symbolsk reference"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "løst afsluttende \"\\\""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ukendt undvigesekvens"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Fejl under fortolkning af erstatningstekst \"%s\" ved tegn %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Anført tekst begynder ikke med anførselstegn"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Uafbalanceret anførselstegn i kommandolinje eller anden skal-anført tekst"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst sluttede lige efter et \"\\\"-tegn. (Teksten var \"%s\")"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Tekst sluttede før tilsvarende anførselstegn blev fundet for %c (teksten var "
+"\"%s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekst var tom (eller indeholdt kun blanke tegn)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Fejl under læsning af data fra underprocess"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Fejl under oprettelse af kommunikationskanal til underproces (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Fejl under læsning fra barnedatakanal (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Fejl ved skift til mappen \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Fejl under kørsel af underprocess (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ugyldigt programnavn: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Ugyldig streng i argumentvektor på %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ugyldig streng i miljø: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ugyldigt arbejdskatalog: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Fejl under kørsel af hjælpeprogram (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Uventet fejl i g_io_channel_win32_poll() under læsning af data fra en "
+"underprocess"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Fejl ved læsning af data fra underprocess (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Uventet fejl i select() ved læsning af data fra underprocess (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Uventet fejl i waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Fejl under fraspaltning af proces (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Fejl under kørsel af underprocessen \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Fejl under omdirigering af uddata eller inddata for underprocess (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Fejl ved fraspaltning af underprocess (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ukendt fejl under kørsel af underprocessen \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Kunne ikke læse tilstrækkelig mængde data fra underprocessens pid-kanal (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Tegn uden for gyldigt interval for UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ugyldig sekvens i konverteringsinddata"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Tegn uden for gyldigt interval for UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Brug:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[TILVALG...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Flag for hjælp:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Vis flag for hjælp"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Vis alle flag for hjælp"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Flag for programmet:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Kan ikke fortolke heltalsværdien \"%s\" for %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Heltalsværdien \"%s\" for %s er ikke i gyldigt interval"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Kan ikke fortolke double-værdien \"%s\" for %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Double-værdien \"%s\" for %s er ikke i gyldigt interval"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Kunne ikke fortolke tilvalg %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Mangler argument for %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Ukendt flag %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Gyldig nøglefil blev ikke fundet i søgekatalogerne"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ikke en almindelig fil"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Filen er tom"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Nøglefilen indeholder linjen \"%s\" hvilken ikke er et nøgle-værdi-par, en "
+"gruppe eller en kommentar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ugyldigt gruppenavn: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Nøglefilen starter ikke med en gruppe"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ugyldigt nøglenavn: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Nøglefilen indeholder kodningen \"%s\" der ikke er understøttet"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Nøglefilen indeholder ikke gruppen \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Nøglefilen indeholder ikke nøglen \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Nøglefilen indeholder nøglen \"%s\" med værdien \"%s\" der ikke er UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Nøglefilen indeholder nøglen \"%s\" som har en værdi der ikke kan fortolkes."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Nøglefilen indeholder nøglen \"%s\" i gruppen \"%s\" som har en værdi der "
+"ikke kan fortolkes."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Nøglefilen har ikke nøglen \"%s\" i gruppen \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Nøglefilen indeholder beskyttede tegn for enden af linjen"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Nøglefilen indeholder en ugyldig undvigesekvens \"%s\""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Værdien \"%s\" kan ikke fortolkes som et nummer."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Heltalsværdien \"%s\" er ikke i gyldigt interval"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Værdien \"%s\" kan ikke fortolkes som en float."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Værdien \"%s\" kan ikke fortolkes som en sandhedsværdi."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "For stor talværdi givet til %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Strømmen er allerede lukket"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operationen blev afbrudt"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Ukendt type"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s-filtype"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s-type"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Uventet tidlig strømafslutning"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Unavngivet"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Skrivebordsfil angav intet Exec-felt"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Kan ikke finde terminal krævet af dette program"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kan ikke oprette konfigurationsfolder %s for brugerprogram: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kan ikke oprette bruger-MIME-konfigurationsfolder %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kan ikke oprette brugerskrivebords-fil %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Tilpasset definition for %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "drevet implementerer ikke eject"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "drevet implementerer ikke forespørgsel om medier"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Kan ikke håndtere version %d af GEmblem-kodning"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Forkert antal symboler (%d) i GEmblem-kodning"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Kan ikke håndtere version %d af GEmblemIcon-kodning"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Forkert antal symboler (%d) i GEmblemedIcon-kodning"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Forventede et GEmblem til GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operationen understøttes ikke"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Indeholdende montering findes ikke"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Kan ikke kopiere over mappe"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Kan ikke kopiere mappe over mappe"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Målfilen findes"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kan ikke kopiere mappe rekursivt"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Kan ikke kopiere specialfil"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Ugyldig værdi givet for symbolsk henvisning"
+
+# ved ikke om det er papirkurv eller blot affald, eller om det er et udsagnsord.  Vi skriver det sikreste...
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Affald understøttes ikke"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Filnavne kan ikke indeholder \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "drevet implementerer ikke montering"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Intet program er registreret til håndtering af denne fil"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Optæller er lukket"
+
+# udviklerkommentar ved tilsvarende streng andetsteds i filen forklarer dette
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Filoptæller arbejder stadig"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Filoptæller er allerede lukket"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fil"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Filen som indeholder ikonet"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Kan ikke håndtere version %d af GFileIcon-kodning"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Fejlformateret inddata til GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Strømmen understøtter ikke query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Søgning understøttes ikke på strømmen"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Afskæring tillades ikke for inputstrømmen"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Afskæring understøttes ikke på strømmen"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Forkert antal tegn (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Ingen type til klassenavn %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Typen %s implementerer ikke GIcon-grænsefladen"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Typen %s har ingen klasse"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Fejlformateret versionsnummer %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+"Typen %s implementerer ikke from_tokens(), som er del af GIcon-grænsefladen"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Kan ikke håndtere den angivne version af ikonkodningen"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Inputstrøm implementerer ikke læsning"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Strøm arbejder stadig"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Kan ikke finde standardmonitortype for lokal mappe"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ugyldigt filnavn %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Fejl ved læsning af filsysteminformation: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Kan ikke omdøbe rodmappen"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Fejl ved omdøbning af fil: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Kan ikke omdøbe fil, filnavn findes allerede"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ugyldigt filnavn"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Fejl ved åbning af fil: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kan ikke åbne mappe"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Fejl under fjernelse af fil: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Fejl ved udsmidning af fil: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Kan ikke oprette affaldsmappe %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Kan ikke finde topniveau-mappe til affald"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Kan ikke finde eller oprette affaldsmappe"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Kan ikke oprette affalds-infofil: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Kan ikke smide fil ud: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Fejl ved oprettelse af mappen: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Fejl under oprettelse af symbolsk henvisning: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Fejl ved flytning af fil: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Kan ikke flytte mappe over mappe"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Oprettelse af sikkerhedskopi mislykkedes"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Fejl ved fjernelse af målfil: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Flytning mellem monteringer understøttes ikke"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attributværdien må ikke være NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Ugyldig attributtype (streng forventet)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Ugyldigt udvidet attributnavn"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Fejl ved instilling af udvidet attribut \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Fejl ved stat for filen \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ugyldig kodning)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Fejl ved stat af fildeskriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Ugyldig attributtype (uint32 forventet)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Ugyldig attributtype (uint64 forventet)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Ugyldig attributtype (byte-streng forventet)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Fejl ved ændring af rettigheder: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Fejl ved ændring af ejer: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolsk henvisning må ikke være NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Fejl ved manipulation af symbolsk henvisning: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Fejl ved manipulation af symbolsk henvisning: filen er ikke en symbolsk "
+"henvisning"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux-kontekst skal være forskellig fra NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Fejl ved ændring af SELinux-kontekst: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux er ikke aktiveret på dette system"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Indstilling af attributten %s understøttes ikke"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Fejl ved læsning fra filen: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Fejl under søgning i filen: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Fejl ved lukning af filen: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Kan ikke finde standardmonitortype for lokal fil"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Fejl under skrivning til filen: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Fejl under fjernelse af gammel sikkerhedskopi-henvisning: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Fejl under oprettelse af sikkerhedskopi: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Fejl under omdøbning af midlertidig fil: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Fejl ved beskæring af filen: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Fejl ved åbning af filen \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Målfilen er en mappe"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Målfilen er ikke en almindelig fil"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Filen blev modificeret eksternt"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Fejl under fjernelse af gammel fil: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Ugyldig GSeekType angivet"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ugyldig søgeforespørgsel"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Kan ikke beskære GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Nåede maksimal data-arraygrænse"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Hukommelses-uddatastrøm kan ikke ændre størrelse"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Kunne ikke ændre størrelse for hukommelses-uddatastrøm"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "montering implementerer ikke unmount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "montering implementerer ikke eject"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "montering implementerer ikke remount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount implementerer ikke gæt på indholdstype"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount implementerer ikke synkrone gæt på indholdstype"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Uddatastrøm implementerer ikke write"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Kildestrømmen er allerede lukket"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "navn"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Navnet på ikonet"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "navne"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Et array som indeholder ikonnavnene"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "brug forvalgte reserve"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Om der skal bruges de forvalgte reserver som findes ved at afkorte navnet "
+"ved \"-\"-tegn. Ignorerer navne efter det første hvis der giver flere."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Kan ikke håndtere version %d af GThemedIcon-kodningen"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Fildeskriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Fildeskriptoren, hvorfra der skal læses"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Luk fildeskriptor"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Om fildeskriptoren skal lukkes, når strømmen lukkes"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Fejl ved læsning fra unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Fejl ved lukningaf unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filsystemets rod"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Fildeskriptoren, der skal skrives til"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Fejl ved skrivning til unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "drev implementerer ikke eject"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Kan ikke finde program"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Fejl ved opstart af program: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI'er understøttes ikke"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "associationsændring understøttes ikke af win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Associationsoprettelse understøttes ikke i win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "skjul ikke poster"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "brug langt listeformat"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FIL...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Kunne ikke ændre fil-tilstand: fork() mislykkedes: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Kunne ikke ændre fil-tilstand: waitpid() mislykkedes: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Kunne ikke ændre fil-tilstand: chmod() mislykkedes: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Kunne ikke ændre fil-tilstand: Barn afsluttede med signal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Kunne ikke ændre fil-tilstand: Barn afsluttede ikke normalt"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Konvertering fra tegnsæt \"%s\" til \"%s\" er ikke understøttet"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Forkert beskedsstørrelse"
+
+#~ msgid "Socket error"
+#~ msgstr "Sokkelfejl"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "Kanalsætningsflag ikke understøttet"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..1aaff5b
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1933 @@
+# German glib translation.
+# Copyright (C) 2001-2004, 2007 Free Software Foundation, Inc.
+# Christian Meyer <chrisime@gnome.org>, 2001, 2002.
+# Christian Neumair <chris@gnome-de.org>, 2002-2004.
+# Hendrik Richter <hendrikr@gnome.org>, 2004, 2005, 2006, 2007, 2008, 2009.
+# Hendrik Brandt <heb@gnome-de.org>, 2004.
+# Andre Klapper <ak-47@gmx.net>, 2007, 2008.
+# Philipp Kerling <k.philipp@gmail.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 13:08+0100\n"
+"Last-Translator: Hendrik Richter <hendrikr@gnome.org>\n"
+"Language-Team: German <gnome-de@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Unerwartetes Attribut »%s« des Elements »%s«"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attribut »%s« des Elements »%s« konnte nicht gefunden werden"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Unerwarteter Tag »%s«; Tag »%s« wird erwartet"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Unerwarteter Tag »%s« innerhalb von »%s«"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Es wurde keine gültige Lesezeichendatei in den Datenverzeichnissen gefunden"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Es existiert bereits ein Lesezeichen für den URI »%s«"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Es konnte kein Lesezeichen für den URI »%s« gefunden werden."
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Es ist kein MIME-Type im Lesezeichen für den URI »%s« definiert."
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+"Es konnte keine »privat«-Markierung für das Lesezeichen für den URI »%s« "
+"gefunden werden."
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+"Es wurden keine Gruppen für das Lesezeichen für den URI »%s« festgelegt."
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Es wurde keine Anwendung namens »%s« gefunden, die ein Lesezeichen für »%s« "
+"registriert hat."
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Die Befehlzeile »%s« konnte nicht mit dem URI »%s« verknüpft werden."
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Umwandlung von Zeichensatz »%s« in »%s« wird nicht unterstützt"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Konverter von »%s« in »%s« konnte nicht geöffnet werden"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ungültige Bytefolge in Konvertierungseingabe"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Fehler bei der Umwandlung: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Bruchstückhafte Zeichenfolge am Eingabeende"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Notnagel »%s« kann nicht in Kodierung »%s« umgewandelt werden"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Der URI »%s« ist kein absoluter URI, der das »file«-Schema verwendet"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Der lokale URI »%s« darf kein »#« enthalten"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Der URI »%s« ist ungültig"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Der Rechnername des URI »%s« ist ungültig"
+
+# CHECK
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Der URI »%s« enthält ungültige Escape-Zeichen"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Der Pfadname »%s« ist kein absoluter Pfad"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ungültiger Rechnername"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Fehler beim Öffnen des Verzeichnisses »%s«: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu byte konnten nicht alloziiert werden, um Datei »%s« zu lesen"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Fehler beim Lesen der Datei »%s«: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Datei »%s« ist zu groß"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Es konnte nicht aus der Datei »%s« gelesen werden: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Datei »%s« konnte nicht geöffnet werden: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Attribute der Datei »%s« konnten nicht ermittelt werden: fstat() gescheitert: "
+"%s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Datei »%s« konnte nicht geöffnet werden: fdopen() gescheitert: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Datei »%s« konnte nicht in »%s« umbenannt werden: g_rename() ist gescheitert: %"
+"s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Datei »%s« konnte nicht angelegt werden: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Datei »%s« konnte nicht im Schreibmodus geöffnet werden: fdopen() ist "
+"gescheitert: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+"Datei »%s« konnte nicht geschrieben werden: fwrite() ist gescheitert: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr ""
+"Datei »%s« konnte nicht geschrieben werden: fflush() ist gescheitert: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Datei »%s« konnte nicht geschrieben werden: fsync() ist gescheitert: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr ""
+"Datei »%s« konnte nicht geschlossen werden: fclose() ist gescheitert: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Die vorhandene Datei »%s« konnte nicht entfernt werden: g_unlink() ist "
+"gescheitert: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Vorlage »%s« ungültig, sollte kein »%s« enthalten"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Vorlage »%s« enthält nicht XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Die symbolische Verknüpfung »%s« konnte nicht gelesen werden: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolische Verknüpfungen nicht unterstützt"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Konverter von »%s« in »%s« konnte nicht geöffnet werden: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Raw-read in g_io_channel_read_line_string nicht möglich"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Nicht konvertierte Daten befinden sich noch im Lesepuffer "
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal endet mit einem Teilzeichen"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Raw-read in g_io_channel_read_to_end nicht möglich"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Datei »%s« konnte nicht geöffnet werden: open() ist gescheitert: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Datei »%s« konnte nicht gemappt werden: mmap() ist gescheitert: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Fehler in Zeile %d, Zeichen %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Fehler in Zeile %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Leere Entität »&;« gefunden; gültige Entitäten sind &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Zeichen »%s« ist am Anfang eines Entitätsnamens ungültig; eine Entität "
+"beginnt mit dem Zeichen &; wenn das Et keine Entität sein soll, es als &amp; "
+"umschreiben"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Zeichen »%s« ist in einem Entitätsnamen ungültig"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entitätsname »%s« ist unbekannt"
+
+# CHECK
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entität endete nicht mit einem Semikolon; wahrscheinlich haben Sie ein Et "
+"benutzt, ohne eine Entity beginnen zu wollen - umschreiben Sie das Et als "
+"&amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"»%-.*s«, was eine Zahl in einer Zeichenreferenz (wie &#234;) sein sollte, "
+"konnte nicht analysiert werden - vielleicht ist die Zahl zu groß"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Zeichenreferenz »%-.*s« kodiert kein zulässiges Zeichen"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Leere Zeichenangabe; sollte eine Zahl wie z.B. &#454; enthalten"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Zeichenangabe endete nicht mit einem Semikolon; wahrscheinlich haben Sie ein "
+"Et-Zeichen benutzt, ohne eine Entität beginnen zu wollen - umschreiben Sie "
+"das Et als &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Unvollendete Entitätsreferenz"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Unvollendete Zeichenreferenz"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ungültiger UTF-8-kodierter Text - überlange Sequenz"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ungültiger UTF-8-kodierter Text - Kein Anfangszeichen"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ungültiger UTF-8-kodierter Text - »%s« ist nicht gültig"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument muss mit einem Element beginnen (e.g. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"»%s« ist kein gültiges Zeichen nach einem »<«-Zeichen; es darf keinen "
+"Elementnamen beginnen"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Seltsames Zeichen »%s«, »>« erwartet um Start-Tag des leeren Elements »%s« "
+"abzuschließen"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Seltsames Zeichen »%s«, »=« erwartet nach Attributname »%s« des Elements »%s«"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Seltsames Zeichen »%s«, es wurde entweder ein Attribut oder aber »>« oder »/« "
+"erwartet, um das Start-Tag des Elements »%s« abzuschließen; vielleicht haben "
+"Sie ein ungültiges Zeichen in einem Attributnamen benutzt"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Seltsames Zeichen »%s«; bei der Wertangabe für das Attribut »%s« des Elemente "
+"»%s« wurde ein Anführungszeichen nach dem Gleichheitszeichen erwartet"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"»%s« ist kein gültiges Zeichen, wenn es auf die Zeichen »</« folgt; »%s« darf "
+"keinen Elementnamen beginnen"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"»%s« ist kein gültiges Zeichen, wenn es auf den schließenden Elementnamen »%s« "
+"folgt; das erlaubte Zeichen ist »>«"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element »%s« wurde geschlossen, kein Element ist derzeit offen"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element »%s« wurde geschlossen, aber das derzeit offene Element ist »%s«"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument ist leer oder enthält nur Leerraum"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument endete unerwartet nach einer offenen spitzen Klammer »<«"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument endete unerwartet mit noch offenen Elementen - »%s« war das letzte "
+"offene Element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument endete unerwartet, es wurde eine spitze Klammer »>«, die das Tag <%s/"
+"> schließt, erwartet"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument endete unerwartet innerhalb eines Elementnamens"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument endete unerwartet innerhalb eines Attributnamens"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument endete unerwartet innerhalb eines Element-öffnenden Tags."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument endete unerwartet nach dem Gleichheitszeichen, das einem "
+"Attributnamen folgt; kein Attributwert"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument endete unerwartet innerhalb eines Attributwertes"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Dokument endete unerwartet innerhalb eines schließenden Tags für das Element "
+"»%s«"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokument endete unerwartet innerhalb eines Kommentars oder "
+"Verarbeitungsanweisung"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "Beschädigtes Objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "Interner Fehler oder beschädigtes Objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "Nicht genügend freier Speicher"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "Backtracking-Limit wurde erreicht"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"Der Ausdruck enthält Elemente, die teilweise Übereinstimmung nicht "
+"unterstützen"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "Interner Fehler"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"Rückreferenzen als Bedingungen werden für teilweise Übereinstimmung nicht "
+"unterstützt"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "Rekursionslimit wurde erreicht"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "Arbeitsplatzlimit für leere Teilstrings wurde erreicht"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "Ungültige Kombination von newline-Markierungen"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "Unbekannter Fehler"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ am Ende des Ausdrucks"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c am Ende des Ausdrucks"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "Unbekanntes Zeichen nach \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"Groß- und Kleinschreibung-beeinflussende Escape-Sequenzen (\\l, \\L, \\u, "
+"\\U) sind an dieser Stelle nicht erlaubt."
+
+# CHECK
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "Ziffern wirkungslos in {}-Quantifizierer"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "Ziffer zu groß in {}-Quantifizierer"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "Terminierendes ] für Zeichenklasse fehlt"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "Ungültige Escape-Sequenz in Zeichenklasse"
+
+# CHECK
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "Bereich wirkungslos in Zeichenklasse"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "Nichts zum Wiederholen"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "Unbekanntes Zeichen nach (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "Unbekanntes Zeichen nach (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "Unbekanntes Zeichen nach (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX-benannte Klassen werden nur innerhalb einer Klasse unterstützt"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "Abschließende ) fehlt"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ohne öffnende ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "auf (?R oder (?[+-]Ziffern muss ) folgen"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "Referenz auf nicht existierenden Unterausdruck"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "fehlende ) nach Kommentar"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "Regulärer Ausdruck zu groß"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "Fehler beim holen von Speicher"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "Rückblickende Annahme hat keine feste Länge"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "Falsch formatierte Zahl oder Name nach (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "Bedingte Gruppe enthält mehr als zwei Verzweigungen"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "Annahme erwartet nach (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "Unbekannter POSIX-Klassenname"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-Elementverknüpfungen nicht unterstützt"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "Wert in \\x{…}-Sequenz ist zu groß"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "Ungültige Bedingung (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C nicht erlaubt in rückblickender Annahme"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "Rekursive Aufrufe könnten unendlich oft aufgerufen werden"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "Terminierung im Namen des Unterausdrucks fehlt"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "Zwei benannte Unterausdrücke haben den gleichen Namen"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "Fehlerhafte \\P- oder \\p-Sequenz"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "Unbekannte Eigenschaftsname nach \\P oder \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "Name des Unterausdrucks ist zu lang (maximal 32 Zeichen)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "Zu viele benannte Unterausdrücke (maximal 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "Oktaler Wert ist größer als \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-Gruppe enthält mehr als eine Verzweigung"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "Wiederholen einer DEFINE-Gruppe ist nicht erlaubt"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "Inkonsistente NEWLINE-Optionen"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"Auf \\g folgt kein eingeklammerter Name oder eine optional eingeklammerte "
+"Zahl außer Null"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "Unerwartete Wiederholung"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "Code-Überlauf"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "Überlauf beim Kompillieren des Arbeitsbereichs"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+"Bereits geprüfter, referenzierter Unterausdruck konnte nicht gefunden werden"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Fehler beim Anwenden des regulären Ausdrucks %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-Bibliothek wurde ohne UTF8-Unterstützung kompilliert"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"PCRE-Bibliothek wurde ohne Unterstützung für UTF8-Eigenschaften kompilliert"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Fehler beim Kompillieren des regulären Ausdrucks %s an Zeichen %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Fehler beim Optimieren des regulären Ausdrucks %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "Hexadezimalzahl oder »}« erwartet"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "Hexadezimalzahl erwartet"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "Fehlendes »<» in symbolischer Referenz"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "Unvollendete symbolische Referenz"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "Symbolische Referenz der Länge 0"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "Ziffer erwartet"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "Illegale symbolische Referenz"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "Verirrtes abschließendes »\\«"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "Unbekannte Escape-Sequenz"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Fehler beim Verarbeiten des Ersetzungstextes »%s« an Zeichen %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Zitierter Text beginnt nicht mit einem Anführungszeichen"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Unbalanciertes Anführungszeichen in Befehlszeile oder anderem Text in "
+"Shellquotes"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Text endete nach einem »\\«-Zeichen. (Der Text war »%s«)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Text endete, bevor ein passendes Anführungszeichen für %c gefunden wurde. "
+"(Der Text war »%s«)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Text war leer (oder enthielt nur Leerraum)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Daten konnten nicht vom Kindprozess gelesen werden"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Weiterleitung für Kommunikation mit Kindprozess (%s) konnte nicht erzeugt "
+"werden"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Lesen aus Weiterleitung zum Kind (%s) gescheitert"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "In Verzeichnis »%s« (%s) konnte nicht gewechselt werden"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Kindprozess konnte nicht ausgeführt werden (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ungültiger Programmname: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Ungültige Zeichenkette im Argumentsvektor bei %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ungültige Zeichenkette in der Umgebung: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ungültiges Arbeitsverzeichnis: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Hilfsprogramm (%s) konnte nicht ausgeführt werden"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Unerwarteter Fehler in g_io_channel_win32_poll() beim Lesen aus dem "
+"Kindprozess"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Daten vom Kindprozess konnten nicht gelesen werden (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Unerwarteter Fehler in select() beim Lesen von Daten eines Kindprozesses (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Unerwarteter Fehler in waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Abspalten gescheitert (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Kindprozess »%s« konnte nicht ausgeführt werden (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Umleiten der Ausgabe oder Eingabe des Kindprozesses (%s) gescheitert"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Abspalten des Kindprozesses gescheitert (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Unbekannter Fehler beim Ausführen des Kindprozesses »%s«"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Es konnten nicht genug Daten von Kind-Programmkennungsweiterleitung (%s) "
+"gelesen werden"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Zeichen außerhalb des Bereiches für UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ungültige Folge in Umwandlungseingabe"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Zeichen außerhalb des Bereiches für UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Aufruf:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION …]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Hilfeoptionen"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Hilfeoptionen anzeigen"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Alle Hilfeoptionen anzeigen"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Anwendungsoptionen"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "»%s« konnte nicht als ganzzahliger Wert für %s interpretiert werden."
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Ganzzahliger Wert »%s« für %s ist außerhalb des Bereiches."
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "»%s« konnte nicht als »double«-Wert für %s interpretiert werden."
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "»double«-Wert »%s« für %s ist außerhalb des Bereiches."
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Fehler beim Analysieren der Option: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Für %s wird ein Argument benötigt"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Unbekannte Option %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Es wurde keine gültige Schlüsselwertedatei in den Suchverzeichnissen gefunden"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Keine reguläre Datei"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Datei ist leer"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Die Schlüsselwertedatei enthält die Zeile »%s«, welche kein zulässiges "
+"Schlüssel-Wert-Paar, keine Gruppe und kein Kommentar ist."
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ungültiger Gruppenname: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Die Schlüsselwertedatei beginnt nicht mit einer Gruppe"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ungültiger Schlüsselname: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Die Schlüsselwertedatei enthält die nicht unterstützte Kodierung »%s«"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Die Schlüsselwertedatei enthält nicht die Gruppe »%s«"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Die Schlüsselwertedatei enthält nicht den Schlüssel »%s«"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Die Schlüsselwertedatei enthält den Schlüssel »%s« mit dem Wert »%s«, der "
+"nicht in UTF-8 kodiert ist"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Die Schlüsselwertedatei enthält den Schlüssel »%s« mit einem Wert der nicht "
+"interpretiert werden konnte."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Die Schlüsselwertedatei enthält den Schlüssel »%s« in der Gruppe »%s« mit "
+"einem Wert der nicht interpretiert werden konnte."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Die Schlüsselwertedatei hat keinen Schlüssel »%s« in der Gruppe »%s«"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Die Schlüsselwertedatei enthält ein Escape-Zeichen am Zeilenende"
+
+# CHECK
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Die Schlüsselwertedatei enthält das ungültige Escape-Zeichen »%s«"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Der Wert »%s« konnte nicht als Zahl interpretiert werden."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Ganzzahliger Wert »%s« ist außerhalb des Wertebereiches."
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Der Wert »%s« konnte nicht als Gleitkommazahl interpretiert werden."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+"Der Wert »%s« konnte nicht als boolescher Ausdruck interpretiert werden."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Zu großer Zählwert an %s übermittelt"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Datenstrom ist bereits geschlossen"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Vorgang wurde abgebrochen"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Unbekannter Typ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s-Dateityp"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s-Typ"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Unerwartet frühes Datenstromende"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Unbenannt"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop-Datei hat kein Exec-Feld angegeben"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Für die Anwendung benötigtes Terminal konnte nicht gefunden werden"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Konfigurationsordner %s für Benutzeranwendungen konnte nicht erstellt "
+"werden: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+"MIME-Konfigurationsordner %s des Benutzers konnte nicht erstellt werden: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Benutzer-Desktop-Datei %s kann nicht erstellt werden"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Benutzerdefinition für %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "Laufwerk unterstützt Auswerfen nicht"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "Laufwerk unterstützt Prüfen auf Datenträger nicht"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Version %d der GEmblem-Kodierung kann nicht verarbeitet werden"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Ungültige Symbolanzahl (%d) in GEmblem-Kodierung"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Version %d der GEmblemedIcon-Kodierung kann nicht verarbeitet werden"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Ungültige Symbolanzahl (%d) in GEmblemedIcon encoding"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Es wurde ein GEmblem für GEmblemedIcon erwartet"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Vorgang nicht unterstützt"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Enthaltender Einhängepunkt existiert nicht"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Es kann nicht über das Verzeichnis kopiert werden"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Verzeichnis kann nicht über Verzeichnis kopiert werden"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Zieldatei existiert"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Verzeichnis kann nicht rekursiv kopiert werden"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Spezielle Datei kann nicht kopiert werden"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Ungültiger Wert für Symbolische Verknüpfung angegeben"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Müll nicht unterstützt"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Dateinamen dürfen kein »%c« enthalten"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "Datenträger unterstützt Einhängen nicht"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Es wurde keine Anwendung gefunden, die diese Datei verarbeiten kann"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Datei-Enumerator ist geschlossen"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Datei-Enumerator hat noch einen ausstehenden Vorgang"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Datei-Enumerator ist bereits geschlossen"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "datei"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Die Datei, die das Symbol enthält"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Version %d der GFileIcon-Kodierung kann nicht verarbeitet werden"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Ungültige Eingangsdaten für GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Datenstrom unterstützt query_info nicht"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Suchen im Datenstrom nicht unterstützt"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Abschneiden des Eingabedatenstroms nicht erlaubt"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Abschneiden wird vom Datenstrom nicht unterstützt"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Ungültige Symbolanzahl (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Kein Typ für Klassenname %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "GIcon-Schnittstelle wird vom Typ %s nicht unterstützt"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Typ %s ist keine Klasse"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Ungültige Versionsnummer: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Typ %s implementiert nicht from_tokens() der GIcon-Schnittstelle"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Übergebene Version der Symbol-Kodierung kann nicht verarbeitet werden"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Eingabedatenstrom unterstützt kein Lesen"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Datenstrom hat noch einen ausstehenden Vorgang"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"Vorgegebener Überwachungstyp für lokale Ordner konnte nicht gefunden werden"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ungültiger Dateiname %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Fehler beim Einlesen der Dateisystem-Information: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Wurzelverzeichnis kann nicht umbenannt werden"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Fehler beim Umbenennen der Datei: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Datei kann nicht umbenannt werden, da der Dateiname bereits existiert"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ungültiger Dateiname"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Fehler beim Öffnen der Datei: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Verzeichnis kann nicht geöffnet werden"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Fehler beim Entfernen der Datei: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Fehler beim Verschieben der Datei in den Müll: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Müll-Verzeichnis %s konnte nicht angelegt werden: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Elternverzeichnis für den Müll konnte nicht gefunden werden"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Müll-Verzeichnis konnte nicht gefunden oder angelegt werden"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Löschprotokoll-Datei konnte nicht angelegt werden: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Datei konnte nicht in den Müll verschoben werden: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Fehler beim Erstellen des Verzeichnisses: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Fehler beim Erstellen des Symbolischen Verknüpfung: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Fehler beim Verschieben der Datei: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Verzeichnis kann nicht über Verzeichnis verschoben werden"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Erstellen der Sicherungsdatei gescheitert"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Fehler beim Entfernen der Zieldatei: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Verschieben zwischen Einhängepunkten nicht unterstützt"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attributwert darf nicht NULL sein"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Ungültiger Attributtyp (»string« erwartet)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Ungültiger erweiterter Attributname"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Fehler beim Setzen des erweiterten Attributs »%s«: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Fehler beim Untersuchen der Datei %s mit fstat(): %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ungültige Kodierung)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Fehler beim Untersuchen des Datei-Deskriptors mit fstat(): %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Ungültiger Attributtyp (»uint32« erwartet)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Ungültiger Attributtyp (»uint64« erwartet)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Ungültiger Attributtyp (»byte string« erwartet)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Fehler beim Setzen der Zugriffsrechte: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Fehler beim Setzen des Besitzers: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "Symbolische Verknüpfung darf nicht NULL sein"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Fehler beim Setzen der Symbolischen Verknüpfung: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Fehler beim Setzen der Symbolischen Verknüpfung: Datei ist keine Symbolische "
+"Verknüpfung"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux-Kontext darf nicht NULL sein"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Fehler beim Setzen des SELinux-Kontexts: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ist auf diesem System nicht aktiviert"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Setzen des Attributs %s nicht unterstützt"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Fehler beim Lesen aus Datei: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Fehler beim Suchen in Datei: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Fehler beim Schließen der Datei: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+"Vorgegebener Überwachungstyp für lokale Dateien konnte nicht gefunden werden"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Fehler beim Schreiben in Datei: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Fehler beim Entfernen der alten Sicherungsverknüpfung: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Fehler beim Erzeugen der Sicherungskopie: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Fehler beim Umbenennen der temporären Datei: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Fehler beim Abschneiden der Datei: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Fehler beim Öffnen der Datei »%s«: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Zieldatei ist ein Verzeichnis"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Zieldatei ist keine reguläre Datei"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Die Datei wurde extern verändert"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Fehler beim Entfernen der alten Datei: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Ungültiger GSeekType übergeben"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ungültige Suchanfrage"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream konnte nicht abgeschnitten werden"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Maximales Limit des Daten-Feldes erreicht"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Größe des Speicherausgabestroms ist nicht änderbar"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Größe des Speicherausgabestroms konnte nicht geändert werden"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "Einhängepunkt unterstützt Aushängen nicht"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "Einhängepunkt unterstützt Auswerfen nicht"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "Einhängepunkt unterstützt erneutes Einhängen nicht"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "Einhängepunkt unterstützt Erraten des Inhaltstyps nicht"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "Einhängepunkt unterstützt synchrones Erraten des Inhaltstyps nicht"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Ausgabedatenstrom unterstützt kein Schreiben"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Quelldatenstrom ist bereits geschlossen"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "Name"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Der Name des Symbols"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "Namen"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Ein Datenfeld, das die Symbolnamen enthält"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "Standard-Alternativen benutzen"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Legt fest, ob die Standard-Alternativen benutzt werden sollen, indem der "
+"Name bei »-«-Zeichen abgeschnitten wird. Alle Namen nach dem ersten werden "
+"ignoriert falls mehrere angegeben sind."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Version %d der GThemedIcon-Kodierung kann nicht verarbeitet werden"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Datei-Deskriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Der zu lesende Datei-Deskriptor"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Datei-Deskriptors schließen"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+"Legt fest, ob der Datei-Deskriptor beim Schließen des Datenstroms "
+"geschlossen wird"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Fehler beim Lesen aus Unix-Datenstrom: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Fehler beim Schließen des Unix-Datenstroms: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Wurzelverzeichnis des Dateisystems"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Der zu schreibende Datei-Deskriptor"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Fehler beim Schreiben in Unix-Datenstrom: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "Datenträger unterstützt Auswerfen nicht"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Anwendung kann nicht gefunden werden"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Fehler beim Starten der Anwendung: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs nicht unterstützt"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "Änderungen von Assoziationen unter win32 nicht unterstützt"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Erstellen von Assoziationen unter win32 nicht unterstützt"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "Einträge nicht verbergen"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "langes Listenformat verwenden"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[DATEI …]]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u Byte"
+#~ msgstr[1] "%u Bytes"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "Erzeugte Desktop-Datei kann nicht geladen werden"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Fehler beim Erzeugen der Backup-Verknüpfung: %s"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr "Zu großer Zählwert an g_input_stream_read_async übermittelt"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "Zu großer Zählwert an g_input_stream_skip übermittelt"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr "Zu großer Zählwert an g_input_stream_skip_async übermittelt"
+
+#~ msgid "Target file already exists"
+#~ msgstr "Zieldatei existiert bereits"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "Zu großer Zählwert an g_input_stream_write übermittelt"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr "Zu großer Zählwert an g_input_stream_write_async übermittelt"
+
+#~ msgid "Target stream is already closed"
+#~ msgstr "Zieldatenstrom ist bereits geschlossen"
+
+#~ msgid "Unknown drive"
+#~ msgstr "Unbekanntes Laufwerk"
+
+#~ msgid "%s volume"
+#~ msgstr "%s-Datenträger"
+
+#~ msgid "Unknown volume"
+#~ msgstr "Unbekannter Datenträger"
diff --git a/po/dz.po b/po/dz.po
new file mode 100644
index 0000000..69ddaa2
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,1873 @@
+# Dzongkha translation of glib
+# Copyright @ 2006, Free software foundation, Inc.
+# Mindu Dorji.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.dz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-08-09 10:23+0530\n"
+"Last-Translator: Mindu Dorji\n"
+"Language-Team: DZONGKHA <pgeyleg@dit.gov.bt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Dzongkha\n"
+"X-Poedit-Country: BHUTAN\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=2;plural=(n!=1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "རེ་བ་མེད་པའི་ཁྱད་ཆོས་ '%s'ཆ་ཤས་'%s'གི་དོན་ལུ།"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "ཁྱད་ཆོས་'%s'འཚོལ་མ་ཐོབ་ ཆ་ཤས་'%sགི"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "རེ་བ་མེད་པའི་ངོ་རྟགས་ '%s'། རེ་བ་བསྐྱེད་མི་ངོ་རྟགས་'%s'།"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "རེ་བ་མེད་པའི་ངོ་རྟགས་ '%s' ངོ་རྟགས། '%s'ནང་ན།"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "གནད་སྡུད་སྣོད་ཐོ་ཚུ་ནང་ ནུས་ཅན་དེབ་རྟགས་ཡིག་སྣོད་ འཚོལ་མ་ཐོབ།"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "ཡུ་ཨར་ཨའི་'%s'གི་དོན་ལུ་ དེབ་རྟགས་ཅིག་ཧེ་མ་ལས་རང་འདུག"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "ཡུ་ཨར་ཨའི་'%s'གི་དོན་ལུ་དེབ་རྟགས་མ་ཐོབ།"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "ཡུ་ཨར་ཨའི་'%s'གི་དོན་ལུ་དེབ་རྟགས་ནང་ མ་ཡིམ་གྱི་དབྱེ་བ་ངེས་འཛིན་མ་འབད་བས། "
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "ཡུ་ཨར་ཨའི་'%s'གི་དོན་ལུ་དེབ་རྟགས་ནང་ སྒེར་གྱི་ཟུར་རྟགས་ངེས་འཛིན་མ་འབད་བས།"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "ཡུ་ཨར་ཨའི་'%sགི་དོན་ལུ་ དེབ་རྟགས་ནང་ སྡེ་ཚན་གཞི་སྒྲིག་མ་འབད་བས།"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "མིང་'%sའབད་མི་གློག་རིམ་གྱིས་ '%s དོན་ལུ་ དེབ་རྟགས་ཅིག་ཐོ་འགོད་མ་འབད་བས། "
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ ’%s’:%s ལྷག་མ་ཚུགས།"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "ཡིག་འབྲུའི་ཆ་ཚན་ ‘%s’ ལས་ ‘%s’ ལུ་གཞི་བསྒྱུར་འབད་ནི་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "‘%s’ ལས་ '%s'  ལུ་ སྒྱུར་བྱེད་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "གཞི་བསྒྱུར་གྱི་ཨིན་པུཊི་ནང་ བའིཊི་གི་འབྱུང་རིམ་ ནུས་མེད་ཨིན་པས།"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "གཞི་བསྒྱུར་གྱི་སྐབས་འཛོལ་བ་ :%s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "ཨིན་པུཊི་མཇུག་ལུ་ ཡི་གུའི་འབྱུང་རིམ་ཆ་ཤས།"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "གློ་བུར་རྒྱབ་ཐག ’%s’ ལས་ ཀོཌི་སེཊི་ ’%s’ ལུ་ གཞི་བསྒྱུར་འབད་མི་ཚུགས། "
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"ཡུ་ཨར་ཨའི་  ’%s’ འབད་མི་དེ་ \"file\" འཆར་ལས་ལག་ལེན་འཐབ་པའི་ ཡུ་ཨར་ཨའི་ཡང་དག་ཅིག་མེན།"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "ཉེ་གནས་་ཀྱི་ཡིག་སྣོད་ ཡུ་ཨར་ཨའི་ ’%s’ འབད་མི་དེ་ནང་ '#' ཅིག་མེདཔ་འོང༌།"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "ཡུ་ཨར་ཨའི་ ’%s’ ནུས་མེད་ཨིན་པས།"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "ཡུ་ཨར་ཨའི་ ’%s’ གི་ ཧོསཊི་ནེམ་དེ་ ནུས་མེད་ཨིན་པས།"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "ཡུ་ཨར་ཨའི་ ’%s’ གི་ནང་ན་ ནུས་མེད་ཐོག་ལས་ཐར་མི་ ཡིག་འབྲུ་་ཚུ་འདུག"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "འགྲུལ་ལམ་གྱི་མིང་ ’%s’ འབད་མི་དེ་ འགྲུལ་ལམ་ཡང་དག་ཅིག་མེན།"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ནུས་མེད་ཀྱི་ ཧོསཊི་ནེམ།"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "སྣོད་ཐོ་ '%s':%s ཁ་ཕྱེ་ནི་ལུ་འཛོལ་བ།"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "བཱཡིཊི་ %lu བསྐལ་སྤྲོད་འབད་མ་ཚུགས་ \"%s\" ལྷག་ནི་ལུ།"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ནང་ལས་ ལྷག་མ་ཚུགས།"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "ཡིག་སྣོད་ '%s': fstat() གི་ཁྱད་ཆོས་ཚུ་ ལེན་མ་ཚུགས་ :%sམ་བཏུབ།"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’:fdopen() ཁ་ཕྱེ་མ་ཚུགས།  %s་མ་བཏུབ།"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’ལས་'%s' ལུ་ བསྐྱར་མིང་བཏགས་མ་ཚུགས། g_rename() གིས་ %s ལུ་མ་བཏུབ།"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ཡིག་སྣོད་ ’%s’:%s གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "ཡིག་སྣོད་’%s’ འབྲི་ནིའི་དོན་ལུ་ ཁ་ཕྱེ་མ་ཚུགས་: fdopen() མ་བཏུབ་:%s།"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’འབྲི་མ་ཚུགས་: fwrite() མ་བཏུབ་:%s།"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’འབྲི་མ་ཚུགས་: fwrite() མ་བཏུབ་:%s།"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’འབྲི་མ་ཚུགས་: fwrite() མ་བཏུབ་:%s།"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’ཁ་བསྡམས་མ་ཚུགས་: fclose() མ་བཏུབ་:%s།"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "ཡོད་བཞིན་པའི་ཡིག་སྣོད་'%s' དེ་ རྩ་བསྐྲད་གཏང་མ་ཚུགས་: g_unlink() མ་བཏུབ་:%s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "ཊེམ་པེ་ལེཊི་ '%s' དེ་ནུས་མེད་ཨིན། དེ་ནང་ '%s' འབད་མི་ བཞག་ནི་མི་འོང༌།"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "ཊེམ་པེལེཊི་ ’%s’ འབད་མི་དེ་ནང་ XXXXXX མིན་འདུག།"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ ’%s’:%s ལྷག་མ་ཚུགས།"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "‘%s’ ལས་ ‘%s’:%s ལུ་སྒྱུར་བྱེད་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "ཇི་ཨའི་ ཨོ་ རྒྱུ་ལམ་ ལྷག་ གྱལ་རིམ་ ཡིག་རྒྱུན་ཚུ་ནང་ རགས་ལྷག་མི་བཏུབ།"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "ལྷག་ནིའི་གནད་ཁོངས་ནང་ གཞི་བསྒྱུར་མ་འབད་བའི་གནད་སྡུད་ ལྷག་ལུས་འདུག"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "ཡིག་འབྲུ་ནང་ཆ་ཤས་ནང་ལུ་ རྒྱུ་ལམ་རྩ་འགྲོལ་འགྱོཝ་ཨིན།"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "ཇི་ཨའི ཨོ་ རྒྱ་ལམ་ མཇུག་ ཚུན་ ལྷག་ནི་ཚུ་ནང་ རགས་ལྷག་མི་བཏུབ།"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ཡིག་སྣོད་ ’%s’ ཁ་ཕྱེ་མ་ཚུགས་: open()མ་བཏུབ་:%s།"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ཡིག་སྣོད་’%s’ གི་ས་ཁྲ་འབྲི་མ་ཚུགས་:  mmap() མ་བཏུབ་:%s།"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "གྱལ་རིམ་%d ཡིག་འབྲུ་ %d:%s ལུ་འཛོལ་བ།"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "གྱལ་རིམ་ %d་: %s ལུ་འཛོལ་བ།"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"ངོ་བོ་སྟོང་པ་ ’&;’ མཐོང་ཅི། ནུས་ཅན་ངོ་བོ་ཚུ་: &amp; &quot; &lt; &gt; &apos; ཚུ་ཨིན།"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"ངོ་བོའི་མིང་ འགོ་བཙུགས་སར ཡིག་འབྲུ་་ ’%s’ ནུས་མེད་ཨིན་པས། ཡིག་འབྲུ་ & འདི་གིས་ངོ་བོ་ཅིག་ འགོ་"
+"བཙུགསཔ་ཨིན། གལ་སྲིད་ དང་རྟགས་འདི་ ངོ་བོ་མིནམ་ཅིག་དགོ་པཅིན་ &amp; བཟུམ་ཅིག་སྦེ་ གྲོས་ཐར་འབད།"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "ཡིག་འབྲུ་ ’%s དེ་ ངོ་བོའི་མིང་ཅིག་གི་ ནང་འཁོད་ལུ་ ནུས་མེད་ཨིན། "
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "ངོ་བོའི་མིང་ '%s' ཧ་མ་གོ"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"ངོ་བོ་འདི་ སེ་མི་ཀོ་ལཱོན་ ; གིས་འབད་ མཇུག་མ་བསྡུ་བས། ཁྱོད་ཀྱིས་ངོ་བོ་ཅིག་ འགོ་མ་བཙུགས་པར་ དང་རྟགས་"
+"ཡིག་འབྲུ་ཅིག་ ལག་ལེན་འཐབ་འཐབ་བཟུམ་ཅིག་འདུག དང་རྟགས་་ &amp; བཟུམ་ཅིག་སྦེ་ གྲོས་ཐར་འབད།"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s'ལུ་ མིང་དཔྱད་འབད་མ་ཚུགས། འདི་ཡིག་འབྲུ་གཞི་བསྟུན་ (དཔེར་ན་ (&#234; ) ཅིག་ནང་གི་ ཨང་"
+"ཡིག་ཅིག་འོང་དགོཔ་ཨིན་ - ཨང་ཡིག་དེ་ སྦོམ་དྲགསཔ་འོང་ནི་མས།"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "ཡིག་འབྲུ་གཞི་བསྟུན་ '%-.*s' དེ་གིས་ གནང་བ་ཅན་གྱི་ཡིག་འབྲུ་ཅིག་ལུ་ ཨིན་ཀོཌི་མི་འབད་བས།"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ཡིག་འབྲུ་སྟོང་པའི་འབྲེལ་བ་འདི་ནང་ &#454; བཟུམ་མའི་ ཨང་ཡིག་ཅིག་འོང་དགོ"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"ཡིག་འབྲུ་གཞི་བསྟུན་དེ་ སེ་མི་ཀོ་ལཱོན་ ; གྱིས་ མཇུག་མ་བསྡུ་བས། ཁྱོད་ཀྱིས་ ངོ་བོ་ཅིག་ འགོ་བཙུགས་ནིའི་རེ་འདུན་"
+"མེད་པར་ དང་རྟགས་ ཡིག་འབྲུ་ ལག་ལེན་འཐབ་འཐབ་འོང་ནི་མས།   དང་རྟགས་དེ་ &amp; བཟུམ་སྦེ་ གྲོས་ཐར་"
+"འབད།"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "མཇུག་མ་བསྡུ་བའི་ ངོ་བོའི་གཞི་བསྟུན།"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "མཇུག་མ་བསྡུ་བའི་ ཡིག་འབྲུའི་གཞི་བསྟུན།"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "ནུས་མེད་ཡུ་ཊི་ཨེཕ་-༨ ཀྱི ཨིན་ཀོ་དེཌི་ཚིག་ཡིག"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "ནུས་མེད་ཡུ་ཊི་ཨེཕ་-༨ ཀྱི ཨིན་ཀོ་དེཌི་ཚིག་ཡིག"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "ནུས་མེད་ཡུ་ཊི་ཨེཕ་-༨ ཀྱི ཨིན་ཀོ་དེཌི་ཚིག་ཡིག"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ཡིག་ཆ་དེ་  (དཔེར་ན་ <book>) བཟུམ་མའི་ཆ་ཤས་ཅིག་གིས་ འགོ་བཙུགས་དགོ"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"ཡིག་འབྲུ་ ’%s’ དེ་ ཡིག་འབྲུ་’<’ ཅིག་གི་རྗེས་སུ་འོངམ་ད་ ནུས་པ་ཡོད་པའི་ཡིག་འབྲུ་ཅིག་མིན། འདི་གིས་ཆ་ཤས་"
+"ཀྱི་མིང་ཅིག་ འགོ་མི་བཙུགསཔ་འོང༌།"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"’%s’ དེ་རྐྱང་ཡིག་ཨིན་པས། ཆ་ཤས་ཀྱི་ འགོ་བཙུགས་ངོ་རྟགས་ %s’ དེ་མཇུག་བསྡུ་ནི་ལུ་ ཡིག་འབྲུ་ ’>’ ཅིག་ "
+"ཨིན་པའི་རེ་བ་ཡོད།"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"’%s’ དེ་རྐྱང་ཡིག་ཨིན་པས།  ’=’ ཅིག་ཡོད་པའི་ རེ་བ་ཡོད་ ཁྱད་ཆོས་ཀྱི་མིང་ ’%s’ ཆ་ཤས་ ’%s’ གི་རྗེས་"
+"སུ།"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"’%s’ དེ་རྐྱང་ཡིག་ཨིན་པས། ཆ་ཤས་ ’%s’ གི་འགོ་བཙུགས་ངོ་རྟགས་ མཇུག་བསྡུ་ནི་ལུ་ ཡིག་འབྲུ་ ’>’ ཡང་ན་ "
+"’/’ གི་རེ་བ་ཡོད།"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"’%s’ དེ་རྐྱང་ཡིག་ཨིན་པས། ཁྱད་ཆོས་’%s’ གི་ ཆ་ཤས’%s’ གི་དོན་ལུ་ བེ་ལུ་བྱིནམ་ད་ མཉམ་རྟགས་ཀྱི་ཤུལ་"
+"ལུ་ འགོ་བཙུགས་འདྲེན་རྟགས་ཅིག་ ཚུད་ཡོད་པའི་རེ་བ་ཡོད།"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"’%s’ དེ་ ཡིག་འབྲུ་ནུས་ཅན་ཅིག་མེན་ ཡིག་འབྲུ་ ’</’; ’%s’ ཚུ་གི་རྗེས་ཤུལ་ལུ་འོངམ་  ཆ་ཤས་ཀྱི་མིང་ཅིག་ "
+"འགོ་མི་བཙུགསཔ་འོང༌།"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"’%s’ དེ་ ཡིག་འབྲུ་ནུས་ཅན་ཅིག་མེན། ཁ་བསྡམ་ནིའི་ཆ་ཤས་མིང་ ’%s’; གི་རྟིང་བདའ་འོངམ་ད་ ཆོག་པའི་ཡིག་"
+"འབྲུ་དེ་ ’>’ ཨིན།"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "ཆ་ཤས་ ’%s’ དེ་ ཁ་བསྡམས་ཏེ་ཡོདཔ་ལས་ ད་ལྟོ་ཆ་ཤས་གཅིག་ཡང་ ཁ་ཕྱེ་ཕྱེཝ་མིན་འདུག"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "ཆ་ཤས་ ’%s’ དེ་ ཁ་བསྡམས་ནུག དེ་འབདཝ་ད་ ད་ལྟོ་ཁ་ཕྱེ་སྟེ་ཡོད་མི་ཆ་ཤས་དེ་ ’%s’ ཨིན།"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ཡིག་ཆ་དེ་སྟོང་པའམ་ ཡང་ཅིན་ ནང་ན་ས་སྟོང་དཀརཔོ་མ་གཏོགས་ མེདཔ་འོང་ནི་མས།"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "ཡིག་ཆ་དེ་ ཟུར་ཁུག་གུག་ཤད་ ’<’ ཅིག་གི་ཤུལ་ལས་ རེ་བ་མེད་པར་ རྫོགས་སོ་ཡི།"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"ཡིག་ཆ་དེ་ རེ་བ་མེད་པར་རྫོགས་སོ་རུང་ ཆ་ཤས་དེ་ ཁ་ཕྱེ་སྟེ་རང་འདུག མཐའ་མཇུག་ཁ་ཕྱེ་མི་ ཆ་ཤས་དེ་ -’%"
+"s’ ཨིན་པས།"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"ཡིག་ཆ་དེ་ རེ་བ་མེད་པར་རྫོགས་སོ་ནུག  ངོ་རྟགས་ <%s/> མཇུག་བསྡུ་བའི་ ཁ་བསྡམ་ཟུར་ཁུག་གུག་ཤད་ཅིག་ "
+"མཐོང་བའི་རེ་བ་ཡོད།"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "ཡིག་ཆ་དེ་ ཆ་ཤས་ཅིག་གི་ མིང་གི་ནང་ན་ རེ་བ་མེད་པར་རྫོགས་སོ་ནུག"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "ཡིག་ཆ་དེ་ ཁྱད་ཆོས་ཀྱི་མིང་ཅིག་གི་ནང་ན་ རེ་བ་མེད་པར་རྫོགས་སོ་ནུག"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "ཡིག་ཆ་དེ་ ཆ་ཤས་ཁ་ཕྱེ་ནིའི་ ངོ་རྟགས་ཅིག་གི་ནང་ན་ རེ་བ་མེད་པར་ རྫོགས་སོ་ནུག"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"ཡིག་ཆ་དེ་ ཁྱད་ཆོས་ཀྱི་མིང་ཅིག་གི་ཤུལ་ལས་ མཉམ་རྟགས་ཀྱི་རྗེས་སུ་ རེ་བ་མེད་པར་ རྫོགས་སོ་ནུག ཁྱད་ཆོས་ཀྱི་བེ་"
+"ལུ་མིན་འདུག"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "ཡིག་ཆ་དེ་ ཁྱད་ཆོས་ཀྱི་ བེ་ལུ་ཅིག་གི་ནང་ན་སྡོད་པའི་སྐབས་ལུ་ རེ་བ་མེད་པར་ རྫོགས་སོ་ནུག"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "ཡིག་ཆ་དེ་ ཆ་ཤས་ ’%s’ གི་དོན་ལུ་ ཁ་བསྡམ་ངོ་རྟགས་ནང་ན་ རེ་བ་མེད་པར་ རྫོགས་སོ་ནུག"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "ཡིག་ཆ་དེ་ བསམ་བཀོད་ ཡང་ན་ ལས་སྦྱོར་བཀོད་རྒྱ་ཅིག་གི་ནང་ན་ རེ་བ་མེད་པར་ རྫོགས་སོ་ནུག"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "ཡིག་འབྲུ་ནང་ཆ་ཤས་ནང་ལུ་ རྒྱུ་ལམ་རྩ་འགྲོལ་འགྱོཝ་ཨིན།"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "གཞི་བསྒྱུར་གྱི་ཨིན་པུཊི་ནང་ བའིཊི་གི་འབྱུང་རིམ་ ནུས་མེད་ཨིན་པས།"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "མཇུག་མ་བསྡུ་བའི་ ཡིག་འབྲུའི་གཞི་བསྟུན།"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "མཇུག་མ་བསྡུ་བའི་ ཡིག་འབྲུའི་གཞི་བསྟུན།"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "མཇུག་མ་བསྡུ་བའི་ ཡིག་འབྲུའི་གཞི་བསྟུན།"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "གྱལ་རིམ་%d ཡིག་འབྲུ་ %d:%s ལུ་འཛོལ་བ།"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "མཇུག་མ་བསྡུ་བའི་ ངོ་བོའི་གཞི་བསྟུན།"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ལུང་འདྲེན་ཚིག་ཡིག་ཚུ་ འདྲེན་རྟགས་ཀྱི་ཐོག་ལས་ འགོ་མི་བཙུགས།"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"བཀོད་ལམ་ནང་ ཡང་ན་ གཞན་ ཤལ་གྱི་འདྲེན་རྟགས་ནང་བཙུགས་པའི་ཚིག་ཡིག་ཚུ་ནང་ མི་མཐུན་པའི་འདྲེན་རྟགས་"
+"འདུག"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"ཚིག་ཡིག་དེ་ ཡིག་འབྲུ་ ’\\’ ཅིག་གི་ རྟིང་བདའ་སྟེ་རང་ རྫོགས་སོ་ནུག (ཚིག་ཡིག་དེ་ ’%s’ ཨིན་པས།)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"འདྲེན་རྟགས་དང་ མ་མཐུན་པའི་ཧེ་མར་ རྫོགས་སོང་མི་ ཚིག་ཡིག་དེ་ %c ཨིན་མས། (ཚིག་ཡིག་དེ་ ’%s’ ཨིན་པས)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ཚིག་ཡིག་དེ་ སྟོང་པའམ་ (ཡང་ཅིན་ ནང་ན་ས་སྟོང་དཀརཔོ་རྐྱངམ་ཅིག་ འོང་ནི་མས།)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "ཆ་ལག་ལས་སྦྱོར་ནང་ལས་ གནད་སྡུད་ལྷག་མ་ཚུགས། "
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"ཆ་ལག་ལས་སྦྱོར་ (%s) དང་གཅིག་ཁར་ རྒྱུད་འབྲེལ་འཐབ་ནིའི་དོན་ལུ་ རྒྱུད་དུང་གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "ཆ་ལག་རྒྱུད་དུང་ (%s) ནང་ལས་ ལྷག་མ་ཚུགས།"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "སྣོད་ཐོ་’%s’ (%s)ལུ་ བསྒྱུར་བཅོས་འབད་མ་ཚུགས། "
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "ཆ་ལག་ལས་སྦྱོར་ (%s) དེ་ ལག་ལེན་འཐབ་མ་ཚུགས།"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "ནུས་མེད་ལསརིམ་མིང་:%s།"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d: %s ལུ་ སྒྲུབ་རྟགས་ཝེཀ་ཊོར་ནང་ ནུས་མེད་ཡིག་རྒྱུན།"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "མཐའ་འཁོར་:%sནང་ལུ་ ནུས་མེད་ཡིག་རྒྱུན།"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "ནུས་མེད་ལཱ་གཡོག་སྣོད་ཐོ་:%s།"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "ལས་རོགས་པའི་ལས་རིམ་ (%s) ལག་ལེན་འཐབ་མ་ཚུགས།"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"ཆ་ལག་ལས་སྦྱོར་ནང་ལས་ གནད་སྡུད་ལྷག་ནི་ལུ་ རེ་བ་མེད་པའི་འཛོལ་བ་ g_io_channel_win32_poll() "
+"ཚུ་འདུག"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "ཆ་ལག་ལས་སྦྱོར་ (%s) ནང་ལས་ གནད་སྡུད་ལྷག་མ་ཚུགས།"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"སེལ་འཐུ་() ནང་ལུ་ རེ་བ་མེད་པའི་འཛོལ་བ་བྱུང་སྟེ་ ཆ་ལག་ལས་སྦྱོར་ (%s) ནང་ལས་ གནད་སྡུད་ལྷག་དོ།"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "ཝེཊི་པིཌི་ () (%s) ནང་ལུ་ རེ་བ་མེད་པའི་འཛོལ་བ། "
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) ལུ་ ཁ་སྤེལ་མ་ཚུགས།"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "ཆ་ལག་ལས་སྦྱོར་ \"%s\" (%s) ལག་ལེན་འཐབ་མ་ཚུགས།"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "ཆ་ལག་ལས་སྦྱོར་ (%s) གི་ ཨའུཊི་པུཊི་ ཡང་ཅིན་ ཨིན་པུཊི་ ལོག་གཏང་མ་ཚུགས།"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "ཆ་ལག་ལས་སྦྱོར་ (%s) ཁ་སྤེལ་མ་ཚུགས།"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "མ་ཤེས་པའི་འཛོལ་བ་ཅིག་གིས ཆ་ལག་ལས་སྦྱོར་ \"%s\" ལག་ལེན་འཐབ་དོ།"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "ཆ་ལག་ པིཨའི་ཌི་ རྒྱུད་དུང་ (%s) ནང་ལས་ གནད་སྡུད་ལངམ་ ལྷག་མ་ཚུགས།"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "ཡིག་འབྲུ་ ཡུ་ཊི་ཨེཕ་ - ༨ ཀྱི་ ཁྱབ་ཚད་ཀྱི་ཕྱི་ཁར་ཨིན་མས།"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "བསྒྱུར་བཅོས་ཀྱི་ ཨིན་པུཊི་ནང་ལུ་ ནུས་མེད་འབྱུང་རིམ་འདུག"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "ཡིག་འབྲུ་ ཡུ་ཊི་ཨེཕ་- ༡༦ གི་ ཁྱབ་ཚད་ཀྱི་ཕྱི་ཁར་ཨིན་མས།"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ལག་ལེན:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ གདམ་ཁ... ] "
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "གྲོགས་རམ་གདམ་ཁ་ཚུ།"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "གྲོགས་རམ་གདམ་ཁ་ཚུ་སྟོན།"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "གྲོགས་རམ་གདམ་ཁ་ཚུ་ ཆ་མཉམ་སྟོན།"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "གློག་རིམ་གྱི་གདམ་ཁ།"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "ཧྲིལ་ཨང་བེ་ལུ་ ’%s’དེ་%s གི་དོན་ལུ་ མིང་དཔྱད་འབད་མི་ཚུགས།"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%s གི་དོན་ལུ་ ཧྲིལ་ཨང་བེ་ལུ་ ’%s’ དེ་ ཁྱབ་ཚད་ཀྱི་ཕྱི་ཁར་ཨིན་པས།"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "བེ་ལུ་གཉིས་བལྟབ་%s'མིང་དཔྱད་འབད་མི་ཚུགས། %sགི་དོན་ལུ།"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "བེ་ལུ་གཉིས་བལྟབ་'%s' དེ་%s གི་དོན་ལུ་ ཁྱབ་ཚད་ཀྱི་ཕྱི་ཁར་ཨིན་པས།"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "གདམ་ཁ་%s མིང་དཔྱད་འབད་ནི་ལུ་འཛོལ་བ།"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s གི་དོན་ལུ་ སྒྲུབ་རྟགས་བརླག་སྟོར་ཞུགས་ནུག"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "ཤེས་མ་ཚུགས་པའི་གདམ་ཁ་ %s།"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "གནད་སྡུད་སྣོད་ཐོ་ཚུ་ནང་ ནུས་ཅན་ལྡེ་མིག་ཡིག་སྣོད་ འཚོལ་མ་ཐོབ།"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "དུས་རྒྱུན་གྱི་ཡིག་སྣོད་ཅིག་མེན་པས།"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ཡིག་སྣོད་སྟོངམ་ཨིན་པས།"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ ལྡེ་མིག་-བེ་ལུ་དང་ སྡེ་ཚན་ བསམ་བཀོད་མེན་པའི་ གྱལ་རིམ་'%s' ཡོད། "
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "ནུས་མེད་ལསརིམ་མིང་:%s།"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་དེ་ སྡེ་ཚན་ཅིག་གི་ཐོག་ལས་ འགོ་མི་བཙུགས།"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "ནུས་མེད་ལསརིམ་མིང་:%s།"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ རྒྱབ་སྐྱོར་མེད་པའི་ ཨིན་ཀོ་ཌིང་'%s'ཡོད།"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ སྡེ་ཚན་ '%s' མིན་འདུག།"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ ལྡེ་མིག་'%s'མིན་འདུག"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ ཡུ་ཊི་ཨེཕ་-༨ མེད་པའི་ ལྡེ་མིག་'%s' བེ་ལུ་'%s' དང་བཅསཔ་སྦེ་འདུག"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ ཁ་བསྒྱུར་འབད་མ་ཚུགས་པའི་ བེ་ལུ་ཡོད་མི་ ལྡེ་མིག་ '%s'འདུག"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ ཁ་བསྒྱུར་འབད་མ་ཚུགས་པའི་ ལྡེ་མིག་'%s'སྡེ་ཚན་'%s' ནང་འདུག།"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་དེ་ལུ་ ལྡེ་མིག་'%s' སྡེ་ཚན་'%s' ནང་མིན་འདུག"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ གྱལ་རིམ་མཇུག་ལུ་ གྲོས་ཐར་འབད་མི་ཡིག་འབྲུ་འདུག"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "ལྡེ་མིག་ཡིག་སྣོད་ནང་ལུ་ ནུས་མེད་གྲོས་ཐར་འབྱུང་རིམ་ '%s' འདུག"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "བེ་ལུ་'%s'དེ་ ཨང་གྲངས་ཅིག་སྦེ་ ཁ་བསྒྱུར་འབད་མི་ཚུགས།"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ཧྲིལ་ཨང་བེ་ལུ་ ’%s’ དེ་ ཁྱབ་ཚད་ཀྱི་ཕྱི་ཁར་ཨིན་པས།"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "བེ་ལུ་'%s'དེ་ འཕུར་ལྡིང་ཨང་གྲངས་ཅིག་སྦེ་ ཁ་བསྒྱུར་འབད་མི་ཚུགས།"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "བེ་ལུ་'%s'དེ་ བུ་ལིན་ཅིག་སྦེ་ ཁ་བསྒྱུར་འབད་མི་ཚུགས།"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "ཤེས་མ་ཚུགས་པའི་གདམ་ཁ་ %s།"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "མིང་'%sའབད་མི་གློག་རིམ་གྱིས་ '%s དོན་ལུ་ དེབ་རྟགས་ཅིག་ཐོ་འགོད་མ་འབད་བས། "
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "ཡུ་ཨར་ཨའི་ ’%s’ གི་ ཧོསཊི་ནེམ་དེ་ ནུས་མེད་ཨིན་པས།"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "ནུས་མེད་ལསརིམ་མིང་:%s།"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "ནུས་མེད་ཀྱི་ ཧོསཊི་ནེམ།"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ཡིག་སྣོད་ ’%s’:%s གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’:%s གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’:%s གསར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "སྣོད་ཐོ་ '%s':%s ཁ་ཕྱེ་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "གདམ་ཁ་%s མིང་དཔྱད་འབད་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "ཡིག་ཆ་དེ་ ཁྱད་ཆོས་ཀྱི་མིང་ཅིག་གི་ནང་ན་ རེ་བ་མེད་པར་རྫོགས་སོ་ནུག"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "སྣོད་ཐོ་ '%s':%s ཁ་ཕྱེ་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "གཞི་བསྒྱུར་གྱི་སྐབས་འཛོལ་བ་ :%s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "གཞི་བསྒྱུར་གྱི་སྐབས་འཛོལ་བ་ :%s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "གྱལ་རིམ་ %d་: %s ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "གཞི་བསྒྱུར་གྱི་སྐབས་འཛོལ་བ་ :%s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "གདམ་ཁ་%s མིང་དཔྱད་འབད་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "དུས་རྒྱུན་གྱི་ཡིག་སྣོད་ཅིག་མེན་པས།"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "ནུས་མེད་ལསརིམ་མིང་:%s།"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "ཡུ་ཨར་ཨའི་ ’%s’ གི་ ཧོསཊི་ནེམ་དེ་ ནུས་མེད་ཨིན་པས།"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "ཡིག་སྣོད་ ’%s’: %s ལྷག་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "གྱལ་རིམ་ %d་: %s ལུ་འཛོལ་བ།"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "གདམ་ཁ་%s མིང་དཔྱད་འབད་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "གདམ་ཁ་%s མིང་དཔྱད་འབད་ནི་ལུ་འཛོལ་བ།"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "བརྡ་མཚོན་འགྲེལ་ལམ་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[ གདམ་ཁ... ] "
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "གདམ་ཁ་%s མིང་དཔྱད་འབད་ནི་ལུ་འཛོལ་བ།"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "ཡིག་སྣོད་ཐབས་ལམ་ བསྒྱུར་བཅོས་འབད་མ་ཚུགས་: fork() གིས་ %s ལུ་མ་བཏུབ།"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "ཡིག་སྣོད་ཐབས་ལམ་ བསྒྱུར་བཅོས་འབད་མ་ཚུགས་: waitpid() གིས་%s ལུ་མ་བཏུབ།"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "ཡིག་སྣོད་ཐབས་བསྒྱུར་བཅོས་འབདམ་ཚུགས་: chmod() མ་བཏུབ་:%s།"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "ཡིག་སྣོད་ཐབས་ལམ་ བསྒྱུར་བཅོས་འབད་མ་ཚུགས་: ཆ་ལག་དེ་ བརྡ་རྟགས་: %s གིས་ རྩ་གྲོལ་བཏང་ནུག"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "ཡིག་སྣོད་ཐབས་ལམ་ བསྒྱུར་བཅོས་འབད་མ་ཚུགས་: ཆ་ལག་དེ་ ཚུལ་མིན་ཐོག་ལས་ རྩ་གྲོལ་སོང་ནུག"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "ཡོག་འབྲུའི་ཆ་ཚན་ ‘%s’ ལས་ ‘%s’ ལུ་ གཞི་བསྒྱུར་འབད་ནི་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..5acfe58
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,1924 @@
+# translation of glib.HEAD.po to Greek
+# Greek translation of glib.
+# Copyright (C) 2002, 2004, 2006, 2009 Free Software Foundation, Inc.
+#
+# simos: 25 messages, initial translation
+# kostas: 03Dec2002, updated translation for Gnome 2.1x
+#
+# kostas: 90 messages, 06Nov2002, completed translation.
+# Simos Xenitellis <simos@hellug.gr>, 2002.
+# Kostas Papadimas <pkst@gmx.net>, 2002.
+# Kostas Papadimas <pkst@gnome.org>, 2004, 2006.
+# Jennie Petoumenou <epetoumenou@gmail.com>, 2009.
+# Fotis Tsamis <ftsamis@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-04-02 00:15+0200\n"
+"Last-Translator: Thanos Lefteris <alefteris@gmail.com>\n"
+"Language-Team: Greek\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Μη αναμενόμενο γνώρισμα '%s' για το στοιχείο '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Το γνώρισμα '%s' του στοιχείου '%s' δεν βρέθηκε"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Απρόσμενη ετικέτα '%s', αναμενόταν ετικέτα '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Απρόσμενη ετικέτα '%s' μέσα σε '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Δεν μπορεί να βρεθεί έγκυρο αρχείο σελιδοδεικτών στους καταλόγους δεδομένων"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Υπάρχει ήδη ένας σελιδοδείκτης για το URI '%s'"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Δεν βρέθηκε σελιδοδείκτης για το URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Δεν αναγνωρίστηκε κανένας τύπος MIME στο σελιδοδείκτη για το URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+"Καμιά προσωπική σημαία δεν έχει αναγνωριστεί στο σελιδοδείκτη για το URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Δεν καθορίστηκαν ομάδες στο σελιδοδείκτη για το URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Καμιά εφαρμογή με όνομα '%s' δεν έχει καταχωρήσει σελιδοδείκτη για τη '%s'"
+
+# gconf/gconf-internals.c:2416
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Αποτυχία ανάπτυξης της γραμμής exec '%s' με URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Η μετατροπή από την ομάδα χαρακτήρων '%s' σε '%s' δεν υποστηρίζεται"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Δεν ήταν δυνατό το άνοιγμα μετατροπέα από '%s' σε '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Μη έγκυρη σειρά στην είσοδο μετατροπής"
+
+# gconf/gconftool.c:1181
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Σφάλμα κατά τη μετατροπή: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Ημιτελής σειρά χαρακτήρα στο τέλος της εισόδου"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Αδυναμία μετατροπής fallback '%s' σε codeset '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"Το URI '%s' δεν είναι ένα απόλυτο URI με την χρήση του σχήματος \"αρχείου\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Το URI τοπικού αρχείου '%s' μπορεί να μην περιέχει ένα '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Το URI '%s' δεν είναι έγκυρο"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Το όνομα συστήματος του URI '%s' δεν είναι έγκυρο"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Το URI '%s' περιέχει μη έγκυρους χαρακτήρες διαφυγής"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Το όνομα διαδρομής '%s' δεν αντιστοιχεί σε απόλυτη διαδρομή"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ακατάλληλο όνομα συστήματος"
+
+#
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Σφάλμα ανοίγματος καταλόγου '%s': %s"
+
+#
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Αδύνατη η διάθεση %lu bytes στην ανάγνωση αρχείου \"%s\""
+
+#
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Σφάλμα ανάγνωσης αρχείου '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Το αρχείο \"%s\" είναι υπερβολικά μεγάλο"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Αποτυχία ανάγνωσης από το αρχείο '%s': %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Αποτυχία ανοίγματος αρχείου '%s': %s"
+
+# gconf/gconfd.c:1701
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Αποτυχία λήψης ιδιοτήτων του αρχείου '%s': fstat() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Αδυναμία ανοίγματος αρχείου '%s': fdopen() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Αδυναμία μετονομασίας αρχείου '%s' σε '%s': g_rename() failed: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Αποτυχία δημιουργίας αρχείου '%s': %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Αδυναμία ανοίγματος αρχείου '%s' για εγγραφή: fdopen() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Αδυναμία εγγραφής αρχείου '%s': fwrite() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Αδυναμία εγγραφής αρχείου '%s': fflush() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Αδυναμία εγγραφής αρχείου '%s': fsync() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Αδυναμία κλεισίματος αρχείου '%s': fclose() απέτυχε: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Δεν είναι δυνατή η απομάκρυνση του υπάρχοντος αρχείου '%s': g_unlink() "
+"απέτυχε: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Το πρότυπο '%s' δεν είναι έγκυρο, θα πρέπει να περιέχει ένα '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Το πρότυπο '%s' δεν περιέχει XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+# gconf/gconf-internals.c:2416
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Αποτυχία ανάγνωσης συμβολικού συνδέσμου '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Οι συμβολικοί σύνδεσμοι δεν υποστηρίζονται"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Δεν ήταν δυνατό το άνοιγμα μετατροπέα από '%s' σε '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Δεν είναι δυνατή η raw ανάγνωση σε g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Εναπομείναντα δεδομένα που δεν έχουν μετατραπεί στο read buffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Το κανάλι τερματίζει σε ημιτελή χαρακτήρα"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Δεν είναι δυνατή η raw ανάγνωση σε g_io_channel_read_to_end"
+
+# gconf/gconf-internals.c:2416
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Αδυναμία ανοίγματος αρχείου '%s': open() απέτυχε: %s"
+
+# gconf/gconf-internals.c:2416
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Αδυναμία χαρτογράφησης αρχείου '%s': mmap() απέτυχε: %s"
+
+# gconf/gconfd.c:1676
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Σφάλμα στη γραμμή %d χαρακτήρας %d: "
+
+#
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Σφάλμα στη γραμμή %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Κενή καταχώρηση '&;'· έγκυρες οντότητες είναι: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Ο χαρακτήρας '%s' δεν επιτρέπεται στην αρχή ονόματος οντότητας, ο χαρακτήρας "
+"& ξεκινά οντότητα. Αν δεν επιθυμείτε να ξεκινήσετε οντότητα, χρησιμοποιήστε "
+"το συνδυασμό διαφυγής &amp; στη θέση του &"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Ο χαρακτήρας '%s' δεν επιτρέπεται να περιέχεται σε όνομα οντότητας"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Το όνομα οντότητας '%s' δεν είναι γνωστό"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Η οντότητα δεν τελειώνει με ερωτηματικό (;)· πιθανόν να χρησιμοποιήσατε το & "
+"χωρίς να θέλετε να ξεκινήσετε οντότητα - διαφυγή συμπλεκτικού χαρακτήρα ως "
+"&amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Αποτυχία ανάλυσης του '%-.*s', που θα έπρεπε να υπήρχε ένα ψηφίο μέσα στην "
+"αναφορά χαρακτήρα (&#234; για παράδειγμα) - ίσως το ψηφίο να είναι πολύ "
+"μεγάλο"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Η αναφορά χαρακτήρα'%-.*s' δεν κωδικοποιεί έναν επιτρεπόμενο χαρακτήρα"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Κενή αναφορά χαρακτήρα· πρέπει να περιέχει ένα ψηφίο όπως &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Η αναφορά χαρακτήρα δεν τελειώνει με ερωτηματικό (;). Πιθανόν να "
+"χρησιμοποιήσατε το & χωρίς να θέλετε να ξεκινήσετε μια οντότητα - διαφυγή "
+"συμπλεκτικού χαρακτήρα ως &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Ημιτελής αναφορά οντότητας"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Ημιτελής αναφορά χαρακτήρα"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Μη έγκυρα κωδικοποιημένο κείμενο UTF-8 - overlong sequence"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Μη έγκυρα κωδικοποιημένο κείμενο UTF-8 - not a start char"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Μη έγκυρα κωδικοποιημένο κείμενο UTF-8 - not valid '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Το έγγραφο πρέπει να ξεκινάει με ένα στοιχείο (π.χ. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Το '%s' δεν είναι έγκυρος χαρακτήρας όταν ακολουθείται από ένα χαρακτήρα '<'."
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Περίεργος χαρακτήρας '%s', αναμενόταν ο χαρακτήρας '>' στο τέλος της "
+"ετικέτας του κενού-στοιχείου '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Περίεργος χαρακτήρας '%s', αναμενόταν ένα '=' μετά το όνομα γνωρίσματος '%s' "
+"του στοιχείου '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Περίεργος χαρακτήρας '%s', αναμενόταν ένας χαρακτήρας '>' ή '/' στο τέλος "
+"της ετικέτας έναρξης του στοιχείου '%s' ή προαιρετικά ένα γνώρισμα· πιθανόν "
+"να χρησιμοποιήσατε ένα μη έγκυρο χαρακτήρα σε ένα όνομα γνωρίσματος"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Περίεργος χαρακτήρας '%s', αναμενόταν ένα ανοικτό εισαγωγικό μετά το σημείο "
+"ίσον κατά την απόδοση τιμής για το γνώρισμα '%s' του στοιχείου '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Το '%s' δεν είναι έγκυρος χαρακτήρας ακολουθούμενος από χαρακτήρες '</'· το "
+"'%s' μπορεί να μην αρχίζει όνομα στοιχείου"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Το '%s' δεν είναι ένας έγκυρος χαρακτήρας ακολουθούμενος από το όνομα "
+"στοιχείου κλεισίματος '%s'· ο επιτρεπόμενος χαρακτήρας είναι '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Το στοιχείο '%s' έκλεισε, κανένα στοιχείο δεν είναι ανοικτό"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Το στοιχείο '%s' έκλεισε, αλλά το τρέχον ανοικτό στοιχείο είναι '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Το έγγραφο ήταν κενό ή περιέχει μόνο λευκό κενό"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Το έγγραφο τερματίστηκε απρόσμενα αμέσως μετά από μια ανοικτή γωνιακή "
+"παρένθεση '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Το έγγραφο τερματίστηκε απρόσμενα με στοιχεία ακόμα ανοικτά - '%s' ήταν το "
+"τελευταίο στοιχείο που ανοίχθηκε"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Το έγγραφο τερματίστηκε απρόσμενα, αναμενόταν μια παρένθεση κλεισίματος στο "
+"τέλος του tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Το έγγραφο τερματίστηκε απρόσμενα μέσα σε όνομα στοιχείου"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Το έγγραφο τερματίστηκε απρόσμενα μέσα σε όνομα γνωρίσματος"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Το έγγραφο τερματίστηκε απρόσμενα μέσα σε tag ανοίγματος στοιχείου."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Το έγγραφο τερματίστηκε απρόσμενα λόγω του ότι μετά του σημείου ίσον "
+"ακολουθεί ένα όνομα γνωρίσματος· δεν υπάρχει τιμή γνωρίσματος"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Το έγγραφο τερματίστηκε απρόσμενα μέσα σε τιμή γνωρίσματος"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Το έγγραφο τερματίστηκε απρόσμενα μέσα σε tag κλεισίματος για στοιχείο '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Το έγγραφο τερματίστηκε απρόσμενα μέσα σε σχόλιο ή εντολή σε διεργασία"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "κατεστραμμένο αντικείμενο"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "εσωτερικό σφάλμα ή κατεστραμμένο αντικείμενο"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ανεπάρκεια μνήμης"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "εξαντλήθηκε το όριο της ανίχνευσης προς τα πίσω"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"το υπόδειγμα περιέχει αντικείμενα που δεν υποστηρίζονται για μερικό ταίριασμα"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "εσωτερικό σφάλμα"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"οι αναφορές προς τα πίσω, σαν συνθήκες, δεν υποστηρίζονται για μερικό "
+"ταίριασμα"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "εξαντλήθηκε το όριο αναδρομής"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "εξαντλήθηκε το όριο του χώρου εργασίας για κενές συμβολοσειρές"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "μη έγκυρος συνδυασμός για σημαίες αλλαγής γραμμής"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "άγνωστο σφάλμα"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ στο τέλος του υποδείγματος"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c στο τέλος του υποδείγματος"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ημιτελής αναφορά χαρακτήρα μετά \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"δεν επιτρέπονται οι ακολουθίες διαφυγής (\\l, \\L, \\u, \\U) για την "
+"εναλλαγή μεταξύ πεζών και κεφαλαίων"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "οι αριθμοί είναι εκτός λειτουργίας στον προσδιοριστή {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "πολύ μεγάλος αριθμός στον προσδιοριστή {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "λείπει η τελική ] για την κλάση χαρακτήρων"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "μη έγκυρη escape sequence σε character class"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "εύρος σε λανθασμένη σειρά στην κλάση χαρακτήρων"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "τίποτα για επανάληψη"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "ημιτελής αναφορά χαρακτήρα μετά (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "μη αναγνωρίσιμος χαρακτήρας μετά το (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "ημιτελής αναφορά χαρακτήρα μετά (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "Οι κλάσεις με ονόματα κατά POSIX υποστηρίζονται μόνο εντός κλάσεων"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "λείπει η τελική )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") χωρίς άνοιγμα ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "τα (?R ή (?[+-]digits πρέπει να ακολουθούνται από )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "αναφορά σε ανύπαρκτο υπο-υπόδειγμα"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "λείπει η ) μετά από το σχόλιο"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "πολύ μεγάλη κανονική έκφραση"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "αποτυχία στη λήψη μνήμης"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "το lookbehind assertion δεν έχει σταθερό μήκος"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "λανθασμένη διατύπωση αριθμού ή ονόματος μετά το (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "η ομάδα υποθετικών περιέχει περισσότερους από δύο κλάδους"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "αναμένεται assertion μετά το (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "άγνωστο όνομα κλάσης POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "δεν υποστηρίζονται τα στοιχεία ταξινόμησης POSIX"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "η τιμή του χαρακτήρα στην ακολουθία \\x{...} είναι υπερβολικά μεγάλη"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "μη έγκυρη συνθήκη (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "δεν επιτρέπεται \\C στο lookbehind assertion"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+"η αναδρομική κλήση μπορεί να οδηγήσει σε επ' άπειρω επανάληψη του βρόγχου"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "λείπει το τελικό τμήμα από το όνομα του υπο-υποδείγματος"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "δύο υπο-υποδείγματα έχουν το ίδιο όνομα"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "κακοδιατυπωμένο \\P ή \\p αλληλουχία"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "άγνωστο όνομα ιδιότητας μετά το \\P ή το \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+"το όνομα του υπο-υποδείγματος είναι υπερβολικά μεγάλο (επιτρέπονται μέχρι 32 "
+"χαρακτήρες)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+"υπερβολικά μεγάλος αριθμός υπο-υποδειγμάτων (επιτρέπονται μέχρι 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "η οκταδική τιμή είναι μεγαλύτερη από \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "η ομάδα DEFINE περιέχει περισσότερους από έναν κλάδους"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "δεν επιτρέπεται η επανάληψη ομάδας DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "μη συνεκτικές επιλογές NEWLINE"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"το \\g δεν ακολουθείται από όνομα εντός αγκίστρων ή από μη μηδενικό αριθμό "
+"προαιρετικά εντός αγκίστρων"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "μη αναμενόμενη επανάληψη"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "overflow κώδικα"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "υπέρβαση μεταγλώττισης χώρου εργασίας"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "δε βρέθηκε το αναφερόμενο υπο-υπόδειγμα που είχε ελεγχθεί προηγουμένως"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Σφάλμα κατά την αντιστοίχιση της κανονικής έκφρασης %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Η βιβλιοθήκη PCRE έχει μεταγλωττιστεί χωρίς υποστήριξη UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"Η βιβλιοθήκη PCRE έχει μεταγλωττιστεί χωρίς υποστήριξη των ιδιοτήτων του UTF8"
+
+# gconf/gconfd.c:1676
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"Σφάλμα κατά τη μεταγλώττιση της κανονικής έκφρασης %s στον χαρακτήρα %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Σφάλμα κατά τη βελτιστοποίηση της κανονικής έκφρασης %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "αναμένεται δεκαεξαδικό ψηφίο ή '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "αναμένεται δεκαεξαδικό ψηφίο"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "λείπει το '<' από τη συμβολική αναφορά"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "ημιτελής συμβολική αναφορά"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "συμβολική αναφορά μηδενικού μήκους"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "αναμένεται ψηφίο"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "μη επιτρεπτή συμβολική αναφορά"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "τελικό '\\' που δεν αντιστοιχεί πουθενά"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "άγνωστη ακολουθία διαφυγής"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Σφάλμα κατά την ανάλυση του κειμένου αντικατάστασης \"%s\" στον χαρακτήρα %"
+"lu: %s"
+
+# gconf/gconf-internals.c:1577
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Το παρατιθέμενο αλφαριθμητικό δεν αρχίζει με εισαγωγικό σημείο"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Αταίριαστο ερωτηματικό στη γραμμή εντολών ή άλλο κείμενο που παρατίθεται από "
+"κέλυφος"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"Το κείμενο τερματίστηκε αμέσως μετά από χαρακτήρα '\\'. (Το κείμενο ήταν '%"
+"s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Το κείμενο τερματίστηκε πριν να βρεθεί ταιριαστή παράθεση για %c. (Το "
+"κείμενο ήταν '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Το κείμενο ήταν κενό (ή περιέχει μόνο λευκό κενό)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Αποτυχία ανάγνωσης δεδομένων από θυγατρική διεργασία"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Αποτυχία δημιουργίας σωλήνωσης για την επικοινωνία με θυγατρική διεργασία (%"
+"s)"
+
+# gconf/gconftool.c:881
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Αποτυχία ανάγνωσης από θυγατρική σωλήνωση (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Αποτυχία αλλαγής καταλόγου '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Αποτυχία εκτέλεσης θυγατρικής διεργασίας (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ακατάλληλο όνομα προγράμματος: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Μη έγκυρο όρισμα για %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Μη έγκυρη σειρά στο περιβάλλον: %s"
+
+#
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Μη έγκυρος κατάλογος εργασίας: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Αποτυχία εκτέλεσης βοηθητικού προγράμματος(%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Απρόσμενο σφάλμα στο g_io_channel_win32_poll() ανάγνωση δεδομένων από μια "
+"θυγατρική διεργασία"
+
+# gconf/gconf-internals.c:2416
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Αποτυχία ανάγνωσης δεδομένων από θυγατρική διεργασία (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Απρόσμενο σφάλμα στο select() ανάγνωσης δεδομένων από θυγατρική διεργασία (%"
+"s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Μη αναμενόμενο σφάλμα στη waitpid() (%s)"
+
+# gconf/gconf-internals.c:2416
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Αποτυχία δικράνωσης (%s)"
+
+# gconf/gconf-internals.c:2416
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Αποτυχία εκτέλεσης θυγατρικής διεργασίας \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"Αποτυχία προώθησης αποτελέσματος ή εισόδου της θυγατρικής διεργασίας (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Αποτυχία δικράνωσης θυγατρικής διεργασίας (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Άγνωστο σφάλμα κατά την εκτέλεση της θυγατρικής διεργασίας \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Αποτυχία ανάγνωσης επαρκών δεδομένων από θυγατρική σωλήνωση pid (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Ο χαρακτήρας είναι έξω από την εμβέλεια για UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Μη έγκυρη σειρά στην είσοδο μετατροπής"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Ο χαρακτήρας είναι έξω από την εμβέλεια για UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Χρήση:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ΕΠΙΛΟΓΗ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Επιλογές βοήθειας:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Εμφάνιση επιλογών βοήθειας"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Εμφάνιση όλων των επιλογών βοήθειας"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Επιλογές εφαρμογής:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Αδυναμία ανάλυσης integer value '%s' για %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Integer value '%s' για %s είναι εκτός εύρους"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Αδυναμία ανάλυσης της τιμής του double '%s' για %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Η τιμή του double '%s' για %s είναι εκτός εύρους"
+
+# gconf/gconftool.c:1181
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Σφάλμα επιλογής ανάλυσης %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Λείπει όρισμα για %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Άγνωστη επιλογή %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Δεν μπορεί να βρεθεί έγκυρο key file στους καταλόγους αναζήτησης"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Δεν είναι κανονικό αρχείο"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Το αρχείο είναι κενό"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Το key file περιέχει την γραμμή '%s' που δεν είναι key-value pair, group, ή "
+"comment"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Μη έγκυρο όνομα ομάδας: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Το key file δεν ξεκινάει με μια ομάδα"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ακατάλληλο όνομα κλειδιού: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Το key file περιέχει μη υποστηριζόμενη κωδικοποίηση '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Το key file δεν έχει ομάδα '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Το key file δεν έχει κλειδί '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Το key file περιέχει ένα κλειδί '%s' με τιμή '%s' που δεν είναι UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Το key file περιέχει key '%s' που η τιμή του δεν μπορεί να ερμηνευθεί."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Το key file περιέχει key '%s' στην ομάδα '%s' που η τιμή του δεν μπορεί να "
+"ερμηνευθεί."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Το key file δεν έχει key '%s' στην ομάδα '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Το key file περιέχει escape character στο τέλος της γραμμής"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "To key file περιέχει χαρακτήρες μη έγκυρα escaped '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Η τιμή '%s' δεν μπορεί να ερμηνευθεί ως ένας αριθμός."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Integer value '%s' είναι εκτός εύρους"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Η τιμή '%s' δεν μπορεί να ερμηνευθεί ως αριθμός κινητής υποδιαστολής."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Η τιμή '%s' δεν μπορεί να ερμηνευθεί ως boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Η τιμή που διαβιβάστηκε στο %s είναι υπερβολικά μεγάλη"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Η ροή έχει ήδη κλείσει"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Η λειτουργία ακυρώθηκε"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Άγνωστος τύπος"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s τύπος αρχείων"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "τύπος %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Μη αναμενόμενο πρόωρο τέλος ροής"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Ανώνυμο"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Το αρχείο επιφάνειας εργασίας δεν αναφέρει συγκεκριμένο πεδίο Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Αδυναμία εύρεσης του τερματικού που απαιτείται για την εφαρμογή"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Αδυναμία δημιουργίας φακέλου ρυθμίσεων εφαρμογής %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Αδυναμία δημιουργίας φακέλου ρυθμίσεων MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Αδυναμία δημιουργίας αρχείου επιφάνειας εργασίας %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Προσαρμοσμένος ορισμός του %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ο οδηγός δεν υποστηρίζει τη λειτουργία εξαγωγής"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ο οδηγός δεν υποστηρίζει αναζήτηση πολυμέσων"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Δεν είναι δυνατός ο χειρισμός της έκδοσης %d της κωδικοποίησης GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Λανθασμένος αριθμός token (%d) στην κωδικοποίηση GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+"Δεν είναι δυνατός ο χειρισμός της έκδοσης %d της κωδικοποίησης GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Λανθασμένος αριθμός token (%d) στην κωδικοποίηση GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Αναμενόταν GEmblem για το GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Δεν υποστηρίζεται η λειτουργία"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Δεν υπάρχει η περιέχουσα προσάρτηση"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Αδύνατη η αντιγραφή επί καταλόγου"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Αδύνατη η αντιγραφή καταλόγου επί καταλόγου"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Το αρχείο προορισμού υπάρχει"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Αδύνατη η αναδρομική αντιγραφή καταλόγου"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Αδύνατη η αντιγραφή του ειδικού αρχείου"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Μη έγκυρη τιμή συμβολικού συνδέσμου"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Δεν υποστηρίζεται η ύπαρξη απορριμάτων"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Τα ονόματα των αρχείων δεν επιτρέπεται να περιέχουν '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ο τόμος δεν υποστηρίζει την προσάρτηση"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Δεν έχουν οριστεί εφαρμογές για το χειρισμό αυτού του αρχείου"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Ο μετρητής είναι κλειστός"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Εκκρεμεί μία ενέργεια του μετρητή αρχείων"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Ο μετρητής αρχείων έχει ήδη κλείσει"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "αρχείο"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Το αρχείο που περιέχει το εικονίδιο"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+"Δεν είναι δυνατός ο χειρισμός της έκδοσης %d της κωδικοποίησης GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Λανθασμένη μορφή των δεδομένων εισόδου του GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Η ροή δεν υποστηρίζει το query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Δεν υποστηρίζεται η αναζήτηση εντός της ροής"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Δεν επιτρέπεται η κοπή για τη ροή εισόδου"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Δεν υποστηρίζεται η κοπή για τη ροή"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Λανθασμένος αριθμός token (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Δεν υπάρχει τύπος για το όνομα κλάσης %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Ο τύπος %s δεν υποστηρίζει τη διεπαφή GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Ο τύπος %s δεν είναι καταχωρημένος"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Λανθασμένη μορφή του αριθμού έκδοσης: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Ο τύπος %s δεν υποστηρίζει from_tokens() στη διεπαφή GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+"Δεν είναι δυνατός ο χειρισμός της παρεχόμενης έκδοσης της κωδικοποίησης του "
+"εικονιδίου"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Η ροή εισόδου δεν υποστηρίζει την ανάγνωση"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Εκκρεμεί μία ενέργεια για τη ροή"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Δε βρέθηκε ο τύπος monitor του προεπιλεγμένου τοπικού καταλόγου"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Μη έγκυρο όνομα αρχείου: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Σφάλμα λήψης πληροφοριών συστήματος αρχείων: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Αδύνατη η μετονομασία του καταλόγου root"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Σφάλμα μετονομασίας αρχείου: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Αδύνατη η μετονομασία του αρχείου, το όνομα αρχείου υπάρχει ήδη"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Μη έγκυρο όνομα αρχείου"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Σφάλμα ανοίγματος αρχείου: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Αδυναμία ανοίγματος καταλόγου"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Σφάλμα αφαίρεσης αρχείου: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Σφάλμα μεταφοράς αρχείου στα απορρίμματα: %s"
+
+# gconf/gconf-internals.c:2416
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Αποτυχία δημιουργίας καταλόγου απορριμμάτων %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Αδυναμία εύρεσης καταλόγου ανώτατου επιπέδου για τα απορρίμματα"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Αδύνατη η εύρεση ή δημιουργία του καταλόγου απορριμμάτων"
+
+# gconf/gconf-internals.c:2416
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Αποτυχία δημιουργίας αρχείου πληροφοριών απορριμμάτων: %s"
+
+# gconf/gconf-internals.c:2416
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Αδύνατη η μεταφορά του αρχείου στα απορρίμματα: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Σφάλμα δημιουργίας καταλόγου: %s"
+
+# gconf/gconftool.c:1181
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Σφάλμα δημιουργίας συμβολικού συνδέσμου: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Σφάλμα κατά τη μετακίνηση του αρχείου: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Αδύνατη η μετακίνηση καταλόγου επί καταλόγου"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Απέτυχε η δημιουργία αντιγράφου ασφαλείας"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Σφάλμα αφαίρεσης του αρχείου προορισμού: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Δεν υποστηρίζεται η μετακίνηση μεταξύ προσαρτήσεων"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Η τιμή του γνωρίσματος δεν επιτρέπεται να είναι κενή"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Μη έγκυρος τύπος γνωρίσματος (αναμενόταν αλφαριθμητικό)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Μη έγκυρο εκτεταμένο όνομα γνωρίσματος"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Σφάλμα ορισμού εκτεταμένου ονόματος γνωρίσματος '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Σφάλμα δήλωσης αρχείου '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (μη έγκυρη κωδικοποίηση)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Σφάλμα δήλωσης περιγραφέα αρχείου: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Μη έγκυρος τύπος γνωρίσματος (αναμένεται uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Μη έγκυρος τύπος γνωρίσματος (αναμένεται uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Μη έγκυρος τύπος γνωρίσματος (αναμένεται byte string)"
+
+# gconf/gconftool.c:1181
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Σφάλμα κατά τη ρύθμιση των δικαιωμάτων: %s"
+
+# gconf/gconftool.c:1181
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Σφάλμα κατά τη ρύθμιση του ιδιοκτήτη: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "ο συμβολικός σύνδεσμος δεν επιτρέπεται να είναι κενός"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Σφάλμα κατά τον ορισμό του συμβολικού συνδέσμου: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Σφάλμα κατά τον ορισμό του συμβολικού συνδέσμου: το αρχείο δεν είναι "
+"συμβολικός σύνδεσμος"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Το περιεχόμενο SELinux δεν επιτρέπεται να είναι κενό"
+
+# gconf/gconftool.c:1181
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Σφάλμα κατά τη ρύθμιση του περιεχομένου SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "Το SELinux δεν έχει ενεργοποιηθεί στο σύστημά σας"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Δεν υποστηρίζεται ο ορισμός του γνωρίσματος %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Σφάλμα ανάγνωσης από το αρχείο: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Σφάλμα αναζήτησης στο αρχείο: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Σφάλμα κατά το κλείσιμο του αρχείου: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Δε βρέθηκε ο τύπος monitor του προεπιλεγμένου τοπικού αρχείου"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Σφάλμα κατά την εγγραφή στο αρχείο: %s"
+
+# gconf/gconftool.c:1181
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Σφάλμα αφαίρεσης παλαιού αντιγράφου συνδέσμου: %s"
+
+#
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Σφάλμα δημιουργίας αντιγράφου ασφαλείας: %s"
+
+#
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Σφάλμα μετονομασίας προσωρινού αρχείου: %s"
+
+#
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Σφάλμα κοπής (truncating) αρχείου: %s"
+
+#
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Σφάλμα ανοίγματος αρχείου '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Το αρχείο προορισμού είναι κατάλογος"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Το αρχείο προορισμού δεν είναι κανονικό αρχείο"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Το αρχείο τροποποιήθηκε εξωτερικά"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Σφάλμα αφαίρεσης παλαιού αρχείου: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Μη έγκυρο GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ακατάλληλη αίτηση seek"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Δεν είναι δυνατή η κοπή του GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Υπέρβαση του μέγιστου ορίου δεδομένων πίνακα"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Δεν είναι δυνατή η αλλαγή διαστάσεων της ροής εξόδου μνήμης"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Απέτυχε η αλλαγή διαστάσεων της ροής εξόδου μνήμης"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "η προσάρτηση δεν υποστηρίζει την αποπροσάρτηση"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "η προσάρτηση δεν υποστηρίζει την εξαγωγή"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "η προσάρτηση δεν υποστηρίζει την επανάληψη της προσάρτησης"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "η προσάρτηση δεν υποστηρίζει το μάντεμα του τύπου περιεχομένων"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"η προσάρτηση δεν υποστηρίζει το μάντεμα του τύπου σύγχρονων περιεχομένων"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Η ροή εξόδου δεν υποστηρίζει την εγγραφή"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Η ροή πηγής έχει ήδη κλείσει"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "όνομα"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Το όνομα του εικονιδίου"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "ονόματα"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Πίνακας που περιέχει τα ονόματα των εικονιδίων"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "χρήση των προεπιλεγμένων εφεδρικών"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Αν θα χρησιμοποιούνται τα προεπιλεγμένα εφεδρικά που προκύπτουν από τη "
+"συντόμευση του ονόματος στους χαρακτήρες '-'. Αγνοεί όλα τα ονόματα μετά το "
+"πρώτο, αν έχουν δοθεί πολλαπλά ονόματα."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+"Δεν είναι δυνατός ο χειρισμός της έκδοσης %d της κωδικοποίησης GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Περιγραφέας αρχείου"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Ο περιγραφέας αρχείου από τον οποίο θα γίνει η ανάγνωση"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Κλείσιμο περιγραφέα αρχείου"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Αν θα κλείσει ο περιγραφέας αρχείου όταν κλείσει η ροή"
+
+#
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Σφάλμα ανάγνωσης από unix: %s"
+
+#
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Σφάλμα κλεισίματος unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Root συστήματος αρχείων"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Ο περιγραφέας αρχείου στον οποίο θα γίνει η εγγραφή"
+
+# gconf/gconftool.c:1181
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Σφάλμα εγγραφής σε unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ο τόμος δεν υποστηρίζει την εξαγωγή"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Αδυναμία εύρεσης εφαρμογής"
+
+# gconf/gconftool.c:1181
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Σφάλμα εκκίνησης εφαρμογής: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs δεν υποστηρίζονται"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "οι αλλαγές στις συσχετίσεις δεν υποστηρίζονται στα win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Η δημιουργία συσχέτισης δεν υποστηρίζεται σε win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "να μην αποκρύπτονται οι εγγραφές"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "χρήση αναπτυγμένης μορφής λιστών"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ΑΡΧΕΙΟ...]"
diff --git a/po/en_CA.po b/po/en_CA.po
new file mode 100644
index 0000000..ad420db
--- /dev/null
+++ b/po/en_CA.po
@@ -0,0 +1,1837 @@
+# English/Canada translation of glib.
+# Copyright (C) 2004-2005 Adam Weinberger <adamw@gnome.org>
+# This file is distributed under the same licence as the glib package.
+# Adam Weinberger <adamw@gnome.org>, 2004, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-08-27 16:20-0400\n"
+"Last-Translator: Adam Weinberger <adamw@gnome.org>\n"
+"Language-Team: Canadian English <adamw@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Unexpected attribute '%s' for element '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attribute '%s' of element '%s' not found"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Unexpected tag '%s'; tag '%s' expected"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Unexpected tag '%s' inside '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "No valid bookmark file found in data dirs"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "A bookmark for URI '%s' already exists"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "No bookmark found for URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "No MIME type defined in the bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "No private flag has been defined in bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "No groups set in bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "No application with name '%s' registered a bookmark for '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Failed to expand exec line '%s' with URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Conversion from character set '%s' to '%s' is not supported"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Could not open converter from '%s' to '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Invalid byte sequence in conversion input"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Error during conversion: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Partial character sequence at end of input"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Cannot convert fallback '%s' to codeset '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "The URI '%s' is not an absolute URI using the \"file\" scheme"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "The local file URI '%s' may not include a '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "The URI '%s' is invalid"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "The hostname of the URI '%s' is invalid"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "The URI '%s' contains invalidly escaped characters"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "The pathname '%s' is not an absolute path"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Invalid hostname"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Error opening directory '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Could not allocate %lu bytes to read file \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Error reading file '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Failed to read from file '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Failed to open file '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Failed to get attributes of file '%s': fstat() failed: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Failed to open file '%s': fdopen() failed: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Failed to create file '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Failed to open file '%s' for writing: fdopen() failed: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Failed to close file '%s': fclose() failed: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Existing file '%s' could not be removed: g_unlink() failed: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Template '%s' invalid, should not contain a '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Template '%s' does not contain XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Failed to read the symbolic link '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolic links not supported"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Could not open converter from '%s' to '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Cannot do a raw read in g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Leftover unconverted data in read buffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Channel terminates in a partial character"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Cannot do a raw read in g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Failed to open file '%s': open() failed: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Failed to map file '%s': mmap() failed: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Error on line %d char %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Error on line %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand is not supposed to be an entity, escape "
+"it as &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Character '%s' is not valid inside an entity name"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entity name '%s' is not known"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Character reference '%-.*s' does not encode a permitted character"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Empty character reference; should include a digit such as &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Unfinished entity reference"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Unfinished character reference"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Invalid UTF-8 encoded text - overlong sequence"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Invalid UTF-8 encoded text - not a start char"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Invalid UTF-8 encoded text - not valid '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Document must begin with an element (e.g. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Odd character '%s', expected a '>' character to end the start tag of element "
+"'%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' was closed, no element is currently open"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' was closed, but the currently open element is '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Document was empty or contained only whitespace"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Document ended unexpectedly just after an open angle bracket '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Document ended unexpectedly inside an element name"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Document ended unexpectedly inside an attribute name"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Document ended unexpectedly inside an element-opening tag."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Document ended unexpectedly while inside an attribute value"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Document ended unexpectedly inside the close tag for element '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Document ended unexpectedly inside a comment or processing instruction"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "corrupted object"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "internal error or corrupted object"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "out of memory"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "backtracking limit reached"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "the pattern contains items not supported for partial matching"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "internal error"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "back references as conditions are not supported for partial matching"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "recursion limit reached"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "workspace limit for empty substrings reached"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "invalid combination of newline flags"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "unknown error"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ at end of pattern"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c at end of pattern"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "unrecognized character follows \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numbers out of order in {} quantifier"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "number too big in {} quantifier"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "missing terminating ] for character class"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "invalid escape sequence in character class"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "range out of order in character class"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nothing to repeat"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "unrecognized character after (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "unrecognized character after (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "unrecognized character after (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named classes are supported only within a class"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "missing terminating )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") without opening ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R or (?[+-]digits must be followed by )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "reference to non-existent subpattern"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "missing ) after comment"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regular expression too large"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "failed to get memory"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind assertion is not fixed length"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "malformed number or name after (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "conditional group contains more than two branches"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assertion expected after (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "unknown POSIX class name"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX collating elements are not supported"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "character value in \\x{...} sequence is too large"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "invalid condition (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C not allowed in lookbehind assertion"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "recursive call could loop indefinitely"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "missing terminator in subpattern name"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "two named subpatterns have the same name"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "malformed \\P or \\p sequence"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "unknown property name after \\P or \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "subpattern name is too long (maximum 32 characters)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "too many named subpatterns (maximum 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "octal value is greater than \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE group contains more than one branch"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "repeating a DEFINE group is not allowed"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inconsistent NEWLINE options"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "unexpected repeat"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "code overflow"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran compiling workspace"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "previously-checked referenced subpattern not found"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Error while matching regular expression %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE library is compiled without UTF8 support"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE library is compiled without UTF8 properties support"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Error while compiling regular expression %s at char %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Error while optimizing regular expression %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimal digit or '}' expected"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimal digit expected"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "missing '<' in symbolic reference"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "unfinished symbolic reference"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "zero-length symbolic reference"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "digit expected"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "illegal symbolic reference"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "stray final '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "unknown escape sequence"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Error while parsing replacement text \"%s\" at char %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Quoted text does not begin with a quotation mark"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Unmatched quotation mark in command line or other shell-quoted text"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Text ended just after a '\\' character. (The text was '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Text ended before matching quote was found for %c. (The text was '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Text was empty (or contained only whitespace)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Failed to read data from child process"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Failed to create pipe for communicating with child process (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Failed to read from child pipe (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Failed to change to directory '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Failed to execute child process (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Invalid program name: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Invalid string in argument vector at %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Invalid string in environment: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Invalid working directory: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Failed to execute helper program (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Failed to read data from child process (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Unexpected error in select() reading data from a child process (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Unexpected error in waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Failed to fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Failed to execute child process \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Failed to redirect output or input of child process (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Failed to fork child process (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Unknown error executing child process \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Failed to read enough data from child pid pipe (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Character out of range for UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Invalid sequence in conversion input"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Character out of range for UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Usage:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Help Options:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Show help options"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Show all help options"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Application Options:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Cannot parse integer value '%s' for %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Integer value '%s' for %s out of range"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Cannot parse double value '%s' for %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Double value '%s' for %s out of range"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Error parsing option %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Missing argument for %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Unknown option %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Valid key file could not be found in search dirs"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Not a regular file"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "File is empty"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Invalid group name: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Key file does not start with a group"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Invalid key name: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Key file contains unsupported encoding '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Key file does not have group '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Key file does not have key '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Key file contains key '%s' with value '%s' which is not UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Key file contains key '%s' which has value that cannot be interpreted."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Key file does not have key '%s' in group '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Key file contains escape character at end of line"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Key file contains invalid escape sequence '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Value '%s' cannot be interpreted as a number."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Integer value '%s' out of range"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Value '%s' cannot be interpreted as a float number."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Value '%s' cannot be interpreted as a boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Too large count value passed to %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Stream is already closed"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operation was cancelled"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Unknown type"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s filetype"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s type"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Unexpected early end-of-stream"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Unnamed"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop file didn't specify Exec field"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Unable to find terminal required for application"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Can't create user application configuration folder %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Can't create user MIME configuration folder %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Can't create user desktop file %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Custom definition for %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "drive doesn't implement eject"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "drive doesn't implement polling for media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operation not supported"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Containing mount does not exist"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Can't copy over directory"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Can't copy directory over directory"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Target file exists"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Can't recursively copy directory"
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "Can't copy over directory"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Invalid symlink value given"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Trash not supported"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "File names cannot contain '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volume doesn't implement mount"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "No application is registered as handling this file"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator is closed"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "File enumerator has outstanding operation"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "File enumerator is already closed"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "An array containing the icon names"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Stream doesn't support query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Seek not supported on stream"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Truncate not allowed on input stream"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Truncate not supported on stream"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Input stream doesn't implement read"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Stream has outstanding operation"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Unable to find default local directory monitor type"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Invalid filename %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Error getting filesystem info: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Can't rename root directory"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Error renaming file: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Can't rename file: filename already exist"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Invalid filename"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Error opening file: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Can't open directory"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Error removing file: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Error trashing file: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Unable to create trash dir %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Unable to find toplevel directory for trash"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Unable to find or create trash directory"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Unable to create trashing info file: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Unable to trash file: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Error opening directory '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Error making symbolic link: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Error moving file: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Can't move directory over directory"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Backup file creation failed"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Error removing target file: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Move between mounts not supported"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attribute value must be non-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Invalid attribute type (string expected)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Invalid extended attribute name"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Error setting extended attribute '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Error stating file '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (invalid encoding)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Error stating file descriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Invalid attribute type (uint32 expected)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Invalid attribute type (uint64 expected)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Invalid attribute type (byte string expected)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Error setting permissions: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Error setting owner: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink must be non-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Error setting symlink: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Error setting symlink: file is not a symlink"
+
+#: gio/glocalfileinfo.c:2074
+#, fuzzy
+msgid "SELinux context must be non-NULL"
+msgstr "symlink must be non-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error setting owner: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Setting attribute %s not supported"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Error reading from file: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Error seeking in file: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Error closing file: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Unable to find default local file monitor type"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Error writing to file: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Error removing old backup link: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Error creating backup copy: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Error renaming temporary file: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Error truncating file: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Error opening file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Target file is a directory"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Target file is not a regular file"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "The file was externally modified"
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Error removing file: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Invalid GSeekType supplied"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Invalid seek request"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Cannot truncate GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Reached maximum data array limit"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Memory output stream not resizable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Failed to resize memory output stream"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount doesn't implement unmount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount doesn't implement eject"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount doesn't implement remount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+#, fuzzy
+msgid "mount doesn't implement content type guessing"
+msgstr "mount doesn't implement unmount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+#, fuzzy
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount doesn't implement unmount"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Output stream doesn't implement write"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Source stream is already closed"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "name"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "The name of the icon"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "names"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "An array containing the icon names"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "use default fallbacks"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Error stating file descriptor: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Error reading from UNIX: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Error closing UNIX: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filesystem root"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Error writing to UNIX: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volume doesn't implement eject"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Can't find application"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Error launching application: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs not supported"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "association changes not supported on win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Association creation not supported on win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "do not hide entries"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "use a long listing format"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..423a7a0
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,1852 @@
+# English (British) translation.
+# Copyright (C) 2004 THE GLIB'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the GLIB package.
+# Gareth Owen <gowen72@yahoo.com> 2004
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GLIB\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-23 19:30+0000\n"
+"Last-Translator: David Lodge <dave@cirt.net>\n"
+"Language-Team:  <>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Unexpected attribute '%s' for element '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attribute '%s' of element '%s' not found"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Unexpected tag '%s', tag '%s' expected"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Unexpected tag '%s' inside '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "No valid bookmark file found in data dirs"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "A bookmark for URI '%s' already exists"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "No bookmark found for URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "No MIME type defined in the bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "No private flag has been defined in bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "No groups set in bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "No application with name '%s' registered a bookmark for '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Failed to expand exec line '%s' with URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Conversion from character set '%s' to '%s' is not supported"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Could not open converter from '%s' to '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Invalid byte sequence in conversion input"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Error during conversion: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Partial character sequence at end of input"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Cannot convert fallback '%s' to codeset '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "The URI '%s' is not an absolute URI using the \"file\" scheme"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "The local file URI '%s' may not include a '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "The URI '%s' is invalid"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "The hostname of the URI '%s' is invalid"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "The URI '%s' contains invalidly escaped characters"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "The pathname '%s' is not an absolute path"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Invalid hostname"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Error opening directory '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Could not allocate %lu bytes to read file \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Error reading file '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "File \"%s\" is too large"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Failed to read from file '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Failed to open file '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Failed to get attributes of file '%s': fstat() failed: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Failed to open file '%s': fdopen() failed: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Failed to create file '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Failed to open file '%s' for writing: fdopen() failed: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Failed to write file '%s': fflush() failed: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Failed to write file '%s': fsync() failed: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Failed to close file '%s': fclose() failed: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Existing file '%s' could not be removed: g_unlink() failed: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Template '%s' invalid, should not contain a '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Template '%s' doesn't contain XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Failed to read the symbolic link '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolic links not supported"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Could not open converter from '%s' to '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Can't do a raw read in g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Leftover unconverted data in read buffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Channel terminates in a partial character"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Can't do a raw read in g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Failed to open file '%s': open() failed: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Failed to map file '%s': mmap() failed: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Error on line %d char %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Error on line %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Character '%s' is not valid inside an entity name"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entity name '%s' is not known"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Character reference '%-.*s' does not encode a permitted character"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Empty character reference; should include a digit such as &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Unfinished entity reference"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Unfinished character reference"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Invalid UTF-8 encoded text - overlong sequence"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Invalid UTF-8 encoded text - not a start char"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Invalid UTF-8 encoded text - not valid '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Document must begin with an element (e.g. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Odd character '%s': expected a '>' character to end the empty-element tag '%"
+"s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' was closed, no element is currently open"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' was closed, but the currently open element is '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Document was empty or contained only whitespace"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Document ended unexpectedly just after an open angle bracket '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Document ended unexpectedly inside an element name"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Document ended unexpectedly inside an attribute name"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Document ended unexpectedly inside an element-opening tag."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Document ended unexpectedly while inside an attribute value"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Document ended unexpectedly inside the close tag for element '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Document ended unexpectedly inside a comment or processing instruction"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "corrupted object"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "internal error or corrupted object"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "out of memory"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "backtracking limit reached"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "the pattern contains items not supported for partial matching"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "internal error"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "back references as conditions are not supported for partial matching"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "recursion limit reached"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "workspace limit for empty substrings reached"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "invalid combination of newline flags"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "unknown error"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ at end of pattern"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c at end of pattern"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "unrecognised character following \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numbers out of order in {} quantifier"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "number too big in {} quantifier"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "missing terminating ] for character class"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "invalid escape sequence in character class"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "range out of order in character class"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nothing to repeat"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "unrecognised character after (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "unrecognised character after (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "unrecognised character after (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named classes are supported only within a class"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "missing terminating )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") without opening ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R or (?[+-]digits must be followed by )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "reference to non-existent subpattern"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "missing ) after comment"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regular expression too large"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "failed to get memory"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind assertion is not fixed length"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "malformed number or name after (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "conditional group contains more than two branches"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assertion expected after (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "unknown POSIX class name"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX collating elements are not supported"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "character value in \\x{...} sequence is too large"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "invalid condition (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C not allowed in lookbehind assertion"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "recursive call could loop indefinitely"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "missing terminator in subpattern name"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "two named subpatterns have the same name"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "malformed \\P or \\p sequence"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "unknown property name after \\P or \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "subpattern name is too long (maximum 32 characters)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "too many named subpatterns (maximum 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "octal value is greater than \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE group contains more than one branch"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "repeating a DEFINE group is not allowed"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inconsistent NEWLINE options"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "unexpected repeat"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "code overflow"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran compiling workspace"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "previously-checked referenced subpattern not found"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Error while matching regular expression %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE library is compiled without UTF8 support"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE library is compiled without UTF8 properties support"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Error while compiling regular expression %s at char %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Error while optimising regular expression %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimal digit or '}' expected"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimal digit expected"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "missing '<' in symbolic reference"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "unfinished symbolic reference"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "zero-length symbolic reference"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "digit expected"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "illegal symbolic reference"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "stray final '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "unknown escape sequence"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Error while parsing replacement text \"%s\" at char %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Quoted text doesn't begin with a quotation mark"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Unmatched quotation mark in command line or other shell-quoted text"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Text ended just after a '\\' character. (The text was '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Text ended before matching quote was found for %c. (The text was '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Text was empty (or contained only whitespace)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Failed to read data from child process"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Failed to create pipe for communicating with child process (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Failed to read from child pipe (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Failed to change to directory '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Failed to execute child process (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Invalid program name: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Invalid string in argument vector at %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Invalid string in environment: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Invalid working directory: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Failed to execute helper program (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Failed to read data from child process (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Unexpected error in select() reading data from a child process (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Unexpected error in waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Failed to fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Failed to execute child process \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Failed to redirect output or input of child process (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Failed to fork child process (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Unknown error executing child process \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Failed to read enough data from child pid pipe (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Character out of range for UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Invalid sequence in conversion input"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Character out of range for UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Usage:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Help Options:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Show help options"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Show all help options"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Application Options:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Cannot parse integer value '%s' for %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Integer value '%s' for %s out of range"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Cannot parse double value '%s' for %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Double value '%s' for %s out of range"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Error parsing option %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Missing argument for %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Unknown option %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Valid key file could not be found in search dirs"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Not a regular file"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "File is empty"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Invalid group name: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Key file does not start with a group"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Invalid key name: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Key file contains unsupported encoding '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Key file does not have group '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Key file does not have key '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Key file contains key '%s' with value '%s' which is not UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Key file contains key '%s' which has value that cannot be interpreted."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Key file does not have key '%s' in group '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Key file contains escape character at end of line"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Key file contains invalid escape sequence '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Value '%s' cannot be interpreted as a number."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Integer value '%s' out of range"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Value '%s' cannot be interpreted as a float number."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Value '%s' cannot be interpreted as a boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Too large count value passed to %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Stream is already closed"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operation was cancelled"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Unknown type"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s filetype"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s type"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Unexpected early end-of-stream"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Unnamed"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop file didn't specify Exec field"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Unable to find terminal required for application"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Can't create user application configuration folder %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Can't create user MIME configuration folder %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Can't create user desktop file %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Custom definition for %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "drive doesn't implement eject"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "drive doesn't implement polling for media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Can't handle version %d of GEmblem encoding"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Malformed number of tokens (%d) in GEmblem encoding"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Can't handle version %d of GEmblemedIcon encoding"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Expected a GEmblem for GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operation not supported"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Containing mount does not exist"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Can't copy over directory"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Can't copy directory over directory"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Target file exists"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Can't recursively copy directory"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Can't copy special file"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Invalid symlink value given"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Wastebasket not supported"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "File names cannot contain '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volume doesn't implement mount"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "No application is registered as handling this file"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator is closed"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "File enumerator has outstanding operation"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "File enumerator is already closed"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "file"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "The file containing the icon"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Can't handle version %d of GFileIcon encoding"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Malformed input data for GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Stream doesn't support query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Seek not supported on stream"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Truncate not allowed on input stream"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Truncate not supported on stream"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Wrong number of tokens (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "No type for class name %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Type %s does not implement the GIcon interface"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Type %s is not classed"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Malformed version number: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Type %s does not implement from_tokens() on the GIcon interface"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Can't handle the supplied version of the icon encoding"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Input stream doesn't implement read"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Stream has outstanding operation"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Unable to find default local directory monitor type"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Invalid filename %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Error getting filesystem info: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Can't rename root directory"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Error renaming file: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Can't rename file, filename already exist"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Invalid filename"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Error opening file: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Can't open directory"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Error removing file: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Error moving file to wastebasket: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Unable to create wastebasket dir %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Unable to find toplevel directory for wastebasket"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Unable to find or create wastebasket directory"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Unable to create wastebasket info file: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Unable to move file to the wastebasket: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Error creating directory: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Error making symbolic link: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Error moving file: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Can't move directory over directory"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Backup file creation failed"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Error removing target file: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Move between mounts not supported"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attribute value must be non-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Invalid attribute type (string expected)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Invalid extended attribute name"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Error setting extended attribute '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Error stating file '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (invalid encoding)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Error stating file descriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Invalid attribute type (uint32 expected)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Invalid attribute type (uint64 expected)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Invalid attribute type (byte string expected)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Error setting permissions: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Error setting owner: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink must be non-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Error setting symlink: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Error setting symlink: file is not a symlink"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux context must be non-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error setting SELinux context: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux is not enabled on this system"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Setting attribute %s not supported"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Error reading from file: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Error seeking in file: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Error closing file: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Unable to find default local file monitor type"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Error writing to file: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Error removing old backup link: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Error creating backup copy: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Error renaming temporary file: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Error truncating file: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Error opening file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Target file is a directory"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Target file is not a regular file"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "The file was externally modified"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Error removing old file: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Invalid GSeekType supplied"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Invalid seek request"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Cannot truncate GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Reached maximum data array limit"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Memory output stream not resizable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Failed to resize memory output stream"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount doesn't implement unmount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount doesn't implement eject"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount doesn't implement remount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount doesn't implement content type guessing"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount doesn't implement synchronous content type guessing"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Output stream doesn't implement write"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Source stream is already closed"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "name"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "The name of the icon"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "names"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "An array containing the icon names"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "use default fallbacks"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Can't handle version %d of GThemedIcon encoding"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "File descriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "The file descriptor from which to read"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Close file descriptor"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Whether to close the file descriptor when the stream is closed"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Error reading from unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Error closing unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filesystem root"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "The file descriptor to which to write"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Error writing to unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volume doesn't implement eject"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Can't find application"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Error launching application: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs not supported"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "association changes not supported on win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Association creation not supported on win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "do not hide entries"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "use a long listing format"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Error parsing option %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Could not change file mode: fork() failed: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Could not change file mode: waitpid() failed: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Could not change file mode: chmod() failed: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Could not change file mode: Child terminated by signal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Could not change file mode: Child terminated abnormally"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Conversion from character set `%s' to `%s' is not supported"
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..1ab431c
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,1851 @@
+# Esperanto translation of glib.
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Charles Voelger <cvoelger@dweasel.com>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.3.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2003-07-01 15:10-0500\n"
+"Last-Translator: Charles Voelger <cvoelger@dweasel.com>\n"
+"Language-Team: Esperanto <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Malbona signo '%s', unu '>' signo estas atendita post atributnomo '%s' "
+"deelemento '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Malsukcesis krei dosieron '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konverto de signaro '%s' el '%s' ne estas subtenata"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Ne eblas malfermi konvertilon de '%s' to '%s': %s"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Nevalida bitokosekvenco en konverta enigo"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Parta signosekvenco je enigofino"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ne povas konverti fallback '%s' al kodaro '%s'"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "La URI '%s' ne estas absolutan URI uzanta la dosiermodelo"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "La loka dosiera URI '%s' eble ne enhavas '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "La URI '%s' estas nevalida"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "La komputilnomo de la URI '%s' ne estas valida"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "La URI '%s' enhavas nevalidajn eskapajn signojn"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "La padnomo '%s' ne estas absolutan padon"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nevalida komputilnomo"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Eraro dum malfermado de dosierujo '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ne eblis akiri %lu bitokojn por lego de dosiero \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Malsukcesis legi de dosieron '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Malsukcesis malfermi dosieron '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Malsukcesis ricevi atributojn de dosiero '%s': fstat() malsukcesis: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Malsukcesis krei dosieron '%s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Ŝablono '%s' ne estas valida, ĝi devus ne enhavi '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Ŝablono '%s' ne finiĝas je XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, fuzzy, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Malsukcesis krei dosieron '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Ne eblis malfermi konvertilon de '%s al '%s: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ne povas fari krudan legon en g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Kroma nekonvertinta datumo en legbufro"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanalo finas kun parta signo"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ne povas fari krudan legon en g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Eraro ĉe linio %d signo %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Eraro ĉe linio %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "Malplena ero '&;'; validaj eroj estas : &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Signo '%s' ne estas valida en la komenco de eronomo; la & signo komencas unu "
+"ero;se la kaj-signo ne estas ero, eskapu ĝin kiel &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Signo '%s' ne estas valida en unu eronomo"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Eronomo '%s' ne estas konata"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Ero ne finis kun punktokomo; vi eble uzis kaj-signo sen voli komenci eron."
+"Eskapu kaj-signon kiel &amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Analizo de '%s' malsuksesis. Une cifero devus esti en la signoreferenco "
+"(&#234; ekzemple)- eble la cifero estas tro granda"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Signorefrenco '%s' ne faras kodigu permesatan signon"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Malplena signa referenco; devus enhavi ciferon kiel &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Signa referenco ne finis kun punktokomo; vi verŝajne uzas kaj-signon sen "
+"volikomenci eron - eskapu kaj-signon kiel &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nefinita erorefrenco"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nefinita signorefrenco"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Nevalida UTF-8 kodiginta teksto"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Nevalida UTF-8 kodiginta teksto"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Nevalida UTF-8 kodiginta teksto"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumento devas komenci kun elemento (ekz. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' ne estas valida signo post la signo '<'; ĝi ne eblas "
+"komcencielementnomon"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Malbona signo '%s', unu '>' signo estas atendita por fini la "
+"komencetikedonde elemento '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Malbona signo '%s', unu '>' signo estas atendita post atributnomo '%s' "
+"deelemento '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Malbona signo '%s', unu '>' aŭ '/' signo estas atendita por fini "
+"lakomencetikedon de elemento '%s' aŭ unu atributo; eble vi uzas nevalidan "
+"signon enunu atributnomo"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Malbona signo '%s', malferma citilo estas atendita post la egalsigno "
+"kiamdonita valoro por atributo '%s' de elemento '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' ne estas valida signo post la signoj '</'; '%s' ne eblas "
+"komcencielementnomon"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' ne estas valida signo post la ferma elementnomo '%s'; la valida signo "
+"estas'>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elemento '%s' estis fermita, neniu elemento estas malfermita"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Elemento '%s' estis fermita, sed la momente malfermita elemento estas '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumento estis malpena aŭ enhavis nur blankspaco"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumento neatendite finis post malfermi-angulkrampon '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumento neatendite finis kun elementoj ankoraŭ malfermi - '%s' estis la "
+"lasta elemento malfermita"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumento neatendite finis, atendis vidi etikedon finiĝanta je fermi-"
+"angulkrampo <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumento neatendite finis en elementa nomo"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumento neatendite finis en atributa nomo"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumento neatendite finis en elemento-malfermanta etikedo."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumento neatendite finis post le egalsigno sekvita de atributnomo; ne "
+"atributvaloro"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumento neatendite finis dum en atributvaloro"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokumento neatendite finis en la fermetikedo por elemento '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Dokumento neatendite finis en komento aŭ komputanta instrukcio"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Kanalo finas kun parta signo"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Nevalida bitokosekvenco en konverta enigo"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Nefinita signorefrenco"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Nefinita signorefrenco"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Nefinita signorefrenco"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Eraro ĉe linio %d signo %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Nefinita erorefrenco"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Citita teksto ne komencas je citilo"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Konvenita citilo en komandlinio aŭ alia programeto"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Teksto finis post '\\' signon. (La teksto estis '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Teksto finis antaŭ konvenan citilon por %c. (La teksto estis '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksto estis malplena (aŭ enhavis nur blankspacon)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Malsukesis legi datumon de procezido"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Malsukcesis krei dukton por komunikado kun procezido (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Malsukcesis legi de duktido (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Malsukcesis ŝanĝi al dosierujo '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Malsukcesis lanĉi procezidon (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Nevalida komputilnomo"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Nevalida sekvenco en konverta enigo"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Eraro dum malfermado de dosierujo '%s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Malsukcesis lanĉi helpant-programon"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Neatendita eraro dum g_io_channel_win32_poll() legado de datumo de procezido"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Malsukcesis legi datumon de procezido (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Neatendita eraro en select() dum datumlegado de procezido (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Neatendita eraro en waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Malsukcesis branĉiĝi (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Malsukcesis lanĉi procezidon \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Malsukcesis alidirekti enigon aŭ eligon de procezido (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Malsukcesis branĉiĝi procezidon (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nekonata eraro dum la lanĉando de la procezido \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Malsukcesis legi sufiĉe datumon de ida pid-dukto (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Signo ne estas en la UTF-8 intervalo"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Nevalida sekvenco en konverta enigo"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Signo ne estas en la UTF-16 intervalo"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Eraro dum konverto: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Nevalida komputilnomo"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Nevalida komputilnomo"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "La URI '%s' enhavas nevalidajn eskapajn signojn"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "La komputilnomo de la URI '%s' ne estas valida"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Nevalida komputilnomo"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Nevalida komputilnomo"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Malsukcesis krei dosieron '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Malsukcesis krei dosieron '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Malsukcesis krei dosieron '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Eraro dum malfermado de dosierujo '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokumento neatendite finis en atributa nomo"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Eraro dum malfermado de dosierujo '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Eraro ĉe linio %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Nevalida komputilnomo"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "La komputilnomo de la URI '%s' ne estas valida"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Eraro dum legado de dosiero '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Eraro ĉe linio %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Eraro dum konverto: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Eraro dum konverto: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Ne eblis akiri %lu bitokojn por lego de dosiero \"%s\""
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Malsukcesis malfermi dosieron '%s': fdopen() malsukcesis: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Konverto de signaro '%s' al '%s' ne estas subtenata"
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..e766d7a
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,1882 @@
+# translation of glib.HEAD.po to Español
+# Spanish translation of glib.
+# Copyright (C) 2001, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# José Antonio Salgueiro <joseantsa@eresmas.net>, 2001.
+# Germán Poo Caamaño <gpoo@ubiobio.cl>, 2002.
+# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
+# Jorge González <jorgegonz@svn.gnome.org>, 2007, 200, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-16 23:10+0100\n"
+"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Atributo inesperado «%s» para el elemento «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "El atributo «%s» del elemento «%s» no se ha encontrado"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Etiqueta «%s» inesperada, se esperaba la etiqueta «%s»"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Etiqueta «%s» inesperada dentro de «%s»"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"No se pudo encontrar ningún archivo de marcadores válido en los directorios "
+"de datos"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Ya existe un marcador para el URI «%s»"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "No se encontró un marcador para el URI «%s»"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Ningún tipo MIME definido en el marcador para la URI «%s»"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "No se ha definido ningún flag privado en el marcador para el URI «%s»"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "No se ha establecido ningún grupo en el marcador para el URI «%s»"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Ninguna aplicación con nombre «%s» registró un marcador para «%s»"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Falló la expansión de la la linea ejecutable «%s» con el URI «%s»"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+"La conversión desde el conjunto de caracteres «%s» a «%s» no está soportada"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "No se pudo abrir el conversor de «%s» a «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Hay una secuencia de bytes no válida en la entrada de conversión"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Falló durante la conversión: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Hay una secuencia parcial de caracteres en el final de la entrada"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "No se puede convertir el fallback «%s» al conjunto de códigos «%s»"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "El URI «%s» no es una URI absoluta utilizando el esquema «file»"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "El archivo local en la URI «%s» no debe incluir un «#»"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "El URI «%s» es inválida"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "El nombre del host de la URI «%s» es inválido"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "El URI «%s» contiene caracteres de escape inválidos"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "El nombre de la ruta «%s» no es una ruta absoluta"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "El nombre del host es inválido"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Falló al abrir el directorio «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "No se pueden asignar %lu bytes para leer el archivo «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Falló al leer el archivo «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "El archivo «%s» es demasiado grande"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Falló al leer del archivo «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Falló al abrir el archivo «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Falló al obtener los atributos del archivo «%s»: fstat() falló: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Falló al abrir el archivo «%s»: fdopen() falló: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Falló al renombrar el archivo «%s» a «%s»: g_rename() falló: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Falló al crear el archivo «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Falló al abrir el archivo «%s» para escritura: fdopen() falló: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Falló al escribir el archivo «%s»: falló fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Falló al escribir el archivo «%s»: falló fflush(): %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Falló al escribir el archivo «%s»: falló fsync(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Falló al cerrar el archivo «%s»: falló fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "El archivo existente «%s» no se pudo eliminar: g_unlink() falló: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "La plantilla «%s» es inválida, no debería contener un «%s»"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "La plantilla «%s» no contiene XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KiB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MiB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GiB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Falló al leer el enlace simbólico «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Enlaces simbólicos no soportados"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "No se pudo abrir el conversor de «%s» a «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"No se puede hacer una lectura en bruto (raw) en g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Se han dejado datos no convertidos en el búfer de lectura"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "El canal termina en un carácter parcial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"No se puede hacer una lectura en bruto (raw) en g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Falló al abrir el archivo «%s»: open() falló: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Falló al mapear el archivo «%s»: mmap() falló: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Error en la línea %d, carácter %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Error en la línea %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"La entidad '&;' está vacía; las entidades válidas son: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"El carácter «%s» no es válido al inicio del nombre de una entidad; el "
+"carácter «&» inicia una entidad; si el signo et ('&') no debiera ser una "
+"entidad, escápela como &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "El carácter «%s» no es válido dentro del nombre de una entidad"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "El nombre de la entidad «%s» es desconocido"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"La entidad no termina con un punto y coma; probablemente utilizó el carácter "
+"\"&\" sin la intención de indicar una entidad, escape el signo \"&\" como "
+"&amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Falló al analizar «%-.*s», el cual debería tener un dígito dentro de un "
+"carácter de referencia( por ejemplo &#234;) - tal vez el dígito es demasiado "
+"grande"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "El carácter de referencia «%-.*s» no codifica un carácter permitido"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"El carácter de referencia está vacío; debería incluir un dígito tal como "
+"&#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"El carácter de referencia no termina con punto y coma; probablemente utilizó "
+"un carácter «&» sin pretender iniciar una entidad, escape el carácter \"&\" "
+"como &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referencia de entidad sin terminar"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referencia de carácter sin terminar"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Texto codificado como UTF-8 inválido; secuencia demasiado larga"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Texto codificado como UTF-8 inválido; sin carácter de comienzo"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Texto codificado como UTF-8 inválido; «%s» no válido"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "El documento debe comenzar con un elemento (por ejemplo: <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"«%s» no es un carácter válido a continuación del carácter '<'; no debe "
+"iniciar un nombre de elemento"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Carácter «%s» impropio, se esperaba un carácter «>» para terminar la etiqueta "
+"vacía del elemento «%s»"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Carácter «%s» impropio, se esperaba el carácter '=' después del nombre de "
+"atributo «%s» del elemento «%s»"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Carácter «%s» impropio, se esperaba un carácter '>' o '/' para finalizar la "
+"etiqueta de inicio del elemento «%s» u opcionalmente un atributo; tal vez "
+"utilizó un carácter que no es válido en un nombre de atributo"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Carácter «%s» impropio, se esperaba una marca de apertura de comillas después "
+"del signo igual al darle valor al atributo «%s» del elemento «%s»"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"«%s» no es un carácter válido a continuación de los caracteres '</'; «%s»  no "
+"debe iniciar un nombre de elemento"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"«%s» no es un carácter válido a continuación del nombre del elemento de "
+"cierre «%s»; el carácter permitido es '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "El elemento «%s» fue cerrado, no existe ningún elemento abierto"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"El elemento «%s» fue cerrado, pero el elemento que está abierto actualmente "
+"es «%s»"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "El documento estaba vacío o sólo contenía espacios en blanco"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "El documento termina inesperadamente justo después de un '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"El documento termina inesperadamente con elementos todavía abiertos - «%s» "
+"fue el último elemento abierto"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"El documento termina inesperadamente, se esperaba un carácter '>' "
+"finalizando la etiqueta <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "El documento termina inesperadamente dentro de un nombre de elemento"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "El documento termina inesperadamente dentro de un nombre de atributo"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"El documento termina inesperadamente dentro de una etiqueta de apertura de "
+"elemento."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"El documento termina inesperadamente después de los signos igual que siguen "
+"al nombre de atributo; sin valor de atributo"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "El documento termina inesperadamente dentro del valor de un atributo"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"El documento termina inesperadamente dentro de la etiqueta de cierre del "
+"elemento «%s»"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"El documento termina inesperadamente dentro de un comentario o instrucción "
+"de proceso"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objeto corrupto"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "error interno u objeto corrupto"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "sin memoria"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "se alcanzó el límite de «backtracking»"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"el patrón contiene elementos no soportados para una coincidencia parcial"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "error interno"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"no se soportan referencias anteriores como condiciones para coincidencias "
+"parciales"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "se alcanzó el límite de recursividad"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "límite del espacio de trabajo cuando se alcanzan subcadenas vacías"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinación de banderas de nueva línea inválidas"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "error desconocido"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ al final del patrón"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c al final del patrón"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "carácter no reconocido después de \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"aquí no se permite escapar las letras (\\l, \\L, \\u, \\U) (mayúscula y "
+"minúscula)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "números fuera de rango en el cuantificador {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "número demasiado grande en el cuantificador {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "falta la terminación ] para la clase de carácter"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "secuencia de escape no válida en la clase de carácter"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "rango fuera de orden en la clase de carácter"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nada que repetir"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "carácter no reconocido después de (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "carácter no reconocido después de (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "carácter no reconocido después de (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "Sólo se soportan las clases con nombres POSIX dentro de una clase"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "falta el ) de terminación"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") sin ( que lo abriera"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R o los dígitos (?[+-] deben estar seguidos por )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referencia a un subpatrón no existente"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "falta ) después del comentario"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "la expresión regular es demasiado larga"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "falló al obtener memoria"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "la comprobación «lookbehind» no tiene una longitud fija"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "número o nombre mal formado después de (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "el grupo condicional contiene más de dos ramas"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "se esperaba una comprobación después de (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nombre de clase POSIX desconocido"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "los elementos POSIX recopilados no están soportados"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "el valor del carácter en la secuencia \\x{…} es demasiado largo"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condición no válida (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "no se permite \\C en comprobaciones «lookbehind»"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "una llamada recursiva podrá crear un bucle infinito"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "falta el terminador en el nombre del subpatrón"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dos subpatrones tienen el mismo nombre"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "secuencia \\P o \\p mal formada"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nombre de propiedad desconocido después de \\P o \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "el nombre del subpatrón es demasiado largo (máximo 32 caracteres)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "demasiados subpatrones con nombre (máximo 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "el valor octal es mayor que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "el grupo DEFINE contiene más de una rama"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "no se permite repetir un grupo DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opciones NEWLINE inconsistentes"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g no está seguido por un nombre de llave o un número distinto de cero con "
+"una llave opcional"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetición inesperada"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "desbordamiento de código"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "se desbordó el espacio de trabajo de compilación"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "no se encontró el subpatrón referenciado anteriormente comprobado"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Error al coincidir con la expresión regular %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "La biblioteca PCRE está compilada sin soporte para UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"La biblioteca PCRE está compilada sin soporte para las propiedades de UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Error al compilar la expresión regular %s en el carácter %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Error al optimizar la expresión regular %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "se esperaba un dígito hexadecimal o «}»"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "se esperaba un dígito hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "falta «<» en la referencia simbólica"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "referencia de símbolo sin terminar"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referencia simbólica de longitud cero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "se esperaba un dígito"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "referencia simbólica ilegal"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "«\\» al final de la cadena"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "secuencia de escape desconocida"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Error al analizar el texto de reemplazo «%s» en el carácter %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "El texto entrecomillado no empieza por un signo de comilla"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Falta una comilla en la línea de comandos o en otro texto con comillas tipo "
+"shell"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "El texto termina justo después de un carácter '\\'. (El texto era «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"El texto terminó antes de que se encontrase la comilla correspondiente con %"
+"c. (El texto era «%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "El texto está vacío (o sólo contiene espacios en blanco)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Falló al leer los datos desde un proceso hijo"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Falló en la creación de un conducto (pipe) para comunicarse con el proceso "
+"hijo (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Falló al leer desde el conducto hijo (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Falló al cambiar al directorio «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Falló al ejecutar el proceso hijo (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nombre de programa inválido: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Cadena inválida en el vector del argumento en %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Cadena inválida en el entorno: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Directorio de trabajo inválido: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Falló al ejecutar el programa auxiliar (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Falló inesperado en g_io_channel_win32_poll() al leer datos desde un proceso "
+"hijo"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Falló en la lectura de datos desde el proceso hijo (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Falló inesperado en select() leyendo datos desde el proceso hijo (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Falló inesperado en waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Falló al bifurcar (fork) (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Falló al ejecutar el proceso hijo «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Falló al redirigir la salida o la entrada del proceso hijo (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Falló al bifurcar el proceso hijo (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Falló desconocido al ejecutar el proceso hijo «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Falló al leer suficientes datos desde el conducto del pid hijo (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "El carácter se sale del rango para UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Secuencia inválida en la entrada de conversión"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "El carácter se sale del rango para UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Uso:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCIÓN…]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opciones de ayuda:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Mostrar opciones de ayuda"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Muestra todas las opciones de ayuda"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opciones de la aplicación:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "No se puede analizar el valor entero «%s» para %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "El valor entero «%s» para %s está fuera de rango"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "No se puede analizar el valor doble «%s» para %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "El valor doble «%s» para %s está fuera de rango"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Error al analizar la opción: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Falta un argumento para %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opción desconocida %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"No se pudo encontrar la clave de archivo válida en los directorios de "
+"búsqueda"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "No es un archivo regular"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "El archivo está vacío"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"El archivo de claves contiene la línea «%s» que no es un par valor-clave, "
+"grupo o comentario"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nombre de grupo no válido: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "El archivo de claves no empieza por un grupo"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nombre de clave no válida: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "El archivo de claves contiene una codificación «%s» no soportada"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "El archivo de claves no tiene el grupo «%s»"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "El archivo de claves no tiene la clave «%s»"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"El archivo de claves contiene la clave  «%s» con el valor «%s» el cual no es "
+"UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"El archivo de claves contiene la clave «%s» que tiene un valor que no puede "
+"interpretarse."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"El archivo de claves contiene la clave «%s» en el grupo «%s» que tiene un "
+"valor que no puede interpretarse."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "El archivo de claves no tiene la clave «%s» en el grupo «%s»"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+"El archivo de claves contiene un carácter de escape al final de la línea"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "El archivo de claves contiene la secuencia de escape inválida «%s»"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "El valor «%s» no puede interpretarse como un número."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "El valor entero «%s» está fuera de rango"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "El valor «%s» no puede interpretarse como un número de coma flotante."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "El valor «%s» no puede interpretarse como un booleano."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "El valor de conteo pasado a %s es demasiado largo"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "El flujo ya se cerró"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Se canceló la operación"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipo desconocido"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "tipo de archivo %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "tipo %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Final de flujo inesperadamente prematuro"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sin nombre"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "El archivo de escritorio no especificó el campo Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Imposible encontrar el terminal requerido por la aplicación"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"No se puede crear la carpeta de configuración de la aplicación %s del "
+"usuario: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "No se puede crear la carpeta de configuración MIME %s del usuario: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "No se puede crear el archivo de escritorio %s del usuario"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definición personalizada para %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "la unidad no implementa la expulsión"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "la unidad no implementa el sondeo para medios"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "No se puede manejar la versión %d de la codificación GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Número de tokens (%d) mal formados en la codificación GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "No se puede manejar la versión %d de la codificación GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Número de tokens (%d) mal formados en la codificación GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Se esperaba un GEmblem para GEmblemedIconjo"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operación no soportada"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "El punto de montaje contenido no existe"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "No se puede copiar sobre el directorio"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "No se puede copiar directorio sobre directorio"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "El archivo destino ya existe"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "No se puede copiar el directorio recursivamente"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "No se puede copiar el archivo especial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "El valor del enlace simbólico dado no es válido"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "No se soporta mover a la papelera"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Los nombres de archivo no pueden contener «%c»"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "el volumen no implementa el montado"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "No hay ninguna aplicación registrada para manejar este archivo"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "El enumerador está cerrado"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "El enumerador del archivo tiene una operación excepcional"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "El enumerador del archivo ya está cerrado"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "archivo"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "El archivo que contiene el icono"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "No se puede manejar la versión %d de la codificación GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Datos de entrada mal formados para GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "El flujo no soporta query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "No se permite buscar en el flujo"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "No se permite truncar en el flujo de entrada"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "No se soporta el truncamiento en el flujo"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Número de tokens (%d) incorrecto"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "No existe el tipo para la clase de nombre %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "El tipo %s no implementa la interfaz GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "El tipo %s no tiene clase"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Número de versión mal formado: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "El tipo %s no implementa from_tokens() en la interfaz GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+"No se puede manejar la versión proporcionada de la codificación de icono"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "El flujo de entrada no implementa la lectura"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "El flujo tiene una operación excepcional"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"No se pudo encontrar el tipo de monitorización del directorio local "
+"predeterminado"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nombre de archivo no válido %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Error al obtener la información del sistema de archivos: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "No se puede renombrar el directorio raíz"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Error al renombrar el archivo: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "No se puede renombrar el archivo, el nombre ya existe"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nombre de archivo inválido"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Error al abrir el archivo: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "No se puede abrir el directorio"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Error al eliminar el archivo: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Error al mover a la papelera el archivo: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "No se pudo crear el directorio papelera %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+"No se pudo encontrar el directorio de nivel superior para mover a la papelera"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "No se pudo encontrar o crear el directorio de la papelera"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "No se pudo crear la información de papelera para el archivo: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "No se pudo enviar a la papelera el archivo: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Error al crear el directorio: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Error al crear el enlace simbólico: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Error al mover el archivo: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "No se puede mover un directorio sobre un directoro"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Falló la creación del archivo de respaldo"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Error al eliminar el archivo destino: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "No se soporta mover archivos entre puntos de montaje"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "El valor del atributo de ser no nulo"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipo de atributo no válido (se esperaba una cadena)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nombre extendido del atributo no válido"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Error al establecer el atributo extendido «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Error al mostrar información del estado del archivo «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codificación no válida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr ""
+"Error al mostrar la información del estado del descriptor del archivo: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipo de atributo no válido (se esperaba uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipo de atributo no válido (se esperaba uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipo de atributo no válido (se esperaba una cadena byte)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Error al establecer permisos: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Error al establecer el propietario: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "el enlace simbólico debe ser no nulo"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Error al establecer el enlace simbólico: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Error al establecer el enlace simbólico: el archivo no es un enlace simbólico"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "El contexto SELinux debe ser no nulo"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error al establecer el contexto SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux no está activado en este sistema"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Establecer el atributo %s no está soportado"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Error al leer del archivo: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Error al buscar en el archivo: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Error al cerrar el archivo: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+"No se pudo encontrar el tipo de monitorización del archivo local "
+"predeterminado"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Error al escribir en el archivo: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Error al eliminar el enlace de respaldo antiguo: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Error al crear una copia de respaldo: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Error al renombrar el archivo temporal: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Error al truncar el archivo: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Error al abrir el archivo «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "El archivo destino es un directorio"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "El archivo destino no es un archivo regular"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "El archivo se modificó externamente"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Error al eliminar el archivo antiguo: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Se proporcionó un GSeekType no válido"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Petición de búsqueda no válida"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "No se puede truncar GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Se alcanzó el límite máximo del array de datos"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "El flujo de salida de la memoria no es redimensionable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Falló al redimensionar el flujo de salida de la memoria"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "el punto de montaje no implementa desmontado"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "el punto de montaje no implementa la expulsión"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "el punto de montaje no implementa remontado"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "el punto de montaje no implementa averiguación del tipo de contenido"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"el punto de montaje no implementa averiguación del tipo de contenido síncrona"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "El flujo de salida no implementa la escritura"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "El flujo de origen ya está cerrado"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nombre"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "El nombre del icono"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nombres"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Un array que contiene los nombres de los iconos"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "usar valores predeterminados de reserva"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Indica si se debe usar los valores de reserva encontrados al acortar el "
+"nombre en los caracteres «-». Si se proporcionan varios nombres los ignora "
+"después del primero."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "No se puede manejar la versión %d de la codificación GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descriptor del archivo"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "El descriptor del archivo del que leer"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Elegir el descriptor del archivo"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+"Indica si se debe cerrar el descriptor del archivo cuando se cierra el flujo"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Error al leer de unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Error al cerrar unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Sistema de archivos raíz"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "El descriptor de archivo en el que escribir"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Error al escribir en unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "el volumen no implementa la expulsión"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "No se puede encontrar la aplicación"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Error al analizar la aplicación: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "No se soportan URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "los cambios de asociación no están soportados en win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "La creación de asociación no está soportada en win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "no ocultar entradas"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "usar un formato de listado largo"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ARCHIVO…]"
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 0000000..0b59c76
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,1831 @@
+# GLib'i eesti tõlge.
+# Estonian translation of GLib.
+#
+# Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2008 The GNOME Project.
+# This file is distributed under the same license as the GLib package.
+#
+# Allan Sims <allsi@eau.ee>, 2002.
+# Ivar Smolin <okul@linux.ee>, 2005-2008.
+# Priit Laes <amd@store20.com>, 2005, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GLib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-08-23 14:50+0300\n"
+"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
+"Language-Team: Estonian <gnome-et@linux.ee>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Ootamatu rekvisiit '%s' elemendile '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Elemendil '%2$s' ei leitud rekvisiiti '%1$s'"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Ootamatu silt '%s', oodati silti '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%2$s' on ootamatu silt '%1$s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Andmekataloogidest ei leitud korrektset järjehoidjafaili"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI-le '%s' on juba järjehoidja olemas"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI-le '%s' ei leitud järjehoidjat"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' järjehoidjas pole MIME tüüpe määratud"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' järjehoidjas pole privaatlippu kirjeldatud"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' järjehoidjas pole gruppe määratud"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Rakendus nimega '%s' pole '%s' kohta järjehoidjat registreerinud"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Tõrge rea '%s' käivitamisel koos URI-ga '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Teisendamine koodistikust '%s' koodistikku '%s' ei ole toetatud"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Konverterit '%s'-st '%s'-ks pole võimalik avada"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Vigane baidijada sisendi teisendamisel"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Viga teisendamisel: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Osaline märgijada sisendi lõpus"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Taandresiimi '%s' pole võimalik teisendada kooditabelisse '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' ei ole failiskeemi (\"file\") jaoks absoluutne URI"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Kohaliku faili URI '%s' ei või sisaldada märki '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' on vigane"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s' hostinimi on vigane"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' sisaldab vigaseid paomärke"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Rajanimi '%s' ei ole absoluutne rada"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Vigane hostinimi"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Viga kataloogi '%s' avamisel: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ei saa eraldada %lu faili \"%s\" lugemiseks"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Viga failist '%s' lugemisel: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Fail \"%s\" on liiga suur"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Tõrge failist '%s' lugemisel: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Tõrge faili '%s' avamisel: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Tõrge faili '%s' rekvisiitide hankimisel: fstat() nurjus: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Tõrge faili '%s' avamisel: fdopen() nurjus: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Tõrge faili '%s' ümbernimetamisel nimega '%s': g_rename() nurjus: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Tõrge faili '%s' loomisel: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Tõrge faili '%s' avamisel kirjutamiseks: fdopen() nurjus: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Tõrge faili '%s' kirjutamisel: fwrite() nurjus: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Tõrge faili '%s' kirjutamisel: fwrite() nurjus: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Tõrge faili '%s' kirjutamisel: fwrite() nurjus: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Tõrge faili '%s' sulgemisel: fclose() nurjus: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Olemasolevat faili '%s' pole võimalik eemaldada: g_unlink() nurjus: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Mall '%s' vigane, see ei tohiks sisaldada '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Mall '%s' ei sisalda XXXXXX-i"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Tõrge nimeviida '%s' lugemisel: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Nimeviidad ei ole toetatud"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Konverterit '%s'-st '%s'-ks pole võimalik avada: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ei saa teostada toorest lugemise g_io_channel_read_line_string'i sees"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Lugemispuhvrisse jäi teisendamata andmeid"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanali katkestus poole märgi pealt"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ei saa teostada toorest lugemise g_io_channel_read_to_end'i sees"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Tõrge faili '%s' avamisel: open() nurjus: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Tõrge faili '%s' avamisel: mmap() nurjus: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Viga real %d märgil %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Viga real %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Avastati tühi olem '&'; lubatud olemid on: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Märk '%s' ei ole olemi nime alguses lubatud. Märk & alustab olemit, kui see "
+"ampersand pole mõeldud olemiks, märgi see kui &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Märk '%s' ei ole olemi nimes lubatud"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Olemi nimi '%s' on tuntmatu"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Olem ei lõppenud semikooloniga; kõige tõenäolisemalt ei kavatsenud sa "
+"ampersandi kasutades olemit alustada - märgi see kui &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Viga '%-.*s' parsimisel. See võiks olla märgiviites olev number (näiteks "
+"&#234;) - võibolla on number liiga suur"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Märgiviide '%-.*s' ei teisendu lubatud märgiks"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tühi märgiviide, see peaks sisaldama numbrit, näiteks &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Märgiviide ei lõpe semikooloniga. Enamasti kasutatakse ampersand märki ilma "
+"kavatsuseta olemit alustada - märgi see kui &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Lõpetamata viide olemile"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Lõpetamata viide märgile"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Vigaselt kodeeritud UTF-8 tekst - liigpikk jada"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Vigaselt kodeeritud UTF-8 tekst - puuduv algusmärk"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Vigaselt kodeeritud UTF-8 tekst - vigane '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument peab algama elemendiga (nt: <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Märk '%s' ei ole märgi '<' järel lubatud, see võib mitte olla elemendi nimi"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Veider märk '%s', elemendi '%s' lõpusildi lõpetamiseks oodatakse märki '>'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Veider märk '%1$s', pärast elemendi '%3$s' tunnust nimega '%2$s' oodatakse "
+"märki '='"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Veider märk '%s', oodatakse märke '>' või '/', mis tähitaksid elemendi '%s' "
+"sildi algust või lõppu, ühe võimalusena ka rekvisiiti. Võib-olla kasutad sa "
+"rekvisiidi nimes vigast märki?"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Veider märk '%s', oodatakse võrdusmärgi järel tulevat jutumärki, mis aitaks "
+"rekvisiidile '%s' väärtust seada (element '%s')"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Märk '%s' ei ole märkide '</' järel lubatud, '%s' võib mitte olla elemendi "
+"nimi"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Märk '%s' ei ole lubatud märk elemendi '%s' nime sulgemise järel, lubatud "
+"märk on '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' on suletud, avatud elemente ei ole"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' on suletud, kuid praegu avatud element on '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument on tühi või sisaldab ainult tühja ruumi"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument lõppes ootamatult ilma avatud nurksulgu '<' sulgemata"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument lõppes ootamatult ilma, et avatud elemente sulgemata - '%s' oli "
+"viimane avatud element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument lõppes ootamatult, sildi <%s/> lõpetamiseks loodetakse näha "
+"nurksulgu"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument lõppes ootamatult elemendi nime sees"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument lõppes ootamatult rekvisiidi nime sees"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument lõppes ootamatult elemendi avamise sildi sees"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument lõppes ootamatult pärast rekvisiidi nime järel olevat võrdusmärki, "
+"rekvisiidi väärtus on puudu"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument lõppes ootamatult keset attribuudi väärtust"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokument lõppes ootamatult elementi '%s' sulgemissildi sees"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Dokument lõppes ootamatult kommentaaride või töötlemis juhiste sees"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "rikutud objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "sisemine viga või rikutud objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "mälu lõppes"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "tagasiviidete limiit saavutatud"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"muster sisaldab kirjeid, mis pole osalise vastavuse otsingu puhul toetatud"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "sisemine viga"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "osaliste vastete otsimisel pole tingimuslikud tagasiviited toetatud"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "suurim rekursioonide arv saavutatud"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "töötsooni suurim tühjade alamstringide arv saavutatud"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "vigane reavahetusmärgiste kombinatsioon"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "tundmatu viga"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ mustri alguses"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c mustri lõpus"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "märgiklassil puudub sulgev ]"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "märgiklassis on vigane paojada"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "pole midagi korrata"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "tundmatu märk pärast (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "tundmatu märk pärast (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "tundmatu märk pärast (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX-i nimelised klassid on toetatud ainult klassi sees"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "puudub lõpetav sulg )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ilma algussuluta ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "viide olematule alammustrile"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "kommentaari järel puudub sulg )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regulaaravaldis on liiga suur"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "tõrge mälu hankimisel"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "tundmatu POSIX-klassi nimi"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-i koondavad elemendid pole toetatud"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "märgi väärtus \\x{...} jadas on liiga suur"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "vigane tingimus (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursiivne kutsung võib jääda lõpmatusse tsüklisse"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "alammustri nimes puudub katkestaja"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "kaks nimelist alammustrit on sama nimega"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "vigane \\P või \\p jada"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "tundmatu omaduse nimi \\P või \\p järel"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "alammustri nimi on liiga pikk (maksimaalselt 32 märki)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "liiga palju alammustreid (suurim lubatud arv on 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "kaheksandväärtus on suurem kui \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE grupi kordused pole lubatud"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "NEWLINE võtmed pole kooskõlalised"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "ootamatu kordus"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "koodi ületäitumine"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Viga regulaaravaldise %s vastavuse otsimisel: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE teek on kompileeritud ilma UTF8 toeta"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE teek on kompileeritud ilma UTF8 omaduste toeta"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Viga regulaaravaldise %s kompileerimisel %d. märgi juures: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Viga regulaaravaldise %s optimeerimisel: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "oodati kuueteistkümnendsüsteemi numbrit või '}' märki"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "oodati kuueteistkümnendsüsteemi numbrit"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "puuduv '<' märgiviites"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "lõpetamata märgiviide"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "nullpikkusega märgiviide"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "oodati numbrit"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "keelatud märgiviide"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "liigne lõpp '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "tundmatu paojada"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Viga asendusteksti \"%s\" parsimisel märgi %lu kohal: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Tsiteeritav tekst ei alga jutumärgiga"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Vastavuseta jutumärk käsureal või kestprogrammi tsiteeritud tekstis"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst lõppes pärast '\\' märki. (Tekst on '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Tekst lõppes enne kui leiti vastav jutumärk %c jaoks. (Tekst oli '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekst puudus (või sisaldas ainult tühja ruumi)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Tõrge andmete lugemisel alamprotsessilt"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Tõrge toru loomisel alamprotsessiga suhtlemiseks (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Tõrge alamprotsessi torust lugemisel (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Tõrge kataloogi '%s' muutmisel (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Tõrge alamprotsessi käivitamisel (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Vigane programmi nimi: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Vigane string argumendivektoris %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Vigane string keskkonnamuutujates: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Vigane töökataloog: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Tõrge abiprogrammi käivitamisel (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Ootamatu viga, kui g_io_channel_win32_poll() funktsioon luges "
+"lapsprotsessilt andmeid"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Tõrge andmete lugemisel alamprotsessilt (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Ootamatu funktsiooni select() viga andmete lugemisel alamprotsessilt (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Ootamatu viga funktsioonis waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Viga poolitamisel funktsiooniga fork() (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Tõrge alamprotsessi \"%s\" käivitamisel (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Tõrge alamprotsessi sisendi või väljundi ümbersuunamisel (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Tõrge alamprotsessi poolitamisel funktsiooniga fork() (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Tundmatu viga alamprotsessi \"%s\" käivitamisel"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Tõrge piisavate andmete lugemisel lapsprotsessi torust (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Märk on väljaspool UTF-8 ulatust"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Vigane jada sisendi teisendamisel"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Märk on väljaspool UTF-16 ulatust"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Kasutamine:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[VÕTI...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Abiteabe võtmed:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Abiteabe võtmete näitamine"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Kõikide abiteabe võtmete näitamine"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Rakenduse võtmed:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Täisarvulist väärtust '%s' pole võimalik %s jaoks parsida"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Täisarv '%s' %s jaoks on väljaspool lubatud piire"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Arvväärtust '%s' pole võimalik %s jaoks parsida"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Arv '%s' %s jaoks on väljaspool lubatud piire"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Viga võtme parsimisel: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Puuduv argument %s'i jaoks"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Tundmatu võti %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Sobivat võtmefaili pole võimalik otsingukataloogidest leida"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Pole tavaline fail"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Fail on tühi"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Võtmefail sisaldab rida '%s', mis ei ole võti-väärtus paar, grupp ega ka "
+"kommentaar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Vigane grupi nimi: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Võtmefail ei alga grupiga"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Vigane võtme nimi: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Võtmefail sisaldab toetamata kodeeringut '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Võtmefail ei sisalda gruppi '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Võtmefail ei sisalda võtit '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Võtmefail sisaldab võtit '%s', mille väärtus '%s' pole UTF-8 kodeeringus"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Võtmefail sisaldab võtit '%s', mille väärtus pole võimalik kasutada."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Võtmefail sisaldab võtit '%s' grupis '%s' aga selle väärtust pole võimalik "
+"kasutada"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Võtmefail ei sisalda võtit '%s' grupis '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Võtmefail sisaldab rea lõpus paomärki"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Võtmefail sisaldab vigast paojada '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Väärtust '%s' pole võimalik numbrilise väärtusena kasutada."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Täisarvu väärtus '%s' on väljaspool lubatud piire"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Väärtust '%s' pole võimalik ujukomalise väärtusena kasutada."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Väärtust '%s' pole võimalik tõeväärtusena kasutada."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Voog on juba suletud"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operatsioon tühistati"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tundmatu liik"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Ootamatult varajane voolõpp"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Nimeta"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Töölauafail ei määra Exec-välja"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+"Rakenduse käivitamiseks vajalikku terminalprogrammi pole võimalik leida"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kasutaja rakenduse seadistustekataloogi %s pole võimalik luua: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kasutaja MIME-seadistustekataloogi %s pole võimalik luua: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kasutaja töölauafaili %s pole võimalik luua"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "seade ei toeta väljastamist"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "seade ei toeta meediumi olemasolu pollimist"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operatsioon ei ole toetatud"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Sihtfail on olemas"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kataloogi pole võimalik rekursiivselt kopeerida"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Määrati vigane nimeviida väärtus"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Failinimed ei tohi sisaldada märki '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Selle faili käsitlemiseks pole rakendust registreeritud"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Nummerdaja on suletud"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Failinummerdaja on juba suletud"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fail"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Fail, mis sisaldab ikooni"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Voog ei toeta query_info't"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Sisendvoo kärpimine pole lubatud"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Andmevoo kärpimine pole toetatud"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Vigane failinimi %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Viga failisüsteemi andmete hankimisel: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Juurkataloogi nime pole võimalik muuta"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Viga faili nime muutmisel: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Faili pole võimalik ümber nimetada, failinimi on juba olemas"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Vigane failinimi"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Viga avamisel: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kataloogi pole võimalik avada"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Viga faili eemaldamisel: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Viga faili prügikasti viskamisel: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Prügikataloogi %s pole võimalik luua: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Prügikasti ülemise taseme kataloogi pole võimalik leida"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Prügikasti kataloogi pole võimalik leida või luua"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Viga kataloogi loomisel: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Viga nimeviida loomisel: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Viga faili ümbertõstmisel: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Tõrge varufaili loomisel"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Viga sihtfaili eemaldamisel: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Rekvisiidi väärtus ei tohi olla NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Vigane rekvisiidi tüüp (oodatakse stringi)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Vigane laiendatud rekvisiidi nimi"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Viga laiendatud rekvisiidi '%s' seadmisel: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Viga faili '%s' kohta andmete hankimisel: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (vigane kodeering)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Viga failideskriptori kohta andmete hankimisel: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Vigane rekvisiidi tüüp (oodatakse tüüpi uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Vigane rekvisiidi tüüp (oodatakse tüüpi uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Vigane rekvisiidi tüüp (oodatakse baitstringi)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Viga pääsuõiguste määramisel: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Viga omaniku seadmisel: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "nimeviit ei tohi olla NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Viga nimeviida seadmisel: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Viga nimeviida seadmisel: fail pole nimeviide"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinuxi kontekst ei tohi olla NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Viga SELinuxi konteksti seadmisel: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux pole selles süsteemis lubatud"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Rekvisiidi %s seadmine pole toetatud"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Viga failist lugemisel: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Viga faili sulgemisel: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Failimonitori vaikimisi liiki pole võimalik leida"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Viga faili kirjutamisel: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Viga vana varuviite eemaldamisel: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Viga varukoopia loomisel: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Viga ajutise faili nime muutmisel: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Viga faili kärpimisel: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Viga faili '%s' avamisel: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Sihtfail on kataloog"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Sihtfail pole tavaline fail"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Viga faili eemaldamisel: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream'i pole võimalik kärpida"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Masiivi suurima suuruse piir ületati"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Lähtevoog on juba suletud"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nimi"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Ikooni nimi"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nimed"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Ikoonide nimesid sisaldav massiiv"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Viga failideskriptori kohta andmete hankimisel: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Viga unix'ist lugemisel: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Viga unix'i sulgemisel: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Failisüsteemi juurikas"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Viga unix'isse kirjutamisel: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Rakendust pole võimalik leida"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Viga rakenduse käivitamisel: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI-d ei ole toetatud"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "seose muutmine pole win32 keskkonnas toetatud"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Seose loomine pole win32 keskkonnas toetatud"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "kirjeid ei peideta"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "pika nimekirjavormingu kasutamine"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FAIL...]"
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..54ed307
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,1873 @@
+# translation of eu.po to Basque
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Joseba Bidaurrazaga van Dierdonck <jepibi-san@ej-gv.es>, 2001.
+# Hizkuntza Politikarako Sailburuordetza <hizpol@ej-gv.es>, 2004.
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2004, 2005, 2006, 2008, 2009.
+# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: eu\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 18:55+0100\n"
+"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
+"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%2$s' elementuaren ustekabeko '%1$s'atributua"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%2$s' elementuaren '%1$s' atributua ez da aurkitu"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Ustekabeko '%s' etiketa, '%s' espero zen"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%2$s' barruan ustekabeko '%1$s' etiketa"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Ezin izan da baliozko laster-marken fitxategia aurkitu datuen direktorioan"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "'%s' URIaren laster-marka badago lehenedik ere"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Ez da '%s' URIaren laster-markarik aurkitu"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Ez dago '%s' URIaren laster-markan MIME-motarik definituta"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "'%s' URIaren laster-markan ez dago bandera pribaturik definituta"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "'%s' URIaren laster-markan ez dago talderik ezarrita"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' izeneko aplikaziorik ez du erregistratu laster-markarik '%s'(e)n"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Huts egin du '%s' exekuzioko lerroa '%s' URIarekin hedatzean"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' karaktere-multzoa '%s' bihurtzea ez da onartzen"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Ezin izan da '%s'(e)tik %s(e)rako bihurtzailea ireki"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Byten sekuentzia baliogabea bihurketa-sarreran"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Errorea bihurtzean: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Karaktere-sekuentzia partziala sarreraren amaieran"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ezin da '%s' atzerapena '%s' kode-multzo bihurtu"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "'%s' URIa ez da \"fitxategi\"-eskema erabiltzen duen URI absolutua"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Baliteke '%s' URI fitxategi lokalak '#' ez edukitzea"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "'%s' URI baliogabea da"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "'%s' URIaren ostalari-izena baliogabea da"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "'%s' URIak ihes-karaktere baliogabeak ditu"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' bide-izena ez da bide-izen absolutua"
+
+#
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ostalari-izen baliogabea"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Errorea '%s' direktorioa irekitzean: %s "
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ezin izan dira %lu byte esleitu \"%s\" fitxategia irakurtzeko"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Errorea '%s' fitxategia irakurtzean: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "\"%s\" fitxategia handiegia da"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Ezin izan da '%s' fitxategitik irakurri: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Ezin izan da '%s' fitxategia ireki: %s "
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Ezin izan dira '%s' fitxategiko atributuak lortu, fstat() funtzioak huts "
+"egin du: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr ""
+"Ezin izan da '%s' fitxategia ireki, fdopen() funtzioak huts egin du: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Ezin izan da '%s' fitxategia '%s' gisa berrizendatu, g_rename() funtzioak "
+"huts egin du: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Ezin izan da '%s' fitxategia sortu: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Ezin izan da '%s' fitxategia idazteko ireki, fdopen() funtzioak huts egin "
+"du: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+"Ezin izan da '%s' fitxategia idatzi, fwrite() funtzioak huts egin du: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr ""
+"Huts egin du '%s' fitxategia idaztean: fflush() funtzioak huts egin du: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr ""
+"Huts egin du '%s' fitxategia idaztean: fsync() funtzioak huts egin du: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Ezin izan da '%s' fitxategia itxi, fclose() funtzioak huts egin du: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"'%s' fitxategia ezin izan da kendu, g_unlik() funtzioak huts egin du: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' txantiloia baliogabea da, ez luke '%s' eduki behar"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' txantiloiak ez dauka: XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Ezin izan da '%s' esteka sinbolikorik irakurri: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Esteka sinbolikoak ez dira onartzen"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Ezin izan da `%s'(e)tik `%s'(e)rako bihurtzailea ireki: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ezin dira datu gordinak irakurri 'g_io_channel_read_line_string'-en"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Irakurketa-bufferrean geratu diren bihurtu gabeko datuak"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanala karaktere partzial batean bukatzen da"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ezin dira datu gordinak irakurri 'g_io_channel_read_to_end'-etik"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Ezin izan da '%s' fitxategia ireki, open() funtzioak huts egin du: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+"Ezin izan da '%s' fitxategi-mapa ireki, mmap() funtzioak huts egin du: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Errorea %d lerroko %d karakterean: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Errorea %d lerroan: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"'&;' entitatea hutsik dago; baliozko entitateak hauek dira: &amp; &quot; "
+"&lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"'%s' karakterea ezin da jarri entitate-izenen hasieran; & karaktereak "
+"entitate bat hasten du; & ikurrak entitatea izan behar ez badu, izenda ezazu "
+"&amp; gisa"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "'%s' karakterea ezin da erabili entitate-izenen barruan"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "'%s' entitate-izena ezezaguna da"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entitatea ez da puntu eta komaz bukatzen; normalean & ikurra erabiltzen da "
+"entitatea hasteko asmorik gabe; izendatu & karakterea &amp; gisa;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Ezin izan da '%-.*s' analizatu, digitu bat izan behar zuen karaktere-"
+"erreferentzia baten barruan (&#234; adibidez); agian digitua handiegia da"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+"'%-.*s' karaktere-erreferentziak ez du baimendutako karaktere bat kodetzen"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Karaktere-erreferentzia hutsa, digitu bat eduki beharko luke; adibidez &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Karaktere-erreferentzia ez da puntu eta komaz bukatzen; ziurrenik & ikurra "
+"erabiliko zenuen entitatea hasteko asmorik gabe. Izendatu & karakterea &amp; "
+"gisa;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Amaitu gabeko entitate-erreferentzia"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Amaitu gabeko karaktere-erreferentzia"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "UTF-8 gisa kodetutako testu baliogabea - sekuentzia luzeegia"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "UTF-8 gisa kodetutako testu baliogabea - hasierako karaktererik gabe"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "UTF-8 gisa kodetutako testu baliogabea - '%s' ez da baliozkoa"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentuak elementu batez hasi behar du (adibidez, <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' ez da karaktere balioduna '<' karakterearen atzetik; baliteke elementu "
+"baten izena ez hastea"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"'%s' karaktere bitxia, '>' karakterea espero zen '%s' elementuaren etiketa "
+"hutsa amaitzeko"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"'%s' karaktere bitxia, '=' espero zen '$2%s' elementuaren '$1%s' "
+"atributuaren ondoren"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' karaktere bitxia, '>' edo '/' karakterea espero zen '%s' elementuaren "
+"hasiera-etiketa bukatzeko, edo bestela atributu bat. Agian karaktere "
+"baliogabea erabili duzu atributu-izen batean"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"'%s' karaktere bitxia, komatxo irekia espero zen berdin ikurraren ondoren "
+"'$2%s' elementuaren '$1%s' atributuari balioa ematean"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' ez da karaktere balioduna '</'; karaktereen atzetik; baliteke '%s'e(k) "
+"elementu baten izena ez hastea"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' karaktere baliogabea da '%s' itxiera-elementuaren izenaren atzetik; "
+"baimendutako karakterea '>' da"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' elementua itxi egin da, unean ez dago elementurik irekita"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' elementua itxi egin da, baina unean '%s' elementua dago irekita"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumentua hutsik dago edo zuriuneak bakarrik ditu"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumentua ustekabean itxi da angelu-parentesi ireki baten ondoren '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumentua ustekabean amaitu da oraindik irekita zeuden elementuekin. '%s' "
+"irekitako azken elementua da"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumentua ustekabean amaitu da, angelu-parentesi itxia ikustea espero nuen <"
+"%s/> etiketa amaitzen"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumentua ustekabean amaitu da elementu-izen baten barruan"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumentua ustekabean amaitu da atributu-izen baten barruan"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Dokumentua ustekabean amaitu da elementua irekitzeko etiketa baten barruan."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumentua ustekabean amaitu da atributu-izen baten ondorengo berdin "
+"ikurraren atzetik; ez dago atributu-baliorik"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumentua ustekabean amaitu da atributu-balio baten barruan"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Dokumentua ustekabean amaitu da '%s' elementuaren itxiera-etiketaren barruan"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumentua ustekabean amaitu da iruzkin baten barruan edo prozesatzen ari "
+"zen instrukzio baten barruan"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "hondatutako objektua"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "barneko errorea edo hondatutako objektua"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "Memoriarik ez"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "atzera-jotzearen mugara gainditua"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"ereduak zenbait elementu ditu bat etortze partzialetan onartzen ez direnak"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "barneko errorea"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"aurreko erreferentizak baldintza gisa ez daude onartuta bat etortze "
+"partzialetan"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "errekurtsioaren muga gainditua"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "azpikate hutsen lan arearen muga gainditua"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "lerro-jauzien banderen baliogabeko konbinazioa"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "errore ezezaguna"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ereduaren amaieran"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c ereduaren amaieran"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "karaktere ezezagunak jarraitzen dio \\ karaktereari"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"hemen ez dira ihesdun letrak (\\l, \\L, \\u, \\U) erabiltzen uzten "
+"(maiuskulaz eta minuskulaz)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "zenbakiak barrutitik kanpo {} kuantifikatzailean"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "zenbaki handiegiak {} kuantifikatzaileak"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "karaktere-klasearen amaierako ] falta da"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "karaktere-klasean baliogabeko ihes sekuentzia"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "karaktere-klaseko barrutia barrutitik kanpo"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ezer ez errepikatzeko"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "karakete ezezaguna (? karaktereen atzetik"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "karakete ezezaguna (?< karaktereen atzetik"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "karakete ezezaguna (?P karaktereen atzetik"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX izeneko klaseak soilik onartzen dira klase baten barruan"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "amaierako ) falta da"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") dago irekierako ( gabe"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R edo (?[+-] digituak )-rekin jarraitu behar dira"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "existitzen ez den azpieredu baten erreferentzia"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "iruzkinaren ondoren ) falta da"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "adierazpen erregularra luzeegia"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "huts egin du memoria lortzean"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "'lookbehind' baieztapenak ez du luzera finkorik"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "gaizki osatutako zenbakia edo izena (?(-ren atzetik"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "baldintza taldeak bi adar baino gehiago ditu"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "baieztapena espero zen (?)-ren atzetik"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "POSIX klasearen izen ezezaguna"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "Tartekatutako POSIX elementuak ez daude onartuta"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} sekuentziako karaktere-balioa luzeegia da"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "baliogabeko (?(0) baldintza"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C ez dago baimenduta 'lookbehind' baieztepenean"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "dei errekurtsiboa amaierarik gabeko begiztan sar daiteke"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "amaierako karakterea falta da azpiereduko izenean"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "bi azpiereduk izen berdina dute"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "gaizki osatutako \\P edo \\p sekuentzia"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "propietate-izen ezezaguna \\P edo \\p atzetik"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "azpiereduaren izena luzeegia (32 karaktere gehienez)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "izendun azpieredu gehiegi (10.000 gehienez)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "balio zortzitarra \\377 baino handiagoa"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE taldeak adar bat baino gehiago ditu"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE taldea errepikatzea ez dago onartuta"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "NEWLINE aukera kontraesankorra"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g ez da prestatutako izenarekin edo zero ez den aukerazko prestatutako "
+"zenbaki batekin jarraitzen"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "ustekabeko begizta"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kodea gainezkatua"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "konpilazioaren laneko area gainezkatua"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "ez da aurrez egiaaztatutako erreferentziatutako azpieredua aurkitu"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Errorea %s adierazpen erregularra bilatzean: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE liburutegia UTF8 euskarri gabe konpilatua"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE liburutegia UTF8 propietateen euskarri gabe konpilatua"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Errorea %s adierazpen erregularra %d karakterean konpilatzean: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Errorea %s adierazpen erregularra optimizatzean: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "digitu hamaseitarra edo '}' espero zen"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "digitu hamaseitarra espero zen"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "'<' falta da erreferentzia sinbolikoan"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "amaitu gabeko erreferentzia sinbolikoa"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "zero luzerako erreferentzia sinbolikoa"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "digitua espero zen"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "erreferentzia sinboliko ilegala"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "'\\' katearen amaieran"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ihes-sekuentzi ezezaguna"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Errorea ordezko \"%s\" testua analizatzean %lu karakterean: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Komatxo arteko testua ez da komatxoekin hasten"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Bat ez datozen komatxoak daude komando-lerroan edo shell-ak aipatutako beste "
+"testu batean"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Testua '\\' karakterearen atzetik amaitu da (testua '%s' zen)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Testua %c(r)en komatxoak aurkitu baino lehen amaitu da (testua '%s' zen)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Testua hutsik dago (edo zuriuneak bakarrik ditu)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Ezin izan da daturik irakurri prozesu umetik"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Ezin izan da kanalizazioa sortu prozesu umearekin komunikatzeko (%s) "
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Ezin izan da kanalizazio umetik irakurri (%s) "
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Ezin izan da '%s' direktoriora aldatu (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Ezin izan da prozesu umea exekutatu (%s)"
+
+#
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Programaren izen baliogabea: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Kate baliogabea %d(e)ko bektorearen argumentuan: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Kate baliogabea ingurunean: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Laneko direktorio baliogabea: %s"
+
+#
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Ezin izan da laguntza-programa exekutatu (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Ustekabeko errorea gertatu da 'g_io_channel_win32_poll()'-en prozesu umetik "
+"datuak irakurtzean"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Ezin izan da daturik irakurri prozesu umetik (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Ustekabeko errorea select()-en, datuak prozesu umetik irakurtzen (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Ustekabeko errorea waitpid()-en (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Ezin da sardetu (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Ezin izan da \"%s\" prozesu umea exekutatu (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Ezin izan da prozesu umearen irteera edo sarrera birbideratu (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Ezin izan da prozesu umea sardetu (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Errore ezezaguna \"%s\" prozesu umea exekutatzean"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Ezin izan da nahikoa datu irakurri pid kanalizazio umetik (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Karakterea UTF-8 barrutitik kanpo"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Sekuentzia baliogabea bihurketa-sarreran"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Karakterea UTF-16 barrutitik kanpo"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Erabilera:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[AUKERA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Laguntzako aukerak:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Erakutsi laguntzako aukerak"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Erakutsi laguntzako aukera guztiak"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Aplikazio-aukerak:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Ezin da '%2$s'(r)en '%1$s' osoko balioa analizatu"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s(r)en '%1$s' osoko balioa barrutitik kanpo"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Ezin da '%2$s'(r)en '%1$s' balio bikoitza analizatu"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s(r)en '%1$s' balio bikoitza barrutitik kanpo"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Errorea %s aukera analizatzean"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s(e)ko argumentua falta da"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "%s aukera ezezaguna"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Ezin izan da baliozko gakoa datuen direktorioan aurkitu"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ez da fitxategi arrunta"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Fitxategia hutsik dago"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Gako-fitxategiak '%s' lerroa du, gako-balioa bikotea, taldea edo iruzkinik "
+"ez daukalarik"
+
+#
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Taldearen izen baliogabea: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Gako-fitxategiak ez da talde batekin hasten"
+
+#
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Gakoaren izen baliogabea: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Gako-fitxategiak onartzen ez den '%s' kodeketa du"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Gako-fitxategiak ez dauka '%s' taldea"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Gako-fitxategiak ez dauka '%s' gakoa"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Gako-fitxategiak '%s' gakoa dauka (%s balioduna) baina ez da UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Gako-fitxategiak '%s' gakoa dauka, baina dagokion balioa ezin da "
+"interpretatu."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Gako-fitxategiak '%s' gakoa dauka ('%s taldean), baina dagokion balioa ezin "
+"da interpretatu."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Gako-fitxategiak ez dauka '%s' gakoa ('%s' taldean)"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Gako-fitxategiak ihes-karakterea dauka lerro amaieran"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Gako-fitxategiak '%s' ihes-sekuentzia baliogabea dauka"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' balioa ezin da zenbaki gisa interpretatu"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "'%s' osoko balioa barrutitik kanpo"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' balioa ezin da zenbaki mugikor gisa interpretatu."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' balioa ezin da bolear gisa interpretatu"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Zenbaketaren balio handiegia honi pasatuta: %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Korrontea jadanik itxita dago"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Eragiketa bertan behera utzi da"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Mota ezezaguna"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s fitxategi mota"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s mota"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Ustekabeko korronte-amaiera azkarregia"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Izenbagea"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Mahaigaineko fitxategiak ez du Exec eremua zehaztu"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Ezin izan da aplikazioak eskatzen duen terminala aurkitu"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Ezin da erabiltzailearen aplikazioaren %s konfigurazio-karpeta sortu: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Ezin da erabiltzailearen MIMEren %s konfigurazio-karpeta sortu: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Ezin da erabiltzailearen mahaigaineko %s fitxategia sortu"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s(r)en definizio pertsonalizatua"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "gailuak ez dauka 'egotzi' inplementatuta"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "gailuak ez dauka euskarria eskaneatzeko inplementaziorik"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Ezin da GEmblem kodeketaren %d bertsioa kudeatu"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Gaizki osatutako token kopurua (%d) GEmblem kodeketan"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Ezin da GEmblemedIcon kodeketaren %d bertsioa kudeatu"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Gaizki osatutako token kopurua (%d) GEmblemedIcon kodeketan"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblen espero zen GEmblemedIcon-entzako"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Eragiketa ez dago onartuta"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Ontziaren muntaia ez da existitzen"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Ezin da direktorioaren gainean kopiatu"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Ezin da direktorioa kopiatu direktorio gainean"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Helburuko fitxategia existitzen da"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Ezin da direktorioa errekurtsiboki kopiatu"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Ezin da fitxategi berezia kopiatu"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Esteka sinbolikoaren baliogabeko balioa eman da"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Zakarrontzira botatzea ez dago onartuta"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Fitxategi-izenek ezin dute '%c' eduki"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "bolumenak ez dauka muntatzea inplementatuta"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Ez da aplikaziorik erregistratu fitxategi hau kudeatzeko"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Zerrendatzailea itxi da"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Fitxategiaren zerrendatzaileak eragiketa bat du lanean"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Fitxategiaren zerrendatzailea itxi da jadanik"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fitxategia"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Ikonoa duen fitxategia"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Ezin da GFileIcon kodeketaren %d bertsioa kudeatu"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Gaizki osatutako sarrerako datuak GFileIcon-entzako"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Korronteak ez du query_info onartzen"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Ez da bilaketarik onartzen korrontean"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Trunkatzea ez da baimentzen sarrerako korrontean"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Trunkatzea ez da onartzen korrontean"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Okerreko token kopurua (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Ez dago %s klasearen izen motarik"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "%s motak ez du GIcon interfazea inplementatzen"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "%s mota ez du klaserik"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Gaizko osatutako bertsio zenbakia: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "%s motak ez du from_tokens() inplementatzen GIcon interfazean"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Ezin da ikonoaren kodeketaren emandako bertsioa kudeatu"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Sarrerako korronteak ez dauka irakurtzea inplementatuta"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Korronteak eragiketa bat du lanean"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Ezin da lokaleko direktorio lehenetsiaren monitorizazio mota aurkitu"
+
+#
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "%s fitxategi-izen baliogabea"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Errorea fitxategi-sistemako informazioa lortzean: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Ezin da erroko direktorioa izenez aldatu"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Errorea fitxategia izenez aldatzean: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Ezin da fitxategia izenez aldatu, fitxategi-izena badago lehendik ere"
+
+#
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Fitxategi-izen baliogabea"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Errorea fitxategia irekitzean: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Ezin da direktorioa ireki"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Errorea fitxategia kentzean: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Errorea fitxategia zakarrontzira botatzean: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Ezin izan da zakarrontziaren '%s' direktorioa sortu: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Ezin da zakarrontziaren goi-mailako direktorioa aurkitu"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Ezin da zakarrontziaren direktorioa aurkitu edo sortu"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Ezin da zakarrontziaren informazio-fitxategia sortu: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Ezin da fitxategia zakarrontzira bota: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Errorea direktorioa sortzean: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Errorea esteka sinbolikoa sortzean: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Errorea fitxategia lekuz aldatzean: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Ezin da direktorioa lekuz aldatu direktorioaren gainera"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Huts egin du babeskopia sortzean"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Errorea helburuko fitxategia kentzean: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Muntaien artean lekuz aldatzea ez dago onartuta"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Atributuaren balioa NULL ezin da izan"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Atributu mota baliogabea (katea espero zen)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Atributu hedatuaren izen baliogabea"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Errorea '%s' atributu hedatua ezartzean: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Errorea '%s' fitxategiaren egoera irakurtzean: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (baliogabeko kodeketa)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Errorea fitxategiaren deskriptorearen egoera irakurtzean: %s "
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Baliogabeko atributu mota (uint32 espero zen)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Baliogabeko atributu mota (uint64 espero zen)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Baliogabeko atributu mota (byte katea espero zen)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Errorea baimenak ezartzean: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Errorea jabea ezartzean: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "esteka sinbolikoak NULL-en desberdina izan behar du"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Errorea esteka sinbolikoa ezartzean: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Errorea esteka sinbolikoa ezartzean: fitxategia ez da esteka sinboliko bat"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux testuinguruak NULL-en desberdina izan behar du"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Errorea SELinux testuingurua ezartzean: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ez dago gaituta sistema honetan"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s atributuaren ezarpena ez dago onartuta"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Errorea fitxategitik irakurtzean: %s "
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Errorea fitxategian bilatzean: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Errorea fitxategia ixtean: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Ezin da lokaleko fitxategi lehenetsiaren monitorizazio mota aurkitu"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Errorea fitxategian idaztean: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Errorea babeskopiaren esteka zaharra kentzean: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Errorea babeskopiaren kopia sortzean: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Errorea aldi baterako fitxategia izenez aldatzean: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Errorea fitxategia trunkatzean: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Errorea '%s' fitxategia irekitzean: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Helburuko fitxategia direktorio bat da"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Helburuko fitxategia ez da fitxategi arrunta"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Fitxategia kanpotik aldatu da"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Errorea fitxategi zaharra kentzean: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Baliogabeko GSeekType eman da"
+
+#
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Bilaketa-eskaera baliogabea"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Ezin da GMemoryInputStream trunkatu"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Datu-matrizearen gehienezko mugara iritsi da"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Ezin da memoriaren irteeraren korrontea tamainaz aldatu"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Huts egin du memoriaren irteeraren korrontea tamainaz aldatzean"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "muntaiak ez dauka desmuntatzea inplementatuta"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "muntaiak ez dauka egoztea inplementatuta"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "muntaiak ez dauka birmuntaketa inplementatuta"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "muntaiak ez dauka eduki mota sinkronoa asmatzea inplementatuta"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "muntaiak ez dauka eduki mota sinkronoa asmatzea inplementatuta"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Irteerako korronteak ez dauka idaztea inplementatuta"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Iturburuko korrontea jadanik itxi da"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "izena"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Ikonoaren izena"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "izenak"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Ikonoen izenak dituen matrizea"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "erabili ikono lehenetsiak"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' karaktereekin ordenatutako izenen arabera aurkitutako ikono lehenetsiak "
+"erabiliko diren ala ez. Aurrenekoaren ondoren dauden izenak baztertzen ditu "
+"hainbat izen ematen badira."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Ezin da GThemedIcon kodeketaren %d bertsioa kudeatu"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Fitxategi-deskriptorea"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Fitxategi-deskriptorea bertatik irakurtzeko"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Itxi fitxategi-deskriptorea"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Fitxategi-deskriptorea ixtea korrontea ixtean edo ez."
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Errorea UNIXetik irakurtzean: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Errorea UNIX ixtean: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Fitxategi-sistemaren erroa"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Fitxategi-deskriptorea bertan idazteko"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Errorea UNIXen idaztean: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "bolumenak ez dauka egoztea inplementatuta"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Ezin da aplikazioa aurkitu"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Errorea aplikazioa abiaraztean: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIak ez daude onartuta"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "asoziazioaren aldaketak ez dira onartzen win32 sisteman"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Asoziazioa sortzea ez da onartzen win32 sisteman"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ez ezkutatu sarrerak"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "erabili zerrenda-formatu luzea"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FITXATEGIA...]"
diff --git a/po/fa.po b/po/fa.po
new file mode 100644
index 0000000..1622504
--- /dev/null
+++ b/po/fa.po
@@ -0,0 +1,1873 @@
+# Translation of glib to Persian.
+# Copyright (C) 2002, 2004, 2005, 2006 Sharif FarsiWeb, Inc.
+# Roozbeh Pournader <roozbeh@farsiweb.info>, 2002, 2004, 2006.
+# Hamed Malek <hamed@farsiweb.info>, 2005.
+# Meelad Zakaria <meelad@farsiweb.info>, 2006
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-09-04 18:36+0330\n"
+"Last-Translator: Roozbeh Pournader <roozbeh@farsiweb.info>\n"
+"Language-Team: Persian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "مشخصهٔ غیرمنتظرهٔ «%s» برای عنصر «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "مشخصهٔ «%s» برای عنصر «%s» پیدا نشد"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "برچسب غیرمنتظرهٔ «%s»، برچسب «%s» انتظار می‌رفت"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "برچسب غیرمنتظرهٔ «%s» داخل «%s»"
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "پروندهٔ چوب‌الف معتبری در شاخه‌های داده پیدا نمی‌شود"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "چوب‌الفی برای نشانی «‎%s» از قبل موجود است"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "چوب‌الفی برای نشانی «‎%s» پیدا نشد"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "هیچ نوع MIME در چوب‌الف برای نشانی «‎%s» تعریف نشده است"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "پرچم خصوصی‌ای برای چوب‌الف برای نشانی «%s» تعریف نشده است"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "گروهی در چوب‌الف برای نشانی «‎%s» تعیین نشده است"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "برنامه‌ای با نام «%s» چوب‌الفی برای «‎%s» ثبت نکرده است"
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "خواندن پیوند نمادی «‎%s» شکست خورد: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "تبدیل از مجموعه‌نویسهٔ «%s» به «%s» پشتیبانی نمی‌شود"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "نمی‌توان مبدل «%s» به «%s» را باز کرد"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "دنبالهٔ بایتی نامعتبر در ورودی تبدیل"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "خطا در حین تبدیل: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "دنباله نویسهٔ ناتمام در انتهای ورودی"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "نمی‌توان عقب‌نشینی «%s» را به مجموعه کد «%s» تبدیل کرد"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "نشانی «‎%s» یک نشانی اینترنتی مطلق با شِمای «پرونده» نیست"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "نشانی پروندهٔ محلی «‎%s» نمی‌تواند «#» داشته باشد"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "نشانی اینترنتی «%s» نامعتبر است"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "نام میزبان نشانی اینترنتی «‎%s» نامعتبر است"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "نشانی اینترنتی «‎%s» نویسه‌های گریختهٔ نامعتبر دارد"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "نام مسیر «‎%s» یک مسیر مطلق نیست"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "نام میزبان نامعتبر"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "خطا در باز کردن شاخهٔ «‎%s»‏: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "نمی‌توان %Ilu بایت برای خواندن پروندهٔ «‎%s» تخصیص داد"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "خواندن از پروندهٔ «‎%s» شکست خورد: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "باز کردن پروندهٔ «‎%s» شکست خورد: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "گرفتن مشخصه‌های پروندهٔ «‎%s» شکست خورد: fstat()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "باز کردن پروندهٔ «‎%s» شکست خورد: fdopen()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "تغییر دادن نام پروندهٔ «‎%s» به «‎%s» شکست خورد: g_rename()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ایجاد پروندهٔ «‎%s» شکست خورد: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "باز کردن پروندهٔ «‎%s» برای نوشتن شکست خورد: fdopen()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "نوشتن پروندهٔ «‎%s» شکست خورد: fdwrite()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "نوشتن پروندهٔ «‎%s» شکست خورد: fdwrite()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "نوشتن پروندهٔ «‎%s» شکست خورد: fdwrite()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "بستن پروندهٔ «‎%s» شکست خورد: fclose()‎ شکست خورد: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "نمی‌توان پروندهٔ موجود «‎%s» را جذف کرد: g_unlink() شکست خورد: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "قالب «%s» نامعتبر است، نباید «%s» داشته باشد"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "قالب «%s» حاوی XXXXXX نیست"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "خواندن پیوند نمادی «‎%s» شکست خورد: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "پیوندهای نمادی پشتیبانی نمی‌شوند"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "نمی‌توان مبدل «%s» به «%s» را باز کرد: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "نمی‌توان در g_io_channel_read_line_string خوانش خام انجام داد"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "دادهٔ تبدیل‌نشده در میان‌گیر خواندن باقی مانده است"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "کانال با یک نویسهٔ ناتمام پایان می‌یابد"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "نمی‌توان در g_io_channel_read_to_end خوانش خام انجام داد"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "باز کردن پروندهٔ «‎%s» شکست خورد: open()‎ شکست خورد: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "تهیهٔ نقشه از پروندهٔ «‎%s» شکست خورد: mmap()‎ شکست خورد: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "خطا در سطر %Id نویسهٔ %Id:‏ %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "خطا در سطر %Id:‏ %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"نهاد خالی «‎&;‎» مشاهده شد؛ نهادهای معتبر عبارتند از: ‎&amp; &quot; &lt; &gt; "
+"&apos;‎"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"نویسهٔ «%s» در ابتدای نام نهادها مجاز نیست؛ نویسهٔ & نهاد را آغاز می‌کند؛ اگر "
+"این علامت & قرار نیست نهاد شود، به‌جای آن از ‎&amp;‎ استفاده کنید"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "نویسهٔ «%s» داخل نام نهادها مجاز نیست"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "نام نهاد «%s» شناخته نیست"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"نهاد با یک نقطه‌ویرگول لاتین تمام نشده است؛ به احتمال زیاد بدون این که "
+"بخواهید نهادی را آغاز کنید از نویسهٔ & استفاده کرده‌اید - برای نوشتن علامت & "
+"از ‎&amp;‎ استفاده کنید"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"تجزیهٔ «‎%-.*s»، که باید رقمی داخل یک ارجاع نویسه‌ای (مثل ‎&#234;‎) می‌بود شکست "
+"خورد - شاید رقم خیلی بزرگ است"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "ارجاع نویسه‌ای «‎%-.*s» به نویسهٔ مجاز اشاره نمی‌کند"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ارجاع نویسه‌ای خالی؛ باید یک رقم داشته باشد، مثل ‎&#454;‎"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"ارجاع نویسه‌ای با نقطه‌ویرگول تمام نشده است؛ به احتمال زیاد بدون این که "
+"بخواهید نهادی را آغاز کنید از نویسهٔ & استفاده کرده‌اید - برای نوشتن علامت & "
+"از ‎&amp;‎ استفاده کنید"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ارجاع نهادی ناتمام"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "ارجاع نویسه‌ای ناتمام"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "متن کدگذاری‌شدهٔ UTF-8 نامعتبر"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "متن کدگذاری‌شدهٔ UTF-8 نامعتبر"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "متن کدگذاری‌شدهٔ UTF-8 نامعتبر"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "نوشتار باید با یک عنصر (مثلاً <book>) شروع شود"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"‏«%s» پس از یک نویسهٔ '‎<‎' نویسهٔ مجازی نیست؛ نمی‌شود ابتدای نام یک عنصر باشد"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"نویسهٔ غیرعادی «%s»، برای پایان دادن به برچسب شروع عنصر «%s» انتظار یک نویسهٔ «‎>‎» "
+"می‌رفت"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"نویسهٔ غیرعادی «%s»، بعد از نام مشخصهٔ «%s» عنصر «%s» انتظار یک نویسهٔ «=» می‌رفت"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"نویسهٔ غیرعادی «%s»، برای پایان دادن به برچسب شروع عنصر «%s»، همین‌طور یک مشخصه، "
+"انتظار یک نویسهٔ «‎>‎» یا «/» می‌رفت؛ شاید از یک نویسهٔ نامعتبر در نام مشخصه‌ای "
+"استفاده کرده باشید"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"نویسهٔ غیرعادی «%s»، هنگام مقدار دادن به مشخصهٔ «%s» از عنصر «%s» پس از علامت "
+"تساوی انتظار یک علامت نقل قول باز می‌رفت"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"‏«%s» بعد از نویسه‌های «‎</‎» نویسهٔ معتبری نیست؛ «%s» نمی‌تواند ابتدای نام عناصر "
+"قرار بگیرد"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "‏«%s» نویسهٔ معتبری برای بستن نام عنصر «%s» نیست؛ نویسهٔ مجاز «‎>» است"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "عنصر «%s» بسته بود، در حال حاضر هیچ عنصری باز نیست"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "عنصر «%s» بسته بود، ولی عنصری که در حال حاضر باز است «%s» است"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "نوشتار خالی است یا فقط فاصلهٔ خالی دارد"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "نوشتار به‌طور غیرمنتظره‌ای درست بعد از یک علامت کوچکتر '‎<‎' پایان یافت"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"نوشتار وقتی که هنوز عناصری باز بودند به‌طور غیرمنتظره‌ای پایان یافت ‐ آخرین "
+"عنصر باز شده «%s» بود"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"نوشتار به‌طور غیرمنتظره‌ای پایان یافت، یک علامت بزرگتر برای بستن برچسب ‎<%s/>‎ "
+"انتظار می‌رفت"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "نوشتار به‌طور غیرمنتظره‌ای داخل نام یک عنصر به‌پایان رسید"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "نوشتار به‌طور غیرمنتظره‌ای داخل نام یک مشخصه به‌پایان رسید"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "نوشتار به‌طور غیرمنتظره‌ای داخل یک برچسب عنصربازکن پایان یافت."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"نوشتار به‌طور غیرمنتظره‌ای بعد از علامت تساوی‌ای که پس از نام مشخصه‌ای آمده بود "
+"تمام شد؛ بدون مقدار برای مشخصه"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "نوشتار به‌طور غیرمنتظره‌ای داخل مقدار یک مشخصه به‌پایان رسید"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "نوشتار به‌طور غیرمنتظره‌ای داخل برچسب بستن عنصر «%s» پایان یافت"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"نوشتار به‌طور غیرمنتظره‌ای داخل یک توضیح یا دستورالعمل پردازشی پایان یافت"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "کانال با یک نویسهٔ ناتمام پایان می‌یابد"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "دنبالهٔ بایتی نامعتبر در ورودی تبدیل"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "ارجاع نویسه‌ای ناتمام"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "ارجاع نویسه‌ای ناتمام"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "ارجاع نویسه‌ای ناتمام"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "پیوندهای نمادی پشتیبانی نمی‌شوند"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "خطا در سطر %Id نویسهٔ %Id:‏ %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "ارجاع نهادی ناتمام"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "متن نقل شده با علامت نقل قول شروع نمی‌شود"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "علامت نقل قول تکی در سطر دستور یا متون داخل پوستهٔ دیگر"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "متن دقیقاً پس از یک نویسهٔ «\\» پایان یافت. (متن عبارت بود از «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"متن پیش از آن که علامت نقل قول متناظر برای %c پیدا شود پایان یافت. (متن "
+"عبارت بود از «%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "متن خالی بود (یا فقط فاصلهٔ خالی داشت)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "خواندن داده‌ها از فراروند فرزند شکست خورد"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "ایجاد لوله برای ارتباط با فراروند فرزند شکست خورد (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "خواندن از لولهٔ فرزند شکست خورد (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "تغییر به شاخهٔ «%s» شکست خورد (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "اجرای فراروند فرزند شکست خورد (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "نام برنامهٔ نامعتبر: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "رشتهٔ نامعتبر در بردار آرگومان درآیهٔ %Id: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "رشتهٔ نامعتبر در محیط: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "شاخهٔ کاری نامعتبر‏: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "اجرای برنامهٔ راهنما  (‎%s) شکست خورد"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"خطای غیرمنتظره در g_io_channel_win32_poll()‎ هنگام خواندن داده‌ها از یک "
+"فراروند فرزند"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "خواندن داده‌ها از فراروند فرزند شکست خورد (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"خطای غیرمنتظره در select()‎ هنگام خواندن داده‌ها از یک فراروند فرزند (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "خطای غیرمنتظره در waitpid()‎ ‏(%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "انشعاب شکست خورد (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "اجرای فراروند فرزند «%s» شکست خورد (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "تغییر مسیر خروجی یا ورودی فراروند فرزند شکست خورد (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "انشعاب فراروند فرزند شکست خورد (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "خطای ناشناخته هنگام اجرای فراروند فرزند «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "خواندن دادهٔ کافی از لولهٔ pid فرزند شکست خورد (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "نویسهٔ خارج از محدوده برای UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "دنبالهٔ نامعتبر در ورودی تبدیل"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "نویسهٔ خارج از محدوده برای UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "روش استفاده:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[گزینه...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "گزینه‌های راهنما:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "نمایش گزینه‌های راهنما"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "نمایش همهٔ گزینه‌های راهنما"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "گزینه‌های برنامه:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "نمی‌توان مقدار صحیح «%s» برای %s را تجزیه کرد"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "مقدار صحیح «%s» خارج از محدودهٔ %s است"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "نمی‌توان مقدار صحیح با دقت مضاعف «%s» برای %s را تجزیه کرد"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "مقدار صحیح با دقت مضاعف «%s» خارج از محدودهٔ %s است"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "خطا در تجزیهٔ گزینهٔ %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "‏%s یک آرگومان کم دارد"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "گزینهٔ نامعلوم %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "پروندهٔ کلید معتبر در شاخه‌های داده یافت نمی‌شود"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "پرونده متعارف نیست"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "پرونده خالی است"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "پرونده کلید حاوی خط «%s» است که جفت کلید‐مقدار، گروه یا توضیح  نیست"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "نام برنامهٔ نامعتبر: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "پروندهٔ کلید با یک گروه آغاز نمی‌شود"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "نام برنامهٔ نامعتبر: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "پروندهٔ کلید حاوی کدگذاری پشتیبانی نشدهٔ «%s» است"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "پروندهٔ کلید گروه «%s» را ندارد"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "پروندهٔ کلید، کلید «%s» را ندارد"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "پروندهٔ کلید حاوی کلید «%s» با مقدار «%s» است که UTF-8 نیست"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "پروندهٔ کلید حاوی کلید «%s» است که مقداری دارد که قابل تفسیر نیست."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"پروندهٔ کلید حاوی کلید «%s» در گروه «%s» است که مقداری دارد که قابل تفسیر نیست"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "پروندهٔ کلید، کلید «%s» در گروه «%s» را ندارد"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "پرونده کلید شامل نویسهٔ گریز در انتهای خط است"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "پروندهٔ کلید حاوی دنبالهٔ گریز نامعتبر «%s» است"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "مقدار «%s» را نمی‌توان به عدد تفسیر کرد"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "مقدار صحیح «%s» خارج از محدوده است"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "مقدار «%s» را نمی‌توان به عدد اعشاری تفسیر کرد"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "مقدار «%s» را نمی‌توان به مقدار بولی تفسیر کرد"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "گزینهٔ نامعلوم %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "پیوندهای نمادی پشتیبانی نمی‌شوند"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "پیوندهای نمادی پشتیبانی نمی‌شوند"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "برنامه‌ای با نام «%s» چوب‌الفی برای «‎%s» ثبت نکرده است"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "نام میزبان نشانی اینترنتی «‎%s» نامعتبر است"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "نام برنامهٔ نامعتبر: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "نام میزبان نامعتبر"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ایجاد پروندهٔ «‎%s» شکست خورد: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ایجاد پروندهٔ «‎%s» شکست خورد: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "ایجاد پروندهٔ «‎%s» شکست خورد: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "خطا در باز کردن شاخهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "خطا در تجزیهٔ گزینهٔ %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "نوشتار به‌طور غیرمنتظره‌ای داخل نام یک مشخصه به‌پایان رسید"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "خطا در باز کردن شاخهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "خطا در حین تبدیل: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "خطا در حین تبدیل: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "خطا در سطر %Id:‏ %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "خطا در حین تبدیل: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "پیوندهای نمادی پشتیبانی نمی‌شوند"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "خطا در تجزیهٔ گزینهٔ %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "پرونده متعارف نیست"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "نام برنامهٔ نامعتبر: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "نام میزبان نشانی اینترنتی «‎%s» نامعتبر است"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "خطا در خواندن پروندهٔ «‎%s»‏: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "خطا در سطر %Id:‏ %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "خطا در تجزیهٔ گزینهٔ %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "خطا در تجزیهٔ گزینهٔ %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "پیوندهای نمادی پشتیبانی نمی‌شوند"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[گزینه...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "خطا در تجزیهٔ گزینهٔ %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "باز کردن پروندهٔ «%s» شکست خورد: fdopen()‎ شکست خورد: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "نمی‌توان %Ilu بایت برای خواندن پروندهٔ «%s» تخصیص داد"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "باز کردن پروندهٔ «%s» شکست خورد: fdopen()‎ شکست خورد: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "تبدیل از مجموعه‌نویسهٔ «%s» به «%s» پشتیبانی نمی‌شود"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "اندازهٔ پیغام نادرست است"
+
+#~ msgid "Socket error"
+#~ msgstr "خطای سوکت"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "نشان‌های تنظیم‌شده توسط کانال، پشتیبانی نمی‌شوند"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..f57fb60
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,1858 @@
+# Finnish messages for glib.
+# Copyright © 2009 Free Software Foundation, Inc.
+# Lauri Nurmi <lanurmi@iki.fi>, 2002-2004,
+# Sami Pesonen <sampeson@iki.fi>, 2004-2005.
+# Ilkka Tuohela <hile@iki.fi>, 2005-2009.
+# Timo Jyrinki <timo.jyrinki@iki.fi>, 2008.
+# Harri Pitkänen <hatapitk [at] iki [dot] fi>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-02 20:52+0200\n"
+"Last-Translator: Ilkka Tuohela <hile@iki.fi>\n"
+"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Odottamaton ominaisuus \"%s\" elementille \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Ominaisuutta \"%s\" elementille \"%s\" ei löydy"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Odottamaton merkintä \"%s\", odotettiin merkintää \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Odottamaton merkintä \"%s\" kohdassa \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Kelvollista kirjanmerkkitiedostoa ei löytynyt datahakemistoista"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI:lle \"%s\" on jo olemassa kirjanmerkki"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI:lle \"%s\" ei löydy kirjanmerkkiä"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI:n \"%s\" kirjanmerkissä ei ole määritelty MIME-tyyppiä"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI:n \"%s\" kirjanmerkissä ei ole määritelty yksityisyyslippua"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI:n \"%s\" kirjanmerkissä ei ole asetettu ryhmiä"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Sovellus nimeltä \"%s\" ei rekisteröinyt kirjanmerkkiä kohteelle \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Suoritettavaa riviä \"%s\" ei voitu laajentaa URI:lla \"%s\""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Muunnos merkistöstä \"%s\" merkistöön \"%s\" ei ole tuettu"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Muunninta merkistöstä \"%s\" merkistöön \"%s\" ei voitu avata"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Virheellinen tavusarja muunnettavassa syötteessä"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Virhe muunnoksen aikana: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Osittainen tavusarja syötteen lopussa"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Koodausmerkkijonoa \"%s\" ei voi muuntaa merkistöön \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI \"%s\" ei ole absoluuttinen URI \"file\"-muodossa"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Paikallinen tiedosto-URI \"%s\" ei saa sisältää merkkiä \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI \"%s\" on virheellinen"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI:n \"%s\" isäntänimi on virheellinen"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI \"%s\" sisältää virheellisesti suojattuja merkkejä"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Polku \"%s\" ei ole absoluuttinen"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Virheellinen isäntänimi"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Virhe hakemiston \"%s\" avaamisessa: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ei voitu varata %lu tavua muistia tiedoston \"%s\" lukemiseksi"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Virhe tiedoston \"%s\" lukemisessa: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Tiedosto \"%s\" on liian suuri"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Tiedoston \"%s\" lukeminen epäonnistui: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Tiedoston \"%s\" avaaminen epäonnistui: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Tiedoston \"%s\" ominaisuuksien lukeminen epäonnistui: fstat() epäonnistui: %"
+"s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Tiedoston \"%s\" avaaminen epäonnistui: fdopen() epäonnistui: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Tiedoston \"%s\" uudelleen nimeäminen nimelle \"%s\" epäonnistui: g_rename() "
+"epäonnistui: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Tiedoston \"%s\" luominen epäonnistui: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Tiedoston \"%s\" avaaminen kirjoitettavaksi epäonnistui: fdopen() "
+"epäonnistui: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Tiedoston \"%s\" kirjoittaminen epäonnistui: fwrite() epäonnistui: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Tiedoston \"%s\" kirjoittaminen epäonnistui: fwrite() epäonnistui: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Tiedoston \"%s\" kirjoittaminen epäonnistui: fwrite() epäonnistui: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Tiedoston \"%s\" sulkeminen epäonnistui: fclose() epäonnistui: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Olemassa olevan tiedoston \"%s\" poisto epäonnistui: g_unlink epäonnistui: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Malli \"%s\" on virheellinen, se ei saa sisältää merkkijonoa \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Malli \"%s\" ei sisällä merkkijonoa XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f kt"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f Mt"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f Gt"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Symbolisen linkin \"%s\" lukeminen epäonnistui: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolisia linkkejä ei tueta"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Muunninta merkistöstä \"%s\" merkistöön \"%s\" ei voitu avata: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Funktiossa g_io_channel_read_line_string ei voi suorittaa raakalukemista"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Jäljelle jäänyt muuntamaton data lukupuskurissa"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanava päättyy osittaiseen merkkiin"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Funktiossa g_io_channel_read_to_end ei voi suorittaa raakalukemista"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Tiedoston \"%s\" avaaminen epäonnistui: open() epäonnistui: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Tiedoston \"%s\" mappaaminen epäonnistui: mmap() epäonnistui: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Virhe rivillä %d merkissä %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Virhe rivillä %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Havaittu tyhjä entiteetti \"&;\"; kelvolliset ovat: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Merkki \"%s\" ei ole kelvollinen entiteetin nimen alussa; &-merkki aloittaa "
+"entiteetin. Jos tämän &-merkin ei ole tarkoitus olla entiteetti, käytä "
+"merkintää &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Merkki \"%s\" ei ole kelvollinen entiteetin nimessä"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entiteetin nimi \"%s\" on tuntematon"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteetti ei päättynyt puolipisteeseen; todennäköisesti käytit &-merkkiä "
+"aikomatta aloittaa entiteettiä - käytä merkintää &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Merkkijonon \"%-.*s\" piti olla luku merkkiviitteen sisällä (esim. &#234;), "
+"mutta sen jäsentäminen epäonnistui - ehkä luku on liian suuri"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Merkkiviite \"%-.*s\" ei ole sallitun merkin koodaus"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tyhjä merkkiviite; viitteen tulee sisältää luku, esim &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Merkkiviite ei päättynyt puolipisteeseen; todennäköisesti käytit &-merkkiä "
+"aikomatta aloittaa entiteettiä - käytä merkintää &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Päättämätön entiteettiviite"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Päättämätön merkkiviite"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Virheellinen UTF-8-koodattu teksti - ylipitkä sekvenssi"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Virheellinen UTF-8-koodattu teksti - ei aloitusmerkki"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Virheellinen UTF-8-koodattu teksti - epäkelpo \"%s\""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Asiakirjan on alettava elementillä (esim. <kirja>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"\"%s\" ei ole kelvollinen merkki \"<\"-merkin jälkeen; se ei voi aloittaa "
+"elementin nimeä"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Pariton merkki \"%s\", odotettiin \">\"-merkkiä päättämään elementin \"%s\""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Pariton merkki \"%1$s\", odotettiin \"=\"-merkkiä elementin \"%3$s\" "
+"ominaisuuden \"%2$s\" jälkeen"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Pariton merkki \"%s\", odotettiin merkkiä \">\" tai \"/\" päättämään "
+"elementin \"%s\" aloituslippu, tai mahdollista ominaisuutta; käytit ehkä "
+"ominaisuuden nimessä siihen kelpaamatonta merkkiä"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Pariton merkki \"%1$s\", odotettiin avaavaa lainausmerkkiä yhtäsuuruusmerkin "
+"jälkeen annettaessa elementin \"%3$s\" ominaisuuden \"%2$s\" arvoa"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"\"%s\" ei ole kelvollinen merkki merkkien \"</\" jälkeen; \"%s\" ei voi olla "
+"elementin nimen alussa"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"\"%s\" ei ole kelvollinen merkki sulkuelementin \"%s\" jälkeen; sallittu "
+"merkki on \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elementti \"%s\" on suljettu, ei avoimia elementtejä"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Elementti \"%s\" on suljettu, mutta tällä hetkellä on avoinna elementti \"%s"
+"\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Asiakirja oli tyhjä tai sisälsi vain tyhjiä merkkejä"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Asiakirja loppui odottamattomasti heti avoimen kulmasulkeen \"<\" jälkeen"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Asiakirja loppui odottamattomasti elementtien ollessa sulkematta - \"%s\" "
+"oli viimeinen avattu elementti"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Asiakirja loppui odottamattomasti, odotettiin lipun <%s/> sulkevaa "
+"kulmasuljetta"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Asiakirja loppui odottamattomasti elementin nimen kohdalla"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Asiakirja loppui odottamattomasti ominaisuuden nimen kohdalla"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Asiakirja loppui odottamattomasti elementin avauslipun kohdalla"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Asiakirja loppui odottamattomasti ominaisuuden nimen jälkeisen "
+"yhtäsuuruusmerkin jälkeen; ominaisuudella ei ole arvoa"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Asiakirja loppui odottamattomasti ominaisuuden arvon kohdalla"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Asiakirja loppui odottamattomasti elementin \"%s\" sulkulipun kohdalla"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Asiakirja loppui odottamattomasti kommentin tai käsittelykomennon kohdalla"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "vioittunut kohde"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "sisäinen virhe tai vioittunut kohde"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "muisti loppui"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "taakseviittausten raja saavutettu"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"malli sisältää kohtia, jotka eivät ole tuettu osittaisessa täsmäyksessä"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "sisäinen virhe"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "takaisinviittaukset ehtoina eivät ole tuettu osittaisissa täsmäyksissä"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "rekursion enimmäissyvyys saavutettiin"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "työtilan raja tyhjille alamerkkijonoille saavutettiin"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "virheellinen yhdistelmä rivinvaihtolippuja"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "tuntematon virhe"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ mallin lopussa"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c mallin lopussa"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "Tuntematon merkki \\:n jälkeen"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "merkkikokoa muuttavia ohjaimia (\\l, \\L, \\u, \\U) ei sallita tässä"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numerot epäjärjestyksessä {}-määreessä"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "numerot liian suuria {}-määreessä"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "merkkiluokasta puuttuu päättävä ]"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "virheellinen escape-jono merkkiluokassa"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "alue epäjärjestyksessä merkkijoukolle"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ei mitään toistettavaa"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "tuntematon merkki (? jälkeen"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "tuntematon merkki (?< jälkeen"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "tuntematon merkki (?P jälkeen"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX:in nimetyt luokat on tuettu vain luokan sisällä"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "päättävä ) puuttuu"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ilman aloittavaa (-merkkiä"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R tai (?[+-]numeroita täytyy seurata )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "viittaus olemattomaan alitäsmäykseen"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "puuttuva ) kommentin jälkeen"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "säännöllinen lauseke on liian suuri"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "muistia ei voitu varata"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind-tyyppinen assert-makro ei ole kiinteäpituinen"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "virheellinen numero tai nimi (?( jälkeen"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "ehdollisessa ryhmässä on enemmän kuin kaksi haaraa"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assert-makrotoiminto odotettu merkkien (?( jälkeen"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "tuntematon POSIX-luokan nimi"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-vertailuelementtejä ei tueta"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "Merkin arvo sekvenssissä \\x{...} on liian suuri"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "virheellinen ehto (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C ei ole sallittu lookbehind-tyyppisissä assert-makroissa"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursiivinen kutsu voisi olla päättymätön"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "alimallin nimestä puuttuu päätösmerkki"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "kahdella nimetyllä alimallilla on sama nimi"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "väärin muotoiltu \\P- tai \\p-sekvenssi"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "tuntematon ominaisuuden nimi \\P- tai \\p-sekvenssin jälkeen"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "alimallin nimi on liian pitkä (enintään 32 merkkiä)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "liian monta nimettyä alimallia (enintään 10000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "oktaaliarvo on suurempi kuin \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-ryhmä sisältää useampia kuin yhden haaran"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE-ryhmän toisto ei ole sallittu"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "epäyhtenäisiä NEWLINE-valitsimia"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g:n jälkeen ei tule nimeä aaltosulkeissa tai nollasta poikkeavaa numeroa "
+"valinnaisesti aaltosulkeissa"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "odottamaton toisto"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "koodin ylivuoto"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "käännöksen työalueen koko loppui kesken"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "aiemmin tarkistettua ja viitattua alimallia ei löydy"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Virhe täsmätessä säännöllistä lauseketta %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-kirjasto on käännetty ilman UTF8-tukea"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE-kirjasto on käännetty ilman UTF8-ominaisuuksien tukea"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Virhe säännöllisessä lausekkeessa %s kohdassa %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Virhe optimoitaessa säännöllistä lauseketta %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "odotettiin heksadesimaalista numeroa tai merkkiä \"}\""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "odotettiin heksadesimaalista numeroa"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "merkki '<' puuttuu symbolisesta viitteestä"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "päättämätön symbolinen viite"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "nollan mittainen symbolinen viite"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "odotettiin numeroa"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "virheellinen symbolinen viite"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "ylimääräinen päättävä '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "tuntematon escape-jono"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Virhe tulkittaessa korvaavaa tekstiä \"%s\" kohdassa %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Lainattu teksti ei ala lainausmerkillä"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Pariton lainausmerkki komentorivillä tai muussa kuorisuojatussa tekstissä"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Teksti loppui aivan merkin \"\\\" jälkeen. (Teksti oli \"%s\")"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Teksti loppui ennen kuin löytyi merkkiä %c vastaava lainausmerkki. (Teksti "
+"oli \"%s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksti oli tyhjä (tai sisälsi vain tyhjiä merkkejä)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Datan lukeminen lapsiprosessilta epäonnistui"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Putken luominen lapsiprosessin kanssa viestintää varten epäonnistui (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Lukeminen lapsiprosessin putkesta epäonnistui (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Hakemistoon \"%s\" siirtyminen epäonnistui (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Lapsiprosessin käynnistys epäonnistui (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Virheellinen ohjelman nimi: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Virheellinen merkkijono argumenttivektorin kohdassa %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Virheellinen merkkijono ympäristössä: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Virhe työhakemisto: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Apuohjelman suoritus epäonnistui (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Odottamaton virhe funktiossa g_io_channel_win32_poll() luettaessa dataa "
+"lapsiprosessilta"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Datan lukeminen lapsiprosessilta epäonnistui (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Odottamaton virhe funktiossa select() lapsiprosessilta dataa luettaessa (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Odottamaton virhe funktiossa waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Haarauttaminen epäonnistui (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Lapsiprosessin \"%s\" käynnistäminen epäonnistui (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Lapsiprosessin tulosteen tai syötteen uudelleenohjaus epäonnistui (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Lapsiprosessin haarauttaminen epäonnistui (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Tuntematon virhe käynnistettäessä lapsiprosessia \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Lapsiprosessin pid-putkesta ei voitu lukea riittävästi dataa (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Merkki on sallitun UTF-8-välin ulkopuolella"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Virheellinen sarja muunnettavassa syötteessä"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Merkki on sallitun UTF-16-välin ulkopuolella"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Käyttö:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[VALITSIN...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Ohjevalitsimet:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Näytä ohjevalitsimet"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Näytä kaikki ohjevalitsimet"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Sovelluksen valitsimet:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Kokonaislukua \"%s\" ei voida tulkita kohteelle %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Kokonaisluku \"%s\" kohteelle %s on ylittää sallitun alueen"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Kokonaislukua \"%s\" ei voida tulkita kohteelle %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Double-arvo \"%s\" kohteelle %s ylittää sallitun alueen"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Virhe käsiteltäessä valitsinta %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Puuttuva argumentti kohteelle %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Tuntematon optio %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Kelvollista avaintiedostoa ei löytynyt haetuista kansioista"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ei tavallinen tiedosto"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Tiedosto on tyhjä"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Avaintiedosto sisältää rivin \"%s\", joka ei ole avain-arvopari, ryhmä tai "
+"kommentti"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Virheellinen ryhmän nimi: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Avaintiedosto ei ala ryhmällä"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Virheellinen avaimen nimi: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Avaintiedosto sisältää epäkelvon koodauksen \"%s\""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Avaintiedostossa ei ole ryhmää \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Avaintiedostossa ei ole avainta \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Avaintiedosto sisältää avaimen \"%s\" arvolla \"%s\", joka ei ole UTF-8 "
+"merkkijono"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Avaintiedosto sisältää avaimen \"%s\", jonka arvoa ei voida tulkita."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Avaintiedosto sisältää avaimen \"%s\", jonka arvoa ei voida tulkita, "
+"ryhmässä \"%s\"."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Avaintiedostossa ei ole avainta \"%s\" ryhmässä \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Avaintiedosto sisältää escape-jonon rivin lopussa"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Avaintiedostossa on virheellinen escape-jono \"%s\""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Arvoa \"%s\" ei voida tulkita numeroksi."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Kokonaisluku \"%s\" on sallitun alueen ulkopuolella"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Arvoa \"%s\" ei voida tulkita liukuluvuksi."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Arvoa \"%s\" ei voida tulkita totuusarvoksi."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Liian suuri laskuriarvo välitetty kohteelle %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Virta on jo suljettu"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Toiminto oli peruttu"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tuntematon tyyppi"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s-tiedostotyyppi"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s-tyyppi"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Odottamaton aikainen virran loppu"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Nimeämätön"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Työpöytätiedosto ei määrittele Exec-kenttää"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Sovelluksen vaatimaa päätettä ei löydy"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Käyttäjän sovellusten asetuskansiota %s ei voi luoda: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Käyttäjän MIME-asetusten kansiota %s ei voi luoda: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Käyttäjän työpöytätiedostoa %s ei voi luoda"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Oma määrittely kohteelle %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "asema ei toteuta aseman avausta"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "asema ei toteuta median tarkkailua"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem-koodauksen versiota %d ei voi käsitellä"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Virheellinen määrä tunnisteita (%d) GEmblem-koodauksessa"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon-koodauksen versiota %d ei voi käsitellä"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Virheellinen määrä tunnisteita (%d) GEmblemedIcon-koodauksessa"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Oletettiin GEmblen kohteelle GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Toiminto ei ole tuettu"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Yllä olevaa liitospistettä ei löydy"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Kansion päälle ei voi kopioida"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Kansiota ei voi kopioida kansion päälle"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Kohdetiedosto on olemassa"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kansiota ei voi kopioida rekursiivisesti"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Erikoistiedostoa ei voi kopioida"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Saatiin virheellinen symbolisen linkin arvo"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Roskakori ei ole tuettu"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Tiedostonimi ei voi sisältää merkkiä \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "taltio ei toteuta liittämistä"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Tiedoston käsittelyyn ei ole rekisteröity mitään sovellusta"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Numeraattori on suljettu"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Tiedoston numeraattorilla on odottavia toimintoja"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Numeraattori on jo suljettu"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "tiedosto"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Kuvakkeiden sisältävä tiedosto"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon-koodauksen versiota %d ei voi käsitellä"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Virheellistä syötetietoa GFileIcon-oliolle"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Virta ei tue komentoa query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Virta ei tue siirtymistä"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Syötevirtaa ei voi kutistaa"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Virta ei tue kutistamista"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Väärä määrä tunnisteita (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Luokan nimelle %s ei ole tyyppiä"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Tyyppi %s ei toteuta GIcon-määritystä"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Typpi %s ei ole luokkatyyppi"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Virheellinen versionumero: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Tyyppi %s ei toteuta GIcon-määrityksen kutsua from_tokens()"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Annettua kuvakkeen koodauksen versiota ei voi käsitellä"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Syötevirta ei toteuta lukua"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Virrassa on toiminto odottamassa"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Paikallista kansiontarkkailun oletustyyppiä ei voi selvittää"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Virheellinen tiedostonimi %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Virhe haettaessa tietoja tiedostojärjestelmästä: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Juurikansiota ei voi nimetä uudestaan"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Virhe nimettäessä tiedostoa uudestaan: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Tiedostoa ei voi nimetä uudestaan, tiedosto on jo olemassa"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Virheellinen tiedostonimi"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Virhe avattaessa tiedostoa: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kansiota ei voi avata"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Virhe poistettaessa tiedostoa: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Virhe siirrettäessä tiedostoa roskakoriin: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Roskakorikansiota %s ei voi luoda: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Päätasoa roskakoria varten ei löydy"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Roskakori kansiota ei löydy tai sitä ei voi luoda"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Roskakorin informaatiotiedostoa ei voi luoda: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Tiedosto ei voi siirtää roskakoriin: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Virhe luotaessa kansiota: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Virhe luotaessa symbolista linkkiä: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Virhe siirrettäessä tiedostoa: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Kansiota ei voi siirtää kansion päälle"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Varmuuskopiotiedoston luonti epäonnistui"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Virhe poistettaessa kohdetiedostoa: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Siirto liitospisteiden välillä ei ole tuettu"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Ominaisuuden arvo ei voi olla NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Virheellinen ominaisuustyyppi (piti olla merkkijono)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Virheellinen laajennetun ominaisuuden nimi"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Virhe asetettaessa laajennettua ominaisuutta \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Virhe tarkkailtaessa tiedostoa \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (virheellinen merkistökoodaus)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Virhe tarkkailtaessa tiedostokuvaajaa: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Virheellinen ominaisuuden tyyppi (piti olla uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Virheellinen ominaisuuden tyyppi (piti olla uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Virheellinen ominaisuuden tyyppi (piti olla tavujono)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Virhe asetettaessa oikeuksia: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Virhe asetettaessa omistajaa: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolinen linkki ei voi olla NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Virhe asetettaessa symbolista linkkiä: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Virhe asetettaessa symbolista linkkiä: tiedosto ei ole symbolinen linkki"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux-konteksti ei voi olla NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Virhe asetettaessa SELinux-kontekstia: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ei ole käytössä tässä tietokoneessa"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Ominaisuuden %s asetus ei ole tuettu"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Virhe luettaessa tiedostosta: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Virhe siirryttäessä tiedostossa: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Virhe suljettaessa tiedostoa: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Paikallisen tiedostomonitoroinnin oletustapaa ei voitu selvittää"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Virhe kirjoitettaessa tiedostoon: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Virhe poistettaessa vanhaa varmuuskopiolinkkiä: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Virhe luotaessa varmuuskopiota: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Virhe nimettäessä uudestaan väliaikaistiedostoa: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Virhe katkaistaessa tiedostoa: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Virhe avattaessa tiedostoa \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Kohdetiedosto on kansio"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Kohdetiedosto ei ole tavallinen tiedosto"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Tiedostoa muokattiin muualta"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Virhe poistettaessa vanhaa tiedostoa: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Saatiin virheellinen GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Virheellinen siirtymispyyntö"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream-kohdetta ei voi kutistaa"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Tietotaulukon suurin koko tuli vastaan"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Muistin tulostevirran koko ei ole muutettavissa"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Muistin tulostevirran koon muutos epäonnistui"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount ei toteuta irrottamista"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount ei toteuta aseman avaamista"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount ei toteuta uudestaanliittämistä"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount ei toteuta sisältötyypin arvausta"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount ei toteuta synkronista sisältötyypin arvausta"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Tulostevirta ei toteuta kirjoitusta"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Lähdevirta on jo suljettu"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nimi"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Kuvakkeen nimi"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nimet"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Kuvakkeiden nimiä sisältävä jono"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "käytä oletusvarmistuksia"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Käytetäänkö oletusvarmistuksia, jotka on löydetty lyhentämällä nimeä \"-\"-"
+"merkkien kohdilta. Jättää huomiotta ensimmäisen jälkeiset nimet, jos useita "
+"on annettu."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemeIcon-koodauksen versiota %d ei voi käsitellä"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Tiedostokuvaaja"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Tiedostokuvaaja, josta luetaan"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Sulje tiedostokuvaaja"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Suljetaanko tiedostokuvaaja, kun virta on suljettu"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Virhe luettaessa UNIX:ilta: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Virhe suljettaessa UNIX:ia: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Tiedostojärjestelmän juuri"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Tiedostokuvaaja, johon kirjoitetaan"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Virhe käsiteltäessä UNIX:iin: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "taltio ei toteuta aseman avausta"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Ohjelmaa ei löydy"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Virhe käynnistettäessä ohjelmaa: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI:ja ei tueta"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "assosiaation muutokset eivät ole tuettu win32-alustalla"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Assosiaation luonti ei ole tuettu win32-alustalla"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "älä piilota kohtia"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "käytä pitkää listausmuotoa"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[TIEDOSTO...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u tavu"
+#~ msgstr[1] "%u tavua"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..95dc646
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1913 @@
+# French translation of glib.
+# Copyright (C) 2001-2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+#
+# Christophe Merlet <redfox@redfoxcenter.org>, 2001-2006.
+# Benoît Dejean <TazForEver@dlfp.org>, 2005.
+# Jonathan Ernst <jonathan@ernstfamily.ch>, 2006.
+# Robert-André Mauchin <zebob.m@pengzone.org>, 2006-2008.
+# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007.
+# Claude Paroz <claude@2xlibre.net>, 2007-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 09:21+0100\n"
+"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Attribut « %s » inattendu pour l'élément « %s »"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "L'attribut « %s » de l'élément « %s » est introuvable"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Balise « %s » inattendue. La balise « %s » était attendue"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Balise « %s » inattendue à l'intérieur de « %s »"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Impossible de trouver un fichier de signets valide dans les répertoires de "
+"données"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Un signet pour l'URI « %s » existe déjà"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Aucun signet trouvé pour l'URI « %s »"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Aucun type MIME défini dans le signet pour l'URI « %s »"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Aucun indicateur privé n'est défini dans le signet pour l'URI « %s »"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Aucun groupe n'est défini dans le signet pour l'URI « %s »"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Aucune application nommée « %s » n'a enregistré un signet pour « %s »"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "L'expansion de la ligne d'exécution « %s » avec l'URI « %s » a échoué"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+"La conversion du jeu de caractères « %s » vers « %s » n'est pas prise en charge"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Impossible d'ouvrir le convertisseur de « %s » vers « %s »"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Séquence d'octets non valide en entrée du convertisseur"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Erreur lors de la conversion : %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Séquence partielle de caractères à la fin de l'entrée"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+"Impossible de convertir la valeur de rechange « %s » vers le jeu de codes « %"
+"s »"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"L'URI « %s » n'est pas une URI absolue utilisant le schéma de « fichier »"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "L'URI de fichier local « %s » ne peut pas inclure de caractère « # »"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "L'URI « %s » n'est pas valide"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Le nom d'hôte de l'URI « %s » n'est pas valide"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "L'URI « %s » contient des caractères d'échappements non valides"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Le chemin « %s » n'est pas un chemin absolu"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nom d'hôte non valide"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Erreur à l'ouverture du répertoire « %s » : %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Impossible d'allouer %lu octets pour lire le fichier « %s »"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Erreur de lecture du fichier « %s » : %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Le fichier « %s » est trop grand"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "La lecture depuis le fichier « %s » a échoué : %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "L'ouverture du fichier « %s » a échoué : %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"L'obtention des attributs du fichier « %s » a échoué : fstat() a échoué : %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "L'ouverture du fichier « %s » a échoué : fdopen() a échoué : %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Le renommage du fichier « %s » vers « %s » a échoué : g_rename() a échoué : %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "La création du fichier « %s » a échoué : %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"L'ouverture du fichier « %s » en écriture a échoué : fdopen() a échoué : %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+"L'ouverture du fichier « %s » en écriture a échoué : fwrite() a échoué : %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr ""
+"L'ouverture du fichier « %s » en écriture a échoué : fflush() a échoué : %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr ""
+"L'ouverture du fichier « %s » en écriture a échoué : fsync() a échoué : %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "La fermeture du fichier « %s » a échoué : fclose() a échoué : %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Le fichier existant « %s » ne peut pas être supprimé : g_unlink() a échoué : %"
+"s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Le modèle « %s » n'est pas valide, il ne devrait pas contenir de « %s »"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Le modèle « %s » ne contient pas XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f Kio"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f Mio"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f Gio"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "La lecture du lien symbolique « %s » a échoué : %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Liens symboliques non pris en charge"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Impossible d'ouvrir le convertisseur de « %s » vers « %s » : %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Impossible de faire une lecture brute dans g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Laisse de côté des données non converties dans le tampon de lecture"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "La canal se termine avec un caractère partiel"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Impossible de faire une lecture brute dans g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "L'ouverture du fichier « %s » a échoué : open() a échoué : %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Le mappage du fichier « %s » a échoué : mmap() a échoué : %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Erreur à la ligne %d, caractère %d : "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Erreur à la ligne %d : %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Entité vide « &; » vue : les entités valides sont : &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Le caractère « %s » n'est pas valide au début d'un nom d'entité ; le "
+"caractère & commence une entité ; si l'esperluette n'est pas supposée être "
+"une entité, échappez-le comme &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Le caractère « %s » n'est pas valide à l'intérieur d'un nom d'entité"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Le nom d'entité « %s » n'est pas connu"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"L'entité ne se termine pas avec un point-virgule ; vous avez probablement "
+"utilisé une esperluette sans l'avoir marquée comme entité - échappez "
+"l'esperluette comme &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"L'analyse a échoué. « %-.*s » devrait être un nombre à l'intérieur de la "
+"référence de caractère (&#234; par exemple) - peut-être que le nombre est "
+"trop grand"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "La référence de caractère « %-.*s » ne code pas un caractère autorisé"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Référence de caractère vide ; elle devrait inclure un nombre comme &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"La référence de caractère ne se termine pas avec un point-virgule ; vous "
+"avez vraisemblablement utilisé une esperluette sans intention de commencer "
+"une entité - échappez l'esperluette comme &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Référence d'entité non terminée"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Référence de caractère non terminée"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Texte codé en UTF-8 non valide - séquence trop longue"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Texte codé en UTF-8 non valide - n'est pas un caractère de début"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Texte codé en UTF-8 non valide - « %s » est non valide"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Le document doit commencer avec un élément (par ex. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"« %s » n'est pas un caractère valide suivant le caractère « < » ; il ne semble "
+"pas commencer un nom d'élément"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Caractère bizarre « %s », un caractère « > » est requis pour terminer la "
+"balise d'élément vide « %s »"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Caractère bizarre « %s », un caractère « = » est requis après le nom de "
+"l'attribut « %s » de l'élément « %s »"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Caractère bizarre « %s », un caractère « > » ou  « / » est requis pour terminer "
+"la balise de début de l'élément « %s », ou optionnellement un attribut ; peut-"
+"être que vous utilisez un caractère non valide dans un nom d'attribut"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Caractère bizarre « %s », un guillemet d'ouverture après le signe égal est "
+"requis quand on donne une valeur pour l'attribut « %s » de l'élément « %s »"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"« %s » n'est pas un caractère valide suivant les caractères « </ » ; « %s » ne "
+"peut pas commencer un nom d'élément"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"« %s » n'est pas un caractère valide suivant le nom l'élément de fermeture « %"
+"s » ; le caractère autorisé est « > »"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "L'élément « %s » a été fermé, aucun élément est actuellement ouvert"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"L'élément « %s » a été fermé, mais l'élément actuellement ouvert est « %s »"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Le document était vide ou ne contenait que des espaces"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Le document s'est terminé de manière inattendue juste après un crochet "
+"ouvrant « < »"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Le document s'est terminé de manière inattendue avec des éléments encore "
+"ouverts - « %s » était le dernier élément ouvert"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Le document s'est terminé de manière inattendue, un crochet fermant pour la "
+"balise <%s/> est requis"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+"Le document s'est terminé de manière inattendue à l'intérieur d'un nom "
+"d'élément"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+"Le document s'est terminé de manière inattendue à l'intérieur d'un nom "
+"d'attribut"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Le document s'est terminé de manière inattendue à l'intérieur d'une balise "
+"d'ouverture d'élément."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Le document s'est terminé de manière inattendue après le signe égal suivant "
+"un nom d'attribut ; aucune valeur d'attribut"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Le document s'est terminé de manière inattendue alors qu'il était à "
+"l'intérieur d'une valeur d'attribut"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Le document s'est terminé de manière inattendue à l'intérieur de la balise "
+"de fermeture pour l'élément « %s »"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Le document s'est terminé de manière inattendue à l'intérieur d'un "
+"commentaire ou d'une instruction de traitement"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objet corrompu"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "erreur interne ou objet corrompu"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "mémoire insuffisante"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "limite de suivi arrière atteinte"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"le motif contient des éléments non pris en charge par la correspondance "
+"partielle"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "erreur interne"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"les références inverses utilisées comme conditions ne sont pas prises en "
+"charge par la correspondance partielle"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "limite de récursivité atteinte"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "limite d'espace de travail atteinte pour les sous-chaînes vides"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinaison de marqueurs de nouvelle ligne non valide"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "erreur inconnue"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ à la fin du motif"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c à la fin du motif"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "un caractère non reconnu suit \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"Les échappements de changement de casse (\\l, \\L, \\u, \\U) ne sont pas "
+"autorisés ici"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "nombre trop grand dans le quantificateur {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "nombre trop grand dans le quantificateur {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "caractère terminaison ] manquant pour la classe de caractère"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "séquence d'échappement non valide dans la classe de caractère"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "plage déclassée dans la classe de caractère"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "rien à répéter"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "caractère non reconnu après (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "caractère non reconnu après (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "caractère non reconnu après (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+"Les classes nommées en suivant POSIX sont uniquement prises en charge depuis "
+"une classe"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ") de terminaison manquante"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") sans ( d'ouverture"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ou (?[+-]chiffres doivent être suivis par )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "référence à un sous-motif non-existant"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ") manquante après un commentaire"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "expression régulière trop grande"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "l'obtention de la mémoire a échoué"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "l'assertion « lookbehind » n'a pas de longueur fixe"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "nom ou nombre non conforme après (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "un groupe conditionnel contient plus de deux branches"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "une assertion est attendue après (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nom de classe POSIX inconnu"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "les éléments d'interclassement POSIX ne sont pas pris en charge"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "la valeur du caractère dans la séquence \\x{...} est trop grande"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condition (?(0) non valide"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C n'est pas autorisé dans l'assertion « lookbehind »"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "un appel récursif peut effectuer des boucles indéfiniment"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "terminaison manquante dans le nom du sous-motif"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "deux sous-motifs nommés possèdent le même nom"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "séquence \\P ou \\p non conforme"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nom de propriété inconnu après \\P ou \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "le nom du sous-motif est trop long (32 caractères maximum)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "trop de sous-motifs nommés (10 000 maximum)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "la valeur octale est plus grande que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "le groupe DEFINE contient plus d'une branche"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "la répétition d'un groupe DEFINE n'est pas autorisée"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "options NEWLINE inconsistentes"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g n'est pas suivi d'un nom accolé ou d'un nombre accolé différent de zéro"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "répétition inattendue"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "dépassement de code"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "dépassement de capacité en compilant l'espace de travail"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "un sous-motif référencé et précédemment vérifié n'a pas été trouvé"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Erreur lors de la correspondance de l'expression régulière %s : %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "La bibliothèque PCRE est compilée sans la prise en charge UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"La bibliothèque PCRE est compilée sans la prise en charge des propriétés UTF-"
+"8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"Erreur à la compilation de l'expression régulière %s au caractère %d : %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Erreur à l'optimisation de l'expression régulière %s : %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "chiffre hexadécimal ou « } » attendu"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "chiffre hexadécimal attendu"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "« < » manquant dans la référence symbolique"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "référence symbolique non terminée"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "référence symbolique de longueur nulle"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "chiffre attendu"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "référence symbolique illégale"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "terminaison parasite « \\ »"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "séquence d'échappement inconnue"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Erreur lors de l'analyse du texte de substitution « %s » au caractère %lu : %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Le texte cité ne commence pas avec un caractère de citation"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Caractère de citation sans correspondance dans la ligne de commande ou un "
+"autre texte shell rapporté"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"Le texte s'est terminé juste après un caractère « \\ ». (Le texte était « %s »)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Le texte s'est terminé avant qu'un caractère de citation soit trouvé pour %"
+"c. (Le texte était « %s »)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Le texte était vide (ou ne contenait que des espaces)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "La lecture des données depuis le processus fils a échoué"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"La création du tube de communication avec le processus fils a échoué (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "La lecture depuis un tube fils a échoué (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Le changement de répertoire « %s » a échoué (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "L'exécution du processus fils a échoué (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nom du programme non valide : %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Chaîne non valide dans le paramètre vecteur à %d : %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Chaîne non valide dans l'environnement : %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Répertoire de travail non valide : %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "L'exécution du programme d'aide a échoué (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Erreur inattendue dans g_io_channel_win32_poll() lors de la lecture des "
+"données depuis un processus fils"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "La lecture des données depuis le processus fils a échoué (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Erreur inattendue dans select() à la lecture des données depuis un processus "
+"fils (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Erreur inattendue dans waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Le clonage a échoué (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "L'exécution du processus fils « %s » a échoué (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"La redirection de la sortie ou de l'entrée du processus fils a échoué (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Le clonage du processus fils a échoué (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Erreur inconnue à l'exécution du processus fils « %s »"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Impossible de lire suffisamment de données depuis le tube du processus fils "
+"de pid (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Caractère hors plage pour UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Séquence non valide dans l'entrée du convertisseur"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Caractère hors plage pour UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Utilisation :"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Options de l'aide :"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Affiche les options de l'aide"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Affiche toutes les options de l'aide"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Options de l'application :"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Impossible d'analyser la valeur entière « %s » pour %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "La valeur entière « %s » pour %s est hors plage"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Impossible d'analyser la valeur double « %s » pour %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "La valeur double « %s » pour %s est hors plage"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Erreur lors de l'analyse de l'option %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argument manquant pour %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Option inconnue %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Impossible de trouver un fichier de clés valide dans les répertoires de "
+"recherche"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "N'est pas un fichier standard"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Le fichier est vide"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Le fichier de clés contient la ligne « %s » qui n'est ni une paire de valeurs "
+"de clé, ni un groupe, ni un commentaire"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nom de groupe non valide : %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Le fichier de clés ne débute pas par un groupe"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nom de clé non valide : %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+"Le fichier de clés contient un codage de caractères non pris en charge « %s »"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Le fichier de clés n'a pas de groupe « %s »"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Le fichier de clés n'a pas de clé « %s »"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Le fichier de clés contient la clé « %s » avec la valeur « %s » qui n'est pas "
+"codé en UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Le fichier de clés contient la clé « %s » avec une valeur impossible à "
+"interpréter."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Le fichier de clés contient la clé « %s » dans le groupe « %s » qui a une "
+"valeur impossible à interpréter."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Le fichier de clés ne contient pas de clé « %s » dans le groupe « %s »"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Le fichier de clés contient un caractère d'échappement en fin de ligne"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+"Le fichier de clés contient une séquence d'échappement non valide « %s »"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "La valeur « %s » ne peut pas être interprétée comme un nombre."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "La valeur entière « %s » est hors plage"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+"La valeur « %s » ne peut pas être interprétée comme un nombre à virgule "
+"flottante."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "La valeur « %s » ne peut pas être interprétée comme un booléen."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "La valeur de comptage fournie à %s est trop grande"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Le flux est déjà fermé"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "L'opération a été annulée"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Type inconnu"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "Type de fichier %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "Type %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Fin précoce de flux inattendue"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sans nom"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Le fichier Bureau n'a pas indiqué de champ Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Impossible de trouver le terminal requis par l'application"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Impossible de créer le dossier de configuration de l'application %s pour "
+"l'utilisateur : %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+"Impossible de créer le dossier de configuration MIME %s pour l'utilisateur : "
+"%s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Impossible de créer le fichier bureau %s pour l'utilisateur"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Définition personnalisée pour %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "le lecteur n'implémente pas l'éjection (« eject »)"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "le lecteur n'implémente pas la scrutation du média (« polling »)"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Impossible de gérer la version %d du codage GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Nombre de jetons incorrect (%d) dans le codage GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Impossible de gérer la version %d du codage GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Nombre de jetons incorrect (%d) dans le codage GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Un GEmblem est attendu pour le GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Opération non prise en charge"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Le point de montage conteneur n'existe pas"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Impossible de copier par dessus un répertoire"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Impossible de copier un répertoire par dessus un autre"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Le fichier cible existe"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Impossible de copier récursivement un répertoire"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Impossible de copier le fichier spécial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Valeur de lien symbolique donnée non valide"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "La corbeille n'est pas prise en charge"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Les noms de fichiers ne peuvent contenir « %c »"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "le volume n'implémente pas « mount »"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Aucune application n'est enregistrée pour gérer ce fichier"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "L'énumérateur est fermé"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "L'énumérateur du fichier a une opération en cours"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "L'énumérateur du fichier est déjà fermé"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fichier"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Le fichier contenant l'icône"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Impossible de gérer la version %d du codage GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Données d'entrée incorrectes pour GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Le flux ne prend pas en charge query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "La recherche n'est pas prise en charge sur le flux"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "La troncature n'est pas autorisée sur le flux en entrée"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "La troncature n'est pas prise en charge sur le flux"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Nombre de jetons incorrect (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Aucun type pour le nom de classe %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Le type %s n'implémente pas l'interface GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Le type %s n'est pas classé"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Numéro de version incorrect : %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+"Le type %s n'implémente pas la fonction from_tokens() de l'interface GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Impossible de gérer la version fournie du codage de l'icône"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Le flux en entrée n'implémente pas « read »"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Le flux a une opération en cours"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"Impossible de trouver le type de moniteur de répertoire local par défaut"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nom de fichier non valide : %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Impossible d'obtenir les informations du système de fichiers : %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Impossible de renommer le répertoire racine"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Erreur au renommage du fichier : %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Impossible de renommer le fichier car ce nom est déjà utilisé"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nom de fichier non valide"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Erreur à l'ouverture du fichier : %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Impossible d'ouvrir le répertoire"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Erreur à la suppression du fichier : %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Erreur à la mise à la corbeille du fichier : %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Impossible de créer le répertoire de la corbeille %s : %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Impossible de trouver le répertoire racine pour la corbeille"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Impossible de trouver ou créer le répertoire de la corbeille"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr ""
+"Impossible de créer le fichier d'informations de mise à la corbeille : %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Impossible de mettre à la corbeille le fichier : %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Erreur à la création du répertoire : %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Erreur lors de la création du lien symbolique : %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Erreur lors du déplacement du fichier : %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Impossible de déplacer un répertoire par dessus un autre"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "La création du fichier de sauvegarde a échoué"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Erreur lors de la suppression du fichier cible : %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Le déplacement entre des points de montage n'est pas pris en charge"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "La valeur d'attribut ne doit pas être « NULL »"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Type d'attribut non valide (une chaîne est attendue)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nom d'attribut étendu non valide"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Erreur lors de la définition de l'attribut étendu « %s » : %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Erreur de l'interrogation du fichier « %s » : %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codage non valide)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Erreur de l'interrogation du descripteur de fichier : %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Type d'attribut non valide (uint32 attendu)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Type d'attribut non valide (uint64 attendu)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Type d'attribut non valide (chaîne octet attendu)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Erreur lors de la définition des permissions : %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Erreur lors de la définition du propriétaire : %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "un lien symbolique ne doit pas être « NULL »"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Erreur lors de la définition du lien symbolique : %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Erreur lors de la définition du lien symbolique : le fichier n'est pas un "
+"lien symbolique"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Le contexte SELinux ne doit pas être « NULL »"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Erreur lors de la définition du contexte SELinux : %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux n'est pas activé sur ce système"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "La définition de l'attribut %s n'est pas prise en charge"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Erreur lors de la lecture du fichier : %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Erreur lors de la navigation à travers le fichier : %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Erreur lors de la fermeture du fichier : %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Impossible de trouver le type de moniteur de fichier local par défaut"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Erreur lors de l'écriture du fichier : %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Erreur lors de la suppression de l'ancien lien de sauvegarde : %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Erreur lors de la création de la copie de sauvegarde : %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Erreur lors du renommage du fichier temporaire : %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Erreur lors de la troncature du fichier : %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Erreur lors de l'ouverture du fichier « %s » : %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Le fichier cible est un répertoire"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Le fichier cible n'est pas un fichier standard"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Le fichier a été modifié extérieurement"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Erreur à la suppression de l'ancien fichier : %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Le type GSeekType fourni n'est pas valide"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Requête « seek » non valide"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Impossible de tronquer GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "La limite maximale du tableau de données est atteinte"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Le flux de sortie mémoire n'est pas redimensionnable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Le redimensionnement du flux de sortie mémoire a échoué"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount n'implémente pas le démontage (« unmount »)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount n'implémente pas l'éjection"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount n'implémente pas le remontage (« remount »)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount n'implémente pas l'estimation du type de contenu"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount n'implémente pas l'estimation du type de contenu synchrone"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Le flux de sortie n'implémente pas « write »"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Le flux source est déjà fermé"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nom"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Le nom de l'icône"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "noms"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Un tableau contenant les noms des icônes"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "utiliser les valeurs de repli par défaut"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Indique s'il faut utiliser les valeurs de repli par défaut obtenues par "
+"raccourcissement du nom aux caractères « - ». Si plusieurs noms sont donnés, "
+"seul le premier est pris en compte."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Impossible de gérer la version %d du codage GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descripteur de fichier"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Le descripteur de fichier à lire"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Fermer le descripteur de fichier"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+"Indique si le descripteur de fichier doit être fermé lorsque le flux est "
+"fermé"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Erreur lors de la lecture depuis unix : %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Erreur lors de la fermeture d'unix : %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Racine du système de fichiers"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Le descripteur de fichier à écrire"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Erreur lors de l'écriture vers unix : %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "le volume n'implémente pas l'éjection (« eject »)"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Impossible de trouver l'application"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Erreur lors du lancement de l'application : %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI non pris en charge"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+"Les modifications d'association ne sont pas prises en en charge sur win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "La création d'association n'est pas prise en charge sur win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ne masque pas de lignes"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "utilise le format de liste détaillé"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FICHIER...]"
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..422467d
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,1805 @@
+# Irish translations for glib package.
+# Copyright (C) 2002-2004, 2007 Free Software Foundation, Inc.
+# Alastair McKinstry, <mckinstry@debian.org>, 2003.
+# Seán de Búrca, <leftmostcat@gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2007-12-20 21:28-0700\n"
+"Last-Translator: Seán de Búrca <leftmostcat@gmail.com>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : (n%10==1 || n%10==2) ? 1 : (n%"
+"10>=3 && n%10<= 6) ? 2 : ((n%10>=7 && n%10<=9) || n==10) ? 3 : 4;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Theip ar leathnú líne reatha '%s' le URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Earráid le linn cumarsáide: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Is neamhbhailí an URI '%s'"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Is neamhbhailí an t-óstainm an URI '%s'"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Óstainm neamhbhailí"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Earráid agus comhadlann '%s' á oscailt: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr ""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Theip ar léamh ó chomhad '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Theip ar oscailt comhad '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Theip ar oscailt comhad '%s': theip fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Theip ar athainmniú comhad '%s' go '%s': theip g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Theip ar chruthú comhad '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Theip ar oscailt comhad '%s' le haghaidh scríofa: theip fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Theip ar scríobh comhad '%s': theip fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Theip ar scríobh comhad '%s': theip fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Theip ar scríobh comhad '%s': theip fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Theip ar dhúnadh comhad '%s': theip fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr ""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr ""
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Theip ar léamh nasc siombalach '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Theip ar oscailt comhad '%s': theip open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Theip ar mapáil comhad '%s': theip mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Earraidh ar líne %d carachtar %d:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Earráid ar líne %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Téacs UTF-8-ionchódaithe neamhbhailí - seicheamh rófhada"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Téacs UTF-8-ionchódaithe neamhbhailí - ní carachtar tosaithe"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Téacs UTF-8-ionchódaithe neamhbhailí - is neamhbhailí '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr ""
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "réad truaillithe"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "earráid inmheánach nó réad truaillithe"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "cuimhne ídithe"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "earráid inmheánach"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "earráid anaithnid"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") gan ( tosaigh"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "theip ar fháil cuimhne"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Earráid agus slonn ionadaíochta %s á thiomsú ag carachtar %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "bhíothas ag súil le digit"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Theip ar léamh sonraí ó mhacphróiseas"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Theip ar léamh ó mhacphíopa (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ainm cláir neamhbhailí: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Comhadlann oibre neamhbhailí: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Theip ar rith clár cabhrach (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Theip ar dhéanamh forc (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Earráid anaithnid agus macphróiseas \"%s\" á rith"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Úsáid:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ROGHA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Roghanna Cabhrach:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Taispeáin roghanna cabhrach"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Taispeáin gach rogha cabhrach"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Roghanna Feidhmchláir:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Earráid agus rogha %s á pharsáil"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Rogha anaithnid %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ní gnáthchomhad é"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Is folamh é an comhad"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ainm grúpa neamhbhailí: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ainm eocrach neamhbhailí: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Cineál anaithnid"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "cineál comhaid %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "cineál %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Gan ainm"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Is neamhbhailí an t-óstainm an URI '%s'"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ainm comhaid %s neamhbhailí"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Earráid agus eolas chóras comhad á fháil: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Earráid agus comhad á athainmniú: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ainm comhaid neamhbhailí"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Earráid agus comhad á oscailt: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Earráid agus comhad á bhaint: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Earráid agus comhad á chur sa bhruscar: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Ní féidir comhadlann bhruscair %s a chruthú: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Ní féidir comhad curtha sa bhruscar a chruthú: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Ní féidir comhad a chur sa bhruscar: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Earráid agus comhadlann '%s' á oscailt: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Earráid agus nasc siombalach á dhéanamh: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Earráid agus comhad á bhogadh: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Earráid agus comhadlann '%s' á oscailt: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ionchódú neamhbhailí)"
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Earráid le linn cumarsáide: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Earráid le linn cumarsáide: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Earráid agus nasc siombalach á shocrú: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Earráid le linn cumarsáide: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Earráid agus comhad á léamh: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Earráid agus comhad á dhúnadh: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Earráid agus comhad á scríobh: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Earráid agus rogha %s á pharsáil"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Earráid agus comhad '%s' á oscailt: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Earráid agus comhad á bhaint: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Ainm comhaid %s neamhbhailí"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+#, fuzzy
+msgid "name"
+msgstr "Gan ainm"
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Is neamhbhailí an t-óstainm an URI '%s'"
+
+#: gio/gthemedicon.c:223
+#, fuzzy
+msgid "names"
+msgstr "Gan ainm"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Earráid agus comhad '%s' á léamh: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Earráid agus unix á léamh: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Earráid agus unix á dhúnadh: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Fréamh an chóras comhad"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Earráid agus unix á scríobh: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Ní féidir feidhmchlár a aimsiú"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Earráid agus feidhmchlár á thosú: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Ní thaicaítear leis na URIanna"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ná folaigh iontrálacha"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[COMHAD...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "beart amháin"
+#~ msgstr[1] "%u bheart"
+#~ msgstr[2] "%u bheart"
+#~ msgstr[3] "%u mbeart"
+#~ msgstr[4] "%u beart"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Earráid agus rogha %s á pharsáil"
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..87ab321
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,1880 @@
+# translation of gl.po to Galego
+# translation of glib.glib-2-6.po to
+# Galician translation of GLib
+# Copyright (C) 2001, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# Manuel A. Fernández Montecelo <manuel@sindominio.net>, 2001, 2005.
+# Ignacio Casal Quinteiro <nacho.resa@gmail.com>, 2005, 2006.
+# Ignacio Casal Quinteiro <icq@cvs.gnome.org>, 2007.
+# Ignacio Casal Quinteiro <icq@svn.gnome.org>, 2008.
+# Fran Diéguez <fran.dieguez@mabishu.com>, 2009.
+# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-16 23:39+0100\n"
+"Last-Translator: Suso Baleato <suso.baleato@xunta.es>\n"
+"Language-Team: Galego <proxecto@trasno.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Atributo '%s' inesperado para o elemento '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Non se localizou o atributo '%s' do elemento '%s'"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Etiqueta '%s' inesperada, esperábase a etiqueta '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Etiqueta '%s' inesperada dentro de '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Non se puido localizar un ficheiro de marcadores válido nos directorios de "
+"datos"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Xa existe un marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Non se encontrou ningún marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Non hai ningún tipo MIME definido no marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Non se definiu ningún parámetro privado no marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Non existe ningún grupo definido no marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Ningunha aplicación denominada '%s' rexistrou un marcador para '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Fallo ao expandir a liña executábel '%s' co URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Non se soporta a conversión do conxunto de caracteres '%s' a '%s'"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Non se puido abrir o conversor de '%s' a '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "A secuencia de bytes non é válida na entrada da conversión"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Erro durante a conversión: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Hai unha secuencia de carácter parcial ao final da entrada"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+"Non se pode converter o modo de emerxencia '%s' na codificación de "
+"caracteres '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "O URI '%s' non é un URI absoluto usando o esquema \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "O URI do ficheiro local '%s' non pode incluír un '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "O URI '%s' non é válido"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "O nome de host do URI '%s' non é válido"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "O URI '%s' contén caracteres de escape non válidos"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "O nome de camiño '%s' non é un camiño absoluto"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "O nome do host non é válido"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Erro ao abrir o directorio '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Non se puideron asignar %lu bytes para ler o ficheiro \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Erro ao ler o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "O ficheiro \"%s\" é demasiado grande"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Fallo ao ler desde o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Fallo ao abrir o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Fallo ao obter os atributos do ficheiro '%s': fstat() fallou: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Fallo ao abrir o ficheiro '%s': fdopen() fallou: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Fallo ao renomear o ficheiro '%s' como '%s': g_rename() fallou: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Fallo ao crear o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Fallo ao abrir o ficheiro '%s' para escritura: fdopen() fallou: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Fallo ao escribir o ficheiro '%s': fwrite() fallou: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Fallo ao escribir o ficheiro '%s': fflush() fallou: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Fallo ao escribir o ficheiro '%s': fsync() fallou: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Fallo ao pechar o ficheiro '%s': fclose() fallou: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "O ficheiro existente '%s' non se puido eliminar: g_unlink() fallou: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "O modelo '%s' non é válido, non debería conter '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "O modelo '%s' non contén XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Fallo ao ler a ligazón simbólica '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Ligazóns simbólicas non soportados"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Non se puido abrir o conversor de '%s' a '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Non se pode facer unha lectura en bruto en g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Datos restantes non convertidos no búfer de lectura"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "O canal remata nun carácter parcial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Non se pode facer unha lectura en bruto en g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Fallo ao abrir o ficheiro '%s': open() fallou: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Fallo ao mapear o ficheiro '%s': mmap() fallou: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Erro na liña %d carácter %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Erro na liña %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Detectada unha entidade baleira '&;'; as entidades válidas son: &amp; &quot; "
+"&lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"O carácter '%s' non é válido no inicio do nome dunha entidade, o carácter & "
+"comeza unha entidade; se non se quere que sexa unha entidade escriba o & "
+"como &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "O carácter '%s' non é válido dentro do nome dunha entidade"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Non se coñece o nome de entidade '%s'"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"A entidade non remata cun punto e coma, probabelmente usou o carácter & sen "
+"a intención de comezar unha entidade, escriba o & como &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Fallo ao analizar '%-.*s', que debería ser un díxito dentro dunha referencia "
+"de carácter (por exemplo &#234;) - pode que o díxito sexa grande de máis"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "A referencia de carácter '%-.*s' non codifica un carácter permitido"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Referencia de carácter baleira; debería incluír un díxito como &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"A referencia de carácter non remataba con punto e coma, probabelmente "
+"utilizou un carácter & sen intención de comezar unha entidade - escape o & "
+"como &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referencia de entidade sen terminar"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referencia de carácter sen terminar"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Texto codificado en UTF-8 non válido - secuencia demasiado longa"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Texto codificado en UTF-8 non válido - sen carácter de comezo"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Texto codificado en UTF-8 non válido - '%s' non válido"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "O documento debe comezar cun elemento (por exemplo <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' non é un carácter válido despois dun carácter '<'; non pode iniciar un "
+"nome de elemento"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Carácter estraño '%s', esperábase un carácter '>' para pechar a etiqueta de "
+"elemento baleiro '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Carácter estraño '%s', esperábase un '=' despois do nome do atributo '%s' do "
+"elemento '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Carácter estraño '%s', esperábase un carácter '>' ou '/' para pechar a "
+"etiqueta de comezo do elemento '%s' ou opcionalmente un atributo; quizais "
+"usou un carácter non válido no nome dun atributo"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Carácter estraño '%s', esperábase unhas comiñas de apertura despois do signo "
+"igual para dar un valor ao atributo '%s' do elemento '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' non é un carácter válido despois dos caracteres '</'; '%s' non pode "
+"comezar o nome dun elemento"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' non é un carácter válido despois do nome de elemento de peche '%s'; o "
+"carácter permitido é '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Pechouse o elemento '%s', actualmente non hai ningún elemento aberto"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Pechouse o elemento '%s', mais o elemento aberto actualmente é '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "O documento estaba baleiro ou só contiña espazos en branco"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "O documento terminou inesperadamente despois dun símbolo menor que '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"O documento terminou inesperadamente con elementos aínda abertos - '%s' foi "
+"o último elemento aberto"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"O documento terminou inesperadamente, esperábase ver un símbolo maior que "
+"'>' que pechase a etiqueta <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "O documento terminou inesperadamente dentro dun nome de elemento"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "O documento terminou inesperadamente dentro dun nome de atributo"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"O documento terminou inesperadamente dentro dunha etiqueta de comezo de "
+"elemento."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"O documento terminou inesperadamente despois do signo igual que segue a un "
+"nome de atributo; non hai valor de atributo"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "O documento terminou inesperadamente dentro dun valor de atributo"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"O documento terminou inesperadamente dentro da etiqueta que pechaba o "
+"elemento '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"O documento terminou inesperadamente dentro dun comentario ou instrución de "
+"procesamento"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "obxecto danado"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "erro interno ou obxecto danado"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "sen memoria"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "alcanzouse o límite de \"backtracking\""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "o patrón contén elementos non soportados na coincidencia parcial"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "erro interno"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"as referencias anteriores como condicións non se soportan na coincidencia "
+"parcial"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "atinxiuse o límite de recursividade"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "atinxiuse o límite do espazo de traballo para subcadeas baleiras"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinación non válida de marcas de liña nova"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "erro descoñecido"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ao final do patrón"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c ao final do patrón"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "carácter non recoñecido despois de \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"aquí non se permiten as letras con maiúsculas e minúsculas escapadas (\\l, "
+"\\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "números fóra do intervalo no cuantificador {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "número demasiado grande no cuantificador {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "falta a terminación ] para a clase de carácter"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "secuencia de escape non válida na clase de carácter"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "intervalo fóra de orde na clase de carácter"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nada que repetir"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "carácter non recoñecido despois de (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "carácter non recoñecido despois de (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "carácter non recoñecido despois de (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "As clases de nomes POSIX só se soportan dentro dunha clase"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "falta o ) de terminación"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") sen ( que o abra"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ou os díxitos (?[+-] deben estar seguidos por )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referencia a un subpatrón non existente"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "falta un ) despois do comentario"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "a expresión regular é demasiado longa"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "fallou ao obter a memoria"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "a aserción lockbehind non ten unha lonxitude fixa"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "número ou nome formado incorrectamente despois de (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "o grupo condicional contén máis de dúas ramas"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "esperábase unha aserción despois de (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nome de clase POSIX descoñecida"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "os elementos de ordenación POSIX non están soportados"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "o valor do carácter na secuencia \\x{...} é demasiado longo"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condición non válida (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "non se permie \\C en asercións lookbehind"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "unha chamada recursiva pode crear un bucle infinito"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "falta a terminación no nome do subpatrón"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dous subpatróns teñen o mesmo nome"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "secuencia \\P ou \\p formada incorrectamente"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nome de propiedade descoñecido despois de \\P ou \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "o nome do subpatrón é demasiado longo (máximo 32 caracteres)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "demasiados subpatróns con nome (máximo 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "o valor octal é maior que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "o grupo DEFINE contén máis dunha rama"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "non se permite repetir un grupo DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opcións NEWLINE inconsistentes"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g non está seguido por un nome con chaves ou un número distinto de cero "
+"cunha chave opcional"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetición inesperada"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "desbordamento de código"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "desbordouse o espazo de traballo de compilación"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "non se encontrou o subpatrón referenciado comprobado previamente"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Erro ao estabelecer a equivalencia da expresión regular %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "A biblioteca PCRE está compilada sen soporte UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "A biblioteca PCRE está compilada sen soporte de propiedades UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Erro ao compilar a expresión regular %s no carácter %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Erro ao optimizar a expresión regular %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "esperábase un díxito hexadecimal ou '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "esperábase un díxito hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "falta '<' na referencia simbólica"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "referencia simbólica sen finalizar"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referencia simbólica de lonxitude cero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "esperábase un díxito"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "referencia simbólica ilegal"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "'\\' final perdido"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "secuencia de escape descoñecida"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Erro ao analizar o texto de substitución \"%s\" no carácter %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "O texto citado non comeza con comiñas"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Comiñas non pechadas na liña de comandos ou noutro texto citado nun "
+"intérprete de comando"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "O texto terminou despois dun carácter '\\'. (O texto era '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"O texto terminou antes de encontrar a comiña final para %c. (O texto era '%"
+"s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "O texto estaba baleiro (ou só contiña espazos en branco)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Fallo ao ler datos desde un proceso fillo"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Fallo ao crear a canalización para comunicarse co proceso fillo (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Fallo ao ler desde a canalización filla (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Fallo ao cambiar ao directorio '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Fallo ao executar o proceso fillo (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nome de programa non válido: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Cadea non válida no vector de argumento en %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Cadea non válida no contorno: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Directorio de traballo non válido: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Fallo ao executar o programa asistente (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Erro inesperado en g_io_channel_win32_poll() ao ler datos desde un proceso "
+"fillo"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Fallo ao ler datos desde un proceso fillo (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Erro inesperado en select() ao ler datos dun proceso fillo (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Erro inesperado en waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Fallo ao facer fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Fallo ao executar o proceso fillo \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Fallo ao redireccionar a saída ou entrada do proceso fillo (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Fallo ao facer fork ao proceso fillo (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Erro descoñecido ao executar o proceso fillo \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Fallo de lectura de suficientes datos desde a canalización filla co PID (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Carácter fóra do intervalo para UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Secuencia non válida na entrada da conversión"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Carácter fóra de intervalo para UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Uso:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCIÓN...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcións de axuda:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Mostrar as opcións de axuda"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Mostrar todas as opcións de axuda"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcións da aplicación:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Non se pode analizar o valor enteiro '%s' para %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "O valor enteiro '%s' para %s está fóra do intervalo"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Non se pode analizar o valor \"double\" '%s' para %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "O valor \"double\" '%s' para %s está fóra do intervalo"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Erro ao analizar a opción %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argumento que falta para %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opción %s descoñecida"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Non se pode encontrar unha chave de ficheiro válida nos directorios de busca"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Non é un ficheiro normal"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "O ficheiro está baleiro"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"O ficheiro chave contén a liña '%s' que non é un par valor-chave, grupo ou "
+"comentario"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nome de grupo non válido: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "O ficheiro chave non comeza cun grupo"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nome de chave non válido: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "O ficheiro chave contén unha codificación non soportada '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "O ficheiro chave non ten un grupo '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "O ficheiro chave non ten a chave '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "O ficheiro chave contén a chave '%s' co valor '%s' que non é UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"O ficheiro chave contén a chave '%s' que ten un valor que non pode ser "
+"interpretado."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"O ficheiro chave contén a chave '%s' no grupo '%s' que ten un valor que non "
+"pode ser interpretado."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "O ficheiro chave non ten a chave '%s' no grupo '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "O ficheiro chave contén un carácter de escape ao final da liña"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "O ficheiro chave contén a secuencia de escape non válida '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "O valor '%s' non se pode interpretar como un número."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "O valor enteiro '%s' está fóra do intervalo"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "O valor '%s' non se pode interpretar como un número flotante."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "O valor '%s' non se pode interpretar como un booleano."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "O valor de conta pasado a %s é demasiado longo"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "O fluxo xa se pechou"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "A operación foi cancelada"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipo descoñecido"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "tipo de ficheiro %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "tipo %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Final de fluxo inesperadamente prematuro"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sen nome"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "O ficheiro de escritorio non especificou o campo Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Non é posíbel encontrar o terminal requerido pola aplicación"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Non se pode crear o cartafol de configuración da aplicación de usuario %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Non se pode crear o cartafol de configuración MIME %s do usuario: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Non se pode crear o ficheiro de escritorio %s do usuario"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definición personalizada para %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "o dispositivo non implementa a expulsión"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "o dispositivo non implementa a consulta para medios"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Non é posíbel manipular a versión %d da codificación de GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+"Número formado incorrectamente de tokens (%d) na codificación de GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Non é posíbel manipular a versión %d da codificación de GEmblemedicon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+"Número formado incorrectamente de tokens (%d) na codificación de "
+"GEmblemedicon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Esperábase un GEmblem para o GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operación non soportada"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "O punto de montaxe contido non existe"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Non se pode copiar sobre o directorio"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Non se pode copiar un directorio sobre o directorio"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "O ficheiro de destino xa existe"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Non se pode copiar o directorio recursivamente"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Non é posíbel copiar o ficheiro especial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "O valor da ligazón simbólica dada non é válido"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Non se soporta o Lixo"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Os nomes de ficheiro non poden conter '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "o volume non implementa o montado"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Non hai ningunha aplicación rexistrada para manexar este ficheiro"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "O enumerador está pechado"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "O enumerador do ficheiro ten unha operación excepcional"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "O enumerador do ficheiro xa está pechado"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ficheiro"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "O ficheiro que contén a icona"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Non é posíbel manipular a versión %d da codificación de GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Datos de entrada formados incorrectamente para o GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "O fluxo non soporta query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Non se permite buscar no fluxo"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Non se permite truncar no fluxo de entrada"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Non se soporta truncar no fluxo"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Número incorrecto de tokens (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Non hai un tipo para o nome de clase %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "O tipo %s non implementa unha interface GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "O tipo %s non ten unha clase"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Número de versión formado incorrectamente: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "O tipo %s non implementa from_tokens() na interface do GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Non é posíbel manipular a versión fornecida da codificación da icona"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "O fluxo de entrada non implementa a lectura"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "O fluxo ten unha operación excepcional"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"Non se pode encontrar o tipo de monitorización do directorio local "
+"predeterminado"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nome de ficheiro non válido %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Erro ao obter a información do sistema de ficheiros: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Non se pode renomear o directorio raíz"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Erro ao renomear o ficheiro: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Non se pode renomear o ficheiro; o ficheiro xa existe"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "O nome do ficheiro non é válido"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Erro ao abrir o ficheiro: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Non se pode abrir o directorio"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Erro ao eliminar o ficheiro: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Erro ao mover ao lixo o ficheiro: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Non se pode crear o directorio do lixo %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Non se pode encontrar o directorio de nivel superior para o lixo"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Non se pode encontrar ou crear o directorio do lixo"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Non se pode crear a información de lixo para o ficheiro: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Non se pode mover ao lixo o ficheiro: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Erro ao crear o directorio: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Erro ao crear a ligazón simbolica: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Erro ao mover o ficheiro: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Non se pode mover o directorio sobre un directorio"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Fallou a creación do ficheiro de seguranza"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Erro ao eliminar o ficheiro obxectivo: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Non se soporta mover ficheiros entre puntos de montaxe"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "O valor do atributo debe ser non nulo"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipo de atributo non válido (esperábase unha cadea)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nome estendido do atributo non válido"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Erro ao estabelecer o atributo estendido '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Erro ao iniciar o ficheiro '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codificación non válida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Erro ao iniciar o descritor de ficheiro: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipo de atributo non válido (esperábase uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipo de atributo non válido (esperábase uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipo de atributo non válido (esperábase unha cadea de bytes)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Erro ao estabelecer os permisos: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Erro ao estabelecer o propietario: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "a ligazón simbólica debe ser non nula"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Erro ao estabelecer a ligazón simbólica: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Erro ao estabelecer a ligazón simbólica: o ficheiro non é unha ligazón"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "O contexto SELinux debe ser non-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Erro a estabelecer o contexto SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "O contexto SELinux non está habilitado neste sistema"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Estabelecer o atributo %s non está soportado"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Erro ao ler do ficheiro: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Erro ao buscar no ficheiro: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Erro ao pechar o ficheiro: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+"Non se pode encontrar o tipo de monitorización do ficheiro local "
+"predeterminado"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Erro ao escribir no ficheiro: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Erro ao eliminar a ligazón da copia de seguranza antiga: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Erro ao crear a copia de seguranza: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Erro ao renomear o ficheiro temporal: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Erro ao truncar o ficheiro: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Erro ao abrir o ficheiro '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "O ficheiro destino é un directorio"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "O ficheiro destino non é un ficheiro normal"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "O ficheiro foi modificado externamente"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Erro ao eliminar o ficheiro antigo: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Proporcionouse un GSeekType non válido"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Petición de busca non válida"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Non se pode truncar GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Alcanzouse o límite máximo da matriz de datos"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "O fluxo de saída da memoria non é redimensionábel"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Fallou ao redimensionar o fluxo de saída da memoria"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "a montaxe non implementa o desmontado"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "a montaxe non implementa a expulsión"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "a montaxe non implementa o remontado"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "a montaxe non implementa a averiguación do tipo de contido"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "a montaxe non implementa a averiguación síncrona do tipo de contido"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "O fluxo de saída non implementa a escritura"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "O fluxo de orixe xa está pechado"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nome"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "O nome da icona"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nomes"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Unha matriz que contén nomes de iconas"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "usar os valores predeterminados de reserva"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Indica se se deben usar os valores de reserva encontrados ao acurtar o nome "
+"nos caracteres '-'. Se se proporcionan varios nomes ignoraranse despois do "
+"primeiro."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Non é posíbel manipular a versión %d da codificación de GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descritor de ficheiro"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "O descritor de ficheiro desde o que ler"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Pechar o descritor de ficheiro"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Se hai que pechar o descritor de ficheiro cando o fluxo está pechado"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Erro ao ler de unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Erro ao pechar unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Raíz do sistema de ficheiros"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "O descritor de ficheiro no que escribir"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Erro ao escribir a unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "o volume non implementa a expulsión"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Non se pode encontrar a aplicación"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Erro ao lanzar a aplicación: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Non se soportan URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "os cambios de asociación non están soportados en win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "A creación de asociación non está soportada en win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "non ocultar as entradas"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "usar un formato de listaxe longo"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FICHEIRO...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#~ msgid ""
+#~ "Odd character '%s', expected a '>' character to end the start tag of "
+#~ "element '%s'"
+#~ msgstr ""
+#~ "Carácter estraño '%s', esperábase un carácter '>' para pechar a etiqueta "
+#~ "de comezo do elemento '%s'"
diff --git a/po/gu.po b/po/gu.po
new file mode 100644
index 0000000..4859530
--- /dev/null
+++ b/po/gu.po
@@ -0,0 +1,1821 @@
+# translation of glib.HEAD.gu.po to Gujarati
+# Ankit Patel <ankit644@yahoo.com>, 2005, 2006.
+# Ankit Patel <ankit@redhat.com>, 2007, 2008.
+# Sweta Kothari <swkothar@redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.gu\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-25 12:08+0530\n"
+"Last-Translator: Sweta Kothari <swkothar@redhat.com>\n"
+"Language-Team: Gujarati\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "ઘટક '%s' માટે અનિચ્છનીય લક્ષણ '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "ઘટક '%s' નું લક્ષણ '%s' મળ્યું નહિં"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "અનિચ્છનીય ટેગ '%s', ટેગ '%s' ઈચ્છિત"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "અનિચ્છનીય ટેગ '%s' એ '%s' માં"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "માહિતી ડિરેક્ટરીઓ માટે કોઈ માન્ય બુકમાર્ક ફાઈલ મળી નહિં"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' માટેની બુકમાર્ક પહેલાથી જ હાજર છે"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' માટે કોઈ બુકમાર્ક મળી નહિં"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' માટે બુકમાર્કમાં કોઈ MIME પ્રકાર વ્યાખ્યાયિત નથી"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' માટે બુકમાર્કમાં કોઈ ખાનગી ફ્લેગ વ્યાખ્યાયિત થયેલ નથી"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' માટે બુકમાર્કમાં કોઈ જૂથો સુયોજિત નથી"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' નામવાળા કોઈ કાર્યક્રમે '%s' માટે બુકમાર્ક રજીસ્ટર કરી નથી"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec લીટી '%s' ને URI '%s' સાથે વિસ્તારવામાં નિષ્ફળ"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' અક્ષર સમૂહમાંથી '%s' માં રુપાંતરણ માટે આધાર નથી"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' માંથી '%s' માટેનો પરીવર્તક ખોલી શકતો નથી"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "રુપાંતર ઈનપુટની બાઇડ શ્રેણી અપ્રમાણીત છે"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "રુપાંતર વખતે ભૂલ: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "ઈનપુટ ના છેડા પર અપૂર્ણ અક્ષર શ્રેણી છે"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ફૈલબેક '%s' ને '%s' કોડના સમૂહમાં પરીવર્તિત કરી શકાતું નથી "
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' કે જે \"ફાઈલ\" યોજના વાપરે છે તે ચોક્કસ URI નથી"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "સ્થાનીય ફાઈલ URI '%s' માં કદાય '#' સમાવિષ્ટ નથી"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "'%s' URI અયોગ્ય છે"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "'%s' URIનું યજમાનનુ નામ અયોગ્ય છે"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "'%s' URI અયોગ્ય બહાર નીકળવાના અક્ષરો ધરાવે છે "
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' પથ નામ એ ચોક્કસ પથ નથી"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "અયોગ્ય યજમાન નામ"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' ડિરેક્ટરી ખોલતા ભૂલ: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu બાઈટ \"%s\" ફાઈલ વાંચવા માટે આપવામાં આવતા નથી"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ફાઈલ વાંચતી વખતની ભૂલ: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "ફાઇલ \"%s\" એ ઘણી વિશાળ છે"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' ફાઈલમાંથી વાંચવામા નિષ્ફળતા:  %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' ફાઈલ ખોલવામાં નિષ્ફળતા : %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' ફાઈલની લાક્ષણિકતા મેળવતી વખતે નિષ્ફળતા: fstate() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' ફાઈલ ખોલવામાં નિષ્ફળતા: fdopen() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "ફાઈલ '%s' નું નામ '%s' માં બદલવામાં નિષ્ફળ: g_rename() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' ફાઈલ બનાવવામાં નિષ્ફળતા : %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "ફાઈલ '%s' ને લખવા માટે ખોલવામાં નિષ્ફળ: fdopen() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ફાઈલ '%s' પર લખવામાં નિષ્ફળ: fwrite() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ફાઈલ '%s' પર લખવામાં નિષ્ફળ: fwrite() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ફાઈલ '%s' પર લખવામાં નિષ્ફળ: fwrite() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ફાઈલ '%s' બંધ કરવામાં નિષ્ફળ: fclose() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "વર્તમાન ફાઈલ '%s' દૂર કરી શકાઈ નહિં: g_unlink() નિષ્ફળ: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr " '%s' ટેમ્પલેટ અયોગ્ય છે, તે '%s' ધરાવતું નથી"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "ટેમ્પલેટ '%s' એ XXXXXX સમાવતું નથી"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' સાંકેતિક કડી વાંચવામાં નિષ્ફળતા: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "સાંકેતિક કડી આધાર આપતી નથી"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' માંથી '%s' માટેનું રુપાંતરક ખોલી શકાયું નહિં: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_10_channe_lread_line_string માં આડી હરોળ માં વાંચી શકાતું નથી"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+"વાંચવા માટેના બફર(થોડા સમય માટેનું સંગ્રહસ્થાન) માં ઢાંકેલી ન હોય તે માહિતી છોડી દીધેલ છે"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "માધ્યમ અપુર્ણ અક્ષરથી અંત પામે છે"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end માં આડી હરોળ વાંચી શકાતી નથી"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ફાઈલ '%s' ખોલવામાં નિષ્ફળ: open() નિષ્ફળ: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ફાઈલ '%s' નો નકશો કરવામાં નિષ્ફળ: mmap() નિષ્ફળ: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d લીટી પર %d અક્ષરમાં ભૂલ: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d લીટી પર ભૂલ: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "'&;' વસ્તુ ખાલી દેખાય છે: યોગ્ય વસ્તુઓ છે:&amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"વસ્તુ નામ શરુ થાય ત્યાં %s' અક્ષર યોગ્ય નથી: & અક્ષર વસ્તુની શરુઆત કરે છે; જો તે એમપરસંડ "
+"વસ્તુ ને આધાર ન આપે તો તે &amp; તરીકે દર્શાવો"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr " વસ્તુ નામની અંદર '%s' અક્ષર યોગ્ય નથી"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "'%s' વસ્તુ નામ જાણીતુ નથી"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"વસ્તુ નો સેમીકોલન સાથે અંત થતો નથી; ઘણી વખતે એમપરસંડ (&) અક્ષર ચિન્હ વગર તમે વસ્તુ વાપરી "
+"શકો છો - એમપરસંડ &amp; તરીકે લો"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' નું પદચ્છેદન કરવામાં નિષ્ફળ, કે જે અક્ષર સંદર્ભમાં અંક હોવો જોઈએ (&#234; ઉદાહરણ "
+"તરીકે) - કદાચ અંક ખૂબ લાંબો હોય"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "અક્ષર સંદર્ભ '%-.*s' પરવાનગી આપેલ અક્ષરને એનકોડ કરતો નથી"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ખાલી અક્ષર સંદર્ભ; સંખ્યા જેવી કે &#454; ને સમાવતી હોવી જોઇએ "
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"અક્ષર સંદર્ભ અર્ધવિરામ થી અંત થતો નથી; તમે વસ્તુ શરુ કરવા એમપરસંડ અક્ષર ને વાપરો એમપરસંડ "
+"ને &amp; તરીકે લો"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "અપુર્ણ વસ્તુ સંદર્ભ "
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "અપુર્ણ અક્ષર સંદર્ભ "
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "અયોગ્ય UTF-8 સંગ્રહપદ્ધતિવાળું લખાણ - overlong ક્રમ"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "અયોગ્ય UTF-8 સંગ્રપદ્ધતિવાળું લખાણ - સ્ટાર અક્ષર નથી"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "અયોગ્ય UTF-8 સંગ્રહપદ્ધતિવાળું લખાણ - માન્ય '%s' નથી"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "દસ્તાવેજ કોઈ વસ્તુ સાથે શરુ થાય તે જરુરી છે(ઉદાહરણ <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'%s' એ '<' અક્ષર પછી આવતો યોગ્ય અક્ષર નથી; તે કોઈ વસ્તુના નામથી શરુ થતુ નથી"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "અસંગત અક્ષર '%s', વસ્તુ ટેગ '%s' નાં ખાલી ઘટક ને સમાપ્ત કરવા '>' અક્ષર ની આશા છે"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "અસંગત અક્ષર '%s', '%s' વસ્તુના '%s' લાક્ષણિકતા નામ પછી '=' જરુરી છે"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"અસંગત અક્ષર '%s': '%s' વસ્તુના અંતમાં '>' અથવા '/' અથવા પરીમાણનો વિકલ્પ જરુરી છે; તમે "
+"કદાય અયોગ્ય અક્ષર લાક્ષણિકતાના નામો વાપર્યો છે"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"અસંગત અક્ષર '%s,  '%s' વસ્તુ માટે '%s' લાક્ષણિકતાના મુલ્ય આપતી વખતે બરાબરની નિશાની "
+"પછી શરુ થતો અવતરણ ચિહ્ન જરુરી છે"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "'%s' એ '<' અક્ષર પછીનો યોગ્ય અક્ષર નથી ; '%s' ક્દાચ વસ્તુ નામ સાથે શરુ થતુ નથી"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "'%s' એ '%s' વસ્તુનામ પછીનો બંધ કરવાનો યોગ્ય અક્ષર નથી; '>' એ યોગ્ય અક્ષર છે. "
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' વસ્તુ બંધ હતી, અત્યારે એક પણ વસ્તુ ખુલ્લી નથી"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' વસ્તુ બંધ હતી, પણ અત્યારે '%s'એ ખુલ્લી વસ્તુ છે"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "દસ્તાવેજ ખાલી છે અથવા ફક્ત ખાલી જ્ગ્યા ધરાવે છે"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "'<' ચિન્હ વાપરતા પછી દસ્તાવેજનો અણધારી રીતે અંત આવે છે"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "વસ્તુ ખુલ્લી હોવા છતાં દસ્તાવેજનો અણધારી રીતે અંત આવે છે- છેલ્લે ખોલેલ વસ્તુ '%s' છે"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"દસ્તાવેજનો અણધારી રીતે અંત થાય છે, તે  અંતિમ ટેગ  <%s/> માં કૌંસને બંધ કરતુ ખૂણાનુ ચિન્હ "
+"જોવા માગે છે"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "વસ્તુ નામની અંદર દસ્તાવેજનો અણધારી રીતે અંત થાય છે"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "લાક્ષણિકતાના નામની અંદર દસ્તાવેજનો અણધારી રીતે અંત થાય છે"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "વસ્તુની શરુઆતની ટેગમા દસ્તાવેજનો અણધારી રીતે અંત થાય છે."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"લાક્ષણિકતા નામ પછીની બરાબરની નિશાની પછી દસ્તાવેજ નો અણધારી રીતે અંત થાય છે. "
+"લાક્ષણિકતાના મુલ્ય નથી"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "લાક્ષણિકતા મુલ્ય અંદર હોવા છતાં દસ્તાવેજ નો અણધારી રીતે અંત થાય છે"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "'%s' વસ્તુના બંદ ટેગની અંદર દસ્તાવેજનો અણધારી રીતે અંત થાય છે"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "ટિપ્પણી અથવા પ્રક્રિયા સુચનાની અંદર અણધારી રીતે દસ્તાવેજનો અંત થાય છે"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ભાંગી પડેલ ઓબ્જેક્ટ"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "આંતરિક ભૂલ અથવા બગડેલ ઓબ્જેક્ટ"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "મેમરી બહાર"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "પાછળ જવાની મર્યાદાએ પહોંચી ગયા"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "ભાત અંશતઃ જોડણી માટે આધારભૂત વસ્તુઓ સમાવતી નથી"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "આંતરિક ભૂલ"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "શરતો તરીકે પાછળના સંદર્ભો અંશતઃ સરખામણી માટે આધારભૂત નથી"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "પુનરાવર્તન મર્યાદાએ પહોંચી ગયું"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ખાલી શબ્દમાળાઓ માટે કાર્યસ્થળ મર્યાદાએ પહોંચી ગયા"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "નવીલીટી ફ્લેગોનું અયોગ્ય જોડકું"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "અજ્ઞાત ભૂલ"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ભાતના અંતે"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c ભાતના અંતે"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "નહિં ઓળખાયેલ અક્ષર અનુસરે છે \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "કેસ-બદલતા એસ્કેપો (\\l, \\L, \\u, \\U) અંહિ માન્ય નથી"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} ગણકમાં નંબરો હદ બહાર છે"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} ગણકમાં ખૂબ મોટી સંખ્યા"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "અક્ષર વર્ગ માટે અંત કરતો ] ગુમ છે"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "અક્ષર વર્ગમાં અયોગ્ય એસ્કેપ ક્રમ"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "અક્ષર વર્ગમાં ક્રમ વિસ્તારની બહાર છે"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "પુનરાવર્તન કરવા માટે કંઈ નથી"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? પછી નહિં ઓળખાતો અક્ષર"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< પછી નહિં ઓળખાતો અક્ષર"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P પછી નહિં ઓળખાતો અક્ષર"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named વર્ગો માત્ર વર્ગમાં જ આધારભૂત છે"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "અંત કરતો ) ગુમ છે"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") એ ખૂલતા ( વિના છે"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R અથવા (?[+-]અંકો ) ને અનુસરતા જ હોવા જોઈએ"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "બિન-હયાત ઉપભાતનો સંદર્ભ"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "ટિપ્પણી પછી ગુમ થયેલ )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "નિયમિત સમીકરણ ખૂબ મોટું છે"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "મેમરી મેળવવામાં નિષ્ફળ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind ગોઠવણ એ નિયમિત લંબાઈ નથી"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( પછી મલીન નંબર અથવા નામ"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "શરતી જૂથ બે કરતાં વધુ શાખાઓ સમાવે છે"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( પછી ઉમેરો ઈચ્છિત છે"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "અજ્ઞાત POSIX વર્ગ નામ"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX ક્રમાંકિત ઘટકો આધારભૂત નથી"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} ક્રમમાંની અક્ષર કિંમત ખૂબ મોટી છે"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "અયોગ્ય શરત (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C lookbehind ગોઠવણીમાં માન્ય નથી"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "પુનરાવર્તી કોલ અવ્યાખ્યાયિત લુપમાં જઈ શકે"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ઉપભાત નામમાં ગુમ થયેલ અંત કરનાર"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "બે નામવાળી ઉપભાતોને એક જ નામ હોય છે"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "મલીન \\P અથવા \\p ક્રમ"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P અથવા \\p પછી અજ્ઞાત ગુણધર્મ નામ"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ઉપભાત નામ ખૂબ લાંબુ છે (મહત્તમ ૩૨ અક્ષરો)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "ઘણાબધા નામવાળી ઉપભાતો (મહત્તમ ૧૦,૦૦૦)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "અષ્ટાંક કિંમત \\377 કરતાં મોટી છે"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE જૂથ એક શાખા કરતાં વધુ સમાવે છે"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE જૂથનું પુનરાવર્તન કરવાનું માન્ય નથી"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "વિચલ NEWLINE વિકલ્પો"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g એ કૌંસવાળા નામ દ્વારા અનુસરવામાં આવતું નથી કે વૈકલ્પિક રીતે કૌંસવાળા બિન-શૂન્ય નંબરથી"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "અનિચ્છનિય પુનરાવર્તન"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "કોડ ઉભરાટ"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "વધુ પડતું કમ્પાઈલીંગ કાર્યસ્થળ"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "પહેલાં-ચકાસાયેલ સંદર્ભવાળી ભાત મળી નહિં"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "નિયમિત સમીકરણ %s સરખાવતી વખતે ભૂલ: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE લાઈબ્રેરી UTF8 આધાર વિના કમ્પાઈલ થયેલ છે"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE લાઈબ્રેરી UTF8 ગુણધર્મો આધાર વિના કમ્પાઈલ થયેલ છે"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "નિયમિત સમીકરણ %s ને કમ્પાઈલ કરવામાં અક્ષર %d આગળ ભૂલ: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "નિયમિત સમીકરણ %s શ્રેષ્ઠ બનાવતી વખતે ભૂલ: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "હેક્ઝાડેસીમલ અંક અથવા '}' ઈચ્છિત છે"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "હેક્ઝાડેસીમલ અંક ઈચ્છિત છે"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "સંજ્ઞાકીય સંદર્ભમાં '<' ગુમ થયેલ છે"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "અપૂર્ણ સંજ્ઞાકીય સંદર્ભ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "શૂન્ય-લંબાઈ સંજ્ઞાકીય સંદર્ભ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "અંક ઈચ્છિત"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "અયોગ્ય સંજ્ઞાકીય સંદર્ભ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "સ્ટ્રે અંત '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "અજ્ઞાત એસ્કેપ ક્રમ"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "બદલી લખાણ \"%s\" નું પદચ્છેદન કરતી વખતે અક્ષર %lu આગળ ભૂલ: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "અવતરણ ચિહ્નવાળુ વાક્ય અવતરણ ચિહ્નથી શરુ થતુ નથી"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "આદેશ વાક્યમાં અથવા બીજા શેલ ચિહ્નિત બંધબેસતા ન હોય તેવા અવતરણ ચિહ્ન"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "લખાણનો '\\' અક્ષર પછી તરત જ અંત આવે છે (લખાણનો '%s' હતુ)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c માટે અવતરણ ચિહ્ન મળે તે પહેલા લખાણનો અંત થાય છે(લખાણ '%s' હતુ)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "વાક્ય ખાલી છે (અથવા તેમાં ફક્ત ખાલી જગ્યા છે)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "બાળ-પ્રક્રિયા માંથી માહિતી વાંચવા માં નિષ્ફળ છે"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr " (%s) બાળપ્રક્રિયા સાથે સંપર્ક માટે પાઈપ બનાવવામાં નિષ્ફળ"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "બાળ પાઈપ (%s)માંથી વાંચવામાં નિષ્ફળ"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' ડિરેક્ટરી બદલવામાં નિષ્ફળ(%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr " (%s) બાળપ્રક્રિયા ચલાવવામાં નિષ્ફળ"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "અયોગ્ય કાર્યક્રમ નામ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "દલીલ વેક્ટરમાં %d આગળ અયોગ્ય શબ્દમાળા: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "પર્યાવરણમાં અયોગ્ય શબ્દમાળા: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "અયોગ્ય કામ આપતી ડિરેક્ટરી: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "મદદગાર કાર્યક્રમ (%s) ચલાવવામાં નિષ્ફળ"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"બાળ-પ્રક્રિયામાંથી માહિતી વાંચતી વખતે g_io_channel_win32_poll() માં આવતી અણધારી ભૂલ"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "(%s) બાળપ્રક્રિયામાંથી માહિતી વાંચવામાં નિષ્ફળ"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "(%s)બાળપ્રક્રિયામાંથી માહિતી વાંચતી વખતે select() માં આવતી અણધારી ભૂલ"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "(%s) waitpid() માં અાવતી અણાધારી ભૂલ"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) બાળપ્રક્રિયા બનાવવામાં નિષ્ફળ"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "\"%s\"બાળપ્રક્રિયા ચલાવવામાં નિષ્ફળ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "બાળપ્રક્રિયા (%s)ના ઈનપુટ અથવા આઉટપુટને ફરીથી દિશા આપવામાં નિષ્ફળ"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "બાળપ્રક્રિયા (%s)ની બાળપ્રક્રિયા બનાવવામાં નિષ્ફળ"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "\"%s\" બાળપ્રક્રિયા ચલાવતી વખતની અજ્ઞાત ભૂલ"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "(%s)બાળ pid પાઈપમાંથી જરુરી માહિતી વાંચવામાં નિષ્ફળ"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "અક્ષર UTF-૮ ની સીમાની બહાર"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "પરીવર્તિત ઈનપુટની અંદર અયોગ્ય શ્રેણી"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-૧૬ ની સીમાની બહાર નો અક્ષર"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "વપરાશ:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "મદદ વિકલ્પો:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "મદદ વિકલ્પો બતાવો"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "બધા મદદ વિકલ્પો બતાવો"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "કાર્યક્રમ વિકલ્પો:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "પૂર્ણાંક કિંમત '%s' ને %s માટે પદચ્છેદન કરી શકતા નથી"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "પૂર્ણાંક કિંમત '%s' એ %s માટે મર્યાદા બહાર છે"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "બમણી કિંમત '%s' ને %s માટે પદચ્છેદિત કરી શકતા નથી"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "બમણી કિંમત '%s' જે %s માટે છે તે વિસ્તારની બહાર છે"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "ભૂલ પદચ્છેદન વિકલ્પ %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s માટેની દલીલ ગુમ થયેલ છે"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "અજ્ઞાત વિકલ્પ %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "શોધ ડિરેક્ટરીઓમાં માન્ય કી ફાઈલ શોધી શક્યા નહિં"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "નિયમિત ફાઈલ નથી"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ફાઈલ ખાલી છે"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "કી ફાઈલ વાક્ય '%s' સમાવે છે કે જે કી-કિંમત જોડ, જૂથ, અથવા ટિપ્પણી નથી"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "અયોગ્ય જૂથ નામ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "કી ફાઈલ જૂથ સાથે શરૂ થતી નથી"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "અયોગ્ય કી નામ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "કી ફાઈલ બિનઆધારભૂત અક્ષર સંગ્રહપદ્ધતિ '%s' સમાવે છે"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "કી ફાઈલ પાસે જૂથ '%s' નથી"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "કી ફાઈલ પાસે કી '%s' નથી"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "કી ફાઈલ '%s' કીને કિંમત '%s' સાથે સમાવે છે કે જે UTF-8 નથી"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "કી ફાઈલ '%s' કી સમાવે છે કે જેની પાસે કિંમત છે જે ઈન્ટરપ્રીટ કરી શકાતી નથી."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"કી ફાઈલ '%s' કી જૂથ '%s' માં સમાવે છે કે જેની પાસે કિંમત છે કે જે ઈન્ટરપ્રીટ કરી શકાતી "
+"નથી."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "કી ફાઈલ પાસે કી '%s' એ જૂથ '%s' માં નથી"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "કી ફાઈલ એસ્કેપ અક્ષર વાક્યના અંતે સમાવે છે"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "કી ફાઈલ અયોગ્ય એસ્કેપ ક્રમ '%s' સમાવે છે"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "કિંમત '%s' નંબર તરીકે ઈન્ટરપ્રીટ કરી શકાતું નથી."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "પૂર્ણાંક કિંમત '%s' એ મર્યાદાની બહાર છે"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "કિંમત '%s' એ અપૂર્ણાંક સંખ્યા તરીકે ઈન્ટરપ્રીટ કરી શકાતું નથી."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "કિંમત '%s' બુલિયન તરીકે ઈન્ટરપ્રીટ કરી શકાતું નથી."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s ને ખૂબ મોટી ગણક કિંમત પસાર કરેલ છે"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "સ્ટ્રીમ પહેલાથી જ બંધ થઈ ગયેલ છે"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "પ્રક્રિયા રદ થઈ ગઈ હતી"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "અજ્ઞાત પ્રકાર"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s ફાઈલપ્રકાર"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s પ્રકાર"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "સ્ટ્રીમનો-અંત અનિચ્છનીય રીતે જલદી"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "શીર્ષકવીહિન"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ડેસ્કટોપ ફાઈલે Exec ક્ષેત્ર સ્પષ્ટ કરેલ નથી"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "કાર્યક્રમ માટે જરૂરી ટર્મિનલ શોધવામાં અસમર્થ"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "વપરાશકર્તા કાર્યક્રમ રૂપરેખાંકન ફોલ્ડર %s બનાવી શક્યા નહિં: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "વપરાશકર્તા MIME રૂપરેખાંકન ફોલ્ડર %s બનાવી શક્યા નહિં: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "વપરાશકર્તા ડેસ્કટોપ ફાઈલ %s બનાવી શકતા નથી"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s માટે વૈવિધ્યપૂર્ણ વ્યાખ્યા"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ડ્રાઈવર બહાર કાઢો અમલમાં મૂકતું નથી"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ડ્રાઈવ મીડિયા માટે પોલીંગને અમલમાં મૂકતું નથી"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem એનકોડીંગ ની આવૃત્તિ %d ને સંભાળી શકાતી નથી"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem એનકોડીંગ માં ટોકનો (%d) ની મેલફોર્મ થયેલ નંબર"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon એનકોડીંગ નાં આવૃત્તિ %d ને સંભાળી શકાતી નથી"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon એનકોડીંગ માં ટોકનો (%d) ની મેલફોર્મ થયેલ નંબર"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon માટે GEmblem એ અપેક્ષિત છે"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "પ્રક્રિયા આધારભૂત નથી"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "સમાવનાર માઉન્ટ અસ્તિત્વમાં નથી"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ડિરેક્ટરી ઉપર નકલ કરી શકતા નથી"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ડિરેક્ટરીને ડિરેક્ટરી ઉપર નકલ કરી શકતા નથી"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "લક્ષ્ય ફાઈલ અસ્તિત્વમાં નથી"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "પુનરાવર્તિત રીતે ડિરેક્ટરીની નકલ કરી શકતા નથી"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "વિશિષ્ટ ફાઇલ ની નકલ કરી શકતા નથી"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "અયોગ્ય સાંકેતિક કડી કિંમત અપાયેલ છે"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "કચરાપેટી આધારભૂત નથી"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ફાઈલ નામો '%c' સમાવી શકતા નથી"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "વોલ્યુમ માઉન્ટ અમલમાં મૂકતું નથી"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "આ ફાઈલ સંભાળવા માટે કોઈ કાર્યક્રમ રજીસ્ટર થયેલ નથી"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ઈન્યૂમેરેટર બંધ થયેલ છે"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ફાઈલ ઈન્યૂમેરેટરને ભરપૂર પ્રક્રિયા છે"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ફાઈલ ઈન્યૂમેરેટર પહેલાથી જ બંધ થયેલ છે"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ફાઇલ"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "ફાઇલ આઇકોનને સમાવી રહ્યુ છે"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon એનકોડીંગ ની આવૃત્તિ %d ને સંભાળી શકાતી નથી"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon માટે મેલફોર્મ થયેલ ઇનપુટ માહિતી"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "સ્ટ્રીમ query_info ને આધાર આપતું નથી"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "સ્ટ્રીમ પર પહોંચવાનું આધારભૂત નથી"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "ઈનપુટ સ્ટ્રીમ પર કાપવાનું માન્ય નથી"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "સ્ટ્રીમ પર કાપવાનું માન્ય નથી"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "ટોકનો (%d) નાં ખોટા નંબર"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "વર્ગ નામ %s માટે પ્રકાર નથી"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "પ્રકાર %s એ GIcon ઇન્ટરફેસ ને અમલમાં મૂકતો નથી"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "પ્રકાર %s એ વર્ગ થયેલ નથી"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "મેલફોર્મ થયેલ આવૃત્તિ નંબર: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "પ્રકાર %s એ GIcon ઇન્ટરફેસ પર tokens() માંથી અમલીકરણ થતુ નથી (_t)"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "આઇકોન એનકોડીંગ ની પૂરી પાડેલ આવૃત્તિ ને સંભાળી શકાતી નથી"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ઈનપુટ સ્ટ્રીમ વાંચનને અમલમાં મૂકતું નથી"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "સ્ટ્રીમને ભરપૂર પ્રક્રિયા છે"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "મૂળભૂત સ્થાનિક ડિરેક્ટરી મોનીટર પ્રકાર શોધવામાં અસમર્થ"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "અયોગ્ય ફાઈલનામ %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ફાઈલસિસ્ટમ જાણકારી મેળવવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "રુટ ડિરેક્ટરીનું નામ બદલી શકતા નથી"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ફાઈલનું નામ બદલવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ફાઈલનું નામ બદલી શકતા નથી, ફાઈલનામ પહેલાથી જ હાજર છે"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "અયોગ્ય ફાઈલનામ"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ફાઈલ ખોલવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ડિરેક્ટરી ખોલી શકતા નથી"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ફાઈલ દૂર કરવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ફાઈલને કચરાપેટીમાં નાંખવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "કચરાપેટી ડિરેક્ટરી %s બનાવવામાં અસમર્થ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "કચરાપેટી માટે ટોચસ્તરની ડિરેક્ટરી શોધવામાં અસમર્થ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "કચરાપેટી ડિરેક્ટરી શોધવામાં કે બનાવવામાં અસમર્થ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "કચરાપેટી જાણકારી ફાઈલ બનાવવામાં અસમર્થ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ફાઈલને કચરાપેટીમાં મોકલવામાં અસમર્થ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ડિરેક્ટરી બનાવવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "સાંકેતિક કડી બનાવવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ફાઈલ ખસેડવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ડિરેક્ટરીને ડિરેક્ટરી ઉપર ખસેડી શકતા નથી"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "બેકઅપ ફાઈલ બનાવટ નિષ્ફળ"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "લક્ષ્ય ફાઈલ દૂર કરવામાં ભૂલ: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "માઉન્ટો વચ્ચે ખસેડવાનું આધારભૂત નથી"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "લક્ષણ કિંમત બિન-શૂન્ય જ હોવી જોઈએ"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "અયોગ્ય લક્ષણ પ્રકાર (શબ્દમાળા ઈચ્છિત)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "અયોગ્ય વિસ્તૃત લક્ષણ નામ"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "વિસ્તૃત લક્ષણ '%s' સુયોજીત કરવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ફાઈલ '%s' કહેવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (અયોગ્ય સંગ્રહપદ્ધતિ)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ફાઈલ વર્ણનકાર કહેવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "અયોગ્ય લક્ષણ પ્રકાર (uint32 ઈચ્છિત)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "અયોગ્ય લક્ષણ પ્રકાર (uint64 ઈચ્છિત)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "અયોગ્ય લક્ષણ પ્રકાર (બાઈટ શબ્દમાળા ઈચ્છિત)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "પરવાનગીઓ સુયોજીત કરવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "માલિક સુયોજીત કરવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "સાંકેતિક કડી non-NULL જ હોવી જોઈએ"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "સાંકેતિક કડી સુયોજીત કરવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "સાંકેતિક કડી સુયોજીત કરવામાં ભૂલ: ફાઈલ સાંકેતિક કડી નથી"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux સંદર્ભ non-NULL જ હોવી જોઈએ"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux સંદર્ભ ને સુયોજન કરવામાં ભૂલ: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux એ આ સિસ્ટમ પર સક્રિય થયેલ નથી"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "લક્ષણ %s સુયોજીત કરવાનું આધારભૂત નથી"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ફાઈલમાંથી વાંચવામાં ભૂલ: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ફાઈલમાં પહોંચવામાં ભૂલ: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ફાઈલ બંધ કરવામાં ભૂલ: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "મૂળભૂત સ્થાનિક ફાઈલ મોનીટર પ્રકાર શોધવામાં અસમર્થ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ફાઈલમાં લખવામાં ભૂલ: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "જૂની બેકઅપ કડી દૂર કરવામાં ભૂલ: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "બેકઅપ નકલ બનાવવામાં ભૂલ: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "કામચલાઉ ફાઈલનું નામ બદલવામાં ભૂલ: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "ફાઈલ કાપવામાં ભૂલ: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ફાઈલ '%s' ખોલવામાં ભૂલ: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "લક્ષ્ય ફાઈલ ડિરેક્ટરી છે"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "લક્ષ્ય ફાઈલ નિયમિત ફાઈલ નથી"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ફાઈલ બાહ્ય રીતે સુધારેલ હતી"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "જૂની ફાઇલને દૂર કરવા દરમ્યાન ભૂલ: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "અયોગ્ય GSeekType પૂરું પાડેલ"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "અયોગ્ય પહોંચ અરજી"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream કાપી શકતા નથી"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "મહત્તમ માહિતી એરે મર્યાદાએ પહોંચ્યા"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "મેમરી આઉટપુટ સ્ટ્રીમનું માપ બદલી શકાય તેમ નથી"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "મેમરી આઉટપુટ સ્ટ્રીમનું માપ બદલવામાં નિષ્ફળ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "માઉન્ટ એ અનમાઉન્ટને અમલમાં મૂકતું નથી"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "માઉન્ટ એ બહાર કાઢોને અમલમાં મૂકતું નથી"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "માઉન્ટ એ પુનઃમાઉન્ટને અમલમાં મૂકતું નથી"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "માઉન્ટ એ સમાવિષ્ટ પ્રકાર અંદાજિત કરવાનું અમલીકરમ કરતુ નથી"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "માઉન્ટ એ સમાવિષ્ટ પ્રકાર અંદાજિત કરવાનું એકી સાથે અમલીકરણ કરતુ નથી"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "આઉટપુટ સ્ટ્રીમ લેખનને અમલમાં મૂકતું નથી"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "સ્રોત સ્ટ્રીમ પહેલાથી જ બંધ થઈ ગયેલ છે"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "નામ"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "આઇકોનનું નામ"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "નામો"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "એરે એ આઇકોન નામો ને સમાવી રહ્યુ છે"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "મૂળભૂત ફોલબેકો ને વાપરો"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"ક્યાં તો '-' અક્ષરો પર નામ ને ટૂંકું કરવા દ્રારા મૂળભૂત ફોલબેકો ને વાપર્યો હોય. પહેલા પછીનાં "
+"નામો ને અવગણો જો ઘણાબધા નામો આપેલ હોય તો."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon એનકોડીંગ ની આવૃત્તિ %d ને સંભાળી શકાતુ નથી"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ફાઇલ વર્ણનકર્તા"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "માંથી વાંચવા માટે ફાઇલ વર્ણનકર્તા"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ફાઇલ વર્ણનકર્તાને બંધ કરો"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "ક્યાંતો ફાઇલ વર્ણનકર્તા ને બંધ કરો જ્યારે સ્ટ્રીમ એ બંધ થયેલ છે"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix માંથી વાંચતી વખતે ભૂલ: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix બંધ કરતી વખતે ભૂલ: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ફાઈલસિસ્ટમ રુટ"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "લખવા માટે ફાઇલ વર્ણનકર્તા"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unix માં લખતી વખતે ભૂલ: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "વોલ્યુમ બહાર કાઢોને અમલમાં મૂકતું નથી"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "કાર્યક્રમ શોધી શકતા નથી"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "કાર્યક્રમ લાવતી વખતે ભૂલ: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs આધારભૂત નથી"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "સંડોવણી ફેરફારો win32 પર આધારભૂત નથી"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "સંડોવણી બનાવટ win32 પર આધારભૂત નથી"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "પ્રવેશો છુપાવો નહિં"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "લાંબી યાદી બંધારણ વાપરો"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..26e987d
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,1881 @@
+# translation of glib.HEAD.he.po to Hebrew
+# translation of glib.HEAD.po to Hebrew
+# translation of glib.HEAD.po to
+# translation of glib.HEAD.po to
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER.
+# Meir Kriheli <meirkr@mksoft.co.il>, 2002.
+# Gil 'Dolfin' Osher <dolfin@rpg.org.il>, 2002.
+# Gil Osher <dolfin@rpg.org.il>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.he\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-04-27 18:48+0300\n"
+"Last-Translator: Yair Hershkovitz <yairhr@gmail.com>\n"
+"Language-Team: Hebrew <he@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Unexpected attribute '%s' for element '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attribute '%s' of element '%s' not found"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Unexpected tag '%s', tag '%s' expected"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Unexpected tag '%s' inside '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "No valid bookmark file found in data dirs"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "A bookmark for URI '%s' already exists"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "No bookmark found for URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "No MIME type defined in the bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "No private flag has been defined in bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "No groups set in bookmark for URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "No application with name '%s' registered a bookmark for '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Failed to expand exec line '%s' with URI '%s'"
+
+# *** This file should not be translated to hebrew, please only copy the english text ***
+# *** Old hebrew ranslation is commented for backup sake                              ***
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Conversion from character set '%s' to '%s' is not supported"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Could not open converter from '%s' to '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Invalid byte sequence in conversion input"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Error during conversion: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Partial character sequence at end of input"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Cannot convert fallback '%s' to codeset '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "The URI '%s' is not an absolute URI using the \"file\" scheme"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "The local file URI '%s' may not include a '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "The URI '%s' is invalid"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "The hostname of the URI '%s' is invalid"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "The URI '%s' contains invalidly escaped characters"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "The pathname '%s' is not an absolute path"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Invalid hostname"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Error opening directory '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Could not allocate %lu bytes to read file \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Error reading file '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "File \"%s\" is too large"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Failed to read from file '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Failed to open file '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Failed to get attributes of file '%s': fstat() failed: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Failed to open file '%s': fdopen() failed: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Failed to create file '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Failed to open file '%s' for writing: fdopen() failed: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Failed to write file '%s': fwrite() failed: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Failed to close file '%s': fclose() failed: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Existing file '%s' could not be removed: g_unlink() failed: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Template '%s' invalid, should not contain a '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Template '%s' doesn't contain XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Failed to read the symbolic link '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolic links not supported"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Could not open converter from '%s' to '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Can't do a raw read in g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Left over unconverted data in read buffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Channel terminates in a partial character"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Can't do a raw read in g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Failed to open file '%s': open() failed: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Failed to map file '%s': mmap() failed: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Error on line %d char %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Error on line %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Character '%s' is not valid inside an entity name"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entity name '%s' is not known"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Character reference '%-.*s' does not encode a permitted character"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Empty character reference; should include a digit such as &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Unfinished entity reference"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Unfinished character reference"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Invalid UTF-8 encoded text - overlong sequence"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Invalid UTF-8 encoded text - not a start char"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Invalid UTF-8 encoded text - not valid '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Document must begin with an element (e.g. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+
+# c-format
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' was closed, no element is currently open"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' was closed, but the currently open element is '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Document was empty or contained only whitespace"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Document ended unexpectedly just after an open angle bracket '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Document ended unexpectedly inside an element name"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Document ended unexpectedly inside an attribute name"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Document ended unexpectedly inside an element-opening tag."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Document ended unexpectedly while inside an attribute value"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Document ended unexpectedly inside the close tag for element '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Document ended unexpectedly inside a comment or processing instruction"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "corrupted object"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "internal error or corrupted object"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "out of memory"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "backtracking limit reached"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "the pattern contains items not supported for partial matching"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "internal error"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "back references as conditions are not supported for partial matching"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "recursion limit reached"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "workspace limit for empty substrings reached"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "invalid combination of newline flags"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "unknown error"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ at end of pattern"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c at end of pattern"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "unrecognized character follows \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numbers out of order in {} quantifier"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "number too big in {} quantifier"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "missing terminating ] for character class"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "invalid escape sequence in character class"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "range out of order in character class"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nothing to repeat"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "unrecognized character after (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "unrecognized character after (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "unrecognized character after (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named classes are supported only within a class"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "missing terminating )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") without opening ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R or (?[+-]digits must be followed by )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "reference to non-existent subpattern"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "missing ) after comment"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regular expression too large"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "failed to get memory"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind assertion is not fixed length"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "malformed number or name after (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "conditional group contains more than two branches"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assertion expected after (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "unknown POSIX class name"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX collating elements are not supported"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "character value in \\x{...} sequence is too large"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "invalid condition (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C not allowed in lookbehind assertion"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "recursive call could loop indefinitely"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "missing terminator in subpattern name"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "two named subpatterns have the same name"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "malformed \\P or \\p sequence"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "unknown property name after \\P or \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "subpattern name is too long (maximum 32 characters)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "too many named subpatterns (maximum 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "octal value is greater than \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE group contains more than one branch"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "repeating a DEFINE group is not allowed"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inconsistent NEWLINE options"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "unexpected repeat"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "code overflow"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran compiling workspace"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "previously-checked referenced subpattern not found"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Error while matching regular expression %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE library is compiled without UTF8 support"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE library is compiled without UTF8 properties support"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Error while compiling regular expression %s at char %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Error while optimizing regular expression %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimal digit or '}' expected"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimal digit expected"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "missing '<' in symbolic reference"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "unfinished symbolic reference"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "zero-length symbolic reference"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "digit expected"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "illegal symbolic reference"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "stray final '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "unknown escape sequence"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Error while parsing replacement text \"%s\" at char %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Quoted text doesn't begin with a quotation mark"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Unmatched quotation mark in command line or other shell-quoted text"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Text ended just after a '\\' character. (The text was '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Text ended before matching quote was found for %c. (The text was '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Text was empty (or contained only whitespace)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Failed to read data from child process"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Failed to create pipe for communicating with child process (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Failed to read from child pipe (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Failed to change to directory '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Failed to execute child process (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Invalid program name: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Invalid string in argument vector at %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Invalid string in environment: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Invalid working directory: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Failed to execute helper program (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Failed to read data from child process (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Unexpected error in select() reading data from a child process (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Unexpected error in waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Failed to fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Failed to execute child process \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Failed to redirect output or input of child process (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Failed to fork child process (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Unknown error executing child process \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Failed to read enough data from child pid pipe (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Character out of range for UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Invalid sequence in conversion input"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Character out of range for UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Usage:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Help Options:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Show help options"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Show all help options"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Application Options:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Cannot parse integer value '%s' for %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Integer value '%s' for %s out of range"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Cannot parse double value '%s' for %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Double value '%s' for %s out of range"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Error parsing option %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Missing·argument·for·%s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Unknown option %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Valid key file could not be found in search dirs"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Not a regular file"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "File is empty"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Invalid group name: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Key file does not start with a group"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Invalid key name: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Key file contains unsupported encoding '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Key file does not have group '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Key file does not have key '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Key file contains key '%s' with value '%s' which is not UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Key file contains key '%s' which has value that cannot be interpreted."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Key file does not have key '%s' in group '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Key file contains escape character at end of line"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Key file contains invalid escape sequence '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Value '%s' cannot be interpreted as a number."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Integer value '%s' out of range"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Value '%s' cannot be interpreted as a float number."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Value '%s' cannot be interpreted as a boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Too large count value passed to %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Stream is already closed"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operation was cancelled"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Unknown type"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s filetype"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s type"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Unexpected early end-of-stream"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Unnamed"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop file didn't specify Exec field"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Unable to find terminal required for application"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Can't create user application configuration folder %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Can't create user MIME configuration folder %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Can't create user desktop file %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Custom definition for %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "drive doesn't implement eject"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "drive doesn't implement polling for media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Can't handle version %d of GEmblem encoding"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Malformed number of tokens (%d) in GEmblem encoding"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Can't handle version %d of GEmblemedIcon encoding"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Expected a GEmblem for GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operation not supported"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Containing mount does not exist"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Can't copy over directory"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Can't copy directory over directory"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Target file exists"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Can't recursively copy directory"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Can't copy special file"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Invalid symlink value given"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Trash not supported"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "File names cannot contain '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volume doesn't implement mount"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "No application is registered as handling this file"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator is closed"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "File enumerator has outstanding operation"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "File enumerator is already closed"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "file"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "The file containing the icon"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Can't handle version %d of GFileIcon encoding"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Malformed input data for GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Stream doesn't support query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Seek not supported on stream"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Truncate not allowed on input stream"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Truncate not supported on stream"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Wrong number of tokens (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "No type for class name %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Type %s does not implement the GIcon interface"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Type %s is not classed"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Malformed version number: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Type %s does not implement from_tokens() on the GIcon interface"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Can't handle the supplied version the icon encoding"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Input stream doesn't implement read"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Stream has outstanding operation"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Unable to find default local directory monitor type"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Invalid filename %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Error getting filesystem info: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Can't rename root directory"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Error renaming file: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Can't rename file, filename already exist"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Invalid filename"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Error opening file: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Can't open directory"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Error removing file: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Error trashing file: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Unable to create trash dir %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Unable to find toplevel directory for trash"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Unable to find or create trash directory"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Unable to create trashing info file: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Unable to trash file: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Error creating directory: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Error making symbolic link: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Error moving file: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Can't move directory over directory"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Backup file creation failed"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Error removing target file: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Move between mounts not supported"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attribute value must be non-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Invalid attribute type (string expected)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Invalid extended attribute name"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Error setting extended attribute '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Error stating file '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (invalid encoding)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Error stating file descriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Invalid attribute type (uint32 expected)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Invalid attribute type (uint64 expected)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Invalid attribute type (byte string expected)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Error setting permissions: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Error setting owner: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink must be non-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Error setting symlink: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Error setting symlink: file is not a symlink"
+
+# c-format
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux context must be non-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error setting SELinux context: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux is not enabled on this system"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Setting attribute %s not supported"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Error reading from file: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Error seeking in file: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Error closing file: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Unable to find default local file monitor type"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Error writing to file: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Error removing old backup link: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Error creating backup copy: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Error renaming temporary file: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Error truncating file: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Error opening file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Target file is a directory"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Target file is not a regular file"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "The file was externally modified"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Error removing old file: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Invalid GSeekType supplied"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Invalid seek request"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Cannot truncate GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Reached maximum data array limit"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Memory output stream not resizable"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Failed to resize memory output stream"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount doesn't implement unmount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount doesn't implement eject"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount doesn't implement remount"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount doesn't implement content type guessing"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount doesn't implement synchronous content type guessing"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Output stream doesn't implement write"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Source stream is already closed"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "name"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "The name of the icon"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "names"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "An array containing the icon names"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "use default fallbacks"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Can't handle version %d of GThemedIcon encoding"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "File descriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "The file descriptor to read from"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Close file descriptor"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Whether to close the file descriptor when the stream is closed"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Error reading from unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Error closing unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filesystem root"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "The file descriptor to write to"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Error writing to unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volume doesn't implement eject"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Can't find application"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Error launching application: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs not supported"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "association changes not supported on win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Association creation not supported on win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "do not hide entries"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "use a long listing format"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "Can't load just created desktop file"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Error creating backup link: %s"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr "Too large count value passed to g_input_stream_read_async"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "Too large count value passed to g_input_stream_skip"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr "Too large count value passed to g_input_stream_skip_async"
+
+#~ msgid "Target file already exists"
+#~ msgstr "Target file already exists"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "Too large count value passed to g_output_stream_write"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr "Too large count value passed to g_output_stream_write_async"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Could not change file mode: fork() failed: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Could not change file mode: waitpid() failed: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Could not change file mode: chmod() failed: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Could not change file mode: Child terminated by signal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Could not change file mode: Child terminated abnormally"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Conversion from character set `%s' to `%s' is not supported"
diff --git a/po/hi.po b/po/hi.po
new file mode 100644
index 0000000..cbae203
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,1820 @@
+# translation of hi.po to Hindi
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+#
+# Ravishankar Shrivastava <raviratlami@yahoo.com>, 2004.
+# Rajesh Ranjan <rranjan@redhat.com>, 2005, 2006, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: hi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-05 13:18+0530\n"
+"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
+"Language-Team: Hindi <hindi.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s' अप्रत्याशित गुण '%s' तत्व के लिए"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' तत्व '%s' का  गुण नहीं मिला"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "'%s' अप्रत्याशित टैग, '%s' टैग प्रत्याशित"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "अप्रत्याशित टैग '%s' '%s' के अंदर"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "कोई वैध पुस्तचिह्न आँकड़ा निर्देशिका में नहीं मिला"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "यूआरआई '%s' के लिए पुस्तचिह्न पहले से मौजूद है"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "यूआरआई '%s' के लिए कोई पुस्तचिह्न नहीं मिला"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "कोई MIME प्रकार यूआरआई '%s' के लिए पुस्तचिह्न में परिभाषित नहीं है"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "यूआरआई '%s' के लिए पुस्तचिह्न में कोई निजी फ्लैग परिभाषित नहीं है"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "यूआरआई '%s' के लिए पुस्तचिह्न में कोई समूह सेट नहीं है"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' के नाम से कोई अनुप्रयोग ने '%s' के लिए पुस्तचिह्न पंजीकृत नहीं है"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "'%s' एक्स पंक्ति यूआरआई '%s' से फैलाने में विफल रहा"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "वर्ण समूह '%s' से '%s' में परिवर्तन समर्थित नहीं है"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' से '%s' परिवर्तक नहीं खोला जा सका"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "परिवर्तन इनपुट में अवैध बाइट अनुक्रम"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "परिवर्तन के दौरान त्रुटि: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "इनपुट के अंत में आंशिक वर्ण अनुक्रम"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "फालबैक '%s' को कोड सेट '%s' में परिवर्तित नहीं कर सका"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "\"file\" योजना का उपयोग करने वाली यूआरआई '%s' एक निरपेक्ष यूआरआई नहीं है"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "स्थानीय फ़ाइल यूआरआई '%s' में एक '#' सम्मिलित नहीं है"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "यूआरआई '%s' अवैध है"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "यूआरआई '%s' का मेजबाननाम अवैध है"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "यूआरआई '%s' में अवैध एस्केप्ड वर्ण सम्मिलित हैं"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "पथनाम '%s' एक निरपेक्ष पथ नहीं है"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "अवैध होस्ट-नाम"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "निर्देशिका '%s' को खोलने में त्रुटि: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr " %lu बाइट आबंटित नहीं किया जा सकता फ़ाइल \"%s\" को पढ़ने हेतु"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' फ़ाइल को पढ़ने में त्रुटि: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "\"%s\" फ़ाइल काफी बड़ी है"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "फ़ाइल '%s' से पढ़ने में असफल: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' फ़ाइल खोलने में असफल :%s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "फ़ाइल '%s' की विशेषता ज्ञात करने में असफल: fstat() असफल: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "फ़ाइल '%s': fdopen() खोलने में असफल: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "फ़ाइल '%s' को '%s' में नाम बदलने में विफल: g_rename() विफल: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "फ़ाइल '%s' बनाने में असफल: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "फ़ाइल '%s' को लिखने के लिए खोलने में विफल: fdopen() विफल: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' फ़ाइल को लिखने में विफल: fwrite() विफल: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' फ़ाइल को लिखने में विफल: fwrite() विफल: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' फ़ाइल को लिखने में विफल: fwrite() विफल: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' फ़ाइल बंद करने में विफल: fclose() विफल: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "'%s' मौजूदा फ़ाइल हटाया नहीं जा सकता: g_unlink() विफल: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "टैम्पलेट '%s' अवैध है, इसमें '%s' शामिल नहीं है"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "टैम्पलेट '%s' में XXXXXX समाहित नहीं है"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f कि.बा."
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f मे.बा."
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f गी.बा."
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "सिंबालिक लिंक '%s' से प्रसंग पढ़ने में असफल %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "सिंबालिक लिंक समर्थित नहीं है"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' से '%s' परिवर्तक नहीं खोला जा सका: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "यहाँ एक रॉ रीड नहीं कर सकता g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "रीड बफ़र में शेष है अपरिवर्तित बचा हुआ डेटा"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "आंशिक वर्ण में चैनल समाप्त होता है"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "यहाँ एक रॉ रीड नहीं कर सकता - g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "फ़ाइल '%s' खोलने में असफल: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' फ़ाइल चित्रित करने में विफल: mmap() विफल: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "पंक्ति %d वर्ण %d पर त्रुटि:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "पंक्ति %d: पर त्रुटि %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "खाली एंटिटी '&;' देखा; वैध एंटिटी हैं: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"एक एंटिटी के प्रारंभ में वर्ण '%s' वैध नहीं है, तथा & वर्ण एक एंटिटी को प्रारंभ करता है; "
+"यदि यह एम्परसेंड एक एंटिटी नहीं है, तो इसे ऐसे एस्केप करें &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr " वर्ण '%s' एक एंटिटी नाम के भीतर वैध नहीं है"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "एंटिटी नाम '%s' ज्ञात नहीं है"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"एंटिटी अर्धविराम पर समाप्त नहीं होता, बहुत संभव है कि आपने एम्परसेन्ड वर्ण का प्रयोग किया "
+"है और एक एंटिटी प्रारंभ नहीं करना चाहते- एम्परसेंड को ऐसे एस्केप करें: &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' के विश्लेषण करने में असफल, जो कि वर्ण संदर्भ के भीतर एक अंक होना चाहिए (उदाहरण "
+"के लिए, &#234) - शायद अंक काफी बड़ा है"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "संप्रतीक संदर्भ '%-.*s' एक अनुमति प्राप्त संप्रतीक को एनकोड नहीं करता"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "रिक्त वर्ण संदर्भ, अंक जैसे &#454 सम्मिलित अवश्य होने चाहिएँ;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"वर्ण संदर्भ अर्धविराम चिन्ह के साथ समाप्त नहीं होता है; बहुत संभव है कि आपने एक एम्परसेंड "
+"वर्ण का उपयोग किया है पर एक एंटिटी को प्रारंभ करना नहीं चाहते - एम्परसेंड को एस्केप करें "
+"ऐसे &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "अपूर्ण एंटिटी संदर्भ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "अपूर्ण वर्ण संदर्भ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "अवैध यूटीएफ़-8 एनकोडेड पाठ - अत्यधिक लंबी शृंखला"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "अवैध यूटीएफ़-8 एनकोडेड पाठ - एक आरंभिक वर्ण नहीं"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "अवैध यूटीएफ़-8 एनकोडेड पाठ - वैध '%s' नहीं"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "दस्तावेज़ एक अवयव के नाम से प्रारंभ होना चाहिए (उदाहरण के लिए- <पुस्तक>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "< के पश्चात आया '%s' एक वैध वर्ण नहीं है; यह अवयव नाम से प्रारंभ नहीं होता"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "'%s' विसम वर्ण, एक '>' संप्रतीक प्रत्याशित रिक्त तत्व टैग '%s' समाप्त करने के लिए"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "विसम वर्ण '%s', प्रत्याशित है एक '=' लक्षण नाम '%s' अवयव '%s' के पश्चात्"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' विसम संप्रतीक, एक '>' या '/' संप्रतीक को '%s' तत्व के आरंभ टैग को खत्म करना "
+"प्रत्याशित, या विकल्पतः एक गुण; शायद आपने गुण नाम में एक अमान्य संप्रतीक का प्रयोग किया है"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"पुराना वर्ण '%s', जब विशेषता '%s', अवयव '%s' का मान दिया जाता है तो बराबर चिह्न के "
+"बाद एक खुला कोट चिह्न वांछित है"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "'%s' एक वैध वर्ण नहीं है वर्ण '</' के बाद; '%s' एक अवयव नाम से प्रारंभ नहीं होता"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "'%s' एक वैध वर्ण नहीं है क्लोज़ अवयव नाम '%s' के बाद; स्वीकार्य वर्ण है '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "अवयव '%s' बन्द था, कोई अवयव वर्तमान में खुला नहीं है"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "दस्तावेज़ '%s' बन्द था, परन्तु वर्तमान खुला अवयव है '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "दस्तावेज़ खाली था या उसमें सिर्फ श्वेत रिक्ति ही था"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से एक खुला एंगल ब्रेकेट '<' के पश्चात ही हो गया"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"दस्तावेज़ का अंत अप्रत्याशित रूप से अवयवों के खुला होने पर भी हो गया - '%s' अंतिम खुला हुआ "
+"अवयव था"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"दस्तावेज़ का अंत अप्रत्याशित रूप से हो गया, वांछित था देखना एक क्लोज़ एंगल ब्रेकेट टैग को बन्द "
+"करता हुआ <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से अवयव नाम के भीतर हो गया"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से विशेषता नाम के भीतर हो गया"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से अवयव-खोलने के टैग के भीतर हो गया."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"दस्तावेज़ का अंत अप्रत्याशित रूप से बराबर के चिह्न के बाद एक विशेषता नाम के पश्चात् हो गया; "
+"कोई विशेषता मूल्य नहीं"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से विशेषता मान के भीतर हो गया"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से अवयव '%s' हेतु बन्द टैग के भीतर हो गया"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "दस्तावेज़ का अंत अप्रत्याशित रूप से टिप्पणी या प्रक्रिया निर्देश के भीतर हो गया"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "खराब वस्तु"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "आंतरिक त्रुटि या खराब वस्तु"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "स्मृति के बाहर"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "बैकट्रैकिंग सीमा पहुँच गई"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "प्रारूप में वे वस्तुएँ समाहित हैं जो आंशिक मिलान के लिए समर्थित नहीं हैं"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "आंतरिक त्रुटि"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "प्रति संदर्भ क्योंकि परिस्थिति आंशिक मिलान के लिए समर्थित नहीं है"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "रिकर्सन सीमा समाप्त"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "रिक्त उपस्ट्रिंग के लिए कार्य स्थान सीमा समाप्त"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "न्यूलाइन फ्लैग का अवैध संयोग"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "अज्ञात त्रुटि"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ प्रारूप के अंत में"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c प्रारूप के अंत में"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "अपरिचित वर्ण आता है \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "केस परिवर्तन एस्केप (\\l, \\L, \\u, \\U) यहाँ अनुमति प्राप्त नहीं है"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} क्वांटिफाइर में संख्या क्रमबद्ध नहीं"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} क्वांटिफायर में संख्या बहुत बड़ी"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "अनुपस्थित समाप्त करता ] वर्ण वर्ग के लिए"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "वर्ण वर्ग में अवैध एस्केप शृंखला"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "वर्ण वर्ग में दायरा क्रमबद्ध नहीं"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "दुहराने के लिए कुछ नहीं"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? के बाद अपरिचित वर्ण"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< के बाद अपरिचित वर्ण"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P के बाद अपरिचित वर्ण"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "पोसिक्स नामित वर्ग केवल वर्ग के अंदर समर्थित है"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "समाप्ति चिह्न अनुपस्थित है )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") बिना द्वार के ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R या (?[+-]अंक को जरूर इसके साथ आना चाहिए )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "गैर मौजूद उप प्रारूप का संदर्भ"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "अनुपस्थित ) टिप्पणी के बाद"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "नियमित अभिव्यक्ति काफी बड़ी है"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "स्मृति पाने में विफल"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "लुकबिहाइंड तथ्य स्थिर लंबाई की नहीं है"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "विरूपित संख्या या नाम के बाद (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "गोपनीय समूह में दो शाखाओं से अधिक समाहित है"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "तथ्य इसके बाद प्रत्याशित (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "अज्ञात पोसिक्स वर्ग नाम"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "पोसिक्स कोलेटिंग तत्व समर्थित नहीं है"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} में वर्ण शृंखला काफी बड़ी है"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "अवैध परिस्थिति (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C लुकबिहाइंड तथ्य में स्वीकृत नहीं है"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "पुनरावर्ती आह्वान अनिश्चित काल के लिए लूप कर सकता है"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "उप प्रारूप नाम में अनुपस्थित टर्मिनेटर"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "दो नाम उप प्रारूप के पास समान नाम हैं"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "विरूपित \\P या \\p शृंखला"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P या \\p के बाद अज्ञात गुण नाम"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "उप प्रारूप नाम काफी बड़ा है (अधिकतम 32 वर्ण का)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "कई नामित उप प्रारूप (अधिकतम 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "ओक्टल मान से बड़ा है \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "परिभाषा समूह में एक से अधिक शाखाएँ हैं"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "किसी परिभाषा समूह को दुहराना स्वीकृत नहीं है"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "असंगत न्यूलाइन विकल्प"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g कोष्ठित नाम के बाद नहीं आता है या वैकल्पिक रूप से कोष्ठित गैर शून्य संख्या"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "अप्रत्याशित दुहराव"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "कोड अतिप्रवाह"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "ओवररैन कंपाइलिंग कार्यस्थान"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "पहले से जाँचे गए संदर्भित उप प्रारूप नहीं मिला"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "नियमित अभिव्यक्ति %s मिलान के दौरान त्रुटि: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE लाइब्रेरी को बिना UTF8 समर्थन के कंपाइल किया गया है"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE लाइब्रेरी को बिना UTF8 गुण समर्थन के कंपाइल किया गया है"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "नियमित अभिव्यक्ति %s को वर्ण %d पर कंपाइल करने के दौरान त्रुटि: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "नियमित अभिव्यक्ति %s के अनुकूलित किए जाने के दौरान त्रुटि: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "हेस्काडेसीमल अंक या '}' प्रत्याशित"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "हेस्काडेसीमल अंक प्रत्याशित"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "अनुपस्थित '<' सांकेतिक संदर्भ में"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "अपूर्ण सांकेतिक संदर्भ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "शून्य लंबाई सांकेतिक संदर्भ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "अंक प्रत्याशित"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "अवैध सांकेतिक संदर्भ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "स्ट्रे फाइनल '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "अज्ञात एस्केप शृंखला"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "प्रतिस्थापन पाठ \"%s\" को %lu पर विश्लेषण के दौरान त्रुटि: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "कोटेड पाठ कोटेशन चिह्न के साथ प्रारंभ नहीं होता"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "कमांड पंक्ति में मेल नहीं खाते कोटेशन चिह्न या अन्य शैल-कोटेड पाठ"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "पाठ का अंत सिर्फ '\\' वर्ण के बाद हो गया. (पाठ था '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr " %c हेतु मैचिंग कोट से पहले पाठ अंत पाया. (पाठ था '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "पाठ खाली था (या उसमें सिर्फ श्वेत रिक्ति ही था)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "संतति प्रक्रिया से डेटा पढ़ने में असफल"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "संतति प्रक्रिया (%s) से संचारण हेतु पाइप बनाने में असफल"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "संतति पाइप (%s) से पढ़ने में असफल"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "निर्देशिका '%s' (%s) पर बदलने में असफल"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "संतति प्रक्रिया (%s) कार्यान्वित करने में असफल"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "अवैध प्रोग्राम नाम: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d पर तर्क सदिश में अवैध स्ट्रिंग: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "वातावरण में अवैध स्ट्रिंग: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "अवैध कार्यशील निर्देशिका: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "हेल्पर प्रोग्राम (%s) कार्यान्वित करने में असफल"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "एक संतति प्रक्रिया से डेटा पढ़ने में g_io_channel_win32_poll() में अप्रत्याशित त्रुटि"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "संतति प्रक्रिया (%s) से डेटा पढ़ने में असफल"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "एक संतति प्रक्रिया (%s) से चुनें() पढ़ने का डेटा में अप्रत्याशित त्रुटि हुई"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() (%s) में अप्रत्याशित त्रुटि"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) फॉर्क करने में असफल"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "संतति प्रक्रिया \"%s\" (%s) कार्यान्वित करने में असफल"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "आउटपुट या संतति प्रक्रिया (%s) के इनपुट को अनुप्रेषित करने में असफल"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "संतति प्रक्रिया (%s) फॉर्क करने में असफल"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "संतति प्रक्रिया \"%s\" कार्यान्वित करने में अज्ञात त्रुटि"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "संतति पीआईडी पाइप (%s) से पर्याप्त डेटा पढ़ने में असफल"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "यूटीएफ-8 हेतु वर्ण सीमा से बाहर"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "परिवर्तन इनपुट में अवैध अनुक्रम"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "यूटीएफ-16 हेतु वर्ण सीमा से बाहर"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "प्रयोग:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[विकल्प...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "मदद विकल्प:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "मदद विकल्प दिखाएँ"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "सभी मदद विकल्प दिखाएँ"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "अनुप्रयोग विकल्प:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "पूर्णांक मान '%s' को %s के लिए विश्लेषण नहीं कर सकता"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "पूर्णांक मान '%s' %s के लिए दायरा के बाहर है"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%s' दोहरे मान का विश्लेषण %s के लिए नहीं कर सकता है"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "'%s' दोहरा मान %s के लिए परिसर से बाहर है"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s विकल्प विश्लेषण में त्रुटि"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s के लिए गुम तर्क"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "अनजान विकल्प %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "खोज निर्देशिका में वैध कुंजी फ़ाइल नहीं मिल सका"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "एक सामान्य फ़ाइल नहीं"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "फ़ाइल खाली है"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"कुंजी फ़ाइल में '%s' पंक्ति समाहित है जो कि एक कुंजी मान जोड़ा, समूह, या टिप्पणी नहीं है"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "अवैध समूह नाम: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "कुंजी फ़ाइल एक समूह के साथ शुरू नहीं होता"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "अवैध कुंजी नाम: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "कुंजी फ़ाइल में असमर्थित एनकोडिंग '%s' समाहित है"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "कुंजी फ़ाइल में '%s' समूह नहीं है"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "कुंजी फ़ाइल में '%s' कुंजी नहीं है"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "कुंजी फ़ाइल में '%s' कुंजी समाहित है '%s' मान के साथ जो UTF-8 नहीं है"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "कुंजी फ़ाइल में '%s' कुंजी है जिसके मान का विश्लेषण नहीं किया जा सकता."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "कुंजी फ़ाइल में '%s' कुंजी है '%s' समूह में जिसके मान का विश्लेषण नहीं किया जा सकता."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "कुंजी फ़ाइल में '%s' कुंजी नहीं है '%s' समूह में"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "कुंजी फ़ाइल में पंक्ति के अंत में एस्केप संप्रतीक रहता है"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "कुंजी फ़ाइल में '%s' अमान्य शृंखला समाहित है"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "मान्य '%s' को एक संख्या की तरह नहीं विश्लेषित किया जा सकता."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "पूर्णांक मान '%s' दायरा के बाहर है"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "मान '%s' को एक फ्लोट संख्या की तरह नहीं विश्लेषित किया जा सकता."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "मान '%s' को बुलियन के तौर पर विश्लेषित नहीं किया जा सकता."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "बड़ी गणना मान को %s में भेजा गया"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "धारा पहले से बंद है"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "ऑपरेशन रद्द था"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "अज्ञात प्रकार"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s फ़ाइल प्रकार"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s प्रकार"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "अप्रत्याशित स्ट्रीम का समय से पहले अंत"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "बेनाम"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "डेस्कटॉप फ़ाइल एक्स क्षेत्र को निर्दिष्ट नहीं करता है"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "अनुप्रयोग के लिए जरूरी टर्मिनल ढूँढ़ने में असमर्थ"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "उपयोक्ता अनुप्रयोग विन्यास फ़ोल्डर %s नहीं बना सकता है: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "MIME विन्यास फ़ोल्डर %s नहीं बना सकता है: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "उपयोक्ता डेस्कटॉप फ़ाइल %s नहीं बना सकता है"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s के लिए मनपसंग परिभाषा"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ड्राइव बाहर करें कार्यान्वित नहीं करता है"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ड्राइव मीडिया प्रोफ़ाइलिंग कार्यान्वित नहीं करता है"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem एन्कोडिंग का %d संस्करण नियंत्रित नहीं कर सकता है"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem एन्कोडिंग में (%d) टोकन की विरूपित संख्या"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon एन्कोडिंग का %d संस्करण नियंत्रित नहीं कर सकता है"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon एन्कोडिंग में (%d) टोकन की विरूपित संख्या"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon के लिए एक GEmblem प्रत्याशित"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ऑपरेशन समर्थित नहीं है"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "समाहित करने वाला माउंट मौजूद नहीं है"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "निर्देशिका पर नक़ल नहीं कर सकता है"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "निर्देशिका पर निर्देशिका नक़ल नहीं कर सकता है"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "लक्ष्य फ़ाइल मौजूद है"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "निर्देशिका पुनरावर्ती रूप से नक़ल नहीं कर सकता है"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "विशेष फ़ाइल नक़ल नहीं कर सकता है"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "अवैध सांकेतिक कड़ी प्रदत्त मान"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "रद्दी समर्थित नहीं है"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "फ़ाइल नाम में '%c' नहीं हो सकता है"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "आवाज माउंट लागू नहीं कर सकता है"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "इस फ़ाइल के नियंत्रण के रूप में कोई अनुप्रयोग पंजीकृत नहीं है"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "इन्यूमेरेटर बंद है"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "फ़ाइल इन्यूमेरेटर में बचा ऑपरेशन है"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "फ़ाइल इन्यूमेरेटर पहले से बंद है"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "फ़ाइल"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "इस फ़ाइल में प्रतीक समाहित है"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon एन्कोडिंग का %d संस्करण नियंत्रित नहीं कर सकता है"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon के लिए विरूपित इनपुट आँकड़ा"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "स्ट्रीम query_info का समर्थन नहीं करती है"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "प्राप्ति स्ट्रीम पर समर्थित नहीं है"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "कटान इनपुट स्ट्रीम पर समर्थित नहीं है"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "कटान स्ट्रीम पर समर्थित नहीं है"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "(%d) टोकन की गलत संख्या"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "%s वर्ग नाम के लिए कोई प्रकार नहीं"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "%s प्रकार GIcon अंतरफलक लागू नहीं करता है"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "%s प्रकार वर्गीकृत नहीं है"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "विरूपित संस्कण संख्या: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "%s प्रकार from_tokens() को GIcon अंतरफलक पर लागू नहीं करता है"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "प्रतीक एन्कोडिंग का दिया संस्करण नियंत्रित नहीं कर सकता है"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "इनपुट स्ट्रीम पठन लागू नहीं कर सकता है"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "स्ट्रीम के पास बची ऑपरेशन है"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "तयशुदा स्थानीय निर्देशिका मॉनिटर प्रकार ढूँढ़ने में असमर्थ"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "अवैध फ़ाइलनाम: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "फ़ाइलतंत्र सूचना पाने में त्रुटि: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "रूट निर्देशिका का नाम नहीं बदल सकता है"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "फ़ाइल का नाम बदलने में त्रुटि: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "फ़ाइल का नाम नहीं बदल सकता है, फ़ाइलनाम पहले से मौजूद है"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "अवैध फ़ाइलनाम"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "फ़ाइल खोलने में त्रुटि: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "डैरक्टरी नहीं खोल सकते है"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "फ़ाइल हटाने में त्रुटि: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "फ़ाइल रद्दी में भेजने में त्रुटि: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "रद्दी निर्देशिका %s बनाने में असमर्थ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "रद्दी के लिए उच्च स्तरयी निर्देशिका ढूँढ़ने में असमर्थ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "रद्दी निर्देशिका ढूँढ़ने और बनाने में असमर्थ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "रद्दी सूचना फ़ाइल बनाने में असमर्थ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "फ़ाइल रद्दी में भेजने में असमर्थ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "निर्देशिका बनाने में त्रुटि: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "सांकेतिक कड़ी बनाने में त्रुटि: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "फ़ाइल खिसकाने में त्रुटि: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "निर्देशिका पर निर्देशिका नहीं खिसका सकता है"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "बैकअप फ़ाइल निर्माण विफल"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "लक्ष्य फ़ाइल हटाने में त्रुटि: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "माउंट के बीच खिसकाना समर्थित नहीं"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "विशेषता मान को जरूर रिक्त होना चाहिए"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "अवैध विशेषता प्रकार (स्ट्रिंग प्रत्याशित)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "अवैध विस्तारित विशेषता नाम"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "विस्तारित विशेषता '%s' सेट करने में त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' फ़ाइल व्यक्त करने में त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (अवैध एन्कोडिंग)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "फ़ाइल विवरणकर्ता व्यक्त करने में त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "अवैध विशेषता प्रकार (uint32 प्रत्याशित)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "अवैध विशेषता प्रकार (uint64 प्रत्याशित)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "अवैध विशेषता प्रकार (बाइट स्ट्रिंग प्रत्याशित)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "अनुमति सेट करने के दौरान त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "स्वामी सेट करने के दौरान त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "सांकेतिक कड़ी जरूर रिक्त होनी चाहिए"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "सांकेतिक कड़ी की सेटिंग में त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "सांकेतिक कड़ी की सेटिंग में त्रुटि: फ़ाइल एक सांकेतिक कड़ी नहीं है"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux संदर्भ जरूर शून्येतर होना चाहिए"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux संदर्भ सेटिंग के दौरान त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux इस तंत्र पर समर्थित नहीं है"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "विशेषता %s की सेटिंग समर्थित नहीं है"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "फ़ाइल से पढ़ने के दौरान त्रुटि: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "फ़ाइल से प्राप्त करने में त्रुटि: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "फ़ाइल बंद करने में त्रुटि: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "तयशुदा स्थानीय फ़ाइल मॉनिटर प्रकार ढूँढ़ने में असमर्थ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "फ़ाइल में लिखने में त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "पुराने बैकअप कड़ी हटाने में त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "बैकअप की नक़ल बनाने में त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "अस्थाई फ़ाइल का नाम बदलने में त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "फ़ाइल काटने में त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' फ़ाइल खोलने में त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "लक्ष्य फ़ाइल एक निर्देशिका है"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "लक्ष्य फ़ाइल एक सामान्य फ़ाइल नहीं है"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "यह फ़ाइल बाह्य स्तर पर रूपांतरित था"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "पुरानी फ़ाइल हटाने में त्रुटि: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "अवैध GSeekType की आपूर्ति"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "अवैध प्राप्ति आग्रह"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream काट नहीं सकता है"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "अधिकतम आँकड़ा सरणी सीमा पर पहुँचा"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "स्मृति आउटपुट स्ट्रीम का आकार बदलना संभव हीं"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "स्मृति आउटपुट स्ट्रीम का आकार बदलने में विफल"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "माउंट अनमाउंट लागू नहीं करता है"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "माउंट बाहर करें लागू नहीं करता है"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "माउंट रिमाउंट लागू नहीं करता है"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "माउंट अंतर्वस्तु प्रकार गेसिंग लागू नहीं करता है"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "माउंट तुल्यकालित अंतर्वस्तु प्रकार गेसिंग लागू नहीं करता है"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "आउटपुट स्ट्रीम लेखन लागू नहीं करता है"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "स्रोत स्ट्रीम पहले से बंद है"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "नाम"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "इस प्रतीक का नाम"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "नाम"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "प्रतीक नाम समाहित करती एक सरणी"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "तयशुदा फ़ॉलबैक का प्रयोग करें"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"नाम को '-' वर्ण पर छोटा करने के द्वारा मिले तयशुदा फ़ॉलबैक का क्या प्रयोग करना है. पहले "
+"के बाद के नाम अनदेखा करता है यदि कई नाम दिए गए हैं."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon एन्कोडिंग का %d संस्करण नियंत्रित नहीं कर सकता है"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "फ़ाइल विवरक"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "फ़ाइल विवरक जिससे पढ़ा जाना है"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "फ़ाइल विवरक बंद करें"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "क्या फ़ाइल विवरक बंद किया जाना है जब यह स्ट्रीम बंद है"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "यूनिक्स से पढ़ने में त्रुटि: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "यूनिक्स बंद करने में त्रुटि: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "फ़ाइलतंत्र रूट"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "फ़ाइल विवरक जिसमें लिखा जाना है"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "यूनिक्स में लिखने में त्रुटि: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "आवाज बाहर करें लागू नहीं करता है"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "अनुप्रयोग ढूँढ़ नहीं सकता है"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "अनुप्रयोग लॉन्च करने में त्रुटि: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "यूआरआई समर्थित नहीं"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 पर संगठन परिवर्तन समर्थित नहीं"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 पर संगठन निर्माण समर्थित नहीं"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "प्रविष्टि मत छुपाएँ"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "लंबी सूची प्रारूप का प्रयोग करें"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[फ़ाइल...]"
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..6be3913
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,1847 @@
+# Translation of glib to Croatiann
+# Copyright (C) Croatiann team
+# Translators: Denis Lackovic <delacko@fly.srk.fer.hr>,Robert Sedak <robert.sedak@sk.t-com.hr>,
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-05-18 15:38+0000\n"
+"Last-Translator: Launchpad Translations Administrators <rosetta@launchpad."
+"net>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2008-05-28 06:03+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Nisam uspio pročitati simboličku vezu '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Pretvaranje iz znakovnog skupa '%s' u '%s' nije podržana"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Ne mogu otvoriti pretvornik iz %s' u '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Neispravna sekvenca bajtova u izlazu konverzije"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Djelomična znakovna sekvenca pri kraju izlaza"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ne mogu prevesti '%s' u znakovni skup '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "'%s' nije apsolutni URI sa \"datoteka\" shemom"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI lokalne datoteke '%s' ne smije uključivati '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' nije ispravan"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Ime računala URI-ja '%s' je neispravno"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' sadrži neispravne escape znakove"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Putanja '%s' nije apsolutna putanja"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Neispravno ime računala"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Greška pri otvaranju mape '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ne mogu alocirati %lu bajtova za čitanje datoteke \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Greška pri čitanju iz datoteke '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Greška pri otvaranju datoteke '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Greška pri dohvatu atributa datoteke '%s': fstat() nije uspio: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Greška pri otvaranju datoteke '%s': fdopen() nije uspio: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Greška pri preimenovanju datoteke '%s' u '%s': g_rename() nije uspio: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Greška pri stvaranju datoteke '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Greška pri otvaranju datoteke '%s' za pisanje: fdopen() nije uspio: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Greška pri pisanje u datoteku '%s': fwrite() nije uspio: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Greška pri pisanje u datoteku '%s': fwrite() nije uspio: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Greška pri pisanje u datoteku '%s': fwrite() nije uspio: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Greška pri zatvaranju datoteke '%s': fclose() nije uspio: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Postojeća datoteka '%s' ne može biti obrisana: g_unlink() nije uspio: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Predložak '%s' nije ispravan, ne smije sadržavati'%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Predložak '%s' ne završava sa XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Nisam uspio pročitati simboličku vezu '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Nisu podržane simboličke veze"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Ne mogu otvoriti pretvornik iz '%s' u '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ne mogu izvršiti raw čitanje u g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Postoji ostatak nepretvorenih podataka u međuspremniku za čitanje"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal završava sa djelomičnim znakom"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ne mogu izvršiti raw čitanje u g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Greška pri otvaranju datoteke '%s': open() nije uspio: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Greška pri mapiranju datoteke '%s': mmap() nije uspio: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Greška na retku %d znak %d: %s "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Greška na retku %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Prazan entitet '&;' ; ispravni entiteti su: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak '%s' nije dozvoljen na početku imena entiteta; znak & počinje entitet; "
+"ako ovaj & nije entitet onda ga označite sa &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak '%s' nije dozvoljen unutar imena entiteta"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Ime entiteta '%s' nije poznato"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entitet nije zavšio sa točka-zarezom; vjerojatno ste koristili ampersand "
+"znak bez namjere da započnete entitet - escapirajte ampersand sa &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nisam uspio izanalizirati '%-.*s', koji je trebao biti broj unutar znakovne "
+"reference (npr. &#234;) - možda je broj prevelik"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Znakovna referenca '%-.*s' ne kodira dozvoljeni znak"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Prazna znakovna referenca; treba uključivati broj kao &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Znakovna referenca nije završila sa točka-zarezom; vjerojatno ste koristitli "
+"ampersand znakbez namjere da počnete entitet - escapirajte ampersand kao "
+"&amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nezavršena referenca entiteta"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nezavršena znakovna referenca"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Neispravno šifrirani UTF-8 tekst"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Neispravno šifrirani UTF-8 tekst"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Neispravno šifrirani UTF-8 tekst"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument mora početi sa elementom(npr. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' nije dozvoljeni znak koji smije slijediti nakon '<' znaka; ne smije "
+"započeti ime elementa"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Neparan znak '%s', očekuje se da '>' znak završi početni tag elementa'%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Neparan znak '%s', očekuje se '=' poslije imena atributa '%s' elementa '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Čudan znak '%s', očekuje se da znak '>' ili '/' završe početak taga elementa "
+"'%s', ili opcionalno atributa; možda ste koristili neispravan znaku imenu "
+"atributa"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Čudan znak '%s', očekuje se otvoreni navodnik nakon znaka jednakostikada se "
+"daje vrijednost atributa '%s' elementa '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' nije znak koji smije slijediti '</'; '%s' ne smije započetiime elementa"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' nije ispravan znak koji može slijediti nakon imena završnog elementa '%"
+"s'; dozvoljeni znak je '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' je zatvoren, trenutno nema otvorenog elementa"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' je zatvoren, ali trenutno otvoreni element je '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument je bio prazan ili je sadržavao samo znakove prazne znakove"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument je završio neočekivano nakon otvaranja zagrade '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument je završio neočekivano sa još uvijek otvorenim elementima- '%s' je "
+"bio zadnjiotvoreni element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument je završio neočekivano, očekivalo se da zatvorena šiljata "
+"zagradazavrši tag<%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument je završio neočekivano unutar imena elementa"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument je završio neočekivano unutar imena atributa"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument je završio neočekivano unutar taga koji započinje element"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument je završio neočekivano nakon što je znak jednakosti slijedioime "
+"atributa; nema vrijednosti atributa"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument je završio neočekivano unutar vrijednosti atributa"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Dokument je završio neočekivano unutar taga koji završava za element '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokument je završio neočekivano unutar komentara ili izvršavanja instrukcije"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Kanal završava sa djelomičnim znakom"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Neispravna sekvenca bajtova u izlazu konverzije"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Nezavršena znakovna referenca"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Nezavršena znakovna referenca"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Nezavršena znakovna referenca"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Nisu podržane simboličke veze"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Nezavršena referenca entiteta"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Tekst pod navodnicima ne počinje sa navodnikom"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Navodnik nije uparen u naredbenoj liniji"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst je završio nakon '\\' znaka (Tekst je bio '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Tekst je završio prije nego što je nađen završni navodnik %c. (Tekst je bio "
+"'%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekst je bio prazan (ili je sadržavao samo prazne znakove)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nisam uspio čitati podatke od procesa djeteta"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Ne mogu stvoriti cjevovod za komuniciranje sa procesom djetetom(%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nisam uspio čitati iz cjevovoda djeteta (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nisam mogao promijeniti putanju u mapu '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nisam mogao izvesti proces dijete (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Neispravno ime programa: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Neispravan niz znakova u argumentima na %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Neispravan niz znakova u okružju: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Neispravni radni direktorij: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Neuspjelo izvršavanje pomoćnog programa (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Neočekivana greška u g_io_channel_win32_poll() čitajući podatke "
+"procesadjeteta"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Neuspjeh u čitanju podataka od procesa djeteta(%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Neočekivana greška u select() čitanju podataka procesa djeteta (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Neočekivana greška u waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Pokretanje nije uspio (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Neuspjeh u izvršavanju procesa djeteta \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nisam uspio preusmjeriti izlaz ili ulaz procesa djeteta (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nisam uspio pokrenuti proces dijete (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nepoznata greška u izvršavanju procesa djeteta \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Neuspjeh u čitanju dovoljno podataka iz cjevovoda procesa djeteta (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak je izvan raspona za UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Neispravna sekvenca u pretvaranju ulaza"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak je izvan raspona za UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Uporaba:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcije pomoći:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Prikaži opcije pomoći"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Prikaži sve opcije pomoći"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Prikaži sve opcije pomoći"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Analiza brojčane vrijednosti '%s' za %s nije uspjela"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Brojčana vrijednost '%s' za '%s' izvan opsega"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Greška prilikom analize opcije %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Nedostaje parametar za %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Nepoznata opcija %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nije regularna datoteka"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Datoteka je prazna"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Datoteka s ključem sadrži redak '%s' koji nije oblika ključ-vrijednost, "
+"grupa ili komentar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr ""
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Datoteka s ključem ne započinje s grupom"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr ""
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Datoteka s ključem sadrži nepodržano kodiranje '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Datoteka s ključem ne sadrži grupu '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Datoteka s ključem ne sadrži ključ '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Datoteka s ključem sadrži ključ '%s' čija vrijednost '%s' nije u UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Datoteka s ključem sadrži ključ '%s' čiju vrijednost ne mogu protumačiti."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Datoteka s ključem sadrži ključ '%s' u grupi '%s' čiju vrijednost ne mogu "
+"protumačiti."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Datoteka s ključem na sadrži ključ '%s' u grupi '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Datoteka s ključem na kraju retka ima izbjegnute znakove"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Datoteka s ključem sadrži neispravno izbjegnuti niz '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Vrijednost '%s' ne može biti protumačena kao broj."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Brojčana vrijednost '%s' je izvan opsega"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Vrijednost '%s' ne može biti protumačena kao boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Nisu podržane simboličke veze"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Nisu podržane simboličke veze"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Ime računala URI-ja '%s' je neispravno"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Neispravno ime računala"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Neispravno ime računala"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Greška pri stvaranju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Greška pri stvaranju datoteke '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Greška pri stvaranju datoteke '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Greška pri otvaranju mape '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokument je završio neočekivano unutar imena atributa"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Greška pri otvaranju mape '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Greška na retku %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Nisu podržane simboličke veze"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Neispravno ime računala"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Ime računala URI-ja '%s' je neispravno"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Greška pri čitanju datoteke '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Greška na retku %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Greška prilikom konverzije: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Nisu podržane simboličke veze"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..91c7e58
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,1868 @@
+# Hungarian translation of glib
+# This file is distributed under the same license as the glib package.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, Free Software Foundation, Inc.
+#
+# Szabolcs Varga <shirokuma@shirokuma.hu>, 2005.
+# Gabor Kelemen <kelemeng@gnome.hu>, 2005, 2006, 2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-18 01:05+0100\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <gnome@fsf.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Váratlan attribútum („%s”) a(z) „%s” elemhez"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "A(z) „$2%s” elem „$1%s” attribútuma nem található"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Váratlan címke: „%s” a várt „%s” helyett"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Váratlan címke: „%s” a következőn belül: „%s”"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Az adatkönyvtárakban nem található érvényes könyvjelzőfájl"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Már létezik könyvjelző a következő URI címhez: „%s”"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Nem található könyvjelző a következő URI címhez: „%s”"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Nincs MIME típus meghatározva a következő URI könyvjelzőjéhez: „%s”"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Nincs magán jelző meghatározva a következő URI könyvjelzőjéhez: „%s”"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nincsenek csoportok beállítva a következő URI könyvjelzőjéhez: „%s”"
+
+# FIXME: hol jön ez elő?
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Nincs „%s” nevű alkalmazás regisztrálva a következő könyvjelzőjéhez: „%s”"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr ""
+"Nem sikerült kiterjeszteni a(z) „%s” végrehajtási sort a(z) „%s” URL címmel"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "A(z) „%s” és „%s” karakterkészletek közötti átalakítás nem támogatott"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+"A(z) „%s” karakterkészletről „%s” karakterkészletre átalakító nem nyitható "
+"meg"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Érvénytelen bájtsorrend az átalakítás bemenetében"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Hiba az átalakítás során: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Részleges karaktersorozat a bemenet végén"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Nem alakítható át a tartalék „%s” a(z) „%s” kódkészletre"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "A(z) „%s” URI nem abszolút, a „file” sémát használó URI"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "A(z) „%s” helyi fájl URI nem tartalmazhat „#” karaktert"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "A(z) „%s” URI érvénytelen"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "A(z) „%s” gépneve érvénytelen"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+"A(z) „%s” URI érvénytelen, escape sorozatként megadott karaktereket tartalmaz"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "A(z) „%s” elérési út neve nem abszolút útvonal"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Érvénytelen gépnév"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Hiba a(z) „%s” könyvtár megnyitásakor: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nem sikerült %lu bájtot lefoglalni a(z) „%s” fájl olvasásához"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Hiba a(z) „%s” fájl olvasása közben: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "A fájl („%s”) túl nagy"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Nem sikerült olvasni a(z) „%s” fájlból: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nem sikerült megnyitni a(z) „%s” fájlt: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Nem sikerült lekérni a(z) „%s” fájl attribútumait. Az fstat() sikertelen: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nem sikerült megnyitni a(z) „%s” fájlt. Az fdopen() sikertelen: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Nem sikerült átnevezni a(z) „%s” fájlt erre: „%s”. A g_rename() sikertelen: %"
+"s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Nem sikerült létrehozni a(z) „%s” fájlt: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Nem sikerült írásra megnyitni a(z) „%s” fájlt: Az fdopen() sikertelen: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nem sikerült írni a(z) „%s” fájlt: az fwrite() sikertelen: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nem sikerült írni a(z) „%s” fájlt: az fflush() sikertelen: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nem sikerült írni a(z) „%s” fájlt: az fsync() sikertelen: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nem sikerült lezárni a(z) „%s” fájlt: az fclose() sikertelen: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "A létező „%s” fájl nem távolítható el: a g_unlink() sikertelen: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "A(z) „%s” sablon érvénytelen, „%s” nem lehet benne"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "A(z) „%s” sablon nem tartalmaz XXXXXX karaktersorozatot"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Nem sikerült kiolvasni a(z) „%s” szimbolikus linket: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "A szimbolikus linkek használata nem támogatott"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Az átalakító a(z) „%s” elemről „%s” elemre nem nyitható meg: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Nem lehet nyers (raw) olvasást végezni a g_io_channel_read_line_string-ben"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Át nem alakított adatok maradtak az olvasási pufferben"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "A csatorna töredék karakterrel ér véget"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Nem lehet nyers (raw) olvasást végezni a g_io_channel_read_to_end-ben"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nem sikerült megnyitni a(z) „%s” fájlt: az open() sikertelen: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nem sikerült leképezni a(z) „%s” fájlt: Az mmap() sikertelen: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Hiba a(z) %d. sor %d. karakterénél: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Hiba a(z) %d. sorban: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Üres „&;” entitás; az érvényes entitások: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"A(z) „%s” karakter nem érvényes az entitások nevének elején; az entitások "
+"nevét az & karakter kezdi. Ha ez az & karakter nem lehet entitás, akkor "
+"&amp; módon kell írni."
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "A(z) „%s” karakter nem érvényes egy entitás nevén belül"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "A(z) „%s” entitásnév ismeretlen"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Az entitás neve nem pontosvesszővel ért véget; valószínűleg egy &-jelet "
+"használt anélkül, hogy entitást akart volna kezdeni - írja &amp; formában."
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nem sikerült feldolgozni ezt: „%-.*s”. Valószínűleg számjegy lett volna egy "
+"karakterhivatkozáson (mint az &#234) belül - lehet, hogy túl nagy a számjegy"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "A(z) „%-.*s” karakterhivatkozás nem engedélyezett karaktert kódol"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Üres karakterhivatkozás; számjegyet is kell tartalmaznia, például így: &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"A karakterhivatkozás nem pontosvesszővel ért véget; valószínűleg egy &-jelet "
+"használt anélkül, hogy entitást akart volna kezdeni - írja &amp; formában."
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Befejezetlen entitáshivatkozás"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Befejezetlen karakterhivatkozás"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Érvénytelen UTF-8 kódolású szöveg - túl hosszú sorozat"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Érvénytelen UTF-8 kódolású szöveg - ez nem kezdőkarakter"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Érvénytelen UTF-8 kódolású szöveg - nem érvényes „%s”"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "A dokumentumnak egy elemmel kell kezdődnie (például: <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s” nem érvényes karakter a „<” karakter után; elem neve nem kezdődhet vele"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Furcsa karakter („%s”), „>” karakternek kellett volna jönnie, hogy lezárja a"
+"(z) „%s” üres elemcímkét"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Furcsa karakter („%s”) - „=” karakternek kellett volna jönnie a(z) „%s” elem "
+"„%s” attribútumneve után"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Furcsa karakter („%s”) - „>” vagy „/” karakternek kellett volna jönnie a(z) "
+"„%s” elem kezdő címkéje után, esetleg egy attribútumnak; lehet, hogy "
+"érvénytelen karaktert használt az attribútum nevében"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Furcsa karakter („%s”) - egy nyitó idézőjelnek kellene jönnie az "
+"egyenlőségjel után, ha értéket ad a(z) „%s” attribútumnak „%s” elemben"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s” nem érvényes karakter a „</” karakterek után; „%s” karakterrel nem "
+"kezdődhet egy elem neve"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s” nem érvényes karakter a „%s” lezáró elemnév után; az engedélyezett "
+"karakter egyedül a „>”."
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "A(z) „%s” elem le lett lezárva, jelenleg egy elem sincs nyitva"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "A(z) „%s” elem le lett lezárva, de a jelenleg nyitott elem a(z) „%s”"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "A dokumentum üres volt, vagy csak üreshely karaktereket tartalmazott"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"A dokumentum váratlanul véget ért egy nyitott hegyes zárójel („<”) után"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"A dokumentum váratlanul véget ért, pedig még nyitva vannak elemek - „%s” az "
+"utoljára megnyitott elem"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"A dokumentum váratlanul véget ért; a(z) <%s/> elemet lezáró hegyes "
+"zárójelnek kellett volna következnie"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "A dokumentum váratlanul véget ért egy elemnéven belül"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "A dokumentum váratlanul véget ért egy attribútumnéven belül"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "A dokumentum váratlanul véget ért egy elemnyitó címkén belül"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"A dokumentum váratlanul véget ért egy az attribútumnevet követő "
+"egyenlőségjel után; az attribútum értéke nem lett megadva"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "A dokumentum váratlanul véget ért egy attribútumértéken belül"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "A dokumentum váratlanul véget ért a(z) „%s” elem lezáró címkéjén belül"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"A dokumentum váratlanul véget ért egy megjegyzésen vagy feldolgozási "
+"utasításon belül"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "sérült objektum"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "belső hiba vagy sérült objektum"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "elfogyott a memória"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "a visszakövetési korlát elérve"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"a minta a részleges mintaillesztés esetén nem támogatott elemeket tartalmaz"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "belső hiba"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"a visszahivatkozások használata feltételekként nem támogatott a részleges "
+"mintaillesztéshez"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "az ismétlési korlát elérve"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "az üres rész-karaktersorozatok munkaterület-korlátja elérve"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "újsor-jelzők érvénytelen kombinációja"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ismeretlen hiba"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ a minta végén"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c a minta végén"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ismeretlen karakter következik a \\ után"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"itt nem engedélyezettek a kis-és nagybetűket átalakító escape-karakterek "
+"(\\l, \\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "a számok nincsenek sorrendben a {} kvantálóban"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "a szám túl nagy a a {} kvantálóban"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "a karakterosztály befejező ] jele hiányzik"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "érvénytelen escape-sorozat a karakterosztályban"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "a tartomány kívül esik a karakterosztály nagyságán"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nincs mit ismételni"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "ismeretlen karakter a (? után"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "ismeretlen karakter a (?< után"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "ismeretlen karakter a (?P után"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "a POSIX elnevezett osztályok csak osztályon belül támogatottak"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "hiányzó befejező )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") nyitó ( nélkül"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "a (?R vagy (?[+-]számjegyek elemeket )-nek kell követnie"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "hivatkozás nem létező almintára"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "a megjegyzés utáni ) hiányzik"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "a reguláris kifejezés túl nagy"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "a memóriakérés meghiúsult"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "a lookbehind kijelentés nem rögzített hosszúságú"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "hibásan formázott szám vagy név a (?( után"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "a feltételes csoport kettőnél több ágat tartalmaz"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "a (?( után kijelentésnek kellene állnia"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ismeretlen POSIX osztálynév"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "a POSIX leválogató elemek nem támogatottak"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "a \\x{...} sorozaton belüli karakterérték túl nagy"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "érvénytelen feltétel: (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "A \\C nem engedélyezett a lookbehind kijelentésben"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "a rekurzív hívás végtelen ciklushoz vezethet"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "hiányzó befejező az alminta nevében"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "két elnevezett alminta neve azonos"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "rosszul formázott \\P vagy \\p sorozat"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "ismeretlen tulajdonságnév a \\P vagy \\p után"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "az alminta neve túl hosszú (legfeljebb 32 karakter)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "túl sok elnevezett alminta (legfeljebb 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "az oktális érték nagyobb, mint \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "a DEFINE csoport több ágat tartalmaz"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "egy DEFINE csoport ismétlése nem engedélyezett"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inkonzisztens NEWLINE beállítások"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"a \\g után nem egy zárójelezett név vagy opcionálisan zárójelezett nem nulla "
+"szám áll"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "váratlan ismétlés"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kódtúlcsordulás"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "a fordítási munkaterület túlcsordult"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "a korábban ellenőrzött hivatkozott alminta nem található"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Hiba a(z) %s reguláris kifejezés illesztésekor: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "A PRCE programkönyvtár UTF-8 támogatás nélkül lett fordítva"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"A PRCE programkönyvtár az UTF-8 tulajdonságok támogatása nélkül lett fordítva"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"Hiba a(z) „%s” reguláris kifejezés fordításakor a(z) %d. karakternél: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Hiba a(z) %s reguláris kifejezés optimalizálásakor: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "a program hexadecimális számjegyet vagy „}” jelet várt"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "a program hexadecimális számjegyet várt"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "hiányzó „<” jel a szimbolikus hivatkozásban"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "befejezetlen szimbolikus hivatkozás"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "nulla hosszúságú szimbolikus hivatkozás"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "re rendszer számjegyet várt"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "illegális szimbolikus hivatkozás"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "a záró „\\” helye nem megfelelő"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ismeretlen escape sorozat"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Hiba a(z) „%s” helyettesítőszöveg elemzésekor a(z) %lu. karakternél: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Az idézett szöveg nem idézőjellel kezdődik"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Pár nélküli idézőjel a parancssorban vagy más, parancsértelmezőből idézett "
+"szövegben"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "A szöveg egy „\\” karakter után véget ért. (A szöveg: „%s”)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"A szöveg véget ért, mielőtt %c idézőjelpárja meglett volna. (A szöveg: „%s”)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+"A szöveg üres volt (vagy legfeljebb üreshely-karaktereket tartalmazott)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nem sikerült adatokat kiolvasni a gyermekfolyamatból"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Nem sikerült csővezetéket készíteni a gyermekfolyamattal (%s) való "
+"kommunikációhoz"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nem sikerült olvasni a gyermek csővezetékből (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nem sikerült átváltani a(z) „%s” könyvtárra (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nem sikerült végrehajtani a gyermekfolyamatot (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Érvénytelen programnév: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Érvénytelen karaktersorozat a paraméterben a következő helyen: %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Érvénytelen karaktersorozat a környezetben: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Érvénytelen munkakönyvtár: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nem sikerült végrehajtani a segítő programot (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Váratlan hiba, miközben a g_io_channel_win32_poll() adatokat olvasott egy "
+"gyermekfolyamatból"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nem sikerült adatokat olvasni a gyermekfolyamatból (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Váratlan hiba, miközben a select() adatokat próbált olvasni egy "
+"gyermekfolyamatból (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Váratlan hiba a waitpid()-ben (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Nem sikerült folyamatot indítani (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nem sikerült a gyermekfolyamat („%s”) végrehajtása (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nem sikerült a gyermekfolyamat ki- vagy bemenetének átirányítása (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nem sikerült a gyermekfolyamat elindítása (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ismeretlen hiba a gyermekfolyamat („%s”) végrehajtása közben"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Nem sikerült elég adatot kiolvasni a gyermek pid csővezetékből (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "A karakter az UTF-8 tartományon kívülre esik"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Érvénytelen sorozat az átalakítási bemenetben"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "A karakter az UTF-16 tartományon kívülre esik"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Használat:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[KAPCSOLÓ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Súgólehetőségek:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Súgólehetőségek megjelenítése"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Minden súgólehetőség megjelenítése"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Alkalmazás kapcsolói:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Nem dolgozható fel a(z) „%s” egész érték a következőhöz: %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "A(z) „%s” egész érték a tartományon kívülre esik a következőhöz: %s"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nem dolgozható fel a(z) „%s” dupla hosszúságú érték a következőhöz: %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+"A(z) „%s” dupla hosszúságú érték a tartományon kívülre esik a következőhöz: %"
+"s"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Hiba a kapcsoló feldolgozása során: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Hiányzó paraméter a következőhöz: %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Ismeretlen kapcsoló: %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "A keresési könyvtárakban nem található érvényes kulcsfájl"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nem szabályos fájl"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "A fájl üres"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"A kulcsfájl tartalmazza a(z) „%s” sort, amelyik nem egy kulcs-érték pár, "
+"csoport, vagy megjegyzés"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Érvénytelen csoportnév: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "A kulcsfájl nem csoporttal kezdődik"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Érvénytelen kulcsnév: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "A kulcsfájl a nem támogatott „%s” kódolást tartalmazza"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "A kulcsfájlból hiányzik a(z) „%s” csoport"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "A kulcsfájlban nincs „%s” kulcs"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"A kulcsfájl tartalmazza a(z) „%s” kulcsot „%s” értékkel, amelyik azonban nem "
+"UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"A kulcsfájl tartalmazza a(z) „%s” kulcsot, amelynek az értéke nem "
+"értelmezhető."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"A kulcsfájl tartalmazza a(z) „%s” kulcsot a(z) „%s” csoportban, amelynek "
+"értéke nem értelmezhető."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "A kulcsfájl nem tartalmazza a(z) „%s” kulcsot a(z) „%s” csoportban."
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "A kulcsfájl escape sorozattal megadott karaktert tartalmaz a sor végén"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "A kulcsfájl érvénytelen escape sorozatot tartalmaz („%s”)"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "A(z) „%s” érték nem értelmezhető számként."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "A(z) „%s” egész érték a tartományon kívülre esik"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "A(z) „%s” érték nem értelmezhető lebegőpontos számként."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "A(z) „%s” érték nem értelmezhető logikai értékként."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Túl nagy számérték került átadásra ennek: %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Az adatfolyam már le van zárva"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "A művelet megszakítva"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Ismeretlen típus"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s fájltípus"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s típus"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Váratlan korai adatfolyam vége"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Névtelen"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "A desktop fájl nem adta meg az Exec mezőt"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Nem található az alkalmazáshoz szükséges terminál"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Nem hozható létre a(z) %s felhasználói alkalmazáskonfigurációs mappa: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Nem hozható létre a(z) %s felhasználói MIME konfigurációs mappa: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Nem hozható létre a felhasználói desktop fájl (%s)"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s egyéni meghatározása"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "a meghajtó nem valósítja meg a kiadást"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "a meghajtó nem valósítja meg a média lekérdezését"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "A GEmblem kódolás %d. verziója nem kezelhető"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "A GEmblem kódolásban a jelsorok száma (%d) hibásan formált"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "A GEmblemedIcon kódolás %d. verziója nem kezelhető"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "A GEmblemedIcon kódolásban a jelsorok száma (%d) hibásan formált"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Egy GEmblem kellene a GEmblemedIconhoz"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "A művelet nem támogatott"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "A tartalmazó csatolás nem létezik"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Nem lehet a könyvtárra másolni"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "A könyvtár nem másolható könyvtárba"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "A célfájl létezik"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "A könyvtár nem másolható rekurzívan"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "A speciális fájl nem másolható"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Érvénytelen szimbolikus link érték került megadásra"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "A Kuka nem támogatott"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "A fájlnevek nem tartalmazhatnak „%c” karaktert"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "a kötet nem valósítja meg a csatolást"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Nincs alkalmazás regisztrálva a fájl kezeléséhez"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Az enumerátor le van zárva"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "A fájlenumerátor hátralévő művelettel rendelkezik"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "A fájlenumerátor már le van zárva"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fájl"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Az ikont tartalmazó fájl"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "A GFileIcon kódolás %d. verziója nem kezelhető"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "A GFileIcon bemeneti adatai rosszul formáltak"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Az adatfolyam nem támogatja a query_info-t"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Az adatfolyam nem támogatja a pozicionálást"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "A bemeneti adatfolyam csonkítása nem engedélyezett"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Az adatfolyam csonkítása nem engedélyezett"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "A jelsorok száma hibás (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Nincs típus az osztálynévhez: %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "A típus (%s) nem valósítja meg a GIcon felületet"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "A típus (%s) nem tartalmaz osztályokat"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Rosszul formált verziószám: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+"A típus (%s) nem valósítja meg a from_tokens() függvényt a GIcon felületen"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Az ikonkódolás megadott verziója nem kezelhető"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "A bemeneti adatfolyam nem valósítja meg az olvasást"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Az adatfolyam hátralévő művelettel rendelkezik"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Nem található az alapértelmezett helyi könyvtárfigyelő típus"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Érvénytelen fájlnév: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Hiba a fájlrendszer-információk lekérése közben: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Nem nevezhető át a gyökérkönyvtár"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Hiba a fájl átnevezése közben: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "A fájl nem nevezhető át, a fájlnév már létezik"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Érvénytelen fájlnév"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Hiba a fájl megnyitása közben: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "A könyvtár nem nyitható meg"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Hiba a fájl eltávolítása közben: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Hiba fájl kidobása közben: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Nem sikerült létrehozni a(z) %s Kuka könyvtárat: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Nem található a Kuka felső szintű könyvtára"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Nem található vagy nem hozható létre a Kuka könyvtár"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Nem sikerült létrehozni a kukainformációs fájlt: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Nem lehet a Kukába dobni a fájlt: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Hiba a könyvtár létrehozásakor: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Hiba a szimbolikus link létrehozása során: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Hiba a fájl áthelyezésekor: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "A könyvtár nem helyezhető át könyvtárba"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "A mentési fájl létrehozása meghiúsult"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Hiba a célfájl eltávolításakor: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "A csatolások közti áthelyezés nem támogatott"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Az attribútum értéke nem lehet NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Érvénytelen attribútumtípus (a várt karakterlánc helyett)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Érvénytelen kiterjesztett attribútumnév"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Hiba a(z) „%s” kiterjesztett attribútum beállításakor: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Hiba a(z) „%s” fájl elérése közben: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (érvénytelen kódolás)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Hiba a fájlleíró elérésekor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Érvénytelen attribútumtípus (a várt uint32 helyett)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Érvénytelen attribútumtípus (a várt uint64 helyett)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Érvénytelen attribútumtípus (a várt bájtkarakterlánc helyett)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Hiba a jogosultságok beállításakor: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Hiba a tulajdonos beállításakor: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "a szimbolikus link nem lehet NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Hiba a szimbolikus link beállításakor: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Hiba a szimbolikus link beállításakor: a fájl nem szimbolikus link"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "A SELinux környezet nem lehet NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Hiba a SELinux környezet beállításakor: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "A SELinux nem engedélyezett ezen rendszeren"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "A(z) %s attribútum beállítása nem támogatott"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Hiba a fájl olvasásakor: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Hiba a fájlban kereséskor: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Hiba a fájl lezárásakor: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Nem található az alapértelmezett helyi fájlfigyelő típus"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Hiba a fájl írásakor: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Hiba a régi mentési link eltávolításakor: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Hiba a mentés létrehozásakor: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Hiba az ideiglenes fájl átnézésekor: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Hiba a fájl csonkításakor: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Hiba a(z) „%s” fájl megnyitásakor: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "A célfájl egy könyvtár"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "A célfájl nem szabályos fájl"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "A fájlt külső program módosította"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Hiba a régi fájl eltávolítása közben: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "A megadott GSeekType nem támogatott"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Érvénytelen keresési kérés"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "A GMemoryInputStream nem csonkítható"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "A maximális adattömbkorlát elérve"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "A memóriakimeneti adatfolyam nem méretezhető át"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "A memóriakimeneti adatfolyam átméretezése meghiúsult"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "A csatolás nem valósítja meg a leválasztást"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "A csatolás nem valósítja meg a kiadást"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "A csatolás nem valósítja meg az újracsatolást"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "A csatolás nem valósítja meg a tartalomtípus meghatározását"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "A csatolás nem valósítja meg a tartalomtípus szinkron meghatározását"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "A kimeneti adatfolyam nem valósítja meg az írást"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "A forrás adatfolyam már le van zárva"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "név"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Az ikon neve"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nevek"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Az ikonneveket tartalmazó tömb"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "alapértelmezett tartalékok használata"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Használandók-e az alapértelmezett, a név „-” karaktereknél történt "
+"rövidítésével talált tartalékok. Több név megadása esetén az első utániakat "
+"figyelmen kívül hagyja."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "A GThemedIcon kódolás %d. verziója nem kezelhető"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Fájlleíró"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Az olvasandó fájlleíró"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Fájlleíró lezárása"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "A fájlleíró lezárandó-e az adatfolyam lezárásakor"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Hiba a unix olvasásakor: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Hiba a unix lezárásakor: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Fájlrendszer gyökere"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Az írandó fájlleíró"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Hiba a unix írásakor: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "a kötet nem valósítja meg a kiadást"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Nem található az alkalmazás"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Hiba az alkalmazás indításakor: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Az URI címek nem támogatottak"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "a társításmódosítások nem támogatottak win32 rendszeren"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "A társítás létrehozása nem támogatott win32 rendszeren"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ne rejtse el a bejegyzéseket"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "hosszú felsorolási formátum használata"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FÁJL...]"
diff --git a/po/hy.po b/po/hy.po
new file mode 100644
index 0000000..e53af1f
--- /dev/null
+++ b/po/hy.po
@@ -0,0 +1,1797 @@
+# glib.po armenian translation 
+# Copyright (C) 2006 GNOME FOUNDATION
+# This file is distributed under the same license as the glib package.
+# Norayr Chilingaryan <norik@freenet.am>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-03-03 16:24+0000\n"
+"Last-Translator: Norayr Chilingaryan <norik@freenet.am>\n"
+"Language-Team: Armenian <norik@freenet.am>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 16bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Չի հաջողվել կարդալ '%s' սիմվոլիկ հղումը՝ %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr ""
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr ""
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' պանակը բացելու սխալ՝ %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Չի հաջովում հատկացնել %lu բայթ \"%s\" ֆայլը կարդալու համար"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Չի հաջողվում կարդալ '%s' ֆայլից՝ %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Չի հաջողվել բացել '%s' ֆայլը՝ %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Չի հաջողվել բացել '%s' ֆայլը՝ fdopen() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Չի հաջողվել վերանվանել '%s' ֆայլը որպես '%s'՝ g_rename() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Չի հաջողվել ստեղծել ֆայլ '%s'՝ %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Չի հաջողվել բացել '%s' ֆայլը գրելու համար՝ fdopen() խափանվել է՝ %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Չի հաողվել գրել '%s' ֆայլ՝ fwrite() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Չի հաողվել գրել '%s' ֆայլ՝ fwrite() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Չի հաողվել գրել '%s' ֆայլ՝ fwrite() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Չի հաջովել փակել '%s' ֆայլը՝ fclose() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "'%s' ֆայլը չի կարող վերացվել՝ g_unlink() խափանվեց՝ %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr ""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr ""
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Չի հաջողվել կարդալ '%s' սիմվոլիկ հղումը՝ %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Սիմվոլիկ հղումները չեն ապահովվում"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Չի հաջողվել բացել '%s' ֆայլը՝ open() խափանվեց՝ %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Սխալ %d տողի %d տառում՝ %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Սխալ %d տողում՝ %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Սխալ UTF-8 կոդավորված տեքստ"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Սխալ UTF-8 կոդավորված տեքստ"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Սխալ UTF-8 կոդավորված տեքստ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Փաստաթուղթը պետք է սկսվի որևէ էլէմենտով (օրինակ <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr ""
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Սիմվոլիկ հղումները չեն ապահովվում"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Սխալ %d տողի %d տառում՝ %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr ""
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Կիրառում՝"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+#, fuzzy
+msgid "Help Options:"
+msgstr "Ցուցադրել Ձեռնարկի հատկությունները"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Ցուցադրել Ձեռնարկի հատկությունները"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr ""
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Ֆայլը դատարկ է"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr ""
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr ""
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Սիմվոլիկ հղումները չեն ապահովվում"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Սիմվոլիկ հղումները չեն ապահովվում"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr ""
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr ""
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr ""
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Չի հաջողվել ստեղծել ֆայլ '%s'՝ %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Չի հաջողվել ստեղծել ֆայլ '%s'՝ %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Չի հաջողվել ստեղծել ֆայլ '%s'՝ %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "'%s' պանակը բացելու սխալ՝ %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Սխալ %d տողում՝ %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "'%s' պանակը բացելու սխալ՝ %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Սխալ %d տողում՝ %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Սխալ %d տողում՝ %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Սխալ %d տողում՝ %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Սիմվոլիկ հղումները չեն ապահովվում"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr ""
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Սխալ %d տողում՝ %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "'%s' պանակը բացելու սխալ՝ %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Սիմվոլիկ հղումները չեն ապահովվում"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "'%s' ֆայլը կարդալու սխալ՝ %s"
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..579a81b
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,1899 @@
+# Indonesia translation of glib.
+# Copyright (C) 2005 THE glib's COPYRIGHT HOLDER
+# This file is distributed under the same license as the glib package.
+# Mohammad DAMT <mdamt@bisnisweb.com>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-08-30 22:41+0300\n"
+"Last-Translator: Mohammad DAMT <mdamt@bisnisweb.com>\n"
+"Language-Team: Indonesia <sukarelawan@gnome.linux.or.id>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Ada karakter aneh '%s'. Seharusnya ada karakter '=' setelah nama atribut '%"
+"s' pada elemen '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "File kunci yang benar tidak ditemukan pada direktori data"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Gagal saat membaca link simbolik '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konversi dari gugus karakter '%s' ke '%s' tidak dapat dilakukan"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Tidak dapat membuka pengubah dari '%s' ke '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Rangkaian byte dalam input konversi tidak benar"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Rangkaian karakter sebagian pada akhir input"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Tidak dapat mengkonversi, kembalikan '%s' ke gugus kode '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' bukanlah URI absolut dengan menggunakan skema \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI File lokal '%s' tidak boleh ada karakter '#' di dalamnya"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' tidak benar"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Nama host pada URI '%s' tidak benar"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' berisi karakter escape yang salah"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Nama path '%s' bukan path absolut"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nama host salah"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Error saat membuka direktori '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Tidak dapat mengalokasikan %lu byte untuk membaca file '%s'"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Gagal saat membaca file '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Gagal saat membuka file '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Gagal saat mengambil atribut file '%s': Fungsi fstat() mengalami kegagalan: %"
+"s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Gagal saat membuka file '%s': fungsi fdopen() mengalami kegagalan: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Gagal untuk mengubah nama file '%s' menjadi '%s': g_rename() gagal: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Gagal saat membuat file '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Gagal untuk membuka file '%s' untuk menulis: fdopen() gagal: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Gagal untuk menulis file '%s': fwrite() gagal: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Gagal untuk menulis file '%s': fwrite() gagal: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Gagal untuk menulis file '%s': fwrite() gagal: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Gagal untuk menutup file '%s': fclose() gagal: '%s'"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "File '%s' tidak dapat dibuang: g_unlink() gagal: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Template '%s' salah, seharusnya tidak boleh berisi '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Template '%s' tidak boleh diakhiri dengan XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Gagal saat membaca link simbolik '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Link simbolik tidak didukung oleh sistem"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Tidak dapat membuka konverter dari '%s' menjadi '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Tidak dapat melakukan proses baca raw pada fungsi "
+"g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Ada data tersisa yang belum dikonversi pada buffer read"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Chanel terputus pada karakter sebagian"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Tidak dapat melakukan proses baca raw pada fungsi g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Gagal saat membuka file '%s': fungsi open() mengalami kegagalan: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+"Gagal saat memetakan berkas '%s': fungsi mmap() mengalami kegagalan: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Error pada baris %d huruf ke %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Error pada baris ke %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Ada entitas '&;' yang kosong; Entitas yang benar antara lain adalah: &amp; "
+"&quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Karakter '%s' tidak benar apabila ada pada awal nama entitas; Karakter & "
+"yang boleh ada pada awal entitas; Bila ampersand ini dianggap bukan sebuah "
+"entitas, Beri kode escape dan tulis sebagai &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Karakter '%s' tidak boleh digunakan pada nama entitas"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nama entitas '%s' tidak diketahui"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entitas tidak diakhiri dengan titik koma. Mungkin Anda menggunakan karakter "
+"ampersand tanpa bermaksud menjadikannya sebagai entitas - silakan pakai "
+"&amp; saja"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Gagal saat mengurai '%-.*s'. yang seharusnya sebuah digit dalam referensi "
+"karakter (misalnya &#234;) - mungkin digitnya terlalu besar"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+"Referensi karakter '%-.*s' tidak mengencodekan karakter yang diperbolehkan"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Refensi karakter kosong. Seharusnya berisi digit, mislanya &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Referensi karakter tidak diakhiri dengan titik koma; Mungkin Anda sedang "
+"menggunakan karakter ampersand tanpa bermaksud menjadikannya sebagai "
+"entitas. Silakan gunakan &amp; saja"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referensi entitas yang tidak sempurna"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Refersi karakter yang tidak sempurna"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Teks UTF-8 tidak benar"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Teks UTF-8 tidak benar"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Teks UTF-8 tidak benar"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumen harus dimulai dengan elemen (misalnya <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' bukanlah karakter yang benar bila diikuti dengan karakter '<'. Ini "
+"tidak boleh menjadi nama elemen"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Ada karakter aneh '%s'. Seharusnya ada '>' untuk mengakhiri tag awal pada "
+"elemen '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Ada karakter aneh '%s'. Seharusnya ada karakter '=' setelah nama atribut '%"
+"s' pada elemen '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Ada karakter aneh '%s'. Seharusnya ada '>' atau '/' untuk mengakhiri tag "
+"padaelemen '%s', atau bisa juga ada atribut lain. Mungkin Anda menggunakan "
+"karakter yang tidak diperbolehkan pada nama atribut."
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Ada karakter aneh '%s'. Seharusnya ada tanda kutip buka setelah tanda sama "
+"dengan saat memberikan nilai atribut '%s' pada elemen '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' bukan karakter yang benar bila diikuti dengan karakter '</'. Karena itu "
+"'%s' tidak boleh dijadikan awal nama elemen"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' bukan karakter yang benar bila diikuti elemen penutup '%s'. Karakter "
+"yang diperbolehkan adalah '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elemen '%s' sudah ditutup, tidak ada elemen yang masih terbuka"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Elemen '%s' sudah ditutup, tapi elemen yang masih terbuka adalah '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumen kosong atau berisi whitespace saja"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Dokumen terpotong tidak sempurna sesaat setelah membuka kurung siku '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumen terpotong tidak sempurna dengan elemen yang masih terbuka - '%s' "
+"adalah elemen terakhir yang dibuka"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumen terpotong tidak sempurna, seharusnya ada kurung siku penutup untuk "
+"mengakhiri tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumen terpotong tidak sempurna pada dalam nama elemen"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumen terpotong tidak sempurna di dalam nama atribut"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumen terpotong tidak sempurna di dalam tag pembukaan elemen."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumen terpotong tidak sempurna setelah tanda sama dengan mengikuti nama "
+"atribut. Tidak ada nilai atribut yang diperoleh"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumen tidak sempura saat ada dalam nilai atribut"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokumen terpotong tidak sempurna di dalam tag penutup elemen '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumen terpotong tidak sempurna di dalam keterangan atau instruksi "
+"pemrosesan"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Chanel terputus pada karakter sebagian"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Rangkaian byte dalam input konversi tidak benar"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Refersi karakter yang tidak sempurna"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Refersi karakter yang tidak sempurna"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Refersi karakter yang tidak sempurna"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Link simbolik tidak didukung oleh sistem"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Error pada baris %d huruf ke %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Referensi entitas yang tidak sempurna"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Teks yang dikutip tidak dimulai dengan tanda kutip"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Tanda kutip kurang satu pada perintah atau pada teks yang dikutip dari shell "
+"lain"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"Teks berakhir saat setelah karakter '\\' dijumpai. (Teksnya adalah '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Teks berakhir sebelum tanda kutip pasangannya ditemukan untuk %c.  (Tesknya "
+"adalah '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksnya kosong (atau hanya berisi whitespace)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Gagal untuk membaca data dari proses child"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Gagal saat membuat pipe untuk sarana  komunikasi dengan proses child (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Gagal saat membaca dari pipe child (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Gagal saat mengganti direktori ke '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Gagal saat menjalankan proses child (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nama program salah: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "String tidak benar pada vektor argumen pada %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "String tidak benar pada variabel lingkungan: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Direktori aktif salah: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Gagal saat menjalankan program bantuan (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Ada error pada g_io_channel_win32_poll() saat membaca dari proses child"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Gagal saat membaca data dari proses child (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Ada error pada fungsi select() saat membaca data dari proses child (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Ada error pada fungsi waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Gagal saat fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Gagal saat menjalankan proses child '%s' (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Gagal mengarahkan output atau input pada proses child (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Gagal saat fork proses child (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ada error yang tidak diketahui saat menjalankan proses child '%s'"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Gagal saat membaca data yang dibutuhkan dai pipe pid child (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Karakter di luar jangkauan UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Rangkaian input konversi salah"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Karakter di luar jangkauan UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Gunakan:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[PILIHAN...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Pilihan Bantuan:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Tampilkan pilihan bantuan"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Tampilkan seluruh pilihan bantuan"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Pilihan Aplikasi:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Tidak dapat menguraikan nilai integer '%s' untuk %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Nilai integer '%s' untuk %s di luar jangkauan"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Tidak dapat menguraikan nilai integer '%s' untuk %s"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Nilai integer '%s' untuk %s di luar jangkauan"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argumen untuk %s tidak lengkap"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Pilihan tidak diketahui %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "File kunci yang benar tidak ditemukan pada direktori data"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Bukan sebuah file biasa"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Filenya kosong"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"File kunci berisi baris '%s' yang bukan pasangan nilai kunci, kelompok atau "
+"komentar"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Nama program salah: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "File kunci tidak mulai dengan sebuah kelompok"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Nama program salah: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "File kunci mengadung encoding yang tidak didukung '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "File kunci tidak memiliki kelompok '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "File kunci tidak memiliki kunci '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "File kunci mengandung kunci '%s' dengan nilai '%s' yang bukan UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"File kunci mengandung kunci '%s' yang memiliki nilai yang tidak dapat "
+"diterjemahkan."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"File kunci mengandung kunci '%s' dalam kelompok '%s' yang memiliki nilai "
+"yang tidak dapat diterjemahkan."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "File kunci tidak memiliki kunci '%s' pada kelompok '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "File kunci mengandung karakter escape pada akhir baris"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "File kunci berisi '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Nilai '%s' tidak dapat diterjemahkan sebagai sebuah nomor."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Nilai integer '%s' di luar jangkauan"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Nilai '%s' tidak dapat diterjemahkan sebagai sebuah nomor."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Nilai '%s' tidak dapat diterjemahkan sebagai suatu nilai boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Pilihan tidak diketahui %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Link simbolik tidak didukung oleh sistem"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Link simbolik tidak didukung oleh sistem"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Nama host pada URI '%s' tidak benar"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Nama program salah: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Nama host salah"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Gagal saat membuat file '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Gagal saat membuat file '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Gagal saat membuat file '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Error saat membuka direktori '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokumen terpotong tidak sempurna di dalam nama atribut"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Error saat membuka direktori '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Error pada baris ke %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Link simbolik tidak didukung oleh sistem"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Bukan sebuah file biasa"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Nama program salah: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Nama host pada URI '%s' tidak benar"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Error saat membaca file '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Error pada baris ke %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Error saat melakukan konversi: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Link simbolik tidak didukung oleh sistem"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[PILIHAN...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Error saat melakukan konversi: %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Gagal untuk merubah moda berkas: fclose() gagal: '%s'"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Gagal untuk merubah moda berkas: waitpid() gagal: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Gagal untuk  merubah moda berkas: chmod() gagal: '%s'"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "Moda berkas tidak dapat diubah: Proses anak dimatikan melalui sinyal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr ""
+#~ "Moda berkas tidak dapat diubah: Proses anak dimatikan secara tidak normal"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Konversi karakter dari '%s' menjadi '%s' belum dapat dilakukan"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Ukuran pesan salah"
+
+#~ msgid "Socket error"
+#~ msgstr "Error socket"
diff --git a/po/is.po b/po/is.po
new file mode 100644
index 0000000..07cac82
--- /dev/null
+++ b/po/is.po
@@ -0,0 +1,1848 @@
+# Icelandic translation of glib
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Richard Allen <ra@ra.is>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2003-08-18 18:05+0000\n"
+"Last-Translator: Richard Allen <ra@ra.is>\n"
+"Language-Team: is <is@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Undarlegt tákn '%s', átti von á '=' eftir heiti eiginleika '%s' af mengi '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "gat ekki lesið tákntengið '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Umbreyting úr stafasettinu '%s' í '%s' er ekki stutt"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Gat ekki opnað umbreyti úr '%s' í '%s': %s"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ógild bætaruna í ílagi umbreytingar"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Ókláruð stafaruna í enda ílags"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Gat ekki umbreytt '%s' í stafatöflu '%s'"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' er ekki fullt URI sem notar 'file' skemuna"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Skráar-URI '%s' má ekki innihalda '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' er ógilt"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Vélarheitið í URI '%s' er ógilt"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' inniheldur ógild sértákn"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Slóðin '%s' er ekki full slóð"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ógilt vélarheiti"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Villa við að opna möppuna '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Gat ekki frátekið %lu bæti til að lesa skrána \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Gat ekki lesið úr skránni '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Gat ekki opnað skrána '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "gat ekki lesið eiginleika skráarinnar '%s': fstat() brást: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "gat ekki búið til skrána '%s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Sniðmátið '%s' er ógilt og ætti ekki að innihalda '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Sniðmátið '%s' endar ekki á XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "gat ekki lesið tákntengið '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Tákntengi eru ekki studd"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Gat ekki opnað umbreyti úr `%s' í `%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Gat ekki lesið í g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Það eru eftir óumbreytt gögn í lesminninu"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Rásin endar á hluta úr tákni"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Gat ekki lesið í g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Villa á línu %d tákn %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Villa á línu %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Tómt viðfang '&;' fannst; gild viðföng eru: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Táknið '%s' er ógilt í upphafi heiti viðfanga; & táknið byrjar viðfang; ef "
+"Þetta og-merki á ekki að vera byrjun viðfangs ættir þú að rita það sem &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Táknið '%s' er ekki gilt í heitum viðfanga"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Viðfangið '%s' er óþekkt"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Viðfangið endar ekki á semikommu; líklega notaðir þú og-merkið án þess að "
+"ætla að byrja viðfang. Ritaðu það sem &amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Gat ekki þáttað '%s' sem ætti að vera tölustafur innan í tilvísun í tákn "
+"(til dæmis &#234;). Ef til vill er talan of stór"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Tákntilvísunin '%s' vísar ekki í leyfilegt tákn"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tóm tákntilvísun; hún ætti að innihalda tölur eins og &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Viðfangið endar ekki á semikommu; líklega notaðir þú og-merkið án þess að "
+"ætla að byrja viðfang. Ritaðu það sem &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Hálfkláruð viðfangatilvísun"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Hálfkláruð tákntilvísun"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ógildur UTF-8 þýddur texti"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ógildur UTF-8 þýddur texti"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ógildur UTF-8 þýddur texti"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Skjalið verður að byrja á viðfangi (t.d. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' er ekki gilt tákn strax á eftir '<' tákninu; það má ekki byrja á heiti "
+"viðfangs"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "Undarlegt tákn '%s', átti von á '>' tákninu til að enda viðfangið '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Undarlegt tákn '%s', átti von á '=' eftir heiti eiginleika '%s' af mengi '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Undarlegt tákn '%s', átti von á '>' eða '/' tákni rtil þess að enda upphafs "
+"viðfangi '%s', eða eiginleika; Þú notaðir ef til vill ógilt tákn í heiti "
+"eiginleika"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Undarlegt tákn '%s', átti von á tilvísunarmerki eftir samasem merkinu þegar "
+"gildi er gefið með eiginleikanum '%s' af menginu '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' er ekki gilt tákn strax á eftir '</'; '%s' má ekki vera fyrsta tákn í "
+"heiti mengis"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' er ekki gilt tákn strax á eftir lokun mengis '%s'. Leyfilegt tákn er '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Mengið '%s' var lokað og engin önnur mengi eru opin"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Mengið '%s' var lokað en mengið sem nú er opið er '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Skjalið var tómt eða innihélt einungis orðabil"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Skjalið endar óvænt rétt eftir opið minna en merki '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Skjalið endar óvænt með mengi sem enn eru opin. '%s' var mengið sem síðast "
+"var opnað"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Skjalið endar óvænt. Átti von á að sjá stærraen merki sem lokar taginu <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Skjalið endar óvænt inn í heiti mengis"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Skjalið endar óvænt inn í heiti eiginleika"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Skjalið endar óvænt inn í tagi sem opnar mengi."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Skjalið endar óvænt eftir samasem merkið sem fylgir heiti eiginleika og það "
+"er ekkert gildi"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Skjalið endar óvænt inn í gildi eiginleika"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Skjalið endar óvænt inni í lokunartagi fyrir mengið '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Skjalið endar óvænt inni í athugasemd eða í miðri skipun"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Rásin endar á hluta úr tákni"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Ógild bætaruna í ílagi umbreytingar"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Hálfkláruð tákntilvísun"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Hálfkláruð tákntilvísun"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Hálfkláruð tákntilvísun"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Tákntengi eru ekki studd"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Villa á línu %d tákn %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Hálfkláruð viðfangatilvísun"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Tilvísunin byrjar ekki á spurningarmerki"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Tilvísunarmerki stemma ekki í skipanalínunni eða öðrum texta"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Textinn endaði eftir '\\' tákn. (Textinn var '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Textinn endaði áður en samstaða við %c fannst. (Textinn var '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Textinn var tómur (eða innihélt eingöngu orðabil)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Gat ekki lesið gögn frá undirferli"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Gat ekki búið til pípu til samskipta við undirferli (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Gat ekki lesið úr undirferlispípu (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Gat ekki farið í möppuna '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Gat ekki keyrt undirferli (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Ógilt vélarheiti"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ógild runa í ílagi umbreytingar"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Villa við að opna möppuna '%s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Gat ekki keyrt hjálparforrit"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "Óvænt villa í g_io_channel_win32_poll() við lestur úr undirferli"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Gat ekki lesið gögn frá undirferli (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Óvæn villa í select() við lestur gagna frá undirferli (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Óvæn villa í waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Gat ekki ræst (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Gat ekki ræst undirferli \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Gat ekki sent frálag eða ílag underferlis annað (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Gat ekki ræst undirferli (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Óþekkt villa við keyrslu undirferlis \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Gat ekki lesið nægjanleg gögn úr pípunni til undirferlisins (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Táknið er utan UTF-8 sviðsins"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ógild runa í ílagi umbreytingar"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Táknið er utan UTF-16 sviðsins"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Ógilt vélarheiti"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Ógilt vélarheiti"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "URI '%s' inniheldur ógild sértákn"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Tákntengi eru ekki studd"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Tákntengi eru ekki studd"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Vélarheitið í URI '%s' er ógilt"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Ógilt vélarheiti"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Ógilt vélarheiti"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "gat ekki búið til skrána '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "gat ekki búið til skrána '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "gat ekki búið til skrána '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Villa við að opna möppuna '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Skjalið endar óvænt inn í heiti eiginleika"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Villa við að opna möppuna '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Villa á línu %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Tákntengi eru ekki studd"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Ógilt vélarheiti"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Vélarheitið í URI '%s' er ógilt"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Villa við lestur skráarinnar '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Villa á línu %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Villa við umbreytingu: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Tákntengi eru ekki studd"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Villa við umbreytingu: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Gat ekki frátekið %lu bæti til að lesa skrána \"%s\""
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Gat ekki opnað skrána '%s': fdopen() brást: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Umbreyting úr stafatöflunni `%s' í `%s' er ekki stutt"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..5970a5e
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,1968 @@
+# Italian translation for glib.
+# This file is distributed under the same license as glib package
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Christopher R. Gabriel <cgabriel@pluto.linux.it> 2002.
+# Luca Ferretti <elle.uca@libero.it> 2004, 2005, 2006, 2007, 2008, 2009.
+#
+# Nota sull'uso delle virgolette:
+#  '' --> usate quando l'elemento incluso è un solo carattere
+#  "" --> usate nei messaggi di errore che appaiono solo su terminale
+#  «» --> usante nei messaggi di errore che appaiono nei dialoghi
+# (lo so che è un casino, ma per ora lascio così)
+#
+# Stream rimane stream (consultare le API reference di GIO)
+# Seek è tradotto posizionare
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.19.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-16 22:09+0100\n"
+"Last-Translator: Luca Ferretti <elle.uca@libero.it>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Attributo \"%s\" inatteso per l'elemento \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attributo \"%s\" dell'elemento \"%s\" non trovato"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Tag \"%s\" inatteso; atteso il tag \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Tag \"%s\" inatteso all'interno di \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Non è stato trovato alcun file di segnalibri valido nelle directory dei dati"
+
+# usate le «» perché forse questa compare nella UI
+#
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Esiste già un segnalibro per l'URI «%s»"
+
+# vedi sopra per «»
+#
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Non è stato trovato alcun segnalibro per l'URI «%s»"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Non risulta definito alcun tipo MIME nel segnalibro per l'URI \"%s\""
+
+# o private è il nome della flag (che quindi diventa opzione)?
+# cercare nel codice... -Luca
+#
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+"Non è stata definita alcuna flag privata nel segnalibro per l'URI \"%s\""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Non risulta impostato alcun gruppo nel segnalibro per l'URI \"%s\""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Nessuna applicazione di nome \"%s\" ha registrato un segnalibro per \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Espansione della riga exec \"%s\" con l'URI \"%s\" non riuscita"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+"La conversione del set di caratteri da \"%s\" a \"%s\" non è supportata"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Impossibile aprire il convertitore da \"%s\" a \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Sequenza di byte non valida nell'ingresso per la conversione"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Errore durante la conversione: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Sequenza di caratteri parziale al termine dei dati in ingresso"
+
+# il primo %s è una 'fallback string' come recita il commento nel codice
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Impossibile convertire \"%s\" nel set di caratteri \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "L'URI \"%s\" non è un URI assoluto che utilizza lo schema \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "L'URI per il file locale \"%s\" non può includere un '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "L'URI \"%s\" non è valido"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Il nome dell'host nell'URI \"%s\" non è valido"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "L'URI \"%s\" contiene sequenze di escape non valide"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Il nome di percorso \"%s\" non è un percorso assoluto"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nome host non valido"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Errore nell'aprire la directory \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Impossibile allocare %lu byte per leggere il file \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Errore nel leggere il file \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Il file \"%s\" è troppo grande"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Lettura dal file \"%s\" non riuscita: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Apertura del file \"%s\" non riuscita: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Lettura degli attributi del file \"%s\" non riuscita: fstat() non riuscita: %"
+"s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Apertura del file \"%s\" non riuscita: fdopen() non riuscita: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Cambio di nome del file \"%s\" in \"%s\" non riuscito: g_rename() non "
+"riuscita: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Creazione del file \"%s\" non riuscita: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Apertura del file \"%s\" in scrittura non riuscita: fdopen() non riuscita: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Scrittura del file \"%s\" non riuscita: fwrite() non riuscita: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Scrittura del file \"%s\" non riuscita: fflush() non riuscita: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Scrittura del file \"%s\" non riuscita: fsync() non riuscita: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Chiusura del file \"%s\" non riuscita: fclose() non riuscita: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Il file \"%s\" non può essere rimosso pur esistendo: g_unlink() non "
+"riuscita: %s"
+
+# Il secondo %s è qualcosa tipo 
+#
+#    char c[2];
+#    c[1] = dir_separator;
+#    c[2] = '\0';
+#
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Il modello \"%s\" non è valido, non dovrebbe contenere un '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Il modello \"%s\" non contiene XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f kB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Lettura del collegamento simbolico \"%s\" non riuscita: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Collegamenti simbolici non supportati"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Impossibile aprire il convertitore da \"%s\" a \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Impossibile leggere i dati grezzi in g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Sono rimasti dei dati non convertiti nel buffer di lettura"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Il canale termina in un carattere parziale"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Impossibile eseguire una lettura grezza in g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Apertura del file \"%s\" non riuscita: open() non riuscita: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Mappatura del file \"%s\" non riuscita: mmap() non riuscita: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Errore alla riga %d carattere %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Errore alla riga %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Rilevata entità vuota '&;' (sono entità valide &amp; &quot; &lt; &gt; &apos;)"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Il carattere '%s' non è valido all'inizio di un nome di entità: il carattere "
+"'&' dà inizio a un'entità; se questo simbolo \"e commerciale\" non vuole "
+"essere l'inizio di una entità, ricorrere a &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Il carattere '%s' non è valido all'interno di un nome di entità"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Il nome di entità '%s' è sconosciuto"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"L'entità non termina con un punto e virgola; probabilmente è stata "
+"utilizzata una \"e commerciale\" senza l'intento di iniziare una entità. In "
+"tal caso ricorrere a &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Analisi di '%-.*s' non riuscita: dovrebbe presentare un numero all'interno "
+"di un riferimento a carattere (es. &#234;) - probabilmente il numero è "
+"troppo grande"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Il riferimento a carattere '%-.*s' non codifica un carattere permesso"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Riferimento a carattere vuoto; dovrebbe includere un numero, come &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Il riferimento a carattere non termina con un punto e virgola; probabilmente "
+"si è utilizzato un carattere \"e commerciale\" senza l'intenzione di "
+"iniziare una nuova entità. In tal caso ricorrere a &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Riferimento a entità non terminato"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Riferimento a carattere non terminato"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Testo in codifica UTF-8 non valido - sequenza troppo lunga"
+
+# anche gradevole "di apertura" come da discussione su TP
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Testo in codifica UTF-8 non valido - non è un carattere di avvio"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Testo in codifica UTF-8 non valido - \"%s\" non valido"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Il documento deve iniziare con un elemento (es. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' non è un carattere valido dopo un carattere '<'; non può dare inizio a "
+"un nome di elemento"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Carattere '%s' spaiato, era atteso un carattere '>' per terminare il tag "
+"dell'elemento-vuoto \"%s\""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Carattere '%s' spaiato, era atteso un carattere '=' dopo il nome "
+"dell'attributo \"%s\" dell'elemento \"%s\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Carattere '%s' spaiato, era atteso un carattere '>' oppure '/' per terminare "
+"il tag di partenza dell'elemento \"%s\", oppure opzionalmente un attributo. "
+"Probabilmente è stato usato un carattere non valido in un nome di attributo"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Carattere '%s' spaiato, era atteso un simbolo di quoting aperto dopo il "
+"segno di uguale per attribuire un valore all'attributo \"%s\" dell'elemento "
+"\"%s\""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' non è un carattere valido dopo i caratteri '</'; '%s' non può dare "
+"inizio a un nome di elemento"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' non è un carattere valido dopo la chiusura del nome dell'elemento \"%s"
+"\"; il carattere permesso è '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+"È stato chiuso l'elemento \"%s\", nessun elemento risulta correntemente "
+"aperto"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"È stato chiuso l'elemento \"%s\", ma l'elemento correntemente aperto è \"%s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Il documento era vuoto oppure conteneva unicamente spazi"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Il documento è terminato in modo inatteso subito dopo una parentesi angolare "
+"d'apertura '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Il documento è terminato in modo inatteso con elementi ancora aperti - \"%s"
+"\" era l'ultimo elemento aperto"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Il documento è terminato in modo inatteso, mancando la parentesi angolare di "
+"chiusura per il tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+"Il documento è terminato in modo inatteso all'interno di un nome di elemento"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+"Il documento è terminato in modo inatteso all'interno di un nome di attributo"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Il documento è terminato in modo inatteso all'interno di un tag di apertura "
+"elemento."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Il documento è terminato in modo inatteso dopo il segno di uguale che segue "
+"un nome di attributo; nessun valore per l'attributo"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Il documento è terminato in modo inatteso all'interno di un valore di "
+"attributo"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Il documento è terminato in modo inatteso all'interno del tag di chiusura "
+"per l'elemento \"%s\""
+
+# di elaborazione? in elaborazione ?
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Il documento è terminato in modo inatteso all'interno di un commento o "
+"istruzione di elaborazione"
+
+# corrotto sembrava brutto, cfr revisione su TP
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "oggetto non attendibile"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "errore interno oppure oggetto non attendibile"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "memoria esaurita"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "raggiunto limite di backtracking"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"il modello contiene elementi non supportati per la corrispondenza parziale"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "errore interno"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"per la corrispondenza parziale non sono supportati i riferimenti "
+"all'indietro come condizioni"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "raggiunto limite di ricorsione"
+
+# oppure lasciare workspace non tradotto?
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "raggiunto limite dello spazio di lavoro per sotto-stringhe vuote"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinazione non valida di flag di fine riga"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "errore sconosciuto"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ alla fine del modello"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c alla fine del modello"
+
+# che differenza c'è tra "follows" e gli "after" qualche messaggio dopo?
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "carattere non riconosciuto dopo \\"
+
+# case --> in tipografia si tradurrebbe cassa, in particolare
+#          lower -, upper -, cassa per lettere minuscole, maiuscole
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"gli escape per cambio maiuscolo-minuscolo (\\l, \\L, \\u, \\U) non sono "
+"consentiti qui"
+
+# quantificatore: esiste come termine per log. mat. e gramm.
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numeri fuori ordine nel quantificatore {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "numero troppo grande nel quantificatore {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "] terminante mancante per classe di caratteri"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "sequenza di escape non valida nella classe di caratteri"
+
+# to put out of order --> guastare, mettere in disordine
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "intervallo disordinato nella classe di caratteri"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nulla da ripetere"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "carattere non riconosciuto dopo (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "carattere non riconosciuto dopo (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "carattere non riconosciuto dopo (?P"
+
+# classi nominate??
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+"le classi POSIX nominate sono supportate solo all'interno di una classe"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ") terminante mancante"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") senza ( di apertura"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R o (?[+-]cifre deve essere seguito da )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "riferimento a sotto-modello non esistente"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ") mancante dopo il commento"
+
+# larga? o grande??
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "espressione regolare troppo larga"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "recupero della memoria non riuscito"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "l'asserzione lookbehind non ha lunghezza fissata"
+
+# malformato si riferisce a entrambi????
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "numero o nome malformato dopo (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "il gruppo condizionale contiene più di due diramazioni"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "asserzione attesa dopo (?"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nome di classe POSIX sconosciuto"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "gli elementi di collazione non sono supportati"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "il valore del carattere nella sequenza \\x{...} è troppo grande"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condizione (?(0) non valida"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C non consentito in asserzione lookbehind"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "la chiamata ricorsiva potrebbe entrare in ciclo infinito"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "terminatore mancante nel nome di sotto-modello"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "due sotto-modelli nominati presentano lo stesso nome"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "sequenza \\P o \\p malformata"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nome di proprietà sconosciuto dopo \\P o \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "il nome di sotto-modello è troppo lungo (massimo 32 caratteri)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "troppi sotto-modelli nominati (massimo 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "il valore ottale è maggiore di \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "il gruppo DEFINE contiene più di una diramazione"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "la ripetizione di un gruppo DEFINE non è consentita"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opzioni NEWLINE incoerenti"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g non è seguito da un nome tra parentesi graffe oppure è un numero diverso "
+"da zero opzionalmente tra parentesi graffe"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "ripetizione inattesa"
+
+# secondo garzantilinguistica.it eccedenza (di dati) è la
+# traduzione di overflow secondo IBM. La traduzione generica
+# per ambito infomatico è superamento di capacità
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "eccedenza di codice"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "sconfinamento compilando l'area di lavoro"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "sotto-modello referenziato precedentemente controllato non trovato"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+"Errore durante la ricerca di corrispondenza per l'espressione regolare %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "La libreria PCRE è compilata senza supporto per UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "La libreria PCRE è compilata senza supporto per le proprietà UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"Errore durante la compilazione dell'espressione regolare %s al carattere %d: "
+"%s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Errore durante l'ottimizzazione dell'espressione regolare %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "attesa cifra esadecimale o '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "attesa cifra esadecimale"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "'<' mancante nel riferimento simbolico"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "riferimento simbolico non terminato"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "riferimento simbolico di lunghezza zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "attesa cifra"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "riferimento simbolico non lecito"
+
+# significa che il testo finisce con una barra rovesciata, è il
+# carattere successivo che manca
+#
+# Quindi "isolato" o "staccato" o al limite "accindetale", "casuale"
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "'\\' finale isolato"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "sequenza di escape sconosciuta"
+
+# da sostituire crea confusione...
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Errore durante l'analisi del testo di sostituzione \"%s\" al carattere %lu: %"
+"s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Il testo citato non inizia con un carattere di quoting"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Carattere di quoting non accoppiato nella riga di comando o nel testo con "
+"quoting di shell"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Il testo è finito subito dopo un carattere '\\' (il testo era \"%s\")."
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Il testo è finito prima di trovare il carattere di quoting corrispondente "
+"per %c (il testo era \"%s\")."
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Il testo era vuoto (oppure conteneva unicamente spazi bianchi)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Lettura di dati dal processo figlio non riuscita"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Creazione della pipe per comunicare con il processo figlio non riuscita (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Lettura dalla pipe figlia non riuscita (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Cambio della directory in \"%s\" non riuscito (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Esecuzione del processo figlio non riuscita (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nome programma non valido: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Stringa non valida nel vettore di argomenti a %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Stringa non valida nell'ambiente: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Directory di lavoro non valida: %s"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Esecuzione del programma helper non riuscita (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Errore inatteso in g_io_channel_win32_poll() nel leggere i dati da un "
+"processo figlio"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Lettura dei dati dal processo figlio non riuscita (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Errore inatteso in select() nel leggere i dati da un processo figlio (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Errore inatteso in waitpid() (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Esecuzione di fork non riuscita (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Esecuzione del processo figlio \"%s\" non riuscita (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Ridirezione dell'output o input del processo figlio non riuscita (%s)"
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Esecuzione del fork per processo figlio non riuscita (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Errore sconosciuto nell'eseguire il processo figlio \"%s\""
+
+# (%s) è in fondo perché risolto in g_strerror (gint)
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Lettura di una quantità di dati sufficiente dalla pipe del processo figlio "
+"non riuscita (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Carattere fuori dall'intervallo per UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Sequenza non valida in ingresso per la conversione"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Carattere fuori dall'intervallo per UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Uso:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPZIONE...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opzioni di aiuto:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Mostra le opzioni di aiuto"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Mostra tutte le opzioni di aiuto"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opzioni dell'applicazione:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Impossibile analizzare il valore intero \"%s\" per %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Il valore intero \"%s\" per %s è fuori dall'intervallo"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Impossibile analizzare il valore double \"%s\" per %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Il valore double \"%s\" per %s è fuori dall'intervallo"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Errore nell'analizzare l'opzione %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argomento mancante per %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opzione %s sconosciuta"
+
+# key files sono, per glib, file di impostazioni in stile Windows INI
+#
+# Ad esempio i file .themes per i temi del desktop e delle icone.
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Impossibile trovare un file chiavi valido nelle directory di ricerca"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Non è un file normale"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Il file è vuoto"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Il file chiavi contiene la riga «%s» che non è una coppia chiave-valore, un "
+"gruppo o un commento valido"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nome gruppo non valido: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Il file chiavi non inizia con un gruppo"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nome chiave non valido: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Il file chiavi contiene la codifica non supportata \"%s\""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Il file chiavi non presenta il gruppo \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Il file chiavi non presenta la chiave \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Il file chiavi contiene la chiave \"%s\" con il valore \"%s\" che non è UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Il file chiavi contiene la chiave \"%s\" il cui valore non può essere "
+"interpretato."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Il file chiavi contiene la chiave \"%s\" nel gruppo \"%s\" il cui valore non "
+"può essere interpretato."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Il file chiavi non presenta alcuna chiave \"%s\" nel gruppo \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Il file chiavi contiene un carattere di escape alla fine della riga"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Il file chiavi contiene la sequenza di escape non valida \"%s\""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Impossibile interpretare il valore \"%s\" come un numero."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Il valore intero \"%s\" è fuori dall'intervallo"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Impossibile interpretare il valore \"%s\" come un numero float."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Impossibile interpretare il valore \"%s\" come un booleano."
+
+# count (gssize) è un parametro delle funzione
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Valore count troppo grande passato a %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Lo stream è già chiuso"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "L'operazione è stata annullata"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipo sconosciuto"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "Tipo di file %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "Tipo %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "End-of-stream prematuro inatteso"
+
+# NdT: nome di applicazione (quando manca)
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Senza nome"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Il file .desktop non specifica il campo Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Impossibile trovare il terminale richiesto per l'applicazione"
+
+# NdT il primo %s è il percorso alla cartella .local/share/application
+# messo tra parentesi per scelta stilistica...
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Impossibile creare la cartella utente di configurazione applicazioni (%s): %s"
+
+# NdT il primo %s è il percorso alla cartella .local/share/application
+# messo tra parentesi per scelta stilistica...
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Impossibile creare la cartella utente di configurazione MIME (%s): %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Impossibile creare il file .desktop utente %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definizione personalizzata per %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "l'unità non implementa l'espulsione"
+
+# sondaggio ????
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "l'unità non supporta il sondaggio di supporti"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Impossibile gestire la versione %d della codifica GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Numero di token malformato (%d) nella codifica GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Impossibile gestire la versione %d della codifica GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Numero di token malformato (%d) nella codifica GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Atteso un GEmblem per GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operazione non supportata"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "L'oggetto mount contenuto non esiste"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Impossibile copiare sopra la directory"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Impossibile copiare la directory sopra la directory"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Il file destinazione esiste"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Impossibile copiare la directory ricorsivamente"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Impossibile copiare il file speciale"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Fornito valore di collegamento simbolico non valido"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Cestino non supportato"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "I nomi di file non possono contenere '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "il volume non implementa il montaggio"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Non risulta registrata alcuna applicazione per gestire questo file"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "L'enumeratore è chiuso"
+
+# una sola ????
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "L'enumeratore di file presenta un'operazione in sospeso"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "L'enumeratore di file è già chiuso"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "file"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Il file contenente l'icona"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Impossibile gestire la versione %d della codifica GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Dati di input malformati per GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Lo stream non supporta query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Posizionamento non supportato sullo stream"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Troncamento non consentito sullo stream di input"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Troncamento non supportato sullo stream"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Numero di token errato (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Nessun tipo per il nome di classe %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Il tipo %s non implementa l'interfaccia GIcon"
+
+# o non è classificato ?? ma credo classificato abbia una diversa valenza...
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Il tipo %s non presenta una classe"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Numero di versione malformato: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Il tipo %s non implementa from_tokens() sull'interfaccia GIcon"
+
+# FIXME c'è qualcosa di sbagliato nell'originale, vero??
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Impossibile gestire la versione fornita della codifica di icona"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Lo stream di input non implementa la lettura"
+
+# solo una??
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Lo stream presenta un'operazione in sospeso"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"Impossibile trovare il tipo di monitor predefinito per directory locali"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nome di file %s non valido"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Errore nell'ottenere informazioni sul file system: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Impossibile rinominare la directory root"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Errore nel rinominare il file: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Impossibile rinominare il file, il nome di file esiste già"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nome di file non valido"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Errore nell'aprire il file: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Impossibile aprire la directory"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Errore nel rimuovere il file: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Errore nel cestinare il file: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Impossibile creare la directory cestino \"%s\": %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Impossibile trovare la directory di livello superiore per il cestino"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Impossibile trovare o creare la directory cestino"
+
+# consultare la specifica del cestino di freedesktop.org
+# (in breve per ogni file cestinato viene creata una copia
+# del file e un file di informazioni - data, posizione originaria...)
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Impossibile creare il file informazioni cestinamento: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Impossibile cestinare il file: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Errore nel creare la directory: %s"
+
+# FIXME: all other occurrences are "symlink"
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Errore nel creare il collegamento simbolico: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Errore nello spostare il file: %s"
+
+# ma che senso ha???
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Impossibile spostare la directory sopra la directory"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Creazione del file backup non riuscita"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Errore nel rimuovere il file destinazione: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Spostamento tra oggetti mount non supportato"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Il valore dell'attributo deve essere non-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipo di attributo non valido (attesa stringa)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nome di attributo esteso non valido"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Errore nell'impostare l'attributo esteso \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Errore nell'eseguire lo stat del file \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codifica non valida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Errore nell'eseguire lo stat del descrittore di file: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipo di attributo non valido (atteso unit32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipo di attributo non valido (atteso uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipo di attributo non valido (attesa stringa di byte)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Errore nell'impostare i permessi: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Errore nell'impostare il proprietario: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "il collegamento simbolico deve essere non-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Errore nell'impostare il collegamento simbolico: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Errore nell'impostare il collegamento simbolico: il file non è un "
+"collegamento"
+
+# lasciata minuscola come per precedente messaggio
+#   "symlink must be non-NULL"
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "il contesto SELinux deve essere non-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Errore nell'impostare contesto SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux non è abilitato su questo sistema"
+
+# %s è l'attributo
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Impostazione dell'attributo %s non supportata"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Errore nel leggere dal file: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Errore nel posizionarsi all'interno del file: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Errore nel chiudere il file: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Impossibile trovare il tipo di monitor predefinito per file locali"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Errore nello scrivere sul file: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Errore nel rimuovere il vecchio collegamento di backup: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Errore nel creare la copia di backup: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Errore nel rinominare il file temporaneo: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Errore nel troncare il file: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Errore nell'aprire il file «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Il file destinazione è una directory"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Il file destinazione non è un file normale"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Il file è stato modificato dall'esterno"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Errore nel rimuovere il vecchio file: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Fornito GSeekType non valido"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Richiesta di posizionamento non valida"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Impossibile troncare GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Raggiunto il limite massimo dell'array di dati"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Stream di output di memoria non ridimensionabile"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Ridimensionamento dello stream di output di memoria non riuscito"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "l'oggetto mount non implementa lo smontaggio"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "l'oggetto mount non implementa l'espulsione"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "l'oggetto mount non implementa il rimontaggio"
+
+# ok, lo so, un filesystem non può fare congetture..
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "l'oggetto mount non implementa la supposizione del tipo di contenuto"
+
+# ok, lo so, un filesystem non può fare congetture..
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"l'oggetto mount non implementa la supposizione sincrona del tipo di contenuto"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Lo stream di output non implementa la scrittura"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Lo stream sorgente è già chiuso"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nome"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Il nome dell'icona"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nomi"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Un array contenente i nomi delle icone"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "usare alternative predefinite"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Indica se usare le icone alternative predefinite trovate accorciando il nome "
+"ai caratteri '-'. Ignora i nomi successivi al primo nel caso in cui ne siano "
+"stati forniti più di uno."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Impossibile gestire la versione %d della codifica GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descrittore di file"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Il descrittore di file da cui leggere"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Chiude il descrittore di file"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Indica se chiudere il descrittore di file quando si chiude lo stream"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Errore nel leggere da unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Errore nel chiudere unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "File system radice"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Il descrittore di file su cui scrivere"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Errore nello scrivere su unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "il volume non implementa l'espulsione"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Impossibile trovare l'applicazione"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Errore nel lanciare l'applicazione: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI non supportati"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "cambi di associazioni non supportati su win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Creazione di associazioni non supportata su win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "non nascondere le voci"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "usare un formato di elencazione esteso"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..7fcd406
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,1841 @@
+# Japanese translation of glib.
+# Copyright (C) 2001-2009 Free Software Foundation, Inc.
+# Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>, 2001-2002.
+# KAMAGASAKO Masatoshi <emerald@gnome.gr.jp>, 2003.
+# Takeshi AIHANA <takeshi.aihana@gmail.com>, 2004-2009.
+# Ryoichi INAGAKI <ryo1@bc.wakwak.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib trunk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 22:18+0900\n"
+"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
+"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s' は '%s' という要素に対して想定外の属性です"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' という属性は '%s' という要素にはありません"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "'%s' は想定外のタグです (想定していたタグは '%s')"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%s' は '%s' の中では想定外のタグです"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "データ・ディレクトリの中に妥当なブックマーク・ファイルはありません"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "'%s' という URI のブックマークが既に存在しています"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "'%s' という URI のブックマークが見つかりませんでした"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "'%s' という URI のブックマークには MIME 型が定義されていません"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+"'%s' という URI のブックマークにはプライベートではないフラグが定義されていま"
+"す"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "'%s' という URI のブックマークにはグループがありません"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "アプリケーションの '%s' は '%s' というブックマークを登録していません"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "コマンドラインの '%s' を '%s' という URI に展開できませんでした"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' から '%s' という文字集合への変換はサポートしていません"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' から '%s' への変換処理を開けませんでした"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "変換する入力に無効なバイトの並びがあります"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "変換中にエラー: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "入力の最後に不完全な文字シーケンスがあります"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "フォールバック '%s' を '%s' という文字集合に変換できません"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "'%s' は \"file\" スキームの絶対 URI ではありません"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "'#' を含んだ '%s' はローカル・ファイルの URI としては正しくありません"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "'%s' という URI は正しくありません"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI に含まれる '%s' というホスト名は間違っています"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "'%s' という URI に無効なエスケープ文字が含まれています"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' は絶対パスではありません"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "無効なホスト名です"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' を開く時にエラー: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu バイトを確保できませんでした (ファイル \"%s\" の読み込みに必要)"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' の読み出し中にエラー: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "'%s' のサイズが大きすぎます"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' が読めません: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' を開けません: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' の属性の取得できません: fstat() に失敗しました: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' を開けません: fdopen() に失敗しました: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"'%s' から '%s' にファイル名を変更できません: g_rename() に失敗しました: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' というファイルを生成できませんでした: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "'%s' を書き込みモードで開けませんでした: fdopen() に失敗しました: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' への書き込みに失敗しました: fwrite() に失敗しました: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' への書き込みに失敗しました: fflush() に失敗しました: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' への書き込みに失敗しました: fsync() に失敗しました: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' をクローズできません: fclose() に失敗しました: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"'%s' という既存のファイルを削除できませんでした: g_unlink() に失敗しました: %"
+"s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' というテンプレートは間違っています ('%s' を含めないこと)"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' というテンプレートに XXXXXX が含まれていません"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "シンボリック・リンク '%s' の読み込みが失敗: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "シンボリック・リンクはサポートしていません"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' から '%s' へ変換するコンバータを開けませんでした: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string では raw モードで読めません"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "変換されていないデータが読みこみバッファに残っています"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "チャンネルが不完全な文字で終わっています"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end では raw モードで読めません"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ファイル '%s' を開けません: open() が失敗: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ファイル '%s' のマップに失敗しました: mmap() が失敗: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d 行の %d 文字目でエラー:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d 行目でエラー: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"空のエンティティ '&;' があります; 正しいエンティティは: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"文字 '%s' はエンティティ名の最初には使えません。文字 & はエンティティの開始を"
+"表わします。もしアンパサンドがエンティティでなければ、&amp; のようにエスケー"
+"プしてください"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "文字 '%s' はエンティティ名として使えません"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "エンティティ名 '%s' というのは不明です"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"エンティティがセミコロンで終わってません。エンティティでもないのにアンパサン"
+"ドを使ったのではないでしょうか。アンパサンドは &amp; のようにエスケープしてく"
+"ださい"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' をパースできません。文字参照には数字が含まれなくてはなりません (例: "
+"&#234;) おそらく数字が大きすぎます"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "文字参照 '%-.*s' が使用可能な文字をエンコードしていません"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "空の文字参照です。&#454; のように数字がなくてはなりません"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"文字参照がセミコロンで終わっていません。エンティティのつもりもないのにアンパ"
+"サンド文字を使っているのかもしれません。アンパサンドは &amp; とエスケープして"
+"ください"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "中途半端な実体参照です"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "中途半端な文字参照です"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "UTF-8 として正しくない文字列です (シーケンスが長すぎます)"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "UTF-8 として正しくない文字列です (文字で始まっていません)"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "UTF-8 として正しくない文字列です ('%s' は妥当ではありません)"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ドキュメントは要素 (例 <book>) で始まってなくてはなりません"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' は '<' に続く文字としては正しくありません。おそらく要素名の開始になって"
+"いません"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"おかしな文字 '%s' があります。空の要素のタグ '%s' の最後は '>' でなくてはなり"
+"ません"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "おかしな文字 '%s' です。属性名'%s' (要素 '%s') の後には '=' が必要です"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"おかしな文字 '%s' です。要素 '%s' の開始タグの末尾は '>' または '/' でなくて"
+"はなりません。あるいは属性になります。おかしな文字を属性名に使ったのかもしれ"
+"ません"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"おかしな文字 '%s' です。属性 '%s' (要素 '%s') の値を設定するには等号記号の後"
+"は引用記号で始まってなくてはなりません"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' は '</' に続く文字としては正しくありません。'%s' では要素名は始まってま"
+"せん"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' は閉じ要素名 '%s' に続く文字としては正しくありあません。'>' のみが使用で"
+"きます"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "要素 '%s' は閉じています。要素は何も開かれてません"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "要素'%s' が閉ました。しかし現在開いている要素は '%s' です"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ドキュメントが空か、空白だけが含まれています"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "ドキュメントが開きカギカッコ '<' の直後で終了しています"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"ドキュメントが突然終了しています。要素が開きっぱなしです。最後に開いた要素は "
+"'%s' です。"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"ドキュメントはタグ <%s/> で終了しているものと想定していましたが、突然終了して"
+"います。"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "要素名の途中でドキュメントが突然終了しています"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "属性名の途中でドキュメントが突然終了しています"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "要素の開始タグの途中でドキュメントが突然終了しています"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"属性名の後にある等号記号の次でドキュメントが突然終了しています: 属性値があり"
+"ません"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "ドキュメントが属性値の途中で突然終了しています"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "ドキュメントが要素 '%s' の閉じタグの途中で突然終了しています"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"ドキュメントがコメントあるいはプロセシング指示子の途中で突然終了しています"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "不正なオブジェクト"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "内部エラーまたは不正なオブジェクト"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "メモリが足りません"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "バックトラック処理の上限に達しました"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "パターンに含まれているアイテムは部分マッチングをサポートしていません"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "内部エラー"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "条件の後方参照は部分マッチングをサポートしていません"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "再帰の上限に達しました"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "空の部分文字列に対する作業領域の上限に達しました"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "改行フラグの連携が間違っています"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "原因不明のエラー"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "パタンの終端に \\ があります"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "パタンの終端に \\c があります"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "認識できない文字の後ろに \\ があります"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"ここに大/小文字の変換を行うエスケープ (\\l、\\L、\\u、\\U) を挿入できません"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "量指定子 '{}' の中にある数値の順番が間違っています"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "量指定子 '{}' の中にある数値が大きすぎます"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "文字クラスを表す終端文字 '] ' がありません"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "文字クラスの中に無効なエスケープ・シーケンスがあります"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "文字クラスで文字の順番が間違っています"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "繰り返すものがありません"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "'(?' の後ろに認識できない文字があります"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "'(?<' の後ろに認識できない文字があります"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P の後ろに認識できない文字があります"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX の名前付きクラスはクラスの内部でのみ利用できます"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "終端文字の ')' がありません"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "開始文字 '(' が無い終端文字 ')'"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R または (?[+-]数値 が続く必要あり )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "存在しないサブパタンへの参照です"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "コメントの後ろに ')' がありません"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "正規表現が長すぎます"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "メモリの確保に失敗しました"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "後読み (lookbehind assertion) が固定長ではありません"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "'(?(' の後ろに不正な形式の数値または名前があります"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "条件グループに二つ以上のブランチがあります"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assertion expected after (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "不明な POSIX のクラス名"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX では照合順序の要素はサポートしていません"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} の中にある文字値が大きすぎます"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "条件の '(?(0)' が間違っています"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "後読みのアサーションでは \\C を指定できません"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "繰り返しの呼び出しが無限ループになっています"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "サブパタンの名前に終端文字がありません"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "二つある名前付きサブパタンが同じ名前です"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "不正な \\P または \\p のシーケンスです"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P または \\p の後ろにあるプロパティ名が不明です"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "サブパタンの名前が長すぎます (32 文字以下にして下さい)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "名前付きサブパタンが多すぎます (10,000 個以下にして下さい)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "8進数値が \\377 よりも大きいです"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE グループに1つ以上のブランチが含まれています"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE グループは繰り返せません"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "NEWLINE オプションに矛盾があります"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"ブレース名の後ろに \\g が存在していないか、または0以外の数値でブレースしてい"
+"ます"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "想定外の繰り返しです"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "コードがオーバーフローしました"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "正規表現をコンパイルする領域で上限を超えました"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "直前にチェックしたサブパタンのリファレンスが見つかりませんでした"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "正規表現 %s でマッチングしている際にエラー: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "お使いの PCRE ライブラリは UTF-8 をサポートしていません"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "お使いの PCRE library は UTF-8 のプロパティをサポートしていません"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "正規表現 %s をコンパイルする際にエラー (%d 文字目): %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "正規表現 %s を最適化する際にエラー: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "16進数の数値または '}' を想定していました"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "16進数の数値を想定していました"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "シンボル参照の中に '<' がありません"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "中途半端なシンボル参照です"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "サイズが0のシンボル参照です"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "数値を想定していました"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "シンボル参照が間違っています"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "最後の '\\' に対応するシンボルがありません"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "不明なエスケープ・シーケンスです"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "代替文字列 \"%s\" の %lu 文字目を解析する際にエラー: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "引用テキストが引用記号で始まっていません"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"コマンドライン、あるいはシェルの引用テキストにおいて引用記号の対応が取れてい"
+"ません"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "テキストが '\\' 文字の直後で終了しています (テキストは '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c に対応する引用記号の前でテキストが終了しています (テキストは '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "テキストが空です (あるいは空白のみ)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "子プロセスからデータを取得できませんでした"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "子プロセスとの通信用のパイプを作成できませんでした (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "子のパイプからデータを取得できませんでした (%s) "
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' というディレクトリへ移動できませんでした (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "%s を子プロセスとして起動できませんでした"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "プログラム名が無効です: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d の引数ベクタに不正な文字列があります: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "環境変数に不正な文字列があります: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "作業ディレクトリが不正です: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "ヘルパー・プログラム (%s) の起動が失敗しました"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"g_io_channel_win32_poll() が子プロセスからデータを読み出す際に想定外のエラー"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "子プロセスからデータを読めません (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "子プロセスからデータを読み出す際に select() で想定外のエラー (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() で想定外のエラー (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork 失敗 (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "%s を子プロセスとして起動できませんでした: %s"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "子プロセスの出力または入力をリダイレクトできません (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "子プロセスを fork できません (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "子プロセスの実行時に不明なエラー \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "子プロセスのパイプから十分なデータを取得できません (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 の範囲外の文字です"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "変換する入力で無効なシーケンスがあります"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 の範囲外の文字です"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "用法:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[オプション...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "ヘルプのオプション:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "ヘルプのオプションを表示する"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "ヘルプのオプションを全て表示する"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "アプリケーションのオプション:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%2$s の整数値 '%1$s' を解析できません"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s の整数値 '%1$s' は範囲外の値です"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%2$s の実数値 '%1$s' を解析できません"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s の実数値 '%1$s' は範囲外の値です"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "オプション %s の解析中にエラー"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s の引数がありません"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "%s は不明なオプションです"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "検索ディレクトリには妥当なキー・ファイルがありませんでした"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "通常のファイルではありません"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ファイルが空です"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"キー・ファイルの行 '%s' がキー/値のペア、グループ、またはコメントではありませ"
+"ん"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "グループ名が無効です: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "キー・ファイルがグループで始まっていません"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "キーの名前が無効です: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "キー・ファイルにサポートしてないエンコーディング '%s' があります"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "キー・ファイルにグループ '%s' がありません"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "キー・ファイルにキー '%s' がありません"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "キー・ファイルのキー '%s' の値 '%s' が UTF-8 ではありません"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "キー・ファイルのキー '%s' の値を解釈できませんでした"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"キー・ファイルのグループ '%2$s' にあるキー '%1$s' の値を解釈できませんでした"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "キー・ファイルにはグループ '%2$s' のキー '%1$s' がありません"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "キー・ファイルの行末にエスケープ文字が含まれています"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "キー・ファイルに無効なエスケープ・シーケンス '%s' が含まれています"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "値 '%s' を数値として解釈できません"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "整数値 '%s' は範囲外の値です"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "値 '%s' を実数値として解釈できません"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "値 '%s' を論理値として解釈できません"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s に引き渡した値が大きすぎます"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "既にストリームは閉じています"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "操作がキャンセルされました"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "不明な種類"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s (ファイルの種類)"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s (種類)"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "想定していたよりも早くストリームの最後に到達しました"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "名前なし"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "デスクトップ・ファイルで Exec 項目を指定してませんでした"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "アプリケーションで必要な端末が見つかりませんでした"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ユーザのアプリケーション設定フォルダ %s を生成できません: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ユーザの MIME 型設定フォルダ %s を生成できません: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ユーザのデスクトップ・ファイル %s を生成できません"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s に対する独自の設定"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ドライブ側で取り出しの操作を実装していません"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ドライブ側でポーリングによるメディアの検出を実装していません"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "バージョン %d の GEmblem のエンコーディングはサポートしていません"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem のエンコーディングにあるトークンの数 (%d) が間違っています"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+"バージョン %d の GEmblemedIcon のエンコーディングはサポートしていません"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+"GEmblemedIcon のエンコーディングにあるトークンの数 (%d) が間違っています"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon に対する GEmblem を想定していました"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "サポートしていない操作です"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "マウントを含んでいるものはありません"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ディレクトリ全体をコピーできません"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ディレクトリからディレクトリへコピーできません"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "対象となるファイルが存在しています"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ディレクトリを再帰的にコピーできません"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "特別なファイルはコピーできません"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "指定したシンボリックリンクは間違っています"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ゴミ箱はサポートしていません"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ファイル名に '%c' を含めることはできません"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ボリュームはマウントを実装していません"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "このファイルを扱うアプリケーションが登録されていません"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator は閉じています"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "File enumerator has outstanding operation"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ファイルの Enumerator は既に閉じています"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ファイル"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "アイコンの情報を格納したファイルです"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "バージョン %d の GFileIcon のエンコーディングはサポートしていません"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon の入力データが間違っています"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "ストリームは query_info をサポートしていません"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "ストリーム上のシークはサポートしていません"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "入力ストリームを切りつめることはできません"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "ストリーム上での切りつめはサポートしていません"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "トークンの数 (%d) が間違っています"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "%s というクラス名の型がありません"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "%s という型は GIcon のインタフェースを実装していません"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "%s という型がクラスになっていません"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "バージョン番号が間違っています: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+"%s という型は GIcon のインタフェースで tokens() を使って実装していません"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "提供したバージョンの Icon のエンコーディングはサポートしていません"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "入力ストリームで読み込みを実装していません"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Stream has outstanding operation"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"ローカル・ディレクトリを監視するデフォルト・モニタの種類が見つかりません"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "ファイル名が無効です: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ファイルシステムの情報を取得する際にエラー: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ルート・ディレクトリの名前は変更できません"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ファイル名を変更する際にエラー: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ファイル名を変更できません (既に存在しているため)"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "無効なファイル名です"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ファイルをオープンする際にエラー: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ディレクトリをオープンできません"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ファイルを削除する際にエラー: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ファイルをゴミ箱へ移動する際にエラー: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ゴミ箱のディレクトリ (%s) の生成に失敗しました: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ゴミ箱のトップレベルなディレクトリが見つかりません"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ゴミ箱ディレクトリが存在しないか生成できません"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ゴミ箱の情報ファイルを生成できません: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ファイルをゴミ箱へ移動できません: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ディレクトリを生成する際にエラー: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "シンボリック・リンクを生成する際にエラー: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ファイルを移動する際にエラー: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ディレクトリからディレクトリへ移動できません"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "バックアップ・ファイルの生成に失敗しました"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "対象となるファイルを削除する際にエラー: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "マウント間の移動はサポートしていません"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "属性値を NULL にしないで下さい"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "属性の種類が無効です (文字列を想定していた)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "拡張属性の名前が無効です"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "'%s' という拡張属性をセットする際にエラー: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' というファイルの状態を取得する際にエラー: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (無効なエンコーディング)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ファイル・ディスクリプタの状態を取得する際にエラー: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "属性の種類が無効です (uint32 型を想定していた)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "属性の種類が無効です (uint64 型を想定していた)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "属性の種類が無効です (バイト型の文字列を想定していた)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "アクセス権をセットする際にエラー: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "所有者をセットする際にエラー: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "シンボリックリンクを NULL にしないで下さい"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "シンボリックリンクをセットする際にエラー: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "シンボリックリンクの指定でエラー: ファイルがリンクではない"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux のコンテキストを NULL にしないで下さい"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux のコンテキストを指定する際にエラー: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "このシステムでは SELinux が有効になっていません"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s という属性値はセットできません"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ファイルから読み込む際にエラー: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ファイルでシークする際にエラー: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ファイルを閉じる際にエラー: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "ローカル・ファイルを監視するデフォルト・モニタの種類が見つかりません"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ファイルに書き込む際ににエラー: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "古いバックアップのリンクを削除する際にエラー: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "バックアップのコピーを生成する際にエラー: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "作業用のファイル名を変更する際にエラー: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "ファイルを切りつめる際にエラー: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' というファイルをオープンする際にエラー: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "対象となるファイルはディレクトリです"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "対象となるファイルは通常のファイルではありません"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ファイルが外部で変更されました"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "古いファイルを削除する際にエラー: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "不正な GSeekType が指定されました"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "無効なシークの要求です"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream を切りつめることはできません"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "データ配列の上限に到達しました"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "メモリ出力ストリームの大きさは変更できません"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "メモリ出力ストリームの大きさを変更できませんでした"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount はアンマウントを実装していません"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount は取り出しを実装していません"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount は再マウントを実装していません"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount にはメディアの種類を推測するような実装はありません"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount には同期させてメディアの種類を推測するような実装はありません"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "出力ストリームは書き込みを実装していません"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "ソース・ストリームは既に閉じています"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "名前"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "アイコンの名前です"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "名前の集合"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "アイコンの名前を格納した配列です"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "デフォルトのフォールバックを使用する"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' という代替え文字で名前を省略するデフォルトのフォールバックを使用するかど"
+"うかです (複数の名前を指定すると一番最初の名前より後ろの名前を全て無視します)"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "バージョン %d の GThemedIcon のエンコーディングはサポートしていません"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ファイル・ディスクリプタ"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "読み込むファイルのファイル・ディスクリプタです"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ファイル・ディスクリプタを閉じるかどうか"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "ストリームが閉じたらファイル・ディスクリプタを閉じるかどうかです"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix から読み込む際にエラー: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix を閉じる際にエラー: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ファイルシステムのルート"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "書き込むファイルのファイル・ディスクリプタです"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unix に書き込む際にエラー: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ボリュームは取り出しを実装していません"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "アプリケーションが見つかりません"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "アプリケーションを起動する際にエラー: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI はサポートしていません"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 で組み合わせの変更はサポートしていません"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 で組み合わせの生成はサポートしていません"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "エントリを隠さない"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "長い形式で一覧表示する"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ファイル...]"
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 0000000..4d27079
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,1862 @@
+# translation of ka.po to Georgian
+# Georgian translation for GLIB.
+# Copyright © 2006 Ubuntu Georgian Translators.
+# This file is distributed under the same license as the GLIB package.
+#
+# Gia Shervashidze <giasher@telenet.ge>, 2006.
+# Vladimer Sichinava ვლადიმერ სიჭინავა <vsichi@gnome.org>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: ka\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2007-09-14 12:15+0200\n"
+"Last-Translator: Vladimer Sichinava ვლადიმერ სიჭინავა <vsichi@gnome.org>\n"
+"Language-Team: Georgian <http://mail.gnome.org/mailman/listinfo/gnome-ge-"
+"list>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "მოულოდნელი ატრიბუტი '%s' ელემენტ '%s'-თვის"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "ატრიბუტი'%s' ელემენტისთვის '%s' ვერ მოიძებნა"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "უცნობი ჭდე '%s', მოსალოდნელი იყო '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "უცნობი ჭდე '%s' - '%s'-ში"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "მონაცემთა დასტებში მართებული საკვანძო ფაილი ვერ მოიძებნა"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' სანიშნე უკვე არსებობს"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s'-თვის სანიშნე ვერ მოიძებნა"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' სანიშნეში MIME ტიპი არ მითითებულა"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' სანიშნეში პირადი ალამი არ მითითებულა"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' სანიშნეში ჯგუფები არ მითითებულა"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "პროგრამისთვის სახელით '%s' არ მითითებულა სანიშნე '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "შეუძლებელია '%s' exec line-ს გაფართოება, მისამართით URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "კოდური გვერდის \"%s\" გარდაქმნა \"%s\" კოდირებაში არაა რეალიზებული"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "ვერ ხერხდება \"%s\" - \"%s\" გარდამქმნელის გახსნა"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "შეტანილ ტექსტში ბაიტების მიმდევრობა მცდარია"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "გარდაქმნის შეცდომა: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "არასრული სიმბოლო შეტანის ტექსტის ბოლოს"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ვერ ხერხდება \"%s\" სიმბოლოს გარდაქმნა კოდირებაში \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"URI \"%s\" არ გახლავთ აბსოლუტური იდენტიფიკატორი \"file\" სქემის გამოყენებისას"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+"ლოკალური ფაილის URI იდენტიფიკატორი \"%s\" არ შეიძლება შეიცავდეს სიმბოლოს \"#"
+"\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI იდენტიფიკატორი \"%s\" მცდარია"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI იდენტიფიკატორის \"%s\" მასპინძლის სახელი მცდარია"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI იდენტიფიკატორი \"%s\" შეიცავ მცდარ საკონტროლო სიმბოლოებს"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "გეზი \"%s\" აბსოლუტური არ გახლავთ"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "მასპინძლის მცდარი სახელი"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "შეცდომ \"%s\" დასტის გახსნისას: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "ვერ ხერხდება %lu ბაიტის გამოყოფა \"%s\" ფაილის წასაკითხად"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "ფაილიდან \"%s\" წაკითხვის შეცდომა: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "ფაილის \"%s\" გახსნის შეცდომა: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "ფაილის \"%s\" ატრიბუტების წაკითხვის შეცდომა: ფუნქცია - fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "ფაილის \"%s\" გახსნის შეცდომა: ფუნქცია - fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "ვერ მოხერხდა '%s' ფაილის გადარქმევა - '%s': g_rename() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ვერ ვქმნი '%s' ფაილს: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "ვერ ვხსნი '%s' ფაილს ჩასაწერად: fdopen() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ვერ ვწერ '%s' ფაილს: fwrite() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ვერ ვწერ '%s' ფაილს: fwrite() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ვერ ვწერ '%s' ფაილს: fwrite() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ვერ ვხურავ '%s' ფაილს: fclose() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "არსებული '%s' ფაილი ვერ ამოიშლება: g_unlink() ვერ შედგა: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "თარგი '%s' მცდარია და '%s'-ს არ უნდა შეიცავდეს"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "ნიმუში '%s' არ შეიცავს XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "სიმბოლური ბმის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "ვერ ხერხდება გარდამქმნელის გახსნა '%s' - '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "უშუალოდ წაკითხვა ფუნქციაში g_io_channel_read_line_string ვერ ხერხდება"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "გარდაუქმნელი მონაცემები წაკითხვის ბუფერში დარჩა"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "არხი არასრული სიმბოლოთი იხურება"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "უშუალოდ წაკითხვა ფუნქციაში g_io_channel_read_to_end ვერ ხერხდება"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ვერ მოხერხდა '%s' ფაილის გახსნა: open() ვერ შედგა: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ვერ მოხერხდა '%s' ფაილის განთავსება: mmap() ვერ შედგა: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "შეცდომა სტრიქონში %d სიმბოლო %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "შეცდომა სტრიქონში %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"ცარიელი ერთეული \"&;\"; შესაძლო ერთეულებია: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"სიმბოლო \"%s\" დაუშვებელია ერთეულის დასაწყისში; ერთეულიიწყება \"&\" "
+"სიმბოლოთი;  თუ ეს სიმბოლო სიმბოლო ერთეულის ნაწილი უნდა იყოს გამოსახეთ იგი, "
+"როგორც &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "სიმბოლო \"%s\" ერთეულის სახელში დაუშვებელია"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "ერთეულის სახელი \"%s\" უცნობია"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"ერთეული არ მთავრდება წერტილ-მძიმით; როგორც ჩანს, სახელის დასაწყისში "
+"გამოყენებულია სიმბოლო \"&\". გამოსახეთ იგი, როგორც &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"ვერ მუშავდება სტრიქონი '%-.*s', რომელშიც უნდა იყოს სიმბოლოს ნომერი "
+"(მაგალითად, &#234;): შესაძლოა რიცხვი მეტისმეტად დიდია"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "სიმბოლოს ნომერი '%-.*s' დაუშვებელია"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"სიმბოლოს დამოწმება ცარიელია; იგი ნომერს უნდა შეიცავდეს, მაგალითად, &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"სიმბოლოს ნომერი არ მთავრდება წერტილ-მძიმით; როგორც ჩანს, სახელის დასაწყისში "
+"გამოყენებულია სიმბოლო \"&\". გამოსახეთ იგი, როგორც &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ერთეულის დამოწმება არაა დასრულებული"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "სიმბოლოს დამოწმება არაა დასრულებული"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "ტექსტი მიუღებელი UTF-8 კოდირებით - overlong sequence"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "ტექსტი მიუღებელი UTF-8 კოდირებით - not a start char"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "ტექსტი მიუღებელი UTF-8 კოდირებით - მიუღებელი '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "დოკუმენტი უნდა დაიწყოს ელემეტით (მაგალითად <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"სიმბოლო \"%s\" დაუშვებელია \"<\" სიმბოლოს შემდეგ; ამ სიმბოლოთი ელემენტის "
+"სახელის დაწყება არ შეიძლება"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"ზედმეტი სიმბოლო \"%s\", მოსალოდნელია \">\" სიმბოლო ელემენტის \"%s\" ჭდის "
+"დასახურად"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"ზედმეტი სიმბოლო \"%s\", მოსალოდნელია \"=\"ატრიბუტის სახელის \"%s\" შემდეგ "
+"ელემენტისთვის \"%s\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"ზედმეტი სიმბოლო \"%s\", მოსალოდნელია \">\" ან \"/\" ელემენტის \"%s\" "
+"გამხსნელი ჭდის დასახურად ან დამატებითი ატრიბუტი; ასევე, შესაძლოა მცდარი "
+"სიმბოლო ატრიბუტის სახელში"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"ზედმეტი სიმბოლო \"%s\", მოსალოდნელია გახსნილი ბრჭყალები ტოლობის ნიშნის "
+"შემდეგ ატრიბუტისთვის \"%s\" მნიშვნელობის მისანიჭებლად ელემენტისთვის \"%s\""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"სიმბოლო \"%s\" დაუშვებელია \"</\" შემდეგ; სიმბოლო \"%s\" არ შეიძლება იყოს "
+"ელემენტის სახელის დასაწყისში"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"სიმბოლო \"%s\" დაუშვებელია ელემენტის \"%s\" დახურვის ჭდის შემდეგ; დასაშვები "
+"სიმბოლოა \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "ელემენტი \"%s\" დაიხურა, არცერთი ელემენტი არაა გახსნილი"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "ელემენტი \"%s\" დაიხურა, მაგრამ გახსნილია ელემენტი \"%s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "დოკუმენტი ცარიელია ან მხოლოდ ხარეებს შეიცავს"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "დოკუმენტი დასრულდა უშუალოდ კუთხოვანი ფრჩხილის \"<\" შემდეგ"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"დოკუმენტი მოულოდნელად დასრულდა გახსნილი ელემენტებით - \"%s\" ბოლო გახსნილი "
+"ელემენტია"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"დოკუმენტი მოულოდნელად დასრულდა, მოსალოდნელია ჩამკეტი კუთხოვანი ფრჩხილი <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "დოკუმენტი მოულოდნელად დასრულდა ელემენტის სახელის შიგნით"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "დოკუმენტი მოულოდნელად დასრულდა ატრიბუტის სახელის შიგნით"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "დოკუმენტი მოულოდნელად დასრულდა ელემენტის გამხსნელი ჭდის შიგნით."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"დოკუმენტი მოულოდნელად დასრულდა ატრიბუტის სახელის შემდგომი ტოლობის ნიშნის "
+"შემდეგ; ატრიბუტის მნიშვნელობა არ მითითებულა"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "დოკუმენტი მოულოდნელად დასრულდა ატრიბუტის მნიშვნელობის შიგნით"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "დოკუმენტი მოულოდნელად დასრულდა ელემენტის \"%s\" ჩამკეტი ჭდის შიგნით"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"დოკუმენტი მოულოდნელად დასრულდა კომენტარის ან დამუშავების ინსტრუქციის შიგნით"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "დაზიანებული ობიექტი"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "შიდა შეცდომა ან დაზიანებული ობიექტი"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "მეხსიერებას გარეთ"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "უკან დაბრუნების ლიმიტი ამოწურულია"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "თარგი შეიცავს ნაწილობრივი დამთხვევისთვის მხარდაუჭერელ ელემეტებს"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "შიდა შეცდომა"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "უკუ მიმართვა პირობების სახით მხარდაუჭერელია ნაწილობრივი დამთხვევისთვის"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "რეკურსიის ლიმიტი მიღწეულია"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "სამუშაო გარემოს ცარიელი ქვესტრინგების ლიმიტი მიღწეულია"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "სტრიქონების გადაყვანის ალმების არასწორი კომბინაცია"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "უცნობი შეცდომა"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "არხი არასრული სიმბოლოთი იხურება"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "შეტანილ ტექსტში ბაიტების მიმდევრობა მცდარია"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "სიმბოლოს დამოწმება არაა დასრულებული"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "სიმბოლოს დამოწმება არაა დასრულებული"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "სიმბოლოს დამოწმება არაა დასრულებული"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "დაიშვა შეცდომა სტანდარტული გამოსახულების %s დამთხვევის ძიების დროს: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "ბიბლიოთეკა PCRE-ს არ გააჩნია UTF8-ის მხარდაჭერა"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"PCRE ბიბლიოთეკა კომპილირებულია UTF8 კოდირების პარამეტრების მხარდაჭერის გარეშე"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"შეცდომა სტანდარტული გამოსახულება %s-ის კომპილირებისას, სიმბოლო ნომრით %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "შეცდომა სტანდარტული გამოსახულების ოპტიმიზირებისას %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "მოსალოდნელია თექვსმეტობითი სიმბოლო, ან '}' ბრჭყალი"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "მოსალოდნელია თექვსმეტობითი სიმბოლო"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "არ მოიძებნა '<', სიმბოლურ მითითებაში"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "დაუსრულებელი სიმბოლური მითითება"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "ნულოვანი სიგრძის სიმბოლური მითითება"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "მოსალოდნელი ნომერი"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "მიუღებელი სიმბოლური მითითება"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "დაბოლოვება '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "უცნობი escape სეკვენცია"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"შეცდომა ჩასანაცვლებელი ტექსტის \"%s\" განაალიზებისას, სიმბოლო ნომრით %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ციტირებული ტექსტი ბრჭყალებით არ იწყება"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "უმართებლო ბრჭყალი ბრძანებაში ან სხვა ტექსტურ გარსში"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "ტექსტი დასრულდა უშუალოდ \"\\\" სიმბოლოს შემდეგ. (ტექსტი - \"%s\")"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "ტექსტი დასრულდა %c შესაბამისი ბრჭყალის წინ. (ტექსტი - \"%s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ტექსტი ცარიელი იყო (ან მხოლოდ ხარეებს შეიცავდა)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "მონაცემთა წაკითხვა ქვეპროცესიდან ვერ მოხერხდა"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "არხის შექმნა ქვეპროცესთან დასაკავშირებლად ვერ მოხერხდა (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "მონაცემთა წაკითხვა ქვეპროცესის არხიდან ვერ მოხერხდა (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "დასტის შექმნა ვერ მოხერხდა \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "ქვეპროცესის გამოყენება ვერ მოხერხდა (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "პროგრამის მცდარი სახელი: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "მცდარი სტრიქონი არგუმენტის ვექტორში - %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "მცდარი სტრიქონი გარემოში: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "უმართებლო სამუშაო დასტა: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "დახმარების პროგრამის (%s) გამოყენება ვერ მოხერხდა"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"მოულოდნელი შეცდომა ფუნქციაში g_io_channel_win32_poll() ქვეპროცესიდან "
+"მონაცემთა წაკითხვისას"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "მონაცემთა წაკითხვა ქვეპროცესიდან ვერ მოხერხდა (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"მოულოდნელი შეცდომა ფუნქციაში select() ქვეპროცესიდან მონაცემთა წაკითხვისას (%"
+"s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "მოულოდნელი შეცდომა ფუნქციაში waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "განტოტების შეცდომა (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "ქვეპროცესის გამოყენება ვერ მოხერხდა \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"ქვეპროცესში შეტანის ან მიღების გადამისამართება გამოყენება ვერ მოხერხდა (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "ქვეპროცესის განტოტების შეცდომა (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "ქვეპროცესის უცნობი შეცდომა \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "ქვეპროცესის არხიდან საკმარის მონაცემთა წაკითხვა ვერ მოხერხდა (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "სიმბოლო UTF-8 რანგს გარეთაა"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "შეტანის ტექსტის გარდაქმნის მცდარი მიმდევრობა"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "სიმბოლო UTF-16 რანგს გარეთაა"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "გამოყენება:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ოპცია...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "დახმარების პარამეტრები:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "დახმარების პარამეტრების ჩვენება"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "დახმარების ყველა პარამეტრის ჩვენება"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "პროგრამის პარამეტრები:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "ვერ ვახერხებ მნიშვნელობის წაკითხვას '%s' ელემენტისთვის %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "მთელი მნიშვნელობა '%s' ელემენტისთვის %s რანგს გარეთაა"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "ვერ ვახერხებ მთელ მნიშვნელობის '%s' წაკითხვას %s ელემენტისთვის"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "მთელი მნიშვნელობა '%s' ელემენტისთვის %s რანგს გარეთაა"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "შეცდომის გაანალიზების პარამეტრი: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "არ არსებული არგუმენტი - %s-თვის"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "უცნობი პარამეტრი %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "ძიების კატალოგებში შეუძლებელია დამოწმებული გასაღების პოვნა"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ფაილი ჩვეულებრივი არაა"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ფაილი ცარიელია"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"საკვანძო ფაილი '%s' შეიცავს სტრიქონს, რომელიც არ წარმოადგენს კოდურ წყვილს, "
+"ჯგუფს ან კომენტარს"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "ჯგუფის მიუღებელი სახელი: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "საკვანძო ფაილი ჯგუფით არ იწყება"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "გასაღების მიუღებელი სახელი: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "საკვანძო ფაილი შეიცავს არარეალიზებულ კოდირებას '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "საკვანძო ფაილი არ შეიცავს ჯგუფებს '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "საკვანძო ფაილი არ შეიცავს კოდს '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"საკვანძო ფაილი შეიცავს კოდს '%s', რომლის მნიშვნელობაც '%s' არაა UTF-8 "
+"კოდირებაში"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "საკვანძო ფაილი შეიცავს კოდს '%s', რომლის მნიშვნელობაც ვერ იშიფრება."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"საკვანძო ფაილი შეიცავს კოდს '%s' ჯგუფში '%s', რომლის მნიშვნელობაც ვერ "
+"იშიფრება."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "საკვანძო ფაილი არ შეიცავს კოდს '%s' ჯგუფში '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "საკვანძო ფაილი სტრიქონის ბოლოს შეიცავს escape სიმბოლოს"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "საკვანძო ფაილი შეიცავს მცდარ escape მიმდევრობას '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "მნიშვნელობა '%s'  ვერ აღიქმება როგორც რიცხვი."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "მთელი მნიშვნელობა '%s' რანგს გარეთაა"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "მნიშვნელობა '%s' ვერ აღიქმება როგორც მძიმის მქონე რიცხვი."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "მნიშვნელობა '%s'  ვერ აღიქმება როგორც ლოგიკური ოპერატორი."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "უცნობი შეცდომა"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "პროგრამისთვის სახელით '%s' არ მითითებულა სანიშნე '%s'"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "URI იდენტიფიკატორის \"%s\" მასპინძლის სახელი მცდარია"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "გასაღების მიუღებელი სახელი: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "მასპინძლის მცდარი სახელი"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ვერ ვქმნი '%s' ფაილს: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ვერ ვქმნი '%s' ფაილს: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "ვერ ვქმნი '%s' ფაილს: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "შეცდომ \"%s\" დასტის გახსნისას: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "შეცდომის გაანალიზების პარამეტრი: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "დოკუმენტი მოულოდნელად დასრულდა ატრიბუტის სახელის შიგნით"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "შეცდომ \"%s\" დასტის გახსნისას: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "გარდაქმნის შეცდომა: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "გარდაქმნის შეცდომა: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "შეცდომა სტრიქონში %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "გარდაქმნის შეცდომა: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "შეცდომის გაანალიზების პარამეტრი: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "ფაილი ჩვეულებრივი არაა"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "გასაღების მიუღებელი სახელი: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "URI იდენტიფიკატორის \"%s\" მასპინძლის სახელი მცდარია"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "ფაილის \"%s\" წაკითხვის შეცდომა: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "შეცდომა სტრიქონში %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "შეცდომის გაანალიზების პარამეტრი: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "შეცდომის გაანალიზების პარამეტრი: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "სიმბოლური ბმების გამოყენება არაა რეალიზებული"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[ოპცია...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "შეცდომის გაანალიზების პარამეტრი: %s"
diff --git a/po/kn.po b/po/kn.po
new file mode 100644
index 0000000..340bdf9
--- /dev/null
+++ b/po/kn.po
@@ -0,0 +1,1834 @@
+# translation of glib.HEAD.kn.po to Kannada
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Shankar Prasad <svenkate@redhat.com>, 2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.kn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-26 11:04+0530\n"
+"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
+"Language-Team: Kannada <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s'ಘಟಕಕ್ಕೆ ಅನಪೇಕ್ಷಿತ ಗುಣ ವಿಶೇಷ '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' ದ ಘಟಕಕ್ಕೆ '%s' ಗುಣವಿಶೇಷ ಪತ್ತೆಯಾಗಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "ಅನಪೇಕ್ಷಿತ ಪದಗುಚ್ಛ '%s', ಪದಗುಚ್ಛ '%s' ವನ್ನು ಅಪೇಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%s' ದ ಒಳಗೆ ಅನಪೇಕ್ಷಿತ ಪದಗುಚ್ಛ '%s"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "ದತ್ತಾಂಶ ಕೋಶದಲ್ಲಿ ಯಾವುದೇ ಮಾನ್ಯ ಬುಕ್ ಮಾರ್ಕ್ ಕಂಡು ಬಂದಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' ಗೆ ಈಗಾಗಲೆ ಒಂದು ಬುಕ್ ಮಾರ್ಕ್ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' ಗೆ ಯಾವುದೇ ಬುಕ್ ಮಾರ್ಕ್ ಕಂಡು ಬಂದಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' ಗಾಗಿನ ಬುಕ್ ಮಾರ್ಕಿನಲ್ಲಿ ಯಾವುದೇ MIME ಪ್ರಕಾರವು ಕಂಡುಬಂದಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' ನ ಬುಕ್ ಮಾರ್ಕಿನಲ್ಲಿ ಯಾವುದೇ ಖಾಸಗಿ ನಿಶಾನೆಯು ಸೂಚಿತವಾಗಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' ಗಾಗಿ ಯಾವುದೇ ಸಮೂಹವು ಸಂಯೋಜಿತವಾಗಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' ಎಂಬ ಹೆಸರಿನ ಯಾವುದೇ ಅನ್ವಯವು '%s' ಗಾಗಿ ಒಂದು ಬುಕ್-ಮಾರ್ಕನ್ನು ನೊಂದಾಯಿಸಿಲ್ಲ"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec ಸಾಲು '%s' ಅನ್ನು URI '%s' ನೊಂದಿಗೆ ವಿಸ್ತರಿಸುವಲ್ಲಿ ವಿಫಲತೆ ಎದುರಾಗಿದೆ"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' ಅಕ್ಷರಗಳಿಂದ '%s' ಗೆ ಪರಿವರ್ತಿಸುವುದು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' ನಿಂದ '%s'ಗೆ ಪರಿವರ್ತಕವನ್ನು ತೆರೆಯಲಾಗುತ್ತಿಲ್ಲ"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "ಪರಿವರ್ತಿತ ಆದಾನದಲ್ಲಿನ ಬೈಟ್ ಅನುಕ್ರಮ ಅಮಾನ್ಯವಾಗಿದೆ"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "ಪರಿವರ್ತಿಸುವಾಗ ದೋಷ: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "ಆದಾನದ ಕೊನೆಯಲ್ಲಿ ಆಂಶಿಕ ಅಕ್ಷರ ಅನುಕ್ರಮಣೆ"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "fallback '%s' ಅನ್ನು ಸಂಕೇತಸೆಟ್ '%s' ಗೆ ಪರಿವರ್ತಿಸಲಾಗಿಲ್ಲ"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' \"ಕಡತ\" ವಿಧಾನವನ್ನು ಬಳಸುವ ಒಂದು ಪರಿಪೂರ್ಣವಾದ URI ಅಲ್ಲ"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "ಸ್ಥಳೀಯ ಕಡತ URI '%s' ಒಂದು '#' ಅನ್ನು ಹೊಂದಿಲ್ಲದಿರಬಹುದು"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' ಅಮಾನ್ಯವಾಗಿದೆ"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s' ನ ಅತಿಥೇಯದ ಹೆಸರು ಸರಿಯಿಲ್ಲ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' ಅಮಾನ್ಯವಾಗಿ ನುಣುಚಿಕೊಂಡ ಚಿಹ್ನೆಗಳನ್ನು ಒಳಗೊಂಡಿದೆ"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "ಪಥದ ಹೆಸರು '%s' ಒಂದು ಪರಿಪೂರ್ಣವಾದ ಪಥವಲ್ಲ"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ಅಮಾನ್ಯವಾದ ಅತಿಥೇಯದ ಹೆಸರು"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "ಕಡತ ಕೋಶ '%s' ವನ್ನು ತೆರೆಯುವಲ್ಲಿ ದೋಷ: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu ಬೈಟ್‍ಗಳನ್ನು, \"%s\" ಕಡತವನ್ನು ಓದುವಂತೆ ನಿಯೋಜಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ಕಡತವನ್ನು ಓದುವಲ್ಲಿ ದೋಷ: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "ಕಡತ \"%s\" ವು ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' ಕಡತದಿಂದ ಓದುವಲ್ಲಿ ವಿಫಲತೆ: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' ಅನ್ನು ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' ಕಡತದಿಂದ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಪಡೆಯುವಲ್ಲಿ ವಿಫಲತೆ: fstat() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' ಕಡತವನ್ನು ಓದುವಲ್ಲಿ ವಿಫಲತೆ: fdopen() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' ಕಡತವನ್ನು '%s' ಕ್ಕೆ ಪುನರ್ ನಾಮಕರಣ ಮಾಡುವಲ್ಲಿ: g_rename() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' ಕಡತವನ್ನು ರಚಿಸುವಲ್ಲಿ ವಿಫಲತೆ: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"ಕಡತ '%s' ವನ್ನು ಬರೆಯಲು ಅನುವಾಗುವಣ್ತೆ ತೆರೆಯುವಲ್ಲಿ ವಿಫಲತೆ: fdopen() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ಕಡತ '%s'ವನ್ನು ಬರೆಯುವಲ್ಲಿ ವಿಫಲತೆ: fwrite() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ಕಡತ '%s'ವನ್ನು ಬರೆಯುವಲ್ಲಿ ವಿಫಲತೆ: fflush() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ಕಡತ '%s'ವನ್ನು ಬರೆಯುವಲ್ಲಿ ವಿಫಲತೆ: fsync()) ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ಕಡತ '%s' ವನ್ನು ಮುಚ್ಚುವಲ್ಲಿ ವಿಫಲತೆ: fclose() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ '%s' ಕಡತವನ್ನು ತೆಗೆದು ಹಾಕಲಾಗುವುದಿಲ್ಲ: g_unlink() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "ಮಾದರಿ '%s' ಅಮಾನ್ಯವಾಗಿದೆ, ಅದು ಒಂದು '%s' ಅನ್ನು ಹೊಂದಿರುವಂತಿಲ್ಲ"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "ಮಾದರಿ '%s' ಯು XXXXXX ಅನ್ನು ಹೊಂದಿಲ್ಲ"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "ಸಾಂಕೇತಿಕ ಲಿಂಕ್ '%s' ಅನ್ನು ಓದುವಲ್ಲಿ ವಿಫಲತೆ: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "ಸಾಂಕೇತಿಕ ಲಿಂಕುಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' ನಿಂದ '%s' ಗೆ ಪರಿವರ್ತಕವನ್ನು ತೆರೆಯಲು ಆಗಿಲ್ಲ: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string ನಲ್ಲಿ ಒಂದು ಹಗುರ ಓದನ್ನು ಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "ಪರಿವರ್ತಿತವಾಗದೆ ಬಾಕಿ ಉಳಿದ ದತ್ತಾಂಶಗಳು ಓದು-ಬಫರಿನಲ್ಲಿ"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "ಮಾರ್ಗವು ಒಂದು ಆಂಶಿಕ ಅಕ್ಷರದಲ್ಲಿ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end ನಲ್ಲಿ ಒಂದು ಹಗುರ ಓದನ್ನು ಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ಕಡತ '%s' ವನ್ನು ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ: ತೆರೆಯುವುದು() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' ವನ್ನು ನಕ್ಷೆ ಕಡತಮಾಡುವಲ್ಲಿ ವಿಫಲ: mmap() ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d ಸಾಲಿನ %d ಚಿಹ್ನೆಯಲ್ಲಿ ದೋಷ: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d ಸಾಲಿನಲ್ಲಿ ದೋಷ: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"ಖಾಲಿ ಘಟಕ '&;' ಕಂಡು ಬಂದಿದೆ; ಮಾನ್ಯ ನಮೂದುಗಳೆಂದರೆ: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"'%s' ವು ಒಂದು ಘಟಕದ ಹೆಸರಿನ ಒಂದು ಆರಂಭದಲ್ಲಿ ಇರುವಂತಿಲ್ಲ; & ಅಕ್ಷರವು ಒಂದು ಘಟಕದ "
+"ಆರಂಭದಲ್ಲಿರಬೇಕು ಇದರಿಂದ ಹೊರಬರಲು &amp; ಮಾಡಿ"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "ಒಂದು ಘಟಕದ ಹೆಸರಿನಲ್ಲಿ ಅಕ್ಷರ '%s' ವು ಮಾನ್ಯವಾದುದಲ್ಲ"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "ತಿಳಿದಿಲ್ಲದ ಘಟಕದ ಹೆಸರು '%s'"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"ಘಟಕವು ಒಂದು ಅರ್ಧವಿರಾಮ ಚಿಹ್ನೆಯಿಂದ ಕೊನೆಗೊಂಡಿಲ್ಲ; ಹೆಚ್ಚಿನ ಪಕ್ಷ ನೀವು ಒಂದು ಘಟಕವನ್ನು "
+"ಆರಂಭಿಸುವ ಉದ್ದೇಶವಿಲ್ಲದೇ ampersand ಅಕ್ಷರವನ್ನು ಬಳಸಿದ್ದೀರಿ - ampersand ನಿಂದ ಹೊರಬರಲು "
+"&amp; ಎಂದು ಮಾಡಿ"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' ಅನ್ನು parse ಮಾಡುವಲ್ಲಿ ವಿಫಲ, ಇದು ಒಂದು ಉಲ್ಲೇಖ ಅಕ್ಷರದ ಒಳಗಿನ ಒಂದು "
+"ಅಂಕಿಯಾಗಿರಬೇಕಿತ್ತು(&#234; ಉದಾಹರಣೆಗೆ) - ಬಹುಷಃ ಅಂಕಿಯು ಬಹಳ ದೊಡ್ಡದಾಗಿರಬೇಕು"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "ಅಕ್ಷರ ಉಲ್ಲೇಖ '%-.*s' ವು ಒಂದು ಅನುಮತಿ ಇರುವ ಅಕ್ಷರವನ್ನು encode ಮಾಡುವುದಿಲ್ಲ"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ಖಾಲಿ ಉಲ್ಲೇಖ ಅಕ್ಷರ; &#454; ನಂತಹ ಅಂಕಿಗಳನ್ನು ಒಳಗೊಂಡಿರಬೇಕು"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"ಅಕ್ಷರ ಉಲ್ಲೇಖವು ಒಂದು ಅರ್ಧವಿರಾಮ ಚಿಹ್ನೆಯಿಂದ ಕೊನೆಗೊಂಡಿಲ್ಲ; ಹೆಚ್ಚಿನ ಪಕ್ಷ ನೀವು ಒಂದು "
+"ಘಟಕವನ್ನು ಆರಂಭಿಸುವ ಉದ್ದೇಶವಿಲ್ಲದೇ ampersand ಅಕ್ಷರವನ್ನು ಬಳಸಿದ್ದೀರಿ - ampersand ನಿಂದ "
+"ಹೊರಬರಲು &amp; ಎಂದು ಮಾಡಿ"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ಪೂರ್ಣಗೊಳಿಸದ ಘಟಕ ಉಲ್ಲೇಖ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "ಪೂರ್ಣಗೊಳಿಸದ ಅಕ್ಷರ ಉಲ್ಲೇಖ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "ಅಮಾನ್ಯ UTF-8 ಎನ್ಕೋಡ್ ಆದ ಪಠ್ಯ - ಬಹಳ ಉದ್ದವಾದ ಅನುಕ್ರಮ"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "ಅಮಾನ್ಯ UTF-8 ಎನ್ಕೋಡ್ ಆದ ಪಠ್ಯ - ಒಂದು ಆರಂಭ char ಅಲ್ಲ"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "ಅಮಾನ್ಯ UTF-8 ಎನ್ಕೋಡ್ ಆದ ಪಠ್ಯ - ಮಾನ್ಯವಾದ '%s' ಅಲ್ಲ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ದಸ್ತಾವೇಜುಗಳು ಒಂದು ಅಂಶದಿಂದ ಆರಂಭಗೊಳ್ಳಬೇಕು (e.g. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' ಅಕ್ಷರವು ಬಂದ ನಂತರ, '%s' ವು ಒಂದು ಮಾನ್ಯವಲ್ಲದ ಅಕ್ಷರವಾಗಿದೆ; ಅದು ಒಂದು ಅಂಶದ ಹೆಸರನ್ನು "
+"ಆರಂಭಿಸದೇ ಇರಬಹುದು"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"ಸರಿಯಲ್ಲದ ಅಕ್ಷರ '%s', '%s' ಖಾಲಿ ಅಂಶದ ಟ್ಯಾಗಿನ ಆರಂಭವು ಒಂದು '>' ಅಕ್ಷರದಿಂದ "
+"ಕೊನೆಗೊಳ್ಳಬೇಕು ಎಂದು ಅಪೇಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"ಸರಿಯಲ್ಲದ ಅಕ್ಷರ '%s', '%s'ವು '%s' ಅಂಶದ ಗುಣಲಕ್ಷಣ ಹೆಸರಾಗಿದ್ದು ಅದರ ನಂತರ ಒಂದು '=' "
+"ಅನ್ನು ಅಪೇಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"ಸರಿಯಲ್ಲದ ಅಕ್ಷರ '%s', '%s' ಅಂಶದ ಟ್ಯಾಗಿನ ಆರಂಭವು ಒಂದು '>' ಅಥವ '/' ಅಕ್ಷರದಿಂದ "
+"ಕೊನೆಗೊಳ್ಳಬೇಕು ಎಂದು ಅಪೇಕ್ಷಿಸಲಾಗಿತ್ತು, ಅಥವ ಆಯ್ಕಾತ್ಮಕವಾಗಿ ಒಂದು ಗುಣಲಕ್ಷಣ; ಬಹುಷಃ ನೀವು "
+"ಅಮಾನ್ಯ ಅಕ್ಷರವನ್ನು ಒಂದು ಗುಣಲಕ್ಷಣದ ಹೆಸರಿನಲ್ಲಿ ಬಳಸಿದ್ದೀರೆಂದು ತೋರುತ್ತದೆ"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"ಸರಿಯಲ್ಲದ ಅಕ್ಷರ '%s', ಗುಣಲಕ್ಷಣ '%s'ವು '%s' ದ ಅಂಶವಾಗಿದ್ದು, ಇದಕ್ಕೆ ಒಂದು ಮೌಲ್ಯವನ್ನು "
+"ಕೊಡುವಾಗ ಸಮ ಚಿಹ್ನೆಯ ನಂತರ ಒಂದು ಮುಕ್ತ ಉದ್ಧರಣ ಚಿಹ್ನೆಯನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' ವು '</' ಗಳಂತಹ ಅಕ್ಷರಗಳ ನಂತರ ಬರುವ ಒಂದು ಮಾನ್ಯವಾದ ಅಕ್ಷರವಲ್ಲ; ಒಂದು ಅಂಶದ ಹೆಸರು '%"
+"s' ನಿಂದ ಆರಂಭಗೊಳ್ಳುವುದಿಲ್ಲ"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' ವು ಮುಚ್ಚಲ್ಪಟ್ಟ ಅಂಶ ಹೆಸರು '%s' ನಂತರ ಬರುವ ಒಂದು ಮಾನ್ಯವಾದ ಅಕ್ಷರವಲ್ಲ; '>' ವು "
+"ಅನುಮತಿ ಇರುವ ಅಕ್ಷರವಾಗಿರುತ್ತದೆ"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "ಅಂಶವು '%s' was closed, no element is currently open"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "ಅಂಶ '%s' ವು ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ, ಆದರೆ ಪ್ರಸ್ತುತ ಮುಕ್ತವಾಗಿರುವ ಅಂಶವೆಂದರೆ '%s' ಆಗಿದೆ"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ದಸ್ತಾವೇಜು ಖಾಲಿಯಾಗಿತ್ತು ಅಥವ ಕೇವಲ ಕೇವಲ ಖಾಲಿ ಜಾಗಗಳನ್ನು ಹೊಂದಿತ್ತು"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಮುಕ್ತ ಕೋನ ಆವರಣ ಚಿಹ್ನೆ '<' ಯ ನಂತರ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"ಅಂಶಗಳು ತೆರೆದಿರುವಾಗಲೇ ದಸ್ತಾವೇಜು ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ - '%s' ಯು ತೆರೆಯಲ್ಪಟ್ಟ "
+"ಕೊನೆಯ ಅಂಶ"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"ದಸ್ತಾವೇಜು ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ, <%s/> ಟ್ಯಾಗಿನ ಕೊನೆಯಲ್ಲಿ ಒಂದು ಮುಕ್ತ ಕೋನ ಆವರಣ "
+"ಚಿಹ್ನೆಯನ್ನು ಕಾಣಲು ಅಪೇಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಅಂಶದ ಹೆಸರಿನಲ್ಲಿ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಗುಣಲಕ್ಷಣ ಹೆಸರಿನಲ್ಲಿ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಅಂಶ ತೆರೆಯುವ ಟ್ಯಾಗಿನ ಒಳಗೆ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"ದಸ್ತಾವೇಜು ಒಂದು ಗುಣಲಕ್ಷಣದ ಹೆಸರಿನ ನಂತರದ ಸಮ ಚಿಹ್ನೆಯ ನಂತರ ಅನಿರೀಕ್ಷಿತವಾಗಿ "
+"ಕೊನೆಗೊಂಡಿದೆ; ಯಾವುದೇ ಗುಣಲಕ್ಷಣ ಮೌಲ್ಯವಿಲ್ಲ"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಗುಣಲಕ್ಷಣ ಮೌಲ್ಯದ ಒಳಗಿರುವಾಗ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಅಂಶ'%s'ದ ಮುಚ್ಚಲ್ಪಟ್ಟ ಟ್ಯಾಗಿನ ಒಳಗೆ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "ದಸ್ತಾವೇಜು ಒಂದು ಹೇಳಿಕೆ ಅಥವ ಪ್ರಕ್ರಿಯೆ ಸೂಚನೆಯ ಒಳಗೆ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಕೊನೆಗೊಂಡಿದೆ"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ಭ್ರಷ್ಟಗೊಂಡ ವಸ್ತು"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "ಆಂತರಿಕ ದೋಷ ಅಥವ ಭ್ರಷ್ಟಗೊಂಡ ವಸ್ತು"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ಮೆಮೊರಿ ಖಾಲಿಯಾಗಿದೆ"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "ಹಿಂಬಾಲಿಸುವ ಮಿತಿ ತಲುಪಿದೆ"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "ಆಂಶಿಕ ಹೊಂದಾಣಿಕೆಗೆ ಬೆಂಬಲಿತವಾಗದ ಅಂಶಗಳನ್ನು ಈ ವಿನ್ಯಾಸವು ಹೊಂದಿದೆ"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "ಆಂತರಿಕ ದೋಷ"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"ಆಂಶಿಕ ತಾಳೆಗೆ ಪರಿಸ್ಥಿತಿಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ ಆದ್ದರಿಂದ ಹಿಂಬದಿಯ ಉಲ್ಲೇಖಗಳನ್ನು ಬಳಸಲಾಗುವುದು"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "ರಿಕರ್ಶನ್ ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ಖಾಲಿ ಉಪಸಾಲುಗಳಿಗಾಗಿನ ಕಾರ್ಯಕ್ಷೇತ್ರದ ಮಿತಿಯನ್ನು ತಲುಪಲ್ಪಟ್ಟಿದೆ"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ಹೊಸಸಾಲು ಗುರುತುಗಳ ಅಮಾನ್ಯ ಸಂಯೋಜನೆ"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ಗೊತ್ತಿರದ ದೋಷ"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ನಮೂನೆಯ ಕೊನೆಯಲ್ಲಿ"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c ನಮೂನೆಯ ಕೊನೆಯಲ್ಲಿ"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ಗುರುತಿಸಲಾಗದ ಅಕ್ಷರಗಳು ಕಂಡುಬರುತ್ತವೆ \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "ಕೇಸ್-ಬದಲಾವಣೆಗಳ ಎಸ್ಕೇಪ್‍ಗಳಿಗೆ (\\l, \\L, \\u, \\U) ಅನುಮತಿ ಇಲ್ಲ"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} ಕ್ವಾಂಟಿಫೈರಿನಲ್ಲಿ ಸಂಖ್ಯೆಗಳು ಕ್ರಮದಲ್ಲಿ ಇಲ್ಲ"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} ಕ್ವಾಂಟಿಫಯರಿನಲ್ಲಿನ ಸಂಖ್ಯೆಯು ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "ಕ್ಯಾರೆಕ್ಟರ್ ವರ್ಗವು ಕೊನೆಗೊಳ್ಳಬೇಕಿದ್ದ ] ಕಾಣೆಯಾಗಿದೆ"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ಕ್ಯಾರೆಕ್ಟರ್ ವರ್ಗದಲ್ಲಿನ ಪಾರು ಅನುಕ್ರಮವು ಅಮಾನ್ಯವಾಗಿದೆ"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "ಕ್ಯಾರೆಕ್ಟರ್ ವರ್ಗದಲ್ಲಿ ವ್ಯಾಪ್ತಿಯು ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ಪುನರಾವರ್ತಿಸಲು ಏನೂ ಇಲ್ಲ"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? ನ ನಂತರ ಗುರುತಿಸಲಾಗದ ಅಕ್ಷರ"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< ಯ ನಂತರ ಗುರುತಿಸಲಾಗದ ಅಕ್ಷರ"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P ಯ ನಂತರ ಗುರುತಿಸಲಾಗದ ಅಕ್ಷರ"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX ಹೆಸರಿಸಲಾದ ವರ್ಗಗಳು ಕೇವಲ ಒಂದು ವರ್ಗದಲ್ಲಿ ಮಾತ್ರ ಬೆಂಬಲ ಹೊಂದಿರುತ್ತವೆ"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "ಕೊನೆಗೊಳಿಸುವ ) ಕಾಣೆಯಾಗಿದೆ"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ತೆರೆಯಲ್ಪಡದೆ ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ಅಥವ (?[+-] ಡಿಜಿಟ್‍ಗಳು ) ಅನ್ನು ಅನುಸರಿಸಬೇಕು"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "ಅಸ್ತಿತ್ವದಲ್ಲಿ ಇರದ ಉಪವಿನ್ಯಾಸದ ಉಲ್ಲೇಖ"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "ಕಮೆಂಟ್‍ನ ನಂತರ ) ವು ಕಾಣೆಯಾಗಿದೆ"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "ಸಾಮಾನ್ಯ ನಿರೂಪಣೆ ಬಹಳ ಉದ್ದವಾಗಿದೆ"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "ಮೆಮೊರಿಯನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ವಿಫಲವಾಗಿದೆ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "ಹಿಂದೆನೋಡು ಪ್ರತಿಪಾದನೆಯು ನಿಗದಿತ ಉದ್ದವನ್ನು ಹೊಂದಿಲ್ಲ"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( ನಂತರದ ಸಂಖ್ಯೆ ಅಥವ ಹೆಸರು ವಿರೂಪಗೊಂಡಿದೆ"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "ಶರತ್ತಿನ ಸಮೂಹವು ಎರಡಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಶಾಖೆಗಳನ್ನು ಹೊಂದಿದೆ"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( ನಂತರ ಪ್ರತಿಪಾದನೆಯನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ಗೊತ್ತಿರದ POSIX ವರ್ಗದ ಹೆಸರು"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "ಘಟಕಗಳ POSIX ಹೋಲಿಕೆಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} ಅನುಕ್ರಮದಲ್ಲಿನ ಅಕ್ಷರ ಮೌಲ್ಯವು ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ಸರಿಯಲ್ಲದ (?(0) ಸ್ಥಿತಿ"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "ಹಿಂದೆನೋಡು ಪ್ರತಿಪಾದನೆಯಲ್ಲಿ \\C ಗೆ ಅನುಮತಿ ಇಲ್ಲ"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "ಪುನರಾವರ್ತಿತ ಕರೆಯು ಅನಿರ್ದಿಷ್ಟವಾಗಿ ಆವರ್ತಿತಗೊಳ್ಳಬಹುದು"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ಉಪನಮೂನೆಯ ಹೆಸರಿನಲ್ಲಿ ಟರ್ಮಿನೇಟರ್ ಕಾಣಿಸುತ್ತಿಲ್ಲ"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "ಹೆಸರಿಸಲಾದ ಎರಡು ಉಪನಮೂನೆಗಳು ಒಂದೇ ಹೆಸರನ್ನು ಹೊಂದಿವೆ"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ವಿರೂಪಗೊಂಡ\\P ಅಥವ \\p ಅನುಕ್ರಮ"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P ಅಥವ \\p ಯ ನಂತರ ಗೊತ್ತಿರದ ಗುಣಲಕ್ಷಣದ ಹೆಸರು"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ಉಪನಮೂನೆಯ ಹೆಸರು ಬಹಳ ಉದ್ದವಾಗಿದೆ (ಗರಿಷ್ಟ 32 ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿರಬಹುದು)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "ಬಹಳಷ್ಟು ಹೆಸರಿಸಲ್ಪಟ್ಟ ಉಪನಮೂನೆಗಳು (ಗರಿಷ್ಟ 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "\\377 ಕ್ಕೂ ದೊಡ್ಡದಾದ ಆಕ್ಟಲ್ ಮೌಲ್ಯ"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಶಾಖೆಯನ್ನು ಹೊಂದಿರುವ ಸಮೂಹವನ್ನು DEFINE ಮಾಡು"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "ಒಂದು ಸಮೂಹವನ್ನು ಮತ್ತೆ ಮತ್ತೆ DEFINE ಮಾಡಲು ಅನುಮತಿ ಇಲ್ಲ"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "ಅಸಂಜಸವಾದ NEWLINE ಆಯ್ಕೆಗಳು"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g ದ ನಂತರ ಒಂದು ಬ್ರೇಸ್ ಆದ ಹೆಸರು ಅಥವ ಆಯ್ಕಾತ್ಮಕ ಬ್ರೇಸ್ ಆದಂತಹ ಶೂನ್ಯವಲ್ಲದ ಸಂಖ್ಯೆ ಇಲ್ಲ"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "ಅನಿರೀಕ್ಷಿತ ಪುನರಾವರ್ತನೆ"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "ಕೋಡ್ ಓವರ್-ಫ್ಲೋ"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "ಸಂಕಲಿಸುವ ಕಾರ್ಯಕ್ಷೇತ್ರವು overran ಆಗಿದೆ"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "ಈ ಮೊದಲು ಪರೀಕ್ಷಿಸಲಾದ ಉಲ್ಲೇಖ ಉಪವಿನ್ಯಾಸ ಕಂಡುಬಂದಿಲ್ಲ"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "ಸಾಮಾನ್ಯ ನಿರೂಪಣೆಯ %s ಅನ್ನು ಹೊಂದಾಣಿಸುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "UTF8 ಬೆಂಬಲವಿಲ್ಲದೆ PCRE ಭಂಡಾರವು ಸಂಕಲಿತಗೊಂಡಿದೆ"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "UTF8 ಗುಣಲಕ್ಷಣಗಳ ಬೆಂಬಲವಿಲ್ಲದೆ PCRE ಭಂಡಾರವು ಸಂಕಲಿತಗೊಂಡಿದೆ"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "ಸಾಮಾನ್ಯ ನಿರೂಪಣೆಯ %s ಅನ್ನು char %d ನಲ್ಲಿ ಸಂಕಲಿಸುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "ಸಾಮಾನ್ಯ ನಿರೂಪಣೆಯ %s ಅನ್ನು ಸರಳೀಕರಿಸುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "ಷೋಡ-ದಶಮಾನ ಅಂಕಿ ಅಥವ '}' ಅನ್ನು ಅಪೇಕ್ಷಿಸಲಾಗಿದೆ"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "ಷೋಡ-ದಶಮಾನ ಅಂಕಿಯನ್ನು ಅಪೇಕ್ಷಿಸಲಾಗಿದೆ"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "ಸಾಂಕೇತಿಕ ಉಲ್ಲೇಖದಲ್ಲಿ '<' ಕಾಣೆಯಾಗಿದೆ"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "ಅಪೂರ್ಣಗೊಂಡಿರುವ ಸಾಂಕೇತಿಕ ಉಲ್ಲೇಖ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "ಶೂನ್ಯ-ಉದ್ದದ ಸಾಂಕೇತಿಕ ಉಲ್ಲೇಖ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "ಅಪೇಕ್ಷಿತ ಅಂಕಿ"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ನಿಯಮ ಬಾಹಿರವಾದ ಸಾಂಕೇತಿಕ ಉಲ್ಲೇಖ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "ಅಪರೂಪದ ಅಂತ್ಯ '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ಗೊತ್ತಿರದ ಪಾರು ಅನುಕ್ರಮ"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "ಬದಲಾಯಿಸಲ್ಪಟ್ಟ ಪಠ್ಯ \"%s\"ಅನ್ನು char %lu ನಲ್ಲಿ ಪಾರ್ಸಿಂಗ್ ಮಾಡುವಾಗಿನ ದೋಷ: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ಉದ್ಧರಿತ ಪಠ್ಯವು ಒಂದು ಉದ್ಧರನ ಚಿಹ್ನೆಯಿಂದ ಆರಂಭಗೊಳ್ಳುವುದಿಲ್ಲ"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"ಆಜ್ಞಾ ಸಾಲಿನಲ್ಲಿ ಅಥವ ಇತರೆ ಶೆಲ್ಲಿನಲ್ಲಿ ಉದ್ಧರಿಸಲಾದ ಪಠ್ಯದಲ್ಲಿ ತಾಳೆಯಾಗದ ಉದ್ಧರಣಚಿಹ್ನೆಗಳು"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "ಪಠ್ಯವು ಒಂದು '\\' ಅಕ್ಷರದ ನಂತರ ಅಂತ್ಯಗೊಂಡಿತು. (ಪಠ್ಯವು '%s' ಆಗಿತ್ತು)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c ಗಾಗಿನ  (ಪಠ್ಯವು '%s' ಆಗಿತ್ತು)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ಪಠ್ಯವು ಖಾಲಿಯಾಗಿತ್ತು (ಅಥವ ಕೇವಲ ಖಾಲಿಜಾಗಗಳನ್ನು ಹೊಂದಿತ್ತು)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "child ಪ್ರಕ್ರಿಯೆಯಿಂದ ದತ್ತಾಂಶವನ್ನು ಓದುವಲ್ಲಿ ವಿಫಲತೆ ಎದುರಾಗಿದೆ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "ಉಪ ಪ್ರಕ್ರಿಯೆಯೊಂದಿಗೆ ಸಂವಹನಕ್ಕೆ ಪೈಪನ್ನು ರಚಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "child pipe (%s) ನಿಂದ ಓದುವಲ್ಲಿ ವಿಫಲತೆ"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' ಕೋಶಕ್ಕೆ ಬದಲಾಯಿಸುವಲ್ಲಿ ವಿಫಲತೆ ಎದುರಾಗಿದೆ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "child ಪ್ರಕ್ರಿಯೆ (%s) ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಲ್ಲಿ ವಿಫಲತೆ"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "ಅಮಾನ್ಯವಾದ ಪ್ರೋಗ್ರಾಂ ಹೆಸರು: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d ದಲ್ಲಿರುವ ಆರ್ಗ್ಯುಮೆಂಟ್ ವೆಕ್ಟರಿನಲ್ಲಿನ ಅಮಾನ್ಯ ಸಾಲು: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "ಪರಿಸರದಲ್ಲಿನ ಅಮಾನ್ಯ ಸಾಲು: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "ಅಮಾನ್ಯ ಕಾರ್ಯಕಾರಿ ಕೋಶ: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "ಸಹಾಯಕ ಪ್ರೊಗ್ರಾಂ (%s) ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಲ್ಲಿ ವಿಫಲತೆ"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"child ಪ್ರಕ್ರಿಯೆ ಯಿಂದ ದತ್ತಾಂಶವನ್ನು ಓದುವಾಗ g_io_channel_win32_poll() ನಲ್ಲಿ ಅನಪೇಕ್ಷಿತ "
+"ದೋಷ"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "child ಪ್ರಕ್ರಿಯೆ (%s) ಯಿಂದ ದತ್ತಾಂಶವನ್ನು ಓದುವಲ್ಲಿ ವಿಫಲ"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "child ಪ್ರಕ್ರಿಯೆ (%s) ಯಿಂದ ದತ್ತಾಂಶವನ್ನು ಓದುವಾಗ select() ನಲ್ಲಿ ಅನಪೇಕ್ಷಿತ ದೋಷ"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() ನಲ್ಲಿ ಅನಪೇಕ್ಷಿತ ದೋಷ (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "ಕವಲೊಡೆಸುವಲ್ಲಿ ವಿಫಲತೆ (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "child ಪ್ರಕ್ರಿಯೆ \"%s\" (%s) ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಲ್ಲಿ ವಿಫಲತೆ ಎದುರಾಗಿದೆ"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"child ಪ್ರಕ್ರಿಯೆಯ ಆದಾನ ಅಥವ ಪ್ರದಾನವನ್ನು ಪುನರ್ನಿರ್ದೇಶಿಸುವಲ್ಲಿ ವಿಫಲತೆ ಎದುರಾಗಿದೆ (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "child ಪ್ರಕ್ರಿಯೆಯನ್ನು ಕವಲೊಡೆಯಲು ವಿಫಲಗೊಂಡಿದೆ (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "child ಪ್ರಕ್ರಿಯೆ \"%s\" ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಾಗ ಗೊತ್ತಿರದ ದೋಷ"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "child pid pipe (%s) ಇಂದ ಸಾಕಷ್ಟು ದತ್ತಾಂಶವನ್ನು ಓದುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "ಅಕ್ಷರವು UTF-8 ನ ವ್ಯಾಪ್ತಿ ಇಂದ ಹೊರಗಿದೆ"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "ಆದಾನ ಪರಿವರ್ತನೆಯಲ್ಲಿ ಅಮಾನ್ಯ ಅನುಕ್ರಮ"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "ಅಕ್ಷರವು UTF-16 ನ ವ್ಯಾಪ್ತಿ ಇಂದ ಹೊರಗಿದೆ"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ಬಳಕೆ:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "ಸಹಾಯ ಆಯ್ಕೆಗಳು:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "ಸಹಾಯ ಆಯ್ಕೆಯನ್ನು ತೋರಿಸು"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "ಎಲ್ಲಾ ಸಹಾಯ ಅಂಶಪಟ್ಟಿಯನ್ನು ತೋರಿಸು"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "ಅನ್ವಯದ ಆಯ್ಕೆಗಳು:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr " for %s ಕ್ಕಾಗಿನ ಪೂರ್ಣಾಂಕ ಮೌಲ್ಯ '%s' ಅನ್ನು ಶಬ್ಧಲಕ್ಷಣ ಹೇಳಲಾಗಿಲ್ಲ"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%s ಕ್ಕಾಗಿನ ಪೂರ್ಣಾಂಕ ಮೌಲ್ಯ '%s' ವು ವ್ಯಾಪ್ತಿಯಿಂದ ಹೊರಗಿದೆ"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%s' ದ %s ಕ್ಕಾಗಿನ ದ್ವಿಮೌಲ್ಯವನ್ನು parse ಮಾಡಲಾಗಿಲ್ಲ"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%s ಕ್ಕಾಗಿನ '%s' ದ್ವಿ ಮೌಲ್ಯವು ವ್ಯಾಪ್ತಿಯಿಂದ ಹೊರಗಿದೆ"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s ಆಯ್ಕೆಯ ಶಬ್ಧಲಕ್ಷಣವನ್ನು ಹೇಳುವಾಗ ದೋಷ"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s ಗೆ ಆರ್ಗ್ಯುಮೆಂಟ್ ಕಾಣುತ್ತಿಲ್ಲ"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "ಗೊತ್ತಿರದ ಆಯ್ಕೆ %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "ಹುಡುಕು ಕೋಶದಲ್ಲಿ ಮಾನ್ಯ ಕೀಲಿ ಪತ್ತೆಯಾಗಿಲ್ಲ"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ಒಂದು ಸಾಮಾನ್ಯ ಕಡತವಲ್ಲ"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ಕಡತವು ಖಾಲಿ ಇದೆ"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"ಕೀಲಿ ಕಡತವು '%s' ಸಾಲನ್ನು ಹೊಂದಿದೆ, ಇದು ಒಂದು ಕೀಲಿ-ಮೌಲ್ಯ ಜೋಡಿ, ಸಮೂಹ, ಅಥವ ಹೇಳಿಕೆಯಲ್ಲ"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "ಅಮಾನ್ಯ ಸಮೂಹ ಹೆಸರು: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "ಕೀಲಿ ಕಡತವು ಒಂದು ಸಮೂಹದೊಂದಿಗೆ ಆರಂಭಗೊಳ್ಳುವುದಿಲ್ಲ"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "ಅಮಾನ್ಯ ಕೀಲಿ ಹೆಸರು: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "ಕೀಲಿ ಕಡತವು ಬೆಂಬಲಿತವಲ್ಲದ encoding '%s'ಅನ್ನು ಹೊಂದಿದೆ"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "ಕೀಲಿ ಕಡತವು ಸಮೂಹ '%s'ವನ್ನು ಹೊಂದಿಲ್ಲ"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "ಕೀಲಿ ಕಡತವು ಕೀಲಿ '%s'ಯನ್ನು ಹೊಂದಿಲ್ಲ"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"ಕೀಲಿ ಕಡತವು ಕೀಲಿ '%s'ಯನ್ನು ಹೊಂದಿದ್ದು ಅದು UTF-8 ಅಲ್ಲದ ಮೌಲ್ಯವಾದ '%s'ವನ್ನು ಹೊಂದಿದೆ "
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "ಕೀಲಿ ಕಡತವು ಕೀಲಿ '%s'ಯನ್ನು ಹೊಂದಿದ್ದು ಅದು ಮೌಲ್ಯವನ್ನು ವಿವರಿಸಲಾಗುವುದಿಲ್ಲ."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"ಕೀಲಿ ಕಡತವು ಕೀಲಿ '%s'ಯನ್ನು ಹೊಂದಿದ್ದು ಅದು ಸಮೂಹ '%s'ದ್ದಾಗಿದ್ದು ಹಾಗು ಅದರ ಮೌಲ್ಯವನ್ನು "
+"ವಿವರಿಸಲಾಗುವುದಿಲ್ಲ."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "ಕೀಲಿ ಕಡತವು ಕೀಲಿ'%s' ಯನ್ನು ಗುಂಪು '%s'ನಲ್ಲಿ ಹೊಂದಿಲ್ಲ"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "ಕೀಲಿ ಕಡತವು ಸಾಲಿನ ಕೊನೆಯಲ್ಲಿ ಪಾರು ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿದೆ"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "ಕೀಲಿ ಕಡತವು ಅಮಾನ್ಯ ಪಾರು ಅನುಕ್ರಮವನ್ನು ಹೊಂದಿದೆ '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "ಮೌಲ್ಯ '%s' ವನ್ನು ಒಂದು ಸಂಖ್ಯೆಯಾಗಿ ಸೂಚಿಸಲು ಆಗುವುದಿಲ್ಲ."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ಪೂರ್ಣಾಂಕ ಮೌಲ್ಯ '%s' ವು ವ್ಯಾಪ್ತಿಯನ್ನು ಮೀರಿದೆ"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "ಮೌಲ್ಯ '%s' ವನ್ನು ಒಂದು ತೇಲು ಸಂಖ್ಯೆ ಆಗಿ ವಿವರಿಸಲು ಆಗುವುದಿಲ್ಲ."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "ಮೌಲ್ಯ '%s' ವನ್ನು ಒಂದು ಬೂಲಿಯನ್ ಆಗಿ ವಿವರಿಸಲು ಆಗುವುದಿಲ್ಲ."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s ಗೆ ಬಹಳ ದೊಡ್ಡದಾದ ಎಣಿಕೆ ಮೌಲ್ಯವನ್ನು ರವಾನಿಸಲಾಗಿದೆ"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "ಸ್ಟ್ರೀಮ್ ಈಗಾಗಲೆ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "ಕಾರ್ಯವು ರದ್ದುಗೊಂಡಿದೆ"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "ಗೊತ್ತಿರದ ಬಗೆ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s ಕಡತದ ಬಗೆ"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s ಬಗೆ"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "ಸ್ಟ್ರೀಮ್‍ನ ಅನಿರೀಕ್ಷಿತ ಕ್ಷಿಪ್ರ ಅಂತ್ಯ"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "ಹೆಸರಿಸಲಾಗದ"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ಗಣಕತೆರೆ ಕಡತವು Exec ಕ್ಷೇತ್ರವನ್ನು ಸೂಚಿಸಿಲ್ಲ"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "ಅನ್ವಯಕ್ಕೆ ಅಗತ್ಯವಿರುವ ಟರ್ಮಿನಲ್‍ ಅನ್ನು ಪತ್ತೆಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ಬಳಕೆದಾರ ಅನ್ವಯ ಸಂರಚನಾ ಫೋಲ್ಡರ್ %s ಅನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ಬಳಕೆದಾರ MIME ಸಂರಚನಾ ಫೋಲ್ಡರ್ %s ಅನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ಬಳಕೆದಾರನ ಡೆಸ್ಕ್‍ಟಾಪ್ ಕಡತ %s ಅನ್ನು ತೆರೆಯಲಾಗಿಲ್ಲ"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s ಗಾಗಿನ ಕಸ್ಟಮ್ ವಿವರಣೆ"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ಹೊರತಳ್ಳುವುದನ್ನು ಡ್ರೈವ್ ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ಮಾಧ್ಯಮಕ್ಕಾಗಿ ಪೋಲ್ ಮಾಡುವುದನ್ನು ಡ್ರೈವ್ ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem ಎನ್ಕೋಡಿಂಗ್‌ನ ಆವೃತ್ತಿ %d ಅನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem ಎನ್ಕೋಡಿಂಗಿನಲ್ಲಿ ತಪ್ಪಾದ ಸಂಖ್ಯೆಯ ಟೋಕನ್‌ಗಳು (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ಎನ್ಕೋಡಿಂಗ್‌ನ ಆವೃತ್ತಿ %d ಅನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ಎನ್ಕೋಡಿಂಗಿನಲ್ಲಿ ತಪ್ಪಾದ ಸಂಖ್ಯೆಯ ಟೋಕನ್‌ಗಳು (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon ಗಾಗಿ GEmblem ಅನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿತ್ತು"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ಕಾರ್ಯವು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "ಹೊಂದಿರುವ ಮೌಂಟ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ಕೋಶಕ್ಕೆ ನಕಲಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ಕೋಶವನ್ನು ಕೋಶಕ್ಕೆ ನಕಲಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "ಸೂಚಿತ ಕಡತವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ಕೋಶವನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ ನಕಲಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "ವಿಶೇಷ ಕಡತವನ್ನು ಕಾಪಿ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "ಅಮಾನ್ಯವಾದ ಸಿಮ್‍ಲಿಂಕ್ ಮೌಲ್ಯವನ್ನು ಒದಗಿಸಲಾಗಿದೆ"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ಟ್ರ್ಯಾಶ್ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ಕಡತದ ಹೆಸರುಗಳು '%c' ಅನ್ನು ಹೊಂದುವಂತಿಲ್ಲ"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ಪರಿಮಾಣವು ಆರೋಹಿಸುವುದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ಈ ಪುಟವನ್ನು ನಿಭಾಯಿಸಲು ಯಾವುದೆ ಅನ್ವಯವು ಅನುಸ್ಥಾಪಿತಗೊಂಡಿಲ್ಲ"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ಎನ್ಯುಮರೇಟರ್ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ಕಡತ ಎನ್ಯುಮರೇಟರಿನಲ್ಲಿ ಕಾರ್ಯವು ಬಾಕಿ ಇದೆ"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ಕಡತ ಎನ್ಯುಮರೇಟರ್ ಈಗಾಗಲೆ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ಕಡತ"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "ಕಡತವು ಒಂದು ಚಿಹ್ನೆಯನ್ನು ಹೊಂದಿದೆ"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon ಎನ್ಕೋಡಿಂಗ್‌ನ ಆವೃತ್ತಿ %d ಅನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon ಗಾಗಿನ ತಪ್ಪಾದ ಇನ್‌ಪುಟ್ ದತ್ತಾಂಶ"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "ಸ್ಟ್ರೀಮ್ query_info ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "ಸ್ಟ್ರೀಮ್‍ನಲ್ಲಿ ಕೋರುವುದು (seek) ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "ಆದಾನ ಸ್ಟ್ರೀಮ್‍ನಲ್ಲಿ ಕಡಿತಗೊಳಿಸಲು ಅನುಮತಿಯ ಇಲ್ಲ"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "ಸ್ಟ್ರೀಮ್‍ನಲ್ಲಿ ಕಡಿತಗೊಳಿಸಲು ಅನುಮತಿಯ ಇಲ್ಲ"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "ಟೋಕನ್‌ಗಳ ತಪ್ಪಾದ ಸಂಖ್ಯೆ (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "ವರ್ಗದ ಹೆಸರು %s ಗೆ ಪ್ರಕಾರವಿಲ್ಲ"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "ಪ್ರಕಾರ %s ವು GIcon ಸಂಪರ್ಕಸಾಧನವನ್ನು ಅನ್ವಯಿಸುವುದಿಲ್ಲ"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "ಪ್ರಕಾರ %s ಅನ್ನು ವರ್ಗವಾಗಿಸಿಲ್ಲ"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "ತಪ್ಪಾದ ಆವೃತ್ತಿ ಸಂಖ್ಯೆ: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "ಪ್ರಕಾರ %s ವು from_tokens() ಅನ್ನು GIcon ಸಂಪರ್ಕಸಾಧನದ ಮೇಲೆ ಅನ್ವಯಿಸುವುದಿಲ್ಲ"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "ಒದಗಿಸಲಾದ ಚಿಹ್ನೆಯ ಎನ್ಕೋಡಿಂಗ್ ಅನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ಆದಾನ ಸ್ಟ್ರೀಮ್‍ನಲ್ಲಿ ಓದುವುದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "ಸ್ಟ್ರೀಮ್‍ನಲ್ಲಿ ಕಾರ್ಯವು ಬಾಕಿ ಇದೆ"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "ಪೂರ್ವನಿಯೋಜಿತವಾದ ಕೋಶ ಮೇಲ್ವಿಚಾರಕ ಬಗೆಯನ್ನು ಪತ್ತೆ ಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "ಅಮಾನ್ಯ ಕಡತದ ಹೆಸರು %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ಕಡತವ್ಯವಸ್ಥೆಯ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ಮೂಲ ಕಡತಕೋಶದ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ಕಡತದ ಹೆಸರನ್ನು ಬದಲಾಯಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ಕಡತದ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಲಿಲ್ಲ, ಈ ಹೆಸರಿನ ಕಡತವು ಈಗಾಗಲೆ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "ಅಮಾನ್ಯ ಕಡತದ ಹೆಸರು"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ಕಡತವನ್ನು ತೆರೆಯುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ಕೋಶವನ್ನು ತೆರೆಯಲಾಗಿಲ್ಲ"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ಕಡತವನ್ನು ತೆಗೆದು ಹಾಕುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ಕಡತವನ್ನು ಕಸದ ಬುಟ್ಟಿಗೆ ವರ್ಗಾಯಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ಕಸದ ಬುಟ್ಟಿ ಕೋಶ %s ಅನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ಕಸದ ಬುಟ್ಟಿಗಾಗಿ ಮೇಲ್ಮಟ್ಟದ ಕೋಶವನ್ನು ಪತ್ತೆಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ಕಸದ ಬುಟ್ಟಿ ಕಡತಕೋಶವನ್ನು ಪತ್ತೆಮಾಡಲು ಅಥವ ರಚಿಸಲಾಗಿಲ್ಲ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ಟ್ರ್ಯಾಶಿಂಗ್ ಮಾಹಿತಿ ಕಡತವನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ಕಡತವನ್ನು ಟ್ರ್ಯಾಶ್ ಮಾಡುವಲ್ಲಿ ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ಕಡತ ಕೋಶವನ್ನು ರಚಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "ಸಾಂಕೇತಿಕ ಕೊಂಡಿಯನ್ನು ಮಾಡುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ಕಡತವನ್ನು ಸ್ಥಳಾಂತರಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ಕೋಶವನ್ನು ಇನ್ನೊಂದು ಕೋಶಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಲಾಗುವುದಿಲ್ಲ"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "ಬ್ಯಾಕ್ ಕಡತವನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ ವಿಫಲತೆ"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "ಸೂಚಿತ ಕಡತವನ್ನು ತೆಗೆದು ಹಾಕುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "ಎರಡು ಆರೋಹಣ ತಾಣಗಳ ನಡುವೆ ವರ್ಗಾಯಿಸುವುದು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "ವೈಶಿಷ್ಟ್ಯದ ಮೌಲ್ಯವು ಶೂನ್ಯವಲ್ಲದುದಾಗಿರಬೇಕು"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "ಅಮಾನ್ಯವಾದ ವೈಶಿಷ್ಟ್ಯದ ಬಗೆ (ನಿರೀಕ್ಷಿತ ಸಾಲು)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "ಅಮಾನ್ಯವಾದ ವಿಸ್ತರಿಸಲ್ಪಟ್ಟ ವೈಶಿಷ್ಟ್ಯದ ಹೆಸರು"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "ವಿಸ್ತರಿಸಲ್ಪಟ್ಟ ವೈಶಿಷ್ಟ್ಯ '%s' ಅನ್ನು ಹೊಂದಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' ಕಡತವನ್ನು ವ್ಯಕ್ತಪಡಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ಅಮಾನ್ಯ ಸಂಕೇತಿಕರಣ)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ಕಡತ ಡಿಸ್ಕ್ರಿಪ್ಟರನ್ನು ವ್ಯಕ್ತಪಡಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "ಅಮಾನ್ಯವಾದ ವೈಶಿಷ್ಟ್ಯದ ಬಗೆ (uint32 ಅನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿತ್ತು)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "ಅಮಾನ್ಯವಾದ ವೈಶಿಷ್ಟ್ಯದ ಬಗೆ (uint64 ಅನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿತ್ತು)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "ಅಮಾನ್ಯವಾದ ವೈಶಿಷ್ಟ್ಯದ ಬಗೆ (ಬೈಟ್ ಸಾಲನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿತ್ತು)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "ಅನುಮತಿಗಳನ್ನು ಹೊಂದಿಸುವಾಗ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "ಮಾಲಿಕನನ್ನು ಹೊಂದಿಸುವಾಗ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "ಸಾಂಕೇತಿಕಕೊಂಡಿಯು ಶೂನ್ಯವಾಗಿರುವಂತಿಲ್ಲ"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "ಸಾಂಕೇತಿಕ ಕೊಂಡಿಯನ್ನು ಹೊಂದಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "ಸಾಂಕೇತಿಕ ಕೊಂಡಿಯನ್ನು ಹೊಂದಿಸುವಲ್ಲಿ ದೋಷ: ಕಡತವು ಒಂದು ಸಾಂಕೇತಿಕಕೊಂಡಿಯಾಗಿಲ್ಲ"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux ಸನ್ನಿವೇಶವು NULL ಆಗಿರಬಾರದು"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux ಸನ್ನಿವೇಶವನ್ನು ಹೊಂದಿಸುವಾಗ ದೋಷ: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "ಈ ಗಣಕದಲ್ಲಿ SELinux ಶಕ್ತವಾಗಿಲ್ಲ"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿಸುವುದು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ಕಡತದಿಂದ ಓದುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ಕಡತದಲ್ಲಿ ಕೋರುವಾಗ ದೋಷ: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ಕಡತವನ್ನು ಮುಚ್ಚುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "ಪೂರ್ವನಿಯೋಜಿತವಾದ ಸ್ಥಳೀಯ ಕಡತ ಮೇಲ್ವಿಚಾರಕದ ಬಗೆಯನ್ನು ಪತ್ತೆ ಮಾಡಲಾಗಿಲ್ಲ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ಕಡತಕ್ಕೆ ಬರೆಯುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "ಹಳೆಯ ಬ್ಯಾಕ್ಅಪ್ ಕೊಂಡಿಯನ್ನು ತೆಗೆದುಹಾಕುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ಬ್ಯಾಕ್ಅಪ್ ಪ್ರತಿಯನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ತಾತ್ಕಾಲಿಕ ಕಡತದ ಹೆಸರನ್ನು ಬದಲಾಯಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "ಕಡತವನ್ನು ಟ್ರಂಕೇಟ್‍ ಮಾಡುವಲ್ಲಿ ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' ಕಡತವನ್ನು ತೆರೆಯುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "ಸೂಚಿತ ಕಡತವು ಒಂದು ಕೋಶವಾಗಿದೆ"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "ಸೂಚಿತ ಕಡತವು ಒಂದು ಸಾಮಾನ್ಯ ಕಡತವಲ್ಲ"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ಕಡತವು ಹೊರಗಿನಿಂದ ಮಾರ್ಪಡಿಸಲ್ಪಟ್ಟಿದೆ"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "ಹಳೆಯ ಕಡತವನ್ನು ತೆಗೆದು ಹಾಕುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "ಅಮಾನ್ಯವಾದ GSeekType ಅನ್ನು ಒದಗಿಸಲಾಗಿದೆ"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "ಅಮಾನ್ಯವಾದ ಕೋರಿಕೆ"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream ಅನ್ನು ಕಡಿತಗೊಳಿಸಲಾಗಿಲ್ಲ"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "ಗರಿಷ್ಟ ದತ್ತಾಂಶ ಅರೆ(array) ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "ಮೆಮೊರಿ ಪ್ರದಾನ ಸ್ಟ್ರೀಮ್ ಪುನರ್ ಗಾತ್ರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "ಮೆಮೊರಿ ಪ್ರದಾನ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಪುನರ್ ಗಾತ್ರಿಸುವಲ್ಲಿ ವಿಫಲತೆ ಉಂಟಾಗಿದೆ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "ಆರೋಹಣವು ಅವರೋಹಣವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "ಆರೋಹಣವು ಹೊರತೆಗೆಯುವುದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "ಆರೋಹಣವು ಪುನಃ ಆರೋಹಿಸುವುದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "ಆರೋಹಣವು ವಿಷಯದ ಬಗೆಯ ಊಹೆಯನ್ನು ಅನ್ವಯಿಸುವುದಿಲ್ಲ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "ಆರೋಹಣವು ಹೊಂದಿಕೊಳ್ಳುವ ವಿಷಯದ ಬಗೆಯ ಊಹೆಯನ್ನು ಅನ್ವಯಿಸುವುದಿಲ್ಲ"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "ಪ್ರದಾನ ಸ್ಟ್ರೀಮ್ ಬರೆಯುವುದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "ಮೂಲ ಸ್ಟ್ರೀಮ್ ಈಗಾಗಲೆ ಮುಚ್ಚಲ್ಪಟ್ಟಿದೆ"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "ಹೆಸರು"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "ಚಿಹ್ನೆಯ ಹೆಸರು"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "ಹೆಸರುಗಳು"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "ಚಿಹ್ನೆಯ ಹೆಸರುಗಳನ್ನು ಹೊಂದಿರುವ ವ್ಯೂಹ"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "ಪೂರ್ವನಿಯೋಜಿತ ಹಿಮ್ಮರಳಿಕೆಯನ್ನು ಬಳಸು"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' ಅಕ್ಷರಗಳಲ್ಲಿನ ಹೆಸರುಗಳನ್ನು ಸಂಕ್ಷಿಪ್ತಗೊಳಿಸುವುದರಿಂದ ದೊರೆಯುವ ಪೂರ್ವನಿಯೋಜಿತ "
+"ಹಿಮ್ಮರಳಿಕೆಯನ್ನು ಬಳಸಬೇಕೆ. ಅನೇಕ ಹೆಸರುಗಳನ್ನು ಒದಗಿಸಿದ್ದಲ್ಲಿ, ಮೊದಲನೆಯದರ ನಂತರ "
+"ಉಳಿದವುಗಳನ್ನು ಆಲಕ್ಷಿಸಲಾಗುತ್ತದೆ."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon ಎನ್ಕೋಡಿಂಗ್‌ನ ಆವೃತ್ತಿ %d ಅನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ಕಡತದ ವಿವರಣೆಗಾರ"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "ಓದಬೇಕಿರುವ ಕಡತದ ವಿವರಣೆಗಾರ"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ಕಡತ ವಿವರಣೆಗಾರನನ್ನು ಮುಚ್ಚು"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "ಸ್ಟ್ರೀಮನ್ನು ಮುಚ್ಚಿದಾಗ ಕಡತದ ವಿವರಣೆಗಾರನನ್ನು ಮುಚ್ಚಬೇಕೆ"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "ಯುನಿಕ್ಸ್‍ನಿಂದ ಓದುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "ಯುನಿಕ್ಸ್ ಅನ್ನು ಮುಚ್ಚುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ಕಡತವ್ಯವಸ್ಥೆ ಮೂಲ"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "ಬರೆಯಬೇಕಿರುವ ಕಡತದ ವಿವರಣೆಗಾರ"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "ಯುನಿಕ್ಸ್‍ಗೆ ಬರೆಯುವಲ್ಲೆ ದೋಷ: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ಪರಿಮಾಣವು ಹೊರ ತಳ್ಳುವುದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವುದಿಲ್ಲ"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "ಅನ್ವಯವನ್ನು ಪತ್ತೆಮಾಡಲಾಗುವುದಿಲ್ಲ"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "ಅನ್ವಯವನ್ನು ಆರಂಭಿಸುವಲ್ಲಿ ದೋಷ: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI ಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 ನಲ್ಲಿ ಅಸೋಸಿಯೇಶನ್ ಬದಲಾವಣೆಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 ನಲ್ಲಿ ಅಸೋಸಿಯೇಶನ್ ರಚನೆಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ನಮೂದುಗಳನ್ನು ಅಡಗಿಸಬೇಡ"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "ದೊಡ್ಡದಾದ ಪಟ್ಟಿಯ ನಮೂನೆಯನ್ನು ಬಳಸು"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..70ebc7e
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,1879 @@
+# glib Korean messages
+# This file is distributed under the same license as the glib package.
+#
+# Young-Ho Cha <ganadist@chollian.net>, 2002.
+# Eunju Kim <eukim@redhat.com>, 2007.
+# Changwoo Ryu <cwryu@debian.org>, 2002, 2004-2006, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-26 15:45+0900\n"
+"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
+"Language-Team: GNOME Korea <gnome-kr-hackers@lists.kldp.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "예상치 못하게 '%2$s' 엘리먼트에 '%1$s' 애트리뷰트가 있습니다"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%2$s' 엘리먼트에 '%1$s' 애트리뷰트가 없습니다"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "예상치 못하게 '%s' 태그가 있습니다. '%s' 태그가 있어야 합니다"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "예상치 못하게 '%2$s' 안에 '%1$s' 태그가 있습니다"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "데이터 디렉토리에 올바른 북마크 파일이 없습니다"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "'%s' URL에 대한 북마크가 이미 있습니다"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "'%s' URL에 대한 북마크가 없습니다"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "'%s' URL에 대한 북마크에 MIME 타입이 없습니다"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "'%s' URL에 대한 북마크에 개인 플래그가 없습니다"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "'%s' URL에 대한 북마크에 그룹이 설정되어 있지 않습니다"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "이름이 '%s'인 어떤 프로그램도 '%s'에 대한 북마크를 등록하지 않았습니다"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "URI '%s'을(를) 사용해 '%s' 실행줄 확장하기에 실패했습니다"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "문자셋 '%s'에서 '%s'(으)로 변환은 지원되지 않습니다"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s'에서 '%s'(으)로 변환하는 변환기를 열 수 없습니다"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "변환 입력에서 잘못된 바이트 순서"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "변환중 오류: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "입력의 끝에서 부분적인 문자 순서"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "코드셋 '%2$s'에서 대체하는 '%1$s'(으)로 변환 못함"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s'은(는) \"file\" 스키마를 사용하는 절대 경로 URI가 아닙니다"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "로컬 파일 URI '%s'에는 '#'이 들어갈 수 없습니다"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s'이(가) 잘못되었습니다"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s'의 호스트 이름이 잘못되었습니다"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s'은(는) 잘못된 이스케이프 문자가 들어 있습니다"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "경로이름 '%s'은(는) 절대 경로가 아닙니다"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "잘못된 호스트 이름"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "디렉터리 '%s' 여는 중 오류 : %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "파일 \"%2$s\"을(를) 읽은 %1$lu 바이트를 할당할 수 없습니다"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "파일 '%s'을(를) 읽는 중 오류: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "파일 \"%s\"이(가) 너무 큽니다"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "파일 '%s'에서 읽기 실패 : %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "파일 '%s' 열기 실패 : %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "파일 '%s'의 속성을 가져오기 실패 : fstat() 실패: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "파일 '%s' 열기 실패: fdopen() 실패: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "파일 '%s'의 이름을 '%s'(으)로 바꾸는 데 실패: g_rename() 실패: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "파일 '%s' 만들기 실패: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "파일 '%s' 쓰기 용도로 열기 실패: fdopen() 실패: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "파일 '%s' 쓰기 실패: fwrite() 실패: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "파일 '%s' 쓰기 실패: fwrite() 실패: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "파일 '%s' 쓰기 실패: fwrite() 실패: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "파일 '%s' 닫기 실패: fclose() 실패: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "기존의 '%s' 파일을 지울 수 없습니다: g_unlink() 실패: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "템플리트 '%s'이(가) 잘못되었습니다, '%s'이(가) 들어 있으면 안 됩니다"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "템플리트 '%s'에 XXXXXX가 없습니다"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "심볼릭 링크 '%s' 읽기 실패: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "심볼릭 링크를 지원하지 않습니다"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "`%s'에서 `%s'(으)로 변환하는 변환기를 열 수 없음: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string으로 raw 읽기를 할 수 없습니다"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "읽기 버퍼에서 변환되지 않은 데이터를 남겨둠"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "일부 문자에서 채널 끝냄"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_endi로 raw 읽기를 할 수 없습니다"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "파일 '%s' 열기 실패: dopen() 실패: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "파일 '%s' 매핑 실패: mmap() 실패: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d째 줄 %d 문자에서 오류: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d째 줄에서 오류: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"비어있는 엔티티 '&;'를 찾았습니다; 올바른 엔티티는 : &amp; &quot; &lt; &gt; "
+"&apos; 입니다"
+
+# FIXME: "escape"라는 동사를 번역?
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"'%s' 문자는 엔티티 이름의 시작에 쓸 수 없는 문자입니다.  엔티티는 & 문자로 시"
+"작합니다.  이 & 기호가 엔티티에 사용되는 것이 아닌 경우에는, &amp; 라고 쓰십"
+"시오"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "문자 '%s'은(는) 엔티티 이름에서 올바르지 않습니다"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "엔티티 이름 '%s'이(가) 알려져 있지 않습니다"
+
+# FIXME: "escape"라는 동사를 번역?
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"엔티티가 세미콜론으로 끝나지 않습니다; 대부분의 경우 엔티티 시작에 사용하려"
+"고 하지 않은 곳에서 & 기호를 사용한 경우일 것입니다 - 이런 경우 &amp; 라고쓰"
+"십시오"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s'의 구문 해석에 실패했습니다.  문자 참조에는 숫자를 써야 합니다 (예를 "
+"들어 &#234;) - 숫자가 너무 클 수도 있습니다"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "문자 참조 '%-*s'에 대응되는 문자는 허용되지 않습니다"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "문자 참조가 비어 있습니다; &#454;처럼 숫자를 써야 합니다"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"문자 참조가 세미콜론으로 끝나지 않습니다; 대부분의 경우 엔티티 시작에 사용하"
+"려고 하지 않은 곳에서 & 기호를 사용한 경우일 것입니다 - 이런 경우 &amp; 라고"
+"쓰십시오"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "엔티티 참조가 미완성입니다"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "문자 참조가 미완성입니다"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "잘못된 UTF-8 인코딩된 텍스트 - 너무 시퀀스가 깁니다"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "잘못된 UTF-8 인코딩된 텍스트 - 시작 문자가 아닙니다"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "잘못된 UTF-8 인코딩된 텍스트 - '%s' 부분이 올바르지 않습니다"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "문서는 엘리먼트로 시작하여야 합니다 (예 <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s'은(는) '<' 문자 다음에 쓸 수 없습니다; 이 문자로는 엘리먼트 이름을 시작"
+"할 수 없습니다"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"이상한 문자 '%s'.  빈 엘리먼트 '%s' 태그를 끝내는 '>' 문자가 나타나야 합니다"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"이상한 문자 '%1$s'.  엘리먼트 '%3$s'의 애트리뷰트 이름 '%2$s' 다음에 '='이 나"
+"타나야 합니다"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"이상한 문자 '%s'.  엘리먼트 '%s'의 시작 태그를 끝내는 '>' 혹은 '/'가 나타나거"
+"나, 애트리뷰트가 나와야 합니다; 아마도 애트리뷰트 이름에 잘못된 문자를 쓴 경"
+"우일 것입니다"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"이상한 문자 '%1$s'.  엘리먼트 '%3$s'의 애트리뷰트 '%2$s'의 값을 부여할 때 = "
+"기호 다음에 따옴표가 나타나야 합니다"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s'은(는) '</' 다음에 쓸 수 있는 문자가 아닙니다; '%s'은(는) 엘리먼트 이름"
+"을 시작할 수 없습니다"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s'은(는) 엘리먼트 '%s'을(를) 닫은 다음에 쓸 수 있는 문자가 아닙니다; '>' 문"
+"자를 쓸 수 있습니다"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' 엘리먼트는 닫혔고, 현재 아무 엘리먼트도 열려 있지 않습니다"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' 엘리먼트는 닫혔고, 현재 열려 있는 엘리먼트는 '%s'입니다"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "문서가 비어있거나 공백문자만 들어 있습니다"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "'<' 바로 다음에 문서가 갑작스럽게 끝났습니다"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"엘리먼트가 열려 있는 상태로 문서가 갑작스럽게 끝났습니다 - 마지막에 열려 있"
+"던 엘리먼트는 '%s'입니다"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"문서가 갑작스럽게 끝났습니다.  <%s/> 태그를 끝내는 > 기호가 나타나야 합니다"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "엘리먼트 이름에서 문서가 갑작스럽게 끝났습니다"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "에트리뷰트 이름에서 문서가 갑작스럽게 끝났습니다"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "엘리먼트의 열기 태그 안에서 문서가 갑작스럽게 끝났습니다."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"애트리뷰트 이름 다음의 = 기호 다음에서 문서가 갑작스럽게 끝났습니다; 애트리뷰"
+"트 값이 없습니다"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "애트리뷰트 값 안에서 문서가 갑작스럽게 끝났습니다"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "엘리먼트 '%s'의 닫기 태그 안에서 문서가 갑작스럽게 끝났습니다"
+
+# FIXME: processing instruction?
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "주석문 혹은 처리 안내자 태그 안에서 문서가 갑작스럽게 끝났습니다"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "개체가 손상되었습니다"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "내부 오류 또는 개체가 손상되었습니다"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "메모리 부족"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "역추적 최대값에 도달했습니다"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "패턴 안에 부분 매치에서 지원하지 않는 항목이 들어 있습니다."
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "내부 오류"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "후위 참조를 조건으로 사용하면 부분 매치에서 지원하지 않습니다."
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "재귀 최대값에 도달했습니다"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "비어있는 부분 문자열에 대해 작업 공간 최대값에 도달했습니다"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "줄바꿈 플래그의 조합이 잘못되었습니다"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "알 수 없는 오류"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "패턴 끝에 \\\\"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "패턴 끝에 \\\\c"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "\\\\ 다음에 인식할 수 없는 문자"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"대소문자 바꾸기 이스케이프는 (\\\\l, \\\\L, \\\\u, \\\\U) 여기에서 허용하지 "
+"않습니다"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} 안에서 숫자가 순서를 벗어났습니다"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} 안에서 숫자가 너무 큽니다"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "문자 클래스에서 끝나는 ] 괄호가 빠졌습니다"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "문자 클래스에서 이스케이프 시퀀스가 잘못되었습니다"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "문자 클래스에서 범위가 순서를 벗어났습니다"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "반복할 사항 없음"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? 다음에 알 수 없는 문자"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< 다음에 알 수 없는 문자"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P 다음에 알 수 없는 문자"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX 네임드 클래스는 클래스 안에서만 지원합니다"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "끝나는 ) 괄호가 없습니다"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") 괄호가 여는 ( 괄호 없이 있습니다"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R 혹은 (?[+-]digits 다음에는 ) 괄호가 와야 합니다"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "없는 서브패턴을 참조합니다"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "주석 다음에 ) 괄호가 빠졌습니다"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "정규식이 너무 큽니다"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "메모리를 확보하는 데 실패했습니다"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "룩비하인드 어서션이 고정된 길이가 아닙니다"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( 다음에 숫자나 이름의 형식이 잘못되었습니다"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "조건문 그룹에 브랜치가 2개보다 많이 들어 있습니다"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( 다음에 어서션이 이와야 합니다"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "알 수 없는 POSIX 클래스 이름"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX 사전 순서 항목은 지원하지 않습니다"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} 시퀀스의 문자 값이 너무 큽니다"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "잘못된 조건문 (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C는 룩비하인드 어서션에서 사용할 수 없습니다"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "재귀 호출때문에 무한히 반복할 수 있습니다"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "서브패턴 이름에 끝나는 글자가 빠졌습니다"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "이름 있는 2개의 서브 패턴의 이름이 같습니다"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "\\P 혹은 \\p 시퀀스의 형식이 잘못되었습니다"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P 혹은 \\p 다음에 속성 이름을 알 수 없습니다"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "서브패턴 이름이 너무 깁니다 (최대 32글자)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "이름 있는 서브패턴이 너무 많습니다 (최대 10,000개)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "8진수값이 \\377보다 큽니다"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE 그룹에 브랜치가 여러 개 들어 있습니다"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE 그룹의 반복은 허용하지 않습니다"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "일관성 없는 NEWLINE 옵션"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g 다음에 {}로 둘러싼 이름이나 {}로 둘러싼 0이 아닌 숫자가 오지 않았습니다."
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "예상하지 못한 반복"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "코드 오버플로우"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "컴파일 작업 공간을 넘어갔습니다"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "이전에 검사한 참조할 서브패턴이 없습니다"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "정규 표현식 %s을(를) 맞추는 도중 오류가 발생했습니다: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE 라이브러리가 UTF8 지원 없이 컴파일되었습니다"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE 라이브러리는 UTF8 속성을 지원하지 않고 컴파일되었습니다"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"정규 표현식 %s을(를) 컴파일하는 중 %d번째 문자에서 오류가 발생했습니다: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "정규 표현식 %s을(를) 최적화하는 도중 오류 발생: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "16 진수 또는 '}'가 있어야 합니다"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "16 진수가 있어야 합니다"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "심볼 참조에 '<' 기호가 없습니다"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "심볼 참조가 끝나지 않았습니다"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "심볼 참조에 내용이 없습니다"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "숫자가 있어야 합니다"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "심볼 참조가 잘못되었습니다"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "마지막 '\\'가 없습니다"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "알 수 없는 이스케이프 시퀀스"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "\"%s\" 대체 문자열을 읽는 중 %lu번째 문자에서 오류가 발생했습니다: %s"
+
+# g_shell_unquote()에 쓰임.  shell의 quoted text를 raw string으로 바꾸는 기능
+# FIXME: "quoted"라는 말을 어떻게 해야 할 것인가?
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "따옴표된 텍스트가 따옴표로 시작하지 않습니다"
+
+# FIXME: 위 참조, "quoted"
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "명령행에서 따옴표가 맞지 않거나 셸 따옴표된 텍스트가 또 있습니다"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "텍스트가 '\\' 문자 다음에 끝났습니다. (텍스트는 '%s'입니다)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"텍스트가 %c에 대응되는 따옴표가 나타나기 전에 끝났습니다. (텍스트는 '%s'입니"
+"다)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "텍스트가 비어 있음 (또는 공백만 들어 있음)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "자식 프로세스에서 데이터 읽기 실패"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "자식 프로세스와 통신을 위한 파이프를 만드는 중 실패 (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "자식 파이프로 부터 읽기 실패 (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "디렉터리 '%s'(으)로 바꾸기 실패 (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "자식 프로세스 실행 실패 (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "잘못된 프로그램 이름: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "인자에서 잘못된 문자열, %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "환경에서 잘못된 문자열: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "잘못된 현재 디렉터리: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "도움 프로그램 실행 실패 (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"자식 프로세스에서 데이터를 읽는중 g_io_channel_win32_poll()에서 기대되지않은 "
+"오류"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "자식 프로세스 에서 데이터를 읽기 실패 (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"자식 프로세스 에서 데이터를 읽는 중 select()에서 예상되지 않은 오류 (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid()에서 예상되지 않은 오류 (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "포크 실패(%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "자식 프로세스 \"%s\"을(를) 실행하기 실패 (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "자식 프로세스 (%s)의 입력 또는 출력의 리다이렉트 실패"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "자식 프로세스 (%s)를 생성 실패"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "자식 프로세스 \"%s\"을(를) 실행하는 중 알 수 없는 오류"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "자식 pid 파이프에서 필요한 데이터를 읽는 데 실패했습니다 (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 범위 밖의 문자"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "변환 입력에서 잘못된 순서"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 범위 밖의 문자"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "사용법:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[옵션...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "도움말 옵션:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "도움말 옵션을 봅니다"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "모든 도움말 옵션을 봅니다"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "프로그램 옵션:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%2$s에 대한 정수 값 '%1$s'을(를) 분석할 수 없습니다"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s에 대한 정수 값 '%1$s'이(가) 범위를 벗어났습니다"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%2$s에 대한 배정도 실수 값 '%1$s'을(를) 분석할 수 없습니다"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s에 대한 배정도 실수 값 '%1$s'이(가) 범위를 벗어났습니다"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "옵션 읽는 중에 오류: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s에 대한 인자가 빠졌습니다"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "알 수 없는 옵션 %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "찾기 디렉터리 안에 올바른 키 파일이 없습니다"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "일반 파일이 아닙니다"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "파일이 비었습니다"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"키 파일에 들어 있는 '%s' 줄은 키-값 쌍도 아니고, 그룹도 아니고, 주석도 아닙니"
+"다"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "잘못된 그룹 이름: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "키 파일이 그룹으로 시작하지 않습니다"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "잘못된 키 이름: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "키 파일에 지원하지 않는 '%s' 인코딩이 들어 있습니다"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "키 파일에 '%s' 그룹이 없습니다"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "키 파일에 '%s' 키가 없습니다"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "키 파일에 있는 '%s' 키와 '%s' 값은 UTF-8이 아닙니다"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "키 파일에 있는 '%s' 키의 값을 해석할 수 없습니다."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "키 파일에 있는 '%2$s' 그룹의 '%1$s' 키의 값을 해석할 수 없습니다."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "키 파일에 있는 '%2$s' 그룹의 '%1$s' 키가 없습니다"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "키 파일의 줄 끝에 이스케이프 문자가 있습니다"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "키 파일에 잘못된 이스케이프 시퀀스 '%s'이(가) 들어 있습니다"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "값 '%s'을(를) 숫자로 해석할 수 없습니다."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "정수 값 '%s'이(가) 범위를 벗어났습니다"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "값 '%s'을(를) 단정도 실수로 해석할 수 없습니다."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "값 '%s'을(를) 불리언 값으로 해석할 수 없습니다."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s에 넘긴 카운트 값이 너무 큽니다"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "스트림을 이미 닫았습니다"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "동작이 취소되었습니다"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "알 수 없는 종류"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s 파일종류"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s 종류"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "예기치 않게 일찍 스트림이 끝났습니다"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "이름없음"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "desktop 파일에 Exec 필드를 지정하지 않았습니다"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "프로그램에 필요한 터미널을 찾을 수 없습니다"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "사용자 프로그램 설정 폴더(%s)를 만들 수 없습니다: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "사용자 MIME 설정 폴더(%s)를 만들 수 없습니다: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "%s 사용자 desktop 파일을 만들 수 없습니다"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s에 대한 사용자 설정 정의"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "드라이브가 eject를 구현하지 않았습니다"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "드라이브가 미디어의 폴링을 구현하지 않았습니다"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem 인코딩의 %d 버전을 처리할 수 없습니다"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem 인코딩에서 토큰 수가 잘못되었습니다 (%d개)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon 인코딩의 %d 버전을 처리할 수 없습니다"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon 인코딩에서 토큰 수가 잘못되었습니다 (%d개)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon에 GEmblem이 없습니다"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "동작을 지원하지 않습니다"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "들어 있는 마운트가 없습니다"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "디렉터리를 덮어 써서 복사할 수 없습니다"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "디렉터리를 덮어 써서 디렉터리를 복사할 수 없습니다"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "대상 파일이 있습니다"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "디렉터리를 재귀적으로 복사할 수 없습니다"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "특수 파일은 복사할 수 없습니다"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "잘못된 심볼릭 링크 값이 주어졌습니다"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "휴지통을 지원하지 않습니다"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "파일 이름에 '%c' 문자가 들어갈 수 없습니다"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "볼륨이 mount를 구현하지 않았습니다"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "이 파일을 처리하는 프로그램을 아무 것도 등록하지 않았습니다"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "이뉴머레이터를 이미 닫았습니다 "
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "파일 이뉴머레이터에 진행 중인 동작이 있습니다"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "파일 이뉴머레이터를 이미 닫았습니다"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "파일"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "아이콘이 들어 있는 파일"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon 인코딩의 %d 버전을 처리할 수 없습니다"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon 입력 데이터의 형식이 잘못되었습니다"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "스트림이 query_info를 지원하지 않습니다"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "스트림에서 seek를 지원하지 않습니다"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "입력 스트림이 truncate를 허용하지 않습니다"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "스트림에서 truncate를 지원하지 않습니다"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "토큰 수가 잘못되었습니다 (%d개)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "클래스 이름 \"%s\"에 대한 타입이 없습니다"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "\"%s\" 타입은 GIcon 인터페이스를 구현하지 않습니다"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "\"%s\" 타입에 대한 클래스가 없습니다"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "버전 형식이 잘못되었습니다: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "\"%s\" 타입은 GIcon 인터페이스에서 from_token()를 구현하지 않습니다"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "아이콘 인코딩의 해당 버전을 처리할 수 없습니다"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "입력 스트림이 read를 구현하지 않았습니다"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "스트림에 진행 중인 동작이 있습니다"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "기본 로컬 디렉터리 모니터 종류를 찾을 수 없습니다"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "잘못된 파일 이름 %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "파일 시스템 정보를 가져오는 중 오류: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "루트 디렉터리의 이름을 바꿀 수 없습니다"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "파일 이름 바꾸기 오류: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "파일 이름을 바꿀 수 없습니다. 파일이 이미 있습니다"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "잘못된 파일 이름"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "파일 열기 오류: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "디렉터리를 열 수 없습니다"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "파일 제거 오류: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "파일 버리기 오류: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "휴지통 디렉터리(%s)를 만들 수 없습니다: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "휴지통의 상위 디렉터리를 찾을 수 없습니다"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "휴지통 디렉터리를 찾을 수 없거나 만들 수 없습니다"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "휴지통 정보 파일을 만들 수 없습니다: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "파일을 버릴 수 없습니다: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "디렉터리를 만드는 중 오류: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "심볼릭 링크를 만드는 중 오류: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "파일 옮기는 중 오류: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "디렉터리를 덮어 써서 디렉터리를 옮길 수 없습니다"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "백업 파일 만들기가 실패했습니다"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "대상 파일을 제거하는 중 오류: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "다른 마운트 사이에 옮기기는 지원하지 않습니다"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "애트리뷰트 값은 NULL이 아니어야 합니다"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "잘못된 애트리뷰트 종류 (문자열 필요)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "잘못된 확장 에트리뷰트 이름"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "확장 애트리뷰트 '%s' 설정 중 오류: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' 파일의 정보를 읽는 중 오류: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (잘못된 인코딩)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "파일 디스크립터 정보를 읽는 중 오류: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "잘못된 애트리뷰트 종류 (uint32 필요)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "잘못된 애트리뷰트 종류 (uint64 필요)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "잘못된 애트리뷰트 종류 (바이트 문자열 필요)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "권한 설정 중 오류: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "소유자 설정 중 오류: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "심볼릭 링크는 NULL이 아니어야 합니다"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "심볼릭 링크 설정 중 오류: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "심볼릭 링크 설정 중 오류: 파일이 심볼릭 링크가 아닙니다"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux 컨텍스트는 NULL이 아니어야 합니다"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux 컨텍스트 설정 중 오류: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "이 시스템은 SELinux를 사용하지 않습니다"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s 애트리뷰트 설정은 지원하지 않습니다"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "파일을 읽는 중 오류: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "파일에서 seek하는 중 오류: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "파일을 닫는 중 오류: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "기본 로컬 파일 모니터 종류를 찾을 수 없습니다"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "파일에 쓰는 중 오류: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "예전 백업 링크를 제거하는 중 오류: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "백업 사본을 만드는 중 오류: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "임시 파일의 이름을 바꾸는 오류: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "파일을 자르는 중 오류: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' 파일을 여는 중 오류: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "대상 파일이 디렉터리입니다"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "대상 파일이 일반 파일이 아닙니다"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "파일이 외부에서 바뀌었습니다"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "예전 파일을 제거하는 중 오류: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "잘못된 GSeekType이 주어졌습니다"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "잘못된 seek 요청"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream은 자를 수 없습니다"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "최대 데이터 배열 한계에 도달했습니다"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "메모리 출력 스트림은 크기를 바꿀 수 없습니다"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "출력 스트림의 크기를 바꾸는 데 실패했습니다"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "마운트가 unmount를 구현하지 않았습니다"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "마운트가 eject를 구현하지 않았습니다"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "마운트가 remount를 구현하지 않았습니다"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "마운트가 content type guessing을 구현하지 않았습니다"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "마운트가 동기식 content type guessing을 구현하지 않았습니다"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "출력 스트림이 write를 구현하지 않았습니다"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "원본 스트림을 이미 닫았습니다"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "이름"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "아이콘의 이름"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "이름 목록"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "아이콘 이름이 들어 있는 배열"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "기본값 대체 사용"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"이름의 '-' 문자로 줄인 기본값 대체 이름을 사용할 지 여부. 이름이 여러 개 주어"
+"진 경우, 처음 나오는 처음 이름 다음은 무시합니다."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon 인코딩의 %d 버전을 처리할 수 없습니다"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "파일 디스크립터"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "데이터를 읽을 파일 디스크립터"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "파일 디스크립터 닫기"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "스트림을 닫을 때 파일 디스크립터를 닫을 지 여부"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "유닉스 소켓을 읽는 중 오류: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "유닉스 소켓을 닫는 중 오류: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "파일 시스템 루트"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "데이터를 쓸 파일 디스크립터"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "유닉스 소켓에 쓰는 중 오류: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "볼륨이 eject를 구현하지 않았습니다"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "프로그램을 찾을 수 없습니다"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "프로그램을 실행하는 중에 오류: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI를 지원하지 않습니다"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "연결 프로그램 바꾸기는 win32에서 지원하지 않습니다"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "연결 프로그램 만들기는 win32에서 지원하지 않습니다"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "엔트리를 숨기지 않습니다"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "긴 목록 형식을 사용합니다"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[파일...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u 바이트"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "막 만든 desktop 파일을 읽어들일 수 없습니다"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "백업 링크를 만드는 중 오류: %s"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr "g_input_stream_read_async에 카운트 값이 너무 큽니다"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "g_input_stream_skip에 카운트 값이 너무 큽니다"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr "g_input_stream_skip_async에 카운트 값이 너무 큽니다"
+
+#~ msgid "Target file already exists"
+#~ msgstr "대상 파일이 이미 있습니다"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "g_output_stream_write에 카운트 값이 너무 큽니다"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr "g_output_stream_write_async에 카운트 값이 너무 큽니다"
+
+#~ msgid "Target stream is already closed"
+#~ msgstr "대상 스트림을 이미 닫았습니다"
+
+#~ msgid "Unknown drive"
+#~ msgstr "알 수 없는 드라이브"
+
+#~ msgid "%s volume"
+#~ msgstr "%s 볼륨"
+
+#~ msgid "Unknown volume"
+#~ msgstr "알 수 없는 볼륨"
diff --git a/po/ku.po b/po/ku.po
new file mode 100644
index 0000000..4a2a939
--- /dev/null
+++ b/po/ku.po
@@ -0,0 +1,1794 @@
+# translation of glib.glib-2-8.po to Kurdish
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Erdal Ronahi <erdal.ronahi@gmail.com, pckurd@hotmail.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.glib-2-8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-04-20 17:33+0000\n"
+"Last-Translator: Erdal Ronahi <erdal.ronahi@gmail.com>\n"
+"Language-Team: Kurdish <gnu-ku-wergerandin@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Vekirina dosiya '%s' serneket: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr ""
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' ne derbasdar e"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Navê hostê nederbasdar e"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr ""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Vekirina dosiya '%s' serneket: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Vekirina dosiya '%s' serneket: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Vekirina dosiya '%s' serneket: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr ""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr ""
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr ""
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Di rêza %d tîpa %d de çewtî: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Di rêza %d de çewtî: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr ""
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Di rêza %d tîpa %d de çewtî: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr ""
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Navê bernameyê nederbasdar e: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Bikaranîn:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Vebijêrkên Sepanê:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr ""
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Vebijêrka nenas %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Dosya vala ye"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Navê bernameyê nederbasdar e: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Navê bernameyê nederbasdar e: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Vebijêrka nenas %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr ""
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Navê bernameyê nederbasdar e: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Navê hostê nederbasdar e"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Vekirina dosiya '%s' serneket: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Vekirina dosiya '%s' serneket: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Di rêza %d de çewtî: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Di rêza %d de çewtî: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Di rêza %d de çewtî: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Di rêza %d de çewtî: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Navê bernameyê nederbasdar e: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr ""
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Di rêza %d de çewtî: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr ""
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Di xwendina dosyeya '%s' de çewtî: %s"
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..016847f
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,1854 @@
+# translation of lt.po to Lithuanian
+# Lithuanian translation of Glib library.
+# Copyright (C) 2003-2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# Tomas Kuliavas <tokul@users.sourceforge.net>, 2003-2004.
+# Žygimantas Beručka <zygis@gnome.org>, 2004-2007.
+# Mantas Kriaučiūnas <mantas@akl.lt>, 2006-2007.
+# Gintautas Miliauskas <gintas@akl.lt>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: lt\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-26 15:52+0200\n"
+"Last-Translator: Vytautas Rėkus <v.rekus@gmail.com>\n"
+"Language-Team: Lithuanian <gnome-lt@lists.akl.lt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Netikėtas požymis „%s“ elementui „%s“"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Elemento „%2$s“ požymis „%1$s“ nerastas"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Netikėta žymė „%s“, tikėtasi žymės „%s“"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Netikėta žymė „%s“ viduje „%s“"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Duomenų aplankuose nerasta tinkamo žymelių failo"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI „%s“ žymelė jau egzistuoja"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Žymelė URI „%s“ nerasta"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI „%s“ žymelėje neapibrėžtas MIME tipas"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI „%s“ žymelėje neapibrėžta privati vėliavėlė"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI „%s“ žymelėje nenurodyta jokia grupė"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Nėra programos pavadinimu „%s“ registravusios „%s“ žymelę"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Nepavyko išskleisti vykdomosios eilutės „%s“ su URI „%s“"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Keitimas iš koduotės „%s“ į koduotę „%s“ nepalaikomas"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nepavyko atverti keitiklio iš „%s“ į „%s“"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Klaidinga baitų seka keitimo įvedime"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Klaida keitimo metu: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Nepilna simbolio seka įvedimo pabaigoje"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Negalima keisti atgalinio varianto „%s“ į koduotę „%s“"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Adresas „%s“ nėra absoliutus adresas naudojantis „file“ schemą"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Vietinio failo adresas „%s“ negali turėti simbolio „#“"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Adresas „%s“ yra klaidingas"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Kompiuterio vardas „%s“ adrese yra klaidingas"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Adrese „%s“ yra klaidingai perkoduoti symboliai"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Kelias „%s“ nėra absoliutus"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Klaidingas kompiuterio vardas"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Klaida atidarant aplanką „%s“: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nepavyko paskirti %lu baitų reikalingų perskaityti failą „%s“"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Klaida skaitant failą „%s“: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Failas „%s“ per didelis"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Nepavyko perskaityti failo „%s“: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nepavyko atverti failo „%s“: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Nepavyko gauti failo „%s“ požymių: fstat() klaida: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nepavyko atverti failo „%s“: fdopen() klaida: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Nepavyko pervadinti failo „%s“ į „%s“: g_rename() klaida: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Nepavyko sukurti failo „%s“: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Nepavyko atverti failo „%s“ rašymui: fdopen() klaida: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nepavyko įrašyti failo „%s“: fwrite() klaida: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nepavyko įrašyti failo „%s“: fflush() klaida: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nepavyko įrašyti failo „%s“: fsync() klaida: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nepavyko užverti failo „%s“: fclose() klaida: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Nepavyko pašalinti egzistuojančio failo „%s“: g_unlink() failed: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Šablonas „%s“ klaidingas, jame negali būti „%s“"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Šablone „%s“ nėra XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Nepavyko perskaityti simbolinės nuorodos „%s“: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Simbolinės nuorodos nepalaikomos"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nepavyko atverti keitiklio iš „%s“ į „%s“: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Negalima vykdyti tiesioginio skaitymo iš g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Nepakeistų duomenų likučiai skaitymo buferyje"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanalas pasibaigia nepilnu simboliu"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Negalima vykdyti tiesioginio skaitymo iš g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nepavyko atverti failo „%s“: open() klaida: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nepavyko rasti failo „%s“: mmap() klaida: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Klaida eilutėje %d simbolyje %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Klaida eilutėje %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Aptiktas tuščias elementas '&;'; galimi elementai yra: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Simbolis „%s“ nepriimtinas elemento vardo pradžioje; & simbolis pradeda "
+"elemento įvedimą; jei šis ampersendas nėra elemento pradžia, apeikite jį su "
+"&amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Simbolis „%s“ nepriimtinas elemento varde"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nežinomas elemento vardas „%s“"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Elementas nepasibaigė kabliataškiu; greičiausiai Jūs panaudojote ampersendo "
+"simbolį nepradėdami elemento įvedimo - apeikite ampersendą įvesdami &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nepavyko apdoroti „%-.*s“, kuris galėjo turėti skaičius simbolio aprašyme "
+"(pvz. &#234;) - gal skaičius per didelis"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Simbolio aprašymas „%-.*s“ neatitinka leistinus simbolius"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tuščias simbolio aprašymas; ten turėtų būti skaičiai, pvz. &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Simbolio aprašymas nepasibaigė kabliataškiu; greičiausiai Jūs panaudojote "
+"ampersendo simbolį nepradėdami elemento įvedimo - apeikite ampersendą "
+"įvesdami &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nebaigtas elemento aprašymas"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nebaigtas simbolio aprašymas"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Klaidingai koduotas UTF-8 tekstas – per ilga seka"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Klaidingai koduotas UTF-8 tekstas – ne pradžios simbolis"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Klaidingai koduotas UTF-8 tekstas – netinkamas „%s“"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentas turėtų prasidėti elementu (pvz. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s“ negali būti rašomas po „<“ simbolio; jis nepradeda jokio elemento vardo"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Neįprastas simbolis „%s“, tikėtasi sulaukti „>“ simbolio, užbaigiančio "
+"tuščią elementą „%s“"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Neįprastas simbolis „%1$s“, tikėtasi sulaukti „=“ po elemento „%3$s“ požymio "
+"vardo „%2$s“"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Neįprastas simbolis „%s“, tikėtasi sulaukti „>“ arba „/“ simbolių, "
+"užbaigiančių elementą „%s“, arba papildomo požymio; gal Jūs panaudojote "
+"netinkama simbolį požymio varde"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Neįprastas simbolis „%1$s“, po lygybės tikėtasi sulaukti atidarančio "
+"citavimo simbolio pradedant „%3$s“ elemento „%2$s“ požymio reikšmę"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s“ negali būti rašomas po simbolių „</“; „%s“ negali būti kokio nors "
+"elemento vardu"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s“ negali būti rašomas po uždarančio elemento vardo „%s“; leistinas "
+"simbolis yra „>“"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+"Elemento „%s“ uždarymo simbolis sutiktas anksčiau už elemento atidarymo "
+"simbolį"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Sutiktas elemento „%s“ uždarymo simbolis, tačiau šiuo metu atidarytas kitas "
+"elementas „%s“"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumentas tuščias arba susideda tik iš tarpų"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumentas netikėtai pasibaigė tuoj po atidarančių skliaustų '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumentas netikėtai pasibaigė neuždarius dalies elementų - „%s“ yra "
+"paskutinis atviras elementas"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumentas netikėtai pasibaigė, nesulaukta uždarančių skliaustų simbolio <%s/"
+">"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumentas netikėtai pasibaigė elemento varde"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumentas netikėtai pasibaigė požymio varde"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumentas netikėtai pasibaigė elemento atvėrimo žyme."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumentas netikėtai pasibaigė lygybės simboliu einančio po požymio vardo; "
+"nerasta požymio reikšmė"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumentas netikėtai pasibaigė požymio verte"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokumentas netikėtai pasibaigė elemento „%s“ uždarančiame simbolyje"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumentas netikėtai pasibaigė komentaruose arba apdorojimo instrukcijose"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "sugadintas objektas"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "vidinė klaida arba sugadintas objektas"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "nebėra atminties"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "pasiekta atgalinio sekimo riba"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "šablone yra dalinio atitikimo nepalaikomų elementų "
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "vidinė klaida"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "atgalinės nuorodos kaip sąlygos nepalaikomos daliniam atitikimui"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "pasiekta rekursijos riba"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "pasiekta tuščių poeilių darbalaukio riba"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "netinkama naujos eilutės vėliavėlių kombinacija"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "nežinoma klaida"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ šablono pabaigoje"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c šablono pabaigoje"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "neatpažintas simbolis po \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "kodai, keičiantys registrą, (\\l, \\L, \\u, \\U) čia neleistini"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "skaičiai ne iš eilės {} kvantoriuje"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "skaičius per didelis {} kvantoriuje"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "trūksta baigiamojo ] simbolio klasei"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "klaidinga speciali seka simbolio klasėje"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "ruožas ne iš eilės simbolio klasėje"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nėra ką kartoti"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "neatpažintas simbolis po (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "neatpažintas simbolis po (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "neatpažintas simbolis po (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "klasės POSIX vardais leidžiamos tik klasių viduje"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "trūksta baigiamojo )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") be atveriamojo ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "po (?R arba (?[+-]skaitmenys turi būti )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "nuoroda į neegzistuojantį pošablonį"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "trūksta ) po komentaro"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "reguliarioji išraiška per didelė"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "nepavyko rezervuoti atminties"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "žiūros atgal teiginys nefiksuoto ilgio"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "netaisyklingas skaičius ar vardas po (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "sąlyginė grupė turi daugiau negu dvi šakas"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "tikimasi teiginio po (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nežinomas POSIX klasės vardas"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX gretinimo elementai nepalaikomi"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "simbolio reikšmė \\x{...} sekoje per didelė"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "netaisyklinga sąlygą (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C neleistinas žiūros atgal teiginyje"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursyvus iškvietimas gali veikti be galo"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "trūksta baigiamojo simbolio pošablonio pavadinime"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "du vardiniai pošabloniai turi tą patį vardą"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "netaisyklinga \\P arba \\p seka"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nežinomas savybės vardas po \\P arba \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "pošablonio vardas per ilgas (turi būti iki 32 simbolių)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "per daug vardinių pošablonių (iki 10000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "aštuntainė reikšmė didesnė už \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE grupėje yra daugiau negu viena šaka"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "neleidžiama kartoti DEFINE grupės"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "nenuoseklios NEWLINE savybės"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "po \\g nėra vardo riestiniuose skliaustuose arba teigiamo skaičiaus"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "netikėtas pakartojimas"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kodo perviršis"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "perpildyta kompiliavimo sritis"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "anksčiau tikrintas nurodytas pošablonis nerastas"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Klaida ieškant reguliariosios išraiškos %s atitikmens: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE biblioteka sukompiliuota be UTF8 palaikymo"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE biblioteka sukompiliuota be UTF8 ypatybių palaikymo"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Klaida kompiliuojanti reguliarią išraišką %s ties simboliu %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Klaida optimizuojant reguliariąją išraišką %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "laukta šešioliktainio skaitmens arba „}“"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "laukta šešioliktainio skaitmens"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "simbolinėje nuorodoje trūksta „<“"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "nebaigta simbolinė nuoroda"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "nulinio ilgio simbolinė nuoroda"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "laukta skaitmens"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "neleistina simbolinė nuoroda"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "nevietoje galutinis „\\“"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "nežinoma kaitos seka"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Klaida apdorojant pakeitimo tekstą „%s“ ties simboliu %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Cituojamas tekstas neprasideda citavimo ženklu"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Nesutampantis citavimo simbolis komandinėje eilutėje arba kitame terpės "
+"cituotame tekste"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekstas pasibaigė tuoj po „\\“ simbolio. (Tekste buvo įrašyta „%s“)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Tekstas pasibaigė nesulaukus %c atitinkančio citatos ženklo. (Tekste buvo "
+"įrašyta „%s“)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekstas buvo tuščias arba turėjo vien tik tarpo simbolius)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nepavyko gauti duomenų iš antrinio proceso"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Nepavyko sukurti konvejerio skirto keistis duomenimis su antriniu procesu (%"
+"s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nepavyko perskaityti duomenų iš antrinio konvejerio (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nepavyko pakeisti į aplanką „%s“ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nepavyko paleisti antrinio proceso (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Netinkamas programos pavadinimas: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Netinkama seka argumento vektoriuje, pozicijoje %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Netinka seka aplinkoje: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Netinkamas darbinis aplankas: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nepavyko paleisti pagalbinės programos (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Netikėta klaida tarp g_io_channel_win32_poll() funkcijos duomenų skaitymo iš "
+"antrinio proceso metu"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nepavyko gauti duomenis iš antrinio proceso (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Netikėta klaida tarp select() funkcijos duomenų gavimo iš antrinio proceso (%"
+"s) metu"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Netikėta klaida iš waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Nepavyko atskirti (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nepavyko paleisti antrinio proceso „%s“ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nepavyko perimti antrinio proceso (%s) išvedimo arba įvedimo"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nepavyko atskirti antrinio proceso (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nežinoma klaida vykdant antrinį procesą „%s“"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Nepavyko perskaityti reikiamo duomenų kiekio iš antrinio pid konvejerio (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Simbolis neatitinka UTF-8 simbolių diapazono"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Klaidinga seka keitimo įvestyje"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Simbolis neatitinka UTF-16 simbolių diapazono"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Naudojimas:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[PARINKTIS...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Pagalbos parinktys:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Rodyti pagalbos parinktis"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Rodyti visas pagalbos parinktis"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Programos parinktys:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Nepavyko apdoroti sveikosios reikšmės „%s“, reikalingos %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Sveikoji reikšmė „%s“, reikalinga %s, viršija ribas"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nepavyko apdoroti dvigubos reikšmės „%s“, reikalingos %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Dviguboji reikšmė „%s“, reikalinga %s, viršija ribas"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Klaida apdorojant parinktį %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s trūksta argumento"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Nežinoma parinktis %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Paieškos aplankuose nepavyko rasti tinkamo raktų failo"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nėra paprastas failas"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Failas yra tuščias"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Raktų faile yra eilutė „%s“, kuri nėra raktas-reikšmė pora, grupė ar "
+"komentaras"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Netinkamas grupės pavadinimas: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Raktų failas neprasideda grupe"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Netinkamas rakto pavadinimas: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Raktų faile yra nepalaikoma koduotė „%s“"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Raktų failas neturi grupės „%s“"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Raktų failas neturi rakto „%s“"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Raktų faile yra raktas „%s“ su reikšme „%s“, kuri nėra UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Raktų faile yra raktas „%s“, kuriame yra reikšmė, kurios negalima suprasti."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Raktų faile yra raktas „%s“ grupėje „%s“, kuriame yra reikšmė, kurios "
+"negalima suprasti."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Raktų faile nėra rakto „%s“ grupėje „%s“"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Raktų faile, eilutės pabaigoje yra pabėgimo simbolis"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Raktų faile yra klaidinga pabėgimo eilutė „%s“"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Reikšmės „%s“ negalima interpretuoti kaip skaičiaus."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Sveikoji reikšmė „%s“ viršija ribas"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+"Reikšmės „%s“ negalima interpretuoti kaip slankiojo kablelio skaičiaus."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Reikšmės „%s“ negalima interpretuoti kaip loginės."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Per didelė skaičiavimo reikšmė perduota %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Srautas jau užvertas"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operacija nutraukta"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Nežinomas tipas"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s failo tipos"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s tipas"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Netikėta ankstyva srauto pabaiga"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Nepavadinta"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Darbalaukio failas nenurodė Exec lauko"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Nerastas terminalas, reikalingas programai"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Nepavyko sukurti naudotojo nustatymų aplanko %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Nepavyko sukurti naudotojo MIME nustatymų aplanko %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Nepavyko sukurti naudotojo darbalaukio failo %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Specialus apibrėžimas %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "įrenginys nerealizuoja išstūmimo"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "įrenginys nerealizuoja laikmenos tikrinimo užklausimo"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Nepavyko apdoroti GEmblem koduotės versijos %d"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Netinkamas leksemų skaičius (%d) GEmblem koduotėje"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Nepavyko apdoroti GEmblemedIcon koduotės versijos %d"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Netinkamas leksemų skaičius (%d) GEmblemedIcon koduotėje"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Tikėtasi GEmblem skirto GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operacija nepalaikoma"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Tėvinis prijungimo taškas neegzistuoja"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Negalima kopijuoti ant aplanko"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Negalima kopijuoti aplanko ant aplanko"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Nurodytas failas jau egzistuoja"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Negalima rekursyviai kopijuoti aplanko"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Nepavyksta nukopijuoti specialaus failo"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Netaisyklinga simbolinės nuorodos reikšmė"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Šiukšlės nepalaikomos"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Failų varduose negali būti '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "skirsnis nepalaiko prijungimo"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Nėra programos, priregistruotos kaip skaitančios šį failą"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumeratorius užvartas"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Failų enumeratoriui liko neatlikta operacija"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Failų enumeratorius jau užvertas"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "failas"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Failas, kuriame yra piktograma"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Nepavyko apdoroti GFileIcon koduotės versijos %d"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Netinkami GFileIcon įvesties duomenys"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Srautas nepalaiko query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Pozicijos perkėlimas srauto nepalaikomas"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Trumpinimas įėjimo srauto nepalaikomas"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Trumpinimas srauto nepalaikomas"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Neteisingas leksemų skaičius (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Nėra tipo klasės pavadinimui %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Tipas %s nerealizuoja GIcon sąsajos"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Tipas %s neklasifikuotas"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Netinkamas versijos numeris: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Tipas %s nerealizuoja from_tokens() GIcon sąsajoje"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Nepavyko apdoroti pateiktosios piktogramos koduotės versijos"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Šaltinio srautas nerealizuoja skaitymo"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Srautui liko neįvykdyta operacija"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Nepavyko rasti įprasto vietinių aplankų stebėjimo tipo"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Netaisyklingas failo vardas %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Klaida skaitant failų sistemos informaciją: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Nepavyko pervadinti šakninio aplanko"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Klaida pervadinant failą: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Nepavyko pervadinti failo, failo vardas jau užimtas"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Netaisyklingas failo vardas"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Klaida atveriant failą: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Nepavyko atverti aplanko"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Klaida trinant failą: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Klaida perkeliant į šiukšles failą: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Nepavyko sukurti šiukšlių aplanko %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Nepavyko rasti šakninio aplanko šiukšlėms"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Nepavyko rasti ar sukurti šiukšlių aplanko"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Nepavyko šiukšlių informacijos failo: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Nepavyko į šiukšles perkelti failo: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Klaida atveriant aplanką: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Klaida kuriant simbolinę nuorodą: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Klaida perkeliant failą: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Negalima perkelti aplanko per aplanką"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Atsarginės kopijos sukūrimas nesėkmingas"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Klaida trinant nurodytą failą: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Perkėlimas tarp prijungimo taškų nepalaikomas"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Atributo reikšmė turi būti netuščia"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "netaisyklingas atributo tipas (tikimasi simbolių sekos)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "netaisyklingas išplėstinio atributo pavadinimas"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Klaida nurodant išplėstinį atributą „%s“: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Klaida skaitant failo „%s“ informaciją: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (netaisyklinga koduotė)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Klaida skaitant failo deskriptoriaus informaciją: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Klaidingas atributo tipas (tikimasi uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Klaidingas atributo tipas (tikimasi uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Klaidingas atributo tipas (tikimasi baitų sekos)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Klaida nustatant teises: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Klaida nustatant savininką: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "Simbolinė nuoroda turi būti netuščia"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Klaida nustatant simbolinę nuorodą: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Klaida nustatant simbolinę nuorodą: failas nėra simbolinė nuoroda"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux kontekstas būti nelygus NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Klaida nustatant SELinux kontekstą: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux šioje sistemoje neįjungtas"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Atributo %s nustatymas nepalaikomas"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Klaida skaitant failą: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Klaida keičiant poziciją faile: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Klaida užveriant failą: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Nepavyko rasti numatytojo vietinių failų stebyklės tipo"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Klaida rašant į failą: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Klaida šalinant senos atsarginės kopijos nuorodą: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Klaida kuriant atsarginę kopiją: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Klaida pervadinant laikinąjį failą: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Klaida trumpinant failą: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Klaida atveriant failą „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Paskirties failas yra aplankas"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Paskirties failas nėra paprastas failas"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Failas buvo pakeistas kitos programos"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Klaida ištrinant senąjį failą: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Netaisyklingas GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "netaisyklinga seek užklausa"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Nepavyko sutrumpinti GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Pasiekta viršutinė duomenų masyvo riba"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Atminties išvedimo srauto dydis nekeičiamas"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Nepavyko pakeisti atminties išvedimo srauto dydžio"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "prijungimo taškas nepalaiko atjungimo"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "prijungimo taškas nepalaiko išstūmimo"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "prijungimo taškas nepalaiko prijungimo iš naujo"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "prijungimo taškas nepalaiko turinio tipo spėjimo"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "prijungimo taškas nepalaiko sinchroninio turinio tipo spėjimo"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Išvedimo srautas nepalaiko rašymo"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Šaltinio srautas jau užvertas"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "pavadinimas"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Piktogramos pavadinimas"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "pavadinimai"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Masyvas iš piktogramų pavadinimų"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "naudoti numatytuosius atsarginius variantus"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Ar naudoti numatytuosius atsarginius variantus, rastus sutrumpinant "
+"pavadinimą ties „-“ simboliais. Pavadinimai po pirmojo, jei duoti keli, "
+"ignoruojami."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Nepavyko apdoroti GThemedIcon koduotės versijos %d"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Failo deskriptorius"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Failo deskriptorius skaitymui"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Užverti failo deskriptorių"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Ar užverti failo deskriptorių užvėrus srautą"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Klaida skaitant unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Klaida užveriant unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Failų sistemos šaknis"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Failo deskriptorius rašymui"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Klaida rašant į unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "skirsnis nerealizuoja išstūmimo"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Nepavyko rasti programos"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Klaida paleidžiant programą: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI nepalaikomi"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "saitų keitimai win32 sistemose nepalaikomi"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Saitų kūrimas win32 sistemose nepalaikomas"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "neslėpti įrašų"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "naudoti išsamų sąrašo formatą"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FAILAS...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u baitas"
+#~ msgstr[1] "%u baitai"
+#~ msgstr[2] "%u baitų"
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 0000000..cf76dcc
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,1860 @@
+# glib for Latvian.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Artis Trops <hornet@navigator.lv>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2002-12-19 01:04+0200\n"
+"Last-Translator: Artis Trops <hornet@navigator.lv>\n"
+"Language-Team: Latvian <ll10nt@os.lv>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Savāda rakstzīme '%s', gaidīju '=' aiz atribūta nosaukuma '%s' elementam '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Neizdevās izveidot failu '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konversija no rakstzīmju kopas '%s' uz '%s' nav atbalstīta"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nevarēju atvērt konvertātoru no '%s' uz '%s': %s"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Nepareiza baitu secība konversijas ievadē"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Daļēja simbolu secība ievades beigās"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Nevar pārveidot atkritienu '%s' uz rakstzīmju kopu '%s'"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' nav absolūtais URI, lietojot failu shēmu"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Lokālā faila URI '%s' nedrīkst saturēt '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' ir nepareizs"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Hostdatora nosaukuma URI '%s' ir nepareizs"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' satur nepareizi izvairīgas rakstzīmes"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Ceļvārds '%s' nav absolutais ceļš"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Kļūda atverot direktoriju '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nevarēju atrast %lu baitus, lai nolasītu failu \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Nespēju nolasīt no faila '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nevarēju atvērt failu '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Nevarēju dabūt faila '%s' atribūtus: fstat() neizdevās: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Neizdevās izveidot failu '%s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Veidne '%s' nepareizs, nedrīkstētu saturēt '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Veidne '%s' nebeidzas ar XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, fuzzy, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Neizdevās izveidot failu '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nevarēju atvērt konvertātoru no `%s' uz '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Nevaru izpildīt jēllasīšanu iekš g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Pāpalikušie nepārveidotie dati nolasīšanas buferī"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanāls pārtrūkst daļējā rakstzīmē"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Nevaru izpildīt jēllasīšanu iekš g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Kļūda rindā %d rakstzīme %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Kļūda rindā %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Pamanīta tukša entītija '&;'; derīgas entītijas ir: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Rakstzīme '%s' nav derīga entītijas nosaukuma sākumā; rakstzīme & sāk "
+"entītiju; ja šī zīme netiek atbalstīta, lai būtu entītija, aizvieto to ar "
+"&amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Rakstzīme '%s' nav derīga entītijas nosaukumā"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entītijas nosaukums \"%s\" nav zināms"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entītija nebeidzās ar semikolu; visdrīzāk jūs lietojāt & zīmi bez nodoma "
+"sākt entītiju - aizvieto & zīmes ar &amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nevarēju parsēt '%s', kur vajadzētu būt ciparam iekš rakstzīmes atsauces "
+"(&#234; piemēram) - iespējams, ka cipars ir pārāk liels"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Rakstzīmes atsauce '%s' nešifrē atļautu rakstzīmi"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tukša rakstzīmes atsauce; būtu jāiekļauj cipars, kā &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Rakstzīmes atsauce nebeidzās ar semikolu; visdrīzāk jūs lietojāt & zīmi bez "
+"nodoma sākt entītiju - aizvieto & zīmes ar &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nepabeigta entītijas atsauce"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nepabeigta rakstzīmes atsauce"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Nepareizi kodēts UTF-8 teksts"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Nepareizi kodēts UTF-8 teksts"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Nepareizi kodēts UTF-8 teksts"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentam jāsākās ar elementu (piem., <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' nav atļauta rakstzīme, sekojoša aiz rakstzīmes '<'; tā nedrīkst iesākt "
+"elementa vārdu."
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Savāda rakstzīme '%s', gaidīju '>' rakstzīmi, kas nobeigtu sākuma tagu "
+"elementam '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Savāda rakstzīme '%s', gaidīju '=' aiz atribūta nosaukuma '%s' elementam '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Savāda rakstzīme '%s', gaidīju '>' vai '/' rakstzīmi, kas nobeigtu sākuma "
+"tagu elementam '%s' vai fakultatīvi atribūtu; iespējams, jūs lietojāt "
+"nepareizu rakstzīmi atribūta nosaukumā"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Savāda rakstzīme '%s', gaidīju atvērtās pēdiņas pēc vienādības zīmes, "
+"nosakot vērtību atribūtam '%s' no elementa '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' nav derīga rakstzīme, sekojot rakstzīmēm '</'; '%s' nevar sākt elementa "
+"nosaukumu"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' nav derīga rakstzīme, sekojot aizverošā eementa nosaukumam '%s'; "
+"atļautā rakstzīme ir '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elements '%s' tika aizvērts, neviens elements pašlaik nav atvērts"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Elements '%s' tika aizvērts, bet pašlaik atvērtais elements ir '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokuments bija tukšs vai saturēja tikai tukšu atstarpi"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokuments negaidīti izbeidzās tieši pēc atvērtās stūra iekavas '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokuments negaidīti izbeidzās ar joprojām atvērtiem elementiem - '%s' bija "
+"pēdējais atvērtais elements"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokuments negaidīti izbeidzās, cerēju ieraudzīt aizverošo stūra iekavu, "
+"beidzoties ar tagu <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokuments negaidīti izbeidzās iekšā elementa nosaukumā"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokuments negaidīti izbeidzās iekšā atribūta nosaukumā"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokuments negaidīti izbeidzās elementa-atverošajā tagā."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokuments negaidīti izbeidzās aiz vienādības zīmes, sekojot atribūta "
+"nosaukumam; nav atribūta vētības"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokuments negaidīti izbeidzās kamēr iekšā atribūta vērtībā"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokuments negaidīti izbeidzās iekšā elementa '%s' aizverošajā tagā"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokuments negaidīti izbeidzās iekšā komentārā vai apstrādes instrukcijā"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Kanāls pārtrūkst daļējā rakstzīmē"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Nepareiza baitu secība konversijas ievadē"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Nepabeigta rakstzīmes atsauce"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Nepabeigta rakstzīmes atsauce"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Nepabeigta rakstzīmes atsauce"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Kļūda rindā %d rakstzīme %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Nepabeigta entītijas atsauce"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Citētais teksts nesākas ar jautājuma zīmi"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Neatbilstoša jautājuma zīme komandrindā vai citā čaulas-citētā tekstā"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Teksts beidzās tieši pēc '\\' rakstzīmes. (Teksts bija '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Teksts beidzās pirms atbilstošais citāts tika atrasts priekš %c. (Teksts "
+"bija '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksts bija tukšs (vai saturēja tikai tukšumus)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nevarēju nolasīt datus no bērnprocesa"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Nevarēju izveidot programkanālu komunikācijai ar bērnprocesu (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nevarēju nolasīt no bērna programkanāla (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nevarēju pāriet uz direktoriju '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nevarēju izpildīt bērnprocesu (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Nepareiza secība konversijas ievadē "
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Kļūda atverot direktoriju '%s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nevarēju izpildīt palīga programmu"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Negaidīta kļūda iekš g_io_channel_win32_poll(), lasot datus no bērnprocesa"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nevarēju nolasīt datus no bērnprocesa (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Negaidīta kļūda iekš select(), lasot datus no bērnprocesa (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Negaidīta kļūda waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Neizdevās sadalīt (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nevarēju izpildīt bērnprocesu \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nevarēju novadīt bērnprocesa (%s) izvadi vai ievadi"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nevarēju sazarot bērnprocesu (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nezināma kļūda, izpildot bērnprocesu \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Nevarēju nolasīt pietiekami daudz datus no bērna pid programkanāla (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Rakstzīme nav UTF-8 laukā"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Nepareiza secība konversijas ievadē "
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Rakstzīme nav UTF-16 laukā"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Kļūda konversējot: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "URI '%s' satur nepareizi izvairīgas rakstzīmes"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Hostdatora nosaukuma URI '%s' ir nepareizs"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Neizdevās izveidot failu '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Neizdevās izveidot failu '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Neizdevās izveidot failu '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Kļūda atverot direktoriju '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokuments negaidīti izbeidzās iekšā atribūta nosaukumā"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Kļūda atverot direktoriju '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Kļūda rindā %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Nepareizs hostdatora nosaukums"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Hostdatora nosaukuma URI '%s' ir nepareizs"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Kļūda nolasot failu '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Kļūda rindā %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Kļūda konversējot: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Kļūda konversējot: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Nevarēju atrast %lu baitus, lai nolasītu failu \"%s\""
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Nevarēju atvērt '%s': fdopen() neizdevās: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Konvertācija no rakstzīmju kopas '%s' uz '%s' nav atbalstīta"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Nepareizs ziņas izmērs"
+
+#~ msgid "Socket error"
+#~ msgstr "Kontakta kļūda"
diff --git a/po/mai.po b/po/mai.po
new file mode 100644
index 0000000..9eb4cf8
--- /dev/null
+++ b/po/mai.po
@@ -0,0 +1,1820 @@
+# translation of glib.HEAD.po to maithili
+# BOSS GNU/Linux <bosslinux@cdac.in>, 2008.
+# Rajesh Ranjan <rranjan@redhat.com>, 2009.
+# translation to glib to Maithili
+# Copyright (C) 2006 The GNOME Foundation
+# This file is distributed under the same license as the PACKAGE package.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-27 17:15+0530\n"
+"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
+"Language-Team: maithili <maithili.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s' अप्रत्याशित गुण '%s' तत्व क' लेल"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' तत्व '%s' क' गुण नहि भेटल"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "'%s' अप्रत्याशित टैग, '%s' टैग प्रत्याशित"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "अप्रत्याशित टैग '%s' '%s' क' भीतर"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "कोनो वैध पुस्तकचिह्न फाइल आँकड़ा निर्देशिकामे नहि मिलल"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' क' लेल पुस्तकचिह्न पहिनेसँ मोजुद अछि"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' क' लेल कोनो पुस्तकचिह्न नहि मिलल"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "कोनो MIME प्रकार URI '%s' क' लेल पुस्तकचिह्नमे परिभाषित नहि अछि"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' क' लेल पुस्तकचिह्नमे कोनो निज फ्लैग परिभाषित नहि अछि"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' क' लेल पुस्तकचिह्नमे कोनो समूह सेट नहि अछि"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' क' नामसँ कोनो अनुप्रयोग '%s' क' लेल पुस्तकचिह्न पंजीकृत नहि अछि"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr ""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "अक्षर समूह '%s' सँ '%s' मे परिवर्तन समर्थित नहि अछि"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' सँ '%s' परिवर्तक नहि खोलल जाए सकल"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "परिवर्तन इनपुटमे अवैध बाइट अनुक्रम"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "परिवर्तनक दौरान त्रुटि: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "इनपुट क' अंतमे आंशिक अक्षर अनुक्रम"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "फालबैक '%s' केँ कोड सेट '%s' मे बदएल नहि कए सकल"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "\"file\" योजना क' उपयोग करैबला URI '%s' एकटा निरपेक्ष यूआरआई नहि अछि"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "स्थानीय फाइल यूआरआई '%s' मे एकटा '#' सम्मिलित नहि अछि"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "यूआरआई '%s' अवैध अछि"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "यूआरआई '%s' क' होस्टनाम अवैध अछि"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "यूआरआई '%s' मे अवैध एस्केप्ड अक्षर सम्मिलित अछि"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "पथनाम '%s' एकटा निरपेक्ष पथ नहि अछि"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "अवैध होस्ट-नाम"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "निर्देशिका '%s' केँ खोलबामे त्रुटि: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr " %lu बाइट आबंटित नहि कएल जाए सकल फाइल \"%s\" केँ पढ़ै हेतु"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' फाइल केँ पढ़बामे त्रुटि: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "फाइल '%s' सँ पढ़एमे असफल: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' फाइल खोलबामे असफल :%s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "फाइल '%s' क विशेषतासभ पता करबामे असफल: fstat() असफल: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "फाइल '%s': fdopen() खोलबामे असफल: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "फाइल '%s' केँ '%s' मे नाम बदलए मे विफल: g_rename() विफल: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "फाइल '%s' बनाबैमे असफल: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "फाइल '%s' केँ लिखबाक लेल खोलबा मे विफल: fdopen() विफल: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' फाइलकेँ लिखबामे विफल: fwrite() विफल: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' फाइलकेँ लिखबामे विफल: fwrite() विफल: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' फाइलकेँ लिखबामे विफल: fwrite() विफल: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' फाइल बन्न करबामे विफल: fclose() विफल: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "'%s' मोजुदा फाइल हटाएल नहि जा सकैत अछि: g_unlink() विफल: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "टैम्पलेट '%s' अवैध अछि. एहिमे '%s' सामिल नहि अछि"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "टैम्पलेट '%s' मे XXXXXX समाहित नहि अछि"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f कि.बा."
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f मे.बा."
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f गी.बा."
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "सिंबालिक लिंक '%s' सँ थीम पढ़बामे असफल %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "सिंबालिक लिंक समर्थित नहि अछि"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' सँ '%s' परिवर्तक नहि खोलल जाए सकल: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "यहाँ एकटा रा रीड नहि कए सकैत g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "रीड बफर मे बचल अपरिवर्तित आँकड़ा"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "आंशिक अक्षर मे चैनल समाप्त होइछ"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "यहाँ एकटा रा रीड नहि कए सकैत - g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "फाइल '%s' खोलबामे असफल: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' फाइल चित्रित करबामे विफल: mmap() विफल: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr ""
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "पँक्ति %d पर त्रुटि: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "रिक्त एंटिटी '&;' देखलक; वैध एंटिटी अछि: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"एकटा एंटिटी क' प्रारंभमे अक्षर '%s' वैध नहि अछि आओर & अक्षर एकटा एंटिटीकेँ प्रारंभ करैत "
+"अछि. जँ ई एम्परसेंड एकटा एंटिटी नहि अछि तँ एकरा एहिना एस्केप करू &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "अक्षर '%s' एकटा एंटिटी नाम क' भीतर वैध नहि अछि"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "एंटिटी नाम '%s' ज्ञात नहि अछि"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"एंटिटी अर्धविराम पर समाप्त नहि होइछ, बेसी संभव अछि जे अहाँ एम्परसेन्ड अक्षर क' प्रयोग "
+"कएनए छी आओर एकटा एंटिटी प्रारंभ नहि कएनाइ चाहैत छी- एम्परसेंड केँ एहिना एस्केप करू: &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' क' विश्लेषण करबामे असफल, जे अक्षर संदर्भ क' भीतर एकटा अँक होनाइ चाही (उदाहरण "
+"क लेल, &#234) - साइत अँक बेसी पैघ अछि"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "संप्रतीक संदर्भ '%-.*s' एकटा अनुमति प्राप्त संप्रतीक केँ एनकोड नहि करैत अछि"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "रिक्त अक्षर संदर्भ, अँक जहिना &#454 सम्मिलित अवश्य होएबाक चाही;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"अक्षर संदर्भ अर्धविराम चिन्ह क' सँग समाप्त नहि होइछ. बेसी संभव अछि जे अहाँ एकटा एम्परसेंड "
+"अक्षर क' उपयोग कएनए छी पर एकटा एंटिटी केँ प्रारंभ कएनाइ नहि चाहैत छी - एम्परसेंड केँ "
+"एस्केप करू एहिना &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "अपूर्ण एंटिटी संदर्भ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "अपूर्ण अक्षर संदर्भ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "दस्ताबेज एकटा अवयव क' नामसँ प्रारंभ होनाइ चाही (उदाहरण क' लेल- <पुस्तक>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "< क' पश्चात आबल '%s' एकटा वैध वर्ण नहि अछि. ई अवयव नामसँ प्रारंभ नहि होइछ"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "विषम अक्षर '%s', प्रत्याशित अछि एकटा '=' लक्षण नाम '%s' अवयव '%s' क' पश्चात"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' विसम संप्रतीक, एकटा '>' अथवा '/' संप्रतीक केँ '%s' तत्व क' आरंभ टैग केँ खत्म कएनाइ "
+"प्रत्याशित, अथवा विकल्पतः एकटा गुण; साइत अहाँ गुण नाममे एकटा अमान्य संप्रतीक क' प्रयोग "
+"कएनए छी"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"पुरान अक्षर '%s', जखन विशेषता '%s', अवयव '%s' क' मान देल जाइत अछि तँ बराबर चिह्नक "
+"बाद एकटा खुलल कोट चिह्न वांछित अछि"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' एकटा वैध अक्षर नहि अछि अक्षर '</' क' बाद; '%s' एकटा अवयव नाम सँ प्रारंभ नहि "
+"होइछ"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' एकटा वैध अक्षर नहि अछि क्लोज़ अवयव नाम '%s' क' बाद; स्वीकार्य अक्षर अछि '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "अवयव '%s' बन्द छला, कोनो अवयव वर्तमानमे खुलल नहि अछि"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "दस्ताबेज '%s' बन्द छला, मुदा वर्तमान खुलल अवयव अछि '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "दस्ताबेज खाली छला अथवा ओकरामे सिर्फ श्वेत रिक्ति छला"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूप सँ एकटा खुलल एंगल ब्रेकेट '<' क' पश्चाते भ' गेल"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"दस्ताबेज क' अंत अप्रत्याशित रूप सँ अवयवसभ क' खुलल हए पर भ' गेल - '%s' अंतिम खुलल अवयव "
+"छला"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"दस्ताबेज क' अंत अप्रत्याशित रूप सँ भ' गेल, वांछित छला देखनाइ टैगकेँ बन्द करैत एकटा क्लोज एंगल "
+"ब्रेकेट <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूपसँ अवयव नाम क' भीतर भ' गेल"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूप सँ विशेषता नाम क' भीतर भ' गेल"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूपसँ अवयव-खोलबाक टैगक भीतर भ' गेल."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"दस्ताबेज क' अंत अप्रत्याशित रूपसँ बराबर क' चिह्न क' बाद एकटा विशेषता नाम क' पश्चात भ' "
+"गेल; कोनो विशेषता मान नहि"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूपसँ विशेषता मान क' भीतर भ' गेल"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूपसँ अवयव '%s' लेल बन्द टैग क' भीतर भ' गेल"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "दस्ताबेज क' अंत अप्रत्याशित रूपसँ टिप्पणी अथवा प्रक्रिया निर्देश क' भीतर भ' गेल"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "स्मृतिक बाहर"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "अज्ञात त्रुटि"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "नियमित अभिव्यक्ति बहुत पैघ अछि"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "स्मृति पाबैमे विफल"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assertion expected after (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "असंगत NEWLINE विकल्प"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "अप्रत्यासित दोहराएल"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "कोड ओवरफ्लो"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "हेक्साडेसीमल अंक या '}' प्रत्याशित"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "हेक्साडेसीमल अंक प्रत्याशित"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "नहि समाप्त भेल सांकेतिक संदर्भ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "शून्य नमाइ सांकेतिक संदर्भ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "अंक प्रत्याशित"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "अमान्य सांकेतिक संदर्भ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "stray final '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "कोटेड पाठ कोटेशन चिह्न क' सँग प्रारंभ नहि होइछ"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "कमाँड पंक्तिमे मेल नहि खाएत उद्धरण चिह्न अथवा आन शैल-कोटेड पाठ"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "पाठ क' अंत सिर्फ '\\' अक्षर क' बाद भ' गेल. (पाठ छला '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr " %c लेल मैचिंग कोट सँ पहिने पाठ अंत पएलक. (पाठ छला '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "पाठ रिक्त छला (अथवा ओकरामे सिर्फ श्वेत रिक्ति छला)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "शिशु प्रक्रियासँ आँकड़ा पढ़बामे असफल"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "शिशु प्रक्रिया (%s) सँ संचारण लेल पाइप बनाबैमे असफल"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "चाइल्ड पाइप (%s) सँ पढ़बामे असफल"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "निर्देशिका '%s' (%s) पर बदलबामे असफल"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "शिशु प्रक्रिया (%s) कार्यान्वित करबामे असफल"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "अवैध प्रोग्राम नाम: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d पर तर्क सदिशमे अवैध स्ट्रिंग: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "वातावरणमे अवैध स्ट्रिंग: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "अवैध कार्यशील निर्देशिका: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "हेल्पर प्रोग्राम (%s) कार्यान्वित करबामे असफल"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"एकटा शिशु प्रक्रिया सँ आँकड़ा पढ़बामे g_io_channel_win32_poll() मे अप्रत्याशित त्रुटि"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "शिशु प्रक्रिया (%s) सँ आँकड़ा पढ़बामे असफल"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "एकटा चाइल्ड प्रक्रिया (%s) सँ चुनें() पढ़बाक आँकड़ामे अप्रत्याशित त्रुटि हुई"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() (%s) मे अप्रत्याशित त्रुटि"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) फोर्क करबामे असफल"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "शिशु प्रक्रिया \"%s\" (%s) कार्यान्वित करबामे असफल"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "आउटपुट अथवा शिशु प्रक्रिया (%s) क' इनपुट केँ अनुप्रेषित करब मे असफल"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "शिशु प्रक्रिया (%s) फॉर्क करब मे असफल"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "शिशु प्रक्रिया \"%s\" कार्यान्वित करबामे अज्ञात त्रुटि"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "शिशु पीआईडी पाइप (%s) सँ पर्याप्त आँकड़ा पढ़बामे असफल"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "यूटीएफ-8 लेल अक्षर सीमासँ बाहर"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "परिवर्तन इनपुटमे अवैध अनुक्रम"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "यूटीएफ-16 लेल अक्षर सीमासँ बाहर"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "प्रयोग:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[विकल्प...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "मद्दति विकल्प:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "मद्दति विकल्प देखाबू"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "सभटा मद्दति विकल्प देखाबू"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "अनुप्रयोग विकल्प:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "पूर्णांक मान '%s' केँ %s क' लेल विश्लेषण नहि कए सकैत अछि"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "पूर्णांक मान '%s' %s क' लेल रेंज क' बाहर अछि"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%s' दोहराएल मान क' विश्लेषण %s क' लेल नहि कए सकैत अछि"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "'%s' दोहराएल मान %s क' लेल परिसरसँ बाहर अछि"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s विकल्प विश्लेषणमे त्रुटि"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s क' लेल गुम तर्क"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "अनजान विकल्प %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "एकटा सामान्य फाइल नहि"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "फाइल खाली अछि"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"कुंजी फाइलमे '%s' पंक्ति समाहित अछि जे एकटा कुँजी मान जोड़ा, समूह, अथवा टिप्पणी नहि अछि"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "अवैध समूह नाम: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "कुंजी फाइल एकटा समूहक सँग शुरू नहि होइछ"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "अवैध कुँजी नाम: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "कुँजी फाइल मे असमर्थित एनकोडिंग '%s' समाहित अछि"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "कुँजी फाइल मे '%s' समूह नहि अछि"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "कुँजी फाइलमे '%s' कुँजी नहि अछि"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "कुँजी फाइलमे '%s' कुँजी समाहित अछि '%s' मान क' सँग जे UTF-8 नहि अछि"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "कुँजी फाइलमे '%s' कुँजी अछि जकरा मान क' विश्लेषण नहि कएल जाए सकैत अछि."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"कुँजी फाइलमे '%s' कुँजी अछि '%s' समूह मे जकर मान क' विश्लेषण नहि कएल जाए सकैत अछि."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "कुँजी फाइलमे '%s' कुँजी नहि अछि '%s' समूहमे"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "कुँजी फाइलमे पँक्ति क' अंतमे एस्केप संप्रतीक रहैत अछि"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "कुँजी फाइल मे '%s' अमान्य श्रृंखला समाहित अछि"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "मान '%s' केँ एकटा सँख्याक तरह नहि विश्लेषित कएल जाए सकैत अछि."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "पूर्णांक मान '%s' रेंज क' बाहर अछि"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "मान '%s' केँ एकटा फ्लोट सँख्याक तरह नहि विश्लेषित कएल जाए सकैत अछि."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "मान '%s' केँ बुलियन क' तौर पर विश्लेषित नहि कएल जाए सकैत अछि."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Too large count value passed to %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "स्ट्रीन पहिनेसँ बन्न अछि"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "ऑपरेशन रद्द छल"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "अज्ञात प्रकार"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s फाइल प्रकार"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s प्रकार"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "बेनाम"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "प्रयोक्ता डेस्कटाप फाइल %s नहि बनाए सकैत अछि"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s कए लेल पसंदीदा परिभाषित"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblem प्रत्याशित GEmblemedIcon केँ लेल"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ऑपरेशन समर्थित नहि अछि"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "माउंट नहि समाहित मोजुद नहि अछि"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "निर्देशिका पर कापी नहि कए सकैत अछि"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "निर्देशिकाकेँ उप्पर निर्देशिका कापी नहि कए सकैत अछि"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "लक्षित फाइल मोजुद अछि"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "निर्देशिकाकेँ बेरबेर सँ नहि कापी कए सकैछ"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "विशेष फाइलकेँ कापी नहि कए सकल"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "फाइल नाम मे '%c' नहि रहि सकैत अछि"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "आवाज माउंटकेँ लागू नहि करैत अछि"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "कोनो अनुप्रयोग ई फाइलकेँ नियंत्रणकेँ लेल पंजीकृत नहि अछि"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator is closed"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "File enumerator has outstanding operation"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "फाइल"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "फाइल जे प्रतीक राखने अछि"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon एन्कोडिंगकेँ %d संस्करणकेँ नियंत्रित नहि कए सकैत अछि"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon केँ लेल विरूपित इनपुट डेटा"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "प्रकार %s वर्गीकृत नहि अछि"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "विरूपित संस्करण संख्या: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "स्ट्रीमकेँ संग बचल आपरेशन अछि"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "अवैध फाइलनाम %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "फाइलसिस्टम सूचना पाबैमे त्रुटि: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "रूट निर्देशिकाकेँ नाम नहि बदलि सकल"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "फाइलक फेर नाम देबामे त्रुटि: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "फाइलकेँ फेर नाम नहि बदलि सकैत छी, फाइलनाम पहिनेसँ मोजुद अछि"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "अवैध फाइलनाम"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "फाइलकेँ खोलबामे त्रुटि: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "निर्देशिका नहि खोलि सकैछ"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "फाइल हटाबै मे त्रुटि: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "फाइलकेँ रद्दीमे भेजबामे त्रुटि: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ट्रैश निर्देशिका %s बनाबैमे त्रुटि: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ट्रैशक लेल उच्च स्तरीय निर्देशिका ताकबामे असमर्थ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ट्रेश निर्देशिका बनाबैमे या ताकबामे असमर्थ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ट्रेशिंग सूचनाकेँ फाइलमे बनाबैमे असमर्थ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "फाइलकेँ रद्दीमे भेजबामे त्रुटि: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "निर्देशिका बनाबैमे त्रुटि: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "सिंबलिंक बनाबैमे त्रुटि: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "फाइल घुसकाबैमे त्रुटि: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "निर्देशिका पर निर्देशिका नहि घुसकाए सकैछ"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "बैकअप फाइल निर्माण विफल"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "लक्षित फाइल हटाबैमे त्रुटि: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "माउंटकेँ बीच चलनाइ समर्थित नहि अछि"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "गुणकेँ जरूर गैर-NULL होबा चाही"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "अमान्य गुण प्रकार (string expected)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "अमान्य विस्तारित गुण नाम"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "विस्तारित गुण '%s' सेटिंगमे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' फाइल बताबैमे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (अमान्य एन्कोडिंग)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "फाइल विवरण कथित करने मे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "अमान्य गुण प्रकार (uint32 expected)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "अमान्य गुण प्रकार (uint64 expected)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "अमान्य गुण प्रकार (byte string expected)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "अनुमति सेटिंग मे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "स्वामी सेटिंग मे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink जरूर गैर-NULL होबा चाही"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "symlink सेटिंग मे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "symlink सेटिंग मे त्रुटि: फाइल एकटा symlink नहि अछि"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux संदर्भ गैर-NULL होबा चाही"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux संदर्भ सेट करबामे त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ई सिस्टम पर सक्रिय नहि अछि"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "सेटिंग गुण %s समर्थित नहि"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "फाइल पढबामे त्रुटि: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "फाइल खोजबामे त्रुटि: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "फाइल बन्न करबामे त्रुटि: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "पूर्वनिर्धारित स्थानीय फाइल मानिटरक प्रकार तकबामे असमर्थ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "फाइलमे लिखबामे त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "पुरान बैकअप लिंक हटाबैमे त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "बैकअप कापी बनाबैमे त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "अस्थाई फाइलकेँ नाम देबामे त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "फाइलकेँ काटबामे त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' फाइल खोलबमे त्रुटि: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "लक्षित फाइल निर्देशिका अछि"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "लक्षित फाइल एकटा नियमित फाइल नहि अछि"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "फाइल बाहरी रूपेँ बदलल अछि"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "पुरान फाइल केँ पढ़बामे त्रुटि: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "अमान्य GSeekType कए आपूर्ति"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "अमान्य प्राप्ति आग्रह"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream केँ काटि नहि सकल"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "अधिकतम आंकड़ा सरणी सीमा तकि पहुँचि गेल"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "स्मृति आउटपुट स्ट्रीमकेँ फेर आकार देनाइ संभव नहि"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "स्मृति आउटपुट स्ट्रीमकेँ फेर आकार देनाइ विफल"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "माउंट अनमाउंट लागू नहि करैछ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "माउंट बाहर निकालब लागू नहि करैछ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "माउंट फेर माउंट लागू नहि करैछ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "माउंट कंटेंट प्रकार गेसिंगकेँ लागू नहि करैछ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "माउंट तुल्यकालित कंटेंट प्रकार गेसिंगकेँ लागू नहि करैछ"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "आउटपुट स्ट्रीम लेखन केँ लागू नहि करैछ"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "स्रोत स्ट्रीम पहिनेसँ बन्न अछि"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "नाम"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "प्रतीक कए नाम"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "नाम"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "प्रतीक नामक संग सरणी"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "पूर्वनिर्धारित फालबैक प्रयोग करू"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "%d संस्करण GThemedIcon एन्कोडिंगकेँ नियंत्रित नहि कए सकल"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "फाइल विवरक"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "फाइल विवरक जकरासँ पढ़नाइ अछि"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "फाइल विवरक बन्न करू"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "फाइल विवरक केँ बन्न कएनाइ अछि जखन स्ट्रीम बन्न अछि"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix सँ पढ़बामे त्रुटि: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix केँ बन्न करबामे त्रुटि: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "फाइल सिस्टम रूट"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "फाइल विवरक जकरामे लिखनाइ अछि"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unix मे लिखबामे त्रुटि: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "आवाज बाहर निकालबकेँ लागू नहि करैछ"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "अनुप्रयोग नहि पाबि सकल"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "अनुप्रयोग लान्च करबामे त्रुटि: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI समर्थित नहि"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "संयोजन परिवर्तन win32 पर समर्थित नहि अछि"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "संयोजन निर्माण win32 पर समर्थित नहि अछि"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "प्रविष्टि नहि नुकाउ"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "नमहर सूची प्रारूपक प्रयोग करू"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[फाइल...]"
diff --git a/po/mg.po b/po/mg.po
new file mode 100644
index 0000000..649560c
--- /dev/null
+++ b/po/mg.po
@@ -0,0 +1,1877 @@
+# MALAGASY TRANSLATION OF GLIB.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Thierry Randrianiriana <randrianiriana@gmail.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: GLIB VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2007-03-03 19:00+0300\n"
+"Last-Translator: Fanomezana Rajaonarisoa <fano@isvtec.com>\n"
+"Language-Team: MALAGASY <i18n-malagasy-gnome@gna.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Marika manokana '%s' ho an'ny '%s' tsy nampoizina"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Tsy hita ny marika manokana '%s' ho an'ny '%s'"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Tsy nampoizina ny taf '%s', nantenaina ny tag '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Misy tag '%s' tsy nampoizina anatin'ny '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Tsy misy raki-drohy mitombina anatin'ny lahatahiry misy ny data"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Efa misy rohy ny URI '%s'"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Tsy nahitana rohy ny URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Tsy misy karazana MIME voafaritra ho an'ny rohin'ny URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Tsy misy saina manokana voafaritra ho an'ny rohin'ny URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Tsy misy vondrona voafaritra ho an'ny rohin'ny URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Tsy misy rindranasa mitondra ny anarana '%s' nanambara rohy ho an'ny '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Tsy voavaky ny rohy misolotena '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Tsy raisina an-tànana ny famadihan'amboara-marika '%s' ho '%s'"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Tsy voasokatra ny mpanova rakitra '%s' ho '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Tsy mitombina filaharan'ny byte amin'ny zavatra ovaina"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Nisy olana teo am-panovana: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Tsy feno ny filaharan'ny marika amin'ny faran'ny zavatra ovaina"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ny fallback '%s' tsy voaova ho amboaram-pango '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Tsy URI feno mampiasa ny drafitra \"rakitra\" ny URI '%s'"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Tsy azo asiana '#' ny URI '%s' an'ilay rakitra an-toerana "
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Tsy mitombina ny URI '%s'"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Tsy mitombina ny anaram-mpampiantranon'ny URI '%s'"
+
+#: glib/gconvert.c:1792
+#, fuzzy, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Misy marika nalana tamin'ny fomba tsy mety ny URI '%s'"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Tsy sori-dàlana feno ny anaran-tsori-dàlana '%s'"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Anaram-pampiantrano diso"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Nisy olana teo am-panokafana ny lahatahiry '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Tsy nahatokana %lu byte hamakiana ny rakitra \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Ny nahavaky ny mpiatin'ny rakitra '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Tsy voasokatran y rakitra '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Tsy azo ny marika manokan'ny rakitra '%s': tsy nahomby ny  fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Tsy voasokatra ny rakitra '%s': tsy nahomby ny fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Tsy voaova ny anaran'ny rakitra '%s' mba ho '%s': tsy nahomby ny g_rename(): "
+"%s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Tsy voaforona ny rakitra '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Tsy voasotra mba hanoratana ny rakitra '%s': tsy nahomby ny fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Tsy voasoratra ny rakitra '%s': tsy nahomby ny fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Tsy voasoratra ny rakitra '%s': tsy nahomby ny fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Tsy voasoratra ny rakitra '%s': tsy nahomby ny fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Tsy voahidy ny rakitra '%s': tsy nahomby ny fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Tsy mety fafàna ny rakitra '%s' misy: tsy nahomby ny g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Tsy mitombina ny lasitra '%s'; tsy tokony hisy '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Tsy misy XXXXXX ny lasitra '%s'"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Tsy voavaky ny rohy misolotena '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Tsy raisina an-tànana ny rohy misolotena"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Tsy voasokatra ny mpanova rakitra '%s' ho '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Tsy afaka manao famakiana fototra amin'ny g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Misy ambina data tsy voaova ao anatin'ny buffern'ny famakiana"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Marika tsy feno no mamarana ilay canal"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Tsy afaka manao famakiana fototra amin'ny g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Tsy voasokatra ny rakitra '%s': tsy nahomby ny open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Tsy voamap ny rakitra '%s': tsy nahomby ny mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Misy tsy fetezana amin'ny andalana %d marika %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Misy tsy fetezana amin'ny andalana %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Nahita ary '&;' foana; ireto no fidirana ekena: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Tsy mety atao fiantomboham-pidirana ny marika '%s'; ny & no manomboka ny "
+"anaran'ny ary. Raha toa ka tsy raisin'ny ary iray an-tànana io marika io "
+"(&), dia ataovy &amp; mba ialana izany"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Tsy mety atao amin'ny anaran'ary ny marika '%s'"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Tsy fantatra ny anaran'ary '%s'"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Tsy nifarana tamin'ny teboka amam-paingo ilay ary. Mety tsy nihevitra "
+"hampiasa esperluette hanombohana ary angamba ianao - esperluette fialana toy "
+"ny &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Tsy voazarazara ny '%-.*s' izay tokony ho isa anaty fiantsoana marika "
+"(&#234, ohatra). Mety lehibe loatra angamba ilay isa."
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Tsy manafango marika azo ampiasaina ny fiantsoana marika '%-.*s'"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Fiantsoana marika foana; tokony hisy isa toy ny &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Tsy niafara tamin'ny teboka amam-paingo ilay fiantsoana marika. Mety tsy "
+"nihevitra hampiasa esperluette hanombohana ary angamba ianao - esperluette "
+"fialana toy ny &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Fiantsoana ary tsy vita"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Fiantsoana marika tsy vita"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Lahabolana voafango UTF-8 tsy mitombina"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Lahabolana voafango UTF-8 tsy mitombina"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Lahabolana voafango UTF-8 tsy mitombina"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+"Tsy maintsy manomboka amina singantaharo ilay tahirin-kevitra (oh. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Tsy mety atao aorian'ny marika '<' ny marika '%s'. Tsy mety anombohana "
+"anaran-tsingataharo io"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Marika '%s' hafahafa; nanantena marika '>' hamarana ny tag manomboka ny "
+"singantaharo '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Marika '%s' hafahafa; nanantena '=' aorian'ny anaran'ny marika manokana '%s' "
+"amin'ny singantaharo '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Marika hafahafa '%s'; nanantena marika '>' na '/' hamarana ny tag manomboka "
+"ny singantaharo '%s', na koa marika manokana iray. Mety nampiasa marika tsy "
+"ekena amin'ny anarana marika manokana angamba ianao."
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Marika '%s' hafahafa; nanantena farango manokatra aorian'ny mira rehefa "
+"manome ny sanda ny marika manokana '%s' amin'ny singantaharo '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Tsy mety atao aorian'ny marika '</' ny marika '%s'. Tsy mety anombohana "
+"anaran-tsingantaharo ny '%s'."
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' dia tsy mety atao aorian'ny anaran'ny singantaharo mamarana ny marika '%"
+"s'. '>' no marika mety atao eo"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Nofaranana ny singantaharo '%s'; tsy misy singantaharo misokatra izao"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Nofaranana ny singantaharo '%s', fa  '%s' no singantaharo misokatra izao"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Foana na tsy misy afa-tsy elanelana ilay tahirin-kevitra"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Nifarana tampoka taoriana fonon-teny kitso loha '<' ilay tahirin-kevitra"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Nifarana tampoka ilay tahirin-kevitra nefa misy singantaharo mbola "
+"misokatra; '%s' no singantaharo farany nisokatra"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Nifarana tampoka ilay singantaharo; nanantena fonon-teny kitso loha mamarana "
+"ny tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Nifarana tampoka tanaty anaran-tsingataharo ilay tahirin-kevitra"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Nifarana tampoka tanaty anarana marika manokana ilay tahirin-kevitra"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Nifarana tampoka tanaty tag manomboka singantaharo ilay tahirin-kevitra."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Nifarana tampoka taorian'ny mira manaraka anarana marika manokana ilay "
+"tahirin-kevitra; tsy misy sanda-marika manokana"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Nifarana tampoka ilay tahirin-kevitra raha mbola tanaty sanda-marika manokana"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Nifarana tampoka tanatin'ny tag mamarana ny singantaharo '%s' ilay tahirin-"
+"kevitra"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Nifarana tampoka tanaty teny fanampiny na torolàlana fikirakirana ilay "
+"tahirin-kevitra"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Marika tsy feno no mamarana ilay canal"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Tsy mitombina filaharan'ny byte amin'ny zavatra ovaina"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Fiantsoana marika tsy vita"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Fiantsoana marika tsy vita"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Fiantsoana marika tsy vita"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Tsy raisina an-tànana ny rohy misolotena"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Misy tsy fetezana amin'ny andalana %d marika %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Fiantsoana ary tsy vita"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Tsy manomboka amin'ny farango ny teny nalaina"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Tsy mifamaly ny farango anaty lazam-baiko na lahabolana hafa tonon'ny akora"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"Nifarana taorian'ny marika '\\' ilay lahabolana. ('%s' ilay lahabolana)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Nifarana talohan'ny nahitana ny ilan'ny farango ho an'ny %c ilay lahabolana. "
+"('%s' ilay lahabolana)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Foana ilay lahabolana (na tsy misy afa-tsy elanelana)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Tsy voavaky ny datan'ny fizotra zanaka"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Tsy voaforona ny fantsona ifandraisana amin'ny fizotra zanaka (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Tsy voavaky ny mpiatin'ny fantson'ny zanaka (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Tsy nahomby ny fanovana lahatahiry ho '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Tsy nahavita nanatanteraka ny fizotra zanaka (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Anaran-drindranasa diso: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Tsy mitombina ny laha-dazan'ny mpitondra tondriky amin'ny %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Tsy mitombina ny laha-daza anatin'ny tontolo: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Lahatahiry fiasana tsy mitombina: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Tsy nahavita nandefa ny rindranasa mpanampy (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Nisy olana tsy nampoizina tanatin'ny g_io_channel_win32_poll() raha namaky "
+"ny datan'ny fizotra zanaka"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Tsy voavaky ny datan'ny fizotra zanaka (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Nisy olana tsy nampoizina tanatin'ny select() raha namaky ny datan'ny "
+"fizotra zanaka (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Nisy olana tsy nampoizina tanatin'ny waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Tsy nahavita nanasaka (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Tsy nahavita nandefa ny fizotra zanaka \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"Tsy nahavita namily lalana ny fivoahana na fidiran'ny fizotra zanaka (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Tsy nahavita nanasaka ny fizotra zanaka (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+"Nisy olana tsy fantatra teo am-panatanterahana ny fizotra zanaka \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Tsy nahavaky data ampy tanatin'ny fantsona zanaka pid (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Mihoatra ny fetran'ny UTF-8 ilay marika"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Tsy mitombina ny filaharana amin'ny fidiran'ny fanovana"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Mihoatra ny fetran'ny UTF-16 ilay marika"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Fampiasa:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[SAFIDY...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Safidy momba ny toro-làlana:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Asehoy ny safidy momba ny toro-làlana"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Asehoy ny safidy rehetra momba ny toro-làlana"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Safidy momba ny rindranasa:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Tsy afaka mizarazara ny sanda feno '%s' ho an'ny %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Mihoatra ny fetra ny sanda feno '%s' ho an'ny '%s'"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Tsy afaka mizarazara sanda roa '%s' ho an'ny '%s'"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Mihoatra ny fetra ny sanda roa '%s' ho an'ny '%s'"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Nisy olana teo am-pizarazarana ny safidy %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Tondrikin'ny %s tsy eo"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Safidy %s tsy fantatra"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Tsy hita anatin'ny lahatahiry misy ny data ny rakitra misy ny famaha marina"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Rakitra tsy mahazatra"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Foana ilay rakitra"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Misy andalana '%s' izay tsy roroa famaha-sanda, vondrona, na teny fanampiny "
+"ilay raki-pamaha"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Anaram-bondrona diso: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Tsy manomboka amina vondrona ilay raki-pamaha"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Anaram-pamaha diso: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Misy fango '%s' tsy raisina an-tànana ilay raki-pamaha"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Tsy manana vondrona '%s' ilay raki-pamaha"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Tsy manana famaha '%s' ilay raki-pamaha"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Misy famaha '%s' manana sanda '%s' izay tsy UTF-8 anatin'ilay raki-pamaha "
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Misy famaha '%s' manana sanda tsy mety avadika mba ho azo anatin'ilay raki-"
+"pamaha."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Misy famaha '%s' anatin'ny vondrona '%s' manana sanda izay tsy mety avadika "
+"mba ho azo ilay raki-pamaha."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Tsy manana famaha '%s' anatin'ny vondrona '%s' ilay raki-pamaha"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Misy marika fialana amin'ny faran'ny andalan'ilay raki-pamaha"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Misy fisesisesim-pialana '%s' tsy mitombina anatin'ilay raki-pamaha"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Tsy mety avadika ho isa mba ho azo ny sanda '%s'."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Mihoatra ny fetra ny sanda feno '%s'"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Tsy mety avadika ho isa float mba ho azo ny sanda '%s'."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Tsy mety avadika ho boleanina mba ho azo ny sanda '%s'."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Safidy %s tsy fantatra"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Tsy raisina an-tànana ny rohy misolotena"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Tsy raisina an-tànana ny rohy misolotena"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr ""
+"Tsy misy rindranasa mitondra ny anarana '%s' nanambara rohy ho an'ny '%s'"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Tsy mitombina ny anaram-mpampiantranon'ny URI '%s'"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Anaram-pamaha diso: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Anaram-pampiantrano diso"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Tsy voaforona ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Tsy voaforona ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Tsy voaforona ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Nisy olana teo am-panokafana ny lahatahiry '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Nisy olana teo am-pizarazarana ny safidy %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Nifarana tampoka tanaty anarana marika manokana ilay tahirin-kevitra"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Nisy olana teo am-panokafana ny lahatahiry '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Nisy olana teo am-panovana: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Nisy olana teo am-panovana: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Misy tsy fetezana amin'ny andalana %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Nisy olana teo am-panovana: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Tsy raisina an-tànana ny rohy misolotena"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Nisy olana teo am-pizarazarana ny safidy %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Rakitra tsy mahazatra"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Anaram-pamaha diso: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Tsy mitombina ny anaram-mpampiantranon'ny URI '%s'"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Nisy olana teo am-pamakiana ny rakitra '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Misy tsy fetezana amin'ny andalana %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Nisy olana teo am-pizarazarana ny safidy %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Nisy olana teo am-pizarazarana ny safidy %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Tsy raisina an-tànana ny rohy misolotena"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[SAFIDY...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Nisy olana teo am-pizarazarana ny safidy %s"
diff --git a/po/mk.po b/po/mk.po
new file mode 100644
index 0000000..7bdc5e4
--- /dev/null
+++ b/po/mk.po
@@ -0,0 +1,1869 @@
+# translation of glib.HEAD.mk.po to Macedonian
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Ivan Stojmirov <stojmir@linux.net.mk>, 2002.
+# Arangel Angov <ufo@linux.net.mk>, 2004, 2005, 2006.
+# Арангел Ангов <ufo@linux.net.mk>, 2005.
+# Jovan Naumovski <jovan@lugola.net>, 2006, 2007, 2008.
+# Arangel Angov <arangel@linux.net.mk>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.mk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-02-04 04:11+0100\n"
+"Last-Translator: Jovan Naumovski <jovan@lugola.net>\n"
+"Language-Team: Macedonian <mkde-l10n@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural= n%10==1 && n%100!=11 ? 0 : 1\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Неочекуван атрибут „%s“ за елементот „%s“"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Атрибутот „%s“ на елементот „%s“ не е пронајден"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Неочекувана етикета „%s“, се очекуваше „%s“"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Неочекувана етикета „%s“ во „%s“"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Не е пронајдена валидна датотека за обележувач во дирекориумите со податоци"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Обележувач за URI „%s“ веќе постои"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Не е пронајден обележувач за URI „%s“"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Не е дефиниран MIME тип во обележувачот за URI „%s“"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Не е дефинирано приватно знаме за обележувачот за URI „%s“"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Не се поставени групи во обележувачот за URI „%s“"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Нема апликација со име „%s“ која регистрирала обележувач за „%s“"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Не успеав да ја проширам линијата за извршување „%s“ со URI „%s“"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Конвертирањето од  %s' во „%s“ не е поддржано"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не можам да го отворам конверторот од „%s“ до „%s“"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Невалидна секвенца на бајти во влезот на конвертирањето"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Грешка при конвертирање: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Парцијална секвенца на карактер на крајот од влезот"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Не можам да го конвертирам „%s“ во енкодингот „%s“"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "„%s“ не е апсолутна адреса која што ја користи шемата на датотеката"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Локалното URI „%s“ може да не користи '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "„%s“ е невалиден URI"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Името на хостот на URI %s е невалидно"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "„%s“ содржи невалидни посебни карактери"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Патеката „%s“ не е апсолутна патека"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Невалидно име на хост"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Грешка при отворање на директориумот „%s“: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Не можам да алоцирам %lu бајти за да ја прочитам датотеката \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Грешка при читањето на датотеката „%s“: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Не успеав да прочитам од датотеката „%s“: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Не успеав да ја отворам датотеката „%s“: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Не успеав да ги добијам атрибутите на датотеката „%s“: fstat() failed: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Не успеав да ја отворам датотеката „%s“: fdopen() failed: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Не успеав да ја реименувам датотеката „%s“ во „%s“: g_rename() не успеа: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Не успеав да ја креирам датотеката „%s“: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Не успеав да ја отворам датотеката „%s“ за запишување: fdopen() не успеа: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Не успеав да запишам во датотеката „%s“: fwrite() не успеа: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Не успеав да запишам во датотеката „%s“: fwrite() не успеа: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Не успеав да запишам во датотеката „%s“: fwrite() не успеа: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Не успеав да ја затворам датотeката „%s“: fclose() не успеа: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Постоечката датотека „%s“ не може да биде отстранета: g_unlink()·не успеа "
+"за: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Мострата „%s“ е невалидна, не треба да содржи „%s“"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Мострата „%s“ не содржи со XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Не успеав да ја прочитам симболичката врска „%s“: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Симболичките врски не се поддржани"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не можам да го отворам конверторот од „%s“ до „%s“: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Не можам да направам грубо читање во g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Преостанати неконвертирани податоци во баферот за читање"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Каналот се терминира во парцијален карактер"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Неможам да читам во g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Не успеав да ја отворам датотеката „%s“: open() не успеа: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Не успеав да ја означам датотеката „%s“: mmap() не успеа: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Грешка на линија %d знак %d"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Грешка на линија %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Празен ентитет '&;' видени; валидни ентитети се: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Карактерот „%s“ претставува невалиден почеток на име на ентитет, карактерот "
+"& го започнува ентитетот;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Карактерот „%s“ не е валиден внатре во името на ентитетот"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Името на ентитетот „%s“ е познато"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Ентитетот не заврши со полуколоната; најверојатно сте користеле симбол без "
+"намера да започнете ентитет - избегнете го симболот со &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Не успеав да парасирам '%-.*s', кое што требаше да биде параметар за "
+"внатрешен дигитален карактер (на пример, &#234) - најверојатно бројот е "
+"преголем"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Параметарот на карактерот '%-.*s' не енкодира забранет карактер"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Параметар за празен карактер; треба да содржи бројка како што е &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Референцата за карактерите не заврши со полуколона; најверојатно сте "
+"користеле симбол без намера да започнете ентитет - одбегнете го симболот со "
+"&amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Недовршен параметар за ентитет"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Недовршен параметар за карактер"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Невалиден UTF-8 енкодиран текст - предолга секвенца"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Невалиден UTF-8 енкодиран текст - нема почетен знак"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Невалиден UTF-8 енкодиран текст - невалидно „%s“"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Документите мора да започнуваат со елемент (пр. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s“ не е валиден карактер по '<' карактер; не може да започне име на елемент"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Чуден карактер „%s“, очекував '>' карактер да го заврши почетниот таг на "
+"елементот „%s“"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Чуден карактер „%s“, очекував '=' по името на атрибутот „%s“ од елементот '%"
+"s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Чуден карактер „%s“, очекував '>' или '/' за да го затворам почетниот таг на "
+"елементот „%s“; можеби сте користеле невалиден карактер во името на атрибутот"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Чуден карактер „%s“, се очекува отворен забележан цитат по еднаквите знаци "
+"кога се даваат вредности за атрибутот „%s“· од елементот „%s“·"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s“ не е валиден карактер, по карактерите </';·„%s“·не може да започне име "
+"на елемент"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s“·не е валиден карактер што би можел да доје по името на елементот „%s“, "
+"дозволениот карактер е '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Елементот „%s“ е затворен. Во моментов не е отворен ниеден елемент"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Елементот „%s“ е затворен, но тековно отворениот елемент е „%s“"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Документот е празен или содржи само празни места"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Документот заврши неочекувано веднаш по заградата за отворениот агол '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Документот заврши неочекувано со сеуште отворени елементи - „%s“ беше "
+"последниот отворен елемент"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Документот заврши неочекувано, очекував да видам го видам аголот на "
+"заградата за затворање на тагот <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Документот заврши неочекувано внатре во иметп на елементот"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Документот заврши неочекувано внатре во името на атрибутот"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Документот заврши неочекувано внатре во тагот за отворање на елементи."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr "Нема вредност за атрибутот"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Документот заврши неочекувано додека беше внатре во вредноста на атрибутот"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Документот заврши неочекувано внатре во тагот за затворање на елементи „%s“"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Документот заврши неочекувано внатре во коментар или инструкција за "
+"процесирање"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "корумпиран објект"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "интерна грешка или корумпиран објект"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "нема повеќе меморија"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "ограничувањето за следење е достигнато"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "шаблонот содржи предмети кои не се поддржани за парцијално совпаѓање"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "внатрешна грешка"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "задните референци не се поддржани како услови за парцијално совпаѓање"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "достигнато е ограничувањето за рекурзија"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "достигнато е ограничувањето за празни поднизи за работните простори"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "невалидна комбинација од ознаки за нов ред"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "непозната грешка"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ на крајот на шаблонот"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c на крајот на шаблонот"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "непрепознатиот знак после \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"знаците за промена на мала-голема буква (\\l, \\L, \\u, \\U) не се дозволени "
+"овде"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "броевите се преголеми за во {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "бројот е преголем за ознаката {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "недостасува ] за прекин за класата знаци"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "невалидна секвенца за излез во класата за знаци"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "опсегот е преминат во класата на знаци"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "нема ништо за повторување"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "непрепознат знак после (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "непрепознат знак после (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "непрепознат знак после (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "Класите со POSIX имиња се поддржани само внатре во класа"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "недостасува ) за прекин"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") без отворање на ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "цифрите (?R или (?[+-] мора да бидат проследени со )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "референца до непостоечки подшаблон"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "недостасува ) после коментарот"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "регуларниот израз е преголем"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "не успеав да добијам меморија"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "тврдењето за поглед наназад не е со фиксна должина"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "неправилен број или име после (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "условната група содржи повеќе од две гранки"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "се очекува барање после (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "непознато име на POSIX класа"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX елементите не се поддржани"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "вредноста на знакот во секвенцата \\x{...} е преголема"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "невалиден услов (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C не е дозволено во барање за поглед наназад"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "рекурзивниот повик може да се повикува бесконечно"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "недостасува прекинувач во името на подшаблонот"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "два подшаблони имаат исти имиња"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "неправилна \\P или \\p секвенца"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "непознато име на својство после \\P или \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "името на подшаблонот е предолго (максимум 32 знаци)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "премногу именувани подшаблони (максимум 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "окталната вредност е поголема од \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE групата содржи повеќе од една гранка"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "повторувањето на DEFINE група не е дозволено"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "нецелосни NEWLINE опции"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g не е проследено со име во загради или опционално ненулти број во загради"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "неочекувано повторување"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "overflow на код"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "преминато место за компајлирање"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "претходно проверениот референциран подшаблон не е пронајден"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Грешка при совпаѓањето на регуларни изрази %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE библиотеката е компајлирана без UTF-8 поддршка"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE библиотеката е компајлирана без поддршка за својствата на UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Грешка при компајлирање на регуларниот израз %s кај знакот %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Грешка во оптимизирањето на регуларниот израз %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "Се очекува хексдецимална цифра или „}“"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "Се очекува хексдецимална цифра"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "недостасува „<“ во симболичката референца"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "Недовршена симболичка референца"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "симболичка референца со нулта должина"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "се очекува цифра"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "нелегална симболичка референца"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "занемари го финалното „\\“"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "непозната излезна секвенца"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Грешка при парсирањето на текстот за замена „%s“ на знакот %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Цитираниот текст не започнува со знакот за цитирање"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Несовпаѓачки знак за цитирање на командната линија или друг текст цитиран во "
+"школка"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Текстот заврши веднаш по '\\' карактер. (Текстот беше „%s“)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Текстот заврши пред да биде пронајден совпаѓачки цитат за %c. (Текстот беше "
+"„%s“)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Текстот беше празен (или содржеше само празни места)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Не успеав да ги прочитам податоците од подпроцесот"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Не успеав да креирам цевка за комуникација со другите подпроцеси (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Не успеав да прочитам од под-цевката (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Не успеав да го променам директориумот„%s“ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Не успеав да го извршам подпроцесот (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Невалидно име на програма: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Невалиден стринг во аргументот за векторот кај %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Невалиден стринг во околината: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Невалиден работен директориум: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Не успеав да ја извршам програмата за помош (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Неочекувана грешка во g_io_channel_win32_poll() при читање на податоциод "
+"подпроцесот"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Не успеав да ги прочитам податоците од подпроцесите (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Неочекувана грешка во select() при читањето на податоци од подпроцесот (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Неочекувана грешка во waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Не успеав да форкувам (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Не успеав да го извршам подпроцесот \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Не успеав да го пренасочам излезот или влезот на подпроцесот (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Не успеав да го форкувам подпроцесот (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Непозната грешка при извршувањето на подпроцесот \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Не успеав да прочитам доволно податоци од pid подцевката (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Карактерот е надвор од опсегот за UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Невалидна секвенца во излезот од конвертирањето"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Карактерот е надвор од опсег за UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Употреба:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ОПЦИЈА...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Опции за помош:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Покажи ги сите опции за помош"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Покажи ги сите опции за помош"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Опции на апликацијата:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Не можам да парсирам вредност за целобројната вредност „%s“ за %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Вредноста на целиот број „%s“ за %s е надвор од опсегот"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Не можам да ја анализирам целобројната вредност „%s“ за %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Вредноста на целиот број „%s“ за %s е надвор од опсегот"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Грешка при парсирањето на опцијата %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Недостига аргумент за %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Непозната опција „%s“·"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Не е пронајден валиден клуч во директориумите за пребарување"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Не е обична датотека"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Датотеката е празна"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Клучната датотека содржи линија „%s“· која што не е пар на клучна вредност, "
+"група или коментар"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Невалидно име на група: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Клучната датотека не започнува со група"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Невалидно име на клуч: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Клучната датотека содржи неподдржан енкодинг „%s“·"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Клучната датотека не ја содржи групата „%s“"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Клучната датотека не го содржи клучот „%s“"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Клучната датотека го содржи клучот „%s“ со вредноста „%s“ која што не е UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Клучната датотека го содржи клучот „%s“ чија што вредност неможе да биде "
+"препознаена."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Клучната датотека го содржи клучот „%s“ во групата „%s“ која што има "
+"вредност која што неможе да биде препознаена."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Клучната датотека не содржи клуч во „%s“ во групата „%s“"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Клучната датотека содржи специјални карактери на крајот на линијата"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Клучната датотека содржи невалидни посебни карактери „%s“"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Вредноста „%s“ неможе да биде препознаена како број."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Целобројната вредност „%s“ е надвор од опсегот"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Вредноста „%s“ неможе да биде препознаена како рационален број."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Вредноста „%s“ не може да биде препознаена како boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Преголема бројна вредност дадена на %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Стримот е веќе затворен"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Операцијата беше прекината"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Непознат тип"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s тип на датотека"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s тип"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Неочекувано прерано завршување на стрим"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Неименувано"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop датотеката не одреди Exec поле"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "не успеав да најдам терминал потребен за апликација"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Не можам да креирам папка за конфигурација на корисничките апликации %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Не можам да креирам папка за MIME конфигурации %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Не можам да креирам корисничка desktop датотека %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Сопствена дефиниција на %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "уредот нема имплементирано вадење"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "уредот нема имплементирано барање за медиум"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Операцијата не е поддржана"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Монтирањето кое се содржи не постои"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Не можам да копирам над директориум"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Не можам да копирам директориум над директориум"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Целната датотека постои"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Не можам рекурзивно да го ископирам директориумот"
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "Не можам да копирам над директориум"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Дадена е невалидна вредност за симболичката врска"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Ѓубрето не е поддржано"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Имињата на датотеки не можат да содржат „%c“"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "просторот нема имплементирано монтирање"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Не е регистрирана апликација за справување со оваа датотека"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Енумераторот е затворен"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Енумераторот на датотеки има преголема операција "
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Енумераторот за датотеки веќе е затворен"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Името на хостот на URI %s е невалидно"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Стримот не поддржува query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Барањето не е поддржано за стрим"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Смалувањето не е дозволено на влезен стрим"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Смалувањето не е поддржано на стрим"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Влезниот стрим нема имплементирано читање"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Стримот има преголема операција"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Не можам да најдам локален директориум за тип на надгледување"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Невалидно име на датотека %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Грешка при добивањето на информации за датотечниот систем: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Не можам да го преименувам директориумот root"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Грешка во преименувањето на директоруимот: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Не можам да ја преименувам датотеката, името на датотеката веќе постои"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Невалидно име на датотека"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Грешка во отворањето на директоруимот: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Не можам да го отворам директориумот"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Грешка при отстранувањето на датотеката: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Грешка при преместувањето на датотеката во ѓубре: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Не успеав да креирам директориум за ѓубре %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Не успеав да го најдам директориумот од највисоко ниво за ѓубрето"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Не успеав да го најдам или креирам директориумот за ѓубре"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr ""
+"Не успеав да креирам датотека со информации за преместувањето во ѓубре: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Не успеав да ја преместам датотеката во ѓубрето: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Грешка при отворање на директориумот „%s“: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Грешка во креирањето на симболичка врска: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Грешка во преместувањето на датотеката: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Не можам да го преместам директориумот над друг директориум"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Не успеа креирањето на бекап датотеката"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Грешка во отстранувањето на целната датотека: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Движењето меѓу монтирањата не е поддржано"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Вредноста на атрибутот не смее да е NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Невалиден тип на атрибут (се очекуваше знаковна низа)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Невалидно име на проширениот атрибут"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Грешка во поставувањето на проширениот атрибут „%s“: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Грешка во стартувањето на датотеката „%s“: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (невалидно енкодирање)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Грешка во поставувањето на опишувач на датотека: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Невалиден тип на атрибут (се очекуваше uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Невалиден тип на атрибут (се очекуваше uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Невалиден тип на атрибут (се очекуваше низа од бајти)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Грешка во поставувањето на пермисиите: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Грешка при поставувањето на сопственикот: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "симболичката врска не треба да е NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Грешка во поставувањето на симболичката врска: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Грешка при креирањето на симболичката врска: датотеката не е симболичка врска"
+
+#: gio/glocalfileinfo.c:2074
+#, fuzzy
+msgid "SELinux context must be non-NULL"
+msgstr "симболичката врска не треба да е NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Грешка при поставувањето на сопственикот: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Поставувањето на атрибутот %s не е поддржано"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Грешка при читањето од датотеката: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Грешка при барањето во датотеката: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Грешка во затворањето на датотеката: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Не можам да го откријам типот на локалниот надгледувач на датотеки"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Грешка во запишувањето во датотеката: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Грешка во отстранувањето на старата бекап врска: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Грешка при креирањето на бекап копија: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Грешка во преименувањето на привремената датотека: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Грешка при скратувањето на датотеката: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Грешка при отворањето на датотеката „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Целната датотека е директориум"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Целната датотека не е обична датотека"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Датотеката беше надворешно изменета"
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Грешка при отстранувањето на датотеката: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Обезбеден е невалиден GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Невалидно барање за барање"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Не можам да го смалам GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Достигнато е ограничувањето за максимум податоци во низа"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Меморијата на излезниот стрим не може да си ја промени големината"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Не успеав да ја променам големината на меморијата на излезниот стрим"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount нема имплементирано одмонтирање"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount нема имплементирано вадење"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount нема имплементирано запишување"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+#, fuzzy
+msgid "mount doesn't implement content type guessing"
+msgstr "mount нема имплементирано одмонтирање"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+#, fuzzy
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount нема имплементирано одмонтирање"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Излезниот стрим нема имплементирано запишување"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Изворот на стримот веќе е затворен"
+
+#: gio/gthemedicon.c:211
+#, fuzzy
+msgid "name"
+msgstr "Неименувано"
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Името на хостот на URI %s е невалидно"
+
+#: gio/gthemedicon.c:223
+#, fuzzy
+msgid "names"
+msgstr "Неименувано"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Грешка во поставувањето на опишувач на датотека: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Грешка при читањето од unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Грешка во затворањето на unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Root на датотечниот систем"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Грешка во запишувањето на unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "просторот нема имплементирано вадење"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Не можам да ја најдам апликацијата"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Грешка во пуштањето на апликацијата: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI-те не се поддржани"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "промените на асоцијации не се поддржани на win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Креирањето на асоцијација не е поддржано на win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "не ги криј записите"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "користи фомрат со долго листање"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ДАТОТЕКА...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u бајт"
+#~ msgstr[1] "%u бајти"
+#~ msgstr[2] "%u бајти"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Грешка при креирањето на бекап врска: %s"
diff --git a/po/ml.po b/po/ml.po
new file mode 100644
index 0000000..5b308fe
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,1825 @@
+# translation of glib.HEAD.ml.po to
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# FSF-India <locale@gnu.org.in>, 2003.
+# Ani Peter <apeter@redhat.com>, 2006, 2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.ml\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 21:08+0530\n"
+"Last-Translator: \n"
+"Language-Team:  <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "r'%s' എലമെന്‍റിന് അപ്രതീക്ഷിതമായ സവിശേഷത '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "എലമെന്‍റ് '%s'-ന്‍റെ സവിശേഷതയായ '%s' കണ്ടുകിട്ടിയില്ല"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "അപ്രതീക്ഷിതമായ ടാഗ് '%s', ടാഗ് '%s' പ്രതീക്ഷിച്ചിരുന്നു"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%s'-ന്‍റെ ഉളളില്‍ അപ്രതീക്ഷിതമായ ടാഗ് '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "ഡേറ്റാ ഡയറക്ടറികളില്‍ സാധുതയുളള ബുക്ക് മാര്‍ക്ക് കണ്ടുകിട്ടിയില്ല"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s'-നുളള ബുക്ക് മാര്‍ക്ക് നിലവിലുണ്ട് "
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s'-നുളള ബുക്ക് മാര്‍ക്ക് ലഭ്യമല്ല"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s'-നുളള ബുക്ക് മാര്‍ക്കില്‍ MIME തരം വ്യക്തമാക്കിയിട്ടില്ല"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s'-നുളള ബുക്ക് മാര്‍ക്കില്‍ സ്വകാര്യ ഫ്ളാഗ് വ്യക്തമാക്കിയിട്ടില്ല"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s'-നുളള ബുക്ക് മാര്‍ക്കില്‍ ഗ്രൂപ്പുകളൊന്നും ക്രമീകരിച്ചിട്ടില്ല"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' എന്ന് പേരുളള ഒരു പ്രയോഗവും '%s'-നുളള ബുക്ക് മാര്‍ക്കില്‍ രജിസ്ടര്‍ ചെയ്തിട്ടില്ല"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "'%s' എന്ന URI ഉളള '%s' എന്ന  exec വരി വികസിപ്പിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "അക്ഷരക്കൂട്ടം'%s'ല് നിന്നും '%s'ലേക്കുളള മാറ്റം പിന്തുണയ്ക്കുന്നില്ല"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s'-ല്‍ നിന്നും '%s'-ലേക്ക് വേര്‍തിരിക്കുന്ന സംവിധാനം ലഭ്യമായില്ല"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "മാറ്റം വരുത്തുന്ന ഇന്‍പുട്ടില്‍ തെറ്റായ ബൈറ്റ് ക്രമം"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "മാറ്റം വരുത്തുന്നതില്‍ പരാജയം : %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "ഇന്‍പുട്ടിന്‍റെ അവസാനം ഭാഗികമായ അക്ഷര ക്രമം"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ഫോള്‍സെറ്റ് '%s'-ല്‍ നിന്നും കോഡ്സെറ്റ് '%s'-ലേക്ക് മാറ്റുവാന്‍ സാധ്യമല്ല"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI %s \"file\" സ്കീം ഉപയോഗിക്കുന്ന പൂര്‍ണ്ണമായ ഒരു URI അല്ല"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "ലോക്കല്‍ ഫയല്‍ URI %s-ല്‍ '#' ഉല്‍പ്പെടുത്താന്‍ പാടില്ല"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' അസാധുവാണ്"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s'-ന്‍റെ ഹോസ്റ്റ് നാമം അസാധുവാണ്"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s'-ല്‍ അസാധുവായ എസ്കേപ്ഡ് അക്ഷരങ്ങള്‍ ഉണ്ട്"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' പാഥ് നാമം പൂര്‍ണ്ണമായ ഒരു പാഥ് അല്ല"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "സാധുതയില്ലാത്ത ഹോസ്റ്റ് നാമം"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "ഡയറക്ടറി '%s' തുറക്കുന്നതില്‍ പിശക്: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu ബൈറ്റ്സ് ഫയല്‍ \"%s\" വായിക്കുന്നതിനായി നീക്ക് വയ്ക്കുവാന്‍ സാധ്യമല്ല"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "%s വായിക്കുന്നതില്‍‌ പരാജയം : %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "ഫയല്‍ \"%s\" വളരെ വലുതാണു്."
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "ഫയല്‍ '%s'-ല്‍ നിന്നും വായിക്കുന്നതില്‍ പരാജയം: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "%s തുറക്കുന്നതില്‍‌ പരാജയം : %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "%s-ന്‍റെ വിശേഷതകള്‍ കണ്ടെത്തുന്നതില്‍ പരാജയം: fstat() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' തുറക്കുന്നതില്‍ പരാജയം: fdopen() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"ഫയല്‍ '%s'-ന്‍റെ പേര് '%s' ആയി മാറ്റുന്നതില്‍ പരാജയപ്പെട്ടു: g_rename() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ഫയല്‍ '%s' സൃഷ്ടിക്കുന്നതില്‍ പരാജയം: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "എഴുതുന്നതിനായി '%s' തുറക്കുവാന്‍ പരാജയപ്പെട്ടു: fdopen() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ഫയല്‍ '%s' എഴുതുവാന്‍ പരാജയപ്പെട്ടു: fwrite() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ഫയല്‍ '%s' എഴുതുവാന്‍ പരാജയപ്പെട്ടു: fflush() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ഫയല്‍ '%s' എഴുതുവാന്‍ പരാജയപ്പെട്ടു: fsync() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ഫയല്‍ '%s' അടയ്ക്കുന്നതില്‍ പരാജയപ്പെട്ടു: fclose() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "നിലവിലുളള ഫയല്‍ '%s' നീക്കം ചെയ്യുവാന്‍ സാധ്യമല്ല: g_unlink() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "ടെംപ്ളേറ്റ് \"%s\" അസാധുവാണ്,ഇതില്‍ \"%s\" ഉണ്ടാകുവാന്‍ പാടില്ല"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "ടെംപ്ളേറ്റ് \"%s\"-ല്‍ XXXXXX ലഭ്യമല്ല"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "സിബോളിക്ക് ലിങ്ക് '%s' വായിക്കുന്നതില്‍ പരാജയപ്പെട്ടു: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "സിബോളിക്ക് ലിങ്ക് പിന്തുണയ്ക്കുന്നില്ല"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s'-ല്‍ നിന്നും '%s'-ലേക്ക് വേര്‍തിരിക്കുന്ന സംവിധാനം ലഭ്യമായില്ല: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string-ല്‍ റോ വായന സാധ്യമല്ല"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "റീഡ് ബഫറില്‍ ബാക്കിയുളള വേര്‍തിരിക്കാത്ത ഡേറ്റാ"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "ചാനല്‍ അവസാനിക്കുന്നത് ഭാഗികമായ അക്ഷരത്തില്‍ ആണ്"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end-ല്‍ റോ വായന സാധ്യമല്ല"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ഫയല്‍ '%s' തുറക്കുന്നതില്‍ പരാജയപ്പെട്ടു: open() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ഫയല്‍ '%s' മാപ്പ് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു: mmap() പരാജയപ്പെട്ടു: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d-ആം വരിയില്‍ %d-ആം അക്ഷരത്തില്‍ പിശക്:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "വരി %d-ല്‍ പിശക്: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"‌ശൂന്യമായ എന്‍റിന്‍റി '&;' കണ്ടു; അനുവദനീയമായവ ഇവയാണ്: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"%sല് ഒരു എന്‍റിന്‍റി തു‌ടങ്ങാവുന്നതല്ല. & എന്ന അക്ഷരം ഒരു എന്‍റിന്‍റിയുടെ തുടക്കം കുറിക്കുന്നു. & ഒരു "
+"എന്‍റിന്‍റിഅല്ലെങ്കില്‍ &amp; എന്ന് പ്രത്യേകം സൂചിപ്പിക്കുക"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "'%s' എന്ന അക്ഷരത്തിന് എന്‍റിന്‍റിയുടെ പേരിനുള്ളില്‍ സാധുതയില്ല"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "എന്‍റിന്‍റി നാമം '%s' അപരിചിതമാണ്"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"എന്‍റിന്‍റി ഒരു അര്ദ്ധവിരാമത്തില് അവസാനിക്കുന്നില്ല.  & എന്ന അക്ഷരം അറിയാതെ ഉള്‍ക്കൊളളാന്‍ "
+"ഇടയായോ? & ഒരു എന്‍റിന്‍റി അല്ലെങ്കില്‍ &amp; എന്ന് പ്രത്യേകം സൂചിപ്പിക്കുക"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' പാഴ്സ് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു, ഇത് അക്ഷര റഫറന്‍സിനുളളില്‍ ഒരു അക്കം ആയിരിക്കണമാരുന്നു "
+"(&#234; ഉദാഹരണത്തിന്) - ഒരു പക്ഷേ അക്കം വളരെ വലുതാവാം"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+"അക്ഷരത്തിന്‍റെ സൂചനയായ '%-.*s' ഒരു അനുവദനീയമായ രഹസ്യ അക്ഷരത്തിലേക്കല്ല വേര്‍തിരിക്കുന്നത്"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ശൂന്യമായ അക്ഷര സൂചനാ; &#454 പോലുളള അക്കം ഉല്‍പ്പെടുത്തേണ്ടതാണ്;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"അക്ഷരസൂചകം ഒരു അര്ദ്ധവിരാമത്തില് അവസാനിക്കുന്നില്ല.  & എന്ന അക്ഷരം അറിയാതെ ഉള്‍ക്കൊളളാന്‍ "
+"ഇടയായോ? & ഒരു  സത്ത അല്ലെങ്കില് &amp; എന്ന് പ്രത്യേകം സൂചിപ്പിക്കുക"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "പൂര്‍ണ്ണമാകാത്ത എന്‍റിന്‍റി സൂചനാ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "പൂര്‍ണ്ണമാകാത്ത അക്ഷര സൂചനാ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "തെറ്റായ UTF-8 എന്‍കോഡട് വാചകം - ഓവര്‍ലോങ് സീക്വന്‍സ്"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "തെറ്റായ UTF-8 എന്‍കോഡട് വാചകം - ആരംഭിക്കേണ്ട അക്ഷരമല്ല"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "സാധുതയില്ലാത്ത UTF-8 രഹസ്യ വാചകം - '%s' തെറ്റാകുന്നു"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "രേഖ തുടങ്ങേണ്ടത് ഒരു എലമെന്‍റിലാണ് (ഉദാ <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' അക്ഷരത്തിന് പിന്നിലുളള '%s' ഒരു അസാധുവായ അക്ഷരമാണ്; ഇത് ഒരു എലമെന്‍റ് പേര് തുടങ്ങില്ല"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"ഓഡ് അക്ഷരം '%s', '%s' എന്ന ശൂന്യ-എലമെന്റ് റ്റാഗ് അവസാനിപ്പിക്കുന്നതിനായി '>'  പ്രതീക്ഷിച്ചു"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"ഓഡ് അക്ഷരം '%s', എലമെന്‍റ് '%s'-ന്‍റെ സവിശേഷത നാമം '%s'-ന് ശേഷം ഒരു '=' പ്രതീക്ഷിക്കുന്നു"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' ഒരു ഓഡ് അക്ഷരം ആണ്, ഇതിന് പകരം ഒരു '>' അല്ലെങ്കില്‍ '/' എന്ന അക്ഷരം അല്ലെങ്കില്‍ ഒരു "
+"ആട്റിബ്യൂട്ട് ആണ് '%s' എന്ന എലമെന്‍റിന്‍റെ ആരംഭത്തിലുളള ടാഗ് അവസാനിപ്പിക്കുന്നതിന് പ്രതീക്ഷിച്ചത്; "
+"ഒരു പക്ഷേ, ആട്റിബ്യൂട്ടിന്‍റെ പേരില്‍ നിങ്ങള്‍ തെറ്റായ അക്ഷരം ആവാം ഉപയോഗിച്ചത്"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"'%s' ഒരു ഓഡ് അക്ഷരം ആണ്, '%s' എന്ന എലമെന്‍റിന്‍റെ ആട്റിബ്യൂട്ട് ആയ '%s'-നുളള മൂല്ല്യം നല്‍കുമ്പോള്‍ "
+"സമം‌ എന്ന ചിഹ്നത്തിന് ശേഷം ഒരു തുറന്ന കോട്ട് ആണ് പ്റതീക്ഷിച്ചത്"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'</' അക്ഷരങ്ങള്‍ക്ക് ശേഷം ഉളള '%s', അസാധുവായ അക്ഷരമാണ്; '%s' ഒരു എലമെന്‍റ് നാമം തുടങ്ങുന്നില്ല"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"എലമെന്‍റ് നാമം '%s'-ന് ശേഷം ഉളള '%s', ഒരു അസാധുവായ അക്ഷരമാണ്; '>' അക്ഷരമാണ് അനുവദിക്കുന്നത്"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "എലമെന്‍റ് '%s' അടച്ചിരിക്കുന്നു, ഒരു എലമെന്‍റുകളും നിലവില്‍ തുറന്നിട്ടില്ല"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "എലമെന്‍റ് '%s' അടച്ചിരിക്കുന്നു, പക്ഷേ നിലവില്‍ ലഭ്യമായ എലമെന്‍റ് '%s' ആണ്"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "രേഖ ശൂന്യമാണ് അല്ലെങ്കില്‍ അതില്‍ വയിറ്റ് സ്പെയിസ് മാത്രമേ ഉള്ളൂ"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "ഒരു '<' ബ്രാക്കറ്റിന് ശേഷം രേഖ അപ്രതീക്ഷിതമായി അവസാനിച്ചിരിക്കുന്നു "
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"എലമെന്‍റുകള്‍ തുറന്നു കിടക്കുന്പോള്‍ തന്നെ രേഖ അപ്രതീക്ഷമായ അടഞ്ഞിരിക്കുന്നു - ഒടുവില്‍ തുറന്ന എലമെന്‍റ് "
+"'%s' ആണ്"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"തന്നെ രേഖ അപ്രതീക്ഷമായ അടഞ്ഞിരിക്കുന്നു, ടാഗ് <%s/>-ന് അവസാനമായി ഒരു ക്ളോസ് ആങ്കില്‍ ബ്രാക്കറ്റ് "
+"പ്രതീക്ഷിക്കുന്നു"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "ഒരു എലമെന്‍റിന്‍റെ നാമത്തിനുളളില്‍ രേഖ അപ്രതീക്ഷിതമായി അവസാനിച്ചു"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "ഒരു സവിശേഷത നാമത്തിനുളളില്‍ രേഖ അപ്രതീക്ഷിതമായി അവസാനിച്ചു"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "ഒരു എലമെന്‍റ്-ഓപ്പണിങ് ടാഗിനുളളില്‍ രേഖ അപ്രതീക്ഷിതമായി അവസാനിച്ചു"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"സമം ചിഹ്നത്തിന് ശേഷം ഒരു ആട്റിബ്യൂട്ടിന്‍റെ പേര് ആയതിനാല്‍ അപ്റതീക്ഷിതമായി ഡോക്യുമെന്‍റ് "
+"അവസാനിച്ചു; ആട്റിബ്യൂട്ടിന് മൂല്ല്യം ലഭ്യമല്ല"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "ഒരു സവിശേഷത നാമത്തിനുളളില്‍ വച്ച് രേഖ അപ്രതീക്ഷിതമായി അവസാനിച്ചു"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "എലമെന്‍റ് '%s'-ന്‍റെ ക്ളോസ് ടാഗിനുള്ളില്‍ രേഖ അപ്രതീക്ഷിതമായി അവസാനിച്ചു"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"ഒരു അഭിപ്രായം അല്ലെങ്കില്‍ ഒരു പ്രക്രിയ നടത്തുന്ന നിര്‍ദ്ദേശത്തിനുള്ളില്‍ രേഖ അപ്രതീക്ഷിതമായി "
+"അവസാനിച്ചു"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "തകരാറുളള ഒബ്ജക്ട്"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "ആന്തരിക പിശക് അല്ലെങ്കില്‍ തകരാറുളള ഒബ്ജക്ട്"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ആവശ്യമായ മെമ്മറി ലഭ്യമല്ല"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "ബാക്ക്ട്രാക്കിങ് പരിധി എത്തിയിരിക്കുന്നു"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "പാറ്‍ഷ്യല്‍ മാച്ചിങിന് പിന്തുണ ലഭ്യമല്ലാത്ത വസ്തുക്കള്‍ ഈ മാതൃകയിലുണ്ട്"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "ആന്തരിക പിശക്"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "പാറ്‍ഷ്യല്‍ മാച്ചിങിനുളള പിന്തുണ ലഭ്യമല്ലാത്തതിനാല്‍ ബാക്ക് റിഫറന്‍സുകള്‍"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "റിക്കേറ്‍ഷന്‍ പരിധി എത്തിയിരിക്കുന്നു"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ശൂന്യമായ സബ് സ്ട്രിങ്ങളുകള്‍ക്കുളള പണിയിടത്തിനുളള പരിധി എത്തിയിരിക്കുന്നു"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ന്യൂലൈന്‍ ഫ്ളാഗുകളുടെ അസാധുവായ കൂട്ടായ്മ"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "അപരിചിതമായ പിശക്"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "മാതൃകയുടെ അവസാനം \\"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "മാതൃകയുടെ അവസാനം \\c"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "\\-ന് ശേഷം അപരിചിതമായ അക്ഷരം"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "കെയിസ്-ചെഞ്ചിങ് എസ്കേപ്പുകള്‍ (\\l, \\L, \\u, \\U) ഇവിടെ അനുവദിക്കുന്നതല്ല"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} ക്വാണ്ടിഫയറില്‍ നമ്പറുകള്‍ ക്രമത്തിലല്ല"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} ക്വാണ്ടിഫയറില്‍ നമ്പര്‍ വളരെ വലുതാണു്"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "ക്യാരക്ടര്‍ ക്ലാസ്സിന് അവസാനമുള്ള ] ലഭ്യമല്ല"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ക്യാരക്ടര്‍ ക്ലാസ്സില്‍ തെറ്റായ എസ്കേപ്പ് സീക്വന്‍സ്"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "ക്യാരക്ടര്‍ ക്ലാസ്സില്‍ പരിധി പുറത്ത് കടക്കുന്നു"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ആവര്‍ത്തനത്തിന്റെ ആവശ്യകതയില്ല"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(?-ന് ശേഷം അപരിചിതമായ ക്യാരക്ടര്‍"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?<-ന് ശേഷം അപരിചിതമായ ക്യാരക്ടര്‍"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P-ന് ശേഷം അപരിചിതമായ ക്യാരക്ടര്‍"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX named ക്ലാസ്സുകള്‍ക്കു് ഒരു ക്ലാസ്സില്‍ മാത്രമേ പിന്തുണ ലഭ്യമുള്ളൂ"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "അവസാനത്തിലുള്ള ) ലഭ്യമല്ല"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "( എന്നതില്ലാതെ )"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R അല്ലെങ്കില്‍ (?[+-]digits എന്നിവയ്ക്ക് ശേഷം ) ഉണ്ടായിരിക്കണം"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "നിലവിലില്ലാത്ത ഉപമാതൃകയ്ക്കുള്ള സൂചന"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "കമന്റിന് ശേഷം ) ലഭ്യമല്ല"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "റെഗുലര്‍ എക്സ്പ്രെഷന്‍ വളരെ വലുതാണു്"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "മെമ്മറി ലഭ്യമാക്കുന്നതില്‍ പരാജയം"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind അസേര്‍ഷന്റെ വ്യാപ്തി സ്ഥിരമല്ല"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?(-ന് ശേഷം തെറ്റായ അക്കം അല്ലെങ്കില്‍ പേര്"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "കണ്ടീഷനല്‍ ഗ്രൂപ്പില്‍ രണ്ടു് ബ്രാഞ്ചില്‍ കൂടുതലുണ്ടു്"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?(-നു് ശേഷം അസേര്‍ഷന്‍ പ്രതീക്ഷിക്കുന്നു"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "അപരിചിതമായ പോസിക്സ് ക്ലാസ്സ് നാമം"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX കോളേറ്റിങ് എലമെന്റുകള്‍ക്കുള്ള പിന്തുണ ലഭ്യമല്ല"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...}-ലുള്ള അക്ഷര മൂല്ല്യം വളരെ വലുതു്"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "തെറ്റായ അവസ്ഥ (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C not allowed in lookbehind assertion"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "റിക്കേര്‍സീവ് കോള്‍ ലൂപില്‍ അനിശ്ചിതമായി പ്രവര്‍ത്തിക്കുന്നു"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ഉപമാതൃകയുടെ പേരില്‍ ടെര്‍മിനേറ്റര്‍ ലഭ്യമല്ല"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "രണ്ടു് named ഉപമാതൃകകള്‍ക്കു് ഒരേ പേരു്"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "തെറ്റായ \\P അല്ലെങ്കില്‍ \\p ക്രമം"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "അപരിചിതമായ വിശേഷത നാമം \\P അല്ലെങ്കില്‍ \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ഉപമാതൃക നാമം വളരെ വലുതാണു് (കൂടിയതു് 32 അക്ഷരങ്ങള്‍)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "അവനധി named ഉപമാതൃകകള്‍ (കൂടിയാല്‍ 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "ഒക്ടല്‍ മൂല്ല്യം \\377-നേക്കാള്‍ വലുതാകുന്നു"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE ഗ്രൂപ്പില്‍ ഒന്നില്‍ കൂടുതല്‍ ബ്രാഞ്ചുകളുണ്ടു്"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "ഒരു DEFINE ഗ്രൂപ്പ്"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "സ്ഥിരതയില്ലാത്ത NEWLINE ഉപാധികള്‍"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "അപ്രതീക്ഷിതമായ ആവര്‍ത്തനം"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "കോഡ് ഓവര്‍ഫ്ലോ"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran compiling workspace"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "മുമ്പു് പരിശോധിച്ചിട്ടുള്ള സൂചന ഉപമാതൃകകള്‍ ലഭ്യമല്ല"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "സാധാരണ എക്സ്പ്രെഷന്‍ ആയ %s-നൊപ്പം പൊരുത്തപ്പെടുത്തുമ്പോള്‍ പിശക്: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "UTF8 പിന്തുണ ഇല്ലാതെയാണ് PCRE ലൈബ്ററി സംഗ്റഹിച്ചിരിക്കുന്നത്"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "UTF8 ഗുണഗണങ്ങളുടെ പിന്തുണ ഇല്ലാതെയാണ് PCRE ലൈബ്ററി സംഗ്റഹിച്ചിരിക്കുന്നത്"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "സാധാരണ എക്സ്പ്രെഷന്‍ ആയ %s കംപൈല്‍ ചെയ്യുമ്പോള്‍ %d എന്ന അക്ഷരത്തില്‍ പിശക് : %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "%s എന്ന സാധാരണ എക്സ്പ്രെഷന്‍ കൈകാര്യം ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "ഹെക്സാ ഡെസിമല്‍ അക്കം അല്ലെങ്കില്‍ '}' ആവശ്യമുണ്ട് "
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "ഹെക്സാ ഡെസിമല്‍ അക്കം ആവശ്യമുണ്ട്"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "സിംപോളിക് സൂചനയില്‍ '<' ലഭ്യമല്ല"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "പൂര്‍ണ്ണമാകാത്ത സിംപോളിക് സൂചനാ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "zero-length symbolic reference"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "അക്കം ആവശ്യമുണ്ട്"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "തെറ്റായ സിംപോളിക് സൂചനാ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "stray final '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "അപരിചിതമായ എസ്കേപ്പ് സീക്വന്‍സ്"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "പകരമായുളള ടെക്സ്റ്റ് ആയ \"%s\" %lu-ല്‍ പാഴ്സ് ചെയ്യുന്നതിനിടയില്‍ പിശക്: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "എടുത്ത് കാണിക്കുന്ന ടെസ്റ്റിന്‍റെ ആരംഭത്തില്‍ കൊട്ടേഷന്‍ മാറ്‍ക്ക് ലഭ്യമല്ല"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "കമാന്‍ഡ് ലൈന്‍ അല്ലെങ്കില്‍ മറ്റ് ഷെല്‍-കോട്ടട് ടെക്സ്റ്റില്‍ ചേറ്‍ച്ചയില്ലാത്ത അടയാളം"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "'\\' അക്ഷരത്തിന് ശേഷം ഉടന്‍ തന്നെ വാചകം അവസാനിച്ചു. ('%s' ആയിരുന്നു വാചകം)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c-ന്‍റെ അവസാനം കോട്ട് ഇട്ടിട്ടില്ല. ('%s' ആണ് ടെക്സ്റ്റ്)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "വാചകം ശൂന്യമായിരുന്നു (അല്ലെങ്കില്‍ ഇതില്‍ വയിറ്റ് സ്പെയിസ് മാത്രമേ ഉളളൂ)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയയില്‍ നിന്നും വായിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയയുമായി ബന്ധപ്പെടുന്നതിനുളള പൈപ്പ് ഉണ്ടാക്കുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "ചൈള്‍ഡ് പൈപ്പില്‍ നിന്നും വായിക്കുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "ഡയറക്ടറി '%s'-ലേക്ക് മാറ്റുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയ പ്രവര്‍ത്തിപ്പിക്കുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "അസാധുവായ പ്രോഗ്രാം നാമം: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d-ല്‍ ആര്‍ഗ്യുമെന്‍റ് വെക്റ്ററില്‍ അസാധുവായ സ്ട്രിങ്: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "എന്‍വിറോണ്‍മെന്‍റില്‍ അസാധുവായ സ്ട്രിങ്: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "പ്രവര്‍ത്തിക്കുന്ന ഡയറക്ടറി അസാധുവാണ്: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "സഹായത്തിനുളള പ്രോഗ്രാം പ്രവര്‍ത്തിപ്പിക്കുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"ചൈള്‍ഡ് പ്രക്രിയയില്‍ നിന്നും ഡേറ്റാ വായിക്കുന്പോള്‍ g_io_channel_win32_poll()-ല്‍ "
+"അപ്രതീക്ഷിതമായ പിശക് "
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയയില്‍ നിന്നും വായിക്കുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"ചൈള്‍ഡ് പ്രക്രിയയില്‍ (%s) നിന്നും ഡേറ്റാ വായിക്കുന്പോള്‍ select()-ല്‍ അപ്രതീക്ഷിതമായ പിശക് "
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid()-ല്‍ അപ്രതീക്ഷിതമായ പിശക്  (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയ \"%s\" (%s) പ്രവര്‍ത്തിപ്പിക്കുന്നതില്‍ പരാജയപ്പെട്ടു "
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയയുടെ ഔട്ട് പുട്ട് അല്ലെങ്കില്‍ ഇന്‍പുട്ട് തിരിച്ച് വിടുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "ചൈള്‍ഡ് പ്രക്രിയ fork ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "ചൈള്‍ഡ് പ്രക്രിയ \"%s\" പ്രവര്‍ത്തിപ്പിക്കുന്നതില്‍ അപ്രതീക്ഷിതമായ പിശക്"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "ചൈള്‍ഡ് pid പൈപ്പിന്‍ നിന്നും ആവശ്യത്തിനുളള ഡേറ്റാ വായിക്കുന്നതില്‍ പരാജയപ്പെട്ടു (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 പരിധിയില്‍ നിന്നും പുറത്താണ് അക്ഷരം"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "ഇന്‍പുട്ട് വേര്‍തിരിക്കുന്നതില്‍ അസാധുവായ ക്രമം"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 പരിധിയില്‍ നിന്നും പുറത്താണ് അക്ഷരം"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ഉപയോഗിക്കേണ്ട വിധം:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "സഹായ ഉപാധികള്‍:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "സഹായ ഉപാധികള്‍ കാണിക്കുക"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "എല്ലാ സഹായ ഉപാധികളും കാണിക്കുക"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "പ്രയോഗത്തിനുളള ഉപാധികള്‍:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%s-ന് വേണ്ടി ഇന്‍റിജര്‍ മൂല്ല്യം '%s' പാഴ്സ് ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%s-ന് വേണ്ടിയുളള ഇന്‍റിജര്‍ മൂല്ല്യം '%s' പരിധിയ്ക്ക് പുറത്താണ്"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%s-ന് വേണ്ടി ഡബിള്‍ മൂല്ല്യം '%s' പാഴ്സ് ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%s-ന് വേണ്ടിയുളള ഡബിള്‍ മൂല്ല്യം '%s' പരിധിയ്ക്ക് പുറത്താണ്"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s ഉപാധി പാഴ്സ് ചെയ്യുന്നതില്‍ പിശക്"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s-നുളള ആര്‍ഗ്യുമെന്‍റ് ലഭ്യമല്ല"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "അപരിചിതമായ ഉപാധി %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "തിരച്ചില്‍ നടത്തിയ ഡയറക്ടറികളില്‍ സാധുതയുളള കീ ഫയല്‍ ലഭ്യമല്ല"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ഒരു സാധാരണ ഫയല്‍ അല്ല"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ഫയല്‍ ശൂന്യമാണ്"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"കീ ഫയലില്‍ ഉളള '%s' എന്ന വരി ഒരു കീ-മൂല്ല്യം ജോടി അല്ലെങ്കില്‍ ഒരു ഗ്റൂപ്പോ അഭിപ്റായമോ അല്ല"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "അസാധുവായ ഗ്രൂപ്പ് നാമം: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "കീ ഫയല്‍ ആരംഭിക്കുന്നത് ഒരു ഗ്രൂപ്പിലല്ല"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "അസാധുവായ കീ നാമം: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "പിന്തുണയ്ക്കാത്ത രഹസ്യ ഭാഷ '%s' കീ ഫയല്‍ പിന്തുണയ്ക്കുന്നു"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "കീ ഫയലിന് '%s' എന്ന ഗ്രൂപ്പില്ല"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "കീ ഫയലിന് '%s' എന്ന കീയില്ല"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "UTF-8 അല്ലാത്ത '%s' മൂല്ല്യമുളള കീ '%s' കീ ഫയലിലുണ്ട്"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "തിരിച്ചറിയുവാന്‍ കഴിയാത്ത മൂല്ല്യമുളള കീ '%s' കീ ഫയലിലുണ്ട്"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "തിരിച്ചറിയുവാന്‍ കഴിയാത്ത മൂല്ല്യമുളള കീ '%s', '%s' എന്ന ഗ്രൂപ്പില്‍ കീ ഫയലിലുണ്ട്."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "ഗ്രൂപ്പ് '%s'-ല്‍ കീ ഫയലിന് കീ '%s' ലഭ്യമല്ല"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "കീ ഫയലിന്‍റെ വരിയുടെ അവസാനം എസ്കെയിപ്പ് അക്ഷരം ലഭ്യമാണ്"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "കീ ഫയലില്‍ അസാധുവായ എസ്കെയിപ്പ് സീക്വന്‍സ് '%s' ലഭ്യമാണ്"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "മൂല്ല്യം '%s' ഒരു അക്കമായി കണക്കാക്കുവാന്‍ സാധ്യമല്ല."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ഇന്‍റിജര്‍ മൂല്ല്യം '%s' പരിധിയ്ക്ക് പുറത്ത്"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "മൂല്ല്യം '%s' ഒരു ഫ്ളോട്ട് അക്കമായി കണക്കാക്കുവാന്‍ സാധ്യമല്ല."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "മൂല്ല്യം '%s' ഒരു ബൂളിയനായി കണക്കാക്കുവാന്‍ സാധ്യമല്ല."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "വളരെ വലിയ കൌണ്ട് മൂല്ല്യം %s-നു് നല്‍കിയിരിക്കുന്നു"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "സ്ട്രീം നിലവില്‍ അടച്ചിരിക്കുന്നു"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "പ്രക്രിയ റദ്ദാക്കിയിരിക്കുന്നു"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "അപരിചിതമായ തരത്തിലുള്ളത്"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s ഫയല്‍ രീതിയിലുള്ള"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s തരത്തിലുള്ള"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "end-of-stream അപ്രതീക്ഷിതമായി സമയത്തിനു് മുമ്പു്"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "പേരിടാത്ത"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "പണിയിട ഫയല്‍ Exec ഫീള്‍ഡ് വ്യക്തമാക്കിയിട്ടില്ല"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "പ്രയോഗത്തിനു് ആവശ്യമായ ടെര്‍മിനല്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ഉപയോക്താവിനു് പ്രയോഗത്തിനുള്ള ക്രമീകരണ ഫോള്‍ഡര്‍ %s ഉണ്ടാക്കുവാന്‍ സാധ്യമല്ല: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ഉപയോക്താവിനുള്ള MIME ക്രമികരണ ഫയല്‍ %s ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ഉപയോക്താവിനുള്ള ഡസ്ക്ടോപ്പ് ഫയല്‍ %s ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "യഥേഷ്ടം %s നിഷ്കര്‍ഷിക്കുക"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ഡ്രൈവില്‍ നിന്നും ഡിസ്ക് പുറത്തെടുക്കുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ഡ്രൈവില്‍ മീഡിയ തെരഞ്ഞെടുക്കല്‍ സാധ്യമല്ല"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem എന്‍കോഡിങിനുള്ള പതിപ്പു് %d കൈകാര്യം ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem എന്‍കോഡിങിലുള്ള തെറ്റായ ടോക്കനുകളുടെ എണ്ണം (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon എന്‍കോഡിങിനുള്ള പതിപ്പു് %d കൈകാര്യം ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon എന്‍കോഡിങിലുള്ള തെറ്റായ ടോക്കനുകളുടെ എണ്ണം (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon-നു് ഒരു GEmblem പ്രതീക്ഷിച്ചു"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "പ്രക്രിയ പിന്തുണയ്ക്കുന്നില്ല"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "മൌണ്ട് ലഭ്യമല്ല"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ഡയറക്ടറിയില്‍ പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ഒരു ഡയറക്ടറിയില്‍ മറ്റൊരു ഡയറക്ടറി പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയല്‍ നിലവിലുണ്ട്"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ആവര്‍ത്തിച്ച് ഡയറക്ടറി പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "പ്രത്യേക ഫയല്‍ പകര്‍ത്തുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "തെറ്റായ symlink മൂല്ല്യം"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ചവറ്റുകുട്ട പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ഫയലിന്റെ പേരില്‍ '%c' ഉണ്ടാകുവാന്‍ പാടില്ല"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "വോള്യം മൌണ്ടിനെ ലഭ്യമാക്കുന്നില്ല"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ഈ ഫയല്‍ കൈകാര്യം ചെയ്യുന്നതിനായി ഒരു പ്രയോഗവും രജിസ്ടര്‍ ചെയ്തിട്ടില്ല"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "എന്യൂമറേറ്റര്‍ അടച്ചിരിക്കുന്നു"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ഫയല്‍ എന്യൂമറേറ്റര്‍ നന്നായി പ്രവര്‍ത്തിക്കുന്നു"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ഫയല്‍ എന്യൂമറേറ്റര്‍ നിലവില്‍ അടച്ചിരിക്കുന്നു"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ഫയല്‍"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "പ്രതിരൂപം അടങ്ങുന്ന ഫയല്‍"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon എന്‍കോഡിങിനുള്ള പതിപ്പു് %d കൈകാര്യം ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon-നില്‍ തെറ്റായ ഡേറ്റാ"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "സ്ട്രീം query_info പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "സ്ട്രീമില്‍ Seek പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "ഇന്‍പുട്ട് സ്ട്രീമില്‍ Truncate അനുവദിക്കുന്നില്ല"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "സ്ട്രീമില്‍ Truncate അനുവദിക്കുന്നില്ല"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "തെറ്റായ ടോക്കന്റെ എണ്ണം (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "%s എന്ന ക്ലാസ് നാമത്തിനു് ഏതു് തരം എന്നു് ലഭ്യമല്ല"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "%s തരത്തിലുള്ളതു് GIcon ഇന്റര്‍ഫെയിസ് ലഭ്യമാക്കുന്നില്ല"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "%s തരത്തിലുള്ളതു് ക്ലാസ്സ് ചെയ്തിട്ടില്ല"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "തെറ്റായ പതിപ്പു്: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "GIcon ഇന്റര്‍ഫെയിസില്‍ %s തരത്തിലുള്ളവ from_tokens() ലഭ്യമാക്കുന്നില്ല"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "ലഭ്യമാക്കിയ ചിഹ്നം എന്‍കോഡിങിന്റെ പതിപ്പ് കൈകാര്യം ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ഇന്‍പുട്ട് സ്ട്രീം read ലഭ്യമാക്കുന്നില്ല"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "സ്ട്രീമില്‍ തെറ്റായ പ്രക്രിയ"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "സ്വതവേയുള്ള ലോക്കല്‍ ഡയറക്ടറി തരത്തിലുള്ള മോണിറ്റര്‍ ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "തെറ്റായ ഫയല്‍ നാമം %s "
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ഫയല്‍സിസ്റ്റം വിവരം ലഭ്യമാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "റൂട്ട് ഡയറക്ടറിയുടെ പേര് മാറ്റുവാന്‍ സാധ്യമല്ല"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ഫയലിന്റെ പേര് മാറ്റുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ഫയലിന്റെ പേര് മാറ്റുവാന്‍ സാധ്യമല്ല, കാരണം ഈ പേര് നിലവിലുണ്ട്"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "തെറ്റായ ഫയല്‍നാമം"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ഫയല്‍ തുറക്കുന്നതില്‍ പിശക് : %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ഡയറക്ടറി തുറക്കുവാന്‍ സാധ്യമല്ല"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ഫയല്‍ നീക്കം ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ഫയല്‍ ചവറ്റുകുട്ടയിലേക്കു് മാറ്റുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ചവറ്റുകുട്ടയ്ക്കുള്ള ഡയറക്ടറി %s ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ചവറ്റുകുട്ടയ്ക്കുള്ള ടോപ് ലവല്‍ ഡയറക്ടറി ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ചവറ്റുകുട്ടയ്ക്കുള്ള ഡയറക്ടറി ഉണ്ടാക്കുവാനോ ലഭ്യമാക്കുവാനോ സാധ്യമായില്ല"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "വിവരങ്ങള്‍ സംബന്ധിച്ചുള്ള ഫയല്‍ ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ഫയല്‍ ചവറ്റുകുട്ടയിലേക്ക് നീക്കുവാന്‍ സാധ്യമായില്ല: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "സിംബോളിക് ലിങ്ക് ഉണ്ടാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ഫയല്‍ നീക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ഒരു ഡയറക്ടറിയില്‍ മറ്റൊരു ഡയറക്ടറി നീക്കുവാന്‍ സാധ്യമല്ല"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "ബാക്കപ്പ് ഫയല്‍ ഉണ്ടാക്കുന്നതില്‍ പരാജയം"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയല്‍ നീക്കം ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "മൌണ്ട് പോയിന്റുകളില്‍ തമ്മില്‍ നീക്കം ചെയ്യുന്നതില്‍ പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "ആട്രിബ്യൂട്ട് മൂല്ല്യം non-NULL ആയിരിക്കണം"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "തെറ്റായ ആട്രിബ്യൂട്ട് തരം (സ്ട്രിങ് പ്രതീക്ഷിച്ചു)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "തെറ്റായ എക്സ്റ്റെന്‍ഡട് ആട്രിബ്യൂട്ട് നാമം"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "എക്സ്റ്റെന്‍ഡട് ആട്രിബ്യൂട്ട് ആയ '%s' ക്രമികരിക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' എന്ന ഫയല്‍ സ്റ്റാറ്റ് ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (തെറ്റായ എന്‍കോഡിങ്)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ഫയല്‍ വിശദീകരണ സംവിധാനം ലഭ്യമാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "തെറ്റായ തരത്തിലുള്ള വിശേഷത (uint32 പ്രതീക്ഷിച്ച)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "തെറ്റായ തരത്തിലുള്ള വിശേഷത (uint64 പ്രതീക്ഷിച്ച)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "തെറ്റായ തരത്തിലുള്ള വിശേഷത (ബൈറ്റ് സ്ട്രിങ് പ്രതീക്ഷിച്ച)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "അനുവാദങ്ങള്‍ ക്രമികരിക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "ഉടമസ്ഥനെ ക്രമികരിക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "സിംലിങ്ക് non-NULL ആയിരിക്കണം"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "സിംലിങ്ക് ക്രമികരിക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "symlink സജ്ജീകരണത്തില്‍ പിശക്: ഫയല്‍ ഒരു symlink അല്ല"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux കോണ്‍ടെക്സ്റ്റ് non-NULL ആയിരിക്കണം"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux കോണ്‍ടെക്സ്റ്റ് സജ്ജാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ഈ സിസ്റ്റത്തില്‍ സജ്ജമല്ല"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s ആട്രിബ്യൂട്ട് ക്രമികരണം പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ഫയലില്‍ നിന്നും വായിക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ഫയലില്‍ തിരയുന്നതില്‍ പിശക് : %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ഫയല്‍ അടയ്ക്കുന്നതില്‍ പിശക് : %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "സ്വതവേയുള്ള ലോക്കല്‍ ഫയല്‍ മോണിറ്റര്‍ തരത്തിലുള്ളതു് ലഭ്യമാക്കുവാന്‍ സാധിച്ചില്ല"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ഫയലിലേക്ക് എഴുതുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "പഴയ ബാക്കപ്പിലേക്കുള്ള ലിങ്ക് നീക്കം ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ബാക്കപ്പ് പകര്‍പ്പ് ഉണ്ടാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "താല്‍ക്കാലിക ഫയലിന്റെ പേര് മാറ്റുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "ഫയല്‍ ട്രങ്‌കേറ്റ് ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' ഫയല്‍ തുറക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയല്‍ ഒരു ഡയറക്ടറി ആകുന്നു"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "ലക്ഷ്യസ്ഥാനത്തുള്ള ഫയല്‍ ഒരു സാധാരണ ഫയല്‍ അല്ല"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ഫയല്‍ പുറമേ നിന്നും മാറ്റം വരുത്തിയിരിക്കുന്നു"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "പഴയ ഫയല്‍ നീക്കം ചെയ്യുന്നതില്‍ പിശക്: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "തെറ്റായ GSeekType നല്‍കിയിരിക്കുന്നു"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "തെറ്റായ seek ആവശ്യപ്പെട്ടിരിക്കുന്നു"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream ട്രങ്‌കേറ്റ് ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "ഏറ്റവും കൂടുതലായ ഡേറ്റാ അറേ പരിധി എത്തിയിരിക്കുന്നു"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "മെമ്മറി ഔട്ട്പുട്ട് സ്ട്രീമിന്റെ വ്യാപ്തി മാറ്റുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "മെമ്മറി ഔട്ട്പുട്ട് സ്ട്രീമിന്റെ വ്യാപ്തി മാറ്റുന്നതില്‍ പരാജയം"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount unmount അനുവദിക്കുന്നില്ല"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount eject അനുവദിക്കുന്നില്ല"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount remount അനുവദിക്കുന്നില്ല"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount doesn't implement content type guessing"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount doesn't implement synchronous content type guessing"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "ഔട്ട്പുട്ട് സ്ട്രീം റൈറ്റ് ലഭ്യമാക്കുന്നില്ല"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "സോഴ്സ് സ്ട്രീം നിലവില്‍ അടച്ചിരിക്കുന്നു"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "പേരു്"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "പ്രതിരൂപത്തിന്റെ പേരു്"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "പേരുകള്‍"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "പ്രതിരൂപത്തിന്റെ പേരുകള്‍ അടങ്ങുന്ന ഒരു അറേ"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "സ്വതവേയുള്ള ഫോള്‍ബാക്കുകള്‍ ഉപയോഗിക്കുക"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' വഴി പേരു് ചെറുതാക്കി സ്വതവേയുള്ള ഫോള്‍ബാക്കുകള്‍ ഉപയോഗിക്കണമോ എന്നു്.അനവധി പേരുകള്‍ ഉണ്ടെങ്കില്‍ "
+"ആദ്യത്തേതിനു് ശേഷമുള്ള പേരുകള്‍ വേണ്ടെന്നു് വയ്ക്കുക."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon എന്‍കോഡിങിനുള്ള %d പതിപ്പു് കൈകാര്യം ചെയ്യുവാന്‍ സാധ്യമല്ല"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ഫയല്‍ വിശദീകരണ സംവിധാനം"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "വായിക്കുന്നതിനുള്ള ഫയല്‍ വിശദീകരണ സംവിധാനം"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ഫയല്‍ വിശദീകരണ സംവിധാനം അടയ്ക്കുക"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "സ്ട്രീം അടയ്ക്കുമ്പോള്‍, ഫയല്‍ വിശദീകരണ സംവിധാനം അടയ്ക്കണമോ എന്നു്"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "യൂണിക്സില്‍ നിന്നും ലഭ്യമാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "യൂണിക്സ് അടയ്ക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ഫയല്‍സിസ്റ്റം റൂട്ട്"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "എഴുതുന്നതിനുള്ള ഫയല്‍ വിശദീകരണ സംവിധാനം"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "യൂണിക്സിലേക്ക് എഴുതുന്നതില്‍ പിശക്: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "വോള്യം പുറത്തിറക്കല്‍ അനുവദിക്കുന്നില്ല"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "പ്രയോഗം ലഭ്യമാക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "പ്രയോഗം ലഭ്യമാക്കുന്നതില്‍ പിശക്: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "യുആര്‍ഐ പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32-ല്‍ അസോസിയേഷന്‍ സൃഷ്ടി പിന്തുണയ്ക്കുന്നില്ല"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32-ല്‍ അസോസിയേഷന്‍ സൃഷ്ടി പിന്തുണയ്ക്കുന്നില്ല"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "എന്‍ട്രികള്‍ അദൃശ്യമാക്കരുതു്"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "ലോങ് ലിസ്റ്റിങ് ഫോര്‍മാറ്റ് ഉപയോഗിക്കുക"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/mn.po b/po/mn.po
new file mode 100644
index 0000000..4e6527d
--- /dev/null
+++ b/po/mn.po
@@ -0,0 +1,1892 @@
+# translation of glib.HEAD.po to Mongolian
+# translation of glib.HEAD.mn.po to Mongolian
+# translation of glib.HEAD.po to mongolian
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Sanlig Badral <badral@chinggis.com>, 2003.
+# Sanlig Badral <Badral@openmn.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-05-30 01:07-0800\n"
+"Last-Translator: Бадрал <badral@openmn.org>\n"
+"Language-Team: Mongolian <openmn-translation@lists.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+"Plural-Forms: 2\n"
+"X-Poedit-Language: Mongolian\n"
+"X-Poedit-Country: MONGOLIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Сонин тэмдэгт »%s«, »%s« элементийн »%s« аттрибутын нэрийн дараа »=« хүлээгдэж "
+"байна"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "Өгөгдлийн лавлахаас хүчинтэй утга олдсонгүй"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "»%s« символик холбоос уншигдсангүй: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Тэмдэгт олонлог »%s« ээс »%s« рүү хөрвүүлэх дэмжигдээгүй байна"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "»%s« ээс »%s« рүү хөрвүүлэгч нээгдсэнгүй"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Хөрвүүлэлтийн оролтод хүчингүй байт дараалал байна"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Оролтын төгсгөлд хагас тэмдэгтийн дараалал"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "»%s« ухарч »%s« кодчилол руу хөрвөхгүй байна"
+
+# CHECK
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI »%s« нь файл схемд хэрэглэгддэг үнэмлэхүй хаяг биш"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Дотоод URI »%s« нь »#« -г агуулж болохгүй"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "»%s« URI хүчингүй"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI »%s« -н хостын нэр хүчингүй"
+
+# CHECK
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "»%s« URI хүчингүй Escape-тэмдэгт агуулж байна"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "»%s« замын нэр үнэмлэхүй зам биш"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Хүчингүй хостын нэр"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "»%s« лавлахыг нээхэд алдаа: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu байтуудыг »%s« файлыг уншихдаа байрлуулж чадсангүй"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "»%s« файлаас уншиж болохгүй байна: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "»%s« файл нээгдэхгүй байна: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "»%s« файлын аттрибут тодорхойлогдсонгүй: fstat() нурлаа: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "»%s« файл үүсгэгдсэнгүй: %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "»%s« хэв хүчингүй, »%s« -г агуулах хэрэггүй"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "»%s« хэв XXXXXX -р төгсөхгүй байна"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "»%s« символик холбоос уншигдсангүй: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Символик холбоос дэмжигдээгүй"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "»%s« -ээс »%s« рүү хөрвүүлэгч нээгдсэнгүй: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Raw-read in g_io_channel_read_line_string боломжгүй"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Унших буфэрт хөрвүүлээгүй файл байна"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Суваг тал тэмдэгтээр төгслөө"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Raw-read in g_io_channel_read_to_end боломжгүй"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d мөрөнд %d тэмдэгт алдаатай байна: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d мөрөнд алдаа: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Хоосон абт »&;« олдлоо; хүчинтэй абтууд &amp; &quot; &lt; &gt; &apos; юм. "
+"(абт=аский биш тэмдэгт)"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Абтын нэрийн эхлэлийн »%s« тэмдэгт хүчингүй; Абт & тэмдэгтээр эхэлдэг; Хэрвээ "
+"энэ амперсаныг абт бишээр авах хэрэгтэй бол &amp; гэж бичнэ үү"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "»%s« тэмдэгт абтын нэрэнд хүчингүй"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Абтын нэр »%s« тодорхойгүй"
+
+# CHECK
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Абт цэг таслалаар төгсөөгүй байна; Та магад амперсандыг абтын эхлэл бусаар "
+"хэрэглэхийг хүссэн байх - Та &amp; гэж бичнэ үү"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"»%-.*s« тэмдэгтийн дотор тоо байх ёстой (&#234; шиг) , задлан ялгалд "
+"танигдсангүй - магадгүй хэтэрхий том тоо байна уу"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "»%-.*s« тэмдэгт холбоос зөвшөөрөгдөөгүй тэмдэгтээр кодлогдсон байна"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Хоосон тэмдэгтийн холбоос; &#454; гэх мэт тоо агуулах ёстой"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Тэмдэгт холбоос цэг таслалаар төгсөөгүй байна; Та магад амперсандыг абтын "
+"эхлэл бусаар хэрэглэхийг хүссэн байх - Та &amp; гэж бичнэ үү"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Төгсгөлгүй абт холбоос"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Төгсгөлгүй тэмдэгт холбоос"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Хүчингүй UTF-8-р кодлогдсон текст"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Хүчингүй UTF-8-р кодлогдсон текст"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Хүчингүй UTF-8-р кодлогдсон текст"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Баримт ямар нэгэн элементээр эхлэх ёстой (Ж.нь <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"»%s« нь »<«-тэмдэгтийн арын хүчингүй тэмдэгт; Энэ нь элементийн нэрээр эхэлж "
+"болохгүй."
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Сонин тэмдэгт »%s«, »%s« элементийн эхлэлийн тагийг хаахад »>« тэмдэгт дутуу "
+"байна"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Сонин тэмдэгт »%s«, »%s« элементийн »%s« аттрибутын нэрийн дараа »=« хүлээгдэж "
+"байна"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Сонин тэмдэгт »%s«, »%s« элементийн эхлэлийн тагийг хаахын тулд аттрибутын нэр "
+"эсвэл харин »>« эсвэл »/« тэмдэгт хүлээгдэж байна; Магадгүй та аттрибутын "
+"нэрэндээ хүчингүй тэмдэгт хэрэглэжээ"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Сонин тэмдэгт »%s«; »%s« элементийн »%s« аттрибутын хувьд өгсөн утга тэнцүүгийн "
+"тэмдэгийн дараах хашилтыг хүлээж байна"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"»%s« хүчингүй тэмдэгт, хэрвээ энэ нь »</« тэмдэгтийн ард орвол; »%s« "
+"ньэлементийн нэрээр эхэлж болохгүй"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"»%s« хүчингүй тэмдэгт, хэрвээ энэ нь хааж буй »%s« элементийн нэрийн ард "
+"байгаа бол; »>« тэмдэгт хүчинтэй"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "»%s« элемент хаагдсан, Одоогоор ямарч элемент нээлттэй бус байна"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "»%s« элемент хаагдсан, харин одоогоор »%s« элемент нээлттэй байна"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Баримт хоосон эсвэл зүгээр цагаан зай агуулж байна"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Баримт нээлттэй өнцөгтэй хаалт »<« -н дараа гэнэт төгсөв"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Баримт нээлттэй элементүүдтэйгээр гэнэтийн байдлаар төгсөв - »%s« сүүлчийн "
+"нээлттэй элемент нь"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Баримт гэнэтийн байдлаар төгсөв, таг <%s/> -г хаах өнцөгтэй хаалт "
+"»>«хүлээгдэж байна"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Баримт нэгэн элементийн нэрийн дотор гэнэтийн байдлаар төгсөв"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Баримт нэгэн аттрибут нэрийн дотор гэнэтийн байдлаар төгсөв"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Баримт нээгдэж буй тагийн нэгэн элементийн нэрийн дотор гэнэтийн байдлаар "
+"төгсөв."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Баримт аттрибут нэрийн дараах тэнцүүгийн тэмдэгийн дараа гэнэтийн байдлаар "
+"төгсөв; аттрибутын утга алга"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Баримт нэгэн аттрибутын утгын дотор гэнэтийн байдлаар төгсөв"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Баримт гэнэтийн байдлаар нэгэн хаагдаж буй »%s« элементийн тагийн дотор төгсөв"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Баримт тайлбар эсвэл заавар боловсруулалтын дотор гэнэтийн байдлаар төгсөв"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Суваг тал тэмдэгтээр төгслөө"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Хөрвүүлэлтийн оролтод хүчингүй байт дараалал байна"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Төгсгөлгүй тэмдэгт холбоос"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Төгсгөлгүй тэмдэгт холбоос"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Төгсгөлгүй тэмдэгт холбоос"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Символик холбоос дэмжигдээгүй"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "%d мөрөнд %d тэмдэгт алдаатай байна: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Төгсгөлгүй абт холбоос"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Хашилтан доторхи текст хашилтаар эхлэхгүй"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Тушаалын мөр дэх эсвэл өөр shell-quoted текст доторхи хашилтын тоо "
+"балансжаагүй байна"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Текст »\\«-тэмдэгтийн дараа төгслөө. (Текст »%s« байсан)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Текст %c -н тохирох хашилт олдохоос өмнө төгслөө. (Текст »%s« байсан)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Текст хоосон байв (эсвэл зөвхөн цагаан зай агуулсан)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Өгөгдөл хүү процессоор уншигдсангүй"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Хүү процесстой (%s) холбогдох шугам үүсгэж чадсангүй"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Хүү процессын (%s) шугамаас унших бүтэлгүйтлээ"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "»%s« (%s) лавлах солигдсонгүй"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Хүү процесс ажилласангүй (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Хүчингүй хостын нэр"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Хөрвүүлэлтийн оролтод хүчингүй дараалал"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "»%s« лавлахыг нээхэд алдаа: %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Тусламж программ ажиллахгүй байна"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Хүү процессоос өгөгдөл уншиж байхад g_io_channel_win32_poll() дотор "
+"санамсаргүй алдаа гарлаа"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Хүү процессын  (%s) өгөгдөл уншигдсаж чадсангүй"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Хүү процессоос (%s) өгөгдөл уншиж байхад select() дотор санамсаргүй алдаа "
+"гарлаа"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Санамсаргүй алдаа waitpid() дотор (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Салаалалт нурлаа (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Хүү процесс »%s« -г ажиллуулах нурлаа (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Хүү процессийн (%s) гаралт эсвэл оролтыг солих нурлаа"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Хүү процессын (%s) салаалалт нурлаа"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "»%s« хүү процессыг ажиллуулж байхад тодорхойгүй алдаа"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Хүү процессын процессын дугаарын шугамаас (%s) хангалттай өгөгдөл уншиж "
+"чадсангүй"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 хязгаараас гаднах тэмдэгт"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Хөрвүүлэлтийн оролтод хүчингүй дараалал"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 хязгаараас гаднах тэмдэгт"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Хэрэглээ:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Тусламж:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Тусламж харуулах"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Бүх тусламж харуулах"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Програм:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, fuzzy, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "'%s' бүхэл тоог --%s -н хувьд шинжлэх боломжгүй"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "'%s' бүхэл %s -н хувьд хязгаараас хальжээ"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%s' бүхэл тоог --%s -н хувьд шинжлэх боломжгүй"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "'%s' бүхэл %s -н хувьд хязгаараас хальжээ"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Тодорхойгүй утга %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "Өгөгдлийн лавлахаас хүчинтэй утга олдсонгүй"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Тохиромжгүй файл"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Файл хоосон"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Түлхүүр файл түлхүүр утга, бүлэг, эсвэл тайлбаргүй  '%s' мөр агуулж байна."
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Хүчингүй хостын нэр"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Түлхүүр файл бүлэг утгаар эхлэх боломжгүй"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Хүчингүй хостын нэр"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Түлхүүр файлд дэмжигдээгүй кодчилол '%s' байна"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Түлхүүр файлд '%s' бүлэг алга"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Түлхүүр файлд '%s' түлхүүр алга"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Түлхүүр файлд '%s' мөр '%s' гэсэн UTF-8 бус утгатай байна"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Түлхүүр файлд илэрхийлэх боломжгүй '%s' утга байна."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Түлхүүр файлын '%2$s' бүлэгт '%1$s' гэсэн илэрхийлэх боломжгүй утга байна."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Түлхүүр файлын '%2$s' бүлэгт '%1$s' түлхүүр алга"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Түлхүүр файлын мөрийн төгсгөлд ESC тэмдэгт байна"
+
+# CHECK
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Түлхүүр файлд »%s« хүчингүй escape-тэмдэгт байна"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' утга бүхэл тоогоор илэрхийлэгдэх боломжгүй."
+
+#: glib/gkeyfile.c:3661
+#, fuzzy, c-format
+msgid "Integer value '%s' out of range"
+msgstr "'%s' бүхэл %s -н хувьд хязгаараас хальжээ"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' утга бүхэл тоогоор илэрхийлэгдэх боломжгүй."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' утга бүүл утгаар дүрслэгдэх боломжгүй ."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Тодорхойгүй утга %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Символик холбоос дэмжигдээгүй"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Символик холбоос дэмжигдээгүй"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "URI »%s« -н хостын нэр хүчингүй"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Хүчингүй хостын нэр"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Хүчингүй хостын нэр"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "»%s« файл үүсгэгдсэнгүй: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "»%s« файл үүсгэгдсэнгүй: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "»%s« файл үүсгэгдсэнгүй: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "»%s« лавлахыг нээхэд алдаа: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Баримт нэгэн аттрибут нэрийн дотор гэнэтийн байдлаар төгсөв"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "»%s« лавлахыг нээхэд алдаа: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "%d мөрөнд алдаа: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Символик холбоос дэмжигдээгүй"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Тохиромжгүй файл"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Хүчингүй хостын нэр"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "URI »%s« -н хостын нэр хүчингүй"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Файл »%s« -ыг уншиж байхад алдаа: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "%d мөрөнд алдаа: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Символик холбоос дэмжигдээгүй"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPTION...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Хөрвүүлж байхад алдаа: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "%lu байтуудыг »%s« файлыг уншихдаа байрлуулж чадсангүй"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "»%s« файл нээгдэхгүй байна: fdopen() нурлаа: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "»%s« тэмдэгтээс »%s« рүү хөрвүүлэх дэмжигдээгүй байна"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Буруу мэдээний хэмжээ"
+
+#~ msgid "Socket error"
+#~ msgstr "Сокет алдаа"
diff --git a/po/mr.po b/po/mr.po
new file mode 100644
index 0000000..1782f1f
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,1811 @@
+# translation of glib.HEAD.mr.po to marathi
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sandeep Shedmake <sandeep.shedmake@gmail.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD.mr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-09 19:28+0530\n"
+"Last-Translator: Sandeep Shedmake <sandeep.shedmake@gmail.com>\n"
+"Language-Team: marathi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s' घटक करीता '%s' अनपेक्षित गुणधर्म"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' घटकाकरीता '%s' गुणधर्म आढळले नाही"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "अनपेक्षीत टॅग '%s', टॅग '%s' अपेक्षीत"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%2$s' च्या आत, '%1$s' अनपेक्षीत टॅग"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "माहिती संचयीकेत वैध ओळखचिन्ह आढळले नाही"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' करीता ओळखचिन्ह आधिपासूनच अस्तित्वात आहे"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' करीता ओळखचिन्ह आढळले नाही"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' करीता ओळखचिन्हात MIME प्रकार व्याख्यीत नाही"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' करीता ओळखचिन्हात वैयक्तिक बाब व्याख्यीत नाही"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' करीता ओळखचिन्हात गट निश्चित नाही"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' नामांकीत कुठल्याही अनुप्रयोगाने '%s' करीता ओळखचिन्ह पंजीकृत केले नाही"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "'%s' पासून कार्यान्वीत ओळ '%s' विस्तारीत करू शकले नाही"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "अक्षर संच '%s' पासून '%s' असे रूपांतर समर्थित नाही"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' पासून '%s' असे रूपांतरक उघडू शकले नाही"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "रूपांतर आगत मध्ये अवैध बाईट श्रृंखला"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "रूपांतर करतेवेळी त्रूटी: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "आगतच्या शेवटी अपूरे अक्षर श्रृंखला"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "फॉलबॅक '%s' ला कोडसंच '%s' असे रूपांतर करू शकत नाही"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' \"file\" योजना वापरणारी संपूर्ण URI नाही"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "स्थानिक फाइल URI '%s' बहुदा '#' समाविष्टीत करणार नाही"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' अवैध आहे"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s' चे यजमान अवैध आहे"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' मध्ये अवैध निसटती अक्षरे समाविष्टीत आहे"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "मार्गनाव '%s' संपूर्ण मार्ग नाही"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "अवैध यजमान"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "संचयीका '%s' उघडतेवेळी त्रूटी: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "वाचतायेण्याजोगी फाइल \"%2$s\" करीता %1$lu बाइट वाटप करू शकले नाही"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' फाइल वाचताना त्रुटि : %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "फाइल \"%s\" खूप मोठे आहे"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' फाइल वाचतेवेळी त्रूटी: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' फाइल उघडण्यास अपयशी: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "फाइल '%s'चे गुणधर्म प्राप्त करण्यास अयशस्वी: fstat() अपयशी: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' फाइल उघडण्यास अपयशी: fdopen() अपयशी : %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "फाइलला '%s पासून '%s' असे पुनर्नामांकन करण्यास अपयशी: g_rename() अपयशी: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "फाइल बनविण्यास अपयशी '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "लिहण्यासाठी '%s' फाइल उघडण्यास अपयशी: fdopen() अपयशी: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' फाइलवर लिहण्यास अपयशी: fwrite() अपयशी: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' फाइलवर लिहण्यास अपयशी: fwrite() अपयशी: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' फाइलवर लिहण्यास अपयशी: fwrite() अपयशी: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' फाइल बंद करण्यास अपयशी: fclose() अपयशी: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "उपलब्ध फाइल '%s' काढूण टाकल्या जाऊ शकत नाही: g_unlink() अपयशी: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "आराखडा '%s' अवैध, '%s' समाविष्टीत नसायला हवे"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "आराखडा '%s' मध्ये XXXXXX समाविष्टीत नाही"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "बोधचिन्ह लिंक '%s' वाचण्यास अपयशी: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "बोधचिन्ह लिंक समर्थीत नाही"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' पासून '%s' असे रूपांतरक उघडू शकले नाही: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string वाचता येऊ शकले नाही"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "वाचन बफरमध्ये उर्वरीत बिनरूपांतरीत माहिती"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "अपूरे अक्षर असल्यास मार्ग बंद होते"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end वाचता येऊ शकले नाही"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' फाइल उघडण्यास अपयशी: open() अपयशी: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' फाइल महत्व जुळवू शकले नाही: mmap() f: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "ओळ %d अक्षर %d वर त्रूटी आढळली: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "ओळ %d वर त्रूटी: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"रिकामी वस्तु '&;' आढळली; वैध वस्तू याप्रकारे आहेत: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"वस्तुच्या सुरवातीस अक्षर '%s' वैध नाही ; वस्तुची सुरवात & अक्षर पासून होते; जर ऐम्परसेंड "
+"वस्तु नसल्यास, त्यास &amp; या स्वरूपी करा"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "वस्तुच्या नावात अक्षर '%s' वैध राहत नाही"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "वस्तुचे नाव '%s' अपरिचीत आहे"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"वस्तू सेमीकोलनवर संपत नाही; शक्यतः तुम्ही वस्तुला सुरू करण्याकरीता &amp; स्वरूप न वापरता "
+"ऐम्परसेंड अक्षर वापरले असावे"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' वाचता आले नाही, जे अक्षर संदर्भच्या आत अंक म्हणून असायला हवे होते (उदाहर्णाथ "
+"&#234;) - तसेच अंक खूप मोठे आहे"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "अक्षर संदर्भ '%-.*s' परवानगीय अक्षरास एनकोड करीत नाही"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "रिक्त अक्षर संदर्भात; &#454; सारखे अंक समाविष्टीत केले पाहीजे"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"अक्षर संदर्भ सेमीकोलनवर संपत नाही; शक्यतः तुम्ही वस्तुला सुरू करण्याकरीता &amp; स्वरूप न "
+"वापरता तुम्ही ऐम्परसेंड अक्षर वापरले असावे"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "अपूरे वस्तू संदर्भ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "अपूरे अक्षर संदर्भ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "अवैध UTF-8 ऐनकोड पाठ्य - अतिलांब श्रृंखला"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "अवैध UTF-8 ऐनकोड पाठ्य - प्रारंभ अक्षर नाही"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "अवैध UTF-8 ऐनकोड पाठ्य - वैध '%s' नाही"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "दस्तऐवजची सुरवात घटकाशी व्हावी (उ.दा. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'<' अक्षरानंतर '%s' वैध अक्षर नाही; त्यामुळे घटक नाव सुरू होऊ शकणार नाही"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "असाधारण अक्षर '%1$s', रिकामे-घटक टॅग '%2$s' करीता '>' अक्षर अपेक्षीत"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "'%s' असाधारण अक्षर आहे, घटक '%s' च्या '%s' गुणधर्म नावानंतर '=' अपेक्षीत"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' असाधारण अक्षर आहे, घटकाचे प्रारंभीक टॅग '%s' समाप्त करण्याकरीता '>' किंवा '/' "
+"अक्षर अपेक्षीत, किंवा पर्यायस्वरूपी गुणधर्म अपेक्षीत; तसेच तुम्ही गुणधर्म नावात अवैध अक्षर "
+"वापरले"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"'%s' असाधारण अक्षर आहे, घटक '%s' च्या गुणधर्म '%s' करीता मुल्य प्रदान करतेवेळी समांतर "
+"चिन्हा नंतर उघडे क्वोट अपेक्षीत"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "'</' अक्षरानंतर '%s' वैध अक्षर नाही; त्यामुळे '%s' घटक नाव सुरू करू शकणार नाही"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "'%s' घटक नावानंतर '%s' वैध अक्षर नाही; परवानगीय अक्षर '>' आहे"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "घटक '%s' बंद केले गेले,कुठलेही घटक आता उघडे नाही"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "घटक '%s' बंद केले गेले, पण सद्या '%s' हे घटक उघडे आहे"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "दस्तऐवज रिकामे होते किंवा फक्त रिक्त जागा समाविष्टीत होती"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "उघडे कोन कंस '<' नंतरच दस्तऐवज अनपेक्षितरित्या समाप्त झाले"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "घटक उघडे असूनही दस्तऐवज अनपेक्षितरित्या समाप्त झाले - '%s'शेवटचे उगडे घटक होते"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"दस्तऐवज अनपेक्षितरित्या समाप्त झाले, टॅग <%s/> ला बंद करण्याकरीता समाप्तीय कोन कंस "
+"उपेक्षीत"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "घटकाच्या नावाअंतर्गत दस्तऐवज अनपेक्षितरित्या समाप्त झाले"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "गुणधर्माच्या नावाअंतर्गत दस्तऐवज अनपेक्षितरित्या समाप्त झाले"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "घटकाच्या-खुल्या टॅग अंतर्गत दस्तऐवज अनपेक्षितरित्या समाप्त झाले."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"गुणधर्म नावा पाठोपाठ समांतर चिन्हानंतर दस्तऐवज अनपेक्षितरित्या समाप्त झाले; गुणधर्माचे मुल्य "
+"नाही"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "गुणधर्म मुल्यच्या अंतर्भूत राहतेवेळी दस्तऐवज अनपेक्षितरित्या समाप्त झाले"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "दस्तऐवज अनपेक्षितरित्या घटक '%s' करीता बंद टॅगच्या आत समाप्त झाले"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "दस्तऐवज अनपेक्षितरित्या टिप्पणी किंवा सुचनाचे विषलेशन करतेवेळी समाप्त झाले"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "वस्तु भ्रष्ट आहे"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "आंतरीक त्रुटी किंवा भ्रष्ट वस्तु"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "अतिरीक्त स्मृती नाही"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "संयुक्त शोध सीमा पोहचले"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "रचनेत अपूरे जुळवणीकरीता समाविष्टीत घटक जी समर्थित नाही"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "आंतरीक त्रूटी"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "पुनः संदर्भ कारण अपूरे जुळविणीकरीता स्थिती समर्थित नाही"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "पुनःनिर्मीत सीमा पोहचले"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "कार्यक्षेत्र सीमा रिक्त उपअक्षरओळीकरीता पोहचले"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "नविनओळ बाबींचे अवैध संयोग"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "अपरिचीत त्रुटी"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "रचनाच्या शेवटी \\"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "रचनाच्या शेवटी \\c"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "\\ च्या पाठोपाठ अपरिचीत अक्षर"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "case-changing escapes (\\l, \\L, \\u, \\U) ला येथे वापरू शकत नाही"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} quantifier मधील संख्या क्रमात नाही"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} quantifier मधील संख्या खूप मोठे आहे"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "अक्षर वर्गकरीता समाप्ती ] चिन्ह आढळत नाही"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "अक्षर वर्गामध्ये अवैध एसकेप श्रृंखला"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "अक्षर वर्गातले क्रमाच्या क्षेत्रा पलीकडे गेले आहे"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "पुन्हाकृती करीता काहीच नाही"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? नंतर अपरिचीत अक्षर आढळले"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< नंतर अपरिचीत अक्षर"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P नंतर अपरिचीत अक्षर"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX नामांकीत वर्ग फक्त वर्ग अंतर्गत समर्थीत आहे"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "समाप्ती ) आढळले नाही"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ( ला न उघडता"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R किंवा (?[+-]अंक पाठोपाठ ) असायला पाहिजे"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "विना-अस्तित्वातील उपरचना करीता संदर्भ"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "टिप्पणी नंतर ) आढळले नाही"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "वाक्यरचना खूप मोठे आहे"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "स्मृती प्राप्त करण्यास अपयशी"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind निश्चित आकाराचे नाही"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( नंतर सदोष संख्या किंवा नाव"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "स्थिती समुह मध्ये एका पेक्षा जास्त शाखा आहेत"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( नंतर होकारार्थी अपेक्षीत"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "अपरिचीत POSIX वर्ग नाव"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX कोलेटींग घटक समर्थीत नाही"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} श्रृंखला मधिल अक्षर मूल्य खूप मोठे आहे"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "अवैध स्थिती (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C lookbehind assertion अंतर्गत स्वीकार्य नाही"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "recursive call चक्र अनिश्चितरित्या चालू राहू शकते"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "उपरचना नावा मध्ये समाप्ती आढळली नाही"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "दोन नामांकीत उपरचनाकडे समान नाव आहे"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "सदोषीत \\P किंवा \\p श्रृंखला"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P किंवा \\p नंतर अपरिचीत गुणधर्म नाव"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "उपरचना नाव खूपच लांब आहे (कमाल 32 अक्षरे)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "खूपच नामांकीत उपरचना आहेत (कमाल 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "ऑक्टल मूल्य \\377 पेक्षा जास्त आहे"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE समुहात एका पेक्षा जास्त शाखा आहे"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE समुहचे पुनःकृती करू शकत नाही"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "अस्थीर NEWLINE पर्याय"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "ब्रेस नाव किंवा वैक्लपीक ब्रेस विना-शून्य संख्याच्या पाठोपाठ \\g दर्शविले जात नाही"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "अपरिचीत पुनःकृती"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "कोड उत्प्रवाह"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "उत्पकार्यन्वीत कंपाइल कार्यस्थळ"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "पूर्वी-तपासलेले संदर्भीत उपरचना आढळले नाही"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "रेगुलर एक्सप्रेशन %s जुळवणी करतेवेळी त्रूटी: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE लायब्ररी बिना UTF8 समर्थन कंपाईल केले गेले"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE लायब्ररी बिना UTF8 गुणधर्म समर्थन कंपाईल केले गेले"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "अक्षर %2$d वरील रेगुलर एक्सप्रेशन %1$s जुळवणी कंपाईल करतेवेळी त्रूटी: %3$s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "रेगुलर एक्सप्रेशन %s अधिक कार्यक्षम करतेवेळी त्रूटी: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "हेक्जाडेसीमल अंक किंवा '}' अपेक्षीत"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "क्जाडेसीमल अंक अपेक्षीत"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "बोधचिन्ह संदर्भात '<' आढळले नाही"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "अपूरे बोधचिन्ह संदर्भ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "शून्य-लांबीचे बोधचिन्ह संदर्भ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "अंक अपेक्षीत"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "अवैध बोधचिन्ह संदर्भ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "अंतिम '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "अपरिचीत निसटती श्रृंखला"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "अक्षर %2$lu वरील बदलाव पाठ्य \"%1$s\" वाचतेवेळी त्रूटी: %3$s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "क्वोट मध्ये असलेले पाठ्य क्वोटेशन चिन्हापासून सुरू होत नाही"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "आदेश ओळ किंवा इतर शेल-क्वोट पाठ्य मध्ये बिनजुळलेली क्वोटेशन चिन्ह"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "पाठ्य '\\' अक्षर संपल्यावर संपते. ('%s' पाठ्य होते)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c करीता जुळते क्वोट आढळण्यापूर्वी पाठ्य समाप्त झाले. ('%s' पाठ्य होते)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "पाठ्य रिकामे होते (किंवा त्यात फक्त रिक्त जागा समाविष्टीत होते)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "उप कार्य पासून माहिती वाचतेवेळी त्रूटी"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "उप कार्य पासून संभाषाणाकरीता पाईप बनविण्यास अपयशी (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "उप कार्य (%s) पासून वाचतेवेळी त्रूटी"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' संचयीकेत बदल करण्यास अपयशी (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "उप कार्य (%s) कार्यान्वीत करतेवेळी त्रूटी"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "अवैध कार्यक्रम नाव: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%1$d वरील बाबी वेक्टर मध्ये अवैध अक्षरमाळा: %2$s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "वातावरणात अवैध अक्षरमाळा: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "अवैध कार्यक्षम संचयीका: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "मदतीय कार्यक्रम कार्यान्वीत करण्यास अपयशी (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"g_io_channel_win32_poll() मध्ये उप कार्य पासून माहिती वाचतवेली अपरिचीत त्रूटी आढळली"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "उप कार्य पासून वाचतेवेळी त्रूटी आढळली (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "उप कार्य (%s) पासून माहिती वाचतेवेळी select() मध्ये अपरिचीत त्रूटी आढळली"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() (%s) मध्ये अपरिचीत त्रूटी आढळली"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) विभाजीत करण्यास अपयशी"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "उप कार्य \"%s\" कार्यान्वीत करण्यास अपयशी (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "उप कार्य (%s) चे प्रदान किंवा आगत परत पाठवू शकले नाही"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "उप कार्य (%s) चे विभाजन करण्यास अपयशी"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "उप कार्य \"%s\" कार्यान्वीत करतेवेळी त्रूटी"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "उप pid पाईप (%s) पासून वाचतेवेळी त्रूटी"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 करीता अक्षर क्षेत्राच्या अंतर्गत नाही"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "रूपांतर आगत मध्ये अवैध श्रृंखला"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 करीता अक्षर क्षेत्राच्या अंतर्गत नाही"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "वापर:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "माहिती पर्याय:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "मदत पर्याय दार्शवा"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "सर्व मदत पर्याय दर्शवा"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "अनुप्रयोग पर्याय:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%2$s करीता संख्यात्मक मुल्य '%1$s' वाचता आले नाही"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s करीता संख्यात्मक मुल्य '%1$s' क्षेत्राच्या अंतर्गत नाही"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%2$s करीता दुहेरी मुल्य '%1$s' वाचता आले नाही"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s करीता दुहेरी मुल्य '%1$s' क्षेत्राच्या अंतर्गत नाही"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s पर्याय वाचतेवेळी त्रूटी"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s करीता बाब आढळले नाही"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "अपरिचीत पर्याय %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "शोध संचयीकेत वैध किल्ली फाइल आढळली नाही"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "नियमीत फाइल नाही"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "फाइल रिकामी आहे"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "की फाइल मध्ये ओळ '%s' अंतर्भूत आहे जे की-मुल्य जोड, गट, किंवा टिपप्णी नाही"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "अवैध गट नाव: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "की फाइल गटासह सुरू होत नाही"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "अवैध की नाव: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "की फाइल मध्ये असमर्थित ऐनकोडींग '%s' समाविष्टीत आहे"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "की फाइलमध्ये '%s' गट समाविष्टीत नाही"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "की फाइल मध्ये '%s' की नाही"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "किल्ली फाइल मध्ये '%1$s' किल्ली समाविष्टीत आहे ज्याचे '%2$s' मुल्य UTF-8 नाही"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"किल्ली फाइल मध्ये '%1$s' किल्ली समाविष्टीत आहे ज्याचे मुल्य विश्लेषीत केल्या जाऊ शकत नाही."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"गट '%2$s' मधिल किल्ली फाइल मध्ये '%1$s' किल्ली समाविष्टीत आहे ज्याचे मुल्य विश्लेषीत "
+"केल्या जाऊ शकत नाही."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "गट '%s' मधिल '%s' किल्ली किल्ली फाइल मध्ये समाविष्टीत नाही"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "किल्ली फाइलीत निसटते अक्षर ओळीच्या अखेरस समाविष्टीत आहे"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "किल्ली फाइल मध्ये अवैध '%s' निसटती श्रृंखला समाविष्टीत आहे"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "मुल्य '%s' संख्या म्हणून विश्लेषीत केले जाऊ शकत नाही."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "संख्यात्मक मुल्य '%s' क्षेत्राच्या अंतर्गत नाही"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "मुल्य '%s' फ्लोट संख्या म्हणून विश्लेषीत केले जाऊ शकत नाही."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "मुल्य '%s' बूलीयन म्हणून विश्लेषीत केले जाऊ शकत नाही."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s करीता खूप मोठी प्रमाण संख्या पुरविले गेली"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "श्रृंखला आधिपासूनच बंद आहे"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "कार्य रद्द करण्यात आले"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "अपरिचीत प्रकार"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s फाइलप्रकार"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s प्रकार"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "अपरिचीत पूर्वरत end-of-stream"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "अनामीक"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "डेस्कटॉप फाइल मध्ये Exec नोंदणी निश्चित नाही"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "अनुप्रयोगकरीता आवश्यक टर्मिनल आढळले नाही"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "वापरकर्ता अनुप्रयोग संयोजन संचयीका %s बनवू शकले नाही: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "वापरकर्ता MIME संयोजन संचयीका %s बनवू शकले नाही: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "वापरकर्ता डेस्कटॉप फाइल %s बनवू शकत नाही"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s करीता इच्छिक व्याख्या"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ड्राइव्ह बाहेर कडा कार्यान्वीत करत नाही"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ड्राइव्ह मिडीयाकरीता पोलींग कार्यान्वीत करत नाही"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem एनकोडींगची आवृत्ती %d हाताळू शकत नाही"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem एनकोडींग अंतर्गत सदोषीत टोकन (%d) आढळले"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblem एनकोडींग ची आवृत्ती (%d) हाताळू शकत नाही"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblem एनकोडींग अंतर्गत सदोषीत टोकन (%d) आढळले"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon करीता GEmblem अपेक्षीत"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "कार्य समर्थित नाही"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "समाविष्टीत आरोहन अस्तीत्वात नाही"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "संचयीकेवर प्रत बनवू शकत नाही"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "संचयीकेवर संचयीकेची प्रत बनवू शकत नाही"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "लक्ष्य फाइल अस्तित्वात आहे"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "संचयीकेची पुनः प्रत बनवू शकत नाही"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "विशेष फाइलचे प्रत बनवू शकत नाही"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "अवैध symlink मुल्य दिले गेले"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "कचरापेटी समर्थित नाही"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "फाइल नावात '%c' असू शकत नाही"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "खंड आरोहन कार्यारत करत नाही"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ही फाइल हाताळण्याकरीता कुठलेही अनुप्रयोग पंजीकृत नाही"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ऐन्युमरेटर बंद आहे"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "फाइल ऐन्युमरेटरची अप्रतिम कार्यक्षमता"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "फाइल ऐन्युमरेटर आधिपासूनच बंद आहे"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "फाइल"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "चिन्ह समाविष्ठीत फाइल"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon एनकोडींगची आवृत्ती %d हाताळू शकत नाही"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon करीता सदोषीत इनपुट डेटा आढळले"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "श्रृंखला query_info ला समर्थन देत नाही"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "श्रृंखलेवर सीक समर्थित नाही"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "आगत श्रृंखलेवर ट्रंकेट वापरू शकत नाही"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "श्रृंखलेवर ट्रंकेट समर्थित नाही"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "चुकीचे टोकन क्रमांक (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "वर्ग नाव %s करीता प्रकार आढळले नाही"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "प्रकार %s GIcon संवाद लागू करण्यास अशक्य ठरले"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "प्रकार %s वर्गीकृत केले गेले नाही"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "सदोषीत आवृत्ती क्रमांक: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "प्रकार %s GIcon संवादवर from_tokens() लागू करत नाही"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "पुरविलेली आवृत्ती आयकन एनकोडींग हाताळू शकत नाही"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "आगत श्रृंखला वाचतायेण्याजोगी कार्यरत करत नाही"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "श्रृंखलाचे अप्रतिम कार्यक्षमता"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "मुलभूत संचयीका मॉनीटर प्रकार शोधता आली नाही"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "अवैध फाइलनाव %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "फाइलप्रणाली विषयी माहिती मिळवतेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "रूट संचयीका पुनःनामांकीत करू शकत नाही"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "फाइल पुनःनामांकीत करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "फाइल पुनःनामांकीत करू शकत नाही, फाइलनाव आधिपासूनच अस्तित्वात आहे"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "अवैध फाइल नाव"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "फाइल उघडतेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "संचयीका उघडू शकत नाही"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "फाइल काढून टाकतेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "फाइल कचरापेटीत हलवितेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "कचरापेटी संचयीका %1$s निर्माण करती आली नाही: %2$s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "कचरापेटी करीता उच्चस्थरीय संचयीका शोधता आली नाही"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "कचरापेटी करीता उच्चस्थरीय संचयीका शोधता आली नाही"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "कचरापेटी माहिती फाइल बनविता आली नाही: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "कचरापेटीकडे फाइल हलवितेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "संचयीका बनवितेवेळी त्रूटी आढळली: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "बोधचिन्ह लिंक बनवितेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "फाइल स्थानांतरन करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "संचयीकेवर संचयीका हलवू शकत नाही"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "प्रतिकृत फाइल निर्माण अपयशी"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "लक्ष्य फाइल काढून टाकतेवेळी त्रूटी: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "आरोहन मधिल स्थानांतरन समर्थीत नाही"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "गुणधर्म मुल्य शून्य नसायला हवे"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "अवैध गुणधर्म प्रकार (अक्षरमाळा अपेक्षीत)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "अवैध विस्तारीत गुणधर्म नाव"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "विस्तारीत गुणधर्म निश्चित करतेवेळी त्रूटी '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "फाइल '%s' सुरू करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (अवैध ऐंकोडींग)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "फाइल व्याख्यक निश्चित करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "अवैध गुणधर्म प्रकार (uint32 अपेक्षीत)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "अवैध गुणधर्म प्रकार (uint64 अपेक्षीत)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "अवैध गुणधर्म प्रकार (बाईट अक्षरमाळा अपेक्षीत)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "परवानगी स्थापित करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "मालक स्थापित करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink शून्य नसायला हवे"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "symlink स्थापीत करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "symlink निश्चित करतेवेळी त्रूटी: फाइल symlink नाही"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux संदर्भ विना-शून्य असायला हवे"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux संदर्भ संयोजीत करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux या प्रणालीवर कार्यान्वीत नाही"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "%s गुणधर्म स्थापित करणे समर्थित नाही"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "फाइल पासून वाचतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "फाइल शोधतेवळी त्रूटी: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "फाइल बंद करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "मुलभूत स्थानीक फाइल मॉनीटर प्रकार शोधता आले नाही"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "फाइलवर लिहीतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "जुने प्रतिकृत लिंक काढून टाकतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "प्रतिकृत प्रत बनवितेवेळी त्रूटी: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "तातपूरती फाइल पुनःनामांकीत करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "फाइल ट्रंकेट करतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "फाइल '%s' उघडतेवेळी त्रूटी: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "लक्ष्य फाइल संचयीका आहे"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "लक्ष्य फाइल सामान्य फाइल नाही"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "फाइल बाहेरुन संपादित करण्यात आली"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "जुणी फाइल काढूण टाकतेवेळी त्रूटी: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "अवैध GSeekType पुरविले गेले"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "अवैध संचयन विनंती"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream ट्रंकेट करू शकत नाही"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "कमाल माहिती अर्रे मर्यादा पोहचले"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "स्मृती आउटपुट श्रृंखला पुन्हआकार देण्यजोगी नाही"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "स्मृती आउटपुट स्ट्रीम पुन्ह आकार देण्यास अपयशी"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "आरोहन अनारोहन कार्यान्वीत करीत नाही"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "आरोहन बाहेर पडा कार्यान्वीत करत नाही"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "आरोहन पुनःआरोहन कार्यान्वीत करत नाही"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "माउन्ट अनुक्रम प्रकार अंदाज लागू करत नाही"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "माउन्ट समजुळवणी अनुक्रम प्रकार अंदाज लागू करत नाही"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "आगत श्रृंखला लिहीतायेण्याजोगी कार्यरत करत नाही"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "स्त्रोत श्रृंखला आधिपासून बंद"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "नाव"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "चिन्हाचे नाव"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "नाव"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "चिन्ह नाव समाविष्ठीत अर्रे"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "मुलभूत फॉलबॅक वापरा"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' चा वापर करून आढळलेले संकुचीत नाव करीता मुलभूत फॉलबॅक वापरायचे. एकापेक्षा जास्त नाव "
+"प्रविष्ट केले असल्यास प्रथम नावानंतर आढळलेली नाव दुर्लक्ष करा."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon एनकोडींगची आवृत्ती %d हाताळू शकत नाही"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "फाइल डिस्क्रीप्टर"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "वाचण्याजोगी फाइल डिस्क्रीप्टर"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "फाइल वर्णनकर्ता बंद करा"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "स्ट्रीम बंद केल्यावर फाइल डिस्क्रीप्टर बंद करायचे"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix पासून वाचतेवेळी त्रूटी: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix बंद करतेवेळी त्रूटी: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "रूट फाइलप्रणाली"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "लेखनजोगी फाइल डिस्क्रीप्टर"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unixकरीता लिहितेवेळी त्रूटी: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "खंड बाहेर कडा कार्यन्वीत होत नाही"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "अनुप्रयोग आढळले नाही"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "अनुप्रयोग प्रक्षेपीत करतेवेळी त्रूटी: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI समर्थित नाही"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "संबंधीत बदल win32 वर समर्थित नाही"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 वर ग निर्माण समर्थित नाही"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "नोंदणी लपवू नका"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "लांब यादी स्वरूप वापरा"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/ms.po b/po/ms.po
new file mode 100644
index 0000000..47b4be8
--- /dev/null
+++ b/po/ms.po
@@ -0,0 +1,1855 @@
+# glib Bahasa Melayu (ms)
+# Jika takut risiko, Jangan bicara tentang Perjuangan
+# Hasbullah Bin Pit (sebol) <sebol@ikhlas.com>, 2002-2004
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2004-02-03 02:11+0730\n"
+"Last-Translator: Hasbullah Bin Pit <sebol@my-penguin.org>\n"
+"Language-Team: Projek Gabai <gabai-penyumbang@lists.sourceforge.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Aksara ganjil  '%s', dijangkakan '=' selepas nama atribut  '%s' unsur  '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Gagal membaca pautan simbolik '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Penukaran set aksara daripada '%s' ke '%s' tidak disokong"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "tak dapat membuka penukar daripada '%s' kepada '%s': %s"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Turutan byte tidak sah pada penukaran iput"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Sebahagian turutan aksara berada di penghujung input"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Tak dapat tukar unduran '%s' ke set kod '%s'"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' adalah bukan URI mutlak menggunakan skema fail"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI Fail local '%s' mungkin tidak disertakan dengan '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' adalah tidak sah"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Namahos URI '%s' tidak sah"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' mengandungi aksara escaped yang tidak sah"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Nama laluan '%s' adalah bukan laluan mutlak"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Namahos tidak sah"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Ralat membuka direktori %s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Tak dapat memperuntukkan  %lu byte untuk membaca fail \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Gagal membaca fail  '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Gagal membuka fail '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Gagal mendapatkan atribut fail  '%s': fstat() gagal: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Gagal mencipta fail %s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Templet '%s' tidak sah, sepatutnya tidak mengandungi '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Templet '%s' tidak berakhir dengan XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Gagal membaca pautan simbolik '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Pautan simbolik tidak disokong"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Tak dapat membuka penukar daripada `%s' kepada `%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Tak dapat membuat bacaan rawak pada g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Data tak boleh ditukar Leftover pada penimbal bacaan"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Saluran terhenti pada sebahagian aksara"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Tak dapat membuat bacaan rawak pada g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Ralat pada baris  %d aksara %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Ralat pada baris %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Entiti kosong '&;' kelihatan; entiti sah ialah : &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Aksara  '%s' adalah tidak sah pada permulaan nama entiti; aksara '&' "
+"memulakan entiti; jika & tidak disokong untuk dijadikan entiti, escapekan "
+"sebagai &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Aksara '%s' adalah tidak sah di dalam nama entiti"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nama entiti '%s' tidak diketahui"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiti tidak berakhir dengan titik bertindih; mungkin anda gunakan aksara "
+"'&' tanpa menyedari untuk memulakan entiti - escape & sebagai  &amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"gagal menghantar '%s', yang sepatutnya satu digit didalam satu rujukan "
+"aksara  (&#234; sebagai contoh) - mungkin digit terlalu besar"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Rujukan aksara '%s' tidak mengenkodkan aksara yang diizini"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Rujukan aksara kosong; sepatutnya disertakan digit seperti  &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Rujukan aksara tidak berakhir dengan  semicolon; agaknya anda menggunakan "
+"aksara '&' tanpa niat untuk memulakan entiti - escapekan & sebagai &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Rujukan entiti tidak tamat"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Rujukan aksara tidak tamat"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Teks terenkod UTF-8 tidak sah"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Teks terenkod UTF-8 tidak sah"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Teks terenkod UTF-8 tidak sah"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumen mesti dimulakan dengan unsur  (e.g. <buku>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' adalah bukan aksara sah diikuti sengan aksara '<'; ia tidak sepatutnya "
+"bermula dengan nama unsur"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Aksara ganjil  '%s', dijangkakan aksara '>' untuk mengakhiri tag permulaan "
+"unsur '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Aksara ganjil  '%s', dijangkakan '=' selepas nama atribut  '%s' unsur  '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Aksara ganjil  '%s', menjangka aksara '>' atau '/' untuk mengakhiri tag "
+"permulaan unsur '%s', atau atribut; meungkin anda gunakan aksara tidak sah "
+"pada nama atribut"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Aksara ganjil  '%s', menjangka tanda petikan membuka selepas tanda = bila "
+"memberi nilai atribut untuk '%s' unsur '%s' "
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' adalah bukan aksara sah diikuti aksara '</'; '%s' tak boleh memulakan "
+"nama unsur"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' adalah bukan aksara sah diikuti dengan nama unsur penutup  '%s'; aksara "
+"yang diizinkan ialah  '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Unsur '%s' telah ditutup, tiada unsur yang dibuka"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Unsur '%s' telah ditutup, tetapi unsur yang dibuka adalah '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumen kosong atau hanya menandungi ruangputih"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumen berakhir tanpa diduga sebaik selepas membuka '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumen berakhir tanpa diduga dengan unsur yang masih dibuka - '%s' adalah "
+"unsur dibuka"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "Dokumen berakhir tanpa diduga, menjangkai tag <%s/> pada hujungnya"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumen berakhir tanpa diduga di dalam nama unsur"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumen berakhir tanpa diduga di dalam nama atribut"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumen berakhir tanpa diduga di dalam tag element-opening"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumen berakhir tanpa diduga selepas tanda '=' diikuti dengan nama atribut; "
+"tiana nilai atribut"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumen  berakhir tanpa diduga semasa di dalam nilai atribut"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokumen berakhir tanpa diduga di dalam tag tertutup untuk unsur '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Dokumen berakhir tanpa diduga di dalam komen atau memproses arahan"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Saluran terhenti pada sebahagian aksara"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Turutan byte tidak sah pada penukaran iput"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Rujukan aksara tidak tamat"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Rujukan aksara tidak tamat"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Rujukan aksara tidak tamat"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Pautan simbolik tidak disokong"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Ralat pada baris  %d aksara %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Rujukan entiti tidak tamat"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Teks dipetik tidak bermula dengan tanda petikan"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Tanda petikan tidak sepadan pada arahan baris atau teks shell-quoted lain"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Teks berakhir selepas aksara '\\'. (Teks terdahulu ialah '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Teks berakhir sebelum quot sepadan dijumpai untuk %c (Teks ialah '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teks telah kosong (atau mengandungi hanya ruangputih)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Gagal membaca data daripada proses anak"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Gagal mencipta paip untuk berkomunikasi dengan proses anak (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Gagal membaca daripada paip anak (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Gagal menukar direktori '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Gagal melaksanakan proses anak (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Namahos tidak sah"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Turutan tidak sah semasa penukaran input"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ralat membuka direktori %s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Gagal melaksanakan program pembantu"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Ralat tidak diduga bila g_io_channel_win32_poll()membaca data daripada "
+"proses anak"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Gagal membaca data daripada proses anak (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Ralat tanpa diduga bila select() membaca data daripada proses anak (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Ralat tanpa diduga pada waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Gagal untuk sepit (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Gagal melaksanakan proses anak \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Gagal melencongkan output atau input proses anak (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Gagal menyepit proses anak (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ralat misteri ketika melaksanakan proses anak  \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Gagal membaca data yang cukup daripada paip pid anaki(%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Aksara di luar julat UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Turutan tidak sah semasa penukaran input"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Aksara di luar julat UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Namahos tidak sah"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Namahos tidak sah"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "URI '%s' mengandungi aksara escaped yang tidak sah"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Pautan simbolik tidak disokong"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Pautan simbolik tidak disokong"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Namahos URI '%s' tidak sah"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Namahos tidak sah"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Namahos tidak sah"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Gagal mencipta fail %s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Gagal mencipta fail %s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Gagal mencipta fail %s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Ralat membuka direktori %s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokumen berakhir tanpa diduga di dalam nama atribut"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Ralat membuka direktori %s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Ralat pada baris %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Pautan simbolik tidak disokong"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Namahos tidak sah"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Namahos URI '%s' tidak sah"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Ralat membaca fail '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Ralat pada baris %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Ralat semasa penukaran: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Pautan simbolik tidak disokong"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Ralat semasa penukaran: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Tak dapat memperuntukkan  %lu byte untuk membaca fail \"%s\""
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Gagal membuka fail '%s': fdopen() gagal: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Penukaran set aksara daripada '%s' kepada '%s' tidak disokong"
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..083a6d7
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,1832 @@
+# translation of nb.po to Norwegian Bokmal
+# Norwegian (bokmål) translation of glib.
+# Copyright (C) 2001-2003, 2005 Free Software Foundation, Inc.
+# Kjartan Maraas <kmaraas@gnome.org>, 2001-2009.
+# Terance Edward Sola <terance@lyse.net>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.16.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 09:17+0100\n"
+"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
+"Language-Team: Norwegian bokmal <i18n-nb@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Uventet attributt «%s» for element «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attributt «%s» i element «%s» ble ikke funnet"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Uventet tagg «%s», tagg «%s» forventet"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Uventet tagg «%s» i «%s»"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Ingen gyldig bokmerkefil ble funnet i datakatalogene"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Et bokmerke eksisterer allerede for URI «%s»"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Ingen bokmerker funnet for URI «%s»"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Ingen MIME-type definert i bokmerke for URI «%s»"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Ingen private flagg er definert i bokmerke for URI «%s»"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Ingen grupper satt i bokmerke for URI «%s»"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Ingen program med navn «%s» har registrert et bokmerke for «%s»"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Feil under utvidelse av exec-linje «%s» med URI «%s»"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konvertering fra tegnsett «%s» til «%s» er ikke støttet"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Kunne ikke åpne program for å konvertere fra «%s» til «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ugyldig bytesekvens i inndata for konvertering"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Feil under konvertering: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Ufullstendig tegnsekvens ved slutten på inndata"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Kan ikke konvertere \"fallback\" «%s» til tegnsett «%s»"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI «%s» er ikke en absolutt URI som bruker skjema for filer"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Lokal fil-URI «%s» kan ikke inneholde en «#»"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI «%s» er ugyldig"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Vertsnavnet for URI «%s» er ugyldig"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Vertsnavnet for URI «%s» inneholder ugyldige escape-tegn"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Stinavnet «%s» er ikke en absolutt sti"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ugyldig vertsnavn"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Feil under åpning av katalog «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Kunne ikke allokere %lu bytes til lest fil «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Feil under lesing av fil «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Fil «%s» er for stor"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Feil under lesing fra fil «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Feil under åpning av fil «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Feil ved uthenting av attributter for fil «%s»: fstat() feilet: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Feil under åpning av fil «%s»: fdopen() feilet: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Feil under endring av navn på filen «%s» til «%s»: g_rename() feilet: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Feil under oppretting av fil «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Feil under åpning av filen «%s» for skriving: fdopen() feilet: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Kunne ikke skrive fil «%s»: fwrite() feilet: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Kunne ikke skrive fil «%s»: fflush() feilet: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Kunne ikke skrive fil «%s»: fsync() feilet: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Kunne ikke lukke fil «%s»: fclose() feilet: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Eksisterende fil «%s» kunne ikke bli fjernet: g_unlink() feilet: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Mal «%s» er ugyldig, må ikke inneholde «%s»"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Mal «%s» inneholder ikke XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Feil under lesing av symbolsk lenke «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolske lenker er ikke støttet"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Kunne ikke åpne konverterer fra «%s» til «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Kan ikke utføre rå avlesing i g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Overflødig ikke-konvertert data i innlesingsbuffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanalen terminerer i et oppdelt tegn"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Kan ikke utføre rå avlesing i g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Kunne ikke åpne fil «%s»: open() feilet: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Kunne ikke lese fil «%s» inn i minnet: mmap() feilet: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Feil på linje %d tegn %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Feil på linje %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Tom entitet «&;» funnet; gyldige entiteter er: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Tegn «%s» er ikke gyldig ved starten på navnet til en entitet; &-tegnet "
+"starter en entitet; hvis dette og-tegnet ikke er ment å være en entitet, "
+"unngå dette ved å bruke &amp; i stedet"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Tegn «%s» er ikke gyldig inne i et entitetsnavn"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entitetsnavn «%s» er ikke kjent"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteten sluttet ikke med et semikolon; du har sannsynligvis brukt et og-"
+"tegn uten at det var ment å starte en entitet - ungå ved å bruke &amp; i "
+"stedet"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Feil under lesing av «%-.*s», som skulle vært et tall inne i en tegnreferanse "
+"(&#234; for eksempel) - tallet er muligens for stort"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Tegnreferanse «%-.*s» koder ikke et tillatt tegn"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tom tegnreferanse; skulle inkludert et tall slik som &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Tegnreferansen sluttet ikke med et semikolon; du har sannsynligvis brukt et "
+"og-tegn uten at det var ment å starte en entitet - unngå ved å bruke &amp; i "
+"stedet"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Uferdig referanse til entitet"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Uferdig referanse til tegn"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ugyldig UTF-8 kodet tekst - for lang sekvens"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ugyldig UTF-8 kodet tekst - ikke et starttegn"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ugyldig UTF-8 kodet tekst - ikke gyldig «%s»"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentet må starte med et element (f.eks <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"«%s» er ikke et gyldig tegn etter en «<» tegn; det kan ikke være begynnelsen "
+"på et elementnavn"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Rart tegn «%s», forventet et «>» tegn for å avslutte start-taggen til det "
+"tomme elementet «%s»"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "Rart tegn «%s», forventet et «=» etter attributtnavn «%s» for element «%s»"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Rart tegn «%s», forventet «>» eller «/» tegn for å avslutte start-taggen til "
+"element «%s», eller alternativt en attributt; kanskje du brukte et ugyldig "
+"tegn i attributtnavnet"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Rart tegn «%s», ventet et åpent sitattegn etter likhetstegnet når verdi for "
+"attributt «%s» for element «%s» oppgis"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"«%s» er ikke et gyldig tegn etter tegnene «</»; «%s» er kanskje ikke "
+"begynnelsen på et elementnavn"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"«%s» er ikke et gyldig tegn etter element for lukking med navn «%s»; tillatt "
+"tegn er «>»"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element «%s» ble lukket, ingen åpne elementer nå"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element «%s» ble lukket, men aktivt åpent element er «%s»"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumentet var tomt eller inneholdt kun blanke tegn"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumentet sluttet uventet rett etter en åpen vinkelparantes «<»"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumentet sluttet uventet med åpne elementer - «%s» var siste åpne element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumentet sluttet uventet, forventet å se en vinkelparantes for å slutte av "
+"den siste taggen <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumentet sluttet uventet inni et elementnavn"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumentet sluttet uventet inni et attributtnavn"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumentet sluttet uventet inni en tagg for åpning av element."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumentet sluttet uventet etter likhetstegnet som følger et attributtnavn; "
+"ingen attributtverdi"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumentet sluttet uventet inni en attributtverdi"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokumentet sluttet uventet inni tagg for lukking av element «%s»"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumentet sluttet uventet inni en kommentar eller prosesseringsinstruksjon"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "korrupt objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "intern feil eller korrupt objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ikke mer minne"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "grense for liste av funksjonskall nådd"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "mønsteret inneholder oppføringer som ikke støttes for delvise treff"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "intern feil"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "bakoverreferanser som betingelser er ikke støttet for delvise treff"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "rekursjonsgrense nådd"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "grense for tomme understrenger nådd"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ugyldig kombinasjon av flagg for nye linjer"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ukjent feil"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ på slutten av mønsteret"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c på slutten av mønsteret"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ugjenkjennelig tegn følger \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"escape-verdier som bytter mellom små/store bokstaver (\\l, \\L, \\u, \\U) er "
+"ikke tillatt her"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "tall ute av rekkefølge i {}-kvantifikator"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "for stort tall i {}-kvantifikator"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "mangler terminerende ] for tegnklassen"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ugyldig escape-sekvens i tegnklassen"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "område utenfor rekkefølge i tegnklassen"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ingenting å gjenta"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "ikke gjenkjent tegn etter (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "ikke gjenkjent tegn etter (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "ikke gjenkjent tegn etter (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "klasser med POSIX-navngivning støttes kun innen en klasse"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "mangler terminerende )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") uten åpnende ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R eller (?[+-]tall må følges av )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referanse til ikke-eksisterende undermønster"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "mangler ) etter kommentar"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "vanlig uttrykk for stort"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "ikke nok minne"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind-regel er ikke av fast lengde"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "ugyldig tall eller navn etter (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "betinget gruppe inneholder mer enn to grener"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assert forventet etter (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ukjent navn på POSIX-klasse"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX elementer for sammenslåing er ikke støttet"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "tegnverdi i \\x{...} sekvens er for stor"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ugyldig betingelse (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C er ikke tillatt i «lookbehind assertion»"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursivt kall kunne gå i uendelig løkke"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "mangler terminering av navn på undermønster"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "to navngitte undermønster har samme navn"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ugyldig \\P- eller \\p-sekvens"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "ukjent navn på egenskap etter \\P eller \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "navn på undermønster er for langt (maks 32 tegn)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "for mange navngitte undermønster (maks 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "oktal verdi er større enn \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-gruppe inneholder mer enn en gren"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "repetering av en DEFINE-gruppe er ikke tillatt"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inkonsistente NEWLINE-alternativer"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g etterfølges ikke av et navn, eller tall større enn null, i "
+"klammeparanteser"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "uventet gjentagelse"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kodeoverflyt"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "gikk ut over arbeidsområde for kompilering"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "tidligere sjekket og referert undermønster ikke funnet"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Feil under treff på regulært uttrykk %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-biblioteket er kompilert uten støtte for UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE-biblioteket er kompilert uten støtte for UTF8-egenskaper"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Feil under sammensetting av regulært utrykk %s ved tegn %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Feil under optimering av reguært utrykk %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "heksadesimalt tall eller «}» forventet"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "heksadesimalt tall forventet"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "mangler «<» i symbolsk referanse"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "uferdig symbolsk referanse"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "symbolsk referanse med null lengde"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "tall forventet"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ugyldig symbolsk referanse"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "feilplassert siste «\\\\»"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ukjent escapesekvens"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Feil under tolking av erstatningstekst «%s» ved tegn %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Sitert tekst begynner ikke med sitattegn"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Ubalansert sitattegn i kommandolinje eller annen skall-sitert tekst"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst sluttet rett etter et «\\» tegn. (Teksten var «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Teksten sluttet før likt sitattegn ble funnet for %c. (Teksten var «%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksten var tom (eller inneholdt kun blanke tegn)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Feil under lesing av data fra underprosess"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Feil under oppretting av rør for kommunikasjon med underprosess (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Feil under lesing fra \"child pipe\" (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Feil ved skifte til katalog «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Feil under kjøring av underprosess (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ugyldig programnavn: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Ugyldig streng i argumentvektor på %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ugyldig streng i miljø: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ugyldig arbeidsmappe: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Feil under kjøring av hjelpeprogram (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Uventet feil i g_io_channel_win32_poll() under lesing av data fra en "
+"underprosess"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Feil under lesing av data fra underprosess (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Uventet feil i select() ved lesing av data fra underprosess (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Uventet feil i waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Feil under kjøring av fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Feil under kjøring av underprosess «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Feil under omdirigering av utdata eller inndata for underprosess (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Feil under kjøring av fork() for underprosess (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ukjent feil under kjøring av underprosess «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Klarte ikke å lese nok data fra underprosessens pid-rør (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Tegn utenfor gyldig område for UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ugyldig sekvens i inndata for konvertering"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Tegn utenfor gyldig område for UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Bruk:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[FLAGG...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Flagg for hjelp:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Vis flagg for hjelp"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Vis alle flagg for hjelp"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Flagg for applikasjonen"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Kan ikke lese heltallsverdi «%s» for %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Heltallsverdi «%s» for %s er utenfor gyldig område"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Kan ikke lese verdi for double «%s» for %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Double-verdi «%s» for %s er utenfor gyldig område"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Feil under tolking av flagg %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Mangler argument for %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Ukjent flagg %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Gyldig nøkkelfil ble ikke funnet i søkemapper"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ikke en vanlig fil"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Filen er tom"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Nøkkelfil inneholder linjen «%s» som ikke er et par med nøkkelverdier, gruppe "
+"eller kommentar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ugyldig navn på gruppe: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Nøkkelfil starter ikke med en gruppe"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ugyldig navn på nøkkel: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Nøkkelfil inneholder ustøttet tegnkoding «%s»"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Nøkkelfil har ikke gruppe «%s»"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Nøkkelfil har ikke nøkkelen «%s»"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Nøkkelfilen inneholder nøkkelen «%s» med verdi «%s» som ikke er UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Nøkkelfilen inneholder nøkkelen «%s» som har en verdi som ikke kan bli tolket"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Nøkkelfilen inneholder nøkkelen «%s» i gruppen «%s» som har en verdi som ikke "
+"kan bli tolket."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Nøkkelfilen har ikke nøkkelen i «%s» i gruppen «%s»"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Nøkkelfilen inneholder skiftetegn ved linjeslutt"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Nøkkelfil inneholder ugyldig skiftesekvens «%s»"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Vedien «%s» kan ikke bli tolket som et tall."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Heltallsverdi «%s» er utenfor gyldig område"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Verdi «%s» kan ikke tolkes som et flyttall."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Verdi «%s» kan ikke tolkes som en bolsk verdi."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Tellerverdi gitt til %s er for stor"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Strømmen er allerede lukket"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operasjonen ble avbrutt"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Ukjent type"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "filtype %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "type %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Uventet tidlig slutt på strøm"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Uten navn"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop-filen hadde ingen verdi i Exec-feltet"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Kan ikke finne terminalen som kreves for programmet"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kan ikke opprette konfigurasjonsmappe %s for brukers program: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kan ikke opprette brukers konfigurasjonsmappe %s for MIME: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kan ikke opprette brukers desktop-fil %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Egendefinert definisjon for %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "stasjonen implementerer ikke utløsing"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "stasjonen implementerer ikke sjekk om medie er satt inn"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Kan ikke håndtere versjon %d av GEmblem-koding"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Feil antall tegn (%d) i GEmblem-koding"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Kan ikke håndtere versjon %d av GEmblemedIcon-koding"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Feil antall tegn (%d) i GEmblemedIcon-koding"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Ventet et GEmblem for GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operasjonen er ikke støttet"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Omsluttende monteringspunkt finnes ikke"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Kan ikke kopiere over katalog"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Kan ikke kopiere katalog over katalog"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Målfilen eksisterer"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kan ikke kopiere katalog rekursivt"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Kan ikke kopiere spesiell fil"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Ugyldig verdi oppgitt for symbolsk lenke"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Papirkurv er ikke støttet"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Filnavn kan ikke inneholde «%c»"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volumet implementerer ikke montering"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Ingen program registrert for å håndtere denne filen"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator er lukket"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Filenumerator har utestående operasjon"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Filenumerator er allerede lukket"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fil"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Filen med navnet på ikonet"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Kan ikke håndtere versjon %d av GFileIcon-koding"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Feil inndata for GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Strømmen støtter ikke query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Søking ikke støttet på strøm"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Avkorting er ikke tillatt på en inndatastrøm"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Avkorting er ikke støttet på strømmen"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Feil antall tegn (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Ingen type for klassenavn %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Type %s implementerer ikke GIcon-grensesnittet"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Type %s er er ikke en klasse"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Feil versjonsnummer: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Type %s implementerer ikke from_tokens() på GIcon-grensesnittet"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Kan ikke håndtere oppgitt versjon i ikon-koding"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Inndatastrøm implementerer ikke lesing"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Strømmen har utestående operasjoner"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Klarte ikke å finne forvalgt type overvåker for lokal katalog"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ugyldig filnavn %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Feil under lesing av informasjon om filsystem: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Kan ikke endre navn på rotkatalogen"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Feil under endring av navn på fil: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Kan ikke endre navn på filen. Filnavnet eksisterer allerede"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ugyldig filnavn"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Feil under åpning av fil: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kan ikke åpne mappe"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Feil ved fjerning av fil: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Feil ved plassering av fil i papirkurv: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Kan ikke legge katalog %s i papirkurven: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Kan ikke finne toppnivå for papirkurv"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Kan ikke finne eller opprette mappe for papirkurv"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Kan ikke opprette informasjonsfil for papirkurv: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Kan ikke legge fil i papirkurven: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Feil under oppretting av katalog: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Feil ved oppretting av symbolsk lenke: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Feil under flytting av fil: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Kan ikke flytte katalog over katalog"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Oppretting av sikkerhetskopi feilet"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Feil under fjerning av målfil: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Flytting mellom monteringspunkter er ikke støttet"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attributtverdi må ikke være NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Ugyldig type attributt (streng forventet)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Ugyldig navn på utvidet attributt"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Feil under setting av utvidet attributt «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Feil ved henting av informasjon om fil «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ugyldig koding)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Feil ved henting av informasjon om fildeskriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Ugyldig type attributt (uint32 forventet)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Ugyldig type attributt (uint64 forventet)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Ugyldig type attributt (byte-streng forventet)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Feil ved setting av rettigheter: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Feil ved setting av eier: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolsk lenke kan ikke være NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Feil ved setting av symbolsk lenke: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Feil ved setting av symbolsk lenke: filen er ikke en symbolsk lenke"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux-kontekst kan ikke være NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Feil ved setting av SELinux-kontekst: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux er ikke slått på på dette systemet"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Støtter ikke å sette attributt %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Feil under lesing fra fil: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Feil under søking i fil: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Feil under lukking av fil: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Kan ikke finne forvalgt lokal filovervåkingstype"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Feil under skriving til fil: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Feil ved fjerning av gammel sikkerhetskopi av lenke: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Feil under oppretting av sikkerhetskopi: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Feil ved endring av navn på midlertidig fil: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Feil under avkorting av fil: «%s»"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Feil under åpning av fil «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Målfilen er en katalog"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Målfilen er ikke en vanlig fil"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Filen ble endret eksternt"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Feil ved fjerning av gammel fil: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Ugyldig GSeekType oppgitt"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ugyldig søkeforespørsel"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Kan ikke avkorte GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Maksimumsgrense for data er nådd"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Kan ikke endre størrelse på utdatastrøm for minne"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Klarte ikke å endre størrelse på utdatastrøm for minne"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "monteringspunktet implementerer ikke avmontering"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "montering implementerer ikke utløsing"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "montering implementerer ikke remontering"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "montering implementerer ikke gjetting av innholdstype"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "montering implementerer ikke synkron gjetting av innholdstype"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Ut-strømmen implementerer ikke skriving"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Kildestrømmen er allerede lukket"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "navn"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Navn på ikonet"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "navn"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "En tabell som inneholder navn på ikoner"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "bruk forvalgte reserveverdier"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Om forvalgte verdier som finnes ved å avkorte navnet ved «-»-tegn skal "
+"brukes. Overser navn etter første deletegn hvis flere navn oppgis."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Kan ikke håndtere versjon %d av GThemedIcon-koding"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Fildeskriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Fildeskriptor det skal leses fra"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Lukk fildeskriptor"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Om fildeskriptoren skal lukkes når strømmen lukkes"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Feil under lesing fra unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Feil ved lukking av unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filsystemrot"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Fildeskriptor det skal skrives til"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Feil ved skriving til unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volumet implementerer ikke utløsing"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Kan ikke finne program"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Feil ved oppstart av program: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIer er ikke støttet"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "endringer i assosiasjon er ikke støttet på win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Oppretting av assosiasjon er ikke støttet på win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ikke skjul oppføringer"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "bruk langt listeformat"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FIL...]"
diff --git a/po/ne.po b/po/ne.po
new file mode 100644
index 0000000..7180cf7
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,1846 @@
+# translation of glib.HEAD.ne.po to Nepali
+# This file is distributed under the same license as the glib package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Jyotshna Shrestha <shresthajyo@hotmail.com>, 2005.
+# Ganesh Ghimire <gghimire@gmail.com>, 2005.
+# Shiva  Pokharel <pokharelshiva@hotmail.com>, 2005.
+# Kapil Timilsina <lipak21@gmail.com>, 2005.
+# Jaydeep Bhusal <zaydeep@hotmail.com>, 2005.
+# Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.glib-2-10.ne\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2006-04-27 00:00+0545\n"
+"Last-Translator: Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10.2\n"
+"Plural-Forms: nplurals=2;plural=(n!=1)\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "विजोड क्यारेक्टर '%s' ले,'%s' तत्वको गुण नाम '%s' पछि अपेक्षा गरिएको एउटा '=' "
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "वैध कुञ्जी फाइल डेटा डाइरेक्टरीहरूमा फेला परेन"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "सांकेतिक सम्बन्ध '%s' पढ्न असफल: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "क्यारेक्टर सेट '%s' बाट '%s' मा रूपान्तरण समर्थित छैन"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' बाट '%s'मा रूपान्तरणकर्ता खोल्न सकेन"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "रूपान्तरण आगतमा अवैध बाइट अनुक्रम"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "रूपान्तरण अवधिमा त्रुटि: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "आगतको अन्त्यमा आंशिक क्यारेक्टर"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "फलब्याक '%s' बाट कोड सेट'%s' मा रूपान्तरण गर्न सक्दैन"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' \"file\" योजना प्रयोग गर्ने एउटा निश्चित URI होइन"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "स्थानीय फाइल URI '%s' मा एउटा '#' समावेश नहुनसक्छ"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' अवैध छ "
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s' को होस्टनाम अवैध छ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' मा अवैध रूपमा निस्किएका क्यारेक्टरहरू देखिन्छन्"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "बाटोनाम '%s' निश्चित मार्ग होइन"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "अवैध होस्टनाम "
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "डाइरेक्टरी '%s' खोल्दा त्रुटि: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "फाइल \"%2$s\" पढ्न %1$lu बाईट्स बाँडफाँड गर्न सकिएन"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' फाइलबाट पढ्न असफल : %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s'फाइल खोल्न असफल : %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' फाइलको विशेषता पाउन असफल: fstat() असफल भयो: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' फाइल खोल्न असफल : fdopen() खोल्न असफल : %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "फाइल '%s लाई '%s' मा पुन: नामकरण गर्न असफल:g_rename() असफल: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' फाइल सिर्जना गर्न असफल: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "लेख्नका लागि '%s' फाइल खोल्न असफल : fdopen() असफल : %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' फाइल लेख्न असफल : fलेख्न() असफल : %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' फाइल लेख्न असफल : fलेख्न() असफल : %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' फाइल लेख्न असफल : fलेख्न() असफल : %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' फाइल बन्द गर्न असफल : fबन्द गर्न()  असफल : %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "अवस्थित फाइल '%s' हटाउन सकिएन:g_unlink() असफल: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s ' टेम्प्लेट अवैध, एउटा '%s' सम्मिलित हुनु हुँदैन"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' टेम्प्लेट XXXXXX संगसमाप्त हुँदैन"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "सांकेतिक सम्बन्ध '%s' पढ्न असफल: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "सांकेतिक सम्बन्ध समर्थन गरिएन"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "`%s' बाट `%s' मा रूपान्तरणकर्ता खोल्न सकेन : %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string मा परीक्षण पढाई गर्न सक्दैन"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "पढ्ने बफरमा छाडेको अरूपान्तरित डेटा "
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "आंशिक-क्यारेक्टरमा माध्यम टुङ्गिन्छ"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end मा परीक्षण पढाई गर्न सक्दैन"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' फाइल खोल्न असफल : खोल्न() असफल : %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' फाइल नक्सा असफल : m नक्सा() असफल : %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "लाइन %d क्यारेक्टर %d मा त्रुटि: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "लाइन %d मा त्रुटि: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"खाली अस्तित्व '&;' देखियो; वैध अस्तित्वहरू निम्न हुन : &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"अस्तित्व नामको सुरुमा क्यारेक्टर '%s' वैध हुँदैन ; & क्यारेक्टरले एउटा अस्तित्वा सुरु गर्दछ ; "
+"यदि यो एम्परस्यान्ड भएमा एउटा अस्तित्वको रूपमा मानिँदैन,यसलाई &amp; को रूपमा परित्याग "
+"गर्नुहोस्"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "अस्तित्व नाम भित्रको क्यारेक्टर '%s' वैध छैन"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "अस्तित्व नाम '%s' ज्ञात होइन"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"अस्तित्व अर्धविराममा सकिएन; तपाईँले धेरैजसो ऐम्परसेण्ड क्यारेक्टरबाट एउटा अस्तित्व सुरु गर्नको "
+"लागि प्रयास नगरिकन सुरु गर्नुभयो - &amp; को रूपमा ऐम्परसेंन्ड निकास गर्नुहोस्"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-*s' पद वर्णन गर्न सकिएन, जुन एउटा क्यारेक्टर सन्दर्भ (उदाहरणका लागि; &#234) हुनु "
+"पर्थ्यो - संभवत अङ्क ज्यादै ठूलो छ"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "क्यारेक्टर सन्दर्भ '%-.*s' ले स्वीकृत क्यारेक्टरको सङ्केतन गर्दैन "
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "खाली क्यारेक्टर सन्दर्भ, &#454 जस्तो अङ्क समाहित हुनुपर्छ"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"क्यारेक्टर सन्दर्भ अर्धविराममा सकिएन;तपाईँले धेरैजसो ऐम्परसेण्ड क्यारेक्टरबाट एउटा अस्तित्व सुरु "
+"गर्नका लागि प्रयास नगरिकन सुरु गर्नुभयो - &amp; को रूपमा ऐम्परसेंन्ड निकास गर्नुहोस्"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "अधुरो अस्तित्व सन्दर्भ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "अधुरो क्यारेक्टर सन्दर्भ"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "अवैध UTF-8 सङ्केतन गरिएको पाठ"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "अवैध UTF-8 सङ्केतन गरिएको पाठ"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "अवैध UTF-8 सङ्केतन गरिएको पाठ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "कागजात एउटा तत्व बाट सुरु हुनैपर्छ (जस्तै: <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"एउटा '<' क्यारेक्टर पछ्याउन '%s' वैधानिक क्यारेक्टर होइन; यस्ले एउटा तत्व नाम प्रारम्भ "
+"नगर्न सक्छ"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"बिजोड क्यारेक्टर '%s', एउटा अपेक्षा गरिएको क्यारेक्टर '>', '%s' को सुरु ट्याग अन्त्य "
+"गर्नलाइ"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "विजोड क्यारेक्टर '%s' ले,'%s' तत्वको गुण नाम '%s' पछि अपेक्षा गरिएको एउटा '=' "
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"बिजोड क्यारेक्टर '%s', तत्व '%s' को सुरु ट्याग अन्त्य गर्नलाई अपेक्षा गरिएको एउटा '>' वा "
+"'/'  क्यारेक्टर, वा वैकल्पिक रूपमा एउटा विशेषता ,सायद तपाईँले एउटा विशेषता नाममा अवैध "
+"क्यारेक्टर प्रयोग गर्नुभयो"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"बिजोड क्यारेक्टर '%s',तत्व '%s' को '%s' विशेषताका लागि मान दिइएको बेला बराबर चिन्ह "
+"पछि खुला उद्धरण चिन्हको अपेक्षा गरेको हुन्छ।"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' एउटा वैध क्यारेक्टर होइन निम्न क्यारेक्टरहरू '</'; '%s' एउटा तत्व नाम प्रारम्भ नगर्न "
+"सक्छन"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"बन्द तत्व नाम '%s' को पछि लाग्ने '%s' मान्य क्यारेक्टर होइन; अनुमति पाएको क्यारेक्टर '>' "
+"हो।"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "तत्व '%s' बन्द थियो, हाल कुनै तत्व खुलेको छैन"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "तत्व '%s' बन्द थियो, तर हाल खुला तत्व '%s' हो"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "कागजात खाली छ वा सेतो खाली स्थान मात्र राखिएको छ"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "एउटा खुल्ला कोण कोष्ठ पछि '<' कागजात अनपेक्षित रूपले समाप्त भयो।"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "'%s' खोलिएको अन्तिम तत्व संगकागजात अप्रत्याशित रूपले समाप्त भयो।"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"कागजपत्र अप्रत्याशित रूपले समाप्त भयो, ट्याग <%s/> को अन्तमा बन्द कोण कोष्ठको अपेक्षा "
+"गर्दछ।"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "तत्व नाम भित्र कागजात अपेक्षित रूपले समाप्त भयो।"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "विशेषता नाम भित्र कागजात अपेक्षित रूपले समाप्त भयो।"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "तत्व-खुल्ला ट्याग भित्र कागजात अपेक्षित रूपले समाप्त भयो।"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"बिशेषता नाम पछ्याउन बराबर चिन्ह पछि कागजातपत्र अप्रत्याशित रूपले समाप्त भयो; गुण मान "
+"होइन"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "गुण मान भित्र भएको बेला कागजपत्र अप्रत्याशित रूपले समाप्त भयो"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "तत्व '%s' का लागि बन्द ट्याग भित्र कागजात अनपेक्षित रूपले समाप्त भयो।"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "एउटा टिप्पणी वा प्रक्रिया निर्देशन भित्र कागजपत्र अप्रत्याशित रूपले समाप्त भयो"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "आंशिक-क्यारेक्टरमा माध्यम टुङ्गिन्छ"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "रूपान्तरण आगतमा अवैध बाइट अनुक्रम"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "अधुरो क्यारेक्टर सन्दर्भ"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "अधुरो क्यारेक्टर सन्दर्भ"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "अधुरो क्यारेक्टर सन्दर्भ"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "सांकेतिक सम्बन्ध समर्थन गरिएन"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "लाइन %d क्यारेक्टर %d मा त्रुटि: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "अधुरो अस्तित्व सन्दर्भ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "उद्धरण गरिएको पाठ उद्धरण चिन्ह बाट सुरु हुँदैन"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "आदेश रेखामा वा अरू कवच-उद्धरण गरिएको पाठमा नमिलेको उद्धरण चिन्ह"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "पाठ चाँही '\\' क्यारेक्टर पछि मात्र समाप्त भयो। (पाठ '%s' थियो)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c का लागि मिल्ने उद्धरण फेला पर्नु अगाडि पाठ समाप्त भयो। (पाठ '%s' थियो)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "पाठ खाली थियो (वा सेतो खाली स्थान मात्र समावेश थियो)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "शाखा प्रक्रियाबाट डेटा पढ्न असफल भयो"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "शाखा प्रक्रिया (%s)सँग कुराकानीका लागि पाइप सिर्जना गर्न असफल"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "शाखा प्रक्रिया (%s)बाट पढ्न असफल"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "डाइरेक्टरी '%s' (%s) मा परिवर्तन गर्न असफल"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "शाखा प्रक्रिया (%s) कार्यान्वयन गर्न असफल"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "अवैध कार्यक्रम नाम : %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr " अार्गुमेन्ट भेक्टरको %d मा अवैध स्ट्रीङ: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "वातावरणमा अवैध स्ट्रीङ: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "अवैध कार्य डाइरेक्टरी : %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "मद्दत गर्ने कार्यक्रम कार्यान्वयन गर्न असफल (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "शाखा प्रक्रियाबाट डेटा पढ्दा g_io_channel_win32_poll() अनपेक्षित त्रुटि"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "शाखा प्रक्रिया (%s) बाट डेटा पढ्न असफल"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "शाखा प्रक्रिया (%s) बाट डेटा पढ्दा () चयनमा अनपेक्षित त्रुटि"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() (%s) मा अनपेक्षित त्रुटि"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) फोर्क गर्न असफल"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "शाखा प्रक्रिया \"%s\" (%s) कार्यान्वयन गर्न असफल"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "शाखा प्रक्रिया (%s) को निर्गत वा आगत पुन:निर्देशिन गर्न असफल"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "शाखा प्रक्रिया (%s) फोर्क गर्न असफल"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "शाखा प्रक्रिया \"%s\" कार्यान्वयन गर्दा अज्ञात त्रुटि"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "शाखा पिड पाईप (%s) बाट प्रशस्त डेटाहरू पढ्न असफल"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 का लागि क्यारेक्टर दायरा भन्दा बाहिर छ"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "रूपान्तरण आगतमा अवैध अनुक्रम"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 का लागि क्यारेक्टर दायरा भन्दा बाहिर छ"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "प्रयोग:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "मद्दत विकल्पहरू:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "मद्दत विकल्पहरू देखाउनुहोस्"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "सबै मद्दत विकल्पहरू देखाउनुहोस्"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "अनुप्रयोग विकल्पहरू:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%s का लागि इन्टेजर मान %s को पद वर्णन गर्न सक्दैन"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "इन्टेजर मान '%s' %s का लागि दायरा भन्दा बाहिर छ"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%s का लागि इन्टेजर मान %s को पद वर्णन गर्न सक्दैन"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "इन्टेजर मान '%s' %s का लागि दायरा भन्दा बाहिर छ"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "पद वर्णन विकल्पमा त्रुटि %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s का छुटेको तर्क"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "अज्ञात विकल्प %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "वैध कुञ्जी फाइल डेटा डाइरेक्टरीहरूमा फेला परेन"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "नियमित फाइल होइन"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "फाइल खाली छ"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "कुञ्जी फाइलमा पङ्गति '%s' समावेश छ जुन कुञ्जी-मान जोडि, समूह, वा टिप्पणी होइन।"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "अवैध कार्यक्रम नाम : %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "कुञ्जी फाइल एउटा समूहबाट सुरु हुँदैन"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "अवैध कार्यक्रम नाम : %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "कुञ्जी फाइलमा समर्थन प्राप्त नभएको सङ्केतन '%s' समावेश छ।"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "कुञ्जी फाइलसंगसमूह '%s' छैन"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "कुञ्जी फाइलसंगकुञ्जी '%s' हुँदैन"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "कुञ्जी फाइलमा मान '%s'सँगै कुञ्जी '%s' समावेश छ जुन UTF-8 होइन"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "कुञ्जी फाइलमा कुञ्जी '%s' समावेश छ जसको मानलाई व्याख्या गर्न सकिँदैन।"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"कुञ्जी फाइलमा समूह '%s' मा कुञ्जी '%s' समावेश छ जसको मानलाई व्याख्या गर्न सकिँदैन।"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "कुञ्जी फाइलमा समूह '%s' मा कुञ्जी '%s' हुँदैन"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "कुञ्जी फाइलमा पङ्गतिको अन्त्यमा निकास क्यारेक्टर समावेश छ।"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "कुञ्जी फाइलमा अवैध निकास अनुक्रम '%s' समावेस छ।"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "मान '%s' लाई सङ्ख्याको रूपमा व्याख्या गर्न सकिँदैन"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "इन्टेजर मान '%s' क्षेत्र भन्दा बाहिर छ"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "मान '%s' लाई सङ्ख्याको रूपमा व्याख्या गर्न सकिँदैन"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "मान '%s' एउटा बुलिएनको रूपमा व्याख्या गर्न सकिँदैन।"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "अज्ञात विकल्प %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "सांकेतिक सम्बन्ध समर्थन गरिएन"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "सांकेतिक सम्बन्ध समर्थन गरिएन"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "URI '%s' को होस्टनाम अवैध छ"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "अवैध कार्यक्रम नाम : %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "अवैध होस्टनाम "
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "'%s' फाइल सिर्जना गर्न असफल: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "'%s' फाइल सिर्जना गर्न असफल: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "'%s' फाइल सिर्जना गर्न असफल: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "डाइरेक्टरी '%s' खोल्दा त्रुटि: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "पद वर्णन विकल्पमा त्रुटि %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "विशेषता नाम भित्र कागजात अपेक्षित रूपले समाप्त भयो।"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "डाइरेक्टरी '%s' खोल्दा त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "रूपान्तरण अवधिमा त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "रूपान्तरण अवधिमा त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "लाइन %d मा त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "रूपान्तरण अवधिमा त्रुटि: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "सांकेतिक सम्बन्ध समर्थन गरिएन"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "पद वर्णन विकल्पमा त्रुटि %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "नियमित फाइल होइन"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "अवैध कार्यक्रम नाम : %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "URI '%s' को होस्टनाम अवैध छ"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "'%s' फाइल पढ्दा त्रुटि : %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "लाइन %d मा त्रुटि: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "पद वर्णन विकल्पमा त्रुटि %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "पद वर्णन विकल्पमा त्रुटि %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "सांकेतिक सम्बन्ध समर्थन गरिएन"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPTION...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "पद वर्णन विकल्पमा त्रुटि %s"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..a693117
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1948 @@
+# Dutch translation for glib
+#
+# This file is distributed under the same license as the glib package.
+#
+# Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> 2001
+# Tino Meinen <a.t.meinen@chello.nl> 2002–2008.
+# Wouter Bolsterlee <wbolster@gnome.org>, 2008–2009
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-23 14:07+0100\n"
+"Last-Translator: Wouter Bolsterlee <wbolster@gnome.org>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Onverwacht attribuut ‘%s’ voor element ‘%s’"
+
+# aangetroffen hier mooier dan gevonden
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attribuut ‘%s’ van element ‘%s’ is niet aangetroffen"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Onverwachte tag ‘%s’, tag ‘%s’ werd verwacht"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Onverwachte tag ‘%s’ binnen ‘%s’"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Er is geen geldig bladwijzerbestand gevonden in de datamappen"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Er bestaat al een bladwijzer voor de URI ‘%s’"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Geen bladwijzer gevonden voor URI ‘%s’"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Er is geen MIME-type gedefinieerd in de bladwijzer voor URI ‘%s’"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Er is geen privé-vlag gedefinieerd in de bladwijzer voor URI ‘%s’"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Er zijn geen groepen ingesteld in de bladwijzer voor URI ‘%s’"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Er is geen programma genaamd ‘%s’ die een bladwijzer geregistreerd heeft "
+"voor ‘%s’"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Exec-regel ‘%s’ kon niet worden verwerkt met URI ‘%s’"
+
+# is niet mogelijk/wordt niet ondersteund
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Het omzetten van tekenset ‘%s’ naar ‘%s’ is niet mogelijk"
+
+# conversieprogramma/omzet-programma/omzetter
+# kon converteerder van %s naar %s niet openen
+# Openen van converteerder van '%s' naar '%s' mislukt
+# Openen van het programma voor het omzetten van s naar s is mislukt
+# (tekenreeks komt verderop nog een keer voor)
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+"Kon het conversieprogramma voor het omzetten van ‘%s’ naar ‘%s’ niet openen"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ongeldige bytereeks in conversie-invoer"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Fout tijdens omzetten: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Onvolledige tekenreeks aan het eind van de invoer"
+
+# wordt hier niet character set ipv codeset bedoeld?
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Kan vanaf codeverzameling ‘%s’ niet terugvallen op ‘%s’"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"De URI ‘%s’ is geen absolute URI die gebruik maakt van het schema ‘bestand’"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "De lokale bestands-URI ‘%s’ mag het teken ‘#’ niet bevatten"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "De URI ‘%s’ is ongeldig"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "De hostnaam van de URI ‘%s’ is ongeldig"
+
+# controle-tekens/ontsnappingstekens/sturingstekens
+# betere vertaling?
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "De URI ‘%s’ bevat tekens met een foutief controleteken"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Het pad ‘%s’ is geen absoluut pad"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ongeldige hostnaam"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Fout bij openen van map ‘%s’: %s"
+
+# Allocatie van %lu bytes om bestand "%s" te lezen is mislukt<
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Kon geen %lu byte geheugenruimte reserveren om bestand ‘%s’ te lezen"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Fout bij lezen van bestand ‘%s’: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Bestand ‘%s’ is te groot"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Lezen uit bestand ‘%s’ is mislukt: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Openen van bestand ‘%s’ is mislukt: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Opvragen gegevens van bestand ‘%s’ is mislukt: fstat() is mislukt: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Openen van bestand ‘%s’ is mislukt: fdopen() is mislukt: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Hernoemen van bestand ‘%s’ naar ‘%s’ is mislukt: g_rename() is mislukt: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Aanmaken van bestand ‘%s’ is mislukt: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Openen van bestand ‘%s’ voor schrijven is mislukt: fdopen() is mislukt: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Schrijven van bestand ‘%s’ is mislukt: fwrite() is mislukt: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Schrijven van bestand ‘%s’ is mislukt: fwrite() is mislukt: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Schrijven van bestand ‘%s’ is mislukt: fwrite() is mislukt: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Sluiten van bestand ‘%s’ is mislukt: fclose() is mislukt: %s"
+
+# bestaand bestand is een beetje dubbelop
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Bestand ‘%s’ kon niet worden verwijderd: g_unlink() is mislukt: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Sjabloon ‘%s’ is ongeldig, het zou geen ‘%s’ moeten bevatten"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Sjabloon ‘%s’ bevat geen XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Lezen van symbolische verwijzing ‘%s’ is mislukt: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolische verwijzingen zijn niet mogelijk"
+
+# Openen van converteerder van '%s' naar '%s' mislukt: %s
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+"Kon het conversieprogramma voor omzetten van ‘%s’ naar ‘%s’ niet openen: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Een kale ('raw') leesoperatie is niet mogelijk in "
+"g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Restant aan ongeconverteerde data in de leesbuffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanaal eindigt in een gedeeltelijk teken"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Een kale ('raw') leesoperatie is niet mogelijk in g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Openen van bestand ‘%s’ is mislukt: open() is mislukt: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Openen van bestand ‘%s’ is mislukt: mmap() is mislukt: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Fout in regel %d teken %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Fout in regel %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Lege entiteit ‘&;’ gevonden;  geldige entiteiten zijn: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Teken ‘%s’ is niet geldig aan het begin van een entiteitnaam; het &-teken "
+"begint een entiteit; indien dat niet de bedoeling is, gebruik dan &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Het teken ‘%s’ is niet geldig in een entiteitnaam"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entiteitnaam ‘%s’ is niet bekend"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"De entiteit eindigde niet op een puntkomma; waarschijnlijk heeft u een "
+"ampersand-teken gebruikt zonder daarmee een entiteit te willen beginnen - "
+"gebruik in plaats daarvan &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Verwerken van ‘%-.*s’ is mislukt, hetgeen een getal in een tekenreferentie "
+"zou moeten zijn (bijvoorbeeld &#234;) - misschien is het getal te groot"
+
+# niet geoorloofd/toegestaan/ongeoorloofd
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Tekenreferentie ‘%-.*s’ staat niet voor een geoorloofd teken"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Lege tekenreferentie; ze zou een getal moeten bevatten, zoals &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Tekenreferentie eindigt niet op een puntkomma; waarschijnlijk heeft u een "
+"ampersand-teken gebruikt zonder daarmee een entiteit te willen beginnen - "
+"gebruik in plaats daarvan &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Onbeëindigde entiteitreferentie"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Onbeëindigde tekenreferentie"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ongeldige UTF-8-gecodeerde tekst - de reeks is te lang"
+
+# het is geen startteken/er is geen startteken
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ongeldige UTF-8-gecodeerde tekst - geen startteken"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ongeldige UTF-8-gecodeerde tekst - niet geldig ‘%s’"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Het document moet beginnen met een element (bijv. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"‘%s’ is geen geldig teken na ‘<’; een elementnaam mag er niet mee beginnen"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Onverwacht teken ‘%s’, er werd een ‘>’-teken verwacht om de ledig-element-"
+"tag ‘%s’ af te sluiten"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Onverwacht teken ‘%s’, er werd een ‘=’ verwacht na de attribuutnaam ‘%s’ van "
+"element ‘%s’"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Onverwacht teken ‘%s’, er werd een ‘>’- of een ‘/’-teken verwacht om de "
+"start-tag van element ‘%s’ af te sluiten, of eventueel een attribuut; "
+"misschien heeft u ongeldige tekens gebruikt in een attribuutnaam"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Onverwacht teken ‘%s’, er werd een ‘\"’-teken verwacht na het ‘=’-teken bij "
+"de attribuutwaarde van ‘%s’ in element ‘%s’"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"‘%s’ is geen geldig teken na ‘</’; een elementnaam mag niet met ‘%s’ beginnen"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"‘%s’ is geen geldig teken na de elementnaam ‘%s’ in de afluitingstag; het "
+"teken dat toegestaan is is ‘>’ "
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element ‘%s’ is afgesloten, er is nu geen enkel element open"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element ‘%s’ is afgesloten, maar op dit moment is element ‘%s’ open"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Het document was leeg of bevatte slechts lege ruimte"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Het document eindigde onverwacht na een openingshaakje: ‘<’"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Het document eindigde onverwacht met niet-afgesloten elementen - ‘%s’ is het "
+"laatstgeopende element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Het document eindigde onverwacht, er werd een sluithaakje (‘>’) verwacht "
+"voor de tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Het document eindigde onverwacht in een elementnaam"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Het document eindigde onverwacht in een attribuutnaam"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Het document eindigde onverwacht in een element-openingstag."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Het document eindigde onverwacht na een ‘=’-teken dat op een attribuutnaam "
+"volgde; geen attribuutwaarde"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Het document eindigde onverwacht in een attribuutwaarde"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Het document eindigde onverwacht in een een afsluitingstag voor element ‘%s’"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Het document eindigde onverwacht in commentaar of een bewerkingsinstructie"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "beschadigd object"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "interne fout of beschadigd object"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "onvoldoende geheugen"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "limiet voor backtracking bereikt"
+
+# voor deelzoeken
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "het patroon bevat niet-ondersteunde tekens"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "interne fout"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "achterwaartse referenties als condities zijn niet mogelijk"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "recursielimiet bereikt"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "limiet voor lege substrings bereikt"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ongeldige combinatie van nieuwe-regelvlaggen"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "onbekende fout"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ aan het einde van het patroon"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c aan het einde van het patroon"
+
+# onbekend/niet herkend
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "onbekend teken volgt na \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"tekens die hoofd,- en kleine letters wijzigen zijn hier niet toegestaan"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "getallen in verkeerde volgorde in {} waardegever"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "getal te groot in {} waardegever"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "sluithaakje ] ontbreekt bij lettertekenklasse"
+
+# controleteken/sturingsteken/stuurcode/escape-teken
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ongelde stuurcode in lettertekenklasse"
+
+# [Z-a]
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "bereik in verkeerde volgorde in lettertekenklasse"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "niets te herhalen"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "onbekend teken na (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "onbekend teken na (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "onbekend teken na (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX benoemde klassen zijn alleen ondersteund binnen een klasse"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "ontbrekend sluithaakje: )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") zonder openingshaakje: ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R of (?[+-]cijfers moeten gevolgd worden door )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "verwijzing naar een niet-bestaand subpatroon"
+
+# opmerking/commentaar
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "ontbrekend sluithaakje ) na commentaar"
+
+# te groot/te lang
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "reguliere expressie te groot"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "kon onvoldoende geheugen krijgen"
+
+# terugkijkbewering
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "‘lookbehind assertion’ heeft geen vaste lengte"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "foutief getal of naam na (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "voorwaardelijke groep bevat meer dan twee vertakkingen"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "bewering verwacht na (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "onbekende POSIX-klassenaam"
+
+# collate=vergelijken/ordenen
+# POSIX collating zorgt bijv. dat de Spaanse ll, na de l komt en voor de m.
+# het betreft het beschouwen van meerdere tekens als 1 teken
+# samengesteld teken
+# geordende elementen/samengestelde elementen
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-samengestelde elementen worden niet ondersteund"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "lettertekenwaarde in de reeks \\x{...} is te groot"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ongeldige voorwaarde (?(0)"
+
+# terugkijkbewering
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C niet toegestaan in ‘lookbehind assertion’"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "recursieve aanroep zou oneindig kunnen doorlopen"
+
+# afsluiter/afsluitteken
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "afsluitteken ontbreekt in naam subpatroon"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "twee genoemde subpatronen hebben dezelfde naam"
+
+# onjuist samengesteld/gevormd
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "onjuist gevormde \\P of \\p reeks"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "onbekende eigenschapnaam na \\P of \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "naam van subpatroon is te lang (maximaal 32 tekens)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "teveel genoemde subpatronen (maximaal 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "octale waarde is groter dan \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-groep bevat meer dan één vertakking"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "herhalen van een DEFINE-groep is niet toegestaan"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inconsistente NEWLINE-opties"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g wordt niet gevolgd door een naam tussen haakjes, of getal niet gelijk "
+"aan nul, optioneel tussen haakjes"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "onverwachte herhaling"
+
+# te weinig geheugen voor code/code overstroomt/
+# programmacode loopt over
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "overstroming programmacode"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "compile-werkruimte is overlopen"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "eerder nagekeken gerefereerd subpatroon niet gevonden"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Fout bij reguliere expressie %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-bibliotheek is gecompileerd zonder ondersteuning voor UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+"PCRE-bibliotheek is gecompileerd zonder ondersteuning voor UTF8-eigenschappen"
+
+# opbouwen/compileren
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Fout bij compileren van reguliere expressie %s op teken %d:%s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Fout bij optimaliseren van reguliere expressie %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimaal getal of ‘}’ verwacht"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimaal getal verwacht"
+
+# tekort/ontbreekt/te weinig
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "‘<’ ontbreekt in verwijzing"
+
+# symbolische verwijzing
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "onafgemaakte verwijzing"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "verwijzing heeft nullengte"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "cijfer verwacht"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ongeldige verwijzing"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "extra afsluiting ‘\\’"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "onbekende escape-reeks"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Fout bij inlezen vervangende tekst ‘%s’ op teken %lu:%s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Aangehaalde tekst begint niet met een ‘\"’-teken"
+
+# solitair "-teken/ongebalanceerd
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Solitair ‘\"’-teken in opdrachtregel of andere shell-aangehaalde tekst"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Tekst eindigde na een ‘\\’-teken (de tekst was ‘%s’)."
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"De tekst eindigde voordat een afsluitend aanhalingsteken was gevonden voor %"
+"c (de tekst was ‘%s’)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "De tekst was leeg (of bevatte slechts lege ruimte)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Lezen van data van dochterproces is mislukt"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Aanmaken van pijplijn voor het communiceren met dochterproces is mislukt (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Lezen van pijplijn naar dochter (%s) is mislukt"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Wijzigen naar map ‘%s’ is mislukt (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Uitvoeren van dochterproces is mislukt (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ongeldige programmanaam: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Ongeldige tekenreeks in argumentvector bij %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ongeldige tekenreeks in omgeving: %s"
+
+# werkmap/huidige map
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ongeldige werkmap: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Uitvoeren van het hulpprogramma (%s) is mislukt"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Onverwachte fout in g_io_channel_win32_poll() bij het lezen van data van een "
+"dochterproces"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Lezen van data van dochterproces is mislukt (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Onverwachte fout in select() bij het lezen van data van een dochterproces (%"
+"s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Onverwachte fout in waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "De fork is mislukt (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Uitvoeren van dochterproces ‘%s’ is mislukt (%s)"
+
+# was eerst: herleiden
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"Doorsluizen van invoer of uitvoer van een dochterproces is mislukt (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Het forken van een dochterproces is mislukt (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Onbekende fout bij het uitvoeren van dochterproces ‘%s’"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Lezen van voldoende data van pijplijn van dochter-pid is mislukt (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Teken valt buiten het bereik van UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ongeldige reeks in conversieinvoer"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Teken valt buiten het bereik van UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Gebruik:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTIE...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Hulpopties:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Deze hulptekst tonen"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Alle hulpteksten tonen"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Programmaopties:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Kan het geheel getal ‘%s’ voor %s niet verwerken"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Het geheel getal ‘%s’ voor %s valt buiten het bereik"
+
+# integer-double
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Kan het lange geheel getal ‘%s’ voor %s niet verwerken"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Het lange geheel getal ‘%s’ voor %s valt buiten het bereik"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Fout bij verwerken van optie %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Ontbrekend argument voor %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Onbekende optie %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Er kon geen geldig sleutelbestand gevonden worden in de zoekmappen"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Geen gewoon bestand"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Bestand is leeg"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Sleutelbestand bevat regel ‘%s’ wat geen sleutelwaarde-paar, groep of "
+"opmerking is."
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ongeldige groepsnaam: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Het sleutelbestand start niet met een groep"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ongeldige sleutelnaam: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Het sleutelbestand bevat de niet-ondersteunde tekenset ‘%s’"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Het sleutelbestand bevat geen groep ‘%s’"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Het sleutelbestand bevat geen sleutel ‘%s’"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Het sleutelbestand bevat sleutel ‘%s’ met waarde ‘%s’ wat geen UTF-8 is"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Het sleutelbestand bevat sleutel ‘%s’ die een waarde heeft die niet "
+"geïnterpreteerd kan worden."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Het sleutelbestand bevat sleutel ‘%s’ in groep ‘%s’ die een waarde heeft die "
+"niet geïnterpreteerd kan worden."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Het sleutelbestand bevat geen sleutel ‘%s’ in groep ‘%s’"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+"Het sleutelbestand bevat een ontsnappingsteken aan het einde van een regel"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Het sleutelbestand bevat ongeldige ontsnappingstekens ‘%s’"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "De waarde ‘%s’ kan niet geïnterpreteerd worden als een getal."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Het geheel getal ‘%s’ valt buiten het bereik"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+"De waarde ‘%s’ kan niet geïnterpreteerd worden als een getal van het type "
+"float."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "De waarde ‘%s’ kan niet geïnterpreteerd worden als een boolese."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "De telwaarde die aan %s werd gegeven is te groot"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "De stroom is al gesloten"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "De bewerking werd afgebroken"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Onbekend type"
+
+# bestandssoort/bestandstype
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "bestandstype %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "type %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Voortijdig einde aan gegevensstroom"
+
+# naamloos/zonder naam/onbenoemd
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Zonder naam"
+
+# bureaubladbestand/desktopbestand
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktopbestand bevat geen Exec-veld"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Kan geen terminalvenster vinden voor het uitvoeren van het programma"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kan persoonlijke programmaconfiguratiemap %s niet aanmaken: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kan persoonlijke MIME-configuratiemap %s niet aanmaken: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kan desktopbestand %s niet aanmaken"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Zelfgemaakte definitie voor %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "dit station begrijpt de opdracht ‘uitwerpen’ niet"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "dit station kan niet onderzocht worden op de aanwezigheid van media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Kan versie %d van GEmblem-codering niet verwerken"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Onjuist aantal tokens (%d) in GEmblem-codering"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Kan versie %d van GEmblemedIcon-codering niet verwerken"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Onjuist aantal tokens (%d) in GEmblemedIcon-codering"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblem voor GEmblemedIcon verwacht"
+
+# niet ondersteund/niet mogelijk
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "De bewerking is niet mogelijk"
+
+# de koppeling hiervan bestaat niet/het koppelpunt hiervan bestaat niet
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Het koppelpunt hiervan bestaat niet"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Kan niet over map kopiëren"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Kan map niet over map kopiëren"
+
+# er is al een bestand met die naam?
+# Het doelbestand bestaat (al)
+# er was ook een msgid: Target file already exists
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Doelbestand bestaat al"
+
+# map/de map
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kan map niet recursief kopiëren"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Kan speciaal bestand niet kopiëren"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Ongeldige symbolische verwijzing gegeven"
+
+# wordt hier niet ondersteund
+# (dus bijv. op een aangekoppelde externe opslag?)
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Prullenbak wordt ondersteund"
+
+# Een bestandsnaam mag het teken / niet bevatten
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Het teken ‘%c’ mag niet in een bestandsnaam voorkomen"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volumen begrijpt de opdracht ‘aankoppelen’ niet"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Er is geen programma toegewezen om dit bestand te openen"
+
+# opsomming/teller
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Teller is gesloten"
+
+# hmm
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Bestandsteller bevat een lopende bewerking"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Bestandsteller is al gesloten"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "bestand"
+
+# dat het pictogram bevat/met het pictogram
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Een bestand met het pictogram"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Kan versie %d van GFileIcon-codering niet verwerken"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Ongeldige invoergegevens voor GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Datastroom ondersteunt query_info niet"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Zoeken binnen datastroom niet mogelijk"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Afkappen is niet toegestaan op een invoerdatastroom"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Afkappen wordt niet ondersteund op een datastroom"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Verkeerd aantal tokens (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Geen type voor klassenaam %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Type %s implementeert de GIcon-interface niet"
+
+# Uhhh? (Wouter Bolsterlee)
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Type %s is niet ‘classed’"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Onjuist versienummer: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Type %s implementeert from_tokens() op de GIcon-interface niet"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Kan de opgegeven versie in de pictogram-codering niet verwerken"
+
+# huh?
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Invoerdatastroom begrijpt de opdracht ‘lezen’ niet"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Datastroom is nog bezig"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Kon de standaard ‘directory monitor type’ niet vinden"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ongeldige bestandsnaam: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Fout bij het ophalen van informatie over bestandssysteem: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Kan de root-map niet hernoemen"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Fout bij het hernoemen van bestand: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Kan het bestand niet hernoemen, de bestandsnaam bestaat al"
+
+# ongeldige naam voor bestand/ongeldige bestandsnaam
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ongeldige bestandsnaam"
+
+# openen/lezen
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Fout bij het openen van bestand: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kan map niet openen"
+
+# volledig verwijderen/definitief verwijderen/verwijderen
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Fout bij het verwijderen van bestand: %s"
+
+# naar prullenbak verplaatsen/verwijderen
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Fout bij het verplaatsen naar de prullenbak van bestand: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Kan de prullenbakmap %s niet aanmaken: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Kan de bovenliggende map voor de prullenbak niet vinden"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Kan prullenbakmap niet vinden of aanmaken"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Kan prullenbak-informatiebestand ‘%s’ niet aanmaken"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Kan het bestand ‘%s’ niet naar de prullenbak verplaatsen"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Fout bij het aanmaken van map: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Fout bij het maken van symbolische verwijzing: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Fout bij het verplaatsen van bestand: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Kan map niet over map verplaatsen"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Aanmaken van backupbestand is mislukt"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Fout bij het verwijderen doelbestand: %s"
+
+# (nog) niet mogelijk/niet ondersteund
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Verplaatsen tussen aankoppelpunten is niet mogelijk"
+
+# technotalk
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attribuutwaarde moet niet-NULL zijn"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Ongeldig attribuuttype (hoort een tekenreeks te zijn)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Ongeldige uitgebreide attribuutnaam"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Fout bij het instellen van uitgebreid attribuut ‘%s’: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Fout bij het benaderen van bestand ‘%s’: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ongeldige codering)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Fout bij het benaderen van bestandsdescriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Ongeldig attribuuttype (hoort een uint32 te zijn)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Ongeldig attribuuttype (hoort een uint64 te zijn)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Ongeldig attribuuttype (hoort een byte-tekenreeks te zijn)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Fout bij instellen toegangsrechten: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Fout bij instellen eigenaar: %s"
+
+# technotalk
+# symlink/symbolische verwijzing
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolische verwijzing moet niet-NULL zijn"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Fout bij instellen symbolische verwijzing: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Fout bij instellen symbolische verwijzing: bestand is geen symbolische "
+"verwijzing"
+
+# technotalk
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux-context moet niet-NULL zijn"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Fout bij instellen SELinux-context: %s"
+
+# geactiveerd/aangezet
+# systeem/computer
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux is niet geactiveerd op dit systeem"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Instellen van attribuut %s is niet mogelijk"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Fout bij het lezen van bestand: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Fout bij het doorzoeken van bestand: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Fout bij het sluiten van bestand: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Kon de standaard ‘file monitor type’ niet vinden"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Fout bij het schrijven naar bestand: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Fout bij verwijderen van oude verwijzing naar reservekopie: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Fout bij het aanmaken van reservekopie: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Fout bij het hernoemen van tijdelijk bestand: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Fout bij het afkappen bestand: %s"
+
+# lezen/openen
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Fout bij het openen van bestand ‘%s’: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Doelbestand is geen map"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Doelbestand is geen gewoon bestand"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Het bestand is door een ander programma gewijzigd"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Fout bij verwijderen van oude bestand: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Ongeldig GSeekType geleverd"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ongeldige zoekopdracht"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Kan GMemoryInputStream niet afkappen"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Maximum data-arraylimiet bereikt"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Wijzigen van geheugenruimte uitvoerdatastroom is niet mogelijk"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Wijzigen van geheugenruimte uitvoerdatastroom is mislukt"
+
+# ontkoppelen is op deze koppeling niet mogelijk/niet geimplementeerd
+# ontkoppelen is bij deze koppeling/bij dit aangekoppelde object
+# dit aangekoppelde object kan niet worden ontkoppeld/losgemaakt/vrijgemaakt
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "ontkoppelen niet ondersteund door koppeling"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "uitwerpen niet ondersteund door koppeling"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "opnieuw koppelen niet ondersteund door koppeling"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "inhoudstype raden niet ondersteund door koppeling"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "op synchrone wijze inhoudstype raden niet ondersteund door koppeling"
+
+# uitvoerdatastroom begrijpt de opdracht 'scrijven' niet
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "schrijven wordt niet ondersteund door de uitvoerdatastroom"
+
+# bronstroom/datastroom van de bron
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Datastroom is al gesloten"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "naam"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Naam van het pictogram"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "namen"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Een lijst met de pictogramnamen"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "standaard terugvalmechanisme gebruiken"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Of het standaard terugvalmechanisme gebruikt moet worden door de naam bij "
+"het ‘-’-teken af te knippen. Als meerdere namen worden gegeven wordt de "
+"eerste gebruikt."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Kan versie %d van GThemedIcon-codering niet verwerken"
+
+# Expres onvertaald (Wouter Bolsterlee)
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Bestandsdescriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "De bestandsdescriptor om van te lezen"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Bestandsdescriptor sluiten"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+"Of de bestandsdescriptor gesloten moet worden als de stream wordt gesloten"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Fout bij lezen van unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Fout bij sluiten van unix: %s"
+
+# hoofdmap van bestandssysteem
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Hoofdmap bestandssysteem"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "De bestandsdescriptor om naar te schrijven"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Fout bij schrijven naar unix: %s"
+
+# volumen kan niet uitgeworpen worden/implemeteert 'uitwerpen' niet/
+# begrijpt de opdracht 'uitwerpen' niet
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volumen begrijpt de opdracht ‘uitwerpen’ niet"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Kan het programma niet vinden"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Fout bij opstarten van het programma: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI's worden niet ondersteund"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "associatiewijzigingen niet mogelijk op win32"
+
+# Associeren/associaties aanmaken
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Associaties aanmaken niet mogelijk op win32"
+
+# vrij vertaald
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ook de verborgen items tonen"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "gebruik een uitgebreide opsomming"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[BESTAND...]"
+
+# ook byte voor meervoud (het bestand is 29 byte groot)
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u byte"
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 0000000..f5bea24
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,1844 @@
+# translation of nn.po to Norwegian Nynorsk
+# Roy-Magne Mo <rmo@sunnmore.net>, 2002.
+# Åsmund Skjæveland <aasmunds@ulrik.uio.no>, 2003-2008.
+# Norwegian (Nynorsk) translation of glib
+# Copyright (C) Free Software Foundation, 2002.
+msgid ""
+msgstr ""
+"Project-Id-Version: nn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-02-24 17:33+0100\n"
+"Last-Translator: Åsmund Skjæveland <aasmunds@ulrik.uio.no>\n"
+"Language-Team: Norwegian Nynorsk <i18n-nn@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Uventa attributt «%s» til elementet «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attributt «%s» til elementet «%s» ikkje funne"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Uventa merke «%s», venta merket «%s»"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Uventa merke «%s» inni «%s»"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Klarte ikkje å finna gyldig bokmerkefil i datamappene"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Eit bokmerke for adressa «%s» finst frå før"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Klarte ikkje å finna noko bokmerke for adressa «%s»"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Det er ikkje definert nokon MIME-type i bokmerket for adressa «%s»"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Privat-flagg er ikkje definert i bokmerket for adressa «%s»"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Det er ikkje laga nokon grupper i bokmerket for adressa «%s»"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Det er ikkje nokon program som heiter «%s» som har registrert bokmerke for «%s»"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Klarte ikkje å utvida køyrelinja «%s» med adressa «%s»"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "<Konvertering frå teiknsettet «%s» til «%s» er ikkje støtta"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Kunne ikkje opna konverterar frå «%s» til «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ugyldig bytesekvens i inndata for konvertering"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Feil under konvertering: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Delvis teiknsekvens på slutten av inndata"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Kan ikkje konvertera tilbakefall «%s» til kodesett «%s»"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI-en «%s» er ikkje ein absolutt URI som brukar «file»-skjemaet"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Den lokale fil-URIen «%s» kan ikkje innehalda ein «#»"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URIen «%s» er ugyldig"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Vertsnamnet i URIen «%s» er ugyldig"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URIen «%s» inneheld feil koda teikn"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Filstien «%s» er ikkje ein absolutt sti"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ugyldig vertsnamn"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Feil ved opning av katalog «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Klarte ikkje allokera %lu byte for å lesa «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Feil ved lesing av fil «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Klarte ikkje å lesa frå fila «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Klarte ikkje å opna fila «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Klarte ikkje å få tak i eigenskapar for fila «%s»: fstat() feila: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Kunne ikkje opna fila «%s»: fdopen() feila: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Klarte ikkje å endra namnet på fila «%s» til «%s»: g_rename() feila: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Klarte ikkje å oppretta fila «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Klarte ikkje å opna fila «%s» for skriving: fdopen() feila: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Klarte ikkje å skriva til fila «%s»: fwrite() feila: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Klarte ikkje å skriva til fila «%s»: fwrite() feila: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Klarte ikkje å skriva til fila «%s»: fwrite() feila: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Klarte ikkje å lukka fila «%s»: fclose() feila: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Klarte ikkje å fjerna den eksisterande fila «%s»: g_unlink() feila: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Malen «%s» er ugyldig, kan ikkje ikkje innehalda ein «%s»"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Malfila «%s» inneheld ikkje XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KiB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MiB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GiB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Klarte ikkje å lesa den symbolske lenkja «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolske lenkjer er ikkje støtta"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Klarte ikkje å opna konverterar frå «%s» til «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Klarar ikkje å gjera ei rå lesing i g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Ukonvertert data til overs i lesebufferet"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanalen avsluttar på eit delvis teikn"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Kan ikkje lesa rått i g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Klarte ikkje å opna fila «%s»: open() feila: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Klarte ikkje å kopiera fila «%s» til minnet: mmap() feila: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Feil på linje %d teikn %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Feil på linje %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "Fann tom entitet «&;»; gyldige entitetar er: &amp; &quot; &lt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Teiknet «%s» er ikkje gyldig på byrjinga av eit entitetsnamn; &-teiknet opnar "
+"ein entitet; om dette et-teiknet ikkje er meint å vere ein entitet, skriv "
+"den som &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Teiknet «%s» er ikkje gyldig inne i eit entitetsnamn"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entitetsnamnet «%s» er ikkje kjent"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteten slutta ikkje med eit semikolon. Du brukte truleg eit et-teikn utan "
+"å meina å opna ein entitet. Skriv et-teikn som «&amp;»."
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Klarte ikkje å tolka «%-.*s», som burde vera eit teikn i ein teiknreferanse "
+"(&#234;, til dømes) – kan henda talet er for stort"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Teiknreferansen «%-.*s» kodar ikkje kan ikkje kodast eit lovleg teikn"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tom teiknreferanse, bør innehalda eit nummer slik som &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Teiknreferansen slutta ikkje med eit semikolon; sannsynlegvis brukte du eit "
+"et-teikn utan å villa starte ein entitet – skriv et-teikn som &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referansen til entiteten er uferdig"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referansen til teiknet er uferdig"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ugyldig UTF-8-koda tekst - for lang sekvens"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ugyldig UTF-8-koda tekst - ikkje eit startteikn"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ugyldig UTF-8-koda tekst - ikkje gyldig «%s»"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentet må byrja med eit element (t.d. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"«%s» er ikkje eit gyldig teikn etter ein «<»-teikn. Det kan ikkje vera det "
+"fyrste teiknet i eit elementnamn"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Merkeleg teikn «%s», venta eit «>»-teikn for å avslutta startmerket av "
+"elementet «%s»"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Merkeleg teikn «%s», venta ein «=» etter attributtnamnet «%s» av elementet «%s»"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Merkeleg teikn «%s», venta anten eit «>»-teikn eller «/»-teikn for å avslutta "
+"startmerket av elementet «%s», eller ein valfri attributt. Kan henda du "
+"brukte eit ugyldig teikn i attributtnamnet"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Merkeleg teikn «%s», venta eit ope siteringsmerke etter likskapsteiknet for å "
+"gje ein verdi for attributten «%s» av elementet «%s»"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"«%s» er ikkje eit gyldig teikn etter teikna «<» eller «/». «%s» kan ikkje starta "
+"eit elementnamn"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"«%s» er ikkje eit gyldig teikn etter avsluttande merket «%s»; det tillatne "
+"teiknet er «>»"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elementet «%s» vart lukka. Det er ingen opne element no"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Elementet «%s» vart avslutta, men det opne elementet er «%s»"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumentet var tomt eller innheldt berre tomme teikn"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument avslutta uventa rett etter ei open vinkelhake «<»"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumentet slutta uventa med element framleis opne. «%s» var det siste "
+"elementet som vart opna"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumentet slutta uventa, venta å sjå at ei vinkelhake lukka det avsluttande "
+"merket <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumentet tok uventa slutt inni eit elementnamn"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumentet tok uventa slutt inni eit attributtnamn"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Dokumentet vart uventa avslutta inne i eit merke som opnar eit element."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumentet slutta uventa etter likskapsteiknet etter attributtnamnet; ingen "
+"attributtverdi"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumentet avslutta uventa medan det var inne i ein attributtverdi"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokumentet avslutta uventa i eit lukkemerke for elementet «%s»"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumentet avslutta uventa inne i ein merknad eller prosseseringsinstruksjon"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "øydelagt objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "intern feil eller øydelagt objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "tom for minne"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "tilbakesporingsgrensa nådd"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "mønsteret inneheld element som ikkje er støtta i delsamanlikning"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "intern feil"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "tilbakereferansar som vilkår er ikkje støtta i delsamanlikning"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "rekursjonsgrensa nådd"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "arbeidsområdegrensa for tomme understrengar nådd"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ugyldig kombinasjon av nylinjeflagg"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ukjend feil"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ på slutten av mønsteret"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c på slutten av mønsteret"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ukjend teikn etter \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"skiftesekvensar som påverkar små/store bokstavar (\\I, \\L, \\u, \\U) er "
+"ikkje tillatne her"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "tal ikkje i rekkefølgje i {}-kvantor"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "tal for stort i {}-kvantor"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "manglar avsluttande ] i teiknklassen"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ugyldig skiftesekvens i teiknklassen"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "spenn ikkje i rekkefølgje i teiknklassen"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ikkje noko å gjenta"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "kjenner ikkje att teiknet etter (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "kjenner ikkje att teiknet etter (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "kjenner ikkje att teiknet etter (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX-type klassar med namn er berre støtta inni ein klasse"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "manglar avsluttande )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") utan opnande ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R eller (?[+-]tal må følgjast av )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referanse til undermønster som ikkje finst"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "manglar ) etter kommentar"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regulært uttrykk for stort"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "klarte ikkje å få minne"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "bakoversøk-påstand har ikkje fast lengde"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "uleseleg tal eller namn etter (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "vilkårgruppa inneheld meir enn to greiner"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "påstand venta etter (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ukjend POSIX-klassenamn"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-type sorterte element er ikkje støtta"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "teiknverdi i \\x{...}-sekvens er for stor"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ugyldig vilkår (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C ikkje tillate i bakoversøk-påstand"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursivt kall kan kanskje gå til evig tid"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "manglar lukketeikn i undermønsternamn"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "to namngjevne undermønster har same namn"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "feilskriven \\P- eller \\p-sekvens"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "ukjend eigenskapnamn etter \\P eller \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "undermønsternamn for langt (toppen 32 teikn)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "for mange namngjevne undermønster (toppen 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "oktalverdi er større enn \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-gruppe inneheld meir enn ei grein"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "det er ikkje tillate å gjenta ei DEFINE-gruppe"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inkonsistente NEWLINE-val"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g er ikkje følgd av eit namn i klammer eller eit ikkje-null tal i valfrie "
+"klamer"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "uventa gjentaking"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kode-overflyt"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "gjekk utanfor kompileringsarbeidsområdet"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "tidlegare kontrollert referert undermønster ikkje funne"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Feil under samanlikning med regulært uttrykk %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-bibliotek er kompilert utan støtte for UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE-bibliotek er kompilert utan støtte for UTF-8-eigenskapar"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Feil under kompilering av regulært uttrykk %s på teikn %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Feil under optimering av regulært uttrykk %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "heksadesimalt teikn eller «}» venta"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "heksadesimalt teikn venta"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "manglar «<» i symbolsk referanse"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "uferdig symbolsk referanse"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "null-lengd symbolsk referanse"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "venta siffer"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ugyldig symbolsk referanse"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "laus avsluttande «\\»"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ukjend skiftesekvens"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Feil under tolking av erstatningsteksten «%s» på teikn «%lu»: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Sitert tekst startar ikkje med eit siteringsmerke"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Upara siteringsmerke i kommandolinje eller anna skal-sitert tekst"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Teksten tok slutt rett etter eit «\\»-teikn (Teksten var «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Teksten tok slutt før avsluttande sitatteikn vart funne for %c. (Teksten var "
+"«%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksten var tom (eller inneheldt berre tomme teikn)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Klarte ikkje å lesa data frå barneprosess"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Klarte ikkje å oppretta røyr for å kommunisera med barneprosess (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Klarte ikkje å lesa frå røyr frå barn (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Klarte ikkje å skifta til katalogen «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Klarte ikkje å utføra barneprosess (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ugyldig programnamn: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Ugyldig streng i argumentvektor plass %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ugyldig streng i miljø: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ugyldig arbeidskatalog: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Klarte ikkje å køyra hjelpeprogram (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Uventa feil i g_io_channel_win32_poll() ved lesing av data frå barneprosess"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Klarte ikkje å lesa data frå barneprosess (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Uventa feil i select() ved lesing av data frå barneprosess (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Uventa feil i waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Kunne ikkje starta barneprosess (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Klarte ikkje å utføra barnprosess «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Klarte ikkje å redirigera utdata eller inndata frå barneprosess (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Kunne ikkje starta barneprosess (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ukjend feil ved køyring av barneprosess «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Klarte ikkje å lesa nok data frå pid-røyr frå barn (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Teikn ikkje gyldig for UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ugyldig sekvens i inndata-konvertering"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Teikn ikkje gyldig for UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Bruk:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[VAL...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Hjelpeval:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Vis hjelpeval"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Vis alle hjelpevala"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Programval:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Kan ikkje tolka heiltalsverdien «%s» til %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Heiltalsverdien «%s» til «%s» utanfor gyldig område"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Kan ikkje tolka flyttalsverdien «%s» til «--%s»"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Flyttalsverdien «%s» til «%s» utanfor gyldig område"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Feil under tolking av val %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argument manglar for %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Ukjend val «%s»"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Klarte ikkje å finna gyldig nøkkelfil i søkjemappene"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ikkje ei vanleg fil"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Fila er tom"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Nøkkelfila inneheld linja «%s» som ikkje er eit nøkkel-verdi-par, ei gruppe "
+"eller ein kommentar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ugyldig gruppenamn: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Nøkkelfila startar ikkje med ei gruppe"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ugyldig nøkkelnamn: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Nøkkelfila inneheld den ikkje støtta kodinga «%s»"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Nøkkelfila manglar gruppa «%s»"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Nøkkelfila manglar nøkkelen «%s»"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Nøkkelfila har nøkkelen «%s» med verdien «%s», som ikkje er UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Nøkkelfila har nøkkelen «%s» med ein verdi som ikkje kan tolkast."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Nøkkelfila har feil i nøkkelen «%s» i gruppa «%s». Verdien kan ikkje tolkast."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Nøkkelfila har ikkje nøkkelen «%s» i gruppa «%s»"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Nøkkelfila inneheld escape-teikn på slutten av linja"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Nøkkelfila inneheld ugyldig escape-sekvens «%s»"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Verdien «%s» kan ikkje tolkast som eit tal."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Heiltalsverdien «%s» er utanfor gyldig område"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Verdien «%s» kan ikkje tolkast som eit flyttal."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Verdien «%s» kan ikkje tolkast som ein boolsk verdi."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "For stor teljingsverdi sendt til %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Straumen er allereie stengt"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operasjonen vart avbroten"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Ukjend type"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s-filtype"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s-type"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Uventa tidleg slutt på straumen"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Utan namn"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Skrivebordfila oppgav ikkje Exec-felt"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Klarte ikkje å finna terminalen programmet krev"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kan ikkje laga programoppsettmappe %s for brukaren: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kan ikkje laga MIME-oppsettmappe %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kan ikkje laga skrivebordfila %s for brukaren"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Sjølvvald definisjon av %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "stasjonen støttar ikkje å løysa ut"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "stasjonen støttar ikkje å spørja etter media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operasjonen er ikkje støtta"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Omsluttande monteringspunkt finst ikkje"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Kan ikkje skriva over mappe"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Kan ikkje skriva ei mappe over ei mappe"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Målfila finst"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kan ikkje kopiera katalog rekursivt"
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "Kan ikkje skriva over mappe"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Ugyldig symlink-verdi oppgjeven"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Papirkorg er ikkje støtta"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Filnamn kan ikkje innehalda «%c»"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volumet støttar ikkje montering"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Ingen program er registrert til å handtera denne fila"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Teljaren er stengt"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Filteljaren har ventande operasjon"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Filteljaren er allereie lukka"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Vertsnamnet i URIen «%s» er ugyldig"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Straumen støttar ikkje query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Søking ikkje støtta i straumen"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Trunkering ikkje tillate på innstraumen"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Trunkerung ikkje tillate på straumen"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Innstraumen støttar ikkje lesing"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Straumen har ventande operasjon"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Klarer ikkje å finna typen standard lokal mappeovervakar"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ugyldig filnamn %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Feil ved henting av filsysteminfo: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Kan ikkje gje rotmappa nytt namn"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Feil ved namnebyte på fila: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Kan ikkje gje fila nytt namn, filnamnet finst frå før"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ugyldig filnamn"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Feil ved opning av fila: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kan ikkje opna mappa"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Feil under fjerning av fila: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Feil under kassering av fila: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Klarte ikkje å laga papirkorgmappa %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Klarar ikkje å finna toppnivåmappe for papirkorga"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Klarar ikkje å finna eller laga papirkorgmappa"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Klarte ikkje å laga infofil om kassering: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Klarte ikkje å kassera fila: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Feil ved opning av katalog «%s»: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Klarte ikkje å laga symbolsk lenkje: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Feil under flytting av fil: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Kan ikkje flytta mappa over ei mappe"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Klarte ikkje å laga tryggleikskopi av fila"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Klarte ikkje å sletta målfila: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Flytting mellom monteringar ikkje støtta"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attributtverdien må vera ikkje-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Ugyldig attributtype (venta streng)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Ugyldig utvida attributtnamn"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Feil under endring av utvida attributtverdi «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Feil under lesing av informasjon om fila «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr "(ugyldig teiknkoding)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Feil under lesing av info om fildeskriptoren: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Ugyldig attributtype (venta uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Ugyldig attributtype (venta uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Ugyldig attributtype (venta byte-streng)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Feil endring av løyve: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Feil under eigarskifte: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolsk lenkje må vera ikkje-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Fil under oppretting av symbolsk lenkje: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Fil under oppretting av symbolsk lenkje: Fila er ikkje ei symbolsk lenkje"
+
+#: gio/glocalfileinfo.c:2074
+#, fuzzy
+msgid "SELinux context must be non-NULL"
+msgstr "symbolsk lenkje må vera ikkje-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Feil under eigarskifte: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Å setja attributten %s er ikkje støtta"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Feil ved lesing frå fila: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Feil ved søking i fila: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Feil ved stenging av fila: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Klarer ikkje å finna typen standard lokal filovervakar"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Feil ved skriving til fila: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Feil under fjerning av gamal tryggleikskopilenkje: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Feil ved oppretting av tryggleikskopi: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Feil ved namnebyte på mellombels fil: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Feil ved trunkering av fila: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Feil ved opning av fila «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Målfila er ei mappe"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Målfila er ikkje ei vanleg fil"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Fila vart endra utanfrå"
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Feil under fjerning av fila: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Ugyldig GSeekType sendt med"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ugyldig søkeførespurnad"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Kan ikkje trunkera GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Nådd maksgrensa for dataarray"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Utstraumen frå minnet kan ikkje endra storleik"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Klarte ikkje å endra storleik på utstraumen frå minnet"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "monteringspunktet støttar ikkje avmontering"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "monteringspunktet støttar ikkje å løysa ut"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "monteringspunktet støttar ikkje å remontera"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+#, fuzzy
+msgid "mount doesn't implement content type guessing"
+msgstr "monteringspunktet støttar ikkje avmontering"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+#, fuzzy
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "monteringspunktet støttar ikkje avmontering"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "utstraumen støttar ikkje skriving"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Kjeldestraumen er allereie stengt"
+
+#: gio/gthemedicon.c:211
+#, fuzzy
+msgid "name"
+msgstr "Utan namn"
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Vertsnamnet i URIen «%s» er ugyldig"
+
+#: gio/gthemedicon.c:223
+#, fuzzy
+msgid "names"
+msgstr "Utan namn"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Feil under lesing av info om fildeskriptoren: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Feil ved lesing frå unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Feilved lukking av: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filsystemrot"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Feil under skriving til unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volumet støttar ikkje å løysa ut"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Kan ikkje finna programmet"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Feil under oppstart av programmet: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI-ar er ikkje støtta"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "å endra assosiasjonar er ikkje støtta på win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Å laga assosiasjonar er ikkje støtta på win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ikkje gøym oppføringar"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "bruk langt listeformat"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FIL ...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u byte"
diff --git a/po/oc.po b/po/oc.po
new file mode 100644
index 0000000..2ffe6d3
--- /dev/null
+++ b/po/oc.po
@@ -0,0 +1,1792 @@
+# Occitan translation of glib.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the ekiga package.
+#
+#
+# Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: oc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-04-23 10:42+0200\n"
+"Last-Translator: Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>\n"
+"Language-Team: Occitan <ubuntu-l10n-oci@lists.ubuntu.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr ""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr ""
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr ""
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr ""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Error de lectura del fichièr '%s' : %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Impossible de dobrir le fichièr '%s' : %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Impossible de dobrir le fichièr '%s' : %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Impossible de dobrir le fichièr '%s' : %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr ""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr ""
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f ko"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f Mo"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f Go"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr ""
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr ""
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr ""
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr ""
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr ""
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Sintaxi :"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcions de l'aplicacion :"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr ""
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Lo fichièr es void"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr ""
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr ""
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipe desconegut"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sens nom"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr ""
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr ""
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nom d'òste invalid"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Error al moment de crear lo repertòri : %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error al moment de crear lo repertòri : %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr ""
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Error de lectura del fichièr '%s' : %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nom"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr ""
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "noms"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr ""
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr ""
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr ""
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr ""
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FICHIÈR...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u octet"
+#~ msgstr[1] "%u octets"
diff --git a/po/or.po b/po/or.po
new file mode 100644
index 0000000..f1a7568
--- /dev/null
+++ b/po/or.po
@@ -0,0 +1,1829 @@
+# translation of or.po to Oriya
+# translation of or.po to
+# Oriya translation of glib.glib-2-4.or.pot.
+# Copyright (C) 2004, 2006, 2007, 2008, 2009, Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib.glib-2-4 package.
+# $Id: or.po,v 1.37 2006/08/16 00:43:58 matthiasc Exp $
+#
+# Subhransu Behera <arya_subhransu@yahoo.co.in>, 2004, 2006, 2007.
+# Manoj Kumar Giri <mgiri@redhat.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: or\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-30 14:21+0530\n"
+"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
+"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s' ର ଗୁଣ '%s' ଉପାଦାନ ପାଇଁ ଅପ୍ରତ୍ଯାଶିତ ଅଟେ"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' ଗୁଣକୁ '%s' ଉପାଦାନ ପାଇଁ ଖୋଜି ପାରିଲା ନାହିଁ"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "ଅପ୍ରତ୍ଯାଶିତ '%s' ସୂଚକ, '%s' ସୂଚକକୁ ଆଶା କରାଯାଉଥିଲା"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "ଅପ୍ରତ୍ଯାଶିତ '%s' ସୂଚକଟି '%s' ମଧ୍ଯରେ ଅଛି"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "ତଥ୍ଯ ଡିରେକ୍ଟୋରି ମାନଙ୍କରେ କୌଣସି ବୈଧ ଚିହ୍ନିତ ସ୍ଥାନ ମିଳିଲା ନାହିଁ"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "'%s' URI ପାଇଁ ଗୋଟିଏ ବୁକ୍ ମାର୍କ ପୂର୍ବରୁ ଅବସ୍ଥିତ ଅଛି"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "'%s' ୟୁ.ଆର.ଆଇ. ପାଇଁ କୌଣସି ବୁକ୍ ମାର୍କ ମିଳିଲା ନାହିଁ"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "'%s' ୟୁ.ଆର.ଆଇ. ପାଇଁ ବୁକ୍ ମାର୍କରେ କୌଣସି MIME ପ୍ରକାରକୁ ବ୍ଯାଖ୍ଯା କରାଯାଇ ନାହିଁ"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "'%s' ୟୁ.ଆର.ଆଇ. ପାଇଁ ବୁକ୍ ମାର୍କରେ କୌଣସି ଗୁପ୍ତ ଚିହ୍ନକକୁ ବ୍ଯାଖ୍ଯା କରାଯାଇ ନାହିଁ"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "'%s' ୟୁ.ଆର.ଆଇ. ପାଇଁ ବୁକ୍ ମାର୍କରେ କୈଣସି ସମୂହକୁ ସେଟ କରାଯାଇ ନାହିଁ"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' ନାମରେ ନାମିତ କୌଣସି ପ୍ରୟୋଗ '%s' ପାଇଁ ଗୋଟିଏ ବୁକ୍ ମାର୍କକୁ ପଞ୍ଜିକ୍ରୁତ କରିନାହିଁ"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "'%s' ୟୁ.ଆର.ଆଇ. ସହିତ '%s' ନିଷ୍ପାଦନ ଧାଡିକୁ ବର୍ଦ୍ଧନ କରିବାରେ ବିଫଳ"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "ଅକ୍ଷର ସେଟ୍ '%s'କୁ '%s'େର ରୂପାନ୍ତରିତ କରିବା ଅସହାୟକ"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s'ରୁ '%s'ର ରୁପାନ୍ତରକ ଖୋଲି ହେଲା ନାହିଁ"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "ରୁପାନ୍ତରଣ ନିବେଶେର ଅବୈଧ ବାଇଟ୍ ଅନୁକ୍ରମ"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "ରୁପାନ୍ତରଣରେ ତ୍ରୁଟି: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "ନିବେଶର ସମାପ୍ତିରେ ଆଶିଂକ ଅକ୍ଷର ଅନୁକ୍ରମ"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "'%s' ସହାୟକକୁ ସଂକେତ '%s' ସେଟ୍ ରେ ରୁପାନ୍ତରିତ କରିହେଲା ନାହିଁ"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "'%s' ୟୁ.ଆର୍.ଆଇ. \"ଫାଇଲ\" ଯୋଜନାକୁ ବ୍ଯବହାର କରୁଥିବା ଗୋଟିଏ ସମ୍ପୂର୍ଣ୍ଣ ୟୁ.ଆର୍.ଆଇ. ନୁହେଁ"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "'%s' ସ୍ଥାନୀୟ ଫାଇଲ ୟୁ.ଆର୍.ଆଇ. '#' ଚିହ୍ନକୁ ସମ୍ମିଳିତ କରିପାରିବ ନାହିଁ"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "'%s' ୟୁ.ଆର୍.ଆଇ. ଅବୈଧ ଅଟେ"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "'%s' ୟୁ.ଆର୍.ଆଇ.ର ଆଧାର ନାମ ଅବୈଧ ଅଟେ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "'%s' ୟୁ.ଆର୍.ଆଇ.ରେ ଅବୈଧ ଏସ୍କେପ୍ ଅକ୍ଷର ରହିଛି"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' ପଥ ନାମ ଏକ ସମ୍ପୂର୍ଣ୍ଣ ପଥ ନୁହେଁ"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ଅବୈଧ ଆଧାର ନାମ"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "%s' ଡିରେକ୍ଟୋରି ଖୋଲିବାରେ ତ୍ରୁଟି: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "\"%2$s\" ଫାଇଲ ପଢିବା ପାଇଁ %1$lu ବାଇଟ୍ ବାଣ୍ଟିହେଲା ନାହିଁ"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ଫାଇଲ ପଢିବାରେ ତ୍ରୁଟି: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "ଫାଇଲ \"%s\" ଟି ଅତ୍ଯଧିକ ବଡ଼"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' ଫାଇଲ ପଢିବାରେ ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' ଫାଇଲ ଖୋଲିବାରେ ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' ଫାଇଲର ଗୁଣ ପାଇବାରେ ଅସଫଳ: fstat() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' ଫାଇଲ ଖୋଲିବାରେ ଅସଫଳ: fdopen() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' ଫାଇଲ ରୁ '%s' ନାମ ବଦଳାଇ ବାରେ ଅସଫଳ: g_rename() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' ଫାଇଲ ସ୍ରୁଷ୍ଟି କରିବାରେ ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "'%s' ଫାଇଲ କୁ େଲଖନ ପାଇଁ ଖୋଲିବାରେ ଅସଫଳ: fdopen() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' ଫାଇଲ ଖୋଲିବାରେ ଅସଫଳ: fwrite() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' ଫାଇଲ ଖୋଲିବାରେ ଅସଫଳ: fflush() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' ଫାଇଲ ଖୋଲିବାରେ ଅସଫଳ: fsync() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' ଫାଇଲ କୁ ବନ୍ଦ କରିବା ରେ ଅସଫଳ: fclose() ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "ଅବସ୍ଥିତ '%s' ଫାଇଲ କାଢି ହେଲା ନାହଁି: g_unlink ଅସଫଳ %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' ନମୁନା ଟି ଅବୈଧ ଅଟେ, '%s' ଧାରଣ କରିବା ଉଚିତ ନୁହେଁ"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' ନମୁନା ଟି XXXXXXକୁ ଧାରଣ କରିନାହିଁ"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' ପ୍ରତିକାତ୍ମକ ସଂୟୋଗ ପଢିବାରେ ଅସଫଳ: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "ପ୍ରତିକାତ୍ମକ ସଂୟୋଗ ଅସହାୟକ"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "%s' ରୁ '%s' ର ରୁପାନ୍ତରକ ଖୋଲି ପାରିଲା ନାହିଁ: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string ରେ ଅଂସସାଧିତ ପଠନ କରିହେଲା ନାହିଁ"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "ପଠନ ବଫରରେ ଅରୂପାନ୍ତରିତ ତଥ୍ଯ ବଳକା ଅଛି"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "ଆଂଶିକ ଅକ୍ଷର ରେ ଚାନେଲର ସମାପ୍ତି"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end େର ଅଂସସାଧିତ ପଠନ କରିହେଲା ନାହିଁ"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' ଫାଇଲ ଖୋଲିବାରେ ଅସଫଳ: open() ଅସଫଳ: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' ଫାଇଲ କୁ ମ୍ଯାପ୍ କରିବାରେ ଅସଫଳ: mmap() ଅସଫଳ: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "ଧାଡ଼ି %dର ଅକ୍ଷର %dରେ ତ୍ରୁଟି: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d ଧାଡ଼ିରେ ତ୍ରୁଟି: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "ଖାଲି ବସ୍ତୁ '&;' ଦେଖା ଗଲା; ବୈଧ ବସ୍ତୁଗୁଡ଼ିକ ହେଲା: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"ଗୋଟିଏ ବସ୍ତୁର ନାମର ଆରମ୍ଭ ରେ '%s' ଅକ୍ଷର ବୈଧ ନୁହେଁ; ଅକ୍ଷର & ଗୋଟିଏ ବସ୍ତୁକୁ ଆରମ୍ଭ କରେ; ଯଦି ଏହି "
+"ଆମ୍ପର୍ସେଣ୍ଡ୍ ଗୋଟିଏ ବସ୍ତୁ ନୁହେଁ, ଏହାକୁ &amp; ଭାବରେ ଏସ୍କେପ୍ କରନ୍ତୁ;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "ବସ୍ତୁ ନାମ ମଦ୍ଧ୍ଯ ରେ '%s' ଅକ୍ଷର ବୈଧ ନୁହେଁ"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "'%s' ବସ୍ତୁ ନାମ ଜଣା ନାହିଁ"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"ବସ୍ତୁଟି ସେମିକୋଲନରେ ଶେଷ ହେଲା ନାହିଁ; ସମ୍ଭବତଃ ଆପଣ ଗୋଟିଏ ବସ୍ତୁ ଆରମ୍ଭ କରିବାକୁ ନ ଚାହିଁ, ଏକ "
+"ଆମ୍ପର୍ସେଣ୍ଡ୍ ଅକ୍ଷର ବ୍ଯବହାର କରିଛନ୍ତି - ତାହାକୁ &amp; ଭାବରେ ଏସ୍କେପ୍ କରନ୍ତୁ"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s' କୁ ବିଶ୍ଳେଷଣ କରିବାରେ ଅସଫଳ, ଯାହାକି ଗୋଟିଏ ଅକ୍ଷର ରେଫରେନ୍ସ ମଦ୍ଧ୍ଯରେ ଏକ ଅଙ୍କ ହେବା ଉଚିତ "
+"ଥିଲା(ଉଦାହରଣ ସ୍ବରୂପେ &#୨୩୪;) - ବୋଧହୁଏ ଅଙ୍କଟି ବହୁତ ବଡ଼ ଅଟେ"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "'%-.*s' ଅକ୍ଷର ରେଫରେନ୍ସ ଟି ଗୋଟିଏ ଅନୁମତ ଅକ୍ଷରକୁ ସଙ୍କେତ କରୁ ନାହିଁ"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ଖାଲି ଅକ୍ଷର ରେଫରେନ୍ସ; ଗୋଟିଏ ଅଙ୍କକୁ ଅନୁର୍ଭୁକ୍ତ କରିବା ଉଚିତ, ଯେପରିକି &#୪୫୪;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"ଅକ୍ଷର ରେଫରେନ୍ସ ସେମିକୋଲନରେ ସମାପ୍ତ ହେଉ ନାହିଁ; ସମ୍ଭବତଃ ଆପଣ ଗୋଟିଏ ବସ୍ତୁ ଆରମ୍ଭ କରିବାକୁ ନ ଚାହିଁ, "
+"ଏକ ଆମ୍ପର୍ସେଣ୍ଡ୍ ଅକ୍ଷର ବ୍ଯବହାର କରିଛନ୍ତି - ତାହାକୁ &amp; ଭାବରେ ଏସ୍କେପ୍ କରନ୍ତୁ"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ଅସମାପ୍ତ ବସ୍ତୁ ରେଫରେନ୍ସ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "ଅସମାପ୍ତ ଅକ୍ଷର ରେଫରେନ୍ସ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "ଅବୈଧ UTF-8 ସାଙ୍କେତିକ ପାଠ୍ଯ- ଅତ୍ୟଧିକ ବଡ଼ ଅନୁକ୍ରମ"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "ଅବୈଧ UTF-8 ସାଙ୍କେତିକ ପାଠ୍ଯ- ଗୋଟିଏ ଆରମ୍ଭ ଅକ୍ଷର ନୁହଁ"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "ଅବୈଧ UTF-8 ସାଙ୍କେତିକ ପାଠ୍ଯ- '%s' ବୈଧ ନୁହଁ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ଦଲିଲ ଗୋଟିଏ ଉପାଦାନରେ ଆରମ୍ଭ ହେବା ଉଚିତ (ଉଦାହରଣ ସ୍ବରୂପ <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' ଅକ୍ଷର ପଛରେ ଆସୁଥିବା '%s' ଅକ୍ଷର ବୈଧ ନୁହେଁ; ଏହା ଗୋଟିଏ ବସ୍ତୁର ନାମକୁ ଆରମ୍ଭ କରିପାରିବ ନାହିଁ"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"ଅଯୁଗ୍ମ ସଂଖ୍ୟା '%s', ଖାଲି-ଉପାଦାନ ଟ୍ୟାଗ '%s' ପ୍ରାରମ୍ଭ ସୂଚକକୁ ସମାପ୍ତ କରିବା ପାଇଁ '>' ଅକ୍ଷର "
+"ଆଶାକରାଯାଉଥିଲା"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"ବିଚିତ୍ର ଅକ୍ଷର '%1$s', '%3$s' ଉପାଦାନର ଗୋଟିଏ ଗୁଣର ନାମ '%2$s' ପରେ '=' ପ୍ରତ୍ଯାଶିତ ଥିଲା"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"ବିଚିତ୍ର ଅକ୍ଷର '%s',  '%s' ଉପାଦାନର ପ୍ରାରମ୍ଭ ସୂଚକକୁ ସମାପ୍ତ କରିବା ପାଇଁ '>' ବା '/' ଅକ୍ଷର "
+"ପ୍ରତ୍ଯାଶିତ ଥିଲା, ଅଥବା ଇଚ୍ଛାଧୀନ ଭାବରେ ଗୋଟିଏ ଗୁଣ; ବୋଧହୁଏ ଆପଣ ଗୋଟିଏ ଗୁଣର ନାମରେ ଏକ ଅବୈଧ "
+"ଅକ୍ଷର ବ୍ଯବହାର କରିଛନ୍ତି"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"ବିଚିତ୍ର ଅକ୍ଷର '%1$s', ସମାନ ଚିହ୍ନ ପରେ '%3$s' ଉପାଦାନର '%2$s' ଗୁଣର ମୂଲ୍ଯ ଦେବା ପାଇଁ ଗୋଟିଏ "
+"ଖୋଲା ଉଦ୍ଧ୍ରୁତି ଚିହ୍ନ ପ୍ରତ୍ଯାଶିତ ଥିଲା"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'</' ଅକ୍ଷରଗୁଡ଼ିକ ପଛରେ ଆସୁଥିବା '%s' ଅକ୍ଷର ବୈଧ ନୁହେଁ; '%s' ଗୋଟିଏ ଉପାଦାନର ନାମର ଆରମ୍ଭ "
+"କରିପାରିବ ନାହିଁ"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"ବନ୍ଦ ଉପାଦାନ ନାମ '%2$s' ପଛରେ ଆସୁଥିବା '%1$s' ଅକ୍ଷର ବୈଧ ନୁହେଁ;  ଅନୁମତ ଅକ୍ଷର ହେଲା '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "ଉପାଦାନ '%s' ବନ୍ଦ କରାଯାଇଥିଲା, ବର୍ତ୍ତମାନ କୌଣସି ଉପାଦାନ ଖୋଲା ନାହିଁ"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "ଉପାଦାନ '%s' ବନ୍ଦ କରାଯାଇଥିଲା, କିନ୍ତୁ ବର୍ତ୍ତମାନ '%s' ଉପାଦାନଟି ଖୋଲା ଅଛି"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ଦଲିଲ ଖାଲି ଥିଲା ବା କେବଳ ଖାଲି ଯାଗା ଧାରଣ କରିଥିଲା"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "ଦଲିଲଟି ଗୋଟିଏ କୌଣିକ ବନ୍ଧନୀ '<'ର ଠିକ ପରେ ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"ଉପାଦାନଗୁଡ଼ିକ ଖୋଲା ଥାଇ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା'%s' ଉପାଦାନ ସର୍ବଶେଷ ଖୋଲା "
+"ଥିଲା"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା, <%s/> ସୂଚକ  ସମାପ୍ତ କରିବା ପାଇଁ ଗୋଟିଏ ବନ୍ଦ କୌଣିକ "
+"ବନ୍ଧନୀ ପ୍ରତ୍ଯାଶିତ ଥିଲା"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "ଉପାଦାନର ନାମ ମଧ୍ଯରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "ଗୁଣର ନାମ ମଧ୍ଯରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "ଉପାଦାନ ଆରମ୍ଭର ସୂଚକ ମଧ୍ଯରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"ଗୁଣର ନାମ ପଛରେ ଆସୁଥିବା ସମାନ ଚିହ୍ନ ପରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା; ଗୁଣର କିଛି "
+"ମୂଲ୍ଯ ନାହିଁ"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "ଗୁଣର ମୂଲ୍ଯ ମଧ୍ଯରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "'%s' ଉପାଦାନର ବନ୍ଦ ସୂଚକ ମଧ୍ଯରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "ଟିପ୍ପଣୀ ବା ସଂସାଧନ ସାଧନ ମଧ୍ଯରେ ଦଲିଲଟି ଅପ୍ରତ୍ଯାଶିତ ଭାବରେ ସମାପ୍ତ ହୋଇ ଗଲା"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ଭ୍ରଷ୍ଟ ବସ୍ତୁ"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "ଆଭ୍ଯନ୍ତରୀଣ ତୃଟି କିମ୍ବା ଭ୍ରଷ୍ଟ ବସ୍ତୁ"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ସ୍ମୃତି ପରିସର ବାହାରେ"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "ପଶ୍ଚାତ ଅନୁମାର୍ଗଣ ସୀମା ପହଞ୍ଚି ଯାଇଛି"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "ଏହି ଶୈଳୀ ଆଂଶିକ ମେଳନ ପାଇଁ ସମର୍ଥିତ ନ ଥିବା ବସ୍ତୁ ମାନଙ୍କୁ ଧାରଣ କରିଥାଏ"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "ଆଭ୍ଯନ୍ତରୀଣ ତୃଟି"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "ଆଂଶିକ ମେଳନ ପାଇଁ ସର୍ତ୍ତ ରୂପରେ ପଶ୍ଚାତ ନିର୍ଦ୍ଦେଶ ମାନ ସମର୍ଥିତ ନୁହଁନ୍ତି"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "ପୁନରାବର୍ତ୍ତନ ସୀମା ପହଞ୍ଚିଯାଇଛି"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ଶୂନ୍ଯ ଉପବାକ୍ଯଖଣ୍ଡ କାର୍ଯ୍ଯସ୍ଥଳୀ ପରିସୀମା ଶେଷ ହୋଇଯାଇଛି"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ନୂତନ ଧାଡି ପତାକା ମାନଙ୍କ ପାଇଁ ଅବୈଧ ମିଶ୍ରଣ"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ଅଜଣା ତୃଟି"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ନମୁନା ଶେଷରେ"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c ନମୁନା ଶେଷରେ"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ଅଚିହ୍ନା ଅକ୍ଷର ଅନୁସରଣ କରେ \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "ଅକ୍ଷର ପ୍ରକାର-ପରିବର୍ତ୍ତନ escapes (\\l, \\L, \\u, \\U) ଗୁଡ଼ିକ ଏଠାରେ ଅନୁମୋଦିତ ନୁହଁନ୍ତି"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} ପରିମାଣକ ରେ ସଂଖ୍ୟାଗୁଡ଼ିକ କ୍ରମରେ ନାହିଁ"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} ପରିମାଣକ ରେ ସଂଖ୍ୟାଟି ଅତ୍ୟଧିକ ବଡ଼"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "ବର୍ଣ୍ଣ ଶ୍ରେଣୀ ପାଇଁ ସମାପ୍ତି ] ଅନୁପସ୍ଥିତ ଅଛି"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ବର୍ଣ୍ଣ ଶ୍ରେଣୀରେ ଅବୈଧ ନିକାସ ଅନୁକ୍ରମ"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "ବର୍ଣ୍ଣ ଶ୍ରେଣୀରେ ପରିସର ଅବ୍ୟବସ୍ଥିତ"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ପୁନରାବର୍ତ୍ତନ ପାଇଁ କିଛି ନାହିଁ"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? ପରେ ଅଚିହ୍ନା ଅକ୍ଷର"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< ପରେ ଅଚିହ୍ନା ଅକ୍ଷର"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P ପରେ ଅଚିହ୍ନା ଅକ୍ଷର"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX ନାମିତ ଶ୍ରେଣୀଗୁଡ଼ିକ କେବଳ ଗୋଟିଏ ଶ୍ରେଣୀ ମଧ୍ଯରେ ସମର୍ଥିତ"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "ସମାପ୍ତକାରୀ ) ଅନୁପସ୍ଥିତ"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ଆରମ୍ଭ ବିନା ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R କିମ୍ବା (?[+-]ଅଙ୍କଗୁଡ଼ିକ ନିଶ୍ଚିତରୂପେ ) ପରେ ଆସିବା ଉଚିତ"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "ଅସ୍ତିତ୍ୱ ନଥିବା ଉପନମୁନାର ସନ୍ଦର୍ଭ"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "ଟିପ୍ପଣୀ ପରେ ) ଅନୁପସ୍ଥିତ"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "ନିୟମିତ ପରିପ୍ରକାଶଟି ଅତ୍ଯଧିକ ବଡ଼"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "ସ୍ମୃତିସ୍ଥାନ ପାଇବାରେ ବିଫଳ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "ପଛକୁ ଦେଖି ନିଶ୍ଚିତକରଣର ସ୍ଥାୟୀ ଆକାର ନଥାଏ"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "ବିକୃତ ସଂଖ୍ୟା କିମ୍ବା (?( ପରେଥିବା ନାମ"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "ପ୍ରତିବନ୍ଧିତ ଶ୍ରେଣୀ ଦୁଇରୁ ଅଧିକ ଶାଖା ଧାରଣ କରିଥାଏ"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( ପରେ ନିଶ୍ଚିତକରଣ ଆବଶ୍ୟକ"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ଅଜଣା POSIX ଶ୍ରେଣୀ ନାମ"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX ସଂକଳନ ଉପାଦାନଗୁଡ଼ିକ ସମର୍ଥିତ ନୁହଁ"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} ଅନୁକ୍ରମରେ ବର୍ଣ୍ଣର ମୂଲ୍ୟ ଅତ୍ୟଧିକ ବଡ଼"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ଅବୈଧ ସର୍ତ୍ତ (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "ପଛକୁ ଦେଖି ନିଶ୍ଚିତକରଣରେ \\C ଅନୁମୋଦିତ ନୁହଁ"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "ପୁନରାବର୍ତ୍ତୀ ଡାକରା ଅନିର୍ଦ୍ଧିଷ୍ଟ କାଳପାଇଁ ଚକ୍ର ସୃଷ୍ଟିକରିପାରେ"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ଉପନମୁନା ନାମରେ ଅନ୍ତକ ନାହିଁ"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "ଦୁଇଟି ନାମିତ ଉପନମୁନାର ଏକା ନାମ ଅଛି"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "\\P କିମ୍ବା \\p ଅନୁକ୍ରମଟି ବିକୃତ ହୋଇଯାଇଛି"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P କିମ୍ବା \\p ପରେ ଅଜଣା ଗୁଣଧର୍ମ ନାମ"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ଉପଢ଼ାଞ୍ଚା ନାମଟି ଅତ୍ୟଧିକ ବଡ଼ (ସର୍ବାଧିକ 32 ବର୍ଣ୍ଣ)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "ଅତ୍ୟଧିକ ନାମିତ ଉପଢ଼ାଞ୍ଚା (ସର୍ବାଧିକ 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "ଅଷ୍ଟମିକ ମୂଲ୍ୟଟି \\377 ଠାରୁ ବଡ଼"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE ଶ୍ରେଣୀ ଏକାଧିକ ଶାଖା ଧାରଣ କରେ"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE ଶ୍ରେଣୀର ପୁନରାବର୍ତ୍ତନ ଅନୁମୋଦିତ ନୁହଁ"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "ଅସଂଗତ NEWLINE ବିକଳ୍ପଗୁଡ଼ିକ"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g ଟି ଗୋଟିଏ ଆବଦ୍ଧ ନାମ ପରେ କିମ୍ବା ଇଚ୍ଛାଧୀନ ଆବଦ୍ଧ ପୂର୍ଣ୍ଣ ସଂଖ୍ୟା ପରେ ନଥାଏ"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "ଅପ୍ରତ୍ୟାଶିତ ପୁନରାବୃତ୍ତି"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "ସଂକେତ ଅତିପ୍ରବାହ"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran ସଙ୍କଳନ କାର୍ଯ୍ୟକ୍ଷେତ୍ର"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "ପୂର୍ବରୁ ଯାଞ୍ଚକରାଯାଇଥିବା ଉଲ୍ଲେଖିତ ଉପଢ଼ାଞ୍ଚା ମିଳୁନାହିଁ"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "%s ନିୟମିତ ପରିପ୍ରକାଶକୁ ମିଳାଇବା ସମୟରେ ତୃଟି: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE ଲାଇବ୍ରେରୀକୁ UTF8 ସମର୍ଥନ ବିନା ସଙ୍କଳନ କରାଯାଇଛି"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE ଲାଇବ୍ରେରୀକୁ UTF8 ଗୁଣଧର୍ମ ସମର୍ଥନ ବିନା ସଙ୍କଳନ କରାଯାଇଛି"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "%s ନିୟମିତ ପରିପ୍ରକାଶକୁ %d ଅକ୍ଷରରେ ସଙ୍କଳନ କରିବା ସମୟରେ ତୃଟି: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "%s ନିୟମିତ ପରିପ୍ରକାଶକୁ ଅନୁକୂଳତମ କରିବା ସମୟରେ ତୃଟି: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "ଷୋଡଶାଧାରୀ ଅଙ୍କ କିମ୍ବା '}' ଆଶା କରାଯାଉଥିଲା"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "ଷୋଡଶାଧାରୀ ଅଙ୍କ ଆଶା କରାଯାଉଥିଲା"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "ପ୍ରତୀକାତ୍ମକ ନିର୍ଦ୍ଦେଶରେ '<' ଅନୁପସ୍ଥିତ"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "ଅସମାପ୍ତ ପ୍ରତୀକାତ୍ମକ ନିର୍ଦ୍ଦେଶ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "ଶୂନ୍ଯ ଲମ୍ବ ବିଶିଷ୍ଟ ପ୍ରତୀକାତ୍ମକ ନିର୍ଦ୍ଦେଶ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "ଅଙ୍କ ଆଶା କରାଯାଉଥିଲା"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ଅବୈଧ ପ୍ରତୀକାତ୍ମକ ନିର୍ଦ୍ଦେଶ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "ପଥଭ୍ରଷ୍ଟ ନିର୍ଣ୍ଣୟ '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ଅଜଣା ପଳାୟନ ସଂପ୍ରତୀକ"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "ପରିବର୍ତ୍ତିତ ପାଠ୍ଯ \"%s\" ର %lu ଅକ୍ଷରରେ ବିଶ୍ଳଷଣ କରିବା ସମୟରେ ତୃଟି: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ଉଦ୍ଧ୍ରୁତ ପାଠ୍ଯ ଉଦ୍ଧ୍ରୁତ ଚିହ୍ନରେ ଆରମ୍ଭ ହୋଇ ନାହିଁ"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "ପାଠ୍ଯ ନିର୍ଦ୍ଦେଶ ବା ଅନ୍ଯ ଆବରଣ-ଉଦ୍ଧ୍ରୁତ ପାଠ୍ଯରେ ଅମେଳ ଉଦ୍ଧ୍ରୁତି ଚିହ୍ନ"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "ଗୋଟିଏ '\\' ଅକ୍ଷରର ଠିକ ପରେ ପାଠ୍ଯ ସମାପ୍ତ ହୋଇ ଗଲା (ପାଠ୍ଯଟି ଥିଲା: '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"%c ପାଇଁ ମେଳ ହେଉ ଥିବା ଉଦ୍ଧ୍ରୁତି ଚିହ୍ନ ମିଳିବା ପୂର୍ବରୁ ପାଠ୍ଯ ସମାପ୍ତ ହୋଇ ଗଲା. (ପାଠ୍ଯଟି ଥିଲା: '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ପାଠ୍ଯ ଖାଲି ଥିଲା (ବା କେବଳ ଖାଲି ଯାଗା ଧାରଣ କରିଥିଲା)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାରୁ ତଥ୍ଯ ପଢ଼ିବାରେ ଅସଫଳ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟା ସହିତ ସଂଯୋଗ ପାଇଁ ପାଇପ୍ ସୃଷ୍ଟି କରିବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "ନିର୍ଭରକ ପାଇପ୍ ରୁ ତଥ୍ଯ ପଢି଼ବାରେ ଅସଫଳ (%s)"
+
+# Gora: "change to directory" means "go to directory" here
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' ଡିରେକ୍ଟୋରିକୁ ଯିବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାକୁ ନିଷ୍ପାଦନ କରିବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "ଅବୈଧ ପ୍ରୋଗ୍ରାମ ନାମ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "ସଦିଶ ସ୍ବତନ୍ତ୍ରଚର %d ରେ ବାକ୍ଯଖଣ୍ଡ %s ଟି ଅବୈଧ ଅଟେ"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "ଏହି ପରିୂବେଶ ରେ ବାକ୍ଯଖଣ୍ଡ:%s ଅବୈଧ ଅଟେ"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "ଚଳନ୍ତି ଡିରେକ୍ଟୋରି: %s ଟି ଅବୈଧ ଅଟେ"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "ସାହାଯ୍ଯ କାରିକା (%s) କୁ ନିଷ୍ପାଦନ କରିବାରେ ଅସଫଳ"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାରୁ ତଥ୍ଯ ପଢି଼ବାରେ g_io_channel_win32_poll()ରେ ଅପ୍ରତ୍ଯାଶିତ ତ୍ରୁଟି"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାରୁ ତଥ୍ଯ ପଢି଼ବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାରୁ ତଥ୍ଯ ପଢି଼ବାରେ select()ରେ ଅପ୍ରତ୍ଯାଶିତ ତ୍ରୁଟି (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid()ରେ ଅପ୍ରତ୍ଯାଶିତ ତ୍ରୁଟି (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "ଶାଖା ସୃଷ୍ଟି କରିବାରେ ଅସଫଳ (%s"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟା \"%s\" ନିଷ୍ପାଦନ କରିବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାର ନିର୍ଗମ ବା ନିବେଶର ପୁନଃନିର୍ଦ୍ଦେଶନ କରିବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାକୁ ଶାଖାଯୁକ୍ତ କରିବାରେ ଅସଫଳ (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "ନିର୍ଭରକ ପ୍ରକ୍ରିୟାକୁ ନିଷ୍ପାଦନ କରିବାରେ ଅଜଣା ତ୍ରୁଟି \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "ନିର୍ଭରକ ପି.ଆଇ.ଡି. ପାଇପ୍  ରୁ ପର୍ଯ୍ଯାପ୍ତ ତଥ୍ଯ ପଢି଼ବାରେ ଅସଫଳ (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "ଇ.ଉ.ଟିଏଫ୍.-୮ ପାଇଁ ଅକ୍ଷରଟି ପରିସର ବାହାରେ"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "ରୁପାନ୍ତରଣ ନିବେଶେର ଅବୈଧ ଅନୁକ୍ରମ"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "ଇ.ଉ.ଟିଏଫ୍.-୧୬ ପାଇଁ ଅକ୍ଷରଟି ପରିସର ବାହାରେ"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ବ୍ଯବହାର:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ପସନ୍ଦ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "ସାହାଯ୍ଯ ପସନ୍ଦ"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "ସାହାଯ୍ଯ ପସନ୍ଦ ଦେଖାନ୍ତୁ"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "ସବୁ ସାହାଯ୍ଯ ପସନ୍ଦ ଦେଖାନ୍ତୁ"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "ପ୍ରୟୋଗ ପସନ୍ଦ"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%s ପାଇଁ ପୂର୍ଣ ସଂଖ୍ଯା ମୂଲ୍ଯ '%s' କୁ ବିଶ୍ଲେଷିଣ କରିହେଲା ନାହିଁ"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%s ପାଇଁ ପୂର୍ଣ ସଂଖ୍ଯା '%s' ର ମୂଲ୍ଯ ପରିସର ବାହାରେ"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%s' ଦ୍ବ୍ଯର୍ଥକ ମୂଲ୍ଯକୁ %s ପାଇଁ ବିଶ୍ଳେଷିତ କରିପାରିଲା ନାହିଁ"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "'%s' ଦ୍ବ୍ଯର୍ଥକ ମୂଲ୍ଯଟି %s ପାଇଁ ପରିସରର ବହିର୍ଭୂତ।"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "ରୁପାନ୍ତରଣ ର ବିକଲ୍ପ ରେ ତ୍ରୁଟି: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s ପାଇଁ ସ୍ବତନ୍ତ୍ରଚର ଟି ହଜି ଯାଇଛି"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "ଅଜଣା ପସନ୍ଦ %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "ଅନୁସନ୍ଧାନ ଡିରେକ୍ଟୋରି ମାନଙ୍କରେ ବୈଧ ଚାବି ଫାଇଲ ମିଳିଲା ନାହିଁ"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ଏହା ଏକ ନିୟମିତ ଫାଇଲ ନୁହେଁ"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ଫାଇଲ ଟି ଖାଲି ଅଛି"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "ମୁଖ୍ଯ ଫାଇଲ '%s' କୁ ଧାରଣ କରିଛି ଯାହାକି ଗୋଟିଏ ମୁଖ୍ଯ-ଗୁଣ ର ଯୋଡି, ସମୂହ, କିମ୍ବା ବାକ୍ଯ ନୁହେଁ"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "ଅବୈଧ ସମୂହ ନାମ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ କୌଣସି ସମୂହ ସହ ଆରମ୍ଭ ହୁଏ ନାହିଁ"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "ଅବୈଧ ଚାବି ନାମ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ ଟି ଗୋଟିଏ ଅସହାୟକ ସଂକେତ '%s' ଧାରଣ କରିଛି"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ େର '%s' ନାମ ଥିବା କୌଣସି ସମୂହ ନାହିଁ"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ େର '%s' ନାମ ଥିବା  କୌଣସି ଚାବିକାଠି ନାହିଁ"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ ଧାରଣ କରିଥିବା '%s' ଚାବିକାଠି ର ମୂଲ୍ଯ '%s' ଅଟେ, ଯାହାକି ଇଉ-ଟି-ଏଫ୍-୮ ନୁହେଁ"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "ମୂଖ୍ଯ ଫାଇଲ ଧାରଣ କରିଥିବା '%s' ଚାବିକାଠି ର ମୂଲ୍ଯ ନିରୂପଣ କରିହେବ ନାହିଁ"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"ମୂଖ୍ଯ ଫାଇଲ ଧାରଣ କରିଥିବା '%s' ଚାବିକାଠି ଗୋଟିଏ '%s' ସମୂହ ସହିତ ଏଛି ଯାହାର ମୂଲ୍ଯ ନିରୂପଣ କରିହେବ ନାହିଁ"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ େର '%s' ନାମ ଥିବା କୌଣସି ଚାବିକାଠି '%s' ସମୂହ ରେ ନାହିଁ "
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ ଟି ଲାଇନ୍ ର ସମାପ୍ତି ରେ ଏସ୍କେପ୍ ଅକ୍ଷର ଧାରଣ କରିଛି"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "ମୂଖ୍ଯ ଫାଇଲ '%s' ଅବୈଧ ଏସ୍କେପ୍ ଅକ୍ଷର ଧାରଣ କରିଛି"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' ର ମୂଲ୍ଯ ଗୋଟିଏ ସଂଖ୍ଯା ଭାବରେ ନିରୂପଣ କରିହେବ ନାହିଁ"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ପୂର୍ଣ ମୂଲ୍ଯ '%s' ପରିସର ର ବାହାରେ ଅଛି"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' ମୂଲ୍ଯକୁ ଗୋଟିଏ ଭାସମାନ ସଂଖ୍ଯା ଭାବରେ ବ୍ଯାଖ୍ଯା କରିହେବ ନାହିଁ"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' ର ମୂଲ୍ଯ ଗୋଟିଏ ବୁଲିଆନ୍ ଭାବରେ ନିରୂପଣ କରିହେବ ନାହିଁ"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "ଅତ୍ୟଧିକ ବଡ଼ ଗଣନା ମୂଲ୍ୟ %sକୁ ପଠାଯାଇଛି"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "ଧାରା ପୂର୍ବରୁ ବନ୍ଦଅଛି"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "ପ୍ରୟୋଗଟି ବାତିଲ ହୋଇଛି"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "ଅଜଣା ପ୍ରକାର"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s ଫାଇଲପ୍ରକାର"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s ପ୍ରକାର"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "ଅପ୍ରତ୍ୟାଶିତ ପ୍ରାରମ୍ଭିକ ଧାରାର ଶେଷ"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "ବେନାମୀ"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ଡେସ୍କଟପ ଫାଇଲ Exec କ୍ଷେତ୍ର ଉଲ୍ଲେଖ କରିନଥିଲା"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "ପ୍ରୟୋଗ ପାଇଁ ଆବଶ୍ୟକ ଟର୍ମିନାଲ ଖୋଜିବାରେ ଅସମର୍ଥ"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ଚାଳକ ପ୍ରୟୋଗ ବିନ୍ୟାସ ଫୋଲଡର %s କୁ ନିର୍ମାଣ କରିପାରିବେ ନାହିଁ: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ଚାଳକ MIME ବିନ୍ୟାସିତ ଫୋଲଡର %s ନିର୍ମାଣ କରିପାରିବ ନାହିଁ: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ଚାଳକ ଡେସ୍କଟପ ଫାଇଲ %s ନିର୍ମାଣ କରିପାରିବ ନାହିଁ"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s ପାଇଁ ଇଚ୍ଛାରୂପୀ ପରିଭାଷା"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ଡ୍ରାଇଭ ବାହାର କରିବାକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ଡ୍ରାଇଭ ସଞ୍ଚାର ମାଧ୍ଯମ ପାଇଁ ଚୟନକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem ସାଙ୍କେତିକରଣର ସଂସ୍କରଣ %dକୁ ନିୟନ୍ତ୍ରଣ କରୁଅଛି"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem ସାଙ୍କେତିକରଣରେ ତ୍ରୁଟିଯୁକ୍ତ ଟକେନ ସଂଖ୍ୟା (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ସାଙ୍କେତିକରଣର ସଂସ୍କରଣ %dକୁ ନିୟନ୍ତ୍ରଣ କରିପାରୁ ନାହିଁ"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ସାଙ୍କେତିକରଣରେ ତ୍ରୁଟିଯୁକ୍ତ ଟକେନ ସଂଖ୍ୟା (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon ପାଇଁ ଗୋଟିଏ GEmblem ଆଶାକରାଯାଉଅଛି"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ପ୍ରୟୋଗ ସମର୍ଥିତ ନୁହଁ"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "ଧାରଣ କରିଥିବା ସ୍ଥାପନ ଅବସ୍ଥିତ ନାହିଁ"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ଡିରେକ୍ଟୋରୀ ଉପରେ ନକଲ କରିପାରିବେ ନାହିଁ"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ଡିରେକ୍ଟୋରୀ ଉପରେ ଡିରେକ୍ଟୋରୀ ନକଲ କରିପାରିବେ ନାହିଁ"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "ଲକ୍ଷ୍ୟ ଫାଇଲ ଅବସ୍ଥିତ"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ପୁନରାବର୍ତ୍ତୀ ଭାବରେ ଡିରେକ୍ଟୋରୀ ନକଲ କରିପାରିବେ ନାହିଁ"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "ବିଶେଷ ଫାଇଲକୁ ନକଲ କରିପାରିବେ ନାହିଁ"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "ଅବୈଧ symlink ମୂଲ୍ୟ ପ୍ରଦାନ କରାଯାଇଛି"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ଆବର୍ଜନା ପାତ୍ର ସମର୍ଥିତ ନୁହଁ"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ଫାଇଲ ନାମଗୁଡ଼ିକ '%c' ଧାରଣ କରିପାରେ ନାହିଁ"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ଆକାର ସ୍ଥାପନକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ଏହି ଫାଇଲକୁ ନିୟନ୍ତ୍ରମ କରିବା ଫଳରେ କୌଣସି ପ୍ରୟୋଗ ପଞ୍ଜିକୃତ ହୋଇନାହିଁ"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ଗଣନାକାର ବନ୍ଦ ହୋଇଯାଇଛି"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ଫାଇଲ ଗଣନାକାର ପାଖରେ ଉତ୍କୃଷ୍ଟ ପ୍ରୟୋଗ ଅଛି"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ଫାଇଲ ଗଣନାକାର ପୂର୍ବରୁ ବନ୍ଦ ହୋଇଯାଇଛି"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ଫାଇଲ"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "ଚିତ୍ରସଂକେତ ଧାରଣକରିଥିବା ଫାଇଲ"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon ସାଙ୍କେତିକରଣର ସଂସ୍କରଣ %d କୁ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ ନାହିଁ"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon ପାଇଁ ତ୍ରୁଟିଯୁକ୍ତ ନିବେଶ ତଥ୍ୟ"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "ଧାରା query_info କୁ ସମର୍ଥନ କରେନାହିଁ"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "ଧାରାରେ Seek ସମର୍ଥିତ ନୁହଁ"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "ନିବେଶ ଧାରାରେ କାଟିବା ଅନୁମୋଦିତ ନୁହଁ"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "ଧାରାରେ କାଟିବା ଅନୁମୋଦିତ ନୁହଁ"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "ଭୁଲ ସଂଖ୍ୟକ ଟକେନ (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "ଶ୍ରେଣୀ ନାମ %s ପାଇଁ କୌଣସି ପ୍ରକାର ନାହିଁ"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "ପ୍ରକାର %s GIcon ଅନ୍ତରାପୃଷ୍ଠକୁ କାର୍ଯ୍ୟକାରି କରେନାହିଁ"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "ପ୍ରକାର %s ଶ୍ରେଣୀଭୁକ୍ତ ନୁହଁ"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "ତ୍ରୁଟିଯୁକ୍ତ ସଂସ୍କରଣ ସଂଖ୍ୟା: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "ପ୍ରକାର %s GIcon ଅନ୍ତରାପୃଷ୍ଠରେ ଟକେନ()ରୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "ଚିତ୍ରସଂକେତ ସାଙ୍କେତିକରଣର ପ୍ରଦତ୍ତ ସଂସ୍କରଣକୁ ନିୟନ୍ତ୍ରଣ କରାଯାଇପାରିବ ନାହିଁ"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ନିବେଶ ଧାରାରେ ପଢ଼ିବାକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "ଧାରା ପାଖରେ ଉତ୍କୃଷ୍ଟ ପ୍ରୟୋଗ ଅଛି"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "ପୂର୍ବନିର୍ଦ୍ଧାରିତ ସ୍ଥାନୀୟ ଡିରେକ୍ଟୋରୀ ମନିଟର ପ୍ରକାର ଖୋଜିବାରେ ଅସମର୍ଥ"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "ଅବୈଧ ଫାଇଲ ନାମ %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ଫାଇଲତନ୍ତ୍ର ସୂଚନା ପାଇବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ମୂଳ ଡିରେକ୍ଟୋରୀର ନାମ ବଦଳାଯାଇପାରିବ ନାହିଁ"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ଫାଇଲର ନାମ ବଦଳାଇବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ଫାଇଲର ନାମ ବଦଳାଯାଇପାରିବ ନାହିଁ, ଫାଇଲ ନାମ ପୂର୍ବରୁ ଅବସ୍ଥିତ"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "ଅବୈଧ ଫାଇଲ ନାମ"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ଫାଇଲ ଖୋଲିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ଡିରେକ୍ଟୋରୀ ଖୋଲିପାରିବେ ନାହିଁ"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ଫାଇଲ ଅପସାରଣରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ଫାଇଲକୁ ବର୍ଜନ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ଆବର୍ଜନା ପାତ୍ର ଡିରେକ୍ଟୋରୀ %sକୁ ନିର୍ମାଣ କରିବାରେ ଅସମର୍ଥ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ଆବର୍ଜନା ପାତ୍ର ପାଇଁ ଉଚ୍ଚସ୍ତରୀୟ ଡିରେକ୍ଟୋରୀ ଖୋଜିବାରେ ଅସମର୍ଥ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ଆବର୍ଜନା ପାତ୍ର ଡିରେକ୍ଟୋରୀ ଖୋଜିବା ଏବଂ ନିର୍ମାଣ କରିବାରେ ଅସମର୍ଥ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ବର୍ଜିତ ସୂଚନା ଫାଇଲ ନିର୍ମାଣରେ ଅସମର୍ଥ : %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ଫାଇଲକୁ ବର୍ଜନ କରିବାରେ ଅସମର୍ଥ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ଡିରେକ୍ଟୋରି ନିର୍ମାଣ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "ପ୍ରତୀକାତ୍ମକ ସମ୍ପର୍କ ନିର୍ମାଣରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ଫାଇଲ ଘୁଞ୍ଚାଇବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ଡିରେକ୍ଟୋରୀ ଉପରେ ଡିରେକ୍ଟୋରୀକୁ ଘୁଞ୍ଚାଇପାରିବେ ନାହିଁ"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "ନକଲ ସଂରକ୍ଷଣ ଫାଇଲ ନିର୍ମାଣ ଅସଫଳ ହେଲା"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "ଲକ୍ଷ୍ୟ ଫାଇଲ ଘୁଞ୍ଚାଇବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "ଅସମର୍ଥିତ ସ୍ଥାପନଗୁଡ଼ିକ ମଧ୍ଯରେ ଗତିକରନ୍ତୁ"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "ଗୁଣର ମୂଲ୍ୟ ନିଶ୍ଚିତରୂପେ non-NULL ହୋଇଥିବା ଉଚିତ"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "ଅବୈଧ ଗୁଣର ପ୍ରକାର (ବାକ୍ୟଖଣ୍ଡ ଆଶାକରାଯାଉଛି)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "ଅବୈଧ ବିସ୍ତୃତ ଗୁଣର ନାମ"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "ଅନୁଲଗ୍ନ ଗୁଣ '%s'କୁ ବିନ୍ୟାସ କରିବା ସମୟରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "ଫାଇଲ '%s'କୁ ଆରମ୍ଭ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ଅବୈଧ ସାଙ୍କେତିକରଣ)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ଫାଇଲ ନିରୂପକ ଆରମ୍ଭ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "ଅବୈଧ ଗୁଣ ପ୍ରକାର (unit32 ଆଶାକରାଯାଉଛି)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "ଅବୈଧ ଗୁଣ ପ୍ରକାର (unit64 ଆଶାକରାଯାଉଛି)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "ଅବୈଧ ଗୁଣ ପ୍ରକାର (ବାଇଟ ବାକ୍ୟଖଣ୍ଡ ଆଶାକରାଯାଉଛି)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "ଅନୁମତି ବିନ୍ୟାସକରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "ମାଲିକ ନିରୁପଣ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink ନିଶ୍ଚିତ ରୂପେ non-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "symlink ବିନ୍ୟାସ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "symlink ବିନ୍ୟାସ କରିବାରେ ତ୍ରୁଟି: ଫାଇଲଟି ଗୋଟିଏ symlink ନୁହଁ"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux ପ୍ରସଙ୍ଗଟି ନିଶ୍ଚିତ ରୂପେ non-NULL ଅଟେ"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux ପ୍ରସଙ୍ଗ ବିନ୍ୟାସ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ଏହି ତନ୍ତ୍ରରେ ସକ୍ରିୟ ହୋଇନାହିଁ"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "ଗୁଣ %s ବିନ୍ୟାସ କରିବା ସମର୍ଥିତ ନୁହଁ"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ଫାଇଲରୁ ପଢିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ଫାଇଲଭିତରେ ଅନୁସନ୍ଧାନ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ଫାଇଲ ବନ୍ଦକରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "ପୂର୍ବନିର୍ଦ୍ଧାରିତ ସ୍ଥାନୀୟ ଫାଇଲ ମନିଟର ପ୍ରକାର ଖୋଜିବାରେ ଅସମର୍ଥ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ଫାଇଲଭିତରେ ଲେଖିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "ପୁରୁଣା ନକଲ ସଂରକ୍ଷଣ ସଂଯୋଗ ଅପସାରଣ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ନକଲ ସଂରକ୍ଷଣ ନକଲ ନିର୍ମାଣରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ଅସ୍ଥାୟୀ ଫାଇଲର ନାମ ବଦଳାଇବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "ଫାଇଲ ବିଚ୍ଛିନ୍ନ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "ଫାଇଲ '%s' ଖୋଲିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "ଲକ୍ଷ୍ୟ ଫାଇଲଟି ଗୋଟିଏ ଡିରେକ୍ଟୋରୀ ଅଟେ"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "ଲକ୍ଷ୍ୟ ଫାଇଲଟି ଗୋଟିଏ ନିୟମିତ ଫାଇଲ ନୁହେଁ"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ଫାଇଲଟି ବାହାରୁ ପରିବର୍ତ୍ତିତ"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "ପୁରୁଣା ଫାଇଲକୁ ଅପସାରଣରେ ତ୍ରୁଟି: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "ଅବୈଧ GSeekType ଦିଆଯାଇଅଛି"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "ଅବୈଧ ଅନୁସନ୍ଧାନ ଅନୁରୋଧ"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream କୁ ବିଚ୍ଛିନ୍ନ କରିହେବ ନାହିଁ "
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "ସର୍ବାଧିକ ତଥ୍ୟ ଆରେ ସୀମା ପହଞ୍ଚିଗଲା"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "ସ୍ମୃତି ଫଳାଫଳ ବାକ୍ଯଖଣ୍ଡର ଆକାର ବଦଳାଯାଇପାରିବ ନାହିଁ"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "ସ୍ମୃତି ଫଳାଫଳ ବାକ୍ଯଖଣ୍ଡର ଆକାର ବଦଳାଇବାରେ ଅସଫଳ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "ସ୍ଥାପନ ବିସ୍ଥାପନକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "ସ୍ଥାପନ ବାହାର କରିବାକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "ସ୍ଥାପନ ପୁନଃସ୍ଥାପନକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "ସ୍ଥାପନ ସୂଚୀପତ୍ର ପ୍ରକାର ଅନୁମାନକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "ସ୍ଥାପନ ସମକାଳୀନ ସୂଚୀପତ୍ର ପ୍ରକାର ଅନୁମାନକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "ଫଳାଫଳ ବାକ୍ଯଖଣ୍ଡ ଲେଖିବାକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "ଉତ୍ସ ବାକ୍ୟଖଣ୍ଡଟି ପୂର୍ବରୁ ବନ୍ଦହୋଇଯାଇଛି"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "ନାମ"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "ଚିତ୍ରସଂକେତର ନାମ"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "ନାମଗୁଡ଼ିକ"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "ଚିତ୍ରସଂକେତ ନାମଗୁଡ଼ିକୁ ଧାରଣକରିଥିବା ଆରେ"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "ପୂର୍ବନିର୍ଦ୍ଧାରିତ ନିବର୍ତ୍ତନଗୁଡ଼ିକୁ ବ୍ୟବହାର କରନ୍ତୁ"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' ବର୍ଣ୍ଣ ଠାରେ ସଂକ୍ଷିପ୍ତ କରାଯାଇଥିବା ନାମରୁ ମିଳିଥିବା ପୂର୍ବନିର୍ଦ୍ଧାରିତ ଶେଷ ଅବଲମ୍ବନକୁ ବ୍ୟବହାର "
+"କରାଯିବ କି ନାହିଁ. ଏକାଧିକ ନାମ ଦିଆଯାଇଥିଲେ ପ୍ରଥମ ନାମ ପରେଥିବା ନାମଗୁଡ଼ିକୁ ଅଗ୍ରାହ୍ୟ କରେ."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon ସାଙ୍କେତିକରଣର ସଂସ୍କରଣ %dକୁ ନିୟନ୍ତ୍ରଣ କରାଯାଇପାରିବ ନାହିଁ"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ଫାଇଲ ବର୍ଣ୍ଣନାକାରୀ"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "ପଢ଼ିବା ପାଇଁ ଫାଇଲ ବର୍ଣ୍ଣନାକାରୀ"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ଫାଇଲ ବର୍ଣ୍ଣନାକାରୀକୁ ବନ୍ଦ କରନ୍ତୁ"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "ଧାରା ବନ୍ଦ ହେବା ପରେ ଫାଇଲ ବର୍ଣ୍ଣନାକାରୀକୁ ବନ୍ଦ କରିବା ଉଚିତ କି ନୁହଁ"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unixରୁ ପଢିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix ବନ୍ଦକରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ଫାଇଲତନ୍ତ୍ର ମୂଳସ୍ଥାନ"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "ଲେଖିବା ପାଇଁ ଫାଇଲ ବର୍ଣ୍ଣନାକାରୀ"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unixରେ ଲେଖିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ଆକାର ବାହାର କରିବାକୁ କାର୍ଯ୍ୟକାରୀ କରେନାହିଁ"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "ପ୍ରୟୋଗକୁ ଖୋଜିପାରିଲା ନାହିଁ"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "ପ୍ରୟୋଗକୁ ଆରମ୍ଭକରିବାରେ ତ୍ରୁଟି: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIଗୁଡ଼ିକ ସମର୍ଥିତ ନୁହଁ"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 ରେ ସଂସ୍ଥା ପରିବର୍ତ୍ତନ ସମର୍ଥିତ ନୁହଁ"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 ରେ ସଂସ୍ଥା ନିର୍ମାଣ ସମର୍ଥିତ ନୁହଁ"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ଭରଣଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ ନାହିଁ"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "ଲମ୍ବା ତାଲିକାଭୁକ୍ତ ଶୈଳୀ ବ୍ୟବହାର କରନ୍ତୁ"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 0000000..bb8d210
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,1814 @@
+# translation of glib.HEAD.po to Punjabi
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+#
+# Amanpreet Singh Alam <amanliunx@netscapet.net>, 2004.
+# ASB <aalam@users.sf.net>, 2004, 2005, 2006, 2007.
+# Amanpreet Singh Alam <aalam@users.sf.net>, 2008.
+# A S Alam <aalam@users.sf.net>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-14 16:41+0000\n"
+"Last-Translator: A S Alam <aalam@users.sf.net>\n"
+"Language-Team: Punjabi/Panjabi <punjab-l10n@list.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "ਇਕਾਈ '%2$s' ਲਈ ਗਲਤ ਗੁਣ '%1$s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "ਇਕਾਈ '%2$s' ਲਈ '%1$s' ਗੁਣ ਨਹੀਂ ਲੱਭਿਆ"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "ਗਲਤ ਟੈਗ '%s', ਟੈਗ '%s' ਲੋੜੀਦਾ ਸੀ"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%2$s' ਵਿੱਚ '%1$s' ਟੈਗ"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "ਡਾਟਾ ਡਾਇਰੈਕਟਰੀਆਂ ਵਿੱਚ ਕੋਈ ਢੁੱਕਵੀਂ ਬੁੱਕਮਾਰਕ ਫਾਇਲ ਨਹੀਂ ਲੱਭੀ"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' ਲਈ ਇੱਕ ਬੁੱਕਮਾਰਕ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' ਲਈ ਕੋਈ ਬੁੱਕਮਾਰਕ ਨਹੀਂ ਲੱਭਾ"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s'  ਲਈ ਬੁੱਕਮਾਰਕ ਵਿੱਚ ਕੋਈ MIME ਕਿਸਮ ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ ਹੈ"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' ਲਈ ਬੁੱਕਮਾਰਕ ਕੋਈ ਪ੍ਰਾਈਵੇਟ ਫਲੈਗ ਨਹੀਂ ਦੱਸਿਆ ਗਿਆ"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' ਲਈ ਬੁੱਕਮਾਰਕ ਵਿੱਚ ਕੋਈ ਗਰੁੱਪ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "ਕਿਸੇ ਕਾਰਜ ਨੇ '%2$s' ਲਈ '%1$s' ਨਾਂ ਨਾਲ ਕੋਈ ਬੁੱਕਮਾਰਕ ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤਾ"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec ਲਾਈਨ '%s' ਨੂੰ URI '%s' ਨਾਲ ਫੈਲਾਉਣ ਲਈ ਫੇਲ੍ਹ ਹੋਇਆ"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "ਕਰੈਕਟਰ ਸਮੂਹ %s ਤੋਂ %s ਵਿੱਚ ਬਦਲਣ ਇਸ ਵੇਲੇ ਸੰਭਵ ਨਹੀਂ"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' ਤੋੱ '%s' ਵਿੱਚ ਬਦਲਣ ਵਾਲਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "ਬਦਲਣ ਲਈ ਦਿੱਤੀ ਸਤਰ ਵਿੱਚ ਬਾਇਟ ਦਾ ਸਰੂਪ ਠੀਕ ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "ਤਬਦੀਲੀ ਦੌਰਾਨ ਗਲਤੀ  %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "ਸਤਰ ਦੇ ਅਖੀਰ ਤੇ ਅੱਖਰਾਂ ਦਾ ਸਰੂਪ ਅਧੂਰਾ ਹੈ"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ਕੋਡ ਸਮੂਹ %s ਤੋਂ %s ਵਿੱਚ ਤਬਦੀਲੀ ਸੰਭਵ ਨਹੀਂ"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' \"file\" ਸਕੀਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਸਲ URI ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "ਲੋਕਲ ਫਾਇਲ URI %s ਵਿੱਚ ਇਹ ਨਿਸ਼ਾਨ # ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' ਜਾਇਜ਼ ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI '%s' ਦੇ ਮੇਜ਼ਬਾਨ ਦਾ ਨਾਂ ਜਾਇਜ਼ ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' ਕੋਲ ਗਲਤ ਅੱਖਰ ਹਨ"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "ਮਾਰਗ-ਨਾਂ %s ਇਕ ਅਸਲੀ (absolute) ਮਾਰਗ ਨਹੀਂ ਹੈ"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ਗਲਤ ਮੇਜ਼ਬਾਨ ਨਾਂ"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਖੋਲ੍ਹਣ ਲਈ ਗਲਤੀ: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "ਫਾਇਲ \"%2$s\" ਖੋਲ੍ਹਣ ਲਈ %1$lu ਬਾਈਟ ਨਹੀਂ ਦਿੱਤੇ ਜਾ ਸਕੇ"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ਫਾਇਲ ਪੜ੍ਹਨ 'ਚ ਗਲਤੀ: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "ਫਾਇਲ \"%s\" ਬਹੁਤ ਵੱਡੀ ਹੈ"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "ਫਾਇਲ '%s' ਤੋਂ ਪੜ੍ਹਨ 'ਚ ਅਸਫ਼ਲ: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' ਫਾਇਲ ਖੋਲ੍ਹ 'ਚ ਗਲਤੀ %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਦੀਆਂ ਵਿਸ਼ੇਸਤਾ ਖੋਲ੍ਹਣ 'ਚ ਫੇਲ੍ਹ: fstat() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਖੋਲ੍ਹਣ ਵਿੱਚ ਫੇਲ੍ਹ: fdopen() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਦਾ ਨਾਂ '%s' ਬਦਲਣ 'ਚ ਅਸਫ਼ਲ: g_rename() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ਫਾਇਲ %s' ਬਣਾਉਣ ਵਿੱਚ ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਨੂੰ ਲਿਖਣ ਲਈ ਖੋਲ੍ਹਣ ਵਾਸਤੇ ਫੇਲ੍ਹ: fdopen() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਨੂੰ ਲਿਖਣ ਲਈ ਫੇਲ੍ਹ: fwrite() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਨੂੰ ਲਿਖਣ ਲਈ ਫੇਲ੍ਹ: fwrite() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਨੂੰ ਲਿਖਣ ਲਈ ਫੇਲ੍ਹ: fwrite() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਨੂੰ ਬੰਦ ਕਰਨ 'ਚ ਫੇਲ੍ਹ: fdopen() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "ਮੌਜੂਦਾ ਫਾਇਲ '%s' ਨੂੰ ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: g_unlink() ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "ਟੈਪਲੇਟ '%s' ਸਹੀਂ ਨਹੀਂ ਹੈ, ਇਸ ਕੋਲ '%s' ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "ਟੈਂਪਲੇਟ '%s' XXXXXX ਨਹੀਂ ਰੱਖਦਾ ਹੈ"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "ਸਿੰਬੋਲਿਕ ਲਿੰਕ '%s' ਪੜ੍ਹਨ ਲਈ ਫੇਲ੍ਹ: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "ਸਿੰਬੋਲਿਕ ਲਿੰਕ ਮੱਦਦ ਪ੍ਰਾਪਤ ਨਹੀਂ ਹਨ"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' ਤੋਂ '%s' ਬਦਲਣ ਵਾਲਾ ਖੋਲਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string ਵਿੱਚ ਰਾਅ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "ਕੁਝ ਅਣ-ਬਦਲਿਆ ਡਾਟਾ ਬਫਰ ਵਿੱਚ ਪਿਆ ਹੈ"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "ਇਕ ਅੱਧ ਪਚਦੇ ਅੱਖਰ ਉੱਤੇ ਚੈਨਲ ਬੰਦ ਹੋ ਗਿਆ"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end ਵਿੱਚ ਰਾਅ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ਫਾਇਲ '%s': ਖੋਲ੍ਹਣ ਵਿੱਚ ਫੇਲ੍ਹ: fdopen() ਫੇਲ੍ਹ: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ਫਾਇਲ '%s' ਮਿਲਾਉਣ ਵਿੱਚ ਫੇਲ੍ਹ: mmap() ਫੇਲ੍ਹ ਹੋਇਆ: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "ਲਾਈਨ %d ਅੱਖਰ %d ਉੱਤੇ ਗਲਤੀ:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "ਸਤਰ %d ਉੱਤੇ ਗਲਤੀ: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "ਖਾਲੀ ਐਂਟਟੀ '&;' ਵੇਖੋ; ਵੈਧ ਐਂਟਟੀਆਂ ਹਨ : &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"ਇਹ %s ਅੱਖਰ ਕੋਈ ਐਂਟਟੀ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਗਲਤ ਹੈ & ਅੱਖਰ ਇਕਾਈ ਆਰੰਭ ਕਰਦਾ ਹੈ; ਜੇਕਰ ਇਹ ਐਪਰਸੈਡ ਐਂਟਟੀ "
+"ਬਣਨਯੋਗ ਨਹੀਂ ਤਾਂ ਇਸ ਨੂੰ ਇੰਝ &amp; ਛੱਡ ਦਿਓ"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "'%s' ਅੱਖਰ ਇੱਕ ਐਂਟਟੀ ਦੇ ਨਾਂ ਲਈ ਜਾਇਜ਼ ਨਹੀਂ ਹੈ"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "ਐਂਟਟੀ ਨਾਂ '%s' ਪਤਾ ਨਹੀਂ ਹੈ"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"ਐਂਟਟੀ ਸੈਮੀਕਾਲਨ ਨਾਲ ਖਤਮ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੋ ਸਕਦਾ ਕਿ ਤੁਸੀਂ ਇੱਕ ਐਪਰਸੈਨਡ ਅੱਖਰ ਬਿਨਾਂ ਐਂਟਟੀ ਸ਼ੁਰੂ ਕੀਤੇ "
+"ਹੀ ਵਰਤ ਰਹੇ ਹੋ, ਐਪਰਸੈਨਡ ਇਸਤਰਾਂ &amp; ਛੱਡੋ"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+" '%-.*s' ਪਾਰਸ ਕਰਨ ਵਿੱਚ ਫੇਲ੍ਹ, ਜੋ ਕਿ ਅੱਖਰ ਵਿੱਚ ਨੰਬਰ ਹੋਣ ਚਾਹੀਦਾ ਹੈ ਵੇਖੋ (&#234; ਉਦਾਹਰਨ "
+"ਲਈ) - ਅੱਖਰ ਬਹੁਤ ਲੰਮਾ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "ਅੱਖਰ ਰੈਫਰੈਂਸ '%-.*s' ਇਕ ਚੁਣੇ ਅੱਖਰ ਨੂੰ ਇਨਕੋਡ ਨਹੀਂ ਕਰ ਸਕਦਾ"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ਖਾਲੀ ਅੱਖਰ ਰੈਫਰੈਂਸ, ਕੋਈ ਨੰਬਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਜਿਵੇਂ ਕਿ &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"ਅੱਖਰੀ ਰੈਫਰੈਂਸ ਸੈਮੀਕਾਲਨ ਨਾਲ ਖਤਮ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੋ ਕਿ ਤੁਸੀ ਇੱਕ ਐਪਰਸੈਨਡ ਅੱਖਰ ਬਿਨਾਂ ਐਂਟਟੀ ਸ਼ੁਰੂ ਕੀਤੇ "
+"ਹੀ ਵਰਤ ਰਹੇ ਹੋ, ਐਪਰਸੈਨਡ ਇੰਝ &amp; ਛੱਡੋ"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ਅਧੂਰਾ ਐਂਟਟੀ ਰੈਫਰੈਂਸ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "ਅਧੂਰਾ ਅੱਖਰੀ ਰੈਫਰੈਂਸ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "ਗਲਤ UTF-8 ਇੰਕੋਡ ਟੈਕਸਟ - ਓਵਰਲਾਂਗ ਕ੍ਰਮ"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "ਗਲਤ UTF-8 ਇੰਕੋਡ ਟੈਕਸਟ - ਇੱਕ ਸ਼ੁਰੂਆਤੀ ਅੱਖਰ ਨਹੀਂ"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "ਗਲਤ UTF-8 ਇੰਕੋਡ ਅੱਖਰ - ਵੈਧ '%s' ਨਹੀਂ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ਦਸਤਾਵੇਜ਼ ਇਕ ਐਲੀਮਿੰਟ (ਜਿਵੇਂ ਕਿ <book>) ਨਾਲ ਸ਼ੁਰੂ ਹੋਣਾ ਜਰੂਰੀ ਹੈ"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"ਇਹ '%s' ਜਾਇਜ ਅੱਖਰ ਨਹੀਂ ਹੈ ਜੋ ਕਿ '<' ਅੱਖਰ ਤੋਂ ਮਗਰ ਹੈ, ਇਹ ਕਿਸੇ ਐਲੀਮਿੰਟ ਦੇ ਨਾਂ ਨਾਲ ਆਰੰਭ ਨਹੀਂ "
+"ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "ਅਨਿਸ਼ਚਿਤ ਅੱਖਰ '%s', ਇਹ '>' ਅੱਖਰ ਦੀ ਉਮੀਦ ਖਾਲੀ-ਐਲੀਮਿੰਟ ਟੈਗ '%s' ਬੰਦ ਕਰਨ ਲਈ ਸੀ"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "ਅਨਿਸ਼ਚਿਤ ਅੱਖਰ %1$s ਹੈ, ਐਲੀਮਿੰਟ %3$s ਦੇ ਇਸ ਵਿਸ਼ੇਸਤਾ ਨਾਂ %2$s ਮਗਰੋਂ = ਲੋੜੀਦਾ ਸੀ"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"ਅਨਿਸ਼ਚਿਤ ਅੱਖਰ '%s' ਹੈ, ਇਕ ਅੱਖਰ '>'ਜਾਂ '/' ਨਿਸ਼ਚਿਤ ਅੱਖਰ ਹੈ ਤਾਂ ਕਿ ਹਿੱਸੇ ਦੇ ਸ਼ੁਰੂ ਕੀਤੇ ਟੈਗ ਨੂੰ "
+"ਖਤਮ ਕੀਤੀ ਜਾ ਸਕੇ '%s', ਜਾਂ ਚੁਣਿਆ ਪ੍ਰਤੀਕ, ਜਿਸ ਲ਼ਈ ਤੁਸੀ ਗਲਤ ਨਾਂ ਭਰਿਆ ਹੈ।"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"ਅਨਿਸ਼ਚਿਤ ਅੱਖਰ '%1$s', ਬਰਾਬਰ ਦੇ ਨਿਸ਼ਾਨ ਮਗਰੋਂ ਇਕ ਖੁੱਲਾ ਹਵਾਲਾ ਨਿਸ਼ਾਨ ਜ਼ਰੂਰੀ ਹੈ, ਜਦੋਂ ਕਿ ਤੁਸੀਂ "
+"ਇੱਕ ਐਲੀਮਿੰਟ '%3$s' ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ '%2$s' ਲਈ ਮੁੱਲ ਦੇ ਰਹੇ ਹੋ।"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"ਇਸ '</' ਅੱਖਰ ਮਗਰੋਂ ਇਹ %s' ਅੱਖਰ ਜ਼ਾਇਜ ਨਹੀਂ ਹੈ, '%s' ਇੱਕ ਐਲੀਮਿੰਟ ਦੇ ਨਾਂ ਨਾਲ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋ ਸਕਦਾ "
+"ਹੈ।"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "ਇਹ '%s' ਅੱਖਰ '%s' ਐਲੀਮਿੰਟ ਨਾਂ ਮਗਰੋਂ ਜਾਇਜ ਨਹੀਂ ਹੈ ; ਸਿਰਫ '>' ਅੱਖਰ ਹੀ ਮਨਜ਼ੂਰ ਹੈ"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "ਇਹ ਐਲੀਮਿੰਟ '%s' ਬੰਦ ਸੀ, ਕੋਈ ਐਲੀਮਿੰਟ ਖੁੱਲ੍ਹਾ ਨਹੀਂ ਹੈ"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "ਇਹ ਐਲੀਮਿੰਟ '%s' ਬੰਦ ਸੀ, ਪਰ ਅਜੇ '%s' ਐਲੀਮਿੰਟ ਖੁੱਲਾ ਹੈ"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "ਦਸਤਾਵੇਜ਼ ਖਾਲੀ ਹੈ ਜਾਂ ਕੇਵਲ ਖਾਲੀ ਥਾਂ ਹੀ ਰੱਖਦਾ ਹੈ"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ, ਇਕ ਖੁੱਲੀ ਬਰੈਕਟ '<' ਪਾਉਣ ਮਗਰੋਂ"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ, ਜਦੋਂ ਕਿ-ਇਹ '%s' ਆਖਰੀ ਐਲੀਮਿੰਟ ਖੁੱਲਾ ਹੈ"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ, ਇਕ ਬੰਦ ਬਰੈਕਟ <%s/> ਜੋ ਕਿ ਪੱਟੀ ਨੂੰ ਬੰਦ ਕਰਦੀ ਹੈ, ਦੀ ਉਮੀਦ ਸੀ"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "ਇਕ ਐਲੀਮਿੰਟ ਦੇ ਨਾਂ ਕਰਕੇ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "ਇਕ ਗੁਣ ਦੇ ਨਾਂ ਕਰਕੇ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "ਇਕ ਐਲੀਮਿੰਟ-ਖੋਲ੍ਹਣ ਟੈਗ ਕਰਕੇ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"ਇਕ ਗੁਣ ਦੇ ਨਾਂ ਤੋਂ ਪਹਿਲਾਂ ਬਰਾਬਰ ਦੇ ਨਿਸ਼ਾਨ ਕਰਕੇ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ, ਗੁਣ ਦਾ ਕੋਈ ਮੁੱਲ "
+"ਨਹੀਂ ਹੈ"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "ਇਕ ਗੁਣ ਦੇ ਮੁੱਲ ਕਰਕੇ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "ਇਕ ਐਲੀਮਿੰਟ '%s' ਦੇ ਟੈਗ ਕਰਕੇ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "ਇਕ ਟਿੱਪਣੀ ਜਾਂ ਹਦਾਇਤ ਚਲਾਉਣ ਦੌਰਾਨ ਦਸਤਾਵੇਜ਼ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਹੈ"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ਨਿਕਾਰਾ ਆਬਜੈਕਟ"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ ਜਾਂ ਨਿਕਾਰਾ ਆਬਜੈਕਟ"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ਮੈਮੋਰੀ ਖਤਮ ਹੋਈ"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "ਬੈਕ-ਟਰੈਕਿੰਗ ਲਿਸਟ ਆ ਗਈ"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "ਪੈਟਰਨ ਵਿੱਚ ਆਈਟਮਾਂ ਹਨ, ਜੋ ਕਿ ਅਧੂਰੀ ਮੈਂਚਿੰਗ ਲਈ ਸਹਾਇਕ ਨਹੀਂ।"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "ਬੈਕ ਰੈਡਰੈਂਸ ਕੰਡੀਸ਼ਨ ਵਾਂਗ ਅਧੂਰੀ ਮੈਂਚਿੰਗ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹਨ"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "ਰੀਕਰਸਵ ਲਿਮਟ ਆਈ"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ਖਾਲੀ ਸਬ-ਲਾਈਨਾਂ ਲਈ ਵਰਕਸਪੇਸ ਲਿਸਮਟ ਆਈ"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ਗਲਤ ਨਵੀਂ ਲਾਈਨ ਫਲੈਗ ਦਾ ਸੰਯੋਗ"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ਅਣਜਾਣ ਗਲਤੀ"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ਪੈਟਰਨ ਦੇ ਅੰਤ ਉੱਤੇ"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\ਪੈਟਰਨ ਦੇ ਅੰਤ ਉੱਤੇ c"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "ਬੇਪਛਾਣ ਕਰੈਕਟਰ ਅੱਗੇ \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "ਅੱਖਰ ਅੱਖਰ ਬਦਲਣਾ (\\l, \\L, \\u, \\U) ਇੱਥੇ ਮਨਜ਼ੂਰ ਨਹੀਂ"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "ਨੰਬਰ {} ਗਿਣਤੀ ਤੋਂ ਬਾਹਰ ਹਨ"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "ਨੰਬਰ {} ਵਿੱਚ ਆਉਣ ਤੋਂ ਬਹੁਤ ਵੱਡਾ"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "ਕਰੈਕਟਰ ਕਲਾਸ ਲਈ ਟਰਮੀਨੇਸ਼ਨ ] ਗੁੰਮ ਹੈ"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ਕਰੈਕਟਰ ਕਲਾਸ ਵਿੱਚ ਅਸਕੇਪ ਲੜੀ ਗਲਤ ਹੈ"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "ਕਰੈਕਟਰ ਕਲਾਸ ਵਿੱਚ ਰੇਜ਼ ਬਿਨ-ਕ੍ਰਮ"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ਰਪੀਟ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? ਦੇ ਬਾਅਦ ਬੇਪਛਾਣ ਕਰੈਕਟਰ"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< ਬਾਅਦ ਬੇਪਛਾਣ ਕਰੈਕਟਰ"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P ਬਾਅਦ ਬੇਪਛਾਣ ਕਰੈਕਟਰ"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX ਨਾਂ ਦੀ ਕਲਾਸ ਕੇਵਲ ਇੱਕ ਹੀ ਕਲਾਸ ਸਹਿਯੋਗੀ ਹੈ"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "ਟਰਮੀਨੇਸ਼ਨ ) ਗੁੰਮ ਹੈ"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") ਬਿਨਾਂ ( ਖੋਲ੍ਹਣ ਦੇ ਹੈ"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ਜਾਂ (?[+-]ਡਿਜ਼ਟ ਦੇ ਬਾਅਦ ) ਹੋਣਾ ਚਾਹੀਦੀ ਹੈ"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "ਗ਼ੈਰ ਮੌਜੂਦ ਸਬ-ਪੈਟਰਨ ਲਈ ਰੈਫਰੈਂਸ"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "ਟਿੱਪਣੀ ਦੇ ਬਾਅਦ ) ਗੁੰਮ ਹੈ"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "ਰੈਗੂਲਰ ਸਮੀਕਰਨ ਬਹੁਤ ਲੰਮਾ ਹੈ "
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "ਮੈਮੋਰੀ ਲੈਣ ਲਈ ਫੇਲ੍ਹ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind ਸਥਿਰ ਲੰਬਾਈ ਵਿੱਚ ਨਹੀਂ"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( ਦੇ ਬਾਅਦ ਨਿਕਾਰਾ ਨੰਬਰ ਜਾਂ ਨਾਂ"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "ਕੰਡੀਸ਼ਨ ਗਰੁੱਪ ਵਿੱਚ ਦੋ ਤੋਂ ਵੱਧ ਬਰਾਂਚਾਂ ਹਨ"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr " (?( ਤੋਂ ਬਾਅਦ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਲੋੜ ਸੀ"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "ਅਣਜਾਣ POSIX ਕਲਾਸ ਨਾਂ"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX ਲੋਕੇਲ ਐਲੀਮੈਂਟ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} ਵਿੱਚ ਅੱਖਰ ਮੁੱਖ, ਲੜੀ ਬਹੁਤ ਲੰਮੀ ਹੈ"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ਗਲਤ ਕੰਡੀਸ਼ਨ (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C lookbehind assertion ਲਈ ਸਹਾਇਕ ਨਹੀਂ"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "ਲਗਾਤਾਰ ਕਾਲ ਨਾਲ ਬੇਅੰਤ ਲੂਪ ਚਾਲੂ ਹੋ ਸਕਦਾ ਸੀ"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ਸਬ-ਪੈਟਰਨ ਨਾਂ  ਵਿੱਚ ਟਰਮੀਨੇਟਰ ਗੁੰਮ ਹੈ"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "ਦੋ ਨਾਮੀ ਸਬ-ਪੈਟਰਨ ਲਈ ਇੱਕੋ ਨਾਂ ਹੈ"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ਨਿਕਾਰਾ \\P ਜਾਂ \\p ਕ੍ਰਮ"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P ਜਾਂ \\p ਦੇ ਬਾਅਦ ਅਣਜਾਣ ਵਿਸ਼ੇਸ਼ਤਾ ਨਾਂ"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ਸਬ-ਪੈਟਰਨ ਬਹੁਤ ਲੰਮਾ ਹੈ (ਵੱਧੋ-ਵੱਧ ੩੨ ਅੱਖਰ)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "ਬਹੁਤ ਵੱਧ ਸਬ-ਪੈਟਰਨ (ਵੱਧੋ-ਵੱਧ ੧੦,੦੦੦)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "ਓਕਟਲ ਮੁੱਲ \\੩੭੭ ਤੋਂ ਵੱਧ"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE ਗਰੁੱਪ ਵਿੱਚ ਇੱਕ ਤੋਂ ਵੱਧ ਬਰਾਂਚਾਂ ਹਨ"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE ਗਰੁੱਪ ਨੂੰ ਦੁਹਰਾਉਣਾ ਮਨਜ਼ੂਰ ਨਹੀਂ"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "ਗਲਤ NEWLINE ਚੋਣਾਂ"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g ਨੂੰ ਕਿਸੇ ਵੀ ਬਰੈਕਟ ਨਾਂ ਜਾਂ ਚੋਣਵੀਂ ਬਰੈਕਟ ਕੀਤੇ ਗ਼ੈਰ-ਸਿਫ਼ਰ ਨੰਬਰ ਬਾਅਦ ਮਨਜ਼ੂਰ ਨਹੀਂ"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "ਅਣਜਾਣ ਰਪੀਟ"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "ਕੋਡ ਓਵਰਫਲੋ"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "ਓਵਰ-ਰਨ ਕੰਪਾਇਲਿੰਗ ਵਰਕਸਪੇਸ"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "ਪਹਿਲਾਂ-ਚੈੱਕ ਕੀਤਾ ਰੈਂਫਰਡ ਸਬ-ਪੈਟਰਨ ਨਹੀਂ ਲੱਭਿਆ"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "ਰੈਗੂਲਰ ਐਕਸਪਰੈਸ਼ਨ %s ਮਿਲਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE ਲਾਇਬਰੇਰੀ ਨੂੰ UTF8 ਮੱਦਦ ਬਗੈਰ ਕੰਪਾਇਲ ਕੀਤਾ ਗਿਆ ਹੈ।"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE ਲਾਇਬਰੇਰੀ ਨੂੰ UTF8 ਵਿਸ਼ੇਸ਼ਤਾ ਮੱਦਦ ਬਗੈਰ ਕੰਪਾਇਲ ਕੀਤਾ ਗਿਆ ਹੈ।"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "ਅੱਖਰ %2$d ਉੱਤੇ ਰੈਗੂਲਰ ਸਮੀਕਰਨ %1$s ਨਾਲ ਕੰਪਾਇਲ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %3$s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "%s ਰੈਗੂਲਰ ਐਕਸਪਰੈਸ਼ਨ ਅਨੁਕੂਲ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "ਹੈਕਸਾਡੈਸੀਮਕ ਅੰਕ ਜਾਂ '}' ਦੀ ਮੰਗ ਸੀ"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "ਹੈਕਾਡੈਸੀਮਲ ਅੰਕ ਲੋੜੀਦਾ ਸੀ"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "ਸਿੰਬੋਲਿਕ ਰੈਡਰੈਂਸ ਵਿੱਚ '<' ਨਹੀਂ ਹੈ"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "ਅਧੂਰਾ ਸਿੰਬੋਲਿਕ ਰੈਡਰੈਂਸ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "ਜ਼ੀਰੋ-ਲੰਬਾਈ ਸਿੰਬੋਲਿਕ ਰੈਡਰੈਂਸ"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "ਅੰਕ ਲੋੜੀਦਾ ਸੀ"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ਗਲਤ ਸਿੰਬੋਲਿਕ ਰੈਡਰੈਂਸ"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "ਸਟਰੇ ਫਾਈਨਲ '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ਅਣਜਾਣ ਇਸਕੇਪ ਕਰਮ"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "ਬਦਲਣ ਟੈਕਸਟ \"%s\" ਨੂੰ ਪਾਰਸ ਕਰਨ ਦੌਰਾਨ ਅੱਖਰ %lu ਉੱਤੇ ਗਲਤੀ: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ਹਵਾਲਾ ਟੈਕਸਟ ਇਕ ਹਵਾਲਾ ਮਾਰਕ ਨਾਲ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "ਕਮਾਂਡ ਲਾਈਨ ਜਾਂ ਸੈੱਲ ਟੈਕਸਟ ਵਿੱਚ ਬੇਮੇਲ ਹਵਾਲਾ ਮਾਰਕ ਹੈ"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "ਇੱਕ '\\' ਅੱਖਰ ਮਗਰੋਂ ਟੈਕਸਟ ਖਤਮ ਹੋਣੇ ਹਨ (ਟੈਕਸਟ ਸੀ '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c ਲਈ ਹਵਾਲਾ ਲੱਭਣ ਤੋਂ ਪਹਿਲਾਂ ਟੈਕਸਟ ਖਤਮ ਹੈ। (ਟੈਕਸਟ ਸੀ '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ਟੈਕਸਟ ਖਾਲੀ ਸੀ (ਜਾਂ ਸਾਫ ਥਾਂ ਹੀ ਹੈ)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈੱਸ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਲਈ ਫੇਲ੍ਹ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ (%s) ਨਾਲ ਕਮਿਊਨੀਕੇਸ਼ਨ ਲਈ ਪਾਇਪ ਬਣਾਉਣ ਵਿੱਚ ਫੇਲ੍ਹ"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "ਚਾਈਲਡ ਪਾਈਪ (%s) ਤੋਂ ਡਾਟਾ ਖੋਲ੍ਹਣ ਵਿੱਚ ਫੇਲ੍ਹ ਹੈ"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "ਡਾਇਰੈਕਟਰੀ '%s' ਬਦਲਣ ਵਿੱਚ ਫੇਲ੍ਹ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "ਚਾਈਲਡ ਕਾਰਵਾਈ (%s) ਚਾਲੂ ਕਰਨ ਵਿੱਚ ਫੇਲ੍ਹ"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "ਗਲਤ ਪ੍ਰੋਗਰਾਮ ਨਾਂ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d ਉੱਤੇ ਮੁੱਲ ਵੈਕਟਰ ਵਿੱਚ ਗਲਤ ਲਾਈਨ: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "ਇੰਵਾਇਰਨਮਿੰਟ ਵਿੱਚ ਗਲਤ ਲਾਈਨ: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "ਗਲਤ ਵਰਕਿੰਗ ਡਾਇਰੈਕਟਰੀ: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "ਮੱਦਦ ਪਰੋਗਰਾਮ (%s) ਸ਼ੁਰੂ ਕਰਨ 'ਚ ਫੇਲ੍ਹ"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"ਇੱਕ ਚਾਈਲਡ ਪਰੋਸੈਸ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਦੌਰਾਨ g_io_channel_win32_poll() ਵਿੱਚ ਅਚਾਨਕ ਗਲਤੀ"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ (%s) ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਲਈ ਫੇਲ੍ਹ"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ (%s) ਤੋਂ ਡਾਟਾ ਖੋਲ੍ਹਣ ਲਈ select() ਵਿੱਚ ਅਚਾਨਕ ਗਲਤੀ"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() (%s) ਵਿੱਚ ਅਚਾਨਕ ਗਲਤੀ"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "ਫੋਰਕ (%s) ਲਈ ਫੇਲ੍ਹ"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ \"%s\" (%s) ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ (%s) ਦੀ ਆਉਟਪੁੱਟ ਜਾਂ ਇੰਪੁੱਟ ਦੀ ਦਿਸ਼ਾ ਬਦਲਣ 'ਚ ਫੇਲ੍ਹ"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ (%s) ਫੋਰਕ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "ਚਾਈਲਡ ਪਰੋਸੈਸ \"%s\" ਚਾਲੂ ਕਰਨ ਵਿੱਚ ਅਣਜਾਣੀ ਗਲਤੀ"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "ਚਾਈਲਡ pid ਪਾਇਪ (%s) ਤੋਂ ਚਾਹੀਦਾ ਡਾਟਾ ਪੜ੍ਹਨ ਲਈ ਫੇਲ੍ਹ"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 ਲਈ ਅੱਖਰ ਰੇਜ਼ ਤੋਂ ਬਾਹਰ"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "ਬਦਲਾਉ ਇੰਪੁੱਟ ਵਿੱਚ ਤਰਤੀਬ ਜਾਇਜ਼ ਨਹੀਂ ਹੈ"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-੧੬ ਲਈ ਅੱਖਰ ਰੇਜ਼ ਤੋਂ ਬਾਹਰ"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ਵਰਤੋਂ:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ਚੋਣ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "ਮੱਦਦ ਚੋਣ:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "ਮੱਦਦ ਚੋਣ ਵੇਖੋ"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "ਸਭ ਮੱਦਦ ਚੋਣਾਂ ਵੇਖੋ"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਚੋਣ:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "ਪੂਰਨ ਅੰਕ ਮੁੱਲ %s' ਨੂੰ %s ਲਈ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "ਪੂਰਨ ਅੰਕ '%s' %s ਲਈ ਰੇਜ਼ ਤੋਂ ਬਾਹਰ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "%2$s ਲਈ ਡਬਲ ਮੁੱਲ '%1$s' ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s ਲਈ '%1$s' ਡਬਲ ਮੁੱਲ ਰੇਜ਼ ਤੋਂ ਬਾਹਰ ਹੈ"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "ਚੋਣ %s ਪਾਰਸ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s ਲਈ ਆਰਗੂਮੈਂਟ ਗੁੰਮ ਹੈ"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "ਅਣਜਾਣ ਚੋਣ %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "ਖੋਜ ਡਾਇਰੈਕਟਰੀਆਂ ਵਿੱਚ ਠੀਕ ਕੁੰਜੀ ਫਾਇਲ ਨਹੀਂ ਖੋਜੀ ਜਾ ਸਕੀ"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ਇੱਕ ਰੈਗੂਲਰ ਫਾਇਲ ਨਹੀਂ"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "ਫਾਇਲ ਖਾਲੀ ਹੈ"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਲਾਈਨ '%s' ਰੱਖਦੀ ਹੈ, ਜੋ ਕਿ ਕੁੰਜੀ-ਮੁੱਲ ਜੋੜਾ, ਗਰੁੱਪ ਜਾਂ ਟਿੱਪਣੀ ਨਹੀਂ ਹੈ"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "ਗਲਤ ਗਰੁੱਪ ਨਾਂ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਗਰੁੱਪ ਨਾਲ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋ ਸਕਦੀ ਹੈ"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "ਗਲਤ ਕੁੰਜੀ ਨਾਂ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਨਾ-ਸਹਾਇਕ ਇੰਕੋਡਿੰਗ '%s' ਰੱਖਦੀ ਹੈ"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਦਾ ਗਰੁੱਪ '%s' ਨਹੀਂ ਹੈ"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਵਿੱਚ '%s' ਕੁੰਜੀ ਨਹੀਂ ਹੈ"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਵਿੱਚ ਕੁੰਜੀ '%s' ਦਾ ਮੁੱਲ '%s' ਹੈ, ਜੋ ਕਿ UTF-8 ਨਹੀਂ ਹੈ"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਵਿੱਚ '%s' ਕੁੰਜੀ ਹੈ, ਜਿਸ ਤੇ ਕਾਰਵਾਈ ਨਹੀਂ ਹੋ ਸਕਦੀ ਹੈ"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"ਕੁੰਜੀ ਫਾਇਲ ਵਿੱਚ ਕੁੰਜੀ '%s' ਗਰੁੱਪ '%s' ਵਿੱਚ ਹੈ, ਜਿਸ ਦੇ ਮੁੱਲ ਨੂੰ ਇੰਟਰਪਰੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਕੁੰਜੀ '%s' ਗਰੁੱਪ '%s' ਵਿੱਚ ਨਹੀਂ ਹੈ"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਵਿੱਚ ਲਾਈਨ ਦੇ ਅੰਤ ਵਿੱਚ ਇਸਕੇਪ ਅੱਖਰ ਹੈ"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "ਕੁੰਜੀ ਫਾਇਲ ਵਿੱਚ ਗਲਤ ਇਸਕੇਪ ਕ੍ਰਮ '%s' ਹੈ"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "ਮੁੱਲ '%s' ਨੂੰ ਇੱਕ ਅੰਕ ਦੇ ਤੌਰ 'ਤੇ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ਪੂਰਨ ਅੰਕ '%s' ਰੇਜ਼ ਤੋਂ ਬਾਹਰ ਹੈ"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "ਮੁੱਲ '%s' ਨੂੰ ਇੱਕ ਦਸ਼ਮਲਵ ਅੰਕ ਦੇ ਤੌਰ 'ਤੇ ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ ਹੈ।"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "ਮੁੱਲ '%s' ਨੂੰ ਬੂਲੀਅਨ ਵਾਂਗ ਇੰਟਰਪਰੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s ਨੂੰ ਬਹੁਤ ਵੱਧ ਗਿਣਤੀ ਪਾਸ ਕੀਤੀ ਗਈ"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "ਸਟਰੀਮ ਪਹਿਲਾਂ ਹੀ ਬੰਦ ਹੈ"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "ਓਪਰੇਸ਼ਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "ਅਣਜਾਣ ਟਾਈਪ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s ਫਾਇਲ-ਟਾਈਪ"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s ਟਾਈਪ"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "ਅਚਾਨਕ ਛੇਤੀ ਐਂਡ-ਆਫ਼-ਸਟੀਰਮ"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "ਬਿਨ-ਨਾਂ"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "ਡੈਸਕਟਾਪ ਫਾਇਲ ਨੇ Exec ਫੀਲਡ ਨਹੀਂ ਦਿੱਤਾ ਹੈ"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਟਰਮੀਨਲ ਲੋੜ ਲੱਭਣ ਲਈ ਅਸਮਰੱਥ ਹੈ"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ਯੂਜ਼ਰ ਐਪਲੀਕੇਸ਼ਨ ਸੰਰਚਨਾ ਫੋਲਡਰ %s ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ਯੂਜ਼ਰ MIME ਸੰਰਚਨਾ ਫੋਲਡਰ %s ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ਯੂਜ਼ਰ ਡੈਸਕਟਾਪ ਫਾਇਲ %s ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s ਲਈ ਕਸਟਮ ਪਰਿਭਾਸ਼ਾ"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ਡਰਾਇਵ ਲਈ ਬਾਹਰ ਕੱਢਣਾ ਨਹੀਂ ਬਣਾਇਆ"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ਮੀਡਿਆ ਪੋਲਿੰਗ ਲਈ ਡਰਾਇਵ ਹਾਲੇ ਸਥਾਪਤ ਨਹੀਂ"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem ਇੰਕੋਡਿੰਗ ਦਾ %d ਵਰਜਨ ਹੈਂਡਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem ਇੰਕੋਡਿੰਗ ਵਿੱਚ ਨਿਕਾਰਾ ਟੋਕਨਾਂ ਦੀ ਗਿਣਤੀ (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GThemedIcon ਇੰਕੋਡਿੰਗ ਦਾ %d ਵਰਜਨ ਹੈਂਡਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ਇੰਕੋਡਿੰਗ ਵਿੱਚ ਨਿਕਾਰਾ ਟੋਕਨਾਂ ਦੀ ਗਿਣਤੀ (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon ਲਈ GEmblem ਦੀ ਲੋੜ ਸੀ"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ਓਪਰੇਸ਼ਨ ਸਹਾਇਕ ਨਹੀਂ"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "ਰੱਖਣ ਵਾਲਾ ਮਾਊਂਟ ਮੌਜੂਦ ਨਹੀਂ"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਉੱਤੇ ਕਾਪੀ ਨਹੀਂ ਹੋ ਸਕਦਾ"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਡਾਇਰੈਕਟਰੀ ਉੱਤੇ ਕਾਪੀ ਨਹੀਂ ਹੋ ਸਕਦੀ"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "ਟਾਰਗੇਟ ਫਾਇਲ ਮੌਜੂਦ ਹੈ"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਲਗਾਤਾਰ ਕਾਪੀ ਨਹੀਂ ਹੋ ਸਕਦੀ"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "ਖਾਸ ਫਾਇਲ ਕਾਪੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "ਗਲਤ ਸਿੰਬੋਲਿੰਕ ਮੁੱਲ ਦਿੱਤਾ"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ਰੱਦ ਸਹਾਇਕ ਨਹੀਂ"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ਫਾਇਲ ਨਾਂ ਵਿੱਚ ' %c' ਮੌਜੂਦ ਨਹੀਂ ਹੋ ਸਕਦਾ"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "ਵਾਲੀਅਮ ਲਈ ਮਾਊਂਟ ਸਥਾਪਤ ਨਹੀਂ ਹੈ"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ਇਹ ਫਾਇਲ ਹੈਂਡਲ ਕਰਨ ਲਈ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ਈਨੂਮੀਟਰੇਟਰ ਬੰਦ ਹੈ"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ਫਾਇਲ ਈਨੂਮੀਟਰੇਟਰ ਗੰਭੀਰ ਕਾਰਵਾਈ ਕਰ ਚੁੱਕਾ ਹੈ"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ਫਾਇਲ ਈਨੂਮੀਟਰੇਟਰ ਪਹਿਲਾਂ ਹੀ ਬੰਦ ਹੈ"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ਫਾਇਲ"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "ਫਾਇਲ ਆਈਕਾਨ ਰੱਖਦੀ ਹੈ"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon ਇੰਕੋਡਿੰਗ ਦਾ %d ਵਰਜਨ ਹੈਂਡਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon ਲਈ ਨਿਕਾਰਾ ਇੰਪੁੱਟ ਡਾਟਾ"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "ਸਟਰੀਮ query_info ਲਈ ਸਹਾਇਕ ਨਹੀਂ"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "ਸਟਰੀਮ ਉੱਤੇ ਸੀਕ ਸਹਿਯੋਗੀ ਨਹੀਂ"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "ਇੰਪੁੱਟ ਸਟਰੀਮ ਉੱਤੇ ਟਰਾਂਸਕੇਟ ਮਨਜ਼ੂਰ ਨਹੀਂ"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "ਸਟਰੀਮ ਉੱਤੇ ਟਰਾਂਸਕੇਟ ਸਹਿਯੋਗੀ ਨਹੀਂ"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "ਟੋਕਨਾਂ ਦੀ ਗਲਤ ਗਿਣਤੀ (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "ਕਲਾਸ ਨਾਂ %s ਲਈ ਕੋਈ ਟਾਈਪ ਨਹੀਂ"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "ਟਾਈਪ %s GIcon ਇੰਟਰਫੇਸ ਲਈ ਸਥਾਪਿਤ ਨਹੀਂ"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "ਟਾਈਪ %s ਕਲਾਸ ਨਹੀਂ ਹੈ"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "ਨਿਕਾਰਾ ਵਰਜਨ ਨੰਬਰ: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "ਟਾਈਪ %s GIcon ਇੰਟਰਫੇਸ ਉੱਤੇ from_tokens() ਸਥਾਪਨ ਚਾਹੀਦਾ ਨਹੀਂ"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "ਆਈਕਾਨ ਇੰਕੋਡਿੰਗ ਦਾ ਦਿੱਤਾ ਵਰਜਨ ਨੰਬਰ ਹੈਂਡਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ਇੰਪੁੱਟ ਸਟਰੀਮ ਹਾਲੇ ਪੜ੍ਹਨ ਲਈ ਨਹੀਂ ਹੈ"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "ਸਟਰੀਮ ਪਹਿਲਾਂ ਹੀ ਕਾਰਵਾਈ ਅਧੀਨ ਹੈ"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "ਡਿਫਾਲਟ ਲੋਕਲ ਡਾਇਰੈਕਟਰੀ ਮਾਨੀਟਰ ਟਾਈਪ ਲੱਭਣ ਲਈ ਅਸਮਰੱਥ"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "ਗਲਤ ਫਾਇਲ ਨਾਂ %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "ਫਾਇਲ ਸਿਸਟਮ ਜਾਣਕਾਰੀ ਲੈਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ਰੂਟ ਡਾਇਰੈਕਟਰੀ ਦਾ ਨਾਂ ਨਹੀਂ ਬਦਲਿਆ ਜਾ ਸਕਦਾ"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "ਫਾਇਲ ਨਾਂ ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ਫਾਇਲ ਦਾ ਨਾਂ ਨਹੀਂ ਬਦਲਿਆ ਜਾ ਸਕਦਾ, ਫਾਇਲ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "ਗਲਤ ਫਾਇਲ ਨਾਂ"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "ਫਾਇਲ ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ: %s  "
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "ਫਾਇਲ ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "ਫਾਇਲ ਰੱਦੀ 'ਚ ਭੇਜਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ਰੱਦੀ ਡਾਇਰੈਕਟਰੀ %s ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ਰੱਦੀ ਲਈ ਟਾਪ-ਲੈਵਲ ਡਾਇਰੈਕਟਰੀ ਲੱਭਣ ਲਈ ਅਸਮਰੱਥ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ਰੱਦੀ ਡਾਇਰੈਕਟਰੀ ਲੱਭਣ ਜਾਂ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ਰੱਦੀ 'ਚ ਭੇਜੀ ਫਾਇਲ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ਫਾਇਲ ਰੱਦੀ 'ਚ ਭੇਜਣ ਲਈ ਅਸਮਰੱਥ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "ਸਿਬੋਲਿਕ ਲਿੰਕ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "ਫਾਇਲ ਭੇਜਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਡਾਇਰੈਕਟਰੀ ਉੱਤੇ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "ਬੈਕਅੱਪ ਫਾਇਲ ਬਣਾਉਣ ਲਈ ਫੇਲ੍ਹ"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "ਟਾਰਗੇਟ ਫਾਇਲ ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "ਮਾਊਂਟ ਵਿੱਚ ਭੇਜਣਾ ਸਹਿਯੋਗੀ ਨਹੀਂ"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "ਗੁਣ ਮੁੱਲ ਗ਼ੈਰ-ਨਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "ਗਲਤ ਗੁਣ ਟਾਈਪ (ਲਾਈਨ ਦੀ ਲੋੜ ਸੀ)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "ਗਲਤ ਐਕਸਟੈੱਡ ਗੁਣ ਨਾਂ"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "ਐਕਸਟੈੱਡ ਗੁਣ '%s' ਸੈੱਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' ਫਾਇਲ ਦੇਣ'ਚ ਗਲਤੀ: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr "(ਗਲਤ ਇੰਕੋਡਿੰਗ)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "ਫਾਇਲ ਡਿਸਕ੍ਰਿਪਟਰ ਸਟੇਟਿੰਗ ਗਲਤੀ: %s "
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "ਗਲਤ ਐਟਰੀਬਿਊਟ ਟਾਈਪ (uint32 ਲੋੜੀਦਾ ਸੀ)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "ਗਲਤ ਐਟਰੀਬਿਊਟ ਟਾਈਪ (uint64 ਲੋੜੀਦਾ ਸੀ)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "ਗਲਤ ਐਟਰੀਬਿਊਟ ਟਾਈਪ (ਬਾਈਟ ਲਾਈਨ ਲੋੜੀਦੀ ਸੀ)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "ਅਧਿਕਾਰ ਸੈੱਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "ਓਪਨ ਸੈਟਿੰਗ ਗਲਤੀ: %s "
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "ਸਿਮਲਿੰਕ ਗ਼ੈਰ-ਨਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "symlink ਸੈਟਿੰਗ ਗਲਤੀ: %s "
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "symlink ਸੈਟਿੰਗ ਗਲਤੀ: ਫਾਇਲ ਇੱਕ symlink ਨਹੀਂ ਹੈ"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux ਪਰਸੰਗ ਗੈਰ-ਨਲ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux ਪਰਸੰਗ ਸੈਟ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "ਇਸ ਸਿਸਟਮ ਉੱਤੇ SELinux ਚਾਲੂ ਨਹੀਂ ਹੈ"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "ਗੁਣ %s ਸੈਟਿੰਗ ਸਹਾਇਕ ਨਹੀਂ"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "ਫਾਇਲ ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "ਫਾਇਲ 'ਚ ਵੇਖਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "ਫਾਇਲ ਬੰਦ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "ਡਿਫਾਲਟ ਲੋਕਲ ਫਾਇਲ ਮਾਨੀਟਰ ਟਾਈਪ ਖੋਜਣ ਲਈ ਅਸਮਰੱਥ"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "ਫਾਇਲ ਲਿਖਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "ਪੁਰਾਣਾ ਬੈਕਅੱਪ ਲਿੰਕ ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "ਬੈਕਅੱਪ ਕਾਪੀ ਬਣਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "ਆਰਜ਼ੀ ਫਾਇਲ ਨਾਂ ਬਦਲਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "ਫਾਇਲ ਸੰਖੇਪ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' ਫਾਇਲ ਖੋਲ੍ਹਣ 'ਚ ਗਲਤੀ: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "ਟਾਰਗੇਟ ਫਾਇਲ ਡਾਇਰੈਕਟਰੀ ਹੈ"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "ਟਾਰਗੇਟ ਫਾਇਲ ਇੱਕ ਰੈਗੂਲਰ ਫਾਇਲ ਨਹੀਂ ਹੈ"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ਫਾਇਲ ਬਾਹਰੋਂ ਸੋਧੀ ਗਈ ਸੀ"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "ਪੁਰਾਣੀ ਫਾਇਲ ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "ਗਲਤ GSeekType ਦਿੱਤੀ ਗਈ"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "ਸੀਕ ਮੰਗ ਗਲਤ ਹੈ"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream ਛੋਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "ਵੱਧੋ-ਵੱਧ ਡਾਟਾ ਅਰੇ ਲਿਮਟ ਆ ਗਈ"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "ਮੈਮੋਰੀ ਆਉਟਪੁੱਟ ਸਟਰੀਮ ਮੁੜ-ਅਕਾਰ ਯੋਗ ਨਹੀਂ"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "ਮੈਮੋਰੀ ਆਉਟਪੁੱਟ ਸਟਰੀਮ ਮੁੜ-ਸਾਈਜ਼ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "ਮਾਊਂਟ ਹਾਲੇ ਅਣ-ਮਾਊਂਟ ਲਈ ਸਥਾਪਿਤ ਨਹੀਂ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "ਮਾਊਂਟ ਹਾਲੇ ਬਾਹਰ ਕੱਢਣ ਲਈ ਸਥਾਪਤ ਨਹੀਂ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "ਮਾਊਂਟ ਹਾਲੇ ਰੀ-ਮਾਊਂਟ ਲਈ ਸਥਾਪਿਤ ਨਹੀਂ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "ਪਰਸੰਗ ਟਾਈਪ ਗੈੱਸਿੰਗ ਲਈ ਮਾਊਂਟ ਸਥਾਪਤ ਨਹੀਂ ਹੈ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "ਸੈਕਰੋਨਿਸ ਪਰਸੰਗ ਟਾਈਪ ਗੈਸਿੰਗ ਲਈ ਮਾਊਂਟ ਸਥਾਪਤ ਨਹੀਂ ਹੈ"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "ਆਉਟਪੁੱਟ ਸਟਰੀਮ ਲਿਕਣ ਲਈ ਬਣਾਈ ਨਹੀਂ ਗਈ"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "ਸਰੋਤ ਸਟਰੀਮ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "ਨਾਂ"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "ਆਈਕਾਨ ਦਾ ਨਾਂ"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "ਨਾਂ"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "ਅਰੇ ਵਿੱਚ ਆਈਕਾਨ ਨਾਂ ਹਨ"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "ਡਿਫਾਲਟ ਫਾਲਬੈਕ ਵਰਤੋਂ"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"ਜੀ '-' ਅੱਖਰ ਉੱਤੇ ਨਾਂ ਨੂੰ ਛੋਟਾ ਕਰਨ ਲਈ ਡਿਫਾਲਟ ਫਾਲਬੈਕ ਲੱਭਿਆ ਵਰਤਣਾ ਹੈ। ਜੇ ਕਈ ਨਾਂ ਲੱਭਣ ਤਾਂ ਪਹਿਲੇ "
+"ਦੇ ਬਾਅਦ ਨਾਂ ਅਣਡਿੱਠੇ ਕਰੋ।"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon ਇੰਕੋਡਿੰਗ ਦਾ %d ਵਰਜਨ ਹੈਂਡਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "ਫਾਇਲ ਡਿਸਕ੍ਰਿਪਟਰ"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "ਫਾਇਲ ਡਿਸਕ੍ਰਿਪਟਰ ਪੜ੍ਹਨਾ ਹੈ"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ਫਾਇਲ ਡਿਸਕ੍ਰਿਪਟਰ ਬੰਦ ਕਰੋ"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "ਕੀ ਸਟਰੀਮ ਬੰਦ ਹੋਣ ਨਾਲ ਫਾਇਲ ਡਿਸਕ੍ਰਿਪਟਰ ਵੀ ਬੰਦ ਕਰਨਾ ਹੈ"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix ਤੋਂ ਪੜ੍ਹਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix ਬੰਦ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "ਫਾਇਲ ਸਿਸਟਮ ਰੂਟ"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "ਲਿਖਣ ਲਈ ਫਾਇਲ ਡਿਸਕ੍ਰਿਪਟਰ"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "unix ਉੱਤੇ ਲਿਖਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "ਵਾਲੀਅਮ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਹੈ"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਲੱਭੀ ਜਾ ਸਕਦੀ"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਲਾਂਚ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI ਸਹਿਯੋਗੀ ਨਹੀਂ"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "ਸਬੰਧ ਬਦਲਣਾ win32 ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "ਸਬੰਧ ਬਣਾਉਣਾ win32 ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ਐਂਟਰੀਆਂ ਓਹਲੇ ਨਾ ਕਰੋ"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "ਇੱਕ ਲੰਮਾ ਲਿਸਟਿੰਗ ਫਾਰਮੈਟ ਵਰਤੋਂ"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..62d9456
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,1900 @@
+# Copyright (C) 2001-2008 Free Software Foundation, Inc.
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# Aviary.pl
+# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
+# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
+# gnomepl@aviary.pl
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+msgid ""
+msgstr ""
+"Project-Id-Version: GLib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-17 18:00+0100\n"
+"Last-Translator: Tomasz Dominikowski <dominikowski@gmail.com>\n"
+"Language-Team: Aviary.pl <gnomepl@aviary.pl>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Poedit-Language: Polish\n"
+"X-Poedit-Country: Poland\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Nieoczekiwany atrybut \"%s\" dla elementu \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Nie odnaleziono atrybutu \"%s\" dla elementu \"%s\""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Nieoczekiwany znacznik \"%s\", oczekiwano znacznika \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Nieoczekiwany znacznik \"%s\" wewnątrz \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Nie można odnaleźć poprawnego pliku zakładek w katalogach danych"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Zakładka dla URI \"%s\" już istnieje"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Nie znaleziono zakładki dla URI \"%s\""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Nie zdefiniowano typu MIME w zakładce dla URI \"%s\""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Nie zdefiniowano prywatnej flag w zakładce dla URI \"%s\""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nie ustawiono grup w zakładce dla URI \"%s\""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Żadna aplikacja o nazwie \"%s\" nie zarejestrowała zakładki dla \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Rozwinięcie linii \"%s\" z adresem URI \"%s\" nie powiodło się"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+"Konwersja z zestawu znaków \"%s\" na zestaw \"%s\" nie jest obsługiwana"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nie można otworzyć konwertera z \"%s\" na \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Niepoprawna sekwencja bajtów na wejściu konwersji"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Błąd podczas konwersji: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Na końcu wejścia występuje sekwencja odpowiadająca części znaku"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+"Nie można przekonwertować napisu zastępczego \"%s\" na zestaw znaków \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"URI \"%s\" nie jest bezwzględnym URI, używającym schematu \"plikowego\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI lokalnego pliku \"%s\" nie może zawierać znaku \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI \"%s\" jest niepoprawny"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Nazwa komputera w URI \"%s\" jest niepoprawna"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI \"%s\" zawiera niewłaściwie zacytowane znaki"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Ścieżka \"%s\" nie jest ścieżką bezwzględną"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Niepoprawna nazwa komputera"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Wystąpił błąd przy otwieraniu katalogu \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nie można przydzielić %lu bajtów do odczytu pliku \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Wystąpił błąd przy odczycie pliku \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Plik \"%s\" jest zbyt duży"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Nie można odczytać z pliku \"%s\": %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nie można otworzyć pliku \"%s\": %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Nie można uzyskać atrybutów pliku \"%s\": funkcja fstat() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nie można otworzyć pliku \"%s\": funkcja fdopen() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Nie można zmienić nazwy pliku \"%s\" na \"%s\": funkcja g_rename() zwróciła "
+"błąd: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Nie można utworzyć pliku \"%s\": %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Nie można otworzyć pliku \"%s\" do zapisu: funkcja fdopen() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nie można zapisać pliku \"%s\": funkcja fwrite() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nie można zapisać pliku \"%s\": funkcja fflush() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nie można zapisać pliku \"%s\": funkcja fsync() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nie można zamknąć pliku \"%s\": funkcja fclose() zwróciła błąd: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Nie można usunąć istniejącego pliku \"%s\": funkcja g_unlink() zwróciła "
+"błąd: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Szablon \"%s\" jest niepoprawny, nie powinien on zawierać \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Szablon \"%s\" nie zawiera XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Niepowodzenie podczas odczytu dowiązania symbolicznego \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Dowiązania symboliczne nie są obsługiwane"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nie można otworzyć konwertera z \"%s\" na \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Nie można wykonać surowego odczytu w g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "W buforze odczytu pozostały nieprzekonwertowane dane"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Na końcu kanału występuje sekwencja odpowiadająca części znaku"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Nie można wykonać surowego odczytu w g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nie można otworzyć pliku \"%s\": funkcja open() zwróciła błąd: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nie można zmapować pliku \"%s\": funkcja mmap() zwróciła błąd: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Błąd w wierszu %d przy znaku %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Błąd w wierszu %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Napotkano pustą jednostkę \"&;\"; poprawnymi jednostkami są: &amp; &quot; "
+"&lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak \"%s\" nie jest dopuszczalny na początku nazwy jednostki; znak & "
+"rozpoczyna jednostkę; jeśli znak ten nie powinien rozpoczynać jednostki, "
+"należy go zapisać jako &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak \"%s\" nie jest dopuszczalny wewnątrz nazwy jednostki"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nazwa jednostki \"%s\" nie jest znana"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Jednostka nie jest zakończona średnikiem; najprawdopodobniej został użyty "
+"znak &, który nie miał oznaczać jednostki - należy go zapisać jako &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nie można przetworzyć \"%-.*s\", w miejscu którego powinna wystąpić liczba, "
+"będąca częścią odniesienia do znaku (np. &#234;) - być może liczba jest zbyt "
+"duża"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Odniesienie do znaku \"%-.*s\" nie jest zapisem dozwolonego znaku"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Puste odniesienie do znaku; powinno ono zawierać cyfry, np. &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Odniesienie do znaku nie jest zakończone średnikiem; najprawdopodobniej "
+"został użyty znak &, który nie miał oznaczać jednostki - należy go zapisać "
+"jako &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Niezakończone odniesienie do jednostki"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Niezakończone odniesienie do znaku"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Tekst nie jest poprawnym łańcuchem UTF-8 - za długa sekwencja"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+"Tekst nie jest poprawnym łańcuchem UTF-8 - nie jest znakiem początkowym"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Tekst nie jest poprawnym łańcuchem UTF-8 - niepoprawne \"%s\""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument musi rozpoczynać się jakimś elementem (np. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Znak \"%s\" nie powinien występować po znaku \"<\"; nie może on rozpoczynać "
+"nazwy elementu"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Nieoczekiwany znak \"%s\", oczekiwano znaku \">\", by zakończyć znacznik \"%s"
+"\" pustego elementu"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Nieoczekiwany znak \"%s\"; po nazwie atrybutu \"%s\" elementu \"%s\" "
+"oczekiwano znaku \"=\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Nieoczekiwany znak \"%s\"; oczekiwano znaku \">\" lub \"/\", kończącego "
+"znacznik początkowy elementu \"%s\" lub opcjonalnie atrybutu; być może w "
+"nazwie atrybutu został użyty niepoprawny znak"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Nieoczekiwany znak \"%s\"; oczekiwano otwierającego znaku cudzysłowu po "
+"znaku równości przy podawaniu wartości atrybutu \"%s\" elementu \"%s\""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Znak \"%s\" nie jest znakiem, który może pojawić się po sekwencji \"</\"; \"%"
+"s\" nie może rozpoczynać nazwy elementu"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Znak \"%s\" nie jest znakiem, który może wystąpić po domykającej nazwie "
+"elementu \"%s\"; dopuszczalnym znakiem jest \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+"Element \"%s\" został zamknięty, lecz brak aktualnie otwartego elementu"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Element \"%s\" został zamknięty, lecz aktualnie otwartym elementem jest \"%s"
+"\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument jest pusty lub zawiera tylko separatory"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Zaraz po znaku \"<\" nastąpił nieoczekiwany koniec dokumentu"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Nastąpił nieoczekiwany koniec dokumentu, gdy pewne elementy są wciąż otwarte "
+"- \"%s\" był ostatnim otwartym elementem"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Nastąpił nieoczekiwany koniec dokumentu; oczekiwano znaku \">\", kończącego "
+"znacznik <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Nastąpił nieoczekiwany koniec dokumentu wewnątrz nazwy elementu"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Nastąpił nieoczekiwany koniec dokumentu wewnątrz nazwy atrybutu"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Nastąpił nieoczekiwany koniec dokumentu wewnątrz znacznika otwierającego "
+"element."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Nastąpił nieoczekiwany koniec dokumentu po znaku równości występującym po "
+"nazwie atrybutu; brak wartości atrybutu"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Nastąpił nieoczekiwany koniec dokumentu wewnątrz wartości atrybutu"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Nastąpił nieoczekiwany koniec dokumentu wewnątrz znacznika domykającego "
+"elementu \"%s\""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Nastąpił nieoczekiwany koniec dokumentu wewnątrz komentarza lub instrukcji "
+"przetwarzania"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "uszkodzony obiekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "błąd wewnętrzny lub uszkodzony obiekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "brak pamięci"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "osiągnięto limit backtrace"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "wzorzec zawiera elementy nieobsługiwane w dopasowywaniu częściowym"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "błąd wewnętrzny"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"referencje wstecz jako warunki nie są obsługiwane w dopasowywaniu częściowym"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "osiągnięto limit rekursji"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "osiągnięto limit pustych ciągów w przestrzeni roboczej"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "nieprawidłowa kombinacja flag nowych linii"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "nieznany błąd"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ na końcu wzoru"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c na końcu wzoru"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "nierozpoznany znak po \\"
+
+# wd
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"znaki escape zmieniające wielkość liter  (\\l, \\L, \\u, \\U) nie są "
+"dozwolone w tym miejscu"
+
+# wd
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "liczby w operatorze {} nie są w kolejności"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "liczba zbyt duża w kwantyfikatorze {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "brak kończącego znaku \"]\" dla klasy znaku"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "niepoprawna sekwencja sterująca w klasie znaku"
+
+# wd
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "zakres klasy znaków nie jest w kolejności"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nic do powtórzenia"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "nierozpoznany znak po \"(?\""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "nierozpoznany znak po \"(?<\""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "nierozpoznany znak po \"(?P\""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "Klasy nazwane z użyciem POSIX są obsługiwane tylko wewnątrz klasy"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "brak znaku kończącego \")\""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "znak \")\" bez znaku otwierającego \"(\""
+
+# wd
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "po (?R lub (?[+-]cyfry musi następować znak )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "nawiązanie do nieistniejącego podwzoru"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "brakujący znak \")\" po komentarzu"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "zbyt duże wyrażenie zwykłe"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "nie można uzyskać pamięci"
+
+# wd
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "asercja \"lookbehind\" nie ma stałej długości"
+
+# wd
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "błędna liczba lub nazwa za (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "zależna grupa zawiera więcej niż dwie gałęzie"
+
+# wd
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "za (?( oczekiwano asercji"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nieznana nazwa klasy POSIX"
+
+# wd
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "Elementy porównujące POSIX nie są obsługiwane"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "wartość typu \"character\" w sekwencji \\x{...} jest zbyt duża"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "niepoprawny warunek \"(?(0)\""
+
+# wd
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "znak \\C nie jest dozwolony w asercji \"lookbehind\""
+
+# wd
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "wywołanie rekurencyjne mogło prowadzić do pętli nieskończonej"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "brak terminatora w nazwie podwzoru"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dwa podwzory mają tę samą nazwę"
+
+# wd
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "błędna sekwencja \\P lub \\p"
+
+# wd
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nieznana nazwa właściwości za \\P lub \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "nazwa podwzoru jest zbyt długa (maksymalnie 32 znaki)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "zbyt dużo nazwanych podwzorów (maksymalnie 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "wartość ósemkowa jest większa niż \\377"
+
+# wd
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "grupa DEFINE zawiera więcej niż jedną gałąź"
+
+# wd
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "powtarzanie grupy DEFINE nie jest dozwolone"
+
+# wd
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "niespójne opcje NEWLINE"
+
+# wd
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"po \\g nie następuje nazwa w nawiasach lub opcjonalna, niezerowa liczba w "
+"nawiasach"
+
+# wd
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "nieoczekiwane powtórzenie"
+
+# wd
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "przepełnienie kodu"
+
+# wd
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "przekroczono przestrzeń roboczą kompilacji"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "nie znaleziono wcześniej sprawdzonego podwzorca"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Błąd podczas dopasowywania wyr. regularnego %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Biblioteka PCRE została skompilowana bez obsługi UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Biblioteka PCRE została skompilowana bez obsługi własności UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Błąd kompilacji wyr. regularnego %s przy znaku %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Błąd podczas optymalizowania wyr. regularnego %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "oczekiwano cyfry szesnastkowej lub znaku }"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "oczekiwano cyfry szesnastkowej"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "brak znaku \"<\" w odniesieniu symbolicznym"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "niezakończona referencja symboliczna"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referencja symboliczna o zerowej długości"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "oczekiwano cyfry"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "niewłaściwa referencja symboliczna"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "pominięto końcowe '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "nieznana sekwencja wyjścia"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Błąd podczas analizy tekstu \"%s\" przy znaku %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Cytowany znak nie rozpoczyna się znakiem cytowania"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"W wierszu poleceń lub innym napisie cytowanym jak w powłoce wystąpił "
+"niesparowany znak cytowania"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"Tekst zakończył się bezpośrednio po znaku \"\\\" (wartością tekstu było \"%s"
+"\")."
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Tekst zakończył się przed odnalezieniem domykającego znaku cytowania dla %c "
+"(tekstem jest \"%s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Tekst jest pusty (lub zawiera tylko separatory)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nie można odczytać danych z procesu potomnego"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Nie można utworzyć potoku do komunikacji z procesem potomnym (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nie można odczytać danych z potoku łączącego z procesem potomnym (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nie można zmienić katalogu na \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nie można wykonać procesu potomnego (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Niepoprawna nazwa programu: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Niepoprawny ciąg w wektorze parametrów w %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Niepoprawna sekwencja w otoczeniu: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Niepoprawny katalog roboczy: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nie można uruchomić programu pomocniczego (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Przy odczycie danych z procesu potomnego w g_io_channel_win32_poll() "
+"wystąpił nieznany błąd"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nie można odczytać danych z procesu potomnego (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Nieoczekiwany błąd w funkcji select() przy odczytywaniu danych z procesu "
+"potomnego (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Nieoczekiwany błąd w funkcji waitpit() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Nie można utworzyć procesu (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nie można wykonać procesu potomnego \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nie można przekierować wejścia lub wyjścia procesu potomnego (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nie można utworzyć procesu potomnego (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Przy wykonywaniu procesu potomnego \"%s\" wystąpił nieznany błąd"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Nie można odczytać odpowiedniej liczby danych z potoku procesu potomnego (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak jest poza zakresem dla UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Niepoprawna sekwencja na wejściu konwersji"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak jest poza zakresem dla UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Użycie:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCJA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcje pomocy:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Wyświetlenie opcji pomocy"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Wyświetlenie wszystkich opcji pomocy"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcje aplikacji:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Nie można przetworzyć wartości liczbowej \"%s\" dla %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Wartość liczbowa \"%s\" dla %s jest z poza dopuszczalnego zakresu"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nie można przetworzyć podwójnej wartości liczbowej \"%s\" dla %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+"Podwójna wartość liczbowa \"%s\" dla %s jest z poza dopuszczalnego zakresu"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Błąd podczas przetwarzania opcji %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Brakujący parametr dla %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Nieznana opcja %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Nie można odnaleźć poprawnego pliku klucza w przeszukiwanych katalogach"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "To nie jest zwykły plik"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Plik jest pusty"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Plik klucza zawiera wiersz \"%s\", który nie jest parą klucz-wartość, grupą "
+"lub komentarzem"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Niepoprawna nazwa grupy: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Plik klucza nie rozpoczyna się od grupy"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Niepoprawna nazwa klucza: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Plik klucza zawiera nieobsługiwane kodowanie \"%s\""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Plik klucza nie zawiera grupy \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Plik klucza nie zawiera klucza \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Plik klucza zawiera klucz \"%s\" o wartości \"%s\", która nie jest zapisana "
+"w UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Plik klucza zawiera klucz \"%s\", który ma wartość niemożliwą do "
+"zinterpretowania."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Plik klucza zawiera klucz \"%s\" w grupie \"%s\", która ma wartość "
+"niemożliwą do zinterpretowania."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Plik klucza nie zawiera klucza \"%s\" w grupie \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Plik klucza zawiera znak sterujący na końcu linii"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Plik klucza zawiera niepoprawną sekwencję sterującą \"%s\""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Nie można zinterpretować \"%s\" jako wartości liczbowej."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Wartość całkowita \"%s\" jest spoza dopuszczalnego zakresu"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Nie można zinterpretować \"%s\" jako wartości zmiennoprzecinkowej."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Nie można zinterpretować \"%s\" jako wartości logicznej."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Zbyt duża wartość liczby przekazana do %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Strumień jest już zamknięty"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operacja została anulowana"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Nieznany typ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "typ pliku %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "typ %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Nieoczekiwany, przedwczesny koniec strumienia"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Bez nazwy"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Plik desktop nie określa pola Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Nie można znaleźć terminala wymaganego przez program"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Nie można utworzyć katalogu użytkownika dla konfiguracji programu %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Nie można utworzyć katalogu użytkownika dla konfiguracji MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Nie można utworzyć pliku desktop dla użytkownika %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Własna definicja dla %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "napęd nie implementuje operacji wysunięcia"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "napęd nie implementuje wykrywania nośnika"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Nie można obsłużyć wersji %d kodowania GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Błędna liczba elementów (%d) w kodowaniu GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Nie można obsłużyć wersji %d kodowania GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Błędna liczba elementów (%d) w kodowaniu GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Oczekiwano obiektu GEmblem dla GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operacja nie jest obsługiwana"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Nie istnieje zawierające montowanie"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Nie można skopiować na katalog"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Nie można skopiować katalogu na katalog"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Docelowy plik istnieje"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Nie można skopiować katalogu rekurencyjnie"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Nie można skopiować pliku specjalnego"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Wprowadzono niepoprawną wartość dowiązania symbolicznego"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Kosz nie jest obsługiwany"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Nazwy plików nie mogą zawierać \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "wolumin nie obsługuje montowania"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Żaden program nie jest zarejestrowany do obsługi tego pliku"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator jest zamknięty"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Enumerator plików ma zaległą operację"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Enumerator plików jest już zamknięty"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "plik"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Plik zawierający ikonę"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Nie można obsłużyć wersji %d kodowania GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Błędny format danych wejściowych dla GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Strumień nie obsługuje operacji query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Szukanie nie jest obsługiwane przez strumień"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Obcinanie nie jest dozwolone na strumieniu wejściowym"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Obcinanie nie jest dozwolone na strumieniu"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Błędna liczba elementów (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Brak typu dla nazwy klasy %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Typ %s nie implementuje interfejsu GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Typ %s nie jest klasowy"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Błędny format numeru wersji: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Typ %s nie implementuje metody from_tokens() z interfejsu GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Nie można obsłużyć podanej wersji kodowania ikony"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Strumień wejściowy nie obsługuje odczytu"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Strumień ma zaległą operację"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Nie można znaleźć domyślnego typu monitora katalogu lokalnego"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Niepoprawna nazwa pliku %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Błąd podczas pobierania informacji o systemie plików: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Nie można zmienić nazwy katalogu głównego"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Błąd podczas zmieniania nazwy pliku: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Nie można zmienić nazwy pliku, plik o takiej nazwie już istnieje"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Niepoprawna nazwa pliku"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Błąd podczas odczytu pliku: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Nie można otworzyć katalogu"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Błąd podczas usuwania pliku: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Błąd podczas przenoszenia pliku do kosza: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Nie można utworzyć katalogu kosza %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Nie można znaleźć głównego katalogu dla kosza"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Nie można znaleźć lub utworzyć katalogu kosza"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Nie można utworzyć pliku informacji o koszu: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Nie można przenieść pliku do kosza: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Błąd podczas tworzenia katalogu: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Błąd podczas tworzenia dowiązania symbolicznego: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Błąd podczas przenoszenia pliku: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Nie można przenieść katalogu na katalog"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Nie można stworzyć kopii zapasowej pliku"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Błąd podczas usuwania pliku docelowego: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Przenoszenie pomiędzy zamontowanymi udziałami nie jest obsługiwane"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Wartość atrybutu nie może być pusta"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Niepoprawny typ atrybutu (spodziewany \"string\")"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Niepoprawna nazwa rozszerzonego atrybutu"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Błąd podczas ustawiania rozszerzonego atrybutu \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Błąd podczas wyznaczania pliku \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (niepoprawne kodowanie)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Błąd podczas wyznaczania deskryptora pliku: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Niepoprawny typ atrybutu (spodziewany \"uint32\")"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Niepoprawny typ atrybutu (spodziewany \"uint64\")"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Niepoprawny typ atrybutu (spodziewany \"byte string\")"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Błąd podczas ustawiania uprawnień: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Błąd podczas ustawiania właściciela: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "dowiązanie symboliczne nie może być puste"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Błąd podczas ustawiania dowiązania symbolicznego: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Błąd podczas ustawiania dowiązania symbolicznego: plik nie jest dowiązaniem "
+"symbolicznym"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Kontekst SELinux nie może być pusty"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Błąd podczas ustawiania kontekstu SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux nie jest włączony w tym systemie"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Ustawianie atrybutu %s nie jest obsługiwane"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Błąd podczas odczytu z pliku: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Błąd podczas wyszukiwania w pliku: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Błąd podczas zamykania pliku: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Nie można znaleźć domyślnego typu monitora pliku lokalnego"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Błąd podczas zapisu do pliku: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Błąd podczas usuwania łącza do starego pliku zapasowego: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Błąd podczas tworzenia kopii zapasowej: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Błąd podczas zmieniania nazwy pliku tymczasowgo: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Błąd podczas skracania pliku: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Błąd podczas otwierania pliku \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Docelowy plik jest katalogiem"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Docelowy plik nie jest zwykłym plikiem"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Plik został zmieniony poza programem"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Błąd podczas usuwania poprzedniego pliku: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Podano nieprawidłowy obiekt GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Niepoprawne żądanie wyszukiwania"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Nie można skrócić \"GMemoryInputStream\""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Osiągnięto maksymalny limit zbioru danych"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Strumień wyjściowy pamięci nie obsługuje zmiany rozmiaru"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Nie można zmienić rozmiaru strumienia wyjściowego pamięci"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "montowany obiekt nie obsługuje odmontowania"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "montowany obiekt nie obsługuje wysunięcia"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "montowany obiekt nie obsługuje ponownego montowania"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "montowany obiekt nie obsługuje rozpoznania typu zawartości"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"montowany obiekt nie obsługuje synchronicznego rozpoznania typu zawartości"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Strumień wyjściowy nie obsługuje zapisu"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Strumień źródłowy jest już zamknięty"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nazwa"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Nazwa ikony"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nazwy"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Tablica zawierająca nazwy ikon"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "użycie domyślnych wartości bezpiecznych"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Określa, czy używać domyślnych wartości bezpiecznych wyznaczanych przez "
+"skrócenie nazwy na znaku \"-\". W przypadku wielu nadanych nazw nazwy po tym "
+"znaku są ignorowane."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Nie można obsłużyć wersji %d kodowania GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Deskryptor pliku"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Deskryptor pliku do odczytu"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Zamyka deskryptor pliku"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Określa, czy zamykać deskryptor pliku, gdy zamykany jest strumień"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Błąd podczas odczytu z uniksa: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Błąd podczas zamykania uniksa: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Katalog główny systemu plików"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Deskryptor pliku do zapisu"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Błąd podczas zapisu do uniksa: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "wolumin nie obsługuje wysunięcia"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Nie można znaleźć programu"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Błąd podczas uruchamiania programu: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Adresy URI nie są obsługiwane"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "zmiany skojarzeń nie są obsługiwane w win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Tworzenie skojarzeń nie jest obsługiwane w win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "bez ukrywania wpisów"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "używa długiego formatu listy"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[PLIK...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Błąd podczas przetwarzania opcji %s"
diff --git a/po/po2tbl.sed.in b/po/po2tbl.sed.in
new file mode 100644
index 0000000..b3bcca4
--- /dev/null
+++ b/po/po2tbl.sed.in
@@ -0,0 +1,102 @@
+# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+1 {
+  i\
+/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
+\
+#if HAVE_CONFIG_H\
+# include <config.h>\
+#endif\
+\
+#include "libgettext.h"\
+\
+const struct _msg_ent _msg_tbl[] = {
+  h
+  s/.*/0/
+  x
+}
+#
+# Write msgid entries in C array form.
+#
+/^msgid/ {
+  s/msgid[ 	]*\(".*"\)/  {\1/
+  tb
+# Append the next line
+  :b
+  N
+# Look whether second part is continuation line.
+  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
+# Yes, then branch.
+  ta
+# Because we assume that the input file correctly formed the line
+# just read cannot be again be a msgid line.  So it's safe to ignore
+# it.
+  s/\(.*\)\n.*/\1/
+  bc
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use D here.
+  s/.*\n\(.*\)/\1/
+# Some buggy seds do not clear the `successful substitution since last ``t'''
+# flag on `N', so we do a `t' here to clear it.
+  tb
+# Not reached
+  :c
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+  G
+  s/\(.*\)\n\([0-9]*\)/\1, \2},/
+  s/\(.*\)"$/\1/
+  p
+}
+#
+# Last line.
+#
+$ {
+  i\
+};\
+
+  g
+  s/0*\(.*\)/int _msg_tbl_length = \1;/p
+}
+d
diff --git a/po/ps.po b/po/ps.po
new file mode 100644
index 0000000..3aeb68c
--- /dev/null
+++ b/po/ps.po
@@ -0,0 +1,1787 @@
+# Pashto translation of glib.head
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Glib package.
+# Zabeeh Khan <zabeehkhan@gmail.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.head\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-04-12 17:07-0800\n"
+"Last-Translator: \n"
+"Language-Team: Pashto <pathanisation@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Pashto, Pushto\n"
+"X-Poedit-Country: AFGHANISTAN\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "په اومتوک درکموندونو کې کومه سمه ليکنښه دوتنه ونه موندل شوه"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "لپاره يوه ليکنښه د مخکې نه شته دی URI '%s' د"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "لپاره کومه ليکنښه ونه مونل شوه URI '%s' د"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr ""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr ""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "%s :د اړونې پر مهال ستونزه"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "ناسم دی URI '%s'"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ناسم کوربه نوم"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "%s :درکموند پرانيستلو کې ستونزه '%s'"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr ""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "%s :دوتنه لوسلو کې ستونزه '%s'"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "%s :دوتنې نه لوستلو کې پاتې راغی '%s' د"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "%s :دوتنه پرانيستلو کې پاتې راغی '%s'"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "%s :دوتنې جوړولو کې پاتې راغی '%s' د"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr ""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr ""
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f ک ب"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f م ب"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f ګ ب"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "%s :په لوستلو کې پاتې راغی '%s' د پېلامي تړنې"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "پېلامي تړنې نه منل کيږي"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr ""
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr ""
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr ""
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr ""
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr ""
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "اندرغل څيز"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "دنننۍ تېروتنه يا اندرغل څيز"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "له ياده بهر"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "دنننۍ تېروتنه"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ناپېژندلې تېروتنه"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ليکنه تشه وه (يا يوازې سپينه تشه يې لرله)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "د ماشوم بهير نه د اومتوک په لوستلو کې پاتې راغی"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "(%s) درکموند ته بدلېدلو کې پاتې راغی '%s'"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "(%s) د ماشوم بهيرپه پېلولو کې پاتې راغی"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "%s :ناسم کړنلار نوم"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "%s :ناسم کارونې درکموند"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "په پېلولو کې پاتې راغی (%s) د مرستندويه کړنلار"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ":کارونه"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[...غوراوی]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ":مرسته غوراوي"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "مرسته غوراوي ښودل"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "ټول مرسته غوراوي ښودل"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ":کاريال غوراوي"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "صحيح ارزښت له سيمې بهر دی '%s' لپاره د %s د"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr ""
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "%s ناپېژندلې غوراوی"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ساده دوتنه نه ده"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "دوتنه تشه ده"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "%s :ناسم ډله نوم"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "کيلۍ دوتنه د کومې ډلې سره نه پېليږي"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "%s :ناسم کيلۍ نوم"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "لري '%s' کيلۍ دوتنه ناسمه کوډييزونه"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "ډله نه لري '%s' کيلۍ دوتنه"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "کيلۍ نه لري '%s' کيلۍ دوتنه"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "کيلۍ نه لري '%s' ډله کې '%s' کيلۍ دوتنه په"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "ارزښت د شمېرې په توګه نه شي ژباړل کېدی '%s'"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "د سيمې نه بهر دی '%s' صحيح ارزښت"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "چار بند شو"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "ناپېژندلی ډول"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "دوتنه ډول %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "ډول %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "بېنومه"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "نه شي جوړولی %s د کارن سرپاڼې دوتنه"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "لپاره دوديز پېژنداوی %s د"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "چار نه منل کيږي"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "د درکموند پر سر نه شي لمېسلی"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "درکموند د درکموند پر سر نه شي لمېسلی"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "موخه دوتنه شتون لري"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "ځانګړې دوتنه نه شي لمېسلی"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "ناسم پېلامتړنې ارزښت ورکړل شوی"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "نه شي لرلی '%c' دوتنه نومونه"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "د انځورن دوتنه"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "%s ناسم دوتنه نوم"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "%s :د دوتنه غونډال خبرتياوو اخيستلو کې ستونزه"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ولۍ درکموند نه شي بيانومولی"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "%s :دوتنه بيانومولو کې ستونزه"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "دوتنه نه شي بيانومولی، دوتنه نوم د مخکې نه شته"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "ناسم دوتنه نوم"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "%s :دوتنه پرانيستلو کې ستونزه"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "درکموند نه شي پرانيستلی"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "%s :دوتنې ړنګولو کې ستونزه"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr ""
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "%s د پوښۍ په جوړولو کې ستونزه:"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "%s :د پېلامي تړنې په جوړولو کې ستونزه"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "%s :دوتنه خوځولو کې ستونزه"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "يو درکموند پر بل درکموند نه شي خوځولی"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "د شاتړ دوتنې جوړونه پاتې راغله"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "%s :د موخه دوتنې په ړنګولو کې ستونزه"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "د ماونټونو ترمنځ خوځېدنه نه منل کيږي"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ناسمه کوډييزونه)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "%s :د پرېښلو په امستلو کې ستونزه"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "%s :د خاوند په امستلو کې ستونزه"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "%s :دوتنې نه لوستلو کې ستونزه"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "%s :دوتنه بندولو کې ستونزه"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "%s :پر دوتنې ليکلو کې ستونزه"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "%s :د زوړ شاتړ تړون په ړنګولو کې ستونزه"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "%s :شاتړ لمېسې جوړولو کې ستونزه"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "%s :د لنډمهاله دوتنې په بيانومولو کې ستونزه"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "%s :دوتنه پرانيستلو کې ستونزه '%s'"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "موخه دوتنه يوه پوښۍ ده"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "موخه دوتنه ساده دوتنه نه ده"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "دوتنه په بهرنۍ توګه بدله شوې وه"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "%s :د زړې دوتنې ړنګولو کې ستونزه"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "نوم"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "د انځورن نوم"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "نومونه"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "%s :د يونېکس نه په لوستلو کې تېروتنه"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "%s :د يونېکس په بندولو کې تېروتنه"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "دوتنه غونډال ولۍ"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "%s :پر يونېکس ليکلو کې تېروتنه"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "کاريال نه شي موندلی"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "%s :د کاريال په پېلولو کې تېروتنه"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "نه منل کيږي URIs"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ننوتنې نه پټول"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "د اوږد لړونې بڼه کارول"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[...دوتنه]"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..6495ce1
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,1914 @@
+# glib's Portuguese Translation
+# Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 glib
+# Distributed under the same licence as the glib package
+# Duarte Loreto <happyguy_pt@hotmail.com>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.26\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-25 00:40+0000\n"
+"Last-Translator: Duarte Loreto <happyguy_pt@hotmail.com>\n"
+"Language-Team: Portuguese <gnome_pt@yahoogroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Atributo '%s' inesperado para o elemento '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Atributo '%s' do elemento '%s' não foi encontrado"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Etiqueta '%s' inesperada, esperada a etiqueta '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Etiqueta '%s' inesperada dentro de '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Não foi encontrado nenhum ficheiro de marcador válido nos directórios de "
+"dados"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Já existe um marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Não foi encontrado nenhum marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Nenhum tipo MIME definido no marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Nenhum sinal privado definido no marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nenhum grupo definido no marcador para o URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Nenhuma aplicação denominada '%s' registou um marcador para '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Falha ao expandir a linha de execução '%s' com o URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Conversão do conjunto de caracteres '%s' para '%s' não é suportada"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Incapaz de abrir conversor de '%s' para '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Sequência de bytes inválida na origem da conversão"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Erro durante a conversão: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Sequência de caracteres parcial no final da origem"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Incapaz de converter recurso '%s' para conjunto de caracteres '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "O URI '%s' não é um URI absoluto que utiliza o esquema \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "O URI de ficheiro local '%s' não deverá incluir um '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "O URI '%s' é inválido"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "O nome de máquina do URI '%s' é inválido"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "O URI '%s' contém caracteres incorrectamente mascarados"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "O nome de caminho '%s' não é um caminho absoluto"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nome de máquina inválido"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Erro ao abrir o directório '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Incapaz de alocar %lu bytes para ler o ficheiro \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Erro ao ler o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Ficheiro \"%s\" é demasiado grande"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Falha ao ler do ficheiro '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Falha ao abrir o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Falha ao obter atributos do ficheiro '%s': falha no fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Falha ao abrir o ficheiro '%s': falha no fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Falha ao renomear o ficheiro '%s' para '%s': falha no g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Falha ao criar o ficheiro '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Falha ao abrir o ficheiro '%s' para escrita: falha no fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Falha ao escrever o ficheiro '%s': falha no fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Falha ao escrever o ficheiro '%s': falha no fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Falha ao escrever o ficheiro '%s': falha no fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Falha ao fechar o ficheiro '%s': falha no fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Incapaz de remover o ficheiro '%s' existente: falha no g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Modelo '%s' inválido, não deveria conter um '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Modelo '%s' não contém XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Falha ao ler o atalho '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Atalhos não são suportados"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Incapaz de abrir conversor de '%s' para '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Incapaz de efectuar uma leitura em bruto sobre g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Dados residuais não convertidos no buffer de leitura"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Canal termina num caracter parcial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Incapaz de efectuar uma leitura em bruto sobre g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Falha ao abrir o ficheiro '%s': falha no open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Falha ao mapear o ficheiro '%s': falha no mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Erro na linha %d caracter %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Erro na linha %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Detectada entidade vazia '&;'; entidades válidas são: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Caracter '%s' não é válido no início do nome de uma entidade; o caracter & "
+"inicia uma entidade; se este 'i comercial' não é suposto ser uma entidade, "
+"mascare-o como &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Caracter '%s' não é válido dentro do nome de uma entidade"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nome de entidade '%s' desconhecido"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entidade não termina com um ponto e vírgula; provavelmente foi utilizado um "
+"caracter 'i comercial' sem intenção de iniciar uma entidade - mascare-o como "
+"&amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Falha ao processar '%-.*s', que deveria ser um dígito dentro de uma "
+"referência de caracter (&#234; por exemplo) - talvez o dígito seja demasiado "
+"grande"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Referência de caracter '%-.*s' não codifica um caracter permitido"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Referência de caracter vazia; deverá incluir um dígito tal como &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Referência de caracter não termina com um ponto e vírgula; provavelmente foi "
+"utilizado um caracter 'i comercial' sem intenção de iniciar uma entidade - "
+"mascare-o como &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referência de entidade por terminar"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referência de caracter por terminar"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Texto codificado UTF-8 inválido - sequência demasiado extensa"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Texto codificado UTF-8 inválido - não é um caracter inicial"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Texto codificado UTF-8 inválido - '%s' inválido"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Documento tem de começar com um elemento (ex. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' não é um caracter válido após um caracter '<'; não pode iniciar um nome "
+"de elemento"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Caracter estranho '%s', era esperado um caracter '>' para terminar a "
+"etiqueta de elemento vazio '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Caracter estranho '%s', era esperado um '=' após o nome do atributo '%s' do "
+"elemento '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Caracter estranho '%s', era esperado um caracter '>' ou '/' para terminar a "
+"etiqueta inicial do elemento '%s', ou opcionalmente um atributo; talvez "
+"tenha sido utilizado um caracter inválido no nome de um atributo"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Caracter estranho '%s', era esperada uma abertura de aspa após o sinal de "
+"igual ao atribuir valor ao atributo '%s' do elemento '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' não é um caracter válido após os caracteres '</'; '%s' não pode iniciar "
+"o nome de um elemento"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' não é um caracter válido após o nome do elemento de fecho '%s'; o "
+"caracter permitido é '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elemento '%s' foi fechado, nenhum elemento está actualmente aberto"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Elemento '%s' foi fechado, mas o elemento actualmente aberto é '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Documento estava vazio ou apenas continha espaços"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Documento terminou inesperadamente logo após um caracter menor que '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Documento terminou inesperadamente com elementos ainda abertos - '%s' foi o "
+"último elemento aberto"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Documento terminou inesperadamente, era esperado um maior que '>' para "
+"terminar a etiqueta <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Documento terminou inesperadamente dentro do nome de um elemento"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Documento terminou inesperadamente dentro do nome de um atributo"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Documento terminou inesperadamente dentro da etiqueta de abertura de um "
+"elemento."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Documento terminou inesperadamente após o sinal de igual posterior a um nome "
+"de atributo; nenhum valor de atributo"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Documento terminou inesperadamente dentro do valor de um atributo"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Documento terminou inesperadamente dentro da etiqueta de fecho do elemento '%"
+"s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Documento terminou inesperadamente dentro de um comentário ou instrução de "
+"processamento"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objecto corrompido"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "erro interno ou objecto corrompido"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "sem memória livre"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "limite de retroceder alcançado"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "o padrão contém itens não suportados para comparação parcial"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "erro interno"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"referências anteriores como condições não são suportadas para comparação "
+"parcial"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "alcançado o limite de recursividade"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "alcançado o limite da área de trabalho para sub-expressões vazias"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinação inválida de parâmetros de quebra de linha"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "erro desconhecido"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ no final do padrão"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c no final do padrão"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "o caracter após \\ é desconhecido"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"não são aqui permitidos escapes de alteração de capitalização (\\l, \\L, "
+"\\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "números fora da ordem no quantificador {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "número demasiado grande no quantificador {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "falta o ] de fecho da classe de caracter"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "sequência de escape inválida na classe de caracter"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "intervalo fora da ordem na classe de caracter"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nada a repetir"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "caracter desconhecido após (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "caracter desconhecido após (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "caracter desconhecido após (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "classes denominadas POSIX apenas são suportadas dentro de uma classe"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "falta o ) de fecho"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") sem um ( de abertura"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ou (?[+-]números tem de ser seguido de )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referência a padrão inexistente"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "falta o ) após o comentário"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "expressão regular demasiado extensa"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "falha ao obter memória"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "asserção de verificação anterior não é de largura fixa"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "número ou nome mal formado após (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "grupo condicional contém mais de dois ramos"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "esperada uma asserção após (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nome de classe POSIX desconhecido"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "não são suportados os elementos de junção POSIX"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "valor do caracter na sequência \\x{...} é demasiado grande"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condição inválida (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C não é permitido numa asserção de verificação anterior"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "chamada recursiva pode iterar indefinidamente"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "falta o terminador no nome do subpadrão"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dois subpadrões denominados têm o mesmo nome"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "sequência \\P ou \\p mal formada"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nome de propriedade desconhecido após \\P ou \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "nome do subpadrão é demasiado extenso (máximo de 32 caracteres)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "demasiados subpadrões denominados (máximo de 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "valor octal é maior do que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "grupo DEFINE contém mais de um ramo"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "não é permitido repetir um grupo DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opções de NEWLINE inconsistentes"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g não é seguido de um nome com chavetas ou número não-zero com chavetas "
+"opcional"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetição inesperada"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "código fora dos limites"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "derramou fora da área de trabalho de compilação"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "subpadrão referenciado previamente verificado não foi encontrado"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Erro ao comparar a expressão regular %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "biblioteca PCRE está compilada sem suporte UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "biblioteca PCRE está compilada sem suporte para propriedades UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Erro ao compilar a expressão regular %s no caracter %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Erro ao optimizar a expressão regular %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "esperado um dígito hexadecimal ou '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "esperado um dígito hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "falta '<' na referência simbólica"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "referência simbólica por terminar"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referência simbólica de tamanho zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "esperado um dígito"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "referência simbólica ilegal"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "'\\' final a mais"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "sequência de escape desconhecida"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Erro ao processar o texto de substituição \"%s\" no caracter %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Texto citado não é iniciado com um caracter de aspa"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Aspa sem par na linha de comando ou outro texto de consola citado"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Texto terminou após um caracter '\\'. (O texto era '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Texto terminou antes de ser encontrada a aspa equivalente para %c. (O texto "
+"era '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Texto estava vazio (ou apenas continha espaços)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Falha ao ler dados de processo filho"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Falha ao criar canal para comunicar com processo filho (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Falha ao ler de canal filho (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Falha ao ir para directório '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Falha ao executar processo filho (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nome de aplicação inválido: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Expressão inválida no vector de argumentos na posição %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Expressão inválida no ambiente: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Directório de trabalho inválido: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Falha ao executar aplicação auxiliar (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Erro inesperado no g_io_channel_win32_poll() ao ler dados de um processo "
+"filho"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Falha ao ler dados de processo filho (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Erro inesperado no select() ao ler dados de processo filho (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Erro inesperado em waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Falha ao efectuar fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Falha ao executar o processo filho \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Falha ao redireccionar saída ou entrada de processo filho (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Falha ao efectuar fork de processo filho (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Erro desconhecido ao executar processo filho \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Incapaz de ler dados suficientes de canal pid do filho (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Caracter fora do limite para UTF-8 "
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Sequência inválida na conversão da entrada"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Caracter fora do limite para UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Utilização:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPÇÃO...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opções de Ajuda:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Apresentar as opções de ajuda"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Apresentar todas as opções de ajuda"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opções da Aplicação:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Incapaz de processar o valor inteiro '%s' para %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Valor inteiro '%s' para %s para lá do limite permitido"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Incapaz de processar o valor double '%s' para %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Valor double '%s' para %s para lá do limite permitido"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Erro ao processar a opção %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argumento em falta para %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opção %s desconhecida"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Incapaz de encontrar um ficheiro de chave válido nos directórios procurados"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Não é um ficheiro comum"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Ficheiro está vazio"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"O ficheiro de chave contém a linha '%s' que não é um par chave-valor, grupo "
+"ou comentário"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nome de grupo inválido: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Ficheiro de chave não começa com um grupo"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nome de chave inválida: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Ficheiro de chave contém uma codificação não suportada '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Ficheiro de chave não possui um grupo '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Ficheiro de chave não contém a chave '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Ficheiro de chave contém a chave '%s' com o valor '%s' que não é UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Ficheiro de chave contém a chave '%s' cujo valor não é interpretável."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Ficheiro de chave contém a chave '%s' no grupo '%s' cujo valor não é "
+"interpretável."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Ficheiro de chave não possui a chave '%s' no grupo '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Ficheiro de chave contém caracteres escapados no final da linha"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+"Ficheiro de chave contém uma sequência de caracteres escapados inválida '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Incapaz de interpretar o valor '%s' como um numérico."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Valor inteiro '%s' para além do limite permitido"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+"Incapaz de interpretar o valor '%s' como um número de vírgula flutuante."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Incapaz de interpretar o valor '%s' como uma boleana."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Valor de contagem demasiado grande passado para %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "O fluxo já se encontra fechado"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "A operação foi cancelada"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipo desconhecido"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "Tipo de ficheiro %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "Tipo %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Final precoce de fluxo inesperado"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Sem nome"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Ficheiro de área de trabalho não especifica campo Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Incapaz de encontrar a consola necessária à aplicação"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Incapaz de criar a pasta de configurações de utilizador da aplicação %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Incapaz de criar a pasta de configurações MIME do utilizador %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Incapaz de criar ficheiro de área de trabalho de utilizador %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definição personalizada de %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "a unidade não implementa a ejecção"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "a unidade não implementa a verificação de existência de media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Incapaz de manipular a versão %d da codificação GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Número de blocos (%d) mal-formado na codificação GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Incapaz de manipular a versão %d da codificação GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Número de blocos (%d) mal-formado na codificação GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Esperado um GEmblem para o GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operação não suportada"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Montagem contida não existe"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Incapaz de copiar sobre um directório"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Incapaz de copiar um directório sobre um directório"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Ficheiro de destino já existe"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Incapaz de copiar directório recursivamente"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Incapaz de copiar ficheiro especial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Dado um valor de atalho inválido"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Não existe suporte para o Lixo"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Nomes de ficheiros não podem conter '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "unidade não implementa a montagem"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Não existe nenhuma aplicação registada para gerir este ficheiro"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerador está fechado"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Enumerador de ficheiro tem uma operação por terminar"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Enumerador de ficheiro já está fechado"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "ficheiro"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "O ficheiro que contém o ícone"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Incapaz de manipular a versão %d da codificação GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Dados de entrada mal-formados para o GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Fluxo não suporta query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Fluxo não suporta procura"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Fluxo de entrada não permite truncar"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Fluxo não suporta truncar"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Número incorrecto de blocos (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Nenhum tipo para o nome da classe %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "O tipo %s não implementa o interface GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "O tipo %s não possui uma classe"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Número de versão mal-formado: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "O tipo %s não implementa from_tokens() no interface GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Incapaz de manipular a versão especificada pela codificação do ícone"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Fluxo de entrada não implementa a leitura"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Fluxo tem uma operação por terminar"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Incapaz de encontrar o tipo de monitor por omissão do directório local"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nome de ficheiro %s inválido"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Erro ao obter a informação do sistema de ficheiros: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Incapaz de renomear o directório raiz"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Erro ao renomear o ficheiro: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Incapaz de renomear o ficheiro, o nome já existe"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nome de ficheiro inválido"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Erro ao abrir o ficheiro: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Incapaz de abrir o directório"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Erro ao remover o ficheiro: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Erro ao enviar o ficheiro para o Lixo: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Incapaz de criar o directório de Lixo %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Incapaz de encontrar o directório de topo para o Lixo"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Incapaz de encontrar ou criar o directório de Lixo"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Incapaz de criar o ficheiro de informação do Lixo: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Incapaz de enviar o ficheiro para o Lixo: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Erro ao criar o directório: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Erro ao criar atalho: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Erro ao mover o ficheiro: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Incapaz de mover um directório sobre um directório"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Falha ao criar o ficheiro de cópia de segurança"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Erro ao remover o ficheiro de destino: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Não é suportado mover entre montados"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Valor do atributo tem de ser não-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipo de atributo inválido (esperada uma expressão)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nome de atributo extendido inválido"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Erro ao definir o atributo extendido '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Erro ao verificar o ficheiro '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codificação inválida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Erro ao verificar o descritor do ficheiro: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipo de atributo inválido (esperado um uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipo de atributo inválido (esperado um uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipo de atributo inválido (esperado uma expressão byte)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Erro ao definir as permissões: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Erro ao definir o dono: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "atalho tem de ser não-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Erro ao definir o atalho: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Erro ao definir o atalho: ficheiro não é um atalho"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "O contexto SELinux tem de ser não-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Erro ao definir o contexto SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "O SELinux não está activo neste sistema"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Não é suportada a definição do atributo %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Erro ao ler do ficheiro: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Erro ao procurar no ficheiro: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Erro ao fechar o ficheiro: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Incapaz de encontrar tipo de monitor por omissão de ficheiro local"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Erro ao escrever no ficheiro: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Erro ao remover o atalho para a cópia de segurança antiga: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Erro ao criar a cópia da cópia de segurança: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Erro ao renomear ficheiro temporário: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Erro ao truncar ficheiro: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Erro ao abrir o ficheiro '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Ficheiro de destino é um directório"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "O ficheiro de destino não é um ficheiro comum"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "O ficheiro foi alterado externamente"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Erro ao remover o ficheiro antigo: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Fornecido um GSeekType inválido"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Pedido de procura inválido"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Incapaz de truncar um GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Atingido o limite de dados de uma matriz"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Fluxo de saída de memória não é redimensionável"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Falha ao redimensionar fluxo de saída de memória"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "montar não implementa desmontar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "montar não implementa ejectar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "montar não implementa remontar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "montar não implementa detecção do tipo de conteúdo"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "montar não implementa detecção síncrona do tipo de conteúdo"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Fluxo de saída não implementa a escrita"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Fluxo de origem já está fechado"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nome"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "O nome do ícone"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nomes"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Uma matriz contendo os nomes dos ícones"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "utilizar nomes de recurso por omissão"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Se utilizar ou não os nomes de recurso criados abreviando o nome nos "
+"caracteres '-'. Ignora os nomes após o primeiro se forem indicados vários."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Incapaz de manipular a versão %d da codificação GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descritor de ficheiro"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "O descritor do ficheiro de onde ler"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Fechar o descritor de ficheiro"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Se fechar ou não o descritor do ficheiro quando o fluxo é fechado"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Erro ao ler de unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Erro ao fechar unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Raiz do sistema de ficheiros"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "O descritor de ficheiro onde escrever"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Erro ao escrever no unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "unidade não implementa a ejecção"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Incapaz de encontrar a aplicação"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Erro ao iniciar a aplicação: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Não são suportados URIs"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "alterações de associação não são suportadas em win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Criação de associação não é suportada em win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "não esconder as entradas"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "utilizar um formato de lista extenso"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FICHEIRO...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Erro ao criar o atalho para a cópia de segurança: %s"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr ""
+#~ "Incapaz de ler o ficheiro de área de trabalho que acabou de ser criado"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr ""
+#~ "Valor de contagem demasiado elevado passado a g_input_stream_read_async"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "Valor de contagem demasiado grande passado para g_input_stream_skip"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr ""
+#~ "Valor de contagem demasiado grande passado para g_input_stream_skip_async"
+
+#~ msgid "Target file already exists"
+#~ msgstr "Já existe o ficheiro de destino"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr ""
+#~ "Valor de contagem demasiado grande passado para g_output_stream_write"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr ""
+#~ "Valor de contagem demasiado grande passado para "
+#~ "g_output_stream_write_async"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Incapaz de alterar o modo do ficheiro: falha no fork(): %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Incapaz de alterar o modo do ficheiro: falha no waitpid(): %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Incapaz de alterar o modo do ficheiro: falha no chmod(): %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "Incapaz de alterar o modo do ficheiro: Filho terminado pelo sinal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Incapaz de alterar o modo do ficheiro: Filho terminou anormalmente"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Conversão do conjunto de caracteres `%s' para `%s' não é suportada"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Tamanho de mensagem incorrecto"
+
+#~ msgid "Socket error"
+#~ msgstr "Erro de socket"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "Canal definiu parâmetros não suportados"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..fae2a46
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,1865 @@
+# Brazilian Portuguese translation of glib.
+# Copyright (C) 2001-2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Gustavo Noronha Silva <kov@debian.org>, 2001-2005
+# Leonardo Ferreira Fontenelle <leonardof@gnome.org>, 2006-2009.
+# Vladimir Melo <vmelo@gnome.org>, 2007, 2009.
+# Luiz Armesto <luiz.armesto@gmail.com>, 2008.
+# Og Maciel <ogmaciel@gnome.org>, 2008.
+# Henrique P Machado <zehrique@gmail.com>, 2008.
+# Jonh Wendell <jwendell@gnome.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-16 17:14-0300\n"
+"Last-Translator: Vladimir Melo <vmelo@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <gnome-l10n-br@listas.cipsga.org.br>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Portuguese\n"
+"X-Poedit-Country: BRAZIL\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Atributo \"%s\" inesperado para elemento \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Não foi localizado atributo \"%s\" do elemento \"%s\""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Marca \"%s\" inesperada, esperava marca \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Marca \"%s\" inesperada dentro de \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Não foi localizado arquivo de marcadores válido nos diretórios de dados"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Já existe um marcador para o URI \"%s\""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Não foi localizado marcador para o URI \"%s\""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Não foi definido tipo MIME no marcador para o URI \"%s\""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Não foi definido sinal de particular no marcador para o URI \"%s\""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Não há grupos definidos no marcador para o URI \"%s\""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Nenhum aplicativo chamado \"%s\" registrou um marcador para \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Falha em expandir linha de execução \"%s\" com URI \"%s\""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+"Não há suporte à conversão do conjunto de caracteres \"%s\" para \"%s\""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Não foi possível abrir conversor de \"%s\" para \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Seqüência de bytes inválida na entrada de conversão"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Erro durante a conversão: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Seqüência de caracteres parcial no final da entrada"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+"Não é possível converter a seqüência \"%s\" para conjunto caracteres \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "O URI \"%s\" não é um URI absoluto que utilize o esquema \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "O URI de arquivo local \"%s\" não pode incluir um \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "O URI \"%s\" é inválido"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "O nome de servidor do URI \"%s\" é inválido"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "O URI \"%s\" contém caracteres com escape inválido"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "O nome de caminho \"%s\" não é um caminho absoluto"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nome de servidor inválido"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Erro ao abrir o diretório \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Não foi possível alocar %lu bytes para ler arquivo \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Erro ao ler arquivo \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Arquivo \"%s\" é muito grande"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Falha ao ler do arquivo \"%s\": %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Falha ao abrir arquivo \"%s\": %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Falha ao obter atributos do arquivo \"%s\": fstat() falhou: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Falha ao abrir arquivo \"%s\": fdopen() falhou: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Falha ao renomear arquivo \"%s\" para \"%s\": g_rename() falhou: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Falha ao criar arquivo \"%s\": %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Falha ao abrir arquivo \"%s\" para escrita: fdopen() falhou: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Falha ao escrever no arquivo \"%s\": fwrite() falhou: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Falha ao escrever no arquivo \"%s\": fflush() falhou: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Falha ao escrever no arquivo \"%s\": fsync() falhou: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Falha ao fechar arquivo \"%s\": fclose() falhou: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "O arquivo \"%s\" não pôde ser removido: g_unlink() falhou: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Modelo \"%s\" inválido, não deveria conter um \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Modelo \"%s\" não contém XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Falha ao ler link simbólico \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Não há suporte a links simbólicos"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Não foi possível abrir conversor de \"%s\" para \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Não é possível fazer uma leitura em bruto em g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Dados residuais não convertidos no buffer de leitura"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Canal termina num caractere parcial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Não é possível fazer uma leitura em bruto de g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Falha ao abrir arquivo \"%s\": open() falhou: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Falha ao mapear arquivo \"%s\": mmap() falhou: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Erro na linha %d caractere %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Erro na linha %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Entidade \"&;\" vazia vista; as entidades válidas são: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Caractere \"%s\" não é válido no início do nome da entidade; o caractere & "
+"inicia uma entidade; se este \"e\" comercial não é suposto ser uma entidade, "
+"escape-o como &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Caractere \"%s\" não é válido dentro de um nome de entidade"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Nome de entidade \"%s\" não é conhecido"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entidade não termina com um ponto e vírgula; provavelmente você utilizou um "
+"\"e\" comercial sem desejar iniciar uma entidade - escape-o com &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Falha ao analisar \"%-.*s\", que deveria ter sido um dígito dentro de uma "
+"referência de caractere (&#234; por exemplo) - talvez o dígito seja grande "
+"demais"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Referência de caractere \"%-.*s\" não codifica um caractere permitido"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Referência de caractere vazia; deveria incluir um dígito tal como &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Referência de caractere não terminou com um ponto e vírgula; provavelmente "
+"utilizou um caractere \"e\" comercial sem desejar iniciar uma entidade - "
+"escape-o com &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referência de entidade inacabada"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referência de caractere inacabada"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Texto codificado em UTF-8 inválido - seqüência muito extensa"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Texto codificado em UTF-8 inválido - não é um caractere inicial"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Texto codificado em UTF-8 inválido - '%s' não válido"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Documento tem de começar com um elemento (ex. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"\"%s\" não é um caractere válido após um caractere \"<\"; não poderá começar "
+"um nome de elemento"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Caractere estranho \"%s\", esperado um caractere \">\" para finalizar a "
+"marca \"%s\" de elemento vazio"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Caractere estranho \"%s\", esperava-se um \"=\" após o nome do atributo \"%s"
+"\" do elemento \"%s\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Caractere estranho \"%s\", esperava-se um caractere \">\" ou \"/\" para "
+"terminar a marca inicial do elemento \"%s\", ou opcionalmente um atributo; "
+"talvez tenha utilizado um caractere inválido no nome de atributo"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Caractere estranho \"%s\", esperava-se uma aspa aberta após o sinal de igual "
+"ao atribuir o valor ao atributo \"%s\" do elemento \"%s\""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"\"%s\" não é um caractere válido após os caracteres \"</\"; \"%s\" não "
+"poderá começar o nome de um elemento"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"\"%s\" não é um caractere válido após o nome do elemento de fecho \"%s\"; o "
+"caractere permitido é \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elemento \"%s\" foi fechado, nenhum elemento está atualmente aberto"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Elemento \"%s\" foi fechado, mas o elemento atualmente aberto é \"%s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Documento estava vazio ou apenas continha espaços"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Documento terminou inesperadamente logo após um menor que \"<\""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Documento terminou inesperadamente com elementos ainda abertos - \"%s\" foi "
+"o último elemento aberto"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Documento terminou inesperadamente, esperava-se ver um maior que (\">\") "
+"para terminar a marca <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Documento terminou inesperadamente dentro de um nome de elemento"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Documento terminou inesperadamente dentro de um nome de atributo"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Documento terminou inesperadamente dentro de uma marca de abertura de "
+"elemento."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Documento terminou inesperadamente após o sinal de igual que se seguiu a um "
+"nome de atributo; nenhum valor de atributo"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Documento terminou inesperadamente dentro de um valor de atributo"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Documento terminou inesperadamente dentro da marca de fechamento do elemento "
+"\"%s\""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Documento terminou inesperadamente dentro de um comentário ou instrução de "
+"processamento"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objeto corrompido"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "erro interno ou objeto corrompido"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "memória insuficiente"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "limite de backtracking alcançado"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "o padrão contém itens sem suporte para correspondência parcial"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "erro interno"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"não há suporte à referência retroativa como condição para correspondência "
+"parcial"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "limite de recursão alcançado"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "limite de espaço de trabalho para substrings vazias alcançado"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinação inválida de sinalizador de nova linha"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "erro desconhecido"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ no fim do padrão"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c no fim do padrão"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "caractere não reconhecido segue \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"escapes de alteração de maiusculização (\\l, \\L, \\u, \\U) não são "
+"permitidos aqui"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "números fora de ordem no quantificador {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "número grande demais no quantificador {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "terminação ] em falta para classe de caracteres"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "seqüência de escape inválida na classe de caracteres"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "intervalo fora de ordem na classe de caracteres"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nada a repetir"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "caractere não reconhecido após (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "caractere não reconhecido após (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "caractere não reconhecido após (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "classes nomeadas POSIX têm suporte apenas dentro de uma classe"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "terminação ) em falta"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") sem abrir ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "dígitos (?R ou (?[+-] devem ser seguidos por )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referência a subpadrão não existente"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ") em falta após o comentário"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "expressão regular grande demais"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "falha ao obter memória"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "declaração lookbehind não é de largura fixa"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "número mal formado ou nome após (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "grupo condicional contém mais que duas ramificações"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "esperava-se declaração após (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nome de classe POSIX desconhecido"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "elementos de arranjo POSIX sem suporte"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "valor de caractere na seqüência \\x{...} é grande demais"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condição inválida (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C não permitido na declaração lookbehind"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "chamada recursiva pode causar uma repetição indefinidamente"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "terminação em falta no nome do subpadrão"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dois subpadrões nomeados têm o mesmo nome"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "seqüência \\P ou \\p mal formada"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nome de propriedade desconhecido após \\P ou \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "nome de subpadrão é grande demais (máximo 32 caracteres)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "excesso de subpadrões nomeados (máximo 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "valor octal é maior que \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "O grupo DEFINE contém mais que uma ramificação"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "repetição de um grupo DEFINE não é permitida"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opções do NEWLINE inconsistentes"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g não é seguido por um nome entre chaves ou um número diferente de zero "
+"opcionalmente entre chaves"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetição inesperada"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "estouro de código"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "espaço de trabalho de compilação invadido"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "subpadrão de referência verificado anteriormente não localizado"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Erro ao coincidir expressão regular %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Biblioteca PCRE compilada sem suporte a UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Biblioteca PCRE compilada sem suporte às propriedades UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Erro ao compilar expressão regular %s no caractere %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Ero ao otimizar expressão regular %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "esperava-se dígito hexadecimal ou \"}\""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "esperava-se dígito hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "\"<\" em falta na referência simbólica"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "referência simbólica inacabada"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referência simbólica de comprimento zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "esperava-se dígito"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "referência simbólica ilegal"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "\"\\\" final sem isolado"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "seqüência de escape desconhecida"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Erro ao analisar texto de substituição \"%s\" no caractere %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Texto citado não começa com uma aspa"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Aspa sem par na linha de comando ou outro texto de console"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Texto terminou logo após um caractere \"\\\". (O texto era \"%s\")"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Texto terminou antes da aspa equivalente ter sido localizada para %c. (texto "
+"era \"%s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Texto estava vazio (ou apenas continha espaços)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Falha ao ler dados de processo filho"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Falha ao criar canal para comunicar com processo filho (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Falha ao ler de canal filho (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Falha ao ir para diretório \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Falha ao executar processo filho (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nome de programa inválido: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "String inválida no vetor de argumentos em %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "String inválida no ambiente: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Diretório de trabalho inválido: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Falha ao executar programa auxiliar (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Erro inesperado no g_io_channel_win32_poll() ao ler dados de um processo "
+"filho"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Falha ao ler dados de processo filho (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Erro inesperado no select() ao ler dados de processo filho (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Erro inesperado em waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Falha no fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Falha ao executar processo filho \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Falha ao redirecionar saída ou entrada do processo filho (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Falha no fork de processo filho (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Erro desconhecido ao executar processo filho \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Falha ao ler dados suficientes de canal pid do filho (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Caractere fora do limite para UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Seqüência inválida na conversão da entrada"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Caractere fora do limite para UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Uso:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPÇÕES...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opções de ajuda:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Exibir opções de ajuda"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Exibir todas as opções de ajuda"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opções de aplicativo:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Não é possível analisar o valor inteiro \"%s\" para %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Valor inteiro \"%s\" para %s fora dos limites"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+"Não é possível analisar o ponto flutuante com dupla precisão \"%s\" para %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Ponto flutuante com dupla precisão \"%s\" para %s fora dos limites"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Erro ao ler a opção %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Falta argumento para %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opção %s desconhecida"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Não foi possível localizar arquivo de chave válido nos diretórios pesquisados"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Não é um arquivo comum"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Arquivo vazio"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Arquivo de chave contém a linha \"%s\" que não é um par chave-valor, grupo "
+"ou comentário"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nome de grupo inválido: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Arquivo de chave não começa com um grupo"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nome de chave inválido: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Arquivo de chave contém codificação \"%s\" sem suporte"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Arquivo de chave não tem grupo \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Arquivo de chave não tem chave \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Arquivo de chave contém chave \"%s\" com valor \"%s\" que não é UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Arquivo de chave contém chave \"%s\" que tem valor que não pode ser "
+"interpretado."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Arquivo de chave contém chave \"%s\" no grupo \"%s\" que tem valor que não "
+"pode ser interpretado."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Arquivo de chave não tem chave \"%s\" no grupo \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Arquivo de chave contém caractere de escape no fim da linha"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Arquivo de chave contém seqüência de escape \"%s\" inválida"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "O valor \"%s\" não pode ser interpretado como um número."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Valor inteiro \"%s\" fora dos limites"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "O valor \"%s\" não pode ser interpretado como ponto flutuante."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "O valor \"%s\" não pode ser interpretado como um booleano."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Valor muito alto passado para %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "O fluxo já está fechado"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "A operação foi cancelada"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tipo desconhecido"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "tipo de arquivo %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "tipo %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Fim do fluxo precoce não esperado"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Não nomeado"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "O arquivo da área de trabalho não especifica o campo Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Não é possível localizar o terminal requerido para o aplicativo"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Não é possível criar pasta de configuração do aplicativo do usuário %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Não é possível criar pasta de configuração MIME do usuário %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Não é possível criar arquivo %s da área de trabalho do usuário"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definição personalizada para %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "drive não implementa ejetar"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "drive não implementa verificação por mídia"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Não é possível lidar com a versão %d da codificação GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Número inválido de tokens (%d) na codificação GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Não é possível lidar com a versão %d da codificação GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Número inválido de tokens (%d) na codificação GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Esperado um GEmblem para o GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operação sem suporte"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Ponto de montagem contido não existe"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Não é possível copiar sobre diretório"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Não é possível copiar diretório sobre diretório"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Arquivo alvo existe"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Não é possível copiar o diretório recursivamente"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Não é possível copiar o arquivo especial"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Valor fornecido de link simbólico inválido"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Não há suporte para lixeira"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Nomes de arquivo não podem conter \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volume não implementa montagem"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Nenhum aplicativo está registrado como manipulador deste arquivo"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "O enumerador está fechado"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "O enumerador do arquivo tem operação pendente"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "O enumerador do arquivo já está fechado"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "arquivo"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "O arquivo contendo o ícone"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Não é possível lidar com a versão %d da codificação GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Dados de entrada malformados para o GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Fluxo não tem suporte para query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Não há suporte à busca no fluxo"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Truncar não permitido no fluxo de entrada"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Não há suporte a truncar no fluxo"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Número errado de tokens (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Sem tipo para a classe chamada %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "O tipo %s não implementa a interface GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "O tipo %s não tem classe"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Número de versão malformado: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "O tipo %s não implementa from_tokens() na interface GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Não é possível lidar com a versão fornecida da codificação do ícone"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Fluxo de entrada não implementa leitura"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "O fluxo tem operação pendente"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Não é possível localizar o tipo de diretório monitor local padrão"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nome de arquivo inválido: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Erro ao obter informações do sistema de arquivos: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Não é possível renomear o diretório root"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Erro ao renomear arquivo: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Não é possível renomear o arquivo, o nome do arquivo já existe"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nome de arquivo inválido"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Erro ao abrir arquivo: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Não é possível abrir diretório"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Erro ao remover arquivo: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Erro ao mover arquivo para a lixeira: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Não é possível criar o diretório da lixeira %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Não é possível localizar diretório de nível superior para a lixeira"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Não é possível localizar ou criar o diretório da lixeira"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Não é possível criar o arquivo de informações da lixeira: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Não é possível mover arquivo para a lixeira: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Erro ao criar o diretório: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Erro ao criar link simbólico: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Erro ao mover arquivo: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Não é possível mover diretório sobre diretório"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Falha ao criar arquivo de backup"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Erro ao remover arquivo alvo: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Não há suporte a mover entre montagens"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Valor de atributo deve ser não-NULO"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tipo de atributo inválido (esperava-se expressão)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nome de atributo estendido inválido"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Erro ao definir atributo estendido \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Erro ao iniciar arquivo \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr "(codificação inválida)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Erro ao iniciar descritor de arquivo: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tipo de atributo inválido (esperado uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tipo de atributo inválido (esperado uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tipo de atributo inválido (expressão de byte esperada)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Erro ao definir permissões: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Erro ao definir proprietário: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "o link simbólico deve ser não-NULO"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Erro ao definir link simbólico: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Erro ao definir link simbólico: o arquivo não é um link simbólico"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "O contexto SELinux deve ser não-NULO"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Erro ao definir o contexto SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux não está habilitado neste sistema"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Não há suporte à definição do atributo %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Erro ao ler do arquivo: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Erro ao buscar no arquivo: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Erro ao fechar arquivo: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Não é possível localizar o tipo de arquivo monitor local padrão"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Erro ao escrever no arquivo: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Erro ao remover link antigo de backup: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Erro ao criar cópia de backup: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Erro ao renomear arquivo temporário: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Erro ao truncar arquivo: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Erro ao abrir arquivo \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Arquivo alvo é um diretório"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Arquivo alvo não é um arquivo comum"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "O arquivo foi modificado externamente"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Erro ao remover arquivo antigo: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "GSeekType fornecido inválido"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Solicitação de busca inválida"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Não é possível truncar GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Foi alcançado o limite máximo de matriz de dados"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Fluxo de saída da memória não redimensionável"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Falha ao redimensionar fluxo de saída da memória"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "objeto de montagem não implementa desmontar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "objeto de montagem não implementa ejetar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "objeto de montagem não implementa remontar"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "objeto de montagem não implementa estimativa de tipo de conteúdo"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"objeto de montagem não implementa estimativa de tipo de conteúdo síncrono"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Fluxo de saída não implementa escrita"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "A fonte do fluxo já está fechada"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nome"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "O nome do ícone"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nomes"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Um array contendo os nomes dos ícones"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "usa os fallbacks padrões"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Se deve tentar os nomes mais curtos, localizados através do caractere '-'. "
+"Ignora nomes depois do primeiro, de vários foram fornecidos."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Não é possível lidar com a versão %d da codificação GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descritor de arquivo"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "O descritor de arquivo de onde ler"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Fechar descritor de arquivo"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Fechar ou não o descritor de arquivo quando o fluxo for fechado"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Erro ao ler do unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Erro ao fechar unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Sistema de arquivos root"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "O descritor de arquivo para o qual escrever"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Erro ao escrever para unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volume não implementa ejetar"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Não é possível localizar o aplicativo"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Erro ao lançar o aplicativo: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Não há suporte a URIs"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "não há suporte às alterações de associação em win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Não há suporte à criação de associação em win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "não ocultar entradas"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "usar um formato de listagem longo"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ARQUIVO...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u bytes"
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..a2bd86f
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,1857 @@
+# Romanian translation for glib
+# Copyright (C) 2001 - 2008 Free Software Foundation, Inc.
+# Marius Andreiana <mandreiana@yahoo.com>, 2001.
+# Mișu Moldovan <dumol@gnome.ro>, 2004 - 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-04 23:52+0200\n"
+"Last-Translator: Mișu Moldovan <dumol@gnome.ro>\n"
+"Language-Team: Română <gnomero-list@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Nu se aștepta un atribut „%s” pentru elementul „%s”"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Atributul „%s” al elementului „%s” nu a putut fi găsit"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "S-a primit eticheta „%s”, se aștepta eticheta „%s”"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Nu se aștepta eticheta „%s” în „%s”"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Nu s-a găsit un fișier valid cu favorite în directoarele de date"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Un favorit pentru URI-ul „%s” există deja"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Nu s-a găsit un favorit pentru URI-ul „%s”"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Nu există un tip MIME definit în favoritul URI-ului „%s”"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Nu există un indicator privat definit în favoritul URI-ului „%s”"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nu există grupuri definite în favoritul URI-ului „%s”"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+"Nu există o aplicație cu numele „%s” înregistrată în favoritul pentru „%s”"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Nu s-a putut expanda linia de comandă „%s” cu URI-ul %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Conversia de la setul de caractere „%s” la „%s” nu este implementată"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nu s-a putut iniția conversia de la „%s” la „%s”"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Secvență de octeți incorectă în inputul conversiei"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Eroare în timpul conversiei: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Secvență parțială de caractere la sfârșitul inputului"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Nu se poate converti rezerva „%s” la setul de caractere „%s”"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI-ul „%s” nu este un URI absolut folosind schema „fișier”"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI-ul fișierului local „%s” nu poate include un „#”"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI-ul „%s” este nevalid"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Numele din URI-ul „%s” este nevalid"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI-ul „%s” conține caractere „escaped” incorecte"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Calea „%s” nu este o cale absolută"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Nume nevalid"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Eroare la deschiderea directorului „%s”: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nu s-au putut aloca %lu octeți pentru citirea fișierului „%s”"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Eroare la citirea fișierului „%s”: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Fișierul „%s” este prea mare"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Nu s-a putut citi din fișierul „%s”: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nu s-a putut deschide fișierul „%s”: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Nu s-au putut obține atributele fișierului „%s”: fstat() a eșuat: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nu s-a putut deschide fișierul „%s”: fdopen() a eșuat: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Nu s-a putut redenumi fișierul „%s” în „%s”: g_rename() a eșuat: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Nu s-a putut crea fișierul „%s”: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Nu s-a putut deschide fișierul „%s” pentru scriere, fdopen() a eșuat: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nu s-a putut scrie fișierul „%s”: fwrite() a eșuat: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nu s-a putut scrie fișierul „%s”: fwrite() a eșuat: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nu s-a putut scrie fișierul „%s”: fwrite() a eșuat: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nu s-a putut închide fișierul „%s”: fclose() a eșuat: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Fișierul existent „%s” nu a putut fi șters: g_unlink() a eșuat: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Șablonul „%s” este incorect, n-ar trebui să conțină un „%s”"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Șablonul „%s” nu conține XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Nu s-a putut citi linkul simbolic „%s”: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Linkurile simbolice nu sunt implementate"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nu s-a putut iniția conversia de la „%s” la „%s”: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Nu s-au putut citi datele brute din g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Date neconvertite rămase în memoria tampon pentru citire"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Canalul se termină cu un caracter parțial"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Nu s-au putut citi datele brute din g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nu s-a putut deschide fișierul „%s”: open() a eșuat: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nu s-a putut mapa fișierul „%s”: mmap() a eșuat: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Eroare în linia %d, caracterul %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Eroare în linia %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"S-a depistat o entitate nulă „&;”. Entitățile valide sunt: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Caracterul „%s” nu este valid la începutul numelui unei entități. Caracterul "
+"„&” e cel ce începe o entitate. Dacă acest ampersand nu ar trebui să fie o "
+"entitate, utilizați &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Caracterul „%s” nu este valid în cadrul unui nume de entitate"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Numele entității „%s” nu este cunoscut"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entitatea nu s-a terminat cu punct și virgulă. Probabil că ați folosit un "
+"caracter ampersand fără intenția de a începe o entitate. Utilizați &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nu s-a putut procesa „%-.*s”, care ar fi trebuit să fie o cifră într-un "
+"caracter referință (de exemplu &#234;). Poate cifra este prea mare"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Referința caracterului „%-.*s” nu codează un caracter permis"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Referință caracter goală. Ar trebui să includă o cifră precum &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Referința caracter nu s-a terminat cu punct și virgulă. Probabil ați folosit "
+"un caracter ampersand fără intenția de a începe o entitate. Utilizați &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Referință neterminată la o entitate"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referință caracter neterminată"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Text codat UTF-8 incorect - secvență prea lungă"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Text codat UTF-8 incorect - nu e un caracter de start"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Text codat UTF-8 incorect - „%s” nevalid"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Documentul trebuie să înceapă cu un element (de ex. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s” nu este un caracter valid după caracterul „<”, nu poate începe numele "
+"unui element"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Caracter neobișnuit „%s”, se aștepta un „>” pentru a termina eticheta de "
+"element gol „%s”"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Caracter neobișnuit „%s”, se aștepta un „=” după numele atributului „%s” al "
+"elementului „%s”"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Caracter neobișnuit „%s”, se aștepta un „>” sau „/” pentru a termina "
+"eticheta de început a elementului „%s” sau opțional un atribut. Poate ați "
+"utilizat un caracter incorect în numele atributului"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Caracter neobișnuit „%s”, se așteptau ghilimele de deschidere după semnul "
+"egal pentru a da valoarea atributului „%s” al elementului „%s”"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s” nu este un caracter valid după caracterele „</”. „%s” nu poate începe "
+"un nume de element"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s” nu este un caracter valid după numele elementului de închidere „%s”. "
+"Caracterul permis este „>”"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elementul „%s” a fost închis, nici un element nu este curent deschis"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Elementul „%s” a fost închis, dar elementul deschis curent este „%s”"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Documentul era gol sau conținea doar spațiu gol"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Documentul s-a terminat în mod neașteptat imediat după un caracter „<”"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat cu unele elemente încă deschise. „%"
+"s” a fost ultimul element deschis"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat, se aștepta un caracter „>” care "
+"să încheie eticheta <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat în cadrul numelui unui element"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat în cadrul numele unui atribut"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Documentul s-a terminat în mod neașteptat în cadul unei etichete ce "
+"deschidea un element"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat după semnul egal ce urma unui nume "
+"atribut. Nici o valoare pentru atribut"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat în cadrul valorii unui atribut"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat în cadrul etichetei de închidere a "
+"elementului „%s”"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Documentul s-a terminat în mod neașteptat în cadrul unui comentariu sau a "
+"unei instrucțiuni de procesare"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "obiect corupt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "eroare internă sau obiect corupt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "memorie insuficientă"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "s-a atins limita de „backtracking”"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"modelul de căutare conține elemente pentru care nu se pot face comparații "
+"parțiale"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "eroare internă"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"pentru condițiile de tip „back reference” nu se pot face comparații parțiale"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "s-a atins limita de recursivitate"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "s-a atins limita maximă pentru substringuri nule"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "combinație incorectă de indicatori de linie nouă"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "eroare necunoscută"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ la sfârșitul unui „pattern”"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c la sfârșitul unui „pattern”"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "după \\ urmează un caracter necunoscut"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"nu se permite aici trecerea la majuscule sau invers prin folosirea de "
+"caractere „escape” (\\l, \\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numere neordonate în cuantificatorul {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "număr prea mare în cuantificatorul {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "lipsește un ] de închidere pentru clasa caracter"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "secvență incorectă de tip „escape” în clasa caracter"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "interval depășit în clasa caracter"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "nimic de repetat"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "caracter nerecunoscut după (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "caracter nerecunoscut după (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "caracter nerecunoscut după (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "clasele cu nume POSIX sunt implementate doar înăuntrul altei clase"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "lipsește un ) de închidere"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") fără un ( în față"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R sau (?[+-]digiți trebuie urmați de )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referință la un „subpattern” inexistent"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "lipsește un ) după comentariu"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "expresie regulată prea lungă"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "nu s-a putut aloca memoria"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "aserțiunea „lookbehind” nu e de lungime fixă"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "număr greșit formatat sau nume după (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "grupul de condiții conține mai mult de două ramuri"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "se așteaptă o aserțiune după (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "nume necunoscut de clasă POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "elementele POSIX de unire nu sunt implementate"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "valoarea caracterului în secvența \\x{...} este prea mare"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "condiție nevalidă (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C nu este permis în aserțiunea „lookbehind”"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "apelul recursiv e pasibil de a intra în buclă infinită"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "terminator lipsă în numele de „subpattern”"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "două „subpattern”-uri au același nume"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "secvență malformată \\P sau \\p"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "nume necunoscut de proprietate după \\P ori \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "nume de „subpattern” prea lung (sunt permise cel mult 32 de caractere)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "prea multe nume de „subpattern”-uri (sunt permise cel mult 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "valoarea octală este mai mare decât \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "grupul DEFINE conține mai mult de o ramură"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "nu se permite repetarea unui grup DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opțiuni NEWLINE inconsistente"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g nu este urmat de un nume între acolade sau un număr diferit de zero, "
+"opțional între acolade"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "repetare neașteptată"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "„overflow” în cod"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "spațiul de compilare a fost depășit"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "nu s-a găsit „subpattern”-ul referit și verificat anterior"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Eroare la compararea expresiei regulate %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Biblioteca PCRE este compilată cu suport UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Biblioteca PCRE este compilată fără suport pentru proprietăți UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Eroare la parsarea expresiei regulate %s la caracterul %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Eroare la optimizarea expresiei regulate %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "se aștepta un digit hexadecimal or „}”"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "se aștepta un digit hexadecimal"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "„<” lipsă în referința simbolică"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "referință simbolică neterminată"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referință simbolică de lungime zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "se aștepta un digit"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "referință simbolică ilegală"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "„\\” inutil la final"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "secvență „escape” necunoscută"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Eroare la prelucrarea textului de înlocuire „%s” la caracterul %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Textul citat nu începe cu un semn de citare"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Semn de citare nepereche în linia de comandă sau text „shell-quoted”"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Textul s-a terminat imediat după un caracter „\\” (textul era „%s”)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Textul s-a terminat înainte de semnul de citare pereche pentru %c (textul "
+"era „%s”)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Textul era gol (sau conținea doar spațiu gol)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nu s-au putut citi datele de la procesul copil"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Nu s-a putut crea conectorul „pipe” pentru comunicarea cu procesul copil (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nu s-au putut citi datele din conectorul „pipe” copil (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nu s-a putut schimba directorul curent în directorul „%s” (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nu s-a putut executa procesul copil (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Nume incorect de program: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Secvență incorectă în vectorul argumentului la %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Secvență incorectă în variabilele de mediu: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Director curent nevalid: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nu s-a putut porni programul asociat (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Eroare neașteptată în g_io_channel_win32_poll() la citirea datelor de la "
+"procesul copil"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nu s-au putut citi datele din procesul copil (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Eroare neașteptată în select() la citirea datelor din procesul copil (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Eroare neașteptată în waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Nu s-a putut clona procesul (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nu s-a putut executa procesul „%s” (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nu s-a putut redirecta ieșirea sau inputul procesului copil (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nu s-a putut clona procesul copil (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Eroare necunoscută la lansarea în execuție a procesului copil „%s”"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Nu s-au putut citi date suficiente de la procesul copil (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Caracter în afara limitelor standardului UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Secvență incorectă în inputul conversiei"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Caracter în afara limitelor standardului UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Utilizare:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPȚIUNE...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opțiuni ajutor:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Arată opțiunile de ajutor"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Arată toate opțiunile de ajutor"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opțiuni aplicație:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Nu se poate prelucra valoarea întregului „%s” pentru %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Valoarea întregului „%s” pentru %s este în afara limitelor"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nu se poate prelucra valoarea dublă „%s” pentru %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Valoarea dublă „%s” pentru %s este în afara limitelor"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Eroare la prelucrarea opțiunii %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argument lipsă pentru %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opțiune necunoscută %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Nu s-a găsit un fișier cheie valid în directoarele de căutare"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nu e un fișier obișnuit"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Fișierul e gol"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Fișierul-cheie conține linia „%s” care nu este o pereche cheie-valoare, un "
+"grup sau un comentariu"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Nume incorect de grup: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Fișierul cheie nu începe cu un grup"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Nume incorect de cheie: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Fișierul cheie are o codare neimplementată de tip „%s”"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Fișierul cheie nu are grupul „%s”"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Fișierul cheie nu are cheia „%s”"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Fișierul cheie conține cheia „%s”, cu valoarea „%s”, ce nu este UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Fișierul cheie conține cheia „%s”, ce are o valoare neinterpretabilă."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Fișierul cheie conține cheia „%s” în grupul „%s”, care are o valoare ce nu "
+"poate fi interpretată"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Fișierul cheie nu are cheia „%s” în grupul „%s”"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Fișieul cheie conține caractere „escape” la sfârșit de linie"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "URI-ul „%s” conține secvențe „escaped” incorecte"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Valoarea „%s” nu poate fi interpretată ca un număr."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Valoarea întregului „%s” este în afara limitelor"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Valoarea „%s” nu poate fi interpretată ca un număr flotant."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Valoarea „%s” nu poate fi interpretată ca o valoare booleană."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "S-a pasat o valoare prea mare către %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Flux deja închis"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operațiunea a fost anulată"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Tip necunoscută"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "tip de fișier %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "tip %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Flux terminat neașteptat de repede"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Nedenumit"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Fișierul desktop nu are specificat un câmp „Exec”"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Nu s-a găsit un terminal pentru pornirea aplicației"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"Nu se poate crea pentru utilizator directorul cu opțiunile aplicației %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Nu se poate crea pentru utilizator directorul cu opțiunile MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Nu se poate crea fișierul desktop %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Definiție personalizată pentru %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "unitatea nu poate ejecta discul"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "unitatea nu poate verifica periodic pentru discuri noi"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Nu se poate gestiona versiunea %d a codării GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Număr greșit formatat de elemente (%d) în codarea GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Nu se poate gestiona versiunea %d a codării GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Număr greșit formatat de elemente (%d) în codarea GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Se aștepta un GEmblem pentru GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operațiune neimplementată"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Montarea conținută nu există"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Nu se poate copia peste director"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Nu se poate copia un director peste un alt director"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Fișierul destinație există deja"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Nu se poate copia recursiv directorul"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Nu se poate copia fișierul special"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "S-a primit o valoare incorectă pentru linkul simbolic"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Nu există o implementare pentru coșul de gunoi"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Numele de fișiere nu pot conține „%c”"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volumul nu implementează montarea"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Nu există o aplicație înregistrată pentru deschiderea acestui fișier"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumeratorul este închis"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Enumeratorul fișierului este deja deschis de o altă operațiune"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Enumeratorul fișierului este deja închis"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fișier"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Fișierul conținând iconița"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Nu se poate gestiona versiunea %d a codării GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Date de input malformate pentru GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Fluxul nu implementează „query_info”"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Căutarea în flux nu este implementată"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Nu se permite trunchierea fluxului de input"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Trunchierea fluxului nu este implementată"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Număr greșit de elemente (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Nici un tip pentru numele clasei %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Tipul %s nu implementează interfața GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Tipul %s nu este clasificat"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Număr malformat de versiune: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Tipul %s nu implementează from_tokens() în interfața GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Nu se poate gestiona versiunea furnizată pentru codarea iconiței"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Fluxul de input nu are implementată o funcție de citire"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Asupra fluxului se execută deja o operațiune"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"Nu s-a putut identifica tipul implicit de monitorizare a directoarelor locale"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Nume incorect de fișier: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Eroare la citirea detaliilor sistemului de fișiere: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Nu se poate redenumi directorul rădăcină"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Eroare la redenumirea fișierului: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Nu se poate redenumi fișierul, numele de fișier există deja"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Nume nevalid de fișier"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Eroare la deschiderea fișierului: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Nu se poate deschide directorul"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Eroare la ștergerea fișierului: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Eroare la mutarea la coș a fișierului: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Nu s-a putut crea directorul coșului de gunoi „%s”: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Nu s-a găsit directorul de top pentru coșul de gunoi"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Nu s-a putut găsi ori crea directorul coșului de gunoi"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Nu s-a putut crea fișierul cu detalii despre mutarea la coș: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Nu s-a putut muta la coș fișierul: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Eroare la crearea directorului: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Eroare la crearea linkului simbolic: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Eroare la mutarea fișierului: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Nu se poate muta un director peste un alt director"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Crearea fișierului de backup a eșuat"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Eroare la ștergerea fișierului destinație: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+"Operațiunea de mutare între două dispozitive montate nu este implementată"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Valoarea atributului trebuie să fie diferită de NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Tip incorect de atribut (se aștepta un șir)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Nume incorect de atribut extins"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Eroare la stabilirea atributului extins „%s”: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Eroare la citirea detaliilor fișierului „%s”: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (codare incorectă)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Eroare la citirea descriptorilor fișierului: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Tip incorect de atribut (se aștepta o valoare uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Tip incorect de atribut (se aștepta o valoare uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Tip incorect de atribut (se aștepta un șir de octeți)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Eroare la definirea drepturilor: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Eroare la definirea deținătorului: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "linkul simbolic trebuie să fie diferit de NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Eroare la definirea linkului simbolic: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Eroare la definirea linkului simbolic: fișierul nu este un link simbolic"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Contextul SELinux trebuie să fie diferit de NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Eroare la definirea contextului SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux nu este activat pentru acest sistem"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Definirea atributului %s nu este implementată"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Eroare la citirea din fișier: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Eroare la căutarea în fișier: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Eroare la închiderea fișierului: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Nu s-a găsit tipul implicit de monitorizare a fișierelor locale"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Eroare la scrierea în fișier: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Eroare la ștergerea vechiului link simbolic de backup: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Eroare la crearea copiei de backup: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Eroare la redenumirea fișierului temporar: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Eroare la trunchierea fișierului: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Eroare la deschiderea fișierului „%s”: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Fișierul destinație este un director"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Fișierul destinație nu este un fișier obișnuit"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Fișierul a fost modificat de o terță parte"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Eroare la ștergerea vechiului fișier: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "S-a primit un „GSeekType” nevalid"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Cerere nevalidă de căutare"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Nu se poate trunchia GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "S-a atins limita maximă a matricii de date"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Fluxul de ieșire al memoriei nu poate fi redimensionat"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Nu s-a putut redimensiona fluxul de ieșire al memoriei"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "obiectul montat nu implementează demontarea"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "obiectul montat nu implementează ejectarea"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "obiectul montat nu implementează remontarea"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "obiectul montat nu implementează detecția automată a conținutului"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"obiectul montat nu implementează detecția automată și sincronizată a "
+"conținutului"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Fluxul de ieșire nu implementează scrierea"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Sursa fluxului este deja închisă"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "nume"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Numele iconiței"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "nume"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "O matrice conținând numele iconițelor"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "utilizează variantele de rezervă"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Specifică dacă să se utilizeze variantele de rezervă implicite prin "
+"prescurtarea numelor la caracterele „-”. Se vor ignora numele de după cel "
+"dintâi dacă sunt precizate mai multe."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Nu se poate gestiona versiunea %d a codării GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Descriptor de fișier"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Descriptorul fișierului de citit"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Închide descriptorul fișierului"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+"Specifică dacă se închide descriptorul fișierului la închiderea fluxului"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Eroare la citirea din „unix”: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Eroare la închiderea „unix”: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Rădăcina sistemului de fișiere"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Descriptorul fișierului de scris"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Eroare la scrierea în „unix”: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "Volumul nu implementează ejectarea"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Nu s-a găsit aplicația"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Eroare la lansarea aplicației: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Linkurile de tip URI nu sunt implementate"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "editarea asocierilor de fișiere nu e implementată în Windows"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Crearea asocierilor de fișiere nu este implementată în Windows"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "nu ascunde intrările"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "utilizează un format detaliat de listare"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FIȘIER...]"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..a999946
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1885 @@
+# translation of glib to Russian
+# Copyright (C) 1998-2002, 2004, 2006, 2008 Free Software Foundation, Inc.
+#
+# Valek Filippov <frob@df.ru>, 2001-2002.
+# Dmitry G. Mastrukov <dmitry@taurussoft.org>, 2002-2003.
+# Leonid Kanter <leon@asplinux.ru>, 2004, 2006.
+# Vasiliy Faronov <qvvx@yandex.ru>, 2008.
+# Yuri Kozlov <kozlov.y@gmail.com>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib trunk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-14 16:16+0300\n"
+"Last-Translator: Yuriy Penkin <yuriy.penkin@gmail.com>\n"
+"Language-Team: Russian <gnome-cyr@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Встретился неожиданный атрибут «%s» элемента «%s»"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Не найден атрибут «%s» элемента «%s»"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Неожиданный тэг «%s», ожидался тэг «%s»"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Неожиданный тэг «%s» внутри «%s»"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Не удалось найти допустимый файл закладок в каталогах поиска"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Закладка для ресурса URI «%s» уже существует"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Для ресурса URI «%s» закладок не найдено"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "В закладке на ресурс «%s» не определён тип MIME"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Отметка о приватности данных в закладке для URI «%s» не определена"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "В закладке для URI «%s» не определена группа"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Нет приложения с именем «%s», создавшего закладку для «%s»"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Не удалось дополнить строку выполнения «%s» с помощью URI «%s»"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Преобразование из набора символов «%s» в «%s» не поддерживается"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не удалось открыть преобразователь из «%s» в «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+"Недопустимая последовательность байтов содержится во входной строке для "
+"преобразования"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Произошла ошибка при преобразовании: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+"Неполная символьная последовательность содержится в конце входной строки"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Невозможно корректно преобразовать символ «%s» в символ из набора «%s»"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"URI «%s» не является абсолютным идентификатором при использовании схемы «file»"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Идентификатор URI локального файла «%s» не может включать символ «#»"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI «%s» недопустим"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Недопустимое имя узла в URI «%s»"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI «%s» содержит недопустимо экранированные символы"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Путь «%s» не является абсолютным"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Имя узла недопустимо"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Произошла ошибка при открытии каталога «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Не удалось выделить %lu байтов для прочтения файла «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Произошла ошибка при чтении файла «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Файл «%s» слишком велик"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Не удалось прочитать из файла «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Не удалось открыть файл «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Не удалось получить атрибуты файла «%s»: сбой в функции fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Не удалось открыть файл «%s»: сбой в функции fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Не удалось переименовать файл «%s» в «%s»: сбой в функции g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Не удалось создать файл «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Не удалось открыть файл «%s» для записи: сбой в функции fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Не удалось записать файл «%s»: сбой в функции fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Не удалось записать файл «%s»: сбой в функции fflush(): %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Не удалось записать файл «%s»: сбой в функции fsync(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Не удалось закрыть файл «%s»: сбой в функции fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Не удалось удалить существующий файл «%s»: сбой в функции g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Шаблон «%s» недопустим: он не должен содержать «%s»"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Шаблон «%s» не содержит XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f КБ"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f МБ"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f ГБ"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Не удалось прочитать символьную ссылку «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Символьные ссылки не поддерживаются"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не удалось открыть преобразователь из «%s» в «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Невозможно выполнить непосредственное чтение в функции "
+"g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "В буфере чтения остались непреобразованные данные"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Канал закрывается на неполном символе"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Невозможно выполнить непосредственное чтение в функции "
+"g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Не удалось открыть файл «%s»: сбой в функции open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Не удалось отобразить файл «%s»: сбой в функции mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Ошибка в строке %d на символе %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Ошибка в строке %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Обнаружена пустая конструкция «&;»; допустимыми конструкциями являются: &amp; "
+"&quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Символ «%s» недопустим в начале имени конструкции; символ «&» начинает "
+"конструкцию; если этот символ не должен быть частью конструкции, то "
+"экранируйте его конструкцией «&amp;»"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Символ «%s» недопустим внутри названия конструкции"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Наименование конструкции «%s» неизвестно"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Конструкция не заканчивается точкой с запятой; похоже, что символ «&» был "
+"использован не для обозначения начала конструкции — экранируйте его как "
+"«&amp;»"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Не удалось разобрать строку «%-.*s», которая должна быть числом внутри ссылки "
+"на символ (например &#234;) — возможно, номер слишком велик"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Ссылка на символ «%-.*s» не определяет допустимый символ"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Ссылка на символ пуста; она должна включать номер, например &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Ссылка на символ не оканчивается точкой с запятой; похоже, символ «&» был "
+"использован не для обозначения начала конструкции — экранируйте его как "
+"«&amp;»"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Ссылка на конструкцию не закончена"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Ссылка на символ не закончена"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+"Текст закодирован как UTF-8 недопустимым образом — слишком длинная "
+"последовательность"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+"Текст закодирован как UTF-8 недопустимым образом — неправильный начальный "
+"символ"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr ""
+"Текст закодирован как UTF-8 недопустимым образом — недопустимая "
+"последовательность «%s»"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Документ должен начинаться с элемента (например <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Символ «%s» является недопустимым после символа «<»; этот символ не может "
+"начинать имя элемента"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Встретился лишний символ «%s», ожидался символ «>» для завершения пустого "
+"элемента тэга «%s»"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Встретился лишний символ «%s», ожидался символ «=» после имени атрибута «%s» "
+"элемента «%s»"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Встретился лишний символ «%s»; ожидались символы «>» или «/» для завершения "
+"открывающего тэга элемента «%s», либо, возможно, атрибут; может быть, был "
+"использован недопустимый символ в имени атрибута"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Встретился лишний символ «%s», ожидалась открывающая двойная кавычка после "
+"знака равенства при присваивании значения атрибуту «%s» элемента «%s»"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Символ «%s» недопустим после символов «</»; символ «%s» не может начинать имя "
+"элемента"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Символ «%s» недопустим после закрывающего элемента имени «%s»; допустимым "
+"символом является «>»"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Элемент «%s» был закрыт, ни один элемент в настоящий момент не открыт"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Элемент «%s» был закрыт, но открытым в настоящий момент является элемент «%s»"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Документ был пуст или содержал только пробелы"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Документ неожиданно окончился сразу же после открывающей угловой скобки «<»"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Документ неожиданно окончился, когда ещё были открыты элементы — «%s» был "
+"последним открытым элементом"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Документ неожиданно окончился, ожидалась закрывающая тэг <%s/> угловая скобка"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Документ неожиданно окончился внутри имени элемента"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Документ неожиданно окончился внутри имени атрибута"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Документ неожиданно окончился внутри открывающего элемент тэга"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Документ неожиданно окончился после знака равенства, следующего за именем "
+"атрибута; значение атрибута не указано"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Документ неожиданно окончился внутри значения атрибута"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Документ неожиданно окончился внутри тэга, закрывающего элемент «%s»"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Документ неожиданно окончился внутри комментария или инструкции обработки"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "повреждённый объект"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "внутренняя ошибка или повреждённый объект"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "закончилась память"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "достигнут предел обратного хода"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"шаблон содержит элементы, которые не поддерживаются при поиске частичного "
+"совпадения"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "внутренняя ошибка"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"условия в виде обратных ссылок при поиске частичного совпадения не "
+"поддерживаются"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "достигнут предел рекурсии"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "достигнут предел рабочего пространства для пустых подстрок"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "недопустимая комбинация флагов перевода строки"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "неизвестная ошибка"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ в конце шаблона"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c в конце шаблона"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "неопознанный символ следует за \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"экранирование, изменяющее регистр (\\l, \\L, \\u, \\U), здесь запрещено"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "числа в квантификаторе {} в неправильном порядке"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "слишком большое число в квантификаторе {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "отсутствует завершающая ] для класса символов"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "неверное экранирование в классе символов"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "диапазон в классе символов в неправильном порядке"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "нечего повторять"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "неопознанный символ после (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "неопознанный символ после (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "неопознанный символ после (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "именованные классы POSIX поддерживаются только внутри класса"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "отсутствует завершающая )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") без открывающей ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "после (?R или (?[+-]цифры должна идти )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "ссылка на несуществующий подшаблон"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "отсутствует ) после комментария"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "слишком большое регулярное выражение"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "не удалось получить память"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind-утверждение не имеет фиксированную длину"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "ошибочное число или имя после (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "условная группа содержит более двух ветвей"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "ожидалось утверждение после (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "неизвестное имя класса POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "сортировочные элементы POSIX не поддерживаются"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "слишком большое значение символа в последовательности \\x{...}"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ошибочное условие (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C запрещено в lookbehind-утверждениях"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "рекурсивный вызов мог повторяться бесконечно"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "отсутствует завершающий символ в имени подшаблона"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "два именованных подшаблона имеют одинаковое имя"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ошибочная последовательность \\P или \\p"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "неизвестное имя свойства после \\P или \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "имя подшаблона слишком длинное (не должно превышать 32 символа)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "слишком много именованных подшаблонов (не должно быть больше 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "восьмеричное значение превышает \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "группа DEFINE содержит более одной ветви"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "запрещено повторять группу DEFINE"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "противоречивые параметры NEWLINE"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"за \\g не следует имя в скобках или неотрицательное число (возможно, в "
+"скобках)"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "неожиданное повторение"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "переполнение кода"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "переполнение рабочего пространства компиляции"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "не найден ранее проверенный подшаблон со ссылкой "
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+"Во время поиска совпадений с регулярным выражением %s возникла ошибка: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Библиотека PCRE собрана без поддержки UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Библиотека PCRE собрана без поддержки свойств UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+"Произошла ошибка при компиляции регулярного выражения %s у символа с номером "
+"%d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Произошла ошибка при оптимизации регулярного выражения %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "ожидалась шестнадцатеричная цифра или символ «}»"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "ожидалась шестнадцатеричная цифра"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "в символьной ссылке отсутствует «<»"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "незаконченная символьная ссылка"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "символьная ссылка нулевой длины"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "ожидалась цифра"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "недопустимая символьная ссылка"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "лишний «\\» в конце"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "неизвестная экранирующая последовательность"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Произошла ошибка во время разбора текста замен «%s» у символа с номером %lu: %"
+"s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Текст в кавычках не начинается с символа кавычки"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Обнаружена незакрытая кавычка в командной строке или другом тексте от "
+"оболочки"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Текст закончился сразу после символа «\\» (текст был «%s»)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Текст закончился до того, как была найдена закрывающая кавычка для %c (текст "
+"был «%s»)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Текст был пуст (или содержал только пробелы)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Не удалось прочитать данные из процесса-потомка"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Не удалось создать канал для сообщения с процессом-потомком (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Не удалось прочитать данные из канала потомка (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Не удалось сменить каталог на «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Не удалось выполнить процесс-потомок (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Недопустимое имя программы: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Недопустимая строка в векторе аргументов под номером %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Недопустимая строка в окружении: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Недопустимый рабочий каталог: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Не удалось выполнить вспомогательную программу (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Произошла неожиданная ошибка в функции g_io_channel_win32_poll() при чтении "
+"данных из процесса-потомка"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Не удалось прочитать данные из процесса-потомка (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Произошла неожиданная ошибка в функции select() при чтении данных из "
+"процесса-потомка (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Произошла неожиданная ошибка в функции waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Функция fork завершилась неудачно (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Не удалось выполнить процесс-потомок «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Не удалось перенаправить вывод или ввод процесса-потомка (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "При создании процесса-потомка функция fork завершилась неудачно (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Произошла неизвестная ошибка при выполнении процесса-потомка «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Не удалось прочитать нужное количество данных из канала процесса-потомка (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Символ находится вне диапазона для UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+"Во входной строке для преобразования обнаружена недопустимая "
+"последовательность"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Символ находится вне диапазона для UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Использование:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ПАРАМЕТР...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Параметры справки:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Показать параметры справки"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Показать все параметры справки"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Параметры приложения:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Не удалось разобрать целочисленное значение «%s» для %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Целочисленное значение «%s» для %s выходит за пределы"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Не удалось разобрать дробное значение двойной точности «%s» для %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Дробное значение двойной точности «%s» для %s выходит за пределы"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Произошла ошибка при разборе параметра %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Отсутствует аргумент для %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Неизвестный параметр %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "В каталогах поиска не удалось найти допустимый файл ключей"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Не является обычным файлом"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Файл пуст"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Файл ключей содержит строку «%s», которая не является парой «ключ-значение», "
+"группой или комментарием"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Недопустимое имя группы: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Файл ключей не начинается с группы"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Недопустимое имя ключа: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Файл ключей содержит неподдерживаемую кодировку «%s»"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Файл ключей не содержит группу «%s»"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Файл ключей не содержит ключ «%s»"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Файл ключей содержит ключ «%s», значение которого «%s» не в кодировке UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Файл ключей содержит ключ «%s», значение которого не удалось распознать."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Файл ключей содержит ключ «%s» в группе «%s», значение которого не удалось "
+"распознать."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Файл ключей не содержит ключа «%s» в группе «%s»"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Файл ключей содержит символ escape в конце строки"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Файл ключей содержит неверную экранирующую последовательность «%s»"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Не удалось преобразовать значение «%s» в число."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Целочисленное значение «%s» выходит за пределы"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Не удалось преобразовать «%s» в число с плавающей запятой."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Не удалось преобразовать «%s» в булево значение."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Слишком большое значение количества передано в %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Поток уже закрыт"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Действие было отменено"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Неизвестный тип"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "тип файлов %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "тип %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Неожиданный ранний конец потока"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Без имени"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "В desktop-файле не указано поле Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Не удалось найти терминал, требуемый для приложения"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Не удалось создать пользовательскую папку настроек приложения %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Не удалось создать пользовательскую папку настроек MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Не удалось создать пользовательский desktop-файл %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Особое определение для %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "привод не поддерживает извлечение"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "привод не поддерживает опрос носителя"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Не удалось обработать версию %d текстового представления GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Некорректное число лексем (%d) текстового представления GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Не удалось обработать версию %d текстового представления GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Некорректное число лексем (%d) текстового представления GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Для GEmblemedIcon ожидается GEmblem"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Действие не поддерживается"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Содержащая точка монтирования не существует"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Нельзя скопировать поверх каталога"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Нельзя скопировать каталог поверх каталога"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Целевой файл существует"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Не удалось рекурсивно скопировать каталог"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Нельзя скопировать специальный файл"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Дано неверное значение символьной ссылки"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Корзина не поддерживается"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Имена файлов не могут содержать «%c»"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "том не поддерживает присоединение"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Нет зарегистрированного приложения для обработки данного файла"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Перечислитель закрыт"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Перечислитель файлов имеет незавершённое действие"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Перечислитель файлов уже закрыт"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "файл"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "файл, содержащий значок"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Не удалось обработать версию %d текстового представления GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Некорректные входные данные для GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Поток не поддерживает query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Переход по потоку не поддерживается"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Усечение на входном потоке не разрешено"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Усечение не поддерживается на потоке"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Неверное число лексем (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Нет типа для класса с именем %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Тип %s не реализует интерфейс GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Тип %s не является классифицируемым"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Некорректный номер версии: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Тип %s не реализует from_tokens() интерфейса GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Не удалось обработать данную версию текстового представления значка"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Входной поток не поддерживает чтение"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Поток имеет незавершённое действие"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Не удалось найти тип монитора локальных каталогов по умолчанию"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Недопустимое имя файла %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Произошла ошибка при получении сведений о файловой системе: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Нельзя переименовать корневой каталог"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Произошла ошибка при переименовании файла: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Не удалось переименовать файл, такое имя файла уже есть"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Недопустимое имя файла"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Произошла ошибка при открытии файла: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Не удалось открыть каталог"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Произошла ошибка при удалении файла: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Произошла ошибка при удалении файла в корзину: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Не удалось создать каталог корзины %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Не удалось найти каталог верхнего уровня для корзины"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Не удалось найти или создать каталог корзины"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Не удалось создать запись о файле в корзине: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Не удалось удалить файл в корзину: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Произошла ошибка при создании каталога: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Произошла ошибка при создании символьной ссылки: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Произошла ошибка при перемещении файла: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Нельзя переместить каталог поверх каталога"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Не удалось создать резервный файл"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Произошла ошибка при удалении целевого файла: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Перемещение между точками монтирования не поддерживается"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Значение атрибута не должно быть NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Неверный тип атрибута (ожидалась строка)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Недопустимое имя расширенного атрибута"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Произошла ошибка при установке расширенного атрибута «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Произошла ошибка при получении сведений о файле «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (неверная кодировка)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Произошла ошибка при получении сведений о файловом дескрипторе: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Неверный тип атрибута (ожидался uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Неверный тип атрибута (ожидался uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Неверный тип атрибута (ожидалась строка byte)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Произошла ошибка при установке прав: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Произошла ошибка при установке владельца: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "символьная ссылка не должна быть NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Произошла ошибка при установке символьной ссылки: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Произошла ошибка при установке символьной ссылки: файл не является "
+"символьной ссылкой"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Контекст SELinux не должен быть равен NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Произошла ошибка при установке контекста SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "В этой системе не включён SELinux"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Установка атрибута %s не поддерживается"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Произошла ошибка при чтении из файла: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Произошла ошибка при переходе по файлу: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Произошла ошибка при закрытии файла: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Не удалось найти тип монитора локальных файлов по умолчанию"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Произошла ошибка при записи в файл: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Произошла ошибка при удалении старой резервной ссылки: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Произошла ошибка при создании резервной копии: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Произошла ошибка при переименовании временного файла: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Произошла ошибка при усечении файла: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Произошла ошибка при открытии файла «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Целевой файл является каталогом"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Целевой файл не является обычным файлом"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Файл был изменён извне"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Произошла ошибка при удалении старого файла: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Передан недопустимый GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Недопустимый запрос на переход"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Нельзя усечь GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Достигнут максимальный предел массива данных"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Невозможно изменить размер выходного потока в память"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Не удалось изменить размер выходного потока в память"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "точка монтирования не поддерживает отсоединение"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "точка монтирования не поддерживает извлечение"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "точка монтирования не поддерживает пересоединение"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+"точка монтирования не поддерживает возможность определения типа содержимого"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"точка монтирования не поддерживает возможность синхронного определения типа "
+"содержимого"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Выходной поток не поддерживает запись"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Исходный поток уже закрыт"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "название"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Название значка"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "названия"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Массив, содержащий названия значков"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "использовать названия по умолчанию"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Использовать ли значки по умолчанию, получаемые с помощью сокращения "
+"названия, начиная с символов '-'. Если задано несколько названий — "
+"игнорировать все кроме первого."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Не удалось обработать версию %d текстового представления GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Дескриптор файла"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Дескриптор файла для чтения"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Закрыть дескриптор файла"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Будет ли закрываться дескриптор, когда закрывается поток"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Произошла ошибка при чтении из unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Произошла ошибка при закрытии unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Корень файловой системы"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Дескриптор файла для записи"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Произошла ошибка при записи в unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "том не поддерживает извлечение"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Не удалось найти приложение"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Произошла ошибка при запуске приложения: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI не поддерживаются"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "смена ассоциаций не поддерживается в Win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Создание ассоциаций не поддерживается в Win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "не прятать записи"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "использовать длинный формат"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ФАЙЛ...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u байт"
+#~ msgstr[1] "%u байта"
+#~ msgstr[2] "%u байтов"
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 0000000..f95e1c8
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,1903 @@
+# translation of glib to Kinyarwanda.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Steve Murphy <murf@e-tools.com>, 2005
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali  <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA  <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005..
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.12\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-03-28 19:34-0700\n"
+"Last-Translator: Steve Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Inyuguti Ikitezwe: a Nyuma Ikiranga Izina: Bya Ikigize:"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "Urufunguzo IDOSIYE OYA Byabonetse in Ibyatanzwe"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Kuri Gusoma Ihuza"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, fuzzy, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Bivuye Inyuguti Gushyiraho Kuri ni OYA"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "OYA Gufungura Bivuye Kuri"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+#, fuzzy
+msgid "Invalid byte sequence in conversion input"
+msgstr "Bayite in Ihindurangero Iyinjiza"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, fuzzy, c-format
+msgid "Error during conversion: %s"
+msgstr "Ihindurangero"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+#, fuzzy
+msgid "Partial character sequence at end of input"
+msgstr "Inyuguti ku Impera Bya Iyinjiza"
+
+#: glib/gconvert.c:919
+#, fuzzy, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "GUHINDURA Kuri"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "ni OYA ikoresha IDOSIYE Igishusho"
+
+#: glib/gconvert.c:1747
+#, fuzzy, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "IDOSIYE Gicurasi OYA Gushyiramo a"
+
+#: glib/gconvert.c:1764
+#, fuzzy, c-format
+msgid "The URI '%s' is invalid"
+msgstr "ni Sibyo"
+
+#: glib/gconvert.c:1776
+#, fuzzy, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Izina ry'inturo: Bya ni Sibyo"
+
+#: glib/gconvert.c:1792
+#, fuzzy, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Kirimo Inyuguti"
+
+#: glib/gconvert.c:1887
+#, fuzzy, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "ni OYA Inzira"
+
+#: glib/gconvert.c:1897
+#, fuzzy
+msgid "Invalid hostname"
+msgstr "Izina ry'inturo:"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, fuzzy, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Gufungura %s%S bushyinguro"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, fuzzy, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "OYA Bayite Kuri Gusoma IDOSIYE"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: glib/gfileutils.c:547
+#, fuzzy, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, fuzzy, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Kuri Gusoma Bivuye IDOSIYE"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, fuzzy, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Kuri Gufungura IDOSIYE"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, fuzzy, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Kuri Kubona Ibiranga Bya IDOSIYE Byanze"
+
+#: glib/gfileutils.c:746
+#, fuzzy, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Kuri Gufungura IDOSIYE Byanze"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Kuri Guhindura izina IDOSIYE Kuri Byanze"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, fuzzy, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Kuri Kurema IDOSIYE"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Kuri Gufungura IDOSIYE kugirango Byanze"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Kuri IDOSIYE Byanze"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Kuri IDOSIYE Byanze"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Kuri IDOSIYE Byanze"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Kuri Gufunga IDOSIYE Byanze"
+
+#: glib/gfileutils.c:1115
+#, fuzzy, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "IDOSIYE OYA Cyavanyweho Byanze"
+
+#: glib/gfileutils.c:1290
+#, fuzzy, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Sibyo OYA a"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Impera Na:"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, fuzzy, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Kuri Gusoma Ihuza"
+
+#: glib/gfileutils.c:1816
+#, fuzzy
+msgid "Symbolic links not supported"
+msgstr "amahuza OYA"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "OYA Gufungura Bivuye Kuri"
+
+#: glib/giochannel.c:1579
+#, fuzzy
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "a Gusoma in"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+#, fuzzy
+msgid "Leftover unconverted data in read buffer"
+msgstr "Ibyatanzwe in Gusoma"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+#, fuzzy
+msgid "Channel terminates in a partial character"
+msgstr "in a Bituzuye Inyuguti"
+
+#: glib/giochannel.c:1770
+#, fuzzy
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "a Gusoma in"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Kuri Gufungura IDOSIYE Byanze"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Kuri Gufungura IDOSIYE Byanze"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "ku Umurongo INYUGUTI"
+
+#: glib/gmarkup.c:389
+#, fuzzy, c-format
+msgid "Error on line %d: %s"
+msgstr "ku Umurongo"
+
+#: glib/gmarkup.c:493
+#, fuzzy
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "Byemewe"
+
+#: glib/gmarkup.c:503
+#, fuzzy, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr "ni OYA Byemewe ku Gutangira Bya Izina: Inyuguti NIBA iyi Kuri Nka"
+
+#: glib/gmarkup.c:537
+#, fuzzy, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "ni OYA Byemewe Mo Imbere Izina:"
+
+#: glib/gmarkup.c:574
+#, fuzzy, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Izina: ni OYA"
+
+#: glib/gmarkup.c:585
+#, fuzzy
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr "OYA Impera Na: a Akabago n'Akitso Inyuguti Kuri Gutangira Nka"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr "Kuri a Mo Imbere a Inyuguti Indango kugirango Urugero ni Binini"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Indango OYA a Inyuguti"
+
+#: glib/gmarkup.c:675
+#, fuzzy
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Inyuguti Indango Gushyiramo a Nka"
+
+#: glib/gmarkup.c:685
+#, fuzzy
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr "Indango OYA Impera Na: a Akabago n'Akitso Inyuguti Kuri Gutangira Nka"
+
+#: glib/gmarkup.c:771
+#, fuzzy
+msgid "Unfinished entity reference"
+msgstr "Indango"
+
+#: glib/gmarkup.c:777
+#, fuzzy
+msgid "Unfinished character reference"
+msgstr "Inyuguti Indango"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "8 Umwandiko"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "8 Umwandiko"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "8 Umwandiko"
+
+#: glib/gmarkup.c:1168
+#, fuzzy
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "g."
+
+#: glib/gmarkup.c:1208
+#, fuzzy, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'%s'ni OYA a Byemewe Inyuguti a Inyuguti Gicurasi OYA Ikigize: Izina:"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Inyuguti Ikitezwe: a Inyuguti Kuri Impera Gutangira Itagi: Bya Ikigize:"
+
+#: glib/gmarkup.c:1365
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "Inyuguti Ikitezwe: a Nyuma Ikiranga Izina: Bya Ikigize:"
+
+#: glib/gmarkup.c:1407
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Inyuguti Ikitezwe: a Cyangwa Inyuguti Kuri Impera Gutangira Itagi: Bya "
+"Ikigize: Cyangwa Ikiranga Sibyo Inyuguti in Ikiranga Izina:"
+
+#: glib/gmarkup.c:1493
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Inyuguti Ikitezwe: Gufungura Gushyiraho akugarizo Ikimenyetso Nyuma "
+"IKIMENYETSO Ryari: Agaciro kugirango Ikiranga Bya Ikigize:"
+
+#: glib/gmarkup.c:1635
+#, fuzzy, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "'%s'ni OYA a Byemewe Inyuguti Inyuguti Gicurasi OYA Ikigize: Izina:"
+
+#: glib/gmarkup.c:1675
+#, fuzzy, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "'%s'ni OYA a Byemewe Inyuguti Gufunga Ikigize: Izina: Inyuguti ni"
+
+#: glib/gmarkup.c:1686
+#, fuzzy, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Oya Ikigize: ni Gufungura"
+
+#: glib/gmarkup.c:1695
+#, fuzzy, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Gufungura Ikigize: ni"
+
+#: glib/gmarkup.c:1858
+#, fuzzy
+msgid "Document was empty or contained only whitespace"
+msgstr "ubusa Cyangwa"
+
+#: glib/gmarkup.c:1872
+#, fuzzy
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Nyuma Gufungura Imfuruka"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, fuzzy, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "Na: Ibintu Gufungura Iheruka Ikigize:"
+
+#: glib/gmarkup.c:1888
+#, fuzzy, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "Ikitezwe: Kuri a Gufunga Imfuruka Itagi:"
+
+#: glib/gmarkup.c:1894
+#, fuzzy
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Mo Imbere Ikigize: Izina:"
+
+#: glib/gmarkup.c:1900
+#, fuzzy
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Mo Imbere Ikiranga Izina:"
+
+#: glib/gmarkup.c:1905
+#, fuzzy
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Mo Imbere Ikigize: Gufungura%S Itagi:"
+
+#: glib/gmarkup.c:1911
+#, fuzzy
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr "Nyuma IKIMENYETSO Ikiranga Izina: Oya Ikiranga Agaciro"
+
+#: glib/gmarkup.c:1918
+#, fuzzy
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Mo Imbere Ikiranga Agaciro"
+
+#: glib/gmarkup.c:1934
+#, fuzzy, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Mo Imbere Gufunga Itagi: kugirango Ikigize:"
+
+#: glib/gmarkup.c:1940
+#, fuzzy
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Mo Imbere a Icyo wongeraho Cyangwa Inonosora"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "in a Bituzuye Inyuguti"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Bayite in Ihindurangero Iyinjiza"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Inyuguti Indango"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Inyuguti Indango"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Inyuguti Indango"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "amahuza OYA"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "ku Umurongo INYUGUTI"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Indango"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+#, fuzzy
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Umwandiko Na: a Gusubiramo ibyavuzwe Ikimenyetso"
+
+#: glib/gshell.c:160
+#, fuzzy
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Gusubiramo ibyavuzwe Ikimenyetso in Komandi: Umurongo Cyangwa Ikindi "
+"Igikonoshwa Umwandiko"
+
+#: glib/gshell.c:538
+#, fuzzy, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Nyuma a Inyuguti Umwandiko"
+
+#: glib/gshell.c:545
+#, fuzzy, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "Mbere Gushyiraho akugarizo Byabonetse kugirango Umwandiko"
+
+#: glib/gshell.c:557
+#, fuzzy
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ubusa Cyangwa"
+
+#: glib/gspawn-win32.c:283
+#, fuzzy
+msgid "Failed to read data from child process"
+msgstr "Kuri Gusoma Ibyatanzwe Bivuye"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, fuzzy, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Kuri Kurema kugirango Na:"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, fuzzy, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Kuri Gusoma Bivuye"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, fuzzy, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Kuri Guhindura>> Kuri bushyinguro"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, fuzzy, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Kuri Gukora"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Izina ry'inturo:"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "in Ihindurangero Iyinjiza"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Gufungura %s%S bushyinguro"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Kuri Gukora Porogaramu"
+
+#: glib/gspawn-win32.c:995
+#, fuzzy
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "Ikosa in Ibyatanzwe Bivuye a"
+
+#: glib/gspawn.c:188
+#, fuzzy, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Kuri Gusoma Ibyatanzwe Bivuye"
+
+#: glib/gspawn.c:325
+#, fuzzy, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Ikosa in Guhitamo Ibyatanzwe Bivuye a"
+
+#: glib/gspawn.c:408
+#, fuzzy, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Ikosa in"
+
+#: glib/gspawn.c:1197
+#, fuzzy, c-format
+msgid "Failed to fork (%s)"
+msgstr "Kuri"
+
+#: glib/gspawn.c:1347
+#, fuzzy, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Kuri Gukora"
+
+#: glib/gspawn.c:1357
+#, fuzzy, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Kuri Ibisohoka Cyangwa Iyinjiza Bya"
+
+#: glib/gspawn.c:1366
+#, fuzzy, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Kuri"
+
+#: glib/gspawn.c:1374
+#, fuzzy, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Ikosa Gukora: %s%s"
+
+#: glib/gspawn.c:1396
+#, fuzzy, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Kuri Gusoma Ibyatanzwe Bivuye"
+
+#: glib/gutf8.c:1038
+#, fuzzy
+msgid "Character out of range for UTF-8"
+msgstr "Inyuma Bya Urutonde kugirango 8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+#, fuzzy
+msgid "Invalid sequence in conversion input"
+msgstr "in Ihindurangero Iyinjiza"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+#, fuzzy
+msgid "Character out of range for UTF-16"
+msgstr "Inyuma Bya Urutonde kugirango"
+
+# crashrep/source\all\crashrep.lng:%MSG_CMDLINE_USAGE%.text
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Ikoresha:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+#, fuzzy
+msgid "Show help options"
+msgstr "Ifashayobora Amahitamo"
+
+#: glib/goption.c:726
+#, fuzzy
+msgid "Show all help options"
+msgstr "Byose Ifashayobora Amahitamo"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, fuzzy, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Umubare wuzuye Agaciro kugirango"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, fuzzy, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Agaciro kugirango Inyuma Bya Urutonde"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Umubare wuzuye Agaciro kugirango"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Agaciro kugirango Inyuma Bya Urutonde"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Ihindurangero"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, fuzzy, c-format
+msgid "Unknown option %s"
+msgstr "Ihitamo ritazwi:"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "Urufunguzo IDOSIYE OYA Byabonetse in Ibyatanzwe"
+
+#: glib/gkeyfile.c:393
+#, fuzzy
+msgid "Not a regular file"
+msgstr "a Ibisanzwe IDOSIYE"
+
+#: glib/gkeyfile.c:401
+#, fuzzy
+msgid "File is empty"
+msgstr "Idosiye ni ubusa"
+
+#: glib/gkeyfile.c:761
+#, fuzzy, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"IDOSIYE Kirimo Umurongo ni OYA a Urufunguzo Agaciro Itsinda Cyangwa Icyo "
+"wongeraho"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Izina ry'inturo:"
+
+#: glib/gkeyfile.c:843
+#, fuzzy
+msgid "Key file does not start with a group"
+msgstr "IDOSIYE OYA Gutangira Na: a Itsinda"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Izina ry'inturo:"
+
+#: glib/gkeyfile.c:896
+#, fuzzy, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "IDOSIYE Kirimo Imisobekere:"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, fuzzy, c-format
+msgid "Key file does not have group '%s'"
+msgstr "IDOSIYE OYA Itsinda"
+
+#: glib/gkeyfile.c:1286
+#, fuzzy, c-format
+msgid "Key file does not have key '%s'"
+msgstr "IDOSIYE OYA Urufunguzo"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, fuzzy, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "IDOSIYE Kirimo Urufunguzo Na: Agaciro ni OYA 8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, fuzzy, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "IDOSIYE Kirimo Urufunguzo Agaciro"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, fuzzy, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "IDOSIYE Kirimo Urufunguzo in Itsinda Agaciro"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, fuzzy, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "IDOSIYE OYA Urufunguzo in Itsinda"
+
+#: glib/gkeyfile.c:3483
+#, fuzzy
+msgid "Key file contains escape character at end of line"
+msgstr "IDOSIYE Kirimo Inyuguti ku Impera Bya Umurongo"
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "IDOSIYE Kirimo Sibyo"
+
+#: glib/gkeyfile.c:3647
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Nka a Umubare"
+
+#: glib/gkeyfile.c:3661
+#, fuzzy, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Agaciro kugirango Inyuma Bya Urutonde"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Nka a Umubare"
+
+#: glib/gkeyfile.c:3718
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Nka a Icyungo"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Ihitamo ritazwi:"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "amahuza OYA"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "amahuza OYA"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Izina ry'inturo: Bya ni Sibyo"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Izina ry'inturo:"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Izina ry'inturo:"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Kuri Kurema IDOSIYE"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Kuri Kurema IDOSIYE"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Kuri Kurema IDOSIYE"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Gufungura %s%S bushyinguro"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Ihindurangero"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Mo Imbere Ikiranga Izina:"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Gufungura %s%S bushyinguro"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Ihindurangero"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Ihindurangero"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "ku Umurongo"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Ihindurangero"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "amahuza OYA"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Ihindurangero"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "a Ibisanzwe IDOSIYE"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Izina ry'inturo:"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Izina ry'inturo: Bya ni Sibyo"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+# svtools/source\misc\errtxt.src:RID_ERRHDL.ERRCODE_SFX_DOLOADFAILED.text
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Ikosa mu gusoma idosiye"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "ku Umurongo"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Ihindurangero"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Ihindurangero"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "amahuza OYA"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Ihindurangero"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Kuri Gufunga IDOSIYE Byanze"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Kuri IDOSIYE Byanze"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Kuri Gufunga IDOSIYE Byanze"
+
+#, fuzzy
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Bivuye Inyuguti Gushyiraho Kuri ni OYA"
diff --git a/po/si.po b/po/si.po
new file mode 100644
index 0000000..8747c4c
--- /dev/null
+++ b/po/si.po
@@ -0,0 +1,1809 @@
+# translation of glib.si.po to Sinhala
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Danishka Navin <snavin@redhat.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib.si\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2007-06-20 14:56+0530\n"
+"Last-Translator: Danishka Navin <snavin@redhat.com>\n"
+"Language-Team: Sinhala <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%s' මූලය සඳහා බලාපොරොත්තු නොවු '%s' විශේෂණය"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%s' මූලයෙහි '%s' විශේෂණය හමුවුයේ නැත"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "'%s'බලාපොරොත්තු නොවු ටැගයකි, බලාපොරොත්තු වුයේ '%s' ටැගයයි"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%s'බලාපොරොත්තු නොවු ටැගයක් '%s' තුළ ඇත"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "දත්ත බහලුම් තුළ නිරවද්‍ය පිටු සළකුණක් හමුවූයෙ නැත"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "'%s' URI සඳහා වු  පිටු සළකුණ දැනට භාවිතයේ ඇත"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "'%s' URI සඳහා පිටු සළකුණු හමුවුයේ නැත"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "'%s' URI සඳහා වු පිටු සළකුණු තුළ MIME වර්‍හගයක් සදහන් කරුයේ නැත"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "'%s' URI සඳහා වු පිටු සළකුණු තුළ සමූහ කට්ටලය නැත"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr ""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' සිට '%s' දක්වා පරිවර්තකය විවෘත කළ නොහැකි විය"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "පරිවර්තන ප්‍රධාධා තුළ සාවද්‍ය බයිට් පිළිවෙළක්යේ"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "%s' URI සාවද්‍ය වේ"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "'%s' URI හි ධාරක නාමය සාවද්‍ය වේ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr ""
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "සාවද්‍ය ධාරක නාමය"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' ගහලුම විවෘත කිරීම දෝෂ සහිතයි: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, fuzzy, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr " \"%s\" ගොනුව කියවීම සඳහා %lu බයිට් ප්‍රමාණයක් යෙදවිය නොහැකි විය"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' ගොනුවෙන් කියවීම අසමත් විය: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' ගොනුව විවෘත කිරීම අසමත් විය: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' ගොනුවේ විශේෂණ ලබා ගැනීම අසමත් විය: fstat() අසමත් විය: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' ගොනුව විවෘත කිරීම අසමත් විය: fdopen() අසමත් විය: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' ගොනුව '%s' ලෙස නම වෙනස් ත කිරීම අසමත් විය: g_rename(අසමත් වියed: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' ගොනුව නිර්මාණය දෝෂ සහිතයි: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "ලිවීම සඳහා '%s' ගොනුව විවෘත කිරීම අසමත් විය: fdopen() අසමත් විය: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' ගොනුවට ලිවීම අසමත් විය: fwrite() අසමත් විය: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' ගොනුවට ලිවීම අසමත් විය: fwrite() අසමත් විය: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' ගොනුවට ලිවීම අසමත් විය: fwrite() අසමත් විය: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' ගොනුව වැසීමීම අසමත් විය: fclose() අසමත් විය: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "දැනට ඇති '%s' ගොනුව ඉවත් කළ නොහැක: g_unlink() අසමත් විය: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' ආකෘතිය සාවද්‍ය වේ, '%s' අඩංගු නොවිය යූතුය"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' ආකෘතියේ XXXXXX අඩංගු නොවේ"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' සංකේතාත්මක පුරුක කියවිම අසමත් විය: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "සංකේතාත්මක පුරුක සහාය දක්නන්නේ නැත"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' සිට '%s' දක්වා පරිවර්තකය විවෘත කළ නොහැක: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' ගොනුව විවෘත කිරීම අසමත් විය: open() අසමත් විය: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' ගොනුව අනුරුපණය කිරීම අසමත් විය: mmap()අසමත් විය: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d පේළියේ %d අක්‍ෂරය මත දෝෂයකි: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d පේළියේ ත දෝෂයකි: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "ඇතුළත් කළ නම තුළ ඇති '%s' අක්‍ෂරය සාද්‍යවේ "
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "'%s' වස්තුවේ නම නොදනී"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "අවසන් නොකළ වස්තු යොමුව"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "අවසන් නොකළ අක්‍ෂර යොමුව"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "සාවද්‍ය UTF-8 සංකේතාංකන පෙළ"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "සාවද්‍ය UTF-8 සංකේතාංකන පෙළ"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "සාවද්‍ය UTF-8 සංකේතාංකන පෙළ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ලේඛණය මූලයකින්ම ආරම්භ කළ යුතුම වේ (උදා. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' මූලය වසා ඇති අතර කිසිම මූලයක් විවෘතව ඇත"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' මූලය වසා ඇති අතර දැනට'%s' මූලය විවෘතව ඇත"
+
+#: glib/gmarkup.c:1858
+#, fuzzy
+msgid "Document was empty or contained only whitespace"
+msgstr "ලේඛණය හිස්ව තිබුනි හෝ තිබුනේ සුදුඉඩ පමණි"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "විනාශ වු වස්තුවක්"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "අභ්‍යන්තර දෝෂය හෝ විනාශ වු වස්තුවක්"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "ප්‍රමාණවත් මතකයක් නැත"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "අභ්‍යන්තර දෝෂය"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "නොදන්නා දෝෂය"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "පරිවර්තන ප්‍රධාධා තුළ සාවද්‍ය බයිට් පිළිවෙළක්යේ"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "අවසන් නොකළ අක්‍ෂර යොමුව"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "අවසන් නොකළ අක්‍ෂර යොමුව"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "අවසන් නොකළ අක්‍ෂර යොමුව"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "සංකේතාත්මක පුරුක සහාය දක්නන්නේ නැත"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr ""
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "දහසයේ පාදයේ අංකිතයක් හෝ  '}' බලාපොරොත්තු වේ"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "දහසයේ පාදයේ අංකිතයක් බලාපොරොත්තු වේ"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "සංකේතාත්මක යොමුව තුළ '<' මගහැරී ඇත"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "අවසන් නොකළ සංකේතාත්මක යොමුව"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "ශුන්‍ය දිග සංකේතාත්මක යොමුව"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "අංකයක් බලාපොරොත්තු විය"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "සාවද්‍ය සංකේතාත්මක යොමුව"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr ""
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "සාවද්‍ය වැඩසටහන් නම: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "සාවද්‍ය වැඩකරන බහලුම: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() බලාපොරොත්තු නොවු දෝෂයකි (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr ""
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "භාැවිතය:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "සහාය විකල්ප:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "සහාය විකල්ප දර්ශනය කරන්න"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "සියළු සහාය විකල්ප දර්ශනය කරන්න"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "යෙදුම් විකල්ප:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr ""
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "%s නොදන්නා විකල්පයකි"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "හිස් ගොනුවකි"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "සාවද්‍ය සමූහ නාමය: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "සාවද්‍ය යතුරු නම: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "නොදන්නා දෝෂය"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "සංකේතාත්මක පුරුක සහාය දක්නන්නේ නැත"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "සංකේතාත්මක පුරුක සහාය දක්නන්නේ නැත"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "'%s' URI හි ධාරක නාමය සාවද්‍ය වේ"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "සාවද්‍ය යතුරු නම: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "සාවද්‍ය ධාරක නාමය"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "'%s' ගොනුව නිර්මාණය දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "'%s' ගොනුව නිර්මාණය දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "'%s' ගොනුව නිර්මාණය දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "'%s' ගහලුම විවෘත කිරීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "%d පේළියේ ත දෝෂයකි: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "'%s' ගහලුම විවෘත කිරීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "%d පේළියේ ත දෝෂයකි: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "සංකේතාත්මක පුරුක සහාය දක්නන්නේ නැත"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "සාවද්‍ය යතුරු නම: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "'%s' URI හි ධාරක නාමය සාවද්‍ය වේ"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "'%s' ගොනුව කියවීම දෝෂ සහිතයි: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "%d පේළියේ ත දෝෂයකි: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "සංකේතාත්මක පුරුක සහාය දක්නන්නේ නැත"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPTION...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "පරිවර්තනයේදි දෝෂයකි : %s"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..9a6938b
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,1849 @@
+# translation of glib.HEAD.po to Slovak
+# translation of sk.po to Slovak
+# glib Slovak translation.
+# Copyright (C) 2001, 2002, 2004, 2005, 2008 Free Software Foundation, Inc.
+# Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>, 2001,2002.
+# Stanislav Visnovsky <visnovsky@kde.org>, 2004.
+# Marcel Telka <marcel@telka.sk>, 2005, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-03-15 15:01+0100\n"
+"Last-Translator: Marcel Telka <marcel@telka.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural= (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Neočakávaná vlastnosť '%s' prvku '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Vlastnosť '%s' prvku '%s' nenájdená"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Neočakávaná značka '%s', bola očakávaná značka '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Neočakávaná značka '%s' vo vnútri '%s'"
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "Nepodarilo sa nájsť platný súbor kľúčov v dátových adresároch"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Záložka pre URI '%s' už existuje"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nenastavené skupiny v záložke pre URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Nepodarilo sa prečítať symbolický odkaz '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Prevod zo znakovej sady '%s' do '%s' nie je podporovaný"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Nepodarilo sa otvoriť program na prevod z '%s' do '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Neplatná sekvencia bajtov na vstupe prevodu"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Chyba počas prevodu: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Čiastočná sekvencia znakov na konci vstupu"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Nepodarilo sa previesť náhradné `%s' do kódovej stránky `%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' nie je absolútne URI, používajúce schému \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI lokálneho súboru '%s' nesmie obsahovať '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' je neplatné"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI hostiteľa '%s' je neplatné."
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' obsahuje neplatne zadané znaky"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Cesta '%s' nie je absolútna"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Neplatné meno hostiteľa"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Chyba pri otváraní priečinka '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Nepodarilo sa alokovať %lu bajtov pre načítanie súboru \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Nepodarilo sa čítanie súboru '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Nepodarilo sa otvoriť súbor '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Nepodarilo sa získať atribúty súboru '%s': fstat() zlyhala: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Nepodarilo sa otvoriť súbor '%s': fdopen() zlyhala: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Nepodarilo sa premenovať súbor '%s' na '%s': funkcia g_rename() zlyhala: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Nepodarilo sa vytvoriť súbor '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Nepodarilo sa otvoriť súbor '%s' pre zápis: funkcia fdopen() zlyhala: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Nepodarilo sa zapísať súbor '%s': funkcia fwrite() zlyhala: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Nepodarilo sa zapísať súbor '%s': funkcia fwrite() zlyhala: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Nepodarilo sa zapísať súbor '%s': funkcia fwrite() zlyhala: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Nepodarilo sa zatvoriť súbor '%s': funkcia fclose() zlyhala: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Existujúci súbor '%s' nemohol byť odstránený: funkcia g_unlink() zlyhala: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Šablóna '%s' je neplatná, nesmie obsahovať '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Šablóna '%s' neobsahuje XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Nepodarilo sa prečítať symbolický odkaz '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symbolické odkazy nepodporované"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nepodarilo sa otvoriť program na prevod z '%s' do '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Nepodarilo sa 'raw' čítanie v g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Zanechané neprevedené dáta vo vstupnom bufferi"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanál končí čiastočným znakom"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Nepodarilo sa 'raw' čítanie v g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Nepodarilo sa otvoriť súbor '%s': open() zlyhala: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Nepodarilo sa namapovať súbor '%s': mmap() zlyhala: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Chyba na riadku %d znak %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Chyba na riadku %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Nájdená prázdna entita '&;', platné entity sú: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak '%s' nie je platný na začiatku mena entity. Znak & začína entitu. Ak tu "
+"ale nemá predstavovať entitu, musíte ho zapísať ako &amp;."
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak '%s' nie je platný v mene entity"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Meno entity '%s' nie je známe"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entita nekončí bodkočiarkou. Asi ste použili znak & bez toho, aby ste ho "
+"zapísali ako &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nepodarilo sa spracovať '%-.*s', čo by mala byť číslica v odkaze na znak "
+"(napríklad &#234;) - možno je číslica príliš veľká"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Odkaz na znak '%-.*s' nie je kódom povoleného znaku"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Prázdny odkaz na znak. Odkaz by mal obsahovať číslice, napríklad &#434;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Odkaz na znak neskončil bodkočiarkou. Asi ste použili & a nezadali ste ho "
+"ako &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Neukončený odkaz na entitu"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Neukončený odkaz na znak"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Neplatný text v kódovaní UTF-8"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Neplatný text v kódovaní UTF-8 - nie je úvodný znak"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Neplatný text v kódovaní UTF-8 - neplatné '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument musí začínať elementom (napr. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'%s' nie je platný znak za znakom '<', nesmie začínať meno elementu"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Prebytočný znak '%s'. Bol očakávaný znak '>', aby skončil začiatočnú značku "
+"elementu '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Prebytočný znak '%s'. Bol očakávaný znak '=' za menom atribútu '%s' elementu "
+"'%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Prebytočný znak '%s'. Bol očakávaný znak '>' alebo '/', aby ukončil "
+"začiatočnú značku elementu '%s' alebo nepovinne atribút. Možno ste použili "
+"neplatný znak v mene atribútu"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Prebytočný znak '%s'. Boli očakávané úvodzovky po '=' pri zadávaní hodnoty "
+"atribútu '%s' v elemente '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' nie je platný znak po znakoch '</'. '%s' nesmie začínať meno elementu"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' nie je platný znak po koncovom mene elementu '%s'. Povolený znak je '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' bol ukončený, momentálne nie je otvorený žiadny element"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' bol ukončený, ale momentálne otvorený element je '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument je prázdny alebo obsahuje iba medzery"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument neočakávane skončil hneď po začiatočnom znaku '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument neočakávane skončil s otvorenými elementami - '%s' bol posledný "
+"otvorený element."
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument neočakávane skončil, očakával sa znak '>' pre ukončenie značky <%s>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument neočakávane skončil v mene elementu"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument neočakávane skončil v mene atribútu"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument neočakávane skončil v začiatočnej značke elementu."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument neočakávane skončil po '=' za menom atribútu, chýba hodnota atribútu"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument neočakávane skončil v hodnote atribútu"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokument neočakávane skončil v koncovej značke pre element '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokument neočakávane skončil v komentári alebo inštrukcii pre spracovanie"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "chýbajúca koncová ] pre triedu znakov"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Neplatná sekvencia bajtov na vstupe prevodu"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Neukončený odkaz na znak"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Neukončený odkaz na znak"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Neukončený odkaz na znak"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "chýbajúca koncová )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") bez otváracej ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "Za (?R alebo (?[+-]číslice musí nasledovať )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "chýbajúca ) po komentári"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "regulárny výraz je príliš veľký"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Symbolické odkazy nepodporované"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "neplatná podmienka (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "neočakávané opakovanie"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Knižnica PCRE je skompilovaná bez podpory UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Knižnica PCRE je skompilovaná bez podpory UTF8 vlastností"
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Chyba na riadku %d znak %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "neukončený symbolický odkaz"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "symbolický odkaz s nulovou dĺžkou"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "očakávaná číslica"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Citovaný text nezačína úvodzovkami"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Prebytočné úvodzovky v príkazovom riadku alebo v inom texte shellu"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Text skončil hneď po znaku '\\'.  (Text bol '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Text skončil pred nájdením zodpovedajúcej úvodzovky pre %c. (Text bol '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Text bol prázdny (alebo obsahoval iba medzery)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Nepodarilo sa čítať dáta z procesu potomka"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Nepodarilo sa vytvoriť rúru pre komunikáciu s procesom potomka (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Nepodarilo sa čítať z rúry potomka (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Nepodarilo sa zmeniť priečinok na '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Nepodarilo sa spustiť proces potomka (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Neplatný názov programu: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Neplatný reťazec vo vektore parametra na %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Neplatný reťazec v prostredá: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Neplatný pracovný priečinok: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Nepodarilo sa spustiť pomocný program (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Neočakávaná chyba v g_io_channel_win32_poll() pri čítaní dát z procesu "
+"potomka"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Nepodarilo sa čítať dáta z procesu potomka (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Neočakávaná chyba v select() pri čítaní dát z procesu potomka (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Neočakávaná chyba vo waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Nepodarilo sa zavolať fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Nepodarilo sa spustiť proces potomka \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Nepodarilo sa presmerovať vstup alebo výstup procesu potomka (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Nepodarilo sa spustiť proces potomka (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Neznáma chyba počas behu procesu potomka \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Nepodarilo sa prečítať dostatok dát z rúry potomka (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak mimo rozsah UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Neplatná sekvencia na vstupe prevodu"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak mimo rozsah UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Použitie:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[VOĽBA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Voľby pomocníka:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Zobraziť voľby pomocníka"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Zobraziť všetky voľby pomocníka"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Voľby aplikácie:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Nepodarilo sa spracovať celočíselnú hodnotu '%s' pre %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Celočíselná hodnota '%s' pre %s je mimo rozsah"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Nepodarilo sa spracovať celočíselnú hodnotu '%s' pre %s"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Celočíselná hodnota '%s' pre %s je mimo rozsah"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Chyba počas prevodu: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Chýbajúci parameter pre %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Neznáma voľby %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "Nepodarilo sa nájsť platný súbor kľúčov v dátových adresároch"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nie je obyčajný súbor"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Súbor je prázdny"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Súbor kľúčov obsahuje riadok '%s', ktorý nie je pár kľúč-hodnota, skupinou, "
+"ani komentárom"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Neplatný názov skupiny: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Súbor kľúčov nezačína skupinou"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Neplatný názov kľúča: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Súbor kľúčov obsahuje nepodporované kódovane '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Súbor kľúčov nemá skupinu '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Súbor kľúčov nemá kľúč '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Súbor kľúčov obsahuje kľúč '%s' s hodnotou '%s', ktorá nie je UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Súbor kľúčov obsahuje kľúč '%s', ktorý má hodnotu, ktorá nemohla byť "
+"interpretovaná."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Súbor kľúčov obsahuje kľúč '%s', v skupine '%s', ktorý má hodnotu, ktorá "
+"nemohla byť interpretovaná."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Súbor kľúčov nemá kľúč '%s' v skupine '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Súbor kľúčov obsahuje znak escape na konci riadku"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Súbor kľúčov obsahuje neplatne zadanú sekvenciu '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Hodnota '%s' nemohla byť interpretovaná ako číslo."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Celočíselná hodnota '%s' je mimo rozsah"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Hodnota '%s' nemohla byť interpretovaná ako reálne číslo."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Hodnota '%s' nemohla byť interpretovaná ako booleovská."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Prúd je už zatvorený"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operácia bola zrušená"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Neznámy typ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "typ súboru %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "typ %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Nepomenované"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Vlastná definícia pre %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Nepodporovaná operácia"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Cieľový súbor existuje"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Symbolické odkazy nepodporované"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Pole obsahujúce názvy ikon"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Neplatný názov programu: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Chyba pri premenovaní súboru: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Neplatný názov súboru"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Chyba pri otváraní súboru: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Nepodarilo sa otvoriť priečinok"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Chyba pri odstraňovaní súboru: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Nepodarilo sa vytvoriť súbor '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Nepodarilo sa vytvoriť súbor '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Nepodarilo sa vytvoriť súbor '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Chyba pri otváraní priečinka '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Chyba počas prevodu: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Chyba pri odstraňovaní cieľového súboru: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokument neočakávane skončil v mene atribútu"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Chyba pri nastavovaní rozšírenej vlastnostii '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (neplatné kódovanie)"
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Neplatný typ vlastnosti (očakávané uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Neplatný typ vlastnosti (očakávané uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Neplatný typ vlastnosti (očakávaný bajtový reťazec)"
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Chyba počas prevodu: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Chyba pri nastavovaní vlastníka: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolický odkaz nesmie byť prázdny"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Chyba pri nastavovaní symbolického odkazu: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+#, fuzzy
+msgid "SELinux context must be non-NULL"
+msgstr "symbolický odkaz nesmie byť prázdny"
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Chyba pri nastavovaní vlastníka: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Symbolické odkazy nepodporované"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Chyba pri čítaní zo súboru: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Chyba pri zatváraní súboru: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Chyba pri zápise do súboru: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Chyba pri odstraňovaní starého záložného odkazu: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Chyba pri vytváraní záložnej kópie: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Chyba pri premenúvaní dočasného súboru: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Chyba pri otváraní súboru '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Cieľový súbor je priečinok"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Cieľový súbor nie je obyčajný súbor"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Chyba pri odstraňovaní súboru: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Neplatný názov programu: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Pamäťový výstupný prúd nepodporuje zmenu veľkosti"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Zlyhala zmena veľkosti pamäťového výstupného prúdu"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "pripojenie neimplementuje odpojenie"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "pripojenie neimplementuje vysunutie"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "pripojenie neimplementuje opätovné pripojenie"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+#, fuzzy
+msgid "mount doesn't implement content type guessing"
+msgstr "pripojenie neimplementuje odpojenie"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+#, fuzzy
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "pripojenie neimplementuje odpojenie"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Výstupný prúd neimplementuje zápis"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Zdrojový prúd je už zatvorený"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "názov"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Názov ikony"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "názvy"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Pole obsahujúce názvy ikon"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Chyba pri čítaní súboru '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Chyba pri čítaní z unixu: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Chyba pri zatváraní unixu: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Koreň súborového systému"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Chyba pri zápise do unixu: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "zväzok neimplementuje vysunutie"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Nepodarilo sa nájsť aplikáciu"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Chyba pri spúšťaní aplikácie: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI nepodporované"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "použiť dlhý formát výpisu"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[SÚBOR...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u bajtov"
+#~ msgstr[1] "%u bajt"
+#~ msgstr[2] "%u bajty"
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..2661754
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,1849 @@
+# Copyright (C) 2002-2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the package.
+#
+# Andraz Tori <andraz.tori1@guest.arnes.si> 2000.
+# Matej Urbančič <mateju@svn.gnome.org>, 2007 - 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-16 19:36+0100\n"
+"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
+"Language-Team: Slovenian <sl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Nepričakovan atribut '%s' za element '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Atribut '%s' elementa '%s' ni najden"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Nepričakovana oznaka '%s'. Pričakovana je oznaka '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Nepričakovana oznaka '%s' znotraj '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Ni veljavne datoteke zaznamkov v podatkovnih mapah"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Zaznamek za URI '%s' že obstaja"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Ni veljavnega zaznamka za URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "V zaznamku za URI '%s' ni določena vrsta MIME"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "V zaznamku za URI '%s' ni določene zasebne zastavice"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "V zaznamku za URI '%s' ni nastavljenih skupin"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Program z imenom '%s' ni ustvaril zaznamka za '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Napaka pri razširjanju ukazne vrstice '%s' z URI '%s'"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Pretvorba iz nabora znakov '%s' v '%s' ni podprta"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Ni mogoče odpreti pretvornika iz '%s' v '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Neveljavno zaporedje bajtov na vhodu pretvorbe"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Napaka med pretvorbo: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Delno (nedokončano) zaporedje znakov na koncu vhoda"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ni mogoče pretvoriti '%s' v nabor znakov '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' pri uporabi \"datotečne\" sheme ni absoluten"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Krajevna datoteka URI '%s' ne sme vsebovati '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' je neveljaven"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Ime gostitelja naslova URI '%s' ni veljavno"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Naslov URI '%s' vsebuje neveljavne ubežne znake"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Pot '%s' ni absolutna pot"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Neveljavno ime gostitelja"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Napaka ob odpiranju imenika '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ni mogoče rezervirati %lu bajtov za branje datoteke \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Napaka ob branju datoteke '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Datoteka \"%s\" je prevelika."
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Ni mogoče brati iz datoteke '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Ni mogoče odpreti datoteke '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Ni mogoče dobiti atributov datoteke '%s': fstat() ni uspel: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Ni mogoče odpreti datoteke '%s': fdopen() ni uspel: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Ni mogoče preimenovati datoteke '%s' v '%s': g_rename() ni uspel: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Ni mogoče ustvariti datoteke '%s' %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Ni mogoče odpreti datoteke '%s' za pisanje: fdopen() ni uspel: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Ni mogoče zapisati datoteke '%s': fwrite() ni uspel: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Napaka med pisanjem datoteke '%s': fflush() napaka: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Napaka med pisanjem datoteke '%s': fsync() napaka: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Ni mogoče zapreti datoteke '%s': fclose() ni uspel: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Obstoječe datoteke '%s' ni mogoče odstraniti: g_unlink() ni uspel: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Predloga '%s' je neveljavna, saj ne sme vsebovati '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Predloga '%s' ne vsebuje XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Ni mogoče prebrati simbolne povezave '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Simbolne povezave niso podprte"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Ni mogoče odpreti pretvornika iz '%s' v '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ni mogoče prebrati g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Preostanek nepretvorjenih podatkov v bralnem medpomnilniku"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal je prekinjen v delnem znaku"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ni mogoče prebrati v g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Ni mogoče odpreti datoteke '%s': open() ni uspel: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Ni mogoče preslikati datoteke '%s': mmap() ni uspel: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Napaka v vrstici %d, znak %d:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Napaka v vrstici %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Zaznana prazna entiteta '&;'; veljavne entitete so: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Znak '%s' ni veljaven na začetku imena entitete; entiteto začne znak &; v "
+"primeru, da znak ne predstavlja entitete, mora biti zapisan kot &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak '%s' ni veljaven znotraj imena entitete"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Neznano ime entitete '%s'"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteta se ne zaključi s podpičjem; najverjetneje je uporabljen znak '&' "
+"brez povezave z entiteto - znak '&' mora biti zapisan kot '&amp;'"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Ni mogoče razčleniti '%-.*s', ki bi morala biti številka znotraj reference "
+"znaka (na primer &#234;) - morda je številka prevelika"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Referenca znaka '%-.*s' ne šifrira dovoljenega znaka"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Prazna referenca znaka; vsebovati bi morala številko kot &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Referenca znaka se ni končala s podpičjem; najverjetneje je uporabljen znak "
+"'&' brez povezave z entiteto - znak '&' mora biti zapisan kot '&amp;'"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nedokončano nanašanje na entiteto"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nedokončano nanašanje na znak"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Neveljavno UTF-8 kodirano besedilo - predolgo zaporedje"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Neveljavno UTF-8 kodirano besedilo - ni začetnega znaka"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Neveljavno UTF-8 kodirano besedilo - neveljaven '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument se mora začeti z elementom (na primer <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' ni veljaven znak, kadar sledi znaku '<'; morda se ne začne z imenom "
+"elementa"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Nenavaden znak '%s'. Pričakovan znak je '>', da se zaključi oznako predmeta "
+"'%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Nenavaden znak '%s'. Za imenom atributa '%s' (elementa '%s') je pričakovan "
+"znak '='"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Nenavaden znak '%s'. Pričakovan znak '>' ali '/', ki bi zaključil oznako "
+"elementa '%s' ali atribut; morda ste uporabili neveljaven znak v imenu "
+"atributa'"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Nenavaden znak '%s'. Za enačajem je pričakovan narekovaj znotraj katerega je "
+"podana vrednost atributa '%s' elementa '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' ni veljaven znak za znakoma '</'; ime elementa se ne sme začeti z '%s'"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Znak '%s' ni veljaven kadar sledi zaprtju imena elementa '%s'; dovoljen znak "
+"je '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element '%s' je zaprt, trenutno ni odprtega elementa"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element '%s' je zaprt, še vedno pa je odprt element '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument je prazen ali pa vsebuje le presledke"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokument nepričakovano zaključen takoj za odprtjem predmeta '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument nepričakovano zaključen s še odprtimi elementi - '%s' je zadnji "
+"odprt element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument nepričakovano zaključen, pričakovan je zaključni zaklepaj oznake <%"
+"s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument nepričakovano zaključen sredi imena elementa"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument nepričakovano zaključen sredi imena atributa"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument nepričakovano zaključen sredi oznake za odprtje elementa."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument nepričakovano zaključen za enačajem, ki sledil imenu atributa; ni "
+"določena vrednosti atributa"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument nepričakovano zaključen sredi vrednosti atributa"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokument nepričakovano zaključen sredi oznake zaprtja elementa '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Dokument nepričakovano zaključen sredi komentarja ali ukaza"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "pokvarjen predmet"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "notranja napaka ali pokvarjen predmet"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "zmanjkalo je pomnilnika"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "dosežena omejitev sledenja nazaj"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "vzorec vsebuje predmete, ki niso podprti za delno iskanje zadetkov"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "notranja napaka"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "predhodne povezave, kot pogoji, niso podprti za delno primerjavo"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "dosežena omejitev globine drevesne ravni"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "dosežena omejitev delovnega prostora za prazne podrejene niti"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "nepravilna kombinacija zastavic nove vrstice"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "neznana napaka"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ na koncu vzorca"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c na koncu vzorca"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "neprepoznan znak sledi znaku \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"ubežno spreminjanje velikosti črk (\\l, \\L, \\u, \\U) na tem mestu ni "
+"dovoljeno"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "številke niso zapisane pravilno v {} količilniku"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "številke so prevelike v {} količilniku"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "manjkajoč zaključni znak ] za znakovni razred"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "neveljavno ubežno zaporedje v znakovnem razredu"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "nepravilen obseg v znakovnem razredu"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ni mogoče ponoviti"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "neprepoznan znak za (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "neprepoznan znak za (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "neprepoznan znak za (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX razredi so podprti le znotraj razreda"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "manjka zaključujoči )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") brez odpirajočega ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ali (?[+-] številom mora slediti )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "povezava na neobstoječ podrejen vzorec"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "manjka ) po opombi"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "logični izraz je predolg"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "napaka med pridobivanjem spomina"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "povratna trditev ni določene dolžine"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "nepravilno oblikovano ime ali številka za (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "pogojna skupina vsebuje več kot dve veji"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "trditev pričakovana za (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "neznano POSIX ime razreda"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX primerjalni elementi niso podprti"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "znakovna vrednost v zaporedju \\x{...} je predolga"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "neveljaven pogoj (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C ni dovoljen v povratnih trditvah"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "drevesni klic opravila se lahko izvaja v neskončnost"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "manjkajoč zaključni znak v imenu podrejenega vzorca"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dva imenovana podrejena vzorca imata enako ime"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "nepravilno oblikovano \\P ali \\p zaporedje"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "neznano ime lastnosti za \\P ali \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ime podrejenega vzorca je predolgo (največ 32 znakov)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "preveč imenovanih podrejenih vzorcev (največ 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "osmiška vrednost je večja kot \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE skupina vsebuje več kot eno vejo"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "ponavljanje DEFINE skupine ni dovoljeno"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "nepopolna NEWLINE možnost"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g ne sledi označenemu imenu ali pogojno označenemu številu večjem od nič"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "nepričakovana ponovitev"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "prekoračitev kode"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "pretečena delovna površina prevajanja kode"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "predhodno preverjene povezave podrejenega vzorca ni mogoče najti"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Napaka med primerjanjem logičnega izraza %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Knjižnica PCRE je pretvorjena brez UTF-8 podpore"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Knjižnica PCRE je pretvorjena brez lastnosti UTF-8 podpore"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Napaka med pretvarjanjem logičnega izraza %s pri znaku %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Napaka med prilagajanjem logičnega izraza %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "šestnajstiško število ali pa pričakovan '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "pričakovano šestnajstiško število"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "manjkajoč znak '<' v simbolni povezavi"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "nedokončana simbolna povezava"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "simbolna povezava nične dolžine"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "pričakovano število"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "neveljavna simbolna povezava"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "obidi končna '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "neznano ubežno zaporedje"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Napaka med razčlenjevanjem besedila zamenjave \"%s\" pri znaku %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Citirano besedilo se ne začne z narekovajem"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "V ukazni vrstici ali v citiranem besedilu manjka končni narekovaj"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Besedilo končano takoj po znaku '\\'. (Besedilo je bilo '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Besedilo končano preden je bil najden zaključni narekovaj za %c. (besedilo "
+"je bilo '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Besedilo je bilo prazno (ali vsebovalo le presledke)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Ni mogoče prebrati podatkov iz procesa podrejenega predmeta"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Ni mogoče ustvariti cevi za komunikacijo s procesom podrejenega predmeta (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Ni mogoče prebrati iz cevi podrejenega procesa (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Ni mogoče spremeniti imenika v '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Ni mogoče izvesti podrejenega procesa (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Neveljavno ime programa: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Neveljaven niz v vektorju argumenta pri %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Neveljaven niz okolja: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Neveljavna delovna mapa: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Napaka pri izvedbi pomožnega programa  (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Nepričakovana napaka v g_io_channel_win32_poll() med branjem podatkov "
+"procesa podrejenega predmeta"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Ni mogoče prebrati podatkov podrejenega procesa (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Nepričakovana napaka v select() med branjem podatkov procesa podrejenega "
+"predmeta (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Nepričakovana napaka v waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Ni mogoča razvejitev (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Ni mogoče izvesti podrejenega procesa \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Ni mogoče preusmeriti vhoda ali izhoda podrejenega procesa (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Ni mogoče razvejiti podrejenega procesa (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Neznana napaka med izvajanjem podrejenega procesa \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Ni mogoče prebrati dovolj podatkov iz cevi podrejenega procesa (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak izven intervala za UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Neveljavno zaporedje na vhodu pretvorbe"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak izven intervala za UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Uporaba:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[MOŽNOST ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Možnosti pomoči:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Pokaži možnosti pomoči"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Pokaži vse možnosti pomoči"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Možnosti programa:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Ni mogoče razčleniti celoštevilske vrednosti '%s' za %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Celoštevilska vrednost '%s' za %s izven obsega"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Ni mogoče razčleniti dvojne vrednosti '%s' za %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Vrednost dvojne velikosti '%s' za %s izven obsega"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Napaka med razčlenjevanjem %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Manjka argument za %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Neznana možnost %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Veljavnega ključa v iskanih imenikih ni mogoče najti"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ni običajna datoteka"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Datoteka je prazna"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Datoteka s ključem vsebuje vrstico '%s', ki ni ključ-vrednost par, skupina "
+"ali komentar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Neveljavno ime skupine: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Datoteka s ključem se ne začne s skupino"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Neveljavno ime ključa: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Datoteka s ključem vsebuje nepodprto kodiranje '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Datoteka s ključem ni del skupine '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Datoteka s ključem nima ključa '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Datoteka s ključem vsebuje ključ '%s' z vrednostjo '%s', ki ni zapisan v UTF-"
+"8 naboru"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Datoteka s ključem vsebuje ključ '%s' z vrednostjo, ki je ni mogoče "
+"obravnavati."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Datoteka s ključem vsebuje ključ '%s' v skupini '%s' z vrednostjo, ki je ni "
+"mogoče obravnavati."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Datoteka s ključem nima ključa '%s' v skupini '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Datoteka s ključem vsebuje ubežni znak na koncu vrstice"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Datoteka ključa vsebuje neveljavno ubežno zaporedje '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Vrednosti '%s' ni mogoče obravnavati kot število."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Celoštevilska vrednost '%s' izven obsega"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Vrednosti '%s' ni mogoče obravnavati kot število s plavajočo vejico."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Vrednosti '%s' ni mogoče obravnavati kot Boolovo vrednost."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Prevelika vrednost štetja poslana na %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Pretok je že zaprt"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operacija je bila preklicana."
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "neznana vrsta"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s vrsta datoteke"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s vrsta"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Nepričakovan prezgodnji konec pretoka"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Neimenovan"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Namizna datoteka ne vsebuje določenega polja Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Ni mogoče najti terminala, ki ga zahteva program"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Ni mogoče ustvariti nastavitvene mape uporabnikovega programa %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Ni mogoče ustvariti uporabnikove nastavitvene MIME mape %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Ni mogoče ustvariti uporabnikove datoteke namizja %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Določilo po meri za %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "pogona ni mogoče izvreči"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "pogon ne podpira preverjanja enote"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Ni mogoče upravljati z različico %d kodiranja GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Nepravilno oblikovana znakov (%d) v kodiranju GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Ni mogoče upravljati z različico %d kodiranja GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Nepravilno oblikovana znakov (%d) v kodiranju GEmblemedIcon"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Pričakovan GEmblem za GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Operacija ni podprta"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Obstoječa enota ne obstaja"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Ni mogoče kopirati preko mape"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Ni mogoče kopirati mape preko mape"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Ciljna datoteka obstaja"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Ni mogoče kopirati drevesne strukture mape"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Ni mogoče kopirati posebne datoteke"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Neveljavna vrednost simbolne povezave"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Smeti niso podprte"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Ni mogoče uporabiti '%c' v imenu datoteke"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "enota ne podpira priklopa"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Na voljo ni programa z a upravljanje s to datoteko"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Številčnik je zaprt"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Številčnik izvaja izredno operacijo"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Številčnik datotek je že zaprt"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "datoteka"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Datoteka, ki vsebuje ikono"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Ni mogoče upravljati z različico %d kodiranja GFileIcon "
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Nepravilno oblikovani podatki za GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Pretok ne podpira query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Iskanje po pretoku ni podprto"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Razčlenitev ni dovoljena na dovodnem pretoku"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Razčlenitev ni podprta na pretoku"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Napačno število znakov (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Ni določenega imena razreda %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Vrsta %s ne vstavlja vmesnika GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Vrste %s ni uvrščena v razred"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Nepravilno oblikovana številka različice: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Vrsta %s ne vstavlja from_tokens() vmesnika GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Ni mogoče upravljati z navedeno različico kodiranja ikone"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Vhodni pretok ne podpira branja"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Pretok izvaja izredno operacijo"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Ni mogoče najti privzete vrste nadzora mape"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Neveljavno ime datoteke %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Napaka med branjem podrobnosti datotečnega sistema %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Ni mogoče preimenovati skrbniške mape"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Napaka med preimenovanjem datoteke: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Ni mogoče preimenovati datoteke, izbrano ime že obstaja"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Neveljavno ime datoteke"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Napaka med odpiranjem datoteke: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Ni mogoče odpreti mape"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Napaka med odstranjevanjem datoteke: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Napaka ob premikanjem datoteke v smeti: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Ni mogoče ustvariti mape smeti %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Ni mogoče najti vrhnje ravni smeti"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Ni mogoče najti ali ustvariti mape smeti"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Ni mogoče ustvariti datoteke podrobnosti: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Ni mogoče premakniti datoteke v smeti: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Napaka med ustvarjanjem mape: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Napaka med ustvarjanjem simbolne povezave: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Napaka med premikanjem datoteke: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Ni mogoče premakniti mape čez mapo"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Ni mogoče ustvariti varnostne kopije"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Napaka med odstranjevanjem ciljne datoteke: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Premikanje med priklopi ni podprto"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Vrednost atributa ne sme biti določena kot NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Neveljavna vrsta atributa (pričakovan niz)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Neveljavno razširjeno ime atributa"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Napaka med določanjem razširjenega atributa '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Napaka med potrjevanjem datoteke '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (neveljavni kodni nabor)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Napaka med potrjevanjem opisovalca datoteke: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Neveljavna vrsta atributa (pričakovan uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Neveljavna vrsta atributa (pričakovan uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Neveljavna vrsta atributa (pričakovan bitni niz)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Napaka med določanjem dovoljenj: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Napaka med določanjem lastnika: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "Simbolna povezava ne sme biti določena kot NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Napaka med določanjem simbolne povezave: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Napaka med določevanjem simbolne povezave; datoteka ni simbolna povezava"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux atribut ne sme biti določena kot NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Napaka nastavitve vsebine SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "Na tem sistemu SELinux ni omogočen"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Določanje atributa %s ni podprto"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Napaka med branjem iz datoteke: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Napaka med iskanjem v datoteki: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Napaka med zapiranjem datoteke: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Ni mogoče najti privzete lokalne datoteke nadzora"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Napaka med pisanjem v datoteko: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Napaka med odstranjevanjem stare varnostne povezave: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Napaka med ustvarjanjem varnostne kopije: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Napaka med preimenovanjem začasne datoteke: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Napaka med obrezovanjem datoteke: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Napaka med odpiranjem datoteke '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Ciljna datoteka je mapa"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Ciljna datoteka ni običajna datoteka"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Datoteka je bila zunanje spremenjena"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Napaka med odstranjevanjem datoteke: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Privzet neveljaven GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Neveljavna zahteva iskanja"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Ni mogoče razčleniti GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Dosežena največja dovoljena vrednost podatkov"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Odvoda pretoka spomina ni mogoče razširiti"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Napaka med razširjanjem pretoka odvoda spomina"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "enota ne podpira odklopa"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "enote ni mogoče izvreči"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "enota ne podpira ponovnega priklopa"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "priklop ne podpira ugibanja vsebine vrste"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "priklop ne podpira usklajevanja ugibanja vsebine vrste"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Odvodni pretok ne podpira pisanja"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Izvorni pretok je že zaprt"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "ime"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Ime ikone"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "imena"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Vrsta, ki vsebuje imena ikon"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "uporabi privzete povrnitve"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Ali naj se uporabi povrnitev s skrajševanjem imena pri '-' znaku. Prezrta so "
+"imena za prvim, če je podanih več imen."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Ni mogoče upravljati z različico %d kodiranja GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Opisnik datoteke"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Opisnik datotek iz katerega naj se bere"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ZApri opisnik datotek"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Ali naj se zapre opisnik datoteke, ko je pretok končan"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Napaka med branjem unix-a: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Napaka med zapiranjem unix-a: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Koren datotečnega sistema"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Datotečni opisnik kamor naj se izpiše"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Napaka med pisanjem na unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "medija ni mogoče izvreči"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Ni mogoče najti programa"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Napaka med zaganjanjem programa: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "naslovi URI niso podprti"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "Spreminjanje asociativnih povezav ni podprto na win32 sistemih"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Ustvarjanje asociativnih povezav ni podprto na win32 sistemih"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ne skrij vnosov"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "uporabi zapis v obliki dolgega seznama"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[DATOTEKA ...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u bajtov"
+#~ msgstr[1] "%u bajt"
+#~ msgstr[2] "%u bajta"
+#~ msgstr[3] "%u bajti"
diff --git a/po/sq.po b/po/sq.po
new file mode 100644
index 0000000..db2ecff
--- /dev/null
+++ b/po/sq.po
@@ -0,0 +1,2149 @@
+# Përkthimi i mesazheve të glib në shqip
+# Copyright (C) 2003-2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Laurent Dhima <laurenti@alblinux.net>, 2003-2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-08-18 10:19+0200\n"
+"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
+"Language-Team: albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Atribut i papritur '%s' për elementin '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Atributi '%s' i elementit '%s' nuk u gjet"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Tag '%s' i papritur, pritej tag '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Tag '%s' i papritur në brendësi të '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Nuk u gjet asnjë file i vlefshëm libërshënimesh tek directory e të dhënave"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Një libërshënim për URI '%s' ekziston rregullisht"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Nuk u gjet asnjë libërshënim për URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Asnjë përcaktim i llojit të MIME në libërshënimin për URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Nuk është përcaktuar asnjë flag privat në libërshënimin për URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Nuk është përcaktuar asnjë grup për URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Asnjë aplikativ me emrin '%s' ka regjistruar një libërshënues për '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Zgjerimi i rreshtit exec '%s' me URI '%s' dështoi"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konvertimi nga familja e simboleve '%s' në '%s' nuk suportohet"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "E pamundur hapja e konvertuesit nga '%s' në '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Sekuencë byte e pavlefshme tek të dhënat për konvertim"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Gabim gjatë konvertimit: %s"
+
+# (pofilter) doublewords: The word 'të' is repeated
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Sekuencë e pjesëshme simbolesh në fund të së dhënave në hyrje"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "I pamundur konvertimi i '%s' në familjen e simboleve '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' nuk është një URI absolute duke përdorur skemën e \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI për file lokal '%s' mund të mos përdorë një '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' është e pasaktë"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Emri i host të URI '%s' është i pasaktë"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' përmban simbole escape të pavlefshëm"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Pozicioni me emër '%s' nuk është një pozicion absolut"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Emër host i pasaktë"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Gabim gjatë hapjes së directory '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "I pamundur grumbullimi i %lu bytes për të lexuar file \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Gabim gjatë leximit të file '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "File \"%s\" është tepër i madh"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "I pamundur leximi nga file '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "E pamundur hapja e file '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "E pamundur marrja e pronësive të file '%s': fstat() dështoi: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Dështoi hapja e file '%s': fdopen() dështoi: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Ndryshimi i emrit të file nga '%s' në '%s' dështoi: g_rename() dështoi: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Dështoi krijimi i file '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Hapja e file '%s' për shkrim dështoi: fdopen() dështoi: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Shkrimi i file '%s' dështoi: fwrite() dështoi: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Shkrimi i file '%s' dështoi: fwrite() dështoi: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Shkrimi i file '%s' dështoi: fwrite() dështoi: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Mbyllja e file '%s' dështoi: fclose() dështoi: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "E pamundur heqja e file ekzistues '%s': g_unlink() dështoi: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Shabllon '%s' i pavlefshëm, nuk mund të përmbajë një '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Modeli '%s' nuk përmban XXXXXX"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "I pamundur leximi i lidhjes simbolike '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Lidhjet simbolike nuk suportohen"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Nuk arrij të hap konvertuesin nga '%s' në '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"I pamundur leximi i të dhënave të papërpunuara tek "
+"g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Kanë tepruar të dhëna të pakonvertuara tek buffer i leximit"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanali përfundon me një simbol të pjesëshëm"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"I pamundur leximi i të dhënave të papërpunuara tek g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "E pamundur hapja e file '%s': open() dështoi: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "I pamundur mapimi i file '%s': mmap() dështoi: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) endwhitespace: checks whether whitespace at the end of the strings matches
+# (pofilter) printf: checks whether printf format strings match
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Gabim tek rreshti %d simboli %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Gabim tek rreshti %d: %s"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"U gjet një entitet bosh '&;'; entitetet e vlefshme janë: &amp; &quot; &lt; "
+"&gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Simboli '%s' nuk vlen si fillues i emrit të një entiteti; simboli & fillon "
+"një entitet; nëse ky simbol nuk do të jetë fillimi i një entiteti, përdore "
+"si &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Simboli '%s' nuk është i vlefshëm brenda emrit të një entiteti"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Emri entitetit '%s' nuk njihet"
+
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteti nuk përfundon me pikëpresje; ndoshta keni përdorur një \"e\" "
+"komerciale pa dashur të nisni një entity - zëvendësojeni me &amp;"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+# (pofilter) sentencecount: The number of sentences differ: 1 versus 2
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"I pamundur analizimi i '%-.*s', duhet të ishte një numër brenda riferimeve "
+"të një simboli (p.sh. &#234;) - ndoshta numri është tepër i madh"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Riferimi '%-.*s' i simbolit nuk kodifikon një simbol të lejuar"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Simbol bosh, duhet të përmbajë një vlerë numerike, si &#454;"
+
+# (pofilter) endwhitespace: checks whether whitespace at the end of the strings matches
+# (pofilter) doublespacing: checks for bad double-spaces by comparing to original
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Simboli nuk mbaron me pikëpresje; ndoshta keni përdorur një simbol ampersand "
+"& pa pasur ndërmend fillimin e një entiteti të ri - përdorni &amp;  "
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Riferim entiteti i papërfunduar"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Referim i papërfunduar i simbolit"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Tekst i kodifikuar UTF-8 i pavlefshëm - sekuencë tepër e gjatë"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Tekst i kodifikuar UTF-8 i pavlefshëm - nuk është një simbol nisje"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Tekst i kodifikuar UTF-8 i pavlefshëm - '%s' e pavlefshme"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumenti duhet të fillojë me një element (p.sh. <book>)"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' nuk është një simbol i vlefshëm mbas simbolit '<', nuk mund të fillojë "
+"me emrin e një elementi"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Simbol tek '%s', pritet një simbol '>' për të mbyllur etiketën e elementit "
+"bosh '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Simbol tek '%s', pritet një '=' mbas emrit të atributit '%s' të elementit '%"
+"s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Simbol tek '%s', pritet një simbol '>' ose '/' për të përfunduar etiketën e "
+"nisjes së elementit '%s', ose në menyrë apsionale një atribut; ka shumë "
+"mundësi të keni përdorur një simbol të pavlefshëm tek emri i një atributi"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Simbol tek '%s', pritet simboli i kuotës së hapur mbas shenjës së barazimit "
+"për t'i caktuar një vlerë atributit '%s' të elementit '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' nuk është një simbol i vlefshëm mbrapa simboleve '</'; '%s' nuk mund të "
+"nisë emrin e një elementi"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' nuk është një simbol i vlefshëm për të vazhduar mbylljen e emrit të "
+"elementit '%s'; simboli i lejuar është '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elementi '%s' është mbyllur, asnjë element aktualisht është i hapur"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Elementi '%s' është mbyllur, por elementi aktualisht i hapur është '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumenti ishte bosh apo përmbante vetëm hapësira të bardha"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Dokumenti u mbyll papritur, menjëherë pas hapjes së kllapës këndore '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumenti u mbyll papritur me elementë akoma të hapur - '%s' ishte elementi "
+"i fundit i hapur"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "Dokumenti u mbyll papritur, pritet simboli i mbylljes për tag-un <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumenti përfundoi papritur në brendësi të emrit të një elementi"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumenti u mbyll papritur në brendësi të emrit të një atributi"
+
+# (pofilter) endpunc: checks whether punctuation at the end of the strings match
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumenti u mbyll papritur brënda një etikete hapje elementi"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumenti u mbyll papritur mbas shenjës së barazimit që vjen mbas emrit të "
+"një atributi; atributi nuk ka vlerë"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumenti u mbyll papritur në brendësi të vlerës së një atributi"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Dokumenti u mbyll papritur në brendësi të tag-ut mbyllës të elementit '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumenti u mbyll papritur në brendësi të një komenti apo instruksioni "
+"proçesi"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "objekt i korruptuar"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "gabim i brendshëm ose objekt i korruptuar"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "mbi memorjen"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "u arrit kufiri i backtracking"
+
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "modeli përmban elementë të pasuportuar për korrispondimin e pjesëshëm"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "gabim i brendshëm"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"për korrispondimin e pjesëshëm nuk suportohen referimet mbrapsht si kushte"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "u arrit kufiri i ndjekjes"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "u arrit kufiri i hapësirës së punës pën nënstringa boshe"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "kombinim i pavlefshëm i flag të fund'rreshtit"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "gabim i panjohur"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ në fund të modelit"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c në fund të modelit"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "simbol i papërshtatshëm mbas \\"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "ndryshimet gërma të vogla/mëdha nuk (\\l, \\L, \\u, \\U) lejohen këtu"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "numra jashtë rendit në sasiuesin {}"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "numër tepër i madh në sasiuesin {}"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+# (pofilter) brackets: translation is missing ']'
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "] përfunduese munguese për klasën e simboleve"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "sekuencë escape e pavlefshme në klasën e simboleve"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "interval i parregullt në klasën e simboleve"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "asgjë për tu përsëritur"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) endpunc: checks whether punctuation at the end of the strings match
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+# (pofilter) brackets: translation is missing '('
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "simbol i panjohur mbas (?"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+# (pofilter) brackets: translation is missing '('
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "simbol i panjohur mbas (?<"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+# (pofilter) brackets: translation is missing '('
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "simbol i panjohur mbas (?P"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "klasat e përmendura POSIX suportohen vetëm në brendësi të një klase"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ") përfunduese mungon"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") pa ( hapje"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ose (?[+-]shifra duhet të ndiqet nga )"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "riferim ndaj një nën-modeli joekzistues"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ") mungon mbas komentit"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "shprehje e rregullt tepër e gjatë"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "rekuperimi i memorjes dështoi"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "kushti lookbehind nuk ka gjatësi të fiksuar"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "numër apo emër i keqformuar mbas (?("
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "grupi kushtëzor përmban më shumë se dy degëzime"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "pritej kushti mbas (?("
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "emër i panjohur klase POSIX"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) acronyms: acronyms should not be translated: POSIX
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "elementët vendosës POSIX nuk suportohen"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "vlera e simbolit në sekuencën \\x{...} është tepër e madhe"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "kusht (?(0) i pavlefshëm"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C e palejuar në kushtin lookbehind"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "thirrja rekursive mund të hyjë në loop pafund"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "mungon përfunduesi në emrin e nën-modelit"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "dy nën-modelet e emërtuar kanë të njëjtin emër"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "sekuencë \\P ose \\p e keqformuar"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "emër i panjohur pronësie mbas \\P ose \\p"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "emri i nën-modelit është tepër i gjatë (maksimum 32 simbole)"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "emërtuar tepër nën-modele (maksimum 10,000)"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "vlera tetore është më e madhe se \\377"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "grupi DEFINE përmban më shumë se një degëzim"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "përsëritja e një grupi DEFINE nuk është e lejuar"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "opsione NEWLINE jokoerente"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g nuk ndiqet nga një emër në kllapa ose një numër të ndryshëm nga zero me "
+"dëshirë në kllapa"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "përsëritje e papritur"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "sasi e tepërt kodi"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "tejkalim kufir gjatë kompilimit të zonës së punës"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "nën-model referues i kontrolluar më parë nuk u gjet"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+"Gabim gjatë kërkimit të korrispondimeve për shprehjen e rregullt %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Libraria PCRE është kompiluar pa suportin për UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Libraria PCRE është kompiluar pa suportin për pronësitë UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Gabim gjatë kompilimit të shprehjes së rregullt %s tek simboli %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Gabim gjatë optimizimit të shprehjes së rregullt %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "pritej një shifër exadecimale ose '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "pritej një shifër exadecimale"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "mungon '<' në referimin simbolik"
+
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "Riferim simbolik i papërfunduar"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referim simbolik me gjatësi zero"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "pritej një shifër"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "referim simbolik i palejuar"
+
+# (pofilter) startpunc: checks whether punctuation at the beginning of the strings match
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "'\\' në fund e izoluar"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "sekuencë e panjohur escape"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Gabim gjatë analizimit të tekstit zëvendësues \"%s\" tek simboli %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Teksti i kuotuar nuk fillon me shenjën e kuotimit"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Nuk u gjet simboli i kuotimit tek rreshti i komandës apo tek teksti i "
+"kuotuar nga shell"
+
+# (pofilter) puncspacing: checks for bad spacing after punctuation
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Teksti përfundoi menjëherë pas një simboli '\\'. (Teksti ishte '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Teksti përfundoi përpara se të gjente tekstin e kërkuar për %c. (Teksti "
+"ishte '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Teksti është bosh (ose përmban vetëm hapsira të bardha)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "I pamundur leximi i të dhënave nga proçesi bir"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "I pamundur krijimi i pipe për të komunikuar me proçesin bir (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "I pamundur leximi nga pipe bijë (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "I pamundur ndryshimi i directory në '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "I pamundur ekzekutimi i proçesit bir (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Emër i pasaktë programi: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Vlerë e pasaktë në vektorin e argumentit tek %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Vlerë e pavlefshme në ambient: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Directory e pavlefshme pune: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "I pamundur ekzekutimi i programit ndihmues (%s)"
+
+# (pofilter) doublewords: The word 'të' is repeated
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Gabim i papritur në g_io_channel_win32_poll() gjatë leximit të të dhënave "
+"nga një proçes bir"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "I pamundur leximi i të dhënave nga proçesi bir (%s)"
+
+# (pofilter) doublewords: The word 'të' is repeated
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Gabim i papritur në select() gjatë leximit të të dhënave nga një proçes bir "
+"(%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Gabim i papritur në waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "E pamundur kryerja e fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "I pamundur zbatimi i proçesit bir \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"I pamundur ridrejtimi i të dhënave në hyrje apo dalje të proçesit bir (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "E pamundur kryerja e fork për proçesin bir (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Gabim i panjohur gjatë ekzekutimit të proçesit bir \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"I pamundur leximi i një sasie të dhënash të mjaftueshme nga pid pipe bir (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Simboli nuk ekziston në UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Sekuencë e pavlefshme në hyrje për konvertimin"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Simboli nuk ekziston në UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Përdorimi:"
+
+# (pofilter) acronyms: acronyms should not be translated: OPTION
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPSIONI...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Opcionet e ndihmës:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Shfaq opcionet e ndihmës"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Shfaq të gjithë opcionet e ndihmës"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcionet e programit:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "I pamundur analizimi i vlerës së plotë '%s' për %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Vlera integruese '%s' për %s është jashtë kufirit"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "I pamundur analizimi i vlerës së dyfishtë '%s' për %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Vlera e dyfishtë '%s' për %s është jashtë kufirit"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Gabim gjatë analizimit të opsionit %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Mungojnë argumentë për %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Opcion i panjohur %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Nuk u gjet asnjë file i vlefshëm kyçi tek directory e kërkimit"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nuk është një file i rregullt"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "File është bosh"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Kyçi përmban rreshtin '%s' që nuk është një vlerë çift, grup apo koment kyçi"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Emër i pasaktë grupi: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "File i kyçit nuk fillon me një grup"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Emër i pasaktë kyçi: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "File i kyçit përmban kodifikimin e pasuportuar '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "File i kyçit nuk ka grupin '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "File i kyçit nuk përmban kyçin '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "File i kyçit përmban kyçin '%s' me vlerë '%s' që nuk është në UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "File i kyçit përmban kyçin '%s' që ka një vlerë të painterpretueshme."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"File i kyçit përmban kyçin '%s' në grupin '%s' që ka një vlerë të "
+"painterpretueshme."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "File i kyçit nuk ka kyçin '%s' në grupin '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "File i kyçit përmban simbolin escape në fund të rreshtit"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "File i kyçit përmban sekuencën e pavlefshme escape '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Vlera '%s' nuk mund të interpretohet si një numër."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Vlera integruese '%s' është jashtë kufirit"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Vlera '%s' nuk mund të interpretohet si një numër float."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Vlera '%s' nuk mund të interpretohet si një boolean."
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Vlerë count tepër e madhe kaluar tek %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Stream është i mbyllur rregullisht"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Operacioni është anulluar"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) startcaps: checks that the message starts with the correct capitalisation
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Lloj i panjohur"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "Lloj file %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "Lloj %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "End-of-stream i parakohshëm papritur"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Paemër"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "File .desktop nuk specifikon fushën Exec"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "E pamundur gjetja e terminalit të kërkuar nga aplikativi"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+"E pamundur gjetja e kartelës së përdoruesit për konfigurimin e aplikativëve  "
+"(%s): %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+"E pamundur gjetja e kartelës së përdoruesit për konfigurimin MIME  (%s): %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "I pamundur krijimi i file .desktop të përdoruesit %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Përcaktimi i personalizuar për %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "njësia nuk suporton nxjerrjen jashtë"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "njësia nuk suporton shqyrtimin e suporteve"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Veprimi nuk suportohet"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Objekti mount i përmbajtur nuk ekziston"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "I pamundur kopjimi mbi directory"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "I pamundur kopjimi i directory mbi directory"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "File objektiv ekziston"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "I pamundur kopjimi rekursiv i directory"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "I pamundur kopjimi mbi directory"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Dhënë vlerë e pavlefshme lidhje simbolike"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Koshi nuk suportohet"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Emrat e file nuk mund të përmbajnë '%c'"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "Volumi nuk suporton montimin"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Nuk rezulton i regjistruar asnjë aplikativ për të manazhuar këtë file"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumuruesi është mbyllur"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Enumuruesi i file prezanton një operacion të papërfunduar"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Enumuruesi i file është rregullisht i mbyllur"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "file"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "File që përmban ikonën"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Stream nuk suporton query_info"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Pikëvendosja nuk suportohet në stream"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Ndërprerja nuk suportohet tek stream në hyrje"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Ndërprerja nuk suportohet tek stream"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Stream i input nuk suporton leximin"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Stream prezanton një operacion në pritje"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+"E pamundur gjetja e llojit të monitorit të paracaktuar për directory lokale"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Emër file i pasaktë %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Gabim gjatë marrjes së informacioneve mbi file të sistemit: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "I pamundur riemërtimi i directory root"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Gabim gjatë ndryshimit të emrit të file: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "I pamundur riemërtimi i file, emër ekzistues file"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Emër i pavlefshëm file"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Gabim gjatë hapjes së file: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "E pamundur hapja e directory"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Gabim gjatë fshirjes së file: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Gabim gjatë hedhjes në kosh të file: %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "I pamundur krijimi i directory koshit \"%s\": %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "E pamundur gjetja e directory së sipërme për koshin"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "I pamundur krijimi apo gjetja e directory të koshit"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "I pamundur krijimi i një file me informacionet e hedhjes në kosh: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "E pamundur hedhja në kosh e file: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Gabim gjatë krijimit të directory: %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Gabim gjatë krijimit të lidhjes simbolike: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Gabim gjatë lëvizjes së file: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "E pamundur lëvizja e directory mbi directory"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Krijimi i file backup dështoi"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Gabim gjatë heqjes së file objektiv: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Lëvizja midis objekteve mount nuk suportohet"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Vlera e atributit duhet të jetë jo-NULL"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Lloj i pasaktë atributi (pritej string)"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Emër i pavlefshëm atributi të zgjeruar"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Gabim gjatë caktimit të atributit të zgjeruar '%s': %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "E pamundur kryerja e stat të file '%s': %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (kodifikim i pavlefshëm)"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Gabim gjatë kryerjes së stat të përshkruesit të file: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Lloj i pasaktë atributi (pritej uint32)"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Lloj i pasaktë atributi (pritej uint64)"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Lloj i pasaktë atributi (pritej byte string)"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Gabim gjatë caktimit të së drejtave: %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Gabim gjatë caktimit të pronarit: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink duhet të jetë jo-NULL"
+
+# (pofilter) variables: translation contains variables not in original: %d
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Gabim gjatë caktimit të symlink: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Gabim gjatë caktimit të symlink: file nuk është një lidhje simbolike"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Konteksti SELinux duhet të jetë non-NULL"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Gabim gjatë përcaktimit të kontekstit SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux nuk është aktivizuar në këtë sistem"
+
+# (pofilter) variables: do not translate: %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Caktimi i atributit %s nuk suportohet"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Gabim gjatë leximit nga file: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Gabim gjatë pikëvendosjes në brendësi të file: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Gabim gjatë mbylljes së file: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "E pamundur gjetja e llojit të monitorit të paracaktuar për file lokalë"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Gabim gjatë shkrimit tek file: %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Gabim gjatë heqjes së lidhjes së vjetër të backup: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Gabim gjatë krijimit të kopjes së backup: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Gabim gjatë riemërtimit të përkohshëm të file: %s"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Gabim gjatë ndarjes së file: %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Gabim gjatë hapjes së file '%s': %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "File objektiv është një directory"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "File objektiv nuk është një file i rregullt"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "File është ndryshuar nga jashtë"
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Gabim gjatë fshirjes së file: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Dhënë GSeekType i pavlefshëm"
+
+# (pofilter) variables: translation contains variables not in original: %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) printf: checks whether printf format strings match
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Kërkesë pikëvendosje e pavlefshme"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "E pamundur ndërprerja e GMemoryInputStream"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "U arrit kufiri maksimum i array të së dhënave"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Stream output memorje të papërmasueshme"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Ripërmasimi i stream të output të memories dështoi"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "objekti mount nuk suporton zmontimin"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "objekti mount nuk suporton nxjerrjen jashtë"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "objekti mount nuk suporton rimontimin"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "objekti mount nuk suporton mbivendosjen e llojit të përmbajtjes"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"objekti mount nuk suporton mbivendosjen sinkrone të llojit të përmbajtjes"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Stream i output nuk suporton shkrimin"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Stream burues është i mbyllur"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "emri"
+
+# (pofilter) variables: translation contains variables not in original: %s
+# (pofilter) simplecaps: checks the capitalisation of two strings isn't wildly different
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) printf: checks whether printf format strings match
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Emri i ikonës"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "emrat"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Një array me emrat e ikonave"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "përdor alternativat e paracaktuara"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Tregon nëse duhen përdorur ikonat alternative të paracaktuara gjetur duke "
+"shkurtuar emrin tek simbolet '-'. Shpërfill emrat mbas emrit të parë në rast "
+"se jepen më shumë se një."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Gabim gjatë kryerjes së stat të përshkruesit të file: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+# (pofilter) variables: translation contains variables not in original: %s, %s
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) singlequoting: checks whether singlequoting is consistent between the two strings
+# (pofilter) printf: checks whether printf format strings match
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Gabim gjatë leximit nga unix: %s"
+
+# (pofilter) variables: translation contains variables not in original: %d
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) printf: checks whether printf format strings match
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Gabim duke mbyllur unix: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "File rrënjë i sistemit"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Gabim gjatë shkrimit në unix: %s"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volumi nuk suporton nxjerrjen jashtë"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "E pamundur gjetja e aplikativit"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Gabim gjatë nisjes së aplikativit: %s"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI nuk suportohen"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "ndryshimi i shoqërimeve nuk suportohet në win32"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Krijimi i shoqërimeve nuk suportohet në win32"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "mos fshih zërat"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "përdor një format liste të gjatë"
+
+# (pofilter) isfuzzy: Check if the unit has been marked fuzzy.
+# (pofilter) acronyms: acronyms should not be translated: FILE
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+# (pofilter) untranslated: checks whether a string has been translated at all
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u byte"
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..662e85d
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,1886 @@
+# Serbian translation of glib
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004, 2005, 2006, 2007.
+#
+# This file is distributed under the same license as the glib package.
+#
+# Maintainer: Данило Шеган <dsegan@gmx.net>
+# Reviewed on 2004-02-01 by: Данило Шеган <danilo@gnome.org>
+# Reviewed on 2005-07-08 by: Данило Шеган <danilo@gnome.org>
+# Translated on 2006-01-31 by Слободан Д. Средојевић <slobo@akrep.be>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2007-09-06 21:11+0100\n"
+"Last-Translator: Горан Ракић <grakic@devbase.net>\n"
+"Language-Team: Serbian (sr) <gnom@prevod.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Неочекивано својство „%s“ елемента „%s“"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Својство „%s“ елемента „%s“ није пронађено"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Неочекивана ознака „%s“, очекивано је „%s“"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Неочекивана ознака „%s“ унутар „%s“"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Не могу да нађем исправну датотеку са обележивачима међу фасциклама са "
+"подацима"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Обележивач ка „%s“ већ постоји"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Није пронађен обележивач ка „%s“"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "У обележивачу ка „%s“ није одређен МИМЕ тип"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "У обележивачу ка „%s“ није одређена приватна заставица"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "У обележивачу ка „%s“ нису одређене групе"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Програм „%s“ није регистровао обележивач ка „%s“"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Не могу да проширим комадну линију „%s“ са везом ка „%s“"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Претварање из скупа знакова „%s“ у „%s“ није подржано"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не могу да покренем претварање из „%s“ у „%s“"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Неисправан низ бајтова у улазу који претварам"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Грешка при претварању: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Непотпун низ знакова на крају улаза"
+
+# ово претпостављам да се односи на делимичан УТФ8 запис
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Не може претворити резерву „%s“ у запис „%s“"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Адреса „%s“ није апсолутна адреса помоћу „file“ шеме"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Адреса локалне датотеке „%s“ не сме садржати „#“"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Адреса „%s“ је неисправна"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Име домаћина из адресе „%s“ је неисправно"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Адреса „%s“ садржи неисправно назначене знаке"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Путања „%s“ није апсолутна путања"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Неисправно име домаћина"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+# bug: plural-forms
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Не могу да обезбедим %lu бајтова за читање датотеке „%s“"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Не могу да прочитам из датотеке „%s“: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Не могу да отворим датотеку „%s“: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Не могу да сазнам особине датотеке „%s“: неуспешан fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспешан fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Не могу да преименујем датотеку „%s“ у „%s“: неуспешан g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“ ради уписа: неуспешан fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Не могу да упишем датотеку „%s“: неуспешан fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Не могу да упишем датотеку „%s“: неуспешан fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Не могу да упишем датотеку „%s“: неуспешан fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Не могу да затворим датотеку „%s“: неуспешан fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Постојећа датотека „%s“ се не може уклонити: неуспешан g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Неисправан шаблон „%s“, не сме садржати „%s“"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Шаблон „%s“ не садржи XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Не могу да прочитам симболичку везу „%s“: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не могу да покренем претварање из „%s“ у „%s“: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Не могу да читам без обраде у g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Преостали непретворени подаци у баферу за читање"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Канал се завршава делимичним знаком"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Не могу да читам без обраде у g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспешан open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Не могу да мапирам датотеку „%s“: неуспешан mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Грешка у %d. реду, %d. знак: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Грешка у %d. реду: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Уочен празан ентитет „&;“; прихватљиви ентитети су &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Име ентитета не може почети знаком „%s“ ; знак & започиње ентитет; ако овај "
+"знак не означава ентитет, истакните га помоћу &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Знак „%s“ није дозвољен у имену ентитета"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Ентитет „%s“ није познат"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Ентитет се не завршава тачка-запетом; највероватније сте користили амперсанд "
+"без намере да започнете ентитет — назначите амперсанд са &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Нисам успео да рашчланим „%-.*s“, што је требало да представља цифру унутар "
+"знаковне референце (на пример &#234;) — можда је цифра превелика"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Знаковна референца „%-.*s“ не представља дозвољени знак"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Празна знаковна референца; мора да садржи цифру као на пример &#747;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Знаковна референца се не завршава тачка-запетом; највероватније сте "
+"користили амперсанд без намере да започнете ентитет — назначите амперсанд са "
+"&amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Недовршена референца ентитета"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Недовршена знаковна референца"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Неисправан текст у УТФ-8 запису – предугачка секвенца"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Неисправан текст у УТФ-8 запису — карактер није почетни"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Неисправан текст у УТФ-8 запису — „%s“ није исправно"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Документ мора почети елементом (нпр. <књига>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s“ не представља исправан знак након знака „<“; име елемента не може њиме "
+"почети"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Чудан знак „%s“, а очекивао сам „>“ знак ради окончања почетне ознаке "
+"елемента „%s“"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Чудан знак „%s“, очекивао сам „=“ после имена атрибута „%s“ елемента „%s“"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Чудан знак „%s“, очекивао сам или „>“ или „/“ ради окончања почетне ознаке "
+"елемента „%s“, или можда атрибут; можда сте користили неисправан знак у "
+"имену атрибута"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Чудан знак „%s“, очекивао сам почетни наводник након знака једнакости при "
+"додели вредности атрибута  „%s“ елемента „%s“"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s“ није исправан знак након низа „</“; „%s“ не може започети име елемента"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s“ није исправан знак након имена затвореног елемента „%s“; дозвољени знак "
+"је „>“"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Елемент „%s“ је затворен, нема тренутно отворених елемената"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Елемент „%s“ је затворен, а тренутно отворен елемент је „%s“"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Документ је празан или садржи само белине"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Документ завршен неочекивано непосредно након отворене косоугле заграде „<“"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Документ завршен неочекивано са отвореним елементима — „%s“ је последње "
+"отворен елемент"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Документ завршен неочекивано, очекивао сам да наиђем на затворену косоуглу "
+"заграду која затвара ознаку <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Документ завршен неочекивано усред имена елемента"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Документ завршен неочекивано усред имена атрибута"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Документ завршен неочекивано усред почетне ознаке елемента."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Документ завршен неочекивано након знака једнакости после имена атрибута; "
+"вредност атрибута није наведена"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Документ завршен неочекивано усред вредности атрибута"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Документ завршен неочекивано усред завршне ознаке елемента „%s“"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Документ завршен неочекивано усред примедбе или упута за обраду"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "оштећен објекат"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "интерна грешка или оштећен објекат"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "нема меморије"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "достигнут је лимит претраживања уназад"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "образац садржи ставке које нису подржане за делимично поклапање"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "интерна грешка"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"референце на претходно поклапање не могу бити услов за делимично поклапање"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "достигнут је лимит рекурзије"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "достигнут је лимит броја празних подниски карактера"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "неисправна комбинација ознака за нову линију"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "непозната грешка"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Канал се завршава делимичним знаком"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Неисправан низ бајтова у улазу који претварам"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Недовршена знаковна референца"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Недовршена знаковна референца"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Недовршена знаковна референца"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Грешка приликом претраживања регуларним изразом %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "ПЦРЕ библиотека је преведена без подршка за УТФ8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "ПЦРЕ библиотека је преведена без подршке за УТФ8 особине"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Грешка при превођењу регуларног израза %s код знака %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Грешка при оптимизовању регуларног израза %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "очекивана је хексадекадна цифра или „}“"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "очекивана је хексадекадна цифра"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "недостаје „<“ у референци симбола"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "Недовршена референца симбола"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "референца симбола је дужине нула"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "очекивана је цифра"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "неисправна референца симбола"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "одлутало завршно „\\“"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "непозната секвенца избегавања"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Грешка приликом обраде текста за замену „%s“ код карактера %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Навод не почиње наводником"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Неупарен наводник у наредби или другом цитату из љуске"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Садржај завршен непосредно након „\\“ знака. (Ради се о тексту „%s“)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Садржај завршен пре наиласка на одговарајући наводник за %c. (Ради се о "
+"тексту „%s“)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Садржај празан (или садржи само белине)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Неуспело читање података из потпроцеса"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Неуспело стварање цевке за везу са потпроцесом (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Неуспело читање из подређене цевке (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Неуспело приступање директоријуму „%s“ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Неуспело извршавање потпроцеса (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Неисправно име програма: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Неисправна ниска — члан вектора у %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Неисправна ниска у окружењу: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Неисправна радна фасцикла: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Неуспело извршавање помоћног програма (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Неочекивана грешка док су у g_io_channel_win32_poll() читани подаци из "
+"потпроцеса"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Неуспело читање података од потпроцеса (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Неочекивана грешка у select() при читању података из потпроцеса (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Неочекивана грешка у waitpid() (%s)"
+
+# за сада овако, можда гранање, умножавање? виљушкање ;-)
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Неуспео fork() (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Неуспело извршавање потпроцеса „%s“ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Неуспело преусмеравање улаза или излаза потпроцеса (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Неуспео fork() потпроцеса (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Непозната грешка при извршавању потпроцеса „%s“"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Није успео да прочита довољно података из цевке ка потпроцесу (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Знак ван опсега за УТФ-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Неисправан низ у уносу за претварање"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Знак ван опсега за УТФ-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Употреба:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ОПЦИЈА...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Помоћне опције:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Прикажи опције за помоћ"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Прикажи све опције за помоћ"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Опције програма:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Не могу да рашланим целобројну вредност „%s“ за %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Целобројна вредност „%s“ за %s је изван опсега"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Не могу да рашланим реалну вредност двоструке тачности „%s“ за %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Реална вредност двоструке тачности „%s“ за %s је изван опсега"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Грешка при рашчлањивању могућности %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Недостаје аргумент за %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Непозната опција %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Не могу да нађем исправну датотеку са кључевима међу директоријумима претраге"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Није обична датотека"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Датотека је празна"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Датотека са кључевима садржи ред „%s“ што не чини пар кључ-вредност, групу "
+"или примедбу"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Неисправно име групе: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Датотека са кључевима не почиње групом"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Неисправно име кључа: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Датотека са кључевима садржи неподржано кодирање „%s“"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Датотека са кључевима нема групу „%s“"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Датотека са кључевима нема кључ „%s“"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Датотека са кључевима садржи кључ „%s“ вредности „%s“ што није УТФ-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Датотека са кључевима садржи кључ „%s“ неразумљиве вредности."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Датотека са кључевима садржи кључ „%s“ у групи „%s“ неразумљиве вредности."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Датотека са кључевима не садржи кључ „%s“ у групи „%s“"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Датотека са кључевима садржи знак истицања на крају реда"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Датотека са кључевима садржи недозвољен низ истицања „%s“"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Вредност „%s“ се не може сматрати бројем."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Целобројна вредност „%s“ је изван опсега"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Вредност „%s“ се не може сматрати реалним бројем једноструке тачности."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Вредност „%s“ се не може сматрати истинитосном."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "непозната грешка"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Симболичке везе нису подржане"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "Програм „%s“ није регистровао обележивач ка „%s“"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Име домаћина из адресе „%s“ је неисправно"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Неисправно име кључа: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Неисправно име домаћина"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Грешка при рашчлањивању могућности %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Документ завршен неочекивано усред имена атрибута"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Грешка у %d. реду: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Грешка при рашчлањивању могућности %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Није обична датотека"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Неисправно име кључа: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Име домаћина из адресе „%s“ је неисправно"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Грешка у %d. реду: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Грешка при рашчлањивању могућности %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Грешка при рашчлањивању могућности %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[ОПЦИЈА...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Грешка при рашчлањивању могућности %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Не могу да променим овлашћења датотеке: неуспешан fork(): %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Не могу да променим овлашћења датотеке: неуспешан waitpid(): %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Не могу да променим овлашћења датотеке: неуспешан chmod(): %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "Не могу да променим овлашћења датотеке: потпроцес окончан сигналом: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Не могу да променим овлашћења датотеке: потпроцес силом окончан"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Није подржано претварање из скупа знакова „%s“ у скуп „%s“"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Неисправна величина поруке"
+
+#~ msgid "Socket error"
+#~ msgstr "Мрежна грешка"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "Неподржана подешавања канала"
diff --git a/po/sr@ije.po b/po/sr@ije.po
new file mode 100644
index 0000000..81efaac
--- /dev/null
+++ b/po/sr@ije.po
@@ -0,0 +1,1874 @@
+# Serbian translation of glib
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004.
+#
+# This file is distributed under the same license as the glib package.
+#
+# Maintainer: Данило Шеган <dsegan@gmx.net>
+# Reviewed on 2004-02-01 by: Данило Шеган
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2004-04-29 01:11+0200\n"
+"Last-Translator: Bojan Suzic <bojans@teol.net>\n"
+"Language-Team: Serbian (sr) <serbiagnome-lista@nongnu.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Чудан знак „%s“, очекивао сам „=“ после особине „%s“ елемента „%s“"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Не могу да прочитам симболичку везу „%s“: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Претварање из скупа знакова „%s“ у „%s“ није подржано"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не могу да покренем претварање из „%s“ у „%s“"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Неисправан низ бајтова у улазу који претварам"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Грешка при претварању: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Непотпун низ знакова на крају улаза"
+
+# ово претпостављам да се односи на делимичан УТФ8 запис
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Не може претворити резерву „%s“ у запис „%s“"
+
+# bug: "file" should be in quotes, if it's about "file:///"
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Адреса „%s“ није апсолутна адреса помоћу „file“ шеме"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Адреса локалне датотеке „%s“ не смије садржати „#“"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Адреса „%s“ је неисправна"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Име домаћина из адресе „%s“ је неисправно"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Адреса „%s“ садржи неисправно назначене знаке"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Путања „%s“ није апсолутна путања"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Неисправно име домаћина"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+# bug: plural-forms
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Не могу да обезбједим %lu бајтова за читање датотеке „%s“"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Не могу да прочитам из датотеке „%s“: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Не могу да отворим датотеку „%s“: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Не могу да сазнам особине датотеке „%s“: неуспјешан fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Неисправан шаблон „%s“, не смије садржати „%s“"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Шаблон „%s“ се не завршава са XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Не могу да прочитам симболичку везу „%s“: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не могу да покренем претварање из „%s“ у „%s“: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Не могу да читам без обраде у g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Преостали непретворени подаци у међуспремнику за читање"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Канал се завршава дјелимичним знаком"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Не могу да читам без обраде у g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Грешка у %d. реду, %d. знак: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Грешка у %d. реду: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Уочен празан ентитет „&;“; прихватљиви ентитети су &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Име ентитета не може почети знаком „%s“ ; знак & започиње ентитет; ако овај "
+"знак не означава ентитет, истакните га помоћу &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Знак „%s“ није дозвољен у имену ентитета"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Ентитет „%s“ није познат"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Ентитет се не завршава тачка-запетом; највјероватније сте користили "
+"амперсанд без намере да започнете ентитет — назначите амперсанд као &amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Нисам успио да рашчланим „%s“, што је требало да представља цифру унутар "
+"позива знака (на пример &#234;) — можда је цифра превелика"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Позив знака „%s“ не стоји за дозвољени знак"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Празан позив знака; морао би садржати цифру као на примјер &#747;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Позив знака се не завршава тачка-запетом; највјероватније сте користили "
+"амперсанд без намере да започнете ентитет — назначите амперсанд као &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Недовршена ознака ентитета"
+
+# позив уместо ознака?
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Недовршен позив знака"
+
+# ознака знака??? неееее
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Неисправан текст у УТФ-8 запису"
+
+# ознака знака??? неееее
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Неисправан текст у УТФ-8 запису"
+
+# ознака знака??? неееее
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Неисправан текст у УТФ-8 запису"
+
+# може и ћирилица: „Уникод ТрансФормација 8“
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Документ мора почети елементом (нпр. <књига>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s“ не представља исправан знак након знака „<“; име елемента не може њиме "
+"почети"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Чудан знак „%s“, а очекивао сам „>“ знак ради окончања почетне ознаке "
+"елемента „%s“"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "Чудан знак „%s“, очекивао сам „=“ после особине „%s“ елемента „%s“"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Чудан знак „%s“, очекивао сам или „>“ или „/“ ради окончања почетне ознаке  "
+"елемента „%s“, или могућу особину; можда сте користили неисправан знак у "
+"имену особине"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Чудан знак „%s“, очекивао сам почетни наводник након знака једнакости при "
+"додјели вриједности особини „%s“ елемента „%s“"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s“ није исправан знак након низа „</“; „%s“ не може започети име елемента"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s“ није исправан знак након имена затвореног елемента „%s“; дозвољени знак "
+"је „>“"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Елемент „%s“ је затворен, нема тренутно отворених елемената"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Елемент „%s“ је затворен, а тренутно отворен елемент је „%s“"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Документ је празан или садржи само бјелине"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Документ завршен неочекивано непосредно након отворене косоугле заграде „<“"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Документ завршен неочекивано са отвореним елементима — „%s“ је последње "
+"отворен елемент"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Документ завршен неочекивано, очекивао сам да наиђем на затворену косоуглу "
+"заграду која затвара ознаку <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Документ завршен неочекивано усред имена елемента"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Документ завршен неочекивано усред имена особине"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Документ завршен неочекивано усред почетне ознаке елемента."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Документ завршен неочекивано након знака једнакости после имена особине; "
+"вриједност особине није наведена"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Документ завршен неочекивано усред вриједности особине"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Документ завршен неочекивано усред завршне ознаке елемента „%s“"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Документ завршен неочекивано усред примедбе или упута за обраду"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Канал се завршава дјелимичним знаком"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Неисправан низ бајтова у улазу који претварам"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+# позив уместо ознака?
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Недовршен позив знака"
+
+# позив уместо ознака?
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Недовршен позив знака"
+
+# позив уместо ознака?
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Недовршен позив знака"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Грешка у %d. реду, %d. знак: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Недовршена ознака ентитета"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Навод не почиње наводником"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Неупарен наводник у наредби или другом цитату из љуске"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Садржај завршен непосредно након „\\“ знака. (Ради се о тексту „%s“)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Садржај завршен прије наиласка на одговарајући наводник за %c. (Ради се о "
+"тексту „%s“)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Садржај празан (или садржи само бјелине)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Неуспјело читање података из подређеног процеса"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Неуспјело стварање цјевке за везу са подређеним процесом (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Неуспјело читање из подређене цјевке (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Неуспјело приступање директоријуму „%s“ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Неуспјело извршавање подређеног процеса (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Неисправно име домаћина"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Неисправан низ у уносу за претварање"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Неуспјело извршавање помоћног програма"
+
+# Овај превод није психолошке природе :)
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Неочекивана грешка док су у g_io_channel_win32_poll() читани подаци од "
+"подређеног процеса"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Неуспјело читање података од подређеног процеса (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Неочекивана грешка у select() при читању података од подређеног процеса (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Неочекивана грешка у waitpid() (%s)"
+
+# за сада овако, можда гранање, умножавање? виљушкање ;-)
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Неуспио fork() (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Неуспјело извршавање подређеног процеса „%s“ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Неуспјело преусмјеравање улаза или излаза подређеног процеса (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Неуспио fork() подређеног процеса (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Непозната грешка при извршавању подређеног процеса „%s“"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Није успио да прочита довољно података из цјевке ка подређеном процесу (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Знак ван опсега за УТФ-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Неисправан низ у уносу за претварање"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Знак ван опсега за УТФ-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Грешка при претварању: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Неисправно име домаћина"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Неисправно име домаћина"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Адреса „%s“ садржи неисправно назначене знаке"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Симболичке везе нису подржане"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Име домаћина из адресе „%s“ је неисправно"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Неисправно име домаћина"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Неисправно име домаћина"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Не могу да направим датотеку „%s“: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Документ завршен неочекивано усред имена особине"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Грешка при отварању директоријума „%s“: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Грешка у %d. реду: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Неисправно име домаћина"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Име домаћина из адресе „%s“ је неисправно"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Грешка при читању датотеке „%s“: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Грешка у %d. реду: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Грешка при претварању: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Симболичке везе нису подржане"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Грешка при претварању: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+# bug: plural-forms
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Не могу да обезбједим %lu бајтова за читање датотеке „%s“"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Не могу да отворим датотеку „%s“: неуспјешан fdopen(): %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Није подржано претварање из скупа знакова „%s“ у скуп „%s“"
diff --git a/po/sr@latin.po b/po/sr@latin.po
new file mode 100644
index 0000000..9d01665
--- /dev/null
+++ b/po/sr@latin.po
@@ -0,0 +1,1887 @@
+# Serbian translation of glib
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004, 2005, 2006, 2007.
+#
+# This file is distributed under the same license as the glib package.
+#
+# Maintainer: Danilo Šegan <dsegan@gmx.net>
+# Reviewed on 2004-02-01 by: Danilo Šegan <danilo@gnome.org>
+# Reviewed on 2005-07-08 by: Danilo Šegan <danilo@gnome.org>
+# Translated on 2006-01-31 by Slobodan D. Sredojević <slobo@akrep.be>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2007-09-06 21:11+0100\n"
+"Last-Translator: Goran Rakić <grakic@devbase.net>\n"
+"Language-Team: Serbian (sr) <gnom@prevod.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Neočekivano svojstvo „%s“ elementa „%s“"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Svojstvo „%s“ elementa „%s“ nije pronađeno"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Neočekivana oznaka „%s“, očekivano je „%s“"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Neočekivana oznaka „%s“ unutar „%s“"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Ne mogu da nađem ispravnu datoteku sa obeleživačima među fasciklama sa "
+"podacima"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Obeleživač ka „%s“ već postoji"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Nije pronađen obeleživač ka „%s“"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "U obeleživaču ka „%s“ nije određen MIME tip"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "U obeleživaču ka „%s“ nije određena privatna zastavica"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "U obeleživaču ka „%s“ nisu određene grupe"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Program „%s“ nije registrovao obeleživač ka „%s“"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Ne mogu da proširim komadnu liniju „%s“ sa vezom ka „%s“"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Pretvaranje iz skupa znakova „%s“ u „%s“ nije podržano"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Ne mogu da pokrenem pretvaranje iz „%s“ u „%s“"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Neispravan niz bajtova u ulazu koji pretvaram"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Greška pri pretvaranju: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Nepotpun niz znakova na kraju ulaza"
+
+# ovo pretpostavljam da se odnosi na delimičan UTF8 zapis
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Ne može pretvoriti rezervu „%s“ u zapis „%s“"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Adresa „%s“ nije apsolutna adresa pomoću „file“ šeme"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Adresa lokalne datoteke „%s“ ne sme sadržati „#“"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Adresa „%s“ je neispravna"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Ime domaćina iz adrese „%s“ je neispravno"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Adresa „%s“ sadrži neispravno naznačene znake"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Putanja „%s“ nije apsolutna putanja"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Neispravno ime domaćina"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Greška pri otvaranju direktorijuma „%s“: %s"
+
+# bug: plural-forms
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Ne mogu da obezbedim %lu bajtova za čitanje datoteke „%s“"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Ne mogu da pročitam iz datoteke „%s“: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Ne mogu da otvorim datoteku „%s“: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Ne mogu da saznam osobine datoteke „%s“: neuspešan fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Ne mogu da otvorim datoteku „%s“: neuspešan fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Ne mogu da preimenujem datoteku „%s“ u „%s“: neuspešan g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Ne mogu da napravim datoteku „%s“: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Ne mogu da otvorim datoteku „%s“ radi upisa: neuspešan fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Ne mogu da upišem datoteku „%s“: neuspešan fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Ne mogu da upišem datoteku „%s“: neuspešan fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Ne mogu da upišem datoteku „%s“: neuspešan fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Ne mogu da zatvorim datoteku „%s“: neuspešan fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Postojeća datoteka „%s“ se ne može ukloniti: neuspešan g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Neispravan šablon „%s“, ne sme sadržati „%s“"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Šablon „%s“ ne sadrži XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Ne mogu da pročitam simboličku vezu „%s“: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Simboličke veze nisu podržane"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Ne mogu da pokrenem pretvaranje iz „%s“ u „%s“: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Ne mogu da čitam bez obrade u g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Preostali nepretvoreni podaci u baferu za čitanje"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal se završava delimičnim znakom"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Ne mogu da čitam bez obrade u g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Ne mogu da otvorim datoteku „%s“: neuspešan open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Ne mogu da mapiram datoteku „%s“: neuspešan mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Greška u %d. redu, %d. znak: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Greška u %d. redu: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Uočen prazan entitet „&;“; prihvatljivi entiteti su &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Ime entiteta ne može početi znakom „%s“ ; znak & započinje entitet; ako ovaj "
+"znak ne označava entitet, istaknite ga pomoću &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Znak „%s“ nije dozvoljen u imenu entiteta"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entitet „%s“ nije poznat"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entitet se ne završava tačka-zapetom; najverovatnije ste koristili ampersand "
+"bez namere da započnete entitet — naznačite ampersand sa &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Nisam uspeo da raščlanim „%-.*s“, što je trebalo da predstavlja cifru unutar "
+"znakovne reference (na primer &#234;) — možda je cifra prevelika"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Znakovna referenca „%-.*s“ ne predstavlja dozvoljeni znak"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Prazna znakovna referenca; mora da sadrži cifru kao na primer &#747;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Znakovna referenca se ne završava tačka-zapetom; najverovatnije ste "
+"koristili ampersand bez namere da započnete entitet — naznačite ampersand sa "
+"&amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Nedovršena referenca entiteta"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Nedovršena znakovna referenca"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Neispravan tekst u UTF-8 zapisu – predugačka sekvenca"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Neispravan tekst u UTF-8 zapisu — karakter nije početni"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Neispravan tekst u UTF-8 zapisu — „%s“ nije ispravno"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokument mora početi elementom (npr. <knjiga>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"„%s“ ne predstavlja ispravan znak nakon znaka „<“; ime elementa ne može "
+"njime početi"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Čudan znak „%s“, a očekivao sam „>“ znak radi okončanja početne oznake "
+"elementa „%s“"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Čudan znak „%s“, očekivao sam „=“ posle imena atributa „%s“ elementa „%s“"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Čudan znak „%s“, očekivao sam ili „>“ ili „/“ radi okončanja početne oznake "
+"elementa „%s“, ili možda atribut; možda ste koristili neispravan znak u "
+"imenu atributa"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Čudan znak „%s“, očekivao sam početni navodnik nakon znaka jednakosti pri "
+"dodeli vrednosti atributa  „%s“ elementa „%s“"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"„%s“ nije ispravan znak nakon niza „</“; „%s“ ne može započeti ime elementa"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"„%s“ nije ispravan znak nakon imena zatvorenog elementa „%s“; dozvoljeni "
+"znak je „>“"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Element „%s“ je zatvoren, nema trenutno otvorenih elemenata"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Element „%s“ je zatvoren, a trenutno otvoren element je „%s“"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokument je prazan ili sadrži samo beline"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Dokument završen neočekivano neposredno nakon otvorene kosougle zagrade „<“"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokument završen neočekivano sa otvorenim elementima — „%s“ je poslednje "
+"otvoren element"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokument završen neočekivano, očekivao sam da naiđem na zatvorenu kosouglu "
+"zagradu koja zatvara oznaku <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokument završen neočekivano usred imena elementa"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokument završen neočekivano usred imena atributa"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokument završen neočekivano usred početne oznake elementa."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokument završen neočekivano nakon znaka jednakosti posle imena atributa; "
+"vrednost atributa nije navedena"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokument završen neočekivano usred vrednosti atributa"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Dokument završen neočekivano usred završne oznake elementa „%s“"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Dokument završen neočekivano usred primedbe ili uputa za obradu"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "oštećen objekat"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "interna greška ili oštećen objekat"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "nema memorije"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "dostignut je limit pretraživanja unazad"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "obrazac sadrži stavke koje nisu podržane za delimično poklapanje"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "interna greška"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"reference na prethodno poklapanje ne mogu biti uslov za delimično poklapanje"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "dostignut je limit rekurzije"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "dostignut je limit broja praznih podniski karaktera"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "neispravna kombinacija oznaka za novu liniju"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "nepoznata greška"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Kanal se završava delimičnim znakom"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Neispravan niz bajtova u ulazu koji pretvaram"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Nedovršena znakovna referenca"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Nedovršena znakovna referenca"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Nedovršena znakovna referenca"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Simboličke veze nisu podržane"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Greška prilikom pretraživanja regularnim izrazom %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE biblioteka je prevedena bez podrška za UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE biblioteka je prevedena bez podrške za UTF8 osobine"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Greška pri prevođenju regularnog izraza %s kod znaka %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Greška pri optimizovanju regularnog izraza %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "očekivana je heksadekadna cifra ili „}“"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "očekivana je heksadekadna cifra"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "nedostaje „<“ u referenci simbola"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "Nedovršena referenca simbola"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "referenca simbola je dužine nula"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "očekivana je cifra"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "neispravna referenca simbola"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "odlutalo završno „\\“"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "nepoznata sekvenca izbegavanja"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Greška prilikom obrade teksta za zamenu „%s“ kod karaktera %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Navod ne počinje navodnikom"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Neuparen navodnik u naredbi ili drugom citatu iz ljuske"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Sadržaj završen neposredno nakon „\\“ znaka. (Radi se o tekstu „%s“)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Sadržaj završen pre nailaska na odgovarajući navodnik za %c. (Radi se o "
+"tekstu „%s“)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Sadržaj prazan (ili sadrži samo beline)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Neuspelo čitanje podataka iz potprocesa"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Neuspelo stvaranje cevke za vezu sa potprocesom (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Neuspelo čitanje iz podređene cevke (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Neuspelo pristupanje direktorijumu „%s“ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Neuspelo izvršavanje potprocesa (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Neispravno ime programa: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Neispravna niska — član vektora u %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Neispravna niska u okruženju: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Neispravna radna fascikla: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Neuspelo izvršavanje pomoćnog programa (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Neočekivana greška dok su u g_io_channel_win32_poll() čitani podaci iz "
+"potprocesa"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Neuspelo čitanje podataka od potprocesa (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Neočekivana greška u select() pri čitanju podataka iz potprocesa (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Neočekivana greška u waitpid() (%s)"
+
+# za sada ovako, možda grananje, umnožavanje? viljuškanje ;-)
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Neuspeo fork() (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Neuspelo izvršavanje potprocesa „%s“ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Neuspelo preusmeravanje ulaza ili izlaza potprocesa (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Neuspeo fork() potprocesa (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Nepoznata greška pri izvršavanju potprocesa „%s“"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Nije uspeo da pročita dovoljno podataka iz cevke ka potprocesu (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Znak van opsega za UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Neispravan niz u unosu za pretvaranje"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Znak van opsega za UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Upotreba:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPCIJA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Pomoćne opcije:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Prikaži opcije za pomoć"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Prikaži sve opcije za pomoć"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Opcije programa:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Ne mogu da rašlanim celobrojnu vrednost „%s“ za %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Celobrojna vrednost „%s“ za %s je izvan opsega"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Ne mogu da rašlanim realnu vrednost dvostruke tačnosti „%s“ za %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Realna vrednost dvostruke tačnosti „%s“ za %s je izvan opsega"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Greška pri raščlanjivanju mogućnosti %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Nedostaje argument za %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Nepoznata opcija %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Ne mogu da nađem ispravnu datoteku sa ključevima među direktorijumima "
+"pretrage"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Nije obična datoteka"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Datoteka je prazna"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Datoteka sa ključevima sadrži red „%s“ što ne čini par ključ-vrednost, grupu "
+"ili primedbu"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Neispravno ime grupe: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Datoteka sa ključevima ne počinje grupom"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Neispravno ime ključa: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Datoteka sa ključevima sadrži nepodržano kodiranje „%s“"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Datoteka sa ključevima nema grupu „%s“"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Datoteka sa ključevima nema ključ „%s“"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Datoteka sa ključevima sadrži ključ „%s“ vrednosti „%s“ što nije UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Datoteka sa ključevima sadrži ključ „%s“ nerazumljive vrednosti."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Datoteka sa ključevima sadrži ključ „%s“ u grupi „%s“ nerazumljive vrednosti."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Datoteka sa ključevima ne sadrži ključ „%s“ u grupi „%s“"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Datoteka sa ključevima sadrži znak isticanja na kraju reda"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Datoteka sa ključevima sadrži nedozvoljen niz isticanja „%s“"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Vrednost „%s“ se ne može smatrati brojem."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Celobrojna vrednost „%s“ je izvan opsega"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Vrednost „%s“ se ne može smatrati realnim brojem jednostruke tačnosti."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Vrednost „%s“ se ne može smatrati istinitosnom."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "nepoznata greška"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Simboličke veze nisu podržane"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Simboličke veze nisu podržane"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+#, fuzzy
+msgid "No application is registered as handling this file"
+msgstr "Program „%s“ nije registrovao obeleživač ka „%s“"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Ime domaćina iz adrese „%s“ je neispravno"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Neispravno ime ključa: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Neispravno ime domaćina"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Ne mogu da napravim datoteku „%s“: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Ne mogu da napravim datoteku „%s“: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Ne mogu da napravim datoteku „%s“: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Greška pri otvaranju direktorijuma „%s“: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Greška pri raščlanjivanju mogućnosti %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Dokument završen neočekivano usred imena atributa"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Greška pri otvaranju direktorijuma „%s“: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Greška pri pretvaranju: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Greška pri pretvaranju: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Greška u %d. redu: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Greška pri pretvaranju: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Simboličke veze nisu podržane"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Greška pri raščlanjivanju mogućnosti %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Nije obična datoteka"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Neispravno ime ključa: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Ime domaćina iz adrese „%s“ je neispravno"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Greška pri čitanju datoteke „%s“: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Greška u %d. redu: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Greška pri raščlanjivanju mogućnosti %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Greška pri raščlanjivanju mogućnosti %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Simboličke veze nisu podržane"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPCIJA...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Greška pri raščlanjivanju mogućnosti %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Ne mogu da promenim ovlašćenja datoteke: neuspešan fork(): %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Ne mogu da promenim ovlašćenja datoteke: neuspešan waitpid(): %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Ne mogu da promenim ovlašćenja datoteke: neuspešan chmod(): %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "Ne mogu da promenim ovlašćenja datoteke: potproces okončan signalom: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Ne mogu da promenim ovlašćenja datoteke: potproces silom okončan"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Nije podržano pretvaranje iz skupa znakova „%s“ u skup „%s“"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Neispravna veličina poruke"
+
+#~ msgid "Socket error"
+#~ msgstr "Mrežna greška"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "Nepodržana podešavanja kanala"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..1e252b4
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,1925 @@
+# Swedish messages for glib.
+# Copyright (C) 2001-2009 Free Software Foundation, Inc.
+# Christian Rose <menthos@menthos.com>, 2001, 2002, 2003, 2004, 2005.
+# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-16 20:02+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Oväntat attribut \"%s\" för elementet \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Attributet \"%s\" för elementet \"%s\" hittades inte"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Oväntad tagg \"%s\"\", taggen \"%s\" förväntades"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Oväntad tagg \"%s\" inom \"%s\""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Ingen giltig bokmärkesfil hittades i datakataloger"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Ett bokmärke för uri \"%s\" finns redan"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Inget bokmärke hittades för uri \"%s\""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Ingen Mime-typ definierad i bokmärket för uri \"%s\""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Ingen privat flagga har definierats i bokmärket för uri \"%s\""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Inga grupper inställda i bokmärket för uri \"%s\""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Inget program med namnet \"%s\" registrerade ett bokmärke för \"%s\""
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Misslyckades med att expandera exec-raden \"%s\" med URI \"%s\""
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Konvertering från teckentabellen \"%s\" till \"%s\" stöds inte"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Kunde inte öppna konverteraren från \"%s\" till \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ogiltig bytesekvens i konverteringsindata"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Fel vid konvertering: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Ofullständig teckensekvens vid slutet av indata"
+
+# fallback syftar på en sträng
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Kan inte konvertera reservsträngen \"%s\" till kodningen \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI:n \"%s\" är ingen absolut URI som använder \"file\"-schemat"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Lokala fil-URI:n \"%s\" får inte innehålla en \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI:n \"%s\" är ogiltig"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Värdnamnet i URI:n \"%s\" är ogiltigt"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI:n \"%s\" innehåller ogiltigt kodade tecken"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Sökvägen \"%s\" är ingen absolut sökväg"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Ogiltigt värdnamn"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Fel vid öppning av katalogen \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Kunde inte allokera %lu byte för att läsa filen \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Fel vid läsning av filen \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Filen \"%s\" är för stor"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Misslyckades med att läsa från filen \"%s\": %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Misslyckades med att öppna filen \"%s\": %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Misslyckades med att få tag på attributen på filen \"%s\": fstat() "
+"misslyckades: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Misslyckades med att öppna filen \"%s\": fdopen() misslyckades: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Misslyckades med att byta namn på filen \"%s\" till \"%s\": g_rename() "
+"misslyckades: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Misslyckades med att skapa filen \"%s\": %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Misslyckades med att öppna filen \"%s\" för skrivning: fdopen() "
+"misslyckades: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Misslyckades med att skriva filen \"%s\": fwrite() misslyckades: %s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Misslyckades med att skriva filen \"%s\": fflush() misslyckades: %s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Misslyckades med att skriva filen \"%s\": fsync() misslyckades: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Misslyckades med att stänga filen \"%s\": fclose() misslyckades: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+"Befintliga filen \"%s\" kunde inte tas bort: g_unlink() misslyckades: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Mallen \"%s\" är ogiltig, den får inte innehålla ett \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Mallen \"%s\" innehåller inte XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Misslyckades med att läsa den symboliska länken \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Symboliska länkar stöds inte"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Kunde inte öppna konverteraren från \"%s\" till \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Kan inte göra en rå läsning i g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Överbliven okonverterad data i läsbufferten"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanalen slutar med ett ofullständigt tecken"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Kan inte göra en rå läsning i g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Misslyckades med att öppna filen \"%s\": open() misslyckades: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Misslyckades med att mappa filen \"%s\": mmap() misslyckades: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Fel på rad %d tecken %d:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Fel på rad %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Tom entitet \"&;\" hittades, giltiga entiteter är: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Tecknet \"%s\" är inte giltigt i början på ett entitetsnamn; tecknet & "
+"inleder en entitet. Om detta &-tecken inte ska vara en entitet måste du "
+"skriva om det som &amp;."
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Tecknet \"%s\" är inte giltigt inuti ett entitetsnamn"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Entitetsnamnet \"%s\" är okänt"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Entiteten slutade inte med ett semikolon. Troligtvis använde du ett &-tecken "
+"utan att avse att starta en entitet. Skriv om &-tecknet som &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Misslyckades med att tolka \"%-.*s\", som skulle ha varit ett tal inuti en "
+"teckenreferens (&#234; till exempel). Talet är kanske för stort"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Teckenreferensen \"%-.*s\" kodar inte ett tillåtet tecken"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tom teckenreferens, måste innehålla ett tal som exempelvis &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Teckenreferensen slutade inte med ett semikolon. Troligtvis använde du ett &-"
+"tecken utan att avse att starta en entitet. Skriv om &-tecknet som &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Oavslutad entitetsreferens"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Oavslutad teckenreferens"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Ogiltigt UTF-8-kodad text - för lång sekvens"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Ogiltigt UTF-8-kodad text - inte ett starttecken"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Ogiltigt UTF-8-kodad text - inte giltig \"%s\""
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Dokumentet måste börja med ett element (exempelvis <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"\"%s\" är inte ett giltigt tecken efter ett \"<\"-tecken. Det får inte "
+"inleda ett elementnamn"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Konstigt tecken \"%s\", ett \">\"-tecken förväntades för att avsluta taggen "
+"empty-element \"%s\""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Konstigt tecken \"%s\", ett \"=\" förväntades efter attributnamnet \"%s\" "
+"till elementet \"%s\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Konstigt tecken \"%s\", ett \">\"- eller \"/\"-tecken förväntades för att "
+"avsluta starttaggen för elementet \"%s\", eller möjligtvis ett attribut. Du "
+"kanske använde ett ogiltigt tecken i ett attributnamn"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Konstigt tecken \"%s\", ett startcitationstecken förväntades efter "
+"likhetstecknet när värdet av attributet \"%s\" till elementet \"%s\" "
+"tilldelades"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"\"%s\" är inte ett giltigt tecken efter tecknen \"</\". \"%s\" får inte "
+"inleda ett elementnamn"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"\"%s\" är inte ett giltigt tecken efter stängelementnamnet \"%s\". Det "
+"tillåtna tecknet är \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Elementet \"%s\" stängdes, inget element är öppet för tillfället"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Elementet \"%s\" stängdes, men det element som är öppet för tillfället är \"%"
+"s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Dokumentet var tomt eller innehöll endast tomrum"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Dokumentet tog oväntat slut efter ett öppningsklammer \"<\""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Dokumentet tog oväntat slut då element fortfarande var öppna. \"%s\" var det "
+"senast öppnade elementet"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Dokumentet tog oväntat slut, en stängningsklammer föräntades för att avsluta "
+"taggen <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Dokumentet tog oväntat slut inuti ett elementnamn"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Dokumentet tog oväntat slut inuti ett attributnamn"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Dokumentet tog oväntat slut inuti en elementöppnande tagg."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Dokumentet tog oväntat slut efter likhetstecknet som följde ett "
+"attributnamn. Inget attributvärde"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Dokumentet tog oväntat slut inuti ett attributvärde"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Dokumentet tog oväntat slut inuti stängningstaggen för elementet \"%s\""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Dokumentet tog oväntat slut inuti en kommentar eller behandlingsinstruktion"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "skadat objekt"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "internt fel eller skadat objekt"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "slut på minne"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "bakåtspårningsgräns nådd"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "mönstret innehåller objekt som inte stöds för delvis matchning"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "internt fel"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "bakreferenser som villkor stöds inte för delvis matchning"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "rekursionsgräns nådd"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "arbetsytans gräns för tomma understrängar nådd"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ogiltig kombination av nyradsflaggor"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "okänt fel"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ på slutet av mönster"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c på slutet av mönster"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "okänt tecken efter \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "skiftlägesändrade escape-tecken (\\l, \\L, \\u, \\U) tillåts inte här"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "tal är inte i ordning i {}-kvantifierare"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "tal för stort i {}-kvantifierare"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "saknar avslutande ] för teckenklass"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "ogiltig escape-sekvens i teckenklass"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "intervall är inte i ordning i teckenklass"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ingenting att upprepa"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "okänt tecken efter (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "okänt tecken efter (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "okänt tecken efter (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX-namngivna klasser stöds endast inom en klass"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "saknar avslutande )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") utan öppnande ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R eller (?[+-]siffror måste efterföljas av )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "referens till icke-existerande undermönster"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "saknar ) efter kommentar"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "reguljärt uttryck för stort"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "misslyckades med att få minne"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind-assertion är inte av fast längd"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "felformulerat tal eller namn efter (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "villkorsgrupp innehåller fler än två grenar"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "assertion förväntades efter (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "okänt POSIX-klassnamn"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX-sorteringselement stöds inte"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "teckenvärde i \\x{...}-sekvens är för stort"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "ogiltigt tillstånd (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C tillåts inte i lookbehind-assertion"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "rekursivt anrop kan gå in i en oändlig slinga"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "saknar avslutstecken i undermönstrets namn"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "två namngivna undermönster har samma namn"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "felformulerad \\P eller \\p-sekvens"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "okänt egenskapsnamn efter \\P eller \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "undermönstrets namn är för långt (maximalt 32 tecken)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "för många namngivna undermönster (maximalt 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "oktalt värde är större än \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE-grupp innehåller fler än en gren"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "upprepning av en DEFINE-grupp tillåts inte"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "inkonsistenta NEWLINE-flaggor"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g följs inte av ett namn inom klamrar eller ett valfri (icke-noll) tal "
+"inom klamrar"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "oväntad upprepning"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "överflöde i kod"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "fyllde över kompileringsutrymme"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "tidigare kontrollerad refererande undermönster hittades inte"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Fel vid matchning av reguljära uttrycket %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE-biblioteket är byggt utan stöd för UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE-biblioteket är byggt utan stöd för UTF8-egenskaper"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Fel vid kompilering av reguljära uttrycket %s vid tecknet %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Fel vid optimering av reguljära uttrycket %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "hexadecimal siffra eller \"}\" förväntades"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "hexadecimal siffra förväntades"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "saknar \"<\" i symbolisk referens"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "oavslutad symbolisk referens"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "symbolisk referens med noll-längd"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "siffra förväntades"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "otillåten symbolisk referens"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "felplacerad avslutande \"\\\""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "okänd escape-sekvens"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Fel vid tolkning av ersättningstexten \"%s\" vid tecknet %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Citerad text börjar inte med citationstecken"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Ensamt citationstecken på kommandoraden eller annan skalciterad text"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Texten slutade efter ett \"\\\"-tecken (texten var \"%s\")."
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Texten slutade innan matchande citationstecken hittades för %c (texten var "
+"\"%s\")."
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Texten var tom (eller innehöll bara tomrum)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Misslyckades med att läsa data från barnprocessen"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Misslyckades med att skapa rör för kommunikation med barnprocess (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Misslyckades med att läsa från rör till barn (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Misslyckades med att byta till katalogen \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Misslyckades med att köra barnprocess (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Ogiltigt programnamn: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Ogiltig sträng i argumentvektorn vid %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ogiltig sträng i miljön: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Ogiltig arbetskatalog: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Misslyckades med att köra hjälparprogram (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Oväntat fel i g_io_channel_win32_poll() vid inläsning av data från en "
+"barnprocess"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Misslyckades med att läsa data från barnprocess (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Oväntat fel i select() vid läsning av data från en barnprocess (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Oväntat fel i waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Misslyckades med att grena (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Misslyckades med att köra barnprocessen \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"Misslyckades med att dirigera om utdata eller indata från barnprocess (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Misslyckades med att skapa barnprocess (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Okänt fel vid körning av barnprocessen \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Misslyckades med att läsa tillräckligt med data från röret till barnets pid "
+"(%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Tecknet är utanför intervallet för UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ogiltig sekvens i konverteringsindata"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Tecknet är utanför intervallet för UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Användning:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[FLAGGA...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Hjälpflaggor:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Visa hjälpflaggor"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Visa alla hjälpflaggor"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Programflaggor:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Kan inte tolka heltalsvärdet \"%s\" för %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Heltalsvärdet \"%s\" för %s är utanför intervallet"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Kan inte tolka dubbelvärdet \"%s\" för %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Dubbelvärdet \"%s\" för %s är utanför intervallet"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Fel vid tolkning av flaggan %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Argument saknas för %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Okänd flagga %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Giltig nyckelfil kunde inte hittas i sökkatalogerna"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Inte en vanlig fil"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Filen är tom"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Nyckelfilen innehåller raden \"%s\" som inte är ett nyckel-värde-par, grupp "
+"eller kommentar"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Ogiltigt gruppnamn: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Nyckelfilen börjar inte med en grupp"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Ogiltigt nyckelnamn: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Nyckelfilen innehåller kodningen \"%s\" som inte stöds"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Nyckelfilen har inte gruppen \"%s\""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Nyckelfilen har inte nyckeln \"%s\""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Nyckelfilen innehåller nyckeln \"%s\" med värdet \"%s\" som inte är UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Nyckelfilen innehåller nyckeln \"%s\" som har värde som inte kan tolkas."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Nyckelfilen innehåller nyckeln \"%s\" i gruppen \"%s\" som har värde som "
+"inte kan tolkas."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Nyckelfilen har inte nyckeln \"%s\" i gruppen \"%s\""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Nyckelfilen innehåller kontrolltecken i slutet på en rad"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Nyckelfilen innehåller ogiltiga kontrollsekvensen \"%s\""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Värdet \"%s\" kan inte tolkas som ett tal."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Heltalsvärdet \"%s\" är utanför intervallet"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Värdet \"%s\" kan inte tolkas som ett flyttal."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Värdet \"%s\" kan inte tolkas som ett booleskt värde."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "För stort räknevärde skickat till %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Strömmen är redan stängd"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Åtgärden avbröts"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Okänd typ"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s-filtyp"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s-typ"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Oväntat tidig end-of-stream"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Namnlös"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Skrivbordsfilen angav inget Exec-fält"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Kunde inte hitta terminal som krävs för programmet"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kan inte skapa programkonfigurationsmapp för användare %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kan inte skapa MIME-konfigurationsmapp för användare %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kan inte skapa skrivbordsfil för användare %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Anpassad definition för %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "enheten har inte implementerat utmatning"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "enheten har inte implementerat pollning av media"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Kan inte hantera version %d av GEmblem-kodning"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Felformaterat antal token (%d) i GEmblem-kodning"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Kan inte hantera version %d av GEmblemedIcon-kodning"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Felformaterat antal token (%d) i GEmblemedIcon-kodning"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Förväntade en GEmblem för GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Åtgärden stöds inte"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Infattande montering finns inte"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Kan inte kopiera över katalog"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Kan inte kopiera katalog över katalog"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Målfilen finns"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Kan inte kopiera katalogen rekursivt"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Kan inte kopiera specialfil"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Ogiltigt värde för symbolisk länk angivet"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Papperskorgen stöds inte"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Filnamn får inte innehålla \"%c\""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "volymen har inte implementerat montering"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Inget program är registrerat för hantering av denna fil"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Numreraren är stängd"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Filnumreraren har kvarstående åtgärd"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Filnumreraren är redan strängd"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "fil"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Filen innehållandes ikonen"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Kan inte hantera version %d av GFileIcon-kodning"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Felformaterad inmatningsdata för GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Strömmen saknar stöd för query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Sökning stöds inte på strömmen"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Kapning tillåts inte på inmatningsströmmen"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Kapning stöds inte på strömmen"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Fel antal token (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Ingen typ för klassnamnet %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Typen %s implementerar inte GIcon-gränssnittet"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Typen %s är inte klassad"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Felformaterat versionsnummer: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Typen %s implementerar inte from_tokens() på GIcon-gränssnittet"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Kan inte hantera angiven version för ikonkodningen"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Inmatningsströmmen har inte implementerat läsning"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Strömmen har kvarstående åtgärd"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Kunde inte hitta standardtyp för lokal katalogövervakare"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Ogiltigt filnamn %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Fel vid hämtning av filsystemsinformation: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Kan inte byta namn på rotkatalog"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Fel vid namnbyte av fil: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Kan inte byta namn på filen, filnamnet finns redan"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Ogiltigt filnamn"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Fel vid öppnade av fil: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Kan inte öppna katalog"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Fel vid borttagning av fil: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Fel vid kastande av fil: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Kunde inte skapa papperskorgskatalogen %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Kunde inte hitta toppnivåkatalog för papperskorg"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Kunde inte hitta eller skapa papperskorgskatalog"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Kunde inte skapa information om kastad fil: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Kunde inte kasta fil: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Fel vid skapande av katalog: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Fel vid skapande av symbolisk länk: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Fel vid flyttning av fil: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Kan inte flytta katalog över katalog"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Misslyckades med att skapa säkerhetskopiefil"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Fel vid borttagning av målfil: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Flyttning mellan monteringar stöds inte"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Attributvärde måste vara icke-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Ogiltig attributtyp (sträng förväntades)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Ogiltigt utökat attributnamn"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Fel vid inställning av utökat attribut \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Fel vid tillståndsläsning av filen \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (ogiltig kodning)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Fel vid tillståndsläsning av filhandtag: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Ogiltig attributtyp (uint32 förväntades)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Ogiltig attributtyp (uint64 förväntades)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Ogiltig attributtyp (bytesträng förväntades)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Fel vid inställning av rättigheter: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Fel vid inställning av ägare: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symbolisk länk måste vara icke-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Fel vid inställning av symbolisk länk: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Fel vid inställning av symbolisk länk: filen är inte en symbolisk länk"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux-kontext måste vara icke-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Fel vid inställning av SELinux-kontext: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux är inte aktiverat på detta system"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Inställning av attributet %s stöds inte"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Fel vid läsning från fil: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Fel vid sökning i fil: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Fel vid stängning av fil: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Kunde inte hitta standardtyp för lokal filövervakare"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Fel vid skrivning till fil: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Fel vid borttagning av gamla länk till säkerhetskopia: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Fel vid skapande av säkerhetskopia: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Fel vid namnbyte på temporärfil: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Fel vid kapning av fil: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Fel vid öppning av filen \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Målfilen är en katalog"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Målfilen är inte en vanlig fil"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Filen blev externt ändrad"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Fel vid borttagning av gammal fil: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Ogiltig GSeekType angavs"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Ogiltig sökbegäran"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Kan inte kapa av GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Nådde maximal gräns för datakedja"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Storlek för minnesutmatningsström är inte ändringsbar"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Misslyckades med att ändra storlek på minnesutmatningsström"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "montering har inte implementerat avmontering"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "montering har inte implementerat utmatning"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "montering har inte implementerat återmontering"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "montering har inte implementerat estimering av innehållstyp"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "montering har inte implementerat synkron estimering av innehållstyp"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Utmatningsström har inte implementerat skrivning"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Källströmmen är redan stängd"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "namn"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Namnet för ikonen"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "namn"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "En kedja innehållandes ikonnamnen"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "använd standardvärden att falla tillbaka på"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Huruvida standardvärden att falla tillbaka på ska användas som hittas genom "
+"att förkorta namnet vid \"-\"-tecken. Ignorerar namn efter den första om "
+"flera namn anges."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Kan inte hantera version %d av GThemedIcon-kodning"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Filhandtag"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Filhandtaget att läsa från"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Stäng filhandtag"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Huruvida filhandtaget ska stängas när strömmen stängs"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Fel vid läsning från unix: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Fel vid stängning av unix: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Filsystemsrot"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Filhandtaget att skriva till"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Fel vid skrivning till unix: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volymen har inte implementerat utmatning"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Kan inte hitta programmet"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Fel vid start av program: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI:er stöds inte"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "associeringsändringar stöds inte på win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Associeringsskapanden stöds inte på win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "dölj inga poster"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "använd ett långt listningsformat"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FIL...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u byte"
+#~ msgstr[1] "%u byte"
+
+#~ msgid "cancelled"
+#~ msgstr "avbröts"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Fel vid skapande av länk till säkerhetskopia: %s"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "Kan inte läsa in nyligen skapad skrivbordsfil"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr "För stort räknevärde skickat till g_input_stream_read_async"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "För stort räknevärde skickat till g_input_stream_skip"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr "För stort räknevärde skickat till g_input_stream_skip_async"
+
+#~ msgid "Target file already exists"
+#~ msgstr "Målfilen finns redan"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "För stort räknevärde skickat till g_output_stream_write"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr "För stort räknevärde skickat till g_output_stream_write_async"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Kunde inte byta filläge: fork() misslyckades: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Kunde inte byta filläge: waitpid() misslyckades %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Kunde inte byta filläge: chmod() misslyckades: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Kunde inte byta filläge: Barnet avslutades med signal: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Kunde inte byta filläge: Barnet avslutades onormalt"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Konvertering från teckentabellen \"%s\" till \"%s\" stöds inte"
+
+#~ msgid "Could not open converter from `%s' to `%s': %s"
+#~ msgstr "Kunde inte öppna konverteraren från \"%s\" till \"%s\": %s"
+
+#~ msgid ""
+#~ "Failed to parse '%s', which should have been a digit inside a character "
+#~ "reference (&#234; for example) - perhaps the digit is too large"
+#~ msgstr ""
+#~ "Misslyckades med att tolka \"%s\", som skulle ha varit ett tal inuti en "
+#~ "teckenreferens (&#234; till exempel). Talet är kanske för stort"
+
+#~ msgid "Character reference '%s' does not encode a permitted character"
+#~ msgstr "Teckenreferensen \"%s\" kodar inte ett tillåtet tecken"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "Felaktig meddelandestorlek"
+
+#~ msgid "Socket error"
+#~ msgstr "Uttagsfel"
+
+#~ msgid "Channel set flags unsupported"
+#~ msgstr "Kanalinställningsflaggor stöds inte"
+
+#~ msgid ""
+#~ "The hostname of the URI `%s' is contains invalidly escaped characters"
+#~ msgstr "Värdnamnet för URI:n \"%s\" innehåller felaktigt inbäddade tecken"
diff --git a/po/ta.po b/po/ta.po
new file mode 100644
index 0000000..b0e8431
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,1840 @@
+# translation of ta.po to
+# Tamil translation of GLib.
+# Copyright (C) 2001, 2006, 2007, 2009 Free Software Foundation, Inc.
+#
+# Dinesh Nadarajah <n_dinesh@yahoo.com>, 2001.
+# Felix <ifelix25@gmail.com>, 2006.
+# Dr.T.Vasudevan <agnihot3@gmail.com>, 2007.
+# I. Felix <ifelix@redhat.com>, 2009.
+# Priyadharsini <priyafelix@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: ta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-15 14:04+0530\n"
+"Last-Translator: \n"
+"Language-Team:  <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\\n\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "எதிர்பாராத பண்புக்கூறு '%s' இந்த உறுப்புக்கு '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "மதிப்பு '%s' க்கு '%s' உறுப்பு எதுவும் இல்லை"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "எதிர்பாராத ஒட்டு'%s', ஒட்டு '%s' எதிர்பார்க்கப்பட்டது"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%s' க்குள் எதிர்பாராத ஒட்டு '%s' உள்ளது"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "தரவு அடைவுகளில் சரியான புத்தகக்குறி கோப்பு எதுவும் இல்லை"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' க்கு ஏற்கனவே புத்தகக்குறி உள்ளது"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URIக்கு புத்தகக்குறி எதுவும் இல்லை '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s'க்கு MIME வகை எதுவும் புத்தகக்குறியில் குறிப்பிடப்படவில்லை"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s'க்கு புத்தகக்குறியில் தனிபட்ட கொடி எதுவும் குறிப்பிடப்படவில்லை"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s'க்கான புத்தகக்குறியில் குழுக்கள் எதுவும் அமைக்கப்படவில்லை"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' பெயரிலுள்ள பயன்பாடு  '%s'க்கு ஒரு புத்தகக்குறியை பதிவு செய்தது"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec வரி '%s'  ஐ யூஆர்ஐ (URI) '%s' உடன் விரிவாக்குதல் தோல்வியுற்றது"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "வரியுரு வகை `%s' இலிருந்து `%s' க்கு மாற்றுவதற்கு ஆதரவளிப்பு கிடையாது"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' லிருந்து '%s'க்கு மாற்றியை திறக்க முடியவில்லை"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "நிலை மாற்றியின் உள்ளீடுக்கு தவறான பைட் வரிசைமுறை"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "மாற்றும் போது பிழை: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "உள்ளீடின் முடிவில் பூர்த்தியாகாத வரியுரு வரிசைமுறை"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "பின்னடைப்பு '%s', '%s' குறிக் கணமிற்கு மாற்ற முடியவில்லை"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' \"கோப்பு\"திட்டத்தை பயன்படுத்தும் முழுமையான URI அல்ல"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "உள்ளமைக் கோப்பு வலை முகவரி `%s' இல் ஓர் `#' இல்லாமல் இருக்கலாம்"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "`%s' செல்லுபடியாகாத வலை முகவரி"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "`%s' வலை முகவரியின் விருந்தோம்புப்-பெயர் செல்லுபடியாகாதது"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "வலை முகவரி `%s' இல் செல்லுபடியாகாத 'விடுபடு' வரியுருகள்"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' பாதைப்-பெயர் ஓர் தனிப் பாதை அல்ல"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "பிழையான விருந்தோம்புப்-பெயர்"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' அடைவு திறக்கும்போது பிழை: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu பைட்டுகளை \"%s\" கோப்பு வாசிப்பதற்கு ஒதுக்கிவைக்க முடியவில்லை"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' கோப்பு வாசிக்கும் போது பிழை: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "கோப்பு \"%s\" மிகப்பெரியது"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' கோப்பிலிருந்து வாசிக்க முடியவில்லை: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' கோப்பு திறக்க முடியவில்லை: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' கோப்பின் பண்புகளை பெறமுடியவில்லை: fstat() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' கோப்பை திறக்க முடியவில்லை: fdopen() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s'கோப்பினை '%s'க்கு மறுபெயரிட முடியவில்லை: g_rename() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' கோப்பை படைக்க முடியவில்லை: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "'%s' கோப்பினை திறக்க முடியவில்லை: fdopen() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' கோப்பினை எழுத முடியவில்லை: fwrite() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' கோப்பினை எழுத முடியவில்லை: fwrite() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' கோப்பினை எழுத முடியவில்லை: fwrite() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s'கோப்பினை மூட முடியவில்லை: fclose() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "இருக்கும் கோப்பு '%s' ஐ நீக்க முடியாது: g_unlink() செயலிழந்தது: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' படிம அச்சு செல்லுபடியாகாதது; அதனில் '%s' இருக்கக் கூடாது"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' படிம அச்சில் XXXXXX இல்லை"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' என்பதன்-குறுக்கம் இணைப்பை வாசிக்க முடியவில்லை: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "என்பதன்-குறுக்கம் இணைப்புகளுக்கு ஆதரவு கிடையாது"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' லிருந்து'%s'க்கு மாற்றியை திறக்க முடியவில்லை: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string இல் மூலமாக வாசிக்க முடியாது"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "வாசிப்புத் தாங்ககத்தில் மாற்றப்படாத மீதித் தரவுகள்"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "வாய்க்கால் பாதி வரியுருவில் முடிவடைகிறது"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end இல் மூலமாக வாசிக்க முடியாது"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' கோப்பினை திறக்க முடியவில்லை: open() செயலிழந்தது: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' கோப்பினை ஒப்பிட முடியவில்லை: mmap() செயலிழந்தது: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "வரி %d எழுத்து %d ல் பிழை: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d வரியில் பிழை: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"வெற்றா பிரதிநிதி '&;' கண்டது; சரியான பிரதிநிதிகள்: &amp; &quot; &lt; &qt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"'%s' வரியுரு பிரதிநிதியின் தொடக்கத்தில் வரக்கூடாது; & வரியுரு பிரதிநிதியைத் "
+"தொடங்கும்; இந்த & ஓர் பிரதிநிதியாக இருக்கக்கூடாது என்றால்; அதை &amp ஆக விடுவி;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "'%s' வரியுரு பிரதிநிதியின் பெயரில் பிழையானது"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "பிரதிநிதியின் பெயர் '%s' தெரியாதது"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"பிரதிநிதி ';' உடன் முடிவடையவில்லை; நீங்கள் பிரதிநிதி ஒன்றை தொடங்க யோசிக்காமல் '&' "
+"பயன்படுத்தி இருக்கலாம் - '&'சை &amp ஆக விடுவி;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"'%-.*s'ஐ கூறிட முடியவில்லை,அதன் ஒரு எழுத்துக்குள் ஒரு தசமத்தை கொண்டிருக்க வேண்டும் "
+"குறிப்பு (&#234; எடுத்துக்காட்டாக) - எனினும் தசமம் மிக பெரியதாக உள்ளது"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "எழுத்து குறிப்பு '%-.*s' ஒரு அனுமதிக்கப்பட்ட எழுத்தினை குறிமுறையாக்கவில்லை"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "வேற்றான வரியுரு குறிப்பு; &#454 ஆகிய இலக்கங்கள் சேர்ந்திருக் வேண்டும்;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "முடிவடையாத உள்ளீட்பு மேற்கோள்"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "முடிவடையாத வரியுரு மேற்கோள்"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "பிழையான UTF-8 குறியீடு செய்யப்பட்ட உரை - மிக நீண்ட உரை"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "பிழையான UTF-8 குறியீடு செய்யப்பட்ட உரை - துவங்கும் குறியல்ல"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "பிழையான UTF-8 குறியீடு செய்யப்பட்ட உரை - செல்லுபடியாகும் '%s' அல்ல"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "ஆவணம் ஓர் உறுப்புடன் (உதாரணம்: <book>) தொடங்க வேண்டும்"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' வரியுருவை தொடர்ந்து '%s' வர முடியாது; அதைப் பயன்படுத்தி ஓர் உறுப்படியின் பெயரைத் "
+"தொடங்க முடியாது"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"ஒற்றை வரியுரு '%s', '%s' உறுப்படி தொடங்கல் ஒட்டை ஓர் '>' வரியுரு முடிவு செய்யும் "
+"என்று எதிர்பார்த்தது"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"'%s' ஓர் ஒற்றை வரியுரு, பண்பின் பெயர் '%s' பின் ('%s' உறுப்பின்) எதிர்பார்த்தது ஓர் '=' "
+"வரியுரு"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' உறுப்பு மூடப்பட்டுல்லது, தற்பொது ஒரு உறுப்பும் திறந்து இல்லை"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' உறுப்பு மூடப்பட்டுல்லது, அனால் தற்பொது திறந்திறுக்கும் உறுப்பு '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "வெற்றான ஆவணம் அல்லது ஆவணத்தில் இறுப்பது அனைத்தும் வெண்வெளி"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "'<' பிறகு ஆவணம் திடீரென முடிவடைந்தது"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"உறுப்புகள் திறந்திறுக்கும்போது ஆவணம் திடீரென முடிவடைந்தது - கடைசியாகத் திறக்கப்பட்ட "
+"உறுப்பு '%s'"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"ஆவணம் திடீரென முடிவடைந்தது, அடையாள ஒட்டு <%s/> முடிவில் ஓர் '}' இருக்கும் என "
+"எதிர்பார்த்தது"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "உறுப்பு பெயர் உள்ளே ஆவணம் திடீரென முடிவடைந்தது"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "பண்பு பெயர் உள்ளே ஆவணம் திடீரென முடிவடைந்தது"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "உறுப்பு-தொடங்களின் அடையாள ஒட்டு  உள்ளே ஆவணம் திடீரென முடிவடைந்தது"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "பண்பு பெயர் உள்ளிறுக்கும் போது ஆவணம் திடீரென முடிவடைந்தது"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "'%s' என்னும் மூடு-அடையாள ஒட்டு உள்ளே ஆவணம் திடீரென முடிவடைந்தது"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "ஆவணம் திடீரென குறிப்புரையுல் அல்லது செயலாக்கம் ஆணையுல் முடிவடைந்தது"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "சிதைந்த பொருள்"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "உள்ளமை தவறு அல்லது சிதைந்த பொருள்"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "நினைவகம் நிரம்பியது"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "பின்நோக்கி ஆராயும் எல்லை அடையப்பட்டது"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "தோரணி உள்ளடக்கங்கள் பகுதி பொருத்தத்துக்கு ஆதரவு தராத உருப்படிகளாக உள்ளன"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "உள்ளமை தவறு"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "பின்நோக்கும் சமர்பணங்கள் பகுதி பொருத்தத்துக்கு ஆதரவு தராத உருப்படிகளாக உள்ளன"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "உட்சுழல் எல்லை அடையப்பட்டது."
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "காலியான துணை சரங்களுக்கு பணியிட எல்லை அடையப்பட்டது."
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "செல்லாத புது வரி குறிகளின் கூட்டு"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "தெரியாத தவறு"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ at end of pattern"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c at end of pattern"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "அறியாத எழுத்து வருகிறது \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "case-changing escapes (\\l, \\L, \\u, \\U) இங்கு அனுமதி இல்லை"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} தகுதியாளரில் செயலிழக்கப்பட்டவையின் எண்ணிக்கைகள்"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "நிறையில்{} எண்கள் மிக பெரிதாக உள்ளன"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "எண் வகுப்புக்காக ] விடிபட்டவைகளை முடிவடையச் செய்தல்"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "எண் வகுப்பில் தவறான வரிசைமுறையை தவிர்த்தல்"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "எழுத்து வகுப்பில் வரம்பு செயலிழக்கப்பட்டது"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "மீண்டும் செய்வதற்கு எதுவுமில்லை"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "அடையாளம் காணமுடியாத எண்ணிற்கு பிறகு (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "அடையாளம் காணமுடியாத எண்ணிற்கு பிறகு (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "அடையாளம் காணமுடியாத எண்ணிற்கு பிறகு (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX என பெயரிடப்பட்ட வகுப்புகள் வகுப்பிற்குள் மட்டும் தான் துணைபுரியும் "
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "விடுப்பட்ட முடித்தல் )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") திறக்காமல் ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R அல்லது (?[+-]இவற்றால் எண்கள் பின்தொடரப்பட்டால் )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "இல்லாத துணை தோற்றத்திற்கான குறிப்பு"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "கட்டளைக்கு பிறகு ) தவறியது"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "சாதரண வெளிப்பாடுகள் மிகப்பெரியவை"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "நினைவிற்கு கொண்டு வருவதில் தோல்வி"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind வலியுறுத்துதல் நிலையான நீளத்தில் இல்லை"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "தவறான எண் அல்லது பெயருக்கு பிறகு (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "நிபந்தனைக்குட்பட்ட குழு இரண்டுக்கும் மேற்பட்ட கிளைகளை பெற்றுள்ளது"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "பின் வலியுறுத்துதல் எதிர்பார்க்கப்படுகிறது (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "தெரியாத POSIX வகுப்பு பெயர்"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX collating elements are not supported"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "எண்ணின் மதிப்பு \\x{...} இடைவிடா வரிசையில் மிகப்பெரிதாக உள்ளது"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "தவறான நிபந்தனை (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C ஐ lookbehind ல் வலியுறுத்த அனுமதியில்லை"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "கட்டாயமில்லாமல் மறுசுழற்சி அழைப்பு சுற்றாது"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "subpattern பெயரில் முடிக்கப்பட்ட விடுபட்டவைகள்"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "இரண்டு பெயரிடப்பட்ட subpatterns களும் ஒரே பெயரை பெற்றுள்ளது"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "தவறானது \\P அல்லது \\p இடைவிடா வரிசையானது"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "பின் தெரியாத இயல்பின் பெயர் \\P அல்லது \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "subpattern ன் பெயர் மிக நீளமானது  (அதிகபட்சம் 32 எண்கள்)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "subpatterns க்கு நிறைய பெயர்கள் உள்ளது (அதிகபட்சம் 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "எண்ம மதிப்பு \\377ஐ விட அதிகம்"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE குழு ஒன்றுக்கு மேற்பட்ட கிளைகளை கொண்டுள்ளது"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "DEFINE குழுவை மீண்டும் அமைக்க  அனுமதி இல்லை"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "தொடர்சியற்ற NEWLINE விருப்பங்கள்"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g ஒரு அடைப்புக்குறி மெயர் அல்லது ஒரு விருப்பமான அடைப்புக்குறி பூஜ்ஜியமில்லாததை "
+"தொடர்ந்து வராது"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "எதிர்பாராத திரும்புதல்"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "அதிக குறியீடு"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "overran கைம்பைல் பணியிடம்"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "முன்பு சோதிக்கப்பட்ட குறிப்பிடப்பட்ட துணை தோற்றம் இல்லை"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "வழக்கமான கூற்றை பொருத்துவதில் பிழை%s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "பிசிஆர்ஈ நூலகம் யூடிஎஃப்8 ஆதரவு இல்லாமல் தொகுக்கப்பட்டது."
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "பிசிஆர்ஈ நூலகம் யூடிஎஃப்8 பண்புகள் ஆதரவு இல்லாமல் தொகுக்கப்பட்டது."
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "இயல்பான கூற்று %s ஐ தொகுக்கும்போது  %d வரியுருவில் பிழை: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "இயல்பான கூற்று ஐ உகந்ததாக்கும்போது பிழை:%s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "பதின்னறும எண் அல்லது '}'  எதிர்பார்க்கப்பட்டது."
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "பதின்னறும எண் எதிர்பார்க்கப்பட்டது."
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "குறியீட்டுருவான சமர்பணத்தில் '<' ஐ காணவில்லை"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "முடிவடையாத உள்ளீட்பு மேற்கோள்"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "பூஜ்ய நீள உள்ளீட்பு மேற்கோள்"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "எண் எதிர்பார்க்கப்பட்டது"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "சட்டவிரோத உள்ளீட்பு மேற்கோள்"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "அனாதையான கடைசி '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "தெரியாத வெளியேற்ற வரிசைமுறை"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "மாற்று உரை \"%s\" ஐ பகுக்கையில் பிழை வரியுரு %lu இல்: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "மேற்களித்த உரை ஓர் \" -உடன் தொடங்கவில்லை"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "`கட்டளை வடியில் அல்லது வேறு மேற்களித்த உரையில் பொருத்தமற்ற \" "
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "'\\' வரியுருக்கு பின்பு உரை முடிவடைந்தது. (கடைசி உரை: '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"%c க்கு பொருத்தமான மேற்கோள் கண்டுபிடிப்பதட்கு முன் உரை முடிவடைந்தது. (உரை: '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "உரை வெற்றா இருந்தது (அல்லது வெண்வெளி மட்டுமே)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "சேய் செயலில் இருந்து தரவு வாசிக்க முடியவில்லை"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "(%s) சேய்-செயலிடன் தொடர்பு கொல்ல கழாய்த்-தொடரைப் படைக்க முடியவில்லை"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "(%s) சேய் கழாய்த் தொடரில் இருந்து வாசிக்க முடியவில்லை"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' (%s) அடைவுக்கு போக முடியவில்லை"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "(%s) சேய்-செயலை இயக்க முடியவில்லை"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "தவறான நிரல் பெயர்: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%dல் மதிப்பரு வெக்டாரில் தவறான சரம்: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "சூழலில் தவறான சரம்: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "தவறான பணி செய்யும் அடைவு: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "உதவியாளர் நிலையை இயக்க முடியவில்லை (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "(%s) சேய்-செயலில் இருந்து தரவு வாசிக்க முடியவில்லை"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "(%s) சேய்-செயலில் இருந்து தரவு வாசிக்கும் போது, select()'டில் எதிர்பாராத பிழை"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "(%s) waitpid()'டில் எதிர்பாராத பிழை"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) தொடங்க முடியவில்லை"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "\"%s\" (%s) சேய்-செயலை இயக்க முடியவில்லை"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "சேய் (%s) செயலகத்தின் வெளியீடலை அல்லது உள்ளடலை திசை-மாற்றும்போது பிழை"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "சேய் (%s) செயலகத்தை தொடங்க முடியவில்லை"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "சேய் செயல் \"%s\" இயக்கும்போது தெரியாத பிழை"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Failed to read enough data from child pid pipe (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 க்கு வரியுரு வீச்சு எல்லைக்கு வெளியே"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "உரையாடல் உள்ளீட்டில் தவறான வரிசை"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 க்கு வரியுரு வீச்சு எல்லைக்கு வெளியே"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "ஓபயன்பாடு:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "உதவி விருப்பங்கள்:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "உதவி விருப்பங்களை காட்டு"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "அனைத்து உதவி விருப்பங்களை காட்டு"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "பயன்பாடு விருப்பங்கள்:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "'%s' க்கு %sன் இயல் எண் மதிப்பினை கூறிட முடியாது"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "'%s' க்கு %sன் இயல் எண் மதிப்பு வரையறையை தாண்டியுள்ளது"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "இரட்டை மதிப்பு '%s' ஐ %sக்கு கூறிட முடியாது"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "இரட்டை மதிப்பு '%s' %sக்கு வரையறையை தாண்டியுள்ளது"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "கூறிடும் போது பிழை: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr " %sக்கான விடுபட்ட மதிப்புரு"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "தெரியாத விருப்பம் %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "தேடல் அடைவுகளில் சரியான விசை கோப்பினை காண முடியவில்லை"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ஒரு முறையான கோப்பில்லை"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "கோப்பு வெற்றாக உள்ளது"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"விசை கோப்பு வரி '%s' கொண்டுள்ளது இது விசை-மதிப்பு சோடியை, குழு, அல்லது குறிப்பு அல்ல"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "செல்லுபடியாகாத குழு பெயர்: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "விசை கோப்பு ஒரு குழுவாக ஆரம்பமாகாது"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "செல்லுபடியாகாத விசை பெயர்: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "விசை கோப்பு துணையில்லாத குறிமுறையை கொண்டுள்ளது '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "விசை கோப்பு குழுவினை கொண்டிருக்கவில்லை '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr " '%s' விசையை விசை கோப்பு கொண்டிருக்கவில்லை"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr " '%s'மதிப்பினை உடைய '%s'விசை விசை கோப்பு கொண்டுள்ளது, இது UTF-8 அல்ல"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "%s'விசையை விசை கோப்பு கொண்டுள்ளது அது கொண்டுள்ள மதிப்பினை மாற்ற முடியாது."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"'%s'குழுவில் %s'விசையை விசை கோப்பு கொண்டுள்ளது அது கொண்டுள்ள மதிப்பினை மாற்ற "
+"முடியாது."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "'%s' குழுவில் '%s' விசையை விசை கோப்பு கொண்டிருக்கவில்லை"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "கடைசி வரியில் விசை கோப்பு விடுபடு எழுத்தினை கொண்டுள்ளது"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "விசை கோப்பு தவறான விடுபடு வரிசையை கொண்டுள்ளது '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "மதிப்பு '%s' ஒரு எண்ணாக செயல்பட முடியாது."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "இயல் எண் மதிப்பு '%s' வரையறையை தாண்டியுள்ளது"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "மதிப்பு '%s' தசம எண்ணாக செயல்பட முடியாது."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "மதிப்பு '%s' பூலியனாக செயல்பட முடியாது."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%sக்கு மிகப்பெரிய எண்ணிக்கை மதிப்பு செலுத்தப்பட்டது"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "ஸ்ட்ரீம் ஏற்கனவே மூடப்பட்டது"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "செயல்பாடு ரத்து செய்யப்பட்டது"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "தெரியாத வகை"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s கோப்பு வகை"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s வகை"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "எதிர்ப்பார்க்கப்படாத முடிவு ஸ்ட்ரீம்"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "பெயரில்லாதது"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "பணிமேடை கோப்பு Exec புலம் குறிப்பிடப்படவில்லை"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "விண்ணப்பத்திற்கு தேவைப்படும் முனையத்தை கண்டுபிடிக்க இயலவில்லை"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "பயனர் விண்ணப்ப கட்டமைப்பு கோப்புறை %sஐ உருவாக்க இயலவில்லை: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "பயனர் MIME கட்டமைப்பு கோப்புறை %s உருவாக்க இயலவில்லை: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "பயனர் டெஸ்க்டாப் கோப்பு %s உருவாக்க முடியாது"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%sக்கு தனிபயன் விளக்கம்"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "இயக்கி வெளியேற்றம் செயல்படுத்தப்படுவில்லை"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "இயக்கி ஊடகத்தில் பதிவு செய்யப்படவில்லை"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "பதிப்பு %d GEmblem குறிமுறையில் கையாள முடியவில்லை"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "தவறான டோக்கன்களின் எண்ணிக்கை (%d) GEmblem குறிமுறையில்"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "பதிப்பு %dஐ  GEmblemedIcon குறிமுறையில் கையாள முடியவில்லை"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "தவறான டோக்கன் எண்ணிக்கை (%d) GEmblemedIcon குறிமுறையில்"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon க்காக ஒரு GEmblem எதிர்பார்க்கப்படுகிறது"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "செயல்பாட்டிற்கு ஆதரவு கிடையாது"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "கொண்டுள்ள மவுண்ட் இல்லை"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "அடைவுக்கு மேலாக நகலெடுக்க முடியாது"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "அடைவுக்கு மேலாக அடைவினை நகலெடுக்க முடியாது"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "இலக்கு கோப்பு வெளியேற்றப்பட்டது"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "அடைவை மீண்டும் நகலெடுக்க முடியவில்லை"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "சிறப்பு கோப்பை நகலெடுக்க முடியவில்லை"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "தவறான symlink மதிப்பு கொடுக்கப்பட்டுள்ளது"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "குப்பை ஆதரவு கிடையாது"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "'%c' கோப்பின் பெயர்களை பெற்றிருக்கவில்லை"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "தொகுதி மவுண்டை செயல்படுத்தவில்லை"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "இந்த கோப்பைக் கையாள எந்த பதிவு செய்யப்பட்ட விண்ணப்பமும் இல்லை"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "எண்ணிடல் மூடப்பட்டது"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "கோப்பு எண்ணிடல் சிறந்த செயல்பாட்டை கொண்டுள்ளது"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "கோப்பு எண் ஏற்கனவே மூடப்பட்டது"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "கோப்பு"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "கோப்பு சின்னத்தை கொண்டுள்ளது"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon குறிமுறை பதிப்பு %d ஐ கையாள முடியவில்லை"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon க்கு தவறான உள்பாடு தரவு"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "ஸ்ட்ரீம் query_infoக்கு துணைபுரியவில்லை"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "ஸ்ட்ரீமில் தேடுதல் துணைபுரியவில்லை"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "உள்ளீடு ஸ்ட்ரீமில் வெட்டுதல் அனுமதி இல்லை"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "ஸ்ட்ரீமில் வெட்டுதல் துணைபுரியவில்லை"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "தவறான டோக்கன்களின் எண்ணிக்கை (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "வகுப்பு பெயர் %sக்கு வகை இல்லை"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "வகை %s GIcon முகப்பை செயல்படுத்தவில்லை"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "வகை %s பிரிக்கப்படவில்லை"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "தவறான பதிப்பு எண்: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "வகை %s from_tokens()ஐ  GIcon முகப்பில் செயல்படுத்தவில்லை"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "கொடுக்கப்பட்ட சின்ன குறிமுறை பதிப்பை கையாள முடியவில்லை"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "உள்ளீடு ஸ்ட்ரீம் வாசிப்பை செயல்படுத்தவில்லை"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "ஸ்ட்ரீம் சிறந்த செயல்பாட்டை கொண்டுள்ளது"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "முன்னிருப்பு உள்ளமை அடைவு மானிட்டர் வகையை தேட முடியவில்லை"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "செல்லுபடியாகாத கோப்பு பெயர் %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "கோப்பு முறைமை தகவலை பெறும் போது பிழை: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ரூட் அடைவை மறுபெயரிட முடியவில்லை"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "கோப்பு மறுபெயரிடும் போது பிழை: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "கோப்பை மறுபெயரிட முடியவில்லை, கோப்புபெயர் ஏற்கனவே வெளியேற்றப்பட்டது"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "தவறான கோப்பு பெயர்"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "கோப்பு திறக்கும் போது பிழை: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "அடைவை திறக்க இயலவில்லை"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "கோப்பு நீக்கும் போது பிழை: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "கோப்பினை குப்பைக்கு அனுப்பும் போது பிழை: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "குப்பை அடைவு %sஐ உருவாக்க முடியவில்லை: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "குப்பைக்கு மேல் நிலை அடைவை தேட முடியவில்லை"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "குப்பை அடைவை தேட அல்லது உருவாக்க முடியவில்லை"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "குப்பை தகவல் கோப்பினை உருவாக்க முடியவில்லை: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "கோப்பை இழுக்க முடியவில்லை: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "அடைவை உருவாக்கும்போது பிழை: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "குறிப்பீட்டின் இணைப்பை ஏற்படுத்துவதுல் பிழை: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "பிழை நகர்த்தும் கோப்பு: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "அடைவில் அடைவை நகர்த்த முடியவில்லை"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "பின்சேமிப்பு கோப்பு உருவாக்க முடியவில்லை"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "பிழை நீக்கும் இலக்கு கோப்பு : %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "மவுண்டிற்கிடையே நகர்த்த முடியவில்லை"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "அளவுரு மதிப்பு பூஜ்ஜியமாக இருக்கக்கூடாது"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "தவறான அளவுரு வகை (சரம் எதிர்பார்க்கப்பட்டது)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "பண்பு பெயர் உள்ளே ஆவணம் திடீரென முடிவடைந்தது"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "விரிவான அளவுரு'%s' அமைப்பதில் பிழை: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' கோப்பை துவக்குவதில் பிழை : %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (தவறான குறிமுறை)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "கோப்பு விவரிப்பவரை துவக்குவதில் பிழை: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "தவறான அளவுரு வகை (uint32 எதிர்ப்பார்க்கப்பட்டது)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "தவறான அளவுரு வகை (uint64 எதிர்பார்க்கப்பட்டது)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "தவறான அளவுரு வகை (பைட் சரம் எதிர்பார்க்கப்பட்டது)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "பிழை அமைப்பதில் அனுமதி: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "மாற்றும் போது பிழை: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink பூஜ்ஜியமாக இருக்கக்கூடாது"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "symlink: %s கை அமைப்பதில் பிழை"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "symlink அமைப்பதில் பிழை: கோப்பு ஒரு symlinkஆக இல்லை"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux சூழல் பூஜ்ஜியமாக இருக்கக்கூடாது"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux சூழலை அமைப்பதில் பிழை: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux இந்த கணினியில் செயல்படுத்தப்படவில்லை"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "அளவுரு %s ஐ அமைப்பதில் ஆதரவு கிடையாது"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "கோப்பிலிருந்து வாசிக்கும் போது பிழை: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "கோப்பை பார்க்கும் போது பிழை: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "கோப்பை முடிக்கும் போது பிழை: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "முன்னிருப்பு உள்ளமை கோப்பு மானிட்டர் வகையை தேட முடியவில்லை"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "பிழையை எழுதும் கோப்பு: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "பழைய பின்சேமிப்பு இணைப்பை நீக்குவதில் பிழை: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "பின்சேமிப்பு நகலை உருவாக்குவதில் பிழை: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "மறுபெயரிடப்பட்ட தற்காலிக கோப்பில் பிழை: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "கோப்பு வாசிக்கும் போது பிழை: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' பிழையை திறக்கும் கோப்பு: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "இலக்கு கோப்பு ஒரு அடைவில்லை"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "இலக்கு கோப்பு ஒரு நிரந்தர கோப்பு இல்லை"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "இந்த கோப்பு வெளியார்ந்து மாற்றப்பட்டுள்ளது"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "பிழையை நீக்கும் பழைய கோப்பு: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "தவறான GSeekType கொடுக்கப்பட்டுள்ளது"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "தவறான தேடும் கோரிக்கை"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStreamஐ தசமமிட முடியவில்லை"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "அதிகபட்ச தரவு அணி வரம்பை அடைந்தது"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "நினைவக வெளிப்பாடு ஸ்ட்ரீம் அளவிடக்கூடியதல்ல"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "நினைவக வெளிப்பாடு ஸ்ட்ரீமை மறுஅளவிட முடியவில்லை"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount  unmountஐ செயல்படுத்தவில்லை"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount வெளியேற்றத்தை செயல்படுத்தவில்லை"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount  remount ஐ செயல்படுத்தவில்லை"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount உள்ளடக்க வகையை செயல்படுத்தவில்லை"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount ஒருங்கிணைத்தல் உள்ளடக்க வகையை செயல்படுத்தவில்லை"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "வெளிப்பாடு ஸ்ட்ரீம் எழுதுதலை செயல்படுத்தவில்லை"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "மூல ஸ்ட்ரீம் ஏற்கனவே மூடப்பட்டது"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "பெயர்"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "சின்னத்தின் பெயர்"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "பெயர்கள்"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "ஒரு அணி சின்னப்பெயர்களை கொண்டுள்ளது"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "முன்னிருப்பு ஃபால்பேக்குகளை பயன்படுத்து"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "பதிப்பு %d இன் GThemedIcon குறிமுறையாக்கத்திற்கு கையாள முடியாது"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "கோப்பு விளக்கி"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "கோப்பு விளக்கி வாசிக்கிறது"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "கோப்பு விரிவாளரை மூடு"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "ஸ்ட்ரீம் மூடப்படும் போது கோப்பு விளக்கியை மூட வேண்டுமா"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "unix லிருந்து வாசிப்பதில் பிழை: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "unix ஐ மூடுவதில் பிழை: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "கோப்பு முறைமை ரூட்"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "எழுத வேண்டிய கோப்பு விளக்கி"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "யுனிக்ஸில் எழுதும் போது பிழை: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "தொகுதி வெளியேற்றத்தை செயல்படுத்தவில்லை"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "பயன்பாட்டை காணவில்லை"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "பிழையை கண்டுபிடிக்கும் விண்ணப்பம்: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIs துணைப்புரியவில்லை"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32இல் அமைப்பு மாற்றங்கள் துணைபுரிவதில்லை"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32இல் அமைப்பு உருவாக்கம் துணைபுரிவதில்லை"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "உள்ளீடுகளை மறைக்காதே"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "நீண்ட பட்டியலிடும் முறையை பயன்படுத்து"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 0000000..f046c05
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,1817 @@
+# translation of te.po to Telugu
+# Telugu translation of glib
+# Copyright (C) 2005 Free Software Foundation, Andhra Pradesh.
+# This file is distributed under the same license as the GLIB package.
+#
+#
+# విక్రం ఫణీంద్ర <vikramphaneendra@yahoo.co.in>, 2005.
+# దండు ప్రసాద్ <dandu_prasad2000@yahoo.com>, 2005.
+# రమణ సాయి <rmn_sai@yahoo.co.in>, 2005.
+# Krishna Babu K <kkrothap@redhat.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: te\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-03 14:24+0530\n"
+"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
+"Language-Team: Telugu <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "మూలకం '%2$s'కు అనుకోని యాట్రిబ్యూట్ '%1$s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "మూలకం '%2$s'యొక్క యాట్రిబ్యూట్ '%1$s' కనబడలేదు"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "అనుకోని టాగ్ '%s', అనుకున్న టాగ్ '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "అనుకోని టాగ్ '%s' దీని లోపల '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "డాటా dirsనందు యెటువంటి విలువైన పుస్తకగుర్తు దస్త్రము కనబడలేదు"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s'కు యిప్పటికే ఒక పుస్తకగుర్తు వుంది"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s'కొరకు యెటువంటి పుస్తకగుర్తు కనబడలేదు"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s'కొరకు పుస్తకగుర్తునందు యెటువంటి MIME రకము నిర్వచించలేదు"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s'కొరకు పుస్తుకగుర్తునందు యెటువంటి వ్యక్తిగత జెండా నిర్వచించలేదు"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s'కొరకు పుస్తకగుర్తునందు యెటువంటి సమూహములు అమర్చలేదు"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "ఎటువంటి అనువర్తనము '%s' నామముతో పుస్తకగుర్తును '%s'కొరకు నమోదుచేయలేదు"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "exec వరుస '%s'ను URI '%s'తో పొడిగించుటకు విఫలమైంది"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "అక్షరమాలలొ కల '%s' నుండి '%s'  కు పరివర్తించడానికి  సహకరించదు"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' నుండి  '%s' కు పరివర్తించడం సాధ్యం కాదు "
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "ఎగుబడి బైట్ క్రమంను పరివర్తించుట నిస్సారమగును"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "పరివర్తనం నందు దోషం కలదు: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "చివరి ఎగుబడి నందు పాక్షికముగా అక్షర క్రమము కలదు."
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ఫాల్ బ్యాక్ '%s' ను  '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "\"దస్త్రం\" యోచనను ఉపయోగించిన యుఆర్ఐ '%s' సంపూర్ణమైన యుఆర్ఐ కాదు"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "స్థానిక యుఆర్ఐ '%s'   '#' ను కలుపుకొనియండలెదు  "
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr " '%s' యుఆర్ఐ నిస్సారము"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "ఆతిథ్య నామం యొక్క యుఆర్ఐ '%s' నిస్సారము"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "యుఆర్ఐ '%s' నిస్సారమైన ఎస్కేప్ అక్షరాలు కలిగియున్నాయి."
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr " '%s' త్రోవ నామం సరిఐనది కాదు."
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "నిస్సారమైన ఆతిథ్య నామము"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr " వివరణ తెరచుటలో దోషం '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu బైట్లని దస్త్రం  \"%s\" చదువుటకు ఇవ్వలేము"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "దస్త్రం '%s': %s చదువుటలో దోషం"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "దస్త్రము \"%s\" చాలా పెద్దది"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr " దస్త్రం '%s': %s నుండి చదువుటలో విఫలమైనారు"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr " దస్త్రం '%s': %s తెరుచుటలో విఫలమైనారు"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "దస్త్ర ఆపాదనలు విఫలమగును '%s': ఎఫ్ స్టాట్() విఫలమైనది: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "దస్త్రం '%s' తెరుచుటలో విఫలమైనారు: ఎఫ్ డిఓపన్()  విఫలమైనది: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "దస్త్రమును '%s'నుండి '%s'కు పునఃనామకరణ చేయుటలో విఫలమైంది: g_rename() విఫలమైంది: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr " '%s' దస్త్రమును సృష్టించుటలో విఫలమయినావు. :%s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "దస్త్రము '%s'ను వ్రాయటుకొరకు తెరుచుటలో విఫలమైంది: fdopen() విఫలమైంది:%s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "దస్త్రము '%s'కు వ్రాయటలో విఫలమైంది: fwrite() విఫలమైంది:%s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "దస్త్రము '%s'కు వ్రాయటలో విఫలమైంది: fwrite() విఫలమైంది:%s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "దస్త్రము '%s'కు వ్రాయటలో విఫలమైంది: fwrite() విఫలమైంది:%s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "దస్త్రము '%s'ను మూయుటలో విఫలమైంది: fclose() విఫలమైంది: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "ఉన్న దస్త్రము '%s' తొలగించబడ లేకపోయింది: g_unlink() విఫలమైంది: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr " '%s' మాదిరి,  '%s' కలిగియుండలెదు. "
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "మాదిరి '%s' XXXXXX కలిగిలేదు"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr " '%s'  చిహ్న పూరితజోడి చదువుటలో విఫలమయినావు : %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "చిహ్న పూరితజోడి సహకరించలెదు. "
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "కన్వర్టర్‌ను '%s' నుండి '%s'కు తెరువలేకపోయింది: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr " జి_ఐఓ_ఛానెల్_రీడ్_లైన్_స్ర్టింగ్ ముడి చదువు సాధ్యపడదు  "
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr " మిగిలిన దత్తాంశమును రీడ్ బఫర్ లో పరివర్తించలెము  "
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr " పూర్తికాని అక్షరాన్ని ప్రసార మార్గం ముగించును. "
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "జి_ఐఓ_ఛానెల్_రీడ్_లైన్_ఎండ్ ముడి చదువు సాధ్యపడదు"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "దస్త్రము '%s'ను తెరువుటలో విఫలమైంది: open() విఫలమైంది: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "దస్త్రము '%s' మాప్‌చేయుటలో విఫలమైంది: mmap() విఫలమైంది: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "వరుస %d అక్షరము %d పై దోషము: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d  వరుసలో దోషం కలదు : %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr " ఖాశి వ్యష్టి '&;' చూడబడినది;  వర్తించు వ్యష్టిలు: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"  వ్యష్టినామముతో ప్రారంభమగు అక్షరము '%s' నిస్సారము; వ్యష్టి & అక్షరముతో ప్రారంభమగును;వ్యష్టి "
+"ప్రారంబమగును; ఒక వేశ ఆంపర్సండ్ ఊహించిన విధంగా వ్యష్టి కాకపోతే , ఎస్కేప్it as &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr " వ్యష్టినామంలో అక్షరము '%s' నిస్సారము "
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr " '%s' వ్యష్టి నామం తెలియదు "
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+" వ్యష్టి సెమికోలన్ తో పూర్తవలేదు; దాదాపుగా యాంపర్ సెండ్ ఉపయెగించవలెను  అక్షరము దాదాపుగా  -' ఎస్కేప్ "
+"యంపర్ సెండ్ యాజ్ &యాంప్;' తో ప్రారంభమవలేదు. "
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"అక్షరములో అంకె కలిగియున్నందువలన '%-.*s', పార్సింగ్ విఫలమైనది.దాదాపుగా అంక్య భారీగా ఉన్నది -నివేదన "
+"(ఉదాహరణకు : &#234; )"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "అక్షర నివేదన '%-.*s' అనుమతించబడిన అక్షరము ఎన్ కోడ్ అవ్వదు."
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr " ఖాళీ అక్షర నివేదన తప్పనిసరిగా &#454 ఈ సంఖ్యను కలుపుకొనవలెను"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"అక్షర నివేదన సెమికోలన్ తో ముగియలేదు; దాదాపుగా యిది ఉపయెగించండి యాంపర్ సెండ్ అక్షరం తో ప్రారంభమవరాదు - "
+"ఎస్సేప్ యాంపర్ సెండ్ యాజ్ &యాంప్ "
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr " పూర్తికాని వ్యష్టినివెదన  "
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr " అక్షర నివేదన పూర్తికాలేదు "
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "చెల్లని UTF-8 యెన్కోడెడ్ పాఠ్యము - పొడవైన అనుక్రమము"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "చెల్లని UTF-8 యెన్కోడెడ్ పాఠ్యము - ప్రారంభ అక్షరము కాదు"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "చెల్లని UTF-8 యెన్కోడెడ్ పాఠ్యము - చెల్లునటువంటి '%s' కాదు"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "పత్రం తప్పనిసరిగా ఒక మూలకంతో ప్రారంభమవలెను (ఉదా. <బుక్>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"  '<' తో ప్రారంభమగు '%s' అనునది సరరిఐన అక్షరం కాదు ; యిది మూలక నామంతో ప్రారంభమవలేదు.  "
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "బేసి అక్షరము '%s', ఖాళీ-మూలకపు టాగ్ '%s'ను ముగించుటకు '>' అనుకొనబడింది"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "బేసి అక్షరము '%s', ఊహించిన '=' తర్వాత '%s'  ఆపాదించు నామం '%s' మూలకం "
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"'%s' ఊహించిన బేసి అక్షరము '>' లేక '/' చివరి ర్రంభ బొందు అక్షరము మాలకం %sలేక ఇచ్చాపూర్వక "
+"ఆపాదన; దాదాపుగా ఆపాదన నామంలో అనర్హమైన అక్షరం ఉపమెగించినావు"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"బేసి అక్షరము '%s', ఊహించిన తెరచిన క్వోట్ చిహ్నం తరాత ఇచ్చిన ఆపాదన విలువ  '%s' మూతకము '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "  '</' వెంటనే ప్రారంభమగు '%s' నిసారమైన అక్షరము  ; '%s' తో మూలకనామం ప్రారంభమవరాదు "
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr " '%s' మూలకం మూయబడినది, ప్రస్ధుతం ఏ మూలకము తెరచియుండలెదు "
+
+# ../glib/gmarkup.c:1588
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' మూలకం మూయబడినది, కాని ప్రస్ధుతం తెరువ బడిన మూలకం '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr " పత్రం ఖాలిగా ఉన్నది లేక ఒక వైట్ స్పేస్ కలిగి యున్నది.  "
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "పత్రం చివర కోణ కుండలీకరణము'<' వెంటనె అనవసరముగా ముగింపు అయినది"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"మూలకములు ఇంకను తెరచియున్న పత్రం ఊహించని విధంగా అంతమైనది- '%s' చివరిది మూలకము తెరచబడినది"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"పత్రం ఊహించని విధంగా అంతమైనది,మూసిన కోణకుండశికరణం అంతము చూచుటకు ఊహించబడినది బొందు <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr " పత్రం చివర ఊహించని మూలకనామం కలదు "
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "పత్రం చివర ఊహించని ఆపాదననామం కలదు"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "పత్రం చివర ఊహించని తెరచిన బొందు కలదు."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+" '=' చిహ్నము తర్వాత యాట్రిబ్యూట్ నామమును అనుసరిస్తూ యాట్రిబ్యూట్ విలువలేకుండా పత్రము అనుకోకుండా "
+"ముగించబడింది."
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr " లోపల ఆపాదన విలువ ఉన్నపుడు పాఠం ఊహించకుండా ముగింపు అయినది "
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr " '%s'మూలకము యోక్క మూసిన బొందు ఊహించకుండా పాఠం ముగింపు అయినది "
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr " లోపల వ్యాఖ్య క్రమగతి ఆదేశం ఉండగా ఊహించకుండా పాఠం ముగింపు  అయినది "
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "పాడైన ఆబ్జక్టు"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "అతర్గత దోషము లేదా పాడైన ఆబ్జక్టు"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "మెమోరీ అయిపోయింది"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "బ్యాక్‌ట్రాకింగ్ పరిమితి చేరుకొంది"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "పాక్షిక సరిజోడికి మద్దతీయని అంశములను మాదిరి కలిగివుంది"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "అంతర్గత దోషము"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "పాక్షిక సరిజోడికి నియమాలు మద్దతీయని కారణంగా బ్యాక్ రిఫరెన్స్‍"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "పునరావృతపు పరిమితి చేరినది"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "ఖాళీ వుపస్ట్రింగ్స్‍ కొరకు పనితలం పరిమితి చేరినది"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "కొత్తవరుస జెండాలయొక్క చెల్లని మిశ్రమం"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "తెలియని దోషము"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ మాదిరి చివర వద్ద"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c మాదిరి చివరవద్ద"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "గుర్తించబడని అక్షరము \\ను అనుసరిస్తోంది"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "కేస్-మరల్పు యెస్కేప్స్‍ (\\l, \\L, \\u, \\U) యిక్కడ అనుమతించబడవు"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} క్వాంటిఫైర్‌లో క్రమము బయటవున్న సంఖ్యలు"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} క్వాంటిఫైర్‌లో పెద్దగావున్న సంఖ్య"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "అక్షరపు క్లాస్‌కు ] ముగింపు తప్పిపోయినది"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "అక్షరపు క్లాస్‌నందు చెల్లని ఎస్కేప్ అనుక్రమము"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "అక్షరపు క్లాస్‌నందు వ్యాప్తి క్రమముకు బయటవుంది"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "మళ్ళీచేయుటకు యేమీలేదు"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? తర్వాత గుర్తించని అక్షరము"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< తర్వాత గుర్తించని అక్షరము"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P తర్వాత గుర్తించని అక్షరము"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX నామపు క్లాసెస్ క్లాస్ లోపల మాత్రమే మద్దతునిస్తాయి"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "ముగించునది ) తప్పిపోయింది"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") తెరిచిన ( లేకుండా"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R లేదా (?[+-]అంకెలు తప్పక ) అనుసరించాలి"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "లేని వుపమాదిరికి రిఫరెన్స్‍"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "వ్యాఖ్యానం తర్వాత తప్పిపోయిన )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "సాదారణ సమీకరణం చాలా పెద్దది"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "మెమొరి పొందుటలో విఫలమైంది"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "వెనుకచూడండి చెప్పినమాట నిర్ధరిత పోడవులేదు"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( తర్వాత తప్పుగావున్న సంఖ్య లేదా నామము"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "నియమరూపక సమూహం రెండుకన్నా యెక్కువ శాఖలను కలిగివుంది"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( తర్వాత చెప్పేమాట అనుకోబడినది"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "తెలియని POSIX తరగతి నామము"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX ఖండించుకొను మూలకాలు మద్దతీయబడవు"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} అనుక్రమమునందలి అక్షరపు విలువ చాలా పెద్దది"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "చెల్లని నియమము (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "వెనుక చెప్పిన దానిలో \\C అనుమతించబడదు"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "పునరావృత కాల్ అనంతంగా లూప్‌కాగలదు"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ఉపమాదిరి నామమునందు తప్పిపోయిన ముగింపు"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "రెండు నామాల వుపమాదిరిలు ఒకే నామమును కలిగివున్నాయి"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "తప్పుగావున్న \\P లేదా \\p అనుక్రమము"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P లేదా \\p తర్వాత తెలియని లక్షణము నామము"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ఉపమాదిరి నామము మరీ పెద్దది (గరిష్ఠం 32 అక్షరములు)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "నామము గలిగిన చాలా వుపమాదిరిలు (గరిష్ఠంగా 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "అష్టాంశ విలువ \\377 కన్న పెద్దది"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "నిర్వచించిన సమూహం వొకటికన్నా యెక్కువ శాఖలను కలిగివుంది"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "నిర్వచించు సమూహంను మళ్ళీచేయుట అనుమతించబడదు"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "అస్థిరత్వ NEWLINE ఐచ్చికాలు"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g బ్రేస్‌డ్ నామముతో లేదా పాక్షికముగా బ్రేస్‌చేయబడివున్న సున్నా-కాని సంఖ్యతో అనుసరింపబడదు"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "అనుకోని ఆవృతము"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "కోడ్ వోవర్‌ఫ్లో"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "మించిపోయిన నిర్వర్తనా పనితలం"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "ముందుగా-పరిశీలించిన రిఫరెన్సుడు వుపమాదిరి కనబడలేదు"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "సాదారణ సమీకరణమును సరిజోడి చేస్తున్నప్పుడు దోషము %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE లైబ్రరీ UTF-8 మద్దతులేకుండా నిర్వర్తించబడింది"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE లైబ్రరీ UTF8 లక్షణముల మద్దతులేకుండా నిర్వర్తించబడింది"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "సాదారణ సమీకరణము %sను అక్షరము %dవద్ద నిర్వర్తిస్తున్నప్పుడు దోషము: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "సాదారణ సమీకరణము %sను మెరుగుపరుస్తున్నప్పుడు దోషము: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "హెగ్జాడెసిమల్ డిజిట్ లేదా '}' అనుకోబడింది"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "హెగ్జాడెసిమల్ అంకె అనుకోబడింది"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "చిహ్నరూప రిఫరెన్సునందు '<' తప్పిపోయినది"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "పూర్తికాని చిహ్నరూప రెఫరెన్సు"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "సున్నా-పొడవు చిహ్నరూప రిఫరెన్సు"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "అంకె అనుకోబడినది"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "సరికాని చిహ్నరూప రిఫరెన్సు"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "స్ట్రే ఫైనల్ '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "తెలియని యెస్కేప్ అనుక్రమము"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "పునఃస్థన పాఠ్యము \"%s\"ను అక్షరం %lu వద్ద పార్శ్‍‌చేస్తుంటే దోషము: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "కోటెడ్ పాఠం కొటేషన్ చిహ్నంతో ప్రారంభవరాదు"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr " కమాండ్ లైన్ లేద షల్_కోటెడ్ పాఠం లో సామ్యంలేని కొటేషన్ చిహ్నం కలదు "
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "పాఠం '\\' అక్షరము వెంటనె ముగింపు అయినది. (ఈ పాఠము '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "సామ్యమైన కొటేషన్ చిహ్నం %c లభించకముందె పాఠం ముగింపు అయినది . (ఈ పాఠము'%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "పాఠం ఏమి లేదు (లేక ఒక వైట్ స్పేస్ కలదు)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr " శిశు కార్యం నుండి చదువుటలో విఫలమయినావు "
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr " (%s) శిశు కార్యం తో తెలియచేయుటకు పైప్ ను సృష్టించుటలో విఫలమైనావు "
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr " శిశు పైప్ నుండి చదువుటలో విఫలమయినావు(%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr " '%s' (%s) వివరణ మార్చుటలో విఫలమయినావు  "
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "(%s) శిశు కార్యం నిర్వర్తించుటలో విఫలమయినావు  "
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "చెల్లని ప్రోగ్రామ్ నామము: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "ఆర్గుమెంట్ శీర్షములో %dవద్ద చెల్లని స్ట్రింగ్: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "ఎన్విరాన్‌మెంట్ నందు చెల్లని స్ట్రింగ్: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "చెల్లని పనిచేయుచున్న డైరెక్టరి: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "సహాయ కార్యక్రమం నిర్వర్తించుటలో విఫలమైంది (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "  శిశు కార్యం నుండి జి_ఐఓ_ఛానెల్_విన్౩౨32_పోల్()  పాఠం ను చదువుటలో ఊహించని దోషం కలదు"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "(%s) శిశు కార్యం నుండి వివరము చదువుటలో విఫలమయినావు "
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr " శిశు కార్యం (%s) నుండి పాఠం చదువుటలో సెలెక్ట్() లో ఊహించని దోషం కలదు.  "
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "వెయిట్ పిడ్() లో ఊహించని దోషం కలదు(%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "(%s) ఫోర్క్ విఫలమయినది  "
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr " \"%s\" శిశుకార్యం నిర్వర్తించుటలో విఫలమయినావు (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "ఎగుబడికి రిడైరెక్ట్ చేయుటలో విఫలమైనది లేక శిశు కార్యం యొక్క దిగుబడి  (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr " (%s) శిశుకార్యం యెక్క ఫోర్క్ విఫలమయినది "
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr " \"%s\" శిశుకార్యం నిర్వర్తించుటలో తెలియని ధోషం కలదు  "
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "శిశు పిడ్ పైప్ (%s) నుండి సరిపడునంత చదువుటలో విఫలమైనావు.  "
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "అక్షరము  యుటిఫ్-8 శ్రేణియందు లేదు "
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "పరివర్తన ఎగుబడి వరుస నిస్సారము "
+
+# ../glib/gutf8.c:1382 ../glib/gutf8.c:1478
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "అక్షరము UTF-16 శ్రేణియందు లేదు"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "వినిమయం:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ఇచ్చాపూర్వరకం...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "సహాయ ఇచ్ఛాపూర్వకాలు:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "సహాయ ఇచ్ఛాపూర్వకాలను చూపించుట"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "సహాయ ఇచ్ఛాపూర్వకాలన్నింటని చూపించుట"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "కార్యక్షేత్ర ఇచ్ఛాపూర్వకాలు :"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "పూర్ణాంకం విలువ %sను %s కొరకు పార్స్‍ చేయలేదు"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr " పూర్ణాంకం విలువ '%s' లో విస్రృతి లో లేని %s "
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "డబుల్ విలువ '%s'ను %sకొరకు పార్శ్‍‌చేయలేదు"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "డబుల్ విలువ '%s' అనునది %sకొరకు వ్యాప్తిలో లేదు"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "ఐచ్చికం పార్శింగ్‌లో దోషము %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s కొరకు తప్పిపోయిన ఆర్గుమెంట్"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "తెలియని  ఇచ్ఛాపూర్వకము %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "శోధన dirsనందు విలువైన కీ దస్త్రము కనబడలేదు"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "క్రమబద్దమైన దస్త్రం కాదు"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr " కాళీ దస్త్రం "
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "ఏదైతే మీట-విలువలు , గ్రూప్ ,లేక వ్యాఖ్య కాదో అది మీట దస్త్రంలో లైన్ '%s' కలిగియున్నది"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "చెల్లని గ్రూప్ నామము : %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr " మీట దస్త్రం సముదాయంతో ప్రారంభమవలెదు.  "
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "చెల్లని కీ నామము :%s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr " మీట దస్త్రం కలిగియున్న సంకేతరచన '%s' సహకరించదు "
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr " మీట దస్త్రం సముదాయం '%s' ను కలిగియుండలేదు "
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "మీట దస్త్రం '%s' తాళంను కలిగియుండలేదు. "
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "'%s' మీట దస్త్రం యొక్క మీటను కలిగియున్నది,దాని విలువ '%s' యుటిఫ్-8 "
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "'%s' మీట దస్త్రం యొక్క మీట ను కలిగియున్నది,దాని విలువను చదువుటకు సాధ్యపడదు."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"'%s' మీట దస్త్రం యొక్క మీట ను గ్రూప్ '%s' లో కలిగియున్నది,దాని విలువను చదువుటకు సాధ్యపడదు."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "'%s' మీట దస్త్రం యొక్క మీట ను గ్రూప్ '%s' లో కలిగియుండలేదు "
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr " మీట దస్త్రం గీత చివర ఎస్పేప్ అక్షరము కలదు"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr " '%s' మీట దస్త్రం నిస్సారమైన ఎస్పేప్ వరుస కలదు "
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' విలువను సంఖ్య గా చదువుటకు సాధ్యపడదు."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "పూర్ణాంకం విలువ '%s' విస్రృతిలో లేదు"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' విలువను ఫ్లోట్ సంఖ్యగా చదువుటకు సాధ్యపడదు."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "%s' విలువను బులియన్ గా చదువుటకు సాధ్యపడదు."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "చాలపెద్ద లెక్కింపు విలువ %sకు పంపబడింది"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "స్ట్రీమ్ యిప్పటికే మూయబడింది"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "ఆపరేషన్ రద్దైనది"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "తెలియని రకము"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s దస్త్రమురకము"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s రకము"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "స్ట్రీమ్ యొక్క అనుకోని త్వరిత ముగింపు"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "నామములేని"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "డెస్కుటాప్ దస్త్రము Exec క్షేత్రమును తెలుపలేదు"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "అనువర్తనంకు కావలిసిన ‍టెర్మినల్‌ను కనుగొనలేక పోయింది"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "వినియోగదారి అనువర్తన ఆకృతీకరణ సంచయం %sను సృష్టించలేకపోయింది: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "వినియోగదారి MIME ఆకృతీకరణ సంచయం %sను సృష్టించలేకపోయింది: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "వినియోగదారి డెస్కుటాప్ దస్త్రమును సృష్టించలేకపోయింది %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s కొరకు మలిచిన నిర్వచనము"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "డ్రైవ్ బయటకుపంపుదానిని చేయలేదు"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "మాధ్యమం కొరకు ఎన్నికను డ్రైవ్ చేయలేదు"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem ఎన్కోడింగ్ యొక్క వర్షన్ %dను సంభాలించలేదు"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem ఎన్కోడింగ్‌నందు టోకెన్సు (%d)యొక్క తప్పుగావున్న సంఖ్య"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ఎన్కోడింగ్ యొక్క వర్షన్ %dను సంభాలించలేదు"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon ఎన్కోడింగ్‌నందు టోకెన్సు (%d)యొక్క తప్పుగావున్న సంఖ్య"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon కొరకు GEmblem కావలసివుంది"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ఆపరేషన్ మద్దతీయబడలేదు"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "వినియోగదారికి దృగ్గోచరమగు మౌంట్ లేదు"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "డైరెక్టరీనందు నకలు తీయలేదు"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "డైరెక్టరీని డైరెక్టరీకి నకలు తీయలేము"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "లక్ష్యపు దస్త్రము వుంది"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "డైరెక్టరీని పునరావృతముగా నకలుతీయలేదు"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "ప్రత్యేక దస్త్రమును నకలుతీయలేదు"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "చెల్లని సిమ్‌లింక్ విలువ యివ్వబడినది"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ట్రాష్ మద్దతీయలేదు"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "దస్త్రము నామములు '%c'ని కలిగిలేవు"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "వాల్యూమ్ మౌంట్‌ను చేయలేకపోయింది"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ఈ దస్త్రము సంబాలించుతున్నట్లు యెటువంటి అనువర్తనము నమోదుకాలేదు"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ఎన్యూమరేటర్ మూయబడినది"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "దస్త్ర యెన్యూమరేటర్ యిప్పటికే వొక ఆపరేషన్‌ను కలిగివుంది"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "దస్త్ర యెన్యూమరేటర్ యిప్పటికే మూయబడివుంది"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "దస్త్రము"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "ప్రతిమను కలిగివున్న దస్త్రము"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon ఎన్కోడింగ్ యొక్క వర్షన్ %dను సంభాలించలేదు"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon కొరకు తప్పుగావున్న ఇన్పుట్ డాటా"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "స్ట్రీమ్ క్వరీ సమాచారంను మద్దతీయుటలేదు (_i)"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "సీక్ స్ట్రీమ్‌పైన మద్దతీయుటలేదు"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "ట్రంకేట్ ఇన్‌పుట్ స్ట్రీమ్‌పైన అనుమతించబడుటలేదు"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "స్ట్రీమ్‌పైన ట్రంకేట్ మద్దతీయుటలేదు"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "తప్పుడు సంఖ్యా టోకెన్లు (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "క్లాస్ నామము %s కొరకు ఏ రకములేదు"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "రకము %s GIcon యింటర్‌ఫేస్‌ను తయారుచేయలేదు"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "రకము %s వర్గీకరించబడలేదు"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "తప్పుగావున్న వర్షన్ సంఖ్య: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "GIcon యింటర్ఫేస్ పైన రకము %s అనునది from_tokens()ను తయారుచేయలేదు"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "ప్రతిమ ఎన్కోడింగును పంపిణిచేసిన వర్షన్ సంభాలించలేదు"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "ఇన్‌పుట్ స్ట్రీమ్ చదువుటను అభివృద్ది చేయుటలేదు"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "ఈ స్ట్రీమ్ యిప్పటికే వొక ఆపరేషన్‌ను కలిగివుంది"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "అప్రమేయ స్థానిక మానిటర్ రకమును కనుగొనలేక పోయింది"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "చెల్లని దస్త్రనామము %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "దస్త్రవ్యవస్థ సమాచారంను కనుగొనుటలో దోషము : %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "రూట్ డైరెక్టరీని పునఃనామకరణ చేయలేము"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "దస్త్రమును పునఃనామకరణ చేయుటలో దోషము: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "దస్త్రమును పునఃనామకరణ చేయలేము, దస్త్రనామము యిప్పటికే వుంది"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "చెల్లని దస్త్రనామము"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "దస్త్రమును తెరుచుటలో దోషము : %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "డెరెక్టరీని తెరువలేము"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "దస్త్రమును తొలగించుటలో దోషము: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "దస్త్రమును ట్రాష్ చేయుటలో దోషము : %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ట్రాష్ డెరెక్టరీ(dir)ను సృష్టించలేక పోయింది %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "ట్రాష్ కొరకు పైస్థాయి డైరెక్టరీని కనుగొనలేక పోయింది"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "ట్రాష్ డైరెక్టీని కనుగోనలేక పోయింది లేదా సృష్టించలేక పోయింది"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ట్రాషింగ్ సమాచారపు దస్త్రమును సృష్టించలేక పోయింది: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "దస్త్రమును ట్రాష్ చేయలేక పోయింది: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "డెరెక్టరీని సృష్టించుటలో దోషము: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "చిహ్నరూప లింకును చేయుటలో దోషము: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "దస్త్రమును కదుపుటలో దోషము: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "డెరెక్టరీని డెరెక్టరీకి కదుపలేము"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "బ్యాకప్ దస్త్రము సృష్టీకరణ విఫలమైంది"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "టార్గెట్ దస్త్రమును తొలగించుటలో దోషము: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "మౌంట్స్‍ మధ్య కదలిక మద్దతీయబడదు"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "యాట్రిబ్యూట్ విలువ తప్పక NULL-కాకూడదు"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "చెల్లని యాట్రిబ్యూట్ రకము (స్ట్రింగ్ ఊహించినది)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "పొడిగించిన యాట్రిబ్యూట్ చెల్లని నామము"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "పొడిగించిన యాట్రిబ్యూట్ అమర్చుటలో దోషము '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "దస్త్రము '%s'ను ప్రారంభించుటలో దోషము: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (చెల్లని యెన్కోడింగ్)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "దస్త్రము వివరణిని ప్రతిపాదించుటలో దోషము: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "చెల్లని యాట్రిబ్యూట్ రకము (uint32 అనుకోబడినది)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "చెల్లని యాట్రిబ్యూట్ రకము (uint64 అనుకోబడినది)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "చెల్లని యాట్రిబ్యూట్ రకము (బైట్ స్ట్రింగ్ అనుకోబడినది)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "అనుమతులను అమర్చుటలో దోషము: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "యజమానిని అమర్చుటలో దోషము: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "సిమ్‌లింకు తప్పక NULL-కాకూడదు"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "సింమ్‌లింకు అమర్చుటలో దోషము: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "సింమ్‌లింకు అమర్చుటలో దోషము: దస్త్రము సిమ్‌లింకు కాదు"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux సందర్భం తప్పక NULL-కాకూడదు"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux సందర్భం అమర్చుటలో దోషము: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux ఈ సిస్టమ్‌పైన చేతనపరచ బడిలేదు"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "యాట్రిబ్యూట్ %sను అమర్చుట మద్దతీయుటలేదు"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "దస్త్రము నుండి చదువుటలో దోషము: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "దస్త్రముకు చూడుటలో దోషము: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "దస్త్రము మూయుటలో దోషము: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "అప్రమేయ స్థానిక దస్త్రపు మానిటర్ రకమును కనుగొనలేక పోయింది"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "దస్త్రముకు వ్రాయుటలో దోషము: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "పాత బ్యాకప్ లింకును తొలగించుటలో దోషము: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "బ్యాకప్ నకలును సృష్టించుటలో దోషము: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "తాత్కాలిక దస్త్రమును పునఃనామకరణ చేయుటలో దోషము: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "దస్త్రమును ట్రంకేట్‌ చేయుటలో దోషము: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "దస్త్రము '%s'ను తెరువుటలో దోషము: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "లక్ష్యపు దస్త్రము వొక డైరెక్టరీ"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "లక్ష్యపు దస్త్రము వొక సాదారణ దస్త్రముకాదు"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "ఆ దస్త్రము బహిర్గతముగా మార్చబడినది"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "పాత దస్త్రమును తొలగించుటలో దోషము: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "చెల్లని GSeekType పంపిణీచేయబడింది"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "చెల్లని యెదురుచూపు అభ్యర్ధన"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStreamను కుదించ లేము"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "గరిష్ఠ డాటా యెరే పరిమితిని చేరినది"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "మెమోరీ అవుట్‌పుట్ స్ట్రీమ్ పునఃపరిమాణము చేయలేము"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "మెమోరీ అవుట్‌పుట్ స్ట్రీమ్‌ను పునఃపరిమాణము చేయుటలో విఫలమైంది"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "మౌంట్ అన్‌మౌంట్‌ను అభివృద్దిచేయుట లేదు"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "మౌంట్ నిష్క్రమణను అభివృద్ది చేయుటలేదు"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "మౌంట్ రీమౌంట్‌ను అభివృద్ది చేయుటలేదు"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "సారము రకం ఊహింపును మౌంట్ అభివృద్దిచేయుటలేదు"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "ఏకకాల సారము రకం ఊహింపును మౌంట్ అభివృద్ది చేయుటలేదు"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "అవుట్‌పుట్ స్ట్రీమ్ వ్రాయుటను అభివృద్దిచేయుటలేదు"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "మూల స్ట్రీమ్ యిప్పటికే మూయబడివుంది"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "నామము"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "ప్రతిమయొక్క నామము"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "నామములు"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "ప్రతిమ నామములను కలిగివున్న ఎరే"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "అప్రమేయ ఫాల్‌బ్యాక్‌లను వుపయోగించుము"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"'-' అక్షరముల వద్ద నామము తరిగింపు ద్వారా కనుగొనబడిన అప్రమేయ ఫాల్‌బ్యాక్‌లను వుపయోగించాలా. ఒకటికన్నా "
+"యెక్కువ నామములు యిస్తే మొదటిదాని తర్వాతివాటిని పట్టించుకోదు."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon ఎన్కోడింగుయొక్క వర్షన్ %dను సంభాలించలేదు"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "దస్త్రము వివరణి"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "దీనినుండి చదువుటకు దస్త్రము వివరణి"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "దస్త్రము వివరణిని మూయుము"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "స్ట్రీమ్ మూయబడినప్పుడు దస్త్ర వివరణిను కూడా మూయాలా"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "యునిక్స్‍‌నుండి చదువుటలో దోషము: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "యునిక్స్‍‌ను మూయుటలో దోషము: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "దస్త్రవ్యవస్థ రూట్"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "దీనికి వ్రాయుటకు దస్త్ర వివరణి"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "యునిక్స్‍‌కు వ్రాయుటలో దోషము: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "వాల్యూమ్ నిష్క్రమణిని అభివృద్ది చేయలేదు"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "అనువర్తనమును కనుగొన లేదు"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "అనువర్తనంను ఆరంభించుటలో దోషము: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URIలు మద్దతీయుటలేదు"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 నందు సహసంభంద మార్పులు మద్దతీయుటలేదు"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 నందు సహసంభంద సృష్టీకరణ మద్దతీయుటలేదు"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ప్రవేశాలను మరుగుపరచవద్దు"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "పొడవైన జాబితాకరణ రూపాన్ని ఉపయోగించుము"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 0000000..90a48e5
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,1849 @@
+# Thai translation of glib.
+# Copyright (C) 2005-2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the glib package.
+# Theppitak Karoonboonyanan <thep@linux.thai.net>, 2005-2009.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.14.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-20 12:07+0700\n"
+"Last-Translator: Theppitak Karoonboonyanan <thep@linux.thai.net>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "พบแอตทริบิวต์ '%s' ที่ไม่ต้องการ สำหรับอิลิเมนต์ '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "ไม่พบแอตทริบิวต์ '%s' สำหรับอิลิเมนต์ '%s'"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "พบแท็ก '%s' ที่ไม่ต้องการ ขณะที่ต้องการแท็ก '%s'"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "พบแท็ก '%s' ที่ไม่ต้องการภายใน '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "ไม่พบแฟ้มที่คั่นหน้าที่ใช้การได้ในไดเรกทอรีข้อมูล"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "มีที่คั่นหน้าสำหรับ URI '%s' อยู่ก่อนแล้ว"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "ไม่พบที่คั่นหน้าสำหรับ URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "ไม่ได้กำหนดชนิด MIME ไว้ในที่คั่นหน้าสำหรับ URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "ไม่ได้กำหนดแฟล็กส่วนตัวไว้ในที่คั่นหน้าสำหรับ URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "ไม่ได้กำหนดกลุ่มไว้ในที่คั่นหน้าสำหรับ URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "ไม่มีโปรแกรมประยุกต์ชื่อ '%s' ที่ลงทะเบียนที่คั่นหน้าสำหรับ '%s' ไว้"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "กระจายบรรทัดคำสั่ง '%s' ด้วย URI '%s' ไม่สำเร็จ"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "ไม่รองรับการแปลงรหัสอักขระจาก '%s' ไปเป็น '%s'"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "ไม่สามารถเปิดตัวแปลงรหัสอักขระจาก '%s' ไปเป็น '%s' ได้"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "มีลำดับไบต์ที่ไม่ถูกต้องในข้อมูลที่ป้อนให้ตัวแปลงรหัส"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "เกิดข้อผิดพลาดระหว่างแปลงรหัส: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "มีลำดับไบต์ไม่เต็มอักขระอยู่ที่ท้ายข้อมูลเข้า"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ไม่สามารถแปลงสตริงซ่อมเสริม '%s' ให้เป็นรหัส '%s' ได้"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s' ไม่ใช่ URI สัมบูรณ์ที่ใช้ scheme \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "URI ของแฟ้มท้องถิ่น '%s' ต้องไม่มี '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' ใช้ไม่ได้"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "ชื่อโฮสต์ของ URI '%s' ใช้ไม่ได้"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' มีอักขระหลีกที่ไม่ถูกต้อง"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "ชื่อพาธ '%s' ไม่ใช่พาธเต็ม"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "ชื่อโฮสต์ผิดรูปแบบ"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "เกิดข้อผิดพลาดขณะเปิดไดเรกทอรี '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "ไม่สามารถจองหน่วยความจำ %lu ไบต์เพื่ออ่านแฟ้ม \"%s\" ได้"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "เกิดข้อผิดพลาดขณะอ่านแฟ้ม '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "แฟ้ม \"%s\" ใหญ่เกินไป"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "อ่านข้อมูลจากแฟ้ม '%s' ไม่สำเร็จ: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "เปิดแฟ้ม '%s' ไม่สำเร็จ: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "อ่านแอตทริบิวต์ของแฟ้ม '%s' ไม่สำเร็จ: fstat() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "เปิดแฟ้ม '%s' ไม่สำเร็จ: fdopen() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "เปลี่ยนชื่อแฟ้ม '%s' ไปเป็น '%s' ไม่สำเร็จ: g_rename() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "สร้างแฟ้ม '%s' ไม่สำเร็จ: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "เปิดแฟ้ม '%s' เพื่อเขียนไม่สำเร็จ: fdopen() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "เขียนแฟ้ม '%s' ไม่สำเร็จ: fwrite() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "เขียนแฟ้ม '%s' ไม่สำเร็จ: fwrite() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "เขียนแฟ้ม '%s' ไม่สำเร็จ: fwrite() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ปิดแฟ้ม '%s' ไม่สำเร็จ: fclose() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "ไม่สามารถลบแฟ้ม '%s' ที่มีอยู่ได้: g_unlink() ล้มเหลว: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "แม่แบบ '%s' ใช้ไม่ได้ ไม่ควรมี '%s'"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "แม่แบบ '%s' ไม่มี XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "อ่านลิงก์สัญลักษณ์ '%s' ไม่สำเร็จ: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "ไม่รองรับลิงก์สัญลักษณ์"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "ไม่สามารถเปิดตัวแปลงรหัสอักขระจาก '%s' ไปเป็น '%s' ได้: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "ไม่สามารถอ่านข้อมูลแบบดิบใน g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "มีข้อมูลตกค้างไม่ได้แปลงอยู่ในบัฟเฟอร์สำหรับอ่าน"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "แชนเนลจบด้วยข้อมูลไม่เต็มอักขระ"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "ไม่สามารถอ่านข้อมูลแบบดิบใน g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "เปิดแฟ้ม '%s' ไม่สำเร็จ: open() ล้มเหลว: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "แม็ปแฟ้ม '%s' ไม่สำเร็จ: mmap() ล้มเหลว: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "มีข้อผิดพลาดที่บรรทัด %d อักขระที่ %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "มีข้อผิดพลาดที่บรรทัด %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "พบเอนทิตี '&;' ซึ่งไม่ถูกต้อง ค่าที่ใช้ได้คือ: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"อักขระ '%s' ไม่สามารถใช้ขึ้นต้นชื่อเอนทิตีได้ อักขระ & ใช้เริ่มเอนทิตี ถ้าเครื่องหมาย ampersand "
+"นี้ไม่ได้เจตนาให้เป็นเอนทิตี ต้องหลีกโดยแทนด้วย &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "อักขระ '%s' ใช้ในชื่อเอนทิตีไม่ได้"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "ไม่รู้จักเอนทิตีชื่อ '%s'"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"เอนทิตีไม่ได้ปิดด้วยอัฒภาค เป็นไปได้สูงที่คุณอาจใช้ ampersand โดยไม่ได้จงใจให้เริ่มเอนทิตี ถ้าใช่ "
+"ก็จงหลีก ampersand โดยแทนด้วย &amp; เสีย"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"ไม่สามารถแจง '%-.*s' ซึ่งควรจะเป็นตัวเลขภายในตัวอ้างอิงอักขระ (เช่น &#234;) "
+"เป็นไปได้ว่าตัวเลขอาจจะมากเกินไป"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "ตัวอ้างอิงอักขระ '%-.*s' ไม่ได้เข้ารหัสอักขระที่เป็นไปได้"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "ตัวอ้างอิงอักขระว่างเปล่า ควรจะมีตัวเลข เช่น &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"ตัวอ้างอิงอักขระไม่ได้ปิดด้วยอัฒภาค เป็นไปได้สูงที่คุณอาจใช้ ampersand โดยไม่ได้จงใจให้เริ่มเอนทิตี "
+"ถ้าใช่ ก็จงหลีก ampersand โดยแทนด้วย &amp; เสีย"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ตัวอ้างอิงเอนทิตีไม่สมบูรณ์"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "ตัวอ้างอิงอักขระไม่สมบูรณ์"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "ข้อความลงรหัส UTF-8 ไม่ถูกต้อง - ลำดับซ้อนเหลื่อมกัน"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "ข้อความลงรหัส UTF-8 ไม่ถูกต้อง - ไม่ได้เริ่มด้วยไบต์ที่เป็นต้นอักขระ"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "ข้อความลงรหัส UTF-8 ไม่ถูกต้อง - ข้อความที่ผิด: '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "เอกสารต้องเริ่มด้วยอิลิเมนต์ (เช่น <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "'%s' ไม่ใช่อักขระที่ใช้ตามหลัง '<' ได้ จึงไม่สามารถใช้ขึ้นต้นชื่ออิลิเมนต์ได้"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "พบอักขระแปลกปลอม '%s' ในขณะที่มองหาอักขระ '>' ที่จะมาปิดแท็กอิลิเมนต์เปล่า '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"พบอักขระแปลกปลอม '%s' ในขณะที่กำลังมองหา '=' หลังชื่อแอตทริบิวต์ '%s' ของอิลิเมนต์ '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"พบอักขระแปลกปลอม '%s' ในขณะที่กำลังมองหา '>' หรือ '/' ที่จะมาปิดแท็กตั้งต้นของอิลิเมนต์ '%"
+"s' หรือไม่ก็เป็นแอตทริบิวต์ เป็นไปได้ว่าคุณกำลังใช้อักขระที่ใช้ไม่ได้ในชื่อแอตทริบิวต์"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"พบอักขระแปลกปลอม '%s' ในขณะที่กำลังมองหาอัญประกาศเปิดหลัง '=' "
+"ในการกำหนดค่าให้กับแอตทริบิวต์ '%s' ของอิลิเมนต์ '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "'%s' ไม่ใช่อักขระที่ตามหลัง '</' ได้ '%s' ไม่สามารถใช้ขึ้นต้นชื่ออิลิเมนต์ได้"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "'%s' ไม่ใช่อักขระที่ใช้ตามหลังชื่ออิลิเมนต์ '%s' ในแท็กปิดได้ อักขระเดียวที่อนุญาตคือ '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "พบการปิดอิลิเมนต์ '%s' แต่ไม่มีอิลิเมนต์ใดเปิดอยู่"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "พบการปิดอิลิเมนต์ '%s' แต่อิลิเมนต์ที่เปิดอยู่คือ '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "เอกสารว่างเปล่า หรือมีแต่อักขระช่องว่าง"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "เอกสารจบแบบผิดปกติหลังจากวงเล็บแหลม '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "เอกสารจบแบบผิดปกติ โดยยังมีอิลิเมนต์เปิดอยู่ - '%s' คืออิลิเมนต์ที่เปิดล่าสุด"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "เอกสารจบแบบผิดปกติ ในขณะที่กำลังมองหาวงเล็บแหลมที่จะมาปิดแท็ก <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "เอกสารจบแบบผิดปกติระหว่างกลางชื่ออิลิเมนต์"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "เอกสารจบแบบผิดปกติระหว่างกลางชื่อแอตทริบิวต์"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "เอกสารจบแบบผิดปกติระหว่างกลางแท็กเปิดอิลิเมนต์"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr "เอกสารจบแบบผิดปกติหลังจากเครื่องหมาย '=' หลังชื่อแอตทริบิวต์ โดยไม่มีค่าของแอตทริบิวต์"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "เอกสารจบแบบผิดปกติระหว่างกลางค่าแอตทริบิวต์"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "เอกสารจบแบบผิดปกติระหว่างกลางแท็กปิดสำหรับอิลิเมนต์ '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "เอกสารจบแบบผิดปกติระหว่างกลางหมายเหตุหรือคำสั่งประมวลผล"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "ออบเจกต์เสียหาย"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "ข้อผิดพลาดภายในหรือออบเจกต์เสียหาย"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "หน่วยความจำเต็ม"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "เกินขอบเขตการถอยคืน"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "แพตเทิร์นมีรายการที่ไม่รองรับในการจับคู่ทีละส่วน"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "ข้อผิดพลาดภายใน"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "ไม่รองรับการใช้การอ้างอิงย้อนกลับเป็นเงื่อนไขในการจับคู่ทีละส่วน"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "เกินขอบเขตการเรียกตัวเอง"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "เกินขอบเขตพื้นที่ทำงานสำหรับสตริงย่อยเปล่า"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "ชุดของแฟล็กการขึ้นบรรทัดใหม่มีค่าไม่เข้ากัน"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "ข้อผิดพลาดไม่ทราบสาเหตุ"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "พบ \\ ที่ท้ายแพตเทิร์น"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "พบ \\c ที่ท้ายแพตเทิร์น"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "พบอักขระที่ไม่รู้จักตามหลัง \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "ห้ามใช้รหัสหลีกเปลี่ยนตัวพิมพ์ใหญ่-เล็ก (\\l, \\L, \\u, \\U) ที่ตำแหน่งนี้"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "ค่าตัวเลขผิดพลาดในตัวระบุปริมาณ {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "ค่าตัวเลขสูงเกินไปในตัวระบุปริมาณ {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "ไม่มี ] ปิดในคลาสอักขระ"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "มีลำดับอักขระหลีกที่ไม่ถูกต้องในคลาสอักขระ"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "ค่าช่วงผิดพลาดในคลาสอักขระ"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "ไม่มีสิ่งที่จะซ้ำ"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "พบอักขระที่ไม่รู้จักหลัง (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "พบอักขระที่ไม่รู้จักหลัง (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "พบอักขระที่ไม่รู้จักหลัง (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "ใช้ชื่อคลาสอักขระของ POSIX ได้ในคลาสเท่านั้น"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "ไม่มี ) ปิด"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "พบ ) โดยไม่มี ( เปิด"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R หรือ (?[+-]ตัวเลข ต้องตามด้วย ) เสมอ"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "มีการอ้างถึงแพตเทิร์นย่อยที่ไม่มีอยู่"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "ไม่มี ) หลังหมายเหตุ"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "นิพจน์เรกกิวลาร์ยาวเกินไป"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "จองหน่วยความจำไม่สำเร็จ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "แพตเทิร์นตรวจค่าย้อนไม่ได้มีความยาวคงที่"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "ตัวเลขหรือชื่อผิดรูปแบบหลัง (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "กลุ่มเงื่อนไขมีทางเลือกที่เป็นไปได้มากกว่าสองทาง"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "ต้องการแพตเทิร์นตรวจค่าหลัง (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "พบชื่อคลาสของ POSIX ที่ไม่รู้จัก"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "ไม่รองรับ collating element ของ POSIX"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "ค่าอักขระในลำดับ \\x{...} มีค่าสูงเกินไป"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "เงื่อนไข (?(0) ใช้ไม่ได้"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "ใช้ \\C ในแพตเทิร์นตรวจค่าย้อนไม่ได้"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "การเรียกตัวเองมีโอกาสวนรอบไม่รู้จบ"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "ไม่มีตัวปิดในชื่อแพตเทิร์นย่อย"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "มีแพตเทิร์นย่อยชื่อซ้ำกัน"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "ลำดับ \\P หรือ \\p ผิดรูปแบบ"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "พบชื่อคุณสมบัติที่ไม่รู้จักหลัง \\P หรือ \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "ชื่อแพตเทิร์นย่อยยาวเกินไป (ความยาวสูงสุดคือ 32 อักขระ)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "มีแพตเทิร์นย่อยมากเกินไป (สูงสุดได้ 10,000 แพตเทิร์น)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "ค่าเลขฐานแปดสูงกว่า \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "กลุ่ม DEFINE มีทางเลือกมากกว่าหนึ่งทาง"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "ซ้ำกลุ่ม DEFINE ไม่ได้"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "ตัวเลือก NEWLINE ขัดแย้งกันเอง"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g ไม่ได้ตามด้วยชื่อในวงเล็บปีกกา หรือตัวเลขที่ไม่ใช่ศูนย์ที่อาจอยู่ในวงเล็บปีกกา"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "พบการซ้ำที่ไม่คาดหมาย"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "โค้ดล้น"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "ใช้พื้นที่ทำงานสำหรับการคอมไพล์หมดแล้ว"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "ไม่พบแพตเทิร์นย่อยที่ตรวจสอบไปก่อนหน้าที่อ้างถึง"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "เกิดข้อผิดพลาดขณะจับคู่นิพจน์เรกกิวลาร์ %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "ไลบรารี PCRE ถูกคอมไพล์มาแบบไม่รองรับ UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "ไลบรารี PCRE ถูกคอมไพล์มาแบบไม่รองรับคุณสมบัติ UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "เกิดข้อผิดพลาดขณะแจงนิพจน์เรกกิวลาร์ %s ที่อักขระที่ %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "เกิดข้อผิดพลาดขณะออปติไมซ์นิพจน์เรกกิวลาร์ %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "ต้องการเลขฐานสิบหกหรือ '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "ต้องการเลขฐานสิบหก"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "ไม่มี '<' ในตัวอ้างอิงสัญลักษณ์"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "ตัวอ้างอิงสัญลักษณ์ไม่สมบูรณ์"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "ตัวอ้างอิงสัญลักษณ์มีความยาวเป็นศูนย์"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "ต้องการตัวเลข"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "ตัวอ้างอิงสัญลักษณ์ไม่ถูกต้อง"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "'\\' ปราศจากข้อมูลอยู่ที่ท้ายสตริง"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "ลำดับอักขระหลีกไม่รู้จัก"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "เกิดข้อผิดพลาดขณะแจงข้อความสำหรับแทนที่ \"%s\" ที่อักขระที่ %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ข้อความคำพูดไม่ได้ขึ้นต้นด้วยอัญประกาศ"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "พบอัญประกาศไม่เข้าคู่ในบรรทัดคำสั่งหรือข้อความคำพูดของเชลล์"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "ข้อความจบทันทีหลังอักขระ '\\' (ข้อความที่ว่าคือ '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "ข้อความจบเสียก่อนจะพบอัญประกาศที่เข้าคู่กับ %c (ข้อความที่ว่าคือ '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "ข้อความว่างเปล่า (หรือมีแต่อักขระช่องว่าง)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "อ่านข้อมูลจากโพรเซสลูกไม่สำเร็จ"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "สร้างไปป์เพื่อสื่อสารกับโพรเซสลูกไม่สำเร็จ (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "อ่านข้อมูลจากไปป์จากโพรเซสลูกไม่สำเร็จ (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "เข้าไปที่ไดเรกทอรี '%s' ไม่สำเร็จ (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "ดำเนินงานโพรเซสลูกไม่สำเร็จ (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "ชื่อโปรแกรมผิดรูปแบบ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "สตริงผิดรูปแบบในเวกเตอร์ของอาร์กิวเมนต์ที่ตำแหน่ง %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "สตริงผิดรูปแบบในตัวแปรสภาพแวดล้อม: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "ไดเรกทอรีใช้งานมีรูปแบบไม่ถูกต้อง: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "ดำเนินงานโปรแกรมช่วยไม่สำเร็จ (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"เกิดข้อผิดพลาดไม่คาดหมายใน g_io_channel_win32_poll() ระหว่างอ่านข้อมูลจากโพรเซสลูก"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "อ่านข้อมูลจากโพรเซสลูกไม่สำเร็จ (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "เกิดข้อผิดพลาดไม่คาดหมายใน select() ระหว่างอ่านข้อมูลจากโพรเซสลูก (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "เกิดข้อผิดพลาดไม่คาดหมายใน waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork ไม่สำเร็จ (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "ดำเนินงานโพรเซสลูก \"%s\" ไม่สำเร็จ (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "เปลี่ยนทิศทางข้อมูลเข้าหรือออกจากโพรเซสลูกไม่สำเร็จ (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "fork โพรเซสลูกไม่สำเร็จ (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "เกิดข้อผิดพลาดไม่ทราบสาเหตุขณะดำเนินงานโพรเซสลูก \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "อ่านข้อมูลจากไปป์จากโพรเซสลูกได้ไม่เพียงพอ (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "อักขระอยู่นอกช่วงของ UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "มีลำดับข้อมูลที่ไม่ถูกต้องในข้อมูลที่ป้อนให้ตัวแปลงรหัส"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "อักขระอยู่นอกช่วงของ UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "วิธีใช้:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "ตัวเลือกแสดงวิธีใช้:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "แสดงวิธีใช้ตัวเลือกต่างๆ"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "แสดงวิธีใช้ตัวเลือกต่างๆ ทั้งหมด"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "ตัวเลือกของโปรแกรม:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "ไม่สามารถแจงค่าจำนวนเต็ม '%s' สำหรับ %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "ค่าจำนวนเต็ม '%s' สำหรับ %s ออกนอกช่วงที่กำหนด"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "ไม่สามารถแจงค่า double '%s' สำหรับ %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "ค่า double '%s' สำหรับ %s ออกนอกช่วงที่กำหนด"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "เกิดข้อผิดพลาดขณะแจงตัวเลือก: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "ขาดอาร์กิวเมนต์สำหรับ %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "ไม่รู้จักตัวเลือก %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "ไม่พบแฟ้มคีย์ที่ใช้การได้ในไดเรกทอรีแหล่งค้นหา"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "ไม่ใช่แฟ้มปกติ"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "แฟ้มว่างเปล่า"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "แฟ้มคีย์มีบรรทัด '%s' ซึ่งไม่ใช่รูปแบบคู่คีย์-ค่า, กลุ่ม, หรือหมายเหตุ ที่ถูกต้อง"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "ชื่อกลุ่มผิดรูปแบบ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "แฟ้มคีย์ไม่ได้ขึ้นต้นด้วยกลุ่ม"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "ชื่อคีย์ผิดรูปแบบ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "แฟ้มคีย์มีเนื้อหาเป็นรหัสอักขระ '%s' ซึ่งไม่รองรับ"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "แฟ้มคีย์ไม่มีกลุ่ม '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "แฟ้มคีย์ไม่มีคีย์ '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "แฟ้มคีย์มีคีย์ '%s' ซึ่งมีค่า '%s' ซึ่งไม่ใช่รูปแบบ UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "แฟ้มคีย์มีคีย์ '%s' ซึ่งมีค่าที่ไม่สามารถตีความได้"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "แฟ้มคีย์มีคีย์ '%s' ในกลุ่ม '%s' ซึ่งมีค่าที่ไม่สามารถตีความได้"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "แฟ้มคีย์ไม่มีคีย์ '%s' ในกลุ่ม '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "แฟ้มคีย์มีอักขระหลีกที่ท้ายบรรทัด"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "แฟ้มคีย์มีลำดับหลีก '%s' ที่ไม่ถูกต้อง"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "ค่า '%s' ไม่สามารถตีความเป็นตัวเลขได้"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "ค่าจำนวนเต็ม '%s' ออกนอกช่วง"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "ค่า '%s' ไม่สามารถตีความเป็นตัวเลข float ได้"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "ค่า '%s' ไม่สามารถตีความเป็นบูลีนได้"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "มีการส่งค่า count ที่สูงเกินไปมาให้ %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "สตรีมถูกปิดไปแล้ว"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "การกระทำถูกยกเลิก"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "ชนิดข้อมูลไม่รู้จัก"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "ชนิดแฟ้ม %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "ชนิด %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "พบจุดจบสตรีมก่อนกำหนด"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "ไม่มีชื่อ"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "แฟ้มเดสก์ท็อปไม่ได้ระบุเขตข้อมูล Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "หาเทอร์มินัลซึ่งต้องใช้ในการเปิดโปรแกรมไม่พบ"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "ไม่สามารถสร้างโฟลเดอร์ %s สำหรับเก็บค่าตั้งโปรแกรมของผู้ใช้: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "ไม่สามารถสร้างโฟลเดอร์ %s สำหรับเก็บค่าตั้ง MIME ของผู้ใช้: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "ไม่สามารถสร้างแฟ้มเดสก์ท็อป %s สำหรับผู้ใช้"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "ข้อกำหนดกำหนดเองสำหรับ %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ไดรว์ไม่สามารถใช้คำสั่งดันแผ่นออกได้"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ไดรว์ไม่สามารถใช้คำสั่งตรวจสอบสื่อได้"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "ไม่สามารถจัดการกับรหัสของ GEmblem รุ่น %d ได้"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "จำนวนโทเคนในรหัสของ GEmblem (%d) ไม่ถูกต้อง"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "ไม่สามารถจัดการกับรหัสของ GEmblemedIcon รุ่น %d ได้"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "จำนวนโทเคนในรหัสของ GEmblemedIcon (%d) ไม่ถูกต้อง"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "ต้องการข้อมูล GEmblem สำหรับ GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "ไม่รองรับการกระทำนี้"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "ไม่มีจุดเมานท์ที่บรรจุแฟ้มอยู่"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "ไม่สามารถคัดลอกทับไดเรกทอรี"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "ไม่สามารถคัดลอกไดเรกทอรีทับไดเรกทอรี"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "มีแฟ้มปลายทางอยู่ก่อนแล้ว"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "ไม่สามารถคัดลอกไดเรกทอรีทั้งยวง"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "ไม่สามารถคัดลอกแฟ้มพิเศษได้"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "ได้รับชื่อ symlink ที่ใช้การไม่ได้"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "ไม่รองรับการใช้ถังขยะ"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "ชื่อแฟ้มจะมีอักขระ '%c' ไม่ได้"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "โวลุมไม่รองรับการเมานท์"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "ไม่มีโปรแกรมที่ลงทะเบียนสำหรับจัดการแฟ้มประเภทนี้ไว้"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "ตัวแจงนับถูกปิด"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "ตัวแจงนับแฟ้มมีการกระทำค้างอยู่"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "ตัวแจงนับแฟ้มถูกปิดไปแล้ว"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "แฟ้ม"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "แฟ้มที่เก็บไอคอน"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "ไม่สามารถจัดการกับรหัสของ GFileIcon รุ่น %d ได้"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "ข้อมูลเข้าของ GFileIcon ไม่ถูกต้อง"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "สตรีมไม่รองรับ query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "สตรีมไม่รองรับการเลื่อนตำแหน่งอ่านเขียน"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "สตรีมข้อมูลเข้าไม่สามารถตัดท้ายทิ้งได้"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "สตรีมไม่รองรับการตัดท้ายทิ้ง"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "จำนวนโทเคน (%d) ไม่ถูกต้อง"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "ไม่มีชนิดสำหรับคลาสชื่อ %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "ชนิด %s ไม่ได้ทำอินเทอร์เฟซ GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "ชนิด %s ไม่ได้เป็นคลาส"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "เลขรุ่นมีรูปแบบไม่ถูกต้อง: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "ชนิด %s ไม่ได้ทำ from_tokens() ของอินเทอร์เฟซ GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "ไม่สามารถจัดการกับรหัสของไอคอนรุ่นที่ระบุได้"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "สตรีมข้อมูลเข้ายังไม่รองรับการอ่าน"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "สตรีมมีการกระทำค้างอยู่"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "ไม่สามารถหาชนิดปริยายของการเฝ้ามองไดเรกทอรีในเครื่อง"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "ชื่อแฟ้ม %s ผิดรูปแบบ"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลของระบบแฟ้ม: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "ไม่สามารถเปลี่ยนชื่อไดเรกทอรีราก"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "เกิดข้อผิดพลาดขณะเปลี่ยนชื่อแฟ้ม: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "ไม่สามารถเปลี่ยนชื่อแฟ้ม เนื่องจากมีแฟ้มชื่อเดียวกันอยู่ก่อนแล้ว"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "ชื่อแฟ้มผิดรูปแบบ"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "เกิดข้อผิดพลาดขณะเปิดแฟ้ม: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "ไม่สามารถเปิดไดเรกทอรี"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "เกิดข้อผิดพลาดขณะลบแฟ้ม: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "เกิดข้อผิดพลาดขณะทิ้งแฟ้มลงถังขยะ: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "สร้างไดเรกทอรีถังขยะ '%s' ไม่สำเร็จ: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "หาไดเรกทอรีระดับบนสุดสำหรับถังขยะไม่สำเร็จ"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "หาหรือสร้างไดเรกทอรีถังขยะไม่สำเร็จ"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "สร้างแฟ้มข้อมูลการทิ้งขยะไม่สำเร็จ: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "ทิ้งแฟ้มลงถังขยะไม่สำเร็จ: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "เกิดข้อผิดพลาดขณะสร้างไดเรกทอรี: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "เกิดข้อผิดพลาดขณะสร้าง symbolic link: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "เกิดข้อผิดพลาดขณะย้ายแฟ้ม: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "ไม่สามารถย้ายไดเรกทอรีทับไดเรกทอรี"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "สร้างแฟ้มสำรองไม่สำเร็จ"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "เกิดข้อผิดพลาดขณะลบแฟ้มปลายทาง: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "ไม่รองรับการย้ายแฟ้มข้ามอุปกรณ์"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "ค่าแอตทริบิวต์ต้องไม่ใช่ตัวชี้ศูนย์"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "ชนิดของแอตทริบิวต์ใช้การไม่ได้ (ต้องการสตริง)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "ชื่อแอตทริบิวต์ส่วนขยายเพิ่มใช้การไม่ได้"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "เกิดข้อผิดพลาดขณะกำหนดแอตทริบิวต์ส่วนขยาย '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "เกิดข้อผิดพลาดขณะ stat แฟ้ม '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (รหัสอักขระไม่ถูกต้อง)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "เกิดข้อผิดพลาดขณะ stat file descriptor: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "ชนิดของแอตทริบิวต์ไม่ถูกต้อง (ต้องการ uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "ชนิดของแอตทริบิวต์ไม่ถูกต้อง (ต้องการ uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "ชนิดของแอตทริบิวต์ไม่ถูกต้อง (ต้องการสตริงของไบต์)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "เกิดข้อผิดพลาดขณะกำหนดสิทธิ์: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "เกิดข้อผิดพลาดขณะกำหนดเจ้าของ: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "symlink ต้องไม่ใช่ตัวชี้ศูนย์"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "เกิดข้อผิดพลาดขณะกำหนด symlink: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "เกิดข้อผิดพลาดขณะกำหนด symlink: แฟ้มไม่ใช่ symlink"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux context ต้องไม่ใช่ตัวชี้ศูนย์"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "เกิดข้อผิดพลาดขณะกำหนด SELinux context: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "ไม่ได้เปิดใช้งาน SELinux ในระบบนี้"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "ไม่รองรับการกำหนดแอตทริบิวต์ %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "เกิดข้อผิดพลาดขณะอ่านข้อมูลจากแฟ้ม: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "เกิดข้อผิดพลาดขณะเลื่อนตำแหน่งอ่านเขียนแฟ้ม: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "เกิดข้อผิดพลาดขณะปิดแฟ้ม: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "ไม่สามารถหาชนิดปริยายของการเฝ้ามองแฟ้มในเครื่อง"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "เกิดข้อผิดพลาดขณะเขียนข้อมูลลงแฟ้ม: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "เกิดข้อผิดพลาดขณะลบแฟ้มสำรองเก่า: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "เกิดข้อผิดพลาดขณะสร้างสำเนาสำรอง: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "เกิดข้อผิดพลาดขณะเปลี่ยนชื่อแฟ้มสำรอง: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "เกิดข้อผิดพลาดขณะตัดท้ายแฟ้มทิ้ง: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "เกิดข้อผิดพลาดขณะเปิดแฟ้ม '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "แฟ้มปลายทางเป็นไดเรกทอรี"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "แฟ้มปลายทางไม่ใช่แฟ้มปกติ"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "แฟ้มถูกแก้ไขโดยโปรแกรมอื่น"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "เกิดข้อผิดพลาดขณะลบแฟ้มเดิม: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "ได้รับค่า GSeekType ที่ใช้การไม่ได้"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "คำสั่งเลื่อนตำแหน่งอ่านเขียนผิดเงื่อนไข"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "ไม่สามารถตัดท้าย GMemoryInputStream ทิ้ง"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "มาถึงขีดจำกัดสูงสุดของแอร์เรย์ข้อมูลแล้ว"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "สตรีมข้อมูลออกในหน่วยความจำไม่สามารถเปลี่ยนขนาดได้"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "เปลี่ยนขนาดสตรีมข้อมูลออกในหน่วยความจำไม่สำเร็จ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "การเมานท์นี้ยังไม่รองรับการเลิกเมานท์"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "การเมานท์นี้ยังไม่รองรับการดันสื่อออก"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "การเมานท์นี้ยังไม่รองรับการเมานท์ซ้ำ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "การเมานท์นี้ยังไม่รองรับการเดาชนิดเนื้อหา"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "การเมานท์นี้ยังไม่รองรับการเดาชนิดเนื้อหาแบบซิงโครนัส"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "สตรีมข้อมูลออกยังไม่รองรับการเขียนข้อมูล"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "สตรีมต้นทางถูกปิดไปแล้ว"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "ชื่อ"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "ชื่อของไอคอน"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "รายชื่อ"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "แอร์เรย์เก็บรายชื่อของไอคอน"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "ใช้ fallback ปริยาย"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"กำหนดว่าจะใช้ fallback ปริยายซึ่งหาได้โดยตัดท้ายชื่อที่อักขระ '-' หรือไม่ ถ้ามีหลายชื่อ "
+"จะใช้เพียงชื่อแรกเท่านั้น"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "ไม่สามารถจัดการกับรหัสของ GThemedIcon รุ่น %d ได้"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "File descriptor"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "File descriptor ที่จะอ่าน"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "ปิด file descriptor"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "กำหนดว่าจะปิด file descriptor ด้วยหรือไม่ เมื่อปิดสตรีม"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "เกิดข้อผิดพลาดขณะอ่านแฟ้มยูนิกซ์: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "เกิดข้อผิดพลาดขณะปิดแฟ้มยูนิกซ์: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "รากระบบแฟ้ม"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "File descriptor ที่จะเขียน"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "เกิดข้อผิดพลาดขณะเขียนข้อมูลลงแฟ้มยูนิกซ์: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "โวลุมยังไม่รองรับการดันสื่อออก"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "หาโปรแกรมไม่พบ"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "เกิดข้อผิดพลาดขณะเรียกโปรแกรม: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "ไม่รองรับ URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "ไม่รองรับการเปลี่ยนแปลงการเชื่อมโยงสำหรับ win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "ไม่รองรับการสร้างการเชื่อมโยงสำหรับ win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "ไม่ต้องซ่อนรายการใด"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "ใช้รูปแบบรายการแบบยาว"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u ไบต์"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "เกิดข้อผิดพลาดขณะสร้างลิงก์สำรอง: %s"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "ไม่สามารถเรียกแฟ้มเดสก์ท็อปที่เพิ่งสร้าง"
+
+#~ msgid "Target file already exists"
+#~ msgstr "มีแฟ้มปลายทางชื่อนี้อยู่ก่อนแล้ว"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr "มีการส่งค่า count ที่สูงเกินไปมาให้ g_input_stream_read_async"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "มีการส่งค่า count ที่สูงเกินไปมาให้ g_input_stream_skip"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr "มีการส่งค่า count ที่สูงเกินไปมาให้ g_input_stream_skip_async"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "มีการส่งค่า count ที่สูงเกินไปมาให้ g_output_stream_write"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr "มีการส่งค่า count ที่สูงเกินไปมาให้ g_output_stream_write_async"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "ไม่สามารถเปลี่ยนโหมดของแฟ้มได้: fork() ล้มเหลว: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "ไม่สามารถเปลี่ยนโหมดของแฟ้มได้: waitpid() ล้มเหลว: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "ไม่สามารถเปลี่ยนโหมดของแฟ้มได้: chmod() ล้มเหลว: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "ไม่สามารถเปลี่ยนโหมดของแฟ้มได้: โพรเซสลูกจบโดยสัญญาณ: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "ไม่สามารถเปลี่ยนโหมดของแฟ้มได้: โพรเซสลูกจบแบบผิดปกติ"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "ไม่รองรับการแปลงรหัสอักขระจาก '%s' ไปเป็น '%s'"
diff --git a/po/tl.po b/po/tl.po
new file mode 100644
index 0000000..ba218b4
--- /dev/null
+++ b/po/tl.po
@@ -0,0 +1,1909 @@
+# Tagalog translation of glib.
+# Copyright (C) 2005 
+# This file is distributed under the same license as the glib package.
+# Eric Pareja <xenos@upm.edu.ph>, 2005.
+#
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-12-01 17:31+0800\n"
+"Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
+"Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Kakaibang karakter '%s', inasahan na '=' matapos ng pangalang attribute '%s' "
+"ng elementong '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr "Walang mahanap na talaksang susi sa mga dir ng datos"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Sawi ang pagbasa ng symbolic link '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Pagsalin mula sa character set '%s' patungong '%s' ay hindi suportado"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Hindi mabuksan ang converter mula '%s' tungong '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Hindi tanggap na byte sequence sa conversion input"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Hindi kumpletong karakter sequence sa dulo ng input"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Hindi maka-balik '%s' sa codeset '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Ang URI '%s' ay hindi absolute URI na gamit ang paraang \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Ang lokal na talaksang URI '%s' ay hindi maaaring maglaman ng '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Ang URI '%s' ay hindi tanggap"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Ang hostname ng URI '%s' ay hindi tanggap"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Ang URI '%s' ay may hindi tanggap na escaped karakter"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Ang pathname '%s' ay hindi absolute path"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Hindi tanggap na hostname"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Error sa pagbukas ng directory '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Hindi makapag-tabi ng %lu byte upang basahin ang talaksang \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Sawi ang pagbabasa ng talaksang '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Sawi ang pagbukas ng talaksang '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Sawi ang pagkuha ng mga attribute ng talaksang '%s': sawi ang fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Sawi ang pagbukas ng talaksang '%s': sawi ang fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"Bigo ang papalit ng pangalan ng talaksang '%s' sa '%s': bigo ang g_rename(): "
+"%s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Sawi ang paglikha ng talaksang '%s': %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr ""
+"Bigo ang pagbukas ng talaksang '%s' para sa pagsusulat: bigo ang fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Bigo sa pagsusulat ng talaksang '%s': bigo ang fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Bigo sa pagsusulat ng talaksang '%s': bigo ang fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Bigo sa pagsusulat ng talaksang '%s': bigo ang fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Bigo ang pagsara ng talaksang '%s': bigo ang fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Hindi matanggal ang talaksang '%s': bigo ang g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Hindi tanggap ang template '%s', wala dapat na '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Hindi XXXXXX ang dulo ng template '%s'"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Sawi ang pagbasa ng symbolic link '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Hindi suportado ang mga symbolic link"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Hindi mabuksan ang converter mula '%s' patungong '%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "Hindi mabasa ng hilaw ang g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "May natirang hindi na-convert na datos sa read buffer"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Nagwakas sa partial karakter ang channel"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "Hindi makapagbasa ng hilaw sa g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Bigo ang pagbukas ng talaksang '%s': bigo ang open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+"Bigo ang pagreserba ng memory para sa talaksang '%s': bigo ang mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Error sa linya %d char %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Error sa linya %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Walang laman na entity '&' ay nakita; tanggap na mga entity ay: &amp; &quot; "
+"&lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Hindi tanggap ang karakter '%s' sa umpisa ng pangalan ng entity; ang & "
+"karakter ang nag-uumpisa ng entity; kung ang ampersand ay hindi dapat maging "
+"entity, itaglay ito bilang &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Hindi tanggap ang karakter '%s' sa loob ng pangalan ng entity"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Pangalan ng entity '%s' ay hindi kilala"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Hindi nagtapos ang entity sa puntukoma; malamang ay gumamit kayo ng "
+"ampersand karakter na hindi sinasadyang mag-umpisa ng entity - itaglay ang "
+"ampersand ng &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Sawi sa pag-parse ng '%-.*s', na dapat ay numero sa loob ng reference sa "
+"karakter (halimbawa ay &#234;) - maaaring ang numero ay sobra ang laki"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+"Reference sa karakter '%-.*s' ay hindi nag-encode ng tanggap na karakter"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+"Walang laman na reference sa karakter; dapat may kasamang numero tulad ng "
+"&#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Ang reference sa karakter ay hindi nagtapos sa puntukoma; malamang ay "
+"gumamit kayo ng ampersand na karakter na hindi sinadyang mag-umpisa ng "
+"entity - itaglay ang ampersand bilang &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Hindi tapos na reference sa entity"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Hindi tapos na reference sa karakter"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Hindi tanggap na tekstong encoded ng UTF-8"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Hindi tanggap na tekstong encoded ng UTF-8"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Hindi tanggap na tekstong encoded ng UTF-8"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Kailangang mag-umpisa ang dokumento ng elemento (hal. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' ay hindi tanggap na karakter matapos ng '<' na karakter; hindi ito "
+"maaaring mag-umpisa ng pangalang elemento"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Kakaibang karakter '%s', inasahan na '>' karakter ang pambungad ng pambukas "
+"na tag ng elementong '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Kakaibang karakter '%s', inasahan na '=' matapos ng pangalang attribute '%s' "
+"ng elementong '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Kakaibang karakter '%s', inasahan na '>' o '/' na karakter ang pambungad ng "
+"pangbukas na tag ng elementong '%s' o attribute; maaaring gumamit kayo ng "
+"hindi tanggap na karakter sa pangalang attribute"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Kakaibang karakter '%s', inasahan na pambukas na quote mark matapos ng "
+"equals sign kapag nagbigay ng halaga para sa attribute '%s' ng elementong '%"
+"s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Hindi tanggap na karakter ang '%s' matapos ng mga karakter na '</'; Ang '%s' "
+"ay hindi maaaring umpisa ng pangalang elemento"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Hindi tanggap na karakter ang '%s' matapos ang pangsara ng pangalang "
+"elemento '%s'; ang tinatanggap na karakter ay '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Sinarhan ang elementong '%s', walang bukas na elemento."
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Sinarhan ang elementong '%s', ngunit ang kasalukuyang elementong bukas ay '%"
+"s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Walang laman ang dokumento o naglalaman lamang ito ng puwang"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento matapos lamang ng pangbukas na "
+"angle bracket '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento na may mga bukas na elemento - '%"
+"s' ay ang huling elementong binuksan"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento, inasahan na makita ang angle "
+"bracket na pang-sara ng tag <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento sa loob ng pangalan ng elemento"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento sa loob ng pangalan ng attribute"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento sa loob ng pagbukas na tag ng "
+"elemento."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento matapos ang equal sign na sumunod "
+"sa pangalan ng attribute; walang halaga ang attribute"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento habang nasa loob ng halagang "
+"attribute"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Nagwakas ang dokumento ng hindi inaasahan sa loob ng tag ng pagsara para sa "
+"elementong '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Nagwakas ang dokumento ng hindi inaasahan sa loob ng komento o utos ng "
+"pagproseso"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Nagwakas sa partial karakter ang channel"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Hindi tanggap na byte sequence sa conversion input"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Hindi tapos na reference sa karakter"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Hindi tapos na reference sa karakter"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Hindi tapos na reference sa karakter"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Hindi suportado ang mga symbolic link"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Error sa linya %d char %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Hindi tapos na reference sa entity"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Ang binanggit na teksto ay hindi nag-umpisa sa quotation mark"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Walang kapares na quotation mark sa command line o ibang shell na teksto."
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Nagwakas ang teksto matapos ng karakter na '\\'. (Ang teksto ay '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Nagwakas ang teksto bago nakahanap ng kapares na quote para sa %c. (Ang "
+"teksto ay '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Ang teksto ay walang laman (o naglaman lamang ng puwang)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Sawi sa pagbasa ng datos mula sa prosesong anak"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Sawi sa paglikha ng pipe para makausap ang prosesong anak (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Sawi sa pagbasa mula sa child pipe (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Sawi sa paglipat sa directory '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Sawi sa pagtakbo ng prosesong anak (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Imbalidong pangalan ng programa: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Imbalidong string sa argument vector sa %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Imbalidong string sa kapaligiran: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Imbalidong working directory: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Bigo sa pagtakbo ng programang katulong (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Hindi inaasahang error sa g_io_channel_win32_poll() sa pagbasa ng datos mula "
+"sa prosesong anak"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Sawi sa pagbasa ng datos mula sa prosesong anak (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Hindi inaasahang error sa select() habang nagbabasa ng datos mula sa "
+"prosesong anak (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Hindi inaasahang error sa waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Sawi sa pag-fork (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Sawi sa pagtakbo ng prosesong anak \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Sawi sa pag-redirect ng output o input ng prosesong anak (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Sawi sa pag-fork ng prosesong anak (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Hindi kilalang error sa pagpatakbo ng prosesong anak \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Sawi sa pagbasa ng akmang datos mula sa child pid pipe (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Character wala sa sakop ng UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Hindi tanggap na sequence sa conversion input"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Character wala sa sakop ng UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Pag-gamit:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Option ng Tulong:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Ipakita ang option ng tulong"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Ipakita ang option ng tulong"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Option ng Aplikasyon:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Hindi mai-parse ang halagang integer '%s' para sa %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Halagang integer '%s' para sa %s ay wala sa sakop"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Hindi mai-parse ang halagang integer '%s' para sa %s"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Halagang integer '%s' para sa %s ay wala sa sakop"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Kulang na argumento para sa %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Hindi kilalang option %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr "Walang mahanap na talaksang susi sa mga dir ng datos"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Hindi karaniwang talaksan"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Walang laman ang talaksan"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Ang talaksang susi ay naglalaman ng linyang '%s' na hindi pares na susi-"
+"halaga, grupo, o komento"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Imbalidong pangalan ng programa: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Ang talaksang susi ay hindi naguumpisa sa isang grupo"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Imbalidong pangalan ng programa: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Ang talaksang susi ay naglalaman ng hindi suportadong encoding '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Ang talaksang susi ay walang grupong '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Ang talaksang susi ay walang susing '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Ang talaksang susi ay naglalaman ng susing '%s' na may halagang '%s' na "
+"hindi UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Ang talaksang susi ay naglalaman ng susing '%s' na may halagang hindi mabasa."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Ang talaksang susi ay naglalaman ng susing '%s' sa grupong '%s' na may "
+"halaga na hindi mabasa."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Ang talaksang susi ay walang susing '%s' sa grupong '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Ang talaksang susi ay may escape karakter sa dulo ng linya"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Ang talaksang susi ay may hindi tanggap na escape sequence '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Ang halagang '%s' ay hindi mabasa bilang numero."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Halagang integer '%s' ay wala sa sakop"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Ang halagang '%s' ay hindi mabasa bilang numero."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Ang halagang '%s' ay hindi mabasa bilang boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Hindi kilalang option %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Hindi suportado ang mga symbolic link"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Hindi suportado ang mga symbolic link"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Ang hostname ng URI '%s' ay hindi tanggap"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Imbalidong pangalan ng programa: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Hindi tanggap na hostname"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Sawi ang paglikha ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Sawi ang paglikha ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Sawi ang paglikha ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Error sa pagbukas ng directory '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr ""
+"Nagwakas ng hindi inaasahan ang dokumento sa loob ng pangalan ng attribute"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Error sa pagbukas ng directory '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Error sa linya %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Hindi suportado ang mga symbolic link"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Hindi karaniwang talaksan"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Imbalidong pangalan ng programa: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Ang hostname ng URI '%s' ay hindi tanggap"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Error sa pagbasa ng talaksang '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Error sa linya %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Error habang nagco-convert: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Hindi suportado ang mga symbolic link"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPTION...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Error habang nagco-convert: %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Hindi mapalitan ang modo ng talaksan: bigo ang fork(): %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Hindi mapalitan ang modo ng talaksan: bigo ang waitpid(): %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Hindi mapalitan ang modo ng talaksan: bigo ang chmod(): %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr ""
+#~ "Hindi mapalitan ang modo ng talaksan: Hininto ang anak ng hudyat: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr ""
+#~ "Hindi mapalitan ang modo ng talaksan: Hininto ng hindi pangkaraniwan ang "
+#~ "anay"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Paglipat mula karakter set `%s' tungong `%s' ay hindi suportado"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..6bab8f5
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,1845 @@
+# Turkish translation of Glib.
+# Copyright (C) 2001-2003, 2005, 2007, 2008 Free Software Foundation, Inc.
+#
+# KEMAL YILMAZ <kyilmaz@uekae.tubitak.gov.tr>, 2001.
+# Arman Aksoy <armish@linux-sevenler.de>, 2003.
+# Onur Can ÇAKMAK <onur.cakmak@gmail.com>, 2004, 2006.
+# Baris Cicek <baris@teamforce.name.tr>, 2005, 2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-21 15:53+0200\n"
+"Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
+"Language-Team: Turkish <gnome-turk@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=1; plural=0;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "'%2$s' öğesinde beklenmeyen '%1$s' özniteliği"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "'%2$s' öğesinde '%1$s' özelliği bulunamadı"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Beklenmeyen etiket '%s', '%s' bekleniyordu"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "'%2$s' içinde beklenmeyen etiket '%1$s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Veri dizinlerinde geçerli bir yer imi dosyası bulunamadı"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI '%s' için bir yer imi zaten var"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "URI '%s' için bir yer imi bulunamadı"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI '%s' için yer iminde hiç bir MIME tipi belirtilmedi"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI '%s' için yer iminde özel işareti tanımlanmadı"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI '%s' için yer iminde grup tanımlanmadı"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "'%s' adında hiçbir uygulama '%s' için yer imi kaydetmedi"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Exec satırı '%s' URI %s ile genişletilirken başarısız olundu"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' karakter kümesinden '%s' karakter kümesine dönüşüm desteklenmiyor"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s'--'%s' dönüştürücüsü açılamıyor"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Dönüşüm girdisinde geçersiz bayt dizisi"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Dönüşüm sırasında hata oluştu: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Girdinin sonunda parçalı karakter dizisi"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+"Geridönüş karakter kümesi '%s', '%s' karakter kümesine dönüştürülemiyor"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI '%s', \"file\" şemasını kullanan kesin bir URI değil"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Yerel dosya URI'si '%s', '#' içeremez"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI '%s' geçersiz"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI makine adı '%s' geçersiz"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI '%s' geçersiz olarak çıkış yapılmış karakterler içeriyor"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Yol adı '%s', kesin bir yol değil"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Geçersiz makine adı"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' dizini açılamadı: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "%lu bayt \"%s\" dosyasını okumak için ayrılamadı"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' dosyası okunurken hata: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Dosya \"%s\" çok büyük"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' dosyasından okuma başarısız: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' dosyasını açma başarısız: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"'%s' dosyasının özniteliklerini alma başarısız: fstat() başarısızlığı: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' dosyasını açma başarısız: fdopen() başarısızlığı: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr ""
+"'%s' dosyasının adı '%s' olarak değiştirilirken hata: g_rename() "
+"başarısızlığı: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' dosyasını oluşturma başarısız: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "'%s' dosyası yazma için açılamadı: fdopen() başarısızlığı: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' dosyasına yazılamadı: fwrite() başarısızlığı: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' dosyasına yazılamadı: fwrite() başarısızlığı: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' dosyasına yazılamadı: fwrite() başarısızlığı: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' dosyası kapatılamadı: fclose() başarısızlığı: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Varolan dosya '%s' silinemedi: g_unlink() başarısızlığı: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Şablon '%s' geçersiz, '%s' içermemeli"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Şablon '%s' XXXXXX içermiyor"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "'%s' sembolik bağını okuma başarısız: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Sembolik bağlar desteklenmiyor"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "`%s'-`%s' dönüştürücüsü açılamıyor: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string içinde okuma yapılamıyor"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Okuma tampon belleğinde kalıntı çevrilmemiş veri"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kanal kısmi bir karakterde sonlanıyor"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end içinde okuma başarısız"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' dosyası açılamadı: open() başarısızlığı: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "'%s' için eşlem oluşturulamadı: mmap() başarısızlığı: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Satır %d karakter %d hatalı: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Satır %d hata içeriyor: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Boş özvarlık '&;' görüldü; geçerli öğeler: &amp; &quot; &lt; &qt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Özvarlık isminin başındaki karakter '%s' geçerli değil; & karakteri bir "
+"özvarlığı başlatır; eger bu & işareti bir özvarlık değilse, &amp; olarak "
+"kullanabilirsiniz"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Karakter '%s' bir özvarlık isminin içinde geçerli değildir"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Özvarlık ismi '%s' bilinmiyor"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Özvarlık noktalı virgül ile bitmiyor; büyük ihtimalle bir özvarlık başlatmak "
+"istemeksizin & karakteri kullandınız - & işaretini &amp; olarak "
+"kullanabilirsiniz"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Karakter referansı içinde bir rakam olması gereken '%-.*s' ayrıştırılamadı, "
+"(örneğin; &#234;) - rakam çok büyük olabilir"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Karakter referansı '%-.*s' izin verilen karakteri kodlamıyor"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Boş karakter referansı; &#454; gibi bir rakam içermelidir"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Karakter referansı noktalı virgül ile bitmemiş; büyük ihtimalle bir özvarlık "
+"başlatmak istemeksizin & karakteri kullandınız - & işaretini &amp; olarak "
+"kullanabilirsiniz"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Tamamlanmamış özvarlık referansı"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Tamamlanmamış karakter referansı"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Geçersiz UTF-8 kodlanmış metin - çok uzun dizi"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Geçersiz UTF-8 kodlanmış metin - başlangıç karakteri yok"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Geçersiz UTF-8 kodlanmış metin - geçersiz '%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Belge bir öğe ile başlamalı (örneğin <kitap>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'<' karakterinden sonra gelen '%s' geçerli bir karakter değil; bir öğe adı "
+"başlatmamalı"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Tuhaf karakter '%s', boş öğe '%s' etiketinin sonunda '>' karakteri bekleniyor"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Tuhaf karakter '%1$s', '%3$s' öğesinin '%2$s' özniteliğinin sonunda '=' "
+"karakteri bekleniyor"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Tuhaf karakter '%s', '%s' öğesinin başlangıç etiketinin sonunda '>', '/' "
+"veya bir öznitelik bekleniyor; öznitelik isminde geçersiz bir karakter "
+"kullanmış olabilirsiniz"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Tuhaf karakter '%s', '%s' özniteliğini '%s' öğesinde değiştirmek için "
+"eşittir işaretinden sonra tırnak işareti bekleniyor"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'</' karakterlerini takip eden '%s' geçerli bir karakter değildir; öğe ismi "
+"'%s' ile başlamamalı"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s', kapalı öğe ismi '%s' ardından gelebilecek bir karakter değil; izin "
+"verilen karakter ise '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "'%s' öğesi kapatılmış, hiç bir öğe açık değil"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "'%s' öğesi kapatılmış, fakat şu an açık öğe '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Belge boş veya sadece boşluk karakteri içeriyor"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Belge açık açı parantezi '<' işaretinden hemen sonra beklenmedik bir şekilde "
+"bitti"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Belge öğeleri hala açıkken beklenmedik bir şekilde bitti - son açılan öğe: '%"
+"s'"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Belge beklenmedik bir şekilde bitti, etiketi bitiren kapalı açı parantezi "
+"ile biten <%s/> beklendi"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Belge bir öğe isminin içinde beklenmedik bir şekilde bitti"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Belge bir öznitelik ismi içinde beklenmedik bir şekilde bitti"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Belge bir öğe-açma etiketi içinde beklenmedik bir şekilde bitti."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Belge öznitelik adını takip eden eşittir işaretinden sonra beklenmedik bir "
+"şekilde bitti; öznitelik değeri yok"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Belge bir öznitelik değeri içinde iken beklenmedik bir şekilde bitti"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Belge, '%s' öğesinin kapatma etiketi içinde beklenmedik bir şekilde bitti"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Belge bir yorum veya işlem talimatı içindeyken beklenmedik bir şekilde bitti"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "bozuk nesne"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "dahili hata ya da bozuk öğe"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "yetersiz bellek"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "geri takip sınırına ulaşıldı"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "doku (pattern), kısmi eşleme için desteklenmeyen öğeler içeriyor"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "dahili hata"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "koşul olarak geri referanslar kısmi eşleme için desteklenmiyor"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "iç içe tekrar sınırına ulaşıldı"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "boş alt dizgiler için çalışma alanı sınırına ulaşıldı"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "yeni satır işaretlerinin geçersiz kombinasyonu"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "bilinmeyen hata"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ desenin sonunda"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c desenin sonunda"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "anlaşılamayan karakter \\ takip ediyor"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"büyük küçük harf değiştiren kaçış karakterleri (\\l, \\L, \\u, \\U) burada "
+"kullanılamaz"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "sayılar {} niceliği içerisinde sıra dışı"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "sayılar {} niceliği içerisinde çok büyük"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "karakter sınıfı için eksik sonlanan ]"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "karakter sınıfında geçersiz dizi"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "karakter sınıfında sıra dışı kapsam"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "tekrarlanacak bir şey yok"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? sonrası tanımlanmayan karakter"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< sonrası tanımlanmayan karakter"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P sonrası tanımlanmayan karakter"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX isimlendirilmiş sınıflar sadece bir sınıf içinde desteklenir"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "eksik sonlandıran )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "açma ( olmayan )"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R ya da (?[+-]basamakları ) ile takip etmelidir"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "mevcut olmayan alt desene referans"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "açıklama sonrası eksik )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "düzenli ifade çok büyük"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "hafıza alma başarısız oldu"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "geribakma iddiası sabit uzunlukta değil"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( sonrası bozuk rakam ya da isim"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "koşul grubu ikiden daha fazla branç içeriyor"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( sonrası iddia bekleniyor"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "bilinmeyen POSIX sınıf ismi"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "POSIX karşılaştırma öğeleri desteklenmiyor"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} dizisi içerisinde karakter değeri çok büyük"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "geçersiz koşul (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C geriye bakma iddiası içerisinde izin verilmiyor"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "tekrarlı çağrı sonsuz döngü yapamadı"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "alt desen ismi içerisinde eksik sonlandırıcı"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "iki isimli alt desenler aynı isme sahip"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "bozulmuş \\P ya da \\p dizisi"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P ya da \\p sonrası bilinmeyen özellik ismi"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "alt desen ismi çok uzun (en fazla 32 karakter)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "çok fazla isimlendirilmiş alt desen (en fazla 10.000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "sekizlik değer \\377'den daha büyük"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE grubu birden daha fazla branş içeriyor"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "bir DEFINE grubunu tekrarlamaya izin verilmiyor"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "kararsız NEWLINE seçenekleri"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g bir parantezli isim ya da tercihten parentezli sıfır olmayan sayı "
+"tarafından takip edilmiyor"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "beklenmeyen tekrar"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "kod akış taşması"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "derleme çalışma alanı kaplandı"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "onceden kontrol edilmiş referanslı alt desen bulunamadı"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Düzenli ifade %s eşleşirken hata: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE kütüphanesi UTF8 desteği olmadan derlenmiş"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE kütüphanesi UTF8 özellikleri desteği olmadan derlenmiş"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Düzenli ifade %s derlenirken karakter %d hatalı: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Düzenli ifade %s eniyilemesinde (optimization) hata: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "onaltılı rakam ya da '}' beklendi"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "onaltılı rakam beklendi"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "sembolik referansda eksik '<'"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "tamamlanmamış sembolik referans"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "sıfır-uzunlukta sembolik referans"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "rakam beklendi"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "geçersiz sembolik referans"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "son '\\' kayıp"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "geçersiz çıkış dizisi"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Yerine koyma metni \"%s\" işlenirken karakter %lu hatalı: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Alıntılı metin tırnak işareti ile başlamıyor"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Komut satırında veya diğer kabuk alıntısı metinde eşlenmemiş tırnak işareti"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Metin '\\' karakterinden hemen sonra bitti. (Metin: '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "%c için eşleşen tırnak işareti bulunmadan metin bitti. (Metin: '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Metin boştu (veya sadece boşluk içeriyordu)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Alt süreçten bilgi okuma başarısızlığı"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Alt süreçle haberleşme için boru yaratılamadı (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Alt süreç borusundan okuma başarısızlığı (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "'%s' dizinine değiştirme başarısızlığı (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Alt süreç yürütme başarısızlığı (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Geçersiz program adı: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d konumunda parametre vektörü içinde geçersiz dizgi: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Çevre içinde geçersiz dizgi: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Geçersiz çalışma dizini: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Yardımcı program (%s) çalıştırılamadı"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Alt süreçten bilgi okurken g_io_channel_win32_poll() işleminde beklenmeyen "
+"hata"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Alt süreçten bilgi okuma başarısızlığı (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "Alt süreçten bilgi okurken select()'te beklenmeyen hata oluştu (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid()'de beklenmeyen hata (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Çatallama başarısızlığı (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "\"%s\" alt süreç çalıştırılırken hata oluştu (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Alt sürecin girdisi veya çıktısı yönlendirilemedi (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Alt süreç çatallanamadı (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Alt süreç \"%s\" çalıştırılırken bilinmeyen hata oluştu"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Alt süreç borusundan yeterli bilgi okunamadı (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Karakter UTF-8 için sınırlarının dışında"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Dönüşüm girdisi içinde geçersiz dizi"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Karakter UTF-16 sınırlarının dışında"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Kullanım:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[SEÇENEK...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Yardım Seçenekleri:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Yardım seçeneklerini göster"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Tüm yardım seçeneklerini göster"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Uygulama Seçenekleri:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "%2$s için tamsayı değeri '%1$s' ayrıştırılamıyor"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s için tamsayı değeri '%1$s' aralık dışında"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "'%2$s' için double değeri '%1$s' ayrıştırılamıyor"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s için double değeri '%1$s' aralık dışında"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "%s seçeneği işlenirken hata"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s için parametre eksik"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Bilinmeyen seçenek %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Arama dizinlerinde geçerli anahtar dosyası bulunamadı"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Normal dosya değil"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Dosya boş"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Anahtar dosyası anahtar-değer çifti, grup veya yorum olmayan '%s' satırını "
+"içeriyor"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Geçersiz grup adı: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Anahtar dosyası bir grupla başlamıyor"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Geçersiz anahtar adı: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Anahtar dosya geçersiz kodlama '%s' içeriyor"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Anahtar dosyasında '%s' grubu yok"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Anahtar dosyasında '%s' anahtarı yok"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Anahtar dosyası UTF-8 olmayan '%s' anahtarını '%s' değeriyle içeriyor"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "Anahtar dosyası değeri yorumlanamayan '%s' değerini içeriyor."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Anahtar dosyası, yorumlanamayan '%2$s' grubundaki '%1$s' anahtarını içeriyor."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Anahtar dosyası '%2$s' grubunda '%1$s' anahtarı içermiyor"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Anahtar dosyası satır sonunda çıkış karakteri içeriyor"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "URI '%s' geçersiz çıkış dizisi içeriyor"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' değeri bir sayı olarak yorumlanamıyor."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Tamsayı değeri '%s' aralık dışında"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' değeri bir gerçel sayı olarak yorumlanamıyor."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' değeri mantıksal değer olarak yorumlanamıyor."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "%s için çok büyük sayaç değeri geçildi"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Akış zaten kapalı"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "İşlem iptal edildi"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Bilinmeyen tür"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s dosya türü"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s türü"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Beklenmeyen erken akış-sonu"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "İsimlendirilmemiş"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Desktop dosyası Exec alanı belirtmemiş"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Uygulama için gerekli uçbirim bulunamadı"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Kullanıcı uygulaması yapılandırma klasörü %s oluşturulamıyor: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Kullanıcı MIME yapılandırma klasörü %s oluşturulamıyor: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Kullanıcı masaüstü dosyası %s oluşturulamıyor"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s için özel tanım"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "sürücü çıkartmayı uygulamıyor"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "sürücü ortam için yoklamayı uygulamıyor"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "GEmblem kodlamasının %d sürümü işlenemiyor"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem kodlaması içerisinde bozuk sayıda token (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "GEmblemedIcon kodlaması %d sürümü işlenemiyor"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon kodlaması içerisinde bozuk sayıda token (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon için bir Gemblem beklendi"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "İşlem desteklenmiyor"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Bağlama mevcut değil içeriyor"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Dizin üzerine kopyalanamıyor"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Dizin dizin üzerine kopyalanamıyor"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Hedef dosya mevcut"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Dizin iç içe kopyalanamıyor"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "Özel dosya kopyalanamıyor"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Geçersiz sembolik bağ değeri verildi"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Çöp desteklenmiyor"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Dosy adları '%c' içeremez"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "sistem bağlama uygulamıyor"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Bu dosyayı işlemek için hiçbir uygulama kayıtlı değil"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Enumerator kapalı"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Dosya numaralandırıcı sıradışı işleme sahip"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Dosya numaralandırıcı zaten kapalı"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "dosya"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Simgeyi içeren dosya"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "GFileIcon kodlaması %d sürümü işlenemiyor"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon için bozuk girdi verisi"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Akış query_info desteklemiyor"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Atlama akışta desteklenmiyor"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Sonunu kesmeye giriş akışında izin verilmiyor"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Akış üzerinde sonunun kesilmesi desteklenmiyor"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Yanlış sayıda token (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Sınıf ismi %s için tür yok"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Tür %s GIcon arayüzü uygulamıyor"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Tür %s sınıflandırılmış değil"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Bozuk sürüm numarası: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Tür %s GIcon arayüzü üzerinde from_tokens() uygulamıyor"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Simge kodlamasının verilen sürümü işlenemiyor"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Giriş akımı okumayı uygulamıyor"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Akışın sıradışı işlemi var"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Öntanımlı yerel dizin izleme tipi bulunamadı"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Geçersiz dosya adı %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Dosya sistemi bilgisi alınırken hata: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Kök dizini yeniden adlandırılamıyor"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Dosya yeniden adlandırılırken hata: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Dosya yeniden adlandırılamıyor, dosya ismi zaten mevcut"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Geçersiz dosya adı"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Dosya açılırken hata: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Dizin açılamıyor"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Dosya silinirken hata: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Dosya çöpe atılırken hata: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Çöp dizini %s oluşturulamıyor: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Çöp için en üst seviye dizin bulunamıyor"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Çöp dizini bulunamıyor ya da oluşturulamıyor"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Çöp bilgi dosyası oluşturulamıyor: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Dosya çöpe atılamıyor: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Dizin oluşturulurken hata: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Sembolik bağ yaparken hata: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Dosya taşınırken hata: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Dizin dizin üzerine taşınamıyor"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Yedek dosyası oluşturma başarısız oldu"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Hedef dosya silerken hata: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Bağlı sistemler arasında taşıma desteklenmiyor"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Öznitelik değeri NULL olmamalı"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Geçersiz öznitelik türü (dizgi beklendi)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Geçersiz genişletilmiş öznitelik ismi"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Genişletilmiş öznitelik '%s' atanırken hata: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' dosyası durumlandırılırken hata: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (geçersiz kodlama)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Dosya tanımlayıcı durumlandırılırken hata: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Geçersiz öznitelik türü (uint32 beklendi)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Geçersiz öznitelik türü (uint64 beklendi)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Geçersiz öznitelik türü (byte dizisi beklendi)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "İzinler atanırken hata: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Sahip atanırken hata: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "sembolik bağ NULL olmamalı"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Sembolik bağ atanırken hata: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "Sembolik bağ atanırken hata: dosya bir sembolik bağ değil"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux bağlamı NULL olmamalı"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "SELinux bağlamı atanırken hata: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux bu sistede etkin değil"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Öznitelik %s ataması desteklenmiyor"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Dosyadan okunurken hata: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Dosya içinde atlama yapılırken hata: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Dosya kapatılırken hata: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Öntanımlı yerel dosya izleme türü bulunamadı"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Dosyaya yazılırken hata: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Eski yedek bağı silinirken hata: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Yedek kopyası oluşturulurken hata: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Geçici dosya yeniden adlandırılırken hata: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Dosyanın sonu kesilirken hata: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' dosyası açılırken hata: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Hedef dosya bir dizin"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Hedef dosya normal dosya değil"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Dosya harici olarak değiştirilmiş"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "Eski dosya silinirken hata: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Geçersiz GSeekType sağlandı"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Geçersiz atlama isteği"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "GMemoryInputStream sonu silinemiyor"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Azami veri dizisi sınırına ulaşıldı"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Hafıza çıktı akışı yeniden boyutlandırılamaz"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Hafız çıktı açışı yeniden boyutlandırma başarısız oldu"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "mount unmount uygulamıyor"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "mount eject uygulamıyor"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "mount remount uygulamıyor"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "mount içerik türü tahminini uygulamıyor"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "mount senkron içerik türü tahminini uygulamıyor"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Çıktı akışı write uygulamıyor"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Kaynak akışı zaten kapalı"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "isim"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Simgenin ismi"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "isimler"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Simgenin isimlerini içeren dizi"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "ötanımlı son çözümleri kullan"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"İsmi '-' karakterleri ile kısaltarak bulunan son çözümlerin kullanılması. "
+"Eğer birden daha fazla isim verilmişse birincisinden sonraki isimleri yok "
+"sayar."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "GThemedIcon kodlaması %d sürümü işlenemiyor"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Dosya tanımlayıcısı"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Okunacak dosya tanımlayıcısı"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Dosya tanımlayıcısını kapat"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Akış kapatıldığı zaman dosya tanımlayıcısının kapatılması"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Unix'den okurken hata: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Unix kapatılırken hata: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Dosya sistemi kök dizini"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Yazılacak dosya tanımlayıcısı"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Unix'e yazılırken hata: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "volume eject uygulamıyor"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Uygulama bulunamıyor"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Uygulama başlatılırken hata: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI'ler desteklenmiyor"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "eşleştirme değişimleri win32 üzerinde desteklenmiyor"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Eşleştirme oluşturulması win32 üzerinde desteklenmiyor"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "girişleri saklama"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "uzun listeleme biçimini kullan"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[DOSYA...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u bayt"
diff --git a/po/tt.po b/po/tt.po
new file mode 100644
index 0000000..1a70947
--- /dev/null
+++ b/po/tt.po
@@ -0,0 +1,1812 @@
+# Tatarish translation
+# Albert Fazlí <tatarish.l10n@gmail.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: libgnome\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-11-09 13:19+0300\n"
+"Last-Translator: Albert Fazlí <tatarish.l10n@gmail.com>\n"
+"Language-Team: Tatarish <tatarish.l10n@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "'%s' biremennän uqıp bulmadı: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "'%s' -› '%s' digän bilge äyländerü totılmí"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "'%s' -› '%s' äyländergeçen açıp bulmadı"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr ""
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "'%s' digän cirle birem URI'sında '#' bilgese bula almí"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "'%s' digän URI yaraqsız"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "'%s' digän URI'nıñ host adı yaraqsız"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "'%s' digän yul töptän tügel"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Host adı yaraqsız"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "'%s' törgägen açıp bulmadı: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr ""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "'%s' biremennän uqıp bulmadı: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "'%s' biremen açıp bulmadı: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "'%s' birem üzençälegen belep bulmadı: fstat() uzmadı: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "'%s' biremen açıp bulmadı: fdopen() uzmadı: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "'%s' birem adın '%s' itep üzgärtep bulmadı: g_rename() uzmadı: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "'%s' biremen yasap bulmadı: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Yazu öçen '%s' biremen açıp bulmadı: fdopen() uzmadı: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "'%s' biremen yazıp bulmadı: fwrite() uzmadı: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "'%s' biremen yazıp bulmadı: fwrite() uzmadı: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "'%s' biremen yazıp bulmadı: fwrite() uzmadı: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "'%s' biremen yabıp bulmadı: fclose() uzmadı: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Barlıqtağı '%s' biremen beterep bulmadı: g_unlink() uzmadı: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "'%s' ürçetmäse yaraqsız, eçendä '%s' bula almí"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "'%s' ürçetmäneñ azağında XXXXXX tügel"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr ""
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "'%s' -› '%s' äyländergeçen açıp bulmadı: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "'%s' biremen açıp bulmadı: open() uzmadı: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr ""
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "%d. yulnıñ %d. bilgedä xata: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "%d. yulda xata: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr ""
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr ""
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Yazmanıñ UTF-8 bilgelämäse yaraqsız"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Yazmanıñ UTF-8 bilgelämäse yaraqsız"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Yazmanıñ UTF-8 bilgelämäse yaraqsız"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr ""
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "İstälek eçtälege yä buş, yä buşlıq bilgelärennän genä tora"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr ""
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "%d. yulnıñ %d. bilgedä xata: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr ""
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr ""
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Yazılım adı yaraqsız: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Tirä-yaqta yaraqsız yazma bar: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Eş törgäge yaraqsız: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Yärdämçe yazılım eşlätep bulmadı (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr ""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "UTF-8 çigennän çıqqan bilge"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr ""
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "UTF-16 çigennän çıqqan bilge"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Totılu:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[KÖYLÄMÄ...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Yärdäm Köylämäse:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Yärdäm köylämäsen kürsätü"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Yärdäm köylämäsen kürsätü"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Yazılım Köylämäläre:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s öçen '%1$s' digän tulısan bäyäse çiktän uzdı"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s öçen '%1$s' digän tulısan bäyäse çiktän uzdı"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "%s öçen köylämä birelmäde"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Bilgesez %s atlı köylämä"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Ğädäti birem tügel"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Birem buş ikän"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Yazılım adı yaraqsız: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Açqıç bireme törkem belän başlanmí"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Yazılım adı yaraqsız: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Açqıç biremendä '%s' digän totılmağan bilgelämä"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Açqıç biremendä '%s' törkeme yuq"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Açqıç biremendä '%s' açqıçı yuq"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Açqıç biremendäge '%2$s' törkemendä '%1$s' açqıçı yuq"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "'%s' digän bäyäsen san itep tanıp bulmí."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "'%s' digän tulısan bäyäse çiktän çıqtı"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "'%s' digän bäyäsen san itep tanıp bulmí."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "'%s' digän bäyäsen yuqbar itep tanıp bulmí."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Bilgesez %s atlı köylämä"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "'%s' digän URI'nıñ host adı yaraqsız"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Yazılım adı yaraqsız: %s"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Host adı yaraqsız"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "'%s' biremen yasap bulmadı: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "'%s' biremen yasap bulmadı: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "'%s' biremen yasap bulmadı: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "'%s' törgägen açıp bulmadı: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "'%s' törgägen açıp bulmadı: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "%d. yulda xata: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Ğädäti birem tügel"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Yazılım adı yaraqsız: %s"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "'%s' digän URI'nıñ host adı yaraqsız"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "'%s' biremen uqığanda xata: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "%d. yulda xata: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Äyländergändä xata çıqtı: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[KÖYLÄMÄ...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Äyländergändä xata çıqtı: %s"
+
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Birem ısulın üzgärtep bulmadı: fork() uzmadı: %s"
+
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Birem ısulın üzgärtep bulmadı: waitpid() uzmadı: %s"
+
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Birem ısulın üzgärtep bulmadı: chmod() uzmadı: %s"
+
+#~ msgid "Could not change file mode: Child terminated by signal: %s"
+#~ msgstr "Birem ısulın üzgärtep bulmadı: Balanı ımlaw özderde: %s"
+
+#~ msgid "Could not change file mode: Child terminated abnormally"
+#~ msgstr "Birem ısulın üzgärtep bulmadı: Balanı özü tieşleçä bulmadı"
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..4e70f04
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,1862 @@
+# Ukrainian translation of GLIB library.
+# Copyright (C) 2001-2004 Free Software Foundation, Inc.
+# Yuri Syrota <rasta@cvs.gnome.org>, 2001, 2004.
+# Maxim Dziumanenko <dziumanenko@gmail.com>, 2004-2007
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2008-11-13 11:56+0300\n"
+"Last-Translator: Maxim Dziumanenko <dziumanenko@gmail.com>\n"
+"Language-Team: Ukrainian <uk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Неочікуваний атрибут \"%s\" для елемента \"%s\""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Атрибут \"%s\" для елемента \"%s\" не існує"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Неочікуваний тег \"%s\", очікувався тег \"%s\""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Неочікуваний тег '%s' у '%s'"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Не вдається знайти правильний файл закладок у каталогах даних"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Файл закладок для URI '%s' вже існує"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Не знайдено закладки для URI '%s'"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Не визначено тип MIME у закладці для URI '%s'"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Не вказано приватну ознаку у закладці для URI '%s'"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Не встановлено групи у закладці для URI '%s'"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Не зареєстровано програму з назвою '%s' для закладки '%s'"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Помилка розкривання рядка виконання \"%s\" для URI %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Перетворення з набору символів \"%s\" у \"%s\" не підтримується"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Не вдається відкрити модуль перетворення з \"%s\" у \"%s\""
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Неправильна послідовність байтів у перетворюваних вхідних даних"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Помилка під час перетворення: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Незавершена символьна послідовність на кінці вводу"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Неможливо коректно перетворити символ \"%s\" у символ з набору \"%s\""
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"Ідентифікатор URI \"%s\" не є абсолютним ідентифікатором при використанні "
+"схеми \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Ідентифікатор URI \"%s\" локального файла не може містити символ \"#\""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI \"%s\" - неправильний"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Неправильна назва вузла в URI \"%s\""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "Ідентифікатор URI \"%s\" містить неправильно екранований символ"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Шлях \"%s\" не є абсолютним"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Неправильна назва вузла"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Помилка відкривання каталогу \"%s\": %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Не вдається виділити %lu байтів для зчитування файла \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Помилка зчитування файлу \"%s\": %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Файл \"%s\" занадто великий"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Помилка зчитування з файлу \"%s\": %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Помилка відкривання файлу \"%s\": %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Помилка отримання атрибутів файлу \"%s\": помилка fstat(): %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Помилка відкривання файлу \"%s\": помилка fdopen(): %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Помилка перейменування файлу \"%s\" на \"%s\": помилка g_rename(): %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Помилка створення файлу \"%s\": %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Помилка відкривання файлу \"%s\" для запису: помилка fdopen(): %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Помилка запису у файл \"%s\": помилка fwrite(): %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Помилка запису у файл \"%s\": помилка fwrite(): %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Помилка запису у файл \"%s\": помилка fwrite(): %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Помилка закривання файлу \"%s\": помилка fclose(): %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Не вдається видалити існуючий файл \"%s\": помилка g_unlink(): %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Шаблон \"%s\" неправильний, бо не може містити \"%s\""
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Шаблон \"%s\" не містить XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f кбайт"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f Мбайт"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f Гбайт"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Помилка читання символічного посилання \"%s\": %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Символічні посилання не підтримуються"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Не вдається відкрити модуль перетворення з \"%s\" у \"%s\": %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Не вдається виконати безпосереднє зчитування у функції "
+"g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "В буфері зчитування лишились не перетворені дані"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Канал завершується на неповному символі"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Не можна виконувати безпосереднє зчитування у функції "
+"g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Помилка відкривання файлу \"%s\": помилка open(): %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Помилка створення карти файлу \"%s\": помилка mmap(): %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Помилка в рядку %d на символі %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Помилка в рядку %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Виявлено порожній предикат \"&;\"; допустимими предикатами є: &amp; &quot; "
+"&lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Предикат не може починатись з символу \"%s\", він починається з символу \"&"
+"\";  якщо цей символ вживається не для позначення початку предикату, то "
+"повинен екрануватись як символ &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Символ \"%s\" не допускається в назві предикату"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Назва предикату \"%s\" невідома"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Предикат не закінчується крапкою з комою; очевидно, що символ & було "
+"використано не для позначення початку предикату – екрануйте його як &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Помилка аналізу '%-.*s', де має бути число у символьному посиланні "
+"(наприклад, &#234), можливо, число надто велике"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Посилання на символ \"%-.*s\" не визначає дозволений символ"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Порожнє посилання на символ, воно має включати число, наприклад &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Посилання на символ не закінчується крапкою з комою, схоже символ \"&\" було "
+"використано не для позначення початку предикату – екрануйте його як &amp;."
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Незавершене посилання на предикат"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Незавершене посилання на символ"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr ""
+"Текст закодований як UTF-8 неприпустимим способом - надто довга послідовність"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr ""
+"Текст закодований як UTF-8 неприпустимим способом - некоректний початок "
+"символу"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr ""
+"Текст закодований як UTF-8 неприпустимим способом - некоректна послідовність "
+"'%s'"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Документ має починатися з елемента (наприклад, <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"Символ \"%s\" не дозволяється вживати після символу \"<\", він не може "
+"починати назву елемента"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Зайвий символ \"%s\", очікувався символ \">\" для закриття тегу порожнього "
+"елементу \"%s\""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Зайвий символ \"%s\", очікувався символ \"=\" після назви ознаки \"%s\" "
+"елемента \"%s\""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Зайвий символ \"%s\", очікувались символи \">\" чи \"/\", для закриття "
+"початкового тегу елементу \"%s\", чи додаткова ознака; можливо, було "
+"використано неприпустимий символ в назві ознаки"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Зайвий символ \"%s\", очікувались відкриваючі лапки після знаку рівності на "
+"присвоєнні значення ознаці \"%s\" елементу \"%s\""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"Символ \"%s\" неприпустимий після символів \"</\"; символ \"%s\" не може "
+"починати назву елементу"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"Символ \"%s\" неприпустимий на закритті назви елемента \"%s\"; припустимим "
+"символом є \">\""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Було закрито не відкритий елемент \"%s\""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Було закрито елемент \"%s\", але зараз відрито елемент \"%s\""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Документ порожній чи містить лише пропуски"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Документ раптово закінчився відразу після початкової кутової дужки \"<\""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Документ раптово закінчився, коли деякі елементи ще були відкритими – \"%s\" "
+"був останнім відкритим елементом"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Документ раптово закінчився, очікувалась кінцева кутова дужка для закриття "
+"тегу <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Документ раптово закінчився посеред назви елемента"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Документ раптово закінчився посеред назви ознаки"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Документ раптово закінчився у середині тегу, що відкривав елемент"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Документ раптово закінчився після знака рівності, що йшов за назвою ознаки; "
+"значення ознаки не вказано"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Документ раптово закінчився посеред значення ознаки"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Документ раптово закінчився у середині тегу, що закривав елемент \"%s\""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "Документ раптово закінчився у середині коментарю чи інструкції обробки"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "пошкоджений об'єкт"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "внутрішня помилка або пошкоджений об'єкт"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "недостатньо пам'яті"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "закінчилось обмеження зворотного ходу"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+"шаблон містить елементи, які не підтримуються при пошуку часткової "
+"відповідності"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "внутрішня помилка"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+"умови у вигляді зворотних посилань при пошуку часткової відповідності не "
+"підтримуються"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "досягнуто межу рекурсії"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "досягнуто межу робочого простору для порожніх підрядків"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "некоректна комбінація ознак переведення рядка"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "невідома помилка"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ наприкінці шаблону"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c наприкінці шаблону"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "нерозпізнаний символ за послідовністю \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "escape-символи (\\l, \\L, \\u, \\U) неприпустимі тут"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "неправильний порядок чисел у специфікаторі {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "надто велике число у специфікаторі {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "відсутній завершальний символ ] для класу символів"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "Неправильна escape-послідовність у класі символів"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "неправильний порядок у діапазоні у класі символів"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "немає що повторювати"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "нерозпізнаний символ після (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "нерозпізнаний символ після (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "нерозпізнаний символ після (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "назви класів у стилі POSIX підтримуються лише у межах класі"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "відсутній завершальний символ )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") без початкової дужки ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(за ?R або (?[+-]цифри має бути вказано дужку )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "посилання на неіснуючий вкладений шаблон"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "відсутня дужка ) після коментаря"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "регулярний вираз надто довгий"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "не вдається отримати пам'ять"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "твердження lookbehind має не фіксовану довжину"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "неправильне число або назва після (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "група умови містить більше ніж дві гілки"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "після (?( очікується твердження"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "невідома POSIX-назва класу"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "елементи порівняння у стилі POSIX не підтримуються"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "значення символу у послідовності \\x{...} надто велике"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "неправильний вираз (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C неприпустимий у твердженні lookbehind"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "рекурсивний виклик може увійти у нескінчений цикл"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "відсутній завершальний символ у назві вкладеного шаблону"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "два іменовані вкладені шаблони мають однакову назву"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "неправильна послідовність \\P чи \\p"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "невідома назва властивості після \\P чи \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "вкладена назва шаблону надто довга (максимум 32 символів)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "надто багато іменованих вкладених шаблонів (максимум 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "вісімкове значення більше ніж \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "група DEFINE містить більш ніж одну гілку"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "повтор групи DEFINE неприпустимий"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "неузгоджені параметри NEWLINE"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g не завершується скріпленою назвою чи необов'язковим скріпленим не-"
+"нульове число"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "неочікуваний повтор"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "переповнення коду"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "переповнення при компіляції робочого простору"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+"раніше перевірений вкладений шаблон, на який йде посилання не знайдений"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Помилка під час пошуку відповідності регулярному виразу %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Бібліотека PCRE не підтримує UTF8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Бібліотека PCRE не підтримує властивості у кодуванні UTF8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Помилка при компіляції регулярного виразу %s на символі %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "При оптимізації регулярного виразу %s виникла помилка: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "очікується шістнадцяткова цифра або символ '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "очікується шістнадцяткова цифра"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "у символьному рядку відсутня '<'"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "незакінчене символьне посилання"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "символьне посилання нульової довжини"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "очікується цифра"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "некоректне символьне посилання"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "відкидати кінцеві '\\'"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "невідома escape-послідовність"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+"Під час розбору тексту заміни \"%s\" виникла помилка у символі з номером %"
+"lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Текст в лапках не починається з лапок"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "Невідповідні лапки у командному рядку чи іншому тексті оболонки"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Текст закінчився перед символом \"\\\". (Текст був таким: \"%s\")"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Текст закінчився перед відповідними лапками для %c. (Текст був таким: \"%s\")"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Текст порожній (чи містить лише пропуски)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Помилка зчитування даних з дочірнього процесу"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Помилка створення каналу для обміну з дочірнім процесом (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Помилка зчитування з дочірнього каналу (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Помилка переходу в каталог \"%s\" (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Помилка виконання дочірнього процесу (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Неправильна назва програми: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Неправильний рядок у векторі аргументів %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Неправильний рядок у оточенні: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Неправильний робочий каталог: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Не вдається виконати допоміжну програму (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Неочікувана помилка в зчитуванні даних з дочірнього процесу через "
+"g_io_channel_win32_poll() "
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Помилка зчитування даних з дочірнього процесу (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Неочікувана помилка під час очікування на зміну стану файлового дескриптора "
+"дочірнього процесу (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Неочікувана помилка у waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Помилка створення процесу (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Помилка виконання дочірнього процесу \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Помилка перенаправлення виводу чи вводу дочірнього процесу (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Помилка запуску дочірнього процесу (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Невідома помилка виконання дочірнього процесу \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Не вдається зчитати достатню кількість даних з дочірнього каналу (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Символ не входить в набір UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Неправильна послідовність у перетворюваному вводі"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Символ не входить в набір UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Використання:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[ПАРАМЕТР...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Параметри довідки:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Показати параметри довідки"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Показати усі параметри довідки"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Параметри програми:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Не вдається розібрати числове ціле значення '%s' для %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Числове ціле значення '%s' для %s поза межами діапазону"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Не вдається розібрати числове значення подвійної точності '%s' для %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Числове значення подвійної точності '%s' для %s поза межами діапазону"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Помилка розбору параметра %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Відсутній аргумент %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Невідомий параметр %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Не вдається знайти правильний ключовий файл у каталогах ключів"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Не є звичайним файлом"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Файл порожній"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Ключовий файл містить рядок '%s, який не є парою ключ-значення, групою або "
+"коментарем"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Неправильна назва групи: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Ключовий файл не починається з групи"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Неправильна назва ключа: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Ключовий фал містить кодування, що не підтримується '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Ключовий файл не містить групи '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Ключовий файл не містить ключ '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Ключовий файл містить ключ '%s' зі значенням '%s', кодування якого не UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Ключовий файл містить ключ '%s', що має значення, яке не вдається розібрати."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Ключовий файл містить '%s' у групі '%s', що має значення, яке неможливо "
+"розібрати."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Ключовий файл не містить ключ '%s' у групі '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Ключовий файл містить escape-символ наприкінці рядка"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Ключовий файл містить неправильну escape-послідовність '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Не вдається розібрати значення '%s' як число."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Числове ціле значення '%s' поза межами діапазону"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Значення '%s' не вдається перетворити у число з рухомою комою."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Не вдається розібрати значення '%s' як логічне значення."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "До %s передано надто велике значення лічильника"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Потік вже закрито"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Операцію скасовано"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Невідомий тип"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "тип файлу %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "тип %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Неочікуваний передчасний кінець потоку"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Без назви"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "У Desktop-файлі не визначено поле Exec"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Неможливо знайти термінал, що потрібен програмі"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Не вдається створити теку параметрів програми %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Не вдається створити теку параметрів MIME %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Не вдається створити для користувача desktop-файл %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Власне визначення %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "пристрій не має функції витягування носія"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "пристрій не має функції опитування наявності носія"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Версія %d кодування GEmblem не підтримується"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Неправильна кількість лексем (%d) у кодуванні GEmblem"
+
+#: gio/gemblemedicon.c:296
+#, fuzzy, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Версія %d кодування GThemedIcon не підтримується"
+
+#: gio/gemblemedicon.c:306
+#, fuzzy, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Неправильна кількість лексем (%d) у кодуванні GEmblem"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Операція не підтримується"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Вкладена точка монтування не існує"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Не вдається копіювати у каталог"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Не вдається копіювати каталог у каталог"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Цільовий файл існує"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Не вдається рекурсивно скопіювати каталог"
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "Не вдається копіювати у каталог"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Неправильне значення символьного посилання"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Смітник не підтримується"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "назви файлів не можуть містити символ '%c'"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "том не підтримує операцію монтування"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Не зареєстровано програму для обробки цього файлу"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Лічильник закрито"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Лічильник файлів має невиконані операції"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Лічильник файлів вже закритий"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "файл"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Файл, що містить значок"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Версія %d кодування GFileIcon не підтримується"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Неправильні вхідні дані GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Потік не підтримує query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Операція встановлення позиції не підтримується для потоків"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Операція урізання не підтримується для вхідного потоку"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Операція урізання не підтримується для потоку"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Неправильна кількість лексем (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Відсутній тип назви класу %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Для типу %s не реалізовано інтерфейс GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Тип %s не класифікований"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Неправильний номер версії: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Для типу %s не реалізовано from_tokens() у інтерфейсі GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Неможливо обробити вказану версію кодування значків"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Вхідний потік не підтримує операцію читання"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Для потоку є незавершена операція"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Не вдається знайти типовий різновид монітору локального каталогу"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Неправильна назва файлу %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Помилка при отриманні інформації з файлової системи: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Не можна перейменовувати кореневий каталог"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Помилка при перейменуванні файлу: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Не вдається перейменувати файлу, файл з такою назвою вже існує"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Неправильна назва файлу"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Помилка при відкриванні файлу: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Не вдається відкрити каталог"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Помилка при видаленні файлу: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Помилка при переміщенні файлу до смітника: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Помилка при створенні каталогу смітника %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Не вдається знайти каталог верхнього рівня для смітника"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "не вдається знайти чи створити каталог смітника"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Помилка створення файл у смітнику: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Не вдається перемістити файл до смітника: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Помилка при створенні каталогу: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Помилка при створенні символьного посилання: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Помилка при переміщенні файлу: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Не вдається перемістити каталог у каталог"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Помилка при створенні файлу резервної копії"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Помилка при зчитуванні цільового файлу: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Переміщення між різними точками монтування не підтримується"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Значення атрибуту не можу бути NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "неправильний тип атрибуту (очікувався рядок)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Неправильна назва розширеного атрибуту"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Помилка при встановленні розширеного атрибуту \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Помилка отримання інформації про файл \"%s\": %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (неправильне кодування)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Помилка отримання інформації для дескриптору файлу: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Неправильний тип атрибута (очікувався uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Неправильний тип атрибуту (очікувався uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Неправильний тип атрибуту (очікувався рядок байтів)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Помилка встановлення прав доступу: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Помилка встановлення власник: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "символьне посилання не може мати значення NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Помилка при встановленні символьного посилання: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"помилка при встановленні символьного посилання: файл не є символьним "
+"посиланням"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Контекст SELinux не може значення NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Помилка при встановленні контексту SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux не увімкнено у цій системі"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Встановлення атрибуту %s не підтримуються"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Помилка при читанні файлу: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Помилка при встановленні позиції у файлі: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Помилка при закриванні файлу: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Не вдається знайти типовий різновид монітору локального файлу"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Помилка при записі до файлу: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Помилка при видаленні старої резервної копії посилання: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Помилка при створенні резервної копії: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Помилка при перейменуванні тимчасового файлу: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Помилка при усіканні файлу: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Помилка при відкритті файлу \"%s\": %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Цільовий файл є каталогом"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Цільовий файл не є звичайним файлом"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Файл був змінений іншою програмою"
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Помилка при видаленні файлу: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "Вказано неправильний GSeekType"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Неправильний тип операції зміни позиції у файлі"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Не можна усікати GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Досягнуто верхню межу масиву даних"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Не можна змінювати розмір потоку виводу у пам'ять"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Помилка при зміні розміру потоку виводу у пам'ять"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "для точки монтування не реалізовано операцію відмонтування"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "для точки монтування не реалізовано операцію витягування носія"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "для точки монтування не реалізовано перемонтування"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+"для точки монтування не реалізовано автоматичне визначення типу контексту"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+"для точки монтування не реалізовано автоматичне визначення типу синхронного "
+"змісту"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "У потоці виводу не реалізовано операцію запису"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Вхідний потік вже закритий"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "назва"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Назва значка"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "назви"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Масив, що містить назви значків"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "використовувати резервні типові значення"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Чи використовувати резервні типові значення,  які знайдені скороченням назви "
+"на символах '-'. Ігноруються всі назви після першої, якщо вказано декілька "
+"назв."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Версія %d кодування GThemedIcon не підтримується"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Помилка отримання інформації для дескриптору файлу: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Помилка при зчитуванні unix-сокету: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Помилка при закриванні unix-сокету: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Корінь файлової системи"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Помилка при записі до unix-сокету: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "том не підтримує операцію витягування носія"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Не вдається знайти програму"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Помилка при запусканні програми: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "URI не підтримуються"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "Зміни асоціацій розширень не підтримуються на win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "Створення асоціацій розширень не підтримуються на win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "не приховувати елементи"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "використовувати довгий формат списку"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[ФАЙЛ...]"
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..fbc7130
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,1846 @@
+# Vietnamese translation for GLib.
+# Copyright © 2009 GNOME i18n Project for Vietnamese.
+# T.M.Thanh <tmthanh@yahoo.com>, 2002.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.19.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-07 19:26+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "Thuộc tính bất thường « %s » cho yếu tố « %s »"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "Không tìm thấy thuộc tính « %s » của yếu tố « %s »"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "Thẻ bất thường « %s », mong đợi thẻ « %s »"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "Thẻ bất thường « %s » bên trong « %s »"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "Không tìm thấy tập tin liên kết lưu hợp lệ trong các thư mục dữ liệu"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "Một liên kết lưu URI « %s » đã có"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "Không tìm thấy liên kết lưu URI « %s »"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "Chưa xác định kiểu MIME trong liên kết lưu URI « %s »"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "Chưa xác định cờ riêng trong liên kết lưu URI « %s »"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "Chưa đặt nhóm trong liên kết lưu URI « %s »"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "Không có ứng dụng tên « %s » đã đăng ký một liên kết lưu « %s »"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Lỗi mở rộng dòng thực hiện « %s » bằng URI « %s »"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Không hỗ trợ khả năng chuyển đổi từ bộ ký tự « %s » sang « %s »"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Không thể mở bộ chuyển đổi từ « %s » sang « %s »"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Gặp dây byte không hợp lệ trong dữ liệu nhập chuyển đổi"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Gặp lỗi khi chuyển đổi: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Dây ký tự riêng phần ở cuối dữ liệu nhập"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Không thể chuyển đổi đồ dữ trữ « %s » thành bộ mã « %s »"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr ""
+"URI « %s » không phải là một URI tuyệt đối sử dụng lược đồ « file » (tập tin)"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "Không cho phép URI tập tin cục bộ « %s » chứa dấu thăng « # »"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI « %s » không hợp lệ"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Tên máy của URI « %s » không hợp lệ"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI « %s » chứa một số ký tự đã thoát không hợp lệ"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Tên đường dẫn « %s » không phải là một đường dẫn tuyệt đối"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Tên máy không hợp lệ"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Gặp lỗi khi mở thư mục « %s »: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Không thẻ cấp phát %lu byte để đọc tập tin « %s »"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Gặp lỗi khi đọc tập tin « %s »: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "Tập tin \"%s\" quá lớn"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Lỗi đọc từ tập tin « %s »: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Lỗi mở tập tin « %s »: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "Lỗi lấy các thuộc tính của tập tin « %s »: lỗi « fstat() »: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Lỗi mở tập tin « %s »: lỗi « fdopen() »: %s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Lỗi thay đổi tên tập tin « %s » thành « %s »: lỗi « g_rename() »: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Lỗi tạo tập tin « %s »: %s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Lỗi mở tập tin « %s »: lỗi « fdopen() »: %s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Lỗi ghi tập tin « %s »: lỗi « fdopen() »: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Lỗi ghi tập tin « %s »: lỗi « fdopen() »: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Lỗi ghi tập tin « %s »: lỗi « fdopen() »: %s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Lỗi đóng tập tin « %s »: lỗi « fclose() »: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "Không thể gỡ bỏ tập tin tồn tại « %s »: lỗi « g_unlink() »: %s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Biểu mẫu « %s » không hợp lệ, không nên chứa « %s »"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Biểu mẫu « %s » không chứa XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Lỗi đọc liên kết tượng trưng « %s »: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Không hỗ trợ khả năng sử dụng liên kết tượng trưng"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Không thể mở bộ chuyển đổi từ « %s » sang « %s »: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Không thể thực hiện tiến trình đọc thô trong « g_io_channel_read_line_string »"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Có dữ liệu chưa được chuyển đổi còn lại nằm trong bộ đệm đọc"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Kênh tận hết trong ký tự riêng phần"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Không thể thực hiện tiến trình đọc thô trong « g_io_channel_read_to_end »"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Lỗi mở tập tin « %s »: lỗi « fdopen() »: %s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Lỗi ánh xạ tập tin « %s »: lỗi « mmap() »: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "Lỗi trên dòng %d ký tự %d: "
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Lỗi trên dòng %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Thấy thực thể rỗng « &; »; những thực thể hợp lệ là: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Ký tự « %s » không phải là hợp lệ ở đầu của tên thực thể; ký tự « & » khởi đầu "
+"một thực thể; nếu dấu và này không nên là một thực thể, hãy thoát nó như là « "
+"&amp; »"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Ký tự « %s » không phải là hợp lệ bên trong tên thực thể"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Không biết tên thực thể « %s »"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Thực thể không có dấu chấm phẩy cuối cùng; dường như bạn đã dùng dấu và mà "
+"không định bắt đầu một thực thể — hãy thoát dấu và như là « &amp; »"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Lỗi phân tách « %-.*s », nó nên là một chữ số bên trong một tham chiếu ký tự "
+"(v.d. « &#234 ») — có lẽ chư số quá lớn."
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Tham chiếu ký tự « %-.*s » không mã hóa một ký tự được phép."
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Tham chiếu ký tự trống; nên chứa chữ số như là « &#454; »."
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Tham chiếu ký tự không có dấu chấm phẩy cuối cùng; dường như bạn đã dùng một "
+"dấu và mà không định bắt đầu một thực thể — hãy thoát dấu và như là « &amp; »"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Tham chiếu thực thể chưa hoàn thành"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Tham chiếu ký tự chưa hoàn thành"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Văn bản được mã hoá UTF-8 không hợp lệ: dáy quá dài"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Văn bản được mã hoá UTF-8 không hợp lệ: không phải ký tự bắt đầu"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Văn bản được mã hoá UTF-8 không hợp lệ: không phải « %s » hợp lệ"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Tài liệu phải bắt đầu bằng một yếu tố (v.d. <book> [quyển sách])"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"« %s » không phải là một ký tự hợp lệ đi theo một dấu ngoặc nhọn mở « < » ; "
+"không cho phép nó bắt đầu một tên yếu tố"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Ký tự lạ « %s », mong đợi một dấu ngoặc nhọn đóng « > » để kết thúc thẻ rỗng « %"
+"s »"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Ký tự lạ « %s », mong đợi một dấu bằng « = » nằm sau tên thuộc tính « %s » của "
+"yếu tố « %s »"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Ký tự lạ « %s », mong đợi một dấu ngoặc nhọn đóng « > » hay dấu xuyệc « / » để "
+"kết thúc thẻ khởi đầu của yếu tố « %s », hay tùy ý một thuộc tính; có lẽ bạn "
+"đã dùng một ký tự không hợp lệ trong một tên thuộc tính."
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Ký tự lạ « %s », mong đợi một dấu nháy kép mở nằm sau dấu bằng khi đưa giá "
+"trị cho thuộc tính « %s » của yếu tố « %s »"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"« %s » không phải là một ký tự hợp lệ nằm theo các ký tự « </ » ; không cho "
+"phép « %s » bắt đầu một tên yếu tố"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"« %s »  không phải là một ký tự hợp lệ nằm theo tên yếu tố đóng « %s »; ký tự "
+"được phép là « > »."
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Yếu tố « %s » đã được đóng, không có yếu tố mở hiện thời"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "Yếu tố « %s » đã được đóng, nhưng yếu tố mở hiện thời là « %s »"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Tài liệu rỗng hay chứa chỉ khoảng trắng"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "Tài liệu đã kết thúc bất thường ngay sau một dấu ngoặc nhọn mở « < »"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Tài liệu đã kết thúc bất thường với các yếu tố vẫn còn mở — « %s » là yếu tố "
+"đã mở cuối cùng"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Tài liệu kết thúc bất thường, mong đợi thấy dấu ngoặc nhọn đóng kết thúc thẻ "
+"« <%s/> »"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Tài liệu đã kết thúc bất thường bên trong một tên yếu tố"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Tài liệu đã kết thúc bất thường bên trong một tên thuộc tính"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Tài liệu đã kết thúc bất thường bên trong một thẻ mở yếu tố"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Tài liệu đã kết thúc bất thường sau dấu bằng nằm sau một tên thuộc tính; "
+"không có giá trị thuộc tính"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+"Tài liệu đã kết thúc bất thường trong khi nằm trong một giá trị thuộc tính"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "Tài liệu đã kết thúc bất thường bên trong thẻ đóng cho yếu tố « %s »"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Tài liệu đã kết thúc bất thường bên trong một chú thích hay hướng dẫn xử lý"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "đối tượng bị hỏng"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "lỗi nội bộ hay đối tượng bị hỏng"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "hết bộ nhớ"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "không thể rút lùi nữa"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "mẫu chứa mục không được hỗ trợ khi khớp bộ phận"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "lỗi nội bộ"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "khi khớp bộ phận, không hỗ trợ rút lui làm điều kiện"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "không thể đề qui nữa"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "vùng làm việc không thể chứa chuỗi con rỗng nữa"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "kết hợp cờ dòng mới một cách không hợp lệ"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "lỗi lạ"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ ở kết thúc của mẫu"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c ở kết thúc của mẫu"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "có ký tự lạ phía sau \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+"ở đây thì không cho phép ký tự thoát thay đổi chữ hoa/thường (\\l, \\L, \\u, "
+"\\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "các con số không theo thứ tự đúng trong chuỗi xác định số lượng {}"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "con số quá lớn trong chuỗi xác định số lượng {}"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "thiếu ] chấm dứt cho hạng ký tự"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "gặp dây thoát không hợp lệ trong hạng ký tự"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "phạm vi không theo thứ tự đúng trong hạng ký tự"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "không có gì cần lặp lại"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "không nhận dạng ký tự nằm sau (?"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "không nhận dạng ký tự nằm sau (?<"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "không nhận dạng ký tự nằm sau (?P"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "Hạng POSIX có tên chỉ được hỗ trợ bên trong hạng"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "thiếu ) chấm dứt"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr "có ) không có ( đầu tiên"
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R hay (?[+-]chữ số phải có ) theo sau"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "tham chiếu đến mẫu phụ không tồn tại"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "thiếu ) nằm sau chú thích"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "biểu thức chính quy quá lớn"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "không lấy được bộ nhớ"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "khẳng định lookbehind (thấy ở sau) không có độ dài cố định"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "có con số hay tên dạng sai nằm sau (?("
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "nhóm điều kiện chứa nhiều hơn hai nhánh"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "mong đợi khẳng định nằm sau (?("
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "không rõ tên hạng POSIX"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "Không hỗ trợ yếu tố đối chiếu POSIX"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "dãy \\x{...} chứa giá trị ký tự quá lớn"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "điều kiện không hợp lệ (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "\\C không được phép trong khẳng định lookbehind (thấy ở sau)"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "lời gọi đệ quy có thể bị lặp vô hạn"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "thiếu dấu chấm dứt trong tên mẫu phụ"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "hai mẫu phụ có tên cũng có cùng một tên"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "dãy \\P hay \\p dạng sai"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "có tên thuộc tính không rõ nằm sau \\P hay \\p"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "tên mẫu phụ quá dài (tối đa 32 ký tự)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "quá nhiều mẫu phụ có tên (tối đa 10 000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "giá trị bát phân lớn hơn \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "nhóm DEFINE (định nghĩa) chứa nhiều hơn một nhánh"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "không cho phép lặp lại một nhóm DEFINE (định nghĩa)"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "các tùy chọn NEWLINE (dòng mới) không thống nhất với nhau"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+"\\g không đi trước một tên có dấu ngoặc móc hoặc một con số không phải số "
+"không có dấu ngoặc móc tùy chọn"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "lặp lại bất thường"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "tràn mã"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "tràn vùng làm việc biên dịch"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "không tìm thấy mẫu phụ đã tham chiếu mà đã kiểm tra trước"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "Gặp lỗi trong khi khớp biểu thức chính quy %s: %s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "Thư viện PCRE đã biên dịch không có khả năng hỗ trợ UTF-8"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "Thư viện PCRE đã biên dịch không có khả năng hỗ trợ tài sản UTF-8"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Gặp lỗi trong khi biên dịch biểu thức chính quy %s ở ký tự %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "Gặp lỗi trong khi tối hưu hoá biểu thức chính quy %s: %s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "đợi chữ số thập lục hay dấu ngoặc móc đóng « } »"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "đợi chữ số thập lục"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "thiếu dấu ngoặc nhọn mở « < » trong tham chiếu tượng trưng"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "tham chiếu tượng trưng chưa hoàn thành"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "tham chiếu tượng trưng có độ dài số không"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "đợi chữ số"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "tham chiếu tượng trưng không cho phép"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "dấu xuyệc ngược kết thúc rải rác « \\ »"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "dãy thoạt lạ"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "Gặp lỗi trong khi phân tách văn bản thay thế « %s » ở ký tự %lu: %s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Văn bản trích dẫn không bắt đầu bằng một dấu trích dẫn"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Dấu ngoặc kép không ăn khớp nằm trên dòng lệnh hay trong văn bản khác đã "
+"trích dẫn trong trình bao"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Văn bản đã kết thúc ngay sau dấu xuyệc ngược « \\ » (văn bản là « %s »)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Văn bản đã kết thúc trước khi tìm dấu ngoặc kép tương ứng với « %c » (văn bản "
+"là « %s »)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Văn bản rỗng (hay chưa chỉ khoảng trắng)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Lỗi đọc dữ liệu từ tiến trình con"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "Lỗi tạo ống dẫn để liên lạc với tiến trình con (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Lỗi đọc từ ống dẫn con (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Lỗi chuyển đổi sang thư mục « %s » (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Lỗi thực hiện tiến trình con (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "Tên chương trình không hợp lệ: %s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "Gặp chuỗi không hợp lệ nằm trong véc-tơ đối số tại %d: %s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Gặp chuỗi không hợp lệ nằm trong môi trường: %s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "Thư mục làm việc không hợp lệ: %s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Lỗi thực hiện chương trình bổ trợ (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Gặp lỗi bất thường nằm trong « g_io_channel_win32_poll() » khi đọc dữ liệu từ "
+"tiến trình con"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Lỗi đọc dữ liệu từ tiến trình con (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Gặp lỗi bất thường nằm trong « select() » khi đọc dữ liệu từ tiến trình con (%"
+"s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Gặp lỗi bất thường nằm trong « waitpid() » (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Lỗi tạo tiến trình con (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Lỗi thực hiện tiến trình con « %s » (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "Lỗi chuyển hướng kết nhập hay kết xuất của tiến trình con (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Lỗi tạo tiến trình con (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Gặp lỗi không rõ khi thực hiện tiến trình con « %s »"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "Lỗi đọc đủ dữ liệu từ ống dẫn PID con (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Ký tự ở ngoại phạm vi UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Dãy không hợp lệ nằm trong dữ liệu nhập việc chuyển đổi"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Ký tự ở ngoại phạm vi UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Sử dụng:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[TÙY_CHỌN...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Tùy chọn trợ giúp:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Hiển thị các tùy chọn trợ giúp"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Hiển thị mọi tùy chọn trợ giúp"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Tùy chọn ứng dụng:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Không thể phân tách giá trị số nguyên « %s » cho %s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Giá trị số nguyên « %s » cho %s ở ngoại phạm vi"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Không thể phân tách giá trị đôi « %s » cho %s"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Giá trị đôi « %s » cho %s ở ngoại phạm vi"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "Gặp lỗi khi phân tách tùy chọn %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "Thiếu đối số cho %s"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Không biết tùy chọn %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "Không tìm thấy tập tin khoá hợp lệ nằm trong thư mục tìm kiếm"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Không phải là một tập tin chuẩn"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Tập tin rỗng"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Tập tin khóa chứa dòng « %s » mà không phải là một cặp giá trị khóa, nhóm, "
+"hay chú thích"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "Tên nhóm không hợp lệ: %s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Tập tin khóa không bắt đầu với nhóm"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "Tên khoá không hợp lệ: %s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Tập tin khóa chứa bảng mã không được hỗ trợ « %s »"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Tập tin khóa không có nhóm « %s »"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Tập tin khóa không có khóa « %s »"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "Tập tin khóa chứa khóa « %s » với giá trị « %s » mà không phải là UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Tập tin khóa chứa khóa « %s » mà có giá trị không có khả năng giải dịch."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Tập tin khóa chứa khóa « %s » trong nhóm « %s » mà có giá trị không có khả "
+"năng giải dịch."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Tập tin khóa không có khóa « %s » trong nhóm « %s »"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Tập tin khóa chứa ký tự thoát tại kết thúc của dòng"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "Tập tin khóa chứa dãy thoát không hợp lệ « %s »"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Không thể giải dịch giá trị « %s » dạng con số."
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Giá trị số nguyên « %s » ở ngoại phạm vi"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Không thể giải dịch giá trị « %s » dạng con số nổi."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Không thể giải dịch giá trị « %s » dạng bun (đúng/sai)."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "Giá trị đếm quá lớn được gửi cho %s"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "Luồng đã bị đóng"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "Thao tác bị thôi"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "Không rõ kiểu"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "kiểu tập tin %s"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "kiểu %s"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "Kết thúc luồng sớm bất thường"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "Không có tên"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "Tập tin Desktop không ghi rõ trường Exec (thực hiện)"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "Không tìm thấy thiết bị cuối cần thiết cho ứng dụng"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "Không thể tạo thư mục cấu hình ứng dụng người dùng %s: %s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "Không thể tạo thư mục cấu hình MIME người dùng %s: %s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "Không thể tạo tập tin desktop %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "Lời định nghĩa riêng cho %s"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "ổ đĩa không thực hiện chức năng đẩy ra"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "ổ đĩa không thực hiện chức năng thăm dò có phương tiện không"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "Không thể quản lý phiên bản %d của bảng mã GEmblem"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "Bảng mã GEmblem chứa số các hiệu bài dạng sai (%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "Không thể quản lý phiên bản %d của bảng mã GEmblemedIcon"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "Bảng mã GEmblemedIcon chứa số các hiệu bài dạng sai (%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "Mong đợi một GEmblem cho GEmblemedIcon"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "Thao tác không được hỗ trợ"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "Bộ lắp chứa không tồn tại"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "Không thể sao chép đè lên thư mục"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "Không thể sao chép thư mục đè lên thư mục"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "Tập tin đích đã có"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "Không thể sao chép đệ quy thư mục"
+
+#: gio/gfile.c:2346
+#, fuzzy
+msgid "Can't copy special file"
+msgstr "Không thể sao chép đè lên thư mục"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "Đưa ra giá trị liên kết tượng trưng không hợp lệ"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "Thùng rác không được hỗ trợ"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "Tên tập tin không thể chứa « %c »"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "hàm volume (khối tin) không thực hiện chức năng mount (lắp)"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "Không có ứng dụng đăng ký xử lý tập tin này"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "Bộ đếm bị đóng"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "Bộ đếm tập tin có thao tác còn chạy"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "Bộ đếm tập tin đã bị đóng"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "tập tin"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "Tập tin chứa biểu tượng"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "Không thể quản lý phiên bản %d của bảng mã GFileIcon"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "Dữ liệu nhập dạng sai cho GFileIcon"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "Luồng không hỗ trợ hàm « query_info »"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "Chức năng seek (tìm nơi) không được hỗ trợ trên luồng"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "Không cho phép cắt ngắn luồng nhập vào"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "Không cho phép cắt ngắn luồng"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "Số các hiệu bài không đúng (%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "Không có kiểu cho tên hạng %s"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "Kiểu %s không thực hiện giao diện GIcon"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "Kiểu %s không được đặt hạng"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "Số thứ tự phiên bản dạng sai: %s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "Kiểu %s không thực hiện « from_tokens() » trên giao diện GIcon"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "Không thể quản lý phiên bản đã cung cấp của bảng mã biểu tượng"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "Luồng nhập vào không thực hiện chức năng đọc"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "Luồng có thao tác còn chạy"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "Không tìm thấy kiểu theo dõi thư mục cục bộ mặc định"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "Tên tập tin không hợp lệ: %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Gặp lỗi khi lấy tập tin về hệ thống tập tin: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "Không thể thay đổi tên của thư mục gốc"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "Gặp lỗi khi thay đổi tên của tập tin: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "Không thể thay đổi tên của tập tin, vì tên tập tin đã có"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "Tên tập tin không hợp lệ"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "Gặp lỗi khi mở tập tin: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "Không thể mở thư mục"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "Gặp lỗi khi gỡ bỏ tập tin: %s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "Gặp lỗi khi chuyển tập tin vào sọt rác: %s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Không thể tạo thư mục sọt rác %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "Không tìm thấy thư mục cấp đầu cho sọt rác"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "Không tìm thấy hay không thể tạo thư mục sọt rác"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Không thể tạo tập tin thông tin sọt rác: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "Không thể chuyển tập tin vào sọt rác: %s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "Lỗi tạo thư mục: %s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Gặp lỗi khi tạo liên kết tượng trưng: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "Gặp lỗi khi di chuyển tập tin: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "Không thể di chuyển thư mục đè lên thư mục"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "Lỗi tạo tập tin sao lưu"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "Gặp lỗi khi gỡ bỏ tập tin đích: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "Không hỗ trợ chức năng di chuyển giữa các bộ lắp"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "Giá trị thuộc tính phải có giá trị"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "Kiểu thuộc tính không hợp lệ (mong đợi chuỗi)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "Tên thuộc tính đã mở rộng không hợp lệ"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Gặp lỗi khi đặt thuộc tính đã mở rộng « %s »: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Gặp lỗi khi lấy trạng thái về tập tin « %s »: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (bảng mã không hợp lệ)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Gặp lỗi khi lấy trạng thái về mô tả tập tin: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "Kiểu thuộc tính không hợp lệ (mong đợi uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "Kiểu thuộc tính không hợp lệ (mong đợi uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "Kiểu thuộc tính không hợp lệ (mong đợi chuỗi byte)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "Gặp lỗi khi đặt quyền hạn: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "Gặp lỗi khi đặt người sở hữu : %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "liên kết tượng trưng phải có giá trị"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "Gặp lỗi khi đặt liên kết tượng trưng: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+"Gặp lỗi khi đặt liên kết tượng trưng: tập tin không phải là liên kết tượng "
+"trưng"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "Ngữ cảnh SELinux phải khác NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Lỗi đặt ngữ cảnh SELinux: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux chưa được bật trên hệ thống này"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Không hỗ trợ chức năng đặt thuộc tính %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "Gặp lỗi khi đọc từ tập tin: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "Gặp lỗi khi tìm nơi trong tập tin: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "Gặp lỗi khi đóng tập tin: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "Không tìm thấy kiểu theo dõi tập tin cục bộ mặc định"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "Gặp lỗi khi ghi vào tập tin: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Gặp lỗi khi gỡ bỏ liên kết sao lưu cũ : %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Gặp lỗi khi tạo bản sao lưu : %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Gặp lỗi khi thay đổi tên của tập tin tạm thời: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "Gặp lỗi khi cắt ngắn tập tin: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Gặp lỗi khi mở tập tin « %s »: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "Tập tin đích là một thư mục"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "Tập tin đích không phải là một tập tin bình thường"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "Tập tin đã bị sửa đổi bên ngoài"
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Gặp lỗi khi gỡ bỏ tập tin: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "GSeekType được cung cấp không hợp lệ"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "Yêu cầu tìm không hợp lệ"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "Không thể cắt GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "Đã đạt ngưỡng mảng dữ liệu tối đa"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "Luồng ra bộ nhớ không thể thay đổi kích thước"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "Lỗi thay đổi kích thước luồng ra bộ nhớ"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "hàm mount (lắp) không thực hiện hàm unmount (bỏ lắp)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "hàm mount (lắp) không thực hiện hàm eject (đầy ra)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "hàm mount (lắp) không thực hiện hàm remount (lắp lại)"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "hàm mount (lắp) không thực hiện đoán nội dung"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "hàm mount (lắp) không thực hiện đoán nội dung đồng bộ"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "Luồng xuất không thực hiện hàm write (ghi)"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "Luồng nguồn đã bị đóng"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "tên"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "Tên của biểu tượng"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "tên"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "Mảng chứa tên biểu tượng"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "dùng dự phòng mặc định"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"Có dùng dự phòng mặc định được tìm thấy bằng cách rút ngắn tên tại ký tự '-' "
+"hay không. Chỉ xét tên đầu tiên nếu trùng tên."
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "Không thể quản lý phiên bản %d của bảng mã GThemedIcon"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "Bộ mô tả tập tin"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "Bộ mô tả tập tin từ đó cần đọc"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "Đóng bộ mô tả tập tin"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "Có nên đóng bộ mô tả tập tin khi luồng được đóng, hay không"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "Gặp lỗi khi đọc từ UNIX: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "Gặp lỗi khi đóng UNIX: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "Gốc hệ thống tập tin"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "Bộ mô tả tập tin vào đó cần ghi"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "Gặp lỗi khi ghi vào UNIX: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "hàm volume (khối tin) không thực hiện hàm eject (đầy ra)"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "Không tìm thấy ứng dụng"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "Gặp lỗi khi khởi chạy ứng dụng: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "Không hỗ trợ địa chỉ URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "các thay đổi liên quan không được hỗ trợ trên win32"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "chức năng tạo sự liên quan không được hỗ trợ trên win32"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "đừng ẩn mục nhập"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "dùng định dạng liệt kê dài"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[TẬP_TIN...]"
diff --git a/po/wa.po b/po/wa.po
new file mode 100644
index 0000000..3de8f26
--- /dev/null
+++ b/po/wa.po
@@ -0,0 +1,1829 @@
+# Translation into the walloon language.
+#
+# Si vos voloz donner on côp di spale pol ratournaedje di Gnome (ou des
+# ôtes libes programes) sicrijhoz-mu a l' adresse emile
+# <srtxg@chanae.alphanet.ch>; nos avans co bråmint di l' ovraedje a fé.
+#
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Pablo Saratxaga <pablo@walon.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2004-05-03 14:40+0200\n"
+"Last-Translator: Pablo Saratxaga <pablo@walon.org>\n"
+"Language-Team: Walloon <linux-wa@walon.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Dji n' a savou lére li loyén simbolike «%s»: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "Li cviersaedje di l' ecôdaede «%s» viè «%s» n' est nén sopoirté"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Dji n' a savou drovi l' cvierseu di «%s» viè «%s»"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Secwince d' octets nén valide e l' intrêye do cviersaedje"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr ""
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr ""
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "Li tchmin «%s» n' est nén on tchmin absolou"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr ""
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr ""
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr ""
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Li tchmin «%s» n' est nén on tchmin absolou"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "No d' lodjoe nén valide"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Åk n' a nén stî tot drovant l' ridant «%s»: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Dji n' a savou alouwer %lu octets po lére li fitchî «%s»"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Dji n' a nén savou lére li fitchî «%s»: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Dji n' a nén savou aveur les atributs do fitchî «%s»: fstat() a fwait "
+"berwete: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Dji n' a savou askepyî l' fitchî «%s»: %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "Li patron «%s» n' est nén valide, i n' doet nén aveur on «%s»"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "Li patron «%s» èn finixh nén avou XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Dji n' a savou lére li loyén simbolike «%s»: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Loyéns simbolikes nén sopoirtés"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Dji n' a savou drovi l' cvierseu di «%s» viè «%s»: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr ""
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr ""
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Aroke el roye %d caractere %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Aroke el roye %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Vude intité «&;» di trovêye; les intités valides sont: &amp; &quot; &lt; &gt; "
+"&apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Li caractere «%s» n' est nén valide å cmince do no d' ene intité; le "
+"caractere & cmince ene intité; si ç' caractere ampersande doet esse håyné té "
+"ké, adon el fåt scrire come « &amp; »"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Li caractere «%s» n' est nén valide dins on no d' intité"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Li no d' intité «%s» n' est nén cnoxhou"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"L' intité èn finixh nén avou on pont-coma; probåblumint k' vos avoz eployî "
+"on caractere ampersande sins vleur sicrire ene intité, dins ç' cas el fåt "
+"scrire insi: « &map; »"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr ""
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr ""
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr ""
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr ""
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Tecse ecôdé en UTF-8 nén valide"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Tecse ecôdé en UTF-8 nén valide"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Tecse ecôdé en UTF-8 nén valide"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Li documint doet cmincî avou èn elemint (eg: <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr ""
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Li documint esteut vude ou avou seulmint des blancs"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr ""
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr ""
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr ""
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr ""
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr ""
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Secwince d' octets nén valide e l' intrêye do cviersaedje"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr ""
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr ""
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr ""
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Loyéns simbolikes nén sopoirtés"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Aroke el roye %d caractere %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr ""
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Li tecse esteut vude (ou avou seulmint des blancs)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Dji n' a savou lére do process efant"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Dji n' a savou lére del buze efant (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Dji n' a savou candjî viè l' ridant «%s» (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Dji n' a savou enonder l' process efant (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "No d' lodjoe nén valide"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Secwince nén valide e l' intrêye do cviersaedje"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Åk n' a nén stî tot drovant l' ridant «%s»: %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Dji n' a savou enonder l' aidant programe"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Dji n' a savou fé on fork() (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Dji n' a savou enonder l' process efant «%s» (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Dji n' a savou fé on fork do process efant (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Aroke nén cnoxhowe tot-z enondant l' processus efant «%s»"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Caractere foû fortchete po l' ecôdaedje UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Secwince nén valide e l' intrêye do cviersaedje"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Caractere foû fortchete po l' ecôdaedje UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "No d' lodjoe nén valide"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "No d' lodjoe nén valide"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Loyéns simbolikes nén sopoirtés"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Loyéns simbolikes nén sopoirtés"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr ""
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "No d' lodjoe nén valide"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "No d' lodjoe nén valide"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Dji n' a savou askepyî l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Dji n' a savou askepyî l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Dji n' a savou askepyî l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Åk n' a nén stî tot drovant l' ridant «%s»: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr ""
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Åk n' a nén stî tot drovant l' ridant «%s»: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Aroke el roye %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Loyéns simbolikes nén sopoirtés"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "No d' lodjoe nén valide"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr ""
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Åk n' a nén stî tot léjhant l' fitchî «%s»: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Aroke el roye %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Loyéns simbolikes nén sopoirtés"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Åk n' a nén stî tot cviersant: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Dji n' a savou alouwer %lu octets po lére li fitchî «%s»"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "Dji n' a savou drovi li fitchî «%s»: fdopen() a fwait berwete: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "Li cviersaedje di l' ecôdaede «%s» viè «%s» n' est nén sopoirté"
diff --git a/po/xh.po b/po/xh.po
new file mode 100644
index 0000000..0b1a281
--- /dev/null
+++ b/po/xh.po
@@ -0,0 +1,1900 @@
+# Xhosa translation of glib
+# Copyright (C) 2005 Canonical Ltd.
+# This file is distributed under the same license as the glib package.
+# Translation by Canonical Ltd <translations@canonical.com> with thanks to
+# Translation World CC in South Africa, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2005-02-08 12:31+0200\n"
+"Last-Translator: Canonical Ltd <translations@canonical.com>\n"
+"Language-Team: Xhosa <xh-translate@ubuntu.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"Uphawu olutenxileyo '%s', lulindele '=' emva kwegama lophawu '%s' "
+"lwesiqalelo '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+#, fuzzy
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+"Iqhosha elisebenzayo lefayili alifumanekanga kwidata yoovimba beefayili"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "Akuphumelelanga ukufunda ikhonkco elingumfuziselo '%s': %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr ""
+"Uguqulo ukusuka kwingqokelela yeempawu '%s' ukuya kwi '%s' ayixhaswanga"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "Akukwazekanga ukuvula isiguquli ukusuka ku '%s' ukuya ku '%s'"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "Ulandelelwano olungasebenziyo lwe-byte kungeniso-lwazi yenguqulo"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "Inxalenye yophawu lolandelelwano ekupheleni kongeniso-lwazi"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "Akukwazeki ukuguqula i-fallback '%s' kwiseti yekhowudi '%s'"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "I-URI '%s' asiyiyo i-URI ngokupheleleyo esebenzisa indlela ye \"file\""
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "I-URI yefayili yendawo '%s' kunokwenzeka ingaquki i-'#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "Ayisebenzi i-'%s' yeURI"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "Igama lomququzeleli weURI '%s' alisebenzi"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "I-URI '%s' iqulethe iimpawu ezisindileyo ezingasebenziyo"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "Igama lendlela yothungelwano '%s' akuyiyo kuphela indlela"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "Impazamo yokuvula uvimba weefayili '%s': %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "Akwazekanga ukwaba %lu ii-byte ukufunda ifayili \"%s\""
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "Akuphumelelekanga ukufunda ifayili '%s': %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr ""
+"Akuphumelelekanga ukufumana iimpawu zefayili '%s': fstat() "
+"akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "Akuphumelelekanga ukudala ifayili '%s': %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "I-Template '%s' ayisebenzi, kufuneka ingaqulathi i '%s'"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "I-Template '%s' ayipheli ngo XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "Akuphumelelanga ukufunda ikhonkco elingumfuziselo '%s': %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "Ikhonkco elingumfuziselo alixhaswanga"
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "Akukwazekanga ukuvula isiguquli ukusuka ku `%s' ukuya ku `%s': %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr ""
+"Akukwazeki ukwenza ukufunda okungalungiswanga kwi "
+"g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "Intsalela yedata engaguqulwanga kwisigcini sethutyana sokufunda"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "Isiqhagamshelanisi siphelela inxalenye yophawu"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr ""
+"Akukwazeki ukwenza ukufunda okungalungiswanga kwi g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "Impazamo emgceni %d uphawu %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "Impazamo emgceni %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"Into ezimeleyo eze '&;' ebonwayo; izinto ezizimeleyo ezisebenzayo: &amp; "
+"&quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"Uphawu '%s' alusebenzi ekuqaleni kwegama lento ezimeleyo; u-& uphawu uqala "
+"into ezimeleyo; ukuba le ampersand ayifanelanga ukuba yinto ezimeleyo, "
+"yiphephise njenge &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "Uphawu '%s' alusebenzi ngaphakathi kwegama lento ezimeleyo"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "Igama lento ezimeleyo '%s' alaziwa"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"Into ezimeleyo ayiphelelanga ngechaphaza-msila; mhlawumbi usebenzise uphawu "
+"lwe- ampersand ungazimiselanga ukuqala into ezimeleyo - phepha i- ampersand "
+"njenge &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"Akuphumelelanga ukwahlula ngezijungqe '%-.*s', obekufanele ukuba ngumvo "
+"ngaphakathi kophawu lokuthumela (&#234; umzekelo) - mhlawumbi umvo mkhulu "
+"kakhulu"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "Uphawu lokuthumela '%-.*s' alulunxulumanisi uphawu olunemvume"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "Uphawu lokuthumela oluze; kufuneka luquke umvo ofana nalo &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"Uphawu lokuthumela aluphelelanga ngechaphaza-msila; mhlawumbi usebenzise "
+"uphawu lwe- ampersand ungenanjongo yokuqala into ezimeleyo - phepha i- "
+"ampersand njenge &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "Into ezimeleyo yokuthumela engagqitywanga"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "Uphawu lokuthumela olungagqitywanga"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "Umbhalo onxulumanisayo ongasebenziyo we- UTF-8"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "Umbhalo onxulumanisayo ongasebenziyo we- UTF-8"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "Umbhalo onxulumanisayo ongasebenziyo we- UTF-8"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "Uxwebhu kufuneka luqale ngesiqalelo (umzkl. <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' asilophawu elisebenzayo elilandela u '<' uphawu; linokungaqali igama "
+"lesiqalelo"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"Uphawu olutenxileyo '%s', lulindele '>' uphawu lokuphelisa ilebhile "
+"yokuqalisa isiqalelo '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"Uphawu olutenxileyo '%s', lulindele '=' emva kwegama lophawu '%s' "
+"lwesiqalelo '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"Uphawu olutenxileyo '%s', lulindele '>' okanye '/' uphawu lokuphelisa "
+"ilebhile yokuqala isiqalelo '%s', okanye ngokhetho lophawu; mhlawumbi "
+"usebenzise uphawu olungasebenziyo kwigama lophawu"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"Uphawu olutenxileyo '%s', lulindele uphawu locaphulo oluvulekileyo emva "
+"kweempawu zokulingana xa kunikwa ixabiso lophawu '%s' lwesiqalelo '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' asilophawu olusebenzayo ukulandela iimpawu '</'; '%s' linokungaqali "
+"igama lesiqalelo"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' asilophawu olusebenzayo ukulandela igama lesiqalelo elikufuphi '%s'; "
+"uphawu oluvunyelweyo lolu '>'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "Isiqalelo '%s' besivaliwe, akukho siqalelo sivuliweyo njengangoku"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr ""
+"Isiqalelo '%s' besivaliwe, kodwa isiqalelo esivuliweyo njengangoku sesi '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "Uxwebhu beluze okanye luqulathe isikhewu esimhlophe kuphela"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr ""
+"Uxwebhu luphele ngesiquphe kanye emva kwesibiyeli sedolo elivulekileyo '<'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"Uxwebhu luphele ngesiquphe xeshikweni iziqalelo bezisavulile - '%s' "
+"isiqalelo sokugqibela besivuliwe"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"Uxwebhu luphele ngesiquphe, kulindelwe ukubona isibiyeli sedolo elivaliweyo "
+"esiphelisa ilebhile <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "Uxwebhu luphele ngesiquphe ngaphakathi kwegama lesiqalelo"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "Uxwebhu luphele ngesiquphe ngaphakathi kwegama lophawu"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "Uxwebhu luphele ngesiquphe ngaphakathi kwelebhile evula isiqalelo."
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"Uxwebhu luphele ngesiquphe emva kokuba uphawu lokulingana lulandele igama "
+"lophawu; kungekho xabiso lophawu"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "Uxwebhu luphele ngesiquphe xeshikweni lungaphakathi kwexabiso lophawu"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"Uxwebhu luphele ngesiquphe ngaphakathi kwelebhile evaliweyo yesiqalelo '%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"Uxwebhu luphele ngesiquphe ngaphaikathi komyalelo wezimvo okanye inkqubo"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "Isiqhagamshelanisi siphelela inxalenye yophawu"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "Ulandelelwano olungasebenziyo lwe-byte kungeniso-lwazi yenguqulo"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "Uphawu lokuthumela olungagqitywanga"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "Uphawu lokuthumela olungagqitywanga"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "Uphawu lokuthumela olungagqitywanga"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+#, fuzzy
+msgid "POSIX collating elements are not supported"
+msgstr "Ikhonkco elingumfuziselo alixhaswanga"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "Impazamo emgceni %d uphawu %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "Into ezimeleyo yokuthumela engagqitywanga"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "Umbhalo ocatshuliweyo awuqali ngophawu locaphulo"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr ""
+"Uphawu locaphulo olungangqinelaniyo kumgca womyalelo okanye omnye umbhalo "
+"ocatshuliweyo"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "Umbhalo uphele nje emva kophawu '\\'. (Umbhalo ubu '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"Umbhalo uphele phambi kokuba ucaphulo olungqinelanayo lufunyanwe malunga %c. "
+"(Umbhalo ubu '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "Umbhalo ubuze (okanye uqulethe isithuba esimhlophe kuphela)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "Akuphumelelekanga ukufunda idata kwinkqubo yomntwana"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr ""
+"Akuphumelelekanga ukudala uthungelwano lokunxibelelana nenkqubo yomntwana (%"
+"s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "Akuphumelelekanga ukufunda kuthungelwano lomntwana (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "Akuphumelelekanga ukuguqukela kuvimba weefayili '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "Akuphumelelekanga ukuphumeza inkqubo yomntwana (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "Ulandelelwano olungasebenziyo kwinguqulo yongeniso-lwazi"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "Impazamo yokuvula uvimba weefayili '%s': %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "Akuphumelelekanga ukuphumeza inkqubo yomncedi"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"Impazamo engalindelekanga kwi g_io_channel_win32_poll() yokufunda idata "
+"kwinkqubo yomntwana"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "Akuphumelelekanga ukufunda idata kwinkqubo yomntwana (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr ""
+"Impazamo engalindelekanga select() lokufunda idata kwinkqubo yomntwana (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "Impazamo engalindelekanga kwi-waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "Akuphumelelekanga ukudala inkqubo entsha (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "Akuphumelelekanga ukuphumeza inkqubo yomntwana \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr ""
+"Akuphumelelekanga ukuyalela kwakhona ungeniso nophumezo lolwazi kwinkqubo "
+"yomntwana (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "Akuphumelelekanga ukudala inkqubo entsha yomntwana (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "Impazamo engaziwayo yokuphumeza inkqubo yomntwana \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr ""
+"Akuphumelelekanga ukufunda ngokwaneleyo idata evela kuthungelwano nomntwana "
+"(%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "Uphawu lungaphandle kwesigaba se-UTF-8"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "Ulandelelwano olungasebenziyo kwinguqulo yongeniso-lwazi"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "Uphawu lungaphandle kwesigaba se-UTF-16"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "Ukusetyenziswa:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[OPTION...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "Uncedo lokunokukhethwa:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "Bonisa amancedo anokukhethwa"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "Bonisa onke amancedo anokukhethwa"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "Iindlela zokusebenza ezinokukhethwa:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, fuzzy, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "Akukwazeki ukwahlula ngezijungqe ixabiso lanani elimbaxa '%s' for --%s"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "Ixabiso lenani elimbaxa '%s' le %s lingaphaya kwesigaba"
+
+#: glib/goption.c:885
+#, fuzzy, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "Akukwazeki ukwahlula ngezijungqe ixabiso lanani elimbaxa '%s' for --%s"
+
+#: glib/goption.c:893
+#, fuzzy, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "Ixabiso lenani elimbaxa '%s' le %s lingaphaya kwesigaba"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "Ukhetho olungaziwayo %s"
+
+#: glib/gkeyfile.c:358
+#, fuzzy
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+"Iqhosha elisebenzayo lefayili alifumanekanga kwidata yoovimba beefayili"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "Asiyofayili esebenza rhoqo"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "Ifayili ize"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+"Ifayili engundoqo iqulethe umgca '%s' ongesiso isibini sexabiso okanye "
+"isindululo"
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "Ifayili engundoqo ayiqali ngeqela"
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "Ifayili engundoqo iqulethe unxulumano olungaxhaswanga '%s'"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "Ifayili engundoqo ayinalo iqela '%s'"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "Ifayili engundoqo ayinalo iqhosha '%s'"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+"Ifayili engundoqo iqulethe iqhosa '%s' elinexabiso '%s' elingeyiyo UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+"Ifayili engundoqo iqulethe iqhosha '%s' elinexabiso elingekhe lichazwe."
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+"Ifayili engundoqo iqulethe iqhosha '%s' kwiqela '%s' elinexabiso elingekhe "
+"lichazwe."
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "Ifayili engundoqo ayinalo iqhosha '%s' eqeleni '%s'"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "Ifayili engundoqo iqulethe uphawu lokuphepha ekupheleni komgca"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr ""
+"Ifayili engundoqo iqulethe ulandelelwano olungasebenziyo lokuphepha '%s'"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "Ixabiso '%s' alinakho ukuchazwa njengenani."
+
+#: glib/gkeyfile.c:3661
+#, fuzzy, c-format
+msgid "Integer value '%s' out of range"
+msgstr "Ixabiso lenani elimbaxa '%s' le %s lingaphaya kwesigaba"
+
+#: glib/gkeyfile.c:3694
+#, fuzzy, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "Ixabiso '%s' alinakho ukuchazwa njengenani."
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "Ixabiso '%s' alinakho ukuchazwa njenge-boolean."
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+#, fuzzy
+msgid "Unknown type"
+msgstr "Ukhetho olungaziwayo %s"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+#, fuzzy
+msgid "Operation not supported"
+msgstr "Ikhonkco elingumfuziselo alixhaswanga"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+#, fuzzy
+msgid "Trash not supported"
+msgstr "Ikhonkco elingumfuziselo alixhaswanga"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "Igama lomququzeleli weURI '%s' alisebenzi"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "Akuphumelelekanga ukudala ifayili '%s': %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "Akuphumelelekanga ukudala ifayili '%s': %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "Akuphumelelekanga ukudala ifayili '%s': %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "Impazamo yokuvula uvimba weefayili '%s': %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "Uxwebhu luphele ngesiquphe ngaphakathi kwegama lophawu"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "Impazamo yokuvula uvimba weefayili '%s': %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "Impazamo emgceni %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, fuzzy, c-format
+msgid "Setting attribute %s not supported"
+msgstr "Ikhonkco elingumfuziselo alixhaswanga"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+#, fuzzy
+msgid "Target file is not a regular file"
+msgstr "Asiyofayili esebenza rhoqo"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "Igama lomququzeleli elingasebenziyo"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "Igama lomququzeleli weURI '%s' alisebenzi"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "Impazamo yokufunda ifayili '%s': %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "Impazamo emgceni %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#: gio/gwin32appinfo.c:336
+#, fuzzy
+msgid "URIs not supported"
+msgstr "Ikhonkco elingumfuziselo alixhaswanga"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+#, fuzzy
+msgid "[FILE...]"
+msgstr "[OPTION...]"
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "Impazamo ngelixa lenguqulo: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr ""
+#~ "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "Akwazekanga ukwaba %lu ii-byte ukufunda ifayili \"%s\""
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr ""
+#~ "Akuphumelelekanga ukuvula ifayili '%s': fdopen() akuphumelelekanga: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr ""
+#~ "Inguqulo ukusuka kwingqokelela yeempawu `%s' ukuya ku `%s' ayixhaswanga"
diff --git a/po/yi.po b/po/yi.po
new file mode 100644
index 0000000..c25fda7
--- /dev/null
+++ b/po/yi.po
@@ -0,0 +1,1864 @@
+# Yiddish version
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Raphael Finkel <raphael@cs.uky.edu>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2003-03-19\n"
+"Last-Translator: Raphael Finkel <raphael@cs.uky.edu>\n"
+"Language-Team: Yiddish <raphael@cs.uky.edu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: glib/gbookmarkfile.c:737
+#, fuzzy, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr ""
+"מאָדנע שריפֿטצײכן '%s'; דערװאַרט אַ '=' שריפֿטצײכן נאָך אַטריבוט־נאָמען %s פֿונעם "
+"עלעמענט '%s'"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr ""
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr ""
+
+#: glib/gbookmarkfile.c:3417
+#, fuzzy, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "ניט געקענט שאַפֿן טעקע %s: %s"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "פֿאַרװאַנדלונג פֿון קאָדירונג %s צו %s ניט געשטיצט"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "ניט געקענט עפֿענען פֿאַרװאַנדלער פֿון %s צו %s: %s"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "אומלעקסיק אַכטעלע־סעײַװענץ אין פֿאַרװאַנדלונג אַרױסשרײַב"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "האַלבע כאַראַקטער־סעקװענץ צום סוף פֿון אַרײַנשרײַב"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "ניט געקענט פֿאַרװאַנדלען גרונטבאַטרעף %s צו קאָדירונג %s"
+
+#: glib/gconvert.c:1737
+#, fuzzy, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "דער URI %s איז ניט אַבסאָלוט לױט דער טעקע־סכעמע"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "דער לאָקאַלער טעקע־URI %s טאָר ניט כּולל זײַן אַ '#'"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "דער URI %s איז אומלעקסיק"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "דער מאַשין־נאָמען פֿונעם URI %s איז אומלעקסיק"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "דער URI %s איז כּולל אומלעקסיקע פּליטה־כאַראַקטערס"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "די פּאַפּקע־רשימה %s איז ניט אַבסאָלוט"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "דורכפֿאַל אין עפֿענען פּאַפּקע %s: %s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "ניט געקענט אױסטײלן %lu אַכטעלעך צו לײענען טעקע %s"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr ""
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "ניט געקענט לײענען טעקע %s: %s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "ניט געקענט עפֿענען טעקע '%s': %s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "ניט געקענט באַקומען אַטריבוטן פֿון טעקע %s: fstat() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:854
+#, fuzzy, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "ניט געקענט שאַפֿן טעקע %s: %s"
+
+#: glib/gfileutils.c:910
+#, fuzzy, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:935
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:997
+#, fuzzy, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr ""
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "מוסטער %s אומלעקסיק, טאָר ניט כּולל זײַן %s"
+
+#: glib/gfileutils.c:1303
+#, fuzzy, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "מוסטער %s ענדיקט זיך ניט מיט XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr ""
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr ""
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr ""
+
+#: glib/gfileutils.c:1795
+#, fuzzy, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "ניט געקענט שאַפֿן טעקע %s: %s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr ""
+
+#: glib/giochannel.c:1234
+#, fuzzy, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "ניט געקענט עפֿענען פֿאַרװאַנדלער פֿון %s צו %s: %s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "ניט געקענט מאַכן אַ רױ־לײען אין g_io_channel_read_line_string"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "איבעריקע ניט־פֿאַרװאַנדלטע דאַטן אין לײען־באַהאַלטאָרט"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "קאַנאַל ענדיקט זיך מיט אַ האַלבן שריפֿטצײכן"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "ניט געקענט מאַכן אַ רױ־לײען אין g_io_channel_read_to_end"
+
+#: glib/gmappedfile.c:116
+#, fuzzy, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gmappedfile.c:193
+#, fuzzy, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, fuzzy, c-format
+msgid "Error on line %d char %d: "
+msgstr "דורכפֿאַל אױף שורה %d פּאָזיציע %d: %s"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "דורכפֿאַל אױף שורה %d: %s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr ""
+"לײדיקער אײנס '&;' געזען; לעקסיקע אײנסן זײַנען: &amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"שריפֿטצײכן %s איז ניט לעקסיק צום אָנהײב פֿון אַן אײנסנאָמען; דער & שריפֿטצײכן הײבט "
+"אַן אײנס אָן; אױב מיט דעם דאָזיקן & מײנט מען ניט קײן אײנס, נאָרמאַליר אים װי &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "שריפֿטצײכן %s איז אומלעקסיק אין מיטן פֿון אַן אײנסנאָמען"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "אײנסנאָמען %s איז ניט באַקאַנט"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"אײנס האָט זיך ניט געענדיקט מיט קײן \";\". מסתּמא האָט מען געשריבן אַן & "
+"שריפֿטצײכן אָן דער כּװנה אָנצוהײבן אַן אײנס.  נאָרמאַליר & װי &amp;"
+
+#: glib/gmarkup.c:638
+#, fuzzy, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr ""
+"דורכפֿאַל אין אַנאַליזירן '%s', װאָס זאָל האָבן אַ ציפֿער אין דער שריפֿטצײכן־רעפֿערענץ "
+"(למשל &#234;); אפֿשר איז דער ציפֿער צו גרױס"
+
+#: glib/gmarkup.c:660
+#, fuzzy, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "שריפֿטצײכן־רעפֿערענץ '%s' קאָדירט ניט קײן דערלאָזטן שריפֿטצײכן"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "נוליקע שריפֿטצײכן־רעפֿערענץ; מוז כּולל זײַן אַ ציפֿער, װי &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"שריפֿטצײכן־רעפֿערענץ האָט זיך ניט געענדיקט מיט קײן \";\". מסתּמא האָט מען געשריבן "
+"אַן & שריפֿטצײכן אָן דער כּװנה אָנצוהײבן אַן אײנס.  נאָרמאַליר & װי &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "ניט־געענדיקט אײנס־רעפֿערענץ"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "ניט־געענדיקט שריפֿטצײכן־רעפֿערענץ"
+
+#: glib/gmarkup.c:1063
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "אומלעקסיק UTF־8 קאָדירטער טעקסט"
+
+#: glib/gmarkup.c:1091
+#, fuzzy
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "אומלעקסיק UTF־8 קאָדירטער טעקסט"
+
+#: glib/gmarkup.c:1130
+#, fuzzy, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "אומלעקסיק UTF־8 קאָדירטער טעקסט"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "דאָקומענט מוז אָנהײבן מיט אַן עלעמענט (װי למשל <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr ""
+"'%s' איך ניט קײן לעקסיקער שריפֿטצײכן נאָך אַ '‪<‬' שריפֿטצײכן;עס טאָר ניט אָנהײבן "
+"קײן אײנסנאָמען"
+
+#: glib/gmarkup.c:1276
+#, fuzzy, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr ""
+"מאָדנע שריפֿטצײכן '%s'; דערװאַרט אַ '‪>‬' שריפֿטצײכן צו ענדיקן דעם אָנהײב־הענטל "
+"פֿונעם עלעמענט '%s'"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr ""
+"מאָדנע שריפֿטצײכן '%s'; דערװאַרט אַ '=' שריפֿטצײכן נאָך אַטריבוט־נאָמען %s פֿונעם "
+"עלעמענט '%s'"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"מאָדנע שריפֿטצײכן '%s'; דערװאַרט אַ '‪>‬' אָדער '/' שריפֿטצײכן צו ענדיקן דעם "
+"אָנהײב־הענטל פֿונעם עלעמענט '%s'; אפֿשר האָט מען געלײגט אַן אומלעקסיקן שריפֿטצײכן "
+"אין אַן אַטריבוט־נאָמען"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"מאָדנע שריפֿטצײכן '%s'; דערװאַרט אַ '\"' נאָך דעם '=' צו באַשטעטיקן דעם באַטרעף פֿון "
+"אַטריבוט '%s' פֿונעם עלעמענט '%s'"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr ""
+"'%s' איז ניט קײן לעקסיקער שריפֿטצײכן נאָך די שריפֿטצײכנס '‪</‬'; '%s' טאָר ניט "
+"אָנהײבן קײן עלעמענט־נאָמען"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr ""
+"'%s' איז ניט קײן לעקסיקער שריפֿטצײכן נאָך דעם שלאָס־עלעמענט נאָמען '%s'; מען מוז "
+"שטעלן '‪>‬'"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "עלעמענט '%s' איז פֿאַרמאַכט; קײן עלעמענט איז דערװײַל אָפֿן"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "עלעמענט '%s' איז פֿאַרמאַכט; דער איצטיקער אָפֿענער עלעמענט איז '%s'"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "דאָקומענט איז פּוסט אָדער איז כּולל בלױז לײדיק אָרט"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "דאָקומענט ענדיקט זיך אומגעריכטערהײט נאָך אַן עפֿן־צײכן '‪<‬'"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr ""
+"דאָקומענט ענדיקט זיך אומגעריכטערהײט מיט אָפֿענע עלעמענטן; '%s' איז געװען דער "
+"לעצט־געעפֿנטער עלעמענט"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr ""
+"דאָקומענט ענדיקט זיך אומגעריכטערהײט; דערװאַרט אַ שלאָס־צײכן '‪>‬' צו ענדיקן דעם "
+"הענטל ‪<%s/>‬"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון אַן עלעמענט־נאָמען"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון אַן אַטריבוט־נאָמען"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון אַן עלעמענט־עפֿן הענטל"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr ""
+"דאָקומענט ענדיקט זיך אומגעריכטערהײט נאָך דעם '=' שריפֿטצײכן נאָך אַן "
+"אַטריבוט־נאָמען אָן קײן אַטריבוט־באַטרעף"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון אַן אַטריבוט־באַטרעף"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr ""
+"דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון דעם שלאָס־הענטל פֿון עלעמענט "
+"'%s'"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr ""
+"דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון אַ קאָמענטאַר אָדער אַ "
+"באַאַרבעטן־באַפֿעל"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr ""
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr ""
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr ""
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr ""
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr ""
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr ""
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr ""
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr ""
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr ""
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr ""
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr ""
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr ""
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr ""
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr ""
+
+#: glib/gregex.c:221
+#, fuzzy
+msgid "missing terminating ] for character class"
+msgstr "קאַנאַל ענדיקט זיך מיט אַ האַלבן שריפֿטצײכן"
+
+#: glib/gregex.c:224
+#, fuzzy
+msgid "invalid escape sequence in character class"
+msgstr "אומלעקסיק אַכטעלע־סעײַװענץ אין פֿאַרװאַנדלונג אַרױסשרײַב"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr ""
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr ""
+
+#: glib/gregex.c:233
+#, fuzzy
+msgid "unrecognized character after (?"
+msgstr "ניט־געענדיקט שריפֿטצײכן־רעפֿערענץ"
+
+#: glib/gregex.c:237
+#, fuzzy
+msgid "unrecognized character after (?<"
+msgstr "ניט־געענדיקט שריפֿטצײכן־רעפֿערענץ"
+
+#: glib/gregex.c:241
+#, fuzzy
+msgid "unrecognized character after (?P"
+msgstr "ניט־געענדיקט שריפֿטצײכן־רעפֿערענץ"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr ""
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr ""
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ""
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr ""
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr ""
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr ""
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr ""
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr ""
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr ""
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr ""
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr ""
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr ""
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr ""
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr ""
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr ""
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr ""
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr ""
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr ""
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr ""
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr ""
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr ""
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr ""
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr ""
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr ""
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr ""
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr ""
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr ""
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr ""
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr ""
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr ""
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr ""
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr ""
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr ""
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr ""
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr ""
+
+#: glib/gregex.c:1161
+#, fuzzy, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "דורכפֿאַל אױף שורה %d פּאָזיציע %d: %s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr ""
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr ""
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr ""
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2100
+#, fuzzy
+msgid "unfinished symbolic reference"
+msgstr "ניט־געענדיקט אײנס־רעפֿערענץ"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr ""
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr ""
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr ""
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr ""
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr ""
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "ציטירטער טעקסט הײבט ניט אָן מיט קײן גענדזן־פֿיסל"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "גענדזן־פֿיסל אָן אַ זיװג אין באַפֿעל־שורה אָדער אַנדער ציטירטן טעקסט"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr ""
+"טעקסט האָט זיך געענדיקט באַלד נאָך אַ '\\' שריפֿטצײכן.  (דער טעקסט איז געװען '%s')"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr ""
+"טעקסט האָט זיך געענדיקט אײדער אַ זיװג צו דעם גענדזן־פֿיסל ‪%c‬.  (דער טעקסט איז "
+"געװען '%s')"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "טעקסט איז געװען פּוסט (אָדער איז כּולל בלױס לײדיק אָרט)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "ניט געקענט לײענען דאַטן פֿון קינדפּראָצעס"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "דורכפֿאַל אין שאַפֿן רער צוליב קאָמוניקירן מיט קינדפּראָצעס (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "דורכפֿאַל אין לײענע פֿון אַ ינדרער (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "דורכפֿאַל אין זיך קערן צו פּאַפּקע '%s' (%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "דורכפֿאַל אין באַאַרבעטן קינדפּראָצעס (%s)"
+
+#: glib/gspawn-win32.c:442
+#, fuzzy, c-format
+msgid "Invalid program name: %s"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr ""
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, fuzzy, c-format
+msgid "Invalid string in environment: %s"
+msgstr "אומלעקסיקער סעקװענץ אין פֿאַרװאַנדל־אַרײַנשרײַב"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, fuzzy, c-format
+msgid "Invalid working directory: %s"
+msgstr "דורכפֿאַל אין עפֿענען פּאַפּקע %s: %s"
+
+#: glib/gspawn-win32.c:781
+#, fuzzy, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "דורכפֿאַל אין באַאַרבעטן הילף־פּראָגראַם"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr ""
+"אומדערװאַרטער דורכפֿאַל אין g_io_channel_win32_poll() בשעת לײענען דאַטן פֿון אַ "
+"קינדפּראָצעס"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "דורכפֿאַל אין לײענען דאַטן פֿון אַ קינדפּראָצעס (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "אומדערװאַרטער דורכפֿאַל אין select() לײענען דאַטן פֿון אַ קינדפּראָצעס (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "אומדערװאַרטער דורכפֿאַל אין waitpid() (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "דורכפֿאַל אין קלאָנירן (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "דורכפֿאַל אין באַאַרבעטן קינדפּראָצעס \"%s\" (%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "דורכפֿאַל אין װידערצילן אַרױסשרײַב אָדער אַרײַנשרײַב פֿון קינדפּראָצעס (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "דורכפֿאַל אין קלאָנירן קינדפּראָצעס (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "אומבאַקאַנטער דורכפֿאַל אין באַאַרבעטן קינדפּראָצעס \"%s\""
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "דורכפֿאַל אין לײענען גענוג דאַטן פֿון קינד pid-רער (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "שריפֿטצײכן ניט אין דער UTF־8 גאַמע"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "אומלעקסיקער סעקװענץ אין פֿאַרװאַנדל־אַרײַנשרײַב"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "שריפֿטצײכן ניט אין דער UTF־16 גאַמע"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr ""
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr ""
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr ""
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr ""
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr ""
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr ""
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr ""
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr ""
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, fuzzy, c-format
+msgid "Error parsing option %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr ""
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr ""
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr ""
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr ""
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr ""
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr ""
+
+#: glib/gkeyfile.c:821
+#, fuzzy, c-format
+msgid "Invalid group name: %s"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr ""
+
+#: glib/gkeyfile.c:869
+#, fuzzy, c-format
+msgid "Invalid key name: %s"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr ""
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr ""
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr ""
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr ""
+
+#: glib/gkeyfile.c:3505
+#, fuzzy, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "דער URI %s איז כּולל אומלעקסיקע פּליטה־כאַראַקטערס"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr ""
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr ""
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr ""
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr ""
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr ""
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr ""
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr ""
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr ""
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr ""
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr ""
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr ""
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr ""
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr ""
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr ""
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr ""
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr ""
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr ""
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr ""
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr ""
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr ""
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr ""
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr ""
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr ""
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr ""
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr ""
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr ""
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr ""
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr ""
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr ""
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr ""
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr ""
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr ""
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr ""
+
+#: gio/gfileicon.c:146
+#, fuzzy
+msgid "The file containing the icon"
+msgstr "דער מאַשין־נאָמען פֿונעם URI %s איז אומלעקסיק"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr ""
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr ""
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr ""
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr ""
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr ""
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr ""
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr ""
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr ""
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr ""
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr ""
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr ""
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr ""
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr ""
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr ""
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr ""
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, fuzzy, c-format
+msgid "Invalid filename %s"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: gio/glocalfile.c:990
+#, fuzzy, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr ""
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, fuzzy, c-format
+msgid "Error renaming file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr ""
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+#, fuzzy
+msgid "Invalid filename"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: gio/glocalfile.c:1291
+#, fuzzy, c-format
+msgid "Error opening file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr ""
+
+#: gio/glocalfile.c:1361
+#, fuzzy, c-format
+msgid "Error removing file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:1725
+#, fuzzy, c-format
+msgid "Error trashing file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:1748
+#, fuzzy, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "ניט געקענט שאַפֿן טעקע %s: %s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr ""
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr ""
+
+#: gio/glocalfile.c:1902
+#, fuzzy, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "ניט געקענט שאַפֿן טעקע %s: %s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, fuzzy, c-format
+msgid "Unable to trash file: %s"
+msgstr "ניט געקענט שאַפֿן טעקע %s: %s"
+
+#: gio/glocalfile.c:2045
+#, fuzzy, c-format
+msgid "Error creating directory: %s"
+msgstr "דורכפֿאַל אין עפֿענען פּאַפּקע %s: %s"
+
+#: gio/glocalfile.c:2074
+#, fuzzy, c-format
+msgid "Error making symbolic link: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, fuzzy, c-format
+msgid "Error moving file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr ""
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr ""
+
+#: gio/glocalfile.c:2203
+#, fuzzy, c-format
+msgid "Error removing target file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr ""
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:733
+#, fuzzy
+msgid "Invalid extended attribute name"
+msgstr "דאָקומענט ענדיקט זיך אומגעריכטערהײט אין דרינען פֿון אַן אַטריבוט־נאָמען"
+
+#: gio/glocalfileinfo.c:773
+#, fuzzy, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "דורכפֿאַל אין עפֿענען פּאַפּקע %s: %s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, fuzzy, c-format
+msgid "Error stating file '%s': %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1705
+#, fuzzy, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1832
+#, fuzzy, c-format
+msgid "Error setting permissions: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, fuzzy, c-format
+msgid "Error setting owner: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, fuzzy, c-format
+msgid "Error setting symlink: %s"
+msgstr "דורכפֿאַל אױף שורה %d: %s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2089
+#, fuzzy, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr ""
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr ""
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, fuzzy, c-format
+msgid "Error reading from file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, fuzzy, c-format
+msgid "Error seeking in file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, fuzzy, c-format
+msgid "Error closing file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, fuzzy, c-format
+msgid "Error writing to file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileoutputstream.c:250
+#, fuzzy, c-format
+msgid "Error removing old backup link: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, fuzzy, c-format
+msgid "Error creating backup copy: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileoutputstream.c:295
+#, fuzzy, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, fuzzy, c-format
+msgid "Error truncating file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, fuzzy, c-format
+msgid "Error opening file '%s': %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr ""
+
+#: gio/glocalfileoutputstream.c:937
+#, fuzzy, c-format
+msgid "Error removing old file: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr ""
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+#, fuzzy
+msgid "Invalid seek request"
+msgstr "אומלעקסיקער מאַשין־נאָמען"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr ""
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr ""
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr ""
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr ""
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr ""
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr ""
+
+#: gio/gthemedicon.c:212
+#, fuzzy
+msgid "The name of the icon"
+msgstr "דער מאַשין־נאָמען פֿונעם URI %s איז אומלעקסיק"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr ""
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr ""
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr ""
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr ""
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr ""
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr ""
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+#, fuzzy
+msgid "Close file descriptor"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr ""
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, fuzzy, c-format
+msgid "Error reading from unix: %s"
+msgstr "דורכפֿאַל אין לײענען טעקע %s: %s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, fuzzy, c-format
+msgid "Error closing unix: %s"
+msgstr "דורכפֿאַל אױף שורה %d: %s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr ""
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr ""
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, fuzzy, c-format
+msgid "Error writing to unix: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr ""
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr ""
+
+#: gio/gwin32appinfo.c:300
+#, fuzzy, c-format
+msgid "Error launching application: %s"
+msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr ""
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr ""
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr ""
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr ""
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr ""
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "דורכפֿאַל בשעת פֿאַרװאַנדלונג: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: fork() failed: %s"
+#~ msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: waitpid() failed: %s"
+#~ msgstr "ניט געקענט אױסטײלן %lu אַכטעלעך צו לײענען טעקע %s"
+
+#, fuzzy
+#~ msgid "Could not change file mode: chmod() failed: %s"
+#~ msgstr "ניט געקענט עפֿענען טעקע %s: fdopen() איז דורכגעפֿאַלן: %s"
+
+#~ msgid "Conversion from character set `%s' to `%s' is not supported"
+#~ msgstr "פֿאַרװאַנדלען פֿון שריפֿטצײכן־געזעמל %s צו %s איז ניט געשטיצט"
+
+#~ msgid "Incorrect message size"
+#~ msgstr "ניט־ריכטיקע אָנזאָגגרײס"
+
+#~ msgid "Socket error"
+#~ msgstr "סאָקעט־דורכפֿאַל"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..50fd82c
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,1828 @@
+# glib simplified chinese translation
+# Copyright (C) YERA Free Software Foundation, Inc.
+# He Qiangqiang <carton@263.net>, 2001.
+# Funda Wang <fundawang@linux.net.cn>, 2004, 2005.
+# yetist <yetist@gmail.com>, 2007.
+# Deng Xiyue <manphiz@gmail.com>, 2008, 2009.
+# Deng Xiyue <manphiz@gmail.com>, 2009.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-03-27 14:56+0800\n"
+"Last-Translator: Ray Wang <wanglei1123@gmail.com>\n"
+"Language-Team: Chinese/Simplified <i18n-translation@lists.linux.net.cn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "元素“%2$s”的意外属性“%1$s”"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "元素“%2$s”的属性“%1$s”未找到"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "意外标签“%s”,需要标签“%s”"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "“%2$s”的意外标签“%1$s”"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "无法在数据目录中找到有效的书签文件"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI“%s”的书签已经存在"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "未找到 URI“%s”的书签"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI“%s”的书签未定义 MIME 类型"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI“%s”的书签未定义私有标志"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI“%s”的书签未设定组"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "没有名为“%s”的应用程序为“%s”注册书签"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "用 URI “%2$s”展开 exec 行“%1$s”失败"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "不支持从字符集“%s”到“%s”的转换"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "无法打开从“%s”到“%s”的转换器"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "转换输入中出现无效字符序列"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "转换过程中出错:%s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "输入末尾出现未尽字符序列"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "无法转换后备字符集“%s”到字符集“%s”"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI“%s”不是“file”格式的绝对 URI"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "本地文件 URI“%s”不能包含“#”"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI“%s”无效"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI中的主机名“%s”无效"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI“%s”中包含无效的转义字符"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "路径名“%s”不是绝对路径"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "无效的主机名"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "打开目录“%s”时发生错误:%s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "无法分配 %lu 字节以读取文件“%s”"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "读取文件“%s”出错:%s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "文件“%s”太大"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "读取文件“%s”失败:%s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "打开文件“%s”失败:%s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "获得文件“%s”的属性失败:fstat() 失败:%s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "打开文件“%s”失败:fdopen() 失败:%s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "将文件“%s”重命名为“%s”失败:g_rename() 失败:%s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "创建文件“%s”失败:%s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "打开文件“%s”写入失败:fdopen() 失败:%s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "写入文件“%s”失败:fwrite() 失败:%s"
+
+#: glib/gfileutils.c:954
+#, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "写入文件“%s”失败:fflush() 失败:%s"
+
+#: glib/gfileutils.c:979
+#, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "写入文件“%s”失败:fsync() 失败:%s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "关闭文件“%s”失败:fclose() 失败:%s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "无法删除已有文件“%s”:g_unlink() 失败:%s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "模板“%s”无效,不应该包含“%s”"
+
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "模板“%s”的不包含 XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "读取符号链接“%s”失败:%s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "不支持符号链接"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "无法打开从“%s”到“%s”的转换器:%s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "g_io_channel_read_line_string 函数无法进行原始读取"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "在读缓冲里留有未转换数据"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "通道终止于未尽字符"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end 函数无法进行原始读取"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "打开文件“%s”失败:open() 失败:%s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "映射文件“%s”失败:mmap() 失败:%s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "第%d行第%d个字符出错:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "第%d行出错:%s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "发现空的实体“&;”。有效的实体为:&amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"字符“%s”出现在实体名的开头无效。实体都以 & 字符 开头,如果这个 & 不是一个实体"
+"的开头,把它变为 &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "字符“%s”在实体名中无效"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "未知的实体名“%s”"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"实体没有以分号结束。很可能您使用了 & 字符而又不是一个实体 - 将这个 & 变为 "
+"&amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr "分析“%-.*s”失败。它应该是字符引用中的数字(如&#234;) - 可能该数字太大了"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "字符引用“%-.*s”不是编码一个被允许的字符"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "空的字符引用;应该包括数字,如 &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"字符引用没有以分号结束。很可能您使用了 & 字符而又不是一个实体 - 将这个 & 变"
+"为 &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "未完成的实体引用"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "未完成的字符引用"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "无效的 UTF-8 编码文本 - 序列过长"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "无效的 UTF-8 编码文本 - 非开始字符"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "无效的 UTF-8 编码文本 - “%s”无效"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "文档必须以一个元素开始(例如 <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "“%s”出现在字符“<”后是无效字符;它不能作为元素名的开头"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "字符“%s”无效,应该以字符“>”来结束空元素标记“%s”"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "字符“%s”无效,在属性名“%s”(元素“%s”)的后应该是字符“=”"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"字符“%s”无效,应该以“>”或“/”结束元素“%s”的起始标记,或紧跟该元素的属性;可能"
+"您在属性名中使用了无效字符"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr "字符“%s”无效,在给属性“%s”(元素“%s”)赋值时,在等号后应该是引号"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "“%s”出现在字符“</”后无效;“%s”不能作为元素名的开头"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "“%s”出现在结束的元素名“%s”后无效;允许的字符是“>”"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "元素“%s”已经结束,没有未结束的元素"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "元素“%s”已经结束,当前未结束的元素是“%s”"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "文档为空或仅含空白字符"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "文档在一个打开的尖括号“<”后意外结束"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "文档在还存在未结束元素时意外结束 - 最后的未结束元素是“%s”"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "文档意外结束,应该以右尖括号“>”来结束标记 <%s/>"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "文档在元素名中意外结束"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "文档在属性名中意外结束"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "文档在元素起始标记中意外结束"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr "文档在跟在属性名后的等号后意外结束;没有属性值"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "文档在属性值中意外结束"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "文档在元素“%s”结束标记中意外结束"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "文档在注释或处理指令中意外结束"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "无效对象"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "内部错误或者无效对象"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "内存不足"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "达到回溯上限"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "表达式包含不被部分匹配支持的项"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "内部错误"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "不完全匹配时作为条件的后向引用不被支持."
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "达到递归上限"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "达到空子串的工作空间限制"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "无效的新行标志组合."
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "未知错误"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "表达式末尾的 \\"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "表达式末尾的 \\c"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "无法识别 \\ 后的字符"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "这里不允许使用改变大小写的转义符(\\l, \\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} 里的数字次序颠倒了"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} 里的数字太大了"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "字符类缺少终结的 ]"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "字符类包含无效的转义序列"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "字符类的范围次序颠倒"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "没有可以重复的内容"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "(? 后有无法识别的字符"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "(?< 后有无法识别的字符"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "(?P 有无法识别的字符"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "只有类里支持 POSIX 命名的类"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "缺少结束的 )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") 没有开始的 ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R 或 (?[+-]数字 必须跟着 )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "引用了不存在的字表达式"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "注释后缺少 )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "正则表达式太长了"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "获取内存失败"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind 断言不是定长的"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( 后有形式不正确的数字或名称"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "条件组包含了超过两个分支"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( 后应该有断言"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "未知的 POSIX 类名"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "不支持 POSIX 整理元素"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} 序列里的字符值太大了"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "无效的条件 (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "lookbehind 断言里不允许使用 \\C"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "递归调用可能导致无限循环"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "子表达式名里缺少终结符"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "两个有名子表达式有相同的名称"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "形式不正确的 \\P 或 \\p 序列"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "\\P 或 \\p 后有未知的属性名"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "子表达式名太长了(最多32个字符)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "有名子表达式太多了(最多10,000个)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "八进制值大于 \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE 组包含多于一个分支"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "不允许重复 DEFINE 组"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "不一致的 NEWLINE 选项"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g 后没有花括号括起来的名称或可选的花括号括起来的非零数字"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "非预期的重复"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "代码溢出"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "编译工作区超出正常范围"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "未找到之前检查过的引用过的子表达式"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "匹配正则表达式 %s 出现错误:%s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE 库编译时未包含 UTF8 支持"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE 库编译时未包含 UTF8 属性支持"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "编译正则表达式 %s (于字符 %d 处)时出错:%s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "优化正则表达式 %s 时出错:%s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "期望十六进制数或 '}'"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "期望十六进制数"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "在符号引用中缺少“<”"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "未完成的符号引用"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "零长符号引用"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "期望数字"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "非法的符号引用"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "丢失了最后的“\\”"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "未知的转义序列"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "分析替换文本\"%s\" 时在字符 %lu 处发生错误:%s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "引用的文本没有以引号开头"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "命令行或其他shell引用文本中出现不匹配的引号"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "文本在一个“\\”字符后结束。(文本为“%s”)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "文本在找到与 %c 匹配的引号之前结束。(文本为“%s”)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "空文本(或仅含空白字符)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "从子进程中读取数据失败"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "创建与子进程通讯的管道失败(%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "从子管道中读取失败(%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "更改到目录“%s”失败(%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "执行子进程失败(%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "无效的程序名:%s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "%d 处的参数中有无效的字符串:%s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "环境中有无效的字符串:%s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "无效的工作目录:%s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "执行助手程序(%s)失败"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "g_io_channel_win32_poll() 从子进程中读取数据时出现异常错误"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "从子进程中读取数据失败(%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "select() 在从子进程中读取数据时出现异常错误 (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() 出现异常错误 (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "fork 失败(%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "执行子进程“%s”失败(%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "重定向子进程(%s)的输入或输出失败"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "fork 子进程失败 (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "执行子进程“%s”时出现未知错误"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "从子进程管道中读取足够的数据失败(%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "字符超出 UTF-8 范围"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "转换输入中出现无效序列"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "字符超出 UTF-16 范围"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "用法:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[选项...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "帮助选项:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "显示帮助选项"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "显示全部帮助选项"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "应用程序选项:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "无法处理 %2$s 所用的整数值“%1$s”"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s 所用的整数值“%1$s”超出范围"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "无法处理 %2$s 所用的双精度值“%1$s”"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s 所用的双精度值“%1$s”超出范围"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "分析选项出错:%s"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "缺少 %s 的参数"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "未知选项 %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "在搜索目录中无法找到有效的键文件"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "不是普通文件"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "文件为空"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "键文件中的行“%s”不是键-值对、组或注释"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "无效的组名:%s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "键文件不以组开始"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "无效的键名:%s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "键文件包含不支持的编码“%s”"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "键文件没有组“%s”"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "键文件没有键“%s”"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "键文件包含“%s”,其值“%s”不是 UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "键文件包含键“%s”,其值无法解释。"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "键文件在“%2$s”中包含“%1$s”,其值无法解释。"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "键文件的组“%2$s”中不包含键“%1$s”"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "键文件在行尾含有转义字符"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "键文件中包含无效的转义序列“%s”"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "无法将值“%s”解释为数值。"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "整数值“%s”超出范围"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "无法将值“%s”解释为浮点数。"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "无法将值“%s”解释为布尔值。"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "传递给 %s 的计数值太大了"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "流已经关闭"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "操作被取消"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "未知类型"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s 文件类型"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s 类型"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "非预期的过早的流结束符"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "未命名"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "桌面文件未指定 Exec 区域"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "无法找到应用程序需要的终端"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "无法创建用户应用程序配置文件夹 %s:%s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "无法创建用户 MIME 配置文件夹 %s:%s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "无法创建用户桌面文件 %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "%s 的自制定定义"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "驱动未实现探出"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "驱动未实现媒体轮询"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "无法处理 GEmblem 编码的版本 %d "
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem 编码中有不正确的符号数量(%d)"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "无法处理 GEmblemedIcon 编码的版本 %d"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon 编码中有不正确的符号数量(%d)"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "GEmblemedIcon 中应为 GEmblem"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "不支持该操作"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "包含的挂载不存在"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "无法复制目录"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "无法将目录复制到目录"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "目标文件已存在"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "无法递归复制目录"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "无法复制特殊文件"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "给出的符号链接值无效"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "不支持垃圾箱"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "文件名不能包含“%c”"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "卷未实现挂载"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "没有注册为处理此文件的应用程序"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "枚举器已关闭"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "文件枚举器有异常操作"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "文件枚举器已关闭"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "文件"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "包含该图标的文件"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "无法处理 GFileIcon 编码的版本 %d"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "GFileIcon 有不正确的输入数据"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "流不支持 query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "流不支持查找"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "输入流不允许截断"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "流不支持截断"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "错误的符号数量(%d)"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "类名 %s 没有类型"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "类型 %s 没有实现 GIcon 接口"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "类型 %s 不是类"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "不正确的版本号:%s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "类型 %s 没有实现 GIcon 接口的 from_tokens() 方法"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "无法处理提供的图标编码版本"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "输入流未实现读取"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "流有异常操作"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "无法找默认的本地目录监视器类型"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "无效的文件名名:%s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "读取文件系统信息出错:%s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "无法重命名根目录"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "重命名文件出错:%s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "无法重命名文件,该文件名已存在"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "无效的文件名"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "打开文件出错:%s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "无法打开目录"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "移除文件出错:%s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "将文件放到垃圾箱出错:%s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "创建垃圾箱目录 %s 失败:%s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "无法找到垃圾箱的顶级目录"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "无法找到或创建垃圾箱目录"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "创建垃圾信息文件失败:%s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "无法将文件移动到回收站:%s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "创建目录出错:%s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "创建符号链接出错:%s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "移动文件出错:%s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "无法将目录移动到目录"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "备份文件创建失败"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "移除目标文件出错:%s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "不支持在挂载之间移动"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "属性值必须为非空"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "无效的属性类型(应为 string)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "无效的扩展属性名"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "设置扩展属性“%s”出错:%s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "获取文件“%s”状态出错:%s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr " (无效的编码)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "获取文件描述符状态时出错:%s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "无效的属性类型(应为 uint32)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "无效的属性类型(应为 uint64)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "无效的属性类型(应为 byte string)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "设置访问权限出错:%s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "设置所有者出错:%s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "符号链接必须是非空"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "设置符号链接出错:%s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "设定符号链接出错:文件不是符号链接"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux 上下文必须是非空"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "设置 SELinux 上下文出错:%s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "此系统尚未启用 SELinux"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "不支持设置属性 %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "读取文件出错:%s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "在文件中查找时出错:%s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "关闭文件出错:%s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "无法找到默认的本地文件监视器类型"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "写入文件出错:%s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "移除旧的备份链接出错:%s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "创建备份拷贝:%s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "重命名临时文件出错:%s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "截断文件出错:%s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "打开文件“%s”出错:%s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "目标文件是目录"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "目标文件不是普通文件"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "文件已经被其他程序修改"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "移除旧文件出错:%s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "提供的 GSeekType 无效"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "无效的查找请求"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "无法截断 GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "达到数据数组上限"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "内存输出流无法改变大小"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "改变内存输出流大小失败"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "挂载未实现卸载"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "挂载未实现弹出"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "挂载没有实现重新挂载"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "挂载未实现内容类型猜测"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "挂载未实现同步内容类型猜测"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "输出流未实现写入"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "来源流已经关闭"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "名称"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "图标的名称"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "名称"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "包含图标名称的数组"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "使用默认预案"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"是否使用通过缩短在“-”字符的名称找到的默认预案。如果给出了多个名字则忽略除第一"
+"个之外的名字。"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "无法处理 GThemedIcon 编码的版本 %d"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "文件描述符"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "要读取的文件描述符"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "关闭文件描述符"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "当流关闭时是否关闭文件描述符"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "读取 unix 出错:%s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "关闭 unix 出错:%s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "文件系统根目录"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "要写入的文件描述符"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "写入 unix 出错:%s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "卷未实现弹出"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "无法找到应用程序"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "启动应用程序出错:%s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "不支持 URI"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "win32 不支持关联的修改"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "win32 不支持关联的创建"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "不要隐藏项目"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "使用长列表格式"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[文件...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u 字节"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "创建备份链接:%s"
+
+#~ msgid "Can't load just created desktop file"
+#~ msgstr "无法导入刚刚创建的桌面文件"
+
+#~ msgid "Too large count value passed to g_input_stream_read_async"
+#~ msgstr "传递给 g_input_stream_read_async 的值太大了"
+
+#~ msgid "Too large count value passed to g_input_stream_skip"
+#~ msgstr "传递给 g_input_stream_skip 的计数值太大了"
+
+#~ msgid "Too large count value passed to g_input_stream_skip_async"
+#~ msgstr "传递给 g_input_stream_skip_async 的计数值太大了"
+
+#~ msgid "Target file already exists"
+#~ msgstr "目标文件已存在"
+
+#~ msgid "Too large count value passed to g_output_stream_write"
+#~ msgstr "传递给 g_output_stream_write 的计数值太大了"
+
+#~ msgid "Too large count value passed to g_output_stream_write_async"
+#~ msgstr "传递给 g_output_stream_write_async 的计数值太大了"
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100644
index 0000000..23744b7
--- /dev/null
+++ b/po/zh_HK.po
@@ -0,0 +1,1808 @@
+# Chinese (Hong Kong) translation for glib 2.x
+# Copyright (C) 2001, 02, 03, 05, 07 Free Software Foundation, Inc.
+# XML glossary from http://xml.ascc.net/zh/big5/gloss.html
+# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2005.
+# Abel Cheung <abel@oaka.org>, 2001-2003, 2005.
+# Woodman Tuen <wmtuen@gmail.com>, 2005-07.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.19.9\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-25 20:26+0800\n"
+"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
+"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "元件「%2$s」中有未預期的屬性「%1$s」"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "找不到元件「%2$s」中的屬性「%1$s」"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "未預期的標籤「%s」,應為標籤「%s」"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "「%2$s」中有未預期的標籤「%1$s」"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "在資料目錄中找不到有效的書籤檔案"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI「%s」的書籤已經存在"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "找不到 URI「%s」的書籤"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI「%s」書籤中沒有定義 MIME 類型"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI「%s」書籤中沒有私有旗幟"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI「%s」書籤中沒有設定羣組"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "沒有名為「%s」的應用程式註冊書籤「%s」"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "以 URI‘%2$s’ 展開 exec 行‘%1$s’失敗"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "不支援將字符集‘%s’轉換成‘%s’"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "無法將‘%s’轉換至‘%s’"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "轉換輸入資料時遇到不正確的位元組組合"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "轉換時發生錯誤:%s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "輸入資料結束時字符仍未完整"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "無法將後備字串‘%s’的字符集轉換成‘%s’"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI‘%s’不是使用“file”格式的絕對 URI"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "本機檔案的 URI‘%s’不應含有‘#’"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI‘%s’無效"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI‘%s’中的主機名稱無效"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI‘%s’含有「不正確跳出」的字符"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "路徑名稱‘%s’不是絕對路徑"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "主機名稱無效"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "開啟目錄‘%s’時發生錯誤:%s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "無法配置 %lu 位元來讀取檔案“%s”"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "讀取檔案‘%s’時發生錯誤:%s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "檔案「%s」太過巨大"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "讀取檔案‘%s’失敗:%s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "開啟檔案「%s」失敗:%s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "獲取檔案‘%s’的屬性失敗:fstat() 失敗:%s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "開啟檔案‘%s’失敗:fdopen() 失敗:%s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "檔案名稱由‘%s’改為‘%s’失敗:g_rename() 失敗:%s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "建立檔案‘%s’失敗:%s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "開啟檔案‘%s’作寫入失敗:fdopen() 失敗:%s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "寫入檔案‘%s’失敗:fwrite() 失敗:%s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "寫入檔案‘%s’失敗:fwrite() 失敗:%s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "寫入檔案‘%s’失敗:fwrite() 失敗:%s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "關閉檔案‘%s’失敗:fclose() 失敗:%s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "現存檔案‘%s’無法移除:g_unlink() 失敗:%s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "樣式‘%s’無效,不應含有‘%s’"
+
+# (Abel) this is file template for mktemp/mkstemp
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "檔案樣式‘%s’沒有包含 XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "讀取符號連結‘%s’失敗:%s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "不支援符號連結"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "無法開啟將‘%s’轉換至‘%s’的轉換器:%s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "在 g_io_channel_read_line_string 中無法讀取原始資料"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "用來讀取資料的緩衝區中仍有未轉換的資料"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "在字符未完整之前,輸入管道已經結束"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end 中無法讀取原始資料"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "開啟檔案‘%s’失敗:open() 失敗:%s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "對應檔案‘%s’失敗:mmap() 失敗:%s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "第 %d 行第 %d 個字發生錯誤:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "第 %d 行發生錯誤:%s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "出現空白的實體‘&;’;可用的實體為:&amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"實體名稱不應以‘%s’開始,應該使用 & 字符;如果這個 & 字符不是作為實體使用,請"
+"將 & 轉換為 &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "實體名稱中不應含有字符‘%s’"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "實體名稱‘%s’意義不明"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"實體的結束部分不是分號;很可能你想使用 & 字符但未將它變為實體 ─ 請將 & 轉換"
+"為 &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr "無法解析‘%-.*s’,字符參引內應該含有數字(例如 &#234;)─ 可能是數字太大"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "字符參引‘%-.*s’無法表示任何能接受的字符"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "字符參引是空白的;它應該包括數字,像 &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"字符參引的結束部分不是分號;很可能你想使用 & 字符但未將它變為實體 ─ 請將 & 轉"
+"換為 &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "未完成的實體參引"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "未完成的字符參引"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "無效的 UTF-8 編碼文字 - 序列過長"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "無效的 UTF-8 編碼文字 - 非開始字符"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "無效的 UTF-8 編碼文字 - 不是合法的「%s」"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "文件開始必須為一元素(例如 <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "‘<’字符後的‘%s’不是有效的字符;這樣不可能是元素名稱的開始部份"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "字符「%s」只有一半,空元素標籤「%s」的結尾應該以‘>’字符結束"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "不尋常的字符‘%s’,屬性名稱‘%s’(屬於元素‘%s’)後應該是‘=’字符"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"不尋常的字符‘%s’,元素‘%s’的開始標籤應該以‘>’或‘/’字符終結,也可以是屬性;或"
+"許你在屬性名稱中使用了無效的字符"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"不尋常的字符‘%s’,當指定屬性‘%s’的值(屬於元素‘%s’)時,等號後應該出現開引號"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "‘</’字符後的‘%s’不是有效的字符;‘%s’不可能是元素名稱的開始部份"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "字符‘%s’是無效的(位置在關閉元素‘%s’末端);允許的字符為「>」"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "元素‘%s’已關閉,沒有開啟中的元素"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "元素‘%s’已關閉,但開啟中的元素是‘%s’"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "文件完全空白或只含有空白字符"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "文件在尖角括號‘<’後突然終止"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "在仍然有開啟中的元素時,文件突然結束 ─‘%s’是最後一個開啟的元素"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "文件突然結束,本來應該出現用來關閉標籤 <%s/> 的尖角括號"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "在元素的名稱內,文件突然結束"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "在屬性名稱內,文件突然結束"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "在元素的開啟標籤內,文件突然結束"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr "在屬性名稱的等號後,文件突然結束;沒有屬性值"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "在屬性值內,文件突然結束"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "在元素‘%s’的關閉標籤內,文件突然結束"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "在註解或處理指示內,文件突然結束"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "損毀的物件"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "內部錯誤或損毀的物件"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "記憶體耗盡"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "已達回溯上限"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "此模式包含了不支援部分比對的項目"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "內部的錯誤"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "部分比對不支援以反向參照為條件"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "已達遞廻上限"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "已達空白子字串的工作區上限"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "無效的換行旗標組合"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "不明的錯誤"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ 於模式結尾"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c 於模式結尾"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "無法辨識的字符接着 \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "這裏不允許使用改變大小寫的轉義符(\\l, \\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} 裏的數字次序顛倒了"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} 裏的數字太大了"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "字符類別缺少結束的 ]"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "字符類別中無效的跳脫序列"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "字符類別的範圍次序顛倒"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "沒有東西可重複"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "在 (? 後有無法辨識的字符"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "在 (?< 後有無法辨識的字符"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "在 (?P 後有無法辨識的字符"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX 命名類別只在單一類別中支援"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "缺少結束的 )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") 沒有開頭的 ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R 或 (?[+-]數字必須接着 )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "參照不存在的子模式"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "註解後缺少 )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "正規表示式太長"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "取得記憶體失敗"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind 判斷提示(assertion) 不是固定的長度"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( 之後有格式不正確的數字或名稱"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "條件式羣組包含了兩個以上的分支"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( 後應該有判斷提示(assertion)"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "未知的 POSIX 類別名稱"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "不支援 POSIX 整理元件"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} 序列中的字符值太大"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "無效的條件 (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "在 lookbehind 判斷提示(assertion) 中不支援\\C"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "遞廻呼叫可能變成無限廻圈"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "子模式名稱中缺少結束字符"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "兩個命名的子模式具有相同的名稱"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "格式不正確的 \\P 或 \\p 序列"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "在 \\P 或 \\p 後有未知的屬性名稱"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "子模式名稱太長(最多 32 字符)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "太多命名的子模式(最大值 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "8 進位值大於 \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE 羣組包含一個以上的分支"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "不允許重複 DEFINE 羣組"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "不一致的 NEWLINE 選項"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g 並未隨着具有大括弧的名稱或選用的具大括弧的非零數值"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "未預期的重複"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "程式碼溢流"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "編譯工作區超出範圍"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "找不到預先核取的參照子字串"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "比對正規表示式 %s 發生錯誤:%s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE 程式庫並未編譯對 UTF8 的支援"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE 程式庫並未編譯對 UTF8 屬性的支援"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "編譯正規表示式 %s 時於第 %d 個字發生錯誤:%s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "最佳化正規表示式 %s 時發生錯誤:%s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "應為 16 進位數字或「}」"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "應為 16 進位數字"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "在符號參照中缺少「<」"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "未完成的符號參照"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "零-長度的符號參照"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "預期數字"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "不合法的符號參照"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "缺少最後的「\\」"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "不明的跳脫序列"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "當分析於字符 %2$lu 的取代文字「%1$s」時發生錯誤:%3$s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "應該用引號括起來的文字不是以括號為開始"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "指令列或其它標為指令的字串內有不對稱的引號"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "文字在‘\\’字符後就終止了。(文字為‘%s’)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "字串完結前仍沒有對應於 %c 的引號(字串為‘%s’)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "文字是空白的(或只含有空白字符)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "無法從副進程讀取資料"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "無法建立管道來和副進程溝通 (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "無法從管道讀取資料 (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "無法進入目錄‘%s’(%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "無法執行副進程 (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "程式名稱無效:%s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "第 %d 個引數中含無效的字串:%s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "環境變數中的字串無效:%s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "無效的工作目錄:%s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "無法執行協助程式 (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "當 g_io_channel_win32_poll() 從副進程讀取資料時發生無法預計的錯誤"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "無法從副進程讀取資料 (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "當 select() 從子程序讀取資料時發生未預期的錯誤 (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() 發生未預期的錯誤 (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "無法衍生進程 (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "無法執行副進程“%s”(%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "無法將副進程的輸出或輸入重新導向 (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "無法衍生副進程 (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "執行副進程“%s”時發生不明的錯誤"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "無法從 child pid pipe 讀取足夠的資料 (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "字符不在 UTF-8 範圍之內"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "轉換輸入資料時出現無效的字符次序"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "字符不在 UTF-16 範圍之內"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "用法:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[選項...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "說明選項:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "顯示說明的選項"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "顯示所有的說明選項"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "應用程式選項:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "無法給 %2$s 解析整數值‘%1$s’"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s 的整數值‘%1$s’超出範圍"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "無法給 %2$s 解析雙精度浮點數‘%1$s’"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s 的雙精度浮點數‘%1$s’超出範圍"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "解析 %s 選項時發生錯誤"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "缺少 %s 的參數"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "未知的選項 %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "在資料目錄中找不到有效的設定鍵檔案"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "不是正規的檔案"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "檔案是空白的"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "設定鍵檔案中‘%s’行並非設定鍵值配對、羣組或註解"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "無效的羣組名稱:%s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "設定鍵檔案並非以羣組開頭"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "無效的設定鍵名稱:%s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "設定鍵檔案包含不支援的編碼‘%s’"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "設定鍵檔案沒有羣組‘%s’"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "設定鍵檔案沒有設定鍵‘%s’"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "設定鍵檔案包含的設定鍵‘%s’(數值為‘%s’)並非 UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "設定鍵檔案包含的設定鍵‘%s’的數值無法解譯。"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "設定鍵檔案包含的羣組‘%2$s’中設定鍵‘%1$s’數值無法解譯"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "設定鍵檔案的羣組‘%2$s’中沒有設定鍵‘%1$s’"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "設定鍵檔案在行尾包含跳出字符"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "設定鍵檔案含有不正確的「跳出字符」‘%s’"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "數值‘%s’不能被解譯為數字。"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "整數值‘%s’超出範圍"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "數值‘%s’不能被解譯為浮點數。"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "數值‘%s’不能被解譯為邏輯值。"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "傳給 %s 的計數值太大"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "串流已經關閉"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "操作已被取消"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "不明的類型"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s 檔案類型"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s 類型"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "未預期的串流過早結束"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "未命名的"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "桌面(Desktop)檔案未指定 Exec 欄位"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "無法找到應用程式要求的終端機"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "不能建立使用者應用程式組態資料夾 %s:%s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "不能建立使用者 MIME 組態資料夾 %s:%s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "不能建立使用者桌面檔案 %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "自選 %s 的定義"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "裝置無法實作退出功能(eject)"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "裝置無法實作媒體的輪詢"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "不能處理版本為 %d 的 GEmblem 編碼"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem 編碼中記號 (%d) 的數量格式不正確"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "不能處理版本為 %d 的 GEmblemedIcon 編碼"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon 編碼中記號 (%d) 的數量格式不正確"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "預期為 GEmblemedIcon 的 GEmblem"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "不支援的操作"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "包含了不存在的掛載點"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "不能複製整個目錄"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "不能將目錄複製到目錄上"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "目標檔案已存在"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "不能遞廻複製目錄"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "不能複製特殊的檔案"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "提供了無效的符號連結值"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "不支援回收筒"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "檔案名稱不能包含「%c」"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "儲存裝置尚未實作掛載功能"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "沒有應用程式註冊為用以處理這個檔案"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "檔案列舉器(enumerator)已關閉"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "檔案列舉器(enumerator)有異常操作"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "檔案列舉器(enumerator)已經關閉"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "檔案"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "含有圖示的檔案"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "不能處理版本為 %d 的 GFileIcon 編碼"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "給 GFileIcon 的輸入資料格式不良"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "串流不支援 query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "不支援在串流中搜尋"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "在輸入串流中不允許截短(truncate)"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "在串流中不支援截短(truncate)"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "記號數量 (%d) 錯誤"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "類別名稱 %s 沒有類型"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "類型 %s 沒有實作 GIcon 介面"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "類型 %s 尚未歸類"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "格式不良的版本號碼:%s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "類型 %s 沒有實作 GIcon 介面的 from_tokens()"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "不能處理提供的圖示編碼版本"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "輸入串流尚未實作讀取"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "串流有異常操作"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "無法找到預設的本地端目錄監視器類型"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "無效的檔案名稱 %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "取得檔案系統資訊時發生錯誤:%s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "不能重新命名根目錄"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "重新命名檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "不能重新命名檔案,該檔案名稱已存在"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "無效的檔案名稱"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "開啓檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "不能開啟目錄"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "移除檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "移動檔案至回收筒時發生錯誤:%s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "無法建立回收筒目錄 %s:%s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "無法找到回收筒的頂端層級目錄"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "無法找到或建立回收筒目錄"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "無法建立回收筒資訊檔案:%s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "無法將檔案移至回收筒:%s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "建立目錄發生錯誤:%s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "建立符號連結時發生錯誤:%s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "移動檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "不能將目錄移動至目錄上"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "建立備份檔案失敗"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "移除目標檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "不支援在掛載點之間移動"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "屬性數值必須為非-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "無效的屬性類型(應為字串值)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "無效的延伸屬性名稱"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "設定延伸屬性「%s」時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "取得檔案「%s」狀態時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr "(無效的編碼)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "取得檔案描述狀態時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "無效的屬性類型(應為 uint32 值)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "無效的屬性類型(應為 uint64 值)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "無效的屬性類型(應為 byte string 值)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "設定權限時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "設定擁有者時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "符號連結必須為非-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "設定符號連結時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "設定符號連結時發生錯誤:檔案不是符號連結"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux 關聯必須為非-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "設定 SELinux 關聯時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux 在這個系統上並未啟用"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "不支援設定屬性 %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "從檔案讀取時發生錯誤:%s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "在檔案中搜尋時發生錯誤:%s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "關閉檔案時發生錯誤:%s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "無法找到預設的本地端檔案監視器類型"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "寫入至檔案時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "移除舊備份連結時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "建立備份複本時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "重新命名暫存檔案時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "截短檔案時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "開啟檔案「%s」時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "目標檔案是一個目錄"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "目標檔案不是正規的檔案"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "該檔案已被外部程式修改過"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "移除舊檔案時發生錯誤:%s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "提供了無效的 GSeek 類型"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "無效的搜尋要求"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "不能截短 GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "已達最大資料陣列上限"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "記憶體輸出串流不能改變大小"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "改變記憶體輸出串流的大小失敗"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "掛載點尚未實作卸載"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "掛載點尚未實作退出"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "掛載點尚未實作重新掛載"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "掛載點尚未實作內容類型預測"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "掛載點尚未實作同步內容類型預測"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "輸出串流尚未實作寫入"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "來源串流已經關閉"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "名稱"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "圖示的名稱"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "名稱"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "包含圖示名稱的陣列"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "使用預設的回饋"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"是否使用縮短過在「-」字符的名稱找到的預設回饋。如果提供多個名稱則忽略第一個以"
+"外的名稱。"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "不能處理版本為 %d 的 GThemedIcon 編碼"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "檔案描述子"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "要讀取的檔案描述子"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "關閉檔案描述子"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "當串流關閉時是否關閉檔案描述子"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "從 unix 讀取時發生錯誤:%s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "關閉 unix 時發生錯誤:%s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "根檔案系統"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "要寫入的檔案描述子"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "寫入至 unix 時發生錯誤:%s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "儲存裝置尚未實作退出(eject)"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "找不到應用程式"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "執行應用程式時發生錯誤:%s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "不支援 URIs"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "關聯更改在 win32 上不支援"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "關聯建立在 win32 上不支援"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "不要隱藏項目"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "使用長式表列格式"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[檔案...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u 位元組"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "建立備份連結時發生錯誤:%s"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..35329fa
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,1808 @@
+# Chinese (Taiwan) translation for glib 2.x
+# Copyright (C) 2001, 02, 03, 05, 07 Free Software Foundation, Inc.
+# XML glossary from http://xml.ascc.net/zh/big5/gloss.html
+# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2005.
+# Abel Cheung <abel@oaka.org>, 2001-2003, 2005.
+# Woodman Tuen <wmtuen@gmail.com>, 2005-07.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: glib 2.19.9\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-29 13:00-0400\n"
+"PO-Revision-Date: 2009-02-23 19:56+0800\n"
+"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
+"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: glib/gbookmarkfile.c:737
+#, c-format
+msgid "Unexpected attribute '%s' for element '%s'"
+msgstr "元件「%2$s」中有未預期的屬性「%1$s」"
+
+#: glib/gbookmarkfile.c:748 glib/gbookmarkfile.c:819 glib/gbookmarkfile.c:829
+#: glib/gbookmarkfile.c:936
+#, c-format
+msgid "Attribute '%s' of element '%s' not found"
+msgstr "找不到元件「%2$s」中的屬性「%1$s」"
+
+#: glib/gbookmarkfile.c:1106 glib/gbookmarkfile.c:1171
+#: glib/gbookmarkfile.c:1235 glib/gbookmarkfile.c:1245
+#, c-format
+msgid "Unexpected tag '%s', tag '%s' expected"
+msgstr "未預期的標籤「%s」,應為標籤「%s」"
+
+#: glib/gbookmarkfile.c:1131 glib/gbookmarkfile.c:1145
+#: glib/gbookmarkfile.c:1213 glib/gbookmarkfile.c:1265
+#, c-format
+msgid "Unexpected tag '%s' inside '%s'"
+msgstr "「%2$s」中有未預期的標籤「%1$s」"
+
+#: glib/gbookmarkfile.c:1793
+msgid "No valid bookmark file found in data dirs"
+msgstr "在資料目錄中找不到有效的書籤檔案"
+
+#: glib/gbookmarkfile.c:1994
+#, c-format
+msgid "A bookmark for URI '%s' already exists"
+msgstr "URI「%s」的書籤已經存在"
+
+#: glib/gbookmarkfile.c:2040 glib/gbookmarkfile.c:2198
+#: glib/gbookmarkfile.c:2283 glib/gbookmarkfile.c:2363
+#: glib/gbookmarkfile.c:2448 glib/gbookmarkfile.c:2531
+#: glib/gbookmarkfile.c:2609 glib/gbookmarkfile.c:2688
+#: glib/gbookmarkfile.c:2730 glib/gbookmarkfile.c:2827
+#: glib/gbookmarkfile.c:2953 glib/gbookmarkfile.c:3143
+#: glib/gbookmarkfile.c:3219 glib/gbookmarkfile.c:3384
+#: glib/gbookmarkfile.c:3473 glib/gbookmarkfile.c:3563
+#: glib/gbookmarkfile.c:3691
+#, c-format
+msgid "No bookmark found for URI '%s'"
+msgstr "找不到 URI「%s」的書籤"
+
+#: glib/gbookmarkfile.c:2372
+#, c-format
+msgid "No MIME type defined in the bookmark for URI '%s'"
+msgstr "URI「%s」書籤中沒有定義 MIME 類型"
+
+#: glib/gbookmarkfile.c:2457
+#, c-format
+msgid "No private flag has been defined in bookmark for URI '%s'"
+msgstr "URI「%s」書籤中沒有私有旗幟"
+
+#: glib/gbookmarkfile.c:2836
+#, c-format
+msgid "No groups set in bookmark for URI '%s'"
+msgstr "URI「%s」書籤中沒有設定群組"
+
+#: glib/gbookmarkfile.c:3237 glib/gbookmarkfile.c:3394
+#, c-format
+msgid "No application with name '%s' registered a bookmark for '%s'"
+msgstr "沒有名為「%s」的應用程式註冊書籤「%s」"
+
+#: glib/gbookmarkfile.c:3417
+#, c-format
+msgid "Failed to expand exec line '%s' with URI '%s'"
+msgstr "以 URI‘%2$s’ 展開 exec 行‘%1$s’失敗"
+
+#: glib/gconvert.c:431 glib/gconvert.c:509 glib/giochannel.c:1230
+#, c-format
+msgid "Conversion from character set '%s' to '%s' is not supported"
+msgstr "不支援將字元集‘%s’轉換成‘%s’"
+
+#: glib/gconvert.c:435 glib/gconvert.c:513
+#, c-format
+msgid "Could not open converter from '%s' to '%s'"
+msgstr "無法將‘%s’轉換至‘%s’"
+
+#: glib/gconvert.c:632 glib/gconvert.c:1017 glib/giochannel.c:1402
+#: glib/giochannel.c:1444 glib/giochannel.c:2288 glib/gutf8.c:964
+#: glib/gutf8.c:1413
+msgid "Invalid byte sequence in conversion input"
+msgstr "轉換輸入資料時遇到不正確的位元組組合"
+
+#: glib/gconvert.c:638 glib/gconvert.c:944 glib/giochannel.c:1409
+#: glib/giochannel.c:2300
+#, c-format
+msgid "Error during conversion: %s"
+msgstr "轉換時發生錯誤:%s"
+
+#: glib/gconvert.c:669 glib/gutf8.c:960 glib/gutf8.c:1164 glib/gutf8.c:1305
+#: glib/gutf8.c:1409
+msgid "Partial character sequence at end of input"
+msgstr "輸入資料結束時字元仍未完整"
+
+#: glib/gconvert.c:919
+#, c-format
+msgid "Cannot convert fallback '%s' to codeset '%s'"
+msgstr "無法將後備字串‘%s’的字元集轉換成‘%s’"
+
+#: glib/gconvert.c:1737
+#, c-format
+msgid "The URI '%s' is not an absolute URI using the \"file\" scheme"
+msgstr "URI‘%s’不是使用“file”格式的絕對 URI"
+
+#: glib/gconvert.c:1747
+#, c-format
+msgid "The local file URI '%s' may not include a '#'"
+msgstr "本機檔案的 URI‘%s’不應含有‘#’"
+
+#: glib/gconvert.c:1764
+#, c-format
+msgid "The URI '%s' is invalid"
+msgstr "URI‘%s’無效"
+
+#: glib/gconvert.c:1776
+#, c-format
+msgid "The hostname of the URI '%s' is invalid"
+msgstr "URI‘%s’中的主機名稱無效"
+
+#: glib/gconvert.c:1792
+#, c-format
+msgid "The URI '%s' contains invalidly escaped characters"
+msgstr "URI‘%s’含有「不正確跳出」的字元"
+
+#: glib/gconvert.c:1887
+#, c-format
+msgid "The pathname '%s' is not an absolute path"
+msgstr "路徑名稱‘%s’不是絕對路徑"
+
+#: glib/gconvert.c:1897
+msgid "Invalid hostname"
+msgstr "主機名稱無效"
+
+#: glib/gdir.c:110 glib/gdir.c:130
+#, c-format
+msgid "Error opening directory '%s': %s"
+msgstr "開啟目錄‘%s’時發生錯誤:%s"
+
+#: glib/gfileutils.c:532 glib/gfileutils.c:620
+#, c-format
+msgid "Could not allocate %lu bytes to read file \"%s\""
+msgstr "無法配置 %lu 位元來讀取檔案“%s”"
+
+#: glib/gfileutils.c:547
+#, c-format
+msgid "Error reading file '%s': %s"
+msgstr "讀取檔案‘%s’時發生錯誤:%s"
+
+#: glib/gfileutils.c:561
+#, c-format
+msgid "File \"%s\" is too large"
+msgstr "檔案「%s」太過巨大"
+
+#: glib/gfileutils.c:644
+#, c-format
+msgid "Failed to read from file '%s': %s"
+msgstr "讀取檔案‘%s’失敗:%s"
+
+#: glib/gfileutils.c:695 glib/gfileutils.c:782
+#, c-format
+msgid "Failed to open file '%s': %s"
+msgstr "開啟檔案「%s」失敗:%s"
+
+#: glib/gfileutils.c:712 glib/gmappedfile.c:133
+#, c-format
+msgid "Failed to get attributes of file '%s': fstat() failed: %s"
+msgstr "獲取檔案‘%s’的屬性失敗:fstat() 失敗:%s"
+
+#: glib/gfileutils.c:746
+#, c-format
+msgid "Failed to open file '%s': fdopen() failed: %s"
+msgstr "開啟檔案‘%s’失敗:fdopen() 失敗:%s"
+
+#: glib/gfileutils.c:854
+#, c-format
+msgid "Failed to rename file '%s' to '%s': g_rename() failed: %s"
+msgstr "檔案名稱由‘%s’改為‘%s’失敗:g_rename() 失敗:%s"
+
+#: glib/gfileutils.c:896 glib/gfileutils.c:1328
+#, c-format
+msgid "Failed to create file '%s': %s"
+msgstr "建立檔案‘%s’失敗:%s"
+
+#: glib/gfileutils.c:910
+#, c-format
+msgid "Failed to open file '%s' for writing: fdopen() failed: %s"
+msgstr "開啟檔案‘%s’作寫入失敗:fdopen() 失敗:%s"
+
+#: glib/gfileutils.c:935
+#, c-format
+msgid "Failed to write file '%s': fwrite() failed: %s"
+msgstr "寫入檔案‘%s’失敗:fwrite() 失敗:%s"
+
+#: glib/gfileutils.c:954
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fflush() failed: %s"
+msgstr "寫入檔案‘%s’失敗:fwrite() 失敗:%s"
+
+#: glib/gfileutils.c:979
+#, fuzzy, c-format
+msgid "Failed to write file '%s': fsync() failed: %s"
+msgstr "寫入檔案‘%s’失敗:fwrite() 失敗:%s"
+
+#: glib/gfileutils.c:997
+#, c-format
+msgid "Failed to close file '%s': fclose() failed: %s"
+msgstr "關閉檔案‘%s’失敗:fclose() 失敗:%s"
+
+#: glib/gfileutils.c:1115
+#, c-format
+msgid "Existing file '%s' could not be removed: g_unlink() failed: %s"
+msgstr "現存檔案‘%s’無法移除:g_unlink() 失敗:%s"
+
+#: glib/gfileutils.c:1290
+#, c-format
+msgid "Template '%s' invalid, should not contain a '%s'"
+msgstr "樣式‘%s’無效,不應含有‘%s’"
+
+# (Abel) this is file template for mktemp/mkstemp
+#: glib/gfileutils.c:1303
+#, c-format
+msgid "Template '%s' doesn't contain XXXXXX"
+msgstr "檔案樣式‘%s’沒有包含 XXXXXX"
+
+#: glib/gfileutils.c:1742
+#, c-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: glib/gfileutils.c:1747
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: glib/gfileutils.c:1752
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: glib/gfileutils.c:1795
+#, c-format
+msgid "Failed to read the symbolic link '%s': %s"
+msgstr "讀取符號連結‘%s’失敗:%s"
+
+#: glib/gfileutils.c:1816
+msgid "Symbolic links not supported"
+msgstr "不支援符號連結"
+
+#: glib/giochannel.c:1234
+#, c-format
+msgid "Could not open converter from '%s' to '%s': %s"
+msgstr "無法開啟將‘%s’轉換至‘%s’的轉換器:%s"
+
+#: glib/giochannel.c:1579
+msgid "Can't do a raw read in g_io_channel_read_line_string"
+msgstr "在 g_io_channel_read_line_string 中無法讀取原始資料"
+
+#: glib/giochannel.c:1626 glib/giochannel.c:1884 glib/giochannel.c:1971
+msgid "Leftover unconverted data in read buffer"
+msgstr "用來讀取資料的緩衝區中仍有未轉換的資料"
+
+#: glib/giochannel.c:1707 glib/giochannel.c:1784
+msgid "Channel terminates in a partial character"
+msgstr "在字元未完整之前,輸入管道已經結束"
+
+#: glib/giochannel.c:1770
+msgid "Can't do a raw read in g_io_channel_read_to_end"
+msgstr "g_io_channel_read_to_end 中無法讀取原始資料"
+
+#: glib/gmappedfile.c:116
+#, c-format
+msgid "Failed to open file '%s': open() failed: %s"
+msgstr "開啟檔案‘%s’失敗:open() 失敗:%s"
+
+#: glib/gmappedfile.c:193
+#, c-format
+msgid "Failed to map file '%s': mmap() failed: %s"
+msgstr "對應檔案‘%s’失敗:mmap() 失敗:%s"
+
+#: glib/gmarkup.c:255 glib/gmarkup.c:295
+#, c-format
+msgid "Error on line %d char %d: "
+msgstr "第 %d 行第 %d 個字發生錯誤:"
+
+#: glib/gmarkup.c:389
+#, c-format
+msgid "Error on line %d: %s"
+msgstr "第 %d 行發生錯誤:%s"
+
+#: glib/gmarkup.c:493
+msgid ""
+"Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
+msgstr "出現空白的實體‘&;’;可用的實體為:&amp; &quot; &lt; &gt; &apos;"
+
+#: glib/gmarkup.c:503
+#, c-format
+msgid ""
+"Character '%s' is not valid at the start of an entity name; the & character "
+"begins an entity; if this ampersand isn't supposed to be an entity, escape "
+"it as &amp;"
+msgstr ""
+"實體名稱不應以‘%s’開始,應該使用 & 字元;如果這個 & 字元不是作為實體使用,請"
+"將 & 轉換為 &amp;"
+
+#: glib/gmarkup.c:537
+#, c-format
+msgid "Character '%s' is not valid inside an entity name"
+msgstr "實體名稱中不應含有字元‘%s’"
+
+#: glib/gmarkup.c:574
+#, c-format
+msgid "Entity name '%s' is not known"
+msgstr "實體名稱‘%s’意義不明"
+
+#: glib/gmarkup.c:585
+msgid ""
+"Entity did not end with a semicolon; most likely you used an ampersand "
+"character without intending to start an entity - escape ampersand as &amp;"
+msgstr ""
+"實體的結束部分不是分號;很可能您想使用 & 字元但未將它變為實體 ─ 請將 & 轉換"
+"為 &amp;"
+
+#: glib/gmarkup.c:638
+#, c-format
+msgid ""
+"Failed to parse '%-.*s', which should have been a digit inside a character "
+"reference (&#234; for example) - perhaps the digit is too large"
+msgstr "無法解析‘%-.*s’,字元參引內應該含有數字(例如 &#234;)─ 可能是數字太大"
+
+#: glib/gmarkup.c:660
+#, c-format
+msgid "Character reference '%-.*s' does not encode a permitted character"
+msgstr "字元參引‘%-.*s’無法表示任何能接受的字元"
+
+#: glib/gmarkup.c:675
+msgid "Empty character reference; should include a digit such as &#454;"
+msgstr "字元參引是空白的;它應該包括數字,像 &#454;"
+
+#: glib/gmarkup.c:685
+msgid ""
+"Character reference did not end with a semicolon; most likely you used an "
+"ampersand character without intending to start an entity - escape ampersand "
+"as &amp;"
+msgstr ""
+"字元參引的結束部分不是分號;很可能您想使用 & 字元但未將它變為實體 ─ 請將 & 轉"
+"換為 &amp;"
+
+#: glib/gmarkup.c:771
+msgid "Unfinished entity reference"
+msgstr "未完成的實體參引"
+
+#: glib/gmarkup.c:777
+msgid "Unfinished character reference"
+msgstr "未完成的字元參引"
+
+#: glib/gmarkup.c:1063
+msgid "Invalid UTF-8 encoded text - overlong sequence"
+msgstr "無效的 UTF-8 編碼文字 - 序列過長"
+
+#: glib/gmarkup.c:1091
+msgid "Invalid UTF-8 encoded text - not a start char"
+msgstr "無效的 UTF-8 編碼文字 - 非開始字元"
+
+#: glib/gmarkup.c:1130
+#, c-format
+msgid "Invalid UTF-8 encoded text - not valid '%s'"
+msgstr "無效的 UTF-8 編碼文字 - 不是合法的「%s」"
+
+#: glib/gmarkup.c:1168
+msgid "Document must begin with an element (e.g. <book>)"
+msgstr "文件開始必須為一元素(例如 <book>)"
+
+#: glib/gmarkup.c:1208
+#, c-format
+msgid ""
+"'%s' is not a valid character following a '<' character; it may not begin an "
+"element name"
+msgstr "‘<’字元後的‘%s’不是有效的字元;這樣不可能是元素名稱的開始部份"
+
+#: glib/gmarkup.c:1276
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' character to end the empty-element tag '%"
+"s'"
+msgstr "字元「%s」只有一半,空元素標籤「%s」的結尾應該以‘>’字元結束"
+
+#: glib/gmarkup.c:1365
+#, c-format
+msgid ""
+"Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
+msgstr "不尋常的字元‘%s’,屬性名稱‘%s’(屬於元素‘%s’)後應該是‘=’字元"
+
+#: glib/gmarkup.c:1407
+#, c-format
+msgid ""
+"Odd character '%s', expected a '>' or '/' character to end the start tag of "
+"element '%s', or optionally an attribute; perhaps you used an invalid "
+"character in an attribute name"
+msgstr ""
+"不尋常的字元‘%s’,元素‘%s’的開始標籤應該以‘>’或‘/’字元終結,也可以是屬性;或"
+"許您在屬性名稱中使用了無效的字元"
+
+#: glib/gmarkup.c:1493
+#, c-format
+msgid ""
+"Odd character '%s', expected an open quote mark after the equals sign when "
+"giving value for attribute '%s' of element '%s'"
+msgstr ""
+"不尋常的字元‘%s’,當指定屬性‘%s’的值(屬於元素‘%s’)時,等號後應該出現開引號"
+
+#: glib/gmarkup.c:1635
+#, c-format
+msgid ""
+"'%s' is not a valid character following the characters '</'; '%s' may not "
+"begin an element name"
+msgstr "‘</’字元後的‘%s’不是有效的字元;‘%s’不可能是元素名稱的開始部份"
+
+#: glib/gmarkup.c:1675
+#, c-format
+msgid ""
+"'%s' is not a valid character following the close element name '%s'; the "
+"allowed character is '>'"
+msgstr "字元‘%s’是無效的(位置在關閉元素‘%s’末端);允許的字元為「>」"
+
+#: glib/gmarkup.c:1686
+#, c-format
+msgid "Element '%s' was closed, no element is currently open"
+msgstr "元素‘%s’已關閉,沒有開啟中的元素"
+
+#: glib/gmarkup.c:1695
+#, c-format
+msgid "Element '%s' was closed, but the currently open element is '%s'"
+msgstr "元素‘%s’已關閉,但開啟中的元素是‘%s’"
+
+#: glib/gmarkup.c:1858
+msgid "Document was empty or contained only whitespace"
+msgstr "文件完全空白或只含有空白字元"
+
+#: glib/gmarkup.c:1872
+msgid "Document ended unexpectedly just after an open angle bracket '<'"
+msgstr "文件在尖角括號‘<’後突然終止"
+
+#: glib/gmarkup.c:1880 glib/gmarkup.c:1925
+#, c-format
+msgid ""
+"Document ended unexpectedly with elements still open - '%s' was the last "
+"element opened"
+msgstr "在仍然有開啟中的元素時,文件突然結束 ─‘%s’是最後一個開啟的元素"
+
+#: glib/gmarkup.c:1888
+#, c-format
+msgid ""
+"Document ended unexpectedly, expected to see a close angle bracket ending "
+"the tag <%s/>"
+msgstr "文件突然結束,本來應該出現用來關閉標籤 <%s/> 的尖角括號"
+
+#: glib/gmarkup.c:1894
+msgid "Document ended unexpectedly inside an element name"
+msgstr "在元素的名稱內,文件突然結束"
+
+#: glib/gmarkup.c:1900
+msgid "Document ended unexpectedly inside an attribute name"
+msgstr "在屬性名稱內,文件突然結束"
+
+#: glib/gmarkup.c:1905
+msgid "Document ended unexpectedly inside an element-opening tag."
+msgstr "在元素的開啟標籤內,文件突然結束"
+
+#: glib/gmarkup.c:1911
+msgid ""
+"Document ended unexpectedly after the equals sign following an attribute "
+"name; no attribute value"
+msgstr "在屬性名稱的等號後,文件突然結束;沒有屬性值"
+
+#: glib/gmarkup.c:1918
+msgid "Document ended unexpectedly while inside an attribute value"
+msgstr "在屬性值內,文件突然結束"
+
+#: glib/gmarkup.c:1934
+#, c-format
+msgid "Document ended unexpectedly inside the close tag for element '%s'"
+msgstr "在元素‘%s’的關閉標籤內,文件突然結束"
+
+#: glib/gmarkup.c:1940
+msgid "Document ended unexpectedly inside a comment or processing instruction"
+msgstr "在註解或處理指示內,文件突然結束"
+
+#: glib/gregex.c:131
+msgid "corrupted object"
+msgstr "損毀的物件"
+
+#: glib/gregex.c:133
+msgid "internal error or corrupted object"
+msgstr "內部錯誤或損毀的物件"
+
+#: glib/gregex.c:135
+msgid "out of memory"
+msgstr "記憶體耗盡"
+
+#: glib/gregex.c:140
+msgid "backtracking limit reached"
+msgstr "已達回溯上限"
+
+#: glib/gregex.c:152 glib/gregex.c:160
+msgid "the pattern contains items not supported for partial matching"
+msgstr "此模式包含了不支援部分比對的項目"
+
+#: glib/gregex.c:154 gio/glocalfile.c:2019
+msgid "internal error"
+msgstr "內部的錯誤"
+
+#: glib/gregex.c:162
+msgid "back references as conditions are not supported for partial matching"
+msgstr "部分比對不支援以反向參照為條件"
+
+#: glib/gregex.c:171
+msgid "recursion limit reached"
+msgstr "已達遞廻上限"
+
+#: glib/gregex.c:173
+msgid "workspace limit for empty substrings reached"
+msgstr "已達空白子字串的工作區上限"
+
+#: glib/gregex.c:175
+msgid "invalid combination of newline flags"
+msgstr "無效的換行旗標組合"
+
+#: glib/gregex.c:179
+msgid "unknown error"
+msgstr "不明的錯誤"
+
+#: glib/gregex.c:199
+msgid "\\ at end of pattern"
+msgstr "\\ 於模式結尾"
+
+#: glib/gregex.c:202
+msgid "\\c at end of pattern"
+msgstr "\\c 於模式結尾"
+
+#: glib/gregex.c:205
+msgid "unrecognized character follows \\"
+msgstr "無法辨識的字元接著 \\"
+
+#: glib/gregex.c:212
+msgid "case-changing escapes (\\l, \\L, \\u, \\U) are not allowed here"
+msgstr "這裡不允許使用改變大小寫的轉義符(\\l, \\L, \\u, \\U)"
+
+#: glib/gregex.c:215
+msgid "numbers out of order in {} quantifier"
+msgstr "{} 裡的數字次序顛倒了"
+
+#: glib/gregex.c:218
+msgid "number too big in {} quantifier"
+msgstr "{} 裡的數字太大了"
+
+#: glib/gregex.c:221
+msgid "missing terminating ] for character class"
+msgstr "字元類別缺少結束的 ]"
+
+#: glib/gregex.c:224
+msgid "invalid escape sequence in character class"
+msgstr "字元類別中無效的跳脫序列"
+
+#: glib/gregex.c:227
+msgid "range out of order in character class"
+msgstr "字元類別的範圍次序顛倒"
+
+#: glib/gregex.c:230
+msgid "nothing to repeat"
+msgstr "沒有東西可重複"
+
+#: glib/gregex.c:233
+msgid "unrecognized character after (?"
+msgstr "在 (? 後有無法辨識的字元"
+
+#: glib/gregex.c:237
+msgid "unrecognized character after (?<"
+msgstr "在 (?< 後有無法辨識的字元"
+
+#: glib/gregex.c:241
+msgid "unrecognized character after (?P"
+msgstr "在 (?P 後有無法辨識的字元"
+
+#: glib/gregex.c:244
+msgid "POSIX named classes are supported only within a class"
+msgstr "POSIX 命名類別只在單一類別中支援"
+
+#: glib/gregex.c:247
+msgid "missing terminating )"
+msgstr "缺少結束的 )"
+
+#: glib/gregex.c:251
+msgid ") without opening ("
+msgstr ") 沒有開頭的 ("
+
+#. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
+#. * sequences here, '(?-54' would be an example for the second group.
+#.
+#: glib/gregex.c:258
+msgid "(?R or (?[+-]digits must be followed by )"
+msgstr "(?R 或 (?[+-]數字必須接著 )"
+
+#: glib/gregex.c:261
+msgid "reference to non-existent subpattern"
+msgstr "參照不存在的子模式"
+
+#: glib/gregex.c:264
+msgid "missing ) after comment"
+msgstr "註解後缺少 )"
+
+#: glib/gregex.c:267
+msgid "regular expression too large"
+msgstr "正規表示式太長"
+
+#: glib/gregex.c:270
+msgid "failed to get memory"
+msgstr "取得記憶體失敗"
+
+#: glib/gregex.c:273
+msgid "lookbehind assertion is not fixed length"
+msgstr "lookbehind 判斷提示(assertion) 不是固定的長度"
+
+#: glib/gregex.c:276
+msgid "malformed number or name after (?("
+msgstr "(?( 之後有格式不正確的數字或名稱"
+
+#: glib/gregex.c:279
+msgid "conditional group contains more than two branches"
+msgstr "條件式群組包含了兩個以上的分支"
+
+#: glib/gregex.c:282
+msgid "assertion expected after (?("
+msgstr "(?( 後應該有判斷提示(assertion)"
+
+#: glib/gregex.c:285
+msgid "unknown POSIX class name"
+msgstr "未知的 POSIX 類別名稱"
+
+#: glib/gregex.c:288
+msgid "POSIX collating elements are not supported"
+msgstr "不支援 POSIX 整理元件"
+
+#: glib/gregex.c:291
+msgid "character value in \\x{...} sequence is too large"
+msgstr "\\x{...} 序列中的字元值太大"
+
+#: glib/gregex.c:294
+msgid "invalid condition (?(0)"
+msgstr "無效的條件 (?(0)"
+
+#: glib/gregex.c:297
+msgid "\\C not allowed in lookbehind assertion"
+msgstr "在 lookbehind 判斷提示(assertion) 中不支援\\C"
+
+#: glib/gregex.c:300
+msgid "recursive call could loop indefinitely"
+msgstr "遞廻呼叫可能變成無限廻圈"
+
+#: glib/gregex.c:303
+msgid "missing terminator in subpattern name"
+msgstr "子模式名稱中缺少結束字元"
+
+#: glib/gregex.c:306
+msgid "two named subpatterns have the same name"
+msgstr "兩個命名的子模式具有相同的名稱"
+
+#: glib/gregex.c:309
+msgid "malformed \\P or \\p sequence"
+msgstr "格式不正確的 \\P 或 \\p 序列"
+
+#: glib/gregex.c:312
+msgid "unknown property name after \\P or \\p"
+msgstr "在 \\P 或 \\p 後有未知的屬性名稱"
+
+#: glib/gregex.c:315
+msgid "subpattern name is too long (maximum 32 characters)"
+msgstr "子模式名稱太長(最多 32 字元)"
+
+#: glib/gregex.c:318
+msgid "too many named subpatterns (maximum 10,000)"
+msgstr "太多命名的子模式(最大值 10,000)"
+
+#: glib/gregex.c:321
+msgid "octal value is greater than \\377"
+msgstr "8 進位值大於 \\377"
+
+#: glib/gregex.c:324
+msgid "DEFINE group contains more than one branch"
+msgstr "DEFINE 群組包含一個以上的分支"
+
+#: glib/gregex.c:327
+msgid "repeating a DEFINE group is not allowed"
+msgstr "不允許重複 DEFINE 群組"
+
+#: glib/gregex.c:330
+msgid "inconsistent NEWLINE options"
+msgstr "不一致的 NEWLINE 選項"
+
+#: glib/gregex.c:333
+msgid ""
+"\\g is not followed by a braced name or an optionally braced non-zero number"
+msgstr "\\g 並未隨著具有大括弧的名稱或選用的具大括弧的非零數值"
+
+#: glib/gregex.c:338
+msgid "unexpected repeat"
+msgstr "未預期的重複"
+
+#: glib/gregex.c:342
+msgid "code overflow"
+msgstr "程式碼溢流"
+
+#: glib/gregex.c:346
+msgid "overran compiling workspace"
+msgstr "編譯工作區超出範圍"
+
+#: glib/gregex.c:350
+msgid "previously-checked referenced subpattern not found"
+msgstr "找不到預先核取的參照子字串"
+
+#: glib/gregex.c:526 glib/gregex.c:1607
+#, c-format
+msgid "Error while matching regular expression %s: %s"
+msgstr "比對正規表示式 %s 發生錯誤:%s"
+
+#: glib/gregex.c:1098
+msgid "PCRE library is compiled without UTF8 support"
+msgstr "PCRE 程式庫並未編譯對 UTF8 的支援"
+
+#: glib/gregex.c:1107
+msgid "PCRE library is compiled without UTF8 properties support"
+msgstr "PCRE 程式庫並未編譯對 UTF8 屬性的支援"
+
+#: glib/gregex.c:1161
+#, c-format
+msgid "Error while compiling regular expression %s at char %d: %s"
+msgstr "編譯正規表示式 %s 時於第 %d 個字發生錯誤:%s"
+
+#: glib/gregex.c:1197
+#, c-format
+msgid "Error while optimizing regular expression %s: %s"
+msgstr "最佳化正規表示式 %s 時發生錯誤:%s"
+
+#: glib/gregex.c:2035
+msgid "hexadecimal digit or '}' expected"
+msgstr "應為 16 進位數字或「}」"
+
+#: glib/gregex.c:2051
+msgid "hexadecimal digit expected"
+msgstr "應為 16 進位數字"
+
+#: glib/gregex.c:2091
+msgid "missing '<' in symbolic reference"
+msgstr "在符號參照中缺少「<」"
+
+#: glib/gregex.c:2100
+msgid "unfinished symbolic reference"
+msgstr "未完成的符號參照"
+
+#: glib/gregex.c:2107
+msgid "zero-length symbolic reference"
+msgstr "零-長度的符號參照"
+
+#: glib/gregex.c:2118
+msgid "digit expected"
+msgstr "預期數字"
+
+#: glib/gregex.c:2136
+msgid "illegal symbolic reference"
+msgstr "不合法的符號參照"
+
+#: glib/gregex.c:2198
+msgid "stray final '\\'"
+msgstr "缺少最後的「\\」"
+
+#: glib/gregex.c:2202
+msgid "unknown escape sequence"
+msgstr "不明的跳脫序列"
+
+#: glib/gregex.c:2212
+#, c-format
+msgid "Error while parsing replacement text \"%s\" at char %lu: %s"
+msgstr "當分析於字元 %2$lu 的取代文字「%1$s」時發生錯誤:%3$s"
+
+#: glib/gshell.c:70
+msgid "Quoted text doesn't begin with a quotation mark"
+msgstr "應該用引號括起來的文字不是以括號為開始"
+
+#: glib/gshell.c:160
+msgid "Unmatched quotation mark in command line or other shell-quoted text"
+msgstr "指令列或其它標為指令的字串內有不對稱的引號"
+
+#: glib/gshell.c:538
+#, c-format
+msgid "Text ended just after a '\\' character. (The text was '%s')"
+msgstr "文字在‘\\’字元後就終止了。(文字為‘%s’)"
+
+#: glib/gshell.c:545
+#, c-format
+msgid "Text ended before matching quote was found for %c. (The text was '%s')"
+msgstr "字串完結前仍沒有對應於 %c 的引號(字串為‘%s’)"
+
+#: glib/gshell.c:557
+msgid "Text was empty (or contained only whitespace)"
+msgstr "文字是空白的(或只含有空白字元)"
+
+#: glib/gspawn-win32.c:283
+msgid "Failed to read data from child process"
+msgstr "無法從副進程讀取資料"
+
+#: glib/gspawn-win32.c:298 glib/gspawn.c:1469
+#, c-format
+msgid "Failed to create pipe for communicating with child process (%s)"
+msgstr "無法建立管道來和副進程溝通 (%s)"
+
+#: glib/gspawn-win32.c:336 glib/gspawn-win32.c:344 glib/gspawn.c:1132
+#, c-format
+msgid "Failed to read from child pipe (%s)"
+msgstr "無法從管道讀取資料 (%s)"
+
+#: glib/gspawn-win32.c:367 glib/gspawn.c:1337
+#, c-format
+msgid "Failed to change to directory '%s' (%s)"
+msgstr "無法進入目錄‘%s’(%s)"
+
+#: glib/gspawn-win32.c:373 glib/gspawn-win32.c:492
+#, c-format
+msgid "Failed to execute child process (%s)"
+msgstr "無法執行副進程 (%s)"
+
+#: glib/gspawn-win32.c:442
+#, c-format
+msgid "Invalid program name: %s"
+msgstr "程式名稱無效:%s"
+
+#: glib/gspawn-win32.c:452 glib/gspawn-win32.c:720 glib/gspawn-win32.c:1276
+#, c-format
+msgid "Invalid string in argument vector at %d: %s"
+msgstr "第 %d 個引數中含無效的字串:%s"
+
+#: glib/gspawn-win32.c:463 glib/gspawn-win32.c:735 glib/gspawn-win32.c:1309
+#, c-format
+msgid "Invalid string in environment: %s"
+msgstr "環境變數中的字串無效:%s"
+
+#: glib/gspawn-win32.c:716 glib/gspawn-win32.c:1257
+#, c-format
+msgid "Invalid working directory: %s"
+msgstr "無效的工作目錄:%s"
+
+#: glib/gspawn-win32.c:781
+#, c-format
+msgid "Failed to execute helper program (%s)"
+msgstr "無法執行協助程式 (%s)"
+
+#: glib/gspawn-win32.c:995
+msgid ""
+"Unexpected error in g_io_channel_win32_poll() reading data from a child "
+"process"
+msgstr "當 g_io_channel_win32_poll() 從副進程讀取資料時發生無法預計的錯誤"
+
+#: glib/gspawn.c:188
+#, c-format
+msgid "Failed to read data from child process (%s)"
+msgstr "無法從副進程讀取資料 (%s)"
+
+#: glib/gspawn.c:325
+#, c-format
+msgid "Unexpected error in select() reading data from a child process (%s)"
+msgstr "當 select() 從子程序讀取資料時發生未預期的錯誤 (%s)"
+
+#: glib/gspawn.c:408
+#, c-format
+msgid "Unexpected error in waitpid() (%s)"
+msgstr "waitpid() 發生未預期的錯誤 (%s)"
+
+#: glib/gspawn.c:1197
+#, c-format
+msgid "Failed to fork (%s)"
+msgstr "無法衍生進程 (%s)"
+
+#: glib/gspawn.c:1347
+#, c-format
+msgid "Failed to execute child process \"%s\" (%s)"
+msgstr "無法執行副進程“%s”(%s)"
+
+#: glib/gspawn.c:1357
+#, c-format
+msgid "Failed to redirect output or input of child process (%s)"
+msgstr "無法將副進程的輸出或輸入重新導向 (%s)"
+
+#: glib/gspawn.c:1366
+#, c-format
+msgid "Failed to fork child process (%s)"
+msgstr "無法衍生副進程 (%s)"
+
+#: glib/gspawn.c:1374
+#, c-format
+msgid "Unknown error executing child process \"%s\""
+msgstr "執行副進程“%s”時發生不明的錯誤"
+
+#: glib/gspawn.c:1396
+#, c-format
+msgid "Failed to read enough data from child pid pipe (%s)"
+msgstr "無法從 child pid pipe 讀取足夠的資料 (%s)"
+
+#: glib/gutf8.c:1038
+msgid "Character out of range for UTF-8"
+msgstr "字元不在 UTF-8 範圍之內"
+
+#: glib/gutf8.c:1132 glib/gutf8.c:1141 glib/gutf8.c:1273 glib/gutf8.c:1282
+#: glib/gutf8.c:1423 glib/gutf8.c:1519
+msgid "Invalid sequence in conversion input"
+msgstr "轉換輸入資料時出現無效的字元次序"
+
+#: glib/gutf8.c:1434 glib/gutf8.c:1530
+msgid "Character out of range for UTF-16"
+msgstr "字元不在 UTF-16 範圍之內"
+
+#: glib/goption.c:615
+msgid "Usage:"
+msgstr "用法:"
+
+#: glib/goption.c:615
+msgid "[OPTION...]"
+msgstr "[選項...]"
+
+#: glib/goption.c:719
+msgid "Help Options:"
+msgstr "說明選項:"
+
+#: glib/goption.c:720
+msgid "Show help options"
+msgstr "顯示說明的選項"
+
+#: glib/goption.c:726
+msgid "Show all help options"
+msgstr "顯示所有的說明選項"
+
+#: glib/goption.c:788
+msgid "Application Options:"
+msgstr "應用程式選項:"
+
+#: glib/goption.c:850 glib/goption.c:920
+#, c-format
+msgid "Cannot parse integer value '%s' for %s"
+msgstr "無法給 %2$s 解析整數值‘%1$s’"
+
+#: glib/goption.c:860 glib/goption.c:928
+#, c-format
+msgid "Integer value '%s' for %s out of range"
+msgstr "%2$s 的整數值‘%1$s’超出範圍"
+
+#: glib/goption.c:885
+#, c-format
+msgid "Cannot parse double value '%s' for %s"
+msgstr "無法給 %2$s 解析雙精度浮點數‘%1$s’"
+
+#: glib/goption.c:893
+#, c-format
+msgid "Double value '%s' for %s out of range"
+msgstr "%2$s 的雙精度浮點數‘%1$s’超出範圍"
+
+#: glib/goption.c:1156 glib/goption.c:1235
+#, c-format
+msgid "Error parsing option %s"
+msgstr "解析 %s 選項時發生錯誤"
+
+#: glib/goption.c:1266 glib/goption.c:1380
+#, c-format
+msgid "Missing argument for %s"
+msgstr "缺少 %s 的參數"
+
+#: glib/goption.c:1773
+#, c-format
+msgid "Unknown option %s"
+msgstr "未知的選項 %s"
+
+#: glib/gkeyfile.c:358
+msgid "Valid key file could not be found in search dirs"
+msgstr "在資料目錄中找不到有效的設定鍵檔案"
+
+#: glib/gkeyfile.c:393
+msgid "Not a regular file"
+msgstr "不是正規的檔案"
+
+#: glib/gkeyfile.c:401
+msgid "File is empty"
+msgstr "檔案是空白的"
+
+#: glib/gkeyfile.c:761
+#, c-format
+msgid ""
+"Key file contains line '%s' which is not a key-value pair, group, or comment"
+msgstr "設定鍵檔案中‘%s’行並非設定鍵值配對、群組或註解"
+
+#: glib/gkeyfile.c:821
+#, c-format
+msgid "Invalid group name: %s"
+msgstr "無效的群組名稱:%s"
+
+#: glib/gkeyfile.c:843
+msgid "Key file does not start with a group"
+msgstr "設定鍵檔案並非以群組開頭"
+
+#: glib/gkeyfile.c:869
+#, c-format
+msgid "Invalid key name: %s"
+msgstr "無效的設定鍵名稱:%s"
+
+#: glib/gkeyfile.c:896
+#, c-format
+msgid "Key file contains unsupported encoding '%s'"
+msgstr "設定鍵檔案包含不支援的編碼‘%s’"
+
+#: glib/gkeyfile.c:1112 glib/gkeyfile.c:1274 glib/gkeyfile.c:2503
+#: glib/gkeyfile.c:2569 glib/gkeyfile.c:2704 glib/gkeyfile.c:2837
+#: glib/gkeyfile.c:2990 glib/gkeyfile.c:3177 glib/gkeyfile.c:3238
+#, c-format
+msgid "Key file does not have group '%s'"
+msgstr "設定鍵檔案沒有群組‘%s’"
+
+#: glib/gkeyfile.c:1286
+#, c-format
+msgid "Key file does not have key '%s'"
+msgstr "設定鍵檔案沒有設定鍵‘%s’"
+
+#: glib/gkeyfile.c:1393 glib/gkeyfile.c:1508
+#, c-format
+msgid "Key file contains key '%s' with value '%s' which is not UTF-8"
+msgstr "設定鍵檔案包含的設定鍵‘%s’(數值為‘%s’)並非 UTF-8"
+
+#: glib/gkeyfile.c:1413 glib/gkeyfile.c:1528 glib/gkeyfile.c:1907
+#, c-format
+msgid "Key file contains key '%s' which has value that cannot be interpreted."
+msgstr "設定鍵檔案包含的設定鍵‘%s’的數值無法解譯。"
+
+#: glib/gkeyfile.c:2122 glib/gkeyfile.c:2334
+#, c-format
+msgid ""
+"Key file contains key '%s' in group '%s' which has value that cannot be "
+"interpreted."
+msgstr "設定鍵檔案包含的群組‘%2$s’中設定鍵‘%1$s’數值無法解譯"
+
+#: glib/gkeyfile.c:2518 glib/gkeyfile.c:2719 glib/gkeyfile.c:3249
+#, c-format
+msgid "Key file does not have key '%s' in group '%s'"
+msgstr "設定鍵檔案的群組‘%2$s’中沒有設定鍵‘%1$s’"
+
+#: glib/gkeyfile.c:3483
+msgid "Key file contains escape character at end of line"
+msgstr "設定鍵檔案在行尾包含跳出字元"
+
+#: glib/gkeyfile.c:3505
+#, c-format
+msgid "Key file contains invalid escape sequence '%s'"
+msgstr "設定鍵檔案含有不正確的「跳出字元」‘%s’"
+
+#: glib/gkeyfile.c:3647
+#, c-format
+msgid "Value '%s' cannot be interpreted as a number."
+msgstr "數值‘%s’不能被解譯為數字。"
+
+#: glib/gkeyfile.c:3661
+#, c-format
+msgid "Integer value '%s' out of range"
+msgstr "整數值‘%s’超出範圍"
+
+#: glib/gkeyfile.c:3694
+#, c-format
+msgid "Value '%s' cannot be interpreted as a float number."
+msgstr "數值‘%s’不能被解譯為浮點數。"
+
+#: glib/gkeyfile.c:3718
+#, c-format
+msgid "Value '%s' cannot be interpreted as a boolean."
+msgstr "數值‘%s’不能被解譯為邏輯值。"
+
+#: gio/gbufferedinputstream.c:417 gio/gbufferedinputstream.c:498
+#: gio/ginputstream.c:193 gio/ginputstream.c:325 gio/ginputstream.c:566
+#: gio/ginputstream.c:691 gio/goutputstream.c:202 gio/goutputstream.c:656
+#, c-format
+msgid "Too large count value passed to %s"
+msgstr "傳給 %s 的計數值太大"
+
+#: gio/gbufferedinputstream.c:885 gio/ginputstream.c:901
+#: gio/goutputstream.c:1085
+msgid "Stream is already closed"
+msgstr "串流已經關閉"
+
+#: gio/gcancellable.c:366 gio/glocalfile.c:2012 gio/gsimpleasyncresult.c:627
+#: gio/gsimpleasyncresult.c:654
+msgid "Operation was cancelled"
+msgstr "操作已被取消"
+
+#: gio/gcontenttype.c:180
+msgid "Unknown type"
+msgstr "不明的類型"
+
+#: gio/gcontenttype.c:181
+#, c-format
+msgid "%s filetype"
+msgstr "%s 檔案類型"
+
+#: gio/gcontenttype.c:678
+#, c-format
+msgid "%s type"
+msgstr "%s 類型"
+
+#: gio/gdatainputstream.c:313
+msgid "Unexpected early end-of-stream"
+msgstr "未預期的串流過早結束"
+
+#: gio/gdesktopappinfo.c:463 gio/gwin32appinfo.c:222
+msgid "Unnamed"
+msgstr "未命名的"
+
+#: gio/gdesktopappinfo.c:710
+msgid "Desktop file didn't specify Exec field"
+msgstr "桌面(Desktop)檔案未指定 Exec 欄位"
+
+#: gio/gdesktopappinfo.c:1004
+msgid "Unable to find terminal required for application"
+msgstr "無法找到應用程式要求的終端機"
+
+#: gio/gdesktopappinfo.c:1236
+#, c-format
+msgid "Can't create user application configuration folder %s: %s"
+msgstr "不能建立使用者應用程式組態資料夾 %s:%s"
+
+#: gio/gdesktopappinfo.c:1240
+#, c-format
+msgid "Can't create user MIME configuration folder %s: %s"
+msgstr "不能建立使用者 MIME 組態資料夾 %s:%s"
+
+#: gio/gdesktopappinfo.c:1644
+#, c-format
+msgid "Can't create user desktop file %s"
+msgstr "不能建立使用者桌面檔案 %s"
+
+#: gio/gdesktopappinfo.c:1756
+#, c-format
+msgid "Custom definition for %s"
+msgstr "自訂 %s 的定義"
+
+#: gio/gdrive.c:381
+msgid "drive doesn't implement eject"
+msgstr "裝置無法實作退出功能(eject)"
+
+#: gio/gdrive.c:451
+msgid "drive doesn't implement polling for media"
+msgstr "裝置無法實作媒體的輪詢"
+
+#: gio/gemblem.c:325
+#, c-format
+msgid "Can't handle version %d of GEmblem encoding"
+msgstr "不能處理版本為 %d 的 GEmblem 編碼"
+
+#: gio/gemblem.c:335
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblem encoding"
+msgstr "GEmblem 編碼中記號 (%d) 的數量格式不正確"
+
+#: gio/gemblemedicon.c:296
+#, c-format
+msgid "Can't handle version %d of GEmblemedIcon encoding"
+msgstr "不能處理版本為 %d 的 GEmblemedIcon 編碼"
+
+#: gio/gemblemedicon.c:306
+#, c-format
+msgid "Malformed number of tokens (%d) in GEmblemedIcon encoding"
+msgstr "GEmblemedIcon 編碼中記號 (%d) 的數量格式不正確"
+
+#: gio/gemblemedicon.c:329
+msgid "Expected a GEmblem for GEmblemedIcon"
+msgstr "預期為 GEmblemedIcon 的 GEmblem"
+
+#: gio/gfile.c:827 gio/gfile.c:1057 gio/gfile.c:1192 gio/gfile.c:1428
+#: gio/gfile.c:1482 gio/gfile.c:1539 gio/gfile.c:1622 gio/gfile.c:2712
+#: gio/gfile.c:2766 gio/gfile.c:2897 gio/gfile.c:2937 gio/gfile.c:3264
+#: gio/gfile.c:3666 gio/gfile.c:3750 gio/gfile.c:3833 gio/gfile.c:3913
+#: gio/gfile.c:4243 gio/win32/gwinhttpfile.c:431
+msgid "Operation not supported"
+msgstr "不支援的操作"
+
+#. Translators: This is an error message when trying to find the
+#. * enclosing (user visible) mount of a file, but none exists.
+#. Translators: This is an error message when trying to
+#. * find the enclosing (user visible) mount of a file, but
+#. * none exists.
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#: gio/gfile.c:1313 gio/glocalfile.c:1082 gio/glocalfile.c:1093
+#: gio/glocalfile.c:1106
+msgid "Containing mount does not exist"
+msgstr "包含了不存在的掛載點"
+
+#: gio/gfile.c:1965 gio/glocalfile.c:2162
+msgid "Can't copy over directory"
+msgstr "不能複製整個目錄"
+
+#: gio/gfile.c:2025
+msgid "Can't copy directory over directory"
+msgstr "不能將目錄複製到目錄上"
+
+#: gio/gfile.c:2033 gio/glocalfile.c:2171
+msgid "Target file exists"
+msgstr "目標檔案已存在"
+
+#: gio/gfile.c:2051
+msgid "Can't recursively copy directory"
+msgstr "不能遞廻複製目錄"
+
+#: gio/gfile.c:2346
+msgid "Can't copy special file"
+msgstr "不能複製特殊的檔案"
+
+#: gio/gfile.c:2887
+msgid "Invalid symlink value given"
+msgstr "提供了無效的符號連結值"
+
+#: gio/gfile.c:2980
+msgid "Trash not supported"
+msgstr "不支援回收筒"
+
+#: gio/gfile.c:3029
+#, c-format
+msgid "File names cannot contain '%c'"
+msgstr "檔案名稱不能包含「%c」"
+
+#: gio/gfile.c:5011 gio/gvolume.c:376
+msgid "volume doesn't implement mount"
+msgstr "儲存裝置尚未實作掛載功能"
+
+#: gio/gfile.c:5119
+msgid "No application is registered as handling this file"
+msgstr "沒有應用程式註冊為用以處理這個檔案"
+
+#: gio/gfileenumerator.c:206
+msgid "Enumerator is closed"
+msgstr "檔案列舉器(enumerator)已關閉"
+
+#: gio/gfileenumerator.c:213 gio/gfileenumerator.c:272
+#: gio/gfileenumerator.c:372 gio/gfileenumerator.c:481
+msgid "File enumerator has outstanding operation"
+msgstr "檔案列舉器(enumerator)有異常操作"
+
+#: gio/gfileenumerator.c:362 gio/gfileenumerator.c:471
+msgid "File enumerator is already closed"
+msgstr "檔案列舉器(enumerator)已經關閉"
+
+#: gio/gfileicon.c:145
+msgid "file"
+msgstr "檔案"
+
+#: gio/gfileicon.c:146
+msgid "The file containing the icon"
+msgstr "含有圖示的檔案"
+
+#: gio/gfileicon.c:237
+#, c-format
+msgid "Can't handle version %d of GFileIcon encoding"
+msgstr "不能處理版本為 %d 的 GFileIcon 編碼"
+
+#: gio/gfileicon.c:247
+msgid "Malformed input data for GFileIcon"
+msgstr "給 GFileIcon 的輸入資料格式不良"
+
+#: gio/gfileinputstream.c:157 gio/gfileinputstream.c:424
+#: gio/gfileoutputstream.c:171 gio/gfileoutputstream.c:526
+msgid "Stream doesn't support query_info"
+msgstr "串流不支援 query_info"
+
+#: gio/gfileinputstream.c:339 gio/gfileoutputstream.c:384
+msgid "Seek not supported on stream"
+msgstr "不支援在串流中搜尋"
+
+#: gio/gfileinputstream.c:383
+msgid "Truncate not allowed on input stream"
+msgstr "在輸入串流中不允許截短(truncate)"
+
+#: gio/gfileoutputstream.c:460
+msgid "Truncate not supported on stream"
+msgstr "在串流中不支援截短(truncate)"
+
+#: gio/gicon.c:324
+#, c-format
+msgid "Wrong number of tokens (%d)"
+msgstr "記號數量 (%d) 錯誤"
+
+#: gio/gicon.c:344
+#, c-format
+msgid "No type for class name %s"
+msgstr "類別名稱 %s 沒有類型"
+
+#: gio/gicon.c:354
+#, c-format
+msgid "Type %s does not implement the GIcon interface"
+msgstr "類型 %s 沒有實作 GIcon 介面"
+
+#: gio/gicon.c:365
+#, c-format
+msgid "Type %s is not classed"
+msgstr "類型 %s 尚未歸類"
+
+#: gio/gicon.c:379
+#, c-format
+msgid "Malformed version number: %s"
+msgstr "格式不良的版本號碼:%s"
+
+#: gio/gicon.c:393
+#, c-format
+msgid "Type %s does not implement from_tokens() on the GIcon interface"
+msgstr "類型 %s 沒有實作 GIcon 介面的 from_tokens()"
+
+#: gio/gicon.c:469
+msgid "Can't handle the supplied version the icon encoding"
+msgstr "不能處理提供的圖示編碼版本"
+
+#: gio/ginputstream.c:202
+msgid "Input stream doesn't implement read"
+msgstr "輸入串流尚未實作讀取"
+
+#. Translators: This is an error you get if there is already an
+#. * operation running against this stream when you try to start
+#. * one
+#. Translators: This is an error you get if there is
+#. * already an operation running against this stream when
+#. * you try to start one
+#: gio/ginputstream.c:911 gio/goutputstream.c:1095
+msgid "Stream has outstanding operation"
+msgstr "串流有異常操作"
+
+#: gio/glocaldirectorymonitor.c:274
+msgid "Unable to find default local directory monitor type"
+msgstr "無法找到預設的本地端目錄監視器類型"
+
+#: gio/glocalfile.c:617 gio/win32/gwinhttpfile.c:414
+#, c-format
+msgid "Invalid filename %s"
+msgstr "無效的檔案名稱 %s"
+
+#: gio/glocalfile.c:990
+#, c-format
+msgid "Error getting filesystem info: %s"
+msgstr "取得檔案系統資訊時發生錯誤:%s"
+
+#: gio/glocalfile.c:1126
+msgid "Can't rename root directory"
+msgstr "不能重新命名根目錄"
+
+#: gio/glocalfile.c:1146 gio/glocalfile.c:1172
+#, c-format
+msgid "Error renaming file: %s"
+msgstr "重新命名檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:1155
+msgid "Can't rename file, filename already exist"
+msgstr "不能重新命名檔案,該檔案名稱已存在"
+
+#: gio/glocalfile.c:1168 gio/glocalfile.c:2041 gio/glocalfile.c:2070
+#: gio/glocalfile.c:2224 gio/glocalfileoutputstream.c:520
+#: gio/glocalfileoutputstream.c:565 gio/glocalfileoutputstream.c:1034
+msgid "Invalid filename"
+msgstr "無效的檔案名稱"
+
+#: gio/glocalfile.c:1291
+#, c-format
+msgid "Error opening file: %s"
+msgstr "開啓檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:1301
+msgid "Can't open directory"
+msgstr "不能開啟目錄"
+
+#: gio/glocalfile.c:1361
+#, c-format
+msgid "Error removing file: %s"
+msgstr "移除檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:1725
+#, c-format
+msgid "Error trashing file: %s"
+msgstr "移動檔案至回收筒時發生錯誤:%s"
+
+#: gio/glocalfile.c:1748
+#, c-format
+msgid "Unable to create trash dir %s: %s"
+msgstr "無法建立回收筒目錄 %s:%s"
+
+#: gio/glocalfile.c:1769
+msgid "Unable to find toplevel directory for trash"
+msgstr "無法找到回收筒的頂端層級目錄"
+
+#: gio/glocalfile.c:1848 gio/glocalfile.c:1868
+msgid "Unable to find or create trash directory"
+msgstr "無法找到或建立回收筒目錄"
+
+#: gio/glocalfile.c:1902
+#, c-format
+msgid "Unable to create trashing info file: %s"
+msgstr "無法建立回收筒資訊檔案:%s"
+
+#: gio/glocalfile.c:1931 gio/glocalfile.c:1936 gio/glocalfile.c:2011
+#: gio/glocalfile.c:2018
+#, c-format
+msgid "Unable to trash file: %s"
+msgstr "無法將檔案移至回收筒:%s"
+
+#: gio/glocalfile.c:2045
+#, c-format
+msgid "Error creating directory: %s"
+msgstr "建立目錄發生錯誤:%s"
+
+#: gio/glocalfile.c:2074
+#, c-format
+msgid "Error making symbolic link: %s"
+msgstr "建立符號連結時發生錯誤:%s"
+
+#: gio/glocalfile.c:2134 gio/glocalfile.c:2228
+#, c-format
+msgid "Error moving file: %s"
+msgstr "移動檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:2157
+msgid "Can't move directory over directory"
+msgstr "不能將目錄移動至目錄上"
+
+#: gio/glocalfile.c:2184 gio/glocalfileoutputstream.c:844
+#: gio/glocalfileoutputstream.c:858 gio/glocalfileoutputstream.c:873
+#: gio/glocalfileoutputstream.c:889 gio/glocalfileoutputstream.c:903
+msgid "Backup file creation failed"
+msgstr "建立備份檔案失敗"
+
+#: gio/glocalfile.c:2203
+#, c-format
+msgid "Error removing target file: %s"
+msgstr "移除目標檔案時發生錯誤:%s"
+
+#: gio/glocalfile.c:2217
+msgid "Move between mounts not supported"
+msgstr "不支援在掛載點之間移動"
+
+#: gio/glocalfileinfo.c:719
+msgid "Attribute value must be non-NULL"
+msgstr "屬性數值必須為非-NULL"
+
+#: gio/glocalfileinfo.c:726
+msgid "Invalid attribute type (string expected)"
+msgstr "無效的屬性類型(應為字串值)"
+
+#: gio/glocalfileinfo.c:733
+msgid "Invalid extended attribute name"
+msgstr "無效的延伸屬性名稱"
+
+#: gio/glocalfileinfo.c:773
+#, c-format
+msgid "Error setting extended attribute '%s': %s"
+msgstr "設定延伸屬性「%s」時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1466 gio/glocalfileoutputstream.c:728
+#, c-format
+msgid "Error stating file '%s': %s"
+msgstr "取得檔案「%s」狀態時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1537
+msgid " (invalid encoding)"
+msgstr "(無效的編碼)"
+
+#: gio/glocalfileinfo.c:1705
+#, c-format
+msgid "Error stating file descriptor: %s"
+msgstr "取得檔案描述狀態時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1750
+msgid "Invalid attribute type (uint32 expected)"
+msgstr "無效的屬性類型(應為 uint32 值)"
+
+#: gio/glocalfileinfo.c:1768
+msgid "Invalid attribute type (uint64 expected)"
+msgstr "無效的屬性類型(應為 uint64 值)"
+
+#: gio/glocalfileinfo.c:1787 gio/glocalfileinfo.c:1806
+msgid "Invalid attribute type (byte string expected)"
+msgstr "無效的屬性類型(應為 byte string 值)"
+
+#: gio/glocalfileinfo.c:1832
+#, c-format
+msgid "Error setting permissions: %s"
+msgstr "設定權限時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1883 gio/glocalfileinfo.c:2051
+#, c-format
+msgid "Error setting owner: %s"
+msgstr "設定擁有者時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1906
+msgid "symlink must be non-NULL"
+msgstr "符號連結必須為非-NULL"
+
+#: gio/glocalfileinfo.c:1916 gio/glocalfileinfo.c:1935
+#: gio/glocalfileinfo.c:1946
+#, c-format
+msgid "Error setting symlink: %s"
+msgstr "設定符號連結時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:1925
+msgid "Error setting symlink: file is not a symlink"
+msgstr "設定符號連結時發生錯誤:檔案不是符號連結"
+
+#: gio/glocalfileinfo.c:2074
+msgid "SELinux context must be non-NULL"
+msgstr "SELinux 關聯必須為非-NULL"
+
+#: gio/glocalfileinfo.c:2089
+#, c-format
+msgid "Error setting SELinux context: %s"
+msgstr "設定 SELinux 關聯時發生錯誤:%s"
+
+#: gio/glocalfileinfo.c:2096
+msgid "SELinux is not enabled on this system"
+msgstr "SELinux 在這個系統上並未啟用"
+
+#: gio/glocalfileinfo.c:2157
+#, c-format
+msgid "Setting attribute %s not supported"
+msgstr "不支援設定屬性 %s"
+
+#: gio/glocalfileinputstream.c:160 gio/glocalfileoutputstream.c:618
+#, c-format
+msgid "Error reading from file: %s"
+msgstr "從檔案讀取時發生錯誤:%s"
+
+#: gio/glocalfileinputstream.c:191 gio/glocalfileinputstream.c:203
+#: gio/glocalfileinputstream.c:312 gio/glocalfileoutputstream.c:420
+#: gio/glocalfileoutputstream.c:921
+#, c-format
+msgid "Error seeking in file: %s"
+msgstr "在檔案中搜尋時發生錯誤:%s"
+
+#: gio/glocalfileinputstream.c:233 gio/glocalfileoutputstream.c:223
+#: gio/glocalfileoutputstream.c:318
+#, c-format
+msgid "Error closing file: %s"
+msgstr "關閉檔案時發生錯誤:%s"
+
+#: gio/glocalfilemonitor.c:198
+msgid "Unable to find default local file monitor type"
+msgstr "無法找到預設的本地端檔案監視器類型"
+
+#: gio/glocalfileoutputstream.c:173 gio/glocalfileoutputstream.c:202
+#: gio/glocalfileoutputstream.c:639
+#, c-format
+msgid "Error writing to file: %s"
+msgstr "寫入至檔案時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:250
+#, c-format
+msgid "Error removing old backup link: %s"
+msgstr "移除舊備份連結時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:264 gio/glocalfileoutputstream.c:277
+#, c-format
+msgid "Error creating backup copy: %s"
+msgstr "建立備份複本時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:295
+#, c-format
+msgid "Error renaming temporary file: %s"
+msgstr "重新命名暫存檔案時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:466 gio/glocalfileoutputstream.c:968
+#, c-format
+msgid "Error truncating file: %s"
+msgstr "截短檔案時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:526 gio/glocalfileoutputstream.c:571
+#: gio/glocalfileoutputstream.c:710 gio/glocalfileoutputstream.c:949
+#: gio/glocalfileoutputstream.c:1040
+#, c-format
+msgid "Error opening file '%s': %s"
+msgstr "開啟檔案「%s」時發生錯誤:%s"
+
+#: gio/glocalfileoutputstream.c:741
+msgid "Target file is a directory"
+msgstr "目標檔案是一個目錄"
+
+#: gio/glocalfileoutputstream.c:746
+msgid "Target file is not a regular file"
+msgstr "目標檔案不是正規的檔案"
+
+#: gio/glocalfileoutputstream.c:758
+msgid "The file was externally modified"
+msgstr "該檔案已被外部程式修改過"
+
+#: gio/glocalfileoutputstream.c:937
+#, c-format
+msgid "Error removing old file: %s"
+msgstr "移除舊檔案時發生錯誤:%s"
+
+#: gio/gmemoryinputstream.c:487 gio/gmemoryoutputstream.c:553
+msgid "Invalid GSeekType supplied"
+msgstr "提供了無效的 GSeek 類型"
+
+#: gio/gmemoryinputstream.c:497 gio/gmemoryoutputstream.c:563
+msgid "Invalid seek request"
+msgstr "無效的搜尋要求"
+
+#: gio/gmemoryinputstream.c:521
+msgid "Cannot truncate GMemoryInputStream"
+msgstr "不能截短 GMemoryInputStream"
+
+#: gio/gmemoryoutputstream.c:290
+msgid "Reached maximum data array limit"
+msgstr "已達最大資料陣列上限"
+
+#: gio/gmemoryoutputstream.c:325
+msgid "Memory output stream not resizable"
+msgstr "記憶體輸出串流不能改變大小"
+
+#: gio/gmemoryoutputstream.c:341
+msgid "Failed to resize memory output stream"
+msgstr "改變記憶體輸出串流的大小失敗"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement unmount.
+#: gio/gmount.c:360
+msgid "mount doesn't implement unmount"
+msgstr "掛載點尚未實作卸載"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement eject.
+#: gio/gmount.c:435
+msgid "mount doesn't implement eject"
+msgstr "掛載點尚未實作退出"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement remount.
+#: gio/gmount.c:517
+msgid "mount doesn't implement remount"
+msgstr "掛載點尚未實作重新掛載"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:601
+msgid "mount doesn't implement content type guessing"
+msgstr "掛載點尚未實作內容類型預測"
+
+#. Translators: This is an error
+#. * message for mount objects that
+#. * don't implement content type guessing.
+#: gio/gmount.c:690
+msgid "mount doesn't implement synchronous content type guessing"
+msgstr "掛載點尚未實作同步內容類型預測"
+
+#: gio/goutputstream.c:211 gio/goutputstream.c:412
+msgid "Output stream doesn't implement write"
+msgstr "輸出串流尚未實作寫入"
+
+#: gio/goutputstream.c:372 gio/goutputstream.c:780
+msgid "Source stream is already closed"
+msgstr "來源串流已經關閉"
+
+#: gio/gthemedicon.c:211
+msgid "name"
+msgstr "名稱"
+
+#: gio/gthemedicon.c:212
+msgid "The name of the icon"
+msgstr "圖示的名稱"
+
+#: gio/gthemedicon.c:223
+msgid "names"
+msgstr "名稱"
+
+#: gio/gthemedicon.c:224
+msgid "An array containing the icon names"
+msgstr "包含圖示名稱的陣列"
+
+#: gio/gthemedicon.c:249
+msgid "use default fallbacks"
+msgstr "使用預設的回饋"
+
+#: gio/gthemedicon.c:250
+msgid ""
+"Whether to use default fallbacks found by shortening the name at '-' "
+"characters. Ignores names after the first if multiple names are given."
+msgstr ""
+"是否使用縮短過在「-」字元的名稱找到的預設回饋。如果提供多個名稱則忽略第一個以"
+"外的名稱。"
+
+#: gio/gthemedicon.c:499
+#, c-format
+msgid "Can't handle version %d of GThemedIcon encoding"
+msgstr "不能處理版本為 %d 的 GThemedIcon 編碼"
+
+#: gio/gunixinputstream.c:161 gio/gunixoutputstream.c:147
+msgid "File descriptor"
+msgstr "檔案描述子"
+
+#: gio/gunixinputstream.c:162
+msgid "The file descriptor to read from"
+msgstr "要讀取的檔案描述子"
+
+#: gio/gunixinputstream.c:176 gio/gunixoutputstream.c:162
+msgid "Close file descriptor"
+msgstr "關閉檔案描述子"
+
+#: gio/gunixinputstream.c:177 gio/gunixoutputstream.c:163
+msgid "Whether to close the file descriptor when the stream is closed"
+msgstr "當串流關閉時是否關閉檔案描述子"
+
+#: gio/gunixinputstream.c:358 gio/gunixinputstream.c:378
+#: gio/gunixinputstream.c:456 gio/gunixoutputstream.c:443
+#, c-format
+msgid "Error reading from unix: %s"
+msgstr "從 unix 讀取時發生錯誤:%s"
+
+#: gio/gunixinputstream.c:411 gio/gunixinputstream.c:593
+#: gio/gunixoutputstream.c:398 gio/gunixoutputstream.c:549
+#, c-format
+msgid "Error closing unix: %s"
+msgstr "關閉 unix 時發生錯誤:%s"
+
+#: gio/gunixmounts.c:1846 gio/gunixmounts.c:1883
+msgid "Filesystem root"
+msgstr "根檔案系統"
+
+#: gio/gunixoutputstream.c:148
+msgid "The file descriptor to write to"
+msgstr "要寫入的檔案描述子"
+
+#: gio/gunixoutputstream.c:344 gio/gunixoutputstream.c:365
+#, c-format
+msgid "Error writing to unix: %s"
+msgstr "寫入至 unix 時發生錯誤:%s"
+
+#: gio/gvolume.c:450
+msgid "volume doesn't implement eject"
+msgstr "儲存裝置尚未實作退出(eject)"
+
+#: gio/gwin32appinfo.c:277
+msgid "Can't find application"
+msgstr "找不到應用程式"
+
+#: gio/gwin32appinfo.c:300
+#, c-format
+msgid "Error launching application: %s"
+msgstr "執行應用程式時發生錯誤:%s"
+
+#: gio/gwin32appinfo.c:336
+msgid "URIs not supported"
+msgstr "不支援 URIs"
+
+#: gio/gwin32appinfo.c:358
+msgid "association changes not supported on win32"
+msgstr "關聯變更在 win32 上不支援"
+
+#: gio/gwin32appinfo.c:370
+msgid "Association creation not supported on win32"
+msgstr "關聯建立在 win32 上不支援"
+
+#: tests/gio-ls.c:27
+msgid "do not hide entries"
+msgstr "不要隱藏項目"
+
+#: tests/gio-ls.c:29
+msgid "use a long listing format"
+msgstr "使用長式表列格式"
+
+#: tests/gio-ls.c:37
+msgid "[FILE...]"
+msgstr "[檔案...]"
+
+#~ msgid "%u byte"
+#~ msgid_plural "%u bytes"
+#~ msgstr[0] "%u 位元組"
+
+#~ msgid "Error creating backup link: %s"
+#~ msgstr "建立備份連結時發生錯誤:%s"
diff --git a/sanity_check b/sanity_check
new file mode 100755
index 0000000..5f6e66e
--- /dev/null
+++ b/sanity_check
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+VERSION=$1
+
+if [ ! -f glib-$VERSION.tar.gz ]; then
+	echo "ERROR: glib-$VERSION.tar.gz does not exist..."
+	exit 1
+fi
+
+echo ""
+
+echo "Checking glib-$VERSION.tar.gz..."
+tar xfz glib-$VERSION.tar.gz
+
+
+for file in INSTALL NEWS README 
+do
+	echo -n "$file... "
+	if [ "x`grep $VERSION glib-$VERSION/$file | wc -l | awk -F' ' '{print $1}'`" = "x0" ]; then
+		echo "failed."
+		#exit 1
+	else
+		echo "ok"
+	fi
+done
+
+echo -n "INSTALL..."
+if [ "x`grep $VERSION glib-$VERSION/INSTALL | wc -l | awk -F' ' '{print $1}'`" = "x2" ]; then 
+	echo "ok" 
+else
+	echo "failed."
+	exit 1
+fi
+
+echo ""
+echo "Number of lines in created documentation files:"
+
+wc -l glib-$VERSION/docs/reference/*/html/*.html | grep total 
+
+rm -rf glib-$VERSION
diff --git a/tests/.gitignore b/tests/.gitignore
new file mode 100644
index 0000000..0b37c5e
--- /dev/null
+++ b/tests/.gitignore
@@ -0,0 +1,74 @@
+asyncqueue-test
+atomic-test
+base64-test
+bit-test
+bookmarkfile-test
+checksum-test
+child-test
+closures
+collate.out
+completion-test
+convert-test
+cxx-test
+date-test
+deftype
+dirname-test
+env-test
+errorcheck-mutex-test
+file-test
+file-test-get-contents
+gio-test
+hash-test
+iochannel-test
+iochannel-test-outfile
+list-test
+mainloop-test
+mapchild
+mapping-test
+maptest
+markup-collect
+markup-escape-test
+markup-test
+module-test
+node-test
+objects
+objects2
+onceinit
+patterntest
+properties
+properties2
+qsort-test
+queue-test
+regex-test
+relation-test
+scannerapi
+sequence-test
+shell-test
+signal1
+signal2
+signal3
+slice-color
+slice-concurrent
+slice-test
+slice-threadinit
+slist-test
+spawn-test
+testgdate
+testgdateparser
+testglib
+testingbase64
+testmarshal.c
+testmarshal.h
+thread-test
+threadpool-test
+timeloop
+timeloop-closure
+tree-test
+type-test
+unicode-caseconv
+unicode-collate
+unicode-encoding
+unicode-normalize
+uri-test
+utf8-pointer
+utf8-validate
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..57f1555
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,245 @@
+include $(top_srcdir)/Makefile.decl
+
+SUBDIRS=gobject refcount
+
+if ENABLE_REGEX
+enable_regex = -DENABLE_REGEX
+else
+enable_regex =
+endif
+
+AM_CPPFLAGS = 				\
+	-I$(top_srcdir) 		\
+	-I$(top_srcdir)/glib 		\
+	-I$(top_srcdir)/gmodule 	\
+	$(GLIB_DEBUG_FLAGS) 		\
+	$(enable_regex)
+
+AM_CFLAGS = -g
+
+EFENCE=
+
+libglib = $(top_builddir)/glib/libglib-2.0.la
+libgthread = $(top_builddir)/gthread/libgthread-2.0.la
+libgmodule = $(top_builddir)/gmodule/libgmodule-2.0.la
+libgobject = $(top_builddir)/gobject/libgobject-2.0.la
+
+libadd_libgmodule = $(libgmodule)
+libadd_libglib = $(libglib)
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+
+module_test_exp = module-test.exp
+
+module-test.exp: module-test.o
+	dlltool --output-exp module-test.exp module-test.o
+
+spawn_test_win32_gui = spawn-test-win32-gui
+
+spawn_test_win32_gui_LDFLAGS = -mwindows
+
+endif
+
+EXTRA_DIST +=					\
+	$(test_scripts)				\
+	makefile.msc.in				\
+	casefold.txt				\
+	casemap.txt				\
+	gen-casefold-txt.pl			\
+	gen-casemap-txt.pl			\
+	iochannel-test-infile			\
+	utf8.txt				\
+	timeloop-basic.c		
+
+BUILT_EXTRA_DIST =				\
+	makefile.msc
+
+if HAVE_CXX
+CXX_TEST = cxx-test
+cxx_test_LDADD = $(progs_ldadd)
+cxx_test_SOURCES = cxx-test.C
+else
+CXX_TEST =
+endif
+
+if ENABLE_TIMELOOP
+timeloop = timeloop timeloop-closure
+endif
+noinst_PROGRAMS = $(TEST_PROGS)	\
+	testgdate 		\
+	testgdateparser 	\
+	unicode-normalize 	\
+	unicode-collate 	\
+	$(timeloop) 		\
+	errorcheck-mutex-test
+
+TEST_PROGS              += scannerapi
+scannerapi_SOURCES       = scannerapi.c
+scannerapi_LDADD         = $(progs_ldadd)
+TEST_PROGS		+= testglib
+testglib_SOURCES         = testglib.c
+testglib_LDADD		 = $(libglib)
+TEST_PROGS              += testingbase64
+testingbase64_SOURCES    = testingbase64.c
+testingbase64_LDADD      = $(progs_ldadd)
+
+
+patterntest_LDADD = $(libglib)
+testgdate_LDADD = $(libglib)
+testgdateparser_LDADD = $(libglib)
+unicode_normalize_LDADD = $(libglib)
+errorcheck_mutex_test_LDADD = $(libglib) $(libgthread) $(G_THREAD_LIBS) 
+if ENABLE_TIMELOOP
+timeloop_LDADD = $(libglib)
+timeloop_closure_LDADD = $(libglib) $(libgobject)
+endif
+
+test_programs =					\
+	atomic-test				\
+	base64-test				\
+	bit-test				\
+	$(CXX_TEST)				\
+	checksum-test				\
+	child-test				\
+	completion-test				\
+	convert-test				\
+	date-test				\
+	dirname-test				\
+	file-test				\
+	env-test				\
+	gio-test				\
+	hash-test				\
+	iochannel-test				\
+	list-test				\
+	mainloop-test				\
+	mapping-test				\
+	markup-collect				\
+	markup-escape-test			\
+	module-test				\
+	node-test				\
+	onceinit				\
+	patterntest				\
+	queue-test				\
+	asyncqueue-test				\
+	qsort-test				\
+	relation-test				\
+	sequence-test				\
+	shell-test				\
+	slist-test				\
+	slice-test				\
+	slice-color				\
+	slice-concurrent			\
+	slice-threadinit			\
+	spawn-test				\
+	$(spawn_test_win32_gui)			\
+	thread-test				\
+	threadpool-test				\
+	tree-test				\
+	type-test				\
+	unicode-caseconv			\
+	unicode-encoding			\
+	utf8-validate				\
+	utf8-pointer				\
+	uri-test				\
+	regex-test
+
+test_scripts = run-markup-tests.sh run-collate-tests.sh run-bookmark-test.sh
+
+test_script_support_programs = markup-test unicode-collate bookmarkfile-test
+
+check_PROGRAMS = $(test_programs) $(test_script_support_programs)
+
+TESTS = $(test_programs) $(test_scripts)
+TESTS_ENVIRONMENT = srcdir=$(srcdir) \
+	LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset \
+	MALLOC_CHECK_=2	\
+        MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256))
+
+progs_ldadd = $(EFENCE) $(libglib) $(EFENCE)
+thread_ldadd = $(libgthread) $(G_THREAD_LIBS) $(progs_ldadd)
+module_ldadd = $(libgmodule) $(G_MODULE_LIBS) $(progs_ldadd)
+
+atomic_test_LDADD = $(progs_ldadd)
+base64_test_LDADD = $(progs_ldadd)
+bit_test_LDADD = $(progs_ldadd)
+bookmarkfile_test_LDADD = $(progs_ldadd)
+checksum_test_LDADD = $(progs_ldadd)
+child_test_LDADD = $(thread_ldadd)
+completion_test_LDADD = $(progs_ldadd)
+convert_test_LDADD = $(progs_ldadd)
+date_test_LDADD = $(progs_ldadd)
+dirname_test_LDADD = $(progs_ldadd)
+file_test_LDADD = $(progs_ldadd)
+env_test_LDADD = $(progs_ldadd)
+gio_test_LDADD = $(progs_ldadd)
+hash_test_LDADD = $(progs_ldadd)
+iochannel_test_LDADD = $(progs_ldadd)
+list_test_LDADD = $(progs_ldadd)
+mainloop_test_LDADD = $(thread_ldadd)
+markup_test_LDADD = $(progs_ldadd)
+mapping_test_LDADD = $(progs_ldadd)
+markup_escape_test_LDADD = $(progs_ldadd)
+module_test_LDADD = $(module_ldadd) $(module_test_exp)
+module_test_LDFLAGS = $(G_MODULE_LDFLAGS)
+node_test_LDADD = $(progs_ldadd)
+onceinit_LDADD = $(thread_ldadd)
+queue_test_LDADD = $(progs_ldadd)
+asyncqueue_test_LDADD = $(thread_ldadd)
+qsort_test_LDADD = $(progs_ldadd)
+relation_test_LDADD = $(progs_ldadd)
+sequence_test_LDADD = $(progs_ldadd)
+shell_test_LDADD = $(progs_ldadd)
+slist_test_LDADD = $(progs_ldadd)
+slice_test_SOURCES = slice-test.c memchunks.c
+slice_test_LDADD = $(thread_ldadd)
+slice_color_SOURCES = slice-color.c memchunks.c
+slice_color_LDADD = $(thread_ldadd)
+slice_concurrent_SOURCES = slice-concurrent.c
+slice_concurrent_LDADD = $(thread_ldadd)
+slice_threadinit_SOURCES = slice-threadinit.c
+slice_threadinit_LDADD = $(thread_ldadd)
+spawn_test_LDADD = $(progs_ldadd)
+thread_test_LDADD = $(thread_ldadd)
+threadpool_test_LDADD = $(thread_ldadd)
+tree_test_LDADD = $(progs_ldadd)
+type_test_LDADD = $(progs_ldadd)
+unicode_encoding_LDADD = $(progs_ldadd)
+unicode_caseconv_LDADD = $(progs_ldadd)
+unicode_collate_LDADD = $(progs_ldadd)
+utf8_validate_LDADD = $(progs_ldadd)
+utf8_pointer_LDADD = $(progs_ldadd)
+uri_test_LDADD = $(progs_ldadd)
+regex_test_LDADD = $(progs_ldadd)
+markup_collect_LDADD = $(progs_ldadd)
+
+noinst_LTLIBRARIES = libmoduletestplugin_a.la libmoduletestplugin_b.la
+
+libmoduletestplugin_a_la_SOURCES = libmoduletestplugin_a.c
+libmoduletestplugin_a_la_LDFLAGS = $(G_MODULE_LDFLAGS) -avoid-version -module $(no_undefined) -rpath $(libdir)
+libmoduletestplugin_a_la_LIBADD = $(G_MODULE_LIBS) $(libadd_libgmodule) $(libadd_libglib)
+
+libmoduletestplugin_b_la_SOURCES = libmoduletestplugin_b.c
+libmoduletestplugin_b_la_LDFLAGS = $(G_MODULE_LDFLAGS) -avoid-version -module $(no_undefined) -rpath $(libdir)
+libmoduletestplugin_b_la_LIBADD = $(G_MODULE_LIBS) $(libadd_libgmodule) $(libadd_libglib)
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)'; 				\
+	for f in $$files; do 					\
+	  if test -f $$f; then d=.; else d=$(srcdir); fi; 	\
+	  cp $$d/$$f $(distdir) || exit 1; done
+	mkdir $(distdir)/markups;          			\
+	for f in $(srcdir)/markups/* ; do  			\
+	  cp $$f $(distdir)/markups; done 
+	mkdir $(distdir)/collate;          			\
+	for f in $(srcdir)/collate/* ; do  			\
+          if test -f $$f; then cp $$f $(distdir)/collate; fi; done
+	mkdir $(distdir)/bookmarks;          			\
+	for f in $(srcdir)/bookmarks/* ; do  			\
+	  cp $$f $(distdir)/bookmarks; done 
+
+DISTCLEANFILES =		\
+	iochannel-test-outfile 	\
+	file-test-get-contents 	\
+	maptest 		\
+	mapchild 		\
+	collate.out
diff --git a/tests/asyncqueue-test.c b/tests/asyncqueue-test.c
new file mode 100644
index 0000000..eb38d9e
--- /dev/null
+++ b/tests/asyncqueue-test.c
@@ -0,0 +1,194 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <time.h>
+#include <stdlib.h>
+
+#include <glib.h>
+
+#define DEBUG_MSG(args)
+/* #define DEBUG_MSG(args) g_printerr args ; g_printerr ("\n");  */
+#define PRINT_MSG(args)
+/* #define PRINT_MSG(args) g_print args ; g_print ("\n"); */
+
+#define MAX_THREADS            50
+#define MAX_SORTS              5    /* only applies if
+				       ASYC_QUEUE_DO_SORT is set to 1 */ 
+#define MAX_TIME               20   /* seconds */
+#define MIN_TIME               5    /* seconds */
+
+#define SORT_QUEUE_AFTER       1
+#define SORT_QUEUE_ON_PUSH     1    /* if this is done, the
+				       SORT_QUEUE_AFTER is ignored */
+#define QUIT_WHEN_DONE         1
+
+
+#if SORT_QUEUE_ON_PUSH == 1
+#  undef SORT_QUEUE_AFTER
+#  define SORT_QUEUE_AFTER     0
+#endif
+
+
+static GMainLoop   *main_loop = NULL;
+static GThreadPool *thread_pool = NULL;
+static GAsyncQueue *async_queue = NULL;
+
+
+static gint
+sort_compare (gconstpointer p1, gconstpointer p2, gpointer user_data)
+{
+  gint32 id1;
+  gint32 id2;
+
+  id1 = GPOINTER_TO_INT (p1);
+  id2 = GPOINTER_TO_INT (p2);
+
+  DEBUG_MSG (("comparing #1:%d and #2:%d, returning %d", 
+	     id1, id2, (id1 > id2 ? +1 : id1 == id2 ? 0 : -1)));
+
+  return (id1 > id2 ? +1 : id1 == id2 ? 0 : -1);
+}
+
+static gboolean
+sort_queue (gpointer user_data)
+{
+  static gint     sorts = 0;
+  static gpointer last_p = NULL;
+  gpointer        p;
+  gboolean        can_quit = FALSE;
+  gint            sort_multiplier;
+  gint            len;
+  gint            i;
+
+  sort_multiplier = GPOINTER_TO_INT (user_data);
+
+  if (SORT_QUEUE_AFTER) {
+    PRINT_MSG (("sorting async queue...")); 
+    g_async_queue_sort (async_queue, sort_compare, NULL);
+
+    sorts++;
+
+    if (sorts >= sort_multiplier) {
+      can_quit = TRUE;
+    }
+    
+    g_async_queue_sort (async_queue, sort_compare, NULL);
+    len = g_async_queue_length (async_queue);
+
+    PRINT_MSG (("sorted queue (for %d/%d times, size:%d)...", sorts, MAX_SORTS, len)); 
+  } else {
+    can_quit = TRUE;
+    len = g_async_queue_length (async_queue);
+    DEBUG_MSG (("printing queue (size:%d)...", len)); 
+  }
+
+  for (i = 0, last_p = NULL; i < len; i++) {
+    p = g_async_queue_pop (async_queue);
+    DEBUG_MSG (("item %d ---> %d", i, GPOINTER_TO_INT (p))); 
+
+    if (last_p) {
+      g_assert (GPOINTER_TO_INT (last_p) <= GPOINTER_TO_INT (p));
+    }
+
+    last_p = p;
+  }
+  
+  if (can_quit && QUIT_WHEN_DONE) {
+    g_main_loop_quit (main_loop);
+  }
+
+  return !can_quit;
+}
+
+static void
+enter_thread (gpointer data, gpointer user_data)
+{
+  gint   len;
+  gint   id;
+  gulong ms;
+
+  id = GPOINTER_TO_INT (data);
+  
+  ms = g_random_int_range (MIN_TIME * 1000, MAX_TIME * 1000);
+  DEBUG_MSG (("entered thread with id:%d, adding to queue in:%ld ms", id, ms));
+
+  g_usleep (ms * 1000);
+
+  if (SORT_QUEUE_ON_PUSH) {
+    g_async_queue_push_sorted (async_queue, GINT_TO_POINTER (id), sort_compare, NULL);
+  } else {
+    g_async_queue_push (async_queue, GINT_TO_POINTER (id));
+  }
+
+  len = g_async_queue_length (async_queue);
+
+  DEBUG_MSG (("thread id:%d added to async queue (size:%d)", 
+	     id, len));
+}
+
+int 
+main (int argc, char *argv[])
+{
+#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
+  gint   i;
+  gint   max_threads = MAX_THREADS;
+  gint   max_unused_threads = MAX_THREADS;
+  gint   sort_multiplier = MAX_SORTS;
+  gint   sort_interval;
+  gchar *msg;
+
+  g_thread_init (NULL);
+
+  PRINT_MSG (("creating async queue..."));
+  async_queue = g_async_queue_new ();
+
+  g_return_val_if_fail (async_queue != NULL, EXIT_FAILURE);
+
+  PRINT_MSG (("creating thread pool with max threads:%d, max unused threads:%d...",
+	     max_threads, max_unused_threads));
+  thread_pool = g_thread_pool_new (enter_thread,
+				   async_queue,
+				   max_threads,
+				   FALSE,
+				   NULL);
+
+  g_return_val_if_fail (thread_pool != NULL, EXIT_FAILURE);
+
+  g_thread_pool_set_max_unused_threads (max_unused_threads);
+
+  PRINT_MSG (("creating threads..."));
+  for (i = 1; i <= max_threads; i++) {
+    GError *error = NULL;
+  
+    g_thread_pool_push (thread_pool, GINT_TO_POINTER (i), &error);
+    
+    g_assert_no_error (error);
+  }
+
+  if (!SORT_QUEUE_AFTER) {
+    sort_multiplier = 1;
+  }
+  
+  sort_interval = ((MAX_TIME / sort_multiplier) + 2)  * 1000;
+  g_timeout_add (sort_interval, sort_queue, GINT_TO_POINTER (sort_multiplier));
+
+  if (SORT_QUEUE_ON_PUSH) {
+    msg = "sorting when pushing into the queue, checking queue is sorted";
+  } else {
+    msg = "sorting";
+  }
+
+  PRINT_MSG (("%s %d %s %d ms",
+	      msg,
+	      sort_multiplier, 
+	      sort_multiplier == 1 ? "time in" : "times, once every",
+	      sort_interval));
+
+  DEBUG_MSG (("entering main event loop"));
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_main_loop_run (main_loop);
+#endif
+  
+  return EXIT_SUCCESS;
+}
diff --git a/tests/atomic-test.c b/tests/atomic-test.c
new file mode 100644
index 0000000..c2a67e4
--- /dev/null
+++ b/tests/atomic-test.c
@@ -0,0 +1,63 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+
+/* Obviously we can't test that the operations are atomic, but we can
+ * at least test, that they do, what they ought to do */
+
+int 
+main (int   argc,
+      char *argv[])
+{
+  gint i;
+  gint atomic = -5;
+  gpointer atomic_pointer = NULL;
+  gpointer biggest_pointer = (gpointer)((gsize)atomic_pointer - 1);
+
+  for (i = 0; i < 15; i++)
+    g_atomic_int_inc (&atomic);
+  g_assert (atomic == 10);
+  for (i = 0; i < 9; i++)
+    g_assert (!g_atomic_int_dec_and_test (&atomic));
+  g_assert (g_atomic_int_dec_and_test (&atomic));
+  g_assert (atomic == 0);
+
+  g_assert (g_atomic_int_exchange_and_add (&atomic, 5) == 0);
+  g_assert (atomic == 5);
+
+  g_assert (g_atomic_int_exchange_and_add (&atomic, -10) == 5);
+  g_assert (atomic == -5);
+
+  g_atomic_int_add (&atomic, 20);
+  g_assert (atomic == 15);
+
+  g_atomic_int_add (&atomic, -35);
+  g_assert (atomic == -20);
+
+  g_assert (atomic == g_atomic_int_get (&atomic));
+
+  g_assert (g_atomic_int_compare_and_exchange (&atomic, -20, 20));
+  g_assert (atomic == 20);
+  
+  g_assert (!g_atomic_int_compare_and_exchange (&atomic, 42, 12));
+  g_assert (atomic == 20);
+  
+  g_assert (g_atomic_int_compare_and_exchange (&atomic, 20, G_MAXINT));
+  g_assert (atomic == G_MAXINT);
+
+  g_assert (g_atomic_int_compare_and_exchange (&atomic, G_MAXINT, G_MININT));
+  g_assert (atomic == G_MININT);
+
+  g_assert (g_atomic_pointer_compare_and_exchange (&atomic_pointer, 
+						   NULL, biggest_pointer));
+  g_assert (atomic_pointer == biggest_pointer);
+
+  g_assert (atomic_pointer == g_atomic_pointer_get (&atomic_pointer));
+
+  g_assert (g_atomic_pointer_compare_and_exchange (&atomic_pointer, 
+						   biggest_pointer, NULL));
+  g_assert (atomic_pointer == NULL);
+  
+  return 0;
+}
diff --git a/tests/base64-test.c b/tests/base64-test.c
new file mode 100644
index 0000000..a021435
--- /dev/null
+++ b/tests/base64-test.c
@@ -0,0 +1,138 @@
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+
+#define DATA_SIZE 1024
+#define BLOCK_SIZE 32
+#define NUM_BLOCKS 32
+static guchar data[DATA_SIZE];
+
+static void
+test_incremental (gboolean line_break, 
+		  gint     length)
+{
+  char *p;
+  gsize len, decoded_len, max, input_len, block_size;
+  int state, save;
+  guint decoder_save;
+  char *text;
+  guchar *data2;
+
+  data2 = g_malloc (length);
+  text = g_malloc (length * 4);
+
+  len = 0;
+  state = 0;
+  save = 0;
+  input_len = 0;
+  while (input_len < length)
+    {
+      block_size = MIN (BLOCK_SIZE, length - input_len);
+      len += g_base64_encode_step (data + input_len, block_size,
+				   line_break, text + len, &state, &save);
+      input_len += block_size;
+    }
+  len += g_base64_encode_close (line_break, text + len, &state, &save);
+
+  if (line_break)
+    max = length * 4 / 3 + length * 4 / (3 * 72) + 7;
+  else
+    max = length * 4 / 3 + 6;
+  if (len > max)
+    {
+      g_print ("Too long encoded length: got %d, expected max %d\n",
+	       len, max);
+      exit (1);
+    }
+
+  decoded_len = 0;
+  state = 0;
+  decoder_save = 0;
+  p = text;
+  while (len > 0)
+    {
+      int chunk_len = MIN (BLOCK_SIZE, len);
+      decoded_len += g_base64_decode_step (p, 
+					   chunk_len, 
+					   data2 + decoded_len,
+					   &state, &decoder_save);
+      p += chunk_len;
+      len -= chunk_len;
+    }
+ 
+  if (decoded_len != length)
+    {
+      g_print ("Wrong decoded length: got %d, expected %d\n",
+	       decoded_len, length);
+      exit (1);
+    }
+
+  if (memcmp (data, data2, length) != 0)
+    {
+      g_print ("Wrong decoded base64 data\n");
+      exit (1);
+    }
+
+  g_free (text);
+  g_free (data2);
+}
+
+static void
+test_full (gint length)
+{
+  char *text;
+  guchar *data2;
+  gsize len;
+
+  text = g_base64_encode (data, length);
+  data2 = g_base64_decode (text, &len);
+  g_free (text);
+
+  if (len != length)
+    {
+      g_print ("Wrong decoded length: got %d, expected %d\n",
+	       len, length);
+      exit (1);
+    }
+
+  if (memcmp (data, data2, length) != 0)
+    {
+      g_print ("Wrong decoded base64 data\n");
+      exit (1);
+    }
+
+  g_free (data2);
+}
+
+int
+main (int argc, char *argv[])
+{
+  int i;
+  for (i = 0; i < DATA_SIZE; i++)
+    data[i] = (guchar)i;
+
+  test_full (DATA_SIZE);
+  test_full (1);
+  test_full (2);
+  test_full (3);
+
+  test_incremental (FALSE, DATA_SIZE);
+  test_incremental (TRUE, DATA_SIZE);
+
+  test_incremental (FALSE, DATA_SIZE - 1);
+  test_incremental (TRUE, DATA_SIZE - 1);
+
+  test_incremental (FALSE, DATA_SIZE - 2);
+  test_incremental (TRUE, DATA_SIZE - 2);
+
+  test_incremental (FALSE, 1);
+  test_incremental (FALSE, 2);
+  test_incremental (FALSE, 3);
+
+  return 0;
+}
diff --git a/tests/bit-test.c b/tests/bit-test.c
new file mode 100644
index 0000000..230c852
--- /dev/null
+++ b/tests/bit-test.c
@@ -0,0 +1,145 @@
+#include <glib.h>
+
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+# define TEST_BUILTINS 1
+#else
+# define TEST_BUILTINS 0
+#endif
+
+#if TEST_BUILTINS
+static gint
+builtin_bit_nth_lsf1 (gulong mask, gint nth_bit)
+{
+  if (nth_bit >= 0)
+    {
+      if (G_LIKELY (nth_bit < GLIB_SIZEOF_LONG * 8 - 1))
+	mask &= -(1UL<<(nth_bit+1));
+      else
+	mask = 0;
+    }
+  return __builtin_ffsl(mask) - 1;
+}
+
+static gint
+builtin_bit_nth_lsf2 (gulong mask, gint nth_bit)
+{
+  if (nth_bit >= 0)
+    {
+      if (G_LIKELY (nth_bit < GLIB_SIZEOF_LONG * 8 - 1))
+	mask &= -(1UL<<(nth_bit+1));
+      else
+	mask = 0;
+    }
+  return mask ? __builtin_ctzl(mask) : -1;
+}
+
+static gint
+builtin_bit_nth_msf (gulong mask, gint nth_bit)
+{
+  if (nth_bit >= 0 && nth_bit < GLIB_SIZEOF_LONG * 8)
+    mask &= (1UL<<nth_bit)-1;
+  return mask ? GLIB_SIZEOF_LONG * 8 - 1 - __builtin_clzl(mask) : -1;
+}
+
+
+static guint
+builtin_bit_storage (gulong number)
+{
+  return number ? GLIB_SIZEOF_LONG * 8 - __builtin_clzl(number) : 1;
+}
+#endif
+
+
+static gint
+naive_bit_nth_lsf (gulong mask, gint   nth_bit)
+{
+  if (G_UNLIKELY (nth_bit < -1))
+    nth_bit = -1;
+  while (nth_bit < ((GLIB_SIZEOF_LONG * 8) - 1))
+    {
+      nth_bit++;
+      if (mask & (1UL << nth_bit))
+	return nth_bit;
+    }
+  return -1;
+}
+
+static gint
+naive_bit_nth_msf (gulong mask, gint   nth_bit)
+{
+  if (nth_bit < 0 || G_UNLIKELY (nth_bit > GLIB_SIZEOF_LONG * 8))
+    nth_bit = GLIB_SIZEOF_LONG * 8;
+  while (nth_bit > 0)
+    {
+      nth_bit--;
+      if (mask & (1UL << nth_bit))
+	return nth_bit;
+    }
+  return -1;
+}
+
+static guint
+naive_bit_storage (gulong number)
+{
+  register guint n_bits = 0;
+  
+  do
+    {
+      n_bits++;
+      number >>= 1;
+    }
+  while (number);
+  return n_bits;
+}
+
+
+
+#define TEST(f1, f2, i) \
+	if (f1 (i) != f2 (i)) { \
+		g_error (G_STRINGIFY (f1) " (%lu) = %d; " \
+			 G_STRINGIFY (f2) " (%lu) = %d; ", \
+			 i, f1 (i), \
+			 i, f2 (i)); \
+		return 1; \
+	}
+#define TEST2(f1, f2, i, n) \
+	if (f1 (i, n) != f2 (i, n)) { \
+		g_error (G_STRINGIFY (f1) " (%lu, %d) = %d; " \
+			 G_STRINGIFY (f2) " (%lu, %d) = %d; ", \
+			 i, n, f1 (i, n), \
+			 i, n, f2 (i, n)); \
+		return 1; \
+	}
+
+int
+main (void)
+{
+  gulong i;
+  gint nth_bit;
+
+  /* we loop like this: 0, -1, 1, -2, 2, -3, 3, ... */
+  for (i = 0; (glong)i < 1500 ; i = -(i+((glong)i>=0))) {
+
+#if TEST_BUILTINS
+    TEST (naive_bit_storage, builtin_bit_storage, i);
+#endif
+    TEST (naive_bit_storage, g_bit_storage, i);
+
+    for (nth_bit = -3; nth_bit <= 2 + GLIB_SIZEOF_LONG * 8; nth_bit++) {
+
+#if TEST_BUILTINS
+      TEST2 (naive_bit_nth_lsf, builtin_bit_nth_lsf1, i, nth_bit);
+      TEST2 (naive_bit_nth_lsf, builtin_bit_nth_lsf2, i, nth_bit);
+#endif
+      TEST2 (naive_bit_nth_lsf, g_bit_nth_lsf, i, nth_bit);
+
+#if TEST_BUILTINS
+      TEST2 (naive_bit_nth_msf, builtin_bit_nth_msf, i, nth_bit);
+#endif
+      TEST2 (naive_bit_nth_msf, g_bit_nth_msf, i, nth_bit);
+
+    }
+  }
+
+  return 0;
+}
diff --git a/tests/bookmarkfile-test.c b/tests/bookmarkfile-test.c
new file mode 100644
index 0000000..40e9a05
--- /dev/null
+++ b/tests/bookmarkfile-test.c
@@ -0,0 +1,188 @@
+#undef G_DISABLE_ASSERT
+
+#include <glib.h>
+#include <time.h>
+#include <locale.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define TEST_URI_0 	"file:///abc/defgh/ijklmnopqrstuvwxyz"
+#define TEST_URI_1 	"file:///test/uri/1"
+#define TEST_URI_2 	"file:///test/uri/2"
+
+#define TEST_MIME 	"text/plain"
+
+#define TEST_APP_NAME 	"bookmarkfile-test"
+#define TEST_APP_EXEC 	"bookmarkfile-test %f"
+
+static gboolean
+test_load (GBookmarkFile *bookmark,
+           const gchar   *filename)
+{
+  GError *error = NULL;
+  gboolean res;
+  
+  res = g_bookmark_file_load_from_file (bookmark, filename, &error);
+  if (error)
+    {
+      g_print ("Load error: %s\n", error->message);
+      g_error_free (error);
+    }
+
+  return res;
+}
+
+static gboolean
+test_query (GBookmarkFile *bookmark)
+{
+  gint size;
+  gchar **uris;
+  gsize uris_len, i;
+  gboolean res = TRUE;
+
+  size = g_bookmark_file_get_size (bookmark);
+  uris = g_bookmark_file_get_uris (bookmark, &uris_len);
+ 
+  if (uris_len != size)
+    {
+      g_print ("URI/size mismatch: URI count is %d (should be %d)\n", uris_len, size);
+
+      res = FALSE;
+    }
+
+  for (i = 0; i < uris_len; i++)
+    if (!g_bookmark_file_has_item (bookmark, uris[i]))
+      {
+        g_print ("URI/bookmark mismatch: bookmark for '%s' does not exist\n", uris[i]);
+
+	res = FALSE;
+      }
+
+  g_strfreev (uris);
+  
+  return res;
+}
+
+static gboolean
+test_modify (GBookmarkFile *bookmark)
+{
+  gchar *text;
+  guint count;
+  time_t stamp;
+  GError *error = NULL;
+  
+  g_print ("\t=> check global title/description...");
+  g_bookmark_file_set_title (bookmark, NULL, "a file");
+  g_bookmark_file_set_description (bookmark, NULL, "a bookmark file");
+  
+  text = g_bookmark_file_get_title (bookmark, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpstr (text, ==, "a file");
+  g_free (text);
+
+  text = g_bookmark_file_get_description (bookmark, NULL, &error);
+  g_assert_no_error (error);
+  g_assert_cmpstr (text, ==, "a bookmark file");
+  g_free (text);
+  g_print ("ok\n");
+
+  g_print ("\t=> check bookmark title/description...");
+  g_bookmark_file_set_title (bookmark, TEST_URI_0, "a title");
+  g_bookmark_file_set_description (bookmark, TEST_URI_0, "a description");
+
+  text = g_bookmark_file_get_title (bookmark, TEST_URI_0, &error);
+  g_assert_no_error (error);
+  g_assert_cmpstr (text, ==, "a title");
+  g_free (text);
+  g_print ("ok\n");
+
+  g_print ("\t=> check non existing bookmark...");
+  g_bookmark_file_get_description (bookmark, TEST_URI_1, &error);
+  g_assert_error (error, G_BOOKMARK_FILE_ERROR, G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND);
+  g_clear_error (&error);
+  g_print ("ok\n");
+  
+  g_print ("\t=> check application...");
+  g_bookmark_file_set_mime_type (bookmark, TEST_URI_0, TEST_MIME);
+  g_bookmark_file_add_application (bookmark, TEST_URI_0,
+				   TEST_APP_NAME,
+				   TEST_APP_EXEC);
+  g_assert (g_bookmark_file_has_application (bookmark, TEST_URI_0, TEST_APP_NAME, NULL) == TRUE);
+  g_bookmark_file_get_app_info (bookmark, TEST_URI_0, TEST_APP_NAME,
+		  		&text,
+				&count,
+				&stamp,
+				&error);
+  g_assert_no_error (error);
+  g_assert (count == 1);
+  g_assert (stamp == g_bookmark_file_get_modified (bookmark, TEST_URI_0, NULL));
+  g_free (text);
+  
+  g_bookmark_file_get_app_info (bookmark, TEST_URI_0, "fail",
+		  		&text,
+				&count,
+				&stamp,
+				&error);
+  g_assert_error (error, G_BOOKMARK_FILE_ERROR, G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED);
+  g_clear_error (&error);
+  g_print ("ok\n"); 
+
+  g_print ("\t=> check groups...");
+  g_bookmark_file_add_group (bookmark, TEST_URI_1, "Test");
+  g_assert (g_bookmark_file_has_group (bookmark, TEST_URI_1, "Test", NULL) == TRUE);
+  g_assert (g_bookmark_file_has_group (bookmark, TEST_URI_1, "Fail", NULL) == FALSE);
+  g_print ("ok\n");
+
+  g_print ("\t=> check remove...");
+  g_assert (g_bookmark_file_remove_item (bookmark, TEST_URI_1, &error) == TRUE);
+  g_assert_no_error (error);
+  g_assert (g_bookmark_file_remove_item (bookmark, TEST_URI_1, &error) == FALSE);
+  g_assert_error (error, G_BOOKMARK_FILE_ERROR, G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND);
+  g_clear_error (&error);
+  g_print ("ok\n");
+  
+  return TRUE;
+}
+
+static gint
+test_file (const gchar *filename)
+{
+  GBookmarkFile *bookmark_file;
+  gboolean success;
+
+  g_return_val_if_fail (filename != NULL, 1);
+
+  g_print ("checking GBookmarkFile...\n");
+
+  bookmark_file = g_bookmark_file_new ();
+  g_assert (bookmark_file != NULL);
+
+  success = test_load (bookmark_file, filename);
+  
+  if (success)
+    {
+      success = test_query (bookmark_file);
+      success = test_modify (bookmark_file);
+    }
+
+  g_bookmark_file_free (bookmark_file);
+
+  g_print ("ok\n");
+
+  return (success == TRUE ? 0 : 1);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  if (argc > 1)
+    return test_file (argv[1]);
+  else
+    {
+      fprintf (stderr, "Usage: bookmarkfile-test <bookmarkfile>\n");
+
+      return 1;
+    }
+}
diff --git a/tests/bookmarks/fail-01.xbel b/tests/bookmarks/fail-01.xbel
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/bookmarks/fail-01.xbel
diff --git a/tests/bookmarks/fail-02.xbel b/tests/bookmarks/fail-02.xbel
new file mode 100644
index 0000000..39f0094
--- /dev/null
+++ b/tests/bookmarks/fail-02.xbel
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<fail/> 
diff --git a/tests/bookmarks/fail-03.xbel b/tests/bookmarks/fail-03.xbel
new file mode 100644
index 0000000..563dd54
--- /dev/null
+++ b/tests/bookmarks/fail-03.xbel
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark>
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-04.xbel b/tests/bookmarks/fail-04.xbel
new file mode 100644
index 0000000..86f1e90
--- /dev/null
+++ b/tests/bookmarks/fail-04.xbel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" fail="attr">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-05.xbel b/tests/bookmarks/fail-05.xbel
new file mode 100644
index 0000000..355f172
--- /dev/null
+++ b/tests/bookmarks/fail-05.xbel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file & containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-06.xbel b/tests/bookmarks/fail-06.xbel
new file mode 100644
index 0000000..d1e288b
--- /dev/null
+++ b/tests/bookmarks/fail-06.xbel
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-07.xbel b/tests/bookmarks/fail-07.xbel
new file mode 100644
index 0000000..8e24c64
--- /dev/null
+++ b/tests/bookmarks/fail-07.xbel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata>
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-08.xbel b/tests/bookmarks/fail-08.xbel
new file mode 100644
index 0000000..d26f752
--- /dev/null
+++ b/tests/bookmarks/fail-08.xbel
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <bookmark:fail/>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-09.xbel b/tests/bookmarks/fail-09.xbel
new file mode 100644
index 0000000..5e1ce64
--- /dev/null
+++ b/tests/bookmarks/fail-09.xbel
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <bookmark:applications>
+          <bookmark:application/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-10.xbel b/tests/bookmarks/fail-10.xbel
new file mode 100644
index 0000000..f4eef12
--- /dev/null
+++ b/tests/bookmarks/fail-10.xbel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-11.xbel b/tests/bookmarks/fail-11.xbel
new file mode 100644
index 0000000..520693b
--- /dev/null
+++ b/tests/bookmarks/fail-11.xbel
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <title>&</title>
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-12.xbel b/tests/bookmarks/fail-12.xbel
new file mode 100644
index 0000000..9ba280e
--- /dev/null
+++ b/tests/bookmarks/fail-12.xbel
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+	<bookmark:icon type="image/png"/>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-13.xbel b/tests/bookmarks/fail-13.xbel
new file mode 100644
index 0000000..cdd1aff
--- /dev/null
+++ b/tests/bookmarks/fail-13.xbel
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+	<fail/>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-14.xbel b/tests/bookmarks/fail-14.xbel
new file mode 100644
index 0000000..2161632
--- /dev/null
+++ b/tests/bookmarks/fail-14.xbel
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+	<bookmark:groups>
+	  <fail>Test</fail>
+	</bookmark:groups>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-15.xbel b/tests/bookmarks/fail-15.xbel
new file mode 100644
index 0000000..9a2ac12
--- /dev/null
+++ b/tests/bookmarks/fail-15.xbel
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+	<bookmark:groups>
+	  <bookmark:group>Test</bookmark:group>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-16.xbel b/tests/bookmarks/fail-16.xbel
new file mode 100644
index 0000000..18f55b3
--- /dev/null
+++ b/tests/bookmarks/fail-16.xbel
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+	<bookmark:groups>
+	  <bookmark:group>Test</group>
+	</bookmark:groups>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/fail-17.xbel b/tests/bookmarks/fail-17.xbel
new file mode 100644
index 0000000..9ad97bd
--- /dev/null
+++ b/tests/bookmarks/fail-17.xbel
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+      <invalid/>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/valid-01.xbel b/tests/bookmarks/valid-01.xbel
new file mode 100644
index 0000000..6ab98ba
--- /dev/null
+++ b/tests/bookmarks/valid-01.xbel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/valid-02.xbel b/tests/bookmarks/valid-02.xbel
new file mode 100644
index 0000000..85a84a0
--- /dev/null
+++ b/tests/bookmarks/valid-02.xbel
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xbel version="1.0">
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime-type type="application/postscript"/>
+        <applications>
+          <application name="populate-recent" exec="populate-recent --info %u" timestamp="1128121528" count="1"/>
+        </applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/bookmarks/valid-03.xbel b/tests/bookmarks/valid-03.xbel
new file mode 100644
index 0000000..32f431d
--- /dev/null
+++ b/tests/bookmarks/valid-03.xbel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE xbel
+  PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"
+         "http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">
+<xbel version="1.0"
+      xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks"
+      xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info"
+>
+  <title>Singleton</title>
+  <desc>A file containing a single bookmark element</desc>
+  <bookmark href="file:///home/zefram/Documents/milan-stuttgart.ps" added="20050930T23:05:28Z" modified="20050930T23:05:28Z" visited="20050930T23:05:28Z">
+    <info>
+      <metadata owner="http://freedesktop.org">
+        <mime:mime-type type="application/postscript"/>
+        <bookmark:applications>
+          <bookmark:application name="populate-recent" exec="populate-recent --info %u" modified="2005-09-30T23:05:28Z" count="1"/>
+        </bookmark:applications>
+      </metadata>
+    </info>
+  </bookmark>
+</xbel>
diff --git a/tests/casefold.txt b/tests/casefold.txt
new file mode 100644
index 0000000..a5add1e
--- /dev/null
+++ b/tests/casefold.txt
@@ -0,0 +1,1120 @@
+# Test cases generated from Unicode 5.1 data
+# by gen-casefold-test.pl. Do not edit.
+#
+# Some special hand crafted tests
+#
+AaBbCc@@	aabbcc@@
+#
+# Now the automatic tests
+#
+A	a
+B	b
+C	c
+D	d
+E	e
+F	f
+G	g
+H	h
+I	i
+J	j
+K	k
+L	l
+M	m
+N	n
+O	o
+P	p
+Q	q
+R	r
+S	s
+T	t
+U	u
+V	v
+W	w
+X	x
+Y	y
+Z	z
+µ	μ
+À	à
+Á	á
+Â	â
+Ã	ã
+Ä	ä
+Å	å
+Æ	æ
+Ç	ç
+È	è
+É	é
+Ê	ê
+Ë	ë
+Ì	ì
+Í	í
+Î	î
+Ï	ï
+Ð	ð
+Ñ	ñ
+Ò	ò
+Ó	ó
+Ô	ô
+Õ	õ
+Ö	ö
+Ø	ø
+Ù	ù
+Ú	ú
+Û	û
+Ü	ü
+Ý	ý
+Þ	þ
+ß	ss
+Ā	ā
+Ă	ă
+Ą	ą
+Ć	ć
+Ĉ	ĉ
+Ċ	ċ
+Č	č
+Ď	ď
+Đ	đ
+Ē	ē
+Ĕ	ĕ
+Ė	ė
+Ę	ę
+Ě	ě
+Ĝ	ĝ
+Ğ	ğ
+Ġ	ġ
+Ģ	ģ
+Ĥ	ĥ
+Ħ	ħ
+Ĩ	ĩ
+Ī	ī
+Ĭ	ĭ
+Į	į
+İ	i̇
+IJ	ij
+Ĵ	ĵ
+Ķ	ķ
+Ĺ	ĺ
+Ļ	ļ
+Ľ	ľ
+Ŀ	ŀ
+Ł	ł
+Ń	ń
+Ņ	ņ
+Ň	ň
+ʼn	ʼn
+Ŋ	ŋ
+Ō	ō
+Ŏ	ŏ
+Ő	ő
+Œ	œ
+Ŕ	ŕ
+Ŗ	ŗ
+Ř	ř
+Ś	ś
+Ŝ	ŝ
+Ş	ş
+Š	š
+Ţ	ţ
+Ť	ť
+Ŧ	ŧ
+Ũ	ũ
+Ū	ū
+Ŭ	ŭ
+Ů	ů
+Ű	ű
+Ų	ų
+Ŵ	ŵ
+Ŷ	ŷ
+Ÿ	ÿ
+Ź	ź
+Ż	ż
+Ž	ž
+ſ	s
+Ɓ	ɓ
+Ƃ	ƃ
+Ƅ	ƅ
+Ɔ	ɔ
+Ƈ	ƈ
+Ɖ	ɖ
+Ɗ	ɗ
+Ƌ	ƌ
+Ǝ	ǝ
+Ə	ə
+Ɛ	ɛ
+Ƒ	ƒ
+Ɠ	ɠ
+Ɣ	ɣ
+Ɩ	ɩ
+Ɨ	ɨ
+Ƙ	ƙ
+Ɯ	ɯ
+Ɲ	ɲ
+Ɵ	ɵ
+Ơ	ơ
+Ƣ	ƣ
+Ƥ	ƥ
+Ʀ	ʀ
+Ƨ	ƨ
+Ʃ	ʃ
+Ƭ	ƭ
+Ʈ	ʈ
+Ư	ư
+Ʊ	ʊ
+Ʋ	ʋ
+Ƴ	ƴ
+Ƶ	ƶ
+Ʒ	ʒ
+Ƹ	ƹ
+Ƽ	ƽ
+DŽ	dž
+Dž	dž
+LJ	lj
+Lj	lj
+NJ	nj
+Nj	nj
+Ǎ	ǎ
+Ǐ	ǐ
+Ǒ	ǒ
+Ǔ	ǔ
+Ǖ	ǖ
+Ǘ	ǘ
+Ǚ	ǚ
+Ǜ	ǜ
+Ǟ	ǟ
+Ǡ	ǡ
+Ǣ	ǣ
+Ǥ	ǥ
+Ǧ	ǧ
+Ǩ	ǩ
+Ǫ	ǫ
+Ǭ	ǭ
+Ǯ	ǯ
+ǰ	ǰ
+DZ	dz
+Dz	dz
+Ǵ	ǵ
+Ƕ	ƕ
+Ƿ	ƿ
+Ǹ	ǹ
+Ǻ	ǻ
+Ǽ	ǽ
+Ǿ	ǿ
+Ȁ	ȁ
+Ȃ	ȃ
+Ȅ	ȅ
+Ȇ	ȇ
+Ȉ	ȉ
+Ȋ	ȋ
+Ȍ	ȍ
+Ȏ	ȏ
+Ȑ	ȑ
+Ȓ	ȓ
+Ȕ	ȕ
+Ȗ	ȗ
+Ș	ș
+Ț	ț
+Ȝ	ȝ
+Ȟ	ȟ
+Ƞ	ƞ
+Ȣ	ȣ
+Ȥ	ȥ
+Ȧ	ȧ
+Ȩ	ȩ
+Ȫ	ȫ
+Ȭ	ȭ
+Ȯ	ȯ
+Ȱ	ȱ
+Ȳ	ȳ
+Ⱥ	ⱥ
+Ȼ	ȼ
+Ƚ	ƚ
+Ⱦ	ⱦ
+Ɂ	ɂ
+Ƀ	ƀ
+Ʉ	ʉ
+Ʌ	ʌ
+Ɇ	ɇ
+Ɉ	ɉ
+Ɋ	ɋ
+Ɍ	ɍ
+Ɏ	ɏ
+ͅ	ι
+Ͱ	ͱ
+Ͳ	ͳ
+Ͷ	ͷ
+Ά	ά
+Έ	έ
+Ή	ή
+Ί	ί
+Ό	ό
+Ύ	ύ
+Ώ	ώ
+ΐ	ΐ
+Α	α
+Β	β
+Γ	γ
+Δ	δ
+Ε	ε
+Ζ	ζ
+Η	η
+Θ	θ
+Ι	ι
+Κ	κ
+Λ	λ
+Μ	μ
+Ν	ν
+Ξ	ξ
+Ο	ο
+Π	π
+Ρ	ρ
+Σ	σ
+Τ	τ
+Υ	υ
+Φ	φ
+Χ	χ
+Ψ	ψ
+Ω	ω
+Ϊ	ϊ
+Ϋ	ϋ
+ΰ	ΰ
+ς	σ
+Ϗ	ϗ
+ϐ	β
+ϑ	θ
+ϕ	φ
+ϖ	π
+Ϙ	ϙ
+Ϛ	ϛ
+Ϝ	ϝ
+Ϟ	ϟ
+Ϡ	ϡ
+Ϣ	ϣ
+Ϥ	ϥ
+Ϧ	ϧ
+Ϩ	ϩ
+Ϫ	ϫ
+Ϭ	ϭ
+Ϯ	ϯ
+ϰ	κ
+ϱ	ρ
+ϴ	θ
+ϵ	ε
+Ϸ	ϸ
+Ϲ	ϲ
+Ϻ	ϻ
+Ͻ	ͻ
+Ͼ	ͼ
+Ͽ	ͽ
+Ѐ	ѐ
+Ё	ё
+Ђ	ђ
+Ѓ	ѓ
+Є	є
+Ѕ	ѕ
+І	і
+Ї	ї
+Ј	ј
+Љ	љ
+Њ	њ
+Ћ	ћ
+Ќ	ќ
+Ѝ	ѝ
+Ў	ў
+Џ	џ
+А	а
+Б	б
+В	в
+Г	г
+Д	д
+Е	е
+Ж	ж
+З	з
+И	и
+Й	й
+К	к
+Л	л
+М	м
+Н	н
+О	о
+П	п
+Р	р
+С	с
+Т	т
+У	у
+Ф	ф
+Х	х
+Ц	ц
+Ч	ч
+Ш	ш
+Щ	щ
+Ъ	ъ
+Ы	ы
+Ь	ь
+Э	э
+Ю	ю
+Я	я
+Ѡ	ѡ
+Ѣ	ѣ
+Ѥ	ѥ
+Ѧ	ѧ
+Ѩ	ѩ
+Ѫ	ѫ
+Ѭ	ѭ
+Ѯ	ѯ
+Ѱ	ѱ
+Ѳ	ѳ
+Ѵ	ѵ
+Ѷ	ѷ
+Ѹ	ѹ
+Ѻ	ѻ
+Ѽ	ѽ
+Ѿ	ѿ
+Ҁ	ҁ
+Ҋ	ҋ
+Ҍ	ҍ
+Ҏ	ҏ
+Ґ	ґ
+Ғ	ғ
+Ҕ	ҕ
+Җ	җ
+Ҙ	ҙ
+Қ	қ
+Ҝ	ҝ
+Ҟ	ҟ
+Ҡ	ҡ
+Ң	ң
+Ҥ	ҥ
+Ҧ	ҧ
+Ҩ	ҩ
+Ҫ	ҫ
+Ҭ	ҭ
+Ү	ү
+Ұ	ұ
+Ҳ	ҳ
+Ҵ	ҵ
+Ҷ	ҷ
+Ҹ	ҹ
+Һ	һ
+Ҽ	ҽ
+Ҿ	ҿ
+Ӏ	ӏ
+Ӂ	ӂ
+Ӄ	ӄ
+Ӆ	ӆ
+Ӈ	ӈ
+Ӊ	ӊ
+Ӌ	ӌ
+Ӎ	ӎ
+Ӑ	ӑ
+Ӓ	ӓ
+Ӕ	ӕ
+Ӗ	ӗ
+Ә	ә
+Ӛ	ӛ
+Ӝ	ӝ
+Ӟ	ӟ
+Ӡ	ӡ
+Ӣ	ӣ
+Ӥ	ӥ
+Ӧ	ӧ
+Ө	ө
+Ӫ	ӫ
+Ӭ	ӭ
+Ӯ	ӯ
+Ӱ	ӱ
+Ӳ	ӳ
+Ӵ	ӵ
+Ӷ	ӷ
+Ӹ	ӹ
+Ӻ	ӻ
+Ӽ	ӽ
+Ӿ	ӿ
+Ԁ	ԁ
+Ԃ	ԃ
+Ԅ	ԅ
+Ԇ	ԇ
+Ԉ	ԉ
+Ԋ	ԋ
+Ԍ	ԍ
+Ԏ	ԏ
+Ԑ	ԑ
+Ԓ	ԓ
+Ԕ	ԕ
+Ԗ	ԗ
+Ԙ	ԙ
+Ԛ	ԛ
+Ԝ	ԝ
+Ԟ	ԟ
+Ԡ	ԡ
+Ԣ	ԣ
+Ա	ա
+Բ	բ
+Գ	գ
+Դ	դ
+Ե	ե
+Զ	զ
+Է	է
+Ը	ը
+Թ	թ
+Ժ	ժ
+Ի	ի
+Լ	լ
+Խ	խ
+Ծ	ծ
+Կ	կ
+Հ	հ
+Ձ	ձ
+Ղ	ղ
+Ճ	ճ
+Մ	մ
+Յ	յ
+Ն	ն
+Շ	շ
+Ո	ո
+Չ	չ
+Պ	պ
+Ջ	ջ
+Ռ	ռ
+Ս	ս
+Վ	վ
+Տ	տ
+Ր	ր
+Ց	ց
+Ւ	ւ
+Փ	փ
+Ք	ք
+Օ	օ
+Ֆ	ֆ
+և	եւ
+Ⴀ	ⴀ
+Ⴁ	ⴁ
+Ⴂ	ⴂ
+Ⴃ	ⴃ
+Ⴄ	ⴄ
+Ⴅ	ⴅ
+Ⴆ	ⴆ
+Ⴇ	ⴇ
+Ⴈ	ⴈ
+Ⴉ	ⴉ
+Ⴊ	ⴊ
+Ⴋ	ⴋ
+Ⴌ	ⴌ
+Ⴍ	ⴍ
+Ⴎ	ⴎ
+Ⴏ	ⴏ
+Ⴐ	ⴐ
+Ⴑ	ⴑ
+Ⴒ	ⴒ
+Ⴓ	ⴓ
+Ⴔ	ⴔ
+Ⴕ	ⴕ
+Ⴖ	ⴖ
+Ⴗ	ⴗ
+Ⴘ	ⴘ
+Ⴙ	ⴙ
+Ⴚ	ⴚ
+Ⴛ	ⴛ
+Ⴜ	ⴜ
+Ⴝ	ⴝ
+Ⴞ	ⴞ
+Ⴟ	ⴟ
+Ⴠ	ⴠ
+Ⴡ	ⴡ
+Ⴢ	ⴢ
+Ⴣ	ⴣ
+Ⴤ	ⴤ
+Ⴥ	ⴥ
+Ḁ	ḁ
+Ḃ	ḃ
+Ḅ	ḅ
+Ḇ	ḇ
+Ḉ	ḉ
+Ḋ	ḋ
+Ḍ	ḍ
+Ḏ	ḏ
+Ḑ	ḑ
+Ḓ	ḓ
+Ḕ	ḕ
+Ḗ	ḗ
+Ḙ	ḙ
+Ḛ	ḛ
+Ḝ	ḝ
+Ḟ	ḟ
+Ḡ	ḡ
+Ḣ	ḣ
+Ḥ	ḥ
+Ḧ	ḧ
+Ḩ	ḩ
+Ḫ	ḫ
+Ḭ	ḭ
+Ḯ	ḯ
+Ḱ	ḱ
+Ḳ	ḳ
+Ḵ	ḵ
+Ḷ	ḷ
+Ḹ	ḹ
+Ḻ	ḻ
+Ḽ	ḽ
+Ḿ	ḿ
+Ṁ	ṁ
+Ṃ	ṃ
+Ṅ	ṅ
+Ṇ	ṇ
+Ṉ	ṉ
+Ṋ	ṋ
+Ṍ	ṍ
+Ṏ	ṏ
+Ṑ	ṑ
+Ṓ	ṓ
+Ṕ	ṕ
+Ṗ	ṗ
+Ṙ	ṙ
+Ṛ	ṛ
+Ṝ	ṝ
+Ṟ	ṟ
+Ṡ	ṡ
+Ṣ	ṣ
+Ṥ	ṥ
+Ṧ	ṧ
+Ṩ	ṩ
+Ṫ	ṫ
+Ṭ	ṭ
+Ṯ	ṯ
+Ṱ	ṱ
+Ṳ	ṳ
+Ṵ	ṵ
+Ṷ	ṷ
+Ṹ	ṹ
+Ṻ	ṻ
+Ṽ	ṽ
+Ṿ	ṿ
+Ẁ	ẁ
+Ẃ	ẃ
+Ẅ	ẅ
+Ẇ	ẇ
+Ẉ	ẉ
+Ẋ	ẋ
+Ẍ	ẍ
+Ẏ	ẏ
+Ẑ	ẑ
+Ẓ	ẓ
+Ẕ	ẕ
+ẖ	ẖ
+ẗ	ẗ
+ẘ	ẘ
+ẙ	ẙ
+ẚ	aʾ
+ẛ	ṡ
+ẞ	ss
+Ạ	ạ
+Ả	ả
+Ấ	ấ
+Ầ	ầ
+Ẩ	ẩ
+Ẫ	ẫ
+Ậ	ậ
+Ắ	ắ
+Ằ	ằ
+Ẳ	ẳ
+Ẵ	ẵ
+Ặ	ặ
+Ẹ	ẹ
+Ẻ	ẻ
+Ẽ	ẽ
+Ế	ế
+Ề	ề
+Ể	ể
+Ễ	ễ
+Ệ	ệ
+Ỉ	ỉ
+Ị	ị
+Ọ	ọ
+Ỏ	ỏ
+Ố	ố
+Ồ	ồ
+Ổ	ổ
+Ỗ	ỗ
+Ộ	ộ
+Ớ	ớ
+Ờ	ờ
+Ở	ở
+Ỡ	ỡ
+Ợ	ợ
+Ụ	ụ
+Ủ	ủ
+Ứ	ứ
+Ừ	ừ
+Ử	ử
+Ữ	ữ
+Ự	ự
+Ỳ	ỳ
+Ỵ	ỵ
+Ỷ	ỷ
+Ỹ	ỹ
+Ỻ	ỻ
+Ỽ	ỽ
+Ỿ	ỿ
+Ἀ	ἀ
+Ἁ	ἁ
+Ἂ	ἂ
+Ἃ	ἃ
+Ἄ	ἄ
+Ἅ	ἅ
+Ἆ	ἆ
+Ἇ	ἇ
+Ἐ	ἐ
+Ἑ	ἑ
+Ἒ	ἒ
+Ἓ	ἓ
+Ἔ	ἔ
+Ἕ	ἕ
+Ἠ	ἠ
+Ἡ	ἡ
+Ἢ	ἢ
+Ἣ	ἣ
+Ἤ	ἤ
+Ἥ	ἥ
+Ἦ	ἦ
+Ἧ	ἧ
+Ἰ	ἰ
+Ἱ	ἱ
+Ἲ	ἲ
+Ἳ	ἳ
+Ἴ	ἴ
+Ἵ	ἵ
+Ἶ	ἶ
+Ἷ	ἷ
+Ὀ	ὀ
+Ὁ	ὁ
+Ὂ	ὂ
+Ὃ	ὃ
+Ὄ	ὄ
+Ὅ	ὅ
+ὐ	ὐ
+ὒ	ὒ
+ὔ	ὔ
+ὖ	ὖ
+Ὑ	ὑ
+Ὓ	ὓ
+Ὕ	ὕ
+Ὗ	ὗ
+Ὠ	ὠ
+Ὡ	ὡ
+Ὢ	ὢ
+Ὣ	ὣ
+Ὤ	ὤ
+Ὥ	ὥ
+Ὦ	ὦ
+Ὧ	ὧ
+ᾀ	ἀι
+ᾁ	ἁι
+ᾂ	ἂι
+ᾃ	ἃι
+ᾄ	ἄι
+ᾅ	ἅι
+ᾆ	ἆι
+ᾇ	ἇι
+ᾈ	ἀι
+ᾉ	ἁι
+ᾊ	ἂι
+ᾋ	ἃι
+ᾌ	ἄι
+ᾍ	ἅι
+ᾎ	ἆι
+ᾏ	ἇι
+ᾐ	ἠι
+ᾑ	ἡι
+ᾒ	ἢι
+ᾓ	ἣι
+ᾔ	ἤι
+ᾕ	ἥι
+ᾖ	ἦι
+ᾗ	ἧι
+ᾘ	ἠι
+ᾙ	ἡι
+ᾚ	ἢι
+ᾛ	ἣι
+ᾜ	ἤι
+ᾝ	ἥι
+ᾞ	ἦι
+ᾟ	ἧι
+ᾠ	ὠι
+ᾡ	ὡι
+ᾢ	ὢι
+ᾣ	ὣι
+ᾤ	ὤι
+ᾥ	ὥι
+ᾦ	ὦι
+ᾧ	ὧι
+ᾨ	ὠι
+ᾩ	ὡι
+ᾪ	ὢι
+ᾫ	ὣι
+ᾬ	ὤι
+ᾭ	ὥι
+ᾮ	ὦι
+ᾯ	ὧι
+ᾲ	ὰι
+ᾳ	αι
+ᾴ	άι
+ᾶ	ᾶ
+ᾷ	ᾶι
+Ᾰ	ᾰ
+Ᾱ	ᾱ
+Ὰ	ὰ
+Ά	ά
+ᾼ	αι
+ι	ι
+ῂ	ὴι
+ῃ	ηι
+ῄ	ήι
+ῆ	ῆ
+ῇ	ῆι
+Ὲ	ὲ
+Έ	έ
+Ὴ	ὴ
+Ή	ή
+ῌ	ηι
+ῒ	ῒ
+ΐ	ΐ
+ῖ	ῖ
+ῗ	ῗ
+Ῐ	ῐ
+Ῑ	ῑ
+Ὶ	ὶ
+Ί	ί
+ῢ	ῢ
+ΰ	ΰ
+ῤ	ῤ
+ῦ	ῦ
+ῧ	ῧ
+Ῠ	ῠ
+Ῡ	ῡ
+Ὺ	ὺ
+Ύ	ύ
+Ῥ	ῥ
+ῲ	ὼι
+ῳ	ωι
+ῴ	ώι
+ῶ	ῶ
+ῷ	ῶι
+Ὸ	ὸ
+Ό	ό
+Ὼ	ὼ
+Ώ	ώ
+ῼ	ωι
+Ω	ω
+K	k
+Å	å
+Ⅎ	ⅎ
+Ⅰ	ⅰ
+Ⅱ	ⅱ
+Ⅲ	ⅲ
+Ⅳ	ⅳ
+Ⅴ	ⅴ
+Ⅵ	ⅵ
+Ⅶ	ⅶ
+Ⅷ	ⅷ
+Ⅸ	ⅸ
+Ⅹ	ⅹ
+Ⅺ	ⅺ
+Ⅻ	ⅻ
+Ⅼ	ⅼ
+Ⅽ	ⅽ
+Ⅾ	ⅾ
+Ⅿ	ⅿ
+Ↄ	ↄ
+Ⓐ	ⓐ
+Ⓑ	ⓑ
+Ⓒ	ⓒ
+Ⓓ	ⓓ
+Ⓔ	ⓔ
+Ⓕ	ⓕ
+Ⓖ	ⓖ
+Ⓗ	ⓗ
+Ⓘ	ⓘ
+Ⓙ	ⓙ
+Ⓚ	ⓚ
+Ⓛ	ⓛ
+Ⓜ	ⓜ
+Ⓝ	ⓝ
+Ⓞ	ⓞ
+Ⓟ	ⓟ
+Ⓠ	ⓠ
+Ⓡ	ⓡ
+Ⓢ	ⓢ
+Ⓣ	ⓣ
+Ⓤ	ⓤ
+Ⓥ	ⓥ
+Ⓦ	ⓦ
+Ⓧ	ⓧ
+Ⓨ	ⓨ
+Ⓩ	ⓩ
+Ⰰ	ⰰ
+Ⰱ	ⰱ
+Ⰲ	ⰲ
+Ⰳ	ⰳ
+Ⰴ	ⰴ
+Ⰵ	ⰵ
+Ⰶ	ⰶ
+Ⰷ	ⰷ
+Ⰸ	ⰸ
+Ⰹ	ⰹ
+Ⰺ	ⰺ
+Ⰻ	ⰻ
+Ⰼ	ⰼ
+Ⰽ	ⰽ
+Ⰾ	ⰾ
+Ⰿ	ⰿ
+Ⱀ	ⱀ
+Ⱁ	ⱁ
+Ⱂ	ⱂ
+Ⱃ	ⱃ
+Ⱄ	ⱄ
+Ⱅ	ⱅ
+Ⱆ	ⱆ
+Ⱇ	ⱇ
+Ⱈ	ⱈ
+Ⱉ	ⱉ
+Ⱊ	ⱊ
+Ⱋ	ⱋ
+Ⱌ	ⱌ
+Ⱍ	ⱍ
+Ⱎ	ⱎ
+Ⱏ	ⱏ
+Ⱐ	ⱐ
+Ⱑ	ⱑ
+Ⱒ	ⱒ
+Ⱓ	ⱓ
+Ⱔ	ⱔ
+Ⱕ	ⱕ
+Ⱖ	ⱖ
+Ⱗ	ⱗ
+Ⱘ	ⱘ
+Ⱙ	ⱙ
+Ⱚ	ⱚ
+Ⱛ	ⱛ
+Ⱜ	ⱜ
+Ⱝ	ⱝ
+Ⱞ	ⱞ
+Ⱡ	ⱡ
+Ɫ	ɫ
+Ᵽ	ᵽ
+Ɽ	ɽ
+Ⱨ	ⱨ
+Ⱪ	ⱪ
+Ⱬ	ⱬ
+Ɑ	ɑ
+Ɱ	ɱ
+Ɐ	ɐ
+Ⱳ	ⱳ
+Ⱶ	ⱶ
+Ⲁ	ⲁ
+Ⲃ	ⲃ
+Ⲅ	ⲅ
+Ⲇ	ⲇ
+Ⲉ	ⲉ
+Ⲋ	ⲋ
+Ⲍ	ⲍ
+Ⲏ	ⲏ
+Ⲑ	ⲑ
+Ⲓ	ⲓ
+Ⲕ	ⲕ
+Ⲗ	ⲗ
+Ⲙ	ⲙ
+Ⲛ	ⲛ
+Ⲝ	ⲝ
+Ⲟ	ⲟ
+Ⲡ	ⲡ
+Ⲣ	ⲣ
+Ⲥ	ⲥ
+Ⲧ	ⲧ
+Ⲩ	ⲩ
+Ⲫ	ⲫ
+Ⲭ	ⲭ
+Ⲯ	ⲯ
+Ⲱ	ⲱ
+Ⲳ	ⲳ
+Ⲵ	ⲵ
+Ⲷ	ⲷ
+Ⲹ	ⲹ
+Ⲻ	ⲻ
+Ⲽ	ⲽ
+Ⲿ	ⲿ
+Ⳁ	ⳁ
+Ⳃ	ⳃ
+Ⳅ	ⳅ
+Ⳇ	ⳇ
+Ⳉ	ⳉ
+Ⳋ	ⳋ
+Ⳍ	ⳍ
+Ⳏ	ⳏ
+Ⳑ	ⳑ
+Ⳓ	ⳓ
+Ⳕ	ⳕ
+Ⳗ	ⳗ
+Ⳙ	ⳙ
+Ⳛ	ⳛ
+Ⳝ	ⳝ
+Ⳟ	ⳟ
+Ⳡ	ⳡ
+Ⳣ	ⳣ
+Ꙁ	ꙁ
+Ꙃ	ꙃ
+Ꙅ	ꙅ
+Ꙇ	ꙇ
+Ꙉ	ꙉ
+Ꙋ	ꙋ
+Ꙍ	ꙍ
+Ꙏ	ꙏ
+Ꙑ	ꙑ
+Ꙓ	ꙓ
+Ꙕ	ꙕ
+Ꙗ	ꙗ
+Ꙙ	ꙙ
+Ꙛ	ꙛ
+Ꙝ	ꙝ
+Ꙟ	ꙟ
+Ꙣ	ꙣ
+Ꙥ	ꙥ
+Ꙧ	ꙧ
+Ꙩ	ꙩ
+Ꙫ	ꙫ
+Ꙭ	ꙭ
+Ꚁ	ꚁ
+Ꚃ	ꚃ
+Ꚅ	ꚅ
+Ꚇ	ꚇ
+Ꚉ	ꚉ
+Ꚋ	ꚋ
+Ꚍ	ꚍ
+Ꚏ	ꚏ
+Ꚑ	ꚑ
+Ꚓ	ꚓ
+Ꚕ	ꚕ
+Ꚗ	ꚗ
+Ꜣ	ꜣ
+Ꜥ	ꜥ
+Ꜧ	ꜧ
+Ꜩ	ꜩ
+Ꜫ	ꜫ
+Ꜭ	ꜭ
+Ꜯ	ꜯ
+Ꜳ	ꜳ
+Ꜵ	ꜵ
+Ꜷ	ꜷ
+Ꜹ	ꜹ
+Ꜻ	ꜻ
+Ꜽ	ꜽ
+Ꜿ	ꜿ
+Ꝁ	ꝁ
+Ꝃ	ꝃ
+Ꝅ	ꝅ
+Ꝇ	ꝇ
+Ꝉ	ꝉ
+Ꝋ	ꝋ
+Ꝍ	ꝍ
+Ꝏ	ꝏ
+Ꝑ	ꝑ
+Ꝓ	ꝓ
+Ꝕ	ꝕ
+Ꝗ	ꝗ
+Ꝙ	ꝙ
+Ꝛ	ꝛ
+Ꝝ	ꝝ
+Ꝟ	ꝟ
+Ꝡ	ꝡ
+Ꝣ	ꝣ
+Ꝥ	ꝥ
+Ꝧ	ꝧ
+Ꝩ	ꝩ
+Ꝫ	ꝫ
+Ꝭ	ꝭ
+Ꝯ	ꝯ
+Ꝺ	ꝺ
+Ꝼ	ꝼ
+Ᵹ	ᵹ
+Ꝿ	ꝿ
+Ꞁ	ꞁ
+Ꞃ	ꞃ
+Ꞅ	ꞅ
+Ꞇ	ꞇ
+Ꞌ	ꞌ
+ff	ff
+fi	fi
+fl	fl
+ffi	ffi
+ffl	ffl
+ſt	st
+st	st
+ﬓ	մն
+ﬔ	մե
+ﬕ	մի
+ﬖ	վն
+ﬗ	մխ
+A	a
+B	b
+C	c
+D	d
+E	e
+F	f
+G	g
+H	h
+I	i
+J	j
+K	k
+L	l
+M	m
+N	n
+O	o
+P	p
+Q	q
+R	r
+S	s
+T	t
+U	u
+V	v
+W	w
+X	x
+Y	y
+Z	z
+𐐀	𐐨
+𐐁	𐐩
+𐐂	𐐪
+𐐃	𐐫
+𐐄	𐐬
+𐐅	𐐭
+𐐆	𐐮
+𐐇	𐐯
+𐐈	𐐰
+𐐉	𐐱
+𐐊	𐐲
+𐐋	𐐳
+𐐌	𐐴
+𐐍	𐐵
+𐐎	𐐶
+𐐏	𐐷
+𐐐	𐐸
+𐐑	𐐹
+𐐒	𐐺
+𐐓	𐐻
+𐐔	𐐼
+𐐕	𐐽
+𐐖	𐐾
+𐐗	𐐿
+𐐘	𐑀
+𐐙	𐑁
+𐐚	𐑂
+𐐛	𐑃
+𐐜	𐑄
+𐐝	𐑅
+𐐞	𐑆
+𐐟	𐑇
+𐐠	𐑈
+𐐡	𐑉
+𐐢	𐑊
+𐐣	𐑋
+𐐤	𐑌
+𐐥	𐑍
+𐐦	𐑎
+𐐧	𐑏
diff --git a/tests/casemap.txt b/tests/casemap.txt
new file mode 100644
index 0000000..6bf3509
--- /dev/null
+++ b/tests/casemap.txt
@@ -0,0 +1,3246 @@
+# Test cases generated from Unicode 5.1 data
+# by gen-case-tests.pl. Do not edit.
+#
+# Some special hand crafted tests
+#
+tr_TR	i	i	İ	İ	# i => LATIN CAPITAL LETTER I WITH DOT ABOVE
+tr_TR	I	ı	I	I	# I => LATIN SMALL LETTER DOTLESS I
+tr_TR	İ	i	İ	İ	# I => LATIN SMALL LETTER DOTLESS I
+tr_TR.UTF-8	i	i	İ	İ	# i => LATIN CAPITAL LETTER I WITH DOT ABOVE
+tr_TR.UTF-8	I	ı	I	I	# I => LATIN SMALL LETTER DOTLESS I
+tr_TR.UTF-8	İ	i	İ	İ	# I => LATIN SMALL LETTER DOTLESS I
+# Test reordering of YPOGEGRAMMENI across other accents
+	ᾁ	ᾁ	ᾉ	ἉΙ	
+	ᾁ	ᾁ	ᾉ	ἉΙ	
+# Handling of final and nonfinal sigma
+	ΜΆΙΟΣ 	μάιος 	Μάιος 	ΜΆΙΟΣ 	
+	ΜΆΙΟΣ	μάιος	Μάιος	ΜΆΙΟΣ	
+	ΣΙΓΜΑ	σιγμα	Σιγμα	ΣΙΓΜΑ	
+# Lithuanian rule of i followed by letter with dot. Not at all sure
+# about the titlecase part here
+lt_LT	iė	iė	Ie	IE	
+lt_LT	iė	iė	Ie	IE	
+lt_LT	Ì	i̇̀	Ì	Ì	 # LATIN CAPITAL LETTER I WITH GRAVE
+lt_LT	Í	i̇́	Í	Í	 # LATIN CAPITAL LETTER I WITH ACUTE
+lt_LT	Ĩ	i̇̃	Ĩ	Ĩ	 # LATIN CAPITAL LETTER I WITH TILDE
+lt_LT	Í	i̇́	Í	Í	 # LATIN CAPITAL LETTER I (with acute accent)
+lt_LT	Ì	i̇̀	Ì	Ì	 # LATIN CAPITAL LETTER I (with grave accent)
+lt_LT	Ĩ	i̇̃	Ĩ	Ĩ	 # LATIN CAPITAL LETTER I (with tilde above)
+lt_LT	Į́	į̇́	Į́	Į́	 # LATIN CAPITAL LETTER I (with ogonek and acute accent)
+lt_LT	J́	j̇́	J́	J́	 # LATIN CAPITAL LETTER J (with acute accent)
+lt_LT	Į́	į̇́	Į́	Į́	 # LATIN CAPITAL LETTER I WITH OGONEK (with acute accent)
+lt_LT.UTF-8	iė	iė	Ie	IE	
+lt_LT.UTF-8	iė	iė	Ie	IE	
+lt_LT.UTF-8	Ì	i̇̀	Ì	Ì	 # LATIN CAPITAL LETTER I WITH GRAVE
+lt_LT.UTF-8	Í	i̇́	Í	Í	 # LATIN CAPITAL LETTER I WITH ACUTE
+lt_LT.UTF-8	Ĩ	i̇̃	Ĩ	Ĩ	 # LATIN CAPITAL LETTER I WITH TILDE
+lt_LT.UTF-8	Í	i̇́	Í	Í	 # LATIN CAPITAL LETTER I (with acute accent)
+lt_LT.UTF-8	Ì	i̇̀	Ì	Ì	 # LATIN CAPITAL LETTER I (with grave accent)
+lt_LT.UTF-8	Ĩ	i̇̃	Ĩ	Ĩ	 # LATIN CAPITAL LETTER I (with tilde above)
+lt_LT.UTF-8	Į́	į̇́	Į́	Į́	 # LATIN CAPITAL LETTER I (with ogonek and acute accent)
+lt_LT.UTF-8	J́	j̇́	J́	J́	 # LATIN CAPITAL LETTER J (with acute accent)
+lt_LT.UTF-8	Į́	į̇́	Į́	Į́	 # LATIN CAPITAL LETTER I WITH OGONEK (with acute accent)
+# Special case not at initial position
+	affl	affl	Affl	AFFL	# FB04
+#
+# Now the automatic tests
+#
+	A	a		A	#   41
+	B	b		B	#   42
+	C	c		C	#   43
+	D	d		D	#   44
+	E	e		E	#   45
+	F	f		F	#   46
+	G	g		G	#   47
+	H	h		H	#   48
+	I	i		I	#   49
+	J	j		J	#   4A
+	K	k		K	#   4B
+	L	l		L	#   4C
+	M	m		M	#   4D
+	N	n		N	#   4E
+	O	o		O	#   4F
+	P	p		P	#   50
+	Q	q		Q	#   51
+	R	r		R	#   52
+	S	s		S	#   53
+	T	t		T	#   54
+	U	u		U	#   55
+	V	v		V	#   56
+	W	w		W	#   57
+	X	x		X	#   58
+	Y	y		Y	#   59
+	Z	z		Z	#   5A
+	a	a	A	A	#   61
+	b	b	B	B	#   62
+	c	c	C	C	#   63
+	d	d	D	D	#   64
+	e	e	E	E	#   65
+	f	f	F	F	#   66
+	g	g	G	G	#   67
+	h	h	H	H	#   68
+	i	i	I	I	#   69
+	j	j	J	J	#   6A
+	k	k	K	K	#   6B
+	l	l	L	L	#   6C
+	m	m	M	M	#   6D
+	n	n	N	N	#   6E
+	o	o	O	O	#   6F
+	p	p	P	P	#   70
+	q	q	Q	Q	#   71
+	r	r	R	R	#   72
+	s	s	S	S	#   73
+	t	t	T	T	#   74
+	u	u	U	U	#   75
+	v	v	V	V	#   76
+	w	w	W	W	#   77
+	x	x	X	X	#   78
+	y	y	Y	Y	#   79
+	z	z	Z	Z	#   7A
+	ª	ª			#   AA
+	µ	µ	Μ	Μ	#   B5
+	º	º			#   BA
+	À	à		À	#   C0
+	Á	á		Á	#   C1
+	Â	â		Â	#   C2
+	Ã	ã		Ã	#   C3
+	Ä	ä		Ä	#   C4
+	Å	å		Å	#   C5
+	Æ	æ		Æ	#   C6
+	Ç	ç		Ç	#   C7
+	È	è		È	#   C8
+	É	é		É	#   C9
+	Ê	ê		Ê	#   CA
+	Ë	ë		Ë	#   CB
+	Ì	ì		Ì	#   CC
+	Í	í		Í	#   CD
+	Î	î		Î	#   CE
+	Ï	ï		Ï	#   CF
+	Ð	ð		Ð	#   D0
+	Ñ	ñ		Ñ	#   D1
+	Ò	ò		Ò	#   D2
+	Ó	ó		Ó	#   D3
+	Ô	ô		Ô	#   D4
+	Õ	õ		Õ	#   D5
+	Ö	ö		Ö	#   D6
+	Ø	ø		Ø	#   D8
+	Ù	ù		Ù	#   D9
+	Ú	ú		Ú	#   DA
+	Û	û		Û	#   DB
+	Ü	ü		Ü	#   DC
+	Ý	ý		Ý	#   DD
+	Þ	þ		Þ	#   DE
+	ß	ß	Ss	SS	#   DF
+	à	à	À	À	#   E0
+	á	á	Á	Á	#   E1
+	â	â	Â	Â	#   E2
+	ã	ã	Ã	Ã	#   E3
+	ä	ä	Ä	Ä	#   E4
+	å	å	Å	Å	#   E5
+	æ	æ	Æ	Æ	#   E6
+	ç	ç	Ç	Ç	#   E7
+	è	è	È	È	#   E8
+	é	é	É	É	#   E9
+	ê	ê	Ê	Ê	#   EA
+	ë	ë	Ë	Ë	#   EB
+	ì	ì	Ì	Ì	#   EC
+	í	í	Í	Í	#   ED
+	î	î	Î	Î	#   EE
+	ï	ï	Ï	Ï	#   EF
+	ð	ð	Ð	Ð	#   F0
+	ñ	ñ	Ñ	Ñ	#   F1
+	ò	ò	Ò	Ò	#   F2
+	ó	ó	Ó	Ó	#   F3
+	ô	ô	Ô	Ô	#   F4
+	õ	õ	Õ	Õ	#   F5
+	ö	ö	Ö	Ö	#   F6
+	ø	ø	Ø	Ø	#   F8
+	ù	ù	Ù	Ù	#   F9
+	ú	ú	Ú	Ú	#   FA
+	û	û	Û	Û	#   FB
+	ü	ü	Ü	Ü	#   FC
+	ý	ý	Ý	Ý	#   FD
+	þ	þ	Þ	Þ	#   FE
+	ÿ	ÿ	Ÿ	Ÿ	#   FF
+	Ā	ā		Ā	#  100
+	ā	ā	Ā	Ā	#  101
+	Ă	ă		Ă	#  102
+	ă	ă	Ă	Ă	#  103
+	Ą	ą		Ą	#  104
+	ą	ą	Ą	Ą	#  105
+	Ć	ć		Ć	#  106
+	ć	ć	Ć	Ć	#  107
+	Ĉ	ĉ		Ĉ	#  108
+	ĉ	ĉ	Ĉ	Ĉ	#  109
+	Ċ	ċ		Ċ	#  10A
+	ċ	ċ	Ċ	Ċ	#  10B
+	Č	č		Č	#  10C
+	č	č	Č	Č	#  10D
+	Ď	ď		Ď	#  10E
+	ď	ď	Ď	Ď	#  10F
+	Đ	đ		Đ	#  110
+	đ	đ	Đ	Đ	#  111
+	Ē	ē		Ē	#  112
+	ē	ē	Ē	Ē	#  113
+	Ĕ	ĕ		Ĕ	#  114
+	ĕ	ĕ	Ĕ	Ĕ	#  115
+	Ė	ė		Ė	#  116
+	ė	ė	Ė	Ė	#  117
+	Ę	ę		Ę	#  118
+	ę	ę	Ę	Ę	#  119
+	Ě	ě		Ě	#  11A
+	ě	ě	Ě	Ě	#  11B
+	Ĝ	ĝ		Ĝ	#  11C
+	ĝ	ĝ	Ĝ	Ĝ	#  11D
+	Ğ	ğ		Ğ	#  11E
+	ğ	ğ	Ğ	Ğ	#  11F
+	Ġ	ġ		Ġ	#  120
+	ġ	ġ	Ġ	Ġ	#  121
+	Ģ	ģ		Ģ	#  122
+	ģ	ģ	Ģ	Ģ	#  123
+	Ĥ	ĥ		Ĥ	#  124
+	ĥ	ĥ	Ĥ	Ĥ	#  125
+	Ħ	ħ		Ħ	#  126
+	ħ	ħ	Ħ	Ħ	#  127
+	Ĩ	ĩ		Ĩ	#  128
+	ĩ	ĩ	Ĩ	Ĩ	#  129
+	Ī	ī		Ī	#  12A
+	ī	ī	Ī	Ī	#  12B
+	Ĭ	ĭ		Ĭ	#  12C
+	ĭ	ĭ	Ĭ	Ĭ	#  12D
+	Į	į		Į	#  12E
+	į	į	Į	Į	#  12F
+	İ	i̇	İ	İ	#  130
+	ı	ı	I	I	#  131
+	IJ	ij		IJ	#  132
+	ij	ij	IJ	IJ	#  133
+	Ĵ	ĵ		Ĵ	#  134
+	ĵ	ĵ	Ĵ	Ĵ	#  135
+	Ķ	ķ		Ķ	#  136
+	ķ	ķ	Ķ	Ķ	#  137
+	ĸ	ĸ			#  138
+	Ĺ	ĺ		Ĺ	#  139
+	ĺ	ĺ	Ĺ	Ĺ	#  13A
+	Ļ	ļ		Ļ	#  13B
+	ļ	ļ	Ļ	Ļ	#  13C
+	Ľ	ľ		Ľ	#  13D
+	ľ	ľ	Ľ	Ľ	#  13E
+	Ŀ	ŀ		Ŀ	#  13F
+	ŀ	ŀ	Ŀ	Ŀ	#  140
+	Ł	ł		Ł	#  141
+	ł	ł	Ł	Ł	#  142
+	Ń	ń		Ń	#  143
+	ń	ń	Ń	Ń	#  144
+	Ņ	ņ		Ņ	#  145
+	ņ	ņ	Ņ	Ņ	#  146
+	Ň	ň		Ň	#  147
+	ň	ň	Ň	Ň	#  148
+	ʼn	ʼn	ʼN	ʼN	#  149
+	Ŋ	ŋ		Ŋ	#  14A
+	ŋ	ŋ	Ŋ	Ŋ	#  14B
+	Ō	ō		Ō	#  14C
+	ō	ō	Ō	Ō	#  14D
+	Ŏ	ŏ		Ŏ	#  14E
+	ŏ	ŏ	Ŏ	Ŏ	#  14F
+	Ő	ő		Ő	#  150
+	ő	ő	Ő	Ő	#  151
+	Œ	œ		Œ	#  152
+	œ	œ	Œ	Œ	#  153
+	Ŕ	ŕ		Ŕ	#  154
+	ŕ	ŕ	Ŕ	Ŕ	#  155
+	Ŗ	ŗ		Ŗ	#  156
+	ŗ	ŗ	Ŗ	Ŗ	#  157
+	Ř	ř		Ř	#  158
+	ř	ř	Ř	Ř	#  159
+	Ś	ś		Ś	#  15A
+	ś	ś	Ś	Ś	#  15B
+	Ŝ	ŝ		Ŝ	#  15C
+	ŝ	ŝ	Ŝ	Ŝ	#  15D
+	Ş	ş		Ş	#  15E
+	ş	ş	Ş	Ş	#  15F
+	Š	š		Š	#  160
+	š	š	Š	Š	#  161
+	Ţ	ţ		Ţ	#  162
+	ţ	ţ	Ţ	Ţ	#  163
+	Ť	ť		Ť	#  164
+	ť	ť	Ť	Ť	#  165
+	Ŧ	ŧ		Ŧ	#  166
+	ŧ	ŧ	Ŧ	Ŧ	#  167
+	Ũ	ũ		Ũ	#  168
+	ũ	ũ	Ũ	Ũ	#  169
+	Ū	ū		Ū	#  16A
+	ū	ū	Ū	Ū	#  16B
+	Ŭ	ŭ		Ŭ	#  16C
+	ŭ	ŭ	Ŭ	Ŭ	#  16D
+	Ů	ů		Ů	#  16E
+	ů	ů	Ů	Ů	#  16F
+	Ű	ű		Ű	#  170
+	ű	ű	Ű	Ű	#  171
+	Ų	ų		Ų	#  172
+	ų	ų	Ų	Ų	#  173
+	Ŵ	ŵ		Ŵ	#  174
+	ŵ	ŵ	Ŵ	Ŵ	#  175
+	Ŷ	ŷ		Ŷ	#  176
+	ŷ	ŷ	Ŷ	Ŷ	#  177
+	Ÿ	ÿ		Ÿ	#  178
+	Ź	ź		Ź	#  179
+	ź	ź	Ź	Ź	#  17A
+	Ż	ż		Ż	#  17B
+	ż	ż	Ż	Ż	#  17C
+	Ž	ž		Ž	#  17D
+	ž	ž	Ž	Ž	#  17E
+	ſ	ſ	S	S	#  17F
+	ƀ	ƀ	Ƀ	Ƀ	#  180
+	Ɓ	ɓ		Ɓ	#  181
+	Ƃ	ƃ		Ƃ	#  182
+	ƃ	ƃ	Ƃ	Ƃ	#  183
+	Ƅ	ƅ		Ƅ	#  184
+	ƅ	ƅ	Ƅ	Ƅ	#  185
+	Ɔ	ɔ		Ɔ	#  186
+	Ƈ	ƈ		Ƈ	#  187
+	ƈ	ƈ	Ƈ	Ƈ	#  188
+	Ɖ	ɖ		Ɖ	#  189
+	Ɗ	ɗ		Ɗ	#  18A
+	Ƌ	ƌ		Ƌ	#  18B
+	ƌ	ƌ	Ƌ	Ƌ	#  18C
+	ƍ	ƍ			#  18D
+	Ǝ	ǝ		Ǝ	#  18E
+	Ə	ə		Ə	#  18F
+	Ɛ	ɛ		Ɛ	#  190
+	Ƒ	ƒ		Ƒ	#  191
+	ƒ	ƒ	Ƒ	Ƒ	#  192
+	Ɠ	ɠ		Ɠ	#  193
+	Ɣ	ɣ		Ɣ	#  194
+	ƕ	ƕ	Ƕ	Ƕ	#  195
+	Ɩ	ɩ		Ɩ	#  196
+	Ɨ	ɨ		Ɨ	#  197
+	Ƙ	ƙ		Ƙ	#  198
+	ƙ	ƙ	Ƙ	Ƙ	#  199
+	ƚ	ƚ	Ƚ	Ƚ	#  19A
+	ƛ	ƛ			#  19B
+	Ɯ	ɯ		Ɯ	#  19C
+	Ɲ	ɲ		Ɲ	#  19D
+	ƞ	ƞ	Ƞ	Ƞ	#  19E
+	Ɵ	ɵ		Ɵ	#  19F
+	Ơ	ơ		Ơ	#  1A0
+	ơ	ơ	Ơ	Ơ	#  1A1
+	Ƣ	ƣ		Ƣ	#  1A2
+	ƣ	ƣ	Ƣ	Ƣ	#  1A3
+	Ƥ	ƥ		Ƥ	#  1A4
+	ƥ	ƥ	Ƥ	Ƥ	#  1A5
+	Ʀ	ʀ		Ʀ	#  1A6
+	Ƨ	ƨ		Ƨ	#  1A7
+	ƨ	ƨ	Ƨ	Ƨ	#  1A8
+	Ʃ	ʃ		Ʃ	#  1A9
+	ƪ	ƪ			#  1AA
+	ƫ	ƫ			#  1AB
+	Ƭ	ƭ		Ƭ	#  1AC
+	ƭ	ƭ	Ƭ	Ƭ	#  1AD
+	Ʈ	ʈ		Ʈ	#  1AE
+	Ư	ư		Ư	#  1AF
+	ư	ư	Ư	Ư	#  1B0
+	Ʊ	ʊ		Ʊ	#  1B1
+	Ʋ	ʋ		Ʋ	#  1B2
+	Ƴ	ƴ		Ƴ	#  1B3
+	ƴ	ƴ	Ƴ	Ƴ	#  1B4
+	Ƶ	ƶ		Ƶ	#  1B5
+	ƶ	ƶ	Ƶ	Ƶ	#  1B6
+	Ʒ	ʒ		Ʒ	#  1B7
+	Ƹ	ƹ		Ƹ	#  1B8
+	ƹ	ƹ	Ƹ	Ƹ	#  1B9
+	ƺ	ƺ			#  1BA
+	Ƽ	ƽ		Ƽ	#  1BC
+	ƽ	ƽ	Ƽ	Ƽ	#  1BD
+	ƾ	ƾ			#  1BE
+	ƿ	ƿ	Ƿ	Ƿ	#  1BF
+	DŽ	dž	Dž	DŽ	#  1C4
+	Dž	dž	dž	DŽ	#  1C5
+	dž	dž	Dž	DŽ	#  1C6
+	LJ	lj	Lj	LJ	#  1C7
+	Lj	lj	lj	LJ	#  1C8
+	lj	lj	Lj	LJ	#  1C9
+	NJ	nj	Nj	NJ	#  1CA
+	Nj	nj	nj	NJ	#  1CB
+	nj	nj	Nj	NJ	#  1CC
+	Ǎ	ǎ		Ǎ	#  1CD
+	ǎ	ǎ	Ǎ	Ǎ	#  1CE
+	Ǐ	ǐ		Ǐ	#  1CF
+	ǐ	ǐ	Ǐ	Ǐ	#  1D0
+	Ǒ	ǒ		Ǒ	#  1D1
+	ǒ	ǒ	Ǒ	Ǒ	#  1D2
+	Ǔ	ǔ		Ǔ	#  1D3
+	ǔ	ǔ	Ǔ	Ǔ	#  1D4
+	Ǖ	ǖ		Ǖ	#  1D5
+	ǖ	ǖ	Ǖ	Ǖ	#  1D6
+	Ǘ	ǘ		Ǘ	#  1D7
+	ǘ	ǘ	Ǘ	Ǘ	#  1D8
+	Ǚ	ǚ		Ǚ	#  1D9
+	ǚ	ǚ	Ǚ	Ǚ	#  1DA
+	Ǜ	ǜ		Ǜ	#  1DB
+	ǜ	ǜ	Ǜ	Ǜ	#  1DC
+	ǝ	ǝ	Ǝ	Ǝ	#  1DD
+	Ǟ	ǟ		Ǟ	#  1DE
+	ǟ	ǟ	Ǟ	Ǟ	#  1DF
+	Ǡ	ǡ		Ǡ	#  1E0
+	ǡ	ǡ	Ǡ	Ǡ	#  1E1
+	Ǣ	ǣ		Ǣ	#  1E2
+	ǣ	ǣ	Ǣ	Ǣ	#  1E3
+	Ǥ	ǥ		Ǥ	#  1E4
+	ǥ	ǥ	Ǥ	Ǥ	#  1E5
+	Ǧ	ǧ		Ǧ	#  1E6
+	ǧ	ǧ	Ǧ	Ǧ	#  1E7
+	Ǩ	ǩ		Ǩ	#  1E8
+	ǩ	ǩ	Ǩ	Ǩ	#  1E9
+	Ǫ	ǫ		Ǫ	#  1EA
+	ǫ	ǫ	Ǫ	Ǫ	#  1EB
+	Ǭ	ǭ		Ǭ	#  1EC
+	ǭ	ǭ	Ǭ	Ǭ	#  1ED
+	Ǯ	ǯ		Ǯ	#  1EE
+	ǯ	ǯ	Ǯ	Ǯ	#  1EF
+	ǰ	ǰ	J̌	J̌	#  1F0
+	DZ	dz	Dz	DZ	#  1F1
+	Dz	dz	dz	DZ	#  1F2
+	dz	dz	Dz	DZ	#  1F3
+	Ǵ	ǵ		Ǵ	#  1F4
+	ǵ	ǵ	Ǵ	Ǵ	#  1F5
+	Ƕ	ƕ		Ƕ	#  1F6
+	Ƿ	ƿ		Ƿ	#  1F7
+	Ǹ	ǹ		Ǹ	#  1F8
+	ǹ	ǹ	Ǹ	Ǹ	#  1F9
+	Ǻ	ǻ		Ǻ	#  1FA
+	ǻ	ǻ	Ǻ	Ǻ	#  1FB
+	Ǽ	ǽ		Ǽ	#  1FC
+	ǽ	ǽ	Ǽ	Ǽ	#  1FD
+	Ǿ	ǿ		Ǿ	#  1FE
+	ǿ	ǿ	Ǿ	Ǿ	#  1FF
+	Ȁ	ȁ		Ȁ	#  200
+	ȁ	ȁ	Ȁ	Ȁ	#  201
+	Ȃ	ȃ		Ȃ	#  202
+	ȃ	ȃ	Ȃ	Ȃ	#  203
+	Ȅ	ȅ		Ȅ	#  204
+	ȅ	ȅ	Ȅ	Ȅ	#  205
+	Ȇ	ȇ		Ȇ	#  206
+	ȇ	ȇ	Ȇ	Ȇ	#  207
+	Ȉ	ȉ		Ȉ	#  208
+	ȉ	ȉ	Ȉ	Ȉ	#  209
+	Ȋ	ȋ		Ȋ	#  20A
+	ȋ	ȋ	Ȋ	Ȋ	#  20B
+	Ȍ	ȍ		Ȍ	#  20C
+	ȍ	ȍ	Ȍ	Ȍ	#  20D
+	Ȏ	ȏ		Ȏ	#  20E
+	ȏ	ȏ	Ȏ	Ȏ	#  20F
+	Ȑ	ȑ		Ȑ	#  210
+	ȑ	ȑ	Ȑ	Ȑ	#  211
+	Ȓ	ȓ		Ȓ	#  212
+	ȓ	ȓ	Ȓ	Ȓ	#  213
+	Ȕ	ȕ		Ȕ	#  214
+	ȕ	ȕ	Ȕ	Ȕ	#  215
+	Ȗ	ȗ		Ȗ	#  216
+	ȗ	ȗ	Ȗ	Ȗ	#  217
+	Ș	ș		Ș	#  218
+	ș	ș	Ș	Ș	#  219
+	Ț	ț		Ț	#  21A
+	ț	ț	Ț	Ț	#  21B
+	Ȝ	ȝ		Ȝ	#  21C
+	ȝ	ȝ	Ȝ	Ȝ	#  21D
+	Ȟ	ȟ		Ȟ	#  21E
+	ȟ	ȟ	Ȟ	Ȟ	#  21F
+	Ƞ	ƞ		Ƞ	#  220
+	ȡ	ȡ			#  221
+	Ȣ	ȣ		Ȣ	#  222
+	ȣ	ȣ	Ȣ	Ȣ	#  223
+	Ȥ	ȥ		Ȥ	#  224
+	ȥ	ȥ	Ȥ	Ȥ	#  225
+	Ȧ	ȧ		Ȧ	#  226
+	ȧ	ȧ	Ȧ	Ȧ	#  227
+	Ȩ	ȩ		Ȩ	#  228
+	ȩ	ȩ	Ȩ	Ȩ	#  229
+	Ȫ	ȫ		Ȫ	#  22A
+	ȫ	ȫ	Ȫ	Ȫ	#  22B
+	Ȭ	ȭ		Ȭ	#  22C
+	ȭ	ȭ	Ȭ	Ȭ	#  22D
+	Ȯ	ȯ		Ȯ	#  22E
+	ȯ	ȯ	Ȯ	Ȯ	#  22F
+	Ȱ	ȱ		Ȱ	#  230
+	ȱ	ȱ	Ȱ	Ȱ	#  231
+	Ȳ	ȳ		Ȳ	#  232
+	ȳ	ȳ	Ȳ	Ȳ	#  233
+	ȴ	ȴ			#  234
+	ȵ	ȵ			#  235
+	ȶ	ȶ			#  236
+	ȷ	ȷ			#  237
+	ȸ	ȸ			#  238
+	ȹ	ȹ			#  239
+	Ⱥ	ⱥ		Ⱥ	#  23A
+	Ȼ	ȼ		Ȼ	#  23B
+	ȼ	ȼ	Ȼ	Ȼ	#  23C
+	Ƚ	ƚ		Ƚ	#  23D
+	Ⱦ	ⱦ		Ⱦ	#  23E
+	ȿ	ȿ			#  23F
+	ɀ	ɀ			#  240
+	Ɂ	ɂ		Ɂ	#  241
+	ɂ	ɂ	Ɂ	Ɂ	#  242
+	Ƀ	ƀ		Ƀ	#  243
+	Ʉ	ʉ		Ʉ	#  244
+	Ʌ	ʌ		Ʌ	#  245
+	Ɇ	ɇ		Ɇ	#  246
+	ɇ	ɇ	Ɇ	Ɇ	#  247
+	Ɉ	ɉ		Ɉ	#  248
+	ɉ	ɉ	Ɉ	Ɉ	#  249
+	Ɋ	ɋ		Ɋ	#  24A
+	ɋ	ɋ	Ɋ	Ɋ	#  24B
+	Ɍ	ɍ		Ɍ	#  24C
+	ɍ	ɍ	Ɍ	Ɍ	#  24D
+	Ɏ	ɏ		Ɏ	#  24E
+	ɏ	ɏ	Ɏ	Ɏ	#  24F
+	ɐ	ɐ	Ɐ	Ɐ	#  250
+	ɑ	ɑ	Ɑ	Ɑ	#  251
+	ɒ	ɒ			#  252
+	ɓ	ɓ	Ɓ	Ɓ	#  253
+	ɔ	ɔ	Ɔ	Ɔ	#  254
+	ɕ	ɕ			#  255
+	ɖ	ɖ	Ɖ	Ɖ	#  256
+	ɗ	ɗ	Ɗ	Ɗ	#  257
+	ɘ	ɘ			#  258
+	ə	ə	Ə	Ə	#  259
+	ɚ	ɚ			#  25A
+	ɛ	ɛ	Ɛ	Ɛ	#  25B
+	ɜ	ɜ			#  25C
+	ɝ	ɝ			#  25D
+	ɞ	ɞ			#  25E
+	ɟ	ɟ			#  25F
+	ɠ	ɠ	Ɠ	Ɠ	#  260
+	ɡ	ɡ			#  261
+	ɢ	ɢ			#  262
+	ɣ	ɣ	Ɣ	Ɣ	#  263
+	ɤ	ɤ			#  264
+	ɥ	ɥ			#  265
+	ɦ	ɦ			#  266
+	ɧ	ɧ			#  267
+	ɨ	ɨ	Ɨ	Ɨ	#  268
+	ɩ	ɩ	Ɩ	Ɩ	#  269
+	ɪ	ɪ			#  26A
+	ɫ	ɫ	Ɫ	Ɫ	#  26B
+	ɬ	ɬ			#  26C
+	ɭ	ɭ			#  26D
+	ɮ	ɮ			#  26E
+	ɯ	ɯ	Ɯ	Ɯ	#  26F
+	ɰ	ɰ			#  270
+	ɱ	ɱ	Ɱ	Ɱ	#  271
+	ɲ	ɲ	Ɲ	Ɲ	#  272
+	ɳ	ɳ			#  273
+	ɴ	ɴ			#  274
+	ɵ	ɵ	Ɵ	Ɵ	#  275
+	ɶ	ɶ			#  276
+	ɷ	ɷ			#  277
+	ɸ	ɸ			#  278
+	ɹ	ɹ			#  279
+	ɺ	ɺ			#  27A
+	ɻ	ɻ			#  27B
+	ɼ	ɼ			#  27C
+	ɽ	ɽ	Ɽ	Ɽ	#  27D
+	ɾ	ɾ			#  27E
+	ɿ	ɿ			#  27F
+	ʀ	ʀ	Ʀ	Ʀ	#  280
+	ʁ	ʁ			#  281
+	ʂ	ʂ			#  282
+	ʃ	ʃ	Ʃ	Ʃ	#  283
+	ʄ	ʄ			#  284
+	ʅ	ʅ			#  285
+	ʆ	ʆ			#  286
+	ʇ	ʇ			#  287
+	ʈ	ʈ	Ʈ	Ʈ	#  288
+	ʉ	ʉ	Ʉ	Ʉ	#  289
+	ʊ	ʊ	Ʊ	Ʊ	#  28A
+	ʋ	ʋ	Ʋ	Ʋ	#  28B
+	ʌ	ʌ	Ʌ	Ʌ	#  28C
+	ʍ	ʍ			#  28D
+	ʎ	ʎ			#  28E
+	ʏ	ʏ			#  28F
+	ʐ	ʐ			#  290
+	ʑ	ʑ			#  291
+	ʒ	ʒ	Ʒ	Ʒ	#  292
+	ʓ	ʓ			#  293
+	ʕ	ʕ			#  295
+	ʖ	ʖ			#  296
+	ʗ	ʗ			#  297
+	ʘ	ʘ			#  298
+	ʙ	ʙ			#  299
+	ʚ	ʚ			#  29A
+	ʛ	ʛ			#  29B
+	ʜ	ʜ			#  29C
+	ʝ	ʝ			#  29D
+	ʞ	ʞ			#  29E
+	ʟ	ʟ			#  29F
+	ʠ	ʠ			#  2A0
+	ʡ	ʡ			#  2A1
+	ʢ	ʢ			#  2A2
+	ʣ	ʣ			#  2A3
+	ʤ	ʤ			#  2A4
+	ʥ	ʥ			#  2A5
+	ʦ	ʦ			#  2A6
+	ʧ	ʧ			#  2A7
+	ʨ	ʨ			#  2A8
+	ʩ	ʩ			#  2A9
+	ʪ	ʪ			#  2AA
+	ʫ	ʫ			#  2AB
+	ʬ	ʬ			#  2AC
+	ʭ	ʭ			#  2AD
+	ʮ	ʮ			#  2AE
+	ʯ	ʯ			#  2AF
+	Ͱ	ͱ		Ͱ	#  370
+	ͱ	ͱ	Ͱ	Ͱ	#  371
+	Ͳ	ͳ		Ͳ	#  372
+	ͳ	ͳ	Ͳ	Ͳ	#  373
+	Ͷ	ͷ		Ͷ	#  376
+	ͷ	ͷ	Ͷ	Ͷ	#  377
+	ͻ	ͻ	Ͻ	Ͻ	#  37B
+	ͼ	ͼ	Ͼ	Ͼ	#  37C
+	ͽ	ͽ	Ͽ	Ͽ	#  37D
+	Ά	ά		Ά	#  386
+	Έ	έ		Έ	#  388
+	Ή	ή		Ή	#  389
+	Ί	ί		Ί	#  38A
+	Ό	ό		Ό	#  38C
+	Ύ	ύ		Ύ	#  38E
+	Ώ	ώ		Ώ	#  38F
+	ΐ	ΐ	Ϊ́	Ϊ́	#  390
+	Α	α		Α	#  391
+	Β	β		Β	#  392
+	Γ	γ		Γ	#  393
+	Δ	δ		Δ	#  394
+	Ε	ε		Ε	#  395
+	Ζ	ζ		Ζ	#  396
+	Η	η		Η	#  397
+	Θ	θ		Θ	#  398
+	Ι	ι		Ι	#  399
+	Κ	κ		Κ	#  39A
+	Λ	λ		Λ	#  39B
+	Μ	μ		Μ	#  39C
+	Ν	ν		Ν	#  39D
+	Ξ	ξ		Ξ	#  39E
+	Ο	ο		Ο	#  39F
+	Π	π		Π	#  3A0
+	Ρ	ρ		Ρ	#  3A1
+	Τ	τ		Τ	#  3A4
+	Υ	υ		Υ	#  3A5
+	Φ	φ		Φ	#  3A6
+	Χ	χ		Χ	#  3A7
+	Ψ	ψ		Ψ	#  3A8
+	Ω	ω		Ω	#  3A9
+	Ϊ	ϊ		Ϊ	#  3AA
+	Ϋ	ϋ		Ϋ	#  3AB
+	ά	ά	Ά	Ά	#  3AC
+	έ	έ	Έ	Έ	#  3AD
+	ή	ή	Ή	Ή	#  3AE
+	ί	ί	Ί	Ί	#  3AF
+	ΰ	ΰ	Ϋ́	Ϋ́	#  3B0
+	α	α	Α	Α	#  3B1
+	β	β	Β	Β	#  3B2
+	γ	γ	Γ	Γ	#  3B3
+	δ	δ	Δ	Δ	#  3B4
+	ε	ε	Ε	Ε	#  3B5
+	ζ	ζ	Ζ	Ζ	#  3B6
+	η	η	Η	Η	#  3B7
+	θ	θ	Θ	Θ	#  3B8
+	ι	ι	Ι	Ι	#  3B9
+	κ	κ	Κ	Κ	#  3BA
+	λ	λ	Λ	Λ	#  3BB
+	μ	μ	Μ	Μ	#  3BC
+	ν	ν	Ν	Ν	#  3BD
+	ξ	ξ	Ξ	Ξ	#  3BE
+	ο	ο	Ο	Ο	#  3BF
+	π	π	Π	Π	#  3C0
+	ρ	ρ	Ρ	Ρ	#  3C1
+	ς	ς	Σ	Σ	#  3C2
+	σ	σ	Σ	Σ	#  3C3
+	τ	τ	Τ	Τ	#  3C4
+	υ	υ	Υ	Υ	#  3C5
+	φ	φ	Φ	Φ	#  3C6
+	χ	χ	Χ	Χ	#  3C7
+	ψ	ψ	Ψ	Ψ	#  3C8
+	ω	ω	Ω	Ω	#  3C9
+	ϊ	ϊ	Ϊ	Ϊ	#  3CA
+	ϋ	ϋ	Ϋ	Ϋ	#  3CB
+	ό	ό	Ό	Ό	#  3CC
+	ύ	ύ	Ύ	Ύ	#  3CD
+	ώ	ώ	Ώ	Ώ	#  3CE
+	Ϗ	ϗ		Ϗ	#  3CF
+	ϐ	ϐ	Β	Β	#  3D0
+	ϑ	ϑ	Θ	Θ	#  3D1
+	ϒ			ϒ	#  3D2
+	ϓ			ϓ	#  3D3
+	ϔ			ϔ	#  3D4
+	ϕ	ϕ	Φ	Φ	#  3D5
+	ϖ	ϖ	Π	Π	#  3D6
+	ϗ	ϗ	Ϗ	Ϗ	#  3D7
+	Ϙ	ϙ		Ϙ	#  3D8
+	ϙ	ϙ	Ϙ	Ϙ	#  3D9
+	Ϛ	ϛ		Ϛ	#  3DA
+	ϛ	ϛ	Ϛ	Ϛ	#  3DB
+	Ϝ	ϝ		Ϝ	#  3DC
+	ϝ	ϝ	Ϝ	Ϝ	#  3DD
+	Ϟ	ϟ		Ϟ	#  3DE
+	ϟ	ϟ	Ϟ	Ϟ	#  3DF
+	Ϡ	ϡ		Ϡ	#  3E0
+	ϡ	ϡ	Ϡ	Ϡ	#  3E1
+	Ϣ	ϣ		Ϣ	#  3E2
+	ϣ	ϣ	Ϣ	Ϣ	#  3E3
+	Ϥ	ϥ		Ϥ	#  3E4
+	ϥ	ϥ	Ϥ	Ϥ	#  3E5
+	Ϧ	ϧ		Ϧ	#  3E6
+	ϧ	ϧ	Ϧ	Ϧ	#  3E7
+	Ϩ	ϩ		Ϩ	#  3E8
+	ϩ	ϩ	Ϩ	Ϩ	#  3E9
+	Ϫ	ϫ		Ϫ	#  3EA
+	ϫ	ϫ	Ϫ	Ϫ	#  3EB
+	Ϭ	ϭ		Ϭ	#  3EC
+	ϭ	ϭ	Ϭ	Ϭ	#  3ED
+	Ϯ	ϯ		Ϯ	#  3EE
+	ϯ	ϯ	Ϯ	Ϯ	#  3EF
+	ϰ	ϰ	Κ	Κ	#  3F0
+	ϱ	ϱ	Ρ	Ρ	#  3F1
+	ϲ	ϲ	Ϲ	Ϲ	#  3F2
+	ϳ	ϳ			#  3F3
+	ϴ	θ		ϴ	#  3F4
+	ϵ	ϵ	Ε	Ε	#  3F5
+	Ϸ	ϸ		Ϸ	#  3F7
+	ϸ	ϸ	Ϸ	Ϸ	#  3F8
+	Ϲ	ϲ		Ϲ	#  3F9
+	Ϻ	ϻ		Ϻ	#  3FA
+	ϻ	ϻ	Ϻ	Ϻ	#  3FB
+	ϼ	ϼ			#  3FC
+	Ͻ	ͻ		Ͻ	#  3FD
+	Ͼ	ͼ		Ͼ	#  3FE
+	Ͽ	ͽ		Ͽ	#  3FF
+	Ѐ	ѐ		Ѐ	#  400
+	Ё	ё		Ё	#  401
+	Ђ	ђ		Ђ	#  402
+	Ѓ	ѓ		Ѓ	#  403
+	Є	є		Є	#  404
+	Ѕ	ѕ		Ѕ	#  405
+	І	і		І	#  406
+	Ї	ї		Ї	#  407
+	Ј	ј		Ј	#  408
+	Љ	љ		Љ	#  409
+	Њ	њ		Њ	#  40A
+	Ћ	ћ		Ћ	#  40B
+	Ќ	ќ		Ќ	#  40C
+	Ѝ	ѝ		Ѝ	#  40D
+	Ў	ў		Ў	#  40E
+	Џ	џ		Џ	#  40F
+	А	а		А	#  410
+	Б	б		Б	#  411
+	В	в		В	#  412
+	Г	г		Г	#  413
+	Д	д		Д	#  414
+	Е	е		Е	#  415
+	Ж	ж		Ж	#  416
+	З	з		З	#  417
+	И	и		И	#  418
+	Й	й		Й	#  419
+	К	к		К	#  41A
+	Л	л		Л	#  41B
+	М	м		М	#  41C
+	Н	н		Н	#  41D
+	О	о		О	#  41E
+	П	п		П	#  41F
+	Р	р		Р	#  420
+	С	с		С	#  421
+	Т	т		Т	#  422
+	У	у		У	#  423
+	Ф	ф		Ф	#  424
+	Х	х		Х	#  425
+	Ц	ц		Ц	#  426
+	Ч	ч		Ч	#  427
+	Ш	ш		Ш	#  428
+	Щ	щ		Щ	#  429
+	Ъ	ъ		Ъ	#  42A
+	Ы	ы		Ы	#  42B
+	Ь	ь		Ь	#  42C
+	Э	э		Э	#  42D
+	Ю	ю		Ю	#  42E
+	Я	я		Я	#  42F
+	а	а	А	А	#  430
+	б	б	Б	Б	#  431
+	в	в	В	В	#  432
+	г	г	Г	Г	#  433
+	д	д	Д	Д	#  434
+	е	е	Е	Е	#  435
+	ж	ж	Ж	Ж	#  436
+	з	з	З	З	#  437
+	и	и	И	И	#  438
+	й	й	Й	Й	#  439
+	к	к	К	К	#  43A
+	л	л	Л	Л	#  43B
+	м	м	М	М	#  43C
+	н	н	Н	Н	#  43D
+	о	о	О	О	#  43E
+	п	п	П	П	#  43F
+	р	р	Р	Р	#  440
+	с	с	С	С	#  441
+	т	т	Т	Т	#  442
+	у	у	У	У	#  443
+	ф	ф	Ф	Ф	#  444
+	х	х	Х	Х	#  445
+	ц	ц	Ц	Ц	#  446
+	ч	ч	Ч	Ч	#  447
+	ш	ш	Ш	Ш	#  448
+	щ	щ	Щ	Щ	#  449
+	ъ	ъ	Ъ	Ъ	#  44A
+	ы	ы	Ы	Ы	#  44B
+	ь	ь	Ь	Ь	#  44C
+	э	э	Э	Э	#  44D
+	ю	ю	Ю	Ю	#  44E
+	я	я	Я	Я	#  44F
+	ѐ	ѐ	Ѐ	Ѐ	#  450
+	ё	ё	Ё	Ё	#  451
+	ђ	ђ	Ђ	Ђ	#  452
+	ѓ	ѓ	Ѓ	Ѓ	#  453
+	є	є	Є	Є	#  454
+	ѕ	ѕ	Ѕ	Ѕ	#  455
+	і	і	І	І	#  456
+	ї	ї	Ї	Ї	#  457
+	ј	ј	Ј	Ј	#  458
+	љ	љ	Љ	Љ	#  459
+	њ	њ	Њ	Њ	#  45A
+	ћ	ћ	Ћ	Ћ	#  45B
+	ќ	ќ	Ќ	Ќ	#  45C
+	ѝ	ѝ	Ѝ	Ѝ	#  45D
+	ў	ў	Ў	Ў	#  45E
+	џ	џ	Џ	Џ	#  45F
+	Ѡ	ѡ		Ѡ	#  460
+	ѡ	ѡ	Ѡ	Ѡ	#  461
+	Ѣ	ѣ		Ѣ	#  462
+	ѣ	ѣ	Ѣ	Ѣ	#  463
+	Ѥ	ѥ		Ѥ	#  464
+	ѥ	ѥ	Ѥ	Ѥ	#  465
+	Ѧ	ѧ		Ѧ	#  466
+	ѧ	ѧ	Ѧ	Ѧ	#  467
+	Ѩ	ѩ		Ѩ	#  468
+	ѩ	ѩ	Ѩ	Ѩ	#  469
+	Ѫ	ѫ		Ѫ	#  46A
+	ѫ	ѫ	Ѫ	Ѫ	#  46B
+	Ѭ	ѭ		Ѭ	#  46C
+	ѭ	ѭ	Ѭ	Ѭ	#  46D
+	Ѯ	ѯ		Ѯ	#  46E
+	ѯ	ѯ	Ѯ	Ѯ	#  46F
+	Ѱ	ѱ		Ѱ	#  470
+	ѱ	ѱ	Ѱ	Ѱ	#  471
+	Ѳ	ѳ		Ѳ	#  472
+	ѳ	ѳ	Ѳ	Ѳ	#  473
+	Ѵ	ѵ		Ѵ	#  474
+	ѵ	ѵ	Ѵ	Ѵ	#  475
+	Ѷ	ѷ		Ѷ	#  476
+	ѷ	ѷ	Ѷ	Ѷ	#  477
+	Ѹ	ѹ		Ѹ	#  478
+	ѹ	ѹ	Ѹ	Ѹ	#  479
+	Ѻ	ѻ		Ѻ	#  47A
+	ѻ	ѻ	Ѻ	Ѻ	#  47B
+	Ѽ	ѽ		Ѽ	#  47C
+	ѽ	ѽ	Ѽ	Ѽ	#  47D
+	Ѿ	ѿ		Ѿ	#  47E
+	ѿ	ѿ	Ѿ	Ѿ	#  47F
+	Ҁ	ҁ		Ҁ	#  480
+	ҁ	ҁ	Ҁ	Ҁ	#  481
+	Ҋ	ҋ		Ҋ	#  48A
+	ҋ	ҋ	Ҋ	Ҋ	#  48B
+	Ҍ	ҍ		Ҍ	#  48C
+	ҍ	ҍ	Ҍ	Ҍ	#  48D
+	Ҏ	ҏ		Ҏ	#  48E
+	ҏ	ҏ	Ҏ	Ҏ	#  48F
+	Ґ	ґ		Ґ	#  490
+	ґ	ґ	Ґ	Ґ	#  491
+	Ғ	ғ		Ғ	#  492
+	ғ	ғ	Ғ	Ғ	#  493
+	Ҕ	ҕ		Ҕ	#  494
+	ҕ	ҕ	Ҕ	Ҕ	#  495
+	Җ	җ		Җ	#  496
+	җ	җ	Җ	Җ	#  497
+	Ҙ	ҙ		Ҙ	#  498
+	ҙ	ҙ	Ҙ	Ҙ	#  499
+	Қ	қ		Қ	#  49A
+	қ	қ	Қ	Қ	#  49B
+	Ҝ	ҝ		Ҝ	#  49C
+	ҝ	ҝ	Ҝ	Ҝ	#  49D
+	Ҟ	ҟ		Ҟ	#  49E
+	ҟ	ҟ	Ҟ	Ҟ	#  49F
+	Ҡ	ҡ		Ҡ	#  4A0
+	ҡ	ҡ	Ҡ	Ҡ	#  4A1
+	Ң	ң		Ң	#  4A2
+	ң	ң	Ң	Ң	#  4A3
+	Ҥ	ҥ		Ҥ	#  4A4
+	ҥ	ҥ	Ҥ	Ҥ	#  4A5
+	Ҧ	ҧ		Ҧ	#  4A6
+	ҧ	ҧ	Ҧ	Ҧ	#  4A7
+	Ҩ	ҩ		Ҩ	#  4A8
+	ҩ	ҩ	Ҩ	Ҩ	#  4A9
+	Ҫ	ҫ		Ҫ	#  4AA
+	ҫ	ҫ	Ҫ	Ҫ	#  4AB
+	Ҭ	ҭ		Ҭ	#  4AC
+	ҭ	ҭ	Ҭ	Ҭ	#  4AD
+	Ү	ү		Ү	#  4AE
+	ү	ү	Ү	Ү	#  4AF
+	Ұ	ұ		Ұ	#  4B0
+	ұ	ұ	Ұ	Ұ	#  4B1
+	Ҳ	ҳ		Ҳ	#  4B2
+	ҳ	ҳ	Ҳ	Ҳ	#  4B3
+	Ҵ	ҵ		Ҵ	#  4B4
+	ҵ	ҵ	Ҵ	Ҵ	#  4B5
+	Ҷ	ҷ		Ҷ	#  4B6
+	ҷ	ҷ	Ҷ	Ҷ	#  4B7
+	Ҹ	ҹ		Ҹ	#  4B8
+	ҹ	ҹ	Ҹ	Ҹ	#  4B9
+	Һ	һ		Һ	#  4BA
+	һ	һ	Һ	Һ	#  4BB
+	Ҽ	ҽ		Ҽ	#  4BC
+	ҽ	ҽ	Ҽ	Ҽ	#  4BD
+	Ҿ	ҿ		Ҿ	#  4BE
+	ҿ	ҿ	Ҿ	Ҿ	#  4BF
+	Ӏ	ӏ		Ӏ	#  4C0
+	Ӂ	ӂ		Ӂ	#  4C1
+	ӂ	ӂ	Ӂ	Ӂ	#  4C2
+	Ӄ	ӄ		Ӄ	#  4C3
+	ӄ	ӄ	Ӄ	Ӄ	#  4C4
+	Ӆ	ӆ		Ӆ	#  4C5
+	ӆ	ӆ	Ӆ	Ӆ	#  4C6
+	Ӈ	ӈ		Ӈ	#  4C7
+	ӈ	ӈ	Ӈ	Ӈ	#  4C8
+	Ӊ	ӊ		Ӊ	#  4C9
+	ӊ	ӊ	Ӊ	Ӊ	#  4CA
+	Ӌ	ӌ		Ӌ	#  4CB
+	ӌ	ӌ	Ӌ	Ӌ	#  4CC
+	Ӎ	ӎ		Ӎ	#  4CD
+	ӎ	ӎ	Ӎ	Ӎ	#  4CE
+	ӏ	ӏ	Ӏ	Ӏ	#  4CF
+	Ӑ	ӑ		Ӑ	#  4D0
+	ӑ	ӑ	Ӑ	Ӑ	#  4D1
+	Ӓ	ӓ		Ӓ	#  4D2
+	ӓ	ӓ	Ӓ	Ӓ	#  4D3
+	Ӕ	ӕ		Ӕ	#  4D4
+	ӕ	ӕ	Ӕ	Ӕ	#  4D5
+	Ӗ	ӗ		Ӗ	#  4D6
+	ӗ	ӗ	Ӗ	Ӗ	#  4D7
+	Ә	ә		Ә	#  4D8
+	ә	ә	Ә	Ә	#  4D9
+	Ӛ	ӛ		Ӛ	#  4DA
+	ӛ	ӛ	Ӛ	Ӛ	#  4DB
+	Ӝ	ӝ		Ӝ	#  4DC
+	ӝ	ӝ	Ӝ	Ӝ	#  4DD
+	Ӟ	ӟ		Ӟ	#  4DE
+	ӟ	ӟ	Ӟ	Ӟ	#  4DF
+	Ӡ	ӡ		Ӡ	#  4E0
+	ӡ	ӡ	Ӡ	Ӡ	#  4E1
+	Ӣ	ӣ		Ӣ	#  4E2
+	ӣ	ӣ	Ӣ	Ӣ	#  4E3
+	Ӥ	ӥ		Ӥ	#  4E4
+	ӥ	ӥ	Ӥ	Ӥ	#  4E5
+	Ӧ	ӧ		Ӧ	#  4E6
+	ӧ	ӧ	Ӧ	Ӧ	#  4E7
+	Ө	ө		Ө	#  4E8
+	ө	ө	Ө	Ө	#  4E9
+	Ӫ	ӫ		Ӫ	#  4EA
+	ӫ	ӫ	Ӫ	Ӫ	#  4EB
+	Ӭ	ӭ		Ӭ	#  4EC
+	ӭ	ӭ	Ӭ	Ӭ	#  4ED
+	Ӯ	ӯ		Ӯ	#  4EE
+	ӯ	ӯ	Ӯ	Ӯ	#  4EF
+	Ӱ	ӱ		Ӱ	#  4F0
+	ӱ	ӱ	Ӱ	Ӱ	#  4F1
+	Ӳ	ӳ		Ӳ	#  4F2
+	ӳ	ӳ	Ӳ	Ӳ	#  4F3
+	Ӵ	ӵ		Ӵ	#  4F4
+	ӵ	ӵ	Ӵ	Ӵ	#  4F5
+	Ӷ	ӷ		Ӷ	#  4F6
+	ӷ	ӷ	Ӷ	Ӷ	#  4F7
+	Ӹ	ӹ		Ӹ	#  4F8
+	ӹ	ӹ	Ӹ	Ӹ	#  4F9
+	Ӻ	ӻ		Ӻ	#  4FA
+	ӻ	ӻ	Ӻ	Ӻ	#  4FB
+	Ӽ	ӽ		Ӽ	#  4FC
+	ӽ	ӽ	Ӽ	Ӽ	#  4FD
+	Ӿ	ӿ		Ӿ	#  4FE
+	ӿ	ӿ	Ӿ	Ӿ	#  4FF
+	Ԁ	ԁ		Ԁ	#  500
+	ԁ	ԁ	Ԁ	Ԁ	#  501
+	Ԃ	ԃ		Ԃ	#  502
+	ԃ	ԃ	Ԃ	Ԃ	#  503
+	Ԅ	ԅ		Ԅ	#  504
+	ԅ	ԅ	Ԅ	Ԅ	#  505
+	Ԇ	ԇ		Ԇ	#  506
+	ԇ	ԇ	Ԇ	Ԇ	#  507
+	Ԉ	ԉ		Ԉ	#  508
+	ԉ	ԉ	Ԉ	Ԉ	#  509
+	Ԋ	ԋ		Ԋ	#  50A
+	ԋ	ԋ	Ԋ	Ԋ	#  50B
+	Ԍ	ԍ		Ԍ	#  50C
+	ԍ	ԍ	Ԍ	Ԍ	#  50D
+	Ԏ	ԏ		Ԏ	#  50E
+	ԏ	ԏ	Ԏ	Ԏ	#  50F
+	Ԑ	ԑ		Ԑ	#  510
+	ԑ	ԑ	Ԑ	Ԑ	#  511
+	Ԓ	ԓ		Ԓ	#  512
+	ԓ	ԓ	Ԓ	Ԓ	#  513
+	Ԕ	ԕ		Ԕ	#  514
+	ԕ	ԕ	Ԕ	Ԕ	#  515
+	Ԗ	ԗ		Ԗ	#  516
+	ԗ	ԗ	Ԗ	Ԗ	#  517
+	Ԙ	ԙ		Ԙ	#  518
+	ԙ	ԙ	Ԙ	Ԙ	#  519
+	Ԛ	ԛ		Ԛ	#  51A
+	ԛ	ԛ	Ԛ	Ԛ	#  51B
+	Ԝ	ԝ		Ԝ	#  51C
+	ԝ	ԝ	Ԝ	Ԝ	#  51D
+	Ԟ	ԟ		Ԟ	#  51E
+	ԟ	ԟ	Ԟ	Ԟ	#  51F
+	Ԡ	ԡ		Ԡ	#  520
+	ԡ	ԡ	Ԡ	Ԡ	#  521
+	Ԣ	ԣ		Ԣ	#  522
+	ԣ	ԣ	Ԣ	Ԣ	#  523
+	Ա	ա		Ա	#  531
+	Բ	բ		Բ	#  532
+	Գ	գ		Գ	#  533
+	Դ	դ		Դ	#  534
+	Ե	ե		Ե	#  535
+	Զ	զ		Զ	#  536
+	Է	է		Է	#  537
+	Ը	ը		Ը	#  538
+	Թ	թ		Թ	#  539
+	Ժ	ժ		Ժ	#  53A
+	Ի	ի		Ի	#  53B
+	Լ	լ		Լ	#  53C
+	Խ	խ		Խ	#  53D
+	Ծ	ծ		Ծ	#  53E
+	Կ	կ		Կ	#  53F
+	Հ	հ		Հ	#  540
+	Ձ	ձ		Ձ	#  541
+	Ղ	ղ		Ղ	#  542
+	Ճ	ճ		Ճ	#  543
+	Մ	մ		Մ	#  544
+	Յ	յ		Յ	#  545
+	Ն	ն		Ն	#  546
+	Շ	շ		Շ	#  547
+	Ո	ո		Ո	#  548
+	Չ	չ		Չ	#  549
+	Պ	պ		Պ	#  54A
+	Ջ	ջ		Ջ	#  54B
+	Ռ	ռ		Ռ	#  54C
+	Ս	ս		Ս	#  54D
+	Վ	վ		Վ	#  54E
+	Տ	տ		Տ	#  54F
+	Ր	ր		Ր	#  550
+	Ց	ց		Ց	#  551
+	Ւ	ւ		Ւ	#  552
+	Փ	փ		Փ	#  553
+	Ք	ք		Ք	#  554
+	Օ	օ		Օ	#  555
+	Ֆ	ֆ		Ֆ	#  556
+	ա	ա	Ա	Ա	#  561
+	բ	բ	Բ	Բ	#  562
+	գ	գ	Գ	Գ	#  563
+	դ	դ	Դ	Դ	#  564
+	ե	ե	Ե	Ե	#  565
+	զ	զ	Զ	Զ	#  566
+	է	է	Է	Է	#  567
+	ը	ը	Ը	Ը	#  568
+	թ	թ	Թ	Թ	#  569
+	ժ	ժ	Ժ	Ժ	#  56A
+	ի	ի	Ի	Ի	#  56B
+	լ	լ	Լ	Լ	#  56C
+	խ	խ	Խ	Խ	#  56D
+	ծ	ծ	Ծ	Ծ	#  56E
+	կ	կ	Կ	Կ	#  56F
+	հ	հ	Հ	Հ	#  570
+	ձ	ձ	Ձ	Ձ	#  571
+	ղ	ղ	Ղ	Ղ	#  572
+	ճ	ճ	Ճ	Ճ	#  573
+	մ	մ	Մ	Մ	#  574
+	յ	յ	Յ	Յ	#  575
+	ն	ն	Ն	Ն	#  576
+	շ	շ	Շ	Շ	#  577
+	ո	ո	Ո	Ո	#  578
+	չ	չ	Չ	Չ	#  579
+	պ	պ	Պ	Պ	#  57A
+	ջ	ջ	Ջ	Ջ	#  57B
+	ռ	ռ	Ռ	Ռ	#  57C
+	ս	ս	Ս	Ս	#  57D
+	վ	վ	Վ	Վ	#  57E
+	տ	տ	Տ	Տ	#  57F
+	ր	ր	Ր	Ր	#  580
+	ց	ց	Ց	Ց	#  581
+	ւ	ւ	Ւ	Ւ	#  582
+	փ	փ	Փ	Փ	#  583
+	ք	ք	Ք	Ք	#  584
+	օ	օ	Օ	Օ	#  585
+	ֆ	ֆ	Ֆ	Ֆ	#  586
+	և	և	Եւ	ԵՒ	#  587
+	Ⴀ	ⴀ		Ⴀ	# 10A0
+	Ⴁ	ⴁ		Ⴁ	# 10A1
+	Ⴂ	ⴂ		Ⴂ	# 10A2
+	Ⴃ	ⴃ		Ⴃ	# 10A3
+	Ⴄ	ⴄ		Ⴄ	# 10A4
+	Ⴅ	ⴅ		Ⴅ	# 10A5
+	Ⴆ	ⴆ		Ⴆ	# 10A6
+	Ⴇ	ⴇ		Ⴇ	# 10A7
+	Ⴈ	ⴈ		Ⴈ	# 10A8
+	Ⴉ	ⴉ		Ⴉ	# 10A9
+	Ⴊ	ⴊ		Ⴊ	# 10AA
+	Ⴋ	ⴋ		Ⴋ	# 10AB
+	Ⴌ	ⴌ		Ⴌ	# 10AC
+	Ⴍ	ⴍ		Ⴍ	# 10AD
+	Ⴎ	ⴎ		Ⴎ	# 10AE
+	Ⴏ	ⴏ		Ⴏ	# 10AF
+	Ⴐ	ⴐ		Ⴐ	# 10B0
+	Ⴑ	ⴑ		Ⴑ	# 10B1
+	Ⴒ	ⴒ		Ⴒ	# 10B2
+	Ⴓ	ⴓ		Ⴓ	# 10B3
+	Ⴔ	ⴔ		Ⴔ	# 10B4
+	Ⴕ	ⴕ		Ⴕ	# 10B5
+	Ⴖ	ⴖ		Ⴖ	# 10B6
+	Ⴗ	ⴗ		Ⴗ	# 10B7
+	Ⴘ	ⴘ		Ⴘ	# 10B8
+	Ⴙ	ⴙ		Ⴙ	# 10B9
+	Ⴚ	ⴚ		Ⴚ	# 10BA
+	Ⴛ	ⴛ		Ⴛ	# 10BB
+	Ⴜ	ⴜ		Ⴜ	# 10BC
+	Ⴝ	ⴝ		Ⴝ	# 10BD
+	Ⴞ	ⴞ		Ⴞ	# 10BE
+	Ⴟ	ⴟ		Ⴟ	# 10BF
+	Ⴠ	ⴠ		Ⴠ	# 10C0
+	Ⴡ	ⴡ		Ⴡ	# 10C1
+	Ⴢ	ⴢ		Ⴢ	# 10C2
+	Ⴣ	ⴣ		Ⴣ	# 10C3
+	Ⴤ	ⴤ		Ⴤ	# 10C4
+	Ⴥ	ⴥ		Ⴥ	# 10C5
+	ᴀ	ᴀ			# 1D00
+	ᴁ	ᴁ			# 1D01
+	ᴂ	ᴂ			# 1D02
+	ᴃ	ᴃ			# 1D03
+	ᴄ	ᴄ			# 1D04
+	ᴅ	ᴅ			# 1D05
+	ᴆ	ᴆ			# 1D06
+	ᴇ	ᴇ			# 1D07
+	ᴈ	ᴈ			# 1D08
+	ᴉ	ᴉ			# 1D09
+	ᴊ	ᴊ			# 1D0A
+	ᴋ	ᴋ			# 1D0B
+	ᴌ	ᴌ			# 1D0C
+	ᴍ	ᴍ			# 1D0D
+	ᴎ	ᴎ			# 1D0E
+	ᴏ	ᴏ			# 1D0F
+	ᴐ	ᴐ			# 1D10
+	ᴑ	ᴑ			# 1D11
+	ᴒ	ᴒ			# 1D12
+	ᴓ	ᴓ			# 1D13
+	ᴔ	ᴔ			# 1D14
+	ᴕ	ᴕ			# 1D15
+	ᴖ	ᴖ			# 1D16
+	ᴗ	ᴗ			# 1D17
+	ᴘ	ᴘ			# 1D18
+	ᴙ	ᴙ			# 1D19
+	ᴚ	ᴚ			# 1D1A
+	ᴛ	ᴛ			# 1D1B
+	ᴜ	ᴜ			# 1D1C
+	ᴝ	ᴝ			# 1D1D
+	ᴞ	ᴞ			# 1D1E
+	ᴟ	ᴟ			# 1D1F
+	ᴠ	ᴠ			# 1D20
+	ᴡ	ᴡ			# 1D21
+	ᴢ	ᴢ			# 1D22
+	ᴣ	ᴣ			# 1D23
+	ᴤ	ᴤ			# 1D24
+	ᴥ	ᴥ			# 1D25
+	ᴦ	ᴦ			# 1D26
+	ᴧ	ᴧ			# 1D27
+	ᴨ	ᴨ			# 1D28
+	ᴩ	ᴩ			# 1D29
+	ᴪ	ᴪ			# 1D2A
+	ᴫ	ᴫ			# 1D2B
+	ᵢ	ᵢ			# 1D62
+	ᵣ	ᵣ			# 1D63
+	ᵤ	ᵤ			# 1D64
+	ᵥ	ᵥ			# 1D65
+	ᵦ	ᵦ			# 1D66
+	ᵧ	ᵧ			# 1D67
+	ᵨ	ᵨ			# 1D68
+	ᵩ	ᵩ			# 1D69
+	ᵪ	ᵪ			# 1D6A
+	ᵫ	ᵫ			# 1D6B
+	ᵬ	ᵬ			# 1D6C
+	ᵭ	ᵭ			# 1D6D
+	ᵮ	ᵮ			# 1D6E
+	ᵯ	ᵯ			# 1D6F
+	ᵰ	ᵰ			# 1D70
+	ᵱ	ᵱ			# 1D71
+	ᵲ	ᵲ			# 1D72
+	ᵳ	ᵳ			# 1D73
+	ᵴ	ᵴ			# 1D74
+	ᵵ	ᵵ			# 1D75
+	ᵶ	ᵶ			# 1D76
+	ᵷ	ᵷ			# 1D77
+	ᵹ	ᵹ	Ᵹ	Ᵹ	# 1D79
+	ᵺ	ᵺ			# 1D7A
+	ᵻ	ᵻ			# 1D7B
+	ᵼ	ᵼ			# 1D7C
+	ᵽ	ᵽ	Ᵽ	Ᵽ	# 1D7D
+	ᵾ	ᵾ			# 1D7E
+	ᵿ	ᵿ			# 1D7F
+	ᶀ	ᶀ			# 1D80
+	ᶁ	ᶁ			# 1D81
+	ᶂ	ᶂ			# 1D82
+	ᶃ	ᶃ			# 1D83
+	ᶄ	ᶄ			# 1D84
+	ᶅ	ᶅ			# 1D85
+	ᶆ	ᶆ			# 1D86
+	ᶇ	ᶇ			# 1D87
+	ᶈ	ᶈ			# 1D88
+	ᶉ	ᶉ			# 1D89
+	ᶊ	ᶊ			# 1D8A
+	ᶋ	ᶋ			# 1D8B
+	ᶌ	ᶌ			# 1D8C
+	ᶍ	ᶍ			# 1D8D
+	ᶎ	ᶎ			# 1D8E
+	ᶏ	ᶏ			# 1D8F
+	ᶐ	ᶐ			# 1D90
+	ᶑ	ᶑ			# 1D91
+	ᶒ	ᶒ			# 1D92
+	ᶓ	ᶓ			# 1D93
+	ᶔ	ᶔ			# 1D94
+	ᶕ	ᶕ			# 1D95
+	ᶖ	ᶖ			# 1D96
+	ᶗ	ᶗ			# 1D97
+	ᶘ	ᶘ			# 1D98
+	ᶙ	ᶙ			# 1D99
+	ᶚ	ᶚ			# 1D9A
+	Ḁ	ḁ		Ḁ	# 1E00
+	ḁ	ḁ	Ḁ	Ḁ	# 1E01
+	Ḃ	ḃ		Ḃ	# 1E02
+	ḃ	ḃ	Ḃ	Ḃ	# 1E03
+	Ḅ	ḅ		Ḅ	# 1E04
+	ḅ	ḅ	Ḅ	Ḅ	# 1E05
+	Ḇ	ḇ		Ḇ	# 1E06
+	ḇ	ḇ	Ḇ	Ḇ	# 1E07
+	Ḉ	ḉ		Ḉ	# 1E08
+	ḉ	ḉ	Ḉ	Ḉ	# 1E09
+	Ḋ	ḋ		Ḋ	# 1E0A
+	ḋ	ḋ	Ḋ	Ḋ	# 1E0B
+	Ḍ	ḍ		Ḍ	# 1E0C
+	ḍ	ḍ	Ḍ	Ḍ	# 1E0D
+	Ḏ	ḏ		Ḏ	# 1E0E
+	ḏ	ḏ	Ḏ	Ḏ	# 1E0F
+	Ḑ	ḑ		Ḑ	# 1E10
+	ḑ	ḑ	Ḑ	Ḑ	# 1E11
+	Ḓ	ḓ		Ḓ	# 1E12
+	ḓ	ḓ	Ḓ	Ḓ	# 1E13
+	Ḕ	ḕ		Ḕ	# 1E14
+	ḕ	ḕ	Ḕ	Ḕ	# 1E15
+	Ḗ	ḗ		Ḗ	# 1E16
+	ḗ	ḗ	Ḗ	Ḗ	# 1E17
+	Ḙ	ḙ		Ḙ	# 1E18
+	ḙ	ḙ	Ḙ	Ḙ	# 1E19
+	Ḛ	ḛ		Ḛ	# 1E1A
+	ḛ	ḛ	Ḛ	Ḛ	# 1E1B
+	Ḝ	ḝ		Ḝ	# 1E1C
+	ḝ	ḝ	Ḝ	Ḝ	# 1E1D
+	Ḟ	ḟ		Ḟ	# 1E1E
+	ḟ	ḟ	Ḟ	Ḟ	# 1E1F
+	Ḡ	ḡ		Ḡ	# 1E20
+	ḡ	ḡ	Ḡ	Ḡ	# 1E21
+	Ḣ	ḣ		Ḣ	# 1E22
+	ḣ	ḣ	Ḣ	Ḣ	# 1E23
+	Ḥ	ḥ		Ḥ	# 1E24
+	ḥ	ḥ	Ḥ	Ḥ	# 1E25
+	Ḧ	ḧ		Ḧ	# 1E26
+	ḧ	ḧ	Ḧ	Ḧ	# 1E27
+	Ḩ	ḩ		Ḩ	# 1E28
+	ḩ	ḩ	Ḩ	Ḩ	# 1E29
+	Ḫ	ḫ		Ḫ	# 1E2A
+	ḫ	ḫ	Ḫ	Ḫ	# 1E2B
+	Ḭ	ḭ		Ḭ	# 1E2C
+	ḭ	ḭ	Ḭ	Ḭ	# 1E2D
+	Ḯ	ḯ		Ḯ	# 1E2E
+	ḯ	ḯ	Ḯ	Ḯ	# 1E2F
+	Ḱ	ḱ		Ḱ	# 1E30
+	ḱ	ḱ	Ḱ	Ḱ	# 1E31
+	Ḳ	ḳ		Ḳ	# 1E32
+	ḳ	ḳ	Ḳ	Ḳ	# 1E33
+	Ḵ	ḵ		Ḵ	# 1E34
+	ḵ	ḵ	Ḵ	Ḵ	# 1E35
+	Ḷ	ḷ		Ḷ	# 1E36
+	ḷ	ḷ	Ḷ	Ḷ	# 1E37
+	Ḹ	ḹ		Ḹ	# 1E38
+	ḹ	ḹ	Ḹ	Ḹ	# 1E39
+	Ḻ	ḻ		Ḻ	# 1E3A
+	ḻ	ḻ	Ḻ	Ḻ	# 1E3B
+	Ḽ	ḽ		Ḽ	# 1E3C
+	ḽ	ḽ	Ḽ	Ḽ	# 1E3D
+	Ḿ	ḿ		Ḿ	# 1E3E
+	ḿ	ḿ	Ḿ	Ḿ	# 1E3F
+	Ṁ	ṁ		Ṁ	# 1E40
+	ṁ	ṁ	Ṁ	Ṁ	# 1E41
+	Ṃ	ṃ		Ṃ	# 1E42
+	ṃ	ṃ	Ṃ	Ṃ	# 1E43
+	Ṅ	ṅ		Ṅ	# 1E44
+	ṅ	ṅ	Ṅ	Ṅ	# 1E45
+	Ṇ	ṇ		Ṇ	# 1E46
+	ṇ	ṇ	Ṇ	Ṇ	# 1E47
+	Ṉ	ṉ		Ṉ	# 1E48
+	ṉ	ṉ	Ṉ	Ṉ	# 1E49
+	Ṋ	ṋ		Ṋ	# 1E4A
+	ṋ	ṋ	Ṋ	Ṋ	# 1E4B
+	Ṍ	ṍ		Ṍ	# 1E4C
+	ṍ	ṍ	Ṍ	Ṍ	# 1E4D
+	Ṏ	ṏ		Ṏ	# 1E4E
+	ṏ	ṏ	Ṏ	Ṏ	# 1E4F
+	Ṑ	ṑ		Ṑ	# 1E50
+	ṑ	ṑ	Ṑ	Ṑ	# 1E51
+	Ṓ	ṓ		Ṓ	# 1E52
+	ṓ	ṓ	Ṓ	Ṓ	# 1E53
+	Ṕ	ṕ		Ṕ	# 1E54
+	ṕ	ṕ	Ṕ	Ṕ	# 1E55
+	Ṗ	ṗ		Ṗ	# 1E56
+	ṗ	ṗ	Ṗ	Ṗ	# 1E57
+	Ṙ	ṙ		Ṙ	# 1E58
+	ṙ	ṙ	Ṙ	Ṙ	# 1E59
+	Ṛ	ṛ		Ṛ	# 1E5A
+	ṛ	ṛ	Ṛ	Ṛ	# 1E5B
+	Ṝ	ṝ		Ṝ	# 1E5C
+	ṝ	ṝ	Ṝ	Ṝ	# 1E5D
+	Ṟ	ṟ		Ṟ	# 1E5E
+	ṟ	ṟ	Ṟ	Ṟ	# 1E5F
+	Ṡ	ṡ		Ṡ	# 1E60
+	ṡ	ṡ	Ṡ	Ṡ	# 1E61
+	Ṣ	ṣ		Ṣ	# 1E62
+	ṣ	ṣ	Ṣ	Ṣ	# 1E63
+	Ṥ	ṥ		Ṥ	# 1E64
+	ṥ	ṥ	Ṥ	Ṥ	# 1E65
+	Ṧ	ṧ		Ṧ	# 1E66
+	ṧ	ṧ	Ṧ	Ṧ	# 1E67
+	Ṩ	ṩ		Ṩ	# 1E68
+	ṩ	ṩ	Ṩ	Ṩ	# 1E69
+	Ṫ	ṫ		Ṫ	# 1E6A
+	ṫ	ṫ	Ṫ	Ṫ	# 1E6B
+	Ṭ	ṭ		Ṭ	# 1E6C
+	ṭ	ṭ	Ṭ	Ṭ	# 1E6D
+	Ṯ	ṯ		Ṯ	# 1E6E
+	ṯ	ṯ	Ṯ	Ṯ	# 1E6F
+	Ṱ	ṱ		Ṱ	# 1E70
+	ṱ	ṱ	Ṱ	Ṱ	# 1E71
+	Ṳ	ṳ		Ṳ	# 1E72
+	ṳ	ṳ	Ṳ	Ṳ	# 1E73
+	Ṵ	ṵ		Ṵ	# 1E74
+	ṵ	ṵ	Ṵ	Ṵ	# 1E75
+	Ṷ	ṷ		Ṷ	# 1E76
+	ṷ	ṷ	Ṷ	Ṷ	# 1E77
+	Ṹ	ṹ		Ṹ	# 1E78
+	ṹ	ṹ	Ṹ	Ṹ	# 1E79
+	Ṻ	ṻ		Ṻ	# 1E7A
+	ṻ	ṻ	Ṻ	Ṻ	# 1E7B
+	Ṽ	ṽ		Ṽ	# 1E7C
+	ṽ	ṽ	Ṽ	Ṽ	# 1E7D
+	Ṿ	ṿ		Ṿ	# 1E7E
+	ṿ	ṿ	Ṿ	Ṿ	# 1E7F
+	Ẁ	ẁ		Ẁ	# 1E80
+	ẁ	ẁ	Ẁ	Ẁ	# 1E81
+	Ẃ	ẃ		Ẃ	# 1E82
+	ẃ	ẃ	Ẃ	Ẃ	# 1E83
+	Ẅ	ẅ		Ẅ	# 1E84
+	ẅ	ẅ	Ẅ	Ẅ	# 1E85
+	Ẇ	ẇ		Ẇ	# 1E86
+	ẇ	ẇ	Ẇ	Ẇ	# 1E87
+	Ẉ	ẉ		Ẉ	# 1E88
+	ẉ	ẉ	Ẉ	Ẉ	# 1E89
+	Ẋ	ẋ		Ẋ	# 1E8A
+	ẋ	ẋ	Ẋ	Ẋ	# 1E8B
+	Ẍ	ẍ		Ẍ	# 1E8C
+	ẍ	ẍ	Ẍ	Ẍ	# 1E8D
+	Ẏ	ẏ		Ẏ	# 1E8E
+	ẏ	ẏ	Ẏ	Ẏ	# 1E8F
+	Ẑ	ẑ		Ẑ	# 1E90
+	ẑ	ẑ	Ẑ	Ẑ	# 1E91
+	Ẓ	ẓ		Ẓ	# 1E92
+	ẓ	ẓ	Ẓ	Ẓ	# 1E93
+	Ẕ	ẕ		Ẕ	# 1E94
+	ẕ	ẕ	Ẕ	Ẕ	# 1E95
+	ẖ	ẖ	H̱	H̱	# 1E96
+	ẗ	ẗ	T̈	T̈	# 1E97
+	ẘ	ẘ	W̊	W̊	# 1E98
+	ẙ	ẙ	Y̊	Y̊	# 1E99
+	ẚ	ẚ	Aʾ	Aʾ	# 1E9A
+	ẛ	ẛ	Ṡ	Ṡ	# 1E9B
+	ẜ	ẜ			# 1E9C
+	ẝ	ẝ			# 1E9D
+	ẞ	ß		ẞ	# 1E9E
+	ẟ	ẟ			# 1E9F
+	Ạ	ạ		Ạ	# 1EA0
+	ạ	ạ	Ạ	Ạ	# 1EA1
+	Ả	ả		Ả	# 1EA2
+	ả	ả	Ả	Ả	# 1EA3
+	Ấ	ấ		Ấ	# 1EA4
+	ấ	ấ	Ấ	Ấ	# 1EA5
+	Ầ	ầ		Ầ	# 1EA6
+	ầ	ầ	Ầ	Ầ	# 1EA7
+	Ẩ	ẩ		Ẩ	# 1EA8
+	ẩ	ẩ	Ẩ	Ẩ	# 1EA9
+	Ẫ	ẫ		Ẫ	# 1EAA
+	ẫ	ẫ	Ẫ	Ẫ	# 1EAB
+	Ậ	ậ		Ậ	# 1EAC
+	ậ	ậ	Ậ	Ậ	# 1EAD
+	Ắ	ắ		Ắ	# 1EAE
+	ắ	ắ	Ắ	Ắ	# 1EAF
+	Ằ	ằ		Ằ	# 1EB0
+	ằ	ằ	Ằ	Ằ	# 1EB1
+	Ẳ	ẳ		Ẳ	# 1EB2
+	ẳ	ẳ	Ẳ	Ẳ	# 1EB3
+	Ẵ	ẵ		Ẵ	# 1EB4
+	ẵ	ẵ	Ẵ	Ẵ	# 1EB5
+	Ặ	ặ		Ặ	# 1EB6
+	ặ	ặ	Ặ	Ặ	# 1EB7
+	Ẹ	ẹ		Ẹ	# 1EB8
+	ẹ	ẹ	Ẹ	Ẹ	# 1EB9
+	Ẻ	ẻ		Ẻ	# 1EBA
+	ẻ	ẻ	Ẻ	Ẻ	# 1EBB
+	Ẽ	ẽ		Ẽ	# 1EBC
+	ẽ	ẽ	Ẽ	Ẽ	# 1EBD
+	Ế	ế		Ế	# 1EBE
+	ế	ế	Ế	Ế	# 1EBF
+	Ề	ề		Ề	# 1EC0
+	ề	ề	Ề	Ề	# 1EC1
+	Ể	ể		Ể	# 1EC2
+	ể	ể	Ể	Ể	# 1EC3
+	Ễ	ễ		Ễ	# 1EC4
+	ễ	ễ	Ễ	Ễ	# 1EC5
+	Ệ	ệ		Ệ	# 1EC6
+	ệ	ệ	Ệ	Ệ	# 1EC7
+	Ỉ	ỉ		Ỉ	# 1EC8
+	ỉ	ỉ	Ỉ	Ỉ	# 1EC9
+	Ị	ị		Ị	# 1ECA
+	ị	ị	Ị	Ị	# 1ECB
+	Ọ	ọ		Ọ	# 1ECC
+	ọ	ọ	Ọ	Ọ	# 1ECD
+	Ỏ	ỏ		Ỏ	# 1ECE
+	ỏ	ỏ	Ỏ	Ỏ	# 1ECF
+	Ố	ố		Ố	# 1ED0
+	ố	ố	Ố	Ố	# 1ED1
+	Ồ	ồ		Ồ	# 1ED2
+	ồ	ồ	Ồ	Ồ	# 1ED3
+	Ổ	ổ		Ổ	# 1ED4
+	ổ	ổ	Ổ	Ổ	# 1ED5
+	Ỗ	ỗ		Ỗ	# 1ED6
+	ỗ	ỗ	Ỗ	Ỗ	# 1ED7
+	Ộ	ộ		Ộ	# 1ED8
+	ộ	ộ	Ộ	Ộ	# 1ED9
+	Ớ	ớ		Ớ	# 1EDA
+	ớ	ớ	Ớ	Ớ	# 1EDB
+	Ờ	ờ		Ờ	# 1EDC
+	ờ	ờ	Ờ	Ờ	# 1EDD
+	Ở	ở		Ở	# 1EDE
+	ở	ở	Ở	Ở	# 1EDF
+	Ỡ	ỡ		Ỡ	# 1EE0
+	ỡ	ỡ	Ỡ	Ỡ	# 1EE1
+	Ợ	ợ		Ợ	# 1EE2
+	ợ	ợ	Ợ	Ợ	# 1EE3
+	Ụ	ụ		Ụ	# 1EE4
+	ụ	ụ	Ụ	Ụ	# 1EE5
+	Ủ	ủ		Ủ	# 1EE6
+	ủ	ủ	Ủ	Ủ	# 1EE7
+	Ứ	ứ		Ứ	# 1EE8
+	ứ	ứ	Ứ	Ứ	# 1EE9
+	Ừ	ừ		Ừ	# 1EEA
+	ừ	ừ	Ừ	Ừ	# 1EEB
+	Ử	ử		Ử	# 1EEC
+	ử	ử	Ử	Ử	# 1EED
+	Ữ	ữ		Ữ	# 1EEE
+	ữ	ữ	Ữ	Ữ	# 1EEF
+	Ự	ự		Ự	# 1EF0
+	ự	ự	Ự	Ự	# 1EF1
+	Ỳ	ỳ		Ỳ	# 1EF2
+	ỳ	ỳ	Ỳ	Ỳ	# 1EF3
+	Ỵ	ỵ		Ỵ	# 1EF4
+	ỵ	ỵ	Ỵ	Ỵ	# 1EF5
+	Ỷ	ỷ		Ỷ	# 1EF6
+	ỷ	ỷ	Ỷ	Ỷ	# 1EF7
+	Ỹ	ỹ		Ỹ	# 1EF8
+	ỹ	ỹ	Ỹ	Ỹ	# 1EF9
+	Ỻ	ỻ		Ỻ	# 1EFA
+	ỻ	ỻ	Ỻ	Ỻ	# 1EFB
+	Ỽ	ỽ		Ỽ	# 1EFC
+	ỽ	ỽ	Ỽ	Ỽ	# 1EFD
+	Ỿ	ỿ		Ỿ	# 1EFE
+	ỿ	ỿ	Ỿ	Ỿ	# 1EFF
+	ἀ	ἀ	Ἀ	Ἀ	# 1F00
+	ἁ	ἁ	Ἁ	Ἁ	# 1F01
+	ἂ	ἂ	Ἂ	Ἂ	# 1F02
+	ἃ	ἃ	Ἃ	Ἃ	# 1F03
+	ἄ	ἄ	Ἄ	Ἄ	# 1F04
+	ἅ	ἅ	Ἅ	Ἅ	# 1F05
+	ἆ	ἆ	Ἆ	Ἆ	# 1F06
+	ἇ	ἇ	Ἇ	Ἇ	# 1F07
+	Ἀ	ἀ		Ἀ	# 1F08
+	Ἁ	ἁ		Ἁ	# 1F09
+	Ἂ	ἂ		Ἂ	# 1F0A
+	Ἃ	ἃ		Ἃ	# 1F0B
+	Ἄ	ἄ		Ἄ	# 1F0C
+	Ἅ	ἅ		Ἅ	# 1F0D
+	Ἆ	ἆ		Ἆ	# 1F0E
+	Ἇ	ἇ		Ἇ	# 1F0F
+	ἐ	ἐ	Ἐ	Ἐ	# 1F10
+	ἑ	ἑ	Ἑ	Ἑ	# 1F11
+	ἒ	ἒ	Ἒ	Ἒ	# 1F12
+	ἓ	ἓ	Ἓ	Ἓ	# 1F13
+	ἔ	ἔ	Ἔ	Ἔ	# 1F14
+	ἕ	ἕ	Ἕ	Ἕ	# 1F15
+	Ἐ	ἐ		Ἐ	# 1F18
+	Ἑ	ἑ		Ἑ	# 1F19
+	Ἒ	ἒ		Ἒ	# 1F1A
+	Ἓ	ἓ		Ἓ	# 1F1B
+	Ἔ	ἔ		Ἔ	# 1F1C
+	Ἕ	ἕ		Ἕ	# 1F1D
+	ἠ	ἠ	Ἠ	Ἠ	# 1F20
+	ἡ	ἡ	Ἡ	Ἡ	# 1F21
+	ἢ	ἢ	Ἢ	Ἢ	# 1F22
+	ἣ	ἣ	Ἣ	Ἣ	# 1F23
+	ἤ	ἤ	Ἤ	Ἤ	# 1F24
+	ἥ	ἥ	Ἥ	Ἥ	# 1F25
+	ἦ	ἦ	Ἦ	Ἦ	# 1F26
+	ἧ	ἧ	Ἧ	Ἧ	# 1F27
+	Ἠ	ἠ		Ἠ	# 1F28
+	Ἡ	ἡ		Ἡ	# 1F29
+	Ἢ	ἢ		Ἢ	# 1F2A
+	Ἣ	ἣ		Ἣ	# 1F2B
+	Ἤ	ἤ		Ἤ	# 1F2C
+	Ἥ	ἥ		Ἥ	# 1F2D
+	Ἦ	ἦ		Ἦ	# 1F2E
+	Ἧ	ἧ		Ἧ	# 1F2F
+	ἰ	ἰ	Ἰ	Ἰ	# 1F30
+	ἱ	ἱ	Ἱ	Ἱ	# 1F31
+	ἲ	ἲ	Ἲ	Ἲ	# 1F32
+	ἳ	ἳ	Ἳ	Ἳ	# 1F33
+	ἴ	ἴ	Ἴ	Ἴ	# 1F34
+	ἵ	ἵ	Ἵ	Ἵ	# 1F35
+	ἶ	ἶ	Ἶ	Ἶ	# 1F36
+	ἷ	ἷ	Ἷ	Ἷ	# 1F37
+	Ἰ	ἰ		Ἰ	# 1F38
+	Ἱ	ἱ		Ἱ	# 1F39
+	Ἲ	ἲ		Ἲ	# 1F3A
+	Ἳ	ἳ		Ἳ	# 1F3B
+	Ἴ	ἴ		Ἴ	# 1F3C
+	Ἵ	ἵ		Ἵ	# 1F3D
+	Ἶ	ἶ		Ἶ	# 1F3E
+	Ἷ	ἷ		Ἷ	# 1F3F
+	ὀ	ὀ	Ὀ	Ὀ	# 1F40
+	ὁ	ὁ	Ὁ	Ὁ	# 1F41
+	ὂ	ὂ	Ὂ	Ὂ	# 1F42
+	ὃ	ὃ	Ὃ	Ὃ	# 1F43
+	ὄ	ὄ	Ὄ	Ὄ	# 1F44
+	ὅ	ὅ	Ὅ	Ὅ	# 1F45
+	Ὀ	ὀ		Ὀ	# 1F48
+	Ὁ	ὁ		Ὁ	# 1F49
+	Ὂ	ὂ		Ὂ	# 1F4A
+	Ὃ	ὃ		Ὃ	# 1F4B
+	Ὄ	ὄ		Ὄ	# 1F4C
+	Ὅ	ὅ		Ὅ	# 1F4D
+	ὐ	ὐ	Υ̓	Υ̓	# 1F50
+	ὑ	ὑ	Ὑ	Ὑ	# 1F51
+	ὒ	ὒ	Υ̓̀	Υ̓̀	# 1F52
+	ὓ	ὓ	Ὓ	Ὓ	# 1F53
+	ὔ	ὔ	Υ̓́	Υ̓́	# 1F54
+	ὕ	ὕ	Ὕ	Ὕ	# 1F55
+	ὖ	ὖ	Υ̓͂	Υ̓͂	# 1F56
+	ὗ	ὗ	Ὗ	Ὗ	# 1F57
+	Ὑ	ὑ		Ὑ	# 1F59
+	Ὓ	ὓ		Ὓ	# 1F5B
+	Ὕ	ὕ		Ὕ	# 1F5D
+	Ὗ	ὗ		Ὗ	# 1F5F
+	ὠ	ὠ	Ὠ	Ὠ	# 1F60
+	ὡ	ὡ	Ὡ	Ὡ	# 1F61
+	ὢ	ὢ	Ὢ	Ὢ	# 1F62
+	ὣ	ὣ	Ὣ	Ὣ	# 1F63
+	ὤ	ὤ	Ὤ	Ὤ	# 1F64
+	ὥ	ὥ	Ὥ	Ὥ	# 1F65
+	ὦ	ὦ	Ὦ	Ὦ	# 1F66
+	ὧ	ὧ	Ὧ	Ὧ	# 1F67
+	Ὠ	ὠ		Ὠ	# 1F68
+	Ὡ	ὡ		Ὡ	# 1F69
+	Ὢ	ὢ		Ὢ	# 1F6A
+	Ὣ	ὣ		Ὣ	# 1F6B
+	Ὤ	ὤ		Ὤ	# 1F6C
+	Ὥ	ὥ		Ὥ	# 1F6D
+	Ὦ	ὦ		Ὦ	# 1F6E
+	Ὧ	ὧ		Ὧ	# 1F6F
+	ὰ	ὰ	Ὰ	Ὰ	# 1F70
+	ά	ά	Ά	Ά	# 1F71
+	ὲ	ὲ	Ὲ	Ὲ	# 1F72
+	έ	έ	Έ	Έ	# 1F73
+	ὴ	ὴ	Ὴ	Ὴ	# 1F74
+	ή	ή	Ή	Ή	# 1F75
+	ὶ	ὶ	Ὶ	Ὶ	# 1F76
+	ί	ί	Ί	Ί	# 1F77
+	ὸ	ὸ	Ὸ	Ὸ	# 1F78
+	ό	ό	Ό	Ό	# 1F79
+	ὺ	ὺ	Ὺ	Ὺ	# 1F7A
+	ύ	ύ	Ύ	Ύ	# 1F7B
+	ὼ	ὼ	Ὼ	Ὼ	# 1F7C
+	ώ	ώ	Ώ	Ώ	# 1F7D
+	ᾀ	ᾀ	ᾈ	ἈΙ	# 1F80
+	ᾁ	ᾁ	ᾉ	ἉΙ	# 1F81
+	ᾂ	ᾂ	ᾊ	ἊΙ	# 1F82
+	ᾃ	ᾃ	ᾋ	ἋΙ	# 1F83
+	ᾄ	ᾄ	ᾌ	ἌΙ	# 1F84
+	ᾅ	ᾅ	ᾍ	ἍΙ	# 1F85
+	ᾆ	ᾆ	ᾎ	ἎΙ	# 1F86
+	ᾇ	ᾇ	ᾏ	ἏΙ	# 1F87
+	ᾈ	ᾀ	ᾈ	ἈΙ	# 1F88
+	ᾉ	ᾁ	ᾉ	ἉΙ	# 1F89
+	ᾊ	ᾂ	ᾊ	ἊΙ	# 1F8A
+	ᾋ	ᾃ	ᾋ	ἋΙ	# 1F8B
+	ᾌ	ᾄ	ᾌ	ἌΙ	# 1F8C
+	ᾍ	ᾅ	ᾍ	ἍΙ	# 1F8D
+	ᾎ	ᾆ	ᾎ	ἎΙ	# 1F8E
+	ᾏ	ᾇ	ᾏ	ἏΙ	# 1F8F
+	ᾐ	ᾐ	ᾘ	ἨΙ	# 1F90
+	ᾑ	ᾑ	ᾙ	ἩΙ	# 1F91
+	ᾒ	ᾒ	ᾚ	ἪΙ	# 1F92
+	ᾓ	ᾓ	ᾛ	ἫΙ	# 1F93
+	ᾔ	ᾔ	ᾜ	ἬΙ	# 1F94
+	ᾕ	ᾕ	ᾝ	ἭΙ	# 1F95
+	ᾖ	ᾖ	ᾞ	ἮΙ	# 1F96
+	ᾗ	ᾗ	ᾟ	ἯΙ	# 1F97
+	ᾘ	ᾐ	ᾘ	ἨΙ	# 1F98
+	ᾙ	ᾑ	ᾙ	ἩΙ	# 1F99
+	ᾚ	ᾒ	ᾚ	ἪΙ	# 1F9A
+	ᾛ	ᾓ	ᾛ	ἫΙ	# 1F9B
+	ᾜ	ᾔ	ᾜ	ἬΙ	# 1F9C
+	ᾝ	ᾕ	ᾝ	ἭΙ	# 1F9D
+	ᾞ	ᾖ	ᾞ	ἮΙ	# 1F9E
+	ᾟ	ᾗ	ᾟ	ἯΙ	# 1F9F
+	ᾠ	ᾠ	ᾨ	ὨΙ	# 1FA0
+	ᾡ	ᾡ	ᾩ	ὩΙ	# 1FA1
+	ᾢ	ᾢ	ᾪ	ὪΙ	# 1FA2
+	ᾣ	ᾣ	ᾫ	ὫΙ	# 1FA3
+	ᾤ	ᾤ	ᾬ	ὬΙ	# 1FA4
+	ᾥ	ᾥ	ᾭ	ὭΙ	# 1FA5
+	ᾦ	ᾦ	ᾮ	ὮΙ	# 1FA6
+	ᾧ	ᾧ	ᾯ	ὯΙ	# 1FA7
+	ᾨ	ᾠ	ᾨ	ὨΙ	# 1FA8
+	ᾩ	ᾡ	ᾩ	ὩΙ	# 1FA9
+	ᾪ	ᾢ	ᾪ	ὪΙ	# 1FAA
+	ᾫ	ᾣ	ᾫ	ὫΙ	# 1FAB
+	ᾬ	ᾤ	ᾬ	ὬΙ	# 1FAC
+	ᾭ	ᾥ	ᾭ	ὭΙ	# 1FAD
+	ᾮ	ᾦ	ᾮ	ὮΙ	# 1FAE
+	ᾯ	ᾧ	ᾯ	ὯΙ	# 1FAF
+	ᾰ	ᾰ	Ᾰ	Ᾰ	# 1FB0
+	ᾱ	ᾱ	Ᾱ	Ᾱ	# 1FB1
+	ᾲ	ᾲ	Ὰͅ	ᾺΙ	# 1FB2
+	ᾳ	ᾳ	ᾼ	ΑΙ	# 1FB3
+	ᾴ	ᾴ	Άͅ	ΆΙ	# 1FB4
+	ᾶ	ᾶ	Α͂	Α͂	# 1FB6
+	ᾷ	ᾷ	ᾼ͂	Α͂Ι	# 1FB7
+	Ᾰ	ᾰ		Ᾰ	# 1FB8
+	Ᾱ	ᾱ		Ᾱ	# 1FB9
+	Ὰ	ὰ		Ὰ	# 1FBA
+	Ά	ά		Ά	# 1FBB
+	ᾼ	ᾳ	ᾼ	ΑΙ	# 1FBC
+	ι	ι	Ι	Ι	# 1FBE
+	ῂ	ῂ	Ὴͅ	ῊΙ	# 1FC2
+	ῃ	ῃ	ῌ	ΗΙ	# 1FC3
+	ῄ	ῄ	Ήͅ	ΉΙ	# 1FC4
+	ῆ	ῆ	Η͂	Η͂	# 1FC6
+	ῇ	ῇ	ῌ͂	Η͂Ι	# 1FC7
+	Ὲ	ὲ		Ὲ	# 1FC8
+	Έ	έ		Έ	# 1FC9
+	Ὴ	ὴ		Ὴ	# 1FCA
+	Ή	ή		Ή	# 1FCB
+	ῌ	ῃ	ῌ	ΗΙ	# 1FCC
+	ῐ	ῐ	Ῐ	Ῐ	# 1FD0
+	ῑ	ῑ	Ῑ	Ῑ	# 1FD1
+	ῒ	ῒ	Ϊ̀	Ϊ̀	# 1FD2
+	ΐ	ΐ	Ϊ́	Ϊ́	# 1FD3
+	ῖ	ῖ	Ι͂	Ι͂	# 1FD6
+	ῗ	ῗ	Ϊ͂	Ϊ͂	# 1FD7
+	Ῐ	ῐ		Ῐ	# 1FD8
+	Ῑ	ῑ		Ῑ	# 1FD9
+	Ὶ	ὶ		Ὶ	# 1FDA
+	Ί	ί		Ί	# 1FDB
+	ῠ	ῠ	Ῠ	Ῠ	# 1FE0
+	ῡ	ῡ	Ῡ	Ῡ	# 1FE1
+	ῢ	ῢ	Ϋ̀	Ϋ̀	# 1FE2
+	ΰ	ΰ	Ϋ́	Ϋ́	# 1FE3
+	ῤ	ῤ	Ρ̓	Ρ̓	# 1FE4
+	ῥ	ῥ	Ῥ	Ῥ	# 1FE5
+	ῦ	ῦ	Υ͂	Υ͂	# 1FE6
+	ῧ	ῧ	Ϋ͂	Ϋ͂	# 1FE7
+	Ῠ	ῠ		Ῠ	# 1FE8
+	Ῡ	ῡ		Ῡ	# 1FE9
+	Ὺ	ὺ		Ὺ	# 1FEA
+	Ύ	ύ		Ύ	# 1FEB
+	Ῥ	ῥ		Ῥ	# 1FEC
+	ῲ	ῲ	Ὼͅ	ῺΙ	# 1FF2
+	ῳ	ῳ	ῼ	ΩΙ	# 1FF3
+	ῴ	ῴ	Ώͅ	ΏΙ	# 1FF4
+	ῶ	ῶ	Ω͂	Ω͂	# 1FF6
+	ῷ	ῷ	ῼ͂	Ω͂Ι	# 1FF7
+	Ὸ	ὸ		Ὸ	# 1FF8
+	Ό	ό		Ό	# 1FF9
+	Ὼ	ὼ		Ὼ	# 1FFA
+	Ώ	ώ		Ώ	# 1FFB
+	ῼ	ῳ	ῼ	ΩΙ	# 1FFC
+	ⁱ	ⁱ			# 2071
+	ⁿ	ⁿ			# 207F
+	ℂ			ℂ	# 2102
+	ℇ			ℇ	# 2107
+	ℊ	ℊ			# 210A
+	ℋ			ℋ	# 210B
+	ℌ			ℌ	# 210C
+	ℍ			ℍ	# 210D
+	ℎ	ℎ			# 210E
+	ℏ	ℏ			# 210F
+	ℐ			ℐ	# 2110
+	ℑ			ℑ	# 2111
+	ℒ			ℒ	# 2112
+	ℓ	ℓ			# 2113
+	ℕ			ℕ	# 2115
+	ℙ			ℙ	# 2119
+	ℚ			ℚ	# 211A
+	ℛ			ℛ	# 211B
+	ℜ			ℜ	# 211C
+	ℝ			ℝ	# 211D
+	ℤ			ℤ	# 2124
+	Ω	ω		Ω	# 2126
+	ℨ			ℨ	# 2128
+	K	k		K	# 212A
+	Å	å		Å	# 212B
+	ℬ			ℬ	# 212C
+	ℭ			ℭ	# 212D
+	ℯ	ℯ			# 212F
+	ℰ			ℰ	# 2130
+	ℱ			ℱ	# 2131
+	Ⅎ	ⅎ		Ⅎ	# 2132
+	ℳ			ℳ	# 2133
+	ℴ	ℴ			# 2134
+	ℹ	ℹ			# 2139
+	ℼ	ℼ			# 213C
+	ℽ	ℽ			# 213D
+	ℾ			ℾ	# 213E
+	ℿ			ℿ	# 213F
+	ⅅ			ⅅ	# 2145
+	ⅆ	ⅆ			# 2146
+	ⅇ	ⅇ			# 2147
+	ⅈ	ⅈ			# 2148
+	ⅉ	ⅉ			# 2149
+	ⅎ	ⅎ	Ⅎ	Ⅎ	# 214E
+	Ↄ	ↄ		Ↄ	# 2183
+	ↄ	ↄ	Ↄ	Ↄ	# 2184
+	Ⰰ	ⰰ		Ⰰ	# 2C00
+	Ⰱ	ⰱ		Ⰱ	# 2C01
+	Ⰲ	ⰲ		Ⰲ	# 2C02
+	Ⰳ	ⰳ		Ⰳ	# 2C03
+	Ⰴ	ⰴ		Ⰴ	# 2C04
+	Ⰵ	ⰵ		Ⰵ	# 2C05
+	Ⰶ	ⰶ		Ⰶ	# 2C06
+	Ⰷ	ⰷ		Ⰷ	# 2C07
+	Ⰸ	ⰸ		Ⰸ	# 2C08
+	Ⰹ	ⰹ		Ⰹ	# 2C09
+	Ⰺ	ⰺ		Ⰺ	# 2C0A
+	Ⰻ	ⰻ		Ⰻ	# 2C0B
+	Ⰼ	ⰼ		Ⰼ	# 2C0C
+	Ⰽ	ⰽ		Ⰽ	# 2C0D
+	Ⰾ	ⰾ		Ⰾ	# 2C0E
+	Ⰿ	ⰿ		Ⰿ	# 2C0F
+	Ⱀ	ⱀ		Ⱀ	# 2C10
+	Ⱁ	ⱁ		Ⱁ	# 2C11
+	Ⱂ	ⱂ		Ⱂ	# 2C12
+	Ⱃ	ⱃ		Ⱃ	# 2C13
+	Ⱄ	ⱄ		Ⱄ	# 2C14
+	Ⱅ	ⱅ		Ⱅ	# 2C15
+	Ⱆ	ⱆ		Ⱆ	# 2C16
+	Ⱇ	ⱇ		Ⱇ	# 2C17
+	Ⱈ	ⱈ		Ⱈ	# 2C18
+	Ⱉ	ⱉ		Ⱉ	# 2C19
+	Ⱊ	ⱊ		Ⱊ	# 2C1A
+	Ⱋ	ⱋ		Ⱋ	# 2C1B
+	Ⱌ	ⱌ		Ⱌ	# 2C1C
+	Ⱍ	ⱍ		Ⱍ	# 2C1D
+	Ⱎ	ⱎ		Ⱎ	# 2C1E
+	Ⱏ	ⱏ		Ⱏ	# 2C1F
+	Ⱐ	ⱐ		Ⱐ	# 2C20
+	Ⱑ	ⱑ		Ⱑ	# 2C21
+	Ⱒ	ⱒ		Ⱒ	# 2C22
+	Ⱓ	ⱓ		Ⱓ	# 2C23
+	Ⱔ	ⱔ		Ⱔ	# 2C24
+	Ⱕ	ⱕ		Ⱕ	# 2C25
+	Ⱖ	ⱖ		Ⱖ	# 2C26
+	Ⱗ	ⱗ		Ⱗ	# 2C27
+	Ⱘ	ⱘ		Ⱘ	# 2C28
+	Ⱙ	ⱙ		Ⱙ	# 2C29
+	Ⱚ	ⱚ		Ⱚ	# 2C2A
+	Ⱛ	ⱛ		Ⱛ	# 2C2B
+	Ⱜ	ⱜ		Ⱜ	# 2C2C
+	Ⱝ	ⱝ		Ⱝ	# 2C2D
+	Ⱞ	ⱞ		Ⱞ	# 2C2E
+	ⰰ	ⰰ	Ⰰ	Ⰰ	# 2C30
+	ⰱ	ⰱ	Ⰱ	Ⰱ	# 2C31
+	ⰲ	ⰲ	Ⰲ	Ⰲ	# 2C32
+	ⰳ	ⰳ	Ⰳ	Ⰳ	# 2C33
+	ⰴ	ⰴ	Ⰴ	Ⰴ	# 2C34
+	ⰵ	ⰵ	Ⰵ	Ⰵ	# 2C35
+	ⰶ	ⰶ	Ⰶ	Ⰶ	# 2C36
+	ⰷ	ⰷ	Ⰷ	Ⰷ	# 2C37
+	ⰸ	ⰸ	Ⰸ	Ⰸ	# 2C38
+	ⰹ	ⰹ	Ⰹ	Ⰹ	# 2C39
+	ⰺ	ⰺ	Ⰺ	Ⰺ	# 2C3A
+	ⰻ	ⰻ	Ⰻ	Ⰻ	# 2C3B
+	ⰼ	ⰼ	Ⰼ	Ⰼ	# 2C3C
+	ⰽ	ⰽ	Ⰽ	Ⰽ	# 2C3D
+	ⰾ	ⰾ	Ⰾ	Ⰾ	# 2C3E
+	ⰿ	ⰿ	Ⰿ	Ⰿ	# 2C3F
+	ⱀ	ⱀ	Ⱀ	Ⱀ	# 2C40
+	ⱁ	ⱁ	Ⱁ	Ⱁ	# 2C41
+	ⱂ	ⱂ	Ⱂ	Ⱂ	# 2C42
+	ⱃ	ⱃ	Ⱃ	Ⱃ	# 2C43
+	ⱄ	ⱄ	Ⱄ	Ⱄ	# 2C44
+	ⱅ	ⱅ	Ⱅ	Ⱅ	# 2C45
+	ⱆ	ⱆ	Ⱆ	Ⱆ	# 2C46
+	ⱇ	ⱇ	Ⱇ	Ⱇ	# 2C47
+	ⱈ	ⱈ	Ⱈ	Ⱈ	# 2C48
+	ⱉ	ⱉ	Ⱉ	Ⱉ	# 2C49
+	ⱊ	ⱊ	Ⱊ	Ⱊ	# 2C4A
+	ⱋ	ⱋ	Ⱋ	Ⱋ	# 2C4B
+	ⱌ	ⱌ	Ⱌ	Ⱌ	# 2C4C
+	ⱍ	ⱍ	Ⱍ	Ⱍ	# 2C4D
+	ⱎ	ⱎ	Ⱎ	Ⱎ	# 2C4E
+	ⱏ	ⱏ	Ⱏ	Ⱏ	# 2C4F
+	ⱐ	ⱐ	Ⱐ	Ⱐ	# 2C50
+	ⱑ	ⱑ	Ⱑ	Ⱑ	# 2C51
+	ⱒ	ⱒ	Ⱒ	Ⱒ	# 2C52
+	ⱓ	ⱓ	Ⱓ	Ⱓ	# 2C53
+	ⱔ	ⱔ	Ⱔ	Ⱔ	# 2C54
+	ⱕ	ⱕ	Ⱕ	Ⱕ	# 2C55
+	ⱖ	ⱖ	Ⱖ	Ⱖ	# 2C56
+	ⱗ	ⱗ	Ⱗ	Ⱗ	# 2C57
+	ⱘ	ⱘ	Ⱘ	Ⱘ	# 2C58
+	ⱙ	ⱙ	Ⱙ	Ⱙ	# 2C59
+	ⱚ	ⱚ	Ⱚ	Ⱚ	# 2C5A
+	ⱛ	ⱛ	Ⱛ	Ⱛ	# 2C5B
+	ⱜ	ⱜ	Ⱜ	Ⱜ	# 2C5C
+	ⱝ	ⱝ	Ⱝ	Ⱝ	# 2C5D
+	ⱞ	ⱞ	Ⱞ	Ⱞ	# 2C5E
+	Ⱡ	ⱡ		Ⱡ	# 2C60
+	ⱡ	ⱡ	Ⱡ	Ⱡ	# 2C61
+	Ɫ	ɫ		Ɫ	# 2C62
+	Ᵽ	ᵽ		Ᵽ	# 2C63
+	Ɽ	ɽ		Ɽ	# 2C64
+	ⱥ	ⱥ	Ⱥ	Ⱥ	# 2C65
+	ⱦ	ⱦ	Ⱦ	Ⱦ	# 2C66
+	Ⱨ	ⱨ		Ⱨ	# 2C67
+	ⱨ	ⱨ	Ⱨ	Ⱨ	# 2C68
+	Ⱪ	ⱪ		Ⱪ	# 2C69
+	ⱪ	ⱪ	Ⱪ	Ⱪ	# 2C6A
+	Ⱬ	ⱬ		Ⱬ	# 2C6B
+	ⱬ	ⱬ	Ⱬ	Ⱬ	# 2C6C
+	Ɑ	ɑ		Ɑ	# 2C6D
+	Ɱ	ɱ		Ɱ	# 2C6E
+	Ɐ	ɐ		Ɐ	# 2C6F
+	ⱱ	ⱱ			# 2C71
+	Ⱳ	ⱳ		Ⱳ	# 2C72
+	ⱳ	ⱳ	Ⱳ	Ⱳ	# 2C73
+	ⱴ	ⱴ			# 2C74
+	Ⱶ	ⱶ		Ⱶ	# 2C75
+	ⱶ	ⱶ	Ⱶ	Ⱶ	# 2C76
+	ⱷ	ⱷ			# 2C77
+	ⱸ	ⱸ			# 2C78
+	ⱹ	ⱹ			# 2C79
+	ⱺ	ⱺ			# 2C7A
+	ⱻ	ⱻ			# 2C7B
+	ⱼ	ⱼ			# 2C7C
+	Ⲁ	ⲁ		Ⲁ	# 2C80
+	ⲁ	ⲁ	Ⲁ	Ⲁ	# 2C81
+	Ⲃ	ⲃ		Ⲃ	# 2C82
+	ⲃ	ⲃ	Ⲃ	Ⲃ	# 2C83
+	Ⲅ	ⲅ		Ⲅ	# 2C84
+	ⲅ	ⲅ	Ⲅ	Ⲅ	# 2C85
+	Ⲇ	ⲇ		Ⲇ	# 2C86
+	ⲇ	ⲇ	Ⲇ	Ⲇ	# 2C87
+	Ⲉ	ⲉ		Ⲉ	# 2C88
+	ⲉ	ⲉ	Ⲉ	Ⲉ	# 2C89
+	Ⲋ	ⲋ		Ⲋ	# 2C8A
+	ⲋ	ⲋ	Ⲋ	Ⲋ	# 2C8B
+	Ⲍ	ⲍ		Ⲍ	# 2C8C
+	ⲍ	ⲍ	Ⲍ	Ⲍ	# 2C8D
+	Ⲏ	ⲏ		Ⲏ	# 2C8E
+	ⲏ	ⲏ	Ⲏ	Ⲏ	# 2C8F
+	Ⲑ	ⲑ		Ⲑ	# 2C90
+	ⲑ	ⲑ	Ⲑ	Ⲑ	# 2C91
+	Ⲓ	ⲓ		Ⲓ	# 2C92
+	ⲓ	ⲓ	Ⲓ	Ⲓ	# 2C93
+	Ⲕ	ⲕ		Ⲕ	# 2C94
+	ⲕ	ⲕ	Ⲕ	Ⲕ	# 2C95
+	Ⲗ	ⲗ		Ⲗ	# 2C96
+	ⲗ	ⲗ	Ⲗ	Ⲗ	# 2C97
+	Ⲙ	ⲙ		Ⲙ	# 2C98
+	ⲙ	ⲙ	Ⲙ	Ⲙ	# 2C99
+	Ⲛ	ⲛ		Ⲛ	# 2C9A
+	ⲛ	ⲛ	Ⲛ	Ⲛ	# 2C9B
+	Ⲝ	ⲝ		Ⲝ	# 2C9C
+	ⲝ	ⲝ	Ⲝ	Ⲝ	# 2C9D
+	Ⲟ	ⲟ		Ⲟ	# 2C9E
+	ⲟ	ⲟ	Ⲟ	Ⲟ	# 2C9F
+	Ⲡ	ⲡ		Ⲡ	# 2CA0
+	ⲡ	ⲡ	Ⲡ	Ⲡ	# 2CA1
+	Ⲣ	ⲣ		Ⲣ	# 2CA2
+	ⲣ	ⲣ	Ⲣ	Ⲣ	# 2CA3
+	Ⲥ	ⲥ		Ⲥ	# 2CA4
+	ⲥ	ⲥ	Ⲥ	Ⲥ	# 2CA5
+	Ⲧ	ⲧ		Ⲧ	# 2CA6
+	ⲧ	ⲧ	Ⲧ	Ⲧ	# 2CA7
+	Ⲩ	ⲩ		Ⲩ	# 2CA8
+	ⲩ	ⲩ	Ⲩ	Ⲩ	# 2CA9
+	Ⲫ	ⲫ		Ⲫ	# 2CAA
+	ⲫ	ⲫ	Ⲫ	Ⲫ	# 2CAB
+	Ⲭ	ⲭ		Ⲭ	# 2CAC
+	ⲭ	ⲭ	Ⲭ	Ⲭ	# 2CAD
+	Ⲯ	ⲯ		Ⲯ	# 2CAE
+	ⲯ	ⲯ	Ⲯ	Ⲯ	# 2CAF
+	Ⲱ	ⲱ		Ⲱ	# 2CB0
+	ⲱ	ⲱ	Ⲱ	Ⲱ	# 2CB1
+	Ⲳ	ⲳ		Ⲳ	# 2CB2
+	ⲳ	ⲳ	Ⲳ	Ⲳ	# 2CB3
+	Ⲵ	ⲵ		Ⲵ	# 2CB4
+	ⲵ	ⲵ	Ⲵ	Ⲵ	# 2CB5
+	Ⲷ	ⲷ		Ⲷ	# 2CB6
+	ⲷ	ⲷ	Ⲷ	Ⲷ	# 2CB7
+	Ⲹ	ⲹ		Ⲹ	# 2CB8
+	ⲹ	ⲹ	Ⲹ	Ⲹ	# 2CB9
+	Ⲻ	ⲻ		Ⲻ	# 2CBA
+	ⲻ	ⲻ	Ⲻ	Ⲻ	# 2CBB
+	Ⲽ	ⲽ		Ⲽ	# 2CBC
+	ⲽ	ⲽ	Ⲽ	Ⲽ	# 2CBD
+	Ⲿ	ⲿ		Ⲿ	# 2CBE
+	ⲿ	ⲿ	Ⲿ	Ⲿ	# 2CBF
+	Ⳁ	ⳁ		Ⳁ	# 2CC0
+	ⳁ	ⳁ	Ⳁ	Ⳁ	# 2CC1
+	Ⳃ	ⳃ		Ⳃ	# 2CC2
+	ⳃ	ⳃ	Ⳃ	Ⳃ	# 2CC3
+	Ⳅ	ⳅ		Ⳅ	# 2CC4
+	ⳅ	ⳅ	Ⳅ	Ⳅ	# 2CC5
+	Ⳇ	ⳇ		Ⳇ	# 2CC6
+	ⳇ	ⳇ	Ⳇ	Ⳇ	# 2CC7
+	Ⳉ	ⳉ		Ⳉ	# 2CC8
+	ⳉ	ⳉ	Ⳉ	Ⳉ	# 2CC9
+	Ⳋ	ⳋ		Ⳋ	# 2CCA
+	ⳋ	ⳋ	Ⳋ	Ⳋ	# 2CCB
+	Ⳍ	ⳍ		Ⳍ	# 2CCC
+	ⳍ	ⳍ	Ⳍ	Ⳍ	# 2CCD
+	Ⳏ	ⳏ		Ⳏ	# 2CCE
+	ⳏ	ⳏ	Ⳏ	Ⳏ	# 2CCF
+	Ⳑ	ⳑ		Ⳑ	# 2CD0
+	ⳑ	ⳑ	Ⳑ	Ⳑ	# 2CD1
+	Ⳓ	ⳓ		Ⳓ	# 2CD2
+	ⳓ	ⳓ	Ⳓ	Ⳓ	# 2CD3
+	Ⳕ	ⳕ		Ⳕ	# 2CD4
+	ⳕ	ⳕ	Ⳕ	Ⳕ	# 2CD5
+	Ⳗ	ⳗ		Ⳗ	# 2CD6
+	ⳗ	ⳗ	Ⳗ	Ⳗ	# 2CD7
+	Ⳙ	ⳙ		Ⳙ	# 2CD8
+	ⳙ	ⳙ	Ⳙ	Ⳙ	# 2CD9
+	Ⳛ	ⳛ		Ⳛ	# 2CDA
+	ⳛ	ⳛ	Ⳛ	Ⳛ	# 2CDB
+	Ⳝ	ⳝ		Ⳝ	# 2CDC
+	ⳝ	ⳝ	Ⳝ	Ⳝ	# 2CDD
+	Ⳟ	ⳟ		Ⳟ	# 2CDE
+	ⳟ	ⳟ	Ⳟ	Ⳟ	# 2CDF
+	Ⳡ	ⳡ		Ⳡ	# 2CE0
+	ⳡ	ⳡ	Ⳡ	Ⳡ	# 2CE1
+	Ⳣ	ⳣ		Ⳣ	# 2CE2
+	ⳣ	ⳣ	Ⳣ	Ⳣ	# 2CE3
+	ⳤ	ⳤ			# 2CE4
+	ⴀ	ⴀ	Ⴀ	Ⴀ	# 2D00
+	ⴁ	ⴁ	Ⴁ	Ⴁ	# 2D01
+	ⴂ	ⴂ	Ⴂ	Ⴂ	# 2D02
+	ⴃ	ⴃ	Ⴃ	Ⴃ	# 2D03
+	ⴄ	ⴄ	Ⴄ	Ⴄ	# 2D04
+	ⴅ	ⴅ	Ⴅ	Ⴅ	# 2D05
+	ⴆ	ⴆ	Ⴆ	Ⴆ	# 2D06
+	ⴇ	ⴇ	Ⴇ	Ⴇ	# 2D07
+	ⴈ	ⴈ	Ⴈ	Ⴈ	# 2D08
+	ⴉ	ⴉ	Ⴉ	Ⴉ	# 2D09
+	ⴊ	ⴊ	Ⴊ	Ⴊ	# 2D0A
+	ⴋ	ⴋ	Ⴋ	Ⴋ	# 2D0B
+	ⴌ	ⴌ	Ⴌ	Ⴌ	# 2D0C
+	ⴍ	ⴍ	Ⴍ	Ⴍ	# 2D0D
+	ⴎ	ⴎ	Ⴎ	Ⴎ	# 2D0E
+	ⴏ	ⴏ	Ⴏ	Ⴏ	# 2D0F
+	ⴐ	ⴐ	Ⴐ	Ⴐ	# 2D10
+	ⴑ	ⴑ	Ⴑ	Ⴑ	# 2D11
+	ⴒ	ⴒ	Ⴒ	Ⴒ	# 2D12
+	ⴓ	ⴓ	Ⴓ	Ⴓ	# 2D13
+	ⴔ	ⴔ	Ⴔ	Ⴔ	# 2D14
+	ⴕ	ⴕ	Ⴕ	Ⴕ	# 2D15
+	ⴖ	ⴖ	Ⴖ	Ⴖ	# 2D16
+	ⴗ	ⴗ	Ⴗ	Ⴗ	# 2D17
+	ⴘ	ⴘ	Ⴘ	Ⴘ	# 2D18
+	ⴙ	ⴙ	Ⴙ	Ⴙ	# 2D19
+	ⴚ	ⴚ	Ⴚ	Ⴚ	# 2D1A
+	ⴛ	ⴛ	Ⴛ	Ⴛ	# 2D1B
+	ⴜ	ⴜ	Ⴜ	Ⴜ	# 2D1C
+	ⴝ	ⴝ	Ⴝ	Ⴝ	# 2D1D
+	ⴞ	ⴞ	Ⴞ	Ⴞ	# 2D1E
+	ⴟ	ⴟ	Ⴟ	Ⴟ	# 2D1F
+	ⴠ	ⴠ	Ⴠ	Ⴠ	# 2D20
+	ⴡ	ⴡ	Ⴡ	Ⴡ	# 2D21
+	ⴢ	ⴢ	Ⴢ	Ⴢ	# 2D22
+	ⴣ	ⴣ	Ⴣ	Ⴣ	# 2D23
+	ⴤ	ⴤ	Ⴤ	Ⴤ	# 2D24
+	ⴥ	ⴥ	Ⴥ	Ⴥ	# 2D25
+	Ꙁ	ꙁ		Ꙁ	# A640
+	ꙁ	ꙁ	Ꙁ	Ꙁ	# A641
+	Ꙃ	ꙃ		Ꙃ	# A642
+	ꙃ	ꙃ	Ꙃ	Ꙃ	# A643
+	Ꙅ	ꙅ		Ꙅ	# A644
+	ꙅ	ꙅ	Ꙅ	Ꙅ	# A645
+	Ꙇ	ꙇ		Ꙇ	# A646
+	ꙇ	ꙇ	Ꙇ	Ꙇ	# A647
+	Ꙉ	ꙉ		Ꙉ	# A648
+	ꙉ	ꙉ	Ꙉ	Ꙉ	# A649
+	Ꙋ	ꙋ		Ꙋ	# A64A
+	ꙋ	ꙋ	Ꙋ	Ꙋ	# A64B
+	Ꙍ	ꙍ		Ꙍ	# A64C
+	ꙍ	ꙍ	Ꙍ	Ꙍ	# A64D
+	Ꙏ	ꙏ		Ꙏ	# A64E
+	ꙏ	ꙏ	Ꙏ	Ꙏ	# A64F
+	Ꙑ	ꙑ		Ꙑ	# A650
+	ꙑ	ꙑ	Ꙑ	Ꙑ	# A651
+	Ꙓ	ꙓ		Ꙓ	# A652
+	ꙓ	ꙓ	Ꙓ	Ꙓ	# A653
+	Ꙕ	ꙕ		Ꙕ	# A654
+	ꙕ	ꙕ	Ꙕ	Ꙕ	# A655
+	Ꙗ	ꙗ		Ꙗ	# A656
+	ꙗ	ꙗ	Ꙗ	Ꙗ	# A657
+	Ꙙ	ꙙ		Ꙙ	# A658
+	ꙙ	ꙙ	Ꙙ	Ꙙ	# A659
+	Ꙛ	ꙛ		Ꙛ	# A65A
+	ꙛ	ꙛ	Ꙛ	Ꙛ	# A65B
+	Ꙝ	ꙝ		Ꙝ	# A65C
+	ꙝ	ꙝ	Ꙝ	Ꙝ	# A65D
+	Ꙟ	ꙟ		Ꙟ	# A65E
+	ꙟ	ꙟ	Ꙟ	Ꙟ	# A65F
+	Ꙣ	ꙣ		Ꙣ	# A662
+	ꙣ	ꙣ	Ꙣ	Ꙣ	# A663
+	Ꙥ	ꙥ		Ꙥ	# A664
+	ꙥ	ꙥ	Ꙥ	Ꙥ	# A665
+	Ꙧ	ꙧ		Ꙧ	# A666
+	ꙧ	ꙧ	Ꙧ	Ꙧ	# A667
+	Ꙩ	ꙩ		Ꙩ	# A668
+	ꙩ	ꙩ	Ꙩ	Ꙩ	# A669
+	Ꙫ	ꙫ		Ꙫ	# A66A
+	ꙫ	ꙫ	Ꙫ	Ꙫ	# A66B
+	Ꙭ	ꙭ		Ꙭ	# A66C
+	ꙭ	ꙭ	Ꙭ	Ꙭ	# A66D
+	Ꚁ	ꚁ		Ꚁ	# A680
+	ꚁ	ꚁ	Ꚁ	Ꚁ	# A681
+	Ꚃ	ꚃ		Ꚃ	# A682
+	ꚃ	ꚃ	Ꚃ	Ꚃ	# A683
+	Ꚅ	ꚅ		Ꚅ	# A684
+	ꚅ	ꚅ	Ꚅ	Ꚅ	# A685
+	Ꚇ	ꚇ		Ꚇ	# A686
+	ꚇ	ꚇ	Ꚇ	Ꚇ	# A687
+	Ꚉ	ꚉ		Ꚉ	# A688
+	ꚉ	ꚉ	Ꚉ	Ꚉ	# A689
+	Ꚋ	ꚋ		Ꚋ	# A68A
+	ꚋ	ꚋ	Ꚋ	Ꚋ	# A68B
+	Ꚍ	ꚍ		Ꚍ	# A68C
+	ꚍ	ꚍ	Ꚍ	Ꚍ	# A68D
+	Ꚏ	ꚏ		Ꚏ	# A68E
+	ꚏ	ꚏ	Ꚏ	Ꚏ	# A68F
+	Ꚑ	ꚑ		Ꚑ	# A690
+	ꚑ	ꚑ	Ꚑ	Ꚑ	# A691
+	Ꚓ	ꚓ		Ꚓ	# A692
+	ꚓ	ꚓ	Ꚓ	Ꚓ	# A693
+	Ꚕ	ꚕ		Ꚕ	# A694
+	ꚕ	ꚕ	Ꚕ	Ꚕ	# A695
+	Ꚗ	ꚗ		Ꚗ	# A696
+	ꚗ	ꚗ	Ꚗ	Ꚗ	# A697
+	Ꜣ	ꜣ		Ꜣ	# A722
+	ꜣ	ꜣ	Ꜣ	Ꜣ	# A723
+	Ꜥ	ꜥ		Ꜥ	# A724
+	ꜥ	ꜥ	Ꜥ	Ꜥ	# A725
+	Ꜧ	ꜧ		Ꜧ	# A726
+	ꜧ	ꜧ	Ꜧ	Ꜧ	# A727
+	Ꜩ	ꜩ		Ꜩ	# A728
+	ꜩ	ꜩ	Ꜩ	Ꜩ	# A729
+	Ꜫ	ꜫ		Ꜫ	# A72A
+	ꜫ	ꜫ	Ꜫ	Ꜫ	# A72B
+	Ꜭ	ꜭ		Ꜭ	# A72C
+	ꜭ	ꜭ	Ꜭ	Ꜭ	# A72D
+	Ꜯ	ꜯ		Ꜯ	# A72E
+	ꜯ	ꜯ	Ꜯ	Ꜯ	# A72F
+	ꜰ	ꜰ			# A730
+	ꜱ	ꜱ			# A731
+	Ꜳ	ꜳ		Ꜳ	# A732
+	ꜳ	ꜳ	Ꜳ	Ꜳ	# A733
+	Ꜵ	ꜵ		Ꜵ	# A734
+	ꜵ	ꜵ	Ꜵ	Ꜵ	# A735
+	Ꜷ	ꜷ		Ꜷ	# A736
+	ꜷ	ꜷ	Ꜷ	Ꜷ	# A737
+	Ꜹ	ꜹ		Ꜹ	# A738
+	ꜹ	ꜹ	Ꜹ	Ꜹ	# A739
+	Ꜻ	ꜻ		Ꜻ	# A73A
+	ꜻ	ꜻ	Ꜻ	Ꜻ	# A73B
+	Ꜽ	ꜽ		Ꜽ	# A73C
+	ꜽ	ꜽ	Ꜽ	Ꜽ	# A73D
+	Ꜿ	ꜿ		Ꜿ	# A73E
+	ꜿ	ꜿ	Ꜿ	Ꜿ	# A73F
+	Ꝁ	ꝁ		Ꝁ	# A740
+	ꝁ	ꝁ	Ꝁ	Ꝁ	# A741
+	Ꝃ	ꝃ		Ꝃ	# A742
+	ꝃ	ꝃ	Ꝃ	Ꝃ	# A743
+	Ꝅ	ꝅ		Ꝅ	# A744
+	ꝅ	ꝅ	Ꝅ	Ꝅ	# A745
+	Ꝇ	ꝇ		Ꝇ	# A746
+	ꝇ	ꝇ	Ꝇ	Ꝇ	# A747
+	Ꝉ	ꝉ		Ꝉ	# A748
+	ꝉ	ꝉ	Ꝉ	Ꝉ	# A749
+	Ꝋ	ꝋ		Ꝋ	# A74A
+	ꝋ	ꝋ	Ꝋ	Ꝋ	# A74B
+	Ꝍ	ꝍ		Ꝍ	# A74C
+	ꝍ	ꝍ	Ꝍ	Ꝍ	# A74D
+	Ꝏ	ꝏ		Ꝏ	# A74E
+	ꝏ	ꝏ	Ꝏ	Ꝏ	# A74F
+	Ꝑ	ꝑ		Ꝑ	# A750
+	ꝑ	ꝑ	Ꝑ	Ꝑ	# A751
+	Ꝓ	ꝓ		Ꝓ	# A752
+	ꝓ	ꝓ	Ꝓ	Ꝓ	# A753
+	Ꝕ	ꝕ		Ꝕ	# A754
+	ꝕ	ꝕ	Ꝕ	Ꝕ	# A755
+	Ꝗ	ꝗ		Ꝗ	# A756
+	ꝗ	ꝗ	Ꝗ	Ꝗ	# A757
+	Ꝙ	ꝙ		Ꝙ	# A758
+	ꝙ	ꝙ	Ꝙ	Ꝙ	# A759
+	Ꝛ	ꝛ		Ꝛ	# A75A
+	ꝛ	ꝛ	Ꝛ	Ꝛ	# A75B
+	Ꝝ	ꝝ		Ꝝ	# A75C
+	ꝝ	ꝝ	Ꝝ	Ꝝ	# A75D
+	Ꝟ	ꝟ		Ꝟ	# A75E
+	ꝟ	ꝟ	Ꝟ	Ꝟ	# A75F
+	Ꝡ	ꝡ		Ꝡ	# A760
+	ꝡ	ꝡ	Ꝡ	Ꝡ	# A761
+	Ꝣ	ꝣ		Ꝣ	# A762
+	ꝣ	ꝣ	Ꝣ	Ꝣ	# A763
+	Ꝥ	ꝥ		Ꝥ	# A764
+	ꝥ	ꝥ	Ꝥ	Ꝥ	# A765
+	Ꝧ	ꝧ		Ꝧ	# A766
+	ꝧ	ꝧ	Ꝧ	Ꝧ	# A767
+	Ꝩ	ꝩ		Ꝩ	# A768
+	ꝩ	ꝩ	Ꝩ	Ꝩ	# A769
+	Ꝫ	ꝫ		Ꝫ	# A76A
+	ꝫ	ꝫ	Ꝫ	Ꝫ	# A76B
+	Ꝭ	ꝭ		Ꝭ	# A76C
+	ꝭ	ꝭ	Ꝭ	Ꝭ	# A76D
+	Ꝯ	ꝯ		Ꝯ	# A76E
+	ꝯ	ꝯ	Ꝯ	Ꝯ	# A76F
+	ꝱ	ꝱ			# A771
+	ꝲ	ꝲ			# A772
+	ꝳ	ꝳ			# A773
+	ꝴ	ꝴ			# A774
+	ꝵ	ꝵ			# A775
+	ꝶ	ꝶ			# A776
+	ꝷ	ꝷ			# A777
+	ꝸ	ꝸ			# A778
+	Ꝺ	ꝺ		Ꝺ	# A779
+	ꝺ	ꝺ	Ꝺ	Ꝺ	# A77A
+	Ꝼ	ꝼ		Ꝼ	# A77B
+	ꝼ	ꝼ	Ꝼ	Ꝼ	# A77C
+	Ᵹ	ᵹ		Ᵹ	# A77D
+	Ꝿ	ꝿ		Ꝿ	# A77E
+	ꝿ	ꝿ	Ꝿ	Ꝿ	# A77F
+	Ꞁ	ꞁ		Ꞁ	# A780
+	ꞁ	ꞁ	Ꞁ	Ꞁ	# A781
+	Ꞃ	ꞃ		Ꞃ	# A782
+	ꞃ	ꞃ	Ꞃ	Ꞃ	# A783
+	Ꞅ	ꞅ		Ꞅ	# A784
+	ꞅ	ꞅ	Ꞅ	Ꞅ	# A785
+	Ꞇ	ꞇ		Ꞇ	# A786
+	ꞇ	ꞇ	Ꞇ	Ꞇ	# A787
+	Ꞌ	ꞌ		Ꞌ	# A78B
+	ꞌ	ꞌ	Ꞌ	Ꞌ	# A78C
+	ff	ff	Ff	FF	# FB00
+	fi	fi	Fi	FI	# FB01
+	fl	fl	Fl	FL	# FB02
+	ffi	ffi	Ffi	FFI	# FB03
+	ffl	ffl	Ffl	FFL	# FB04
+	ſt	ſt	St	ST	# FB05
+	st	st	St	ST	# FB06
+	ﬓ	ﬓ	Մն	ՄՆ	# FB13
+	ﬔ	ﬔ	Մե	ՄԵ	# FB14
+	ﬕ	ﬕ	Մի	ՄԻ	# FB15
+	ﬖ	ﬖ	Վն	ՎՆ	# FB16
+	ﬗ	ﬗ	Մխ	ՄԽ	# FB17
+	A	a		A	# FF21
+	B	b		B	# FF22
+	C	c		C	# FF23
+	D	d		D	# FF24
+	E	e		E	# FF25
+	F	f		F	# FF26
+	G	g		G	# FF27
+	H	h		H	# FF28
+	I	i		I	# FF29
+	J	j		J	# FF2A
+	K	k		K	# FF2B
+	L	l		L	# FF2C
+	M	m		M	# FF2D
+	N	n		N	# FF2E
+	O	o		O	# FF2F
+	P	p		P	# FF30
+	Q	q		Q	# FF31
+	R	r		R	# FF32
+	S	s		S	# FF33
+	T	t		T	# FF34
+	U	u		U	# FF35
+	V	v		V	# FF36
+	W	w		W	# FF37
+	X	x		X	# FF38
+	Y	y		Y	# FF39
+	Z	z		Z	# FF3A
+	a	a	A	A	# FF41
+	b	b	B	B	# FF42
+	c	c	C	C	# FF43
+	d	d	D	D	# FF44
+	e	e	E	E	# FF45
+	f	f	F	F	# FF46
+	g	g	G	G	# FF47
+	h	h	H	H	# FF48
+	i	i	I	I	# FF49
+	j	j	J	J	# FF4A
+	k	k	K	K	# FF4B
+	l	l	L	L	# FF4C
+	m	m	M	M	# FF4D
+	n	n	N	N	# FF4E
+	o	o	O	O	# FF4F
+	p	p	P	P	# FF50
+	q	q	Q	Q	# FF51
+	r	r	R	R	# FF52
+	s	s	S	S	# FF53
+	t	t	T	T	# FF54
+	u	u	U	U	# FF55
+	v	v	V	V	# FF56
+	w	w	W	W	# FF57
+	x	x	X	X	# FF58
+	y	y	Y	Y	# FF59
+	z	z	Z	Z	# FF5A
+	𐐀	𐐨		𐐀	# 10400
+	𐐁	𐐩		𐐁	# 10401
+	𐐂	𐐪		𐐂	# 10402
+	𐐃	𐐫		𐐃	# 10403
+	𐐄	𐐬		𐐄	# 10404
+	𐐅	𐐭		𐐅	# 10405
+	𐐆	𐐮		𐐆	# 10406
+	𐐇	𐐯		𐐇	# 10407
+	𐐈	𐐰		𐐈	# 10408
+	𐐉	𐐱		𐐉	# 10409
+	𐐊	𐐲		𐐊	# 1040A
+	𐐋	𐐳		𐐋	# 1040B
+	𐐌	𐐴		𐐌	# 1040C
+	𐐍	𐐵		𐐍	# 1040D
+	𐐎	𐐶		𐐎	# 1040E
+	𐐏	𐐷		𐐏	# 1040F
+	𐐐	𐐸		𐐐	# 10410
+	𐐑	𐐹		𐐑	# 10411
+	𐐒	𐐺		𐐒	# 10412
+	𐐓	𐐻		𐐓	# 10413
+	𐐔	𐐼		𐐔	# 10414
+	𐐕	𐐽		𐐕	# 10415
+	𐐖	𐐾		𐐖	# 10416
+	𐐗	𐐿		𐐗	# 10417
+	𐐘	𐑀		𐐘	# 10418
+	𐐙	𐑁		𐐙	# 10419
+	𐐚	𐑂		𐐚	# 1041A
+	𐐛	𐑃		𐐛	# 1041B
+	𐐜	𐑄		𐐜	# 1041C
+	𐐝	𐑅		𐐝	# 1041D
+	𐐞	𐑆		𐐞	# 1041E
+	𐐟	𐑇		𐐟	# 1041F
+	𐐠	𐑈		𐐠	# 10420
+	𐐡	𐑉		𐐡	# 10421
+	𐐢	𐑊		𐐢	# 10422
+	𐐣	𐑋		𐐣	# 10423
+	𐐤	𐑌		𐐤	# 10424
+	𐐥	𐑍		𐐥	# 10425
+	𐐦	𐑎		𐐦	# 10426
+	𐐧	𐑏		𐐧	# 10427
+	𐐨	𐐨	𐐀	𐐀	# 10428
+	𐐩	𐐩	𐐁	𐐁	# 10429
+	𐐪	𐐪	𐐂	𐐂	# 1042A
+	𐐫	𐐫	𐐃	𐐃	# 1042B
+	𐐬	𐐬	𐐄	𐐄	# 1042C
+	𐐭	𐐭	𐐅	𐐅	# 1042D
+	𐐮	𐐮	𐐆	𐐆	# 1042E
+	𐐯	𐐯	𐐇	𐐇	# 1042F
+	𐐰	𐐰	𐐈	𐐈	# 10430
+	𐐱	𐐱	𐐉	𐐉	# 10431
+	𐐲	𐐲	𐐊	𐐊	# 10432
+	𐐳	𐐳	𐐋	𐐋	# 10433
+	𐐴	𐐴	𐐌	𐐌	# 10434
+	𐐵	𐐵	𐐍	𐐍	# 10435
+	𐐶	𐐶	𐐎	𐐎	# 10436
+	𐐷	𐐷	𐐏	𐐏	# 10437
+	𐐸	𐐸	𐐐	𐐐	# 10438
+	𐐹	𐐹	𐐑	𐐑	# 10439
+	𐐺	𐐺	𐐒	𐐒	# 1043A
+	𐐻	𐐻	𐐓	𐐓	# 1043B
+	𐐼	𐐼	𐐔	𐐔	# 1043C
+	𐐽	𐐽	𐐕	𐐕	# 1043D
+	𐐾	𐐾	𐐖	𐐖	# 1043E
+	𐐿	𐐿	𐐗	𐐗	# 1043F
+	𐑀	𐑀	𐐘	𐐘	# 10440
+	𐑁	𐑁	𐐙	𐐙	# 10441
+	𐑂	𐑂	𐐚	𐐚	# 10442
+	𐑃	𐑃	𐐛	𐐛	# 10443
+	𐑄	𐑄	𐐜	𐐜	# 10444
+	𐑅	𐑅	𐐝	𐐝	# 10445
+	𐑆	𐑆	𐐞	𐐞	# 10446
+	𐑇	𐑇	𐐟	𐐟	# 10447
+	𐑈	𐑈	𐐠	𐐠	# 10448
+	𐑉	𐑉	𐐡	𐐡	# 10449
+	𐑊	𐑊	𐐢	𐐢	# 1044A
+	𐑋	𐑋	𐐣	𐐣	# 1044B
+	𐑌	𐑌	𐐤	𐐤	# 1044C
+	𐑍	𐑍	𐐥	𐐥	# 1044D
+	𐑎	𐑎	𐐦	𐐦	# 1044E
+	𐑏	𐑏	𐐧	𐐧	# 1044F
+	𝐀			𝐀	# 1D400
+	𝐁			𝐁	# 1D401
+	𝐂			𝐂	# 1D402
+	𝐃			𝐃	# 1D403
+	𝐄			𝐄	# 1D404
+	𝐅			𝐅	# 1D405
+	𝐆			𝐆	# 1D406
+	𝐇			𝐇	# 1D407
+	𝐈			𝐈	# 1D408
+	𝐉			𝐉	# 1D409
+	𝐊			𝐊	# 1D40A
+	𝐋			𝐋	# 1D40B
+	𝐌			𝐌	# 1D40C
+	𝐍			𝐍	# 1D40D
+	𝐎			𝐎	# 1D40E
+	𝐏			𝐏	# 1D40F
+	𝐐			𝐐	# 1D410
+	𝐑			𝐑	# 1D411
+	𝐒			𝐒	# 1D412
+	𝐓			𝐓	# 1D413
+	𝐔			𝐔	# 1D414
+	𝐕			𝐕	# 1D415
+	𝐖			𝐖	# 1D416
+	𝐗			𝐗	# 1D417
+	𝐘			𝐘	# 1D418
+	𝐙			𝐙	# 1D419
+	𝐚	𝐚			# 1D41A
+	𝐛	𝐛			# 1D41B
+	𝐜	𝐜			# 1D41C
+	𝐝	𝐝			# 1D41D
+	𝐞	𝐞			# 1D41E
+	𝐟	𝐟			# 1D41F
+	𝐠	𝐠			# 1D420
+	𝐡	𝐡			# 1D421
+	𝐢	𝐢			# 1D422
+	𝐣	𝐣			# 1D423
+	𝐤	𝐤			# 1D424
+	𝐥	𝐥			# 1D425
+	𝐦	𝐦			# 1D426
+	𝐧	𝐧			# 1D427
+	𝐨	𝐨			# 1D428
+	𝐩	𝐩			# 1D429
+	𝐪	𝐪			# 1D42A
+	𝐫	𝐫			# 1D42B
+	𝐬	𝐬			# 1D42C
+	𝐭	𝐭			# 1D42D
+	𝐮	𝐮			# 1D42E
+	𝐯	𝐯			# 1D42F
+	𝐰	𝐰			# 1D430
+	𝐱	𝐱			# 1D431
+	𝐲	𝐲			# 1D432
+	𝐳	𝐳			# 1D433
+	𝐴			𝐴	# 1D434
+	𝐵			𝐵	# 1D435
+	𝐶			𝐶	# 1D436
+	𝐷			𝐷	# 1D437
+	𝐸			𝐸	# 1D438
+	𝐹			𝐹	# 1D439
+	𝐺			𝐺	# 1D43A
+	𝐻			𝐻	# 1D43B
+	𝐼			𝐼	# 1D43C
+	𝐽			𝐽	# 1D43D
+	𝐾			𝐾	# 1D43E
+	𝐿			𝐿	# 1D43F
+	𝑀			𝑀	# 1D440
+	𝑁			𝑁	# 1D441
+	𝑂			𝑂	# 1D442
+	𝑃			𝑃	# 1D443
+	𝑄			𝑄	# 1D444
+	𝑅			𝑅	# 1D445
+	𝑆			𝑆	# 1D446
+	𝑇			𝑇	# 1D447
+	𝑈			𝑈	# 1D448
+	𝑉			𝑉	# 1D449
+	𝑊			𝑊	# 1D44A
+	𝑋			𝑋	# 1D44B
+	𝑌			𝑌	# 1D44C
+	𝑍			𝑍	# 1D44D
+	𝑎	𝑎			# 1D44E
+	𝑏	𝑏			# 1D44F
+	𝑐	𝑐			# 1D450
+	𝑑	𝑑			# 1D451
+	𝑒	𝑒			# 1D452
+	𝑓	𝑓			# 1D453
+	𝑔	𝑔			# 1D454
+	𝑖	𝑖			# 1D456
+	𝑗	𝑗			# 1D457
+	𝑘	𝑘			# 1D458
+	𝑙	𝑙			# 1D459
+	𝑚	𝑚			# 1D45A
+	𝑛	𝑛			# 1D45B
+	𝑜	𝑜			# 1D45C
+	𝑝	𝑝			# 1D45D
+	𝑞	𝑞			# 1D45E
+	𝑟	𝑟			# 1D45F
+	𝑠	𝑠			# 1D460
+	𝑡	𝑡			# 1D461
+	𝑢	𝑢			# 1D462
+	𝑣	𝑣			# 1D463
+	𝑤	𝑤			# 1D464
+	𝑥	𝑥			# 1D465
+	𝑦	𝑦			# 1D466
+	𝑧	𝑧			# 1D467
+	𝑨			𝑨	# 1D468
+	𝑩			𝑩	# 1D469
+	𝑪			𝑪	# 1D46A
+	𝑫			𝑫	# 1D46B
+	𝑬			𝑬	# 1D46C
+	𝑭			𝑭	# 1D46D
+	𝑮			𝑮	# 1D46E
+	𝑯			𝑯	# 1D46F
+	𝑰			𝑰	# 1D470
+	𝑱			𝑱	# 1D471
+	𝑲			𝑲	# 1D472
+	𝑳			𝑳	# 1D473
+	𝑴			𝑴	# 1D474
+	𝑵			𝑵	# 1D475
+	𝑶			𝑶	# 1D476
+	𝑷			𝑷	# 1D477
+	𝑸			𝑸	# 1D478
+	𝑹			𝑹	# 1D479
+	𝑺			𝑺	# 1D47A
+	𝑻			𝑻	# 1D47B
+	𝑼			𝑼	# 1D47C
+	𝑽			𝑽	# 1D47D
+	𝑾			𝑾	# 1D47E
+	𝑿			𝑿	# 1D47F
+	𝒀			𝒀	# 1D480
+	𝒁			𝒁	# 1D481
+	𝒂	𝒂			# 1D482
+	𝒃	𝒃			# 1D483
+	𝒄	𝒄			# 1D484
+	𝒅	𝒅			# 1D485
+	𝒆	𝒆			# 1D486
+	𝒇	𝒇			# 1D487
+	𝒈	𝒈			# 1D488
+	𝒉	𝒉			# 1D489
+	𝒊	𝒊			# 1D48A
+	𝒋	𝒋			# 1D48B
+	𝒌	𝒌			# 1D48C
+	𝒍	𝒍			# 1D48D
+	𝒎	𝒎			# 1D48E
+	𝒏	𝒏			# 1D48F
+	𝒐	𝒐			# 1D490
+	𝒑	𝒑			# 1D491
+	𝒒	𝒒			# 1D492
+	𝒓	𝒓			# 1D493
+	𝒔	𝒔			# 1D494
+	𝒕	𝒕			# 1D495
+	𝒖	𝒖			# 1D496
+	𝒗	𝒗			# 1D497
+	𝒘	𝒘			# 1D498
+	𝒙	𝒙			# 1D499
+	𝒚	𝒚			# 1D49A
+	𝒛	𝒛			# 1D49B
+	𝒜			𝒜	# 1D49C
+	𝒞			𝒞	# 1D49E
+	𝒟			𝒟	# 1D49F
+	𝒢			𝒢	# 1D4A2
+	𝒥			𝒥	# 1D4A5
+	𝒦			𝒦	# 1D4A6
+	𝒩			𝒩	# 1D4A9
+	𝒪			𝒪	# 1D4AA
+	𝒫			𝒫	# 1D4AB
+	𝒬			𝒬	# 1D4AC
+	𝒮			𝒮	# 1D4AE
+	𝒯			𝒯	# 1D4AF
+	𝒰			𝒰	# 1D4B0
+	𝒱			𝒱	# 1D4B1
+	𝒲			𝒲	# 1D4B2
+	𝒳			𝒳	# 1D4B3
+	𝒴			𝒴	# 1D4B4
+	𝒵			𝒵	# 1D4B5
+	𝒶	𝒶			# 1D4B6
+	𝒷	𝒷			# 1D4B7
+	𝒸	𝒸			# 1D4B8
+	𝒹	𝒹			# 1D4B9
+	𝒻	𝒻			# 1D4BB
+	𝒽	𝒽			# 1D4BD
+	𝒾	𝒾			# 1D4BE
+	𝒿	𝒿			# 1D4BF
+	𝓀	𝓀			# 1D4C0
+	𝓁	𝓁			# 1D4C1
+	𝓂	𝓂			# 1D4C2
+	𝓃	𝓃			# 1D4C3
+	𝓅	𝓅			# 1D4C5
+	𝓆	𝓆			# 1D4C6
+	𝓇	𝓇			# 1D4C7
+	𝓈	𝓈			# 1D4C8
+	𝓉	𝓉			# 1D4C9
+	𝓊	𝓊			# 1D4CA
+	𝓋	𝓋			# 1D4CB
+	𝓌	𝓌			# 1D4CC
+	𝓍	𝓍			# 1D4CD
+	𝓎	𝓎			# 1D4CE
+	𝓏	𝓏			# 1D4CF
+	𝓐			𝓐	# 1D4D0
+	𝓑			𝓑	# 1D4D1
+	𝓒			𝓒	# 1D4D2
+	𝓓			𝓓	# 1D4D3
+	𝓔			𝓔	# 1D4D4
+	𝓕			𝓕	# 1D4D5
+	𝓖			𝓖	# 1D4D6
+	𝓗			𝓗	# 1D4D7
+	𝓘			𝓘	# 1D4D8
+	𝓙			𝓙	# 1D4D9
+	𝓚			𝓚	# 1D4DA
+	𝓛			𝓛	# 1D4DB
+	𝓜			𝓜	# 1D4DC
+	𝓝			𝓝	# 1D4DD
+	𝓞			𝓞	# 1D4DE
+	𝓟			𝓟	# 1D4DF
+	𝓠			𝓠	# 1D4E0
+	𝓡			𝓡	# 1D4E1
+	𝓢			𝓢	# 1D4E2
+	𝓣			𝓣	# 1D4E3
+	𝓤			𝓤	# 1D4E4
+	𝓥			𝓥	# 1D4E5
+	𝓦			𝓦	# 1D4E6
+	𝓧			𝓧	# 1D4E7
+	𝓨			𝓨	# 1D4E8
+	𝓩			𝓩	# 1D4E9
+	𝓪	𝓪			# 1D4EA
+	𝓫	𝓫			# 1D4EB
+	𝓬	𝓬			# 1D4EC
+	𝓭	𝓭			# 1D4ED
+	𝓮	𝓮			# 1D4EE
+	𝓯	𝓯			# 1D4EF
+	𝓰	𝓰			# 1D4F0
+	𝓱	𝓱			# 1D4F1
+	𝓲	𝓲			# 1D4F2
+	𝓳	𝓳			# 1D4F3
+	𝓴	𝓴			# 1D4F4
+	𝓵	𝓵			# 1D4F5
+	𝓶	𝓶			# 1D4F6
+	𝓷	𝓷			# 1D4F7
+	𝓸	𝓸			# 1D4F8
+	𝓹	𝓹			# 1D4F9
+	𝓺	𝓺			# 1D4FA
+	𝓻	𝓻			# 1D4FB
+	𝓼	𝓼			# 1D4FC
+	𝓽	𝓽			# 1D4FD
+	𝓾	𝓾			# 1D4FE
+	𝓿	𝓿			# 1D4FF
+	𝔀	𝔀			# 1D500
+	𝔁	𝔁			# 1D501
+	𝔂	𝔂			# 1D502
+	𝔃	𝔃			# 1D503
+	𝔄			𝔄	# 1D504
+	𝔅			𝔅	# 1D505
+	𝔇			𝔇	# 1D507
+	𝔈			𝔈	# 1D508
+	𝔉			𝔉	# 1D509
+	𝔊			𝔊	# 1D50A
+	𝔍			𝔍	# 1D50D
+	𝔎			𝔎	# 1D50E
+	𝔏			𝔏	# 1D50F
+	𝔐			𝔐	# 1D510
+	𝔑			𝔑	# 1D511
+	𝔒			𝔒	# 1D512
+	𝔓			𝔓	# 1D513
+	𝔔			𝔔	# 1D514
+	𝔖			𝔖	# 1D516
+	𝔗			𝔗	# 1D517
+	𝔘			𝔘	# 1D518
+	𝔙			𝔙	# 1D519
+	𝔚			𝔚	# 1D51A
+	𝔛			𝔛	# 1D51B
+	𝔜			𝔜	# 1D51C
+	𝔞	𝔞			# 1D51E
+	𝔟	𝔟			# 1D51F
+	𝔠	𝔠			# 1D520
+	𝔡	𝔡			# 1D521
+	𝔢	𝔢			# 1D522
+	𝔣	𝔣			# 1D523
+	𝔤	𝔤			# 1D524
+	𝔥	𝔥			# 1D525
+	𝔦	𝔦			# 1D526
+	𝔧	𝔧			# 1D527
+	𝔨	𝔨			# 1D528
+	𝔩	𝔩			# 1D529
+	𝔪	𝔪			# 1D52A
+	𝔫	𝔫			# 1D52B
+	𝔬	𝔬			# 1D52C
+	𝔭	𝔭			# 1D52D
+	𝔮	𝔮			# 1D52E
+	𝔯	𝔯			# 1D52F
+	𝔰	𝔰			# 1D530
+	𝔱	𝔱			# 1D531
+	𝔲	𝔲			# 1D532
+	𝔳	𝔳			# 1D533
+	𝔴	𝔴			# 1D534
+	𝔵	𝔵			# 1D535
+	𝔶	𝔶			# 1D536
+	𝔷	𝔷			# 1D537
+	𝔸			𝔸	# 1D538
+	𝔹			𝔹	# 1D539
+	𝔻			𝔻	# 1D53B
+	𝔼			𝔼	# 1D53C
+	𝔽			𝔽	# 1D53D
+	𝔾			𝔾	# 1D53E
+	𝕀			𝕀	# 1D540
+	𝕁			𝕁	# 1D541
+	𝕂			𝕂	# 1D542
+	𝕃			𝕃	# 1D543
+	𝕄			𝕄	# 1D544
+	𝕆			𝕆	# 1D546
+	𝕊			𝕊	# 1D54A
+	𝕋			𝕋	# 1D54B
+	𝕌			𝕌	# 1D54C
+	𝕍			𝕍	# 1D54D
+	𝕎			𝕎	# 1D54E
+	𝕏			𝕏	# 1D54F
+	𝕐			𝕐	# 1D550
+	𝕒	𝕒			# 1D552
+	𝕓	𝕓			# 1D553
+	𝕔	𝕔			# 1D554
+	𝕕	𝕕			# 1D555
+	𝕖	𝕖			# 1D556
+	𝕗	𝕗			# 1D557
+	𝕘	𝕘			# 1D558
+	𝕙	𝕙			# 1D559
+	𝕚	𝕚			# 1D55A
+	𝕛	𝕛			# 1D55B
+	𝕜	𝕜			# 1D55C
+	𝕝	𝕝			# 1D55D
+	𝕞	𝕞			# 1D55E
+	𝕟	𝕟			# 1D55F
+	𝕠	𝕠			# 1D560
+	𝕡	𝕡			# 1D561
+	𝕢	𝕢			# 1D562
+	𝕣	𝕣			# 1D563
+	𝕤	𝕤			# 1D564
+	𝕥	𝕥			# 1D565
+	𝕦	𝕦			# 1D566
+	𝕧	𝕧			# 1D567
+	𝕨	𝕨			# 1D568
+	𝕩	𝕩			# 1D569
+	𝕪	𝕪			# 1D56A
+	𝕫	𝕫			# 1D56B
+	𝕬			𝕬	# 1D56C
+	𝕭			𝕭	# 1D56D
+	𝕮			𝕮	# 1D56E
+	𝕯			𝕯	# 1D56F
+	𝕰			𝕰	# 1D570
+	𝕱			𝕱	# 1D571
+	𝕲			𝕲	# 1D572
+	𝕳			𝕳	# 1D573
+	𝕴			𝕴	# 1D574
+	𝕵			𝕵	# 1D575
+	𝕶			𝕶	# 1D576
+	𝕷			𝕷	# 1D577
+	𝕸			𝕸	# 1D578
+	𝕹			𝕹	# 1D579
+	𝕺			𝕺	# 1D57A
+	𝕻			𝕻	# 1D57B
+	𝕼			𝕼	# 1D57C
+	𝕽			𝕽	# 1D57D
+	𝕾			𝕾	# 1D57E
+	𝕿			𝕿	# 1D57F
+	𝖀			𝖀	# 1D580
+	𝖁			𝖁	# 1D581
+	𝖂			𝖂	# 1D582
+	𝖃			𝖃	# 1D583
+	𝖄			𝖄	# 1D584
+	𝖅			𝖅	# 1D585
+	𝖆	𝖆			# 1D586
+	𝖇	𝖇			# 1D587
+	𝖈	𝖈			# 1D588
+	𝖉	𝖉			# 1D589
+	𝖊	𝖊			# 1D58A
+	𝖋	𝖋			# 1D58B
+	𝖌	𝖌			# 1D58C
+	𝖍	𝖍			# 1D58D
+	𝖎	𝖎			# 1D58E
+	𝖏	𝖏			# 1D58F
+	𝖐	𝖐			# 1D590
+	𝖑	𝖑			# 1D591
+	𝖒	𝖒			# 1D592
+	𝖓	𝖓			# 1D593
+	𝖔	𝖔			# 1D594
+	𝖕	𝖕			# 1D595
+	𝖖	𝖖			# 1D596
+	𝖗	𝖗			# 1D597
+	𝖘	𝖘			# 1D598
+	𝖙	𝖙			# 1D599
+	𝖚	𝖚			# 1D59A
+	𝖛	𝖛			# 1D59B
+	𝖜	𝖜			# 1D59C
+	𝖝	𝖝			# 1D59D
+	𝖞	𝖞			# 1D59E
+	𝖟	𝖟			# 1D59F
+	𝖠			𝖠	# 1D5A0
+	𝖡			𝖡	# 1D5A1
+	𝖢			𝖢	# 1D5A2
+	𝖣			𝖣	# 1D5A3
+	𝖤			𝖤	# 1D5A4
+	𝖥			𝖥	# 1D5A5
+	𝖦			𝖦	# 1D5A6
+	𝖧			𝖧	# 1D5A7
+	𝖨			𝖨	# 1D5A8
+	𝖩			𝖩	# 1D5A9
+	𝖪			𝖪	# 1D5AA
+	𝖫			𝖫	# 1D5AB
+	𝖬			𝖬	# 1D5AC
+	𝖭			𝖭	# 1D5AD
+	𝖮			𝖮	# 1D5AE
+	𝖯			𝖯	# 1D5AF
+	𝖰			𝖰	# 1D5B0
+	𝖱			𝖱	# 1D5B1
+	𝖲			𝖲	# 1D5B2
+	𝖳			𝖳	# 1D5B3
+	𝖴			𝖴	# 1D5B4
+	𝖵			𝖵	# 1D5B5
+	𝖶			𝖶	# 1D5B6
+	𝖷			𝖷	# 1D5B7
+	𝖸			𝖸	# 1D5B8
+	𝖹			𝖹	# 1D5B9
+	𝖺	𝖺			# 1D5BA
+	𝖻	𝖻			# 1D5BB
+	𝖼	𝖼			# 1D5BC
+	𝖽	𝖽			# 1D5BD
+	𝖾	𝖾			# 1D5BE
+	𝖿	𝖿			# 1D5BF
+	𝗀	𝗀			# 1D5C0
+	𝗁	𝗁			# 1D5C1
+	𝗂	𝗂			# 1D5C2
+	𝗃	𝗃			# 1D5C3
+	𝗄	𝗄			# 1D5C4
+	𝗅	𝗅			# 1D5C5
+	𝗆	𝗆			# 1D5C6
+	𝗇	𝗇			# 1D5C7
+	𝗈	𝗈			# 1D5C8
+	𝗉	𝗉			# 1D5C9
+	𝗊	𝗊			# 1D5CA
+	𝗋	𝗋			# 1D5CB
+	𝗌	𝗌			# 1D5CC
+	𝗍	𝗍			# 1D5CD
+	𝗎	𝗎			# 1D5CE
+	𝗏	𝗏			# 1D5CF
+	𝗐	𝗐			# 1D5D0
+	𝗑	𝗑			# 1D5D1
+	𝗒	𝗒			# 1D5D2
+	𝗓	𝗓			# 1D5D3
+	𝗔			𝗔	# 1D5D4
+	𝗕			𝗕	# 1D5D5
+	𝗖			𝗖	# 1D5D6
+	𝗗			𝗗	# 1D5D7
+	𝗘			𝗘	# 1D5D8
+	𝗙			𝗙	# 1D5D9
+	𝗚			𝗚	# 1D5DA
+	𝗛			𝗛	# 1D5DB
+	𝗜			𝗜	# 1D5DC
+	𝗝			𝗝	# 1D5DD
+	𝗞			𝗞	# 1D5DE
+	𝗟			𝗟	# 1D5DF
+	𝗠			𝗠	# 1D5E0
+	𝗡			𝗡	# 1D5E1
+	𝗢			𝗢	# 1D5E2
+	𝗣			𝗣	# 1D5E3
+	𝗤			𝗤	# 1D5E4
+	𝗥			𝗥	# 1D5E5
+	𝗦			𝗦	# 1D5E6
+	𝗧			𝗧	# 1D5E7
+	𝗨			𝗨	# 1D5E8
+	𝗩			𝗩	# 1D5E9
+	𝗪			𝗪	# 1D5EA
+	𝗫			𝗫	# 1D5EB
+	𝗬			𝗬	# 1D5EC
+	𝗭			𝗭	# 1D5ED
+	𝗮	𝗮			# 1D5EE
+	𝗯	𝗯			# 1D5EF
+	𝗰	𝗰			# 1D5F0
+	𝗱	𝗱			# 1D5F1
+	𝗲	𝗲			# 1D5F2
+	𝗳	𝗳			# 1D5F3
+	𝗴	𝗴			# 1D5F4
+	𝗵	𝗵			# 1D5F5
+	𝗶	𝗶			# 1D5F6
+	𝗷	𝗷			# 1D5F7
+	𝗸	𝗸			# 1D5F8
+	𝗹	𝗹			# 1D5F9
+	𝗺	𝗺			# 1D5FA
+	𝗻	𝗻			# 1D5FB
+	𝗼	𝗼			# 1D5FC
+	𝗽	𝗽			# 1D5FD
+	𝗾	𝗾			# 1D5FE
+	𝗿	𝗿			# 1D5FF
+	𝘀	𝘀			# 1D600
+	𝘁	𝘁			# 1D601
+	𝘂	𝘂			# 1D602
+	𝘃	𝘃			# 1D603
+	𝘄	𝘄			# 1D604
+	𝘅	𝘅			# 1D605
+	𝘆	𝘆			# 1D606
+	𝘇	𝘇			# 1D607
+	𝘈			𝘈	# 1D608
+	𝘉			𝘉	# 1D609
+	𝘊			𝘊	# 1D60A
+	𝘋			𝘋	# 1D60B
+	𝘌			𝘌	# 1D60C
+	𝘍			𝘍	# 1D60D
+	𝘎			𝘎	# 1D60E
+	𝘏			𝘏	# 1D60F
+	𝘐			𝘐	# 1D610
+	𝘑			𝘑	# 1D611
+	𝘒			𝘒	# 1D612
+	𝘓			𝘓	# 1D613
+	𝘔			𝘔	# 1D614
+	𝘕			𝘕	# 1D615
+	𝘖			𝘖	# 1D616
+	𝘗			𝘗	# 1D617
+	𝘘			𝘘	# 1D618
+	𝘙			𝘙	# 1D619
+	𝘚			𝘚	# 1D61A
+	𝘛			𝘛	# 1D61B
+	𝘜			𝘜	# 1D61C
+	𝘝			𝘝	# 1D61D
+	𝘞			𝘞	# 1D61E
+	𝘟			𝘟	# 1D61F
+	𝘠			𝘠	# 1D620
+	𝘡			𝘡	# 1D621
+	𝘢	𝘢			# 1D622
+	𝘣	𝘣			# 1D623
+	𝘤	𝘤			# 1D624
+	𝘥	𝘥			# 1D625
+	𝘦	𝘦			# 1D626
+	𝘧	𝘧			# 1D627
+	𝘨	𝘨			# 1D628
+	𝘩	𝘩			# 1D629
+	𝘪	𝘪			# 1D62A
+	𝘫	𝘫			# 1D62B
+	𝘬	𝘬			# 1D62C
+	𝘭	𝘭			# 1D62D
+	𝘮	𝘮			# 1D62E
+	𝘯	𝘯			# 1D62F
+	𝘰	𝘰			# 1D630
+	𝘱	𝘱			# 1D631
+	𝘲	𝘲			# 1D632
+	𝘳	𝘳			# 1D633
+	𝘴	𝘴			# 1D634
+	𝘵	𝘵			# 1D635
+	𝘶	𝘶			# 1D636
+	𝘷	𝘷			# 1D637
+	𝘸	𝘸			# 1D638
+	𝘹	𝘹			# 1D639
+	𝘺	𝘺			# 1D63A
+	𝘻	𝘻			# 1D63B
+	𝘼			𝘼	# 1D63C
+	𝘽			𝘽	# 1D63D
+	𝘾			𝘾	# 1D63E
+	𝘿			𝘿	# 1D63F
+	𝙀			𝙀	# 1D640
+	𝙁			𝙁	# 1D641
+	𝙂			𝙂	# 1D642
+	𝙃			𝙃	# 1D643
+	𝙄			𝙄	# 1D644
+	𝙅			𝙅	# 1D645
+	𝙆			𝙆	# 1D646
+	𝙇			𝙇	# 1D647
+	𝙈			𝙈	# 1D648
+	𝙉			𝙉	# 1D649
+	𝙊			𝙊	# 1D64A
+	𝙋			𝙋	# 1D64B
+	𝙌			𝙌	# 1D64C
+	𝙍			𝙍	# 1D64D
+	𝙎			𝙎	# 1D64E
+	𝙏			𝙏	# 1D64F
+	𝙐			𝙐	# 1D650
+	𝙑			𝙑	# 1D651
+	𝙒			𝙒	# 1D652
+	𝙓			𝙓	# 1D653
+	𝙔			𝙔	# 1D654
+	𝙕			𝙕	# 1D655
+	𝙖	𝙖			# 1D656
+	𝙗	𝙗			# 1D657
+	𝙘	𝙘			# 1D658
+	𝙙	𝙙			# 1D659
+	𝙚	𝙚			# 1D65A
+	𝙛	𝙛			# 1D65B
+	𝙜	𝙜			# 1D65C
+	𝙝	𝙝			# 1D65D
+	𝙞	𝙞			# 1D65E
+	𝙟	𝙟			# 1D65F
+	𝙠	𝙠			# 1D660
+	𝙡	𝙡			# 1D661
+	𝙢	𝙢			# 1D662
+	𝙣	𝙣			# 1D663
+	𝙤	𝙤			# 1D664
+	𝙥	𝙥			# 1D665
+	𝙦	𝙦			# 1D666
+	𝙧	𝙧			# 1D667
+	𝙨	𝙨			# 1D668
+	𝙩	𝙩			# 1D669
+	𝙪	𝙪			# 1D66A
+	𝙫	𝙫			# 1D66B
+	𝙬	𝙬			# 1D66C
+	𝙭	𝙭			# 1D66D
+	𝙮	𝙮			# 1D66E
+	𝙯	𝙯			# 1D66F
+	𝙰			𝙰	# 1D670
+	𝙱			𝙱	# 1D671
+	𝙲			𝙲	# 1D672
+	𝙳			𝙳	# 1D673
+	𝙴			𝙴	# 1D674
+	𝙵			𝙵	# 1D675
+	𝙶			𝙶	# 1D676
+	𝙷			𝙷	# 1D677
+	𝙸			𝙸	# 1D678
+	𝙹			𝙹	# 1D679
+	𝙺			𝙺	# 1D67A
+	𝙻			𝙻	# 1D67B
+	𝙼			𝙼	# 1D67C
+	𝙽			𝙽	# 1D67D
+	𝙾			𝙾	# 1D67E
+	𝙿			𝙿	# 1D67F
+	𝚀			𝚀	# 1D680
+	𝚁			𝚁	# 1D681
+	𝚂			𝚂	# 1D682
+	𝚃			𝚃	# 1D683
+	𝚄			𝚄	# 1D684
+	𝚅			𝚅	# 1D685
+	𝚆			𝚆	# 1D686
+	𝚇			𝚇	# 1D687
+	𝚈			𝚈	# 1D688
+	𝚉			𝚉	# 1D689
+	𝚊	𝚊			# 1D68A
+	𝚋	𝚋			# 1D68B
+	𝚌	𝚌			# 1D68C
+	𝚍	𝚍			# 1D68D
+	𝚎	𝚎			# 1D68E
+	𝚏	𝚏			# 1D68F
+	𝚐	𝚐			# 1D690
+	𝚑	𝚑			# 1D691
+	𝚒	𝚒			# 1D692
+	𝚓	𝚓			# 1D693
+	𝚔	𝚔			# 1D694
+	𝚕	𝚕			# 1D695
+	𝚖	𝚖			# 1D696
+	𝚗	𝚗			# 1D697
+	𝚘	𝚘			# 1D698
+	𝚙	𝚙			# 1D699
+	𝚚	𝚚			# 1D69A
+	𝚛	𝚛			# 1D69B
+	𝚜	𝚜			# 1D69C
+	𝚝	𝚝			# 1D69D
+	𝚞	𝚞			# 1D69E
+	𝚟	𝚟			# 1D69F
+	𝚠	𝚠			# 1D6A0
+	𝚡	𝚡			# 1D6A1
+	𝚢	𝚢			# 1D6A2
+	𝚣	𝚣			# 1D6A3
+	𝚤	𝚤			# 1D6A4
+	𝚥	𝚥			# 1D6A5
+	𝚨			𝚨	# 1D6A8
+	𝚩			𝚩	# 1D6A9
+	𝚪			𝚪	# 1D6AA
+	𝚫			𝚫	# 1D6AB
+	𝚬			𝚬	# 1D6AC
+	𝚭			𝚭	# 1D6AD
+	𝚮			𝚮	# 1D6AE
+	𝚯			𝚯	# 1D6AF
+	𝚰			𝚰	# 1D6B0
+	𝚱			𝚱	# 1D6B1
+	𝚲			𝚲	# 1D6B2
+	𝚳			𝚳	# 1D6B3
+	𝚴			𝚴	# 1D6B4
+	𝚵			𝚵	# 1D6B5
+	𝚶			𝚶	# 1D6B6
+	𝚷			𝚷	# 1D6B7
+	𝚸			𝚸	# 1D6B8
+	𝚹			𝚹	# 1D6B9
+	𝚺			𝚺	# 1D6BA
+	𝚻			𝚻	# 1D6BB
+	𝚼			𝚼	# 1D6BC
+	𝚽			𝚽	# 1D6BD
+	𝚾			𝚾	# 1D6BE
+	𝚿			𝚿	# 1D6BF
+	𝛀			𝛀	# 1D6C0
+	𝛂	𝛂			# 1D6C2
+	𝛃	𝛃			# 1D6C3
+	𝛄	𝛄			# 1D6C4
+	𝛅	𝛅			# 1D6C5
+	𝛆	𝛆			# 1D6C6
+	𝛇	𝛇			# 1D6C7
+	𝛈	𝛈			# 1D6C8
+	𝛉	𝛉			# 1D6C9
+	𝛊	𝛊			# 1D6CA
+	𝛋	𝛋			# 1D6CB
+	𝛌	𝛌			# 1D6CC
+	𝛍	𝛍			# 1D6CD
+	𝛎	𝛎			# 1D6CE
+	𝛏	𝛏			# 1D6CF
+	𝛐	𝛐			# 1D6D0
+	𝛑	𝛑			# 1D6D1
+	𝛒	𝛒			# 1D6D2
+	𝛓	𝛓			# 1D6D3
+	𝛔	𝛔			# 1D6D4
+	𝛕	𝛕			# 1D6D5
+	𝛖	𝛖			# 1D6D6
+	𝛗	𝛗			# 1D6D7
+	𝛘	𝛘			# 1D6D8
+	𝛙	𝛙			# 1D6D9
+	𝛚	𝛚			# 1D6DA
+	𝛜	𝛜			# 1D6DC
+	𝛝	𝛝			# 1D6DD
+	𝛞	𝛞			# 1D6DE
+	𝛟	𝛟			# 1D6DF
+	𝛠	𝛠			# 1D6E0
+	𝛡	𝛡			# 1D6E1
+	𝛢			𝛢	# 1D6E2
+	𝛣			𝛣	# 1D6E3
+	𝛤			𝛤	# 1D6E4
+	𝛥			𝛥	# 1D6E5
+	𝛦			𝛦	# 1D6E6
+	𝛧			𝛧	# 1D6E7
+	𝛨			𝛨	# 1D6E8
+	𝛩			𝛩	# 1D6E9
+	𝛪			𝛪	# 1D6EA
+	𝛫			𝛫	# 1D6EB
+	𝛬			𝛬	# 1D6EC
+	𝛭			𝛭	# 1D6ED
+	𝛮			𝛮	# 1D6EE
+	𝛯			𝛯	# 1D6EF
+	𝛰			𝛰	# 1D6F0
+	𝛱			𝛱	# 1D6F1
+	𝛲			𝛲	# 1D6F2
+	𝛳			𝛳	# 1D6F3
+	𝛴			𝛴	# 1D6F4
+	𝛵			𝛵	# 1D6F5
+	𝛶			𝛶	# 1D6F6
+	𝛷			𝛷	# 1D6F7
+	𝛸			𝛸	# 1D6F8
+	𝛹			𝛹	# 1D6F9
+	𝛺			𝛺	# 1D6FA
+	𝛼	𝛼			# 1D6FC
+	𝛽	𝛽			# 1D6FD
+	𝛾	𝛾			# 1D6FE
+	𝛿	𝛿			# 1D6FF
+	𝜀	𝜀			# 1D700
+	𝜁	𝜁			# 1D701
+	𝜂	𝜂			# 1D702
+	𝜃	𝜃			# 1D703
+	𝜄	𝜄			# 1D704
+	𝜅	𝜅			# 1D705
+	𝜆	𝜆			# 1D706
+	𝜇	𝜇			# 1D707
+	𝜈	𝜈			# 1D708
+	𝜉	𝜉			# 1D709
+	𝜊	𝜊			# 1D70A
+	𝜋	𝜋			# 1D70B
+	𝜌	𝜌			# 1D70C
+	𝜍	𝜍			# 1D70D
+	𝜎	𝜎			# 1D70E
+	𝜏	𝜏			# 1D70F
+	𝜐	𝜐			# 1D710
+	𝜑	𝜑			# 1D711
+	𝜒	𝜒			# 1D712
+	𝜓	𝜓			# 1D713
+	𝜔	𝜔			# 1D714
+	𝜖	𝜖			# 1D716
+	𝜗	𝜗			# 1D717
+	𝜘	𝜘			# 1D718
+	𝜙	𝜙			# 1D719
+	𝜚	𝜚			# 1D71A
+	𝜛	𝜛			# 1D71B
+	𝜜			𝜜	# 1D71C
+	𝜝			𝜝	# 1D71D
+	𝜞			𝜞	# 1D71E
+	𝜟			𝜟	# 1D71F
+	𝜠			𝜠	# 1D720
+	𝜡			𝜡	# 1D721
+	𝜢			𝜢	# 1D722
+	𝜣			𝜣	# 1D723
+	𝜤			𝜤	# 1D724
+	𝜥			𝜥	# 1D725
+	𝜦			𝜦	# 1D726
+	𝜧			𝜧	# 1D727
+	𝜨			𝜨	# 1D728
+	𝜩			𝜩	# 1D729
+	𝜪			𝜪	# 1D72A
+	𝜫			𝜫	# 1D72B
+	𝜬			𝜬	# 1D72C
+	𝜭			𝜭	# 1D72D
+	𝜮			𝜮	# 1D72E
+	𝜯			𝜯	# 1D72F
+	𝜰			𝜰	# 1D730
+	𝜱			𝜱	# 1D731
+	𝜲			𝜲	# 1D732
+	𝜳			𝜳	# 1D733
+	𝜴			𝜴	# 1D734
+	𝜶	𝜶			# 1D736
+	𝜷	𝜷			# 1D737
+	𝜸	𝜸			# 1D738
+	𝜹	𝜹			# 1D739
+	𝜺	𝜺			# 1D73A
+	𝜻	𝜻			# 1D73B
+	𝜼	𝜼			# 1D73C
+	𝜽	𝜽			# 1D73D
+	𝜾	𝜾			# 1D73E
+	𝜿	𝜿			# 1D73F
+	𝝀	𝝀			# 1D740
+	𝝁	𝝁			# 1D741
+	𝝂	𝝂			# 1D742
+	𝝃	𝝃			# 1D743
+	𝝄	𝝄			# 1D744
+	𝝅	𝝅			# 1D745
+	𝝆	𝝆			# 1D746
+	𝝇	𝝇			# 1D747
+	𝝈	𝝈			# 1D748
+	𝝉	𝝉			# 1D749
+	𝝊	𝝊			# 1D74A
+	𝝋	𝝋			# 1D74B
+	𝝌	𝝌			# 1D74C
+	𝝍	𝝍			# 1D74D
+	𝝎	𝝎			# 1D74E
+	𝝐	𝝐			# 1D750
+	𝝑	𝝑			# 1D751
+	𝝒	𝝒			# 1D752
+	𝝓	𝝓			# 1D753
+	𝝔	𝝔			# 1D754
+	𝝕	𝝕			# 1D755
+	𝝖			𝝖	# 1D756
+	𝝗			𝝗	# 1D757
+	𝝘			𝝘	# 1D758
+	𝝙			𝝙	# 1D759
+	𝝚			𝝚	# 1D75A
+	𝝛			𝝛	# 1D75B
+	𝝜			𝝜	# 1D75C
+	𝝝			𝝝	# 1D75D
+	𝝞			𝝞	# 1D75E
+	𝝟			𝝟	# 1D75F
+	𝝠			𝝠	# 1D760
+	𝝡			𝝡	# 1D761
+	𝝢			𝝢	# 1D762
+	𝝣			𝝣	# 1D763
+	𝝤			𝝤	# 1D764
+	𝝥			𝝥	# 1D765
+	𝝦			𝝦	# 1D766
+	𝝧			𝝧	# 1D767
+	𝝨			𝝨	# 1D768
+	𝝩			𝝩	# 1D769
+	𝝪			𝝪	# 1D76A
+	𝝫			𝝫	# 1D76B
+	𝝬			𝝬	# 1D76C
+	𝝭			𝝭	# 1D76D
+	𝝮			𝝮	# 1D76E
+	𝝰	𝝰			# 1D770
+	𝝱	𝝱			# 1D771
+	𝝲	𝝲			# 1D772
+	𝝳	𝝳			# 1D773
+	𝝴	𝝴			# 1D774
+	𝝵	𝝵			# 1D775
+	𝝶	𝝶			# 1D776
+	𝝷	𝝷			# 1D777
+	𝝸	𝝸			# 1D778
+	𝝹	𝝹			# 1D779
+	𝝺	𝝺			# 1D77A
+	𝝻	𝝻			# 1D77B
+	𝝼	𝝼			# 1D77C
+	𝝽	𝝽			# 1D77D
+	𝝾	𝝾			# 1D77E
+	𝝿	𝝿			# 1D77F
+	𝞀	𝞀			# 1D780
+	𝞁	𝞁			# 1D781
+	𝞂	𝞂			# 1D782
+	𝞃	𝞃			# 1D783
+	𝞄	𝞄			# 1D784
+	𝞅	𝞅			# 1D785
+	𝞆	𝞆			# 1D786
+	𝞇	𝞇			# 1D787
+	𝞈	𝞈			# 1D788
+	𝞊	𝞊			# 1D78A
+	𝞋	𝞋			# 1D78B
+	𝞌	𝞌			# 1D78C
+	𝞍	𝞍			# 1D78D
+	𝞎	𝞎			# 1D78E
+	𝞏	𝞏			# 1D78F
+	𝞐			𝞐	# 1D790
+	𝞑			𝞑	# 1D791
+	𝞒			𝞒	# 1D792
+	𝞓			𝞓	# 1D793
+	𝞔			𝞔	# 1D794
+	𝞕			𝞕	# 1D795
+	𝞖			𝞖	# 1D796
+	𝞗			𝞗	# 1D797
+	𝞘			𝞘	# 1D798
+	𝞙			𝞙	# 1D799
+	𝞚			𝞚	# 1D79A
+	𝞛			𝞛	# 1D79B
+	𝞜			𝞜	# 1D79C
+	𝞝			𝞝	# 1D79D
+	𝞞			𝞞	# 1D79E
+	𝞟			𝞟	# 1D79F
+	𝞠			𝞠	# 1D7A0
+	𝞡			𝞡	# 1D7A1
+	𝞢			𝞢	# 1D7A2
+	𝞣			𝞣	# 1D7A3
+	𝞤			𝞤	# 1D7A4
+	𝞥			𝞥	# 1D7A5
+	𝞦			𝞦	# 1D7A6
+	𝞧			𝞧	# 1D7A7
+	𝞨			𝞨	# 1D7A8
+	𝞪	𝞪			# 1D7AA
+	𝞫	𝞫			# 1D7AB
+	𝞬	𝞬			# 1D7AC
+	𝞭	𝞭			# 1D7AD
+	𝞮	𝞮			# 1D7AE
+	𝞯	𝞯			# 1D7AF
+	𝞰	𝞰			# 1D7B0
+	𝞱	𝞱			# 1D7B1
+	𝞲	𝞲			# 1D7B2
+	𝞳	𝞳			# 1D7B3
+	𝞴	𝞴			# 1D7B4
+	𝞵	𝞵			# 1D7B5
+	𝞶	𝞶			# 1D7B6
+	𝞷	𝞷			# 1D7B7
+	𝞸	𝞸			# 1D7B8
+	𝞹	𝞹			# 1D7B9
+	𝞺	𝞺			# 1D7BA
+	𝞻	𝞻			# 1D7BB
+	𝞼	𝞼			# 1D7BC
+	𝞽	𝞽			# 1D7BD
+	𝞾	𝞾			# 1D7BE
+	𝞿	𝞿			# 1D7BF
+	𝟀	𝟀			# 1D7C0
+	𝟁	𝟁			# 1D7C1
+	𝟂	𝟂			# 1D7C2
+	𝟄	𝟄			# 1D7C4
+	𝟅	𝟅			# 1D7C5
+	𝟆	𝟆			# 1D7C6
+	𝟇	𝟇			# 1D7C7
+	𝟈	𝟈			# 1D7C8
+	𝟉	𝟉			# 1D7C9
+	𝟊			𝟊	# 1D7CA
+	𝟋	𝟋			# 1D7CB
diff --git a/tests/checksum-test.c b/tests/checksum-test.c
new file mode 100644
index 0000000..dc1a61e
--- /dev/null
+++ b/tests/checksum-test.c
@@ -0,0 +1,676 @@
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+
+/* Test GChecksum by computing the checksums of every initial
+ * substring of this string, calling g_checksum_update with chunks of
+ * every possible size. That is, first it computes the checksums of
+ * "", then "T". Then it computes the checksums of "Th", first by
+ * feeding the GChecksum 1 letter a time, then 2. Then it does "The",
+ * first feeding it one letter at a time, then 2, then 3. Etc.
+ *
+ * MD5, SHA1, and SHA256 all use a 64-byte buffer internally; this
+ * string is intentionally more than twice that length.
+ */
+
+#define FIXED_STR               "The quick brown fox jumps over the lazy dog. Jackdaws love my big sphinx of quartz. Pack my box with five dozen liquor jugs. How razorback-jumping frogs can level six piqued gymnasts!"
+#define FIXED_LEN               (strlen (FIXED_STR))
+
+const char *MD5_sums[] = {
+  "d41d8cd98f00b204e9800998ecf8427e",
+  "b9ece18c950afbfa6b0fdbfa4ff731d3",
+  "eeeb9a8eb45dd351d9ec0eb4acce66ce",
+  "a4704fd35f0308287f2937ba3eccf5fe",
+  "02edd93949f6d3c57d9822691b59f649",
+  "6131a51747610d0ae4e86c3a3416788c",
+  "8c871099d54c09d4099fa7a0e77c9113",
+  "bbb9873bad399cd1cc0d5e336ca5beee",
+  "b9b926544b8ecd5c3ef553a87170b726",
+  "912d57cea222bc1730dd531b9d6afbb6",
+  "03c729679ca3252a4735c4148b7c11e3",
+  "d7027ce01f22eb9d2bb32d9a153a7e29",
+  "e05e6a516c92259691cf9194dfdeff92",
+  "dd1ac3c70b6f51dd545cdf64053209d4",
+  "caa1e1e79c65480a48cf08a38ac1d87d",
+  "5aa207e85988921b8733912c4f526c80",
+  "b0e45b65d9e1d88169c40dc47605e2d9",
+  "e4b6d6fabe9dfcbe83a51d19df5f0ac3",
+  "168534eca593b6cef86aea9081f0f5bf",
+  "a2004f37730b9445670a738fa0fc9ee5",
+  "c4314972a672ded8759cafdca9af3238",
+  "29dcbbf4add427ccba06d3c37ad44aa9",
+  "d0312d0e9e2d8c063d95a06fbbba9cb1",
+  "770fd972e360cb8538ce6a880741936e",
+  "8e53cb84ef3d981a86fbb69b24827c46",
+  "83de97cab1f553eb3acc22866a4f6942",
+  "a2829f93d701f36d808d0a698dcebf02",
+  "efcead92aba26426db84b75413f17c10",
+  "60a0732774106c2348eb576596668eb9",
+  "d44f138aa2f39488c03391771eea258c",
+  "f85199fa76594dfb190fab5dfe42a769",
+  "cd4c02f190df2372cb703994dd84e881",
+  "566cb723d4fb7a7dd38163532fe760b7",
+  "4433001bd59da157c18b09f6c10d4163",
+  "b76b517e01f5b708af50af906adb2dac",
+  "0f611396bcfe9ab7666c45ebd37e59ba",
+  "4c6606c2117565959048d356c1d7f6cc",
+  "5f7f3f510b8a8f0a5e1d6193c6c7f3af",
+  "542560ce828579cfe777aa165b4d1bed",
+  "171e092149d366acca00d1cd783e61cd",
+  "4ed8b5a69f7c329f498320947db666f2",
+  "eb4c251a5abb3c59d306276ba2dc644d",
+  "2b6e07526e77047d7935681efc3b9f90",
+  "9e107d9d372bb6826bd81d3542a419d6",
+  "e4d909c290d0fb1ca068ffaddf22cbd0",
+  "1c6d98786bea70b9c34ce7f33201120c",
+  "bdda04a65a37f97d3ac3be6b0d5f58ea",
+  "954c69b280f0b5eed4b36eb714d26f82",
+  "e5fad54e00d29bf5b1671b3d351624e9",
+  "1a0b3d4eec1bd869af85945f60ff19c3",
+  "055031167bd9f17448623653eb4b27ed",
+  "4ca7c851615ea3abc43b5e1df410b84a",
+  "774873408e0032f8c56106dc28d489e2",
+  "fc44cc8ad9ff4aef8a4187688cb65378",
+  "b939f1b04b296ac8ff8261876ae86704",
+  "de9362af59e6e23688a243f909e9fdbd",
+  "6827a93d7492d3da381d7b45f2a0b94f",
+  "459ade91c05ca5f8bfdc8c3f6014ce04",
+  "55b143ec7d943b04666010e165d753e0",
+  "04ad29c207b52f46fd50f208744d936d",
+  "8d26f6529919e3d3e33b5e147e96bd8c",
+  "de98a267f5acd95c52bf439be075f360",
+  "4a8a2b0f0cc485c957992c6c9865b33d",
+  "566f00c9d7ac74a1daeb2925de2aca23",
+  "6ebee39c52840729c65d815fbdb9e9c7",
+  "7dc322a68ec5881e78cb718a3ca9a557",
+  "b00112c2c7844e0c6c0cab1fdc7a12ab",
+  "6f78ec779e96448daa9675bf06a0dbe3",
+  "8bba94005e06aefd071ed8a5c1b89068",
+  "220316718ce3875281be580a731ef0a1",
+  "7dd175908a4fce0e510287a9f884ef1d",
+  "030d864e63a6b67e11084f27ac5a422f",
+  "cad084c9d6c71aa60c414b3df22e4ef2",
+  "a10296630814335017df32f94b5202ff",
+  "de23bdf63d07cc75716e1e303df0677c",
+  "9718898182f2ba3a4428d9e357f5788e",
+  "9dfc12c4b82dcf727fc6599a0696a48c",
+  "6cca243870d308ffe8ae51993258e9ef",
+  "6b425096ac7743989c9744ff45ea027f",
+  "742a87784ffd6e2b0697aabf6b453309",
+  "b9b7f74d898d1fe768777bd7fb7844e7",
+  "4717614d82c1df37d608111953c75912",
+  "43298b7db8498f89b9aa1bcb410a8ed2",
+  "1b3621f615f0861d672d406257f5a97b",
+  "9ef3e55a2eb9d5d41f9f850cc86f8fea",
+  "3ec2cbcec99a048d9410c64a61796b0f",
+  "e75f9f48ac684c1c49a256df39ac118b",
+  "3518518b7b3b87f298d0518ccab65534",
+  "d936105bf33a89e00fe8ed8711b732d3",
+  "70858151e61f8862decb044c2050ae40",
+  "81491684aa39d20b064ceff099a3175b",
+  "bd73078b5a0a3a6d40fb1376347d64a6",
+  "9da1f6dc1bc2ffb5ccafa14a04ff5f84",
+  "a5c9c51a8981234ef59a969e3ad147ef",
+  "c105573b4d5ef469c7867094b4e589e1",
+  "d479c97efb06a112534196e257192c4a",
+  "fc7b07eb35cc515c1beb93aaa4e51a64",
+  "83470666e83e382a35d97f406f79eb70",
+  "e2ecf716fa93c1e1764a8e584cbffe04",
+  "534a7c131ee92bd5c9105cd293a9fa6e",
+  "5afea20e81c95d55e70bb0805158d207",
+  "8bb0ebc08bd51a0f62808c76005d5d33",
+  "c689312f4c99858ba414b63b61408f7b",
+  "cf1636f7d96fae80a428db4dbd93450d",
+  "963b816a27e6432c8200f35c11cb3d18",
+  "2dcd8661e650a8efe99642df35e1c0a4",
+  "2f6207c7ae99db3da286ebdb98b10f60",
+  "b515b746e01836e24966ff679f9dde6b",
+  "5b53b6ca7982077b891b03ae9546984d",
+  "4c57e9d52f8e782b44304f2d4613456d",
+  "7f28eb1a0f03dd38c73da46973299d00",
+  "997d1c07005040126addd2dbecc623fc",
+  "817dbe3e415b05eca731e27ca792adbc",
+  "ebffcb6fd54cfc146afe9485884b540e",
+  "2d6394332758bd5411eada08d85af3d6",
+  "27e0d08eda3a775290e0962483fa5ec8",
+  "d444cd632037609ccb972ce79009b16e",
+  "31c0453b13e1dd83f6ea55b7be54da15",
+  "aa95999a313b3794d7902a751ee77c05",
+  "cd30f6386d09f62f49537b2d23ea713e",
+  "149a308e31876049d76b7393512451d6",
+  "d0d4a7c2254d9f8c18668c103a3d7f82",
+  "1f822faa98bc97d382fb28019730daf3",
+  "a59e31843f29f63c8ec857084fd91161",
+  "e871798ecb332a9a082ab69d747c624d",
+  "dba105cfd9294cbc4269096d9c682b89",
+  "c9cbdc59fb3afff3051b33788d1e946a",
+  "890247b165402b325ac88212b21e4e42",
+  "777c5b13c598663f136be27451b5379a",
+  "888e851163704b4fed2d9b82e51aff16",
+  "3069f2cddd3a17dd655c61372def9c0d",
+  "39ae3b6ae2e9ecf5f0c25eff8d52ddef",
+  "058dcd07dc12be85774e7f72587bfe43",
+  "522c5460f239de773cdbcefb4d55b129",
+  "c6b5babfeaae6d7bb86c1c2b64fa1b56",
+  "fffa674d8c9bcb251c0ab3cf9d7aec89",
+  "7aabad234a1f9f05ef6c5fb6ddc15b0a",
+  "9b3ca93cfa10b081de65516d67170e3b",
+  "1990bf44ba11b087af262e017d8c823e",
+  "072e4bc6ef0ee5d9e7c56dafb9f65088",
+  "e2825a9231a65676a7b79b648fd94fcb",
+  "ab864a28e6eac29000429a5536fd9cf9",
+  "decfbab07f8d11187365c385f12d038b",
+  "1f0dd358531e06187d33964d0e0e115f",
+  "acdf4cc64f0c62013621d6ebc69687d2",
+  "6827965643e24616e892e5636f1265c9",
+  "2daed5786790d38ede194d351b383d46",
+  "eb05cb49a9e01e2c0a1329c2d1859394",
+  "83065746806dbca73e787939d359e74c",
+  "0a318bc9d7e2d4d03a96e755fd2214f6",
+  "85421302d14c37029512ab3e848c4498",
+  "02ee794a181044b80588bd14f76ea4dd",
+  "abeca493fed89cd65ed112e069a695c1",
+  "e5828e0a11268c9baaaac24bd46d1e15",
+  "e0a8b89702312967460ad9940aa108d5",
+  "6e5c8f2aacd19e70d15be253369cdfc4",
+  "eabc6ce71e74b5b48150ceda5a916948",
+  "5c263ad8e8dc1fd66e9b35daf7f74c48",
+  "030b2b56e20c53b75191369104b9509a",
+  "1225f4418731a8e7944d1366efd89234",
+  "9085ba0fe1c64c3dce45708de32c3440",
+  "49efb746a4938e7da19ecb3bb2c8e1d3",
+  "833095be66f1f7b5942a817846c97ed5",
+  "28f9f64eba29e57a7bd4bc0840aedf90",
+  "9b5984b93bd951a70dea62942634c009",
+  "ddb73667065d5ab761612be590e339e5",
+  "59c4b46e73c2679610b7a4e9b3a04bc1",
+  "fcc2a983de8f0ebb193864e0c60a00a6",
+  "af8f1f4bb88555d688508eb9f3c876ac",
+  "814e087171d6a45ac4fb4a110e889a38",
+  "733130f693a1c3a24703052717330807",
+  "b319f375927ed3f197a26c1112df86ae",
+  "ace1c7e7c2ffcfe31a042d2b9ae00905",
+  "5231c151c22b31180e900647fd5097ed",
+  "07e7238f4f3d8b3a279a2d9f78fa8b08",
+  "208b1f437aac92a96eef5ec9ca5d53da",
+  "3a675752c5faa15bd61c63499684c570",
+  "efa1debf8fb84e142c83c0dcf221d247",
+  "d940ea701a781a4ff62a99d831c2286a",
+  "d88294e690a6375d22b12fcc88bebb56",
+  "f209ebcae30e147ccd9e42d32cfe33b4",
+  "fbf1e18620fe5a9c40a65cbbd50af177",
+  "4e682a50db552d15bfe109a1147f6770",
+  "407b72260377f77f8e63e13dc09bda2c"
+};
+
+const char *SHA1_sums[] = {
+  "da39a3ee5e6b4b0d3255bfef95601890afd80709",
+  "c2c53d66948214258a26ca9ca845d7ac0c17f8e7",
+  "6929e765f6bd128088cdf81ba4805d3a84da4e5e",
+  "93ef0dd827103681fcee453b78be2ff14e1a261d",
+  "9f7ed32a201bab6d11f7be88b9335973d93de3f5",
+  "a2b847dd0e90bca83b418103baa63c67c85b5a30",
+  "ee4801c9d009963ac6dda49b100f0d9a9f3983b2",
+  "0dab89aa7606af6df94d1c3f8872ca98440ce299",
+  "2eb3456b1b4fb96df1309eff21b02814663f939a",
+  "30b59bc6c7c1622283a23950f2984bc5cd4fdd51",
+  "4d39faadbf264f3fb59268228994276c36fc3172",
+  "8312b76dd9300bcbbd9c5148461949f31f593bdc",
+  "0d12bfd71a11c686cf53adaacf0bec05c557e768",
+  "ca150c0c3372de80daa720b7d4081022b7befbe4",
+  "d2ac2275af550efdde0aca4713835f3480498387",
+  "07bb8c8ec36e16d57141fbf95fb8478a668b451f",
+  "6ad802395de4400a9892c9f65868879bee5d1bf6",
+  "569c7018c812f0cc51c093dbc026baebaab1eb22",
+  "b8cfd76b506e7aaeb55c3d4e73e8868df8c4dfb1",
+  "c519c1a06cdbeb2bc499e22137fb48683858b345",
+  "3e3436a073e72c5300cdca6ce5c321e49dfc412e",
+  "e2b72fb64787db45dc11bca1f194bef40b5be347",
+  "52f4aaab2d5f9bc918700c517253e5bd6981ba95",
+  "001233b5471e0bfa33f8133cf3cc3b97351033a5",
+  "b2cc1f24e2599121adf86c5161dfe43fd5486985",
+  "743e27565bb39d4cf6cdf7b19450f94ef12b2206",
+  "6b57e81439c46aca165e5eacd44c0829670c9bb5",
+  "4bbe681b61206e8689fce488662e7be67053ad03",
+  "332ffb34a55ebf0b01beb604bca729887fd4c047",
+  "b09b432ae19ca6971bb28a3705c9be3b02ec388f",
+  "051605798e587fd98b428b88077d015494978bda",
+  "33d579648c883c1b3a2ba91b7d4efd79d2d04e65",
+  "d035de80a23137cd473991fea53b6b1b1f22e57d",
+  "4ed82184201c1063c9f89d83b01d277e2db0847c",
+  "1477d62ad76e1d543380ce2f4253a701fe039af2",
+  "df72568859f54940e93ba5ace28430d38e4ab10f",
+  "65ebceacd76a51d7076728d8ecbfcb1a4014fe3d",
+  "0f5f0f1c642e616224d356a835ed3d054935608a",
+  "caa9daf50b65b3739eb9a88547c516d89b72ac11",
+  "1e9c81970164a681a35993d773e1d55d328ed64b",
+  "8aefdcfcbaa21522fb39162d7507492e47b30f25",
+  "a374c23022eea446300e1b3303272bdb8f6cfab3",
+  "f2f38c31109f8a9421f301e9d554193bc4274a32",
+  "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12",
+  "408d94384216f890ff7a0c3528e8bed1e0b01621",
+  "22b759d30862cc7c7eb3ce9616a9d4e853b1e14d",
+  "97e2821bba8dbd62f7823b7ecf095dad5d152371",
+  "190c9e3674d72f3abfa027a38a425de21ea124a5",
+  "8a9f1acbeb7dea1bdb61c0e5885043caa84c3812",
+  "8431fa593176872aea33d2ece77fff42f22c409b",
+  "08efef7adec17bd8d97f24cc373bfeab4b602d7a",
+  "669f7e46d635f02a355635d9a09bf3bf2936bcf8",
+  "695ed476d76f489707db6862a6411973d0207558",
+  "084ef870fa0d4674d8488040a3d147235cfcb50d",
+  "2a7d533528fcdaa6795ece88ab526b3e077f4f52",
+  "4546fb23d600a7e358edf7033eef05af19b4fb1f",
+  "59c3623fbc8c29341481a7fead82ef6b3aa43d93",
+  "806b2e0c9be4502325b23d20f085b6d8dd8f559b",
+  "113382ddaeee3a9880b3328b4240ae9e750be3cd",
+  "543bef2867245f702b77470bfe08350cff1090ab",
+  "977eb8d9219bae5415e13656113e30d66c2f5b45",
+  "58153daaa0ec2e5f3e96879a33aee162f0c1283c",
+  "6663fde567230f1d0247dc7ea3144b3aedac160e",
+  "b418a310c03a4795b9ed4577c876b9dc50c18481",
+  "75c2add8fd09dedee1f2728426f5e94f9860d062",
+  "3f188f1a66fd317b645ea7eecebcae844bba9944",
+  "049296261ba622294ec83fbe8f5cb0d2cc3c475e",
+  "c60fe6fe0ea55fb34b3b5e740400c495e305597b",
+  "64df347932a61deb5ed0e41e811d24cdf745c7a8",
+  "eaaf91d87507541a572b693cd53cb31a4ff3ac2b",
+  "712424206790276862399340047ca6d6028ab2e0",
+  "2cc40cd0dd42274998746980844a8df708a3af94",
+  "da0ba0bed525b2a41d906aaf078f7da4c53bfad4",
+  "ee16dc82f66d8f069d83b76f1c433d658367dd27",
+  "64fe9ccff8f5235dd72a85e6c7676bc091f34038",
+  "20e9001f77c5454f9b9a9fa681f40067e4e1b8c2",
+  "40cce478fceb688eea9d9385f00acfc73ecb2f9d",
+  "21955259821de3bf9de7c8708d7a4d037d244c92",
+  "b922eb3c6a86c38717535220cbafffe3032803a3",
+  "be386c5615669fb19a05101d90df850569a366a1",
+  "c733de72b09be501a6d8555a51bab2ca9d65b203",
+  "740eaaab9d5ac5a9854260b09a1127c520b7b27c",
+  "0b3e8e2cf27e492dfb0bfbe9b8d6a3b2e2bc17f9",
+  "2516ba614aced5f991fc2f67e66fa90f3dec756f",
+  "5abe738e94964292a2bd38e6cf048138bb593fe4",
+  "1c5d0b73e977edfe89b447bfca585e8826b5783a",
+  "e3096837858dc2247961a29fb59164d5e39d8cd1",
+  "9a6d5ce05968464a6c00426a5d18595e5e0c2534",
+  "e74f03f5e56d5a9926c6f6351fd8131242a84ef1",
+  "573b84daad0e7149c3b128f65d75120095a1d3c5",
+  "5facae19039c0444d188729f5eeaa58440b55d7a",
+  "e617e14b9abc583b5e31b9ee315217cf52e7053f",
+  "62bbd3fc168a7bbd4703fb1778d72214115dc200",
+  "f9fc375d30b5626eced981d4ba80d2fcf6fba368",
+  "01227f21040de0e7be4979604d23aaeb2d220d50",
+  "1e53d5126a6f21a5cd9945ce4ae79a856d1c2aa6",
+  "def7d9867c9ed2bcf49984cbe78066456175afa2",
+  "2e1fc20df269fd7c6894c61c01f6fe0518029d38",
+  "5d6c196729f7c0eb0850bd9093d0a018b62168ba",
+  "062b7865763fd8cd0ad6079ec51a97c1bc35f88c",
+  "4630931b71697d8ffbe6154c45be34251811e205",
+  "a09166918a47fbda6c96df9a83f2e3b0df9057dd",
+  "036e1c39411e8eb6fa3d616fcad19f92188de807",
+  "8e6aee80cbffd0c0a3895a29bb029f57e1d76aec",
+  "483a716335fd7a07acb9a8fdf759add85cd55ffb",
+  "b1b1d87b55275de0f3b9c1a759ec6b543282cd5b",
+  "cded9ffcab1c2fc873af9650ae35004160b39410",
+  "37cc453cada7173368bfd3ed7c86c053557e5926",
+  "8538eda858022257c393f2b7d72291b2a133f452",
+  "d68841c1696583e487cc09a4e01a27afc4753bb9",
+  "c29fa22be5cbc683d781ce42d325830b4337a62f",
+  "28863c5a458f53c87559603b6bdb2e890ff002da",
+  "5e4e15446aeee7ea6989e2502b20b1278ee81768",
+  "25cf8915d7e4510f14f83d5317e6535d6e473bfb",
+  "3e602c716c72f31569c1ead4ca6b8781d15f9866",
+  "67e03a7960ccb911c4394671aec77d22f07cb495",
+  "e2b3f1d1f69d2b555083899700cadb4a971349b5",
+  "6c423e4662e730b3885e3375ee6d914612d5867e",
+  "1694013c7d8caf3b3c577c8024ef1c58f94b7955",
+  "91630edf6358ff0411a23f0a95ffa693bae1323b",
+  "028454e0ff1e27ebd16cae59b2da633d377204c7",
+  "0d07cb105767718dcaf998f307d4a97a38b35dea",
+  "23c3569fc657d3a4b1bdde834df0c8f6ffacab11",
+  "73c30d2754cfd13d6ac47ef28af974bfb021a121",
+  "055890aeb6273f7a6ab5176722418048a03d3461",
+  "3b89112c4fdc7e3fb8dded5157ae95c6afb68da3",
+  "7cb3cfae1db1575b52d02afd3d12f27fbfd6b56c",
+  "a310e3d7c808c74a9a2dd611d0bd6eda1f5f5340",
+  "f329178028da5004aabd83549936ea9728326736",
+  "5578dbecf4f35c97fc8762721ae16e010e42330a",
+  "14020d1fc290f5a4c1feb06d970b395aa2d60518",
+  "a1b2ffe5722b3d68d3dfbd1d3135c98681f1b480",
+  "f3b3996a94517365815ba8bfd31306483c453afb",
+  "cba0a45d7202f78c1e1ec5f150a1361df0565553",
+  "dbe1feeba6cebaa82465ff34ac85324eb99bbd96",
+  "067fac1d8369638e135bebaa5fc24648efe539a4",
+  "18983e0eba9f797a5602dacb9e3a1fdb1b0e5b8c",
+  "9f5445a4bbfd237564917d8749986798d61964c1",
+  "79025990785dd192d5732f072e29a37728a05109",
+  "a7caf5831836aef6ac5e6726a05f807ac20bbebb",
+  "23027cde1334d6db48868b8dadb94cd027b9b7bb",
+  "d0b280d64748bfc59a7da25bf640aa2d5462266e",
+  "8a9c5dac4ddf028916e6feef81ec0cb670f1e713",
+  "3790e9a57245215e68c06879cfb3d49ddf511f11",
+  "a5004ed91303ead3670260a0e682726c42cee57c",
+  "23e829a6706142d16305cc8f7f8c8b9bd8ffc040",
+  "7e592d0d2c566b32b7c1e44b3413354cfae15e4e",
+  "2e7a1685959b20ba75ddbce3db38798fc18becab",
+  "82218944dfd3501a3d4705c5132ad06506372a0f",
+  "ef4930e12ae3838d6059cf4990c8a0c2f6669c59",
+  "574f7a6ca7a130635f84701294f347ce26d2d586",
+  "5c91c2f83ca9daa19786263acd958bff2c79ca44",
+  "65d838dfb75cda0055db5fb03f12008ede246a3f",
+  "3c29ee4da5392eb1bdc9eb39068ab6a870d0c16a",
+  "f17a673f3438bc7d8e0b0b22ccf20e4b868f0ad7",
+  "653bf84319d61c7b41ad67b7648c8ee8571b6a16",
+  "3187b6d0e15a37687fa6a8683d54e2fc5c3a13da",
+  "4c29e4987613d1b30fdeff0a6af7a91b3be543f2",
+  "ee68df44ba84a65ec112d289100ecf978485c7d0",
+  "59283ef51d65bf7f7b7f430059aea19533f780b4",
+  "7694f04e3be4bea0e35f95d4728fd65cc9ef46a7",
+  "dcca8b27811f93142ec2bc14762593193ea69147",
+  "20115938f5b50616fca15cc1816b28423c2e016b",
+  "07b7e2a3f9733cbff1035533d0f2ba66008266b6",
+  "cd2d04dd8bd78ac250a2adebede35802ad117110",
+  "06e86e3d4a3f735c915a770fdff73ca8bc610476",
+  "3014039565f5e568630f7e463c35475bdbe697c9",
+  "eb729c4de8839c4123d0eb24d1d35886286ffff0",
+  "c990f68c512ecc7c23ec6ff428d51300d6425dc2",
+  "f3df0f4508b4cfe7e720f830f560c4e10f900703",
+  "43ff171136ab1855eb37721075a9208c1de3ad20",
+  "5d487b6bd25daa126e8edcb23f70a87ce4f7a27f",
+  "84f6f72a57317242849131eb3c6aac28cb01abd3",
+  "fd583ad477087f488eacd4ca243f1c93f5dac09b",
+  "ef3cb487cb03dfde3a33b592c24dff439ce9b783",
+  "7bd47a7efc8448f750163b07c812654bfadbe91d",
+  "b9de6e1facedee977ccd4b30aea8fe957a0ae09a",
+  "4ae009c0577ce4d0c87dcd743de9039ef050210f",
+  "04280ea8afacc8b46982710da67a835b92275625",
+  "ba7939b877ef0c1f066f0f6944b8c834f96fb67c",
+  "bd735f759f8c653a215f2e9d2cc1d8a248a25567",
+  "e9c70b7ab18d0b07580b80f2d92c43b11be5f71e",
+  "795c10dada7dd963603073be205325324a1dc205",
+  "8802f1d217906250585b75187b1ebfbb5c6cbcae"
+};
+
+const char *SHA256_sums[] = {
+  "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+  "e632b7095b0bf32c260fa4c539e9fd7b852d0de454e9be26f24d0d6f91d069d3",
+  "3bff939c10f4d9bc21c6944606bcb81901cbad80fc6801b257fd8aa127881687",
+  "b344d80e24a3679999fa964450b34bc24d1578a35509f934c1418b0a20d21a67",
+  "103c5169871d49be7a2ebf9e6fe4720244cbf1fdbccdbfaca489898ea069504c",
+  "5845d549b3465df3c1fe755ccd99a9252858b448fa85fbd29139c3a33418a9ba",
+  "2363ecd70a265e2233d2b8b0a703bcd6aa71dbf47a8716fcdb4b35ac4fded6c7",
+  "883dbdc815a382a8ac863a990b4a33b601acfce6286df588b1e10416ca9934c1",
+  "10ae0f24c936bc39be215f80c343c6e870f640fd56b0aeb842c3cd49a4e6dfa3",
+  "3ba62773d07dd21b5712a1c221207bf2f46e459d862e7b7062b3b9e0073bbb1e",
+  "1a90011d5a17cbd702ea49cddd28190439dfeec1710e0efe52315e034ef449bc",
+  "030b6b1f71e51020e7b34f753d26741e7ed7c5cac3324b4fb237bf7f190326a1",
+  "a83b8899ae591254330a059b8c5c5a0d61b8a5cb1e20cd43cf62ea950861a108",
+  "8536a46b036db54a1f68389081f4c5dfb36c005ca655c0d005ade052e074fefc",
+  "3b6052bcafcb593a2b44229d6418f3638a1040ede220a06186948e0bc2378e10",
+  "9bc94b608c3636f6dbd12a7a08e586f2529c1910465cf764e5a2a16260a15c3b",
+  "1b0b70a113cd4065b095bae73fba840f3b93912e89dd535f7f795912e9b307d6",
+  "33a753c1d23f6a539b55c5c35dc0174ae048bbe517c701f3959495d509b862c1",
+  "99159403f98a4d80adb6234c336029f32c17efdc70f1d412b7e6008d6623f3fd",
+  "5cac4f980fedc3d3f1f99b4be3472c9b30d56523e632d151237ec9309048bda9",
+  "b29d66e56ed90cce9b0165c43fedec612b60a071974d8be4513e18580d55b5bd",
+  "60985d1eccaf8f3b95df873307d4727bc7af67dedaca6ea3d00d7e80dbb9d95c",
+  "0ec4cdc3ab31a48025746379b070b1af6b152e6dd1eefe8a16d1855c85711d72",
+  "76169b1e79ed4d640a78d664fdaced5035e7e0f116d7f044169763763a73d6b2",
+  "cebf42910d175773a31cd23fc7c08eaddba11c267105e51688728efd6152f798",
+  "8df831769cd51e4f57808343603e97c1ea44fcab46bb595a5000b9ad1d03bd70",
+  "4e866f068eb39bb4465a3185badc58f8be565b3cbe0d8e79d0c893dd92ca99ae",
+  "4a7b18fd0454f18d0ad320d8cf874e0466490e327bc3ca3beb13b1cb0fb01fff",
+  "a5e86ccb68457b2e8e5591e3c132ed5f824480ab3b34e8b798b1b4e955cc2bad",
+  "6c007ec72ab6d8bd1e7e2b90ab06095d38d042c172100b5364687985cccb71d5",
+  "588f6b03a29d124ef050bc1e46bb60cd983e3d75bff45b6f1438cb58baaf1a9b",
+  "ce32c090e5e13b6e5967e71e0d0025ca61fb6bcd54502221e354535ee7504fbe",
+  "5f48828a7ecafc69180e8e9607b277b3dd17e53acc043412a06d8f170711c74b",
+  "2d79fab9bb7d5b49e4c7eb28c14334f9d014129ce43d1252636b23ecaa569771",
+  "acbe47d52e08dc6ae67b0bc249c6fe92c2fea7cb5d168d089bdb4e5f012a70dd",
+  "177264d66f016c32fc7a4bf3d6a18fe64f3b92aa25dee9c3b84e6e2d3dba2467",
+  "41555a329cd561031b7f79aa7ffe614aa341fa4c8f67be9d3169ca02ac513951",
+  "6c450daf0a44317b850ab800b2986e3bfa19b118d82de07331c59b4461e08bb4",
+  "72a0280b4079082c4823f72d5847038ca4b3d689b8d4de7f4b8565ca5cc59ad0",
+  "e79df309e6b0e98a1b677e5d47765063170fd0fbe136d305230dca2ca1ade525",
+  "119ef8154ecb9f78200ab9a95930877811261da37f9cad9e533ad34a57275fad",
+  "fd535438ba7bc96dc5aae8b19059fc4307c0e2df4b252dd0d4d10dedd3116fd9",
+  "677b9fdbe2bd79af033c224b32803a77dd284885f8655aff914ac63fb65c0a70",
+  "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592",
+  "ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c",
+  "88e197dce3e2562b9fb62bfdfb92c525328742af370fa2cd7c7bafaefb38f09c",
+  "6e186b825513e046ba1d030f5bd31caa27a486bab8933e3799e8fc8c7a0be919",
+  "ffe66f70564e2ef5b55cc4083aa1bbc24169c799a624d98182f99b8a7c950a82",
+  "381ba8d74f62ef53fe4d22511c9d7c9f182d719e8073a5ab0201f91676a2ee86",
+  "0147a26010960f5db71fcfa15c6f9278f2556905aa9fce122bbd5fe787e3d934",
+  "fb736023fbce2dd88d6eeffa02dc975f5b3cfa0d2c0641382ace3cf92975bda8",
+  "7c17ff3bf15c19d9a78f5c3f60dc38fab533ece520c8b8c73fcb0fba670c76b3",
+  "e32271566d6a71b90285b5d00447d1f27737d56bc14b17efea026c78e27af416",
+  "6867916bb6e48ee4f3b3a9eb4630233ec89fcf3722ea429ef300139d74f1f18a",
+  "5a0e44a7c154b01f19a6cf5d83d8ea556d17ba1ffeb05bfcacdb7c477dd1c912",
+  "0e9bc14d279f681c01eca319b7c22bf6e313186865a4d2111712f29ecc0223bf",
+  "1be2cb604f04f8538e1ab595dcceccf0b838041e72a4dfde8df53d84fc841828",
+  "0415d70cae1ca48b070e789748e8f3982a209a0c4b8070e2d3a26f729f04b0a6",
+  "0e29d748b4cca4b372d587ab8164361aa127664635f956fbbdf076c36ffb0c9b",
+  "8b0ccd3d72a10e396b16b67980f31823972b7114059d0d780b7c6c1d11aaab73",
+  "7105f8ae45fcb1a1829053f98681b526616e1d6028d1f72a6a0cea1e079c2aaf",
+  "5ab206331d14b2216b02eb0a58388e8209ffb396bc54eb22a47634cf236a03b9",
+  "71daf2e02b4b542a8064567793b62fed41f2241dd284163b15d02d279910e1d6",
+  "795a664f3ecfa5003b7d18e8ac44d88ed49a8ad731238e381f76cc72451e5d49",
+  "0d01316239b68e707e8079f02588bba156906aa0a8b328a2103f3dbe79464272",
+  "53798a699aaf9b5992322e27a7c48802ff41d04acc52c1e6657fdee037f9c0b0",
+  "250676ab47b392eaeb3bd8f7640c676e5a9fcfed22dc08948601c68d7eb867e5",
+  "c8c295b3179d555b5e04c82f8834b031d4dcb5df9409081e6e9b23be4d1aeb93",
+  "a6265afb2182630750a70887a35072908c048d5f9c831a2155da1887f1dd7709",
+  "78ba265740cc1335d27530a52dc456668c9475250d83f3e1c3041ab3d0856338",
+  "490b607d2009507689d5ce40f964e9b5c56ee54d13d99666eec256439a5d7691",
+  "012c3b2137fbb69e1b1457499923622d7a6639c3fcfd0c1889de9f1ae9a5224c",
+  "47f57d4c0eef68f4b14a02295da342bba8be6ddf901ed4ae1eaf7c3306672593",
+  "33eea677868305f597087e15be83723efd51e1f55342dac47afb604579fa0f74",
+  "f9aab1fa5ed80cd385cf625ec808339d819bd1faee979c3ee008db68db19e6bc",
+  "1e6279781c1a757c9cd3aaf2665c0c1d235e514065f57dff455256896313c5ae",
+  "fcad8c2b8ab78e1eb313f9a77b85e29ed86d4468d78e845fe7b197cff28889a0",
+  "0cc46a7fba1d7b1e7a7c6c438352fdde342c573550eac5a177e38d0cfd854b91",
+  "7d64ff1a21b7194e2a34f718bf536f4fbb636ea2d50b9de9423c1a64da67a566",
+  "624097dd2a64d12dbd7a9d15d58b6a31a8c11e0be67f20afd388e61ab316d6d5",
+  "c10ed525d528079a6ac6e6ebc51bb439a48df167c6860da2dcd8ef5a101a4bf9",
+  "b9ce9b34346f2d83dc60927231c14d1af0b1a915514d610cbdd69a8928ae1b57",
+  "4a3194983f551da64720e60b91e0bfcca2c5f7277b97ceb813b6665cbecf5078",
+  "cac95b35edebc00cb109d4726befb06adbadec365e102f8c9c024fec2efedd93",
+  "bd284ce312ff8f71a8fffd5737733c72dee0199eb5d9dea29875b02fe7dec138",
+  "888f4d527281b7ca77fb63651ea8c28850d62f38d6918a178bc7de7ecd61aca1",
+  "50839952e08506f523696a35e758eed06d7fce0a8e4c079242bd15b476dc2632",
+  "ce6b0b2e2494ba591909f5971d4a326c395f47d45ab2389fc5980a8d7c160373",
+  "328524b5f7c5de2b6fda754cd634480d2ae9953514e208d93c7b0493de3c376f",
+  "00e6bbca7e9f230b903d0029a603831688e37e141d283a88ff65f8a8de711214",
+  "e9419c75509f476ecd71c0ce5de42b13b70665182d470dc6b9389992e71ca610",
+  "bc93bf4ac98f5e62a180219b7cae5fe4b1a33700d1abd8769310f1b9c458052e",
+  "b59cbe76a3a993a8a5e93e7fae2277a99c52b27570f8cec0fc27c6407b87a863",
+  "7b977d99df79f3c123a551339a3584e1dbf8c6b220489c94e8b5ef241a2f4f32",
+  "42da1a65ef28c00d30b63128ad839782daf8437da50eaedf9e40c05daa324030",
+  "27b7b244d0a284afc02b21ddf8818d4934bf7d4a96db6c9be02b9a29f1d3e877",
+  "69e8ebc88995bfb9af4938fac297e7cc87f516d91ee3db9c385051aa67bfa291",
+  "e97ec334ea0e600801845a004cf943282716e537d2fb41edd3252ecc604cb868",
+  "61ddc6c83fcded7492a0b4e6682a2ec54ea79bd832ffacebd13eec490ae9c513",
+  "b1b2e4d6d5f02ab694d8be129dbf9f7fb345190927fd2732ab24e395ef877a95",
+  "036d3ac977186da97d849ae8706f573bae36822a83a8b820b0b09bfa7a4fde52",
+  "244dd1e7818cc1fc0b1790e5bdd79df79720b5ca4b30ddfbc6e03d2fa80edf24",
+  "025dd4c8ae7d9f3aec6b2e3014eda38ec54898c67de9ee68578ec7cc8254c345",
+  "e29858f925c90e19c49336f52a8acf57e7a0f10fbf1b0254ec9926afc77d34dd",
+  "e6ece3c684d5874497b83f6b486f0dddef4377f914e19ea717b82426d6ca37e3",
+  "952c6da8834e0c4c127269a6e69c59a23af9e35ed70577715979075324776eb0",
+  "675a0a83882910ca29d9a4b72e278afa307a2661bee3f28dee7faa7db73dde73",
+  "4102eada32bbc31c13f1fbf2f039bb7a46bdb3589e9bb3915046de72c0c2ead1",
+  "305793f522114ca65e243f80b82199425286a07585deff0d132223506c54c48a",
+  "c666ec59da13eae8361c08bae009f114641bb3bed6f6c88c69c888ab9b9bd2d7",
+  "115ad98815bdfbc2e9aa0922a63c530f2f49bb36bf339345694b6cfadc5a25bd",
+  "1186297e299b427c8ce24e20670156fe85eb9102f8ed7104154fbd10ad28b49a",
+  "2d02d02abca735d371fa9fbe2ec1fcf5c02a8eb5186140b849d13d5667c8588b",
+  "c8357ae61f0c6107d48ffd35b791f2a96c36d9004acbf97a7a6fe1941096e74c",
+  "e2f783571644ff40bb649ee1a6c7481e288eae50bd9621c638102c1222f02695",
+  "b057d8b05d77dfd016c7820ee32b3dcf8c0af73f79a003a68f7b344bff5f9489",
+  "f98a7811608e9f78df7c1dcc6765ad672d907ab49e3ab756b6ad2ff392ae3cb0",
+  "06727bbca9d6e47cbd4e2f61b313627cf0489c5f84850dfb45cb496f11e0d880",
+  "62e011d19bbb328c57808bb4dcb1fd25551a642df179615559a654e91b233afb",
+  "18811c3a1798f207c75d895a6deb4b2ee05a27749e5d4dab02f5299f8f62e43a",
+  "a2eec6a9e819ca9ae6accd714273210cad3a98ea104661b841b8b18fd695115a",
+  "b745658efb45b83211abaffe3af0e5fd3769866d154194c9078da9491f793bae",
+  "bef6454bcf2dd622f73ab849166a95f56be540ff05cc2b79412f40c60cfec3b3",
+  "13f42a4a6df75f6b09a53eff4a92b824b8212ce99b54169774958debe92ba00f",
+  "f6addf5f0a754434e6767535ee8cd12a57d3c78eb5925d421e43870ddc0c4b02",
+  "abbd74e4444bcf0a33da28cd9b74483d19c07c0c84c7a217ed1d8d143da44c4c",
+  "18c5fb1bfd33fc27a0b7799eb14d502e8b59acd5da0be6f9a7fbabd96608c61d",
+  "91a32360bd0152180990285fd7cb3145207d33f866c9d99e7f8bb7331a12d03a",
+  "3324ebb8bfd51c9ac3f3994a56b7e0c0106d9d938c147edb391a4bf812d6afb1",
+  "914e88337910ee43d63f77d91502eebb35ae38ac6138bd7af4d879dbb730ac85",
+  "bc73865737be6195981507338ef06ec2a5f34d3f12580b4f89d5e28ef8283969",
+  "0b41f57008120081011a2ba580d8cff17f9c1f3b2e811359cd3ecfa9b36dc5e9",
+  "a1702789897f4e641bf00d505549c6dc9df9daf904f3267e0cb583c7fb49e832",
+  "70737787a53182c78152e845e0d803171d27105c7ef9407b48ae51280b0b1ed3",
+  "683a017524f641b4c38c26db0df5046fbc38e30fbbe7fb7a6804e2e039c9d353",
+  "8bbd8c3f3c6911a3e73ba7a480f902a95fdf4c8a7c554b68e7330e4914481f15",
+  "66e62f07828e8a8a6ce821cb29fe34f2ec551d4422b593380e5209ee4a3a3e57",
+  "2aa054e91da4874329ac8946922323c8d5b114b4ddd714f54cb1fb069dc56646",
+  "47db1856215834b20d70031695491a4a90416bac8d231646bba8754585f67d08",
+  "eab539981a22c36e481b71d2c828b848b9b127963d7b5eb56c4903f5cf004296",
+  "cf43ef0749885e4108f8fc2774a840264980e4f2be51d1c803bbb90965745034",
+  "fd6847b7d5ea924beb8e7d43d0e87d4866f9744629f2768cf32e7f37efd23253",
+  "1c3d53f1a7fe78c34a4c33331126375e57f4f8f732d39e0ff550fb717e683724",
+  "f03b454c7bf5ddfe083798a85ac46bc671ef76b381b969ab4f333c74397693ab",
+  "0c7255ee15ceac49e1281447b159ed1ccb8fa09d3d002fe3337c80f75a247b86",
+  "4c69c21e1afa642423a660359e058c8d6a2dae61c1083b7dea46471ebf24f0da",
+  "b984e785026dabfa52ece12495df98bf80ba831ea316c08fc4b39c5fc00b50ed",
+  "40b33b1a89820917e19e95bf5abae2121b8f200c826a3559440010d2863a5acd",
+  "053de20a192f3205f46e3f68d8b9926abcf64df55d01cf166e7f8e8c8d042487",
+  "ababd9164d854d8a7b56fc4e6980dbafcd5aa017f5e2b5777a6e6e47460fc716",
+  "f3982fa10d2353163d644ab33e2c5af7264c0c9c8b14cd88d91331b5d01ae3c7",
+  "0d7c2df609dc5c44677d62b8839576b98ec78fa8b5913add17b7e9cfaa6aa75d",
+  "3b86e1a3a4e3cf19734b693cc3d9b24d4173b5e8ace1be3daa303755ce8d5737",
+  "dfcdb86a6ec326f0f4c8b167b5945979a5cf3a2ef20970c47b46ddd47f8fd6d1",
+  "e2a696a14922cdeb99abe04a66576e65142be3b0e53cf0c0f05c86acf63bc83a",
+  "780646dc52688aead41076d4906e17b42eb5593565f179a6bb5135143d40d03d",
+  "847ed344db2cdbfb7f69f9b2c9a5359e13df72c2485345a80fa9b114ec7c8c03",
+  "a4f5b2a505437424c3382e2d534ed2fdb55af631c5b211871f2e62acb5dd722f",
+  "e6e8883f5c8d840d7895afac181c6d9fb154672fb2c7ba9757ca8528242bef64",
+  "c89e7de64979fcbf929148c7b44322047e820219854600e88f7a7ce805971c38",
+  "591555d8d3936620ebb6be7549ea9eaafa9e6a562b9ebbbf4c04eb4f926d5060",
+  "2ec1da3a8252e21834db7c90077b12547f70890b853b5b269a38f74b421f3a4f",
+  "3b05f141c3855409941c6596a92ea7a3ab59764bda3cdcc6812060a5e5d1f48c",
+  "82b21ff095df092358450698e7a534453105014f3b227a210cb5d523191570e8",
+  "229da5c29efe0885663587fe0080862ef52e7504ca64f5d6ff1c26f5a7b1c0c7",
+  "cd3c1d86961be993a150c1126a958ef14a3e47ef21507492ffdee8b089774505",
+  "e346ecc2f3e8cbcbbead67341edb971f2a9e152f8c1e086693dce431d9e14335",
+  "5e5c06dc93c409e935b87373f2647f57a951118851b226f908751bcafb496b2a",
+  "2f5ded0589de3ef9f5e5b05df0a19b02fcee0e686900c5eb9e3153ba3ccdf685",
+  "6a0335f78e0fea8e4cdf747d6464f2de78e659b9de5be37ccf8f81f1e775ca79",
+  "8adfeb35e7d07f4aece0f8b4b282a303e45b11c9b4f9b1798cbcf8cf0dc5f48a",
+  "94dc98b89a5b498d7c7eb0fb0524af296d0181e7a4dac82c3bd7ce147019b52d",
+  "4b2dae26d837294c81e00c6c28692235a9ea046bc8038ea78ce1819cb5f54be4",
+  "77d9e99e3a956c9b52742b498b8811cb721ad798866d36d269b4b554a707e63a",
+  "652082a8998da5439cb5e695104febfa81d3d3a0bb4dfd49120b82e350b48f6f",
+  "43bf07481f0bc237e1ed2ce2b0b3cca1989f9bdbbc7cf1e78879984ff927b3e1",
+  "648f7216f324f0a46648d757a21dc25c9382c64a095ea95b62aed37596bdf842",
+  "34c3d02b75da5d2739bb8d4916110469e1b854a8104aeec7ccfef52a02f234e1",
+  "0d0b8d475cb50a40e2cb999757106f4576c5b69176df4c30e1c4659de1468ff8",
+  "63d7e84cef1bc8c74ebdf53fe795766f0fd32a9c6246586f8217010db1c2c9f5",
+  "99525cf2ec889a1628576099f34ece6d60de03fa85ade70a3d0913033934dc1f",
+  "8aa3e3cd4d678c9623caebac79ecd62fdcd15de5960c7fbffc3ab8e77788109a",
+  "c71259d6ad975ada31990fb7b3aa958248bd88d3563b581959acf4f18310f266",
+  "df3a0c35d5345d6d792415c1310bd4589cdf68bac96ed599d6bb0c1545ffc86c"
+};
+
+static void
+test_checksum (GChecksumType  checksum_type,
+               const gchar   *type,
+               const gchar   *sum,
+               int            length)
+{
+  GChecksum *checksum;
+  const char *p;
+  int chunk_length;
+
+  for (chunk_length = MIN (length, 1); chunk_length < length; chunk_length++)
+    {
+      checksum = g_checksum_new (checksum_type);
+      for (p = FIXED_STR; p < FIXED_STR + length; p += chunk_length)
+	{
+	  g_checksum_update (checksum, (const guchar *)p,
+			     MIN (chunk_length, length - (p - FIXED_STR)));
+	}
+
+      if (strcmp (g_checksum_get_string (checksum), sum) != 0)
+	{
+	  g_print ("Invalid %s checksum for `%.*s' (length %d) counting by %d:\n"
+		   "%s (expecting: %s)\n",
+		   type,
+		   length, FIXED_STR,
+		   length, chunk_length,
+		   g_checksum_get_string (checksum),
+		   sum);
+	  exit (1);
+	}
+
+      g_checksum_free (checksum);
+    }
+}
+
+static void
+test_checksum_string (GChecksumType   checksum_type,
+                      const gchar    *type,
+                      const gchar   **sums)
+{
+  int length;
+
+  for (length = 0; length <= FIXED_LEN; length++)
+    {
+      const char *expected = sums[length];
+      char *checksum;
+
+      checksum = g_compute_checksum_for_string (checksum_type,
+                                                FIXED_STR,
+                                                length);
+      if (strcmp (checksum, expected) != 0)
+        {
+          g_print ("Invalid %s checksum for `%.*s' (length %d):\n"
+                   "%s (expecting: %s)\n",
+                   type,
+                   length, FIXED_STR, length,
+                   checksum,
+                   expected);
+          exit (1);
+        }
+
+      g_free (checksum);
+    }
+}
+
+#define test(type, length) test_checksum (G_CHECKSUM_##type,	\
+                                          #type, \
+                                          type##_sums[length], \
+                                          length)
+
+#define test_string(type) test_checksum_string (G_CHECKSUM_##type,	\
+                                                #type, \
+                                                type##_sums)
+
+int
+main (int argc, char *argv[])
+{
+  int length;
+
+  for (length = 0; length <= FIXED_LEN; length++)
+    {
+      test (MD5, length);
+      test (SHA1, length);
+      test (SHA256, length);
+    }
+
+  test_string (MD5);
+  test_string (SHA1);
+  test_string (SHA256);
+
+  return EXIT_SUCCESS;
+}
diff --git a/tests/child-test.c b/tests/child-test.c
new file mode 100644
index 0000000..b678572
--- /dev/null
+++ b/tests/child-test.c
@@ -0,0 +1,206 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+
+#include <glib.h>
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
+
+#ifdef G_OS_WIN32
+#define GPID_FORMAT "%p"
+#else
+#define GPID_FORMAT "%d"
+#endif
+
+GMainLoop *main_loop;
+gint alive;
+
+#ifdef G_OS_WIN32
+char *argv0;
+#endif
+
+GPid
+get_a_child (gint ttl)
+{
+  GPid pid;
+
+#ifdef G_OS_WIN32
+  STARTUPINFO si;
+  PROCESS_INFORMATION pi;
+  gchar *cmdline;
+
+  memset (&si, 0, sizeof (si));
+  si.cb = sizeof (&si);
+  memset (&pi, 0, sizeof (pi));
+
+  cmdline = g_strdup_printf( "child-test -c%d", ttl);
+
+  if (!CreateProcess (argv0, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
+    g_error ("CreateProcess failed: %s\n", g_win32_error_message (GetLastError ()));
+
+  g_free(cmdline);
+
+  CloseHandle (pi.hThread);
+  pid = pi.hProcess;
+
+  return pid;
+#else
+  pid = fork ();
+  if (pid < 0)
+    exit (1);
+
+  if (pid > 0)
+    return pid;
+
+  sleep (ttl);
+  _exit (0);
+#endif /* G_OS_WIN32 */
+}
+
+gboolean
+child_watch_callback (GPid pid, gint status, gpointer data)
+{
+#ifdef VERBOSE
+  gint ttl = GPOINTER_TO_INT (data);
+
+  g_print ("child " GPID_FORMAT " (ttl %d) exited, status %d\n", pid, ttl, status);
+#endif
+
+  g_spawn_close_pid (pid);
+
+  if (--alive == 0)
+    g_main_loop_quit (main_loop);
+
+  return TRUE;
+}
+
+static gboolean
+quit_loop (gpointer data)
+{
+  GMainLoop *main_loop = data;
+
+  g_main_loop_quit (main_loop);
+
+  return TRUE;
+}
+
+#ifdef TEST_THREAD
+static gpointer
+test_thread (gpointer data)
+{
+  GMainLoop *new_main_loop;
+  GSource *source;
+  GPid pid;
+  gint ttl = GPOINTER_TO_INT (data);
+
+  new_main_loop = g_main_loop_new (NULL, FALSE);
+
+  pid = get_a_child (ttl);
+  source = g_child_watch_source_new (pid);
+  g_source_set_callback (source, (GSourceFunc) child_watch_callback, data, NULL);
+  g_source_attach (source, g_main_loop_get_context (new_main_loop));
+  g_source_unref (source);
+
+#ifdef VERBOSE
+  g_print ("whee! created pid: " GPID_FORMAT " (ttl %d)\n", pid, ttl);
+#endif
+
+  g_main_loop_run (new_main_loop);
+
+  return NULL;
+}
+#endif
+
+int
+main (int argc, char *argv[])
+{
+#ifndef TEST_THREAD
+  GPid pid;
+#endif
+#ifdef G_OS_WIN32
+  argv0 = argv[0];
+  if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'c')
+    {
+      int ttl = atoi (argv[1] + 2);
+      Sleep (ttl * 1000);
+      /* Exit on purpose with STILL_ACTIVE (which isn't a very common
+       * exit status) to verify that g_child_watch_check() in gmain.c
+       * doesn't believe a child still to be active if it happens to
+       * exit with that status.
+       */
+      exit (STILL_ACTIVE);
+    }
+#endif
+  /* Only run the test, if threads are enabled and a default thread
+   * implementation is available.
+   */
+#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
+#ifdef TEST_THREAD
+  g_thread_init (NULL);
+#endif
+  main_loop = g_main_loop_new (NULL, FALSE);
+
+#ifdef G_OS_WIN32
+  system ("ipconfig /all");
+#else
+  system ("/bin/true");
+#endif
+
+  alive = 2;
+  g_timeout_add (30000, quit_loop, main_loop);
+
+#ifdef TEST_THREAD
+  g_thread_create (test_thread, GINT_TO_POINTER (10), FALSE, NULL);
+  g_thread_create (test_thread, GINT_TO_POINTER (20), FALSE, NULL);
+#else
+  pid = get_a_child (10);
+  g_child_watch_add (pid, (GChildWatchFunc) child_watch_callback,
+		     GINT_TO_POINTER (10));
+  pid = get_a_child (20);
+  g_child_watch_add (pid, (GChildWatchFunc) child_watch_callback,
+		     GINT_TO_POINTER (20));
+#endif
+  
+  g_main_loop_run (main_loop);
+
+  if (alive > 0)
+    {
+      g_warning ("%d children still alive\n", alive);
+      return 1;
+    }
+    
+#endif
+   return 0;
+}
diff --git a/tests/collate/collate-1.file b/tests/collate/collate-1.file
new file mode 100644
index 0000000..c8e41e9
--- /dev/null
+++ b/tests/collate/collate-1.file
@@ -0,0 +1,9 @@
+223
+bar
+baz
+c
+eer34
+er1
+foo
+GTK+
+z
diff --git a/tests/collate/collate-1.in b/tests/collate/collate-1.in
new file mode 100644
index 0000000..1fc8977
--- /dev/null
+++ b/tests/collate/collate-1.in
@@ -0,0 +1,9 @@
+z
+c
+eer34
+223
+er1
+foo
+bar
+baz
+GTK+
diff --git a/tests/collate/collate-1.unicode b/tests/collate/collate-1.unicode
new file mode 100644
index 0000000..c8e41e9
--- /dev/null
+++ b/tests/collate/collate-1.unicode
@@ -0,0 +1,9 @@
+223
+bar
+baz
+c
+eer34
+er1
+foo
+GTK+
+z
diff --git a/tests/collate/collate-2.file b/tests/collate/collate-2.file
new file mode 100644
index 0000000..2a5a4da
--- /dev/null
+++ b/tests/collate/collate-2.file
@@ -0,0 +1,13 @@
+bla001
+bla02
+bla03
+bla4
+bla10
+bla100
+event.c
+event.h
+eventgenerator.c
+file.c
+file.txt
+file2.bla
+file3.xx
diff --git a/tests/collate/collate-2.in b/tests/collate/collate-2.in
new file mode 100644
index 0000000..be294ca
--- /dev/null
+++ b/tests/collate/collate-2.in
@@ -0,0 +1,13 @@
+file.txt
+file2.bla
+file.c
+file3.xx
+bla001
+bla02
+bla03
+bla4
+bla10
+bla100
+event.c
+eventgenerator.c
+event.h
diff --git a/tests/collate/collate-2.unicode b/tests/collate/collate-2.unicode
new file mode 100644
index 0000000..3546853
--- /dev/null
+++ b/tests/collate/collate-2.unicode
@@ -0,0 +1,13 @@
+bla001
+bla02
+bla03
+bla10
+bla100
+bla4
+event.c
+eventgenerator.c
+event.h
+file2.bla
+file3.xx
+file.c
+file.txt
diff --git a/tests/completion-test.c b/tests/completion-test.c
new file mode 100644
index 0000000..bece9c3
--- /dev/null
+++ b/tests/completion-test.c
@@ -0,0 +1,74 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+#include <string.h>
+
+#include "glib.h"
+
+int main (int argc, char *argv[])
+{
+  GCompletion *cmp;
+  GList *items;
+  gchar *prefix;
+  
+  cmp = g_completion_new (NULL);
+
+  items = NULL;
+  items = g_list_append (items, "a\302\243");
+  items = g_list_append (items, "a\302\244");
+  items = g_list_append (items, "bb");
+  items = g_list_append (items, "bc");
+  g_completion_add_items (cmp, items);
+
+  items = g_completion_complete (cmp, "a", &prefix);
+  g_assert (!strcmp ("a\302", prefix));
+  g_assert (g_list_length (items) == 2);
+  g_free (prefix);
+  
+  items = g_completion_complete_utf8 (cmp, "a", &prefix);
+  g_assert (!strcmp ("a", prefix));
+  g_assert (g_list_length (items) == 2);
+  g_free (prefix);
+
+  items = g_completion_complete (cmp, "b", &prefix);
+  g_assert (!strcmp ("b", prefix));
+  g_assert (g_list_length (items) == 2);
+  g_free (prefix);
+  
+  items = g_completion_complete_utf8 (cmp, "b", &prefix);
+  g_assert (!strcmp ("b", prefix));
+  g_assert (g_list_length (items) == 2);
+  g_free (prefix);
+
+  items = g_completion_complete (cmp, "a", NULL);
+  g_assert (g_list_length (items) == 2);
+
+  items = g_completion_complete_utf8 (cmp, "a", NULL);
+  g_assert (g_list_length (items) == 2);
+
+  g_completion_free (cmp);
+
+  return 0;
+}
diff --git a/tests/convert-test.c b/tests/convert-test.c
new file mode 100644
index 0000000..10b8c00
--- /dev/null
+++ b/tests/convert-test.c
@@ -0,0 +1,662 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <string.h>
+
+#include <glib.h>
+
+/* Bug 311337 */
+static void
+test_iconv_state (void)
+{
+  gchar *in = "\xf4\xe5\xf8\xe5\xed";
+  gchar *expected = "\xd7\xa4\xd7\x95\xd7\xa8\xd7\x95\xd7\x9d";
+  gchar *out;
+  gsize bytes_read = 0;
+  gsize bytes_written = 0;
+  GError *error = NULL;
+
+  out = g_convert (in, -1, "UTF-8", "CP1255", 
+		   &bytes_read, &bytes_written, &error);
+
+  if (error && error->code == G_CONVERT_ERROR_NO_CONVERSION)
+    return; /* silently skip if CP1255 is not supported, see bug 467707 */ 
+
+  g_assert_no_error (error);
+  g_assert (bytes_read == 5);
+  g_assert (bytes_written == 10);
+  g_assert (strcmp (out, expected) == 0);
+  g_free (out);
+}
+
+/* some tests involving "vulgar fraction one half" */
+static void 
+test_one_half (void)
+{
+  gchar *in = "\xc2\xbd";
+  gchar *out;
+  gsize bytes_read = 0;
+  gsize bytes_written = 0;
+  GError *error = NULL;  
+
+  out = g_convert (in, -1, 
+		   "ISO-8859-1", "UTF-8",
+		   &bytes_read, &bytes_written,
+		   &error);
+
+  g_assert_no_error (error);
+  g_assert (bytes_read == 2);
+  g_assert (bytes_written == 1);
+  g_assert (strcmp (out, "\xbd") == 0);
+  g_free (out);
+
+  out = g_convert (in, -1, 
+		   "ISO-8859-15", "UTF-8",
+		   &bytes_read, &bytes_written,
+		   &error);
+
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert (bytes_read == 0);
+  g_assert (bytes_written == 0);
+  g_assert (out == NULL);
+  g_clear_error (&error);
+  g_free (out);
+
+  out = g_convert_with_fallback (in, -1, 
+				 "ISO8859-15", "UTF-8",
+				 "a",
+				 &bytes_read, &bytes_written,
+				 &error);
+
+  g_assert_no_error (error);
+  g_assert (bytes_read == 2);
+  g_assert (bytes_written == 1);
+  g_assert (strcmp (out, "a") == 0);
+  g_free (out);
+}
+
+static void
+test_byte_order (void)
+{
+  gchar in_be[4] = { 0xfe, 0xff, 0x03, 0x93}; /* capital gamma */
+  gchar in_le[4] = { 0xff, 0xfe, 0x93, 0x03};
+  gchar *expected = "\xce\x93";
+  gchar *out;
+  gsize bytes_read = 0;
+  gsize bytes_written = 0;
+  GError *error = NULL;  
+
+  out = g_convert (in_be, sizeof (in_be), 
+		   "UTF-8", "UTF-16",
+		   &bytes_read, &bytes_written,
+		   &error);
+
+  g_assert_no_error (error);
+  g_assert (bytes_read == 4);
+  g_assert (bytes_written == 2);
+  g_assert (strcmp (out, expected) == 0);
+  g_free (out);
+
+  out = g_convert (in_le, sizeof (in_le), 
+		   "UTF-8", "UTF-16",
+		   &bytes_read, &bytes_written,
+		   &error);
+
+  g_assert_no_error (error);
+  g_assert (bytes_read == 4);
+  g_assert (bytes_written == 2);
+  g_assert (strcmp (out, expected) == 0);
+  g_free (out);
+}
+
+static void
+check_utf8_to_ucs4 (const char     *utf8,
+		    glong           utf8_len,
+		    const gunichar *ucs4,
+		    glong           ucs4_len,
+		    glong           error_pos)
+{
+  gunichar *result, *result2, *result3;
+  glong items_read, items_read2;
+  glong items_written, items_written2;
+  GError *error, *error2, *error3;
+  gint i;
+
+  if (!error_pos)
+    {
+      /* check the fast conversion */
+      result = g_utf8_to_ucs4_fast (utf8, utf8_len, &items_written);
+
+      g_assert (items_written == ucs4_len);
+      g_assert (result);
+      for (i = 0; i <= items_written; i++)
+	g_assert (result[i] == ucs4[i]);      
+
+      g_free (result);
+    }
+
+  error = NULL;
+  result = g_utf8_to_ucs4 (utf8, utf8_len, &items_read, &items_written, &error);
+  
+  if (utf8_len == strlen (utf8))
+    {
+      /* check that len == -1 yields identical results */
+      error2 = NULL;
+      result2 = g_utf8_to_ucs4 (utf8, -1, &items_read2, &items_written2, &error2);
+      g_assert (error || items_read2 == items_read);
+      g_assert (error || items_written2 == items_written2);
+      g_assert (!!result == !!result2);
+      g_assert (!!error == !!error2);
+      if (result)
+	for (i = 0; i <= items_written; i++)
+	  g_assert (result[i] == result2[i]);
+
+      g_free (result2);
+      if (error2)
+	g_error_free (error2);
+    }
+
+  error3 = NULL;
+  result3 = g_utf8_to_ucs4 (utf8, utf8_len, NULL, NULL, &error3);
+      
+  if (error3 && error3->code == G_CONVERT_ERROR_PARTIAL_INPUT)
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == error_pos);
+      g_assert (items_written == ucs4_len);
+      g_assert (result);
+      for (i = 0; i <= items_written; i++)
+	g_assert (result[i] == ucs4[i]);
+    }
+  else if (error_pos)
+    {
+      g_assert (error != NULL);
+      g_assert (result == NULL);
+      g_assert (items_read == error_pos);
+      g_error_free (error);
+
+      g_assert (error3 != NULL);
+      g_assert (result3 == NULL);
+      g_error_free (error3);
+    }
+  else
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == utf8_len);
+      g_assert (items_written == ucs4_len);
+      g_assert (result);
+      for (i = 0; i <= items_written; i++)
+	g_assert (result[i] == ucs4[i]);
+
+      g_assert_no_error (error3);
+      g_assert (result3);
+      for (i = 0; i <= ucs4_len; i++)
+	g_assert (result3[i] == ucs4[i]);
+    }
+
+  g_free (result);
+  g_free (result3);
+}
+
+static void
+check_ucs4_to_utf8 (const gunichar *ucs4,
+		    glong           ucs4_len,
+		    const char     *utf8,
+		    glong           utf8_len,
+		    glong           error_pos)
+{
+  gchar *result, *result2, *result3;
+  glong items_read, items_read2;
+  glong items_written, items_written2;
+  GError *error, *error2, *error3;
+
+  error = NULL;
+  result = g_ucs4_to_utf8 (ucs4, ucs4_len, &items_read, &items_written, &error);
+
+  if (ucs4[ucs4_len] == 0)
+    {
+      /* check that len == -1 yields identical results */
+      error2 = NULL;
+      result2 = g_ucs4_to_utf8 (ucs4, -1, &items_read2, &items_written2, &error2);
+      
+      g_assert (error || items_read2 == items_read);
+      g_assert (error || items_written2 == items_written);
+      g_assert (!!result == !!result2);
+      g_assert (!!error == !!error2);
+      if (result)
+	g_assert (strcmp (result, result2) == 0);
+
+      g_free (result2);
+      if (error2)
+	g_error_free (error2);
+    }
+
+  error3 = NULL;
+  result3 = g_ucs4_to_utf8 (ucs4, ucs4_len, NULL, NULL, &error3);
+      
+  if (error_pos)
+    {
+      g_assert (error != NULL);
+      g_assert (result == NULL);
+      g_assert (items_read == error_pos);
+      g_error_free (error);
+
+      g_assert (error3 != NULL);
+      g_assert (result3 == NULL);
+      g_error_free (error3);
+    }
+  else
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == ucs4_len);
+      g_assert (items_written == utf8_len);
+      g_assert (result);
+      g_assert (strcmp (result, utf8) == 0);
+
+      g_assert_no_error (error3);
+      g_assert (result3);
+      g_assert (strcmp (result3, utf8) == 0);
+    }
+
+  g_free (result);
+  g_free (result3);
+}
+
+static void
+check_utf8_to_utf16 (const char      *utf8,
+		     glong            utf8_len,
+		     const gunichar2 *utf16,
+		     glong            utf16_len,
+		     glong            error_pos)
+{
+  gunichar2 *result, *result2, *result3;
+  glong items_read, items_read2;
+  glong items_written, items_written2;
+  GError *error, *error2, *error3;
+  gint i;
+
+  error = NULL;
+  result = g_utf8_to_utf16 (utf8, utf8_len, &items_read, &items_written, &error);
+
+  if (utf8_len == strlen (utf8))
+    {
+      /* check that len == -1 yields identical results */
+      error2 = NULL;
+      result2 = g_utf8_to_utf16 (utf8, -1, &items_read2, &items_written2, &error2);
+      g_assert (error || items_read2 == items_read);
+      g_assert (error || items_written2 == items_written2);
+      g_assert (!!result == !!result2);
+      g_assert (!!error == !!error2);
+      if (result)
+	for (i = 0; i <= items_written; i++)
+	  g_assert (result[i] == result2[i]);
+      
+      g_free (result2);
+      if (error2)
+	g_error_free (error2);
+    }
+
+  error3 = NULL;
+  result3 = g_utf8_to_utf16 (utf8, utf8_len, NULL, NULL, &error3);
+      
+  if (error3 && error3->code == G_CONVERT_ERROR_PARTIAL_INPUT)
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == error_pos);
+      g_assert (items_written == utf16_len);
+      g_assert (result);
+      for (i = 0; i <= items_written; i++)
+	g_assert (result[i] == utf16[i]);
+    }
+  else if (error_pos)
+    {
+      g_assert (error != NULL);
+      g_assert (result == NULL);
+      g_assert (items_read == error_pos);
+      g_error_free (error);
+
+      g_assert (error3 != NULL);
+      g_assert (result3 == NULL);
+      g_error_free (error3);
+    }
+  else
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == utf8_len);
+      g_assert (items_written == utf16_len);
+      g_assert (result);
+      for (i = 0; i <= items_written; i++)
+	g_assert (result[i] == utf16[i]);
+
+      g_assert_no_error (error3);
+      g_assert (result3);
+      for (i = 0; i <= utf16_len; i++)
+	g_assert (result3[i] == utf16[i]);
+    }
+
+  g_free (result);
+  g_free (result3);
+}
+
+static void
+check_utf16_to_utf8 (const gunichar2 *utf16,
+		     glong            utf16_len,
+		     const char      *utf8,
+		     glong            utf8_len,
+		     glong            error_pos)
+{
+  gchar *result, *result2, *result3;
+  glong items_read, items_read2;
+  glong items_written, items_written2;
+  GError *error, *error2, *error3;
+
+  error = NULL;
+  result = g_utf16_to_utf8 (utf16, utf16_len, &items_read, &items_written, &error);
+  if (utf16[utf16_len] == 0)
+    {
+      /* check that len == -1 yields identical results */
+      error2 = NULL;
+      result2 = g_utf16_to_utf8 (utf16, -1, &items_read2, &items_written2, &error2);
+      
+      g_assert (error || items_read2 == items_read);
+      g_assert (error || items_written2 == items_written);
+      g_assert (!!result == !!result2);
+      g_assert (!!error == !!error2);
+      if (result)
+	g_assert (strcmp (result, result2) == 0);
+
+      g_free (result2);
+      if (error2)
+	g_error_free (error2);
+    }
+
+  error3 = NULL;
+  result3 = g_utf16_to_utf8 (utf16, utf16_len, NULL, NULL, &error3);
+  
+  if (error3 && error3->code == G_CONVERT_ERROR_PARTIAL_INPUT)
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == error_pos);
+      g_assert (items_read + 1 == utf16_len);
+      g_assert (items_written == utf8_len);
+      g_assert (result);
+      g_assert (strcmp (result, utf8) == 0);
+    }
+  else if (error_pos)
+    {
+      g_assert (error != NULL);
+      g_assert (result == NULL);
+      g_assert (items_read == error_pos);
+      g_error_free (error);
+
+      g_assert (error3 != NULL);
+      g_assert (result3 == NULL);
+      g_error_free (error3);
+    }
+  else
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == utf16_len);
+      g_assert (items_written == utf8_len);
+      g_assert (result);
+      g_assert (strcmp (result, utf8) == 0);
+
+      g_assert_no_error (error3);
+      g_assert (result3);
+      g_assert (strcmp (result3, utf8) == 0);
+    }
+
+  g_free (result);
+  g_free (result3);
+}
+
+static void
+check_ucs4_to_utf16 (const gunichar  *ucs4,
+		     glong            ucs4_len,
+		     const gunichar2 *utf16,
+		     glong            utf16_len,
+		     glong            error_pos)
+{
+  gunichar2 *result, *result2, *result3;
+  glong items_read, items_read2;
+  glong items_written, items_written2;
+  GError *error, *error2, *error3;
+  gint i;
+
+  error = NULL;
+  result = g_ucs4_to_utf16 (ucs4, ucs4_len, &items_read, &items_written, &error);
+
+  if (ucs4[ucs4_len] == 0)
+    {
+      /* check that len == -1 yields identical results */
+      error2 = NULL;
+      result2 = g_ucs4_to_utf16 (ucs4, -1, &items_read2, &items_written2, &error2);
+      
+      g_assert (error || items_read2 == items_read);
+      g_assert (error || items_written2 == items_written);
+      g_assert (!!result == !!result2);
+      g_assert (!!error == !!error2);
+      if (result)
+      for (i = 0; i <= utf16_len; i++)
+	g_assert (result[i] == result2[i]);
+
+      g_free (result2);
+      if (error2)
+	g_error_free (error2);
+    }
+
+  error3 = NULL;
+  result3 = g_ucs4_to_utf16 (ucs4, -1, NULL, NULL, &error3);
+      
+  if (error_pos)
+    {
+      g_assert (error != NULL);
+      g_assert (result == NULL);
+      g_assert (items_read == error_pos);
+      g_error_free (error);
+
+      g_assert (error3 != NULL);
+      g_assert (result3 == NULL);
+      g_error_free (error3);
+    }
+  else
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == ucs4_len);
+      g_assert (items_written == utf16_len);
+      g_assert (result);
+      for (i = 0; i <= utf16_len; i++)
+	g_assert (result[i] == utf16[i]);
+
+      g_assert_no_error (error3);
+      g_assert (result3);
+      for (i = 0; i <= utf16_len; i++)
+	g_assert (result3[i] == utf16[i]);
+    }
+
+  g_free (result);
+  g_free (result3);
+}
+
+static void
+check_utf16_to_ucs4 (const gunichar2 *utf16,
+		     glong            utf16_len,
+		     const gunichar  *ucs4,
+		     glong            ucs4_len,
+		     glong            error_pos)
+{
+  gunichar *result, *result2, *result3;
+  glong items_read, items_read2;
+  glong items_written, items_written2;
+  GError *error, *error2, *error3;
+  gint i;
+
+  error = NULL;
+  result = g_utf16_to_ucs4 (utf16, utf16_len, &items_read, &items_written, &error);
+  if (utf16[utf16_len] == 0)
+    {
+      /* check that len == -1 yields identical results */
+      error2 = NULL;
+      result2 = g_utf16_to_ucs4 (utf16, -1, &items_read2, &items_written2, &error2);
+      g_assert (error || items_read2 == items_read);
+      g_assert (error || items_written2 == items_written2);
+      g_assert (!!result == !!result2);
+      g_assert (!!error == !!error2);
+      if (result)
+	for (i = 0; i <= items_written; i++)
+	  g_assert (result[i] == result2[i]);
+
+      g_free (result2);
+      if (error2)
+	g_error_free (error2);
+    }
+
+  error3 = NULL;
+  result3 = g_utf16_to_ucs4 (utf16, utf16_len, NULL, NULL, &error3);
+      
+  if (error3 && error3->code == G_CONVERT_ERROR_PARTIAL_INPUT)
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == error_pos);
+      g_assert (items_read + 1 == utf16_len);
+      g_assert (items_written == ucs4_len);
+      g_assert (result);
+      for (i = 0; i <= items_written; i++)
+	g_assert (result[i] == ucs4[i]);
+    }
+  else if (error_pos)
+    {
+      g_assert (error != NULL);
+      g_assert (result == NULL);
+      g_assert (items_read == error_pos);
+      g_error_free (error);
+
+      g_assert (error3 != NULL);
+      g_assert (result3 == NULL);
+      g_error_free (error3);
+    }
+  else
+    {
+      g_assert_no_error (error);
+      g_assert (items_read == utf16_len);
+      g_assert (items_written == ucs4_len);
+      g_assert (result);
+      for (i = 0; i <= ucs4_len; i++)
+	g_assert (result[i] == ucs4[i]);
+
+      g_assert_no_error (error3);
+      g_assert (result3);
+      for (i = 0; i <= ucs4_len; i++)
+	g_assert (result3[i] == ucs4[i]);
+    }
+
+  g_free (result);
+  g_free (result3);
+}
+
+static void
+test_unicode_conversions (void)
+{
+  char *utf8;
+  gunichar ucs4[100];
+  gunichar2 utf16[100];
+
+  utf8 = "abc";
+  ucs4[0] = 0x61; ucs4[1] = 0x62; ucs4[2] = 0x63; ucs4[3] = 0;
+  utf16[0] = 0x61; utf16[1] = 0x62; utf16[2] = 0x63; utf16[3] = 0;
+
+  check_utf8_to_ucs4 (utf8, 3, ucs4, 3, 0);
+  check_ucs4_to_utf8 (ucs4, 3, utf8, 3, 0);
+  check_utf8_to_utf16 (utf8, 3, utf16, 3, 0);
+  check_utf16_to_utf8 (utf16, 3, utf8, 3, 0);
+  check_ucs4_to_utf16 (ucs4, 3, utf16, 3, 0);
+  check_utf16_to_ucs4 (utf16, 3, ucs4, 3, 0);
+
+  utf8 = "\316\261\316\262\316\263";
+  ucs4[0] = 0x03b1; ucs4[1] = 0x03b2; ucs4[2] = 0x03b3; ucs4[3] = 0;
+  utf16[0] = 0x03b1; utf16[1] = 0x03b2; utf16[2] = 0x03b3; utf16[3] = 0;
+
+  check_utf8_to_ucs4 (utf8, 6, ucs4, 3, 0);
+  check_ucs4_to_utf8 (ucs4, 3, utf8, 6, 0);
+  check_utf8_to_utf16 (utf8, 6, utf16, 3, 0);
+  check_utf16_to_utf8 (utf16, 3, utf8, 6, 0);
+  check_ucs4_to_utf16 (ucs4, 3, utf16, 3, 0);
+  check_utf16_to_ucs4 (utf16, 3, ucs4, 3, 0);
+
+  /* partial utf8 character */
+  utf8 = "abc\316";
+  ucs4[0] = 0x61; ucs4[1] = 0x62; ucs4[2] = 0x63; ucs4[3] = 0;
+  utf16[0] = 0x61; utf16[1] = 0x62; utf16[2] = 0x63; utf16[3] = 0;
+
+  check_utf8_to_ucs4 (utf8, 4, ucs4, 3, 3);
+  check_utf8_to_utf16 (utf8, 4, utf16, 3, 3);
+
+  /* invalid utf8 */
+  utf8 = "abc\316\316";
+  ucs4[0] = 0; 
+  utf16[0] = 0; 
+
+  check_utf8_to_ucs4 (utf8, 5, ucs4, 0, 3);
+  check_utf8_to_utf16 (utf8, 5, utf16, 0, 3);
+
+  /* partial utf16 character */
+  utf8 = "ab";
+  ucs4[0] = 0x61; ucs4[1] = 0x62; ucs4[2] = 0;
+  utf16[0] = 0x61; utf16[1] = 0x62; utf16[2] = 0xd801; utf16[3] = 0;
+  
+  check_utf16_to_utf8 (utf16, 3, utf8, 2, 2);
+  check_utf16_to_ucs4 (utf16, 3, ucs4, 2, 2);
+
+  /* invalid utf16 */
+  utf8 = NULL;
+  ucs4[0] = 0;
+  utf16[0] = 0x61; utf16[1] = 0x62; utf16[2] = 0xdc01; utf16[3] = 0;
+
+  check_utf16_to_utf8 (utf16, 3, utf8, 0, 2);
+  check_utf16_to_ucs4 (utf16, 3, ucs4, 0, 2);
+
+  /* invalid ucs4 */
+  utf8 = NULL;
+  ucs4[0] = 0x61; ucs4[1] = 0x62; ucs4[2] = 0x80000000; ucs4[3] = 0;
+  utf16[0] = 0;
+
+  check_ucs4_to_utf8 (ucs4, 3, utf8, 0, 2);
+  check_ucs4_to_utf16 (ucs4, 3, utf16, 0, 2);
+}
+
+int
+main (int argc, char *argv[])
+{
+  test_iconv_state ();
+  test_one_half ();
+  test_byte_order ();
+  test_unicode_conversions ();
+
+  return 0;
+}
diff --git a/tests/cxx-test.C b/tests/cxx-test.C
new file mode 100644
index 0000000..c076e88
--- /dev/null
+++ b/tests/cxx-test.C
@@ -0,0 +1,10 @@
+#include <glib.h>
+#include <gmodule.h>
+#include <glib-object.h>
+#include <gio/gio.h>
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/tests/date-test.c b/tests/date-test.c
new file mode 100644
index 0000000..1a35030
--- /dev/null
+++ b/tests/date-test.c
@@ -0,0 +1,499 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include "glib.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+#include <time.h>
+
+gboolean failed = FALSE;
+guint32 passed = 0;
+guint32 notpassed = 0;
+
+#define	TEST(m,cond)	G_STMT_START { failed = !(cond); \
+if (failed) \
+  exit(1); \
+} G_STMT_END
+
+void g_date_debug_print(GDate* d)
+{
+}
+
+void g_print_dummy(const char *format, ...)
+{
+}
+
+void fflush_dummy (FILE *f)
+{
+}
+
+
+#define g_print g_print_dummy
+#define fflush fflush_dummy
+
+int main(int argc, char** argv)
+{
+  GDate* d;
+  guint32 j;
+  GDateMonth m;
+  GDateYear y, prev_y;
+  GDateDay day;
+  gchar buf[101];
+  gchar* loc;
+
+  /* Try to get all the leap year cases. */
+  GDateYear check_years[] = { 
+    1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+    11, 12, 13, 14, 98, 99, 100, 101, 102, 103, 397, 
+    398, 399, 400, 401, 402, 403, 404, 405, 406,
+    1598, 1599, 1600, 1601, 1602, 1650, 1651,
+    1897, 1898, 1899, 1900, 1901, 1902, 1903, 
+    1961, 1962, 1963, 1964, 1965, 1967,
+    1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,
+    1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 
+    1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 
+    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 
+    2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
+    3000, 3001, 3002, 3998, 3999, 4000, 4001, 4002, 4003
+  };
+                           
+  guint n_check_years = sizeof(check_years)/sizeof(GDateYear);
+
+  guint i = 0;
+  gboolean discontinuity = FALSE;
+
+  g_print("checking GDate...");
+  
+  TEST("sizeof(GDate) is not more than 8 bytes on this platform", sizeof(GDate) < 9);
+
+  d = g_date_new();
+
+  TEST("Empty constructor produces invalid date", !g_date_valid(d));
+
+  g_date_free(d);
+
+  d = g_date_new_dmy(1,1,1);
+
+  TEST("January 1, Year 1 created and valid", g_date_valid(d));
+
+  j = g_date_get_julian(d);
+  
+  TEST("January 1, Year 1 is Julian date 1", j == 1);
+
+  TEST("Returned month is January", g_date_get_month(d) == G_DATE_JANUARY);
+  TEST("Returned day is 1", g_date_get_day(d) == 1);
+  TEST("Returned year is 1", g_date_get_year(d) == 1);
+
+  TEST("Bad month is invalid", !g_date_valid_month(G_DATE_BAD_MONTH));
+  TEST("Month 13 is invalid",  !g_date_valid_month(13));
+  TEST("Bad day is invalid",   !g_date_valid_day(G_DATE_BAD_DAY));
+  TEST("Day 32 is invalid",     !g_date_valid_day(32));
+  TEST("Bad year is invalid",  !g_date_valid_year(G_DATE_BAD_YEAR));
+  TEST("Bad julian is invalid", !g_date_valid_julian(G_DATE_BAD_JULIAN));
+  TEST("Bad weekday is invalid", !g_date_valid_weekday(G_DATE_BAD_WEEKDAY));
+  TEST("Year 2000 is a leap year", g_date_is_leap_year(2000));
+  TEST("Year 1999 is not a leap year", !g_date_is_leap_year(1999));
+  TEST("Year 1996 is a leap year", g_date_is_leap_year(1996));
+  TEST("Year 1600 is a leap year", g_date_is_leap_year(1600));
+  TEST("Year 2100 is not a leap year", !g_date_is_leap_year(2100));
+  TEST("Year 1800 is not a leap year", !g_date_is_leap_year(1800));
+
+  g_date_free(d);
+  
+  loc = setlocale(LC_ALL,"");
+  if (loc) 
+    g_print("\nLocale set to %s\n", loc);
+  else 
+    g_print("\nLocale unchanged\n");
+
+  d = g_date_new();
+  g_date_set_time(d, time(NULL));
+  TEST("Today is valid", g_date_valid(d));
+
+  g_date_strftime(buf,100,"Today is a %A, %x\n", d);
+  g_print("%s", buf);
+
+  g_date_set_time(d, 1);
+  TEST("Beginning of Unix epoch is valid", g_date_valid(d));
+
+  g_date_strftime(buf,100,"1 second into the Unix epoch it was a %A, in the month of %B, %x\n", d);
+  g_print("%s", buf);
+
+  g_date_set_julian(d, 1);
+  TEST("GDate's \"Julian\" epoch's first day is valid", g_date_valid(d));
+
+  g_date_strftime(buf,100,"Our \"Julian\" epoch begins on a %A, in the month of %B, %x\n",
+		  d);
+  g_print("%s", buf);
+
+  g_date_set_dmy(d, 10, 1, 2000);
+
+  g_date_strftime(buf,100,"%x", d);
+
+  g_date_set_parse(d, buf);
+  /* Note: this test will hopefully work, but no promises. */
+  TEST("Successfully parsed a %x-formatted string", 
+       g_date_valid(d) && 
+       g_date_get_month(d) == 1 && 
+       g_date_get_day(d) == 10 && 
+       g_date_get_year(d) == 2000);
+  if (failed)
+    g_date_debug_print(d);
+  
+  g_date_free(d);
+
+  j = G_DATE_BAD_JULIAN;
+
+  i = 0;
+  discontinuity = TRUE;
+  y      = check_years[0];
+  prev_y = G_DATE_BAD_YEAR;
+  while (i < n_check_years) 
+    {
+      guint32 first_day_of_year = G_DATE_BAD_JULIAN;
+      guint16 days_in_year = g_date_is_leap_year(y) ? 366 : 365;
+      guint   sunday_week_of_year = 0;
+      guint   sunday_weeks_in_year = g_date_get_sunday_weeks_in_year(y);
+      guint   monday_week_of_year = 0;
+      guint   monday_weeks_in_year = g_date_get_monday_weeks_in_year(y);
+      guint   iso8601_week_of_year = 0;
+
+      if (discontinuity)
+        g_print(" (Break in sequence of requested years to check)\n");
+
+      g_print("Checking year %u", y);
+
+      TEST("Year is valid", g_date_valid_year(y));
+
+      TEST("Number of Sunday weeks in year is 52 or 53", 
+	   sunday_weeks_in_year == 52 || sunday_weeks_in_year == 53);
+      
+      TEST("Number of Monday weeks in year is 52 or 53", 
+	   monday_weeks_in_year == 52 || monday_weeks_in_year == 53);
+	   
+      m = 1;
+      while (m < 13) 
+	{
+	  guint8 dim = g_date_get_days_in_month(m,y);
+	  GDate days[31];         /* This is the fast way, no allocation */
+
+	  TEST("Sensible number of days in month", (dim > 0 && dim < 32));
+
+	  TEST("Month between 1 and 12 is valid", g_date_valid_month(m));
+
+	  day = 1;
+
+	  g_date_clear(days, 31);
+
+	  while (day <= dim) 
+	    {
+	      guint i;
+              GDate tmp;
+
+	      TEST("DMY triplet is valid", g_date_valid_dmy(day,m,y));
+
+	      /* Create GDate with triplet */
+	      
+	      d = &days[day-1];
+
+	      TEST("Cleared day is invalid", !g_date_valid(d));
+
+	      g_date_set_dmy(d,day,m,y);
+
+	      TEST("Set day is valid", g_date_valid(d));
+
+	      if (m == G_DATE_JANUARY && day == 1) 
+		{
+		  first_day_of_year = g_date_get_julian(d);
+		}
+
+	      g_assert(first_day_of_year != G_DATE_BAD_JULIAN);
+
+	      TEST("Date with DMY triplet is valid", g_date_valid(d));
+	      TEST("Month accessor works", g_date_get_month(d) == m);
+	      TEST("Year accessor works", g_date_get_year(d) == y);
+	      TEST("Day of month accessor works", g_date_get_day(d) == day);
+
+	      TEST("Day of year is consistent with Julian dates",
+		   ((g_date_get_julian(d) + 1 - first_day_of_year) ==
+		    (g_date_get_day_of_year(d))));
+
+	      if (failed) 
+		{
+		  g_print("first day: %u this day: %u day of year: %u\n", 
+			  first_day_of_year, 
+			  g_date_get_julian(d),
+			  g_date_get_day_of_year(d));
+		}
+	      
+	      if (m == G_DATE_DECEMBER && day == 31) 
+		{
+		  TEST("Last day of year equals number of days in year", 
+		       g_date_get_day_of_year(d) == days_in_year);
+		  if (failed) 
+		    {
+		      g_print("last day: %u days in year: %u\n", 
+			      g_date_get_day_of_year(d), days_in_year);
+		    }
+		}
+
+	      TEST("Day of year is not more than number of days in the year",
+		   g_date_get_day_of_year(d) <= days_in_year);
+
+	      TEST("Monday week of year is not more than number of weeks in the year",
+		   g_date_get_monday_week_of_year(d) <= monday_weeks_in_year);
+	      if (failed)
+		{
+		  g_print("Weeks in year: %u\n", monday_weeks_in_year);
+		  g_date_debug_print(d);
+		}
+	      TEST("Monday week of year is >= than last week of year",
+		   g_date_get_monday_week_of_year(d) >= monday_week_of_year);
+
+	      if (g_date_get_weekday(d) == G_DATE_MONDAY) 
+		{
+		  
+		  TEST("Monday week of year on Monday 1 more than previous day's week of year",
+		       (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 1);
+		  if ((m == G_DATE_JANUARY && day <= 4) ||
+		      (m == G_DATE_DECEMBER && day >= 29)) {
+		    TEST("ISO 8601 week of year on Monday Dec 29 - Jan 4 is 1",
+			 (g_date_get_iso8601_week_of_year(d) == 1));
+		  } else {
+		    TEST("ISO 8601 week of year on Monday 1 more than previous day's week of year",
+			 (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 1);
+		  }
+		}
+	      else 
+		{
+		  TEST("Monday week of year on non-Monday 0 more than previous day's week of year",
+		       (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 0);
+		  if (!(day == 1 && m == G_DATE_JANUARY)) {
+		    TEST("ISO 8601 week of year on non-Monday 0 more than previous day's week of year (",
+			 (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 0);
+		  }
+		}
+
+
+	      monday_week_of_year = g_date_get_monday_week_of_year(d);
+	      iso8601_week_of_year = g_date_get_iso8601_week_of_year(d);
+
+
+	      TEST("Sunday week of year is not more than number of weeks in the year",
+		   g_date_get_sunday_week_of_year(d) <= sunday_weeks_in_year);
+	      if (failed)
+		{
+		  g_date_debug_print(d);
+		}
+	      TEST("Sunday week of year is >= than last week of year",
+		   g_date_get_sunday_week_of_year(d) >= sunday_week_of_year);
+
+	      if (g_date_get_weekday(d) == G_DATE_SUNDAY) 
+		{
+		  TEST("Sunday week of year on Sunday 1 more than previous day's week of year",
+		       (g_date_get_sunday_week_of_year(d) - sunday_week_of_year) == 1);
+		}
+	      else 
+		{
+		  TEST("Sunday week of year on non-Sunday 0 more than previous day's week of year",
+		       (g_date_get_sunday_week_of_year(d) - sunday_week_of_year) == 0);
+		}
+
+	      sunday_week_of_year = g_date_get_sunday_week_of_year(d);
+
+	      TEST("Date is equal to itself",
+		   g_date_compare(d,d) == 0);
+
+
+	      /*************** Increments ***********/
+
+              i = 1;
+              while (i < 402) /* Need to get 400 year increments in */ 
+                {
+	      
+                  /***** Days ******/
+                  tmp = *d;
+                  g_date_add_days(d, i);
+
+                  TEST("Adding days gives a value greater than previous",
+                       g_date_compare(d, &tmp) > 0);
+
+                  g_date_subtract_days(d, i);
+                  TEST("Forward days then backward days returns us to current day",
+                       g_date_get_day(d) == day);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward days then backward days returns us to current month",
+                       g_date_get_month(d) == m);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward days then backward days returns us to current year",
+                       g_date_get_year(d) == y);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  /******* Months ********/
+
+                  tmp = *d;
+                  g_date_add_months(d, i);
+                  TEST("Adding months gives a larger value",
+                       g_date_compare(d, &tmp) > 0);
+                  g_date_subtract_months(d, i);
+
+                  TEST("Forward months then backward months returns us to current month",
+                       g_date_get_month(d) == m);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward months then backward months returns us to current year",
+                       g_date_get_year(d) == y);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+		  
+                  if (day < 29) 
+                    {
+                      /* Day should be unchanged */
+		      
+                      TEST("Forward months then backward months returns us to current day",
+                           g_date_get_day(d) == day);
+		      
+                      if (failed) 
+                        {
+                          g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                          g_date_debug_print(d);
+                        }
+                    }
+                  else 
+                    {
+                      /* reset the day for later tests */
+                      g_date_set_day(d, day);
+                    }
+
+                  /******* Years ********/
+
+                  tmp = *d;
+                  g_date_add_years(d, i);
+
+                  TEST("Adding years gives a larger value",
+                       g_date_compare(d,&tmp) > 0);
+		      
+                  g_date_subtract_years(d, i);
+
+                  TEST("Forward years then backward years returns us to current month",
+                       g_date_get_month(d) == m);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward years then backward years returns us to current year",
+                       g_date_get_year(d) == y);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  if (m != 2 && day != 29) 
+                    {
+                      TEST("Forward years then backward years returns us to current day",
+                           g_date_get_day(d) == day);
+		      
+                      if (failed) 
+                        {
+                          g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                          g_date_debug_print(d);
+                        }
+                    }
+                  else 
+                    {
+                      g_date_set_day(d, day); /* reset */
+                    }
+
+                  i += 10;
+                }
+
+	      /*****  increment test relative to our local Julian count */
+
+              if (!discontinuity) {
+
+                /* We can only run sequence tests between sequential years */
+                
+                TEST("Julians are sequential with increment 1",
+                     j+1 == g_date_get_julian(d));
+                if (failed) 
+                  {
+                    g_print("Out of sequence, prev: %u expected: %u got: %u\n",
+                            j, j+1, g_date_get_julian(d));
+                  }
+
+                g_date_add_days(d,1);
+                TEST("Next day has julian 1 higher",
+                     g_date_get_julian(d) == j + 2);
+                g_date_subtract_days(d, 1);
+                
+                if (j != G_DATE_BAD_JULIAN) 
+                  {
+                    g_date_subtract_days(d, 1);
+                    
+                    TEST("Previous day has julian 1 lower",
+                         g_date_get_julian(d) == j);
+                    
+                    g_date_add_days(d, 1); /* back to original */
+                  }
+              }    
+              discontinuity = FALSE; /* goes away now */            
+
+              fflush(stdout);
+              fflush(stderr);
+
+	      j = g_date_get_julian(d); /* inc current julian */
+
+	      ++day;
+	    } 
+	  ++m;
+	}
+      g_print(" done\n");
+      ++i;
+      prev_y = y;
+      y = check_years[i];
+      if (prev_y == G_DATE_BAD_YEAR || 
+          (prev_y + 1) != y) discontinuity = TRUE;
+    }
+  
+  
+  g_print("\n%u tests passed, %u failed\n",passed, notpassed);
+
+  return 0;
+}
+
+
diff --git a/tests/dirname-test.c b/tests/dirname-test.c
new file mode 100644
index 0000000..0c8753c
--- /dev/null
+++ b/tests/dirname-test.c
@@ -0,0 +1,121 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdio.h>
+#include <string.h>
+#include "glib.h"
+
+int array[10000];
+gboolean failed = FALSE;
+
+#define	TEST(m,cond)	G_STMT_START { failed = !(cond); \
+if (failed) \
+  { if (!m) \
+      g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \
+    else \
+      g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \
+  } \
+else \
+  g_print ("."); fflush (stdout); \
+} G_STMT_END
+
+#define	C2P(c)		((gpointer) ((long) (c)))
+#define	P2C(p)		((gchar) ((long) (p)))
+
+#define GLIB_TEST_STRING "el dorado "
+#define GLIB_TEST_STRING_5 "el do"
+
+int
+main (int   argc,
+      char *argv[])
+{
+  gint i;
+  struct {
+    gchar *filename;
+    gchar *dirname;
+  } dirname_checks[] = {
+    { "/", "/" },
+    { "////", "/" },
+    { ".////", "." },
+    { ".", "." },
+    { "..", "." },
+    { "../", ".." },
+    { "..////", ".." },
+    { "", "." },
+    { "a/b", "a" },
+    { "a/b/", "a/b" },
+    { "c///", "c" },
+    { "/a/b", "/a" },
+    { "/a/b/", "/a/b" },
+#ifdef G_OS_WIN32
+    { "\\", "\\" },
+    { ".\\\\\\\\", "." },
+    { ".\\/\\/", "." },
+    { ".", "." },
+    { "..", "." },
+    { "..\\", ".." },
+    { "..\\\\\\\\", ".." },
+    { "..\\//\\", ".." },
+    { "", "." },
+    { "a\\b", "a" },
+    { "a\\b\\", "a\\b" },
+    { "\\a\\b", "\\a" },
+    { "\\a\\b\\", "\\a\\b" },
+    { "c\\\\\\", "c" },
+    { "c/\\\\", "c" },
+    { "a:", "a:." },
+    { "a:foo", "a:." },
+    { "a:foo\\bar", "a:foo" },
+    { "a:/foo", "a:/" },
+    { "a:/foo/bar", "a:/foo" },
+    { "a:/", "a:/" },
+    { "a://", "a:/" },
+    { "a:\\foo", "a:\\" },
+    { "a:\\", "a:\\" },
+    { "a:\\\\", "a:\\" },
+    { "a:\\/", "a:\\" },
+#endif
+  };
+  guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
+
+  for (i = 0; i < n_dirname_checks; i++)
+    {
+      gchar *dirname;
+
+      dirname = g_path_get_dirname (dirname_checks[i].filename);
+      if (strcmp (dirname, dirname_checks[i].dirname) != 0)
+	g_error ("%s returned %s, should return %s",
+		 dirname_checks[i].filename, dirname,
+		 dirname_checks[i].dirname);
+      g_free (dirname);
+    }
+
+  return 0;
+}
+
diff --git a/tests/env-test.c b/tests/env-test.c
new file mode 100644
index 0000000..5fd75df
--- /dev/null
+++ b/tests/env-test.c
@@ -0,0 +1,117 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include "config.h"
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#ifdef GLIB_COMPILATION
+#undef GLIB_COMPILATION
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int 
+main (int argc, char *argv[])
+{
+  gboolean result;
+  const gchar *data;
+  gchar *variable = "TEST_G_SETENV";
+  gchar *value1 = "works";
+  gchar *value2 = "again";
+
+  data = g_getenv (variable);
+  g_assert (data == NULL && "TEST_G_SETENV already set");
+  
+  result = g_setenv (variable, value1, TRUE);
+  g_assert (result && "g_setenv() failed");
+  
+  data = g_getenv (variable);
+  g_assert (data != NULL && "g_getenv() returns NULL");
+  g_assert (strcmp (data, value1) == 0 && "g_getenv() returns wrong value");
+
+  result = g_setenv (variable, value2, FALSE);
+  g_assert (result && "g_setenv() failed");
+  
+  data = g_getenv (variable);
+  g_assert (data != NULL && "g_getenv() returns NULL");
+  g_assert (strcmp (data, value2) != 0 && "g_setenv() always overwrites");
+  g_assert (strcmp (data, value1) == 0 && "g_getenv() returns wrong value");
+
+  result = g_setenv (variable, value2, TRUE);
+  g_assert (result && "g_setenv() failed");
+  
+  data = g_getenv (variable);
+  g_assert (data != NULL && "g_getenv() returns NULL");
+  g_assert (strcmp (data, value1) != 0 && "g_setenv() doesn't overwrite");
+  g_assert (strcmp (data, value2) == 0 && "g_getenv() returns wrong value");
+
+  g_unsetenv (variable);
+  data = g_getenv (variable);
+  g_assert (data == NULL && "g_unsetenv() doesn't work");
+
+#if 0
+  /* We can't test this, because it's an illegal argument that
+   * we g_return_if_fail for.
+   */
+  result = g_setenv ("foo=bar", "baz", TRUE);
+  g_assert (!result && "g_setenv() accepts '=' in names");
+#endif  
+
+  result = g_setenv ("foo", "bar=baz", TRUE);
+  g_assert (result && "g_setenv() doesn't accept '=' in values");
+#if 0
+  /* While glibc supports '=' in names in getenv(), SUS doesn't say anything about it,
+   * and Solaris doesn't support it.
+   */
+  data = g_getenv ("foo=bar");
+  g_assert (strcmp (data, "baz") == 0 && "g_getenv() doesn't support '=' in names");
+#endif
+  data = g_getenv ("foo");
+  g_assert (strcmp (data, "bar=baz") == 0 && "g_getenv() doesn't support '=' in values");
+
+#if 0  
+  /* We can't test this, because it's an illegal argument that
+   * we g_return_if_fail for. Plus how would we check for failure,
+   * since we can't set the value...
+   */
+  g_unsetenv ("foo=bar");
+#endif  
+  g_unsetenv ("foo");
+  data = g_getenv ("foo");
+  g_assert (data == NULL && "g_unsetenv() doesn't support '=' in values");
+
+  return 0;
+}
diff --git a/tests/errorcheck-mutex-test.c b/tests/errorcheck-mutex-test.c
new file mode 100644
index 0000000..5b30057
--- /dev/null
+++ b/tests/errorcheck-mutex-test.c
@@ -0,0 +1,131 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+#define G_ERRORCHECK_MUTEXES
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+static gpointer
+locking_thread (gpointer mutex)
+{
+  g_mutex_lock ((GMutex*)mutex);
+
+  return NULL;
+}
+
+static void
+lock_locked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  g_mutex_lock (mutex);
+  g_mutex_lock (mutex);
+}
+
+static void
+trylock_locked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  g_mutex_lock (mutex);
+  g_mutex_trylock (mutex);
+}
+
+static void
+unlock_unlocked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  g_mutex_lock (mutex);
+  g_mutex_unlock (mutex);
+  g_mutex_unlock (mutex);
+}
+
+static void
+free_locked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  g_mutex_lock (mutex);
+  g_mutex_free (mutex);
+}
+
+static void
+wait_on_unlocked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  GCond* cond = g_cond_new ();
+  g_cond_wait (cond, mutex);
+}
+
+static void
+wait_on_otherwise_locked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  GCond* cond = g_cond_new ();
+  GThread* thread = g_thread_create (locking_thread, mutex, TRUE, NULL);
+  g_assert (thread != NULL);
+  g_usleep (G_USEC_PER_SEC);
+  g_cond_wait (cond, mutex);
+}
+
+static void
+timed_wait_on_unlocked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  GCond* cond = g_cond_new ();
+  g_cond_timed_wait (cond, mutex, NULL);
+}
+
+static void
+timed_wait_on_otherwise_locked_mutex (void)
+{
+  GMutex* mutex = g_mutex_new ();
+  GCond* cond = g_cond_new ();
+  GThread* thread = g_thread_create (locking_thread, mutex, TRUE, NULL);
+  g_assert (thread != NULL);
+  g_usleep (G_USEC_PER_SEC);
+  g_cond_timed_wait (cond, mutex, NULL);
+}
+
+struct
+{
+  char *name;
+  void (*func)();
+} func_table[] =
+{
+  {"lock_locked_mutex", lock_locked_mutex},
+  {"trylock_locked_mutex", trylock_locked_mutex},
+  {"unlock_unlocked_mutex", unlock_unlocked_mutex},
+  {"free_locked_mutex", free_locked_mutex},
+  {"wait_on_unlocked_mutex", wait_on_unlocked_mutex},
+  {"wait_on_otherwise_locked_mutex", wait_on_otherwise_locked_mutex},
+  {"timed_wait_on_unlocked_mutex", timed_wait_on_unlocked_mutex},
+  {"timed_wait_on_otherwise_locked_mutex",
+   timed_wait_on_otherwise_locked_mutex}
+};
+
+int
+main (int argc, char* argv[])
+{
+  int i;
+
+  if (argc == 2)
+    {
+      for (i = 0; i < G_N_ELEMENTS (func_table); i++)
+        {
+          if (strcmp (func_table[i].name, argv[1]) == 0)
+            {
+              g_thread_init (NULL);
+              func_table[i].func ();
+              g_assert_not_reached ();
+            }
+        }
+    }
+
+  fprintf (stderr, "Usage: errorcheck-mutex-test [TEST]\n\n");
+  fprintf (stderr, "   where TEST can be one of:\n\n");
+  for (i = 0; i < G_N_ELEMENTS (func_table); i++)
+    {
+      fprintf (stderr, "      %s\n", func_table[i].name);
+    }
+
+  return 0;
+}
diff --git a/tests/file-test.c b/tests/file-test.c
new file mode 100644
index 0000000..adab1f2
--- /dev/null
+++ b/tests/file-test.c
@@ -0,0 +1,180 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include "config.h"
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#ifdef GLIB_COMPILATION
+#undef GLIB_COMPILATION
+#endif
+
+#include <string.h>
+
+#include <glib.h>
+
+#include <gstdio.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef G_OS_WIN32
+#include <io.h>			/* For read(), write() etc */
+#endif
+
+static void
+test_mkstemp (void)
+{
+  char template[32];
+  int fd;
+  int i;
+  const char hello[] = "Hello, World";
+  const int hellolen = sizeof (hello) - 1;
+  char chars[62];
+
+  strcpy (template, "foobar");
+  fd = g_mkstemp (template);
+  if (fd != -1)
+    g_warning ("g_mkstemp works even if template doesn't contain XXXXXX");
+  close (fd);
+
+  strcpy (template, "foobarXXX");
+  fd = g_mkstemp (template);
+  if (fd != -1)
+    g_warning ("g_mkstemp works even if template contains less than six X");
+  close (fd);
+
+  strcpy (template, "fooXXXXXX");
+  fd = g_mkstemp (template);
+  g_assert (fd != -1 && "g_mkstemp didn't work for template fooXXXXXX");
+  i = write (fd, hello, hellolen);
+  g_assert (i != -1 && "write() failed");
+  g_assert (i == hellolen && "write() has written too few bytes");
+
+  lseek (fd, 0, 0);
+  i = read (fd, chars, sizeof (chars));
+  g_assert (i != -1 && "read() failed: %s");
+  g_assert (i == hellolen && "read() has got wrong number of bytes");
+
+  chars[i] = 0;
+  g_assert (strcmp (chars, hello) == 0 && "read() didn't get same string back");
+
+  close (fd);
+  remove (template);
+
+  strcpy (template, "fooXXXXXX.pdf");
+  fd = g_mkstemp (template);
+  g_assert (fd != -1 && "g_mkstemp didn't work for template fooXXXXXX.pdf");
+
+  close (fd);
+  remove (template);
+}
+
+static void
+test_readlink (void)
+{
+#ifdef HAVE_SYMLINK
+  FILE *file;
+  int result;
+  char *filename = "file-test-data";
+  char *link1 = "file-test-link1";
+  char *link2 = "file-test-link2";
+  char *link3 = "file-test-link3";
+  char *data;
+  GError *error;
+
+  file = fopen (filename, "w");
+  g_assert (file != NULL && "fopen() failed");
+  fclose (file);
+
+  result = symlink (filename, link1);
+  g_assert (result == 0 && "symlink() failed");
+  result = symlink (link1, link2);
+  g_assert (result == 0 && "symlink() failed");
+  
+  error = NULL;
+  data = g_file_read_link (link1, &error);
+  g_assert (data != NULL && "couldn't read link1");
+  g_assert (strcmp (data, filename) == 0 && "link1 contains wrong data");
+  g_free (data);
+  
+  error = NULL;
+  data = g_file_read_link (link2, &error);
+  g_assert (data != NULL && "couldn't read link2");
+  g_assert (strcmp (data, link1) == 0 && "link2 contains wrong data");
+  g_free (data);
+  
+  error = NULL;
+  data = g_file_read_link (link3, &error);
+  g_assert (data == NULL && "could read link3");
+  g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT);
+
+  error = NULL;
+  data = g_file_read_link (filename, &error);
+  g_assert (data == NULL && "could read regular file as link");
+  g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL);
+  
+  remove (filename);
+  remove (link1);
+  remove (link2);
+#endif
+}
+
+static void
+test_get_contents (void)
+{
+  const gchar *text = "abcdefghijklmnopqrstuvwxyz";
+  const gchar *filename = "file-test-get-contents";
+  gchar *contents;
+  gsize len;
+  FILE *f;
+  GError *error = NULL;
+
+  f = g_fopen (filename, "w");
+  fwrite (text, 1, strlen (text), f);
+  fclose (f);
+
+  g_assert (g_file_test (filename, G_FILE_TEST_IS_REGULAR));
+
+  if (! g_file_get_contents (filename, &contents, &len, &error))
+    g_error ("g_file_get_contents() failed: %s", error->message);
+
+  g_assert (strcmp (text, contents) == 0 && "content mismatch");
+
+  g_free (contents);
+}
+
+int 
+main (int argc, char *argv[])
+{
+  test_mkstemp ();
+  test_readlink ();
+  test_get_contents ();
+
+  return 0;
+}
diff --git a/tests/gen-casefold-txt.pl b/tests/gen-casefold-txt.pl
new file mode 100755
index 0000000..d028ea9
--- /dev/null
+++ b/tests/gen-casefold-txt.pl
@@ -0,0 +1,84 @@
+#! /usr/bin/perl -w
+
+#    Copyright (C) 1998, 1999 Tom Tromey
+#    Copyright (C) 2001 Red Hat Software
+
+#    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, write to the Free Software
+#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+#    02111-1307, USA.
+
+# gen-casefold-test.pl - Generate test cases for casefolding from Unicode data.
+# See http://www.unicode.org/Public/UNIDATA/UnicodeCharacterDatabase.html
+# Usage: 
+# I consider the output of this program to be unrestricted.  Use it as
+# you will.
+
+require 5.006;
+
+# Names of fields in the CaseFolding table
+$FOLDING_CODE = 0;
+$FOLDING_STATUS = 1;
+$FOLDING_MAPPING = 2;
+
+my $casefoldlen = 0;
+my @casefold;
+
+if (@ARGV != 2) {
+    $0 =~ s@.*/@@;
+    die "Usage: $0 UNICODE-VERSION  CaseFolding.txt\n";
+}
+ 
+print <<EOT;
+# Test cases generated from Unicode $ARGV[0] data
+# by gen-casefold-test.pl. Do not edit.
+#
+# Some special hand crafted tests
+#
+AaBbCc@@\taabbcc@@
+#
+# Now the automatic tests
+#
+EOT
+
+binmode STDOUT, ":utf8";
+open (INPUT, "< $ARGV[1]") || exit 1;
+
+while (<INPUT>)
+{
+    chop;
+
+    next if /^#/;
+    next if /^\s*$/;
+
+    s/\s*#.*//;
+
+    my @fields = split ('\s*;\s*', $_, 30);
+
+    my $raw_code = $fields[$FOLDING_CODE];
+    my $code = hex ($raw_code);
+
+    if ($#fields != 3)
+    {
+	printf STDERR ("Entry for $raw_code has wrong number of fields (%d)\n", $#fields);
+	next;
+    }
+
+    # skip simple and Turkic mappings
+    next if ($fields[$FOLDING_STATUS] =~ /^[ST]$/);
+
+    @values = map { hex ($_) } split /\s+/, $fields[$FOLDING_MAPPING];
+    printf ("%s\t%s\n", pack ("U", $code), pack ("U*", @values));
+}
+
+close INPUT;
diff --git a/tests/gen-casemap-txt.pl b/tests/gen-casemap-txt.pl
new file mode 100755
index 0000000..0b9fc1d
--- /dev/null
+++ b/tests/gen-casemap-txt.pl
@@ -0,0 +1,258 @@
+#! /usr/bin/perl -w
+
+#    Copyright (C) 1998, 1999 Tom Tromey
+#    Copyright (C) 2001 Red Hat Software
+
+#    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, write to the Free Software
+#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+#    02111-1307, USA.
+
+# gen-casemap-test.pl - Generate test cases for case mapping from Unicode data.
+# See http://www.unicode.org/Public/UNIDATA/UnicodeCharacterDatabase.html
+# I consider the output of this program to be unrestricted.  Use it as
+# you will.
+
+require 5.006;
+use utf8;
+
+if (@ARGV != 3) {
+    $0 =~ s@.*/@@;
+    die "Usage: $0 UNICODE-VERSION UnicodeData.txt SpecialCasing.txt\n";
+}
+ 
+use vars qw($CODE $NAME $CATEGORY $COMBINING_CLASSES $BIDI_CATEGORY $DECOMPOSITION $DECIMAL_VALUE $DIGIT_VALUE $NUMERIC_VALUE $MIRRORED $OLD_NAME $COMMENT $UPPER $LOWER $TITLE $BREAK_CODE $BREAK_CATEGORY $BREAK_NAME $CASE_CODE $CASE_LOWER $CASE_TITLE $CASE_UPPER $CASE_CONDITION);
+
+# Names of fields in Unicode data table.
+$CODE = 0;
+$NAME = 1;
+$CATEGORY = 2;
+$COMBINING_CLASSES = 3;
+$BIDI_CATEGORY = 4;
+$DECOMPOSITION = 5;
+$DECIMAL_VALUE = 6;
+$DIGIT_VALUE = 7;
+$NUMERIC_VALUE = 8;
+$MIRRORED = 9;
+$OLD_NAME = 10;
+$COMMENT = 11;
+$UPPER = 12;
+$LOWER = 13;
+$TITLE = 14;
+
+# Names of fields in the SpecialCasing table
+$CASE_CODE = 0;
+$CASE_LOWER = 1;
+$CASE_TITLE = 2;
+$CASE_UPPER = 3;
+$CASE_CONDITION = 4;
+
+my @upper;
+my @title;
+my @lower;
+
+binmode STDOUT, ":utf8";
+open (INPUT, "< $ARGV[1]") || exit 1;
+
+$last_code = -1;
+while (<INPUT>)
+{
+    chop;
+    @fields = split (';', $_, 30);
+    if ($#fields != 14)
+    {
+	printf STDERR ("Entry for $fields[$CODE] has wrong number of fields (%d)\n", $#fields);
+    }
+
+    $code = hex ($fields[$CODE]);
+
+    if ($code > $last_code + 1)
+    {
+	# Found a gap.
+	if ($fields[$NAME] =~ /Last>/)
+	{
+	    # Fill the gap with the last character read,
+            # since this was a range specified in the char database
+	    @gfields = @fields;
+	}
+	else
+	{
+	    # The gap represents undefined characters.  Only the type
+	    # matters.
+	    @gfields = ('', '', 'Cn', '0', '', '', '', '', '', '', '',
+			'', '', '', '');
+	}
+	for (++$last_code; $last_code < $code; ++$last_code)
+	{
+	    $gfields{$CODE} = sprintf ("%04x", $last_code);
+	    &process_one ($last_code, @gfields);
+	}
+    }
+    &process_one ($code, @fields);
+    $last_code = $code;
+}
+
+close INPUT;
+
+open (INPUT, "< $ARGV[2]") || exit 1;
+
+while (<INPUT>)
+{
+    my $code;
+    
+    chop;
+
+    next if /^#/;
+    next if /^\s*$/;
+
+    s/\s*#.*//;
+
+    @fields = split ('\s*;\s*', $_, 30);
+
+    $raw_code = $fields[$CASE_CODE];
+    $code = hex ($raw_code);
+
+    if ($#fields != 4 && $#fields != 5)
+    {
+	printf STDERR ("Entry for $raw_code has wrong number of fields (%d)\n", $#fields);
+	next;
+    }
+
+    if (defined $fields[5]) {
+	# Ignore conditional special cases - we'll handle them manually
+	next;
+    }
+
+    $upper[$code] = &make_hex ($fields[$CASE_UPPER]);
+    $lower[$code] = &make_hex ($fields[$CASE_LOWER]);
+    $title[$code] = &make_hex ($fields[$CASE_TITLE]);
+}
+
+close INPUT;
+
+print <<EOT;
+# Test cases generated from Unicode $ARGV[0] data
+# by gen-case-tests.pl. Do not edit.
+#
+# Some special hand crafted tests
+#
+tr_TR\ti\ti\t\x{0130}\t\x{0130}\t# i => LATIN CAPITAL LETTER I WITH DOT ABOVE
+tr_TR\tI\t\x{0131}\tI\tI\t# I => LATIN SMALL LETTER DOTLESS I
+tr_TR\tI\x{0307}\ti\tI\x{0307}\tI\x{0307}\t# I => LATIN SMALL LETTER DOTLESS I
+tr_TR.UTF-8\ti\ti\t\x{0130}\t\x{0130}\t# i => LATIN CAPITAL LETTER I WITH DOT ABOVE
+tr_TR.UTF-8\tI\t\x{0131}\tI\tI\t# I => LATIN SMALL LETTER DOTLESS I
+tr_TR.UTF-8\tI\x{0307}\ti\tI\x{0307}\tI\x{0307}\t# I => LATIN SMALL LETTER DOTLESS I
+# Test reordering of YPOGEGRAMMENI across other accents
+\t\x{03b1}\x{0345}\x{0314}\t\x{03b1}\x{0345}\x{314}\t\x{0391}\x{0345}\x{0314}\t\x{0391}\x{0314}\x{0399}\t
+\t\x{03b1}\x{0314}\x{0345}\t\x{03b1}\x{314}\x{0345}\t\x{0391}\x{0314}\x{0345}\t\x{0391}\x{0314}\x{0399}\t
+# Handling of final and nonfinal sigma
+	ΜΆΙΟΣ 	μάιος 	Μάιος 	ΜΆΙΟΣ 	
+	ΜΆΙΟΣ	μάιος	Μάιος	ΜΆΙΟΣ	
+	ΣΙΓΜΑ	σιγμα	Σιγμα	ΣΙΓΜΑ	
+# Lithuanian rule of i followed by letter with dot. Not at all sure
+# about the titlecase part here
+lt_LT\ti\x{117}\ti\x{117}\tIe\tIE\t
+lt_LT\tie\x{307}\tie\x{307}\tIe\tIE\t
+lt_LT\t\x{00cc}\ti\x{0307}\x{0300}\t\x{00cc}\t\x{00cc}\t # LATIN CAPITAL LETTER I WITH GRAVE
+lt_LT\t\x{00CD}\ti\x{0307}\x{0301}\t\x{00CD}\t\x{00CD}\t # LATIN CAPITAL LETTER I WITH ACUTE
+lt_LT\t\x{0128}\ti\x{0307}\x{0303}\t\x{0128}\t\x{0128}\t # LATIN CAPITAL LETTER I WITH TILDE
+lt_LT\tI\x{0301}\ti\x{0307}\x{0301}\tI\x{0301}\tI\x{0301}\t # LATIN CAPITAL LETTER I (with acute accent)
+lt_LT\tI\x{0300}\ti\x{0307}\x{0300}\tI\x{0300}\tI\x{0300}\t # LATIN CAPITAL LETTER I (with grave accent)
+lt_LT\tI\x{0303}\ti\x{0307}\x{0303}\tI\x{0303}\tI\x{0303}\t # LATIN CAPITAL LETTER I (with tilde above)
+lt_LT\tI\x{0328}\x{0301}\ti\x{0307}\x{0328}\x{0301}\tI\x{0328}\x{0301}\tI\x{0328}\x{0301}\t # LATIN CAPITAL LETTER I (with ogonek and acute accent)
+lt_LT\tJ\x{0301}\tj\x{0307}\x{0301}\tJ\x{0301}\tJ\x{0301}\t # LATIN CAPITAL LETTER J (with acute accent)
+lt_LT\t\x{012e}\x{0301}\t\x{012f}\x{0307}\x{0301}\t\x{012e}\x{0301}\t\x{012e}\x{0301}\t # LATIN CAPITAL LETTER I WITH OGONEK (with acute accent)
+lt_LT.UTF-8\ti\x{117}\ti\x{117}\tIe\tIE\t
+lt_LT.UTF-8\tie\x{307}\tie\x{307}\tIe\tIE\t
+lt_LT.UTF-8\t\x{00cc}\ti\x{0307}\x{0300}\t\x{00cc}\t\x{00cc}\t # LATIN CAPITAL LETTER I WITH GRAVE
+lt_LT.UTF-8\t\x{00CD}\ti\x{0307}\x{0301}\t\x{00CD}\t\x{00CD}\t # LATIN CAPITAL LETTER I WITH ACUTE
+lt_LT.UTF-8\t\x{0128}\ti\x{0307}\x{0303}\t\x{0128}\t\x{0128}\t # LATIN CAPITAL LETTER I WITH TILDE
+lt_LT.UTF-8\tI\x{0301}\ti\x{0307}\x{0301}\tI\x{0301}\tI\x{0301}\t # LATIN CAPITAL LETTER I (with acute accent)
+lt_LT.UTF-8\tI\x{0300}\ti\x{0307}\x{0300}\tI\x{0300}\tI\x{0300}\t # LATIN CAPITAL LETTER I (with grave accent)
+lt_LT.UTF-8\tI\x{0303}\ti\x{0307}\x{0303}\tI\x{0303}\tI\x{0303}\t # LATIN CAPITAL LETTER I (with tilde above)
+lt_LT.UTF-8\tI\x{0328}\x{0301}\ti\x{0307}\x{0328}\x{0301}\tI\x{0328}\x{0301}\tI\x{0328}\x{0301}\t # LATIN CAPITAL LETTER I (with ogonek and acute accent)
+lt_LT.UTF-8\tJ\x{0301}\tj\x{0307}\x{0301}\tJ\x{0301}\tJ\x{0301}\t # LATIN CAPITAL LETTER J (with acute accent)
+lt_LT.UTF-8\t\x{012e}\x{0301}\t\x{012f}\x{0307}\x{0301}\t\x{012e}\x{0301}\t\x{012e}\x{0301}\t # LATIN CAPITAL LETTER I WITH OGONEK (with acute accent)
+# Special case not at initial position
+\ta\x{fb04}\ta\x{fb04}\tAffl\tAFFL\t# FB04
+#
+# Now the automatic tests
+#
+EOT
+&print_tests;
+
+exit 0;
+
+# Process a single character.
+sub process_one
+{
+    my ($code, @fields) = @_;
+
+    my $type =  $fields[$CATEGORY];
+    if ($type eq 'Ll')
+    {
+	$upper[$code] = make_hex ($fields[$UPPER]);
+	$lower[$code] = pack ("U", $code);
+	$title[$code] = make_hex ($fields[$TITLE]);
+    }
+    elsif ($type eq 'Lu')
+    {
+	$lower[$code] = make_hex ($fields[$LOWER]);
+	$upper[$code] = pack ("U", $code);
+	$title[$code] = make_hex ($fields[$TITLE]);
+    }
+
+    if ($type eq 'Lt')
+    {
+	$upper[$code] = make_hex ($fields[$UPPER]);
+	$lower[$code] = pack ("U", hex ($fields[$LOWER]));
+	$title[$code] = make_hex ($fields[$LOWER]);
+    }
+}
+
+sub print_tests
+{
+    for ($i = 0; $i < 0x10ffff; $i++) {
+	if ($i == 0x3A3) {
+	    # Greek sigma needs special tests
+	    next;
+	}
+	
+	my $lower = $lower[$i];
+	my $title = $title[$i];
+	my $upper = $upper[$i];
+
+	if (defined $upper || defined $lower || defined $title) {
+	    printf "\t%s\t%s\t%s\t%s\t# %4X\n",
+		    pack ("U", $i),
+		    (defined $lower ? $lower : ""),
+		    (defined $title ? $title : ""),
+		    (defined $upper ? $upper : ""),
+                    $i;
+	}
+    }
+}
+
+sub make_hex
+{
+    my $codes = shift;
+
+    $codes =~ s/^\s+//;
+    $codes =~ s/\s+$//;
+
+    if ($codes eq "0" || $codes eq "") {
+	return "";
+    } else {
+	return pack ("U*", map { hex ($_) } split /\s+/, $codes);
+    }
+}
diff --git a/tests/gio-ls.c b/tests/gio-ls.c
new file mode 100644
index 0000000..c29ea6c
--- /dev/null
+++ b/tests/gio-ls.c
@@ -0,0 +1,116 @@
+
+#include <gio/gio.h>
+
+#define GETTEXT_PACKAGE "gio-ls"
+#define N_(s) (s)
+#define _(s) (s)
+
+enum
+{
+  SHOW_ALL,
+  SHOW_LONG
+};
+
+static void print_path (const gchar* path, guint32 flags);
+
+static gboolean show_all = FALSE;
+static gboolean show_long = FALSE;
+
+int 
+main (int argc, char *argv[])
+{
+  
+  GOptionContext *context = NULL;
+  static GOptionEntry options[] =
+  {
+    {"all", 'a', 0, G_OPTION_ARG_NONE, &show_all,
+     N_("do not hide entries"), NULL },
+    {"long", 'l', 0, G_OPTION_ARG_NONE, &show_long,
+     N_("use a long listing format"), NULL },
+    { NULL }
+  };
+  GError *error = NULL;
+  int i;
+
+  g_type_init ();
+
+  context = g_option_context_new(_("[FILE...]"));
+  g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
+  
+  if (!g_option_context_parse (context, &argc, &argv, &error)) 
+    {
+      g_print ("%s", error->message);
+      g_error_free (error);
+      
+    }
+  else
+    {
+      for (i = 1; i < argc; i++) 
+        {
+	  print_path (argv[i], (show_all ? SHOW_ALL : 0) | (show_long ? SHOW_LONG : 0));
+	}
+    }
+
+  g_option_context_free(context);
+  return 0;
+}
+
+static void 
+print_path (const gchar* path, 
+            guint32      flags)
+{
+  GFile *top;
+  const gchar *short_attrs = G_FILE_ATTRIBUTE_STANDARD_NAME;
+  const gchar *long_attrs = G_FILE_ATTRIBUTE_OWNER_USER "," G_FILE_ATTRIBUTE_OWNER_GROUP "," \
+			    "access:*,std:*";
+  const gchar *attrs;
+  
+  if (flags & SHOW_LONG)
+    attrs = long_attrs;
+  else
+    attrs = short_attrs;
+
+  top = g_file_new_for_path (path);
+  if (top)
+    {
+      GFileInfo *info;
+      GError *error = NULL;
+      GFileEnumerator *enumerator = g_file_enumerate_children (top, attrs, 
+                                                               G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error);
+      if (error)
+        {
+	  g_print ("%s", error->message);
+	  g_error_free (error);
+	}
+      if (!enumerator)
+        return;
+ 
+      while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL)
+        {
+	  const gchar *name = g_file_info_get_name (info);
+
+          if (flags & SHOW_LONG)
+	    {
+	      const gchar *val;
+	      
+	      g_print ("%c%c%c%c ",
+		g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY ? 'd' : '-',
+		g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ) ? 'r' : '-',
+		g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE) ? 'w' : '-',
+		g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE) ? 'x' : '-');
+
+	      val = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER);
+	      g_print ("\t%15s", val ? val : "?user?");
+
+	      val = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_GROUP);
+	      g_print ("\t%15s", val ? val : "?group?");
+	    }
+	    
+	  g_print ("\t%s\n", name ? name : "?noname?");
+
+	  g_object_unref (info);
+	}
+
+      g_object_unref (top);
+    }
+}
diff --git a/tests/gio-test.c b/tests/gio-test.c
new file mode 100644
index 0000000..cc56ef4
--- /dev/null
+++ b/tests/gio-test.c
@@ -0,0 +1,445 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2000  Tor Lillqvist
+ *
+ * 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 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.
+ */
+
+/* A test program for the main loop and IO channel code.
+ * Just run it. Optional parameter is number of sub-processes.
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include "config.h"
+
+#include <glib.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <time.h>
+
+#ifdef G_OS_WIN32
+  #include <io.h>
+  #include <fcntl.h>
+  #include <process.h>
+  #define STRICT
+  #include <windows.h>
+  #define pipe(fds) _pipe(fds, 4096, _O_BINARY)
+#else
+  #ifdef HAVE_UNISTD_H
+    #include <unistd.h>
+  #endif
+#endif
+
+static int nrunning;
+static GMainLoop *main_loop;
+
+#define BUFSIZE 5000		/* Larger than the circular buffer in
+				 * giowin32.c on purpose.
+				 */
+
+static int nkiddies;
+
+static struct {
+  int fd;
+  int seq;
+} *seqtab;
+
+static GIOError
+read_all (int         fd,
+	  GIOChannel *channel,
+	  char       *buffer,
+	  guint       nbytes,
+	  guint      *bytes_read)
+{
+  guint left = nbytes;
+  gsize nb;
+  GIOError error = G_IO_ERROR_NONE;
+  char *bufp = buffer;
+
+  /* g_io_channel_read() doesn't necessarily return all the
+   * data we want at once.
+   */
+  *bytes_read = 0;
+  while (left)
+    {
+      error = g_io_channel_read (channel, bufp, left, &nb);
+      
+      if (error != G_IO_ERROR_NONE)
+	{
+	  g_print ("gio-test: ...from %d: G_IO_ERROR_%s\n", fd,
+		   (error == G_IO_ERROR_AGAIN ? "AGAIN" :
+		    (error == G_IO_ERROR_INVAL ? "INVAL" :
+		     (error == G_IO_ERROR_UNKNOWN ? "UNKNOWN" : "???"))));
+	  if (error == G_IO_ERROR_AGAIN)
+	    continue;
+	  break;
+	}
+      if (nb == 0)
+	return error;
+      left -= nb;
+      bufp += nb;
+      *bytes_read += nb;
+    }
+  return error;
+}
+
+static void
+shutdown_source (gpointer data)
+{
+  if (g_source_remove (*(guint *) data))
+    {
+      nrunning--;
+      if (nrunning == 0)
+	g_main_loop_quit (main_loop);
+    }
+}
+
+static gboolean
+recv_message (GIOChannel  *channel,
+	      GIOCondition cond,
+	      gpointer    data)
+{
+  gint fd = g_io_channel_unix_get_fd (channel);
+  gboolean retval = TRUE;
+
+#ifdef VERBOSE
+  g_print ("gio-test: ...from %d:%s%s%s%s\n", fd,
+	   (cond & G_IO_ERR) ? " ERR" : "",
+	   (cond & G_IO_HUP) ? " HUP" : "",
+	   (cond & G_IO_IN)  ? " IN"  : "",
+	   (cond & G_IO_PRI) ? " PRI" : "");
+#endif
+
+  if (cond & (G_IO_ERR | G_IO_HUP))
+    {
+      shutdown_source (data);
+      retval = FALSE;
+    }
+
+  if (cond & G_IO_IN)
+    {
+      char buf[BUFSIZE];
+      guint nbytes;
+      guint nb;
+      int i, j, seq;
+      GIOError error;
+      
+      error = read_all (fd, channel, (gchar *) &seq, sizeof (seq), &nb);
+      if (error == G_IO_ERROR_NONE)
+	{
+	  if (nb == 0)
+	    {
+#ifdef VERBOSE
+	      g_print ("gio-test: ...from %d: EOF\n", fd);
+#endif
+	      shutdown_source (data);
+	      return FALSE;
+	    }
+	  
+	  g_assert (nb == sizeof (nbytes));
+
+	  for (i = 0; i < nkiddies; i++)
+	    if (seqtab[i].fd == fd)
+	      {
+		if (seq != seqtab[i].seq)
+		  {
+		    g_print ("gio-test: ...from %d: invalid sequence number %d, expected %d\n",
+			     fd, seq, seqtab[i].seq);
+		    g_assert_not_reached ();
+		  }
+		seqtab[i].seq++;
+		break;
+	      }
+
+	  error = read_all (fd, channel, (gchar *) &nbytes, sizeof (nbytes), &nb);
+	}
+
+      if (error != G_IO_ERROR_NONE)
+	return FALSE;
+      
+      if (nb == 0)
+	{
+#ifdef VERBOSE
+	  g_print ("gio-test: ...from %d: EOF\n", fd);
+#endif
+	  shutdown_source (data);
+	  return FALSE;
+	}
+      
+      g_assert (nb == sizeof (nbytes));
+
+      if (nbytes >= BUFSIZE)
+	{
+	  g_print ("gio-test: ...from %d: nbytes = %d (%#x)!\n", fd, nbytes, nbytes);
+	  g_assert_not_reached ();
+	}
+      g_assert (nbytes >= 0 && nbytes < BUFSIZE);
+#ifdef VERBOSE      
+      g_print ("gio-test: ...from %d: %d bytes\n", fd, nbytes);
+#endif      
+      if (nbytes > 0)
+	{
+	  error = read_all (fd, channel, buf, nbytes, &nb);
+
+	  if (error != G_IO_ERROR_NONE)
+	    return FALSE;
+
+	  if (nb == 0)
+	    {
+#ifdef VERBOSE
+	      g_print ("gio-test: ...from %d: EOF\n", fd);
+#endif
+	      shutdown_source (data);
+	      return FALSE;
+	    }
+      
+	  for (j = 0; j < nbytes; j++)
+	    if (buf[j] != ' ' + ((nbytes + j) % 95))
+	      {
+		g_print ("gio-test: ...from %d: buf[%d] == '%c', should be '%c'\n",
+			 fd, j, buf[j], 'a' + ((nbytes + j) % 32));
+		g_assert_not_reached ();
+	      }
+#ifdef VERBOSE
+	  g_print ("gio-test: ...from %d: OK\n", fd);
+#endif
+	}
+    }
+  return retval;
+}
+
+#ifdef G_OS_WIN32
+
+static gboolean
+recv_windows_message (GIOChannel  *channel,
+		      GIOCondition cond,
+		      gpointer    data)
+{
+  GIOError error;
+  MSG msg;
+  guint nb;
+  
+  while (1)
+    {
+      error = g_io_channel_read (channel, &msg, sizeof (MSG), &nb);
+      
+      if (error != G_IO_ERROR_NONE)
+	{
+	  g_print ("gio-test: ...reading Windows message: G_IO_ERROR_%s\n",
+		   (error == G_IO_ERROR_AGAIN ? "AGAIN" :
+		    (error == G_IO_ERROR_INVAL ? "INVAL" :
+		     (error == G_IO_ERROR_UNKNOWN ? "UNKNOWN" : "???"))));
+	  if (error == G_IO_ERROR_AGAIN)
+	    continue;
+	}
+      break;
+    }
+
+  g_print ("gio-test: ...Windows message for %#x: %d,%d,%d\n",
+	   msg.hwnd, msg.message, msg.wParam, msg.lParam);
+
+  return TRUE;
+}
+
+LRESULT CALLBACK 
+window_procedure (HWND hwnd,
+		  UINT message,
+		  WPARAM wparam,
+		  LPARAM lparam)
+{
+  g_print ("gio-test: window_procedure for %#x: %d,%d,%d\n",
+	   hwnd, message, wparam, lparam);
+  return DefWindowProc (hwnd, message, wparam, lparam);
+}
+
+#endif
+
+int
+main (int    argc,
+      char **argv)
+{
+  if (argc < 3)
+    {
+      /* Parent */
+      
+      GIOChannel *my_read_channel;
+      gchar *cmdline;
+      guint *id;
+      int i;
+#ifdef G_OS_WIN32
+      GTimeVal start, end;
+      GPollFD pollfd;
+      int pollresult;
+      ATOM klass;
+      static WNDCLASS wcl;
+      HWND hwnd;
+      GIOChannel *windows_messages_channel;
+#endif
+
+      nkiddies = (argc == 1 ? 1 : atoi(argv[1]));
+      seqtab = g_malloc (nkiddies * 2 * sizeof (int));
+
+#ifdef G_OS_WIN32
+      wcl.style = 0;
+      wcl.lpfnWndProc = window_procedure;
+      wcl.cbClsExtra = 0;
+      wcl.cbWndExtra = 0;
+      wcl.hInstance = GetModuleHandle (NULL);
+      wcl.hIcon = NULL;
+      wcl.hCursor = NULL;
+      wcl.hbrBackground = NULL;
+      wcl.lpszMenuName = NULL;
+      wcl.lpszClassName = "gio-test";
+
+      klass = RegisterClass (&wcl);
+
+      if (!klass)
+	{
+	  g_print ("gio-test: RegisterClass failed\n");
+	  exit (1);
+	}
+
+      hwnd = CreateWindow (MAKEINTATOM(klass), "gio-test", 0, 0, 0, 10, 10,
+			   NULL, NULL, wcl.hInstance, NULL);
+      if (!hwnd)
+	{
+	  g_print ("gio-test: CreateWindow failed\n");
+	  exit (1);
+	}
+
+      windows_messages_channel = g_io_channel_win32_new_messages ((guint)hwnd);
+      g_io_add_watch (windows_messages_channel, G_IO_IN, recv_windows_message, 0);
+#endif
+
+      for (i = 0; i < nkiddies; i++)
+	{
+	  int pipe_to_sub[2], pipe_from_sub[2];
+	  
+	  if (pipe (pipe_to_sub) == -1 ||
+	      pipe (pipe_from_sub) == -1)
+	    perror ("pipe"), exit (1);
+	  
+	  seqtab[i].fd = pipe_from_sub[0];
+	  seqtab[i].seq = 0;
+
+	  my_read_channel = g_io_channel_unix_new (pipe_from_sub[0]);
+	  
+	  id = g_new (guint, 1);
+	  *id =
+	    g_io_add_watch (my_read_channel,
+			    G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP,
+			    recv_message,
+			    id);
+	  
+	  nrunning++;
+	  
+#ifdef G_OS_WIN32
+	  cmdline = g_strdup_printf ("%d:%d:%d",
+				     pipe_to_sub[0],
+				     pipe_from_sub[1],
+				     hwnd);
+	  _spawnl (_P_NOWAIT, argv[0], argv[0], "--child", cmdline, NULL);
+#else
+	  cmdline = g_strdup_printf ("%s --child %d:%d &", argv[0],
+				     pipe_to_sub[0], pipe_from_sub[1]);
+	  
+	  system (cmdline);
+#endif
+	  close (pipe_to_sub[0]);
+	  close (pipe_from_sub [1]);
+
+#ifdef G_OS_WIN32
+	  g_get_current_time (&start);
+	  g_io_channel_win32_make_pollfd (my_read_channel, G_IO_IN, &pollfd);
+	  pollresult = g_io_channel_win32_poll (&pollfd, 1, 100);
+	  g_get_current_time (&end);
+	  if (end.tv_usec < start.tv_usec)
+	    end.tv_sec--, end.tv_usec += 1000000;
+	  g_print ("gio-test: had to wait %ld.%03ld s, result:%d\n",
+		   end.tv_sec - start.tv_sec,
+		   (end.tv_usec - start.tv_usec) / 1000,
+		   pollresult);
+#endif
+	}
+      
+      main_loop = g_main_loop_new (NULL, FALSE);
+      
+      g_main_loop_run (main_loop);
+    }
+  else if (argc == 3)
+    {
+      /* Child */
+      
+      int readfd, writefd;
+#ifdef G_OS_WIN32
+      HWND hwnd;
+#endif
+      int i, j;
+      char buf[BUFSIZE];
+      int buflen;
+      GTimeVal tv;
+      int n;
+  
+      g_get_current_time (&tv);
+      
+      sscanf (argv[2], "%d:%d%n", &readfd, &writefd, &n);
+
+#ifdef G_OS_WIN32
+      sscanf (argv[2] + n, ":%d", &hwnd);
+#endif
+      
+      srand (tv.tv_sec ^ (tv.tv_usec / 1000) ^ readfd ^ (writefd << 4));
+  
+      for (i = 0; i < 20 + rand() % 20; i++)
+	{
+	  g_usleep (100 + (rand() % 10) * 5000);
+	  buflen = rand() % BUFSIZE;
+	  for (j = 0; j < buflen; j++)
+	    buf[j] = ' ' + ((buflen + j) % 95);
+#ifdef VERBOSE
+	  g_print ("gio-test: child writing %d+%d bytes to %d\n",
+		   (int)(sizeof(i) + sizeof(buflen)), buflen, writefd);
+#endif
+	  write (writefd, &i, sizeof (i));
+	  write (writefd, &buflen, sizeof (buflen));
+	  write (writefd, buf, buflen);
+
+#ifdef G_OS_WIN32
+	  if (rand() % 100 < 5)
+	    {
+	      int msg = WM_USER + (rand() % 100);
+	      WPARAM wparam = rand ();
+	      LPARAM lparam = rand ();
+	      g_print ("gio-test: child posting message %d,%d,%d to %#x\n",
+		       msg, wparam, lparam, hwnd);
+	      PostMessage (hwnd, msg, wparam, lparam);
+	    }
+#endif
+	}
+#ifdef VERBOSE
+      g_print ("gio-test: child exiting, closing %d\n", writefd);
+#endif
+      close (writefd);
+    }
+  else
+    g_print ("Huh?\n");
+  
+  return 0;
+}
+
diff --git a/tests/gobject/.gitignore b/tests/gobject/.gitignore
new file mode 100644
index 0000000..5781901
--- /dev/null
+++ b/tests/gobject/.gitignore
@@ -0,0 +1,12 @@
+accumulator
+defaultiface
+dynamictype
+gvalue-test
+ifacecheck
+ifaceinherit
+ifaceinit
+ifaceproperties
+override
+paramspec-test
+references
+singleton
diff --git a/tests/gobject/Makefile.am b/tests/gobject/Makefile.am
new file mode 100644
index 0000000..d610366
--- /dev/null
+++ b/tests/gobject/Makefile.am
@@ -0,0 +1,91 @@
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES =					\
+	-I$(top_srcdir)				\
+	-I$(top_srcdir)/glib			\
+	-I$(top_srcdir)/gmodule			\
+	$(GLIB_DEBUG_FLAGS)
+
+libglib = $(top_builddir)/glib/libglib-2.0.la
+libgthread = $(top_builddir)/gthread/libgthread-2.0.la
+libgmodule = $(top_builddir)/gmodule/libgmodule-2.0.la
+libgobject = $(top_builddir)/gobject/libgobject-2.0.la
+
+########################################################################
+
+noinst_LTLIBRARIES = libtestgobject.la
+
+libtestgobject_la_SOURCES =	\
+	testcommon.h		\
+	testmarshal.h		\
+	testmarshal.c		\
+	testmodule.c		\
+	testmodule.h
+
+if CROSS_COMPILING
+  glib_genmarshal=$(GLIB_GENMARSHAL)
+else
+  glib_genmarshal=$(top_builddir)/gobject/glib-genmarshal
+endif
+
+testmarshal.h: stamp-testmarshal.h
+	@true
+stamp-testmarshal.h: @REBUILD@ testmarshal.list $(glib_genmarshal)
+	$(glib_genmarshal) --prefix=test_marshal $(srcdir)/testmarshal.list --header >> xgen-gmh \
+	&& (cmp -s xgen-gmh testmarshal.h 2>/dev/null || cp xgen-gmh testmarshal.h) \
+	&& rm -f xgen-gmh xgen-gmh~ \
+	&& echo timestamp > $@
+testmarshal.c: @REBUILD@ testmarshal.list $(glib_genmarshal)
+	$(glib_genmarshal) --prefix=test_marshal $(srcdir)/testmarshal.list --body >> xgen-gmc \
+	&& cp xgen-gmc testmarshal.c \
+	&& rm -f xgen-gmc xgen-gmc~
+
+BUILT_SOURCES = testmarshal.h testmarshal.c
+CLEANFILES = stamp-testmarshal.h
+
+########################################################################
+
+LDADD = libtestgobject.la $(libgobject) 
+
+test_programs =					\
+	deftype					\
+	gvalue-test				\
+	paramspec-test				\
+	accumulator				\
+	defaultiface				\
+	dynamictype				\
+	ifacecheck				\
+	ifaceinit				\
+	ifaceinherit				\
+	ifaceproperties				\
+	override				\
+	singleton				\
+	references
+
+check_PROGRAMS = $(test_programs)
+
+TESTS = $(test_programs)
+TESTS_ENVIRONMENT = srcdir=$(srcdir) \
+	LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset \
+	MALLOC_CHECK_=2	\
+	MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256))
+
+########################################################################
+
+EXTRA_DIST += 		  \
+	testmarshal.list
+
+BUILT_EXTRA_DIST =				\
+	testmarshal.h				\
+	testmarshal.c
+
+dist-hook: $(BUILT_EXTRA_DIST)
+	files='$(BUILT_EXTRA_DIST)';				\
+	for f in $$files; do					\
+	  if test -f $$f; then d=.; else d=$(srcdir); fi;	\
+	  cp $$d/$$f $(distdir) || exit 1; done
+
+distclean-local:
+	if test $(srcdir) = .; then :; else	\
+	    rm -f $(BUILT_EXTRA_DIST);		\
+	fi
diff --git a/tests/gobject/accumulator.c b/tests/gobject/accumulator.c
new file mode 100644
index 0000000..602ab11
--- /dev/null
+++ b/tests/gobject/accumulator.c
@@ -0,0 +1,227 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestAccumulator"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <string.h>
+
+#include	<glib-object.h>
+
+#include "testmarshal.h"
+#include "testcommon.h"
+
+/* What this test tests is the behavior of signal accumulators
+ * Two accumulators are tested:
+ *
+ * 1: A custom accumulator that appends the returned strings
+ * 2: The standard g_signal_accumulator_true_handled that stops
+ *    emission on TRUE returns.
+ */
+
+/*
+ * TestObject, a parent class for TestObject
+ */
+#define TEST_TYPE_OBJECT          (test_object_get_type ())
+typedef struct _TestObject        TestObject;
+typedef struct _TestObjectClass   TestObjectClass;
+
+struct _TestObject
+{
+  GObject parent_instance;
+};
+struct _TestObjectClass
+{
+  GObjectClass parent_class;
+
+  gchar*   (*test_signal1) (TestObject *tobject,
+			    gint        param);
+  gboolean (*test_signal2) (TestObject *tobject,
+			    gint        param);
+};
+
+static GType test_object_get_type (void);
+
+static gboolean
+test_signal1_accumulator (GSignalInvocationHint *ihint,
+			  GValue                *return_accu,
+			  const GValue          *handler_return,
+			  gpointer               data)
+{
+  const gchar *accu_string = g_value_get_string (return_accu);
+  const gchar *new_string = g_value_get_string (handler_return);
+  gchar *result_string;
+
+  if (accu_string)
+    result_string = g_strconcat (accu_string, new_string, NULL);
+  else if (new_string)
+    result_string = g_strdup (new_string);
+  else
+    result_string = NULL;
+
+  g_value_set_string_take_ownership (return_accu, result_string);
+
+  return TRUE;
+}
+
+gchar*
+test_object_signal1_callback_before (TestObject *tobject,
+				     gint        param,
+				     gpointer    data)
+{
+  return g_strdup ("<before>");
+}
+
+gchar*
+test_object_real_signal1 (TestObject *tobject,
+			  gint        param)
+{
+  return g_strdup ("<default>");
+}
+
+gchar*
+test_object_signal1_callback_after (TestObject *tobject,
+				    gint        param,
+				    gpointer    data)
+{
+  return g_strdup ("<after>");
+}
+
+gboolean
+test_object_signal2_callback_before (TestObject *tobject,
+				     gint        param)
+{
+  switch (param)
+    {
+    case 1: return TRUE;
+    case 2: return FALSE;
+    case 3: return FALSE;
+    case 4: return FALSE;
+    }
+
+  g_assert_not_reached ();
+  return FALSE;
+}
+
+gboolean
+test_object_real_signal2 (TestObject *tobject,
+			  gint        param)
+{
+  switch (param)
+    {
+    case 1: g_assert_not_reached (); return FALSE;
+    case 2: return TRUE;
+    case 3: return FALSE;
+    case 4: return FALSE;
+    }
+  
+  g_assert_not_reached ();
+  return FALSE;
+}
+
+gboolean
+test_object_signal2_callback_after (TestObject *tobject,
+				     gint        param)
+{
+  switch (param)
+    {
+    case 1: g_assert_not_reached (); return FALSE;
+    case 2: g_assert_not_reached (); return FALSE;
+    case 3: return TRUE;
+    case 4: return FALSE;
+    }
+      
+  g_assert_not_reached ();
+  return FALSE;
+}
+
+static void
+test_object_class_init (TestObjectClass *class)
+{
+  class->test_signal1 = test_object_real_signal1;
+  class->test_signal2 = test_object_real_signal2;
+  
+  g_signal_new ("test-signal1",
+		G_OBJECT_CLASS_TYPE (class),
+		G_SIGNAL_RUN_LAST,
+		G_STRUCT_OFFSET (TestObjectClass, test_signal1),
+		test_signal1_accumulator, NULL,
+		test_marshal_STRING__INT,
+		G_TYPE_STRING, 1, G_TYPE_INT);
+  g_signal_new ("test-signal2",
+		G_OBJECT_CLASS_TYPE (class),
+		G_SIGNAL_RUN_LAST,
+		G_STRUCT_OFFSET (TestObjectClass, test_signal2),
+		g_signal_accumulator_true_handled, NULL,
+		test_marshal_BOOLEAN__INT,
+		G_TYPE_BOOLEAN, 1, G_TYPE_INT);
+}
+
+static DEFINE_TYPE(TestObject, test_object,
+		   test_object_class_init, NULL, NULL,
+		   G_TYPE_OBJECT)
+
+int
+main (int   argc,
+      char *argv[])
+{
+  TestObject *object;
+  gchar *string_result;
+  gboolean bool_result;
+	
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  object = g_object_new (TEST_TYPE_OBJECT, NULL);
+
+  g_signal_connect (object, "test-signal1",
+		    G_CALLBACK (test_object_signal1_callback_before), NULL);
+  g_signal_connect_after (object, "test-signal1",
+			  G_CALLBACK (test_object_signal1_callback_after), NULL);
+  
+  g_signal_emit_by_name (object, "test-signal1", 0, &string_result);
+  g_assert (strcmp (string_result, "<before><default><after>") == 0);
+  g_free (string_result);
+
+  g_signal_connect (object, "test-signal2",
+		    G_CALLBACK (test_object_signal2_callback_before), NULL);
+  g_signal_connect_after (object, "test-signal2",
+			  G_CALLBACK (test_object_signal2_callback_after), NULL);
+  
+  bool_result = FALSE;
+  g_signal_emit_by_name (object, "test-signal2", 1, &bool_result);
+  g_assert (bool_result == TRUE);
+  bool_result = FALSE;
+  g_signal_emit_by_name (object, "test-signal2", 2, &bool_result);
+  g_assert (bool_result == TRUE);
+  bool_result = FALSE;
+  g_signal_emit_by_name (object, "test-signal2", 3, &bool_result);
+  g_assert (bool_result == TRUE);
+  bool_result = TRUE;
+  g_signal_emit_by_name (object, "test-signal2", 4, &bool_result);
+  g_assert (bool_result == FALSE);
+
+  return 0;
+}
diff --git a/tests/gobject/defaultiface.c b/tests/gobject/defaultiface.c
new file mode 100644
index 0000000..2ebe890
--- /dev/null
+++ b/tests/gobject/defaultiface.c
@@ -0,0 +1,191 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestDefaultIface"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <glib-object.h>
+
+#include "testcommon.h"
+#include "testmodule.h"
+
+/* This test tests getting the default vtable for an interface
+ * and the initialization and finalization of such default
+ * interfaces.
+ *
+ * We test this both for static and for dynamic interfaces.
+ */
+
+/**********************************************************************
+ * Static interface tests
+ **********************************************************************/
+
+typedef struct _TestStaticIfaceClass TestStaticIfaceClass;
+
+struct _TestStaticIfaceClass
+{
+  GTypeInterface base_iface;
+  guint val;
+};
+
+#define TEST_TYPE_STATIC_IFACE (test_static_iface_get_type ())
+
+static void
+test_static_iface_default_init (TestStaticIfaceClass *iface)
+{
+  iface->val = 42;
+}
+
+DEFINE_IFACE (TestStaticIface, test_static_iface,
+	      NULL, test_static_iface_default_init)
+
+static void
+test_static_iface (void)
+{
+  TestStaticIfaceClass *static_iface;
+
+  /* Not loaded until we call ref for the first time */
+  static_iface = g_type_default_interface_peek (TEST_TYPE_STATIC_IFACE);
+  g_assert (static_iface == NULL);
+
+  /* Ref loads */
+  static_iface = g_type_default_interface_ref (TEST_TYPE_STATIC_IFACE);
+  g_assert (static_iface && static_iface->val == 42);
+
+  /* Peek then works */
+  static_iface = g_type_default_interface_peek (TEST_TYPE_STATIC_IFACE);
+  g_assert (static_iface && static_iface->val == 42);
+  
+  /* Unref does nothing */
+  g_type_default_interface_unref (static_iface);
+  
+  /* And peek still works */
+  static_iface = g_type_default_interface_peek (TEST_TYPE_STATIC_IFACE);
+  g_assert (static_iface && static_iface->val == 42);
+}
+
+/**********************************************************************
+ * Dynamic interface tests
+ **********************************************************************/
+
+typedef struct _TestDynamicIfaceClass TestDynamicIfaceClass;
+
+struct _TestDynamicIfaceClass
+{
+  GTypeInterface base_iface;
+  guint val;
+};
+
+static GType test_dynamic_iface_type;
+static gboolean dynamic_iface_init = FALSE;
+
+#define TEST_TYPE_DYNAMIC_IFACE (test_dynamic_iface_type)
+
+static void
+test_dynamic_iface_default_init (TestStaticIfaceClass *iface)
+{
+  dynamic_iface_init = TRUE;
+  iface->val = 42;
+}
+
+static void
+test_dynamic_iface_default_finalize (TestStaticIfaceClass *iface)
+{
+  dynamic_iface_init = FALSE;
+}
+
+static void
+test_dynamic_iface_register (GTypeModule *module)
+{
+  static const GTypeInfo iface_info =			
+    {								
+      sizeof (TestDynamicIfaceClass),
+      (GBaseInitFunc)	   NULL,
+      (GBaseFinalizeFunc)  NULL,				
+      (GClassInitFunc)     test_dynamic_iface_default_init,
+      (GClassFinalizeFunc) test_dynamic_iface_default_finalize
+    };							
+
+  test_dynamic_iface_type = g_type_module_register_type (module, G_TYPE_INTERFACE,
+							 "TestDynamicIface", &iface_info, 0);
+}
+
+static void
+module_register (GTypeModule *module)
+{
+  test_dynamic_iface_register (module);
+}
+
+static void
+test_dynamic_iface (void)
+{
+  GTypeModule *module;
+  TestDynamicIfaceClass *dynamic_iface;
+
+  module = test_module_new (module_register);
+
+  /* Not loaded until we call ref for the first time */
+  dynamic_iface = g_type_default_interface_peek (TEST_TYPE_DYNAMIC_IFACE);
+  g_assert (dynamic_iface == NULL);
+
+  /* Ref loads */
+  dynamic_iface = g_type_default_interface_ref (TEST_TYPE_DYNAMIC_IFACE);
+  g_assert (dynamic_iface_init);
+  g_assert (dynamic_iface && dynamic_iface->val == 42);
+
+  /* Peek then works */
+  dynamic_iface = g_type_default_interface_peek (TEST_TYPE_DYNAMIC_IFACE);
+  g_assert (dynamic_iface && dynamic_iface->val == 42);
+  
+  /* Unref causes finalize */
+  g_type_default_interface_unref (dynamic_iface);
+  g_assert (!dynamic_iface_init);
+
+  /* Peek returns NULL */
+  dynamic_iface = g_type_default_interface_peek (TEST_TYPE_DYNAMIC_IFACE);
+  g_assert (dynamic_iface == NULL);
+  
+  /* Ref reloads */
+  dynamic_iface = g_type_default_interface_ref (TEST_TYPE_DYNAMIC_IFACE);
+  g_assert (dynamic_iface_init);
+  g_assert (dynamic_iface && dynamic_iface->val == 42);
+
+  /* And Unref causes finalize once more*/
+  g_type_default_interface_unref (dynamic_iface);
+  g_assert (!dynamic_iface_init);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  test_static_iface ();
+  test_dynamic_iface ();
+  
+  return 0;
+}
diff --git a/tests/gobject/deftype.c b/tests/gobject/deftype.c
new file mode 100644
index 0000000..924e7ad
--- /dev/null
+++ b/tests/gobject/deftype.c
@@ -0,0 +1,59 @@
+/* deftype.c
+ * Copyright (C) 2006 Behdad Esfahbod
+ *
+ * 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 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.
+ */
+#include <glib-object.h>
+
+/* see http://bugzilla.gnome.org/show_bug.cgi?id=337128 for the purpose of this test */
+
+#define MY_G_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init)       { \
+  static const GInterfaceInfo g_implement_interface_info = { \
+      (GInterfaceInitFunc) iface_init, \
+      NULL, \
+      NULL \
+    }; \
+  g_type_add_interface_static (g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
+}
+
+#define MY_DEFINE_TYPE(TN, t_n, T_P) \
+	G_DEFINE_TYPE_WITH_CODE (TN, t_n, T_P, \
+				 MY_G_IMPLEMENT_INTERFACE (G_TYPE_INTERFACE, NULL))
+
+typedef struct _TypeName {
+  GObject parent_instance;
+  const char *name;
+} TypeName;
+
+typedef struct _TypeNameClass {
+  GObjectClass parent_parent;
+} TypeNameClass;
+
+MY_DEFINE_TYPE (TypeName, type_name, G_TYPE_OBJECT)
+
+static void     type_name_init              (TypeName      *self)
+{
+}
+
+static void     type_name_class_init        (TypeNameClass *klass)
+{
+}
+
+int
+main (void)
+{
+  return 0;
+}
diff --git a/tests/gobject/dynamictype.c b/tests/gobject/dynamictype.c
new file mode 100644
index 0000000..2a5415e
--- /dev/null
+++ b/tests/gobject/dynamictype.c
@@ -0,0 +1,130 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestDynamicType"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <glib-object.h>
+
+#include "testcommon.h"
+#include "testmodule.h"
+
+/* This test tests the macros for defining dynamic types.
+ */
+
+static gboolean loaded = FALSE;
+
+#define DYNAMIC_OBJECT_TYPE (dynamic_object_get_type ())
+
+typedef GObject DynamicObject;
+typedef struct _DynamicObjectClass DynamicObjectClass;
+
+struct _DynamicObjectClass
+{
+  GObjectClass parent_class;
+  guint val;
+};
+
+G_DEFINE_DYNAMIC_TYPE(DynamicObject, dynamic_object, G_TYPE_OBJECT);
+
+static void 
+dynamic_object_class_init (DynamicObjectClass *class)
+{
+  class->val = 42;
+  loaded = TRUE;
+}
+
+static void
+dynamic_object_class_finalize (DynamicObjectClass *class)
+{
+  loaded = FALSE;
+}
+
+static void 
+dynamic_object_init (DynamicObject *dynamic_object)
+{
+}
+
+
+static void
+module_register (GTypeModule *module)
+{
+  dynamic_object_register_type (module);
+}
+
+static void
+test_dynamic_type (void)
+{
+  GTypeModule *module;
+  DynamicObjectClass *class;
+
+  module = test_module_new (module_register);
+
+  /* Not loaded until we call ref for the first time */
+  class = g_type_class_peek (DYNAMIC_OBJECT_TYPE);
+  g_assert (class == NULL);
+  g_assert (!loaded);
+
+  /* Ref loads */
+  class = g_type_class_ref (DYNAMIC_OBJECT_TYPE);
+  g_assert (class && class->val == 42);
+  g_assert (loaded);
+
+  /* Peek then works */
+  class = g_type_class_peek (DYNAMIC_OBJECT_TYPE);
+  g_assert (class && class->val == 42);
+  g_assert (loaded);
+  
+  /* Unref causes finalize */
+  g_type_class_unref (class);
+
+  /* Peek returns NULL */
+  class = g_type_class_peek (DYNAMIC_OBJECT_TYPE);
+  g_assert (!class);
+  g_assert (!loaded);
+  
+  /* Ref reloads */
+  class = g_type_class_ref (DYNAMIC_OBJECT_TYPE);
+  g_assert (class && class->val == 42);
+  g_assert (loaded);
+
+  /* And Unref causes finalize once more*/
+  g_type_class_unref (class);
+  class = g_type_class_peek (DYNAMIC_OBJECT_TYPE);
+  g_assert (!class);
+  g_assert (!loaded);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  test_dynamic_type ();
+  
+  return 0;
+}
diff --git a/tests/gobject/gvalue-test.c b/tests/gobject/gvalue-test.c
new file mode 100644
index 0000000..2d721e0
--- /dev/null
+++ b/tests/gobject/gvalue-test.c
@@ -0,0 +1,374 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <string.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include "gobject/gvaluecollector.h"
+
+static void
+test_enum_transformation (void)
+{ 
+  GType type; 
+  GValue orig = { 0, };
+  GValue xform = { 0, }; 
+  GEnumValue values[] = { {0,"0","0"}, {1,"1","1"}}; 
+  
+ type = g_enum_register_static ("TestEnum", values); 
+  
+ g_value_init (&orig, type); 
+ g_value_set_enum (&orig, 1); 
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_CHAR); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_char (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_UCHAR); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_uchar (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_INT); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_int (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_UINT); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_uint (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_LONG); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_long (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_ULONG); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_ulong (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_INT64); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_int64 (&xform) == 1);
+
+ memset (&xform, 0, sizeof (GValue));
+ g_value_init (&xform, G_TYPE_UINT64); 
+ g_value_transform (&orig, &xform); 
+ g_assert (g_value_get_uint64 (&xform) == 1);
+}
+
+
+static void
+test_gtype_value (void)
+{
+  GType type;
+  GValue value = { 0, };
+  GValue copy = { 0, };
+
+  g_value_init (&value, G_TYPE_GTYPE);
+
+  g_value_set_gtype (&value, G_TYPE_BOXED);
+  type = g_value_get_gtype (&value);
+  g_assert (type == G_TYPE_BOXED);
+
+  g_value_init (&copy, G_TYPE_GTYPE);
+  g_value_copy (&value, &copy);
+  type = g_value_get_gtype (&copy);
+  g_assert (type == G_TYPE_BOXED);
+}
+
+static gchar *
+collect (GValue *value, ...)
+{
+  gchar *error;
+  va_list var_args;
+
+  error = NULL;
+
+  va_start (var_args, value);
+  G_VALUE_COLLECT (value, var_args, 0, &error);
+  va_end (var_args);
+
+  return error;
+}	 
+
+static gchar *
+lcopy (GValue *value, ...)
+{
+  gchar *error;
+  va_list var_args;
+
+  error = NULL;
+
+  va_start (var_args, value);
+  G_VALUE_LCOPY (value, var_args, 0, &error);
+  va_end (var_args);
+
+  return error;
+}	 
+
+static void
+test_collection (void)
+{
+  GValue value = { 0, };
+  gchar *error;
+  
+  g_value_init (&value, G_TYPE_CHAR);
+  error = collect (&value, 'c');
+  g_assert (error == NULL);
+  g_assert (g_value_get_char (&value) == 'c');
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_UCHAR);
+  error = collect (&value, 129);
+  g_assert (error == NULL);
+  g_assert (g_value_get_uchar (&value) == 129);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_BOOLEAN);
+  error = collect (&value, TRUE);
+  g_assert (error == NULL);
+  g_assert (g_value_get_boolean (&value) == TRUE);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_INT);
+  error = collect (&value, G_MAXINT);
+  g_assert (error == NULL);
+  g_assert (g_value_get_int (&value) == G_MAXINT);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_UINT);
+  error = collect (&value, G_MAXUINT);
+  g_assert (error == NULL);
+  g_assert (g_value_get_uint (&value) == G_MAXUINT);
+  
+  g_value_unset (&value);  
+  g_value_init (&value, G_TYPE_LONG);
+  error = collect (&value, G_MAXLONG);
+  g_assert (error == NULL);
+  g_assert (g_value_get_long (&value) == G_MAXLONG);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_ULONG);
+  error = collect (&value, G_MAXULONG);
+  g_assert (error == NULL);
+  g_assert (g_value_get_ulong (&value) == G_MAXULONG);
+  
+  g_value_unset (&value);  
+  g_value_init (&value, G_TYPE_INT64);
+  error = collect (&value, G_MAXINT64);
+  g_assert (error == NULL);
+  g_assert (g_value_get_int64 (&value) == G_MAXINT64);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_UINT64);
+  error = collect (&value, G_MAXUINT64);
+  g_assert (error == NULL);
+  g_assert (g_value_get_uint64 (&value) == G_MAXUINT64);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_FLOAT);
+  error = collect (&value, G_MAXFLOAT);
+  g_assert (error == NULL);
+  g_assert (g_value_get_float (&value) == G_MAXFLOAT);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_DOUBLE);
+  error = collect (&value, G_MAXDOUBLE);
+  g_assert (error == NULL);
+  g_assert (g_value_get_double (&value) == G_MAXDOUBLE);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_STRING);
+  error = collect (&value, "string ?");
+  g_assert (error == NULL);
+  g_assert (strcmp (g_value_get_string (&value), "string ?") == 0);
+  
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_GTYPE);
+  error = collect (&value, G_TYPE_BOXED);
+  g_assert (error == NULL);
+  g_assert (g_value_get_gtype (&value) == G_TYPE_BOXED);
+}
+
+static void
+test_copying (void)
+{
+  GValue value = { 0, };
+  gchar *error;
+
+  {
+    gchar c = 0;
+
+    g_value_init (&value, G_TYPE_CHAR);
+    g_value_set_char (&value, 'c');
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == 'c');
+  }  
+
+  {
+    guchar c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UCHAR);
+    g_value_set_uchar (&value, 129);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == 129);
+  }  
+
+  {
+    gint c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_INT);
+    g_value_set_int (&value, G_MAXINT);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXINT);
+  }  
+
+  {
+    guint c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT);
+    g_value_set_uint (&value, G_MAXUINT);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXUINT);
+  }  
+
+  {
+    glong c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_LONG);
+    g_value_set_long (&value, G_MAXLONG);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXLONG);
+  }  
+
+  {
+    gulong c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_ULONG);
+    g_value_set_ulong (&value, G_MAXULONG);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXULONG);
+  }  
+
+  {
+    gint64 c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_INT64);
+    g_value_set_int64 (&value, G_MAXINT64);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXINT64);
+  }  
+
+  {
+    guint64 c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, G_MAXUINT64);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXUINT64);
+  }  
+
+  {
+    gfloat c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_FLOAT);
+    g_value_set_float (&value, G_MAXFLOAT);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXFLOAT);
+  }  
+
+  {
+    gdouble c = 0;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_DOUBLE);
+    g_value_set_double (&value, G_MAXDOUBLE);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_MAXDOUBLE);
+  }  
+
+  {
+    gchar *c = NULL;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_STRING);
+    g_value_set_string (&value, "string ?");
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (strcmp (c, "string ?") == 0);
+  }  
+
+  {
+    GType c = G_TYPE_NONE;
+
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_GTYPE);
+    g_value_set_gtype (&value, G_TYPE_BOXED);
+    error = lcopy (&value, &c);
+    g_assert (error == NULL);
+    g_assert (c == G_TYPE_BOXED);
+  }  
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  g_type_init (); 
+  
+  test_enum_transformation ();
+  test_gtype_value ();
+  test_collection ();
+  test_copying ();
+
+  return 0;
+}
diff --git a/tests/gobject/ifacecheck.c b/tests/gobject/ifacecheck.c
new file mode 100644
index 0000000..f57189a
--- /dev/null
+++ b/tests/gobject/ifacecheck.c
@@ -0,0 +1,167 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestIfaceCheck"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <string.h>
+
+#include <glib-object.h>
+
+#include "testcommon.h"
+
+/* This test tests g_type_add_interface_check_func(), which allows
+ * installing a post-initialization check function.
+ */
+
+#define TEST_TYPE_IFACE           (test_iface_get_type ())
+#define TEST_IFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE, TestIfaceClass))
+typedef struct _TestIfaceClass  TestIfaceClass;
+
+struct _TestIfaceClass
+{
+  GTypeInterface base_iface;
+  GString *history;
+};
+
+static void
+test_iface_base_init (TestIfaceClass *iface)
+{
+  iface->history = g_string_new (iface->history ? iface->history->str : NULL);
+}
+
+static DEFINE_IFACE(TestIface, test_iface, test_iface_base_init, NULL)
+
+/*
+ * TestObject1
+ */
+#define TEST_TYPE_OBJECT1         (test_object1_get_type ())
+typedef struct _GObject           TestObject1;
+typedef struct _GObjectClass      TestObject1Class;
+
+static DEFINE_TYPE_FULL (TestObject1, test_object1,
+			 NULL, NULL, NULL,
+			 G_TYPE_OBJECT,
+			 INTERFACE (NULL, TEST_TYPE_IFACE))
+     
+/*
+ * TestObject2
+ */
+#define TEST_TYPE_OBJECT2         (test_object2_get_type ())
+typedef struct _GObject           TestObject2;
+typedef struct _GObjectClass      TestObject2Class;
+
+static DEFINE_TYPE_FULL (TestObject2, test_object2,
+			 NULL, NULL, NULL,
+			 G_TYPE_OBJECT,
+			 INTERFACE (NULL, TEST_TYPE_IFACE))
+     
+/*
+ * TestObject3
+ */
+#define TEST_TYPE_OBJECT3         (test_object3_get_type ())
+typedef struct _GObject           TestObject3;
+typedef struct _GObjectClass      TestObject3Class;
+
+static DEFINE_TYPE_FULL (TestObject3, test_object3,
+			 NULL, NULL, NULL,
+			 G_TYPE_OBJECT,
+			 INTERFACE (NULL, TEST_TYPE_IFACE))
+     
+/*
+ * TestObject4
+ */
+#define TEST_TYPE_OBJECT4         (test_object4_get_type ())
+typedef struct _GObject           TestObject4;
+typedef struct _GObjectClass      TestObject4Class;
+
+
+static DEFINE_TYPE_FULL (TestObject4, test_object4,
+			 NULL, NULL, NULL,
+			 G_TYPE_OBJECT, {})
+
+static void
+check_func (gpointer check_data,
+	    gpointer g_iface)
+{
+  TestIfaceClass *iface = g_iface;
+
+  g_string_append (iface->history, check_data);
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  TestIfaceClass *iface;
+  GObject *object;
+  char *string1 = "A";
+  char *string2 = "B";
+
+  g_type_init ();
+  
+  /* Basic check of interfaces added before class_init time
+   */
+  g_type_add_interface_check (string1, check_func);
+
+  object = g_object_new (TEST_TYPE_OBJECT1, NULL);
+  iface = TEST_IFACE_GET_CLASS (object);
+    g_assert (strcmp (iface->history->str, "A") == 0);
+  g_object_unref (object);
+
+  /* Add a second check function
+   */
+  g_type_add_interface_check (string2, check_func);
+
+  object = g_object_new (TEST_TYPE_OBJECT2, NULL);
+  iface = TEST_IFACE_GET_CLASS (object);
+  g_assert (strcmp (iface->history->str, "AB") == 0);
+  g_object_unref (object);
+
+  /* Remove the first check function
+   */
+  g_type_remove_interface_check (string1, check_func);
+
+  object = g_object_new (TEST_TYPE_OBJECT3, NULL);
+  iface = TEST_IFACE_GET_CLASS (object);
+  g_assert (strcmp (iface->history->str, "B") == 0);
+  g_object_unref (object);
+
+  /* Test interfaces added after class_init time
+   */
+  g_type_class_ref (TEST_TYPE_OBJECT4);
+  {
+    static GInterfaceInfo const iface = {
+      NULL, NULL, NULL
+    };
+    
+    g_type_add_interface_static (TEST_TYPE_OBJECT4, TEST_TYPE_IFACE, &iface);
+  }
+  
+  object = g_object_new (TEST_TYPE_OBJECT4, NULL);
+  iface = TEST_IFACE_GET_CLASS (object);
+  g_assert (strcmp (iface->history->str, "B") == 0);
+  g_object_unref (object);
+    
+  return 0;
+}
diff --git a/tests/gobject/ifaceinherit.c b/tests/gobject/ifaceinherit.c
new file mode 100644
index 0000000..f9fe8be
--- /dev/null
+++ b/tests/gobject/ifaceinherit.c
@@ -0,0 +1,227 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestIfaceInherit"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <glib-object.h>
+
+#include "testcommon.h"
+#include "testmodule.h"
+
+/* This test tests inheritance of interface. We two object
+ * class BaseObject and DerivedObject we add an interface
+ * to BaseObject:
+ *
+ * I1) Before DerivedObject is registered
+ * I2) After DerivedObject is registered, but before
+ *     DerivedObject is class initialized
+ * I3) During DerivedObject's class_init
+ * I4) After DerivedObject's class init
+ *
+ * We also do some tests of overriding.
+ * 
+ * I5) We add an interface to BaseObject, then add the same
+ *     interface to DerivedObject. (Note that this is only legal
+ *     before DerivedObject's class_init; the results of
+ *     g_type_interface_peek() are not allowed to change from one
+ *     non-NULL vtable to another non-NULL vtable)
+ */
+   
+/*
+ * BaseObject, a parent class for DerivedObject
+ */
+#define BASE_TYPE_OBJECT          (base_object_get_type ())
+typedef struct _BaseObject        BaseObject;
+typedef struct _BaseObjectClass   BaseObjectClass;
+
+struct _BaseObject
+{
+  GObject parent_instance;
+};
+struct _BaseObjectClass
+{
+  GObjectClass parent_class;
+};
+
+static GType base_object_get_type ();
+static GType derived_object_get_type ();
+
+/*
+ * DerivedObject, the child class of DerivedObject
+ */
+#define DERIVED_TYPE_OBJECT          (derived_object_get_type ())
+typedef struct _DerivedObject        DerivedObject;
+typedef struct _DerivedObjectClass   DerivedObjectClass;
+
+struct _DerivedObject
+{
+  BaseObject parent_instance;
+};
+struct _DerivedObjectClass
+{
+  BaseObjectClass parent_class;
+};
+
+/*
+ * The interfaces
+ */
+typedef struct _TestIfaceClass TestIfaceClass;
+typedef struct _TestIfaceClass TestIface1Class;
+typedef struct _TestIfaceClass TestIface2Class;
+typedef struct _TestIfaceClass TestIface3Class;
+typedef struct _TestIfaceClass TestIface4Class;
+typedef struct _TestIfaceClass TestIface5Class;
+
+struct _TestIfaceClass
+{
+  GTypeInterface base_iface;
+  guint val;
+};
+
+#define TEST_TYPE_IFACE1 (test_iface1_get_type ())
+#define TEST_TYPE_IFACE2 (test_iface2_get_type ())
+#define TEST_TYPE_IFACE3 (test_iface3_get_type ())
+#define TEST_TYPE_IFACE4 (test_iface4_get_type ())
+#define TEST_TYPE_IFACE5 (test_iface5_get_type ())
+
+static DEFINE_IFACE (TestIface1, test_iface1,  NULL, NULL)
+static DEFINE_IFACE (TestIface2, test_iface2,  NULL, NULL)
+static DEFINE_IFACE (TestIface3, test_iface3,  NULL, NULL)
+static DEFINE_IFACE (TestIface4, test_iface4,  NULL, NULL)
+static DEFINE_IFACE (TestIface5, test_iface5,  NULL, NULL)
+
+static void
+add_interface (GType              object_type,
+	       GType              iface_type,
+	       GInterfaceInitFunc init_func)
+{
+  GInterfaceInfo iface_info = {	NULL, NULL, NULL };
+
+  iface_info.interface_init = init_func;
+								
+  g_type_add_interface_static (object_type, iface_type, &iface_info);
+}
+
+static void
+init_base_interface (TestIfaceClass *iface)
+{
+  iface->val = 21;
+}
+
+static void
+add_base_interface (GType object_type,
+		    GType iface_type)
+{
+  add_interface (object_type, iface_type,
+		 (GInterfaceInitFunc)init_base_interface);
+}
+
+static gboolean
+interface_is_base (GType object_type,
+		   GType iface_type)
+{
+  gpointer g_class = g_type_class_peek (object_type);
+  TestIfaceClass *iface = g_type_interface_peek (g_class, iface_type);
+  return iface && iface->val == 21;
+}
+
+static void
+init_derived_interface (TestIfaceClass *iface)
+{
+  iface->val = 42;
+}
+
+static void
+add_derived_interface (GType object_type,
+		       GType iface_type)
+{
+  add_interface (object_type, iface_type,
+		 (GInterfaceInitFunc)init_derived_interface);
+}
+
+static gboolean
+interface_is_derived (GType object_type,
+		      GType iface_type)
+{
+  gpointer g_class = g_type_class_peek (object_type);
+  TestIfaceClass *iface = g_type_interface_peek (g_class, iface_type);
+  return iface && iface->val == 42;
+}
+
+static void
+derived_object_class_init (BaseObjectClass *class)
+{
+  add_base_interface (BASE_TYPE_OBJECT, TEST_TYPE_IFACE3);
+}
+
+static DEFINE_TYPE(BaseObject, base_object,
+		   NULL, NULL, NULL,
+		   G_TYPE_OBJECT)
+static DEFINE_TYPE(DerivedObject, derived_object,
+		   derived_object_class_init, NULL, NULL,
+		   BASE_TYPE_OBJECT)
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  /* Register BaseObject */
+  BASE_TYPE_OBJECT;
+  
+  add_base_interface (BASE_TYPE_OBJECT, TEST_TYPE_IFACE5);
+
+  /* Class init BaseObject */
+  g_type_class_ref (BASE_TYPE_OBJECT);
+  
+  add_base_interface (BASE_TYPE_OBJECT, TEST_TYPE_IFACE1);
+
+  /* Register DerivedObject */
+  DERIVED_TYPE_OBJECT;
+
+  add_base_interface (BASE_TYPE_OBJECT, TEST_TYPE_IFACE2);
+  add_derived_interface (DERIVED_TYPE_OBJECT, TEST_TYPE_IFACE5);
+
+  /* Class init DerivedObject */
+  g_type_class_ref (DERIVED_TYPE_OBJECT);
+  
+  add_base_interface (BASE_TYPE_OBJECT, TEST_TYPE_IFACE4);
+
+  /* Check that all the non-overridden interfaces were properly inherited
+   */
+  g_assert (interface_is_base (DERIVED_TYPE_OBJECT, TEST_TYPE_IFACE1));
+  g_assert (interface_is_base (DERIVED_TYPE_OBJECT, TEST_TYPE_IFACE2));
+  g_assert (interface_is_base (DERIVED_TYPE_OBJECT, TEST_TYPE_IFACE3));
+  g_assert (interface_is_base (DERIVED_TYPE_OBJECT, TEST_TYPE_IFACE4));
+
+  /* Check that all the overridden interfaces were properly overridden
+   */
+  g_assert (interface_is_derived (DERIVED_TYPE_OBJECT, TEST_TYPE_IFACE5));
+
+  return 0;
+}
diff --git a/tests/gobject/ifaceinit.c b/tests/gobject/ifaceinit.c
new file mode 100644
index 0000000..eaa6d35
--- /dev/null
+++ b/tests/gobject/ifaceinit.c
@@ -0,0 +1,422 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestIfaceInit"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <glib-object.h>
+
+#include "testcommon.h"
+
+/* What this test tests is the ability to add interfaces dynamically; in
+ * particular adding interfaces to a class while that class is being
+ * initialized.
+ *
+ * The test defines 5 interfaces:
+ * 
+ * - TestIface1 is added before the class is initialized
+ * - TestIface2 is added in base_object_base_init()
+ * - TestIface3 is added in test_iface1_base_init()
+ * - TestIface4 is added in test_object_class_init()
+ * - TestIface5 is added in test_object_test_iface1_init()
+ * - TestIface6 is added after the class is initialized
+ */
+
+/* All 6 interfaces actually share the same class structure, though
+ * we use separate typedefs
+ */
+typedef struct _TestIfaceClass TestIfaceClass;
+
+struct _TestIfaceClass
+{
+  GTypeInterface base_iface;
+  guint val;
+  guint base_val;
+  guint default_val;
+};
+
+#define TEST_TYPE_IFACE1           (test_iface1_get_type ())
+#define TEST_IFACE1_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE1, TestIface1Class))
+typedef struct _TestIface1      TestIface1;
+typedef struct _TestIfaceClass  TestIface1Class;
+
+static void test_iface1_base_init    (TestIface1Class *iface);
+static void test_iface1_default_init (TestIface1Class *iface, gpointer class_data);
+
+static DEFINE_IFACE(TestIface1, test_iface1, test_iface1_base_init, test_iface1_default_init)
+
+#define TEST_TYPE_IFACE2           (test_iface2_get_type ())
+#define TEST_IFACE2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE2, TestIface2Class))
+typedef struct _TestIface2      TestIface2;
+typedef struct _TestIfaceClass  TestIface2Class;
+
+static void test_iface2_base_init (TestIface2Class *iface);
+
+static DEFINE_IFACE(TestIface2, test_iface2, test_iface2_base_init, NULL)
+
+#define TEST_TYPE_IFACE3           (test_iface3_get_type ())
+#define TEST_IFACE3_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE3, TestIface3Class))
+typedef struct _TestIface3      TestIface3;
+typedef struct _TestIfaceClass  TestIface3Class;
+
+static void  test_iface3_base_init (TestIface3Class *iface);
+
+static DEFINE_IFACE(TestIface3, test_iface3, test_iface3_base_init, NULL)
+
+#define TEST_TYPE_IFACE4           (test_iface4_get_type ())
+#define TEST_IFACE4_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE4, TestIface4Class))
+typedef struct _TestIface4      TestIface4;
+typedef struct _TestIfaceClass  TestIface4Class;
+
+static void  test_iface4_base_init (TestIface4Class *iface);
+
+static DEFINE_IFACE(TestIface4, test_iface4, test_iface4_base_init, NULL)
+
+#define TEST_TYPE_IFACE5           (test_iface5_get_type ())
+#define TEST_IFACE5_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE5, TestIface5Class))
+typedef struct _TestIface5      TestIface5;
+typedef struct _TestIfaceClass  TestIface5Class;
+
+static void  test_iface5_base_init (TestIface5Class *iface);
+
+static DEFINE_IFACE(TestIface5, test_iface5, test_iface5_base_init, NULL)
+
+#define TEST_TYPE_IFACE6           (test_iface6_get_type ())
+#define TEST_IFACE6_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE6, TestIface6Class))
+typedef struct _TestIface6      TestIface6;
+typedef struct _TestIfaceClass  TestIface6Class;
+
+static void  test_iface6_base_init (TestIface6Class *iface);
+
+static DEFINE_IFACE(TestIface6, test_iface6, test_iface6_base_init, NULL)
+
+/*
+ * BaseObject, a parent class for TestObject
+ */
+#define BASE_TYPE_OBJECT          (base_object_get_type ())
+typedef struct _BaseObject        BaseObject;
+typedef struct _BaseObjectClass   BaseObjectClass;
+
+struct _BaseObject
+{
+  GObject parent_instance;
+};
+struct _BaseObjectClass
+{
+  GObjectClass parent_class;
+};
+
+/*
+ * TestObject, a parent class for TestObject
+ */
+#define TEST_TYPE_OBJECT          (test_object_get_type ())
+typedef struct _TestObject        TestObject;
+typedef struct _TestObjectClass   TestObjectClass;
+
+struct _TestObject
+{
+  BaseObject parent_instance;
+};
+struct _TestObjectClass
+{
+  BaseObjectClass parent_class;
+};
+
+#define TEST_CALLED_ONCE() G_STMT_START { \
+  static gboolean called = 0;           \
+  g_assert (!called);                   \
+  called = TRUE;                        \
+} G_STMT_END
+
+#define CHECK_IFACE_TWICE(iface) G_STMT_START {                                 \
+  static guint n_calls = 0;                                                     \
+  n_calls++;                                                                    \
+  g_assert (n_calls <= 2);                                                      \
+  g_assert (G_TYPE_IS_INTERFACE (((GTypeInterface*) iface)->g_type));           \
+  if (n_calls == 1)                                                             \
+    g_assert (((GTypeInterface*) iface)->g_instance_type == 0);                 \
+  else                                                                          \
+    g_assert (G_TYPE_IS_OBJECT (((GTypeInterface*) iface)->g_instance_type));   \
+} G_STMT_END
+
+#define ADD_IFACE(n)  G_STMT_START {				\
+  static GInterfaceInfo iface_info = {				\
+    (GInterfaceInitFunc)test_object_test_iface##n##_init,	\
+    NULL, NULL };						\
+								\
+  g_type_add_interface_static (TEST_TYPE_OBJECT,		\
+			       test_iface##n##_get_type (),	\
+			       &iface_info);			\
+								\
+} G_STMT_END
+
+static gboolean base1, base2, base3, base4, base5, base6;
+static gboolean iface1, iface2, iface3, iface4, iface5, iface6;
+
+static void test_object_test_iface1_init (TestIface1Class *iface);
+static void test_object_test_iface2_init (TestIface1Class *iface);
+static void test_object_test_iface3_init (TestIface3Class *iface);
+static void test_object_test_iface4_init (TestIface4Class *iface);
+static void test_object_test_iface5_init (TestIface5Class *iface);
+static void test_object_test_iface6_init (TestIface6Class *iface);
+
+static GType test_object_get_type (void);
+
+static void
+test_object_test_iface1_init (TestIface1Class *iface)
+{
+  TEST_CALLED_ONCE();
+
+  g_assert (iface->default_val == 0x111111);
+
+  iface->val = 0x10001;
+
+  ADD_IFACE(5);
+
+  iface1 = TRUE;
+}
+
+static void
+test_object_test_iface2_init (TestIface2Class *iface)
+{
+  TEST_CALLED_ONCE();
+  
+  iface->val = 0x20002;
+  
+  iface2 = TRUE;
+}
+
+static void
+test_object_test_iface3_init (TestIface3Class *iface)
+{
+  TEST_CALLED_ONCE();
+  
+  iface->val = 0x30003;
+  
+  iface3 = TRUE;
+}
+
+static void
+test_object_test_iface4_init (TestIface4Class *iface)
+{
+  TEST_CALLED_ONCE();
+
+  iface->val = 0x40004;
+  
+  iface4 = TRUE;
+}
+
+static void
+test_object_test_iface5_init (TestIface5Class *iface)
+{
+  TEST_CALLED_ONCE();
+
+  iface->val = 0x50005;
+  
+  iface5 = TRUE;
+}
+
+static void
+test_object_test_iface6_init (TestIface6Class *iface)
+{
+  TEST_CALLED_ONCE();
+
+  iface->val = 0x60006;
+  
+  iface6 = TRUE;
+}
+
+static void
+test_iface1_default_init (TestIface1Class *iface,
+                          gpointer         class_data)
+{
+  TEST_CALLED_ONCE();
+  g_assert (iface->base_iface.g_type == TEST_TYPE_IFACE1);
+  g_assert (iface->base_iface.g_instance_type == 0);
+  g_assert (iface->base_val == 0x110011);
+  g_assert (iface->val == 0);
+  g_assert (iface->default_val == 0);
+  iface->default_val = 0x111111;
+}
+
+static void
+test_iface1_base_init (TestIface1Class *iface)
+{
+  static guint n_calls = 0;
+  n_calls++;
+  g_assert (n_calls <= 2);
+
+  if (n_calls == 1)
+    {
+      iface->base_val = 0x110011;
+      g_assert (iface->default_val == 0);
+    }
+  else
+    {
+      g_assert (iface->base_val == 0x110011);
+      g_assert (iface->default_val == 0x111111);
+    }
+
+  if (n_calls == 1)
+    ADD_IFACE(3);
+  
+  base1 = TRUE;
+}
+
+static void
+test_iface2_base_init (TestIface2Class *iface)
+{
+  CHECK_IFACE_TWICE (iface);
+
+  iface->base_val = 0x220022;
+  
+  base2 = TRUE;
+}
+
+static void
+test_iface3_base_init (TestIface3Class *iface)
+{
+  CHECK_IFACE_TWICE (iface);
+
+  iface->base_val = 0x330033;
+  
+  base3 = TRUE;
+}
+
+static void
+test_iface4_base_init (TestIface4Class *iface)
+{
+  CHECK_IFACE_TWICE (iface);
+
+  iface->base_val = 0x440044;
+
+  base4 = TRUE;
+}
+
+static void
+test_iface5_base_init (TestIface5Class *iface)
+{
+  CHECK_IFACE_TWICE (iface);
+
+  iface->base_val = 0x550055;
+
+  base5 = TRUE;
+}
+
+static void
+test_iface6_base_init (TestIface6Class *iface)
+{
+  CHECK_IFACE_TWICE (iface);
+
+  iface->base_val = 0x660066;
+  
+  base6 = TRUE;
+}
+
+static void
+base_object_base_init (BaseObjectClass *class)
+{
+  static int n_called = 0;
+  n_called++;
+  
+  /* The second time this is called is for TestObject */
+  if (n_called == 2)
+    {
+      ADD_IFACE(2);
+      
+      /* No interface base init functions should have been called yet
+       */
+      g_assert (!base1 && !base2 && !base3 && !base4 && !base5 && !base6);
+      g_assert (!iface1 && !iface2 && !iface3 && !iface4 && !iface5 && !iface6);
+    }
+}
+
+static void
+test_object_class_init (TestObjectClass *class)
+{
+  ADD_IFACE(4);
+
+  /* At this point, the base init functions for all interfaces that have
+   * been added should be called, but no interface init functions.
+   */
+  g_assert (base1 && base2 && base3 && base4 && !base5 && !base6);
+  g_assert (!iface1 && !iface2 && !iface3 && !iface4 && !iface5 && !iface6);
+}
+
+static DEFINE_TYPE(BaseObject, base_object,
+		   NULL, base_object_base_init, NULL,
+		   G_TYPE_OBJECT)
+static DEFINE_TYPE(TestObject, test_object,
+		   test_object_class_init, NULL, NULL,
+		   BASE_TYPE_OBJECT)
+
+int
+main (int   argc,
+      char *argv[])
+{
+  TestObject *object;
+  TestObjectClass *object_class;
+  TestIfaceClass *iface;
+	
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  /* We force the interfaces to be registered in a different order
+   * than we add them, so our logic doesn't always deal with interfaces
+   * added at the end.
+   */
+  (void)TEST_TYPE_IFACE4;
+  (void)TEST_TYPE_IFACE2;
+  (void)TEST_TYPE_IFACE6;
+  (void)TEST_TYPE_IFACE5;
+  (void)TEST_TYPE_IFACE3;
+  (void)TEST_TYPE_IFACE1;
+
+  ADD_IFACE(1);
+
+  object_class = g_type_class_ref (TEST_TYPE_OBJECT);
+
+  ADD_IFACE(6);
+
+  /* All base and interface init functions should have been called
+   */
+  g_assert (base1 && base2 && base3 && base4 && base5 && base6);
+  g_assert (iface1 && iface2 && iface3 && iface4 && iface5 && iface6);
+  
+  object = g_object_new (TEST_TYPE_OBJECT, NULL);
+
+  iface = TEST_IFACE1_GET_CLASS (object);
+  g_assert (iface && iface->val == 0x10001 && iface->base_val == 0x110011);
+  iface = TEST_IFACE3_GET_CLASS (object);
+  g_assert (iface && iface->val == 0x30003 && iface->base_val == 0x330033);
+  iface = TEST_IFACE4_GET_CLASS (object);
+  g_assert (iface && iface->val == 0x40004 && iface->base_val == 0x440044);
+  iface = TEST_IFACE5_GET_CLASS (object);
+  g_assert (iface && iface->val == 0x50005 && iface->base_val == 0x550055);
+  iface = TEST_IFACE6_GET_CLASS (object);
+  g_assert (iface && iface->val == 0x60006 && iface->base_val == 0x660066);
+
+  return 0;
+}
diff --git a/tests/gobject/ifaceproperties.c b/tests/gobject/ifaceproperties.c
new file mode 100644
index 0000000..382edd5
--- /dev/null
+++ b/tests/gobject/ifaceproperties.c
@@ -0,0 +1,507 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2001, 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestIfaceProperties"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include <string.h>
+
+#include <glib-object.h>
+
+#include "testcommon.h"
+
+/* This test tests interface properties, implementing interface
+ * properties and #GParamSpecOverride.
+ *
+ * Four properties are tested:
+ *
+ * prop1: Defined in TestIface, Implemented in BaseObject with a GParamSpecOverride
+ * prop2: Defined in TestIface, Implemented in BaseObject with a new property
+ * prop3: Defined in TestIface, Implemented in BaseObject, Overridden in DerivedObject
+ * prop4: Defined in BaseObject, Overridden in DerivedObject
+ */
+   
+static GType base_object_get_type ();
+static GType derived_object_get_type ();
+
+enum {
+  BASE_PROP_0,
+  BASE_PROP1,
+  BASE_PROP2,
+  BASE_PROP3,
+  BASE_PROP4
+};
+
+enum {
+  DERIVED_PROP_0,
+  DERIVED_PROP3,
+  DERIVED_PROP4
+};
+
+/*
+ * BaseObject, a parent class for DerivedObject
+ */
+#define BASE_TYPE_OBJECT          (base_object_get_type ())
+#define BASE_OBJECT(obj)	  (G_TYPE_CHECK_INSTANCE_CAST ((obj), BASE_TYPE_OBJECT, BaseObject))
+typedef struct _BaseObject        BaseObject;
+typedef struct _BaseObjectClass   BaseObjectClass;
+
+struct _BaseObject
+{
+  GObject parent_instance;
+
+  gint val1;
+  gint val2;
+  gint val3;
+  gint val4;
+};
+struct _BaseObjectClass
+{
+  GObjectClass parent_class;
+};
+
+GObjectClass *base_parent_class;
+
+/*
+ * DerivedObject, the child class of DerivedObject
+ */
+#define DERIVED_TYPE_OBJECT          (derived_object_get_type ())
+typedef struct _DerivedObject        DerivedObject;
+typedef struct _DerivedObjectClass   DerivedObjectClass;
+
+struct _DerivedObject
+{
+  BaseObject parent_instance;
+};
+struct _DerivedObjectClass
+{
+  BaseObjectClass parent_class;
+};
+
+/*
+ * The interface
+ */
+typedef struct _TestIfaceClass TestIfaceClass;
+
+struct _TestIfaceClass
+{
+  GTypeInterface base_iface;
+};
+
+#define TEST_TYPE_IFACE (test_iface_get_type ())
+
+/* The paramspecs installed on our interface
+ */
+static GParamSpec *iface_spec1, *iface_spec2, *iface_spec3;
+
+/* The paramspecs inherited by our derived object
+ */
+static GParamSpec *inherited_spec1, *inherited_spec2, *inherited_spec3, *inherited_spec4;
+
+static void
+test_iface_default_init (TestIfaceClass *iface_vtable)
+{
+  inherited_spec1 = iface_spec1 = g_param_spec_int ("prop1",
+						    "Prop1",
+						    "Property 1",
+						    G_MININT, /* min */
+						    0xFFFF,  /* max */
+						    42,       /* default */
+						    G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+  g_object_interface_install_property (iface_vtable, iface_spec1);
+
+  iface_spec2 = g_param_spec_int ("prop2",
+				  "Prop2",
+				  "Property 2",
+				  G_MININT, /* min */
+				  G_MAXINT, /* max */
+				  0,	       /* default */
+				  G_PARAM_WRITABLE);
+  g_object_interface_install_property (iface_vtable, iface_spec2);
+    
+  inherited_spec3 = iface_spec3 = g_param_spec_int ("prop3",
+						    "Prop3",
+						    "Property 3",
+						    G_MININT, /* min */
+						    G_MAXINT, /* max */
+						    0,	       /* default */
+						    G_PARAM_READWRITE);
+  g_object_interface_install_property (iface_vtable, iface_spec3);
+}
+
+static DEFINE_IFACE (TestIface, test_iface, NULL, test_iface_default_init)
+
+
+static GObject*
+base_object_constructor  (GType                  type,
+			  guint                  n_construct_properties,
+			  GObjectConstructParam *construct_properties)
+{
+  /* The constructor is the one place where a GParamSpecOverride is visible
+   * to the outside world, so we do a bunch of checks here
+   */
+  GValue value1 = { 0, };
+  GValue value2 = { 0, };
+  GParamSpec *pspec;
+
+  g_assert (n_construct_properties == 1);
+
+  pspec = construct_properties->pspec;
+
+  /* Check we got the param spec we expected
+   */
+  g_assert (G_IS_PARAM_SPEC_OVERRIDE (pspec));
+  g_assert (pspec->param_id == BASE_PROP1);
+  g_assert (strcmp (g_param_spec_get_name (pspec), "prop1") == 0);
+  g_assert (g_param_spec_get_redirect_target (pspec) == iface_spec1);
+
+  /* Test redirection of the nick and blurb to the redirect target
+   */
+  g_assert (strcmp (g_param_spec_get_nick (pspec), "Prop1") == 0);
+  g_assert (strcmp (g_param_spec_get_blurb (pspec), "Property 1") == 0);
+
+  /* Test forwarding of the various GParamSpec methods to the redirect target
+   */
+  g_value_init (&value1, G_TYPE_INT);
+  g_value_init (&value2, G_TYPE_INT);
+  
+  g_param_value_set_default (pspec, &value1);
+  g_assert (g_value_get_int (&value1) == 42);
+
+  g_value_reset (&value1);
+  g_value_set_int (&value1, 0x10000);
+  g_assert (g_param_value_validate (pspec, &value1));
+  g_assert (g_value_get_int (&value1) == 0xFFFF);
+  g_assert (!g_param_value_validate (pspec, &value1));
+  
+  g_value_reset (&value1);
+  g_value_set_int (&value1, 1);
+  g_value_set_int (&value2, 2);
+  g_assert (g_param_values_cmp (pspec, &value1, &value2) < 0);
+  g_assert (g_param_values_cmp (pspec, &value2, &value1) > 0);
+  
+  g_value_unset (&value1);
+  g_value_unset (&value2);
+
+  return base_parent_class->constructor (type,
+					 n_construct_properties,
+					 construct_properties);
+}
+
+static void
+base_object_set_property (GObject      *object,
+			  guint         prop_id,
+			  const GValue *value,
+			  GParamSpec   *pspec)
+{
+  BaseObject *base_object = BASE_OBJECT (object);
+  
+  switch (prop_id)
+    {
+    case BASE_PROP1:
+      g_assert (pspec == inherited_spec1);
+      base_object->val1 = g_value_get_int (value);
+      break;
+    case BASE_PROP2:
+      g_assert (pspec == inherited_spec2);
+      base_object->val2 = g_value_get_int (value);
+      break;
+    case BASE_PROP3:
+      g_assert_not_reached ();
+      break;
+    case BASE_PROP4:
+      g_assert_not_reached ();
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+base_object_get_property (GObject                *object,
+			  guint                   prop_id,
+			  GValue                 *value,
+			  GParamSpec             *pspec)
+{
+  BaseObject *base_object = BASE_OBJECT (object);
+
+  switch (prop_id)
+    {
+    case BASE_PROP1:
+      g_assert (pspec == inherited_spec1);
+      g_value_set_int (value, base_object->val1);
+      break;
+    case BASE_PROP2:
+      g_assert (pspec == inherited_spec2);
+      g_value_set_int (value, base_object->val2);
+      break;
+    case BASE_PROP3:
+      g_assert_not_reached ();
+      break;
+    case BASE_PROP4:
+      g_assert_not_reached ();
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+base_object_notify (GObject    *object,
+		    GParamSpec *pspec)
+{
+  /* The property passed to notify is the redirect target, not the
+   * GParamSpecOverride
+   */
+  g_assert (pspec == inherited_spec1 ||
+	    pspec == inherited_spec2 ||
+	    pspec == inherited_spec3 ||
+	    pspec == inherited_spec4);
+}
+
+static void
+base_object_class_init (BaseObjectClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  base_parent_class= g_type_class_peek_parent (class);
+
+  object_class->constructor = base_object_constructor;
+  object_class->set_property = base_object_set_property;
+  object_class->get_property = base_object_get_property;
+  object_class->notify = base_object_notify;
+
+  g_object_class_override_property (object_class, BASE_PROP1, "prop1");
+
+  /* We override this one using a real property, not GParamSpecOverride
+   * We change the flags from READONLY to READWRITE to show that we
+   * can make the flags less restrictive
+   */
+  inherited_spec2 = g_param_spec_int ("prop2",
+				      "Prop2",
+				      "Property 2",
+				      G_MININT, /* min */
+				      G_MAXINT, /* max */
+				      0,	       /* default */
+				      G_PARAM_READWRITE);
+  g_object_class_install_property (object_class, BASE_PROP2, inherited_spec2);
+
+  g_object_class_override_property (object_class, BASE_PROP3, "prop3");
+  
+  inherited_spec4 = g_param_spec_int ("prop4",
+				      "Prop4",
+				      "Property 4",
+				      G_MININT, /* min */
+				      G_MAXINT, /* max */
+				      0,	       /* default */
+				      G_PARAM_READWRITE);
+  g_object_class_install_property (object_class, BASE_PROP4, inherited_spec4);
+}
+
+static void
+base_object_init (BaseObject *base_object)
+{
+  base_object->val1 = 42;
+}
+
+static DEFINE_TYPE_FULL (BaseObject, base_object,
+			 base_object_class_init, NULL, base_object_init,
+			 G_TYPE_OBJECT,
+			 INTERFACE (NULL, TEST_TYPE_IFACE))
+
+static void
+derived_object_set_property (GObject      *object,
+			     guint         prop_id,
+			     const GValue *value,
+			     GParamSpec   *pspec)
+{
+  BaseObject *base_object = BASE_OBJECT (object);
+
+  switch (prop_id)
+    {
+    case DERIVED_PROP3:
+      g_assert (pspec == inherited_spec3);
+      base_object->val3 = g_value_get_int (value);
+      break;
+    case DERIVED_PROP4:
+      g_assert (pspec == inherited_spec4);
+      base_object->val4 = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+derived_object_get_property (GObject                *object,
+			     guint                   prop_id,
+			     GValue                 *value,
+			     GParamSpec             *pspec)
+{
+  BaseObject *base_object = BASE_OBJECT (object);
+
+  switch (prop_id)
+    {
+    case DERIVED_PROP3:
+      g_assert (pspec == inherited_spec3);
+      g_value_set_int (value, base_object->val3);
+      break;
+    case DERIVED_PROP4:
+      g_assert (pspec == inherited_spec4);
+      g_value_set_int (value, base_object->val4);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+derived_object_class_init (DerivedObjectClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  object_class->set_property = derived_object_set_property;
+  object_class->get_property = derived_object_get_property;
+
+  /* Overriding a property that is itself overridding an interface property */
+  g_object_class_override_property (object_class, DERIVED_PROP3, "prop3");
+
+  /* Overriding a property not from an interface */
+  g_object_class_override_property (object_class, DERIVED_PROP4, "prop4");
+}
+
+static DEFINE_TYPE (DerivedObject, derived_object,
+		    derived_object_class_init, NULL, NULL,
+		    BASE_TYPE_OBJECT)
+
+/* Helper function for testing ...list_properties()
+ */
+static void
+assert_in_properties (GParamSpec  *param_spec,
+		      GParamSpec **properties,
+		      gint         n_properties)
+{
+  gint i;
+  gboolean found = FALSE;
+
+  for (i = 0; i < n_properties; i++)
+    {
+      if (properties[i] == param_spec)
+	found = TRUE;
+    }
+
+  g_assert (found);
+}
+
+int
+main (gint   argc,
+      gchar *argv[])
+{
+  BaseObject *object;
+  GObjectClass *object_class;
+  TestIfaceClass *iface_vtable;
+  GParamSpec **properties;
+  gint n_properties;
+  
+  gint val1, val2, val3, val4;
+	
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  object = g_object_new (DERIVED_TYPE_OBJECT, NULL);
+
+  /* Test setting and getting the properties
+   */
+  g_object_set (object,
+		"prop1", 0x0101,
+		"prop2", 0x0202,
+		"prop3", 0x0303,
+		"prop4", 0x0404,
+		NULL);
+  g_object_get (object,
+		"prop1", &val1,
+		"prop2", &val2,
+		"prop3", &val3,
+		"prop4", &val4,
+		NULL);
+
+  g_assert (val1 == 0x0101);
+  g_assert (val2 == 0x0202);
+  g_assert (val3 == 0x0303);
+  g_assert (val4 == 0x0404);
+
+  /* Test that the right spec is passed on explicit notifications
+   */
+  g_object_freeze_notify (G_OBJECT (object));
+  g_object_notify (G_OBJECT (object), "prop1");
+  g_object_notify (G_OBJECT (object), "prop2");
+  g_object_notify (G_OBJECT (object), "prop3");
+  g_object_notify (G_OBJECT (object), "prop4");
+  g_object_thaw_notify (G_OBJECT (object));
+
+  /* Test g_object_class_find_property() for overridden properties
+   */
+  object_class = G_OBJECT_GET_CLASS (object);
+
+  g_assert (g_object_class_find_property (object_class, "prop1") == inherited_spec1);
+  g_assert (g_object_class_find_property (object_class, "prop2") == inherited_spec2);
+  g_assert (g_object_class_find_property (object_class, "prop3") == inherited_spec3);
+  g_assert (g_object_class_find_property (object_class, "prop4") == inherited_spec4);
+
+  /* Test g_object_class_list_properties() for overridden properties
+   */
+  properties = g_object_class_list_properties (object_class, &n_properties);
+  g_assert (n_properties == 4);
+  assert_in_properties (inherited_spec1, properties, n_properties);
+  assert_in_properties (inherited_spec2, properties, n_properties);
+  assert_in_properties (inherited_spec3, properties, n_properties);
+  assert_in_properties (inherited_spec4, properties, n_properties);
+  g_free (properties);
+
+  /* Test g_object_interface_find_property()
+   */
+  iface_vtable = g_type_default_interface_peek (TEST_TYPE_IFACE);
+
+  g_assert (g_object_interface_find_property (iface_vtable, "prop1") == iface_spec1);
+  g_assert (g_object_interface_find_property (iface_vtable, "prop2") == iface_spec2);
+  g_assert (g_object_interface_find_property (iface_vtable, "prop3") == iface_spec3);
+
+  /* Test g_object_interface_list_properties()
+   */
+  properties = g_object_interface_list_properties (iface_vtable, &n_properties);
+  g_assert (n_properties == 3);
+  assert_in_properties (iface_spec1, properties, n_properties);
+  assert_in_properties (iface_spec2, properties, n_properties);
+  assert_in_properties (iface_spec3, properties, n_properties);
+  g_free (properties);
+
+  g_object_unref (object);
+
+  return 0;
+}
diff --git a/tests/gobject/override.c b/tests/gobject/override.c
new file mode 100644
index 0000000..f812e03
--- /dev/null
+++ b/tests/gobject/override.c
@@ -0,0 +1,418 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * override.c: Closure override test program
+ * Copyright (C) 2001, James Henstridge
+ * Copyright (C) 2003, Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestOverride"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#undef VERBOSE
+
+#include <string.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "testcommon.h"
+
+static guint foo_signal_id = 0;
+static guint bar_signal_id = 0;
+static guint baz_signal_id = 0;
+
+static GType test_i_get_type (void);
+static GType test_a_get_type (void);
+static GType test_b_get_type (void);
+static GType test_c_get_type (void);
+
+static void  record (const gchar *str);
+
+#define TEST_TYPE_I (test_i_get_type ())
+
+typedef struct _TestI TestI;
+typedef struct _TestIClass TestIClass;
+
+struct _TestIClass
+{
+  GTypeInterface base_iface;
+};
+
+static void
+test_i_foo (TestI *self)
+{
+  record ("TestI::foo");
+}
+
+static void
+test_i_default_init (gpointer g_class)
+{
+  foo_signal_id = g_signal_newv ("foo",
+				 TEST_TYPE_I,
+				 G_SIGNAL_RUN_LAST,
+				 g_cclosure_new(G_CALLBACK(test_i_foo),
+						NULL, NULL),
+				 NULL, NULL,
+				 g_cclosure_marshal_VOID__VOID,
+				 G_TYPE_NONE, 0, NULL);
+}
+
+static DEFINE_IFACE (TestI, test_i, NULL, test_i_default_init)
+
+#define TEST_TYPE_A (test_a_get_type())
+
+     typedef struct _TestA TestA;
+     typedef struct _TestAClass TestAClass;
+
+struct _TestA {
+  GObject parent;
+};
+struct _TestAClass {
+  GObjectClass parent_class;
+
+  void (* bar) (TestA *self);
+};
+
+static void
+test_a_foo (TestI *self)
+{
+  GValue args[1] = { { 0, } };
+
+  record ("TestA::foo");
+
+  g_value_init (&args[0], TEST_TYPE_A);
+  g_value_set_object (&args[0], self);
+
+  g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id);
+  g_signal_chain_from_overridden (args, NULL);
+
+  g_value_unset (&args[0]);
+}
+
+static void
+test_a_bar (TestA *self)
+{
+  record ("TestA::bar");
+}
+
+static gchar *
+test_a_baz (TestA    *self,
+            GObject  *object,
+            gpointer  pointer)
+{
+  record ("TestA::baz");
+
+  g_assert (object == G_OBJECT (self));
+  g_assert (GPOINTER_TO_INT (pointer) == 23);
+
+  return g_strdup ("TestA::baz");
+}
+
+static void
+test_a_class_init (TestAClass *class)
+{
+  class->bar = test_a_bar;
+
+  bar_signal_id = g_signal_new ("bar",
+				TEST_TYPE_A,
+				G_SIGNAL_RUN_LAST,
+				G_STRUCT_OFFSET (TestAClass, bar),
+				NULL, NULL,
+				g_cclosure_marshal_VOID__VOID,
+				G_TYPE_NONE, 0, NULL);
+
+  baz_signal_id = g_signal_new_class_handler ("baz",
+                                              TEST_TYPE_A,
+                                              G_SIGNAL_RUN_LAST,
+                                              G_CALLBACK (test_a_baz),
+                                              NULL, NULL,
+                                              g_cclosure_marshal_STRING__OBJECT_POINTER,
+                                              G_TYPE_STRING, 2,
+                                              G_TYPE_OBJECT,
+                                              G_TYPE_POINTER);
+}
+
+static void
+test_a_interface_init (TestIClass *iface)
+{
+  g_signal_override_class_closure (foo_signal_id,
+				   TEST_TYPE_A,
+				   g_cclosure_new (G_CALLBACK (test_a_foo),
+						   NULL, NULL));
+}
+
+static DEFINE_TYPE_FULL (TestA, test_a,
+			 test_a_class_init, NULL, NULL,
+			 G_TYPE_OBJECT,
+			 INTERFACE (test_a_interface_init, TEST_TYPE_I))
+     
+#define TEST_TYPE_B (test_b_get_type())
+
+typedef struct _TestB TestB;
+typedef struct _TestBClass TestBClass;
+
+struct _TestB {
+  TestA parent;
+};
+struct _TestBClass {
+  TestAClass parent_class;
+};
+
+static void
+test_b_foo (TestI *self)
+{
+  GValue args[1] = { { 0, } };
+
+  record ("TestB::foo");
+
+  g_value_init (&args[0], TEST_TYPE_A);
+  g_value_set_object (&args[0], self);
+
+  g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id);
+  g_signal_chain_from_overridden (args, NULL);
+
+  g_value_unset (&args[0]);
+}
+
+static void
+test_b_bar (TestA *self)
+{
+  GValue args[1] = { { 0, } };
+
+  record ("TestB::bar");
+
+  g_value_init (&args[0], TEST_TYPE_A);
+  g_value_set_object (&args[0], self);
+
+  g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id);
+  g_signal_chain_from_overridden (args, NULL);
+
+  g_value_unset (&args[0]);
+}
+
+static gchar *
+test_b_baz (TestA    *self,
+            GObject  *object,
+            gpointer  pointer)
+{
+  gchar *retval = NULL;
+
+  record ("TestB::baz");
+
+  g_assert (object == G_OBJECT (self));
+  g_assert (GPOINTER_TO_INT (pointer) == 23);
+
+  g_signal_chain_from_overridden_handler (self, object, pointer, &retval);
+
+  if (retval)
+    {
+      gchar *tmp = g_strconcat (retval , ",TestB::baz", NULL);
+      g_free (retval);
+      retval = tmp;
+    }
+
+  return retval;
+}
+
+static void
+test_b_class_init (TestBClass *class)
+{
+  g_signal_override_class_closure (foo_signal_id,
+				   TEST_TYPE_B,
+				   g_cclosure_new (G_CALLBACK (test_b_foo),
+						   NULL, NULL));
+  g_signal_override_class_closure (bar_signal_id,
+				   TEST_TYPE_B,
+				   g_cclosure_new (G_CALLBACK (test_b_bar),
+						   NULL, NULL));
+  g_signal_override_class_handler ("baz",
+				   TEST_TYPE_B,
+				   G_CALLBACK (test_b_baz));
+}
+
+static DEFINE_TYPE (TestB, test_b,
+		    test_b_class_init, NULL, NULL,
+		    TEST_TYPE_A)
+
+#define TEST_TYPE_C (test_c_get_type())
+
+typedef struct _TestC TestC;
+typedef struct _TestCClass TestCClass;
+
+struct _TestC {
+  TestB parent;
+};
+struct _TestCClass {
+  TestBClass parent_class;
+};
+
+static void
+test_c_foo (TestI *self)
+{
+  GValue args[1] = { { 0, } };
+
+  record ("TestC::foo");
+
+  g_value_init (&args[0], TEST_TYPE_A);
+  g_value_set_object (&args[0], self);
+
+  g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id);
+  g_signal_chain_from_overridden (args, NULL);
+
+  g_value_unset (&args[0]);
+}
+
+static void
+test_c_bar (TestA *self)
+{
+  GValue args[1] = { { 0, } };
+
+  record ("TestC::bar");
+
+  g_value_init (&args[0], TEST_TYPE_A);
+  g_value_set_object (&args[0], self);
+
+  g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id);
+  g_signal_chain_from_overridden (args, NULL);
+
+  g_value_unset (&args[0]);
+}
+
+static gchar *
+test_c_baz (TestA    *self,
+            GObject  *object,
+            gpointer  pointer)
+{
+  gchar *retval = NULL;
+
+  record ("TestC::baz");
+
+  g_assert (object == G_OBJECT (self));
+  g_assert (GPOINTER_TO_INT (pointer) == 23);
+
+  g_signal_chain_from_overridden_handler (self, object, pointer, &retval);
+
+  if (retval)
+    {
+      gchar *tmp = g_strconcat (retval , ",TestC::baz", NULL);
+      g_free (retval);
+      retval = tmp;
+    }
+
+  return retval;
+}
+
+static void
+test_c_class_init (TestBClass *class)
+{
+  g_signal_override_class_closure (foo_signal_id,
+				   TEST_TYPE_C,
+				   g_cclosure_new (G_CALLBACK (test_c_foo),
+						   NULL, NULL));
+  g_signal_override_class_closure (bar_signal_id,
+				   TEST_TYPE_C,
+				   g_cclosure_new (G_CALLBACK (test_c_bar),
+						   NULL, NULL));
+  g_signal_override_class_handler ("baz",
+				   TEST_TYPE_C,
+				   G_CALLBACK (test_c_baz));
+}
+
+
+static DEFINE_TYPE (TestC, test_c,
+		    test_c_class_init, NULL, NULL,
+		    TEST_TYPE_B)
+
+static GString *test_string = NULL;
+gboolean failed = FALSE;
+     
+static void
+record (const gchar *str)
+{
+  if (test_string->len)
+    g_string_append_c (test_string, ',');
+  g_string_append (test_string, str);
+}
+     
+static void
+test (GType        type,
+      const gchar *signal,
+      const gchar *expected,
+      const gchar *expected_retval)
+{
+  GObject *self = g_object_new (type, NULL);
+
+  test_string = g_string_new (NULL);
+
+  if (strcmp (signal, "baz"))
+    {
+      g_signal_emit_by_name (self, signal);
+    }
+  else
+    {
+      gchar *ret;
+
+      g_signal_emit_by_name (self, signal, self, GINT_TO_POINTER (23), &ret);
+
+      if (strcmp (ret, expected_retval) != 0)
+        failed = TRUE;
+    }
+
+#ifndef VERBOSE
+  if (strcmp (test_string->str, expected) != 0)
+#endif
+    {
+      g_printerr ("*** emitting %s on a %s instance\n"
+		  "    Expecting: %s\n"
+		  "    Got: %s\n",
+		  signal, g_type_name (type),
+		  expected,
+		  test_string->str);
+      
+      if (strcmp (test_string->str, expected) != 0)
+	failed = TRUE;
+    }
+
+  g_string_free (test_string, TRUE);
+}
+     
+int
+main (int argc, char **argv)
+{
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init();
+
+  test (TEST_TYPE_A, "foo", "TestA::foo,TestI::foo", NULL);
+  test (TEST_TYPE_A, "bar", "TestA::bar", NULL);
+  test (TEST_TYPE_A, "baz", "TestA::baz", "TestA::baz");
+
+  test (TEST_TYPE_B, "foo", "TestB::foo,TestA::foo,TestI::foo", NULL);
+  test (TEST_TYPE_B, "bar", "TestB::bar,TestA::bar", NULL);
+  test (TEST_TYPE_B, "baz", "TestB::baz,TestA::baz", "TestA::baz,TestB::baz");
+
+  test (TEST_TYPE_C, "foo", "TestC::foo,TestB::foo,TestA::foo,TestI::foo", NULL);
+  test (TEST_TYPE_C, "bar", "TestC::bar,TestB::bar,TestA::bar", NULL);
+  test (TEST_TYPE_C, "baz", "TestC::baz,TestB::baz,TestA::baz", "TestA::baz,TestB::baz,TestC::baz");
+
+  return failed ? 1 : 0;
+}
diff --git a/tests/gobject/paramspec-test.c b/tests/gobject/paramspec-test.c
new file mode 100644
index 0000000..498aed0
--- /dev/null
+++ b/tests/gobject/paramspec-test.c
@@ -0,0 +1,220 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <string.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+static void
+test_param_spec_char (void)
+{
+  GParamSpec *pspec;
+  GValue value = { 0, };
+  gboolean modified;
+ 
+  pspec = g_param_spec_char ("char", "nick", "blurb",
+			     20, 40, 30, G_PARAM_READWRITE);
+
+  g_assert (strcmp (g_param_spec_get_name (pspec), "char") == 0);
+  g_assert (strcmp (g_param_spec_get_nick (pspec), "nick") == 0);
+  g_assert (strcmp (g_param_spec_get_blurb (pspec), "blurb") == 0);
+
+  g_value_init (&value, G_TYPE_CHAR);
+  g_value_set_char (&value, 30);
+
+  g_assert (g_param_value_defaults (pspec, &value));
+  
+  g_value_set_char (&value, 0);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_char (&value) == 20);
+
+  g_value_set_char (&value, 20);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified && g_value_get_char (&value) == 20);
+
+  g_value_set_char (&value, 40);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified && g_value_get_char (&value) == 40);
+
+  g_value_set_char (&value, 60);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_char (&value) == 40);
+
+  g_param_spec_unref (pspec);
+}
+
+static void
+test_param_spec_string (void)
+{
+  GParamSpec *pspec;
+  GValue value = { 0, };
+  gboolean modified;
+
+  pspec = g_param_spec_string ("string", "nick", "blurb",
+                               NULL, G_PARAM_READWRITE);
+  g_value_init (&value, G_TYPE_STRING);
+
+  g_value_set_string (&value, "foobar");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified);
+
+  g_value_set_string (&value, "");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified && g_value_get_string (&value) != NULL);
+
+  /* test ensure_non_null */
+
+  G_PARAM_SPEC_STRING (pspec)->ensure_non_null = TRUE;
+
+  g_value_set_string (&value, NULL);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value) != NULL);
+
+  G_PARAM_SPEC_STRING (pspec)->ensure_non_null = FALSE;
+
+  /* test null_fold_if_empty */
+
+  G_PARAM_SPEC_STRING (pspec)->null_fold_if_empty = TRUE;
+
+  g_value_set_string (&value, "");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value) == NULL);
+
+  g_value_set_static_string (&value, "");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value) == NULL);
+
+  G_PARAM_SPEC_STRING (pspec)->null_fold_if_empty = FALSE;
+
+  /* test cset_first */
+
+  G_PARAM_SPEC_STRING (pspec)->cset_first = g_strdup ("abc");
+  G_PARAM_SPEC_STRING (pspec)->substitutor = '-';
+
+  g_value_set_string (&value, "ABC");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value)[0] == '-');
+
+  g_value_set_static_string (&value, "ABC");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value)[0] == '-');
+
+  /* test cset_nth */
+
+  G_PARAM_SPEC_STRING (pspec)->cset_nth = g_strdup ("abc");
+
+  g_value_set_string (&value, "aBC");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value)[1] == '-');
+
+  g_value_set_static_string (&value, "aBC");
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_string (&value)[1] == '-');
+
+  g_value_unset (&value);
+  g_param_spec_unref (pspec);
+}
+
+static void
+test_param_spec_override (void)
+{
+  GParamSpec *ospec, *pspec;
+  GValue value = { 0, };
+  gboolean modified;
+ 
+  ospec = g_param_spec_char ("char", "nick", "blurb",
+			     20, 40, 30, G_PARAM_READWRITE);
+
+  pspec = g_param_spec_override ("override", ospec);
+
+  g_assert (strcmp (g_param_spec_get_name (pspec), "override") == 0);
+  g_assert (strcmp (g_param_spec_get_nick (pspec), "nick") == 0);
+  g_assert (strcmp (g_param_spec_get_blurb (pspec), "blurb") == 0);
+
+  g_value_init (&value, G_TYPE_CHAR);
+  g_value_set_char (&value, 30);
+
+  g_assert (g_param_value_defaults (pspec, &value));
+  
+  g_value_set_char (&value, 0);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_char (&value) == 20);
+
+  g_value_set_char (&value, 20);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified && g_value_get_char (&value) == 20);
+
+  g_value_set_char (&value, 40);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified && g_value_get_char (&value) == 40);
+
+  g_value_set_char (&value, 60);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_char (&value) == 40);
+
+  g_param_spec_unref (pspec);
+}
+
+static void
+test_param_spec_gtype (void)
+{
+  GParamSpec *pspec;
+  GValue value = { 0, };
+  gboolean modified;
+  
+  pspec = g_param_spec_gtype ("gtype", "nick", "blurb",
+			      G_TYPE_PARAM, G_PARAM_READWRITE);
+  
+  g_value_init (&value, G_TYPE_GTYPE);
+  g_value_set_gtype (&value, G_TYPE_PARAM);
+
+  g_assert (g_param_value_defaults (pspec, &value));
+  
+  g_value_set_gtype (&value, G_TYPE_INT);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (modified && g_value_get_gtype (&value) == G_TYPE_PARAM);
+
+  g_value_set_gtype (&value, G_TYPE_PARAM_INT);
+  modified = g_param_value_validate (pspec, &value);
+  g_assert (!modified && g_value_get_gtype (&value) == G_TYPE_PARAM_INT);
+}
+
+int
+main (int argc, char *argv[])
+{
+  g_type_init (); 
+  
+  test_param_spec_char ();
+  test_param_spec_string ();
+  test_param_spec_override ();
+  test_param_spec_gtype ();
+
+  return 0;
+}
diff --git a/tests/gobject/references.c b/tests/gobject/references.c
new file mode 100644
index 0000000..86c700f
--- /dev/null
+++ b/tests/gobject/references.c
@@ -0,0 +1,281 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#undef	G_LOG_DOMAIN
+#define	G_LOG_DOMAIN "TestReferences"
+
+#undef G_DISABLE_ASSERT
+#undef G_DISABLE_CHECKS
+#undef G_DISABLE_CAST_CHECKS
+
+#include	<glib-object.h>
+
+/* This test tests weak and toggle references
+ */
+
+static GObject *global_object;
+
+static gboolean object_destroyed;
+static gboolean weak_ref1_notified;
+static gboolean weak_ref2_notified;
+static gboolean toggle_ref1_weakened;
+static gboolean toggle_ref1_strengthened;
+static gboolean toggle_ref2_weakened;
+static gboolean toggle_ref2_strengthened;
+static gboolean toggle_ref3_weakened;
+static gboolean toggle_ref3_strengthened;
+
+/*
+ * TestObject, a parent class for TestObject
+ */
+#define TEST_TYPE_OBJECT          (test_object_get_type ())
+typedef struct _TestObject        TestObject;
+typedef struct _TestObjectClass   TestObjectClass;
+
+struct _TestObject
+{
+  GObject parent_instance;
+};
+struct _TestObjectClass
+{
+  GObjectClass parent_class;
+};
+
+G_DEFINE_TYPE (TestObject, test_object, G_TYPE_OBJECT);
+
+static void
+test_object_finalize (GObject *object)
+{
+  object_destroyed = TRUE;
+  
+  G_OBJECT_CLASS (test_object_parent_class)->finalize (object);
+}
+
+static void
+test_object_class_init (TestObjectClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  object_class->finalize = test_object_finalize;
+}
+
+static void
+test_object_init (TestObject *test_object)
+{
+}
+
+static void
+clear_flags (void)
+{
+  object_destroyed = FALSE;
+  weak_ref1_notified = FALSE;
+  weak_ref2_notified = FALSE;
+  toggle_ref1_weakened = FALSE;
+  toggle_ref1_strengthened = FALSE;
+  toggle_ref2_weakened = FALSE;
+  toggle_ref2_strengthened = FALSE;
+  toggle_ref3_weakened = FALSE;
+  toggle_ref3_strengthened = FALSE;
+}
+
+static void
+weak_ref1 (gpointer data,
+	   GObject *object)
+{
+  g_assert (object == global_object);
+  g_assert (data == GUINT_TO_POINTER (42));
+
+  weak_ref1_notified = TRUE;
+}
+
+static void
+weak_ref2 (gpointer data,
+	   GObject *object)
+{
+  g_assert (object == global_object);
+  g_assert (data == GUINT_TO_POINTER (24));
+
+  weak_ref2_notified = TRUE;
+}
+
+static void
+toggle_ref1 (gpointer data,
+	     GObject *object,
+	     gboolean is_last_ref)
+{
+  g_assert (object == global_object);
+  g_assert (data == GUINT_TO_POINTER (42));
+
+  if (is_last_ref)
+    toggle_ref1_weakened = TRUE;
+  else
+    toggle_ref1_strengthened = TRUE;
+}
+
+static void
+toggle_ref2 (gpointer data,
+	     GObject *object,
+	     gboolean is_last_ref)
+{
+  g_assert (object == global_object);
+  g_assert (data == GUINT_TO_POINTER (24));
+
+  if (is_last_ref)
+    toggle_ref2_weakened = TRUE;
+  else
+    toggle_ref2_strengthened = TRUE;
+}
+
+static void
+toggle_ref3 (gpointer data,
+	     GObject *object,
+	     gboolean is_last_ref)
+{
+  g_assert (object == global_object);
+  g_assert (data == GUINT_TO_POINTER (34));
+
+  if (is_last_ref)
+    {
+      toggle_ref3_weakened = TRUE;
+      g_object_remove_toggle_ref (object, toggle_ref3, GUINT_TO_POINTER (34));
+    }
+  else
+    toggle_ref3_strengthened = TRUE;
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  GObject *object;
+	
+  g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
+			  G_LOG_LEVEL_WARNING |
+			  G_LOG_LEVEL_CRITICAL);
+  g_type_init ();
+
+  /* Test basic weak reference operation
+   */
+  global_object = object = g_object_new (TEST_TYPE_OBJECT, NULL);
+  
+  g_object_weak_ref (object, weak_ref1, GUINT_TO_POINTER (42));
+
+  clear_flags ();
+  g_object_unref (object);
+  g_assert (weak_ref1_notified == TRUE);
+  g_assert (object_destroyed == TRUE);
+
+  /* Test two weak references at once
+   */
+  global_object = object = g_object_new (TEST_TYPE_OBJECT, NULL);
+  
+  g_object_weak_ref (object, weak_ref1, GUINT_TO_POINTER (42));
+  g_object_weak_ref (object, weak_ref2, GUINT_TO_POINTER (24));
+
+  clear_flags ();
+  g_object_unref (object);
+  g_assert (weak_ref1_notified == TRUE);
+  g_assert (weak_ref2_notified == TRUE);
+  g_assert (object_destroyed == TRUE);
+
+  /* Test remove weak references
+   */
+  global_object = object = g_object_new (TEST_TYPE_OBJECT, NULL);
+  
+  g_object_weak_ref (object, weak_ref1, GUINT_TO_POINTER (42));
+  g_object_weak_ref (object, weak_ref2, GUINT_TO_POINTER (24));
+  g_object_weak_unref (object, weak_ref1, GUINT_TO_POINTER (42));
+
+  clear_flags ();
+  g_object_unref (object);
+  g_assert (weak_ref1_notified == FALSE);
+  g_assert (weak_ref2_notified == TRUE);
+  g_assert (object_destroyed == TRUE);
+
+  /* Test basic toggle reference operation
+   */
+  global_object = object = g_object_new (TEST_TYPE_OBJECT, NULL);
+  
+  g_object_add_toggle_ref (object, toggle_ref1, GUINT_TO_POINTER (42));
+
+  clear_flags ();
+  g_object_unref (object);
+  g_assert (toggle_ref1_weakened == TRUE);
+  g_assert (toggle_ref1_strengthened == FALSE);
+  g_assert (object_destroyed == FALSE);
+
+  clear_flags ();
+  g_object_ref (object);
+  g_assert (toggle_ref1_weakened == FALSE);
+  g_assert (toggle_ref1_strengthened == TRUE);
+  g_assert (object_destroyed == FALSE);
+
+  g_object_unref (object);
+
+  clear_flags ();
+  g_object_remove_toggle_ref (object, toggle_ref1, GUINT_TO_POINTER (42));
+  g_assert (toggle_ref1_weakened == FALSE);
+  g_assert (toggle_ref1_strengthened == FALSE);
+  g_assert (object_destroyed == TRUE);
+
+  global_object = object = g_object_new (TEST_TYPE_OBJECT, NULL);
+
+  /* Test two toggle references at once
+   */
+  g_object_add_toggle_ref (object, toggle_ref1, GUINT_TO_POINTER (42));
+  g_object_add_toggle_ref (object, toggle_ref2, GUINT_TO_POINTER (24));
+
+  clear_flags ();
+  g_object_unref (object);
+  g_assert (toggle_ref1_weakened == FALSE);
+  g_assert (toggle_ref1_strengthened == FALSE);
+  g_assert (toggle_ref2_weakened == FALSE);
+  g_assert (toggle_ref2_strengthened == FALSE);
+  g_assert (object_destroyed == FALSE);
+
+  clear_flags ();
+  g_object_remove_toggle_ref (object, toggle_ref1, GUINT_TO_POINTER (42));
+  g_assert (toggle_ref1_weakened == FALSE);
+  g_assert (toggle_ref1_strengthened == FALSE);
+  g_assert (toggle_ref2_weakened == TRUE);
+  g_assert (toggle_ref2_strengthened == FALSE);
+  g_assert (object_destroyed == FALSE);
+
+  clear_flags ();
+  g_object_remove_toggle_ref (object, toggle_ref2, GUINT_TO_POINTER (24));
+  g_assert (toggle_ref1_weakened == FALSE);
+  g_assert (toggle_ref1_strengthened == FALSE);
+  g_assert (toggle_ref2_weakened == FALSE);
+  g_assert (toggle_ref2_strengthened == FALSE);
+  g_assert (object_destroyed == TRUE);
+  
+  /* Test a toggle reference that removes itself
+   */
+  global_object = object = g_object_new (TEST_TYPE_OBJECT, NULL);
+  
+  g_object_add_toggle_ref (object, toggle_ref3, GUINT_TO_POINTER (34));
+
+  clear_flags ();
+  g_object_unref (object);
+  g_assert (toggle_ref3_weakened == TRUE);
+  g_assert (toggle_ref3_strengthened == FALSE);
+  g_assert (object_destroyed == TRUE);
+
+  return 0;
+}
diff --git a/tests/gobject/singleton.c b/tests/gobject/singleton.c
new file mode 100644
index 0000000..c7609a6
--- /dev/null
+++ b/tests/gobject/singleton.c
@@ -0,0 +1,85 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2006 Imendio AB
+ *
+ * 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 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.
+ */
+#undef  G_LOG_DOMAIN
+#define G_LOG_DOMAIN "TestSingleton"
+#include <glib-object.h>
+#include <string.h>
+
+/* --- MySingleton class --- */
+typedef struct {
+  GObject parent_instance;
+} MySingleton;
+typedef struct {
+  GObjectClass parent_class;
+} MySingletonClass;
+
+#define MY_TYPE_SINGLETON         (my_singleton_get_type ())
+#define MY_SINGLETON(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), MY_TYPE_SINGLETON, MySingleton))
+#define MY_IS_SINGLETON(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), MY_TYPE_SINGLETON))
+#define MY_SINGLETON_CLASS(c)     (G_TYPE_CHECK_CLASS_CAST ((c), MY_TYPE_SINGLETON, MySingletonClass))
+#define MY_IS_SINGLETON_CLASS(c)  (G_TYPE_CHECK_CLASS_TYPE ((c), MY_TYPE_SINGLETON))
+#define MY_SINGLETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MY_TYPE_SINGLETON, MySingletonClass))
+
+G_DEFINE_TYPE (MySingleton, my_singleton, G_TYPE_OBJECT);
+
+static MySingleton *the_one_and_only = NULL;
+
+/* --- methods --- */
+static GObject*
+my_singleton_constructor (GType                  type,
+                          guint                  n_construct_properties,
+                          GObjectConstructParam *construct_properties)
+{
+  if (the_one_and_only)
+    return g_object_ref (the_one_and_only);
+  else
+    return G_OBJECT_CLASS (my_singleton_parent_class)->constructor (type, n_construct_properties, construct_properties);
+}
+
+static void
+my_singleton_init (MySingleton *self)
+{
+  g_assert (the_one_and_only == NULL);
+  the_one_and_only = self;
+}
+
+static void
+my_singleton_class_init (MySingletonClass *klass)
+{
+  G_OBJECT_CLASS (klass)->constructor = my_singleton_constructor;
+}
+
+/* --- test program --- */
+int
+main (int   argc,
+      char *argv[])
+{
+  MySingleton *singleton, *obj;
+  g_type_init_with_debug_flags (G_TYPE_DEBUG_OBJECTS | G_TYPE_DEBUG_SIGNALS);
+  /* create the singleton */
+  singleton = g_object_new (MY_TYPE_SINGLETON, NULL);
+  g_assert (singleton != NULL);
+  /* assert _singleton_ creation */
+  obj = g_object_new (MY_TYPE_SINGLETON, NULL);
+  g_assert (singleton == obj);
+  g_object_unref (obj);
+  /* shutdown */
+  g_object_unref (singleton);
+  return 0;
+}
diff --git a/tests/gobject/testcommon.h b/tests/gobject/testcommon.h
new file mode 100644
index 0000000..7bfef05
--- /dev/null
+++ b/tests/gobject/testcommon.h
@@ -0,0 +1,100 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#ifndef __TEST_COMMON_H__
+#define __TEST_COMMON_H__
+
+G_BEGIN_DECLS
+
+#define DEFINE_TYPE_FULL(name, prefix,				\
+		         class_init, base_init, instance_init,	\
+		         parent_type, interface_decl)		\
+GType								\
+prefix ## _get_type (void)					\
+{								\
+  static GType object_type = 0;					\
+								\
+  if (!object_type)						\
+    {								\
+      static const GTypeInfo object_info =			\
+	{							\
+	  sizeof (name ## Class),				\
+	  (GBaseInitFunc) base_init,				\
+	  (GBaseFinalizeFunc) NULL,				\
+	  (GClassInitFunc) class_init,				\
+	  (GClassFinalizeFunc) NULL,				\
+	  NULL,           /* class_data */			\
+	  sizeof (name),					\
+	  0,             /* n_prelocs */			\
+	  (GInstanceInitFunc) instance_init			\
+	};							\
+								\
+      object_type = g_type_register_static (parent_type,	\
+					    # name,		\
+					    &object_info, 0);	\
+      interface_decl						\
+    }								\
+								\
+  return object_type;						\
+}
+
+#define DEFINE_TYPE(name, prefix,				\
+		    class_init, base_init, instance_init,	\
+		    parent_type)				\
+  DEFINE_TYPE_FULL(name, prefix, class_init, base_init,		\
+		   instance_init, parent_type, {})
+
+#define DEFINE_IFACE(name, prefix, base_init, dflt_init)	\
+GType								\
+prefix ## _get_type (void)					\
+{								\
+  static GType iface_type = 0;					\
+								\
+  if (!iface_type)						\
+    {								\
+      static const GTypeInfo iface_info =			\
+      {								\
+	sizeof (name ## Class),					\
+	(GBaseInitFunc)	base_init,				\
+	(GBaseFinalizeFunc) NULL,				\
+	(GClassInitFunc) dflt_init,				\
+      };							\
+								\
+      iface_type = g_type_register_static (G_TYPE_INTERFACE,	\
+					    # name,		\
+					    &iface_info, 0);	\
+    }								\
+  return iface_type;						\
+}
+
+#define INTERFACE_FULL(type, init_func, iface_type)		\
+{								\
+  static GInterfaceInfo const iface =				\
+    {								\
+      (GInterfaceInitFunc) init_func, NULL, NULL		\
+    };								\
+								\
+  g_type_add_interface_static (type, iface_type, &iface);	\
+}
+#define INTERFACE(init_func, iface_type)	\
+  INTERFACE_FULL(object_type, init_func, iface_type)
+
+G_END_DECLS
+
+#endif /* __TEST_COMMON_H__ */
diff --git a/tests/gobject/testmarshal.list b/tests/gobject/testmarshal.list
new file mode 100644
index 0000000..bed97e2
--- /dev/null
+++ b/tests/gobject/testmarshal.list
@@ -0,0 +1,4 @@
+# Marshallers used in tests
+BOOLEAN:INT
+STRING:INT
+
diff --git a/tests/gobject/testmodule.c b/tests/gobject/testmodule.c
new file mode 100644
index 0000000..a6159f1
--- /dev/null
+++ b/tests/gobject/testmodule.c
@@ -0,0 +1,69 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * testmodule.c: Dummy dynamic type module
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#include "testmodule.h"
+#include "testcommon.h"
+
+static gboolean test_module_load   (GTypeModule *module);
+static void     test_module_unload (GTypeModule *module);
+
+static void
+test_module_class_init (TestModuleClass *class)
+{
+  GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class);
+
+  module_class->load = test_module_load;
+  module_class->unload = test_module_unload;
+}
+
+DEFINE_TYPE (TestModule, test_module,
+	     test_module_class_init, NULL, NULL,
+	     G_TYPE_TYPE_MODULE)
+
+static gboolean
+test_module_load (GTypeModule *module)
+{
+  TestModule *test_module = TEST_MODULE (module);
+
+  test_module->register_func (module);
+  
+  return TRUE;
+}
+
+static void
+test_module_unload (GTypeModule *module)
+{
+}
+
+GTypeModule *
+test_module_new (TestModuleRegisterFunc register_func)
+{
+  TestModule *test_module = g_object_new (TEST_TYPE_MODULE, NULL);
+  GTypeModule *module = G_TYPE_MODULE (test_module);
+  
+  test_module->register_func = register_func;
+
+  /* Register the types initially */
+  g_type_module_use (module);
+  g_type_module_unuse (module);
+
+  return G_TYPE_MODULE (module);
+}
+
diff --git a/tests/gobject/testmodule.h b/tests/gobject/testmodule.h
new file mode 100644
index 0000000..751d8ad
--- /dev/null
+++ b/tests/gobject/testmodule.h
@@ -0,0 +1,57 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ * testmodule.h: Dummy dynamic type module
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * 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 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.
+ */
+
+#ifndef __TEST_MODULE_H__
+#define __TEST_MODULE_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _TestModule      TestModule;
+typedef struct _TestModuleClass TestModuleClass;
+
+#define TEST_TYPE_MODULE              (test_module_get_type ())
+#define TEST_MODULE(module)           (G_TYPE_CHECK_INSTANCE_CAST ((module), TEST_TYPE_MODULE, TestModule))
+#define TEST_MODULE_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), TEST_TYPE_MODULE, TestModuleClass))
+#define TEST_IS_MODULE(module)        (G_TYPE_CHECK_INSTANCE_TYPE ((module), TEST_TYPE_MODULE))
+#define TEST_IS_MODULE_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), TEST_TYPE_MODULE))
+#define TEST_MODULE_GET_CLASS(module) (G_TYPE_INSTANCE_GET_CLASS ((module), TEST_TYPE_MODULE, TestModuleClass))
+
+typedef void (*TestModuleRegisterFunc) (GTypeModule *module);
+
+struct _TestModule 
+{
+  GTypeModule parent_instance;
+
+  TestModuleRegisterFunc register_func;
+};
+
+struct _TestModuleClass
+{
+  GTypeModuleClass parent_class;
+};
+
+GType        test_module_get_type      (void);
+GTypeModule *test_module_new           (TestModuleRegisterFunc register_func);
+
+G_END_DECLS
+
+#endif /* __TEST_MODULE_H__ */
diff --git a/tests/hash-test.c b/tests/hash-test.c
new file mode 100644
index 0000000..23411c3
--- /dev/null
+++ b/tests/hash-test.c
@@ -0,0 +1,459 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ * Copyright (C) 1999 The Free Software Foundation
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#if STDC_HEADERS
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#endif
+
+#include <glib.h>
+
+
+
+int array[10000];
+
+static void
+fill_hash_table_and_array (GHashTable *hash_table)
+{
+  int i;
+
+  for (i = 0; i < 10000; i++)
+    {
+      array[i] = i;
+      g_hash_table_insert (hash_table, &array[i], &array[i]);
+    }
+}
+
+static void
+init_result_array (int result_array[10000])
+{
+  int i;
+
+  for (i = 0; i < 10000; i++)
+    result_array[i] = -1;
+}
+
+static void
+verify_result_array (int array[10000])
+{
+  int i;
+
+  for (i = 0; i < 10000; i++)
+    g_assert (array[i] == i);
+}
+
+static void
+handle_pair (gpointer key, gpointer value, int result_array[10000])
+{
+  int n;
+
+  g_assert (key == value);
+
+  n = *((int *) value);
+
+  g_assert (n >= 0 && n < 10000);
+  g_assert (result_array[n] == -1);
+
+  result_array[n] = n;
+}
+
+static gboolean
+my_hash_callback_remove (gpointer key,
+			 gpointer value,
+			 gpointer user_data)
+{
+  int *d = value;
+
+  if ((*d) % 2)
+    return TRUE;
+
+  return FALSE;
+}
+
+static void
+my_hash_callback_remove_test (gpointer key,
+			      gpointer value,
+			      gpointer user_data)
+{
+  int *d = value;
+
+  if ((*d) % 2)
+    g_assert_not_reached ();
+}
+
+static void
+my_hash_callback (gpointer key,
+		  gpointer value,
+		  gpointer user_data)
+{
+  handle_pair (key, value, user_data);
+}
+
+static guint
+my_hash (gconstpointer key)
+{
+  return (guint) *((const gint*) key);
+}
+
+static gboolean
+my_hash_equal (gconstpointer a,
+	       gconstpointer b)
+{
+  return *((const gint*) a) == *((const gint*) b);
+}
+
+
+
+/*
+ * This is a simplified version of the pathalias hashing function.
+ * Thanks to Steve Belovin and Peter Honeyman
+ *
+ * hash a string into a long int.  31 bit crc (from andrew appel).
+ * the crc table is computed at run time by crcinit() -- we could
+ * precompute, but it takes 1 clock tick on a 750.
+ *
+ * This fast table calculation works only if POLY is a prime polynomial
+ * in the field of integers modulo 2.  Since the coefficients of a
+ * 32-bit polynomial won't fit in a 32-bit word, the high-order bit is
+ * implicit.  IT MUST ALSO BE THE CASE that the coefficients of orders
+ * 31 down to 25 are zero.  Happily, we have candidates, from
+ * E. J.  Watson, "Primitive Polynomials (Mod 2)", Math. Comp. 16 (1962):
+ *	x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + x^0
+ *	x^31 + x^3 + x^0
+ *
+ * We reverse the bits to get:
+ *	111101010000000000000000000000001 but drop the last 1
+ *         f   5   0   0   0   0   0   0
+ *	010010000000000000000000000000001 ditto, for 31-bit crc
+ *	   4   8   0   0   0   0   0   0
+ */
+
+#define POLY 0x48000000L	/* 31-bit polynomial (avoids sign problems) */
+
+static guint CrcTable[128];
+
+/*
+ - crcinit - initialize tables for hash function
+ */
+static void crcinit(void)
+{
+	int i, j;
+	guint sum;
+
+	for (i = 0; i < 128; ++i) {
+		sum = 0L;
+		for (j = 7 - 1; j >= 0; --j)
+			if (i & (1 << j))
+				sum ^= POLY >> j;
+		CrcTable[i] = sum;
+	}
+}
+
+/*
+ - hash - Honeyman's nice hashing function
+ */
+static guint honeyman_hash(gconstpointer key)
+{
+	const gchar *name = (const gchar *) key;
+	gint size;
+	guint sum = 0;
+
+	g_assert (name != NULL);
+	g_assert (*name != 0);
+
+	size = strlen(name);
+
+	while (size--) {
+		sum = (sum >> 7) ^ CrcTable[(sum ^ (*name++)) & 0x7f];
+	}
+
+	return(sum);
+}
+
+
+static gboolean second_hash_cmp (gconstpointer a, gconstpointer b)
+{
+  return (strcmp (a, b) == 0);
+}
+
+
+
+static guint one_hash(gconstpointer key)
+{
+  return 1;
+}
+
+
+static void not_even_foreach (gpointer       key,
+				 gpointer       value,
+				 gpointer	user_data)
+{
+  const char *_key = (const char *) key;
+  const char *_value = (const char *) value;
+  int i;
+  char val [20];
+
+  g_assert (_key != NULL);
+  g_assert (*_key != 0);
+  g_assert (_value != NULL);
+  g_assert (*_value != 0);
+
+  i = atoi (_key);
+
+  sprintf (val, "%d value", i);
+  g_assert (strcmp (_value, val) == 0);
+
+  g_assert ((i % 2) != 0);
+  g_assert (i != 3);
+}
+
+
+static gboolean remove_even_foreach (gpointer       key,
+				 gpointer       value,
+				 gpointer	user_data)
+{
+  const char *_key = (const char *) key;
+  const char *_value = (const char *) value;
+  int i;
+  char val [20];
+
+  g_assert (_key != NULL);
+  g_assert (*_key != 0);
+  g_assert (_value != NULL);
+  g_assert (*_value != 0);
+
+  i = atoi (_key);
+
+  sprintf (val, "%d value", i);
+  g_assert (strcmp (_value, val) == 0);
+
+  return ((i % 2) == 0) ? TRUE : FALSE;
+}
+
+
+
+
+static void second_hash_test (gboolean simple_hash)
+{
+     int       i;
+     char      key[20] = "", val[20]="", *v, *orig_key, *orig_val;
+     GHashTable     *h;
+     gboolean found;
+
+     crcinit ();
+
+     h = g_hash_table_new_full (simple_hash ? one_hash : honeyman_hash,
+     			        second_hash_cmp,
+                                g_free, g_free);
+     g_assert (h != NULL);
+     for (i=0; i<20; i++)
+          {
+          sprintf (key, "%d", i);
+	  g_assert (atoi (key) == i);
+
+	  sprintf (val, "%d value", i);
+	  g_assert (atoi (val) == i);
+
+          g_hash_table_insert (h, g_strdup (key), g_strdup (val));
+          }
+
+     g_assert (g_hash_table_size (h) == 20);
+
+     for (i=0; i<20; i++)
+          {
+          sprintf (key, "%d", i);
+	  g_assert (atoi(key) == i);
+
+          v = (char *) g_hash_table_lookup (h, key);
+
+	  g_assert (v != NULL);
+	  g_assert (*v != 0);
+	  g_assert (atoi (v) == i);
+          }
+
+     sprintf (key, "%d", 3);
+     g_hash_table_remove (h, key);
+     g_assert (g_hash_table_size (h) == 19);
+     g_hash_table_foreach_remove (h, remove_even_foreach, NULL);
+     g_assert (g_hash_table_size (h) == 9);
+     g_hash_table_foreach (h, not_even_foreach, NULL);
+
+     for (i=0; i<20; i++)
+          {
+          sprintf (key, "%d", i);
+	  g_assert (atoi(key) == i);
+
+	  sprintf (val, "%d value", i);
+	  g_assert (atoi (val) == i);
+
+	  orig_key = orig_val = NULL;
+          found = g_hash_table_lookup_extended (h, key,
+	  					(gpointer)&orig_key,
+						(gpointer)&orig_val);
+	  if ((i % 2) == 0 || i == 3)
+            {
+              g_assert (!found);
+  	      continue;
+            }
+
+	  g_assert (found);
+
+	  g_assert (orig_key != NULL);
+	  g_assert (strcmp (key, orig_key) == 0);
+
+	  g_assert (orig_val != NULL);
+	  g_assert (strcmp (val, orig_val) == 0);
+          }
+
+    g_hash_table_destroy (h);
+}
+
+static gboolean find_first     (gpointer key, 
+				gpointer value, 
+				gpointer user_data)
+{
+  gint *v = value; 
+  gint *test = user_data;
+  return (*v == *test);
+}
+
+
+static void direct_hash_test (void)
+{
+     gint       i, rc;
+     GHashTable     *h;
+
+     h = g_hash_table_new (NULL, NULL);
+     g_assert (h != NULL);
+     for (i=1; i<=20; i++)
+          {
+          g_hash_table_insert (h, GINT_TO_POINTER (i),
+	  		       GINT_TO_POINTER (i + 42));
+          }
+
+     g_assert (g_hash_table_size (h) == 20);
+
+     for (i=1; i<=20; i++)
+          {
+          rc = GPOINTER_TO_INT (
+	  	g_hash_table_lookup (h, GINT_TO_POINTER (i)));
+
+	  g_assert (rc != 0);
+	  g_assert ((rc - 42) == i);
+          }
+
+    g_hash_table_destroy (h);
+}
+
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  GHashTable *hash_table;
+  gint i;
+  gint value = 120;
+  gint *pvalue;
+  GList *keys, *values;
+  gint keys_len, values_len;
+  GHashTableIter iter;
+  gpointer ikey, ivalue;
+  int result_array[10000];
+  
+  hash_table = g_hash_table_new (my_hash, my_hash_equal);
+  fill_hash_table_and_array (hash_table);
+  pvalue = g_hash_table_find (hash_table, find_first, &value);
+  if (!pvalue || *pvalue != value)
+    g_assert_not_reached();
+
+  keys = g_hash_table_get_keys (hash_table);
+  if (!keys)
+    g_assert_not_reached ();
+
+  values = g_hash_table_get_values (hash_table);
+  if (!values)
+    g_assert_not_reached ();
+
+  keys_len = g_list_length (keys);
+  values_len = g_list_length (values);
+  if (values_len != keys_len &&  keys_len != g_hash_table_size (hash_table))
+    g_assert_not_reached ();
+
+  g_list_free (keys);
+  g_list_free (values);
+
+  init_result_array (result_array);
+  g_hash_table_iter_init (&iter, hash_table);
+  for (i = 0; i < 10000; i++)
+    {
+      g_assert (g_hash_table_iter_next (&iter, &ikey, &ivalue));
+
+      handle_pair (ikey, ivalue, result_array);
+
+      if (i % 2)
+	g_hash_table_iter_remove (&iter);
+    }
+  g_assert (! g_hash_table_iter_next (&iter, &ikey, &ivalue));
+  g_assert (g_hash_table_size (hash_table) == 5000);
+  verify_result_array (result_array);
+
+  fill_hash_table_and_array (hash_table);
+
+  init_result_array (result_array);
+  g_hash_table_foreach (hash_table, my_hash_callback, result_array);
+  verify_result_array (result_array);
+
+  for (i = 0; i < 10000; i++)
+    g_hash_table_remove (hash_table, &array[i]);
+
+  fill_hash_table_and_array (hash_table);
+
+  if (g_hash_table_foreach_remove (hash_table, my_hash_callback_remove, NULL) != 5000 ||
+      g_hash_table_size (hash_table) != 5000)
+    g_assert_not_reached();
+
+  g_hash_table_foreach (hash_table, my_hash_callback_remove_test, NULL);
+
+
+  g_hash_table_destroy (hash_table);
+
+  second_hash_test (TRUE);
+  second_hash_test (FALSE);
+  direct_hash_test ();
+
+  return 0;
+
+}
diff --git a/tests/iochannel-test-infile b/tests/iochannel-test-infile
new file mode 100644
index 0000000..86e24ee
--- /dev/null
+++ b/tests/iochannel-test-infile
@@ -0,0 +1,5 @@
+Line one
+Line two
+Line three
+/* Hello */
+\x1234\x567890\x6666
diff --git a/tests/iochannel-test.c b/tests/iochannel-test.c
new file mode 100644
index 0000000..f08688b
--- /dev/null
+++ b/tests/iochannel-test.c
@@ -0,0 +1,176 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <glib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define BUFFER_SIZE 1024
+
+static void
+test_small_writes (void)
+{
+  GIOChannel *io;
+  GIOStatus status;
+  guint cnt; 
+  gchar tmp;
+  GError *error = NULL;
+
+  io = g_io_channel_new_file ("iochannel-test-outfile", "w", &error);
+  if (error)
+    {
+      g_warning ("Unable to open file %s: %s", 
+		 "iochannel-test-outfile", 
+		 error->message);
+      g_error_free (error);
+      
+      exit (1);
+    }
+
+  g_io_channel_set_encoding (io, NULL, NULL);
+  g_io_channel_set_buffer_size (io, 1022);
+
+  cnt = 2 * g_io_channel_get_buffer_size (io);
+  tmp = 0;
+ 
+  while (cnt)
+    {
+      status = g_io_channel_write_chars (io, &tmp, 1, NULL, NULL);
+      if (status == G_IO_STATUS_ERROR)
+	break;
+      if (status == G_IO_STATUS_NORMAL)
+	cnt--;
+    }
+
+  g_assert (status == G_IO_STATUS_NORMAL);
+
+  g_io_channel_unref (io);
+}
+
+
+gint main (gint argc, gchar * argv[])
+{
+    GIOChannel *gio_r, *gio_w ;
+    GError *gerr = NULL;
+    GString *buffer;
+    char *filename;
+    char *srcdir = getenv ("srcdir");
+    gint rlength = 0;
+    glong wlength = 0;
+    gsize length_out;
+    const gchar encoding[] = "EUC-JP";
+    GIOStatus status;
+    GIOFlags flags;
+
+    if (!srcdir)
+      srcdir = ".";
+    filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "iochannel-test-infile", NULL);
+  
+    setbuf (stdout, NULL); /* For debugging */
+
+    gio_r = g_io_channel_new_file (filename, "r", &gerr);
+    if (gerr)
+      {
+        g_warning ("Unable to open file %s: %s", filename, gerr->message);
+        g_error_free (gerr);
+        return 1;
+      }
+    gio_w = g_io_channel_new_file ("iochannel-test-outfile", "w", &gerr);
+    if (gerr)
+      {
+        g_warning ("Unable to open file %s: %s", "iochannel-test-outfile", gerr->message);
+        g_error_free (gerr);
+        return 1;
+      }
+
+    g_io_channel_set_encoding (gio_r, encoding, &gerr);
+    if (gerr)
+      {
+        g_warning (gerr->message);
+        /* Keep going if this is just a case of iconv not supporting EUC-JP, see bug 428048 */
+        if (gerr->code != G_CONVERT_ERROR_NO_CONVERSION)
+          return 1;
+        g_error_free (gerr);
+        gerr = NULL;
+      }
+    
+    g_io_channel_set_buffer_size (gio_r, BUFFER_SIZE);
+
+    status = g_io_channel_set_flags (gio_r, G_IO_FLAG_NONBLOCK, &gerr);
+    if (status == G_IO_STATUS_ERROR)
+      {
+        g_warning (gerr->message);
+        g_error_free (gerr);
+        gerr = NULL;
+      }
+    flags = g_io_channel_get_flags (gio_r);
+    buffer = g_string_sized_new (BUFFER_SIZE);
+
+    while (TRUE)
+    {
+        do
+          status = g_io_channel_read_line_string (gio_r, buffer, NULL, &gerr);
+        while (status == G_IO_STATUS_AGAIN);
+        if (status != G_IO_STATUS_NORMAL)
+          break;
+
+        rlength += buffer->len;
+
+        do
+          status = g_io_channel_write_chars (gio_w, buffer->str, buffer->len,
+            &length_out, &gerr);
+        while (status == G_IO_STATUS_AGAIN);
+        if (status != G_IO_STATUS_NORMAL)
+          break;
+
+        wlength += length_out;
+
+        if (length_out < buffer->len)
+          g_warning ("Only wrote part of the line.");
+
+#ifdef VERBOSE
+        g_print ("%s", buffer->str);
+#endif
+        g_string_truncate (buffer, 0);
+    }
+
+    switch (status)
+      {
+        case G_IO_STATUS_EOF:
+          break;
+        case G_IO_STATUS_ERROR:
+          g_warning (gerr->message);
+          g_error_free (gerr);
+          gerr = NULL;
+          break;
+        default:
+          g_warning ("Abnormal exit from write loop.");
+          break;
+      }
+
+    do
+      status = g_io_channel_flush (gio_w, &gerr);
+    while (status == G_IO_STATUS_AGAIN);
+
+    if (status == G_IO_STATUS_ERROR)
+      {
+        g_warning (gerr->message);
+        g_error_free (gerr);
+        gerr = NULL;
+      }
+
+#ifdef VERBOSE
+    g_print ("read %d bytes, wrote %ld bytes\n", rlength, wlength);
+#endif
+
+    g_io_channel_unref(gio_r);
+    g_io_channel_unref(gio_w);
+
+    test_small_writes ();
+    
+    return 0;
+}
diff --git a/tests/libmoduletestplugin_a.c b/tests/libmoduletestplugin_a.c
new file mode 100644
index 0000000..150d50d
--- /dev/null
+++ b/tests/libmoduletestplugin_a.c
@@ -0,0 +1,71 @@
+/* libgplugin_a.c - test plugin for testgmodule
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include	<gmodule.h>
+#include	<stdlib.h>
+
+G_MODULE_EXPORT gchar* gplugin_a_state;
+
+G_MODULE_EXPORT void
+gplugin_a_func (void)
+{
+  gplugin_a_state = "Hello world";
+}
+
+G_MODULE_EXPORT void
+gplugin_clash_func (void)
+{
+  gplugin_a_state = "plugin clash";
+}
+
+G_MODULE_EXPORT void
+g_clash_func (void)
+{
+  gplugin_a_state = "global clash";
+}
+
+G_MODULE_EXPORT void
+gplugin_say_boo_func (void)
+{
+  gplugin_a_state = "BOOH";
+}
+
+G_MODULE_EXPORT void
+gplugin_a_module_func (GModule *module)
+{
+  void *f = NULL;
+
+  if (!g_module_symbol (module, "gplugin_say_boo_func", &f ))
+    {
+      g_print ("error: %s\n", g_module_error ());
+      exit (1);
+    }
+
+  ((void(*)(void)) f) ();
+}
diff --git a/tests/libmoduletestplugin_b.c b/tests/libmoduletestplugin_b.c
new file mode 100644
index 0000000..26e065d
--- /dev/null
+++ b/tests/libmoduletestplugin_b.c
@@ -0,0 +1,70 @@
+/* libgplugin_b.c - test plugin for testgmodule
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include        <gmodule.h>
+
+G_MODULE_EXPORT gchar* gplugin_b_state;
+
+G_MODULE_EXPORT const gchar*
+g_module_check_init (GModule *module)
+{
+  gplugin_b_state = "check-init";
+
+  return NULL;
+}
+
+G_MODULE_EXPORT void
+g_module_unload (GModule *module)
+{
+  gplugin_b_state = "unloaded";
+}
+
+G_MODULE_EXPORT void
+gplugin_b_func (void)
+{
+  gplugin_b_state = "Hello world";
+}
+
+G_MODULE_EXPORT void
+gplugin_clash_func (void)
+{
+  gplugin_b_state = "plugin clash";
+}
+
+G_MODULE_EXPORT void
+g_clash_func (void)
+{
+  gplugin_b_state = "global clash";
+}
+
+G_MODULE_EXPORT void
+gplugin_say_boo_func (void)
+{
+  gplugin_b_state = "BOOH";
+}
diff --git a/tests/list-test.c b/tests/list-test.c
new file mode 100644
index 0000000..6e274fc
--- /dev/null
+++ b/tests/list-test.c
@@ -0,0 +1,212 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+
+#define DEBUG_MSG(args)
+/* #define DEBUG_MSG(args) g_printerr args ; g_printerr ("\n");  */
+#define PRINT_MSG(args)
+/* #define PRINT_MSG(args) g_print args ; g_print ("\n"); */
+
+#define SIZE       50
+#define NUMBER_MIN 0000
+#define NUMBER_MAX 9999
+
+
+static guint32 array[SIZE];
+
+
+static gint
+sort (gconstpointer p1, gconstpointer p2)
+{
+  gint32 a, b;
+
+  a = GPOINTER_TO_INT (p1);
+  b = GPOINTER_TO_INT (p2);
+
+  return (a > b ? +1 : a == b ? 0 : -1);
+}
+
+/*
+ * glist sort tests
+ */
+static void
+test_list_sort (void)
+{
+  GList *list = NULL;
+  gint   i;
+
+  PRINT_MSG (("testing g_list_sort()"));
+
+  for (i = 0; i < SIZE; i++) {
+    list = g_list_append (list, GINT_TO_POINTER (array[i]));
+  }
+
+  list = g_list_sort (list, sort);
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_list_nth_data (list, i);
+    p2 = g_list_nth_data (list, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("list_sort #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+
+  g_list_free (list);
+}
+
+static void
+test_list_sort_with_data (void)
+{
+  GList *list = NULL;
+  gint   i;
+
+  PRINT_MSG (("testing g_list_sort_with_data()"));
+
+  for (i = 0; i < SIZE; i++) {
+    list = g_list_append (list, GINT_TO_POINTER (array[i]));
+  }
+
+  list = g_list_sort_with_data (list, (GCompareDataFunc)sort, NULL);
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_list_nth_data (list, i);
+    p2 = g_list_nth_data (list, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("list_sort_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+
+  g_list_free (list);
+}
+
+static void
+test_list_insert_sorted (void)
+{
+  GList *list = NULL;
+  gint   i;
+
+  PRINT_MSG (("testing g_list_insert_sorted()"));
+
+  for (i = 0; i < SIZE; i++) {
+    list = g_list_insert_sorted (list, GINT_TO_POINTER (array[i]), sort);
+  }
+
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_list_nth_data (list, i);
+    p2 = g_list_nth_data (list, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("list_insert_sorted #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+
+  g_list_free (list);
+}
+
+static void
+test_list_insert_sorted_with_data (void)
+{
+  GList *list = NULL;
+  gint   i;
+
+  PRINT_MSG (("testing g_list_insert_sorted_with_data()"));
+
+  for (i = 0; i < SIZE; i++) {
+    list = g_list_insert_sorted_with_data (list, 
+					   GINT_TO_POINTER (array[i]), 
+					   (GCompareDataFunc)sort, 
+					   NULL);
+  }
+
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_list_nth_data (list, i);
+    p2 = g_list_nth_data (list, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("list_insert_sorted_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+
+  g_list_free (list);
+}
+
+static void
+test_list_reverse (void)
+{
+  GList *list = NULL;
+  GList *st;
+  gint   nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+  gint   i;
+
+  PRINT_MSG (("testing g_list_reverse()"));
+
+  for (i = 0; i < 10; i++) {
+    list = g_list_append (list, &nums[i]);
+  }
+
+  list = g_list_reverse (list);
+
+  for (i = 0; i < 10; i++) {
+    st = g_list_nth (list, i);
+    g_assert (*((gint*) st->data) == (9 - i));
+  }
+
+  g_list_free (list);
+}
+
+static void
+test_list_nth (void)
+{
+  GList *list = NULL;
+  GList *st;
+  gint   nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+  gint   i;
+
+  PRINT_MSG (("testing g_list_nth()"));
+
+  for (i = 0; i < 10; i++) {
+    list = g_list_append (list, &nums[i]);
+  }
+
+  for (i = 0; i < 10; i++) {
+    st = g_list_nth (list, i);
+    g_assert (*((gint*) st->data) == i);
+  }
+
+  g_list_free (list);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gint i;
+
+  DEBUG_MSG (("debugging messages turned on"));
+
+  DEBUG_MSG (("creating %d random numbers", SIZE));
+
+  /* Create an array of random numbers. */
+  for (i = 0; i < SIZE; i++) {
+    array[i] = g_random_int_range (NUMBER_MIN, NUMBER_MAX);
+    DEBUG_MSG (("number #%3.3d ---> %d", i, array[i]));
+  }
+
+  /* Start tests. */
+  test_list_sort ();
+  test_list_sort_with_data ();
+
+  test_list_insert_sorted ();
+  test_list_insert_sorted_with_data ();
+
+  test_list_reverse ();
+  test_list_nth ();
+
+  PRINT_MSG (("testing finished"));
+
+  return 0;
+}
diff --git a/tests/mainloop-test.c b/tests/mainloop-test.c
new file mode 100644
index 0000000..cfa7f73
--- /dev/null
+++ b/tests/mainloop-test.c
@@ -0,0 +1,438 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <errno.h>
+#include <glib.h>
+#ifdef G_OS_UNIX
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef G_OS_WIN32
+#include <fcntl.h>		/* For _O_BINARY used by pipe() macro */
+#include <io.h>			/* for _pipe() */
+#define pipe(fds) _pipe(fds, 4096, _O_BINARY)
+#endif
+
+#define ITERS 10000
+#define INCREMENT 10
+#define NTHREADS 4
+#define NCRAWLERS 4
+#define CRAWLER_TIMEOUT_RANGE 40
+#define RECURSER_TIMEOUT 50
+
+/* The partial ordering between the context array mutex and
+ * crawler array mutex is that the crawler array mutex cannot
+ * be locked while the context array mutex is locked
+ */
+GPtrArray *context_array;
+GMutex *context_array_mutex;
+GCond *context_array_cond;
+
+GMainLoop *main_loop;
+
+G_LOCK_DEFINE_STATIC (crawler_array_lock);
+GPtrArray *crawler_array;
+
+typedef struct _AddrData AddrData;
+typedef struct _TestData TestData;
+
+struct _AddrData
+{
+  GMainLoop *loop;
+  GIOChannel *dest;
+  gint count;
+};
+
+struct _TestData
+{
+  gint current_val;
+  gint iters;
+  GIOChannel *in;
+};
+
+static void cleanup_crawlers (GMainContext *context);
+
+gboolean
+read_all (GIOChannel *channel, char *buf, gsize len)
+{
+  gsize bytes_read = 0;
+  gsize count;
+  GIOError err;
+
+  while (bytes_read < len)
+    {
+      err = g_io_channel_read (channel, buf + bytes_read, len - bytes_read, &count);
+      if (err)
+	{
+	  if (err != G_IO_ERROR_AGAIN)
+	    return FALSE;
+	}
+      else if (count == 0)
+	return FALSE;
+
+      bytes_read += count;
+    }
+
+  return TRUE;
+}
+
+gboolean
+write_all (GIOChannel *channel, char *buf, gsize len)
+{
+  gsize bytes_written = 0;
+  gsize count;
+  GIOError err;
+
+  while (bytes_written < len)
+    {
+      err = g_io_channel_write (channel, buf + bytes_written, len - bytes_written, &count);
+      if (err && err != G_IO_ERROR_AGAIN)
+	return FALSE;
+
+      bytes_written += count;
+    }
+
+  return TRUE;
+}
+
+gboolean
+adder_callback (GIOChannel   *source,
+		GIOCondition  condition,
+		gpointer      data)
+{
+  char buf1[32];
+  char buf2[32];
+
+  char result[32];
+
+  AddrData *addr_data = data;
+
+  if (!read_all (source, buf1, 32) ||
+      !read_all (source, buf2, 32))
+    {
+      g_main_loop_quit (addr_data->loop);
+      return FALSE;
+    }
+
+  sprintf (result, "%d", atoi(buf1) + atoi(buf2));
+  write_all (addr_data->dest, result, 32);
+  
+  return TRUE;
+}
+
+gboolean
+timeout_callback (gpointer data)
+{
+  AddrData *addr_data = data;
+
+  addr_data->count++;
+  
+  return TRUE;
+}
+
+gpointer
+adder_thread (gpointer data)
+{
+  GMainContext *context;
+  GSource *adder_source;
+  GSource *timeout_source;
+
+  GIOChannel **channels = data;
+  AddrData addr_data;
+
+  context = g_main_context_new ();
+
+  g_mutex_lock (context_array_mutex);
+  
+  g_ptr_array_add (context_array, context);
+
+  if (context_array->len == NTHREADS)
+    g_cond_broadcast (context_array_cond);
+  
+  g_mutex_unlock (context_array_mutex);
+
+  addr_data.dest = channels[1];
+  addr_data.loop = g_main_loop_new (context, FALSE);
+  addr_data.count = 0;
+  
+  adder_source = g_io_create_watch (channels[0], G_IO_IN | G_IO_HUP);
+  g_source_set_callback (adder_source, (GSourceFunc)adder_callback, &addr_data, NULL);
+  g_source_attach (adder_source, context);
+  g_source_unref (adder_source);
+
+  timeout_source = g_timeout_source_new (10);
+  g_source_set_callback (timeout_source, (GSourceFunc)timeout_callback, &addr_data, NULL);
+  g_source_set_priority (timeout_source, G_PRIORITY_HIGH);
+  g_source_attach (timeout_source, context);
+  g_source_unref (timeout_source);
+
+  g_main_loop_run (addr_data.loop);
+
+  g_io_channel_unref (channels[0]);
+  g_io_channel_unref (channels[1]);
+
+  g_free (channels);
+  
+  g_main_loop_unref (addr_data.loop);
+
+#ifdef VERBOSE
+  g_print ("Timeout run %d times\n", addr_data.count);
+#endif
+
+  g_mutex_lock (context_array_mutex);
+  g_ptr_array_remove (context_array, context);
+  if (context_array->len == 0)
+    g_main_loop_quit (main_loop);
+  g_mutex_unlock (context_array_mutex);
+
+  cleanup_crawlers (context);
+
+  return NULL;
+}
+
+void
+io_pipe (GIOChannel **channels)
+{
+  gint fds[2];
+
+  if (pipe(fds) < 0)
+    {
+      g_warning ("Cannot create pipe %s\n", g_strerror (errno));
+      exit (1);
+    }
+
+  channels[0] = g_io_channel_unix_new (fds[0]);
+  channels[1] = g_io_channel_unix_new (fds[1]);
+
+  g_io_channel_set_close_on_unref (channels[0], TRUE);
+  g_io_channel_set_close_on_unref (channels[1], TRUE);
+}
+
+void
+do_add (GIOChannel *in, gint a, gint b)
+{
+  char buf1[32];
+  char buf2[32];
+
+  sprintf (buf1, "%d", a);
+  sprintf (buf2, "%d", b);
+
+  write_all (in, buf1, 32);
+  write_all (in, buf2, 32);
+}
+
+gboolean
+adder_response (GIOChannel   *source,
+		GIOCondition  condition,
+		gpointer      data)
+{
+  char result[32];
+  TestData *test_data = data;
+  
+  if (!read_all (source, result, 32))
+    return FALSE;
+
+  test_data->current_val = atoi (result);
+  test_data->iters--;
+
+  if (test_data->iters == 0)
+    {
+      if (test_data->current_val != ITERS * INCREMENT)
+	{
+	  g_print ("Addition failed: %d != %d\n",
+		   test_data->current_val, ITERS * INCREMENT);
+	  exit (1);
+	}
+
+      g_io_channel_unref (source);
+      g_io_channel_unref (test_data->in);
+
+      g_free (test_data);
+      
+      return FALSE;
+    }
+  
+  do_add (test_data->in, test_data->current_val, INCREMENT);
+
+  return TRUE;
+}
+
+void
+create_adder_thread (void)
+{
+  GError *err = NULL;
+  TestData *test_data;
+  
+  GIOChannel *in_channels[2];
+  GIOChannel *out_channels[2];
+
+  GIOChannel **sub_channels;
+
+  sub_channels = g_new (GIOChannel *, 2);
+
+  io_pipe (in_channels);
+  io_pipe (out_channels);
+
+  sub_channels[0] = in_channels[0];
+  sub_channels[1] = out_channels[1];
+
+  g_thread_create (adder_thread, sub_channels, FALSE, &err);
+
+  if (err)
+    {
+      g_warning ("Cannot create thread: %s", err->message);
+      exit (1);
+    }
+
+  test_data = g_new (TestData, 1);
+  test_data->in = in_channels[1];
+  test_data->current_val = 0;
+  test_data->iters = ITERS;
+
+  g_io_add_watch (out_channels[0], G_IO_IN | G_IO_HUP,
+		  adder_response, test_data);
+  
+  do_add (test_data->in, test_data->current_val, INCREMENT);
+}
+
+static void create_crawler (void);
+
+static void
+remove_crawler (void)
+{
+  GSource *other_source;
+
+  if (crawler_array->len > 0)
+    {
+      other_source = crawler_array->pdata[g_random_int_range (0, crawler_array->len)];
+      g_source_destroy (other_source);
+      g_assert (g_ptr_array_remove_fast (crawler_array, other_source));
+    }
+}
+
+static gint
+crawler_callback (gpointer data)
+{
+  GSource *source = data;
+
+  G_LOCK (crawler_array_lock);
+  
+  if (!g_ptr_array_remove_fast (crawler_array, source))
+    remove_crawler();
+
+  remove_crawler();
+  G_UNLOCK (crawler_array_lock);
+	    
+  create_crawler();
+  create_crawler();
+
+  return FALSE;
+}
+
+static void
+create_crawler (void)
+{
+  GSource *source = g_timeout_source_new (g_random_int_range (0, CRAWLER_TIMEOUT_RANGE));
+  g_source_set_callback (source, (GSourceFunc)crawler_callback, source, NULL);
+
+  G_LOCK (crawler_array_lock);
+  g_ptr_array_add (crawler_array, source);
+  
+  g_mutex_lock (context_array_mutex);
+  g_source_attach (source, context_array->pdata[g_random_int_range (0, context_array->len)]);
+  g_source_unref (source);
+  g_mutex_unlock (context_array_mutex);
+
+  G_UNLOCK (crawler_array_lock);
+}
+
+static void
+cleanup_crawlers (GMainContext *context)
+{
+  gint i;
+  
+  G_LOCK (crawler_array_lock);
+  for (i=0; i < crawler_array->len; i++)
+    {
+      if (g_source_get_context (crawler_array->pdata[i]) == context)
+	{
+	  g_source_destroy (g_ptr_array_remove_index (crawler_array, i));
+	  i--;
+	}
+    }
+  G_UNLOCK (crawler_array_lock);
+}
+
+static gboolean
+recurser_idle (gpointer data)
+{
+  GMainContext *context = data;
+  gint i;
+
+  for (i = 0; i < 10; i++)
+    g_main_context_iteration (context, FALSE);
+
+  return FALSE;
+}
+
+static gboolean
+recurser_start (gpointer data)
+{
+  GMainContext *context;
+  GSource *source;
+  
+  g_mutex_lock (context_array_mutex);
+  context = context_array->pdata[g_random_int_range (0, context_array->len)];
+  source = g_idle_source_new ();
+  g_source_set_callback (source, recurser_idle, context, NULL);
+  g_source_attach (source, context);
+  g_source_unref (source);
+  g_mutex_unlock (context_array_mutex);
+
+  return TRUE;
+}
+
+int 
+main (int   argc,
+      char *argv[])
+{
+  /* Only run the test, if threads are enabled and a default thread
+     implementation is available */
+#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
+  gint i;
+
+  g_thread_init (NULL);
+
+  context_array = g_ptr_array_new ();
+  context_array_mutex = g_mutex_new ();
+  context_array_cond = g_cond_new (); 
+
+  crawler_array = g_ptr_array_new ();
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+
+  for (i = 0; i < NTHREADS; i++)
+    create_adder_thread ();
+
+  /* Wait for all threads to start
+   */
+  g_mutex_lock (context_array_mutex);
+  
+  if (context_array->len < NTHREADS)
+    g_cond_wait (context_array_cond, context_array_mutex);
+  
+  g_mutex_unlock (context_array_mutex);
+  
+  for (i = 0; i < NCRAWLERS; i++)
+    create_crawler ();
+
+  g_timeout_add (RECURSER_TIMEOUT, recurser_start, NULL);
+
+  g_main_loop_run (main_loop);
+  g_main_loop_unref (main_loop);
+
+#endif
+  return 0;
+}
diff --git a/tests/makefile.msc.in b/tests/makefile.msc.in
new file mode 100644
index 0000000..d801fa0
--- /dev/null
+++ b/tests/makefile.msc.in
@@ -0,0 +1,106 @@
+## Makefile for building the GLib test programs with Microsoft C
+## Use: nmake -f makefile.msc check
+
+TOP = ..\..
+
+!INCLUDE ..\build\win32\make.msc
+
+################################################################
+
+INCLUDES = -FImsvc_recommended_pragmas.h -I .. -I ..\glib -I ..\gmodule
+DEFINES = -DHAVE_CONFIG_H -DENABLE_REGEX
+
+NONAUTOMATIC_TESTS = \
+	testglib.exe	\
+	testgdate.exe	\
+	testgdateparser.exe \
+	unicode-normalize.exe \
+	unicode-collate.exe
+
+TESTS = \
+	atomic-test.exe \
+	array-test.exe	\
+	asyncqueue-test.exe \
+	base64-test.exe \
+	bit-test.exe \
+	bookmarkfile-test.exe \
+	child-test.exe \
+	checksum-test.exe \
+	completion-test.exe \
+	convert-test.exe \
+	date-test.exe	\
+	dirname-test.exe \
+	env-test.exe \
+	errorcheck-mutex-test.exe \
+	file-test.exe \
+	gio-test.exe	\
+	iochannel-test.exe \
+	hash-test.exe	\
+	keyfile-test.exe \
+	list-test.exe	\
+	mainloop-test.exe \
+	mapping-test.exe \
+	markup-escape-test.exe \
+	markup-test.exe	\
+#main?	memchunks.exe \
+	module-test.exe	\
+	node-test.exe	\
+	option-test.exe \
+	patterntest.exe \
+	printf-test.exe \
+	queue-test.exe	\
+	qsort-test.exe \
+	rand-test.exe	\
+	regex-test.exe \
+	relation-test.exe \
+#_?	sequence-test.exe \
+	shell-test.exe	\
+	slice-color.exe \
+	slice-test.exe	\
+	slist-test.exe	\
+	spawn-test.exe	\
+# strfunc-test doesn't compile with MSVC
+#	strfunc-test.exe\
+	string-test.exe	\
+# strtod-test doesn't either
+#	strtod-test.exe \
+	thread-test.exe	\
+	threadpool-test.exe\
+	tree-test.exe	\
+	type-test.exe	\
+	unicode-caseconv.exe \
+	unicode-encoding.exe \
+	utf8-validate.exe \
+	utf8-pointer.exe \
+	uri-test.exe \
+	\

+	gio-ls.exe

+
+DLLS = \
+	libmoduletestplugin_a.dll \
+	libmoduletestplugin_b.dll
+
+all :	$(TESTS) $(NONAUTOMATIC_TESTS) $(DLLS)
+
+.c.exe :
+	$(CC) $(CFLAGS) -c $<
+	$(CC) $(CFLAGS) -Fe$@ $< ..\glib\glib-2.0.lib ..\gmodule\gmodule-2.0.lib ..\gthread\gthread-2.0.lib $(LDFLAGS) user32.lib /subsystem:console
+
+gio-ls.exe : gio-ls.obj

+	$(CC) $(CFLAGS) -Fe$@ gio-ls.obj \

+	..\glib\glib-2.0.lib ..\gmodule\gmodule-2.0.lib ..\gthread\gthread-2.0.lib \

+	..\gobject\gobject-2.0.lib ..\gio\gio-2.0.lib \

+	$(LDFLAGS) user32.lib /subsystem:console

+

+slice-test.exe : memchunks.obj slice-test.obj 
+	$(CC) $(CFLAGS) -Fe$@ memchunks.obj slice-test.obj \
+	..\glib\glib-2.0.lib ..\gmodule\gmodule-2.0.lib ..\gthread\gthread-2.0.lib $(LDFLAGS) user32.lib /subsystem:console
+	
+libmoduletestplugin_a.dll : libmoduletestplugin_a.obj
+	$(CC) $(CFLAGS) -LD libmoduletestplugin_a.obj ..\gmodule\gmodule-2.0.lib ..\glib\glib-2.0.lib $(LDFLAGS)
+
+libmoduletestplugin_b.dll : libmoduletestplugin_b.obj
+	$(CC) $(CFLAGS) -LD libmoduletestplugin_b.obj ..\gmodule\gmodule-2.0.lib ..\glib\glib-2.0.lib $(LDFLAGS)
+
+check:	all
+	for %p in ($(TESTS)) do set PATH=..\glib;..\gmodule;..\gobject;..\gthread;%PATH% && %p
diff --git a/tests/mapping-test.c b/tests/mapping-test.c
new file mode 100644
index 0000000..1a10b19
--- /dev/null
+++ b/tests/mapping-test.c
@@ -0,0 +1,256 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2005 Matthias Clasen
+ *
+ * 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 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.
+ */
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <signal.h>
+
+#include "glib.h"
+#include "gstdio.h"
+
+static gchar *dir, *filename, *displayname, *childname;
+
+static gboolean stop = FALSE;
+
+#ifndef G_OS_WIN32
+
+static void
+handle_usr1 (int signum)
+{
+  stop = TRUE;
+}
+
+#endif
+
+static gboolean
+check_stop (gpointer data)
+{
+  GMainLoop *loop = data;
+
+#ifdef G_OS_WIN32
+  stop = g_file_test ("STOP", G_FILE_TEST_EXISTS);
+#endif
+
+  if (stop)
+    g_main_loop_quit (loop);
+
+  return TRUE;
+}
+
+static void
+write_or_die (const gchar *filename,
+	      const gchar *contents,
+	      gssize       length)
+{
+  GError *error = NULL;
+  gchar *displayname;    
+
+  if (!g_file_set_contents (filename, contents, length, &error)) 
+    {
+      displayname = g_filename_display_name (childname);
+      g_print ("failed to write '%s': %s\n", 
+	       displayname, error->message);
+      exit (1);
+    }
+}
+
+static GMappedFile *
+map_or_die (const gchar *filename,
+	    gboolean     writable)
+{
+  GError *error = NULL;
+  GMappedFile *map;
+  gchar *displayname;
+
+  map = g_mapped_file_new (filename, writable, &error);
+  if (!map)
+    {
+      displayname = g_filename_display_name (childname);
+      g_print ("failed to map '%s' non-writable, shared: %s\n", 
+	       displayname, error->message);
+      exit (1);
+    }
+
+  return map;
+}
+	    
+static int
+child_main (int argc, char *argv[])
+{
+  GMappedFile *map;
+  GMainLoop *loop;
+
+  map = map_or_die (filename, FALSE);
+  
+  loop = g_main_loop_new (NULL, FALSE);
+
+#ifndef G_OS_WIN32
+  signal (SIGUSR1, handle_usr1);
+#endif
+  g_idle_add (check_stop, loop);
+  g_main_loop_run (loop);
+
+  write_or_die (childname, 
+		g_mapped_file_get_contents (map),
+		g_mapped_file_get_length (map));
+
+  return 0;
+}
+
+static void
+test_mapping (void)
+{
+  GMappedFile *map;
+
+  write_or_die (filename, "ABC", -1);
+
+  map = map_or_die (filename, FALSE);
+  g_assert (g_mapped_file_get_length (map) == 3);
+  g_mapped_file_free (map);
+
+  map = map_or_die (filename, TRUE);
+  g_assert (g_mapped_file_get_length (map) == 3);
+  g_mapped_file_free (map);
+}
+
+static void 
+test_private (void)
+{
+  GError *error = NULL;
+  GMappedFile *map;
+  gchar *buffer;
+  gsize len;
+
+  write_or_die (filename, "ABC", -1);
+  map = map_or_die (filename, TRUE);
+
+  buffer = (gchar *)g_mapped_file_get_contents (map);
+  buffer[0] = '1';
+  buffer[1] = '2';
+  buffer[2] = '3';
+  g_mapped_file_free (map);
+
+  if (!g_file_get_contents (filename, &buffer, &len, &error))
+    {
+      g_print ("failed to read '%s': %s\n", 
+	       displayname, error->message);
+      exit (1);
+      
+    }
+  g_assert (len == 3);
+  g_assert (strcmp (buffer, "ABC") == 0);
+  g_free (buffer);
+
+}
+
+static void
+test_child_private (gchar *argv0)
+{
+  GError *error = NULL;
+  GMappedFile *map;
+  gchar *buffer;
+  gsize len;
+  gchar *child_argv[3];
+  GPid  child_pid;
+  
+#ifdef G_OS_WIN32
+  g_remove ("STOP");
+  g_assert (!g_file_test ("STOP", G_FILE_TEST_EXISTS));
+#endif
+
+  write_or_die (filename, "ABC", -1);
+  map = map_or_die (filename, TRUE);
+
+  child_argv[0] = argv0;
+  child_argv[1] = "mapchild";
+  child_argv[2] = NULL;
+  if (!g_spawn_async (dir, child_argv, NULL,
+		      0, NULL, NULL, &child_pid, &error))
+    {
+      g_print ("failed to spawn child: %s\n", 
+	       error->message);
+      exit (1);            
+    }
+
+  /* give the child some time to set up its mapping */
+  g_usleep (2000000);
+
+  buffer = (gchar *)g_mapped_file_get_contents (map);
+  buffer[0] = '1';
+  buffer[1] = '2';
+  buffer[2] = '3';
+  g_mapped_file_free (map);
+
+#ifndef G_OS_WIN32
+  kill (child_pid, SIGUSR1);
+#else
+  g_file_set_contents ("STOP", "Hey there\n", -1, NULL);
+#endif
+
+  /* give the child some time to write the file */
+  g_usleep (2000000);
+
+  if (!g_file_get_contents (childname, &buffer, &len, &error))
+    {
+      gchar *name;
+
+      name = g_filename_display_name (childname);
+      g_print ("failed to read '%s': %s\n", name, error->message);
+      exit (1);      
+    }
+  g_assert (len == 3);
+  g_assert (strcmp (buffer, "ABC") == 0);
+  g_free (buffer);
+}
+
+static int 
+parent_main (int   argc,
+	     char *argv[])
+{
+  /* test mapping with various flag combinations */
+  test_mapping ();
+
+  /* test private modification */
+  test_private ();
+
+  /* test multiple clients, non-shared */
+  test_child_private (argv[0]);
+
+  return 0;
+}
+
+int
+main (int argc, 
+      char *argv[])
+{
+  dir = g_get_current_dir ();
+  filename = g_build_filename (dir, "maptest", NULL);
+  displayname = g_filename_display_name (filename);
+  childname = g_build_filename (dir, "mapchild", NULL);
+
+  if (argc > 1)
+    return child_main (argc, argv);
+  else 
+    return parent_main (argc, argv);
+}
diff --git a/tests/markup-collect.c b/tests/markup-collect.c
new file mode 100644
index 0000000..70c4b71
--- /dev/null
+++ b/tests/markup-collect.c
@@ -0,0 +1,221 @@
+/* 
+ * Copyright © 2007 Ryan Lortie
+ * 
+ * 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; either version 2 of the
+ * License, or (at your option) any later version.
+ * 
+ * See the included COPYING file for more information.
+ */
+
+#include <string.h>
+#include <glib.h>
+
+static void
+start (GMarkupParseContext  *context,
+       const char           *element_name,
+       const char          **attribute_names,
+       const char          **attribute_values,
+       gpointer              user_data,
+       GError              **error)
+{
+  GString *string = user_data;
+  gboolean result;
+
+#define collect(...) \
+  g_markup_collect_attributes (element_name, attribute_names, \
+                               attribute_values, error, __VA_ARGS__, \
+                               G_MARKUP_COLLECT_INVALID)
+#define BOOL    G_MARKUP_COLLECT_BOOLEAN
+#define OPTBOOL G_MARKUP_COLLECT_BOOLEAN | G_MARKUP_COLLECT_OPTIONAL
+#define TRI     G_MARKUP_COLLECT_TRISTATE
+#define STR     G_MARKUP_COLLECT_STRING
+#define STRDUP  G_MARKUP_COLLECT_STRDUP
+#define OPTSTR  G_MARKUP_COLLECT_STRING | G_MARKUP_COLLECT_OPTIONAL
+#define OPTDUP  G_MARKUP_COLLECT_STRDUP | G_MARKUP_COLLECT_OPTIONAL
+#define n(x)    ((x)?(x):"(null)")
+
+  if (strcmp (element_name, "bool") == 0)
+    {
+      gboolean mb = 2, ob = 2, tri = 2;
+
+      result = collect (BOOL,    "mb", &mb,
+                        OPTBOOL, "ob", &ob,
+                        TRI,     "tri", &tri);
+
+      g_assert (result ||
+                (mb == FALSE && ob == FALSE && tri != TRUE && tri != FALSE));
+
+      if (tri != FALSE && tri != TRUE)
+        tri = -1;
+
+      g_string_append_printf (string, "<bool(%d) %d %d %d>",
+                              result, mb, ob, tri);
+    }
+
+  else if (strcmp (element_name, "str") == 0)
+    {
+      const char *cm, *co;
+      char *am, *ao;
+
+      result = collect (STR,    "cm", &cm,
+                        STRDUP, "am", &am,
+                        OPTDUP, "ao", &ao,
+                        OPTSTR, "co", &co);
+
+      g_assert (result ||
+                (cm == NULL && am == NULL && ao == NULL && co == NULL));
+
+      g_string_append_printf (string, "<str(%d) %s %s %s %s>",
+                              result, n (cm), n (am), n (ao), n (co));
+
+      g_free (am);
+      g_free (ao);
+    }
+}
+
+static GMarkupParser parser = { start };
+
+struct test
+{
+  const char   *document;
+  const char   *result;
+  GMarkupError  error_code;
+  const char   *error_info;
+};
+
+static struct test tests[] =
+{
+  { "<bool mb='y'>", "<bool(1) 1 0 -1>",
+    G_MARKUP_ERROR_PARSE, "'bool'" },
+
+  { "<bool mb='false'/>", "<bool(1) 0 0 -1>" },
+  { "<bool mb='true'/>", "<bool(1) 1 0 -1>" },
+  { "<bool mb='t' ob='f' tri='1'/>", "<bool(1) 1 0 1>" },
+  { "<bool mb='y' ob='n' tri='0'/>", "<bool(1) 1 0 0>" },
+
+  { "<bool ob='y'/>", "<bool(0) 0 0 -1>",
+    G_MARKUP_ERROR_MISSING_ATTRIBUTE, "'mb'" },
+
+  { "<bool mb='y' mb='y'/>", "<bool(0) 0 0 -1>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'mb'" },
+
+  { "<bool mb='y' tri='y' tri='n'/>", "<bool(0) 0 0 -1>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'tri'" },
+
+  { "<str cm='x' am='y'/>", "<str(1) x y (null) (null)>" },
+
+  { "<str am='x' co='y'/>", "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_MISSING_ATTRIBUTE, "'cm'" },
+
+  { "<str am='x'/>", "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_MISSING_ATTRIBUTE, "'cm'" },
+
+  { "<str am='x' cm='x' am='y'/>", "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'am'" },
+
+  { "<str am='x' qm='y' cm='x'/>", "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "'qm'" },
+
+  { "<str am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' cm='x'/>", "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'am'" },
+
+  { "<str cm='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x'/>", "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'am'" },
+
+  { "<str a='x' b='x' c='x' d='x' e='x' f='x' g='x' h='x' i='x' j='x' k='x' l='x' m='x' n='x' o='x' p='x' q='x' r='x' s='x' t='x' u='x' v='x' w='x' x='x' y='x' z='x' aa='x' bb='x' cc='x' dd='x' ee='x' ff='x' gg='x' hh='x' ii='x' jj='x' kk='x' ll='x' mm='x' nn='x' oo='x' pp='x' qq='x' rr='x' ss='x' tt='x' uu='x' vv='x' ww='x' xx='x' yy='x' zz='x' am='x' cm='x'/>",
+    "<str(0) (null) (null) (null) (null)>",
+    G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "'a'" },
+
+  { "<bool mb='ja'/>", "<bool(0) 0 0 -1>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'mb'" },
+
+  { "<bool mb='nein'/>", "<bool(0) 0 0 -1>",
+    G_MARKUP_ERROR_INVALID_CONTENT, "'mb'" }
+};
+
+int
+main (int argc, char **argv)
+{
+  gboolean verbose = FALSE;
+  int i;
+
+  if (argc > 1)
+    {
+      if (argc != 2 || strcmp (argv[1], "-v") != 0)
+        {
+          g_print ("error: call with no arguments or '-v' for verbose\n");
+          return 1;
+        }
+
+      verbose = TRUE;
+    }
+
+  for (i = 0; i < G_N_ELEMENTS (tests); i++)
+    {
+      GMarkupParseContext *ctx;
+      GError *error = NULL;
+      GString *string;
+      gboolean result;
+
+      string = g_string_new ("");
+      ctx = g_markup_parse_context_new (&parser, 0, string, NULL);
+      result = g_markup_parse_context_parse (ctx,
+                                             tests[i].document,
+                                             -1, &error);
+      if (result)
+        result = g_markup_parse_context_end_parse (ctx, &error);
+
+      if (verbose)
+        g_print ("%d: %s:\n  (error %d, \"%s\")\n  %s\n\n",
+                 i, tests[i].document,
+                 error ? error->code : 0,
+                 error ? error->message : "(no error)",
+                 string->str);
+
+      if (result)
+        {
+          if (error != NULL)
+            g_error ("parser successful but error is set: "
+                     "%s(%d) '%s'", g_quark_to_string (error->domain),
+                     error->code, error->message);
+
+          if (tests[i].error_code != 0)
+            g_error ("parser succeeded on test %d ('%s') but "
+                     "we expected a failure with code %d\n", i,
+                     tests[i].document, tests[i].error_code);
+        }
+      else
+        {
+          if (error->domain != G_MARKUP_ERROR)
+            g_error ("error occured on test %d ('%s') but is not in "
+                     "the GMarkupError domain, but rather '%s'", i,
+                     tests[i].document, g_quark_to_string (error->domain));
+
+          if (error->code != tests[i].error_code)
+            g_error ("failure expected with test %d ('%s') but it "
+                    "has error code %d (we expected code %d)", i,
+                    tests[i].document, error->code, tests[i].error_code);
+
+          if (strstr (error->message, tests[i].error_info) == NULL)
+            g_error ("failure message on test %d ('%s') fails "
+                     "to mention '%s' in the error message", i,
+                     tests[i].document, tests[i].error_info);
+        }
+
+      if (strcmp (tests[i].result, string->str) != 0)
+        g_error ("result on test %d ('%s') expected to be '%s' "
+                 "but came out as '%s'", i, tests[i].document,
+                 tests[i].result, string->str);
+
+      g_markup_parse_context_free (ctx);
+      g_string_free (string, TRUE);
+      g_clear_error (&error);
+    }
+
+  if (verbose)
+    g_print ("\n*** all tests passed ***\n\n");
+
+  return 0;
+}
diff --git a/tests/markup-escape-test.c b/tests/markup-escape-test.c
new file mode 100644
index 0000000..2734162
--- /dev/null
+++ b/tests/markup-escape-test.c
@@ -0,0 +1,132 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdarg.h>
+#include <string.h>
+#include <glib.h>
+
+static void test_format (const gchar *format,
+			 const gchar *expected, ...) G_GNUC_PRINTF (1, 3);
+
+static gboolean error = FALSE;
+
+static void
+test (const gchar *original,
+      const gchar *expected)
+{
+  gchar *result = g_markup_escape_text (original, -1);
+
+  if (strcmp (result, expected) != 0)
+    {
+      g_printerr ("g_markup_escape_text(): expected '%s', got '%s'\n",
+		  expected, result);
+      error = TRUE;
+    }
+
+  g_free (result);
+}
+
+static void
+test_unichar (gunichar c, 
+              gboolean entity)
+{
+  gint len;
+  gchar outbuf[7], expected[12];
+
+  len = g_unichar_to_utf8 (c, outbuf);
+  outbuf[len] = 0;
+
+  if (entity)
+    g_snprintf (expected, 12, "&#x%x;", c);
+  else
+    strcpy (expected, outbuf);
+
+  test (outbuf, expected);
+}
+
+static void
+test_format (const gchar *format,
+	     const gchar *expected,
+	     ...)
+{
+  gchar *result;
+  
+  va_list args;
+  
+  va_start (args, expected);
+  result = g_markup_vprintf_escaped (format, args);
+  va_end (args);
+
+  if (strcmp (result, expected) != 0)
+    {
+      g_printerr ("g_markup_printf_escaped(): expected '%s', got '%s'\n",
+		  expected, result);
+      error = TRUE;
+    }
+
+  g_free (result);
+}
+
+int main (int argc, char **argv)
+{
+  /* Tests for g_markup_escape_text() */
+  test ("&", "&amp;");
+  test ("<", "&lt;");
+  test (">", "&gt;");
+  test ("'", "&apos;");
+  test ("\"", "&quot;");
+  
+  test ("", "");
+  test ("A", "A");
+  test ("A&", "A&amp;");
+  test ("&A", "&amp;A");
+  test ("A&A", "A&amp;A");
+  test ("&&A", "&amp;&amp;A");
+  test ("A&&", "A&amp;&amp;");
+  test ("A&&A", "A&amp;&amp;A");
+  test ("A&A&A", "A&amp;A&amp;A");
+  test ("A&#23;A", "A&amp;#23;A");
+  test ("A&#xa;A", "A&amp;#xa;A");
+  test_unichar (0x1, TRUE);
+  test_unichar (0x8, TRUE);
+  test_unichar (0x9, FALSE);
+  test_unichar (0xa, FALSE);
+  test_unichar (0xb, TRUE);
+  test_unichar (0xc, TRUE);
+  test_unichar (0xd, FALSE);
+  test_unichar (0xe, TRUE);
+  test_unichar (0x1f, TRUE);
+  test_unichar (0x20, FALSE);
+  test_unichar (0x7e, FALSE);
+  test_unichar (0x7f, TRUE);
+  test_unichar (0x84, TRUE);
+  test_unichar (0x85, FALSE);
+  test_unichar (0x86, TRUE);
+  test_unichar (0x9f, TRUE);
+  test_unichar (0xa0, FALSE);
+  
+  /* Tests for g_markup_printf_escaped() */
+  test_format ("A", "A");
+  test_format ("A%s", "A&amp;", "&");
+  test_format ("%sA", "&amp;A", "&");
+  test_format ("A%sA", "A&amp;A", "&");
+  test_format ("%s%sA", "&amp;&amp;A", "&", "&");
+  test_format ("A%s%s", "A&amp;&amp;", "&", "&");
+  test_format ("A%s%sA", "A&amp;&amp;A", "&", "&");
+  test_format ("A%sA%sA", "A&amp;A&amp;A", "&", "&");
+  
+  test_format ("%s", "&lt;B&gt;&amp;",
+	       "<B>&");
+  test_format ("%c%c", "&lt;&amp;",
+	       '<', '&');
+  test_format (".%c.%c.", ".&lt;.&amp;.",
+	       '<', '&');
+  test_format ("%s", "",
+	       "");
+  test_format ("%-5s", "A    ",
+	       "A");
+  test_format ("%2$s%1$s", "B.A.",
+	       "A.", "B.");
+  
+  return error ? 1 : 0;
+}
diff --git a/tests/markup-test.c b/tests/markup-test.c
new file mode 100644
index 0000000..6d5f44b
--- /dev/null
+++ b/tests/markup-test.c
@@ -0,0 +1,214 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdio.h>
+#include <glib.h>
+
+static int depth = 0;
+
+static void
+indent (int extra)
+{
+  int i = 0;
+  while (i < depth)
+    {
+      fputs ("  ", stdout);
+      ++i;
+    }
+}
+
+static void
+start_element_handler  (GMarkupParseContext *context,
+                        const gchar         *element_name,
+                        const gchar        **attribute_names,
+                        const gchar        **attribute_values,
+                        gpointer             user_data,
+                        GError             **error)
+{
+  int i;
+  
+  indent (0);
+  printf ("ELEMENT '%s'\n", element_name);
+
+  i = 0;
+  while (attribute_names[i] != NULL)
+    {
+      indent (1);
+
+      printf ("%s=\"%s\"\n",
+              attribute_names[i],
+              attribute_values[i]);
+      
+      ++i;
+    }
+  
+  ++depth;
+}
+
+static void
+end_element_handler    (GMarkupParseContext *context,
+                        const gchar         *element_name,
+                        gpointer             user_data,
+                        GError             **error)
+{
+  --depth;
+  indent (0);
+  printf ("END '%s'\n", element_name);
+  }
+
+static void
+text_handler                      (GMarkupParseContext *context,
+                        const gchar         *text,
+                        gsize                text_len,
+                        gpointer             user_data,
+                        GError             **error)
+{
+  indent (0);
+  printf ("TEXT '%.*s'\n", (int)text_len, text);
+}
+
+
+static void
+passthrough_handler    (GMarkupParseContext *context,
+                        const gchar         *passthrough_text,
+                        gsize                text_len,
+                        gpointer             user_data,
+                        GError             **error)
+{
+  indent (0);
+
+  printf ("PASS '%.*s'\n", (int)text_len, passthrough_text);
+}
+
+static void
+error_handler          (GMarkupParseContext *context,
+                        GError              *error,
+                        gpointer             user_data)
+{
+  fprintf (stderr, " %s\n", error->message);
+}
+
+static const GMarkupParser parser = {
+  start_element_handler,
+  end_element_handler,
+  text_handler,
+  passthrough_handler,
+  error_handler
+};
+
+static const GMarkupParser silent_parser = {
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  error_handler
+};
+
+static int
+test_in_chunks (const gchar *contents,
+                gint         length,
+                gint         chunk_size)
+{
+  GMarkupParseContext *context;
+  int i = 0;
+  
+  context = g_markup_parse_context_new (&silent_parser, 0, NULL, NULL);
+
+  while (i < length)
+    {
+      int this_chunk = MIN (length - i, chunk_size);
+
+      if (!g_markup_parse_context_parse (context,
+                                         contents + i,
+                                         this_chunk,
+                                         NULL))
+        {
+          g_markup_parse_context_free (context);
+          return 1;
+        }
+
+      i += this_chunk;
+    }
+      
+  if (!g_markup_parse_context_end_parse (context, NULL))
+    {
+      g_markup_parse_context_free (context);
+      return 1;
+    }
+
+  g_markup_parse_context_free (context);
+
+  return 0;
+}
+
+static int
+test_file (const gchar *filename)
+{
+  gchar *contents;
+  gsize  length;
+  GError *error;
+  GMarkupParseContext *context;
+  
+  error = NULL;
+  if (!g_file_get_contents (filename,
+                            &contents,
+                            &length,
+                            &error))
+    {
+      fprintf (stderr, "%s\n", error->message);
+      g_error_free (error);
+      return 1;
+    }
+
+  context = g_markup_parse_context_new (&parser, 0, NULL, NULL);
+
+  if (!g_markup_parse_context_parse (context, contents, length, NULL))
+    {
+      g_markup_parse_context_free (context);
+      return 1;
+    }
+
+  if (!g_markup_parse_context_end_parse (context, NULL))
+    {
+      g_markup_parse_context_free (context);
+      return 1;
+    }
+
+  g_markup_parse_context_free (context);
+
+  /* A byte at a time */
+  if (test_in_chunks (contents, length, 1) != 0)
+    return 1;
+
+  /* 2 bytes */
+  if (test_in_chunks (contents, length, 2) != 0)
+    return 1;
+
+  /*5 bytes */
+  if (test_in_chunks (contents, length, 5) != 0)
+    return 1;
+  
+  /* 12 bytes */
+  if (test_in_chunks (contents, length, 12) != 0)
+    return 1;
+  
+  /* 1024 bytes */
+  if (test_in_chunks (contents, length, 1024) != 0)
+    return 1;
+
+  return 0;
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  if (argc > 1)
+    return test_file (argv[1]);
+  else
+    {
+      fprintf (stderr, "Give a markup file on the command line\n");
+      return 1;
+    }
+}
+
diff --git a/tests/markups/expected-1 b/tests/markups/expected-1
new file mode 100644
index 0000000..8b6cdd7
--- /dev/null
+++ b/tests/markups/expected-1
@@ -0,0 +1,37 @@
+PASS '<!-- Comment -->'
+PASS '<?PI ?>'
+ELEMENT 'foobar'
+  TEXT '
+'
+  ELEMENT 'e1'
+    TEXT 'Hi & this is some text inside an element Two 'E' chars as character refs: E E and some 'J': J J'
+  END 'e1'
+  TEXT '
+'
+  ELEMENT 'e2:foo'
+    TEXT ' Text '
+    ELEMENT 'childfree'
+    END 'childfree'
+    TEXT ' with some '
+    ELEMENT 'nested'
+      TEXT 'nested elements'
+    END 'nested'
+    TEXT ' and entities "&  < >> ' and whitespace    '
+  END 'e2:foo'
+  TEXT '
+'
+  ELEMENT 'tag'
+  ab="fo<o"
+  bar="foo"
+  baz="blah"
+    TEXT 'This element has attributes'
+  END 'tag'
+  TEXT '
+'
+  ELEMENT 'nochildren'
+  a="b"
+  xyz="qrs"
+  END 'nochildren'
+  TEXT '
+'
+END 'foobar'
diff --git a/tests/markups/expected-10 b/tests/markups/expected-10
new file mode 100644
index 0000000..e7b8af8
--- /dev/null
+++ b/tests/markups/expected-10
@@ -0,0 +1,6 @@
+ELEMENT 'foo'
+bar="baz"
+bar2="baz2"
+bar3="baz3"
+  TEXT 'data'
+END 'foo'
diff --git a/tests/markups/expected-11 b/tests/markups/expected-11
new file mode 100644
index 0000000..7810394
--- /dev/null
+++ b/tests/markups/expected-11
@@ -0,0 +1,3 @@
+ELEMENT 'foo'
+  TEXT 'data'
+END 'foo'
diff --git a/tests/markups/expected-2 b/tests/markups/expected-2
new file mode 100644
index 0000000..82a531a
--- /dev/null
+++ b/tests/markups/expected-2
@@ -0,0 +1,51 @@
+ELEMENT 'foobar'
+  TEXT '
+Παν語
+
+This is a list of ways to say hello in various languages. Its purpose is to illustrate a number of scripts.
+
+(Converted into UTF-8)
+
+---------------------------------------------------------
+Arabic	السلام عليكم
+Czech	(česky)	Dobrý den
+Danish	(Dansk)	Hej, Goddag
+English	Hello
+Esperanto	Saluton
+Estonian	Tere, Tervist
+FORTRAN	PROGRAM
+Finnish	(Suomi)	Hei
+French	(Français)	Bonjour, Salut
+German	(Deutsch Nord)	Guten Tag
+German	(Deutsch Süd)	Grüß Gott
+Greek	(Ελληνικά)	Γειά σας
+Hebrew	שלום
+Hindi	नमस्ते, नमस्कार।
+Italiano	Ciao, Buon giorno
+Maltese	Ċaw, Saħħa
+Nederlands, Vlaams	Hallo, Dag
+Norwegian	(Norsk)	Hei, God dag
+Polish	Dzień dobry, Hej
+Russian	(Русский)	Здравствуйте!‎
+Slovak	Dobrý deň
+Spanish	(Español)	‎¡Hola!‎
+Swedish	(Svenska)	Hej, Goddag
+Thai	(ภาษาไทย)	สวัสดีครับ, สวัสดีค่ะ
+Turkish	(Türkçe)	Merhaba
+Vietnamese	(Tiếng Việt)	Xin Chào
+Yiddish	(ײַדישע)	דאָס הײַזעלע 
+
+Japanese	(日本語)	こんにちは, コンニチハ
+Chinese	(中文,普通话,汉语)	你好
+Cantonese	(粵語,廣東話)	早晨, 你好
+Korean	(한글)	안녕하세요, 안녕하십니까
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:‎
+ GB	--	元气	开发
+ JIS	--	元気	開発
+ KSC	--	元氣	開發
+ BIG5	--	元氣	開發
+
+
+'
+END 'foobar'
diff --git a/tests/markups/expected-3 b/tests/markups/expected-3
new file mode 100644
index 0000000..9b44653
--- /dev/null
+++ b/tests/markups/expected-3
@@ -0,0 +1,61 @@
+ELEMENT 'foo'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  b="2"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  b="2"
+  c="3"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  b="2"
+  c="3"
+  d="4"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  b="2"
+  c="3"
+  d="4"
+  e="5"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  b="2"
+  c="3"
+  d="4"
+  e="5"
+  f="6"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  b="2"
+  c="3"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  END 'bar'
+  TEXT '
+'
+END 'foo'
diff --git a/tests/markups/expected-4 b/tests/markups/expected-4
new file mode 100644
index 0000000..395f453
--- /dev/null
+++ b/tests/markups/expected-4
@@ -0,0 +1,29 @@
+ELEMENT 'foo'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="1"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="2"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="3""
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="4'"
+  END 'bar'
+  TEXT '
+'
+  ELEMENT 'bar'
+  a="5''''"
+  END 'bar'
+  TEXT '
+'
+END 'foo'
diff --git a/tests/markups/expected-5 b/tests/markups/expected-5
new file mode 100644
index 0000000..12d05c8
--- /dev/null
+++ b/tests/markups/expected-5
@@ -0,0 +1,4 @@
+PASS '<?xml version="1.0" ?>'
+ELEMENT 'foo'
+  TEXT ''
+END 'foo'
diff --git a/tests/markups/expected-6 b/tests/markups/expected-6
new file mode 100644
index 0000000..bfb41ce
--- /dev/null
+++ b/tests/markups/expected-6
@@ -0,0 +1,6 @@
+PASS '<!DOCTYPE foo "foo" [
+<!ELEMENT foo ANY >
+]>'
+ELEMENT 'foo'
+  TEXT ''
+END 'foo'
diff --git a/tests/markups/expected-7 b/tests/markups/expected-7
new file mode 100644
index 0000000..2fe1975
--- /dev/null
+++ b/tests/markups/expected-7
@@ -0,0 +1,4 @@
+PASS '<!-- a comment -->'
+ELEMENT 'foo'
+  TEXT ''
+END 'foo'
diff --git a/tests/markups/expected-8 b/tests/markups/expected-8
new file mode 100644
index 0000000..5bbda04
--- /dev/null
+++ b/tests/markups/expected-8
@@ -0,0 +1,5 @@
+ELEMENT 'foo'
+  TEXT ''
+  PASS '<![CDATA[ some <<<<>>>> CDATA ]]>'
+  TEXT ''
+END 'foo'
diff --git a/tests/markups/expected-9 b/tests/markups/expected-9
new file mode 100644
index 0000000..7810394
--- /dev/null
+++ b/tests/markups/expected-9
@@ -0,0 +1,3 @@
+ELEMENT 'foo'
+  TEXT 'data'
+END 'foo'
diff --git a/tests/markups/fail-1.gmarkup b/tests/markups/fail-1.gmarkup
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/markups/fail-1.gmarkup
diff --git a/tests/markups/fail-10.gmarkup b/tests/markups/fail-10.gmarkup
new file mode 100644
index 0000000..fe16558
--- /dev/null
+++ b/tests/markups/fail-10.gmarkup
@@ -0,0 +1,2 @@
+<foo>
+</|foo>
\ No newline at end of file
diff --git a/tests/markups/fail-11.gmarkup b/tests/markups/fail-11.gmarkup
new file mode 100644
index 0000000..216f40c
--- /dev/null
+++ b/tests/markups/fail-11.gmarkup
@@ -0,0 +1,4 @@
+<foo>
+<bar>
+</foo>
+</bar>
\ No newline at end of file
diff --git a/tests/markups/fail-12.gmarkup b/tests/markups/fail-12.gmarkup
new file mode 100644
index 0000000..a640299
--- /dev/null
+++ b/tests/markups/fail-12.gmarkup
@@ -0,0 +1 @@
+</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-13.gmarkup b/tests/markups/fail-13.gmarkup
new file mode 100644
index 0000000..a719288
--- /dev/null
+++ b/tests/markups/fail-13.gmarkup
@@ -0,0 +1 @@
+</foo|>
\ No newline at end of file
diff --git a/tests/markups/fail-14.gmarkup b/tests/markups/fail-14.gmarkup
new file mode 100644
index 0000000..ed52a60
--- /dev/null
+++ b/tests/markups/fail-14.gmarkup
@@ -0,0 +1,2 @@
+<foo>
+<
\ No newline at end of file
diff --git a/tests/markups/fail-15.gmarkup b/tests/markups/fail-15.gmarkup
new file mode 100644
index 0000000..c3b59e0
--- /dev/null
+++ b/tests/markups/fail-15.gmarkup
@@ -0,0 +1,3 @@
+<foo>
+<bar>
+</bar>
\ No newline at end of file
diff --git a/tests/markups/fail-16.gmarkup b/tests/markups/fail-16.gmarkup
new file mode 100644
index 0000000..20f0148
--- /dev/null
+++ b/tests/markups/fail-16.gmarkup
@@ -0,0 +1 @@
+<foo/
\ No newline at end of file
diff --git a/tests/markups/fail-17.gmarkup b/tests/markups/fail-17.gmarkup
new file mode 100644
index 0000000..9f4093e
--- /dev/null
+++ b/tests/markups/fail-17.gmarkup
@@ -0,0 +1 @@
+<fo
\ No newline at end of file
diff --git a/tests/markups/fail-18.gmarkup b/tests/markups/fail-18.gmarkup
new file mode 100644
index 0000000..e9d02b3
--- /dev/null
+++ b/tests/markups/fail-18.gmarkup
@@ -0,0 +1 @@
+<foo bar
\ No newline at end of file
diff --git a/tests/markups/fail-19.gmarkup b/tests/markups/fail-19.gmarkup
new file mode 100644
index 0000000..a253adf
--- /dev/null
+++ b/tests/markups/fail-19.gmarkup
@@ -0,0 +1 @@
+<foo 
\ No newline at end of file
diff --git a/tests/markups/fail-2.gmarkup b/tests/markups/fail-2.gmarkup
new file mode 100644
index 0000000..c7e4a54
--- /dev/null
+++ b/tests/markups/fail-2.gmarkup
@@ -0,0 +1 @@
+±Î½èªž
diff --git a/tests/markups/fail-20.gmarkup b/tests/markups/fail-20.gmarkup
new file mode 100644
index 0000000..39fcbad
--- /dev/null
+++ b/tests/markups/fail-20.gmarkup
@@ -0,0 +1 @@
+<foo bar=
\ No newline at end of file
diff --git a/tests/markups/fail-21.gmarkup b/tests/markups/fail-21.gmarkup
new file mode 100644
index 0000000..7ae8c6e
--- /dev/null
+++ b/tests/markups/fail-21.gmarkup
@@ -0,0 +1 @@
+<foo bar="fdsf
\ No newline at end of file
diff --git a/tests/markups/fail-22.gmarkup b/tests/markups/fail-22.gmarkup
new file mode 100644
index 0000000..9e20df0
--- /dev/null
+++ b/tests/markups/fail-22.gmarkup
@@ -0,0 +1 @@
+<foo>
\ No newline at end of file
diff --git a/tests/markups/fail-23.gmarkup b/tests/markups/fail-23.gmarkup
new file mode 100644
index 0000000..b57a25b
--- /dev/null
+++ b/tests/markups/fail-23.gmarkup
@@ -0,0 +1,2 @@
+<foo>
+<fo
\ No newline at end of file
diff --git a/tests/markups/fail-24.gmarkup b/tests/markups/fail-24.gmarkup
new file mode 100644
index 0000000..778547f
--- /dev/null
+++ b/tests/markups/fail-24.gmarkup
@@ -0,0 +1 @@
+<!-- dfklsjdf;kljsdf;ljk document ends here
\ No newline at end of file
diff --git a/tests/markups/fail-25.gmarkup b/tests/markups/fail-25.gmarkup
new file mode 100644
index 0000000..a3674e6
--- /dev/null
+++ b/tests/markups/fail-25.gmarkup
@@ -0,0 +1 @@
+<? document ending unexpectedly
\ No newline at end of file
diff --git a/tests/markups/fail-26.gmarkup b/tests/markups/fail-26.gmarkup
new file mode 100644
index 0000000..10e0150
--- /dev/null
+++ b/tests/markups/fail-26.gmarkup
@@ -0,0 +1 @@
+<foo>&;</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-27.gmarkup b/tests/markups/fail-27.gmarkup
new file mode 100644
index 0000000..ab00615
--- /dev/null
+++ b/tests/markups/fail-27.gmarkup
@@ -0,0 +1 @@
+<foo>&|;</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-28.gmarkup b/tests/markups/fail-28.gmarkup
new file mode 100644
index 0000000..3baf172
--- /dev/null
+++ b/tests/markups/fail-28.gmarkup
@@ -0,0 +1 @@
+<foo>&am|;</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-29.gmarkup b/tests/markups/fail-29.gmarkup
new file mode 100644
index 0000000..4e6912f
--- /dev/null
+++ b/tests/markups/fail-29.gmarkup
@@ -0,0 +1 @@
+<foo>&bar;</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-3.gmarkup b/tests/markups/fail-3.gmarkup
new file mode 100644
index 0000000..0eba18a
--- /dev/null
+++ b/tests/markups/fail-3.gmarkup
@@ -0,0 +1,49 @@
+<foobar>
+Παν語
+
+This is a list of ways to say hello in various languages. Its purpose is to illustrate a number of scripts.
+
+(Converted into UTF-8)
+
+---------------------------------------------------------
+Arabic	السلام عليكم
+Czech	(česky)	Dobrý den
+Danish	(Dansk)	Hej, Goddag
+English	Hello
+Esperanto	Saluton
+Estonian	Tere, Tervist
+FORTRAN	PROGRAM
+Finnish	(Suomi)	Hei
+French	(Français)	Bonjour, Salut
+German	(Deutsch Nord)	Guten Tag
+German	(Deutsch Süd)	Grüß Gott
+Greek	(Ελληνικά)	Γειά σας
+Hebrew	שלום
+Hindi	नमस्ते, à¨à¤®à¤¸à¥à¤•à¤¾à¤°à¥¤
+Italiano	Ciao, Buon giorno
+Maltese	Ċaw, Saħħa
+Nederlands, Vlaams	Hallo, Dag
+Norwegian	(Norsk)	Hei, God dag
+Polish	Dzień dobry, Hej
+Russian	(Русский)	Здравствуйте!‎
+Slovak	Dobrý deň
+Spanish	(Español)	‎¡Hola!‎
+Swedish	(Svenska)	Hej, Goddag
+Thai	(ภาษาไทย)	สวัสดีครับ, สวัสดีค่ะ
+Turkish	(Türkçe)	Merhaba
+Vietnamese	(Tiếng Việt)	Xin Chào
+Yiddish	(ײַדישע)	דאָס הײַזעלע 
+
+Japanese	(日本語)	こんにちは, コンニチハ
+Chinese	(中文,普通话,汉语)	你好
+Cantonese	(粵語,廣東話)	早晨, 你好
+Korean	(한글)	안녕하세요, 안녕하십니까
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:‎
+ GB	--	元气	开发
+ JIS	--	元気	開発
+ KSC	--	元氣	開發
+ BIG5	--	元氣	開發
+
+
+</foobar>
\ No newline at end of file
diff --git a/tests/markups/fail-30.gmarkup b/tests/markups/fail-30.gmarkup
new file mode 100644
index 0000000..c8968a8
--- /dev/null
+++ b/tests/markups/fail-30.gmarkup
@@ -0,0 +1 @@
+<foo>&sdfkljsdsdfsdfsdfsdf</foo>
diff --git a/tests/markups/fail-31.gmarkup b/tests/markups/fail-31.gmarkup
new file mode 100644
index 0000000..cde190d
--- /dev/null
+++ b/tests/markups/fail-31.gmarkup
@@ -0,0 +1 @@
+<foo>&#34592348345343453453455645765736575865767;</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-32.gmarkup b/tests/markups/fail-32.gmarkup
new file mode 100644
index 0000000..5e865d0
--- /dev/null
+++ b/tests/markups/fail-32.gmarkup
@@ -0,0 +1 @@
+<foo>&#x0;</foo>
diff --git a/tests/markups/fail-33.gmarkup b/tests/markups/fail-33.gmarkup
new file mode 100644
index 0000000..2cc33f4
--- /dev/null
+++ b/tests/markups/fail-33.gmarkup
@@ -0,0 +1 @@
+<foo>&#;</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-34.gmarkup b/tests/markups/fail-34.gmarkup
new file mode 100644
index 0000000..f5523e4
--- /dev/null
+++ b/tests/markups/fail-34.gmarkup
@@ -0,0 +1 @@
+<foo>&#234234</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-35.gmarkup b/tests/markups/fail-35.gmarkup
new file mode 100644
index 0000000..d7f3512
--- /dev/null
+++ b/tests/markups/fail-35.gmarkup
@@ -0,0 +1 @@
+<foo>gedit&</foo>
diff --git a/tests/markups/fail-36.gmarkup b/tests/markups/fail-36.gmarkup
new file mode 100644
index 0000000..110ce48
--- /dev/null
+++ b/tests/markups/fail-36.gmarkup
Binary files differ
diff --git a/tests/markups/fail-37.gmarkup b/tests/markups/fail-37.gmarkup
new file mode 100644
index 0000000..95b7155
--- /dev/null
+++ b/tests/markups/fail-37.gmarkup
@@ -0,0 +1 @@
+< foo>
diff --git a/tests/markups/fail-38.gmarkup b/tests/markups/fail-38.gmarkup
new file mode 100644
index 0000000..b7d37df
--- /dev/null
+++ b/tests/markups/fail-38.gmarkup
@@ -0,0 +1 @@
+<foo>data< /foo>
diff --git a/tests/markups/fail-39.gmarkup b/tests/markups/fail-39.gmarkup
new file mode 100644
index 0000000..7cf2e2a
--- /dev/null
+++ b/tests/markups/fail-39.gmarkup
@@ -0,0 +1 @@
+<foo>data</ foo>
diff --git a/tests/markups/fail-4.gmarkup b/tests/markups/fail-4.gmarkup
new file mode 100644
index 0000000..1910281
--- /dev/null
+++ b/tests/markups/fail-4.gmarkup
@@ -0,0 +1 @@
+foo
\ No newline at end of file
diff --git a/tests/markups/fail-40.gmarkup b/tests/markups/fail-40.gmarkup
new file mode 100644
index 0000000..f4c1a70
--- /dev/null
+++ b/tests/markups/fail-40.gmarkup
@@ -0,0 +1 @@
+<bla>&unknownentityname;</bla>
diff --git a/tests/markups/fail-5.gmarkup b/tests/markups/fail-5.gmarkup
new file mode 100644
index 0000000..41d8a3e
--- /dev/null
+++ b/tests/markups/fail-5.gmarkup
@@ -0,0 +1,2 @@
+<|foo>
+</|foo>
diff --git a/tests/markups/fail-6.gmarkup b/tests/markups/fail-6.gmarkup
new file mode 100644
index 0000000..4c63568
--- /dev/null
+++ b/tests/markups/fail-6.gmarkup
@@ -0,0 +1,2 @@
+<foo|>
+</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-7.gmarkup b/tests/markups/fail-7.gmarkup
new file mode 100644
index 0000000..5585bd6
--- /dev/null
+++ b/tests/markups/fail-7.gmarkup
@@ -0,0 +1,2 @@
+<foo bar}"baz">
+</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-8.gmarkup b/tests/markups/fail-8.gmarkup
new file mode 100644
index 0000000..b355951
--- /dev/null
+++ b/tests/markups/fail-8.gmarkup
@@ -0,0 +1,2 @@
+<foo/}>
+</foo>
\ No newline at end of file
diff --git a/tests/markups/fail-9.gmarkup b/tests/markups/fail-9.gmarkup
new file mode 100644
index 0000000..edd5596
--- /dev/null
+++ b/tests/markups/fail-9.gmarkup
@@ -0,0 +1,2 @@
+<foo bar={baz">
+</foo>
\ No newline at end of file
diff --git a/tests/markups/valid-1.gmarkup b/tests/markups/valid-1.gmarkup
new file mode 100644
index 0000000..6745c5c
--- /dev/null
+++ b/tests/markups/valid-1.gmarkup
@@ -0,0 +1,9 @@
+  <!-- Comment -->
+<?PI ?>
+<foobar>
+<e1>Hi &amp; this is some text inside an element Two 'E' chars as character refs: &#69; &#x45; and some 'J': &#74; &#x4A;</e1>
+<e2:foo> Text <childfree/> with some <nested>nested elements</nested> and entities &quot;&amp;  &lt; &gt;&gt; &apos; and whitespace    </e2:foo>
+<tag ab="fo&lt;o" bar="foo" baz="blah">This element has attributes</tag>
+<nochildren a="b" xyz="qrs"/>
+</foobar>
+   
\ No newline at end of file
diff --git a/tests/markups/valid-10.gmarkup b/tests/markups/valid-10.gmarkup
new file mode 100644
index 0000000..cbeb68e
--- /dev/null
+++ b/tests/markups/valid-10.gmarkup
@@ -0,0 +1,6 @@
+<foo 
+ bar="baz" 
+bar2 = "baz2" 
+bar3 =
+"baz3"
+>data</foo>
diff --git a/tests/markups/valid-11.gmarkup b/tests/markups/valid-11.gmarkup
new file mode 100644
index 0000000..fe1cc4e
--- /dev/null
+++ b/tests/markups/valid-11.gmarkup
@@ -0,0 +1,2 @@
+<foo
+>data</foo>
diff --git a/tests/markups/valid-2.gmarkup b/tests/markups/valid-2.gmarkup
new file mode 100644
index 0000000..4a3fa69
--- /dev/null
+++ b/tests/markups/valid-2.gmarkup
@@ -0,0 +1,49 @@
+<foobar>
+Παν語
+
+This is a list of ways to say hello in various languages. Its purpose is to illustrate a number of scripts.
+
+(Converted into UTF-8)
+
+---------------------------------------------------------
+Arabic	السلام عليكم
+Czech	(česky)	Dobrý den
+Danish	(Dansk)	Hej, Goddag
+English	Hello
+Esperanto	Saluton
+Estonian	Tere, Tervist
+FORTRAN	PROGRAM
+Finnish	(Suomi)	Hei
+French	(Français)	Bonjour, Salut
+German	(Deutsch Nord)	Guten Tag
+German	(Deutsch Süd)	Grüß Gott
+Greek	(Ελληνικά)	Γειά σας
+Hebrew	שלום
+Hindi	नमस्ते, नमस्कार।
+Italiano	Ciao, Buon giorno
+Maltese	Ċaw, Saħħa
+Nederlands, Vlaams	Hallo, Dag
+Norwegian	(Norsk)	Hei, God dag
+Polish	Dzień dobry, Hej
+Russian	(Русский)	Здравствуйте!‎
+Slovak	Dobrý deň
+Spanish	(Español)	‎¡Hola!‎
+Swedish	(Svenska)	Hej, Goddag
+Thai	(ภาษาไทย)	สวัสดีครับ, สวัสดีค่ะ
+Turkish	(Türkçe)	Merhaba
+Vietnamese	(Tiếng Việt)	Xin Chào
+Yiddish	(ײַדישע)	דאָס הײַזעלע 
+
+Japanese	(日本語)	こんにちは, コンニチハ
+Chinese	(中文,普通话,汉语)	你好
+Cantonese	(粵語,廣東話)	早晨, 你好
+Korean	(한글)	안녕하세요, 안녕하십니까
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:‎
+ GB	--	元气	开发
+ JIS	--	元気	開発
+ KSC	--	元氣	開發
+ BIG5	--	元氣	開發
+
+
+</foobar>
\ No newline at end of file
diff --git a/tests/markups/valid-3.gmarkup b/tests/markups/valid-3.gmarkup
new file mode 100644
index 0000000..aed984e
--- /dev/null
+++ b/tests/markups/valid-3.gmarkup
@@ -0,0 +1,10 @@
+<foo>
+<bar a="1"/>
+<bar a="1" b="2"/>
+<bar a="1" b="2" c="3"/>
+<bar a="1" b="2" c="3" d="4"/>
+<bar a="1" b="2" c="3" d="4" e="5"/>
+<bar a="1" b="2" c="3" d="4" e="5" f="6"/>
+<bar a="1" b="2" c="3"/>
+<bar a="1"/>
+</foo>
diff --git a/tests/markups/valid-4.gmarkup b/tests/markups/valid-4.gmarkup
new file mode 100644
index 0000000..2036162
--- /dev/null
+++ b/tests/markups/valid-4.gmarkup
@@ -0,0 +1,8 @@
+<foo>
+<bar a='1'/>
+<bar a="2"/>
+<bar a='3"'/>
+<bar a="4'"/>
+<bar a="5''''"/>
+</foo>
+
diff --git a/tests/markups/valid-5.gmarkup b/tests/markups/valid-5.gmarkup
new file mode 100644
index 0000000..3b861de
--- /dev/null
+++ b/tests/markups/valid-5.gmarkup
@@ -0,0 +1,2 @@
+<?xml version="1.0" ?>
+<foo></foo>
diff --git a/tests/markups/valid-6.gmarkup b/tests/markups/valid-6.gmarkup
new file mode 100644
index 0000000..d7c065a
--- /dev/null
+++ b/tests/markups/valid-6.gmarkup
@@ -0,0 +1,4 @@
+<!DOCTYPE foo "foo" [
+<!ELEMENT foo ANY >
+]>
+<foo></foo>
diff --git a/tests/markups/valid-7.gmarkup b/tests/markups/valid-7.gmarkup
new file mode 100644
index 0000000..832445d
--- /dev/null
+++ b/tests/markups/valid-7.gmarkup
@@ -0,0 +1,2 @@
+<!-- a comment -->
+<foo></foo>
diff --git a/tests/markups/valid-8.gmarkup b/tests/markups/valid-8.gmarkup
new file mode 100644
index 0000000..a75aee0
--- /dev/null
+++ b/tests/markups/valid-8.gmarkup
@@ -0,0 +1 @@
+<foo><![CDATA[ some <<<<>>>> CDATA ]]></foo>
diff --git a/tests/markups/valid-9.gmarkup b/tests/markups/valid-9.gmarkup
new file mode 100644
index 0000000..90a99a0
--- /dev/null
+++ b/tests/markups/valid-9.gmarkup
@@ -0,0 +1,2 @@
+<foo>data</foo
+>
diff --git a/tests/memchunks.c b/tests/memchunks.c
new file mode 100644
index 0000000..7a08de0
--- /dev/null
+++ b/tests/memchunks.c
@@ -0,0 +1,612 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/* 
+ * MT safe
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include "glib.h"
+
+/* notes on macros:
+ * if ENABLE_GC_FRIENDLY is defined, freed memory should be 0-wiped.
+ */
+
+#define MEM_PROFILE_TABLE_SIZE 4096
+
+#define MEM_AREA_SIZE 4L
+
+static guint mem_chunk_recursion = 0;
+#  define MEM_CHUNK_ROUTINE_COUNT()	(mem_chunk_recursion)
+#  define ENTER_MEM_CHUNK_ROUTINE()	(mem_chunk_recursion = MEM_CHUNK_ROUTINE_COUNT () + 1)
+#  define LEAVE_MEM_CHUNK_ROUTINE()	(mem_chunk_recursion = MEM_CHUNK_ROUTINE_COUNT () - 1)
+
+/* --- old memchunk prototypes --- */
+void            old_mem_chunks_init     (void);
+GMemChunk*      old_mem_chunk_new       (const gchar  *name,
+                                         gint          atom_size,
+                                         gulong        area_size,
+                                         gint          type);
+void            old_mem_chunk_destroy   (GMemChunk *mem_chunk);
+gpointer        old_mem_chunk_alloc     (GMemChunk *mem_chunk);
+gpointer        old_mem_chunk_alloc0    (GMemChunk *mem_chunk);
+void            old_mem_chunk_free      (GMemChunk *mem_chunk,
+                                         gpointer   mem);
+void            old_mem_chunk_clean     (GMemChunk *mem_chunk);
+void            old_mem_chunk_reset     (GMemChunk *mem_chunk);
+void            old_mem_chunk_print     (GMemChunk *mem_chunk);
+void            old_mem_chunk_info      (void);
+
+
+/* --- MemChunks --- */
+#ifndef G_ALLOC_AND_FREE
+typedef struct _GAllocator GAllocator;
+typedef struct _GMemChunk  GMemChunk;
+#define G_ALLOC_ONLY	  1
+#define G_ALLOC_AND_FREE  2
+#endif
+
+typedef struct _GFreeAtom      GFreeAtom;
+typedef struct _GMemArea       GMemArea;
+
+struct _GFreeAtom
+{
+  GFreeAtom *next;
+};
+
+struct _GMemArea
+{
+  GMemArea *next;            /* the next mem area */
+  GMemArea *prev;            /* the previous mem area */
+  gulong index;              /* the current index into the "mem" array */
+  gulong free;               /* the number of free bytes in this mem area */
+  gulong allocated;          /* the number of atoms allocated from this area */
+  gulong mark;               /* is this mem area marked for deletion */
+  gchar mem[MEM_AREA_SIZE];  /* the mem array from which atoms get allocated
+			      * the actual size of this array is determined by
+			      *  the mem chunk "area_size". ANSI says that it
+			      *  must be declared to be the maximum size it
+			      *  can possibly be (even though the actual size
+			      *  may be less).
+			      */
+};
+
+struct _GMemChunk
+{
+  const gchar *name;         /* name of this MemChunk...used for debugging output */
+  gint type;                 /* the type of MemChunk: ALLOC_ONLY or ALLOC_AND_FREE */
+  gint num_mem_areas;        /* the number of memory areas */
+  gint num_marked_areas;     /* the number of areas marked for deletion */
+  guint atom_size;           /* the size of an atom */
+  gulong area_size;          /* the size of a memory area */
+  GMemArea *mem_area;        /* the current memory area */
+  GMemArea *mem_areas;       /* a list of all the mem areas owned by this chunk */
+  GMemArea *free_mem_area;   /* the free area...which is about to be destroyed */
+  GFreeAtom *free_atoms;     /* the free atoms list */
+  GTree *mem_tree;           /* tree of mem areas sorted by memory address */
+  GMemChunk *next;           /* pointer to the next chunk */
+  GMemChunk *prev;           /* pointer to the previous chunk */
+};
+
+
+static gulong old_mem_chunk_compute_size (gulong    size,
+                                          gulong    min_size) G_GNUC_CONST;
+static gint   old_mem_chunk_area_compare (GMemArea *a,
+                                          GMemArea *b);
+static gint   old_mem_chunk_area_search  (GMemArea *a,
+                                          gchar    *addr);
+
+/* here we can't use StaticMutexes, as they depend upon a working
+ * g_malloc, the same holds true for StaticPrivate
+ */
+static GMutex        *mem_chunks_lock = NULL;
+static GMemChunk     *mem_chunks = NULL;
+
+void
+old_mem_chunks_init (void)
+{
+  mem_chunks_lock = g_mutex_new ();
+}
+
+GMemChunk*
+old_mem_chunk_new (const gchar  *name,
+                   gint          atom_size,
+                   gulong        area_size,
+                   gint          type)
+{
+  GMemChunk *mem_chunk;
+  gulong rarea_size;
+  
+  g_return_val_if_fail (atom_size > 0, NULL);
+  g_return_val_if_fail (area_size >= atom_size, NULL);
+  
+  ENTER_MEM_CHUNK_ROUTINE ();
+  
+  area_size = (area_size + atom_size - 1) / atom_size;
+  area_size *= atom_size;
+  
+  mem_chunk = g_new (GMemChunk, 1);
+  mem_chunk->name = name;
+  mem_chunk->type = type;
+  mem_chunk->num_mem_areas = 0;
+  mem_chunk->num_marked_areas = 0;
+  mem_chunk->mem_area = NULL;
+  mem_chunk->free_mem_area = NULL;
+  mem_chunk->free_atoms = NULL;
+  mem_chunk->mem_tree = NULL;
+  mem_chunk->mem_areas = NULL;
+  mem_chunk->atom_size = atom_size;
+  
+  if (mem_chunk->type == G_ALLOC_AND_FREE)
+    mem_chunk->mem_tree = g_tree_new ((GCompareFunc) old_mem_chunk_area_compare);
+  
+  if (mem_chunk->atom_size % G_MEM_ALIGN)
+    mem_chunk->atom_size += G_MEM_ALIGN - (mem_chunk->atom_size % G_MEM_ALIGN);
+  
+  rarea_size = area_size + sizeof (GMemArea) - MEM_AREA_SIZE;
+  rarea_size = old_mem_chunk_compute_size (rarea_size, atom_size + sizeof (GMemArea) - MEM_AREA_SIZE);
+  mem_chunk->area_size = rarea_size - (sizeof (GMemArea) - MEM_AREA_SIZE);
+  
+  g_mutex_lock (mem_chunks_lock);
+  mem_chunk->next = mem_chunks;
+  mem_chunk->prev = NULL;
+  if (mem_chunks)
+    mem_chunks->prev = mem_chunk;
+  mem_chunks = mem_chunk;
+  g_mutex_unlock (mem_chunks_lock);
+  
+  LEAVE_MEM_CHUNK_ROUTINE ();
+  
+  return mem_chunk;
+}
+
+void
+old_mem_chunk_destroy (GMemChunk *mem_chunk)
+{
+  GMemArea *mem_areas;
+  GMemArea *temp_area;
+  
+  g_return_if_fail (mem_chunk != NULL);
+  
+  ENTER_MEM_CHUNK_ROUTINE ();
+  
+  mem_areas = mem_chunk->mem_areas;
+  while (mem_areas)
+    {
+      temp_area = mem_areas;
+      mem_areas = mem_areas->next;
+      g_free (temp_area);
+    }
+  
+  g_mutex_lock (mem_chunks_lock);
+  if (mem_chunk->next)
+    mem_chunk->next->prev = mem_chunk->prev;
+  if (mem_chunk->prev)
+    mem_chunk->prev->next = mem_chunk->next;
+  
+  if (mem_chunk == mem_chunks)
+    mem_chunks = mem_chunks->next;
+  g_mutex_unlock (mem_chunks_lock);
+  
+  if (mem_chunk->type == G_ALLOC_AND_FREE)
+    g_tree_destroy (mem_chunk->mem_tree);  
+  
+  g_free (mem_chunk);
+  
+  LEAVE_MEM_CHUNK_ROUTINE ();
+}
+
+gpointer
+old_mem_chunk_alloc (GMemChunk *mem_chunk)
+{
+  GMemArea *temp_area;
+  gpointer mem;
+  
+  ENTER_MEM_CHUNK_ROUTINE ();
+  
+  g_return_val_if_fail (mem_chunk != NULL, NULL);
+  
+  while (mem_chunk->free_atoms)
+    {
+      /* Get the first piece of memory on the "free_atoms" list.
+       * We can go ahead and destroy the list node we used to keep
+       *  track of it with and to update the "free_atoms" list to
+       *  point to its next element.
+       */
+      mem = mem_chunk->free_atoms;
+      mem_chunk->free_atoms = mem_chunk->free_atoms->next;
+      
+      /* Determine which area this piece of memory is allocated from */
+      temp_area = g_tree_search (mem_chunk->mem_tree,
+				 (GCompareFunc) old_mem_chunk_area_search,
+				 mem);
+      
+      /* If the area has been marked, then it is being destroyed.
+       *  (ie marked to be destroyed).
+       * We check to see if all of the segments on the free list that
+       *  reference this area have been removed. This occurs when
+       *  the ammount of free memory is less than the allocatable size.
+       * If the chunk should be freed, then we place it in the "free_mem_area".
+       * This is so we make sure not to free the mem area here and then
+       *  allocate it again a few lines down.
+       * If we don't allocate a chunk a few lines down then the "free_mem_area"
+       *  will be freed.
+       * If there is already a "free_mem_area" then we'll just free this mem area.
+       */
+      if (temp_area->mark)
+        {
+          /* Update the "free" memory available in that area */
+          temp_area->free += mem_chunk->atom_size;
+	  
+          if (temp_area->free == mem_chunk->area_size)
+            {
+              if (temp_area == mem_chunk->mem_area)
+                mem_chunk->mem_area = NULL;
+	      
+              if (mem_chunk->free_mem_area)
+                {
+                  mem_chunk->num_mem_areas -= 1;
+		  
+                  if (temp_area->next)
+                    temp_area->next->prev = temp_area->prev;
+                  if (temp_area->prev)
+                    temp_area->prev->next = temp_area->next;
+                  if (temp_area == mem_chunk->mem_areas)
+                    mem_chunk->mem_areas = mem_chunk->mem_areas->next;
+		  
+		  if (mem_chunk->type == G_ALLOC_AND_FREE)
+		    g_tree_remove (mem_chunk->mem_tree, temp_area);
+                  g_free (temp_area);
+                }
+              else
+                mem_chunk->free_mem_area = temp_area;
+	      
+	      mem_chunk->num_marked_areas -= 1;
+	    }
+	}
+      else
+        {
+          /* Update the number of allocated atoms count.
+	   */
+          temp_area->allocated += 1;
+	  
+          /* The area wasn't marked...return the memory
+	   */
+	  goto outa_here;
+        }
+    }
+  
+  /* If there isn't a current mem area or the current mem area is out of space
+   *  then allocate a new mem area. We'll first check and see if we can use
+   *  the "free_mem_area". Otherwise we'll just malloc the mem area.
+   */
+  if ((!mem_chunk->mem_area) ||
+      ((mem_chunk->mem_area->index + mem_chunk->atom_size) > mem_chunk->area_size))
+    {
+      if (mem_chunk->free_mem_area)
+        {
+          mem_chunk->mem_area = mem_chunk->free_mem_area;
+	  mem_chunk->free_mem_area = NULL;
+        }
+      else
+        {
+#ifdef ENABLE_GC_FRIENDLY
+	  mem_chunk->mem_area = (GMemArea*) g_malloc0 (sizeof (GMemArea) -
+						       MEM_AREA_SIZE +
+						       mem_chunk->area_size); 
+#else /* !ENABLE_GC_FRIENDLY */
+	  mem_chunk->mem_area = (GMemArea*) g_malloc (sizeof (GMemArea) -
+						      MEM_AREA_SIZE +
+						      mem_chunk->area_size);
+#endif /* ENABLE_GC_FRIENDLY */
+	  
+	  mem_chunk->num_mem_areas += 1;
+	  mem_chunk->mem_area->next = mem_chunk->mem_areas;
+	  mem_chunk->mem_area->prev = NULL;
+	  
+	  if (mem_chunk->mem_areas)
+	    mem_chunk->mem_areas->prev = mem_chunk->mem_area;
+	  mem_chunk->mem_areas = mem_chunk->mem_area;
+	  
+	  if (mem_chunk->type == G_ALLOC_AND_FREE)
+	    g_tree_insert (mem_chunk->mem_tree, mem_chunk->mem_area, mem_chunk->mem_area);
+        }
+      
+      mem_chunk->mem_area->index = 0;
+      mem_chunk->mem_area->free = mem_chunk->area_size;
+      mem_chunk->mem_area->allocated = 0;
+      mem_chunk->mem_area->mark = 0;
+    }
+  
+  /* Get the memory and modify the state variables appropriately.
+   */
+  mem = (gpointer) &mem_chunk->mem_area->mem[mem_chunk->mem_area->index];
+  mem_chunk->mem_area->index += mem_chunk->atom_size;
+  mem_chunk->mem_area->free -= mem_chunk->atom_size;
+  mem_chunk->mem_area->allocated += 1;
+  
+ outa_here:
+  
+  LEAVE_MEM_CHUNK_ROUTINE ();
+  
+  return mem;
+}
+
+gpointer
+old_mem_chunk_alloc0 (GMemChunk *mem_chunk)
+{
+  gpointer mem;
+  
+  mem = old_mem_chunk_alloc (mem_chunk);
+  if (mem)
+    {
+      memset (mem, 0, mem_chunk->atom_size);
+    }
+  
+  return mem;
+}
+
+void
+old_mem_chunk_free (GMemChunk *mem_chunk,
+                    gpointer   mem)
+{
+  GMemArea *temp_area;
+  GFreeAtom *free_atom;
+  
+  g_return_if_fail (mem_chunk != NULL);
+  g_return_if_fail (mem != NULL);
+  
+  ENTER_MEM_CHUNK_ROUTINE ();
+  
+#ifdef ENABLE_GC_FRIENDLY
+  memset (mem, 0, mem_chunk->atom_size);
+#endif /* ENABLE_GC_FRIENDLY */
+  
+  /* Don't do anything if this is an ALLOC_ONLY chunk
+   */
+  if (mem_chunk->type == G_ALLOC_AND_FREE)
+    {
+      /* Place the memory on the "free_atoms" list
+       */
+      free_atom = (GFreeAtom*) mem;
+      free_atom->next = mem_chunk->free_atoms;
+      mem_chunk->free_atoms = free_atom;
+      
+      temp_area = g_tree_search (mem_chunk->mem_tree,
+				 (GCompareFunc) old_mem_chunk_area_search,
+				 mem);
+      
+      temp_area->allocated -= 1;
+      
+      if (temp_area->allocated == 0)
+	{
+	  temp_area->mark = 1;
+	  mem_chunk->num_marked_areas += 1;
+	}
+    }
+  
+  LEAVE_MEM_CHUNK_ROUTINE ();
+}
+
+/* This doesn't free the free_area if there is one */
+void
+old_mem_chunk_clean (GMemChunk *mem_chunk)
+{
+  GMemArea *mem_area;
+  GFreeAtom *prev_free_atom;
+  GFreeAtom *temp_free_atom;
+  gpointer mem;
+  
+  g_return_if_fail (mem_chunk != NULL);
+  
+  ENTER_MEM_CHUNK_ROUTINE ();
+  
+  if (mem_chunk->type == G_ALLOC_AND_FREE)
+    {
+      prev_free_atom = NULL;
+      temp_free_atom = mem_chunk->free_atoms;
+      
+      while (temp_free_atom)
+	{
+	  mem = (gpointer) temp_free_atom;
+	  
+	  mem_area = g_tree_search (mem_chunk->mem_tree,
+				    (GCompareFunc) old_mem_chunk_area_search,
+				    mem);
+	  
+          /* If this mem area is marked for destruction then delete the
+	   *  area and list node and decrement the free mem.
+           */
+	  if (mem_area->mark)
+	    {
+	      if (prev_free_atom)
+		prev_free_atom->next = temp_free_atom->next;
+	      else
+		mem_chunk->free_atoms = temp_free_atom->next;
+	      temp_free_atom = temp_free_atom->next;
+	      
+	      mem_area->free += mem_chunk->atom_size;
+	      if (mem_area->free == mem_chunk->area_size)
+		{
+		  mem_chunk->num_mem_areas -= 1;
+		  mem_chunk->num_marked_areas -= 1;
+		  
+		  if (mem_area->next)
+		    mem_area->next->prev = mem_area->prev;
+		  if (mem_area->prev)
+		    mem_area->prev->next = mem_area->next;
+		  if (mem_area == mem_chunk->mem_areas)
+		    mem_chunk->mem_areas = mem_chunk->mem_areas->next;
+		  if (mem_area == mem_chunk->mem_area)
+		    mem_chunk->mem_area = NULL;
+		  
+		  if (mem_chunk->type == G_ALLOC_AND_FREE)
+		    g_tree_remove (mem_chunk->mem_tree, mem_area);
+		  g_free (mem_area);
+		}
+	    }
+	  else
+	    {
+	      prev_free_atom = temp_free_atom;
+	      temp_free_atom = temp_free_atom->next;
+	    }
+	}
+    }
+  LEAVE_MEM_CHUNK_ROUTINE ();
+}
+
+void
+old_mem_chunk_reset (GMemChunk *mem_chunk)
+{
+  GMemArea *mem_areas;
+  GMemArea *temp_area;
+  
+  g_return_if_fail (mem_chunk != NULL);
+  
+  ENTER_MEM_CHUNK_ROUTINE ();
+  
+  mem_areas = mem_chunk->mem_areas;
+  mem_chunk->num_mem_areas = 0;
+  mem_chunk->mem_areas = NULL;
+  mem_chunk->mem_area = NULL;
+  
+  while (mem_areas)
+    {
+      temp_area = mem_areas;
+      mem_areas = mem_areas->next;
+      g_free (temp_area);
+    }
+  
+  mem_chunk->free_atoms = NULL;
+  
+  if (mem_chunk->mem_tree)
+    {
+      g_tree_destroy (mem_chunk->mem_tree);
+      mem_chunk->mem_tree = g_tree_new ((GCompareFunc) old_mem_chunk_area_compare);
+    }
+  
+  LEAVE_MEM_CHUNK_ROUTINE ();
+}
+
+void
+old_mem_chunk_print (GMemChunk *mem_chunk)
+{
+  GMemArea *mem_areas;
+  gulong mem;
+  
+  g_return_if_fail (mem_chunk != NULL);
+  
+  mem_areas = mem_chunk->mem_areas;
+  mem = 0;
+  
+  while (mem_areas)
+    {
+      mem += mem_chunk->area_size - mem_areas->free;
+      mem_areas = mem_areas->next;
+    }
+  
+  g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO,
+	 "%s: %ld bytes using %d mem areas",
+	 mem_chunk->name, mem, mem_chunk->num_mem_areas);
+}
+
+void
+old_mem_chunk_info (void)
+{
+  GMemChunk *mem_chunk;
+  gint count;
+  
+  count = 0;
+  g_mutex_lock (mem_chunks_lock);
+  mem_chunk = mem_chunks;
+  while (mem_chunk)
+    {
+      count += 1;
+      mem_chunk = mem_chunk->next;
+    }
+  g_mutex_unlock (mem_chunks_lock);
+  
+  g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "%d mem chunks", count);
+  
+  g_mutex_lock (mem_chunks_lock);
+  mem_chunk = mem_chunks;
+  g_mutex_unlock (mem_chunks_lock);
+  
+  while (mem_chunk)
+    {
+      old_mem_chunk_print ((GMemChunk*) mem_chunk);
+      mem_chunk = mem_chunk->next;
+    }  
+}
+
+static gulong
+old_mem_chunk_compute_size (gulong size,
+                            gulong min_size)
+{
+  gulong power_of_2;
+  gulong lower, upper;
+  
+  power_of_2 = 16;
+  while (power_of_2 < size)
+    power_of_2 <<= 1;
+  
+  lower = power_of_2 >> 1;
+  upper = power_of_2;
+  
+  if (size - lower < upper - size && lower >= min_size)
+    return lower;
+  else
+    return upper;
+}
+
+static gint
+old_mem_chunk_area_compare (GMemArea *a,
+                            GMemArea *b)
+{
+  if (a->mem > b->mem)
+    return 1;
+  else if (a->mem < b->mem)
+    return -1;
+  return 0;
+}
+
+static gint
+old_mem_chunk_area_search (GMemArea *a,
+                           gchar    *addr)
+{
+  if (a->mem <= addr)
+    {
+      if (addr < &a->mem[a->index])
+	return 0;
+      return 1;
+    }
+  return -1;
+}
diff --git a/tests/module-test.c b/tests/module-test.c
new file mode 100644
index 0000000..9b95b0a
--- /dev/null
+++ b/tests/module-test.c
@@ -0,0 +1,202 @@
+/* module-test.c - test program for GMODULE
+ * Copyright (C) 1998 Tim Janik
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <gmodule.h>
+#include <string.h>
+
+gchar* global_state;
+
+G_MODULE_EXPORT void
+g_clash_func (void)
+{
+  global_state = "global clash";
+}
+
+typedef	void (*SimpleFunc) (void);
+typedef	void (*GModuleFunc) (GModule *);
+
+static gchar **gplugin_a_state;
+static gchar **gplugin_b_state;
+
+static void
+compare (const gchar *desc, const gchar *expected, const gchar *found)
+{
+  if (!expected && !found)
+    return;
+  
+  if (expected && found && strcmp (expected, found) == 0)
+    return;
+    
+  g_error ("error: %s state should have been \"%s\", but is \"%s\"",
+	   desc, expected ? expected : "NULL", found ? found : "NULL");
+}
+
+static void 
+test_states (const gchar *global, const gchar *gplugin_a, 
+	     const gchar *gplugin_b)
+{	
+  compare ("global", global, global_state);
+  compare ("Plugin A", gplugin_a, *gplugin_a_state);
+  compare ("Plugin B", gplugin_b, *gplugin_b_state);
+  
+  global_state = *gplugin_a_state = *gplugin_b_state = NULL;
+}
+ 
+static SimpleFunc plugin_clash_func = NULL;
+
+int
+main (int   arg,
+      char *argv[])
+{
+  GModule *module_self, *module_a, *module_b;
+  gchar *dir;
+  gchar *plugin_a, *plugin_b;
+  SimpleFunc f_a, f_b, f_self;
+  GModuleFunc gmod_f;
+
+  if (!g_module_supported ())
+    g_error ("dynamic modules not supported");
+
+  dir = g_get_current_dir ();
+
+  plugin_a = g_strconcat (dir, G_DIR_SEPARATOR_S "libmoduletestplugin_a", 
+			  NULL);
+  plugin_b = g_strconcat (dir, G_DIR_SEPARATOR_S "libmoduletestplugin_b", 
+			  NULL);
+
+  g_free (dir);
+
+  /* module handles */
+  
+  module_self = g_module_open (NULL, G_MODULE_BIND_LAZY);
+  if (!module_self)
+    g_error ("error: %s", g_module_error ());
+
+  if (!g_module_symbol (module_self, "g_module_close", (gpointer *) &f_self))
+    g_error ("error: %s", g_module_error ());
+
+  module_a = g_module_open (plugin_a, G_MODULE_BIND_LAZY);
+  if (!module_a)
+    g_error ("error: %s", g_module_error ());
+
+  module_b = g_module_open (plugin_b, G_MODULE_BIND_LAZY);
+  if (!module_b)
+    g_error ("error: %s", g_module_error ());
+
+  /* get plugin state vars */
+
+  if (!g_module_symbol (module_a, "gplugin_a_state", 
+			(gpointer *) &gplugin_a_state))
+    g_error ("error: %s", g_module_error ());
+  
+  if (!g_module_symbol (module_b, "gplugin_b_state", 
+			(gpointer *) &gplugin_b_state))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, "check-init");
+  
+  /* get plugin specific symbols and call them
+   */
+  if (!g_module_symbol (module_a, "gplugin_a_func", (gpointer *) &f_a))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+ 
+  if (!g_module_symbol (module_b, "gplugin_b_func", (gpointer *) &f_b))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+ 
+  f_a ();
+  test_states (NULL, "Hello world", NULL);
+  
+  f_b ();
+  test_states (NULL, NULL, "Hello world");
+  
+  /* get and call globally clashing functions
+   */
+ 
+  if (!g_module_symbol (module_self, "g_clash_func", (gpointer *) &f_self))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+
+  if (!g_module_symbol (module_a, "g_clash_func", (gpointer *) &f_a))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+ 
+  if (!g_module_symbol (module_b, "g_clash_func", (gpointer *) &f_b))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+ 
+  f_self ();
+  test_states ("global clash", NULL, NULL);
+  
+  f_a ();
+  test_states (NULL, "global clash", NULL);
+
+  f_b ();
+  test_states (NULL, NULL, "global clash");
+
+  /* get and call clashing plugin functions  */
+
+  if (!g_module_symbol (module_a, "gplugin_clash_func", (gpointer *) &f_a))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+
+  if (!g_module_symbol (module_b, "gplugin_clash_func", (gpointer *) &f_b))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+
+  plugin_clash_func = f_a;
+  plugin_clash_func ();
+  test_states (NULL, "plugin clash", NULL);
+
+  plugin_clash_func = f_b;
+  plugin_clash_func ();
+  test_states (NULL, NULL, "plugin clash");
+
+  /* call gmodule function from A  */
+
+  if (!g_module_symbol (module_a, "gplugin_a_module_func", (gpointer *) &gmod_f))
+    g_error ("error: %s", g_module_error ());
+  test_states (NULL, NULL, NULL);
+
+  gmod_f (module_b);
+  test_states (NULL, NULL, "BOOH");
+ 
+  gmod_f (module_a);
+  test_states (NULL, "BOOH", NULL);
+
+  /* unload plugins  */
+
+  if (!g_module_close (module_a))
+    g_error ("error: %s", g_module_error ());
+
+  if (!g_module_close (module_b))
+    g_error ("error: %s", g_module_error ());
+ 
+  return 0;
+}
diff --git a/tests/node-test.c b/tests/node-test.c
new file mode 100644
index 0000000..a49eddf
--- /dev/null
+++ b/tests/node-test.c
@@ -0,0 +1,223 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "glib.h"
+
+int array[10000];
+gboolean failed = FALSE;
+
+#define	TEST(m,cond)	G_STMT_START { failed = !(cond); \
+if (failed) \
+  { if (!m) \
+      g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \
+    else \
+      g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \
+      exit(1); \
+  } \
+} G_STMT_END
+
+#define	C2P(c)		((gpointer) ((long) (c)))
+#define	P2C(p)		((gchar) ((long) (p)))
+
+#define GLIB_TEST_STRING "el dorado "
+#define GLIB_TEST_STRING_5 "el do"
+
+typedef struct {
+	guint age;
+	gchar name[40];
+} GlibTestInfo;
+
+static gboolean
+node_build_string (GNode    *node,
+		   gpointer  data)
+{
+  gchar **p = data;
+  gchar *string;
+  gchar c[2] = "_";
+
+  c[0] = P2C (node->data);
+
+  string = g_strconcat (*p ? *p : "", c, NULL);
+  g_free (*p);
+  *p = string;
+
+  return FALSE;
+}
+
+static void
+g_node_test (void)
+{
+  GNode *root;
+  GNode *node;
+  GNode *node_B;
+  GNode *node_D;
+  GNode *node_F;
+  GNode *node_G;
+  GNode *node_J;
+  guint i;
+  gchar *tstring;
+
+  failed = FALSE;
+
+  root = g_node_new (C2P ('A'));
+  TEST (NULL, g_node_depth (root) == 1 && g_node_max_height (root) == 1);
+
+  node_B = g_node_new (C2P ('B'));
+  g_node_append (root, node_B);
+  TEST (NULL, root->children == node_B);
+
+  g_node_append_data (node_B, C2P ('E'));
+  g_node_prepend_data (node_B, C2P ('C'));
+  node_D = g_node_new (C2P ('D'));
+  g_node_insert (node_B, 1, node_D); 
+
+  node_F = g_node_new (C2P ('F'));
+  g_node_append (root, node_F);
+  TEST (NULL, root->children->next == node_F);
+
+  node_G = g_node_new (C2P ('G'));
+  g_node_append (node_F, node_G);
+  node_J = g_node_new (C2P ('J'));
+  g_node_prepend (node_G, node_J);
+  g_node_insert (node_G, 42, g_node_new (C2P ('K')));
+  g_node_insert_data (node_G, 0, C2P ('H'));
+  g_node_insert (node_G, 1, g_node_new (C2P ('I')));
+
+  TEST (NULL, g_node_depth (root) == 1);
+  TEST (NULL, g_node_max_height (root) == 4);
+  TEST (NULL, g_node_depth (node_G->children->next) == 4);
+  TEST (NULL, g_node_n_nodes (root, G_TRAVERSE_LEAFS) == 7);
+  TEST (NULL, g_node_n_nodes (root, G_TRAVERSE_NON_LEAFS) == 4);
+  TEST (NULL, g_node_n_nodes (root, G_TRAVERSE_ALL) == 11);
+  TEST (NULL, g_node_max_height (node_F) == 3);
+  TEST (NULL, g_node_n_children (node_G) == 4);
+  TEST (NULL, g_node_find_child (root, G_TRAVERSE_ALL, C2P ('F')) == node_F);
+  TEST (NULL, g_node_find (root, G_LEVEL_ORDER, G_TRAVERSE_NON_LEAFS, C2P ('I')) == NULL);
+  TEST (NULL, g_node_find (root, G_IN_ORDER, G_TRAVERSE_LEAFS, C2P ('J')) == node_J);
+
+  for (i = 0; i < g_node_n_children (node_B); i++)
+    {
+      node = g_node_nth_child (node_B, i);
+      TEST (NULL, P2C (node->data) == ('C' + i));
+    }
+  
+  for (i = 0; i < g_node_n_children (node_G); i++)
+    TEST (NULL, g_node_child_position (node_G, g_node_nth_child (node_G, i)) == i);
+
+  /* we have built:                    A
+   *                                 /   \
+   *                               B       F
+   *                             / | \       \
+   *                           C   D   E       G
+   *                                         / /\ \
+   *                                       H  I  J  K
+   *
+   * for in-order traversal, 'G' is considered to be the "left"
+   * child of 'F', which will cause 'F' to be the last node visited.
+   */
+
+  tstring = NULL;
+  g_node_traverse (root, G_PRE_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "ABCDEFGHIJK") == 0);
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_POST_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "CDEBHIJKGFA") == 0);
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "CBDEAHGIJKF") == 0);
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "ABFCDEGHIJK") == 0);
+  g_free (tstring); tstring = NULL;
+  
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "CDEHIJK") == 0);
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_PRE_ORDER, G_TRAVERSE_NON_LEAFS, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "ABFG") == 0);
+  g_free (tstring); tstring = NULL;
+
+  g_node_reverse_children (node_B);
+  g_node_reverse_children (node_G);
+
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "ABFEDCGKJIH") == 0);
+  g_free (tstring); tstring = NULL;
+  
+  g_node_append (node_D, g_node_new (C2P ('L')));
+  g_node_append (node_D, g_node_new (C2P ('M')));
+
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  TEST (tstring, strcmp (tstring, "ABFEDCGLMKJIH") == 0);
+  g_free (tstring); tstring = NULL;
+
+  g_node_destroy (root);
+
+  /* allocation tests */
+
+  root = g_node_new (NULL);
+  node = root;
+
+  for (i = 0; i < 2048; i++)
+    {
+      g_node_append (node, g_node_new (NULL));
+      if ((i%5) == 4)
+	node = node->children->next;
+    }
+  TEST (NULL, g_node_max_height (root) > 100);
+  TEST (NULL, g_node_n_nodes (root, G_TRAVERSE_ALL) == 1 + 2048);
+
+  g_node_destroy (root);
+  
+  if (failed)
+    exit(1);
+}
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_node_test ();
+
+  return 0;
+}
+
diff --git a/tests/onceinit.c b/tests/onceinit.c
new file mode 100644
index 0000000..372eb2f
--- /dev/null
+++ b/tests/onceinit.c
@@ -0,0 +1,274 @@
+/* g_once_init_*() test
+ * Copyright (C) 2007 Tim Janik
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ * In no event shall the authors or 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.
+ */
+#include <glib.h>
+#include <stdlib.h>
+
+#define N_THREADS               (13)
+
+static GMutex      *tmutex = NULL;
+static GCond       *tcond = NULL;
+static volatile int thread_call_count = 0;
+static char         dummy_value = 'x';
+
+static void
+assert_singleton_execution1 (void)
+{
+  static volatile int seen_execution = 0;
+  int old_seen_execution = g_atomic_int_exchange_and_add (&seen_execution, 1);
+  if (old_seen_execution != 0)
+    g_error ("%s: function executed more than once", G_STRFUNC);
+}
+
+static void
+assert_singleton_execution2 (void)
+{
+  static volatile int seen_execution = 0;
+  int old_seen_execution = g_atomic_int_exchange_and_add (&seen_execution, 1);
+  if (old_seen_execution != 0)
+    g_error ("%s: function executed more than once", G_STRFUNC);
+}
+
+static void
+assert_singleton_execution3 (void)
+{
+  static volatile int seen_execution = 0;
+  int old_seen_execution = g_atomic_int_exchange_and_add (&seen_execution, 1);
+  if (old_seen_execution != 0)
+    g_error ("%s: function executed more than once", G_STRFUNC);
+}
+
+static void
+initializer1 (void)
+{
+  static volatile gsize initialized = 0;
+  if (g_once_init_enter (&initialized))
+    {
+      gsize initval = 42;
+      assert_singleton_execution1();
+      g_once_init_leave (&initialized, initval);
+    }
+}
+
+static gpointer
+initializer2 (void)
+{
+  static volatile gsize initialized = 0;
+  if (g_once_init_enter (&initialized))
+    {
+      void *pointer_value = &dummy_value;
+      assert_singleton_execution2();
+      g_once_init_leave (&initialized, (gsize) pointer_value);
+    }
+  return (void*) initialized;
+}
+
+static void
+initializer3 (void)
+{
+  static volatile gsize initialized = 0;
+  if (g_once_init_enter (&initialized))
+    {
+      gsize initval = 42;
+      assert_singleton_execution3();
+      g_usleep (25 * 1000);     /* waste time for multiple threads to wait */
+      g_once_init_leave (&initialized, initval);
+    }
+}
+
+static gpointer
+tmain_call_initializer3 (gpointer user_data)
+{
+  g_mutex_lock (tmutex);
+  g_cond_wait (tcond, tmutex);
+  g_mutex_unlock (tmutex);
+  //g_printf ("[");
+  initializer3();
+  //g_printf ("]\n");
+  g_atomic_int_exchange_and_add (&thread_call_count, 1);
+  return NULL;
+}
+
+static void*     stress_concurrent_initializers (void*);
+
+int
+main (int   argc,
+      char *argv[])
+{
+  GThread *threads[N_THREADS];
+  int i;
+  /* test simple initializer */
+  initializer1();
+  initializer1();
+  /* test pointer initializer */
+  void *p = initializer2();
+  g_assert (p == &dummy_value);
+  p = initializer2();
+  g_assert (p == &dummy_value);
+  /* setup threads */
+  g_thread_init (NULL);
+  tmutex = g_mutex_new ();
+  tcond = g_cond_new ();
+  /* start multiple threads for initializer3() */
+  g_mutex_lock (tmutex);
+  for (i = 0; i < N_THREADS; i++)
+    threads[i] = g_thread_create (tmain_call_initializer3, 0, FALSE, NULL);
+  g_mutex_unlock (tmutex);
+  /* concurrently call initializer3() */
+  g_cond_broadcast (tcond);
+  /* loop until all threads passed the call to initializer3() */
+  while (g_atomic_int_get (&thread_call_count) < i)
+    {
+      if (rand() % 2)
+        g_thread_yield();   /* concurrent shuffling for single core */
+      else
+        g_usleep (1000);    /* concurrent shuffling for multi core */
+      g_cond_broadcast (tcond);
+    }
+  /* call multiple (unoptimized) initializers from multiple threads */
+  g_mutex_lock (tmutex);
+  g_atomic_int_set (&thread_call_count, 0);
+  for (i = 0; i < N_THREADS; i++)
+    g_thread_create (stress_concurrent_initializers, 0, FALSE, NULL);
+  g_mutex_unlock (tmutex);
+  while (g_atomic_int_get (&thread_call_count) < 256 * 4 * N_THREADS)
+    g_usleep (50 * 1000);       /* wait for all 5 threads to complete */
+  return 0;
+}
+
+/* get rid of g_once_init_enter-optimizations in the below definitions
+ * to uncover possible races in the g_once_init_enter_impl()/
+ * g_once_init_leave() implementations
+ */
+#define g_once_init_enter       g_once_init_enter_impl
+
+/* define 16 * 16 simple initializers */
+#define DEFINE_TEST_INITIALIZER(N)                      \
+      static void                                       \
+      test_initializer_##N (void)                       \
+      {                                                 \
+        static volatile gsize initialized = 0;          \
+        if (g_once_init_enter (&initialized))           \
+          {                                             \
+            g_free (g_strdup_printf ("cpuhog%5d", 1));  \
+            g_free (g_strdup_printf ("cpuhog%6d", 2));  \
+            g_free (g_strdup_printf ("cpuhog%7d", 3));  \
+            g_once_init_leave (&initialized, 1);        \
+          }                                             \
+      }
+#define DEFINE_16_TEST_INITIALIZERS(P)                  \
+                DEFINE_TEST_INITIALIZER (P##0)          \
+                DEFINE_TEST_INITIALIZER (P##1)          \
+                DEFINE_TEST_INITIALIZER (P##2)          \
+                DEFINE_TEST_INITIALIZER (P##3)          \
+                DEFINE_TEST_INITIALIZER (P##4)          \
+                DEFINE_TEST_INITIALIZER (P##5)          \
+                DEFINE_TEST_INITIALIZER (P##6)          \
+                DEFINE_TEST_INITIALIZER (P##7)          \
+                DEFINE_TEST_INITIALIZER (P##8)          \
+                DEFINE_TEST_INITIALIZER (P##9)          \
+                DEFINE_TEST_INITIALIZER (P##a)          \
+                DEFINE_TEST_INITIALIZER (P##b)          \
+                DEFINE_TEST_INITIALIZER (P##c)          \
+                DEFINE_TEST_INITIALIZER (P##d)          \
+                DEFINE_TEST_INITIALIZER (P##e)          \
+                DEFINE_TEST_INITIALIZER (P##f)
+#define DEFINE_256_TEST_INITIALIZERS(P)                 \
+                DEFINE_16_TEST_INITIALIZERS (P##_0)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_1)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_2)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_3)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_4)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_5)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_6)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_7)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_8)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_9)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_a)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_b)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_c)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_d)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_e)     \
+                DEFINE_16_TEST_INITIALIZERS (P##_f)
+
+/* list 16 * 16 simple initializers */
+#define LIST_16_TEST_INITIALIZERS(P)                    \
+                test_initializer_##P##0,                \
+                test_initializer_##P##1,                \
+                test_initializer_##P##2,                \
+                test_initializer_##P##3,                \
+                test_initializer_##P##4,                \
+                test_initializer_##P##5,                \
+                test_initializer_##P##6,                \
+                test_initializer_##P##7,                \
+                test_initializer_##P##8,                \
+                test_initializer_##P##9,                \
+                test_initializer_##P##a,                \
+                test_initializer_##P##b,                \
+                test_initializer_##P##c,                \
+                test_initializer_##P##d,                \
+                test_initializer_##P##e,                \
+                test_initializer_##P##f
+#define LIST_256_TEST_INITIALIZERS(P)                   \
+                LIST_16_TEST_INITIALIZERS (P##_0),      \
+                LIST_16_TEST_INITIALIZERS (P##_1),      \
+                LIST_16_TEST_INITIALIZERS (P##_2),      \
+                LIST_16_TEST_INITIALIZERS (P##_3),      \
+                LIST_16_TEST_INITIALIZERS (P##_4),      \
+                LIST_16_TEST_INITIALIZERS (P##_5),      \
+                LIST_16_TEST_INITIALIZERS (P##_6),      \
+                LIST_16_TEST_INITIALIZERS (P##_7),      \
+                LIST_16_TEST_INITIALIZERS (P##_8),      \
+                LIST_16_TEST_INITIALIZERS (P##_9),      \
+                LIST_16_TEST_INITIALIZERS (P##_a),      \
+                LIST_16_TEST_INITIALIZERS (P##_b),      \
+                LIST_16_TEST_INITIALIZERS (P##_c),      \
+                LIST_16_TEST_INITIALIZERS (P##_d),      \
+                LIST_16_TEST_INITIALIZERS (P##_e),      \
+                LIST_16_TEST_INITIALIZERS (P##_f)
+
+/* define 4 * 256 initializers */
+DEFINE_256_TEST_INITIALIZERS (stress1);
+DEFINE_256_TEST_INITIALIZERS (stress2);
+DEFINE_256_TEST_INITIALIZERS (stress3);
+DEFINE_256_TEST_INITIALIZERS (stress4);
+
+/* call the above 1024 initializers */
+static void*
+stress_concurrent_initializers (void *user_data)
+{
+  static void (*initializers[]) (void) = {
+    LIST_256_TEST_INITIALIZERS (stress1),
+    LIST_256_TEST_INITIALIZERS (stress2),
+    LIST_256_TEST_INITIALIZERS (stress3),
+    LIST_256_TEST_INITIALIZERS (stress4),
+  };
+  int i;
+  /* sync to main thread */
+  g_mutex_lock (tmutex);
+  g_mutex_unlock (tmutex);
+  /* initialize concurrently */
+  for (i = 0; i < G_N_ELEMENTS (initializers); i++)
+    {
+      initializers[i]();
+      g_atomic_int_exchange_and_add (&thread_call_count, 1);
+    }
+  return NULL;
+}
diff --git a/tests/patterntest.c b/tests/patterntest.c
new file mode 100644
index 0000000..2625438
--- /dev/null
+++ b/tests/patterntest.c
@@ -0,0 +1,308 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2001 Matthias Clasen <matthiasc@poet.de>
+ *
+ * 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 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.
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <string.h>
+#include <glib.h>
+
+static gboolean noisy = FALSE;
+
+static void
+verbose (const gchar *format, ...)
+{
+  gchar *msg;
+  va_list args;
+
+  va_start (args, format);
+  msg = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  if (noisy) 
+    g_print (msg);
+  g_free (msg);
+}
+
+/* keep enum and structure of gpattern.c and patterntest.c in sync */
+typedef enum
+{
+  G_MATCH_ALL,       /* "*A?A*" */
+  G_MATCH_ALL_TAIL,  /* "*A?AA" */
+  G_MATCH_HEAD,      /* "AAAA*" */
+  G_MATCH_TAIL,      /* "*AAAA" */
+  G_MATCH_EXACT,     /* "AAAAA" */
+  G_MATCH_LAST
+} GMatchType;
+
+struct _GPatternSpec
+{
+  GMatchType match_type;
+  guint      pattern_length;
+  guint      min_length;
+  guint      max_length;
+  gchar     *pattern;
+};
+
+
+static gchar *
+match_type_name (GMatchType match_type)
+{
+  switch (match_type)
+    {
+    case G_MATCH_ALL: 
+      return "G_MATCH_ALL";
+      break;
+    case G_MATCH_ALL_TAIL:
+      return "G_MATCH_ALL_TAIL";
+      break;
+    case G_MATCH_HEAD:
+      return "G_MATCH_HEAD";
+      break;
+    case G_MATCH_TAIL:
+      return "G_MATCH_TAIL";
+      break;
+    case G_MATCH_EXACT:
+      return "G_MATCH_EXACT";
+      break;
+    default:
+      return "unknown GMatchType";
+      break;
+    }
+}
+
+static gboolean
+test_compilation (gchar *src, 
+		  GMatchType match_type, 
+		  gchar *pattern,
+		  guint min)
+{
+  GPatternSpec *spec; 
+
+  verbose ("compiling \"%s\" \t", src);
+  spec = g_pattern_spec_new (src);
+
+  if (spec->match_type != match_type)
+    {
+      g_print ("failed \t(match_type: %s, expected %s)\n",
+	       match_type_name (spec->match_type), 
+	       match_type_name (match_type));
+      g_pattern_spec_free (spec);
+      return FALSE;
+    }
+  
+  if (strcmp (spec->pattern, pattern) != 0)
+    {
+      g_print ("failed \t(pattern: \"%s\", expected \"%s\")\n",
+	       spec->pattern,
+	       pattern);
+      g_pattern_spec_free (spec);
+      return FALSE;
+    }
+  
+  if (spec->pattern_length != strlen (spec->pattern))
+    {
+      g_print ("failed \t(pattern_length: %d, expected %d)\n",
+	       spec->pattern_length,
+	       (gint)strlen (spec->pattern));
+      g_pattern_spec_free (spec);
+      return FALSE;
+    }
+  
+  if (spec->min_length != min)
+    {
+      g_print ("failed \t(min_length: %d, expected %d)\n",
+	       spec->min_length,
+	       min);
+      g_pattern_spec_free (spec);
+      return FALSE;
+    }
+  
+  verbose ("passed (%s: \"%s\")\n",
+	   match_type_name (spec->match_type),
+	   spec->pattern);
+
+  g_pattern_spec_free (spec);
+  
+  return TRUE;
+}
+
+static gboolean
+test_match (gchar *pattern, 
+	    gchar *string, 
+	    gboolean match)
+{
+  verbose ("matching \"%s\" against \"%s\" \t", string, pattern);
+  
+  if (g_pattern_match_simple (pattern, string) != match)
+    {
+      g_print ("failed \t(unexpected %s)\n", (match ? "mismatch" : "match"));
+      return FALSE;
+    }
+  
+  verbose ("passed (%s)\n", match ? "match" : "nomatch");
+
+  return TRUE;
+}
+
+static gboolean
+test_equal (gchar *pattern1,
+	    gchar *pattern2,
+	    gboolean expected)
+{
+  GPatternSpec *p1 = g_pattern_spec_new (pattern1);
+  GPatternSpec *p2 = g_pattern_spec_new (pattern2);
+  gboolean equal = g_pattern_spec_equal (p1, p2);
+
+  verbose ("comparing \"%s\" with \"%s\" \t", pattern1, pattern2);
+
+  if (expected != equal)
+    {
+      g_print ("failed \t{%s, %u, \"%s\"} %s {%s, %u, \"%s\"}\n",
+	       match_type_name (p1->match_type), p1->pattern_length, p1->pattern,
+	       expected ? "!=" : "==",
+	       match_type_name (p2->match_type), p2->pattern_length, p2->pattern);
+    }
+  else
+    verbose ("passed (%s)\n", equal ? "equal" : "unequal");
+  
+  g_pattern_spec_free (p1);
+  g_pattern_spec_free (p2);
+
+  return expected == equal;
+}
+
+#define TEST_COMPILATION(src, type, pattern, min) { \
+  total++; \
+  if (test_compilation (src, type, pattern, min)) \
+    passed++; \
+  else \
+    failed++; \
+}
+
+#define TEST_MATCH(pattern, string, match) { \
+  total++; \
+  if (test_match (pattern, string, match)) \
+    passed++; \
+  else \
+    failed++; \
+}
+
+#define TEST_EQUAL(pattern1, pattern2, match) { \
+  total++; \
+  if (test_equal (pattern1, pattern2, match)) \
+    passed++; \
+  else \
+    failed++; \
+}
+
+int
+main (int argc, char** argv)
+{
+  gint total = 0;
+  gint passed = 0;
+  gint failed = 0;
+  gint i;
+
+  for (i = 1; i < argc; i++) 
+      if (strcmp ("--noisy", argv[i]) == 0)
+	noisy = TRUE;
+
+  TEST_COMPILATION("*A?B*", G_MATCH_ALL, "*A?B*", 3);
+  TEST_COMPILATION("ABC*DEFGH", G_MATCH_ALL_TAIL, "HGFED*CBA", 8);
+  TEST_COMPILATION("ABCDEF*GH", G_MATCH_ALL, "ABCDEF*GH", 8);
+  TEST_COMPILATION("ABC**?***??**DEF*GH", G_MATCH_ALL, "ABC*???DEF*GH", 11);
+  TEST_COMPILATION("*A?AA", G_MATCH_ALL_TAIL, "AA?A*", 4);
+  TEST_COMPILATION("ABCD*", G_MATCH_HEAD, "ABCD", 4);
+  TEST_COMPILATION("*ABCD", G_MATCH_TAIL, "ABCD", 4);
+  TEST_COMPILATION("ABCDE", G_MATCH_EXACT, "ABCDE", 5);
+  TEST_COMPILATION("A?C?E", G_MATCH_ALL, "A?C?E", 5);
+  TEST_COMPILATION("*?x", G_MATCH_ALL_TAIL, "x?*", 2);
+  TEST_COMPILATION("?*x", G_MATCH_ALL_TAIL, "x?*", 2);
+  TEST_COMPILATION("*?*x", G_MATCH_ALL_TAIL, "x?*", 2);
+  TEST_COMPILATION("x*??", G_MATCH_ALL_TAIL, "??*x", 3);
+
+  TEST_EQUAL("*A?B*", "*A?B*", TRUE);
+  TEST_EQUAL("A*BCD", "A*BCD", TRUE);
+  TEST_EQUAL("ABCD*", "ABCD****", TRUE);
+  TEST_EQUAL("A1*", "A1*", TRUE);
+  TEST_EQUAL("*YZ", "*YZ", TRUE);
+  TEST_EQUAL("A1x", "A1x", TRUE);
+  TEST_EQUAL("AB*CD", "AB**CD", TRUE);
+  TEST_EQUAL("AB*?*CD", "AB*?CD", TRUE);
+  TEST_EQUAL("AB*?CD", "AB?*CD", TRUE);
+  TEST_EQUAL("AB*CD", "AB*?*CD", FALSE);
+  TEST_EQUAL("ABC*", "ABC?", FALSE);
+
+  TEST_MATCH("*x", "x", TRUE);
+  TEST_MATCH("*x", "xx", TRUE);
+  TEST_MATCH("*x", "yyyx", TRUE);
+  TEST_MATCH("*x", "yyxy", FALSE);
+  TEST_MATCH("?x", "x", FALSE);
+  TEST_MATCH("?x", "xx", TRUE);
+  TEST_MATCH("?x", "yyyx", FALSE);
+  TEST_MATCH("?x", "yyxy", FALSE);
+  TEST_MATCH("*?x", "xx", TRUE);
+  TEST_MATCH("?*x", "xx", TRUE);
+  TEST_MATCH("*?x", "x", FALSE);
+  TEST_MATCH("?*x", "x", FALSE);
+  TEST_MATCH("*?*x", "yx", TRUE);
+  TEST_MATCH("*?*x", "xxxx", TRUE);
+  TEST_MATCH("x*??", "xyzw", TRUE);
+  TEST_MATCH("*x", "\xc3\x84x", TRUE);
+  TEST_MATCH("?x", "\xc3\x84x", TRUE);
+  TEST_MATCH("??x", "\xc3\x84x", FALSE);
+  TEST_MATCH("ab\xc3\xa4\xc3\xb6", "ab\xc3\xa4\xc3\xb6", TRUE);
+  TEST_MATCH("ab\xc3\xa4\xc3\xb6", "abao", FALSE);
+  TEST_MATCH("ab?\xc3\xb6", "ab\xc3\xa4\xc3\xb6", TRUE);
+  TEST_MATCH("ab?\xc3\xb6", "abao", FALSE);
+  TEST_MATCH("ab\xc3\xa4?", "ab\xc3\xa4\xc3\xb6", TRUE);
+  TEST_MATCH("ab\xc3\xa4?", "abao", FALSE);
+  TEST_MATCH("ab??", "ab\xc3\xa4\xc3\xb6", TRUE);
+  TEST_MATCH("ab*", "ab\xc3\xa4\xc3\xb6", TRUE);
+  TEST_MATCH("ab*\xc3\xb6", "ab\xc3\xa4\xc3\xb6", TRUE);
+  TEST_MATCH("ab*\xc3\xb6", "aba\xc3\xb6x\xc3\xb6", TRUE);
+  TEST_MATCH("", "abc", FALSE);
+
+  TEST_MATCH("", "", TRUE);
+  TEST_MATCH("abc", "abc", TRUE);
+  TEST_MATCH("*fo1*bar", "yyyfoxfo1bar", TRUE);
+  TEST_MATCH("12*fo1g*bar", "12yyyfoxfo1gbar", TRUE);
+  TEST_MATCH("__________:*fo1g*bar", "__________:yyyfoxfo1gbar", TRUE);
+  TEST_MATCH("*abc*cde", "abcde", FALSE);
+  TEST_MATCH("*abc*cde", "abccde", TRUE);
+  TEST_MATCH("*abc*cde", "abcxcde", TRUE);
+  TEST_MATCH("*abc*?cde", "abccde", FALSE);
+  TEST_MATCH("*abc*?cde", "abcxcde", TRUE);
+  TEST_MATCH("*abc*def", "abababcdededef", TRUE);
+  TEST_MATCH("*abc*def", "abcbcbcdededef", TRUE);
+  TEST_MATCH("*acbc*def", "acbcbcbcdededef", TRUE);
+  TEST_MATCH("*a?bc*def", "acbcbcbcdededef", TRUE);
+  TEST_MATCH("*abc*def", "bcbcbcdefdef", FALSE);
+  TEST_MATCH("*abc*def*ghi", "abcbcbcbcbcbcdefefdefdefghi", TRUE);
+  TEST_MATCH("*abc*def*ghi", "bcbcbcbcbcbcdefdefdefdefghi", FALSE);
+  TEST_MATCH("_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_*abc*def*ghi", "_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_abcbcbcbcbcbcdefefdefdefghi", TRUE);
+  TEST_MATCH("fooooooo*a*bc", "fooooooo_a_bd_a_bc", TRUE);
+    
+  verbose ("\n%u tests passed, %u failed\n", passed, failed);
+
+  return failed;
+}
+
+
diff --git a/tests/qsort-test.c b/tests/qsort-test.c
new file mode 100644
index 0000000..2befa2e
--- /dev/null
+++ b/tests/qsort-test.c
@@ -0,0 +1,33 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+
+#define SIZE 100000
+
+guint32 array[SIZE];
+
+static gint
+sort (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+  return *(guint32*)a < *(guint32*)b ? -1 : 1;
+}
+
+int
+main ()
+{
+  int i;
+
+  for (i = 0; i < SIZE; i++)
+    array[i] = g_random_int ();
+
+  g_qsort_with_data (array, SIZE, sizeof (guint32), sort, NULL);
+
+  for (i = 0; i < SIZE - 1; i++)
+    g_assert (array[i] <= array[i+1]);
+
+  /* 0 elemenents is a valid case */
+  g_qsort_with_data (array, 0, sizeof (guint32), sort, NULL);
+
+  return 0;
+}
diff --git a/tests/queue-test.c b/tests/queue-test.c
new file mode 100644
index 0000000..448e8bd
--- /dev/null
+++ b/tests/queue-test.c
@@ -0,0 +1,962 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <time.h>
+#include <stdlib.h>
+
+#include <glib.h>
+
+
+static gboolean verbose = FALSE;
+
+
+static void
+check_integrity (GQueue *queue)
+{
+  GList *list;
+  GList *last;
+  GList *links;
+  GList *link;
+  gint n;
+  
+  g_assert (queue->length < 4000000000u);
+  
+  g_assert (g_queue_get_length (queue) == queue->length);
+  
+  if (!queue->head)
+    g_assert (!queue->tail);
+  if (!queue->tail)
+    g_assert (!queue->head);
+  
+  n = 0;
+  last = NULL;
+  for (list = queue->head; list != NULL; list = list->next)
+    {
+      if (!list->next)
+	last = list;
+      ++n;
+    }
+  g_assert (n == queue->length); 
+  g_assert (last == queue->tail);
+  
+  n = 0;
+  last = NULL;
+  for (list = queue->tail; list != NULL; list = list->prev)
+    {
+      if (!list->prev)
+	last = list;
+      ++n;
+    }
+  g_assert (n == queue->length);
+  g_assert (last == queue->head);
+  
+  links = NULL;
+  for (list = queue->head; list != NULL; list = list->next)
+    links = g_list_prepend (links, list);
+  
+  link = links;
+  for (list = queue->tail; list != NULL; list = list->prev)
+    {
+      g_assert (list == link->data);
+      link = link->next;
+    }
+  g_list_free (links);
+  
+  links = NULL;
+  for (list = queue->tail; list != NULL; list = list->prev)
+    links = g_list_prepend (links, list);
+  
+  link = links;
+  for (list = queue->head; list != NULL; list = list->next)
+    {
+      g_assert (list == link->data);
+      link = link->next;
+    }
+  g_list_free (links);
+}
+
+static gboolean
+rnd_bool (void)
+{
+  return g_random_int_range (0, 2);
+}
+
+static void
+check_max (gpointer elm, gpointer user_data)
+{
+  gint *best = user_data;
+  gint element = GPOINTER_TO_INT (elm);
+
+  if (element > *best)
+    *best = element;
+}
+
+static void
+check_min (gpointer elm, gpointer user_data)
+{
+  gint *best = user_data;
+  gint element = GPOINTER_TO_INT (elm);
+
+  if (element < *best)
+    *best = element;
+}
+
+static gint
+find_min (GQueue *queue)
+{
+  gint min = G_MAXINT;
+
+  g_queue_foreach (queue, check_min, &min);
+
+  return min;
+}
+
+static gint
+find_max (GQueue *queue)
+{
+  gint max = G_MININT;
+  
+  g_queue_foreach (queue, check_max, &max);
+
+  return max;
+}
+
+static void
+delete_elm (gpointer elm, gpointer user_data)
+{
+  g_queue_remove ((GQueue *)user_data, elm);
+  check_integrity ((GQueue *)user_data);
+}
+
+static void
+delete_all (GQueue *queue)
+{
+  g_queue_foreach (queue, delete_elm, queue);
+}
+
+static int
+compare_int (gconstpointer a, gconstpointer b, gpointer data)
+{
+  int ai = GPOINTER_TO_INT (a);
+  int bi = GPOINTER_TO_INT (b);
+
+  if (ai > bi)
+    return 1;
+  else if (ai == bi)
+    return 0;
+  else
+    return -1;
+}
+
+static gint
+get_random_position (GQueue *queue, gboolean allow_offlist)
+{
+  int n;
+  enum { OFF_QUEUE, HEAD, TAIL, MIDDLE, LAST } where;
+
+  if (allow_offlist)
+    where = g_random_int_range (OFF_QUEUE, LAST);
+  else
+    where = g_random_int_range (HEAD, LAST);
+
+  switch (where)
+    {
+    case OFF_QUEUE:
+      n = g_random_int ();
+      break;
+
+    case HEAD:
+      n = 0;
+      break;
+
+    case TAIL:
+      if (allow_offlist)
+	n = queue->length;
+      else
+	n = queue->length - 1;
+      break;
+
+    case MIDDLE:
+      if (queue->length == 0)
+	n = 0;
+      else
+	n = g_random_int_range (0, queue->length);
+      break;
+
+    default:
+      g_assert_not_reached();
+      n = 100;
+      break;
+
+    }
+
+  return n;
+}
+
+static void
+random_test (int seed)
+{
+  typedef enum {
+    IS_EMPTY, GET_LENGTH, REVERSE, COPY,
+    FOREACH, FIND, FIND_CUSTOM, SORT,
+    PUSH_HEAD, PUSH_TAIL, PUSH_NTH, POP_HEAD,
+    POP_TAIL, POP_NTH, PEEK_HEAD, PEEK_TAIL,
+    PEEK_NTH, INDEX, REMOVE, REMOVE_ALL,
+    INSERT_BEFORE, INSERT_AFTER, INSERT_SORTED, PUSH_HEAD_LINK,
+    PUSH_TAIL_LINK, PUSH_NTH_LINK, POP_HEAD_LINK, POP_TAIL_LINK,
+    POP_NTH_LINK, PEEK_HEAD_LINK, PEEK_TAIL_LINK, PEEK_NTH_LINK,
+    LINK_INDEX, UNLINK, DELETE_LINK, LAST_OP
+  } QueueOp;
+
+#define N_ITERATIONS 500000
+#define N_QUEUES 3
+
+#define RANDOM_QUEUE() &(queues[g_random_int_range(0, N_QUEUES)])
+
+  typedef struct QueueInfo QueueInfo;
+  struct QueueInfo
+  {
+    GQueue *queue;
+    GList *tail;
+    GList *head;
+    guint length;
+  };
+  
+  gint i;
+  QueueOp op;
+  QueueInfo queues[N_QUEUES];
+
+  if (verbose)
+    g_print ("seed: %d\n", seed);
+
+  g_random_set_seed (seed);
+  
+  for (i = 0; i < N_QUEUES; ++i)
+    {
+      queues[i].queue = g_queue_new ();
+      queues[i].head = NULL;
+      queues[i].tail = NULL;
+      queues[i].length = 0;
+    }
+  
+  for (i = 0; i < N_ITERATIONS; ++i)
+    {
+      int j;
+      QueueInfo *qinf = RANDOM_QUEUE();
+      GQueue *q = qinf->queue;
+      op = g_random_int_range (IS_EMPTY, LAST_OP);
+
+      g_assert (qinf->head == q->head);
+      g_assert (qinf->tail == q->tail);
+      g_assert (qinf->length == q->length);
+      
+      switch (op)
+	{
+	case IS_EMPTY:
+	  {
+	    if (g_queue_is_empty (qinf->queue))
+	      {
+		g_assert (q->head == NULL);
+		g_assert (q->tail == NULL);
+		g_assert (q->length == 0);
+	      }
+	    else
+	      {
+		g_assert (q->head);
+		g_assert (q->tail);
+		g_assert (q->length > 0);
+	      }
+	  }
+	  break;
+	case GET_LENGTH:
+	  {
+	    int l;
+	    
+	    l = g_queue_get_length (q);
+	    
+	    g_assert (qinf->length == q->length);
+	    g_assert (qinf->length == l);
+	  }
+	  break;
+	case REVERSE:
+	  g_queue_reverse (q);
+	  g_assert (qinf->tail == q->head);
+	  g_assert (qinf->head == q->tail);
+	  g_assert (qinf->length == q->length);
+	  qinf->tail = q->tail;
+	  qinf->head = q->head;
+	  break;
+	case COPY:
+	  {
+	    QueueInfo *random_queue = RANDOM_QUEUE();
+	    GQueue *new_queue = g_queue_copy (random_queue->queue);
+	    
+	    g_queue_free (qinf->queue);
+	    q = qinf->queue = new_queue;
+	    qinf->head = new_queue->head;
+	    qinf->tail = g_list_last (new_queue->head);
+	    qinf->length = new_queue->length;
+	  }
+	  break;
+	case FOREACH:
+	  delete_all (q);
+	  qinf->head = NULL;
+	  qinf->tail = NULL;
+	  qinf->length = 0;
+	  break;
+	case FIND:
+	  {
+	    gboolean find_existing = rnd_bool ();
+	    int first = find_max (q);
+	    int second = find_min (q);
+
+	    if (q->length == 0)
+	      find_existing = FALSE;
+	    
+	    if (!find_existing)
+	      first++;
+	    if (!find_existing)
+	      second--;
+
+	    if (find_existing)
+	      {
+		g_assert (g_queue_find (q, GINT_TO_POINTER (first)));
+		g_assert (g_queue_find (q, GINT_TO_POINTER (second)));
+	      }
+	    else
+	      {
+		g_assert (!g_queue_find (q, GINT_TO_POINTER (first)));
+		g_assert (!g_queue_find (q, GINT_TO_POINTER (second)));
+	      }
+	  }
+	  break;
+	case FIND_CUSTOM:
+	  break;
+	case SORT:
+	  {
+	    if (!g_queue_is_empty (q))
+	      {
+		int max = find_max (q);
+		int min = find_min (q);
+		g_queue_remove_all (q, GINT_TO_POINTER (max));
+		check_integrity (q);
+		g_queue_remove_all (q, GINT_TO_POINTER (min));
+		check_integrity (q);
+		g_queue_push_head (q, GINT_TO_POINTER (max));
+		if (max != min)
+		  g_queue_push_head (q, GINT_TO_POINTER (min));
+		qinf->length = q->length;
+	      }
+
+	    check_integrity (q);
+	    
+	    g_queue_sort (q, compare_int, NULL);
+
+	    check_integrity (q);
+	    
+	    qinf->head = g_queue_find (q, GINT_TO_POINTER (find_min(q)));
+	    qinf->tail = g_queue_find (q, GINT_TO_POINTER (find_max(q)));
+
+	    g_assert (qinf->tail == q->tail);
+	  }
+	  break;
+	case PUSH_HEAD:
+	  {
+	    int x = g_random_int_range (0, 435435);
+	    g_queue_push_head (q, GINT_TO_POINTER (x));
+	    if (!qinf->head)
+	      qinf->tail = qinf->head = q->head;
+	    else
+	      qinf->head = qinf->head->prev;
+	    qinf->length++;
+	  }
+	  break;
+	case PUSH_TAIL:
+	  {
+	    int x = g_random_int_range (0, 236546);
+	    g_queue_push_tail (q, GINT_TO_POINTER (x));
+	    if (!qinf->tail)
+	      qinf->tail = qinf->head = q->head;
+	    else
+	      qinf->tail = qinf->tail->next;
+	    qinf->length++;
+	  }
+	  break;
+	case PUSH_NTH:
+	  {
+	    int pos = get_random_position (q, TRUE);
+	    int x = g_random_int_range (0, 236546);
+	    g_queue_push_nth (q, GINT_TO_POINTER (x), pos);
+	    if (qinf->head && qinf->head->prev)
+	      qinf->head = qinf->head->prev;
+	    else
+	      qinf->head = q->head;
+	    if (qinf->tail && qinf->tail->next)
+	      qinf->tail = qinf->tail->next;
+	    else
+	      qinf->tail = g_list_last (qinf->head);
+	    qinf->length++;
+	  }
+	  break;
+	case POP_HEAD:
+	  if (qinf->head)
+	    qinf->head = qinf->head->next;
+	  if (!qinf->head)
+	    qinf->tail = NULL;
+	  qinf->length = (qinf->length == 0)? 0 : qinf->length - 1;
+	  g_queue_pop_head (q);
+	  break;
+	case POP_TAIL:
+	  if (qinf->tail)
+	    qinf->tail = qinf->tail->prev;
+	  if (!qinf->tail)
+	    qinf->head = NULL;
+	  qinf->length = (qinf->length == 0)? 0 : qinf->length - 1;
+	  g_queue_pop_tail (q);
+	  break;
+	case POP_NTH:
+	  if (!g_queue_is_empty (q))
+	    {
+	      int n = get_random_position (q, TRUE);
+	      gpointer elm = g_queue_peek_nth (q, n);
+
+	      if (n == q->length - 1)
+		qinf->tail = qinf->tail->prev;
+	      
+	      if (n == 0)
+		qinf->head = qinf->head->next;
+
+	      if (n >= 0 && n < q->length)
+		qinf->length--;
+	      
+	      g_assert (elm == g_queue_pop_nth (q, n));
+	    }
+	  break;
+	case PEEK_HEAD:
+	  if (qinf->head)
+	    g_assert (qinf->head->data == g_queue_peek_head (q));
+	  else
+	    g_assert (g_queue_peek_head (q) == NULL);
+	  break;
+	case PEEK_TAIL:
+	  if (qinf->head)
+	    g_assert (qinf->tail->data == g_queue_peek_tail (q));
+	  else
+	    g_assert (g_queue_peek_tail (q) == NULL);
+	  break;
+	case PEEK_NTH:
+	  if (g_queue_is_empty (q))
+	    {
+	      for (j = -10; j < 10; ++j)
+		g_assert (g_queue_peek_nth (q, j) == NULL);
+	    }
+	  else
+	    {
+	      GList *list;
+	      int n = get_random_position (q, TRUE);
+	      if (n < 0 || n >= q->length)
+		{
+		  g_assert (g_queue_peek_nth (q, n) == NULL);
+		}
+	      else
+		{
+		  list = qinf->head;
+		  for (j = 0; j < n; ++j)
+		    list = list->next;
+		  
+		  g_assert (list->data == g_queue_peek_nth (q, n));
+		}
+	    }
+	  break;
+	case INDEX:
+	case LINK_INDEX:
+	  {
+	    int x = g_random_int_range (0, 386538);
+	    int n;
+	    GList *list;
+
+	    g_queue_remove_all (q, GINT_TO_POINTER (x));
+ 	    check_integrity (q);
+	    g_queue_push_tail (q, GINT_TO_POINTER (x));
+ 	    check_integrity (q);
+	    g_queue_sort (q, compare_int, NULL);
+ 	    check_integrity (q);
+
+	    n = 0;
+	    for (list = q->head; list != NULL; list = list->next)
+	      {
+		if (list->data == GINT_TO_POINTER (x))
+		  break;
+		n++;
+	      }
+	    g_assert (list);
+	    g_assert (g_queue_index (q, GINT_TO_POINTER (x)) ==
+		      g_queue_link_index (q, list));
+	    g_assert (g_queue_link_index (q, list) == n);
+
+	    qinf->head = q->head;
+	    qinf->tail = q->tail;
+	    qinf->length = q->length;
+	  }
+	  break;
+	case REMOVE:
+	  if (!g_queue_is_empty (q))
+	    g_queue_remove (q, qinf->tail->data);
+	  if (!g_queue_is_empty (q))
+	    g_queue_remove (q, qinf->head->data);
+	  if (!g_queue_is_empty (q))
+	    g_queue_remove (q, g_queue_peek_nth (q, get_random_position (q, TRUE)));
+
+	  qinf->head = q->head;
+	  qinf->tail = q->tail;
+	  qinf->length = q->length;
+	  break;
+	case REMOVE_ALL:
+	  if (!g_queue_is_empty (q))
+	    g_queue_remove_all (q, qinf->tail->data);
+	  if (!g_queue_is_empty (q))
+	    g_queue_remove_all (q, qinf->head->data);
+	  if (!g_queue_is_empty (q))
+	    g_queue_remove_all (q, g_queue_peek_nth (q, get_random_position (q, TRUE)));
+
+	  qinf->head = q->head;
+	  qinf->tail = q->tail;
+	  qinf->length = q->length;
+	  break;
+	case INSERT_BEFORE:
+	  if (!g_queue_is_empty (q))
+	    {
+	      gpointer x = GINT_TO_POINTER (g_random_int_range (0, 386538));
+	      
+	      g_queue_insert_before (q, qinf->tail, x);
+	      g_queue_insert_before (q, qinf->head, x);
+	      g_queue_insert_before (q, g_queue_find (q, x), x);
+	    }
+	  qinf->head = q->head;
+	  qinf->tail = q->tail;
+	  qinf->length = q->length;
+	  break;
+	case INSERT_AFTER:
+	  if (!g_queue_is_empty (q))
+	    {
+	      gpointer x = GINT_TO_POINTER (g_random_int_range (0, 386538));
+	      
+	      g_queue_insert_after (q, qinf->tail, x);
+	      g_queue_insert_after (q, qinf->head, x);
+	      g_queue_insert_after (q, g_queue_find (q, x), x);
+	    }
+	  qinf->head = q->head;
+	  qinf->tail = q->tail;
+	  qinf->length = q->length;
+	  break;
+	case INSERT_SORTED:
+	  {
+	    int max = find_max (q);
+	    int min = find_min (q);
+
+	    if (g_queue_is_empty (q))
+	      {
+		max = 345;
+		min = -12;
+	      }
+	    
+	    g_queue_sort (q, compare_int, NULL);
+ 	    check_integrity (q);
+	    g_queue_insert_sorted (q, GINT_TO_POINTER (max + 1), compare_int, NULL);
+ 	    check_integrity (q);
+	    g_assert (GPOINTER_TO_INT (q->tail->data) == max + 1);
+	    g_queue_insert_sorted (q, GINT_TO_POINTER (min - 1), compare_int, NULL);
+ 	    check_integrity (q);
+	    g_assert (GPOINTER_TO_INT (q->head->data) == min - 1);
+	    qinf->head = q->head;
+	    qinf->tail = q->tail;
+	    qinf->length = q->length;
+	  }
+	  break;
+	case PUSH_HEAD_LINK:
+	  {
+	    GList *link = g_list_prepend (NULL, GINT_TO_POINTER (i));
+	    g_queue_push_head_link (q, link);
+	    if (!qinf->tail)
+	      qinf->tail = link;
+	    qinf->head = link;
+	    qinf->length++;
+	  }
+	  break;
+	case PUSH_TAIL_LINK:
+	  {
+	    GList *link = g_list_prepend (NULL, GINT_TO_POINTER (i));
+	    g_queue_push_tail_link (q, link);
+	    if (!qinf->head)
+	      qinf->head = link;
+	    qinf->tail = link;
+	    qinf->length++;
+	  }
+	  break;
+	case PUSH_NTH_LINK:
+	  {
+	    GList *link = g_list_prepend (NULL, GINT_TO_POINTER (i));
+	    gint n = get_random_position (q, TRUE);
+	    g_queue_push_nth_link (q, n, link);
+
+	    if (qinf->head && qinf->head->prev)
+	      qinf->head = qinf->head->prev;
+	    else
+	      qinf->head = q->head;
+	    if (qinf->tail && qinf->tail->next)
+	      qinf->tail = qinf->tail->next;
+	    else
+	      qinf->tail = g_list_last (qinf->head);
+	    qinf->length++;
+	  }
+	  break;
+	case POP_HEAD_LINK:
+	  if (!g_queue_is_empty (q))
+	    {
+	      qinf->head = qinf->head->next;
+	      if (!qinf->head)
+		qinf->tail = NULL;
+	      qinf->length--;
+	      g_list_free (g_queue_pop_head_link (q));
+	    }
+	  break;
+	case POP_TAIL_LINK:
+	  if (!g_queue_is_empty (q))
+	    {
+	      qinf->tail = qinf->tail->prev;
+	      if (!qinf->tail)
+		qinf->head = NULL;
+	      qinf->length--;
+	      g_list_free (g_queue_pop_tail_link (q));
+	    }
+	  break;
+	case POP_NTH_LINK:
+	  if (g_queue_is_empty (q))
+	    g_assert (g_queue_pop_nth_link (q, 200) == NULL);
+	  else
+	    {
+	      int n = get_random_position (q, FALSE);
+	      
+	      if (n == g_queue_get_length (q) - 1)
+		qinf->tail = qinf->tail->prev;
+	      
+	      if (n == 0)
+		qinf->head = qinf->head->next;
+	      
+	      qinf->length--;
+	      
+	      g_list_free (g_queue_pop_nth_link (q, n));
+	    }
+	  break;
+	case PEEK_HEAD_LINK:
+	  if (g_queue_is_empty (q))
+	    g_assert (g_queue_peek_head_link (q) == NULL);
+	  else
+	    g_assert (g_queue_peek_head_link (q) == qinf->head);
+	  break;
+	case PEEK_TAIL_LINK:
+	  if (g_queue_is_empty (q))
+	    g_assert (g_queue_peek_tail_link (q) == NULL);
+	  else
+	    g_assert (g_queue_peek_tail_link (q) == qinf->tail);
+	  break;
+	case PEEK_NTH_LINK:
+	  if (g_queue_is_empty(q))
+	    g_assert (g_queue_peek_nth_link (q, 1000) == NULL);
+	  else
+	    {
+	      gint n = get_random_position (q, FALSE);
+	      GList *link;
+
+	      link = q->head;
+	      for (j = 0; j < n; ++j)
+		link = link->next;
+
+	      g_assert (g_queue_peek_nth_link (q, n) == link);
+	    }
+	  break;
+	case UNLINK:
+	  if (!g_queue_is_empty (q))
+	    {
+	      gint n = g_random_int_range (0, g_queue_get_length (q));
+	      GList *link;
+
+	      link = q->head;
+	      for (j = 0; j < n; ++j)
+		link = link->next;
+
+	      g_queue_unlink (q, link);
+	      check_integrity (q);
+
+	      g_list_free (link);
+
+	      qinf->head = q->head;
+	      qinf->tail = q->tail;
+	      qinf->length--;
+	    }
+	  break;
+	case DELETE_LINK:
+	  if (!g_queue_is_empty (q))
+	    {
+	      gint n = g_random_int_range (0, g_queue_get_length (q));
+	      GList *link;
+
+	      link = q->head;
+	      for (j = 0; j < n; ++j)
+		link = link->next;
+
+	      g_queue_delete_link (q, link);
+	      check_integrity (q);
+
+	      qinf->head = q->head;
+	      qinf->tail = q->tail;
+	      qinf->length--;
+	    }
+	  break;
+	case LAST_OP:
+	default:
+	  g_assert_not_reached();
+	  break;
+	}
+
+      if (qinf->head != q->head ||
+	  qinf->tail != q->tail ||
+	  qinf->length != q->length)
+	g_print ("op: %d\n", op);
+
+      g_assert (qinf->head == q->head);
+      g_assert (qinf->tail == q->tail);
+      g_assert (qinf->length == q->length);
+      
+      for (j = 0; j < N_QUEUES; ++j)
+	check_integrity (queues[j].queue);
+    }
+  
+  for (i = 0; i < N_QUEUES; ++i)
+    g_queue_free (queues[i].queue);
+}
+
+static void
+remove_item (gpointer data, gpointer q)
+{
+  GQueue *queue = q;
+  
+  g_queue_remove (queue, data);
+}
+
+int main(int argc, gchar *args[])
+{
+  GQueue *q, *q2;
+  GList *node;
+  gpointer data;
+  int i;
+  
+  if (argc > 1 && args[1][0] == '-' && args[1][1] == 'v')
+    verbose = TRUE;
+
+  q = g_queue_new ();
+  
+  g_assert (g_queue_is_empty (q) == TRUE);
+  
+  g_queue_push_head (q, GINT_TO_POINTER (2));
+  check_integrity (q);
+  g_assert (g_queue_peek_head (q) == GINT_TO_POINTER (2));
+  check_integrity (q);
+  g_assert (g_queue_is_empty (q) == FALSE);
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 1);
+  g_assert (q->head == q->tail);
+  g_queue_push_head (q, GINT_TO_POINTER (1));
+  check_integrity (q);
+  g_assert (q->head->next == q->tail);
+  g_assert (q->tail->prev == q->head);
+  g_assert (g_list_length (q->head) == 2);
+  check_integrity (q);
+  g_assert (q->tail->data == GINT_TO_POINTER (2));
+  g_assert (q->head->data == GINT_TO_POINTER (1));
+  check_integrity (q);
+  g_queue_push_tail (q, GINT_TO_POINTER (3));
+  g_assert (g_list_length (q->head) == 3);
+  g_assert (q->head->data == GINT_TO_POINTER (1));
+  g_assert (q->head->next->data == GINT_TO_POINTER (2));
+  g_assert (q->head->next->next == q->tail);
+  g_assert (q->head->next == q->tail->prev);
+  g_assert (q->tail->data == GINT_TO_POINTER (3));
+  g_queue_push_tail (q, GINT_TO_POINTER (4));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 4);
+  g_assert (q->head->data == GINT_TO_POINTER (1));
+  g_assert (g_queue_peek_tail (q) == GINT_TO_POINTER (4));
+  g_queue_push_tail (q, GINT_TO_POINTER (5));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 5);
+  
+  g_assert (g_queue_is_empty (q) == FALSE);
+  check_integrity (q);
+  
+  g_assert (q->length == 5);
+  g_assert (q->head->prev == NULL);
+  g_assert (q->head->data == GINT_TO_POINTER (1));
+  g_assert (q->head->next->data == GINT_TO_POINTER (2));
+  g_assert (q->head->next->next->data == GINT_TO_POINTER (3));
+  g_assert (q->head->next->next->next->data == GINT_TO_POINTER (4));
+  g_assert (q->head->next->next->next->next->data == GINT_TO_POINTER (5));
+  g_assert (q->head->next->next->next->next->next == NULL);
+  g_assert (q->head->next->next->next->next == q->tail);
+  g_assert (q->tail->data == GINT_TO_POINTER (5));
+  g_assert (q->tail->prev->data == GINT_TO_POINTER (4));
+  g_assert (q->tail->prev->prev->data == GINT_TO_POINTER (3));
+  g_assert (q->tail->prev->prev->prev->data == GINT_TO_POINTER (2));
+  g_assert (q->tail->prev->prev->prev->prev->data == GINT_TO_POINTER (1));
+  g_assert (q->tail->prev->prev->prev->prev->prev == NULL);
+  g_assert (q->tail->prev->prev->prev->prev == q->head);
+  g_assert (g_queue_peek_tail (q) == GINT_TO_POINTER (5));
+  g_assert (g_queue_peek_head (q) == GINT_TO_POINTER (1));
+  
+  g_assert (g_queue_pop_head (q) == GINT_TO_POINTER (1));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 4 && q->length == 4);
+  g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (5));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 3);
+  g_assert (g_queue_pop_head_link (q)->data == GINT_TO_POINTER (2));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 2);
+  g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (4));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 1);
+  g_assert (g_queue_pop_head_link (q)->data == GINT_TO_POINTER (3));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  g_assert (g_queue_pop_tail (q) == NULL);
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  g_assert (g_queue_pop_head (q) == NULL);
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  
+  g_assert (g_queue_is_empty (q) == TRUE);
+  check_integrity (q);
+  
+  /************************/
+  
+  g_queue_push_head (q, GINT_TO_POINTER (1));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 1 && 1 == q->length);
+  g_queue_push_head (q, GINT_TO_POINTER (2));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 2 && 2 == q->length);
+  g_queue_push_head (q, GINT_TO_POINTER (3));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 3 && 3 == q->length);
+  g_queue_push_head (q, GINT_TO_POINTER (4));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 4 && 4 == q->length);
+  g_queue_push_head (q, GINT_TO_POINTER (5));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 5 && 5 == q->length);
+  
+  g_assert (g_queue_pop_head (q) == GINT_TO_POINTER (5));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 4);
+  node = q->tail;
+  g_assert (node == g_queue_pop_tail_link (q));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 3);
+  data = q->head->data;
+  g_assert (data == g_queue_pop_head (q));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 2);
+  g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (2));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 1);
+  g_assert (q->head == q->tail);
+  g_assert (g_queue_pop_tail (q) == GINT_TO_POINTER (3));
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  g_assert (g_queue_pop_head (q) == NULL);
+  check_integrity (q);
+  g_assert (g_queue_pop_head_link (q) == NULL);
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  g_assert (g_queue_pop_tail_link (q) == NULL);
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  
+  /* */
+  g_queue_reverse (q);
+  check_integrity (q);
+  g_assert (g_list_length (q->head) == 0);
+  
+  q2 = g_queue_copy (q);
+  check_integrity (q);
+  check_integrity (q2);
+  g_assert (g_list_length (q->head) == 0);
+  g_assert (g_list_length (q2->head) == 0);
+  g_queue_sort (q, compare_int, NULL);
+  check_integrity (q2);
+  check_integrity (q);
+  g_queue_sort (q2, compare_int, NULL);
+  check_integrity (q2);
+  check_integrity (q);
+  
+  for (i = 0; i < 200; ++i)
+    {
+      g_queue_push_nth (q, GINT_TO_POINTER (i), i);
+      g_assert (g_queue_find (q, GINT_TO_POINTER (i)));
+      check_integrity (q);
+      check_integrity (q2);
+    }
+  
+  for (i = 0; i < 200; ++i)
+    {
+      g_queue_remove (q, GINT_TO_POINTER (i));
+      check_integrity (q);
+      check_integrity (q2);
+    }
+  
+  for (i = 0; i < 200; ++i)
+    {
+      GList *l = g_list_prepend (NULL, GINT_TO_POINTER (i));
+      
+      g_queue_push_nth_link (q, i, l);
+      check_integrity (q);
+      check_integrity (q2);
+      g_queue_reverse (q);
+      check_integrity (q);
+      check_integrity (q2);
+    }
+  
+  g_queue_free (q2);
+  q2 = g_queue_copy (q);
+  
+  g_queue_foreach (q2, remove_item, q2);
+  check_integrity (q2);
+  check_integrity (q);
+
+  /* some checks for off by one errors */  
+  g_queue_push_tail (q, GINT_TO_POINTER (1234));
+  check_integrity (q);
+  node = g_queue_peek_tail_link (q);
+  g_assert (node != NULL && node->data == GINT_TO_POINTER (1234));
+  node = g_queue_peek_nth_link (q, g_queue_get_length (q));
+  g_assert (node == NULL);
+  node = g_queue_peek_nth_link (q, g_queue_get_length (q) - 1);
+  g_assert (node->data == GINT_TO_POINTER (1234));
+  node = g_queue_pop_nth_link (q, g_queue_get_length (q));
+  g_assert (node == NULL);
+  node = g_queue_pop_nth_link (q, g_queue_get_length (q) - 1);
+  g_assert (node != NULL && node->data == GINT_TO_POINTER (1234));
+  
+  g_queue_free (q);
+
+  if (argc > 2 && args[1][0] == '-' && args[1][1] == 'v')
+    random_test (strtol (args[2], NULL, 0));    
+  if (argc > 1)
+    random_test (strtol (args[1], NULL, 0));
+  else
+    random_test (time (0));  
+
+  return 0;
+}
+
diff --git a/tests/refcount/Makefile.am b/tests/refcount/Makefile.am
new file mode 100644
index 0000000..ff29b59
--- /dev/null
+++ b/tests/refcount/Makefile.am
@@ -0,0 +1,41 @@
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES =					\
+	-I$(top_srcdir)				\
+	-I$(top_srcdir)/glib			\
+	-I$(top_srcdir)/gmodule			\
+	$(GLIB_DEBUG_FLAGS)
+
+libglib = $(top_builddir)/glib/libglib-2.0.la
+libgthread = $(top_builddir)/gthread/libgthread-2.0.la
+libgmodule = $(top_builddir)/gmodule/libgmodule-2.0.la
+libgobject = $(top_builddir)/gobject/libgobject-2.0.la
+
+LDADD = $(libglib) $(libgobject) $(libgthread) $(G_THREAD_LIBS)
+
+test_programs = 				\
+	closures				\
+	objects					\
+	objects2				\
+	properties				\
+	properties2				\
+	signal1					\
+	signal2					\
+	signal3
+
+
+
+signal1_SOURCES = signals.c
+signal1_CFLAGS = -DTESTNUM=1 $(AM_CFLAGS)
+signal2_SOURCES = signals.c
+signal2_CFLAGS = -DTESTNUM=2 $(AM_CFLAGS)
+signal3_SOURCES = signals.c
+signal3_CFLAGS = -DTESTNUM=3 $(AM_CFLAGS)
+
+check_PROGRAMS = $(test_programs)
+
+all: $(check_PROGRAMS)
+
+TESTS = $(test_programs)
+TESTS_ENVIRONMENT = srcdir=$(srcdir) \
+	LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset
diff --git a/tests/refcount/closures.c b/tests/refcount/closures.c
new file mode 100644
index 0000000..5bd20a0
--- /dev/null
+++ b/tests/refcount/closures.c
@@ -0,0 +1,291 @@
+/* Copyright (C) 2005 Imendio AB
+ *
+ * This software is provided "as is"; redistribution and modification
+ * is permitted, provided that the following disclaimer is retained.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * In no event shall the authors or 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.
+ */
+#include <glib-object.h>
+#include <unistd.h>
+
+#define TEST_POINTER1   ((gpointer) 47)
+#define TEST_POINTER2   ((gpointer) 49)
+#define TEST_INT1       (-77)
+#define TEST_INT2       (78)
+
+/* --- GTest class --- */
+typedef struct {
+  GObject object;
+  gint value;
+  gpointer test_pointer1;
+  gpointer test_pointer2;
+} GTest;
+typedef struct {
+  GObjectClass parent_class;
+  void (*test_signal1) (GTest * test, gint an_int);
+  void (*test_signal2) (GTest * test, gint an_int);
+} GTestClass;
+
+#define G_TYPE_TEST                (my_test_get_type ())
+#define MY_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
+#define MY_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
+#define MY_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
+#define MY_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
+#define MY_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
+
+G_DEFINE_TYPE (GTest, my_test, G_TYPE_OBJECT);
+
+/* --- variables --- */
+static volatile gboolean stopping = FALSE;
+static guint             test_signal1 = 0;
+static guint             test_signal2 = 0;
+static gboolean          seen_signal_handler = FALSE;
+static gboolean          seen_cleanup = FALSE;
+static gboolean          seen_test_int1 = FALSE;
+static gboolean          seen_test_int2 = FALSE;
+static gboolean          seen_thread1 = FALSE;
+static gboolean          seen_thread2 = FALSE;
+
+/* --- functions --- */
+static void
+my_test_init (GTest * test)
+{
+  g_print ("init %p\n", test);
+
+  test->value = 0;
+  test->test_pointer1 = TEST_POINTER1;
+  test->test_pointer2 = TEST_POINTER2;
+}
+
+enum {
+  ARG_0,
+  ARG_TEST_PROP
+};
+
+static void
+my_test_set_property (GObject      *object,
+                     guint         prop_id,
+                     const GValue *value,
+                     GParamSpec   *pspec)
+{
+  GTest *test = MY_TEST (object);
+  switch (prop_id)
+    {
+    case ARG_TEST_PROP:
+      test->value = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+my_test_get_property (GObject    *object,
+                     guint       prop_id,
+                     GValue     *value,
+                     GParamSpec *pspec)
+{
+  GTest *test = MY_TEST (object);
+  switch (prop_id)
+    {
+    case ARG_TEST_PROP:
+      g_value_set_int (value, test->value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+my_test_test_signal2 (GTest *test,
+                      gint   an_int)
+{
+}
+
+static void
+my_test_emit_test_signal1 (GTest *test,
+                           gint   vint)
+{
+  g_signal_emit (G_OBJECT (test), test_signal1, 0, vint);
+}
+
+static void
+my_test_emit_test_signal2 (GTest *test,
+                           gint   vint)
+{
+  g_signal_emit (G_OBJECT (test), test_signal2, 0, vint);
+}
+
+static void
+my_test_class_init (GTestClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property = my_test_set_property;
+  gobject_class->get_property = my_test_get_property;
+
+  test_signal1 = g_signal_new ("test-signal1", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+                               G_STRUCT_OFFSET (GTestClass, test_signal1), NULL, NULL,
+                               g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+  test_signal2 = g_signal_new ("test-signal2", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+                               G_STRUCT_OFFSET (GTestClass, test_signal2), NULL, NULL,
+                               g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TEST_PROP,
+                                   g_param_spec_int ("test-prop", "Test Prop", "Test property",
+                                                     0, 1, 0, G_PARAM_READWRITE));
+  klass->test_signal2 = my_test_test_signal2;
+}
+
+static inline guint32
+quick_rand32 (void)
+{
+  static guint32 accu = 2147483563;
+  accu = 1664525 * accu + 1013904223;
+  return accu;
+}
+
+static void
+test_closure (GClosure *closure)
+{
+  /* try to produce high contention in closure->ref_count */
+  guint i = 0, n = quick_rand32() % 199;
+  for (i = 0; i < n; i++)
+    g_closure_ref (closure);
+  g_closure_sink (closure); /* NOP */
+  for (i = 0; i < n; i++)
+    g_closure_unref (closure);
+}
+
+static gpointer
+thread1_main (gpointer data)
+{
+  GClosure *closure = data;
+  while (!stopping)
+    {
+      static guint count = 0;
+      test_closure (closure);
+      if (++count % 10000 == 0)
+        {
+          g_printerr ("c");
+          g_thread_yield(); /* force context switch */
+          seen_thread1 = TRUE;
+        }
+    }
+  return NULL;
+}
+
+static gpointer
+thread2_main (gpointer data)
+{
+  GClosure *closure = data;
+  while (!stopping)
+    {
+      static guint count = 0;
+      test_closure (closure);
+      if (++count % 10000 == 0)
+        {
+          g_printerr ("C");
+          g_thread_yield(); /* force context switch */
+          seen_thread2 = TRUE;
+        }
+    }
+  return NULL;
+}
+
+static void
+test_signal_handler (GTest   *test,
+                     gint     vint,
+                     gpointer data)
+{
+  g_assert (data == TEST_POINTER2);
+  g_assert (test->test_pointer1 == TEST_POINTER1);
+  seen_signal_handler = TRUE;
+  seen_test_int1 |= vint == TEST_INT1;
+  seen_test_int2 |= vint == TEST_INT2;
+}
+
+static void
+destroy_data (gpointer  data,
+              GClosure *closure)
+{
+  seen_cleanup = data == TEST_POINTER2;
+  g_assert (closure->ref_count == 0);
+}
+
+static void
+test_emissions (GTest *test)
+{
+  my_test_emit_test_signal1 (test, TEST_INT1);
+  my_test_emit_test_signal2 (test, TEST_INT2);
+}
+
+int
+main (int    argc,
+      char **argv)
+{
+  GThread *thread1, *thread2;
+  GClosure *closure;
+  GTest *object;
+  guint i;
+
+  g_thread_init (NULL);
+  g_print ("START: %s\n", argv[0]);
+  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
+  g_type_init ();
+
+  object = g_object_new (G_TYPE_TEST, NULL);
+  closure = g_cclosure_new (G_CALLBACK (test_signal_handler), TEST_POINTER2, destroy_data);
+
+  g_signal_connect_closure (object, "test-signal1", closure, FALSE);
+  g_signal_connect_closure (object, "test-signal2", closure, FALSE);
+
+  stopping = FALSE;
+
+  thread1 = g_thread_create (thread1_main, closure, TRUE, NULL);
+  thread2 = g_thread_create (thread2_main, closure, TRUE, NULL);
+
+  for (i = 0; i < 1000000; i++)
+    {
+      static guint count = 0;
+      test_emissions (object);
+      if (++count % 10000 == 0)
+        {
+          g_printerr (".\n");
+          g_thread_yield(); /* force context switch */
+        }
+    }
+
+  stopping = TRUE;
+  g_print ("\nstopping\n");
+
+  /* wait for thread shutdown */
+  g_thread_join (thread1);
+  g_thread_join (thread2);
+
+  /* finalize object, destroy signals, run cleanup code */
+  g_object_unref (object);
+
+  g_print ("stopped\n");
+
+  g_assert (seen_thread1 != FALSE);
+  g_assert (seen_thread2 != FALSE);
+  g_assert (seen_test_int1 != FALSE);
+  g_assert (seen_test_int2 != FALSE);
+  g_assert (seen_signal_handler != FALSE);
+  g_assert (seen_cleanup != FALSE);
+
+  return 0;
+}
diff --git a/tests/refcount/objects.c b/tests/refcount/objects.c
new file mode 100644
index 0000000..9638045
--- /dev/null
+++ b/tests/refcount/objects.c
@@ -0,0 +1,158 @@
+#include <unistd.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#define G_TYPE_TEST               (my_test_get_type ())
+#define MY_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
+#define MY_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
+#define MY_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
+#define MY_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
+#define MY_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
+
+typedef struct _GTest GTest;
+typedef struct _GTestClass GTestClass;
+
+struct _GTest
+{
+  GObject object;
+};
+
+struct _GTestClass
+{
+  GObjectClass parent_class;
+};
+
+static GType my_test_get_type (void);
+static volatile gboolean stopping;
+
+static void my_test_class_init (GTestClass * klass);
+static void my_test_init (GTest * test);
+static void my_test_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+
+static GType
+my_test_get_type (void)
+{
+  static GType test_type = 0;
+
+  if (!test_type) {
+    static const GTypeInfo test_info = {
+      sizeof (GTestClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) my_test_class_init,
+      NULL,
+      NULL,
+      sizeof (GTest),
+      0,
+      (GInstanceInitFunc) my_test_init,
+      NULL
+    };
+
+    test_type = g_type_register_static (G_TYPE_OBJECT, "GTest",
+        &test_info, 0);
+  }
+  return test_type;
+}
+
+static void
+my_test_class_init (GTestClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
+
+  gobject_class->dispose = my_test_dispose;
+}
+
+static void
+my_test_init (GTest * test)
+{
+  g_print ("init %p\n", test);
+}
+
+static void
+my_test_dispose (GObject * object)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  g_print ("dispose %p!\n", object);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+my_test_do_refcount (GTest * test)
+{
+  g_object_ref (test); 
+  g_object_unref (test); 
+}
+
+static gpointer
+run_thread (GTest * test)
+{
+  gint i = 1;
+
+  while (!stopping) {
+    my_test_do_refcount (test);
+    if ((i++ % 10000) == 0) {
+      g_print (".");
+      g_thread_yield(); /* force context switch */
+    }
+  }
+
+  return NULL;
+}
+
+int
+main (int argc, char **argv)
+{
+  gint i;
+  GTest *test1, *test2;
+  GArray *test_threads;
+  const guint n_threads = 5;
+
+  g_thread_init (NULL);
+  g_print ("START: %s\n", argv[0]);
+  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
+  g_type_init ();
+
+  test1 = g_object_new (G_TYPE_TEST, NULL);
+  test2 = g_object_new (G_TYPE_TEST, NULL);
+
+  test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *));
+
+  stopping = FALSE;
+
+  for (i = 0; i < n_threads; i++) {
+    GThread *thread;
+
+    thread = g_thread_create ((GThreadFunc) run_thread, test1, TRUE, NULL);
+    g_array_append_val (test_threads, thread);
+
+    thread = g_thread_create ((GThreadFunc) run_thread, test2, TRUE, NULL);
+    g_array_append_val (test_threads, thread);
+  }
+  g_usleep (5000000);
+
+  stopping = TRUE;
+
+  g_print ("\nstopping\n");
+
+  /* join all threads */
+  for (i = 0; i < 2 * n_threads; i++) {
+    GThread *thread;
+
+    thread = g_array_index (test_threads, GThread *, i);
+    g_thread_join (thread);
+  }
+
+  g_print ("stopped\n");
+
+  return 0;
+}
diff --git a/tests/refcount/objects2.c b/tests/refcount/objects2.c
new file mode 100644
index 0000000..bbd4a82
--- /dev/null
+++ b/tests/refcount/objects2.c
@@ -0,0 +1,118 @@
+#include <unistd.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#define G_TYPE_TEST                (my_test_get_type ())
+#define MY_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
+#define MY_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
+#define MY_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
+#define MY_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
+#define MY_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
+
+typedef struct _GTest GTest;
+typedef struct _GTestClass GTestClass;
+
+struct _GTest
+{
+  GObject object;
+};
+
+struct _GTestClass
+{
+  GObjectClass parent_class;
+};
+
+static GType my_test_get_type (void);
+
+static void my_test_class_init (GTestClass * klass);
+static void my_test_init (GTest * test);
+static void my_test_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+
+static GType
+my_test_get_type (void)
+{
+  static GType test_type = 0;
+
+  if (!test_type) {
+    static const GTypeInfo test_info = {
+      sizeof (GTestClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) my_test_class_init,
+      NULL,
+      NULL,
+      sizeof (GTest),
+      0,
+      (GInstanceInitFunc) my_test_init,
+      NULL
+    };
+
+    test_type = g_type_register_static (G_TYPE_OBJECT, "GTest",
+        &test_info, 0);
+  }
+  return test_type;
+}
+
+static void
+my_test_class_init (GTestClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
+
+  gobject_class->dispose = my_test_dispose;
+}
+
+static void
+my_test_init (GTest * test)
+{
+  g_print ("init %p\n", test);
+}
+
+static void
+my_test_dispose (GObject * object)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  g_print ("dispose %p!\n", object);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+my_test_do_refcount (GTest * test)
+{
+  static guint i = 1;
+  if (i++ % 100000 == 0)
+    g_print (".");
+  g_object_ref (test); 
+  g_object_unref (test); 
+}
+
+int
+main (int argc, char **argv)
+{
+  gint i;
+  GTest *test;
+
+  g_thread_init (NULL);
+  g_print ("START: %s\n", argv[0]);
+  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
+  g_type_init ();
+
+  test = g_object_new (G_TYPE_TEST, NULL);
+
+  for (i=0; i<100000000; i++) {
+    my_test_do_refcount (test);
+  }
+
+  g_print ("\n");
+  
+  return 0;
+}
diff --git a/tests/refcount/properties.c b/tests/refcount/properties.c
new file mode 100644
index 0000000..c4c165c
--- /dev/null
+++ b/tests/refcount/properties.c
@@ -0,0 +1,255 @@
+#include <unistd.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#define G_TYPE_TEST               (my_test_get_type ())
+#define MY_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
+#define MY_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
+#define MY_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
+#define MY_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
+#define MY_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
+
+enum {
+  PROP_0,
+  PROP_DUMMY
+};
+
+typedef struct _GTest GTest;
+typedef struct _GTestClass GTestClass;
+
+struct _GTest
+{
+  GObject object;
+  gint id;
+  gint dummy;
+
+  gint count;
+};
+
+struct _GTestClass
+{
+  GObjectClass parent_class;
+};
+
+static GType my_test_get_type (void);
+static volatile gboolean stopping;
+
+static void my_test_class_init (GTestClass * klass);
+static void my_test_init (GTest * test);
+static void my_test_dispose (GObject * object);
+static void my_test_get_property (GObject    *object,
+                                  guint       prop_id,
+                                  GValue     *value,
+                                  GParamSpec *pspec);
+static void my_test_set_property (GObject      *object,
+                                  guint         prop_id,
+                                  const GValue *value,
+                                  GParamSpec   *pspec);
+
+static GObjectClass *parent_class = NULL;
+
+static GType
+my_test_get_type (void)
+{
+  static GType test_type = 0;
+
+  if (!test_type) {
+    static const GTypeInfo test_info = {
+      sizeof (GTestClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) my_test_class_init,
+      NULL,
+      NULL,
+      sizeof (GTest),
+      0,
+      (GInstanceInitFunc) my_test_init,
+      NULL
+    };
+
+    test_type = g_type_register_static (G_TYPE_OBJECT, "GTest", &test_info, 0);
+  }
+  return test_type;
+}
+
+static void
+my_test_class_init (GTestClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
+
+  gobject_class->dispose = my_test_dispose;
+  gobject_class->get_property = my_test_get_property;
+  gobject_class->set_property = my_test_set_property;
+
+  g_object_class_install_property (gobject_class,
+				   PROP_DUMMY,
+				   g_param_spec_int ("dummy",
+						     NULL, 
+						     NULL,
+						     0, G_MAXINT, 0,
+						     G_PARAM_READWRITE));
+}
+
+static void
+my_test_init (GTest * test)
+{
+  static guint static_id = 1;
+  test->id = static_id++;
+}
+
+static void
+my_test_dispose (GObject * object)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void 
+my_test_get_property (GObject    *object,
+                      guint       prop_id,
+                      GValue     *value,
+                      GParamSpec *pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  switch (prop_id)
+    {
+    case PROP_DUMMY:
+      g_value_set_int (value, test->dummy);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void 
+my_test_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  switch (prop_id)
+    {
+    case PROP_DUMMY:
+      test->dummy = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+dummy_notify (GObject    *object,
+              GParamSpec *pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  test->count++;  
+}
+
+static void
+my_test_do_property (GTest * test)
+{
+  gint dummy;
+
+  g_object_get (test, "dummy", &dummy, NULL);
+  g_object_set (test, "dummy", dummy + 1, NULL);
+}
+
+static gpointer
+run_thread (GTest * test)
+{
+  gint i = 1;
+  
+  while (!stopping) {
+    my_test_do_property (test);
+    if ((i++ % 10000) == 0)
+      {
+        g_print (".%c", 'a' + test->id);
+        g_thread_yield(); /* force context switch */
+      }
+  }
+
+  return NULL;
+}
+
+int
+main (int argc, char **argv)
+{
+  gint i;
+  GArray *test_objects;
+  GArray *test_threads;
+  const gint n_threads = 5;
+
+  g_thread_init (NULL);
+  g_print ("START: %s\n", argv[0]);
+  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
+  g_type_init ();
+
+  test_objects = g_array_new (FALSE, FALSE, sizeof (GTest *));
+
+  for (i = 0; i < n_threads; i++) {
+    GTest *test;
+    
+    test = g_object_new (G_TYPE_TEST, NULL);
+    g_array_append_val (test_objects, test);
+
+    g_assert (test->count == test->dummy);
+    g_signal_connect (test, "notify::dummy", G_CALLBACK (dummy_notify), NULL);
+  }
+    
+  test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *));
+
+  stopping = FALSE;
+
+  for (i = 0; i < n_threads; i++) {
+    GThread *thread;
+    GTest *test;
+
+    test = g_array_index (test_objects, GTest *, i);
+
+    thread = g_thread_create ((GThreadFunc) run_thread, test, TRUE, NULL);
+    g_array_append_val (test_threads, thread);
+  }
+  g_usleep (3000000);
+
+  stopping = TRUE;
+  g_print ("\nstopping\n");
+
+  /* join all threads */
+  for (i = 0; i < n_threads; i++) {
+    GThread *thread;
+
+    thread = g_array_index (test_threads, GThread *, i);
+    g_thread_join (thread);
+  }
+
+  g_print ("stopped\n");
+
+  for (i = 0; i < n_threads; i++) {
+    GTest *test;
+
+    test = g_array_index (test_objects, GTest *, i);
+
+    g_assert (test->count == test->dummy);
+  }
+
+  return 0;
+}
diff --git a/tests/refcount/properties2.c b/tests/refcount/properties2.c
new file mode 100644
index 0000000..bb79105
--- /dev/null
+++ b/tests/refcount/properties2.c
@@ -0,0 +1,199 @@
+#include <unistd.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#define G_TYPE_TEST                (my_test_get_type ())
+#define MY_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
+#define MY_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
+#define MY_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
+#define MY_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
+#define MY_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
+
+enum {
+  PROP_0,
+  PROP_DUMMY
+};
+
+typedef struct _GTest GTest;
+typedef struct _GTestClass GTestClass;
+
+struct _GTest
+{
+  GObject object;
+
+  gint dummy;
+};
+
+struct _GTestClass
+{
+  GObjectClass parent_class;
+};
+
+static GType my_test_get_type (void);
+
+static void my_test_class_init (GTestClass * klass);
+static void my_test_init (GTest * test);
+static void my_test_dispose (GObject * object);
+static void my_test_get_property (GObject    *object,
+                                  guint       prop_id,
+                                  GValue     *value,
+                                  GParamSpec *pspec);
+static void my_test_set_property (GObject      *object,
+                                  guint         prop_id,
+                                  const GValue *value,
+                                  GParamSpec   *pspec);
+
+static GObjectClass *parent_class = NULL;
+
+static GType
+my_test_get_type (void)
+{
+  static GType test_type = 0;
+
+  if (!test_type) {
+    static const GTypeInfo test_info = {
+      sizeof (GTestClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) my_test_class_init,
+      NULL,
+      NULL,
+      sizeof (GTest),
+      0,
+      (GInstanceInitFunc) my_test_init,
+      NULL
+    };
+
+    test_type = g_type_register_static (G_TYPE_OBJECT, "GTest",
+        &test_info, 0);
+  }
+  return test_type;
+}
+
+static void
+my_test_class_init (GTestClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
+
+  gobject_class->dispose = my_test_dispose;
+  gobject_class->get_property = my_test_get_property;
+  gobject_class->set_property = my_test_set_property;
+
+  g_object_class_install_property (gobject_class,
+				   PROP_DUMMY,
+				   g_param_spec_int ("dummy",
+						     NULL, 
+						     NULL,
+						     0, G_MAXINT, 0,
+						     G_PARAM_READWRITE));
+}
+
+static void
+my_test_init (GTest * test)
+{
+  g_print ("init %p\n", test);
+}
+
+static void
+my_test_dispose (GObject * object)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  g_print ("dispose %p!\n", object);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void 
+my_test_get_property (GObject    *object,
+                      guint       prop_id,
+                      GValue     *value,
+                      GParamSpec *pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  switch (prop_id)
+    {
+    case PROP_DUMMY:
+      g_value_set_int (value, test->dummy);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void 
+my_test_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  switch (prop_id)
+    {
+    case PROP_DUMMY:
+      test->dummy = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static gint count = 0;
+
+static void
+dummy_notify (GObject    *object,
+              GParamSpec *pspec)
+{
+  count++;
+  if (count % 10000 == 0)
+    g_print (".");
+}
+
+static void
+my_test_do_property (GTest * test)
+{
+  gint dummy;
+
+  g_object_get (test, "dummy", &dummy, NULL);
+  g_object_set (test, "dummy", dummy + 1, NULL);
+}
+
+int
+main (int argc, char **argv)
+{
+  gint i;
+  GTest *test;
+
+  g_thread_init (NULL);
+  g_print ("START: %s\n", argv[0]);
+  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
+  g_type_init ();
+  
+  test = g_object_new (G_TYPE_TEST, NULL);
+
+  g_signal_connect (test, "notify::dummy", G_CALLBACK (dummy_notify), NULL);
+
+  g_assert (count == test->dummy);
+
+  for (i=0; i<1000000; i++) {
+    my_test_do_property (test);
+  }
+
+  g_assert (count == test->dummy);
+
+  return 0;
+}
diff --git a/tests/refcount/signals.c b/tests/refcount/signals.c
new file mode 100644
index 0000000..1a2a2ba
--- /dev/null
+++ b/tests/refcount/signals.c
@@ -0,0 +1,284 @@
+#include <unistd.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#define G_TYPE_TEST                (my_test_get_type ())
+#define MY_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
+#define MY_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
+#define MY_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
+#define MY_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
+#define MY_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
+
+static GRand *rand;
+
+typedef struct _GTest GTest;
+typedef struct _GTestClass GTestClass;
+
+struct _GTest
+{
+  GObject object;
+
+  gint value;
+};
+
+struct _GTestClass
+{
+  GObjectClass parent_class;
+
+  void (*test_signal1) (GTest * test, gint an_int);
+  void (*test_signal2) (GTest * test, gint an_int);
+};
+
+static GType my_test_get_type (void);
+static volatile gboolean stopping;
+
+/* Element signals and args */
+enum
+{
+  TEST_SIGNAL1,
+  TEST_SIGNAL2,
+  /* add more above */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0,
+  ARG_TEST_PROP
+};
+
+static void my_test_class_init (GTestClass * klass);
+static void my_test_init (GTest * test);
+static void my_test_dispose (GObject * object);
+
+static void signal2_handler (GTest * test, gint anint);
+
+static void my_test_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void my_test_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static GObjectClass *parent_class = NULL;
+
+static guint my_test_signals[LAST_SIGNAL] = { 0 };
+
+static GType
+my_test_get_type (void)
+{
+  static GType test_type = 0;
+
+  if (!test_type) {
+    static const GTypeInfo test_info = {
+      sizeof (GTestClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) my_test_class_init,
+      NULL,
+      NULL,
+      sizeof (GTest),
+      0,
+      (GInstanceInitFunc) my_test_init,
+      NULL
+    };
+
+    rand = g_rand_new();
+
+    test_type = g_type_register_static (G_TYPE_OBJECT, "GTest",
+        &test_info, 0);
+  }
+  return test_type;
+}
+
+static void
+my_test_class_init (GTestClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  parent_class = g_type_class_ref (G_TYPE_OBJECT);
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  gobject_class->dispose = my_test_dispose;
+  gobject_class->set_property = my_test_set_property;
+  gobject_class->get_property = my_test_get_property;
+
+  my_test_signals[TEST_SIGNAL1] =
+      g_signal_new ("test-signal1", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GTestClass, test_signal1), NULL,
+      NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+  my_test_signals[TEST_SIGNAL2] =
+      g_signal_new ("test-signal2", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GTestClass, test_signal2), NULL,
+      NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TEST_PROP,
+      g_param_spec_int ("test-prop", "Test Prop", "Test property",
+          0, 1, 0, G_PARAM_READWRITE));
+
+  klass->test_signal2 = signal2_handler;
+}
+
+static void
+my_test_init (GTest * test)
+{
+  g_print ("init %p\n", test);
+
+  test->value = 0;
+}
+
+static void
+my_test_dispose (GObject * object)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  g_print ("dispose %p!\n", object);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+my_test_set_property (GObject * object, guint prop_id,
+                      const GValue * value, GParamSpec * pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  switch (prop_id) {
+    case ARG_TEST_PROP:
+      test->value = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+my_test_get_property (GObject * object, guint prop_id,
+                      GValue * value, GParamSpec * pspec)
+{
+  GTest *test;
+
+  test = MY_TEST (object);
+
+  switch (prop_id) {
+    case ARG_TEST_PROP:
+      g_value_set_int (value, test->value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+my_test_do_signal1 (GTest * test)
+{
+  g_signal_emit (G_OBJECT (test), my_test_signals[TEST_SIGNAL1], 0, 0);
+}
+
+static void
+signal2_handler (GTest * test, gint anint)
+{
+}
+
+static void
+my_test_do_signal2 (GTest * test)
+{
+  g_signal_emit (G_OBJECT (test), my_test_signals[TEST_SIGNAL2], 0, 0);
+}
+
+static void
+my_test_do_prop (GTest * test)
+{
+  test->value = g_rand_int (rand);
+  g_object_notify (G_OBJECT (test), "test-prop");
+}
+
+static gpointer
+run_thread (GTest * test)
+{
+  gint i = 1;
+
+  while (!stopping) {
+    if (TESTNUM == 1)
+      my_test_do_signal1 (test);
+    if (TESTNUM == 2)
+      my_test_do_signal2 (test);
+    if (TESTNUM == 3)
+      my_test_do_prop (test);
+    if ((i++ % 10000) == 0) {
+      g_print (".");
+      g_thread_yield(); /* force context switch */
+    }
+  }
+
+  return NULL;
+}
+
+static void
+notify (GObject *object, GParamSpec *spec, gpointer user_data)
+{
+  gint value;
+
+  g_object_get (object, "test-prop", &value, NULL);
+  /*g_print ("+ %d", value);*/
+}
+
+int
+main (int argc, char **argv)
+{
+  gint i;
+  GTest *test1, *test2;
+  GArray *test_threads;
+  const gint n_threads = 1;
+
+  g_thread_init (NULL);
+  g_print ("START: %s\n", argv[0]);
+  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
+  g_type_init ();
+
+  test1 = g_object_new (G_TYPE_TEST, NULL);
+  test2 = g_object_new (G_TYPE_TEST, NULL);
+
+  g_signal_connect (test1, "notify::test-prop", G_CALLBACK (notify), NULL);
+  g_signal_connect (test1, "test-signal1", G_CALLBACK (notify), NULL);
+  g_signal_connect (test1, "test-signal2", G_CALLBACK (notify), NULL);
+
+  test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *));
+
+  stopping = FALSE;
+
+  for (i = 0; i < n_threads; i++) {
+    GThread *thread;
+
+    thread = g_thread_create ((GThreadFunc) run_thread, test1, TRUE, NULL);
+    g_array_append_val (test_threads, thread);
+
+    thread = g_thread_create ((GThreadFunc) run_thread, test2, TRUE, NULL);
+    g_array_append_val (test_threads, thread);
+  }
+  g_usleep (5000000);
+
+  stopping = TRUE;
+
+  g_print ("\nstopping\n");
+
+  /* join all threads */
+  for (i = 0; i < 2 * n_threads; i++) {
+    GThread *thread;
+
+    thread = g_array_index (test_threads, GThread *, i);
+    g_thread_join (thread);
+  }
+
+  g_print ("stopped\n");
+
+  return 0;
+}
diff --git a/tests/regex-test.c b/tests/regex-test.c
new file mode 100644
index 0000000..2e00051
--- /dev/null
+++ b/tests/regex-test.c
@@ -0,0 +1,2120 @@
+/*
+ * Copyright (C) 2005 - 2006, Marco Barisione <marco@barisione.org>
+ *
+ * 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 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.
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <string.h>
+#include <locale.h>
+#include "glib.h"
+
+#ifdef ENABLE_REGEX
+
+/* U+20AC EURO SIGN (symbol, currency) */
+#define EURO "\xe2\x82\xac"
+/* U+00E0 LATIN SMALL LETTER A WITH GRAVE (letter, lowercase) */
+#define AGRAVE "\xc3\xa0"
+/* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE (letter, uppercase) */
+#define AGRAVE_UPPER "\xc3\x80"
+/* U+00E8 LATIN SMALL LETTER E WITH GRAVE (letter, lowercase) */
+#define EGRAVE "\xc3\xa8"
+/* U+00F2 LATIN SMALL LETTER O WITH GRAVE (letter, lowercase) */
+#define OGRAVE "\xc3\xb2"
+/* U+014B LATIN SMALL LETTER ENG (letter, lowercase) */
+#define ENG "\xc5\x8b"
+/* U+0127 LATIN SMALL LETTER H WITH STROKE (letter, lowercase) */
+#define HSTROKE "\xc4\xa7"
+/* U+0634 ARABIC LETTER SHEEN (letter, other) */
+#define SHEEN "\xd8\xb4"
+/* U+1374 ETHIOPIC NUMBER THIRTY (number, other) */
+#define ETH30 "\xe1\x8d\xb4"
+
+/* A random value use to mark untouched integer variables. */
+#define UNTOUCHED -559038737
+
+static gboolean noisy = FALSE;
+static gboolean abort_on_fail = FALSE;
+
+#define PASS passed++
+#define FAIL \
+  G_STMT_START \
+    { \
+      failed++; \
+      if (abort_on_fail) \
+	goto end; \
+    } \
+  G_STMT_END
+
+/* A replacement for strcmp that doesn't crash with null pointers. */
+static gboolean
+streq (const gchar *s1, const gchar *s2)
+{
+  if (s1 == NULL && s2 == NULL)
+    return TRUE;
+  else if (s1 == NULL)
+    return FALSE;
+  else if (s2 == NULL)
+    return FALSE;
+  else
+    return strcmp (s1, s2) == 0;
+}
+
+static void
+verbose (const gchar *format, ...)
+{
+  /* Function copied from glib/tests/patterntest.c by Matthias Clasen. */
+  gchar *msg;
+  va_list args;
+
+  va_start (args, format);
+  msg = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  if (noisy) 
+    g_print ("%s", msg);
+  g_free (msg);
+}
+
+static gboolean
+test_new (const gchar        *pattern,
+	  GRegexCompileFlags  compile_opts,
+	  GRegexMatchFlags    match_opts)
+{
+  GRegex *regex;
+  
+  verbose ("compiling \"%s\" \t", pattern);
+
+  regex = g_regex_new (pattern, compile_opts, match_opts, NULL);
+  if (regex == NULL)
+    {
+      g_print ("failed \t(pattern: \"%s\", compile: %d, match %d)\n",
+	       pattern, compile_opts, match_opts);
+      return FALSE;
+    }
+
+  if (!streq (g_regex_get_pattern (regex), pattern))
+    {
+      g_print ("failed \t(pattern: \"%s\")\n",
+	       pattern);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_NEW(pattern, compile_opts, match_opts) { \
+  total++; \
+  if (test_new (pattern, compile_opts, match_opts)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_new_fail (const gchar        *pattern,
+	       GRegexCompileFlags  compile_opts,
+	       GRegexError         expected_error)
+{
+  GRegex *regex;
+  GError *error = NULL;
+  
+  verbose ("compiling \"%s\" (expected a failure) \t", pattern);
+
+  regex = g_regex_new (pattern, compile_opts, 0, &error);
+
+  if (regex != NULL)
+    {
+      g_print ("failed \t(pattern: \"%s\", compile: %d)\n",
+	       pattern, compile_opts);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  if (error->code != expected_error)
+    {
+      g_print ("failed \t(pattern: \"%s\", compile: %d, got error: %d, "
+	       "expected error: %d)\n",
+	       pattern, compile_opts, error->code, expected_error);
+      g_error_free (error);
+      return FALSE;
+    }
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_NEW_FAIL(pattern, compile_opts, expected_error) { \
+  total++; \
+  if (test_new_fail (pattern, compile_opts, expected_error)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_match_simple (const gchar        *pattern,
+		   const gchar        *string,
+		   GRegexCompileFlags  compile_opts,
+		   GRegexMatchFlags    match_opts,
+		   gboolean            expected)
+{
+  gboolean match;
+
+  verbose ("matching \"%s\" against \"%s\" \t", string, pattern);
+
+  match = g_regex_match_simple (pattern, string, compile_opts, match_opts);
+  if (match != expected)
+    {
+      g_print ("failed \t(unexpected %s)\n", match ? "match" : "mismatch");
+      return FALSE;
+    }
+  else
+    {
+      verbose ("passed (%s)\n", match ? "match" : "nomatch");
+      return TRUE;
+    }
+}
+
+#define TEST_MATCH_SIMPLE(pattern, string, compile_opts, match_opts, expected) { \
+  total++; \
+  if (test_match_simple (pattern, string, compile_opts, match_opts, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_match (const gchar        *pattern,
+	    GRegexCompileFlags  compile_opts,
+	    GRegexMatchFlags    match_opts,
+	    const gchar        *string,
+	    gssize              string_len,
+	    gint                start_position,
+	    GRegexMatchFlags    match_opts2,
+	    gboolean            expected)
+{
+  GRegex *regex;
+  gboolean match;
+  
+  verbose ("matching \"%s\" against \"%s\" (start: %d, len: %d) \t",
+	   string, pattern, start_position, string_len);
+
+  regex = g_regex_new (pattern, compile_opts, match_opts, NULL);
+  match = g_regex_match_full (regex, string, string_len,
+			      start_position, match_opts2, NULL, NULL);
+  if (match != expected)
+    {
+      gchar *e1 = g_strescape (pattern, NULL);
+      gchar *e2 = g_strescape (string, NULL);
+      g_print ("failed \t(unexpected %s) '%s' against '%s'\n", match ? "match" : "mismatch", e1, e2);
+      g_free (e1);
+      g_free (e2);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  if (string_len == -1 && start_position == 0)
+    {
+      match = g_regex_match (regex, string, match_opts2, NULL);
+      if (match != expected)
+	{
+	  g_print ("failed \t(pattern: \"%s\", string: \"%s\")\n",
+		   pattern, string);
+	  g_regex_unref (regex);
+	  return FALSE;
+	}
+    }
+
+  g_regex_unref (regex);
+
+  verbose ("passed (%s)\n", match ? "match" : "nomatch");
+  return TRUE;
+}
+
+#define TEST_MATCH(pattern, compile_opts, match_opts, string, \
+		   string_len, start_position, match_opts2, expected) { \
+  total++; \
+  if (test_match (pattern, compile_opts, match_opts, string, \
+		  string_len, start_position, match_opts2, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+struct _Match
+{
+  gchar *string;
+  gint start, end;
+};
+typedef struct _Match Match;
+
+static void
+free_match (gpointer data, gpointer user_data)
+{
+  Match *match = data;
+  if (match == NULL)
+    return;
+  g_free (match->string);
+  g_free (match);
+}
+
+static gboolean
+test_match_next (const gchar *pattern,
+		 const gchar *string,
+		 gssize       string_len,
+		 gint         start_position,
+		 ...)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  va_list args;
+  GSList *matches = NULL;
+  GSList *expected = NULL;
+  GSList *l_exp, *l_match;
+  gboolean ret = TRUE;
+  
+  verbose ("matching \"%s\" against \"%s\" (start: %d, len: %d) \t",
+	   string, pattern, start_position, string_len);
+
+  /* The va_list is a NULL-terminated sequence of: extected matched string,
+   * expected start and expected end. */
+  va_start (args, start_position);
+  while (TRUE)
+   {
+      Match *match;
+      const gchar *expected_string = va_arg (args, const gchar *);
+      if (expected_string == NULL)
+        break;
+      match = g_new0 (Match, 1);
+      match->string = g_strdup (expected_string);
+      match->start = va_arg (args, gint);
+      match->end = va_arg (args, gint);
+      expected = g_slist_prepend (expected, match);
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+
+  g_regex_match_full (regex, string, string_len,
+		      start_position, 0, &match_info, NULL);
+  while (g_match_info_matches (match_info))
+    {
+      Match *match = g_new0 (Match, 1);
+      match->string = g_match_info_fetch (match_info, 0);
+      match->start = UNTOUCHED;
+      match->end = UNTOUCHED;
+      g_match_info_fetch_pos (match_info, 0, &match->start, &match->end);
+      matches = g_slist_prepend (matches, match);
+      g_match_info_next (match_info, NULL);
+    }
+  g_assert (regex == g_match_info_get_regex (match_info));
+  g_assert (string == g_match_info_get_string (match_info));
+  g_match_info_free (match_info);
+  matches = g_slist_reverse (matches);
+
+  if (g_slist_length (matches) != g_slist_length (expected))
+    {
+      gint match_count = g_slist_length (matches);
+      g_print ("failed \t(got %d %s, expected %d)\n", match_count,
+	       match_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  l_match =  matches;
+  while (l_exp != NULL)
+    {
+      Match *exp = l_exp->data;
+      Match *match = l_match->data;
+
+      if (!streq(exp->string, match->string))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   match->string, exp->string);
+	  ret = FALSE;
+	  goto exit;
+	}
+
+      if (exp->start != match->start || exp->end != match->end)
+	{
+	  g_print ("failed \t(got [%d, %d], expected [%d, %d])\n",
+		   match->start, match->end, exp->start, exp->end);
+	  ret = FALSE;
+	  goto exit;
+	}
+
+      l_exp = g_slist_next (l_exp);
+      l_match = g_slist_next (l_match);
+    }
+
+exit:
+  if (ret)
+    {
+      gint count = g_slist_length (matches);
+      verbose ("passed (%d %s)\n", count, count == 1 ? "match" : "matches");
+    }
+
+  g_regex_unref (regex);
+  g_slist_foreach (expected, free_match, NULL);
+  g_slist_free (expected);
+  g_slist_foreach (matches, free_match, NULL);
+  g_slist_free (matches);
+
+  return ret;
+}
+
+#define TEST_MATCH_NEXT0(pattern, string, string_len, start_position) { \
+  total++; \
+  if (test_match_next (pattern, string, string_len, start_position, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_MATCH_NEXT1(pattern, string, string_len, start_position, \
+			      t1, s1, e1) { \
+  total++; \
+  if (test_match_next (pattern, string, string_len, start_position, \
+		       t1, s1, e1, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_MATCH_NEXT2(pattern, string, string_len, start_position, \
+			 t1, s1, e1, t2, s2, e2) { \
+  total++; \
+  if (test_match_next (pattern, string, string_len, start_position, \
+		       t1, s1, e1, t2, s2, e2, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_MATCH_NEXT3(pattern, string, string_len, start_position, \
+			 t1, s1, e1, t2, s2, e2, t3, s3, e3) { \
+  total++; \
+  if (test_match_next (pattern, string, string_len, start_position, \
+		       t1, s1, e1, t2, s2, e2, t3, s3, e3, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_MATCH_NEXT4(pattern, string, string_len, start_position, \
+			 t1, s1, e1, t2, s2, e2, t3, s3, e3, t4, s4, e4) { \
+  total++; \
+  if (test_match_next (pattern, string, string_len, start_position, \
+		       t1, s1, e1, t2, s2, e2, t3, s3, e3, t4, s4, e4, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_match_count (const gchar      *pattern,
+		  const gchar      *string,
+		  gint              start_position,
+                  GRegexMatchFlags  match_opts,
+		  gint              expected_count)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  gint count;
+  
+  verbose ("fetching match count (string: \"%s\", pattern: \"%s\", start: %d) \t",
+	   string, pattern, start_position);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+
+  g_regex_match_full (regex, string, -1, start_position,
+		      match_opts, &match_info, NULL);
+  count = g_match_info_get_match_count (match_info);
+
+  if (count != expected_count)
+    {
+      g_print ("failed \t(got %d, expected: %d)\n", count, expected_count);
+      return FALSE;
+    }
+
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_MATCH_COUNT(pattern, string, start_position, match_opts, expected_count) { \
+  total++; \
+  if (test_match_count (pattern, string, start_position, match_opts, expected_count)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_partial (const gchar *pattern,
+	      const gchar *string,
+	      gboolean     expected)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  
+  verbose ("partial matching (string: \"%s\", pattern: \"%s\") \t",
+	   string, pattern);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+
+  g_regex_match (regex, string, G_REGEX_MATCH_PARTIAL, &match_info);
+  if (expected != g_match_info_is_partial_match (match_info))
+    {
+      g_print ("failed \t(got %d, expected: %d)\n", !expected, expected);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  if (expected && g_match_info_fetch_pos (match_info, 0, NULL, NULL))
+    {
+      g_print ("failed \t(got sub-pattern 0)\n");
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  if (expected && g_match_info_fetch_pos (match_info, 1, NULL, NULL))
+    {
+      g_print ("failed \t(got sub-pattern 1)\n");
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_PARTIAL(pattern, string, expected) { \
+  total++; \
+  if (test_partial (pattern, string, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_sub_pattern (const gchar *pattern,
+		  const gchar *string,
+		  gint         start_position,
+		  gint         sub_n,
+		  const gchar *expected_sub,
+		  gint         expected_start,
+		  gint         expected_end)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  gchar *sub_expr;
+  gint start = UNTOUCHED, end = UNTOUCHED;
+
+  verbose ("fetching sub-pattern %d from \"%s\" (pattern: \"%s\") \t",
+	   sub_n, string, pattern);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  g_regex_match_full (regex, string, -1, start_position, 0, &match_info, NULL);
+
+  sub_expr = g_match_info_fetch (match_info, sub_n);
+  if (!streq(sub_expr, expected_sub))
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+	       sub_expr, expected_sub);
+      g_free (sub_expr);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+  g_free (sub_expr);
+
+  g_match_info_fetch_pos (match_info, sub_n, &start, &end);
+  if (start != expected_start || end != expected_end)
+    {
+      g_print ("failed \t(got [%d, %d], expected [%d, %d])\n",
+	       start, end, expected_start, expected_end);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_SUB_PATTERN(pattern, string, start_position, sub_n, expected_sub, \
+			 expected_start, expected_end) { \
+  total++; \
+  if (test_sub_pattern (pattern, string, start_position, sub_n, expected_sub, \
+			expected_start, expected_end)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_named_sub_pattern (const gchar *pattern,
+			GRegexCompileFlags flags,
+			const gchar *string,
+			gint         start_position,
+			const gchar *sub_name,
+			const gchar *expected_sub,
+			gint         expected_start,
+			gint         expected_end)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  gint start = UNTOUCHED, end = UNTOUCHED;
+  gchar *sub_expr;
+
+  verbose ("fetching sub-pattern \"%s\" from \"%s\" (pattern: \"%s\") \t",
+	   sub_name, string, pattern);
+
+  regex = g_regex_new (pattern, flags, 0, NULL);
+
+  g_regex_match_full (regex, string, -1, start_position, 0, &match_info, NULL);
+  sub_expr = g_match_info_fetch_named (match_info, sub_name);
+  if (!streq (sub_expr, expected_sub))
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+	       sub_expr, expected_sub);
+      g_free (sub_expr);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+  g_free (sub_expr);
+
+  g_match_info_fetch_named_pos (match_info, sub_name, &start, &end);
+  if (start != expected_start || end != expected_end)
+    {
+      g_print ("failed \t(got [%d, %d], expected [%d, %d])\n",
+	       start, end, expected_start, expected_end);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_NAMED_SUB_PATTERN(pattern, string, start_position, sub_name, \
+			       expected_sub, expected_start, expected_end) { \
+  total++; \
+  if (test_named_sub_pattern (pattern, 0, string, start_position, sub_name, \
+			      expected_sub, expected_start, expected_end)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_NAMED_SUB_PATTERN_DUPNAMES(pattern, string, start_position, sub_name, \
+					expected_sub, expected_start, expected_end) { \
+  total++; \
+  if (test_named_sub_pattern (pattern, G_REGEX_DUPNAMES, string, start_position, \
+			      sub_name, expected_sub, expected_start, expected_end)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_fetch_all (const gchar *pattern,
+		const gchar *string,
+		...)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  va_list args;
+  GSList *expected = NULL;
+  GSList *l_exp;
+  gchar **matches;
+  gint match_count;
+  gboolean ret = TRUE;
+  gint i;
+  
+  verbose ("fetching all sub-patterns from \"%s\" (pattern: \"%s\") \t",
+	   string, pattern);
+
+  /* The va_list is a NULL-terminated sequence of extected strings. */
+  va_start (args, string);
+  while (TRUE)
+   {
+      gchar *expected_string = va_arg (args, gchar *);
+      if (expected_string == NULL)
+        break;
+      else
+        expected = g_slist_prepend (expected, g_strdup (expected_string));
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  g_regex_match (regex, string, 0, &match_info);
+  matches = g_match_info_fetch_all (match_info);
+  if (matches)
+    match_count = g_strv_length (matches);
+  else
+    match_count = 0;
+
+  if (match_count != g_slist_length (expected))
+    {
+      g_print ("failed \t(got %d %s, expected %d)\n", match_count,
+	       match_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  for (i = 0; l_exp != NULL; i++, l_exp = g_slist_next (l_exp))
+    {
+      if (!streq(l_exp->data, matches [i]))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   matches [i], (gchar *)l_exp->data);
+	  ret = FALSE;
+	  goto exit;
+	}
+    }
+
+  verbose ("passed (%d %s)\n", match_count,
+	   match_count == 1 ? "match" : "matches");
+
+exit:
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+  g_slist_foreach (expected, (GFunc)g_free, NULL);
+  g_slist_free (expected);
+  g_strfreev (matches);
+
+  return ret;
+}
+
+#define TEST_FETCH_ALL0(pattern, string) { \
+  total++; \
+  if (test_fetch_all (pattern, string, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_FETCH_ALL1(pattern, string, e1) { \
+  total++; \
+  if (test_fetch_all (pattern, string, e1, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_FETCH_ALL2(pattern, string, e1, e2) { \
+  total++; \
+  if (test_fetch_all (pattern, string, e1, e2, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_FETCH_ALL3(pattern, string, e1, e2, e3) { \
+  total++; \
+  if (test_fetch_all (pattern, string, e1, e2, e3, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_split_simple (const gchar *pattern,
+		   const gchar *string,
+		   ...)
+{
+  va_list args;
+  GSList *expected = NULL;
+  GSList *l_exp;
+  gchar **tokens;
+  gint token_count;
+  gboolean ret = TRUE;
+  gint i;
+  
+  verbose ("splitting \"%s\" against \"%s\" \t", string, pattern);
+
+  /* The va_list is a NULL-terminated sequence of extected strings. */
+  va_start (args, string);
+  while (TRUE)
+   {
+      gchar *expected_string = va_arg (args, gchar *);
+      if (expected_string == NULL)
+        break;
+      else
+        expected = g_slist_prepend (expected, g_strdup (expected_string));
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  tokens = g_regex_split_simple (pattern, string, 0, 0);
+  if (tokens)
+    token_count = g_strv_length (tokens);
+  else
+    token_count = 0;
+
+  if (token_count != g_slist_length (expected))
+    {
+      g_print ("failed \t(got %d %s, expected %d)\n", token_count,
+	       token_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  for (i = 0; l_exp != NULL; i++, l_exp = g_slist_next (l_exp))
+    {
+      if (!streq(l_exp->data, tokens [i]))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   tokens[i], (gchar *)l_exp->data);
+	  ret = FALSE;
+	  goto exit;
+	}
+    }
+
+  verbose ("passed (%d %s)\n", token_count,
+	   token_count == 1 ? "token" : "tokens");
+
+exit:
+  g_slist_foreach (expected, (GFunc)g_free, NULL);
+  g_slist_free (expected);
+  g_strfreev (tokens);
+
+  return ret;
+}
+
+#define TEST_SPLIT_SIMPLE0(pattern, string) { \
+  total++; \
+  if (test_split_simple (pattern, string, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_SPLIT_SIMPLE1(pattern, string, e1) { \
+  total++; \
+  if (test_split_simple (pattern, string, e1, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_SPLIT_SIMPLE2(pattern, string, e1, e2) { \
+  total++; \
+  if (test_split_simple (pattern, string, e1, e2, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+#define TEST_SPLIT_SIMPLE3(pattern, string, e1, e2, e3) { \
+  total++; \
+  if (test_split_simple (pattern, string, e1, e2, e3, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_split_full (const gchar *pattern,
+		 const gchar *string,
+		 gint         start_position,
+		 gint         max_tokens,
+		 ...)
+{
+  GRegex *regex;
+  va_list args;
+  GSList *expected = NULL;
+  GSList *l_exp;
+  gchar **tokens;
+  gint token_count;
+  gboolean ret = TRUE;
+  gint i;
+  
+  verbose ("splitting \"%s\" against \"%s\" (start: %d, max: %d) \t",
+	   string, pattern, start_position, max_tokens);
+
+  /* The va_list is a NULL-terminated sequence of extected strings. */
+  va_start (args, max_tokens);
+  while (TRUE)
+   {
+      gchar *expected_string = va_arg (args, gchar *);
+      if (expected_string == NULL)
+        break;
+      else
+        expected = g_slist_prepend (expected, g_strdup (expected_string));
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  tokens = g_regex_split_full (regex, string, -1, start_position,
+			       0, max_tokens, NULL);
+  if (tokens)
+    token_count = g_strv_length (tokens);
+  else
+    token_count = 0;
+
+  if (token_count != g_slist_length (expected))
+    {
+      g_print ("failed \t(got %d %s, expected %d)\n", token_count,
+	       token_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  for (i = 0; l_exp != NULL; i++, l_exp = g_slist_next (l_exp))
+    {
+      if (!streq(l_exp->data, tokens [i]))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   tokens[i], (gchar *)l_exp->data);
+	  ret = FALSE;
+	  goto exit;
+	}
+    }
+
+  verbose ("passed (%d %s)\n", token_count,
+	   token_count == 1 ? "token" : "tokens");
+
+exit:
+  g_regex_unref (regex);
+  g_slist_foreach (expected, (GFunc)g_free, NULL);
+  g_slist_free (expected);
+  g_strfreev (tokens);
+
+  return ret;
+}
+
+static gboolean
+test_split (const gchar *pattern,
+	    const gchar *string,
+	    ...)
+{
+  GRegex *regex;
+  va_list args;
+  GSList *expected = NULL;
+  GSList *l_exp;
+  gchar **tokens;
+  gint token_count;
+  gboolean ret = TRUE;
+  gint i;
+  
+  verbose ("splitting \"%s\" against \"%s\" \t", string, pattern);
+
+  /* The va_list is a NULL-terminated sequence of extected strings. */
+  va_start (args, string);
+  while (TRUE)
+   {
+      gchar *expected_string = va_arg (args, gchar *);
+      if (expected_string == NULL)
+        break;
+      else
+        expected = g_slist_prepend (expected, g_strdup (expected_string));
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  tokens = g_regex_split (regex, string, 0);
+  if (tokens)
+    token_count = g_strv_length (tokens);
+  else
+    token_count = 0;
+
+  if (token_count != g_slist_length (expected))
+    {
+      g_print ("failed \t(got %d %s, expected %d)\n", token_count,
+	       token_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  for (i = 0; l_exp != NULL; i++, l_exp = g_slist_next (l_exp))
+    {
+      if (!streq(l_exp->data, tokens [i]))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   tokens[i], (gchar *)l_exp->data);
+	  ret = FALSE;
+	  goto exit;
+	}
+    }
+
+  verbose ("passed (%d %s)\n", token_count,
+	   token_count == 1 ? "token" : "tokens");
+
+exit:
+  g_regex_unref (regex);
+  g_slist_foreach (expected, (GFunc)g_free, NULL);
+  g_slist_free (expected);
+  g_strfreev (tokens);
+
+  return ret;
+}
+
+#define TEST_SPLIT0(pattern, string, start_position, max_tokens) { \
+  total++; \
+  if (test_split_full (pattern, string, start_position, max_tokens, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (start_position == 0 && max_tokens <= 0) \
+  { \
+    total++; \
+    if (test_split (pattern, string, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+#define TEST_SPLIT1(pattern, string, start_position, max_tokens, e1) { \
+  total++; \
+  if (test_split_full (pattern, string, start_position, max_tokens, e1, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (start_position == 0 && max_tokens <= 0) \
+  { \
+    total++; \
+    if (test_split (pattern, string, e1, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+#define TEST_SPLIT2(pattern, string, start_position, max_tokens, e1, e2) { \
+  total++; \
+  if (test_split_full (pattern, string, start_position, max_tokens, e1, e2, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (start_position == 0 && max_tokens <= 0) \
+  { \
+    total++; \
+    if (test_split (pattern, string, e1, e2, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+#define TEST_SPLIT3(pattern, string, start_position, max_tokens, e1, e2, e3) { \
+  total++; \
+  if (test_split_full (pattern, string, start_position, max_tokens, e1, e2, e3, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (start_position == 0 && max_tokens <= 0) \
+  { \
+    total++; \
+    if (test_split (pattern, string, e1, e2, e3, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+static gboolean
+test_check_replacement (const gchar *string_to_expand,
+			gboolean     expected,
+			gboolean     expected_refs)
+{
+  gboolean result;
+  gboolean has_refs;
+
+  verbose ("checking replacement string \"%s\" \t", string_to_expand);
+
+  result = g_regex_check_replacement (string_to_expand, &has_refs, NULL);
+  if (expected != result)
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n", 
+	       result ? "TRUE" : "FALSE",
+	       expected ? "TRUE" : "FALSE");
+      return FALSE;
+    }
+
+  if (expected && expected_refs != has_refs)
+    {
+      g_print ("failed \t(got has_references \"%s\", expected \"%s\")\n", 
+	       has_refs ? "TRUE" : "FALSE",
+	       expected_refs ? "TRUE" : "FALSE");
+      return FALSE;
+    }
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_CHECK_REPLACEMENT(string_to_expand, expected, expected_refs) { \
+  total++; \
+  if (test_check_replacement (string_to_expand, expected, expected_refs)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+static gboolean
+test_expand (const gchar *pattern,
+	     const gchar *string,
+	     const gchar *string_to_expand,
+	     gboolean     raw,
+	     const gchar *expected)
+{
+  GRegex *regex = NULL;
+  GMatchInfo *match_info = NULL;
+  gchar *res;
+  
+  verbose ("expanding the references in \"%s\" (pattern: \"%s\", string: \"%s\") \t",
+	   string_to_expand,
+	   pattern ? pattern : "(null)",
+	   string ? string : "(null)");
+
+  if (pattern)
+    {
+      regex = g_regex_new (pattern, raw ? G_REGEX_RAW : 0, 0, NULL);
+      g_regex_match (regex, string, 0, &match_info);
+    }
+
+  res = g_match_info_expand_references (match_info, string_to_expand, NULL);
+  if (!streq (res, expected))
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n", res, expected);
+      g_free (res);
+      g_match_info_free (match_info);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_free (res);
+  g_match_info_free (match_info);
+  if (regex)
+    g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_EXPAND(pattern, string, string_to_expand, raw, expected) { \
+  total++; \
+  if (test_expand (pattern, string, string_to_expand, raw, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_replace (const gchar *pattern,
+	      const gchar *string,
+	      gint         start_position,
+	      const gchar *replacement,
+	      const gchar *expected)
+{
+  GRegex *regex;
+  gchar *res;
+  
+  verbose ("replacing \"%s\" in \"%s\" (pattern: \"%s\", start: %d) \t",
+	   replacement, string, pattern, start_position);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  res = g_regex_replace (regex, string, -1, start_position, replacement, 0, NULL);
+  if (!streq (res, expected))
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n", res, expected);
+      g_free (res);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_free (res);
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_REPLACE(pattern, string, start_position, replacement, expected) { \
+  total++; \
+  if (test_replace (pattern, string, start_position, replacement, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_replace_lit (const gchar *pattern,
+		  const gchar *string,
+		  gint         start_position,
+		  const gchar *replacement,
+		  const gchar *expected)
+{
+  GRegex *regex;
+  gchar *res;
+  
+  verbose ("replacing literally \"%s\" in \"%s\" (pattern: \"%s\", start: %d) \t",
+	   replacement, string, pattern, start_position);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  res = g_regex_replace_literal (regex, string, -1, start_position,
+				 replacement, 0, NULL);
+  if (!streq (res, expected))
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n", res, expected);
+      g_free (res);
+      g_regex_unref (regex);
+      return FALSE;
+    }
+
+  g_free (res);
+  g_regex_unref (regex);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_REPLACE_LIT(pattern, string, start_position, replacement, expected) { \
+  total++; \
+  if (test_replace_lit (pattern, string, start_position, replacement, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_get_string_number (const gchar *pattern,
+			const gchar *name,
+			gint         expected_num)
+{
+  GRegex *regex;
+  gint num;
+  
+  verbose ("getting the number of \"%s\" (pattern: \"%s\") \t",
+	   name, pattern);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  num = g_regex_get_string_number (regex, name);
+  g_regex_unref (regex);
+
+  if (num != expected_num)
+    {
+      g_print ("failed \t(got %d, expected %d)\n", num, expected_num);
+      return FALSE;
+    }
+  else
+    {
+      verbose ("passed\n");
+      return TRUE;
+    }
+}
+
+#define TEST_GET_STRING_NUMBER(pattern, name, expected_num) { \
+  total++; \
+  if (test_get_string_number (pattern, name, expected_num)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_escape (const gchar *string,
+	     gint         length,
+	     const gchar *expected)
+{
+  gchar *escaped;
+  
+  verbose ("escaping \"%s\" (len: %d) \t", string, length);
+
+  escaped = g_regex_escape_string (string, length);
+
+  if (!streq (escaped, expected))
+    {
+      g_print ("failed \t(got \"%s\", expected \"%s\")\n", escaped, expected);
+      g_free (escaped);
+      return FALSE;
+    }
+
+  g_free (escaped);
+
+  verbose ("passed\n");
+  return TRUE;
+}
+
+#define TEST_ESCAPE(string, length, expected) { \
+  total++; \
+  if (test_escape (string, length, expected)) \
+    PASS; \
+  else \
+    FAIL; \
+}
+
+static gboolean
+test_match_all_full (const gchar *pattern,
+		     const gchar *string,
+		     gssize       string_len,
+		     gint         start_position,
+		     ...)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  va_list args;
+  GSList *expected = NULL;
+  GSList *l_exp;
+  gboolean match_ok;
+  gboolean ret = TRUE;
+  gint match_count;
+  gint i;
+  
+  verbose ("matching all in \"%s\" against \"%s\" (start: %d, len: %d) \t",
+	   string, pattern, start_position, string_len);
+
+  /* The va_list is a NULL-terminated sequence of: extected matched string,
+   * expected start and expected end. */
+  va_start (args, start_position);
+  while (TRUE)
+   {
+      Match *match;
+      const gchar *expected_string = va_arg (args, const gchar *);
+      if (expected_string == NULL)
+        break;
+      match = g_new0 (Match, 1);
+      match->string = g_strdup (expected_string);
+      match->start = va_arg (args, gint);
+      match->end = va_arg (args, gint);
+      expected = g_slist_prepend (expected, match);
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  match_ok = g_regex_match_all_full (regex, string, string_len, start_position,
+				     0, &match_info, NULL);
+
+  if (match_ok && g_slist_length (expected) == 0)
+    {
+      g_print ("failed\n");
+      ret = FALSE;
+      goto exit;
+    }
+  if (!match_ok && g_slist_length (expected) != 0)
+    {
+      g_print ("failed\n");
+      ret = FALSE;
+      goto exit;
+    }
+
+  match_count = g_match_info_get_match_count (match_info);
+  if (match_count != g_slist_length (expected))
+    {
+      g_print ("failed \t(got %d %s, expected %d)\n", match_count,
+	       match_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  for (i = 0; i < match_count; i++)
+    {
+      gint start, end;
+      gchar *matched_string;
+      Match *exp = l_exp->data;
+
+      matched_string = g_match_info_fetch (match_info, i);
+      g_match_info_fetch_pos (match_info, i, &start, &end);
+
+      if (!streq(exp->string, matched_string))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   matched_string, exp->string);
+          g_free (matched_string);
+	  ret = FALSE;
+	  goto exit;
+	}
+      g_free (matched_string);
+
+      if (exp->start != start || exp->end != end)
+	{
+	  g_print ("failed \t(got [%d, %d], expected [%d, %d])\n",
+		   start, end, exp->start, exp->end);
+	  ret = FALSE;
+	  goto exit;
+	}
+
+      l_exp = g_slist_next (l_exp);
+    }
+
+exit:
+  if (ret)
+    {
+      verbose ("passed (%d %s)\n", match_count, match_count == 1 ? "match" : "matches");
+    }
+
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+  g_slist_foreach (expected, free_match, NULL);
+  g_slist_free (expected);
+
+  return ret;
+}
+
+static gboolean
+test_match_all (const gchar *pattern,
+		const gchar *string,
+                ...)
+{
+  GRegex *regex;
+  GMatchInfo *match_info;
+  va_list args;
+  GSList *expected = NULL;
+  GSList *l_exp;
+  gboolean match_ok;
+  gboolean ret = TRUE;
+  gint match_count;
+  gint i;
+  
+  verbose ("matching all in \"%s\" against \"%s\" \t", string, pattern);
+
+  /* The va_list is a NULL-terminated sequence of: extected matched string,
+   * expected start and expected end. */
+  va_start (args, string);
+  while (TRUE)
+   {
+      Match *match;
+      const gchar *expected_string = va_arg (args, const gchar *);
+      if (expected_string == NULL)
+        break;
+      match = g_new0 (Match, 1);
+      match->string = g_strdup (expected_string);
+      match->start = va_arg (args, gint);
+      match->end = va_arg (args, gint);
+      expected = g_slist_prepend (expected, match);
+    }
+  expected = g_slist_reverse (expected);
+  va_end (args);
+
+  regex = g_regex_new (pattern, 0, 0, NULL);
+  match_ok = g_regex_match_all (regex, string, 0, &match_info);
+
+  if (match_ok && g_slist_length (expected) == 0)
+    {
+      g_print ("failed\n");
+      ret = FALSE;
+      goto exit;
+    }
+  if (!match_ok && g_slist_length (expected) != 0)
+    {
+      g_print ("failed\n");
+      ret = FALSE;
+      goto exit;
+    }
+
+  match_count = g_match_info_get_match_count (match_info);
+  if (match_count != g_slist_length (expected))
+    {
+      g_print ("failed \t(got %d %s, expected %d)\n", match_count,
+	       match_count == 1 ? "match" : "matches", 
+	       g_slist_length (expected));
+      ret = FALSE;
+      goto exit;
+    }
+
+  l_exp = expected;
+  for (i = 0; i < match_count; i++)
+    {
+      gint start, end;
+      gchar *matched_string;
+      Match *exp = l_exp->data;
+
+      matched_string = g_match_info_fetch (match_info, i);
+      g_match_info_fetch_pos (match_info, i, &start, &end);
+
+      if (!streq(exp->string, matched_string))
+	{
+	  g_print ("failed \t(got \"%s\", expected \"%s\")\n",
+		   matched_string, exp->string);
+          g_free (matched_string);
+	  ret = FALSE;
+	  goto exit;
+	}
+      g_free (matched_string);
+
+      if (exp->start != start || exp->end != end)
+	{
+	  g_print ("failed \t(got [%d, %d], expected [%d, %d])\n",
+		   start, end, exp->start, exp->end);
+	  ret = FALSE;
+	  goto exit;
+	}
+
+      l_exp = g_slist_next (l_exp);
+    }
+
+exit:
+  if (ret)
+    {
+      verbose ("passed (%d %s)\n", match_count, match_count == 1 ? "match" : "matches");
+    }
+
+  g_match_info_free (match_info);
+  g_regex_unref (regex);
+  g_slist_foreach (expected, free_match, NULL);
+  g_slist_free (expected);
+
+  return ret;
+}
+
+#define TEST_MATCH_ALL0(pattern, string, string_len, start_position) { \
+  total++; \
+  if (test_match_all_full (pattern, string, string_len, start_position, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (string_len == -1 && start_position == 0) \
+  { \
+    total++; \
+    if (test_match_all (pattern, string, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+#define TEST_MATCH_ALL1(pattern, string, string_len, start_position, \
+			t1, s1, e1) { \
+  total++; \
+  if (test_match_all_full (pattern, string, string_len, start_position, \
+			   t1, s1, e1, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (string_len == -1 && start_position == 0) \
+  { \
+    total++; \
+    if (test_match_all (pattern, string, t1, s1, e1, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+#define TEST_MATCH_ALL2(pattern, string, string_len, start_position, \
+			t1, s1, e1, t2, s2, e2) { \
+  total++; \
+  if (test_match_all_full (pattern, string, string_len, start_position, \
+			   t1, s1, e1, t2, s2, e2, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (string_len == -1 && start_position == 0) \
+  { \
+    total++; \
+    if (test_match_all (pattern, string, t1, s1, e1, t2, s2, e2, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+#define TEST_MATCH_ALL3(pattern, string, string_len, start_position, \
+			t1, s1, e1, t2, s2, e2, t3, s3, e3) { \
+  total++; \
+  if (test_match_all_full (pattern, string, string_len, start_position, \
+			   t1, s1, e1, t2, s2, e2, t3, s3, e3, NULL)) \
+    PASS; \
+  else \
+    FAIL; \
+  if (string_len == -1 && start_position == 0) \
+  { \
+    total++; \
+    if (test_match_all (pattern, string, t1, s1, e1, t2, s2, e2, t3, s3, e3, NULL)) \
+      PASS; \
+    else \
+      FAIL; \
+  } \
+}
+
+int
+main (int argc, char *argv[])
+{
+  gint total = 0;
+  gint passed = 0;
+  gint failed = 0;
+  gint i = 0;
+
+  setlocale (LC_ALL, "");
+
+  for (i = 1; i < argc; i++)
+    {
+      if (streq ("--noisy", argv[i]))
+	noisy = TRUE;
+      else if (streq ("--abort", argv[i]))
+	abort_on_fail = TRUE;
+    }
+
+  g_setenv ("G_DEBUG", "fatal_warnings", TRUE);
+
+  /* TEST_NEW(pattern, compile_opts, match_opts) */
+  TEST_NEW("", 0, 0);
+  TEST_NEW(".*", 0, 0);
+  TEST_NEW(".*", G_REGEX_OPTIMIZE, 0);
+  TEST_NEW(".*", G_REGEX_MULTILINE, 0);
+  TEST_NEW(".*", G_REGEX_DOTALL, 0);
+  TEST_NEW(".*", G_REGEX_DOTALL, G_REGEX_MATCH_NOTBOL);
+  TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", 0, 0);
+  TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS, 0);
+  TEST_NEW("(123\\d*)[a-zA-Z]+(?P<hello>.*)", G_REGEX_CASELESS | G_REGEX_OPTIMIZE, 0);
+  TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES, 0);
+  TEST_NEW("(?P<A>x)|(?P<A>y)", G_REGEX_DUPNAMES | G_REGEX_OPTIMIZE, 0);
+  /* This gives "internal error: code overflow" with pcre 6.0 */
+  TEST_NEW("(?i)(?-i)", 0, 0);
+
+  /* TEST_NEW_FAIL(pattern, compile_opts, expected_error) */
+  TEST_NEW_FAIL("(", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
+  TEST_NEW_FAIL(")", 0, G_REGEX_ERROR_UNMATCHED_PARENTHESIS);
+  TEST_NEW_FAIL("[", 0, G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS);
+  TEST_NEW_FAIL("*", 0, G_REGEX_ERROR_NOTHING_TO_REPEAT);
+  TEST_NEW_FAIL("?", 0, G_REGEX_ERROR_NOTHING_TO_REPEAT);
+  TEST_NEW_FAIL("(?P<A>x)|(?P<A>y)", 0, G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME);
+
+  /* TEST_MATCH_SIMPLE(pattern, string, compile_opts, match_opts, expected) */
+  TEST_MATCH_SIMPLE("a", "", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("a", "a", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("a", "ba", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("^a", "ba", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("a", "ba", G_REGEX_ANCHORED, 0, FALSE);
+  TEST_MATCH_SIMPLE("a", "ba", 0, G_REGEX_MATCH_ANCHORED, FALSE);
+  TEST_MATCH_SIMPLE("a", "ab", G_REGEX_ANCHORED, 0, TRUE);
+  TEST_MATCH_SIMPLE("a", "ab", 0, G_REGEX_MATCH_ANCHORED, TRUE);
+  TEST_MATCH_SIMPLE("a", "a", G_REGEX_CASELESS, 0, TRUE);
+  TEST_MATCH_SIMPLE("a", "A", G_REGEX_CASELESS, 0, TRUE);
+  /* These are needed to test extended properties. */
+  TEST_MATCH_SIMPLE(AGRAVE, AGRAVE, G_REGEX_CASELESS, 0, TRUE);
+  TEST_MATCH_SIMPLE(AGRAVE, AGRAVE_UPPER, G_REGEX_CASELESS, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{L}", "a", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{L}", "1", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{L}", AGRAVE, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{L}", AGRAVE_UPPER, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{L}", SHEEN, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{L}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ll}", "a", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Ll}", AGRAVE, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Ll}", AGRAVE_UPPER, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ll}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Sc}", AGRAVE, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Sc}", EURO, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Sc}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{N}", "a", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{N}", "1", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{N}", AGRAVE, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{N}", AGRAVE_UPPER, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{N}", SHEEN, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{N}", ETH30, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Nd}", "a", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Nd}", "1", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Nd}", AGRAVE, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Nd}", AGRAVE_UPPER, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Nd}", SHEEN, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Nd}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Common}", SHEEN, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Common}", "a", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Common}", AGRAVE, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Common}", AGRAVE_UPPER, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Common}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Common}", "%", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Common}", "1", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", SHEEN, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", "a", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", AGRAVE, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", AGRAVE_UPPER, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", "%", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Arabic}", "1", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", SHEEN, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", "a", 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", AGRAVE, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", AGRAVE_UPPER, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", ETH30, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", "%", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Latin}", "1", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", SHEEN, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", "a", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", AGRAVE, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", AGRAVE_UPPER, 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", ETH30, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", "%", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{Ethiopic}", "1", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("\\p{L}(?<=\\p{Arabic})", SHEEN, 0, 0, TRUE);
+  TEST_MATCH_SIMPLE("\\p{L}(?<=\\p{Latin})", SHEEN, 0, 0, FALSE);
+  /* Invalid patterns. */
+  TEST_MATCH_SIMPLE("\\", "a", 0, 0, FALSE);
+  TEST_MATCH_SIMPLE("[", "", 0, 0, FALSE);
+
+  /* TEST_MATCH(pattern, compile_opts, match_opts, string,
+   * 		string_len, start_position, match_opts2, expected) */
+  TEST_MATCH("a", 0, 0, "a", -1, 0, 0, TRUE);
+  TEST_MATCH("a", 0, 0, "A", -1, 0, 0, FALSE);
+  TEST_MATCH("a", G_REGEX_CASELESS, 0, "A", -1, 0, 0, TRUE);
+  TEST_MATCH("a", 0, 0, "ab", -1, 1, 0, FALSE);
+  TEST_MATCH("a", 0, 0, "ba", 1, 0, 0, FALSE);
+  TEST_MATCH("a", 0, 0, "bab", -1, 0, 0, TRUE);
+  TEST_MATCH("a", 0, 0, "b", -1, 0, 0, FALSE);
+  TEST_MATCH("a", 0, G_REGEX_ANCHORED, "a", -1, 0, 0, TRUE);
+  TEST_MATCH("a", 0, G_REGEX_ANCHORED, "ab", -1, 1, 0, FALSE);
+  TEST_MATCH("a", 0, G_REGEX_ANCHORED, "ba", 1, 0, 0, FALSE);
+  TEST_MATCH("a", 0, G_REGEX_ANCHORED, "bab", -1, 0, 0, FALSE);
+  TEST_MATCH("a", 0, G_REGEX_ANCHORED, "b", -1, 0, 0, FALSE);
+  TEST_MATCH("a", 0, 0, "a", -1, 0, G_REGEX_ANCHORED, TRUE);
+  TEST_MATCH("a", 0, 0, "ab", -1, 1, G_REGEX_ANCHORED, FALSE);
+  TEST_MATCH("a", 0, 0, "ba", 1, 0, G_REGEX_ANCHORED, FALSE);
+  TEST_MATCH("a", 0, 0, "bab", -1, 0, G_REGEX_ANCHORED, FALSE);
+  TEST_MATCH("a", 0, 0, "b", -1, 0, G_REGEX_ANCHORED, FALSE);
+  TEST_MATCH("a|b", 0, 0, "a", -1, 0, 0, TRUE);
+  TEST_MATCH("\\d", 0, 0, EURO, -1, 0, 0, FALSE);
+  TEST_MATCH("^.$", 0, 0, EURO, -1, 0, 0, TRUE);
+  TEST_MATCH("^.{3}$", 0, 0, EURO, -1, 0, 0, FALSE);
+  TEST_MATCH("^.$", G_REGEX_RAW, 0, EURO, -1, 0, 0, FALSE);
+  TEST_MATCH("^.{3}$", G_REGEX_RAW, 0, EURO, -1, 0, 0, TRUE);
+  TEST_MATCH(AGRAVE, G_REGEX_CASELESS, 0, AGRAVE_UPPER, -1, 0, 0, TRUE);
+
+  /* New lines handling. */
+  TEST_MATCH("^a\\Rb$", 0, 0, "a\r\nb", -1, 0, 0, TRUE);
+  TEST_MATCH("^a\\Rb$", 0, 0, "a\nb", -1, 0, 0, TRUE);
+  TEST_MATCH("^a\\Rb$", 0, 0, "a\rb", -1, 0, 0, TRUE);
+  TEST_MATCH("^a\\Rb$", 0, 0, "a\n\rb", -1, 0, 0, FALSE);
+  TEST_MATCH("^a\\R\\Rb$", 0, 0, "a\n\rb", -1, 0, 0, TRUE);
+  TEST_MATCH("^a\\nb$", 0, 0, "a\r\nb", -1, 0, 0, FALSE);
+  TEST_MATCH("^a\\r\\nb$", 0, 0, "a\r\nb", -1, 0, 0, TRUE);
+
+  TEST_MATCH("^b$", 0, 0, "a\nb\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, 0, "a\nb\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, 0, "a\r\nb\r\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, 0, "a\rb\rc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, 0, "a\nb\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_LF, 0, "a\nb\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CRLF, 0, "a\nb\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, 0, "a\r\nb\r\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_LF, 0, "a\r\nb\r\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CRLF, 0, "a\r\nb\r\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, 0, "a\rb\rc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_LF, 0, "a\rb\rc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CRLF, 0, "a\rb\rc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CR, "a\nb\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_LF, "a\nb\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CRLF, "a\nb\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CR, "a\r\nb\r\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_LF, "a\r\nb\r\nc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CRLF, "a\r\nb\r\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CR, "a\rb\rc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_LF, "a\rb\rc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE, G_REGEX_MATCH_NEWLINE_CRLF, "a\rb\rc", -1, 0, 0, FALSE);
+
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_ANY, "a\nb\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_ANY, "a\rb\rc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_ANY, "a\r\nb\r\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_LF, "a\nb\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_LF, "a\rb\rc", -1, 0, 0, FALSE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_CRLF, "a\r\nb\r\nc", -1, 0, 0, TRUE);
+  TEST_MATCH("^b$", G_REGEX_MULTILINE | G_REGEX_NEWLINE_CR, G_REGEX_MATCH_NEWLINE_CRLF, "a\rb\rc", -1, 0, 0, FALSE);
+
+  TEST_MATCH("a#\nb", G_REGEX_EXTENDED, 0, "a", -1, 0, 0, FALSE);
+  TEST_MATCH("a#\r\nb", G_REGEX_EXTENDED, 0, "a", -1, 0, 0, FALSE);
+  TEST_MATCH("a#\rb", G_REGEX_EXTENDED, 0, "a", -1, 0, 0, FALSE);
+  TEST_MATCH("a#\nb", G_REGEX_EXTENDED, G_REGEX_MATCH_NEWLINE_CR, "a", -1, 0, 0, FALSE);
+  TEST_MATCH("a#\nb", G_REGEX_EXTENDED | G_REGEX_NEWLINE_CR, 0, "a", -1, 0, 0, TRUE);
+
+  /* TEST_MATCH_NEXT#(pattern, string, string_len, start_position, ...) */
+  TEST_MATCH_NEXT0("a", "x", -1, 0);
+  TEST_MATCH_NEXT0("a", "ax", -1, 1);
+  TEST_MATCH_NEXT0("a", "xa", 1, 0);
+  TEST_MATCH_NEXT0("a", "axa", 1, 2);
+  TEST_MATCH_NEXT1("a", "a", -1, 0, "a", 0, 1);
+  TEST_MATCH_NEXT1("a", "xax", -1, 0, "a", 1, 2);
+  TEST_MATCH_NEXT1(EURO, ENG EURO, -1, 0, EURO, 2, 5);
+  TEST_MATCH_NEXT1("a*", "", -1, 0, "", 0, 0);
+  TEST_MATCH_NEXT2("a*", "aa", -1, 0, "aa", 0, 2, "", 2, 2);
+  TEST_MATCH_NEXT2(EURO "*", EURO EURO, -1, 0, EURO EURO, 0, 6, "", 6, 6);
+  TEST_MATCH_NEXT2("a", "axa", -1, 0, "a", 0, 1, "a", 2, 3);
+  TEST_MATCH_NEXT2("a+", "aaxa", -1, 0, "aa", 0, 2, "a", 3, 4);
+  TEST_MATCH_NEXT2("a", "aa", -1, 0, "a", 0, 1, "a", 1, 2);
+  TEST_MATCH_NEXT2("a", "ababa", -1, 2, "a", 2, 3, "a", 4, 5);
+  TEST_MATCH_NEXT2(EURO "+", EURO "-" EURO, -1, 0, EURO, 0, 3, EURO, 4, 7);
+  TEST_MATCH_NEXT3("", "ab", -1, 0, "", 0, 0, "", 1, 1, "", 2, 2);
+  TEST_MATCH_NEXT3("", AGRAVE "b", -1, 0, "", 0, 0, "", 2, 2, "", 3, 3);
+  TEST_MATCH_NEXT3("a", "aaxa", -1, 0, "a", 0, 1, "a", 1, 2, "a", 3, 4);
+  TEST_MATCH_NEXT3("a", "aa" OGRAVE "a", -1, 0, "a", 0, 1, "a", 1, 2, "a", 4, 5);
+  TEST_MATCH_NEXT3("a*", "aax", -1, 0, "aa", 0, 2, "", 2, 2, "", 3, 3);
+  TEST_MATCH_NEXT3("(?=[A-Z0-9])", "RegExTest", -1, 0, "", 0, 0, "", 3, 3, "", 5, 5);
+  TEST_MATCH_NEXT4("a*", "aaxa", -1, 0, "aa", 0, 2, "", 2, 2, "a", 3, 4, "", 4, 4);
+
+  /* TEST_MATCH_COUNT(pattern, string, start_position, match_opts, expected_count) */
+  TEST_MATCH_COUNT("a", "", 0, 0, 0);
+  TEST_MATCH_COUNT("a", "a", 0, 0, 1);
+  TEST_MATCH_COUNT("a", "a", 1, 0, 0);
+  TEST_MATCH_COUNT("(.)", "a", 0, 0, 2);
+  TEST_MATCH_COUNT("(.)", EURO, 0, 0, 2);
+  TEST_MATCH_COUNT("(?:.)", "a", 0, 0, 1);
+  TEST_MATCH_COUNT("(?P<A>.)", "a", 0, 0, 2);
+  TEST_MATCH_COUNT("a$", "a", 0, G_REGEX_MATCH_NOTEOL, 0);
+  TEST_MATCH_COUNT("(a)?(b)", "b", 0, 0, 3);
+  TEST_MATCH_COUNT("(a)?(b)", "ab", 0, 0, 3);
+
+  /* TEST_PARTIAL(pattern, string, expected) */
+  TEST_PARTIAL("^ab", "a", TRUE);
+  TEST_PARTIAL("^ab", "xa", FALSE);
+  TEST_PARTIAL("ab", "xa", TRUE);
+  TEST_PARTIAL("ab", "ab", FALSE); /* normal match. */
+  TEST_PARTIAL("a+b", "aa", FALSE); /* PCRE_ERROR_BAD_PARTIAL */
+  TEST_PARTIAL("(a)+b", "aa", TRUE);
+  TEST_PARTIAL("a?b", "a", TRUE);
+
+  /* TEST_SUB_PATTERN(pattern, string, start_position, sub_n, expected_sub,
+   * 		      expected_start, expected_end) */
+  TEST_SUB_PATTERN("a", "a", 0, 0, "a", 0, 1);
+  TEST_SUB_PATTERN("a(.)", "ab", 0, 1, "b", 1, 2);
+  TEST_SUB_PATTERN("a(.)", "a" EURO, 0, 1, EURO, 1, 4);
+  TEST_SUB_PATTERN("(?:.*)(a)(.)", "xxa" ENG, 0, 2, ENG, 3, 5);
+  TEST_SUB_PATTERN("(" HSTROKE ")", "a" HSTROKE ENG, 0, 1, HSTROKE, 1, 3);
+  TEST_SUB_PATTERN("a", "a", 0, 1, NULL, UNTOUCHED, UNTOUCHED);
+  TEST_SUB_PATTERN("a", "a", 0, 1, NULL, UNTOUCHED, UNTOUCHED);
+  TEST_SUB_PATTERN("(a)?(b)", "b", 0, 0, "b", 0, 1);
+  TEST_SUB_PATTERN("(a)?(b)", "b", 0, 1, "", -1, -1);
+  TEST_SUB_PATTERN("(a)?(b)", "b", 0, 2, "b", 0, 1);
+
+  /* TEST_NAMED_SUB_PATTERN(pattern, string, start_position, sub_name,
+   * 			    expected_sub, expected_start, expected_end) */
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", "ab", 0, "A", "b", 1, 2);
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", "aab", 1, "A", "b", 2, 3);
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", EURO "ab", 0, "A", "b", 4, 5);
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", EURO "ab", 0, "B", NULL, UNTOUCHED, UNTOUCHED);
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", EURO "ab", 0, "C", NULL, UNTOUCHED, UNTOUCHED);
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", "a" EGRAVE "x", 0, "A", EGRAVE, 1, 3);
+  TEST_NAMED_SUB_PATTERN("a(?P<A>.)(?P<B>.)?", "a" EGRAVE "x", 0, "B", "x", 3, 4);
+  TEST_NAMED_SUB_PATTERN("(?P<A>a)?(?P<B>b)", "b", 0, "A", "", -1, -1);
+  TEST_NAMED_SUB_PATTERN("(?P<A>a)?(?P<B>b)", "b", 0, "B", "b", 0, 1);
+
+  /* TEST_NAMED_SUB_PATTERN_DUPNAMES(pattern, string, start_position, sub_name,
+   *				     expected_sub, expected_start, expected_end) */
+  TEST_NAMED_SUB_PATTERN_DUPNAMES("(?P<N>a)|(?P<N>b)", "ab", 0, "N", "a", 0, 1);
+  TEST_NAMED_SUB_PATTERN_DUPNAMES("(?P<N>aa)|(?P<N>a)", "aa", 0, "N", "aa", 0, 2);
+  TEST_NAMED_SUB_PATTERN_DUPNAMES("(?P<N>aa)(?P<N>a)", "aaa", 0, "N", "aa", 0, 2);
+  TEST_NAMED_SUB_PATTERN_DUPNAMES("(?P<N>x)|(?P<N>a)", "a", 0, "N", "a", 0, 1);
+  TEST_NAMED_SUB_PATTERN_DUPNAMES("(?P<N>x)y|(?P<N>a)b", "ab", 0, "N", "a", 0, 1);
+
+  /* DUPNAMES option inside the pattern */
+  TEST_NAMED_SUB_PATTERN("(?J)(?P<N>a)|(?P<N>b)", "ab", 0, "N", "a", 0, 1);
+  TEST_NAMED_SUB_PATTERN("(?J)(?P<N>aa)|(?P<N>a)", "aa", 0, "N", "aa", 0, 2);
+  TEST_NAMED_SUB_PATTERN("(?J)(?P<N>aa)(?P<N>a)", "aaa", 0, "N", "aa", 0, 2);
+  TEST_NAMED_SUB_PATTERN("(?J)(?P<N>x)|(?P<N>a)", "a", 0, "N", "a", 0, 1);
+  TEST_NAMED_SUB_PATTERN("(?J)(?P<N>x)y|(?P<N>a)b", "ab", 0, "N", "a", 0, 1);
+
+  /* TEST_FETCH_ALL#(pattern, string, ...) */
+  TEST_FETCH_ALL0("a", "");
+  TEST_FETCH_ALL0("a", "b");
+  TEST_FETCH_ALL1("a", "a", "a");
+  TEST_FETCH_ALL1("a+", "aa", "aa");
+  TEST_FETCH_ALL1("(?:a)", "a", "a");
+  TEST_FETCH_ALL2("(a)", "a", "a", "a");
+  TEST_FETCH_ALL2("a(.)", "ab", "ab", "b");
+  TEST_FETCH_ALL2("a(.)", "a" HSTROKE, "a" HSTROKE, HSTROKE);
+  TEST_FETCH_ALL3("(?:.*)(a)(.)", "xyazk", "xyaz", "a", "z");
+  TEST_FETCH_ALL3("(?P<A>.)(a)", "xa", "xa", "x", "a");
+  TEST_FETCH_ALL3("(?P<A>.)(a)", ENG "a", ENG "a", ENG, "a");
+  TEST_FETCH_ALL3("(a)?(b)", "b", "b", "", "b");
+  TEST_FETCH_ALL3("(a)?(b)", "ab", "ab", "a", "b");
+
+  /* TEST_SPLIT_SIMPLE#(pattern, string, ...) */
+  TEST_SPLIT_SIMPLE0("", "");
+  TEST_SPLIT_SIMPLE0("a", "");
+  TEST_SPLIT_SIMPLE1(",", "a", "a");
+  TEST_SPLIT_SIMPLE1("(,)\\s*", "a", "a");
+  TEST_SPLIT_SIMPLE2(",", "a,b", "a", "b");
+  TEST_SPLIT_SIMPLE3(",", "a,b,c", "a", "b", "c");
+  TEST_SPLIT_SIMPLE3(",\\s*", "a,b,c", "a", "b", "c");
+  TEST_SPLIT_SIMPLE3(",\\s*", "a, b, c", "a", "b", "c");
+  TEST_SPLIT_SIMPLE3("(,)\\s*", "a,b", "a", ",", "b");
+  TEST_SPLIT_SIMPLE3("(,)\\s*", "a, b", "a", ",", "b");
+  /* Not matched sub-strings. */
+  TEST_SPLIT_SIMPLE2("a|(b)", "xay", "x", "y");
+  TEST_SPLIT_SIMPLE3("a|(b)", "xby", "x", "b", "y");
+  /* Empty matches. */
+  TEST_SPLIT_SIMPLE3("", "abc", "a", "b", "c");
+  TEST_SPLIT_SIMPLE3(" *", "ab c", "a", "b", "c");
+  /* Invalid patterns. */
+  TEST_SPLIT_SIMPLE0("\\", "");
+  TEST_SPLIT_SIMPLE0("[", "");
+
+  /* TEST_SPLIT#(pattern, string, start_position, max_tokens, ...) */
+  TEST_SPLIT0("", "", 0, 0);
+  TEST_SPLIT0("a", "", 0, 0);
+  TEST_SPLIT0("a", "", 0, 1);
+  TEST_SPLIT0("a", "", 0, 2);
+  TEST_SPLIT0("a", "a", 1, 0);
+  TEST_SPLIT1(",", "a", 0, 0, "a");
+  TEST_SPLIT1(",", "a,b", 0, 1, "a,b");
+  TEST_SPLIT1("(,)\\s*", "a", 0, 0, "a");
+  TEST_SPLIT1(",", "a,b", 2, 0, "b");
+  TEST_SPLIT2(",", "a,b", 0, 0, "a", "b");
+  TEST_SPLIT2(",", "a,b,c", 0, 2, "a", "b,c");
+  TEST_SPLIT2(",", "a,b", 1, 0, "", "b");
+  TEST_SPLIT2(",", "a,", 0, 0, "a", "");
+  TEST_SPLIT3(",", "a,b,c", 0, 0, "a", "b", "c");
+  TEST_SPLIT3(",\\s*", "a,b,c", 0, 0, "a", "b", "c");
+  TEST_SPLIT3(",\\s*", "a, b, c", 0, 0, "a", "b", "c");
+  TEST_SPLIT3("(,)\\s*", "a,b", 0, 0, "a", ",", "b");
+  TEST_SPLIT3("(,)\\s*", "a, b", 0, 0, "a", ",", "b");
+  /* Not matched sub-strings. */
+  TEST_SPLIT2("a|(b)", "xay", 0, 0, "x", "y");
+  TEST_SPLIT3("a|(b)", "xby", 0, -1, "x", "b", "y");
+  /* Empty matches. */
+  TEST_SPLIT2(" *", "ab c", 1, 0, "b", "c");
+  TEST_SPLIT3("", "abc", 0, 0, "a", "b", "c");
+  TEST_SPLIT3(" *", "ab c", 0, 0, "a", "b", "c");
+  TEST_SPLIT1(" *", "ab c", 0, 1, "ab c");
+  TEST_SPLIT2(" *", "ab c", 0, 2, "a", "b c");
+  TEST_SPLIT3(" *", "ab c", 0, 3, "a", "b", "c");
+  TEST_SPLIT3(" *", "ab c", 0, 4, "a", "b", "c");
+
+  /* TEST_CHECK_REPLACEMENT(string_to_expand, expected, expected_refs) */
+  TEST_CHECK_REPLACEMENT("", TRUE, FALSE);
+  TEST_CHECK_REPLACEMENT("a", TRUE, FALSE);
+  TEST_CHECK_REPLACEMENT("\\t\\n\\v\\r\\f\\a\\b\\\\\\x{61}", TRUE, FALSE);
+  TEST_CHECK_REPLACEMENT("\\0", TRUE, TRUE);
+  TEST_CHECK_REPLACEMENT("\\n\\2", TRUE, TRUE);
+  TEST_CHECK_REPLACEMENT("\\g<foo>", TRUE, TRUE);
+  /* Invalid strings */
+  TEST_CHECK_REPLACEMENT("\\Q", FALSE, FALSE);
+  TEST_CHECK_REPLACEMENT("x\\Ay", FALSE, FALSE);
+
+  /* TEST_EXPAND(pattern, string, string_to_expand, raw, expected) */
+  TEST_EXPAND("a", "a", "", FALSE, "");
+  TEST_EXPAND("a", "a", "\\0", FALSE, "a");
+  TEST_EXPAND("a", "a", "\\1", FALSE, "");
+  TEST_EXPAND("(a)", "ab", "\\1", FALSE, "a");
+  TEST_EXPAND("(a)", "a", "\\1", FALSE, "a");
+  TEST_EXPAND("(a)", "a", "\\g<1>", FALSE, "a");
+  TEST_EXPAND("a", "a", "\\0130", FALSE, "X");
+  TEST_EXPAND("a", "a", "\\\\\\0", FALSE, "\\a");
+  TEST_EXPAND("a(?P<G>.)c", "xabcy", "X\\g<G>X", FALSE, "XbX");
+  TEST_EXPAND("(.)(?P<1>.)", "ab", "\\1", FALSE, "a");
+  TEST_EXPAND("(.)(?P<1>.)", "ab", "\\g<1>", FALSE, "a");
+  TEST_EXPAND(".", EURO, "\\0", FALSE, EURO);
+  TEST_EXPAND("(.)", EURO, "\\1", FALSE, EURO);
+  TEST_EXPAND("(?P<G>.)", EURO, "\\g<G>", FALSE, EURO);
+  TEST_EXPAND(".", "a", EURO, FALSE, EURO);
+  TEST_EXPAND(".", "a", EURO "\\0", FALSE, EURO "a");
+  TEST_EXPAND(".", "", "\\Lab\\Ec", FALSE, "abc");
+  TEST_EXPAND(".", "", "\\LaB\\EC", FALSE, "abC");
+  TEST_EXPAND(".", "", "\\Uab\\Ec", FALSE, "ABc");
+  TEST_EXPAND(".", "", "a\\ubc", FALSE, "aBc");
+  TEST_EXPAND(".", "", "a\\lbc", FALSE, "abc");
+  TEST_EXPAND(".", "", "A\\uBC", FALSE, "ABC");
+  TEST_EXPAND(".", "", "A\\lBC", FALSE, "AbC");
+  TEST_EXPAND(".", "", "A\\l\\\\BC", FALSE, "A\\BC");
+  TEST_EXPAND(".", "", "\\L" AGRAVE "\\E", FALSE, AGRAVE);
+  TEST_EXPAND(".", "", "\\U" AGRAVE "\\E", FALSE, AGRAVE_UPPER);
+  TEST_EXPAND(".", "", "\\u" AGRAVE "a", FALSE, AGRAVE_UPPER "a");
+  TEST_EXPAND(".", "ab", "x\\U\\0y\\Ez", FALSE, "xAYz");
+  TEST_EXPAND(".(.)", "AB", "x\\L\\1y\\Ez", FALSE, "xbyz");
+  TEST_EXPAND(".", "ab", "x\\u\\0y\\Ez", FALSE, "xAyz");
+  TEST_EXPAND(".(.)", "AB", "x\\l\\1y\\Ez", FALSE, "xbyz");
+  TEST_EXPAND(".(.)", "a" AGRAVE_UPPER, "x\\l\\1y", FALSE, "x" AGRAVE "y");
+  TEST_EXPAND("a", "bab", "\\x{61}", FALSE, "a");
+  TEST_EXPAND("a", "bab", "\\x61", FALSE, "a");
+  TEST_EXPAND("a", "bab", "\\x5a", FALSE, "Z");
+  TEST_EXPAND("a", "bab", "\\0\\x5A", FALSE, "aZ");
+  TEST_EXPAND("a", "bab", "\\1\\x{5A}", FALSE, "Z");
+  TEST_EXPAND("a", "bab", "\\x{00E0}", FALSE, AGRAVE);
+  TEST_EXPAND("", "bab", "\\x{0634}", FALSE, SHEEN);
+  TEST_EXPAND("", "bab", "\\x{634}", FALSE, SHEEN);
+  TEST_EXPAND("", "", "\\t", FALSE, "\t");
+  TEST_EXPAND("", "", "\\v", FALSE, "\v");
+  TEST_EXPAND("", "", "\\r", FALSE, "\r");
+  TEST_EXPAND("", "", "\\n", FALSE, "\n");
+  TEST_EXPAND("", "", "\\f", FALSE, "\f");
+  TEST_EXPAND("", "", "\\a", FALSE, "\a");
+  TEST_EXPAND("", "", "\\b", FALSE, "\b");
+  TEST_EXPAND("a(.)", "abc", "\\0\\b\\1", FALSE, "ab\bb");
+  TEST_EXPAND("a(.)", "abc", "\\0141", FALSE, "a");
+  TEST_EXPAND("a(.)", "abc", "\\078", FALSE, "\a8");
+  TEST_EXPAND("a(.)", "abc", "\\077", FALSE, "?");
+  TEST_EXPAND("a(.)", "abc", "\\0778", FALSE, "?8");
+  TEST_EXPAND("a(.)", "a" AGRAVE "b", "\\1", FALSE, AGRAVE);
+  TEST_EXPAND("a(.)", "a" AGRAVE "b", "\\1", TRUE, "\xc3");
+  TEST_EXPAND("a(.)", "a" AGRAVE "b", "\\0", TRUE, "a\xc3");
+  /* Invalid strings. */
+  TEST_EXPAND("", "", "\\Q", FALSE, NULL);
+  TEST_EXPAND("", "", "x\\Ay", FALSE, NULL);
+  TEST_EXPAND("", "", "\\g<", FALSE, NULL);
+  TEST_EXPAND("", "", "\\g<>", FALSE, NULL);
+  TEST_EXPAND("", "", "\\g<1a>", FALSE, NULL);
+  TEST_EXPAND("", "", "\\g<a$>", FALSE, NULL);
+  TEST_EXPAND("", "", "\\", FALSE, NULL);
+  TEST_EXPAND("a", "a", "\\x{61", FALSE, NULL);
+  TEST_EXPAND("a", "a", "\\x6X", FALSE, NULL);
+  /* Pattern-less. */
+  TEST_EXPAND(NULL, NULL, "", FALSE, "");
+  TEST_EXPAND(NULL, NULL, "\\n", FALSE, "\n");
+  /* Invalid strings */
+  TEST_EXPAND(NULL, NULL, "\\Q", FALSE, NULL);
+  TEST_EXPAND(NULL, NULL, "x\\Ay", FALSE, NULL);
+
+  /* TEST_REPLACE(pattern, string, start_position, replacement, expected) */
+  TEST_REPLACE("a", "ababa", 0, "A", "AbAbA");
+  TEST_REPLACE("a", "ababa", 1, "A", "abAbA");
+  TEST_REPLACE("a", "ababa", 2, "A", "abAbA");
+  TEST_REPLACE("a", "ababa", 3, "A", "ababA");
+  TEST_REPLACE("a", "ababa", 4, "A", "ababA");
+  TEST_REPLACE("a", "ababa", 5, "A", "ababa");
+  TEST_REPLACE("a", "ababa", 6, "A", "ababa");
+  TEST_REPLACE("a", "abababa", 2, "A", "abAbAbA");
+  TEST_REPLACE("a", "abab", 0, "A", "AbAb");
+  TEST_REPLACE("a", "baba", 0, "A", "bAbA");
+  TEST_REPLACE("a", "bab", 0, "A", "bAb");
+  TEST_REPLACE("$^", "abc", 0, "X", "abc");
+  TEST_REPLACE("(.)a", "ciao", 0, "a\\1", "caio");
+  TEST_REPLACE("a.", "abc", 0, "\\0\\0", "ababc");
+  TEST_REPLACE("a", "asd", 0, "\\0101", "Asd");
+  TEST_REPLACE("(a).\\1", "aba cda", 0, "\\1\\n", "a\n cda");
+  TEST_REPLACE("a" AGRAVE "a", "a" AGRAVE "a", 0, "x", "x");
+  TEST_REPLACE("a" AGRAVE "a", "a" AGRAVE "a", 0, OGRAVE, OGRAVE);
+  TEST_REPLACE("[^-]", "-" EURO "-x-" HSTROKE, 0, "a", "-a-a-a");
+  TEST_REPLACE("[^-]", "-" EURO "-" HSTROKE, 0, "a\\g<0>a", "-a" EURO "a-a" HSTROKE "a");
+  TEST_REPLACE("-", "-" EURO "-" HSTROKE, 0, "", EURO HSTROKE);
+  TEST_REPLACE(".*", "hello", 0, "\\U\\0\\E", "HELLO");
+  TEST_REPLACE(".*", "hello", 0, "\\u\\0", "Hello");
+  TEST_REPLACE("\\S+", "hello world", 0, "\\U-\\0-", "-HELLO- -WORLD-");
+  TEST_REPLACE(".", "a", 0, "\\A", NULL);
+  TEST_REPLACE(".", "a", 0, "\\g", NULL);
+
+  /* TEST_REPLACE_LIT(pattern, string, start_position, replacement, expected) */
+  TEST_REPLACE_LIT("a", "ababa", 0, "A", "AbAbA");
+  TEST_REPLACE_LIT("a", "ababa", 1, "A", "abAbA");
+  TEST_REPLACE_LIT("a", "ababa", 2, "A", "abAbA");
+  TEST_REPLACE_LIT("a", "ababa", 3, "A", "ababA");
+  TEST_REPLACE_LIT("a", "ababa", 4, "A", "ababA");
+  TEST_REPLACE_LIT("a", "ababa", 5, "A", "ababa");
+  TEST_REPLACE_LIT("a", "ababa", 6, "A", "ababa");
+  TEST_REPLACE_LIT("a", "abababa", 2, "A", "abAbAbA");
+  TEST_REPLACE_LIT("a", "abcadaa", 0, "A", "AbcAdAA");
+  TEST_REPLACE_LIT("$^", "abc", 0, "X", "abc");
+  TEST_REPLACE_LIT("(.)a", "ciao", 0, "a\\1", "ca\\1o");
+  TEST_REPLACE_LIT("a.", "abc", 0, "\\0\\0\\n", "\\0\\0\\nc");
+  TEST_REPLACE_LIT("a" AGRAVE "a", "a" AGRAVE "a", 0, "x", "x");
+  TEST_REPLACE_LIT("a" AGRAVE "a", "a" AGRAVE "a", 0, OGRAVE, OGRAVE);
+  TEST_REPLACE_LIT(AGRAVE, "-" AGRAVE "-" HSTROKE, 0, "a" ENG "a", "-a" ENG "a-" HSTROKE);
+  TEST_REPLACE_LIT("[^-]", "-" EURO "-" AGRAVE "-" HSTROKE, 0, "a", "-a-a-a");
+  TEST_REPLACE_LIT("[^-]", "-" EURO "-" AGRAVE, 0, "a\\g<0>a", "-a\\g<0>a-a\\g<0>a");
+  TEST_REPLACE_LIT("-", "-" EURO "-" AGRAVE "-" HSTROKE, 0, "", EURO AGRAVE HSTROKE);
+  TEST_REPLACE_LIT("(?=[A-Z0-9])", "RegExTest", 0, "_", "_Reg_Ex_Test");
+  TEST_REPLACE_LIT("(?=[A-Z0-9])", "RegExTest", 1, "_", "Reg_Ex_Test");
+
+  /* TEST_GET_STRING_NUMBER(pattern, name, expected_num) */
+  TEST_GET_STRING_NUMBER("", "A", -1);
+  TEST_GET_STRING_NUMBER("(?P<A>.)", "A", 1);
+  TEST_GET_STRING_NUMBER("(?P<A>.)", "B", -1);
+  TEST_GET_STRING_NUMBER("(?P<A>.)(?P<B>a)", "A", 1);
+  TEST_GET_STRING_NUMBER("(?P<A>.)(?P<B>a)", "B", 2);
+  TEST_GET_STRING_NUMBER("(?P<A>.)(?P<B>a)", "C", -1);
+  TEST_GET_STRING_NUMBER("(?P<A>.)(.)(?P<B>a)", "A", 1);
+  TEST_GET_STRING_NUMBER("(?P<A>.)(.)(?P<B>a)", "B", 3);
+  TEST_GET_STRING_NUMBER("(?P<A>.)(.)(?P<B>a)", "C", -1);
+  TEST_GET_STRING_NUMBER("(?:a)(?P<A>.)", "A", 1);
+  TEST_GET_STRING_NUMBER("(?:a)(?P<A>.)", "B", -1);
+
+  /* TEST_ESCAPE(string, length, expected) */
+  TEST_ESCAPE("hello world", -1, "hello world");
+  TEST_ESCAPE("hello world", 5, "hello");
+  TEST_ESCAPE("hello.world", -1, "hello\\.world");
+  TEST_ESCAPE("a(b\\b.$", -1, "a\\(b\\\\b\\.\\$");
+  TEST_ESCAPE("hello\0world", -1, "hello");
+  TEST_ESCAPE("hello\0world", 11, "hello\\0world");
+  TEST_ESCAPE(EURO "*" ENG, -1, EURO "\\*" ENG);
+  TEST_ESCAPE("a$", -1, "a\\$");
+  TEST_ESCAPE("$a", -1, "\\$a");
+  TEST_ESCAPE("a$a", -1, "a\\$a");
+  TEST_ESCAPE("$a$", -1, "\\$a\\$");
+  TEST_ESCAPE("$a$", 0, "");
+  TEST_ESCAPE("$a$", 1, "\\$");
+  TEST_ESCAPE("$a$", 2, "\\$a");
+  TEST_ESCAPE("$a$", 3, "\\$a\\$");
+  TEST_ESCAPE("$a$", 4, "\\$a\\$\\0");
+  TEST_ESCAPE("|()[]{}^$*+?.", -1, "\\|\\(\\)\\[\\]\\{\\}\\^\\$\\*\\+\\?\\.");
+  TEST_ESCAPE("a|a(a)a[a]a{a}a^a$a*a+a?a.a", -1,
+	      "a\\|a\\(a\\)a\\[a\\]a\\{a\\}a\\^a\\$a\\*a\\+a\\?a\\.a");
+
+  /* TEST_MATCH_ALL#(pattern, string, string_len, start_position, ...) */
+  TEST_MATCH_ALL0("<.*>", "", -1, 0);
+  TEST_MATCH_ALL0("a+", "", -1, 0);
+  TEST_MATCH_ALL0("a+", "a", 0, 0);
+  TEST_MATCH_ALL0("a+", "a", -1, 1);
+  TEST_MATCH_ALL1("<.*>", "<a>", -1, 0, "<a>", 0, 3);
+  TEST_MATCH_ALL1("a+", "a", -1, 0, "a", 0, 1);
+  TEST_MATCH_ALL1("a+", "aa", 1, 0, "a", 0, 1);
+  TEST_MATCH_ALL1("a+", "aa", -1, 1, "a", 1, 2);
+  TEST_MATCH_ALL1("a+", "aa", 2, 1, "a", 1, 2);
+  TEST_MATCH_ALL1(".+", ENG, -1, 0, ENG, 0, 2);
+  TEST_MATCH_ALL2("<.*>", "<a><b>", -1, 0, "<a><b>", 0, 6, "<a>", 0, 3);
+  TEST_MATCH_ALL2("a+", "aa", -1, 0, "aa", 0, 2, "a", 0, 1);
+  TEST_MATCH_ALL2(".+", ENG EURO, -1, 0, ENG EURO, 0, 5, ENG, 0, 2);
+  TEST_MATCH_ALL3("<.*>", "<a><b><c>", -1, 0, "<a><b><c>", 0, 9,
+		  "<a><b>", 0, 6, "<a>", 0, 3);
+  TEST_MATCH_ALL3("a+", "aaa", -1, 0, "aaa", 0, 3, "aa", 0, 2, "a", 0, 1);
+
+end: /* if abort_on_fail is TRUE the flow passes to this label. */
+  verbose ("\n%u tests passed, %u failed\n", passed, failed);
+  return failed;
+}
+
+#else /* ENABLE_REGEX false */
+
+int
+main (int argc, char *argv[])
+{
+  g_print ("GRegex is disabled.\n");
+  return 0;
+}
+
+#endif /* ENABLE_REGEX */
diff --git a/tests/relation-test.c b/tests/relation-test.c
new file mode 100644
index 0000000..35f5a16
--- /dev/null
+++ b/tests/relation-test.c
@@ -0,0 +1,139 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdio.h>
+#include <string.h>
+#include "glib.h"
+
+int array[10000];
+gboolean failed = FALSE;
+
+#define	TEST(m,cond)	G_STMT_START { failed = !(cond); \
+if (failed) \
+  { if (!m) \
+      g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \
+    else \
+      g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \
+  } \
+else \
+  g_print ("."); fflush (stdout); \
+} G_STMT_END
+
+#define	C2P(c)		((gpointer) ((long) (c)))
+#define	P2C(p)		((gchar) ((long) (p)))
+
+#define GLIB_TEST_STRING "el dorado "
+#define GLIB_TEST_STRING_5 "el do"
+
+typedef struct {
+	guint age;
+	gchar name[40];
+} GlibTestInfo;
+
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  gint i;
+  GRelation *relation;
+  GTuples *tuples;
+  gint data [1024];
+
+
+  relation = g_relation_new (2);
+
+  g_relation_index (relation, 0, g_int_hash, g_int_equal);
+  g_relation_index (relation, 1, g_int_hash, g_int_equal);
+
+  for (i = 0; i < 1024; i += 1)
+    data[i] = i;
+
+  for (i = 1; i < 1023; i += 1)
+    {
+      g_relation_insert (relation, data + i, data + i + 1);
+      g_relation_insert (relation, data + i, data + i - 1);
+    }
+
+  for (i = 2; i < 1022; i += 1)
+    {
+      g_assert (! g_relation_exists (relation, data + i, data + i));
+      g_assert (! g_relation_exists (relation, data + i, data + i + 2));
+      g_assert (! g_relation_exists (relation, data + i, data + i - 2));
+    }
+
+  for (i = 1; i < 1023; i += 1)
+    {
+      g_assert (g_relation_exists (relation, data + i, data + i + 1));
+      g_assert (g_relation_exists (relation, data + i, data + i - 1));
+    }
+
+  for (i = 2; i < 1022; i += 1)
+    {
+      g_assert (g_relation_count (relation, data + i, 0) == 2);
+      g_assert (g_relation_count (relation, data + i, 1) == 2);
+    }
+
+  g_assert (g_relation_count (relation, data, 0) == 0);
+
+  g_assert (g_relation_count (relation, data + 42, 0) == 2);
+  g_assert (g_relation_count (relation, data + 43, 1) == 2);
+  g_assert (g_relation_count (relation, data + 41, 1) == 2);
+  g_relation_delete (relation, data + 42, 0);
+  g_assert (g_relation_count (relation, data + 42, 0) == 0);
+  g_assert (g_relation_count (relation, data + 43, 1) == 1);
+  g_assert (g_relation_count (relation, data + 41, 1) == 1);
+
+  tuples = g_relation_select (relation, data + 200, 0);
+
+  g_assert (tuples->len == 2);
+
+#if 0
+  for (i = 0; i < tuples->len; i += 1)
+    {
+      printf ("%d %d\n",
+	      *(gint*) g_tuples_index (tuples, i, 0),
+	      *(gint*) g_tuples_index (tuples, i, 1));
+    }
+#endif
+
+  g_assert (g_relation_exists (relation, data + 300, data + 301));
+  g_relation_delete (relation, data + 300, 0);
+  g_assert (!g_relation_exists (relation, data + 300, data + 301));
+
+  g_tuples_destroy (tuples);
+
+  g_relation_destroy (relation);
+
+  relation = NULL;
+
+  return 0;
+}
+
diff --git a/tests/run-bookmark-test.sh b/tests/run-bookmark-test.sh
new file mode 100755
index 0000000..3bed44d
--- /dev/null
+++ b/tests/run-bookmark-test.sh
@@ -0,0 +1,34 @@
+#! /bin/sh
+
+fail ()
+{
+  echo "Test failed: $*"
+  exit 1
+}
+
+echo_v ()
+{
+  if [ "$verbose" = "1" ]; then
+    echo "$*"
+  fi
+}
+
+error_out=/dev/null
+if [ "$1" = "-v" ]; then
+  verbose=1
+  error_out=/dev/stderr
+fi  
+for I in ${srcdir:-.}/bookmarks/fail-*.xbel; do
+  echo_v "Parsing $I, should fail"
+  ./bookmarkfile-test $I > /dev/null 2> $error_out && fail "failed to generate error on $I"
+  if test "$?" != "1"; then
+    fail "unexpected error on $I"
+  fi  
+done
+
+for I in ${srcdir:-.}/bookmarks/valid-*.xbel; do
+  echo_v "Parsing $I, should succeed"
+  ./bookmarkfile-test $I > /dev/null 2> $error_out || fail "failed on $I"
+done
+
+echo_v "All tests passed."
diff --git a/tests/run-collate-tests.sh b/tests/run-collate-tests.sh
new file mode 100755
index 0000000..24f3d69
--- /dev/null
+++ b/tests/run-collate-tests.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+
+fail ()
+{
+  echo "Test failed: $*"
+  exit 1
+}
+
+echo_v ()
+{
+  if [ "$verbose" = "1" ]; then
+    echo "$*"
+  fi
+}
+
+error_out=/dev/null
+if [ "$1" = "-v" ]; then
+  verbose=1
+  error_out=/dev/stderr
+fi  
+for I in ${srcdir:-.}/collate/*.in; do
+  echo_v "Sorting $I"
+  name=`basename $I .in`
+  ./unicode-collate $I > collate.out
+  if [ $? -eq 2 ]; then
+    exit 0
+  fi   
+  diff collate.out ${srcdir:-.}/collate/$name.unicode || 
+    fail "unexpected error when using g_utf8_collate() on $I"
+  ./unicode-collate --key $I > collate.out
+  diff collate.out ${srcdir:-.}/collate/$name.unicode ||
+    fail "unexpected error when using g_utf8_collate_key() on $I"
+  ./unicode-collate --file $I > collate.out
+  diff collate.out ${srcdir:-.}/collate/$name.file ||
+    fail "unexpected error when using g_utf8_collate_key_for_filename() on $I"
+done
+
+echo_v "All tests passed."
diff --git a/tests/run-markup-tests.sh b/tests/run-markup-tests.sh
new file mode 100755
index 0000000..38074cc
--- /dev/null
+++ b/tests/run-markup-tests.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+
+fail ()
+{
+  echo "Test failed: $*"
+  exit 1
+}
+
+echo_v ()
+{
+  if [ "$verbose" = "1" ]; then
+    echo "$*"
+  fi
+}
+
+error_out=/dev/null
+if [ "$1" = "-v" ]; then
+  verbose=1
+  error_out=/dev/stderr
+fi
+for I in ${srcdir:-.}/markups/fail-*.gmarkup; do
+  echo_v "Parsing $I, should fail"
+  ./markup-test $I > /dev/null 2> $error_out && fail "failed to generate error on $I"
+  if test "$?" != "1"; then
+    fail "unexpected error on $I"
+  fi  
+done
+
+I=1
+while test $I -lt 100 ; do
+  F=${srcdir:-.}/markups/valid-$I.gmarkup
+  if [ -f $F ] ; then
+    echo_v "Parsing $F, should succeed"
+    ./markup-test $F > actual 2> $error_out || fail "failed on $F"
+    diff ${srcdir:-.}/markups/expected-$I actual || fail "unexpected output on $F"
+    rm actual
+  fi
+  I=`expr $I + 1`
+done
+
+echo_v "All tests passed."
diff --git a/tests/scannerapi.c b/tests/scannerapi.c
new file mode 100644
index 0000000..d33fed9
--- /dev/null
+++ b/tests/scannerapi.c
@@ -0,0 +1,139 @@
+/* Gtk+ object tests
+ * Copyright (C) 2007 Patrick Hulin
+ * Copyright (C) 2007 Imendio AB
+ * Authors: Tim Janik
+ *
+ * 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 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.
+ */
+#include <glib.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/* GScanner fixture */
+typedef struct {
+  GScanner *scanner;
+} ScannerFixture;
+static void
+scanner_fixture_setup (ScannerFixture *fix,
+                       gconstpointer   test_data)
+{
+  fix->scanner = g_scanner_new (NULL);
+  g_assert (fix->scanner != NULL);
+}
+static void
+scanner_fixture_teardown (ScannerFixture *fix,
+                          gconstpointer   test_data)
+{
+  g_assert (fix->scanner != NULL);
+  g_scanner_destroy (fix->scanner);
+}
+
+static void
+scanner_msg_func (GScanner *scanner,
+                  gchar    *message,
+                  gboolean  error)
+{
+  g_assert_cmpstr (message, ==, "test");
+}
+
+static void
+test_scanner_warn (ScannerFixture *fix,
+                   gconstpointer   test_data)
+{
+  fix->scanner->msg_handler = scanner_msg_func;
+  g_scanner_warn (fix->scanner, "test");
+}
+
+static void
+test_scanner_error (ScannerFixture *fix,
+                    gconstpointer   test_data)
+{
+  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
+    {
+      int pe = fix->scanner->parse_errors;
+      g_scanner_error (fix->scanner, "scanner-error-message-test");
+      g_assert_cmpint (fix->scanner->parse_errors, ==, pe + 1);
+      exit (0);
+    }
+  g_test_trap_assert_passed();
+  g_test_trap_assert_stderr ("*scanner-error-message-test*");
+}
+
+static void
+check_keys (gpointer key,
+            gpointer value,
+            gpointer user_data)
+{
+  g_assert_cmpint (GPOINTER_TO_INT (value), ==, g_ascii_strtoull (key, NULL, 0));
+}
+
+static void
+test_scanner_symbols (ScannerFixture *fix,
+                      gconstpointer   test_data)
+{
+  gint i;
+  gchar buf[2];
+
+  g_scanner_set_scope (fix->scanner, 1);
+
+  for (i = 0; i < 10; i++)
+    g_scanner_scope_add_symbol (fix->scanner,
+                                1,
+                                g_ascii_dtostr (buf, 2, (gdouble)i),
+                                GINT_TO_POINTER (i));
+  g_scanner_scope_foreach_symbol (fix->scanner, 1, check_keys, NULL);
+  g_scanner_scope_remove_symbol (fix->scanner, 1, "5");
+  g_assert_cmpint (GPOINTER_TO_INT (g_scanner_scope_lookup_symbol (fix->scanner, 1, "4")), ==, 4);
+  g_assert_cmpint (GPOINTER_TO_INT (g_scanner_scope_lookup_symbol (fix->scanner, 1, "5")), ==, 0);
+}
+
+static void
+test_scanner_tokens (ScannerFixture *fix,
+                     gconstpointer   test_data)
+{
+  gchar buf[] = "(\t\n\r\\){}";
+  const gint buflen = strlen (buf);
+  gchar tokbuf[] = "(\\){}";
+  const gint tokbuflen = strlen (tokbuf);
+  guint i;
+
+  g_scanner_input_text (fix->scanner, buf, buflen);
+
+  g_assert_cmpint (g_scanner_cur_token (fix->scanner), ==, G_TOKEN_NONE);
+  g_scanner_get_next_token (fix->scanner);
+  g_assert_cmpint (g_scanner_cur_token (fix->scanner), ==, tokbuf[0]);
+  g_assert_cmpint (g_scanner_cur_line (fix->scanner), ==, 1);
+
+  for (i = 1; i < tokbuflen; i++)
+    g_assert_cmpint (g_scanner_get_next_token (fix->scanner), ==, tokbuf[i]);
+  g_assert_cmpint (g_scanner_get_next_token (fix->scanner), ==, G_TOKEN_EOF);
+  return;
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add ("/scanner/warn", ScannerFixture, 0, scanner_fixture_setup, test_scanner_warn, scanner_fixture_teardown);
+  g_test_add ("/scanner/error", ScannerFixture, 0, scanner_fixture_setup, test_scanner_error, scanner_fixture_teardown);
+  g_test_add ("/scanner/symbols", ScannerFixture, 0, scanner_fixture_setup, test_scanner_symbols, scanner_fixture_teardown);
+  g_test_add ("/scanner/tokens", ScannerFixture, 0, scanner_fixture_setup, test_scanner_tokens, scanner_fixture_teardown);
+
+  return g_test_run();
+}
diff --git a/tests/sequence-test.c b/tests/sequence-test.c
new file mode 100644
index 0000000..2a88c7d
--- /dev/null
+++ b/tests/sequence-test.c
@@ -0,0 +1,1301 @@
+#include <stdio.h>
+#include <glib.h>
+#include <stdlib.h>
+
+/* Keep this in sync with gsequence.c !!! */
+typedef struct _GSequenceNode GSequenceNode;
+
+struct _GSequence
+{
+  GSequenceNode *       end_node;
+  GDestroyNotify        data_destroy_notify;
+  gboolean              access_prohibited;
+  GSequence *           real_sequence;
+};
+
+struct _GSequenceNode
+{
+  gint                  n_nodes;
+  GSequenceNode *       parent;
+  GSequenceNode *       left;
+  GSequenceNode *       right;
+  gpointer              data;
+};
+
+static guint
+get_priority (GSequenceNode *node)
+{
+  guint key = GPOINTER_TO_UINT (node);
+
+  key = (key << 15) - key - 1;
+  key = key ^ (key >> 12);
+  key = key + (key << 2);
+  key = key ^ (key >> 4);
+  key = key + (key << 3) + (key << 11);
+  key = key ^ (key >> 16);
+
+  return key? key : 1;
+}
+      
+static void
+check_node (GSequenceNode *node)
+{
+  if (node)
+    {
+      g_assert (node->parent != node);
+      if (node->parent)
+        g_assert (node->parent->left == node || node->parent->right == node);
+      g_assert (node->n_nodes == 1 + (node->left ? node->left->n_nodes : 0) + (node->right ? node->right->n_nodes : 0));
+      if (node->left)
+          g_assert (get_priority (node) >= get_priority (node->left));
+      if (node->right)
+          g_assert (get_priority (node) >= get_priority (node->right));
+      check_node (node->left);
+      check_node (node->right);
+    }
+}
+
+void
+g_sequence_check (GSequence *seq)
+{
+  GSequenceNode *node = seq->end_node;
+
+  while (node->parent)
+    node = node->parent;
+
+  check_node (node);
+
+  while (node->right)
+    node = node->right;
+
+  g_assert (seq->end_node == node);
+  g_assert (node->data == seq);
+
+}
+
+         
+enum {
+  NEW, FREE, GET_LENGTH, FOREACH, FOREACH_RANGE, SORT, SORT_ITER,
+  
+  /* Getting iters */
+  GET_BEGIN_ITER, GET_END_ITER, GET_ITER_AT_POS, APPEND, PREPEND,
+  INSERT_BEFORE, MOVE, SWAP, INSERT_SORTED, INSERT_SORTED_ITER, SORT_CHANGED,
+  SORT_CHANGED_ITER, REMOVE, REMOVE_RANGE, MOVE_RANGE, SEARCH, SEARCH_ITER,
+  
+  /* dereferencing */
+  GET, SET,
+  
+  /* operations on GSequenceIter * */
+  ITER_IS_BEGIN, ITER_IS_END, ITER_NEXT, ITER_PREV, ITER_GET_POSITION,
+  ITER_MOVE, ITER_GET_SEQUENCE,
+  
+  /* search */
+  ITER_COMPARE, RANGE_GET_MIDPOINT,
+  N_OPS
+};
+
+typedef struct SequenceInfo
+{
+  GQueue *	queue;
+  GSequence *	sequence;
+  int		n_items;
+} SequenceInfo;
+
+typedef struct
+{
+  SequenceInfo *seq;
+  int		  number;
+} Item;
+
+void g_sequence_check (GSequence *sequence);
+
+static Item *
+fix_pointer (gconstpointer data)
+{
+  return (Item *)((char *)data - 1);
+}
+
+static Item *
+get_item (GSequenceIter *iter)
+{
+  return fix_pointer (g_sequence_get (iter));
+}
+
+static void
+check_integrity (SequenceInfo *info)
+{
+  GList *list;
+  GSequenceIter *iter;
+  int i;
+  
+  g_sequence_check (info->sequence);
+  
+  if (g_sequence_get_length (info->sequence) != info->n_items)
+    g_print ("%d %d\n",
+	     g_sequence_get_length (info->sequence), info->n_items);
+  g_assert (info->n_items == g_queue_get_length (info->queue));
+  g_assert (g_sequence_get_length (info->sequence) == info->n_items);
+
+  iter = g_sequence_get_begin_iter (info->sequence);
+  list = info->queue->head;
+  i = 0;
+  while (iter != g_sequence_get_end_iter (info->sequence))
+    {
+      Item *item;
+      g_assert (list->data == iter);
+      item = get_item (list->data);
+      g_assert (item->seq == info);
+      
+      iter = g_sequence_iter_next (iter);
+      list = list->next;
+      i++;
+    }
+  
+  g_assert (info->n_items == g_queue_get_length (info->queue));
+  g_assert (g_sequence_get_length (info->sequence) == info->n_items);
+}
+
+static gpointer
+new_item (SequenceInfo *seq)
+{
+  Item *item = g_new (Item, 1);
+  seq->n_items++;
+  item->seq = seq;
+  item->number = g_random_int ();
+  
+  /* There have been bugs in the past where the GSequence would
+   * dereference the user pointers. This will make sure such
+   * behavior causes crashes
+   */
+  return ((char *)item + 1);
+}
+
+static void
+free_item (gpointer data)
+{
+  Item *item = fix_pointer (data);
+  item->seq->n_items--;
+  g_free (item);
+}
+
+static void
+seq_foreach (gpointer data,
+	     gpointer user_data)
+{
+  Item *item = fix_pointer (data);
+  GList **link = user_data;
+  GSequenceIter *iter;
+  
+  g_assert (*link != NULL);
+  
+  iter = (*link)->data;
+  
+  g_assert (get_item (iter) == item);
+  
+  item->number = g_random_int();
+  
+  *link = (*link)->next;
+}
+
+static gint
+compare_items (gconstpointer a,
+	       gconstpointer b,
+	       gpointer	     data)
+{
+  const Item *item_a = fix_pointer (a);
+  const Item *item_b = fix_pointer (b);
+
+  if (item_a->number < item_b->number)
+    {
+      return -1;
+    }
+  else if (item_a->number == item_b->number)
+    {
+      /* Force an arbitrary order on the items
+       * We have to do this, since g_queue_insert_sorted() and
+       * g_sequence_insert_sorted() do not agree on the exact
+       * position the item is inserted if the new item is
+       * equal to an existing one.
+       */
+      if (item_a < item_b)
+	return -1;
+      else if (item_a == item_b)
+	return 0;
+      else
+	return 1;
+    }
+  else
+    {
+      return 1;
+    }
+}
+
+static void
+check_sorted (SequenceInfo *info)
+{
+  GList *list;
+  int last;
+  GSequenceIter *last_iter;
+  
+  check_integrity (info);
+  
+  last = G_MININT;
+  last_iter = NULL;
+  for (list = info->queue->head; list != NULL; list = list->next)
+    {
+      GSequenceIter *iter = list->data;
+      Item *item = get_item (iter);
+      
+      g_assert (item->number >= last);
+      /* Check that the ordering is the same as that of the queue,
+       * ie. that the sort is stable
+       */
+      if (last_iter)
+	g_assert (iter == g_sequence_iter_next (last_iter));
+      
+      last = item->number;
+      last_iter = iter;
+    }
+}
+
+static gint
+compare_iters (gconstpointer a,
+	       gconstpointer b,
+	       gpointer      data)
+{
+  GSequence *seq = data;
+  GSequenceIter *iter_a = (GSequenceIter *)a;
+  GSequenceIter *iter_b = (GSequenceIter *)b;
+  /* compare_items() will fix up the pointers */
+  Item *item_a = g_sequence_get (iter_a);
+  Item *item_b = g_sequence_get (iter_b);
+  
+  if (seq)
+    {
+      g_assert (g_sequence_iter_get_sequence (iter_a) == seq);
+      g_assert (g_sequence_iter_get_sequence (iter_b) == seq);
+    }
+  
+  return compare_items (item_a, item_b, data);
+}
+
+/* A version of g_queue_link_index() that treats NULL as just
+ * beyond the queue
+ */
+static int
+queue_link_index (SequenceInfo *seq, GList *link)
+{
+  if (link)
+    return g_queue_link_index (seq->queue, link);
+  else
+    return g_queue_get_length (seq->queue);
+}
+
+static void
+get_random_range (SequenceInfo *seq,
+		  GSequenceIter **begin_iter,
+		  GSequenceIter **end_iter,
+		  GList **begin_link,
+		  GList **end_link)
+{
+  int length = g_queue_get_length (seq->queue);
+  int b = g_random_int_range (0, length + 1);
+  int e = g_random_int_range (b, length + 1);
+  
+  g_assert (length == g_sequence_get_length (seq->sequence));
+  
+  if (begin_iter)
+    *begin_iter = g_sequence_get_iter_at_pos (seq->sequence, b);
+  if (end_iter)
+    *end_iter = g_sequence_get_iter_at_pos (seq->sequence, e);
+  if (begin_link)
+    *begin_link = g_queue_peek_nth_link (seq->queue, b);
+  if (end_link)
+    *end_link = g_queue_peek_nth_link (seq->queue, e);
+  if (begin_iter && begin_link)
+    {
+      g_assert (
+		queue_link_index (seq, *begin_link) ==
+		g_sequence_iter_get_position (*begin_iter));
+    }
+  if (end_iter && end_link)
+    {
+      g_assert (
+		queue_link_index (seq, *end_link) ==
+		g_sequence_iter_get_position (*end_iter));
+    }
+}
+
+static gint
+get_random_position (SequenceInfo *seq)
+{
+  int length = g_queue_get_length (seq->queue);
+  
+  g_assert (length == g_sequence_get_length (seq->sequence));
+  
+  return g_random_int_range (-2, length + 5);
+}
+
+static GSequenceIter *
+get_random_iter (SequenceInfo  *seq,
+		 GList        **link)
+{
+  GSequenceIter *iter;
+  int pos = get_random_position (seq);
+  if (link)
+    *link = g_queue_peek_nth_link (seq->queue, pos);
+  iter = g_sequence_get_iter_at_pos (seq->sequence, pos);
+  if (link)
+    g_assert (queue_link_index (seq, *link) == g_sequence_iter_get_position (iter));
+  return iter;
+}
+
+static void
+dump_info (SequenceInfo *seq)
+{
+#if 0
+  GSequenceIter *iter;
+  GList *list;
+  
+  iter = g_sequence_get_begin_iter (seq->sequence);
+  list = seq->queue->head;
+  
+  while (iter != g_sequence_get_end_iter (seq->sequence))
+    {
+      Item *item = get_item (iter);
+      g_print ("%p  %p    %d\n", list->data, iter, item->number);
+      
+      iter = g_sequence_iter_next (iter);
+      list = list->next;
+    }
+#endif
+}
+
+/* A version of g_queue_insert_before() that appends if link is NULL */
+static void
+queue_insert_before (SequenceInfo *seq, GList *link, gpointer data)
+{
+  if (link)
+    g_queue_insert_before (seq->queue, link, data);
+  else
+    g_queue_push_tail (seq->queue, data);
+}
+
+static void
+run_random_tests (guint32 seed)
+{
+#define N_ITERATIONS 60000
+#define N_SEQUENCES 8
+#define N_TIMES 24
+    
+  SequenceInfo sequences[N_SEQUENCES];
+  int k;
+  
+  g_print ("    seed: %u\n", seed);
+  
+  g_random_set_seed (seed);
+  
+  for (k = 0; k < N_SEQUENCES; ++k)
+    {
+      sequences[k].queue = g_queue_new ();
+      sequences[k].sequence = g_sequence_new (free_item);
+      sequences[k].n_items = 0;
+    }
+  
+#define RANDOM_SEQUENCE() &(sequences[g_random_int_range (0, N_SEQUENCES)])
+  
+  for (k = 0; k < N_ITERATIONS; ++k)
+    {
+      int i;
+      SequenceInfo *seq = RANDOM_SEQUENCE();
+      int op = g_random_int_range (0, N_OPS);
+
+#if 0
+      g_print ("%d on %p\n", op, seq);
+#endif
+      
+      switch (op)
+	{
+	case NEW:
+	case FREE:
+	  {
+	    g_queue_free (seq->queue);
+	    g_sequence_free (seq->sequence);
+	    
+	    g_assert (seq->n_items == 0);
+	    
+	    seq->queue = g_queue_new ();
+	    seq->sequence = g_sequence_new (free_item);
+	    
+	    check_integrity (seq);
+	  }
+	  break;
+	case GET_LENGTH:
+	  {
+	    int slen = g_sequence_get_length (seq->sequence);
+	    int qlen = g_queue_get_length (seq->queue);
+	    
+	    g_assert (slen == qlen);
+	  }
+	  break;
+	case FOREACH:
+	  {
+	    GList *link = seq->queue->head;
+	    g_sequence_foreach (seq->sequence, seq_foreach, &link);
+	    g_assert (link == NULL);
+	  }
+	  break;
+	case FOREACH_RANGE:
+	  {
+	    GSequenceIter *begin_iter, *end_iter;
+	    GList *begin_link, *end_link;
+	    
+	    get_random_range (seq, &begin_iter, &end_iter, &begin_link, &end_link);
+	    
+	    check_integrity (seq);
+	    
+	    g_sequence_foreach_range (begin_iter, end_iter, seq_foreach, &begin_link);
+	    
+	    g_assert (begin_link == end_link);
+	  }
+	  break;
+	case SORT:
+	  {
+	    dump_info (seq);
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    dump_info (seq);
+	  }
+	  break;
+	case SORT_ITER:
+	  {
+	    check_integrity (seq);
+	    g_sequence_sort_iter (seq->sequence,
+				  (GSequenceIterCompareFunc)compare_iters, seq->sequence);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    check_sorted (seq);
+	  }
+	  break;
+	  
+	  /* Getting iters */
+	case GET_END_ITER:
+	case GET_BEGIN_ITER:
+	  {
+	    GSequenceIter *begin_iter;
+	    GSequenceIter *end_iter;
+	    GSequenceIter *penultimate_iter;
+	    
+	    begin_iter = g_sequence_get_begin_iter (seq->sequence);
+	    check_integrity (seq);
+	    
+	    end_iter = g_sequence_get_end_iter (seq->sequence);
+	    check_integrity (seq);
+	    
+	    penultimate_iter = g_sequence_iter_prev (end_iter);
+	    check_integrity (seq);
+	    
+	    if (g_sequence_get_length (seq->sequence) > 0)
+	      {
+		g_assert (seq->queue->head);
+		g_assert (seq->queue->head->data == begin_iter);
+		g_assert (seq->queue->tail);
+		g_assert (seq->queue->tail->data == penultimate_iter);
+	      }
+	    else
+	      {
+		g_assert (penultimate_iter == end_iter);
+		g_assert (begin_iter == end_iter);
+		g_assert (penultimate_iter == begin_iter);
+		g_assert (seq->queue->head == NULL);
+		g_assert (seq->queue->tail == NULL);
+	      }
+	  }
+	  break;
+	case GET_ITER_AT_POS:
+	  {
+	    int i;
+	    
+	    g_assert (g_queue_get_length (seq->queue) == g_sequence_get_length (seq->sequence));
+	    
+	    for (i = 0; i < 10; ++i)
+	      {
+		int pos = get_random_position (seq);
+		GSequenceIter *iter = g_sequence_get_iter_at_pos (seq->sequence, pos);
+		GList *link = g_queue_peek_nth_link (seq->queue, pos);
+		check_integrity (seq);
+		if (pos >= g_sequence_get_length (seq->sequence) || pos < 0)
+		  {
+		    g_assert (iter == g_sequence_get_end_iter (seq->sequence));
+		    g_assert (link == NULL);
+		  }
+		else
+		  {
+		    g_assert (link);
+		    g_assert (link->data == iter);
+		  }
+	      }
+	  }
+	  break;
+	case APPEND:
+	  {
+	    for (i = 0; i < 10; ++i)
+	      {
+		GSequenceIter *iter = g_sequence_append (seq->sequence, new_item (seq));
+		g_queue_push_tail (seq->queue, iter);
+	      }
+	  }
+	  break;
+	case PREPEND:
+	  {
+	    for (i = 0; i < 10; ++i)
+	      {
+		GSequenceIter *iter = g_sequence_prepend (seq->sequence, new_item (seq));
+		g_queue_push_head (seq->queue, iter);
+	      }
+	  }
+	  break;
+	case INSERT_BEFORE:
+	  {
+	    for (i = 0; i < 10; ++i)
+	      {
+		GList *link;
+		GSequenceIter *iter = get_random_iter (seq, &link);
+		GSequenceIter *new_iter;
+		check_integrity (seq);
+		
+		new_iter = g_sequence_insert_before (iter, new_item (seq));
+		
+		queue_insert_before (seq, link, new_iter);
+	      }
+	  }
+	  break;
+ 	case MOVE:
+	  {
+	    GList *link1, *link2;
+	    SequenceInfo *seq1 = RANDOM_SEQUENCE();
+	    SequenceInfo *seq2 = RANDOM_SEQUENCE();
+	    GSequenceIter *iter1 = get_random_iter (seq1, &link1);
+	    GSequenceIter *iter2 = get_random_iter (seq2, &link2);
+	    
+	    if (!g_sequence_iter_is_end (iter1))
+	      {
+		g_sequence_move (iter1, iter2);
+		
+		if (!link2)
+		  g_assert (g_sequence_iter_is_end (iter2));
+		
+		queue_insert_before (seq2, link2, link1->data);
+		
+		g_queue_delete_link (seq1->queue, link1);
+
+		get_item (iter1)->seq = seq2;
+		
+		seq1->n_items--;
+		seq2->n_items++;
+	      }
+	    
+	    check_integrity (seq);
+	    
+	    iter1 = get_random_iter (seq, NULL);
+	    
+	    /* Moving an iter to itself should have no effect */
+	    if (!g_sequence_iter_is_end (iter1))
+	      g_sequence_move (iter1, iter1);
+	  }
+	  break;
+	case SWAP:
+	  {
+	    GList *link1, *link2;
+	    SequenceInfo *seq1 = RANDOM_SEQUENCE();
+	    SequenceInfo *seq2 = RANDOM_SEQUENCE();
+	    GSequenceIter *iter1 = get_random_iter (seq1, &link1);
+	    GSequenceIter *iter2 = get_random_iter (seq2, &link2);
+	    
+	    if (!g_sequence_iter_is_end (iter1) &&
+		!g_sequence_iter_is_end (iter2))
+	      {
+		gpointer tmp;
+
+		g_sequence_swap (iter1, iter2);
+
+		get_item (iter1)->seq = seq2;
+		get_item (iter2)->seq = seq1;
+		
+		tmp = link1->data;
+		link1->data = link2->data;
+		link2->data = tmp;
+	      }
+	  }
+	  break;
+	case INSERT_SORTED:
+	  {
+	    int i;
+	    dump_info (seq);
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    for (i = 0; i < N_TIMES; ++i)
+	      {
+		GSequenceIter *iter =
+		  g_sequence_insert_sorted (seq->sequence, new_item(seq), compare_items, NULL);
+		
+		g_queue_insert_sorted (seq->queue, iter, compare_iters, NULL);
+	      }
+	    
+	    check_sorted (seq);
+	    
+	    dump_info (seq);
+	  }
+	  break;
+	case INSERT_SORTED_ITER:
+	  {
+	    int i;
+	    dump_info (seq);
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    for (i = 0; i < N_TIMES; ++i)
+	      {
+		GSequenceIter *iter;
+
+		iter = g_sequence_insert_sorted_iter (seq->sequence,
+						      new_item (seq),
+						      (GSequenceIterCompareFunc)compare_iters,
+						      seq->sequence);
+		
+		g_queue_insert_sorted (seq->queue, iter, compare_iters, NULL);
+	      }
+	    
+	    check_sorted (seq);
+	    
+	    dump_info (seq);
+	  }
+	  break;
+	case SORT_CHANGED:
+	  {
+	    int i;
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    for (i = 0; i < N_TIMES; ++i)
+	      {
+		GList *link;
+		GSequenceIter *iter = get_random_iter (seq, &link);
+		
+		if (!g_sequence_iter_is_end (iter))
+		  {
+		    g_sequence_set (iter, new_item (seq));
+		    g_sequence_sort_changed (iter, compare_items, NULL);
+		    
+		    g_queue_delete_link (seq->queue, link);
+		    g_queue_insert_sorted (seq->queue, iter, compare_iters, NULL);
+		  }
+		
+		check_sorted (seq);
+	      }
+	  }
+	  break;
+	case SORT_CHANGED_ITER:
+	  {
+	    int i;
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    for (i = 0; i < N_TIMES; ++i)
+	      {
+		GList *link;
+		GSequenceIter *iter = get_random_iter (seq, &link);
+		
+		if (!g_sequence_iter_is_end (iter))
+		  {
+		    g_sequence_set (iter, new_item (seq));
+		    g_sequence_sort_changed_iter (iter,
+						  (GSequenceIterCompareFunc)compare_iters, seq->sequence);
+		    
+		    g_queue_delete_link (seq->queue, link);
+		    g_queue_insert_sorted (seq->queue, iter, compare_iters, NULL);
+		  }
+		
+		check_sorted (seq);
+	      }
+	  }
+	  break;
+	case REMOVE:
+	  {
+	    int i;
+	    
+	    for (i = 0; i < N_TIMES; ++i)
+	      {
+		GList *link;
+		GSequenceIter *iter = get_random_iter (seq, &link);
+		
+		if (!g_sequence_iter_is_end (iter))
+		  {
+		    g_sequence_remove (iter);
+		    g_queue_delete_link (seq->queue, link);
+		  }
+	      }
+	  }
+	  break;
+	case REMOVE_RANGE:
+	  {
+	    GSequenceIter *begin_iter, *end_iter;
+	    GList *begin_link, *end_link;
+	    GList *list;
+	    
+	    get_random_range (seq, &begin_iter, &end_iter, &begin_link, &end_link);
+	    
+	    g_sequence_remove_range (begin_iter, end_iter);
+	    
+	    list = begin_link;
+	    while (list != end_link)
+	      {
+		GList *next = list->next;
+		
+		g_queue_delete_link (seq->queue, list);
+		
+		list = next;
+	      }
+	  }
+	  break;
+	case MOVE_RANGE:
+	  {
+	    SequenceInfo *src = RANDOM_SEQUENCE();
+	    SequenceInfo *dst = RANDOM_SEQUENCE();
+	    
+	    GSequenceIter *begin_iter, *end_iter;
+	    GList *begin_link, *end_link;
+	    
+	    GSequenceIter *dst_iter;
+	    GList *dst_link;
+	    
+	    GList *list;
+	    
+	    g_assert (src->queue);
+	    g_assert (dst->queue);
+	    
+	    get_random_range (src, &begin_iter, &end_iter, &begin_link, &end_link);
+	    dst_iter = get_random_iter (dst, &dst_link);
+	    
+	    g_sequence_move_range (dst_iter, begin_iter, end_iter);
+	    
+	    if (dst_link == begin_link || (src == dst && dst_link == end_link))
+	      {
+		check_integrity (src);
+		check_integrity (dst);
+		break;
+	      }
+	    
+	    if (queue_link_index (src, begin_link) >=
+		queue_link_index (src, end_link))
+	      {
+		break;
+	      }
+	    
+	    if (src == dst &&
+		queue_link_index (src, dst_link) >= queue_link_index (src, begin_link) &&
+		queue_link_index (src, dst_link) <= queue_link_index (src, end_link))
+	      {
+		break;
+	      }
+	    
+	    list = begin_link;
+	    while (list != end_link)
+	      {
+		GList *next = list->next;
+		Item *item = get_item (list->data);
+		
+		g_assert (dst->queue);
+		queue_insert_before (dst, dst_link, list->data);
+		g_queue_delete_link (src->queue, list);
+		
+		g_assert (item->seq == src);
+		
+		src->n_items--;
+		dst->n_items++;
+		item->seq = dst;
+		
+		list = next;
+	      }
+	  }
+	  break;
+	case SEARCH:
+	  {
+	    Item *item;
+	    GSequenceIter *search_iter;
+	    GSequenceIter *insert_iter;
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    item = new_item (seq);
+	    search_iter = g_sequence_search (seq->sequence, item, compare_items, NULL);
+	    
+	    insert_iter = g_sequence_insert_sorted (seq->sequence, item, compare_items, NULL);
+	    
+	    g_assert (search_iter == g_sequence_iter_next (insert_iter));
+	    
+	    g_queue_insert_sorted (seq->queue, insert_iter, compare_iters, NULL);
+	  }
+	  break;
+	case SEARCH_ITER:
+	  {
+	    Item *item;
+	    GSequenceIter *search_iter;
+	    GSequenceIter *insert_iter;
+	    
+	    g_sequence_sort (seq->sequence, compare_items, NULL);
+	    g_queue_sort (seq->queue, compare_iters, NULL);
+	    
+	    check_sorted (seq);
+	    
+	    item = new_item (seq);
+	    search_iter = g_sequence_search_iter (seq->sequence,
+						  item,
+						  (GSequenceIterCompareFunc)compare_iters, seq->sequence);
+	    
+	    insert_iter = g_sequence_insert_sorted (seq->sequence, item, compare_items, NULL);
+	    
+	    g_assert (search_iter == g_sequence_iter_next (insert_iter));
+	    
+	    g_queue_insert_sorted (seq->queue, insert_iter, compare_iters, NULL);
+	  }
+	  break;
+	  
+	  /* dereferencing */
+	case GET:
+	case SET:
+	  {
+	    GSequenceIter *iter;
+	    GList *link;
+	    
+	    iter = get_random_iter (seq, &link);
+	    
+	    if (!g_sequence_iter_is_end (iter))
+	      {
+		Item *item;
+		int i;
+		
+		check_integrity (seq);
+		
+		/* Test basic functionality */
+		item = new_item (seq);
+		g_sequence_set (iter, item);
+		g_assert (g_sequence_get (iter) == item);
+		
+		/* Make sure that existing items are freed */
+		for (i = 0; i < N_TIMES; ++i)
+		  g_sequence_set (iter, new_item (seq));
+		
+		check_integrity (seq);
+		
+		g_sequence_set (iter, new_item (seq));
+	      }
+	  }
+	  break;
+	  
+	  /* operations on GSequenceIter * */
+	case ITER_IS_BEGIN:
+	  {
+	    GSequenceIter *iter;
+	    
+	    iter = g_sequence_get_iter_at_pos (seq->sequence, 0);
+	    
+	    g_assert (g_sequence_iter_is_begin (iter));
+	    
+	    check_integrity (seq);
+	    
+	    if (g_sequence_get_length (seq->sequence) > 0)
+	      {
+		g_assert (!g_sequence_iter_is_begin (g_sequence_get_end_iter (seq->sequence)));
+	      }
+	    else
+	      {
+		g_assert (g_sequence_iter_is_begin (g_sequence_get_end_iter (seq->sequence)));
+	      }
+	    
+	    g_assert (g_sequence_iter_is_begin (g_sequence_get_begin_iter (seq->sequence)));
+	  }
+	  break;
+	case ITER_IS_END:
+	  {
+	    GSequenceIter *iter;
+	    int len = g_sequence_get_length (seq->sequence);
+	    
+	    iter = g_sequence_get_iter_at_pos (seq->sequence, len);
+	    
+	    g_assert (g_sequence_iter_is_end (iter));
+	    
+	    if (len > 0)
+	      {
+		g_assert (!g_sequence_iter_is_end (g_sequence_get_begin_iter (seq->sequence)));
+	      }
+	    else
+	      {
+		g_assert (g_sequence_iter_is_end (g_sequence_get_begin_iter (seq->sequence)));
+	      }
+	    
+	    g_assert (g_sequence_iter_is_end (g_sequence_get_end_iter (seq->sequence)));
+	  }
+	  break;
+	case ITER_NEXT:
+	  {
+	    GSequenceIter *iter1, *iter2, *iter3, *end;
+	    
+	    iter1 = g_sequence_append (seq->sequence, new_item (seq));
+	    iter2 = g_sequence_append (seq->sequence, new_item (seq));
+	    iter3 = g_sequence_append (seq->sequence, new_item (seq));
+	    
+	    end = g_sequence_get_end_iter (seq->sequence);
+	    
+	    g_assert (g_sequence_iter_next (iter1) == iter2);
+	    g_assert (g_sequence_iter_next (iter2) == iter3);
+	    g_assert (g_sequence_iter_next (iter3) == end);
+	    g_assert (g_sequence_iter_next (end) == end);
+	    
+	    g_queue_push_tail (seq->queue, iter1);
+	    g_queue_push_tail (seq->queue, iter2);
+	    g_queue_push_tail (seq->queue, iter3);
+	  }
+	  break;
+	case ITER_PREV:
+	  {
+	    GSequenceIter *iter1, *iter2, *iter3, *begin;
+	    
+	    iter1 = g_sequence_prepend (seq->sequence, new_item (seq));
+	    iter2 = g_sequence_prepend (seq->sequence, new_item (seq));
+	    iter3 = g_sequence_prepend (seq->sequence, new_item (seq));
+	    
+	    begin = g_sequence_get_begin_iter (seq->sequence);
+	    
+	    g_assert (g_sequence_iter_prev (iter1) == iter2);
+	    g_assert (g_sequence_iter_prev (iter2) == iter3);
+	    g_assert (iter3 == begin);
+	    g_assert (g_sequence_iter_prev (iter3) == begin);
+	    g_assert (g_sequence_iter_prev (begin) == begin);
+	    
+	    g_queue_push_head (seq->queue, iter1);
+	    g_queue_push_head (seq->queue, iter2);
+	    g_queue_push_head (seq->queue, iter3);
+	  }
+	  break;
+	case ITER_GET_POSITION:
+	  {
+	    GList *link;
+	    GSequenceIter *iter = get_random_iter (seq, &link);
+	    
+	    g_assert (g_sequence_iter_get_position (iter) ==
+		      queue_link_index (seq, link));
+	  }
+	  break;
+	case ITER_MOVE:
+	  {
+	    int len = g_sequence_get_length (seq->sequence);
+	    GSequenceIter *iter;
+	    int pos;
+	    
+	    iter = get_random_iter (seq, NULL);
+	    pos = g_sequence_iter_get_position (iter);
+	    iter = g_sequence_iter_move (iter, len - pos);
+	    g_assert (g_sequence_iter_is_end (iter));
+	    
+	    
+	    iter = get_random_iter (seq, NULL);
+	    pos = g_sequence_iter_get_position (iter);
+	    while (pos < len)
+	      {
+		g_assert (!g_sequence_iter_is_end (iter));
+		pos++;
+		iter = g_sequence_iter_move (iter, 1);
+	      }
+	    g_assert (g_sequence_iter_is_end (iter));
+	  }
+	  break;
+	case ITER_GET_SEQUENCE:
+	  {
+	    GSequenceIter *iter = get_random_iter (seq, NULL);
+	    
+	    g_assert (g_sequence_iter_get_sequence (iter) == seq->sequence);
+	  }
+	  break;
+	  
+	  /* search */
+	case ITER_COMPARE:
+	  {
+	    GList *link1, *link2;
+	    GSequenceIter *iter1 = get_random_iter (seq, &link1);
+	    GSequenceIter *iter2 = get_random_iter (seq, &link2);
+	    
+	    int cmp = g_sequence_iter_compare (iter1, iter2);
+	    int pos1 = queue_link_index (seq, link1);
+	    int pos2 = queue_link_index (seq, link2);
+	    
+	    if (cmp == 0)
+	      {
+		g_assert (pos1 == pos2);
+	      }
+	    else if (cmp < 0)
+	      {
+		g_assert (pos1 < pos2);
+	      }
+	    else
+	      {
+		g_assert (pos1 > pos2);
+	      }
+	  }
+	  break;
+	case RANGE_GET_MIDPOINT:
+	  {
+	    GSequenceIter *iter1 = get_random_iter (seq, NULL);
+	    GSequenceIter *iter2 = get_random_iter (seq, NULL);
+	    GSequenceIter *iter3;
+	    int cmp;
+	    
+	    cmp = g_sequence_iter_compare (iter1, iter2);
+	    
+	    if (cmp > 0)
+	      {
+		GSequenceIter *tmp;
+		
+		tmp = iter1;
+		iter1 = iter2;
+		iter2 = tmp;
+	      }
+	    
+	    iter3 = g_sequence_range_get_midpoint (iter1, iter2);
+	    
+	    if (cmp == 0)
+	      {
+		g_assert (iter3 == iter1);
+		g_assert (iter3 == iter2);
+	      }
+	    
+	    g_assert (g_sequence_iter_get_position (iter3) >= 
+		      g_sequence_iter_get_position (iter1));
+	    g_assert (g_sequence_iter_get_position (iter2) >= 
+		      g_sequence_iter_get_position (iter3));
+	  }
+	  break;
+	  
+	}
+      
+      check_integrity (seq);
+    }
+}
+
+/* Random seeds known to have failed at one point
+ */
+static gulong seeds[] =
+  {
+    825541564u,
+    801678400u,
+    1477639090u,
+    3369132895u,
+    1192944867u,
+    770458294u,
+    1099575817u,
+    590523467u,
+    3583571454u,
+    579241222u
+  };
+
+static void standalone_tests (void);
+
+static guint32
+get_seed (int argc, char **argv)
+{
+  if (argc > 1)
+    {
+      char *endptr;
+      
+      return strtol (argv[1], &endptr, 0);
+    }
+  else
+    {
+      return g_random_int();
+    }
+}
+
+int
+main (int argc,
+      char **argv)
+{
+  guint32 seed = get_seed (argc, argv);
+  int i;
+  
+  /* Run stand alone tests */
+  g_print ("running standalone tests\n");
+  standalone_tests();
+  
+  g_print ("running regression tests:\n");
+  /* Run regression tests */
+  for (i = 0; i < G_N_ELEMENTS (seeds); ++i)
+    {
+      run_random_tests (seeds[i]);
+    }
+  
+  /* Run with a new random seed */
+  g_print ("random seed:\n");
+  run_random_tests (seed);
+  
+  
+  return 0;
+}
+
+
+/* Single, stand-alone tests */
+
+static void
+test_out_of_range_jump (void)
+{
+  GSequence *seq = g_sequence_new (NULL);
+  GSequenceIter *iter = g_sequence_get_begin_iter (seq);
+  
+  g_sequence_iter_move (iter, 5);
+  
+  g_assert (g_sequence_iter_is_begin (iter));
+  g_assert (g_sequence_iter_is_end (iter));
+}
+
+static int
+compare (gconstpointer a, gconstpointer b, gpointer userdata)
+{
+  int ai, bi;
+  
+  ai = GPOINTER_TO_INT (a);
+  bi = GPOINTER_TO_INT (b);
+  
+  if (ai < bi)
+    return -1;
+  else if (ai > bi)
+    return 1;
+  else
+    return 0;
+}
+
+static int
+compare_iter (GSequenceIter *a,
+	      GSequenceIter *b,
+	      gpointer data)
+{
+  return compare (g_sequence_get (a),
+		  g_sequence_get (b),
+		  data);
+}
+
+static void
+test_insert_sorted_non_pointer (void)
+{
+  int i;
+  
+  for (i = 0; i < 10; i++)
+    {
+      GSequence *seq = g_sequence_new (NULL);
+      int j;
+      
+      for (j = 0; j < 10000; j++)
+	{
+	  g_sequence_insert_sorted (seq, GINT_TO_POINTER (g_random_int()),
+				    compare, NULL);
+	  
+	  g_sequence_insert_sorted_iter (seq, GINT_TO_POINTER (g_random_int()),
+					 compare_iter, NULL);
+	}
+
+      g_sequence_check (seq);
+      
+      g_sequence_free (seq);
+    }
+}
+
+static void
+test_stable_sort (void)
+{
+  int i;
+  GSequence *seq = g_sequence_new (NULL);
+  
+#define N_ITEMS 1000
+  
+  GSequenceIter *iters[N_ITEMS];
+  GSequenceIter *iter;
+  
+  for (i = 0; i < N_ITEMS; ++i)
+    {
+      iters[i] = g_sequence_append (seq, GINT_TO_POINTER (3000)); 
+      g_sequence_check (seq);
+      g_assert (g_sequence_iter_get_sequence (iters[i]) == seq);
+   }
+
+  i = 0;
+  iter = g_sequence_get_begin_iter (seq);
+  g_assert (g_sequence_iter_get_sequence (iter) == seq);
+  g_sequence_check (seq);
+  while (!g_sequence_iter_is_end (iter))
+    {
+      g_assert (g_sequence_iter_get_sequence (iters[i]) == seq);
+      g_assert (iters[i++] == iter);
+      
+      iter = g_sequence_iter_next (iter);
+      g_sequence_check (seq);
+    }
+  
+  g_sequence_sort (seq, compare, NULL);
+  
+  i = 0;
+  iter = g_sequence_get_begin_iter (seq);
+  while (!g_sequence_iter_is_end (iter))
+    {
+      g_assert (g_sequence_iter_get_sequence (iters[i]) == seq);
+      g_assert (iters[i] == iter);
+      
+      iter = g_sequence_iter_next (iter);
+      g_sequence_check (seq);
+
+      i++;
+    }
+  
+  for (i = N_ITEMS - 1; i >= 0; --i)
+    {
+      g_sequence_check (seq);
+      g_assert (g_sequence_iter_get_sequence (iters[i]) == seq);
+      g_assert (g_sequence_get_end_iter (seq) != iters[i]);
+      g_sequence_sort_changed (iters[i], compare, NULL);
+    }
+  
+  i = 0;
+  iter = g_sequence_get_begin_iter (seq);
+  while (!g_sequence_iter_is_end (iter))
+    {
+      g_assert (iters[i++] == iter);
+      
+      iter = g_sequence_iter_next (iter);
+      g_sequence_check (seq);
+    }
+}
+
+static void
+standalone_tests (void)
+{
+  test_out_of_range_jump ();
+  test_insert_sorted_non_pointer ();
+  test_stable_sort ();
+}
+
diff --git a/tests/shell-test.c b/tests/shell-test.c
new file mode 100644
index 0000000..437f20e
--- /dev/null
+++ b/tests/shell-test.c
@@ -0,0 +1,297 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+typedef struct _TestResult TestResult;
+
+struct _TestResult
+{
+  gint argc;
+  const gchar **argv;
+};
+
+static const gchar *
+test_command_lines[] =
+{
+  /*  0 */ "foo bar",
+  /*  1 */ "foo 'bar'",
+  /*  2 */ "foo \"bar\"",
+  /*  3 */ "foo '' 'bar'",
+  /*  4 */ "foo \"bar\"'baz'blah'foo'\\''blah'\"boo\"",
+  /*  5 */ "foo \t \tblah\tfoo\t\tbar  baz",
+  /*  6 */ "foo '    spaces more spaces lots of     spaces in this   '  \t",
+  /*  7 */ "foo \\\nbar",
+  /*  8 */ "foo '' ''",
+  /*  9 */ "foo \\\" la la la",
+  /* 10 */ "foo \\ foo woo woo\\ ",
+  /* 11 */ "foo \"yada yada \\$\\\"\"",
+  /* 12 */ "foo \"c:\\\\\"",
+  NULL
+};
+
+static const gchar *result0[] = { "foo", "bar", NULL };
+static const gchar *result1[] = { "foo", "bar", NULL };
+static const gchar *result2[] = { "foo", "bar", NULL };
+static const gchar *result3[] = { "foo", "", "bar", NULL };
+static const gchar *result4[] = { "foo", "barbazblahfoo'blahboo", NULL };
+static const gchar *result5[] = { "foo", "blah", "foo", "bar", "baz", NULL };
+static const gchar *result6[] = { "foo", "    spaces more spaces lots of     spaces in this   ", NULL };
+static const gchar *result7[] = { "foo", "bar", NULL };
+static const gchar *result8[] = { "foo", "", "", NULL };
+static const gchar *result9[] = { "foo", "\"", "la", "la", "la", NULL };
+static const gchar *result10[] = { "foo", " foo", "woo", "woo ", NULL };
+static const gchar *result11[] = { "foo", "yada yada $\"", NULL };
+static const gchar *result12[] = { "foo", "c:\\", NULL };
+
+static const TestResult
+correct_results[] =
+{
+  { G_N_ELEMENTS (result0) - 1, result0 },
+  { G_N_ELEMENTS (result1) - 1, result1 },
+  { G_N_ELEMENTS (result2) - 1, result2 },
+  { G_N_ELEMENTS (result3) - 1, result3 },
+  { G_N_ELEMENTS (result4) - 1, result4 },
+  { G_N_ELEMENTS (result5) - 1, result5 },
+  { G_N_ELEMENTS (result6) - 1, result6 },
+  { G_N_ELEMENTS (result7) - 1, result7 },
+  { G_N_ELEMENTS (result8) - 1, result8 },
+  { G_N_ELEMENTS (result9) - 1, result9 },
+  { G_N_ELEMENTS (result10) - 1, result10 },
+  { G_N_ELEMENTS (result11) - 1, result11 },
+  { G_N_ELEMENTS (result12) - 1, result12 }
+};
+
+static void
+print_test (const gchar *cmdline, gint argc, gchar **argv,
+            const TestResult *result)
+{
+  gint i;
+  
+  fprintf (stderr, "Command line was: '%s'\n", cmdline);
+
+  fprintf (stderr, "Expected result (%d args):\n", result->argc);
+  
+  i = 0;
+  while (result->argv[i])
+    {
+      fprintf (stderr, " %3d '%s'\n", i, result->argv[i]);
+      ++i;
+    }  
+
+  fprintf (stderr, "Actual result (%d args):\n", argc);
+  
+  i = 0;
+  while (argv[i])
+    {
+      fprintf (stderr, " %3d '%s'\n", i, argv[i]);
+      ++i;
+    }
+}
+
+static void
+do_argv_test (const gchar *cmdline, const TestResult *result)
+{
+  gint argc;
+  gchar **argv;
+  GError *err;
+  gint i;
+
+  err = NULL;
+  if (!g_shell_parse_argv (cmdline, &argc, &argv, &err))
+    {
+      fprintf (stderr, "Error parsing command line that should work fine: %s\n",
+               err->message);
+      
+      exit (1);
+    }
+  
+  if (argc != result->argc)
+    {
+      fprintf (stderr, "Expected and actual argc don't match\n");
+      print_test (cmdline, argc, argv, result);
+      exit (1);
+    }
+
+  i = 0;
+  while (argv[i])
+    {
+      if (strcmp (argv[i], result->argv[i]) != 0)
+        {
+          fprintf (stderr, "Expected and actual arg %d do not match\n", i);
+          print_test (cmdline, argc, argv, result);
+          exit (1);
+        }
+      
+      ++i;
+    }
+
+  if (argv[i] != NULL)
+    {
+      fprintf (stderr, "argv didn't get NULL-terminated\n");
+      exit (1);
+    }
+  g_strfreev (argv);
+}
+
+static void
+run_tests (void)
+{
+  gint i;
+  
+  i = 0;
+  while (test_command_lines[i])
+    {
+      do_argv_test (test_command_lines[i], &correct_results[i]);
+      ++i;
+    }
+}
+
+static gboolean any_test_failed = FALSE;
+
+#define CHECK_STRING_RESULT(expression, expected_value) \
+ check_string_result (#expression, __FILE__, __LINE__, expression, expected_value)
+
+static void
+check_string_result (const char *expression,
+		     const char *file_name,
+		     int line_number,
+		     char *result,
+		     const char *expected)
+{
+  gboolean match;
+  
+  if (expected == NULL)
+    match = result == NULL;
+  else
+    match = result != NULL && strcmp (result, expected) == 0;
+  
+  if (!match)
+    {
+      if (!any_test_failed)
+	fprintf (stderr, "\n");
+      
+      fprintf (stderr, "FAIL: check failed in %s, line %d\n", file_name, line_number);
+      fprintf (stderr, "      evaluated: %s\n", expression);
+      fprintf (stderr, "       expected: %s\n", expected == NULL ? "NULL" : expected);
+      fprintf (stderr, "            got: %s\n", result == NULL ? "NULL" : result);
+      
+      any_test_failed = TRUE;
+    }
+  
+  g_free (result);
+}
+
+static char *
+test_shell_unquote (const char *str)
+{
+  char *result;
+  GError *error;
+
+  error = NULL;
+  result = g_shell_unquote (str, &error);
+  if (error == NULL)
+    return result;
+
+  /* Leaks the error, which is no big deal and easy to fix if we
+   * decide it matters.
+   */
+
+  if (error->domain != G_SHELL_ERROR)
+    return g_strdup ("error in domain other than G_SHELL_ERROR");
+
+  /* It would be nice to check the error message too, but that's
+   * localized, so it's too much of a pain.
+   */
+  switch (error->code)
+    {
+    case G_SHELL_ERROR_BAD_QUOTING:
+      return g_strdup ("G_SHELL_ERROR_BAD_QUOTING");
+    case G_SHELL_ERROR_EMPTY_STRING:
+      return g_strdup ("G_SHELL_ERROR_EMPTY_STRING");
+    case G_SHELL_ERROR_FAILED:
+      return g_strdup ("G_SHELL_ERROR_FAILED");
+    default:
+      return g_strdup ("bad error code in G_SHELL_ERROR domain");
+    }
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  run_tests ();
+  
+  CHECK_STRING_RESULT (g_shell_quote (""), "''");
+  CHECK_STRING_RESULT (g_shell_quote ("a"), "'a'");
+  CHECK_STRING_RESULT (g_shell_quote ("("), "'('");
+  CHECK_STRING_RESULT (g_shell_quote ("'"), "''\\'''");
+  CHECK_STRING_RESULT (g_shell_quote ("'a"), "''\\''a'");
+  CHECK_STRING_RESULT (g_shell_quote ("a'"), "'a'\\'''");
+  CHECK_STRING_RESULT (g_shell_quote ("a'a"), "'a'\\''a'");
+  
+  CHECK_STRING_RESULT (test_shell_unquote (""), "");
+  CHECK_STRING_RESULT (test_shell_unquote ("a"), "a");
+  CHECK_STRING_RESULT (test_shell_unquote ("'a'"), "a");
+  CHECK_STRING_RESULT (test_shell_unquote ("'('"), "(");
+  CHECK_STRING_RESULT (test_shell_unquote ("''\\'''"), "'");
+  CHECK_STRING_RESULT (test_shell_unquote ("''\\''a'"), "'a");
+  CHECK_STRING_RESULT (test_shell_unquote ("'a'\\'''"), "a'");
+  CHECK_STRING_RESULT (test_shell_unquote ("'a'\\''a'"), "a'a");
+
+  CHECK_STRING_RESULT (test_shell_unquote ("\\\\"), "\\");
+  CHECK_STRING_RESULT (test_shell_unquote ("\\\n"), "");
+
+  CHECK_STRING_RESULT (test_shell_unquote ("'\\''"), "G_SHELL_ERROR_BAD_QUOTING");
+
+#if defined (_MSC_VER) && (_MSC_VER <= 1200)
+  /* using \x22 instead of \" to work around a msvc 5.0, 6.0 compiler bug */
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\\x22\""), "\"");
+#else
+  CHECK_STRING_RESULT (test_shell_unquote ("\"\\\"\""), "\"");
+#endif
+
+  CHECK_STRING_RESULT (test_shell_unquote ("\""), "G_SHELL_ERROR_BAD_QUOTING");
+  CHECK_STRING_RESULT (test_shell_unquote ("'"), "G_SHELL_ERROR_BAD_QUOTING");
+
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\\\\""), "\\");
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\`\""), "`");
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\$\""), "$");
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\\n\""), "\n");
+
+  CHECK_STRING_RESULT (test_shell_unquote ("\"\\'\""), "\\'");
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\\r\""), "\\\r");
+  CHECK_STRING_RESULT (test_shell_unquote ("\x22\\n\""), "\\n");
+
+  return any_test_failed ? 1 : 0;
+}
diff --git a/tests/slice-color.c b/tests/slice-color.c
new file mode 100644
index 0000000..c4a417d
--- /dev/null
+++ b/tests/slice-color.c
@@ -0,0 +1,178 @@
+/* GLIB sliced memory - fast threaded memory chunk allocator
+ * Copyright (C) 2005 Tim Janik
+ *
+ * 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 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.
+ */
+#include <glib.h>
+#include <string.h>
+
+#define ALIGN(size, base)       ((base) * (gsize) (((size) + (base) - 1) / (base)))
+
+static gdouble parse_memsize (const gchar *cstring);
+static void    usage         (void);
+
+static void
+fill_memory (guint **mem,
+             guint   n,
+             guint   val)
+{
+  guint j, o = 0;
+  for (j = 0; j < n; j++)
+    mem[j][o] = val;
+}
+
+static guint64
+access_memory3 (guint  **mema,
+                guint  **memb,
+                guint  **memd,
+                guint    n,
+                guint64  repeats)
+{
+  guint64 accu = 0, i, j;
+  const guint o = 0;
+  for (i = 0; i < repeats; i++)
+    {
+      for (j = 1; j < n; j += 2)
+        memd[j][o] = mema[j][o] + memb[j][o];
+    }
+  for (i = 0; i < repeats; i++)
+    for (j = 0; j < n; j++)
+      accu += memd[j][o];
+  return accu;
+}
+
+static void
+touch_mem (guint64 block_size,
+           guint64 n_blocks,
+           guint64 repeats)
+{
+  guint64 j, accu, n = n_blocks;
+  GTimer *timer;
+  guint **memc;
+  guint **memb;
+  guint **mema = g_new (guint*, n);
+  for (j = 0; j < n; j++)
+    mema[j] = g_slice_alloc (block_size);
+  memb = g_new (guint*, n);
+  for (j = 0; j < n; j++)
+    memb[j] = g_slice_alloc (block_size);
+  memc = g_new (guint*, n);
+  for (j = 0; j < n; j++)
+    memc[j] = g_slice_alloc (block_size);
+
+  timer = g_timer_new();
+  fill_memory (mema, n, 2);
+  fill_memory (memb, n, 3);
+  fill_memory (memc, n, 4);
+  access_memory3 (mema, memb, memc, n, 3);
+  g_timer_start (timer);
+  accu = access_memory3 (mema, memb, memc, n, repeats);
+  g_timer_stop (timer);
+
+  g_print ("Access-time = %fs\n", g_timer_elapsed (timer, NULL));
+  g_assert (accu / repeats == (2 + 3) * n / 2 + 4 * n / 2);
+
+  for (j = 0; j < n; j++)
+    {
+      g_slice_free1 (block_size, mema[j]);
+      g_slice_free1 (block_size, memb[j]);
+      g_slice_free1 (block_size, memc[j]);
+    }
+  g_timer_destroy (timer);
+  g_free (mema);
+  g_free (memb);
+  g_free (memc);
+}
+
+static void
+usage (void)
+{
+  g_print ("Usage: slice-color <block-size> [memory-size] [repeats] [colorization]\n");
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  guint64 block_size = 512, area_size = 1024 * 1024, n_blocks, repeats = 1000000;
+
+  if (argc > 1)
+    block_size = parse_memsize (argv[1]);
+  else
+    {
+      usage();
+      block_size = 512;
+    }
+  if (argc > 2)
+    area_size = parse_memsize (argv[2]);
+  if (argc > 3)
+    repeats = parse_memsize (argv[3]);
+  if (argc > 4)
+    g_slice_set_config (G_SLICE_CONFIG_COLOR_INCREMENT, parse_memsize (argv[4]));
+
+  /* figure number of blocks from block and area size.
+   * divide area by 3 because touch_mem() allocates 3 areas
+   */
+  n_blocks = area_size / 3 / ALIGN (block_size, sizeof (gsize) * 2);
+
+  /* basic sanity checks */
+  if (!block_size || !n_blocks || block_size >= area_size)
+    {
+      g_printerr ("Invalid arguments: block-size=%llu memory-size=%llu\n", block_size, area_size);
+      usage();
+      return 1;
+    }
+
+  g_printerr ("Will allocate and touch %llu blocks of %llu bytes (= %llu bytes) %llu times with color increment: 0x%08llx\n",
+              n_blocks, block_size, n_blocks * block_size, repeats, g_slice_get_config (G_SLICE_CONFIG_COLOR_INCREMENT));
+
+  touch_mem (block_size, n_blocks, repeats);
+  
+  return 0;
+}
+
+static gdouble
+parse_memsize (const gchar *cstring)
+{
+  gchar *mem = g_strdup (cstring);
+  gchar *string = g_strstrip (mem);
+  guint l = strlen (string);
+  gdouble f = 0;
+  gchar *derr = NULL;
+  gdouble msize;
+
+  switch (l ? string[l - 1] : 0)
+    {
+    case 'k':   f = 1000;               break;
+    case 'K':   f = 1024;               break;
+    case 'm':   f = 1000000;            break;
+    case 'M':   f = 1024 * 1024;        break;
+    case 'g':   f = 1000000000;         break;
+    case 'G':   f = 1024 * 1024 * 1024; break;
+    }
+  if (f)
+    string[l - 1] = 0;
+  msize = g_ascii_strtod (string, &derr);
+  g_free (mem);
+  if (derr && *derr)
+    {
+      g_printerr ("failed to parse number at: %s\n", derr);
+      msize = 0;
+    }
+  if (f)
+    msize *= f;
+  return msize;
+}
diff --git a/tests/slice-concurrent.c b/tests/slice-concurrent.c
new file mode 100644
index 0000000..da31eaf
--- /dev/null
+++ b/tests/slice-concurrent.c
@@ -0,0 +1,120 @@
+/* test for gslice cross thread allocation/free
+ * Copyright (C) 2006 Stefan Westerfeld
+ * Copyright (C) 2007 Tim Janik
+ *
+ * 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 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.
+ */
+#include <glib.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define N_THREADS	8
+#define N_ALLOCS	50000
+#define MAX_BLOCK_SIZE  64
+
+struct ThreadData
+{
+  int	   thread_id;
+  GThread* gthread;
+
+  GMutex*  to_free_mutex;
+  void*    to_free [N_THREADS * N_ALLOCS];
+  int      bytes_to_free [N_THREADS * N_ALLOCS];
+  int      n_to_free;
+  int      n_freed;
+} tdata[N_THREADS];
+
+void*
+thread_func (void *arg)
+{
+  struct ThreadData *td = arg;
+  int i;
+  // g_print ("Thread %d starting\n", td->thread_id);
+  for (i = 0; i < N_ALLOCS; i++)
+    {
+      if (rand() % (N_ALLOCS / 20) == 0)
+	g_print ("%c", 'a' - 1 + td->thread_id);
+
+      /* allocate block of random size and randomly fill */
+      int   bytes = rand() % MAX_BLOCK_SIZE + 1;
+      char *mem = g_slice_alloc (bytes);
+      int f;
+      for (f = 0; f < bytes; f++)
+	mem[f] = rand();
+
+      /* associate block with random thread */
+      int t = rand() % N_THREADS;
+      g_mutex_lock (tdata[t].to_free_mutex);
+      tdata[t].to_free[tdata[t].n_to_free] = mem;
+      tdata[t].bytes_to_free[tdata[t].n_to_free] = bytes;
+      tdata[t].n_to_free++;
+      g_mutex_unlock (tdata[t].to_free_mutex);
+
+      /* shuffle thread execution order every once in a while */
+      if (rand() % 97 == 0)
+        {
+          if (rand() % 2)
+            g_thread_yield();   /* concurrent shuffling for single core */
+          else
+            g_usleep (1000);    /* concurrent shuffling for multi core */
+        }
+
+      /* free a block associated with this thread */
+      g_mutex_lock (td->to_free_mutex);
+      if (td->n_to_free > 0)
+	{
+	  td->n_to_free--;
+	  g_slice_free1 (td->bytes_to_free[td->n_to_free], td->to_free[td->n_to_free]);
+	  td->n_freed++;
+	}
+      g_mutex_unlock (td->to_free_mutex);
+    }
+
+  return NULL;
+}
+
+int
+main()
+{
+  int t;
+
+  g_thread_init (NULL);
+
+  for (t = 0; t < N_THREADS; t++)
+    {
+      tdata[t].thread_id = t + 1;
+      tdata[t].n_to_free = 0;
+      tdata[t].n_freed = 0;
+      tdata[t].to_free_mutex = g_mutex_new();
+    }
+  g_print ("Starting %d threads for concurrent GSlice usage...\n", N_THREADS);
+  for (t = 0; t < N_THREADS; t++)
+    {
+      tdata[t].gthread   = g_thread_create (thread_func, &tdata[t], TRUE, NULL);
+      g_assert (tdata[t].gthread != NULL);
+    }
+  for (t = 0; t < N_THREADS; t++)
+    {
+      g_thread_join (tdata[t].gthread);
+    }
+  g_print ("\n");
+  for (t = 0; t < N_THREADS; t++)
+    {
+      g_print ("Thread %d: %d blocks freed, %d blocks not freed\n",
+		    tdata[t].thread_id, tdata[t].n_freed, tdata[t].n_to_free);
+    }
+  return 0;
+}
diff --git a/tests/slice-test.c b/tests/slice-test.c
new file mode 100644
index 0000000..22f252b
--- /dev/null
+++ b/tests/slice-test.c
@@ -0,0 +1,310 @@
+/* GLIB sliced memory - fast threaded memory chunk allocator
+ * Copyright (C) 2005 Tim Janik
+ *
+ * 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 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.
+ */
+#include <glib.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#define quick_rand32()  (rand_accu = 1664525 * rand_accu + 1013904223, rand_accu)
+static guint    prime_size = 1021; // 769; // 509
+static gboolean clean_memchunks = FALSE;
+static guint    number_of_blocks = 10000;          /* total number of blocks allocated */
+static guint    number_of_repetitions = 10000;     /* number of alloc+free repetitions */
+static gboolean want_corruption = FALSE;
+
+/* --- old memchunk prototypes (memchunks.c) --- */
+void            old_mem_chunks_init     (void);
+GMemChunk*      old_mem_chunk_new       (const gchar  *name,
+                                         gint          atom_size,
+                                         gulong        area_size,
+                                         gint          type);
+void            old_mem_chunk_destroy   (GMemChunk *mem_chunk);
+gpointer        old_mem_chunk_alloc     (GMemChunk *mem_chunk);
+gpointer        old_mem_chunk_alloc0    (GMemChunk *mem_chunk);
+void            old_mem_chunk_free      (GMemChunk *mem_chunk,
+                                         gpointer   mem);
+void            old_mem_chunk_clean     (GMemChunk *mem_chunk);
+void            old_mem_chunk_reset     (GMemChunk *mem_chunk);
+void            old_mem_chunk_print     (GMemChunk *mem_chunk);
+void            old_mem_chunk_info      (void);
+#ifndef G_ALLOC_AND_FREE
+#define G_ALLOC_AND_FREE  2
+#endif
+
+/* --- functions --- */
+static inline int
+corruption (void)
+{
+  if (G_UNLIKELY (want_corruption))
+    {
+      /* corruption per call likelyness is about 1:4000000 */
+      guint32 r = g_random_int() % 8000009;
+      return r == 277 ? +1 : r == 281 ? -1 : 0;
+    }
+  return 0;
+}
+
+static inline gpointer
+memchunk_alloc (GMemChunk **memchunkp,
+                guint       size)
+{
+  size = MAX (size, 1);
+  if (G_UNLIKELY (!*memchunkp))
+    *memchunkp = old_mem_chunk_new ("", size, 4096, G_ALLOC_AND_FREE);
+  return old_mem_chunk_alloc (*memchunkp);
+}
+
+static inline void
+memchunk_free (GMemChunk *memchunk,
+               gpointer   chunk)
+{
+  old_mem_chunk_free (memchunk, chunk);
+  if (clean_memchunks)
+    old_mem_chunk_clean (memchunk);
+}
+
+static gpointer
+test_memchunk_thread (gpointer data)
+{
+  GMemChunk **memchunks;
+  guint i, j;
+  guint8 **ps;
+  guint   *ss;
+  guint32 rand_accu = 2147483563;
+  /* initialize random numbers */
+  if (data)
+    rand_accu = *(guint32*) data;
+  else
+    {
+      GTimeVal rand_tv;
+      g_get_current_time (&rand_tv);
+      rand_accu = rand_tv.tv_usec + (rand_tv.tv_sec << 16);
+    }
+
+  /* prepare for memchunk creation */
+  memchunks = g_alloca (sizeof (memchunks[0]) * prime_size);
+  memset (memchunks, 0, sizeof (memchunks[0]) * prime_size);
+
+  ps = g_new (guint8*, number_of_blocks);
+  ss = g_new (guint, number_of_blocks);
+  /* create number_of_blocks random sizes */
+  for (i = 0; i < number_of_blocks; i++)
+    ss[i] = quick_rand32() % prime_size;
+  /* allocate number_of_blocks blocks */
+  for (i = 0; i < number_of_blocks; i++)
+    ps[i] = memchunk_alloc (&memchunks[ss[i]], ss[i]);
+  for (j = 0; j < number_of_repetitions; j++)
+    {
+      /* free number_of_blocks/2 blocks */
+      for (i = 0; i < number_of_blocks; i += 2)
+        memchunk_free (memchunks[ss[i]], ps[i]);
+      /* allocate number_of_blocks/2 blocks with new sizes */
+      for (i = 0; i < number_of_blocks; i += 2)
+        {
+          ss[i] = quick_rand32() % prime_size;
+          ps[i] = memchunk_alloc (&memchunks[ss[i]], ss[i]);
+        }
+    }
+  /* free number_of_blocks blocks */
+  for (i = 0; i < number_of_blocks; i++)
+    memchunk_free (memchunks[ss[i]], ps[i]);
+  /* alloc and free many equally sized chunks in a row */
+  for (i = 0; i < number_of_repetitions; i++)
+    {
+      guint sz = quick_rand32() % prime_size;
+      guint k = number_of_blocks / 100;
+      for (j = 0; j < k; j++)
+        ps[j] = memchunk_alloc (&memchunks[sz], sz);
+      for (j = 0; j < k; j++)
+        memchunk_free (memchunks[sz], ps[j]);
+    }
+  /* cleanout memchunks */
+  for (i = 0; i < prime_size; i++)
+    if (memchunks[i])
+      old_mem_chunk_destroy (memchunks[i]);
+  g_free (ps);
+  g_free (ss);
+
+  return NULL;
+}
+
+static gpointer
+test_sliced_mem_thread (gpointer data)
+{
+  guint32 rand_accu = 2147483563;
+  guint i, j;
+  guint8 **ps;
+  guint   *ss;
+
+  /* initialize random numbers */
+  if (data)
+    rand_accu = *(guint32*) data;
+  else
+    {
+      GTimeVal rand_tv;
+      g_get_current_time (&rand_tv);
+      rand_accu = rand_tv.tv_usec + (rand_tv.tv_sec << 16);
+    }
+
+  ps = g_new (guint8*, number_of_blocks);
+  ss = g_new (guint, number_of_blocks);
+  /* create number_of_blocks random sizes */
+  for (i = 0; i < number_of_blocks; i++)
+    ss[i] = quick_rand32() % prime_size;
+  /* allocate number_of_blocks blocks */
+  for (i = 0; i < number_of_blocks; i++)
+    ps[i] = g_slice_alloc (ss[i] + corruption());
+  for (j = 0; j < number_of_repetitions; j++)
+    {
+      /* free number_of_blocks/2 blocks */
+      for (i = 0; i < number_of_blocks; i += 2)
+        g_slice_free1 (ss[i] + corruption(), ps[i] + corruption());
+      /* allocate number_of_blocks/2 blocks with new sizes */
+      for (i = 0; i < number_of_blocks; i += 2)
+        {
+          ss[i] = quick_rand32() % prime_size;
+          ps[i] = g_slice_alloc (ss[i] + corruption());
+        }
+    }
+  /* free number_of_blocks blocks */
+  for (i = 0; i < number_of_blocks; i++)
+    g_slice_free1 (ss[i] + corruption(), ps[i] + corruption());
+  /* alloc and free many equally sized chunks in a row */
+  for (i = 0; i < number_of_repetitions; i++)
+    {
+      guint sz = quick_rand32() % prime_size;
+      guint k = number_of_blocks / 100;
+      for (j = 0; j < k; j++)
+        ps[j] = g_slice_alloc (sz + corruption());
+      for (j = 0; j < k; j++)
+        g_slice_free1 (sz + corruption(), ps[j] + corruption());
+    }
+  g_free (ps);
+  g_free (ss);
+
+  return NULL;
+}
+
+static void
+usage (void)
+{
+  g_print ("Usage: slice-test [n_threads] [G|S|M|O][f][c][~] [maxblocksize] [seed]\n");
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  guint seed32, *seedp = NULL;
+  gboolean ccounters = FALSE, use_memchunks = FALSE;
+  guint n_threads = 1;
+  const gchar *mode = "slab allocator + magazine cache", *emode = " ";
+  if (argc > 1)
+    n_threads = g_ascii_strtoull (argv[1], NULL, 10);
+  if (argc > 2)
+    {
+      guint i, l = strlen (argv[2]);
+      for (i = 0; i < l; i++)
+        switch (argv[2][i])
+          {
+          case 'G': /* GLib mode */
+            g_slice_set_config (G_SLICE_CONFIG_ALWAYS_MALLOC, FALSE);
+            g_slice_set_config (G_SLICE_CONFIG_BYPASS_MAGAZINES, FALSE);
+            mode = "slab allocator + magazine cache";
+            break;
+          case 'S': /* slab mode */
+            g_slice_set_config (G_SLICE_CONFIG_ALWAYS_MALLOC, FALSE);
+            g_slice_set_config (G_SLICE_CONFIG_BYPASS_MAGAZINES, TRUE);
+            mode = "slab allocator";
+            break;
+          case 'M': /* malloc mode */
+            g_slice_set_config (G_SLICE_CONFIG_ALWAYS_MALLOC, TRUE);
+            mode = "system malloc";
+            break;
+          case 'O': /* old memchunks */
+            use_memchunks = TRUE;
+            mode = "old memchunks";
+            break;
+          case 'f': /* eager freeing */
+            g_slice_set_config (G_SLICE_CONFIG_WORKING_SET_MSECS, 0);
+            clean_memchunks = TRUE;
+            emode = " with eager freeing";
+            break;
+          case 'c': /* print contention counters */
+            ccounters = TRUE;
+            break;
+          case '~':
+            want_corruption = TRUE; /* force occasional corruption */
+            break;
+          default:
+            usage();
+            return 1;
+          }
+    }
+  if (argc > 3)
+    prime_size = g_ascii_strtoull (argv[3], NULL, 10);
+  if (argc > 4)
+    {
+      seed32 = g_ascii_strtoull (argv[4], NULL, 10);
+      seedp = &seed32;
+    }
+
+  g_thread_init (NULL);
+
+  if (argc <= 1)
+    usage();
+
+  {
+    gchar strseed[64] = "<random>";
+    GThread **threads;
+    guint i;
+    
+    if (seedp)
+      g_snprintf (strseed, 64, "%u", *seedp);
+    g_print ("Starting %d threads allocating random blocks <= %u bytes with seed=%s using %s%s\n", n_threads, prime_size, strseed, mode, emode);
+  
+    threads = g_alloca (sizeof(GThread*) * n_threads);
+    if (!use_memchunks)
+      for (i = 0; i < n_threads; i++)
+        threads[i] = g_thread_create_full (test_sliced_mem_thread, seedp, 0, TRUE, FALSE, 0, NULL);
+    else
+      {
+        old_mem_chunks_init();
+        for (i = 0; i < n_threads; i++)
+          threads[i] = g_thread_create_full (test_memchunk_thread, seedp, 0, TRUE, FALSE, 0, NULL);
+      }
+    for (i = 0; i < n_threads; i++)
+      g_thread_join (threads[i]);
+  
+    if (ccounters)
+      {
+        guint n, n_chunks = g_slice_get_config (G_SLICE_CONFIG_CHUNK_SIZES);
+        g_print ("    ChunkSize | MagazineSize | Contention\n");
+        for (i = 0; i < n_chunks; i++)
+          {
+            gint64 *vals = g_slice_get_config_state (G_SLICE_CONFIG_CONTENTION_COUNTER, i, &n);
+            g_print ("  %9llu   |  %9llu   |  %9llu\n", vals[0], vals[2], vals[1]);
+            g_free (vals);
+          }
+      }
+    else
+      g_print ("Done.\n");
+    return 0;
+  }
+}
diff --git a/tests/slice-threadinit.c b/tests/slice-threadinit.c
new file mode 100644
index 0000000..5c44075
--- /dev/null
+++ b/tests/slice-threadinit.c
@@ -0,0 +1,166 @@
+/* slice-threadinit.c - test GSlice across g_thread_init
+ * Copyright (C) 2007 Tim Janik
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+#include <glib.h>
+
+#define N_PAGES                 (101)                   /* number of pages to sample */
+#define SAMPLE_SIZE             (7)
+#define PAGE_SIZE               (128)                   /* must be <= minimum GSlice alignment block */
+#define MAGAZINE_PROBES         { 81, 265, 347 }        /* block sizes hopefully unused by g_thread_init */
+#define MAX_PROBE_TRIALS        (1031)                  /* must be >= maximum magazine size */
+
+#define ALIGN(size, base)       ((base) * (gsize) (((size) + (base) - 1) / (base)))
+
+static struct {
+  void *page;
+  void *sample;
+} pages[N_PAGES] = { { NULL, }, };
+
+static const guint magazine_probes[] = MAGAZINE_PROBES;
+#define N_MAGAZINE_PROBES       G_N_ELEMENTS (magazine_probes)
+
+static void
+release_trash_list (GSList **trash_list,
+                    gsize    block_size)
+{
+  while (*trash_list)
+    {
+      g_slice_free1 (block_size, (*trash_list)->data);
+      *trash_list = g_slist_delete_link (*trash_list, *trash_list);
+    }
+}
+
+static GSList *free_list = NULL;
+
+static gboolean
+allocate_from_known_page (void)
+{
+  guint i, j, n_trials = N_PAGES * PAGE_SIZE / SAMPLE_SIZE; /* upper bound */
+  for (i = 0; i < n_trials; i++)
+    {
+      void *b = g_slice_alloc (SAMPLE_SIZE);
+      void *p = (void*) (PAGE_SIZE * ((gsize) b / PAGE_SIZE));
+      free_list = g_slist_prepend (free_list, b);
+      /* find page */
+      for (j = 0; j < N_PAGES; j++)
+        if (pages[j].page == p)
+          return TRUE;
+    }
+  return FALSE;
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  int j, n_pages = 0;
+  void *mps[N_MAGAZINE_PROBES];
+
+  /* probe some magazine sizes */
+  for (j = 0; j < N_MAGAZINE_PROBES; j++)
+    mps[j] = g_slice_alloc (magazine_probes[j]);
+  /* mps[*] now contains pointers to allocated slices */
+
+  /* allocate blocks from N_PAGES different pages */
+  while (n_pages < N_PAGES)
+    {
+      void *b = g_slice_alloc (SAMPLE_SIZE);
+      void *p = (void*) (PAGE_SIZE * ((gsize) b / PAGE_SIZE));
+      for (j = 0; j < N_PAGES; j++)
+        if (pages[j].page == p)
+          break;
+      if (j < N_PAGES)  /* known page */
+        free_list = g_slist_prepend (free_list, b);
+      else              /* new page */
+        {
+          j = n_pages++;
+          pages[j].page = p;
+          pages[j].sample = b;
+        }
+    }
+  /* release intermediate allocations */
+  release_trash_list (&free_list, SAMPLE_SIZE);
+
+  /* ensure that we can allocate from known pages */
+  if (!allocate_from_known_page())
+    g_error ("failed to allocate from magazine/page cache (before g_thread_init)");
+  /* release intermediate allocations */
+  release_trash_list (&free_list, SAMPLE_SIZE);
+
+  /* release magazine probes to be retained */
+  for (j = 0; j < N_MAGAZINE_PROBES; j++)
+    g_slice_free1 (magazine_probes[j], mps[j]);
+  /* mps[*] now contains pointers to releaed slices */
+
+  /* ensure probes were retained */
+  for (j = 0; j < N_MAGAZINE_PROBES; j++)
+    {
+      GSList *trash = NULL;
+      guint k;
+      for (k = 0; k < MAX_PROBE_TRIALS; k++)
+        {
+          void *mem = g_slice_alloc (magazine_probes[j]);
+          if (mem == mps[j])
+            break;      /* reallocated previously freed slice */
+          trash = g_slist_prepend (trash, mem);
+        }
+      release_trash_list (&trash, magazine_probes[j]);
+      if (k >= MAX_PROBE_TRIALS)        /* failed to reallocate slice */
+        g_error ("failed to reallocate slice from magazine (before g_thread_init): size=%d", magazine_probes[j]);
+    }
+  /* mps[*] now contains pointers to reallocated slices */
+
+  /* release magazine probes to be retained across g_thread_init */
+  for (j = 0; j < N_MAGAZINE_PROBES; j++)
+    g_slice_free1 (magazine_probes[j], mps[j]);
+  /* mps[*] now contains pointers to released slices */
+
+  /* initialize threading (should retain allocator state) */
+  g_thread_init (NULL);
+
+  /* ensure probes were retained */
+  for (j = 0; j < N_MAGAZINE_PROBES; j++)
+    {
+      GSList *trash = NULL;
+      guint k;
+      for (k = 0; k < MAX_PROBE_TRIALS; k++)
+        {
+          void *mem = g_slice_alloc (magazine_probes[j]);
+          if (mem == mps[j])
+            break;      /* reallocated previously freed slice */
+          trash = g_slist_prepend (trash, mem);
+        }
+      release_trash_list (&trash, magazine_probes[j]);
+      if (k >= MAX_PROBE_TRIALS)        /* failed to reallocate slice */
+        g_error ("failed to reallocate slice from magazine (after g_thread_init): size=%d", magazine_probes[j]);
+    }
+  /* mps[*] now contains pointers to reallocated slices */
+
+  /* ensure that we can allocate from known pages */
+  if (!allocate_from_known_page())
+    g_error ("failed to allocate from magazine/page cache (after g_thread_init)");
+
+  /* some cleanups */
+  for (j = 0; j < N_MAGAZINE_PROBES; j++)
+    g_slice_free1 (magazine_probes[j], mps[j]);
+  release_trash_list (&free_list, SAMPLE_SIZE);
+
+  return 0;
+}
diff --git a/tests/slist-test.c b/tests/slist-test.c
new file mode 100644
index 0000000..c269809
--- /dev/null
+++ b/tests/slist-test.c
@@ -0,0 +1,204 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+
+#define DEBUG_MSG(args) 
+/* #define DEBUG_MSG(args) g_printerr args ; g_printerr ("\n"); */
+#define PRINT_MSG(args) 
+/* #define PRINT_MSG(args) g_print args ; g_print ("\n"); */
+
+#define SIZE       50
+#define NUMBER_MIN 0000
+#define NUMBER_MAX 9999
+
+
+static guint32 array[SIZE];
+
+
+static gint
+sort (gconstpointer p1, gconstpointer p2)
+{
+  gint32 a, b;
+
+  a = GPOINTER_TO_INT (p1);
+  b = GPOINTER_TO_INT (p2);
+
+  return (a > b ? +1 : a == b ? 0 : -1);
+}
+
+/*
+ * gslist sort tests
+ */
+static void
+test_slist_sort (void)
+{
+  GSList *slist = NULL;
+  gint    i;
+
+  PRINT_MSG (("testing g_slist_sort()"));
+
+  for (i = 0; i < SIZE; i++) {
+    slist = g_slist_append (slist, GINT_TO_POINTER (array[i]));
+  }
+
+  slist = g_slist_sort (slist, sort);
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_slist_nth_data (slist, i);
+    p2 = g_slist_nth_data (slist, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("slist_sort #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+}
+
+static void
+test_slist_sort_with_data (void)
+{
+  GSList *slist = NULL;
+  gint    i;
+
+  PRINT_MSG (("testing g_slist_sort_with_data()"));
+
+  for (i = 0; i < SIZE; i++) {
+    slist = g_slist_append (slist, GINT_TO_POINTER (array[i]));
+  }
+
+  slist = g_slist_sort_with_data (slist, (GCompareDataFunc)sort, NULL);
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_slist_nth_data (slist, i);
+    p2 = g_slist_nth_data (slist, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("slist_sort_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+}
+
+static void
+test_slist_insert_sorted (void)
+{
+  GSList *slist = NULL;
+  gint    i;
+
+  PRINT_MSG (("testing g_slist_insert_sorted()"));
+
+  for (i = 0; i < SIZE; i++) {
+    slist = g_slist_insert_sorted (slist, GINT_TO_POINTER (array[i]), sort);
+  }
+
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_slist_nth_data (slist, i);
+    p2 = g_slist_nth_data (slist, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("slist_insert_sorted #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+}
+
+static void
+test_slist_insert_sorted_with_data (void)
+{
+  GSList *slist = NULL;
+  gint    i;
+
+  PRINT_MSG (("testing g_slist_insert_sorted_with_data()"));
+
+  for (i = 0; i < SIZE; i++) {
+    slist = g_slist_insert_sorted_with_data (slist, 
+					   GINT_TO_POINTER (array[i]), 
+					   (GCompareDataFunc)sort, 
+					   NULL);
+  }
+
+  for (i = 0; i < SIZE - 1; i++) {
+    gpointer p1, p2;
+
+    p1 = g_slist_nth_data (slist, i);
+    p2 = g_slist_nth_data (slist, i+1);
+
+    g_assert (GPOINTER_TO_INT (p1) <= GPOINTER_TO_INT (p2));
+    DEBUG_MSG (("slist_insert_sorted_with_data #%3.3d ---> %d", i, GPOINTER_TO_INT (p1)));
+  }
+}
+
+static void
+test_slist_reverse (void)
+{
+  GSList *slist = NULL;
+  GSList *st;
+  gint    nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+  gint    i;
+
+  PRINT_MSG (("testing g_slist_reverse()"));
+
+  for (i = 0; i < 10; i++) {
+    slist = g_slist_append (slist, &nums[i]);
+  }
+
+  slist = g_slist_reverse (slist);
+
+  for (i = 0; i < 10; i++) {
+    st = g_slist_nth (slist, i);
+    g_assert (*((gint*) st->data) == (9 - i));
+  }
+
+  g_slist_free (slist);
+}
+
+static void
+test_slist_nth (void)
+{
+  GSList *slist = NULL;
+  GSList *st;
+  gint    nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+  gint    i;
+
+  PRINT_MSG (("testing g_slist_nth()"));
+
+  for (i = 0; i < 10; i++) {
+    slist = g_slist_append (slist, &nums[i]);
+  }
+
+  for (i = 0; i < 10; i++) {
+    st = g_slist_nth (slist, i);
+    g_assert (*((gint*) st->data) == i);
+  }
+
+  g_slist_free (slist);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gint i;
+
+  DEBUG_MSG (("debugging messages turned on"));
+
+  DEBUG_MSG (("creating %d random numbers", SIZE));
+
+  /* Create an array of random numbers. */
+  for (i = 0; i < SIZE; i++) {
+    array[i] = g_random_int_range (NUMBER_MIN, NUMBER_MAX);
+    DEBUG_MSG (("number #%3.3d ---> %d", i, array[i]));
+  }
+
+  /* Start tests. */
+  test_slist_sort ();
+  test_slist_sort_with_data ();
+
+  test_slist_insert_sorted ();
+  test_slist_insert_sorted_with_data ();
+
+  test_slist_reverse ();
+  test_slist_nth ();
+
+  PRINT_MSG (("testing finished"));
+
+  return 0;
+}
diff --git a/tests/spawn-test-win32-gui.c b/tests/spawn-test-win32-gui.c
new file mode 100644
index 0000000..45529d0
--- /dev/null
+++ b/tests/spawn-test-win32-gui.c
@@ -0,0 +1,111 @@
+#include <windows.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <fcntl.h>
+
+#ifdef __CYGWIN__
+/* For read() and write() */
+#include <unistd.h>
+/* Cygwin does not prototype __argc and __argv in stdlib.h */
+extern int __argc;
+extern char** __argv;
+#endif
+
+int _stdcall
+WinMain (struct HINSTANCE__ *hInstance,
+	struct HINSTANCE__ *hPrevInstance,
+	char *lpszCmdLine,
+	int   nCmdShow)
+{
+  char buf[100];
+
+  if (__argc >= 2 && strcmp (__argv[1], "nop") == 0)
+    {
+      sprintf (buf, "spawn-test-win32-gui: argv[0]=\"%s\"", __argv[0]);
+      MessageBox (NULL, buf, lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+    }
+  else if (__argc <= 2)
+    {
+      MessageBox (NULL, "spawn-test-win32-gui: Will write to stdout",
+		  lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+      
+      printf ("This is stdout\n");
+      fflush (stdout);
+      
+      MessageBox (NULL, "spawn-test-win32-gui: Will write to stderr",
+		  lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+      
+      fprintf (stderr, "This is stderr\n");
+      fflush (stderr);
+    }
+  else if (__argc == 4 && strcmp (__argv[1], "pipes") == 0)
+    {
+      int infd = atoi (__argv[2]);
+      int outfd = atoi (__argv[3]);
+      int k, n;
+
+      if (infd < 0 || outfd < 0)
+	{
+	  MessageBox (NULL, "spawn-test-win32-gui: illegal fds on command line",
+		      lpszCmdLine, MB_ICONERROR|MB_SYSTEMMODAL);
+	  exit (1);
+	}
+
+      MessageBox (NULL, "spawn-test-win32-gui: Will write to parent",
+		  lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+
+      n = strlen ("Hello there");
+      if (write (outfd, &n, sizeof (n)) == -1 ||
+	  write (outfd, "Hello there", n) == -1)
+	{
+	  sprintf (buf, "spawn-test-win32-gui: Write: %s", strerror (errno));
+	  MessageBox (NULL, buf, lpszCmdLine, MB_ICONERROR|MB_SYSTEMMODAL);
+	  exit (1);
+	}
+
+      MessageBox (NULL, "spawn-test-win32-gui: Will read from parent",
+		  lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+
+      if ((k = read (infd, &n, sizeof (n))) != sizeof (n))
+	{
+	  sprintf (buf, "spawn-test-win32-gui: Got only %d bytes, wanted %d",
+		   k, sizeof (n));
+	  MessageBox (NULL, buf, lpszCmdLine, MB_ICONERROR|MB_SYSTEMMODAL);
+	  exit (1);
+	}
+
+      sprintf (buf, "spawn-test-win32-gui: Parent says %d bytes to read", n);
+      MessageBox (NULL, buf, lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+
+      if ((k = read (infd, buf, n)) != n)
+	{
+	  if (k == -1)
+	    sprintf (buf, "spawn-test-win32-gui: Read: %s", strerror (errno));
+	  else
+	    sprintf (buf, "spawn-test-win32-gui: Got only %d bytes", k);
+	  MessageBox (NULL, buf, lpszCmdLine, MB_ICONERROR|MB_SYSTEMMODAL);
+	  exit (1);
+	}
+
+      MessageBox (NULL, "spawn-test-win32-gui: Will write more to parent",
+		  lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+
+      n = strlen ("See ya");
+      if (write (outfd, &n, sizeof (n)) == -1 ||
+	  write (outfd, "See ya", n) == -1)
+	{
+	  sprintf (buf, "spawn-test-win32-gui: Write: %s", strerror (errno));
+	  MessageBox (NULL, buf, lpszCmdLine, MB_ICONERROR|MB_SYSTEMMODAL);
+	  exit (1);
+	}
+    }
+
+  Sleep (2000);
+  
+  MessageBox (NULL, "spawn-test-win32-gui: Done, exiting.",
+	      lpszCmdLine, MB_ICONINFORMATION|MB_SYSTEMMODAL);
+
+  return 0;
+}
diff --git a/tests/spawn-test.c b/tests/spawn-test.c
new file mode 100644
index 0000000..1bc360a
--- /dev/null
+++ b/tests/spawn-test.c
@@ -0,0 +1,294 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef G_OS_WIN32
+#include <fcntl.h>
+#include <io.h>
+#define pipe(fds) _pipe(fds, 4096, _O_BINARY)
+#endif
+
+
+static void
+run_tests (void)
+{
+  GError *err;
+  gchar *output = NULL;
+#ifdef G_OS_WIN32
+  gchar *erroutput = NULL;
+  int pipedown[2], pipeup[2];
+  gchar **argv = 0;
+#endif
+  
+  err = NULL;
+  if (!g_spawn_command_line_sync ("nonexistent_application foo 'bar baz' blah blah",
+                                  NULL, NULL, NULL,
+                                  &err))
+    {
+      g_error_free (err);
+    }
+  else
+    {
+      g_warning ("no error for sync spawn of nonexistent application");
+      exit (1);
+    }
+
+  err = NULL;
+  if (!g_spawn_command_line_async ("nonexistent_application foo bar baz \"blah blah\"",
+                                   &err))
+    {
+      g_error_free (err);
+    }
+  else
+    {
+      g_warning ("no error for async spawn of nonexistent application");
+      exit (1);
+    }
+
+  err = NULL;
+#ifdef G_OS_UNIX
+  if (!g_spawn_command_line_sync ("/bin/sh -c 'echo hello'",
+                                  &output, NULL, NULL,
+                                  &err))
+    {
+      fprintf (stderr, "Error: %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+  else
+    {
+      g_assert (output != NULL);
+      
+      if (strcmp (output, "hello\n") != 0)
+        {
+          printf ("output was '%s', should have been 'hello'\n",
+                  output);
+
+          exit (1);
+        }
+
+      g_free (output);
+    }
+#else
+#ifdef G_OS_WIN32
+  printf ("Running netstat synchronously, collecting its output\n");
+
+  if (!g_spawn_command_line_sync ("netstat -n",
+                                  &output, &erroutput, NULL,
+                                  &err))
+    {
+      fprintf (stderr, "Error: %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+  else
+    {
+      g_assert (output != NULL);
+      g_assert (erroutput != NULL);
+      
+      if (strstr (output, "Active Connections") == 0)
+        {
+          printf ("output was '%s', should have contained 'Active Connections'\n",
+                  output);
+
+          exit (1);
+        }
+      if (erroutput[0] != '\0')
+	{
+	  printf ("error output was '%s', should have been empty\n",
+		  erroutput);
+	  exit (1);
+	}
+
+      g_free (output);
+      output = NULL;
+      g_free (erroutput);
+      erroutput = NULL;
+    }
+
+  printf ("Running spawn-test-win32-gui in various ways. Click on the OK buttons.\n");
+
+  printf ("First asynchronously (without wait).\n");
+
+  if (!g_spawn_command_line_async ("'.\\spawn-test-win32-gui.exe' 1", &err))
+    {
+      fprintf (stderr, "Error: %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+
+  printf ("Now synchronously, collecting its output.\n");
+  if (!g_spawn_command_line_sync ("'.\\spawn-test-win32-gui.exe' 2",
+				  &output, &erroutput, NULL,
+				  &err))
+    {
+      fprintf (stderr, "Error: %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+  else
+    {
+      g_assert (output != NULL);
+      g_assert (erroutput != NULL);
+      
+      if (strcmp (output, "This is stdout\r\n") != 0)
+        {
+          printf ("output was '%s', should have been 'This is stdout'\n",
+                  g_strescape (output, NULL));
+
+          exit (1);
+        }
+      if (strcmp (erroutput, "This is stderr\r\n") != 0)
+	{
+	  printf ("error output was '%s', should have been 'This is stderr'\n",
+		  g_strescape (erroutput, NULL));
+	  exit (1);
+	}
+
+      g_free (output);
+      g_free (erroutput);
+    }
+
+  printf ("Now with G_SPAWN_FILE_AND_ARGV_ZERO.\n");
+
+  if (!g_shell_parse_argv ("'.\\spawn-test-win32-gui.exe' this-should-be-argv-zero nop", NULL, &argv, &err))
+    {
+      fprintf (stderr, "Error parsing command line? %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+
+  if (!g_spawn_async (NULL, argv, NULL,
+		      G_SPAWN_FILE_AND_ARGV_ZERO,
+		      NULL, NULL, NULL,
+		      &err))
+    {
+      fprintf (stderr, "Error: %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+
+  printf ("Now talking to it through pipes.\n");
+
+  if (pipe (pipedown) < 0 ||
+      pipe (pipeup) < 0)
+    {
+      fprintf (stderr, "Could not create pipes\n");
+      exit (1);
+    }
+
+  if (!g_shell_parse_argv (g_strdup_printf ("'.\\spawn-test-win32-gui.exe' pipes %d %d",
+					    pipedown[0], pipeup[1]),
+                           NULL, &argv,
+                           &err))
+    {
+      fprintf (stderr, "Error parsing command line? %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+  
+  if (!g_spawn_async (NULL, argv, NULL,
+		      G_SPAWN_LEAVE_DESCRIPTORS_OPEN |
+		      G_SPAWN_DO_NOT_REAP_CHILD,
+		      NULL, NULL, NULL,
+		      &err))
+    {
+      fprintf (stderr, "Error: %s\n", err->message);
+      g_error_free (err);
+      exit (1);
+    }
+  else
+    {
+      int k, n;
+      char buf[100];
+
+      if ((k = read (pipeup[0], &n, sizeof (n))) != sizeof (n))
+	{
+	  if (k == -1)
+	    fprintf (stderr, "Read error: %s\n", g_strerror (errno));
+	  else
+	    fprintf (stderr, "Wanted to read %d bytes, got %d\n",
+		     sizeof (n), k);
+	  exit (1);
+	}
+
+      if ((k = read (pipeup[0], buf, n)) != n)
+	{
+	  if (k == -1)
+	    fprintf (stderr, "Read error: %s\n", g_strerror (errno));
+	  else
+	    fprintf (stderr, "Wanted to read %d bytes, got %d\n",
+		     n, k);
+	  exit (1);
+	}
+
+      n = strlen ("Bye then");
+      if (write (pipedown[1], &n, sizeof (n)) == -1 ||
+	  write (pipedown[1], "Bye then", n) == -1)
+	{
+	  fprintf (stderr, "Write error: %s\n", g_strerror (errno));
+	  exit (1);
+	}
+
+      if ((k = read (pipeup[0], &n, sizeof (n))) != sizeof (n))
+	{
+	  if (k == -1)
+	    fprintf (stderr, "Read error: %s\n", g_strerror (errno));
+	  else
+	    fprintf (stderr, "Wanted to read %d bytes, got %d\n",
+		     sizeof (n), k);
+	  exit (1);
+	}
+
+      if ((k = read (pipeup[0], buf, n)) != n)
+	{
+	  if (k == -1)
+	    fprintf (stderr, "Read error: %s\n", g_strerror (errno));
+	  else
+	    fprintf (stderr, "Wanted to read %d bytes, got %d\n",
+		     n, k);
+	  exit (1);
+	}
+    }
+#endif
+#endif
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+  run_tests ();
+  
+  return 0;
+}
diff --git a/tests/testgdate.c b/tests/testgdate.c
new file mode 100644
index 0000000..85d22dc
--- /dev/null
+++ b/tests/testgdate.c
@@ -0,0 +1,506 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#ifdef GLIB_COMPILATION
+#undef GLIB_COMPILATION
+#endif
+
+#include "glib.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+#include <time.h>
+
+gboolean failed = FALSE;
+guint32 passed = 0;
+guint32 notpassed = 0;
+
+#define	TEST(m,cond)	G_STMT_START { failed = !(cond); \
+if (failed) \
+  { ++notpassed; \
+    if (!m) \
+      g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \
+    else \
+      g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \
+  } \
+else \
+  ++passed;    \
+  if ((passed+notpassed) % 10000 == 0) g_print ("."); fflush (stdout); \
+} G_STMT_END
+
+void g_date_debug_print(GDate* d)
+{
+  if (!d) g_print("NULL!\n");
+  else 
+    g_print("julian: %u (%s) DMY: %u %u %u (%s)\n",
+	    d->julian_days, 
+	    d->julian ? "valid" : "invalid",
+	    d->day,
+	    d->month,
+	    d->year,
+	    d->dmy ? "valid" : "invalid");
+  
+  fflush(stdout);
+}
+
+int main(int argc, char** argv)
+{
+  GDate* d;
+  guint32 j;
+  GDateMonth m;
+  GDateYear y, prev_y;
+  GDateDay day;
+  gchar buf[101];
+  gchar* loc;
+  /* Try to get all the leap year cases. */
+  GDateYear check_years[] = { 
+    1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+    11, 12, 13, 14, 98, 99, 100, 101, 102, 103, 397, 
+    398, 399, 400, 401, 402, 403, 404, 405, 406,
+    1598, 1599, 1600, 1601, 1602, 1650, 1651,
+    1897, 1898, 1899, 1900, 1901, 1902, 1903, 
+    1961, 1962, 1963, 1964, 1965, 1967,
+    1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,
+    1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 
+    1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 
+    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 
+    2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
+    3000, 3001, 3002, 3998, 3999, 4000, 4001, 4002, 4003
+  };
+  guint n_check_years = sizeof(check_years)/sizeof(GDateYear);
+  guint i;
+  gboolean discontinuity;
+
+  g_print("checking GDate...");
+  
+  TEST("sizeof(GDate) is not more than 8 bytes on this platform", sizeof(GDate) < 9);
+
+  d = g_date_new();
+
+  TEST("Empty constructor produces invalid date", !g_date_valid(d));
+
+  g_date_free(d);
+
+  d = g_date_new_dmy(1,1,1);
+
+  TEST("January 1, Year 1 created and valid", g_date_valid(d));
+
+  j = g_date_get_julian(d);
+  
+  TEST("January 1, Year 1 is Julian date 1", j == 1);
+
+  TEST("Returned month is January", g_date_get_month(d) == G_DATE_JANUARY);
+  TEST("Returned day is 1", g_date_get_day(d) == 1);
+  TEST("Returned year is 1", g_date_get_year(d) == 1);
+
+  TEST("Bad month is invalid", !g_date_valid_month(G_DATE_BAD_MONTH));
+  TEST("Month 13 is invalid",  !g_date_valid_month(13));
+  TEST("Bad day is invalid",   !g_date_valid_day(G_DATE_BAD_DAY));
+  TEST("Day 32 is invalid",     !g_date_valid_day(32));
+  TEST("Bad year is invalid",  !g_date_valid_year(G_DATE_BAD_YEAR));
+  TEST("Bad julian is invalid", !g_date_valid_julian(G_DATE_BAD_JULIAN));
+  TEST("Bad weekday is invalid", !g_date_valid_weekday(G_DATE_BAD_WEEKDAY));
+  TEST("Year 2000 is a leap year", g_date_is_leap_year(2000));
+  TEST("Year 1999 is not a leap year", !g_date_is_leap_year(1999));
+  TEST("Year 1996 is a leap year", g_date_is_leap_year(1996));
+  TEST("Year 1600 is a leap year", g_date_is_leap_year(1600));
+  TEST("Year 2100 is not a leap year", !g_date_is_leap_year(2100));
+  TEST("Year 1800 is not a leap year", !g_date_is_leap_year(1800));
+
+  g_date_free(d);
+  
+  loc = setlocale(LC_ALL,"");
+  if (loc) 
+    g_print("\nLocale set to %s\n", loc);
+  else 
+    g_print("\nLocale unchanged\n");
+
+  d = g_date_new();
+  g_date_set_time(d, time(NULL));
+  TEST("Today is valid", g_date_valid(d));
+
+  g_date_strftime(buf,100,"Today is a %A, %x\n", d);
+  g_print("%s", buf);
+
+  g_date_set_time(d, 1);
+  TEST("Beginning of Unix epoch is valid", g_date_valid(d));
+
+  g_date_strftime(buf,100,"1 second into the Unix epoch it was a %A, in the month of %B, %x\n", d);
+  g_print("%s", buf);
+
+  g_date_set_julian(d, 1);
+  TEST("GDate's \"Julian\" epoch's first day is valid", g_date_valid(d));
+
+  g_date_strftime(buf,100,"Our \"Julian\" epoch begins on a %A, in the month of %B, %x\n",
+		  d);
+  g_print("%s", buf);
+
+  g_date_set_dmy(d, 10, 1, 2000);
+
+  g_date_strftime(buf,100,"%x", d);
+
+  g_date_set_parse(d, buf);
+  /* Note: this test will hopefully work, but no promises. */
+  TEST("Successfully parsed a %x-formatted string", 
+       g_date_valid(d) && 
+       g_date_get_month(d) == 1 && 
+       g_date_get_day(d) == 10 && 
+       g_date_get_year(d) == 2000);
+  if (failed)
+    g_date_debug_print(d);
+  
+  g_date_free(d);
+
+  j = G_DATE_BAD_JULIAN;
+
+  i = 0;
+  discontinuity = TRUE;
+  y      = check_years[0];
+  prev_y = G_DATE_BAD_YEAR;
+  while (i < n_check_years) 
+    {
+      guint32 first_day_of_year = G_DATE_BAD_JULIAN;
+      guint16 days_in_year = g_date_is_leap_year(y) ? 366 : 365;
+      guint   sunday_week_of_year = 0;
+      guint   sunday_weeks_in_year = g_date_get_sunday_weeks_in_year(y);
+      guint   monday_week_of_year = 0;
+      guint   monday_weeks_in_year = g_date_get_monday_weeks_in_year(y);
+      guint   iso8601_week_of_year = 0;
+
+      if (discontinuity)
+        g_print(" (Break in sequence of requested years to check)\n");
+
+      g_print("Checking year %u", y);
+
+      TEST("Year is valid", g_date_valid_year(y));
+
+      TEST("Number of Sunday weeks in year is 52 or 53", 
+	   sunday_weeks_in_year == 52 || sunday_weeks_in_year == 53);
+      
+      TEST("Number of Monday weeks in year is 52 or 53", 
+	   monday_weeks_in_year == 52 || monday_weeks_in_year == 53);
+	   
+      m = 1;
+      while (m < 13) 
+	{
+	  guint8 dim = g_date_get_days_in_month(m,y);
+	  GDate days[31];         /* This is the fast way, no allocation */
+
+	  TEST("Sensible number of days in month", (dim > 0 && dim < 32));
+
+	  TEST("Month between 1 and 12 is valid", g_date_valid_month(m));
+
+	  day = 1;
+
+	  g_date_clear(days, 31);
+
+	  while (day <= dim) 
+	    {
+	      guint i;
+              GDate tmp;
+
+	      TEST("DMY triplet is valid", g_date_valid_dmy(day,m,y));
+
+	      /* Create GDate with triplet */
+	      
+	      d = &days[day-1];
+
+	      TEST("Cleared day is invalid", !g_date_valid(d));
+
+	      g_date_set_dmy(d,day,m,y);
+
+	      TEST("Set day is valid", g_date_valid(d));
+
+	      if (m == G_DATE_JANUARY && day == 1) 
+		{
+		  first_day_of_year = g_date_get_julian(d);
+		}
+
+	      g_assert(first_day_of_year != G_DATE_BAD_JULIAN);
+
+	      TEST("Date with DMY triplet is valid", g_date_valid(d));
+	      TEST("Month accessor works", g_date_get_month(d) == m);
+	      TEST("Year accessor works", g_date_get_year(d) == y);
+	      TEST("Day of month accessor works", g_date_get_day(d) == day);
+
+	      TEST("Day of year is consistent with Julian dates",
+		   ((g_date_get_julian(d) + 1 - first_day_of_year) ==
+		    (g_date_get_day_of_year(d))));
+
+	      if (failed) 
+		{
+		  g_print("first day: %u this day: %u day of year: %u\n", 
+			  first_day_of_year, 
+			  g_date_get_julian(d),
+			  g_date_get_day_of_year(d));
+		}
+	      
+	      if (m == G_DATE_DECEMBER && day == 31) 
+		{
+		  TEST("Last day of year equals number of days in year", 
+		       g_date_get_day_of_year(d) == days_in_year);
+		  if (failed) 
+		    {
+		      g_print("last day: %u days in year: %u\n", 
+			      g_date_get_day_of_year(d), days_in_year);
+		    }
+		}
+
+	      TEST("Day of year is not more than number of days in the year",
+		   g_date_get_day_of_year(d) <= days_in_year);
+
+	      TEST("Monday week of year is not more than number of weeks in the year",
+		   g_date_get_monday_week_of_year(d) <= monday_weeks_in_year);
+	      if (failed)
+		{
+		  g_print("Weeks in year: %u\n", monday_weeks_in_year);
+		  g_date_debug_print(d);
+		}
+	      TEST("Monday week of year is >= than last week of year",
+		   g_date_get_monday_week_of_year(d) >= monday_week_of_year);
+
+	      if (g_date_get_weekday(d) == G_DATE_MONDAY) 
+		{
+		  
+		  TEST("Monday week of year on Monday 1 more than previous day's week of year",
+		       (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 1);
+		  if ((m == G_DATE_JANUARY && day <= 4) ||
+		      (m == G_DATE_DECEMBER && day >= 29)) {
+		    TEST("ISO 8601 week of year on Monday Dec 29 - Jan 4 is 1",
+			 (g_date_get_iso8601_week_of_year(d) == 1));
+		  } else {
+		    TEST("ISO 8601 week of year on Monday 1 more than previous day's week of year",
+			 (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 1);
+		  }
+		}
+	      else 
+		{
+		  TEST("Monday week of year on non-Monday 0 more than previous day's week of year",
+		       (g_date_get_monday_week_of_year(d) - monday_week_of_year) == 0);
+		  if (!(day == 1 && m == G_DATE_JANUARY)) {
+		    TEST("ISO 8601 week of year on non-Monday 0 more than previous day's week of year (",
+			 (g_date_get_iso8601_week_of_year(d) - iso8601_week_of_year) == 0);
+		  }
+		}
+
+
+	      monday_week_of_year = g_date_get_monday_week_of_year(d);
+	      iso8601_week_of_year = g_date_get_iso8601_week_of_year(d);
+
+
+	      TEST("Sunday week of year is not more than number of weeks in the year",
+		   g_date_get_sunday_week_of_year(d) <= sunday_weeks_in_year);
+	      if (failed)
+		{
+		  g_date_debug_print(d);
+		}
+	      TEST("Sunday week of year is >= than last week of year",
+		   g_date_get_sunday_week_of_year(d) >= sunday_week_of_year);
+
+	      if (g_date_get_weekday(d) == G_DATE_SUNDAY) 
+		{
+		  TEST("Sunday week of year on Sunday 1 more than previous day's week of year",
+		       (g_date_get_sunday_week_of_year(d) - sunday_week_of_year) == 1);
+		}
+	      else 
+		{
+		  TEST("Sunday week of year on non-Sunday 0 more than previous day's week of year",
+		       (g_date_get_sunday_week_of_year(d) - sunday_week_of_year) == 0);
+		}
+
+	      sunday_week_of_year = g_date_get_sunday_week_of_year(d);
+
+	      TEST("Date is equal to itself",
+		   g_date_compare(d,d) == 0);
+
+
+	      /*************** Increments ***********/
+
+              i = 1;
+              while (i < 402) /* Need to get 400 year increments in */ 
+                {
+	      
+                  /***** Days ******/
+                  tmp = *d;
+                  g_date_add_days(d, i);
+
+                  TEST("Adding days gives a value greater than previous",
+                       g_date_compare(d, &tmp) > 0);
+
+                  g_date_subtract_days(d, i);
+                  TEST("Forward days then backward days returns us to current day",
+                       g_date_get_day(d) == day);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward days then backward days returns us to current month",
+                       g_date_get_month(d) == m);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward days then backward days returns us to current year",
+                       g_date_get_year(d) == y);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  /******* Months ********/
+
+                  tmp = *d;
+                  g_date_add_months(d, i);
+                  TEST("Adding months gives a larger value",
+                       g_date_compare(d, &tmp) > 0);
+                  g_date_subtract_months(d, i);
+
+                  TEST("Forward months then backward months returns us to current month",
+                       g_date_get_month(d) == m);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward months then backward months returns us to current year",
+                       g_date_get_year(d) == y);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+		  
+                  if (day < 29) 
+                    {
+                      /* Day should be unchanged */
+		      
+                      TEST("Forward months then backward months returns us to current day",
+                           g_date_get_day(d) == day);
+		      
+                      if (failed) 
+                        {
+                          g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                          g_date_debug_print(d);
+                        }
+                    }
+                  else 
+                    {
+                      /* reset the day for later tests */
+                      g_date_set_day(d, day);
+                    }
+
+                  /******* Years ********/
+
+                  tmp = *d;
+                  g_date_add_years(d, i);
+
+                  TEST("Adding years gives a larger value",
+                       g_date_compare(d,&tmp) > 0);
+		      
+                  g_date_subtract_years(d, i);
+
+                  TEST("Forward years then backward years returns us to current month",
+                       g_date_get_month(d) == m);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  TEST("Forward years then backward years returns us to current year",
+                       g_date_get_year(d) == y);
+
+                  if (failed) 
+                    {
+                      g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                      g_date_debug_print(d);
+                    }
+
+                  if (m != 2 && day != 29) 
+                    {
+                      TEST("Forward years then backward years returns us to current day",
+                           g_date_get_day(d) == day);
+		      
+                      if (failed) 
+                        {
+                          g_print("  (increment %u, dmy %u %u %u) ", i, day, m, y);
+                          g_date_debug_print(d);
+                        }
+                    }
+                  else 
+                    {
+                      g_date_set_day(d, day); /* reset */
+                    }
+
+                  i += 10;
+                }
+
+	      /*****  increment test relative to our local Julian count */
+
+              if (!discontinuity) {
+
+                /* We can only run sequence tests between sequential years */
+                
+                TEST("Julians are sequential with increment 1",
+                     j+1 == g_date_get_julian(d));
+                if (failed) 
+                  {
+                    g_print("Out of sequence, prev: %u expected: %u got: %u\n",
+                            j, j+1, g_date_get_julian(d));
+                  }
+
+                g_date_add_days(d,1);
+                TEST("Next day has julian 1 higher",
+                     g_date_get_julian(d) == j + 2);
+                g_date_subtract_days(d, 1);
+                
+                if (j != G_DATE_BAD_JULIAN) 
+                  {
+                    g_date_subtract_days(d, 1);
+                    
+                    TEST("Previous day has julian 1 lower",
+                         g_date_get_julian(d) == j);
+                    
+                    g_date_add_days(d, 1); /* back to original */
+                  }
+              }    
+              discontinuity = FALSE; /* goes away now */            
+
+              fflush(stdout);
+              fflush(stderr);
+
+	      j = g_date_get_julian(d); /* inc current julian */
+
+	      ++day;
+	    } 
+	  ++m;
+	}
+      g_print(" done\n");
+      ++i;
+      prev_y = y;
+      y = check_years[i];
+      if (prev_y == G_DATE_BAD_YEAR || 
+          (prev_y + 1) != y) discontinuity = TRUE;
+    }
+  
+  
+  g_print("\n%u tests passed, %u failed\n",passed, notpassed);
+
+  return 0;
+}
+
+
diff --git a/tests/testgdateparser.c b/tests/testgdateparser.c
new file mode 100644
index 0000000..f0e284a
--- /dev/null
+++ b/tests/testgdateparser.c
@@ -0,0 +1,115 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#ifdef GLIB_COMPILATION
+#undef GLIB_COMPILATION
+#endif
+
+#include "glib.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+
+void g_date_debug_print(GDate* d)
+{
+  if (!d) g_print("NULL!\n");
+  else 
+    g_print("julian: %u (%s) DMY: %u %u %u (%s)\n",
+	    d->julian_days, 
+	    d->julian ? "valid" : "invalid",
+	    d->day,
+	    d->month,
+	    d->year,
+	    d->dmy ? "valid" : "invalid");
+  
+  fflush(stdout);
+}
+
+/* These only work in the POSIX locale, maybe C too - 
+ * type POSIX into the program to check them
+ */
+char* posix_tests [] = {
+  "19981024",
+  "981024",
+  "October 1998",
+  "October 98",
+  "oCT 98",
+  "10/24/98",
+  "10 -- 24 -- 98",
+  "10/24/1998",
+  "October 24, 1998",
+  NULL
+};
+
+int main(int argc, char** argv)
+{
+  GDate* d;
+  gchar* loc;
+  gchar input[1024];
+
+  loc = setlocale(LC_ALL,"");
+  if (loc) 
+    g_print("\nLocale set to %s\n", loc);
+  else 
+    g_print("\nLocale unchanged\n");
+
+  d = g_date_new();
+
+  while (fgets(input, 1023, stdin))
+    {
+      if (input[0] == '\n') 
+        {
+          g_print("Enter a date to parse and press enter, or type `POSIX':\n");
+          continue;
+        }
+
+      if (strcmp(input,"POSIX\n") == 0) 
+        {
+          char** s = posix_tests;
+          while (*s) {
+            g_date_set_parse(d, *s);
+            
+            g_print("POSIXy parse test `%s' ...", *s);
+
+            if (!g_date_valid(d))
+              {
+                g_print(" failed.\n");
+              }
+            else 
+              {
+                gchar buf[256];
+                
+                g_date_strftime(buf,100," parsed `%x' (%B %d %Y)\n",
+                                d);
+                g_print("%s", buf);
+              }
+
+            ++s;
+          }
+        }
+      else 
+        {
+          g_date_set_parse(d, input);
+          
+          if (!g_date_valid(d))
+            {
+              g_print("Parse failed.\n");
+            }
+          else 
+            {
+              gchar buf[256];
+              
+              g_date_strftime(buf,100,"Parsed: `%x' (%B %d %Y)\n",
+                              d);
+              g_print("%s", buf);
+            }
+        }
+    }
+
+  g_date_free(d);
+
+  return 0;
+}
+
+
diff --git a/tests/testglib.c b/tests/testglib.c
new file mode 100644
index 0000000..2eeea1e
--- /dev/null
+++ b/tests/testglib.c
@@ -0,0 +1,1551 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include "config.h"
+
+#undef GLIB_COMPILATION
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "glib.h"
+#include <glib/gstdio.h>
+
+#include <stdlib.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef G_OS_WIN32
+#include <io.h>			/* For read(), write() etc */
+#endif
+
+
+#define GLIB_TEST_STRING "el dorado "
+#define GLIB_TEST_STRING_5 "el do"
+
+
+/* --- variables --- */
+static gint test_nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+static gint more_nums[10] = { 8, 9, 7, 0, 3, 2, 5, 1, 4, 6};
+
+/* --- functions --- */
+static gint
+my_list_compare_one (gconstpointer a, gconstpointer b)
+{
+  gint one = *((const gint*)a);
+  gint two = *((const gint*)b);
+  return one-two;
+}
+
+static gint
+my_list_compare_two (gconstpointer a, gconstpointer b)
+{
+  gint one = *((const gint*)a);
+  gint two = *((const gint*)b);
+  return two-one;
+}
+
+/* static void
+my_list_print (gpointer a, gpointer b)
+{
+  gint three = *((gint*)a);
+  g_print("%d", three);
+}; */
+
+static void
+glist_test (void)
+{
+  GList *list = NULL;
+  guint i;
+
+  for (i = 0; i < 10; i++)
+    list = g_list_append (list, &test_nums[i]);
+  list = g_list_reverse (list);
+
+  for (i = 0; i < 10; i++)
+    {
+      GList *t = g_list_nth (list, i);
+      if (*((gint*) t->data) != (9 - i))
+	g_error ("Regular insert failed");
+    }
+
+  for (i = 0; i < 10; i++)
+    if (g_list_position (list, g_list_nth (list, i)) != i)
+      g_error ("g_list_position does not seem to be the inverse of g_list_nth\n");
+
+  g_list_free (list);
+  list = NULL;
+
+  for (i = 0; i < 10; i++)
+    list = g_list_insert_sorted (list, &more_nums[i], my_list_compare_one);
+
+  /*
+  g_print("\n");
+  g_list_foreach (list, my_list_print, NULL);
+  */
+
+  for (i = 0; i < 10; i++)
+    {
+      GList *t = g_list_nth (list, i);
+      if (*((gint*) t->data) != i)
+         g_error ("Sorted insert failed");
+    }
+
+  g_list_free (list);
+  list = NULL;
+
+  for (i = 0; i < 10; i++)
+    list = g_list_insert_sorted (list, &more_nums[i], my_list_compare_two);
+
+  /*
+  g_print("\n");
+  g_list_foreach (list, my_list_print, NULL);
+  */
+
+  for (i = 0; i < 10; i++)
+    {
+      GList *t = g_list_nth (list, i);
+      if (*((gint*) t->data) != (9 - i))
+         g_error ("Sorted insert failed");
+    }
+
+  g_list_free (list);
+  list = NULL;
+
+  for (i = 0; i < 10; i++)
+    list = g_list_prepend (list, &more_nums[i]);
+
+  list = g_list_sort (list, my_list_compare_two);
+
+  /*
+  g_print("\n");
+  g_list_foreach (list, my_list_print, NULL);
+  */
+
+  for (i = 0; i < 10; i++)
+    {
+      GList *t = g_list_nth (list, i);
+      if (*((gint*) t->data) != (9 - i))
+         g_error ("Merge sort failed");
+    }
+
+  g_list_free (list);
+}
+
+static void
+gslist_test (void)
+{
+  GSList *slist = NULL;
+  guint i;
+
+  for (i = 0; i < 10; i++)
+    slist = g_slist_append (slist, &test_nums[i]);
+  slist = g_slist_reverse (slist);
+
+  for (i = 0; i < 10; i++)
+    {
+      GSList *st = g_slist_nth (slist, i);
+      if (*((gint*) st->data) != (9 - i))
+	g_error ("failed");
+    }
+
+  g_slist_free (slist);
+  slist = NULL;
+
+  for (i = 0; i < 10; i++)
+    slist = g_slist_insert_sorted (slist, &more_nums[i], my_list_compare_one);
+
+  /*
+  g_print("\n");
+  g_slist_foreach (slist, my_list_print, NULL);
+  */
+
+  for (i = 0; i < 10; i++)
+    {
+      GSList *st = g_slist_nth (slist, i);
+      if (*((gint*) st->data) != i)
+        g_error ("Sorted insert failed");
+    }
+
+  g_slist_free (slist);
+  slist = NULL;
+
+  for (i = 0; i < 10; i++)
+    slist = g_slist_insert_sorted (slist, &more_nums[i], my_list_compare_two);
+
+  /*
+  g_print("\n");
+  g_slist_foreach (slist, my_list_print, NULL);
+  */
+
+  for (i = 0; i < 10; i++)
+    {
+      GSList *st = g_slist_nth (slist, i);
+      if (*((gint*) st->data) != (9 - i))
+        g_error("Sorted insert failed");
+    }
+
+  g_slist_free(slist);
+  slist = NULL;
+
+  for (i = 0; i < 10; i++)
+    slist = g_slist_prepend (slist, &more_nums[i]);
+
+  slist = g_slist_sort (slist, my_list_compare_two);
+
+  /*
+  g_print("\n");
+  g_slist_foreach (slist, my_list_print, NULL);
+  */
+
+  for (i = 0; i < 10; i++)
+    {
+      GSList *st = g_slist_nth (slist, i);
+      if (*((gint*) st->data) != (9 - i))
+        g_error("Sorted insert failed");
+    }
+
+  g_slist_free(slist);
+}
+
+static gboolean
+node_build_string (GNode    *node,
+		   gpointer  data)
+{
+  gchar **p = data;
+  gchar *string;
+  gchar c[2] = "_";
+
+  c[0] = ((gchar) ((gintptr) (node->data)));
+
+  string = g_strconcat (*p ? *p : "", c, NULL);
+  g_free (*p);
+  *p = string;
+
+  return FALSE;
+}
+
+static void
+gnode_test (void)
+{
+#define	C2P(c)		((gpointer) ((long) (c)))
+#define	P2C(p)		((gchar) ((gintptr) (p)))
+  GNode *root;
+  GNode *node;
+  GNode *node_B;
+  GNode *node_F;
+  GNode *node_G;
+  GNode *node_J;
+  guint i;
+  gchar *tstring, *cstring;
+
+  root = g_node_new (C2P ('A'));
+  g_assert (g_node_depth (root) == 1 && g_node_max_height (root) == 1);
+
+  node_B = g_node_new (C2P ('B'));
+  g_node_append (root, node_B);
+  g_assert (root->children == node_B);
+
+  g_node_append_data (node_B, C2P ('E'));
+  g_node_prepend_data (node_B, C2P ('C'));
+  g_node_insert (node_B, 1, g_node_new (C2P ('D')));
+
+  node_F = g_node_new (C2P ('F'));
+  g_node_append (root, node_F);
+  g_assert (root->children->next == node_F);
+
+  node_G = g_node_new (C2P ('G'));
+  g_node_append (node_F, node_G);
+  node_J = g_node_new (C2P ('J'));
+  g_node_prepend (node_G, node_J);
+  g_node_insert (node_G, 42, g_node_new (C2P ('K')));
+  g_node_insert_data (node_G, 0, C2P ('H'));
+  g_node_insert (node_G, 1, g_node_new (C2P ('I')));
+
+  g_assert (g_node_depth (root) == 1);
+  g_assert (g_node_max_height (root) == 4);
+  g_assert (g_node_depth (node_G->children->next) == 4);
+  g_assert (g_node_n_nodes (root, G_TRAVERSE_LEAFS) == 7);
+  g_assert (g_node_n_nodes (root, G_TRAVERSE_NON_LEAFS) == 4);
+  g_assert (g_node_n_nodes (root, G_TRAVERSE_ALL) == 11);
+  g_assert (g_node_max_height (node_F) == 3);
+  g_assert (g_node_n_children (node_G) == 4);
+  g_assert (g_node_find_child (root, G_TRAVERSE_ALL, C2P ('F')) == node_F);
+  g_assert (g_node_find (root, G_LEVEL_ORDER, G_TRAVERSE_NON_LEAFS, C2P ('I')) == NULL);
+  g_assert (g_node_find (root, G_IN_ORDER, G_TRAVERSE_LEAFS, C2P ('J')) == node_J);
+
+  for (i = 0; i < g_node_n_children (node_B); i++)
+    {
+      node = g_node_nth_child (node_B, i);
+      g_assert (P2C (node->data) == ('C' + i));
+    }
+  
+  for (i = 0; i < g_node_n_children (node_G); i++)
+    g_assert (g_node_child_position (node_G, g_node_nth_child (node_G, i)) == i);
+
+  /* we have built:                    A
+   *                                 /   \
+   *                               B       F
+   *                             / | \       \
+   *                           C   D   E       G
+   *                                         / /\ \
+   *                                       H  I  J  K
+   *
+   * for in-order traversal, 'G' is considered to be the "left"
+   * child of 'F', which will cause 'F' to be the last node visited.
+   */
+
+  tstring = NULL;
+  g_node_traverse (root, G_PRE_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "ABCDEFGHIJK");
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_POST_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "CDEBHIJKGFA");
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "CBDEAHGIJKF");
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "ABFCDEGHIJK");
+  g_free (tstring); tstring = NULL;
+  
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "CDEHIJK");
+  g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_PRE_ORDER, G_TRAVERSE_NON_LEAFS, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "ABFG");
+  g_free (tstring); tstring = NULL;
+
+  g_node_reverse_children (node_B);
+  g_node_reverse_children (node_G);
+
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "ABFEDCGKJIH");
+  g_free (tstring); tstring = NULL;
+
+  cstring = NULL;
+  node = g_node_copy (root);
+  g_assert (g_node_n_nodes (root, G_TRAVERSE_ALL) == g_node_n_nodes (node, G_TRAVERSE_ALL));
+  g_assert (g_node_max_height (root) == g_node_max_height (node));
+  g_node_traverse (root, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
+  g_node_traverse (node, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &cstring);
+  g_assert_cmpstr (tstring, ==, cstring);
+  g_free (tstring); tstring = NULL;
+  g_free (cstring); cstring = NULL;
+  g_node_destroy (node);
+
+  g_node_destroy (root);
+
+  /* allocation tests */
+
+  root = g_node_new (NULL);
+  node = root;
+
+  for (i = 0; i < 2048; i++)
+    {
+      g_node_append (node, g_node_new (NULL));
+      if ((i%5) == 4)
+	node = node->children->next;
+    }
+  g_assert (g_node_max_height (root) > 100);
+  g_assert (g_node_n_nodes (root, G_TRAVERSE_ALL) == 1 + 2048);
+
+  g_node_destroy (root);
+#undef C2P
+#undef P2C
+}
+
+static gint
+my_compare (gconstpointer a,
+	    gconstpointer b)
+{
+  const char *cha = a;
+  const char *chb = b;
+
+  return *cha - *chb;
+}
+
+static gint
+my_traverse (gpointer key,
+	     gpointer value,
+	     gpointer data)
+{
+  char *ch = key;
+  g_print ("%c ", *ch);
+  return FALSE;
+}
+
+static void
+binary_tree_test (void)
+{
+  GTree *tree;
+  char chars[62];
+  guint i, j;
+
+  tree = g_tree_new (my_compare);
+  i = 0;
+  for (j = 0; j < 10; j++, i++)
+    {
+      chars[i] = '0' + j;
+      g_tree_insert (tree, &chars[i], &chars[i]);
+    }
+  for (j = 0; j < 26; j++, i++)
+    {
+      chars[i] = 'A' + j;
+      g_tree_insert (tree, &chars[i], &chars[i]);
+    }
+  for (j = 0; j < 26; j++, i++)
+    {
+      chars[i] = 'a' + j;
+      g_tree_insert (tree, &chars[i], &chars[i]);
+    }
+
+  g_assert_cmpint (g_tree_nnodes (tree), ==, 10 + 26 + 26);
+  g_assert_cmpint (g_tree_height (tree), ==, 6);
+
+  if (g_test_verbose())
+    {
+      g_print ("tree: ");
+      g_tree_foreach (tree, my_traverse, NULL);
+      g_print ("\n");
+    }
+
+  for (i = 0; i < 10; i++)
+    g_tree_remove (tree, &chars[i]);
+
+  g_assert_cmpint (g_tree_nnodes (tree), ==, 26 + 26);
+  g_assert_cmpint (g_tree_height (tree), ==, 6);
+
+  if (g_test_verbose())
+    {
+      g_print ("tree: ");
+      g_tree_foreach (tree, my_traverse, NULL);
+      g_print ("\n");
+    }
+}
+
+static gboolean
+my_hash_callback_remove (gpointer key,
+			 gpointer value,
+			 gpointer user_data)
+{
+  int *d = value;
+
+  if ((*d) % 2)
+    return TRUE;
+
+  return FALSE;
+}
+
+static void
+my_hash_callback_remove_test (gpointer key,
+			      gpointer value,
+			      gpointer user_data)
+{
+  int *d = value;
+
+  if ((*d) % 2)
+    g_print ("bad!\n");
+}
+
+static void
+my_hash_callback (gpointer key,
+		  gpointer value,
+		  gpointer user_data)
+{
+  int *d = value;
+  *d = 1;
+}
+
+static guint
+my_hash (gconstpointer key)
+{
+  return (guint) *((const gint*) key);
+}
+
+static gboolean
+my_hash_equal (gconstpointer a,
+	       gconstpointer b)
+{
+  return *((const gint*) a) == *((const gint*) b);
+}
+
+static gboolean 
+find_first_that(gpointer key, 
+		gpointer value, 
+		gpointer user_data)
+{
+  gint *v = value;
+  gint *test = user_data;
+  return (*v == *test);
+}
+
+static void
+test_g_parse_debug_string (void)
+{
+  GDebugKey keys[3] = { 
+    { "foo", 1 },
+    { "bar", 2 },
+    { "baz", 4 }
+  };
+  guint n_keys = 3;
+  guint result;
+  
+  result = g_parse_debug_string ("bar:foo:blubb", keys, n_keys);
+  g_assert (result == 3);
+
+  result = g_parse_debug_string (":baz::_E@~!_::", keys, n_keys);
+  g_assert (result == 4);
+
+  result = g_parse_debug_string ("", keys, n_keys);
+  g_assert (result == 0);
+
+  result = g_parse_debug_string (" : ", keys, n_keys);
+  g_assert (result == 0);
+}
+
+static void
+log_warning_error_tests (void)
+{
+  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
+    {
+      g_message ("this is a g_message test.");
+      g_message ("non-printable UTF-8: \"\xc3\xa4\xda\x85\"");
+      g_message ("unsafe chars: \"\x10\x11\x12\n\t\x7f\x81\x82\x83\"");
+      exit (0);
+    }
+  g_test_trap_assert_passed();
+  g_test_trap_assert_stderr ("*is a g_message test*");
+  g_test_trap_assert_stderr ("*non-printable UTF-8*");
+  g_test_trap_assert_stderr ("*unsafe chars*");
+  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
+    {
+      g_warning ("harmless warning with parameters: %d %s %#x", 42, "Boo", 12345);
+      exit (0);
+    }
+  g_test_trap_assert_failed(); /* we have fatal-warnings enabled */
+  g_test_trap_assert_stderr ("*harmless warning*");
+  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
+    {
+      g_print (NULL);
+      exit (0);
+    }
+  g_test_trap_assert_failed(); /* we have fatal-warnings enabled */
+  g_test_trap_assert_stderr ("*g_print*assertion*failed*");
+  g_test_trap_assert_stderr ("*NULL*");
+}
+
+static void
+timer_tests (void)
+{
+  GTimer *timer, *timer2;
+  gdouble elapsed;
+
+  /* basic testing */
+  timer = g_timer_new ();
+  g_timer_start (timer);
+  elapsed = g_timer_elapsed (timer, NULL);
+  g_timer_stop (timer);
+  g_assert_cmpfloat (elapsed, <=, g_timer_elapsed (timer, NULL));
+  g_timer_destroy (timer);
+
+  if (g_test_slow())
+    {
+      if (g_test_verbose())
+        g_print ("checking timers...\n");
+      timer = g_timer_new ();
+      if (g_test_verbose())
+        g_print ("  spinning for 3 seconds...\n");
+      g_timer_start (timer);
+      while (g_timer_elapsed (timer, NULL) < 3)
+        ;
+      g_timer_stop (timer);
+      g_timer_destroy (timer);
+      if (g_test_verbose())
+        g_print ("ok\n");
+    }
+
+  if (g_test_slow())
+    {
+      gulong elapsed_usecs;
+      if (g_test_verbose())
+        g_print ("checking g_timer_continue...\n");
+      timer2 = g_timer_new ();
+      if (g_test_verbose())
+        g_print ("\trun for 1 second...\n");
+      timer = g_timer_new();
+      g_usleep (G_USEC_PER_SEC); /* run timer for 1 second */
+      g_timer_stop (timer);
+      if (g_test_verbose())
+        g_print ("\tstop for 1 second...\n");
+      g_usleep (G_USEC_PER_SEC); /* wait for 1 second */
+      if (g_test_verbose())
+        g_print ("\trun for 2 seconds...\n");
+      g_timer_continue (timer);
+      g_usleep (2 * G_USEC_PER_SEC); /* run timer for 2 seconds */
+      g_timer_stop(timer);
+      if (g_test_verbose())
+        g_print ("\tstop for 1.5 seconds...\n");
+      g_usleep ((3 * G_USEC_PER_SEC) / 2); /* wait for 1.5 seconds */
+      if (g_test_verbose())
+        g_print ("\trun for 0.2 seconds...\n");
+      g_timer_continue (timer);
+      g_usleep (G_USEC_PER_SEC / 5); /* run timer for 0.2 seconds */
+      g_timer_stop (timer);
+      if (g_test_verbose())
+        g_print ("\tstop for 4 seconds...\n");
+      g_usleep (4 * G_USEC_PER_SEC); /* wait for 4 seconds */
+      if (g_test_verbose())
+        g_print ("\trun for 5.8 seconds...\n");
+      g_timer_continue (timer);
+      g_usleep ((29 * G_USEC_PER_SEC) / 5); /* run timer for 5.8 seconds */
+      g_timer_stop(timer);
+      elapsed = g_timer_elapsed (timer, &elapsed_usecs);
+      if (g_test_verbose())
+        g_print ("\t=> timer = %.6f = %d.%06ld (should be: 9.000000) (%.6f off)\n", elapsed, (int) elapsed, elapsed_usecs, ABS (elapsed - 9.));
+      g_assert_cmpfloat (elapsed, >, 8.8);
+      g_assert_cmpfloat (elapsed, <, 9.2);
+      if (g_test_verbose())
+        g_print ("g_timer_continue ... ok\n\n");
+      g_timer_stop (timer2);
+      elapsed = g_timer_elapsed (timer2, &elapsed_usecs);
+      if (g_test_verbose())
+        g_print ("\t=> timer2 = %.6f = %d.%06ld (should be: %.6f) (%.6f off)\n\n", elapsed, (int) elapsed, elapsed_usecs, 9.+6.5, ABS (elapsed - (9.+6.5)));
+      g_assert_cmpfloat (elapsed, >, 8.8 + 6.5);
+      g_assert_cmpfloat (elapsed, <, 9.2 + 6.5);
+      if (g_test_verbose())
+        g_print ("timer2 ... ok\n\n");
+      g_timer_destroy (timer);
+      g_timer_destroy (timer2);
+    }
+}
+
+static void
+type_sizes (void)
+{
+  guint16 gu16t1 = 0x44afU, gu16t2 = 0xaf44U;
+  guint32 gu32t1 = 0x02a7f109U, gu32t2 = 0x09f1a702U;
+  guint64 gu64t1 = G_GINT64_CONSTANT(0x1d636b02300a7aa7U),
+	  gu64t2 = G_GINT64_CONSTANT(0xa77a0a30026b631dU);
+  /* type sizes */
+  g_assert_cmpint (sizeof (gint8), ==, 1);
+  g_assert_cmpint (sizeof (gint16), ==, 2);
+  g_assert_cmpint (sizeof (gint32), ==, 4);
+  g_assert_cmpint (sizeof (gint64), ==, 8);
+  /* endian macros */
+  if (g_test_verbose())
+    g_print ("checking endian macros (host is %s)...\n",
+             G_BYTE_ORDER == G_BIG_ENDIAN ? "big endian" : "little endian");
+  g_assert (GUINT16_SWAP_LE_BE (gu16t1) == gu16t2);
+  g_assert (GUINT32_SWAP_LE_BE (gu32t1) == gu32t2);
+  g_assert (GUINT64_SWAP_LE_BE (gu64t1) == gu64t2);
+}
+
+static void
+test_info (void)
+{
+  const gchar *un, *rn, *hn;
+  const gchar *tmpdir, *homedir, *userdatadir, *uconfdir, *ucachedir;
+  const gchar *uddesktop, *udddocs, *uddpubshare;
+  gchar **sv, *cwd, *sdatadirs, *sconfdirs, *langnames;
+  if (g_test_verbose())
+    g_print ("TestGLib v%u.%u.%u (i:%u b:%u)\n",
+             glib_major_version,
+             glib_minor_version,
+             glib_micro_version,
+             glib_interface_age,
+             glib_binary_age);
+
+  cwd = g_get_current_dir ();
+  un = g_get_user_name();
+  rn = g_get_real_name();
+  hn = g_get_host_name();
+  if (g_test_verbose())
+    {
+      g_print ("cwd: %s\n", cwd);
+      g_print ("user: %s\n", un);
+      g_print ("real: %s\n", rn);
+      g_print ("host: %s\n", hn);
+    }
+  g_free (cwd);
+
+  tmpdir = g_get_tmp_dir();
+  g_assert (tmpdir != NULL);
+  homedir = g_get_home_dir ();
+  g_assert (homedir != NULL);
+  userdatadir = g_get_user_data_dir ();
+  g_assert (userdatadir != NULL);
+  uconfdir = g_get_user_config_dir ();
+  g_assert (uconfdir != NULL);
+  ucachedir = g_get_user_cache_dir ();
+  g_assert (ucachedir != NULL);
+
+  uddesktop = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
+  g_assert (uddesktop != NULL);
+  udddocs = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+  uddpubshare = g_get_user_special_dir (G_USER_DIRECTORY_PUBLIC_SHARE);
+
+  sv = (gchar **) g_get_system_data_dirs ();
+  sdatadirs = g_strjoinv (G_SEARCHPATH_SEPARATOR_S, sv);
+  sv = (gchar **) g_get_system_config_dirs ();
+  sconfdirs = g_strjoinv (G_SEARCHPATH_SEPARATOR_S, sv);
+  sv = (gchar **) g_get_language_names ();
+  langnames = g_strjoinv (":", sv);
+
+  if (g_test_verbose())
+    {
+      g_print ("tmp-dir: %s\n", tmpdir);
+      g_print ("home: %s\n", homedir);
+      g_print ("user_data: %s\n", userdatadir);
+      g_print ("user_config: %s\n", uconfdir);
+      g_print ("user_cache: %s\n", ucachedir);
+      g_print ("system_data: %s\n", sdatadirs);
+      g_print ("system_config: %s\n", sconfdirs);
+      g_print ("languages: %s\n", langnames);
+      g_print ("user_special[DESKTOP]: %s\n", uddesktop);
+      g_print ("user_special[DOCUMENTS]: %s\n", udddocs);
+      g_print ("user_special[PUBLIC_SHARE]: %s\n", uddpubshare);
+    }
+  g_free (sdatadirs);
+  g_free (sconfdirs);
+  g_free (langnames);
+  
+  if (g_test_verbose())
+    {
+#ifdef G_PLATFORM_WIN32
+      gchar *glib_dll;
+#endif
+      const gchar *charset;
+      if (g_get_charset ((G_CONST_RETURN char**)&charset))
+        g_print ("current charset is UTF-8: %s\n", charset);
+      else
+        g_print ("current charset is not UTF-8: %s\n", charset);
+
+#ifdef G_PLATFORM_WIN32
+#ifdef G_OS_WIN32
+      /* Can't calculate GLib DLL name at runtime. */
+      glib_dll = "libglib-2.0-0.dll";
+#endif
+#ifdef G_WITH_CYGWIN
+      glib_dll = "cygglib-2.0-0.dll";
+#endif
+
+      g_print ("current locale: %s\n", g_win32_getlocale ());
+      g_print ("GLib DLL name tested for: %s\n", glib_dll);
+
+      g_print ("GLib installation directory, from Registry entry for %s if available: %s\n",
+               GETTEXT_PACKAGE,
+               g_win32_get_package_installation_directory (GETTEXT_PACKAGE, NULL));
+      g_print ("Ditto, or from GLib DLL name: %s\n",
+               g_win32_get_package_installation_directory (GETTEXT_PACKAGE, glib_dll));
+      g_print ("Ditto, only from GLib DLL name: %s\n",
+               g_win32_get_package_installation_directory (NULL, glib_dll));
+      g_print ("locale subdirectory of GLib installation directory: %s\n",
+               g_win32_get_package_installation_subdirectory (NULL, glib_dll, "lib\\locale"));
+      g_print ("GTK+ 2.0 installation directory, if available: %s\n",
+               g_win32_get_package_installation_directory ("gtk20", NULL));
+
+      g_print ("found more.com as %s\n", g_find_program_in_path ("more.com"));
+      g_print ("found regedit as %s\n", g_find_program_in_path ("regedit"));
+
+      g_print ("a Win32 error message: %s\n", g_win32_error_message (2));
+#endif
+    }
+}
+
+static void
+test_paths (void)
+{
+  struct {
+    gchar *filename;
+    gchar *dirname;
+  } dirname_checks[] = {
+    { "/", "/" },
+    { "////", "/" },
+    { ".////", "." },
+    { "../", ".." },
+    { "..////", ".." },
+    { "a/b", "a" },
+    { "a/b/", "a/b" },
+    { "c///", "c" },
+#ifdef G_OS_WIN32
+    { "\\", "\\" },
+    { ".\\\\\\\\", "." },
+    { "..\\", ".." },
+    { "..\\\\\\\\", ".." },
+    { "a\\b", "a" },
+    { "a\\b/", "a\\b" },
+    { "a/b\\", "a/b" },
+    { "c\\\\/", "c" },
+    { "//\\", "/" },
+#endif
+#ifdef G_WITH_CYGWIN
+    { "//server/share///x", "//server/share" },
+#endif
+    { ".", "." },
+    { "..", "." },
+    { "", "." },
+  };
+  const guint n_dirname_checks = G_N_ELEMENTS (dirname_checks);
+  struct {
+    gchar *filename;
+    gchar *without_root;
+  } skip_root_checks[] = {
+    { "/", "" },
+    { "//", "" },
+    { "/foo", "foo" },
+    { "//foo", "foo" },
+    { "a/b", NULL },
+#ifdef G_OS_WIN32
+    { "\\", "" },
+    { "\\foo", "foo" },
+    { "\\\\server\\foo", "" },
+    { "\\\\server\\foo\\bar", "bar" },
+    { "a\\b", NULL },
+#endif
+#ifdef G_WITH_CYGWIN
+    { "//server/share///x", "//x" },
+#endif
+    { ".", NULL },
+    { "", NULL },
+  };
+  const guint n_skip_root_checks = G_N_ELEMENTS (skip_root_checks);
+  gchar *string;
+  guint i;
+  if (g_test_verbose())
+    g_print ("checking g_path_get_basename()...");
+  string = g_path_get_basename (G_DIR_SEPARATOR_S "foo" G_DIR_SEPARATOR_S "dir" G_DIR_SEPARATOR_S);
+  g_assert (strcmp (string, "dir") == 0);
+  g_free (string);
+  string = g_path_get_basename (G_DIR_SEPARATOR_S "foo" G_DIR_SEPARATOR_S "file");
+  g_assert (strcmp (string, "file") == 0);
+  g_free (string);
+  if (g_test_verbose())
+    g_print ("ok\n");
+
+#ifdef G_OS_WIN32
+  string = g_path_get_basename ("/foo/dir/");
+  g_assert (strcmp (string, "dir") == 0);
+  g_free (string);
+  string = g_path_get_basename ("/foo/file");
+  g_assert (strcmp (string, "file") == 0);
+  g_free (string);
+#endif
+
+  if (g_test_verbose())
+    g_print ("checking g_path_get_dirname()...");
+  for (i = 0; i < n_dirname_checks; i++)
+    {
+      gchar *dirname = g_path_get_dirname (dirname_checks[i].filename);
+      if (strcmp (dirname, dirname_checks[i].dirname) != 0)
+	{
+	  g_error ("\nfailed for \"%s\"==\"%s\" (returned: \"%s\")\n",
+		   dirname_checks[i].filename,
+		   dirname_checks[i].dirname,
+		   dirname);
+	}
+      g_free (dirname);
+    }
+  if (g_test_verbose())
+    g_print ("ok\n");
+
+  if (g_test_verbose())
+    g_print ("checking g_path_skip_root()...");
+  for (i = 0; i < n_skip_root_checks; i++)
+    {
+      const gchar *skipped = g_path_skip_root (skip_root_checks[i].filename);
+      if ((skipped && !skip_root_checks[i].without_root) ||
+	  (!skipped && skip_root_checks[i].without_root) ||
+	  ((skipped && skip_root_checks[i].without_root) &&
+	   strcmp (skipped, skip_root_checks[i].without_root)))
+	{
+	  g_error ("\nfailed for \"%s\"==\"%s\" (returned: \"%s\")\n",
+		   skip_root_checks[i].filename,
+		   (skip_root_checks[i].without_root ?
+		    skip_root_checks[i].without_root : "<NULL>"),
+		   (skipped ? skipped : "<NULL>"));
+	}
+    }
+  if (g_test_verbose())
+    g_print ("ok\n");
+}
+
+static void
+test_file_functions (void)
+{
+  const char hello[] = "Hello, World";
+  const int hellolen = sizeof (hello) - 1;
+  GError *error;
+  char template[32];
+  char *name_used, chars[62];
+  gint fd, n;
+  
+  strcpy (template, "foobar");
+  fd = g_mkstemp (template);
+  if (g_test_verbose() && fd != -1)
+    g_print ("g_mkstemp works even if template doesn't end in XXXXXX\n");
+  close (fd);
+  strcpy (template, "fooXXXXXX");
+  fd = g_mkstemp (template);
+  if (fd == -1)
+    g_error ("g_mkstemp didn't work for template %s\n", template);
+  n = write (fd, hello, hellolen);
+  if (n == -1)
+    g_error ("write() failed: %s\n", g_strerror (errno));
+  else if (n != hellolen)
+    g_error ("write() should have written %d bytes, wrote %d\n", hellolen, n);
+
+  lseek (fd, 0, 0);
+  n = read (fd, chars, sizeof (chars));
+  if (n == -1)
+    g_error ("read() failed: %s\n", g_strerror (errno));
+  else if (n != hellolen)
+    g_error ("read() should have read %d bytes, got %d\n", hellolen, n);
+
+  chars[n] = 0;
+  if (strcmp (chars, hello) != 0)
+    g_error ("wrote '%s', but got '%s'\n", hello, chars);
+
+  close (fd);
+  remove (template);
+
+  error = NULL;
+  strcpy (template, "zap" G_DIR_SEPARATOR_S "barXXXXXX");
+  fd = g_file_open_tmp (template, &name_used, &error);
+  if (g_test_verbose())
+    {
+      if (fd != -1)
+        g_print ("g_file_open_tmp works even if template contains '%s'\n", G_DIR_SEPARATOR_S);
+      else
+        g_print ("g_file_open_tmp correctly returns error: %s\n", error->message);
+    }
+  close (fd);
+  g_clear_error (&error);
+
+#ifdef G_OS_WIN32
+  strcpy (template, "zap/barXXXXXX");
+  fd = g_file_open_tmp (template, &name_used, &error);
+  if (g_test_verbose())
+    {
+      if (fd != -1)
+        g_print ("g_file_open_tmp works even if template contains '/'\n");
+      else
+        g_print ("g_file_open_tmp correctly returns error: %s\n", error->message);
+    }
+  close (fd);
+  g_clear_error (&error);
+#endif
+
+  strcpy (template, "zapXXXXXX");
+  fd = g_file_open_tmp (template, &name_used, &error);
+  if (fd == -1)
+    g_error ("g_file_open_tmp didn't work for template '%s': %s\n", template, error->message);
+  else if (g_test_verbose())
+    g_print ("g_file_open_tmp for template '%s' used name '%s'\n", template, name_used);
+  close (fd);
+  g_clear_error (&error);
+  remove (name_used);
+
+  fd = g_file_open_tmp (NULL, &name_used, &error);
+  if (fd == -1)
+    g_error ("g_file_open_tmp didn't work for a NULL template: %s\n", error->message);
+  close (fd);
+  g_clear_error (&error);
+  remove (name_used);
+}
+
+static void
+test_arrays (void)
+{
+  GByteArray *gbarray;
+  GPtrArray *gparray;
+  GArray *garray;
+  guint i;
+
+  gparray = g_ptr_array_new ();
+  for (i = 0; i < 10000; i++)
+    g_ptr_array_add (gparray, GINT_TO_POINTER (i));
+  for (i = 0; i < 10000; i++)
+    if (g_ptr_array_index (gparray, i) != GINT_TO_POINTER (i))
+      g_error ("array fails: %p ( %p )\n", g_ptr_array_index (gparray, i), GINT_TO_POINTER (i));
+  g_ptr_array_free (gparray, TRUE);
+
+  gbarray = g_byte_array_new ();
+  for (i = 0; i < 10000; i++)
+    g_byte_array_append (gbarray, (guint8*) "abcd", 4);
+  for (i = 0; i < 10000; i++)
+    {
+      g_assert (gbarray->data[4*i] == 'a');
+      g_assert (gbarray->data[4*i+1] == 'b');
+      g_assert (gbarray->data[4*i+2] == 'c');
+      g_assert (gbarray->data[4*i+3] == 'd');
+    }
+  g_byte_array_free (gbarray, TRUE);
+
+  garray = g_array_new (FALSE, FALSE, sizeof (gint));
+  for (i = 0; i < 10000; i++)
+    g_array_append_val (garray, i);
+  for (i = 0; i < 10000; i++)
+    if (g_array_index (garray, gint, i) != i)
+      g_error ("failure: %d ( %d )\n", g_array_index (garray, gint, i), i);
+  g_array_free (garray, TRUE);
+
+  garray = g_array_new (FALSE, FALSE, sizeof (gint));
+  for (i = 0; i < 100; i++)
+    g_array_prepend_val (garray, i);
+  for (i = 0; i < 100; i++)
+    if (g_array_index (garray, gint, i) != (100 - i - 1))
+      g_error ("failure: %d ( %d )\n", g_array_index (garray, gint, i), 100 - i - 1);
+  g_array_free (garray, TRUE);
+}
+
+static void
+hash_table_tests (void)
+{
+  GHashTable *hash_table;
+  int array[10000];
+  gint *pvalue = NULL;
+  gint value = 120;
+  guint i;
+
+  hash_table = g_hash_table_new (my_hash, my_hash_equal);
+  for (i = 0; i < 10000; i++)
+    {
+      array[i] = i;
+      g_hash_table_insert (hash_table, &array[i], &array[i]);
+    }
+  pvalue = g_hash_table_find (hash_table, find_first_that, &value);
+  if (*pvalue != value)
+    g_error ("g_hash_table_find failed");
+  g_hash_table_foreach (hash_table, my_hash_callback, NULL);
+  for (i = 0; i < 10000; i++)
+    if (array[i] == 0)
+      g_error ("hashtable-test: wrong value: %d\n", i);
+  for (i = 0; i < 10000; i++)
+    g_hash_table_remove (hash_table, &array[i]);
+  for (i = 0; i < 10000; i++)
+    {
+      array[i] = i;
+      g_hash_table_insert (hash_table, &array[i], &array[i]);
+    }
+  if (g_hash_table_foreach_remove (hash_table, my_hash_callback_remove, NULL) != 5000 ||
+      g_hash_table_size (hash_table) != 5000)
+    g_error ("hashtable removal failed\n");
+  g_hash_table_foreach (hash_table, my_hash_callback_remove_test, NULL);
+  g_hash_table_destroy (hash_table);
+}
+
+static void
+relation_test (void)
+{
+  GRelation *relation = g_relation_new (2);
+  GTuples *tuples;
+  gint data [1024];
+  guint i;
+
+  g_relation_index (relation, 0, g_int_hash, g_int_equal);
+  g_relation_index (relation, 1, g_int_hash, g_int_equal);
+
+  for (i = 0; i < 1024; i += 1)
+    data[i] = i;
+
+  for (i = 1; i < 1023; i += 1)
+    {
+      g_relation_insert (relation, data + i, data + i + 1);
+      g_relation_insert (relation, data + i, data + i - 1);
+    }
+
+  for (i = 2; i < 1022; i += 1)
+    {
+      g_assert (! g_relation_exists (relation, data + i, data + i));
+      g_assert (! g_relation_exists (relation, data + i, data + i + 2));
+      g_assert (! g_relation_exists (relation, data + i, data + i - 2));
+    }
+
+  for (i = 1; i < 1023; i += 1)
+    {
+      g_assert (g_relation_exists (relation, data + i, data + i + 1));
+      g_assert (g_relation_exists (relation, data + i, data + i - 1));
+    }
+
+  for (i = 2; i < 1022; i += 1)
+    {
+      g_assert (g_relation_count (relation, data + i, 0) == 2);
+      g_assert (g_relation_count (relation, data + i, 1) == 2);
+    }
+
+  g_assert (g_relation_count (relation, data, 0) == 0);
+
+  g_assert (g_relation_count (relation, data + 42, 0) == 2);
+  g_assert (g_relation_count (relation, data + 43, 1) == 2);
+  g_assert (g_relation_count (relation, data + 41, 1) == 2);
+  g_relation_delete (relation, data + 42, 0);
+  g_assert (g_relation_count (relation, data + 42, 0) == 0);
+  g_assert (g_relation_count (relation, data + 43, 1) == 1);
+  g_assert (g_relation_count (relation, data + 41, 1) == 1);
+
+  tuples = g_relation_select (relation, data + 200, 0);
+
+  g_assert (tuples->len == 2);
+
+#if 0
+  for (i = 0; i < tuples->len; i += 1)
+    {
+      printf ("%d %d\n",
+	      *(gint*) g_tuples_index (tuples, i, 0),
+	      *(gint*) g_tuples_index (tuples, i, 1));
+    }
+#endif
+
+  g_assert (g_relation_exists (relation, data + 300, data + 301));
+  g_relation_delete (relation, data + 300, 0);
+  g_assert (!g_relation_exists (relation, data + 300, data + 301));
+
+  g_tuples_destroy (tuples);
+
+  g_relation_destroy (relation);
+
+  relation = NULL;
+}
+
+static void
+gstring_tests (void)
+{
+  GString *string1, *string2;
+  guint i;
+
+  if (g_test_verbose())
+    g_print ("test GString basics\n");
+
+  string1 = g_string_new ("hi pete!");
+  string2 = g_string_new ("");
+
+  g_assert (strcmp ("hi pete!", string1->str) == 0);
+
+  for (i = 0; i < 10000; i++)
+    g_string_append_c (string1, 'a'+(i%26));
+
+#ifndef G_OS_WIN32
+  /* MSVC, mingw32 and LCC use the same run-time C library, which doesn't like
+     the %10000.10000f format... */
+  g_string_printf (string2, "%s|%0100d|%s|%s|%0*d|%*.*f|%10000.10000f",
+		   "this pete guy sure is a wuss, like he's the number ",
+		   1,
+		   " wuss.  everyone agrees.\n",
+		   string1->str,
+		   10, 666, 15, 15, 666.666666666, 666.666666666);
+#else
+  g_string_printf (string2, "%s|%0100d|%s|%s|%0*d|%*.*f|%100.100f",
+		   "this pete guy sure is a wuss, like he's the number ",
+		   1,
+		   " wuss.  everyone agrees.\n",
+		   string1->str,
+		   10, 666, 15, 15, 666.666666666, 666.666666666);
+#endif
+
+  if (g_test_verbose())
+    g_print ("string2 length = %lu...\n", (gulong)string2->len);
+  string2->str[70] = '\0';
+  if (g_test_verbose())
+    g_print ("first 70 chars:\n%s\n", string2->str);
+  string2->str[141] = '\0';
+  if (g_test_verbose())
+    g_print ("next 70 chars:\n%s\n", string2->str+71);
+  string2->str[212] = '\0';
+  if (g_test_verbose())
+    g_print ("and next 70:\n%s\n", string2->str+142);
+  if (g_test_verbose())
+    g_print ("last 70 chars:\n%s\n", string2->str+string2->len - 70);
+
+  g_string_free (string1, TRUE);
+  g_string_free (string2, TRUE);
+
+  /* append */
+  string1 = g_string_new ("firsthalf");
+  g_string_append (string1, "lasthalf");
+  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
+  g_string_free (string1, TRUE);
+
+  /* append_len */
+  string1 = g_string_new ("firsthalf");
+  g_string_append_len (string1, "lasthalfjunkjunk", strlen ("lasthalf"));
+  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
+  g_string_free (string1, TRUE);
+
+  /* prepend */
+  string1 = g_string_new ("lasthalf");
+  g_string_prepend (string1, "firsthalf");
+  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
+  g_string_free (string1, TRUE);
+
+  /* prepend_len */
+  string1 = g_string_new ("lasthalf");
+  g_string_prepend_len (string1, "firsthalfjunkjunk", strlen ("firsthalf"));
+  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
+  g_string_free (string1, TRUE);
+
+  /* insert */
+  string1 = g_string_new ("firstlast");
+  g_string_insert (string1, 5, "middle");
+  g_assert (strcmp (string1->str, "firstmiddlelast") == 0);
+  g_string_free (string1, TRUE);
+
+  /* insert with pos == end of the string */
+  string1 = g_string_new ("firstmiddle");
+  g_string_insert (string1, strlen ("firstmiddle"), "last");
+  g_assert (strcmp (string1->str, "firstmiddlelast") == 0);
+  g_string_free (string1, TRUE);
+
+  /* insert_len */
+  string1 = g_string_new ("firstlast");
+  g_string_insert_len (string1, 5, "middlejunkjunk", strlen ("middle"));
+  g_assert (strcmp (string1->str, "firstmiddlelast") == 0);
+  g_string_free (string1, TRUE);
+
+  /* insert_len with magic -1 pos for append */
+  string1 = g_string_new ("first");
+  g_string_insert_len (string1, -1, "lastjunkjunk", strlen ("last"));
+  g_assert (strcmp (string1->str, "firstlast") == 0);
+  g_string_free (string1, TRUE);
+
+  /* insert_len with magic -1 len for strlen-the-string */
+  string1 = g_string_new ("first");
+  g_string_insert_len (string1, 5, "last", -1);
+  g_assert (strcmp (string1->str, "firstlast") == 0);
+  g_string_free (string1, TRUE);
+
+  /* g_string_equal */
+  string1 = g_string_new ("test");
+  string2 = g_string_new ("te");
+  g_assert (! g_string_equal(string1, string2));
+  g_string_append (string2, "st");
+  g_assert (g_string_equal(string1, string2));
+  g_string_free (string1, TRUE);
+  g_string_free (string2, TRUE);
+
+  /* Check handling of embedded ASCII 0 (NUL) characters in GString. */
+  if (g_test_verbose())
+    g_print ("test embedded ASCII 0 (NUL) characters in GString\n");
+  string1 = g_string_new ("fiddle");
+  string2 = g_string_new ("fiddle");
+  g_assert (g_string_equal(string1, string2));
+  g_string_append_c(string1, '\0');
+  g_assert (! g_string_equal(string1, string2));
+  g_string_append_c(string2, '\0');
+  g_assert (g_string_equal(string1, string2));
+  g_string_append_c(string1, 'x');
+  g_string_append_c(string2, 'y');
+  g_assert (! g_string_equal(string1, string2));
+  g_assert (string1->len == 8);
+  g_string_append(string1, "yzzy");
+  g_assert (string1->len == 12);
+  g_assert ( memcmp(string1->str, "fiddle\0xyzzy", 13) == 0);
+  g_string_insert(string1, 1, "QED");
+  g_assert ( memcmp(string1->str, "fQEDiddle\0xyzzy", 16) == 0);
+  g_string_free (string1, TRUE);
+  g_string_free (string2, TRUE);
+}
+
+static void
+various_string_tests (void)
+{
+  GStringChunk *string_chunk;
+  GTimeVal ref_date, date;
+  gchar *tmp_string = NULL, *tmp_string_2, *string, *date_str;
+  guint i;
+
+  if (g_test_verbose())
+    g_print ("checking string chunks...");
+  string_chunk = g_string_chunk_new (1024);
+  for (i = 0; i < 100000; i ++)
+    {
+      tmp_string = g_string_chunk_insert (string_chunk, "hi pete");
+      if (strcmp ("hi pete", tmp_string) != 0)
+	g_error ("string chunks are broken.\n");
+    }
+  tmp_string_2 = g_string_chunk_insert_const (string_chunk, tmp_string);
+  g_assert (tmp_string_2 != tmp_string && strcmp (tmp_string_2, tmp_string) == 0);
+  tmp_string = g_string_chunk_insert_const (string_chunk, tmp_string);
+  g_assert (tmp_string_2 == tmp_string);
+  g_string_chunk_free (string_chunk);
+
+  if (g_test_verbose())
+    g_print ("test positional printf formats (not supported):");
+  string = g_strdup_printf ("%.*s%s", 5, "a", "b");
+  tmp_string = g_strdup_printf ("%2$*1$s", 5, "c");
+  if (g_test_verbose())
+    g_print ("%s%s\n", string, tmp_string);
+  g_free (tmp_string);
+  g_free (string);
+
+#define REF_INVALID1      "Wed Dec 19 17:20:20 GMT 2007"
+#define REF_INVALID2      "1980-02-22T10:36:00Zulu"
+#define REF_SEC_UTC       320063760
+#define REF_STR_UTC       "1980-02-22T10:36:00Z"
+#define REF_STR_CEST      "1980-02-22T12:36:00+02:00"
+#define REF_STR_EST       "19800222T053600-0500"
+#define REF_STR_NST       "1980-02-22T07:06:00-03:30"
+#define REF_USEC_UTC      50000
+#define REF_STR_USEC_UTC  "1980-02-22T10:36:00.050000Z"
+#define REF_STR_USEC_CEST "19800222T123600.050000000+0200"
+#define REF_STR_USEC_EST  "1980-02-22T05:36:00,05-05:00"
+#define REF_STR_USEC_NST  "19800222T070600,0500-0330"
+
+  if (g_test_verbose())
+    g_print ("checking g_time_val_from_iso8601...\n");
+  ref_date.tv_sec = REF_SEC_UTC;
+  ref_date.tv_usec = 0;
+  g_assert (g_time_val_from_iso8601 (REF_INVALID1, &date) == FALSE);
+  g_assert (g_time_val_from_iso8601 (REF_INVALID2, &date) == FALSE);
+  g_assert (g_time_val_from_iso8601 (REF_STR_UTC, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> UTC stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  g_assert (g_time_val_from_iso8601 (REF_STR_CEST, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> CEST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  g_assert (g_time_val_from_iso8601 (REF_STR_EST, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> EST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  g_assert (g_time_val_from_iso8601 (REF_STR_NST, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> NST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  ref_date.tv_usec = REF_USEC_UTC;
+  g_assert (g_time_val_from_iso8601 (REF_STR_USEC_UTC, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> UTC stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  g_assert (g_time_val_from_iso8601 (REF_STR_USEC_CEST, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> CEST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  g_assert (g_time_val_from_iso8601 (REF_STR_USEC_EST, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> EST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  g_assert (g_time_val_from_iso8601 (REF_STR_USEC_NST, &date) != FALSE);
+  if (g_test_verbose())
+    g_print ("\t=> NST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+             date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+             date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+  g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+  if (g_test_verbose())
+    g_print ("checking g_time_val_to_iso8601...\n");
+  ref_date.tv_sec = REF_SEC_UTC;
+  ref_date.tv_usec = 0;
+  date_str = g_time_val_to_iso8601 (&ref_date);
+  g_assert (date_str != NULL);
+  if (g_test_verbose())
+    g_print ("\t=> date string = %s (should be: %s)\n", date_str, REF_STR_UTC);
+  g_assert (strcmp (date_str, REF_STR_UTC) == 0);
+  g_free (date_str);
+
+  ref_date.tv_usec = REF_USEC_UTC;
+  date_str = g_time_val_to_iso8601 (&ref_date);
+  g_assert (date_str != NULL);
+  if (g_test_verbose())
+    g_print ("\t=> date string = %s (should be: %s)\n", date_str, REF_STR_USEC_UTC);
+  g_assert (strcmp (date_str, REF_STR_USEC_UTC) == 0);
+  g_free (date_str);
+
+  if (g_test_verbose())
+    g_print ("checking g_ascii_strcasecmp...");
+  g_assert (g_ascii_strcasecmp ("FroboZZ", "frobozz") == 0);
+  g_assert (g_ascii_strcasecmp ("frobozz", "frobozz") == 0);
+  g_assert (g_ascii_strcasecmp ("frobozz", "FROBOZZ") == 0);
+  g_assert (g_ascii_strcasecmp ("FROBOZZ", "froboz") > 0);
+  g_assert (g_ascii_strcasecmp ("", "") == 0);
+  g_assert (g_ascii_strcasecmp ("!#%&/()", "!#%&/()") == 0);
+  g_assert (g_ascii_strcasecmp ("a", "b") < 0);
+  g_assert (g_ascii_strcasecmp ("a", "B") < 0);
+  g_assert (g_ascii_strcasecmp ("A", "b") < 0);
+  g_assert (g_ascii_strcasecmp ("A", "B") < 0);
+  g_assert (g_ascii_strcasecmp ("b", "a") > 0);
+  g_assert (g_ascii_strcasecmp ("b", "A") > 0);
+  g_assert (g_ascii_strcasecmp ("B", "a") > 0);
+  g_assert (g_ascii_strcasecmp ("B", "A") > 0);
+
+  if (g_test_verbose())
+    g_print ("checking g_strdup...\n");
+  g_assert (g_strdup (NULL) == NULL);
+  string = g_strdup (GLIB_TEST_STRING);
+  g_assert (string != NULL);
+  g_assert (strcmp(string, GLIB_TEST_STRING) == 0);
+  g_free (string);
+
+  if (g_test_verbose())
+    g_print ("checking g_strconcat...\n");
+  string = g_strconcat (GLIB_TEST_STRING, NULL);
+  g_assert (string != NULL);
+  g_assert (strcmp (string, GLIB_TEST_STRING) == 0);
+  g_free (string);
+  string = g_strconcat (GLIB_TEST_STRING, GLIB_TEST_STRING, 
+                        GLIB_TEST_STRING, NULL);
+  g_assert (string != NULL);
+  g_assert (strcmp (string, GLIB_TEST_STRING GLIB_TEST_STRING
+                    GLIB_TEST_STRING) == 0);
+  g_free (string);
+
+  if (g_test_verbose())
+    g_print ("checking g_strlcpy/g_strlcat...");
+  /* The following is a torture test for strlcpy/strlcat, with lots of
+   * checking; normal users wouldn't use them this way!
+   */
+  string = g_malloc (6);
+  *(string + 5) = 'Z'; /* guard value, shouldn't change during test */
+  *string = 'q';
+  g_assert (g_strlcpy(string, "" , 5) == 0);
+  g_assert ( *string == '\0' );
+  *string = 'q';
+  g_assert (g_strlcpy(string, "abc" , 5) == 3);
+  g_assert ( *(string + 3) == '\0' );
+  g_assert (g_str_equal(string, "abc"));
+  g_assert (g_strlcpy(string, "abcd" , 5) == 4);
+  g_assert ( *(string + 4) == '\0' );
+  g_assert ( *(string + 5) == 'Z' );
+  g_assert (g_str_equal(string, "abcd"));
+  g_assert (g_strlcpy(string, "abcde" , 5) == 5);
+  g_assert ( *(string + 4) == '\0' );
+  g_assert ( *(string + 5) == 'Z' );
+  g_assert (g_str_equal(string, "abcd"));
+  g_assert (g_strlcpy(string, "abcdef" , 5) == 6);
+  g_assert ( *(string + 4) == '\0' );
+  g_assert ( *(string + 5) == 'Z' );
+  g_assert (g_str_equal(string, "abcd"));
+  *string = 'Y';
+  *(string + 1)= '\0';
+  g_assert (g_strlcpy(string, "Hello" , 0) == 5);
+  g_assert (*string == 'Y');
+  *string = '\0';
+  g_assert (g_strlcat(string, "123" , 5) == 3);
+  g_assert ( *(string + 3) == '\0' );
+  g_assert (g_str_equal(string, "123"));
+  g_assert (g_strlcat(string, "" , 5) == 3);
+  g_assert ( *(string + 3) == '\0' );
+  g_assert (g_str_equal(string, "123"));
+  g_assert (g_strlcat(string, "4", 5) == 4);
+  g_assert (g_str_equal(string, "1234"));
+  g_assert (g_strlcat(string, "5", 5) == 5);
+  g_assert ( *(string + 4) == '\0' );
+  g_assert (g_str_equal(string, "1234"));
+  g_assert ( *(string + 5) == 'Z' );
+  *string = 'Y';
+  *(string + 1)= '\0';
+  g_assert (g_strlcat(string, "123" , 0) == 3);
+  g_assert (*string == 'Y');
+
+  /* A few more tests, demonstrating more "normal" use  */
+  g_assert (g_strlcpy(string, "hi", 5) == 2);
+  g_assert (g_str_equal(string, "hi"));
+  g_assert (g_strlcat(string, "t", 5) == 3);
+  g_assert (g_str_equal(string, "hit"));
+  g_free(string);
+
+  if (g_test_verbose())
+    g_print ("checking g_strdup_printf...\n");
+  string = g_strdup_printf ("%05d %-5s", 21, "test");
+  g_assert (string != NULL);
+  g_assert (strcmp(string, "00021 test ") == 0);
+  g_free (string);
+
+  /* g_debug (argv[0]); */
+}
+
+#ifndef G_DISABLE_DEPRECATED
+static void
+test_mem_chunks (void)
+{
+  GMemChunk *mem_chunk = g_mem_chunk_new ("test mem chunk", 50, 100, G_ALLOC_AND_FREE);
+  gchar *mem[10000];
+  guint i;
+  for (i = 0; i < 10000; i++)
+    {
+      guint j;
+      mem[i] = g_chunk_new (gchar, mem_chunk);
+      for (j = 0; j < 50; j++)
+	mem[i][j] = i * j;
+    }
+  for (i = 0; i < 10000; i++)
+    g_mem_chunk_free (mem_chunk, mem[i]);
+}
+#endif
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/testglib/Infos", test_info);
+  g_test_add_func ("/testglib/Types Sizes", type_sizes);
+  g_test_add_func ("/testglib/GStrings", gstring_tests);
+  g_test_add_func ("/testglib/Various Strings", various_string_tests);
+  g_test_add_func ("/testglib/GList", glist_test);
+  g_test_add_func ("/testglib/GSList", gslist_test);
+  g_test_add_func ("/testglib/GNode", gnode_test);
+  g_test_add_func ("/testglib/GTree", binary_tree_test);
+  g_test_add_func ("/testglib/Arrays", test_arrays);
+  g_test_add_func ("/testglib/GHashTable", hash_table_tests);
+  g_test_add_func ("/testglib/Relation", relation_test);
+  g_test_add_func ("/testglib/File Paths", test_paths);
+  g_test_add_func ("/testglib/File Functions", test_file_functions);
+  g_test_add_func ("/testglib/Parse Debug Strings", test_g_parse_debug_string);
+#ifndef G_DISABLE_DEPRECATED
+  g_test_add_func ("/testglib/GMemChunk (deprecated)", test_mem_chunks);
+#endif
+  g_test_add_func ("/testglib/Warnings & Errors", log_warning_error_tests);
+  g_test_add_func ("/testglib/Timers (slow)", timer_tests);
+
+  return g_test_run();
+}
diff --git a/tests/testingbase64.c b/tests/testingbase64.c
new file mode 100644
index 0000000..3e64d1a
--- /dev/null
+++ b/tests/testingbase64.c
@@ -0,0 +1,236 @@
+/* GLib testing framework examples and tests
+ * Copyright (C) 2008 Asbjoern Pettersen
+ *
+ * This work is provided "as is"; redistribution and modification
+ * in whole or in part, in any medium, physical or electronic is
+ * permitted without restriction.
+ *
+ * This work is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * In no event shall the authors or 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.
+ */
+
+#include <glib.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define DATA_SIZE 1024
+
+struct MyRawData
+{
+  gint length;   /* of data */
+  guchar data[DATA_SIZE];
+};
+
+/* 100 pre-encoded string from data[] buffer. Data length from 1..100
+ */
+static const char *ok_100_encode_strs[] = {
+  "AA==",
+  "AAE=",
+  "AAEC",
+  "AAECAw==",
+  "AAECAwQ=",
+  "AAECAwQF",
+  "AAECAwQFBg==",
+  "AAECAwQFBgc=",
+  "AAECAwQFBgcI",
+  "AAECAwQFBgcICQ==",
+  "AAECAwQFBgcICQo=",
+  "AAECAwQFBgcICQoL",
+  "AAECAwQFBgcICQoLDA==",
+  "AAECAwQFBgcICQoLDA0=",
+  "AAECAwQFBgcICQoLDA0O",
+  "AAECAwQFBgcICQoLDA0ODw==",
+  "AAECAwQFBgcICQoLDA0ODxA=",
+  "AAECAwQFBgcICQoLDA0ODxAR",
+  "AAECAwQFBgcICQoLDA0ODxAREg==",
+  "AAECAwQFBgcICQoLDA0ODxAREhM=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMU",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRY=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYX",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBk=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBka",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGw==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxw=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHg==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8g",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gIQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISI=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCU=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUm",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJw==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJyg=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygp",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKg==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKis=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKiss",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4v",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDE=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEy",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMw==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Ng==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0A=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQg==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkM=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNE",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUY=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZH",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSEk=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElK",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKSw==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0w=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTg==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk8=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVI=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFU=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVW",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWVw==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1g=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWg==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWls=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXQ==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV4=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5f",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYA==",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGE=",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFi",
+  "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiYw==",
+  NULL
+};
+
+static void
+generate_databuffer_for_base64 (struct MyRawData *p)
+{
+  int i;
+  for (i = 0; i < DATA_SIZE; i++)
+    p->data[i] = i;
+}
+
+static void
+test_base64_encode (void)
+{
+  int i;
+  gint length = 1;
+  char *text;
+  struct MyRawData myraw;
+
+  generate_databuffer_for_base64 (&myraw);
+
+  for (i = 0; ok_100_encode_strs[i]; i++)
+    {
+      length = i + 1;
+      text = g_base64_encode (myraw.data, length);
+      g_assert_cmpstr (text, ==, ok_100_encode_strs[i]);
+      /* printf ("\"%s\",\n",text); */
+      g_free (text);
+    }
+}
+
+
+static void
+decode_and_compare (const gchar            *datap,
+                    const struct MyRawData *p)
+{
+  guchar *data2;
+  gsize len;
+  int memcmp_decode;
+
+  data2 = g_base64_decode (datap, &len);
+  g_assert_cmpint (len, ==, p->length);
+  /* g_print ("length: got %d, expected %d\n",len, length); */
+  memcmp_decode = memcmp (p->data, data2, p->length);
+  g_assert_cmpint (memcmp_decode, ==, 0);
+  g_free (data2);
+}
+
+static void
+test_base64_decode (void)
+{
+  int i;
+  struct MyRawData myraw;
+
+  generate_databuffer_for_base64 (&myraw);
+
+  for (i = 0; ok_100_encode_strs[i]; i++)
+    {
+      myraw.length = i + 1;
+      decode_and_compare (ok_100_encode_strs[i], &myraw);
+    }
+}
+
+static void
+test_base64_encode_decode (void)
+{
+  int i;
+  char *text;
+  struct MyRawData myraw;
+
+  generate_databuffer_for_base64 (&myraw);
+
+  for (i = 0; i < DATA_SIZE; i++)
+    {
+      myraw.length = i + 1;
+      text = g_base64_encode (myraw.data, myraw.length);
+
+      decode_and_compare (text, &myraw);
+
+      g_free (text);
+    }
+}
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/misc/base64/encode", test_base64_encode);
+  g_test_add_func ("/misc/base64/decode", test_base64_decode);
+  g_test_add_func ("/misc/base64/encode_decode", test_base64_encode_decode);
+
+  return g_test_run();
+}
diff --git a/tests/thread-test.c b/tests/thread-test.c
new file mode 100644
index 0000000..63f7e02
--- /dev/null
+++ b/tests/thread-test.c
@@ -0,0 +1,402 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+
+/* GMutex */
+
+static GMutex* test_g_mutex_mutex = NULL;
+static guint test_g_mutex_int = 0;
+static gboolean test_g_mutex_thread_ready;
+G_LOCK_DEFINE_STATIC (test_g_mutex);
+
+static gpointer
+test_g_mutex_thread (gpointer data)
+{
+  g_assert (GPOINTER_TO_INT (data) == 42);
+  g_assert (g_mutex_trylock (test_g_mutex_mutex) == FALSE);
+  g_assert (G_TRYLOCK (test_g_mutex) == FALSE);
+  test_g_mutex_thread_ready = TRUE;
+  g_mutex_lock (test_g_mutex_mutex);
+  g_assert (test_g_mutex_int == 42);
+  g_mutex_unlock (test_g_mutex_mutex);
+
+  return GINT_TO_POINTER (41);
+}
+
+static void
+test_g_mutex (void)
+{
+  GThread *thread;
+  test_g_mutex_mutex = g_mutex_new ();
+
+  g_assert (g_mutex_trylock (test_g_mutex_mutex));
+  g_assert (G_TRYLOCK (test_g_mutex));
+  test_g_mutex_thread_ready = FALSE;
+  thread = g_thread_create (test_g_mutex_thread, GINT_TO_POINTER (42),
+			    TRUE, NULL);
+  /* This busy wait is only for testing purposes and not an example of
+   * good code!*/
+  while (!test_g_mutex_thread_ready)
+    g_usleep (G_USEC_PER_SEC / 5);
+  test_g_mutex_int = 42;
+  G_UNLOCK (test_g_mutex);
+  g_mutex_unlock (test_g_mutex_mutex);
+  g_assert (GPOINTER_TO_INT (g_thread_join (thread)) == 41);
+  g_mutex_free (test_g_mutex_mutex);
+}
+
+/* GStaticRecMutex */
+
+static GStaticRecMutex test_g_static_rec_mutex_mutex = G_STATIC_REC_MUTEX_INIT;
+static guint test_g_static_rec_mutex_int = 0;
+static gboolean test_g_static_rec_mutex_thread_ready;
+
+static gpointer
+test_g_static_rec_mutex_thread (gpointer data)
+{
+  g_assert (GPOINTER_TO_INT (data) == 42);
+  g_assert (g_static_rec_mutex_trylock (&test_g_static_rec_mutex_mutex) 
+	    == FALSE);
+  test_g_static_rec_mutex_thread_ready = TRUE;
+  g_static_rec_mutex_lock (&test_g_static_rec_mutex_mutex);
+  g_static_rec_mutex_lock (&test_g_static_rec_mutex_mutex);
+  g_assert (test_g_static_rec_mutex_int == 42);
+  test_g_static_rec_mutex_thread_ready = FALSE;
+  g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex);
+  g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex);
+
+  g_thread_exit (GINT_TO_POINTER (43));
+  
+  g_assert_not_reached ();
+  return NULL;
+}
+
+static void
+test_g_static_rec_mutex (void)
+{
+  GThread *thread;
+
+  g_assert (g_static_rec_mutex_trylock (&test_g_static_rec_mutex_mutex));
+  test_g_static_rec_mutex_thread_ready = FALSE;
+  thread = g_thread_create (test_g_static_rec_mutex_thread, 
+			    GINT_TO_POINTER (42), TRUE, NULL);
+  /* This busy wait is only for testing purposes and not an example of
+   * good code!*/
+  while (!test_g_static_rec_mutex_thread_ready)
+    g_usleep (G_USEC_PER_SEC / 5);
+
+  g_assert (g_static_rec_mutex_trylock (&test_g_static_rec_mutex_mutex));
+  test_g_static_rec_mutex_int = 41;
+  g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex);
+  test_g_static_rec_mutex_int = 42;  
+  g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex);
+
+  /* This busy wait is only for testing purposes and not an example of
+   * good code!*/
+  while (test_g_static_rec_mutex_thread_ready)
+    g_usleep (G_USEC_PER_SEC / 5);
+
+  g_static_rec_mutex_lock (&test_g_static_rec_mutex_mutex);
+  test_g_static_rec_mutex_int = 0;  
+  g_static_rec_mutex_unlock (&test_g_static_rec_mutex_mutex);
+
+  g_assert (GPOINTER_TO_INT (g_thread_join (thread)) == 43);
+}
+
+/* GStaticPrivate */
+
+#define THREADS 10
+
+static GStaticPrivate test_g_static_private_private1 = G_STATIC_PRIVATE_INIT;
+static GStaticPrivate test_g_static_private_private2 = G_STATIC_PRIVATE_INIT;
+static GStaticMutex test_g_static_private_mutex = G_STATIC_MUTEX_INIT;
+static guint test_g_static_private_counter = 0;
+static guint test_g_static_private_ready = 0;
+
+static gpointer
+test_g_static_private_constructor (void)
+{
+  g_static_mutex_lock (&test_g_static_private_mutex);
+  test_g_static_private_counter++;
+  g_static_mutex_unlock (&test_g_static_private_mutex);  
+  return g_new (guint,1);
+}
+
+static void
+test_g_static_private_destructor (gpointer data)
+{
+  g_static_mutex_lock (&test_g_static_private_mutex);
+  test_g_static_private_counter--;
+  g_static_mutex_unlock (&test_g_static_private_mutex);  
+  g_free (data);
+}
+
+
+static gpointer
+test_g_static_private_thread (gpointer data)
+{
+  guint number = GPOINTER_TO_INT (data);
+  guint i;
+  guint *private1, *private2;
+  for (i = 0; i < 10; i++)
+    {
+      number = number * 11 + 1; /* A very simple and bad RNG ;-) */
+      private1 = g_static_private_get (&test_g_static_private_private1);
+      if (!private1 || number % 7 > 3)
+	{
+	  private1 = test_g_static_private_constructor ();
+	  g_static_private_set (&test_g_static_private_private1, private1,
+				test_g_static_private_destructor);
+	}
+      *private1 = number;
+      private2 = g_static_private_get (&test_g_static_private_private2);
+      if (!private2 || number % 13 > 5)
+	{
+	  private2 = test_g_static_private_constructor ();
+	  g_static_private_set (&test_g_static_private_private2, private2,
+				test_g_static_private_destructor);
+	}
+      *private2 = number * 2;
+      g_usleep (G_USEC_PER_SEC / 5);
+      g_assert (number == *private1);
+      g_assert (number * 2 == *private2);      
+    }
+  g_static_mutex_lock (&test_g_static_private_mutex);
+  test_g_static_private_ready++;
+  g_static_mutex_unlock (&test_g_static_private_mutex);  
+
+  /* Busy wait is not nice but that's just a test */
+  while (test_g_static_private_ready != 0)
+    g_usleep (G_USEC_PER_SEC / 5);  
+
+  for (i = 0; i < 10; i++)
+    {
+      private2 = g_static_private_get (&test_g_static_private_private2);
+      number = number * 11 + 1; /* A very simple and bad RNG ;-) */
+      if (!private2 || number % 13 > 5)
+	{
+	  private2 = test_g_static_private_constructor ();
+	  g_static_private_set (&test_g_static_private_private2, private2,
+				test_g_static_private_destructor);
+	}      
+      *private2 = number * 2;
+      g_usleep (G_USEC_PER_SEC / 5);
+      g_assert (number * 2 == *private2);      
+    }
+
+  return GINT_TO_POINTER (GPOINTER_TO_INT (data) * 3);
+}
+
+static void
+test_g_static_private (void)
+{
+  GThread *threads[THREADS];
+  guint i;
+
+  test_g_static_private_ready = 0;
+
+  for (i = 0; i < THREADS; i++)
+    {
+      threads[i] = g_thread_create (test_g_static_private_thread, 
+				    GINT_TO_POINTER (i), TRUE, NULL);      
+    }
+
+  /* Busy wait is not nice but that's just a test */
+  while (test_g_static_private_ready != THREADS)
+    g_usleep (G_USEC_PER_SEC / 5);
+
+  /* Reuse the static private */
+  g_static_private_free (&test_g_static_private_private2);
+  g_static_private_init (&test_g_static_private_private2);
+  
+  test_g_static_private_ready = 0;
+
+  for (i = 0; i < THREADS; i++)
+    g_assert (GPOINTER_TO_INT (g_thread_join (threads[i])) == i * 3);
+    
+  g_assert (test_g_static_private_counter == 0); 
+}
+
+/* GStaticRWLock */
+
+/* -1 = writing; >0 = # of readers */
+static gint test_g_static_rw_lock_state = 0; 
+G_LOCK_DEFINE (test_g_static_rw_lock_state);
+
+static gboolean test_g_static_rw_lock_run = TRUE; 
+static GStaticRWLock test_g_static_rw_lock_lock = G_STATIC_RW_LOCK_INIT;
+
+static gpointer
+test_g_static_rw_lock_thread (gpointer data)
+{
+  while (test_g_static_rw_lock_run)
+    {
+      if (g_random_double() > .2) /* I'm a reader */
+	{
+	  
+	  if (g_random_double() > .2) /* I'll block */
+	    g_static_rw_lock_reader_lock (&test_g_static_rw_lock_lock);
+	  else /* I'll only try */
+	    if (!g_static_rw_lock_reader_trylock (&test_g_static_rw_lock_lock))
+	      continue;
+	  G_LOCK (test_g_static_rw_lock_state);
+	  g_assert (test_g_static_rw_lock_state >= 0);
+	  test_g_static_rw_lock_state++;
+	  G_UNLOCK (test_g_static_rw_lock_state);
+
+	  g_usleep (g_random_int_range (20,1000));
+
+	  G_LOCK (test_g_static_rw_lock_state);
+	  test_g_static_rw_lock_state--;
+	  G_UNLOCK (test_g_static_rw_lock_state);
+
+	  g_static_rw_lock_reader_unlock (&test_g_static_rw_lock_lock);
+	}
+      else /* I'm a writer */
+	{
+	  
+	  if (g_random_double() > .2) /* I'll block */ 
+	    g_static_rw_lock_writer_lock (&test_g_static_rw_lock_lock);
+	  else /* I'll only try */
+	    if (!g_static_rw_lock_writer_trylock (&test_g_static_rw_lock_lock))
+	      continue;
+	  G_LOCK (test_g_static_rw_lock_state);
+	  g_assert (test_g_static_rw_lock_state == 0);
+	  test_g_static_rw_lock_state = -1;
+	  G_UNLOCK (test_g_static_rw_lock_state);
+
+	  g_usleep (g_random_int_range (20,1000));
+
+	  G_LOCK (test_g_static_rw_lock_state);
+	  test_g_static_rw_lock_state = 0;
+	  G_UNLOCK (test_g_static_rw_lock_state);
+
+	  g_static_rw_lock_writer_unlock (&test_g_static_rw_lock_lock);
+	}
+    }
+  return NULL;
+}
+
+static void
+test_g_static_rw_lock ()
+{
+  GThread *threads[THREADS];
+  guint i;
+  for (i = 0; i < THREADS; i++)
+    {
+      threads[i] = g_thread_create (test_g_static_rw_lock_thread, 
+				    NULL, TRUE, NULL);      
+    }
+  g_usleep (G_USEC_PER_SEC * 5);
+  test_g_static_rw_lock_run = FALSE;
+  for (i = 0; i < THREADS; i++)
+    {
+      g_thread_join (threads[i]);
+    }
+  g_assert (test_g_static_rw_lock_state == 0);
+}
+
+#define G_ONCE_SIZE 100
+#define G_ONCE_THREADS 10
+
+G_LOCK_DEFINE (test_g_once);
+static guint test_g_once_guint_array[G_ONCE_SIZE];
+static GOnce test_g_once_array[G_ONCE_SIZE];
+
+static gpointer
+test_g_once_init_func(gpointer arg)
+{
+  guint *count = arg;
+  g_usleep (g_random_int_range (20,1000));
+  (*count)++;
+  g_usleep (g_random_int_range (20,1000));
+  return arg;
+}
+
+static gpointer
+test_g_once_thread (gpointer ignore)
+{
+  guint i;
+  G_LOCK (test_g_once);
+  /* Don't start before all threads are created */
+  G_UNLOCK (test_g_once);
+  for (i = 0; i < 1000; i++)
+    {
+      guint pos = g_random_int_range (0, G_ONCE_SIZE);
+      gpointer ret = g_once (test_g_once_array + pos, test_g_once_init_func, 
+			     test_g_once_guint_array + pos);
+      g_assert (ret == test_g_once_guint_array + pos);
+    }
+  
+  /* Make sure, that all counters are touched at least once */
+  for (i = 0; i < G_ONCE_SIZE; i++)
+    {
+      gpointer ret = g_once (test_g_once_array + i, test_g_once_init_func, 
+			     test_g_once_guint_array + i);
+      g_assert (ret == test_g_once_guint_array + i);
+    }
+
+  return NULL;
+}
+
+static void
+test_g_thread_once (void)
+{
+  static GOnce once_init = G_ONCE_INIT;
+  GThread *threads[G_ONCE_THREADS];
+  guint i;
+  for (i = 0; i < G_ONCE_SIZE; i++) 
+    {
+      test_g_once_array[i] = once_init;
+      test_g_once_guint_array[i] = i;
+    }
+  G_LOCK (test_g_once);
+  for (i = 0; i < G_ONCE_THREADS; i++)
+    {
+      threads[i] = g_thread_create (test_g_once_thread, GUINT_TO_POINTER(i%2), 
+				    TRUE, NULL);
+    }
+  G_UNLOCK (test_g_once);
+  for (i = 0; i < G_ONCE_THREADS; i++)
+    {
+      g_thread_join (threads[i]);
+    }
+  
+  for (i = 0; i < G_ONCE_SIZE; i++) 
+    {
+      g_assert (test_g_once_guint_array[i] == i + 1);
+    }
+}
+
+/* run all the tests */
+void
+run_all_tests()
+{
+  test_g_mutex ();
+  test_g_static_rec_mutex ();
+  test_g_static_private ();
+  test_g_static_rw_lock ();
+  test_g_thread_once ();
+}
+
+int 
+main (int   argc,
+      char *argv[])
+{
+  /* Only run the test, if threads are enabled and a default thread
+     implementation is available */
+#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
+  g_thread_init (NULL);
+  run_all_tests ();
+
+  /* Now we rerun all tests, but this time we fool the system into
+   * thinking, that the available thread system is not native, but
+   * userprovided. */
+
+  g_thread_use_default_impl = FALSE;
+  run_all_tests ();
+  
+#endif
+  return 0;
+}
diff --git a/tests/threadpool-test.c b/tests/threadpool-test.c
new file mode 100644
index 0000000..db15b36
--- /dev/null
+++ b/tests/threadpool-test.c
@@ -0,0 +1,476 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include "config.h"
+
+#include <glib.h>
+
+#define DEBUG_MSG(x)
+/* #define DEBUG_MSG(args) g_printerr args ; g_printerr ("\n");  */
+
+#define WAIT                5    /* seconds */
+#define MAX_THREADS         10
+
+/* if > 0 the test will run continously (since the test ends when
+ * thread count is 0), if -1 it means no limit to unused threads
+ * if 0 then no unused threads are possible */
+#define MAX_UNUSED_THREADS -1
+
+G_LOCK_DEFINE_STATIC (thread_counter_pools);
+
+static gulong abs_thread_counter = 0;
+static gulong running_thread_counter = 0;
+static gulong leftover_task_counter = 0;
+
+G_LOCK_DEFINE_STATIC (last_thread);
+
+static guint last_thread_id = 0;
+
+G_LOCK_DEFINE_STATIC (thread_counter_sort);
+
+static gulong sort_thread_counter = 0;
+
+static GThreadPool *idle_pool = NULL;
+
+static GMainLoop *main_loop = NULL;
+
+static void
+test_thread_functions (void)
+{
+  gint max_unused_threads;
+  guint max_idle_time;
+
+  /* This function attempts to call functions which don't need a
+   * threadpool to operate to make sure no uninitialised pointers
+   * accessed and no errors occur.
+   */
+
+  max_unused_threads = 3;
+
+  DEBUG_MSG (("[funcs] Setting max unused threads to %d",
+	      max_unused_threads));
+  g_thread_pool_set_max_unused_threads (max_unused_threads);
+
+  DEBUG_MSG (("[funcs] Getting max unused threads = %d",
+	     g_thread_pool_get_max_unused_threads ()));
+  g_assert (g_thread_pool_get_max_unused_threads() == max_unused_threads);
+
+  DEBUG_MSG (("[funcs] Getting num unused threads = %d",
+	     g_thread_pool_get_num_unused_threads ()));
+  g_assert (g_thread_pool_get_num_unused_threads () == 0);
+
+  DEBUG_MSG (("[funcs] Stopping unused threads"));
+  g_thread_pool_stop_unused_threads ();
+
+  max_idle_time = 10 * G_USEC_PER_SEC;
+
+  DEBUG_MSG (("[funcs] Setting max idle time to %d",
+	      max_idle_time));
+  g_thread_pool_set_max_idle_time (max_idle_time);
+
+  DEBUG_MSG (("[funcs] Getting max idle time = %d",
+	     g_thread_pool_get_max_idle_time ()));
+  g_assert (g_thread_pool_get_max_idle_time () == max_idle_time);
+
+  DEBUG_MSG (("[funcs] Setting max idle time to 0"));
+  g_thread_pool_set_max_idle_time (0);
+
+  DEBUG_MSG (("[funcs] Getting max idle time = %d",
+	     g_thread_pool_get_max_idle_time ()));
+  g_assert (g_thread_pool_get_max_idle_time () == 0);
+}
+
+static void
+test_count_threads_foreach (GThread *thread,
+			    guint   *count)
+{
+   ++*count;
+}
+
+static guint
+test_count_threads (void)
+{
+  guint count = 0;
+
+  g_thread_foreach ((GFunc) test_count_threads_foreach, &count);
+
+  /* Exclude main thread */
+  return count - 1;
+}
+
+static void
+test_thread_stop_unused (void)
+{
+   GThreadPool *pool;
+   guint i;
+   guint limit = 100;
+
+   /* Spawn a few threads. */
+   g_thread_pool_set_max_unused_threads (-1);
+   pool = g_thread_pool_new ((GFunc) g_usleep, NULL, -1, FALSE, NULL);
+
+   for (i = 0; i < limit; i++)
+     g_thread_pool_push (pool, GUINT_TO_POINTER (1000), NULL);
+
+   DEBUG_MSG (("[unused] ===> pushed %d threads onto the idle pool",
+	       limit));
+
+   /* Wait for the threads to migrate. */
+   g_usleep (G_USEC_PER_SEC);
+
+   DEBUG_MSG (("[unused] current threads %d",
+	       test_count_threads()));
+
+   DEBUG_MSG (("[unused] stopping unused threads"));
+   g_thread_pool_stop_unused_threads ();
+
+   DEBUG_MSG (("[unused] waiting ONE second for threads to die"));
+
+   /* Some time for threads to die. */
+   g_usleep (G_USEC_PER_SEC);
+
+   DEBUG_MSG (("[unused] stopped idle threads, %d remain, %d threads still exist",
+	       g_thread_pool_get_num_unused_threads (),
+	       test_count_threads ()));
+
+   g_assert (g_thread_pool_get_num_unused_threads () == test_count_threads ());
+   g_assert (g_thread_pool_get_num_unused_threads () == 0);
+
+   g_thread_pool_set_max_unused_threads (MAX_THREADS);
+
+   DEBUG_MSG (("[unused] cleaning up thread pool"));
+   g_thread_pool_free (pool, FALSE, TRUE);
+}
+
+static void
+test_thread_pools_entry_func (gpointer data, gpointer user_data)
+{
+  guint id = 0;
+
+  id = GPOINTER_TO_UINT (data);
+
+  DEBUG_MSG (("[pool] ---> [%3.3d] entered thread.", id));
+
+  G_LOCK (thread_counter_pools);
+  abs_thread_counter++;
+  running_thread_counter++;
+  G_UNLOCK (thread_counter_pools);
+
+  g_usleep (g_random_int_range (0, 4000));
+
+  G_LOCK (thread_counter_pools);
+  running_thread_counter--;
+  leftover_task_counter--;
+
+  DEBUG_MSG (("[pool] ---> [%3.3d] exiting thread (abs count:%ld, "
+	      "running count:%ld, left over:%ld)",
+	      id, abs_thread_counter,
+	      running_thread_counter, leftover_task_counter));
+  G_UNLOCK (thread_counter_pools);
+}
+
+static void
+test_thread_pools (void)
+{
+  GThreadPool *pool1, *pool2, *pool3;
+  guint runs;
+  guint i;
+
+  pool1 = g_thread_pool_new ((GFunc)test_thread_pools_entry_func, NULL, 3, FALSE, NULL);
+  pool2 = g_thread_pool_new ((GFunc)test_thread_pools_entry_func, NULL, 5, TRUE, NULL);
+  pool3 = g_thread_pool_new ((GFunc)test_thread_pools_entry_func, NULL, 7, TRUE, NULL);
+
+  runs = 300;
+  for (i = 0; i < runs; i++)
+    {
+      g_thread_pool_push (pool1, GUINT_TO_POINTER (i + 1), NULL);
+      g_thread_pool_push (pool2, GUINT_TO_POINTER (i + 1), NULL);
+      g_thread_pool_push (pool3, GUINT_TO_POINTER (i + 1), NULL);
+
+      G_LOCK (thread_counter_pools);
+      leftover_task_counter += 3;
+      G_UNLOCK (thread_counter_pools);
+    }
+
+  g_thread_pool_free (pool1, TRUE, TRUE);
+  g_thread_pool_free (pool2, FALSE, TRUE);
+  g_thread_pool_free (pool3, FALSE, TRUE);
+
+  g_assert (runs * 3 == abs_thread_counter + leftover_task_counter);
+  g_assert (running_thread_counter == 0);
+}
+
+static gint
+test_thread_sort_compare_func (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+  guint32 id1, id2;
+
+  id1 = GPOINTER_TO_UINT (a);
+  id2 = GPOINTER_TO_UINT (b);
+
+  return (id1 > id2 ? +1 : id1 == id2 ? 0 : -1);
+}
+
+static void
+test_thread_sort_entry_func (gpointer data, gpointer user_data)
+{
+  guint thread_id;
+  gboolean is_sorted;
+
+  G_LOCK (last_thread);
+
+  thread_id = GPOINTER_TO_UINT (data);
+  is_sorted = GPOINTER_TO_INT (user_data);
+
+  DEBUG_MSG (("%s ---> entered thread:%2.2d, last thread:%2.2d",
+	      is_sorted ? "[  sorted]" : "[unsorted]",
+	      thread_id, last_thread_id));
+
+  if (is_sorted) {
+    static gboolean last_failed = FALSE;
+
+    if (last_thread_id > thread_id) {
+      if (last_failed) {
+	g_assert (last_thread_id <= thread_id);
+      }
+
+      /* Here we remember one fail and if it concurrently fails, it
+       * can not be sorted. the last thread id might be < this thread
+       * id if something is added to the queue since threads were
+       * created
+       */
+      last_failed = TRUE;
+    } else {
+      last_failed = FALSE;
+    }
+
+    last_thread_id = thread_id;
+  }
+
+  G_UNLOCK (last_thread);
+
+  g_usleep (WAIT * 1000);
+}
+
+static void
+test_thread_sort (gboolean sort)
+{
+  GThreadPool *pool;
+  guint limit;
+  guint max_threads;
+  gint i;
+
+  limit = MAX_THREADS * 10;
+
+  if (sort) {
+    max_threads = 1;
+  } else {
+    max_threads = MAX_THREADS;
+  }
+
+  /* It is important that we only have a maximum of 1 thread for this
+   * test since the results can not be guranteed to be sorted if > 1.
+   *
+   * Threads are scheduled by the operating system and are executed at
+   * random. It cannot be assumed that threads are executed in the
+   * order they are created. This was discussed in bug #334943.
+   */
+
+  pool = g_thread_pool_new (test_thread_sort_entry_func,
+			    GINT_TO_POINTER (sort),
+			    max_threads,
+			    FALSE,
+			    NULL);
+
+  g_thread_pool_set_max_unused_threads (MAX_UNUSED_THREADS);
+
+  if (sort) {
+    g_thread_pool_set_sort_function (pool,
+				     test_thread_sort_compare_func,
+				     GUINT_TO_POINTER (69));
+  }
+
+  for (i = 0; i < limit; i++) {
+    guint id;
+
+    id = g_random_int_range (1, limit) + 1;
+    g_thread_pool_push (pool, GUINT_TO_POINTER (id), NULL);
+    DEBUG_MSG (("%s ===> pushed new thread with id:%d, number "
+		"of threads:%d, unprocessed:%d",
+		sort ? "[  sorted]" : "[unsorted]",
+		id,
+		g_thread_pool_get_num_threads (pool),
+		g_thread_pool_unprocessed (pool)));
+  }
+
+  g_assert (g_thread_pool_get_max_threads (pool) == max_threads);
+  g_assert (g_thread_pool_get_num_threads (pool) == g_thread_pool_get_max_threads (pool));
+}
+
+static void
+test_thread_idle_time_entry_func (gpointer data, gpointer user_data)
+{
+  guint thread_id;
+
+  thread_id = GPOINTER_TO_UINT (data);
+
+  DEBUG_MSG (("[idle] ---> entered thread:%2.2d", thread_id));
+
+  g_usleep (WAIT * 1000);
+
+  DEBUG_MSG (("[idle] <--- exiting thread:%2.2d", thread_id));
+}
+
+static gboolean
+test_thread_idle_timeout (gpointer data)
+{
+  guint interval;
+  gint i;
+
+  interval = GPOINTER_TO_UINT (data);
+
+  for (i = 0; i < 2; i++) {
+    g_thread_pool_push (idle_pool, GUINT_TO_POINTER (100 + i), NULL);
+    DEBUG_MSG (("[idle] ===> pushed new thread with id:%d, number "
+		"of threads:%d, unprocessed:%d",
+		100 + i,
+		g_thread_pool_get_num_threads (idle_pool),
+		g_thread_pool_unprocessed (idle_pool)));
+  }
+
+
+  return FALSE;
+}
+
+static void
+test_thread_idle_time ()
+{
+  guint limit = 50;
+  guint interval = 10000;
+  gint i;
+
+  idle_pool = g_thread_pool_new (test_thread_idle_time_entry_func,
+				 NULL,
+				 MAX_THREADS,
+				 FALSE,
+				 NULL);
+
+  g_thread_pool_set_max_unused_threads (MAX_UNUSED_THREADS);
+  g_thread_pool_set_max_idle_time (interval);
+
+  g_assert (g_thread_pool_get_max_unused_threads () == MAX_UNUSED_THREADS);
+  g_assert (g_thread_pool_get_max_idle_time () == interval);
+
+  for (i = 0; i < limit; i++) {
+    g_thread_pool_push (idle_pool, GUINT_TO_POINTER (i + 1), NULL);
+    DEBUG_MSG (("[idle] ===> pushed new thread with id:%d, "
+		"number of threads:%d, unprocessed:%d",
+		i,
+		g_thread_pool_get_num_threads (idle_pool),
+		g_thread_pool_unprocessed (idle_pool)));
+  }
+
+  g_timeout_add ((interval - 1000),
+		 test_thread_idle_timeout,
+		 GUINT_TO_POINTER (interval));
+}
+
+static gboolean
+test_check_start_and_stop (gpointer user_data)
+{
+  static guint test_number = 0;
+  static gboolean run_next = FALSE;
+  gboolean continue_timeout = TRUE;
+  gboolean quit = TRUE;
+
+  if (test_number == 0) {
+    run_next = TRUE;
+    DEBUG_MSG (("***** RUNNING TEST %2.2d *****", test_number));
+  }
+
+  if (run_next) {
+    test_number++;
+
+    switch (test_number) {
+    case 1:
+      test_thread_functions ();
+      break;
+    case 2:
+      test_thread_stop_unused ();
+      break;
+    case 3:
+      test_thread_pools ();
+      break;
+    case 4:
+      test_thread_sort (FALSE);
+      break;
+    case 5:
+      test_thread_sort (TRUE);
+      break;
+    case 6:
+      test_thread_stop_unused ();
+      break;
+    case 7:
+      test_thread_idle_time ();
+      break;
+    default:
+      DEBUG_MSG (("***** END OF TESTS *****"));
+      g_main_loop_quit (main_loop);
+      continue_timeout = FALSE;
+      break;
+    }
+
+    run_next = FALSE;
+    return TRUE;
+  }
+
+  if (test_number == 3) {
+    G_LOCK (thread_counter_pools);
+    quit &= running_thread_counter <= 0;
+    DEBUG_MSG (("***** POOL RUNNING THREAD COUNT:%ld",
+		running_thread_counter));
+    G_UNLOCK (thread_counter_pools);
+  }
+
+  if (test_number == 4 || test_number == 5) {
+    G_LOCK (thread_counter_sort);
+    quit &= sort_thread_counter <= 0;
+    DEBUG_MSG (("***** POOL SORT THREAD COUNT:%ld",
+		sort_thread_counter));
+    G_UNLOCK (thread_counter_sort);
+  }
+
+  if (test_number == 7) {
+    guint idle;
+
+    idle = g_thread_pool_get_num_unused_threads ();
+    quit &= idle < 1;
+    DEBUG_MSG (("***** POOL IDLE THREAD COUNT:%d, UNPROCESSED JOBS:%d",
+		idle, g_thread_pool_unprocessed (idle_pool)));
+  }
+
+  if (quit) {
+    run_next = TRUE;
+  }
+
+  return continue_timeout;
+}
+
+int
+main (int argc, char *argv[])
+{
+  /* Only run the test, if threads are enabled and a default thread
+     implementation is available */
+
+#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
+  g_thread_init (NULL);
+
+  DEBUG_MSG (("Starting... (in one second)"));
+  g_timeout_add (1000, test_check_start_and_stop, NULL);
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_main_loop_run (main_loop);
+#endif
+
+  return 0;
+}
diff --git a/tests/timeloop-basic.c b/tests/timeloop-basic.c
new file mode 100644
index 0000000..56861f3
--- /dev/null
+++ b/tests/timeloop-basic.c
@@ -0,0 +1,235 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/poll.h>
+
+#define TRUE 1
+#define FALSE 0
+
+static int n_children = 3;
+static int n_active_children;
+static int n_iters = 10000;
+
+static int write_fds[1024];
+static struct pollfd poll_fds[1024];
+
+void
+my_pipe (int *fds)
+{
+  if (pipe(fds) < 0)
+    {
+      fprintf (stderr, "Cannot create pipe %s\n", strerror (errno));
+      exit (1);
+    }
+}
+
+int
+read_all (int fd, char *buf, int len)
+{
+  size_t bytes_read = 0;
+  ssize_t count;
+
+  while (bytes_read < len)
+    {
+      count = read (fd, buf + bytes_read, len - bytes_read);
+      if (count < 0)
+	{
+	  if (errno != EAGAIN)
+	    return FALSE;
+	}
+      else if (count == 0)
+	return FALSE;
+
+      bytes_read += count;
+    }
+
+  return TRUE;
+}
+
+int
+write_all (int fd, char *buf, int len)
+{
+  size_t bytes_written = 0;
+  ssize_t count;
+
+  while (bytes_written < len)
+    {
+      count = write (fd, buf + bytes_written, len - bytes_written);
+      if (count < 0)
+	{
+	  if (errno != EAGAIN)
+	    return FALSE;
+	}
+
+      bytes_written += count;
+    }
+
+  return TRUE;
+}
+
+void
+run_child (int in_fd, int out_fd)
+{
+  int i;
+  int val = 1;
+
+  for (i = 0; i < n_iters; i++)
+    {
+      write_all (out_fd, (char *)&val, sizeof (val));
+      read_all (in_fd, (char *)&val, sizeof (val));
+    }
+
+  val = 0;
+  write_all (out_fd, (char *)&val, sizeof (val));
+
+  exit (0);
+}
+
+int
+input_callback (int source, int dest)
+{
+  int val;
+  
+  if (!read_all (source, (char *)&val, sizeof(val)))
+    {
+      fprintf (stderr,"Unexpected EOF\n");
+      exit (1);
+    }
+
+  if (val)
+    {
+      write_all (dest, (char *)&val, sizeof(val));
+      return TRUE;
+    }
+  else
+    {
+      close (source);
+      close (dest);
+      
+      n_active_children--;
+      return FALSE;
+    }
+}
+
+void
+create_child (int pos)
+{
+  int pid;
+  int in_fds[2];
+  int out_fds[2];
+  
+  my_pipe (in_fds);
+  my_pipe (out_fds);
+
+  pid = fork ();
+
+  if (pid > 0)			/* Parent */
+    {
+      close (in_fds[0]);
+      close (out_fds[1]);
+
+      write_fds[pos] = in_fds[1];
+      poll_fds[pos].fd = out_fds[0];
+      poll_fds[pos].events = POLLIN;
+    }
+  else if (pid == 0)		/* Child */
+    {
+      close (in_fds[1]);
+      close (out_fds[0]);
+
+      setsid ();
+
+      run_child (in_fds[0], out_fds[1]);
+    }
+  else				/* Error */
+    {
+      fprintf (stderr,"Cannot fork: %s\n", strerror (errno));
+      exit (1);
+    }
+}
+
+static double 
+difftimeval (struct timeval *old, struct timeval *new)
+{
+  return
+    (new->tv_sec - old->tv_sec) * 1000. + (new->tv_usec - old->tv_usec) / 1000;
+}
+
+int 
+main (int argc, char **argv)
+{
+  int i, j;
+  struct rusage old_usage;
+  struct rusage new_usage;
+  
+  if (argc > 1)
+    n_children = atoi(argv[1]);
+
+  if (argc > 2)
+    n_iters = atoi(argv[2]);
+
+  printf ("Children: %d     Iters: %d\n", n_children, n_iters);
+
+  n_active_children = n_children;
+  for (i = 0; i < n_children; i++)
+    create_child (i);
+
+  getrusage (RUSAGE_SELF, &old_usage);
+
+  while (n_active_children > 0)
+    {
+      int old_n_active_children = n_active_children;
+
+      poll (poll_fds, n_active_children, -1);
+
+      for (i=0; i<n_active_children; i++)
+	{
+	  if (poll_fds[i].events & (POLLIN | POLLHUP))
+	    {
+	      if (!input_callback (poll_fds[i].fd, write_fds[i]))
+		write_fds[i] = -1;
+	    }
+	}
+
+      if (old_n_active_children > n_active_children)
+	{
+	  j = 0;
+	  for (i=0; i<old_n_active_children; i++)
+	    {
+	      if (write_fds[i] != -1)
+		{
+		  if (j < i)
+		    {
+		      poll_fds[j] = poll_fds[i];
+		      write_fds[j] = write_fds[i];
+		    }
+		  j++;
+		}
+	    }
+	}
+    }
+
+  getrusage (RUSAGE_SELF, &new_usage);
+
+  printf ("Elapsed user: %g\n",
+	   difftimeval (&old_usage.ru_utime, &new_usage.ru_utime));
+  printf ("Elapsed system: %g\n",
+	   difftimeval (&old_usage.ru_stime, &new_usage.ru_stime));
+  printf ("Elapsed total: %g\n",
+	  difftimeval (&old_usage.ru_utime, &new_usage.ru_utime) +	   
+	   difftimeval (&old_usage.ru_stime, &new_usage.ru_stime));
+  printf ("total / iteration: %g\n",
+	   (difftimeval (&old_usage.ru_utime, &new_usage.ru_utime) +	   
+	    difftimeval (&old_usage.ru_stime, &new_usage.ru_stime)) /
+	   (n_iters * n_children));
+
+  return 0;
+}
+
diff --git a/tests/timeloop-closure.c b/tests/timeloop-closure.c
new file mode 100644
index 0000000..ecbe290
--- /dev/null
+++ b/tests/timeloop-closure.c
@@ -0,0 +1,222 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+static int n_children = 3;
+static int n_active_children;
+static int n_iters = 10000;
+static GMainLoop *loop;
+
+static void
+io_pipe (GIOChannel **channels)
+{
+  int fds[2];
+
+  if (pipe(fds) < 0)
+    {
+      fprintf (stderr, "Cannot create pipe %s\n", g_strerror (errno));
+      exit (1);
+    }
+
+  channels[0] = g_io_channel_unix_new (fds[0]);
+  channels[1] = g_io_channel_unix_new (fds[1]);
+}
+
+static gboolean
+read_all (GIOChannel *channel, char *buf, int len)
+{
+  gsize bytes_read = 0;
+  gsize count;
+  GIOError err;
+
+  while (bytes_read < len)
+    {
+      err = g_io_channel_read (channel, buf + bytes_read, len - bytes_read, &count);
+      if (err)
+	{
+	  if (err != G_IO_ERROR_AGAIN)
+	    return FALSE;
+	}
+      else if (count == 0)
+	return FALSE;
+
+      bytes_read += count;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+write_all (GIOChannel *channel, char *buf, int len)
+{
+  gsize bytes_written = 0;
+  gsize count;
+  GIOError err;
+
+  while (bytes_written < len)
+    {
+      err = g_io_channel_write (channel, buf + bytes_written, len - bytes_written, &count);
+      if (err && err != G_IO_ERROR_AGAIN)
+	return FALSE;
+
+      bytes_written += count;
+    }
+
+  return TRUE;
+}
+
+static void
+run_child (GIOChannel *in_channel, GIOChannel *out_channel)
+{
+  int i;
+  int val = 1;
+  GTimer *timer = g_timer_new();
+
+  for (i = 0; i < n_iters; i++)
+    {
+      write_all (out_channel, (char *)&val, sizeof (val));
+      read_all (in_channel, (char *)&val, sizeof (val));
+    }
+
+  val = 0;
+  write_all (out_channel, (char *)&val, sizeof (val));
+
+  val = g_timer_elapsed (timer, NULL) * 1000;
+  
+  write_all (out_channel, (char *)&val, sizeof (val));
+  g_timer_destroy (timer);
+
+  exit (0);
+}
+
+static gboolean
+input_callback (GIOChannel   *source,
+		GIOCondition  condition,
+		gpointer      data)
+{
+  int val;
+  GIOChannel *dest = (GIOChannel *)data;
+  
+  if (!read_all (source, (char *)&val, sizeof(val)))
+    {
+      fprintf (stderr, "Unexpected EOF\n");
+      exit (1);
+    }
+
+  if (val)
+    {
+      write_all (dest, (char *)&val, sizeof(val));
+      
+      return TRUE;
+    }
+  else
+    {
+      g_io_channel_close (source);
+      g_io_channel_close (dest);
+      
+      g_io_channel_unref (source);
+      g_io_channel_unref (dest);
+
+      n_active_children--;
+      if (n_active_children == 0)
+	g_main_loop_quit (loop);
+      
+      return FALSE;
+    }
+}
+
+static void
+create_child (void)
+{
+  int pid;
+  GIOChannel *in_channels[2];
+  GIOChannel *out_channels[2];
+  GSource *source;
+  
+  io_pipe (in_channels);
+  io_pipe (out_channels);
+
+  pid = fork ();
+
+  if (pid > 0)			/* Parent */
+    {
+      g_io_channel_close (in_channels[0]);
+      g_io_channel_close (out_channels[1]);
+
+      source = g_io_create_watch (out_channels[0], G_IO_IN | G_IO_HUP);
+      g_source_set_closure (source,
+			    g_cclosure_new (G_CALLBACK (input_callback), in_channels[1], NULL));
+      g_source_attach (source, NULL);
+    }
+  else if (pid == 0)		/* Child */
+    {
+      g_io_channel_close (in_channels[1]);
+      g_io_channel_close (out_channels[0]);
+
+      setsid ();
+
+      run_child (in_channels[0], out_channels[1]);
+    }
+  else				/* Error */
+    {
+      fprintf (stderr, "Cannot fork: %s\n", g_strerror (errno));
+      exit (1);
+    }
+}
+
+static double 
+difftimeval (struct timeval *old, struct timeval *new)
+{
+  return
+    (new->tv_sec - old->tv_sec) * 1000. + (new->tv_usec - old->tv_usec) / 1000;
+}
+
+int 
+main (int argc, char **argv)
+{
+  int i;
+  struct rusage old_usage;
+  struct rusage new_usage;
+
+  g_type_init ();
+  
+  if (argc > 1)
+    n_children = atoi(argv[1]);
+
+  if (argc > 2)
+    n_iters = atoi(argv[2]);
+
+  printf ("Children: %d     Iters: %d\n", n_children, n_iters);
+
+  n_active_children = n_children;
+  for (i = 0; i < n_children; i++)
+    create_child ();
+
+  getrusage (RUSAGE_SELF, &old_usage);
+  loop = g_main_loop_new (NULL, FALSE);
+  g_main_loop_run (loop);
+  getrusage (RUSAGE_SELF, &new_usage);
+
+  printf ("Elapsed user: %g\n",
+	  difftimeval (&old_usage.ru_utime, &new_usage.ru_utime));
+  printf ("Elapsed system: %g\n",
+	  difftimeval (&old_usage.ru_stime, &new_usage.ru_stime));
+  printf ("Elapsed total: %g\n",
+	  difftimeval (&old_usage.ru_utime, &new_usage.ru_utime) +	   
+	  difftimeval (&old_usage.ru_stime, &new_usage.ru_stime));
+  printf ("total / iteration: %g\n",
+	  (difftimeval (&old_usage.ru_utime, &new_usage.ru_utime) +	   
+	   difftimeval (&old_usage.ru_stime, &new_usage.ru_stime)) /
+	  (n_iters * n_children));
+
+  return 0;
+}
diff --git a/tests/timeloop.c b/tests/timeloop.c
new file mode 100644
index 0000000..457e74d
--- /dev/null
+++ b/tests/timeloop.c
@@ -0,0 +1,216 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <glib.h>
+
+static int n_children = 3;
+static int n_active_children;
+static int n_iters = 10000;
+static GMainLoop *loop;
+
+static void
+io_pipe (GIOChannel **channels)
+{
+  int fds[2];
+
+  if (pipe(fds) < 0)
+    {
+      fprintf (stderr, "Cannot create pipe %s\n", g_strerror (errno));
+      exit (1);
+    }
+
+  channels[0] = g_io_channel_unix_new (fds[0]);
+  channels[1] = g_io_channel_unix_new (fds[1]);
+}
+
+static gboolean
+read_all (GIOChannel *channel, char *buf, int len)
+{
+  gsize bytes_read = 0;
+  gsize count;
+  GIOError err;
+
+  while (bytes_read < len)
+    {
+      err = g_io_channel_read (channel, buf + bytes_read, len - bytes_read, &count);
+      if (err)
+	{
+	  if (err != G_IO_ERROR_AGAIN)
+	    return FALSE;
+	}
+      else if (count == 0)
+	return FALSE;
+
+      bytes_read += count;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+write_all (GIOChannel *channel, char *buf, int len)
+{
+  gsize bytes_written = 0;
+  gsize count;
+  GIOError err;
+
+  while (bytes_written < len)
+    {
+      err = g_io_channel_write (channel, buf + bytes_written, len - bytes_written, &count);
+      if (err && err != G_IO_ERROR_AGAIN)
+	return FALSE;
+
+      bytes_written += count;
+    }
+
+  return TRUE;
+}
+
+static void
+run_child (GIOChannel *in_channel, GIOChannel *out_channel)
+{
+  int i;
+  int val = 1;
+  GTimer *timer = g_timer_new();
+
+  for (i = 0; i < n_iters; i++)
+    {
+      write_all (out_channel, (char *)&val, sizeof (val));
+      read_all (in_channel, (char *)&val, sizeof (val));
+    }
+
+  val = 0;
+  write_all (out_channel, (char *)&val, sizeof (val));
+
+  val = g_timer_elapsed (timer, NULL) * 1000;
+  
+  write_all (out_channel, (char *)&val, sizeof (val));
+  g_timer_destroy (timer);
+
+  exit (0);
+}
+
+static gboolean
+input_callback (GIOChannel   *source,
+		GIOCondition  condition,
+		gpointer      data)
+{
+  int val;
+  GIOChannel *dest = (GIOChannel *)data;
+  
+  if (!read_all (source, (char *)&val, sizeof(val)))
+    {
+      fprintf (stderr, "Unexpected EOF\n");
+      exit (1);
+    }
+
+  if (val)
+    {
+      write_all (dest, (char *)&val, sizeof(val));
+      
+      return TRUE;
+    }
+  else
+    {
+      g_io_channel_close (source);
+      g_io_channel_close (dest);
+      
+      g_io_channel_unref (source);
+      g_io_channel_unref (dest);
+
+      n_active_children--;
+      if (n_active_children == 0)
+	g_main_loop_quit (loop);
+      
+      return FALSE;
+    }
+}
+
+static void
+create_child (void)
+{
+  int pid;
+  GIOChannel *in_channels[2];
+  GIOChannel *out_channels[2];
+  
+  io_pipe (in_channels);
+  io_pipe (out_channels);
+
+  pid = fork ();
+
+  if (pid > 0)			/* Parent */
+    {
+      g_io_channel_close (in_channels[0]);
+      g_io_channel_close (out_channels[1]);
+
+      g_io_add_watch (out_channels[0], G_IO_IN | G_IO_HUP,
+		      input_callback, in_channels[1]);
+    }
+  else if (pid == 0)		/* Child */
+    {
+      g_io_channel_close (in_channels[1]);
+      g_io_channel_close (out_channels[0]);
+
+      setsid ();
+
+      run_child (in_channels[0], out_channels[1]);
+    }
+  else				/* Error */
+    {
+      fprintf (stderr, "Cannot fork: %s\n", g_strerror (errno));
+      exit (1);
+    }
+}
+
+static double 
+difftimeval (struct timeval *old, struct timeval *new)
+{
+  return
+    (new->tv_sec - old->tv_sec) * 1000. + (new->tv_usec - old->tv_usec) / 1000;
+}
+
+int 
+main (int argc, char **argv)
+{
+  int i;
+  struct rusage old_usage;
+  struct rusage new_usage;
+  
+  if (argc > 1)
+    n_children = atoi(argv[1]);
+
+  if (argc > 2)
+    n_iters = atoi(argv[2]);
+
+  printf ("Children: %d     Iters: %d\n", n_children, n_iters);
+
+  n_active_children = n_children;
+  for (i = 0; i < n_children; i++)
+    create_child ();
+
+  getrusage (RUSAGE_SELF, &old_usage);
+  loop = g_main_loop_new (NULL, FALSE);
+  g_main_loop_run (loop);
+  getrusage (RUSAGE_SELF, &new_usage);
+
+  printf ("Elapsed user: %g\n",
+	  difftimeval (&old_usage.ru_utime, &new_usage.ru_utime));
+  printf ("Elapsed system: %g\n",
+	  difftimeval (&old_usage.ru_stime, &new_usage.ru_stime));
+  printf ("Elapsed total: %g\n",
+	  difftimeval (&old_usage.ru_utime, &new_usage.ru_utime) +	   
+	  difftimeval (&old_usage.ru_stime, &new_usage.ru_stime));
+  printf ("total / iteration: %g\n",
+	  (difftimeval (&old_usage.ru_utime, &new_usage.ru_utime) +	   
+	   difftimeval (&old_usage.ru_stime, &new_usage.ru_stime)) /
+	  (n_iters * n_children));
+
+  return 0;
+}
diff --git a/tests/tree-test.c b/tests/tree-test.c
new file mode 100644
index 0000000..c5cb105
--- /dev/null
+++ b/tests/tree-test.c
@@ -0,0 +1,246 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdio.h>
+#include <string.h>
+#include "glib.h"
+
+
+static gint
+my_compare (gconstpointer a,
+	    gconstpointer b)
+{
+  const char *cha = a;
+  const char *chb = b;
+
+  return *cha - *chb;
+}
+
+static gint
+my_search (gconstpointer a,
+	   gconstpointer b)
+{
+  return my_compare (b, a);
+}
+
+static gpointer destroyed_key = NULL;
+static gpointer destroyed_value = NULL;
+
+static void 
+my_key_destroy (gpointer key)
+{
+  destroyed_key = key;
+}
+
+static void 
+my_value_destroy (gpointer value)
+{
+  destroyed_value = value;
+}
+
+static gint
+my_traverse (gpointer key,
+	     gpointer value,
+	     gpointer data)
+{
+  char *ch = key;
+  g_assert ((*ch) > 0);
+  return FALSE;
+}
+
+char chars[] = 
+  "0123456789"
+  "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+  "abcdefghijklmnopqrstuvwxyz";
+
+char chars2[] = 
+  "0123456789"
+  "abcdefghijklmnopqrstuvwxyz";
+
+static gint
+check_order (gpointer key,
+	     gpointer value,
+	     gpointer data)
+{
+  char **p = data;
+  char *ch = key;
+  
+  g_assert (**p == *ch);
+
+  (*p)++;
+
+  return FALSE;
+}
+
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  gint i;
+  GTree *tree;
+  gboolean removed;
+  char c, d;
+  char *p;
+
+  tree = g_tree_new (my_compare);
+
+  for (i = 0; chars[i]; i++)
+    g_tree_insert (tree, &chars[i], &chars[i]);
+
+  g_tree_foreach (tree, my_traverse, NULL);
+
+  g_assert (g_tree_nnodes (tree) == strlen (chars));
+  g_assert (g_tree_height (tree) == 6);
+  
+  p = chars;
+  g_tree_foreach (tree, check_order, &p);
+
+  for (i = 0; i < 26; i++)
+    {
+      removed = g_tree_remove (tree, &chars[i + 10]);
+      g_assert (removed);
+    }
+
+  c = '\0';
+  removed = g_tree_remove (tree, &c);
+  g_assert (removed == FALSE);
+
+  g_tree_foreach (tree, my_traverse, NULL);
+
+  g_assert (g_tree_nnodes (tree) == strlen (chars2));
+  g_assert (g_tree_height (tree) == 6);
+
+  p = chars2;
+  g_tree_foreach (tree, check_order, &p);
+
+  for (i = 25; i >= 0; i--)
+    g_tree_insert (tree, &chars[i + 10], &chars[i + 10]);
+
+  p = chars;
+  g_tree_foreach (tree, check_order, &p);
+
+  c = '0';
+  p = g_tree_lookup (tree, &c); 
+  g_assert (p && *p == c);
+
+  c = 'A';
+  p = g_tree_lookup (tree, &c);
+  g_assert (p && *p == c);
+
+  c = 'a';
+  p = g_tree_lookup (tree, &c);
+  g_assert (p && *p == c);
+
+  c = 'z';
+  p = g_tree_lookup (tree, &c);
+  g_assert (p && *p == c);
+
+  c = '!';
+  p = g_tree_lookup (tree, &c);
+  g_assert (p == NULL);
+
+  c = '=';
+  p = g_tree_lookup (tree, &c);
+  g_assert (p == NULL);
+
+  c = '|';
+  p = g_tree_lookup (tree, &c);
+  g_assert (p == NULL);
+
+  c = '0';
+  p = g_tree_search (tree, my_search, &c); 
+  g_assert (p && *p == c);
+
+  c = 'A';
+  p = g_tree_search (tree, my_search, &c);
+  g_assert (p && *p == c);
+
+  c = 'a';
+  p = g_tree_search (tree, my_search, &c);
+  g_assert (p &&*p == c);
+
+  c = 'z';
+  p = g_tree_search (tree, my_search, &c);
+  g_assert (p && *p == c);
+
+  c = '!';
+  p = g_tree_search (tree, my_search, &c);
+  g_assert (p == NULL);
+
+  c = '=';
+  p = g_tree_search (tree, my_search, &c);
+  g_assert (p == NULL);
+
+  c = '|';
+  p = g_tree_search (tree, my_search, &c);
+  g_assert (p == NULL);
+
+
+  g_tree_destroy (tree);
+
+  tree = g_tree_new_full ((GCompareDataFunc)my_compare, NULL, 
+			  my_key_destroy, 
+			  my_value_destroy);
+
+  for (i = 0; chars[i]; i++)
+    g_tree_insert (tree, &chars[i], &chars[i]);
+  
+  c = '0';
+  g_tree_insert (tree, &c, &c);
+  g_assert (destroyed_key == &c);
+  g_assert (destroyed_value == &chars[0]);
+  destroyed_key = NULL;
+  destroyed_value = NULL;
+
+  d = '1';
+  g_tree_replace (tree, &d, &d);
+  g_assert (destroyed_key == &chars[1]);
+  g_assert (destroyed_value == &chars[1]);
+  destroyed_key = NULL;
+  destroyed_value = NULL;
+
+  c = '2';
+  removed = g_tree_remove (tree, &c);
+  g_assert (removed);
+  g_assert (destroyed_key == &chars[2]);
+  g_assert (destroyed_value == &chars[2]);
+  destroyed_key = NULL;
+  destroyed_value = NULL;
+
+  c = '3';
+  removed = g_tree_steal (tree, &c);
+  g_assert (removed);
+  g_assert (destroyed_key == NULL);
+  g_assert (destroyed_value == NULL);
+
+  return 0;
+}
+
diff --git a/tests/type-test.c b/tests/type-test.c
new file mode 100644
index 0000000..cbaaa7d
--- /dev/null
+++ b/tests/type-test.c
@@ -0,0 +1,142 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdio.h>
+#include <string.h>
+#include "glib.h"
+
+
+
+int
+main (int   argc,
+      char *argv[])
+{
+  gchar *string;
+  gushort gus;
+  guint gui;
+  gulong gul;
+  gsize gsz;
+  gshort gs;
+  gint gi;
+  glong gl;
+  gint16 gi16t1;
+  gint16 gi16t2;
+  gint32 gi32t1;
+  gint32 gi32t2;
+  guint16 gu16t1 = 0x44afU, gu16t2 = 0xaf44U;
+  guint32 gu32t1 = 0x02a7f109U, gu32t2 = 0x09f1a702U;
+  guint64 gu64t1 = G_GINT64_CONSTANT(0x1d636b02300a7aa7U),
+	  gu64t2 = G_GINT64_CONSTANT(0xa77a0a30026b631dU);
+  gint64 gi64t1;
+  gint64 gi64t2;
+  gssize gsst1;
+  gssize gsst2;
+  gsize  gst1;
+  gsize  gst2;
+
+  /* type sizes */
+  g_assert (sizeof (gint8) == 1);
+  g_assert (sizeof (gint16) == 2);
+  g_assert (sizeof (gint32) == 4);
+  g_assert (sizeof (gint64) == 8);
+
+  g_assert (GUINT16_SWAP_LE_BE (gu16t1) == gu16t2);
+  g_assert (GUINT32_SWAP_LE_BE (gu32t1) == gu32t2);
+  g_assert (GUINT64_SWAP_LE_BE (gu64t1) == gu64t2);
+
+  /* Test the G_(MIN|MAX|MAXU)(SHORT|INT|LONG) macros */
+
+  gus = G_MAXUSHORT;
+  gus++;
+  g_assert (gus == 0);
+
+  gui = G_MAXUINT;
+  gui++;
+  g_assert (gui == 0);
+
+  gul = G_MAXULONG;
+  gul++;
+  g_assert (gul == 0);
+
+  gsz = G_MAXSIZE;
+  gsz++;
+  
+  g_assert (gsz == 0);
+
+  gs = G_MAXSHORT;
+  gs++;
+  g_assert (gs == G_MINSHORT);
+
+  gi = G_MAXINT;
+  gi++;
+  g_assert (gi == G_MININT);
+
+  gl = G_MAXLONG;
+  gl++;
+  g_assert (gl == G_MINLONG);
+
+  /* Test the G_G(U)?INT(16|32|64)_FORMAT macros */
+
+  gi16t1 = -0x3AFA;
+  gu16t1 = 0xFAFA;
+  gi32t1 = -0x3AFAFAFA;
+  gu32t1 = 0xFAFAFAFA; 
+
+#define FORMAT "%" G_GINT16_FORMAT " %" G_GINT32_FORMAT \
+               " %" G_GUINT16_FORMAT " %" G_GUINT32_FORMAT "\n"
+  string = g_strdup_printf (FORMAT, gi16t1, gi32t1, gu16t1, gu32t1);
+  sscanf (string, FORMAT, &gi16t2, &gi32t2, &gu16t2, &gu32t2);
+  g_free (string);
+  g_assert (gi16t1 == gi16t2);
+  g_assert (gi32t1 == gi32t2);
+  g_assert (gu16t1 == gu16t2);
+  g_assert (gu32t1 == gu32t2);
+
+  gi64t1 = G_GINT64_CONSTANT (-0x3AFAFAFAFAFAFAFA);
+  gu64t1 = G_GINT64_CONSTANT (0xFAFAFAFAFAFAFAFA); 
+
+#define FORMAT64 "%" G_GINT64_FORMAT " %" G_GUINT64_FORMAT "\n"
+  string = g_strdup_printf (FORMAT64, gi64t1, gu64t1);
+  sscanf (string, FORMAT64, &gi64t2, &gu64t2);
+  g_free (string);
+  g_assert (gi64t1 == gi64t2);
+  g_assert (gu64t1 == gu64t2);
+
+  gsst1 = -0x3AFAFAFA;
+  gst1 = 0xFAFAFAFA; 
+
+#define FORMATSIZE "%" G_GSSIZE_FORMAT " %" G_GSIZE_FORMAT "\n"
+  string = g_strdup_printf (FORMATSIZE, gsst1, gst1);
+  sscanf (string, FORMATSIZE, &gsst2, &gst2);
+  g_free (string);
+  g_assert (gsst1 == gsst2);
+  g_assert (gst1 == gst2);
+  
+  return 0;
+}
diff --git a/tests/unicode-caseconv.c b/tests/unicode-caseconv.c
new file mode 100644
index 0000000..0563ab6
--- /dev/null
+++ b/tests/unicode-caseconv.c
@@ -0,0 +1,132 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <locale.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <glib.h>
+#include <string.h>
+
+int main (int argc, char **argv)
+{
+  FILE *infile;
+  char buffer[1024];
+  char **strings;
+  char *srcdir = getenv ("srcdir");
+  char *filename;
+  const char *locale;
+  const char *test;
+  const char *expected;
+  char *convert;
+  char *current_locale = setlocale (LC_CTYPE, NULL);
+  gint result = 0;
+
+  if (!srcdir)
+    srcdir = ".";
+  filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "casemap.txt", NULL);
+  
+  infile = fopen (filename, "r");
+  if (!infile)
+    {
+      fprintf (stderr, "Failed to open %s\n", filename );
+      exit (1);
+    }
+  
+  while (fgets (buffer, sizeof(buffer), infile))
+    {
+      if (buffer[0] == '#')
+	continue;
+
+      strings = g_strsplit (buffer, "\t", -1);
+
+      locale = strings[0];
+
+      if (!locale[0])
+	locale = "C";
+	
+      if (strcmp (locale, current_locale) != 0)
+	{
+	  setlocale (LC_CTYPE, locale);
+	  current_locale = setlocale (LC_CTYPE, NULL);
+
+	  if (strncmp (current_locale, locale, 2) != 0)
+	    {
+	      fprintf (stderr, "Cannot set locale to %s, skipping\n", locale);
+	      goto next;
+	    }
+	}
+      
+      test = strings[1];
+
+      /* gen-casemap-txt.pl uses an empty string when a single character
+       * doesn't have an equivalent in a particular case; since that behavior
+       * is nonsense for multicharacter strings, it would make more sense
+       * to put the expected result .. the original character unchanged. But 
+       * for now, we just work around it here and take the empty string to mean
+       * "same as original"
+       */
+
+      convert = g_utf8_strup (test, -1);
+      expected = strings[4][0] ? strings[4] : test;
+      if (strcmp (convert, expected) != 0)
+	{
+	  fprintf (stderr, "Failure: toupper(%s) == %s, should have been %s\n",
+		   test, convert, expected);
+	  result = 1;
+	}
+      g_free (convert);
+
+      convert = g_utf8_strdown (test, -1);
+      expected = strings[2][0] ? strings[2] : test;
+      if (strcmp (convert, expected) != 0)
+	{
+	  fprintf (stderr, "Failure: tolower(%s) == %s, should have been %s\n",
+		   test, convert, expected);
+	  result = 1;
+	}
+      g_free (convert);
+
+    next:
+      g_strfreev (strings);
+    }
+
+  fclose (infile);
+
+  g_free (filename);
+  filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "casefold.txt", NULL);
+  
+  infile = fopen (filename, "r");
+  if (!infile)
+    {
+      fprintf (stderr, "Failed to open %s\n", filename );
+      g_free (filename);
+      exit (1);
+    }
+  
+  while (fgets (buffer, sizeof(buffer), infile))
+    {
+      if (buffer[0] == '#')
+	continue;
+
+      buffer[strlen(buffer) - 1] = '\0';
+      strings = g_strsplit (buffer, "\t", -1);
+
+      test = strings[0];
+
+      convert = g_utf8_casefold (test, -1);
+      if (strcmp (convert, strings[1]) != 0)
+	{
+	  fprintf (stderr, "Failure: casefold(%s) == '%s', should have been '%s'\n",
+		   test, convert, strings[1]);
+	  result = 1;
+	}
+      g_free (convert);
+
+      g_strfreev (strings);
+    }
+
+  fclose (infile);
+  g_free (filename);
+
+  return result;
+}
diff --git a/tests/unicode-collate.c b/tests/unicode-collate.c
new file mode 100644
index 0000000..785f169
--- /dev/null
+++ b/tests/unicode-collate.c
@@ -0,0 +1,124 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+typedef struct {
+  const char *key;
+  const char *str;
+} Line;
+  
+
+int 
+compare_collate (const void *a, const void *b)
+{
+  const Line *line_a = a;
+  const Line *line_b = b;
+
+  return g_utf8_collate (line_a->str, line_b->str);
+}
+
+int 
+compare_key (const void *a, const void *b)
+{
+  const Line *line_a = a;
+  const Line *line_b = b;
+
+  return strcmp (line_a->key, line_b->key);
+}
+
+int main (int argc, char **argv)
+{
+  GIOChannel *in;
+  GError *error = NULL;
+  GArray *line_array = g_array_new (FALSE, FALSE, sizeof(Line));
+  guint i;
+  gboolean do_key = FALSE;
+  gboolean do_file = FALSE;
+  gchar *locale;
+
+  /* FIXME: need to modify environment here,
+   * since g_utf8_collate_key calls setlocal (LC_COLLATE, "")
+   */
+  g_setenv ("LC_ALL", "en_US", TRUE);
+  locale = setlocale (LC_ALL, "");
+  if (locale == NULL || strcmp (locale, "en_US") != 0)
+    {
+      fprintf (stderr, "No suitable locale, skipping test\n"); 
+      return 2;
+    }
+
+  if (argc != 1 && argc != 2 && argc != 3)
+    {
+      fprintf (stderr, "Usage: unicode-collate [--key|--file] [FILE]\n");
+      return 1;
+    }
+
+  i = 1;
+  if (argc > 1)
+    {
+      if (strcmp (argv[1], "--key") == 0)
+        {
+          do_key = TRUE;
+	  i = 2;
+        }
+      else if (strcmp (argv[1], "--file") == 0)
+        {
+          do_key = TRUE;
+          do_file = TRUE;
+	  i = 2;
+        }
+    }
+
+ if (argc > i)
+    {
+      in = g_io_channel_new_file (argv[i], "r", &error);
+      if (!in)
+	{
+	  fprintf (stderr, "Cannot open %s: %s\n", argv[i], error->message);
+	  return 1;
+	}
+    }
+  else
+    {
+      in = g_io_channel_unix_new (fileno (stdin));
+    }
+
+  while (TRUE)
+    {
+      gsize term_pos;
+      gchar *str;
+      Line line;
+
+      if (g_io_channel_read_line (in, &str, NULL, &term_pos, &error) != G_IO_STATUS_NORMAL)
+	break;
+
+      str[term_pos] = '\0';
+
+      if (do_file)
+	line.key = g_utf8_collate_key_for_filename (str, -1);
+      else
+	line.key = g_utf8_collate_key (str, -1);
+      line.str = str;
+
+      g_array_append_val (line_array, line);
+    }
+
+  if (error)
+    {
+      fprintf (stderr, "Error reading test file, %s\n", error->message);
+      return 1;
+    }
+
+  qsort (line_array->data, line_array->len, sizeof (Line), do_key ? compare_key : compare_collate);
+  for (i = 0; i < line_array->len; i++)
+    printf ("%s\n", g_array_index (line_array, Line, i).str);
+
+  g_io_channel_unref (in);
+
+  return 0;
+}
diff --git a/tests/unicode-encoding.c b/tests/unicode-encoding.c
new file mode 100644
index 0000000..09b3392
--- /dev/null
+++ b/tests/unicode-encoding.c
@@ -0,0 +1,422 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+
+static gint exit_status = 0;
+
+static void
+croak (char *format, ...)
+{
+  va_list va;
+  
+  va_start (va, format);
+  vfprintf (stderr, format, va);
+  va_end (va);
+
+  exit (1);
+}
+
+static void
+fail (char *format, ...)
+{
+  va_list va;
+  
+  va_start (va, format);
+  vfprintf (stderr, format, va);
+  va_end (va);
+
+  exit_status |= 1;
+}
+
+typedef enum
+{
+  VALID,
+  INCOMPLETE,
+  NOTUNICODE,
+  OVERLONG,
+  MALFORMED
+} Status;
+
+static gboolean
+ucs4_equal (gunichar *a, gunichar *b)
+{
+  while (*a && *b && (*a == *b))
+    {
+      a++;
+      b++;
+    }
+
+  return (*a == *b);
+}
+
+static gboolean
+utf16_equal (gunichar2 *a, gunichar2 *b)
+{
+  while (*a && *b && (*a == *b))
+    {
+      a++;
+      b++;
+    }
+
+  return (*a == *b);
+}
+
+static gint
+utf16_count (gunichar2 *a)
+{
+  gint result = 0;
+  
+  while (a[result])
+    result++;
+
+  return result;
+}
+
+static void
+process (gint      line,
+	 gchar    *utf8,
+	 Status    status,
+	 gunichar *ucs4,
+	 gint      ucs4_len)
+{
+  const gchar *end;
+  gboolean is_valid = g_utf8_validate (utf8, -1, &end);
+  GError *error = NULL;
+  glong items_read, items_written;
+
+  switch (status)
+    {
+    case VALID:
+      if (!is_valid)
+	{
+	  fail ("line %d: valid but g_utf8_validate returned FALSE\n", line);
+	  return;
+	}
+      break;
+    case NOTUNICODE:
+    case INCOMPLETE:
+    case OVERLONG:
+    case MALFORMED:
+      if (is_valid)
+	{
+	  fail ("line %d: invalid but g_utf8_validate returned TRUE\n", line);
+	  return;
+	}
+      break;
+    }
+
+  if (status == INCOMPLETE)
+    {
+      gunichar *ucs4_result;      
+
+      ucs4_result = g_utf8_to_ucs4 (utf8, -1, NULL, NULL, &error);
+
+      if (!error || !g_error_matches (error, G_CONVERT_ERROR, G_CONVERT_ERROR_PARTIAL_INPUT))
+	{
+	  fail ("line %d: incomplete input not properly detected\n", line);
+	  return;
+	}
+      g_clear_error (&error);
+
+      ucs4_result = g_utf8_to_ucs4 (utf8, -1, &items_read, NULL, &error);
+
+      if (!ucs4_result || items_read == strlen (utf8))
+	{
+	  fail ("line %d: incomplete input not properly detected\n", line);
+	  return;
+	}
+
+      g_free (ucs4_result);
+    }
+
+  if (status == VALID || status == NOTUNICODE)
+    {
+      gunichar *ucs4_result;
+      gchar *utf8_result;
+
+      ucs4_result = g_utf8_to_ucs4 (utf8, -1, &items_read, &items_written, &error);
+      if (!ucs4_result)
+	{
+	  fail ("line %d: conversion to ucs4 failed: %s\n", line, error->message);
+	  return;
+	}
+      
+      if (!ucs4_equal (ucs4_result, ucs4) ||
+	  items_read != strlen (utf8) ||
+	  items_written != ucs4_len)
+	{
+	  fail ("line %d: results of conversion to ucs4 do not match expected.\n", line);
+	  return;
+	}
+
+      g_free (ucs4_result);
+
+      ucs4_result = g_utf8_to_ucs4_fast (utf8, -1, &items_written);
+      
+      if (!ucs4_equal (ucs4_result, ucs4) ||
+	  items_written != ucs4_len)
+	{
+	  fail ("line %d: results of conversion to ucs4 do not match expected.\n", line);
+	  return;
+	}
+
+      utf8_result = g_ucs4_to_utf8 (ucs4_result, -1, &items_read, &items_written, &error);
+      if (!utf8_result)
+	{
+	  fail ("line %d: conversion back to utf8 failed: %s", line, error->message);
+	  return;
+	}
+
+      if (strcmp (utf8_result, utf8) != 0 ||
+	  items_read != ucs4_len ||
+	  items_written != strlen (utf8))
+	{
+	  fail ("line %d: conversion back to utf8 did not match original\n", line);
+	  return;
+	}
+
+      g_free (utf8_result);
+      g_free (ucs4_result);
+    }
+
+  if (status == VALID)
+    {
+      gunichar2 *utf16_expected_tmp;
+      gunichar2 *utf16_expected;
+      gunichar2 *utf16_from_utf8;
+      gunichar2 *utf16_from_ucs4;
+      gunichar *ucs4_result;
+      gsize bytes_written;
+      gint n_chars;
+      gchar *utf8_result;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define TARGET "UTF-16LE"
+#else
+#define TARGET "UTF-16"
+#endif
+
+      if (!(utf16_expected_tmp = (gunichar2 *)g_convert (utf8, -1, TARGET, "UTF-8",
+							 NULL, &bytes_written, NULL)))
+	{
+	  fail ("line %d: could not convert to UTF-16 via g_convert\n", line);
+	  return;
+	}
+
+      /* zero-terminate and remove BOM
+       */
+      n_chars = bytes_written / 2;
+      if (utf16_expected_tmp[0] == 0xfeff) /* BOM */
+	{
+	  n_chars--;
+	  utf16_expected = g_new (gunichar2, n_chars + 1);
+	  memcpy (utf16_expected, utf16_expected_tmp + 1, sizeof(gunichar2) * n_chars);
+	}
+      else if (utf16_expected_tmp[0] == 0xfffe) /* ANTI-BOM */
+	{
+	  fail ("line %d: conversion via iconv to \"UTF-16\" is not native-endian\n", line);
+	  return;
+	}
+      else
+	{
+	  utf16_expected = g_new (gunichar2, n_chars + 1);
+	  memcpy (utf16_expected, utf16_expected_tmp, sizeof(gunichar2) * n_chars);
+	}
+
+      utf16_expected[n_chars] = '\0';
+      
+      if (!(utf16_from_utf8 = g_utf8_to_utf16 (utf8, -1, &items_read, &items_written, &error)))
+	{
+	  fail ("line %d: conversion to ucs16 failed: %s\n", line, error->message);
+	  return;
+	}
+
+      if (items_read != strlen (utf8) ||
+	  utf16_count (utf16_from_utf8) != items_written)
+	{
+	  fail ("line %d: length error in conversion to ucs16\n", line);
+	  return;
+	}
+
+      if (!(utf16_from_ucs4 = g_ucs4_to_utf16 (ucs4, -1, &items_read, &items_written, &error)))
+	{
+	  fail ("line %d: conversion to ucs16 failed: %s\n", line, error->message);
+	  return;
+	}
+
+      if (items_read != ucs4_len ||
+	  utf16_count (utf16_from_ucs4) != items_written)
+	{
+	  fail ("line %d: length error in conversion to ucs16\n", line);
+	  return;
+	}
+
+      if (!utf16_equal (utf16_from_utf8, utf16_expected) ||
+	  !utf16_equal (utf16_from_ucs4, utf16_expected))
+	{
+	  fail ("line %d: results of conversion to ucs16 do not match\n", line);
+	  return;
+	}
+
+      if (!(utf8_result = g_utf16_to_utf8 (utf16_from_utf8, -1, &items_read, &items_written, &error)))
+	{
+	  fail ("line %d: conversion back to utf8 failed: %s\n", line, error->message);
+	  return;
+	}
+
+      if (items_read != utf16_count (utf16_from_utf8) ||
+	  items_written != strlen (utf8))
+	{
+	  fail ("line %d: length error in conversion from ucs16 to utf8\n", line);
+	  return;
+	}
+
+      if (!(ucs4_result = g_utf16_to_ucs4 (utf16_from_ucs4, -1, &items_read, &items_written, &error)))
+	{
+	  fail ("line %d: conversion back to utf8/ucs4 failed\n", line);
+	  return;
+	}
+
+      if (items_read != utf16_count (utf16_from_utf8) ||
+	  items_written != ucs4_len)
+	{
+	  fail ("line %d: length error in conversion from ucs16 to ucs4\n", line);
+	  return;
+	}
+
+      if (strcmp (utf8, utf8_result) != 0 ||
+	  !ucs4_equal (ucs4, ucs4_result))
+	{
+	  fail ("line %d: conversion back to utf8/ucs4 did not match original\n", line);
+	  return;
+	}
+      
+      g_free (utf16_expected_tmp);
+      g_free (utf16_expected);
+      g_free (utf16_from_utf8);
+      g_free (utf16_from_ucs4);
+      g_free (utf8_result);
+      g_free (ucs4_result);
+    }
+}
+
+int
+main (int argc, char **argv)
+{
+  gchar *srcdir = getenv ("srcdir");
+  gchar *testfile;
+  gchar *contents;
+  GError *error = NULL;
+  gchar *p, *end;
+  char *tmp;
+  gint state = 0;
+  gint line = 1;
+  gint start_line = 0;		/* Quiet GCC */
+  gchar *utf8 = NULL;		/* Quiet GCC */
+  GArray *ucs4;
+  Status status = VALID;	/* Quiet GCC */
+
+  if (!srcdir)
+    srcdir = ".";
+  
+  testfile = g_strconcat (srcdir, G_DIR_SEPARATOR_S "utf8.txt", NULL);
+  
+  g_file_get_contents (testfile, &contents, NULL, &error);
+  if (error)
+    croak ("Cannot open utf8.txt: %s", error->message);
+
+  ucs4 = g_array_new (TRUE, FALSE, sizeof(gunichar));
+
+  p = contents;
+
+  /* Loop over lines */
+  while (*p)
+    {
+      while (*p && (*p == ' ' || *p == '\t'))
+	p++;
+
+      end = p;
+      while (*end && (*end != '\r' && *end != '\n'))
+	end++;
+      
+      if (!*p || *p == '#' || *p == '\r' || *p == '\n')
+	goto next_line;
+
+      tmp = g_strstrip (g_strndup (p, end - p));
+      
+      switch (state)
+	{
+	case 0:
+	  /* UTF-8 string */
+	  start_line = line;
+	  utf8 = tmp;
+	  tmp = NULL;
+	  break;
+	  
+	case 1:
+	  /* Status */
+	  if (!strcmp (tmp, "VALID"))
+	    status = VALID;
+	  else if (!strcmp (tmp, "INCOMPLETE"))
+	    status = INCOMPLETE;
+	  else if (!strcmp (tmp, "NOTUNICODE"))
+	    status = NOTUNICODE;
+	  else if (!strcmp (tmp, "OVERLONG"))
+	    status = OVERLONG;
+	  else if (!strcmp (tmp, "MALFORMED"))
+	    status = MALFORMED;
+	  else
+	    croak ("Invalid status on line %d\n", line);
+
+	  if (status != VALID && status != NOTUNICODE)
+	    state++;		/* No UCS-4 data */
+	  
+	  break;
+	  
+	case 2:
+	  /* UCS-4 version */
+
+	  p = strtok (tmp, " \t");
+	  while (p)
+	    {
+	      gchar *endptr;
+	      
+	      gunichar ch = strtoul (p, &endptr, 16);
+	      if (*endptr != '\0')
+		croak ("Invalid UCS-4 character on line %d\n", line);
+
+	      g_array_append_val (ucs4, ch);
+	      
+	      p = strtok (NULL, " \t");
+	    }
+
+	  break;
+	}
+
+      g_free (tmp);
+      state = (state + 1) % 3;
+
+      if (state == 0)
+	{
+	  process (start_line, utf8, status, (gunichar *)ucs4->data, ucs4->len);
+	  g_array_set_size (ucs4, 0);
+	  g_free (utf8);
+	}
+      
+    next_line:
+      p = end;
+      if (*p && *p == '\r')
+	p++;
+      if (*p && *p == '\n')
+	p++;
+      
+      line++;
+    }
+
+  return exit_status;
+}
diff --git a/tests/unicode-normalize.c b/tests/unicode-normalize.c
new file mode 100644
index 0000000..9679e25
--- /dev/null
+++ b/tests/unicode-normalize.c
@@ -0,0 +1,210 @@
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+gboolean success = TRUE;
+
+static char *
+decode (const gchar *input)
+{
+  unsigned ch;
+  int offset = 0;
+  GString *result = g_string_new (NULL);
+  
+  do 
+    {
+      if (sscanf (input + offset, "%x", &ch) != 1)
+	{
+	  fprintf (stderr, "Error parsing character string %s\n", input);
+	  exit (1);
+	}
+
+      g_string_append_unichar (result, ch);
+      
+      while (input[offset] && input[offset] != ' ')
+	offset++;
+      while (input[offset] && input[offset] == ' ')
+	offset++;
+    }
+  while (input[offset]);
+
+  return g_string_free (result, FALSE);
+}
+
+const char *names[4] = {
+  "NFD",
+  "NFC",
+  "NFKD",
+  "NFKC"
+};
+
+static char *
+encode (const gchar *input)
+{
+  GString *result = g_string_new(NULL);
+
+  const gchar *p = input;
+  while (*p)
+    {
+      gunichar c = g_utf8_get_char (p);
+      g_string_append_printf (result, "%04X ", c);
+      p = g_utf8_next_char(p);
+    }
+
+  return g_string_free (result, FALSE);
+}
+
+static void
+test_form (int            line,
+	   GNormalizeMode mode,
+	   gboolean       do_compat,
+	   int            expected,
+	   char         **c,
+	   char         **raw)
+{
+  int i;
+  
+  gboolean mode_is_compat = (mode == G_NORMALIZE_NFKC ||
+			     mode == G_NORMALIZE_NFKD);
+
+  if (mode_is_compat || !do_compat)
+    {
+      for (i = 0; i < 3; i++)
+	{
+	  char *result = g_utf8_normalize (c[i], -1, mode);
+	  if (strcmp (result, c[expected]) != 0)
+	    {
+	      char *result_raw = encode(result);
+	      fprintf (stderr, "\nFailure: %d/%d: %s\n", line, i + 1, raw[5]);
+	      fprintf (stderr, "  g_utf8_normalize (%s, %s) != %s but %s\n",
+		   raw[i], names[mode], raw[expected], result_raw);
+	      g_free (result_raw);
+	      success = FALSE;
+	    }
+	  
+	  g_free (result);
+	}
+    }
+  if (mode_is_compat || do_compat)
+    {
+      for (i = 3; i < 5; i++)
+	{
+	  char *result = g_utf8_normalize (c[i], -1, mode);
+	  if (strcmp (result, c[expected]) != 0)
+	    {
+	      char *result_raw = encode(result);
+	      fprintf (stderr, "\nFailure: %d/%d: %s\n", line, i, raw[5]);
+	      fprintf (stderr, "  g_utf8_normalize (%s, %s) != %s but %s\n",
+		   raw[i], names[mode], raw[expected], result_raw);
+	      g_free (result_raw);
+	      success = FALSE;
+	    }
+	  
+	  g_free (result);
+	}
+    }
+}
+
+static gboolean
+process_one (int line, gchar **columns)
+{
+  char *c[5];
+  int i;
+  gboolean skip = FALSE;
+
+  for (i=0; i < 5; i++)
+    {
+      c[i] = decode(columns[i]);
+      if (!c[i])
+	skip = TRUE;
+    }
+
+  if (!skip)
+    {
+      test_form (line, G_NORMALIZE_NFD, FALSE, 2, c, columns);
+      test_form (line, G_NORMALIZE_NFD, TRUE, 4, c, columns);
+      test_form (line, G_NORMALIZE_NFC, FALSE, 1, c, columns);
+      test_form (line, G_NORMALIZE_NFC, TRUE, 3, c, columns);
+      test_form (line, G_NORMALIZE_NFKD, TRUE, 4, c, columns);
+      test_form (line, G_NORMALIZE_NFKC, TRUE, 3, c, columns);
+    }
+
+  for (i=0; i < 5; i++)
+    g_free (c[i]);
+  
+  return TRUE;
+}
+
+int main (int argc, char **argv)
+{
+  GIOChannel *in;
+  GError *error = NULL;
+  GString *buffer = g_string_new (NULL);
+  int line_to_do = 0;
+  int line = 1;
+
+  if (argc != 2 && argc != 3)
+    {
+      fprintf (stderr, "Usage: unicode-normalize NormalizationTest.txt LINE\n");
+      return 1;
+    }
+
+  if (argc == 3)
+    line_to_do = atoi(argv[2]);
+
+  in = g_io_channel_new_file (argv[1], "r", &error);
+  if (!in)
+    {
+      fprintf (stderr, "Cannot open %s: %s\n", argv[1], error->message);
+      return 1;
+    }
+
+  while (TRUE)
+    {
+      gsize term_pos;
+      gchar **columns;
+
+      if (g_io_channel_read_line_string (in, buffer, &term_pos, &error) != G_IO_STATUS_NORMAL)
+	break;
+	
+      if (line_to_do && line != line_to_do)
+	goto next;
+      
+      buffer->str[term_pos] = '\0';
+      
+      if (buffer->str[0] == '#') /* Comment */
+	goto next;
+      if (buffer->str[0] == '@') /* Part */
+	{
+	  fprintf (stderr, "\nProcessing %s\n", buffer->str + 1);
+	  goto next;
+	}
+      
+      columns = g_strsplit (buffer->str, ";", -1);
+      if (!columns[0])
+	goto next;
+      
+      if (!process_one (line, columns))
+	return 1;
+      g_strfreev (columns);
+
+    next:
+      g_string_truncate (buffer, 0);
+      line++;
+    }
+
+  if (error)
+    {
+      fprintf (stderr, "Error reading test file, %s\n", error->message);
+      return 1;
+    }
+
+  g_io_channel_unref (in);
+  g_string_free (buffer, TRUE);
+
+  return !success;
+}
diff --git a/tests/uri-test.c b/tests/uri-test.c
new file mode 100644
index 0000000..eb46676
--- /dev/null
+++ b/tests/uri-test.c
@@ -0,0 +1,477 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include "config.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char *filename;
+  char *hostname;
+  char *expected_result;
+  GConvertError expected_error; /* If failed */
+}  ToUriTest;
+
+ToUriTest
+to_uri_tests[] = {
+  { "/etc", NULL, "file:///etc"},
+  { "/etc", "", "file:///etc"},
+  { "/etc", "otherhost", "file://otherhost/etc"},
+#ifdef G_OS_WIN32
+  { "/etc", "localhost", "file:///etc"},
+  { "c:\\windows", NULL, "file:///c:/windows"},
+  { "c:\\windows", "localhost", "file:///c:/windows"},
+  { "c:\\windows", "otherhost", "file://otherhost/c:/windows"},
+  { "\\\\server\\share\\dir", NULL, "file:////server/share/dir"},
+  { "\\\\server\\share\\dir", "localhost", "file:////server/share/dir"},
+#else
+  { "/etc", "localhost", "file://localhost/etc"},
+  { "c:\\windows", NULL, NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH}, /* it's important to get this error on Unix */
+  { "c:\\windows", "localhost", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+  { "c:\\windows", "otherhost", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+#endif
+  { "etc", "localhost", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+#ifndef G_PLATFORM_WIN32
+  { "/etc/\xE5\xE4\xF6", NULL, "file:///etc/%E5%E4%F6" },
+  { "/etc/\xC3\xB6\xC3\xA4\xC3\xA5", NULL, "file:///etc/%C3%B6%C3%A4%C3%A5"},
+#endif
+  { "/etc", "\xC3\xB6\xC3\xA4\xC3\xA5", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/etc", "\xE5\xE4\xF6", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/etc/file with #%", NULL, "file:///etc/file%20with%20%23%25"},
+  { "", NULL, NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+  { "", "", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+  { "", "localhost", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+  { "", "otherhost", NULL, G_CONVERT_ERROR_NOT_ABSOLUTE_PATH},
+  { "/0123456789", NULL, "file:///0123456789"},
+  { "/ABCDEFGHIJKLMNOPQRSTUVWXYZ", NULL, "file:///ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
+  { "/abcdefghijklmnopqrstuvwxyz", NULL, "file:///abcdefghijklmnopqrstuvwxyz"},
+  { "/-_.!~*'()", NULL, "file:///-_.!~*'()"},
+#ifdef G_OS_WIN32
+  /* As '\\' is a path separator on Win32, it gets turned into '/' in the URI */
+  { "/\"#%<>[\\]^`{|}\x7F", NULL, "file:///%22%23%25%3C%3E%5B/%5D%5E%60%7B%7C%7D%7F"},
+#else
+  /* On Unix, '\\' is a normal character in the file name */
+  { "/\"#%<>[\\]^`{|}\x7F", NULL, "file:///%22%23%25%3C%3E%5B%5C%5D%5E%60%7B%7C%7D%7F"},
+#endif
+  { "/;@+$,", NULL, "file:///%3B@+$,"},
+  /* This and some of the following are of course as such illegal file names on Windows,
+   * and would not occur in real life.
+   */
+  { "/:", NULL, "file:///:"},
+  { "/?&=", NULL, "file:///%3F&="}, 
+  { "/", "0123456789-", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "file://ABCDEFGHIJKLMNOPQRSTUVWXYZ/"},
+  { "/", "abcdefghijklmnopqrstuvwxyz", "file://abcdefghijklmnopqrstuvwxyz/"},
+  { "/", "_.!~*'()", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", "\"#%<>[\\]^`{|}\x7F", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", ";?&=+$,", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", "/", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", "@:", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", "\x80\xFF", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+  { "/", "\xC3\x80\xC3\xBF", NULL, G_CONVERT_ERROR_ILLEGAL_SEQUENCE},
+};
+
+
+typedef struct
+{
+  char *uri;
+  char *expected_filename;
+  char *expected_hostname;
+  GConvertError expected_error; /* If failed */
+}  FromUriTest;
+
+FromUriTest
+from_uri_tests[] = {
+  { "file:///etc", "/etc"},
+  { "file:/etc", "/etc"},
+#ifdef G_OS_WIN32
+  /* On Win32 we don't return "localhost" hostames, just in case
+   * it isn't recognized anyway.
+   */
+  { "file://localhost/etc", "/etc", NULL},
+  { "file://localhost/etc/%23%25%20file", "/etc/#% file", NULL},
+  { "file://localhost/\xE5\xE4\xF6", "/\xe5\xe4\xf6", NULL},
+  { "file://localhost/%E5%E4%F6", "/\xe5\xe4\xf6", NULL},
+#else
+  { "file://localhost/etc", "/etc", "localhost"},
+  { "file://localhost/etc/%23%25%20file", "/etc/#% file", "localhost"},
+  { "file://localhost/\xE5\xE4\xF6", "/\xe5\xe4\xf6", "localhost"},
+  { "file://localhost/%E5%E4%F6", "/\xe5\xe4\xf6", "localhost"},
+#endif
+  { "file://otherhost/etc", "/etc", "otherhost"},
+  { "file://otherhost/etc/%23%25%20file", "/etc/#% file", "otherhost"},
+  { "file://%C3%B6%C3%A4%C3%A5/etc", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file:////etc/%C3%B6%C3%C3%C3%A5", "//etc/\xc3\xb6\xc3\xc3\xc3\xa5", NULL},
+  { "file://\xE5\xE4\xF6/etc", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://%E5%E4%F6/etc", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file:///some/file#bad", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://some", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file:test", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "http://www.yahoo.com/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file:////etc", "//etc"},
+  { "file://///etc", "///etc"},
+#ifdef G_OS_WIN32
+  /* URIs with backslashes come from some nonstandard application, but accept them anyhow */
+  { "file:///c:\\foo", "c:\\foo"},
+  { "file:///c:/foo\\bar", "c:\\foo\\bar"},
+  /* Accept also the old Netscape drive-letter-and-vertical bar convention */
+  { "file:///c|/foo", "c:\\foo"},
+  { "file:////server/share/dir", "\\\\server\\share\\dir"},
+  { "file://localhost//server/share/foo", "\\\\server\\share\\foo"},
+  { "file://otherhost//server/share/foo", "\\\\server\\share\\foo", "otherhost"},
+#else
+  { "file:///c:\\foo", "/c:\\foo"},
+  { "file:///c:/foo", "/c:/foo"},
+  { "file:////c:/foo", "//c:/foo"},
+#endif
+  { "file://0123456789/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://ABCDEFGHIJKLMNOPQRSTUVWXYZ/", "/", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
+  { "file://abcdefghijklmnopqrstuvwxyz/", "/", "abcdefghijklmnopqrstuvwxyz"},
+  { "file://-_.!~*'()/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://\"<>[\\]^`{|}\x7F/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://;?&=+$,/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://%C3%80%C3%BF/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://@/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://:/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://#/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://%23/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+  { "file://%2F/", NULL, NULL, G_CONVERT_ERROR_BAD_URI},
+};
+
+
+static gboolean any_failed = FALSE;
+
+static void
+run_to_uri_tests (void)
+{
+  int i;
+  gchar *res;
+  GError *error;
+  
+  for (i = 0; i < G_N_ELEMENTS (to_uri_tests); i++)
+    {
+      error = NULL;
+      res = g_filename_to_uri (to_uri_tests[i].filename,
+			       to_uri_tests[i].hostname,
+			       &error);
+
+      if (to_uri_tests[i].expected_result == NULL)
+	{
+	  if (res != NULL)
+	    {
+	      g_print ("\ng_filename_to_uri() test %d failed, expected to return NULL, actual result: %s\n", i, res);
+	      any_failed = TRUE;
+	    }
+	  else
+	    {
+	      if (error == NULL)
+		{
+		  g_print ("\ng_filename_to_uri() test %d failed, returned NULL, but didn't set error\n", i);
+		  any_failed = TRUE;
+		}
+	      else if (error->domain != G_CONVERT_ERROR)
+		{
+		  g_print ("\ng_filename_to_uri() test %d failed, returned NULL, set non G_CONVERT_ERROR error\n", i);
+		  any_failed = TRUE;
+		}
+	      else if (error->code != to_uri_tests[i].expected_error)
+		{
+		  g_print ("\ng_filename_to_uri() test %d failed as expected, but set wrong errorcode %d instead of expected %d \n",
+			   i, error->code, to_uri_tests[i].expected_error);
+		  any_failed = TRUE;
+		}
+	    }
+	}
+      else if (res == NULL || strcmp (res, to_uri_tests[i].expected_result) != 0)
+	{
+	  g_print ("\ng_filename_to_uri() test %d failed, expected result: %s, actual result: %s\n",
+		   i, to_uri_tests[i].expected_result, (res) ? res : "NULL");
+	  if (error)
+	    g_print ("Error message: %s\n", error->message);
+	  any_failed = TRUE;
+	}
+      g_free (res);
+    }
+}
+
+static void
+run_from_uri_tests (void)
+{
+  int i;
+  gchar *res;
+  gchar *hostname;
+  GError *error;
+  
+  for (i = 0; i < G_N_ELEMENTS (from_uri_tests); i++)
+    {
+      error = NULL;
+      res = g_filename_from_uri (from_uri_tests[i].uri,
+				 &hostname,
+				 &error);
+
+      if (from_uri_tests[i].expected_filename == NULL)
+	{
+	  if (res != NULL)
+	    {
+	      g_print ("\ng_filename_from_uri() test %d failed, expected to return NULL, actual result: %s\n", i, res);
+	      any_failed = TRUE;
+	    }
+	  else
+	    {
+	      if (error == NULL)
+		{
+		  g_print ("\ng_filename_from_uri() test %d failed, returned NULL, but didn't set error\n", i);
+		  any_failed = TRUE;
+		}
+	      else if (error->domain != G_CONVERT_ERROR)
+		{
+		  g_print ("\ng_filename_from_uri() test %d failed, returned NULL, set non G_CONVERT_ERROR error\n", i);
+		  any_failed = TRUE;
+		}
+	      else if (error->code != from_uri_tests[i].expected_error)
+		{
+		  g_print ("\ng_filename_from_uri() test %d failed as expected, but set wrong errorcode %d instead of expected %d \n",
+			   i, error->code, from_uri_tests[i].expected_error);
+		  any_failed = TRUE;
+		}
+	    }
+	}
+      else
+	{
+#ifdef G_OS_WIN32
+	  gchar *slash, *p;
+
+	  p = from_uri_tests[i].expected_filename = g_strdup (from_uri_tests[i].expected_filename);
+	  while ((slash = strchr (p, '/')) != NULL)
+	    {
+	      *slash = '\\';
+	      p = slash + 1;
+	    }
+#endif
+	  if (res == NULL || strcmp (res, from_uri_tests[i].expected_filename) != 0)
+	    {
+	      g_print ("\ng_filename_from_uri() test %d failed, expected result: %s, actual result: %s\n",
+		       i, from_uri_tests[i].expected_filename, (res) ? res : "NULL");
+	      any_failed = TRUE;
+	    }
+
+	  if (from_uri_tests[i].expected_hostname == NULL)
+	    {
+	      if (hostname != NULL)
+		{
+		  g_print ("\ng_filename_from_uri() test %d failed, expected no hostname, got: %s\n",
+			   i, hostname);
+		  any_failed = TRUE;
+		}
+	    }
+	  else if (hostname == NULL ||
+		   strcmp (hostname, from_uri_tests[i].expected_hostname) != 0)
+	    {
+	      g_print ("\ng_filename_from_uri() test %d failed, expected hostname: %s, actual result: %s\n",
+		       i, from_uri_tests[i].expected_hostname, (hostname) ? hostname : "NULL");
+	      any_failed = TRUE;
+	    }
+	}
+    }
+}
+
+static gint
+safe_strcmp (const gchar *a, const gchar *b)
+{
+  return strcmp (a ? a : "", b ? b : "");
+}
+
+static gint
+safe_strcmp_filename (const gchar *a, const gchar *b)
+{
+#ifndef G_OS_WIN32
+  return safe_strcmp (a, b);
+#else
+  if (!a || !b)
+    return safe_strcmp (a, b);
+  else
+    {
+      while (*a && *b)
+	{
+	  if ((G_IS_DIR_SEPARATOR (*a) && G_IS_DIR_SEPARATOR (*b)) ||
+	      *a == *b)
+	    a++, b++;
+	  else
+	    return (*a - *b);
+	}
+      return (*a - *b);
+    }
+#endif
+}
+
+static gint
+safe_strcmp_hostname (const gchar *a, const gchar *b)
+{
+#ifndef G_OS_WIN32
+  return safe_strcmp (a, b);
+#else
+  if (safe_strcmp (a, "localhost") == 0 && b == NULL)
+    return 0;
+  else
+    return safe_strcmp (a, b);
+#endif
+}
+
+static void
+run_roundtrip_tests (void)
+{
+  int i;
+  gchar *uri, *hostname, *res;
+  GError *error;
+  
+  for (i = 0; i < G_N_ELEMENTS (to_uri_tests); i++)
+    {
+      if (to_uri_tests[i].expected_error != 0)
+	continue;
+
+      error = NULL;
+      uri = g_filename_to_uri (to_uri_tests[i].filename,
+			       to_uri_tests[i].hostname,
+			       &error);
+      
+      if (error != NULL)
+	{
+	  g_print ("g_filename_to_uri failed unexpectedly: %s\n", 
+		   error->message);
+	  any_failed = TRUE;
+	  continue;
+	}
+      
+      error = NULL;
+      res = g_filename_from_uri (uri, &hostname, &error);
+      if (error != NULL)
+	{
+	  g_print ("g_filename_from_uri failed unexpectedly: %s\n", 
+		   error->message);
+	  any_failed = TRUE;
+	  continue;
+	}
+
+      if (safe_strcmp_filename (to_uri_tests[i].filename, res))
+	{
+	  g_print ("roundtrip test %d failed, filename modified: "
+		   " expected \"%s\", but got \"%s\"\n",
+		   i, to_uri_tests[i].filename, res);
+	  any_failed = TRUE;
+	}
+
+      if (safe_strcmp_hostname (to_uri_tests[i].hostname, hostname))
+	{
+	  g_print ("roundtrip test %d failed, hostname modified: "
+		     " expected \"%s\", but got \"%s\"\n",
+		   i, to_uri_tests[i].hostname, hostname);
+	  any_failed = TRUE;
+	}
+    }
+}
+
+static void
+run_uri_list_tests (void)
+{
+  /* straight from the RFC */
+  gchar *list =
+    "# urn:isbn:0-201-08372-8\r\n"
+    "http://www.huh.org/books/foo.html\r\n"
+    "http://www.huh.org/books/foo.pdf   \r\n"
+    "   ftp://ftp.foo.org/books/foo.txt\r\n";
+  gchar *expected_uris[] = {
+    "http://www.huh.org/books/foo.html",
+    "http://www.huh.org/books/foo.pdf",
+    "ftp://ftp.foo.org/books/foo.txt"
+  };
+
+  gchar **uris;
+  gint j;
+
+  uris = g_uri_list_extract_uris (list);
+  
+  if (g_strv_length (uris) != 3)
+    {
+      g_print ("uri list test failed: "
+	       " expected %d uris, but got %d\n",
+	       3, g_strv_length (uris));
+      any_failed = TRUE;
+    }
+  
+  for (j = 0; j < 3; j++)
+    {
+      if (safe_strcmp (uris[j], expected_uris[j])) 
+	{
+	  g_print ("uri list test failed: "
+		   " expected \"%s\", but got \"%s\"\n",
+		   expected_uris[j], uris[j]);
+	  any_failed = TRUE;
+	}
+    }
+
+  g_strfreev (uris);
+
+  uris = g_uri_list_extract_uris ("# just hot air\r\n# more hot air");
+  if (g_strv_length (uris) != 0)
+    {
+      g_print ("uri list test 2 failed: "
+	       " expected %d uris, but got %d (first is \"%s\")\n",
+	       0, g_strv_length (uris), uris[0]);
+      any_failed = TRUE;
+    }
+  
+}
+
+int
+main (int   argc,
+      char *argv[])
+{
+#ifdef G_OS_UNIX
+#  ifdef HAVE_UNSETENV  
+  unsetenv ("G_BROKEN_FILENAMES");
+#  else
+  /* putenv with no = isn't standard, but works to unset the variable
+   * on some systems
+   */
+  putenv ("G_BROKEN_FILENAMES");
+#  endif  
+#endif
+
+  run_to_uri_tests ();
+  run_from_uri_tests ();
+  run_roundtrip_tests ();
+  run_uri_list_tests ();
+
+  return any_failed ? 1 : 0;
+}
diff --git a/tests/utf8-pointer.c b/tests/utf8-pointer.c
new file mode 100644
index 0000000..91df96e
--- /dev/null
+++ b/tests/utf8-pointer.c
@@ -0,0 +1,112 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * 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 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.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+#include <string.h>
+#include <glib.h>
+
+/* Test conversions between offsets and pointers */
+
+static void test_utf8 (gchar *string)
+{
+  gint num_chars;
+  gchar **p;
+  gint i, j;
+  
+  g_assert (g_utf8_validate (string, -1, NULL));
+  
+  num_chars = g_utf8_strlen (string, -1);
+  
+  p = (gchar **) g_malloc (num_chars * sizeof (gchar *));
+  
+  p[0] = string;
+  for (i = 1; i < num_chars; i++)
+    p[i] = g_utf8_next_char (p[i-1]);
+  
+  for (i = 0; i < num_chars; i++)
+    for (j = 0; j < num_chars; j++) 
+      {
+	g_assert (g_utf8_offset_to_pointer (p[i], j - i) == p[j]);	
+	g_assert (g_utf8_pointer_to_offset (p[i], p[j]) == j - i);	
+      }
+  
+  g_free (p);
+}
+
+gchar *longline = "asdasdas dsaf asfd as fdasdf asfd asdf as dfas dfasdf a"
+"asd fasdf asdf asdf asd fasfd as fdasfd asdf as fdççççççççças ffsd asfd as fdASASASAs As"
+"Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfg sdfg sdf gsdfg sdfg sd"
+"asd fasdf asdf asdf asd fasfd as fdaèèèèèèè òòòòòòòòòòòòsfd asdf as fdas ffsd asfd as fdASASASAs D"
+"Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfgùùùùùùùùùùùùùù sdfg sdf gsdfg sdfg sd"
+"asd fasdf asdf asdf asd fasfd as fdasfd asd@@@@@@@f as fdas ffsd asfd as fdASASASAs D "
+"Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdf€€€€€€€€€€€€€€€€€€g sdfg sdfg sdf gsdfg sdfg sd"
+"asd fasdf asdf asdf asd fasfd as fdasfd asdf as fdas ffsd asfd as fdASASASAs D"
+"Asfdsf sdfg sdfg dsfg dfg sdfgsdfgsdfgsdfg sdfgsdfg sdfg sdfg sdf gsdfg sdfg sd\n\nlalala\n";
+
+static void
+test_length (void)
+{
+  g_assert (g_utf8_strlen ("1234", -1) == 4);
+  g_assert (g_utf8_strlen ("1234", 0) == 0);
+  g_assert (g_utf8_strlen ("1234", 1) == 1);
+  g_assert (g_utf8_strlen ("1234", 2) == 2);
+  g_assert (g_utf8_strlen ("1234", 3) == 3);
+  g_assert (g_utf8_strlen ("1234", 4) == 4);
+  g_assert (g_utf8_strlen ("1234", 5) == 4);
+
+  g_assert (g_utf8_strlen (longline, -1) == 762);
+  g_assert (g_utf8_strlen (longline, strlen (longline)) == 762);
+  g_assert (g_utf8_strlen (longline, 1024) == 762);
+
+  g_assert (g_utf8_strlen (NULL, 0) == 0);
+
+  g_assert (g_utf8_strlen ("a\340\250\201c", -1) == 3);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 1) == 1);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 2) == 1);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 3) == 1);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 4) == 2);
+  g_assert (g_utf8_strlen ("a\340\250\201c", 5) == 3);
+}
+
+static void
+test_misc (void)
+{
+  char *s;
+  s = g_utf8_strreverse ("1234", -1);
+  g_assert (strcmp (s, "4321") == 0);
+  g_free (s);
+  s = g_utf8_strreverse ("1234", 3);
+  g_assert (strcmp (s, "321") == 0);
+  g_free (s);
+}
+
+int main (int argc, char *argv[])
+{
+  test_utf8 (longline);
+  test_length ();
+  test_misc ();
+  
+  return 0;
+}
diff --git a/tests/utf8-validate.c b/tests/utf8-validate.c
new file mode 100644
index 0000000..98f0b1f
--- /dev/null
+++ b/tests/utf8-validate.c
@@ -0,0 +1,319 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 2001 Matthias Clasen <matthiasc@poet.de>
+ *
+ * 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 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.
+ */
+
+#include "glib.h"
+
+#define UNICODE_VALID(Char)                   \
+    ((Char) < 0x110000 &&                     \
+     (((Char) & 0xFFFFF800) != 0xD800) &&     \
+     ((Char) < 0xFDD0 || (Char) > 0xFDEF) &&  \
+     ((Char) & 0xFFFE) != 0xFFFE)
+
+
+
+static gboolean any_failed = FALSE;
+
+struct {
+  const gchar *text;
+  gint max_len;
+  gint offset;
+  gboolean valid;
+} test[] = {  
+  /* some tests to check max_len handling */
+  /* length 1 */
+  { "abcde", -1, 5, TRUE },
+  { "abcde", 3, 3, TRUE },
+  { "abcde", 5, 5, TRUE },
+  { "abcde", 7, 5, FALSE },
+  /* length 2 */
+  { "\xc2\xa9\xc2\xa9\xc2\xa9", -1, 6, TRUE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  1, 0, FALSE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  2, 2, TRUE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  3, 2, FALSE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  4, 4, TRUE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  5, 4, FALSE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  6, 6, TRUE }, 
+  { "\xc2\xa9\xc2\xa9\xc2\xa9",  7, 6, FALSE }, 
+  /* length 3 */
+  { "\xe2\x89\xa0\xe2\x89\xa0", -1, 6, TRUE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  1, 0, FALSE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  2, 0, FALSE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  3, 3, TRUE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  4, 3, FALSE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  5, 3, FALSE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  6, 6, TRUE },
+  { "\xe2\x89\xa0\xe2\x89\xa0",  7, 6, FALSE },
+
+  /* examples from http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt */
+  /* greek 'kosme' */
+  { "\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5", -1, 11, TRUE },
+  /* first sequence of each length */
+  { "\x00", -1, 0, TRUE },
+  { "\xc2\x80", -1, 2, TRUE },
+  { "\xe0\xa0\x80", -1, 3, TRUE },
+  { "\xf0\x90\x80\x80", -1, 4, TRUE },
+  { "\xf8\x88\x80\x80\x80", -1, 0, FALSE },
+  { "\xfc\x84\x80\x80\x80\x80", -1, 0, FALSE },
+  /* last sequence of each length */
+  { "\x7f", -1, 1, TRUE },
+  { "\xdf\xbf", -1, 2, TRUE },
+  { "\xef\xbf\xbf", -1, 0, FALSE },
+  { "\xf7\xbf\xbf\xbf", -1, 0, FALSE },
+  { "\xfb\xbf\xbf\xbf\xbf", -1, 0, FALSE },
+  { "\xfd\xbf\xbf\xbf\xbf\xbf", -1, 0, FALSE },
+  /* other boundary conditions */
+  { "\xed\x9f\xbf", -1, 3, TRUE },
+  { "\xee\x80\x80", -1, 3, TRUE },
+  { "\xef\xbf\xbd", -1, 3, TRUE },
+  { "\xf4\x8f\xbf\xbf", -1, 0, FALSE },
+  { "\xf4\x90\x80\x80", -1, 0, FALSE },
+  /* malformed sequences */
+  /* continuation bytes */
+  { "\x80", -1, 0, FALSE },
+  { "\xbf", -1, 0, FALSE },
+  { "\x80\xbf", -1, 0, FALSE },
+  { "\x80\xbf\x80", -1, 0, FALSE },
+  { "\x80\xbf\x80\xbf", -1, 0, FALSE },
+  { "\x80\xbf\x80\xbf\x80", -1, 0, FALSE },
+  { "\x80\xbf\x80\xbf\x80\xbf", -1, 0, FALSE },
+  { "\x80\xbf\x80\xbf\x80\xbf\x80", -1, 0, FALSE },
+
+  /* all possible continuation byte */
+  { "\x80", -1, 0, FALSE },
+  { "\x81", -1, 0, FALSE },
+  { "\x82", -1, 0, FALSE },
+  { "\x83", -1, 0, FALSE },
+  { "\x84", -1, 0, FALSE },
+  { "\x85", -1, 0, FALSE },
+  { "\x86", -1, 0, FALSE },
+  { "\x87", -1, 0, FALSE },
+  { "\x88", -1, 0, FALSE },
+  { "\x89", -1, 0, FALSE },
+  { "\x8a", -1, 0, FALSE },
+  { "\x8b", -1, 0, FALSE },
+  { "\x8c", -1, 0, FALSE },
+  { "\x8d", -1, 0, FALSE },
+  { "\x8e", -1, 0, FALSE },
+  { "\x8f", -1, 0, FALSE },
+  { "\x90", -1, 0, FALSE },
+  { "\x91", -1, 0, FALSE },
+  { "\x92", -1, 0, FALSE },
+  { "\x93", -1, 0, FALSE },
+  { "\x94", -1, 0, FALSE },
+  { "\x95", -1, 0, FALSE },
+  { "\x96", -1, 0, FALSE },
+  { "\x97", -1, 0, FALSE },
+  { "\x98", -1, 0, FALSE },
+  { "\x99", -1, 0, FALSE },
+  { "\x9a", -1, 0, FALSE },
+  { "\x9b", -1, 0, FALSE },
+  { "\x9c", -1, 0, FALSE },
+  { "\x9d", -1, 0, FALSE },
+  { "\x9e", -1, 0, FALSE },
+  { "\x9f", -1, 0, FALSE },
+  { "\xa0", -1, 0, FALSE },
+  { "\xa1", -1, 0, FALSE },
+  { "\xa2", -1, 0, FALSE },
+  { "\xa3", -1, 0, FALSE },
+  { "\xa4", -1, 0, FALSE },
+  { "\xa5", -1, 0, FALSE },
+  { "\xa6", -1, 0, FALSE },
+  { "\xa7", -1, 0, FALSE },
+  { "\xa8", -1, 0, FALSE },
+  { "\xa9", -1, 0, FALSE },
+  { "\xaa", -1, 0, FALSE },
+  { "\xab", -1, 0, FALSE },
+  { "\xac", -1, 0, FALSE },
+  { "\xad", -1, 0, FALSE },
+  { "\xae", -1, 0, FALSE },
+  { "\xaf", -1, 0, FALSE },
+  { "\xb0", -1, 0, FALSE },
+  { "\xb1", -1, 0, FALSE },
+  { "\xb2", -1, 0, FALSE },
+  { "\xb3", -1, 0, FALSE },
+  { "\xb4", -1, 0, FALSE },
+  { "\xb5", -1, 0, FALSE },
+  { "\xb6", -1, 0, FALSE },
+  { "\xb7", -1, 0, FALSE },
+  { "\xb8", -1, 0, FALSE },
+  { "\xb9", -1, 0, FALSE },
+  { "\xba", -1, 0, FALSE },
+  { "\xbb", -1, 0, FALSE },
+  { "\xbc", -1, 0, FALSE },
+  { "\xbd", -1, 0, FALSE },
+  { "\xbe", -1, 0, FALSE },
+  { "\xbf", -1, 0, FALSE },
+  /* lone start characters */
+  { "\xc0\x20", -1, 0, FALSE },
+  { "\xc1\x20", -1, 0, FALSE },
+  { "\xc2\x20", -1, 0, FALSE },
+  { "\xc3\x20", -1, 0, FALSE },
+  { "\xc4\x20", -1, 0, FALSE },
+  { "\xc5\x20", -1, 0, FALSE },
+  { "\xc6\x20", -1, 0, FALSE },
+  { "\xc7\x20", -1, 0, FALSE },
+  { "\xc8\x20", -1, 0, FALSE },
+  { "\xc9\x20", -1, 0, FALSE },
+  { "\xca\x20", -1, 0, FALSE },
+  { "\xcb\x20", -1, 0, FALSE },
+  { "\xcc\x20", -1, 0, FALSE },
+  { "\xcd\x20", -1, 0, FALSE },
+  { "\xce\x20", -1, 0, FALSE },
+  { "\xcf\x20", -1, 0, FALSE },
+  { "\xd0\x20", -1, 0, FALSE },
+  { "\xd1\x20", -1, 0, FALSE },
+  { "\xd2\x20", -1, 0, FALSE },
+  { "\xd3\x20", -1, 0, FALSE },
+  { "\xd4\x20", -1, 0, FALSE },
+  { "\xd5\x20", -1, 0, FALSE },
+  { "\xd6\x20", -1, 0, FALSE },
+  { "\xd7\x20", -1, 0, FALSE },
+  { "\xd8\x20", -1, 0, FALSE },
+  { "\xd9\x20", -1, 0, FALSE },
+  { "\xda\x20", -1, 0, FALSE },
+  { "\xdb\x20", -1, 0, FALSE },
+  { "\xdc\x20", -1, 0, FALSE },
+  { "\xdd\x20", -1, 0, FALSE },
+  { "\xde\x20", -1, 0, FALSE },
+  { "\xdf\x20", -1, 0, FALSE },
+  { "\xe0\x20", -1, 0, FALSE },
+  { "\xe1\x20", -1, 0, FALSE },
+  { "\xe2\x20", -1, 0, FALSE },
+  { "\xe3\x20", -1, 0, FALSE },
+  { "\xe4\x20", -1, 0, FALSE },
+  { "\xe5\x20", -1, 0, FALSE },
+  { "\xe6\x20", -1, 0, FALSE },
+  { "\xe7\x20", -1, 0, FALSE },
+  { "\xe8\x20", -1, 0, FALSE },
+  { "\xe9\x20", -1, 0, FALSE },
+  { "\xea\x20", -1, 0, FALSE },
+  { "\xeb\x20", -1, 0, FALSE },
+  { "\xec\x20", -1, 0, FALSE },
+  { "\xed\x20", -1, 0, FALSE },
+  { "\xee\x20", -1, 0, FALSE },
+  { "\xef\x20", -1, 0, FALSE },
+  { "\xf0\x20", -1, 0, FALSE },
+  { "\xf1\x20", -1, 0, FALSE },
+  { "\xf2\x20", -1, 0, FALSE },
+  { "\xf3\x20", -1, 0, FALSE },
+  { "\xf4\x20", -1, 0, FALSE },
+  { "\xf5\x20", -1, 0, FALSE },
+  { "\xf6\x20", -1, 0, FALSE },
+  { "\xf7\x20", -1, 0, FALSE },
+  { "\xf8\x20", -1, 0, FALSE },
+  { "\xf9\x20", -1, 0, FALSE },
+  { "\xfa\x20", -1, 0, FALSE },
+  { "\xfb\x20", -1, 0, FALSE },
+  { "\xfc\x20", -1, 0, FALSE },
+  { "\xfd\x20", -1, 0, FALSE },
+  /* missing continuation bytes */
+  { "\x20\xc0", -1, 1, FALSE },
+  { "\x20\xe0\x80", -1, 1, FALSE },
+  { "\x20\xf0\x80\x80", -1, 1, FALSE },
+  { "\x20\xf8\x80\x80\x80", -1, 1, FALSE },
+  { "\x20\xfc\x80\x80\x80\x80", -1, 1, FALSE },
+  { "\x20\xdf", -1, 1, FALSE },
+  { "\x20\xef\xbf", -1, 1, FALSE },
+  { "\x20\xf7\xbf\xbf", -1, 1, FALSE },
+  { "\x20\xfb\xbf\xbf\xbf", -1, 1, FALSE },
+  { "\x20\xfd\xbf\xbf\xbf\xbf", -1, 1, FALSE },
+  /* impossible bytes */
+  { "\x20\xfe\x20", -1, 1, FALSE },
+  { "\x20\xff\x20", -1, 1, FALSE },
+  /* overlong sequences */
+  { "\x20\xc0\xaf\x20", -1, 1, FALSE },
+  { "\x20\xe0\x80\xaf\x20", -1, 1, FALSE },
+  { "\x20\xf0\x80\x80\xaf\x20", -1, 1, FALSE },
+  { "\x20\xf8\x80\x80\x80\xaf\x20", -1, 1, FALSE },
+  { "\x20\xfc\x80\x80\x80\x80\xaf\x20", -1, 1, FALSE },
+  { "\x20\xc1\xbf\x20", -1, 1, FALSE },
+  { "\x20\xe0\x9f\xbf\x20", -1, 1, FALSE },
+  { "\x20\xf0\x8f\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xf8\x87\xbf\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xfc\x83\xbf\xbf\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xc0\x80\x20", -1, 1, FALSE },
+  { "\x20\xe0\x80\x80\x20", -1, 1, FALSE },
+  { "\x20\xf0\x80\x80\x80\x20", -1, 1, FALSE },
+  { "\x20\xf8\x80\x80\x80\x80\x20", -1, 1, FALSE },
+  { "\x20\xfc\x80\x80\x80\x80\x80\x20", -1, 1, FALSE },
+  /* illegal code positions */
+  { "\x20\xed\xa0\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xad\xbf\x20", -1, 1, FALSE },
+  { "\x20\xed\xae\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xaf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xed\xb0\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xbe\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xed\xa0\x80\xed\xb0\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xa0\x80\xed\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xed\xad\xbf\xed\xb0\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xad\xbf\xed\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xed\xae\x80\xed\xb0\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xae\x80\xed\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xed\xaf\xbf\xed\xb0\x80\x20", -1, 1, FALSE },
+  { "\x20\xed\xaf\xbf\xed\xbf\xbf\x20", -1, 1, FALSE },
+  { "\x20\xef\xbf\xbe\x20", -1, 1, FALSE },
+  { "\x20\xef\xbf\xbf\x20", -1, 1, FALSE },
+
+  { NULL, }
+};
+
+static void 
+do_test (gint         index,
+	 const gchar *text, 
+	 gint         max_len,
+	 gint         offset,
+	 gboolean     valid)
+{
+  const gchar *end;
+  gboolean result;
+  
+  result = g_utf8_validate (text, max_len, &end);
+
+  if (result != valid || end - text != offset)
+    {
+      GString *str;
+      const gchar *p;
+
+      any_failed = TRUE;
+      
+      str = g_string_new (0);
+      for (p = text; *p; p++)
+	g_string_append_printf (str, "\\x%02hhx", *p);
+      g_print ("%d: g_utf8_validate (\"%s\", %d) failed, "
+	       "expected %s %d, got %s %d\n",
+	       index,
+	       str->str, max_len, 
+	       valid ? "TRUE" : "FALSE", offset,
+	       result ? "TRUE" : "FALSE", (gint) (end - text));
+      g_string_free (str, FALSE);
+    }
+}
+
+int
+main (int argc, char *argv[])
+{
+  gint i;
+
+  for (i = 0; test[i].text; i++)
+    do_test (i, test[i].text, test[i].max_len, 
+	     test[i].offset, test[i].valid);
+
+  return any_failed ? 1 : 0;
+}
diff --git a/tests/utf8.txt b/tests/utf8.txt
new file mode 100644
index 0000000..3f1f22c
--- /dev/null
+++ b/tests/utf8.txt
@@ -0,0 +1,301 @@
+# This file is derived from 
+#
+#    http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
+#    
+# Which was created by   Markus Kuhn <mkuhn@acm.org> - 2000-09-02 
+#
+# lines begining with # and blank lines are ignored
+#
+# Beyond that, this file consists of a series of test cases. Each test case consists of
+# 2 or 3 lines:
+#
+#  1. A UTF-8 string
+#  2. A status
+#      VALID      : The string is a valid UTF-8 representation of valid Unicode
+#      INCOMPLETE : The string has a partial character at the end
+#      NOTUNICODE : The string is valid UTF-8, but the characters represented
+#                   are not valid unicode (
+#      OVERLONG   : The string includes overlong sequences
+#      MALFORMED  : The string is not valid UTF-8
+# 3. If the status is VALID or NOTUNICODE, the UCS-4 representation of the string,
+#    as a series of hex numbers.
+
+# 1  Some correct UTF-8 text
+κόσμε
+VALID
+03ba 1f79 03c3 03bc 03b5
+
+# 2.1  First possible sequence of a certain length
+#
+# FIXME - handle NULLS?
+#
+# [ NULL BYTE ]
+#VALID
+#0000
+

+VALID
+0080
+
+ࠀ
+VALID
+0800
+
+𐀀
+VALID
+00010000
+
+øˆ€€€
+NOTUNICODE
+00200000
+
+ü„€€€€
+NOTUNICODE
+04000000
+
+
+VALID
+0000007f
+
+߿
+VALID
+000007ff
+
+￿
+NOTUNICODE
+0000ffff
+
+÷¿¿¿
+NOTUNICODE
+001fffff
+
+û¿¿¿¿
+NOTUNICODE
+03ffffff
+
+ý¿¿¿¿¿
+NOTUNICODE
+7fffffff
+
+# 2.3  Other boundary conditions
+
+퟿
+VALID
+d7ff
+
+
+VALID
+e000
+
+�
+VALID
+fffd
+
+􏿽
+VALID
+0010fffd
+
+􏿿
+NOTUNICODE
+0010ffff
+
+ô€€
+NOTUNICODE
+00110000
+
+# 3.1  Unexpected continuation bytes
+

+MALFORMED
+¿
+MALFORMED
+€¿
+MALFORMED
+€¿€
+MALFORMED
+€¿€¿
+MALFORMED
+€¿€¿€
+MALFORMED
+€¿€¿€¿
+MALFORMED
+€¿€¿€¿€
+MALFORMED
+€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
+MALFORMED
+
+# 3.2  Lonely start characters
+
+À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß 
+MALFORMED
+à á â ã ä å æ ç è é ê ë ì í î ï 
+MALFORMED
+ð ñ ò ó ô õ ö ÷ 
+MALFORMED
+ø ù ú û 
+MALFORMED
+ü ý 
+MALFORMED
+
+# 3.3  Sequences with last continuation byte missing
+

+INCOMPLETE
+à€
+INCOMPLETE
+ð€€
+INCOMPLETE
+ø€€€
+INCOMPLETE
+ü€€€€
+INCOMPLETE

+INCOMPLETE
+ï¿
+INCOMPLETE
+÷¿¿
+INCOMPLETE
+û¿¿¿
+INCOMPLETE
+ý¿¿¿¿
+INCOMPLETE
+
+# 3.4  Concatenation of incomplete sequences
+
+Àà€ð€€ø€€€ü€€€€ßï¿÷¿¿û¿¿¿ý¿¿¿¿
+MALFORMED
+
+# 3.5  Impossible bytes
+

+MALFORMED
+ÿ
+MALFORMED
+þþÿÿ
+MALFORMED
+
+#  Examples of an overlong ASCII character
+
+À¯
+OVERLONG
+à€¯
+OVERLONG
+ð€€¯
+OVERLONG
+ø€€€¯
+OVERLONG
+ü€€€€¯
+OVERLONG
+
+#  Maximum overlong sequences
+
+Á¿
+OVERLONG
+àŸ¿
+OVERLONG
+ð¿¿
+OVERLONG
+ø‡¿¿¿
+OVERLONG
+üƒ¿¿¿¿
+OVERLONG
+
+# Overlong representation of the NUL character
+
+
+OVERLONG
+à€€
+OVERLONG
+ð€€€
+OVERLONG
+ø€€€€
+OVERLONG
+ü€€€€€
+OVERLONG
+
+# Illegal code positions
+
+# Single UTF-16 surrogates
+
+í €
+NOTUNICODE
+d800
+
+í­¿
+NOTUNICODE
+db7f
+
+í®€
+NOTUNICODE
+db80
+
+í¯¿
+NOTUNICODE
+dbff
+
+í°€
+NOTUNICODE
+dc00
+
+í¾€
+NOTUNICODE
+df80
+
+í¿¿
+NOTUNICODE
+dfff
+
+# Paired UTF-16 surrogates
+
+𐀀
+NOTUNICODE
+d800 dc00
+
+𐏿
+NOTUNICODE
+d800 dfff
+
+󯰀
+NOTUNICODE
+db7f dc00
+
+í­¿í¿¿
+NOTUNICODE
+db7f dfff
+
+󰀀
+NOTUNICODE
+db80 dc00
+
+󰏿
+NOTUNICODE
+db80 dfff
+
+􏰀
+NOTUNICODE
+dbff dc00
+
+􏿿
+NOTUNICODE
+dbff dfff
+
+# Other illegal code positions
+
+￾
+NOTUNICODE
+fffe
+
+￿
+NOTUNICODE
+ffff
+
+################
+#
+# Some more tests, not from Markus Kuhn's file
+#
+
+# Mixed plane 0 and higher planes
+
+A𐀀B􏿽C
+VALID
+41 00010000 42 10fffd 43
diff --git a/win32-fixup.pl b/win32-fixup.pl
new file mode 100644
index 0000000..2134c38
--- /dev/null
+++ b/win32-fixup.pl
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+$major = 1;
+$minor = 3;
+$micro = 7;
+$binary_age = 0;
+$interface_age = 0;
+$gettext_package = "glib20";
+$current_minus_age = 0;
+
+sub process_file
+{
+        my $outfilename = shift;
+	my $infilename = $outfilename . ".in";
+	
+	open (INPUT, "< $infilename") || exit 1;
+	open (OUTPUT, "> $outfilename") || exit 1;
+	
+	while (<INPUT>) {
+	    s/\@GLIB_MAJOR_VERSION\@/$major/g;
+	    s/\@GLIB_MINOR_VERSION\@/$minor/g;
+	    s/\@GLIB_MICRO_VERSION\@/$micro/g;
+	    s/\@GLIB_INTERFACE_AGE\@/$interface_age/g;
+	    s/\@GLIB_BINARY_AGE\@/$binary_age/g;
+	    s/\@GETTEXT_PACKAGE\@/$gettext_package/g;
+	    s/\@LT_CURRENT_MINUS_AGE@/$current_minus_age/g;
+	    print OUTPUT;
+	}
+}
+
+process_file ("config.h.win32");
+process_file ("glibconfig.h.win32");
+process_file ("glib/makefile.msc");
+process_file ("glib/glib.rc");
+process_file ("gmodule/makefile.msc");
+process_file ("gmodule/gmodule.rc");
+process_file ("gobject/makefile.msc");
+process_file ("gobject/gobject.rc");
+process_file ("gthread/makefile.msc");
+process_file ("gthread/gthread.rc");
+process_file ("tests/makefile.msc");